diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000..1402ed06 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,7 @@ +root = true + +[*.{kt,kts}] +ktlint_standard_no-unused-imports = disabled +ktlint_standard_no-wildcard-imports = disabled +ij_kotlin_allow_trailing_comma = true +ij_kotlin_allow_trailing_comma_on_call_site = true diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 00000000..ed9f1195 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,10 @@ +version: 2 +updates: + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "weekly" + - package-ecosystem: "gradle" + directory: "/" # Location of package manifests + schedule: + interval: "daily" diff --git a/.github/update_google_play_listing.py b/.github/update_google_play_listing.py new file mode 100644 index 00000000..8a1608ad --- /dev/null +++ b/.github/update_google_play_listing.py @@ -0,0 +1,134 @@ +import httplib2 +import os + +from bs4 import BeautifulSoup + +from googleapiclient.discovery import build +from googleapiclient.errors import ( + HttpError, +) + +from oauth2client.service_account import ServiceAccountCredentials + + +dir = "listing/google/" + + +def load_listing_full_description(folder): + file_path = dir + folder + "/store_description.html" + with open(file_path, 'r') as file: + data = file.read() + return { + 'listing_store_google_full_description': data, + } + + +def load_listing_texts(folder): + file_path = dir + folder + "/store_text.xml" + with open(file_path, 'r') as file: + data = file.read() + # Parse xml to dictionary + soup = BeautifulSoup(data, features="xml") + return {el["name"]: el.string for el in soup.find_all('string')} + + +""" +Load the listings from a folder to a human-accessible +dictionary object. +""" + + +def load_listing(folder): + a = load_listing_full_description(folder) + b = load_listing_texts(folder) + return a | b + + +package_name = "com.artemchep.keyguard" + +language_base = "base" +language_mapping = { + 'uk-UA': 'uk', + 'ca-ES': 'ca', + 'vi-VN': 'vi', +} + +listing_base = load_listing(language_base) +listings = {} + +for folder in os.listdir(dir): + listing = load_listing(folder) + # We check if this listing is different from the base + # listing. If so, we do not want to add it. + if listing == listing_base: + continue + # Fix language tag. + bcp_47_tag = folder.replace("-r", "-") + google_play_tag = language_mapping.get(bcp_47_tag, bcp_47_tag) + # Append. + listings[google_play_tag] = listing + +print("Loaded listings for languages:") +for language in listings.keys(): + print("- " + language) +print() + +credentials = ServiceAccountCredentials.from_json_keyfile_name( + "service-account-google.json", + scopes="https://www.googleapis.com/auth/androidpublisher", +) + +# Create an httplib2.Http object to handle our HTTP requests and authorize +# it with the Credentials. +http = httplib2.Http() +http = credentials.authorize(http) + +service = build("androidpublisher", "v3", http=http) + +print("Uploading:") +edit = service.edits().insert(packageName=package_name).execute() +edit_id = edit["id"] + +for language, listing in listings.items(): + listing_request = { + 'language': language, + 'title': listing["listing_store_google_app_name"], + 'shortDescription': listing["listing_store_google_short_description"], + 'fullDescription': listing["listing_store_google_full_description"], + } + listing_response = None + try: + # See: + # https://developers.google.com/android-publisher/api-ref/rest/v3/edits.listings/patch + listing_response = service.edits()\ + .listings()\ + .patch( + packageName=package_name, + editId=edit_id, + language=language, + body=listing_request, + ).execute() + except HttpError as e: + if e.status_code == 404: + # See: + # https://developers.google.com/android-publisher/api-ref/rest/v3/edits.listings/update + listing_response = service.edits()\ + .listings()\ + .update( + packageName=package_name, + editId=edit_id, + language=language, + body=listing_request, + ).execute() + else: + raise e + print("- " + language + " done!") + + +service.edits()\ + .commit( + packageName=package_name, + editId=edit_id, +).execute() + +print("Success!") diff --git a/.github/update_google_play_listing.requirements.txt b/.github/update_google_play_listing.requirements.txt new file mode 100644 index 00000000..3d55defa --- /dev/null +++ b/.github/update_google_play_listing.requirements.txt @@ -0,0 +1,4 @@ +google-api-python-client +oauth2client +beautifulsoup4 +lxml diff --git a/.github/update_gpm_passkeys_priv_apps.py b/.github/update_gpm_passkeys_priv_apps.py new file mode 100644 index 00000000..2e4c5877 --- /dev/null +++ b/.github/update_gpm_passkeys_priv_apps.py @@ -0,0 +1,14 @@ +import json +import requests + +URL_APPS = "https://www.gstatic.com/gpm-passkeys-privileged-apps/apps.json" + +response = requests.get( + URL_APPS, +) + +json_obj = response.json() +json_text = json.dumps(json_obj, indent=2) + +with open('common/src/commonMain/resources/MR/files/gpm_passkeys_privileged_apps.json', 'w') as f: + f.write(json_text) diff --git a/.github/update_gpm_passkeys_priv_apps.requirements.txt b/.github/update_gpm_passkeys_priv_apps.requirements.txt new file mode 100644 index 00000000..f2293605 --- /dev/null +++ b/.github/update_gpm_passkeys_priv_apps.requirements.txt @@ -0,0 +1 @@ +requests diff --git a/.github/update_justdeleteme.py b/.github/update_justdeleteme.py new file mode 100644 index 00000000..e90df874 --- /dev/null +++ b/.github/update_justdeleteme.py @@ -0,0 +1,35 @@ +import json +import requests + +URL_JDM = "https://raw.githubusercontent.com/jdm-contrib/jdm/master/_data/sites.json" + +response = requests.get( + URL_JDM, +) + +aggr = [] + +for site in response.json(): + entry = { + 'name': site['name'], + 'domains': site.get('domains', []), + } + + def append_if_not_empty(src_key, dst_key): + if src_key in site and site[src_key]: + entry[dst_key] = site[src_key] + + append_if_not_empty('url', 'url') + append_if_not_empty('difficulty', 'difficulty') + append_if_not_empty('notes', 'notes') + # for the extra-asshole websites + append_if_not_empty('email', 'email') + append_if_not_empty('email_subject', 'email_subject') + append_if_not_empty('email_body', 'email_body') + + aggr.append(entry) + +aggr_text = json.dumps(aggr, indent=2) + +with open('common/src/commonMain/resources/MR/files/justdeleteme.json', 'w') as f: + f.write(aggr_text) diff --git a/.github/update_justdeleteme.requirements.txt b/.github/update_justdeleteme.requirements.txt new file mode 100644 index 00000000..f2293605 --- /dev/null +++ b/.github/update_justdeleteme.requirements.txt @@ -0,0 +1 @@ +requests diff --git a/.github/update_justgetmydata.py b/.github/update_justgetmydata.py new file mode 100644 index 00000000..6938c7cd --- /dev/null +++ b/.github/update_justgetmydata.py @@ -0,0 +1,35 @@ +import json +import requests + +URL_JGMD = "https://raw.githubusercontent.com/daviddavo/jgmd/master/_data/sites.json" + +response = requests.get( + URL_JGMD, +) + +aggr = [] + +for site in response.json(): + entry = { + 'name': site['name'], + 'domains': site.get('domains', []), + } + + def append_if_not_empty(src_key, dst_key): + if src_key in site and site[src_key]: + entry[dst_key] = site[src_key] + + append_if_not_empty('url', 'url') + append_if_not_empty('difficulty', 'difficulty') + append_if_not_empty('notes', 'notes') + # for the extra-asshole websites + append_if_not_empty('email', 'email') + append_if_not_empty('email_subject', 'email_subject') + append_if_not_empty('email_body', 'email_body') + + aggr.append(entry) + +aggr_text = json.dumps(aggr, indent=2) + +with open('common/src/commonMain/resources/MR/files/justgetmydata.json', 'w') as f: + f.write(aggr_text) diff --git a/.github/update_justgetmydata.requirements.txt b/.github/update_justgetmydata.requirements.txt new file mode 100644 index 00000000..f2293605 --- /dev/null +++ b/.github/update_justgetmydata.requirements.txt @@ -0,0 +1 @@ +requests diff --git a/.github/update_passkeys.py b/.github/update_passkeys.py new file mode 100644 index 00000000..f96f2ac2 --- /dev/null +++ b/.github/update_passkeys.py @@ -0,0 +1,56 @@ +import json +import requests +import argparse + +parser = argparse.ArgumentParser("update_passkeys") +parser.add_argument("api_key", help="An API Key to access the https://passkeys.directory/ backend.", type=str) +args = parser.parse_args() + +URL_PASSKEYS = "https://apecbgwekadegtkzpwyh.supabase.co/rest/v1/sites" +URL_APIKEY = args.api_key + +response = requests.get( + URL_PASSKEYS, + params={ + 'select': '*', + 'or': '(passkey_signin.eq.true,passkey_mfa.eq.true)', + }, + headers={ + 'apikey': URL_APIKEY, + }, +) + +aggr = [] + +for site in response.json(): + features = [] + entry = { + 'name': site['name'], + 'domain': site['domain'], + 'features': features, + } + + def append_if_not_empty(src_key, dst_key): + if src_key in site and site[src_key]: + entry[dst_key] = site[src_key] + + append_if_not_empty('documentation_link', 'documentation') + append_if_not_empty('setup_link', 'setup') + append_if_not_empty('notes', 'notes') + + # convert features to a list + if site['passkey_mfa']: + features.append('mfa') + if site['passkey_signin']: + features.append('signin') + + aggr.append(entry) + +# Ensure the file is sorted for better +# git diff logs. +aggr.sort(key=lambda x: x['domain']) + +aggr_text = json.dumps(aggr, indent=2) + +with open('common/src/commonMain/resources/MR/files/passkeys.json', 'w') as f: + f.write(aggr_text) diff --git a/.github/update_passkeys.requirements.txt b/.github/update_passkeys.requirements.txt new file mode 100644 index 00000000..f2293605 --- /dev/null +++ b/.github/update_passkeys.requirements.txt @@ -0,0 +1 @@ +requests diff --git a/.github/update_twofactorauth.py b/.github/update_twofactorauth.py new file mode 100644 index 00000000..b6a35903 --- /dev/null +++ b/.github/update_twofactorauth.py @@ -0,0 +1,49 @@ +import re +import json + +from io import BytesIO +from zipfile import ZipFile +from urllib.request import urlopen + +URL_2FA = "https://github.com/2factorauth/twofactorauth/archive/refs/heads/master.zip" + +# Load the zip file without saving it into a file. +response = urlopen(URL_2FA) +archive = ZipFile(BytesIO(response.read())) + +aggr = [] + +# Load each of the json files and save into +# a single json array. +for file in archive.namelist(): + if not re.match(r".+/entries/.+\.json", file): + continue + json_text = archive.read(file).decode('utf-8') + json_obj = json.loads(json_text) + # Flatten the structure. + json_obj_root_key = list(json_obj.keys())[0] + json_obj = json_obj[json_obj_root_key] + # Add name + if not "name" in json_obj: + json_obj["name"] = json_obj_root_key + # Delete unused attributes. + if not "tfa" in json_obj: + continue + if "img" in json_obj: + del json_obj["img"] + if "recovery" in json_obj: + del json_obj["recovery"] + if "keywords" in json_obj: + del json_obj["keywords"] + if "categories" in json_obj: + del json_obj["categories"] + if "contact" in json_obj: + del json_obj["contact"] + if "regions" in json_obj: + del json_obj["regions"] + aggr.append(json_obj) + +aggr_text = json.dumps(aggr, indent=2) + +with open('common/src/commonMain/resources/MR/files/tfa.json', 'w') as f: + f.write(aggr_text) diff --git a/.github/workflows/check_gradle_wrapper.yml b/.github/workflows/check_gradle_wrapper.yml new file mode 100644 index 00000000..c28f646a --- /dev/null +++ b/.github/workflows/check_gradle_wrapper.yml @@ -0,0 +1,25 @@ +name: "✔️ Check Gradle wrapper" + +on: + workflow_dispatch: + push: + branches: + - master + paths: + - 'gradlew*' + - 'gradle/wrapper/**' + pull_request: + branches: + - master + paths: + - 'gradlew*' + - 'gradle/wrapper/**' + +jobs: + check-gradle-wrapper: + name: Check Gradle wrapper + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: "Check Gradle wrapper" + uses: gradle/wrapper-validation-action@v1 diff --git a/.github/workflows/check_licenses.yml b/.github/workflows/check_licenses.yml new file mode 100644 index 00000000..8883bd3d --- /dev/null +++ b/.github/workflows/check_licenses.yml @@ -0,0 +1,36 @@ +name: "✔️ Check Licenses" + +on: + workflow_dispatch: + push: + branches: + - master + paths: + - '**/*.gradle*' + - 'gradle/**' + pull_request: + branches: + - master + paths: + - '**/*.gradle*' + - 'gradle/**' + +jobs: + check-licenses: + name: Check Licenses + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: "Set up JDK 17" + id: setup-java + uses: actions/setup-java@v4 + with: + distribution: 'temurin' + java-version: '17' + cache: 'gradle' + - name: "Check licenses" + uses: eskatos/gradle-command-action@v2 + env: + JAVA_HOME: ${{ steps.setup-java.outputs.path }} + with: + arguments: licensee diff --git a/.github/workflows/new_daily_tag.yaml b/.github/workflows/new_daily_tag.yaml new file mode 100644 index 00000000..947eba9d --- /dev/null +++ b/.github/workflows/new_daily_tag.yaml @@ -0,0 +1,33 @@ +name: "🤖 Daily tag" + +on: + workflow_dispatch: + schedule: + - cron: '0 0 * * *' + +jobs: + new-tag: + name: New tag + runs-on: ubuntu-latest + steps: + - name: "Checkout" + uses: actions/checkout@v4 + with: + fetch-depth: 0 + token: ${{ secrets.PERSONAL_TOKEN }} + - name: "Create a new daily tag" + run: | + tag=d"$(date -u +'%Y%m%d')" + echo "Name of a new tag is $tag" + tag_commit=$(git rev-list -n 1 $(git describe --tags --abbrev=0)) + echo "$tag -> $tag_commit" + master_commit=$(git rev-list -n 1 master) + echo "master -> $master_commit" + # Create a new tag only if the latest tag does not + # point to the same commit as the master branch. + if [ "$tag_commit" != "$master_commit" ]; then + git config user.email github-actions@github.com + git config user.name "${{ github.actor }}" + git tag $tag + git push origin $tag + fi diff --git a/.github/workflows/new_daily_tag_play_store_internal_track.yaml b/.github/workflows/new_daily_tag_play_store_internal_track.yaml new file mode 100644 index 00000000..c28c53d6 --- /dev/null +++ b/.github/workflows/new_daily_tag_play_store_internal_track.yaml @@ -0,0 +1,53 @@ +name: "🤖 Daily tag -> Play Store internal track" + +on: + push: + tags: + - 'd*' + +jobs: + build-play-store-internal: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: "Set up JDK 17" + id: setup-java + uses: actions/setup-java@v4 + with: + distribution: 'temurin' + java-version: '17' + cache: 'gradle' + - id: vars + run: | + echo ::set-output name=tag::${GITHUB_REF:11} + - name: "Prepare env" + run: | + echo ${{ secrets.KEYSTORE_B64 }} | base64 -d | zcat >> androidApp/keyguard-release.keystore + echo ${{ secrets.KEYSTORE_PROPS_B64 }} | base64 -d | zcat >> androidApp/keyguard-release.properties + echo ${{ secrets.GOOGLE_SERVICES }} | base64 -d | zcat >> androidApp/google-services.json + echo ${{ secrets.SERVICE_ACCOUNT_B64 }} | base64 -d | zcat >> service-account-google.json + echo "" >> gradle.properties + echo versionDate=${{ steps.vars.outputs.tag }} >> gradle.properties + echo buildkonfig.flavor=release >> gradle.properties + - name: "Check and Build licenses" + uses: eskatos/gradle-command-action@v2 + env: + JAVA_HOME: ${{ steps.setup-java.outputs.path }} + with: + arguments: :androidApp:licenseeAndroidPlayStoreRelease + - name: "Move licenses" + run: | + mv -f androidApp/build/reports/licensee/androidPlayStoreRelease/artifacts.json common/src/commonMain/resources/MR/files/licenses.json + - name: "Build release bundle" + uses: eskatos/gradle-command-action@v2 + env: + JAVA_HOME: ${{ steps.setup-java.outputs.path }} + with: + arguments: :androidApp:bundlePlayStoreRelease + - name: "Distribute on Play Store" + uses: r0adkll/upload-google-play@v1.1.2 + with: + serviceAccountJson: service-account-google.json + packageName: com.artemchep.keyguard + releaseFiles: androidApp/build/outputs/bundle/playStoreRelease/androidApp-playStore-release.aab + track: internal diff --git a/.github/workflows/new_tag_release.yaml b/.github/workflows/new_tag_release.yaml new file mode 100644 index 00000000..b4a668ff --- /dev/null +++ b/.github/workflows/new_tag_release.yaml @@ -0,0 +1,232 @@ +name: "🎉 Release tag -> GitHub release" + +on: + push: + tags: + - 'r*' + +jobs: + build-macos-app: + runs-on: macos-12 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + steps: + - name: "Checkout" + uses: actions/checkout@v4 + with: + lfs: true + submodules: recursive + - name: "Set up JDK 17" + id: setup-java + uses: actions/setup-java@v4 + with: + distribution: 'temurin' + java-version: '17' + cache: 'gradle' + - name: "Decode signing certificate" + run: | + echo ${{ secrets.CERT_B64 }} | base64 -d | zcat > desktopApp/macos-dev.cer + - name: "Import signing certificate" + uses: apple-actions/import-codesign-certs@v2 + with: + p12-filepath: desktopApp/macos-dev.cer + p12-password: ${{ secrets.CERT_PASSWD }} + - name: "Setup build env" + run: | + echo "" >> gradle.properties + echo buildkonfig.flavor=release >> gradle.properties + - name: "Setup signing config" + run: | + echo "" >> gradle.properties + echo "cert_identity=${{ secrets.CERT_IDENTITY }}" >> gradle.properties + - name: "Setup notarization config" + run: | + echo "" >> gradle.properties + echo "notarization_apple_id=${{ secrets.NOTARIZATION_APPLE_ID }}" >> gradle.properties + echo "notarization_password=${{ secrets.NOTARIZATION_PASSWD }}" >> gradle.properties + echo "notarization_asc_provider=${{ secrets.NOTARIZATION_ASC_PROVIDER }}" >> gradle.properties + - name: "./gradlew :desktopApp:packageDmg :desktopApp:notarizeDmg" + uses: eskatos/gradle-command-action@v2 + env: + JAVA_HOME: ${{ steps.setup-java.outputs.path }} + with: + arguments: "-PexcludeAppImage=true :desktopApp:packageDmg :desktopApp:notarizeDmg" + - name: 'Upload logs' + uses: actions/upload-artifact@v4 + if: always() + with: + name: logs-mac + path: desktopApp/build/compose/logs/**/*.txt + retention-days: 30 + - name: 'Upload .dmg' + uses: actions/upload-artifact@v4 + with: + name: app-mac + path: desktopApp/build/compose/binaries/main/dmg/*.dmg + retention-days: 1 + build-linux-flatpak-app: + runs-on: ubuntu-latest + container: + image: bilelmoussaoui/flatpak-github-actions:gnome-45 + options: --privileged + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + steps: + - name: "Checkout" + uses: actions/checkout@v4 + with: + lfs: true + submodules: recursive + - name: "Set up JDK 17" + id: setup-java + uses: actions/setup-java@v4 + with: + distribution: 'temurin' + java-version: '17' + cache: 'gradle' + - name: "Setup build env" + run: | + echo "" >> gradle.properties + echo buildkonfig.flavor=release >> gradle.properties + - name: "./gradlew :desktopApp:bundleFlatpak" + uses: eskatos/gradle-command-action@v2 + env: + JAVA_HOME: ${{ steps.setup-java.outputs.path }} + with: + arguments: ":desktopApp:bundleFlatpak" + - name: 'Upload .flatpak' + uses: actions/upload-artifact@v4 + with: + name: app-linux-flatpak + path: desktopApp/build/flatpak/Keyguard.flatpak + retention-days: 1 + build-windows-app: + runs-on: windows-latest + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + steps: + - name: "Checkout" + uses: actions/checkout@v4 + with: + lfs: true + submodules: recursive + - name: "Set up JDK 17" + id: setup-java + uses: actions/setup-java@v4 + with: + distribution: 'temurin' + java-version: | + 11 + 17 + cache: 'gradle' + - name: "Setup build env" + run: | + echo "" >> gradle.properties + echo buildkonfig.flavor=release >> gradle.properties + - name: "./gradlew :desktopApp:packageMsi" + uses: eskatos/gradle-command-action@v2 + env: + JAVA_HOME: ${{ steps.setup-java.outputs.path }} + with: + arguments: ":desktopApp:packageMsi" + - name: 'Upload .msi' + uses: actions/upload-artifact@v4 + with: + name: app-windows + path: desktopApp/build/compose/binaries/main/msi/*.msi + retention-days: 1 + build-android-app: + runs-on: ubuntu-latest + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + steps: + - uses: actions/checkout@v4 + - name: "Set up JDK 17" + id: setup-java + uses: actions/setup-java@v4 + with: + distribution: 'temurin' + java-version: '17' + cache: 'gradle' + - id: vars + run: | + echo ::set-output name=tag::${GITHUB_REF:11} + - name: "Prepare env" + run: | + echo ${{ secrets.KEYSTORE_B64 }} | base64 -d | zcat >> androidApp/keyguard-release.keystore + echo ${{ secrets.KEYSTORE_PROPS_B64 }} | base64 -d | zcat >> androidApp/keyguard-release.properties + echo ${{ secrets.GOOGLE_SERVICES }} | base64 -d | zcat >> androidApp/google-services.json + echo "" >> gradle.properties + echo versionDate=${{ steps.vars.outputs.tag }} >> gradle.properties + echo buildkonfig.flavor=release >> gradle.properties + - name: "Check and Build licenses" + uses: eskatos/gradle-command-action@v2 + env: + JAVA_HOME: ${{ steps.setup-java.outputs.path }} + with: + arguments: :androidApp:licenseeAndroidNoneRelease + - name: "Move licenses" + run: | + mv -f androidApp/build/reports/licensee/androidNoneRelease/artifacts.json common/src/commonMain/resources/MR/files/licenses.json + - name: "./gradlew :androidApp:assembleNoneRelease" + uses: eskatos/gradle-command-action@v2 + env: + JAVA_HOME: ${{ steps.setup-java.outputs.path }} + with: + arguments: :androidApp:assembleNoneRelease + - name: 'Upload .apk' + uses: actions/upload-artifact@v4 + with: + name: app-android + path: | + androidApp/build/outputs/apk/**/*.apk + androidApp/build/outputs/mapping/**/mapping.txt + retention-days: 1 + dist: + runs-on: ubuntu-latest + needs: + - build-android-app + - build-linux-flatpak-app + - build-macos-app + - build-windows-app + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + steps: + - name: "Checkout" + uses: actions/checkout@v4 + with: + submodules: recursive + - name: "Generate changelog" + id: changelog + uses: metcalfc/changelog-generator@v4.2.0 + with: + myToken: ${{ secrets.GITHUB_TOKEN }} + - name: "Download Mac app" + uses: actions/download-artifact@v4 + with: + name: app-mac + path: artifacts + - name: "Download Linux app" + uses: actions/download-artifact@v4 + with: + name: app-linux-flatpak + path: artifacts + - name: "Download Windows app" + uses: actions/download-artifact@v4 + with: + name: app-windows + path: artifacts + - name: "Download Android app" + uses: actions/download-artifact@v4 + with: + name: app-android + path: artifacts + - name: "Create release" + uses: softprops/action-gh-release@v1 + if: startsWith(github.ref, 'refs/tags/') + with: + name: Release ${{ github.ref }} + body: ${{ steps.changelog.outputs.changelog }} + token: ${{ secrets.GITHUB_TOKEN }} + files: | + artifacts/* diff --git a/.github/workflows/update_gpm_passkeys_priv_apps.yml b/.github/workflows/update_gpm_passkeys_priv_apps.yml new file mode 100644 index 00000000..093f3841 --- /dev/null +++ b/.github/workflows/update_gpm_passkeys_priv_apps.yml @@ -0,0 +1,50 @@ +name: "🕒 Synchronize GPM Credential Privileged Apps" + +on: + workflow_dispatch: + push: + branches: + - master + paths: + # Configuration. + - '.github/update_gpm_passkeys_priv_apps.py' + - '.github/update_gpm_passkeys_priv_apps.requirements.txt' + schedule: + - cron: '0 0 * * 5' + +jobs: + sync-gpm-passkeys-priv-apps: + name: Synchronize GPM Credential Privileged Apps + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - run: pip install -r .github/update_gpm_passkeys_priv_apps.requirements.txt + - name: "Update library" + run: | + python .github/update_gpm_passkeys_priv_apps.py + - name: "Check if any changes" + id: check-changes + run: | + has_changes=$(if [ -n "$(git status --porcelain)" ]; then echo "true"; else echo "false"; fi) + echo "$has_changes" + echo "{HAS_CHANGES}={$has_changes}" >> "$GITHUB_OUTPUT" + - name: Commit and push changes + uses: devops-infra/action-commit-push@v0.9.2 + if: ${{ startsWith(steps.check-changes.outputs.HAS_CHANGES, 'true') }} + with: + github_token: "${{ secrets.PERSONAL_TOKEN }}" + add_timestamp: false + commit_prefix: "[AUTO]" + commit_message: "Update GPM Credential Privileged Apps JSON" + force: true + target_branch: gpmpasskeysprivapps_action + - name: Create pull request + uses: devops-infra/action-pull-request@v0.5.5 + if: ${{ startsWith(steps.check-changes.outputs.HAS_CHANGES, 'true') }} + with: + github_token: "${{ secrets.PERSONAL_TOKEN }}" + source_branch: gpmpasskeysprivapps_action + target_branch: master + assignee: AChep + label: "robot,enhancement" + title: New GPM Credential Privileged Apps by GitHub Action diff --git a/.github/workflows/update_justdeleteme.yml b/.github/workflows/update_justdeleteme.yml new file mode 100644 index 00000000..16cf058c --- /dev/null +++ b/.github/workflows/update_justdeleteme.yml @@ -0,0 +1,50 @@ +name: "🕒 Synchronize Just delete me" + +on: + workflow_dispatch: + push: + branches: + - master + paths: + # Configuration. + - '.github/update_justdeleteme.py' + - '.github/update_justdeleteme.requirements.txt' + schedule: + - cron: '0 0 * * 5' + +jobs: + sync-passkeys: + name: Synchronize Just delete me + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - run: pip install -r .github/update_justdeleteme.requirements.txt + - name: "Update library" + run: | + python .github/update_justdeleteme.py + - name: "Check if any changes" + id: check-changes + run: | + has_changes=$(if [ -n "$(git status --porcelain)" ]; then echo "true"; else echo "false"; fi) + echo "$has_changes" + echo "{HAS_CHANGES}={$has_changes}" >> "$GITHUB_OUTPUT" + - name: Commit and push changes + uses: devops-infra/action-commit-push@v0.9.2 + if: ${{ startsWith(steps.check-changes.outputs.HAS_CHANGES, 'true') }} + with: + github_token: "${{ secrets.PERSONAL_TOKEN }}" + add_timestamp: false + commit_prefix: "[AUTO]" + commit_message: "Update justdeleteme library" + force: true + target_branch: justdeleteme_action + - name: Create pull request + uses: devops-infra/action-pull-request@v0.5.5 + if: ${{ startsWith(steps.check-changes.outputs.HAS_CHANGES, 'true') }} + with: + github_token: "${{ secrets.PERSONAL_TOKEN }}" + source_branch: justdeleteme_action + target_branch: master + assignee: AChep + label: "robot,enhancement" + title: New Just delete me by GitHub Action diff --git a/.github/workflows/update_justgetmydata.yml b/.github/workflows/update_justgetmydata.yml new file mode 100644 index 00000000..1d1ce4f2 --- /dev/null +++ b/.github/workflows/update_justgetmydata.yml @@ -0,0 +1,50 @@ +name: "🕒 Synchronize Just get my data" + +on: + workflow_dispatch: + push: + branches: + - master + paths: + # Configuration. + - '.github/update_justgetmydata.py' + - '.github/update_justgetmydata.requirements.txt' + schedule: + - cron: '0 0 * * 5' + +jobs: + sync-passkeys: + name: Synchronize Just get my data + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - run: pip install -r .github/update_justgetmydata.requirements.txt + - name: "Update library" + run: | + python .github/update_justgetmydata.py + - name: "Check if any changes" + id: check-changes + run: | + has_changes=$(if [ -n "$(git status --porcelain)" ]; then echo "true"; else echo "false"; fi) + echo "$has_changes" + echo "{HAS_CHANGES}={$has_changes}" >> "$GITHUB_OUTPUT" + - name: Commit and push changes + uses: devops-infra/action-commit-push@v0.9.2 + if: ${{ startsWith(steps.check-changes.outputs.HAS_CHANGES, 'true') }} + with: + github_token: "${{ secrets.PERSONAL_TOKEN }}" + add_timestamp: false + commit_prefix: "[AUTO]" + commit_message: "Update justgetmydata library" + force: true + target_branch: justgetmydata_action + - name: Create pull request + uses: devops-infra/action-pull-request@v0.5.5 + if: ${{ startsWith(steps.check-changes.outputs.HAS_CHANGES, 'true') }} + with: + github_token: "${{ secrets.PERSONAL_TOKEN }}" + source_branch: justgetmydata_action + target_branch: master + assignee: AChep + label: "robot,enhancement" + title: New Just get my data by GitHub Action diff --git a/.github/workflows/update_listing_google.yml b/.github/workflows/update_listing_google.yml new file mode 100644 index 00000000..c722846a --- /dev/null +++ b/.github/workflows/update_listing_google.yml @@ -0,0 +1,26 @@ +name: "🌐 Upload Google Play Store listing" + +on: + workflow_dispatch: + push: + branches: + - master + paths: + - 'listing/google/**' + # Configuration. + - '.github/update_google_play_listing.py' + - '.github/update_google_play_listing.requirements.py' + +jobs: + sync-google-listing: + name: Upload Google Play Store listing + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - run: pip install -r .github/update_google_play_listing.requirements.txt + - name: "Setup secrets" + run: | + echo ${{ secrets.SERVICE_ACCOUNT_B64 }} | base64 -d | zcat >> service-account-google.json + - name: "Update listing" + run: | + python .github/update_google_play_listing.py diff --git a/.github/workflows/update_localization.yml b/.github/workflows/update_localization.yml new file mode 100644 index 00000000..685a9a31 --- /dev/null +++ b/.github/workflows/update_localization.yml @@ -0,0 +1,35 @@ +name: "🌐 Synchronize Localization" + +on: + workflow_dispatch: + push: + branches: + - master + paths: + - 'common/src/commonMain/resources/MR/base/*.xml' + - 'listing/google/base/*.html' + - 'listing/google/base/*.xml' + # Configuration. + - 'crowdin.yml' + +jobs: + sync-localization: + name: Synchronize Crowdin Translations + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: crowdin/github-action@v1 + with: + upload_sources: true + # We only want to upload the sources, nothing else is + # supported. + upload_translations: false + download_translations: true + create_pull_request: true + pull_request_labels: 'robot,enhancement' + pull_request_assignees: 'AChep' + config: 'crowdin.yml' + env: + GITHUB_TOKEN: ${{ secrets.PERSONAL_TOKEN }} + CROWDIN_PROJECT_ID: ${{ secrets.CROWDIN_PROJECT_ID }} + CROWDIN_PERSONAL_TOKEN: ${{ secrets.CROWDIN_PERSONAL_TOKEN }} diff --git a/.github/workflows/update_passkeys.yml b/.github/workflows/update_passkeys.yml new file mode 100644 index 00000000..cd34cb65 --- /dev/null +++ b/.github/workflows/update_passkeys.yml @@ -0,0 +1,50 @@ +name: "🕒 Synchronize Passkeys" + +on: + workflow_dispatch: + push: + branches: + - master + paths: + # Configuration. + - '.github/update_passkeys.py' + - '.github/update_passkeys.requirements.txt' + schedule: + - cron: '0 0 * * 5' + +jobs: + sync-passkeys: + name: Synchronize Passkeys + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - run: pip install -r .github/update_passkeys.requirements.txt + - name: "Update library" + run: | + python .github/update_passkeys.py "${{ secrets.PASSKEYS_API_KEY }}" + - name: "Check if any changes" + id: check-changes + run: | + has_changes=$(if [ -n "$(git status --porcelain)" ]; then echo "true"; else echo "false"; fi) + echo "$has_changes" + echo "{HAS_CHANGES}={$has_changes}" >> "$GITHUB_OUTPUT" + - name: Commit and push changes + uses: devops-infra/action-commit-push@v0.9.2 + if: ${{ startsWith(steps.check-changes.outputs.HAS_CHANGES, 'true') }} + with: + github_token: "${{ secrets.PERSONAL_TOKEN }}" + add_timestamp: false + commit_prefix: "[AUTO]" + commit_message: "Update passkeys library" + force: true + target_branch: passkeys_action + - name: Create pull request + uses: devops-infra/action-pull-request@v0.5.5 + if: ${{ startsWith(steps.check-changes.outputs.HAS_CHANGES, 'true') }} + with: + github_token: "${{ secrets.PERSONAL_TOKEN }}" + source_branch: passkeys_action + target_branch: master + assignee: AChep + label: "robot,enhancement" + title: New Passkeys by GitHub Action diff --git a/.github/workflows/update_tld.yml b/.github/workflows/update_tld.yml new file mode 100644 index 00000000..94495881 --- /dev/null +++ b/.github/workflows/update_tld.yml @@ -0,0 +1,43 @@ +name: "🕒 Synchronize TLD public suffix list" + +on: + workflow_dispatch: + schedule: + - cron: '0 0 * * 5' + +jobs: + sync-tld: + name: Synchronize TLD public suffix list + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: "Update data" + run: | + wget https://publicsuffix.org/list/public_suffix_list.dat + mv -f public_suffix_list.dat common/src/commonMain/resources/MR/files/public_suffix_list.txt + - name: "Check if any changes" + id: check-changes + run: | + has_changes=$(if [ -n "$(git status --porcelain)" ]; then echo "true"; else echo "false"; fi) + echo "$has_changes" + echo "{HAS_CHANGES}={$has_changes}" >> "$GITHUB_OUTPUT" + - name: Commit and push changes + uses: devops-infra/action-commit-push@v0.9.2 + if: ${{ startsWith(steps.check-changes.outputs.HAS_CHANGES, 'true') }} + with: + github_token: "${{ secrets.PERSONAL_TOKEN }}" + add_timestamp: false + commit_prefix: "[AUTO]" + commit_message: "Update Public suffix list" + force: true + target_branch: tld_public_suffix_list_action + - name: Create pull request + uses: devops-infra/action-pull-request@v0.5.5 + if: ${{ startsWith(steps.check-changes.outputs.HAS_CHANGES, 'true') }} + with: + github_token: "${{ secrets.PERSONAL_TOKEN }}" + source_branch: tld_public_suffix_list_action + target_branch: master + assignee: AChep + label: "robot,enhancement" + title: New Public suffix list by GitHub Action diff --git a/.github/workflows/update_twofactorauth.yml b/.github/workflows/update_twofactorauth.yml new file mode 100644 index 00000000..20a6821b --- /dev/null +++ b/.github/workflows/update_twofactorauth.yml @@ -0,0 +1,48 @@ +name: "🕒 Synchronize Two-factor auth" + +on: + workflow_dispatch: + push: + branches: + - master + paths: + # Configuration. + - '.github/update_twofactorauth.py' + schedule: + - cron: '0 0 * * 5' + +jobs: + sync-2fa: + name: Synchronize Two-factor authentication + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: "Update library" + run: | + python .github/update_twofactorauth.py + - name: "Check if any changes" + id: check-changes + run: | + has_changes=$(if [ -n "$(git status --porcelain)" ]; then echo "true"; else echo "false"; fi) + echo "$has_changes" + echo "{HAS_CHANGES}={$has_changes}" >> "$GITHUB_OUTPUT" + - name: Commit and push changes + uses: devops-infra/action-commit-push@v0.9.2 + if: ${{ startsWith(steps.check-changes.outputs.HAS_CHANGES, 'true') }} + with: + github_token: "${{ secrets.PERSONAL_TOKEN }}" + add_timestamp: false + commit_prefix: "[AUTO]" + commit_message: "Update two-factor auth library" + force: true + target_branch: tfa_2factorauth_action + - name: Create pull request + uses: devops-infra/action-pull-request@v0.5.5 + if: ${{ startsWith(steps.check-changes.outputs.HAS_CHANGES, 'true') }} + with: + github_token: "${{ secrets.PERSONAL_TOKEN }}" + source_branch: tfa_2factorauth_action + target_branch: master + assignee: AChep + label: "robot,enhancement" + title: New Two-factor auth by GitHub Action diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..1419e03c --- /dev/null +++ b/.gitignore @@ -0,0 +1,61 @@ +*.DS_Store + +# Built application files +*.apk +*.ap_ + +# Files for the ART/Dalvik VM +*.dex + +# Java class files +*.class + +# Generated files +bin/ +gen/ +out/ + +# Gradle files +.gradle/ +build/ + +# Local configuration file (sdk path, etc) +local.properties + +# Proguard folder generated by Eclipse +proguard/ + +# Log Files +*.log + +# Android Studio Navigation editor temp files +.navigation/ + +# Android Studio captures folder +captures/ + +# IntelliJ +*.iml +.idea/ + +# Keystore files +# Uncomment the following line if you do not want to check your keystore files in. +#*.jks + +# External native build folder generated in Android Studio 2.2 and later +.externalNativeBuild + +# Google Services (e.g. APIs or Firebase) +google-services.json + +# Freeline +freeline.py +freeline/ +freeline_project_description.json + +# fastlane +fastlane/report.xml +fastlane/Preview.html +fastlane/screenshots +fastlane/test_output +fastlane/readme.md \ No newline at end of file diff --git a/LICENSE b/LICENSE new file mode 100644 index 00000000..66f72e40 --- /dev/null +++ b/LICENSE @@ -0,0 +1 @@ +All Rights Reserved diff --git a/README.md b/README.md index 2565cdbc..e787232b 100644 --- a/README.md +++ b/README.md @@ -14,8 +14,19 @@ _Can be used with any Bitwarden® installation. This product is not associated w #### Highlights: - a beautiful rich **Material You** user interface; - a **powerful** and **fast search**; -- a watchtower that finds items with **Pwned passwords**, **Vulnerable accounts**, **Reused passwords**, **Inactive two factor authentication**, **Inactive passkeys**, **Unsecure Websites** as well as **Duplicate**, **Incomplete** and **Expiring** items, and other; +- a support for creating & using **passkeys** - a modern alternative to passwords. +- a watchtower that finds items with **Pwned passwords**, **Vulnerable accounts**, **Reused passwords**, **Inactive two factor authentication**, **Inactive passkeys**, **Unsecure Websites** as well as **Duplicate**, **Incomplete** and **Expiring** items, and other; - **multi-account support** with secure login and two-factor authentication support; - add items, modify, and view your vault **offline**. - beautiful **Light**/**Dark theme**; - and much more! + +#### Looks: +| | | | +| :----: | :----: | :----: | +| ![1](https://github.com/AChep/keyguard-app/blob/master/screenshots/phone/Screenshot_20230928_233006.png) | ![2](https://github.com/AChep/keyguard-app/blob/master/screenshots/phone/Screenshot_20230928_233040.png) | ![3](https://github.com/AChep/keyguard-app/blob/master/screenshots/phone/Screenshot_20230928_233118.png) | +| ![4](https://github.com/AChep/keyguard-app/blob/master/screenshots/phone/Screenshot_20230928_233159.png) | ![5](https://github.com/AChep/keyguard-app/blob/master/screenshots/phone/Screenshot_20230928_233236.png) | ![6](https://github.com/AChep/keyguard-app/blob/master/screenshots/phone/Screenshot_20230928_233342.png) | + +## License: + +The source code is available for **personal use** only. diff --git a/androidApp/.gitignore b/androidApp/.gitignore new file mode 100644 index 00000000..ae2e6b2c --- /dev/null +++ b/androidApp/.gitignore @@ -0,0 +1,7 @@ +/build + +# Ignore production keys from being +# include into the source system. +keyguard-release* +# Ignore google-services.json +google-services.json diff --git a/androidApp/benchmark-rules.pro b/androidApp/benchmark-rules.pro new file mode 100644 index 00000000..c45fa5fd --- /dev/null +++ b/androidApp/benchmark-rules.pro @@ -0,0 +1,2 @@ +# Disables obfuscation for benchmark builds. +-dontobfuscate diff --git a/androidApp/build.gradle.kts b/androidApp/build.gradle.kts new file mode 100644 index 00000000..436a737b --- /dev/null +++ b/androidApp/build.gradle.kts @@ -0,0 +1,158 @@ +import java.io.FileInputStream +import java.util.* + +plugins { + alias(libs.plugins.android.application) + alias(libs.plugins.kotlin.android) + alias(libs.plugins.kotlin.kapt) + alias(libs.plugins.kotlin.plugin.parcelize) + alias(libs.plugins.kotlin.plugin.serialization) + alias(libs.plugins.compose) + alias(libs.plugins.ksp) + alias(libs.plugins.ktlint) + alias(libs.plugins.google.services) + alias(libs.plugins.crashlytics) + alias(libs.plugins.baseline.profile) +} + +fun loadProps(fileName: String): Properties { + val props = Properties() + val file = file(fileName) + if (file.exists()) { + var stream: FileInputStream? = null + try { + stream = file.inputStream() + props.load(stream) + } finally { + stream?.close() + } + } + return props +} + +val versionInfo = createVersionInfo( + marketingVersion = libs.versions.appVersionName.get(), + logicalVersion = libs.versions.appVersionCode.get().toInt(), +) + +val qaSigningProps = loadProps("keyguard-qa.properties") +val releaseSigningProps = loadProps("keyguard-release.properties") + +android { + compileSdk = libs.versions.androidCompileSdk.get().toInt() + namespace = "com.artemchep.keyguard" + + defaultConfig { + applicationId = "com.artemchep.keyguard" + minSdk = libs.versions.androidMinSdk.get().toInt() + targetSdk = libs.versions.androidTargetSdk.get().toInt() + + versionCode = versionInfo.logicalVersion + versionName = versionInfo.marketingVersion + + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + vectorDrawables { + useSupportLibrary = true + } + + kotlinOptions { + freeCompilerArgs += listOf( + "-opt-in=androidx.compose.material.ExperimentalMaterialApi", + ) + } + } + + compileOptions { + isCoreLibraryDesugaringEnabled = true + } + + androidResources { + @Suppress("UnstableApiUsage") + generateLocaleConfig = true + } + + bundle { + language { + enableSplit = false + } + } + + // previous-compilation-data.bin is Gradle's internal machinery for the incremental compilation + // that seemed to be packed into the resulting artifact because the lib is depending directly + // on the compilation task's output for JPMS/Multi-Release JAR support. + // + // > A failure occurred while executing com.android.build.gradle.internal.tasks.MergeJavaResWorkAction + // > 2 files found with path 'META-INF/versions/9/previous-compilation-data.bin' from inputs: + // - /home/runner/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlinx/kotlinx-datetime-jvm/0.4.1/684eec210b21e2da7382a4aa85e56fb7b71f39b3/kotlinx-datetime-jvm-0.4.1.jar + // - /home/runner/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlinx/atomicfu-jvm/0.22.0/c6a128a44ba52a18265e5ec816130cd341d80792/atomicfu-jvm-0.22.0.jar + packagingOptions { + resources.excludes.add("META-INF/versions/9/previous-compilation-data.bin") + } + + buildFeatures { + buildConfig = true + } + + signingConfigs { + maybeCreate("debug").apply { + keyAlias = qaSigningProps.getProperty("key_alias") + keyPassword = qaSigningProps.getProperty("password_store") + storeFile = file("keyguard-qa.keystore") + storePassword = qaSigningProps.getProperty("password_key") + } + maybeCreate("release").apply { + keyAlias = releaseSigningProps.getProperty("key_alias") + keyPassword = releaseSigningProps.getProperty("password_store") + storeFile = file("keyguard-release.keystore") + storePassword = releaseSigningProps.getProperty("password_key") + } + } + + buildTypes { + debug { + applicationIdSuffix = ".debug" + } + release { + isMinifyEnabled = true + signingConfig = signingConfigs.getByName("release") + proguardFiles( + getDefaultProguardFile("proguard-android-optimize.txt"), + "proguard-rules.pro", + ) + } + maybeCreate("benchmark").apply { + initWith(getByName("release")) + signingConfig = signingConfigs.getByName("debug") + // Selects release buildType if the 'benchmark' + // buildType not available in other modules. + matchingFallbacks += "release" + // Do not obfuscate + proguardFiles( + "benchmark-rules.pro", + ) + } + } + + val accountManagementDimension = "accountManagement" + flavorDimensions += accountManagementDimension + productFlavors { + maybeCreate("playStore").apply { + dimension = accountManagementDimension + buildConfigField("boolean", "ANALYTICS", "true") + } + maybeCreate("none").apply { + dimension = accountManagementDimension + buildConfigField("boolean", "ANALYTICS", "false") + } + } +} + +dependencies { + implementation(project(":common")) + baselineProfile(project(":androidBenchmark")) + coreLibraryDesugaring(libs.android.desugarjdklibs) +} + +kotlin { + jvmToolchain(libs.versions.jdk.get().toInt()) +} diff --git a/androidApp/keyguard-qa.keystore b/androidApp/keyguard-qa.keystore new file mode 100644 index 00000000..75d7d72e Binary files /dev/null and b/androidApp/keyguard-qa.keystore differ diff --git a/androidApp/keyguard-qa.properties b/androidApp/keyguard-qa.properties new file mode 100644 index 00000000..929919d6 --- /dev/null +++ b/androidApp/keyguard-qa.properties @@ -0,0 +1,3 @@ +key_alias=AChep +password_store=qqQJQ32ENxi9@ffMVx9crTgQ +password_key=qqQJQ32ENxi9@ffMVx9crTgQ diff --git a/androidApp/proguard-rules.pro b/androidApp/proguard-rules.pro new file mode 100644 index 00000000..2f4c9f42 --- /dev/null +++ b/androidApp/proguard-rules.pro @@ -0,0 +1,115 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile + +## +## https://github.com/sqlcipher/sqlcipher-android/issues/18 +## + +-keep class androidx.room.** extends androidx.sqlite.db.SupportSQLiteOpenHelper + +-keep,includedescriptorclasses class net.zetetic.database.** { *; } +-keep,includedescriptorclasses interface net.zetetic.database.** { *; } + +## +## https://github.com/Kotlin/kotlinx.serialization#android +## + +# Keep `Companion` object fields of serializable classes. +# This avoids serializer lookup through `getDeclaredClasses` as done for named companion objects. +-if @kotlinx.serialization.Serializable class ** +-keepclassmembers class <1> { + static <1>$Companion Companion; +} + +# Keep `serializer()` on companion objects (both default and named) of serializable classes. +-if @kotlinx.serialization.Serializable class ** { + static **$* *; +} +-keepclassmembers class <2>$<3> { + kotlinx.serialization.KSerializer serializer(...); +} + +# Keep `INSTANCE.serializer()` of serializable objects. +-if @kotlinx.serialization.Serializable class ** { + public static ** INSTANCE; +} +-keepclassmembers class <1> { + public static <1> INSTANCE; + kotlinx.serialization.KSerializer serializer(...); +} + +# @Serializable and @Polymorphic are used at runtime for polymorphic serialization. +-keepattributes RuntimeVisibleAnnotations,AnnotationDefault + +# Serializer for classes with named companion objects are retrieved using `getDeclaredClasses`. +# If you have any, uncomment and replace classes with those containing named companion objects. +#-keepattributes InnerClasses # Needed for `getDeclaredClasses`. +#-if @kotlinx.serialization.Serializable class +#com.example.myapplication.HasNamedCompanion, # <-- List serializable classes with named companions. +#com.example.myapplication.HasNamedCompanion2 +#{ +# static **$* *; +#} +#-keepnames class <1>$$serializer { # -keepnames suffices; class is kept when serializer() is kept. +# static <1>$$serializer INSTANCE; +#} + +## +## kodein +## + +-keep, allowobfuscation, allowoptimization class org.kodein.type.TypeReference +-keep, allowobfuscation, allowoptimization class org.kodein.type.JVMAbstractTypeToken$Companion$WrappingTest + +-keep, allowobfuscation, allowoptimization class * extends org.kodein.type.TypeReference +-keep, allowobfuscation, allowoptimization class * extends org.kodein.type.JVMAbstractTypeToken$Companion$WrappingTest + +## +## java rx +## + +# https://github.com/ReactiveX/RxJava#r8-and-proguard-settings +-dontwarn java.util.concurrent.Flow* + +## +## signalr +## + +-keep class com.microsoft.signalr.** { *; } +-keep interface com.microsoft.signalr.** { *; } + +## +## messagepack +## + +-keep class org.msgpack.core.buffer.** { *; } + +## +## dont warn +## + +-dontwarn edu.umd.cs.findbugs.annotations.** +-dontwarn java.sql.JDBCType +#-dontwarn okhttp3.internal.platform.** +#-dontwarn org.conscrypt.** +#-dontwarn org.bouncycastle.jsse** +#-dontwarn org.openjsse.** diff --git a/androidApp/src/debug/res/values/strings.xml b/androidApp/src/debug/res/values/strings.xml new file mode 100644 index 00000000..4acb34b8 --- /dev/null +++ b/androidApp/src/debug/res/values/strings.xml @@ -0,0 +1,3 @@ + + KeyDev + \ No newline at end of file diff --git a/androidApp/src/main/AndroidManifest.xml b/androidApp/src/main/AndroidManifest.xml new file mode 100644 index 00000000..386c6b5d --- /dev/null +++ b/androidApp/src/main/AndroidManifest.xml @@ -0,0 +1,44 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/androidApp/src/main/assets/logback.xml b/androidApp/src/main/assets/logback.xml new file mode 100644 index 00000000..61727b43 --- /dev/null +++ b/androidApp/src/main/assets/logback.xml @@ -0,0 +1,14 @@ + + + + %logger{12} + + + [%-20thread] %msg + + + + + + + diff --git a/androidApp/src/main/java/com/artemchep/keyguard/Main.kt b/androidApp/src/main/java/com/artemchep/keyguard/Main.kt new file mode 100644 index 00000000..7bec3291 --- /dev/null +++ b/androidApp/src/main/java/com/artemchep/keyguard/Main.kt @@ -0,0 +1,227 @@ +package com.artemchep.keyguard + +import android.content.Context +import androidx.core.content.ContextCompat +import androidx.lifecycle.ProcessLifecycleOwner +import androidx.lifecycle.lifecycleScope +import com.artemchep.bindin.bindBlock +import com.artemchep.keyguard.android.BaseApp +import com.artemchep.keyguard.android.downloader.journal.DownloadRepository +import com.artemchep.keyguard.android.downloader.worker.AttachmentDownloadAllWorker +import com.artemchep.keyguard.android.passkeysModule +import com.artemchep.keyguard.billing.BillingManager +import com.artemchep.keyguard.billing.BillingManagerImpl +import com.artemchep.keyguard.common.AppWorker +import com.artemchep.keyguard.common.io.* +import com.artemchep.keyguard.common.model.Screen +import com.artemchep.keyguard.common.service.logging.LogRepository +import com.artemchep.keyguard.common.service.power.PowerService +import com.artemchep.keyguard.common.usecase.* +import com.artemchep.keyguard.common.usecase.impl.CleanUpAttachmentImpl +import com.artemchep.keyguard.core.session.diFingerprintRepositoryModule +import com.artemchep.keyguard.common.model.MasterSession +import com.artemchep.keyguard.common.service.vault.KeyReadWriteRepository +import com.artemchep.keyguard.common.model.PersistedSession +import com.artemchep.keyguard.feature.favicon.Favicon +import com.artemchep.keyguard.feature.localization.textResource +import com.artemchep.keyguard.platform.LeContext +import com.artemchep.keyguard.platform.lifecycle.toCommon +import com.artemchep.keyguard.res.Res +import kotlinx.coroutines.* +import kotlinx.coroutines.flow.* +import kotlinx.datetime.Clock +import org.kodein.di.* +import org.kodein.di.android.x.androidXModule +import java.util.* + +class Main : BaseApp(), DIAware { + override val di by DI.lazy { + import(androidXModule(this@Main)) + import(diFingerprintRepositoryModule()) + import(passkeysModule()) + bind() with singleton { + BillingManagerImpl( + context = this@Main, + ) + } + } + + // See: + // https://issuetracker.google.com/issues/243457462 + override fun attachBaseContext(base: Context) { + val updatedContext = ContextCompat.getContextForLanguage(base) + + // Update locale only if needed. + val updatedLocale: Locale = + updatedContext.resources.configuration.locale + if (!Locale.getDefault().equals(updatedLocale)) { + Locale.setDefault(updatedLocale) + } + super.attachBaseContext(updatedContext) + } + + override fun onCreate() { + super.onCreate() + val logRepository: LogRepository by instance() + val getVaultSession: GetVaultSession by instance() + val putVaultSession: PutVaultSession by instance() + val getVaultPersist: GetVaultPersist by instance() + val keyReadWriteRepository: KeyReadWriteRepository by instance() + val clearVaultSession: ClearVaultSession by instance() + val downloadRepository: DownloadRepository by instance() + val cleanUpAttachment: CleanUpAttachment by instance() + val appWorker: AppWorker by instance(tag = AppWorker.Feature.SYNC) +// val cleanUpDownload: CleanUpDownloadImpl by instance() + + val processLifecycleOwner = ProcessLifecycleOwner.get() + val processLifecycle = processLifecycleOwner.lifecycle + val processLifecycleFlow = processLifecycle + .currentStateFlow + // Convert to platform agnostic + // lifecycle state. + .map { state -> + state.toCommon() + } + processLifecycleOwner.lifecycleScope.launch { + appWorker.launch(this, processLifecycleFlow) + } + + AttachmentDownloadAllWorker.enqueue(this) + + // attachment clean-up + ProcessLifecycleOwner.get().bindBlock { + coroutineScope { + CleanUpAttachmentImpl.zzz( + scope = this, + downloadRepository = downloadRepository, + cleanUpAttachment = cleanUpAttachment, + ) + } + } + + // favicon + ProcessLifecycleOwner.get().bindBlock { + getVaultSession() + .map { session -> + val key = session as? MasterSession.Key + key?.di?.direct?.instance() + } + .collectLatest { getAccounts -> + if (getAccounts != null) { + coroutineScope { + Favicon.launch(this, getAccounts) + } + } + } + } + + // persist + ProcessLifecycleOwner.get().bindBlock { + combine( + getVaultSession(), + getVaultPersist(), + ) { session, persist -> + val persistedMasterKey = if (persist && session is MasterSession.Key) { + session.masterKey + } else { + null + } + persistedMasterKey + } + .onEach { masterKey -> + val persistedSession = if (masterKey != null) { + PersistedSession( + masterKey = masterKey, + createdAt = Clock.System.now(), + persistedAt = Clock.System.now(), + ) + } else { + null + } + keyReadWriteRepository.put(persistedSession).bind() + } + .collect() + } + + // timeout + var timeoutJob: Job? = null + val getVaultLockAfterTimeout: GetVaultLockAfterTimeout by instance() + ProcessLifecycleOwner.get().bindBlock { + timeoutJob?.cancel() + timeoutJob = null + + try { + // suspend forever + suspendCancellableCoroutine { } + } finally { + timeoutJob = getVaultLockAfterTimeout() + .toIO() + // Wait for the timeout duration. + .effectMap { duration -> + delay(duration) + duration + } + .flatMap { + // Clear the current session. + val context = LeContext(this) + val session = MasterSession.Empty( + reason = textResource(Res.strings.lock_reason_inactivity, context), + ) + putVaultSession(session) + } + .attempt() + .launchIn(GlobalScope) + } + } + + // screen lock + val getVaultLockAfterScreenOff: GetVaultLockAfterScreenOff by instance() + val powerService: PowerService by instance() + ProcessLifecycleOwner.get().lifecycleScope.launch { + val screenFlow = powerService + .getScreenState() + .map { screen -> + val instant = Clock.System.now() + instant to screen + } + .shareIn(this, SharingStarted.Eagerly, replay = 1) + getVaultLockAfterScreenOff() + .flatMapLatest { screenLock -> + if (screenLock) { + getVaultSession() + } else { + emptyFlow() + } + } + .map { session -> + when (session) { + is MasterSession.Key -> true + is MasterSession.Empty -> false + } + } + .distinctUntilChanged() + .map { sessionExists -> + val instant = Clock.System.now() + instant to sessionExists + } + .flatMapLatest { (sessionTimestamp, sessionExists) -> + if (sessionExists) { + return@flatMapLatest screenFlow + .mapNotNull { (screenTimestamp, screen) -> + screen + .takeIf { screenTimestamp > sessionTimestamp } + } + } + + emptyFlow() + } + .filter { it is Screen.Off } + .onEach { + clearVaultSession() + .attempt() + .launchIn(this) + } + .launchIn(this) + } + } +} diff --git a/androidApp/src/main/res/drawable/ic_apps.xml b/androidApp/src/main/res/drawable/ic_apps.xml new file mode 100644 index 00000000..92573cf1 --- /dev/null +++ b/androidApp/src/main/res/drawable/ic_apps.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/androidApp/src/main/res/drawable/ic_cancel.xml b/androidApp/src/main/res/drawable/ic_cancel.xml new file mode 100644 index 00000000..9a3cc8ee --- /dev/null +++ b/androidApp/src/main/res/drawable/ic_cancel.xml @@ -0,0 +1,9 @@ + + + diff --git a/androidApp/src/main/res/drawable/ic_copy.xml b/androidApp/src/main/res/drawable/ic_copy.xml new file mode 100644 index 00000000..5544073a --- /dev/null +++ b/androidApp/src/main/res/drawable/ic_copy.xml @@ -0,0 +1,9 @@ + + + diff --git a/androidApp/src/main/res/drawable/ic_download.xml b/androidApp/src/main/res/drawable/ic_download.xml new file mode 100644 index 00000000..6dff20c0 --- /dev/null +++ b/androidApp/src/main/res/drawable/ic_download.xml @@ -0,0 +1,9 @@ + + + diff --git a/androidApp/src/main/res/drawable/ic_launcher_background.xml b/androidApp/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 00000000..04b8f8b3 --- /dev/null +++ b/androidApp/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,3 @@ + + + diff --git a/androidApp/src/main/res/drawable/ic_launcher_foreground.xml b/androidApp/src/main/res/drawable/ic_launcher_foreground.xml new file mode 100644 index 00000000..95f20348 --- /dev/null +++ b/androidApp/src/main/res/drawable/ic_launcher_foreground.xml @@ -0,0 +1,38 @@ + + + + + + + + + diff --git a/androidApp/src/main/res/drawable/ic_launcher_monochrome.xml b/androidApp/src/main/res/drawable/ic_launcher_monochrome.xml new file mode 100644 index 00000000..57dd3770 --- /dev/null +++ b/androidApp/src/main/res/drawable/ic_launcher_monochrome.xml @@ -0,0 +1,18 @@ + + + + diff --git a/androidApp/src/main/res/drawable/ic_lock_open_outline.xml b/androidApp/src/main/res/drawable/ic_lock_open_outline.xml new file mode 100644 index 00000000..72c50489 --- /dev/null +++ b/androidApp/src/main/res/drawable/ic_lock_open_outline.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/androidApp/src/main/res/drawable/ic_lock_outline.xml b/androidApp/src/main/res/drawable/ic_lock_outline.xml new file mode 100644 index 00000000..5f7c29ff --- /dev/null +++ b/androidApp/src/main/res/drawable/ic_lock_outline.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/androidApp/src/main/res/drawable/ic_login.xml b/androidApp/src/main/res/drawable/ic_login.xml new file mode 100644 index 00000000..01fa78a3 --- /dev/null +++ b/androidApp/src/main/res/drawable/ic_login.xml @@ -0,0 +1,9 @@ + + + diff --git a/androidApp/src/main/res/drawable/ic_logo_bitwarden.png b/androidApp/src/main/res/drawable/ic_logo_bitwarden.png new file mode 100644 index 00000000..7fb0a2a7 Binary files /dev/null and b/androidApp/src/main/res/drawable/ic_logo_bitwarden.png differ diff --git a/androidApp/src/main/res/drawable/ic_number_0.xml b/androidApp/src/main/res/drawable/ic_number_0.xml new file mode 100644 index 00000000..79eb773a --- /dev/null +++ b/androidApp/src/main/res/drawable/ic_number_0.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/androidApp/src/main/res/drawable/ic_number_1.xml b/androidApp/src/main/res/drawable/ic_number_1.xml new file mode 100644 index 00000000..91a44346 --- /dev/null +++ b/androidApp/src/main/res/drawable/ic_number_1.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/androidApp/src/main/res/drawable/ic_number_2.xml b/androidApp/src/main/res/drawable/ic_number_2.xml new file mode 100644 index 00000000..523b12bb --- /dev/null +++ b/androidApp/src/main/res/drawable/ic_number_2.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/androidApp/src/main/res/drawable/ic_number_3.xml b/androidApp/src/main/res/drawable/ic_number_3.xml new file mode 100644 index 00000000..b59c2d73 --- /dev/null +++ b/androidApp/src/main/res/drawable/ic_number_3.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/androidApp/src/main/res/drawable/ic_number_4.xml b/androidApp/src/main/res/drawable/ic_number_4.xml new file mode 100644 index 00000000..94454c17 --- /dev/null +++ b/androidApp/src/main/res/drawable/ic_number_4.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/androidApp/src/main/res/drawable/ic_number_5.xml b/androidApp/src/main/res/drawable/ic_number_5.xml new file mode 100644 index 00000000..d28d290c --- /dev/null +++ b/androidApp/src/main/res/drawable/ic_number_5.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/androidApp/src/main/res/drawable/ic_number_6.xml b/androidApp/src/main/res/drawable/ic_number_6.xml new file mode 100644 index 00000000..06a4d76a --- /dev/null +++ b/androidApp/src/main/res/drawable/ic_number_6.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/androidApp/src/main/res/drawable/ic_number_7.xml b/androidApp/src/main/res/drawable/ic_number_7.xml new file mode 100644 index 00000000..c996e693 --- /dev/null +++ b/androidApp/src/main/res/drawable/ic_number_7.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/androidApp/src/main/res/drawable/ic_number_8.xml b/androidApp/src/main/res/drawable/ic_number_8.xml new file mode 100644 index 00000000..28fa35e6 --- /dev/null +++ b/androidApp/src/main/res/drawable/ic_number_8.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/androidApp/src/main/res/drawable/ic_number_9.xml b/androidApp/src/main/res/drawable/ic_number_9.xml new file mode 100644 index 00000000..280d5ca6 --- /dev/null +++ b/androidApp/src/main/res/drawable/ic_number_9.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/androidApp/src/main/res/drawable/ic_number_9_plus.xml b/androidApp/src/main/res/drawable/ic_number_9_plus.xml new file mode 100644 index 00000000..cb47e3d5 --- /dev/null +++ b/androidApp/src/main/res/drawable/ic_number_9_plus.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/androidApp/src/main/res/drawable/ic_splash.xml b/androidApp/src/main/res/drawable/ic_splash.xml new file mode 100644 index 00000000..424fa203 --- /dev/null +++ b/androidApp/src/main/res/drawable/ic_splash.xml @@ -0,0 +1,4 @@ + + + + diff --git a/androidApp/src/main/res/drawable/ic_tfa.xml b/androidApp/src/main/res/drawable/ic_tfa.xml new file mode 100644 index 00000000..fed2894b --- /dev/null +++ b/androidApp/src/main/res/drawable/ic_tfa.xml @@ -0,0 +1,9 @@ + + + diff --git a/androidApp/src/main/res/drawable/ic_upload.xml b/androidApp/src/main/res/drawable/ic_upload.xml new file mode 100644 index 00000000..4c908388 --- /dev/null +++ b/androidApp/src/main/res/drawable/ic_upload.xml @@ -0,0 +1,9 @@ + + + diff --git a/androidApp/src/main/res/drawable/ic_web.xml b/androidApp/src/main/res/drawable/ic_web.xml new file mode 100644 index 00000000..8b7df180 --- /dev/null +++ b/androidApp/src/main/res/drawable/ic_web.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/androidApp/src/main/res/layout/activity_webview.xml b/androidApp/src/main/res/layout/activity_webview.xml new file mode 100644 index 00000000..e94feb1a --- /dev/null +++ b/androidApp/src/main/res/layout/activity_webview.xml @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/androidApp/src/main/res/layout/item_autofill.xml b/androidApp/src/main/res/layout/item_autofill.xml new file mode 100644 index 00000000..70a5950f --- /dev/null +++ b/androidApp/src/main/res/layout/item_autofill.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + diff --git a/androidApp/src/main/res/layout/item_autofill_app_id.xml b/androidApp/src/main/res/layout/item_autofill_app_id.xml new file mode 100644 index 00000000..e8154611 --- /dev/null +++ b/androidApp/src/main/res/layout/item_autofill_app_id.xml @@ -0,0 +1,35 @@ + + + + + + + \ No newline at end of file diff --git a/androidApp/src/main/res/layout/item_autofill_entry.xml b/androidApp/src/main/res/layout/item_autofill_entry.xml new file mode 100644 index 00000000..46ea0788 --- /dev/null +++ b/androidApp/src/main/res/layout/item_autofill_entry.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/androidApp/src/main/res/layout/item_autofill_select_entry.xml b/androidApp/src/main/res/layout/item_autofill_select_entry.xml new file mode 100644 index 00000000..b885eec4 --- /dev/null +++ b/androidApp/src/main/res/layout/item_autofill_select_entry.xml @@ -0,0 +1,29 @@ + + + + + + + \ No newline at end of file diff --git a/androidApp/src/main/res/layout/item_autofill_select_entry_app_id.xml b/androidApp/src/main/res/layout/item_autofill_select_entry_app_id.xml new file mode 100644 index 00000000..804763dd --- /dev/null +++ b/androidApp/src/main/res/layout/item_autofill_select_entry_app_id.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/androidApp/src/main/res/layout/item_autofill_select_entry_web_domain.xml b/androidApp/src/main/res/layout/item_autofill_select_entry_web_domain.xml new file mode 100644 index 00000000..9e800e61 --- /dev/null +++ b/androidApp/src/main/res/layout/item_autofill_select_entry_web_domain.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/androidApp/src/main/res/layout/item_autofill_unlock.xml b/androidApp/src/main/res/layout/item_autofill_unlock.xml new file mode 100644 index 00000000..d9b809eb --- /dev/null +++ b/androidApp/src/main/res/layout/item_autofill_unlock.xml @@ -0,0 +1,28 @@ + + + + + + + \ No newline at end of file diff --git a/androidApp/src/main/res/layout/item_autofill_unlock_app_id.xml b/androidApp/src/main/res/layout/item_autofill_unlock_app_id.xml new file mode 100644 index 00000000..7840ded0 --- /dev/null +++ b/androidApp/src/main/res/layout/item_autofill_unlock_app_id.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/androidApp/src/main/res/layout/item_autofill_unlock_web_domain.xml b/androidApp/src/main/res/layout/item_autofill_unlock_web_domain.xml new file mode 100644 index 00000000..478cabe0 --- /dev/null +++ b/androidApp/src/main/res/layout/item_autofill_unlock_web_domain.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/androidApp/src/main/res/layout/item_autofill_web_domain.xml b/androidApp/src/main/res/layout/item_autofill_web_domain.xml new file mode 100644 index 00000000..c0ed1757 --- /dev/null +++ b/androidApp/src/main/res/layout/item_autofill_web_domain.xml @@ -0,0 +1,48 @@ + + + + + + + \ No newline at end of file diff --git a/androidApp/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/androidApp/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 00000000..8fde4563 --- /dev/null +++ b/androidApp/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/androidApp/src/main/res/mipmap-hdpi/ic_launcher.png b/androidApp/src/main/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 00000000..61700e24 Binary files /dev/null and b/androidApp/src/main/res/mipmap-hdpi/ic_launcher.png differ diff --git a/androidApp/src/main/res/mipmap-mdpi/ic_launcher.png b/androidApp/src/main/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 00000000..1c68e800 Binary files /dev/null and b/androidApp/src/main/res/mipmap-mdpi/ic_launcher.png differ diff --git a/androidApp/src/main/res/mipmap-xhdpi/ic_launcher.png b/androidApp/src/main/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 00000000..8f23a2b5 Binary files /dev/null and b/androidApp/src/main/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/androidApp/src/main/res/mipmap-xxhdpi/ic_launcher.png b/androidApp/src/main/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 00000000..6af08f8d Binary files /dev/null and b/androidApp/src/main/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/androidApp/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/androidApp/src/main/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 00000000..34d241de Binary files /dev/null and b/androidApp/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/androidApp/src/main/res/raw/silence b/androidApp/src/main/res/raw/silence new file mode 100644 index 00000000..ec45eed4 Binary files /dev/null and b/androidApp/src/main/res/raw/silence differ diff --git a/androidApp/src/main/res/resources.properties b/androidApp/src/main/res/resources.properties new file mode 100644 index 00000000..467b3efe --- /dev/null +++ b/androidApp/src/main/res/resources.properties @@ -0,0 +1 @@ +unqualifiedResLocale=en-US diff --git a/androidApp/src/main/res/values-v31/colors.xml b/androidApp/src/main/res/values-v31/colors.xml new file mode 100644 index 00000000..70355507 --- /dev/null +++ b/androidApp/src/main/res/values-v31/colors.xml @@ -0,0 +1,8 @@ + + + @android:color/system_accent1_400 + @android:color/system_neutral1_900 + @android:color/system_accent1_100 + @android:color/system_accent2_50 + @android:color/system_accent2_50 + \ No newline at end of file diff --git a/androidApp/src/main/res/values/colors.xml b/androidApp/src/main/res/values/colors.xml new file mode 100644 index 00000000..e495e993 --- /dev/null +++ b/androidApp/src/main/res/values/colors.xml @@ -0,0 +1,22 @@ + + + #FF219BCC + #FF191C1E + #FFC1E8FF + #FFE0F3FF + #FFE0F3FF + + #FFBB86FC + #FF6200EE + #FF3700B3 + #FF03DAC5 + #FF018786 + #FF000000 + #FFFFFFFF + #43a047 + + + #333333 + #738182 + #efeff4 + \ No newline at end of file diff --git a/androidApp/src/main/res/values/ids.xml b/androidApp/src/main/res/values/ids.xml new file mode 100644 index 00000000..6f6e21c9 --- /dev/null +++ b/androidApp/src/main/res/values/ids.xml @@ -0,0 +1,4 @@ + + 1100 + 1200 + \ No newline at end of file diff --git a/androidApp/src/main/res/values/strings.xml b/androidApp/src/main/res/values/strings.xml new file mode 100644 index 00000000..2828a624 --- /dev/null +++ b/androidApp/src/main/res/values/strings.xml @@ -0,0 +1,23 @@ + + Keyguard + + com.artemchep.keyguard.UPLOAD_ATTACHMENTS + Uploading attachments + Uploading attachments + Uploading attachments + + com.artemchep.keyguard.DOWNLOAD_ATTACHMENTS + Download attachments + + com.artemchep.keyguard.CLIPBOARD + Clipboard + + About + Autofill + Keyguard form autofilling + Unlock Keyguard + Enable autofilling to quickly fill out forms in other apps + Open Keyguard + Set default autofill service + Autofill settings + \ No newline at end of file diff --git a/androidApp/src/main/res/values/themes.xml b/androidApp/src/main/res/values/themes.xml new file mode 100644 index 00000000..677cf392 --- /dev/null +++ b/androidApp/src/main/res/values/themes.xml @@ -0,0 +1,14 @@ + + + + + + \ No newline at end of file diff --git a/androidApp/src/noneRelease/generated/baselineProfiles/baseline-prof.txt b/androidApp/src/noneRelease/generated/baselineProfiles/baseline-prof.txt new file mode 100644 index 00000000..24806ea6 --- /dev/null +++ b/androidApp/src/noneRelease/generated/baselineProfiles/baseline-prof.txt @@ -0,0 +1,42915 @@ +L_COROUTINE/ArtificialStackFrames; +HSPL_COROUTINE/ArtificialStackFrames;->()V +HSPL_COROUTINE/ArtificialStackFrames;->coroutineBoundary()Ljava/lang/StackTraceElement; +L_COROUTINE/CoroutineDebuggingKt; +HSPL_COROUTINE/CoroutineDebuggingKt;->()V +HSPL_COROUTINE/CoroutineDebuggingKt;->access$artificialFrame(Ljava/lang/Throwable;Ljava/lang/String;)Ljava/lang/StackTraceElement; +HSPL_COROUTINE/CoroutineDebuggingKt;->artificialFrame(Ljava/lang/Throwable;Ljava/lang/String;)Ljava/lang/StackTraceElement; +L_COROUTINE/_BOUNDARY; +Landroidx/activity/Cancellable; +Landroidx/activity/ComponentActivity; +HSPLandroidx/activity/ComponentActivity;->()V +HSPLandroidx/activity/ComponentActivity;->access$100(Landroidx/activity/ComponentActivity;)Landroidx/activity/OnBackPressedDispatcher; +HSPLandroidx/activity/ComponentActivity;->addMenuProvider(Landroidx/core/view/MenuProvider;)V +HSPLandroidx/activity/ComponentActivity;->addOnConfigurationChangedListener(Landroidx/core/util/Consumer;)V +HSPLandroidx/activity/ComponentActivity;->addOnContextAvailableListener(Landroidx/activity/contextaware/OnContextAvailableListener;)V +HSPLandroidx/activity/ComponentActivity;->addOnMultiWindowModeChangedListener(Landroidx/core/util/Consumer;)V +HSPLandroidx/activity/ComponentActivity;->addOnNewIntentListener(Landroidx/core/util/Consumer;)V +HSPLandroidx/activity/ComponentActivity;->addOnPictureInPictureModeChangedListener(Landroidx/core/util/Consumer;)V +HSPLandroidx/activity/ComponentActivity;->addOnTrimMemoryListener(Landroidx/core/util/Consumer;)V +HSPLandroidx/activity/ComponentActivity;->createFullyDrawnExecutor()Landroidx/activity/ComponentActivity$ReportFullyDrawnExecutor; +HSPLandroidx/activity/ComponentActivity;->ensureViewModelStore()V +HSPLandroidx/activity/ComponentActivity;->getActivityResultRegistry()Landroidx/activity/result/ActivityResultRegistry; +HSPLandroidx/activity/ComponentActivity;->getDefaultViewModelCreationExtras()Landroidx/lifecycle/viewmodel/CreationExtras; +HSPLandroidx/activity/ComponentActivity;->getLifecycle()Landroidx/lifecycle/Lifecycle; +HSPLandroidx/activity/ComponentActivity;->getOnBackPressedDispatcher()Landroidx/activity/OnBackPressedDispatcher; +HSPLandroidx/activity/ComponentActivity;->getSavedStateRegistry()Landroidx/savedstate/SavedStateRegistry; +HSPLandroidx/activity/ComponentActivity;->getViewModelStore()Landroidx/lifecycle/ViewModelStore; +HSPLandroidx/activity/ComponentActivity;->invalidateMenu()V +HSPLandroidx/activity/ComponentActivity;->lambda$new$2$androidx-activity-ComponentActivity(Landroid/content/Context;)V +HSPLandroidx/activity/ComponentActivity;->onCreate(Landroid/os/Bundle;)V +Landroidx/activity/ComponentActivity$$ExternalSyntheticLambda0; +HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda0;->(Landroidx/activity/ComponentActivity;)V +HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda0;->run()V +Landroidx/activity/ComponentActivity$$ExternalSyntheticLambda1; +HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda1;->(Landroidx/activity/ComponentActivity;)V +Landroidx/activity/ComponentActivity$$ExternalSyntheticLambda2; +HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda2;->(Landroidx/activity/ComponentActivity;)V +Landroidx/activity/ComponentActivity$$ExternalSyntheticLambda3; +HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda3;->(Landroidx/activity/ComponentActivity;)V +HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda3;->onContextAvailable(Landroid/content/Context;)V +Landroidx/activity/ComponentActivity$1; +HSPLandroidx/activity/ComponentActivity$1;->(Landroidx/activity/ComponentActivity;)V +Landroidx/activity/ComponentActivity$2; +HSPLandroidx/activity/ComponentActivity$2;->(Landroidx/activity/ComponentActivity;)V +HSPLandroidx/activity/ComponentActivity$2;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V +Landroidx/activity/ComponentActivity$3; +HSPLandroidx/activity/ComponentActivity$3;->(Landroidx/activity/ComponentActivity;)V +HSPLandroidx/activity/ComponentActivity$3;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V +Landroidx/activity/ComponentActivity$4; +HSPLandroidx/activity/ComponentActivity$4;->(Landroidx/activity/ComponentActivity;)V +HSPLandroidx/activity/ComponentActivity$4;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V +Landroidx/activity/ComponentActivity$5; +HSPLandroidx/activity/ComponentActivity$5;->(Landroidx/activity/ComponentActivity;)V +Landroidx/activity/ComponentActivity$6; +HSPLandroidx/activity/ComponentActivity$6;->(Landroidx/activity/ComponentActivity;)V +HSPLandroidx/activity/ComponentActivity$6;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V +Landroidx/activity/ComponentActivity$Api33Impl; +HSPLandroidx/activity/ComponentActivity$Api33Impl;->getOnBackInvokedDispatcher(Landroid/app/Activity;)Landroid/window/OnBackInvokedDispatcher; +Landroidx/activity/ComponentActivity$NonConfigurationInstances; +Landroidx/activity/ComponentActivity$ReportFullyDrawnExecutor; +Landroidx/activity/ComponentActivity$ReportFullyDrawnExecutorApi16Impl; +HSPLandroidx/activity/ComponentActivity$ReportFullyDrawnExecutorApi16Impl;->(Landroidx/activity/ComponentActivity;)V +Landroidx/activity/ComponentDialog$$ExternalSyntheticApiModelOutline0; +HSPLandroidx/activity/ComponentDialog$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/Insets;)I +HSPLandroidx/activity/ComponentDialog$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/view/Window;Z)V +HSPLandroidx/activity/ComponentDialog$$ExternalSyntheticApiModelOutline0;->m$2(Landroid/graphics/Insets;)I +HSPLandroidx/activity/ComponentDialog$$ExternalSyntheticApiModelOutline0;->m$3(Landroid/graphics/Insets;)I +HSPLandroidx/activity/ComponentDialog$$ExternalSyntheticApiModelOutline0;->m$4()Landroid/graphics/BlendMode; +HSPLandroidx/activity/ComponentDialog$$ExternalSyntheticApiModelOutline0;->m$7()Landroid/graphics/BlendMode; +HSPLandroidx/activity/ComponentDialog$$ExternalSyntheticApiModelOutline0;->m$8()Landroid/graphics/BlendMode; +HSPLandroidx/activity/ComponentDialog$$ExternalSyntheticApiModelOutline0;->m()Landroid/graphics/BlendMode; +HSPLandroidx/activity/ComponentDialog$$ExternalSyntheticApiModelOutline0;->m(Landroid/app/Activity;)Landroid/window/OnBackInvokedDispatcher; +HSPLandroidx/activity/ComponentDialog$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/Insets;)I +HSPLandroidx/activity/ComponentDialog$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;)Landroid/view/WindowInsetsController; +Landroidx/activity/FullyDrawnReporter; +HSPLandroidx/activity/FullyDrawnReporter;->(Ljava/util/concurrent/Executor;Lkotlin/jvm/functions/Function0;)V +Landroidx/activity/FullyDrawnReporter$$ExternalSyntheticLambda0; +HSPLandroidx/activity/FullyDrawnReporter$$ExternalSyntheticLambda0;->(Landroidx/activity/FullyDrawnReporter;)V +Landroidx/activity/FullyDrawnReporterOwner; +Landroidx/activity/OnBackPressedCallback; +HSPLandroidx/activity/OnBackPressedCallback;->(Z)V +HSPLandroidx/activity/OnBackPressedCallback;->addCancellable(Landroidx/activity/Cancellable;)V +HSPLandroidx/activity/OnBackPressedCallback;->isEnabled()Z +HSPLandroidx/activity/OnBackPressedCallback;->setEnabled(Z)V +HSPLandroidx/activity/OnBackPressedCallback;->setEnabledChangedCallback$activity_release(Lkotlin/jvm/functions/Function0;)V +Landroidx/activity/OnBackPressedDispatcher; +HSPLandroidx/activity/OnBackPressedDispatcher;->(Ljava/lang/Runnable;)V +HSPLandroidx/activity/OnBackPressedDispatcher;->(Ljava/lang/Runnable;Landroidx/core/util/Consumer;)V +HSPLandroidx/activity/OnBackPressedDispatcher;->access$updateEnabledCallbacks(Landroidx/activity/OnBackPressedDispatcher;)V +HSPLandroidx/activity/OnBackPressedDispatcher;->addCallback(Landroidx/activity/OnBackPressedCallback;)V +HSPLandroidx/activity/OnBackPressedDispatcher;->addCallback(Landroidx/lifecycle/LifecycleOwner;Landroidx/activity/OnBackPressedCallback;)V +HSPLandroidx/activity/OnBackPressedDispatcher;->addCancellableCallback$activity_release(Landroidx/activity/OnBackPressedCallback;)Landroidx/activity/Cancellable; +HSPLandroidx/activity/OnBackPressedDispatcher;->setOnBackInvokedDispatcher(Landroid/window/OnBackInvokedDispatcher;)V +HSPLandroidx/activity/OnBackPressedDispatcher;->updateBackInvokedCallbackState(Z)V +HSPLandroidx/activity/OnBackPressedDispatcher;->updateEnabledCallbacks()V +Landroidx/activity/OnBackPressedDispatcher$1; +HSPLandroidx/activity/OnBackPressedDispatcher$1;->(Landroidx/activity/OnBackPressedDispatcher;)V +Landroidx/activity/OnBackPressedDispatcher$2; +HSPLandroidx/activity/OnBackPressedDispatcher$2;->(Landroidx/activity/OnBackPressedDispatcher;)V +Landroidx/activity/OnBackPressedDispatcher$3; +HSPLandroidx/activity/OnBackPressedDispatcher$3;->(Landroidx/activity/OnBackPressedDispatcher;)V +Landroidx/activity/OnBackPressedDispatcher$4; +HSPLandroidx/activity/OnBackPressedDispatcher$4;->(Landroidx/activity/OnBackPressedDispatcher;)V +Landroidx/activity/OnBackPressedDispatcher$Api34Impl; +HSPLandroidx/activity/OnBackPressedDispatcher$Api34Impl;->()V +HSPLandroidx/activity/OnBackPressedDispatcher$Api34Impl;->()V +HSPLandroidx/activity/OnBackPressedDispatcher$Api34Impl;->createOnBackAnimationCallback(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;)Landroid/window/OnBackInvokedCallback; +Landroidx/activity/OnBackPressedDispatcher$Api34Impl$createOnBackAnimationCallback$1; +HSPLandroidx/activity/OnBackPressedDispatcher$Api34Impl$createOnBackAnimationCallback$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;)V +Landroidx/activity/OnBackPressedDispatcher$LifecycleOnBackPressedCancellable; +HSPLandroidx/activity/OnBackPressedDispatcher$LifecycleOnBackPressedCancellable;->(Landroidx/activity/OnBackPressedDispatcher;Landroidx/lifecycle/Lifecycle;Landroidx/activity/OnBackPressedCallback;)V +HSPLandroidx/activity/OnBackPressedDispatcher$LifecycleOnBackPressedCancellable;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V +Landroidx/activity/OnBackPressedDispatcher$OnBackPressedCancellable; +HSPLandroidx/activity/OnBackPressedDispatcher$OnBackPressedCancellable;->(Landroidx/activity/OnBackPressedDispatcher;Landroidx/activity/OnBackPressedCallback;)V +Landroidx/activity/OnBackPressedDispatcher$addCallback$1; +HSPLandroidx/activity/OnBackPressedDispatcher$addCallback$1;->(Ljava/lang/Object;)V +HSPLandroidx/activity/OnBackPressedDispatcher$addCallback$1;->invoke()Ljava/lang/Object; +HSPLandroidx/activity/OnBackPressedDispatcher$addCallback$1;->invoke()V +Landroidx/activity/OnBackPressedDispatcher$addCancellableCallback$1; +HSPLandroidx/activity/OnBackPressedDispatcher$addCancellableCallback$1;->(Ljava/lang/Object;)V +HSPLandroidx/activity/OnBackPressedDispatcher$addCancellableCallback$1;->invoke()Ljava/lang/Object; +HSPLandroidx/activity/OnBackPressedDispatcher$addCancellableCallback$1;->invoke()V +Landroidx/activity/OnBackPressedDispatcherOwner; +Landroidx/activity/R$id; +Landroidx/activity/ViewTreeOnBackPressedDispatcherOwner; +HSPLandroidx/activity/ViewTreeOnBackPressedDispatcherOwner;->set(Landroid/view/View;Landroidx/activity/OnBackPressedDispatcherOwner;)V +Landroidx/activity/compose/ComponentActivityKt; +HSPLandroidx/activity/compose/ComponentActivityKt;->()V +HSPLandroidx/activity/compose/ComponentActivityKt;->setContent$default(Landroidx/activity/ComponentActivity;Landroidx/compose/runtime/CompositionContext;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)V +HSPLandroidx/activity/compose/ComponentActivityKt;->setContent(Landroidx/activity/ComponentActivity;Landroidx/compose/runtime/CompositionContext;Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/activity/compose/ComponentActivityKt;->setOwners(Landroidx/activity/ComponentActivity;)V +Landroidx/activity/contextaware/ContextAware; +Landroidx/activity/contextaware/ContextAwareHelper; +HSPLandroidx/activity/contextaware/ContextAwareHelper;->()V +HSPLandroidx/activity/contextaware/ContextAwareHelper;->addOnContextAvailableListener(Landroidx/activity/contextaware/OnContextAvailableListener;)V +HSPLandroidx/activity/contextaware/ContextAwareHelper;->dispatchOnContextAvailable(Landroid/content/Context;)V +Landroidx/activity/contextaware/OnContextAvailableListener; +Landroidx/activity/result/ActivityResult; +Landroidx/activity/result/ActivityResultCallback; +Landroidx/activity/result/ActivityResultCaller; +Landroidx/activity/result/ActivityResultLauncher; +HSPLandroidx/activity/result/ActivityResultLauncher;->()V +Landroidx/activity/result/ActivityResultRegistry; +HSPLandroidx/activity/result/ActivityResultRegistry;->()V +HSPLandroidx/activity/result/ActivityResultRegistry;->bindRcKey(ILjava/lang/String;)V +HSPLandroidx/activity/result/ActivityResultRegistry;->generateRandomNumber()I +HSPLandroidx/activity/result/ActivityResultRegistry;->register(Ljava/lang/String;Landroidx/activity/result/contract/ActivityResultContract;Landroidx/activity/result/ActivityResultCallback;)Landroidx/activity/result/ActivityResultLauncher; +HSPLandroidx/activity/result/ActivityResultRegistry;->registerKey(Ljava/lang/String;)V +Landroidx/activity/result/ActivityResultRegistry$3; +HSPLandroidx/activity/result/ActivityResultRegistry$3;->(Landroidx/activity/result/ActivityResultRegistry;Ljava/lang/String;Landroidx/activity/result/contract/ActivityResultContract;)V +Landroidx/activity/result/ActivityResultRegistry$CallbackAndContract; +HSPLandroidx/activity/result/ActivityResultRegistry$CallbackAndContract;->(Landroidx/activity/result/ActivityResultCallback;Landroidx/activity/result/contract/ActivityResultContract;)V +Landroidx/activity/result/ActivityResultRegistryOwner; +Landroidx/activity/result/contract/ActivityResultContract; +HSPLandroidx/activity/result/contract/ActivityResultContract;->()V +Landroidx/activity/result/contract/ActivityResultContracts$RequestMultiplePermissions; +HSPLandroidx/activity/result/contract/ActivityResultContracts$RequestMultiplePermissions;->()V +HSPLandroidx/activity/result/contract/ActivityResultContracts$RequestMultiplePermissions;->()V +Landroidx/activity/result/contract/ActivityResultContracts$RequestMultiplePermissions$Companion; +HSPLandroidx/activity/result/contract/ActivityResultContracts$RequestMultiplePermissions$Companion;->()V +HSPLandroidx/activity/result/contract/ActivityResultContracts$RequestMultiplePermissions$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/activity/result/contract/ActivityResultContracts$StartActivityForResult; +HSPLandroidx/activity/result/contract/ActivityResultContracts$StartActivityForResult;->()V +HSPLandroidx/activity/result/contract/ActivityResultContracts$StartActivityForResult;->()V +Landroidx/activity/result/contract/ActivityResultContracts$StartActivityForResult$Companion; +HSPLandroidx/activity/result/contract/ActivityResultContracts$StartActivityForResult$Companion;->()V +HSPLandroidx/activity/result/contract/ActivityResultContracts$StartActivityForResult$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/appcompat/R$drawable; +Landroidx/appcompat/R$id; +Landroidx/appcompat/R$layout; +Landroidx/appcompat/R$style; +Landroidx/appcompat/R$styleable; +HSPLandroidx/appcompat/R$styleable;->()V +Landroidx/appcompat/app/ActionBarDrawerToggle$DelegateProvider; +Landroidx/appcompat/app/AppCompatActivity; +HSPLandroidx/appcompat/app/AppCompatActivity;->()V +HSPLandroidx/appcompat/app/AppCompatActivity;->attachBaseContext(Landroid/content/Context;)V +HSPLandroidx/appcompat/app/AppCompatActivity;->getDelegate()Landroidx/appcompat/app/AppCompatDelegate; +HSPLandroidx/appcompat/app/AppCompatActivity;->getResources()Landroid/content/res/Resources; +HSPLandroidx/appcompat/app/AppCompatActivity;->initDelegate()V +HSPLandroidx/appcompat/app/AppCompatActivity;->initViewTreeOwners()V +HSPLandroidx/appcompat/app/AppCompatActivity;->invalidateOptionsMenu()V +HSPLandroidx/appcompat/app/AppCompatActivity;->onContentChanged()V +HSPLandroidx/appcompat/app/AppCompatActivity;->onPostCreate(Landroid/os/Bundle;)V +HSPLandroidx/appcompat/app/AppCompatActivity;->onPostResume()V +HSPLandroidx/appcompat/app/AppCompatActivity;->onStart()V +HSPLandroidx/appcompat/app/AppCompatActivity;->onSupportContentChanged()V +HSPLandroidx/appcompat/app/AppCompatActivity;->onTitleChanged(Ljava/lang/CharSequence;I)V +HSPLandroidx/appcompat/app/AppCompatActivity;->setContentView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V +HSPLandroidx/appcompat/app/AppCompatActivity;->setTheme(I)V +Landroidx/appcompat/app/AppCompatActivity$1; +HSPLandroidx/appcompat/app/AppCompatActivity$1;->(Landroidx/appcompat/app/AppCompatActivity;)V +Landroidx/appcompat/app/AppCompatActivity$2; +HSPLandroidx/appcompat/app/AppCompatActivity$2;->(Landroidx/appcompat/app/AppCompatActivity;)V +HSPLandroidx/appcompat/app/AppCompatActivity$2;->onContextAvailable(Landroid/content/Context;)V +Landroidx/appcompat/app/AppCompatCallback; +Landroidx/appcompat/app/AppCompatDelegate; +HSPLandroidx/appcompat/app/AppCompatDelegate;->()V +HSPLandroidx/appcompat/app/AppCompatDelegate;->()V +HSPLandroidx/appcompat/app/AppCompatDelegate;->addActiveDelegate(Landroidx/appcompat/app/AppCompatDelegate;)V +HSPLandroidx/appcompat/app/AppCompatDelegate;->attachBaseContext(Landroid/content/Context;)V +HSPLandroidx/appcompat/app/AppCompatDelegate;->attachBaseContext2(Landroid/content/Context;)Landroid/content/Context; +HSPLandroidx/appcompat/app/AppCompatDelegate;->create(Landroid/app/Activity;Landroidx/appcompat/app/AppCompatCallback;)Landroidx/appcompat/app/AppCompatDelegate; +HSPLandroidx/appcompat/app/AppCompatDelegate;->getApplicationLocales()Landroidx/core/os/LocaleListCompat; +HSPLandroidx/appcompat/app/AppCompatDelegate;->getDefaultNightMode()I +HSPLandroidx/appcompat/app/AppCompatDelegate;->getLocaleManagerForApplication()Ljava/lang/Object; +HSPLandroidx/appcompat/app/AppCompatDelegate;->isAutoStorageOptedIn(Landroid/content/Context;)Z +HSPLandroidx/appcompat/app/AppCompatDelegate;->lambda$syncRequestedAndStoredLocales$1(Landroid/content/Context;)V +HSPLandroidx/appcompat/app/AppCompatDelegate;->removeDelegateFromActives(Landroidx/appcompat/app/AppCompatDelegate;)V +HSPLandroidx/appcompat/app/AppCompatDelegate;->setOnBackInvokedDispatcher(Landroid/window/OnBackInvokedDispatcher;)V +HSPLandroidx/appcompat/app/AppCompatDelegate;->syncLocalesToFramework(Landroid/content/Context;)V +HSPLandroidx/appcompat/app/AppCompatDelegate;->syncRequestedAndStoredLocales(Landroid/content/Context;)V +Landroidx/appcompat/app/AppCompatDelegate$$ExternalSyntheticLambda1; +HSPLandroidx/appcompat/app/AppCompatDelegate$$ExternalSyntheticLambda1;->(Landroid/content/Context;)V +HSPLandroidx/appcompat/app/AppCompatDelegate$$ExternalSyntheticLambda1;->run()V +Landroidx/appcompat/app/AppCompatDelegate$Api24Impl; +HSPLandroidx/appcompat/app/AppCompatDelegate$Api24Impl;->localeListForLanguageTags(Ljava/lang/String;)Landroid/os/LocaleList; +Landroidx/appcompat/app/AppCompatDelegate$Api33Impl; +HSPLandroidx/appcompat/app/AppCompatDelegate$Api33Impl;->localeManagerGetApplicationLocales(Ljava/lang/Object;)Landroid/os/LocaleList; +HSPLandroidx/appcompat/app/AppCompatDelegate$Api33Impl;->localeManagerSetApplicationLocales(Ljava/lang/Object;Landroid/os/LocaleList;)V +Landroidx/appcompat/app/AppCompatDelegate$SerialExecutor; +HSPLandroidx/appcompat/app/AppCompatDelegate$SerialExecutor;->(Ljava/util/concurrent/Executor;)V +HSPLandroidx/appcompat/app/AppCompatDelegate$SerialExecutor;->execute(Ljava/lang/Runnable;)V +HSPLandroidx/appcompat/app/AppCompatDelegate$SerialExecutor;->lambda$execute$0$androidx-appcompat-app-AppCompatDelegate$SerialExecutor(Ljava/lang/Runnable;)V +HSPLandroidx/appcompat/app/AppCompatDelegate$SerialExecutor;->scheduleNext()V +Landroidx/appcompat/app/AppCompatDelegate$SerialExecutor$$ExternalSyntheticLambda0; +HSPLandroidx/appcompat/app/AppCompatDelegate$SerialExecutor$$ExternalSyntheticLambda0;->(Landroidx/appcompat/app/AppCompatDelegate$SerialExecutor;Ljava/lang/Runnable;)V +HSPLandroidx/appcompat/app/AppCompatDelegate$SerialExecutor$$ExternalSyntheticLambda0;->run()V +Landroidx/appcompat/app/AppCompatDelegate$ThreadPerTaskExecutor; +HSPLandroidx/appcompat/app/AppCompatDelegate$ThreadPerTaskExecutor;->()V +HSPLandroidx/appcompat/app/AppCompatDelegate$ThreadPerTaskExecutor;->execute(Ljava/lang/Runnable;)V +Landroidx/appcompat/app/AppCompatDelegateImpl; +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->()V +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->(Landroid/app/Activity;Landroidx/appcompat/app/AppCompatCallback;)V +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->(Landroid/content/Context;Landroid/view/Window;Landroidx/appcompat/app/AppCompatCallback;Ljava/lang/Object;)V +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->applyApplicationSpecificConfig(Z)Z +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->applyApplicationSpecificConfig(ZZ)Z +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->applyFixedSizeWindow()V +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->attachBaseContext2(Landroid/content/Context;)Landroid/content/Context; +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->attachToWindow(Landroid/view/Window;)V +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->calculateApplicationLocales(Landroid/content/Context;)Landroidx/core/os/LocaleListCompat; +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->calculateNightMode()I +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->createOverrideAppConfiguration(Landroid/content/Context;ILandroidx/core/os/LocaleListCompat;Landroid/content/res/Configuration;Z)Landroid/content/res/Configuration; +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->createSubDecor()Landroid/view/ViewGroup; +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->createView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View; +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->doInvalidatePanelMenu(I)V +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->ensureSubDecor()V +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->ensureWindow()V +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->getActivityHandlesConfigChangesFlags(Landroid/content/Context;)I +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->getConfigurationLocales(Landroid/content/res/Configuration;)Landroidx/core/os/LocaleListCompat; +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->getContextForDelegate()Landroid/content/Context; +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->getPanelState(IZ)Landroidx/appcompat/app/AppCompatDelegateImpl$PanelFeatureState; +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->getSupportActionBar()Landroidx/appcompat/app/ActionBar; +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->getTitle()Ljava/lang/CharSequence; +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->initWindowDecorActionBar()V +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->installViewFactory()V +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->invalidateOptionsMenu()V +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->invalidatePanelMenu(I)V +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->mapNightMode(Landroid/content/Context;I)I +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->onCreate(Landroid/os/Bundle;)V +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->onCreateView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View; +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->onPostCreate(Landroid/os/Bundle;)V +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->onPostResume()V +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->onStart()V +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->onSubDecorInstalled(Landroid/view/ViewGroup;)V +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->peekSupportActionBar()Landroidx/appcompat/app/ActionBar; +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->requestWindowFeature(I)Z +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->sanitizeWindowFeatureId(I)I +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->setContentView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->setOnBackInvokedDispatcher(Landroid/window/OnBackInvokedDispatcher;)V +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->setTheme(I)V +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->setTitle(Ljava/lang/CharSequence;)V +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->shouldRegisterBackInvokedCallback()Z +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->throwFeatureRequestIfSubDecorInstalled()V +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->updateAppConfiguration(ILandroidx/core/os/LocaleListCompat;Z)Z +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->updateBackInvokedCallbackState()V +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->updateStatusGuard(Landroidx/core/view/WindowInsetsCompat;Landroid/graphics/Rect;)I +Landroidx/appcompat/app/AppCompatDelegateImpl$2; +HSPLandroidx/appcompat/app/AppCompatDelegateImpl$2;->(Landroidx/appcompat/app/AppCompatDelegateImpl;)V +HSPLandroidx/appcompat/app/AppCompatDelegateImpl$2;->run()V +Landroidx/appcompat/app/AppCompatDelegateImpl$3; +HSPLandroidx/appcompat/app/AppCompatDelegateImpl$3;->(Landroidx/appcompat/app/AppCompatDelegateImpl;)V +HSPLandroidx/appcompat/app/AppCompatDelegateImpl$3;->onApplyWindowInsets(Landroid/view/View;Landroidx/core/view/WindowInsetsCompat;)Landroidx/core/view/WindowInsetsCompat; +Landroidx/appcompat/app/AppCompatDelegateImpl$5; +HSPLandroidx/appcompat/app/AppCompatDelegateImpl$5;->(Landroidx/appcompat/app/AppCompatDelegateImpl;)V +HSPLandroidx/appcompat/app/AppCompatDelegateImpl$5;->onAttachedFromWindow()V +Landroidx/appcompat/app/AppCompatDelegateImpl$Api17Impl; +HSPLandroidx/appcompat/app/AppCompatDelegateImpl$Api17Impl;->createConfigurationContext(Landroid/content/Context;Landroid/content/res/Configuration;)Landroid/content/Context; +Landroidx/appcompat/app/AppCompatDelegateImpl$Api24Impl; +HSPLandroidx/appcompat/app/AppCompatDelegateImpl$Api24Impl;->getLocales(Landroid/content/res/Configuration;)Landroidx/core/os/LocaleListCompat; +Landroidx/appcompat/app/AppCompatDelegateImpl$Api33Impl; +HSPLandroidx/appcompat/app/AppCompatDelegateImpl$Api33Impl;->getOnBackInvokedDispatcher(Landroid/app/Activity;)Landroid/window/OnBackInvokedDispatcher; +Landroidx/appcompat/app/AppCompatDelegateImpl$AppCompatWindowCallback; +HSPLandroidx/appcompat/app/AppCompatDelegateImpl$AppCompatWindowCallback;->(Landroidx/appcompat/app/AppCompatDelegateImpl;Landroid/view/Window$Callback;)V +HSPLandroidx/appcompat/app/AppCompatDelegateImpl$AppCompatWindowCallback;->bypassOnContentChanged(Landroid/view/Window$Callback;)V +HSPLandroidx/appcompat/app/AppCompatDelegateImpl$AppCompatWindowCallback;->onContentChanged()V +Landroidx/appcompat/app/AppCompatDelegateImpl$PanelFeatureState; +HSPLandroidx/appcompat/app/AppCompatDelegateImpl$PanelFeatureState;->(I)V +Landroidx/appcompat/app/AppCompatViewInflater; +HSPLandroidx/appcompat/app/AppCompatViewInflater;->()V +HSPLandroidx/appcompat/app/AppCompatViewInflater;->()V +HSPLandroidx/appcompat/app/AppCompatViewInflater;->createView(Landroid/content/Context;Ljava/lang/String;Landroid/util/AttributeSet;)Landroid/view/View; +HSPLandroidx/appcompat/app/AppCompatViewInflater;->createView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;ZZZZ)Landroid/view/View; +HSPLandroidx/appcompat/app/AppCompatViewInflater;->themifyContext(Landroid/content/Context;Landroid/util/AttributeSet;ZZ)Landroid/content/Context; +Landroidx/appcompat/app/AppLocalesMetadataHolderService; +HSPLandroidx/appcompat/app/AppLocalesMetadataHolderService;->getServiceInfo(Landroid/content/Context;)Landroid/content/pm/ServiceInfo; +Landroidx/appcompat/app/AppLocalesMetadataHolderService$Api24Impl; +HSPLandroidx/appcompat/app/AppLocalesMetadataHolderService$Api24Impl;->getDisabledComponentFlag()I +Landroidx/appcompat/resources/R$drawable; +Landroidx/appcompat/view/ContextThemeWrapper; +HSPLandroidx/appcompat/view/ContextThemeWrapper;->(Landroid/content/Context;I)V +HSPLandroidx/appcompat/view/ContextThemeWrapper;->applyOverrideConfiguration(Landroid/content/res/Configuration;)V +HSPLandroidx/appcompat/view/ContextThemeWrapper;->getResources()Landroid/content/res/Resources; +HSPLandroidx/appcompat/view/ContextThemeWrapper;->getResourcesInternal()Landroid/content/res/Resources; +HSPLandroidx/appcompat/view/ContextThemeWrapper;->getSystemService(Ljava/lang/String;)Ljava/lang/Object; +HSPLandroidx/appcompat/view/ContextThemeWrapper;->getTheme()Landroid/content/res/Resources$Theme; +HSPLandroidx/appcompat/view/ContextThemeWrapper;->initializeTheme()V +HSPLandroidx/appcompat/view/ContextThemeWrapper;->isEmptyConfiguration(Landroid/content/res/Configuration;)Z +HSPLandroidx/appcompat/view/ContextThemeWrapper;->onApplyThemeResource(Landroid/content/res/Resources$Theme;IZ)V +Landroidx/appcompat/view/WindowCallbackWrapper; +HSPLandroidx/appcompat/view/WindowCallbackWrapper;->(Landroid/view/Window$Callback;)V +HSPLandroidx/appcompat/view/WindowCallbackWrapper;->dispatchPopulateAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;)Z +HSPLandroidx/appcompat/view/WindowCallbackWrapper;->dispatchTouchEvent(Landroid/view/MotionEvent;)Z +HSPLandroidx/appcompat/view/WindowCallbackWrapper;->getWrapped()Landroid/view/Window$Callback; +HSPLandroidx/appcompat/view/WindowCallbackWrapper;->onAttachedToWindow()V +HSPLandroidx/appcompat/view/WindowCallbackWrapper;->onWindowAttributesChanged(Landroid/view/WindowManager$LayoutParams;)V +HSPLandroidx/appcompat/view/WindowCallbackWrapper;->onWindowFocusChanged(Z)V +Landroidx/appcompat/view/menu/MenuBuilder$Callback; +Landroidx/appcompat/widget/AppCompatDrawableManager; +HSPLandroidx/appcompat/widget/AppCompatDrawableManager;->()V +HSPLandroidx/appcompat/widget/AppCompatDrawableManager;->()V +HSPLandroidx/appcompat/widget/AppCompatDrawableManager;->access$000()Landroid/graphics/PorterDuff$Mode; +HSPLandroidx/appcompat/widget/AppCompatDrawableManager;->get()Landroidx/appcompat/widget/AppCompatDrawableManager; +HSPLandroidx/appcompat/widget/AppCompatDrawableManager;->getDrawable(Landroid/content/Context;IZ)Landroid/graphics/drawable/Drawable; +HSPLandroidx/appcompat/widget/AppCompatDrawableManager;->preload()V +Landroidx/appcompat/widget/AppCompatDrawableManager$1; +HSPLandroidx/appcompat/widget/AppCompatDrawableManager$1;->()V +HSPLandroidx/appcompat/widget/AppCompatDrawableManager$1;->arrayContains([II)Z +HSPLandroidx/appcompat/widget/AppCompatDrawableManager$1;->createDrawableFor(Landroidx/appcompat/widget/ResourceManagerInternal;Landroid/content/Context;I)Landroid/graphics/drawable/Drawable; +HSPLandroidx/appcompat/widget/AppCompatDrawableManager$1;->getTintListForDrawableRes(Landroid/content/Context;I)Landroid/content/res/ColorStateList; +HSPLandroidx/appcompat/widget/AppCompatDrawableManager$1;->tintDrawable(Landroid/content/Context;ILandroid/graphics/drawable/Drawable;)Z +HSPLandroidx/appcompat/widget/AppCompatDrawableManager$1;->tintDrawableUsingColorFilter(Landroid/content/Context;ILandroid/graphics/drawable/Drawable;)Z +Landroidx/appcompat/widget/ContentFrameLayout; +HSPLandroidx/appcompat/widget/ContentFrameLayout;->(Landroid/content/Context;Landroid/util/AttributeSet;)V +HSPLandroidx/appcompat/widget/ContentFrameLayout;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V +HSPLandroidx/appcompat/widget/ContentFrameLayout;->getMinWidthMajor()Landroid/util/TypedValue; +HSPLandroidx/appcompat/widget/ContentFrameLayout;->getMinWidthMinor()Landroid/util/TypedValue; +HSPLandroidx/appcompat/widget/ContentFrameLayout;->onAttachedToWindow()V +HSPLandroidx/appcompat/widget/ContentFrameLayout;->onMeasure(II)V +HSPLandroidx/appcompat/widget/ContentFrameLayout;->setAttachListener(Landroidx/appcompat/widget/ContentFrameLayout$OnAttachListener;)V +HSPLandroidx/appcompat/widget/ContentFrameLayout;->setDecorPadding(IIII)V +Landroidx/appcompat/widget/ContentFrameLayout$OnAttachListener; +Landroidx/appcompat/widget/DrawableUtils; +HSPLandroidx/appcompat/widget/DrawableUtils;->()V +HSPLandroidx/appcompat/widget/DrawableUtils;->fixDrawable(Landroid/graphics/drawable/Drawable;)V +Landroidx/appcompat/widget/FitWindowsLinearLayout; +HSPLandroidx/appcompat/widget/FitWindowsLinearLayout;->(Landroid/content/Context;Landroid/util/AttributeSet;)V +HSPLandroidx/appcompat/widget/FitWindowsLinearLayout;->fitSystemWindows(Landroid/graphics/Rect;)Z +Landroidx/appcompat/widget/FitWindowsViewGroup; +Landroidx/appcompat/widget/ResourceManagerInternal; +HSPLandroidx/appcompat/widget/ResourceManagerInternal;->()V +HSPLandroidx/appcompat/widget/ResourceManagerInternal;->()V +HSPLandroidx/appcompat/widget/ResourceManagerInternal;->checkVectorDrawableSetup(Landroid/content/Context;)V +HSPLandroidx/appcompat/widget/ResourceManagerInternal;->createCacheKey(Landroid/util/TypedValue;)J +HSPLandroidx/appcompat/widget/ResourceManagerInternal;->createDrawableIfNeeded(Landroid/content/Context;I)Landroid/graphics/drawable/Drawable; +HSPLandroidx/appcompat/widget/ResourceManagerInternal;->get()Landroidx/appcompat/widget/ResourceManagerInternal; +HSPLandroidx/appcompat/widget/ResourceManagerInternal;->getCachedDrawable(Landroid/content/Context;J)Landroid/graphics/drawable/Drawable; +HSPLandroidx/appcompat/widget/ResourceManagerInternal;->getDrawable(Landroid/content/Context;I)Landroid/graphics/drawable/Drawable; +HSPLandroidx/appcompat/widget/ResourceManagerInternal;->getDrawable(Landroid/content/Context;IZ)Landroid/graphics/drawable/Drawable; +HSPLandroidx/appcompat/widget/ResourceManagerInternal;->getTintList(Landroid/content/Context;I)Landroid/content/res/ColorStateList; +HSPLandroidx/appcompat/widget/ResourceManagerInternal;->getTintListFromCache(Landroid/content/Context;I)Landroid/content/res/ColorStateList; +HSPLandroidx/appcompat/widget/ResourceManagerInternal;->installDefaultInflateDelegates(Landroidx/appcompat/widget/ResourceManagerInternal;)V +HSPLandroidx/appcompat/widget/ResourceManagerInternal;->isVectorDrawable(Landroid/graphics/drawable/Drawable;)Z +HSPLandroidx/appcompat/widget/ResourceManagerInternal;->loadDrawableFromDelegates(Landroid/content/Context;I)Landroid/graphics/drawable/Drawable; +HSPLandroidx/appcompat/widget/ResourceManagerInternal;->setHooks(Landroidx/appcompat/widget/ResourceManagerInternal$ResourceManagerHooks;)V +HSPLandroidx/appcompat/widget/ResourceManagerInternal;->tintDrawable(Landroid/content/Context;IZLandroid/graphics/drawable/Drawable;)Landroid/graphics/drawable/Drawable; +HSPLandroidx/appcompat/widget/ResourceManagerInternal;->tintDrawableUsingColorFilter(Landroid/content/Context;ILandroid/graphics/drawable/Drawable;)Z +Landroidx/appcompat/widget/ResourceManagerInternal$ColorFilterLruCache; +HSPLandroidx/appcompat/widget/ResourceManagerInternal$ColorFilterLruCache;->(I)V +Landroidx/appcompat/widget/ResourceManagerInternal$ResourceManagerHooks; +Landroidx/appcompat/widget/ResourcesWrapper; +Landroidx/appcompat/widget/TintTypedArray; +HSPLandroidx/appcompat/widget/TintTypedArray;->(Landroid/content/Context;Landroid/content/res/TypedArray;)V +HSPLandroidx/appcompat/widget/TintTypedArray;->getDrawableIfKnown(I)Landroid/graphics/drawable/Drawable; +HSPLandroidx/appcompat/widget/TintTypedArray;->obtainStyledAttributes(Landroid/content/Context;Landroid/util/AttributeSet;[I)Landroidx/appcompat/widget/TintTypedArray; +HSPLandroidx/appcompat/widget/TintTypedArray;->recycle()V +Landroidx/appcompat/widget/VectorEnabledTintResources; +HSPLandroidx/appcompat/widget/VectorEnabledTintResources;->()V +HSPLandroidx/appcompat/widget/VectorEnabledTintResources;->isCompatVectorFromResourcesEnabled()Z +HSPLandroidx/appcompat/widget/VectorEnabledTintResources;->shouldBeUsed()Z +Landroidx/appcompat/widget/ViewStubCompat; +HSPLandroidx/appcompat/widget/ViewStubCompat;->(Landroid/content/Context;Landroid/util/AttributeSet;)V +HSPLandroidx/appcompat/widget/ViewStubCompat;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V +HSPLandroidx/appcompat/widget/ViewStubCompat;->setVisibility(I)V +Landroidx/appcompat/widget/ViewUtils; +HSPLandroidx/appcompat/widget/ViewUtils;->()V +HSPLandroidx/appcompat/widget/ViewUtils;->makeOptionalFitsSystemWindows(Landroid/view/View;)V +Landroidx/arch/core/executor/ArchTaskExecutor; +HSPLandroidx/arch/core/executor/ArchTaskExecutor;->()V +HSPLandroidx/arch/core/executor/ArchTaskExecutor;->()V +HSPLandroidx/arch/core/executor/ArchTaskExecutor;->executeOnDiskIO(Ljava/lang/Runnable;)V +PLandroidx/arch/core/executor/ArchTaskExecutor;->getIOThreadExecutor()Ljava/util/concurrent/Executor; +HSPLandroidx/arch/core/executor/ArchTaskExecutor;->getInstance()Landroidx/arch/core/executor/ArchTaskExecutor; +HSPLandroidx/arch/core/executor/ArchTaskExecutor;->isMainThread()Z +HSPLandroidx/arch/core/executor/ArchTaskExecutor;->lambda$static$1(Ljava/lang/Runnable;)V +HSPLandroidx/arch/core/executor/ArchTaskExecutor;->postToMainThread(Ljava/lang/Runnable;)V +Landroidx/arch/core/executor/ArchTaskExecutor$$ExternalSyntheticLambda0; +HSPLandroidx/arch/core/executor/ArchTaskExecutor$$ExternalSyntheticLambda0;->()V +Landroidx/arch/core/executor/ArchTaskExecutor$$ExternalSyntheticLambda1; +HSPLandroidx/arch/core/executor/ArchTaskExecutor$$ExternalSyntheticLambda1;->()V +HSPLandroidx/arch/core/executor/ArchTaskExecutor$$ExternalSyntheticLambda1;->execute(Ljava/lang/Runnable;)V +Landroidx/arch/core/executor/DefaultTaskExecutor; +HSPLandroidx/arch/core/executor/DefaultTaskExecutor;->()V +HSPLandroidx/arch/core/executor/DefaultTaskExecutor;->createAsync(Landroid/os/Looper;)Landroid/os/Handler; +HSPLandroidx/arch/core/executor/DefaultTaskExecutor;->executeOnDiskIO(Ljava/lang/Runnable;)V +HSPLandroidx/arch/core/executor/DefaultTaskExecutor;->isMainThread()Z +HSPLandroidx/arch/core/executor/DefaultTaskExecutor;->postToMainThread(Ljava/lang/Runnable;)V +Landroidx/arch/core/executor/DefaultTaskExecutor$1; +HSPLandroidx/arch/core/executor/DefaultTaskExecutor$1;->(Landroidx/arch/core/executor/DefaultTaskExecutor;)V +HSPLandroidx/arch/core/executor/DefaultTaskExecutor$1;->newThread(Ljava/lang/Runnable;)Ljava/lang/Thread; +Landroidx/arch/core/executor/DefaultTaskExecutor$Api28Impl; +HSPLandroidx/arch/core/executor/DefaultTaskExecutor$Api28Impl;->createAsync(Landroid/os/Looper;)Landroid/os/Handler; +Landroidx/arch/core/executor/TaskExecutor; +HSPLandroidx/arch/core/executor/TaskExecutor;->()V +Landroidx/arch/core/internal/FastSafeIterableMap; +HSPLandroidx/arch/core/internal/FastSafeIterableMap;->()V +HSPLandroidx/arch/core/internal/FastSafeIterableMap;->ceil(Ljava/lang/Object;)Ljava/util/Map$Entry; +HSPLandroidx/arch/core/internal/FastSafeIterableMap;->contains(Ljava/lang/Object;)Z +HSPLandroidx/arch/core/internal/FastSafeIterableMap;->get(Ljava/lang/Object;)Landroidx/arch/core/internal/SafeIterableMap$Entry; +HSPLandroidx/arch/core/internal/FastSafeIterableMap;->putIfAbsent(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/arch/core/internal/FastSafeIterableMap;->remove(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/arch/core/internal/SafeIterableMap; +HSPLandroidx/arch/core/internal/SafeIterableMap;->()V +HSPLandroidx/arch/core/internal/SafeIterableMap;->eldest()Ljava/util/Map$Entry; +HSPLandroidx/arch/core/internal/SafeIterableMap;->get(Ljava/lang/Object;)Landroidx/arch/core/internal/SafeIterableMap$Entry; +HSPLandroidx/arch/core/internal/SafeIterableMap;->iterator()Ljava/util/Iterator; +HSPLandroidx/arch/core/internal/SafeIterableMap;->iteratorWithAdditions()Landroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions; +HSPLandroidx/arch/core/internal/SafeIterableMap;->newest()Ljava/util/Map$Entry; +HSPLandroidx/arch/core/internal/SafeIterableMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Landroidx/arch/core/internal/SafeIterableMap$Entry; +HSPLandroidx/arch/core/internal/SafeIterableMap;->putIfAbsent(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/arch/core/internal/SafeIterableMap;->remove(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/arch/core/internal/SafeIterableMap;->size()I +Landroidx/arch/core/internal/SafeIterableMap$AscendingIterator; +HSPLandroidx/arch/core/internal/SafeIterableMap$AscendingIterator;->(Landroidx/arch/core/internal/SafeIterableMap$Entry;Landroidx/arch/core/internal/SafeIterableMap$Entry;)V +Landroidx/arch/core/internal/SafeIterableMap$Entry; +HSPLandroidx/arch/core/internal/SafeIterableMap$Entry;->(Ljava/lang/Object;Ljava/lang/Object;)V +HSPLandroidx/arch/core/internal/SafeIterableMap$Entry;->getKey()Ljava/lang/Object; +HSPLandroidx/arch/core/internal/SafeIterableMap$Entry;->getValue()Ljava/lang/Object; +Landroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions; +HSPLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;->(Landroidx/arch/core/internal/SafeIterableMap;)V +HSPLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;->hasNext()Z +HSPLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;->next()Ljava/lang/Object; +HSPLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;->next()Ljava/util/Map$Entry; +HSPLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;->supportRemove(Landroidx/arch/core/internal/SafeIterableMap$Entry;)V +Landroidx/arch/core/internal/SafeIterableMap$ListIterator; +HSPLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->(Landroidx/arch/core/internal/SafeIterableMap$Entry;Landroidx/arch/core/internal/SafeIterableMap$Entry;)V +HSPLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->hasNext()Z +Landroidx/arch/core/internal/SafeIterableMap$SupportRemove; +HSPLandroidx/arch/core/internal/SafeIterableMap$SupportRemove;->()V +Landroidx/arch/core/util/Function; +Landroidx/biometric/BiometricManager; +HSPLandroidx/biometric/BiometricManager;->(Landroidx/biometric/BiometricManager$Injector;)V +HSPLandroidx/biometric/BiometricManager;->canAuthenticate(I)I +HSPLandroidx/biometric/BiometricManager;->from(Landroid/content/Context;)Landroidx/biometric/BiometricManager; +Landroidx/biometric/BiometricManager$Api29Impl; +HSPLandroidx/biometric/BiometricManager$Api29Impl;->create(Landroid/content/Context;)Landroid/hardware/biometrics/BiometricManager; +Landroidx/biometric/BiometricManager$Api30Impl; +HSPLandroidx/biometric/BiometricManager$Api30Impl;->canAuthenticate(Landroid/hardware/biometrics/BiometricManager;I)I +Landroidx/biometric/BiometricManager$DefaultInjector; +HSPLandroidx/biometric/BiometricManager$DefaultInjector;->(Landroid/content/Context;)V +HSPLandroidx/biometric/BiometricManager$DefaultInjector;->getBiometricManager()Landroid/hardware/biometrics/BiometricManager; +Landroidx/biometric/BiometricManager$Injector; +PLandroidx/biometric/auth/Class2BiometricAuthExtensionsKt$$ExternalSyntheticLambda0;->()V +Landroidx/camera/view/PreviewView$1$$ExternalSyntheticBackportWithForwarding0; +HSPLandroidx/camera/view/PreviewView$1$$ExternalSyntheticBackportWithForwarding0;->m(Ljava/util/concurrent/atomic/AtomicReference;Ljava/lang/Object;Ljava/lang/Object;)Z +Landroidx/collection/ArrayMap; +HSPLandroidx/collection/ArrayMap;->()V +HSPLandroidx/collection/ArrayMap;->(I)V +HSPLandroidx/collection/ArrayMap;->keySet()Ljava/util/Set; +HSPLandroidx/collection/ArrayMap;->values()Ljava/util/Collection; +Landroidx/collection/ArrayMap$KeyIterator; +HSPLandroidx/collection/ArrayMap$KeyIterator;->(Landroidx/collection/ArrayMap;)V +Landroidx/collection/ArrayMap$KeySet; +HSPLandroidx/collection/ArrayMap$KeySet;->(Landroidx/collection/ArrayMap;)V +HSPLandroidx/collection/ArrayMap$KeySet;->iterator()Ljava/util/Iterator; +Landroidx/collection/ArrayMap$ValueCollection; +HSPLandroidx/collection/ArrayMap$ValueCollection;->(Landroidx/collection/ArrayMap;)V +HSPLandroidx/collection/ArrayMap$ValueCollection;->iterator()Ljava/util/Iterator; +Landroidx/collection/ArrayMap$ValueIterator; +HSPLandroidx/collection/ArrayMap$ValueIterator;->(Landroidx/collection/ArrayMap;)V +Landroidx/collection/ArraySet; +HSPLandroidx/collection/ArraySet;->()V +HSPLandroidx/collection/ArraySet;->()V +HSPLandroidx/collection/ArraySet;->(I)V +HSPLandroidx/collection/ArraySet;->add(Ljava/lang/Object;)Z +HSPLandroidx/collection/ArraySet;->allocArrays(I)V +HSPLandroidx/collection/ArraySet;->clear()V +HSPLandroidx/collection/ArraySet;->freeArrays([I[Ljava/lang/Object;I)V +HSPLandroidx/collection/ArraySet;->indexOf(Ljava/lang/Object;I)I +HSPLandroidx/collection/ArraySet;->iterator()Ljava/util/Iterator; +HSPLandroidx/collection/ArraySet;->toArray()[Ljava/lang/Object; +HSPLandroidx/collection/ArraySet;->valueAt(I)Ljava/lang/Object; +Landroidx/collection/ArraySet$ElementIterator; +HSPLandroidx/collection/ArraySet$ElementIterator;->(Landroidx/collection/ArraySet;)V +HSPLandroidx/collection/ArraySet$ElementIterator;->elementAt(I)Ljava/lang/Object; +Landroidx/collection/ContainerHelpers; +HSPLandroidx/collection/ContainerHelpers;->()V +HSPLandroidx/collection/ContainerHelpers;->binarySearch([III)I +HSPLandroidx/collection/ContainerHelpers;->idealByteArraySize(I)I +HSPLandroidx/collection/ContainerHelpers;->idealIntArraySize(I)I +Landroidx/collection/IndexBasedArrayIterator; +HSPLandroidx/collection/IndexBasedArrayIterator;->(I)V +HSPLandroidx/collection/IndexBasedArrayIterator;->hasNext()Z +HSPLandroidx/collection/IndexBasedArrayIterator;->next()Ljava/lang/Object; +Landroidx/collection/LongSparseArray; +Landroidx/collection/LruCache; +HSPLandroidx/collection/LruCache;->(I)V +Landroidx/collection/SimpleArrayMap; +HSPLandroidx/collection/SimpleArrayMap;->()V +HSPLandroidx/collection/SimpleArrayMap;->(I)V +HSPLandroidx/collection/SimpleArrayMap;->allocArrays(I)V +HSPLandroidx/collection/SimpleArrayMap;->binarySearchHashes([III)I +HSPLandroidx/collection/SimpleArrayMap;->clear()V +HSPLandroidx/collection/SimpleArrayMap;->containsKey(Ljava/lang/Object;)Z +HSPLandroidx/collection/SimpleArrayMap;->freeArrays([I[Ljava/lang/Object;I)V +HSPLandroidx/collection/SimpleArrayMap;->get(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/collection/SimpleArrayMap;->getOrDefault(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/collection/SimpleArrayMap;->indexOf(Ljava/lang/Object;I)I +HSPLandroidx/collection/SimpleArrayMap;->indexOfKey(Ljava/lang/Object;)I +HSPLandroidx/collection/SimpleArrayMap;->isEmpty()Z +HSPLandroidx/collection/SimpleArrayMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/collection/SparseArrayCompat; +HSPLandroidx/collection/SparseArrayCompat;->()V +HSPLandroidx/collection/SparseArrayCompat;->()V +HSPLandroidx/collection/SparseArrayCompat;->(I)V +Landroidx/compose/animation/AnimatedContentKt; +HSPLandroidx/compose/animation/AnimatedContentKt;->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 +HSPLandroidx/compose/animation/AnimatedContentKt;->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 +HSPLandroidx/compose/animation/AnimatedContentKt;->SizeTransform$default(ZLkotlin/jvm/functions/Function2;ILjava/lang/Object;)Landroidx/compose/animation/SizeTransform; +HSPLandroidx/compose/animation/AnimatedContentKt;->SizeTransform(ZLkotlin/jvm/functions/Function2;)Landroidx/compose/animation/SizeTransform; +HSPLandroidx/compose/animation/AnimatedContentKt;->with(Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;)Landroidx/compose/animation/ContentTransform; +Landroidx/compose/animation/AnimatedContentKt$AnimatedContent$2; +HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$2;->()V +HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$2;->()V +HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/AnimatedContentKt$AnimatedContent$3; +HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$3;->(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 +Landroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1; +HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1;->(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 +HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$1; +HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$1;->(Landroidx/compose/animation/ContentTransform;)V +HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$1;->invoke-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; +Landroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$1$1; +HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$1$1;->(Landroidx/compose/ui/layout/Placeable;Landroidx/compose/animation/ContentTransform;)V +HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$1$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$3; +HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$3;->(Ljava/lang/Object;)V +HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$3;->invoke(Ljava/lang/Object;)Ljava/lang/Boolean; +HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$4; +HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$4;->(Landroidx/compose/animation/AnimatedContentTransitionScopeImpl;Ljava/lang/Object;Landroidx/compose/runtime/snapshots/SnapshotStateList;Lkotlin/jvm/functions/Function4;I)V +HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$4;->invoke(Landroidx/compose/animation/AnimatedVisibilityScope;Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$4$1; +HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$4$1;->(Landroidx/compose/runtime/snapshots/SnapshotStateList;Ljava/lang/Object;Landroidx/compose/animation/AnimatedContentTransitionScopeImpl;)V +HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$4$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult; +HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$4$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$4$1$invoke$$inlined$onDispose$1; +HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$4$1$invoke$$inlined$onDispose$1;->(Landroidx/compose/runtime/snapshots/SnapshotStateList;Ljava/lang/Object;Landroidx/compose/animation/AnimatedContentTransitionScopeImpl;)V +Landroidx/compose/animation/AnimatedContentKt$AnimatedContent$9; +HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$9;->(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 +Landroidx/compose/animation/AnimatedContentKt$SizeTransform$1; +HSPLandroidx/compose/animation/AnimatedContentKt$SizeTransform$1;->()V +HSPLandroidx/compose/animation/AnimatedContentKt$SizeTransform$1;->()V +Landroidx/compose/animation/AnimatedContentMeasurePolicy; +HSPLandroidx/compose/animation/AnimatedContentMeasurePolicy;->(Landroidx/compose/animation/AnimatedContentTransitionScopeImpl;)V +HSPLandroidx/compose/animation/AnimatedContentMeasurePolicy;->getRootScope()Landroidx/compose/animation/AnimatedContentTransitionScopeImpl; +HSPLandroidx/compose/animation/AnimatedContentMeasurePolicy;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; +Landroidx/compose/animation/AnimatedContentMeasurePolicy$measure$3; +HSPLandroidx/compose/animation/AnimatedContentMeasurePolicy$measure$3;->([Landroidx/compose/ui/layout/Placeable;Landroidx/compose/animation/AnimatedContentMeasurePolicy;II)V +HSPLandroidx/compose/animation/AnimatedContentMeasurePolicy$measure$3;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/animation/AnimatedContentMeasurePolicy$measure$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/AnimatedContentScope; +Landroidx/compose/animation/AnimatedContentScopeImpl; +HSPLandroidx/compose/animation/AnimatedContentScopeImpl;->(Landroidx/compose/animation/AnimatedVisibilityScope;)V +Landroidx/compose/animation/AnimatedContentTransitionScope; +Landroidx/compose/animation/AnimatedContentTransitionScopeImpl; +HSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl;->(Landroidx/compose/animation/core/Transition;Landroidx/compose/ui/Alignment;Landroidx/compose/ui/unit/LayoutDirection;)V +HSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl;->createSizeAnimationModifier$animation_release(Landroidx/compose/animation/ContentTransform;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl;->createSizeAnimationModifier$lambda$2(Landroidx/compose/runtime/MutableState;)Z +HSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl;->createSizeAnimationModifier$lambda$3(Landroidx/compose/runtime/MutableState;Z)V +HSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl;->getContentAlignment$animation_release()Landroidx/compose/ui/Alignment; +HSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl;->getInitialState()Ljava/lang/Object; +HSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl;->getTargetSizeMap$animation_release()Ljava/util/Map; +HSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl;->getTargetState()Ljava/lang/Object; +HSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl;->setContentAlignment$animation_release(Landroidx/compose/ui/Alignment;)V +HSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl;->setLayoutDirection$animation_release(Landroidx/compose/ui/unit/LayoutDirection;)V +HSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl;->setMeasuredSize-ozmzZPI$animation_release(J)V +Landroidx/compose/animation/AnimatedContentTransitionScopeImpl$ChildData; +HSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl$ChildData;->(Z)V +HSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl$ChildData;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl$ChildData;->isTarget()Z +HSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl$ChildData;->modifyParentData(Landroidx/compose/ui/unit/Density;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl$ChildData;->setTarget(Z)V +Landroidx/compose/animation/AnimatedEnterExitMeasurePolicy; +PLandroidx/compose/animation/AnimatedEnterExitMeasurePolicy;->(Landroidx/compose/animation/AnimatedVisibilityScopeImpl;)V +HSPLandroidx/compose/animation/AnimatedEnterExitMeasurePolicy;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; +Landroidx/compose/animation/AnimatedEnterExitMeasurePolicy$measure$1; +HSPLandroidx/compose/animation/AnimatedEnterExitMeasurePolicy$measure$1;->(Ljava/util/List;)V +HSPLandroidx/compose/animation/AnimatedEnterExitMeasurePolicy$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/animation/AnimatedEnterExitMeasurePolicy$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/AnimatedVisibilityKt; +HSPLandroidx/compose/animation/AnimatedVisibilityKt;->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/Function3;Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/animation/AnimatedVisibilityKt;->AnimatedVisibility(Landroidx/compose/animation/core/Transition;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V +HSPLandroidx/compose/animation/AnimatedVisibilityKt;->AnimatedVisibility(Landroidx/compose/foundation/layout/ColumnScope;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 +HSPLandroidx/compose/animation/AnimatedVisibilityKt;->AnimatedVisibility(Landroidx/compose/foundation/layout/RowScope;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 +HSPLandroidx/compose/animation/AnimatedVisibilityKt;->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 +HSPLandroidx/compose/animation/AnimatedVisibilityKt;->access$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/Function3;Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/animation/AnimatedVisibilityKt;->targetEnterExit(Landroidx/compose/animation/core/Transition;Lkotlin/jvm/functions/Function1;Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)Landroidx/compose/animation/EnterExitState; +Landroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$1$1; +HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$1$1;->(Landroidx/compose/animation/core/Transition;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$1$1$1; +HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$1$1$1;->(Landroidx/compose/animation/core/Transition;)V +HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$1$1$1;->invoke()Ljava/lang/Boolean; +HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$1$1$1;->invoke()Ljava/lang/Object; +Landroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$1$1$2; +HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$1$1$2;->(Landroidx/compose/runtime/MutableState;)V +HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$1$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$1$1$2;->emit(ZLkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$2; +HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$2;->(Landroidx/compose/animation/core/Transition;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Lkotlin/jvm/functions/Function3;I)V +HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$2;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$1; +HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$1;->()V +HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$1;->()V +HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$1;->invoke(Z)Ljava/lang/Boolean; +Landroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$2; +HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$2;->(ZLandroidx/compose/ui/Modifier;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Ljava/lang/String;Lkotlin/jvm/functions/Function3;II)V +Landroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$3; +HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$3;->()V +HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$3;->()V +HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$3;->invoke(Z)Ljava/lang/Boolean; +Landroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$4; +HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$4;->(Landroidx/compose/foundation/layout/RowScope;ZLandroidx/compose/ui/Modifier;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Ljava/lang/String;Lkotlin/jvm/functions/Function3;II)V +Landroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$5; +HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$5;->()V +HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$5;->()V +HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$5;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$5;->invoke(Z)Ljava/lang/Boolean; +Landroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$6; +HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$6;->(Landroidx/compose/foundation/layout/ColumnScope;ZLandroidx/compose/ui/Modifier;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Ljava/lang/String;Lkotlin/jvm/functions/Function3;II)V +Landroidx/compose/animation/AnimatedVisibilityScope; +Landroidx/compose/animation/AnimatedVisibilityScopeImpl; +PLandroidx/compose/animation/AnimatedVisibilityScopeImpl;->(Landroidx/compose/animation/core/Transition;)V +HSPLandroidx/compose/animation/AnimatedVisibilityScopeImpl;->getTargetSize$animation_release()Landroidx/compose/runtime/MutableState; +Landroidx/compose/animation/ChangeSize; +HSPLandroidx/compose/animation/ChangeSize;->(Landroidx/compose/ui/Alignment;Lkotlin/jvm/functions/Function1;Landroidx/compose/animation/core/FiniteAnimationSpec;Z)V +HSPLandroidx/compose/animation/ChangeSize;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/animation/ChangeSize;->getAlignment()Landroidx/compose/ui/Alignment; +HSPLandroidx/compose/animation/ChangeSize;->getAnimationSpec()Landroidx/compose/animation/core/FiniteAnimationSpec; +HSPLandroidx/compose/animation/ChangeSize;->getClip()Z +HSPLandroidx/compose/animation/ChangeSize;->getSize()Lkotlin/jvm/functions/Function1; +Landroidx/compose/animation/ColorVectorConverterKt; +HSPLandroidx/compose/animation/ColorVectorConverterKt;->()V +HSPLandroidx/compose/animation/ColorVectorConverterKt;->getVectorConverter(Landroidx/compose/ui/graphics/Color$Companion;)Lkotlin/jvm/functions/Function1; +Landroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1; +HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1;->()V +HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1;->()V +HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1;->invoke(Landroidx/compose/ui/graphics/colorspace/ColorSpace;)Landroidx/compose/animation/core/TwoWayConverter; +HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$1; +HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$1;->()V +HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$1;->()V +HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$1;->invoke-8_81llA(J)Landroidx/compose/animation/core/AnimationVector4D; +Landroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$2; +HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$2;->(Landroidx/compose/ui/graphics/colorspace/ColorSpace;)V +HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$2;->invoke-vNxB06k(Landroidx/compose/animation/core/AnimationVector4D;)J +Landroidx/compose/animation/ContentTransform; +HSPLandroidx/compose/animation/ContentTransform;->()V +HSPLandroidx/compose/animation/ContentTransform;->(Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;FLandroidx/compose/animation/SizeTransform;)V +HSPLandroidx/compose/animation/ContentTransform;->(Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;FLandroidx/compose/animation/SizeTransform;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/animation/ContentTransform;->getSizeTransform()Landroidx/compose/animation/SizeTransform; +HSPLandroidx/compose/animation/ContentTransform;->getTargetContentEnter()Landroidx/compose/animation/EnterTransition; +HSPLandroidx/compose/animation/ContentTransform;->getTargetContentZIndex()F +Landroidx/compose/animation/CrossfadeKt; +HSPLandroidx/compose/animation/CrossfadeKt;->Crossfade(Landroidx/compose/animation/core/Transition;Landroidx/compose/ui/Modifier;Landroidx/compose/animation/core/FiniteAnimationSpec;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V +HSPLandroidx/compose/animation/CrossfadeKt;->Crossfade(Ljava/lang/Object;Landroidx/compose/ui/Modifier;Landroidx/compose/animation/core/FiniteAnimationSpec;Ljava/lang/String;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V +Landroidx/compose/animation/CrossfadeKt$Crossfade$1; +HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$1;->(Ljava/lang/Object;Landroidx/compose/ui/Modifier;Landroidx/compose/animation/core/FiniteAnimationSpec;Ljava/lang/String;Lkotlin/jvm/functions/Function3;II)V +Landroidx/compose/animation/CrossfadeKt$Crossfade$3; +HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$3;->()V +HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$3;->()V +HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/CrossfadeKt$Crossfade$4$1; +HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$4$1;->(Landroidx/compose/animation/core/Transition;)V +HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$4$1;->invoke(Ljava/lang/Object;)Ljava/lang/Boolean; +HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$4$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/CrossfadeKt$Crossfade$5$1; +HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$5$1;->(Landroidx/compose/animation/core/Transition;ILandroidx/compose/animation/core/FiniteAnimationSpec;Ljava/lang/Object;Lkotlin/jvm/functions/Function3;)V +HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$5$1;->access$invoke$lambda$1(Landroidx/compose/runtime/State;)F +HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$5$1;->invoke$lambda$1(Landroidx/compose/runtime/State;)F +HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$5$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$5$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/CrossfadeKt$Crossfade$5$1$1$1; +HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$5$1$1$1;->(Landroidx/compose/runtime/State;)V +HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$5$1$1$1;->invoke(Landroidx/compose/ui/graphics/GraphicsLayerScope;)V +HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$5$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/CrossfadeKt$Crossfade$5$1$alpha$2; +HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$5$1$alpha$2;->(Landroidx/compose/animation/core/FiniteAnimationSpec;)V +HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$5$1$alpha$2;->invoke(Landroidx/compose/animation/core/Transition$Segment;Landroidx/compose/runtime/Composer;I)Landroidx/compose/animation/core/FiniteAnimationSpec; +HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$5$1$alpha$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/CrossfadeKt$Crossfade$7; +HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$7;->(Landroidx/compose/animation/core/Transition;Landroidx/compose/ui/Modifier;Landroidx/compose/animation/core/FiniteAnimationSpec;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;II)V +HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$7;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$7;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/EnterExitState; +HSPLandroidx/compose/animation/EnterExitState;->$values()[Landroidx/compose/animation/EnterExitState; +HSPLandroidx/compose/animation/EnterExitState;->()V +HSPLandroidx/compose/animation/EnterExitState;->(Ljava/lang/String;I)V +HSPLandroidx/compose/animation/EnterExitState;->values()[Landroidx/compose/animation/EnterExitState; +Landroidx/compose/animation/EnterExitTransitionKt; +HSPLandroidx/compose/animation/EnterExitTransitionKt;->()V +HSPLandroidx/compose/animation/EnterExitTransitionKt;->access$createModifier$lambda$11(Landroidx/compose/runtime/State;)F +HSPLandroidx/compose/animation/EnterExitTransitionKt;->access$createModifier$lambda$13(Landroidx/compose/runtime/State;)J +HSPLandroidx/compose/animation/EnterExitTransitionKt;->access$createModifier$lambda$8(Landroidx/compose/runtime/State;)F +HSPLandroidx/compose/animation/EnterExitTransitionKt;->access$getDefaultOffsetAnimationSpec$p()Landroidx/compose/animation/core/SpringSpec; +HSPLandroidx/compose/animation/EnterExitTransitionKt;->createModifier$lambda$1(Landroidx/compose/runtime/MutableState;)Z +HSPLandroidx/compose/animation/EnterExitTransitionKt;->createModifier$lambda$11(Landroidx/compose/runtime/State;)F +HSPLandroidx/compose/animation/EnterExitTransitionKt;->createModifier$lambda$13(Landroidx/compose/runtime/State;)J +HSPLandroidx/compose/animation/EnterExitTransitionKt;->createModifier$lambda$2(Landroidx/compose/runtime/MutableState;Z)V +HSPLandroidx/compose/animation/EnterExitTransitionKt;->createModifier$lambda$4(Landroidx/compose/runtime/MutableState;)Z +HSPLandroidx/compose/animation/EnterExitTransitionKt;->createModifier$lambda$5(Landroidx/compose/runtime/MutableState;Z)V +HSPLandroidx/compose/animation/EnterExitTransitionKt;->createModifier$lambda$8(Landroidx/compose/runtime/State;)F +HSPLandroidx/compose/animation/EnterExitTransitionKt;->createModifier(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Ljava/lang/String;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/animation/EnterExitTransitionKt;->expandHorizontally$default(Landroidx/compose/animation/core/FiniteAnimationSpec;Landroidx/compose/ui/Alignment$Horizontal;ZLkotlin/jvm/functions/Function1;ILjava/lang/Object;)Landroidx/compose/animation/EnterTransition; +HSPLandroidx/compose/animation/EnterExitTransitionKt;->expandHorizontally(Landroidx/compose/animation/core/FiniteAnimationSpec;Landroidx/compose/ui/Alignment$Horizontal;ZLkotlin/jvm/functions/Function1;)Landroidx/compose/animation/EnterTransition; +HSPLandroidx/compose/animation/EnterExitTransitionKt;->expandIn$default(Landroidx/compose/animation/core/FiniteAnimationSpec;Landroidx/compose/ui/Alignment;ZLkotlin/jvm/functions/Function1;ILjava/lang/Object;)Landroidx/compose/animation/EnterTransition; +HSPLandroidx/compose/animation/EnterExitTransitionKt;->expandIn(Landroidx/compose/animation/core/FiniteAnimationSpec;Landroidx/compose/ui/Alignment;ZLkotlin/jvm/functions/Function1;)Landroidx/compose/animation/EnterTransition; +HSPLandroidx/compose/animation/EnterExitTransitionKt;->expandVertically$default(Landroidx/compose/animation/core/FiniteAnimationSpec;Landroidx/compose/ui/Alignment$Vertical;ZLkotlin/jvm/functions/Function1;ILjava/lang/Object;)Landroidx/compose/animation/EnterTransition; +HSPLandroidx/compose/animation/EnterExitTransitionKt;->expandVertically(Landroidx/compose/animation/core/FiniteAnimationSpec;Landroidx/compose/ui/Alignment$Vertical;ZLkotlin/jvm/functions/Function1;)Landroidx/compose/animation/EnterTransition; +HSPLandroidx/compose/animation/EnterExitTransitionKt;->fadeIn$default(Landroidx/compose/animation/core/FiniteAnimationSpec;FILjava/lang/Object;)Landroidx/compose/animation/EnterTransition; +HSPLandroidx/compose/animation/EnterExitTransitionKt;->fadeIn(Landroidx/compose/animation/core/FiniteAnimationSpec;F)Landroidx/compose/animation/EnterTransition; +HSPLandroidx/compose/animation/EnterExitTransitionKt;->fadeOut$default(Landroidx/compose/animation/core/FiniteAnimationSpec;FILjava/lang/Object;)Landroidx/compose/animation/ExitTransition; +HSPLandroidx/compose/animation/EnterExitTransitionKt;->fadeOut(Landroidx/compose/animation/core/FiniteAnimationSpec;F)Landroidx/compose/animation/ExitTransition; +HSPLandroidx/compose/animation/EnterExitTransitionKt;->scaleIn-L8ZKh-E$default(Landroidx/compose/animation/core/FiniteAnimationSpec;FJILjava/lang/Object;)Landroidx/compose/animation/EnterTransition; +HSPLandroidx/compose/animation/EnterExitTransitionKt;->scaleIn-L8ZKh-E(Landroidx/compose/animation/core/FiniteAnimationSpec;FJ)Landroidx/compose/animation/EnterTransition; +HSPLandroidx/compose/animation/EnterExitTransitionKt;->scaleOut-L8ZKh-E$default(Landroidx/compose/animation/core/FiniteAnimationSpec;FJILjava/lang/Object;)Landroidx/compose/animation/ExitTransition; +HSPLandroidx/compose/animation/EnterExitTransitionKt;->scaleOut-L8ZKh-E(Landroidx/compose/animation/core/FiniteAnimationSpec;FJ)Landroidx/compose/animation/ExitTransition; +HSPLandroidx/compose/animation/EnterExitTransitionKt;->shrinkExpand(Landroidx/compose/ui/Modifier;Landroidx/compose/animation/core/Transition;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Ljava/lang/String;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/animation/EnterExitTransitionKt;->shrinkHorizontally$default(Landroidx/compose/animation/core/FiniteAnimationSpec;Landroidx/compose/ui/Alignment$Horizontal;ZLkotlin/jvm/functions/Function1;ILjava/lang/Object;)Landroidx/compose/animation/ExitTransition; +HSPLandroidx/compose/animation/EnterExitTransitionKt;->shrinkHorizontally(Landroidx/compose/animation/core/FiniteAnimationSpec;Landroidx/compose/ui/Alignment$Horizontal;ZLkotlin/jvm/functions/Function1;)Landroidx/compose/animation/ExitTransition; +HSPLandroidx/compose/animation/EnterExitTransitionKt;->shrinkOut$default(Landroidx/compose/animation/core/FiniteAnimationSpec;Landroidx/compose/ui/Alignment;ZLkotlin/jvm/functions/Function1;ILjava/lang/Object;)Landroidx/compose/animation/ExitTransition; +HSPLandroidx/compose/animation/EnterExitTransitionKt;->shrinkOut(Landroidx/compose/animation/core/FiniteAnimationSpec;Landroidx/compose/ui/Alignment;ZLkotlin/jvm/functions/Function1;)Landroidx/compose/animation/ExitTransition; +HSPLandroidx/compose/animation/EnterExitTransitionKt;->shrinkVertically$default(Landroidx/compose/animation/core/FiniteAnimationSpec;Landroidx/compose/ui/Alignment$Vertical;ZLkotlin/jvm/functions/Function1;ILjava/lang/Object;)Landroidx/compose/animation/ExitTransition; +HSPLandroidx/compose/animation/EnterExitTransitionKt;->shrinkVertically(Landroidx/compose/animation/core/FiniteAnimationSpec;Landroidx/compose/ui/Alignment$Vertical;ZLkotlin/jvm/functions/Function1;)Landroidx/compose/animation/ExitTransition; +HSPLandroidx/compose/animation/EnterExitTransitionKt;->slideIn(Landroidx/compose/animation/core/FiniteAnimationSpec;Lkotlin/jvm/functions/Function1;)Landroidx/compose/animation/EnterTransition; +HSPLandroidx/compose/animation/EnterExitTransitionKt;->slideInHorizontally(Landroidx/compose/animation/core/FiniteAnimationSpec;Lkotlin/jvm/functions/Function1;)Landroidx/compose/animation/EnterTransition; +HSPLandroidx/compose/animation/EnterExitTransitionKt;->slideInOut(Landroidx/compose/ui/Modifier;Landroidx/compose/animation/core/Transition;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Ljava/lang/String;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/animation/EnterExitTransitionKt;->slideOut(Landroidx/compose/animation/core/FiniteAnimationSpec;Lkotlin/jvm/functions/Function1;)Landroidx/compose/animation/ExitTransition; +HSPLandroidx/compose/animation/EnterExitTransitionKt;->slideOutHorizontally(Landroidx/compose/animation/core/FiniteAnimationSpec;Lkotlin/jvm/functions/Function1;)Landroidx/compose/animation/ExitTransition; +HSPLandroidx/compose/animation/EnterExitTransitionKt;->toAlignment(Landroidx/compose/ui/Alignment$Horizontal;)Landroidx/compose/ui/Alignment; +HSPLandroidx/compose/animation/EnterExitTransitionKt;->toAlignment(Landroidx/compose/ui/Alignment$Vertical;)Landroidx/compose/ui/Alignment; +Landroidx/compose/animation/EnterExitTransitionKt$TransformOriginVectorConverter$1; +HSPLandroidx/compose/animation/EnterExitTransitionKt$TransformOriginVectorConverter$1;->()V +HSPLandroidx/compose/animation/EnterExitTransitionKt$TransformOriginVectorConverter$1;->()V +HSPLandroidx/compose/animation/EnterExitTransitionKt$TransformOriginVectorConverter$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/animation/EnterExitTransitionKt$TransformOriginVectorConverter$1;->invoke-__ExYCQ(J)Landroidx/compose/animation/core/AnimationVector2D; +Landroidx/compose/animation/EnterExitTransitionKt$TransformOriginVectorConverter$2; +HSPLandroidx/compose/animation/EnterExitTransitionKt$TransformOriginVectorConverter$2;->()V +HSPLandroidx/compose/animation/EnterExitTransitionKt$TransformOriginVectorConverter$2;->()V +Landroidx/compose/animation/EnterExitTransitionKt$WhenMappings; +HSPLandroidx/compose/animation/EnterExitTransitionKt$WhenMappings;->()V +Landroidx/compose/animation/EnterExitTransitionKt$createModifier$$inlined$animateValue$1; +HSPLandroidx/compose/animation/EnterExitTransitionKt$createModifier$$inlined$animateValue$1;->()V +HSPLandroidx/compose/animation/EnterExitTransitionKt$createModifier$$inlined$animateValue$1;->()V +HSPLandroidx/compose/animation/EnterExitTransitionKt$createModifier$$inlined$animateValue$1;->invoke(Landroidx/compose/animation/core/Transition$Segment;Landroidx/compose/runtime/Composer;I)Landroidx/compose/animation/core/SpringSpec; +HSPLandroidx/compose/animation/EnterExitTransitionKt$createModifier$$inlined$animateValue$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/EnterExitTransitionKt$createModifier$1$1; +HSPLandroidx/compose/animation/EnterExitTransitionKt$createModifier$1$1;->(Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;)V +HSPLandroidx/compose/animation/EnterExitTransitionKt$createModifier$1$1;->invoke(Landroidx/compose/ui/graphics/GraphicsLayerScope;)V +HSPLandroidx/compose/animation/EnterExitTransitionKt$createModifier$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/EnterExitTransitionKt$createModifier$2$1; +HSPLandroidx/compose/animation/EnterExitTransitionKt$createModifier$2$1;->(Landroidx/compose/runtime/State;)V +HSPLandroidx/compose/animation/EnterExitTransitionKt$createModifier$2$1;->invoke(Landroidx/compose/ui/graphics/GraphicsLayerScope;)V +HSPLandroidx/compose/animation/EnterExitTransitionKt$createModifier$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/EnterExitTransitionKt$createModifier$alpha$2; +HSPLandroidx/compose/animation/EnterExitTransitionKt$createModifier$alpha$2;->(Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;)V +HSPLandroidx/compose/animation/EnterExitTransitionKt$createModifier$alpha$2;->invoke(Landroidx/compose/animation/core/Transition$Segment;Landroidx/compose/runtime/Composer;I)Landroidx/compose/animation/core/FiniteAnimationSpec; +HSPLandroidx/compose/animation/EnterExitTransitionKt$createModifier$alpha$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/EnterExitTransitionKt$createModifier$scale$2; +HSPLandroidx/compose/animation/EnterExitTransitionKt$createModifier$scale$2;->(Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;)V +HSPLandroidx/compose/animation/EnterExitTransitionKt$createModifier$scale$2;->invoke(Landroidx/compose/animation/core/Transition$Segment;Landroidx/compose/runtime/Composer;I)Landroidx/compose/animation/core/FiniteAnimationSpec; +HSPLandroidx/compose/animation/EnterExitTransitionKt$createModifier$scale$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/EnterExitTransitionKt$expandHorizontally$1; +HSPLandroidx/compose/animation/EnterExitTransitionKt$expandHorizontally$1;->()V +HSPLandroidx/compose/animation/EnterExitTransitionKt$expandHorizontally$1;->()V +Landroidx/compose/animation/EnterExitTransitionKt$expandHorizontally$2; +HSPLandroidx/compose/animation/EnterExitTransitionKt$expandHorizontally$2;->(Lkotlin/jvm/functions/Function1;)V +Landroidx/compose/animation/EnterExitTransitionKt$expandIn$1; +HSPLandroidx/compose/animation/EnterExitTransitionKt$expandIn$1;->()V +HSPLandroidx/compose/animation/EnterExitTransitionKt$expandIn$1;->()V +Landroidx/compose/animation/EnterExitTransitionKt$expandVertically$1; +HSPLandroidx/compose/animation/EnterExitTransitionKt$expandVertically$1;->()V +HSPLandroidx/compose/animation/EnterExitTransitionKt$expandVertically$1;->()V +Landroidx/compose/animation/EnterExitTransitionKt$expandVertically$2; +HSPLandroidx/compose/animation/EnterExitTransitionKt$expandVertically$2;->(Lkotlin/jvm/functions/Function1;)V +Landroidx/compose/animation/EnterExitTransitionKt$shrinkExpand$1; +HSPLandroidx/compose/animation/EnterExitTransitionKt$shrinkExpand$1;->(Landroidx/compose/animation/core/Transition;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Ljava/lang/String;)V +HSPLandroidx/compose/animation/EnterExitTransitionKt$shrinkExpand$1;->invoke$lambda$1(Landroidx/compose/runtime/MutableState;)Z +HSPLandroidx/compose/animation/EnterExitTransitionKt$shrinkExpand$1;->invoke$lambda$2(Landroidx/compose/runtime/MutableState;Z)V +HSPLandroidx/compose/animation/EnterExitTransitionKt$shrinkExpand$1;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/animation/EnterExitTransitionKt$shrinkExpand$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/EnterExitTransitionKt$shrinkHorizontally$1; +HSPLandroidx/compose/animation/EnterExitTransitionKt$shrinkHorizontally$1;->()V +HSPLandroidx/compose/animation/EnterExitTransitionKt$shrinkHorizontally$1;->()V +Landroidx/compose/animation/EnterExitTransitionKt$shrinkHorizontally$2; +HSPLandroidx/compose/animation/EnterExitTransitionKt$shrinkHorizontally$2;->(Lkotlin/jvm/functions/Function1;)V +Landroidx/compose/animation/EnterExitTransitionKt$shrinkOut$1; +HSPLandroidx/compose/animation/EnterExitTransitionKt$shrinkOut$1;->()V +HSPLandroidx/compose/animation/EnterExitTransitionKt$shrinkOut$1;->()V +Landroidx/compose/animation/EnterExitTransitionKt$shrinkVertically$1; +HSPLandroidx/compose/animation/EnterExitTransitionKt$shrinkVertically$1;->()V +HSPLandroidx/compose/animation/EnterExitTransitionKt$shrinkVertically$1;->()V +Landroidx/compose/animation/EnterExitTransitionKt$shrinkVertically$2; +HSPLandroidx/compose/animation/EnterExitTransitionKt$shrinkVertically$2;->(Lkotlin/jvm/functions/Function1;)V +Landroidx/compose/animation/EnterExitTransitionKt$slideInHorizontally$2; +HSPLandroidx/compose/animation/EnterExitTransitionKt$slideInHorizontally$2;->(Lkotlin/jvm/functions/Function1;)V +Landroidx/compose/animation/EnterExitTransitionKt$slideInOut$1; +HSPLandroidx/compose/animation/EnterExitTransitionKt$slideInOut$1;->(Landroidx/compose/animation/core/Transition;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Ljava/lang/String;)V +HSPLandroidx/compose/animation/EnterExitTransitionKt$slideInOut$1;->invoke$lambda$1(Landroidx/compose/runtime/MutableState;)Z +HSPLandroidx/compose/animation/EnterExitTransitionKt$slideInOut$1;->invoke$lambda$2(Landroidx/compose/runtime/MutableState;Z)V +HSPLandroidx/compose/animation/EnterExitTransitionKt$slideInOut$1;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/animation/EnterExitTransitionKt$slideInOut$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/EnterExitTransitionKt$slideOutHorizontally$2; +HSPLandroidx/compose/animation/EnterExitTransitionKt$slideOutHorizontally$2;->(Lkotlin/jvm/functions/Function1;)V +Landroidx/compose/animation/EnterTransition; +HSPLandroidx/compose/animation/EnterTransition;->()V +HSPLandroidx/compose/animation/EnterTransition;->()V +HSPLandroidx/compose/animation/EnterTransition;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/animation/EnterTransition;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/animation/EnterTransition;->plus(Landroidx/compose/animation/EnterTransition;)Landroidx/compose/animation/EnterTransition; +Landroidx/compose/animation/EnterTransition$Companion; +HSPLandroidx/compose/animation/EnterTransition$Companion;->()V +HSPLandroidx/compose/animation/EnterTransition$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/animation/EnterTransitionImpl; +HSPLandroidx/compose/animation/EnterTransitionImpl;->(Landroidx/compose/animation/TransitionData;)V +HSPLandroidx/compose/animation/EnterTransitionImpl;->getData$animation_release()Landroidx/compose/animation/TransitionData; +Landroidx/compose/animation/ExitTransition; +HSPLandroidx/compose/animation/ExitTransition;->()V +HSPLandroidx/compose/animation/ExitTransition;->()V +HSPLandroidx/compose/animation/ExitTransition;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/animation/ExitTransition;->access$getNone$cp()Landroidx/compose/animation/ExitTransition; +HSPLandroidx/compose/animation/ExitTransition;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/animation/ExitTransition;->plus(Landroidx/compose/animation/ExitTransition;)Landroidx/compose/animation/ExitTransition; +Landroidx/compose/animation/ExitTransition$Companion; +HSPLandroidx/compose/animation/ExitTransition$Companion;->()V +HSPLandroidx/compose/animation/ExitTransition$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/animation/ExitTransition$Companion;->getNone()Landroidx/compose/animation/ExitTransition; +Landroidx/compose/animation/ExitTransitionImpl; +HSPLandroidx/compose/animation/ExitTransitionImpl;->(Landroidx/compose/animation/TransitionData;)V +HSPLandroidx/compose/animation/ExitTransitionImpl;->getData$animation_release()Landroidx/compose/animation/TransitionData; +Landroidx/compose/animation/ExpandShrinkModifier; +HSPLandroidx/compose/animation/ExpandShrinkModifier;->(Landroidx/compose/animation/core/Transition$DeferredAnimation;Landroidx/compose/animation/core/Transition$DeferredAnimation;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;)V +HSPLandroidx/compose/animation/ExpandShrinkModifier;->getCurrentAlignment()Landroidx/compose/ui/Alignment; +HSPLandroidx/compose/animation/ExpandShrinkModifier;->getExpand()Landroidx/compose/runtime/State; +HSPLandroidx/compose/animation/ExpandShrinkModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; +HSPLandroidx/compose/animation/ExpandShrinkModifier;->setCurrentAlignment(Landroidx/compose/ui/Alignment;)V +HSPLandroidx/compose/animation/ExpandShrinkModifier;->sizeByState-Uzc_VyU(Landroidx/compose/animation/EnterExitState;J)J +HSPLandroidx/compose/animation/ExpandShrinkModifier;->targetOffsetByState-oFUgxo0(Landroidx/compose/animation/EnterExitState;J)J +Landroidx/compose/animation/ExpandShrinkModifier$WhenMappings; +HSPLandroidx/compose/animation/ExpandShrinkModifier$WhenMappings;->()V +Landroidx/compose/animation/ExpandShrinkModifier$measure$1; +HSPLandroidx/compose/animation/ExpandShrinkModifier$measure$1;->(Landroidx/compose/ui/layout/Placeable;JJ)V +HSPLandroidx/compose/animation/ExpandShrinkModifier$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/animation/ExpandShrinkModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/ExpandShrinkModifier$measure$currentSize$1; +HSPLandroidx/compose/animation/ExpandShrinkModifier$measure$currentSize$1;->(Landroidx/compose/animation/ExpandShrinkModifier;J)V +HSPLandroidx/compose/animation/ExpandShrinkModifier$measure$currentSize$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/animation/ExpandShrinkModifier$measure$currentSize$1;->invoke-YEO4UFw(Landroidx/compose/animation/EnterExitState;)J +Landroidx/compose/animation/ExpandShrinkModifier$measure$offsetDelta$1; +HSPLandroidx/compose/animation/ExpandShrinkModifier$measure$offsetDelta$1;->()V +HSPLandroidx/compose/animation/ExpandShrinkModifier$measure$offsetDelta$1;->()V +HSPLandroidx/compose/animation/ExpandShrinkModifier$measure$offsetDelta$1;->invoke(Landroidx/compose/animation/core/Transition$Segment;)Landroidx/compose/animation/core/FiniteAnimationSpec; +HSPLandroidx/compose/animation/ExpandShrinkModifier$measure$offsetDelta$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/ExpandShrinkModifier$measure$offsetDelta$2; +HSPLandroidx/compose/animation/ExpandShrinkModifier$measure$offsetDelta$2;->(Landroidx/compose/animation/ExpandShrinkModifier;J)V +HSPLandroidx/compose/animation/ExpandShrinkModifier$measure$offsetDelta$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/animation/ExpandShrinkModifier$measure$offsetDelta$2;->invoke-Bjo55l4(Landroidx/compose/animation/EnterExitState;)J +Landroidx/compose/animation/ExpandShrinkModifier$sizeTransitionSpec$1; +HSPLandroidx/compose/animation/ExpandShrinkModifier$sizeTransitionSpec$1;->(Landroidx/compose/animation/ExpandShrinkModifier;)V +HSPLandroidx/compose/animation/ExpandShrinkModifier$sizeTransitionSpec$1;->invoke(Landroidx/compose/animation/core/Transition$Segment;)Landroidx/compose/animation/core/FiniteAnimationSpec; +HSPLandroidx/compose/animation/ExpandShrinkModifier$sizeTransitionSpec$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/Fade; +HSPLandroidx/compose/animation/Fade;->(FLandroidx/compose/animation/core/FiniteAnimationSpec;)V +HSPLandroidx/compose/animation/Fade;->getAlpha()F +HSPLandroidx/compose/animation/Fade;->getAnimationSpec()Landroidx/compose/animation/core/FiniteAnimationSpec; +Landroidx/compose/animation/FlingCalculator; +HSPLandroidx/compose/animation/FlingCalculator;->(FLandroidx/compose/ui/unit/Density;)V +HSPLandroidx/compose/animation/FlingCalculator;->computeDeceleration(Landroidx/compose/ui/unit/Density;)F +Landroidx/compose/animation/FlingCalculatorKt; +HSPLandroidx/compose/animation/FlingCalculatorKt;->()V +HSPLandroidx/compose/animation/FlingCalculatorKt;->access$computeDeceleration(FF)F +HSPLandroidx/compose/animation/FlingCalculatorKt;->computeDeceleration(FF)F +Landroidx/compose/animation/LayoutModifierWithPassThroughIntrinsics; +HSPLandroidx/compose/animation/LayoutModifierWithPassThroughIntrinsics;->()V +Landroidx/compose/animation/Scale; +HSPLandroidx/compose/animation/Scale;->(FJLandroidx/compose/animation/core/FiniteAnimationSpec;)V +HSPLandroidx/compose/animation/Scale;->(FJLandroidx/compose/animation/core/FiniteAnimationSpec;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/animation/Scale;->getAnimationSpec()Landroidx/compose/animation/core/FiniteAnimationSpec; +HSPLandroidx/compose/animation/Scale;->getScale()F +HSPLandroidx/compose/animation/Scale;->getTransformOrigin-SzJe1aQ()J +Landroidx/compose/animation/SingleValueAnimationKt; +HSPLandroidx/compose/animation/SingleValueAnimationKt;->()V +HSPLandroidx/compose/animation/SingleValueAnimationKt;->animateColorAsState-euL9pac(JLandroidx/compose/animation/core/AnimationSpec;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/State; +Landroidx/compose/animation/SizeTransform; +Landroidx/compose/animation/SizeTransformImpl; +HSPLandroidx/compose/animation/SizeTransformImpl;->(ZLkotlin/jvm/functions/Function2;)V +Landroidx/compose/animation/Slide; +HSPLandroidx/compose/animation/Slide;->(Lkotlin/jvm/functions/Function1;Landroidx/compose/animation/core/FiniteAnimationSpec;)V +HSPLandroidx/compose/animation/Slide;->equals(Ljava/lang/Object;)Z +Landroidx/compose/animation/SplineBasedFloatDecayAnimationSpec; +HSPLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec;->()V +HSPLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec;->(Landroidx/compose/ui/unit/Density;)V +Landroidx/compose/animation/SplineBasedFloatDecayAnimationSpec_androidKt; +HSPLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec_androidKt;->()V +HSPLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec_androidKt;->getPlatformFlingScrollFriction()F +HSPLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec_androidKt;->rememberSplineBasedDecay(Landroidx/compose/runtime/Composer;I)Landroidx/compose/animation/core/DecayAnimationSpec; +Landroidx/compose/animation/TransitionData; +HSPLandroidx/compose/animation/TransitionData;->(Landroidx/compose/animation/Fade;Landroidx/compose/animation/Slide;Landroidx/compose/animation/ChangeSize;Landroidx/compose/animation/Scale;)V +HSPLandroidx/compose/animation/TransitionData;->(Landroidx/compose/animation/Fade;Landroidx/compose/animation/Slide;Landroidx/compose/animation/ChangeSize;Landroidx/compose/animation/Scale;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/animation/TransitionData;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/animation/TransitionData;->getChangeSize()Landroidx/compose/animation/ChangeSize; +HSPLandroidx/compose/animation/TransitionData;->getFade()Landroidx/compose/animation/Fade; +HSPLandroidx/compose/animation/TransitionData;->getScale()Landroidx/compose/animation/Scale; +HSPLandroidx/compose/animation/TransitionData;->getSlide()Landroidx/compose/animation/Slide; +Landroidx/compose/animation/core/Animatable; +HSPLandroidx/compose/animation/core/Animatable;->()V +HSPLandroidx/compose/animation/core/Animatable;->(Ljava/lang/Object;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;Ljava/lang/String;)V +HSPLandroidx/compose/animation/core/Animatable;->(Ljava/lang/Object;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/animation/core/Animatable;->access$clampToBounds(Landroidx/compose/animation/core/Animatable;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/animation/core/Animatable;->access$endAnimation(Landroidx/compose/animation/core/Animatable;)V +HSPLandroidx/compose/animation/core/Animatable;->access$setRunning(Landroidx/compose/animation/core/Animatable;Z)V +HSPLandroidx/compose/animation/core/Animatable;->access$setTargetValue(Landroidx/compose/animation/core/Animatable;Ljava/lang/Object;)V +HSPLandroidx/compose/animation/core/Animatable;->animateTo$default(Landroidx/compose/animation/core/Animatable;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationSpec;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/animation/core/Animatable;->animateTo(Ljava/lang/Object;Landroidx/compose/animation/core/AnimationSpec;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/animation/core/Animatable;->asState()Landroidx/compose/runtime/State; +HSPLandroidx/compose/animation/core/Animatable;->clampToBounds(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/animation/core/Animatable;->createVector(Ljava/lang/Object;F)Landroidx/compose/animation/core/AnimationVector; +HSPLandroidx/compose/animation/core/Animatable;->endAnimation()V +HSPLandroidx/compose/animation/core/Animatable;->getInternalState$animation_core_release()Landroidx/compose/animation/core/AnimationState; +HSPLandroidx/compose/animation/core/Animatable;->getTargetValue()Ljava/lang/Object; +HSPLandroidx/compose/animation/core/Animatable;->getTypeConverter()Landroidx/compose/animation/core/TwoWayConverter; +HSPLandroidx/compose/animation/core/Animatable;->getValue()Ljava/lang/Object; +HSPLandroidx/compose/animation/core/Animatable;->getVelocity()Ljava/lang/Object; +HSPLandroidx/compose/animation/core/Animatable;->getVelocityVector()Landroidx/compose/animation/core/AnimationVector; +HSPLandroidx/compose/animation/core/Animatable;->runAnimation(Landroidx/compose/animation/core/Animation;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/animation/core/Animatable;->setRunning(Z)V +HSPLandroidx/compose/animation/core/Animatable;->setTargetValue(Ljava/lang/Object;)V +HSPLandroidx/compose/animation/core/Animatable;->snapTo(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/compose/animation/core/Animatable$runAnimation$2; +HSPLandroidx/compose/animation/core/Animatable$runAnimation$2;->(Landroidx/compose/animation/core/Animatable;Ljava/lang/Object;Landroidx/compose/animation/core/Animation;JLkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/animation/core/Animatable$runAnimation$2;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/animation/core/Animatable$runAnimation$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/animation/core/Animatable$runAnimation$2;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/animation/core/Animatable$runAnimation$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/core/Animatable$runAnimation$2$1; +HSPLandroidx/compose/animation/core/Animatable$runAnimation$2$1;->(Landroidx/compose/animation/core/Animatable;Landroidx/compose/animation/core/AnimationState;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/internal/Ref$BooleanRef;)V +HSPLandroidx/compose/animation/core/Animatable$runAnimation$2$1;->invoke(Landroidx/compose/animation/core/AnimationScope;)V +HSPLandroidx/compose/animation/core/Animatable$runAnimation$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/core/Animatable$snapTo$2; +HSPLandroidx/compose/animation/core/Animatable$snapTo$2;->(Landroidx/compose/animation/core/Animatable;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/animation/core/Animatable$snapTo$2;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/animation/core/Animatable$snapTo$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/animation/core/Animatable$snapTo$2;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/animation/core/Animatable$snapTo$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/core/AnimatableKt; +HSPLandroidx/compose/animation/core/AnimatableKt;->Animatable$default(FFILjava/lang/Object;)Landroidx/compose/animation/core/Animatable; +HSPLandroidx/compose/animation/core/AnimatableKt;->Animatable(FF)Landroidx/compose/animation/core/Animatable; +Landroidx/compose/animation/core/AnimateAsStateKt; +HSPLandroidx/compose/animation/core/AnimateAsStateKt;->()V +HSPLandroidx/compose/animation/core/AnimateAsStateKt;->access$animateValueAsState$lambda$4(Landroidx/compose/runtime/State;)Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/animation/core/AnimateAsStateKt;->access$animateValueAsState$lambda$6(Landroidx/compose/runtime/State;)Landroidx/compose/animation/core/AnimationSpec; +HSPLandroidx/compose/animation/core/AnimateAsStateKt;->animateDpAsState-AjpBEmI(FLandroidx/compose/animation/core/AnimationSpec;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/State; +HSPLandroidx/compose/animation/core/AnimateAsStateKt;->animateFloatAsState(FLandroidx/compose/animation/core/AnimationSpec;FLjava/lang/String;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/State; +HSPLandroidx/compose/animation/core/AnimateAsStateKt;->animateValueAsState$lambda$4(Landroidx/compose/runtime/State;)Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/animation/core/AnimateAsStateKt;->animateValueAsState$lambda$6(Landroidx/compose/runtime/State;)Landroidx/compose/animation/core/AnimationSpec; +HSPLandroidx/compose/animation/core/AnimateAsStateKt;->animateValueAsState(Ljava/lang/Object;Landroidx/compose/animation/core/TwoWayConverter;Landroidx/compose/animation/core/AnimationSpec;Ljava/lang/Object;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/State; +Landroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$2; +HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$2;->(Lkotlinx/coroutines/channels/Channel;Ljava/lang/Object;)V +HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$2;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$2;->invoke()V +Landroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3; +HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3;->(Lkotlinx/coroutines/channels/Channel;Landroidx/compose/animation/core/Animatable;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3$1; +HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3$1;->(Ljava/lang/Object;Landroidx/compose/animation/core/Animatable;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/core/Animation; +HSPLandroidx/compose/animation/core/Animation;->isFinishedFromNanos(J)Z +Landroidx/compose/animation/core/AnimationEndReason; +HSPLandroidx/compose/animation/core/AnimationEndReason;->$values()[Landroidx/compose/animation/core/AnimationEndReason; +HSPLandroidx/compose/animation/core/AnimationEndReason;->()V +HSPLandroidx/compose/animation/core/AnimationEndReason;->(Ljava/lang/String;I)V +Landroidx/compose/animation/core/AnimationKt; +HSPLandroidx/compose/animation/core/AnimationKt;->TargetBasedAnimation(Landroidx/compose/animation/core/AnimationSpec;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Landroidx/compose/animation/core/TargetBasedAnimation; +Landroidx/compose/animation/core/AnimationResult; +HSPLandroidx/compose/animation/core/AnimationResult;->()V +HSPLandroidx/compose/animation/core/AnimationResult;->(Landroidx/compose/animation/core/AnimationState;Landroidx/compose/animation/core/AnimationEndReason;)V +Landroidx/compose/animation/core/AnimationScope; +HSPLandroidx/compose/animation/core/AnimationScope;->()V +HSPLandroidx/compose/animation/core/AnimationScope;->(Ljava/lang/Object;Landroidx/compose/animation/core/TwoWayConverter;Landroidx/compose/animation/core/AnimationVector;JLjava/lang/Object;JZLkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/animation/core/AnimationScope;->getFinishedTimeNanos()J +HSPLandroidx/compose/animation/core/AnimationScope;->getLastFrameTimeNanos()J +HSPLandroidx/compose/animation/core/AnimationScope;->getStartTimeNanos()J +HSPLandroidx/compose/animation/core/AnimationScope;->getValue()Ljava/lang/Object; +HSPLandroidx/compose/animation/core/AnimationScope;->getVelocityVector()Landroidx/compose/animation/core/AnimationVector; +HSPLandroidx/compose/animation/core/AnimationScope;->isRunning()Z +HSPLandroidx/compose/animation/core/AnimationScope;->setFinishedTimeNanos$animation_core_release(J)V +HSPLandroidx/compose/animation/core/AnimationScope;->setLastFrameTimeNanos$animation_core_release(J)V +HSPLandroidx/compose/animation/core/AnimationScope;->setRunning$animation_core_release(Z)V +HSPLandroidx/compose/animation/core/AnimationScope;->setValue$animation_core_release(Ljava/lang/Object;)V +HSPLandroidx/compose/animation/core/AnimationScope;->setVelocityVector$animation_core_release(Landroidx/compose/animation/core/AnimationVector;)V +Landroidx/compose/animation/core/AnimationSpec; +Landroidx/compose/animation/core/AnimationSpecKt; +HSPLandroidx/compose/animation/core/AnimationSpecKt;->access$convert(Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;)Landroidx/compose/animation/core/AnimationVector; +HSPLandroidx/compose/animation/core/AnimationSpecKt;->convert(Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;)Landroidx/compose/animation/core/AnimationVector; +HSPLandroidx/compose/animation/core/AnimationSpecKt;->infiniteRepeatable-9IiC70o$default(Landroidx/compose/animation/core/DurationBasedAnimationSpec;Landroidx/compose/animation/core/RepeatMode;JILjava/lang/Object;)Landroidx/compose/animation/core/InfiniteRepeatableSpec; +HSPLandroidx/compose/animation/core/AnimationSpecKt;->infiniteRepeatable-9IiC70o(Landroidx/compose/animation/core/DurationBasedAnimationSpec;Landroidx/compose/animation/core/RepeatMode;J)Landroidx/compose/animation/core/InfiniteRepeatableSpec; +HSPLandroidx/compose/animation/core/AnimationSpecKt;->keyframes(Lkotlin/jvm/functions/Function1;)Landroidx/compose/animation/core/KeyframesSpec; +HSPLandroidx/compose/animation/core/AnimationSpecKt;->snap$default(IILjava/lang/Object;)Landroidx/compose/animation/core/SnapSpec; +HSPLandroidx/compose/animation/core/AnimationSpecKt;->snap(I)Landroidx/compose/animation/core/SnapSpec; +HSPLandroidx/compose/animation/core/AnimationSpecKt;->spring$default(FFLjava/lang/Object;ILjava/lang/Object;)Landroidx/compose/animation/core/SpringSpec; +HSPLandroidx/compose/animation/core/AnimationSpecKt;->spring(FFLjava/lang/Object;)Landroidx/compose/animation/core/SpringSpec; +HSPLandroidx/compose/animation/core/AnimationSpecKt;->tween$default(IILandroidx/compose/animation/core/Easing;ILjava/lang/Object;)Landroidx/compose/animation/core/TweenSpec; +HSPLandroidx/compose/animation/core/AnimationSpecKt;->tween(IILandroidx/compose/animation/core/Easing;)Landroidx/compose/animation/core/TweenSpec; +Landroidx/compose/animation/core/AnimationState; +HSPLandroidx/compose/animation/core/AnimationState;->()V +HSPLandroidx/compose/animation/core/AnimationState;->(Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;JJZ)V +HSPLandroidx/compose/animation/core/AnimationState;->(Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;JJZILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/animation/core/AnimationState;->getLastFrameTimeNanos()J +HSPLandroidx/compose/animation/core/AnimationState;->getTypeConverter()Landroidx/compose/animation/core/TwoWayConverter; +HSPLandroidx/compose/animation/core/AnimationState;->getValue()Ljava/lang/Object; +HSPLandroidx/compose/animation/core/AnimationState;->getVelocityVector()Landroidx/compose/animation/core/AnimationVector; +HSPLandroidx/compose/animation/core/AnimationState;->isRunning()Z +HSPLandroidx/compose/animation/core/AnimationState;->setFinishedTimeNanos$animation_core_release(J)V +HSPLandroidx/compose/animation/core/AnimationState;->setLastFrameTimeNanos$animation_core_release(J)V +HSPLandroidx/compose/animation/core/AnimationState;->setRunning$animation_core_release(Z)V +HSPLandroidx/compose/animation/core/AnimationState;->setValue$animation_core_release(Ljava/lang/Object;)V +HSPLandroidx/compose/animation/core/AnimationState;->setVelocityVector$animation_core_release(Landroidx/compose/animation/core/AnimationVector;)V +Landroidx/compose/animation/core/AnimationStateKt; +HSPLandroidx/compose/animation/core/AnimationStateKt;->copy$default(Landroidx/compose/animation/core/AnimationState;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;JJZILjava/lang/Object;)Landroidx/compose/animation/core/AnimationState; +HSPLandroidx/compose/animation/core/AnimationStateKt;->copy(Landroidx/compose/animation/core/AnimationState;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;JJZ)Landroidx/compose/animation/core/AnimationState; +HSPLandroidx/compose/animation/core/AnimationStateKt;->createZeroVectorFrom(Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;)Landroidx/compose/animation/core/AnimationVector; +Landroidx/compose/animation/core/AnimationVector; +HSPLandroidx/compose/animation/core/AnimationVector;->()V +HSPLandroidx/compose/animation/core/AnimationVector;->()V +HSPLandroidx/compose/animation/core/AnimationVector;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/animation/core/AnimationVector1D; +HSPLandroidx/compose/animation/core/AnimationVector1D;->()V +HSPLandroidx/compose/animation/core/AnimationVector1D;->(F)V +HSPLandroidx/compose/animation/core/AnimationVector1D;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/animation/core/AnimationVector1D;->get$animation_core_release(I)F +HSPLandroidx/compose/animation/core/AnimationVector1D;->getSize$animation_core_release()I +HSPLandroidx/compose/animation/core/AnimationVector1D;->getValue()F +HSPLandroidx/compose/animation/core/AnimationVector1D;->newVector$animation_core_release()Landroidx/compose/animation/core/AnimationVector1D; +HSPLandroidx/compose/animation/core/AnimationVector1D;->newVector$animation_core_release()Landroidx/compose/animation/core/AnimationVector; +HSPLandroidx/compose/animation/core/AnimationVector1D;->reset$animation_core_release()V +HSPLandroidx/compose/animation/core/AnimationVector1D;->set$animation_core_release(IF)V +Landroidx/compose/animation/core/AnimationVector2D; +HSPLandroidx/compose/animation/core/AnimationVector2D;->()V +HSPLandroidx/compose/animation/core/AnimationVector2D;->(FF)V +HSPLandroidx/compose/animation/core/AnimationVector2D;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/animation/core/AnimationVector2D;->get$animation_core_release(I)F +HSPLandroidx/compose/animation/core/AnimationVector2D;->getSize$animation_core_release()I +HSPLandroidx/compose/animation/core/AnimationVector2D;->getV1()F +HSPLandroidx/compose/animation/core/AnimationVector2D;->getV2()F +HSPLandroidx/compose/animation/core/AnimationVector2D;->newVector$animation_core_release()Landroidx/compose/animation/core/AnimationVector2D; +HSPLandroidx/compose/animation/core/AnimationVector2D;->newVector$animation_core_release()Landroidx/compose/animation/core/AnimationVector; +HSPLandroidx/compose/animation/core/AnimationVector2D;->reset$animation_core_release()V +HSPLandroidx/compose/animation/core/AnimationVector2D;->set$animation_core_release(IF)V +Landroidx/compose/animation/core/AnimationVector4D; +HSPLandroidx/compose/animation/core/AnimationVector4D;->()V +HSPLandroidx/compose/animation/core/AnimationVector4D;->(FFFF)V +HSPLandroidx/compose/animation/core/AnimationVector4D;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/animation/core/AnimationVector4D;->get$animation_core_release(I)F +HSPLandroidx/compose/animation/core/AnimationVector4D;->getSize$animation_core_release()I +HSPLandroidx/compose/animation/core/AnimationVector4D;->getV1()F +HSPLandroidx/compose/animation/core/AnimationVector4D;->getV2()F +HSPLandroidx/compose/animation/core/AnimationVector4D;->getV3()F +HSPLandroidx/compose/animation/core/AnimationVector4D;->getV4()F +HSPLandroidx/compose/animation/core/AnimationVector4D;->newVector$animation_core_release()Landroidx/compose/animation/core/AnimationVector4D; +HSPLandroidx/compose/animation/core/AnimationVector4D;->newVector$animation_core_release()Landroidx/compose/animation/core/AnimationVector; +HSPLandroidx/compose/animation/core/AnimationVector4D;->reset$animation_core_release()V +HSPLandroidx/compose/animation/core/AnimationVector4D;->set$animation_core_release(IF)V +Landroidx/compose/animation/core/AnimationVectorsKt; +HSPLandroidx/compose/animation/core/AnimationVectorsKt;->copy(Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; +HSPLandroidx/compose/animation/core/AnimationVectorsKt;->copyFrom(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)V +HSPLandroidx/compose/animation/core/AnimationVectorsKt;->newInstance(Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; +Landroidx/compose/animation/core/Animations; +Landroidx/compose/animation/core/ComplexDouble; +HSPLandroidx/compose/animation/core/ComplexDouble;->(DD)V +HSPLandroidx/compose/animation/core/ComplexDouble;->access$get_imaginary$p(Landroidx/compose/animation/core/ComplexDouble;)D +HSPLandroidx/compose/animation/core/ComplexDouble;->access$get_real$p(Landroidx/compose/animation/core/ComplexDouble;)D +HSPLandroidx/compose/animation/core/ComplexDouble;->access$set_imaginary$p(Landroidx/compose/animation/core/ComplexDouble;D)V +HSPLandroidx/compose/animation/core/ComplexDouble;->access$set_real$p(Landroidx/compose/animation/core/ComplexDouble;D)V +HSPLandroidx/compose/animation/core/ComplexDouble;->getReal()D +Landroidx/compose/animation/core/ComplexDoubleKt; +HSPLandroidx/compose/animation/core/ComplexDoubleKt;->complexSqrt(D)Landroidx/compose/animation/core/ComplexDouble; +Landroidx/compose/animation/core/CubicBezierEasing; +HSPLandroidx/compose/animation/core/CubicBezierEasing;->()V +HSPLandroidx/compose/animation/core/CubicBezierEasing;->(FFFF)V +HSPLandroidx/compose/animation/core/CubicBezierEasing;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/animation/core/CubicBezierEasing;->evaluateCubic(FFF)F +HSPLandroidx/compose/animation/core/CubicBezierEasing;->transform(F)F +Landroidx/compose/animation/core/DecayAnimationSpec; +Landroidx/compose/animation/core/DecayAnimationSpecImpl; +HSPLandroidx/compose/animation/core/DecayAnimationSpecImpl;->(Landroidx/compose/animation/core/FloatDecayAnimationSpec;)V +Landroidx/compose/animation/core/DecayAnimationSpecKt; +HSPLandroidx/compose/animation/core/DecayAnimationSpecKt;->generateDecayAnimationSpec(Landroidx/compose/animation/core/FloatDecayAnimationSpec;)Landroidx/compose/animation/core/DecayAnimationSpec; +Landroidx/compose/animation/core/DurationBasedAnimationSpec; +Landroidx/compose/animation/core/Easing; +Landroidx/compose/animation/core/EasingKt; +HSPLandroidx/compose/animation/core/EasingKt;->()V +HSPLandroidx/compose/animation/core/EasingKt;->getFastOutLinearInEasing()Landroidx/compose/animation/core/Easing; +HSPLandroidx/compose/animation/core/EasingKt;->getFastOutSlowInEasing()Landroidx/compose/animation/core/Easing; +HSPLandroidx/compose/animation/core/EasingKt;->getLinearEasing()Landroidx/compose/animation/core/Easing; +Landroidx/compose/animation/core/EasingKt$LinearEasing$1; +HSPLandroidx/compose/animation/core/EasingKt$LinearEasing$1;->()V +HSPLandroidx/compose/animation/core/EasingKt$LinearEasing$1;->()V +HSPLandroidx/compose/animation/core/EasingKt$LinearEasing$1;->transform(F)F +Landroidx/compose/animation/core/FiniteAnimationSpec; +Landroidx/compose/animation/core/FloatAnimationSpec; +Landroidx/compose/animation/core/FloatDecayAnimationSpec; +Landroidx/compose/animation/core/FloatSpringSpec; +HSPLandroidx/compose/animation/core/FloatSpringSpec;->()V +HSPLandroidx/compose/animation/core/FloatSpringSpec;->(FFF)V +HSPLandroidx/compose/animation/core/FloatSpringSpec;->(FFFILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/animation/core/FloatSpringSpec;->getDurationNanos(FFF)J +HSPLandroidx/compose/animation/core/FloatSpringSpec;->getEndVelocity(FFF)F +HSPLandroidx/compose/animation/core/FloatSpringSpec;->getValueFromNanos(JFFF)F +HSPLandroidx/compose/animation/core/FloatSpringSpec;->getVelocityFromNanos(JFFF)F +Landroidx/compose/animation/core/FloatTweenSpec; +HSPLandroidx/compose/animation/core/FloatTweenSpec;->()V +HSPLandroidx/compose/animation/core/FloatTweenSpec;->(IILandroidx/compose/animation/core/Easing;)V +HSPLandroidx/compose/animation/core/FloatTweenSpec;->clampPlayTime(J)J +HSPLandroidx/compose/animation/core/FloatTweenSpec;->getValueFromNanos(JFFF)F +HSPLandroidx/compose/animation/core/FloatTweenSpec;->getVelocityFromNanos(JFFF)F +Landroidx/compose/animation/core/InfiniteAnimationPolicyKt; +HSPLandroidx/compose/animation/core/InfiniteAnimationPolicyKt;->withInfiniteAnimationFrameNanos(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/compose/animation/core/InfiniteRepeatableSpec; +HSPLandroidx/compose/animation/core/InfiniteRepeatableSpec;->()V +HSPLandroidx/compose/animation/core/InfiniteRepeatableSpec;->(Landroidx/compose/animation/core/DurationBasedAnimationSpec;Landroidx/compose/animation/core/RepeatMode;J)V +HSPLandroidx/compose/animation/core/InfiniteRepeatableSpec;->(Landroidx/compose/animation/core/DurationBasedAnimationSpec;Landroidx/compose/animation/core/RepeatMode;JLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/animation/core/InfiniteRepeatableSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedAnimationSpec; +Landroidx/compose/animation/core/InfiniteTransition; +HSPLandroidx/compose/animation/core/InfiniteTransition;->()V +HSPLandroidx/compose/animation/core/InfiniteTransition;->(Ljava/lang/String;)V +HSPLandroidx/compose/animation/core/InfiniteTransition;->access$getStartTimeNanos$p(Landroidx/compose/animation/core/InfiniteTransition;)J +HSPLandroidx/compose/animation/core/InfiniteTransition;->access$get_animations$p(Landroidx/compose/animation/core/InfiniteTransition;)Landroidx/compose/runtime/collection/MutableVector; +HSPLandroidx/compose/animation/core/InfiniteTransition;->access$onFrame(Landroidx/compose/animation/core/InfiniteTransition;J)V +HSPLandroidx/compose/animation/core/InfiniteTransition;->access$setRefreshChildNeeded(Landroidx/compose/animation/core/InfiniteTransition;Z)V +HSPLandroidx/compose/animation/core/InfiniteTransition;->access$setStartTimeNanos$p(Landroidx/compose/animation/core/InfiniteTransition;J)V +HSPLandroidx/compose/animation/core/InfiniteTransition;->addAnimation$animation_core_release(Landroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;)V +HSPLandroidx/compose/animation/core/InfiniteTransition;->isRunning()Z +HSPLandroidx/compose/animation/core/InfiniteTransition;->onFrame(J)V +HSPLandroidx/compose/animation/core/InfiniteTransition;->removeAnimation$animation_core_release(Landroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;)V +HSPLandroidx/compose/animation/core/InfiniteTransition;->run$animation_core_release(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/animation/core/InfiniteTransition;->setRefreshChildNeeded(Z)V +HSPLandroidx/compose/animation/core/InfiniteTransition;->setRunning(Z)V +Landroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState; +HSPLandroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;->(Landroidx/compose/animation/core/InfiniteTransition;Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/animation/core/TwoWayConverter;Landroidx/compose/animation/core/AnimationSpec;Ljava/lang/String;)V +HSPLandroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;->getInitialValue$animation_core_release()Ljava/lang/Object; +HSPLandroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;->getTargetValue$animation_core_release()Ljava/lang/Object; +HSPLandroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;->getValue()Ljava/lang/Object; +HSPLandroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;->isFinished$animation_core_release()Z +HSPLandroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;->onPlayTimeChanged$animation_core_release(J)V +HSPLandroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;->reset$animation_core_release()V +HSPLandroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;->setValue$animation_core_release(Ljava/lang/Object;)V +Landroidx/compose/animation/core/InfiniteTransition$run$1; +HSPLandroidx/compose/animation/core/InfiniteTransition$run$1;->(Landroidx/compose/runtime/MutableState;Landroidx/compose/animation/core/InfiniteTransition;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/animation/core/InfiniteTransition$run$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/animation/core/InfiniteTransition$run$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/core/InfiniteTransition$run$1$1; +HSPLandroidx/compose/animation/core/InfiniteTransition$run$1$1;->(Landroidx/compose/runtime/MutableState;Landroidx/compose/animation/core/InfiniteTransition;Lkotlin/jvm/internal/Ref$FloatRef;Lkotlinx/coroutines/CoroutineScope;)V +HSPLandroidx/compose/animation/core/InfiniteTransition$run$1$1;->invoke(J)V +HSPLandroidx/compose/animation/core/InfiniteTransition$run$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/core/InfiniteTransition$run$2; +HSPLandroidx/compose/animation/core/InfiniteTransition$run$2;->(Landroidx/compose/animation/core/InfiniteTransition;I)V +Landroidx/compose/animation/core/InfiniteTransitionKt; +HSPLandroidx/compose/animation/core/InfiniteTransitionKt;->animateFloat(Landroidx/compose/animation/core/InfiniteTransition;FFLandroidx/compose/animation/core/InfiniteRepeatableSpec;Ljava/lang/String;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/State; +HSPLandroidx/compose/animation/core/InfiniteTransitionKt;->animateValue(Landroidx/compose/animation/core/InfiniteTransition;Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/animation/core/TwoWayConverter;Landroidx/compose/animation/core/InfiniteRepeatableSpec;Ljava/lang/String;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/State; +HSPLandroidx/compose/animation/core/InfiniteTransitionKt;->rememberInfiniteTransition(Ljava/lang/String;Landroidx/compose/runtime/Composer;II)Landroidx/compose/animation/core/InfiniteTransition; +Landroidx/compose/animation/core/InfiniteTransitionKt$animateValue$1; +HSPLandroidx/compose/animation/core/InfiniteTransitionKt$animateValue$1;->(Ljava/lang/Object;Landroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;Ljava/lang/Object;Landroidx/compose/animation/core/InfiniteRepeatableSpec;)V +HSPLandroidx/compose/animation/core/InfiniteTransitionKt$animateValue$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/animation/core/InfiniteTransitionKt$animateValue$1;->invoke()V +Landroidx/compose/animation/core/InfiniteTransitionKt$animateValue$2; +HSPLandroidx/compose/animation/core/InfiniteTransitionKt$animateValue$2;->(Landroidx/compose/animation/core/InfiniteTransition;Landroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;)V +HSPLandroidx/compose/animation/core/InfiniteTransitionKt$animateValue$2;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult; +HSPLandroidx/compose/animation/core/InfiniteTransitionKt$animateValue$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/core/InfiniteTransitionKt$animateValue$2$invoke$$inlined$onDispose$1; +HSPLandroidx/compose/animation/core/InfiniteTransitionKt$animateValue$2$invoke$$inlined$onDispose$1;->(Landroidx/compose/animation/core/InfiniteTransition;Landroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;)V +HSPLandroidx/compose/animation/core/InfiniteTransitionKt$animateValue$2$invoke$$inlined$onDispose$1;->dispose()V +Landroidx/compose/animation/core/KeyframesSpec; +HSPLandroidx/compose/animation/core/KeyframesSpec;->()V +HSPLandroidx/compose/animation/core/KeyframesSpec;->(Landroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig;)V +HSPLandroidx/compose/animation/core/KeyframesSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedDurationBasedAnimationSpec; +HSPLandroidx/compose/animation/core/KeyframesSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedKeyframesSpec; +Landroidx/compose/animation/core/KeyframesSpec$KeyframeEntity; +HSPLandroidx/compose/animation/core/KeyframesSpec$KeyframeEntity;->()V +HSPLandroidx/compose/animation/core/KeyframesSpec$KeyframeEntity;->(Ljava/lang/Object;Landroidx/compose/animation/core/Easing;)V +HSPLandroidx/compose/animation/core/KeyframesSpec$KeyframeEntity;->(Ljava/lang/Object;Landroidx/compose/animation/core/Easing;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/animation/core/KeyframesSpec$KeyframeEntity;->setEasing$animation_core_release(Landroidx/compose/animation/core/Easing;)V +HSPLandroidx/compose/animation/core/KeyframesSpec$KeyframeEntity;->toPair$animation_core_release(Lkotlin/jvm/functions/Function1;)Lkotlin/Pair; +Landroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig; +HSPLandroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig;->()V +HSPLandroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig;->()V +HSPLandroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig;->at(Ljava/lang/Object;I)Landroidx/compose/animation/core/KeyframesSpec$KeyframeEntity; +HSPLandroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig;->getDelayMillis()I +HSPLandroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig;->getDurationMillis()I +HSPLandroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig;->getKeyframes$animation_core_release()Ljava/util/Map; +HSPLandroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig;->setDurationMillis(I)V +HSPLandroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig;->with(Landroidx/compose/animation/core/KeyframesSpec$KeyframeEntity;Landroidx/compose/animation/core/Easing;)V +Landroidx/compose/animation/core/Motion; +HSPLandroidx/compose/animation/core/Motion;->constructor-impl(J)J +HSPLandroidx/compose/animation/core/Motion;->getValue-impl(J)F +HSPLandroidx/compose/animation/core/Motion;->getVelocity-impl(J)F +Landroidx/compose/animation/core/MutableTransitionState; +HSPLandroidx/compose/animation/core/MutableTransitionState;->()V +HSPLandroidx/compose/animation/core/MutableTransitionState;->(Ljava/lang/Object;)V +HSPLandroidx/compose/animation/core/MutableTransitionState;->getCurrentState()Ljava/lang/Object; +HSPLandroidx/compose/animation/core/MutableTransitionState;->getTargetState()Ljava/lang/Object; +HSPLandroidx/compose/animation/core/MutableTransitionState;->setCurrentState$animation_core_release(Ljava/lang/Object;)V +HSPLandroidx/compose/animation/core/MutableTransitionState;->setRunning$animation_core_release(Z)V +HSPLandroidx/compose/animation/core/MutableTransitionState;->setTargetState(Ljava/lang/Object;)V +Landroidx/compose/animation/core/MutatePriority; +HSPLandroidx/compose/animation/core/MutatePriority;->$values()[Landroidx/compose/animation/core/MutatePriority; +HSPLandroidx/compose/animation/core/MutatePriority;->()V +HSPLandroidx/compose/animation/core/MutatePriority;->(Ljava/lang/String;I)V +Landroidx/compose/animation/core/MutationInterruptedException; +PLandroidx/compose/animation/core/MutationInterruptedException;->()V +PLandroidx/compose/animation/core/MutationInterruptedException;->fillInStackTrace()Ljava/lang/Throwable; +Landroidx/compose/animation/core/MutatorMutex; +HSPLandroidx/compose/animation/core/MutatorMutex;->()V +HSPLandroidx/compose/animation/core/MutatorMutex;->access$getCurrentMutator$p(Landroidx/compose/animation/core/MutatorMutex;)Ljava/util/concurrent/atomic/AtomicReference; +HSPLandroidx/compose/animation/core/MutatorMutex;->access$getMutex$p(Landroidx/compose/animation/core/MutatorMutex;)Lkotlinx/coroutines/sync/Mutex; +HSPLandroidx/compose/animation/core/MutatorMutex;->access$tryMutateOrCancel(Landroidx/compose/animation/core/MutatorMutex;Landroidx/compose/animation/core/MutatorMutex$Mutator;)V +HSPLandroidx/compose/animation/core/MutatorMutex;->mutate$default(Landroidx/compose/animation/core/MutatorMutex;Landroidx/compose/animation/core/MutatePriority;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/animation/core/MutatorMutex;->mutate(Landroidx/compose/animation/core/MutatePriority;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/animation/core/MutatorMutex;->tryMutateOrCancel(Landroidx/compose/animation/core/MutatorMutex$Mutator;)V +Landroidx/compose/animation/core/MutatorMutex$Mutator; +HSPLandroidx/compose/animation/core/MutatorMutex$Mutator;->(Landroidx/compose/animation/core/MutatePriority;Lkotlinx/coroutines/Job;)V +PLandroidx/compose/animation/core/MutatorMutex$Mutator;->canInterrupt(Landroidx/compose/animation/core/MutatorMutex$Mutator;)Z +PLandroidx/compose/animation/core/MutatorMutex$Mutator;->cancel()V +Landroidx/compose/animation/core/MutatorMutex$mutate$2; +HSPLandroidx/compose/animation/core/MutatorMutex$mutate$2;->(Landroidx/compose/animation/core/MutatePriority;Landroidx/compose/animation/core/MutatorMutex;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/animation/core/MutatorMutex$mutate$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/animation/core/MutatorMutex$mutate$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/animation/core/MutatorMutex$mutate$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/animation/core/MutatorMutex$mutate$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/core/RepeatMode; +HSPLandroidx/compose/animation/core/RepeatMode;->$values()[Landroidx/compose/animation/core/RepeatMode; +HSPLandroidx/compose/animation/core/RepeatMode;->()V +HSPLandroidx/compose/animation/core/RepeatMode;->(Ljava/lang/String;I)V +Landroidx/compose/animation/core/SnapSpec; +HSPLandroidx/compose/animation/core/SnapSpec;->()V +HSPLandroidx/compose/animation/core/SnapSpec;->(I)V +Landroidx/compose/animation/core/SpringEstimationKt; +HSPLandroidx/compose/animation/core/SpringEstimationKt;->estimateAnimationDurationMillis(DDDDD)J +HSPLandroidx/compose/animation/core/SpringEstimationKt;->estimateAnimationDurationMillis(FFFFF)J +HSPLandroidx/compose/animation/core/SpringEstimationKt;->estimateCriticallyDamped(Landroidx/compose/animation/core/ComplexDouble;DDD)D +HSPLandroidx/compose/animation/core/SpringEstimationKt;->estimateDurationInternal(Landroidx/compose/animation/core/ComplexDouble;Landroidx/compose/animation/core/ComplexDouble;DDDD)J +Landroidx/compose/animation/core/SpringSimulation; +HSPLandroidx/compose/animation/core/SpringSimulation;->(F)V +HSPLandroidx/compose/animation/core/SpringSimulation;->getDampingRatio()F +HSPLandroidx/compose/animation/core/SpringSimulation;->getStiffness()F +HSPLandroidx/compose/animation/core/SpringSimulation;->init()V +HSPLandroidx/compose/animation/core/SpringSimulation;->setDampingRatio(F)V +HSPLandroidx/compose/animation/core/SpringSimulation;->setFinalPosition(F)V +HSPLandroidx/compose/animation/core/SpringSimulation;->setStiffness(F)V +HSPLandroidx/compose/animation/core/SpringSimulation;->updateValues-IJZedt4$animation_core_release(FFJ)J +Landroidx/compose/animation/core/SpringSimulationKt; +HSPLandroidx/compose/animation/core/SpringSimulationKt;->()V +HSPLandroidx/compose/animation/core/SpringSimulationKt;->Motion(FF)J +HSPLandroidx/compose/animation/core/SpringSimulationKt;->getUNSET()F +Landroidx/compose/animation/core/SpringSpec; +HSPLandroidx/compose/animation/core/SpringSpec;->()V +HSPLandroidx/compose/animation/core/SpringSpec;->(FFLjava/lang/Object;)V +HSPLandroidx/compose/animation/core/SpringSpec;->(FFLjava/lang/Object;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/animation/core/SpringSpec;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/animation/core/SpringSpec;->getVisibilityThreshold()Ljava/lang/Object; +HSPLandroidx/compose/animation/core/SpringSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedAnimationSpec; +HSPLandroidx/compose/animation/core/SpringSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedSpringSpec; +Landroidx/compose/animation/core/StartOffset; +HSPLandroidx/compose/animation/core/StartOffset;->constructor-impl$default(IIILkotlin/jvm/internal/DefaultConstructorMarker;)J +HSPLandroidx/compose/animation/core/StartOffset;->constructor-impl(II)J +HSPLandroidx/compose/animation/core/StartOffset;->constructor-impl(J)J +Landroidx/compose/animation/core/StartOffsetType; +HSPLandroidx/compose/animation/core/StartOffsetType;->()V +HSPLandroidx/compose/animation/core/StartOffsetType;->access$getDelay$cp()I +HSPLandroidx/compose/animation/core/StartOffsetType;->constructor-impl(I)I +Landroidx/compose/animation/core/StartOffsetType$Companion; +HSPLandroidx/compose/animation/core/StartOffsetType$Companion;->()V +HSPLandroidx/compose/animation/core/StartOffsetType$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/animation/core/StartOffsetType$Companion;->getDelay-Eo1U57Q()I +Landroidx/compose/animation/core/SuspendAnimationKt; +HSPLandroidx/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 +HSPLandroidx/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; +HSPLandroidx/compose/animation/core/SuspendAnimationKt;->callWithFrameNanos(Landroidx/compose/animation/core/Animation;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/animation/core/SuspendAnimationKt;->doAnimationFrame(Landroidx/compose/animation/core/AnimationScope;JJLandroidx/compose/animation/core/Animation;Landroidx/compose/animation/core/AnimationState;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/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 +HSPLandroidx/compose/animation/core/SuspendAnimationKt;->getDurationScale(Lkotlin/coroutines/CoroutineContext;)F +HSPLandroidx/compose/animation/core/SuspendAnimationKt;->updateState(Landroidx/compose/animation/core/AnimationScope;Landroidx/compose/animation/core/AnimationState;)V +Landroidx/compose/animation/core/SuspendAnimationKt$animate$4; +HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$4;->(Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$4;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/core/SuspendAnimationKt$animate$6; +HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$6;->(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 +HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$6;->invoke(J)V +HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$6;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/core/SuspendAnimationKt$animate$6$1; +HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$6$1;->(Landroidx/compose/animation/core/AnimationState;)V +Landroidx/compose/animation/core/SuspendAnimationKt$animate$7; +PLandroidx/compose/animation/core/SuspendAnimationKt$animate$7;->(Landroidx/compose/animation/core/AnimationState;)V +Landroidx/compose/animation/core/SuspendAnimationKt$animate$9; +HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$9;->(Lkotlin/jvm/internal/Ref$ObjectRef;FLandroidx/compose/animation/core/Animation;Landroidx/compose/animation/core/AnimationState;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$9;->invoke(J)V +HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$9;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/core/SuspendAnimationKt$callWithFrameNanos$2; +HSPLandroidx/compose/animation/core/SuspendAnimationKt$callWithFrameNanos$2;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/animation/core/SuspendAnimationKt$callWithFrameNanos$2;->invoke(J)Ljava/lang/Object; +HSPLandroidx/compose/animation/core/SuspendAnimationKt$callWithFrameNanos$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/core/TargetBasedAnimation; +HSPLandroidx/compose/animation/core/TargetBasedAnimation;->()V +HSPLandroidx/compose/animation/core/TargetBasedAnimation;->(Landroidx/compose/animation/core/AnimationSpec;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;)V +HSPLandroidx/compose/animation/core/TargetBasedAnimation;->(Landroidx/compose/animation/core/AnimationSpec;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/animation/core/TargetBasedAnimation;->(Landroidx/compose/animation/core/VectorizedAnimationSpec;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;)V +HSPLandroidx/compose/animation/core/TargetBasedAnimation;->getDurationNanos()J +HSPLandroidx/compose/animation/core/TargetBasedAnimation;->getTargetValue()Ljava/lang/Object; +HSPLandroidx/compose/animation/core/TargetBasedAnimation;->getTypeConverter()Landroidx/compose/animation/core/TwoWayConverter; +HSPLandroidx/compose/animation/core/TargetBasedAnimation;->getValueFromNanos(J)Ljava/lang/Object; +HSPLandroidx/compose/animation/core/TargetBasedAnimation;->getVelocityVectorFromNanos(J)Landroidx/compose/animation/core/AnimationVector; +HSPLandroidx/compose/animation/core/TargetBasedAnimation;->isInfinite()Z +Landroidx/compose/animation/core/Transition; +HSPLandroidx/compose/animation/core/Transition;->()V +HSPLandroidx/compose/animation/core/Transition;->(Landroidx/compose/animation/core/MutableTransitionState;Ljava/lang/String;)V +HSPLandroidx/compose/animation/core/Transition;->(Ljava/lang/Object;Ljava/lang/String;)V +HSPLandroidx/compose/animation/core/Transition;->access$onChildAnimationUpdated(Landroidx/compose/animation/core/Transition;)V +HSPLandroidx/compose/animation/core/Transition;->addAnimation$animation_core_release(Landroidx/compose/animation/core/Transition$TransitionAnimationState;)Z +HSPLandroidx/compose/animation/core/Transition;->addTransition$animation_core_release(Landroidx/compose/animation/core/Transition;)Z +HSPLandroidx/compose/animation/core/Transition;->animateTo$animation_core_release(Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/animation/core/Transition;->getCurrentState()Ljava/lang/Object; +HSPLandroidx/compose/animation/core/Transition;->getLabel()Ljava/lang/String; +HSPLandroidx/compose/animation/core/Transition;->getPlayTimeNanos()J +HSPLandroidx/compose/animation/core/Transition;->getSegment()Landroidx/compose/animation/core/Transition$Segment; +HSPLandroidx/compose/animation/core/Transition;->getStartTimeNanos()J +HSPLandroidx/compose/animation/core/Transition;->getTargetState()Ljava/lang/Object; +HSPLandroidx/compose/animation/core/Transition;->getUpdateChildrenNeeded$animation_core_release()Z +HSPLandroidx/compose/animation/core/Transition;->isRunning()Z +HSPLandroidx/compose/animation/core/Transition;->isSeeking()Z +HSPLandroidx/compose/animation/core/Transition;->onChildAnimationUpdated()V +HSPLandroidx/compose/animation/core/Transition;->onFrame$animation_core_release(JF)V +HSPLandroidx/compose/animation/core/Transition;->onTransitionEnd$animation_core_release()V +HSPLandroidx/compose/animation/core/Transition;->onTransitionStart$animation_core_release(J)V +HSPLandroidx/compose/animation/core/Transition;->removeAnimation$animation_core_release(Landroidx/compose/animation/core/Transition$DeferredAnimation;)V +HSPLandroidx/compose/animation/core/Transition;->removeAnimation$animation_core_release(Landroidx/compose/animation/core/Transition$TransitionAnimationState;)V +HSPLandroidx/compose/animation/core/Transition;->removeTransition$animation_core_release(Landroidx/compose/animation/core/Transition;)Z +HSPLandroidx/compose/animation/core/Transition;->setCurrentState$animation_core_release(Ljava/lang/Object;)V +HSPLandroidx/compose/animation/core/Transition;->setPlayTimeNanos(J)V +HSPLandroidx/compose/animation/core/Transition;->setSeeking$animation_core_release(Z)V +HSPLandroidx/compose/animation/core/Transition;->setSegment(Landroidx/compose/animation/core/Transition$Segment;)V +HSPLandroidx/compose/animation/core/Transition;->setStartTimeNanos(J)V +HSPLandroidx/compose/animation/core/Transition;->setTargetState$animation_core_release(Ljava/lang/Object;)V +HSPLandroidx/compose/animation/core/Transition;->setUpdateChildrenNeeded$animation_core_release(Z)V +HSPLandroidx/compose/animation/core/Transition;->updateTarget$animation_core_release(Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)V +Landroidx/compose/animation/core/Transition$DeferredAnimation; +HSPLandroidx/compose/animation/core/Transition$DeferredAnimation;->(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/String;)V +HSPLandroidx/compose/animation/core/Transition$DeferredAnimation;->animate(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/State; +HSPLandroidx/compose/animation/core/Transition$DeferredAnimation;->getData$animation_core_release()Landroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData; +HSPLandroidx/compose/animation/core/Transition$DeferredAnimation;->setData$animation_core_release(Landroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData;)V +Landroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData; +HSPLandroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData;->(Landroidx/compose/animation/core/Transition$DeferredAnimation;Landroidx/compose/animation/core/Transition$TransitionAnimationState;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData;->getAnimation()Landroidx/compose/animation/core/Transition$TransitionAnimationState; +HSPLandroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData;->getValue()Ljava/lang/Object; +HSPLandroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData;->setTargetValueByState(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData;->setTransitionSpec(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData;->updateAnimationStates(Landroidx/compose/animation/core/Transition$Segment;)V +Landroidx/compose/animation/core/Transition$Segment; +HSPLandroidx/compose/animation/core/Transition$Segment;->isTransitioningTo(Ljava/lang/Object;Ljava/lang/Object;)Z +Landroidx/compose/animation/core/Transition$SegmentImpl; +HSPLandroidx/compose/animation/core/Transition$SegmentImpl;->(Ljava/lang/Object;Ljava/lang/Object;)V +HSPLandroidx/compose/animation/core/Transition$SegmentImpl;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/animation/core/Transition$SegmentImpl;->getInitialState()Ljava/lang/Object; +HSPLandroidx/compose/animation/core/Transition$SegmentImpl;->getTargetState()Ljava/lang/Object; +Landroidx/compose/animation/core/Transition$TransitionAnimationState; +HSPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->(Landroidx/compose/animation/core/Transition;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/String;)V +HSPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->getAnimation()Landroidx/compose/animation/core/TargetBasedAnimation; +HSPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->getAnimationSpec()Landroidx/compose/animation/core/FiniteAnimationSpec; +HSPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->getNeedsReset()Z +HSPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->getOffsetTimeNanos()J +HSPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->getTargetValue()Ljava/lang/Object; +HSPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->getValue()Ljava/lang/Object; +HSPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->isFinished$animation_core_release()Z +HSPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->onPlayTimeChanged$animation_core_release(JF)V +HSPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->resetAnimation$animation_core_release()V +HSPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->setAnimation(Landroidx/compose/animation/core/TargetBasedAnimation;)V +HSPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->setAnimationSpec(Landroidx/compose/animation/core/FiniteAnimationSpec;)V +HSPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->setFinished$animation_core_release(Z)V +HSPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->setNeedsReset(Z)V +HSPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->setOffsetTimeNanos(J)V +HSPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->setTargetValue(Ljava/lang/Object;)V +HSPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->setValue$animation_core_release(Ljava/lang/Object;)V +HSPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->updateAnimation$default(Landroidx/compose/animation/core/Transition$TransitionAnimationState;Ljava/lang/Object;ZILjava/lang/Object;)V +HSPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->updateAnimation(Ljava/lang/Object;Z)V +HSPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->updateTargetValue$animation_core_release(Ljava/lang/Object;Landroidx/compose/animation/core/FiniteAnimationSpec;)V +Landroidx/compose/animation/core/Transition$animateTo$1$1; +HSPLandroidx/compose/animation/core/Transition$animateTo$1$1;->(Landroidx/compose/animation/core/Transition;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/animation/core/Transition$animateTo$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/animation/core/Transition$animateTo$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/core/Transition$animateTo$1$1$1; +HSPLandroidx/compose/animation/core/Transition$animateTo$1$1$1;->(Landroidx/compose/animation/core/Transition;F)V +HSPLandroidx/compose/animation/core/Transition$animateTo$1$1$1;->invoke(J)V +HSPLandroidx/compose/animation/core/Transition$animateTo$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/core/Transition$animateTo$2; +HSPLandroidx/compose/animation/core/Transition$animateTo$2;->(Landroidx/compose/animation/core/Transition;Ljava/lang/Object;I)V +HSPLandroidx/compose/animation/core/Transition$animateTo$2;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/animation/core/Transition$animateTo$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/core/Transition$totalDurationNanos$2; +HSPLandroidx/compose/animation/core/Transition$totalDurationNanos$2;->(Landroidx/compose/animation/core/Transition;)V +Landroidx/compose/animation/core/Transition$updateTarget$2; +HSPLandroidx/compose/animation/core/Transition$updateTarget$2;->(Landroidx/compose/animation/core/Transition;Ljava/lang/Object;I)V +HSPLandroidx/compose/animation/core/Transition$updateTarget$2;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/animation/core/Transition$updateTarget$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/core/TransitionKt; +HSPLandroidx/compose/animation/core/TransitionKt;->createChildTransitionInternal(Landroidx/compose/animation/core/Transition;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/String;Landroidx/compose/runtime/Composer;I)Landroidx/compose/animation/core/Transition; +HSPLandroidx/compose/animation/core/TransitionKt;->createDeferredAnimation(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/String;Landroidx/compose/runtime/Composer;II)Landroidx/compose/animation/core/Transition$DeferredAnimation; +HSPLandroidx/compose/animation/core/TransitionKt;->createTransitionAnimation(Landroidx/compose/animation/core/Transition;Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/animation/core/FiniteAnimationSpec;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/String;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State; +HSPLandroidx/compose/animation/core/TransitionKt;->updateTransition(Ljava/lang/Object;Ljava/lang/String;Landroidx/compose/runtime/Composer;II)Landroidx/compose/animation/core/Transition; +Landroidx/compose/animation/core/TransitionKt$createChildTransitionInternal$1$1; +HSPLandroidx/compose/animation/core/TransitionKt$createChildTransitionInternal$1$1;->(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/core/Transition;)V +HSPLandroidx/compose/animation/core/TransitionKt$createChildTransitionInternal$1$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult; +HSPLandroidx/compose/animation/core/TransitionKt$createChildTransitionInternal$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/core/TransitionKt$createChildTransitionInternal$1$1$invoke$$inlined$onDispose$1; +HSPLandroidx/compose/animation/core/TransitionKt$createChildTransitionInternal$1$1$invoke$$inlined$onDispose$1;->(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/core/Transition;)V +HSPLandroidx/compose/animation/core/TransitionKt$createChildTransitionInternal$1$1$invoke$$inlined$onDispose$1;->dispose()V +Landroidx/compose/animation/core/TransitionKt$createDeferredAnimation$1; +HSPLandroidx/compose/animation/core/TransitionKt$createDeferredAnimation$1;->(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/core/Transition$DeferredAnimation;)V +HSPLandroidx/compose/animation/core/TransitionKt$createDeferredAnimation$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult; +HSPLandroidx/compose/animation/core/TransitionKt$createDeferredAnimation$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/core/TransitionKt$createDeferredAnimation$1$invoke$$inlined$onDispose$1; +HSPLandroidx/compose/animation/core/TransitionKt$createDeferredAnimation$1$invoke$$inlined$onDispose$1;->(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/core/Transition$DeferredAnimation;)V +HSPLandroidx/compose/animation/core/TransitionKt$createDeferredAnimation$1$invoke$$inlined$onDispose$1;->dispose()V +Landroidx/compose/animation/core/TransitionKt$createTransitionAnimation$1$1; +HSPLandroidx/compose/animation/core/TransitionKt$createTransitionAnimation$1$1;->(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/core/Transition$TransitionAnimationState;)V +HSPLandroidx/compose/animation/core/TransitionKt$createTransitionAnimation$1$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult; +HSPLandroidx/compose/animation/core/TransitionKt$createTransitionAnimation$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/core/TransitionKt$createTransitionAnimation$1$1$invoke$$inlined$onDispose$1; +HSPLandroidx/compose/animation/core/TransitionKt$createTransitionAnimation$1$1$invoke$$inlined$onDispose$1;->(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/core/Transition$TransitionAnimationState;)V +HSPLandroidx/compose/animation/core/TransitionKt$createTransitionAnimation$1$1$invoke$$inlined$onDispose$1;->dispose()V +Landroidx/compose/animation/core/TransitionKt$updateTransition$1$1; +HSPLandroidx/compose/animation/core/TransitionKt$updateTransition$1$1;->(Landroidx/compose/animation/core/Transition;)V +HSPLandroidx/compose/animation/core/TransitionKt$updateTransition$1$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult; +HSPLandroidx/compose/animation/core/TransitionKt$updateTransition$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/core/TransitionKt$updateTransition$1$1$invoke$$inlined$onDispose$1; +HSPLandroidx/compose/animation/core/TransitionKt$updateTransition$1$1$invoke$$inlined$onDispose$1;->(Landroidx/compose/animation/core/Transition;)V +HSPLandroidx/compose/animation/core/TransitionKt$updateTransition$1$1$invoke$$inlined$onDispose$1;->dispose()V +Landroidx/compose/animation/core/TweenSpec; +HSPLandroidx/compose/animation/core/TweenSpec;->()V +HSPLandroidx/compose/animation/core/TweenSpec;->(IILandroidx/compose/animation/core/Easing;)V +HSPLandroidx/compose/animation/core/TweenSpec;->(IILandroidx/compose/animation/core/Easing;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/animation/core/TweenSpec;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/animation/core/TweenSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedAnimationSpec; +HSPLandroidx/compose/animation/core/TweenSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedDurationBasedAnimationSpec; +HSPLandroidx/compose/animation/core/TweenSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedTweenSpec; +Landroidx/compose/animation/core/TwoWayConverter; +Landroidx/compose/animation/core/TwoWayConverterImpl; +HSPLandroidx/compose/animation/core/TwoWayConverterImpl;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/animation/core/TwoWayConverterImpl;->getConvertFromVector()Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/animation/core/TwoWayConverterImpl;->getConvertToVector()Lkotlin/jvm/functions/Function1; +Landroidx/compose/animation/core/VectorConvertersKt; +HSPLandroidx/compose/animation/core/VectorConvertersKt;->()V +HSPLandroidx/compose/animation/core/VectorConvertersKt;->TwoWayConverter(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/animation/core/TwoWayConverter; +HSPLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter(Landroidx/compose/ui/geometry/Offset$Companion;)Landroidx/compose/animation/core/TwoWayConverter; +HSPLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter(Landroidx/compose/ui/geometry/Rect$Companion;)Landroidx/compose/animation/core/TwoWayConverter; +HSPLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter(Landroidx/compose/ui/geometry/Size$Companion;)Landroidx/compose/animation/core/TwoWayConverter; +HSPLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter(Landroidx/compose/ui/unit/Dp$Companion;)Landroidx/compose/animation/core/TwoWayConverter; +HSPLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter(Landroidx/compose/ui/unit/DpOffset$Companion;)Landroidx/compose/animation/core/TwoWayConverter; +HSPLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter(Landroidx/compose/ui/unit/IntOffset$Companion;)Landroidx/compose/animation/core/TwoWayConverter; +HSPLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter(Landroidx/compose/ui/unit/IntSize$Companion;)Landroidx/compose/animation/core/TwoWayConverter; +HSPLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter(Lkotlin/jvm/internal/FloatCompanionObject;)Landroidx/compose/animation/core/TwoWayConverter; +HSPLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter(Lkotlin/jvm/internal/IntCompanionObject;)Landroidx/compose/animation/core/TwoWayConverter; +HSPLandroidx/compose/animation/core/VectorConvertersKt;->lerp(FFF)F +Landroidx/compose/animation/core/VectorConvertersKt$DpOffsetToVector$1; +HSPLandroidx/compose/animation/core/VectorConvertersKt$DpOffsetToVector$1;->()V +HSPLandroidx/compose/animation/core/VectorConvertersKt$DpOffsetToVector$1;->()V +Landroidx/compose/animation/core/VectorConvertersKt$DpOffsetToVector$2; +HSPLandroidx/compose/animation/core/VectorConvertersKt$DpOffsetToVector$2;->()V +HSPLandroidx/compose/animation/core/VectorConvertersKt$DpOffsetToVector$2;->()V +Landroidx/compose/animation/core/VectorConvertersKt$DpToVector$1; +HSPLandroidx/compose/animation/core/VectorConvertersKt$DpToVector$1;->()V +HSPLandroidx/compose/animation/core/VectorConvertersKt$DpToVector$1;->()V +HSPLandroidx/compose/animation/core/VectorConvertersKt$DpToVector$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/animation/core/VectorConvertersKt$DpToVector$1;->invoke-0680j_4(F)Landroidx/compose/animation/core/AnimationVector1D; +Landroidx/compose/animation/core/VectorConvertersKt$DpToVector$2; +HSPLandroidx/compose/animation/core/VectorConvertersKt$DpToVector$2;->()V +HSPLandroidx/compose/animation/core/VectorConvertersKt$DpToVector$2;->()V +HSPLandroidx/compose/animation/core/VectorConvertersKt$DpToVector$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/animation/core/VectorConvertersKt$DpToVector$2;->invoke-u2uoSUM(Landroidx/compose/animation/core/AnimationVector1D;)F +Landroidx/compose/animation/core/VectorConvertersKt$FloatToVector$1; +HSPLandroidx/compose/animation/core/VectorConvertersKt$FloatToVector$1;->()V +HSPLandroidx/compose/animation/core/VectorConvertersKt$FloatToVector$1;->()V +HSPLandroidx/compose/animation/core/VectorConvertersKt$FloatToVector$1;->invoke(F)Landroidx/compose/animation/core/AnimationVector1D; +HSPLandroidx/compose/animation/core/VectorConvertersKt$FloatToVector$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/core/VectorConvertersKt$FloatToVector$2; +HSPLandroidx/compose/animation/core/VectorConvertersKt$FloatToVector$2;->()V +HSPLandroidx/compose/animation/core/VectorConvertersKt$FloatToVector$2;->()V +HSPLandroidx/compose/animation/core/VectorConvertersKt$FloatToVector$2;->invoke(Landroidx/compose/animation/core/AnimationVector1D;)Ljava/lang/Float; +HSPLandroidx/compose/animation/core/VectorConvertersKt$FloatToVector$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/core/VectorConvertersKt$IntOffsetToVector$1; +HSPLandroidx/compose/animation/core/VectorConvertersKt$IntOffsetToVector$1;->()V +HSPLandroidx/compose/animation/core/VectorConvertersKt$IntOffsetToVector$1;->()V +HSPLandroidx/compose/animation/core/VectorConvertersKt$IntOffsetToVector$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/animation/core/VectorConvertersKt$IntOffsetToVector$1;->invoke--gyyYBs(J)Landroidx/compose/animation/core/AnimationVector2D; +Landroidx/compose/animation/core/VectorConvertersKt$IntOffsetToVector$2; +HSPLandroidx/compose/animation/core/VectorConvertersKt$IntOffsetToVector$2;->()V +HSPLandroidx/compose/animation/core/VectorConvertersKt$IntOffsetToVector$2;->()V +HSPLandroidx/compose/animation/core/VectorConvertersKt$IntOffsetToVector$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/animation/core/VectorConvertersKt$IntOffsetToVector$2;->invoke-Bjo55l4(Landroidx/compose/animation/core/AnimationVector2D;)J +Landroidx/compose/animation/core/VectorConvertersKt$IntSizeToVector$1; +HSPLandroidx/compose/animation/core/VectorConvertersKt$IntSizeToVector$1;->()V +HSPLandroidx/compose/animation/core/VectorConvertersKt$IntSizeToVector$1;->()V +HSPLandroidx/compose/animation/core/VectorConvertersKt$IntSizeToVector$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/animation/core/VectorConvertersKt$IntSizeToVector$1;->invoke-ozmzZPI(J)Landroidx/compose/animation/core/AnimationVector2D; +Landroidx/compose/animation/core/VectorConvertersKt$IntSizeToVector$2; +HSPLandroidx/compose/animation/core/VectorConvertersKt$IntSizeToVector$2;->()V +HSPLandroidx/compose/animation/core/VectorConvertersKt$IntSizeToVector$2;->()V +HSPLandroidx/compose/animation/core/VectorConvertersKt$IntSizeToVector$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/animation/core/VectorConvertersKt$IntSizeToVector$2;->invoke-YEO4UFw(Landroidx/compose/animation/core/AnimationVector2D;)J +Landroidx/compose/animation/core/VectorConvertersKt$IntToVector$1; +HSPLandroidx/compose/animation/core/VectorConvertersKt$IntToVector$1;->()V +HSPLandroidx/compose/animation/core/VectorConvertersKt$IntToVector$1;->()V +HSPLandroidx/compose/animation/core/VectorConvertersKt$IntToVector$1;->invoke(I)Landroidx/compose/animation/core/AnimationVector1D; +HSPLandroidx/compose/animation/core/VectorConvertersKt$IntToVector$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/core/VectorConvertersKt$IntToVector$2; +HSPLandroidx/compose/animation/core/VectorConvertersKt$IntToVector$2;->()V +HSPLandroidx/compose/animation/core/VectorConvertersKt$IntToVector$2;->()V +HSPLandroidx/compose/animation/core/VectorConvertersKt$IntToVector$2;->invoke(Landroidx/compose/animation/core/AnimationVector1D;)Ljava/lang/Integer; +HSPLandroidx/compose/animation/core/VectorConvertersKt$IntToVector$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/core/VectorConvertersKt$OffsetToVector$1; +HSPLandroidx/compose/animation/core/VectorConvertersKt$OffsetToVector$1;->()V +HSPLandroidx/compose/animation/core/VectorConvertersKt$OffsetToVector$1;->()V +Landroidx/compose/animation/core/VectorConvertersKt$OffsetToVector$2; +HSPLandroidx/compose/animation/core/VectorConvertersKt$OffsetToVector$2;->()V +HSPLandroidx/compose/animation/core/VectorConvertersKt$OffsetToVector$2;->()V +Landroidx/compose/animation/core/VectorConvertersKt$RectToVector$1; +HSPLandroidx/compose/animation/core/VectorConvertersKt$RectToVector$1;->()V +HSPLandroidx/compose/animation/core/VectorConvertersKt$RectToVector$1;->()V +Landroidx/compose/animation/core/VectorConvertersKt$RectToVector$2; +HSPLandroidx/compose/animation/core/VectorConvertersKt$RectToVector$2;->()V +HSPLandroidx/compose/animation/core/VectorConvertersKt$RectToVector$2;->()V +Landroidx/compose/animation/core/VectorConvertersKt$SizeToVector$1; +HSPLandroidx/compose/animation/core/VectorConvertersKt$SizeToVector$1;->()V +HSPLandroidx/compose/animation/core/VectorConvertersKt$SizeToVector$1;->()V +Landroidx/compose/animation/core/VectorConvertersKt$SizeToVector$2; +HSPLandroidx/compose/animation/core/VectorConvertersKt$SizeToVector$2;->()V +HSPLandroidx/compose/animation/core/VectorConvertersKt$SizeToVector$2;->()V +Landroidx/compose/animation/core/VectorizedAnimationSpec; +HSPLandroidx/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; +Landroidx/compose/animation/core/VectorizedAnimationSpecKt; +HSPLandroidx/compose/animation/core/VectorizedAnimationSpecKt;->access$clampPlayTime(Landroidx/compose/animation/core/VectorizedDurationBasedAnimationSpec;J)J +HSPLandroidx/compose/animation/core/VectorizedAnimationSpecKt;->access$createSpringAnimations(Landroidx/compose/animation/core/AnimationVector;FF)Landroidx/compose/animation/core/Animations; +HSPLandroidx/compose/animation/core/VectorizedAnimationSpecKt;->clampPlayTime(Landroidx/compose/animation/core/VectorizedDurationBasedAnimationSpec;J)J +HSPLandroidx/compose/animation/core/VectorizedAnimationSpecKt;->createSpringAnimations(Landroidx/compose/animation/core/AnimationVector;FF)Landroidx/compose/animation/core/Animations; +HSPLandroidx/compose/animation/core/VectorizedAnimationSpecKt;->getValueFromMillis(Landroidx/compose/animation/core/VectorizedAnimationSpec;JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; +Landroidx/compose/animation/core/VectorizedAnimationSpecKt$createSpringAnimations$1; +HSPLandroidx/compose/animation/core/VectorizedAnimationSpecKt$createSpringAnimations$1;->(Landroidx/compose/animation/core/AnimationVector;FF)V +HSPLandroidx/compose/animation/core/VectorizedAnimationSpecKt$createSpringAnimations$1;->get(I)Landroidx/compose/animation/core/FloatAnimationSpec; +HSPLandroidx/compose/animation/core/VectorizedAnimationSpecKt$createSpringAnimations$1;->get(I)Landroidx/compose/animation/core/FloatSpringSpec; +Landroidx/compose/animation/core/VectorizedAnimationSpecKt$createSpringAnimations$2; +HSPLandroidx/compose/animation/core/VectorizedAnimationSpecKt$createSpringAnimations$2;->(FF)V +HSPLandroidx/compose/animation/core/VectorizedAnimationSpecKt$createSpringAnimations$2;->get(I)Landroidx/compose/animation/core/FloatAnimationSpec; +HSPLandroidx/compose/animation/core/VectorizedAnimationSpecKt$createSpringAnimations$2;->get(I)Landroidx/compose/animation/core/FloatSpringSpec; +Landroidx/compose/animation/core/VectorizedDurationBasedAnimationSpec; +HSPLandroidx/compose/animation/core/VectorizedDurationBasedAnimationSpec;->getDurationNanos(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)J +Landroidx/compose/animation/core/VectorizedFiniteAnimationSpec; +HSPLandroidx/compose/animation/core/VectorizedFiniteAnimationSpec;->isInfinite()Z +Landroidx/compose/animation/core/VectorizedFloatAnimationSpec; +HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;->()V +HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;->(Landroidx/compose/animation/core/Animations;)V +HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;->(Landroidx/compose/animation/core/FloatAnimationSpec;)V +HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;->getDurationNanos(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)J +HSPLandroidx/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; +HSPLandroidx/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; +HSPLandroidx/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; +Landroidx/compose/animation/core/VectorizedFloatAnimationSpec$1; +HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec$1;->(Landroidx/compose/animation/core/FloatAnimationSpec;)V +HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec$1;->get(I)Landroidx/compose/animation/core/FloatAnimationSpec; +Landroidx/compose/animation/core/VectorizedInfiniteRepeatableSpec; +HSPLandroidx/compose/animation/core/VectorizedInfiniteRepeatableSpec;->()V +HSPLandroidx/compose/animation/core/VectorizedInfiniteRepeatableSpec;->(Landroidx/compose/animation/core/VectorizedDurationBasedAnimationSpec;Landroidx/compose/animation/core/RepeatMode;J)V +HSPLandroidx/compose/animation/core/VectorizedInfiniteRepeatableSpec;->(Landroidx/compose/animation/core/VectorizedDurationBasedAnimationSpec;Landroidx/compose/animation/core/RepeatMode;JLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/animation/core/VectorizedInfiniteRepeatableSpec;->getDurationNanos(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)J +HSPLandroidx/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; +HSPLandroidx/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; +HSPLandroidx/compose/animation/core/VectorizedInfiniteRepeatableSpec;->isInfinite()Z +HSPLandroidx/compose/animation/core/VectorizedInfiniteRepeatableSpec;->repetitionPlayTimeNanos(J)J +HSPLandroidx/compose/animation/core/VectorizedInfiniteRepeatableSpec;->repetitionStartVelocity(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; +Landroidx/compose/animation/core/VectorizedKeyframesSpec; +HSPLandroidx/compose/animation/core/VectorizedKeyframesSpec;->()V +HSPLandroidx/compose/animation/core/VectorizedKeyframesSpec;->(Ljava/util/Map;II)V +HSPLandroidx/compose/animation/core/VectorizedKeyframesSpec;->getDelayMillis()I +HSPLandroidx/compose/animation/core/VectorizedKeyframesSpec;->getDurationMillis()I +HSPLandroidx/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; +HSPLandroidx/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; +HSPLandroidx/compose/animation/core/VectorizedKeyframesSpec;->init(Landroidx/compose/animation/core/AnimationVector;)V +Landroidx/compose/animation/core/VectorizedSpringSpec; +HSPLandroidx/compose/animation/core/VectorizedSpringSpec;->()V +HSPLandroidx/compose/animation/core/VectorizedSpringSpec;->(FFLandroidx/compose/animation/core/AnimationVector;)V +HSPLandroidx/compose/animation/core/VectorizedSpringSpec;->(FFLandroidx/compose/animation/core/Animations;)V +HSPLandroidx/compose/animation/core/VectorizedSpringSpec;->getDurationNanos(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)J +HSPLandroidx/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; +HSPLandroidx/compose/animation/core/VectorizedSpringSpec;->getValueFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; +HSPLandroidx/compose/animation/core/VectorizedSpringSpec;->getVelocityFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; +HSPLandroidx/compose/animation/core/VectorizedSpringSpec;->isInfinite()Z +Landroidx/compose/animation/core/VectorizedTweenSpec; +HSPLandroidx/compose/animation/core/VectorizedTweenSpec;->()V +HSPLandroidx/compose/animation/core/VectorizedTweenSpec;->(IILandroidx/compose/animation/core/Easing;)V +HSPLandroidx/compose/animation/core/VectorizedTweenSpec;->getDelayMillis()I +HSPLandroidx/compose/animation/core/VectorizedTweenSpec;->getDurationMillis()I +HSPLandroidx/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; +HSPLandroidx/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; +Landroidx/compose/animation/core/VisibilityThresholdsKt; +HSPLandroidx/compose/animation/core/VisibilityThresholdsKt;->()V +HSPLandroidx/compose/animation/core/VisibilityThresholdsKt;->getVisibilityThreshold(Landroidx/compose/ui/geometry/Offset$Companion;)J +HSPLandroidx/compose/animation/core/VisibilityThresholdsKt;->getVisibilityThreshold(Landroidx/compose/ui/geometry/Rect$Companion;)Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/animation/core/VisibilityThresholdsKt;->getVisibilityThreshold(Landroidx/compose/ui/geometry/Size$Companion;)J +HSPLandroidx/compose/animation/core/VisibilityThresholdsKt;->getVisibilityThreshold(Landroidx/compose/ui/unit/Dp$Companion;)F +HSPLandroidx/compose/animation/core/VisibilityThresholdsKt;->getVisibilityThreshold(Landroidx/compose/ui/unit/IntOffset$Companion;)J +HSPLandroidx/compose/animation/core/VisibilityThresholdsKt;->getVisibilityThreshold(Landroidx/compose/ui/unit/IntSize$Companion;)J +HSPLandroidx/compose/animation/core/VisibilityThresholdsKt;->getVisibilityThreshold(Lkotlin/jvm/internal/IntCompanionObject;)I +HSPLandroidx/compose/animation/core/VisibilityThresholdsKt;->getVisibilityThresholdMap()Ljava/util/Map; +Landroidx/compose/foundation/AbstractClickableNode; +HSPLandroidx/compose/foundation/AbstractClickableNode;->(Landroidx/compose/foundation/interaction/MutableInteractionSource;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/foundation/AbstractClickableNode;->(Landroidx/compose/foundation/interaction/MutableInteractionSource;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/AbstractClickableNode;->disposeInteractionSource()V +HSPLandroidx/compose/foundation/AbstractClickableNode;->getInteractionData()Landroidx/compose/foundation/AbstractClickableNode$InteractionData; +HSPLandroidx/compose/foundation/AbstractClickableNode;->onDetach()V +HSPLandroidx/compose/foundation/AbstractClickableNode;->onPointerEvent-H0pRuoY(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEventPass;J)V +HSPLandroidx/compose/foundation/AbstractClickableNode;->updateCommon-XHw0xAI(Landroidx/compose/foundation/interaction/MutableInteractionSource;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;)V +Landroidx/compose/foundation/AbstractClickableNode$InteractionData; +HSPLandroidx/compose/foundation/AbstractClickableNode$InteractionData;->()V +HSPLandroidx/compose/foundation/AbstractClickableNode$InteractionData;->()V +HSPLandroidx/compose/foundation/AbstractClickableNode$InteractionData;->getCurrentKeyPressInteractions()Ljava/util/Map; +HSPLandroidx/compose/foundation/AbstractClickableNode$InteractionData;->getPressInteraction()Landroidx/compose/foundation/interaction/PressInteraction$Press; +HSPLandroidx/compose/foundation/AbstractClickableNode$InteractionData;->setCentreOffset-k-4lQ0M(J)V +HSPLandroidx/compose/foundation/AbstractClickableNode$InteractionData;->setPressInteraction(Landroidx/compose/foundation/interaction/PressInteraction$Press;)V +Landroidx/compose/foundation/AbstractClickablePointerInputNode; +HSPLandroidx/compose/foundation/AbstractClickablePointerInputNode;->(ZLandroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function0;Landroidx/compose/foundation/AbstractClickableNode$InteractionData;)V +HSPLandroidx/compose/foundation/AbstractClickablePointerInputNode;->(ZLandroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function0;Landroidx/compose/foundation/AbstractClickableNode$InteractionData;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/AbstractClickablePointerInputNode;->getEnabled()Z +HSPLandroidx/compose/foundation/AbstractClickablePointerInputNode;->getInteractionData()Landroidx/compose/foundation/AbstractClickableNode$InteractionData; +HSPLandroidx/compose/foundation/AbstractClickablePointerInputNode;->getOnClick()Lkotlin/jvm/functions/Function0; +HSPLandroidx/compose/foundation/AbstractClickablePointerInputNode;->handlePressInteraction-d-4ec7I(Landroidx/compose/foundation/gestures/PressGestureScope;JLkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/AbstractClickablePointerInputNode;->onPointerEvent-H0pRuoY(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEventPass;J)V +HSPLandroidx/compose/foundation/AbstractClickablePointerInputNode;->setEnabled(Z)V +HSPLandroidx/compose/foundation/AbstractClickablePointerInputNode;->setInteractionSource(Landroidx/compose/foundation/interaction/MutableInteractionSource;)V +HSPLandroidx/compose/foundation/AbstractClickablePointerInputNode;->setOnClick(Lkotlin/jvm/functions/Function0;)V +Landroidx/compose/foundation/AbstractClickablePointerInputNode$delayPressInteraction$1; +HSPLandroidx/compose/foundation/AbstractClickablePointerInputNode$delayPressInteraction$1;->(Landroidx/compose/foundation/AbstractClickablePointerInputNode;)V +HSPLandroidx/compose/foundation/AbstractClickablePointerInputNode$delayPressInteraction$1;->invoke()Ljava/lang/Boolean; +HSPLandroidx/compose/foundation/AbstractClickablePointerInputNode$delayPressInteraction$1;->invoke()Ljava/lang/Object; +Landroidx/compose/foundation/AbstractClickablePointerInputNode$pointerInputNode$1; +HSPLandroidx/compose/foundation/AbstractClickablePointerInputNode$pointerInputNode$1;->(Landroidx/compose/foundation/AbstractClickablePointerInputNode;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/AbstractClickablePointerInputNode$pointerInputNode$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/AbstractClickablePointerInputNode$pointerInputNode$1;->invoke(Landroidx/compose/ui/input/pointer/PointerInputScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/AbstractClickablePointerInputNode$pointerInputNode$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/AbstractClickablePointerInputNode$pointerInputNode$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect; +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->(Landroid/content/Context;Landroidx/compose/foundation/OverscrollConfiguration;)V +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$animateToRelease(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)V +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getBottomEffect$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect; +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getBottomEffectNegation$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect; +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getContainerSize$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)J +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getLeftEffect$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect; +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getLeftEffectNegation$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect; +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getRightEffect$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect; +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getRightEffectNegation$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect; +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getTopEffect$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect; +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getTopEffectNegation$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect; +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$invalidateOverscroll(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)V +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$setContainerSize$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;J)V +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$setPointerId$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;Landroidx/compose/ui/input/pointer/PointerId;)V +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$setPointerPosition$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;Landroidx/compose/ui/geometry/Offset;)V +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->animateToRelease()V +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->drawOverscroll(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->getEffectModifier()Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->invalidateOverscroll()V +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->isInProgress()Z +Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1; +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1;->(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1;->invoke(Landroidx/compose/ui/input/pointer/PointerInputScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1$1; +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1$1;->(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1$1;->invoke(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$onNewSize$1; +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$onNewSize$1;->(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)V +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$onNewSize$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$onNewSize$1;->invoke-ozmzZPI(J)V +Landroidx/compose/foundation/AndroidOverscrollKt; +HSPLandroidx/compose/foundation/AndroidOverscrollKt;->()V +HSPLandroidx/compose/foundation/AndroidOverscrollKt;->access$getStretchOverscrollNonClippingLayer$p()Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/AndroidOverscrollKt;->rememberOverscrollEffect(Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/OverscrollEffect; +Landroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1; +HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1;->()V +HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1;->()V +HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1;->invoke-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; +Landroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1$1; +HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1$1;->(Landroidx/compose/ui/layout/Placeable;I)V +HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2; +HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2;->()V +HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2;->()V +HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2;->invoke-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; +Landroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2$1; +HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2$1;->(Landroidx/compose/ui/layout/Placeable;I)V +HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/Api31Impl; +HSPLandroidx/compose/foundation/Api31Impl;->()V +HSPLandroidx/compose/foundation/Api31Impl;->()V +HSPLandroidx/compose/foundation/Api31Impl;->create(Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/widget/EdgeEffect; +HSPLandroidx/compose/foundation/Api31Impl;->getDistance(Landroid/widget/EdgeEffect;)F +Landroidx/compose/foundation/BackgroundElement; +HSPLandroidx/compose/foundation/BackgroundElement;->(JLandroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/Shape;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/foundation/BackgroundElement;->(JLandroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/Shape;Lkotlin/jvm/functions/Function1;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/BackgroundElement;->(JLandroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/Shape;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/BackgroundElement;->create()Landroidx/compose/foundation/BackgroundNode; +HSPLandroidx/compose/foundation/BackgroundElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/foundation/BackgroundElement;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/foundation/BackgroundElement;->update(Landroidx/compose/foundation/BackgroundNode;)V +HSPLandroidx/compose/foundation/BackgroundElement;->update(Landroidx/compose/ui/Modifier$Node;)V +Landroidx/compose/foundation/BackgroundKt; +HSPLandroidx/compose/foundation/BackgroundKt;->background-bw27NRU$default(Landroidx/compose/ui/Modifier;JLandroidx/compose/ui/graphics/Shape;ILjava/lang/Object;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/BackgroundKt;->background-bw27NRU(Landroidx/compose/ui/Modifier;JLandroidx/compose/ui/graphics/Shape;)Landroidx/compose/ui/Modifier; +Landroidx/compose/foundation/BackgroundNode; +HSPLandroidx/compose/foundation/BackgroundNode;->(JLandroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/Shape;)V +HSPLandroidx/compose/foundation/BackgroundNode;->(JLandroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/Shape;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/BackgroundNode;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V +HSPLandroidx/compose/foundation/BackgroundNode;->drawOutline(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V +HSPLandroidx/compose/foundation/BackgroundNode;->drawRect(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V +HSPLandroidx/compose/foundation/BackgroundNode;->setAlpha(F)V +HSPLandroidx/compose/foundation/BackgroundNode;->setBrush(Landroidx/compose/ui/graphics/Brush;)V +HSPLandroidx/compose/foundation/BackgroundNode;->setColor-8_81llA(J)V +HSPLandroidx/compose/foundation/BackgroundNode;->setShape(Landroidx/compose/ui/graphics/Shape;)V +Landroidx/compose/foundation/BorderKt; +HSPLandroidx/compose/foundation/BorderKt;->access$shrink-Kibmq7A(JF)J +PLandroidx/compose/foundation/BorderKt;->border(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/BorderStroke;Landroidx/compose/ui/graphics/Shape;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/BorderKt;->border-xT4_qwU(Landroidx/compose/ui/Modifier;FJLandroidx/compose/ui/graphics/Shape;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/BorderKt;->border-ziNgDLE(Landroidx/compose/ui/Modifier;FLandroidx/compose/ui/graphics/Brush;Landroidx/compose/ui/graphics/Shape;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/BorderKt;->shrink-Kibmq7A(JF)J +Landroidx/compose/foundation/BorderModifierNode; +HSPLandroidx/compose/foundation/BorderModifierNode;->(FLandroidx/compose/ui/graphics/Brush;Landroidx/compose/ui/graphics/Shape;)V +HSPLandroidx/compose/foundation/BorderModifierNode;->(FLandroidx/compose/ui/graphics/Brush;Landroidx/compose/ui/graphics/Shape;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/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; +HSPLandroidx/compose/foundation/BorderModifierNode;->drawRoundRectBorder-JqoCqck(Landroidx/compose/ui/draw/CacheDrawScope;Landroidx/compose/ui/graphics/Brush;Landroidx/compose/ui/graphics/Outline$Rounded;JJZF)Landroidx/compose/ui/draw/DrawResult; +HSPLandroidx/compose/foundation/BorderModifierNode;->getBrush()Landroidx/compose/ui/graphics/Brush; +HSPLandroidx/compose/foundation/BorderModifierNode;->getShape()Landroidx/compose/ui/graphics/Shape; +HSPLandroidx/compose/foundation/BorderModifierNode;->getWidth-D9Ej5fM()F +HSPLandroidx/compose/foundation/BorderModifierNode;->setBrush(Landroidx/compose/ui/graphics/Brush;)V +HSPLandroidx/compose/foundation/BorderModifierNode;->setShape(Landroidx/compose/ui/graphics/Shape;)V +HSPLandroidx/compose/foundation/BorderModifierNode;->setWidth-0680j_4(F)V +Landroidx/compose/foundation/BorderModifierNode$drawRoundRectBorder$1; +HSPLandroidx/compose/foundation/BorderModifierNode$drawRoundRectBorder$1;->(ZLandroidx/compose/ui/graphics/Brush;JFFJJLandroidx/compose/ui/graphics/drawscope/Stroke;)V +HSPLandroidx/compose/foundation/BorderModifierNode$drawRoundRectBorder$1;->invoke(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V +HSPLandroidx/compose/foundation/BorderModifierNode$drawRoundRectBorder$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/BorderModifierNode$drawWithCacheModifierNode$1; +HSPLandroidx/compose/foundation/BorderModifierNode$drawWithCacheModifierNode$1;->(Landroidx/compose/foundation/BorderModifierNode;)V +HSPLandroidx/compose/foundation/BorderModifierNode$drawWithCacheModifierNode$1;->invoke(Landroidx/compose/ui/draw/CacheDrawScope;)Landroidx/compose/ui/draw/DrawResult; +HSPLandroidx/compose/foundation/BorderModifierNode$drawWithCacheModifierNode$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/BorderModifierNodeElement; +HSPLandroidx/compose/foundation/BorderModifierNodeElement;->(FLandroidx/compose/ui/graphics/Brush;Landroidx/compose/ui/graphics/Shape;)V +HSPLandroidx/compose/foundation/BorderModifierNodeElement;->(FLandroidx/compose/ui/graphics/Brush;Landroidx/compose/ui/graphics/Shape;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/BorderModifierNodeElement;->create()Landroidx/compose/foundation/BorderModifierNode; +HSPLandroidx/compose/foundation/BorderModifierNodeElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/foundation/BorderModifierNodeElement;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/foundation/BorderModifierNodeElement;->update(Landroidx/compose/foundation/BorderModifierNode;)V +HSPLandroidx/compose/foundation/BorderModifierNodeElement;->update(Landroidx/compose/ui/Modifier$Node;)V +Landroidx/compose/foundation/BorderStroke; +HSPLandroidx/compose/foundation/BorderStroke;->()V +HSPLandroidx/compose/foundation/BorderStroke;->(FLandroidx/compose/ui/graphics/Brush;)V +HSPLandroidx/compose/foundation/BorderStroke;->(FLandroidx/compose/ui/graphics/Brush;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +PLandroidx/compose/foundation/BorderStroke;->getBrush()Landroidx/compose/ui/graphics/Brush; +PLandroidx/compose/foundation/BorderStroke;->getWidth-D9Ej5fM()F +Landroidx/compose/foundation/BorderStrokeKt; +HSPLandroidx/compose/foundation/BorderStrokeKt;->BorderStroke-cXLIe8U(FJ)Landroidx/compose/foundation/BorderStroke; +Landroidx/compose/foundation/CanvasKt; +HSPLandroidx/compose/foundation/CanvasKt;->Canvas(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;I)V +Landroidx/compose/foundation/CheckScrollableContainerConstraintsKt; +HSPLandroidx/compose/foundation/CheckScrollableContainerConstraintsKt;->checkScrollableContainerConstraints-K40F9xA(JLandroidx/compose/foundation/gestures/Orientation;)V +Landroidx/compose/foundation/ClickableElement; +HSPLandroidx/compose/foundation/ClickableElement;->(Landroidx/compose/foundation/interaction/MutableInteractionSource;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/foundation/ClickableElement;->(Landroidx/compose/foundation/interaction/MutableInteractionSource;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/ClickableElement;->create()Landroidx/compose/foundation/ClickableNode; +HSPLandroidx/compose/foundation/ClickableElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/foundation/ClickableElement;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/foundation/ClickableElement;->update(Landroidx/compose/foundation/ClickableNode;)V +HSPLandroidx/compose/foundation/ClickableElement;->update(Landroidx/compose/ui/Modifier$Node;)V +Landroidx/compose/foundation/ClickableKt; +HSPLandroidx/compose/foundation/ClickableKt;->access$handlePressInteraction-EPk0efs(Landroidx/compose/foundation/gestures/PressGestureScope;JLandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/AbstractClickableNode$InteractionData;Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/ClickableKt;->clickable-O2vRcR0$default(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;ILjava/lang/Object;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/ClickableKt;->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; +HSPLandroidx/compose/foundation/ClickableKt;->clickable-XHw0xAI$default(Landroidx/compose/ui/Modifier;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;ILjava/lang/Object;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/ClickableKt;->clickable-XHw0xAI(Landroidx/compose/ui/Modifier;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/ClickableKt;->combinedClickable-XVZzFYc(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/Indication;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/ClickableKt;->combinedClickable-cJG_KMw$default(Landroidx/compose/ui/Modifier;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;ILjava/lang/Object;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/ClickableKt;->combinedClickable-cJG_KMw(Landroidx/compose/ui/Modifier;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/ClickableKt;->handlePressInteraction-EPk0efs(Landroidx/compose/foundation/gestures/PressGestureScope;JLandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/AbstractClickableNode$InteractionData;Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/compose/foundation/ClickableKt$clickable$2; +HSPLandroidx/compose/foundation/ClickableKt$clickable$2;->(ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/foundation/ClickableKt$clickable$2;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/ClickableKt$clickable$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/ClickableKt$combinedClickable$2; +HSPLandroidx/compose/foundation/ClickableKt$combinedClickable$2;->(ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/foundation/ClickableKt$combinedClickable$2;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/ClickableKt$combinedClickable$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/ClickableKt$handlePressInteraction$2; +HSPLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2;->(Landroidx/compose/foundation/gestures/PressGestureScope;JLandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/AbstractClickableNode$InteractionData;Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/ClickableKt$handlePressInteraction$2$delayJob$1; +HSPLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2$delayJob$1;->(Lkotlin/jvm/functions/Function0;JLandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/AbstractClickableNode$InteractionData;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2$delayJob$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2$delayJob$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/ClickableNode; +HSPLandroidx/compose/foundation/ClickableNode;->(Landroidx/compose/foundation/interaction/MutableInteractionSource;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/foundation/ClickableNode;->(Landroidx/compose/foundation/interaction/MutableInteractionSource;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/ClickableNode;->getClickablePointerInputNode()Landroidx/compose/foundation/AbstractClickablePointerInputNode; +HSPLandroidx/compose/foundation/ClickableNode;->getClickablePointerInputNode()Landroidx/compose/foundation/ClickablePointerInputNode; +HSPLandroidx/compose/foundation/ClickableNode;->getClickableSemanticsNode()Landroidx/compose/foundation/ClickableSemanticsNode; +HSPLandroidx/compose/foundation/ClickableNode;->update-XHw0xAI(Landroidx/compose/foundation/interaction/MutableInteractionSource;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;)V +Landroidx/compose/foundation/ClickablePointerInputNode; +HSPLandroidx/compose/foundation/ClickablePointerInputNode;->(ZLandroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function0;Landroidx/compose/foundation/AbstractClickableNode$InteractionData;)V +HSPLandroidx/compose/foundation/ClickablePointerInputNode;->pointerInput(Landroidx/compose/ui/input/pointer/PointerInputScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/ClickablePointerInputNode;->update(ZLandroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function0;)V +Landroidx/compose/foundation/ClickablePointerInputNode$pointerInput$2; +HSPLandroidx/compose/foundation/ClickablePointerInputNode$pointerInput$2;->(Landroidx/compose/foundation/ClickablePointerInputNode;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/ClickablePointerInputNode$pointerInput$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/ClickablePointerInputNode$pointerInput$2;->invoke-d-4ec7I(Landroidx/compose/foundation/gestures/PressGestureScope;JLkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/ClickablePointerInputNode$pointerInput$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/ClickablePointerInputNode$pointerInput$3; +HSPLandroidx/compose/foundation/ClickablePointerInputNode$pointerInput$3;->(Landroidx/compose/foundation/ClickablePointerInputNode;)V +HSPLandroidx/compose/foundation/ClickablePointerInputNode$pointerInput$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/ClickablePointerInputNode$pointerInput$3;->invoke-k-4lQ0M(J)V +Landroidx/compose/foundation/ClickableSemanticsNode; +HSPLandroidx/compose/foundation/ClickableSemanticsNode;->(ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;Ljava/lang/String;Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/foundation/ClickableSemanticsNode;->(ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/ClickableSemanticsNode;->applySemantics(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V +HSPLandroidx/compose/foundation/ClickableSemanticsNode;->getShouldMergeDescendantSemantics()Z +HSPLandroidx/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 +Landroidx/compose/foundation/ClickableSemanticsNode$applySemantics$1; +HSPLandroidx/compose/foundation/ClickableSemanticsNode$applySemantics$1;->(Landroidx/compose/foundation/ClickableSemanticsNode;)V +Landroidx/compose/foundation/Clickable_androidKt; +HSPLandroidx/compose/foundation/Clickable_androidKt;->()V +HSPLandroidx/compose/foundation/Clickable_androidKt;->getTapIndicationDelay()J +Landroidx/compose/foundation/ClipScrollableContainerKt; +HSPLandroidx/compose/foundation/ClipScrollableContainerKt;->()V +HSPLandroidx/compose/foundation/ClipScrollableContainerKt;->clipScrollableContainer(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/gestures/Orientation;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/ClipScrollableContainerKt;->getMaxSupportedElevation()F +Landroidx/compose/foundation/ClipScrollableContainerKt$HorizontalScrollableClipModifier$1; +HSPLandroidx/compose/foundation/ClipScrollableContainerKt$HorizontalScrollableClipModifier$1;->()V +Landroidx/compose/foundation/ClipScrollableContainerKt$VerticalScrollableClipModifier$1; +HSPLandroidx/compose/foundation/ClipScrollableContainerKt$VerticalScrollableClipModifier$1;->()V +HSPLandroidx/compose/foundation/ClipScrollableContainerKt$VerticalScrollableClipModifier$1;->createOutline-Pq9zytI(JLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;)Landroidx/compose/ui/graphics/Outline; +Landroidx/compose/foundation/CombinedClickableElement; +HSPLandroidx/compose/foundation/CombinedClickableElement;->(Landroidx/compose/foundation/interaction/MutableInteractionSource;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/foundation/CombinedClickableElement;->(Landroidx/compose/foundation/interaction/MutableInteractionSource;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/CombinedClickableElement;->create()Landroidx/compose/foundation/CombinedClickableNode; +HSPLandroidx/compose/foundation/CombinedClickableElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/foundation/CombinedClickableElement;->equals(Ljava/lang/Object;)Z +Landroidx/compose/foundation/CombinedClickableNode; +HSPLandroidx/compose/foundation/CombinedClickableNode;->(Landroidx/compose/foundation/interaction/MutableInteractionSource;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/foundation/CombinedClickableNode;->(Landroidx/compose/foundation/interaction/MutableInteractionSource;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/foundation/CombinedClickablePointerInputNode; +HSPLandroidx/compose/foundation/CombinedClickablePointerInputNode;->(ZLandroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function0;Landroidx/compose/foundation/AbstractClickableNode$InteractionData;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;)V +Landroidx/compose/foundation/DarkThemeKt; +HSPLandroidx/compose/foundation/DarkThemeKt;->isSystemInDarkTheme(Landroidx/compose/runtime/Composer;I)Z +Landroidx/compose/foundation/DarkTheme_androidKt; +HSPLandroidx/compose/foundation/DarkTheme_androidKt;->_isSystemInDarkTheme(Landroidx/compose/runtime/Composer;I)Z +Landroidx/compose/foundation/DrawOverscrollModifier; +HSPLandroidx/compose/foundation/DrawOverscrollModifier;->(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/foundation/DrawOverscrollModifier;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V +HSPLandroidx/compose/foundation/DrawOverscrollModifier;->equals(Ljava/lang/Object;)Z +Landroidx/compose/foundation/EdgeEffectCompat; +HSPLandroidx/compose/foundation/EdgeEffectCompat;->()V +HSPLandroidx/compose/foundation/EdgeEffectCompat;->()V +HSPLandroidx/compose/foundation/EdgeEffectCompat;->create(Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/widget/EdgeEffect; +HSPLandroidx/compose/foundation/EdgeEffectCompat;->getDistanceCompat(Landroid/widget/EdgeEffect;)F +Landroidx/compose/foundation/FocusableElement; +HSPLandroidx/compose/foundation/FocusableElement;->(Landroidx/compose/foundation/interaction/MutableInteractionSource;)V +HSPLandroidx/compose/foundation/FocusableElement;->create()Landroidx/compose/foundation/FocusableNode; +HSPLandroidx/compose/foundation/FocusableElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/foundation/FocusableElement;->equals(Ljava/lang/Object;)Z +Landroidx/compose/foundation/FocusableInNonTouchMode; +HSPLandroidx/compose/foundation/FocusableInNonTouchMode;->()V +HSPLandroidx/compose/foundation/FocusableInNonTouchMode;->applyFocusProperties(Landroidx/compose/ui/focus/FocusProperties;)V +HSPLandroidx/compose/foundation/FocusableInNonTouchMode;->getInputModeManager()Landroidx/compose/ui/input/InputModeManager; +Landroidx/compose/foundation/FocusableInteractionNode; +HSPLandroidx/compose/foundation/FocusableInteractionNode;->(Landroidx/compose/foundation/interaction/MutableInteractionSource;)V +HSPLandroidx/compose/foundation/FocusableInteractionNode;->emitWithFallback(Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/interaction/Interaction;)V +HSPLandroidx/compose/foundation/FocusableInteractionNode;->setFocus(Z)V +Landroidx/compose/foundation/FocusableInteractionNode$emitWithFallback$1; +HSPLandroidx/compose/foundation/FocusableInteractionNode$emitWithFallback$1;->(Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/interaction/Interaction;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/FocusableInteractionNode$emitWithFallback$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/FocusableInteractionNode$emitWithFallback$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/FocusableKt; +HSPLandroidx/compose/foundation/FocusableKt;->()V +HSPLandroidx/compose/foundation/FocusableKt;->focusGroup(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/FocusableKt;->focusable(Landroidx/compose/ui/Modifier;ZLandroidx/compose/foundation/interaction/MutableInteractionSource;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/FocusableKt;->focusableInNonTouchMode(Landroidx/compose/ui/Modifier;ZLandroidx/compose/foundation/interaction/MutableInteractionSource;)Landroidx/compose/ui/Modifier; +Landroidx/compose/foundation/FocusableKt$FocusableInNonTouchModeElement$1; +HSPLandroidx/compose/foundation/FocusableKt$FocusableInNonTouchModeElement$1;->()V +HSPLandroidx/compose/foundation/FocusableKt$FocusableInNonTouchModeElement$1;->create()Landroidx/compose/foundation/FocusableInNonTouchMode; +HSPLandroidx/compose/foundation/FocusableKt$FocusableInNonTouchModeElement$1;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/foundation/FocusableKt$FocusableInNonTouchModeElement$1;->equals(Ljava/lang/Object;)Z +Landroidx/compose/foundation/FocusableKt$focusGroup$1; +HSPLandroidx/compose/foundation/FocusableKt$focusGroup$1;->()V +HSPLandroidx/compose/foundation/FocusableKt$focusGroup$1;->()V +HSPLandroidx/compose/foundation/FocusableKt$focusGroup$1;->invoke(Landroidx/compose/ui/focus/FocusProperties;)V +HSPLandroidx/compose/foundation/FocusableKt$focusGroup$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/FocusableKt$focusableInNonTouchMode$1; +HSPLandroidx/compose/foundation/FocusableKt$focusableInNonTouchMode$1;->(ZLandroidx/compose/foundation/interaction/MutableInteractionSource;)V +Landroidx/compose/foundation/FocusableNode; +HSPLandroidx/compose/foundation/FocusableNode;->(Landroidx/compose/foundation/interaction/MutableInteractionSource;)V +HSPLandroidx/compose/foundation/FocusableNode;->access$getBringIntoViewRequester$p(Landroidx/compose/foundation/FocusableNode;)Landroidx/compose/foundation/relocation/BringIntoViewRequester; +HSPLandroidx/compose/foundation/FocusableNode;->applySemantics(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V +HSPLandroidx/compose/foundation/FocusableNode;->onFocusEvent(Landroidx/compose/ui/focus/FocusState;)V +HSPLandroidx/compose/foundation/FocusableNode;->onGloballyPositioned(Landroidx/compose/ui/layout/LayoutCoordinates;)V +HSPLandroidx/compose/foundation/FocusableNode;->onPlaced(Landroidx/compose/ui/layout/LayoutCoordinates;)V +Landroidx/compose/foundation/FocusableNode$onFocusEvent$1; +HSPLandroidx/compose/foundation/FocusableNode$onFocusEvent$1;->(Landroidx/compose/foundation/FocusableNode;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/FocusableNode$onFocusEvent$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/FocusableNode$onFocusEvent$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/FocusablePinnableContainerNode; +HSPLandroidx/compose/foundation/FocusablePinnableContainerNode;->()V +HSPLandroidx/compose/foundation/FocusablePinnableContainerNode;->retrievePinnableContainer()Landroidx/compose/ui/layout/PinnableContainer; +HSPLandroidx/compose/foundation/FocusablePinnableContainerNode;->setFocus(Z)V +Landroidx/compose/foundation/FocusablePinnableContainerNode$retrievePinnableContainer$1; +HSPLandroidx/compose/foundation/FocusablePinnableContainerNode$retrievePinnableContainer$1;->(Lkotlin/jvm/internal/Ref$ObjectRef;Landroidx/compose/foundation/FocusablePinnableContainerNode;)V +HSPLandroidx/compose/foundation/FocusablePinnableContainerNode$retrievePinnableContainer$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/foundation/FocusablePinnableContainerNode$retrievePinnableContainer$1;->invoke()V +Landroidx/compose/foundation/FocusableSemanticsNode; +HSPLandroidx/compose/foundation/FocusableSemanticsNode;->()V +HSPLandroidx/compose/foundation/FocusableSemanticsNode;->applySemantics(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V +HSPLandroidx/compose/foundation/FocusableSemanticsNode;->setFocus(Z)V +Landroidx/compose/foundation/FocusableSemanticsNode$applySemantics$1; +HSPLandroidx/compose/foundation/FocusableSemanticsNode$applySemantics$1;->(Landroidx/compose/foundation/FocusableSemanticsNode;)V +Landroidx/compose/foundation/FocusedBoundsKt; +HSPLandroidx/compose/foundation/FocusedBoundsKt;->()V +HSPLandroidx/compose/foundation/FocusedBoundsKt;->getModifierLocalFocusedBoundsObserver()Landroidx/compose/ui/modifier/ProvidableModifierLocal; +HSPLandroidx/compose/foundation/FocusedBoundsKt;->onFocusedBoundsChanged(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; +Landroidx/compose/foundation/FocusedBoundsKt$ModifierLocalFocusedBoundsObserver$1; +HSPLandroidx/compose/foundation/FocusedBoundsKt$ModifierLocalFocusedBoundsObserver$1;->()V +HSPLandroidx/compose/foundation/FocusedBoundsKt$ModifierLocalFocusedBoundsObserver$1;->()V +HSPLandroidx/compose/foundation/FocusedBoundsKt$ModifierLocalFocusedBoundsObserver$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/foundation/FocusedBoundsKt$ModifierLocalFocusedBoundsObserver$1;->invoke()Lkotlin/jvm/functions/Function1; +Landroidx/compose/foundation/FocusedBoundsNode; +HSPLandroidx/compose/foundation/FocusedBoundsNode;->()V +HSPLandroidx/compose/foundation/FocusedBoundsNode;->getObserver()Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/foundation/FocusedBoundsNode;->notifyObserverWhenAttached()V +HSPLandroidx/compose/foundation/FocusedBoundsNode;->onGloballyPositioned(Landroidx/compose/ui/layout/LayoutCoordinates;)V +HSPLandroidx/compose/foundation/FocusedBoundsNode;->setFocus(Z)V +Landroidx/compose/foundation/FocusedBoundsObserverElement; +HSPLandroidx/compose/foundation/FocusedBoundsObserverElement;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/foundation/FocusedBoundsObserverElement;->create()Landroidx/compose/foundation/FocusedBoundsObserverNode; +HSPLandroidx/compose/foundation/FocusedBoundsObserverElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/foundation/FocusedBoundsObserverElement;->equals(Ljava/lang/Object;)Z +Landroidx/compose/foundation/FocusedBoundsObserverNode; +HSPLandroidx/compose/foundation/FocusedBoundsObserverNode;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/foundation/FocusedBoundsObserverNode;->getParent()Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/foundation/FocusedBoundsObserverNode;->getProvidedValues()Landroidx/compose/ui/modifier/ModifierLocalMap; +HSPLandroidx/compose/foundation/FocusedBoundsObserverNode;->invoke(Landroidx/compose/ui/layout/LayoutCoordinates;)V +HSPLandroidx/compose/foundation/FocusedBoundsObserverNode;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/HoverableElement; +HSPLandroidx/compose/foundation/HoverableElement;->(Landroidx/compose/foundation/interaction/MutableInteractionSource;)V +HSPLandroidx/compose/foundation/HoverableElement;->create()Landroidx/compose/foundation/HoverableNode; +HSPLandroidx/compose/foundation/HoverableElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/foundation/HoverableElement;->equals(Ljava/lang/Object;)Z +Landroidx/compose/foundation/HoverableKt; +HSPLandroidx/compose/foundation/HoverableKt;->hoverable(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/interaction/MutableInteractionSource;Z)Landroidx/compose/ui/Modifier; +Landroidx/compose/foundation/HoverableNode; +HSPLandroidx/compose/foundation/HoverableNode;->(Landroidx/compose/foundation/interaction/MutableInteractionSource;)V +HSPLandroidx/compose/foundation/HoverableNode;->onDetach()V +HSPLandroidx/compose/foundation/HoverableNode;->onPointerEvent-H0pRuoY(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEventPass;J)V +HSPLandroidx/compose/foundation/HoverableNode;->tryEmitExit()V +Landroidx/compose/foundation/Indication; +Landroidx/compose/foundation/IndicationInstance; +Landroidx/compose/foundation/IndicationKt; +HSPLandroidx/compose/foundation/IndicationKt;->()V +HSPLandroidx/compose/foundation/IndicationKt;->getLocalIndication()Landroidx/compose/runtime/ProvidableCompositionLocal; +HSPLandroidx/compose/foundation/IndicationKt;->indication(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/foundation/Indication;)Landroidx/compose/ui/Modifier; +Landroidx/compose/foundation/IndicationKt$LocalIndication$1; +HSPLandroidx/compose/foundation/IndicationKt$LocalIndication$1;->()V +HSPLandroidx/compose/foundation/IndicationKt$LocalIndication$1;->()V +Landroidx/compose/foundation/IndicationKt$indication$2; +HSPLandroidx/compose/foundation/IndicationKt$indication$2;->(Landroidx/compose/foundation/Indication;Landroidx/compose/foundation/interaction/InteractionSource;)V +HSPLandroidx/compose/foundation/IndicationKt$indication$2;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/IndicationKt$indication$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/IndicationModifier; +HSPLandroidx/compose/foundation/IndicationModifier;->(Landroidx/compose/foundation/IndicationInstance;)V +HSPLandroidx/compose/foundation/IndicationModifier;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V +Landroidx/compose/foundation/MagnifierKt; +HSPLandroidx/compose/foundation/MagnifierKt;->()V +HSPLandroidx/compose/foundation/MagnifierKt;->getMagnifierPositionInRoot()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/foundation/MagnifierKt;->isPlatformMagnifierSupported$default(IILjava/lang/Object;)Z +HSPLandroidx/compose/foundation/MagnifierKt;->isPlatformMagnifierSupported(I)Z +HSPLandroidx/compose/foundation/MagnifierKt;->magnifier$default(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;FLandroidx/compose/foundation/MagnifierStyle;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/MagnifierKt;->magnifier(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;FLandroidx/compose/foundation/MagnifierStyle;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/MagnifierKt;->magnifier(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;FLandroidx/compose/foundation/MagnifierStyle;Lkotlin/jvm/functions/Function1;Landroidx/compose/foundation/PlatformMagnifierFactory;)Landroidx/compose/ui/Modifier; +Landroidx/compose/foundation/MagnifierKt$magnifier$1; +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$1;->()V +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$1;->()V +Landroidx/compose/foundation/MagnifierKt$magnifier$4; +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;FLkotlin/jvm/functions/Function1;Landroidx/compose/foundation/PlatformMagnifierFactory;Landroidx/compose/foundation/MagnifierStyle;)V +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4;->access$invoke$lambda$1(Landroidx/compose/runtime/MutableState;)J +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4;->access$invoke$lambda$10(Landroidx/compose/runtime/State;)Z +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4;->access$invoke$lambda$2(Landroidx/compose/runtime/MutableState;J)V +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4;->access$invoke$lambda$3(Landroidx/compose/runtime/State;)Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4;->access$invoke$lambda$6(Landroidx/compose/runtime/State;)Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4;->access$invoke$lambda$8(Landroidx/compose/runtime/State;)J +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4;->invoke$lambda$1(Landroidx/compose/runtime/MutableState;)J +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4;->invoke$lambda$10(Landroidx/compose/runtime/State;)Z +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4;->invoke$lambda$2(Landroidx/compose/runtime/MutableState;J)V +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4;->invoke$lambda$3(Landroidx/compose/runtime/State;)Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4;->invoke$lambda$6(Landroidx/compose/runtime/State;)Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4;->invoke$lambda$8(Landroidx/compose/runtime/State;)J +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/MagnifierKt$magnifier$4$1; +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4$1;->(Landroidx/compose/foundation/PlatformMagnifierFactory;Landroidx/compose/foundation/MagnifierStyle;Landroid/view/View;Landroidx/compose/ui/unit/Density;FLkotlinx/coroutines/flow/MutableSharedFlow;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/MagnifierKt$magnifier$4$1$1; +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4$1$1;->(Landroidx/compose/foundation/PlatformMagnifier;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4$1$1;->invoke(Lkotlin/Unit;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/MagnifierKt$magnifier$4$1$2; +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4$1$2;->(Landroidx/compose/foundation/PlatformMagnifier;Landroidx/compose/ui/unit/Density;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/State;Lkotlin/jvm/internal/Ref$LongRef;Landroidx/compose/runtime/State;)V +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4$1$2;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4$1$2;->invoke()V +Landroidx/compose/foundation/MagnifierKt$magnifier$4$2$1; +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4$2$1;->(Landroidx/compose/runtime/MutableState;)V +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4$2$1;->invoke(Landroidx/compose/ui/layout/LayoutCoordinates;)V +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/MagnifierKt$magnifier$4$3; +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4$3;->(Lkotlinx/coroutines/flow/MutableSharedFlow;)V +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4$3;->invoke(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/MagnifierKt$magnifier$4$4$1; +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4$4$1;->(Landroidx/compose/runtime/State;)V +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4$4$1;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4$4$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/MagnifierKt$magnifier$4$4$1$1; +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4$4$1$1;->(Landroidx/compose/runtime/State;)V +Landroidx/compose/foundation/MagnifierKt$magnifier$4$isMagnifierShown$2$1; +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4$isMagnifierShown$2$1;->(Landroidx/compose/runtime/State;)V +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4$isMagnifierShown$2$1;->invoke()Ljava/lang/Boolean; +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4$isMagnifierShown$2$1;->invoke()Ljava/lang/Object; +Landroidx/compose/foundation/MagnifierKt$magnifier$4$sourceCenterInRoot$2$1; +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4$sourceCenterInRoot$2$1;->(Landroidx/compose/ui/unit/Density;Landroidx/compose/runtime/State;Landroidx/compose/runtime/MutableState;)V +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4$sourceCenterInRoot$2$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4$sourceCenterInRoot$2$1;->invoke-F1C5BW0()J +Landroidx/compose/foundation/MagnifierStyle; +HSPLandroidx/compose/foundation/MagnifierStyle;->()V +HSPLandroidx/compose/foundation/MagnifierStyle;->(JFFZZ)V +HSPLandroidx/compose/foundation/MagnifierStyle;->(JFFZZILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/MagnifierStyle;->(JFFZZLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/MagnifierStyle;->(ZJFFZZ)V +HSPLandroidx/compose/foundation/MagnifierStyle;->(ZJFFZZLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/MagnifierStyle;->access$getTextDefault$cp()Landroidx/compose/foundation/MagnifierStyle; +HSPLandroidx/compose/foundation/MagnifierStyle;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/foundation/MagnifierStyle;->getFishEyeEnabled$foundation_release()Z +HSPLandroidx/compose/foundation/MagnifierStyle;->getUseTextDefault$foundation_release()Z +HSPLandroidx/compose/foundation/MagnifierStyle;->isSupported()Z +Landroidx/compose/foundation/MagnifierStyle$Companion; +HSPLandroidx/compose/foundation/MagnifierStyle$Companion;->()V +HSPLandroidx/compose/foundation/MagnifierStyle$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/MagnifierStyle$Companion;->getTextDefault()Landroidx/compose/foundation/MagnifierStyle; +HSPLandroidx/compose/foundation/MagnifierStyle$Companion;->isStyleSupported$foundation_release$default(Landroidx/compose/foundation/MagnifierStyle$Companion;Landroidx/compose/foundation/MagnifierStyle;IILjava/lang/Object;)Z +HSPLandroidx/compose/foundation/MagnifierStyle$Companion;->isStyleSupported$foundation_release(Landroidx/compose/foundation/MagnifierStyle;I)Z +Landroidx/compose/foundation/MutatePriority; +HSPLandroidx/compose/foundation/MutatePriority;->$values()[Landroidx/compose/foundation/MutatePriority; +HSPLandroidx/compose/foundation/MutatePriority;->()V +HSPLandroidx/compose/foundation/MutatePriority;->(Ljava/lang/String;I)V +Landroidx/compose/foundation/MutatorMutex; +HSPLandroidx/compose/foundation/MutatorMutex;->()V +HSPLandroidx/compose/foundation/MutatorMutex;->()V +HSPLandroidx/compose/foundation/MutatorMutex;->access$getCurrentMutator$p(Landroidx/compose/foundation/MutatorMutex;)Ljava/util/concurrent/atomic/AtomicReference; +HSPLandroidx/compose/foundation/MutatorMutex;->access$getMutex$p(Landroidx/compose/foundation/MutatorMutex;)Lkotlinx/coroutines/sync/Mutex; +HSPLandroidx/compose/foundation/MutatorMutex;->access$tryMutateOrCancel(Landroidx/compose/foundation/MutatorMutex;Landroidx/compose/foundation/MutatorMutex$Mutator;)V +HSPLandroidx/compose/foundation/MutatorMutex;->mutateWith(Ljava/lang/Object;Landroidx/compose/foundation/MutatePriority;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/MutatorMutex;->tryMutateOrCancel(Landroidx/compose/foundation/MutatorMutex$Mutator;)V +Landroidx/compose/foundation/MutatorMutex$Mutator; +HSPLandroidx/compose/foundation/MutatorMutex$Mutator;->(Landroidx/compose/foundation/MutatePriority;Lkotlinx/coroutines/Job;)V +Landroidx/compose/foundation/MutatorMutex$mutateWith$2; +HSPLandroidx/compose/foundation/MutatorMutex$mutateWith$2;->(Landroidx/compose/foundation/MutatePriority;Landroidx/compose/foundation/MutatorMutex;Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/MutatorMutex$mutateWith$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/MutatorMutex$mutateWith$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/MutatorMutex$mutateWith$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/MutatorMutex$mutateWith$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/NoIndication; +HSPLandroidx/compose/foundation/NoIndication;->()V +HSPLandroidx/compose/foundation/NoIndication;->()V +HSPLandroidx/compose/foundation/NoIndication;->rememberUpdatedInstance(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/IndicationInstance; +Landroidx/compose/foundation/NoIndication$NoIndicationInstance; +HSPLandroidx/compose/foundation/NoIndication$NoIndicationInstance;->()V +HSPLandroidx/compose/foundation/NoIndication$NoIndicationInstance;->()V +HSPLandroidx/compose/foundation/NoIndication$NoIndicationInstance;->drawIndication(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V +Landroidx/compose/foundation/OverscrollConfiguration; +HSPLandroidx/compose/foundation/OverscrollConfiguration;->()V +HSPLandroidx/compose/foundation/OverscrollConfiguration;->(JLandroidx/compose/foundation/layout/PaddingValues;)V +HSPLandroidx/compose/foundation/OverscrollConfiguration;->(JLandroidx/compose/foundation/layout/PaddingValues;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/OverscrollConfiguration;->(JLandroidx/compose/foundation/layout/PaddingValues;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/OverscrollConfiguration;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/foundation/OverscrollConfiguration;->getGlowColor-0d7_KjU()J +Landroidx/compose/foundation/OverscrollConfigurationKt; +HSPLandroidx/compose/foundation/OverscrollConfigurationKt;->()V +HSPLandroidx/compose/foundation/OverscrollConfigurationKt;->getLocalOverscrollConfiguration()Landroidx/compose/runtime/ProvidableCompositionLocal; +Landroidx/compose/foundation/OverscrollConfigurationKt$LocalOverscrollConfiguration$1; +HSPLandroidx/compose/foundation/OverscrollConfigurationKt$LocalOverscrollConfiguration$1;->()V +HSPLandroidx/compose/foundation/OverscrollConfigurationKt$LocalOverscrollConfiguration$1;->()V +HSPLandroidx/compose/foundation/OverscrollConfigurationKt$LocalOverscrollConfiguration$1;->invoke()Landroidx/compose/foundation/OverscrollConfiguration; +HSPLandroidx/compose/foundation/OverscrollConfigurationKt$LocalOverscrollConfiguration$1;->invoke()Ljava/lang/Object; +Landroidx/compose/foundation/OverscrollEffect; +Landroidx/compose/foundation/OverscrollKt; +HSPLandroidx/compose/foundation/OverscrollKt;->overscroll(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/OverscrollEffect;)Landroidx/compose/ui/Modifier; +Landroidx/compose/foundation/PlatformMagnifier; +Landroidx/compose/foundation/PlatformMagnifierFactory; +HSPLandroidx/compose/foundation/PlatformMagnifierFactory;->()V +Landroidx/compose/foundation/PlatformMagnifierFactory$Companion; +HSPLandroidx/compose/foundation/PlatformMagnifierFactory$Companion;->()V +HSPLandroidx/compose/foundation/PlatformMagnifierFactory$Companion;->()V +HSPLandroidx/compose/foundation/PlatformMagnifierFactory$Companion;->getForCurrentPlatform()Landroidx/compose/foundation/PlatformMagnifierFactory; +Landroidx/compose/foundation/PlatformMagnifierFactoryApi28Impl$PlatformMagnifierImpl; +HSPLandroidx/compose/foundation/PlatformMagnifierFactoryApi28Impl$PlatformMagnifierImpl;->()V +HSPLandroidx/compose/foundation/PlatformMagnifierFactoryApi28Impl$PlatformMagnifierImpl;->(Landroid/widget/Magnifier;)V +HSPLandroidx/compose/foundation/PlatformMagnifierFactoryApi28Impl$PlatformMagnifierImpl;->dismiss()V +HSPLandroidx/compose/foundation/PlatformMagnifierFactoryApi28Impl$PlatformMagnifierImpl;->getSize-YbymL2g()J +HSPLandroidx/compose/foundation/PlatformMagnifierFactoryApi28Impl$PlatformMagnifierImpl;->updateContent()V +Landroidx/compose/foundation/PlatformMagnifierFactoryApi29Impl; +HSPLandroidx/compose/foundation/PlatformMagnifierFactoryApi29Impl;->()V +HSPLandroidx/compose/foundation/PlatformMagnifierFactoryApi29Impl;->()V +HSPLandroidx/compose/foundation/PlatformMagnifierFactoryApi29Impl;->create(Landroidx/compose/foundation/MagnifierStyle;Landroid/view/View;Landroidx/compose/ui/unit/Density;F)Landroidx/compose/foundation/PlatformMagnifier; +HSPLandroidx/compose/foundation/PlatformMagnifierFactoryApi29Impl;->create(Landroidx/compose/foundation/MagnifierStyle;Landroid/view/View;Landroidx/compose/ui/unit/Density;F)Landroidx/compose/foundation/PlatformMagnifierFactoryApi29Impl$PlatformMagnifierImpl; +HSPLandroidx/compose/foundation/PlatformMagnifierFactoryApi29Impl;->getCanUpdateZoom()Z +Landroidx/compose/foundation/PlatformMagnifierFactoryApi29Impl$PlatformMagnifierImpl; +HSPLandroidx/compose/foundation/PlatformMagnifierFactoryApi29Impl$PlatformMagnifierImpl;->()V +HSPLandroidx/compose/foundation/PlatformMagnifierFactoryApi29Impl$PlatformMagnifierImpl;->(Landroid/widget/Magnifier;)V +Landroidx/compose/foundation/ProgressSemanticsKt; +HSPLandroidx/compose/foundation/ProgressSemanticsKt;->progressSemantics(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; +Landroidx/compose/foundation/ProgressSemanticsKt$progressSemantics$2; +HSPLandroidx/compose/foundation/ProgressSemanticsKt$progressSemantics$2;->()V +HSPLandroidx/compose/foundation/ProgressSemanticsKt$progressSemantics$2;->()V +HSPLandroidx/compose/foundation/ProgressSemanticsKt$progressSemantics$2;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V +HSPLandroidx/compose/foundation/ProgressSemanticsKt$progressSemantics$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/ScrollKt; +HSPLandroidx/compose/foundation/ScrollKt;->rememberScrollState(ILandroidx/compose/runtime/Composer;II)Landroidx/compose/foundation/ScrollState; +HSPLandroidx/compose/foundation/ScrollKt;->scroll(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/ScrollState;ZLandroidx/compose/foundation/gestures/FlingBehavior;ZZ)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/ScrollKt;->verticalScroll$default(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/ScrollState;ZLandroidx/compose/foundation/gestures/FlingBehavior;ZILjava/lang/Object;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/ScrollKt;->verticalScroll(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/ScrollState;ZLandroidx/compose/foundation/gestures/FlingBehavior;Z)Landroidx/compose/ui/Modifier; +Landroidx/compose/foundation/ScrollKt$rememberScrollState$1$1; +HSPLandroidx/compose/foundation/ScrollKt$rememberScrollState$1$1;->(I)V +HSPLandroidx/compose/foundation/ScrollKt$rememberScrollState$1$1;->invoke()Landroidx/compose/foundation/ScrollState; +HSPLandroidx/compose/foundation/ScrollKt$rememberScrollState$1$1;->invoke()Ljava/lang/Object; +Landroidx/compose/foundation/ScrollKt$scroll$2; +HSPLandroidx/compose/foundation/ScrollKt$scroll$2;->(ZZLandroidx/compose/foundation/ScrollState;ZLandroidx/compose/foundation/gestures/FlingBehavior;)V +HSPLandroidx/compose/foundation/ScrollKt$scroll$2;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/ScrollKt$scroll$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/ScrollKt$scroll$2$semantics$1; +HSPLandroidx/compose/foundation/ScrollKt$scroll$2$semantics$1;->(ZZZLandroidx/compose/foundation/ScrollState;Lkotlinx/coroutines/CoroutineScope;)V +HSPLandroidx/compose/foundation/ScrollKt$scroll$2$semantics$1;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V +HSPLandroidx/compose/foundation/ScrollKt$scroll$2$semantics$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/ScrollKt$scroll$2$semantics$1$1; +HSPLandroidx/compose/foundation/ScrollKt$scroll$2$semantics$1$1;->(Lkotlinx/coroutines/CoroutineScope;ZLandroidx/compose/foundation/ScrollState;)V +Landroidx/compose/foundation/ScrollKt$scroll$2$semantics$1$accessibilityScrollState$1; +HSPLandroidx/compose/foundation/ScrollKt$scroll$2$semantics$1$accessibilityScrollState$1;->(Landroidx/compose/foundation/ScrollState;)V +HSPLandroidx/compose/foundation/ScrollKt$scroll$2$semantics$1$accessibilityScrollState$1;->invoke()Ljava/lang/Float; +HSPLandroidx/compose/foundation/ScrollKt$scroll$2$semantics$1$accessibilityScrollState$1;->invoke()Ljava/lang/Object; +Landroidx/compose/foundation/ScrollKt$scroll$2$semantics$1$accessibilityScrollState$2; +HSPLandroidx/compose/foundation/ScrollKt$scroll$2$semantics$1$accessibilityScrollState$2;->(Landroidx/compose/foundation/ScrollState;)V +HSPLandroidx/compose/foundation/ScrollKt$scroll$2$semantics$1$accessibilityScrollState$2;->invoke()Ljava/lang/Float; +HSPLandroidx/compose/foundation/ScrollKt$scroll$2$semantics$1$accessibilityScrollState$2;->invoke()Ljava/lang/Object; +Landroidx/compose/foundation/ScrollState; +HSPLandroidx/compose/foundation/ScrollState;->()V +HSPLandroidx/compose/foundation/ScrollState;->(I)V +HSPLandroidx/compose/foundation/ScrollState;->access$getSaver$cp()Landroidx/compose/runtime/saveable/Saver; +HSPLandroidx/compose/foundation/ScrollState;->getInternalInteractionSource$foundation_release()Landroidx/compose/foundation/interaction/MutableInteractionSource; +HSPLandroidx/compose/foundation/ScrollState;->getMaxValue()I +HSPLandroidx/compose/foundation/ScrollState;->getValue()I +HSPLandroidx/compose/foundation/ScrollState;->isScrollInProgress()Z +HSPLandroidx/compose/foundation/ScrollState;->setMaxValue$foundation_release(I)V +HSPLandroidx/compose/foundation/ScrollState;->setViewportSize$foundation_release(I)V +Landroidx/compose/foundation/ScrollState$Companion; +HSPLandroidx/compose/foundation/ScrollState$Companion;->()V +HSPLandroidx/compose/foundation/ScrollState$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/ScrollState$Companion;->getSaver()Landroidx/compose/runtime/saveable/Saver; +Landroidx/compose/foundation/ScrollState$Companion$Saver$1; +HSPLandroidx/compose/foundation/ScrollState$Companion$Saver$1;->()V +HSPLandroidx/compose/foundation/ScrollState$Companion$Saver$1;->()V +HSPLandroidx/compose/foundation/ScrollState$Companion$Saver$1;->invoke(Landroidx/compose/runtime/saveable/SaverScope;Landroidx/compose/foundation/ScrollState;)Ljava/lang/Integer; +HSPLandroidx/compose/foundation/ScrollState$Companion$Saver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/ScrollState$Companion$Saver$2; +HSPLandroidx/compose/foundation/ScrollState$Companion$Saver$2;->()V +HSPLandroidx/compose/foundation/ScrollState$Companion$Saver$2;->()V +Landroidx/compose/foundation/ScrollState$canScrollBackward$2; +HSPLandroidx/compose/foundation/ScrollState$canScrollBackward$2;->(Landroidx/compose/foundation/ScrollState;)V +Landroidx/compose/foundation/ScrollState$canScrollForward$2; +HSPLandroidx/compose/foundation/ScrollState$canScrollForward$2;->(Landroidx/compose/foundation/ScrollState;)V +Landroidx/compose/foundation/ScrollState$scrollableState$1; +HSPLandroidx/compose/foundation/ScrollState$scrollableState$1;->(Landroidx/compose/foundation/ScrollState;)V +Landroidx/compose/foundation/ScrollingLayoutElement; +HSPLandroidx/compose/foundation/ScrollingLayoutElement;->(Landroidx/compose/foundation/ScrollState;ZZ)V +HSPLandroidx/compose/foundation/ScrollingLayoutElement;->create()Landroidx/compose/foundation/ScrollingLayoutNode; +HSPLandroidx/compose/foundation/ScrollingLayoutElement;->create()Landroidx/compose/ui/Modifier$Node; +Landroidx/compose/foundation/ScrollingLayoutNode; +HSPLandroidx/compose/foundation/ScrollingLayoutNode;->(Landroidx/compose/foundation/ScrollState;ZZ)V +HSPLandroidx/compose/foundation/ScrollingLayoutNode;->getScrollerState()Landroidx/compose/foundation/ScrollState; +HSPLandroidx/compose/foundation/ScrollingLayoutNode;->isReversed()Z +HSPLandroidx/compose/foundation/ScrollingLayoutNode;->isVertical()Z +HSPLandroidx/compose/foundation/ScrollingLayoutNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; +Landroidx/compose/foundation/ScrollingLayoutNode$measure$1; +HSPLandroidx/compose/foundation/ScrollingLayoutNode$measure$1;->(Landroidx/compose/foundation/ScrollingLayoutNode;ILandroidx/compose/ui/layout/Placeable;)V +HSPLandroidx/compose/foundation/ScrollingLayoutNode$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/foundation/ScrollingLayoutNode$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/gestures/AndroidConfig; +HSPLandroidx/compose/foundation/gestures/AndroidConfig;->()V +HSPLandroidx/compose/foundation/gestures/AndroidConfig;->()V +Landroidx/compose/foundation/gestures/AndroidScrollable_androidKt; +HSPLandroidx/compose/foundation/gestures/AndroidScrollable_androidKt;->platformScrollConfig(Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/gestures/ScrollConfig; +Landroidx/compose/foundation/gestures/BringIntoViewRequestPriorityQueue; +HSPLandroidx/compose/foundation/gestures/BringIntoViewRequestPriorityQueue;->()V +Landroidx/compose/foundation/gestures/ContentInViewModifier; +HSPLandroidx/compose/foundation/gestures/ContentInViewModifier;->(Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/gestures/ScrollableState;Z)V +HSPLandroidx/compose/foundation/gestures/ContentInViewModifier;->access$setFocusedChild$p(Landroidx/compose/foundation/gestures/ContentInViewModifier;Landroidx/compose/ui/layout/LayoutCoordinates;)V +HSPLandroidx/compose/foundation/gestures/ContentInViewModifier;->bringChildIntoView(Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/gestures/ContentInViewModifier;->calculateRectForParent(Landroidx/compose/ui/geometry/Rect;)Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/foundation/gestures/ContentInViewModifier;->compareTo-TemP2vQ(JJ)I +HSPLandroidx/compose/foundation/gestures/ContentInViewModifier;->computeDestination-O0kMr_c(Landroidx/compose/ui/geometry/Rect;J)Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/foundation/gestures/ContentInViewModifier;->getFocusedChildBounds()Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/foundation/gestures/ContentInViewModifier;->getModifier()Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/gestures/ContentInViewModifier;->isMaxVisible-O0kMr_c$default(Landroidx/compose/foundation/gestures/ContentInViewModifier;Landroidx/compose/ui/geometry/Rect;JILjava/lang/Object;)Z +HSPLandroidx/compose/foundation/gestures/ContentInViewModifier;->isMaxVisible-O0kMr_c(Landroidx/compose/ui/geometry/Rect;J)Z +HSPLandroidx/compose/foundation/gestures/ContentInViewModifier;->onPlaced(Landroidx/compose/ui/layout/LayoutCoordinates;)V +HSPLandroidx/compose/foundation/gestures/ContentInViewModifier;->onRemeasured-ozmzZPI(J)V +HSPLandroidx/compose/foundation/gestures/ContentInViewModifier;->relocationDistance(FFF)F +HSPLandroidx/compose/foundation/gestures/ContentInViewModifier;->relocationOffset-BMxPBkI(Landroidx/compose/ui/geometry/Rect;J)J +Landroidx/compose/foundation/gestures/ContentInViewModifier$Request; +Landroidx/compose/foundation/gestures/ContentInViewModifier$WhenMappings; +HSPLandroidx/compose/foundation/gestures/ContentInViewModifier$WhenMappings;->()V +Landroidx/compose/foundation/gestures/ContentInViewModifier$modifier$1; +HSPLandroidx/compose/foundation/gestures/ContentInViewModifier$modifier$1;->(Landroidx/compose/foundation/gestures/ContentInViewModifier;)V +HSPLandroidx/compose/foundation/gestures/ContentInViewModifier$modifier$1;->invoke(Landroidx/compose/ui/layout/LayoutCoordinates;)V +HSPLandroidx/compose/foundation/gestures/ContentInViewModifier$modifier$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/gestures/DefaultDraggableState; +HSPLandroidx/compose/foundation/gestures/DefaultDraggableState;->(Lkotlin/jvm/functions/Function1;)V +Landroidx/compose/foundation/gestures/DefaultDraggableState$dragScope$1; +HSPLandroidx/compose/foundation/gestures/DefaultDraggableState$dragScope$1;->(Landroidx/compose/foundation/gestures/DefaultDraggableState;)V +Landroidx/compose/foundation/gestures/DefaultFlingBehavior; +HSPLandroidx/compose/foundation/gestures/DefaultFlingBehavior;->(Landroidx/compose/animation/core/DecayAnimationSpec;Landroidx/compose/ui/MotionDurationScale;)V +HSPLandroidx/compose/foundation/gestures/DefaultFlingBehavior;->(Landroidx/compose/animation/core/DecayAnimationSpec;Landroidx/compose/ui/MotionDurationScale;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/foundation/gestures/DefaultScrollableState; +HSPLandroidx/compose/foundation/gestures/DefaultScrollableState;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/foundation/gestures/DefaultScrollableState;->access$getScrollMutex$p(Landroidx/compose/foundation/gestures/DefaultScrollableState;)Landroidx/compose/foundation/MutatorMutex; +HSPLandroidx/compose/foundation/gestures/DefaultScrollableState;->access$getScrollScope$p(Landroidx/compose/foundation/gestures/DefaultScrollableState;)Landroidx/compose/foundation/gestures/ScrollScope; +HSPLandroidx/compose/foundation/gestures/DefaultScrollableState;->access$isScrollingState$p(Landroidx/compose/foundation/gestures/DefaultScrollableState;)Landroidx/compose/runtime/MutableState; +HSPLandroidx/compose/foundation/gestures/DefaultScrollableState;->isScrollInProgress()Z +HSPLandroidx/compose/foundation/gestures/DefaultScrollableState;->scroll(Landroidx/compose/foundation/MutatePriority;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2; +HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2;->(Landroidx/compose/foundation/gestures/DefaultScrollableState;Landroidx/compose/foundation/MutatePriority;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2$1; +HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2$1;->(Landroidx/compose/foundation/gestures/DefaultScrollableState;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2$1;->invoke(Landroidx/compose/foundation/gestures/ScrollScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/gestures/DefaultScrollableState$scrollScope$1; +HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scrollScope$1;->(Landroidx/compose/foundation/gestures/DefaultScrollableState;)V +Landroidx/compose/foundation/gestures/DragGestureDetectorKt; +HSPLandroidx/compose/foundation/gestures/DragGestureDetectorKt;->()V +HSPLandroidx/compose/foundation/gestures/DragGestureDetectorKt;->access$isPointerUp-DmW0f2w(Landroidx/compose/ui/input/pointer/PointerEvent;J)Z +HSPLandroidx/compose/foundation/gestures/DragGestureDetectorKt;->isPointerUp-DmW0f2w(Landroidx/compose/ui/input/pointer/PointerEvent;J)Z +HSPLandroidx/compose/foundation/gestures/DragGestureDetectorKt;->pointerSlop-E8SPZFQ(Landroidx/compose/ui/platform/ViewConfiguration;I)F +HSPLandroidx/compose/foundation/gestures/DragGestureDetectorKt;->toPointerDirectionConfig(Landroidx/compose/foundation/gestures/Orientation;)Landroidx/compose/foundation/gestures/PointerDirectionConfig; +Landroidx/compose/foundation/gestures/DragGestureDetectorKt$HorizontalPointerDirectionConfig$1; +HSPLandroidx/compose/foundation/gestures/DragGestureDetectorKt$HorizontalPointerDirectionConfig$1;->()V +Landroidx/compose/foundation/gestures/DragGestureDetectorKt$VerticalPointerDirectionConfig$1; +HSPLandroidx/compose/foundation/gestures/DragGestureDetectorKt$VerticalPointerDirectionConfig$1;->()V +Landroidx/compose/foundation/gestures/DragScope; +Landroidx/compose/foundation/gestures/DraggableElement; +HSPLandroidx/compose/foundation/gestures/DraggableElement;->(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 +HSPLandroidx/compose/foundation/gestures/DraggableElement;->create()Landroidx/compose/foundation/gestures/DraggableNode; +HSPLandroidx/compose/foundation/gestures/DraggableElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/foundation/gestures/DraggableElement;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/foundation/gestures/DraggableElement;->update(Landroidx/compose/foundation/gestures/DraggableNode;)V +HSPLandroidx/compose/foundation/gestures/DraggableElement;->update(Landroidx/compose/ui/Modifier$Node;)V +Landroidx/compose/foundation/gestures/DraggableKt; +HSPLandroidx/compose/foundation/gestures/DraggableKt;->DraggableState(Lkotlin/jvm/functions/Function1;)Landroidx/compose/foundation/gestures/DraggableState; +HSPLandroidx/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/lang/Object; +HSPLandroidx/compose/foundation/gestures/DraggableKt;->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/lang/Object; +HSPLandroidx/compose/foundation/gestures/DraggableKt;->draggable$default(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/gestures/DraggableState;Landroidx/compose/foundation/gestures/Orientation;ZLandroidx/compose/foundation/interaction/MutableInteractionSource;ZLkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;ZILjava/lang/Object;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/gestures/DraggableKt;->draggable(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/gestures/DraggableState;Landroidx/compose/foundation/gestures/Orientation;ZLandroidx/compose/foundation/interaction/MutableInteractionSource;ZLkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Z)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/gestures/DraggableKt;->rememberDraggableState(Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/gestures/DraggableState; +Landroidx/compose/foundation/gestures/DraggableKt$awaitDownAndSlop$1; +HSPLandroidx/compose/foundation/gestures/DraggableKt$awaitDownAndSlop$1;->(Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/gestures/DraggableKt$awaitDownAndSlop$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/gestures/DraggableKt$awaitDownAndSlop$postPointerSlop$1; +HSPLandroidx/compose/foundation/gestures/DraggableKt$awaitDownAndSlop$postPointerSlop$1;->(Landroidx/compose/ui/input/pointer/util/VelocityTracker;Lkotlin/jvm/internal/Ref$LongRef;)V +Landroidx/compose/foundation/gestures/DraggableKt$draggable$3; +HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$3;->()V +HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$3;->()V +Landroidx/compose/foundation/gestures/DraggableKt$draggable$4; +HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$4;->(Z)V +Landroidx/compose/foundation/gestures/DraggableKt$draggable$5; +HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$5;->(Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/gestures/Orientation;Lkotlin/coroutines/Continuation;)V +Landroidx/compose/foundation/gestures/DraggableKt$rememberDraggableState$1$1; +HSPLandroidx/compose/foundation/gestures/DraggableKt$rememberDraggableState$1$1;->(Landroidx/compose/runtime/State;)V +Landroidx/compose/foundation/gestures/DraggableNode; +HSPLandroidx/compose/foundation/gestures/DraggableNode;->(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 +HSPLandroidx/compose/foundation/gestures/DraggableNode;->access$getCanDrag$p(Landroidx/compose/foundation/gestures/DraggableNode;)Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/foundation/gestures/DraggableNode;->access$getChannel$p(Landroidx/compose/foundation/gestures/DraggableNode;)Lkotlinx/coroutines/channels/Channel; +HSPLandroidx/compose/foundation/gestures/DraggableNode;->access$getEnabled$p(Landroidx/compose/foundation/gestures/DraggableNode;)Z +HSPLandroidx/compose/foundation/gestures/DraggableNode;->access$getOrientation$p(Landroidx/compose/foundation/gestures/DraggableNode;)Landroidx/compose/foundation/gestures/Orientation; +HSPLandroidx/compose/foundation/gestures/DraggableNode;->access$getStartDragImmediately$p(Landroidx/compose/foundation/gestures/DraggableNode;)Lkotlin/jvm/functions/Function0; +HSPLandroidx/compose/foundation/gestures/DraggableNode;->access$getVelocityTracker$p(Landroidx/compose/foundation/gestures/DraggableNode;)Landroidx/compose/ui/input/pointer/util/VelocityTracker; +HSPLandroidx/compose/foundation/gestures/DraggableNode;->access$get_canDrag$p(Landroidx/compose/foundation/gestures/DraggableNode;)Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/foundation/gestures/DraggableNode;->access$get_startDragImmediately$p(Landroidx/compose/foundation/gestures/DraggableNode;)Lkotlin/jvm/functions/Function0; +HSPLandroidx/compose/foundation/gestures/DraggableNode;->disposeInteractionSource()V +HSPLandroidx/compose/foundation/gestures/DraggableNode;->onDetach()V +HSPLandroidx/compose/foundation/gestures/DraggableNode;->onPointerEvent-H0pRuoY(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEventPass;J)V +HSPLandroidx/compose/foundation/gestures/DraggableNode;->update(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 +Landroidx/compose/foundation/gestures/DraggableNode$_canDrag$1; +HSPLandroidx/compose/foundation/gestures/DraggableNode$_canDrag$1;->(Landroidx/compose/foundation/gestures/DraggableNode;)V +HSPLandroidx/compose/foundation/gestures/DraggableNode$_canDrag$1;->invoke(Landroidx/compose/ui/input/pointer/PointerInputChange;)Ljava/lang/Boolean; +HSPLandroidx/compose/foundation/gestures/DraggableNode$_canDrag$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/gestures/DraggableNode$_startDragImmediately$1; +HSPLandroidx/compose/foundation/gestures/DraggableNode$_startDragImmediately$1;->(Landroidx/compose/foundation/gestures/DraggableNode;)V +HSPLandroidx/compose/foundation/gestures/DraggableNode$_startDragImmediately$1;->invoke()Ljava/lang/Boolean; +HSPLandroidx/compose/foundation/gestures/DraggableNode$_startDragImmediately$1;->invoke()Ljava/lang/Object; +Landroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1; +HSPLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1;->(Landroidx/compose/foundation/gestures/DraggableNode;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1;->invoke(Landroidx/compose/ui/input/pointer/PointerInputScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1$1; +HSPLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1$1;->(Landroidx/compose/ui/input/pointer/PointerInputScope;Landroidx/compose/foundation/gestures/DraggableNode;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1$1$1; +HSPLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1$1$1;->(Landroidx/compose/foundation/gestures/DraggableNode;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1$1$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1$1$2; +HSPLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1$1$2;->(Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/foundation/gestures/DraggableNode;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1$1$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/gestures/DraggableState; +Landroidx/compose/foundation/gestures/FlingBehavior; +Landroidx/compose/foundation/gestures/ForEachGestureKt; +HSPLandroidx/compose/foundation/gestures/ForEachGestureKt;->allPointersUp(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;)Z +HSPLandroidx/compose/foundation/gestures/ForEachGestureKt;->awaitAllPointersUp(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/gestures/ForEachGestureKt;->awaitEachGesture(Landroidx/compose/ui/input/pointer/PointerInputScope;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/compose/foundation/gestures/ForEachGestureKt$awaitAllPointersUp$3; +HSPLandroidx/compose/foundation/gestures/ForEachGestureKt$awaitAllPointersUp$3;->(Lkotlin/coroutines/Continuation;)V +Landroidx/compose/foundation/gestures/ForEachGestureKt$awaitEachGesture$2; +HSPLandroidx/compose/foundation/gestures/ForEachGestureKt$awaitEachGesture$2;->(Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/gestures/ForEachGestureKt$awaitEachGesture$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/gestures/ForEachGestureKt$awaitEachGesture$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/gestures/ModifierLocalScrollableContainerProvider; +HSPLandroidx/compose/foundation/gestures/ModifierLocalScrollableContainerProvider;->()V +HSPLandroidx/compose/foundation/gestures/ModifierLocalScrollableContainerProvider;->()V +HSPLandroidx/compose/foundation/gestures/ModifierLocalScrollableContainerProvider;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal; +HSPLandroidx/compose/foundation/gestures/ModifierLocalScrollableContainerProvider;->getValue()Ljava/lang/Boolean; +HSPLandroidx/compose/foundation/gestures/ModifierLocalScrollableContainerProvider;->getValue()Ljava/lang/Object; +Landroidx/compose/foundation/gestures/MouseWheelScrollElement; +HSPLandroidx/compose/foundation/gestures/MouseWheelScrollElement;->(Landroidx/compose/runtime/State;Landroidx/compose/foundation/gestures/ScrollConfig;)V +HSPLandroidx/compose/foundation/gestures/MouseWheelScrollElement;->create()Landroidx/compose/foundation/gestures/MouseWheelScrollNode; +HSPLandroidx/compose/foundation/gestures/MouseWheelScrollElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/foundation/gestures/MouseWheelScrollElement;->equals(Ljava/lang/Object;)Z +Landroidx/compose/foundation/gestures/MouseWheelScrollNode; +HSPLandroidx/compose/foundation/gestures/MouseWheelScrollNode;->(Landroidx/compose/runtime/State;Landroidx/compose/foundation/gestures/ScrollConfig;)V +HSPLandroidx/compose/foundation/gestures/MouseWheelScrollNode;->onPointerEvent-H0pRuoY(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEventPass;J)V +Landroidx/compose/foundation/gestures/MouseWheelScrollNode$pointerInputNode$1; +HSPLandroidx/compose/foundation/gestures/MouseWheelScrollNode$pointerInputNode$1;->(Landroidx/compose/foundation/gestures/MouseWheelScrollNode;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/gestures/MouseWheelScrollNode$pointerInputNode$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/gestures/MouseWheelScrollNode$pointerInputNode$1;->invoke(Landroidx/compose/ui/input/pointer/PointerInputScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/gestures/MouseWheelScrollNode$pointerInputNode$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/gestures/MouseWheelScrollNode$pointerInputNode$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/gestures/MouseWheelScrollNode$pointerInputNode$1$1; +HSPLandroidx/compose/foundation/gestures/MouseWheelScrollNode$pointerInputNode$1$1;->(Landroidx/compose/foundation/gestures/MouseWheelScrollNode;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/gestures/MouseWheelScrollNode$pointerInputNode$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/gestures/MouseWheelScrollNode$pointerInputNode$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/gestures/Orientation; +HSPLandroidx/compose/foundation/gestures/Orientation;->$values()[Landroidx/compose/foundation/gestures/Orientation; +HSPLandroidx/compose/foundation/gestures/Orientation;->()V +HSPLandroidx/compose/foundation/gestures/Orientation;->(Ljava/lang/String;I)V +HSPLandroidx/compose/foundation/gestures/Orientation;->values()[Landroidx/compose/foundation/gestures/Orientation; +Landroidx/compose/foundation/gestures/PointerDirectionConfig; +Landroidx/compose/foundation/gestures/PressGestureScope; +Landroidx/compose/foundation/gestures/PressGestureScopeImpl; +HSPLandroidx/compose/foundation/gestures/PressGestureScopeImpl;->(Landroidx/compose/ui/unit/Density;)V +HSPLandroidx/compose/foundation/gestures/PressGestureScopeImpl;->release()V +HSPLandroidx/compose/foundation/gestures/PressGestureScopeImpl;->reset(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/gestures/PressGestureScopeImpl;->tryAwaitRelease(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/compose/foundation/gestures/PressGestureScopeImpl$reset$1; +HSPLandroidx/compose/foundation/gestures/PressGestureScopeImpl$reset$1;->(Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/gestures/PressGestureScopeImpl$reset$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/gestures/PressGestureScopeImpl$tryAwaitRelease$1; +HSPLandroidx/compose/foundation/gestures/PressGestureScopeImpl$tryAwaitRelease$1;->(Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/gestures/PressGestureScopeImpl$tryAwaitRelease$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/gestures/ScrollConfig; +Landroidx/compose/foundation/gestures/ScrollDraggableState; +HSPLandroidx/compose/foundation/gestures/ScrollDraggableState;->(Landroidx/compose/runtime/State;)V +Landroidx/compose/foundation/gestures/ScrollScope; +Landroidx/compose/foundation/gestures/ScrollableDefaults; +HSPLandroidx/compose/foundation/gestures/ScrollableDefaults;->()V +HSPLandroidx/compose/foundation/gestures/ScrollableDefaults;->()V +HSPLandroidx/compose/foundation/gestures/ScrollableDefaults;->flingBehavior(Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/gestures/FlingBehavior; +HSPLandroidx/compose/foundation/gestures/ScrollableDefaults;->overscrollEffect(Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/OverscrollEffect; +HSPLandroidx/compose/foundation/gestures/ScrollableDefaults;->reverseDirection(Landroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/foundation/gestures/Orientation;Z)Z +Landroidx/compose/foundation/gestures/ScrollableKt; +HSPLandroidx/compose/foundation/gestures/ScrollableKt;->()V +HSPLandroidx/compose/foundation/gestures/ScrollableKt;->access$awaitScrollEvent(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/gestures/ScrollableKt;->access$getNoOpScrollScope$p()Landroidx/compose/foundation/gestures/ScrollScope; +HSPLandroidx/compose/foundation/gestures/ScrollableKt;->access$pointerScrollable(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/gestures/Orientation;ZLandroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/foundation/OverscrollEffect;ZLandroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/gestures/ScrollableKt;->access$scrollableNestedScrollConnection(Landroidx/compose/runtime/State;Z)Landroidx/compose/ui/input/nestedscroll/NestedScrollConnection; +HSPLandroidx/compose/foundation/gestures/ScrollableKt;->awaitScrollEvent(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/gestures/ScrollableKt;->getDefaultScrollMotionDurationScale()Landroidx/compose/ui/MotionDurationScale; +HSPLandroidx/compose/foundation/gestures/ScrollableKt;->getModifierLocalScrollableContainer()Landroidx/compose/ui/modifier/ProvidableModifierLocal; +HSPLandroidx/compose/foundation/gestures/ScrollableKt;->pointerScrollable(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/gestures/Orientation;ZLandroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/foundation/OverscrollEffect;ZLandroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/gestures/ScrollableKt;->scrollable$default(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/Orientation;ZZLandroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/foundation/interaction/MutableInteractionSource;ILjava/lang/Object;)Landroidx/compose/ui/Modifier; +HSPLandroidx/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/ui/Modifier; +HSPLandroidx/compose/foundation/gestures/ScrollableKt;->scrollable(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/Orientation;ZZLandroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/foundation/interaction/MutableInteractionSource;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/gestures/ScrollableKt;->scrollableNestedScrollConnection(Landroidx/compose/runtime/State;Z)Landroidx/compose/ui/input/nestedscroll/NestedScrollConnection; +Landroidx/compose/foundation/gestures/ScrollableKt$DefaultScrollMotionDurationScale$1; +HSPLandroidx/compose/foundation/gestures/ScrollableKt$DefaultScrollMotionDurationScale$1;->()V +Landroidx/compose/foundation/gestures/ScrollableKt$ModifierLocalScrollableContainer$1; +HSPLandroidx/compose/foundation/gestures/ScrollableKt$ModifierLocalScrollableContainer$1;->()V +HSPLandroidx/compose/foundation/gestures/ScrollableKt$ModifierLocalScrollableContainer$1;->()V +Landroidx/compose/foundation/gestures/ScrollableKt$NoOpOnDragStarted$1; +HSPLandroidx/compose/foundation/gestures/ScrollableKt$NoOpOnDragStarted$1;->(Lkotlin/coroutines/Continuation;)V +Landroidx/compose/foundation/gestures/ScrollableKt$NoOpScrollScope$1; +HSPLandroidx/compose/foundation/gestures/ScrollableKt$NoOpScrollScope$1;->()V +Landroidx/compose/foundation/gestures/ScrollableKt$awaitScrollEvent$1; +HSPLandroidx/compose/foundation/gestures/ScrollableKt$awaitScrollEvent$1;->(Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/gestures/ScrollableKt$awaitScrollEvent$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$1; +HSPLandroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$1;->()V +HSPLandroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$1;->()V +HSPLandroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$1;->invoke(Landroidx/compose/ui/input/pointer/PointerInputChange;)Ljava/lang/Boolean; +HSPLandroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$2$1; +HSPLandroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$2$1;->(Landroidx/compose/runtime/State;)V +HSPLandroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$2$1;->invoke()Ljava/lang/Boolean; +HSPLandroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$2$1;->invoke()Ljava/lang/Object; +Landroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$3$1; +HSPLandroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$3$1;->(Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V +Landroidx/compose/foundation/gestures/ScrollableKt$scrollable$2; +HSPLandroidx/compose/foundation/gestures/ScrollableKt$scrollable$2;->(Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/gestures/ScrollableState;ZLandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/foundation/OverscrollEffect;Z)V +HSPLandroidx/compose/foundation/gestures/ScrollableKt$scrollable$2;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/gestures/ScrollableKt$scrollable$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/gestures/ScrollableKt$scrollableNestedScrollConnection$1; +HSPLandroidx/compose/foundation/gestures/ScrollableKt$scrollableNestedScrollConnection$1;->(Landroidx/compose/runtime/State;Z)V +Landroidx/compose/foundation/gestures/ScrollableState; +HSPLandroidx/compose/foundation/gestures/ScrollableState;->scroll$default(Landroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/MutatePriority;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/gestures/ScrollableStateKt; +HSPLandroidx/compose/foundation/gestures/ScrollableStateKt;->ScrollableState(Lkotlin/jvm/functions/Function1;)Landroidx/compose/foundation/gestures/ScrollableState; +HSPLandroidx/compose/foundation/gestures/ScrollableStateKt;->rememberScrollableState(Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/gestures/ScrollableState; +Landroidx/compose/foundation/gestures/ScrollableStateKt$rememberScrollableState$1$1; +HSPLandroidx/compose/foundation/gestures/ScrollableStateKt$rememberScrollableState$1$1;->(Landroidx/compose/runtime/State;)V +Landroidx/compose/foundation/gestures/ScrollingLogic; +HSPLandroidx/compose/foundation/gestures/ScrollingLogic;->(Landroidx/compose/foundation/gestures/Orientation;ZLandroidx/compose/runtime/State;Landroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/foundation/OverscrollEffect;)V +HSPLandroidx/compose/foundation/gestures/ScrollingLogic;->shouldScrollImmediately()Z +Landroidx/compose/foundation/gestures/TapGestureDetectorKt; +HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt;->()V +HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt;->access$getNoPressGesture$p()Lkotlin/jvm/functions/Function3; +HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt;->awaitFirstDown$default(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;ZLandroidx/compose/ui/input/pointer/PointerEventPass;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt;->awaitFirstDown(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;ZLandroidx/compose/ui/input/pointer/PointerEventPass;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/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; +HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt;->waitForUpOrCancellation$default(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Landroidx/compose/ui/input/pointer/PointerEventPass;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt;->waitForUpOrCancellation(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Landroidx/compose/ui/input/pointer/PointerEventPass;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/compose/foundation/gestures/TapGestureDetectorKt$NoPressGesture$1; +HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$NoPressGesture$1;->(Lkotlin/coroutines/Continuation;)V +Landroidx/compose/foundation/gestures/TapGestureDetectorKt$awaitFirstDown$2; +HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$awaitFirstDown$2;->(Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$awaitFirstDown$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2; +HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2;->(Landroidx/compose/ui/input/pointer/PointerInputScope;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function1;Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1; +HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1;->(Lkotlinx/coroutines/CoroutineScope;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function1;Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1;->invoke(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$1; +HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$1;->(Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$2; +HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$2;->(Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Landroidx/compose/ui/input/pointer/PointerInputChange;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$4; +HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$4;->(Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$4;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$4;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/gestures/TapGestureDetectorKt$waitForUpOrCancellation$2; +HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$waitForUpOrCancellation$2;->(Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$waitForUpOrCancellation$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/gestures/UpdatableAnimationState; +HSPLandroidx/compose/foundation/gestures/UpdatableAnimationState;->()V +HSPLandroidx/compose/foundation/gestures/UpdatableAnimationState;->()V +Landroidx/compose/foundation/gestures/UpdatableAnimationState$Companion; +HSPLandroidx/compose/foundation/gestures/UpdatableAnimationState$Companion;->()V +HSPLandroidx/compose/foundation/gestures/UpdatableAnimationState$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/foundation/interaction/FocusInteraction; +Landroidx/compose/foundation/interaction/FocusInteraction$Focus; +HSPLandroidx/compose/foundation/interaction/FocusInteraction$Focus;->()V +HSPLandroidx/compose/foundation/interaction/FocusInteraction$Focus;->()V +Landroidx/compose/foundation/interaction/FocusInteraction$Unfocus; +HSPLandroidx/compose/foundation/interaction/FocusInteraction$Unfocus;->()V +PLandroidx/compose/foundation/interaction/FocusInteraction$Unfocus;->(Landroidx/compose/foundation/interaction/FocusInteraction$Focus;)V +Landroidx/compose/foundation/interaction/FocusInteractionKt; +HSPLandroidx/compose/foundation/interaction/FocusInteractionKt;->collectIsFocusedAsState(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State; +Landroidx/compose/foundation/interaction/FocusInteractionKt$collectIsFocusedAsState$1$1; +HSPLandroidx/compose/foundation/interaction/FocusInteractionKt$collectIsFocusedAsState$1$1;->(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/interaction/FocusInteractionKt$collectIsFocusedAsState$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/interaction/FocusInteractionKt$collectIsFocusedAsState$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/interaction/FocusInteractionKt$collectIsFocusedAsState$1$1$1; +HSPLandroidx/compose/foundation/interaction/FocusInteractionKt$collectIsFocusedAsState$1$1$1;->(Ljava/util/List;Landroidx/compose/runtime/MutableState;)V +HSPLandroidx/compose/foundation/interaction/FocusInteractionKt$collectIsFocusedAsState$1$1$1;->emit(Landroidx/compose/foundation/interaction/Interaction;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/interaction/FocusInteractionKt$collectIsFocusedAsState$1$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/compose/foundation/interaction/HoverInteraction; +Landroidx/compose/foundation/interaction/HoverInteraction$Enter; +Landroidx/compose/foundation/interaction/HoverInteraction$Exit; +Landroidx/compose/foundation/interaction/Interaction; +Landroidx/compose/foundation/interaction/InteractionSource; +Landroidx/compose/foundation/interaction/InteractionSourceKt; +HSPLandroidx/compose/foundation/interaction/InteractionSourceKt;->MutableInteractionSource()Landroidx/compose/foundation/interaction/MutableInteractionSource; +Landroidx/compose/foundation/interaction/MutableInteractionSource; +Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl; +HSPLandroidx/compose/foundation/interaction/MutableInteractionSourceImpl;->()V +HSPLandroidx/compose/foundation/interaction/MutableInteractionSourceImpl;->emit(Landroidx/compose/foundation/interaction/Interaction;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/interaction/MutableInteractionSourceImpl;->getInteractions()Lkotlinx/coroutines/flow/Flow; +HSPLandroidx/compose/foundation/interaction/MutableInteractionSourceImpl;->getInteractions()Lkotlinx/coroutines/flow/MutableSharedFlow; +HSPLandroidx/compose/foundation/interaction/MutableInteractionSourceImpl;->tryEmit(Landroidx/compose/foundation/interaction/Interaction;)Z +Landroidx/compose/foundation/interaction/PressInteraction; +Landroidx/compose/foundation/interaction/PressInteraction$Press; +HSPLandroidx/compose/foundation/interaction/PressInteraction$Press;->()V +HSPLandroidx/compose/foundation/interaction/PressInteraction$Press;->(J)V +HSPLandroidx/compose/foundation/interaction/PressInteraction$Press;->(JLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/interaction/PressInteraction$Press;->getPressPosition-F1C5BW0()J +Landroidx/compose/foundation/interaction/PressInteraction$Release; +HSPLandroidx/compose/foundation/interaction/PressInteraction$Release;->()V +HSPLandroidx/compose/foundation/interaction/PressInteraction$Release;->(Landroidx/compose/foundation/interaction/PressInteraction$Press;)V +HSPLandroidx/compose/foundation/interaction/PressInteraction$Release;->getPress()Landroidx/compose/foundation/interaction/PressInteraction$Press; +Landroidx/compose/foundation/layout/AddedInsets; +HSPLandroidx/compose/foundation/layout/AddedInsets;->(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/foundation/layout/WindowInsets;)V +HSPLandroidx/compose/foundation/layout/AddedInsets;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/foundation/layout/AddedInsets;->getBottom(Landroidx/compose/ui/unit/Density;)I +HSPLandroidx/compose/foundation/layout/AddedInsets;->getLeft(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I +HSPLandroidx/compose/foundation/layout/AddedInsets;->getRight(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I +HSPLandroidx/compose/foundation/layout/AddedInsets;->getTop(Landroidx/compose/ui/unit/Density;)I +Landroidx/compose/foundation/layout/AndroidWindowInsets; +HSPLandroidx/compose/foundation/layout/AndroidWindowInsets;->(ILjava/lang/String;)V +HSPLandroidx/compose/foundation/layout/AndroidWindowInsets;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/foundation/layout/AndroidWindowInsets;->getBottom(Landroidx/compose/ui/unit/Density;)I +HSPLandroidx/compose/foundation/layout/AndroidWindowInsets;->getInsets$foundation_layout_release()Landroidx/core/graphics/Insets; +HSPLandroidx/compose/foundation/layout/AndroidWindowInsets;->getLeft(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I +HSPLandroidx/compose/foundation/layout/AndroidWindowInsets;->getRight(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I +HSPLandroidx/compose/foundation/layout/AndroidWindowInsets;->getTop(Landroidx/compose/ui/unit/Density;)I +HSPLandroidx/compose/foundation/layout/AndroidWindowInsets;->setInsets$foundation_layout_release(Landroidx/core/graphics/Insets;)V +HSPLandroidx/compose/foundation/layout/AndroidWindowInsets;->setVisible(Z)V +HSPLandroidx/compose/foundation/layout/AndroidWindowInsets;->update$foundation_layout_release(Landroidx/core/view/WindowInsetsCompat;I)V +Landroidx/compose/foundation/layout/Arrangement; +HSPLandroidx/compose/foundation/layout/Arrangement;->()V +HSPLandroidx/compose/foundation/layout/Arrangement;->()V +HSPLandroidx/compose/foundation/layout/Arrangement;->getCenter()Landroidx/compose/foundation/layout/Arrangement$HorizontalOrVertical; +HSPLandroidx/compose/foundation/layout/Arrangement;->getEnd()Landroidx/compose/foundation/layout/Arrangement$Horizontal; +HSPLandroidx/compose/foundation/layout/Arrangement;->getSpaceBetween()Landroidx/compose/foundation/layout/Arrangement$HorizontalOrVertical; +HSPLandroidx/compose/foundation/layout/Arrangement;->getStart()Landroidx/compose/foundation/layout/Arrangement$Horizontal; +HSPLandroidx/compose/foundation/layout/Arrangement;->getTop()Landroidx/compose/foundation/layout/Arrangement$Vertical; +HSPLandroidx/compose/foundation/layout/Arrangement;->placeCenter$foundation_layout_release(I[I[IZ)V +HSPLandroidx/compose/foundation/layout/Arrangement;->placeLeftOrTop$foundation_layout_release([I[IZ)V +HSPLandroidx/compose/foundation/layout/Arrangement;->placeRightOrBottom$foundation_layout_release(I[I[IZ)V +HSPLandroidx/compose/foundation/layout/Arrangement;->placeSpaceBetween$foundation_layout_release(I[I[IZ)V +HSPLandroidx/compose/foundation/layout/Arrangement;->spacedBy-0680j_4(F)Landroidx/compose/foundation/layout/Arrangement$HorizontalOrVertical; +Landroidx/compose/foundation/layout/Arrangement$Bottom$1; +HSPLandroidx/compose/foundation/layout/Arrangement$Bottom$1;->()V +Landroidx/compose/foundation/layout/Arrangement$Center$1; +HSPLandroidx/compose/foundation/layout/Arrangement$Center$1;->()V +HSPLandroidx/compose/foundation/layout/Arrangement$Center$1;->arrange(Landroidx/compose/ui/unit/Density;I[ILandroidx/compose/ui/unit/LayoutDirection;[I)V +HSPLandroidx/compose/foundation/layout/Arrangement$Center$1;->arrange(Landroidx/compose/ui/unit/Density;I[I[I)V +HSPLandroidx/compose/foundation/layout/Arrangement$Center$1;->getSpacing-D9Ej5fM()F +Landroidx/compose/foundation/layout/Arrangement$End$1; +HSPLandroidx/compose/foundation/layout/Arrangement$End$1;->()V +HSPLandroidx/compose/foundation/layout/Arrangement$End$1;->arrange(Landroidx/compose/ui/unit/Density;I[ILandroidx/compose/ui/unit/LayoutDirection;[I)V +Landroidx/compose/foundation/layout/Arrangement$Horizontal; +HSPLandroidx/compose/foundation/layout/Arrangement$Horizontal;->getSpacing-D9Ej5fM()F +Landroidx/compose/foundation/layout/Arrangement$HorizontalOrVertical; +Landroidx/compose/foundation/layout/Arrangement$SpaceAround$1; +HSPLandroidx/compose/foundation/layout/Arrangement$SpaceAround$1;->()V +Landroidx/compose/foundation/layout/Arrangement$SpaceBetween$1; +HSPLandroidx/compose/foundation/layout/Arrangement$SpaceBetween$1;->()V +HSPLandroidx/compose/foundation/layout/Arrangement$SpaceBetween$1;->arrange(Landroidx/compose/ui/unit/Density;I[ILandroidx/compose/ui/unit/LayoutDirection;[I)V +HSPLandroidx/compose/foundation/layout/Arrangement$SpaceBetween$1;->getSpacing-D9Ej5fM()F +Landroidx/compose/foundation/layout/Arrangement$SpaceEvenly$1; +HSPLandroidx/compose/foundation/layout/Arrangement$SpaceEvenly$1;->()V +Landroidx/compose/foundation/layout/Arrangement$SpacedAligned; +HSPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;->(FZLkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;->(FZLkotlin/jvm/functions/Function2;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;->arrange(Landroidx/compose/ui/unit/Density;I[ILandroidx/compose/ui/unit/LayoutDirection;[I)V +HSPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;->arrange(Landroidx/compose/ui/unit/Density;I[I[I)V +HSPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;->getSpacing-D9Ej5fM()F +Landroidx/compose/foundation/layout/Arrangement$Start$1; +HSPLandroidx/compose/foundation/layout/Arrangement$Start$1;->()V +HSPLandroidx/compose/foundation/layout/Arrangement$Start$1;->arrange(Landroidx/compose/ui/unit/Density;I[ILandroidx/compose/ui/unit/LayoutDirection;[I)V +Landroidx/compose/foundation/layout/Arrangement$Top$1; +HSPLandroidx/compose/foundation/layout/Arrangement$Top$1;->()V +HSPLandroidx/compose/foundation/layout/Arrangement$Top$1;->arrange(Landroidx/compose/ui/unit/Density;I[I[I)V +Landroidx/compose/foundation/layout/Arrangement$Vertical; +HSPLandroidx/compose/foundation/layout/Arrangement$Vertical;->getSpacing-D9Ej5fM()F +Landroidx/compose/foundation/layout/Arrangement$spacedBy$1; +HSPLandroidx/compose/foundation/layout/Arrangement$spacedBy$1;->()V +HSPLandroidx/compose/foundation/layout/Arrangement$spacedBy$1;->()V +HSPLandroidx/compose/foundation/layout/Arrangement$spacedBy$1;->invoke(ILandroidx/compose/ui/unit/LayoutDirection;)Ljava/lang/Integer; +HSPLandroidx/compose/foundation/layout/Arrangement$spacedBy$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/layout/BoxChildDataElement; +HSPLandroidx/compose/foundation/layout/BoxChildDataElement;->(Landroidx/compose/ui/Alignment;ZLkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/foundation/layout/BoxChildDataElement;->create()Landroidx/compose/foundation/layout/BoxChildDataNode; +HSPLandroidx/compose/foundation/layout/BoxChildDataElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/foundation/layout/BoxChildDataElement;->equals(Ljava/lang/Object;)Z +Landroidx/compose/foundation/layout/BoxChildDataNode; +HSPLandroidx/compose/foundation/layout/BoxChildDataNode;->(Landroidx/compose/ui/Alignment;Z)V +HSPLandroidx/compose/foundation/layout/BoxChildDataNode;->getAlignment()Landroidx/compose/ui/Alignment; +HSPLandroidx/compose/foundation/layout/BoxChildDataNode;->getMatchParentSize()Z +HSPLandroidx/compose/foundation/layout/BoxChildDataNode;->modifyParentData(Landroidx/compose/ui/unit/Density;Ljava/lang/Object;)Landroidx/compose/foundation/layout/BoxChildDataNode; +HSPLandroidx/compose/foundation/layout/BoxChildDataNode;->modifyParentData(Landroidx/compose/ui/unit/Density;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/layout/BoxKt; +HSPLandroidx/compose/foundation/layout/BoxKt;->()V +HSPLandroidx/compose/foundation/layout/BoxKt;->Box(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/foundation/layout/BoxKt;->access$getMatchesParentSize(Landroidx/compose/ui/layout/Measurable;)Z +HSPLandroidx/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 +HSPLandroidx/compose/foundation/layout/BoxKt;->boxMeasurePolicy(Landroidx/compose/ui/Alignment;Z)Landroidx/compose/ui/layout/MeasurePolicy; +HSPLandroidx/compose/foundation/layout/BoxKt;->getBoxChildDataNode(Landroidx/compose/ui/layout/Measurable;)Landroidx/compose/foundation/layout/BoxChildDataNode; +HSPLandroidx/compose/foundation/layout/BoxKt;->getMatchesParentSize(Landroidx/compose/ui/layout/Measurable;)Z +HSPLandroidx/compose/foundation/layout/BoxKt;->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 +HSPLandroidx/compose/foundation/layout/BoxKt;->rememberBoxMeasurePolicy(Landroidx/compose/ui/Alignment;ZLandroidx/compose/runtime/Composer;I)Landroidx/compose/ui/layout/MeasurePolicy; +Landroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1; +HSPLandroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1;->()V +HSPLandroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1;->()V +HSPLandroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; +Landroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1$measure$1; +HSPLandroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1$measure$1;->()V +HSPLandroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1$measure$1;->()V +HSPLandroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1; +HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1;->(ZLandroidx/compose/ui/Alignment;)V +HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; +Landroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$1; +HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$1;->()V +HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$1;->()V +HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$2; +HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$2;->(Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/Measurable;Landroidx/compose/ui/layout/MeasureScope;IILandroidx/compose/ui/Alignment;)V +HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$2;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$5; +HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$5;->([Landroidx/compose/ui/layout/Placeable;Ljava/util/List;Landroidx/compose/ui/layout/MeasureScope;Lkotlin/jvm/internal/Ref$IntRef;Lkotlin/jvm/internal/Ref$IntRef;Landroidx/compose/ui/Alignment;)V +HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$5;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$5;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/layout/BoxScope; +Landroidx/compose/foundation/layout/BoxScopeInstance; +HSPLandroidx/compose/foundation/layout/BoxScopeInstance;->()V +HSPLandroidx/compose/foundation/layout/BoxScopeInstance;->()V +HSPLandroidx/compose/foundation/layout/BoxScopeInstance;->align(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Alignment;)Landroidx/compose/ui/Modifier; +Landroidx/compose/foundation/layout/BoxWithConstraintsKt; +HSPLandroidx/compose/foundation/layout/BoxWithConstraintsKt;->BoxWithConstraints(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Alignment;ZLkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V +Landroidx/compose/foundation/layout/BoxWithConstraintsKt$BoxWithConstraints$1$1; +HSPLandroidx/compose/foundation/layout/BoxWithConstraintsKt$BoxWithConstraints$1$1;->(Landroidx/compose/ui/layout/MeasurePolicy;Lkotlin/jvm/functions/Function3;I)V +HSPLandroidx/compose/foundation/layout/BoxWithConstraintsKt$BoxWithConstraints$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/layout/BoxWithConstraintsKt$BoxWithConstraints$1$1;->invoke-0kLqBqw(Landroidx/compose/ui/layout/SubcomposeMeasureScope;J)Landroidx/compose/ui/layout/MeasureResult; +Landroidx/compose/foundation/layout/BoxWithConstraintsKt$BoxWithConstraints$1$1$measurables$1; +HSPLandroidx/compose/foundation/layout/BoxWithConstraintsKt$BoxWithConstraints$1$1$measurables$1;->(Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/layout/BoxWithConstraintsScopeImpl;I)V +HSPLandroidx/compose/foundation/layout/BoxWithConstraintsKt$BoxWithConstraints$1$1$measurables$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/foundation/layout/BoxWithConstraintsKt$BoxWithConstraints$1$1$measurables$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/layout/BoxWithConstraintsScope; +Landroidx/compose/foundation/layout/BoxWithConstraintsScopeImpl; +HSPLandroidx/compose/foundation/layout/BoxWithConstraintsScopeImpl;->(Landroidx/compose/ui/unit/Density;J)V +HSPLandroidx/compose/foundation/layout/BoxWithConstraintsScopeImpl;->(Landroidx/compose/ui/unit/Density;JLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/layout/BoxWithConstraintsScopeImpl;->align(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Alignment;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/layout/BoxWithConstraintsScopeImpl;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/foundation/layout/BoxWithConstraintsScopeImpl;->getConstraints-msEJaDk()J +HSPLandroidx/compose/foundation/layout/BoxWithConstraintsScopeImpl;->getMaxHeight-D9Ej5fM()F +HSPLandroidx/compose/foundation/layout/BoxWithConstraintsScopeImpl;->getMaxWidth-D9Ej5fM()F +Landroidx/compose/foundation/layout/ColumnKt; +HSPLandroidx/compose/foundation/layout/ColumnKt;->()V +HSPLandroidx/compose/foundation/layout/ColumnKt;->columnMeasurePolicy(Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/layout/MeasurePolicy; +Landroidx/compose/foundation/layout/ColumnKt$DefaultColumnMeasurePolicy$1; +HSPLandroidx/compose/foundation/layout/ColumnKt$DefaultColumnMeasurePolicy$1;->()V +HSPLandroidx/compose/foundation/layout/ColumnKt$DefaultColumnMeasurePolicy$1;->()V +HSPLandroidx/compose/foundation/layout/ColumnKt$DefaultColumnMeasurePolicy$1;->invoke(I[ILandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;[I)V +HSPLandroidx/compose/foundation/layout/ColumnKt$DefaultColumnMeasurePolicy$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/layout/ColumnKt$columnMeasurePolicy$1$1; +HSPLandroidx/compose/foundation/layout/ColumnKt$columnMeasurePolicy$1$1;->(Landroidx/compose/foundation/layout/Arrangement$Vertical;)V +HSPLandroidx/compose/foundation/layout/ColumnKt$columnMeasurePolicy$1$1;->invoke(I[ILandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;[I)V +HSPLandroidx/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; +Landroidx/compose/foundation/layout/ColumnScope; +HSPLandroidx/compose/foundation/layout/ColumnScope;->weight$default(Landroidx/compose/foundation/layout/ColumnScope;Landroidx/compose/ui/Modifier;FZILjava/lang/Object;)Landroidx/compose/ui/Modifier; +Landroidx/compose/foundation/layout/ColumnScopeInstance; +HSPLandroidx/compose/foundation/layout/ColumnScopeInstance;->()V +HSPLandroidx/compose/foundation/layout/ColumnScopeInstance;->()V +HSPLandroidx/compose/foundation/layout/ColumnScopeInstance;->weight(Landroidx/compose/ui/Modifier;FZ)Landroidx/compose/ui/Modifier; +Landroidx/compose/foundation/layout/ConsumedInsetsModifier; +HSPLandroidx/compose/foundation/layout/ConsumedInsetsModifier;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/foundation/layout/ConsumedInsetsModifier;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/foundation/layout/ConsumedInsetsModifier;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V +Landroidx/compose/foundation/layout/CrossAxisAlignment; +HSPLandroidx/compose/foundation/layout/CrossAxisAlignment;->()V +HSPLandroidx/compose/foundation/layout/CrossAxisAlignment;->()V +HSPLandroidx/compose/foundation/layout/CrossAxisAlignment;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/foundation/layout/CrossAxisAlignment$CenterCrossAxisAlignment; +HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$CenterCrossAxisAlignment;->()V +HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$CenterCrossAxisAlignment;->()V +Landroidx/compose/foundation/layout/CrossAxisAlignment$Companion; +HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$Companion;->()V +HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$Companion;->horizontal$foundation_layout_release(Landroidx/compose/ui/Alignment$Horizontal;)Landroidx/compose/foundation/layout/CrossAxisAlignment; +HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$Companion;->vertical$foundation_layout_release(Landroidx/compose/ui/Alignment$Vertical;)Landroidx/compose/foundation/layout/CrossAxisAlignment; +Landroidx/compose/foundation/layout/CrossAxisAlignment$EndCrossAxisAlignment; +HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$EndCrossAxisAlignment;->()V +HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$EndCrossAxisAlignment;->()V +Landroidx/compose/foundation/layout/CrossAxisAlignment$HorizontalCrossAxisAlignment; +HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$HorizontalCrossAxisAlignment;->(Landroidx/compose/ui/Alignment$Horizontal;)V +HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$HorizontalCrossAxisAlignment;->align$foundation_layout_release(ILandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/layout/Placeable;I)I +Landroidx/compose/foundation/layout/CrossAxisAlignment$StartCrossAxisAlignment; +HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$StartCrossAxisAlignment;->()V +HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$StartCrossAxisAlignment;->()V +Landroidx/compose/foundation/layout/CrossAxisAlignment$VerticalCrossAxisAlignment; +HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$VerticalCrossAxisAlignment;->(Landroidx/compose/ui/Alignment$Vertical;)V +HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$VerticalCrossAxisAlignment;->align$foundation_layout_release(ILandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/layout/Placeable;I)I +Landroidx/compose/foundation/layout/Direction; +HSPLandroidx/compose/foundation/layout/Direction;->$values()[Landroidx/compose/foundation/layout/Direction; +HSPLandroidx/compose/foundation/layout/Direction;->()V +HSPLandroidx/compose/foundation/layout/Direction;->(Ljava/lang/String;I)V +Landroidx/compose/foundation/layout/ExcludeInsets; +HSPLandroidx/compose/foundation/layout/ExcludeInsets;->(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/foundation/layout/WindowInsets;)V +HSPLandroidx/compose/foundation/layout/ExcludeInsets;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/foundation/layout/ExcludeInsets;->getBottom(Landroidx/compose/ui/unit/Density;)I +HSPLandroidx/compose/foundation/layout/ExcludeInsets;->getLeft(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I +HSPLandroidx/compose/foundation/layout/ExcludeInsets;->getRight(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I +HSPLandroidx/compose/foundation/layout/ExcludeInsets;->getTop(Landroidx/compose/ui/unit/Density;)I +Landroidx/compose/foundation/layout/FillElement; +HSPLandroidx/compose/foundation/layout/FillElement;->()V +HSPLandroidx/compose/foundation/layout/FillElement;->(Landroidx/compose/foundation/layout/Direction;FLjava/lang/String;)V +HSPLandroidx/compose/foundation/layout/FillElement;->create()Landroidx/compose/foundation/layout/FillNode; +HSPLandroidx/compose/foundation/layout/FillElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/foundation/layout/FillElement;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/foundation/layout/FillElement;->update(Landroidx/compose/foundation/layout/FillNode;)V +HSPLandroidx/compose/foundation/layout/FillElement;->update(Landroidx/compose/ui/Modifier$Node;)V +Landroidx/compose/foundation/layout/FillElement$Companion; +HSPLandroidx/compose/foundation/layout/FillElement$Companion;->()V +HSPLandroidx/compose/foundation/layout/FillElement$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/layout/FillElement$Companion;->height(F)Landroidx/compose/foundation/layout/FillElement; +HSPLandroidx/compose/foundation/layout/FillElement$Companion;->size(F)Landroidx/compose/foundation/layout/FillElement; +HSPLandroidx/compose/foundation/layout/FillElement$Companion;->width(F)Landroidx/compose/foundation/layout/FillElement; +Landroidx/compose/foundation/layout/FillNode; +HSPLandroidx/compose/foundation/layout/FillNode;->(Landroidx/compose/foundation/layout/Direction;F)V +HSPLandroidx/compose/foundation/layout/FillNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; +HSPLandroidx/compose/foundation/layout/FillNode;->setDirection(Landroidx/compose/foundation/layout/Direction;)V +HSPLandroidx/compose/foundation/layout/FillNode;->setFraction(F)V +Landroidx/compose/foundation/layout/FillNode$measure$1; +HSPLandroidx/compose/foundation/layout/FillNode$measure$1;->(Landroidx/compose/ui/layout/Placeable;)V +HSPLandroidx/compose/foundation/layout/FillNode$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/foundation/layout/FillNode$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/layout/FixedDpInsets; +HSPLandroidx/compose/foundation/layout/FixedDpInsets;->(FFFF)V +HSPLandroidx/compose/foundation/layout/FixedDpInsets;->(FFFFLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/layout/FixedDpInsets;->getBottom(Landroidx/compose/ui/unit/Density;)I +HSPLandroidx/compose/foundation/layout/FixedDpInsets;->getLeft(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I +HSPLandroidx/compose/foundation/layout/FixedDpInsets;->getRight(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I +HSPLandroidx/compose/foundation/layout/FixedDpInsets;->getTop(Landroidx/compose/ui/unit/Density;)I +Landroidx/compose/foundation/layout/FixedIntInsets; +HSPLandroidx/compose/foundation/layout/FixedIntInsets;->(IIII)V +HSPLandroidx/compose/foundation/layout/FixedIntInsets;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/foundation/layout/FixedIntInsets;->getBottom(Landroidx/compose/ui/unit/Density;)I +HSPLandroidx/compose/foundation/layout/FixedIntInsets;->getLeft(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I +HSPLandroidx/compose/foundation/layout/FixedIntInsets;->getRight(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I +HSPLandroidx/compose/foundation/layout/FixedIntInsets;->getTop(Landroidx/compose/ui/unit/Density;)I +Landroidx/compose/foundation/layout/FlowLayoutKt; +HSPLandroidx/compose/foundation/layout/FlowLayoutKt;->()V +HSPLandroidx/compose/foundation/layout/FlowLayoutKt;->access$flowMeasurePolicy-bs7tm-s(Landroidx/compose/foundation/layout/LayoutOrientation;Lkotlin/jvm/functions/Function5;FLandroidx/compose/foundation/layout/SizeMode;Landroidx/compose/foundation/layout/CrossAxisAlignment;Lkotlin/jvm/functions/Function5;FI)Landroidx/compose/ui/layout/MeasurePolicy; +HSPLandroidx/compose/foundation/layout/FlowLayoutKt;->access$getCROSS_AXIS_ALIGNMENT_TOP$p()Landroidx/compose/foundation/layout/CrossAxisAlignment; +HSPLandroidx/compose/foundation/layout/FlowLayoutKt;->access$getHorizontalArrangement(Landroidx/compose/foundation/layout/Arrangement$Horizontal;)Lkotlin/jvm/functions/Function5; +HSPLandroidx/compose/foundation/layout/FlowLayoutKt;->access$getVerticalArrangement(Landroidx/compose/foundation/layout/Arrangement$Vertical;)Lkotlin/jvm/functions/Function5; +HSPLandroidx/compose/foundation/layout/FlowLayoutKt;->breakDownItems-w1Onq5I(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/foundation/layout/RowColumnMeasurementHelper;Landroidx/compose/foundation/layout/LayoutOrientation;JI)Landroidx/compose/foundation/layout/FlowResult; +HSPLandroidx/compose/foundation/layout/FlowLayoutKt;->flowMeasurePolicy-bs7tm-s(Landroidx/compose/foundation/layout/LayoutOrientation;Lkotlin/jvm/functions/Function5;FLandroidx/compose/foundation/layout/SizeMode;Landroidx/compose/foundation/layout/CrossAxisAlignment;Lkotlin/jvm/functions/Function5;FI)Landroidx/compose/ui/layout/MeasurePolicy; +HSPLandroidx/compose/foundation/layout/FlowLayoutKt;->getHorizontalArrangement(Landroidx/compose/foundation/layout/Arrangement$Horizontal;)Lkotlin/jvm/functions/Function5; +HSPLandroidx/compose/foundation/layout/FlowLayoutKt;->getVerticalArrangement(Landroidx/compose/foundation/layout/Arrangement$Vertical;)Lkotlin/jvm/functions/Function5; +HSPLandroidx/compose/foundation/layout/FlowLayoutKt;->mainAxisSize(Landroidx/compose/ui/layout/Placeable;Landroidx/compose/foundation/layout/LayoutOrientation;)I +HSPLandroidx/compose/foundation/layout/FlowLayoutKt;->measureAndCache-6m2dt9o(Landroidx/compose/ui/layout/Measurable;JLandroidx/compose/foundation/layout/LayoutOrientation;Lkotlin/jvm/functions/Function1;)I +HSPLandroidx/compose/foundation/layout/FlowLayoutKt;->rowMeasurementHelper(Landroidx/compose/foundation/layout/Arrangement$Horizontal;Landroidx/compose/foundation/layout/Arrangement$Vertical;ILandroidx/compose/runtime/Composer;I)Landroidx/compose/ui/layout/MeasurePolicy; +Landroidx/compose/foundation/layout/FlowLayoutKt$breakDownItems$1; +HSPLandroidx/compose/foundation/layout/FlowLayoutKt$breakDownItems$1;->([Landroidx/compose/ui/layout/Placeable;I)V +HSPLandroidx/compose/foundation/layout/FlowLayoutKt$breakDownItems$1;->invoke(Landroidx/compose/ui/layout/Placeable;)V +HSPLandroidx/compose/foundation/layout/FlowLayoutKt$breakDownItems$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/layout/FlowLayoutKt$breakDownItems$nextSize$1; +HSPLandroidx/compose/foundation/layout/FlowLayoutKt$breakDownItems$nextSize$1;->([Landroidx/compose/ui/layout/Placeable;)V +HSPLandroidx/compose/foundation/layout/FlowLayoutKt$breakDownItems$nextSize$1;->invoke(Landroidx/compose/ui/layout/Placeable;)V +HSPLandroidx/compose/foundation/layout/FlowLayoutKt$breakDownItems$nextSize$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/layout/FlowLayoutKt$flowMeasurePolicy$1; +HSPLandroidx/compose/foundation/layout/FlowLayoutKt$flowMeasurePolicy$1;->(Landroidx/compose/foundation/layout/LayoutOrientation;Lkotlin/jvm/functions/Function5;FLandroidx/compose/foundation/layout/SizeMode;Landroidx/compose/foundation/layout/CrossAxisAlignment;IFLkotlin/jvm/functions/Function5;)V +HSPLandroidx/compose/foundation/layout/FlowLayoutKt$flowMeasurePolicy$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; +Landroidx/compose/foundation/layout/FlowLayoutKt$flowMeasurePolicy$1$maxCrossAxisIntrinsicItemSize$1; +HSPLandroidx/compose/foundation/layout/FlowLayoutKt$flowMeasurePolicy$1$maxCrossAxisIntrinsicItemSize$1;->()V +HSPLandroidx/compose/foundation/layout/FlowLayoutKt$flowMeasurePolicy$1$maxCrossAxisIntrinsicItemSize$1;->()V +Landroidx/compose/foundation/layout/FlowLayoutKt$flowMeasurePolicy$1$maxMainAxisIntrinsicItemSize$1; +HSPLandroidx/compose/foundation/layout/FlowLayoutKt$flowMeasurePolicy$1$maxMainAxisIntrinsicItemSize$1;->()V +HSPLandroidx/compose/foundation/layout/FlowLayoutKt$flowMeasurePolicy$1$maxMainAxisIntrinsicItemSize$1;->()V +Landroidx/compose/foundation/layout/FlowLayoutKt$flowMeasurePolicy$1$measure$2; +HSPLandroidx/compose/foundation/layout/FlowLayoutKt$flowMeasurePolicy$1$measure$2;->(Landroidx/compose/foundation/layout/FlowResult;Landroidx/compose/foundation/layout/RowColumnMeasurementHelper;[ILandroidx/compose/ui/layout/MeasureScope;)V +HSPLandroidx/compose/foundation/layout/FlowLayoutKt$flowMeasurePolicy$1$measure$2;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/foundation/layout/FlowLayoutKt$flowMeasurePolicy$1$measure$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/layout/FlowLayoutKt$flowMeasurePolicy$1$minCrossAxisIntrinsicItemSize$1; +HSPLandroidx/compose/foundation/layout/FlowLayoutKt$flowMeasurePolicy$1$minCrossAxisIntrinsicItemSize$1;->()V +HSPLandroidx/compose/foundation/layout/FlowLayoutKt$flowMeasurePolicy$1$minCrossAxisIntrinsicItemSize$1;->()V +Landroidx/compose/foundation/layout/FlowLayoutKt$flowMeasurePolicy$1$minMainAxisIntrinsicItemSize$1; +HSPLandroidx/compose/foundation/layout/FlowLayoutKt$flowMeasurePolicy$1$minMainAxisIntrinsicItemSize$1;->()V +HSPLandroidx/compose/foundation/layout/FlowLayoutKt$flowMeasurePolicy$1$minMainAxisIntrinsicItemSize$1;->()V +Landroidx/compose/foundation/layout/FlowLayoutKt$getHorizontalArrangement$1; +HSPLandroidx/compose/foundation/layout/FlowLayoutKt$getHorizontalArrangement$1;->(Landroidx/compose/foundation/layout/Arrangement$Horizontal;)V +HSPLandroidx/compose/foundation/layout/FlowLayoutKt$getHorizontalArrangement$1;->invoke(I[ILandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;[I)V +HSPLandroidx/compose/foundation/layout/FlowLayoutKt$getHorizontalArrangement$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/layout/FlowLayoutKt$getVerticalArrangement$1; +HSPLandroidx/compose/foundation/layout/FlowLayoutKt$getVerticalArrangement$1;->(Landroidx/compose/foundation/layout/Arrangement$Vertical;)V +HSPLandroidx/compose/foundation/layout/FlowLayoutKt$getVerticalArrangement$1;->invoke(I[ILandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;[I)V +HSPLandroidx/compose/foundation/layout/FlowLayoutKt$getVerticalArrangement$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/layout/FlowResult; +HSPLandroidx/compose/foundation/layout/FlowResult;->(IILandroidx/compose/runtime/collection/MutableVector;)V +HSPLandroidx/compose/foundation/layout/FlowResult;->getCrossAxisTotalSize()I +HSPLandroidx/compose/foundation/layout/FlowResult;->getItems()Landroidx/compose/runtime/collection/MutableVector; +HSPLandroidx/compose/foundation/layout/FlowResult;->getMainAxisTotalSize()I +Landroidx/compose/foundation/layout/FlowRowScope; +Landroidx/compose/foundation/layout/FlowRowScopeInstance; +HSPLandroidx/compose/foundation/layout/FlowRowScopeInstance;->()V +HSPLandroidx/compose/foundation/layout/FlowRowScopeInstance;->()V +Landroidx/compose/foundation/layout/InsetsConsumingModifier; +HSPLandroidx/compose/foundation/layout/InsetsConsumingModifier;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/foundation/layout/InsetsConsumingModifier;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/layout/InsetsConsumingModifier;->getConsumedInsets()Landroidx/compose/foundation/layout/WindowInsets; +HSPLandroidx/compose/foundation/layout/InsetsConsumingModifier;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal; +HSPLandroidx/compose/foundation/layout/InsetsConsumingModifier;->getValue()Landroidx/compose/foundation/layout/WindowInsets; +HSPLandroidx/compose/foundation/layout/InsetsConsumingModifier;->getValue()Ljava/lang/Object; +HSPLandroidx/compose/foundation/layout/InsetsConsumingModifier;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V +HSPLandroidx/compose/foundation/layout/InsetsConsumingModifier;->setConsumedInsets(Landroidx/compose/foundation/layout/WindowInsets;)V +Landroidx/compose/foundation/layout/InsetsListener; +HSPLandroidx/compose/foundation/layout/InsetsListener;->(Landroidx/compose/foundation/layout/WindowInsetsHolder;)V +HSPLandroidx/compose/foundation/layout/InsetsListener;->onApplyWindowInsets(Landroid/view/View;Landroidx/core/view/WindowInsetsCompat;)Landroidx/core/view/WindowInsetsCompat; +HSPLandroidx/compose/foundation/layout/InsetsListener;->onEnd(Landroidx/core/view/WindowInsetsAnimationCompat;)V +HSPLandroidx/compose/foundation/layout/InsetsListener;->onPrepare(Landroidx/core/view/WindowInsetsAnimationCompat;)V +HSPLandroidx/compose/foundation/layout/InsetsListener;->onProgress(Landroidx/core/view/WindowInsetsCompat;Ljava/util/List;)Landroidx/core/view/WindowInsetsCompat; +HSPLandroidx/compose/foundation/layout/InsetsListener;->onStart(Landroidx/core/view/WindowInsetsAnimationCompat;Landroidx/core/view/WindowInsetsAnimationCompat$BoundsCompat;)Landroidx/core/view/WindowInsetsAnimationCompat$BoundsCompat; +HSPLandroidx/compose/foundation/layout/InsetsListener;->onViewAttachedToWindow(Landroid/view/View;)V +Landroidx/compose/foundation/layout/InsetsPaddingModifier; +HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier;->(Landroidx/compose/foundation/layout/WindowInsets;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier;->getConsumedInsets()Landroidx/compose/foundation/layout/WindowInsets; +HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal; +HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier;->getUnconsumedInsets()Landroidx/compose/foundation/layout/WindowInsets; +HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier;->getValue()Landroidx/compose/foundation/layout/WindowInsets; +HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier;->getValue()Ljava/lang/Object; +HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; +HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V +HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier;->setConsumedInsets(Landroidx/compose/foundation/layout/WindowInsets;)V +HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier;->setUnconsumedInsets(Landroidx/compose/foundation/layout/WindowInsets;)V +Landroidx/compose/foundation/layout/InsetsPaddingModifier$measure$1; +HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier$measure$1;->(Landroidx/compose/ui/layout/Placeable;II)V +HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/layout/InsetsPaddingValues; +HSPLandroidx/compose/foundation/layout/InsetsPaddingValues;->(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/ui/unit/Density;)V +HSPLandroidx/compose/foundation/layout/InsetsPaddingValues;->calculateBottomPadding-D9Ej5fM()F +HSPLandroidx/compose/foundation/layout/InsetsPaddingValues;->calculateLeftPadding-u2uoSUM(Landroidx/compose/ui/unit/LayoutDirection;)F +HSPLandroidx/compose/foundation/layout/InsetsPaddingValues;->calculateRightPadding-u2uoSUM(Landroidx/compose/ui/unit/LayoutDirection;)F +HSPLandroidx/compose/foundation/layout/InsetsPaddingValues;->calculateTopPadding-D9Ej5fM()F +HSPLandroidx/compose/foundation/layout/InsetsPaddingValues;->equals(Ljava/lang/Object;)Z +Landroidx/compose/foundation/layout/InsetsValues; +HSPLandroidx/compose/foundation/layout/InsetsValues;->(IIII)V +HSPLandroidx/compose/foundation/layout/InsetsValues;->equals(Ljava/lang/Object;)Z +Landroidx/compose/foundation/layout/LayoutOrientation; +HSPLandroidx/compose/foundation/layout/LayoutOrientation;->$values()[Landroidx/compose/foundation/layout/LayoutOrientation; +HSPLandroidx/compose/foundation/layout/LayoutOrientation;->()V +HSPLandroidx/compose/foundation/layout/LayoutOrientation;->(Ljava/lang/String;I)V +Landroidx/compose/foundation/layout/LayoutWeightElement; +HSPLandroidx/compose/foundation/layout/LayoutWeightElement;->(FZ)V +HSPLandroidx/compose/foundation/layout/LayoutWeightElement;->create()Landroidx/compose/foundation/layout/LayoutWeightNode; +HSPLandroidx/compose/foundation/layout/LayoutWeightElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/foundation/layout/LayoutWeightElement;->equals(Ljava/lang/Object;)Z +Landroidx/compose/foundation/layout/LayoutWeightNode; +HSPLandroidx/compose/foundation/layout/LayoutWeightNode;->(FZ)V +HSPLandroidx/compose/foundation/layout/LayoutWeightNode;->modifyParentData(Landroidx/compose/ui/unit/Density;Ljava/lang/Object;)Landroidx/compose/foundation/layout/RowColumnParentData; +HSPLandroidx/compose/foundation/layout/LayoutWeightNode;->modifyParentData(Landroidx/compose/ui/unit/Density;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/layout/LimitInsets; +HSPLandroidx/compose/foundation/layout/LimitInsets;->(Landroidx/compose/foundation/layout/WindowInsets;I)V +HSPLandroidx/compose/foundation/layout/LimitInsets;->(Landroidx/compose/foundation/layout/WindowInsets;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/layout/LimitInsets;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/foundation/layout/LimitInsets;->getBottom(Landroidx/compose/ui/unit/Density;)I +HSPLandroidx/compose/foundation/layout/LimitInsets;->getLeft(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I +HSPLandroidx/compose/foundation/layout/LimitInsets;->getRight(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I +HSPLandroidx/compose/foundation/layout/LimitInsets;->getTop(Landroidx/compose/ui/unit/Density;)I +Landroidx/compose/foundation/layout/MutableWindowInsets; +HSPLandroidx/compose/foundation/layout/MutableWindowInsets;->()V +HSPLandroidx/compose/foundation/layout/MutableWindowInsets;->(Landroidx/compose/foundation/layout/WindowInsets;)V +HSPLandroidx/compose/foundation/layout/MutableWindowInsets;->(Landroidx/compose/foundation/layout/WindowInsets;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/layout/MutableWindowInsets;->getBottom(Landroidx/compose/ui/unit/Density;)I +HSPLandroidx/compose/foundation/layout/MutableWindowInsets;->getInsets()Landroidx/compose/foundation/layout/WindowInsets; +HSPLandroidx/compose/foundation/layout/MutableWindowInsets;->getLeft(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I +HSPLandroidx/compose/foundation/layout/MutableWindowInsets;->getRight(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I +HSPLandroidx/compose/foundation/layout/MutableWindowInsets;->setInsets(Landroidx/compose/foundation/layout/WindowInsets;)V +Landroidx/compose/foundation/layout/OrientationIndependentConstraints; +HSPLandroidx/compose/foundation/layout/OrientationIndependentConstraints;->constructor-impl(IIII)J +HSPLandroidx/compose/foundation/layout/OrientationIndependentConstraints;->constructor-impl(J)J +HSPLandroidx/compose/foundation/layout/OrientationIndependentConstraints;->constructor-impl(JLandroidx/compose/foundation/layout/LayoutOrientation;)J +HSPLandroidx/compose/foundation/layout/OrientationIndependentConstraints;->copy-yUG9Ft0$default(JIIIIILjava/lang/Object;)J +HSPLandroidx/compose/foundation/layout/OrientationIndependentConstraints;->copy-yUG9Ft0(JIIII)J +HSPLandroidx/compose/foundation/layout/OrientationIndependentConstraints;->toBoxConstraints-OenEA2s(JLandroidx/compose/foundation/layout/LayoutOrientation;)J +Landroidx/compose/foundation/layout/PaddingElement; +HSPLandroidx/compose/foundation/layout/PaddingElement;->(FFFFZLkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/foundation/layout/PaddingElement;->(FFFFZLkotlin/jvm/functions/Function1;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/layout/PaddingElement;->create()Landroidx/compose/foundation/layout/PaddingNode; +HSPLandroidx/compose/foundation/layout/PaddingElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/foundation/layout/PaddingElement;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/foundation/layout/PaddingElement;->update(Landroidx/compose/foundation/layout/PaddingNode;)V +HSPLandroidx/compose/foundation/layout/PaddingElement;->update(Landroidx/compose/ui/Modifier$Node;)V +Landroidx/compose/foundation/layout/PaddingKt; +HSPLandroidx/compose/foundation/layout/PaddingKt;->PaddingValues-0680j_4(F)Landroidx/compose/foundation/layout/PaddingValues; +HSPLandroidx/compose/foundation/layout/PaddingKt;->PaddingValues-YgX7TsA$default(FFILjava/lang/Object;)Landroidx/compose/foundation/layout/PaddingValues; +HSPLandroidx/compose/foundation/layout/PaddingKt;->PaddingValues-YgX7TsA(FF)Landroidx/compose/foundation/layout/PaddingValues; +HSPLandroidx/compose/foundation/layout/PaddingKt;->PaddingValues-a9UjIt4$default(FFFFILjava/lang/Object;)Landroidx/compose/foundation/layout/PaddingValues; +HSPLandroidx/compose/foundation/layout/PaddingKt;->PaddingValues-a9UjIt4(FFFF)Landroidx/compose/foundation/layout/PaddingValues; +HSPLandroidx/compose/foundation/layout/PaddingKt;->calculateEndPadding(Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/ui/unit/LayoutDirection;)F +HSPLandroidx/compose/foundation/layout/PaddingKt;->calculateStartPadding(Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/ui/unit/LayoutDirection;)F +HSPLandroidx/compose/foundation/layout/PaddingKt;->padding(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/layout/PaddingValues;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/layout/PaddingKt;->padding-3ABfNKs(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/layout/PaddingKt;->padding-VpY3zN4$default(Landroidx/compose/ui/Modifier;FFILjava/lang/Object;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/layout/PaddingKt;->padding-VpY3zN4(Landroidx/compose/ui/Modifier;FF)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/layout/PaddingKt;->padding-qDBjuR0$default(Landroidx/compose/ui/Modifier;FFFFILjava/lang/Object;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/layout/PaddingKt;->padding-qDBjuR0(Landroidx/compose/ui/Modifier;FFFF)Landroidx/compose/ui/Modifier; +Landroidx/compose/foundation/layout/PaddingKt$padding$1; +HSPLandroidx/compose/foundation/layout/PaddingKt$padding$1;->(FFFF)V +Landroidx/compose/foundation/layout/PaddingKt$padding$2; +HSPLandroidx/compose/foundation/layout/PaddingKt$padding$2;->(FF)V +Landroidx/compose/foundation/layout/PaddingKt$padding$3; +HSPLandroidx/compose/foundation/layout/PaddingKt$padding$3;->(F)V +Landroidx/compose/foundation/layout/PaddingKt$padding$4; +HSPLandroidx/compose/foundation/layout/PaddingKt$padding$4;->(Landroidx/compose/foundation/layout/PaddingValues;)V +Landroidx/compose/foundation/layout/PaddingNode; +HSPLandroidx/compose/foundation/layout/PaddingNode;->(FFFFZ)V +HSPLandroidx/compose/foundation/layout/PaddingNode;->(FFFFZLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/layout/PaddingNode;->getRtlAware()Z +HSPLandroidx/compose/foundation/layout/PaddingNode;->getStart-D9Ej5fM()F +HSPLandroidx/compose/foundation/layout/PaddingNode;->getTop-D9Ej5fM()F +HSPLandroidx/compose/foundation/layout/PaddingNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; +HSPLandroidx/compose/foundation/layout/PaddingNode;->setBottom-0680j_4(F)V +HSPLandroidx/compose/foundation/layout/PaddingNode;->setEnd-0680j_4(F)V +HSPLandroidx/compose/foundation/layout/PaddingNode;->setRtlAware(Z)V +HSPLandroidx/compose/foundation/layout/PaddingNode;->setStart-0680j_4(F)V +HSPLandroidx/compose/foundation/layout/PaddingNode;->setTop-0680j_4(F)V +Landroidx/compose/foundation/layout/PaddingNode$measure$1; +HSPLandroidx/compose/foundation/layout/PaddingNode$measure$1;->(Landroidx/compose/foundation/layout/PaddingNode;Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/MeasureScope;)V +HSPLandroidx/compose/foundation/layout/PaddingNode$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/foundation/layout/PaddingNode$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/layout/PaddingValues; +Landroidx/compose/foundation/layout/PaddingValuesElement; +HSPLandroidx/compose/foundation/layout/PaddingValuesElement;->(Landroidx/compose/foundation/layout/PaddingValues;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/foundation/layout/PaddingValuesElement;->create()Landroidx/compose/foundation/layout/PaddingValuesModifier; +HSPLandroidx/compose/foundation/layout/PaddingValuesElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/foundation/layout/PaddingValuesElement;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/foundation/layout/PaddingValuesElement;->update(Landroidx/compose/foundation/layout/PaddingValuesModifier;)V +HSPLandroidx/compose/foundation/layout/PaddingValuesElement;->update(Landroidx/compose/ui/Modifier$Node;)V +Landroidx/compose/foundation/layout/PaddingValuesImpl; +HSPLandroidx/compose/foundation/layout/PaddingValuesImpl;->(FFFF)V +HSPLandroidx/compose/foundation/layout/PaddingValuesImpl;->(FFFFLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/layout/PaddingValuesImpl;->calculateBottomPadding-D9Ej5fM()F +HSPLandroidx/compose/foundation/layout/PaddingValuesImpl;->calculateLeftPadding-u2uoSUM(Landroidx/compose/ui/unit/LayoutDirection;)F +HSPLandroidx/compose/foundation/layout/PaddingValuesImpl;->calculateRightPadding-u2uoSUM(Landroidx/compose/ui/unit/LayoutDirection;)F +HSPLandroidx/compose/foundation/layout/PaddingValuesImpl;->calculateTopPadding-D9Ej5fM()F +HSPLandroidx/compose/foundation/layout/PaddingValuesImpl;->equals(Ljava/lang/Object;)Z +Landroidx/compose/foundation/layout/PaddingValuesModifier; +HSPLandroidx/compose/foundation/layout/PaddingValuesModifier;->(Landroidx/compose/foundation/layout/PaddingValues;)V +HSPLandroidx/compose/foundation/layout/PaddingValuesModifier;->getPaddingValues()Landroidx/compose/foundation/layout/PaddingValues; +HSPLandroidx/compose/foundation/layout/PaddingValuesModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; +HSPLandroidx/compose/foundation/layout/PaddingValuesModifier;->setPaddingValues(Landroidx/compose/foundation/layout/PaddingValues;)V +Landroidx/compose/foundation/layout/PaddingValuesModifier$measure$2; +HSPLandroidx/compose/foundation/layout/PaddingValuesModifier$measure$2;->(Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/foundation/layout/PaddingValuesModifier;)V +HSPLandroidx/compose/foundation/layout/PaddingValuesModifier$measure$2;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/foundation/layout/PaddingValuesModifier$measure$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/layout/RowColumnImplKt; +HSPLandroidx/compose/foundation/layout/RowColumnImplKt;->getCrossAxisAlignment(Landroidx/compose/foundation/layout/RowColumnParentData;)Landroidx/compose/foundation/layout/CrossAxisAlignment; +HSPLandroidx/compose/foundation/layout/RowColumnImplKt;->getFill(Landroidx/compose/foundation/layout/RowColumnParentData;)Z +HSPLandroidx/compose/foundation/layout/RowColumnImplKt;->getRowColumnParentData(Landroidx/compose/ui/layout/IntrinsicMeasurable;)Landroidx/compose/foundation/layout/RowColumnParentData; +HSPLandroidx/compose/foundation/layout/RowColumnImplKt;->getWeight(Landroidx/compose/foundation/layout/RowColumnParentData;)F +HSPLandroidx/compose/foundation/layout/RowColumnImplKt;->isRelative(Landroidx/compose/foundation/layout/RowColumnParentData;)Z +HSPLandroidx/compose/foundation/layout/RowColumnImplKt;->rowColumnMeasurePolicy-TDGSqEk(Landroidx/compose/foundation/layout/LayoutOrientation;Lkotlin/jvm/functions/Function5;FLandroidx/compose/foundation/layout/SizeMode;Landroidx/compose/foundation/layout/CrossAxisAlignment;)Landroidx/compose/ui/layout/MeasurePolicy; +Landroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1; +HSPLandroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1;->(Landroidx/compose/foundation/layout/LayoutOrientation;Lkotlin/jvm/functions/Function5;FLandroidx/compose/foundation/layout/SizeMode;Landroidx/compose/foundation/layout/CrossAxisAlignment;)V +HSPLandroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; +Landroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1$measure$1; +HSPLandroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1$measure$1;->(Landroidx/compose/foundation/layout/RowColumnMeasurementHelper;Landroidx/compose/foundation/layout/RowColumnMeasureHelperResult;Landroidx/compose/ui/layout/MeasureScope;)V +HSPLandroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/layout/RowColumnMeasureHelperResult; +HSPLandroidx/compose/foundation/layout/RowColumnMeasureHelperResult;->(IIIII[I)V +HSPLandroidx/compose/foundation/layout/RowColumnMeasureHelperResult;->getBeforeCrossAxisAlignmentLine()I +HSPLandroidx/compose/foundation/layout/RowColumnMeasureHelperResult;->getCrossAxisSize()I +HSPLandroidx/compose/foundation/layout/RowColumnMeasureHelperResult;->getEndIndex()I +HSPLandroidx/compose/foundation/layout/RowColumnMeasureHelperResult;->getMainAxisPositions()[I +HSPLandroidx/compose/foundation/layout/RowColumnMeasureHelperResult;->getMainAxisSize()I +HSPLandroidx/compose/foundation/layout/RowColumnMeasureHelperResult;->getStartIndex()I +Landroidx/compose/foundation/layout/RowColumnMeasurementHelper; +HSPLandroidx/compose/foundation/layout/RowColumnMeasurementHelper;->(Landroidx/compose/foundation/layout/LayoutOrientation;Lkotlin/jvm/functions/Function5;FLandroidx/compose/foundation/layout/SizeMode;Landroidx/compose/foundation/layout/CrossAxisAlignment;Ljava/util/List;[Landroidx/compose/ui/layout/Placeable;)V +HSPLandroidx/compose/foundation/layout/RowColumnMeasurementHelper;->(Landroidx/compose/foundation/layout/LayoutOrientation;Lkotlin/jvm/functions/Function5;FLandroidx/compose/foundation/layout/SizeMode;Landroidx/compose/foundation/layout/CrossAxisAlignment;Ljava/util/List;[Landroidx/compose/ui/layout/Placeable;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/layout/RowColumnMeasurementHelper;->crossAxisSize(Landroidx/compose/ui/layout/Placeable;)I +HSPLandroidx/compose/foundation/layout/RowColumnMeasurementHelper;->getArrangementSpacing-D9Ej5fM()F +HSPLandroidx/compose/foundation/layout/RowColumnMeasurementHelper;->getCrossAxisPosition(Landroidx/compose/ui/layout/Placeable;Landroidx/compose/foundation/layout/RowColumnParentData;ILandroidx/compose/ui/unit/LayoutDirection;I)I +HSPLandroidx/compose/foundation/layout/RowColumnMeasurementHelper;->getMeasurables()Ljava/util/List; +HSPLandroidx/compose/foundation/layout/RowColumnMeasurementHelper;->getPlaceables()[Landroidx/compose/ui/layout/Placeable; +HSPLandroidx/compose/foundation/layout/RowColumnMeasurementHelper;->mainAxisPositions(I[I[ILandroidx/compose/ui/layout/MeasureScope;)[I +HSPLandroidx/compose/foundation/layout/RowColumnMeasurementHelper;->mainAxisSize(Landroidx/compose/ui/layout/Placeable;)I +HSPLandroidx/compose/foundation/layout/RowColumnMeasurementHelper;->measureWithoutPlacing-_EkL_-Y(Landroidx/compose/ui/layout/MeasureScope;JII)Landroidx/compose/foundation/layout/RowColumnMeasureHelperResult; +HSPLandroidx/compose/foundation/layout/RowColumnMeasurementHelper;->placeHelper(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/foundation/layout/RowColumnMeasureHelperResult;ILandroidx/compose/ui/unit/LayoutDirection;)V +Landroidx/compose/foundation/layout/RowColumnParentData; +HSPLandroidx/compose/foundation/layout/RowColumnParentData;->(FZLandroidx/compose/foundation/layout/CrossAxisAlignment;)V +HSPLandroidx/compose/foundation/layout/RowColumnParentData;->(FZLandroidx/compose/foundation/layout/CrossAxisAlignment;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/layout/RowColumnParentData;->getCrossAxisAlignment()Landroidx/compose/foundation/layout/CrossAxisAlignment; +HSPLandroidx/compose/foundation/layout/RowColumnParentData;->getFill()Z +HSPLandroidx/compose/foundation/layout/RowColumnParentData;->getWeight()F +HSPLandroidx/compose/foundation/layout/RowColumnParentData;->setFill(Z)V +HSPLandroidx/compose/foundation/layout/RowColumnParentData;->setWeight(F)V +Landroidx/compose/foundation/layout/RowKt; +HSPLandroidx/compose/foundation/layout/RowKt;->()V +HSPLandroidx/compose/foundation/layout/RowKt;->rowMeasurePolicy(Landroidx/compose/foundation/layout/Arrangement$Horizontal;Landroidx/compose/ui/Alignment$Vertical;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/layout/MeasurePolicy; +Landroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1; +HSPLandroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1;->()V +HSPLandroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1;->()V +HSPLandroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1;->invoke(I[ILandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;[I)V +HSPLandroidx/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; +Landroidx/compose/foundation/layout/RowKt$rowMeasurePolicy$1$1; +HSPLandroidx/compose/foundation/layout/RowKt$rowMeasurePolicy$1$1;->(Landroidx/compose/foundation/layout/Arrangement$Horizontal;)V +HSPLandroidx/compose/foundation/layout/RowKt$rowMeasurePolicy$1$1;->invoke(I[ILandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;[I)V +HSPLandroidx/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; +Landroidx/compose/foundation/layout/RowScope; +HSPLandroidx/compose/foundation/layout/RowScope;->weight$default(Landroidx/compose/foundation/layout/RowScope;Landroidx/compose/ui/Modifier;FZILjava/lang/Object;)Landroidx/compose/ui/Modifier; +Landroidx/compose/foundation/layout/RowScopeInstance; +HSPLandroidx/compose/foundation/layout/RowScopeInstance;->()V +HSPLandroidx/compose/foundation/layout/RowScopeInstance;->()V +HSPLandroidx/compose/foundation/layout/RowScopeInstance;->weight(Landroidx/compose/ui/Modifier;FZ)Landroidx/compose/ui/Modifier; +Landroidx/compose/foundation/layout/SizeElement; +HSPLandroidx/compose/foundation/layout/SizeElement;->(FFFFZLkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/foundation/layout/SizeElement;->(FFFFZLkotlin/jvm/functions/Function1;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/layout/SizeElement;->(FFFFZLkotlin/jvm/functions/Function1;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/layout/SizeElement;->create()Landroidx/compose/foundation/layout/SizeNode; +HSPLandroidx/compose/foundation/layout/SizeElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/foundation/layout/SizeElement;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/foundation/layout/SizeElement;->update(Landroidx/compose/foundation/layout/SizeNode;)V +HSPLandroidx/compose/foundation/layout/SizeElement;->update(Landroidx/compose/ui/Modifier$Node;)V +Landroidx/compose/foundation/layout/SizeKt; +HSPLandroidx/compose/foundation/layout/SizeKt;->()V +HSPLandroidx/compose/foundation/layout/SizeKt;->defaultMinSize-VpY3zN4$default(Landroidx/compose/ui/Modifier;FFILjava/lang/Object;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/layout/SizeKt;->defaultMinSize-VpY3zN4(Landroidx/compose/ui/Modifier;FF)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/layout/SizeKt;->fillMaxHeight$default(Landroidx/compose/ui/Modifier;FILjava/lang/Object;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/layout/SizeKt;->fillMaxHeight(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/layout/SizeKt;->fillMaxSize$default(Landroidx/compose/ui/Modifier;FILjava/lang/Object;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/layout/SizeKt;->fillMaxSize(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/layout/SizeKt;->fillMaxWidth$default(Landroidx/compose/ui/Modifier;FILjava/lang/Object;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/layout/SizeKt;->fillMaxWidth(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/layout/SizeKt;->height-3ABfNKs(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/layout/SizeKt;->heightIn-VpY3zN4$default(Landroidx/compose/ui/Modifier;FFILjava/lang/Object;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/layout/SizeKt;->heightIn-VpY3zN4(Landroidx/compose/ui/Modifier;FF)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/layout/SizeKt;->requiredSize-3ABfNKs(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/layout/SizeKt;->size-3ABfNKs(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/layout/SizeKt;->width-3ABfNKs(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/layout/SizeKt;->widthIn-VpY3zN4$default(Landroidx/compose/ui/Modifier;FFILjava/lang/Object;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/layout/SizeKt;->widthIn-VpY3zN4(Landroidx/compose/ui/Modifier;FF)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/layout/SizeKt;->wrapContentSize$default(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Alignment;ZILjava/lang/Object;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/layout/SizeKt;->wrapContentSize(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Alignment;Z)Landroidx/compose/ui/Modifier; +Landroidx/compose/foundation/layout/SizeMode; +HSPLandroidx/compose/foundation/layout/SizeMode;->$values()[Landroidx/compose/foundation/layout/SizeMode; +HSPLandroidx/compose/foundation/layout/SizeMode;->()V +HSPLandroidx/compose/foundation/layout/SizeMode;->(Ljava/lang/String;I)V +Landroidx/compose/foundation/layout/SizeNode; +HSPLandroidx/compose/foundation/layout/SizeNode;->(FFFFZ)V +HSPLandroidx/compose/foundation/layout/SizeNode;->(FFFFZLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/layout/SizeNode;->getTargetConstraints-OenEA2s(Landroidx/compose/ui/unit/Density;)J +HSPLandroidx/compose/foundation/layout/SizeNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; +HSPLandroidx/compose/foundation/layout/SizeNode;->setEnforceIncoming(Z)V +HSPLandroidx/compose/foundation/layout/SizeNode;->setMaxHeight-0680j_4(F)V +HSPLandroidx/compose/foundation/layout/SizeNode;->setMaxWidth-0680j_4(F)V +HSPLandroidx/compose/foundation/layout/SizeNode;->setMinHeight-0680j_4(F)V +HSPLandroidx/compose/foundation/layout/SizeNode;->setMinWidth-0680j_4(F)V +Landroidx/compose/foundation/layout/SizeNode$measure$1; +HSPLandroidx/compose/foundation/layout/SizeNode$measure$1;->(Landroidx/compose/ui/layout/Placeable;)V +HSPLandroidx/compose/foundation/layout/SizeNode$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/foundation/layout/SizeNode$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/layout/SpacerKt; +HSPLandroidx/compose/foundation/layout/SpacerKt;->Spacer(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)V +Landroidx/compose/foundation/layout/SpacerMeasurePolicy; +HSPLandroidx/compose/foundation/layout/SpacerMeasurePolicy;->()V +HSPLandroidx/compose/foundation/layout/SpacerMeasurePolicy;->()V +HSPLandroidx/compose/foundation/layout/SpacerMeasurePolicy;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; +Landroidx/compose/foundation/layout/SpacerMeasurePolicy$measure$1$1; +HSPLandroidx/compose/foundation/layout/SpacerMeasurePolicy$measure$1$1;->()V +HSPLandroidx/compose/foundation/layout/SpacerMeasurePolicy$measure$1$1;->()V +HSPLandroidx/compose/foundation/layout/SpacerMeasurePolicy$measure$1$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/foundation/layout/SpacerMeasurePolicy$measure$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/layout/UnionInsets; +HSPLandroidx/compose/foundation/layout/UnionInsets;->(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/foundation/layout/WindowInsets;)V +HSPLandroidx/compose/foundation/layout/UnionInsets;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/foundation/layout/UnionInsets;->getBottom(Landroidx/compose/ui/unit/Density;)I +HSPLandroidx/compose/foundation/layout/UnionInsets;->getLeft(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I +HSPLandroidx/compose/foundation/layout/UnionInsets;->getRight(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I +HSPLandroidx/compose/foundation/layout/UnionInsets;->getTop(Landroidx/compose/ui/unit/Density;)I +Landroidx/compose/foundation/layout/UnionInsetsConsumingModifier; +HSPLandroidx/compose/foundation/layout/UnionInsetsConsumingModifier;->(Landroidx/compose/foundation/layout/WindowInsets;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/foundation/layout/UnionInsetsConsumingModifier;->calculateInsets(Landroidx/compose/foundation/layout/WindowInsets;)Landroidx/compose/foundation/layout/WindowInsets; +HSPLandroidx/compose/foundation/layout/UnionInsetsConsumingModifier;->equals(Ljava/lang/Object;)Z +Landroidx/compose/foundation/layout/UnspecifiedConstraintsElement; +HSPLandroidx/compose/foundation/layout/UnspecifiedConstraintsElement;->(FF)V +HSPLandroidx/compose/foundation/layout/UnspecifiedConstraintsElement;->(FFLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/layout/UnspecifiedConstraintsElement;->create()Landroidx/compose/foundation/layout/UnspecifiedConstraintsNode; +HSPLandroidx/compose/foundation/layout/UnspecifiedConstraintsElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/foundation/layout/UnspecifiedConstraintsElement;->equals(Ljava/lang/Object;)Z +Landroidx/compose/foundation/layout/UnspecifiedConstraintsNode; +HSPLandroidx/compose/foundation/layout/UnspecifiedConstraintsNode;->(FF)V +HSPLandroidx/compose/foundation/layout/UnspecifiedConstraintsNode;->(FFLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/layout/UnspecifiedConstraintsNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; +Landroidx/compose/foundation/layout/UnspecifiedConstraintsNode$measure$1; +HSPLandroidx/compose/foundation/layout/UnspecifiedConstraintsNode$measure$1;->(Landroidx/compose/ui/layout/Placeable;)V +HSPLandroidx/compose/foundation/layout/UnspecifiedConstraintsNode$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/foundation/layout/UnspecifiedConstraintsNode$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/layout/ValueInsets; +HSPLandroidx/compose/foundation/layout/ValueInsets;->(Landroidx/compose/foundation/layout/InsetsValues;Ljava/lang/String;)V +HSPLandroidx/compose/foundation/layout/ValueInsets;->setValue$foundation_layout_release(Landroidx/compose/foundation/layout/InsetsValues;)V +Landroidx/compose/foundation/layout/WindowInsets; +HSPLandroidx/compose/foundation/layout/WindowInsets;->()V +Landroidx/compose/foundation/layout/WindowInsets$Companion; +HSPLandroidx/compose/foundation/layout/WindowInsets$Companion;->()V +HSPLandroidx/compose/foundation/layout/WindowInsets$Companion;->()V +Landroidx/compose/foundation/layout/WindowInsetsHolder; +HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->()V +HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->(Landroidx/core/view/WindowInsetsCompat;Landroid/view/View;)V +HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->(Landroidx/core/view/WindowInsetsCompat;Landroid/view/View;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->access$getViewMap$cp()Ljava/util/WeakHashMap; +HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->decrementAccessors(Landroid/view/View;)V +HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->getConsumes()Z +HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->getDisplayCutout()Landroidx/compose/foundation/layout/AndroidWindowInsets; +HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->getIme()Landroidx/compose/foundation/layout/AndroidWindowInsets; +HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->getNavigationBars()Landroidx/compose/foundation/layout/AndroidWindowInsets; +HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->getStatusBars()Landroidx/compose/foundation/layout/AndroidWindowInsets; +HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->getSystemBars()Landroidx/compose/foundation/layout/AndroidWindowInsets; +HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->incrementAccessors(Landroid/view/View;)V +HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->update$default(Landroidx/compose/foundation/layout/WindowInsetsHolder;Landroidx/core/view/WindowInsetsCompat;IILjava/lang/Object;)V +HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->update(Landroidx/core/view/WindowInsetsCompat;I)V +HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->updateImeAnimationSource(Landroidx/core/view/WindowInsetsCompat;)V +HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->updateImeAnimationTarget(Landroidx/core/view/WindowInsetsCompat;)V +Landroidx/compose/foundation/layout/WindowInsetsHolder$Companion; +HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion;->()V +HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion;->access$systemInsets(Landroidx/compose/foundation/layout/WindowInsetsHolder$Companion;Landroidx/core/view/WindowInsetsCompat;ILjava/lang/String;)Landroidx/compose/foundation/layout/AndroidWindowInsets; +HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion;->access$valueInsetsIgnoringVisibility(Landroidx/compose/foundation/layout/WindowInsetsHolder$Companion;Landroidx/core/view/WindowInsetsCompat;ILjava/lang/String;)Landroidx/compose/foundation/layout/ValueInsets; +HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion;->current(Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/layout/WindowInsetsHolder; +HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion;->getOrCreateFor(Landroid/view/View;)Landroidx/compose/foundation/layout/WindowInsetsHolder; +HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion;->systemInsets(Landroidx/core/view/WindowInsetsCompat;ILjava/lang/String;)Landroidx/compose/foundation/layout/AndroidWindowInsets; +HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion;->valueInsetsIgnoringVisibility(Landroidx/core/view/WindowInsetsCompat;ILjava/lang/String;)Landroidx/compose/foundation/layout/ValueInsets; +Landroidx/compose/foundation/layout/WindowInsetsHolder$Companion$current$1; +HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion$current$1;->(Landroidx/compose/foundation/layout/WindowInsetsHolder;Landroid/view/View;)V +HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion$current$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult; +HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion$current$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/layout/WindowInsetsHolder$Companion$current$1$invoke$$inlined$onDispose$1; +HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion$current$1$invoke$$inlined$onDispose$1;->(Landroidx/compose/foundation/layout/WindowInsetsHolder;Landroid/view/View;)V +HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion$current$1$invoke$$inlined$onDispose$1;->dispose()V +Landroidx/compose/foundation/layout/WindowInsetsKt; +HSPLandroidx/compose/foundation/layout/WindowInsetsKt;->WindowInsets(IIII)Landroidx/compose/foundation/layout/WindowInsets; +HSPLandroidx/compose/foundation/layout/WindowInsetsKt;->WindowInsets-a9UjIt4$default(FFFFILjava/lang/Object;)Landroidx/compose/foundation/layout/WindowInsets; +HSPLandroidx/compose/foundation/layout/WindowInsetsKt;->WindowInsets-a9UjIt4(FFFF)Landroidx/compose/foundation/layout/WindowInsets; +HSPLandroidx/compose/foundation/layout/WindowInsetsKt;->add(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/foundation/layout/WindowInsets;)Landroidx/compose/foundation/layout/WindowInsets; +HSPLandroidx/compose/foundation/layout/WindowInsetsKt;->asPaddingValues(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/layout/PaddingValues; +HSPLandroidx/compose/foundation/layout/WindowInsetsKt;->asPaddingValues(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/ui/unit/Density;)Landroidx/compose/foundation/layout/PaddingValues; +HSPLandroidx/compose/foundation/layout/WindowInsetsKt;->exclude(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/foundation/layout/WindowInsets;)Landroidx/compose/foundation/layout/WindowInsets; +HSPLandroidx/compose/foundation/layout/WindowInsetsKt;->only-bOOhFvg(Landroidx/compose/foundation/layout/WindowInsets;I)Landroidx/compose/foundation/layout/WindowInsets; +HSPLandroidx/compose/foundation/layout/WindowInsetsKt;->union(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/foundation/layout/WindowInsets;)Landroidx/compose/foundation/layout/WindowInsets; +Landroidx/compose/foundation/layout/WindowInsetsPaddingKt; +HSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt;->()V +HSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt;->consumeWindowInsets(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/layout/WindowInsets;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt;->getModifierLocalConsumedWindowInsets()Landroidx/compose/ui/modifier/ProvidableModifierLocal; +HSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt;->onConsumedWindowInsetsChanged(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt;->windowInsetsPadding(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/layout/WindowInsets;)Landroidx/compose/ui/Modifier; +Landroidx/compose/foundation/layout/WindowInsetsPaddingKt$ModifierLocalConsumedWindowInsets$1; +HSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt$ModifierLocalConsumedWindowInsets$1;->()V +HSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt$ModifierLocalConsumedWindowInsets$1;->()V +HSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt$ModifierLocalConsumedWindowInsets$1;->invoke()Landroidx/compose/foundation/layout/WindowInsets; +HSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt$ModifierLocalConsumedWindowInsets$1;->invoke()Ljava/lang/Object; +Landroidx/compose/foundation/layout/WindowInsetsSides; +HSPLandroidx/compose/foundation/layout/WindowInsetsSides;->()V +HSPLandroidx/compose/foundation/layout/WindowInsetsSides;->access$getAllowLeftInLtr$cp()I +HSPLandroidx/compose/foundation/layout/WindowInsetsSides;->access$getAllowRightInLtr$cp()I +HSPLandroidx/compose/foundation/layout/WindowInsetsSides;->access$getBottom$cp()I +HSPLandroidx/compose/foundation/layout/WindowInsetsSides;->access$getHorizontal$cp()I +HSPLandroidx/compose/foundation/layout/WindowInsetsSides;->access$getTop$cp()I +HSPLandroidx/compose/foundation/layout/WindowInsetsSides;->constructor-impl(I)I +HSPLandroidx/compose/foundation/layout/WindowInsetsSides;->equals-impl0(II)Z +HSPLandroidx/compose/foundation/layout/WindowInsetsSides;->hasAny-bkgdKaI$foundation_layout_release(II)Z +HSPLandroidx/compose/foundation/layout/WindowInsetsSides;->plus-gK_yJZ4(II)I +Landroidx/compose/foundation/layout/WindowInsetsSides$Companion; +HSPLandroidx/compose/foundation/layout/WindowInsetsSides$Companion;->()V +HSPLandroidx/compose/foundation/layout/WindowInsetsSides$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/layout/WindowInsetsSides$Companion;->getAllowLeftInLtr-JoeWqyM$foundation_layout_release()I +HSPLandroidx/compose/foundation/layout/WindowInsetsSides$Companion;->getAllowRightInLtr-JoeWqyM$foundation_layout_release()I +HSPLandroidx/compose/foundation/layout/WindowInsetsSides$Companion;->getBottom-JoeWqyM()I +HSPLandroidx/compose/foundation/layout/WindowInsetsSides$Companion;->getHorizontal-JoeWqyM()I +HSPLandroidx/compose/foundation/layout/WindowInsetsSides$Companion;->getTop-JoeWqyM()I +Landroidx/compose/foundation/layout/WindowInsets_androidKt; +HSPLandroidx/compose/foundation/layout/WindowInsets_androidKt;->ValueInsets(Landroidx/core/graphics/Insets;Ljava/lang/String;)Landroidx/compose/foundation/layout/ValueInsets; +HSPLandroidx/compose/foundation/layout/WindowInsets_androidKt;->getDisplayCutout(Landroidx/compose/foundation/layout/WindowInsets$Companion;Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/layout/WindowInsets; +HSPLandroidx/compose/foundation/layout/WindowInsets_androidKt;->getIme(Landroidx/compose/foundation/layout/WindowInsets$Companion;Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/layout/WindowInsets; +HSPLandroidx/compose/foundation/layout/WindowInsets_androidKt;->getNavigationBars(Landroidx/compose/foundation/layout/WindowInsets$Companion;Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/layout/WindowInsets; +HSPLandroidx/compose/foundation/layout/WindowInsets_androidKt;->getStatusBars(Landroidx/compose/foundation/layout/WindowInsets$Companion;Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/layout/WindowInsets; +HSPLandroidx/compose/foundation/layout/WindowInsets_androidKt;->getSystemBars(Landroidx/compose/foundation/layout/WindowInsets$Companion;Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/layout/WindowInsets; +HSPLandroidx/compose/foundation/layout/WindowInsets_androidKt;->toInsetsValues(Landroidx/core/graphics/Insets;)Landroidx/compose/foundation/layout/InsetsValues; +Landroidx/compose/foundation/layout/WrapContentElement; +HSPLandroidx/compose/foundation/layout/WrapContentElement;->()V +HSPLandroidx/compose/foundation/layout/WrapContentElement;->(Landroidx/compose/foundation/layout/Direction;ZLkotlin/jvm/functions/Function2;Ljava/lang/Object;Ljava/lang/String;)V +HSPLandroidx/compose/foundation/layout/WrapContentElement;->create()Landroidx/compose/foundation/layout/WrapContentNode; +HSPLandroidx/compose/foundation/layout/WrapContentElement;->create()Landroidx/compose/ui/Modifier$Node; +Landroidx/compose/foundation/layout/WrapContentElement$Companion; +HSPLandroidx/compose/foundation/layout/WrapContentElement$Companion;->()V +HSPLandroidx/compose/foundation/layout/WrapContentElement$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/layout/WrapContentElement$Companion;->height(Landroidx/compose/ui/Alignment$Vertical;Z)Landroidx/compose/foundation/layout/WrapContentElement; +HSPLandroidx/compose/foundation/layout/WrapContentElement$Companion;->size(Landroidx/compose/ui/Alignment;Z)Landroidx/compose/foundation/layout/WrapContentElement; +HSPLandroidx/compose/foundation/layout/WrapContentElement$Companion;->width(Landroidx/compose/ui/Alignment$Horizontal;Z)Landroidx/compose/foundation/layout/WrapContentElement; +Landroidx/compose/foundation/layout/WrapContentElement$Companion$height$1; +HSPLandroidx/compose/foundation/layout/WrapContentElement$Companion$height$1;->(Landroidx/compose/ui/Alignment$Vertical;)V +Landroidx/compose/foundation/layout/WrapContentElement$Companion$size$1; +HSPLandroidx/compose/foundation/layout/WrapContentElement$Companion$size$1;->(Landroidx/compose/ui/Alignment;)V +HSPLandroidx/compose/foundation/layout/WrapContentElement$Companion$size$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/layout/WrapContentElement$Companion$size$1;->invoke-5SAbXVA(JLandroidx/compose/ui/unit/LayoutDirection;)J +Landroidx/compose/foundation/layout/WrapContentElement$Companion$width$1; +HSPLandroidx/compose/foundation/layout/WrapContentElement$Companion$width$1;->(Landroidx/compose/ui/Alignment$Horizontal;)V +Landroidx/compose/foundation/layout/WrapContentNode; +HSPLandroidx/compose/foundation/layout/WrapContentNode;->(Landroidx/compose/foundation/layout/Direction;ZLkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/foundation/layout/WrapContentNode;->getAlignmentCallback()Lkotlin/jvm/functions/Function2; +HSPLandroidx/compose/foundation/layout/WrapContentNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; +Landroidx/compose/foundation/layout/WrapContentNode$measure$1; +HSPLandroidx/compose/foundation/layout/WrapContentNode$measure$1;->(Landroidx/compose/foundation/layout/WrapContentNode;ILandroidx/compose/ui/layout/Placeable;ILandroidx/compose/ui/layout/MeasureScope;)V +HSPLandroidx/compose/foundation/layout/WrapContentNode$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/foundation/layout/WrapContentNode$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/lazy/EmptyLazyListLayoutInfo; +HSPLandroidx/compose/foundation/lazy/EmptyLazyListLayoutInfo;->()V +HSPLandroidx/compose/foundation/lazy/EmptyLazyListLayoutInfo;->()V +Landroidx/compose/foundation/lazy/LazyDslKt; +HSPLandroidx/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 +Landroidx/compose/foundation/lazy/LazyItemScope; +Landroidx/compose/foundation/lazy/LazyItemScopeImpl; +HSPLandroidx/compose/foundation/lazy/LazyItemScopeImpl;->()V +HSPLandroidx/compose/foundation/lazy/LazyItemScopeImpl;->setMaxSize(II)V +Landroidx/compose/foundation/lazy/LazyLayoutSemanticStateKt; +HSPLandroidx/compose/foundation/lazy/LazyLayoutSemanticStateKt;->LazyLayoutSemanticState(Landroidx/compose/foundation/lazy/LazyListState;Z)Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticState; +Landroidx/compose/foundation/lazy/LazyLayoutSemanticStateKt$LazyLayoutSemanticState$1; +HSPLandroidx/compose/foundation/lazy/LazyLayoutSemanticStateKt$LazyLayoutSemanticState$1;->(Landroidx/compose/foundation/lazy/LazyListState;Z)V +HSPLandroidx/compose/foundation/lazy/LazyLayoutSemanticStateKt$LazyLayoutSemanticState$1;->collectionInfo()Landroidx/compose/ui/semantics/CollectionInfo; +HSPLandroidx/compose/foundation/lazy/LazyLayoutSemanticStateKt$LazyLayoutSemanticState$1;->getCanScrollForward()Z +HSPLandroidx/compose/foundation/lazy/LazyLayoutSemanticStateKt$LazyLayoutSemanticState$1;->getCurrentPosition()F +Landroidx/compose/foundation/lazy/LazyListAnimateScrollScope; +HSPLandroidx/compose/foundation/lazy/LazyListAnimateScrollScope;->(Landroidx/compose/foundation/lazy/LazyListState;)V +Landroidx/compose/foundation/lazy/LazyListBeyondBoundsModifierKt; +HSPLandroidx/compose/foundation/lazy/LazyListBeyondBoundsModifierKt;->lazyListBeyondBoundsModifier(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/LazyListState;IZLandroidx/compose/foundation/gestures/Orientation;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier; +Landroidx/compose/foundation/lazy/LazyListBeyondBoundsState; +HSPLandroidx/compose/foundation/lazy/LazyListBeyondBoundsState;->(Landroidx/compose/foundation/lazy/LazyListState;I)V +Landroidx/compose/foundation/lazy/LazyListInterval; +HSPLandroidx/compose/foundation/lazy/LazyListInterval;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function4;)V +HSPLandroidx/compose/foundation/lazy/LazyListInterval;->getItem()Lkotlin/jvm/functions/Function4; +HSPLandroidx/compose/foundation/lazy/LazyListInterval;->getKey()Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/foundation/lazy/LazyListInterval;->getType()Lkotlin/jvm/functions/Function1; +Landroidx/compose/foundation/lazy/LazyListIntervalContent; +HSPLandroidx/compose/foundation/lazy/LazyListIntervalContent;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/foundation/lazy/LazyListIntervalContent;->getHeaderIndexes()Ljava/util/List; +HSPLandroidx/compose/foundation/lazy/LazyListIntervalContent;->getIntervals()Landroidx/compose/foundation/lazy/layout/IntervalList; +HSPLandroidx/compose/foundation/lazy/LazyListIntervalContent;->getIntervals()Landroidx/compose/foundation/lazy/layout/MutableIntervalList; +HSPLandroidx/compose/foundation/lazy/LazyListIntervalContent;->item(Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function3;)V +HSPLandroidx/compose/foundation/lazy/LazyListIntervalContent;->items(ILkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function4;)V +Landroidx/compose/foundation/lazy/LazyListIntervalContent$item$1; +HSPLandroidx/compose/foundation/lazy/LazyListIntervalContent$item$1;->(Ljava/lang/Object;)V +HSPLandroidx/compose/foundation/lazy/LazyListIntervalContent$item$1;->invoke(I)Ljava/lang/Object; +HSPLandroidx/compose/foundation/lazy/LazyListIntervalContent$item$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/lazy/LazyListIntervalContent$item$2; +HSPLandroidx/compose/foundation/lazy/LazyListIntervalContent$item$2;->(Ljava/lang/Object;)V +HSPLandroidx/compose/foundation/lazy/LazyListIntervalContent$item$2;->invoke(I)Ljava/lang/Object; +HSPLandroidx/compose/foundation/lazy/LazyListIntervalContent$item$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/lazy/LazyListIntervalContent$item$3; +HSPLandroidx/compose/foundation/lazy/LazyListIntervalContent$item$3;->(Lkotlin/jvm/functions/Function3;)V +HSPLandroidx/compose/foundation/lazy/LazyListIntervalContent$item$3;->invoke(Landroidx/compose/foundation/lazy/LazyItemScope;ILandroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/foundation/lazy/LazyListIntervalContent$item$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/lazy/LazyListItemInfo; +Landroidx/compose/foundation/lazy/LazyListItemPlacementAnimator; +HSPLandroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;->()V +HSPLandroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;->getHasAnimations(Landroidx/compose/foundation/lazy/LazyListMeasuredItem;)Z +HSPLandroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;->getNode(Ljava/lang/Object;)Landroidx/compose/foundation/lazy/layout/LazyLayoutAnimateItemModifierNode; +HSPLandroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;->onMeasured(IIILjava/util/List;Landroidx/compose/foundation/lazy/LazyListMeasuredItemProvider;Z)V +HSPLandroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;->reset()V +Landroidx/compose/foundation/lazy/LazyListItemProvider; +Landroidx/compose/foundation/lazy/LazyListItemProviderImpl; +HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->(Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/lazy/LazyListIntervalContent;Landroidx/compose/foundation/lazy/LazyItemScopeImpl;Landroidx/compose/foundation/lazy/layout/LazyLayoutKeyIndexMap;)V +HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->Item(ILjava/lang/Object;Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->access$getIntervalContent$p(Landroidx/compose/foundation/lazy/LazyListItemProviderImpl;)Landroidx/compose/foundation/lazy/LazyListIntervalContent; +HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getContentType(I)Ljava/lang/Object; +HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getHeaderIndexes()Ljava/util/List; +HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getIndex(Ljava/lang/Object;)I +HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getItemCount()I +HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getItemScope()Landroidx/compose/foundation/lazy/LazyItemScopeImpl; +HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getKey(I)Ljava/lang/Object; +HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getKeyIndexMap()Landroidx/compose/foundation/lazy/layout/LazyLayoutKeyIndexMap; +Landroidx/compose/foundation/lazy/LazyListItemProviderImpl$Item$1; +HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl$Item$1;->(Landroidx/compose/foundation/lazy/LazyListItemProviderImpl;I)V +HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl$Item$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl$Item$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/lazy/LazyListItemProviderKt; +HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt;->rememberLazyListItemProviderLambda(Landroidx/compose/foundation/lazy/LazyListState;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;I)Lkotlin/jvm/functions/Function0; +Landroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProviderLambda$1$1; +HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProviderLambda$1$1;->(Ljava/lang/Object;)V +HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProviderLambda$1$1;->get()Ljava/lang/Object; +Landroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProviderLambda$1$intervalContentState$1; +HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProviderLambda$1$intervalContentState$1;->(Landroidx/compose/runtime/State;)V +HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProviderLambda$1$intervalContentState$1;->invoke()Landroidx/compose/foundation/lazy/LazyListIntervalContent; +HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProviderLambda$1$intervalContentState$1;->invoke()Ljava/lang/Object; +Landroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProviderLambda$1$itemProviderState$1; +HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProviderLambda$1$itemProviderState$1;->(Landroidx/compose/runtime/State;Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/lazy/LazyItemScopeImpl;)V +HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProviderLambda$1$itemProviderState$1;->invoke()Landroidx/compose/foundation/lazy/LazyListItemProviderImpl; +HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProviderLambda$1$itemProviderState$1;->invoke()Ljava/lang/Object; +Landroidx/compose/foundation/lazy/LazyListKt; +HSPLandroidx/compose/foundation/lazy/LazyListKt;->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 +HSPLandroidx/compose/foundation/lazy/LazyListKt;->ScrollPositionUpdater(Lkotlin/jvm/functions/Function0;Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/foundation/lazy/LazyListKt;->rememberLazyListMeasurePolicy(Lkotlin/jvm/functions/Function0;Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/layout/PaddingValues;ZZILandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/ui/Alignment$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/runtime/Composer;II)Lkotlin/jvm/functions/Function2; +Landroidx/compose/foundation/lazy/LazyListKt$ScrollPositionUpdater$1; +HSPLandroidx/compose/foundation/lazy/LazyListKt$ScrollPositionUpdater$1;->(Lkotlin/jvm/functions/Function0;Landroidx/compose/foundation/lazy/LazyListState;I)V +Landroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1; +HSPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1;->(ZLandroidx/compose/foundation/layout/PaddingValues;ZLandroidx/compose/foundation/lazy/LazyListState;Lkotlin/jvm/functions/Function0;Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;ILandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/ui/Alignment$Vertical;)V +HSPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1;->invoke-0kLqBqw(Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScope;J)Landroidx/compose/foundation/lazy/LazyListMeasureResult; +Landroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$2; +HSPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$2;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScope;JII)V +HSPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$2;->invoke(IILkotlin/jvm/functions/Function1;)Landroidx/compose/ui/layout/MeasureResult; +HSPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1; +HSPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1;->(JZLandroidx/compose/foundation/lazy/LazyListItemProvider;Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScope;IILandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/ui/Alignment$Vertical;ZIIJ)V +HSPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1;->createItem(ILjava/lang/Object;Ljava/lang/Object;Ljava/util/List;)Landroidx/compose/foundation/lazy/LazyListMeasuredItem; +Landroidx/compose/foundation/lazy/LazyListLayoutInfo; +Landroidx/compose/foundation/lazy/LazyListMeasureKt; +HSPLandroidx/compose/foundation/lazy/LazyListMeasureKt;->calculateItemsOffsets$reverseAware(IZI)I +HSPLandroidx/compose/foundation/lazy/LazyListMeasureKt;->calculateItemsOffsets(Ljava/util/List;Ljava/util/List;Ljava/util/List;IIIIIZLandroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;ZLandroidx/compose/ui/unit/Density;)Ljava/util/List; +HSPLandroidx/compose/foundation/lazy/LazyListMeasureKt;->createItemsAfterList(Ljava/util/List;Landroidx/compose/foundation/lazy/LazyListMeasuredItemProvider;IILjava/util/List;)Ljava/util/List; +HSPLandroidx/compose/foundation/lazy/LazyListMeasureKt;->createItemsBeforeList(ILandroidx/compose/foundation/lazy/LazyListMeasuredItemProvider;ILjava/util/List;)Ljava/util/List; +HSPLandroidx/compose/foundation/lazy/LazyListMeasureKt;->measureLazyList-CD5nmq0(ILandroidx/compose/foundation/lazy/LazyListMeasuredItemProvider;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;Lkotlin/jvm/functions/Function3;)Landroidx/compose/foundation/lazy/LazyListMeasureResult; +Landroidx/compose/foundation/lazy/LazyListMeasureKt$measureLazyList$5; +HSPLandroidx/compose/foundation/lazy/LazyListMeasureKt$measureLazyList$5;->(Ljava/util/List;Landroidx/compose/foundation/lazy/LazyListMeasuredItem;)V +HSPLandroidx/compose/foundation/lazy/LazyListMeasureKt$measureLazyList$5;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/foundation/lazy/LazyListMeasureKt$measureLazyList$5;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/lazy/LazyListMeasureResult; +HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->(Landroidx/compose/foundation/lazy/LazyListMeasuredItem;IZFLandroidx/compose/ui/layout/MeasureResult;Ljava/util/List;IIIZLandroidx/compose/foundation/gestures/Orientation;II)V +HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getAlignmentLines()Ljava/util/Map; +HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getCanScrollForward()Z +HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getConsumedScroll()F +HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getFirstVisibleItem()Landroidx/compose/foundation/lazy/LazyListMeasuredItem; +HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getFirstVisibleItemScrollOffset()I +HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getHeight()I +HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getReverseLayout()Z +HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getTotalItemsCount()I +HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getViewportEndOffset()I +HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getVisibleItemsInfo()Ljava/util/List; +HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getWidth()I +HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->placeChildren()V +Landroidx/compose/foundation/lazy/LazyListMeasuredItem; +HSPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->(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 +HSPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->(ILjava/util/List;ZLandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/ui/Alignment$Vertical;Landroidx/compose/ui/unit/LayoutDirection;ZIIIJLjava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->getCrossAxisSize()I +HSPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->getIndex()I +HSPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->getKey()Ljava/lang/Object; +HSPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->getMainAxisSize(Landroidx/compose/ui/layout/Placeable;)I +HSPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->getOffset()I +HSPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->getOffset-Bjo55l4(I)J +HSPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->getParentData(I)Ljava/lang/Object; +HSPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->getPlaceablesCount()I +HSPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->getSize()I +HSPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->getSizeWithSpacings()I +HSPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->place(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->position(III)V +Landroidx/compose/foundation/lazy/LazyListMeasuredItemProvider; +HSPLandroidx/compose/foundation/lazy/LazyListMeasuredItemProvider;->(JZLandroidx/compose/foundation/lazy/LazyListItemProvider;Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScope;)V +HSPLandroidx/compose/foundation/lazy/LazyListMeasuredItemProvider;->(JZLandroidx/compose/foundation/lazy/LazyListItemProvider;Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScope;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/lazy/LazyListMeasuredItemProvider;->getAndMeasure(I)Landroidx/compose/foundation/lazy/LazyListMeasuredItem; +HSPLandroidx/compose/foundation/lazy/LazyListMeasuredItemProvider;->getChildConstraints-msEJaDk()J +Landroidx/compose/foundation/lazy/LazyListScope; +HSPLandroidx/compose/foundation/lazy/LazyListScope;->item$default(Landroidx/compose/foundation/lazy/LazyListScope;Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function3;ILjava/lang/Object;)V +Landroidx/compose/foundation/lazy/LazyListScrollPosition; +HSPLandroidx/compose/foundation/lazy/LazyListScrollPosition;->(II)V +HSPLandroidx/compose/foundation/lazy/LazyListScrollPosition;->getIndex()I +HSPLandroidx/compose/foundation/lazy/LazyListScrollPosition;->getNearestRangeState()Landroidx/compose/foundation/lazy/layout/LazyLayoutNearestRangeState; +HSPLandroidx/compose/foundation/lazy/LazyListScrollPosition;->getScrollOffset()I +HSPLandroidx/compose/foundation/lazy/LazyListScrollPosition;->requestPosition(II)V +HSPLandroidx/compose/foundation/lazy/LazyListScrollPosition;->setIndex(I)V +HSPLandroidx/compose/foundation/lazy/LazyListScrollPosition;->setScrollOffset(I)V +HSPLandroidx/compose/foundation/lazy/LazyListScrollPosition;->update(II)V +HSPLandroidx/compose/foundation/lazy/LazyListScrollPosition;->updateFromMeasureResult(Landroidx/compose/foundation/lazy/LazyListMeasureResult;)V +HSPLandroidx/compose/foundation/lazy/LazyListScrollPosition;->updateScrollPositionIfTheFirstItemWasMoved(Landroidx/compose/foundation/lazy/LazyListItemProvider;I)I +Landroidx/compose/foundation/lazy/LazyListSemanticsKt; +HSPLandroidx/compose/foundation/lazy/LazyListSemanticsKt;->rememberLazyListSemanticState(Landroidx/compose/foundation/lazy/LazyListState;ZLandroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticState; +Landroidx/compose/foundation/lazy/LazyListState; +HSPLandroidx/compose/foundation/lazy/LazyListState;->()V +HSPLandroidx/compose/foundation/lazy/LazyListState;->(II)V +HSPLandroidx/compose/foundation/lazy/LazyListState;->access$setRemeasurement$p(Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/ui/layout/Remeasurement;)V +HSPLandroidx/compose/foundation/lazy/LazyListState;->applyMeasureResult$foundation_release(Landroidx/compose/foundation/lazy/LazyListMeasureResult;)V +HSPLandroidx/compose/foundation/lazy/LazyListState;->cancelPrefetchIfVisibleItemsChanged(Landroidx/compose/foundation/lazy/LazyListLayoutInfo;)V +HSPLandroidx/compose/foundation/lazy/LazyListState;->getAwaitLayoutModifier$foundation_release()Landroidx/compose/foundation/lazy/layout/AwaitFirstLayoutModifier; +HSPLandroidx/compose/foundation/lazy/LazyListState;->getBeyondBoundsInfo$foundation_release()Landroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsInfo; +HSPLandroidx/compose/foundation/lazy/LazyListState;->getCanScrollForward()Z +HSPLandroidx/compose/foundation/lazy/LazyListState;->getFirstVisibleItemIndex()I +HSPLandroidx/compose/foundation/lazy/LazyListState;->getFirstVisibleItemScrollOffset()I +HSPLandroidx/compose/foundation/lazy/LazyListState;->getInternalInteractionSource$foundation_release()Landroidx/compose/foundation/interaction/MutableInteractionSource; +HSPLandroidx/compose/foundation/lazy/LazyListState;->getLayoutInfo()Landroidx/compose/foundation/lazy/LazyListLayoutInfo; +HSPLandroidx/compose/foundation/lazy/LazyListState;->getNearestRange$foundation_release()Lkotlin/ranges/IntRange; +HSPLandroidx/compose/foundation/lazy/LazyListState;->getPinnedItems$foundation_release()Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList; +HSPLandroidx/compose/foundation/lazy/LazyListState;->getPlacementAnimator$foundation_release()Landroidx/compose/foundation/lazy/LazyListItemPlacementAnimator; +HSPLandroidx/compose/foundation/lazy/LazyListState;->getPrefetchState$foundation_release()Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState; +HSPLandroidx/compose/foundation/lazy/LazyListState;->getRemeasurementModifier$foundation_release()Landroidx/compose/ui/layout/RemeasurementModifier; +HSPLandroidx/compose/foundation/lazy/LazyListState;->getScrollToBeConsumed$foundation_release()F +HSPLandroidx/compose/foundation/lazy/LazyListState;->isScrollInProgress()Z +HSPLandroidx/compose/foundation/lazy/LazyListState;->scroll(Landroidx/compose/foundation/MutatePriority;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/lazy/LazyListState;->scrollToItem(IILkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/lazy/LazyListState;->setCanScrollBackward(Z)V +HSPLandroidx/compose/foundation/lazy/LazyListState;->setCanScrollForward(Z)V +HSPLandroidx/compose/foundation/lazy/LazyListState;->setDensity$foundation_release(Landroidx/compose/ui/unit/Density;)V +HSPLandroidx/compose/foundation/lazy/LazyListState;->setPremeasureConstraints-BRTryo0$foundation_release(J)V +HSPLandroidx/compose/foundation/lazy/LazyListState;->snapToItemIndexInternal$foundation_release(II)V +HSPLandroidx/compose/foundation/lazy/LazyListState;->updateScrollPositionIfTheFirstItemWasMoved$foundation_release$default(Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/lazy/LazyListItemProvider;IILjava/lang/Object;)I +HSPLandroidx/compose/foundation/lazy/LazyListState;->updateScrollPositionIfTheFirstItemWasMoved$foundation_release(Landroidx/compose/foundation/lazy/LazyListItemProvider;I)I +Landroidx/compose/foundation/lazy/LazyListState$Companion; +HSPLandroidx/compose/foundation/lazy/LazyListState$Companion;->()V +HSPLandroidx/compose/foundation/lazy/LazyListState$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/foundation/lazy/LazyListState$Companion$Saver$1; +HSPLandroidx/compose/foundation/lazy/LazyListState$Companion$Saver$1;->()V +HSPLandroidx/compose/foundation/lazy/LazyListState$Companion$Saver$1;->()V +Landroidx/compose/foundation/lazy/LazyListState$Companion$Saver$2; +HSPLandroidx/compose/foundation/lazy/LazyListState$Companion$Saver$2;->()V +HSPLandroidx/compose/foundation/lazy/LazyListState$Companion$Saver$2;->()V +Landroidx/compose/foundation/lazy/LazyListState$remeasurementModifier$1; +HSPLandroidx/compose/foundation/lazy/LazyListState$remeasurementModifier$1;->(Landroidx/compose/foundation/lazy/LazyListState;)V +HSPLandroidx/compose/foundation/lazy/LazyListState$remeasurementModifier$1;->onRemeasurementAvailable(Landroidx/compose/ui/layout/Remeasurement;)V +Landroidx/compose/foundation/lazy/LazyListState$scroll$1; +HSPLandroidx/compose/foundation/lazy/LazyListState$scroll$1;->(Landroidx/compose/foundation/lazy/LazyListState;Lkotlin/coroutines/Continuation;)V +Landroidx/compose/foundation/lazy/LazyListState$scrollToItem$2; +HSPLandroidx/compose/foundation/lazy/LazyListState$scrollToItem$2;->(Landroidx/compose/foundation/lazy/LazyListState;IILkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/lazy/LazyListState$scrollToItem$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/lazy/LazyListState$scrollToItem$2;->invoke(Landroidx/compose/foundation/gestures/ScrollScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/lazy/LazyListState$scrollToItem$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/lazy/LazyListState$scrollToItem$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/lazy/LazyListState$scrollableState$1; +HSPLandroidx/compose/foundation/lazy/LazyListState$scrollableState$1;->(Landroidx/compose/foundation/lazy/LazyListState;)V +Landroidx/compose/foundation/lazy/layout/AwaitFirstLayoutModifier; +HSPLandroidx/compose/foundation/lazy/layout/AwaitFirstLayoutModifier;->()V +HSPLandroidx/compose/foundation/lazy/layout/AwaitFirstLayoutModifier;->onGloballyPositioned(Landroidx/compose/ui/layout/LayoutCoordinates;)V +HSPLandroidx/compose/foundation/lazy/layout/AwaitFirstLayoutModifier;->waitForFirstLayout(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/compose/foundation/lazy/layout/AwaitFirstLayoutModifier$waitForFirstLayout$1; +HSPLandroidx/compose/foundation/lazy/layout/AwaitFirstLayoutModifier$waitForFirstLayout$1;->(Landroidx/compose/foundation/lazy/layout/AwaitFirstLayoutModifier;Lkotlin/coroutines/Continuation;)V +Landroidx/compose/foundation/lazy/layout/DefaultLazyKey; +HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey;->()V +HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey;->(I)V +HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey;->hashCode()I +Landroidx/compose/foundation/lazy/layout/DefaultLazyKey$Companion; +HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey$Companion;->()V +HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/foundation/lazy/layout/DefaultLazyKey$Companion$CREATOR$1; +HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey$Companion$CREATOR$1;->()V +Landroidx/compose/foundation/lazy/layout/IntervalList; +Landroidx/compose/foundation/lazy/layout/IntervalList$Interval; +HSPLandroidx/compose/foundation/lazy/layout/IntervalList$Interval;->()V +HSPLandroidx/compose/foundation/lazy/layout/IntervalList$Interval;->(IILjava/lang/Object;)V +HSPLandroidx/compose/foundation/lazy/layout/IntervalList$Interval;->getSize()I +HSPLandroidx/compose/foundation/lazy/layout/IntervalList$Interval;->getStartIndex()I +HSPLandroidx/compose/foundation/lazy/layout/IntervalList$Interval;->getValue()Ljava/lang/Object; +Landroidx/compose/foundation/lazy/layout/IntervalListKt; +HSPLandroidx/compose/foundation/lazy/layout/IntervalListKt;->access$binarySearch(Landroidx/compose/runtime/collection/MutableVector;I)I +HSPLandroidx/compose/foundation/lazy/layout/IntervalListKt;->binarySearch(Landroidx/compose/runtime/collection/MutableVector;I)I +Landroidx/compose/foundation/lazy/layout/LazyAnimateScrollScope; +Landroidx/compose/foundation/lazy/layout/LazyLayoutAnimateItemModifierNode; +Landroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsInfo; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsInfo;->()V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsInfo;->hasIntervals()Z +Landroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsInfo$Interval; +Landroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsModifierLocal; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsModifierLocal;->()V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsModifierLocal;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsState;Landroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsInfo;ZLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/foundation/gestures/Orientation;)V +Landroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsModifierLocal$Companion; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsModifierLocal$Companion;->()V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsModifierLocal$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsModifierLocal$Companion$emptyBeyondBoundsScope$1; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsModifierLocal$Companion$emptyBeyondBoundsScope$1;->()V +Landroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsState; +Landroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsStateKt; +HSPLandroidx/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; +Landroidx/compose/foundation/lazy/layout/LazyLayoutIntervalContent; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutIntervalContent;->()V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutIntervalContent;->()V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutIntervalContent;->getContentType(I)Ljava/lang/Object; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutIntervalContent;->getItemCount()I +Landroidx/compose/foundation/lazy/layout/LazyLayoutIntervalContent$Interval; +Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;->(Landroidx/compose/runtime/saveable/SaveableStateHolder;Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;->access$getSaveableStateHolder$p(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;)Landroidx/compose/runtime/saveable/SaveableStateHolder; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;->getContent(ILjava/lang/Object;Ljava/lang/Object;)Lkotlin/jvm/functions/Function2; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;->getContentType(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;->getItemProvider()Lkotlin/jvm/functions/Function0; +Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;ILjava/lang/Object;Ljava/lang/Object;)V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;->access$set_content$p(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;->createContentLambda()Lkotlin/jvm/functions/Function2; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;->getContent()Lkotlin/jvm/functions/Function2; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;->getContentType()Ljava/lang/Object; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;->getIndex()I +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;->getKey()Ljava/lang/Object; +Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;)V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$2; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$2;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;)V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$2;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$2$invoke$$inlined$onDispose$1; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$2$invoke$$inlined$onDispose$1;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;)V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$2$invoke$$inlined$onDispose$1;->dispose()V +Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactoryKt; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactoryKt;->SkippableItem-JVlU9Rs(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;Ljava/lang/Object;ILjava/lang/Object;Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactoryKt;->access$SkippableItem-JVlU9Rs(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;Ljava/lang/Object;ILjava/lang/Object;Landroidx/compose/runtime/Composer;I)V +Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactoryKt$SkippableItem$1; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactoryKt$SkippableItem$1;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;ILjava/lang/Object;I)V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactoryKt$SkippableItem$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactoryKt$SkippableItem$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider; +Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProviderKt; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemProviderKt;->findIndexByKey(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;Ljava/lang/Object;I)I +Landroidx/compose/foundation/lazy/layout/LazyLayoutItemReusePolicy; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemReusePolicy;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;)V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemReusePolicy;->getSlotsToRetain(Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;)V +Landroidx/compose/foundation/lazy/layout/LazyLayoutKeyIndexMap; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKeyIndexMap;->()V +Landroidx/compose/foundation/lazy/layout/LazyLayoutKeyIndexMap$Empty; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKeyIndexMap$Empty;->()V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKeyIndexMap$Empty;->()V +Landroidx/compose/foundation/lazy/layout/LazyLayoutKt; +HSPLandroidx/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 +Landroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;ILandroidx/compose/runtime/State;)V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3;->invoke(Landroidx/compose/runtime/saveable/SaveableStateHolder;Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$2$1; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$2$1;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$2$1;->invoke-0kLqBqw(Landroidx/compose/ui/layout/SubcomposeMeasureScope;J)Landroidx/compose/ui/layout/MeasureResult; +Landroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$itemContentFactory$1$1; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$itemContentFactory$1$1;->(Landroidx/compose/runtime/State;)V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$itemContentFactory$1$1;->invoke()Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$itemContentFactory$1$1;->invoke()Ljava/lang/Object; +Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScope; +Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Landroidx/compose/ui/layout/SubcomposeMeasureScope;)V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->layout(IILjava/util/Map;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/layout/MeasureResult; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->measure-0kLqBqw(IJ)Ljava/util/List; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->roundToPx-0680j_4(F)I +Landroidx/compose/foundation/lazy/layout/LazyLayoutNearestRangeState; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutNearestRangeState;->()V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutNearestRangeState;->(III)V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutNearestRangeState;->getValue()Ljava/lang/Object; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutNearestRangeState;->getValue()Lkotlin/ranges/IntRange; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutNearestRangeState;->update(I)V +Landroidx/compose/foundation/lazy/layout/LazyLayoutNearestRangeState$Companion; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutNearestRangeState$Companion;->()V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutNearestRangeState$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutNearestRangeState$Companion;->access$calculateNearestItemsRange(Landroidx/compose/foundation/lazy/layout/LazyLayoutNearestRangeState$Companion;III)Lkotlin/ranges/IntRange; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutNearestRangeState$Companion;->calculateNearestItemsRange(III)Lkotlin/ranges/IntRange; +Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;->(Ljava/lang/Object;Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;)V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;->getPinsCount()I +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;->get_parentPinnableContainer()Landroidx/compose/ui/layout/PinnableContainer; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;->onDisposed()V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;->setIndex(I)V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;->setParentPinnableContainer(Landroidx/compose/ui/layout/PinnableContainer;)V +Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItemKt; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItemKt;->LazyLayoutPinnableItem(Ljava/lang/Object;ILandroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V +Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItemKt$LazyLayoutPinnableItem$1$1; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItemKt$LazyLayoutPinnableItem$1$1;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;)V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItemKt$LazyLayoutPinnableItem$1$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItemKt$LazyLayoutPinnableItem$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItemKt$LazyLayoutPinnableItem$1$1$invoke$$inlined$onDispose$1; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItemKt$LazyLayoutPinnableItem$1$1$invoke$$inlined$onDispose$1;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;)V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItemKt$LazyLayoutPinnableItem$1$1$invoke$$inlined$onDispose$1;->dispose()V +Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;->()V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;->()V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;->(Ljava/util/List;)V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;->isEmpty()Z +Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList$PinnedItem; +Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;->()V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;->()V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;->setPrefetcher$foundation_release(Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState$Prefetcher;)V +Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState$PrefetchHandle; +Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState$Prefetcher; +Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->()V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Landroid/view/View;)V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->access$getFrameIntervalNs$cp()J +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->access$setFrameIntervalNs$cp(J)V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->onRemembered()V +Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$Companion; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$Companion;->()V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$Companion;->access$calculateFrameIntervalIfNeeded(Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$Companion;Landroid/view/View;)V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$Companion;->calculateFrameIntervalIfNeeded(Landroid/view/View;)V +Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$PrefetchRequest; +Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher_androidKt; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher_androidKt;->LazyLayoutPrefetcher(Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/runtime/Composer;I)V +Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticState; +Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt;->lazyLayoutSemantics(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function0;Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticState;Landroidx/compose/foundation/gestures/Orientation;ZZLandroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier; +Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$1; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$1;->(Lkotlin/jvm/functions/Function1;ZLandroidx/compose/ui/semantics/ScrollAxisRange;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/semantics/CollectionInfo;)V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$1;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$accessibilityScrollState$1; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$accessibilityScrollState$1;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticState;)V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$accessibilityScrollState$1;->invoke()Ljava/lang/Float; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$accessibilityScrollState$1;->invoke()Ljava/lang/Object; +Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$accessibilityScrollState$2; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$accessibilityScrollState$2;->(Lkotlin/jvm/functions/Function0;Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticState;)V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$accessibilityScrollState$2;->invoke()Ljava/lang/Float; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$accessibilityScrollState$2;->invoke()Ljava/lang/Object; +Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$indexForKeyMapping$1; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$indexForKeyMapping$1;->(Lkotlin/jvm/functions/Function0;)V +Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$scrollByAction$1; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$scrollByAction$1;->(ZLkotlinx/coroutines/CoroutineScope;Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticState;)V +Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$scrollToIndexAction$1; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$scrollToIndexAction$1;->(Lkotlin/jvm/functions/Function0;Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticState;)V +Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder; +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->()V +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->(Landroidx/compose/runtime/saveable/SaveableStateRegistry;)V +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->(Landroidx/compose/runtime/saveable/SaveableStateRegistry;Ljava/util/Map;)V +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->SaveableStateProvider(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->access$getPreviouslyComposedKeys$p(Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;)Ljava/util/Set; +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->canBeSaved(Ljava/lang/Object;)Z +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->consumeRestored(Ljava/lang/String;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->getWrappedHolder()Landroidx/compose/runtime/saveable/SaveableStateHolder; +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->performSave()Ljava/util/Map; +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->registerProvider(Ljava/lang/String;Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/saveable/SaveableStateRegistry$Entry; +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->setWrappedHolder(Landroidx/compose/runtime/saveable/SaveableStateHolder;)V +Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$1; +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$1;->(Landroidx/compose/runtime/saveable/SaveableStateRegistry;)V +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$1;->invoke(Ljava/lang/Object;)Ljava/lang/Boolean; +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion; +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion;->()V +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion;->saver(Landroidx/compose/runtime/saveable/SaveableStateRegistry;)Landroidx/compose/runtime/saveable/Saver; +Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion$saver$1; +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion$saver$1;->()V +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion$saver$1;->()V +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion$saver$1;->invoke(Landroidx/compose/runtime/saveable/SaverScope;Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;)Ljava/util/Map; +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion$saver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion$saver$2; +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion$saver$2;->(Landroidx/compose/runtime/saveable/SaveableStateRegistry;)V +Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$1; +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$1;->(Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;Ljava/lang/Object;)V +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult; +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$1$invoke$$inlined$onDispose$1; +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$1$invoke$$inlined$onDispose$1;->(Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;Ljava/lang/Object;)V +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$1$invoke$$inlined$onDispose$1;->dispose()V +Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$2; +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$2;->(Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;I)V +Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt; +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt;->LazySaveableStateHolderProvider(Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;I)V +Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt$LazySaveableStateHolderProvider$1; +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt$LazySaveableStateHolderProvider$1;->(Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;Lkotlin/jvm/functions/Function3;I)V +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt$LazySaveableStateHolderProvider$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt$LazySaveableStateHolderProvider$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt$LazySaveableStateHolderProvider$holder$1; +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt$LazySaveableStateHolderProvider$holder$1;->(Landroidx/compose/runtime/saveable/SaveableStateRegistry;)V +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt$LazySaveableStateHolderProvider$holder$1;->invoke()Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder; +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt$LazySaveableStateHolderProvider$holder$1;->invoke()Ljava/lang/Object; +Landroidx/compose/foundation/lazy/layout/Lazy_androidKt; +HSPLandroidx/compose/foundation/lazy/layout/Lazy_androidKt;->getDefaultLazyLayoutKey(I)Ljava/lang/Object; +Landroidx/compose/foundation/lazy/layout/MutableIntervalList; +HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->()V +HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->()V +HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->addInterval(ILjava/lang/Object;)V +HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->checkIndexBounds(I)V +HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->contains(Landroidx/compose/foundation/lazy/layout/IntervalList$Interval;I)Z +HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->forEach(IILkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->get(I)Landroidx/compose/foundation/lazy/layout/IntervalList$Interval; +HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->getIntervalForIndex(I)Landroidx/compose/foundation/lazy/layout/IntervalList$Interval; +HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->getSize()I +Landroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap; +HSPLandroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap;->(Lkotlin/ranges/IntRange;Landroidx/compose/foundation/lazy/layout/LazyLayoutIntervalContent;)V +HSPLandroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap;->access$getKeys$p(Landroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap;)[Ljava/lang/Object; +HSPLandroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap;->access$getKeysStartIndex$p(Landroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap;)I +HSPLandroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap;->getIndex(Ljava/lang/Object;)I +HSPLandroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap;->getKey(I)Ljava/lang/Object; +Landroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap$1$1; +HSPLandroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap$1$1;->(IILjava/util/HashMap;Landroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap;)V +HSPLandroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap$1$1;->invoke(Landroidx/compose/foundation/lazy/layout/IntervalList$Interval;)V +HSPLandroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/lazy/layout/StableValue; +HSPLandroidx/compose/foundation/lazy/layout/StableValue;->constructor-impl(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/relocation/BringIntoViewChildNode; +HSPLandroidx/compose/foundation/relocation/BringIntoViewChildNode;->()V +HSPLandroidx/compose/foundation/relocation/BringIntoViewChildNode;->getLayoutCoordinates()Landroidx/compose/ui/layout/LayoutCoordinates; +HSPLandroidx/compose/foundation/relocation/BringIntoViewChildNode;->getLocalParent()Landroidx/compose/foundation/relocation/BringIntoViewParent; +HSPLandroidx/compose/foundation/relocation/BringIntoViewChildNode;->getParent()Landroidx/compose/foundation/relocation/BringIntoViewParent; +HSPLandroidx/compose/foundation/relocation/BringIntoViewChildNode;->onPlaced(Landroidx/compose/ui/layout/LayoutCoordinates;)V +Landroidx/compose/foundation/relocation/BringIntoViewKt; +HSPLandroidx/compose/foundation/relocation/BringIntoViewKt;->()V +HSPLandroidx/compose/foundation/relocation/BringIntoViewKt;->getModifierLocalBringIntoViewParent()Landroidx/compose/ui/modifier/ProvidableModifierLocal; +Landroidx/compose/foundation/relocation/BringIntoViewKt$ModifierLocalBringIntoViewParent$1; +HSPLandroidx/compose/foundation/relocation/BringIntoViewKt$ModifierLocalBringIntoViewParent$1;->()V +HSPLandroidx/compose/foundation/relocation/BringIntoViewKt$ModifierLocalBringIntoViewParent$1;->()V +HSPLandroidx/compose/foundation/relocation/BringIntoViewKt$ModifierLocalBringIntoViewParent$1;->invoke()Landroidx/compose/foundation/relocation/BringIntoViewParent; +HSPLandroidx/compose/foundation/relocation/BringIntoViewKt$ModifierLocalBringIntoViewParent$1;->invoke()Ljava/lang/Object; +Landroidx/compose/foundation/relocation/BringIntoViewParent; +Landroidx/compose/foundation/relocation/BringIntoViewRequester; +HSPLandroidx/compose/foundation/relocation/BringIntoViewRequester;->bringIntoView$default(Landroidx/compose/foundation/relocation/BringIntoViewRequester;Landroidx/compose/ui/geometry/Rect;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/relocation/BringIntoViewRequesterElement; +HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterElement;->(Landroidx/compose/foundation/relocation/BringIntoViewRequester;)V +HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterElement;->create()Landroidx/compose/foundation/relocation/BringIntoViewRequesterNode; +HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterElement;->equals(Ljava/lang/Object;)Z +Landroidx/compose/foundation/relocation/BringIntoViewRequesterImpl; +HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterImpl;->()V +HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterImpl;->bringIntoView(Landroidx/compose/ui/geometry/Rect;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterImpl;->getModifiers()Landroidx/compose/runtime/collection/MutableVector; +Landroidx/compose/foundation/relocation/BringIntoViewRequesterImpl$bringIntoView$1; +HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterImpl$bringIntoView$1;->(Landroidx/compose/foundation/relocation/BringIntoViewRequesterImpl;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterImpl$bringIntoView$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/relocation/BringIntoViewRequesterKt; +HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterKt;->BringIntoViewRequester()Landroidx/compose/foundation/relocation/BringIntoViewRequester; +HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterKt;->bringIntoViewRequester(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/relocation/BringIntoViewRequester;)Landroidx/compose/ui/Modifier; +Landroidx/compose/foundation/relocation/BringIntoViewRequesterNode; +HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterNode;->(Landroidx/compose/foundation/relocation/BringIntoViewRequester;)V +HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterNode;->bringIntoView(Landroidx/compose/ui/geometry/Rect;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterNode;->disposeRequester()V +HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterNode;->onAttach()V +HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterNode;->onDetach()V +HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterNode;->updateRequester(Landroidx/compose/foundation/relocation/BringIntoViewRequester;)V +Landroidx/compose/foundation/relocation/BringIntoViewRequesterNode$bringIntoView$2; +HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterNode$bringIntoView$2;->(Landroidx/compose/ui/geometry/Rect;Landroidx/compose/foundation/relocation/BringIntoViewRequesterNode;)V +HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterNode$bringIntoView$2;->invoke()Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterNode$bringIntoView$2;->invoke()Ljava/lang/Object; +Landroidx/compose/foundation/relocation/BringIntoViewResponder; +Landroidx/compose/foundation/relocation/BringIntoViewResponderElement; +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderElement;->(Landroidx/compose/foundation/relocation/BringIntoViewResponder;)V +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderElement;->create()Landroidx/compose/foundation/relocation/BringIntoViewResponderNode; +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderElement;->equals(Ljava/lang/Object;)Z +Landroidx/compose/foundation/relocation/BringIntoViewResponderKt; +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderKt;->access$localRectOf(Landroidx/compose/ui/layout/LayoutCoordinates;Landroidx/compose/ui/layout/LayoutCoordinates;Landroidx/compose/ui/geometry/Rect;)Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderKt;->bringIntoViewResponder(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/relocation/BringIntoViewResponder;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderKt;->localRectOf(Landroidx/compose/ui/layout/LayoutCoordinates;Landroidx/compose/ui/layout/LayoutCoordinates;Landroidx/compose/ui/geometry/Rect;)Landroidx/compose/ui/geometry/Rect; +Landroidx/compose/foundation/relocation/BringIntoViewResponderNode; +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode;->(Landroidx/compose/foundation/relocation/BringIntoViewResponder;)V +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode;->access$bringChildIntoView$localRect(Landroidx/compose/foundation/relocation/BringIntoViewResponderNode;Landroidx/compose/ui/layout/LayoutCoordinates;Lkotlin/jvm/functions/Function0;)Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode;->bringChildIntoView$localRect(Landroidx/compose/foundation/relocation/BringIntoViewResponderNode;Landroidx/compose/ui/layout/LayoutCoordinates;Lkotlin/jvm/functions/Function0;)Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode;->bringChildIntoView(Landroidx/compose/ui/layout/LayoutCoordinates;Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode;->getProvidedValues()Landroidx/compose/ui/modifier/ModifierLocalMap; +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode;->getResponder()Landroidx/compose/foundation/relocation/BringIntoViewResponder; +Landroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2; +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2;->(Landroidx/compose/foundation/relocation/BringIntoViewResponderNode;Landroidx/compose/ui/layout/LayoutCoordinates;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2$1; +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2$1;->(Landroidx/compose/foundation/relocation/BringIntoViewResponderNode;Landroidx/compose/ui/layout/LayoutCoordinates;Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2$1$1; +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2$1$1;->(Landroidx/compose/foundation/relocation/BringIntoViewResponderNode;Landroidx/compose/ui/layout/LayoutCoordinates;Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2$1$1;->invoke()Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2$1$1;->invoke()Ljava/lang/Object; +Landroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2$2; +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2$2;->(Landroidx/compose/foundation/relocation/BringIntoViewResponderNode;Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$parentRect$1; +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$parentRect$1;->(Landroidx/compose/foundation/relocation/BringIntoViewResponderNode;Landroidx/compose/ui/layout/LayoutCoordinates;Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$parentRect$1;->invoke()Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$parentRect$1;->invoke()Ljava/lang/Object; +Landroidx/compose/foundation/relocation/BringIntoViewResponder_androidKt; +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponder_androidKt;->access$toRect(Landroidx/compose/ui/geometry/Rect;)Landroid/graphics/Rect; +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponder_androidKt;->defaultBringIntoViewParent(Landroidx/compose/ui/node/CompositionLocalConsumerModifierNode;)Landroidx/compose/foundation/relocation/BringIntoViewParent; +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponder_androidKt;->toRect(Landroidx/compose/ui/geometry/Rect;)Landroid/graphics/Rect; +Landroidx/compose/foundation/relocation/BringIntoViewResponder_androidKt$defaultBringIntoViewParent$1; +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponder_androidKt$defaultBringIntoViewParent$1;->(Landroidx/compose/ui/node/CompositionLocalConsumerModifierNode;)V +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponder_androidKt$defaultBringIntoViewParent$1;->bringChildIntoView(Landroidx/compose/ui/layout/LayoutCoordinates;Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/compose/foundation/selection/SelectableGroupKt; +HSPLandroidx/compose/foundation/selection/SelectableGroupKt;->selectableGroup(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; +Landroidx/compose/foundation/selection/SelectableGroupKt$selectableGroup$1; +HSPLandroidx/compose/foundation/selection/SelectableGroupKt$selectableGroup$1;->()V +HSPLandroidx/compose/foundation/selection/SelectableGroupKt$selectableGroup$1;->()V +HSPLandroidx/compose/foundation/selection/SelectableGroupKt$selectableGroup$1;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V +HSPLandroidx/compose/foundation/selection/SelectableGroupKt$selectableGroup$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/selection/SelectableKt; +HSPLandroidx/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; +Landroidx/compose/foundation/selection/SelectableKt$selectable$4$1; +HSPLandroidx/compose/foundation/selection/SelectableKt$selectable$4$1;->(Z)V +HSPLandroidx/compose/foundation/selection/SelectableKt$selectable$4$1;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V +HSPLandroidx/compose/foundation/selection/SelectableKt$selectable$4$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/shape/CornerBasedShape; +HSPLandroidx/compose/foundation/shape/CornerBasedShape;->()V +HSPLandroidx/compose/foundation/shape/CornerBasedShape;->(Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;)V +HSPLandroidx/compose/foundation/shape/CornerBasedShape;->copy$default(Landroidx/compose/foundation/shape/CornerBasedShape;Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;ILjava/lang/Object;)Landroidx/compose/foundation/shape/CornerBasedShape; +HSPLandroidx/compose/foundation/shape/CornerBasedShape;->createOutline-Pq9zytI(JLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;)Landroidx/compose/ui/graphics/Outline; +HSPLandroidx/compose/foundation/shape/CornerBasedShape;->getTopStart()Landroidx/compose/foundation/shape/CornerSize; +Landroidx/compose/foundation/shape/CornerSize; +Landroidx/compose/foundation/shape/CornerSizeKt; +HSPLandroidx/compose/foundation/shape/CornerSizeKt;->()V +HSPLandroidx/compose/foundation/shape/CornerSizeKt;->CornerSize(I)Landroidx/compose/foundation/shape/CornerSize; +HSPLandroidx/compose/foundation/shape/CornerSizeKt;->CornerSize-0680j_4(F)Landroidx/compose/foundation/shape/CornerSize; +Landroidx/compose/foundation/shape/CornerSizeKt$ZeroCornerSize$1; +HSPLandroidx/compose/foundation/shape/CornerSizeKt$ZeroCornerSize$1;->()V +Landroidx/compose/foundation/shape/DpCornerSize; +HSPLandroidx/compose/foundation/shape/DpCornerSize;->(F)V +HSPLandroidx/compose/foundation/shape/DpCornerSize;->(FLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/shape/DpCornerSize;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/foundation/shape/DpCornerSize;->toPx-TmRCtEA(JLandroidx/compose/ui/unit/Density;)F +Landroidx/compose/foundation/shape/PercentCornerSize; +HSPLandroidx/compose/foundation/shape/PercentCornerSize;->(F)V +HSPLandroidx/compose/foundation/shape/PercentCornerSize;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/foundation/shape/PercentCornerSize;->toPx-TmRCtEA(JLandroidx/compose/ui/unit/Density;)F +Landroidx/compose/foundation/shape/RoundedCornerShape; +HSPLandroidx/compose/foundation/shape/RoundedCornerShape;->()V +HSPLandroidx/compose/foundation/shape/RoundedCornerShape;->(Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;)V +HSPLandroidx/compose/foundation/shape/RoundedCornerShape;->copy(Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;)Landroidx/compose/foundation/shape/CornerBasedShape; +HSPLandroidx/compose/foundation/shape/RoundedCornerShape;->copy(Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;)Landroidx/compose/foundation/shape/RoundedCornerShape; +HSPLandroidx/compose/foundation/shape/RoundedCornerShape;->createOutline-LjSzlW0(JFFFFLandroidx/compose/ui/unit/LayoutDirection;)Landroidx/compose/ui/graphics/Outline; +HSPLandroidx/compose/foundation/shape/RoundedCornerShape;->equals(Ljava/lang/Object;)Z +Landroidx/compose/foundation/shape/RoundedCornerShapeKt; +HSPLandroidx/compose/foundation/shape/RoundedCornerShapeKt;->()V +HSPLandroidx/compose/foundation/shape/RoundedCornerShapeKt;->RoundedCornerShape(I)Landroidx/compose/foundation/shape/RoundedCornerShape; +HSPLandroidx/compose/foundation/shape/RoundedCornerShapeKt;->RoundedCornerShape(Landroidx/compose/foundation/shape/CornerSize;)Landroidx/compose/foundation/shape/RoundedCornerShape; +HSPLandroidx/compose/foundation/shape/RoundedCornerShapeKt;->RoundedCornerShape-0680j_4(F)Landroidx/compose/foundation/shape/RoundedCornerShape; +HSPLandroidx/compose/foundation/shape/RoundedCornerShapeKt;->RoundedCornerShape-a9UjIt4(FFFF)Landroidx/compose/foundation/shape/RoundedCornerShape; +HSPLandroidx/compose/foundation/shape/RoundedCornerShapeKt;->getCircleShape()Landroidx/compose/foundation/shape/RoundedCornerShape; +Landroidx/compose/foundation/text/AnnotatedStringResolveInlineContentKt; +HSPLandroidx/compose/foundation/text/AnnotatedStringResolveInlineContentKt;->()V +HSPLandroidx/compose/foundation/text/AnnotatedStringResolveInlineContentKt;->hasInlineContent(Landroidx/compose/ui/text/AnnotatedString;)Z +Landroidx/compose/foundation/text/BasicTextFieldKt; +HSPLandroidx/compose/foundation/text/BasicTextFieldKt;->BasicTextField$lambda$2(Landroidx/compose/runtime/MutableState;)Landroidx/compose/ui/text/input/TextFieldValue; +HSPLandroidx/compose/foundation/text/BasicTextFieldKt;->BasicTextField$lambda$3(Landroidx/compose/runtime/MutableState;Landroidx/compose/ui/text/input/TextFieldValue;)V +HSPLandroidx/compose/foundation/text/BasicTextFieldKt;->BasicTextField$lambda$6(Landroidx/compose/runtime/MutableState;)Ljava/lang/String; +HSPLandroidx/compose/foundation/text/BasicTextFieldKt;->BasicTextField$lambda$7(Landroidx/compose/runtime/MutableState;Ljava/lang/String;)V +HSPLandroidx/compose/foundation/text/BasicTextFieldKt;->BasicTextField(Ljava/lang/String;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;ZZLandroidx/compose/ui/text/TextStyle;Landroidx/compose/foundation/text/KeyboardOptions;Landroidx/compose/foundation/text/KeyboardActions;ZIILandroidx/compose/ui/text/input/VisualTransformation;Lkotlin/jvm/functions/Function1;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/ui/graphics/Brush;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;III)V +HSPLandroidx/compose/foundation/text/BasicTextFieldKt;->access$BasicTextField$lambda$2(Landroidx/compose/runtime/MutableState;)Landroidx/compose/ui/text/input/TextFieldValue; +HSPLandroidx/compose/foundation/text/BasicTextFieldKt;->access$BasicTextField$lambda$3(Landroidx/compose/runtime/MutableState;Landroidx/compose/ui/text/input/TextFieldValue;)V +HSPLandroidx/compose/foundation/text/BasicTextFieldKt;->access$BasicTextField$lambda$6(Landroidx/compose/runtime/MutableState;)Ljava/lang/String; +HSPLandroidx/compose/foundation/text/BasicTextFieldKt;->access$BasicTextField$lambda$7(Landroidx/compose/runtime/MutableState;Ljava/lang/String;)V +Landroidx/compose/foundation/text/BasicTextFieldKt$BasicTextField$1; +HSPLandroidx/compose/foundation/text/BasicTextFieldKt$BasicTextField$1;->()V +HSPLandroidx/compose/foundation/text/BasicTextFieldKt$BasicTextField$1;->()V +HSPLandroidx/compose/foundation/text/BasicTextFieldKt$BasicTextField$1;->invoke(Landroidx/compose/ui/text/TextLayoutResult;)V +HSPLandroidx/compose/foundation/text/BasicTextFieldKt$BasicTextField$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/BasicTextFieldKt$BasicTextField$3$1; +HSPLandroidx/compose/foundation/text/BasicTextFieldKt$BasicTextField$3$1;->(Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/runtime/MutableState;)V +HSPLandroidx/compose/foundation/text/BasicTextFieldKt$BasicTextField$3$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/foundation/text/BasicTextFieldKt$BasicTextField$3$1;->invoke()V +Landroidx/compose/foundation/text/BasicTextFieldKt$BasicTextField$4$1; +HSPLandroidx/compose/foundation/text/BasicTextFieldKt$BasicTextField$4$1;->(Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/MutableState;)V +HSPLandroidx/compose/foundation/text/BasicTextFieldKt$BasicTextField$4$1;->invoke(Landroidx/compose/ui/text/input/TextFieldValue;)V +HSPLandroidx/compose/foundation/text/BasicTextFieldKt$BasicTextField$4$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/BasicTextFieldKt$BasicTextField$5; +HSPLandroidx/compose/foundation/text/BasicTextFieldKt$BasicTextField$5;->(Ljava/lang/String;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;ZZLandroidx/compose/ui/text/TextStyle;Landroidx/compose/foundation/text/KeyboardOptions;Landroidx/compose/foundation/text/KeyboardActions;ZIILandroidx/compose/ui/text/input/VisualTransformation;Lkotlin/jvm/functions/Function1;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/ui/graphics/Brush;Lkotlin/jvm/functions/Function3;III)V +Landroidx/compose/foundation/text/BasicTextKt; +HSPLandroidx/compose/foundation/text/BasicTextKt;->BasicText-4YKlhWE(Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function1;IZIILandroidx/compose/runtime/Composer;II)V +HSPLandroidx/compose/foundation/text/BasicTextKt;->BasicText-RWo7tUw(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function1;IZIILjava/util/Map;Landroidx/compose/ui/graphics/ColorProducer;Landroidx/compose/runtime/Composer;II)V +HSPLandroidx/compose/foundation/text/BasicTextKt;->BasicText-VhcvRP8(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function1;IZIILjava/util/Map;Landroidx/compose/runtime/Composer;II)V +HSPLandroidx/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 +HSPLandroidx/compose/foundation/text/BasicTextKt;->textModifier-RWo7tUw(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function1;IZIILandroidx/compose/ui/text/font/FontFamily$Resolver;Ljava/util/List;Lkotlin/jvm/functions/Function1;Landroidx/compose/foundation/text/modifiers/SelectionController;Landroidx/compose/ui/graphics/ColorProducer;)Landroidx/compose/ui/Modifier; +Landroidx/compose/foundation/text/BasicTextKt$BasicText-RWo7tUw$$inlined$Layout$1; +HSPLandroidx/compose/foundation/text/BasicTextKt$BasicText-RWo7tUw$$inlined$Layout$1;->(Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/foundation/text/BasicTextKt$BasicText-RWo7tUw$$inlined$Layout$1;->invoke()Ljava/lang/Object; +Landroidx/compose/foundation/text/BasicTextKt$BasicText-VhcvRP8$$inlined$Layout$1; +HSPLandroidx/compose/foundation/text/BasicTextKt$BasicText-VhcvRP8$$inlined$Layout$1;->(Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/foundation/text/BasicTextKt$BasicText-VhcvRP8$$inlined$Layout$1;->invoke()Ljava/lang/Object; +Landroidx/compose/foundation/text/CoreTextFieldKt; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt;->CoreTextField$lambda$8(Landroidx/compose/runtime/State;)Z +HSPLandroidx/compose/foundation/text/CoreTextFieldKt;->CoreTextField(Landroidx/compose/ui/text/input/TextFieldValue;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/input/VisualTransformation;Lkotlin/jvm/functions/Function1;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/ui/graphics/Brush;ZIILandroidx/compose/ui/text/input/ImeOptions;Landroidx/compose/foundation/text/KeyboardActions;ZZLkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;III)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt;->CoreTextFieldRootBox(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/text/selection/TextFieldSelectionManager;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt;->SelectionToolbarAndHandles(Landroidx/compose/foundation/text/selection/TextFieldSelectionManager;ZLandroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt;->access$CoreTextField$lambda$8(Landroidx/compose/runtime/State;)Z +HSPLandroidx/compose/foundation/text/CoreTextFieldKt;->access$SelectionToolbarAndHandles(Landroidx/compose/foundation/text/selection/TextFieldSelectionManager;ZLandroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt;->access$endInputSession(Landroidx/compose/foundation/text/TextFieldState;)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt;->access$notifyFocusedRect(Landroidx/compose/foundation/text/TextFieldState;Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/ui/text/input/OffsetMapping;)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt;->access$startInputSession(Landroidx/compose/ui/text/input/TextInputService;Landroidx/compose/foundation/text/TextFieldState;Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/ui/text/input/ImeOptions;Landroidx/compose/ui/text/input/OffsetMapping;)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt;->bringSelectionEndIntoView(Landroidx/compose/foundation/relocation/BringIntoViewRequester;Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/foundation/text/TextDelegate;Landroidx/compose/ui/text/TextLayoutResult;Landroidx/compose/ui/text/input/OffsetMapping;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt;->endInputSession(Landroidx/compose/foundation/text/TextFieldState;)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt;->notifyFocusedRect(Landroidx/compose/foundation/text/TextFieldState;Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/ui/text/input/OffsetMapping;)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt;->previewKeyEventToDeselectOnBack(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/text/TextFieldState;Landroidx/compose/foundation/text/selection/TextFieldSelectionManager;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt;->startInputSession(Landroidx/compose/ui/text/input/TextInputService;Landroidx/compose/foundation/text/TextFieldState;Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/ui/text/input/ImeOptions;Landroidx/compose/ui/text/input/OffsetMapping;)V +Landroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$2; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$2;->(Landroidx/compose/foundation/text/TextFieldState;Landroidx/compose/runtime/State;Landroidx/compose/ui/text/input/TextInputService;Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/ui/text/input/ImeOptions;Landroidx/compose/ui/text/input/OffsetMapping;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$2$1; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$2$1;->(Landroidx/compose/runtime/State;)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$2$1;->invoke()Ljava/lang/Boolean; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$2$1;->invoke()Ljava/lang/Object; +Landroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$2$2; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$2$2;->(Landroidx/compose/foundation/text/TextFieldState;Landroidx/compose/ui/text/input/TextInputService;Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/ui/text/input/ImeOptions;Landroidx/compose/ui/text/input/OffsetMapping;)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$2$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$2$2;->emit(ZLkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$3; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$3;->(Landroidx/compose/foundation/text/selection/TextFieldSelectionManager;)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$3;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$3$invoke$$inlined$onDispose$1; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$3$invoke$$inlined$onDispose$1;->(Landroidx/compose/foundation/text/selection/TextFieldSelectionManager;)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$3$invoke$$inlined$onDispose$1;->dispose()V +Landroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$4; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$4;->(Landroidx/compose/ui/text/input/TextInputService;Landroidx/compose/foundation/text/TextFieldState;Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/ui/text/input/ImeOptions;)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$4;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$4;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$4$invoke$$inlined$onDispose$1; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$4$invoke$$inlined$onDispose$1;->()V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$4$invoke$$inlined$onDispose$1;->dispose()V +Landroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$5; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$5;->(Lkotlin/jvm/functions/Function3;ILandroidx/compose/foundation/text/TextFieldState;Landroidx/compose/ui/text/TextStyle;IILandroidx/compose/foundation/text/TextFieldScrollerPosition;Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/ui/text/input/VisualTransformation;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/relocation/BringIntoViewRequester;Landroidx/compose/foundation/text/selection/TextFieldSelectionManager;ZZLkotlin/jvm/functions/Function1;Landroidx/compose/ui/text/input/OffsetMapping;Landroidx/compose/ui/unit/Density;)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$5;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$5$1; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$5$1;->(Landroidx/compose/foundation/text/TextFieldState;Landroidx/compose/ui/text/TextStyle;IILandroidx/compose/foundation/text/TextFieldScrollerPosition;Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/ui/text/input/VisualTransformation;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/relocation/BringIntoViewRequester;Landroidx/compose/foundation/text/selection/TextFieldSelectionManager;ZZLkotlin/jvm/functions/Function1;Landroidx/compose/ui/text/input/OffsetMapping;Landroidx/compose/ui/unit/Density;)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$5$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$5$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$5$1$1; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$5$1$1;->(Landroidx/compose/foundation/text/selection/TextFieldSelectionManager;Landroidx/compose/foundation/text/TextFieldState;ZZLkotlin/jvm/functions/Function1;Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/ui/text/input/OffsetMapping;Landroidx/compose/ui/unit/Density;I)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$5$1$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$5$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$5$1$1$2; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$5$1$1$2;->(Landroidx/compose/foundation/text/TextFieldState;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/ui/text/input/OffsetMapping;Landroidx/compose/ui/unit/Density;I)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$5$1$1$2;->maxIntrinsicWidth(Landroidx/compose/ui/layout/IntrinsicMeasureScope;Ljava/util/List;I)I +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$5$1$1$2;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; +Landroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$5$1$1$2$measure$2; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$5$1$1$2$measure$2;->()V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$5$1$1$2$measure$2;->()V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$5$1$1$2$measure$2;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$5$1$1$2$measure$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$5$1$coreTextFieldModifier$1; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$5$1$coreTextFieldModifier$1;->(Landroidx/compose/foundation/text/TextFieldState;)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$5$1$coreTextFieldModifier$1;->invoke()Landroidx/compose/foundation/text/TextLayoutResultProxy; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$5$1$coreTextFieldModifier$1;->invoke()Ljava/lang/Object; +Landroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$6; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$6;->(Landroidx/compose/ui/text/input/TextFieldValue;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/input/VisualTransformation;Lkotlin/jvm/functions/Function1;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/ui/graphics/Brush;ZIILandroidx/compose/ui/text/input/ImeOptions;Landroidx/compose/foundation/text/KeyboardActions;ZZLkotlin/jvm/functions/Function3;III)V +Landroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$decorationBoxModifier$1; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$decorationBoxModifier$1;->(Landroidx/compose/foundation/text/TextFieldState;)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$decorationBoxModifier$1;->invoke(Landroidx/compose/ui/layout/LayoutCoordinates;)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$decorationBoxModifier$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$drawModifier$1; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$drawModifier$1;->(Landroidx/compose/foundation/text/TextFieldState;Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/ui/text/input/OffsetMapping;)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$drawModifier$1;->invoke(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$drawModifier$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$focusModifier$1; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$focusModifier$1;->(Landroidx/compose/foundation/text/TextFieldState;Landroidx/compose/ui/text/input/TextInputService;ZZLandroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/ui/text/input/ImeOptions;Landroidx/compose/ui/text/input/OffsetMapping;Landroidx/compose/foundation/text/selection/TextFieldSelectionManager;Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/foundation/relocation/BringIntoViewRequester;)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$focusModifier$1;->invoke(Landroidx/compose/ui/focus/FocusState;)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$focusModifier$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$focusModifier$1$1$1; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$focusModifier$1$1$1;->(Landroidx/compose/foundation/relocation/BringIntoViewRequester;Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/foundation/text/TextFieldState;Landroidx/compose/foundation/text/TextLayoutResultProxy;Landroidx/compose/ui/text/input/OffsetMapping;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$focusModifier$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$focusModifier$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$onPositionedModifier$1; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$onPositionedModifier$1;->(Landroidx/compose/foundation/text/TextFieldState;ZLandroidx/compose/foundation/text/selection/TextFieldSelectionManager;Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/ui/text/input/OffsetMapping;)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$onPositionedModifier$1;->invoke(Landroidx/compose/ui/layout/LayoutCoordinates;)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$onPositionedModifier$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$pointerModifier$1; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$pointerModifier$1;->(Landroidx/compose/foundation/text/TextFieldState;Landroidx/compose/ui/focus/FocusRequester;ZLandroidx/compose/foundation/text/selection/TextFieldSelectionManager;Landroidx/compose/ui/text/input/OffsetMapping;)V +Landroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$scrollerPosition$1$1; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$scrollerPosition$1$1;->(Landroidx/compose/foundation/gestures/Orientation;)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$scrollerPosition$1$1;->invoke()Landroidx/compose/foundation/text/TextFieldScrollerPosition; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$scrollerPosition$1$1;->invoke()Ljava/lang/Object; +Landroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$semanticsModifier$1; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$semanticsModifier$1;->(Landroidx/compose/ui/text/input/ImeOptions;Landroidx/compose/ui/text/input/TransformedText;Landroidx/compose/ui/text/input/TextFieldValue;ZZZLandroidx/compose/foundation/text/TextFieldState;Landroidx/compose/ui/text/input/OffsetMapping;Landroidx/compose/foundation/text/selection/TextFieldSelectionManager;Landroidx/compose/ui/focus/FocusRequester;)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$semanticsModifier$1;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$semanticsModifier$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$semanticsModifier$1$1; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$semanticsModifier$1$1;->(Landroidx/compose/foundation/text/TextFieldState;)V +Landroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$semanticsModifier$1$10; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$semanticsModifier$1$10;->(Landroidx/compose/foundation/text/selection/TextFieldSelectionManager;)V +Landroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$semanticsModifier$1$2; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$semanticsModifier$1$2;->(ZZLandroidx/compose/foundation/text/TextFieldState;Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$semanticsModifier$1$2;->invoke(Landroidx/compose/ui/text/AnnotatedString;)Ljava/lang/Boolean; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$semanticsModifier$1$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$semanticsModifier$1$3; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$semanticsModifier$1$3;->(ZZLandroidx/compose/foundation/text/TextFieldState;Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Landroidx/compose/ui/text/input/TextFieldValue;)V +Landroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$semanticsModifier$1$4; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$semanticsModifier$1$4;->(Landroidx/compose/ui/text/input/OffsetMapping;ZLandroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/foundation/text/selection/TextFieldSelectionManager;Landroidx/compose/foundation/text/TextFieldState;)V +Landroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$semanticsModifier$1$5; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$semanticsModifier$1$5;->(Landroidx/compose/foundation/text/TextFieldState;Landroidx/compose/ui/text/input/ImeOptions;)V +Landroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$semanticsModifier$1$6; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$semanticsModifier$1$6;->(Landroidx/compose/foundation/text/TextFieldState;Landroidx/compose/ui/focus/FocusRequester;Z)V +Landroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$semanticsModifier$1$7; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$semanticsModifier$1$7;->(Landroidx/compose/foundation/text/selection/TextFieldSelectionManager;)V +Landroidx/compose/foundation/text/CoreTextFieldKt$previewKeyEventToDeselectOnBack$1; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$previewKeyEventToDeselectOnBack$1;->(Landroidx/compose/foundation/text/TextFieldState;Landroidx/compose/foundation/text/selection/TextFieldSelectionManager;)V +Landroidx/compose/foundation/text/DeadKeyCombiner; +HSPLandroidx/compose/foundation/text/DeadKeyCombiner;->()V +Landroidx/compose/foundation/text/EmptyMeasurePolicy; +HSPLandroidx/compose/foundation/text/EmptyMeasurePolicy;->()V +HSPLandroidx/compose/foundation/text/EmptyMeasurePolicy;->()V +HSPLandroidx/compose/foundation/text/EmptyMeasurePolicy;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; +Landroidx/compose/foundation/text/EmptyMeasurePolicy$placementBlock$1; +HSPLandroidx/compose/foundation/text/EmptyMeasurePolicy$placementBlock$1;->()V +HSPLandroidx/compose/foundation/text/EmptyMeasurePolicy$placementBlock$1;->()V +HSPLandroidx/compose/foundation/text/EmptyMeasurePolicy$placementBlock$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/foundation/text/EmptyMeasurePolicy$placementBlock$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/FixedMotionDurationScale; +HSPLandroidx/compose/foundation/text/FixedMotionDurationScale;->()V +HSPLandroidx/compose/foundation/text/FixedMotionDurationScale;->()V +HSPLandroidx/compose/foundation/text/FixedMotionDurationScale;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/text/FixedMotionDurationScale;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; +HSPLandroidx/compose/foundation/text/FixedMotionDurationScale;->getScaleFactor()F +Landroidx/compose/foundation/text/Handle; +Landroidx/compose/foundation/text/HandleState; +HSPLandroidx/compose/foundation/text/HandleState;->$values()[Landroidx/compose/foundation/text/HandleState; +HSPLandroidx/compose/foundation/text/HandleState;->()V +HSPLandroidx/compose/foundation/text/HandleState;->(Ljava/lang/String;I)V +Landroidx/compose/foundation/text/HeightInLinesModifierKt; +HSPLandroidx/compose/foundation/text/HeightInLinesModifierKt;->heightInLines(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/text/TextStyle;II)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/text/HeightInLinesModifierKt;->validateMinMaxLines(II)V +Landroidx/compose/foundation/text/HeightInLinesModifierKt$heightInLines$2; +HSPLandroidx/compose/foundation/text/HeightInLinesModifierKt$heightInLines$2;->(IILandroidx/compose/ui/text/TextStyle;)V +HSPLandroidx/compose/foundation/text/HeightInLinesModifierKt$heightInLines$2;->invoke$lambda$2(Landroidx/compose/runtime/State;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/text/HeightInLinesModifierKt$heightInLines$2;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/text/HeightInLinesModifierKt$heightInLines$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/HorizontalScrollLayoutModifier; +HSPLandroidx/compose/foundation/text/HorizontalScrollLayoutModifier;->(Landroidx/compose/foundation/text/TextFieldScrollerPosition;ILandroidx/compose/ui/text/input/TransformedText;Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/foundation/text/HorizontalScrollLayoutModifier;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/foundation/text/HorizontalScrollLayoutModifier;->getCursorOffset()I +HSPLandroidx/compose/foundation/text/HorizontalScrollLayoutModifier;->getScrollerPosition()Landroidx/compose/foundation/text/TextFieldScrollerPosition; +HSPLandroidx/compose/foundation/text/HorizontalScrollLayoutModifier;->getTextLayoutResultProvider()Lkotlin/jvm/functions/Function0; +HSPLandroidx/compose/foundation/text/HorizontalScrollLayoutModifier;->getTransformedText()Landroidx/compose/ui/text/input/TransformedText; +HSPLandroidx/compose/foundation/text/HorizontalScrollLayoutModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; +Landroidx/compose/foundation/text/HorizontalScrollLayoutModifier$measure$1; +HSPLandroidx/compose/foundation/text/HorizontalScrollLayoutModifier$measure$1;->(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/foundation/text/HorizontalScrollLayoutModifier;Landroidx/compose/ui/layout/Placeable;I)V +HSPLandroidx/compose/foundation/text/HorizontalScrollLayoutModifier$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/foundation/text/HorizontalScrollLayoutModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/KeyMapping; +Landroidx/compose/foundation/text/KeyMapping_androidKt; +HSPLandroidx/compose/foundation/text/KeyMapping_androidKt;->()V +HSPLandroidx/compose/foundation/text/KeyMapping_androidKt;->getPlatformDefaultKeyMapping()Landroidx/compose/foundation/text/KeyMapping; +Landroidx/compose/foundation/text/KeyMapping_androidKt$platformDefaultKeyMapping$1; +HSPLandroidx/compose/foundation/text/KeyMapping_androidKt$platformDefaultKeyMapping$1;->()V +Landroidx/compose/foundation/text/KeyboardActionRunner; +HSPLandroidx/compose/foundation/text/KeyboardActionRunner;->()V +HSPLandroidx/compose/foundation/text/KeyboardActionRunner;->setFocusManager(Landroidx/compose/ui/focus/FocusManager;)V +HSPLandroidx/compose/foundation/text/KeyboardActionRunner;->setInputSession(Landroidx/compose/ui/text/input/TextInputSession;)V +HSPLandroidx/compose/foundation/text/KeyboardActionRunner;->setKeyboardActions(Landroidx/compose/foundation/text/KeyboardActions;)V +Landroidx/compose/foundation/text/KeyboardActionScope; +Landroidx/compose/foundation/text/KeyboardActions; +HSPLandroidx/compose/foundation/text/KeyboardActions;->()V +HSPLandroidx/compose/foundation/text/KeyboardActions;->(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 +HSPLandroidx/compose/foundation/text/KeyboardActions;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/text/KeyboardActions;->equals(Ljava/lang/Object;)Z +Landroidx/compose/foundation/text/KeyboardActions$Companion; +HSPLandroidx/compose/foundation/text/KeyboardActions$Companion;->()V +HSPLandroidx/compose/foundation/text/KeyboardActions$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/foundation/text/KeyboardOptions; +HSPLandroidx/compose/foundation/text/KeyboardOptions;->()V +HSPLandroidx/compose/foundation/text/KeyboardOptions;->(IZII)V +HSPLandroidx/compose/foundation/text/KeyboardOptions;->(IZIIILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/text/KeyboardOptions;->(IZIILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/text/KeyboardOptions;->copy-3m2b7yw$default(Landroidx/compose/foundation/text/KeyboardOptions;IZIIILjava/lang/Object;)Landroidx/compose/foundation/text/KeyboardOptions; +HSPLandroidx/compose/foundation/text/KeyboardOptions;->copy-3m2b7yw(IZII)Landroidx/compose/foundation/text/KeyboardOptions; +HSPLandroidx/compose/foundation/text/KeyboardOptions;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/foundation/text/KeyboardOptions;->toImeOptions$foundation_release(Z)Landroidx/compose/ui/text/input/ImeOptions; +Landroidx/compose/foundation/text/KeyboardOptions$Companion; +HSPLandroidx/compose/foundation/text/KeyboardOptions$Companion;->()V +HSPLandroidx/compose/foundation/text/KeyboardOptions$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/foundation/text/TextDelegate; +HSPLandroidx/compose/foundation/text/TextDelegate;->()V +HSPLandroidx/compose/foundation/text/TextDelegate;->(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;IIZILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/text/font/FontFamily$Resolver;Ljava/util/List;)V +HSPLandroidx/compose/foundation/text/TextDelegate;->(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;IIZILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/text/font/FontFamily$Resolver;Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/text/TextDelegate;->(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;IIZILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/text/font/FontFamily$Resolver;Ljava/util/List;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/text/TextDelegate;->getDensity()Landroidx/compose/ui/unit/Density; +HSPLandroidx/compose/foundation/text/TextDelegate;->getFontFamilyResolver()Landroidx/compose/ui/text/font/FontFamily$Resolver; +HSPLandroidx/compose/foundation/text/TextDelegate;->getMaxIntrinsicWidth()I +HSPLandroidx/compose/foundation/text/TextDelegate;->getMaxLines()I +HSPLandroidx/compose/foundation/text/TextDelegate;->getMinLines()I +HSPLandroidx/compose/foundation/text/TextDelegate;->getNonNullIntrinsics()Landroidx/compose/ui/text/MultiParagraphIntrinsics; +HSPLandroidx/compose/foundation/text/TextDelegate;->getOverflow-gIe3tQ8()I +HSPLandroidx/compose/foundation/text/TextDelegate;->getPlaceholders()Ljava/util/List; +HSPLandroidx/compose/foundation/text/TextDelegate;->getSoftWrap()Z +HSPLandroidx/compose/foundation/text/TextDelegate;->getStyle()Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/foundation/text/TextDelegate;->getText()Landroidx/compose/ui/text/AnnotatedString; +HSPLandroidx/compose/foundation/text/TextDelegate;->layout-NN6Ew-U(JLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/text/TextLayoutResult;)Landroidx/compose/ui/text/TextLayoutResult; +HSPLandroidx/compose/foundation/text/TextDelegate;->layoutIntrinsics(Landroidx/compose/ui/unit/LayoutDirection;)V +HSPLandroidx/compose/foundation/text/TextDelegate;->layoutText-K40F9xA(JLandroidx/compose/ui/unit/LayoutDirection;)Landroidx/compose/ui/text/MultiParagraph; +Landroidx/compose/foundation/text/TextDelegate$Companion; +HSPLandroidx/compose/foundation/text/TextDelegate$Companion;->()V +HSPLandroidx/compose/foundation/text/TextDelegate$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/foundation/text/TextDelegateKt; +HSPLandroidx/compose/foundation/text/TextDelegateKt;->ceilToIntPx(F)I +HSPLandroidx/compose/foundation/text/TextDelegateKt;->updateTextDelegate-rm0N8CA$default(Landroidx/compose/foundation/text/TextDelegate;Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/text/font/FontFamily$Resolver;ZIIILjava/util/List;ILjava/lang/Object;)Landroidx/compose/foundation/text/TextDelegate; +HSPLandroidx/compose/foundation/text/TextDelegateKt;->updateTextDelegate-rm0N8CA(Landroidx/compose/foundation/text/TextDelegate;Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/text/font/FontFamily$Resolver;ZIIILjava/util/List;)Landroidx/compose/foundation/text/TextDelegate; +Landroidx/compose/foundation/text/TextDragObserver; +Landroidx/compose/foundation/text/TextFieldCursorKt; +HSPLandroidx/compose/foundation/text/TextFieldCursorKt;->()V +HSPLandroidx/compose/foundation/text/TextFieldCursorKt;->access$getCursorAnimationSpec$p()Landroidx/compose/animation/core/AnimationSpec; +HSPLandroidx/compose/foundation/text/TextFieldCursorKt;->cursor(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/text/TextFieldState;Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/ui/text/input/OffsetMapping;Landroidx/compose/ui/graphics/Brush;Z)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/text/TextFieldCursorKt;->getDefaultCursorThickness()F +Landroidx/compose/foundation/text/TextFieldCursorKt$cursor$1; +HSPLandroidx/compose/foundation/text/TextFieldCursorKt$cursor$1;->(Landroidx/compose/ui/graphics/Brush;Landroidx/compose/foundation/text/TextFieldState;Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/ui/text/input/OffsetMapping;)V +HSPLandroidx/compose/foundation/text/TextFieldCursorKt$cursor$1;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/text/TextFieldCursorKt$cursor$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/TextFieldCursorKt$cursor$1$1; +HSPLandroidx/compose/foundation/text/TextFieldCursorKt$cursor$1$1;->(Landroidx/compose/animation/core/Animatable;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/text/TextFieldCursorKt$cursor$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/text/TextFieldCursorKt$cursor$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/TextFieldCursorKt$cursor$1$1$1; +HSPLandroidx/compose/foundation/text/TextFieldCursorKt$cursor$1$1$1;->(Landroidx/compose/animation/core/Animatable;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/text/TextFieldCursorKt$cursor$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/text/TextFieldCursorKt$cursor$1$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/text/TextFieldCursorKt$cursor$1$1$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/text/TextFieldCursorKt$cursor$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/TextFieldCursorKt$cursor$1$2; +HSPLandroidx/compose/foundation/text/TextFieldCursorKt$cursor$1$2;->(Landroidx/compose/animation/core/Animatable;Landroidx/compose/ui/text/input/OffsetMapping;Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/foundation/text/TextFieldState;Landroidx/compose/ui/graphics/Brush;)V +HSPLandroidx/compose/foundation/text/TextFieldCursorKt$cursor$1$2;->invoke(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V +HSPLandroidx/compose/foundation/text/TextFieldCursorKt$cursor$1$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/TextFieldCursorKt$cursorAnimationSpec$1; +HSPLandroidx/compose/foundation/text/TextFieldCursorKt$cursorAnimationSpec$1;->()V +HSPLandroidx/compose/foundation/text/TextFieldCursorKt$cursorAnimationSpec$1;->()V +HSPLandroidx/compose/foundation/text/TextFieldCursorKt$cursorAnimationSpec$1;->invoke(Landroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig;)V +HSPLandroidx/compose/foundation/text/TextFieldCursorKt$cursorAnimationSpec$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/TextFieldDelegate; +HSPLandroidx/compose/foundation/text/TextFieldDelegate;->()V +Landroidx/compose/foundation/text/TextFieldDelegate$Companion; +HSPLandroidx/compose/foundation/text/TextFieldDelegate$Companion;->()V +HSPLandroidx/compose/foundation/text/TextFieldDelegate$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/text/TextFieldDelegate$Companion;->draw$foundation_release(Landroidx/compose/ui/graphics/Canvas;Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/ui/text/input/OffsetMapping;Landroidx/compose/ui/text/TextLayoutResult;Landroidx/compose/ui/graphics/Paint;)V +HSPLandroidx/compose/foundation/text/TextFieldDelegate$Companion;->layout-_EkL_-Y$foundation_release(Landroidx/compose/foundation/text/TextDelegate;JLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/text/TextLayoutResult;)Lkotlin/Triple; +HSPLandroidx/compose/foundation/text/TextFieldDelegate$Companion;->notifyFocusedRect$foundation_release(Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/foundation/text/TextDelegate;Landroidx/compose/ui/text/TextLayoutResult;Landroidx/compose/ui/layout/LayoutCoordinates;Landroidx/compose/ui/text/input/TextInputSession;ZLandroidx/compose/ui/text/input/OffsetMapping;)V +HSPLandroidx/compose/foundation/text/TextFieldDelegate$Companion;->onBlur$foundation_release(Landroidx/compose/ui/text/input/TextInputSession;Landroidx/compose/ui/text/input/EditProcessor;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/foundation/text/TextFieldDelegate$Companion;->onEditCommand$foundation_release(Ljava/util/List;Landroidx/compose/ui/text/input/EditProcessor;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/text/input/TextInputSession;)V +HSPLandroidx/compose/foundation/text/TextFieldDelegate$Companion;->onFocus$foundation_release(Landroidx/compose/ui/text/input/TextInputService;Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/ui/text/input/EditProcessor;Landroidx/compose/ui/text/input/ImeOptions;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/text/input/TextInputSession; +HSPLandroidx/compose/foundation/text/TextFieldDelegate$Companion;->restartInput$foundation_release(Landroidx/compose/ui/text/input/TextInputService;Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/ui/text/input/EditProcessor;Landroidx/compose/ui/text/input/ImeOptions;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/text/input/TextInputSession; +Landroidx/compose/foundation/text/TextFieldDelegate$Companion$restartInput$1; +HSPLandroidx/compose/foundation/text/TextFieldDelegate$Companion$restartInput$1;->(Landroidx/compose/ui/text/input/EditProcessor;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/internal/Ref$ObjectRef;)V +Landroidx/compose/foundation/text/TextFieldDelegateKt; +HSPLandroidx/compose/foundation/text/TextFieldDelegateKt;->()V +HSPLandroidx/compose/foundation/text/TextFieldDelegateKt;->computeSizeForDefaultText$default(Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/text/font/FontFamily$Resolver;Ljava/lang/String;IILjava/lang/Object;)J +HSPLandroidx/compose/foundation/text/TextFieldDelegateKt;->computeSizeForDefaultText(Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/text/font/FontFamily$Resolver;Ljava/lang/String;I)J +HSPLandroidx/compose/foundation/text/TextFieldDelegateKt;->getEmptyTextReplacement()Ljava/lang/String; +Landroidx/compose/foundation/text/TextFieldFocusModifier_androidKt; +HSPLandroidx/compose/foundation/text/TextFieldFocusModifier_androidKt;->interceptDPadAndMoveFocus(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/text/TextFieldState;Landroidx/compose/ui/focus/FocusManager;)Landroidx/compose/ui/Modifier; +Landroidx/compose/foundation/text/TextFieldFocusModifier_androidKt$interceptDPadAndMoveFocus$1; +HSPLandroidx/compose/foundation/text/TextFieldFocusModifier_androidKt$interceptDPadAndMoveFocus$1;->(Landroidx/compose/ui/focus/FocusManager;Landroidx/compose/foundation/text/TextFieldState;)V +Landroidx/compose/foundation/text/TextFieldGestureModifiersKt; +HSPLandroidx/compose/foundation/text/TextFieldGestureModifiersKt;->longPressDragGestureFilter(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/text/TextDragObserver;Z)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/text/TextFieldGestureModifiersKt;->textFieldFocusModifier(Landroidx/compose/ui/Modifier;ZLandroidx/compose/ui/focus/FocusRequester;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; +Landroidx/compose/foundation/text/TextFieldGestureModifiersKt$longPressDragGestureFilter$1; +HSPLandroidx/compose/foundation/text/TextFieldGestureModifiersKt$longPressDragGestureFilter$1;->(Landroidx/compose/foundation/text/TextDragObserver;Lkotlin/coroutines/Continuation;)V +Landroidx/compose/foundation/text/TextFieldKeyInput; +HSPLandroidx/compose/foundation/text/TextFieldKeyInput;->(Landroidx/compose/foundation/text/TextFieldState;Landroidx/compose/foundation/text/selection/TextFieldSelectionManager;Landroidx/compose/ui/text/input/TextFieldValue;ZZLandroidx/compose/foundation/text/selection/TextPreparedSelectionState;Landroidx/compose/ui/text/input/OffsetMapping;Landroidx/compose/foundation/text/UndoManager;Landroidx/compose/foundation/text/DeadKeyCombiner;Landroidx/compose/foundation/text/KeyMapping;Lkotlin/jvm/functions/Function1;I)V +HSPLandroidx/compose/foundation/text/TextFieldKeyInput;->(Landroidx/compose/foundation/text/TextFieldState;Landroidx/compose/foundation/text/selection/TextFieldSelectionManager;Landroidx/compose/ui/text/input/TextFieldValue;ZZLandroidx/compose/foundation/text/selection/TextPreparedSelectionState;Landroidx/compose/ui/text/input/OffsetMapping;Landroidx/compose/foundation/text/UndoManager;Landroidx/compose/foundation/text/DeadKeyCombiner;Landroidx/compose/foundation/text/KeyMapping;Lkotlin/jvm/functions/Function1;IILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/text/TextFieldKeyInput;->(Landroidx/compose/foundation/text/TextFieldState;Landroidx/compose/foundation/text/selection/TextFieldSelectionManager;Landroidx/compose/ui/text/input/TextFieldValue;ZZLandroidx/compose/foundation/text/selection/TextPreparedSelectionState;Landroidx/compose/ui/text/input/OffsetMapping;Landroidx/compose/foundation/text/UndoManager;Landroidx/compose/foundation/text/DeadKeyCombiner;Landroidx/compose/foundation/text/KeyMapping;Lkotlin/jvm/functions/Function1;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/foundation/text/TextFieldKeyInputKt; +HSPLandroidx/compose/foundation/text/TextFieldKeyInputKt;->textFieldKeyInput-2WJ9YEU(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/text/TextFieldState;Landroidx/compose/foundation/text/selection/TextFieldSelectionManager;Landroidx/compose/ui/text/input/TextFieldValue;Lkotlin/jvm/functions/Function1;ZZLandroidx/compose/ui/text/input/OffsetMapping;Landroidx/compose/foundation/text/UndoManager;I)Landroidx/compose/ui/Modifier; +Landroidx/compose/foundation/text/TextFieldKeyInputKt$textFieldKeyInput$2; +HSPLandroidx/compose/foundation/text/TextFieldKeyInputKt$textFieldKeyInput$2;->(Landroidx/compose/foundation/text/TextFieldState;Landroidx/compose/foundation/text/selection/TextFieldSelectionManager;Landroidx/compose/ui/text/input/TextFieldValue;ZZLandroidx/compose/ui/text/input/OffsetMapping;Landroidx/compose/foundation/text/UndoManager;Lkotlin/jvm/functions/Function1;I)V +HSPLandroidx/compose/foundation/text/TextFieldKeyInputKt$textFieldKeyInput$2;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/text/TextFieldKeyInputKt$textFieldKeyInput$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/TextFieldKeyInputKt$textFieldKeyInput$2$1; +HSPLandroidx/compose/foundation/text/TextFieldKeyInputKt$textFieldKeyInput$2$1;->(Ljava/lang/Object;)V +Landroidx/compose/foundation/text/TextFieldPressGestureFilterKt; +HSPLandroidx/compose/foundation/text/TextFieldPressGestureFilterKt;->tapPressTextFieldModifier(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/interaction/MutableInteractionSource;ZLkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; +Landroidx/compose/foundation/text/TextFieldPressGestureFilterKt$tapPressTextFieldModifier$1; +HSPLandroidx/compose/foundation/text/TextFieldPressGestureFilterKt$tapPressTextFieldModifier$1;->(Lkotlin/jvm/functions/Function1;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V +HSPLandroidx/compose/foundation/text/TextFieldPressGestureFilterKt$tapPressTextFieldModifier$1;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/text/TextFieldPressGestureFilterKt$tapPressTextFieldModifier$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/TextFieldPressGestureFilterKt$tapPressTextFieldModifier$1$1$1; +HSPLandroidx/compose/foundation/text/TextFieldPressGestureFilterKt$tapPressTextFieldModifier$1$1$1;->(Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V +HSPLandroidx/compose/foundation/text/TextFieldPressGestureFilterKt$tapPressTextFieldModifier$1$1$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult; +HSPLandroidx/compose/foundation/text/TextFieldPressGestureFilterKt$tapPressTextFieldModifier$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/TextFieldPressGestureFilterKt$tapPressTextFieldModifier$1$1$1$invoke$$inlined$onDispose$1; +HSPLandroidx/compose/foundation/text/TextFieldPressGestureFilterKt$tapPressTextFieldModifier$1$1$1$invoke$$inlined$onDispose$1;->(Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V +HSPLandroidx/compose/foundation/text/TextFieldPressGestureFilterKt$tapPressTextFieldModifier$1$1$1$invoke$$inlined$onDispose$1;->dispose()V +Landroidx/compose/foundation/text/TextFieldPressGestureFilterKt$tapPressTextFieldModifier$1$2; +HSPLandroidx/compose/foundation/text/TextFieldPressGestureFilterKt$tapPressTextFieldModifier$1$2;->(Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V +Landroidx/compose/foundation/text/TextFieldScrollKt; +HSPLandroidx/compose/foundation/text/TextFieldScrollKt;->access$getCursorRectInScroller(Landroidx/compose/ui/unit/Density;ILandroidx/compose/ui/text/input/TransformedText;Landroidx/compose/ui/text/TextLayoutResult;ZI)Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/foundation/text/TextFieldScrollKt;->getCursorRectInScroller(Landroidx/compose/ui/unit/Density;ILandroidx/compose/ui/text/input/TransformedText;Landroidx/compose/ui/text/TextLayoutResult;ZI)Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/foundation/text/TextFieldScrollKt;->textFieldScroll(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/text/TextFieldScrollerPosition;Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/ui/text/input/VisualTransformation;Lkotlin/jvm/functions/Function0;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/text/TextFieldScrollKt;->textFieldScrollable(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/text/TextFieldScrollerPosition;Landroidx/compose/foundation/interaction/MutableInteractionSource;Z)Landroidx/compose/ui/Modifier; +Landroidx/compose/foundation/text/TextFieldScrollKt$WhenMappings; +HSPLandroidx/compose/foundation/text/TextFieldScrollKt$WhenMappings;->()V +Landroidx/compose/foundation/text/TextFieldScrollKt$textFieldScrollable$2; +HSPLandroidx/compose/foundation/text/TextFieldScrollKt$textFieldScrollable$2;->(Landroidx/compose/foundation/text/TextFieldScrollerPosition;ZLandroidx/compose/foundation/interaction/MutableInteractionSource;)V +HSPLandroidx/compose/foundation/text/TextFieldScrollKt$textFieldScrollable$2;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/text/TextFieldScrollKt$textFieldScrollable$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/TextFieldScrollKt$textFieldScrollable$2$scrollableState$1$1; +HSPLandroidx/compose/foundation/text/TextFieldScrollKt$textFieldScrollable$2$scrollableState$1$1;->(Landroidx/compose/foundation/text/TextFieldScrollerPosition;)V +Landroidx/compose/foundation/text/TextFieldScrollKt$textFieldScrollable$2$wrappedScrollableState$1$1; +HSPLandroidx/compose/foundation/text/TextFieldScrollKt$textFieldScrollable$2$wrappedScrollableState$1$1;->(Landroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/text/TextFieldScrollerPosition;)V +Landroidx/compose/foundation/text/TextFieldScrollKt$textFieldScrollable$2$wrappedScrollableState$1$1$canScrollBackward$2; +HSPLandroidx/compose/foundation/text/TextFieldScrollKt$textFieldScrollable$2$wrappedScrollableState$1$1$canScrollBackward$2;->(Landroidx/compose/foundation/text/TextFieldScrollerPosition;)V +Landroidx/compose/foundation/text/TextFieldScrollKt$textFieldScrollable$2$wrappedScrollableState$1$1$canScrollForward$2; +HSPLandroidx/compose/foundation/text/TextFieldScrollKt$textFieldScrollable$2$wrappedScrollableState$1$1$canScrollForward$2;->(Landroidx/compose/foundation/text/TextFieldScrollerPosition;)V +Landroidx/compose/foundation/text/TextFieldScrollerPosition; +HSPLandroidx/compose/foundation/text/TextFieldScrollerPosition;->()V +HSPLandroidx/compose/foundation/text/TextFieldScrollerPosition;->(Landroidx/compose/foundation/gestures/Orientation;F)V +HSPLandroidx/compose/foundation/text/TextFieldScrollerPosition;->(Landroidx/compose/foundation/gestures/Orientation;FILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/text/TextFieldScrollerPosition;->access$getSaver$cp()Landroidx/compose/runtime/saveable/Saver; +HSPLandroidx/compose/foundation/text/TextFieldScrollerPosition;->coerceOffset$foundation_release(FFI)V +HSPLandroidx/compose/foundation/text/TextFieldScrollerPosition;->getMaximum()F +HSPLandroidx/compose/foundation/text/TextFieldScrollerPosition;->getOffset()F +HSPLandroidx/compose/foundation/text/TextFieldScrollerPosition;->getOffsetToFollow-5zc-tL8(J)I +HSPLandroidx/compose/foundation/text/TextFieldScrollerPosition;->getOrientation()Landroidx/compose/foundation/gestures/Orientation; +HSPLandroidx/compose/foundation/text/TextFieldScrollerPosition;->setMaximum(F)V +HSPLandroidx/compose/foundation/text/TextFieldScrollerPosition;->setOffset(F)V +HSPLandroidx/compose/foundation/text/TextFieldScrollerPosition;->setPreviousSelection-5zc-tL8(J)V +HSPLandroidx/compose/foundation/text/TextFieldScrollerPosition;->update(Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/ui/geometry/Rect;II)V +Landroidx/compose/foundation/text/TextFieldScrollerPosition$Companion; +HSPLandroidx/compose/foundation/text/TextFieldScrollerPosition$Companion;->()V +HSPLandroidx/compose/foundation/text/TextFieldScrollerPosition$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/text/TextFieldScrollerPosition$Companion;->getSaver()Landroidx/compose/runtime/saveable/Saver; +Landroidx/compose/foundation/text/TextFieldScrollerPosition$Companion$Saver$1; +HSPLandroidx/compose/foundation/text/TextFieldScrollerPosition$Companion$Saver$1;->()V +HSPLandroidx/compose/foundation/text/TextFieldScrollerPosition$Companion$Saver$1;->()V +HSPLandroidx/compose/foundation/text/TextFieldScrollerPosition$Companion$Saver$1;->invoke(Landroidx/compose/runtime/saveable/SaverScope;Landroidx/compose/foundation/text/TextFieldScrollerPosition;)Ljava/util/List; +HSPLandroidx/compose/foundation/text/TextFieldScrollerPosition$Companion$Saver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/TextFieldScrollerPosition$Companion$Saver$2; +HSPLandroidx/compose/foundation/text/TextFieldScrollerPosition$Companion$Saver$2;->()V +HSPLandroidx/compose/foundation/text/TextFieldScrollerPosition$Companion$Saver$2;->()V +Landroidx/compose/foundation/text/TextFieldSize; +HSPLandroidx/compose/foundation/text/TextFieldSize;->(Landroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/text/font/FontFamily$Resolver;Landroidx/compose/ui/text/TextStyle;Ljava/lang/Object;)V +HSPLandroidx/compose/foundation/text/TextFieldSize;->computeMinSize-YbymL2g()J +HSPLandroidx/compose/foundation/text/TextFieldSize;->getMinSize-YbymL2g()J +HSPLandroidx/compose/foundation/text/TextFieldSize;->update(Landroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/text/font/FontFamily$Resolver;Landroidx/compose/ui/text/TextStyle;Ljava/lang/Object;)V +Landroidx/compose/foundation/text/TextFieldSizeKt; +HSPLandroidx/compose/foundation/text/TextFieldSizeKt;->textFieldMinSize(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/text/TextStyle;)Landroidx/compose/ui/Modifier; +Landroidx/compose/foundation/text/TextFieldSizeKt$textFieldMinSize$1; +HSPLandroidx/compose/foundation/text/TextFieldSizeKt$textFieldMinSize$1;->(Landroidx/compose/ui/text/TextStyle;)V +HSPLandroidx/compose/foundation/text/TextFieldSizeKt$textFieldMinSize$1;->access$invoke$lambda$2(Landroidx/compose/runtime/State;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/text/TextFieldSizeKt$textFieldMinSize$1;->invoke$lambda$2(Landroidx/compose/runtime/State;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/text/TextFieldSizeKt$textFieldMinSize$1;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/text/TextFieldSizeKt$textFieldMinSize$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/TextFieldSizeKt$textFieldMinSize$1$1; +HSPLandroidx/compose/foundation/text/TextFieldSizeKt$textFieldMinSize$1$1;->(Landroidx/compose/foundation/text/TextFieldSize;)V +HSPLandroidx/compose/foundation/text/TextFieldSizeKt$textFieldMinSize$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/text/TextFieldSizeKt$textFieldMinSize$1$1;->invoke-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; +Landroidx/compose/foundation/text/TextFieldSizeKt$textFieldMinSize$1$1$1; +HSPLandroidx/compose/foundation/text/TextFieldSizeKt$textFieldMinSize$1$1$1;->(Landroidx/compose/ui/layout/Placeable;)V +HSPLandroidx/compose/foundation/text/TextFieldSizeKt$textFieldMinSize$1$1$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/foundation/text/TextFieldSizeKt$textFieldMinSize$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/TextFieldState; +HSPLandroidx/compose/foundation/text/TextFieldState;->(Landroidx/compose/foundation/text/TextDelegate;Landroidx/compose/runtime/RecomposeScope;)V +HSPLandroidx/compose/foundation/text/TextFieldState;->access$getOnValueChangeOriginal$p(Landroidx/compose/foundation/text/TextFieldState;)Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/foundation/text/TextFieldState;->getHandleState()Landroidx/compose/foundation/text/HandleState; +HSPLandroidx/compose/foundation/text/TextFieldState;->getHasFocus()Z +HSPLandroidx/compose/foundation/text/TextFieldState;->getInputSession()Landroidx/compose/ui/text/input/TextInputSession; +HSPLandroidx/compose/foundation/text/TextFieldState;->getLayoutCoordinates()Landroidx/compose/ui/layout/LayoutCoordinates; +HSPLandroidx/compose/foundation/text/TextFieldState;->getLayoutResult()Landroidx/compose/foundation/text/TextLayoutResultProxy; +HSPLandroidx/compose/foundation/text/TextFieldState;->getMinHeightForSingleLineField-D9Ej5fM()F +HSPLandroidx/compose/foundation/text/TextFieldState;->getOnImeActionPerformed()Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/foundation/text/TextFieldState;->getOnValueChange()Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/foundation/text/TextFieldState;->getProcessor()Landroidx/compose/ui/text/input/EditProcessor; +HSPLandroidx/compose/foundation/text/TextFieldState;->getRecomposeScope()Landroidx/compose/runtime/RecomposeScope; +HSPLandroidx/compose/foundation/text/TextFieldState;->getSelectionPaint()Landroidx/compose/ui/graphics/Paint; +HSPLandroidx/compose/foundation/text/TextFieldState;->getTextDelegate()Landroidx/compose/foundation/text/TextDelegate; +HSPLandroidx/compose/foundation/text/TextFieldState;->getUntransformedText()Landroidx/compose/ui/text/AnnotatedString; +HSPLandroidx/compose/foundation/text/TextFieldState;->setHandleState(Landroidx/compose/foundation/text/HandleState;)V +HSPLandroidx/compose/foundation/text/TextFieldState;->setHasFocus(Z)V +HSPLandroidx/compose/foundation/text/TextFieldState;->setInputSession(Landroidx/compose/ui/text/input/TextInputSession;)V +HSPLandroidx/compose/foundation/text/TextFieldState;->setLayoutCoordinates(Landroidx/compose/ui/layout/LayoutCoordinates;)V +HSPLandroidx/compose/foundation/text/TextFieldState;->setLayoutResult(Landroidx/compose/foundation/text/TextLayoutResultProxy;)V +HSPLandroidx/compose/foundation/text/TextFieldState;->setMinHeightForSingleLineField-0680j_4(F)V +HSPLandroidx/compose/foundation/text/TextFieldState;->update-fnh65Uc(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;ZLandroidx/compose/ui/unit/Density;Landroidx/compose/ui/text/font/FontFamily$Resolver;Lkotlin/jvm/functions/Function1;Landroidx/compose/foundation/text/KeyboardActions;Landroidx/compose/ui/focus/FocusManager;J)V +Landroidx/compose/foundation/text/TextFieldState$onImeActionPerformed$1; +HSPLandroidx/compose/foundation/text/TextFieldState$onImeActionPerformed$1;->(Landroidx/compose/foundation/text/TextFieldState;)V +Landroidx/compose/foundation/text/TextFieldState$onValueChange$1; +HSPLandroidx/compose/foundation/text/TextFieldState$onValueChange$1;->(Landroidx/compose/foundation/text/TextFieldState;)V +HSPLandroidx/compose/foundation/text/TextFieldState$onValueChange$1;->invoke(Landroidx/compose/ui/text/input/TextFieldValue;)V +HSPLandroidx/compose/foundation/text/TextFieldState$onValueChange$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/TextFieldState$onValueChangeOriginal$1; +HSPLandroidx/compose/foundation/text/TextFieldState$onValueChangeOriginal$1;->()V +HSPLandroidx/compose/foundation/text/TextFieldState$onValueChangeOriginal$1;->()V +Landroidx/compose/foundation/text/TextLayoutHelperKt; +HSPLandroidx/compose/foundation/text/TextLayoutHelperKt;->canReuse-7_7YC6M(Landroidx/compose/ui/text/TextLayoutResult;Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;Ljava/util/List;IZILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/text/font/FontFamily$Resolver;J)Z +Landroidx/compose/foundation/text/TextLayoutResultProxy; +HSPLandroidx/compose/foundation/text/TextLayoutResultProxy;->(Landroidx/compose/ui/text/TextLayoutResult;)V +HSPLandroidx/compose/foundation/text/TextLayoutResultProxy;->getValue()Landroidx/compose/ui/text/TextLayoutResult; +HSPLandroidx/compose/foundation/text/TextLayoutResultProxy;->setDecorationBoxCoordinates(Landroidx/compose/ui/layout/LayoutCoordinates;)V +HSPLandroidx/compose/foundation/text/TextLayoutResultProxy;->setInnerTextFieldCoordinates(Landroidx/compose/ui/layout/LayoutCoordinates;)V +Landroidx/compose/foundation/text/TextPointerIcon_androidKt; +HSPLandroidx/compose/foundation/text/TextPointerIcon_androidKt;->()V +HSPLandroidx/compose/foundation/text/TextPointerIcon_androidKt;->getTextPointerIcon()Landroidx/compose/ui/input/pointer/PointerIcon; +Landroidx/compose/foundation/text/TouchMode_androidKt; +HSPLandroidx/compose/foundation/text/TouchMode_androidKt;->()V +HSPLandroidx/compose/foundation/text/TouchMode_androidKt;->isInTouchMode()Z +Landroidx/compose/foundation/text/UndoManager; +HSPLandroidx/compose/foundation/text/UndoManager;->(I)V +HSPLandroidx/compose/foundation/text/UndoManager;->(IILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/text/UndoManager;->makeSnapshot(Landroidx/compose/ui/text/input/TextFieldValue;)V +HSPLandroidx/compose/foundation/text/UndoManager;->snapshotIfNeeded$default(Landroidx/compose/foundation/text/UndoManager;Landroidx/compose/ui/text/input/TextFieldValue;JILjava/lang/Object;)V +HSPLandroidx/compose/foundation/text/UndoManager;->snapshotIfNeeded(Landroidx/compose/ui/text/input/TextFieldValue;J)V +Landroidx/compose/foundation/text/UndoManager$Entry; +HSPLandroidx/compose/foundation/text/UndoManager$Entry;->(Landroidx/compose/foundation/text/UndoManager$Entry;Landroidx/compose/ui/text/input/TextFieldValue;)V +Landroidx/compose/foundation/text/UndoManagerKt; +HSPLandroidx/compose/foundation/text/UndoManagerKt;->()V +HSPLandroidx/compose/foundation/text/UndoManagerKt;->getSNAPSHOTS_INTERVAL_MILLIS()I +Landroidx/compose/foundation/text/UndoManager_jvmKt; +HSPLandroidx/compose/foundation/text/UndoManager_jvmKt;->timeNowMillis()J +Landroidx/compose/foundation/text/ValidatingOffsetMapping; +HSPLandroidx/compose/foundation/text/ValidatingOffsetMapping;->(Landroidx/compose/ui/text/input/OffsetMapping;II)V +HSPLandroidx/compose/foundation/text/ValidatingOffsetMapping;->originalToTransformed(I)I +Landroidx/compose/foundation/text/ValidatingOffsetMappingKt; +HSPLandroidx/compose/foundation/text/ValidatingOffsetMappingKt;->()V +HSPLandroidx/compose/foundation/text/ValidatingOffsetMappingKt;->filterWithValidation(Landroidx/compose/ui/text/input/VisualTransformation;Landroidx/compose/ui/text/AnnotatedString;)Landroidx/compose/ui/text/input/TransformedText; +HSPLandroidx/compose/foundation/text/ValidatingOffsetMappingKt;->getValidatingEmptyOffsetMappingIdentity()Landroidx/compose/ui/text/input/OffsetMapping; +Landroidx/compose/foundation/text/modifiers/InlineDensity; +HSPLandroidx/compose/foundation/text/modifiers/InlineDensity;->()V +HSPLandroidx/compose/foundation/text/modifiers/InlineDensity;->access$getUnspecified$cp()J +HSPLandroidx/compose/foundation/text/modifiers/InlineDensity;->constructor-impl(FF)J +HSPLandroidx/compose/foundation/text/modifiers/InlineDensity;->constructor-impl(J)J +HSPLandroidx/compose/foundation/text/modifiers/InlineDensity;->constructor-impl(Landroidx/compose/ui/unit/Density;)J +HSPLandroidx/compose/foundation/text/modifiers/InlineDensity;->equals-impl0(JJ)Z +Landroidx/compose/foundation/text/modifiers/InlineDensity$Companion; +HSPLandroidx/compose/foundation/text/modifiers/InlineDensity$Companion;->()V +HSPLandroidx/compose/foundation/text/modifiers/InlineDensity$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/text/modifiers/InlineDensity$Companion;->getUnspecified-L26CHvs()J +Landroidx/compose/foundation/text/modifiers/LayoutUtilsKt; +HSPLandroidx/compose/foundation/text/modifiers/LayoutUtilsKt;->finalConstraints-tfFHcEY(JZIF)J +HSPLandroidx/compose/foundation/text/modifiers/LayoutUtilsKt;->finalMaxLines-xdlQI24(ZII)I +HSPLandroidx/compose/foundation/text/modifiers/LayoutUtilsKt;->finalMaxWidth-tfFHcEY(JZIF)I +Landroidx/compose/foundation/text/modifiers/MultiParagraphLayoutCache; +HSPLandroidx/compose/foundation/text/modifiers/MultiParagraphLayoutCache;->(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamily$Resolver;IZIILjava/util/List;)V +HSPLandroidx/compose/foundation/text/modifiers/MultiParagraphLayoutCache;->(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamily$Resolver;IZIILjava/util/List;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/text/modifiers/MultiParagraphLayoutCache;->getTextLayoutResult()Landroidx/compose/ui/text/TextLayoutResult; +HSPLandroidx/compose/foundation/text/modifiers/MultiParagraphLayoutCache;->layoutText-K40F9xA(JLandroidx/compose/ui/unit/LayoutDirection;)Landroidx/compose/ui/text/MultiParagraph; +HSPLandroidx/compose/foundation/text/modifiers/MultiParagraphLayoutCache;->layoutWithConstraints-K40F9xA(JLandroidx/compose/ui/unit/LayoutDirection;)Z +HSPLandroidx/compose/foundation/text/modifiers/MultiParagraphLayoutCache;->markDirty()V +HSPLandroidx/compose/foundation/text/modifiers/MultiParagraphLayoutCache;->newLayoutWillBeDifferent-VKLhPVY(Landroidx/compose/ui/text/TextLayoutResult;JLandroidx/compose/ui/unit/LayoutDirection;)Z +HSPLandroidx/compose/foundation/text/modifiers/MultiParagraphLayoutCache;->setDensity$foundation_release(Landroidx/compose/ui/unit/Density;)V +HSPLandroidx/compose/foundation/text/modifiers/MultiParagraphLayoutCache;->setLayoutDirection(Landroidx/compose/ui/unit/LayoutDirection;)Landroidx/compose/ui/text/MultiParagraphIntrinsics; +HSPLandroidx/compose/foundation/text/modifiers/MultiParagraphLayoutCache;->textLayoutResult-VKLhPVY(Landroidx/compose/ui/unit/LayoutDirection;JLandroidx/compose/ui/text/MultiParagraph;)Landroidx/compose/ui/text/TextLayoutResult; +HSPLandroidx/compose/foundation/text/modifiers/MultiParagraphLayoutCache;->update-ZNqEYIc(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamily$Resolver;IZIILjava/util/List;)V +Landroidx/compose/foundation/text/modifiers/SelectionController; +Landroidx/compose/foundation/text/modifiers/TextAnnotatedStringElement; +HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringElement;->(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamily$Resolver;Lkotlin/jvm/functions/Function1;IZIILjava/util/List;Lkotlin/jvm/functions/Function1;Landroidx/compose/foundation/text/modifiers/SelectionController;Landroidx/compose/ui/graphics/ColorProducer;)V +HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringElement;->(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamily$Resolver;Lkotlin/jvm/functions/Function1;IZIILjava/util/List;Lkotlin/jvm/functions/Function1;Landroidx/compose/foundation/text/modifiers/SelectionController;Landroidx/compose/ui/graphics/ColorProducer;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringElement;->create()Landroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode; +HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringElement;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringElement;->update(Landroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode;)V +HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringElement;->update(Landroidx/compose/ui/Modifier$Node;)V +Landroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode; +HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode;->(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamily$Resolver;Lkotlin/jvm/functions/Function1;IZIILjava/util/List;Lkotlin/jvm/functions/Function1;Landroidx/compose/foundation/text/modifiers/SelectionController;Landroidx/compose/ui/graphics/ColorProducer;)V +HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode;->(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamily$Resolver;Lkotlin/jvm/functions/Function1;IZIILjava/util/List;Lkotlin/jvm/functions/Function1;Landroidx/compose/foundation/text/modifiers/SelectionController;Landroidx/compose/ui/graphics/ColorProducer;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode;->applySemantics(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V +HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode;->doInvalidations(ZZZZ)V +HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V +HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode;->getLayoutCache()Landroidx/compose/foundation/text/modifiers/MultiParagraphLayoutCache; +HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode;->getLayoutCache(Landroidx/compose/ui/unit/Density;)Landroidx/compose/foundation/text/modifiers/MultiParagraphLayoutCache; +HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; +HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode;->updateCallbacks(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Landroidx/compose/foundation/text/modifiers/SelectionController;)Z +HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode;->updateDraw(Landroidx/compose/ui/graphics/ColorProducer;Landroidx/compose/ui/text/TextStyle;)Z +HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode;->updateLayoutRelatedArgs-MPT68mk(Landroidx/compose/ui/text/TextStyle;Ljava/util/List;IIZLandroidx/compose/ui/text/font/FontFamily$Resolver;I)Z +HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode;->updateText(Landroidx/compose/ui/text/AnnotatedString;)Z +Landroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode$applySemantics$1; +HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode$applySemantics$1;->(Landroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode;)V +Landroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode$measure$1; +HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode$measure$1;->(Landroidx/compose/ui/layout/Placeable;)V +HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/selection/MouseSelectionObserver; +Landroidx/compose/foundation/text/selection/SelectionMagnifierKt; +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt;->()V +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt;->access$getOffsetDisplacementThreshold$p()J +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt;->access$getUnspecifiedAnimationVector2D$p()Landroidx/compose/animation/core/AnimationVector2D; +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt;->access$getUnspecifiedSafeOffsetVectorConverter$p()Landroidx/compose/animation/core/TwoWayConverter; +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt;->access$rememberAnimatedMagnifierPosition$lambda$1(Landroidx/compose/runtime/State;)J +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt;->access$rememberAnimatedMagnifierPosition(Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State; +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt;->animatedSelectionMagnifier(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt;->rememberAnimatedMagnifierPosition$lambda$1(Landroidx/compose/runtime/State;)J +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt;->rememberAnimatedMagnifierPosition(Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State; +Landroidx/compose/foundation/text/selection/SelectionMagnifierKt$UnspecifiedSafeOffsetVectorConverter$1; +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt$UnspecifiedSafeOffsetVectorConverter$1;->()V +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt$UnspecifiedSafeOffsetVectorConverter$1;->()V +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt$UnspecifiedSafeOffsetVectorConverter$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt$UnspecifiedSafeOffsetVectorConverter$1;->invoke-k-4lQ0M(J)Landroidx/compose/animation/core/AnimationVector2D; +Landroidx/compose/foundation/text/selection/SelectionMagnifierKt$UnspecifiedSafeOffsetVectorConverter$2; +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt$UnspecifiedSafeOffsetVectorConverter$2;->()V +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt$UnspecifiedSafeOffsetVectorConverter$2;->()V +Landroidx/compose/foundation/text/selection/SelectionMagnifierKt$animatedSelectionMagnifier$1; +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt$animatedSelectionMagnifier$1;->(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt$animatedSelectionMagnifier$1;->access$invoke$lambda$0(Landroidx/compose/runtime/State;)J +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt$animatedSelectionMagnifier$1;->invoke$lambda$0(Landroidx/compose/runtime/State;)J +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt$animatedSelectionMagnifier$1;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt$animatedSelectionMagnifier$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/selection/SelectionMagnifierKt$animatedSelectionMagnifier$1$1$1; +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt$animatedSelectionMagnifier$1$1$1;->(Landroidx/compose/runtime/State;)V +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt$animatedSelectionMagnifier$1$1$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt$animatedSelectionMagnifier$1$1$1;->invoke-F1C5BW0()J +Landroidx/compose/foundation/text/selection/SelectionMagnifierKt$rememberAnimatedMagnifierPosition$1; +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt$rememberAnimatedMagnifierPosition$1;->(Landroidx/compose/runtime/State;Landroidx/compose/animation/core/Animatable;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt$rememberAnimatedMagnifierPosition$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt$rememberAnimatedMagnifierPosition$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/selection/SelectionMagnifierKt$rememberAnimatedMagnifierPosition$1$1; +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt$rememberAnimatedMagnifierPosition$1$1;->(Landroidx/compose/runtime/State;)V +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt$rememberAnimatedMagnifierPosition$1$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt$rememberAnimatedMagnifierPosition$1$1;->invoke-F1C5BW0()J +Landroidx/compose/foundation/text/selection/SelectionMagnifierKt$rememberAnimatedMagnifierPosition$1$2; +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt$rememberAnimatedMagnifierPosition$1$2;->(Landroidx/compose/animation/core/Animatable;Lkotlinx/coroutines/CoroutineScope;)V +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt$rememberAnimatedMagnifierPosition$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt$rememberAnimatedMagnifierPosition$1$2;->emit-3MmeM6k(JLkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/compose/foundation/text/selection/SelectionRegistrar; +Landroidx/compose/foundation/text/selection/SelectionRegistrarKt; +HSPLandroidx/compose/foundation/text/selection/SelectionRegistrarKt;->()V +HSPLandroidx/compose/foundation/text/selection/SelectionRegistrarKt;->getLocalSelectionRegistrar()Landroidx/compose/runtime/ProvidableCompositionLocal; +Landroidx/compose/foundation/text/selection/SelectionRegistrarKt$LocalSelectionRegistrar$1; +HSPLandroidx/compose/foundation/text/selection/SelectionRegistrarKt$LocalSelectionRegistrar$1;->()V +HSPLandroidx/compose/foundation/text/selection/SelectionRegistrarKt$LocalSelectionRegistrar$1;->()V +HSPLandroidx/compose/foundation/text/selection/SelectionRegistrarKt$LocalSelectionRegistrar$1;->invoke()Landroidx/compose/foundation/text/selection/SelectionRegistrar; +HSPLandroidx/compose/foundation/text/selection/SelectionRegistrarKt$LocalSelectionRegistrar$1;->invoke()Ljava/lang/Object; +Landroidx/compose/foundation/text/selection/SimpleLayoutKt; +HSPLandroidx/compose/foundation/text/selection/SimpleLayoutKt;->SimpleLayout(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V +Landroidx/compose/foundation/text/selection/SimpleLayoutKt$SimpleLayout$1; +HSPLandroidx/compose/foundation/text/selection/SimpleLayoutKt$SimpleLayout$1;->()V +HSPLandroidx/compose/foundation/text/selection/SimpleLayoutKt$SimpleLayout$1;->()V +HSPLandroidx/compose/foundation/text/selection/SimpleLayoutKt$SimpleLayout$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; +Landroidx/compose/foundation/text/selection/SimpleLayoutKt$SimpleLayout$1$measure$1; +HSPLandroidx/compose/foundation/text/selection/SimpleLayoutKt$SimpleLayout$1$measure$1;->(Ljava/util/List;)V +HSPLandroidx/compose/foundation/text/selection/SimpleLayoutKt$SimpleLayout$1$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/foundation/text/selection/SimpleLayoutKt$SimpleLayout$1$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/selection/TextFieldSelectionManager; +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager;->(Landroidx/compose/foundation/text/UndoManager;)V +PLandroidx/compose/foundation/text/selection/TextFieldSelectionManager;->deselect-_kEHs6E$foundation_release$default(Landroidx/compose/foundation/text/selection/TextFieldSelectionManager;Landroidx/compose/ui/geometry/Offset;ILjava/lang/Object;)V +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager;->deselect-_kEHs6E$foundation_release(Landroidx/compose/ui/geometry/Offset;)V +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager;->getDraggingHandle()Landroidx/compose/foundation/text/Handle; +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager;->getTouchSelectionObserver$foundation_release()Landroidx/compose/foundation/text/TextDragObserver; +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager;->getValue$foundation_release()Landroidx/compose/ui/text/input/TextFieldValue; +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager;->hideSelectionToolbar$foundation_release()V +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager;->setClipboardManager$foundation_release(Landroidx/compose/ui/platform/ClipboardManager;)V +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager;->setEditable(Z)V +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager;->setFocusRequester(Landroidx/compose/ui/focus/FocusRequester;)V +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager;->setHandleState(Landroidx/compose/foundation/text/HandleState;)V +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager;->setHapticFeedBack(Landroidx/compose/ui/hapticfeedback/HapticFeedback;)V +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager;->setOffsetMapping$foundation_release(Landroidx/compose/ui/text/input/OffsetMapping;)V +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager;->setOnValueChange$foundation_release(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager;->setState$foundation_release(Landroidx/compose/foundation/text/TextFieldState;)V +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager;->setTextToolbar(Landroidx/compose/ui/platform/TextToolbar;)V +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager;->setValue$foundation_release(Landroidx/compose/ui/text/input/TextFieldValue;)V +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager;->setVisualTransformation$foundation_release(Landroidx/compose/ui/text/input/VisualTransformation;)V +Landroidx/compose/foundation/text/selection/TextFieldSelectionManager$mouseSelectionObserver$1; +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager$mouseSelectionObserver$1;->(Landroidx/compose/foundation/text/selection/TextFieldSelectionManager;)V +Landroidx/compose/foundation/text/selection/TextFieldSelectionManager$onValueChange$1; +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager$onValueChange$1;->()V +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager$onValueChange$1;->()V +Landroidx/compose/foundation/text/selection/TextFieldSelectionManager$touchSelectionObserver$1; +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager$touchSelectionObserver$1;->(Landroidx/compose/foundation/text/selection/TextFieldSelectionManager;)V +Landroidx/compose/foundation/text/selection/TextFieldSelectionManagerKt; +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManagerKt;->calculateSelectionMagnifierCenterAndroid-O0kMr_c(Landroidx/compose/foundation/text/selection/TextFieldSelectionManager;J)J +Landroidx/compose/foundation/text/selection/TextFieldSelectionManager_androidKt; +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager_androidKt;->textFieldMagnifier(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/text/selection/TextFieldSelectionManager;)Landroidx/compose/ui/Modifier; +Landroidx/compose/foundation/text/selection/TextFieldSelectionManager_androidKt$textFieldMagnifier$1; +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager_androidKt$textFieldMagnifier$1;->(Landroidx/compose/foundation/text/selection/TextFieldSelectionManager;)V +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager_androidKt$textFieldMagnifier$1;->access$invoke$lambda$1(Landroidx/compose/runtime/MutableState;)J +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager_androidKt$textFieldMagnifier$1;->access$invoke$lambda$2(Landroidx/compose/runtime/MutableState;J)V +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager_androidKt$textFieldMagnifier$1;->invoke$lambda$1(Landroidx/compose/runtime/MutableState;)J +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager_androidKt$textFieldMagnifier$1;->invoke$lambda$2(Landroidx/compose/runtime/MutableState;J)V +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager_androidKt$textFieldMagnifier$1;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager_androidKt$textFieldMagnifier$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/selection/TextFieldSelectionManager_androidKt$textFieldMagnifier$1$1; +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager_androidKt$textFieldMagnifier$1$1;->(Landroidx/compose/foundation/text/selection/TextFieldSelectionManager;Landroidx/compose/runtime/MutableState;)V +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager_androidKt$textFieldMagnifier$1$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager_androidKt$textFieldMagnifier$1$1;->invoke-F1C5BW0()J +Landroidx/compose/foundation/text/selection/TextFieldSelectionManager_androidKt$textFieldMagnifier$1$2$1; +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager_androidKt$textFieldMagnifier$1$2$1;->(Landroidx/compose/ui/unit/Density;Landroidx/compose/runtime/MutableState;)V +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager_androidKt$textFieldMagnifier$1$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager_androidKt$textFieldMagnifier$1$2$1;->invoke(Lkotlin/jvm/functions/Function0;)Landroidx/compose/ui/Modifier; +Landroidx/compose/foundation/text/selection/TextFieldSelectionManager_androidKt$textFieldMagnifier$1$2$1$1; +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager_androidKt$textFieldMagnifier$1$2$1$1;->(Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager_androidKt$textFieldMagnifier$1$2$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager_androidKt$textFieldMagnifier$1$2$1$1;->invoke-tuRUvjQ(Landroidx/compose/ui/unit/Density;)J +Landroidx/compose/foundation/text/selection/TextFieldSelectionManager_androidKt$textFieldMagnifier$1$2$1$2; +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager_androidKt$textFieldMagnifier$1$2$1$2;->(Landroidx/compose/ui/unit/Density;Landroidx/compose/runtime/MutableState;)V +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager_androidKt$textFieldMagnifier$1$2$1$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager_androidKt$textFieldMagnifier$1$2$1$2;->invoke-EaSLcWc(J)V +Landroidx/compose/foundation/text/selection/TextPreparedSelectionState; +HSPLandroidx/compose/foundation/text/selection/TextPreparedSelectionState;->()V +Landroidx/compose/foundation/text/selection/TextSelectionColors; +HSPLandroidx/compose/foundation/text/selection/TextSelectionColors;->()V +HSPLandroidx/compose/foundation/text/selection/TextSelectionColors;->(JJ)V +HSPLandroidx/compose/foundation/text/selection/TextSelectionColors;->(JJLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/text/selection/TextSelectionColors;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/foundation/text/selection/TextSelectionColors;->getBackgroundColor-0d7_KjU()J +Landroidx/compose/foundation/text/selection/TextSelectionColorsKt; +HSPLandroidx/compose/foundation/text/selection/TextSelectionColorsKt;->()V +HSPLandroidx/compose/foundation/text/selection/TextSelectionColorsKt;->getLocalTextSelectionColors()Landroidx/compose/runtime/ProvidableCompositionLocal; +Landroidx/compose/foundation/text/selection/TextSelectionColorsKt$LocalTextSelectionColors$1; +HSPLandroidx/compose/foundation/text/selection/TextSelectionColorsKt$LocalTextSelectionColors$1;->()V +HSPLandroidx/compose/foundation/text/selection/TextSelectionColorsKt$LocalTextSelectionColors$1;->()V +Landroidx/compose/material/Colors; +HSPLandroidx/compose/material/Colors;->()V +HSPLandroidx/compose/material/Colors;->(JJJJJJJJJJJJZ)V +HSPLandroidx/compose/material/Colors;->(JJJJJJJJJJJJZLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/material/Colors;->copy-pvPzIIM$default(Landroidx/compose/material/Colors;JJJJJJJJJJJJZILjava/lang/Object;)Landroidx/compose/material/Colors; +HSPLandroidx/compose/material/Colors;->copy-pvPzIIM(JJJJJJJJJJJJZ)Landroidx/compose/material/Colors; +HSPLandroidx/compose/material/Colors;->getBackground-0d7_KjU()J +HSPLandroidx/compose/material/Colors;->getError-0d7_KjU()J +HSPLandroidx/compose/material/Colors;->getOnBackground-0d7_KjU()J +HSPLandroidx/compose/material/Colors;->getOnError-0d7_KjU()J +HSPLandroidx/compose/material/Colors;->getOnPrimary-0d7_KjU()J +HSPLandroidx/compose/material/Colors;->getOnSecondary-0d7_KjU()J +HSPLandroidx/compose/material/Colors;->getOnSurface-0d7_KjU()J +HSPLandroidx/compose/material/Colors;->getPrimary-0d7_KjU()J +HSPLandroidx/compose/material/Colors;->getPrimaryVariant-0d7_KjU()J +HSPLandroidx/compose/material/Colors;->getSecondary-0d7_KjU()J +HSPLandroidx/compose/material/Colors;->getSecondaryVariant-0d7_KjU()J +HSPLandroidx/compose/material/Colors;->getSurface-0d7_KjU()J +HSPLandroidx/compose/material/Colors;->isLight()Z +HSPLandroidx/compose/material/Colors;->setBackground-8_81llA$material_release(J)V +HSPLandroidx/compose/material/Colors;->setError-8_81llA$material_release(J)V +HSPLandroidx/compose/material/Colors;->setLight$material_release(Z)V +HSPLandroidx/compose/material/Colors;->setOnBackground-8_81llA$material_release(J)V +HSPLandroidx/compose/material/Colors;->setOnError-8_81llA$material_release(J)V +HSPLandroidx/compose/material/Colors;->setOnPrimary-8_81llA$material_release(J)V +HSPLandroidx/compose/material/Colors;->setOnSecondary-8_81llA$material_release(J)V +HSPLandroidx/compose/material/Colors;->setOnSurface-8_81llA$material_release(J)V +HSPLandroidx/compose/material/Colors;->setPrimary-8_81llA$material_release(J)V +HSPLandroidx/compose/material/Colors;->setPrimaryVariant-8_81llA$material_release(J)V +HSPLandroidx/compose/material/Colors;->setSecondary-8_81llA$material_release(J)V +HSPLandroidx/compose/material/Colors;->setSecondaryVariant-8_81llA$material_release(J)V +HSPLandroidx/compose/material/Colors;->setSurface-8_81llA$material_release(J)V +Landroidx/compose/material/ColorsKt; +HSPLandroidx/compose/material/ColorsKt;->()V +HSPLandroidx/compose/material/ColorsKt;->contentColorFor-4WTKRHQ(Landroidx/compose/material/Colors;J)J +HSPLandroidx/compose/material/ColorsKt;->getLocalColors()Landroidx/compose/runtime/ProvidableCompositionLocal; +HSPLandroidx/compose/material/ColorsKt;->lightColors-2qZNXz8$default(JJJJJJJJJJJJILjava/lang/Object;)Landroidx/compose/material/Colors; +HSPLandroidx/compose/material/ColorsKt;->lightColors-2qZNXz8(JJJJJJJJJJJJ)Landroidx/compose/material/Colors; +HSPLandroidx/compose/material/ColorsKt;->updateColorsFrom(Landroidx/compose/material/Colors;Landroidx/compose/material/Colors;)V +Landroidx/compose/material/ColorsKt$LocalColors$1; +HSPLandroidx/compose/material/ColorsKt$LocalColors$1;->()V +HSPLandroidx/compose/material/ColorsKt$LocalColors$1;->()V +HSPLandroidx/compose/material/ColorsKt$LocalColors$1;->invoke()Landroidx/compose/material/Colors; +HSPLandroidx/compose/material/ColorsKt$LocalColors$1;->invoke()Ljava/lang/Object; +Landroidx/compose/material/ContentAlpha; +HSPLandroidx/compose/material/ContentAlpha;->()V +HSPLandroidx/compose/material/ContentAlpha;->()V +HSPLandroidx/compose/material/ContentAlpha;->contentAlpha(FFLandroidx/compose/runtime/Composer;I)F +HSPLandroidx/compose/material/ContentAlpha;->getHigh(Landroidx/compose/runtime/Composer;I)F +HSPLandroidx/compose/material/ContentAlpha;->getMedium(Landroidx/compose/runtime/Composer;I)F +Landroidx/compose/material/ContentAlphaKt; +HSPLandroidx/compose/material/ContentAlphaKt;->()V +HSPLandroidx/compose/material/ContentAlphaKt;->getLocalContentAlpha()Landroidx/compose/runtime/ProvidableCompositionLocal; +Landroidx/compose/material/ContentAlphaKt$LocalContentAlpha$1; +HSPLandroidx/compose/material/ContentAlphaKt$LocalContentAlpha$1;->()V +HSPLandroidx/compose/material/ContentAlphaKt$LocalContentAlpha$1;->()V +Landroidx/compose/material/ContentColorKt; +HSPLandroidx/compose/material/ContentColorKt;->()V +HSPLandroidx/compose/material/ContentColorKt;->getLocalContentColor()Landroidx/compose/runtime/ProvidableCompositionLocal; +Landroidx/compose/material/ContentColorKt$LocalContentColor$1; +HSPLandroidx/compose/material/ContentColorKt$LocalContentColor$1;->()V +HSPLandroidx/compose/material/ContentColorKt$LocalContentColor$1;->()V +HSPLandroidx/compose/material/ContentColorKt$LocalContentColor$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/material/ContentColorKt$LocalContentColor$1;->invoke-0d7_KjU()J +Landroidx/compose/material/DefaultPlatformTextStyle_androidKt; +HSPLandroidx/compose/material/DefaultPlatformTextStyle_androidKt;->()V +HSPLandroidx/compose/material/DefaultPlatformTextStyle_androidKt;->defaultPlatformTextStyle()Landroidx/compose/ui/text/PlatformTextStyle; +Landroidx/compose/material/MaterialRippleTheme; +HSPLandroidx/compose/material/MaterialRippleTheme;->()V +HSPLandroidx/compose/material/MaterialRippleTheme;->()V +HSPLandroidx/compose/material/MaterialRippleTheme;->defaultColor-WaAFU9c(Landroidx/compose/runtime/Composer;I)J +HSPLandroidx/compose/material/MaterialRippleTheme;->rippleAlpha(Landroidx/compose/runtime/Composer;I)Landroidx/compose/material/ripple/RippleAlpha; +Landroidx/compose/material/MaterialTextSelectionColorsKt; +HSPLandroidx/compose/material/MaterialTextSelectionColorsKt;->calculateContrastRatio--OWjLjI(JJ)F +HSPLandroidx/compose/material/MaterialTextSelectionColorsKt;->calculateContrastRatio-nb2GgbA(JFJJ)F +HSPLandroidx/compose/material/MaterialTextSelectionColorsKt;->calculateSelectionBackgroundColor-ysEtTa8(JJJ)J +HSPLandroidx/compose/material/MaterialTextSelectionColorsKt;->rememberTextSelectionColors(Landroidx/compose/material/Colors;Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/text/selection/TextSelectionColors; +Landroidx/compose/material/MaterialTheme; +HSPLandroidx/compose/material/MaterialTheme;->()V +HSPLandroidx/compose/material/MaterialTheme;->()V +HSPLandroidx/compose/material/MaterialTheme;->getColors(Landroidx/compose/runtime/Composer;I)Landroidx/compose/material/Colors; +HSPLandroidx/compose/material/MaterialTheme;->getShapes(Landroidx/compose/runtime/Composer;I)Landroidx/compose/material/Shapes; +HSPLandroidx/compose/material/MaterialTheme;->getTypography(Landroidx/compose/runtime/Composer;I)Landroidx/compose/material/Typography; +Landroidx/compose/material/MaterialThemeKt; +HSPLandroidx/compose/material/MaterialThemeKt;->MaterialTheme(Landroidx/compose/material/Colors;Landroidx/compose/material/Typography;Landroidx/compose/material/Shapes;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V +Landroidx/compose/material/MaterialThemeKt$MaterialTheme$1; +HSPLandroidx/compose/material/MaterialThemeKt$MaterialTheme$1;->(Landroidx/compose/material/Typography;Lkotlin/jvm/functions/Function2;I)V +HSPLandroidx/compose/material/MaterialThemeKt$MaterialTheme$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/material/MaterialThemeKt$MaterialTheme$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material/MaterialThemeKt$MaterialTheme$1$1; +HSPLandroidx/compose/material/MaterialThemeKt$MaterialTheme$1$1;->(Lkotlin/jvm/functions/Function2;I)V +HSPLandroidx/compose/material/MaterialThemeKt$MaterialTheme$1$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/material/MaterialThemeKt$MaterialTheme$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material/MaterialThemeKt$MaterialTheme$2; +HSPLandroidx/compose/material/MaterialThemeKt$MaterialTheme$2;->(Landroidx/compose/material/Colors;Landroidx/compose/material/Typography;Landroidx/compose/material/Shapes;Lkotlin/jvm/functions/Function2;II)V +Landroidx/compose/material/MaterialTheme_androidKt; +HSPLandroidx/compose/material/MaterialTheme_androidKt;->PlatformMaterialTheme(Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V +Landroidx/compose/material/Shapes; +HSPLandroidx/compose/material/Shapes;->()V +HSPLandroidx/compose/material/Shapes;->(Landroidx/compose/foundation/shape/CornerBasedShape;Landroidx/compose/foundation/shape/CornerBasedShape;Landroidx/compose/foundation/shape/CornerBasedShape;)V +HSPLandroidx/compose/material/Shapes;->(Landroidx/compose/foundation/shape/CornerBasedShape;Landroidx/compose/foundation/shape/CornerBasedShape;Landroidx/compose/foundation/shape/CornerBasedShape;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/material/ShapesKt; +HSPLandroidx/compose/material/ShapesKt;->()V +HSPLandroidx/compose/material/ShapesKt;->getLocalShapes()Landroidx/compose/runtime/ProvidableCompositionLocal; +Landroidx/compose/material/ShapesKt$LocalShapes$1; +HSPLandroidx/compose/material/ShapesKt$LocalShapes$1;->()V +HSPLandroidx/compose/material/ShapesKt$LocalShapes$1;->()V +HSPLandroidx/compose/material/ShapesKt$LocalShapes$1;->invoke()Landroidx/compose/material/Shapes; +HSPLandroidx/compose/material/ShapesKt$LocalShapes$1;->invoke()Ljava/lang/Object; +Landroidx/compose/material/TextKt; +HSPLandroidx/compose/material/TextKt;->()V +HSPLandroidx/compose/material/TextKt;->ProvideTextStyle(Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V +Landroidx/compose/material/TextKt$LocalTextStyle$1; +HSPLandroidx/compose/material/TextKt$LocalTextStyle$1;->()V +HSPLandroidx/compose/material/TextKt$LocalTextStyle$1;->()V +HSPLandroidx/compose/material/TextKt$LocalTextStyle$1;->invoke()Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/material/TextKt$LocalTextStyle$1;->invoke()Ljava/lang/Object; +Landroidx/compose/material/Typography; +HSPLandroidx/compose/material/Typography;->()V +HSPLandroidx/compose/material/Typography;->(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 +HSPLandroidx/compose/material/Typography;->(Landroidx/compose/ui/text/font/FontFamily;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 +HSPLandroidx/compose/material/Typography;->(Landroidx/compose/ui/text/font/FontFamily;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;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/material/Typography;->getBody1()Landroidx/compose/ui/text/TextStyle; +Landroidx/compose/material/TypographyKt; +HSPLandroidx/compose/material/TypographyKt;->()V +HSPLandroidx/compose/material/TypographyKt;->access$withDefaultFontFamily(Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamily;)Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/material/TypographyKt;->getDefaultTextStyle()Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/material/TypographyKt;->getLocalTypography()Landroidx/compose/runtime/ProvidableCompositionLocal; +HSPLandroidx/compose/material/TypographyKt;->withDefaultFontFamily(Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamily;)Landroidx/compose/ui/text/TextStyle; +Landroidx/compose/material/TypographyKt$LocalTypography$1; +HSPLandroidx/compose/material/TypographyKt$LocalTypography$1;->()V +HSPLandroidx/compose/material/TypographyKt$LocalTypography$1;->()V +HSPLandroidx/compose/material/TypographyKt$LocalTypography$1;->invoke()Landroidx/compose/material/Typography; +HSPLandroidx/compose/material/TypographyKt$LocalTypography$1;->invoke()Ljava/lang/Object; +Landroidx/compose/material/icons/Icons$Filled; +HSPLandroidx/compose/material/icons/Icons$Filled;->()V +HSPLandroidx/compose/material/icons/Icons$Filled;->()V +Landroidx/compose/material/icons/Icons$Outlined; +HSPLandroidx/compose/material/icons/Icons$Outlined;->()V +HSPLandroidx/compose/material/icons/Icons$Outlined;->()V +Landroidx/compose/material/icons/filled/HomeKt; +HSPLandroidx/compose/material/icons/filled/HomeKt;->()V +HSPLandroidx/compose/material/icons/filled/HomeKt;->getHome(Landroidx/compose/material/icons/Icons$Filled;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/filled/PasswordKt; +HSPLandroidx/compose/material/icons/filled/PasswordKt;->()V +HSPLandroidx/compose/material/icons/filled/PasswordKt;->getPassword(Landroidx/compose/material/icons/Icons$Filled;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/filled/SecurityKt; +HSPLandroidx/compose/material/icons/filled/SecurityKt;->()V +HSPLandroidx/compose/material/icons/filled/SecurityKt;->getSecurity(Landroidx/compose/material/icons/Icons$Filled;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/filled/SendKt; +HSPLandroidx/compose/material/icons/filled/SendKt;->()V +HSPLandroidx/compose/material/icons/filled/SendKt;->getSend(Landroidx/compose/material/icons/Icons$Filled;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/filled/SettingsKt; +HSPLandroidx/compose/material/icons/filled/SettingsKt;->()V +HSPLandroidx/compose/material/icons/filled/SettingsKt;->getSettings(Landroidx/compose/material/icons/Icons$Filled;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/outlined/AddKt; +HSPLandroidx/compose/material/icons/outlined/AddKt;->()V +HSPLandroidx/compose/material/icons/outlined/AddKt;->getAdd(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/outlined/AttachmentKt; +HSPLandroidx/compose/material/icons/outlined/AttachmentKt;->()V +HSPLandroidx/compose/material/icons/outlined/AttachmentKt;->getAttachment(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/outlined/AutoAwesomeKt; +HSPLandroidx/compose/material/icons/outlined/AutoAwesomeKt;->()V +HSPLandroidx/compose/material/icons/outlined/AutoAwesomeKt;->getAutoAwesome(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/outlined/CalendarMonthKt; +HSPLandroidx/compose/material/icons/outlined/CalendarMonthKt;->()V +HSPLandroidx/compose/material/icons/outlined/CalendarMonthKt;->getCalendarMonth(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/outlined/ChevronRightKt; +HSPLandroidx/compose/material/icons/outlined/ChevronRightKt;->()V +HSPLandroidx/compose/material/icons/outlined/ChevronRightKt;->getChevronRight(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/outlined/ClearKt; +HSPLandroidx/compose/material/icons/outlined/ClearKt;->()V +HSPLandroidx/compose/material/icons/outlined/ClearKt;->getClear(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/outlined/CloudOffKt; +HSPLandroidx/compose/material/icons/outlined/CloudOffKt;->()V +HSPLandroidx/compose/material/icons/outlined/CloudOffKt;->getCloudOff(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/outlined/CreditCardKt; +HSPLandroidx/compose/material/icons/outlined/CreditCardKt;->()V +HSPLandroidx/compose/material/icons/outlined/CreditCardKt;->getCreditCard(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/outlined/DeleteKt; +HSPLandroidx/compose/material/icons/outlined/DeleteKt;->()V +HSPLandroidx/compose/material/icons/outlined/DeleteKt;->getDelete(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/outlined/ErrorOutlineKt; +HSPLandroidx/compose/material/icons/outlined/ErrorOutlineKt;->()V +HSPLandroidx/compose/material/icons/outlined/ErrorOutlineKt;->getErrorOutline(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/outlined/FilterAltKt; +HSPLandroidx/compose/material/icons/outlined/FilterAltKt;->()V +HSPLandroidx/compose/material/icons/outlined/FilterAltKt;->getFilterAlt(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/outlined/FolderOffKt; +HSPLandroidx/compose/material/icons/outlined/FolderOffKt;->()V +HSPLandroidx/compose/material/icons/outlined/FolderOffKt;->getFolderOff(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/outlined/HomeKt; +HSPLandroidx/compose/material/icons/outlined/HomeKt;->()V +HSPLandroidx/compose/material/icons/outlined/HomeKt;->getHome(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/outlined/InfoKt; +HSPLandroidx/compose/material/icons/outlined/InfoKt;->()V +HSPLandroidx/compose/material/icons/outlined/InfoKt;->getInfo(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/outlined/KeyKt; +HSPLandroidx/compose/material/icons/outlined/KeyKt;->()V +HSPLandroidx/compose/material/icons/outlined/KeyKt;->getKey(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/outlined/LockKt; +HSPLandroidx/compose/material/icons/outlined/LockKt;->()V +HSPLandroidx/compose/material/icons/outlined/LockKt;->getLock(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/outlined/LockOpenKt; +HSPLandroidx/compose/material/icons/outlined/LockOpenKt;->()V +HSPLandroidx/compose/material/icons/outlined/LockOpenKt;->getLockOpen(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/outlined/MoreVertKt; +HSPLandroidx/compose/material/icons/outlined/MoreVertKt;->()V +HSPLandroidx/compose/material/icons/outlined/MoreVertKt;->getMoreVert(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/outlined/NumbersKt; +HSPLandroidx/compose/material/icons/outlined/NumbersKt;->()V +HSPLandroidx/compose/material/icons/outlined/NumbersKt;->getNumbers(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/outlined/PasswordKt; +HSPLandroidx/compose/material/icons/outlined/PasswordKt;->()V +HSPLandroidx/compose/material/icons/outlined/PasswordKt;->getPassword(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/outlined/PermIdentityKt; +HSPLandroidx/compose/material/icons/outlined/PermIdentityKt;->()V +HSPLandroidx/compose/material/icons/outlined/PermIdentityKt;->getPermIdentity(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/outlined/PersonAddKt; +HSPLandroidx/compose/material/icons/outlined/PersonAddKt;->()V +HSPLandroidx/compose/material/icons/outlined/PersonAddKt;->getPersonAdd(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/outlined/SearchKt; +HSPLandroidx/compose/material/icons/outlined/SearchKt;->()V +HSPLandroidx/compose/material/icons/outlined/SearchKt;->getSearch(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/outlined/SecurityKt; +HSPLandroidx/compose/material/icons/outlined/SecurityKt;->()V +HSPLandroidx/compose/material/icons/outlined/SecurityKt;->getSecurity(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/outlined/SendKt; +HSPLandroidx/compose/material/icons/outlined/SendKt;->()V +HSPLandroidx/compose/material/icons/outlined/SendKt;->getSend(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/outlined/SettingsKt; +HSPLandroidx/compose/material/icons/outlined/SettingsKt;->()V +HSPLandroidx/compose/material/icons/outlined/SettingsKt;->getSettings(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/outlined/SortByAlphaKt; +HSPLandroidx/compose/material/icons/outlined/SortByAlphaKt;->()V +HSPLandroidx/compose/material/icons/outlined/SortByAlphaKt;->getSortByAlpha(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/outlined/StickyNote2Kt; +HSPLandroidx/compose/material/icons/outlined/StickyNote2Kt;->()V +HSPLandroidx/compose/material/icons/outlined/StickyNote2Kt;->getStickyNote2(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/outlined/VisibilityOffKt; +HSPLandroidx/compose/material/icons/outlined/VisibilityOffKt;->()V +HSPLandroidx/compose/material/icons/outlined/VisibilityOffKt;->getVisibilityOff(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/pullrefresh/PullRefreshDefaults; +HSPLandroidx/compose/material/pullrefresh/PullRefreshDefaults;->()V +HSPLandroidx/compose/material/pullrefresh/PullRefreshDefaults;->()V +HSPLandroidx/compose/material/pullrefresh/PullRefreshDefaults;->getRefreshThreshold-D9Ej5fM()F +HSPLandroidx/compose/material/pullrefresh/PullRefreshDefaults;->getRefreshingOffset-D9Ej5fM()F +Landroidx/compose/material/pullrefresh/PullRefreshKt; +HSPLandroidx/compose/material/pullrefresh/PullRefreshKt;->pullRefresh$default(Landroidx/compose/ui/Modifier;Landroidx/compose/material/pullrefresh/PullRefreshState;ZILjava/lang/Object;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/material/pullrefresh/PullRefreshKt;->pullRefresh(Landroidx/compose/ui/Modifier;Landroidx/compose/material/pullrefresh/PullRefreshState;Z)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/material/pullrefresh/PullRefreshKt;->pullRefresh(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;Z)Landroidx/compose/ui/Modifier; +Landroidx/compose/material/pullrefresh/PullRefreshKt$pullRefresh$2$1; +HSPLandroidx/compose/material/pullrefresh/PullRefreshKt$pullRefresh$2$1;->(Ljava/lang/Object;)V +Landroidx/compose/material/pullrefresh/PullRefreshKt$pullRefresh$2$2; +HSPLandroidx/compose/material/pullrefresh/PullRefreshKt$pullRefresh$2$2;->(Ljava/lang/Object;)V +Landroidx/compose/material/pullrefresh/PullRefreshNestedScrollConnection; +HSPLandroidx/compose/material/pullrefresh/PullRefreshNestedScrollConnection;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;Z)V +Landroidx/compose/material/pullrefresh/PullRefreshState; +HSPLandroidx/compose/material/pullrefresh/PullRefreshState;->()V +HSPLandroidx/compose/material/pullrefresh/PullRefreshState;->(Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/runtime/State;FF)V +HSPLandroidx/compose/material/pullrefresh/PullRefreshState;->access$getDistancePulled(Landroidx/compose/material/pullrefresh/PullRefreshState;)F +HSPLandroidx/compose/material/pullrefresh/PullRefreshState;->getAdjustedDistancePulled()F +HSPLandroidx/compose/material/pullrefresh/PullRefreshState;->getDistancePulled()F +HSPLandroidx/compose/material/pullrefresh/PullRefreshState;->getProgress()F +HSPLandroidx/compose/material/pullrefresh/PullRefreshState;->getThreshold$material_release()F +HSPLandroidx/compose/material/pullrefresh/PullRefreshState;->get_refreshing()Z +HSPLandroidx/compose/material/pullrefresh/PullRefreshState;->get_refreshingOffset()F +HSPLandroidx/compose/material/pullrefresh/PullRefreshState;->get_threshold()F +HSPLandroidx/compose/material/pullrefresh/PullRefreshState;->setRefreshing$material_release(Z)V +HSPLandroidx/compose/material/pullrefresh/PullRefreshState;->setRefreshingOffset$material_release(F)V +HSPLandroidx/compose/material/pullrefresh/PullRefreshState;->setThreshold$material_release(F)V +HSPLandroidx/compose/material/pullrefresh/PullRefreshState;->set_threshold(F)V +Landroidx/compose/material/pullrefresh/PullRefreshState$adjustedDistancePulled$2; +HSPLandroidx/compose/material/pullrefresh/PullRefreshState$adjustedDistancePulled$2;->(Landroidx/compose/material/pullrefresh/PullRefreshState;)V +HSPLandroidx/compose/material/pullrefresh/PullRefreshState$adjustedDistancePulled$2;->invoke()Ljava/lang/Float; +HSPLandroidx/compose/material/pullrefresh/PullRefreshState$adjustedDistancePulled$2;->invoke()Ljava/lang/Object; +Landroidx/compose/material/pullrefresh/PullRefreshStateKt; +HSPLandroidx/compose/material/pullrefresh/PullRefreshStateKt;->rememberPullRefreshState-UuyPYSY(ZLkotlin/jvm/functions/Function0;FFLandroidx/compose/runtime/Composer;II)Landroidx/compose/material/pullrefresh/PullRefreshState; +Landroidx/compose/material/pullrefresh/PullRefreshStateKt$rememberPullRefreshState$3; +HSPLandroidx/compose/material/pullrefresh/PullRefreshStateKt$rememberPullRefreshState$3;->(Landroidx/compose/material/pullrefresh/PullRefreshState;ZLkotlin/jvm/internal/Ref$FloatRef;Lkotlin/jvm/internal/Ref$FloatRef;)V +HSPLandroidx/compose/material/pullrefresh/PullRefreshStateKt$rememberPullRefreshState$3;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/material/pullrefresh/PullRefreshStateKt$rememberPullRefreshState$3;->invoke()V +Landroidx/compose/material/ripple/AndroidRippleIndicationInstance; +HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->(ZFLandroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/material/ripple/RippleContainer;)V +HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->(ZFLandroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/material/ripple/RippleContainer;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->access$getInvalidateTick(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;)Z +HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->access$setInvalidateTick(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;Z)V +HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->addRipple(Landroidx/compose/foundation/interaction/PressInteraction$Press;Lkotlinx/coroutines/CoroutineScope;)V +HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->dispose()V +HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->drawIndication(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V +HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->getInvalidateTick()Z +HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->getRippleHostView()Landroidx/compose/material/ripple/RippleHostView; +HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->onForgotten()V +HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->onRemembered()V +HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->removeRipple(Landroidx/compose/foundation/interaction/PressInteraction$Press;)V +HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->resetHostView()V +HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->setInvalidateTick(Z)V +HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->setRippleHostView(Landroidx/compose/material/ripple/RippleHostView;)V +Landroidx/compose/material/ripple/AndroidRippleIndicationInstance$onInvalidateRipple$1; +HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance$onInvalidateRipple$1;->(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;)V +HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance$onInvalidateRipple$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance$onInvalidateRipple$1;->invoke()V +Landroidx/compose/material/ripple/PlatformRipple; +HSPLandroidx/compose/material/ripple/PlatformRipple;->(ZFLandroidx/compose/runtime/State;)V +HSPLandroidx/compose/material/ripple/PlatformRipple;->(ZFLandroidx/compose/runtime/State;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/material/ripple/PlatformRipple;->findNearestViewGroup(Landroidx/compose/runtime/Composer;I)Landroid/view/ViewGroup; +HSPLandroidx/compose/material/ripple/PlatformRipple;->rememberUpdatedRippleInstance-942rkJo(Landroidx/compose/foundation/interaction/InteractionSource;ZFLandroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/runtime/Composer;I)Landroidx/compose/material/ripple/RippleIndicationInstance; +Landroidx/compose/material/ripple/Ripple; +HSPLandroidx/compose/material/ripple/Ripple;->(ZFLandroidx/compose/runtime/State;)V +HSPLandroidx/compose/material/ripple/Ripple;->(ZFLandroidx/compose/runtime/State;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/material/ripple/Ripple;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/material/ripple/Ripple;->rememberUpdatedInstance(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/IndicationInstance; +Landroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1; +HSPLandroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1;->(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/material/ripple/RippleIndicationInstance;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1$1; +HSPLandroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1$1;->(Landroidx/compose/material/ripple/RippleIndicationInstance;Lkotlinx/coroutines/CoroutineScope;)V +HSPLandroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1$1;->emit(Landroidx/compose/foundation/interaction/Interaction;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/compose/material/ripple/RippleAlpha; +HSPLandroidx/compose/material/ripple/RippleAlpha;->()V +HSPLandroidx/compose/material/ripple/RippleAlpha;->(FFFF)V +HSPLandroidx/compose/material/ripple/RippleAlpha;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/material/ripple/RippleAlpha;->getPressedAlpha()F +Landroidx/compose/material/ripple/RippleAnimationKt; +HSPLandroidx/compose/material/ripple/RippleAnimationKt;->()V +HSPLandroidx/compose/material/ripple/RippleAnimationKt;->getRippleEndRadius-cSwnlzA(Landroidx/compose/ui/unit/Density;ZJ)F +Landroidx/compose/material/ripple/RippleContainer; +HSPLandroidx/compose/material/ripple/RippleContainer;->(Landroid/content/Context;)V +HSPLandroidx/compose/material/ripple/RippleContainer;->disposeRippleIfNeeded(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;)V +HSPLandroidx/compose/material/ripple/RippleContainer;->getRippleHostView(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;)Landroidx/compose/material/ripple/RippleHostView; +Landroidx/compose/material/ripple/RippleHostMap; +HSPLandroidx/compose/material/ripple/RippleHostMap;->()V +HSPLandroidx/compose/material/ripple/RippleHostMap;->get(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;)Landroidx/compose/material/ripple/RippleHostView; +HSPLandroidx/compose/material/ripple/RippleHostMap;->remove(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;)V +HSPLandroidx/compose/material/ripple/RippleHostMap;->set(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;Landroidx/compose/material/ripple/RippleHostView;)V +Landroidx/compose/material/ripple/RippleHostView; +HSPLandroidx/compose/material/ripple/RippleHostView;->$r8$lambda$4nztiuYeQHklB-09QfMAnp7Ay8E(Landroidx/compose/material/ripple/RippleHostView;)V +HSPLandroidx/compose/material/ripple/RippleHostView;->()V +HSPLandroidx/compose/material/ripple/RippleHostView;->(Landroid/content/Context;)V +HSPLandroidx/compose/material/ripple/RippleHostView;->addRipple-KOepWvA(Landroidx/compose/foundation/interaction/PressInteraction$Press;ZJIJFLkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/material/ripple/RippleHostView;->createRipple(Z)V +HSPLandroidx/compose/material/ripple/RippleHostView;->disposeRipple()V +HSPLandroidx/compose/material/ripple/RippleHostView;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V +HSPLandroidx/compose/material/ripple/RippleHostView;->refreshDrawableState()V +HSPLandroidx/compose/material/ripple/RippleHostView;->removeRipple()V +HSPLandroidx/compose/material/ripple/RippleHostView;->setRippleState$lambda$2(Landroidx/compose/material/ripple/RippleHostView;)V +HSPLandroidx/compose/material/ripple/RippleHostView;->setRippleState(Z)V +HSPLandroidx/compose/material/ripple/RippleHostView;->updateRippleProperties-biQXAtU(JIJF)V +Landroidx/compose/material/ripple/RippleHostView$$ExternalSyntheticLambda0; +HSPLandroidx/compose/material/ripple/RippleHostView$$ExternalSyntheticLambda0;->run()V +Landroidx/compose/material/ripple/RippleHostView$Companion; +HSPLandroidx/compose/material/ripple/RippleHostView$Companion;->()V +HSPLandroidx/compose/material/ripple/RippleHostView$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/material/ripple/RippleIndicationInstance; +HSPLandroidx/compose/material/ripple/RippleIndicationInstance;->(ZLandroidx/compose/runtime/State;)V +HSPLandroidx/compose/material/ripple/RippleIndicationInstance;->drawStateLayer-H2RKhps(Landroidx/compose/ui/graphics/drawscope/DrawScope;FJ)V +Landroidx/compose/material/ripple/RippleKt; +HSPLandroidx/compose/material/ripple/RippleKt;->()V +HSPLandroidx/compose/material/ripple/RippleKt;->rememberRipple-9IZ8Weo(ZFJLandroidx/compose/runtime/Composer;II)Landroidx/compose/foundation/Indication; +Landroidx/compose/material/ripple/RippleTheme; +HSPLandroidx/compose/material/ripple/RippleTheme;->()V +Landroidx/compose/material/ripple/RippleTheme$Companion; +HSPLandroidx/compose/material/ripple/RippleTheme$Companion;->()V +HSPLandroidx/compose/material/ripple/RippleTheme$Companion;->()V +HSPLandroidx/compose/material/ripple/RippleTheme$Companion;->defaultRippleAlpha-DxMtmZc(JZ)Landroidx/compose/material/ripple/RippleAlpha; +HSPLandroidx/compose/material/ripple/RippleTheme$Companion;->defaultRippleColor-5vOe2sY(JZ)J +Landroidx/compose/material/ripple/RippleThemeKt; +HSPLandroidx/compose/material/ripple/RippleThemeKt;->()V +HSPLandroidx/compose/material/ripple/RippleThemeKt;->access$getLightThemeLowContrastRippleAlpha$p()Landroidx/compose/material/ripple/RippleAlpha; +HSPLandroidx/compose/material/ripple/RippleThemeKt;->getLocalRippleTheme()Landroidx/compose/runtime/ProvidableCompositionLocal; +Landroidx/compose/material/ripple/RippleThemeKt$LocalRippleTheme$1; +HSPLandroidx/compose/material/ripple/RippleThemeKt$LocalRippleTheme$1;->()V +HSPLandroidx/compose/material/ripple/RippleThemeKt$LocalRippleTheme$1;->()V +Landroidx/compose/material/ripple/StateLayer; +HSPLandroidx/compose/material/ripple/StateLayer;->(ZLandroidx/compose/runtime/State;)V +HSPLandroidx/compose/material/ripple/StateLayer;->drawStateLayer-H2RKhps(Landroidx/compose/ui/graphics/drawscope/DrawScope;FJ)V +Landroidx/compose/material/ripple/UnprojectedRipple; +HSPLandroidx/compose/material/ripple/UnprojectedRipple;->()V +HSPLandroidx/compose/material/ripple/UnprojectedRipple;->(Z)V +HSPLandroidx/compose/material/ripple/UnprojectedRipple;->calculateRippleColor-5vOe2sY(JF)J +HSPLandroidx/compose/material/ripple/UnprojectedRipple;->getDirtyBounds()Landroid/graphics/Rect; +HSPLandroidx/compose/material/ripple/UnprojectedRipple;->isProjected()Z +HSPLandroidx/compose/material/ripple/UnprojectedRipple;->setColor-DxMtmZc(JF)V +HSPLandroidx/compose/material/ripple/UnprojectedRipple;->trySetRadius(I)V +Landroidx/compose/material/ripple/UnprojectedRipple$Companion; +HSPLandroidx/compose/material/ripple/UnprojectedRipple$Companion;->()V +HSPLandroidx/compose/material/ripple/UnprojectedRipple$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/material/ripple/UnprojectedRipple$MRadiusHelper; +HSPLandroidx/compose/material/ripple/UnprojectedRipple$MRadiusHelper;->()V +HSPLandroidx/compose/material/ripple/UnprojectedRipple$MRadiusHelper;->()V +HSPLandroidx/compose/material/ripple/UnprojectedRipple$MRadiusHelper;->setRadius(Landroid/graphics/drawable/RippleDrawable;I)V +Landroidx/compose/material3/AndroidMenu_androidKt; +HSPLandroidx/compose/material3/AndroidMenu_androidKt;->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 +Landroidx/compose/material3/AndroidMenu_androidKt$DropdownMenu$2; +HSPLandroidx/compose/material3/AndroidMenu_androidKt$DropdownMenu$2;->(ZLkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;JLandroidx/compose/ui/window/PopupProperties;Lkotlin/jvm/functions/Function3;II)V +Landroidx/compose/material3/AppBarKt; +HSPLandroidx/compose/material3/AppBarKt;->()V +HSPLandroidx/compose/material3/AppBarKt;->rememberTopAppBarState(FFFLandroidx/compose/runtime/Composer;II)Landroidx/compose/material3/TopAppBarState; +Landroidx/compose/material3/AppBarKt$rememberTopAppBarState$1$1; +HSPLandroidx/compose/material3/AppBarKt$rememberTopAppBarState$1$1;->(FFF)V +HSPLandroidx/compose/material3/AppBarKt$rememberTopAppBarState$1$1;->invoke()Landroidx/compose/material3/TopAppBarState; +HSPLandroidx/compose/material3/AppBarKt$rememberTopAppBarState$1$1;->invoke()Ljava/lang/Object; +Landroidx/compose/material3/ButtonColors; +HSPLandroidx/compose/material3/ButtonColors;->()V +HSPLandroidx/compose/material3/ButtonColors;->(JJJJ)V +HSPLandroidx/compose/material3/ButtonColors;->(JJJJLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/material3/ButtonColors;->containerColor$material3_release(ZLandroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State; +HSPLandroidx/compose/material3/ButtonColors;->contentColor$material3_release(ZLandroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State; +Landroidx/compose/material3/ButtonDefaults; +HSPLandroidx/compose/material3/ButtonDefaults;->()V +HSPLandroidx/compose/material3/ButtonDefaults;->()V +HSPLandroidx/compose/material3/ButtonDefaults;->buttonColors-ro_MJ88(JJJJLandroidx/compose/runtime/Composer;II)Landroidx/compose/material3/ButtonColors; +HSPLandroidx/compose/material3/ButtonDefaults;->buttonElevation-R_JCAzs(FFFFFLandroidx/compose/runtime/Composer;II)Landroidx/compose/material3/ButtonElevation; +HSPLandroidx/compose/material3/ButtonDefaults;->getContentPadding()Landroidx/compose/foundation/layout/PaddingValues; +HSPLandroidx/compose/material3/ButtonDefaults;->getMinHeight-D9Ej5fM()F +HSPLandroidx/compose/material3/ButtonDefaults;->getMinWidth-D9Ej5fM()F +HSPLandroidx/compose/material3/ButtonDefaults;->getShape(Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/graphics/Shape; +Landroidx/compose/material3/ButtonElevation; +HSPLandroidx/compose/material3/ButtonElevation;->()V +HSPLandroidx/compose/material3/ButtonElevation;->(FFFFF)V +HSPLandroidx/compose/material3/ButtonElevation;->(FFFFFLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/material3/ButtonElevation;->access$getPressedElevation$p(Landroidx/compose/material3/ButtonElevation;)F +HSPLandroidx/compose/material3/ButtonElevation;->animateElevation(ZLandroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State; +HSPLandroidx/compose/material3/ButtonElevation;->shadowElevation$material3_release(ZLandroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State; +HSPLandroidx/compose/material3/ButtonElevation;->tonalElevation$material3_release(ZLandroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State; +Landroidx/compose/material3/ButtonElevation$animateElevation$1$1; +HSPLandroidx/compose/material3/ButtonElevation$animateElevation$1$1;->(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/snapshots/SnapshotStateList;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/material3/ButtonElevation$animateElevation$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/material3/ButtonElevation$animateElevation$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/ButtonElevation$animateElevation$1$1$1; +HSPLandroidx/compose/material3/ButtonElevation$animateElevation$1$1$1;->(Landroidx/compose/runtime/snapshots/SnapshotStateList;)V +HSPLandroidx/compose/material3/ButtonElevation$animateElevation$1$1$1;->emit(Landroidx/compose/foundation/interaction/Interaction;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/material3/ButtonElevation$animateElevation$1$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/compose/material3/ButtonElevation$animateElevation$2; +HSPLandroidx/compose/material3/ButtonElevation$animateElevation$2;->(Landroidx/compose/animation/core/Animatable;FLkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/material3/ButtonElevation$animateElevation$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/material3/ButtonElevation$animateElevation$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/ButtonElevation$animateElevation$3; +HSPLandroidx/compose/material3/ButtonElevation$animateElevation$3;->(Landroidx/compose/animation/core/Animatable;Landroidx/compose/material3/ButtonElevation;FLandroidx/compose/foundation/interaction/Interaction;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/material3/ButtonElevation$animateElevation$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/material3/ButtonElevation$animateElevation$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/ButtonKt; +HSPLandroidx/compose/material3/ButtonKt;->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 +Landroidx/compose/material3/ButtonKt$Button$2; +HSPLandroidx/compose/material3/ButtonKt$Button$2;->()V +HSPLandroidx/compose/material3/ButtonKt$Button$2;->()V +HSPLandroidx/compose/material3/ButtonKt$Button$2;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V +HSPLandroidx/compose/material3/ButtonKt$Button$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/ButtonKt$Button$3; +HSPLandroidx/compose/material3/ButtonKt$Button$3;->(JLandroidx/compose/foundation/layout/PaddingValues;Lkotlin/jvm/functions/Function3;I)V +HSPLandroidx/compose/material3/ButtonKt$Button$3;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/material3/ButtonKt$Button$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/ButtonKt$Button$3$1; +HSPLandroidx/compose/material3/ButtonKt$Button$3$1;->(Landroidx/compose/foundation/layout/PaddingValues;Lkotlin/jvm/functions/Function3;I)V +HSPLandroidx/compose/material3/ButtonKt$Button$3$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/material3/ButtonKt$Button$3$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/ButtonKt$Button$3$1$1; +HSPLandroidx/compose/material3/ButtonKt$Button$3$1$1;->(Landroidx/compose/foundation/layout/PaddingValues;Lkotlin/jvm/functions/Function3;I)V +HSPLandroidx/compose/material3/ButtonKt$Button$3$1$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/material3/ButtonKt$Button$3$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/ButtonKt$Button$4; +HSPLandroidx/compose/material3/ButtonKt$Button$4;->(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;II)V +HSPLandroidx/compose/material3/ButtonKt$Button$4;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/material3/ButtonKt$Button$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/CheckDrawingCache; +HSPLandroidx/compose/material3/CheckDrawingCache;->(Landroidx/compose/ui/graphics/Path;Landroidx/compose/ui/graphics/PathMeasure;Landroidx/compose/ui/graphics/Path;)V +HSPLandroidx/compose/material3/CheckDrawingCache;->(Landroidx/compose/ui/graphics/Path;Landroidx/compose/ui/graphics/PathMeasure;Landroidx/compose/ui/graphics/Path;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/material3/CheckDrawingCache;->getCheckPath()Landroidx/compose/ui/graphics/Path; +HSPLandroidx/compose/material3/CheckDrawingCache;->getPathMeasure()Landroidx/compose/ui/graphics/PathMeasure; +HSPLandroidx/compose/material3/CheckDrawingCache;->getPathToDraw()Landroidx/compose/ui/graphics/Path; +Landroidx/compose/material3/CheckboxColors; +HSPLandroidx/compose/material3/CheckboxColors;->()V +HSPLandroidx/compose/material3/CheckboxColors;->(JJJJJJJJJJJ)V +HSPLandroidx/compose/material3/CheckboxColors;->(JJJJJJJJJJJLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/material3/CheckboxColors;->borderColor$material3_release(ZLandroidx/compose/ui/state/ToggleableState;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State; +HSPLandroidx/compose/material3/CheckboxColors;->boxColor$material3_release(ZLandroidx/compose/ui/state/ToggleableState;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State; +HSPLandroidx/compose/material3/CheckboxColors;->checkmarkColor$material3_release(Landroidx/compose/ui/state/ToggleableState;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State; +Landroidx/compose/material3/CheckboxColors$WhenMappings; +HSPLandroidx/compose/material3/CheckboxColors$WhenMappings;->()V +Landroidx/compose/material3/CheckboxDefaults; +HSPLandroidx/compose/material3/CheckboxDefaults;->()V +HSPLandroidx/compose/material3/CheckboxDefaults;->()V +HSPLandroidx/compose/material3/CheckboxDefaults;->colors-5tl4gsc(JJJJJJLandroidx/compose/runtime/Composer;II)Landroidx/compose/material3/CheckboxColors; +Landroidx/compose/material3/CheckboxKt; +HSPLandroidx/compose/material3/CheckboxKt;->()V +HSPLandroidx/compose/material3/CheckboxKt;->Checkbox(ZLkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;ZLandroidx/compose/material3/CheckboxColors;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/Composer;II)V +HSPLandroidx/compose/material3/CheckboxKt;->CheckboxImpl(ZLandroidx/compose/ui/state/ToggleableState;Landroidx/compose/ui/Modifier;Landroidx/compose/material3/CheckboxColors;Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/material3/CheckboxKt;->TriStateCheckbox(Landroidx/compose/ui/state/ToggleableState;Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLandroidx/compose/material3/CheckboxColors;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/Composer;II)V +HSPLandroidx/compose/material3/CheckboxKt;->access$drawBox-1wkBAMs(Landroidx/compose/ui/graphics/drawscope/DrawScope;JJFF)V +HSPLandroidx/compose/material3/CheckboxKt;->access$drawCheck-3IgeMak(Landroidx/compose/ui/graphics/drawscope/DrawScope;JFFFLandroidx/compose/material3/CheckDrawingCache;)V +HSPLandroidx/compose/material3/CheckboxKt;->access$getRadiusSize$p()F +HSPLandroidx/compose/material3/CheckboxKt;->access$getStrokeWidth$p()F +HSPLandroidx/compose/material3/CheckboxKt;->drawBox-1wkBAMs(Landroidx/compose/ui/graphics/drawscope/DrawScope;JJFF)V +HSPLandroidx/compose/material3/CheckboxKt;->drawCheck-3IgeMak(Landroidx/compose/ui/graphics/drawscope/DrawScope;JFFFLandroidx/compose/material3/CheckDrawingCache;)V +Landroidx/compose/material3/CheckboxKt$Checkbox$3; +HSPLandroidx/compose/material3/CheckboxKt$Checkbox$3;->(ZLkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;ZLandroidx/compose/material3/CheckboxColors;Landroidx/compose/foundation/interaction/MutableInteractionSource;II)V +Landroidx/compose/material3/CheckboxKt$CheckboxImpl$1$1; +HSPLandroidx/compose/material3/CheckboxKt$CheckboxImpl$1$1;->(Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/material3/CheckDrawingCache;)V +HSPLandroidx/compose/material3/CheckboxKt$CheckboxImpl$1$1;->invoke(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V +HSPLandroidx/compose/material3/CheckboxKt$CheckboxImpl$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/CheckboxKt$CheckboxImpl$2; +HSPLandroidx/compose/material3/CheckboxKt$CheckboxImpl$2;->(ZLandroidx/compose/ui/state/ToggleableState;Landroidx/compose/ui/Modifier;Landroidx/compose/material3/CheckboxColors;I)V +Landroidx/compose/material3/CheckboxKt$CheckboxImpl$checkCenterGravitationShiftFraction$1; +HSPLandroidx/compose/material3/CheckboxKt$CheckboxImpl$checkCenterGravitationShiftFraction$1;->()V +HSPLandroidx/compose/material3/CheckboxKt$CheckboxImpl$checkCenterGravitationShiftFraction$1;->()V +HSPLandroidx/compose/material3/CheckboxKt$CheckboxImpl$checkCenterGravitationShiftFraction$1;->invoke(Landroidx/compose/animation/core/Transition$Segment;Landroidx/compose/runtime/Composer;I)Landroidx/compose/animation/core/FiniteAnimationSpec; +HSPLandroidx/compose/material3/CheckboxKt$CheckboxImpl$checkCenterGravitationShiftFraction$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/CheckboxKt$CheckboxImpl$checkDrawFraction$1; +HSPLandroidx/compose/material3/CheckboxKt$CheckboxImpl$checkDrawFraction$1;->()V +HSPLandroidx/compose/material3/CheckboxKt$CheckboxImpl$checkDrawFraction$1;->()V +HSPLandroidx/compose/material3/CheckboxKt$CheckboxImpl$checkDrawFraction$1;->invoke(Landroidx/compose/animation/core/Transition$Segment;Landroidx/compose/runtime/Composer;I)Landroidx/compose/animation/core/FiniteAnimationSpec; +HSPLandroidx/compose/material3/CheckboxKt$CheckboxImpl$checkDrawFraction$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/CheckboxKt$WhenMappings; +HSPLandroidx/compose/material3/CheckboxKt$WhenMappings;->()V +Landroidx/compose/material3/ColorResourceHelper; +HSPLandroidx/compose/material3/ColorResourceHelper;->()V +HSPLandroidx/compose/material3/ColorResourceHelper;->()V +HSPLandroidx/compose/material3/ColorResourceHelper;->getColor-WaAFU9c(Landroid/content/Context;I)J +Landroidx/compose/material3/ColorScheme; +HSPLandroidx/compose/material3/ColorScheme;->()V +HSPLandroidx/compose/material3/ColorScheme;->(JJJJJJJJJJJJJJJJJJJJJJJJJJJJJ)V +HSPLandroidx/compose/material3/ColorScheme;->(JJJJJJJJJJJJJJJJJJJJJJJJJJJJJLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/material3/ColorScheme;->copy-G1PFc-w$default(Landroidx/compose/material3/ColorScheme;JJJJJJJJJJJJJJJJJJJJJJJJJJJJJILjava/lang/Object;)Landroidx/compose/material3/ColorScheme; +HSPLandroidx/compose/material3/ColorScheme;->copy-G1PFc-w(JJJJJJJJJJJJJJJJJJJJJJJJJJJJJ)Landroidx/compose/material3/ColorScheme; +HSPLandroidx/compose/material3/ColorScheme;->getBackground-0d7_KjU()J +HSPLandroidx/compose/material3/ColorScheme;->getError-0d7_KjU()J +HSPLandroidx/compose/material3/ColorScheme;->getErrorContainer-0d7_KjU()J +HSPLandroidx/compose/material3/ColorScheme;->getInverseOnSurface-0d7_KjU()J +HSPLandroidx/compose/material3/ColorScheme;->getInversePrimary-0d7_KjU()J +HSPLandroidx/compose/material3/ColorScheme;->getInverseSurface-0d7_KjU()J +HSPLandroidx/compose/material3/ColorScheme;->getOnBackground-0d7_KjU()J +HSPLandroidx/compose/material3/ColorScheme;->getOnError-0d7_KjU()J +HSPLandroidx/compose/material3/ColorScheme;->getOnErrorContainer-0d7_KjU()J +HSPLandroidx/compose/material3/ColorScheme;->getOnPrimary-0d7_KjU()J +HSPLandroidx/compose/material3/ColorScheme;->getOnPrimaryContainer-0d7_KjU()J +HSPLandroidx/compose/material3/ColorScheme;->getOnSecondary-0d7_KjU()J +HSPLandroidx/compose/material3/ColorScheme;->getOnSecondaryContainer-0d7_KjU()J +HSPLandroidx/compose/material3/ColorScheme;->getOnSurface-0d7_KjU()J +HSPLandroidx/compose/material3/ColorScheme;->getOnSurfaceVariant-0d7_KjU()J +HSPLandroidx/compose/material3/ColorScheme;->getOnTertiary-0d7_KjU()J +HSPLandroidx/compose/material3/ColorScheme;->getOnTertiaryContainer-0d7_KjU()J +HSPLandroidx/compose/material3/ColorScheme;->getOutline-0d7_KjU()J +HSPLandroidx/compose/material3/ColorScheme;->getOutlineVariant-0d7_KjU()J +HSPLandroidx/compose/material3/ColorScheme;->getPrimary-0d7_KjU()J +HSPLandroidx/compose/material3/ColorScheme;->getPrimaryContainer-0d7_KjU()J +HSPLandroidx/compose/material3/ColorScheme;->getScrim-0d7_KjU()J +HSPLandroidx/compose/material3/ColorScheme;->getSecondary-0d7_KjU()J +HSPLandroidx/compose/material3/ColorScheme;->getSecondaryContainer-0d7_KjU()J +HSPLandroidx/compose/material3/ColorScheme;->getSurface-0d7_KjU()J +HSPLandroidx/compose/material3/ColorScheme;->getSurfaceTint-0d7_KjU()J +HSPLandroidx/compose/material3/ColorScheme;->getSurfaceVariant-0d7_KjU()J +HSPLandroidx/compose/material3/ColorScheme;->getTertiary-0d7_KjU()J +HSPLandroidx/compose/material3/ColorScheme;->getTertiaryContainer-0d7_KjU()J +HSPLandroidx/compose/material3/ColorScheme;->setBackground-8_81llA$material3_release(J)V +HSPLandroidx/compose/material3/ColorScheme;->setError-8_81llA$material3_release(J)V +HSPLandroidx/compose/material3/ColorScheme;->setErrorContainer-8_81llA$material3_release(J)V +HSPLandroidx/compose/material3/ColorScheme;->setInverseOnSurface-8_81llA$material3_release(J)V +HSPLandroidx/compose/material3/ColorScheme;->setInversePrimary-8_81llA$material3_release(J)V +HSPLandroidx/compose/material3/ColorScheme;->setInverseSurface-8_81llA$material3_release(J)V +HSPLandroidx/compose/material3/ColorScheme;->setOnBackground-8_81llA$material3_release(J)V +HSPLandroidx/compose/material3/ColorScheme;->setOnError-8_81llA$material3_release(J)V +HSPLandroidx/compose/material3/ColorScheme;->setOnErrorContainer-8_81llA$material3_release(J)V +HSPLandroidx/compose/material3/ColorScheme;->setOnPrimary-8_81llA$material3_release(J)V +HSPLandroidx/compose/material3/ColorScheme;->setOnPrimaryContainer-8_81llA$material3_release(J)V +HSPLandroidx/compose/material3/ColorScheme;->setOnSecondary-8_81llA$material3_release(J)V +HSPLandroidx/compose/material3/ColorScheme;->setOnSecondaryContainer-8_81llA$material3_release(J)V +HSPLandroidx/compose/material3/ColorScheme;->setOnSurface-8_81llA$material3_release(J)V +HSPLandroidx/compose/material3/ColorScheme;->setOnSurfaceVariant-8_81llA$material3_release(J)V +HSPLandroidx/compose/material3/ColorScheme;->setOnTertiary-8_81llA$material3_release(J)V +HSPLandroidx/compose/material3/ColorScheme;->setOnTertiaryContainer-8_81llA$material3_release(J)V +HSPLandroidx/compose/material3/ColorScheme;->setOutline-8_81llA$material3_release(J)V +HSPLandroidx/compose/material3/ColorScheme;->setOutlineVariant-8_81llA$material3_release(J)V +HSPLandroidx/compose/material3/ColorScheme;->setPrimary-8_81llA$material3_release(J)V +HSPLandroidx/compose/material3/ColorScheme;->setPrimaryContainer-8_81llA$material3_release(J)V +HSPLandroidx/compose/material3/ColorScheme;->setScrim-8_81llA$material3_release(J)V +HSPLandroidx/compose/material3/ColorScheme;->setSecondary-8_81llA$material3_release(J)V +HSPLandroidx/compose/material3/ColorScheme;->setSecondaryContainer-8_81llA$material3_release(J)V +HSPLandroidx/compose/material3/ColorScheme;->setSurface-8_81llA$material3_release(J)V +HSPLandroidx/compose/material3/ColorScheme;->setSurfaceTint-8_81llA$material3_release(J)V +HSPLandroidx/compose/material3/ColorScheme;->setSurfaceVariant-8_81llA$material3_release(J)V +HSPLandroidx/compose/material3/ColorScheme;->setTertiary-8_81llA$material3_release(J)V +HSPLandroidx/compose/material3/ColorScheme;->setTertiaryContainer-8_81llA$material3_release(J)V +Landroidx/compose/material3/ColorSchemeKt; +HSPLandroidx/compose/material3/ColorSchemeKt;->()V +HSPLandroidx/compose/material3/ColorSchemeKt;->contentColorFor-4WTKRHQ(Landroidx/compose/material3/ColorScheme;J)J +HSPLandroidx/compose/material3/ColorSchemeKt;->contentColorFor-ek8zF_U(JLandroidx/compose/runtime/Composer;I)J +HSPLandroidx/compose/material3/ColorSchemeKt;->fromToken(Landroidx/compose/material3/ColorScheme;Landroidx/compose/material3/tokens/ColorSchemeKeyTokens;)J +HSPLandroidx/compose/material3/ColorSchemeKt;->getLocalColorScheme()Landroidx/compose/runtime/ProvidableCompositionLocal; +HSPLandroidx/compose/material3/ColorSchemeKt;->lightColorScheme-G1PFc-w$default(JJJJJJJJJJJJJJJJJJJJJJJJJJJJJILjava/lang/Object;)Landroidx/compose/material3/ColorScheme; +HSPLandroidx/compose/material3/ColorSchemeKt;->lightColorScheme-G1PFc-w(JJJJJJJJJJJJJJJJJJJJJJJJJJJJJ)Landroidx/compose/material3/ColorScheme; +HSPLandroidx/compose/material3/ColorSchemeKt;->surfaceColorAtElevation-3ABfNKs(Landroidx/compose/material3/ColorScheme;F)J +HSPLandroidx/compose/material3/ColorSchemeKt;->toColor(Landroidx/compose/material3/tokens/ColorSchemeKeyTokens;Landroidx/compose/runtime/Composer;I)J +HSPLandroidx/compose/material3/ColorSchemeKt;->updateColorSchemeFrom(Landroidx/compose/material3/ColorScheme;Landroidx/compose/material3/ColorScheme;)V +Landroidx/compose/material3/ColorSchemeKt$LocalColorScheme$1; +HSPLandroidx/compose/material3/ColorSchemeKt$LocalColorScheme$1;->()V +HSPLandroidx/compose/material3/ColorSchemeKt$LocalColorScheme$1;->()V +Landroidx/compose/material3/ColorSchemeKt$WhenMappings; +HSPLandroidx/compose/material3/ColorSchemeKt$WhenMappings;->()V +Landroidx/compose/material3/ContentColorKt; +HSPLandroidx/compose/material3/ContentColorKt;->()V +HSPLandroidx/compose/material3/ContentColorKt;->getLocalContentColor()Landroidx/compose/runtime/ProvidableCompositionLocal; +Landroidx/compose/material3/ContentColorKt$LocalContentColor$1; +HSPLandroidx/compose/material3/ContentColorKt$LocalContentColor$1;->()V +HSPLandroidx/compose/material3/ContentColorKt$LocalContentColor$1;->()V +Landroidx/compose/material3/DefaultPlatformTextStyle_androidKt; +HSPLandroidx/compose/material3/DefaultPlatformTextStyle_androidKt;->()V +HSPLandroidx/compose/material3/DefaultPlatformTextStyle_androidKt;->defaultPlatformTextStyle()Landroidx/compose/ui/text/PlatformTextStyle; +Landroidx/compose/material3/DynamicTonalPaletteKt; +HSPLandroidx/compose/material3/DynamicTonalPaletteKt;->dynamicLightColorScheme(Landroid/content/Context;)Landroidx/compose/material3/ColorScheme; +HSPLandroidx/compose/material3/DynamicTonalPaletteKt;->dynamicTonalPalette(Landroid/content/Context;)Landroidx/compose/material3/TonalPalette; +Landroidx/compose/material3/ElevationDefaults; +HSPLandroidx/compose/material3/ElevationDefaults;->()V +HSPLandroidx/compose/material3/ElevationDefaults;->()V +HSPLandroidx/compose/material3/ElevationDefaults;->outgoingAnimationSpecForInteraction(Landroidx/compose/foundation/interaction/Interaction;)Landroidx/compose/animation/core/AnimationSpec; +Landroidx/compose/material3/ElevationKt; +HSPLandroidx/compose/material3/ElevationKt;->()V +HSPLandroidx/compose/material3/ElevationKt;->access$getDefaultOutgoingSpec$p()Landroidx/compose/animation/core/TweenSpec; +HSPLandroidx/compose/material3/ElevationKt;->animateElevation-rAjV9yQ(Landroidx/compose/animation/core/Animatable;FLandroidx/compose/foundation/interaction/Interaction;Landroidx/compose/foundation/interaction/Interaction;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/compose/material3/FabPlacement; +Landroidx/compose/material3/FabPosition; +HSPLandroidx/compose/material3/FabPosition;->()V +HSPLandroidx/compose/material3/FabPosition;->(I)V +HSPLandroidx/compose/material3/FabPosition;->access$getEnd$cp()I +HSPLandroidx/compose/material3/FabPosition;->box-impl(I)Landroidx/compose/material3/FabPosition; +HSPLandroidx/compose/material3/FabPosition;->constructor-impl(I)I +Landroidx/compose/material3/FabPosition$Companion; +HSPLandroidx/compose/material3/FabPosition$Companion;->()V +HSPLandroidx/compose/material3/FabPosition$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/material3/FabPosition$Companion;->getEnd-ERTFSPs()I +Landroidx/compose/material3/IconButtonColors; +HSPLandroidx/compose/material3/IconButtonColors;->()V +HSPLandroidx/compose/material3/IconButtonColors;->(JJJJ)V +HSPLandroidx/compose/material3/IconButtonColors;->(JJJJLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/material3/IconButtonColors;->containerColor$material3_release(ZLandroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State; +HSPLandroidx/compose/material3/IconButtonColors;->contentColor$material3_release(ZLandroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State; +Landroidx/compose/material3/IconButtonDefaults; +HSPLandroidx/compose/material3/IconButtonDefaults;->()V +HSPLandroidx/compose/material3/IconButtonDefaults;->()V +HSPLandroidx/compose/material3/IconButtonDefaults;->iconButtonColors-ro_MJ88(JJJJLandroidx/compose/runtime/Composer;II)Landroidx/compose/material3/IconButtonColors; +Landroidx/compose/material3/IconButtonKt; +HSPLandroidx/compose/material3/IconButtonKt;->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 +Landroidx/compose/material3/IconButtonKt$IconButton$3; +HSPLandroidx/compose/material3/IconButtonKt$IconButton$3;->(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLandroidx/compose/material3/IconButtonColors;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function2;II)V +Landroidx/compose/material3/IconKt; +HSPLandroidx/compose/material3/IconKt;->()V +HSPLandroidx/compose/material3/IconKt;->Icon-ww6aTOc(Landroidx/compose/ui/graphics/painter/Painter;Ljava/lang/String;Landroidx/compose/ui/Modifier;JLandroidx/compose/runtime/Composer;II)V +HSPLandroidx/compose/material3/IconKt;->Icon-ww6aTOc(Landroidx/compose/ui/graphics/vector/ImageVector;Ljava/lang/String;Landroidx/compose/ui/Modifier;JLandroidx/compose/runtime/Composer;II)V +HSPLandroidx/compose/material3/IconKt;->defaultSizeFor(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/painter/Painter;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/material3/IconKt;->isInfinite-uvyYCjk(J)Z +Landroidx/compose/material3/IconKt$Icon$1; +HSPLandroidx/compose/material3/IconKt$Icon$1;->(Landroidx/compose/ui/graphics/vector/ImageVector;Ljava/lang/String;Landroidx/compose/ui/Modifier;JII)V +HSPLandroidx/compose/material3/IconKt$Icon$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/material3/IconKt$Icon$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/IconKt$Icon$3; +HSPLandroidx/compose/material3/IconKt$Icon$3;->(Landroidx/compose/ui/graphics/painter/Painter;Ljava/lang/String;Landroidx/compose/ui/Modifier;JII)V +Landroidx/compose/material3/InteractiveComponentSizeKt; +HSPLandroidx/compose/material3/InteractiveComponentSizeKt;->()V +HSPLandroidx/compose/material3/InteractiveComponentSizeKt;->access$getMinimumInteractiveComponentSize$p()J +HSPLandroidx/compose/material3/InteractiveComponentSizeKt;->getLocalMinimumInteractiveComponentEnforcement()Landroidx/compose/runtime/ProvidableCompositionLocal; +HSPLandroidx/compose/material3/InteractiveComponentSizeKt;->minimumInteractiveComponentSize(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; +Landroidx/compose/material3/InteractiveComponentSizeKt$LocalMinimumInteractiveComponentEnforcement$1; +HSPLandroidx/compose/material3/InteractiveComponentSizeKt$LocalMinimumInteractiveComponentEnforcement$1;->()V +HSPLandroidx/compose/material3/InteractiveComponentSizeKt$LocalMinimumInteractiveComponentEnforcement$1;->()V +HSPLandroidx/compose/material3/InteractiveComponentSizeKt$LocalMinimumInteractiveComponentEnforcement$1;->invoke()Ljava/lang/Boolean; +HSPLandroidx/compose/material3/InteractiveComponentSizeKt$LocalMinimumInteractiveComponentEnforcement$1;->invoke()Ljava/lang/Object; +Landroidx/compose/material3/InteractiveComponentSizeKt$minimumInteractiveComponentSize$2; +HSPLandroidx/compose/material3/InteractiveComponentSizeKt$minimumInteractiveComponentSize$2;->()V +HSPLandroidx/compose/material3/InteractiveComponentSizeKt$minimumInteractiveComponentSize$2;->()V +HSPLandroidx/compose/material3/InteractiveComponentSizeKt$minimumInteractiveComponentSize$2;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/material3/InteractiveComponentSizeKt$minimumInteractiveComponentSize$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/InternalMutatorMutex; +HSPLandroidx/compose/material3/InternalMutatorMutex;->()V +Landroidx/compose/material3/MappedInteractionSource; +HSPLandroidx/compose/material3/MappedInteractionSource;->(Landroidx/compose/foundation/interaction/InteractionSource;J)V +HSPLandroidx/compose/material3/MappedInteractionSource;->(Landroidx/compose/foundation/interaction/InteractionSource;JLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/material3/MappedInteractionSource;->getInteractions()Lkotlinx/coroutines/flow/Flow; +Landroidx/compose/material3/MappedInteractionSource$special$$inlined$map$1; +HSPLandroidx/compose/material3/MappedInteractionSource$special$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;Landroidx/compose/material3/MappedInteractionSource;)V +HSPLandroidx/compose/material3/MappedInteractionSource$special$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/compose/material3/MappedInteractionSource$special$$inlined$map$1$2; +HSPLandroidx/compose/material3/MappedInteractionSource$special$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;Landroidx/compose/material3/MappedInteractionSource;)V +Landroidx/compose/material3/MaterialRippleTheme; +HSPLandroidx/compose/material3/MaterialRippleTheme;->()V +HSPLandroidx/compose/material3/MaterialRippleTheme;->()V +Landroidx/compose/material3/MaterialTheme; +HSPLandroidx/compose/material3/MaterialTheme;->()V +HSPLandroidx/compose/material3/MaterialTheme;->()V +HSPLandroidx/compose/material3/MaterialTheme;->getColorScheme(Landroidx/compose/runtime/Composer;I)Landroidx/compose/material3/ColorScheme; +HSPLandroidx/compose/material3/MaterialTheme;->getShapes(Landroidx/compose/runtime/Composer;I)Landroidx/compose/material3/Shapes; +HSPLandroidx/compose/material3/MaterialTheme;->getTypography(Landroidx/compose/runtime/Composer;I)Landroidx/compose/material3/Typography; +Landroidx/compose/material3/MaterialThemeKt; +HSPLandroidx/compose/material3/MaterialThemeKt;->()V +HSPLandroidx/compose/material3/MaterialThemeKt;->MaterialTheme(Landroidx/compose/material3/ColorScheme;Landroidx/compose/material3/Shapes;Landroidx/compose/material3/Typography;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V +HSPLandroidx/compose/material3/MaterialThemeKt;->rememberTextSelectionColors(Landroidx/compose/material3/ColorScheme;Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/text/selection/TextSelectionColors; +Landroidx/compose/material3/MaterialThemeKt$MaterialTheme$1; +HSPLandroidx/compose/material3/MaterialThemeKt$MaterialTheme$1;->(Landroidx/compose/material3/Typography;Lkotlin/jvm/functions/Function2;I)V +HSPLandroidx/compose/material3/MaterialThemeKt$MaterialTheme$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/material3/MaterialThemeKt$MaterialTheme$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/MaterialThemeKt$MaterialTheme$2; +HSPLandroidx/compose/material3/MaterialThemeKt$MaterialTheme$2;->(Landroidx/compose/material3/ColorScheme;Landroidx/compose/material3/Shapes;Landroidx/compose/material3/Typography;Lkotlin/jvm/functions/Function2;II)V +Landroidx/compose/material3/MinimumInteractiveComponentSizeModifier; +HSPLandroidx/compose/material3/MinimumInteractiveComponentSizeModifier;->(J)V +HSPLandroidx/compose/material3/MinimumInteractiveComponentSizeModifier;->(JLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/material3/MinimumInteractiveComponentSizeModifier;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/material3/MinimumInteractiveComponentSizeModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; +Landroidx/compose/material3/MinimumInteractiveComponentSizeModifier$measure$1; +HSPLandroidx/compose/material3/MinimumInteractiveComponentSizeModifier$measure$1;->(ILandroidx/compose/ui/layout/Placeable;I)V +HSPLandroidx/compose/material3/MinimumInteractiveComponentSizeModifier$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/material3/MinimumInteractiveComponentSizeModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/ModalBottomSheet_androidKt; +HSPLandroidx/compose/material3/ModalBottomSheet_androidKt;->rememberModalBottomSheetState(ZLkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)Landroidx/compose/material3/SheetState; +Landroidx/compose/material3/ModalBottomSheet_androidKt$rememberModalBottomSheetState$1; +HSPLandroidx/compose/material3/ModalBottomSheet_androidKt$rememberModalBottomSheetState$1;->()V +HSPLandroidx/compose/material3/ModalBottomSheet_androidKt$rememberModalBottomSheetState$1;->()V +Landroidx/compose/material3/NavigationBarItemColors; +HSPLandroidx/compose/material3/NavigationBarItemColors;->()V +HSPLandroidx/compose/material3/NavigationBarItemColors;->(JJJJJJJ)V +HSPLandroidx/compose/material3/NavigationBarItemColors;->(JJJJJJJLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/material3/NavigationBarItemColors;->getIndicatorColor-0d7_KjU$material3_release()J +HSPLandroidx/compose/material3/NavigationBarItemColors;->iconColor$material3_release(ZZLandroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State; +HSPLandroidx/compose/material3/NavigationBarItemColors;->textColor$material3_release(ZZLandroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State; +Landroidx/compose/material3/NavigationBarItemDefaults; +HSPLandroidx/compose/material3/NavigationBarItemDefaults;->()V +HSPLandroidx/compose/material3/NavigationBarItemDefaults;->()V +HSPLandroidx/compose/material3/NavigationBarItemDefaults;->colors-69fazGs(JJJJJJJLandroidx/compose/runtime/Composer;II)Landroidx/compose/material3/NavigationBarItemColors; +Landroidx/compose/material3/NavigationBarKt; +HSPLandroidx/compose/material3/NavigationBarKt;->()V +HSPLandroidx/compose/material3/NavigationBarKt;->NavigationBarItem$lambda$3(Landroidx/compose/runtime/MutableState;)I +HSPLandroidx/compose/material3/NavigationBarKt;->NavigationBarItem$lambda$4(Landroidx/compose/runtime/MutableState;I)V +HSPLandroidx/compose/material3/NavigationBarKt;->NavigationBarItem$lambda$9$lambda$6(Landroidx/compose/runtime/State;)F +HSPLandroidx/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 +HSPLandroidx/compose/material3/NavigationBarKt;->NavigationBarItemBaselineLayout(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;ZFLandroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/material3/NavigationBarKt;->access$NavigationBarItem$lambda$4(Landroidx/compose/runtime/MutableState;I)V +HSPLandroidx/compose/material3/NavigationBarKt;->access$NavigationBarItem$lambda$9$lambda$6(Landroidx/compose/runtime/State;)F +HSPLandroidx/compose/material3/NavigationBarKt;->access$getIndicatorHorizontalPadding$p()F +HSPLandroidx/compose/material3/NavigationBarKt;->access$getIndicatorVerticalPadding$p()F +HSPLandroidx/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; +HSPLandroidx/compose/material3/NavigationBarKt;->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; +Landroidx/compose/material3/NavigationBarKt$NavigationBarItem$2$1; +HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$2$1;->(Landroidx/compose/runtime/MutableState;)V +HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$2$1;->invoke-ozmzZPI(J)V +Landroidx/compose/material3/NavigationBarKt$NavigationBarItem$3$indicator$1; +HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$3$indicator$1;->(Landroidx/compose/material3/NavigationBarItemColors;Landroidx/compose/runtime/State;)V +HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$3$indicator$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$3$indicator$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/NavigationBarKt$NavigationBarItem$3$indicatorRipple$1; +HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$3$indicatorRipple$1;->(Landroidx/compose/material3/MappedInteractionSource;)V +HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$3$indicatorRipple$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$3$indicatorRipple$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/NavigationBarKt$NavigationBarItem$4; +HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$4;->(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 +HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$4;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledIcon$1; +HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledIcon$1;->(Landroidx/compose/material3/NavigationBarItemColors;ZZILkotlin/jvm/functions/Function2;ZLkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledIcon$1;->invoke$lambda$0(Landroidx/compose/runtime/State;)J +HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledIcon$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledIcon$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledIcon$1$1; +HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledIcon$1$1;->()V +HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledIcon$1$1;->()V +HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledIcon$1$1;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V +HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledIcon$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledLabel$1$1; +HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledLabel$1$1;->(Landroidx/compose/material3/NavigationBarItemColors;ZZILkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledLabel$1$1;->invoke$lambda$0(Landroidx/compose/runtime/State;)J +HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledLabel$1$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledLabel$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledLabel$1$1$1; +HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledLabel$1$1$1;->(Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function2;I)V +HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledLabel$1$1$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledLabel$1$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/NavigationBarKt$NavigationBarItemBaselineLayout$2; +HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItemBaselineLayout$2;->(FLkotlin/jvm/functions/Function2;Z)V +HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItemBaselineLayout$2;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; +Landroidx/compose/material3/NavigationBarKt$placeLabelAndIcon$1; +HSPLandroidx/compose/material3/NavigationBarKt$placeLabelAndIcon$1;->(Landroidx/compose/ui/layout/Placeable;ZFLandroidx/compose/ui/layout/Placeable;IIILandroidx/compose/ui/layout/Placeable;IILandroidx/compose/ui/layout/Placeable;IIILandroidx/compose/ui/layout/MeasureScope;)V +HSPLandroidx/compose/material3/NavigationBarKt$placeLabelAndIcon$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/material3/NavigationBarKt$placeLabelAndIcon$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/PinnedScrollBehavior; +HSPLandroidx/compose/material3/PinnedScrollBehavior;->(Landroidx/compose/material3/TopAppBarState;Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/material3/PinnedScrollBehavior;->getNestedScrollConnection()Landroidx/compose/ui/input/nestedscroll/NestedScrollConnection; +HSPLandroidx/compose/material3/PinnedScrollBehavior;->getState()Landroidx/compose/material3/TopAppBarState; +HSPLandroidx/compose/material3/PinnedScrollBehavior;->isPinned()Z +Landroidx/compose/material3/PinnedScrollBehavior$nestedScrollConnection$1; +HSPLandroidx/compose/material3/PinnedScrollBehavior$nestedScrollConnection$1;->(Landroidx/compose/material3/PinnedScrollBehavior;)V +Landroidx/compose/material3/ProgressIndicatorDefaults; +HSPLandroidx/compose/material3/ProgressIndicatorDefaults;->()V +HSPLandroidx/compose/material3/ProgressIndicatorDefaults;->()V +HSPLandroidx/compose/material3/ProgressIndicatorDefaults;->getCircularColor(Landroidx/compose/runtime/Composer;I)J +HSPLandroidx/compose/material3/ProgressIndicatorDefaults;->getCircularIndeterminateStrokeCap-KaPHkGw()I +HSPLandroidx/compose/material3/ProgressIndicatorDefaults;->getCircularStrokeWidth-D9Ej5fM()F +HSPLandroidx/compose/material3/ProgressIndicatorDefaults;->getCircularTrackColor(Landroidx/compose/runtime/Composer;I)J +Landroidx/compose/material3/ProgressIndicatorKt; +HSPLandroidx/compose/material3/ProgressIndicatorKt;->()V +HSPLandroidx/compose/material3/ProgressIndicatorKt;->CircularProgressIndicator-LxG7B9w(Landroidx/compose/ui/Modifier;JFJILandroidx/compose/runtime/Composer;II)V +HSPLandroidx/compose/material3/ProgressIndicatorKt;->access$drawCircularIndicatorTrack-bw27NRU(Landroidx/compose/ui/graphics/drawscope/DrawScope;JLandroidx/compose/ui/graphics/drawscope/Stroke;)V +HSPLandroidx/compose/material3/ProgressIndicatorKt;->access$drawIndeterminateCircularIndicator-hrjfTZI(Landroidx/compose/ui/graphics/drawscope/DrawScope;FFFJLandroidx/compose/ui/graphics/drawscope/Stroke;)V +HSPLandroidx/compose/material3/ProgressIndicatorKt;->access$getCircularEasing$p()Landroidx/compose/animation/core/CubicBezierEasing; +HSPLandroidx/compose/material3/ProgressIndicatorKt;->drawCircularIndicator-42QJj7c(Landroidx/compose/ui/graphics/drawscope/DrawScope;FFJLandroidx/compose/ui/graphics/drawscope/Stroke;)V +HSPLandroidx/compose/material3/ProgressIndicatorKt;->drawCircularIndicatorTrack-bw27NRU(Landroidx/compose/ui/graphics/drawscope/DrawScope;JLandroidx/compose/ui/graphics/drawscope/Stroke;)V +HSPLandroidx/compose/material3/ProgressIndicatorKt;->drawIndeterminateCircularIndicator-hrjfTZI(Landroidx/compose/ui/graphics/drawscope/DrawScope;FFFJLandroidx/compose/ui/graphics/drawscope/Stroke;)V +Landroidx/compose/material3/ProgressIndicatorKt$CircularProgressIndicator$3; +HSPLandroidx/compose/material3/ProgressIndicatorKt$CircularProgressIndicator$3;->(JLandroidx/compose/ui/graphics/drawscope/Stroke;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;FJ)V +HSPLandroidx/compose/material3/ProgressIndicatorKt$CircularProgressIndicator$3;->invoke(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V +HSPLandroidx/compose/material3/ProgressIndicatorKt$CircularProgressIndicator$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/ProgressIndicatorKt$CircularProgressIndicator$4; +HSPLandroidx/compose/material3/ProgressIndicatorKt$CircularProgressIndicator$4;->(Landroidx/compose/ui/Modifier;JFJIII)V +Landroidx/compose/material3/ProgressIndicatorKt$CircularProgressIndicator$endAngle$1; +HSPLandroidx/compose/material3/ProgressIndicatorKt$CircularProgressIndicator$endAngle$1;->()V +HSPLandroidx/compose/material3/ProgressIndicatorKt$CircularProgressIndicator$endAngle$1;->()V +HSPLandroidx/compose/material3/ProgressIndicatorKt$CircularProgressIndicator$endAngle$1;->invoke(Landroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig;)V +HSPLandroidx/compose/material3/ProgressIndicatorKt$CircularProgressIndicator$endAngle$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/ProgressIndicatorKt$CircularProgressIndicator$startAngle$1; +HSPLandroidx/compose/material3/ProgressIndicatorKt$CircularProgressIndicator$startAngle$1;->()V +HSPLandroidx/compose/material3/ProgressIndicatorKt$CircularProgressIndicator$startAngle$1;->()V +HSPLandroidx/compose/material3/ProgressIndicatorKt$CircularProgressIndicator$startAngle$1;->invoke(Landroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig;)V +HSPLandroidx/compose/material3/ProgressIndicatorKt$CircularProgressIndicator$startAngle$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/ScaffoldKt; +HSPLandroidx/compose/material3/ScaffoldKt;->()V +HSPLandroidx/compose/material3/ScaffoldKt;->Scaffold-TvnljyQ(Landroidx/compose/ui/Modifier;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;II)V +HSPLandroidx/compose/material3/ScaffoldKt;->ScaffoldLayout-FMILGgc(ILkotlin/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 +HSPLandroidx/compose/material3/ScaffoldKt;->access$ScaffoldLayout-FMILGgc(ILkotlin/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 +HSPLandroidx/compose/material3/ScaffoldKt;->getLocalFabPlacement()Landroidx/compose/runtime/ProvidableCompositionLocal; +Landroidx/compose/material3/ScaffoldKt$LocalFabPlacement$1; +HSPLandroidx/compose/material3/ScaffoldKt$LocalFabPlacement$1;->()V +HSPLandroidx/compose/material3/ScaffoldKt$LocalFabPlacement$1;->()V +Landroidx/compose/material3/ScaffoldKt$Scaffold$1; +HSPLandroidx/compose/material3/ScaffoldKt$Scaffold$1;->(ILkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Landroidx/compose/foundation/layout/WindowInsets;Lkotlin/jvm/functions/Function2;I)V +HSPLandroidx/compose/material3/ScaffoldKt$Scaffold$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/material3/ScaffoldKt$Scaffold$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/ScaffoldKt$Scaffold$2; +HSPLandroidx/compose/material3/ScaffoldKt$Scaffold$2;->(Landroidx/compose/ui/Modifier;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;II)V +Landroidx/compose/material3/ScaffoldKt$ScaffoldLayout$1$1; +HSPLandroidx/compose/material3/ScaffoldKt$ScaffoldLayout$1$1;->(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;ILandroidx/compose/foundation/layout/WindowInsets;Lkotlin/jvm/functions/Function2;ILkotlin/jvm/functions/Function3;)V +HSPLandroidx/compose/material3/ScaffoldKt$ScaffoldLayout$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/material3/ScaffoldKt$ScaffoldLayout$1$1;->invoke-0kLqBqw(Landroidx/compose/ui/layout/SubcomposeMeasureScope;J)Landroidx/compose/ui/layout/MeasureResult; +Landroidx/compose/material3/ScaffoldKt$ScaffoldLayout$1$1$1; +HSPLandroidx/compose/material3/ScaffoldKt$ScaffoldLayout$1$1$1;->(Landroidx/compose/ui/layout/SubcomposeMeasureScope;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;IILandroidx/compose/foundation/layout/WindowInsets;JLkotlin/jvm/functions/Function2;ILkotlin/jvm/functions/Function3;I)V +HSPLandroidx/compose/material3/ScaffoldKt$ScaffoldLayout$1$1$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/material3/ScaffoldKt$ScaffoldLayout$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/ScaffoldKt$ScaffoldLayout$1$1$1$bodyContentPlaceables$1; +HSPLandroidx/compose/material3/ScaffoldKt$ScaffoldLayout$1$1$1$bodyContentPlaceables$1;->(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/ui/layout/SubcomposeMeasureScope;Ljava/util/List;ILjava/util/List;Ljava/lang/Integer;Lkotlin/jvm/functions/Function3;I)V +HSPLandroidx/compose/material3/ScaffoldKt$ScaffoldLayout$1$1$1$bodyContentPlaceables$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/material3/ScaffoldKt$ScaffoldLayout$1$1$1$bodyContentPlaceables$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/ScaffoldKt$ScaffoldLayout$1$1$1$bottomBarPlaceables$1; +HSPLandroidx/compose/material3/ScaffoldKt$ScaffoldLayout$1$1$1$bottomBarPlaceables$1;->(Landroidx/compose/material3/FabPlacement;Lkotlin/jvm/functions/Function2;I)V +HSPLandroidx/compose/material3/ScaffoldKt$ScaffoldLayout$1$1$1$bottomBarPlaceables$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/material3/ScaffoldKt$ScaffoldLayout$1$1$1$bottomBarPlaceables$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/ScaffoldLayoutContent; +HSPLandroidx/compose/material3/ScaffoldLayoutContent;->$values()[Landroidx/compose/material3/ScaffoldLayoutContent; +HSPLandroidx/compose/material3/ScaffoldLayoutContent;->()V +HSPLandroidx/compose/material3/ScaffoldLayoutContent;->(Ljava/lang/String;I)V +Landroidx/compose/material3/ShapeDefaults; +HSPLandroidx/compose/material3/ShapeDefaults;->()V +HSPLandroidx/compose/material3/ShapeDefaults;->()V +HSPLandroidx/compose/material3/ShapeDefaults;->getExtraLarge()Landroidx/compose/foundation/shape/CornerBasedShape; +HSPLandroidx/compose/material3/ShapeDefaults;->getExtraSmall()Landroidx/compose/foundation/shape/CornerBasedShape; +HSPLandroidx/compose/material3/ShapeDefaults;->getLarge()Landroidx/compose/foundation/shape/CornerBasedShape; +HSPLandroidx/compose/material3/ShapeDefaults;->getMedium()Landroidx/compose/foundation/shape/CornerBasedShape; +HSPLandroidx/compose/material3/ShapeDefaults;->getSmall()Landroidx/compose/foundation/shape/CornerBasedShape; +Landroidx/compose/material3/Shapes; +HSPLandroidx/compose/material3/Shapes;->()V +HSPLandroidx/compose/material3/Shapes;->(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 +HSPLandroidx/compose/material3/Shapes;->(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;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/material3/Shapes;->getLarge()Landroidx/compose/foundation/shape/CornerBasedShape; +HSPLandroidx/compose/material3/Shapes;->getMedium()Landroidx/compose/foundation/shape/CornerBasedShape; +HSPLandroidx/compose/material3/Shapes;->getSmall()Landroidx/compose/foundation/shape/CornerBasedShape; +Landroidx/compose/material3/ShapesKt; +HSPLandroidx/compose/material3/ShapesKt;->()V +HSPLandroidx/compose/material3/ShapesKt;->fromToken(Landroidx/compose/material3/Shapes;Landroidx/compose/material3/tokens/ShapeKeyTokens;)Landroidx/compose/ui/graphics/Shape; +HSPLandroidx/compose/material3/ShapesKt;->getLocalShapes()Landroidx/compose/runtime/ProvidableCompositionLocal; +HSPLandroidx/compose/material3/ShapesKt;->toShape(Landroidx/compose/material3/tokens/ShapeKeyTokens;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/graphics/Shape; +Landroidx/compose/material3/ShapesKt$LocalShapes$1; +HSPLandroidx/compose/material3/ShapesKt$LocalShapes$1;->()V +HSPLandroidx/compose/material3/ShapesKt$LocalShapes$1;->()V +HSPLandroidx/compose/material3/ShapesKt$LocalShapes$1;->invoke()Landroidx/compose/material3/Shapes; +HSPLandroidx/compose/material3/ShapesKt$LocalShapes$1;->invoke()Ljava/lang/Object; +Landroidx/compose/material3/ShapesKt$WhenMappings; +HSPLandroidx/compose/material3/ShapesKt$WhenMappings;->()V +Landroidx/compose/material3/SheetDefaultsKt; +HSPLandroidx/compose/material3/SheetDefaultsKt;->()V +HSPLandroidx/compose/material3/SheetDefaultsKt;->rememberSheetState(ZLkotlin/jvm/functions/Function1;Landroidx/compose/material3/SheetValue;ZLandroidx/compose/runtime/Composer;II)Landroidx/compose/material3/SheetState; +Landroidx/compose/material3/SheetDefaultsKt$rememberSheetState$2$1; +HSPLandroidx/compose/material3/SheetDefaultsKt$rememberSheetState$2$1;->(ZLandroidx/compose/material3/SheetValue;Lkotlin/jvm/functions/Function1;Z)V +HSPLandroidx/compose/material3/SheetDefaultsKt$rememberSheetState$2$1;->invoke()Landroidx/compose/material3/SheetState; +HSPLandroidx/compose/material3/SheetDefaultsKt$rememberSheetState$2$1;->invoke()Ljava/lang/Object; +Landroidx/compose/material3/SheetState; +HSPLandroidx/compose/material3/SheetState;->()V +HSPLandroidx/compose/material3/SheetState;->(ZLandroidx/compose/material3/SheetValue;Lkotlin/jvm/functions/Function1;Z)V +HSPLandroidx/compose/material3/SheetState;->getCurrentValue()Landroidx/compose/material3/SheetValue; +Landroidx/compose/material3/SheetState$Companion; +HSPLandroidx/compose/material3/SheetState$Companion;->()V +HSPLandroidx/compose/material3/SheetState$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/material3/SheetState$Companion;->Saver(ZLkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/saveable/Saver; +Landroidx/compose/material3/SheetState$Companion$Saver$1; +HSPLandroidx/compose/material3/SheetState$Companion$Saver$1;->()V +HSPLandroidx/compose/material3/SheetState$Companion$Saver$1;->()V +HSPLandroidx/compose/material3/SheetState$Companion$Saver$1;->invoke(Landroidx/compose/runtime/saveable/SaverScope;Landroidx/compose/material3/SheetState;)Landroidx/compose/material3/SheetValue; +HSPLandroidx/compose/material3/SheetState$Companion$Saver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/SheetState$Companion$Saver$2; +HSPLandroidx/compose/material3/SheetState$Companion$Saver$2;->(ZLkotlin/jvm/functions/Function1;)V +Landroidx/compose/material3/SheetValue; +HSPLandroidx/compose/material3/SheetValue;->$values()[Landroidx/compose/material3/SheetValue; +HSPLandroidx/compose/material3/SheetValue;->()V +HSPLandroidx/compose/material3/SheetValue;->(Ljava/lang/String;I)V +Landroidx/compose/material3/SurfaceKt; +HSPLandroidx/compose/material3/SurfaceKt;->()V +HSPLandroidx/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 +HSPLandroidx/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;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;III)V +HSPLandroidx/compose/material3/SurfaceKt;->access$surface-8ww4TTg(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/Shape;JLandroidx/compose/foundation/BorderStroke;F)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/material3/SurfaceKt;->access$surfaceColorAtElevation-CLU3JFs(JFLandroidx/compose/runtime/Composer;I)J +HSPLandroidx/compose/material3/SurfaceKt;->surface-8ww4TTg(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/Shape;JLandroidx/compose/foundation/BorderStroke;F)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/material3/SurfaceKt;->surfaceColorAtElevation-CLU3JFs(JFLandroidx/compose/runtime/Composer;I)J +Landroidx/compose/material3/SurfaceKt$LocalAbsoluteTonalElevation$1; +HSPLandroidx/compose/material3/SurfaceKt$LocalAbsoluteTonalElevation$1;->()V +HSPLandroidx/compose/material3/SurfaceKt$LocalAbsoluteTonalElevation$1;->()V +HSPLandroidx/compose/material3/SurfaceKt$LocalAbsoluteTonalElevation$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/material3/SurfaceKt$LocalAbsoluteTonalElevation$1;->invoke-D9Ej5fM()F +Landroidx/compose/material3/SurfaceKt$Surface$1; +HSPLandroidx/compose/material3/SurfaceKt$Surface$1;->(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/Shape;JFILandroidx/compose/foundation/BorderStroke;FLkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/material3/SurfaceKt$Surface$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/material3/SurfaceKt$Surface$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/SurfaceKt$Surface$1$1; +HSPLandroidx/compose/material3/SurfaceKt$Surface$1$1;->()V +HSPLandroidx/compose/material3/SurfaceKt$Surface$1$1;->()V +HSPLandroidx/compose/material3/SurfaceKt$Surface$1$1;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V +HSPLandroidx/compose/material3/SurfaceKt$Surface$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/SurfaceKt$Surface$1$2; +HSPLandroidx/compose/material3/SurfaceKt$Surface$1$2;->(Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/material3/SurfaceKt$Surface$1$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/material3/SurfaceKt$Surface$1$2;->invoke(Landroidx/compose/ui/input/pointer/PointerInputScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/material3/SurfaceKt$Surface$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/material3/SurfaceKt$Surface$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/SurfaceKt$Surface$3; +HSPLandroidx/compose/material3/SurfaceKt$Surface$3;->(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/Shape;JFILandroidx/compose/foundation/BorderStroke;FLandroidx/compose/foundation/interaction/MutableInteractionSource;ZLkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function2;I)V +HSPLandroidx/compose/material3/SurfaceKt$Surface$3;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/material3/SurfaceKt$Surface$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/SwipeableV2Defaults; +HSPLandroidx/compose/material3/SwipeableV2Defaults;->()V +HSPLandroidx/compose/material3/SwipeableV2Defaults;->()V +HSPLandroidx/compose/material3/SwipeableV2Defaults;->getAnimationSpec()Landroidx/compose/animation/core/SpringSpec; +HSPLandroidx/compose/material3/SwipeableV2Defaults;->getPositionalThreshold()Lkotlin/jvm/functions/Function2; +HSPLandroidx/compose/material3/SwipeableV2Defaults;->getVelocityThreshold-D9Ej5fM()F +Landroidx/compose/material3/SwipeableV2Kt; +HSPLandroidx/compose/material3/SwipeableV2Kt;->fixedPositionalThreshold-0680j_4(F)Lkotlin/jvm/functions/Function2; +Landroidx/compose/material3/SwipeableV2Kt$fixedPositionalThreshold$1; +HSPLandroidx/compose/material3/SwipeableV2Kt$fixedPositionalThreshold$1;->(F)V +Landroidx/compose/material3/SwipeableV2State; +HSPLandroidx/compose/material3/SwipeableV2State;->()V +HSPLandroidx/compose/material3/SwipeableV2State;->(Ljava/lang/Object;Landroidx/compose/animation/core/AnimationSpec;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;F)V +HSPLandroidx/compose/material3/SwipeableV2State;->(Ljava/lang/Object;Landroidx/compose/animation/core/AnimationSpec;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;FILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/material3/SwipeableV2State;->(Ljava/lang/Object;Landroidx/compose/animation/core/AnimationSpec;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;FLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/material3/SwipeableV2State;->getCurrentValue()Ljava/lang/Object; +Landroidx/compose/material3/SwipeableV2State$Companion; +HSPLandroidx/compose/material3/SwipeableV2State$Companion;->()V +HSPLandroidx/compose/material3/SwipeableV2State$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/material3/SwipeableV2State$maxOffset$2; +HSPLandroidx/compose/material3/SwipeableV2State$maxOffset$2;->(Landroidx/compose/material3/SwipeableV2State;)V +Landroidx/compose/material3/SwipeableV2State$minOffset$2; +HSPLandroidx/compose/material3/SwipeableV2State$minOffset$2;->(Landroidx/compose/material3/SwipeableV2State;)V +Landroidx/compose/material3/SwipeableV2State$progress$2; +HSPLandroidx/compose/material3/SwipeableV2State$progress$2;->(Landroidx/compose/material3/SwipeableV2State;)V +Landroidx/compose/material3/SwipeableV2State$swipeDraggableState$1; +HSPLandroidx/compose/material3/SwipeableV2State$swipeDraggableState$1;->(Landroidx/compose/material3/SwipeableV2State;)V +Landroidx/compose/material3/SwipeableV2State$swipeDraggableState$1$dragScope$1; +HSPLandroidx/compose/material3/SwipeableV2State$swipeDraggableState$1$dragScope$1;->(Landroidx/compose/material3/SwipeableV2State;)V +Landroidx/compose/material3/SwipeableV2State$targetValue$2; +HSPLandroidx/compose/material3/SwipeableV2State$targetValue$2;->(Landroidx/compose/material3/SwipeableV2State;)V +Landroidx/compose/material3/SystemBarsDefaultInsets_androidKt; +HSPLandroidx/compose/material3/SystemBarsDefaultInsets_androidKt;->getSystemBarsForVisualComponents(Landroidx/compose/foundation/layout/WindowInsets$Companion;Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/layout/WindowInsets; +Landroidx/compose/material3/TextFieldDefaults; +HSPLandroidx/compose/material3/TextFieldDefaults;->()V +HSPLandroidx/compose/material3/TextFieldDefaults;->()V +HSPLandroidx/compose/material3/TextFieldDefaults;->getMinWidth-D9Ej5fM()F +Landroidx/compose/material3/TextKt; +HSPLandroidx/compose/material3/TextKt;->()V +HSPLandroidx/compose/material3/TextKt;->ProvideTextStyle(Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/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 +HSPLandroidx/compose/material3/TextKt;->Text-IbK3jfQ(Landroidx/compose/ui/text/AnnotatedString;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;JIZIILjava/util/Map;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/runtime/Composer;III)V +HSPLandroidx/compose/material3/TextKt;->getLocalTextStyle()Landroidx/compose/runtime/ProvidableCompositionLocal; +Landroidx/compose/material3/TextKt$LocalTextStyle$1; +HSPLandroidx/compose/material3/TextKt$LocalTextStyle$1;->()V +HSPLandroidx/compose/material3/TextKt$LocalTextStyle$1;->()V +HSPLandroidx/compose/material3/TextKt$LocalTextStyle$1;->invoke()Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/material3/TextKt$LocalTextStyle$1;->invoke()Ljava/lang/Object; +Landroidx/compose/material3/TextKt$ProvideTextStyle$1; +HSPLandroidx/compose/material3/TextKt$ProvideTextStyle$1;->(Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function2;I)V +Landroidx/compose/material3/TextKt$Text$1; +HSPLandroidx/compose/material3/TextKt$Text$1;->()V +HSPLandroidx/compose/material3/TextKt$Text$1;->()V +HSPLandroidx/compose/material3/TextKt$Text$1;->invoke(Landroidx/compose/ui/text/TextLayoutResult;)V +HSPLandroidx/compose/material3/TextKt$Text$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/TextKt$Text$2; +HSPLandroidx/compose/material3/TextKt$Text$2;->(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 +Landroidx/compose/material3/TextKt$Text$5; +HSPLandroidx/compose/material3/TextKt$Text$5;->()V +HSPLandroidx/compose/material3/TextKt$Text$5;->()V +HSPLandroidx/compose/material3/TextKt$Text$5;->invoke(Landroidx/compose/ui/text/TextLayoutResult;)V +HSPLandroidx/compose/material3/TextKt$Text$5;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/TextKt$Text$6; +HSPLandroidx/compose/material3/TextKt$Text$6;->(Landroidx/compose/ui/text/AnnotatedString;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;JIZIILjava/util/Map;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/text/TextStyle;III)V +Landroidx/compose/material3/TonalPalette; +HSPLandroidx/compose/material3/TonalPalette;->(JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ)V +HSPLandroidx/compose/material3/TonalPalette;->(JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/material3/TonalPalette;->getNeutral10-0d7_KjU()J +HSPLandroidx/compose/material3/TonalPalette;->getNeutral20-0d7_KjU()J +HSPLandroidx/compose/material3/TonalPalette;->getNeutral95-0d7_KjU()J +HSPLandroidx/compose/material3/TonalPalette;->getNeutral99-0d7_KjU()J +HSPLandroidx/compose/material3/TonalPalette;->getNeutralVariant30-0d7_KjU()J +HSPLandroidx/compose/material3/TonalPalette;->getNeutralVariant50-0d7_KjU()J +HSPLandroidx/compose/material3/TonalPalette;->getNeutralVariant90-0d7_KjU()J +HSPLandroidx/compose/material3/TonalPalette;->getPrimary10-0d7_KjU()J +HSPLandroidx/compose/material3/TonalPalette;->getPrimary100-0d7_KjU()J +HSPLandroidx/compose/material3/TonalPalette;->getPrimary40-0d7_KjU()J +HSPLandroidx/compose/material3/TonalPalette;->getPrimary80-0d7_KjU()J +HSPLandroidx/compose/material3/TonalPalette;->getPrimary90-0d7_KjU()J +HSPLandroidx/compose/material3/TonalPalette;->getSecondary10-0d7_KjU()J +HSPLandroidx/compose/material3/TonalPalette;->getSecondary100-0d7_KjU()J +HSPLandroidx/compose/material3/TonalPalette;->getSecondary40-0d7_KjU()J +HSPLandroidx/compose/material3/TonalPalette;->getSecondary90-0d7_KjU()J +HSPLandroidx/compose/material3/TonalPalette;->getTertiary10-0d7_KjU()J +HSPLandroidx/compose/material3/TonalPalette;->getTertiary100-0d7_KjU()J +HSPLandroidx/compose/material3/TonalPalette;->getTertiary40-0d7_KjU()J +HSPLandroidx/compose/material3/TonalPalette;->getTertiary90-0d7_KjU()J +Landroidx/compose/material3/TopAppBarDefaults; +HSPLandroidx/compose/material3/TopAppBarDefaults;->()V +HSPLandroidx/compose/material3/TopAppBarDefaults;->()V +HSPLandroidx/compose/material3/TopAppBarDefaults;->getWindowInsets(Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/layout/WindowInsets; +HSPLandroidx/compose/material3/TopAppBarDefaults;->pinnedScrollBehavior(Landroidx/compose/material3/TopAppBarState;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;II)Landroidx/compose/material3/TopAppBarScrollBehavior; +Landroidx/compose/material3/TopAppBarDefaults$pinnedScrollBehavior$1; +HSPLandroidx/compose/material3/TopAppBarDefaults$pinnedScrollBehavior$1;->()V +HSPLandroidx/compose/material3/TopAppBarDefaults$pinnedScrollBehavior$1;->()V +Landroidx/compose/material3/TopAppBarScrollBehavior; +Landroidx/compose/material3/TopAppBarState; +HSPLandroidx/compose/material3/TopAppBarState;->()V +HSPLandroidx/compose/material3/TopAppBarState;->(FFF)V +HSPLandroidx/compose/material3/TopAppBarState;->access$getSaver$cp()Landroidx/compose/runtime/saveable/Saver; +HSPLandroidx/compose/material3/TopAppBarState;->getContentOffset()F +HSPLandroidx/compose/material3/TopAppBarState;->getHeightOffset()F +HSPLandroidx/compose/material3/TopAppBarState;->getHeightOffsetLimit()F +HSPLandroidx/compose/material3/TopAppBarState;->getOverlappedFraction()F +HSPLandroidx/compose/material3/TopAppBarState;->setHeightOffsetLimit(F)V +Landroidx/compose/material3/TopAppBarState$Companion; +HSPLandroidx/compose/material3/TopAppBarState$Companion;->()V +HSPLandroidx/compose/material3/TopAppBarState$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/material3/TopAppBarState$Companion;->getSaver()Landroidx/compose/runtime/saveable/Saver; +Landroidx/compose/material3/TopAppBarState$Companion$Saver$1; +HSPLandroidx/compose/material3/TopAppBarState$Companion$Saver$1;->()V +HSPLandroidx/compose/material3/TopAppBarState$Companion$Saver$1;->()V +HSPLandroidx/compose/material3/TopAppBarState$Companion$Saver$1;->invoke(Landroidx/compose/runtime/saveable/SaverScope;Landroidx/compose/material3/TopAppBarState;)Ljava/util/List; +HSPLandroidx/compose/material3/TopAppBarState$Companion$Saver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/TopAppBarState$Companion$Saver$2; +HSPLandroidx/compose/material3/TopAppBarState$Companion$Saver$2;->()V +HSPLandroidx/compose/material3/TopAppBarState$Companion$Saver$2;->()V +Landroidx/compose/material3/Typography; +HSPLandroidx/compose/material3/Typography;->()V +HSPLandroidx/compose/material3/Typography;->(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 +HSPLandroidx/compose/material3/Typography;->(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;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/material3/Typography;->getBodyLarge()Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/material3/Typography;->getBodyMedium()Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/material3/Typography;->getBodySmall()Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/material3/Typography;->getLabelLarge()Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/material3/Typography;->getLabelMedium()Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/material3/Typography;->getLabelSmall()Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/material3/Typography;->getTitleLarge()Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/material3/Typography;->getTitleMedium()Landroidx/compose/ui/text/TextStyle; +Landroidx/compose/material3/TypographyKt; +HSPLandroidx/compose/material3/TypographyKt;->()V +HSPLandroidx/compose/material3/TypographyKt;->fromToken(Landroidx/compose/material3/Typography;Landroidx/compose/material3/tokens/TypographyKeyTokens;)Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/material3/TypographyKt;->getLocalTypography()Landroidx/compose/runtime/ProvidableCompositionLocal; +Landroidx/compose/material3/TypographyKt$LocalTypography$1; +HSPLandroidx/compose/material3/TypographyKt$LocalTypography$1;->()V +HSPLandroidx/compose/material3/TypographyKt$LocalTypography$1;->()V +Landroidx/compose/material3/TypographyKt$WhenMappings; +HSPLandroidx/compose/material3/TypographyKt$WhenMappings;->()V +Landroidx/compose/material3/tokens/CheckboxTokens; +HSPLandroidx/compose/material3/tokens/CheckboxTokens;->()V +HSPLandroidx/compose/material3/tokens/CheckboxTokens;->()V +HSPLandroidx/compose/material3/tokens/CheckboxTokens;->getSelectedContainerColor()Landroidx/compose/material3/tokens/ColorSchemeKeyTokens; +HSPLandroidx/compose/material3/tokens/CheckboxTokens;->getSelectedDisabledContainerColor()Landroidx/compose/material3/tokens/ColorSchemeKeyTokens; +HSPLandroidx/compose/material3/tokens/CheckboxTokens;->getSelectedIconColor()Landroidx/compose/material3/tokens/ColorSchemeKeyTokens; +HSPLandroidx/compose/material3/tokens/CheckboxTokens;->getUnselectedDisabledOutlineColor()Landroidx/compose/material3/tokens/ColorSchemeKeyTokens; +HSPLandroidx/compose/material3/tokens/CheckboxTokens;->getUnselectedOutlineColor()Landroidx/compose/material3/tokens/ColorSchemeKeyTokens; +Landroidx/compose/material3/tokens/CircularProgressIndicatorTokens; +HSPLandroidx/compose/material3/tokens/CircularProgressIndicatorTokens;->()V +HSPLandroidx/compose/material3/tokens/CircularProgressIndicatorTokens;->()V +HSPLandroidx/compose/material3/tokens/CircularProgressIndicatorTokens;->getActiveIndicatorColor()Landroidx/compose/material3/tokens/ColorSchemeKeyTokens; +HSPLandroidx/compose/material3/tokens/CircularProgressIndicatorTokens;->getActiveIndicatorWidth-D9Ej5fM()F +HSPLandroidx/compose/material3/tokens/CircularProgressIndicatorTokens;->getSize-D9Ej5fM()F +Landroidx/compose/material3/tokens/ColorLightTokens; +HSPLandroidx/compose/material3/tokens/ColorLightTokens;->()V +HSPLandroidx/compose/material3/tokens/ColorLightTokens;->()V +HSPLandroidx/compose/material3/tokens/ColorLightTokens;->getError-0d7_KjU()J +HSPLandroidx/compose/material3/tokens/ColorLightTokens;->getErrorContainer-0d7_KjU()J +HSPLandroidx/compose/material3/tokens/ColorLightTokens;->getOnError-0d7_KjU()J +HSPLandroidx/compose/material3/tokens/ColorLightTokens;->getOnErrorContainer-0d7_KjU()J +HSPLandroidx/compose/material3/tokens/ColorLightTokens;->getOutlineVariant-0d7_KjU()J +HSPLandroidx/compose/material3/tokens/ColorLightTokens;->getScrim-0d7_KjU()J +Landroidx/compose/material3/tokens/ColorSchemeKeyTokens; +HSPLandroidx/compose/material3/tokens/ColorSchemeKeyTokens;->$values()[Landroidx/compose/material3/tokens/ColorSchemeKeyTokens; +HSPLandroidx/compose/material3/tokens/ColorSchemeKeyTokens;->()V +HSPLandroidx/compose/material3/tokens/ColorSchemeKeyTokens;->(Ljava/lang/String;I)V +HSPLandroidx/compose/material3/tokens/ColorSchemeKeyTokens;->values()[Landroidx/compose/material3/tokens/ColorSchemeKeyTokens; +Landroidx/compose/material3/tokens/ElevationTokens; +HSPLandroidx/compose/material3/tokens/ElevationTokens;->()V +HSPLandroidx/compose/material3/tokens/ElevationTokens;->()V +HSPLandroidx/compose/material3/tokens/ElevationTokens;->getLevel0-D9Ej5fM()F +HSPLandroidx/compose/material3/tokens/ElevationTokens;->getLevel1-D9Ej5fM()F +HSPLandroidx/compose/material3/tokens/ElevationTokens;->getLevel2-D9Ej5fM()F +Landroidx/compose/material3/tokens/FilledButtonTokens; +HSPLandroidx/compose/material3/tokens/FilledButtonTokens;->()V +HSPLandroidx/compose/material3/tokens/FilledButtonTokens;->()V +HSPLandroidx/compose/material3/tokens/FilledButtonTokens;->getContainerColor()Landroidx/compose/material3/tokens/ColorSchemeKeyTokens; +HSPLandroidx/compose/material3/tokens/FilledButtonTokens;->getContainerElevation-D9Ej5fM()F +HSPLandroidx/compose/material3/tokens/FilledButtonTokens;->getContainerShape()Landroidx/compose/material3/tokens/ShapeKeyTokens; +HSPLandroidx/compose/material3/tokens/FilledButtonTokens;->getDisabledContainerColor()Landroidx/compose/material3/tokens/ColorSchemeKeyTokens; +HSPLandroidx/compose/material3/tokens/FilledButtonTokens;->getDisabledContainerElevation-D9Ej5fM()F +HSPLandroidx/compose/material3/tokens/FilledButtonTokens;->getDisabledLabelTextColor()Landroidx/compose/material3/tokens/ColorSchemeKeyTokens; +HSPLandroidx/compose/material3/tokens/FilledButtonTokens;->getFocusContainerElevation-D9Ej5fM()F +HSPLandroidx/compose/material3/tokens/FilledButtonTokens;->getHoverContainerElevation-D9Ej5fM()F +HSPLandroidx/compose/material3/tokens/FilledButtonTokens;->getIconSize-D9Ej5fM()F +HSPLandroidx/compose/material3/tokens/FilledButtonTokens;->getLabelTextColor()Landroidx/compose/material3/tokens/ColorSchemeKeyTokens; +HSPLandroidx/compose/material3/tokens/FilledButtonTokens;->getPressedContainerElevation-D9Ej5fM()F +Landroidx/compose/material3/tokens/IconButtonTokens; +HSPLandroidx/compose/material3/tokens/IconButtonTokens;->()V +HSPLandroidx/compose/material3/tokens/IconButtonTokens;->()V +HSPLandroidx/compose/material3/tokens/IconButtonTokens;->getIconSize-D9Ej5fM()F +HSPLandroidx/compose/material3/tokens/IconButtonTokens;->getStateLayerShape()Landroidx/compose/material3/tokens/ShapeKeyTokens; +HSPLandroidx/compose/material3/tokens/IconButtonTokens;->getStateLayerSize-D9Ej5fM()F +Landroidx/compose/material3/tokens/LinearProgressIndicatorTokens; +HSPLandroidx/compose/material3/tokens/LinearProgressIndicatorTokens;->()V +HSPLandroidx/compose/material3/tokens/LinearProgressIndicatorTokens;->()V +HSPLandroidx/compose/material3/tokens/LinearProgressIndicatorTokens;->getTrackHeight-D9Ej5fM()F +Landroidx/compose/material3/tokens/NavigationBarTokens; +HSPLandroidx/compose/material3/tokens/NavigationBarTokens;->()V +HSPLandroidx/compose/material3/tokens/NavigationBarTokens;->()V +HSPLandroidx/compose/material3/tokens/NavigationBarTokens;->getActiveIconColor()Landroidx/compose/material3/tokens/ColorSchemeKeyTokens; +HSPLandroidx/compose/material3/tokens/NavigationBarTokens;->getActiveIndicatorColor()Landroidx/compose/material3/tokens/ColorSchemeKeyTokens; +HSPLandroidx/compose/material3/tokens/NavigationBarTokens;->getActiveIndicatorHeight-D9Ej5fM()F +HSPLandroidx/compose/material3/tokens/NavigationBarTokens;->getActiveIndicatorShape()Landroidx/compose/material3/tokens/ShapeKeyTokens; +HSPLandroidx/compose/material3/tokens/NavigationBarTokens;->getActiveIndicatorWidth-D9Ej5fM()F +HSPLandroidx/compose/material3/tokens/NavigationBarTokens;->getActiveLabelTextColor()Landroidx/compose/material3/tokens/ColorSchemeKeyTokens; +HSPLandroidx/compose/material3/tokens/NavigationBarTokens;->getContainerHeight-D9Ej5fM()F +HSPLandroidx/compose/material3/tokens/NavigationBarTokens;->getIconSize-D9Ej5fM()F +HSPLandroidx/compose/material3/tokens/NavigationBarTokens;->getInactiveIconColor()Landroidx/compose/material3/tokens/ColorSchemeKeyTokens; +HSPLandroidx/compose/material3/tokens/NavigationBarTokens;->getInactiveLabelTextColor()Landroidx/compose/material3/tokens/ColorSchemeKeyTokens; +HSPLandroidx/compose/material3/tokens/NavigationBarTokens;->getLabelTextFont()Landroidx/compose/material3/tokens/TypographyKeyTokens; +Landroidx/compose/material3/tokens/PaletteTokens; +HSPLandroidx/compose/material3/tokens/PaletteTokens;->()V +HSPLandroidx/compose/material3/tokens/PaletteTokens;->()V +HSPLandroidx/compose/material3/tokens/PaletteTokens;->getError10-0d7_KjU()J +HSPLandroidx/compose/material3/tokens/PaletteTokens;->getError100-0d7_KjU()J +HSPLandroidx/compose/material3/tokens/PaletteTokens;->getError40-0d7_KjU()J +HSPLandroidx/compose/material3/tokens/PaletteTokens;->getError90-0d7_KjU()J +HSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral0-0d7_KjU()J +HSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral10-0d7_KjU()J +HSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral20-0d7_KjU()J +HSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral95-0d7_KjU()J +HSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral99-0d7_KjU()J +HSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutralVariant30-0d7_KjU()J +HSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutralVariant50-0d7_KjU()J +HSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutralVariant80-0d7_KjU()J +HSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutralVariant90-0d7_KjU()J +HSPLandroidx/compose/material3/tokens/PaletteTokens;->getPrimary10-0d7_KjU()J +HSPLandroidx/compose/material3/tokens/PaletteTokens;->getPrimary100-0d7_KjU()J +HSPLandroidx/compose/material3/tokens/PaletteTokens;->getPrimary40-0d7_KjU()J +HSPLandroidx/compose/material3/tokens/PaletteTokens;->getPrimary80-0d7_KjU()J +HSPLandroidx/compose/material3/tokens/PaletteTokens;->getPrimary90-0d7_KjU()J +HSPLandroidx/compose/material3/tokens/PaletteTokens;->getSecondary10-0d7_KjU()J +HSPLandroidx/compose/material3/tokens/PaletteTokens;->getSecondary100-0d7_KjU()J +HSPLandroidx/compose/material3/tokens/PaletteTokens;->getSecondary40-0d7_KjU()J +HSPLandroidx/compose/material3/tokens/PaletteTokens;->getSecondary90-0d7_KjU()J +HSPLandroidx/compose/material3/tokens/PaletteTokens;->getTertiary10-0d7_KjU()J +HSPLandroidx/compose/material3/tokens/PaletteTokens;->getTertiary100-0d7_KjU()J +HSPLandroidx/compose/material3/tokens/PaletteTokens;->getTertiary40-0d7_KjU()J +HSPLandroidx/compose/material3/tokens/PaletteTokens;->getTertiary90-0d7_KjU()J +Landroidx/compose/material3/tokens/ShapeKeyTokens; +HSPLandroidx/compose/material3/tokens/ShapeKeyTokens;->$values()[Landroidx/compose/material3/tokens/ShapeKeyTokens; +HSPLandroidx/compose/material3/tokens/ShapeKeyTokens;->()V +HSPLandroidx/compose/material3/tokens/ShapeKeyTokens;->(Ljava/lang/String;I)V +HSPLandroidx/compose/material3/tokens/ShapeKeyTokens;->values()[Landroidx/compose/material3/tokens/ShapeKeyTokens; +Landroidx/compose/material3/tokens/ShapeTokens; +HSPLandroidx/compose/material3/tokens/ShapeTokens;->()V +HSPLandroidx/compose/material3/tokens/ShapeTokens;->()V +HSPLandroidx/compose/material3/tokens/ShapeTokens;->getCornerExtraLarge()Landroidx/compose/foundation/shape/RoundedCornerShape; +HSPLandroidx/compose/material3/tokens/ShapeTokens;->getCornerExtraSmall()Landroidx/compose/foundation/shape/RoundedCornerShape; +HSPLandroidx/compose/material3/tokens/ShapeTokens;->getCornerLarge()Landroidx/compose/foundation/shape/RoundedCornerShape; +HSPLandroidx/compose/material3/tokens/ShapeTokens;->getCornerMedium()Landroidx/compose/foundation/shape/RoundedCornerShape; +HSPLandroidx/compose/material3/tokens/ShapeTokens;->getCornerSmall()Landroidx/compose/foundation/shape/RoundedCornerShape; +Landroidx/compose/material3/tokens/TypeScaleTokens; +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->()V +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->()V +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getBodyLargeFont()Landroidx/compose/ui/text/font/GenericFontFamily; +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getBodyLargeLineHeight-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getBodyLargeSize-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getBodyLargeTracking-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getBodyLargeWeight()Landroidx/compose/ui/text/font/FontWeight; +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getBodyMediumFont()Landroidx/compose/ui/text/font/GenericFontFamily; +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getBodyMediumLineHeight-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getBodyMediumSize-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getBodyMediumTracking-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getBodyMediumWeight()Landroidx/compose/ui/text/font/FontWeight; +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getBodySmallFont()Landroidx/compose/ui/text/font/GenericFontFamily; +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getBodySmallLineHeight-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getBodySmallSize-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getBodySmallTracking-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getBodySmallWeight()Landroidx/compose/ui/text/font/FontWeight; +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getDisplayLargeFont()Landroidx/compose/ui/text/font/GenericFontFamily; +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getDisplayLargeLineHeight-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getDisplayLargeSize-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getDisplayLargeTracking-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getDisplayLargeWeight()Landroidx/compose/ui/text/font/FontWeight; +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getDisplayMediumFont()Landroidx/compose/ui/text/font/GenericFontFamily; +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getDisplayMediumLineHeight-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getDisplayMediumSize-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getDisplayMediumTracking-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getDisplayMediumWeight()Landroidx/compose/ui/text/font/FontWeight; +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getDisplaySmallFont()Landroidx/compose/ui/text/font/GenericFontFamily; +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getDisplaySmallLineHeight-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getDisplaySmallSize-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getDisplaySmallTracking-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getDisplaySmallWeight()Landroidx/compose/ui/text/font/FontWeight; +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getHeadlineLargeFont()Landroidx/compose/ui/text/font/GenericFontFamily; +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getHeadlineLargeLineHeight-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getHeadlineLargeSize-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getHeadlineLargeTracking-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getHeadlineLargeWeight()Landroidx/compose/ui/text/font/FontWeight; +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getHeadlineMediumFont()Landroidx/compose/ui/text/font/GenericFontFamily; +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getHeadlineMediumLineHeight-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getHeadlineMediumSize-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getHeadlineMediumTracking-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getHeadlineMediumWeight()Landroidx/compose/ui/text/font/FontWeight; +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getHeadlineSmallFont()Landroidx/compose/ui/text/font/GenericFontFamily; +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getHeadlineSmallLineHeight-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getHeadlineSmallSize-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getHeadlineSmallTracking-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getHeadlineSmallWeight()Landroidx/compose/ui/text/font/FontWeight; +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getLabelLargeFont()Landroidx/compose/ui/text/font/GenericFontFamily; +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getLabelLargeLineHeight-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getLabelLargeSize-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getLabelLargeTracking-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getLabelLargeWeight()Landroidx/compose/ui/text/font/FontWeight; +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getLabelMediumFont()Landroidx/compose/ui/text/font/GenericFontFamily; +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getLabelMediumLineHeight-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getLabelMediumSize-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getLabelMediumTracking-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getLabelMediumWeight()Landroidx/compose/ui/text/font/FontWeight; +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getLabelSmallFont()Landroidx/compose/ui/text/font/GenericFontFamily; +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getLabelSmallLineHeight-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getLabelSmallSize-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getLabelSmallTracking-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getLabelSmallWeight()Landroidx/compose/ui/text/font/FontWeight; +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getTitleLargeFont()Landroidx/compose/ui/text/font/GenericFontFamily; +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getTitleLargeLineHeight-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getTitleLargeSize-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getTitleLargeTracking-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getTitleLargeWeight()Landroidx/compose/ui/text/font/FontWeight; +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getTitleMediumFont()Landroidx/compose/ui/text/font/GenericFontFamily; +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getTitleMediumLineHeight-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getTitleMediumSize-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getTitleMediumTracking-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getTitleMediumWeight()Landroidx/compose/ui/text/font/FontWeight; +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getTitleSmallFont()Landroidx/compose/ui/text/font/GenericFontFamily; +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getTitleSmallLineHeight-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getTitleSmallSize-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getTitleSmallTracking-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getTitleSmallWeight()Landroidx/compose/ui/text/font/FontWeight; +Landroidx/compose/material3/tokens/TypefaceTokens; +HSPLandroidx/compose/material3/tokens/TypefaceTokens;->()V +HSPLandroidx/compose/material3/tokens/TypefaceTokens;->()V +HSPLandroidx/compose/material3/tokens/TypefaceTokens;->getBrand()Landroidx/compose/ui/text/font/GenericFontFamily; +HSPLandroidx/compose/material3/tokens/TypefaceTokens;->getPlain()Landroidx/compose/ui/text/font/GenericFontFamily; +HSPLandroidx/compose/material3/tokens/TypefaceTokens;->getWeightMedium()Landroidx/compose/ui/text/font/FontWeight; +HSPLandroidx/compose/material3/tokens/TypefaceTokens;->getWeightRegular()Landroidx/compose/ui/text/font/FontWeight; +Landroidx/compose/material3/tokens/TypographyKeyTokens; +HSPLandroidx/compose/material3/tokens/TypographyKeyTokens;->$values()[Landroidx/compose/material3/tokens/TypographyKeyTokens; +HSPLandroidx/compose/material3/tokens/TypographyKeyTokens;->()V +HSPLandroidx/compose/material3/tokens/TypographyKeyTokens;->(Ljava/lang/String;I)V +HSPLandroidx/compose/material3/tokens/TypographyKeyTokens;->values()[Landroidx/compose/material3/tokens/TypographyKeyTokens; +Landroidx/compose/material3/tokens/TypographyTokens; +HSPLandroidx/compose/material3/tokens/TypographyTokens;->()V +HSPLandroidx/compose/material3/tokens/TypographyTokens;->()V +HSPLandroidx/compose/material3/tokens/TypographyTokens;->getBodyLarge()Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/material3/tokens/TypographyTokens;->getBodyMedium()Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/material3/tokens/TypographyTokens;->getBodySmall()Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/material3/tokens/TypographyTokens;->getDisplayLarge()Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/material3/tokens/TypographyTokens;->getDisplayMedium()Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/material3/tokens/TypographyTokens;->getDisplaySmall()Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/material3/tokens/TypographyTokens;->getHeadlineLarge()Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/material3/tokens/TypographyTokens;->getHeadlineMedium()Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/material3/tokens/TypographyTokens;->getHeadlineSmall()Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/material3/tokens/TypographyTokens;->getLabelLarge()Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/material3/tokens/TypographyTokens;->getLabelMedium()Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/material3/tokens/TypographyTokens;->getLabelSmall()Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/material3/tokens/TypographyTokens;->getTitleLarge()Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/material3/tokens/TypographyTokens;->getTitleMedium()Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/material3/tokens/TypographyTokens;->getTitleSmall()Landroidx/compose/ui/text/TextStyle; +Landroidx/compose/material3/tokens/TypographyTokensKt; +HSPLandroidx/compose/material3/tokens/TypographyTokensKt;->()V +HSPLandroidx/compose/material3/tokens/TypographyTokensKt;->getDefaultTextStyle()Landroidx/compose/ui/text/TextStyle; +Landroidx/compose/runtime/AbstractApplier; +HSPLandroidx/compose/runtime/AbstractApplier;->()V +HSPLandroidx/compose/runtime/AbstractApplier;->(Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/AbstractApplier;->clear()V +HSPLandroidx/compose/runtime/AbstractApplier;->down(Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/AbstractApplier;->getCurrent()Ljava/lang/Object; +HSPLandroidx/compose/runtime/AbstractApplier;->getRoot()Ljava/lang/Object; +HSPLandroidx/compose/runtime/AbstractApplier;->setCurrent(Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/AbstractApplier;->up()V +Landroidx/compose/runtime/ActualAndroid_androidKt; +HSPLandroidx/compose/runtime/ActualAndroid_androidKt;->()V +HSPLandroidx/compose/runtime/ActualAndroid_androidKt;->createSnapshotMutableFloatState(F)Landroidx/compose/runtime/MutableFloatState; +HSPLandroidx/compose/runtime/ActualAndroid_androidKt;->createSnapshotMutableIntState(I)Landroidx/compose/runtime/MutableIntState; +HSPLandroidx/compose/runtime/ActualAndroid_androidKt;->createSnapshotMutableLongState(J)Landroidx/compose/runtime/MutableLongState; +HSPLandroidx/compose/runtime/ActualAndroid_androidKt;->createSnapshotMutableState(Ljava/lang/Object;Landroidx/compose/runtime/SnapshotMutationPolicy;)Landroidx/compose/runtime/snapshots/SnapshotMutableState; +Landroidx/compose/runtime/ActualAndroid_androidKt$DefaultMonotonicFrameClock$2; +HSPLandroidx/compose/runtime/ActualAndroid_androidKt$DefaultMonotonicFrameClock$2;->()V +HSPLandroidx/compose/runtime/ActualAndroid_androidKt$DefaultMonotonicFrameClock$2;->()V +Landroidx/compose/runtime/ActualJvm_jvmKt; +HSPLandroidx/compose/runtime/ActualJvm_jvmKt;->identityHashCode(Ljava/lang/Object;)I +HSPLandroidx/compose/runtime/ActualJvm_jvmKt;->invokeComposable(Landroidx/compose/runtime/Composer;Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/runtime/ActualJvm_jvmKt;->invokeComposableForResult(Landroidx/compose/runtime/Composer;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; +Landroidx/compose/runtime/Anchor; +HSPLandroidx/compose/runtime/Anchor;->(I)V +HSPLandroidx/compose/runtime/Anchor;->getLocation$runtime_release()I +HSPLandroidx/compose/runtime/Anchor;->getValid()Z +HSPLandroidx/compose/runtime/Anchor;->setLocation$runtime_release(I)V +HSPLandroidx/compose/runtime/Anchor;->toIndexFor(Landroidx/compose/runtime/SlotTable;)I +HSPLandroidx/compose/runtime/Anchor;->toIndexFor(Landroidx/compose/runtime/SlotWriter;)I +Landroidx/compose/runtime/Applier; +HSPLandroidx/compose/runtime/Applier;->onBeginChanges()V +HSPLandroidx/compose/runtime/Applier;->onEndChanges()V +Landroidx/compose/runtime/AtomicInt; +HSPLandroidx/compose/runtime/AtomicInt;->(I)V +HSPLandroidx/compose/runtime/AtomicInt;->add(I)I +Landroidx/compose/runtime/BroadcastFrameClock; +HSPLandroidx/compose/runtime/BroadcastFrameClock;->()V +HSPLandroidx/compose/runtime/BroadcastFrameClock;->(Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/runtime/BroadcastFrameClock;->access$getAwaiters$p(Landroidx/compose/runtime/BroadcastFrameClock;)Ljava/util/List; +HSPLandroidx/compose/runtime/BroadcastFrameClock;->access$getFailureCause$p(Landroidx/compose/runtime/BroadcastFrameClock;)Ljava/lang/Throwable; +HSPLandroidx/compose/runtime/BroadcastFrameClock;->access$getLock$p(Landroidx/compose/runtime/BroadcastFrameClock;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/BroadcastFrameClock;->access$getOnNewAwaiters$p(Landroidx/compose/runtime/BroadcastFrameClock;)Lkotlin/jvm/functions/Function0; +HSPLandroidx/compose/runtime/BroadcastFrameClock;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/BroadcastFrameClock;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; +HSPLandroidx/compose/runtime/BroadcastFrameClock;->getHasAwaiters()Z +HSPLandroidx/compose/runtime/BroadcastFrameClock;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext; +HSPLandroidx/compose/runtime/BroadcastFrameClock;->sendFrame(J)V +HSPLandroidx/compose/runtime/BroadcastFrameClock;->withFrameNanos(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/compose/runtime/BroadcastFrameClock$FrameAwaiter; +HSPLandroidx/compose/runtime/BroadcastFrameClock$FrameAwaiter;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/runtime/BroadcastFrameClock$FrameAwaiter;->resume(J)V +Landroidx/compose/runtime/BroadcastFrameClock$withFrameNanos$2$1; +HSPLandroidx/compose/runtime/BroadcastFrameClock$withFrameNanos$2$1;->(Landroidx/compose/runtime/BroadcastFrameClock;Lkotlin/jvm/internal/Ref$ObjectRef;)V +HSPLandroidx/compose/runtime/BroadcastFrameClock$withFrameNanos$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/BroadcastFrameClock$withFrameNanos$2$1;->invoke(Ljava/lang/Throwable;)V +Landroidx/compose/runtime/ComposableSingletons$CompositionKt; +HSPLandroidx/compose/runtime/ComposableSingletons$CompositionKt;->()V +HSPLandroidx/compose/runtime/ComposableSingletons$CompositionKt;->()V +HSPLandroidx/compose/runtime/ComposableSingletons$CompositionKt;->getLambda-1$runtime_release()Lkotlin/jvm/functions/Function2; +HSPLandroidx/compose/runtime/ComposableSingletons$CompositionKt;->getLambda-2$runtime_release()Lkotlin/jvm/functions/Function2; +Landroidx/compose/runtime/ComposableSingletons$CompositionKt$lambda-1$1; +HSPLandroidx/compose/runtime/ComposableSingletons$CompositionKt$lambda-1$1;->()V +HSPLandroidx/compose/runtime/ComposableSingletons$CompositionKt$lambda-1$1;->()V +Landroidx/compose/runtime/ComposableSingletons$CompositionKt$lambda-2$1; +HSPLandroidx/compose/runtime/ComposableSingletons$CompositionKt$lambda-2$1;->()V +HSPLandroidx/compose/runtime/ComposableSingletons$CompositionKt$lambda-2$1;->()V +Landroidx/compose/runtime/ComposablesKt; +HSPLandroidx/compose/runtime/ComposablesKt;->getCurrentCompositeKeyHash(Landroidx/compose/runtime/Composer;I)I +HSPLandroidx/compose/runtime/ComposablesKt;->getCurrentRecomposeScope(Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/RecomposeScope; +HSPLandroidx/compose/runtime/ComposablesKt;->rememberCompositionContext(Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/CompositionContext; +Landroidx/compose/runtime/ComposeNodeLifecycleCallback; +Landroidx/compose/runtime/Composer; +HSPLandroidx/compose/runtime/Composer;->()V +Landroidx/compose/runtime/Composer$Companion; +HSPLandroidx/compose/runtime/Composer$Companion;->()V +HSPLandroidx/compose/runtime/Composer$Companion;->()V +HSPLandroidx/compose/runtime/Composer$Companion;->getEmpty()Ljava/lang/Object; +Landroidx/compose/runtime/Composer$Companion$Empty$1; +HSPLandroidx/compose/runtime/Composer$Companion$Empty$1;->()V +Landroidx/compose/runtime/ComposerImpl; +HSPLandroidx/compose/runtime/ComposerImpl;->(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/CompositionContext;Landroidx/compose/runtime/SlotTable;Ljava/util/Set;Ljava/util/List;Ljava/util/List;Landroidx/compose/runtime/ControlledComposition;)V +HSPLandroidx/compose/runtime/ComposerImpl;->access$getChildrenComposing$p(Landroidx/compose/runtime/ComposerImpl;)I +HSPLandroidx/compose/runtime/ComposerImpl;->access$getParentContext$p(Landroidx/compose/runtime/ComposerImpl;)Landroidx/compose/runtime/CompositionContext; +HSPLandroidx/compose/runtime/ComposerImpl;->access$getReader$p(Landroidx/compose/runtime/ComposerImpl;)Landroidx/compose/runtime/SlotReader; +HSPLandroidx/compose/runtime/ComposerImpl;->access$setChildrenComposing$p(Landroidx/compose/runtime/ComposerImpl;I)V +HSPLandroidx/compose/runtime/ComposerImpl;->addRecomposeScope()V +HSPLandroidx/compose/runtime/ComposerImpl;->apply(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/runtime/ComposerImpl;->buildContext()Landroidx/compose/runtime/CompositionContext; +HSPLandroidx/compose/runtime/ComposerImpl;->changed(F)Z +HSPLandroidx/compose/runtime/ComposerImpl;->changed(I)Z +HSPLandroidx/compose/runtime/ComposerImpl;->changed(J)Z +HSPLandroidx/compose/runtime/ComposerImpl;->changed(Ljava/lang/Object;)Z +HSPLandroidx/compose/runtime/ComposerImpl;->changed(Z)Z +HSPLandroidx/compose/runtime/ComposerImpl;->changedInstance(Ljava/lang/Object;)Z +HSPLandroidx/compose/runtime/ComposerImpl;->changesApplied$runtime_release()V +HSPLandroidx/compose/runtime/ComposerImpl;->cleanUpCompose()V +HSPLandroidx/compose/runtime/ComposerImpl;->clearUpdatedNodeCounts()V +HSPLandroidx/compose/runtime/ComposerImpl;->composeContent$runtime_release(Landroidx/compose/runtime/collection/IdentityArrayMap;Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/runtime/ComposerImpl;->compoundKeyOf(III)I +HSPLandroidx/compose/runtime/ComposerImpl;->consume(Landroidx/compose/runtime/CompositionLocal;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/ComposerImpl;->createFreshInsertTable()V +HSPLandroidx/compose/runtime/ComposerImpl;->createNode(Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/runtime/ComposerImpl;->currentCompositionLocalScope()Landroidx/compose/runtime/PersistentCompositionLocalMap; +HSPLandroidx/compose/runtime/ComposerImpl;->currentCompositionLocalScope(I)Landroidx/compose/runtime/PersistentCompositionLocalMap; +HSPLandroidx/compose/runtime/ComposerImpl;->deactivateToEndGroup(Z)V +HSPLandroidx/compose/runtime/ComposerImpl;->disableReusing()V +HSPLandroidx/compose/runtime/ComposerImpl;->dispose$runtime_release()V +HSPLandroidx/compose/runtime/ComposerImpl;->doCompose(Landroidx/compose/runtime/collection/IdentityArrayMap;Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/runtime/ComposerImpl;->doRecordDownsFor(II)V +HSPLandroidx/compose/runtime/ComposerImpl;->enableReusing()V +HSPLandroidx/compose/runtime/ComposerImpl;->end(Z)V +HSPLandroidx/compose/runtime/ComposerImpl;->endDefaults()V +HSPLandroidx/compose/runtime/ComposerImpl;->endGroup()V +HSPLandroidx/compose/runtime/ComposerImpl;->endMovableGroup()V +HSPLandroidx/compose/runtime/ComposerImpl;->endNode()V +HSPLandroidx/compose/runtime/ComposerImpl;->endProviders()V +HSPLandroidx/compose/runtime/ComposerImpl;->endReplaceableGroup()V +HSPLandroidx/compose/runtime/ComposerImpl;->endRestartGroup()Landroidx/compose/runtime/ScopeUpdateScope; +HSPLandroidx/compose/runtime/ComposerImpl;->endReusableGroup()V +HSPLandroidx/compose/runtime/ComposerImpl;->endRoot()V +HSPLandroidx/compose/runtime/ComposerImpl;->ensureWriter()V +HSPLandroidx/compose/runtime/ComposerImpl;->enterGroup(ZLandroidx/compose/runtime/Pending;)V +HSPLandroidx/compose/runtime/ComposerImpl;->exitGroup(IZ)V +HSPLandroidx/compose/runtime/ComposerImpl;->finalizeCompose()V +HSPLandroidx/compose/runtime/ComposerImpl;->getApplier()Landroidx/compose/runtime/Applier; +HSPLandroidx/compose/runtime/ComposerImpl;->getApplyCoroutineContext()Lkotlin/coroutines/CoroutineContext; +HSPLandroidx/compose/runtime/ComposerImpl;->getAreChildrenComposing$runtime_release()Z +HSPLandroidx/compose/runtime/ComposerImpl;->getComposition()Landroidx/compose/runtime/ControlledComposition; +HSPLandroidx/compose/runtime/ComposerImpl;->getCompoundKeyHash()I +HSPLandroidx/compose/runtime/ComposerImpl;->getCurrentCompositionLocalMap()Landroidx/compose/runtime/CompositionLocalMap; +HSPLandroidx/compose/runtime/ComposerImpl;->getCurrentRecomposeScope$runtime_release()Landroidx/compose/runtime/RecomposeScopeImpl; +HSPLandroidx/compose/runtime/ComposerImpl;->getDefaultsInvalid()Z +HSPLandroidx/compose/runtime/ComposerImpl;->getDeferredChanges$runtime_release()Ljava/util/List; +HSPLandroidx/compose/runtime/ComposerImpl;->getInserting()Z +HSPLandroidx/compose/runtime/ComposerImpl;->getNode(Landroidx/compose/runtime/SlotReader;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/ComposerImpl;->getRecomposeScope()Landroidx/compose/runtime/RecomposeScope; +HSPLandroidx/compose/runtime/ComposerImpl;->getSkipping()Z +HSPLandroidx/compose/runtime/ComposerImpl;->groupCompoundKeyPart(Landroidx/compose/runtime/SlotReader;I)I +HSPLandroidx/compose/runtime/ComposerImpl;->insertedGroupVirtualIndex(I)I +HSPLandroidx/compose/runtime/ComposerImpl;->isComposing$runtime_release()Z +HSPLandroidx/compose/runtime/ComposerImpl;->nextSlot()Ljava/lang/Object; +HSPLandroidx/compose/runtime/ComposerImpl;->nodeAt(Landroidx/compose/runtime/SlotReader;I)Ljava/lang/Object; +HSPLandroidx/compose/runtime/ComposerImpl;->nodeIndexOf(IIII)I +HSPLandroidx/compose/runtime/ComposerImpl;->prepareCompose$runtime_release(Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/runtime/ComposerImpl;->realizeDowns()V +HSPLandroidx/compose/runtime/ComposerImpl;->realizeDowns([Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/ComposerImpl;->realizeMovement()V +HSPLandroidx/compose/runtime/ComposerImpl;->realizeOperationLocation$default(Landroidx/compose/runtime/ComposerImpl;ZILjava/lang/Object;)V +HSPLandroidx/compose/runtime/ComposerImpl;->realizeOperationLocation(Z)V +HSPLandroidx/compose/runtime/ComposerImpl;->realizeUps()V +HSPLandroidx/compose/runtime/ComposerImpl;->recompose$runtime_release(Landroidx/compose/runtime/collection/IdentityArrayMap;)Z +HSPLandroidx/compose/runtime/ComposerImpl;->recomposeToGroupEnd()V +HSPLandroidx/compose/runtime/ComposerImpl;->record(Lkotlin/jvm/functions/Function3;)V +HSPLandroidx/compose/runtime/ComposerImpl;->recordApplierOperation(Lkotlin/jvm/functions/Function3;)V +HSPLandroidx/compose/runtime/ComposerImpl;->recordDelete()V +HSPLandroidx/compose/runtime/ComposerImpl;->recordDown(Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/ComposerImpl;->recordEndGroup()V +HSPLandroidx/compose/runtime/ComposerImpl;->recordEndRoot()V +HSPLandroidx/compose/runtime/ComposerImpl;->recordFixup(Lkotlin/jvm/functions/Function3;)V +HSPLandroidx/compose/runtime/ComposerImpl;->recordInsert(Landroidx/compose/runtime/Anchor;)V +HSPLandroidx/compose/runtime/ComposerImpl;->recordInsertUpFixup(Lkotlin/jvm/functions/Function3;)V +HSPLandroidx/compose/runtime/ComposerImpl;->recordReaderMoving(I)V +HSPLandroidx/compose/runtime/ComposerImpl;->recordRemoveNode(II)V +HSPLandroidx/compose/runtime/ComposerImpl;->recordSideEffect(Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/runtime/ComposerImpl;->recordSlotEditing()V +HSPLandroidx/compose/runtime/ComposerImpl;->recordSlotEditingOperation(Lkotlin/jvm/functions/Function3;)V +HSPLandroidx/compose/runtime/ComposerImpl;->recordSlotTableOperation$default(Landroidx/compose/runtime/ComposerImpl;ZLkotlin/jvm/functions/Function3;ILjava/lang/Object;)V +HSPLandroidx/compose/runtime/ComposerImpl;->recordSlotTableOperation(ZLkotlin/jvm/functions/Function3;)V +HSPLandroidx/compose/runtime/ComposerImpl;->recordUp()V +HSPLandroidx/compose/runtime/ComposerImpl;->recordUpsAndDowns(III)V +HSPLandroidx/compose/runtime/ComposerImpl;->recordUsed(Landroidx/compose/runtime/RecomposeScope;)V +HSPLandroidx/compose/runtime/ComposerImpl;->registerInsertUpFixup()V +HSPLandroidx/compose/runtime/ComposerImpl;->rememberedValue()Ljava/lang/Object; +HSPLandroidx/compose/runtime/ComposerImpl;->reportAllMovableContent()V +HSPLandroidx/compose/runtime/ComposerImpl;->reportFreeMovableContent$reportGroup(Landroidx/compose/runtime/ComposerImpl;IZI)I +HSPLandroidx/compose/runtime/ComposerImpl;->reportFreeMovableContent(I)V +HSPLandroidx/compose/runtime/ComposerImpl;->skipCurrentGroup()V +HSPLandroidx/compose/runtime/ComposerImpl;->skipGroup()V +HSPLandroidx/compose/runtime/ComposerImpl;->skipReaderToGroupEnd()V +HSPLandroidx/compose/runtime/ComposerImpl;->skipToGroupEnd()V +HSPLandroidx/compose/runtime/ComposerImpl;->sourceInformation(Ljava/lang/String;)V +HSPLandroidx/compose/runtime/ComposerImpl;->sourceInformationMarkerEnd()V +HSPLandroidx/compose/runtime/ComposerImpl;->sourceInformationMarkerStart(ILjava/lang/String;)V +HSPLandroidx/compose/runtime/ComposerImpl;->start-BaiHCIY(ILjava/lang/Object;ILjava/lang/Object;)V +HSPLandroidx/compose/runtime/ComposerImpl;->startDefaults()V +HSPLandroidx/compose/runtime/ComposerImpl;->startGroup(I)V +HSPLandroidx/compose/runtime/ComposerImpl;->startGroup(ILjava/lang/Object;)V +HSPLandroidx/compose/runtime/ComposerImpl;->startMovableGroup(ILjava/lang/Object;)V +HSPLandroidx/compose/runtime/ComposerImpl;->startNode()V +HSPLandroidx/compose/runtime/ComposerImpl;->startProviders([Landroidx/compose/runtime/ProvidedValue;)V +HSPLandroidx/compose/runtime/ComposerImpl;->startReaderGroup(ZLjava/lang/Object;)V +HSPLandroidx/compose/runtime/ComposerImpl;->startReplaceableGroup(I)V +HSPLandroidx/compose/runtime/ComposerImpl;->startRestartGroup(I)Landroidx/compose/runtime/Composer; +HSPLandroidx/compose/runtime/ComposerImpl;->startReusableGroup(ILjava/lang/Object;)V +HSPLandroidx/compose/runtime/ComposerImpl;->startReusableNode()V +HSPLandroidx/compose/runtime/ComposerImpl;->startRoot()V +HSPLandroidx/compose/runtime/ComposerImpl;->tryImminentInvalidation$runtime_release(Landroidx/compose/runtime/RecomposeScopeImpl;Ljava/lang/Object;)Z +HSPLandroidx/compose/runtime/ComposerImpl;->updateCompoundKeyWhenWeEnterGroup(ILjava/lang/Object;Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/ComposerImpl;->updateCompoundKeyWhenWeEnterGroupKeyHash(I)V +HSPLandroidx/compose/runtime/ComposerImpl;->updateCompoundKeyWhenWeExitGroup(ILjava/lang/Object;Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/ComposerImpl;->updateCompoundKeyWhenWeExitGroupKeyHash(I)V +HSPLandroidx/compose/runtime/ComposerImpl;->updateNodeCount(II)V +HSPLandroidx/compose/runtime/ComposerImpl;->updateNodeCountOverrides(II)V +HSPLandroidx/compose/runtime/ComposerImpl;->updateProviderMapGroup(Landroidx/compose/runtime/PersistentCompositionLocalMap;Landroidx/compose/runtime/PersistentCompositionLocalMap;)Landroidx/compose/runtime/PersistentCompositionLocalMap; +HSPLandroidx/compose/runtime/ComposerImpl;->updateRememberedValue(Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/ComposerImpl;->updateValue(Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/ComposerImpl;->updatedNodeCount(I)I +HSPLandroidx/compose/runtime/ComposerImpl;->useNode()V +HSPLandroidx/compose/runtime/ComposerImpl;->validateNodeExpected()V +HSPLandroidx/compose/runtime/ComposerImpl;->validateNodeNotExpected()V +Landroidx/compose/runtime/ComposerImpl$CompositionContextHolder; +HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextHolder;->(Landroidx/compose/runtime/ComposerImpl$CompositionContextImpl;)V +HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextHolder;->getRef()Landroidx/compose/runtime/ComposerImpl$CompositionContextImpl; +HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextHolder;->onForgotten()V +HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextHolder;->onRemembered()V +Landroidx/compose/runtime/ComposerImpl$CompositionContextImpl; +HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->(Landroidx/compose/runtime/ComposerImpl;IZ)V +HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->composeInitial$runtime_release(Landroidx/compose/runtime/ControlledComposition;Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->dispose()V +HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->doneComposing$runtime_release()V +HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getCollectingParameterInformation$runtime_release()Z +HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getComposers()Ljava/util/Set; +HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getCompositionLocalScope$runtime_release()Landroidx/compose/runtime/PersistentCompositionLocalMap; +HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getCompositionLocalScope()Landroidx/compose/runtime/PersistentCompositionLocalMap; +HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getCompoundHashKey$runtime_release()I +HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getEffectCoroutineContext()Lkotlin/coroutines/CoroutineContext; +HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->invalidate$runtime_release(Landroidx/compose/runtime/ControlledComposition;)V +HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->registerComposer$runtime_release(Landroidx/compose/runtime/Composer;)V +HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->setCompositionLocalScope(Landroidx/compose/runtime/PersistentCompositionLocalMap;)V +HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->startComposing$runtime_release()V +HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->unregisterComposer$runtime_release(Landroidx/compose/runtime/Composer;)V +HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->unregisterComposition$runtime_release(Landroidx/compose/runtime/ControlledComposition;)V +HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->updateCompositionLocalScope(Landroidx/compose/runtime/PersistentCompositionLocalMap;)V +Landroidx/compose/runtime/ComposerImpl$apply$operation$1; +HSPLandroidx/compose/runtime/ComposerImpl$apply$operation$1;->(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/ComposerImpl$apply$operation$1;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V +HSPLandroidx/compose/runtime/ComposerImpl$apply$operation$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/ComposerImpl$createNode$2; +HSPLandroidx/compose/runtime/ComposerImpl$createNode$2;->(Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Anchor;I)V +HSPLandroidx/compose/runtime/ComposerImpl$createNode$2;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V +HSPLandroidx/compose/runtime/ComposerImpl$createNode$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/ComposerImpl$createNode$3; +HSPLandroidx/compose/runtime/ComposerImpl$createNode$3;->(Landroidx/compose/runtime/Anchor;I)V +HSPLandroidx/compose/runtime/ComposerImpl$createNode$3;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V +HSPLandroidx/compose/runtime/ComposerImpl$createNode$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/ComposerImpl$deactivateToEndGroup$2; +HSPLandroidx/compose/runtime/ComposerImpl$deactivateToEndGroup$2;->(Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/ComposerImpl$deactivateToEndGroup$2;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V +HSPLandroidx/compose/runtime/ComposerImpl$deactivateToEndGroup$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/ComposerImpl$deactivateToEndGroup$3; +HSPLandroidx/compose/runtime/ComposerImpl$deactivateToEndGroup$3;->(Landroidx/compose/runtime/ComposerImpl;I)V +HSPLandroidx/compose/runtime/ComposerImpl$deactivateToEndGroup$3;->invoke(ILjava/lang/Object;)V +HSPLandroidx/compose/runtime/ComposerImpl$deactivateToEndGroup$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/ComposerImpl$deactivateToEndGroup$3$1; +HSPLandroidx/compose/runtime/ComposerImpl$deactivateToEndGroup$3$1;->(Ljava/lang/Object;I)V +HSPLandroidx/compose/runtime/ComposerImpl$deactivateToEndGroup$3$1;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V +HSPLandroidx/compose/runtime/ComposerImpl$deactivateToEndGroup$3$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/ComposerImpl$deactivateToEndGroup$3$2; +HSPLandroidx/compose/runtime/ComposerImpl$deactivateToEndGroup$3$2;->(Ljava/lang/Object;I)V +HSPLandroidx/compose/runtime/ComposerImpl$deactivateToEndGroup$3$2;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V +HSPLandroidx/compose/runtime/ComposerImpl$deactivateToEndGroup$3$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/ComposerImpl$derivedStateObserver$1; +HSPLandroidx/compose/runtime/ComposerImpl$derivedStateObserver$1;->(Landroidx/compose/runtime/ComposerImpl;)V +HSPLandroidx/compose/runtime/ComposerImpl$derivedStateObserver$1;->done(Landroidx/compose/runtime/DerivedState;)V +HSPLandroidx/compose/runtime/ComposerImpl$derivedStateObserver$1;->start(Landroidx/compose/runtime/DerivedState;)V +Landroidx/compose/runtime/ComposerImpl$doCompose$lambda$38$$inlined$sortBy$1; +HSPLandroidx/compose/runtime/ComposerImpl$doCompose$lambda$38$$inlined$sortBy$1;->()V +HSPLandroidx/compose/runtime/ComposerImpl$doCompose$lambda$38$$inlined$sortBy$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I +Landroidx/compose/runtime/ComposerImpl$endRestartGroup$1$1; +HSPLandroidx/compose/runtime/ComposerImpl$endRestartGroup$1$1;->(Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/ComposerImpl;)V +HSPLandroidx/compose/runtime/ComposerImpl$endRestartGroup$1$1;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V +HSPLandroidx/compose/runtime/ComposerImpl$endRestartGroup$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/ComposerImpl$realizeDowns$1; +HSPLandroidx/compose/runtime/ComposerImpl$realizeDowns$1;->([Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/ComposerImpl$realizeDowns$1;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V +HSPLandroidx/compose/runtime/ComposerImpl$realizeDowns$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/ComposerImpl$realizeMovement$1; +HSPLandroidx/compose/runtime/ComposerImpl$realizeMovement$1;->(II)V +HSPLandroidx/compose/runtime/ComposerImpl$realizeMovement$1;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V +HSPLandroidx/compose/runtime/ComposerImpl$realizeMovement$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/ComposerImpl$realizeMovement$2; +Landroidx/compose/runtime/ComposerImpl$realizeOperationLocation$2; +HSPLandroidx/compose/runtime/ComposerImpl$realizeOperationLocation$2;->(I)V +HSPLandroidx/compose/runtime/ComposerImpl$realizeOperationLocation$2;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V +HSPLandroidx/compose/runtime/ComposerImpl$realizeOperationLocation$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/ComposerImpl$realizeUps$1; +HSPLandroidx/compose/runtime/ComposerImpl$realizeUps$1;->(I)V +HSPLandroidx/compose/runtime/ComposerImpl$realizeUps$1;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V +HSPLandroidx/compose/runtime/ComposerImpl$realizeUps$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/ComposerImpl$recordInsert$1; +HSPLandroidx/compose/runtime/ComposerImpl$recordInsert$1;->(Landroidx/compose/runtime/SlotTable;Landroidx/compose/runtime/Anchor;)V +HSPLandroidx/compose/runtime/ComposerImpl$recordInsert$1;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V +HSPLandroidx/compose/runtime/ComposerImpl$recordInsert$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/ComposerImpl$recordInsert$2; +HSPLandroidx/compose/runtime/ComposerImpl$recordInsert$2;->(Landroidx/compose/runtime/SlotTable;Landroidx/compose/runtime/Anchor;Ljava/util/List;)V +HSPLandroidx/compose/runtime/ComposerImpl$recordInsert$2;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V +HSPLandroidx/compose/runtime/ComposerImpl$recordInsert$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/ComposerImpl$recordSideEffect$1; +HSPLandroidx/compose/runtime/ComposerImpl$recordSideEffect$1;->(Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/runtime/ComposerImpl$recordSideEffect$1;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V +HSPLandroidx/compose/runtime/ComposerImpl$recordSideEffect$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/ComposerImpl$recordSlotEditing$1; +HSPLandroidx/compose/runtime/ComposerImpl$recordSlotEditing$1;->(Landroidx/compose/runtime/Anchor;)V +HSPLandroidx/compose/runtime/ComposerImpl$recordSlotEditing$1;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V +HSPLandroidx/compose/runtime/ComposerImpl$recordSlotEditing$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/ComposerImpl$start$2; +HSPLandroidx/compose/runtime/ComposerImpl$start$2;->(I)V +HSPLandroidx/compose/runtime/ComposerImpl$start$2;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V +HSPLandroidx/compose/runtime/ComposerImpl$start$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/ComposerImpl$startProviders$currentProviders$1; +HSPLandroidx/compose/runtime/ComposerImpl$startProviders$currentProviders$1;->([Landroidx/compose/runtime/ProvidedValue;Landroidx/compose/runtime/PersistentCompositionLocalMap;)V +HSPLandroidx/compose/runtime/ComposerImpl$startProviders$currentProviders$1;->invoke(Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/PersistentCompositionLocalMap; +HSPLandroidx/compose/runtime/ComposerImpl$startProviders$currentProviders$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/ComposerImpl$startReaderGroup$1; +PLandroidx/compose/runtime/ComposerImpl$startReaderGroup$1;->(Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/ComposerImpl$startReaderGroup$1;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V +HSPLandroidx/compose/runtime/ComposerImpl$startReaderGroup$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/ComposerImpl$updateValue$1; +HSPLandroidx/compose/runtime/ComposerImpl$updateValue$1;->(Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/ComposerImpl$updateValue$1;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V +HSPLandroidx/compose/runtime/ComposerImpl$updateValue$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/ComposerImpl$updateValue$2; +HSPLandroidx/compose/runtime/ComposerImpl$updateValue$2;->(Ljava/lang/Object;I)V +HSPLandroidx/compose/runtime/ComposerImpl$updateValue$2;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V +HSPLandroidx/compose/runtime/ComposerImpl$updateValue$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/ComposerKt; +HSPLandroidx/compose/runtime/ComposerKt;->()V +HSPLandroidx/compose/runtime/ComposerKt;->access$asBool(I)Z +HSPLandroidx/compose/runtime/ComposerKt;->access$asInt(Z)I +HSPLandroidx/compose/runtime/ComposerKt;->access$firstInRange(Ljava/util/List;II)Landroidx/compose/runtime/Invalidation; +HSPLandroidx/compose/runtime/ComposerKt;->access$getEndGroupInstance$p()Lkotlin/jvm/functions/Function3; +HSPLandroidx/compose/runtime/ComposerKt;->access$getJoinedKey(Landroidx/compose/runtime/KeyInfo;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/ComposerKt;->access$getRemoveCurrentGroupInstance$p()Lkotlin/jvm/functions/Function3; +HSPLandroidx/compose/runtime/ComposerKt;->access$getStartRootGroup$p()Lkotlin/jvm/functions/Function3; +HSPLandroidx/compose/runtime/ComposerKt;->access$insertIfMissing(Ljava/util/List;ILandroidx/compose/runtime/RecomposeScopeImpl;Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/ComposerKt;->access$multiMap()Ljava/util/HashMap; +HSPLandroidx/compose/runtime/ComposerKt;->access$nearestCommonRootOf(Landroidx/compose/runtime/SlotReader;III)I +HSPLandroidx/compose/runtime/ComposerKt;->access$pop(Ljava/util/HashMap;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/ComposerKt;->access$put(Ljava/util/HashMap;Ljava/lang/Object;Ljava/lang/Object;)Z +HSPLandroidx/compose/runtime/ComposerKt;->access$removeLocation(Ljava/util/List;I)Landroidx/compose/runtime/Invalidation; +HSPLandroidx/compose/runtime/ComposerKt;->access$removeRange(Ljava/util/List;II)V +HSPLandroidx/compose/runtime/ComposerKt;->asBool(I)Z +HSPLandroidx/compose/runtime/ComposerKt;->asInt(Z)I +HSPLandroidx/compose/runtime/ComposerKt;->distanceFrom(Landroidx/compose/runtime/SlotReader;II)I +HSPLandroidx/compose/runtime/ComposerKt;->findInsertLocation(Ljava/util/List;I)I +HSPLandroidx/compose/runtime/ComposerKt;->findLocation(Ljava/util/List;I)I +HSPLandroidx/compose/runtime/ComposerKt;->firstInRange(Ljava/util/List;II)Landroidx/compose/runtime/Invalidation; +HSPLandroidx/compose/runtime/ComposerKt;->getCompositionLocalMap()Ljava/lang/Object; +HSPLandroidx/compose/runtime/ComposerKt;->getInvocation()Ljava/lang/Object; +HSPLandroidx/compose/runtime/ComposerKt;->getJoinedKey(Landroidx/compose/runtime/KeyInfo;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/ComposerKt;->getProvider()Ljava/lang/Object; +HSPLandroidx/compose/runtime/ComposerKt;->getProviderMaps()Ljava/lang/Object; +HSPLandroidx/compose/runtime/ComposerKt;->getProviderValues()Ljava/lang/Object; +HSPLandroidx/compose/runtime/ComposerKt;->getReference()Ljava/lang/Object; +HSPLandroidx/compose/runtime/ComposerKt;->insertIfMissing(Ljava/util/List;ILandroidx/compose/runtime/RecomposeScopeImpl;Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/ComposerKt;->isTraceInProgress()Z +HSPLandroidx/compose/runtime/ComposerKt;->multiMap()Ljava/util/HashMap; +HSPLandroidx/compose/runtime/ComposerKt;->nearestCommonRootOf(Landroidx/compose/runtime/SlotReader;III)I +HSPLandroidx/compose/runtime/ComposerKt;->pop(Ljava/util/HashMap;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/ComposerKt;->put(Ljava/util/HashMap;Ljava/lang/Object;Ljava/lang/Object;)Z +HSPLandroidx/compose/runtime/ComposerKt;->remove(Ljava/util/HashMap;Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Unit; +HSPLandroidx/compose/runtime/ComposerKt;->removeCurrentGroup(Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V +HSPLandroidx/compose/runtime/ComposerKt;->removeLocation(Ljava/util/List;I)Landroidx/compose/runtime/Invalidation; +HSPLandroidx/compose/runtime/ComposerKt;->removeRange(Ljava/util/List;II)V +HSPLandroidx/compose/runtime/ComposerKt;->runtimeCheck(Z)V +HSPLandroidx/compose/runtime/ComposerKt;->sourceInformation(Landroidx/compose/runtime/Composer;Ljava/lang/String;)V +HSPLandroidx/compose/runtime/ComposerKt;->sourceInformationMarkerEnd(Landroidx/compose/runtime/Composer;)V +HSPLandroidx/compose/runtime/ComposerKt;->sourceInformationMarkerStart(Landroidx/compose/runtime/Composer;ILjava/lang/String;)V +Landroidx/compose/runtime/ComposerKt$endGroupInstance$1; +HSPLandroidx/compose/runtime/ComposerKt$endGroupInstance$1;->()V +HSPLandroidx/compose/runtime/ComposerKt$endGroupInstance$1;->()V +HSPLandroidx/compose/runtime/ComposerKt$endGroupInstance$1;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V +HSPLandroidx/compose/runtime/ComposerKt$endGroupInstance$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/ComposerKt$removeCurrentGroupInstance$1; +HSPLandroidx/compose/runtime/ComposerKt$removeCurrentGroupInstance$1;->()V +HSPLandroidx/compose/runtime/ComposerKt$removeCurrentGroupInstance$1;->()V +HSPLandroidx/compose/runtime/ComposerKt$removeCurrentGroupInstance$1;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V +HSPLandroidx/compose/runtime/ComposerKt$removeCurrentGroupInstance$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/ComposerKt$resetSlotsInstance$1; +HSPLandroidx/compose/runtime/ComposerKt$resetSlotsInstance$1;->()V +HSPLandroidx/compose/runtime/ComposerKt$resetSlotsInstance$1;->()V +Landroidx/compose/runtime/ComposerKt$skipToGroupEndInstance$1; +HSPLandroidx/compose/runtime/ComposerKt$skipToGroupEndInstance$1;->()V +HSPLandroidx/compose/runtime/ComposerKt$skipToGroupEndInstance$1;->()V +Landroidx/compose/runtime/ComposerKt$startRootGroup$1; +HSPLandroidx/compose/runtime/ComposerKt$startRootGroup$1;->()V +HSPLandroidx/compose/runtime/ComposerKt$startRootGroup$1;->()V +HSPLandroidx/compose/runtime/ComposerKt$startRootGroup$1;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V +HSPLandroidx/compose/runtime/ComposerKt$startRootGroup$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/Composition; +Landroidx/compose/runtime/CompositionContext; +HSPLandroidx/compose/runtime/CompositionContext;->()V +HSPLandroidx/compose/runtime/CompositionContext;->()V +HSPLandroidx/compose/runtime/CompositionContext;->doneComposing$runtime_release()V +HSPLandroidx/compose/runtime/CompositionContext;->getCompositionLocalScope$runtime_release()Landroidx/compose/runtime/PersistentCompositionLocalMap; +HSPLandroidx/compose/runtime/CompositionContext;->registerComposer$runtime_release(Landroidx/compose/runtime/Composer;)V +HSPLandroidx/compose/runtime/CompositionContext;->startComposing$runtime_release()V +Landroidx/compose/runtime/CompositionContextKt; +HSPLandroidx/compose/runtime/CompositionContextKt;->()V +HSPLandroidx/compose/runtime/CompositionContextKt;->access$getEmptyPersistentCompositionLocalMap$p()Landroidx/compose/runtime/PersistentCompositionLocalMap; +Landroidx/compose/runtime/CompositionImpl; +HSPLandroidx/compose/runtime/CompositionImpl;->(Landroidx/compose/runtime/CompositionContext;Landroidx/compose/runtime/Applier;Lkotlin/coroutines/CoroutineContext;)V +HSPLandroidx/compose/runtime/CompositionImpl;->(Landroidx/compose/runtime/CompositionContext;Landroidx/compose/runtime/Applier;Lkotlin/coroutines/CoroutineContext;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/runtime/CompositionImpl;->addPendingInvalidationsLocked(Ljava/util/HashSet;Ljava/lang/Object;Z)Ljava/util/HashSet; +HSPLandroidx/compose/runtime/CompositionImpl;->addPendingInvalidationsLocked(Ljava/util/Set;Z)V +HSPLandroidx/compose/runtime/CompositionImpl;->applyChanges()V +HSPLandroidx/compose/runtime/CompositionImpl;->applyChangesInLocked(Ljava/util/List;)V +HSPLandroidx/compose/runtime/CompositionImpl;->applyLateChanges()V +HSPLandroidx/compose/runtime/CompositionImpl;->changesApplied()V +HSPLandroidx/compose/runtime/CompositionImpl;->cleanUpDerivedStateObservations()V +HSPLandroidx/compose/runtime/CompositionImpl;->composeContent(Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/runtime/CompositionImpl;->dispose()V +HSPLandroidx/compose/runtime/CompositionImpl;->drainPendingModificationsForCompositionLocked()V +HSPLandroidx/compose/runtime/CompositionImpl;->drainPendingModificationsLocked()V +HSPLandroidx/compose/runtime/CompositionImpl;->getAreChildrenComposing()Z +HSPLandroidx/compose/runtime/CompositionImpl;->getHasInvalidations()Z +HSPLandroidx/compose/runtime/CompositionImpl;->invalidate(Landroidx/compose/runtime/RecomposeScopeImpl;Ljava/lang/Object;)Landroidx/compose/runtime/InvalidationResult; +HSPLandroidx/compose/runtime/CompositionImpl;->invalidateChecked(Landroidx/compose/runtime/RecomposeScopeImpl;Landroidx/compose/runtime/Anchor;Ljava/lang/Object;)Landroidx/compose/runtime/InvalidationResult; +HSPLandroidx/compose/runtime/CompositionImpl;->invalidateScopeOfLocked(Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/CompositionImpl;->isComposing()Z +HSPLandroidx/compose/runtime/CompositionImpl;->isDisposed()Z +HSPLandroidx/compose/runtime/CompositionImpl;->observesAnyOf(Ljava/util/Set;)Z +HSPLandroidx/compose/runtime/CompositionImpl;->prepareCompose(Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/runtime/CompositionImpl;->recompose()Z +HSPLandroidx/compose/runtime/CompositionImpl;->recomposeScopeReleased(Landroidx/compose/runtime/RecomposeScopeImpl;)V +HSPLandroidx/compose/runtime/CompositionImpl;->recordModificationsOf(Ljava/util/Set;)V +HSPLandroidx/compose/runtime/CompositionImpl;->recordReadOf(Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/CompositionImpl;->recordWriteOf(Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/CompositionImpl;->removeDerivedStateObservation$runtime_release(Landroidx/compose/runtime/DerivedState;)V +HSPLandroidx/compose/runtime/CompositionImpl;->removeObservation$runtime_release(Ljava/lang/Object;Landroidx/compose/runtime/RecomposeScopeImpl;)V +HSPLandroidx/compose/runtime/CompositionImpl;->setContent(Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/runtime/CompositionImpl;->takeInvalidations()Landroidx/compose/runtime/collection/IdentityArrayMap; +HSPLandroidx/compose/runtime/CompositionImpl;->tryImminentInvalidation(Landroidx/compose/runtime/RecomposeScopeImpl;Ljava/lang/Object;)Z +Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher; +HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->(Ljava/util/Set;)V +HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->deactivating(Landroidx/compose/runtime/ComposeNodeLifecycleCallback;)V +HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->dispatchAbandons()V +HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->dispatchRememberObservers()V +HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->dispatchSideEffects()V +HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->forgetting(Landroidx/compose/runtime/RememberObserver;)V +HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->releasing(Landroidx/compose/runtime/ComposeNodeLifecycleCallback;)V +HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->remembering(Landroidx/compose/runtime/RememberObserver;)V +HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->sideEffect(Lkotlin/jvm/functions/Function0;)V +Landroidx/compose/runtime/CompositionKt; +HSPLandroidx/compose/runtime/CompositionKt;->()V +HSPLandroidx/compose/runtime/CompositionKt;->Composition(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/CompositionContext;)Landroidx/compose/runtime/Composition; +HSPLandroidx/compose/runtime/CompositionKt;->access$addValue(Landroidx/compose/runtime/collection/IdentityArrayMap;Ljava/lang/Object;Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/CompositionKt;->access$getPendingApplyNoModifications$p()Ljava/lang/Object; +HSPLandroidx/compose/runtime/CompositionKt;->addValue(Landroidx/compose/runtime/collection/IdentityArrayMap;Ljava/lang/Object;Ljava/lang/Object;)V +Landroidx/compose/runtime/CompositionLocal; +HSPLandroidx/compose/runtime/CompositionLocal;->()V +HSPLandroidx/compose/runtime/CompositionLocal;->(Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/runtime/CompositionLocal;->(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/runtime/CompositionLocal;->getDefaultValueHolder$runtime_release()Landroidx/compose/runtime/LazyValueHolder; +Landroidx/compose/runtime/CompositionLocalKt; +HSPLandroidx/compose/runtime/CompositionLocalKt;->CompositionLocalProvider([Landroidx/compose/runtime/ProvidedValue;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/runtime/CompositionLocalKt;->compositionLocalOf$default(Landroidx/compose/runtime/SnapshotMutationPolicy;Lkotlin/jvm/functions/Function0;ILjava/lang/Object;)Landroidx/compose/runtime/ProvidableCompositionLocal; +HSPLandroidx/compose/runtime/CompositionLocalKt;->compositionLocalOf(Landroidx/compose/runtime/SnapshotMutationPolicy;Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/ProvidableCompositionLocal; +HSPLandroidx/compose/runtime/CompositionLocalKt;->staticCompositionLocalOf(Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/ProvidableCompositionLocal; +Landroidx/compose/runtime/CompositionLocalMap; +HSPLandroidx/compose/runtime/CompositionLocalMap;->()V +Landroidx/compose/runtime/CompositionLocalMap$Companion; +HSPLandroidx/compose/runtime/CompositionLocalMap$Companion;->()V +HSPLandroidx/compose/runtime/CompositionLocalMap$Companion;->()V +HSPLandroidx/compose/runtime/CompositionLocalMap$Companion;->getEmpty()Landroidx/compose/runtime/CompositionLocalMap; +Landroidx/compose/runtime/CompositionLocalMapKt; +HSPLandroidx/compose/runtime/CompositionLocalMapKt;->compositionLocalMapOf([Landroidx/compose/runtime/ProvidedValue;Landroidx/compose/runtime/PersistentCompositionLocalMap;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/PersistentCompositionLocalMap; +HSPLandroidx/compose/runtime/CompositionLocalMapKt;->contains(Landroidx/compose/runtime/PersistentCompositionLocalMap;Landroidx/compose/runtime/CompositionLocal;)Z +HSPLandroidx/compose/runtime/CompositionLocalMapKt;->getValueOf(Landroidx/compose/runtime/PersistentCompositionLocalMap;Landroidx/compose/runtime/CompositionLocal;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/CompositionLocalMapKt;->read(Landroidx/compose/runtime/PersistentCompositionLocalMap;Landroidx/compose/runtime/CompositionLocal;)Ljava/lang/Object; +Landroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller; +HSPLandroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller;->(Lkotlinx/coroutines/CoroutineScope;)V +HSPLandroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller;->getCoroutineScope()Lkotlinx/coroutines/CoroutineScope; +HSPLandroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller;->onForgotten()V +HSPLandroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller;->onRemembered()V +Landroidx/compose/runtime/CompositionTracer; +Landroidx/compose/runtime/ControlledComposition; +Landroidx/compose/runtime/DerivedSnapshotState; +HSPLandroidx/compose/runtime/DerivedSnapshotState;->(Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/SnapshotMutationPolicy;)V +HSPLandroidx/compose/runtime/DerivedSnapshotState;->current(Landroidx/compose/runtime/snapshots/Snapshot;)Landroidx/compose/runtime/snapshots/StateRecord; +HSPLandroidx/compose/runtime/DerivedSnapshotState;->currentRecord(Landroidx/compose/runtime/DerivedSnapshotState$ResultRecord;Landroidx/compose/runtime/snapshots/Snapshot;ZLkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/DerivedSnapshotState$ResultRecord; +HSPLandroidx/compose/runtime/DerivedSnapshotState;->getCurrentRecord()Landroidx/compose/runtime/DerivedState$Record; +HSPLandroidx/compose/runtime/DerivedSnapshotState;->getFirstStateRecord()Landroidx/compose/runtime/snapshots/StateRecord; +HSPLandroidx/compose/runtime/DerivedSnapshotState;->getPolicy()Landroidx/compose/runtime/SnapshotMutationPolicy; +HSPLandroidx/compose/runtime/DerivedSnapshotState;->getValue()Ljava/lang/Object; +HSPLandroidx/compose/runtime/DerivedSnapshotState;->prependStateRecord(Landroidx/compose/runtime/snapshots/StateRecord;)V +Landroidx/compose/runtime/DerivedSnapshotState$ResultRecord; +HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->()V +HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->()V +HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->access$getUnset$cp()Ljava/lang/Object; +HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->assign(Landroidx/compose/runtime/snapshots/StateRecord;)V +HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->create()Landroidx/compose/runtime/snapshots/StateRecord; +HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->getCurrentValue()Ljava/lang/Object; +HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->getDependencies()[Ljava/lang/Object; +HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->getResult()Ljava/lang/Object; +HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->get_dependencies()Landroidx/compose/runtime/collection/IdentityArrayMap; +HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->isValid(Landroidx/compose/runtime/DerivedState;Landroidx/compose/runtime/snapshots/Snapshot;)Z +HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->readableHash(Landroidx/compose/runtime/DerivedState;Landroidx/compose/runtime/snapshots/Snapshot;)I +HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->setResult(Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->setResultHash(I)V +HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->setValidSnapshotId(I)V +HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->setValidSnapshotWriteCount(I)V +HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->set_dependencies(Landroidx/compose/runtime/collection/IdentityArrayMap;)V +Landroidx/compose/runtime/DerivedSnapshotState$ResultRecord$Companion; +HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord$Companion;->()V +HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord$Companion;->getUnset()Ljava/lang/Object; +Landroidx/compose/runtime/DerivedSnapshotState$currentRecord$result$1$result$1; +HSPLandroidx/compose/runtime/DerivedSnapshotState$currentRecord$result$1$result$1;->(Landroidx/compose/runtime/DerivedSnapshotState;Landroidx/compose/runtime/collection/IdentityArrayMap;I)V +HSPLandroidx/compose/runtime/DerivedSnapshotState$currentRecord$result$1$result$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/DerivedSnapshotState$currentRecord$result$1$result$1;->invoke(Ljava/lang/Object;)V +Landroidx/compose/runtime/DerivedState; +Landroidx/compose/runtime/DerivedState$Record; +Landroidx/compose/runtime/DerivedStateObserver; +Landroidx/compose/runtime/DisposableEffectImpl; +HSPLandroidx/compose/runtime/DisposableEffectImpl;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/runtime/DisposableEffectImpl;->onForgotten()V +HSPLandroidx/compose/runtime/DisposableEffectImpl;->onRemembered()V +Landroidx/compose/runtime/DisposableEffectResult; +Landroidx/compose/runtime/DisposableEffectScope; +HSPLandroidx/compose/runtime/DisposableEffectScope;->()V +HSPLandroidx/compose/runtime/DisposableEffectScope;->()V +Landroidx/compose/runtime/DynamicProvidableCompositionLocal; +HSPLandroidx/compose/runtime/DynamicProvidableCompositionLocal;->(Landroidx/compose/runtime/SnapshotMutationPolicy;Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/runtime/DynamicProvidableCompositionLocal;->access$getPolicy$p(Landroidx/compose/runtime/DynamicProvidableCompositionLocal;)Landroidx/compose/runtime/SnapshotMutationPolicy; +HSPLandroidx/compose/runtime/DynamicProvidableCompositionLocal;->provided$runtime_release(Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State; +Landroidx/compose/runtime/EffectsKt; +HSPLandroidx/compose/runtime/EffectsKt;->()V +HSPLandroidx/compose/runtime/EffectsKt;->DisposableEffect(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/runtime/EffectsKt;->DisposableEffect(Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/runtime/EffectsKt;->DisposableEffect(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/runtime/EffectsKt;->LaunchedEffect(Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/runtime/EffectsKt;->LaunchedEffect(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/runtime/EffectsKt;->LaunchedEffect([Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/runtime/EffectsKt;->SideEffect(Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/runtime/EffectsKt;->access$getInternalDisposableEffectScope$p()Landroidx/compose/runtime/DisposableEffectScope; +HSPLandroidx/compose/runtime/EffectsKt;->createCompositionCoroutineScope(Lkotlin/coroutines/CoroutineContext;Landroidx/compose/runtime/Composer;)Lkotlinx/coroutines/CoroutineScope; +Landroidx/compose/runtime/FloatState; +Landroidx/compose/runtime/GroupInfo; +HSPLandroidx/compose/runtime/GroupInfo;->(III)V +HSPLandroidx/compose/runtime/GroupInfo;->getNodeCount()I +HSPLandroidx/compose/runtime/GroupInfo;->getNodeIndex()I +HSPLandroidx/compose/runtime/GroupInfo;->getSlotIndex()I +HSPLandroidx/compose/runtime/GroupInfo;->setNodeCount(I)V +HSPLandroidx/compose/runtime/GroupInfo;->setNodeIndex(I)V +HSPLandroidx/compose/runtime/GroupInfo;->setSlotIndex(I)V +Landroidx/compose/runtime/GroupKind; +HSPLandroidx/compose/runtime/GroupKind;->()V +HSPLandroidx/compose/runtime/GroupKind;->access$getGroup$cp()I +HSPLandroidx/compose/runtime/GroupKind;->access$getNode$cp()I +HSPLandroidx/compose/runtime/GroupKind;->access$getReusableNode$cp()I +HSPLandroidx/compose/runtime/GroupKind;->constructor-impl(I)I +Landroidx/compose/runtime/GroupKind$Companion; +HSPLandroidx/compose/runtime/GroupKind$Companion;->()V +HSPLandroidx/compose/runtime/GroupKind$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/runtime/GroupKind$Companion;->getGroup-ULZAiWs()I +HSPLandroidx/compose/runtime/GroupKind$Companion;->getNode-ULZAiWs()I +HSPLandroidx/compose/runtime/GroupKind$Companion;->getReusableNode-ULZAiWs()I +Landroidx/compose/runtime/IntStack; +HSPLandroidx/compose/runtime/IntStack;->()V +HSPLandroidx/compose/runtime/IntStack;->clear()V +HSPLandroidx/compose/runtime/IntStack;->getSize()I +HSPLandroidx/compose/runtime/IntStack;->isEmpty()Z +HSPLandroidx/compose/runtime/IntStack;->peek()I +HSPLandroidx/compose/runtime/IntStack;->peekOr(I)I +HSPLandroidx/compose/runtime/IntStack;->pop()I +HSPLandroidx/compose/runtime/IntStack;->push(I)V +Landroidx/compose/runtime/IntState; +Landroidx/compose/runtime/Invalidation; +HSPLandroidx/compose/runtime/Invalidation;->(Landroidx/compose/runtime/RecomposeScopeImpl;ILandroidx/compose/runtime/collection/IdentityArraySet;)V +HSPLandroidx/compose/runtime/Invalidation;->getInstances()Landroidx/compose/runtime/collection/IdentityArraySet; +HSPLandroidx/compose/runtime/Invalidation;->getLocation()I +HSPLandroidx/compose/runtime/Invalidation;->getScope()Landroidx/compose/runtime/RecomposeScopeImpl; +HSPLandroidx/compose/runtime/Invalidation;->isInvalid()Z +HSPLandroidx/compose/runtime/Invalidation;->setInstances(Landroidx/compose/runtime/collection/IdentityArraySet;)V +Landroidx/compose/runtime/InvalidationResult; +HSPLandroidx/compose/runtime/InvalidationResult;->$values()[Landroidx/compose/runtime/InvalidationResult; +HSPLandroidx/compose/runtime/InvalidationResult;->()V +HSPLandroidx/compose/runtime/InvalidationResult;->(Ljava/lang/String;I)V +Landroidx/compose/runtime/JoinedKey; +HSPLandroidx/compose/runtime/JoinedKey;->(Ljava/lang/Object;Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/JoinedKey;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/runtime/JoinedKey;->hashCode()I +HSPLandroidx/compose/runtime/JoinedKey;->hashCodeOf(Ljava/lang/Object;)I +Landroidx/compose/runtime/KeyInfo; +HSPLandroidx/compose/runtime/KeyInfo;->(ILjava/lang/Object;III)V +HSPLandroidx/compose/runtime/KeyInfo;->getKey()I +HSPLandroidx/compose/runtime/KeyInfo;->getLocation()I +HSPLandroidx/compose/runtime/KeyInfo;->getNodes()I +HSPLandroidx/compose/runtime/KeyInfo;->getObjectKey()Ljava/lang/Object; +Landroidx/compose/runtime/Latch; +HSPLandroidx/compose/runtime/Latch;->()V +HSPLandroidx/compose/runtime/Latch;->await(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/Latch;->closeLatch()V +HSPLandroidx/compose/runtime/Latch;->isOpen()Z +HSPLandroidx/compose/runtime/Latch;->openLatch()V +Landroidx/compose/runtime/LaunchedEffectImpl; +HSPLandroidx/compose/runtime/LaunchedEffectImpl;->(Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/runtime/LaunchedEffectImpl;->onForgotten()V +HSPLandroidx/compose/runtime/LaunchedEffectImpl;->onRemembered()V +Landroidx/compose/runtime/LazyValueHolder; +HSPLandroidx/compose/runtime/LazyValueHolder;->(Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/runtime/LazyValueHolder;->getCurrent()Ljava/lang/Object; +HSPLandroidx/compose/runtime/LazyValueHolder;->getValue()Ljava/lang/Object; +Landroidx/compose/runtime/LeftCompositionCancellationException; +HSPLandroidx/compose/runtime/LeftCompositionCancellationException;->()V +HSPLandroidx/compose/runtime/LeftCompositionCancellationException;->fillInStackTrace()Ljava/lang/Throwable; +Landroidx/compose/runtime/LongState; +Landroidx/compose/runtime/MonotonicFrameClock; +HSPLandroidx/compose/runtime/MonotonicFrameClock;->()V +HSPLandroidx/compose/runtime/MonotonicFrameClock;->getKey()Lkotlin/coroutines/CoroutineContext$Key; +Landroidx/compose/runtime/MonotonicFrameClock$DefaultImpls; +HSPLandroidx/compose/runtime/MonotonicFrameClock$DefaultImpls;->fold(Landroidx/compose/runtime/MonotonicFrameClock;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/MonotonicFrameClock$DefaultImpls;->get(Landroidx/compose/runtime/MonotonicFrameClock;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; +HSPLandroidx/compose/runtime/MonotonicFrameClock$DefaultImpls;->minusKey(Landroidx/compose/runtime/MonotonicFrameClock;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext; +Landroidx/compose/runtime/MonotonicFrameClock$Key; +HSPLandroidx/compose/runtime/MonotonicFrameClock$Key;->()V +HSPLandroidx/compose/runtime/MonotonicFrameClock$Key;->()V +Landroidx/compose/runtime/MonotonicFrameClockKt; +HSPLandroidx/compose/runtime/MonotonicFrameClockKt;->getMonotonicFrameClock(Lkotlin/coroutines/CoroutineContext;)Landroidx/compose/runtime/MonotonicFrameClock; +HSPLandroidx/compose/runtime/MonotonicFrameClockKt;->withFrameNanos(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/compose/runtime/MovableContent; +Landroidx/compose/runtime/MutableFloatState; +Landroidx/compose/runtime/MutableIntState; +Landroidx/compose/runtime/MutableLongState; +Landroidx/compose/runtime/MutableState; +Landroidx/compose/runtime/NeverEqualPolicy; +HSPLandroidx/compose/runtime/NeverEqualPolicy;->()V +HSPLandroidx/compose/runtime/NeverEqualPolicy;->()V +HSPLandroidx/compose/runtime/NeverEqualPolicy;->equivalent(Ljava/lang/Object;Ljava/lang/Object;)Z +Landroidx/compose/runtime/OpaqueKey; +HSPLandroidx/compose/runtime/OpaqueKey;->(Ljava/lang/String;)V +HSPLandroidx/compose/runtime/OpaqueKey;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/runtime/OpaqueKey;->hashCode()I +Landroidx/compose/runtime/ParcelableSnapshotMutableFloatState; +HSPLandroidx/compose/runtime/ParcelableSnapshotMutableFloatState;->()V +HSPLandroidx/compose/runtime/ParcelableSnapshotMutableFloatState;->(F)V +Landroidx/compose/runtime/ParcelableSnapshotMutableFloatState$Companion; +HSPLandroidx/compose/runtime/ParcelableSnapshotMutableFloatState$Companion;->()V +HSPLandroidx/compose/runtime/ParcelableSnapshotMutableFloatState$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/runtime/ParcelableSnapshotMutableFloatState$Companion$CREATOR$1; +HSPLandroidx/compose/runtime/ParcelableSnapshotMutableFloatState$Companion$CREATOR$1;->()V +Landroidx/compose/runtime/ParcelableSnapshotMutableIntState; +HSPLandroidx/compose/runtime/ParcelableSnapshotMutableIntState;->()V +HSPLandroidx/compose/runtime/ParcelableSnapshotMutableIntState;->(I)V +Landroidx/compose/runtime/ParcelableSnapshotMutableIntState$Companion; +HSPLandroidx/compose/runtime/ParcelableSnapshotMutableIntState$Companion;->()V +HSPLandroidx/compose/runtime/ParcelableSnapshotMutableIntState$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/runtime/ParcelableSnapshotMutableIntState$Companion$CREATOR$1; +HSPLandroidx/compose/runtime/ParcelableSnapshotMutableIntState$Companion$CREATOR$1;->()V +Landroidx/compose/runtime/ParcelableSnapshotMutableLongState; +HSPLandroidx/compose/runtime/ParcelableSnapshotMutableLongState;->()V +HSPLandroidx/compose/runtime/ParcelableSnapshotMutableLongState;->(J)V +Landroidx/compose/runtime/ParcelableSnapshotMutableLongState$Companion; +HSPLandroidx/compose/runtime/ParcelableSnapshotMutableLongState$Companion;->()V +HSPLandroidx/compose/runtime/ParcelableSnapshotMutableLongState$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/runtime/ParcelableSnapshotMutableLongState$Companion$CREATOR$1; +HSPLandroidx/compose/runtime/ParcelableSnapshotMutableLongState$Companion$CREATOR$1;->()V +Landroidx/compose/runtime/ParcelableSnapshotMutableState; +HSPLandroidx/compose/runtime/ParcelableSnapshotMutableState;->()V +HSPLandroidx/compose/runtime/ParcelableSnapshotMutableState;->(Ljava/lang/Object;Landroidx/compose/runtime/SnapshotMutationPolicy;)V +Landroidx/compose/runtime/ParcelableSnapshotMutableState$Companion; +HSPLandroidx/compose/runtime/ParcelableSnapshotMutableState$Companion;->()V +HSPLandroidx/compose/runtime/ParcelableSnapshotMutableState$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/runtime/ParcelableSnapshotMutableState$Companion$CREATOR$1; +HSPLandroidx/compose/runtime/ParcelableSnapshotMutableState$Companion$CREATOR$1;->()V +Landroidx/compose/runtime/PausableMonotonicFrameClock; +HSPLandroidx/compose/runtime/PausableMonotonicFrameClock;->()V +HSPLandroidx/compose/runtime/PausableMonotonicFrameClock;->(Landroidx/compose/runtime/MonotonicFrameClock;)V +HSPLandroidx/compose/runtime/PausableMonotonicFrameClock;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/PausableMonotonicFrameClock;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; +HSPLandroidx/compose/runtime/PausableMonotonicFrameClock;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext; +HSPLandroidx/compose/runtime/PausableMonotonicFrameClock;->pause()V +HSPLandroidx/compose/runtime/PausableMonotonicFrameClock;->resume()V +HSPLandroidx/compose/runtime/PausableMonotonicFrameClock;->withFrameNanos(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/compose/runtime/PausableMonotonicFrameClock$withFrameNanos$1; +HSPLandroidx/compose/runtime/PausableMonotonicFrameClock$withFrameNanos$1;->(Landroidx/compose/runtime/PausableMonotonicFrameClock;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/runtime/PausableMonotonicFrameClock$withFrameNanos$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/Pending; +HSPLandroidx/compose/runtime/Pending;->(Ljava/util/List;I)V +HSPLandroidx/compose/runtime/Pending;->getGroupIndex()I +HSPLandroidx/compose/runtime/Pending;->getKeyInfos()Ljava/util/List; +HSPLandroidx/compose/runtime/Pending;->getKeyMap()Ljava/util/HashMap; +HSPLandroidx/compose/runtime/Pending;->getNext(ILjava/lang/Object;)Landroidx/compose/runtime/KeyInfo; +HSPLandroidx/compose/runtime/Pending;->getStartIndex()I +HSPLandroidx/compose/runtime/Pending;->getUsed()Ljava/util/List; +HSPLandroidx/compose/runtime/Pending;->nodePositionOf(Landroidx/compose/runtime/KeyInfo;)I +HSPLandroidx/compose/runtime/Pending;->recordUsed(Landroidx/compose/runtime/KeyInfo;)Z +HSPLandroidx/compose/runtime/Pending;->registerInsert(Landroidx/compose/runtime/KeyInfo;I)V +HSPLandroidx/compose/runtime/Pending;->registerMoveSlot(II)V +HSPLandroidx/compose/runtime/Pending;->setGroupIndex(I)V +HSPLandroidx/compose/runtime/Pending;->slotPositionOf(Landroidx/compose/runtime/KeyInfo;)I +HSPLandroidx/compose/runtime/Pending;->updateNodeCount(II)Z +HSPLandroidx/compose/runtime/Pending;->updatedNodeCountOf(Landroidx/compose/runtime/KeyInfo;)I +Landroidx/compose/runtime/Pending$keyMap$2; +HSPLandroidx/compose/runtime/Pending$keyMap$2;->(Landroidx/compose/runtime/Pending;)V +HSPLandroidx/compose/runtime/Pending$keyMap$2;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/runtime/Pending$keyMap$2;->invoke()Ljava/util/HashMap; +Landroidx/compose/runtime/PersistentCompositionLocalMap; +Landroidx/compose/runtime/PersistentCompositionLocalMap$Builder; +Landroidx/compose/runtime/PrimitiveSnapshotStateKt; +HSPLandroidx/compose/runtime/PrimitiveSnapshotStateKt;->mutableFloatStateOf(F)Landroidx/compose/runtime/MutableFloatState; +Landroidx/compose/runtime/PrimitiveSnapshotStateKt__SnapshotFloatStateKt; +HSPLandroidx/compose/runtime/PrimitiveSnapshotStateKt__SnapshotFloatStateKt;->mutableFloatStateOf(F)Landroidx/compose/runtime/MutableFloatState; +Landroidx/compose/runtime/PrioritySet; +HSPLandroidx/compose/runtime/PrioritySet;->(Ljava/util/List;)V +HSPLandroidx/compose/runtime/PrioritySet;->(Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/runtime/PrioritySet;->add(I)V +HSPLandroidx/compose/runtime/PrioritySet;->isNotEmpty()Z +HSPLandroidx/compose/runtime/PrioritySet;->peek()I +HSPLandroidx/compose/runtime/PrioritySet;->takeMax()I +Landroidx/compose/runtime/ProduceStateScope; +Landroidx/compose/runtime/ProduceStateScopeImpl; +HSPLandroidx/compose/runtime/ProduceStateScopeImpl;->(Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/CoroutineContext;)V +HSPLandroidx/compose/runtime/ProduceStateScopeImpl;->setValue(Ljava/lang/Object;)V +Landroidx/compose/runtime/ProvidableCompositionLocal; +HSPLandroidx/compose/runtime/ProvidableCompositionLocal;->()V +HSPLandroidx/compose/runtime/ProvidableCompositionLocal;->(Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/runtime/ProvidableCompositionLocal;->provides(Ljava/lang/Object;)Landroidx/compose/runtime/ProvidedValue; +HSPLandroidx/compose/runtime/ProvidableCompositionLocal;->providesDefault(Ljava/lang/Object;)Landroidx/compose/runtime/ProvidedValue; +Landroidx/compose/runtime/ProvidedValue; +HSPLandroidx/compose/runtime/ProvidedValue;->()V +HSPLandroidx/compose/runtime/ProvidedValue;->(Landroidx/compose/runtime/CompositionLocal;Ljava/lang/Object;Z)V +HSPLandroidx/compose/runtime/ProvidedValue;->getCanOverride()Z +HSPLandroidx/compose/runtime/ProvidedValue;->getCompositionLocal()Landroidx/compose/runtime/CompositionLocal; +HSPLandroidx/compose/runtime/ProvidedValue;->getValue()Ljava/lang/Object; +Landroidx/compose/runtime/RecomposeScope; +Landroidx/compose/runtime/RecomposeScopeImpl; +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->()V +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->(Landroidx/compose/runtime/RecomposeScopeOwner;)V +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->access$getCurrentToken$p(Landroidx/compose/runtime/RecomposeScopeImpl;)I +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->access$getTrackedDependencies$p(Landroidx/compose/runtime/RecomposeScopeImpl;)Landroidx/compose/runtime/collection/IdentityArrayMap; +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->access$getTrackedInstances$p(Landroidx/compose/runtime/RecomposeScopeImpl;)Landroidx/compose/runtime/collection/IdentityArrayIntMap; +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->access$setTrackedDependencies$p(Landroidx/compose/runtime/RecomposeScopeImpl;Landroidx/compose/runtime/collection/IdentityArrayMap;)V +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->access$setTrackedInstances$p(Landroidx/compose/runtime/RecomposeScopeImpl;Landroidx/compose/runtime/collection/IdentityArrayIntMap;)V +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->compose(Landroidx/compose/runtime/Composer;)V +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->end(I)Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->getAnchor()Landroidx/compose/runtime/Anchor; +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->getCanRecompose()Z +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->getDefaultsInScope()Z +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->getDefaultsInvalid()Z +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->getRequiresRecompose()Z +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->getRereading()Z +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->getSkipped$runtime_release()Z +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->getUsed()Z +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->getValid()Z +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->invalidate()V +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->invalidateForResult(Ljava/lang/Object;)Landroidx/compose/runtime/InvalidationResult; +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->isConditional()Z +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->isInvalidFor(Landroidx/compose/runtime/collection/IdentityArraySet;)Z +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->recordRead(Ljava/lang/Object;)Z +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->release()V +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->rereadTrackedInstances()V +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->scopeSkipped()V +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->setAnchor(Landroidx/compose/runtime/Anchor;)V +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->setDefaultsInScope(Z)V +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->setDefaultsInvalid(Z)V +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->setRequiresRecompose(Z)V +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->setRereading(Z)V +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->setSkipped(Z)V +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->setUsed(Z)V +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->start(I)V +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->updateScope(Lkotlin/jvm/functions/Function2;)V +Landroidx/compose/runtime/RecomposeScopeImpl$Companion; +HSPLandroidx/compose/runtime/RecomposeScopeImpl$Companion;->()V +HSPLandroidx/compose/runtime/RecomposeScopeImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/runtime/RecomposeScopeImpl$end$1$2; +HSPLandroidx/compose/runtime/RecomposeScopeImpl$end$1$2;->(Landroidx/compose/runtime/RecomposeScopeImpl;ILandroidx/compose/runtime/collection/IdentityArrayIntMap;)V +HSPLandroidx/compose/runtime/RecomposeScopeImpl$end$1$2;->invoke(Landroidx/compose/runtime/Composition;)V +HSPLandroidx/compose/runtime/RecomposeScopeImpl$end$1$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/RecomposeScopeImplKt; +HSPLandroidx/compose/runtime/RecomposeScopeImplKt;->updateChangedFlags(I)I +Landroidx/compose/runtime/RecomposeScopeOwner; +Landroidx/compose/runtime/Recomposer; +HSPLandroidx/compose/runtime/Recomposer;->()V +HSPLandroidx/compose/runtime/Recomposer;->(Lkotlin/coroutines/CoroutineContext;)V +HSPLandroidx/compose/runtime/Recomposer;->access$awaitWorkAvailable(Landroidx/compose/runtime/Recomposer;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/Recomposer;->access$deriveStateLocked(Landroidx/compose/runtime/Recomposer;)Lkotlinx/coroutines/CancellableContinuation; +HSPLandroidx/compose/runtime/Recomposer;->access$discardUnusedValues(Landroidx/compose/runtime/Recomposer;)V +HSPLandroidx/compose/runtime/Recomposer;->access$getBroadcastFrameClock$p(Landroidx/compose/runtime/Recomposer;)Landroidx/compose/runtime/BroadcastFrameClock; +HSPLandroidx/compose/runtime/Recomposer;->access$getCompositionInvalidations$p(Landroidx/compose/runtime/Recomposer;)Ljava/util/List; +HSPLandroidx/compose/runtime/Recomposer;->access$getCompositionValuesAwaitingInsert$p(Landroidx/compose/runtime/Recomposer;)Ljava/util/List; +HSPLandroidx/compose/runtime/Recomposer;->access$getHasBroadcastFrameClockAwaiters(Landroidx/compose/runtime/Recomposer;)Z +HSPLandroidx/compose/runtime/Recomposer;->access$getHasSchedulingWork(Landroidx/compose/runtime/Recomposer;)Z +HSPLandroidx/compose/runtime/Recomposer;->access$getKnownCompositions$p(Landroidx/compose/runtime/Recomposer;)Ljava/util/List; +HSPLandroidx/compose/runtime/Recomposer;->access$getRecomposerInfo$p(Landroidx/compose/runtime/Recomposer;)Landroidx/compose/runtime/Recomposer$RecomposerInfoImpl; +HSPLandroidx/compose/runtime/Recomposer;->access$getShouldKeepRecomposing(Landroidx/compose/runtime/Recomposer;)Z +HSPLandroidx/compose/runtime/Recomposer;->access$getSnapshotInvalidations$p(Landroidx/compose/runtime/Recomposer;)Landroidx/compose/runtime/collection/IdentityArraySet; +HSPLandroidx/compose/runtime/Recomposer;->access$getStateLock$p(Landroidx/compose/runtime/Recomposer;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/Recomposer;->access$get_runningRecomposers$cp()Lkotlinx/coroutines/flow/MutableStateFlow; +HSPLandroidx/compose/runtime/Recomposer;->access$get_state$p(Landroidx/compose/runtime/Recomposer;)Lkotlinx/coroutines/flow/MutableStateFlow; +HSPLandroidx/compose/runtime/Recomposer;->access$performRecompose(Landroidx/compose/runtime/Recomposer;Landroidx/compose/runtime/ControlledComposition;Landroidx/compose/runtime/collection/IdentityArraySet;)Landroidx/compose/runtime/ControlledComposition; +HSPLandroidx/compose/runtime/Recomposer;->access$recordComposerModifications(Landroidx/compose/runtime/Recomposer;)Z +HSPLandroidx/compose/runtime/Recomposer;->access$registerRunnerJob(Landroidx/compose/runtime/Recomposer;Lkotlinx/coroutines/Job;)V +HSPLandroidx/compose/runtime/Recomposer;->access$setChangeCount$p(Landroidx/compose/runtime/Recomposer;J)V +HSPLandroidx/compose/runtime/Recomposer;->access$setCompositionsRemoved$p(Landroidx/compose/runtime/Recomposer;Ljava/util/Set;)V +HSPLandroidx/compose/runtime/Recomposer;->access$setWorkContinuation$p(Landroidx/compose/runtime/Recomposer;Lkotlinx/coroutines/CancellableContinuation;)V +HSPLandroidx/compose/runtime/Recomposer;->applyAndCheck(Landroidx/compose/runtime/snapshots/MutableSnapshot;)V +HSPLandroidx/compose/runtime/Recomposer;->awaitWorkAvailable(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/Recomposer;->composeInitial$runtime_release(Landroidx/compose/runtime/ControlledComposition;Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/runtime/Recomposer;->deriveStateLocked()Lkotlinx/coroutines/CancellableContinuation; +HSPLandroidx/compose/runtime/Recomposer;->discardUnusedValues()V +HSPLandroidx/compose/runtime/Recomposer;->getChangeCount()J +HSPLandroidx/compose/runtime/Recomposer;->getCollectingParameterInformation$runtime_release()Z +HSPLandroidx/compose/runtime/Recomposer;->getCompoundHashKey$runtime_release()I +HSPLandroidx/compose/runtime/Recomposer;->getCurrentState()Lkotlinx/coroutines/flow/StateFlow; +HSPLandroidx/compose/runtime/Recomposer;->getEffectCoroutineContext()Lkotlin/coroutines/CoroutineContext; +HSPLandroidx/compose/runtime/Recomposer;->getHasBroadcastFrameClockAwaiters()Z +HSPLandroidx/compose/runtime/Recomposer;->getHasBroadcastFrameClockAwaitersLocked()Z +HSPLandroidx/compose/runtime/Recomposer;->getHasFrameWorkLocked()Z +HSPLandroidx/compose/runtime/Recomposer;->getHasSchedulingWork()Z +HSPLandroidx/compose/runtime/Recomposer;->getShouldKeepRecomposing()Z +HSPLandroidx/compose/runtime/Recomposer;->invalidate$runtime_release(Landroidx/compose/runtime/ControlledComposition;)V +HSPLandroidx/compose/runtime/Recomposer;->join(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/Recomposer;->pauseCompositionFrameClock()V +HSPLandroidx/compose/runtime/Recomposer;->performInitialMovableContentInserts(Landroidx/compose/runtime/ControlledComposition;)V +HSPLandroidx/compose/runtime/Recomposer;->performRecompose(Landroidx/compose/runtime/ControlledComposition;Landroidx/compose/runtime/collection/IdentityArraySet;)Landroidx/compose/runtime/ControlledComposition; +HSPLandroidx/compose/runtime/Recomposer;->readObserverOf(Landroidx/compose/runtime/ControlledComposition;)Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/runtime/Recomposer;->recompositionRunner(Lkotlin/jvm/functions/Function3;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/Recomposer;->recordComposerModifications()Z +HSPLandroidx/compose/runtime/Recomposer;->registerRunnerJob(Lkotlinx/coroutines/Job;)V +HSPLandroidx/compose/runtime/Recomposer;->reportRemovedComposition$runtime_release(Landroidx/compose/runtime/ControlledComposition;)V +HSPLandroidx/compose/runtime/Recomposer;->resumeCompositionFrameClock()V +HSPLandroidx/compose/runtime/Recomposer;->runRecomposeAndApplyChanges(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/Recomposer;->unregisterComposition$runtime_release(Landroidx/compose/runtime/ControlledComposition;)V +HSPLandroidx/compose/runtime/Recomposer;->writeObserverOf(Landroidx/compose/runtime/ControlledComposition;Landroidx/compose/runtime/collection/IdentityArraySet;)Lkotlin/jvm/functions/Function1; +Landroidx/compose/runtime/Recomposer$Companion; +HSPLandroidx/compose/runtime/Recomposer$Companion;->()V +HSPLandroidx/compose/runtime/Recomposer$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/runtime/Recomposer$Companion;->access$addRunning(Landroidx/compose/runtime/Recomposer$Companion;Landroidx/compose/runtime/Recomposer$RecomposerInfoImpl;)V +HSPLandroidx/compose/runtime/Recomposer$Companion;->addRunning(Landroidx/compose/runtime/Recomposer$RecomposerInfoImpl;)V +Landroidx/compose/runtime/Recomposer$RecomposerErrorState; +Landroidx/compose/runtime/Recomposer$RecomposerInfoImpl; +HSPLandroidx/compose/runtime/Recomposer$RecomposerInfoImpl;->(Landroidx/compose/runtime/Recomposer;)V +Landroidx/compose/runtime/Recomposer$State; +HSPLandroidx/compose/runtime/Recomposer$State;->$values()[Landroidx/compose/runtime/Recomposer$State; +HSPLandroidx/compose/runtime/Recomposer$State;->()V +HSPLandroidx/compose/runtime/Recomposer$State;->(Ljava/lang/String;I)V +Landroidx/compose/runtime/Recomposer$broadcastFrameClock$1; +HSPLandroidx/compose/runtime/Recomposer$broadcastFrameClock$1;->(Landroidx/compose/runtime/Recomposer;)V +HSPLandroidx/compose/runtime/Recomposer$broadcastFrameClock$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/runtime/Recomposer$broadcastFrameClock$1;->invoke()V +Landroidx/compose/runtime/Recomposer$effectJob$1$1; +HSPLandroidx/compose/runtime/Recomposer$effectJob$1$1;->(Landroidx/compose/runtime/Recomposer;)V +Landroidx/compose/runtime/Recomposer$join$2; +HSPLandroidx/compose/runtime/Recomposer$join$2;->(Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/runtime/Recomposer$join$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/runtime/Recomposer$join$2;->invoke(Landroidx/compose/runtime/Recomposer$State;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/Recomposer$join$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/Recomposer$join$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/Recomposer$performRecompose$1$1; +PLandroidx/compose/runtime/Recomposer$performRecompose$1$1;->(Landroidx/compose/runtime/collection/IdentityArraySet;Landroidx/compose/runtime/ControlledComposition;)V +HSPLandroidx/compose/runtime/Recomposer$performRecompose$1$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/runtime/Recomposer$performRecompose$1$1;->invoke()V +Landroidx/compose/runtime/Recomposer$readObserverOf$1; +HSPLandroidx/compose/runtime/Recomposer$readObserverOf$1;->(Landroidx/compose/runtime/ControlledComposition;)V +HSPLandroidx/compose/runtime/Recomposer$readObserverOf$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/Recomposer$readObserverOf$1;->invoke(Ljava/lang/Object;)V +Landroidx/compose/runtime/Recomposer$recompositionRunner$2; +HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2;->(Landroidx/compose/runtime/Recomposer;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/MonotonicFrameClock;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/Recomposer$recompositionRunner$2$3; +HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$3;->(Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/MonotonicFrameClock;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$3;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/Recomposer$recompositionRunner$2$unregisterApplyObserver$1; +HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$unregisterApplyObserver$1;->(Landroidx/compose/runtime/Recomposer;)V +HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$unregisterApplyObserver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$unregisterApplyObserver$1;->invoke(Ljava/util/Set;Landroidx/compose/runtime/snapshots/Snapshot;)V +Landroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2; +HSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2;->(Landroidx/compose/runtime/Recomposer;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2;->access$invokeSuspend$fillToInsert(Ljava/util/List;Landroidx/compose/runtime/Recomposer;)V +HSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/runtime/MonotonicFrameClock;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2;->invokeSuspend$fillToInsert(Ljava/util/List;Landroidx/compose/runtime/Recomposer;)V +HSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2$1; +HSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2$1;->(Landroidx/compose/runtime/Recomposer;Ljava/util/List;Ljava/util/List;Ljava/util/Set;Ljava/util/List;Ljava/util/Set;)V +HSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2$1;->invoke(J)V +HSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/Recomposer$writeObserverOf$1; +HSPLandroidx/compose/runtime/Recomposer$writeObserverOf$1;->(Landroidx/compose/runtime/ControlledComposition;Landroidx/compose/runtime/collection/IdentityArraySet;)V +HSPLandroidx/compose/runtime/Recomposer$writeObserverOf$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/Recomposer$writeObserverOf$1;->invoke(Ljava/lang/Object;)V +Landroidx/compose/runtime/RecomposerErrorInfo; +Landroidx/compose/runtime/RecomposerInfo; +Landroidx/compose/runtime/ReferentialEqualityPolicy; +HSPLandroidx/compose/runtime/ReferentialEqualityPolicy;->()V +HSPLandroidx/compose/runtime/ReferentialEqualityPolicy;->()V +HSPLandroidx/compose/runtime/ReferentialEqualityPolicy;->equivalent(Ljava/lang/Object;Ljava/lang/Object;)Z +Landroidx/compose/runtime/RememberManager; +Landroidx/compose/runtime/RememberObserver; +Landroidx/compose/runtime/ScopeUpdateScope; +Landroidx/compose/runtime/SkippableUpdater; +HSPLandroidx/compose/runtime/SkippableUpdater;->(Landroidx/compose/runtime/Composer;)V +HSPLandroidx/compose/runtime/SkippableUpdater;->box-impl(Landroidx/compose/runtime/Composer;)Landroidx/compose/runtime/SkippableUpdater; +HSPLandroidx/compose/runtime/SkippableUpdater;->constructor-impl(Landroidx/compose/runtime/Composer;)Landroidx/compose/runtime/Composer; +HSPLandroidx/compose/runtime/SkippableUpdater;->unbox-impl()Landroidx/compose/runtime/Composer; +Landroidx/compose/runtime/SlotReader; +HSPLandroidx/compose/runtime/SlotReader;->(Landroidx/compose/runtime/SlotTable;)V +HSPLandroidx/compose/runtime/SlotReader;->anchor(I)Landroidx/compose/runtime/Anchor; +HSPLandroidx/compose/runtime/SlotReader;->aux([II)Ljava/lang/Object; +HSPLandroidx/compose/runtime/SlotReader;->beginEmpty()V +HSPLandroidx/compose/runtime/SlotReader;->close()V +HSPLandroidx/compose/runtime/SlotReader;->containsMark(I)Z +HSPLandroidx/compose/runtime/SlotReader;->endEmpty()V +HSPLandroidx/compose/runtime/SlotReader;->endGroup()V +HSPLandroidx/compose/runtime/SlotReader;->extractKeys()Ljava/util/List; +HSPLandroidx/compose/runtime/SlotReader;->forEachData$runtime_release(ILkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/runtime/SlotReader;->getCurrentEnd()I +HSPLandroidx/compose/runtime/SlotReader;->getCurrentGroup()I +HSPLandroidx/compose/runtime/SlotReader;->getGroupAux()Ljava/lang/Object; +HSPLandroidx/compose/runtime/SlotReader;->getGroupEnd()I +HSPLandroidx/compose/runtime/SlotReader;->getGroupKey()I +HSPLandroidx/compose/runtime/SlotReader;->getGroupObjectKey()Ljava/lang/Object; +HSPLandroidx/compose/runtime/SlotReader;->getGroupSize()I +HSPLandroidx/compose/runtime/SlotReader;->getGroupSlotIndex()I +HSPLandroidx/compose/runtime/SlotReader;->getInEmpty()Z +HSPLandroidx/compose/runtime/SlotReader;->getParent()I +HSPLandroidx/compose/runtime/SlotReader;->getParentNodes()I +HSPLandroidx/compose/runtime/SlotReader;->getSize()I +HSPLandroidx/compose/runtime/SlotReader;->getTable$runtime_release()Landroidx/compose/runtime/SlotTable; +HSPLandroidx/compose/runtime/SlotReader;->groupAux(I)Ljava/lang/Object; +HSPLandroidx/compose/runtime/SlotReader;->groupGet(I)Ljava/lang/Object; +HSPLandroidx/compose/runtime/SlotReader;->groupGet(II)Ljava/lang/Object; +HSPLandroidx/compose/runtime/SlotReader;->groupKey(I)I +HSPLandroidx/compose/runtime/SlotReader;->groupObjectKey(I)Ljava/lang/Object; +HSPLandroidx/compose/runtime/SlotReader;->groupSize(I)I +HSPLandroidx/compose/runtime/SlotReader;->hasMark(I)Z +HSPLandroidx/compose/runtime/SlotReader;->hasObjectKey(I)Z +HSPLandroidx/compose/runtime/SlotReader;->isGroupEnd()Z +HSPLandroidx/compose/runtime/SlotReader;->isNode()Z +HSPLandroidx/compose/runtime/SlotReader;->isNode(I)Z +HSPLandroidx/compose/runtime/SlotReader;->next()Ljava/lang/Object; +HSPLandroidx/compose/runtime/SlotReader;->node(I)Ljava/lang/Object; +HSPLandroidx/compose/runtime/SlotReader;->node([II)Ljava/lang/Object; +HSPLandroidx/compose/runtime/SlotReader;->nodeCount(I)I +HSPLandroidx/compose/runtime/SlotReader;->objectKey([II)Ljava/lang/Object; +HSPLandroidx/compose/runtime/SlotReader;->parent(I)I +HSPLandroidx/compose/runtime/SlotReader;->reposition(I)V +HSPLandroidx/compose/runtime/SlotReader;->restoreParent(I)V +HSPLandroidx/compose/runtime/SlotReader;->skipGroup()I +HSPLandroidx/compose/runtime/SlotReader;->skipToGroupEnd()V +HSPLandroidx/compose/runtime/SlotReader;->startGroup()V +HSPLandroidx/compose/runtime/SlotReader;->startNode()V +Landroidx/compose/runtime/SlotTable; +HSPLandroidx/compose/runtime/SlotTable;->()V +HSPLandroidx/compose/runtime/SlotTable;->anchorIndex(Landroidx/compose/runtime/Anchor;)I +HSPLandroidx/compose/runtime/SlotTable;->close$runtime_release(Landroidx/compose/runtime/SlotReader;)V +HSPLandroidx/compose/runtime/SlotTable;->close$runtime_release(Landroidx/compose/runtime/SlotWriter;[II[Ljava/lang/Object;ILjava/util/ArrayList;)V +HSPLandroidx/compose/runtime/SlotTable;->containsMark()Z +HSPLandroidx/compose/runtime/SlotTable;->getAnchors$runtime_release()Ljava/util/ArrayList; +HSPLandroidx/compose/runtime/SlotTable;->getGroups()[I +HSPLandroidx/compose/runtime/SlotTable;->getGroupsSize()I +HSPLandroidx/compose/runtime/SlotTable;->getSlots()[Ljava/lang/Object; +HSPLandroidx/compose/runtime/SlotTable;->getSlotsSize()I +HSPLandroidx/compose/runtime/SlotTable;->isEmpty()Z +HSPLandroidx/compose/runtime/SlotTable;->openReader()Landroidx/compose/runtime/SlotReader; +HSPLandroidx/compose/runtime/SlotTable;->openWriter()Landroidx/compose/runtime/SlotWriter; +HSPLandroidx/compose/runtime/SlotTable;->ownsAnchor(Landroidx/compose/runtime/Anchor;)Z +HSPLandroidx/compose/runtime/SlotTable;->setTo$runtime_release([II[Ljava/lang/Object;ILjava/util/ArrayList;)V +Landroidx/compose/runtime/SlotTableKt; +HSPLandroidx/compose/runtime/SlotTableKt;->access$addAux([II)V +HSPLandroidx/compose/runtime/SlotTableKt;->access$auxIndex([II)I +HSPLandroidx/compose/runtime/SlotTableKt;->access$containsAnyMark([II)Z +HSPLandroidx/compose/runtime/SlotTableKt;->access$containsMark([II)Z +HSPLandroidx/compose/runtime/SlotTableKt;->access$countOneBits(I)I +HSPLandroidx/compose/runtime/SlotTableKt;->access$dataAnchor([II)I +HSPLandroidx/compose/runtime/SlotTableKt;->access$groupInfo([II)I +HPLandroidx/compose/runtime/SlotTableKt;->access$groupSize([II)I +HSPLandroidx/compose/runtime/SlotTableKt;->access$hasAux([II)Z +HSPLandroidx/compose/runtime/SlotTableKt;->access$hasMark([II)Z +HPLandroidx/compose/runtime/SlotTableKt;->access$hasObjectKey([II)Z +HSPLandroidx/compose/runtime/SlotTableKt;->access$initGroup([IIIZZZII)V +HSPLandroidx/compose/runtime/SlotTableKt;->access$isNode([II)Z +HSPLandroidx/compose/runtime/SlotTableKt;->access$key([II)I +HSPLandroidx/compose/runtime/SlotTableKt;->access$locationOf(Ljava/util/ArrayList;II)I +HSPLandroidx/compose/runtime/SlotTableKt;->access$nodeCount([II)I +HSPLandroidx/compose/runtime/SlotTableKt;->access$nodeIndex([II)I +HSPLandroidx/compose/runtime/SlotTableKt;->access$objectKeyIndex([II)I +HSPLandroidx/compose/runtime/SlotTableKt;->access$parentAnchor([II)I +HSPLandroidx/compose/runtime/SlotTableKt;->access$search(Ljava/util/ArrayList;II)I +HSPLandroidx/compose/runtime/SlotTableKt;->access$slotAnchor([II)I +HSPLandroidx/compose/runtime/SlotTableKt;->access$updateContainsMark([IIZ)V +HSPLandroidx/compose/runtime/SlotTableKt;->access$updateDataAnchor([III)V +HSPLandroidx/compose/runtime/SlotTableKt;->access$updateGroupSize([III)V +HSPLandroidx/compose/runtime/SlotTableKt;->access$updateMark([IIZ)V +HSPLandroidx/compose/runtime/SlotTableKt;->access$updateNodeCount([III)V +HSPLandroidx/compose/runtime/SlotTableKt;->access$updateParentAnchor([III)V +HSPLandroidx/compose/runtime/SlotTableKt;->addAux([II)V +HSPLandroidx/compose/runtime/SlotTableKt;->auxIndex([II)I +HSPLandroidx/compose/runtime/SlotTableKt;->containsAnyMark([II)Z +HSPLandroidx/compose/runtime/SlotTableKt;->containsMark([II)Z +HSPLandroidx/compose/runtime/SlotTableKt;->countOneBits(I)I +HSPLandroidx/compose/runtime/SlotTableKt;->dataAnchor([II)I +HSPLandroidx/compose/runtime/SlotTableKt;->groupInfo([II)I +HSPLandroidx/compose/runtime/SlotTableKt;->groupSize([II)I +HSPLandroidx/compose/runtime/SlotTableKt;->hasAux([II)Z +HSPLandroidx/compose/runtime/SlotTableKt;->hasMark([II)Z +HSPLandroidx/compose/runtime/SlotTableKt;->hasObjectKey([II)Z +HSPLandroidx/compose/runtime/SlotTableKt;->initGroup([IIIZZZII)V +HSPLandroidx/compose/runtime/SlotTableKt;->isNode([II)Z +HSPLandroidx/compose/runtime/SlotTableKt;->key([II)I +HSPLandroidx/compose/runtime/SlotTableKt;->locationOf(Ljava/util/ArrayList;II)I +HSPLandroidx/compose/runtime/SlotTableKt;->nodeCount([II)I +HSPLandroidx/compose/runtime/SlotTableKt;->nodeIndex([II)I +HSPLandroidx/compose/runtime/SlotTableKt;->objectKeyIndex([II)I +HSPLandroidx/compose/runtime/SlotTableKt;->parentAnchor([II)I +HSPLandroidx/compose/runtime/SlotTableKt;->search(Ljava/util/ArrayList;II)I +HSPLandroidx/compose/runtime/SlotTableKt;->slotAnchor([II)I +HSPLandroidx/compose/runtime/SlotTableKt;->updateContainsMark([IIZ)V +HSPLandroidx/compose/runtime/SlotTableKt;->updateDataAnchor([III)V +HSPLandroidx/compose/runtime/SlotTableKt;->updateGroupSize([III)V +HSPLandroidx/compose/runtime/SlotTableKt;->updateMark([IIZ)V +HSPLandroidx/compose/runtime/SlotTableKt;->updateNodeCount([III)V +HSPLandroidx/compose/runtime/SlotTableKt;->updateParentAnchor([III)V +Landroidx/compose/runtime/SlotWriter; +HSPLandroidx/compose/runtime/SlotWriter;->()V +HSPLandroidx/compose/runtime/SlotWriter;->(Landroidx/compose/runtime/SlotTable;)V +HSPLandroidx/compose/runtime/SlotWriter;->access$containsAnyGroupMarks(Landroidx/compose/runtime/SlotWriter;I)Z +HSPLandroidx/compose/runtime/SlotWriter;->access$dataIndex(Landroidx/compose/runtime/SlotWriter;I)I +HSPLandroidx/compose/runtime/SlotWriter;->access$dataIndex(Landroidx/compose/runtime/SlotWriter;[II)I +HSPLandroidx/compose/runtime/SlotWriter;->access$dataIndexToDataAddress(Landroidx/compose/runtime/SlotWriter;I)I +HSPLandroidx/compose/runtime/SlotWriter;->access$dataIndexToDataAnchor(Landroidx/compose/runtime/SlotWriter;IIII)I +HSPLandroidx/compose/runtime/SlotWriter;->access$getAnchors$p(Landroidx/compose/runtime/SlotWriter;)Ljava/util/ArrayList; +HSPLandroidx/compose/runtime/SlotWriter;->access$getCurrentSlot$p(Landroidx/compose/runtime/SlotWriter;)I +HSPLandroidx/compose/runtime/SlotWriter;->access$getGroupGapStart$p(Landroidx/compose/runtime/SlotWriter;)I +HSPLandroidx/compose/runtime/SlotWriter;->access$getGroups$p(Landroidx/compose/runtime/SlotWriter;)[I +HSPLandroidx/compose/runtime/SlotWriter;->access$getNodeCount$p(Landroidx/compose/runtime/SlotWriter;)I +HSPLandroidx/compose/runtime/SlotWriter;->access$getSlots$p(Landroidx/compose/runtime/SlotWriter;)[Ljava/lang/Object; +HSPLandroidx/compose/runtime/SlotWriter;->access$getSlotsGapLen$p(Landroidx/compose/runtime/SlotWriter;)I +HSPLandroidx/compose/runtime/SlotWriter;->access$getSlotsGapOwner$p(Landroidx/compose/runtime/SlotWriter;)I +HSPLandroidx/compose/runtime/SlotWriter;->access$getSlotsGapStart$p(Landroidx/compose/runtime/SlotWriter;)I +HSPLandroidx/compose/runtime/SlotWriter;->access$insertGroups(Landroidx/compose/runtime/SlotWriter;I)V +HSPLandroidx/compose/runtime/SlotWriter;->access$insertSlots(Landroidx/compose/runtime/SlotWriter;II)V +HSPLandroidx/compose/runtime/SlotWriter;->access$setCurrentGroup$p(Landroidx/compose/runtime/SlotWriter;I)V +HSPLandroidx/compose/runtime/SlotWriter;->access$setCurrentSlot$p(Landroidx/compose/runtime/SlotWriter;I)V +HSPLandroidx/compose/runtime/SlotWriter;->access$setNodeCount$p(Landroidx/compose/runtime/SlotWriter;I)V +HSPLandroidx/compose/runtime/SlotWriter;->access$setSlotsGapOwner$p(Landroidx/compose/runtime/SlotWriter;I)V +HSPLandroidx/compose/runtime/SlotWriter;->access$updateContainsMark(Landroidx/compose/runtime/SlotWriter;I)V +HSPLandroidx/compose/runtime/SlotWriter;->advanceBy(I)V +HSPLandroidx/compose/runtime/SlotWriter;->anchor(I)Landroidx/compose/runtime/Anchor; +HSPLandroidx/compose/runtime/SlotWriter;->anchorIndex(Landroidx/compose/runtime/Anchor;)I +HSPLandroidx/compose/runtime/SlotWriter;->auxIndex([II)I +HSPLandroidx/compose/runtime/SlotWriter;->beginInsert()V +HSPLandroidx/compose/runtime/SlotWriter;->childContainsAnyMarks(I)Z +HSPLandroidx/compose/runtime/SlotWriter;->clearSlotGap()V +HSPLandroidx/compose/runtime/SlotWriter;->close()V +HSPLandroidx/compose/runtime/SlotWriter;->containsAnyGroupMarks(I)Z +HSPLandroidx/compose/runtime/SlotWriter;->containsGroupMark(I)Z +HSPLandroidx/compose/runtime/SlotWriter;->dataAnchorToDataIndex(III)I +HSPLandroidx/compose/runtime/SlotWriter;->dataIndex(I)I +HSPLandroidx/compose/runtime/SlotWriter;->dataIndex([II)I +HSPLandroidx/compose/runtime/SlotWriter;->dataIndexToDataAddress(I)I +HSPLandroidx/compose/runtime/SlotWriter;->dataIndexToDataAnchor(IIII)I +HSPLandroidx/compose/runtime/SlotWriter;->endGroup()I +HSPLandroidx/compose/runtime/SlotWriter;->endInsert()V +HSPLandroidx/compose/runtime/SlotWriter;->ensureStarted(I)V +HSPLandroidx/compose/runtime/SlotWriter;->ensureStarted(Landroidx/compose/runtime/Anchor;)V +HSPLandroidx/compose/runtime/SlotWriter;->fixParentAnchorsFor(III)V +HSPLandroidx/compose/runtime/SlotWriter;->getCapacity()I +HSPLandroidx/compose/runtime/SlotWriter;->getClosed()Z +HSPLandroidx/compose/runtime/SlotWriter;->getCurrentGroup()I +HSPLandroidx/compose/runtime/SlotWriter;->getParent()I +HSPLandroidx/compose/runtime/SlotWriter;->getSize$runtime_release()I +HSPLandroidx/compose/runtime/SlotWriter;->getTable$runtime_release()Landroidx/compose/runtime/SlotTable; +HSPLandroidx/compose/runtime/SlotWriter;->groupAux(I)Ljava/lang/Object; +HSPLandroidx/compose/runtime/SlotWriter;->groupIndexToAddress(I)I +HSPLandroidx/compose/runtime/SlotWriter;->groupKey(I)I +HSPLandroidx/compose/runtime/SlotWriter;->groupObjectKey(I)Ljava/lang/Object; +HSPLandroidx/compose/runtime/SlotWriter;->groupSize(I)I +HSPLandroidx/compose/runtime/SlotWriter;->groupSlots()Ljava/util/Iterator; +HSPLandroidx/compose/runtime/SlotWriter;->insertAux(Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/SlotWriter;->insertGroups(I)V +HSPLandroidx/compose/runtime/SlotWriter;->insertSlots(II)V +HSPLandroidx/compose/runtime/SlotWriter;->markGroup$default(Landroidx/compose/runtime/SlotWriter;IILjava/lang/Object;)V +HSPLandroidx/compose/runtime/SlotWriter;->markGroup(I)V +HSPLandroidx/compose/runtime/SlotWriter;->moveAnchors(III)V +HSPLandroidx/compose/runtime/SlotWriter;->moveFrom(Landroidx/compose/runtime/SlotTable;IZ)Ljava/util/List; +HSPLandroidx/compose/runtime/SlotWriter;->moveGroup(I)V +HSPLandroidx/compose/runtime/SlotWriter;->moveGroupGapTo(I)V +HSPLandroidx/compose/runtime/SlotWriter;->moveSlotGapTo(II)V +HSPLandroidx/compose/runtime/SlotWriter;->node(I)Ljava/lang/Object; +HSPLandroidx/compose/runtime/SlotWriter;->node(Landroidx/compose/runtime/Anchor;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/SlotWriter;->nodeIndex([II)I +HSPLandroidx/compose/runtime/SlotWriter;->parent(I)I +HSPLandroidx/compose/runtime/SlotWriter;->parent([II)I +HSPLandroidx/compose/runtime/SlotWriter;->parentAnchorToIndex(I)I +HSPLandroidx/compose/runtime/SlotWriter;->parentIndexToAnchor(II)I +HSPLandroidx/compose/runtime/SlotWriter;->recalculateMarks()V +HSPLandroidx/compose/runtime/SlotWriter;->removeAnchors(II)Z +HSPLandroidx/compose/runtime/SlotWriter;->removeGroup()Z +HSPLandroidx/compose/runtime/SlotWriter;->removeGroups(II)Z +HSPLandroidx/compose/runtime/SlotWriter;->removeSlots(III)V +HSPLandroidx/compose/runtime/SlotWriter;->restoreCurrentGroupEnd()I +HSPLandroidx/compose/runtime/SlotWriter;->saveCurrentGroupEnd()V +HSPLandroidx/compose/runtime/SlotWriter;->set(ILjava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/SlotWriter;->set(Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/SlotWriter;->skip()Ljava/lang/Object; +HSPLandroidx/compose/runtime/SlotWriter;->skipGroup()I +HSPLandroidx/compose/runtime/SlotWriter;->skipToGroupEnd()V +HSPLandroidx/compose/runtime/SlotWriter;->slot(II)Ljava/lang/Object; +HSPLandroidx/compose/runtime/SlotWriter;->slotIndex([II)I +HSPLandroidx/compose/runtime/SlotWriter;->startData(ILjava/lang/Object;Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/SlotWriter;->startGroup()V +HSPLandroidx/compose/runtime/SlotWriter;->startGroup(ILjava/lang/Object;)V +HSPLandroidx/compose/runtime/SlotWriter;->startGroup(ILjava/lang/Object;ZLjava/lang/Object;)V +HSPLandroidx/compose/runtime/SlotWriter;->startNode(ILjava/lang/Object;)V +HSPLandroidx/compose/runtime/SlotWriter;->update(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/SlotWriter;->updateAnchors(II)V +HSPLandroidx/compose/runtime/SlotWriter;->updateAux(Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/SlotWriter;->updateContainsMark(I)V +HSPLandroidx/compose/runtime/SlotWriter;->updateContainsMarkNow(ILandroidx/compose/runtime/PrioritySet;)V +HSPLandroidx/compose/runtime/SlotWriter;->updateDataIndex([III)V +HSPLandroidx/compose/runtime/SlotWriter;->updateNode(Landroidx/compose/runtime/Anchor;Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/SlotWriter;->updateNodeOfGroup(ILjava/lang/Object;)V +Landroidx/compose/runtime/SlotWriter$Companion; +HSPLandroidx/compose/runtime/SlotWriter$Companion;->()V +HSPLandroidx/compose/runtime/SlotWriter$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/runtime/SlotWriter$Companion;->access$moveGroup(Landroidx/compose/runtime/SlotWriter$Companion;Landroidx/compose/runtime/SlotWriter;ILandroidx/compose/runtime/SlotWriter;ZZZ)Ljava/util/List; +HSPLandroidx/compose/runtime/SlotWriter$Companion;->moveGroup(Landroidx/compose/runtime/SlotWriter;ILandroidx/compose/runtime/SlotWriter;ZZZ)Ljava/util/List; +Landroidx/compose/runtime/SlotWriter$groupSlots$1; +HSPLandroidx/compose/runtime/SlotWriter$groupSlots$1;->(IILandroidx/compose/runtime/SlotWriter;)V +HSPLandroidx/compose/runtime/SlotWriter$groupSlots$1;->hasNext()Z +HSPLandroidx/compose/runtime/SlotWriter$groupSlots$1;->next()Ljava/lang/Object; +Landroidx/compose/runtime/SnapshotIntStateKt; +HSPLandroidx/compose/runtime/SnapshotIntStateKt;->mutableIntStateOf(I)Landroidx/compose/runtime/MutableIntState; +Landroidx/compose/runtime/SnapshotIntStateKt__SnapshotIntStateKt; +HSPLandroidx/compose/runtime/SnapshotIntStateKt__SnapshotIntStateKt;->mutableIntStateOf(I)Landroidx/compose/runtime/MutableIntState; +Landroidx/compose/runtime/SnapshotLongStateKt; +HSPLandroidx/compose/runtime/SnapshotLongStateKt;->mutableLongStateOf(J)Landroidx/compose/runtime/MutableLongState; +Landroidx/compose/runtime/SnapshotLongStateKt__SnapshotLongStateKt; +HSPLandroidx/compose/runtime/SnapshotLongStateKt__SnapshotLongStateKt;->mutableLongStateOf(J)Landroidx/compose/runtime/MutableLongState; +Landroidx/compose/runtime/SnapshotMutableFloatStateImpl; +HSPLandroidx/compose/runtime/SnapshotMutableFloatStateImpl;->(F)V +HSPLandroidx/compose/runtime/SnapshotMutableFloatStateImpl;->getFirstStateRecord()Landroidx/compose/runtime/snapshots/StateRecord; +HSPLandroidx/compose/runtime/SnapshotMutableFloatStateImpl;->getFloatValue()F +HSPLandroidx/compose/runtime/SnapshotMutableFloatStateImpl;->setFloatValue(F)V +Landroidx/compose/runtime/SnapshotMutableFloatStateImpl$FloatStateStateRecord; +HSPLandroidx/compose/runtime/SnapshotMutableFloatStateImpl$FloatStateStateRecord;->(F)V +HSPLandroidx/compose/runtime/SnapshotMutableFloatStateImpl$FloatStateStateRecord;->getValue()F +Landroidx/compose/runtime/SnapshotMutableIntStateImpl; +HSPLandroidx/compose/runtime/SnapshotMutableIntStateImpl;->(I)V +HSPLandroidx/compose/runtime/SnapshotMutableIntStateImpl;->getFirstStateRecord()Landroidx/compose/runtime/snapshots/StateRecord; +HSPLandroidx/compose/runtime/SnapshotMutableIntStateImpl;->getIntValue()I +HSPLandroidx/compose/runtime/SnapshotMutableIntStateImpl;->prependStateRecord(Landroidx/compose/runtime/snapshots/StateRecord;)V +HSPLandroidx/compose/runtime/SnapshotMutableIntStateImpl;->setIntValue(I)V +Landroidx/compose/runtime/SnapshotMutableIntStateImpl$IntStateStateRecord; +HSPLandroidx/compose/runtime/SnapshotMutableIntStateImpl$IntStateStateRecord;->(I)V +HSPLandroidx/compose/runtime/SnapshotMutableIntStateImpl$IntStateStateRecord;->assign(Landroidx/compose/runtime/snapshots/StateRecord;)V +HSPLandroidx/compose/runtime/SnapshotMutableIntStateImpl$IntStateStateRecord;->create()Landroidx/compose/runtime/snapshots/StateRecord; +HSPLandroidx/compose/runtime/SnapshotMutableIntStateImpl$IntStateStateRecord;->getValue()I +HSPLandroidx/compose/runtime/SnapshotMutableIntStateImpl$IntStateStateRecord;->setValue(I)V +Landroidx/compose/runtime/SnapshotMutableLongStateImpl; +HSPLandroidx/compose/runtime/SnapshotMutableLongStateImpl;->(J)V +HSPLandroidx/compose/runtime/SnapshotMutableLongStateImpl;->getFirstStateRecord()Landroidx/compose/runtime/snapshots/StateRecord; +HSPLandroidx/compose/runtime/SnapshotMutableLongStateImpl;->getLongValue()J +HSPLandroidx/compose/runtime/SnapshotMutableLongStateImpl;->prependStateRecord(Landroidx/compose/runtime/snapshots/StateRecord;)V +HSPLandroidx/compose/runtime/SnapshotMutableLongStateImpl;->setLongValue(J)V +Landroidx/compose/runtime/SnapshotMutableLongStateImpl$LongStateStateRecord; +HSPLandroidx/compose/runtime/SnapshotMutableLongStateImpl$LongStateStateRecord;->(J)V +HSPLandroidx/compose/runtime/SnapshotMutableLongStateImpl$LongStateStateRecord;->assign(Landroidx/compose/runtime/snapshots/StateRecord;)V +HSPLandroidx/compose/runtime/SnapshotMutableLongStateImpl$LongStateStateRecord;->create()Landroidx/compose/runtime/snapshots/StateRecord; +HSPLandroidx/compose/runtime/SnapshotMutableLongStateImpl$LongStateStateRecord;->getValue()J +HSPLandroidx/compose/runtime/SnapshotMutableLongStateImpl$LongStateStateRecord;->setValue(J)V +Landroidx/compose/runtime/SnapshotMutableStateImpl; +HSPLandroidx/compose/runtime/SnapshotMutableStateImpl;->(Ljava/lang/Object;Landroidx/compose/runtime/SnapshotMutationPolicy;)V +HSPLandroidx/compose/runtime/SnapshotMutableStateImpl;->getFirstStateRecord()Landroidx/compose/runtime/snapshots/StateRecord; +HSPLandroidx/compose/runtime/SnapshotMutableStateImpl;->getPolicy()Landroidx/compose/runtime/SnapshotMutationPolicy; +HSPLandroidx/compose/runtime/SnapshotMutableStateImpl;->getValue()Ljava/lang/Object; +HSPLandroidx/compose/runtime/SnapshotMutableStateImpl;->prependStateRecord(Landroidx/compose/runtime/snapshots/StateRecord;)V +HSPLandroidx/compose/runtime/SnapshotMutableStateImpl;->setValue(Ljava/lang/Object;)V +Landroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord; +HSPLandroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;->(Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;->assign(Landroidx/compose/runtime/snapshots/StateRecord;)V +HSPLandroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;->create()Landroidx/compose/runtime/snapshots/StateRecord; +HSPLandroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;->getValue()Ljava/lang/Object; +HSPLandroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;->setValue(Ljava/lang/Object;)V +Landroidx/compose/runtime/SnapshotMutationPolicy; +Landroidx/compose/runtime/SnapshotStateKt; +HSPLandroidx/compose/runtime/SnapshotStateKt;->collectAsState(Lkotlinx/coroutines/flow/Flow;Ljava/lang/Object;Lkotlin/coroutines/CoroutineContext;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/State; +HSPLandroidx/compose/runtime/SnapshotStateKt;->collectAsState(Lkotlinx/coroutines/flow/StateFlow;Lkotlin/coroutines/CoroutineContext;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/State; +HSPLandroidx/compose/runtime/SnapshotStateKt;->derivedStateObservers()Landroidx/compose/runtime/collection/MutableVector; +HSPLandroidx/compose/runtime/SnapshotStateKt;->derivedStateOf(Landroidx/compose/runtime/SnapshotMutationPolicy;Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/State; +HSPLandroidx/compose/runtime/SnapshotStateKt;->derivedStateOf(Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/State; +HSPLandroidx/compose/runtime/SnapshotStateKt;->mutableStateListOf()Landroidx/compose/runtime/snapshots/SnapshotStateList; +HSPLandroidx/compose/runtime/SnapshotStateKt;->mutableStateListOf([Ljava/lang/Object;)Landroidx/compose/runtime/snapshots/SnapshotStateList; +HSPLandroidx/compose/runtime/SnapshotStateKt;->mutableStateMapOf()Landroidx/compose/runtime/snapshots/SnapshotStateMap; +HSPLandroidx/compose/runtime/SnapshotStateKt;->mutableStateOf$default(Ljava/lang/Object;Landroidx/compose/runtime/SnapshotMutationPolicy;ILjava/lang/Object;)Landroidx/compose/runtime/MutableState; +HSPLandroidx/compose/runtime/SnapshotStateKt;->mutableStateOf(Ljava/lang/Object;Landroidx/compose/runtime/SnapshotMutationPolicy;)Landroidx/compose/runtime/MutableState; +HSPLandroidx/compose/runtime/SnapshotStateKt;->neverEqualPolicy()Landroidx/compose/runtime/SnapshotMutationPolicy; +HSPLandroidx/compose/runtime/SnapshotStateKt;->produceState(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State; +HSPLandroidx/compose/runtime/SnapshotStateKt;->referentialEqualityPolicy()Landroidx/compose/runtime/SnapshotMutationPolicy; +HSPLandroidx/compose/runtime/SnapshotStateKt;->rememberUpdatedState(Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State; +HSPLandroidx/compose/runtime/SnapshotStateKt;->snapshotFlow(Lkotlin/jvm/functions/Function0;)Lkotlinx/coroutines/flow/Flow; +HSPLandroidx/compose/runtime/SnapshotStateKt;->structuralEqualityPolicy()Landroidx/compose/runtime/SnapshotMutationPolicy; +Landroidx/compose/runtime/SnapshotStateKt__DerivedStateKt; +HSPLandroidx/compose/runtime/SnapshotStateKt__DerivedStateKt;->()V +HSPLandroidx/compose/runtime/SnapshotStateKt__DerivedStateKt;->access$getCalculationBlockNestedLevel$p()Landroidx/compose/runtime/SnapshotThreadLocal; +HSPLandroidx/compose/runtime/SnapshotStateKt__DerivedStateKt;->derivedStateObservers()Landroidx/compose/runtime/collection/MutableVector; +HSPLandroidx/compose/runtime/SnapshotStateKt__DerivedStateKt;->derivedStateOf(Landroidx/compose/runtime/SnapshotMutationPolicy;Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/State; +HSPLandroidx/compose/runtime/SnapshotStateKt__DerivedStateKt;->derivedStateOf(Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/State; +Landroidx/compose/runtime/SnapshotStateKt__ProduceStateKt; +HSPLandroidx/compose/runtime/SnapshotStateKt__ProduceStateKt;->produceState(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State; +Landroidx/compose/runtime/SnapshotStateKt__ProduceStateKt$produceState$3; +HSPLandroidx/compose/runtime/SnapshotStateKt__ProduceStateKt$produceState$3;->(Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/runtime/SnapshotStateKt__ProduceStateKt$produceState$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/runtime/SnapshotStateKt__ProduceStateKt$produceState$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt; +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt;->access$intersects(Ljava/util/Set;Ljava/util/Set;)Z +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt;->collectAsState(Lkotlinx/coroutines/flow/Flow;Ljava/lang/Object;Lkotlin/coroutines/CoroutineContext;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/State; +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt;->collectAsState(Lkotlinx/coroutines/flow/StateFlow;Lkotlin/coroutines/CoroutineContext;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/State; +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt;->intersects$SnapshotStateKt__SnapshotFlowKt(Ljava/util/Set;Ljava/util/Set;)Z +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt;->snapshotFlow(Lkotlin/jvm/functions/Function0;)Lkotlinx/coroutines/flow/Flow; +Landroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1; +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1;->(Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1;->invoke(Landroidx/compose/runtime/ProduceStateScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1$1; +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1$1;->(Landroidx/compose/runtime/ProduceStateScope;)V +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1; +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1;->(Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1$readObserver$1; +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1$readObserver$1;->(Ljava/util/Set;)V +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1$readObserver$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1$readObserver$1;->invoke(Ljava/lang/Object;)V +Landroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1$unregisterApplyObserver$1; +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1$unregisterApplyObserver$1;->(Lkotlinx/coroutines/channels/Channel;)V +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1$unregisterApplyObserver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1$unregisterApplyObserver$1;->invoke(Ljava/util/Set;Landroidx/compose/runtime/snapshots/Snapshot;)V +Landroidx/compose/runtime/SnapshotStateKt__SnapshotMutationPolicyKt; +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotMutationPolicyKt;->neverEqualPolicy()Landroidx/compose/runtime/SnapshotMutationPolicy; +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotMutationPolicyKt;->referentialEqualityPolicy()Landroidx/compose/runtime/SnapshotMutationPolicy; +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotMutationPolicyKt;->structuralEqualityPolicy()Landroidx/compose/runtime/SnapshotMutationPolicy; +Landroidx/compose/runtime/SnapshotStateKt__SnapshotStateKt; +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotStateKt;->mutableStateListOf()Landroidx/compose/runtime/snapshots/SnapshotStateList; +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotStateKt;->mutableStateListOf([Ljava/lang/Object;)Landroidx/compose/runtime/snapshots/SnapshotStateList; +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotStateKt;->mutableStateMapOf()Landroidx/compose/runtime/snapshots/SnapshotStateMap; +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotStateKt;->mutableStateOf$default(Ljava/lang/Object;Landroidx/compose/runtime/SnapshotMutationPolicy;ILjava/lang/Object;)Landroidx/compose/runtime/MutableState; +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotStateKt;->mutableStateOf(Ljava/lang/Object;Landroidx/compose/runtime/SnapshotMutationPolicy;)Landroidx/compose/runtime/MutableState; +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotStateKt;->rememberUpdatedState(Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State; +Landroidx/compose/runtime/SnapshotThreadLocal; +HSPLandroidx/compose/runtime/SnapshotThreadLocal;->()V +HSPLandroidx/compose/runtime/SnapshotThreadLocal;->get()Ljava/lang/Object; +HSPLandroidx/compose/runtime/SnapshotThreadLocal;->set(Ljava/lang/Object;)V +Landroidx/compose/runtime/Stack; +HSPLandroidx/compose/runtime/Stack;->()V +HSPLandroidx/compose/runtime/Stack;->clear()V +HSPLandroidx/compose/runtime/Stack;->getSize()I +HSPLandroidx/compose/runtime/Stack;->isEmpty()Z +HSPLandroidx/compose/runtime/Stack;->isNotEmpty()Z +HSPLandroidx/compose/runtime/Stack;->peek()Ljava/lang/Object; +HSPLandroidx/compose/runtime/Stack;->peek(I)Ljava/lang/Object; +HSPLandroidx/compose/runtime/Stack;->pop()Ljava/lang/Object; +HSPLandroidx/compose/runtime/Stack;->push(Ljava/lang/Object;)Z +HSPLandroidx/compose/runtime/Stack;->toArray()[Ljava/lang/Object; +Landroidx/compose/runtime/State; +Landroidx/compose/runtime/StaticProvidableCompositionLocal; +HSPLandroidx/compose/runtime/StaticProvidableCompositionLocal;->(Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/runtime/StaticProvidableCompositionLocal;->provided$runtime_release(Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State; +Landroidx/compose/runtime/StaticValueHolder; +HSPLandroidx/compose/runtime/StaticValueHolder;->(Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/StaticValueHolder;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/runtime/StaticValueHolder;->getValue()Ljava/lang/Object; +Landroidx/compose/runtime/StructuralEqualityPolicy; +HSPLandroidx/compose/runtime/StructuralEqualityPolicy;->()V +HSPLandroidx/compose/runtime/StructuralEqualityPolicy;->()V +HSPLandroidx/compose/runtime/StructuralEqualityPolicy;->equivalent(Ljava/lang/Object;Ljava/lang/Object;)Z +Landroidx/compose/runtime/Trace; +HSPLandroidx/compose/runtime/Trace;->()V +HSPLandroidx/compose/runtime/Trace;->()V +HSPLandroidx/compose/runtime/Trace;->beginSection(Ljava/lang/String;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/Trace;->endSection(Ljava/lang/Object;)V +Landroidx/compose/runtime/Updater; +HSPLandroidx/compose/runtime/Updater;->constructor-impl(Landroidx/compose/runtime/Composer;)Landroidx/compose/runtime/Composer; +HSPLandroidx/compose/runtime/Updater;->set-impl(Landroidx/compose/runtime/Composer;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V +Landroidx/compose/runtime/WeakReference; +HSPLandroidx/compose/runtime/WeakReference;->(Ljava/lang/Object;)V +Landroidx/compose/runtime/collection/IdentityArrayIntMap; +HSPLandroidx/compose/runtime/collection/IdentityArrayIntMap;->()V +HSPLandroidx/compose/runtime/collection/IdentityArrayIntMap;->access$setSize$p(Landroidx/compose/runtime/collection/IdentityArrayIntMap;I)V +HSPLandroidx/compose/runtime/collection/IdentityArrayIntMap;->add(Ljava/lang/Object;I)I +HSPLandroidx/compose/runtime/collection/IdentityArrayIntMap;->find(Ljava/lang/Object;)I +HSPLandroidx/compose/runtime/collection/IdentityArrayIntMap;->getKeys()[Ljava/lang/Object; +HSPLandroidx/compose/runtime/collection/IdentityArrayIntMap;->getSize()I +HSPLandroidx/compose/runtime/collection/IdentityArrayIntMap;->getValues()[I +Landroidx/compose/runtime/collection/IdentityArrayMap; +HSPLandroidx/compose/runtime/collection/IdentityArrayMap;->(I)V +HSPLandroidx/compose/runtime/collection/IdentityArrayMap;->(IILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/runtime/collection/IdentityArrayMap;->access$setSize$p(Landroidx/compose/runtime/collection/IdentityArrayMap;I)V +HSPLandroidx/compose/runtime/collection/IdentityArrayMap;->contains(Ljava/lang/Object;)Z +HSPLandroidx/compose/runtime/collection/IdentityArrayMap;->find(Ljava/lang/Object;)I +HSPLandroidx/compose/runtime/collection/IdentityArrayMap;->get(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/collection/IdentityArrayMap;->getKeys()[Ljava/lang/Object; +HSPLandroidx/compose/runtime/collection/IdentityArrayMap;->getSize()I +HSPLandroidx/compose/runtime/collection/IdentityArrayMap;->getValues()[Ljava/lang/Object; +HSPLandroidx/compose/runtime/collection/IdentityArrayMap;->isNotEmpty()Z +HSPLandroidx/compose/runtime/collection/IdentityArrayMap;->remove(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/collection/IdentityArrayMap;->set(Ljava/lang/Object;Ljava/lang/Object;)V +Landroidx/compose/runtime/collection/IdentityArraySet; +HSPLandroidx/compose/runtime/collection/IdentityArraySet;->()V +HSPLandroidx/compose/runtime/collection/IdentityArraySet;->access$setSize$p(Landroidx/compose/runtime/collection/IdentityArraySet;I)V +HSPLandroidx/compose/runtime/collection/IdentityArraySet;->add(Ljava/lang/Object;)Z +HSPLandroidx/compose/runtime/collection/IdentityArraySet;->addAll(Ljava/util/Collection;)V +HSPLandroidx/compose/runtime/collection/IdentityArraySet;->clear()V +HSPLandroidx/compose/runtime/collection/IdentityArraySet;->contains(Ljava/lang/Object;)Z +HSPLandroidx/compose/runtime/collection/IdentityArraySet;->find(Ljava/lang/Object;)I +HSPLandroidx/compose/runtime/collection/IdentityArraySet;->getSize()I +HSPLandroidx/compose/runtime/collection/IdentityArraySet;->getValues()[Ljava/lang/Object; +HSPLandroidx/compose/runtime/collection/IdentityArraySet;->isEmpty()Z +HSPLandroidx/compose/runtime/collection/IdentityArraySet;->isNotEmpty()Z +HSPLandroidx/compose/runtime/collection/IdentityArraySet;->iterator()Ljava/util/Iterator; +HSPLandroidx/compose/runtime/collection/IdentityArraySet;->remove(Ljava/lang/Object;)Z +HSPLandroidx/compose/runtime/collection/IdentityArraySet;->size()I +Landroidx/compose/runtime/collection/IdentityArraySet$iterator$1; +HSPLandroidx/compose/runtime/collection/IdentityArraySet$iterator$1;->(Landroidx/compose/runtime/collection/IdentityArraySet;)V +HSPLandroidx/compose/runtime/collection/IdentityArraySet$iterator$1;->hasNext()Z +HSPLandroidx/compose/runtime/collection/IdentityArraySet$iterator$1;->next()Ljava/lang/Object; +Landroidx/compose/runtime/collection/IdentityScopeMap; +HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->()V +HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->access$find(Landroidx/compose/runtime/collection/IdentityScopeMap;Ljava/lang/Object;)I +HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->access$scopeSetAt(Landroidx/compose/runtime/collection/IdentityScopeMap;I)Landroidx/compose/runtime/collection/IdentityArraySet; +HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->add(Ljava/lang/Object;Ljava/lang/Object;)Z +HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->contains(Ljava/lang/Object;)Z +HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->find(Ljava/lang/Object;)I +HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->getOrCreateIdentitySet(Ljava/lang/Object;)Landroidx/compose/runtime/collection/IdentityArraySet; +HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->getScopeSets()[Landroidx/compose/runtime/collection/IdentityArraySet; +HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->getSize()I +HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->getValueOrder()[I +HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->getValues()[Ljava/lang/Object; +HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->remove(Ljava/lang/Object;Ljava/lang/Object;)Z +HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->removeScope(Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->scopeSetAt(I)Landroidx/compose/runtime/collection/IdentityArraySet; +HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->setSize(I)V +Landroidx/compose/runtime/collection/IntMap; +HSPLandroidx/compose/runtime/collection/IntMap;->(I)V +HSPLandroidx/compose/runtime/collection/IntMap;->(IILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/runtime/collection/IntMap;->(Landroid/util/SparseArray;)V +HSPLandroidx/compose/runtime/collection/IntMap;->clear()V +HSPLandroidx/compose/runtime/collection/IntMap;->get(I)Ljava/lang/Object; +Landroidx/compose/runtime/collection/MutableVector; +HSPLandroidx/compose/runtime/collection/MutableVector;->()V +HSPLandroidx/compose/runtime/collection/MutableVector;->([Ljava/lang/Object;I)V +HSPLandroidx/compose/runtime/collection/MutableVector;->add(ILjava/lang/Object;)V +HSPLandroidx/compose/runtime/collection/MutableVector;->add(Ljava/lang/Object;)Z +HSPLandroidx/compose/runtime/collection/MutableVector;->addAll(ILandroidx/compose/runtime/collection/MutableVector;)Z +HSPLandroidx/compose/runtime/collection/MutableVector;->asMutableList()Ljava/util/List; +HSPLandroidx/compose/runtime/collection/MutableVector;->clear()V +HSPLandroidx/compose/runtime/collection/MutableVector;->contains(Ljava/lang/Object;)Z +HSPLandroidx/compose/runtime/collection/MutableVector;->ensureCapacity(I)V +HSPLandroidx/compose/runtime/collection/MutableVector;->getContent()[Ljava/lang/Object; +HSPLandroidx/compose/runtime/collection/MutableVector;->getSize()I +HSPLandroidx/compose/runtime/collection/MutableVector;->indexOf(Ljava/lang/Object;)I +HSPLandroidx/compose/runtime/collection/MutableVector;->isEmpty()Z +HSPLandroidx/compose/runtime/collection/MutableVector;->isNotEmpty()Z +HSPLandroidx/compose/runtime/collection/MutableVector;->remove(Ljava/lang/Object;)Z +HSPLandroidx/compose/runtime/collection/MutableVector;->removeAt(I)Ljava/lang/Object; +HSPLandroidx/compose/runtime/collection/MutableVector;->removeRange(II)V +HSPLandroidx/compose/runtime/collection/MutableVector;->set(ILjava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/collection/MutableVector;->sortWith(Ljava/util/Comparator;)V +Landroidx/compose/runtime/collection/MutableVector$MutableVectorList; +HSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->(Landroidx/compose/runtime/collection/MutableVector;)V +HSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->get(I)Ljava/lang/Object; +HSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->getSize()I +HSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->indexOf(Ljava/lang/Object;)I +HSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->isEmpty()Z +HSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->iterator()Ljava/util/Iterator; +HSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->size()I +Landroidx/compose/runtime/collection/MutableVector$VectorListIterator; +HSPLandroidx/compose/runtime/collection/MutableVector$VectorListIterator;->(Ljava/util/List;I)V +HSPLandroidx/compose/runtime/collection/MutableVector$VectorListIterator;->hasNext()Z +HSPLandroidx/compose/runtime/collection/MutableVector$VectorListIterator;->next()Ljava/lang/Object; +Landroidx/compose/runtime/collection/MutableVectorKt; +HSPLandroidx/compose/runtime/collection/MutableVectorKt;->access$checkIndex(Ljava/util/List;I)V +HSPLandroidx/compose/runtime/collection/MutableVectorKt;->checkIndex(Ljava/util/List;I)V +Landroidx/compose/runtime/external/kotlinx/collections/immutable/ExtensionsKt; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/ExtensionsKt;->persistentHashMapOf()Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/ExtensionsKt;->persistentListOf()Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/ExtensionsKt;->persistentSetOf()Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentSet; +Landroidx/compose/runtime/external/kotlinx/collections/immutable/ImmutableCollection; +Landroidx/compose/runtime/external/kotlinx/collections/immutable/ImmutableList; +Landroidx/compose/runtime/external/kotlinx/collections/immutable/ImmutableMap; +Landroidx/compose/runtime/external/kotlinx/collections/immutable/ImmutableSet; +Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentCollection; +Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentCollection$Builder; +Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList; +Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList$Builder; +Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap; +Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap$Builder; +Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentSet; +Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/AbstractListIterator; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/AbstractListIterator;->(II)V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/AbstractListIterator;->getIndex()I +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/AbstractListIterator;->hasNext()Z +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/AbstractListIterator;->setIndex(I)V +Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/AbstractPersistentList; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/AbstractPersistentList;->()V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/AbstractPersistentList;->contains(Ljava/lang/Object;)Z +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/AbstractPersistentList;->iterator()Ljava/util/Iterator; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/AbstractPersistentList;->listIterator()Ljava/util/ListIterator; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/AbstractPersistentList;->remove(Ljava/lang/Object;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList; +Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/BufferIterator; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/BufferIterator;->([Ljava/lang/Object;II)V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/BufferIterator;->next()Ljava/lang/Object; +Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->()V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->([Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->access$getEMPTY$cp()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->add(Ljava/lang/Object;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->addAll(Ljava/util/Collection;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->get(I)Ljava/lang/Object; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->getSize()I +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->indexOf(Ljava/lang/Object;)I +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->listIterator(I)Ljava/util/ListIterator; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->removeAt(I)Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->set(ILjava/lang/Object;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList; +Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector$Companion; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector$Companion;->()V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector$Companion;->getEMPTY()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector; +Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/UtilsKt; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/UtilsKt;->persistentVectorOf()Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList; +Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/MapEntry; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/MapEntry;->(Ljava/lang/Object;Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/MapEntry;->getKey()Ljava/lang/Object; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/MapEntry;->getValue()Ljava/lang/Object; +Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->()V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;I)V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->access$getEMPTY$cp()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->builder()Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap$Builder; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->builder()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->containsKey(Ljava/lang/Object;)Z +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->createEntries()Landroidx/compose/runtime/external/kotlinx/collections/immutable/ImmutableSet; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->get(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->getEntries()Ljava/util/Set; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->getNode$runtime_release()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->getSize()I +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap; +Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap$Companion; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap$Companion;->()V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap$Companion;->emptyOf$runtime_release()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap; +Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;->(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;[Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;)V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;->checkHasNext()V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;->ensureNextEntryIsReady()V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;->hasNext()Z +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;->moveToNextNodeWithData(I)I +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;->next()Ljava/lang/Object; +Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;)V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->build()Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->build()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->getModCount$runtime_release()I +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->getNode$runtime_release()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->getOwnership()Landroidx/compose/runtime/external/kotlinx/collections/immutable/internal/MutabilityOwnership; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->getSize()I +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->putAll(Ljava/util/Map;)V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->setModCount$runtime_release(I)V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->setOperationResult$runtime_release(Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->setOwnership(Landroidx/compose/runtime/external/kotlinx/collections/immutable/internal/MutabilityOwnership;)V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->setSize(I)V +Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapEntries; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapEntries;->(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;)V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapEntries;->getSize()I +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapEntries;->iterator()Ljava/util/Iterator; +Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapEntriesIterator; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapEntriesIterator;->(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;)V +Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->()V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->(II[Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->(II[Ljava/lang/Object;Landroidx/compose/runtime/external/kotlinx/collections/immutable/internal/MutabilityOwnership;)V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->access$getEMPTY$cp()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->asInsertResult()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode$ModificationResult; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->bufferMoveEntryToNode(IIILjava/lang/Object;Ljava/lang/Object;ILandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/MutabilityOwnership;)[Ljava/lang/Object; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->containsKey(ILjava/lang/Object;I)Z +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->elementsIdentityEquals(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;)Z +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->entryCount$runtime_release()I +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->entryKeyIndex$runtime_release(I)I +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->get(ILjava/lang/Object;I)Ljava/lang/Object; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->getBuffer$runtime_release()[Ljava/lang/Object; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->hasEntryAt$runtime_release(I)Z +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->hasNodeAt(I)Z +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->insertEntryAt(ILjava/lang/Object;Ljava/lang/Object;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->keyAtIndex(I)Ljava/lang/Object; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->makeNode(ILjava/lang/Object;Ljava/lang/Object;ILjava/lang/Object;Ljava/lang/Object;ILandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/MutabilityOwnership;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->mutableInsertEntryAt(ILjava/lang/Object;Ljava/lang/Object;Landroidx/compose/runtime/external/kotlinx/collections/immutable/internal/MutabilityOwnership;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->mutableMoveEntryToNode(IIILjava/lang/Object;Ljava/lang/Object;ILandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/MutabilityOwnership;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode; +HSPLandroidx/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; +HSPLandroidx/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; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->mutablePutAllFromOtherNodeCell(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;IILandroidx/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; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->mutableUpdateValueAtIndex(ILjava/lang/Object;Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->nodeAtIndex$runtime_release(I)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->nodeIndex$runtime_release(I)I +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->put(ILjava/lang/Object;Ljava/lang/Object;I)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode$ModificationResult; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->valueAtKeyIndex(I)Ljava/lang/Object; +Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode$Companion; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode$Companion;->()V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode$Companion;->getEMPTY$runtime_release()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode; +Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode$ModificationResult; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode$ModificationResult;->(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;I)V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode$ModificationResult;->getNode()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode$ModificationResult;->getSizeDelta()I +Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->()V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->getBuffer()[Ljava/lang/Object; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->getIndex()I +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->hasNextKey()Z +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->hasNextNode()Z +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->reset([Ljava/lang/Object;I)V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->reset([Ljava/lang/Object;II)V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->setIndex(I)V +Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeEntriesIterator; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeEntriesIterator;->()V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeEntriesIterator;->next()Ljava/lang/Object; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeEntriesIterator;->next()Ljava/util/Map$Entry; +Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeKt; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeKt;->access$insertEntryAtIndex([Ljava/lang/Object;ILjava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeKt;->access$replaceEntryWithNode([Ljava/lang/Object;IILandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;)[Ljava/lang/Object; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeKt;->indexSegment(II)I +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeKt;->insertEntryAtIndex([Ljava/lang/Object;ILjava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeKt;->replaceEntryWithNode([Ljava/lang/Object;IILandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;)[Ljava/lang/Object; +Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;->()V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;->(Ljava/lang/Object;Ljava/lang/Object;)V +Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;->()V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;->(Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;)V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;->access$getEMPTY$cp()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;->add(Ljava/lang/Object;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentSet; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;->getSize()I +Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet$Companion; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet$Companion;->()V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet$Companion;->emptyOf$runtime_release()Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentSet; +Landroidx/compose/runtime/external/kotlinx/collections/immutable/internal/CommonFunctionsKt; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/CommonFunctionsKt;->assert(Z)V +Landroidx/compose/runtime/external/kotlinx/collections/immutable/internal/DeltaCounter; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/DeltaCounter;->(I)V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/DeltaCounter;->(IILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/DeltaCounter;->getCount()I +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/DeltaCounter;->setCount(I)V +Landroidx/compose/runtime/external/kotlinx/collections/immutable/internal/EndOfChain; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/EndOfChain;->()V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/EndOfChain;->()V +Landroidx/compose/runtime/external/kotlinx/collections/immutable/internal/ListImplementation; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/ListImplementation;->()V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/ListImplementation;->()V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/ListImplementation;->checkElementIndex$runtime_release(II)V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/ListImplementation;->checkPositionIndex$runtime_release(II)V +Landroidx/compose/runtime/external/kotlinx/collections/immutable/internal/MutabilityOwnership; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/MutabilityOwnership;->()V +Landroidx/compose/runtime/internal/ComposableLambda; +Landroidx/compose/runtime/internal/ComposableLambdaImpl; +HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->(IZ)V +HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Landroidx/compose/runtime/Composer;I)Ljava/lang/Object; +HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)Ljava/lang/Object; +HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)Ljava/lang/Object; +HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)Ljava/lang/Object; +HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->trackRead(Landroidx/compose/runtime/Composer;)V +HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->trackWrite()V +HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->update(Ljava/lang/Object;)V +Landroidx/compose/runtime/internal/ComposableLambdaImpl$invoke$1; +HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl$invoke$1;->(Landroidx/compose/runtime/internal/ComposableLambdaImpl;Ljava/lang/Object;I)V +HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl$invoke$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl$invoke$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/internal/ComposableLambdaImpl$invoke$2; +HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl$invoke$2;->(Landroidx/compose/runtime/internal/ComposableLambdaImpl;Ljava/lang/Object;Ljava/lang/Object;I)V +Landroidx/compose/runtime/internal/ComposableLambdaImpl$invoke$3; +HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl$invoke$3;->(Landroidx/compose/runtime/internal/ComposableLambdaImpl;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;I)V +HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl$invoke$3;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl$invoke$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/internal/ComposableLambdaKt; +HSPLandroidx/compose/runtime/internal/ComposableLambdaKt;->bitsForSlot(II)I +HSPLandroidx/compose/runtime/internal/ComposableLambdaKt;->composableLambda(Landroidx/compose/runtime/Composer;IZLjava/lang/Object;)Landroidx/compose/runtime/internal/ComposableLambda; +HSPLandroidx/compose/runtime/internal/ComposableLambdaKt;->composableLambdaInstance(IZLjava/lang/Object;)Landroidx/compose/runtime/internal/ComposableLambda; +HSPLandroidx/compose/runtime/internal/ComposableLambdaKt;->differentBits(I)I +HSPLandroidx/compose/runtime/internal/ComposableLambdaKt;->replacableWith(Landroidx/compose/runtime/RecomposeScope;Landroidx/compose/runtime/RecomposeScope;)Z +HSPLandroidx/compose/runtime/internal/ComposableLambdaKt;->sameBits(I)I +Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap; +HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;->()V +HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;->(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;I)V +HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;->access$getEmpty$cp()Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap; +HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;->builder()Landroidx/compose/runtime/PersistentCompositionLocalMap$Builder; +HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;->builder()Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap$Builder; +HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;->containsKey(Landroidx/compose/runtime/CompositionLocal;)Z +HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;->containsKey(Ljava/lang/Object;)Z +HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;->get(Landroidx/compose/runtime/CompositionLocal;)Landroidx/compose/runtime/State; +HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;->get(Landroidx/compose/runtime/CompositionLocal;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;->get(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap$Builder; +HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap$Builder;->()V +HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap$Builder;->(Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;)V +HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap$Builder;->build()Landroidx/compose/runtime/PersistentCompositionLocalMap; +HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap$Builder;->build()Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap; +Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap$Companion; +HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap$Companion;->()V +HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap$Companion;->getEmpty()Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap; +Landroidx/compose/runtime/internal/PersistentCompositionLocalMapKt; +HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalMapKt;->persistentCompositionLocalHashMapOf()Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap; +Landroidx/compose/runtime/internal/ThreadMap; +HSPLandroidx/compose/runtime/internal/ThreadMap;->(I[J[Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/internal/ThreadMap;->find(J)I +HSPLandroidx/compose/runtime/internal/ThreadMap;->get(J)Ljava/lang/Object; +HSPLandroidx/compose/runtime/internal/ThreadMap;->newWith(JLjava/lang/Object;)Landroidx/compose/runtime/internal/ThreadMap; +HSPLandroidx/compose/runtime/internal/ThreadMap;->trySet(JLjava/lang/Object;)Z +Landroidx/compose/runtime/internal/ThreadMapKt; +HSPLandroidx/compose/runtime/internal/ThreadMapKt;->()V +HSPLandroidx/compose/runtime/internal/ThreadMapKt;->getEmptyThreadMap()Landroidx/compose/runtime/internal/ThreadMap; +Landroidx/compose/runtime/saveable/ListSaverKt; +HSPLandroidx/compose/runtime/saveable/ListSaverKt;->listSaver(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/saveable/Saver; +Landroidx/compose/runtime/saveable/ListSaverKt$listSaver$1; +HSPLandroidx/compose/runtime/saveable/ListSaverKt$listSaver$1;->(Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/runtime/saveable/ListSaverKt$listSaver$1;->invoke(Landroidx/compose/runtime/saveable/SaverScope;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/saveable/ListSaverKt$listSaver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/saveable/RememberSaveableKt; +HSPLandroidx/compose/runtime/saveable/RememberSaveableKt;->()V +HSPLandroidx/compose/runtime/saveable/RememberSaveableKt;->access$requireCanBeSaved(Landroidx/compose/runtime/saveable/SaveableStateRegistry;Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/saveable/RememberSaveableKt;->rememberSaveable([Ljava/lang/Object;Landroidx/compose/runtime/saveable/Saver;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;II)Ljava/lang/Object; +HSPLandroidx/compose/runtime/saveable/RememberSaveableKt;->requireCanBeSaved(Landroidx/compose/runtime/saveable/SaveableStateRegistry;Ljava/lang/Object;)V +Landroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1; +HSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1;->(Landroidx/compose/runtime/saveable/SaveableStateRegistry;Ljava/lang/String;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;)V +HSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult; +HSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$invoke$$inlined$onDispose$1; +HSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$invoke$$inlined$onDispose$1;->(Landroidx/compose/runtime/saveable/SaveableStateRegistry$Entry;)V +HSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$invoke$$inlined$onDispose$1;->dispose()V +Landroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$valueProvider$1; +HSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$valueProvider$1;->(Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/runtime/saveable/SaveableStateRegistry;)V +HSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$valueProvider$1;->invoke()Ljava/lang/Object; +Landroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$valueProvider$1$1$1; +HSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$valueProvider$1$1$1;->(Landroidx/compose/runtime/saveable/SaveableStateRegistry;)V +HSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$valueProvider$1$1$1;->canBeSaved(Ljava/lang/Object;)Z +Landroidx/compose/runtime/saveable/SaveableStateHolder; +Landroidx/compose/runtime/saveable/SaveableStateHolderImpl; +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->()V +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->(Ljava/util/Map;)V +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->(Ljava/util/Map;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->SaveableStateProvider(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->access$getRegistryHolders$p(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;)Ljava/util/Map; +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->access$getSavedStates$p(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;)Ljava/util/Map; +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->access$getSaver$cp()Landroidx/compose/runtime/saveable/Saver; +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->access$saveAll(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;)Ljava/util/Map; +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->getParentSaveableStateRegistry()Landroidx/compose/runtime/saveable/SaveableStateRegistry; +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->saveAll()Ljava/util/Map; +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->setParentSaveableStateRegistry(Landroidx/compose/runtime/saveable/SaveableStateRegistry;)V +Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion; +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion;->()V +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion;->getSaver()Landroidx/compose/runtime/saveable/Saver; +Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion$Saver$1; +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion$Saver$1;->()V +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion$Saver$1;->()V +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion$Saver$1;->invoke(Landroidx/compose/runtime/saveable/SaverScope;Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;)Ljava/util/Map; +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion$Saver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion$Saver$2; +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion$Saver$2;->()V +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion$Saver$2;->()V +Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder; +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;->(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;->getRegistry()Landroidx/compose/runtime/saveable/SaveableStateRegistry; +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;->saveTo(Ljava/util/Map;)V +Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder$registry$1; +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder$registry$1;->(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;)V +Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1; +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1;->(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;Ljava/lang/Object;Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;)V +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult; +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1$invoke$$inlined$onDispose$1; +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1$invoke$$inlined$onDispose$1;->(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1$invoke$$inlined$onDispose$1;->dispose()V +Landroidx/compose/runtime/saveable/SaveableStateHolderKt; +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderKt;->rememberSaveableStateHolder(Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/saveable/SaveableStateHolder; +Landroidx/compose/runtime/saveable/SaveableStateHolderKt$rememberSaveableStateHolder$1; +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderKt$rememberSaveableStateHolder$1;->()V +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderKt$rememberSaveableStateHolder$1;->()V +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderKt$rememberSaveableStateHolder$1;->invoke()Landroidx/compose/runtime/saveable/SaveableStateHolderImpl; +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderKt$rememberSaveableStateHolder$1;->invoke()Ljava/lang/Object; +Landroidx/compose/runtime/saveable/SaveableStateRegistry; +Landroidx/compose/runtime/saveable/SaveableStateRegistry$Entry; +Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl; +HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->(Ljava/util/Map;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->access$getValueProviders$p(Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl;)Ljava/util/Map; +HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->canBeSaved(Ljava/lang/Object;)Z +HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->consumeRestored(Ljava/lang/String;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->performSave()Ljava/util/Map; +HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->registerProvider(Ljava/lang/String;Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/saveable/SaveableStateRegistry$Entry; +Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl$registerProvider$3; +HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl$registerProvider$3;->(Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl;Ljava/lang/String;Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl$registerProvider$3;->unregister()V +Landroidx/compose/runtime/saveable/SaveableStateRegistryKt; +HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryKt;->()V +HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryKt;->SaveableStateRegistry(Ljava/util/Map;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/saveable/SaveableStateRegistry; +HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryKt;->getLocalSaveableStateRegistry()Landroidx/compose/runtime/ProvidableCompositionLocal; +Landroidx/compose/runtime/saveable/SaveableStateRegistryKt$LocalSaveableStateRegistry$1; +HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryKt$LocalSaveableStateRegistry$1;->()V +HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryKt$LocalSaveableStateRegistry$1;->()V +Landroidx/compose/runtime/saveable/Saver; +Landroidx/compose/runtime/saveable/SaverKt; +HSPLandroidx/compose/runtime/saveable/SaverKt;->()V +HSPLandroidx/compose/runtime/saveable/SaverKt;->Saver(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/saveable/Saver; +Landroidx/compose/runtime/saveable/SaverKt$AutoSaver$1; +HSPLandroidx/compose/runtime/saveable/SaverKt$AutoSaver$1;->()V +HSPLandroidx/compose/runtime/saveable/SaverKt$AutoSaver$1;->()V +Landroidx/compose/runtime/saveable/SaverKt$AutoSaver$2; +HSPLandroidx/compose/runtime/saveable/SaverKt$AutoSaver$2;->()V +HSPLandroidx/compose/runtime/saveable/SaverKt$AutoSaver$2;->()V +Landroidx/compose/runtime/saveable/SaverKt$Saver$1; +HSPLandroidx/compose/runtime/saveable/SaverKt$Saver$1;->(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/runtime/saveable/SaverKt$Saver$1;->save(Landroidx/compose/runtime/saveable/SaverScope;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/saveable/SaverScope; +Landroidx/compose/runtime/snapshots/GlobalSnapshot; +HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot;->(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;)V +HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot;->dispose()V +HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot;->notifyObjectsInitialized$runtime_release()V +HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot;->takeNestedMutableSnapshot(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/MutableSnapshot; +HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot;->takeNestedSnapshot(Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/Snapshot; +Landroidx/compose/runtime/snapshots/GlobalSnapshot$takeNestedMutableSnapshot$1; +HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot$takeNestedMutableSnapshot$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot$takeNestedMutableSnapshot$1;->invoke(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/MutableSnapshot; +HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot$takeNestedMutableSnapshot$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/snapshots/GlobalSnapshot$takeNestedSnapshot$1; +HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot$takeNestedSnapshot$1;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot$takeNestedSnapshot$1;->invoke(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/ReadonlySnapshot; +HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot$takeNestedSnapshot$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/snapshots/ListUtilsKt; +HSPLandroidx/compose/runtime/snapshots/ListUtilsKt;->fastToSet(Ljava/util/List;)Ljava/util/Set; +Landroidx/compose/runtime/snapshots/MutableSnapshot; +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->()V +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->advance$runtime_release()V +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->apply()Landroidx/compose/runtime/snapshots/SnapshotApplyResult; +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->closeLocked$runtime_release()V +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->dispose()V +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getApplied$runtime_release()Z +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getModified$runtime_release()Landroidx/compose/runtime/collection/IdentityArraySet; +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getPreviousIds$runtime_release()Landroidx/compose/runtime/snapshots/SnapshotIdSet; +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getPreviousPinnedSnapshots$runtime_release()[I +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getReadObserver$runtime_release()Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getReadOnly()Z +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getWriteCount$runtime_release()I +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getWriteObserver$runtime_release()Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->innerApplyLocked$runtime_release(ILjava/util/Map;Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/SnapshotApplyResult; +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->nestedActivated$runtime_release(Landroidx/compose/runtime/snapshots/Snapshot;)V +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->nestedDeactivated$runtime_release(Landroidx/compose/runtime/snapshots/Snapshot;)V +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->notifyObjectsInitialized$runtime_release()V +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->recordModified$runtime_release(Landroidx/compose/runtime/snapshots/StateObject;)V +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->recordPrevious$runtime_release(I)V +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->recordPreviousList$runtime_release(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)V +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->recordPreviousPinnedSnapshot$runtime_release(I)V +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->recordPreviousPinnedSnapshots$runtime_release([I)V +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->releasePinnedSnapshotsForCloseLocked$runtime_release()V +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->releasePreviouslyPinnedSnapshotsLocked()V +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->setApplied$runtime_release(Z)V +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->setModified(Landroidx/compose/runtime/collection/IdentityArraySet;)V +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->setWriteCount$runtime_release(I)V +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->takeNestedMutableSnapshot(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/MutableSnapshot; +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->validateNotAppliedOrPinned()V +Landroidx/compose/runtime/snapshots/MutableSnapshot$Companion; +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot$Companion;->()V +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/runtime/snapshots/NestedMutableSnapshot; +HSPLandroidx/compose/runtime/snapshots/NestedMutableSnapshot;->(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/snapshots/MutableSnapshot;)V +HSPLandroidx/compose/runtime/snapshots/NestedMutableSnapshot;->apply()Landroidx/compose/runtime/snapshots/SnapshotApplyResult; +HSPLandroidx/compose/runtime/snapshots/NestedMutableSnapshot;->deactivate()V +HSPLandroidx/compose/runtime/snapshots/NestedMutableSnapshot;->dispose()V +Landroidx/compose/runtime/snapshots/NestedReadonlySnapshot; +HSPLandroidx/compose/runtime/snapshots/NestedReadonlySnapshot;->(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/snapshots/Snapshot;)V +HSPLandroidx/compose/runtime/snapshots/NestedReadonlySnapshot;->dispose()V +HSPLandroidx/compose/runtime/snapshots/NestedReadonlySnapshot;->getReadObserver$runtime_release()Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/runtime/snapshots/NestedReadonlySnapshot;->takeNestedSnapshot(Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/NestedReadonlySnapshot; +HSPLandroidx/compose/runtime/snapshots/NestedReadonlySnapshot;->takeNestedSnapshot(Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/Snapshot; +Landroidx/compose/runtime/snapshots/NestedReadonlySnapshot$readObserver$1$1$1; +HSPLandroidx/compose/runtime/snapshots/NestedReadonlySnapshot$readObserver$1$1$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/runtime/snapshots/NestedReadonlySnapshot$readObserver$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/snapshots/NestedReadonlySnapshot$readObserver$1$1$1;->invoke(Ljava/lang/Object;)V +Landroidx/compose/runtime/snapshots/ObserverHandle; +Landroidx/compose/runtime/snapshots/ReadonlySnapshot; +HSPLandroidx/compose/runtime/snapshots/ReadonlySnapshot;->(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/runtime/snapshots/ReadonlySnapshot;->dispose()V +HSPLandroidx/compose/runtime/snapshots/ReadonlySnapshot;->getReadObserver$runtime_release()Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/runtime/snapshots/ReadonlySnapshot;->nestedActivated$runtime_release(Landroidx/compose/runtime/snapshots/Snapshot;)V +HSPLandroidx/compose/runtime/snapshots/ReadonlySnapshot;->nestedDeactivated$runtime_release(Landroidx/compose/runtime/snapshots/Snapshot;)V +HSPLandroidx/compose/runtime/snapshots/ReadonlySnapshot;->notifyObjectsInitialized$runtime_release()V +HSPLandroidx/compose/runtime/snapshots/ReadonlySnapshot;->takeNestedSnapshot(Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/Snapshot; +Landroidx/compose/runtime/snapshots/Snapshot; +HSPLandroidx/compose/runtime/snapshots/Snapshot;->()V +HSPLandroidx/compose/runtime/snapshots/Snapshot;->(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;)V +HSPLandroidx/compose/runtime/snapshots/Snapshot;->(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/runtime/snapshots/Snapshot;->closeAndReleasePinning$runtime_release()V +HSPLandroidx/compose/runtime/snapshots/Snapshot;->closeLocked$runtime_release()V +HSPLandroidx/compose/runtime/snapshots/Snapshot;->dispose()V +HSPLandroidx/compose/runtime/snapshots/Snapshot;->getDisposed$runtime_release()Z +HSPLandroidx/compose/runtime/snapshots/Snapshot;->getId()I +HSPLandroidx/compose/runtime/snapshots/Snapshot;->getInvalid$runtime_release()Landroidx/compose/runtime/snapshots/SnapshotIdSet; +HSPLandroidx/compose/runtime/snapshots/Snapshot;->getWriteCount$runtime_release()I +HSPLandroidx/compose/runtime/snapshots/Snapshot;->makeCurrent()Landroidx/compose/runtime/snapshots/Snapshot; +HSPLandroidx/compose/runtime/snapshots/Snapshot;->releasePinnedSnapshotLocked$runtime_release()V +HSPLandroidx/compose/runtime/snapshots/Snapshot;->releasePinnedSnapshotsForCloseLocked$runtime_release()V +HSPLandroidx/compose/runtime/snapshots/Snapshot;->restoreCurrent(Landroidx/compose/runtime/snapshots/Snapshot;)V +HSPLandroidx/compose/runtime/snapshots/Snapshot;->setDisposed$runtime_release(Z)V +HSPLandroidx/compose/runtime/snapshots/Snapshot;->setId$runtime_release(I)V +HSPLandroidx/compose/runtime/snapshots/Snapshot;->setInvalid$runtime_release(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)V +HSPLandroidx/compose/runtime/snapshots/Snapshot;->takeoverPinnedSnapshot$runtime_release()I +HSPLandroidx/compose/runtime/snapshots/Snapshot;->validateNotDisposed$runtime_release()V +Landroidx/compose/runtime/snapshots/Snapshot$Companion; +HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion;->()V +HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion;->createNonObservableSnapshot()Landroidx/compose/runtime/snapshots/Snapshot; +HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion;->getCurrent()Landroidx/compose/runtime/snapshots/Snapshot; +HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion;->notifyObjectsInitialized()V +HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion;->observe(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion;->registerApplyObserver(Lkotlin/jvm/functions/Function2;)Landroidx/compose/runtime/snapshots/ObserverHandle; +HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion;->registerGlobalWriteObserver(Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/ObserverHandle; +HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion;->sendApplyNotifications()V +HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion;->takeMutableSnapshot(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/MutableSnapshot; +HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion;->takeSnapshot(Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/Snapshot; +Landroidx/compose/runtime/snapshots/Snapshot$Companion$registerApplyObserver$2; +HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion$registerApplyObserver$2;->(Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion$registerApplyObserver$2;->dispose()V +Landroidx/compose/runtime/snapshots/Snapshot$Companion$registerGlobalWriteObserver$2; +HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion$registerGlobalWriteObserver$2;->(Lkotlin/jvm/functions/Function1;)V +Landroidx/compose/runtime/snapshots/SnapshotApplyResult; +HSPLandroidx/compose/runtime/snapshots/SnapshotApplyResult;->()V +HSPLandroidx/compose/runtime/snapshots/SnapshotApplyResult;->()V +HSPLandroidx/compose/runtime/snapshots/SnapshotApplyResult;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/runtime/snapshots/SnapshotApplyResult$Failure; +Landroidx/compose/runtime/snapshots/SnapshotApplyResult$Success; +HSPLandroidx/compose/runtime/snapshots/SnapshotApplyResult$Success;->()V +HSPLandroidx/compose/runtime/snapshots/SnapshotApplyResult$Success;->()V +Landroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap; +HSPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;->()V +HSPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;->add(I)I +HSPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;->allocateHandle()I +HSPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;->ensure(I)V +HSPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;->freeHandle(I)V +HSPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;->lowestOrDefault(I)I +HSPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;->remove(I)V +HSPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;->shiftDown(I)V +HSPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;->shiftUp(I)V +HSPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;->swap(II)V +Landroidx/compose/runtime/snapshots/SnapshotIdSet; +HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->()V +HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->(JJI[I)V +HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->access$getBelowBound$p(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)[I +HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->access$getEMPTY$cp()Landroidx/compose/runtime/snapshots/SnapshotIdSet; +HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->access$getLowerBound$p(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)I +HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->access$getLowerSet$p(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)J +HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->access$getUpperSet$p(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)J +HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->andNot(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/SnapshotIdSet; +HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->clear(I)Landroidx/compose/runtime/snapshots/SnapshotIdSet; +HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->get(I)Z +HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->iterator()Ljava/util/Iterator; +HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->lowest(I)I +HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->or(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/SnapshotIdSet; +HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->set(I)Landroidx/compose/runtime/snapshots/SnapshotIdSet; +Landroidx/compose/runtime/snapshots/SnapshotIdSet$Companion; +HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet$Companion;->()V +HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet$Companion;->getEMPTY()Landroidx/compose/runtime/snapshots/SnapshotIdSet; +Landroidx/compose/runtime/snapshots/SnapshotIdSet$iterator$1; +HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet$iterator$1;->(Landroidx/compose/runtime/snapshots/SnapshotIdSet;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet$iterator$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet$iterator$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/snapshots/SnapshotIdSetKt; +HSPLandroidx/compose/runtime/snapshots/SnapshotIdSetKt;->access$lowestBitOf(J)I +HSPLandroidx/compose/runtime/snapshots/SnapshotIdSetKt;->binarySearch([II)I +HSPLandroidx/compose/runtime/snapshots/SnapshotIdSetKt;->lowestBitOf(J)I +Landroidx/compose/runtime/snapshots/SnapshotKt; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->()V +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$advanceGlobalSnapshot()V +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$advanceGlobalSnapshot(Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$checkAndOverwriteUnusedRecordsLocked()V +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$getApplyObservers$p()Ljava/util/List; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$getCurrentGlobalSnapshot$p()Ljava/util/concurrent/atomic/AtomicReference; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$getEmptyLambda$p()Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$getGlobalWriteObservers$p()Ljava/util/List; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$getNextSnapshotId$p()I +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$getOpenSnapshots$p()Landroidx/compose/runtime/snapshots/SnapshotIdSet; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$getThreadSnapshot$p()Landroidx/compose/runtime/SnapshotThreadLocal; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$mergedReadObserver(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Z)Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$mergedWriteObserver(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$optimisticMerges(Landroidx/compose/runtime/snapshots/MutableSnapshot;Landroidx/compose/runtime/snapshots/MutableSnapshot;Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Ljava/util/Map; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$processForUnusedRecordsLocked(Landroidx/compose/runtime/snapshots/StateObject;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$readable(Landroidx/compose/runtime/snapshots/StateRecord;ILandroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/StateRecord; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$setNextSnapshotId$p(I)V +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$setOpenSnapshots$p(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$takeNewGlobalSnapshot(Landroidx/compose/runtime/snapshots/Snapshot;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$takeNewSnapshot(Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/Snapshot; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$validateOpen(Landroidx/compose/runtime/snapshots/Snapshot;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->addRange(Landroidx/compose/runtime/snapshots/SnapshotIdSet;II)Landroidx/compose/runtime/snapshots/SnapshotIdSet; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->advanceGlobalSnapshot()V +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->advanceGlobalSnapshot(Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->checkAndOverwriteUnusedRecordsLocked()V +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->createTransparentSnapshotWithNoParentReadObserver$default(Landroidx/compose/runtime/snapshots/Snapshot;Lkotlin/jvm/functions/Function1;ZILjava/lang/Object;)Landroidx/compose/runtime/snapshots/Snapshot; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->createTransparentSnapshotWithNoParentReadObserver(Landroidx/compose/runtime/snapshots/Snapshot;Lkotlin/jvm/functions/Function1;Z)Landroidx/compose/runtime/snapshots/Snapshot; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->current(Landroidx/compose/runtime/snapshots/StateRecord;)Landroidx/compose/runtime/snapshots/StateRecord; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->current(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/Snapshot;)Landroidx/compose/runtime/snapshots/StateRecord; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->currentSnapshot()Landroidx/compose/runtime/snapshots/Snapshot; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->getLock()Ljava/lang/Object; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->getSnapshotInitializer()Landroidx/compose/runtime/snapshots/Snapshot; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->mergedReadObserver$default(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;ZILjava/lang/Object;)Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->mergedReadObserver(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Z)Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->mergedWriteObserver(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->newOverwritableRecordLocked(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/StateObject;)Landroidx/compose/runtime/snapshots/StateRecord; +HSPLandroidx/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; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->newWritableRecordLocked(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/StateObject;Landroidx/compose/runtime/snapshots/Snapshot;)Landroidx/compose/runtime/snapshots/StateRecord; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->notifyWrite(Landroidx/compose/runtime/snapshots/Snapshot;Landroidx/compose/runtime/snapshots/StateObject;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->optimisticMerges(Landroidx/compose/runtime/snapshots/MutableSnapshot;Landroidx/compose/runtime/snapshots/MutableSnapshot;Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Ljava/util/Map; +HSPLandroidx/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; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->overwriteUnusedRecordsLocked(Landroidx/compose/runtime/snapshots/StateObject;)Z +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->processForUnusedRecordsLocked(Landroidx/compose/runtime/snapshots/StateObject;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->readable(Landroidx/compose/runtime/snapshots/StateRecord;ILandroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/StateRecord; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->readable(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/StateObject;)Landroidx/compose/runtime/snapshots/StateRecord; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->releasePinningLocked(I)V +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->takeNewGlobalSnapshot(Landroidx/compose/runtime/snapshots/Snapshot;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->takeNewSnapshot(Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/Snapshot; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->trackPinning(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;)I +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->usedLocked(Landroidx/compose/runtime/snapshots/StateObject;)Landroidx/compose/runtime/snapshots/StateRecord; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->valid(IILandroidx/compose/runtime/snapshots/SnapshotIdSet;)Z +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->valid(Landroidx/compose/runtime/snapshots/StateRecord;ILandroidx/compose/runtime/snapshots/SnapshotIdSet;)Z +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->validateOpen(Landroidx/compose/runtime/snapshots/Snapshot;)V +HSPLandroidx/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; +Landroidx/compose/runtime/snapshots/SnapshotKt$advanceGlobalSnapshot$3; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt$advanceGlobalSnapshot$3;->()V +HSPLandroidx/compose/runtime/snapshots/SnapshotKt$advanceGlobalSnapshot$3;->()V +HSPLandroidx/compose/runtime/snapshots/SnapshotKt$advanceGlobalSnapshot$3;->invoke(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotKt$advanceGlobalSnapshot$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/snapshots/SnapshotKt$emptyLambda$1; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt$emptyLambda$1;->()V +HSPLandroidx/compose/runtime/snapshots/SnapshotKt$emptyLambda$1;->()V +HSPLandroidx/compose/runtime/snapshots/SnapshotKt$emptyLambda$1;->invoke(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotKt$emptyLambda$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/snapshots/SnapshotKt$mergedReadObserver$1; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt$mergedReadObserver$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotKt$mergedReadObserver$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt$mergedReadObserver$1;->invoke(Ljava/lang/Object;)V +Landroidx/compose/runtime/snapshots/SnapshotKt$mergedWriteObserver$1; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt$mergedWriteObserver$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotKt$mergedWriteObserver$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt$mergedWriteObserver$1;->invoke(Ljava/lang/Object;)V +Landroidx/compose/runtime/snapshots/SnapshotKt$takeNewSnapshot$1; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt$takeNewSnapshot$1;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotKt$takeNewSnapshot$1;->invoke(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/Snapshot; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt$takeNewSnapshot$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/snapshots/SnapshotMapEntrySet; +HSPLandroidx/compose/runtime/snapshots/SnapshotMapEntrySet;->(Landroidx/compose/runtime/snapshots/SnapshotStateMap;)V +Landroidx/compose/runtime/snapshots/SnapshotMapKeySet; +HSPLandroidx/compose/runtime/snapshots/SnapshotMapKeySet;->(Landroidx/compose/runtime/snapshots/SnapshotStateMap;)V +Landroidx/compose/runtime/snapshots/SnapshotMapSet; +HSPLandroidx/compose/runtime/snapshots/SnapshotMapSet;->(Landroidx/compose/runtime/snapshots/SnapshotStateMap;)V +Landroidx/compose/runtime/snapshots/SnapshotMapValueSet; +HSPLandroidx/compose/runtime/snapshots/SnapshotMapValueSet;->(Landroidx/compose/runtime/snapshots/SnapshotStateMap;)V +Landroidx/compose/runtime/snapshots/SnapshotMutableState; +Landroidx/compose/runtime/snapshots/SnapshotStateList; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->()V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->()V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->add(Ljava/lang/Object;)Z +HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->addAll(Ljava/util/Collection;)Z +HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->contains(Ljava/lang/Object;)Z +HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->get(I)Ljava/lang/Object; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->getFirstStateRecord()Landroidx/compose/runtime/snapshots/StateRecord; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->getModification$runtime_release()I +HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->getReadable$runtime_release()Landroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->getSize()I +HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->isEmpty()Z +HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->iterator()Ljava/util/Iterator; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->listIterator()Ljava/util/ListIterator; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->prependStateRecord(Landroidx/compose/runtime/snapshots/StateRecord;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->remove(I)Ljava/lang/Object; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->remove(Ljava/lang/Object;)Z +HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->removeAt(I)Ljava/lang/Object; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->set(ILjava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->size()I +Landroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;->(Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;->assign(Landroidx/compose/runtime/snapshots/StateRecord;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;->create()Landroidx/compose/runtime/snapshots/StateRecord; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;->getList$runtime_release()Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;->getModification$runtime_release()I +HSPLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;->setList$runtime_release(Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;->setModification$runtime_release(I)V +Landroidx/compose/runtime/snapshots/SnapshotStateList$addAll$1; +Landroidx/compose/runtime/snapshots/SnapshotStateList$retainAll$1; +Landroidx/compose/runtime/snapshots/SnapshotStateListKt; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateListKt;->()V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateListKt;->access$getSync$p()Ljava/lang/Object; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateListKt;->access$validateRange(II)V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateListKt;->validateRange(II)V +Landroidx/compose/runtime/snapshots/SnapshotStateMap; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateMap;->()V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateMap;->()V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateMap;->get(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateMap;->getFirstStateRecord()Landroidx/compose/runtime/snapshots/StateRecord; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateMap;->getReadable$runtime_release()Landroidx/compose/runtime/snapshots/SnapshotStateMap$StateMapStateRecord; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/snapshots/SnapshotStateMap$StateMapStateRecord; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateMap$StateMapStateRecord;->(Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateMap$StateMapStateRecord;->getMap$runtime_release()Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateMap$StateMapStateRecord;->getModification$runtime_release()I +HSPLandroidx/compose/runtime/snapshots/SnapshotStateMap$StateMapStateRecord;->setMap$runtime_release(Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateMap$StateMapStateRecord;->setModification$runtime_release(I)V +Landroidx/compose/runtime/snapshots/SnapshotStateMapKt; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateMapKt;->()V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateMapKt;->access$getSync$p()Ljava/lang/Object; +Landroidx/compose/runtime/snapshots/SnapshotStateObserver; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->()V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$addChanges(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;Ljava/util/Set;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$drainChanges(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)Z +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$getCurrentMap$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$getObservedScopeMaps$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)Landroidx/compose/runtime/collection/MutableVector; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$getSendingNotifications$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)Z +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$isPaused$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)Z +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$sendNotifications(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$setSendingNotifications$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;Z)V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->addChanges(Ljava/util/Set;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->clearIf(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->drainChanges()Z +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->ensureMap(Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->observeReads(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->removeChanges()Ljava/util/Set; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->sendNotifications()V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->start()V +Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->access$getDeriveStateScopeCount$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;)I +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->access$setDeriveStateScopeCount$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;I)V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->clearObsoleteStateReads(Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->getOnChanged()Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->notifyInvalidatedScopes()V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->observe(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->recordInvalidation(Ljava/util/Set;)Z +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->recordRead(Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->recordRead(Ljava/lang/Object;ILjava/lang/Object;Landroidx/compose/runtime/collection/IdentityArrayIntMap;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->removeObservation(Ljava/lang/Object;Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->removeScopeIf(Lkotlin/jvm/functions/Function1;)V +Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap$derivedStateObserver$1; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap$derivedStateObserver$1;->(Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap$derivedStateObserver$1;->done(Landroidx/compose/runtime/DerivedState;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap$derivedStateObserver$1;->start(Landroidx/compose/runtime/DerivedState;)V +Landroidx/compose/runtime/snapshots/SnapshotStateObserver$applyObserver$1; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$applyObserver$1;->(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$applyObserver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$applyObserver$1;->invoke(Ljava/util/Set;Landroidx/compose/runtime/snapshots/Snapshot;)V +Landroidx/compose/runtime/snapshots/SnapshotStateObserver$readObserver$1; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$readObserver$1;->(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$readObserver$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$readObserver$1;->invoke(Ljava/lang/Object;)V +Landroidx/compose/runtime/snapshots/SnapshotStateObserver$sendNotifications$1; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$sendNotifications$1;->(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$sendNotifications$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$sendNotifications$1;->invoke()V +Landroidx/compose/runtime/snapshots/SnapshotWeakSet; +HSPLandroidx/compose/runtime/snapshots/SnapshotWeakSet;->()V +HSPLandroidx/compose/runtime/snapshots/SnapshotWeakSet;->add(Ljava/lang/Object;)Z +PLandroidx/compose/runtime/snapshots/SnapshotWeakSet;->getHashes$runtime_release()[I +HSPLandroidx/compose/runtime/snapshots/SnapshotWeakSet;->getSize$runtime_release()I +PLandroidx/compose/runtime/snapshots/SnapshotWeakSet;->getValues$runtime_release()[Landroidx/compose/runtime/WeakReference; +PLandroidx/compose/runtime/snapshots/SnapshotWeakSet;->setSize$runtime_release(I)V +Landroidx/compose/runtime/snapshots/StateListIterator; +HSPLandroidx/compose/runtime/snapshots/StateListIterator;->(Landroidx/compose/runtime/snapshots/SnapshotStateList;I)V +HSPLandroidx/compose/runtime/snapshots/StateListIterator;->hasNext()Z +HSPLandroidx/compose/runtime/snapshots/StateListIterator;->next()Ljava/lang/Object; +HSPLandroidx/compose/runtime/snapshots/StateListIterator;->remove()V +HSPLandroidx/compose/runtime/snapshots/StateListIterator;->validateModification()V +Landroidx/compose/runtime/snapshots/StateObject; +Landroidx/compose/runtime/snapshots/StateRecord; +HSPLandroidx/compose/runtime/snapshots/StateRecord;->()V +HSPLandroidx/compose/runtime/snapshots/StateRecord;->()V +HSPLandroidx/compose/runtime/snapshots/StateRecord;->getNext$runtime_release()Landroidx/compose/runtime/snapshots/StateRecord; +HSPLandroidx/compose/runtime/snapshots/StateRecord;->getSnapshotId$runtime_release()I +HSPLandroidx/compose/runtime/snapshots/StateRecord;->setNext$runtime_release(Landroidx/compose/runtime/snapshots/StateRecord;)V +HSPLandroidx/compose/runtime/snapshots/StateRecord;->setSnapshotId$runtime_release(I)V +Landroidx/compose/runtime/snapshots/SubList; +Landroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot; +HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->(Landroidx/compose/runtime/snapshots/MutableSnapshot;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;ZZ)V +HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->apply()Landroidx/compose/runtime/snapshots/SnapshotApplyResult; +HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->dispose()V +HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->getCurrentSnapshot()Landroidx/compose/runtime/snapshots/MutableSnapshot; +HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->getReadOnly()Z +HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->getWriteCount$runtime_release()I +HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->notifyObjectsInitialized$runtime_release()V +HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->recordModified$runtime_release(Landroidx/compose/runtime/snapshots/StateObject;)V +HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->setWriteCount$runtime_release(I)V +HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->takeNestedMutableSnapshot(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/MutableSnapshot; +Landroidx/compose/runtime/tooling/CompositionData; +Landroidx/compose/runtime/tooling/InspectionTablesKt; +HSPLandroidx/compose/runtime/tooling/InspectionTablesKt;->()V +HSPLandroidx/compose/runtime/tooling/InspectionTablesKt;->getLocalInspectionTables()Landroidx/compose/runtime/ProvidableCompositionLocal; +Landroidx/compose/runtime/tooling/InspectionTablesKt$LocalInspectionTables$1; +HSPLandroidx/compose/runtime/tooling/InspectionTablesKt$LocalInspectionTables$1;->()V +HSPLandroidx/compose/runtime/tooling/InspectionTablesKt$LocalInspectionTables$1;->()V +HSPLandroidx/compose/runtime/tooling/InspectionTablesKt$LocalInspectionTables$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/runtime/tooling/InspectionTablesKt$LocalInspectionTables$1;->invoke()Ljava/util/Set; +Landroidx/compose/ui/ActualKt; +HSPLandroidx/compose/ui/ActualKt;->areObjectsOfSameType(Ljava/lang/Object;Ljava/lang/Object;)Z +Landroidx/compose/ui/Alignment; +HSPLandroidx/compose/ui/Alignment;->()V +Landroidx/compose/ui/Alignment$Companion; +HSPLandroidx/compose/ui/Alignment$Companion;->()V +HSPLandroidx/compose/ui/Alignment$Companion;->()V +HSPLandroidx/compose/ui/Alignment$Companion;->getBottom()Landroidx/compose/ui/Alignment$Vertical; +HSPLandroidx/compose/ui/Alignment$Companion;->getBottomCenter()Landroidx/compose/ui/Alignment; +HSPLandroidx/compose/ui/Alignment$Companion;->getBottomEnd()Landroidx/compose/ui/Alignment; +HSPLandroidx/compose/ui/Alignment$Companion;->getCenter()Landroidx/compose/ui/Alignment; +HSPLandroidx/compose/ui/Alignment$Companion;->getCenterEnd()Landroidx/compose/ui/Alignment; +HSPLandroidx/compose/ui/Alignment$Companion;->getCenterHorizontally()Landroidx/compose/ui/Alignment$Horizontal; +HSPLandroidx/compose/ui/Alignment$Companion;->getCenterStart()Landroidx/compose/ui/Alignment; +HSPLandroidx/compose/ui/Alignment$Companion;->getCenterVertically()Landroidx/compose/ui/Alignment$Vertical; +HSPLandroidx/compose/ui/Alignment$Companion;->getEnd()Landroidx/compose/ui/Alignment$Horizontal; +HSPLandroidx/compose/ui/Alignment$Companion;->getStart()Landroidx/compose/ui/Alignment$Horizontal; +HSPLandroidx/compose/ui/Alignment$Companion;->getTop()Landroidx/compose/ui/Alignment$Vertical; +HSPLandroidx/compose/ui/Alignment$Companion;->getTopEnd()Landroidx/compose/ui/Alignment; +HSPLandroidx/compose/ui/Alignment$Companion;->getTopStart()Landroidx/compose/ui/Alignment; +Landroidx/compose/ui/Alignment$Horizontal; +Landroidx/compose/ui/Alignment$Vertical; +Landroidx/compose/ui/BiasAlignment; +HSPLandroidx/compose/ui/BiasAlignment;->()V +HSPLandroidx/compose/ui/BiasAlignment;->(FF)V +HSPLandroidx/compose/ui/BiasAlignment;->align-KFBX0sM(JJLandroidx/compose/ui/unit/LayoutDirection;)J +HSPLandroidx/compose/ui/BiasAlignment;->equals(Ljava/lang/Object;)Z +Landroidx/compose/ui/BiasAlignment$Horizontal; +HSPLandroidx/compose/ui/BiasAlignment$Horizontal;->()V +HSPLandroidx/compose/ui/BiasAlignment$Horizontal;->(F)V +HSPLandroidx/compose/ui/BiasAlignment$Horizontal;->align(IILandroidx/compose/ui/unit/LayoutDirection;)I +HSPLandroidx/compose/ui/BiasAlignment$Horizontal;->equals(Ljava/lang/Object;)Z +Landroidx/compose/ui/BiasAlignment$Vertical; +HSPLandroidx/compose/ui/BiasAlignment$Vertical;->()V +HSPLandroidx/compose/ui/BiasAlignment$Vertical;->(F)V +HSPLandroidx/compose/ui/BiasAlignment$Vertical;->align(II)I +HSPLandroidx/compose/ui/BiasAlignment$Vertical;->equals(Ljava/lang/Object;)Z +Landroidx/compose/ui/CombinedModifier; +HSPLandroidx/compose/ui/CombinedModifier;->()V +HSPLandroidx/compose/ui/CombinedModifier;->(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;)V +HSPLandroidx/compose/ui/CombinedModifier;->all(Lkotlin/jvm/functions/Function1;)Z +HSPLandroidx/compose/ui/CombinedModifier;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/CombinedModifier;->foldIn(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; +HSPLandroidx/compose/ui/CombinedModifier;->getInner$ui_release()Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/ui/CombinedModifier;->getOuter$ui_release()Landroidx/compose/ui/Modifier; +Landroidx/compose/ui/ComposedModifier; +HSPLandroidx/compose/ui/ComposedModifier;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;)V +HSPLandroidx/compose/ui/ComposedModifier;->getFactory()Lkotlin/jvm/functions/Function3; +Landroidx/compose/ui/ComposedModifierKt; +HSPLandroidx/compose/ui/ComposedModifierKt;->composed$default(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;ILjava/lang/Object;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/ui/ComposedModifierKt;->composed(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/ui/ComposedModifierKt;->materializeModifier(Landroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/ui/ComposedModifierKt;->materializeWithCompositionLocalInjectionInternal(Landroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; +Landroidx/compose/ui/ComposedModifierKt$materialize$1; +HSPLandroidx/compose/ui/ComposedModifierKt$materialize$1;->()V +HSPLandroidx/compose/ui/ComposedModifierKt$materialize$1;->()V +HSPLandroidx/compose/ui/ComposedModifierKt$materialize$1;->invoke(Landroidx/compose/ui/Modifier$Element;)Ljava/lang/Boolean; +HSPLandroidx/compose/ui/ComposedModifierKt$materialize$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/ComposedModifierKt$materialize$result$1; +HSPLandroidx/compose/ui/ComposedModifierKt$materialize$result$1;->(Landroidx/compose/runtime/Composer;)V +HSPLandroidx/compose/ui/ComposedModifierKt$materialize$result$1;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier$Element;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/ui/ComposedModifierKt$materialize$result$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/CompositionLocalMapInjectionElement; +HSPLandroidx/compose/ui/CompositionLocalMapInjectionElement;->(Landroidx/compose/runtime/CompositionLocalMap;)V +HSPLandroidx/compose/ui/CompositionLocalMapInjectionElement;->create()Landroidx/compose/ui/CompositionLocalMapInjectionNode; +HSPLandroidx/compose/ui/CompositionLocalMapInjectionElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/CompositionLocalMapInjectionElement;->equals(Ljava/lang/Object;)Z +Landroidx/compose/ui/CompositionLocalMapInjectionNode; +HSPLandroidx/compose/ui/CompositionLocalMapInjectionNode;->(Landroidx/compose/runtime/CompositionLocalMap;)V +HSPLandroidx/compose/ui/CompositionLocalMapInjectionNode;->onAttach()V +Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/ui/Modifier;->()V +HSPLandroidx/compose/ui/Modifier;->then(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; +Landroidx/compose/ui/Modifier$Companion; +HSPLandroidx/compose/ui/Modifier$Companion;->()V +HSPLandroidx/compose/ui/Modifier$Companion;->()V +HSPLandroidx/compose/ui/Modifier$Companion;->all(Lkotlin/jvm/functions/Function1;)Z +HSPLandroidx/compose/ui/Modifier$Companion;->then(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; +Landroidx/compose/ui/Modifier$Element; +HSPLandroidx/compose/ui/Modifier$Element;->all(Lkotlin/jvm/functions/Function1;)Z +HSPLandroidx/compose/ui/Modifier$Element;->foldIn(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; +Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/Modifier$Node;->()V +HSPLandroidx/compose/ui/Modifier$Node;->()V +HSPLandroidx/compose/ui/Modifier$Node;->getAggregateChildKindSet$ui_release()I +HSPLandroidx/compose/ui/Modifier$Node;->getChild$ui_release()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/Modifier$Node;->getCoordinator$ui_release()Landroidx/compose/ui/node/NodeCoordinator; +HSPLandroidx/compose/ui/Modifier$Node;->getCoroutineScope()Lkotlinx/coroutines/CoroutineScope; +HSPLandroidx/compose/ui/Modifier$Node;->getInsertedNodeAwaitingAttachForInvalidation$ui_release()Z +HSPLandroidx/compose/ui/Modifier$Node;->getKindSet$ui_release()I +HSPLandroidx/compose/ui/Modifier$Node;->getNode()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/Modifier$Node;->getOwnerScope$ui_release()Landroidx/compose/ui/node/ObserverNodeOwnerScope; +HSPLandroidx/compose/ui/Modifier$Node;->getParent$ui_release()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/Modifier$Node;->getShouldAutoInvalidate()Z +HSPLandroidx/compose/ui/Modifier$Node;->getUpdatedNodeAwaitingAttachForInvalidation$ui_release()Z +HSPLandroidx/compose/ui/Modifier$Node;->isAttached()Z +HSPLandroidx/compose/ui/Modifier$Node;->markAsAttached$ui_release()V +HSPLandroidx/compose/ui/Modifier$Node;->markAsDetached$ui_release()V +HSPLandroidx/compose/ui/Modifier$Node;->onAttach()V +HSPLandroidx/compose/ui/Modifier$Node;->onDetach()V +HSPLandroidx/compose/ui/Modifier$Node;->onReset()V +HSPLandroidx/compose/ui/Modifier$Node;->reset$ui_release()V +HSPLandroidx/compose/ui/Modifier$Node;->runAttachLifecycle$ui_release()V +HSPLandroidx/compose/ui/Modifier$Node;->runDetachLifecycle$ui_release()V +HSPLandroidx/compose/ui/Modifier$Node;->setAggregateChildKindSet$ui_release(I)V +HSPLandroidx/compose/ui/Modifier$Node;->setAsDelegateTo$ui_release(Landroidx/compose/ui/Modifier$Node;)V +HSPLandroidx/compose/ui/Modifier$Node;->setChild$ui_release(Landroidx/compose/ui/Modifier$Node;)V +HSPLandroidx/compose/ui/Modifier$Node;->setInsertedNodeAwaitingAttachForInvalidation$ui_release(Z)V +HSPLandroidx/compose/ui/Modifier$Node;->setKindSet$ui_release(I)V +HSPLandroidx/compose/ui/Modifier$Node;->setOwnerScope$ui_release(Landroidx/compose/ui/node/ObserverNodeOwnerScope;)V +HSPLandroidx/compose/ui/Modifier$Node;->setParent$ui_release(Landroidx/compose/ui/Modifier$Node;)V +HSPLandroidx/compose/ui/Modifier$Node;->setUpdatedNodeAwaitingAttachForInvalidation$ui_release(Z)V +HSPLandroidx/compose/ui/Modifier$Node;->sideEffect(Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/ui/Modifier$Node;->updateCoordinator$ui_release(Landroidx/compose/ui/node/NodeCoordinator;)V +Landroidx/compose/ui/ModifierNodeDetachedCancellationException; +HSPLandroidx/compose/ui/ModifierNodeDetachedCancellationException;->()V +HSPLandroidx/compose/ui/ModifierNodeDetachedCancellationException;->fillInStackTrace()Ljava/lang/Throwable; +Landroidx/compose/ui/MotionDurationScale; +HSPLandroidx/compose/ui/MotionDurationScale;->()V +HSPLandroidx/compose/ui/MotionDurationScale;->getKey()Lkotlin/coroutines/CoroutineContext$Key; +Landroidx/compose/ui/MotionDurationScale$DefaultImpls; +HSPLandroidx/compose/ui/MotionDurationScale$DefaultImpls;->fold(Landroidx/compose/ui/MotionDurationScale;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; +HSPLandroidx/compose/ui/MotionDurationScale$DefaultImpls;->get(Landroidx/compose/ui/MotionDurationScale;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; +HSPLandroidx/compose/ui/MotionDurationScale$DefaultImpls;->minusKey(Landroidx/compose/ui/MotionDurationScale;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext; +Landroidx/compose/ui/MotionDurationScale$Key; +HSPLandroidx/compose/ui/MotionDurationScale$Key;->()V +HSPLandroidx/compose/ui/MotionDurationScale$Key;->()V +Landroidx/compose/ui/R$id; +Landroidx/compose/ui/R$string; +Landroidx/compose/ui/ZIndexElement; +HSPLandroidx/compose/ui/ZIndexElement;->(F)V +Landroidx/compose/ui/ZIndexModifierKt; +HSPLandroidx/compose/ui/ZIndexModifierKt;->zIndex(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier; +Landroidx/compose/ui/autofill/AndroidAutofill; +HSPLandroidx/compose/ui/autofill/AndroidAutofill;->(Landroid/view/View;Landroidx/compose/ui/autofill/AutofillTree;)V +HSPLandroidx/compose/ui/autofill/AndroidAutofill;->cancelAutofillForNode(Landroidx/compose/ui/autofill/AutofillNode;)V +HSPLandroidx/compose/ui/autofill/AndroidAutofill;->getAutofillManager()Landroid/view/autofill/AutofillManager; +HSPLandroidx/compose/ui/autofill/AndroidAutofill;->getAutofillTree()Landroidx/compose/ui/autofill/AutofillTree; +HSPLandroidx/compose/ui/autofill/AndroidAutofill;->getView()Landroid/view/View; +HSPLandroidx/compose/ui/autofill/AndroidAutofill;->requestAutofillForNode(Landroidx/compose/ui/autofill/AutofillNode;)V +Landroidx/compose/ui/autofill/AndroidAutofillType_androidKt; +HSPLandroidx/compose/ui/autofill/AndroidAutofillType_androidKt;->()V +HSPLandroidx/compose/ui/autofill/AndroidAutofillType_androidKt;->getAndroidType(Landroidx/compose/ui/autofill/AutofillType;)Ljava/lang/String; +Landroidx/compose/ui/autofill/AndroidAutofill_androidKt; +HSPLandroidx/compose/ui/autofill/AndroidAutofill_androidKt;->populateViewStructure(Landroidx/compose/ui/autofill/AndroidAutofill;Landroid/view/ViewStructure;)V +Landroidx/compose/ui/autofill/Autofill; +Landroidx/compose/ui/autofill/AutofillApi23Helper; +HSPLandroidx/compose/ui/autofill/AutofillApi23Helper;->()V +HSPLandroidx/compose/ui/autofill/AutofillApi23Helper;->()V +HSPLandroidx/compose/ui/autofill/AutofillApi23Helper;->addChildCount(Landroid/view/ViewStructure;I)I +HSPLandroidx/compose/ui/autofill/AutofillApi23Helper;->newChild(Landroid/view/ViewStructure;I)Landroid/view/ViewStructure; +HSPLandroidx/compose/ui/autofill/AutofillApi23Helper;->setDimens(Landroid/view/ViewStructure;IIIIII)V +HSPLandroidx/compose/ui/autofill/AutofillApi23Helper;->setId(Landroid/view/ViewStructure;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V +Landroidx/compose/ui/autofill/AutofillApi26Helper; +HSPLandroidx/compose/ui/autofill/AutofillApi26Helper;->()V +HSPLandroidx/compose/ui/autofill/AutofillApi26Helper;->()V +HSPLandroidx/compose/ui/autofill/AutofillApi26Helper;->getAutofillId(Landroid/view/ViewStructure;)Landroid/view/autofill/AutofillId; +HSPLandroidx/compose/ui/autofill/AutofillApi26Helper;->setAutofillHints(Landroid/view/ViewStructure;[Ljava/lang/String;)V +HSPLandroidx/compose/ui/autofill/AutofillApi26Helper;->setAutofillId(Landroid/view/ViewStructure;Landroid/view/autofill/AutofillId;I)V +HSPLandroidx/compose/ui/autofill/AutofillApi26Helper;->setAutofillType(Landroid/view/ViewStructure;I)V +Landroidx/compose/ui/autofill/AutofillCallback; +HSPLandroidx/compose/ui/autofill/AutofillCallback;->()V +HSPLandroidx/compose/ui/autofill/AutofillCallback;->()V +HSPLandroidx/compose/ui/autofill/AutofillCallback;->onAutofillEvent(Landroid/view/View;II)V +HSPLandroidx/compose/ui/autofill/AutofillCallback;->register(Landroidx/compose/ui/autofill/AndroidAutofill;)V +Landroidx/compose/ui/autofill/AutofillNode; +HSPLandroidx/compose/ui/autofill/AutofillNode;->()V +HSPLandroidx/compose/ui/autofill/AutofillNode;->(Ljava/util/List;Landroidx/compose/ui/geometry/Rect;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/autofill/AutofillNode;->(Ljava/util/List;Landroidx/compose/ui/geometry/Rect;Lkotlin/jvm/functions/Function1;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/autofill/AutofillNode;->access$getPreviousId$cp()I +HSPLandroidx/compose/ui/autofill/AutofillNode;->access$setPreviousId$cp(I)V +HSPLandroidx/compose/ui/autofill/AutofillNode;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/autofill/AutofillNode;->getAutofillTypes()Ljava/util/List; +HSPLandroidx/compose/ui/autofill/AutofillNode;->getBoundingBox()Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/ui/autofill/AutofillNode;->getId()I +HSPLandroidx/compose/ui/autofill/AutofillNode;->setBoundingBox(Landroidx/compose/ui/geometry/Rect;)V +Landroidx/compose/ui/autofill/AutofillNode$Companion; +HSPLandroidx/compose/ui/autofill/AutofillNode$Companion;->()V +HSPLandroidx/compose/ui/autofill/AutofillNode$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/autofill/AutofillNode$Companion;->access$generateId(Landroidx/compose/ui/autofill/AutofillNode$Companion;)I +HSPLandroidx/compose/ui/autofill/AutofillNode$Companion;->generateId()I +Landroidx/compose/ui/autofill/AutofillTree; +HSPLandroidx/compose/ui/autofill/AutofillTree;->()V +HSPLandroidx/compose/ui/autofill/AutofillTree;->()V +HSPLandroidx/compose/ui/autofill/AutofillTree;->getChildren()Ljava/util/Map; +HSPLandroidx/compose/ui/autofill/AutofillTree;->plusAssign(Landroidx/compose/ui/autofill/AutofillNode;)V +Landroidx/compose/ui/autofill/AutofillType; +HSPLandroidx/compose/ui/autofill/AutofillType;->$values()[Landroidx/compose/ui/autofill/AutofillType; +HSPLandroidx/compose/ui/autofill/AutofillType;->()V +HSPLandroidx/compose/ui/autofill/AutofillType;->(Ljava/lang/String;I)V +Landroidx/compose/ui/draw/AlphaKt; +HSPLandroidx/compose/ui/draw/AlphaKt;->alpha(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier; +Landroidx/compose/ui/draw/BuildDrawCacheParams; +Landroidx/compose/ui/draw/CacheDrawModifierNode; +Landroidx/compose/ui/draw/CacheDrawModifierNodeImpl; +HSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->(Landroidx/compose/ui/draw/CacheDrawScope;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V +HSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->getBlock()Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->getDensity()Landroidx/compose/ui/unit/Density; +HSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection; +HSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->getOrBuildCachedDrawBlock()Landroidx/compose/ui/draw/DrawResult; +HSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->getSize-NH-jbRc()J +HSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->invalidateDrawCache()V +HSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->onMeasureResultChanged()V +Landroidx/compose/ui/draw/CacheDrawModifierNodeImpl$getOrBuildCachedDrawBlock$1$1; +HSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl$getOrBuildCachedDrawBlock$1$1;->(Landroidx/compose/ui/draw/CacheDrawModifierNodeImpl;Landroidx/compose/ui/draw/CacheDrawScope;)V +HSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl$getOrBuildCachedDrawBlock$1$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl$getOrBuildCachedDrawBlock$1$1;->invoke()V +Landroidx/compose/ui/draw/CacheDrawScope; +HSPLandroidx/compose/ui/draw/CacheDrawScope;->()V +HSPLandroidx/compose/ui/draw/CacheDrawScope;->()V +HSPLandroidx/compose/ui/draw/CacheDrawScope;->getDensity()F +HSPLandroidx/compose/ui/draw/CacheDrawScope;->getDrawResult$ui_release()Landroidx/compose/ui/draw/DrawResult; +HSPLandroidx/compose/ui/draw/CacheDrawScope;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection; +HSPLandroidx/compose/ui/draw/CacheDrawScope;->getSize-NH-jbRc()J +HSPLandroidx/compose/ui/draw/CacheDrawScope;->onDrawWithContent(Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/draw/DrawResult; +HSPLandroidx/compose/ui/draw/CacheDrawScope;->setCacheParams$ui_release(Landroidx/compose/ui/draw/BuildDrawCacheParams;)V +HSPLandroidx/compose/ui/draw/CacheDrawScope;->setDrawResult$ui_release(Landroidx/compose/ui/draw/DrawResult;)V +Landroidx/compose/ui/draw/ClipKt; +HSPLandroidx/compose/ui/draw/ClipKt;->clip(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/Shape;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/ui/draw/ClipKt;->clipToBounds(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; +Landroidx/compose/ui/draw/DrawBackgroundModifier; +HSPLandroidx/compose/ui/draw/DrawBackgroundModifier;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/draw/DrawBackgroundModifier;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V +HSPLandroidx/compose/ui/draw/DrawBackgroundModifier;->setOnDraw(Lkotlin/jvm/functions/Function1;)V +Landroidx/compose/ui/draw/DrawBehindElement; +HSPLandroidx/compose/ui/draw/DrawBehindElement;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/draw/DrawBehindElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/draw/DrawBehindElement;->create()Landroidx/compose/ui/draw/DrawBackgroundModifier; +HSPLandroidx/compose/ui/draw/DrawBehindElement;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/draw/DrawBehindElement;->update(Landroidx/compose/ui/Modifier$Node;)V +HSPLandroidx/compose/ui/draw/DrawBehindElement;->update(Landroidx/compose/ui/draw/DrawBackgroundModifier;)V +Landroidx/compose/ui/draw/DrawCacheModifier; +Landroidx/compose/ui/draw/DrawModifier; +Landroidx/compose/ui/draw/DrawModifierKt; +HSPLandroidx/compose/ui/draw/DrawModifierKt;->CacheDrawModifierNode(Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/draw/CacheDrawModifierNode; +HSPLandroidx/compose/ui/draw/DrawModifierKt;->drawBehind(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/ui/draw/DrawModifierKt;->drawWithContent(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; +Landroidx/compose/ui/draw/DrawResult; +HSPLandroidx/compose/ui/draw/DrawResult;->()V +HSPLandroidx/compose/ui/draw/DrawResult;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/draw/DrawResult;->getBlock$ui_release()Lkotlin/jvm/functions/Function1; +Landroidx/compose/ui/draw/DrawWithContentElement; +HSPLandroidx/compose/ui/draw/DrawWithContentElement;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/draw/DrawWithContentElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/draw/DrawWithContentElement;->create()Landroidx/compose/ui/draw/DrawWithContentModifier; +HSPLandroidx/compose/ui/draw/DrawWithContentElement;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/draw/DrawWithContentElement;->update(Landroidx/compose/ui/Modifier$Node;)V +HSPLandroidx/compose/ui/draw/DrawWithContentElement;->update(Landroidx/compose/ui/draw/DrawWithContentModifier;)V +Landroidx/compose/ui/draw/DrawWithContentModifier; +HSPLandroidx/compose/ui/draw/DrawWithContentModifier;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/draw/DrawWithContentModifier;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V +HSPLandroidx/compose/ui/draw/DrawWithContentModifier;->setOnDraw(Lkotlin/jvm/functions/Function1;)V +Landroidx/compose/ui/draw/EmptyBuildDrawCacheParams; +HSPLandroidx/compose/ui/draw/EmptyBuildDrawCacheParams;->()V +HSPLandroidx/compose/ui/draw/EmptyBuildDrawCacheParams;->()V +Landroidx/compose/ui/draw/PainterElement; +HSPLandroidx/compose/ui/draw/PainterElement;->(Landroidx/compose/ui/graphics/painter/Painter;ZLandroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/ColorFilter;)V +HSPLandroidx/compose/ui/draw/PainterElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/draw/PainterElement;->create()Landroidx/compose/ui/draw/PainterNode; +HSPLandroidx/compose/ui/draw/PainterElement;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/draw/PainterElement;->update(Landroidx/compose/ui/Modifier$Node;)V +HSPLandroidx/compose/ui/draw/PainterElement;->update(Landroidx/compose/ui/draw/PainterNode;)V +Landroidx/compose/ui/draw/PainterModifierKt; +HSPLandroidx/compose/ui/draw/PainterModifierKt;->paint$default(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/painter/Painter;ZLandroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/ColorFilter;ILjava/lang/Object;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/ui/draw/PainterModifierKt;->paint(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/painter/Painter;ZLandroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/ColorFilter;)Landroidx/compose/ui/Modifier; +Landroidx/compose/ui/draw/PainterNode; +HSPLandroidx/compose/ui/draw/PainterNode;->(Landroidx/compose/ui/graphics/painter/Painter;ZLandroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/ColorFilter;)V +HSPLandroidx/compose/ui/draw/PainterNode;->calculateScaledSize-E7KxVPU(J)J +HSPLandroidx/compose/ui/draw/PainterNode;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V +HSPLandroidx/compose/ui/draw/PainterNode;->getPainter()Landroidx/compose/ui/graphics/painter/Painter; +HSPLandroidx/compose/ui/draw/PainterNode;->getShouldAutoInvalidate()Z +HSPLandroidx/compose/ui/draw/PainterNode;->getSizeToIntrinsics()Z +HSPLandroidx/compose/ui/draw/PainterNode;->getUseIntrinsicSize()Z +HSPLandroidx/compose/ui/draw/PainterNode;->hasSpecifiedAndFiniteHeight-uvyYCjk(J)Z +HSPLandroidx/compose/ui/draw/PainterNode;->hasSpecifiedAndFiniteWidth-uvyYCjk(J)Z +HSPLandroidx/compose/ui/draw/PainterNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; +HSPLandroidx/compose/ui/draw/PainterNode;->modifyConstraints-ZezNO4M(J)J +HSPLandroidx/compose/ui/draw/PainterNode;->setAlignment(Landroidx/compose/ui/Alignment;)V +HSPLandroidx/compose/ui/draw/PainterNode;->setAlpha(F)V +HSPLandroidx/compose/ui/draw/PainterNode;->setColorFilter(Landroidx/compose/ui/graphics/ColorFilter;)V +HSPLandroidx/compose/ui/draw/PainterNode;->setContentScale(Landroidx/compose/ui/layout/ContentScale;)V +HSPLandroidx/compose/ui/draw/PainterNode;->setPainter(Landroidx/compose/ui/graphics/painter/Painter;)V +HSPLandroidx/compose/ui/draw/PainterNode;->setSizeToIntrinsics(Z)V +Landroidx/compose/ui/draw/PainterNode$measure$1; +HSPLandroidx/compose/ui/draw/PainterNode$measure$1;->(Landroidx/compose/ui/layout/Placeable;)V +HSPLandroidx/compose/ui/draw/PainterNode$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/ui/draw/PainterNode$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/draw/ShadowKt; +HSPLandroidx/compose/ui/draw/ShadowKt;->shadow-s4CzXII$default(Landroidx/compose/ui/Modifier;FLandroidx/compose/ui/graphics/Shape;ZJJILjava/lang/Object;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/ui/draw/ShadowKt;->shadow-s4CzXII(Landroidx/compose/ui/Modifier;FLandroidx/compose/ui/graphics/Shape;ZJJ)Landroidx/compose/ui/Modifier; +Landroidx/compose/ui/focus/CustomDestinationResult; +HSPLandroidx/compose/ui/focus/CustomDestinationResult;->$values()[Landroidx/compose/ui/focus/CustomDestinationResult; +HSPLandroidx/compose/ui/focus/CustomDestinationResult;->()V +HSPLandroidx/compose/ui/focus/CustomDestinationResult;->(Ljava/lang/String;I)V +HSPLandroidx/compose/ui/focus/CustomDestinationResult;->values()[Landroidx/compose/ui/focus/CustomDestinationResult; +Landroidx/compose/ui/focus/FocusChangedElement; +HSPLandroidx/compose/ui/focus/FocusChangedElement;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/focus/FocusChangedElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/focus/FocusChangedElement;->create()Landroidx/compose/ui/focus/FocusChangedNode; +HSPLandroidx/compose/ui/focus/FocusChangedElement;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/focus/FocusChangedElement;->update(Landroidx/compose/ui/Modifier$Node;)V +HSPLandroidx/compose/ui/focus/FocusChangedElement;->update(Landroidx/compose/ui/focus/FocusChangedNode;)V +Landroidx/compose/ui/focus/FocusChangedModifierKt; +HSPLandroidx/compose/ui/focus/FocusChangedModifierKt;->onFocusChanged(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; +Landroidx/compose/ui/focus/FocusChangedNode; +HSPLandroidx/compose/ui/focus/FocusChangedNode;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/focus/FocusChangedNode;->onFocusEvent(Landroidx/compose/ui/focus/FocusState;)V +HSPLandroidx/compose/ui/focus/FocusChangedNode;->setOnFocusChanged(Lkotlin/jvm/functions/Function1;)V +Landroidx/compose/ui/focus/FocusDirection; +HSPLandroidx/compose/ui/focus/FocusDirection;->()V +HSPLandroidx/compose/ui/focus/FocusDirection;->(I)V +HSPLandroidx/compose/ui/focus/FocusDirection;->access$getEnter$cp()I +HSPLandroidx/compose/ui/focus/FocusDirection;->box-impl(I)Landroidx/compose/ui/focus/FocusDirection; +HSPLandroidx/compose/ui/focus/FocusDirection;->constructor-impl(I)I +HSPLandroidx/compose/ui/focus/FocusDirection;->unbox-impl()I +Landroidx/compose/ui/focus/FocusDirection$Companion; +HSPLandroidx/compose/ui/focus/FocusDirection$Companion;->()V +HSPLandroidx/compose/ui/focus/FocusDirection$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/focus/FocusDirection$Companion;->getEnter-dhqQ-8s()I +Landroidx/compose/ui/focus/FocusEventElement; +HSPLandroidx/compose/ui/focus/FocusEventElement;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/focus/FocusEventElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/focus/FocusEventElement;->create()Landroidx/compose/ui/focus/FocusEventNode; +HSPLandroidx/compose/ui/focus/FocusEventElement;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/focus/FocusEventElement;->update(Landroidx/compose/ui/Modifier$Node;)V +HSPLandroidx/compose/ui/focus/FocusEventElement;->update(Landroidx/compose/ui/focus/FocusEventNode;)V +Landroidx/compose/ui/focus/FocusEventModifier; +Landroidx/compose/ui/focus/FocusEventModifierKt; +HSPLandroidx/compose/ui/focus/FocusEventModifierKt;->onFocusEvent(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; +Landroidx/compose/ui/focus/FocusEventModifierNode; +Landroidx/compose/ui/focus/FocusEventModifierNodeKt; +HSPLandroidx/compose/ui/focus/FocusEventModifierNodeKt;->getFocusState(Landroidx/compose/ui/focus/FocusEventModifierNode;)Landroidx/compose/ui/focus/FocusState; +HSPLandroidx/compose/ui/focus/FocusEventModifierNodeKt;->invalidateFocusEvent(Landroidx/compose/ui/focus/FocusEventModifierNode;)V +HSPLandroidx/compose/ui/focus/FocusEventModifierNodeKt;->refreshFocusEventNodes(Landroidx/compose/ui/focus/FocusTargetNode;)V +Landroidx/compose/ui/focus/FocusEventModifierNodeKt$WhenMappings; +HSPLandroidx/compose/ui/focus/FocusEventModifierNodeKt$WhenMappings;->()V +Landroidx/compose/ui/focus/FocusEventNode; +HSPLandroidx/compose/ui/focus/FocusEventNode;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/focus/FocusEventNode;->onFocusEvent(Landroidx/compose/ui/focus/FocusState;)V +HSPLandroidx/compose/ui/focus/FocusEventNode;->setOnFocusEvent(Lkotlin/jvm/functions/Function1;)V +Landroidx/compose/ui/focus/FocusInvalidationManager; +HSPLandroidx/compose/ui/focus/FocusInvalidationManager;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/focus/FocusInvalidationManager;->access$getFocusEventNodes$p(Landroidx/compose/ui/focus/FocusInvalidationManager;)Ljava/util/Set; +HSPLandroidx/compose/ui/focus/FocusInvalidationManager;->access$getFocusPropertiesNodes$p(Landroidx/compose/ui/focus/FocusInvalidationManager;)Ljava/util/Set; +HSPLandroidx/compose/ui/focus/FocusInvalidationManager;->access$getFocusTargetNodes$p(Landroidx/compose/ui/focus/FocusInvalidationManager;)Ljava/util/Set; +HSPLandroidx/compose/ui/focus/FocusInvalidationManager;->scheduleInvalidation(Landroidx/compose/ui/focus/FocusEventModifierNode;)V +HSPLandroidx/compose/ui/focus/FocusInvalidationManager;->scheduleInvalidation(Landroidx/compose/ui/focus/FocusPropertiesModifierNode;)V +HSPLandroidx/compose/ui/focus/FocusInvalidationManager;->scheduleInvalidation(Landroidx/compose/ui/focus/FocusTargetNode;)V +HSPLandroidx/compose/ui/focus/FocusInvalidationManager;->scheduleInvalidation(Ljava/util/Set;Ljava/lang/Object;)V +Landroidx/compose/ui/focus/FocusInvalidationManager$invalidateNodes$1; +HSPLandroidx/compose/ui/focus/FocusInvalidationManager$invalidateNodes$1;->(Landroidx/compose/ui/focus/FocusInvalidationManager;)V +HSPLandroidx/compose/ui/focus/FocusInvalidationManager$invalidateNodes$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/ui/focus/FocusInvalidationManager$invalidateNodes$1;->invoke()V +Landroidx/compose/ui/focus/FocusManager; +Landroidx/compose/ui/focus/FocusModifierKt; +HSPLandroidx/compose/ui/focus/FocusModifierKt;->focusTarget(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; +Landroidx/compose/ui/focus/FocusOrderModifier; +Landroidx/compose/ui/focus/FocusOwner; +Landroidx/compose/ui/focus/FocusOwnerImpl; +HSPLandroidx/compose/ui/focus/FocusOwnerImpl;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/focus/FocusOwnerImpl;->clearFocus(ZZ)V +HSPLandroidx/compose/ui/focus/FocusOwnerImpl;->getModifier()Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/ui/focus/FocusOwnerImpl;->getRootFocusNode$ui_release()Landroidx/compose/ui/focus/FocusTargetNode; +HSPLandroidx/compose/ui/focus/FocusOwnerImpl;->scheduleInvalidation(Landroidx/compose/ui/focus/FocusEventModifierNode;)V +HSPLandroidx/compose/ui/focus/FocusOwnerImpl;->scheduleInvalidation(Landroidx/compose/ui/focus/FocusPropertiesModifierNode;)V +HSPLandroidx/compose/ui/focus/FocusOwnerImpl;->scheduleInvalidation(Landroidx/compose/ui/focus/FocusTargetNode;)V +HSPLandroidx/compose/ui/focus/FocusOwnerImpl;->setLayoutDirection(Landroidx/compose/ui/unit/LayoutDirection;)V +HSPLandroidx/compose/ui/focus/FocusOwnerImpl;->takeFocus()V +Landroidx/compose/ui/focus/FocusOwnerImpl$WhenMappings; +HSPLandroidx/compose/ui/focus/FocusOwnerImpl$WhenMappings;->()V +Landroidx/compose/ui/focus/FocusOwnerImpl$modifier$1; +HSPLandroidx/compose/ui/focus/FocusOwnerImpl$modifier$1;->(Landroidx/compose/ui/focus/FocusOwnerImpl;)V +HSPLandroidx/compose/ui/focus/FocusOwnerImpl$modifier$1;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/focus/FocusOwnerImpl$modifier$1;->create()Landroidx/compose/ui/focus/FocusTargetNode; +Landroidx/compose/ui/focus/FocusProperties; +Landroidx/compose/ui/focus/FocusPropertiesElement; +HSPLandroidx/compose/ui/focus/FocusPropertiesElement;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/focus/FocusPropertiesElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/focus/FocusPropertiesElement;->create()Landroidx/compose/ui/focus/FocusPropertiesNode; +HSPLandroidx/compose/ui/focus/FocusPropertiesElement;->equals(Ljava/lang/Object;)Z +Landroidx/compose/ui/focus/FocusPropertiesImpl; +HSPLandroidx/compose/ui/focus/FocusPropertiesImpl;->()V +HSPLandroidx/compose/ui/focus/FocusPropertiesImpl;->getCanFocus()Z +HSPLandroidx/compose/ui/focus/FocusPropertiesImpl;->getEnter()Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/ui/focus/FocusPropertiesImpl;->setCanFocus(Z)V +Landroidx/compose/ui/focus/FocusPropertiesImpl$enter$1; +HSPLandroidx/compose/ui/focus/FocusPropertiesImpl$enter$1;->()V +HSPLandroidx/compose/ui/focus/FocusPropertiesImpl$enter$1;->()V +HSPLandroidx/compose/ui/focus/FocusPropertiesImpl$enter$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/ui/focus/FocusPropertiesImpl$enter$1;->invoke-3ESFkO8(I)Landroidx/compose/ui/focus/FocusRequester; +Landroidx/compose/ui/focus/FocusPropertiesImpl$exit$1; +HSPLandroidx/compose/ui/focus/FocusPropertiesImpl$exit$1;->()V +HSPLandroidx/compose/ui/focus/FocusPropertiesImpl$exit$1;->()V +Landroidx/compose/ui/focus/FocusPropertiesKt; +HSPLandroidx/compose/ui/focus/FocusPropertiesKt;->focusProperties(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; +Landroidx/compose/ui/focus/FocusPropertiesModifierNode; +Landroidx/compose/ui/focus/FocusPropertiesModifierNodeKt; +HSPLandroidx/compose/ui/focus/FocusPropertiesModifierNodeKt;->invalidateFocusProperties(Landroidx/compose/ui/focus/FocusPropertiesModifierNode;)V +Landroidx/compose/ui/focus/FocusPropertiesNode; +HSPLandroidx/compose/ui/focus/FocusPropertiesNode;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/focus/FocusPropertiesNode;->applyFocusProperties(Landroidx/compose/ui/focus/FocusProperties;)V +Landroidx/compose/ui/focus/FocusRequester; +HSPLandroidx/compose/ui/focus/FocusRequester;->()V +HSPLandroidx/compose/ui/focus/FocusRequester;->()V +HSPLandroidx/compose/ui/focus/FocusRequester;->access$getCancel$cp()Landroidx/compose/ui/focus/FocusRequester; +HSPLandroidx/compose/ui/focus/FocusRequester;->access$getDefault$cp()Landroidx/compose/ui/focus/FocusRequester; +HSPLandroidx/compose/ui/focus/FocusRequester;->focus$ui_release()Z +HSPLandroidx/compose/ui/focus/FocusRequester;->getFocusRequesterNodes$ui_release()Landroidx/compose/runtime/collection/MutableVector; +HSPLandroidx/compose/ui/focus/FocusRequester;->requestFocus()V +Landroidx/compose/ui/focus/FocusRequester$Companion; +HSPLandroidx/compose/ui/focus/FocusRequester$Companion;->()V +HSPLandroidx/compose/ui/focus/FocusRequester$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/focus/FocusRequester$Companion;->getCancel()Landroidx/compose/ui/focus/FocusRequester; +HSPLandroidx/compose/ui/focus/FocusRequester$Companion;->getDefault()Landroidx/compose/ui/focus/FocusRequester; +Landroidx/compose/ui/focus/FocusRequesterElement; +HSPLandroidx/compose/ui/focus/FocusRequesterElement;->(Landroidx/compose/ui/focus/FocusRequester;)V +HSPLandroidx/compose/ui/focus/FocusRequesterElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/focus/FocusRequesterElement;->create()Landroidx/compose/ui/focus/FocusRequesterNode; +HSPLandroidx/compose/ui/focus/FocusRequesterElement;->equals(Ljava/lang/Object;)Z +Landroidx/compose/ui/focus/FocusRequesterModifier; +Landroidx/compose/ui/focus/FocusRequesterModifierKt; +HSPLandroidx/compose/ui/focus/FocusRequesterModifierKt;->focusRequester(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/focus/FocusRequester;)Landroidx/compose/ui/Modifier; +Landroidx/compose/ui/focus/FocusRequesterModifierNode; +Landroidx/compose/ui/focus/FocusRequesterNode; +HSPLandroidx/compose/ui/focus/FocusRequesterNode;->(Landroidx/compose/ui/focus/FocusRequester;)V +HSPLandroidx/compose/ui/focus/FocusRequesterNode;->onAttach()V +HSPLandroidx/compose/ui/focus/FocusRequesterNode;->onDetach()V +Landroidx/compose/ui/focus/FocusState; +Landroidx/compose/ui/focus/FocusStateImpl; +HSPLandroidx/compose/ui/focus/FocusStateImpl;->$values()[Landroidx/compose/ui/focus/FocusStateImpl; +HSPLandroidx/compose/ui/focus/FocusStateImpl;->()V +HSPLandroidx/compose/ui/focus/FocusStateImpl;->(Ljava/lang/String;I)V +HSPLandroidx/compose/ui/focus/FocusStateImpl;->getHasFocus()Z +HSPLandroidx/compose/ui/focus/FocusStateImpl;->isFocused()Z +HSPLandroidx/compose/ui/focus/FocusStateImpl;->values()[Landroidx/compose/ui/focus/FocusStateImpl; +Landroidx/compose/ui/focus/FocusStateImpl$WhenMappings; +HSPLandroidx/compose/ui/focus/FocusStateImpl$WhenMappings;->()V +Landroidx/compose/ui/focus/FocusTargetModifierNode; +Landroidx/compose/ui/focus/FocusTargetNode; +HSPLandroidx/compose/ui/focus/FocusTargetNode;->()V +HSPLandroidx/compose/ui/focus/FocusTargetNode;->access$isProcessingCustomEnter$p(Landroidx/compose/ui/focus/FocusTargetNode;)Z +HSPLandroidx/compose/ui/focus/FocusTargetNode;->access$setProcessingCustomEnter$p(Landroidx/compose/ui/focus/FocusTargetNode;Z)V +HSPLandroidx/compose/ui/focus/FocusTargetNode;->fetchFocusProperties$ui_release()Landroidx/compose/ui/focus/FocusProperties; +HSPLandroidx/compose/ui/focus/FocusTargetNode;->getFocusState()Landroidx/compose/ui/focus/FocusStateImpl; +HSPLandroidx/compose/ui/focus/FocusTargetNode;->invalidateFocus$ui_release()V +HSPLandroidx/compose/ui/focus/FocusTargetNode;->onReset()V +HSPLandroidx/compose/ui/focus/FocusTargetNode;->scheduleInvalidationForFocusEvents$ui_release()V +HSPLandroidx/compose/ui/focus/FocusTargetNode;->setFocusState(Landroidx/compose/ui/focus/FocusStateImpl;)V +Landroidx/compose/ui/focus/FocusTargetNode$FocusTargetElement; +HSPLandroidx/compose/ui/focus/FocusTargetNode$FocusTargetElement;->()V +HSPLandroidx/compose/ui/focus/FocusTargetNode$FocusTargetElement;->()V +HSPLandroidx/compose/ui/focus/FocusTargetNode$FocusTargetElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/focus/FocusTargetNode$FocusTargetElement;->create()Landroidx/compose/ui/focus/FocusTargetNode; +HSPLandroidx/compose/ui/focus/FocusTargetNode$FocusTargetElement;->equals(Ljava/lang/Object;)Z +Landroidx/compose/ui/focus/FocusTargetNode$WhenMappings; +HSPLandroidx/compose/ui/focus/FocusTargetNode$WhenMappings;->()V +Landroidx/compose/ui/focus/FocusTransactionsKt; +HSPLandroidx/compose/ui/focus/FocusTransactionsKt;->clearChildFocus(Landroidx/compose/ui/focus/FocusTargetNode;ZZ)Z +HSPLandroidx/compose/ui/focus/FocusTransactionsKt;->clearFocus(Landroidx/compose/ui/focus/FocusTargetNode;ZZ)Z +HSPLandroidx/compose/ui/focus/FocusTransactionsKt;->grantFocus(Landroidx/compose/ui/focus/FocusTargetNode;)Z +HSPLandroidx/compose/ui/focus/FocusTransactionsKt;->performCustomEnter-Mxy_nc0(Landroidx/compose/ui/focus/FocusTargetNode;I)Landroidx/compose/ui/focus/CustomDestinationResult; +HSPLandroidx/compose/ui/focus/FocusTransactionsKt;->performCustomRequestFocus-Mxy_nc0(Landroidx/compose/ui/focus/FocusTargetNode;I)Landroidx/compose/ui/focus/CustomDestinationResult; +HSPLandroidx/compose/ui/focus/FocusTransactionsKt;->performRequestFocus(Landroidx/compose/ui/focus/FocusTargetNode;)Z +HSPLandroidx/compose/ui/focus/FocusTransactionsKt;->requestFocus(Landroidx/compose/ui/focus/FocusTargetNode;)Z +HSPLandroidx/compose/ui/focus/FocusTransactionsKt;->requestFocusForChild(Landroidx/compose/ui/focus/FocusTargetNode;Landroidx/compose/ui/focus/FocusTargetNode;)Z +HSPLandroidx/compose/ui/focus/FocusTransactionsKt;->requestFocusForOwner(Landroidx/compose/ui/focus/FocusTargetNode;)Z +Landroidx/compose/ui/focus/FocusTransactionsKt$WhenMappings; +HSPLandroidx/compose/ui/focus/FocusTransactionsKt$WhenMappings;->()V +Landroidx/compose/ui/focus/FocusTransactionsKt$grantFocus$1; +HSPLandroidx/compose/ui/focus/FocusTransactionsKt$grantFocus$1;->(Landroidx/compose/ui/focus/FocusTargetNode;)V +HSPLandroidx/compose/ui/focus/FocusTransactionsKt$grantFocus$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/ui/focus/FocusTransactionsKt$grantFocus$1;->invoke()V +Landroidx/compose/ui/focus/FocusTraversalKt; +HSPLandroidx/compose/ui/focus/FocusTraversalKt;->getActiveChild(Landroidx/compose/ui/focus/FocusTargetNode;)Landroidx/compose/ui/focus/FocusTargetNode; +Landroidx/compose/ui/focus/FocusTraversalKt$WhenMappings; +HSPLandroidx/compose/ui/focus/FocusTraversalKt$WhenMappings;->()V +Landroidx/compose/ui/geometry/CornerRadius; +HSPLandroidx/compose/ui/geometry/CornerRadius;->()V +HSPLandroidx/compose/ui/geometry/CornerRadius;->access$getZero$cp()J +HSPLandroidx/compose/ui/geometry/CornerRadius;->constructor-impl(J)J +HSPLandroidx/compose/ui/geometry/CornerRadius;->getX-impl(J)F +HSPLandroidx/compose/ui/geometry/CornerRadius;->getY-impl(J)F +Landroidx/compose/ui/geometry/CornerRadius$Companion; +HSPLandroidx/compose/ui/geometry/CornerRadius$Companion;->()V +HSPLandroidx/compose/ui/geometry/CornerRadius$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/geometry/CornerRadius$Companion;->getZero-kKHJgLs()J +Landroidx/compose/ui/geometry/CornerRadiusKt; +HSPLandroidx/compose/ui/geometry/CornerRadiusKt;->CornerRadius$default(FFILjava/lang/Object;)J +HSPLandroidx/compose/ui/geometry/CornerRadiusKt;->CornerRadius(FF)J +Landroidx/compose/ui/geometry/MutableRect; +HSPLandroidx/compose/ui/geometry/MutableRect;->()V +HSPLandroidx/compose/ui/geometry/MutableRect;->(FFFF)V +HSPLandroidx/compose/ui/geometry/MutableRect;->getBottom()F +HSPLandroidx/compose/ui/geometry/MutableRect;->getLeft()F +HSPLandroidx/compose/ui/geometry/MutableRect;->getRight()F +HSPLandroidx/compose/ui/geometry/MutableRect;->getTop()F +HSPLandroidx/compose/ui/geometry/MutableRect;->intersect(FFFF)V +HSPLandroidx/compose/ui/geometry/MutableRect;->isEmpty()Z +HSPLandroidx/compose/ui/geometry/MutableRect;->setBottom(F)V +HSPLandroidx/compose/ui/geometry/MutableRect;->setLeft(F)V +HSPLandroidx/compose/ui/geometry/MutableRect;->setRight(F)V +HSPLandroidx/compose/ui/geometry/MutableRect;->setTop(F)V +Landroidx/compose/ui/geometry/MutableRectKt; +HSPLandroidx/compose/ui/geometry/MutableRectKt;->toRect(Landroidx/compose/ui/geometry/MutableRect;)Landroidx/compose/ui/geometry/Rect; +Landroidx/compose/ui/geometry/Offset; +HSPLandroidx/compose/ui/geometry/Offset;->()V +HSPLandroidx/compose/ui/geometry/Offset;->(J)V +HSPLandroidx/compose/ui/geometry/Offset;->access$getInfinite$cp()J +HSPLandroidx/compose/ui/geometry/Offset;->access$getUnspecified$cp()J +HSPLandroidx/compose/ui/geometry/Offset;->access$getZero$cp()J +HSPLandroidx/compose/ui/geometry/Offset;->box-impl(J)Landroidx/compose/ui/geometry/Offset; +HSPLandroidx/compose/ui/geometry/Offset;->component1-impl(J)F +HSPLandroidx/compose/ui/geometry/Offset;->component2-impl(J)F +HSPLandroidx/compose/ui/geometry/Offset;->constructor-impl(J)J +HSPLandroidx/compose/ui/geometry/Offset;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/geometry/Offset;->equals-impl(JLjava/lang/Object;)Z +HSPLandroidx/compose/ui/geometry/Offset;->equals-impl0(JJ)Z +HSPLandroidx/compose/ui/geometry/Offset;->getDistance-impl(J)F +HSPLandroidx/compose/ui/geometry/Offset;->getX-impl(J)F +HSPLandroidx/compose/ui/geometry/Offset;->getY-impl(J)F +HSPLandroidx/compose/ui/geometry/Offset;->minus-MK-Hz9U(JJ)J +HSPLandroidx/compose/ui/geometry/Offset;->plus-MK-Hz9U(JJ)J +HSPLandroidx/compose/ui/geometry/Offset;->unaryMinus-F1C5BW0(J)J +HSPLandroidx/compose/ui/geometry/Offset;->unbox-impl()J +Landroidx/compose/ui/geometry/Offset$Companion; +HSPLandroidx/compose/ui/geometry/Offset$Companion;->()V +HSPLandroidx/compose/ui/geometry/Offset$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/geometry/Offset$Companion;->getInfinite-F1C5BW0()J +HSPLandroidx/compose/ui/geometry/Offset$Companion;->getUnspecified-F1C5BW0()J +HSPLandroidx/compose/ui/geometry/Offset$Companion;->getZero-F1C5BW0()J +Landroidx/compose/ui/geometry/OffsetKt; +HSPLandroidx/compose/ui/geometry/OffsetKt;->Offset(FF)J +HSPLandroidx/compose/ui/geometry/OffsetKt;->isFinite-k-4lQ0M(J)Z +HSPLandroidx/compose/ui/geometry/OffsetKt;->isSpecified-k-4lQ0M(J)Z +Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/ui/geometry/Rect;->()V +HSPLandroidx/compose/ui/geometry/Rect;->(FFFF)V +HSPLandroidx/compose/ui/geometry/Rect;->access$getZero$cp()Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/ui/geometry/Rect;->copy$default(Landroidx/compose/ui/geometry/Rect;FFFFILjava/lang/Object;)Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/ui/geometry/Rect;->copy(FFFF)Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/ui/geometry/Rect;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/geometry/Rect;->getBottom()F +HSPLandroidx/compose/ui/geometry/Rect;->getCenter-F1C5BW0()J +HSPLandroidx/compose/ui/geometry/Rect;->getHeight()F +HSPLandroidx/compose/ui/geometry/Rect;->getLeft()F +HSPLandroidx/compose/ui/geometry/Rect;->getRight()F +HSPLandroidx/compose/ui/geometry/Rect;->getSize-NH-jbRc()J +HSPLandroidx/compose/ui/geometry/Rect;->getTop()F +HSPLandroidx/compose/ui/geometry/Rect;->getTopLeft-F1C5BW0()J +HSPLandroidx/compose/ui/geometry/Rect;->getWidth()F +HSPLandroidx/compose/ui/geometry/Rect;->intersect(Landroidx/compose/ui/geometry/Rect;)Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/ui/geometry/Rect;->isEmpty()Z +HSPLandroidx/compose/ui/geometry/Rect;->translate-k-4lQ0M(J)Landroidx/compose/ui/geometry/Rect; +Landroidx/compose/ui/geometry/Rect$Companion; +HSPLandroidx/compose/ui/geometry/Rect$Companion;->()V +HSPLandroidx/compose/ui/geometry/Rect$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/geometry/Rect$Companion;->getZero()Landroidx/compose/ui/geometry/Rect; +Landroidx/compose/ui/geometry/RectKt; +HSPLandroidx/compose/ui/geometry/RectKt;->Rect-tz77jQw(JJ)Landroidx/compose/ui/geometry/Rect; +Landroidx/compose/ui/geometry/RoundRect; +HSPLandroidx/compose/ui/geometry/RoundRect;->()V +HSPLandroidx/compose/ui/geometry/RoundRect;->(FFFFJJJJ)V +HSPLandroidx/compose/ui/geometry/RoundRect;->(FFFFJJJJLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/geometry/RoundRect;->getBottom()F +HSPLandroidx/compose/ui/geometry/RoundRect;->getBottomLeftCornerRadius-kKHJgLs()J +HSPLandroidx/compose/ui/geometry/RoundRect;->getBottomRightCornerRadius-kKHJgLs()J +HSPLandroidx/compose/ui/geometry/RoundRect;->getHeight()F +HSPLandroidx/compose/ui/geometry/RoundRect;->getLeft()F +HSPLandroidx/compose/ui/geometry/RoundRect;->getRight()F +HSPLandroidx/compose/ui/geometry/RoundRect;->getTop()F +HSPLandroidx/compose/ui/geometry/RoundRect;->getTopLeftCornerRadius-kKHJgLs()J +HSPLandroidx/compose/ui/geometry/RoundRect;->getTopRightCornerRadius-kKHJgLs()J +HSPLandroidx/compose/ui/geometry/RoundRect;->getWidth()F +Landroidx/compose/ui/geometry/RoundRect$Companion; +HSPLandroidx/compose/ui/geometry/RoundRect$Companion;->()V +HSPLandroidx/compose/ui/geometry/RoundRect$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/geometry/RoundRectKt; +HSPLandroidx/compose/ui/geometry/RoundRectKt;->RoundRect(FFFFFF)Landroidx/compose/ui/geometry/RoundRect; +HSPLandroidx/compose/ui/geometry/RoundRectKt;->RoundRect-ZAM2FJo(Landroidx/compose/ui/geometry/Rect;JJJJ)Landroidx/compose/ui/geometry/RoundRect; +HSPLandroidx/compose/ui/geometry/RoundRectKt;->RoundRect-gG7oq9Y(FFFFJ)Landroidx/compose/ui/geometry/RoundRect; +HSPLandroidx/compose/ui/geometry/RoundRectKt;->isSimple(Landroidx/compose/ui/geometry/RoundRect;)Z +Landroidx/compose/ui/geometry/Size; +HSPLandroidx/compose/ui/geometry/Size;->()V +HSPLandroidx/compose/ui/geometry/Size;->(J)V +HSPLandroidx/compose/ui/geometry/Size;->access$getUnspecified$cp()J +HSPLandroidx/compose/ui/geometry/Size;->access$getZero$cp()J +HSPLandroidx/compose/ui/geometry/Size;->box-impl(J)Landroidx/compose/ui/geometry/Size; +HSPLandroidx/compose/ui/geometry/Size;->constructor-impl(J)J +HSPLandroidx/compose/ui/geometry/Size;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/geometry/Size;->equals-impl(JLjava/lang/Object;)Z +HSPLandroidx/compose/ui/geometry/Size;->equals-impl0(JJ)Z +HSPLandroidx/compose/ui/geometry/Size;->getHeight-impl(J)F +HSPLandroidx/compose/ui/geometry/Size;->getMinDimension-impl(J)F +HSPLandroidx/compose/ui/geometry/Size;->getWidth-impl(J)F +HSPLandroidx/compose/ui/geometry/Size;->isEmpty-impl(J)Z +HSPLandroidx/compose/ui/geometry/Size;->unbox-impl()J +Landroidx/compose/ui/geometry/Size$Companion; +HSPLandroidx/compose/ui/geometry/Size$Companion;->()V +HSPLandroidx/compose/ui/geometry/Size$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/geometry/Size$Companion;->getUnspecified-NH-jbRc()J +HSPLandroidx/compose/ui/geometry/Size$Companion;->getZero-NH-jbRc()J +Landroidx/compose/ui/geometry/SizeKt; +HSPLandroidx/compose/ui/geometry/SizeKt;->Size(FF)J +HSPLandroidx/compose/ui/geometry/SizeKt;->toRect-uvyYCjk(J)Landroidx/compose/ui/geometry/Rect; +Landroidx/compose/ui/graphics/AndroidBlendMode_androidKt; +HSPLandroidx/compose/ui/graphics/AndroidBlendMode_androidKt;->toAndroidBlendMode-s9anfk8(I)Landroid/graphics/BlendMode; +Landroidx/compose/ui/graphics/AndroidCanvas; +HSPLandroidx/compose/ui/graphics/AndroidCanvas;->()V +HSPLandroidx/compose/ui/graphics/AndroidCanvas;->concat-58bKbWc([F)V +HSPLandroidx/compose/ui/graphics/AndroidCanvas;->drawArc(FFFFFFZLandroidx/compose/ui/graphics/Paint;)V +HSPLandroidx/compose/ui/graphics/AndroidCanvas;->drawImageRect-HPBpro0(Landroidx/compose/ui/graphics/ImageBitmap;JJJJLandroidx/compose/ui/graphics/Paint;)V +HSPLandroidx/compose/ui/graphics/AndroidCanvas;->drawLine-Wko1d7g(JJLandroidx/compose/ui/graphics/Paint;)V +HSPLandroidx/compose/ui/graphics/AndroidCanvas;->drawPath(Landroidx/compose/ui/graphics/Path;Landroidx/compose/ui/graphics/Paint;)V +HSPLandroidx/compose/ui/graphics/AndroidCanvas;->drawRect(FFFFLandroidx/compose/ui/graphics/Paint;)V +HSPLandroidx/compose/ui/graphics/AndroidCanvas;->drawRoundRect(FFFFFFLandroidx/compose/ui/graphics/Paint;)V +HSPLandroidx/compose/ui/graphics/AndroidCanvas;->getInternalCanvas()Landroid/graphics/Canvas; +HSPLandroidx/compose/ui/graphics/AndroidCanvas;->restore()V +HSPLandroidx/compose/ui/graphics/AndroidCanvas;->save()V +HSPLandroidx/compose/ui/graphics/AndroidCanvas;->saveLayer(Landroidx/compose/ui/geometry/Rect;Landroidx/compose/ui/graphics/Paint;)V +HSPLandroidx/compose/ui/graphics/AndroidCanvas;->setInternalCanvas(Landroid/graphics/Canvas;)V +HSPLandroidx/compose/ui/graphics/AndroidCanvas;->translate(FF)V +Landroidx/compose/ui/graphics/AndroidCanvas_androidKt; +HSPLandroidx/compose/ui/graphics/AndroidCanvas_androidKt;->()V +HSPLandroidx/compose/ui/graphics/AndroidCanvas_androidKt;->ActualCanvas(Landroidx/compose/ui/graphics/ImageBitmap;)Landroidx/compose/ui/graphics/Canvas; +HSPLandroidx/compose/ui/graphics/AndroidCanvas_androidKt;->access$getEmptyCanvas$p()Landroid/graphics/Canvas; +HSPLandroidx/compose/ui/graphics/AndroidCanvas_androidKt;->getNativeCanvas(Landroidx/compose/ui/graphics/Canvas;)Landroid/graphics/Canvas; +Landroidx/compose/ui/graphics/AndroidColorFilter_androidKt; +HSPLandroidx/compose/ui/graphics/AndroidColorFilter_androidKt;->actualTintColorFilter-xETnrds(JI)Landroidx/compose/ui/graphics/ColorFilter; +HSPLandroidx/compose/ui/graphics/AndroidColorFilter_androidKt;->asAndroidColorFilter(Landroidx/compose/ui/graphics/ColorFilter;)Landroid/graphics/ColorFilter; +Landroidx/compose/ui/graphics/AndroidColorSpace_androidKt; +HSPLandroidx/compose/ui/graphics/AndroidColorSpace_androidKt;->toAndroidColorSpace(Landroidx/compose/ui/graphics/colorspace/ColorSpace;)Landroid/graphics/ColorSpace; +Landroidx/compose/ui/graphics/AndroidImageBitmap; +HSPLandroidx/compose/ui/graphics/AndroidImageBitmap;->(Landroid/graphics/Bitmap;)V +HSPLandroidx/compose/ui/graphics/AndroidImageBitmap;->getBitmap$ui_graphics_release()Landroid/graphics/Bitmap; +HSPLandroidx/compose/ui/graphics/AndroidImageBitmap;->getHeight()I +HSPLandroidx/compose/ui/graphics/AndroidImageBitmap;->getWidth()I +HSPLandroidx/compose/ui/graphics/AndroidImageBitmap;->prepareToDraw()V +Landroidx/compose/ui/graphics/AndroidImageBitmap_androidKt; +HSPLandroidx/compose/ui/graphics/AndroidImageBitmap_androidKt;->ActualImageBitmap-x__-hDU(IIIZLandroidx/compose/ui/graphics/colorspace/ColorSpace;)Landroidx/compose/ui/graphics/ImageBitmap; +HSPLandroidx/compose/ui/graphics/AndroidImageBitmap_androidKt;->asAndroidBitmap(Landroidx/compose/ui/graphics/ImageBitmap;)Landroid/graphics/Bitmap; +HSPLandroidx/compose/ui/graphics/AndroidImageBitmap_androidKt;->toBitmapConfig-1JJdX4A(I)Landroid/graphics/Bitmap$Config; +Landroidx/compose/ui/graphics/AndroidMatrixConversions_androidKt; +HSPLandroidx/compose/ui/graphics/AndroidMatrixConversions_androidKt;->setFrom-EL8BTi8(Landroid/graphics/Matrix;[F)V +HSPLandroidx/compose/ui/graphics/AndroidMatrixConversions_androidKt;->setFrom-tU-YjHk([FLandroid/graphics/Matrix;)V +Landroidx/compose/ui/graphics/AndroidPaint; +HSPLandroidx/compose/ui/graphics/AndroidPaint;->()V +HSPLandroidx/compose/ui/graphics/AndroidPaint;->(Landroid/graphics/Paint;)V +HSPLandroidx/compose/ui/graphics/AndroidPaint;->asFrameworkPaint()Landroid/graphics/Paint; +HSPLandroidx/compose/ui/graphics/AndroidPaint;->getAlpha()F +HSPLandroidx/compose/ui/graphics/AndroidPaint;->getBlendMode-0nO6VwU()I +HSPLandroidx/compose/ui/graphics/AndroidPaint;->getColor-0d7_KjU()J +HSPLandroidx/compose/ui/graphics/AndroidPaint;->getColorFilter()Landroidx/compose/ui/graphics/ColorFilter; +HSPLandroidx/compose/ui/graphics/AndroidPaint;->getFilterQuality-f-v9h1I()I +HSPLandroidx/compose/ui/graphics/AndroidPaint;->getPathEffect()Landroidx/compose/ui/graphics/PathEffect; +HSPLandroidx/compose/ui/graphics/AndroidPaint;->getShader()Landroid/graphics/Shader; +HSPLandroidx/compose/ui/graphics/AndroidPaint;->getStrokeCap-KaPHkGw()I +HSPLandroidx/compose/ui/graphics/AndroidPaint;->getStrokeJoin-LxFBmk8()I +HSPLandroidx/compose/ui/graphics/AndroidPaint;->getStrokeMiterLimit()F +HSPLandroidx/compose/ui/graphics/AndroidPaint;->getStrokeWidth()F +HSPLandroidx/compose/ui/graphics/AndroidPaint;->setAlpha(F)V +HSPLandroidx/compose/ui/graphics/AndroidPaint;->setAntiAlias(Z)V +HSPLandroidx/compose/ui/graphics/AndroidPaint;->setBlendMode-s9anfk8(I)V +HSPLandroidx/compose/ui/graphics/AndroidPaint;->setColor-8_81llA(J)V +HSPLandroidx/compose/ui/graphics/AndroidPaint;->setColorFilter(Landroidx/compose/ui/graphics/ColorFilter;)V +HSPLandroidx/compose/ui/graphics/AndroidPaint;->setShader(Landroid/graphics/Shader;)V +HSPLandroidx/compose/ui/graphics/AndroidPaint;->setStrokeCap-BeK7IIE(I)V +HSPLandroidx/compose/ui/graphics/AndroidPaint;->setStrokeWidth(F)V +HSPLandroidx/compose/ui/graphics/AndroidPaint;->setStyle-k9PVt8s(I)V +Landroidx/compose/ui/graphics/AndroidPaint_androidKt; +HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt;->Paint()Landroidx/compose/ui/graphics/Paint; +HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt;->asComposePaint(Landroid/graphics/Paint;)Landroidx/compose/ui/graphics/Paint; +HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt;->getNativeAlpha(Landroid/graphics/Paint;)F +HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt;->getNativeColor(Landroid/graphics/Paint;)J +HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt;->getNativeFilterQuality(Landroid/graphics/Paint;)I +HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt;->getNativeStrokeCap(Landroid/graphics/Paint;)I +HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt;->getNativeStrokeJoin(Landroid/graphics/Paint;)I +HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt;->getNativeStrokeMiterLimit(Landroid/graphics/Paint;)F +HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt;->getNativeStrokeWidth(Landroid/graphics/Paint;)F +HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt;->makeNativePaint()Landroid/graphics/Paint; +HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt;->setNativeAlpha(Landroid/graphics/Paint;F)V +HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt;->setNativeAntiAlias(Landroid/graphics/Paint;Z)V +HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt;->setNativeBlendMode-GB0RdKg(Landroid/graphics/Paint;I)V +HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt;->setNativeColor-4WTKRHQ(Landroid/graphics/Paint;J)V +HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt;->setNativeColorFilter(Landroid/graphics/Paint;Landroidx/compose/ui/graphics/ColorFilter;)V +HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt;->setNativeShader(Landroid/graphics/Paint;Landroid/graphics/Shader;)V +HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt;->setNativeStrokeCap-CSYIeUk(Landroid/graphics/Paint;I)V +HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt;->setNativeStrokeWidth(Landroid/graphics/Paint;F)V +HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt;->setNativeStyle--5YerkU(Landroid/graphics/Paint;I)V +Landroidx/compose/ui/graphics/AndroidPaint_androidKt$WhenMappings; +HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt$WhenMappings;->()V +Landroidx/compose/ui/graphics/AndroidPath; +HSPLandroidx/compose/ui/graphics/AndroidPath;->(Landroid/graphics/Path;)V +HSPLandroidx/compose/ui/graphics/AndroidPath;->(Landroid/graphics/Path;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/AndroidPath;->addRoundRect(Landroidx/compose/ui/geometry/RoundRect;)V +HSPLandroidx/compose/ui/graphics/AndroidPath;->close()V +HSPLandroidx/compose/ui/graphics/AndroidPath;->cubicTo(FFFFFF)V +HSPLandroidx/compose/ui/graphics/AndroidPath;->getFillType-Rg-k1Os()I +HSPLandroidx/compose/ui/graphics/AndroidPath;->getInternalPath()Landroid/graphics/Path; +HSPLandroidx/compose/ui/graphics/AndroidPath;->lineTo(FF)V +HSPLandroidx/compose/ui/graphics/AndroidPath;->moveTo(FF)V +HSPLandroidx/compose/ui/graphics/AndroidPath;->relativeCubicTo(FFFFFF)V +HSPLandroidx/compose/ui/graphics/AndroidPath;->relativeLineTo(FF)V +HSPLandroidx/compose/ui/graphics/AndroidPath;->relativeMoveTo(FF)V +HSPLandroidx/compose/ui/graphics/AndroidPath;->reset()V +HSPLandroidx/compose/ui/graphics/AndroidPath;->rewind()V +HSPLandroidx/compose/ui/graphics/AndroidPath;->setFillType-oQ8Xj4U(I)V +Landroidx/compose/ui/graphics/AndroidPathMeasure; +HSPLandroidx/compose/ui/graphics/AndroidPathMeasure;->(Landroid/graphics/PathMeasure;)V +HSPLandroidx/compose/ui/graphics/AndroidPathMeasure;->getLength()F +HSPLandroidx/compose/ui/graphics/AndroidPathMeasure;->getSegment(FFLandroidx/compose/ui/graphics/Path;Z)Z +HSPLandroidx/compose/ui/graphics/AndroidPathMeasure;->setPath(Landroidx/compose/ui/graphics/Path;Z)V +Landroidx/compose/ui/graphics/AndroidPathMeasure_androidKt; +HSPLandroidx/compose/ui/graphics/AndroidPathMeasure_androidKt;->PathMeasure()Landroidx/compose/ui/graphics/PathMeasure; +Landroidx/compose/ui/graphics/AndroidPath_androidKt; +HSPLandroidx/compose/ui/graphics/AndroidPath_androidKt;->Path()Landroidx/compose/ui/graphics/Path; +Landroidx/compose/ui/graphics/AndroidShader_androidKt; +HSPLandroidx/compose/ui/graphics/AndroidShader_androidKt;->ActualLinearGradientShader-VjE6UOU(JJLjava/util/List;Ljava/util/List;I)Landroid/graphics/Shader; +HSPLandroidx/compose/ui/graphics/AndroidShader_androidKt;->countTransparentColors(Ljava/util/List;)I +HSPLandroidx/compose/ui/graphics/AndroidShader_androidKt;->makeTransparentColors(Ljava/util/List;I)[I +HSPLandroidx/compose/ui/graphics/AndroidShader_androidKt;->makeTransparentStops(Ljava/util/List;Ljava/util/List;I)[F +HSPLandroidx/compose/ui/graphics/AndroidShader_androidKt;->validateColorStops(Ljava/util/List;Ljava/util/List;)V +Landroidx/compose/ui/graphics/AndroidTileMode_androidKt; +HSPLandroidx/compose/ui/graphics/AndroidTileMode_androidKt;->toAndroidTileMode-0vamqd0(I)Landroid/graphics/Shader$TileMode; +Landroidx/compose/ui/graphics/Api26Bitmap; +HSPLandroidx/compose/ui/graphics/Api26Bitmap;->()V +HSPLandroidx/compose/ui/graphics/Api26Bitmap;->()V +HSPLandroidx/compose/ui/graphics/Api26Bitmap;->createBitmap-x__-hDU$ui_graphics_release(IIIZLandroidx/compose/ui/graphics/colorspace/ColorSpace;)Landroid/graphics/Bitmap; +Landroidx/compose/ui/graphics/BlendMode; +HSPLandroidx/compose/ui/graphics/BlendMode;->()V +HSPLandroidx/compose/ui/graphics/BlendMode;->(I)V +HSPLandroidx/compose/ui/graphics/BlendMode;->access$getClear$cp()I +HSPLandroidx/compose/ui/graphics/BlendMode;->access$getDst$cp()I +HSPLandroidx/compose/ui/graphics/BlendMode;->access$getDstIn$cp()I +HSPLandroidx/compose/ui/graphics/BlendMode;->access$getDstOver$cp()I +HSPLandroidx/compose/ui/graphics/BlendMode;->access$getSrc$cp()I +HSPLandroidx/compose/ui/graphics/BlendMode;->access$getSrcIn$cp()I +HSPLandroidx/compose/ui/graphics/BlendMode;->access$getSrcOver$cp()I +HSPLandroidx/compose/ui/graphics/BlendMode;->box-impl(I)Landroidx/compose/ui/graphics/BlendMode; +HSPLandroidx/compose/ui/graphics/BlendMode;->constructor-impl(I)I +HSPLandroidx/compose/ui/graphics/BlendMode;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/graphics/BlendMode;->equals-impl(ILjava/lang/Object;)Z +HSPLandroidx/compose/ui/graphics/BlendMode;->equals-impl0(II)Z +HSPLandroidx/compose/ui/graphics/BlendMode;->hashCode-impl(I)I +HSPLandroidx/compose/ui/graphics/BlendMode;->unbox-impl()I +Landroidx/compose/ui/graphics/BlendMode$Companion; +HSPLandroidx/compose/ui/graphics/BlendMode$Companion;->()V +HSPLandroidx/compose/ui/graphics/BlendMode$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/BlendMode$Companion;->getClear-0nO6VwU()I +HSPLandroidx/compose/ui/graphics/BlendMode$Companion;->getDst-0nO6VwU()I +HSPLandroidx/compose/ui/graphics/BlendMode$Companion;->getDstIn-0nO6VwU()I +HSPLandroidx/compose/ui/graphics/BlendMode$Companion;->getDstOver-0nO6VwU()I +HSPLandroidx/compose/ui/graphics/BlendMode$Companion;->getSrc-0nO6VwU()I +HSPLandroidx/compose/ui/graphics/BlendMode$Companion;->getSrcIn-0nO6VwU()I +HSPLandroidx/compose/ui/graphics/BlendMode$Companion;->getSrcOver-0nO6VwU()I +Landroidx/compose/ui/graphics/BlendModeColorFilterHelper; +HSPLandroidx/compose/ui/graphics/BlendModeColorFilterHelper;->()V +HSPLandroidx/compose/ui/graphics/BlendModeColorFilterHelper;->()V +HSPLandroidx/compose/ui/graphics/BlendModeColorFilterHelper;->BlendModeColorFilter-xETnrds(JI)Landroid/graphics/BlendModeColorFilter; +Landroidx/compose/ui/graphics/BlockGraphicsLayerElement; +HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerElement;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerElement;->create()Landroidx/compose/ui/graphics/BlockGraphicsLayerModifier; +HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerElement;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerElement;->update(Landroidx/compose/ui/Modifier$Node;)V +HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerElement;->update(Landroidx/compose/ui/graphics/BlockGraphicsLayerModifier;)V +Landroidx/compose/ui/graphics/BlockGraphicsLayerModifier; +HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier;->getLayerBlock()Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier;->getShouldAutoInvalidate()Z +HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier;->invalidateLayerBlock()V +HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; +HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier;->setLayerBlock(Lkotlin/jvm/functions/Function1;)V +Landroidx/compose/ui/graphics/BlockGraphicsLayerModifier$measure$1; +HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier$measure$1;->(Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/graphics/BlockGraphicsLayerModifier;)V +HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/graphics/Brush; +HSPLandroidx/compose/ui/graphics/Brush;->()V +HSPLandroidx/compose/ui/graphics/Brush;->()V +HSPLandroidx/compose/ui/graphics/Brush;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/graphics/Brush$Companion; +HSPLandroidx/compose/ui/graphics/Brush$Companion;->()V +HSPLandroidx/compose/ui/graphics/Brush$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/graphics/Canvas; +Landroidx/compose/ui/graphics/CanvasHolder; +HSPLandroidx/compose/ui/graphics/CanvasHolder;->()V +HSPLandroidx/compose/ui/graphics/CanvasHolder;->getAndroidCanvas()Landroidx/compose/ui/graphics/AndroidCanvas; +Landroidx/compose/ui/graphics/CanvasKt; +HSPLandroidx/compose/ui/graphics/CanvasKt;->Canvas(Landroidx/compose/ui/graphics/ImageBitmap;)Landroidx/compose/ui/graphics/Canvas; +Landroidx/compose/ui/graphics/Color; +HSPLandroidx/compose/ui/graphics/Color;->()V +HSPLandroidx/compose/ui/graphics/Color;->(J)V +HSPLandroidx/compose/ui/graphics/Color;->access$getBlack$cp()J +HSPLandroidx/compose/ui/graphics/Color;->access$getBlue$cp()J +HSPLandroidx/compose/ui/graphics/Color;->access$getGray$cp()J +HSPLandroidx/compose/ui/graphics/Color;->access$getRed$cp()J +HSPLandroidx/compose/ui/graphics/Color;->access$getTransparent$cp()J +HSPLandroidx/compose/ui/graphics/Color;->access$getUnspecified$cp()J +HSPLandroidx/compose/ui/graphics/Color;->access$getWhite$cp()J +HSPLandroidx/compose/ui/graphics/Color;->box-impl(J)Landroidx/compose/ui/graphics/Color; +HSPLandroidx/compose/ui/graphics/Color;->component1-impl(J)F +HSPLandroidx/compose/ui/graphics/Color;->component2-impl(J)F +HSPLandroidx/compose/ui/graphics/Color;->component3-impl(J)F +HSPLandroidx/compose/ui/graphics/Color;->component4-impl(J)F +HSPLandroidx/compose/ui/graphics/Color;->constructor-impl(J)J +HSPLandroidx/compose/ui/graphics/Color;->convert-vNxB06k(JLandroidx/compose/ui/graphics/colorspace/ColorSpace;)J +HSPLandroidx/compose/ui/graphics/Color;->copy-wmQWz5c$default(JFFFFILjava/lang/Object;)J +HSPLandroidx/compose/ui/graphics/Color;->copy-wmQWz5c(JFFFF)J +HSPLandroidx/compose/ui/graphics/Color;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/graphics/Color;->equals-impl(JLjava/lang/Object;)Z +HSPLandroidx/compose/ui/graphics/Color;->equals-impl0(JJ)Z +HSPLandroidx/compose/ui/graphics/Color;->getAlpha-impl(J)F +HSPLandroidx/compose/ui/graphics/Color;->getBlue-impl(J)F +HSPLandroidx/compose/ui/graphics/Color;->getColorSpace-impl(J)Landroidx/compose/ui/graphics/colorspace/ColorSpace; +HSPLandroidx/compose/ui/graphics/Color;->getGreen-impl(J)F +HSPLandroidx/compose/ui/graphics/Color;->getRed-impl(J)F +HSPLandroidx/compose/ui/graphics/Color;->hashCode-impl(J)I +HSPLandroidx/compose/ui/graphics/Color;->unbox-impl()J +Landroidx/compose/ui/graphics/Color$Companion; +HSPLandroidx/compose/ui/graphics/Color$Companion;->()V +HSPLandroidx/compose/ui/graphics/Color$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/Color$Companion;->getBlack-0d7_KjU()J +HSPLandroidx/compose/ui/graphics/Color$Companion;->getBlue-0d7_KjU()J +HSPLandroidx/compose/ui/graphics/Color$Companion;->getGray-0d7_KjU()J +HSPLandroidx/compose/ui/graphics/Color$Companion;->getRed-0d7_KjU()J +HSPLandroidx/compose/ui/graphics/Color$Companion;->getTransparent-0d7_KjU()J +HSPLandroidx/compose/ui/graphics/Color$Companion;->getUnspecified-0d7_KjU()J +HSPLandroidx/compose/ui/graphics/Color$Companion;->getWhite-0d7_KjU()J +HSPLandroidx/compose/ui/graphics/Color$Companion;->hsv-JlNiLsg$default(Landroidx/compose/ui/graphics/Color$Companion;FFFFLandroidx/compose/ui/graphics/colorspace/Rgb;ILjava/lang/Object;)J +HSPLandroidx/compose/ui/graphics/Color$Companion;->hsv-JlNiLsg(FFFFLandroidx/compose/ui/graphics/colorspace/Rgb;)J +HSPLandroidx/compose/ui/graphics/Color$Companion;->hsvToRgbComponent(IFFF)F +Landroidx/compose/ui/graphics/ColorFilter; +HSPLandroidx/compose/ui/graphics/ColorFilter;->()V +HSPLandroidx/compose/ui/graphics/ColorFilter;->(Landroid/graphics/ColorFilter;)V +HSPLandroidx/compose/ui/graphics/ColorFilter;->getNativeColorFilter$ui_graphics_release()Landroid/graphics/ColorFilter; +Landroidx/compose/ui/graphics/ColorFilter$Companion; +HSPLandroidx/compose/ui/graphics/ColorFilter$Companion;->()V +HSPLandroidx/compose/ui/graphics/ColorFilter$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/ColorFilter$Companion;->tint-xETnrds$default(Landroidx/compose/ui/graphics/ColorFilter$Companion;JIILjava/lang/Object;)Landroidx/compose/ui/graphics/ColorFilter; +HSPLandroidx/compose/ui/graphics/ColorFilter$Companion;->tint-xETnrds(JI)Landroidx/compose/ui/graphics/ColorFilter; +Landroidx/compose/ui/graphics/ColorKt; +HSPLandroidx/compose/ui/graphics/ColorKt;->Color$default(FFFFLandroidx/compose/ui/graphics/colorspace/ColorSpace;ILjava/lang/Object;)J +HSPLandroidx/compose/ui/graphics/ColorKt;->Color$default(IIIIILjava/lang/Object;)J +HSPLandroidx/compose/ui/graphics/ColorKt;->Color(FFFFLandroidx/compose/ui/graphics/colorspace/ColorSpace;)J +HSPLandroidx/compose/ui/graphics/ColorKt;->Color(I)J +HSPLandroidx/compose/ui/graphics/ColorKt;->Color(IIII)J +HSPLandroidx/compose/ui/graphics/ColorKt;->Color(J)J +HSPLandroidx/compose/ui/graphics/ColorKt;->compositeOver--OWjLjI(JJ)J +HSPLandroidx/compose/ui/graphics/ColorKt;->lerp-jxsXWHM(JJF)J +HSPLandroidx/compose/ui/graphics/ColorKt;->luminance-8_81llA(J)F +HSPLandroidx/compose/ui/graphics/ColorKt;->saturate(F)F +HSPLandroidx/compose/ui/graphics/ColorKt;->toArgb-8_81llA(J)I +Landroidx/compose/ui/graphics/ColorProducer; +Landroidx/compose/ui/graphics/ColorSpaceVerificationHelper; +HSPLandroidx/compose/ui/graphics/ColorSpaceVerificationHelper;->()V +HSPLandroidx/compose/ui/graphics/ColorSpaceVerificationHelper;->()V +HSPLandroidx/compose/ui/graphics/ColorSpaceVerificationHelper;->androidColorSpace(Landroidx/compose/ui/graphics/colorspace/ColorSpace;)Landroid/graphics/ColorSpace; +Landroidx/compose/ui/graphics/CompositingStrategy; +HSPLandroidx/compose/ui/graphics/CompositingStrategy;->()V +HSPLandroidx/compose/ui/graphics/CompositingStrategy;->access$getAuto$cp()I +HSPLandroidx/compose/ui/graphics/CompositingStrategy;->access$getModulateAlpha$cp()I +HSPLandroidx/compose/ui/graphics/CompositingStrategy;->access$getOffscreen$cp()I +HSPLandroidx/compose/ui/graphics/CompositingStrategy;->constructor-impl(I)I +HSPLandroidx/compose/ui/graphics/CompositingStrategy;->equals-impl0(II)Z +Landroidx/compose/ui/graphics/CompositingStrategy$Companion; +HSPLandroidx/compose/ui/graphics/CompositingStrategy$Companion;->()V +HSPLandroidx/compose/ui/graphics/CompositingStrategy$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/CompositingStrategy$Companion;->getAuto--NrFUSI()I +HSPLandroidx/compose/ui/graphics/CompositingStrategy$Companion;->getModulateAlpha--NrFUSI()I +HSPLandroidx/compose/ui/graphics/CompositingStrategy$Companion;->getOffscreen--NrFUSI()I +Landroidx/compose/ui/graphics/FilterQuality; +HSPLandroidx/compose/ui/graphics/FilterQuality;->()V +HSPLandroidx/compose/ui/graphics/FilterQuality;->access$getLow$cp()I +HSPLandroidx/compose/ui/graphics/FilterQuality;->constructor-impl(I)I +HSPLandroidx/compose/ui/graphics/FilterQuality;->equals-impl0(II)Z +Landroidx/compose/ui/graphics/FilterQuality$Companion; +HSPLandroidx/compose/ui/graphics/FilterQuality$Companion;->()V +HSPLandroidx/compose/ui/graphics/FilterQuality$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/FilterQuality$Companion;->getLow-f-v9h1I()I +Landroidx/compose/ui/graphics/Float16; +HSPLandroidx/compose/ui/graphics/Float16;->()V +HSPLandroidx/compose/ui/graphics/Float16;->constructor-impl(F)S +HSPLandroidx/compose/ui/graphics/Float16;->constructor-impl(S)S +HSPLandroidx/compose/ui/graphics/Float16;->toFloat-impl(S)F +Landroidx/compose/ui/graphics/Float16$Companion; +HSPLandroidx/compose/ui/graphics/Float16$Companion;->()V +HSPLandroidx/compose/ui/graphics/Float16$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/Float16$Companion;->access$floatToHalf(Landroidx/compose/ui/graphics/Float16$Companion;F)S +HSPLandroidx/compose/ui/graphics/Float16$Companion;->floatToHalf(F)S +Landroidx/compose/ui/graphics/GraphicsLayerElement; +HSPLandroidx/compose/ui/graphics/GraphicsLayerElement;->(FFFFFFFFFFJLandroidx/compose/ui/graphics/Shape;ZLandroidx/compose/ui/graphics/RenderEffect;JJI)V +HSPLandroidx/compose/ui/graphics/GraphicsLayerElement;->(FFFFFFFFFFJLandroidx/compose/ui/graphics/Shape;ZLandroidx/compose/ui/graphics/RenderEffect;JJILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/GraphicsLayerElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/graphics/GraphicsLayerElement;->create()Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier; +HSPLandroidx/compose/ui/graphics/GraphicsLayerElement;->equals(Ljava/lang/Object;)Z +Landroidx/compose/ui/graphics/GraphicsLayerModifierKt; +HSPLandroidx/compose/ui/graphics/GraphicsLayerModifierKt;->graphicsLayer(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/ui/graphics/GraphicsLayerModifierKt;->graphicsLayer-Ap8cVGQ$default(Landroidx/compose/ui/Modifier;FFFFFFFFFFJLandroidx/compose/ui/graphics/Shape;ZLandroidx/compose/ui/graphics/RenderEffect;JJIILjava/lang/Object;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/ui/graphics/GraphicsLayerModifierKt;->graphicsLayer-Ap8cVGQ(Landroidx/compose/ui/Modifier;FFFFFFFFFFJLandroidx/compose/ui/graphics/Shape;ZLandroidx/compose/ui/graphics/RenderEffect;JJI)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/ui/graphics/GraphicsLayerModifierKt;->toolingGraphicsLayer(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; +Landroidx/compose/ui/graphics/GraphicsLayerScope; +Landroidx/compose/ui/graphics/GraphicsLayerScopeKt; +HSPLandroidx/compose/ui/graphics/GraphicsLayerScopeKt;->()V +HSPLandroidx/compose/ui/graphics/GraphicsLayerScopeKt;->getDefaultShadowColor()J +Landroidx/compose/ui/graphics/ImageBitmap; +Landroidx/compose/ui/graphics/ImageBitmapConfig; +HSPLandroidx/compose/ui/graphics/ImageBitmapConfig;->()V +HSPLandroidx/compose/ui/graphics/ImageBitmapConfig;->access$getArgb8888$cp()I +HSPLandroidx/compose/ui/graphics/ImageBitmapConfig;->constructor-impl(I)I +HSPLandroidx/compose/ui/graphics/ImageBitmapConfig;->equals-impl0(II)Z +Landroidx/compose/ui/graphics/ImageBitmapConfig$Companion; +HSPLandroidx/compose/ui/graphics/ImageBitmapConfig$Companion;->()V +HSPLandroidx/compose/ui/graphics/ImageBitmapConfig$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/ImageBitmapConfig$Companion;->getArgb8888-_sVssgQ()I +Landroidx/compose/ui/graphics/ImageBitmapKt; +HSPLandroidx/compose/ui/graphics/ImageBitmapKt;->ImageBitmap-x__-hDU$default(IIIZLandroidx/compose/ui/graphics/colorspace/ColorSpace;ILjava/lang/Object;)Landroidx/compose/ui/graphics/ImageBitmap; +HSPLandroidx/compose/ui/graphics/ImageBitmapKt;->ImageBitmap-x__-hDU(IIIZLandroidx/compose/ui/graphics/colorspace/ColorSpace;)Landroidx/compose/ui/graphics/ImageBitmap; +Landroidx/compose/ui/graphics/Matrix; +HSPLandroidx/compose/ui/graphics/Matrix;->()V +HSPLandroidx/compose/ui/graphics/Matrix;->([F)V +HSPLandroidx/compose/ui/graphics/Matrix;->box-impl([F)Landroidx/compose/ui/graphics/Matrix; +HSPLandroidx/compose/ui/graphics/Matrix;->constructor-impl$default([FILkotlin/jvm/internal/DefaultConstructorMarker;)[F +HSPLandroidx/compose/ui/graphics/Matrix;->constructor-impl([F)[F +HSPLandroidx/compose/ui/graphics/Matrix;->map-MK-Hz9U([FJ)J +HSPLandroidx/compose/ui/graphics/Matrix;->map-impl([FLandroidx/compose/ui/geometry/MutableRect;)V +HSPLandroidx/compose/ui/graphics/Matrix;->reset-impl([F)V +HSPLandroidx/compose/ui/graphics/Matrix;->rotateZ-impl([FF)V +HSPLandroidx/compose/ui/graphics/Matrix;->scale-impl([FFFF)V +HSPLandroidx/compose/ui/graphics/Matrix;->translate-impl$default([FFFFILjava/lang/Object;)V +HSPLandroidx/compose/ui/graphics/Matrix;->translate-impl([FFFF)V +HSPLandroidx/compose/ui/graphics/Matrix;->unbox-impl()[F +Landroidx/compose/ui/graphics/Matrix$Companion; +HSPLandroidx/compose/ui/graphics/Matrix$Companion;->()V +HSPLandroidx/compose/ui/graphics/Matrix$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/graphics/MatrixKt; +HSPLandroidx/compose/ui/graphics/MatrixKt;->isIdentity-58bKbWc([F)Z +Landroidx/compose/ui/graphics/Outline; +HSPLandroidx/compose/ui/graphics/Outline;->()V +HSPLandroidx/compose/ui/graphics/Outline;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/graphics/Outline$Generic; +Landroidx/compose/ui/graphics/Outline$Rectangle; +HSPLandroidx/compose/ui/graphics/Outline$Rectangle;->(Landroidx/compose/ui/geometry/Rect;)V +HSPLandroidx/compose/ui/graphics/Outline$Rectangle;->getRect()Landroidx/compose/ui/geometry/Rect; +Landroidx/compose/ui/graphics/Outline$Rounded; +HSPLandroidx/compose/ui/graphics/Outline$Rounded;->(Landroidx/compose/ui/geometry/RoundRect;)V +HSPLandroidx/compose/ui/graphics/Outline$Rounded;->getRoundRect()Landroidx/compose/ui/geometry/RoundRect; +HSPLandroidx/compose/ui/graphics/Outline$Rounded;->getRoundRectPath$ui_graphics_release()Landroidx/compose/ui/graphics/Path; +Landroidx/compose/ui/graphics/OutlineKt; +HSPLandroidx/compose/ui/graphics/OutlineKt;->access$hasSameCornerRadius(Landroidx/compose/ui/geometry/RoundRect;)Z +HSPLandroidx/compose/ui/graphics/OutlineKt;->drawOutline-wDX37Ww$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;Landroidx/compose/ui/graphics/Outline;JFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;IILjava/lang/Object;)V +HSPLandroidx/compose/ui/graphics/OutlineKt;->drawOutline-wDX37Ww(Landroidx/compose/ui/graphics/drawscope/DrawScope;Landroidx/compose/ui/graphics/Outline;JFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V +HSPLandroidx/compose/ui/graphics/OutlineKt;->hasSameCornerRadius(Landroidx/compose/ui/geometry/RoundRect;)Z +HSPLandroidx/compose/ui/graphics/OutlineKt;->size(Landroidx/compose/ui/geometry/RoundRect;)J +HSPLandroidx/compose/ui/graphics/OutlineKt;->topLeft(Landroidx/compose/ui/geometry/RoundRect;)J +Landroidx/compose/ui/graphics/Paint; +Landroidx/compose/ui/graphics/PaintingStyle; +HSPLandroidx/compose/ui/graphics/PaintingStyle;->()V +HSPLandroidx/compose/ui/graphics/PaintingStyle;->access$getFill$cp()I +HSPLandroidx/compose/ui/graphics/PaintingStyle;->access$getStroke$cp()I +HSPLandroidx/compose/ui/graphics/PaintingStyle;->constructor-impl(I)I +HSPLandroidx/compose/ui/graphics/PaintingStyle;->equals-impl0(II)Z +Landroidx/compose/ui/graphics/PaintingStyle$Companion; +HSPLandroidx/compose/ui/graphics/PaintingStyle$Companion;->()V +HSPLandroidx/compose/ui/graphics/PaintingStyle$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/PaintingStyle$Companion;->getFill-TiuSbCo()I +HSPLandroidx/compose/ui/graphics/PaintingStyle$Companion;->getStroke-TiuSbCo()I +Landroidx/compose/ui/graphics/Path; +HSPLandroidx/compose/ui/graphics/Path;->()V +Landroidx/compose/ui/graphics/Path$Companion; +HSPLandroidx/compose/ui/graphics/Path$Companion;->()V +HSPLandroidx/compose/ui/graphics/Path$Companion;->()V +Landroidx/compose/ui/graphics/PathEffect; +Landroidx/compose/ui/graphics/PathFillType; +HSPLandroidx/compose/ui/graphics/PathFillType;->()V +HSPLandroidx/compose/ui/graphics/PathFillType;->(I)V +HSPLandroidx/compose/ui/graphics/PathFillType;->access$getEvenOdd$cp()I +HSPLandroidx/compose/ui/graphics/PathFillType;->access$getNonZero$cp()I +HSPLandroidx/compose/ui/graphics/PathFillType;->box-impl(I)Landroidx/compose/ui/graphics/PathFillType; +HSPLandroidx/compose/ui/graphics/PathFillType;->constructor-impl(I)I +HSPLandroidx/compose/ui/graphics/PathFillType;->equals-impl0(II)Z +HSPLandroidx/compose/ui/graphics/PathFillType;->hashCode-impl(I)I +HSPLandroidx/compose/ui/graphics/PathFillType;->unbox-impl()I +Landroidx/compose/ui/graphics/PathFillType$Companion; +HSPLandroidx/compose/ui/graphics/PathFillType$Companion;->()V +HSPLandroidx/compose/ui/graphics/PathFillType$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/PathFillType$Companion;->getEvenOdd-Rg-k1Os()I +HSPLandroidx/compose/ui/graphics/PathFillType$Companion;->getNonZero-Rg-k1Os()I +Landroidx/compose/ui/graphics/PathMeasure; +Landroidx/compose/ui/graphics/RectangleShapeKt; +HSPLandroidx/compose/ui/graphics/RectangleShapeKt;->()V +HSPLandroidx/compose/ui/graphics/RectangleShapeKt;->getRectangleShape()Landroidx/compose/ui/graphics/Shape; +Landroidx/compose/ui/graphics/RectangleShapeKt$RectangleShape$1; +HSPLandroidx/compose/ui/graphics/RectangleShapeKt$RectangleShape$1;->()V +Landroidx/compose/ui/graphics/RenderEffect; +Landroidx/compose/ui/graphics/ReusableGraphicsLayerScope; +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->()V +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getAlpha()F +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getAmbientShadowColor-0d7_KjU()J +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getCameraDistance()F +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getClip()Z +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getCompositingStrategy--NrFUSI()I +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getDensity()F +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getRenderEffect()Landroidx/compose/ui/graphics/RenderEffect; +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getRotationX()F +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getRotationY()F +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getRotationZ()F +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getScaleX()F +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getScaleY()F +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getShadowElevation()F +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getShape()Landroidx/compose/ui/graphics/Shape; +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getSpotShadowColor-0d7_KjU()J +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getTransformOrigin-SzJe1aQ()J +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getTranslationX()F +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getTranslationY()F +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->reset()V +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setAlpha(F)V +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setAmbientShadowColor-8_81llA(J)V +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setCameraDistance(F)V +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setClip(Z)V +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setCompositingStrategy-aDBOjCE(I)V +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setGraphicsDensity$ui_release(Landroidx/compose/ui/unit/Density;)V +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setRenderEffect(Landroidx/compose/ui/graphics/RenderEffect;)V +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setRotationX(F)V +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setRotationY(F)V +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setRotationZ(F)V +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setScaleX(F)V +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setScaleY(F)V +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setShadowElevation(F)V +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setShape(Landroidx/compose/ui/graphics/Shape;)V +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setSize-uvyYCjk(J)V +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setSpotShadowColor-8_81llA(J)V +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setTransformOrigin-__ExYCQ(J)V +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setTranslationX(F)V +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setTranslationY(F)V +Landroidx/compose/ui/graphics/ShaderBrush; +Landroidx/compose/ui/graphics/ShaderKt; +HSPLandroidx/compose/ui/graphics/ShaderKt;->LinearGradientShader-VjE6UOU$default(JJLjava/util/List;Ljava/util/List;IILjava/lang/Object;)Landroid/graphics/Shader; +HSPLandroidx/compose/ui/graphics/ShaderKt;->LinearGradientShader-VjE6UOU(JJLjava/util/List;Ljava/util/List;I)Landroid/graphics/Shader; +Landroidx/compose/ui/graphics/Shadow; +HSPLandroidx/compose/ui/graphics/Shadow;->()V +HSPLandroidx/compose/ui/graphics/Shadow;->(JJF)V +HSPLandroidx/compose/ui/graphics/Shadow;->(JJFILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/Shadow;->(JJFLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/Shadow;->access$getNone$cp()Landroidx/compose/ui/graphics/Shadow; +HSPLandroidx/compose/ui/graphics/Shadow;->equals(Ljava/lang/Object;)Z +Landroidx/compose/ui/graphics/Shadow$Companion; +HSPLandroidx/compose/ui/graphics/Shadow$Companion;->()V +HSPLandroidx/compose/ui/graphics/Shadow$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/Shadow$Companion;->getNone()Landroidx/compose/ui/graphics/Shadow; +Landroidx/compose/ui/graphics/Shape; +Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier; +HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->(FFFFFFFFFFJLandroidx/compose/ui/graphics/Shape;ZLandroidx/compose/ui/graphics/RenderEffect;JJI)V +HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->(FFFFFFFFFFJLandroidx/compose/ui/graphics/Shape;ZLandroidx/compose/ui/graphics/RenderEffect;JJILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->access$getLayerBlock$p(Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;)Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getAlpha()F +HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getAmbientShadowColor-0d7_KjU()J +HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getCameraDistance()F +HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getClip()Z +HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getCompositingStrategy--NrFUSI()I +HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getRenderEffect()Landroidx/compose/ui/graphics/RenderEffect; +HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getRotationX()F +HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getRotationY()F +HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getRotationZ()F +HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getScaleX()F +HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getScaleY()F +HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getShadowElevation()F +HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getShape()Landroidx/compose/ui/graphics/Shape; +HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getSpotShadowColor-0d7_KjU()J +HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getTransformOrigin-SzJe1aQ()J +HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getTranslationX()F +HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getTranslationY()F +HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; +Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier$layerBlock$1; +HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier$layerBlock$1;->(Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;)V +HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier$layerBlock$1;->invoke(Landroidx/compose/ui/graphics/GraphicsLayerScope;)V +HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier$layerBlock$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier$measure$1; +HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier$measure$1;->(Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;)V +HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/graphics/SolidColor; +HSPLandroidx/compose/ui/graphics/SolidColor;->(J)V +HSPLandroidx/compose/ui/graphics/SolidColor;->(JLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/SolidColor;->applyTo-Pq9zytI(JLandroidx/compose/ui/graphics/Paint;F)V +HSPLandroidx/compose/ui/graphics/SolidColor;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/graphics/SolidColor;->getValue-0d7_KjU()J +HSPLandroidx/compose/ui/graphics/SolidColor;->hashCode()I +Landroidx/compose/ui/graphics/StrokeCap; +HSPLandroidx/compose/ui/graphics/StrokeCap;->()V +HSPLandroidx/compose/ui/graphics/StrokeCap;->(I)V +HSPLandroidx/compose/ui/graphics/StrokeCap;->access$getButt$cp()I +HSPLandroidx/compose/ui/graphics/StrokeCap;->access$getRound$cp()I +HSPLandroidx/compose/ui/graphics/StrokeCap;->access$getSquare$cp()I +HSPLandroidx/compose/ui/graphics/StrokeCap;->box-impl(I)Landroidx/compose/ui/graphics/StrokeCap; +HSPLandroidx/compose/ui/graphics/StrokeCap;->constructor-impl(I)I +HSPLandroidx/compose/ui/graphics/StrokeCap;->equals-impl0(II)Z +HSPLandroidx/compose/ui/graphics/StrokeCap;->hashCode-impl(I)I +HSPLandroidx/compose/ui/graphics/StrokeCap;->unbox-impl()I +Landroidx/compose/ui/graphics/StrokeCap$Companion; +HSPLandroidx/compose/ui/graphics/StrokeCap$Companion;->()V +HSPLandroidx/compose/ui/graphics/StrokeCap$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/StrokeCap$Companion;->getButt-KaPHkGw()I +HSPLandroidx/compose/ui/graphics/StrokeCap$Companion;->getRound-KaPHkGw()I +HSPLandroidx/compose/ui/graphics/StrokeCap$Companion;->getSquare-KaPHkGw()I +Landroidx/compose/ui/graphics/StrokeJoin; +HSPLandroidx/compose/ui/graphics/StrokeJoin;->()V +HSPLandroidx/compose/ui/graphics/StrokeJoin;->(I)V +HSPLandroidx/compose/ui/graphics/StrokeJoin;->access$getBevel$cp()I +HSPLandroidx/compose/ui/graphics/StrokeJoin;->access$getMiter$cp()I +HSPLandroidx/compose/ui/graphics/StrokeJoin;->box-impl(I)Landroidx/compose/ui/graphics/StrokeJoin; +HSPLandroidx/compose/ui/graphics/StrokeJoin;->constructor-impl(I)I +HSPLandroidx/compose/ui/graphics/StrokeJoin;->equals-impl0(II)Z +HSPLandroidx/compose/ui/graphics/StrokeJoin;->hashCode-impl(I)I +HSPLandroidx/compose/ui/graphics/StrokeJoin;->unbox-impl()I +Landroidx/compose/ui/graphics/StrokeJoin$Companion; +HSPLandroidx/compose/ui/graphics/StrokeJoin$Companion;->()V +HSPLandroidx/compose/ui/graphics/StrokeJoin$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/StrokeJoin$Companion;->getBevel-LxFBmk8()I +HSPLandroidx/compose/ui/graphics/StrokeJoin$Companion;->getMiter-LxFBmk8()I +Landroidx/compose/ui/graphics/TileMode; +HSPLandroidx/compose/ui/graphics/TileMode;->()V +HSPLandroidx/compose/ui/graphics/TileMode;->access$getClamp$cp()I +HSPLandroidx/compose/ui/graphics/TileMode;->constructor-impl(I)I +HSPLandroidx/compose/ui/graphics/TileMode;->equals-impl0(II)Z +Landroidx/compose/ui/graphics/TileMode$Companion; +HSPLandroidx/compose/ui/graphics/TileMode$Companion;->()V +HSPLandroidx/compose/ui/graphics/TileMode$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/TileMode$Companion;->getClamp-3opZhB0()I +Landroidx/compose/ui/graphics/TransformOrigin; +HSPLandroidx/compose/ui/graphics/TransformOrigin;->()V +HSPLandroidx/compose/ui/graphics/TransformOrigin;->(J)V +HSPLandroidx/compose/ui/graphics/TransformOrigin;->access$getCenter$cp()J +HSPLandroidx/compose/ui/graphics/TransformOrigin;->box-impl(J)Landroidx/compose/ui/graphics/TransformOrigin; +HSPLandroidx/compose/ui/graphics/TransformOrigin;->constructor-impl(J)J +HSPLandroidx/compose/ui/graphics/TransformOrigin;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/graphics/TransformOrigin;->equals-impl(JLjava/lang/Object;)Z +HSPLandroidx/compose/ui/graphics/TransformOrigin;->equals-impl0(JJ)Z +HSPLandroidx/compose/ui/graphics/TransformOrigin;->getPivotFractionX-impl(J)F +HSPLandroidx/compose/ui/graphics/TransformOrigin;->getPivotFractionY-impl(J)F +HSPLandroidx/compose/ui/graphics/TransformOrigin;->unbox-impl()J +Landroidx/compose/ui/graphics/TransformOrigin$Companion; +HSPLandroidx/compose/ui/graphics/TransformOrigin$Companion;->()V +HSPLandroidx/compose/ui/graphics/TransformOrigin$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/TransformOrigin$Companion;->getCenter-SzJe1aQ()J +Landroidx/compose/ui/graphics/TransformOriginKt; +HSPLandroidx/compose/ui/graphics/TransformOriginKt;->TransformOrigin(FF)J +Landroidx/compose/ui/graphics/WrapperVerificationHelperMethods; +HSPLandroidx/compose/ui/graphics/WrapperVerificationHelperMethods;->()V +HSPLandroidx/compose/ui/graphics/WrapperVerificationHelperMethods;->()V +HSPLandroidx/compose/ui/graphics/WrapperVerificationHelperMethods;->setBlendMode-GB0RdKg(Landroid/graphics/Paint;I)V +Landroidx/compose/ui/graphics/colorspace/Adaptation; +HSPLandroidx/compose/ui/graphics/colorspace/Adaptation;->()V +HSPLandroidx/compose/ui/graphics/colorspace/Adaptation;->([F)V +HSPLandroidx/compose/ui/graphics/colorspace/Adaptation;->([FLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/colorspace/Adaptation;->access$getBradford$cp()Landroidx/compose/ui/graphics/colorspace/Adaptation; +HSPLandroidx/compose/ui/graphics/colorspace/Adaptation;->getTransform$ui_graphics_release()[F +Landroidx/compose/ui/graphics/colorspace/Adaptation$Companion; +HSPLandroidx/compose/ui/graphics/colorspace/Adaptation$Companion;->()V +HSPLandroidx/compose/ui/graphics/colorspace/Adaptation$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/colorspace/Adaptation$Companion;->getBradford()Landroidx/compose/ui/graphics/colorspace/Adaptation; +Landroidx/compose/ui/graphics/colorspace/Adaptation$Companion$Bradford$1; +HSPLandroidx/compose/ui/graphics/colorspace/Adaptation$Companion$Bradford$1;->([F)V +Landroidx/compose/ui/graphics/colorspace/Adaptation$Companion$Ciecat02$1; +HSPLandroidx/compose/ui/graphics/colorspace/Adaptation$Companion$Ciecat02$1;->([F)V +Landroidx/compose/ui/graphics/colorspace/Adaptation$Companion$VonKries$1; +HSPLandroidx/compose/ui/graphics/colorspace/Adaptation$Companion$VonKries$1;->([F)V +Landroidx/compose/ui/graphics/colorspace/ColorModel; +HSPLandroidx/compose/ui/graphics/colorspace/ColorModel;->()V +HSPLandroidx/compose/ui/graphics/colorspace/ColorModel;->access$getLab$cp()J +HSPLandroidx/compose/ui/graphics/colorspace/ColorModel;->access$getRgb$cp()J +HSPLandroidx/compose/ui/graphics/colorspace/ColorModel;->access$getXyz$cp()J +HSPLandroidx/compose/ui/graphics/colorspace/ColorModel;->constructor-impl(J)J +HSPLandroidx/compose/ui/graphics/colorspace/ColorModel;->equals-impl0(JJ)Z +HSPLandroidx/compose/ui/graphics/colorspace/ColorModel;->getComponentCount-impl(J)I +Landroidx/compose/ui/graphics/colorspace/ColorModel$Companion; +HSPLandroidx/compose/ui/graphics/colorspace/ColorModel$Companion;->()V +HSPLandroidx/compose/ui/graphics/colorspace/ColorModel$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/colorspace/ColorModel$Companion;->getLab-xdoWZVw()J +HSPLandroidx/compose/ui/graphics/colorspace/ColorModel$Companion;->getRgb-xdoWZVw()J +HSPLandroidx/compose/ui/graphics/colorspace/ColorModel$Companion;->getXyz-xdoWZVw()J +Landroidx/compose/ui/graphics/colorspace/ColorSpace; +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->()V +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->(Ljava/lang/String;JI)V +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->(Ljava/lang/String;JILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->getComponentCount()I +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->getId$ui_graphics_release()I +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->getModel-xdoWZVw()J +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->getName()Ljava/lang/String; +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->isSrgb()Z +Landroidx/compose/ui/graphics/colorspace/ColorSpace$Companion; +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace$Companion;->()V +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/graphics/colorspace/ColorSpaceKt; +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->adapt$default(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/WhitePoint;Landroidx/compose/ui/graphics/colorspace/Adaptation;ILjava/lang/Object;)Landroidx/compose/ui/graphics/colorspace/ColorSpace; +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->adapt(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/WhitePoint;Landroidx/compose/ui/graphics/colorspace/Adaptation;)Landroidx/compose/ui/graphics/colorspace/ColorSpace; +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->chromaticAdaptation([F[F[F)[F +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->compare(Landroidx/compose/ui/graphics/colorspace/WhitePoint;Landroidx/compose/ui/graphics/colorspace/WhitePoint;)Z +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->compare([F[F)Z +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->connect-YBCOT_4$default(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;IILjava/lang/Object;)Landroidx/compose/ui/graphics/colorspace/Connector; +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->connect-YBCOT_4(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;I)Landroidx/compose/ui/graphics/colorspace/Connector; +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->inverse3x3([F)[F +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->mul3x3([F[F)[F +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->mul3x3Diag([F[F)[F +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->mul3x3Float3([F[F)[F +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->mul3x3Float3_0([FFFF)F +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->mul3x3Float3_1([FFFF)F +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->mul3x3Float3_2([FFFF)F +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->rcpResponse(DDDDDD)D +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->response(DDDDDD)D +Landroidx/compose/ui/graphics/colorspace/ColorSpaces; +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;->()V +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;->()V +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;->getColorSpacesArray$ui_graphics_release()[Landroidx/compose/ui/graphics/colorspace/ColorSpace; +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;->getNtsc1953Primaries$ui_graphics_release()[F +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;->getOklab()Landroidx/compose/ui/graphics/colorspace/ColorSpace; +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;->getSrgb()Landroidx/compose/ui/graphics/colorspace/Rgb; +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;->getSrgbPrimaries$ui_graphics_release()[F +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;->getUnspecified$ui_graphics_release()Landroidx/compose/ui/graphics/colorspace/Rgb; +Landroidx/compose/ui/graphics/colorspace/ColorSpaces$$ExternalSyntheticLambda0; +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces$$ExternalSyntheticLambda0;->()V +Landroidx/compose/ui/graphics/colorspace/ColorSpaces$$ExternalSyntheticLambda1; +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces$$ExternalSyntheticLambda1;->()V +Landroidx/compose/ui/graphics/colorspace/Connector; +HSPLandroidx/compose/ui/graphics/colorspace/Connector;->()V +HSPLandroidx/compose/ui/graphics/colorspace/Connector;->(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;I)V +HSPLandroidx/compose/ui/graphics/colorspace/Connector;->(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/colorspace/Connector;->(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;I[F)V +HSPLandroidx/compose/ui/graphics/colorspace/Connector;->(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;I[FLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/colorspace/Connector;->access$getOklabToSrgbPerceptual$cp()Landroidx/compose/ui/graphics/colorspace/Connector; +HSPLandroidx/compose/ui/graphics/colorspace/Connector;->access$getSrgbToOklabPerceptual$cp()Landroidx/compose/ui/graphics/colorspace/Connector; +HSPLandroidx/compose/ui/graphics/colorspace/Connector;->transformToColor-wmQWz5c$ui_graphics_release(FFFF)J +Landroidx/compose/ui/graphics/colorspace/Connector$Companion; +HSPLandroidx/compose/ui/graphics/colorspace/Connector$Companion;->()V +HSPLandroidx/compose/ui/graphics/colorspace/Connector$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/colorspace/Connector$Companion;->access$computeTransform-YBCOT_4(Landroidx/compose/ui/graphics/colorspace/Connector$Companion;Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;I)[F +HSPLandroidx/compose/ui/graphics/colorspace/Connector$Companion;->computeTransform-YBCOT_4(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;I)[F +HSPLandroidx/compose/ui/graphics/colorspace/Connector$Companion;->getOklabToSrgbPerceptual$ui_graphics_release()Landroidx/compose/ui/graphics/colorspace/Connector; +HSPLandroidx/compose/ui/graphics/colorspace/Connector$Companion;->getSrgbToOklabPerceptual$ui_graphics_release()Landroidx/compose/ui/graphics/colorspace/Connector; +HSPLandroidx/compose/ui/graphics/colorspace/Connector$Companion;->identity$ui_graphics_release(Landroidx/compose/ui/graphics/colorspace/ColorSpace;)Landroidx/compose/ui/graphics/colorspace/Connector; +Landroidx/compose/ui/graphics/colorspace/Connector$Companion$identity$1; +HSPLandroidx/compose/ui/graphics/colorspace/Connector$Companion$identity$1;->(Landroidx/compose/ui/graphics/colorspace/ColorSpace;I)V +Landroidx/compose/ui/graphics/colorspace/Connector$RgbConnector; +HSPLandroidx/compose/ui/graphics/colorspace/Connector$RgbConnector;->(Landroidx/compose/ui/graphics/colorspace/Rgb;Landroidx/compose/ui/graphics/colorspace/Rgb;I)V +HSPLandroidx/compose/ui/graphics/colorspace/Connector$RgbConnector;->(Landroidx/compose/ui/graphics/colorspace/Rgb;Landroidx/compose/ui/graphics/colorspace/Rgb;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/colorspace/Connector$RgbConnector;->computeTransform-YBCOT_4(Landroidx/compose/ui/graphics/colorspace/Rgb;Landroidx/compose/ui/graphics/colorspace/Rgb;I)[F +HSPLandroidx/compose/ui/graphics/colorspace/Connector$RgbConnector;->transformToColor-wmQWz5c$ui_graphics_release(FFFF)J +Landroidx/compose/ui/graphics/colorspace/DoubleFunction; +Landroidx/compose/ui/graphics/colorspace/Illuminant; +HSPLandroidx/compose/ui/graphics/colorspace/Illuminant;->()V +HSPLandroidx/compose/ui/graphics/colorspace/Illuminant;->()V +HSPLandroidx/compose/ui/graphics/colorspace/Illuminant;->getC()Landroidx/compose/ui/graphics/colorspace/WhitePoint; +HSPLandroidx/compose/ui/graphics/colorspace/Illuminant;->getD50()Landroidx/compose/ui/graphics/colorspace/WhitePoint; +HSPLandroidx/compose/ui/graphics/colorspace/Illuminant;->getD60()Landroidx/compose/ui/graphics/colorspace/WhitePoint; +HSPLandroidx/compose/ui/graphics/colorspace/Illuminant;->getD65()Landroidx/compose/ui/graphics/colorspace/WhitePoint; +Landroidx/compose/ui/graphics/colorspace/Lab; +HSPLandroidx/compose/ui/graphics/colorspace/Lab;->()V +HSPLandroidx/compose/ui/graphics/colorspace/Lab;->(Ljava/lang/String;I)V +Landroidx/compose/ui/graphics/colorspace/Lab$Companion; +HSPLandroidx/compose/ui/graphics/colorspace/Lab$Companion;->()V +HSPLandroidx/compose/ui/graphics/colorspace/Lab$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/graphics/colorspace/Oklab; +HSPLandroidx/compose/ui/graphics/colorspace/Oklab;->()V +HSPLandroidx/compose/ui/graphics/colorspace/Oklab;->(Ljava/lang/String;I)V +HSPLandroidx/compose/ui/graphics/colorspace/Oklab;->getMaxValue(I)F +HSPLandroidx/compose/ui/graphics/colorspace/Oklab;->getMinValue(I)F +HSPLandroidx/compose/ui/graphics/colorspace/Oklab;->toXy$ui_graphics_release(FFF)J +HSPLandroidx/compose/ui/graphics/colorspace/Oklab;->toZ$ui_graphics_release(FFF)F +HSPLandroidx/compose/ui/graphics/colorspace/Oklab;->xyzaToColor-JlNiLsg$ui_graphics_release(FFFFLandroidx/compose/ui/graphics/colorspace/ColorSpace;)J +Landroidx/compose/ui/graphics/colorspace/Oklab$Companion; +HSPLandroidx/compose/ui/graphics/colorspace/Oklab$Companion;->()V +HSPLandroidx/compose/ui/graphics/colorspace/Oklab$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/graphics/colorspace/RenderIntent; +HSPLandroidx/compose/ui/graphics/colorspace/RenderIntent;->()V +HSPLandroidx/compose/ui/graphics/colorspace/RenderIntent;->access$getAbsolute$cp()I +HSPLandroidx/compose/ui/graphics/colorspace/RenderIntent;->access$getPerceptual$cp()I +HSPLandroidx/compose/ui/graphics/colorspace/RenderIntent;->access$getRelative$cp()I +HSPLandroidx/compose/ui/graphics/colorspace/RenderIntent;->constructor-impl(I)I +HSPLandroidx/compose/ui/graphics/colorspace/RenderIntent;->equals-impl0(II)Z +Landroidx/compose/ui/graphics/colorspace/RenderIntent$Companion; +HSPLandroidx/compose/ui/graphics/colorspace/RenderIntent$Companion;->()V +HSPLandroidx/compose/ui/graphics/colorspace/RenderIntent$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/colorspace/RenderIntent$Companion;->getAbsolute-uksYyKA()I +HSPLandroidx/compose/ui/graphics/colorspace/RenderIntent$Companion;->getPerceptual-uksYyKA()I +HSPLandroidx/compose/ui/graphics/colorspace/RenderIntent$Companion;->getRelative-uksYyKA()I +Landroidx/compose/ui/graphics/colorspace/Rgb; +HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->$r8$lambda$FANKyyW7TMwi4gnihl1LqxbkU6k(Landroidx/compose/ui/graphics/colorspace/Rgb;D)D +HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->$r8$lambda$G8Pyx7Z9bMrnDjgEiQ7pXGTZEzg(Landroidx/compose/ui/graphics/colorspace/TransferParameters;D)D +HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->$r8$lambda$OfmTeMXzL_nayJmS5mO6N4G4DlI(Landroidx/compose/ui/graphics/colorspace/Rgb;D)D +HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->$r8$lambda$ahWovdYS5NpJ-IThda37cTda4qg(D)D +HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->$r8$lambda$q_AtDSzDu9yw5JwgrVWJo3kmlB0(Landroidx/compose/ui/graphics/colorspace/TransferParameters;D)D +HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->()V +HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->(Landroidx/compose/ui/graphics/colorspace/Rgb;[FLandroidx/compose/ui/graphics/colorspace/WhitePoint;)V +HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->(Ljava/lang/String;[FLandroidx/compose/ui/graphics/colorspace/WhitePoint;DFFI)V +HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->(Ljava/lang/String;[FLandroidx/compose/ui/graphics/colorspace/WhitePoint;Landroidx/compose/ui/graphics/colorspace/TransferParameters;I)V +HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->(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 +HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->DoubleIdentity$lambda$12(D)D +HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->_init_$lambda$6(Landroidx/compose/ui/graphics/colorspace/TransferParameters;D)D +HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->_init_$lambda$8(Landroidx/compose/ui/graphics/colorspace/TransferParameters;D)D +HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->eotfFunc$lambda$1(Landroidx/compose/ui/graphics/colorspace/Rgb;D)D +HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->getEotfFunc$ui_graphics_release()Landroidx/compose/ui/graphics/colorspace/DoubleFunction; +HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->getEotfOrig$ui_graphics_release()Landroidx/compose/ui/graphics/colorspace/DoubleFunction; +HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->getInverseTransform$ui_graphics_release()[F +HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->getMaxValue(I)F +HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->getMinValue(I)F +HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->getOetfFunc$ui_graphics_release()Landroidx/compose/ui/graphics/colorspace/DoubleFunction; +HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->getOetfOrig$ui_graphics_release()Landroidx/compose/ui/graphics/colorspace/DoubleFunction; +HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->getTransform$ui_graphics_release()[F +HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->getWhitePoint()Landroidx/compose/ui/graphics/colorspace/WhitePoint; +HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->isSrgb()Z +HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->oetfFunc$lambda$0(Landroidx/compose/ui/graphics/colorspace/Rgb;D)D +HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->toXy$ui_graphics_release(FFF)J +HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->toZ$ui_graphics_release(FFF)F +HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->xyzaToColor-JlNiLsg$ui_graphics_release(FFFFLandroidx/compose/ui/graphics/colorspace/ColorSpace;)J +Landroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda1; +HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda1;->()V +HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda1;->invoke(D)D +Landroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda11; +HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda11;->(Landroidx/compose/ui/graphics/colorspace/TransferParameters;)V +HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda11;->invoke(D)D +Landroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda2; +HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda2;->(D)V +Landroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda3; +HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda3;->(D)V +Landroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda7; +HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda7;->(Landroidx/compose/ui/graphics/colorspace/Rgb;)V +HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda7;->invoke(D)D +Landroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda8; +HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda8;->(Landroidx/compose/ui/graphics/colorspace/Rgb;)V +HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda8;->invoke(D)D +Landroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda9; +HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda9;->(Landroidx/compose/ui/graphics/colorspace/TransferParameters;)V +HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda9;->invoke(D)D +Landroidx/compose/ui/graphics/colorspace/Rgb$Companion; +HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion;->()V +HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion;->access$computeXYZMatrix(Landroidx/compose/ui/graphics/colorspace/Rgb$Companion;[FLandroidx/compose/ui/graphics/colorspace/WhitePoint;)[F +HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion;->access$isSrgb(Landroidx/compose/ui/graphics/colorspace/Rgb$Companion;[FLandroidx/compose/ui/graphics/colorspace/WhitePoint;Landroidx/compose/ui/graphics/colorspace/DoubleFunction;Landroidx/compose/ui/graphics/colorspace/DoubleFunction;FFI)Z +HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion;->access$isWideGamut(Landroidx/compose/ui/graphics/colorspace/Rgb$Companion;[FFF)Z +HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion;->access$xyPrimaries(Landroidx/compose/ui/graphics/colorspace/Rgb$Companion;[F)[F +HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion;->area([F)F +HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion;->compare(DLandroidx/compose/ui/graphics/colorspace/DoubleFunction;Landroidx/compose/ui/graphics/colorspace/DoubleFunction;)Z +HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion;->computeXYZMatrix([FLandroidx/compose/ui/graphics/colorspace/WhitePoint;)[F +HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion;->contains([F[F)Z +HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion;->cross(FFFF)F +HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion;->isSrgb([FLandroidx/compose/ui/graphics/colorspace/WhitePoint;Landroidx/compose/ui/graphics/colorspace/DoubleFunction;Landroidx/compose/ui/graphics/colorspace/DoubleFunction;FFI)Z +HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion;->isWideGamut([FFF)Z +HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion;->xyPrimaries([F)[F +Landroidx/compose/ui/graphics/colorspace/Rgb$eotf$1; +HSPLandroidx/compose/ui/graphics/colorspace/Rgb$eotf$1;->(Landroidx/compose/ui/graphics/colorspace/Rgb;)V +Landroidx/compose/ui/graphics/colorspace/Rgb$oetf$1; +HSPLandroidx/compose/ui/graphics/colorspace/Rgb$oetf$1;->(Landroidx/compose/ui/graphics/colorspace/Rgb;)V +Landroidx/compose/ui/graphics/colorspace/TransferParameters; +HSPLandroidx/compose/ui/graphics/colorspace/TransferParameters;->(DDDDDDD)V +HSPLandroidx/compose/ui/graphics/colorspace/TransferParameters;->(DDDDDDDILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/colorspace/TransferParameters;->getA()D +HSPLandroidx/compose/ui/graphics/colorspace/TransferParameters;->getB()D +HSPLandroidx/compose/ui/graphics/colorspace/TransferParameters;->getC()D +HSPLandroidx/compose/ui/graphics/colorspace/TransferParameters;->getD()D +HSPLandroidx/compose/ui/graphics/colorspace/TransferParameters;->getE()D +HSPLandroidx/compose/ui/graphics/colorspace/TransferParameters;->getF()D +HSPLandroidx/compose/ui/graphics/colorspace/TransferParameters;->getGamma()D +Landroidx/compose/ui/graphics/colorspace/WhitePoint; +HSPLandroidx/compose/ui/graphics/colorspace/WhitePoint;->(FF)V +HSPLandroidx/compose/ui/graphics/colorspace/WhitePoint;->getX()F +HSPLandroidx/compose/ui/graphics/colorspace/WhitePoint;->getY()F +HSPLandroidx/compose/ui/graphics/colorspace/WhitePoint;->toXyz$ui_graphics_release()[F +Landroidx/compose/ui/graphics/colorspace/Xyz; +HSPLandroidx/compose/ui/graphics/colorspace/Xyz;->(Ljava/lang/String;I)V +Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope; +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->()V +HSPLandroidx/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;IIILjava/lang/Object;)Landroidx/compose/ui/graphics/Paint; +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->configurePaint-2qPWKa0(JLandroidx/compose/ui/graphics/drawscope/DrawStyle;FLandroidx/compose/ui/graphics/ColorFilter;II)Landroidx/compose/ui/graphics/Paint; +HSPLandroidx/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;IIILjava/lang/Object;)Landroidx/compose/ui/graphics/Paint; +HSPLandroidx/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/Paint; +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->configureStrokePaint-ho4zsrM$default(Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope;Landroidx/compose/ui/graphics/Brush;FFIILandroidx/compose/ui/graphics/PathEffect;FLandroidx/compose/ui/graphics/ColorFilter;IIILjava/lang/Object;)Landroidx/compose/ui/graphics/Paint; +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->configureStrokePaint-ho4zsrM(Landroidx/compose/ui/graphics/Brush;FFIILandroidx/compose/ui/graphics/PathEffect;FLandroidx/compose/ui/graphics/ColorFilter;II)Landroidx/compose/ui/graphics/Paint; +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawArc-yD3GUKo(JFFZJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V +HSPLandroidx/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 +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawLine-1RTmtNc(Landroidx/compose/ui/graphics/Brush;JJFILandroidx/compose/ui/graphics/PathEffect;FLandroidx/compose/ui/graphics/ColorFilter;I)V +HSPLandroidx/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 +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawPath-LG529CI(Landroidx/compose/ui/graphics/Path;JFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawRect-n-J9OG0(JJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V +HSPLandroidx/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 +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawRoundRect-u-Aw5IA(JJJJLandroidx/compose/ui/graphics/drawscope/DrawStyle;FLandroidx/compose/ui/graphics/ColorFilter;I)V +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->getDensity()F +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->getDrawContext()Landroidx/compose/ui/graphics/drawscope/DrawContext; +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->getDrawParams()Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams; +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection; +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->modulate-5vOe2sY(JF)J +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->obtainFillPaint()Landroidx/compose/ui/graphics/Paint; +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->obtainStrokePaint()Landroidx/compose/ui/graphics/Paint; +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->selectPaint(Landroidx/compose/ui/graphics/drawscope/DrawStyle;)Landroidx/compose/ui/graphics/Paint; +Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams; +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/graphics/Canvas;J)V +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/graphics/Canvas;JILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/graphics/Canvas;JLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->component1()Landroidx/compose/ui/unit/Density; +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->component2()Landroidx/compose/ui/unit/LayoutDirection; +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->component3()Landroidx/compose/ui/graphics/Canvas; +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->component4-NH-jbRc()J +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->getCanvas()Landroidx/compose/ui/graphics/Canvas; +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->getDensity()Landroidx/compose/ui/unit/Density; +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection; +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->getSize-NH-jbRc()J +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->setCanvas(Landroidx/compose/ui/graphics/Canvas;)V +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->setDensity(Landroidx/compose/ui/unit/Density;)V +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->setLayoutDirection(Landroidx/compose/ui/unit/LayoutDirection;)V +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->setSize-uvyYCjk(J)V +Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1; +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;->(Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope;)V +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;->getCanvas()Landroidx/compose/ui/graphics/Canvas; +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;->getSize-NH-jbRc()J +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;->getTransform()Landroidx/compose/ui/graphics/drawscope/DrawTransform; +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;->setSize-uvyYCjk(J)V +Landroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt; +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt;->()V +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt;->access$asDrawTransform(Landroidx/compose/ui/graphics/drawscope/DrawContext;)Landroidx/compose/ui/graphics/drawscope/DrawTransform; +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt;->access$getDefaultDensity$p()Landroidx/compose/ui/unit/Density; +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt;->asDrawTransform(Landroidx/compose/ui/graphics/drawscope/DrawContext;)Landroidx/compose/ui/graphics/drawscope/DrawTransform; +Landroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1; +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;->(Landroidx/compose/ui/graphics/drawscope/DrawContext;)V +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;->getSize-NH-jbRc()J +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;->inset(FFFF)V +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;->transform-58bKbWc([F)V +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;->translate(FF)V +Landroidx/compose/ui/graphics/drawscope/ContentDrawScope; +Landroidx/compose/ui/graphics/drawscope/DrawContext; +Landroidx/compose/ui/graphics/drawscope/DrawScope; +HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->()V +HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawArc-yD3GUKo$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;JFFZJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;IILjava/lang/Object;)V +HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawImage-AZ2fEMs$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;Landroidx/compose/ui/graphics/ImageBitmap;JJJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;IIILjava/lang/Object;)V +HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawLine-1RTmtNc$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;Landroidx/compose/ui/graphics/Brush;JJFILandroidx/compose/ui/graphics/PathEffect;FLandroidx/compose/ui/graphics/ColorFilter;IILjava/lang/Object;)V +HSPLandroidx/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/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;IILjava/lang/Object;)V +HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawPath-LG529CI$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;Landroidx/compose/ui/graphics/Path;JFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;IILjava/lang/Object;)V +HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawRect-n-J9OG0$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;JJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;IILjava/lang/Object;)V +HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawRoundRect-ZuiqVtQ$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;Landroidx/compose/ui/graphics/Brush;JJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;IILjava/lang/Object;)V +HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawRoundRect-u-Aw5IA$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;JJJJLandroidx/compose/ui/graphics/drawscope/DrawStyle;FLandroidx/compose/ui/graphics/ColorFilter;IILjava/lang/Object;)V +HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->getSize-NH-jbRc()J +HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->offsetSize-PENXr5M(JJ)J +Landroidx/compose/ui/graphics/drawscope/DrawScope$Companion; +HSPLandroidx/compose/ui/graphics/drawscope/DrawScope$Companion;->()V +HSPLandroidx/compose/ui/graphics/drawscope/DrawScope$Companion;->()V +HSPLandroidx/compose/ui/graphics/drawscope/DrawScope$Companion;->getDefaultBlendMode-0nO6VwU()I +HSPLandroidx/compose/ui/graphics/drawscope/DrawScope$Companion;->getDefaultFilterQuality-f-v9h1I()I +Landroidx/compose/ui/graphics/drawscope/DrawStyle; +HSPLandroidx/compose/ui/graphics/drawscope/DrawStyle;->()V +HSPLandroidx/compose/ui/graphics/drawscope/DrawStyle;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/graphics/drawscope/DrawTransform; +Landroidx/compose/ui/graphics/drawscope/EmptyCanvas; +HSPLandroidx/compose/ui/graphics/drawscope/EmptyCanvas;->()V +Landroidx/compose/ui/graphics/drawscope/Fill; +HSPLandroidx/compose/ui/graphics/drawscope/Fill;->()V +HSPLandroidx/compose/ui/graphics/drawscope/Fill;->()V +Landroidx/compose/ui/graphics/drawscope/Stroke; +HSPLandroidx/compose/ui/graphics/drawscope/Stroke;->()V +HSPLandroidx/compose/ui/graphics/drawscope/Stroke;->(FFIILandroidx/compose/ui/graphics/PathEffect;)V +HSPLandroidx/compose/ui/graphics/drawscope/Stroke;->(FFIILandroidx/compose/ui/graphics/PathEffect;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/drawscope/Stroke;->(FFIILandroidx/compose/ui/graphics/PathEffect;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/drawscope/Stroke;->access$getDefaultCap$cp()I +HSPLandroidx/compose/ui/graphics/drawscope/Stroke;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/graphics/drawscope/Stroke;->getCap-KaPHkGw()I +HSPLandroidx/compose/ui/graphics/drawscope/Stroke;->getJoin-LxFBmk8()I +HSPLandroidx/compose/ui/graphics/drawscope/Stroke;->getMiter()F +HSPLandroidx/compose/ui/graphics/drawscope/Stroke;->getPathEffect()Landroidx/compose/ui/graphics/PathEffect; +HSPLandroidx/compose/ui/graphics/drawscope/Stroke;->getWidth()F +Landroidx/compose/ui/graphics/drawscope/Stroke$Companion; +HSPLandroidx/compose/ui/graphics/drawscope/Stroke$Companion;->()V +HSPLandroidx/compose/ui/graphics/drawscope/Stroke$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/drawscope/Stroke$Companion;->getDefaultCap-KaPHkGw()I +Landroidx/compose/ui/graphics/painter/Painter; +HSPLandroidx/compose/ui/graphics/painter/Painter;->()V +HSPLandroidx/compose/ui/graphics/painter/Painter;->configureAlpha(F)V +HSPLandroidx/compose/ui/graphics/painter/Painter;->configureColorFilter(Landroidx/compose/ui/graphics/ColorFilter;)V +HSPLandroidx/compose/ui/graphics/painter/Painter;->configureLayoutDirection(Landroidx/compose/ui/unit/LayoutDirection;)V +HSPLandroidx/compose/ui/graphics/painter/Painter;->draw-x_KDEd0(Landroidx/compose/ui/graphics/drawscope/DrawScope;JFLandroidx/compose/ui/graphics/ColorFilter;)V +Landroidx/compose/ui/graphics/painter/Painter$drawLambda$1; +HSPLandroidx/compose/ui/graphics/painter/Painter$drawLambda$1;->(Landroidx/compose/ui/graphics/painter/Painter;)V +Landroidx/compose/ui/graphics/vector/DrawCache; +HSPLandroidx/compose/ui/graphics/vector/DrawCache;->()V +HSPLandroidx/compose/ui/graphics/vector/DrawCache;->clear(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V +HSPLandroidx/compose/ui/graphics/vector/DrawCache;->drawCachedImage-CJJAR-o(JLandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/graphics/vector/DrawCache;->drawInto(Landroidx/compose/ui/graphics/drawscope/DrawScope;FLandroidx/compose/ui/graphics/ColorFilter;)V +Landroidx/compose/ui/graphics/vector/GroupComponent; +HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->()V +HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->draw(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V +HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->getInvalidateListener$ui_release()Lkotlin/jvm/functions/Function0; +HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->getNumChildren()I +HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->getWillClipPath()Z +HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->insertAt(ILandroidx/compose/ui/graphics/vector/VNode;)V +HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->remove(II)V +HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->setInvalidateListener$ui_release(Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->setName(Ljava/lang/String;)V +HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->setPivotX(F)V +HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->setPivotY(F)V +HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->setScaleX(F)V +HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->setScaleY(F)V +HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->updateClipPath()V +HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->updateMatrix()V +Landroidx/compose/ui/graphics/vector/ImageVector; +HSPLandroidx/compose/ui/graphics/vector/ImageVector;->()V +HSPLandroidx/compose/ui/graphics/vector/ImageVector;->(Ljava/lang/String;FFFFLandroidx/compose/ui/graphics/vector/VectorGroup;JIZ)V +HSPLandroidx/compose/ui/graphics/vector/ImageVector;->(Ljava/lang/String;FFFFLandroidx/compose/ui/graphics/vector/VectorGroup;JIZLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/vector/ImageVector;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/graphics/vector/ImageVector;->getAutoMirror()Z +HSPLandroidx/compose/ui/graphics/vector/ImageVector;->getDefaultHeight-D9Ej5fM()F +HSPLandroidx/compose/ui/graphics/vector/ImageVector;->getDefaultWidth-D9Ej5fM()F +HSPLandroidx/compose/ui/graphics/vector/ImageVector;->getName()Ljava/lang/String; +HSPLandroidx/compose/ui/graphics/vector/ImageVector;->getRoot()Landroidx/compose/ui/graphics/vector/VectorGroup; +HSPLandroidx/compose/ui/graphics/vector/ImageVector;->getTintBlendMode-0nO6VwU()I +HSPLandroidx/compose/ui/graphics/vector/ImageVector;->getTintColor-0d7_KjU()J +HSPLandroidx/compose/ui/graphics/vector/ImageVector;->getViewportHeight()F +HSPLandroidx/compose/ui/graphics/vector/ImageVector;->getViewportWidth()F +HSPLandroidx/compose/ui/graphics/vector/ImageVector;->hashCode()I +Landroidx/compose/ui/graphics/vector/ImageVector$Builder; +HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->()V +HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->(Ljava/lang/String;FFFFJIZ)V +HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->(Ljava/lang/String;FFFFJIZILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->(Ljava/lang/String;FFFFJIZLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->addPath-oIyEayM$default(Landroidx/compose/ui/graphics/vector/ImageVector$Builder;Ljava/util/List;ILjava/lang/String;Landroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/Brush;FFIIFFFFILjava/lang/Object;)Landroidx/compose/ui/graphics/vector/ImageVector$Builder; +HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->addPath-oIyEayM(Ljava/util/List;ILjava/lang/String;Landroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/Brush;FFIIFFFF)Landroidx/compose/ui/graphics/vector/ImageVector$Builder; +HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->asVectorGroup(Landroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;)Landroidx/compose/ui/graphics/vector/VectorGroup; +HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->build()Landroidx/compose/ui/graphics/vector/ImageVector; +HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->ensureNotConsumed()V +HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->getCurrentGroup()Landroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams; +Landroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams; +HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->(Ljava/lang/String;FFFFFFFLjava/util/List;Ljava/util/List;)V +HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->(Ljava/lang/String;FFFFFFFLjava/util/List;Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getChildren()Ljava/util/List; +HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getClipPathData()Ljava/util/List; +HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getName()Ljava/lang/String; +HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getPivotX()F +HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getPivotY()F +HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getRotate()F +HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getScaleX()F +HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getScaleY()F +HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getTranslationX()F +HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getTranslationY()F +Landroidx/compose/ui/graphics/vector/ImageVector$Companion; +HSPLandroidx/compose/ui/graphics/vector/ImageVector$Companion;->()V +HSPLandroidx/compose/ui/graphics/vector/ImageVector$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/graphics/vector/ImageVectorKt; +HSPLandroidx/compose/ui/graphics/vector/ImageVectorKt;->access$peek(Ljava/util/ArrayList;)Ljava/lang/Object; +HSPLandroidx/compose/ui/graphics/vector/ImageVectorKt;->access$push(Ljava/util/ArrayList;Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/graphics/vector/ImageVectorKt;->peek(Ljava/util/ArrayList;)Ljava/lang/Object; +HSPLandroidx/compose/ui/graphics/vector/ImageVectorKt;->push(Ljava/util/ArrayList;Ljava/lang/Object;)Z +Landroidx/compose/ui/graphics/vector/PathBuilder; +HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->()V +HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->addNode(Landroidx/compose/ui/graphics/vector/PathNode;)Landroidx/compose/ui/graphics/vector/PathBuilder; +HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->close()Landroidx/compose/ui/graphics/vector/PathBuilder; +HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->curveTo(FFFFFF)Landroidx/compose/ui/graphics/vector/PathBuilder; +HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->curveToRelative(FFFFFF)Landroidx/compose/ui/graphics/vector/PathBuilder; +HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->getNodes()Ljava/util/List; +HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->horizontalLineTo(F)Landroidx/compose/ui/graphics/vector/PathBuilder; +HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->horizontalLineToRelative(F)Landroidx/compose/ui/graphics/vector/PathBuilder; +HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->lineTo(FF)Landroidx/compose/ui/graphics/vector/PathBuilder; +HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->lineToRelative(FF)Landroidx/compose/ui/graphics/vector/PathBuilder; +HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->moveTo(FF)Landroidx/compose/ui/graphics/vector/PathBuilder; +HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->moveToRelative(FF)Landroidx/compose/ui/graphics/vector/PathBuilder; +HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->reflectiveCurveTo(FFFF)Landroidx/compose/ui/graphics/vector/PathBuilder; +HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->reflectiveCurveToRelative(FFFF)Landroidx/compose/ui/graphics/vector/PathBuilder; +HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->verticalLineTo(F)Landroidx/compose/ui/graphics/vector/PathBuilder; +HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->verticalLineToRelative(F)Landroidx/compose/ui/graphics/vector/PathBuilder; +Landroidx/compose/ui/graphics/vector/PathComponent; +HSPLandroidx/compose/ui/graphics/vector/PathComponent;->()V +HSPLandroidx/compose/ui/graphics/vector/PathComponent;->draw(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V +HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setFill(Landroidx/compose/ui/graphics/Brush;)V +HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setFillAlpha(F)V +HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setName(Ljava/lang/String;)V +HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setPathData(Ljava/util/List;)V +HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setPathFillType-oQ8Xj4U(I)V +HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setStroke(Landroidx/compose/ui/graphics/Brush;)V +HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setStrokeAlpha(F)V +HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setStrokeLineCap-BeK7IIE(I)V +HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setStrokeLineJoin-Ww9F2mQ(I)V +HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setStrokeLineMiter(F)V +HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setStrokeLineWidth(F)V +HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setTrimPathEnd(F)V +HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setTrimPathOffset(F)V +HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setTrimPathStart(F)V +HSPLandroidx/compose/ui/graphics/vector/PathComponent;->updatePath()V +HSPLandroidx/compose/ui/graphics/vector/PathComponent;->updateRenderPath()V +Landroidx/compose/ui/graphics/vector/PathComponent$pathMeasure$2; +HSPLandroidx/compose/ui/graphics/vector/PathComponent$pathMeasure$2;->()V +HSPLandroidx/compose/ui/graphics/vector/PathComponent$pathMeasure$2;->()V +Landroidx/compose/ui/graphics/vector/PathNode; +HSPLandroidx/compose/ui/graphics/vector/PathNode;->(ZZ)V +HSPLandroidx/compose/ui/graphics/vector/PathNode;->(ZZILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/vector/PathNode;->(ZZLkotlin/jvm/internal/DefaultConstructorMarker;)V +PLandroidx/compose/ui/graphics/vector/PathNode;->isCurve()Z +Landroidx/compose/ui/graphics/vector/PathNode$Close; +HSPLandroidx/compose/ui/graphics/vector/PathNode$Close;->()V +HSPLandroidx/compose/ui/graphics/vector/PathNode$Close;->()V +Landroidx/compose/ui/graphics/vector/PathNode$CurveTo; +HSPLandroidx/compose/ui/graphics/vector/PathNode$CurveTo;->(FFFFFF)V +HSPLandroidx/compose/ui/graphics/vector/PathNode$CurveTo;->getX1()F +HSPLandroidx/compose/ui/graphics/vector/PathNode$CurveTo;->getX2()F +HSPLandroidx/compose/ui/graphics/vector/PathNode$CurveTo;->getX3()F +HSPLandroidx/compose/ui/graphics/vector/PathNode$CurveTo;->getY1()F +HSPLandroidx/compose/ui/graphics/vector/PathNode$CurveTo;->getY2()F +HSPLandroidx/compose/ui/graphics/vector/PathNode$CurveTo;->getY3()F +HSPLandroidx/compose/ui/graphics/vector/PathNode$CurveTo;->hashCode()I +Landroidx/compose/ui/graphics/vector/PathNode$HorizontalTo; +HSPLandroidx/compose/ui/graphics/vector/PathNode$HorizontalTo;->(F)V +HSPLandroidx/compose/ui/graphics/vector/PathNode$HorizontalTo;->getX()F +Landroidx/compose/ui/graphics/vector/PathNode$LineTo; +HSPLandroidx/compose/ui/graphics/vector/PathNode$LineTo;->(FF)V +HSPLandroidx/compose/ui/graphics/vector/PathNode$LineTo;->getX()F +HSPLandroidx/compose/ui/graphics/vector/PathNode$LineTo;->getY()F +HSPLandroidx/compose/ui/graphics/vector/PathNode$LineTo;->hashCode()I +Landroidx/compose/ui/graphics/vector/PathNode$MoveTo; +HSPLandroidx/compose/ui/graphics/vector/PathNode$MoveTo;->(FF)V +HSPLandroidx/compose/ui/graphics/vector/PathNode$MoveTo;->getX()F +HSPLandroidx/compose/ui/graphics/vector/PathNode$MoveTo;->getY()F +HSPLandroidx/compose/ui/graphics/vector/PathNode$MoveTo;->hashCode()I +Landroidx/compose/ui/graphics/vector/PathNode$ReflectiveCurveTo; +HSPLandroidx/compose/ui/graphics/vector/PathNode$ReflectiveCurveTo;->(FFFF)V +PLandroidx/compose/ui/graphics/vector/PathNode$ReflectiveCurveTo;->getX1()F +PLandroidx/compose/ui/graphics/vector/PathNode$ReflectiveCurveTo;->getX2()F +PLandroidx/compose/ui/graphics/vector/PathNode$ReflectiveCurveTo;->getY1()F +PLandroidx/compose/ui/graphics/vector/PathNode$ReflectiveCurveTo;->getY2()F +Landroidx/compose/ui/graphics/vector/PathNode$RelativeCurveTo; +HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeCurveTo;->(FFFFFF)V +HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeCurveTo;->getDx1()F +HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeCurveTo;->getDx2()F +HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeCurveTo;->getDx3()F +HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeCurveTo;->getDy1()F +HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeCurveTo;->getDy2()F +HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeCurveTo;->getDy3()F +HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeCurveTo;->hashCode()I +Landroidx/compose/ui/graphics/vector/PathNode$RelativeHorizontalTo; +HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeHorizontalTo;->(F)V +HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeHorizontalTo;->getDx()F +Landroidx/compose/ui/graphics/vector/PathNode$RelativeLineTo; +HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeLineTo;->(FF)V +HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeLineTo;->getDx()F +HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeLineTo;->getDy()F +HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeLineTo;->hashCode()I +Landroidx/compose/ui/graphics/vector/PathNode$RelativeMoveTo; +HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeMoveTo;->(FF)V +PLandroidx/compose/ui/graphics/vector/PathNode$RelativeMoveTo;->getDx()F +PLandroidx/compose/ui/graphics/vector/PathNode$RelativeMoveTo;->getDy()F +Landroidx/compose/ui/graphics/vector/PathNode$RelativeReflectiveCurveTo; +HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeReflectiveCurveTo;->(FFFF)V +PLandroidx/compose/ui/graphics/vector/PathNode$RelativeReflectiveCurveTo;->getDx1()F +PLandroidx/compose/ui/graphics/vector/PathNode$RelativeReflectiveCurveTo;->getDx2()F +PLandroidx/compose/ui/graphics/vector/PathNode$RelativeReflectiveCurveTo;->getDy1()F +PLandroidx/compose/ui/graphics/vector/PathNode$RelativeReflectiveCurveTo;->getDy2()F +Landroidx/compose/ui/graphics/vector/PathNode$RelativeVerticalTo; +HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeVerticalTo;->(F)V +HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeVerticalTo;->getDy()F +Landroidx/compose/ui/graphics/vector/PathNode$VerticalTo; +HSPLandroidx/compose/ui/graphics/vector/PathNode$VerticalTo;->(F)V +HSPLandroidx/compose/ui/graphics/vector/PathNode$VerticalTo;->getY()F +Landroidx/compose/ui/graphics/vector/PathParserKt; +HSPLandroidx/compose/ui/graphics/vector/PathParserKt;->()V +HSPLandroidx/compose/ui/graphics/vector/PathParserKt;->toPath(Ljava/util/List;Landroidx/compose/ui/graphics/Path;)Landroidx/compose/ui/graphics/Path; +Landroidx/compose/ui/graphics/vector/VNode; +HSPLandroidx/compose/ui/graphics/vector/VNode;->()V +HSPLandroidx/compose/ui/graphics/vector/VNode;->()V +HSPLandroidx/compose/ui/graphics/vector/VNode;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/vector/VNode;->getInvalidateListener$ui_release()Lkotlin/jvm/functions/Function0; +HSPLandroidx/compose/ui/graphics/vector/VNode;->invalidate()V +HSPLandroidx/compose/ui/graphics/vector/VNode;->setInvalidateListener$ui_release(Lkotlin/jvm/functions/Function0;)V +Landroidx/compose/ui/graphics/vector/VectorApplier; +HSPLandroidx/compose/ui/graphics/vector/VectorApplier;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorApplier;->(Landroidx/compose/ui/graphics/vector/VNode;)V +HSPLandroidx/compose/ui/graphics/vector/VectorApplier;->asGroup(Landroidx/compose/ui/graphics/vector/VNode;)Landroidx/compose/ui/graphics/vector/GroupComponent; +HSPLandroidx/compose/ui/graphics/vector/VectorApplier;->insertBottomUp(ILandroidx/compose/ui/graphics/vector/VNode;)V +HSPLandroidx/compose/ui/graphics/vector/VectorApplier;->insertBottomUp(ILjava/lang/Object;)V +HSPLandroidx/compose/ui/graphics/vector/VectorApplier;->insertTopDown(ILandroidx/compose/ui/graphics/vector/VNode;)V +HSPLandroidx/compose/ui/graphics/vector/VectorApplier;->insertTopDown(ILjava/lang/Object;)V +HSPLandroidx/compose/ui/graphics/vector/VectorApplier;->onClear()V +Landroidx/compose/ui/graphics/vector/VectorComponent; +HSPLandroidx/compose/ui/graphics/vector/VectorComponent;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComponent;->access$doInvalidate(Landroidx/compose/ui/graphics/vector/VectorComponent;)V +HSPLandroidx/compose/ui/graphics/vector/VectorComponent;->doInvalidate()V +HSPLandroidx/compose/ui/graphics/vector/VectorComponent;->draw(Landroidx/compose/ui/graphics/drawscope/DrawScope;FLandroidx/compose/ui/graphics/ColorFilter;)V +HSPLandroidx/compose/ui/graphics/vector/VectorComponent;->getRoot()Landroidx/compose/ui/graphics/vector/GroupComponent; +HSPLandroidx/compose/ui/graphics/vector/VectorComponent;->getViewportHeight()F +HSPLandroidx/compose/ui/graphics/vector/VectorComponent;->getViewportWidth()F +HSPLandroidx/compose/ui/graphics/vector/VectorComponent;->setIntrinsicColorFilter$ui_release(Landroidx/compose/ui/graphics/ColorFilter;)V +HSPLandroidx/compose/ui/graphics/vector/VectorComponent;->setInvalidateCallback$ui_release(Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/ui/graphics/vector/VectorComponent;->setName(Ljava/lang/String;)V +HSPLandroidx/compose/ui/graphics/vector/VectorComponent;->setViewportHeight(F)V +HSPLandroidx/compose/ui/graphics/vector/VectorComponent;->setViewportWidth(F)V +Landroidx/compose/ui/graphics/vector/VectorComponent$drawVectorBlock$1; +HSPLandroidx/compose/ui/graphics/vector/VectorComponent$drawVectorBlock$1;->(Landroidx/compose/ui/graphics/vector/VectorComponent;)V +HSPLandroidx/compose/ui/graphics/vector/VectorComponent$drawVectorBlock$1;->invoke(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V +HSPLandroidx/compose/ui/graphics/vector/VectorComponent$drawVectorBlock$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/graphics/vector/VectorComponent$invalidateCallback$1; +HSPLandroidx/compose/ui/graphics/vector/VectorComponent$invalidateCallback$1;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComponent$invalidateCallback$1;->()V +Landroidx/compose/ui/graphics/vector/VectorComponent$root$1$1; +HSPLandroidx/compose/ui/graphics/vector/VectorComponent$root$1$1;->(Landroidx/compose/ui/graphics/vector/VectorComponent;)V +HSPLandroidx/compose/ui/graphics/vector/VectorComponent$root$1$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/ui/graphics/vector/VectorComponent$root$1$1;->invoke()V +Landroidx/compose/ui/graphics/vector/VectorComposeKt; +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt;->Path-9cdaXJ4(Ljava/util/List;ILjava/lang/String;Landroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/Brush;FFIIFFFFLandroidx/compose/runtime/Composer;III)V +Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$1; +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$1;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$1;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$1;->invoke()Landroidx/compose/ui/graphics/vector/PathComponent; +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$1;->invoke()Ljava/lang/Object; +Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$1; +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$1;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$1;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$1;->invoke(Landroidx/compose/ui/graphics/vector/PathComponent;Ljava/lang/String;)V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$10; +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$10;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$10;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$10;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$10;->invoke-CSYIeUk(Landroidx/compose/ui/graphics/vector/PathComponent;I)V +Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$11; +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$11;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$11;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$11;->invoke(Landroidx/compose/ui/graphics/vector/PathComponent;F)V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$11;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$12; +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$12;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$12;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$12;->invoke(Landroidx/compose/ui/graphics/vector/PathComponent;F)V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$12;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$13; +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$13;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$13;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$13;->invoke(Landroidx/compose/ui/graphics/vector/PathComponent;F)V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$13;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$14; +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$14;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$14;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$14;->invoke(Landroidx/compose/ui/graphics/vector/PathComponent;F)V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$14;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$2; +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$2;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$2;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$2;->invoke(Landroidx/compose/ui/graphics/vector/PathComponent;Ljava/util/List;)V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$3; +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$3;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$3;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$3;->invoke-pweu1eQ(Landroidx/compose/ui/graphics/vector/PathComponent;I)V +Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$4; +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$4;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$4;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$4;->invoke(Landroidx/compose/ui/graphics/vector/PathComponent;Landroidx/compose/ui/graphics/Brush;)V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$5; +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$5;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$5;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$5;->invoke(Landroidx/compose/ui/graphics/vector/PathComponent;F)V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$6; +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$6;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$6;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$6;->invoke(Landroidx/compose/ui/graphics/vector/PathComponent;Landroidx/compose/ui/graphics/Brush;)V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$6;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$7; +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$7;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$7;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$7;->invoke(Landroidx/compose/ui/graphics/vector/PathComponent;F)V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$7;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$8; +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$8;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$8;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$8;->invoke(Landroidx/compose/ui/graphics/vector/PathComponent;F)V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$8;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$9; +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$9;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$9;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$9;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$9;->invoke-kLtJ_vA(Landroidx/compose/ui/graphics/vector/PathComponent;I)V +Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path-9cdaXJ4$$inlined$ComposeNode$1; +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path-9cdaXJ4$$inlined$ComposeNode$1;->(Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path-9cdaXJ4$$inlined$ComposeNode$1;->invoke()Ljava/lang/Object; +Landroidx/compose/ui/graphics/vector/VectorConfig; +HSPLandroidx/compose/ui/graphics/vector/VectorConfig;->getOrDefault(Landroidx/compose/ui/graphics/vector/VectorProperty;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/graphics/vector/VectorGroup; +HSPLandroidx/compose/ui/graphics/vector/VectorGroup;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorGroup;->(Ljava/lang/String;FFFFFFFLjava/util/List;Ljava/util/List;)V +HSPLandroidx/compose/ui/graphics/vector/VectorGroup;->access$getChildren$p(Landroidx/compose/ui/graphics/vector/VectorGroup;)Ljava/util/List; +HSPLandroidx/compose/ui/graphics/vector/VectorGroup;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/graphics/vector/VectorGroup;->hashCode()I +HSPLandroidx/compose/ui/graphics/vector/VectorGroup;->iterator()Ljava/util/Iterator; +Landroidx/compose/ui/graphics/vector/VectorGroup$iterator$1; +HSPLandroidx/compose/ui/graphics/vector/VectorGroup$iterator$1;->(Landroidx/compose/ui/graphics/vector/VectorGroup;)V +HSPLandroidx/compose/ui/graphics/vector/VectorGroup$iterator$1;->hasNext()Z +HSPLandroidx/compose/ui/graphics/vector/VectorGroup$iterator$1;->next()Landroidx/compose/ui/graphics/vector/VectorNode; +HSPLandroidx/compose/ui/graphics/vector/VectorGroup$iterator$1;->next()Ljava/lang/Object; +Landroidx/compose/ui/graphics/vector/VectorKt; +HSPLandroidx/compose/ui/graphics/vector/VectorKt;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorKt;->getDefaultFillType()I +HSPLandroidx/compose/ui/graphics/vector/VectorKt;->getDefaultStrokeLineCap()I +HSPLandroidx/compose/ui/graphics/vector/VectorKt;->getDefaultStrokeLineJoin()I +HSPLandroidx/compose/ui/graphics/vector/VectorKt;->getEmptyPath()Ljava/util/List; +Landroidx/compose/ui/graphics/vector/VectorNode; +HSPLandroidx/compose/ui/graphics/vector/VectorNode;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorNode;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorNode;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/graphics/vector/VectorPainter; +HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->RenderVector$ui_release(Ljava/lang/String;FFLkotlin/jvm/functions/Function4;Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->access$getVector$p(Landroidx/compose/ui/graphics/vector/VectorPainter;)Landroidx/compose/ui/graphics/vector/VectorComponent; +HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->access$setDirty(Landroidx/compose/ui/graphics/vector/VectorPainter;Z)V +HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->applyColorFilter(Landroidx/compose/ui/graphics/ColorFilter;)Z +HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->composeVector(Landroidx/compose/runtime/CompositionContext;Lkotlin/jvm/functions/Function4;)Landroidx/compose/runtime/Composition; +HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->getAutoMirror$ui_release()Z +HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->getIntrinsicSize-NH-jbRc()J +HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->getSize-NH-jbRc$ui_release()J +HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->isDirty()Z +HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->onDraw(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V +HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->setAutoMirror$ui_release(Z)V +HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->setDirty(Z)V +HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->setIntrinsicColorFilter$ui_release(Landroidx/compose/ui/graphics/ColorFilter;)V +HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->setSize-uvyYCjk$ui_release(J)V +Landroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$2; +HSPLandroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$2;->(Landroidx/compose/runtime/Composition;)V +HSPLandroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$2;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult; +HSPLandroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$2$invoke$$inlined$onDispose$1; +HSPLandroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$2$invoke$$inlined$onDispose$1;->(Landroidx/compose/runtime/Composition;)V +HSPLandroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$2$invoke$$inlined$onDispose$1;->dispose()V +Landroidx/compose/ui/graphics/vector/VectorPainter$composeVector$1; +HSPLandroidx/compose/ui/graphics/vector/VectorPainter$composeVector$1;->(Lkotlin/jvm/functions/Function4;Landroidx/compose/ui/graphics/vector/VectorPainter;)V +HSPLandroidx/compose/ui/graphics/vector/VectorPainter$composeVector$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/ui/graphics/vector/VectorPainter$composeVector$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/graphics/vector/VectorPainter$vector$1$1; +HSPLandroidx/compose/ui/graphics/vector/VectorPainter$vector$1$1;->(Landroidx/compose/ui/graphics/vector/VectorPainter;)V +HSPLandroidx/compose/ui/graphics/vector/VectorPainter$vector$1$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/ui/graphics/vector/VectorPainter$vector$1$1;->invoke()V +Landroidx/compose/ui/graphics/vector/VectorPainterKt; +HSPLandroidx/compose/ui/graphics/vector/VectorPainterKt;->RenderVectorGroup(Landroidx/compose/ui/graphics/vector/VectorGroup;Ljava/util/Map;Landroidx/compose/runtime/Composer;II)V +HSPLandroidx/compose/ui/graphics/vector/VectorPainterKt;->rememberVectorPainter(Landroidx/compose/ui/graphics/vector/ImageVector;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/graphics/vector/VectorPainter; +HSPLandroidx/compose/ui/graphics/vector/VectorPainterKt;->rememberVectorPainter-vIP8VLU(FFFFLjava/lang/String;JIZLkotlin/jvm/functions/Function4;Landroidx/compose/runtime/Composer;II)Landroidx/compose/ui/graphics/vector/VectorPainter; +Landroidx/compose/ui/graphics/vector/VectorPainterKt$RenderVectorGroup$config$1; +HSPLandroidx/compose/ui/graphics/vector/VectorPainterKt$RenderVectorGroup$config$1;->()V +Landroidx/compose/ui/graphics/vector/VectorPainterKt$rememberVectorPainter$3; +HSPLandroidx/compose/ui/graphics/vector/VectorPainterKt$rememberVectorPainter$3;->(Landroidx/compose/ui/graphics/vector/ImageVector;)V +HSPLandroidx/compose/ui/graphics/vector/VectorPainterKt$rememberVectorPainter$3;->invoke(FFLandroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/ui/graphics/vector/VectorPainterKt$rememberVectorPainter$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/graphics/vector/VectorPath; +HSPLandroidx/compose/ui/graphics/vector/VectorPath;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorPath;->(Ljava/lang/String;Ljava/util/List;ILandroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/Brush;FFIIFFFF)V +HSPLandroidx/compose/ui/graphics/vector/VectorPath;->(Ljava/lang/String;Ljava/util/List;ILandroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/Brush;FFIIFFFFLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getFill()Landroidx/compose/ui/graphics/Brush; +HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getFillAlpha()F +HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getName()Ljava/lang/String; +HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getPathData()Ljava/util/List; +HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getPathFillType-Rg-k1Os()I +HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getStroke()Landroidx/compose/ui/graphics/Brush; +HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getStrokeAlpha()F +HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getStrokeLineCap-KaPHkGw()I +HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getStrokeLineJoin-LxFBmk8()I +HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getStrokeLineMiter()F +HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getStrokeLineWidth()F +HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getTrimPathEnd()F +HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getTrimPathOffset()F +HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getTrimPathStart()F +HSPLandroidx/compose/ui/graphics/vector/VectorPath;->hashCode()I +Landroidx/compose/ui/graphics/vector/VectorProperty; +HSPLandroidx/compose/ui/graphics/vector/VectorProperty;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorProperty;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorProperty;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/graphics/vector/VectorProperty$Fill; +HSPLandroidx/compose/ui/graphics/vector/VectorProperty$Fill;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorProperty$Fill;->()V +Landroidx/compose/ui/graphics/vector/VectorProperty$FillAlpha; +HSPLandroidx/compose/ui/graphics/vector/VectorProperty$FillAlpha;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorProperty$FillAlpha;->()V +Landroidx/compose/ui/graphics/vector/VectorProperty$PathData; +HSPLandroidx/compose/ui/graphics/vector/VectorProperty$PathData;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorProperty$PathData;->()V +Landroidx/compose/ui/graphics/vector/VectorProperty$Stroke; +HSPLandroidx/compose/ui/graphics/vector/VectorProperty$Stroke;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorProperty$Stroke;->()V +Landroidx/compose/ui/graphics/vector/VectorProperty$StrokeAlpha; +HSPLandroidx/compose/ui/graphics/vector/VectorProperty$StrokeAlpha;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorProperty$StrokeAlpha;->()V +Landroidx/compose/ui/graphics/vector/VectorProperty$StrokeLineWidth; +HSPLandroidx/compose/ui/graphics/vector/VectorProperty$StrokeLineWidth;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorProperty$StrokeLineWidth;->()V +Landroidx/compose/ui/graphics/vector/VectorProperty$TrimPathEnd; +HSPLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathEnd;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathEnd;->()V +Landroidx/compose/ui/graphics/vector/VectorProperty$TrimPathOffset; +HSPLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathOffset;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathOffset;->()V +Landroidx/compose/ui/graphics/vector/VectorProperty$TrimPathStart; +HSPLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathStart;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathStart;->()V +Landroidx/compose/ui/hapticfeedback/HapticFeedback; +Landroidx/compose/ui/hapticfeedback/PlatformHapticFeedback; +HSPLandroidx/compose/ui/hapticfeedback/PlatformHapticFeedback;->(Landroid/view/View;)V +Landroidx/compose/ui/input/InputMode; +HSPLandroidx/compose/ui/input/InputMode;->()V +HSPLandroidx/compose/ui/input/InputMode;->(I)V +HSPLandroidx/compose/ui/input/InputMode;->access$getKeyboard$cp()I +HSPLandroidx/compose/ui/input/InputMode;->access$getTouch$cp()I +HSPLandroidx/compose/ui/input/InputMode;->box-impl(I)Landroidx/compose/ui/input/InputMode; +HSPLandroidx/compose/ui/input/InputMode;->constructor-impl(I)I +HSPLandroidx/compose/ui/input/InputMode;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/input/InputMode;->equals-impl(ILjava/lang/Object;)Z +HSPLandroidx/compose/ui/input/InputMode;->equals-impl0(II)Z +HSPLandroidx/compose/ui/input/InputMode;->unbox-impl()I +Landroidx/compose/ui/input/InputMode$Companion; +HSPLandroidx/compose/ui/input/InputMode$Companion;->()V +HSPLandroidx/compose/ui/input/InputMode$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/input/InputMode$Companion;->getKeyboard-aOaMEAU()I +HSPLandroidx/compose/ui/input/InputMode$Companion;->getTouch-aOaMEAU()I +Landroidx/compose/ui/input/InputModeManager; +Landroidx/compose/ui/input/InputModeManagerImpl; +HSPLandroidx/compose/ui/input/InputModeManagerImpl;->(ILkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/input/InputModeManagerImpl;->(ILkotlin/jvm/functions/Function1;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/input/InputModeManagerImpl;->getInputMode-aOaMEAU()I +HSPLandroidx/compose/ui/input/InputModeManagerImpl;->setInputMode-iuPiT84(I)V +Landroidx/compose/ui/input/key/KeyInputElement; +HSPLandroidx/compose/ui/input/key/KeyInputElement;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/input/key/KeyInputElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/input/key/KeyInputElement;->create()Landroidx/compose/ui/input/key/KeyInputNode; +HSPLandroidx/compose/ui/input/key/KeyInputElement;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/input/key/KeyInputElement;->update(Landroidx/compose/ui/Modifier$Node;)V +HSPLandroidx/compose/ui/input/key/KeyInputElement;->update(Landroidx/compose/ui/input/key/KeyInputNode;)V +Landroidx/compose/ui/input/key/KeyInputModifierKt; +HSPLandroidx/compose/ui/input/key/KeyInputModifierKt;->onKeyEvent(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/ui/input/key/KeyInputModifierKt;->onPreviewKeyEvent(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; +Landroidx/compose/ui/input/key/KeyInputModifierNode; +Landroidx/compose/ui/input/key/KeyInputNode; +HSPLandroidx/compose/ui/input/key/KeyInputNode;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/input/key/KeyInputNode;->setOnEvent(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/input/key/KeyInputNode;->setOnPreEvent(Lkotlin/jvm/functions/Function1;)V +Landroidx/compose/ui/input/key/SoftKeyboardInterceptionModifierNode; +Landroidx/compose/ui/input/nestedscroll/NestedScrollConnection; +Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher; +HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;->()V +HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;->()V +HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;->getModifierLocalNode$ui_release()Landroidx/compose/ui/modifier/ModifierLocalModifierNode; +HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;->setCalculateNestedScrollScope$ui_release(Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;->setModifierLocalNode$ui_release(Landroidx/compose/ui/modifier/ModifierLocalModifierNode;)V +HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;->setScope$ui_release(Lkotlinx/coroutines/CoroutineScope;)V +Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher$calculateNestedScrollScope$1; +HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher$calculateNestedScrollScope$1;->(Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;)V +Landroidx/compose/ui/input/nestedscroll/NestedScrollElement; +HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollElement;->(Landroidx/compose/ui/input/nestedscroll/NestedScrollConnection;Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;)V +HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollElement;->create()Landroidx/compose/ui/input/nestedscroll/NestedScrollNode; +HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollElement;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollElement;->update(Landroidx/compose/ui/Modifier$Node;)V +HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollElement;->update(Landroidx/compose/ui/input/nestedscroll/NestedScrollNode;)V +Landroidx/compose/ui/input/nestedscroll/NestedScrollModifierKt; +HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierKt;->nestedScroll$default(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/input/nestedscroll/NestedScrollConnection;Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;ILjava/lang/Object;)Landroidx/compose/ui/Modifier; +HSPLandroidx/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; +Landroidx/compose/ui/input/nestedscroll/NestedScrollNode; +HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollNode;->(Landroidx/compose/ui/input/nestedscroll/NestedScrollConnection;Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;)V +HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollNode;->getProvidedValues()Landroidx/compose/ui/modifier/ModifierLocalMap; +HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollNode;->onAttach()V +HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollNode;->onDetach()V +HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollNode;->resetDispatcherFields()V +HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollNode;->updateDispatcher(Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;)V +HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollNode;->updateDispatcherFields()V +HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollNode;->updateNode$ui_release(Landroidx/compose/ui/input/nestedscroll/NestedScrollConnection;Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;)V +Landroidx/compose/ui/input/nestedscroll/NestedScrollNode$updateDispatcherFields$1; +HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollNode$updateDispatcherFields$1;->(Landroidx/compose/ui/input/nestedscroll/NestedScrollNode;)V +Landroidx/compose/ui/input/nestedscroll/NestedScrollNodeKt; +HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollNodeKt;->()V +HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollNodeKt;->getModifierLocalNestedScroll()Landroidx/compose/ui/modifier/ProvidableModifierLocal; +Landroidx/compose/ui/input/nestedscroll/NestedScrollNodeKt$ModifierLocalNestedScroll$1; +HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollNodeKt$ModifierLocalNestedScroll$1;->()V +HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollNodeKt$ModifierLocalNestedScroll$1;->()V +Landroidx/compose/ui/input/pointer/AndroidPointerIconType; +HSPLandroidx/compose/ui/input/pointer/AndroidPointerIconType;->(I)V +HSPLandroidx/compose/ui/input/pointer/AndroidPointerIconType;->equals(Ljava/lang/Object;)Z +Landroidx/compose/ui/input/pointer/AwaitPointerEventScope; +HSPLandroidx/compose/ui/input/pointer/AwaitPointerEventScope;->awaitPointerEvent$default(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Landroidx/compose/ui/input/pointer/PointerEventPass;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/input/pointer/ConsumedData; +HSPLandroidx/compose/ui/input/pointer/ConsumedData;->()V +HSPLandroidx/compose/ui/input/pointer/ConsumedData;->(ZZ)V +HSPLandroidx/compose/ui/input/pointer/ConsumedData;->getDownChange()Z +HSPLandroidx/compose/ui/input/pointer/ConsumedData;->getPositionChange()Z +HSPLandroidx/compose/ui/input/pointer/ConsumedData;->setDownChange(Z)V +HSPLandroidx/compose/ui/input/pointer/ConsumedData;->setPositionChange(Z)V +Landroidx/compose/ui/input/pointer/HitPathTracker; +HSPLandroidx/compose/ui/input/pointer/HitPathTracker;->(Landroidx/compose/ui/layout/LayoutCoordinates;)V +HSPLandroidx/compose/ui/input/pointer/HitPathTracker;->addHitPath-KNwqfcY(JLjava/util/List;)V +HSPLandroidx/compose/ui/input/pointer/HitPathTracker;->dispatchChanges(Landroidx/compose/ui/input/pointer/InternalPointerEvent;Z)Z +HSPLandroidx/compose/ui/input/pointer/HitPathTracker;->removeDetachedPointerInputFilters()V +Landroidx/compose/ui/input/pointer/InternalPointerEvent; +HSPLandroidx/compose/ui/input/pointer/InternalPointerEvent;->(Ljava/util/Map;Landroidx/compose/ui/input/pointer/PointerInputEvent;)V +HSPLandroidx/compose/ui/input/pointer/InternalPointerEvent;->getChanges()Ljava/util/Map; +HSPLandroidx/compose/ui/input/pointer/InternalPointerEvent;->getMotionEvent()Landroid/view/MotionEvent; +HSPLandroidx/compose/ui/input/pointer/InternalPointerEvent;->getSuppressMovementConsumption()Z +HSPLandroidx/compose/ui/input/pointer/InternalPointerEvent;->issuesEnterExitEvent-0FcD4WY(J)Z +Landroidx/compose/ui/input/pointer/MotionEventAdapter; +HSPLandroidx/compose/ui/input/pointer/MotionEventAdapter;->()V +HSPLandroidx/compose/ui/input/pointer/MotionEventAdapter;->addFreshIds(Landroid/view/MotionEvent;)V +HSPLandroidx/compose/ui/input/pointer/MotionEventAdapter;->clearOnDeviceChange(Landroid/view/MotionEvent;)V +HSPLandroidx/compose/ui/input/pointer/MotionEventAdapter;->convertToPointerInputEvent$ui_release(Landroid/view/MotionEvent;Landroidx/compose/ui/input/pointer/PositionCalculator;)Landroidx/compose/ui/input/pointer/PointerInputEvent; +HSPLandroidx/compose/ui/input/pointer/MotionEventAdapter;->createPointerInputEventData(Landroidx/compose/ui/input/pointer/PositionCalculator;Landroid/view/MotionEvent;IZ)Landroidx/compose/ui/input/pointer/PointerInputEventData; +HSPLandroidx/compose/ui/input/pointer/MotionEventAdapter;->getComposePointerId-_I2yYro(I)J +HSPLandroidx/compose/ui/input/pointer/MotionEventAdapter;->removeStaleIds(Landroid/view/MotionEvent;)V +Landroidx/compose/ui/input/pointer/Node; +HSPLandroidx/compose/ui/input/pointer/Node;->(Landroidx/compose/ui/Modifier$Node;)V +HSPLandroidx/compose/ui/input/pointer/Node;->buildCache(Ljava/util/Map;Landroidx/compose/ui/layout/LayoutCoordinates;Landroidx/compose/ui/input/pointer/InternalPointerEvent;Z)Z +HSPLandroidx/compose/ui/input/pointer/Node;->cleanUpHits(Landroidx/compose/ui/input/pointer/InternalPointerEvent;)V +HSPLandroidx/compose/ui/input/pointer/Node;->clearCache()V +HSPLandroidx/compose/ui/input/pointer/Node;->dispatchFinalEventPass(Landroidx/compose/ui/input/pointer/InternalPointerEvent;)Z +HSPLandroidx/compose/ui/input/pointer/Node;->dispatchMainEventPass(Ljava/util/Map;Landroidx/compose/ui/layout/LayoutCoordinates;Landroidx/compose/ui/input/pointer/InternalPointerEvent;Z)Z +HSPLandroidx/compose/ui/input/pointer/Node;->getModifierNode()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/input/pointer/Node;->getPointerIds()Landroidx/compose/runtime/collection/MutableVector; +Landroidx/compose/ui/input/pointer/NodeParent; +HSPLandroidx/compose/ui/input/pointer/NodeParent;->()V +HSPLandroidx/compose/ui/input/pointer/NodeParent;->buildCache(Ljava/util/Map;Landroidx/compose/ui/layout/LayoutCoordinates;Landroidx/compose/ui/input/pointer/InternalPointerEvent;Z)Z +HSPLandroidx/compose/ui/input/pointer/NodeParent;->cleanUpHits(Landroidx/compose/ui/input/pointer/InternalPointerEvent;)V +HSPLandroidx/compose/ui/input/pointer/NodeParent;->dispatchFinalEventPass(Landroidx/compose/ui/input/pointer/InternalPointerEvent;)Z +HSPLandroidx/compose/ui/input/pointer/NodeParent;->dispatchMainEventPass(Ljava/util/Map;Landroidx/compose/ui/layout/LayoutCoordinates;Landroidx/compose/ui/input/pointer/InternalPointerEvent;Z)Z +HSPLandroidx/compose/ui/input/pointer/NodeParent;->getChildren()Landroidx/compose/runtime/collection/MutableVector; +HSPLandroidx/compose/ui/input/pointer/NodeParent;->removeDetachedPointerInputFilters()V +Landroidx/compose/ui/input/pointer/PointerButtons; +HSPLandroidx/compose/ui/input/pointer/PointerButtons;->constructor-impl(I)I +Landroidx/compose/ui/input/pointer/PointerEvent; +HSPLandroidx/compose/ui/input/pointer/PointerEvent;->()V +HSPLandroidx/compose/ui/input/pointer/PointerEvent;->(Ljava/util/List;)V +HSPLandroidx/compose/ui/input/pointer/PointerEvent;->(Ljava/util/List;Landroidx/compose/ui/input/pointer/InternalPointerEvent;)V +HSPLandroidx/compose/ui/input/pointer/PointerEvent;->calculatePointerEventType-7fucELk()I +HSPLandroidx/compose/ui/input/pointer/PointerEvent;->getChanges()Ljava/util/List; +HSPLandroidx/compose/ui/input/pointer/PointerEvent;->getMotionEvent$ui_release()Landroid/view/MotionEvent; +HSPLandroidx/compose/ui/input/pointer/PointerEvent;->getType-7fucELk()I +Landroidx/compose/ui/input/pointer/PointerEventKt; +HSPLandroidx/compose/ui/input/pointer/PointerEventKt;->changedToDown(Landroidx/compose/ui/input/pointer/PointerInputChange;)Z +HSPLandroidx/compose/ui/input/pointer/PointerEventKt;->changedToDownIgnoreConsumed(Landroidx/compose/ui/input/pointer/PointerInputChange;)Z +HSPLandroidx/compose/ui/input/pointer/PointerEventKt;->changedToUp(Landroidx/compose/ui/input/pointer/PointerInputChange;)Z +HSPLandroidx/compose/ui/input/pointer/PointerEventKt;->changedToUpIgnoreConsumed(Landroidx/compose/ui/input/pointer/PointerInputChange;)Z +HSPLandroidx/compose/ui/input/pointer/PointerEventKt;->positionChangeInternal(Landroidx/compose/ui/input/pointer/PointerInputChange;Z)J +HSPLandroidx/compose/ui/input/pointer/PointerEventKt;->positionChangedIgnoreConsumed(Landroidx/compose/ui/input/pointer/PointerInputChange;)Z +Landroidx/compose/ui/input/pointer/PointerEventPass; +HSPLandroidx/compose/ui/input/pointer/PointerEventPass;->$values()[Landroidx/compose/ui/input/pointer/PointerEventPass; +HSPLandroidx/compose/ui/input/pointer/PointerEventPass;->()V +HSPLandroidx/compose/ui/input/pointer/PointerEventPass;->(Ljava/lang/String;I)V +HSPLandroidx/compose/ui/input/pointer/PointerEventPass;->values()[Landroidx/compose/ui/input/pointer/PointerEventPass; +Landroidx/compose/ui/input/pointer/PointerEventTimeoutCancellationException; +Landroidx/compose/ui/input/pointer/PointerEventType; +HSPLandroidx/compose/ui/input/pointer/PointerEventType;->()V +HSPLandroidx/compose/ui/input/pointer/PointerEventType;->access$getEnter$cp()I +HSPLandroidx/compose/ui/input/pointer/PointerEventType;->access$getExit$cp()I +HSPLandroidx/compose/ui/input/pointer/PointerEventType;->access$getMove$cp()I +HSPLandroidx/compose/ui/input/pointer/PointerEventType;->access$getPress$cp()I +HSPLandroidx/compose/ui/input/pointer/PointerEventType;->access$getRelease$cp()I +HSPLandroidx/compose/ui/input/pointer/PointerEventType;->access$getScroll$cp()I +HSPLandroidx/compose/ui/input/pointer/PointerEventType;->constructor-impl(I)I +HSPLandroidx/compose/ui/input/pointer/PointerEventType;->equals-impl0(II)Z +Landroidx/compose/ui/input/pointer/PointerEventType$Companion; +HSPLandroidx/compose/ui/input/pointer/PointerEventType$Companion;->()V +HSPLandroidx/compose/ui/input/pointer/PointerEventType$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/input/pointer/PointerEventType$Companion;->getEnter-7fucELk()I +HSPLandroidx/compose/ui/input/pointer/PointerEventType$Companion;->getExit-7fucELk()I +HSPLandroidx/compose/ui/input/pointer/PointerEventType$Companion;->getMove-7fucELk()I +HSPLandroidx/compose/ui/input/pointer/PointerEventType$Companion;->getPress-7fucELk()I +HSPLandroidx/compose/ui/input/pointer/PointerEventType$Companion;->getRelease-7fucELk()I +HSPLandroidx/compose/ui/input/pointer/PointerEventType$Companion;->getScroll-7fucELk()I +Landroidx/compose/ui/input/pointer/PointerEvent_androidKt; +HSPLandroidx/compose/ui/input/pointer/PointerEvent_androidKt;->EmptyPointerKeyboardModifiers()I +Landroidx/compose/ui/input/pointer/PointerIcon; +HSPLandroidx/compose/ui/input/pointer/PointerIcon;->()V +Landroidx/compose/ui/input/pointer/PointerIcon$Companion; +HSPLandroidx/compose/ui/input/pointer/PointerIcon$Companion;->()V +HSPLandroidx/compose/ui/input/pointer/PointerIcon$Companion;->()V +HSPLandroidx/compose/ui/input/pointer/PointerIcon$Companion;->getDefault()Landroidx/compose/ui/input/pointer/PointerIcon; +Landroidx/compose/ui/input/pointer/PointerIconKt; +HSPLandroidx/compose/ui/input/pointer/PointerIconKt;->()V +HSPLandroidx/compose/ui/input/pointer/PointerIconKt;->access$getModifierLocalPointerIcon$p()Landroidx/compose/ui/modifier/ProvidableModifierLocal; +HSPLandroidx/compose/ui/input/pointer/PointerIconKt;->pointerHoverIcon$default(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/input/pointer/PointerIcon;ZILjava/lang/Object;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/ui/input/pointer/PointerIconKt;->pointerHoverIcon(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/input/pointer/PointerIcon;Z)Landroidx/compose/ui/Modifier; +Landroidx/compose/ui/input/pointer/PointerIconKt$ModifierLocalPointerIcon$1; +HSPLandroidx/compose/ui/input/pointer/PointerIconKt$ModifierLocalPointerIcon$1;->()V +HSPLandroidx/compose/ui/input/pointer/PointerIconKt$ModifierLocalPointerIcon$1;->()V +HSPLandroidx/compose/ui/input/pointer/PointerIconKt$ModifierLocalPointerIcon$1;->invoke()Landroidx/compose/ui/input/pointer/PointerIconModifierLocal; +HSPLandroidx/compose/ui/input/pointer/PointerIconKt$ModifierLocalPointerIcon$1;->invoke()Ljava/lang/Object; +Landroidx/compose/ui/input/pointer/PointerIconKt$pointerHoverIcon$2; +HSPLandroidx/compose/ui/input/pointer/PointerIconKt$pointerHoverIcon$2;->(Landroidx/compose/ui/input/pointer/PointerIcon;Z)V +HSPLandroidx/compose/ui/input/pointer/PointerIconKt$pointerHoverIcon$2;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/ui/input/pointer/PointerIconKt$pointerHoverIcon$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/input/pointer/PointerIconKt$pointerHoverIcon$2$1$1; +HSPLandroidx/compose/ui/input/pointer/PointerIconKt$pointerHoverIcon$2$1$1;->(Landroidx/compose/ui/input/pointer/PointerIconModifierLocal;Landroidx/compose/ui/input/pointer/PointerIcon;ZLkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/input/pointer/PointerIconKt$pointerHoverIcon$2$1$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/ui/input/pointer/PointerIconKt$pointerHoverIcon$2$1$1;->invoke()V +Landroidx/compose/ui/input/pointer/PointerIconKt$pointerHoverIcon$2$onSetIcon$1; +HSPLandroidx/compose/ui/input/pointer/PointerIconKt$pointerHoverIcon$2$onSetIcon$1;->(Landroidx/compose/ui/input/pointer/PointerIconService;)V +Landroidx/compose/ui/input/pointer/PointerIconKt$pointerHoverIcon$2$pointerInputModifier$1$1; +HSPLandroidx/compose/ui/input/pointer/PointerIconKt$pointerHoverIcon$2$pointerInputModifier$1$1;->(Landroidx/compose/ui/input/pointer/PointerIconModifierLocal;Lkotlin/coroutines/Continuation;)V +Landroidx/compose/ui/input/pointer/PointerIconModifierLocal; +HSPLandroidx/compose/ui/input/pointer/PointerIconModifierLocal;->(Landroidx/compose/ui/input/pointer/PointerIcon;ZLkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/input/pointer/PointerIconModifierLocal;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal; +HSPLandroidx/compose/ui/input/pointer/PointerIconModifierLocal;->getParentInfo()Landroidx/compose/ui/input/pointer/PointerIconModifierLocal; +HSPLandroidx/compose/ui/input/pointer/PointerIconModifierLocal;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V +HSPLandroidx/compose/ui/input/pointer/PointerIconModifierLocal;->setParentInfo(Landroidx/compose/ui/input/pointer/PointerIconModifierLocal;)V +HSPLandroidx/compose/ui/input/pointer/PointerIconModifierLocal;->shouldUpdatePointerIcon()Z +HSPLandroidx/compose/ui/input/pointer/PointerIconModifierLocal;->updateValues(Landroidx/compose/ui/input/pointer/PointerIcon;ZLkotlin/jvm/functions/Function1;)V +Landroidx/compose/ui/input/pointer/PointerIconService; +Landroidx/compose/ui/input/pointer/PointerIcon_androidKt; +HSPLandroidx/compose/ui/input/pointer/PointerIcon_androidKt;->()V +HSPLandroidx/compose/ui/input/pointer/PointerIcon_androidKt;->PointerIcon(I)Landroidx/compose/ui/input/pointer/PointerIcon; +HSPLandroidx/compose/ui/input/pointer/PointerIcon_androidKt;->getPointerIconCrosshair()Landroidx/compose/ui/input/pointer/PointerIcon; +HSPLandroidx/compose/ui/input/pointer/PointerIcon_androidKt;->getPointerIconDefault()Landroidx/compose/ui/input/pointer/PointerIcon; +HSPLandroidx/compose/ui/input/pointer/PointerIcon_androidKt;->getPointerIconHand()Landroidx/compose/ui/input/pointer/PointerIcon; +HSPLandroidx/compose/ui/input/pointer/PointerIcon_androidKt;->getPointerIconText()Landroidx/compose/ui/input/pointer/PointerIcon; +Landroidx/compose/ui/input/pointer/PointerId; +HSPLandroidx/compose/ui/input/pointer/PointerId;->(J)V +HSPLandroidx/compose/ui/input/pointer/PointerId;->box-impl(J)Landroidx/compose/ui/input/pointer/PointerId; +HSPLandroidx/compose/ui/input/pointer/PointerId;->constructor-impl(J)J +HSPLandroidx/compose/ui/input/pointer/PointerId;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/input/pointer/PointerId;->equals-impl(JLjava/lang/Object;)Z +HSPLandroidx/compose/ui/input/pointer/PointerId;->equals-impl0(JJ)Z +HSPLandroidx/compose/ui/input/pointer/PointerId;->hashCode()I +HSPLandroidx/compose/ui/input/pointer/PointerId;->hashCode-impl(J)I +HSPLandroidx/compose/ui/input/pointer/PointerId;->unbox-impl()J +Landroidx/compose/ui/input/pointer/PointerInputChange; +HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->()V +HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->(JJJZFJJZZIJ)V +HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->(JJJZFJJZZIJLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->(JJJZFJJZZILjava/util/List;J)V +HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->(JJJZFJJZZILjava/util/List;JLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->consume()V +HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->copy-OHpmEuE$default(Landroidx/compose/ui/input/pointer/PointerInputChange;JJJZJJZILjava/util/List;JILjava/lang/Object;)Landroidx/compose/ui/input/pointer/PointerInputChange; +HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->copy-OHpmEuE(JJJZJJZILjava/util/List;J)Landroidx/compose/ui/input/pointer/PointerInputChange; +HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->copy-wbzehF4(JJJZFJJZILjava/util/List;J)Landroidx/compose/ui/input/pointer/PointerInputChange; +HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->getHistorical()Ljava/util/List; +HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->getId-J3iCeTQ()J +HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->getPosition-F1C5BW0()J +HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->getPressed()Z +HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->getPreviousPosition-F1C5BW0()J +HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->getPreviousPressed()Z +HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->getType-T8wyACA()I +HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->getUptimeMillis()J +HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->isConsumed()Z +Landroidx/compose/ui/input/pointer/PointerInputChangeEventProducer; +HSPLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer;->()V +HSPLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer;->produce(Landroidx/compose/ui/input/pointer/PointerInputEvent;Landroidx/compose/ui/input/pointer/PositionCalculator;)Landroidx/compose/ui/input/pointer/InternalPointerEvent; +Landroidx/compose/ui/input/pointer/PointerInputChangeEventProducer$PointerInputData; +HSPLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer$PointerInputData;->(JJZI)V +HSPLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer$PointerInputData;->(JJZILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer$PointerInputData;->getDown()Z +HSPLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer$PointerInputData;->getPositionOnScreen-F1C5BW0()J +HSPLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer$PointerInputData;->getUptime()J +Landroidx/compose/ui/input/pointer/PointerInputEvent; +HSPLandroidx/compose/ui/input/pointer/PointerInputEvent;->(JLjava/util/List;Landroid/view/MotionEvent;)V +HSPLandroidx/compose/ui/input/pointer/PointerInputEvent;->getMotionEvent()Landroid/view/MotionEvent; +HSPLandroidx/compose/ui/input/pointer/PointerInputEvent;->getPointers()Ljava/util/List; +Landroidx/compose/ui/input/pointer/PointerInputEventData; +HSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->(JJJJZFIZLjava/util/List;J)V +HSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->(JJJJZFIZLjava/util/List;JLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getDown()Z +HSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getHistorical()Ljava/util/List; +HSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getId-J3iCeTQ()J +HSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getIssuesEnterExit()Z +HSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getPosition-F1C5BW0()J +HSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getPositionOnScreen-F1C5BW0()J +HSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getPressure()F +HSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getScrollDelta-F1C5BW0()J +HSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getType-T8wyACA()I +HSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getUptime()J +Landroidx/compose/ui/input/pointer/PointerInputEventProcessor; +HSPLandroidx/compose/ui/input/pointer/PointerInputEventProcessor;->(Landroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/input/pointer/PointerInputEventProcessor;->process-BIzXfog(Landroidx/compose/ui/input/pointer/PointerInputEvent;Landroidx/compose/ui/input/pointer/PositionCalculator;Z)I +Landroidx/compose/ui/input/pointer/PointerInputEventProcessorKt; +HSPLandroidx/compose/ui/input/pointer/PointerInputEventProcessorKt;->ProcessResult(ZZ)I +Landroidx/compose/ui/input/pointer/PointerInputModifier; +Landroidx/compose/ui/input/pointer/PointerInputResetException; +PLandroidx/compose/ui/input/pointer/PointerInputResetException;->()V +PLandroidx/compose/ui/input/pointer/PointerInputResetException;->fillInStackTrace()Ljava/lang/Throwable; +Landroidx/compose/ui/input/pointer/PointerInputScope; +Landroidx/compose/ui/input/pointer/PointerKeyboardModifiers; +HSPLandroidx/compose/ui/input/pointer/PointerKeyboardModifiers;->(I)V +HSPLandroidx/compose/ui/input/pointer/PointerKeyboardModifiers;->box-impl(I)Landroidx/compose/ui/input/pointer/PointerKeyboardModifiers; +HSPLandroidx/compose/ui/input/pointer/PointerKeyboardModifiers;->constructor-impl(I)I +HSPLandroidx/compose/ui/input/pointer/PointerKeyboardModifiers;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/input/pointer/PointerKeyboardModifiers;->equals-impl(ILjava/lang/Object;)Z +HSPLandroidx/compose/ui/input/pointer/PointerKeyboardModifiers;->unbox-impl()I +Landroidx/compose/ui/input/pointer/PointerType; +HSPLandroidx/compose/ui/input/pointer/PointerType;->()V +HSPLandroidx/compose/ui/input/pointer/PointerType;->access$getMouse$cp()I +HSPLandroidx/compose/ui/input/pointer/PointerType;->access$getTouch$cp()I +HSPLandroidx/compose/ui/input/pointer/PointerType;->constructor-impl(I)I +HSPLandroidx/compose/ui/input/pointer/PointerType;->equals-impl0(II)Z +Landroidx/compose/ui/input/pointer/PointerType$Companion; +HSPLandroidx/compose/ui/input/pointer/PointerType$Companion;->()V +HSPLandroidx/compose/ui/input/pointer/PointerType$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/input/pointer/PointerType$Companion;->getMouse-T8wyACA()I +HSPLandroidx/compose/ui/input/pointer/PointerType$Companion;->getTouch-T8wyACA()I +Landroidx/compose/ui/input/pointer/PositionCalculator; +Landroidx/compose/ui/input/pointer/ProcessResult; +HSPLandroidx/compose/ui/input/pointer/ProcessResult;->constructor-impl(I)I +HSPLandroidx/compose/ui/input/pointer/ProcessResult;->getAnyMovementConsumed-impl(I)Z +HSPLandroidx/compose/ui/input/pointer/ProcessResult;->getDispatchedToAPointerInputModifier-impl(I)Z +Landroidx/compose/ui/input/pointer/SuspendPointerInputElement; +HSPLandroidx/compose/ui/input/pointer/SuspendPointerInputElement;->(Ljava/lang/Object;Ljava/lang/Object;[Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/ui/input/pointer/SuspendPointerInputElement;->(Ljava/lang/Object;Ljava/lang/Object;[Ljava/lang/Object;Lkotlin/jvm/functions/Function2;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/input/pointer/SuspendPointerInputElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/input/pointer/SuspendPointerInputElement;->create()Landroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl; +HSPLandroidx/compose/ui/input/pointer/SuspendPointerInputElement;->equals(Ljava/lang/Object;)Z +Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt; +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt;->()V +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt;->SuspendingPointerInputModifierNode(Lkotlin/jvm/functions/Function2;)Landroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNode; +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt;->access$getEmptyPointerEvent$p()Landroidx/compose/ui/input/pointer/PointerEvent; +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt;->pointerInput(Landroidx/compose/ui/Modifier;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Landroidx/compose/ui/Modifier; +Landroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNode; +Landroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl; +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->(Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->access$getCurrentEvent$p(Landroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;)Landroidx/compose/ui/input/pointer/PointerEvent; +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->access$getPointerHandlers$p(Landroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;)Landroidx/compose/runtime/collection/MutableVector; +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->awaitPointerEventScope(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->dispatchPointerEvent(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEventPass;)V +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->getPointerInputHandler()Lkotlin/jvm/functions/Function2; +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->getSize-YbymL2g()J +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->getViewConfiguration()Landroidx/compose/ui/platform/ViewConfiguration; +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->onDetach()V +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->onPointerEvent-H0pRuoY(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEventPass;J)V +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->resetPointerInputHandler()V +Landroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine; +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine;->(Landroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine;->access$setAwaitPass$p(Landroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine;Landroidx/compose/ui/input/pointer/PointerEventPass;)V +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine;->access$setPointerAwaiter$p(Landroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine;Lkotlinx/coroutines/CancellableContinuation;)V +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine;->awaitPointerEvent(Landroidx/compose/ui/input/pointer/PointerEventPass;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine;->cancel(Ljava/lang/Throwable;)V +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine;->getContext()Lkotlin/coroutines/CoroutineContext; +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine;->getCurrentEvent()Landroidx/compose/ui/input/pointer/PointerEvent; +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine;->getViewConfiguration()Landroidx/compose/ui/platform/ViewConfiguration; +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine;->offerPointerEvent(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEventPass;)V +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine;->resumeWith(Ljava/lang/Object;)V +Landroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$WhenMappings; +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$WhenMappings;->()V +Landroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$awaitPointerEventScope$2$2; +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$awaitPointerEventScope$2$2;->(Landroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine;)V +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$awaitPointerEventScope$2$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$awaitPointerEventScope$2$2;->invoke(Ljava/lang/Throwable;)V +Landroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$onPointerEvent$1; +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$onPointerEvent$1;->(Landroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$onPointerEvent$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$onPointerEvent$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$onPointerEvent$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$onPointerEvent$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/input/pointer/util/DataPointAtTime; +HSPLandroidx/compose/ui/input/pointer/util/DataPointAtTime;->(JF)V +Landroidx/compose/ui/input/pointer/util/VelocityTracker; +HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker;->()V +HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker;->()V +HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker;->addPosition-Uv8p0NA(JJ)V +HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker;->getCurrentPointerPositionAccumulator-F1C5BW0$ui_release()J +HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker;->resetTracking()V +HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker;->setCurrentPointerPositionAccumulator-k-4lQ0M$ui_release(J)V +Landroidx/compose/ui/input/pointer/util/VelocityTracker1D; +HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker1D;->()V +HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker1D;->(ZLandroidx/compose/ui/input/pointer/util/VelocityTracker1D$Strategy;)V +HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker1D;->(ZLandroidx/compose/ui/input/pointer/util/VelocityTracker1D$Strategy;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker1D;->addDataPoint(JF)V +HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker1D;->resetTracking()V +Landroidx/compose/ui/input/pointer/util/VelocityTracker1D$Strategy; +HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker1D$Strategy;->$values()[Landroidx/compose/ui/input/pointer/util/VelocityTracker1D$Strategy; +HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker1D$Strategy;->()V +HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker1D$Strategy;->(Ljava/lang/String;I)V +HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker1D$Strategy;->values()[Landroidx/compose/ui/input/pointer/util/VelocityTracker1D$Strategy; +Landroidx/compose/ui/input/pointer/util/VelocityTracker1D$WhenMappings; +HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker1D$WhenMappings;->()V +Landroidx/compose/ui/input/pointer/util/VelocityTrackerKt; +HSPLandroidx/compose/ui/input/pointer/util/VelocityTrackerKt;->access$set([Landroidx/compose/ui/input/pointer/util/DataPointAtTime;IJF)V +HSPLandroidx/compose/ui/input/pointer/util/VelocityTrackerKt;->addPointerInputChange(Landroidx/compose/ui/input/pointer/util/VelocityTracker;Landroidx/compose/ui/input/pointer/PointerInputChange;)V +HSPLandroidx/compose/ui/input/pointer/util/VelocityTrackerKt;->set([Landroidx/compose/ui/input/pointer/util/DataPointAtTime;IJF)V +Landroidx/compose/ui/input/rotary/RotaryInputElement; +HSPLandroidx/compose/ui/input/rotary/RotaryInputElement;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/input/rotary/RotaryInputElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/input/rotary/RotaryInputElement;->create()Landroidx/compose/ui/input/rotary/RotaryInputNode; +Landroidx/compose/ui/input/rotary/RotaryInputModifierKt; +HSPLandroidx/compose/ui/input/rotary/RotaryInputModifierKt;->onRotaryScrollEvent(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; +Landroidx/compose/ui/input/rotary/RotaryInputModifierNode; +Landroidx/compose/ui/input/rotary/RotaryInputNode; +HSPLandroidx/compose/ui/input/rotary/RotaryInputNode;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V +Landroidx/compose/ui/layout/AlignmentLine; +HSPLandroidx/compose/ui/layout/AlignmentLine;->()V +HSPLandroidx/compose/ui/layout/AlignmentLine;->(Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/ui/layout/AlignmentLine;->(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/layout/AlignmentLine$Companion; +HSPLandroidx/compose/ui/layout/AlignmentLine$Companion;->()V +HSPLandroidx/compose/ui/layout/AlignmentLine$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/layout/AlignmentLineKt; +HSPLandroidx/compose/ui/layout/AlignmentLineKt;->()V +HSPLandroidx/compose/ui/layout/AlignmentLineKt;->getFirstBaseline()Landroidx/compose/ui/layout/HorizontalAlignmentLine; +HSPLandroidx/compose/ui/layout/AlignmentLineKt;->getLastBaseline()Landroidx/compose/ui/layout/HorizontalAlignmentLine; +Landroidx/compose/ui/layout/AlignmentLineKt$FirstBaseline$1; +HSPLandroidx/compose/ui/layout/AlignmentLineKt$FirstBaseline$1;->()V +HSPLandroidx/compose/ui/layout/AlignmentLineKt$FirstBaseline$1;->()V +Landroidx/compose/ui/layout/AlignmentLineKt$LastBaseline$1; +HSPLandroidx/compose/ui/layout/AlignmentLineKt$LastBaseline$1;->()V +HSPLandroidx/compose/ui/layout/AlignmentLineKt$LastBaseline$1;->()V +Landroidx/compose/ui/layout/BeyondBoundsLayout; +Landroidx/compose/ui/layout/BeyondBoundsLayout$BeyondBoundsScope; +Landroidx/compose/ui/layout/ComposableSingletons$SubcomposeLayoutKt; +HSPLandroidx/compose/ui/layout/ComposableSingletons$SubcomposeLayoutKt;->()V +HSPLandroidx/compose/ui/layout/ComposableSingletons$SubcomposeLayoutKt;->()V +HSPLandroidx/compose/ui/layout/ComposableSingletons$SubcomposeLayoutKt;->getLambda-1$ui_release()Lkotlin/jvm/functions/Function2; +Landroidx/compose/ui/layout/ComposableSingletons$SubcomposeLayoutKt$lambda-1$1; +HSPLandroidx/compose/ui/layout/ComposableSingletons$SubcomposeLayoutKt$lambda-1$1;->()V +HSPLandroidx/compose/ui/layout/ComposableSingletons$SubcomposeLayoutKt$lambda-1$1;->()V +Landroidx/compose/ui/layout/ContentScale; +HSPLandroidx/compose/ui/layout/ContentScale;->()V +Landroidx/compose/ui/layout/ContentScale$Companion; +HSPLandroidx/compose/ui/layout/ContentScale$Companion;->()V +HSPLandroidx/compose/ui/layout/ContentScale$Companion;->()V +HSPLandroidx/compose/ui/layout/ContentScale$Companion;->getFit()Landroidx/compose/ui/layout/ContentScale; +Landroidx/compose/ui/layout/ContentScale$Companion$Crop$1; +HSPLandroidx/compose/ui/layout/ContentScale$Companion$Crop$1;->()V +Landroidx/compose/ui/layout/ContentScale$Companion$FillBounds$1; +HSPLandroidx/compose/ui/layout/ContentScale$Companion$FillBounds$1;->()V +Landroidx/compose/ui/layout/ContentScale$Companion$FillHeight$1; +HSPLandroidx/compose/ui/layout/ContentScale$Companion$FillHeight$1;->()V +Landroidx/compose/ui/layout/ContentScale$Companion$FillWidth$1; +HSPLandroidx/compose/ui/layout/ContentScale$Companion$FillWidth$1;->()V +Landroidx/compose/ui/layout/ContentScale$Companion$Fit$1; +HSPLandroidx/compose/ui/layout/ContentScale$Companion$Fit$1;->()V +HSPLandroidx/compose/ui/layout/ContentScale$Companion$Fit$1;->computeScaleFactor-H7hwNQA(JJ)J +Landroidx/compose/ui/layout/ContentScale$Companion$Inside$1; +HSPLandroidx/compose/ui/layout/ContentScale$Companion$Inside$1;->()V +Landroidx/compose/ui/layout/ContentScaleKt; +HSPLandroidx/compose/ui/layout/ContentScaleKt;->access$computeFillMinDimension-iLBOSCw(JJ)F +HSPLandroidx/compose/ui/layout/ContentScaleKt;->computeFillHeight-iLBOSCw(JJ)F +HSPLandroidx/compose/ui/layout/ContentScaleKt;->computeFillMinDimension-iLBOSCw(JJ)F +HSPLandroidx/compose/ui/layout/ContentScaleKt;->computeFillWidth-iLBOSCw(JJ)F +Landroidx/compose/ui/layout/DefaultIntrinsicMeasurable; +HSPLandroidx/compose/ui/layout/DefaultIntrinsicMeasurable;->(Landroidx/compose/ui/layout/IntrinsicMeasurable;Landroidx/compose/ui/layout/IntrinsicMinMax;Landroidx/compose/ui/layout/IntrinsicWidthHeight;)V +HSPLandroidx/compose/ui/layout/DefaultIntrinsicMeasurable;->measure-BRTryo0(J)Landroidx/compose/ui/layout/Placeable; +Landroidx/compose/ui/layout/FixedScale; +HSPLandroidx/compose/ui/layout/FixedScale;->()V +HSPLandroidx/compose/ui/layout/FixedScale;->(F)V +Landroidx/compose/ui/layout/FixedSizeIntrinsicsPlaceable; +HSPLandroidx/compose/ui/layout/FixedSizeIntrinsicsPlaceable;->(II)V +Landroidx/compose/ui/layout/GraphicLayerInfo; +Landroidx/compose/ui/layout/HorizontalAlignmentLine; +HSPLandroidx/compose/ui/layout/HorizontalAlignmentLine;->()V +HSPLandroidx/compose/ui/layout/HorizontalAlignmentLine;->(Lkotlin/jvm/functions/Function2;)V +Landroidx/compose/ui/layout/IntermediateLayoutModifierNode; +Landroidx/compose/ui/layout/IntrinsicMeasurable; +Landroidx/compose/ui/layout/IntrinsicMeasureScope; +Landroidx/compose/ui/layout/IntrinsicMinMax; +HSPLandroidx/compose/ui/layout/IntrinsicMinMax;->$values()[Landroidx/compose/ui/layout/IntrinsicMinMax; +HSPLandroidx/compose/ui/layout/IntrinsicMinMax;->()V +HSPLandroidx/compose/ui/layout/IntrinsicMinMax;->(Ljava/lang/String;I)V +Landroidx/compose/ui/layout/IntrinsicWidthHeight; +HSPLandroidx/compose/ui/layout/IntrinsicWidthHeight;->$values()[Landroidx/compose/ui/layout/IntrinsicWidthHeight; +HSPLandroidx/compose/ui/layout/IntrinsicWidthHeight;->()V +HSPLandroidx/compose/ui/layout/IntrinsicWidthHeight;->(Ljava/lang/String;I)V +Landroidx/compose/ui/layout/IntrinsicsMeasureScope; +HSPLandroidx/compose/ui/layout/IntrinsicsMeasureScope;->(Landroidx/compose/ui/layout/IntrinsicMeasureScope;Landroidx/compose/ui/unit/LayoutDirection;)V +Landroidx/compose/ui/layout/LayoutCoordinates; +HSPLandroidx/compose/ui/layout/LayoutCoordinates;->localBoundingBoxOf$default(Landroidx/compose/ui/layout/LayoutCoordinates;Landroidx/compose/ui/layout/LayoutCoordinates;ZILjava/lang/Object;)Landroidx/compose/ui/geometry/Rect; +Landroidx/compose/ui/layout/LayoutCoordinatesKt; +HSPLandroidx/compose/ui/layout/LayoutCoordinatesKt;->boundsInRoot(Landroidx/compose/ui/layout/LayoutCoordinates;)Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/ui/layout/LayoutCoordinatesKt;->boundsInWindow(Landroidx/compose/ui/layout/LayoutCoordinates;)Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/ui/layout/LayoutCoordinatesKt;->findRootCoordinates(Landroidx/compose/ui/layout/LayoutCoordinates;)Landroidx/compose/ui/layout/LayoutCoordinates; +HSPLandroidx/compose/ui/layout/LayoutCoordinatesKt;->positionInRoot(Landroidx/compose/ui/layout/LayoutCoordinates;)J +HSPLandroidx/compose/ui/layout/LayoutCoordinatesKt;->positionInWindow(Landroidx/compose/ui/layout/LayoutCoordinates;)J +Landroidx/compose/ui/layout/LayoutElement; +HSPLandroidx/compose/ui/layout/LayoutElement;->(Lkotlin/jvm/functions/Function3;)V +HSPLandroidx/compose/ui/layout/LayoutElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/layout/LayoutElement;->create()Landroidx/compose/ui/layout/LayoutModifierImpl; +HSPLandroidx/compose/ui/layout/LayoutElement;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/layout/LayoutElement;->update(Landroidx/compose/ui/Modifier$Node;)V +HSPLandroidx/compose/ui/layout/LayoutElement;->update(Landroidx/compose/ui/layout/LayoutModifierImpl;)V +Landroidx/compose/ui/layout/LayoutIdElement; +HSPLandroidx/compose/ui/layout/LayoutIdElement;->(Ljava/lang/Object;)V +HSPLandroidx/compose/ui/layout/LayoutIdElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/layout/LayoutIdElement;->create()Landroidx/compose/ui/layout/LayoutIdModifier; +HSPLandroidx/compose/ui/layout/LayoutIdElement;->equals(Ljava/lang/Object;)Z +Landroidx/compose/ui/layout/LayoutIdKt; +HSPLandroidx/compose/ui/layout/LayoutIdKt;->getLayoutId(Landroidx/compose/ui/layout/Measurable;)Ljava/lang/Object; +HSPLandroidx/compose/ui/layout/LayoutIdKt;->layoutId(Landroidx/compose/ui/Modifier;Ljava/lang/Object;)Landroidx/compose/ui/Modifier; +Landroidx/compose/ui/layout/LayoutIdModifier; +HSPLandroidx/compose/ui/layout/LayoutIdModifier;->(Ljava/lang/Object;)V +HSPLandroidx/compose/ui/layout/LayoutIdModifier;->getLayoutId()Ljava/lang/Object; +HSPLandroidx/compose/ui/layout/LayoutIdModifier;->modifyParentData(Landroidx/compose/ui/unit/Density;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/layout/LayoutIdParentData; +Landroidx/compose/ui/layout/LayoutInfo; +Landroidx/compose/ui/layout/LayoutKt; +HSPLandroidx/compose/ui/layout/LayoutKt;->materializerOf(Landroidx/compose/ui/Modifier;)Lkotlin/jvm/functions/Function3; +HSPLandroidx/compose/ui/layout/LayoutKt;->modifierMaterializerOf(Landroidx/compose/ui/Modifier;)Lkotlin/jvm/functions/Function3; +Landroidx/compose/ui/layout/LayoutKt$materializerOf$1; +HSPLandroidx/compose/ui/layout/LayoutKt$materializerOf$1;->(Landroidx/compose/ui/Modifier;)V +HSPLandroidx/compose/ui/layout/LayoutKt$materializerOf$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/ui/layout/LayoutKt$materializerOf$1;->invoke-Deg8D_g(Landroidx/compose/runtime/Composer;Landroidx/compose/runtime/Composer;I)V +Landroidx/compose/ui/layout/LayoutKt$materializerOfWithCompositionLocalInjection$1; +HSPLandroidx/compose/ui/layout/LayoutKt$materializerOfWithCompositionLocalInjection$1;->(Landroidx/compose/ui/Modifier;)V +HSPLandroidx/compose/ui/layout/LayoutKt$materializerOfWithCompositionLocalInjection$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/ui/layout/LayoutKt$materializerOfWithCompositionLocalInjection$1;->invoke-Deg8D_g(Landroidx/compose/runtime/Composer;Landroidx/compose/runtime/Composer;I)V +Landroidx/compose/ui/layout/LayoutModifier; +Landroidx/compose/ui/layout/LayoutModifierImpl; +HSPLandroidx/compose/ui/layout/LayoutModifierImpl;->(Lkotlin/jvm/functions/Function3;)V +HSPLandroidx/compose/ui/layout/LayoutModifierImpl;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; +HSPLandroidx/compose/ui/layout/LayoutModifierImpl;->setMeasureBlock(Lkotlin/jvm/functions/Function3;)V +Landroidx/compose/ui/layout/LayoutModifierKt; +HSPLandroidx/compose/ui/layout/LayoutModifierKt;->layout(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function3;)Landroidx/compose/ui/Modifier; +Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState; +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy;)V +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->access$getCurrentIndex$p(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)I +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->access$getIntermediateMeasureScope$p(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$IntermediateMeasureScopeImpl; +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->access$getRoot$p(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)Landroidx/compose/ui/node/LayoutNode; +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->access$getScope$p(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope; +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->access$setCurrentIndex$p(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;I)V +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->createMeasurePolicy(Lkotlin/jvm/functions/Function2;)Landroidx/compose/ui/layout/MeasurePolicy; +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->createNodeAt(I)Landroidx/compose/ui/node/LayoutNode; +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->disposeOrReuseStartingFromIndex(I)V +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->forceRecomposeChildren()V +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->getSlotIdAtIndex(I)Ljava/lang/Object; +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->makeSureStateIsConsistent()V +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->setCompositionContext(Landroidx/compose/runtime/CompositionContext;)V +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->setIntermediateMeasurePolicy$ui_release(Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->setSlotReusePolicy(Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy;)V +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->subcompose(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;)V +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->subcompose(Landroidx/compose/ui/node/LayoutNode;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->subcompose(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/util/List; +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->subcomposeInto(Landroidx/compose/runtime/Composition;Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/runtime/CompositionContext;Lkotlin/jvm/functions/Function2;)Landroidx/compose/runtime/Composition; +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->takeNodeFromReusables(Ljava/lang/Object;)Landroidx/compose/ui/node/LayoutNode; +Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$IntermediateMeasureScopeImpl; +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$IntermediateMeasureScopeImpl;->(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)V +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$IntermediateMeasureScopeImpl;->setLookaheadConstraints-BRTryo0(J)V +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$IntermediateMeasureScopeImpl;->setLookaheadMeasurePolicy(Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$IntermediateMeasureScopeImpl;->setLookaheadSize-ozmzZPI(J)V +Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState; +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composition;)V +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composition;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->getActive()Z +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->getComposition()Landroidx/compose/runtime/Composition; +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->getContent()Lkotlin/jvm/functions/Function2; +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->getForceRecompose()Z +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->getSlotId()Ljava/lang/Object; +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->setActive(Z)V +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->setComposition(Landroidx/compose/runtime/Composition;)V +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->setContent(Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->setForceRecompose(Z)V +Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope; +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)V +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->getDensity()F +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection; +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->setDensity(F)V +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->setFontScale(F)V +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->setLayoutDirection(Landroidx/compose/ui/unit/LayoutDirection;)V +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->subcompose(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/util/List; +Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1; +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1;->(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;Lkotlin/jvm/functions/Function2;Ljava/lang/String;)V +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; +Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure$1; +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure$1;->(Landroidx/compose/ui/layout/MeasureResult;Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;I)V +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure$1;->getAlignmentLines()Ljava/util/Map; +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure$1;->getHeight()I +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure$1;->getWidth()I +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure$1;->placeChildren()V +Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$intermediateMeasurePolicy$1; +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$intermediateMeasurePolicy$1;->()V +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$intermediateMeasurePolicy$1;->()V +Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$subcompose$3$1$1; +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$subcompose$3$1$1;->(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$subcompose$3$1$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$subcompose$3$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/layout/LookaheadLayoutCoordinates; +Landroidx/compose/ui/layout/LookaheadLayoutCoordinatesImpl; +Landroidx/compose/ui/layout/Measurable; +Landroidx/compose/ui/layout/MeasurePolicy; +HSPLandroidx/compose/ui/layout/MeasurePolicy;->maxIntrinsicWidth(Landroidx/compose/ui/layout/IntrinsicMeasureScope;Ljava/util/List;I)I +Landroidx/compose/ui/layout/MeasureResult; +Landroidx/compose/ui/layout/MeasureScope; +HSPLandroidx/compose/ui/layout/MeasureScope;->layout$default(Landroidx/compose/ui/layout/MeasureScope;IILjava/util/Map;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Landroidx/compose/ui/layout/MeasureResult; +HSPLandroidx/compose/ui/layout/MeasureScope;->layout(IILjava/util/Map;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/layout/MeasureResult; +Landroidx/compose/ui/layout/MeasureScope$layout$1; +HSPLandroidx/compose/ui/layout/MeasureScope$layout$1;->(IILjava/util/Map;Landroidx/compose/ui/layout/MeasureScope;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/layout/MeasureScope$layout$1;->getAlignmentLines()Ljava/util/Map; +HSPLandroidx/compose/ui/layout/MeasureScope$layout$1;->getHeight()I +HSPLandroidx/compose/ui/layout/MeasureScope$layout$1;->getWidth()I +HSPLandroidx/compose/ui/layout/MeasureScope$layout$1;->placeChildren()V +Landroidx/compose/ui/layout/Measured; +Landroidx/compose/ui/layout/NoOpSubcomposeSlotReusePolicy; +HSPLandroidx/compose/ui/layout/NoOpSubcomposeSlotReusePolicy;->()V +HSPLandroidx/compose/ui/layout/NoOpSubcomposeSlotReusePolicy;->()V +Landroidx/compose/ui/layout/OnGloballyPositionedElement; +HSPLandroidx/compose/ui/layout/OnGloballyPositionedElement;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/layout/OnGloballyPositionedElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/layout/OnGloballyPositionedElement;->create()Landroidx/compose/ui/layout/OnGloballyPositionedNode; +HSPLandroidx/compose/ui/layout/OnGloballyPositionedElement;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/layout/OnGloballyPositionedElement;->update(Landroidx/compose/ui/Modifier$Node;)V +HSPLandroidx/compose/ui/layout/OnGloballyPositionedElement;->update(Landroidx/compose/ui/layout/OnGloballyPositionedNode;)V +Landroidx/compose/ui/layout/OnGloballyPositionedModifier; +Landroidx/compose/ui/layout/OnGloballyPositionedModifierKt; +HSPLandroidx/compose/ui/layout/OnGloballyPositionedModifierKt;->onGloballyPositioned(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; +Landroidx/compose/ui/layout/OnGloballyPositionedNode; +HSPLandroidx/compose/ui/layout/OnGloballyPositionedNode;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/layout/OnGloballyPositionedNode;->onGloballyPositioned(Landroidx/compose/ui/layout/LayoutCoordinates;)V +HSPLandroidx/compose/ui/layout/OnGloballyPositionedNode;->setCallback(Lkotlin/jvm/functions/Function1;)V +Landroidx/compose/ui/layout/OnPlacedModifier; +Landroidx/compose/ui/layout/OnRemeasuredModifier; +Landroidx/compose/ui/layout/OnRemeasuredModifierKt; +HSPLandroidx/compose/ui/layout/OnRemeasuredModifierKt;->onSizeChanged(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; +Landroidx/compose/ui/layout/OnSizeChangedModifier; +HSPLandroidx/compose/ui/layout/OnSizeChangedModifier;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/layout/OnSizeChangedModifier;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/layout/OnSizeChangedModifier;->onRemeasured-ozmzZPI(J)V +Landroidx/compose/ui/layout/ParentDataModifier; +Landroidx/compose/ui/layout/PinnableContainer; +Landroidx/compose/ui/layout/PinnableContainer$PinnedHandle; +Landroidx/compose/ui/layout/PinnableContainerKt; +HSPLandroidx/compose/ui/layout/PinnableContainerKt;->()V +HSPLandroidx/compose/ui/layout/PinnableContainerKt;->getLocalPinnableContainer()Landroidx/compose/runtime/ProvidableCompositionLocal; +Landroidx/compose/ui/layout/PinnableContainerKt$LocalPinnableContainer$1; +HSPLandroidx/compose/ui/layout/PinnableContainerKt$LocalPinnableContainer$1;->()V +HSPLandroidx/compose/ui/layout/PinnableContainerKt$LocalPinnableContainer$1;->()V +HSPLandroidx/compose/ui/layout/PinnableContainerKt$LocalPinnableContainer$1;->invoke()Landroidx/compose/ui/layout/PinnableContainer; +HSPLandroidx/compose/ui/layout/PinnableContainerKt$LocalPinnableContainer$1;->invoke()Ljava/lang/Object; +Landroidx/compose/ui/layout/Placeable; +HSPLandroidx/compose/ui/layout/Placeable;->()V +HSPLandroidx/compose/ui/layout/Placeable;->()V +HSPLandroidx/compose/ui/layout/Placeable;->access$getApparentToRealOffset-nOcc-ac(Landroidx/compose/ui/layout/Placeable;)J +HSPLandroidx/compose/ui/layout/Placeable;->access$placeAt-f8xVGno(Landroidx/compose/ui/layout/Placeable;JFLkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/layout/Placeable;->getApparentToRealOffset-nOcc-ac()J +HSPLandroidx/compose/ui/layout/Placeable;->getHeight()I +HSPLandroidx/compose/ui/layout/Placeable;->getMeasuredHeight()I +HSPLandroidx/compose/ui/layout/Placeable;->getMeasuredSize-YbymL2g()J +HSPLandroidx/compose/ui/layout/Placeable;->getMeasuredWidth()I +HSPLandroidx/compose/ui/layout/Placeable;->getMeasurementConstraints-msEJaDk()J +HSPLandroidx/compose/ui/layout/Placeable;->getWidth()I +HSPLandroidx/compose/ui/layout/Placeable;->onMeasuredSizeChanged()V +HSPLandroidx/compose/ui/layout/Placeable;->setMeasuredSize-ozmzZPI(J)V +HSPLandroidx/compose/ui/layout/Placeable;->setMeasurementConstraints-BRTryo0(J)V +Landroidx/compose/ui/layout/Placeable$PlacementScope; +HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->()V +HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->()V +HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->access$getLayoutDelegate$cp()Landroidx/compose/ui/node/LayoutNodeLayoutDelegate; +HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->access$getParentLayoutDirection$cp()Landroidx/compose/ui/unit/LayoutDirection; +HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->access$getParentLayoutDirection(Landroidx/compose/ui/layout/Placeable$PlacementScope;)Landroidx/compose/ui/unit/LayoutDirection; +HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->access$getParentWidth$cp()I +HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->access$get_coordinates$cp()Landroidx/compose/ui/layout/LayoutCoordinates; +HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->access$setLayoutDelegate$cp(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;)V +HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->access$setParentLayoutDirection$cp(Landroidx/compose/ui/unit/LayoutDirection;)V +HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->access$setParentWidth$cp(I)V +HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->access$set_coordinates$cp(Landroidx/compose/ui/layout/LayoutCoordinates;)V +HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->place$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;IIFILjava/lang/Object;)V +HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->place(Landroidx/compose/ui/layout/Placeable;IIF)V +HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->place-70tqf50$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;JFILjava/lang/Object;)V +HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->place-70tqf50(Landroidx/compose/ui/layout/Placeable;JF)V +HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeRelative$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;IIFILjava/lang/Object;)V +HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeRelative(Landroidx/compose/ui/layout/Placeable;IIF)V +HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeRelativeWithLayer$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;IIFLkotlin/jvm/functions/Function1;ILjava/lang/Object;)V +HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeRelativeWithLayer(Landroidx/compose/ui/layout/Placeable;IIFLkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeWithLayer$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;IIFLkotlin/jvm/functions/Function1;ILjava/lang/Object;)V +HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeWithLayer(Landroidx/compose/ui/layout/Placeable;IIFLkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeWithLayer-aW-9-wM$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;JFLkotlin/jvm/functions/Function1;ILjava/lang/Object;)V +HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeWithLayer-aW-9-wM(Landroidx/compose/ui/layout/Placeable;JFLkotlin/jvm/functions/Function1;)V +Landroidx/compose/ui/layout/Placeable$PlacementScope$Companion; +HSPLandroidx/compose/ui/layout/Placeable$PlacementScope$Companion;->()V +HSPLandroidx/compose/ui/layout/Placeable$PlacementScope$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/layout/Placeable$PlacementScope$Companion;->access$configureForPlacingForAlignment(Landroidx/compose/ui/layout/Placeable$PlacementScope$Companion;Landroidx/compose/ui/node/LookaheadCapablePlaceable;)Z +HSPLandroidx/compose/ui/layout/Placeable$PlacementScope$Companion;->access$getParentLayoutDirection(Landroidx/compose/ui/layout/Placeable$PlacementScope$Companion;)Landroidx/compose/ui/unit/LayoutDirection; +HSPLandroidx/compose/ui/layout/Placeable$PlacementScope$Companion;->access$getParentWidth(Landroidx/compose/ui/layout/Placeable$PlacementScope$Companion;)I +HSPLandroidx/compose/ui/layout/Placeable$PlacementScope$Companion;->configureForPlacingForAlignment(Landroidx/compose/ui/node/LookaheadCapablePlaceable;)Z +HSPLandroidx/compose/ui/layout/Placeable$PlacementScope$Companion;->getParentLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection; +HSPLandroidx/compose/ui/layout/Placeable$PlacementScope$Companion;->getParentWidth()I +Landroidx/compose/ui/layout/PlaceableKt; +HSPLandroidx/compose/ui/layout/PlaceableKt;->()V +HSPLandroidx/compose/ui/layout/PlaceableKt;->access$getDefaultConstraints$p()J +HSPLandroidx/compose/ui/layout/PlaceableKt;->access$getDefaultLayerBlock$p()Lkotlin/jvm/functions/Function1; +Landroidx/compose/ui/layout/PlaceableKt$DefaultLayerBlock$1; +HSPLandroidx/compose/ui/layout/PlaceableKt$DefaultLayerBlock$1;->()V +HSPLandroidx/compose/ui/layout/PlaceableKt$DefaultLayerBlock$1;->()V +HSPLandroidx/compose/ui/layout/PlaceableKt$DefaultLayerBlock$1;->invoke(Landroidx/compose/ui/graphics/GraphicsLayerScope;)V +HSPLandroidx/compose/ui/layout/PlaceableKt$DefaultLayerBlock$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/layout/Remeasurement; +Landroidx/compose/ui/layout/RemeasurementModifier; +Landroidx/compose/ui/layout/RootMeasurePolicy; +HSPLandroidx/compose/ui/layout/RootMeasurePolicy;->()V +HSPLandroidx/compose/ui/layout/RootMeasurePolicy;->()V +HSPLandroidx/compose/ui/layout/RootMeasurePolicy;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; +Landroidx/compose/ui/layout/RootMeasurePolicy$measure$2; +HSPLandroidx/compose/ui/layout/RootMeasurePolicy$measure$2;->(Landroidx/compose/ui/layout/Placeable;)V +HSPLandroidx/compose/ui/layout/RootMeasurePolicy$measure$2;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/ui/layout/RootMeasurePolicy$measure$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/layout/ScaleFactor; +HSPLandroidx/compose/ui/layout/ScaleFactor;->()V +HSPLandroidx/compose/ui/layout/ScaleFactor;->constructor-impl(J)J +HSPLandroidx/compose/ui/layout/ScaleFactor;->getScaleX-impl(J)F +HSPLandroidx/compose/ui/layout/ScaleFactor;->getScaleY-impl(J)F +Landroidx/compose/ui/layout/ScaleFactor$Companion; +HSPLandroidx/compose/ui/layout/ScaleFactor$Companion;->()V +HSPLandroidx/compose/ui/layout/ScaleFactor$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/layout/ScaleFactorKt; +HSPLandroidx/compose/ui/layout/ScaleFactorKt;->ScaleFactor(FF)J +HSPLandroidx/compose/ui/layout/ScaleFactorKt;->times-UQTWf7w(JJ)J +Landroidx/compose/ui/layout/SubcomposeIntermediateMeasureScope; +Landroidx/compose/ui/layout/SubcomposeLayoutKt; +HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt;->SubcomposeLayout(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V +HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt;->SubcomposeLayout(Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V +HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt;->SubcomposeLayout(Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V +Landroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$$inlined$ComposeNode$1; +HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$$inlined$ComposeNode$1;->(Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$$inlined$ComposeNode$1;->invoke()Ljava/lang/Object; +Landroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$10; +HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$10;->(Landroidx/compose/ui/layout/SubcomposeLayoutState;)V +HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$10;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$10;->invoke()V +Landroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$11$1; +HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$11$1;->(Landroidx/compose/runtime/State;)V +HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$11$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult; +HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$11$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$11$1$invoke$$inlined$onDispose$1; +HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$11$1$invoke$$inlined$onDispose$1;->(Landroidx/compose/runtime/State;)V +Landroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$12; +HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$12;->(Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;II)V +Landroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$6; +HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$6;->()V +HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$6;->()V +Landroidx/compose/ui/layout/SubcomposeLayoutState; +HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->()V +HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->()V +HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->(Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy;)V +HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->access$getSlotReusePolicy$p(Landroidx/compose/ui/layout/SubcomposeLayoutState;)Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy; +HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->access$getState(Landroidx/compose/ui/layout/SubcomposeLayoutState;)Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState; +HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->access$set_state$p(Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)V +HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->forceRecomposeChildren$ui_release()V +HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->getSetCompositionContext$ui_release()Lkotlin/jvm/functions/Function2; +HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->getSetIntermediateMeasurePolicy$ui_release()Lkotlin/jvm/functions/Function2; +HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->getSetMeasurePolicy$ui_release()Lkotlin/jvm/functions/Function2; +HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->getSetRoot$ui_release()Lkotlin/jvm/functions/Function2; +HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->getState()Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState; +Landroidx/compose/ui/layout/SubcomposeLayoutState$setCompositionContext$1; +HSPLandroidx/compose/ui/layout/SubcomposeLayoutState$setCompositionContext$1;->(Landroidx/compose/ui/layout/SubcomposeLayoutState;)V +HSPLandroidx/compose/ui/layout/SubcomposeLayoutState$setCompositionContext$1;->invoke(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/runtime/CompositionContext;)V +HSPLandroidx/compose/ui/layout/SubcomposeLayoutState$setCompositionContext$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/layout/SubcomposeLayoutState$setIntermediateMeasurePolicy$1; +HSPLandroidx/compose/ui/layout/SubcomposeLayoutState$setIntermediateMeasurePolicy$1;->(Landroidx/compose/ui/layout/SubcomposeLayoutState;)V +HSPLandroidx/compose/ui/layout/SubcomposeLayoutState$setIntermediateMeasurePolicy$1;->invoke(Landroidx/compose/ui/node/LayoutNode;Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/ui/layout/SubcomposeLayoutState$setIntermediateMeasurePolicy$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/layout/SubcomposeLayoutState$setMeasurePolicy$1; +HSPLandroidx/compose/ui/layout/SubcomposeLayoutState$setMeasurePolicy$1;->(Landroidx/compose/ui/layout/SubcomposeLayoutState;)V +HSPLandroidx/compose/ui/layout/SubcomposeLayoutState$setMeasurePolicy$1;->invoke(Landroidx/compose/ui/node/LayoutNode;Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/ui/layout/SubcomposeLayoutState$setMeasurePolicy$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/layout/SubcomposeLayoutState$setRoot$1; +HSPLandroidx/compose/ui/layout/SubcomposeLayoutState$setRoot$1;->(Landroidx/compose/ui/layout/SubcomposeLayoutState;)V +HSPLandroidx/compose/ui/layout/SubcomposeLayoutState$setRoot$1;->invoke(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/layout/SubcomposeLayoutState;)V +HSPLandroidx/compose/ui/layout/SubcomposeLayoutState$setRoot$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/layout/SubcomposeMeasureScope; +Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy; +Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet; +HSPLandroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;->()V +HSPLandroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;->(Ljava/util/Set;)V +HSPLandroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;->(Ljava/util/Set;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;->add$ui_release(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;->clear()V +HSPLandroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;->contains(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;->iterator()Ljava/util/Iterator; +Landroidx/compose/ui/modifier/BackwardsCompatLocalMap; +HSPLandroidx/compose/ui/modifier/BackwardsCompatLocalMap;->(Landroidx/compose/ui/modifier/ModifierLocalProvider;)V +HSPLandroidx/compose/ui/modifier/BackwardsCompatLocalMap;->contains$ui_release(Landroidx/compose/ui/modifier/ModifierLocal;)Z +HSPLandroidx/compose/ui/modifier/BackwardsCompatLocalMap;->get$ui_release(Landroidx/compose/ui/modifier/ModifierLocal;)Ljava/lang/Object; +Landroidx/compose/ui/modifier/EmptyMap; +HSPLandroidx/compose/ui/modifier/EmptyMap;->()V +HSPLandroidx/compose/ui/modifier/EmptyMap;->()V +HSPLandroidx/compose/ui/modifier/EmptyMap;->contains$ui_release(Landroidx/compose/ui/modifier/ModifierLocal;)Z +Landroidx/compose/ui/modifier/ModifierLocal; +HSPLandroidx/compose/ui/modifier/ModifierLocal;->()V +HSPLandroidx/compose/ui/modifier/ModifierLocal;->(Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/ui/modifier/ModifierLocal;->(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/modifier/ModifierLocal;->getDefaultFactory$ui_release()Lkotlin/jvm/functions/Function0; +Landroidx/compose/ui/modifier/ModifierLocalConsumer; +Landroidx/compose/ui/modifier/ModifierLocalKt; +HSPLandroidx/compose/ui/modifier/ModifierLocalKt;->modifierLocalOf(Lkotlin/jvm/functions/Function0;)Landroidx/compose/ui/modifier/ProvidableModifierLocal; +Landroidx/compose/ui/modifier/ModifierLocalManager; +HSPLandroidx/compose/ui/modifier/ModifierLocalManager;->(Landroidx/compose/ui/node/Owner;)V +HSPLandroidx/compose/ui/modifier/ModifierLocalManager;->invalidate()V +HSPLandroidx/compose/ui/modifier/ModifierLocalManager;->removedProvider(Landroidx/compose/ui/node/BackwardsCompatNode;Landroidx/compose/ui/modifier/ModifierLocal;)V +HSPLandroidx/compose/ui/modifier/ModifierLocalManager;->triggerUpdates()V +Landroidx/compose/ui/modifier/ModifierLocalManager$invalidate$1; +HSPLandroidx/compose/ui/modifier/ModifierLocalManager$invalidate$1;->(Landroidx/compose/ui/modifier/ModifierLocalManager;)V +HSPLandroidx/compose/ui/modifier/ModifierLocalManager$invalidate$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/ui/modifier/ModifierLocalManager$invalidate$1;->invoke()V +Landroidx/compose/ui/modifier/ModifierLocalMap; +HSPLandroidx/compose/ui/modifier/ModifierLocalMap;->()V +HSPLandroidx/compose/ui/modifier/ModifierLocalMap;->()V +HSPLandroidx/compose/ui/modifier/ModifierLocalMap;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/modifier/ModifierLocalModifierNode; +HSPLandroidx/compose/ui/modifier/ModifierLocalModifierNode;->getCurrent(Landroidx/compose/ui/modifier/ModifierLocal;)Ljava/lang/Object; +HSPLandroidx/compose/ui/modifier/ModifierLocalModifierNode;->getProvidedValues()Landroidx/compose/ui/modifier/ModifierLocalMap; +Landroidx/compose/ui/modifier/ModifierLocalModifierNodeKt; +PLandroidx/compose/ui/modifier/ModifierLocalModifierNodeKt;->modifierLocalMapOf()Landroidx/compose/ui/modifier/ModifierLocalMap; +HSPLandroidx/compose/ui/modifier/ModifierLocalModifierNodeKt;->modifierLocalMapOf(Lkotlin/Pair;)Landroidx/compose/ui/modifier/ModifierLocalMap; +Landroidx/compose/ui/modifier/ModifierLocalProvider; +Landroidx/compose/ui/modifier/ModifierLocalReadScope; +Landroidx/compose/ui/modifier/ProvidableModifierLocal; +HSPLandroidx/compose/ui/modifier/ProvidableModifierLocal;->()V +HSPLandroidx/compose/ui/modifier/ProvidableModifierLocal;->(Lkotlin/jvm/functions/Function0;)V +Landroidx/compose/ui/modifier/SingleLocalMap; +HSPLandroidx/compose/ui/modifier/SingleLocalMap;->(Landroidx/compose/ui/modifier/ModifierLocal;)V +HSPLandroidx/compose/ui/modifier/SingleLocalMap;->contains$ui_release(Landroidx/compose/ui/modifier/ModifierLocal;)Z +HSPLandroidx/compose/ui/modifier/SingleLocalMap;->get$ui_release(Landroidx/compose/ui/modifier/ModifierLocal;)Ljava/lang/Object; +HSPLandroidx/compose/ui/modifier/SingleLocalMap;->getValue()Ljava/lang/Object; +HSPLandroidx/compose/ui/modifier/SingleLocalMap;->set$ui_release(Landroidx/compose/ui/modifier/ModifierLocal;Ljava/lang/Object;)V +HSPLandroidx/compose/ui/modifier/SingleLocalMap;->setValue(Ljava/lang/Object;)V +Landroidx/compose/ui/node/AlignmentLines; +HSPLandroidx/compose/ui/node/AlignmentLines;->(Landroidx/compose/ui/node/AlignmentLinesOwner;)V +HSPLandroidx/compose/ui/node/AlignmentLines;->(Landroidx/compose/ui/node/AlignmentLinesOwner;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/node/AlignmentLines;->getDirty$ui_release()Z +HSPLandroidx/compose/ui/node/AlignmentLines;->getQueried$ui_release()Z +HSPLandroidx/compose/ui/node/AlignmentLines;->getRequired$ui_release()Z +HSPLandroidx/compose/ui/node/AlignmentLines;->getUsedDuringParentLayout$ui_release()Z +HSPLandroidx/compose/ui/node/AlignmentLines;->onAlignmentsChanged()V +HSPLandroidx/compose/ui/node/AlignmentLines;->recalculateQueryOwner()V +HSPLandroidx/compose/ui/node/AlignmentLines;->reset$ui_release()V +HSPLandroidx/compose/ui/node/AlignmentLines;->setPreviousUsedDuringParentLayout$ui_release(Z)V +HSPLandroidx/compose/ui/node/AlignmentLines;->setUsedByModifierLayout$ui_release(Z)V +HSPLandroidx/compose/ui/node/AlignmentLines;->setUsedByModifierMeasurement$ui_release(Z)V +HSPLandroidx/compose/ui/node/AlignmentLines;->setUsedDuringParentLayout$ui_release(Z)V +HSPLandroidx/compose/ui/node/AlignmentLines;->setUsedDuringParentMeasurement$ui_release(Z)V +Landroidx/compose/ui/node/AlignmentLinesOwner; +Landroidx/compose/ui/node/BackwardsCompatNode; +HSPLandroidx/compose/ui/node/BackwardsCompatNode;->(Landroidx/compose/ui/Modifier$Element;)V +HSPLandroidx/compose/ui/node/BackwardsCompatNode;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V +HSPLandroidx/compose/ui/node/BackwardsCompatNode;->getCurrent(Landroidx/compose/ui/modifier/ModifierLocal;)Ljava/lang/Object; +HSPLandroidx/compose/ui/node/BackwardsCompatNode;->getElement()Landroidx/compose/ui/Modifier$Element; +HSPLandroidx/compose/ui/node/BackwardsCompatNode;->getProvidedValues()Landroidx/compose/ui/modifier/ModifierLocalMap; +HSPLandroidx/compose/ui/node/BackwardsCompatNode;->initializeModifier(Z)V +HSPLandroidx/compose/ui/node/BackwardsCompatNode;->isValidOwnerScope()Z +HSPLandroidx/compose/ui/node/BackwardsCompatNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; +HSPLandroidx/compose/ui/node/BackwardsCompatNode;->modifyParentData(Landroidx/compose/ui/unit/Density;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onAttach()V +HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onDetach()V +HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onGloballyPositioned(Landroidx/compose/ui/layout/LayoutCoordinates;)V +HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onMeasureResultChanged()V +HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onPlaced(Landroidx/compose/ui/layout/LayoutCoordinates;)V +HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onRemeasured-ozmzZPI(J)V +HSPLandroidx/compose/ui/node/BackwardsCompatNode;->setElement(Landroidx/compose/ui/Modifier$Element;)V +HSPLandroidx/compose/ui/node/BackwardsCompatNode;->unInitializeModifier()V +HSPLandroidx/compose/ui/node/BackwardsCompatNode;->updateModifierLocalConsumer()V +HSPLandroidx/compose/ui/node/BackwardsCompatNode;->updateModifierLocalProvider(Landroidx/compose/ui/modifier/ModifierLocalProvider;)V +Landroidx/compose/ui/node/BackwardsCompatNode$initializeModifier$1; +HSPLandroidx/compose/ui/node/BackwardsCompatNode$initializeModifier$1;->(Landroidx/compose/ui/node/BackwardsCompatNode;)V +HSPLandroidx/compose/ui/node/BackwardsCompatNode$initializeModifier$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/ui/node/BackwardsCompatNode$initializeModifier$1;->invoke()V +Landroidx/compose/ui/node/BackwardsCompatNode$updateModifierLocalConsumer$1; +HSPLandroidx/compose/ui/node/BackwardsCompatNode$updateModifierLocalConsumer$1;->(Landroidx/compose/ui/node/BackwardsCompatNode;)V +HSPLandroidx/compose/ui/node/BackwardsCompatNode$updateModifierLocalConsumer$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/ui/node/BackwardsCompatNode$updateModifierLocalConsumer$1;->invoke()V +Landroidx/compose/ui/node/BackwardsCompatNodeKt; +HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt;->()V +HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt;->access$getDetachedModifierLocalReadScope$p()Landroidx/compose/ui/node/BackwardsCompatNodeKt$DetachedModifierLocalReadScope$1; +HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt;->access$getUpdateModifierLocalConsumer$p()Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt;->access$isChainUpdate(Landroidx/compose/ui/node/BackwardsCompatNode;)Z +HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt;->isChainUpdate(Landroidx/compose/ui/node/BackwardsCompatNode;)Z +Landroidx/compose/ui/node/BackwardsCompatNodeKt$DetachedModifierLocalReadScope$1; +HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$DetachedModifierLocalReadScope$1;->()V +HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$DetachedModifierLocalReadScope$1;->getCurrent(Landroidx/compose/ui/modifier/ModifierLocal;)Ljava/lang/Object; +Landroidx/compose/ui/node/BackwardsCompatNodeKt$onDrawCacheReadsChanged$1; +HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$onDrawCacheReadsChanged$1;->()V +HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$onDrawCacheReadsChanged$1;->()V +Landroidx/compose/ui/node/BackwardsCompatNodeKt$updateModifierLocalConsumer$1; +HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$updateModifierLocalConsumer$1;->()V +HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$updateModifierLocalConsumer$1;->()V +HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$updateModifierLocalConsumer$1;->invoke(Landroidx/compose/ui/node/BackwardsCompatNode;)V +HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$updateModifierLocalConsumer$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/node/CanFocusChecker; +HSPLandroidx/compose/ui/node/CanFocusChecker;->()V +HSPLandroidx/compose/ui/node/CanFocusChecker;->()V +HSPLandroidx/compose/ui/node/CanFocusChecker;->isCanFocusSet()Z +HSPLandroidx/compose/ui/node/CanFocusChecker;->reset()V +HSPLandroidx/compose/ui/node/CanFocusChecker;->setCanFocus(Z)V +Landroidx/compose/ui/node/CenteredArray; +HSPLandroidx/compose/ui/node/CenteredArray;->constructor-impl([I)[I +HSPLandroidx/compose/ui/node/CenteredArray;->get-impl([II)I +HSPLandroidx/compose/ui/node/CenteredArray;->getMid-impl([I)I +HSPLandroidx/compose/ui/node/CenteredArray;->set-impl([III)V +Landroidx/compose/ui/node/ComposeUiNode; +HSPLandroidx/compose/ui/node/ComposeUiNode;->()V +Landroidx/compose/ui/node/ComposeUiNode$Companion; +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion;->()V +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion;->()V +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion;->getConstructor()Lkotlin/jvm/functions/Function0; +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion;->getSetCompositeKeyHash()Lkotlin/jvm/functions/Function2; +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion;->getSetDensity()Lkotlin/jvm/functions/Function2; +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion;->getSetLayoutDirection()Lkotlin/jvm/functions/Function2; +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion;->getSetMeasurePolicy()Lkotlin/jvm/functions/Function2; +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion;->getSetModifier()Lkotlin/jvm/functions/Function2; +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion;->getSetResolvedCompositionLocals()Lkotlin/jvm/functions/Function2; +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion;->getSetViewConfiguration()Lkotlin/jvm/functions/Function2; +Landroidx/compose/ui/node/ComposeUiNode$Companion$SetCompositeKeyHash$1; +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetCompositeKeyHash$1;->()V +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetCompositeKeyHash$1;->()V +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetCompositeKeyHash$1;->invoke(Landroidx/compose/ui/node/ComposeUiNode;I)V +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetCompositeKeyHash$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/node/ComposeUiNode$Companion$SetDensity$1; +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetDensity$1;->()V +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetDensity$1;->()V +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetDensity$1;->invoke(Landroidx/compose/ui/node/ComposeUiNode;Landroidx/compose/ui/unit/Density;)V +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetDensity$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/node/ComposeUiNode$Companion$SetLayoutDirection$1; +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetLayoutDirection$1;->()V +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetLayoutDirection$1;->()V +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetLayoutDirection$1;->invoke(Landroidx/compose/ui/node/ComposeUiNode;Landroidx/compose/ui/unit/LayoutDirection;)V +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetLayoutDirection$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/node/ComposeUiNode$Companion$SetMeasurePolicy$1; +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetMeasurePolicy$1;->()V +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetMeasurePolicy$1;->()V +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetMeasurePolicy$1;->invoke(Landroidx/compose/ui/node/ComposeUiNode;Landroidx/compose/ui/layout/MeasurePolicy;)V +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetMeasurePolicy$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/node/ComposeUiNode$Companion$SetModifier$1; +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetModifier$1;->()V +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetModifier$1;->()V +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetModifier$1;->invoke(Landroidx/compose/ui/node/ComposeUiNode;Landroidx/compose/ui/Modifier;)V +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetModifier$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/node/ComposeUiNode$Companion$SetResolvedCompositionLocals$1; +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetResolvedCompositionLocals$1;->()V +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetResolvedCompositionLocals$1;->()V +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetResolvedCompositionLocals$1;->invoke(Landroidx/compose/ui/node/ComposeUiNode;Landroidx/compose/runtime/CompositionLocalMap;)V +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetResolvedCompositionLocals$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/node/ComposeUiNode$Companion$SetViewConfiguration$1; +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetViewConfiguration$1;->()V +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetViewConfiguration$1;->()V +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetViewConfiguration$1;->invoke(Landroidx/compose/ui/node/ComposeUiNode;Landroidx/compose/ui/platform/ViewConfiguration;)V +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetViewConfiguration$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/node/ComposeUiNode$Companion$VirtualConstructor$1; +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$VirtualConstructor$1;->()V +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$VirtualConstructor$1;->()V +Landroidx/compose/ui/node/CompositionLocalConsumerModifierNode; +Landroidx/compose/ui/node/CompositionLocalConsumerModifierNodeKt; +HSPLandroidx/compose/ui/node/CompositionLocalConsumerModifierNodeKt;->currentValueOf(Landroidx/compose/ui/node/CompositionLocalConsumerModifierNode;Landroidx/compose/runtime/CompositionLocal;)Ljava/lang/Object; +Landroidx/compose/ui/node/DelegatableNode; +Landroidx/compose/ui/node/DelegatableNodeKt; +HSPLandroidx/compose/ui/node/DelegatableNodeKt;->access$addLayoutNodeChildren(Landroidx/compose/runtime/collection/MutableVector;Landroidx/compose/ui/Modifier$Node;)V +HSPLandroidx/compose/ui/node/DelegatableNodeKt;->access$pop(Landroidx/compose/runtime/collection/MutableVector;)Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/node/DelegatableNodeKt;->addLayoutNodeChildren(Landroidx/compose/runtime/collection/MutableVector;Landroidx/compose/ui/Modifier$Node;)V +HSPLandroidx/compose/ui/node/DelegatableNodeKt;->asLayoutModifierNode(Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/node/LayoutModifierNode; +HSPLandroidx/compose/ui/node/DelegatableNodeKt;->has-64DMado(Landroidx/compose/ui/node/DelegatableNode;I)Z +HSPLandroidx/compose/ui/node/DelegatableNodeKt;->isDelegationRoot(Landroidx/compose/ui/node/DelegatableNode;)Z +HSPLandroidx/compose/ui/node/DelegatableNodeKt;->pop(Landroidx/compose/runtime/collection/MutableVector;)Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/node/DelegatableNodeKt;->requireCoordinator-64DMado(Landroidx/compose/ui/node/DelegatableNode;I)Landroidx/compose/ui/node/NodeCoordinator; +HSPLandroidx/compose/ui/node/DelegatableNodeKt;->requireDensity(Landroidx/compose/ui/node/DelegatableNode;)Landroidx/compose/ui/unit/Density; +HSPLandroidx/compose/ui/node/DelegatableNodeKt;->requireLayoutDirection(Landroidx/compose/ui/node/DelegatableNode;)Landroidx/compose/ui/unit/LayoutDirection; +HSPLandroidx/compose/ui/node/DelegatableNodeKt;->requireLayoutNode(Landroidx/compose/ui/node/DelegatableNode;)Landroidx/compose/ui/node/LayoutNode; +HSPLandroidx/compose/ui/node/DelegatableNodeKt;->requireOwner(Landroidx/compose/ui/node/DelegatableNode;)Landroidx/compose/ui/node/Owner; +Landroidx/compose/ui/node/DelegatingNode; +HSPLandroidx/compose/ui/node/DelegatingNode;->()V +HSPLandroidx/compose/ui/node/DelegatingNode;->()V +HSPLandroidx/compose/ui/node/DelegatingNode;->delegate(Landroidx/compose/ui/node/DelegatableNode;)Landroidx/compose/ui/node/DelegatableNode; +HSPLandroidx/compose/ui/node/DelegatingNode;->getDelegate$ui_release()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/node/DelegatingNode;->getSelfKindSet$ui_release()I +HSPLandroidx/compose/ui/node/DelegatingNode;->markAsAttached$ui_release()V +HSPLandroidx/compose/ui/node/DelegatingNode;->markAsDetached$ui_release()V +HSPLandroidx/compose/ui/node/DelegatingNode;->reset$ui_release()V +HSPLandroidx/compose/ui/node/DelegatingNode;->runAttachLifecycle$ui_release()V +HSPLandroidx/compose/ui/node/DelegatingNode;->runDetachLifecycle$ui_release()V +HSPLandroidx/compose/ui/node/DelegatingNode;->updateCoordinator$ui_release(Landroidx/compose/ui/node/NodeCoordinator;)V +HSPLandroidx/compose/ui/node/DelegatingNode;->updateNodeKindSet(IZ)V +HSPLandroidx/compose/ui/node/DelegatingNode;->validateDelegateKindSet(ILandroidx/compose/ui/Modifier$Node;)V +Landroidx/compose/ui/node/DepthSortedSet; +HSPLandroidx/compose/ui/node/DepthSortedSet;->(Z)V +HSPLandroidx/compose/ui/node/DepthSortedSet;->add(Landroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/node/DepthSortedSet;->contains(Landroidx/compose/ui/node/LayoutNode;)Z +HSPLandroidx/compose/ui/node/DepthSortedSet;->isEmpty()Z +HSPLandroidx/compose/ui/node/DepthSortedSet;->pop()Landroidx/compose/ui/node/LayoutNode; +HSPLandroidx/compose/ui/node/DepthSortedSet;->remove(Landroidx/compose/ui/node/LayoutNode;)Z +Landroidx/compose/ui/node/DepthSortedSet$DepthComparator$1; +HSPLandroidx/compose/ui/node/DepthSortedSet$DepthComparator$1;->()V +HSPLandroidx/compose/ui/node/DepthSortedSet$DepthComparator$1;->compare(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/node/LayoutNode;)I +HSPLandroidx/compose/ui/node/DepthSortedSet$DepthComparator$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I +Landroidx/compose/ui/node/DepthSortedSet$mapOfOriginalDepth$2; +HSPLandroidx/compose/ui/node/DepthSortedSet$mapOfOriginalDepth$2;->()V +HSPLandroidx/compose/ui/node/DepthSortedSet$mapOfOriginalDepth$2;->()V +Landroidx/compose/ui/node/DepthSortedSetsForDifferentPasses; +HSPLandroidx/compose/ui/node/DepthSortedSetsForDifferentPasses;->(Z)V +HSPLandroidx/compose/ui/node/DepthSortedSetsForDifferentPasses;->access$getLookaheadSet$p(Landroidx/compose/ui/node/DepthSortedSetsForDifferentPasses;)Landroidx/compose/ui/node/DepthSortedSet; +HSPLandroidx/compose/ui/node/DepthSortedSetsForDifferentPasses;->access$getSet$p(Landroidx/compose/ui/node/DepthSortedSetsForDifferentPasses;)Landroidx/compose/ui/node/DepthSortedSet; +HSPLandroidx/compose/ui/node/DepthSortedSetsForDifferentPasses;->add(Landroidx/compose/ui/node/LayoutNode;Z)V +HSPLandroidx/compose/ui/node/DepthSortedSetsForDifferentPasses;->isEmpty()Z +HSPLandroidx/compose/ui/node/DepthSortedSetsForDifferentPasses;->isNotEmpty()Z +HSPLandroidx/compose/ui/node/DepthSortedSetsForDifferentPasses;->remove(Landroidx/compose/ui/node/LayoutNode;)Z +HSPLandroidx/compose/ui/node/DepthSortedSetsForDifferentPasses;->remove(Landroidx/compose/ui/node/LayoutNode;Z)Z +Landroidx/compose/ui/node/DiffCallback; +Landroidx/compose/ui/node/DistanceAndInLayer; +HSPLandroidx/compose/ui/node/DistanceAndInLayer;->compareTo-S_HNhKs(JJ)I +HSPLandroidx/compose/ui/node/DistanceAndInLayer;->constructor-impl(J)J +HSPLandroidx/compose/ui/node/DistanceAndInLayer;->getDistance-impl(J)F +HSPLandroidx/compose/ui/node/DistanceAndInLayer;->isInLayer-impl(J)Z +Landroidx/compose/ui/node/DrawModifierNode; +HSPLandroidx/compose/ui/node/DrawModifierNode;->onMeasureResultChanged()V +Landroidx/compose/ui/node/DrawModifierNodeKt; +HSPLandroidx/compose/ui/node/DrawModifierNodeKt;->invalidateDraw(Landroidx/compose/ui/node/DrawModifierNode;)V +Landroidx/compose/ui/node/ForceUpdateElement; +HSPLandroidx/compose/ui/node/ForceUpdateElement;->(Landroidx/compose/ui/node/ModifierNodeElement;)V +Landroidx/compose/ui/node/GlobalPositionAwareModifierNode; +Landroidx/compose/ui/node/HitTestResult; +HSPLandroidx/compose/ui/node/HitTestResult;->()V +HSPLandroidx/compose/ui/node/HitTestResult;->access$getHitDepth$p(Landroidx/compose/ui/node/HitTestResult;)I +HSPLandroidx/compose/ui/node/HitTestResult;->access$setHitDepth$p(Landroidx/compose/ui/node/HitTestResult;I)V +HSPLandroidx/compose/ui/node/HitTestResult;->clear()V +HSPLandroidx/compose/ui/node/HitTestResult;->ensureContainerSize()V +HSPLandroidx/compose/ui/node/HitTestResult;->findBestHitDistance-ptXAw2c()J +HSPLandroidx/compose/ui/node/HitTestResult;->get(I)Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/node/HitTestResult;->get(I)Ljava/lang/Object; +HSPLandroidx/compose/ui/node/HitTestResult;->getSize()I +HSPLandroidx/compose/ui/node/HitTestResult;->hasHit()Z +HSPLandroidx/compose/ui/node/HitTestResult;->hit(Landroidx/compose/ui/Modifier$Node;ZLkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/ui/node/HitTestResult;->hitInMinimumTouchTarget(Landroidx/compose/ui/Modifier$Node;FZLkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/ui/node/HitTestResult;->isEmpty()Z +HSPLandroidx/compose/ui/node/HitTestResult;->resizeToHitDepth()V +HSPLandroidx/compose/ui/node/HitTestResult;->size()I +Landroidx/compose/ui/node/HitTestResultKt; +HSPLandroidx/compose/ui/node/HitTestResultKt;->DistanceAndInLayer(FZ)J +HSPLandroidx/compose/ui/node/HitTestResultKt;->access$DistanceAndInLayer(FZ)J +Landroidx/compose/ui/node/InnerNodeCoordinator; +HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->()V +HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->(Landroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->getTail()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->getTail()Landroidx/compose/ui/node/TailModifierNode; +HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->hitTestChild-YqVAtuI(Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V +HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->maxIntrinsicWidth(I)I +HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->measure-BRTryo0(J)Landroidx/compose/ui/layout/Placeable; +HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->performDraw(Landroidx/compose/ui/graphics/Canvas;)V +HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->placeAt-f8xVGno(JFLkotlin/jvm/functions/Function1;)V +Landroidx/compose/ui/node/InnerNodeCoordinator$Companion; +HSPLandroidx/compose/ui/node/InnerNodeCoordinator$Companion;->()V +HSPLandroidx/compose/ui/node/InnerNodeCoordinator$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/node/IntStack; +HSPLandroidx/compose/ui/node/IntStack;->(I)V +HSPLandroidx/compose/ui/node/IntStack;->compareDiagonal(II)Z +HSPLandroidx/compose/ui/node/IntStack;->get(I)I +HSPLandroidx/compose/ui/node/IntStack;->getSize()I +HSPLandroidx/compose/ui/node/IntStack;->isNotEmpty()Z +HSPLandroidx/compose/ui/node/IntStack;->partition(III)I +HSPLandroidx/compose/ui/node/IntStack;->pop()I +HSPLandroidx/compose/ui/node/IntStack;->pushDiagonal(III)V +HSPLandroidx/compose/ui/node/IntStack;->pushRange(IIII)V +HSPLandroidx/compose/ui/node/IntStack;->quickSort(III)V +HSPLandroidx/compose/ui/node/IntStack;->sortDiagonals()V +HSPLandroidx/compose/ui/node/IntStack;->swapDiagonal(II)V +Landroidx/compose/ui/node/InteroperableComposeUiNode; +Landroidx/compose/ui/node/IntrinsicsPolicy; +HSPLandroidx/compose/ui/node/IntrinsicsPolicy;->()V +HSPLandroidx/compose/ui/node/IntrinsicsPolicy;->(Landroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/node/IntrinsicsPolicy;->getMeasurePolicyState()Landroidx/compose/ui/layout/MeasurePolicy; +HSPLandroidx/compose/ui/node/IntrinsicsPolicy;->maxIntrinsicWidth(I)I +HSPLandroidx/compose/ui/node/IntrinsicsPolicy;->measurePolicyFromState()Landroidx/compose/ui/layout/MeasurePolicy; +HSPLandroidx/compose/ui/node/IntrinsicsPolicy;->setMeasurePolicyState(Landroidx/compose/ui/layout/MeasurePolicy;)V +HSPLandroidx/compose/ui/node/IntrinsicsPolicy;->updateFrom(Landroidx/compose/ui/layout/MeasurePolicy;)V +Landroidx/compose/ui/node/IntrinsicsPolicy$Companion; +HSPLandroidx/compose/ui/node/IntrinsicsPolicy$Companion;->()V +HSPLandroidx/compose/ui/node/IntrinsicsPolicy$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/node/LayerPositionalProperties; +HSPLandroidx/compose/ui/node/LayerPositionalProperties;->()V +HSPLandroidx/compose/ui/node/LayerPositionalProperties;->copyFrom(Landroidx/compose/ui/graphics/GraphicsLayerScope;)V +HSPLandroidx/compose/ui/node/LayerPositionalProperties;->copyFrom(Landroidx/compose/ui/node/LayerPositionalProperties;)V +HSPLandroidx/compose/ui/node/LayerPositionalProperties;->hasSameValuesAs(Landroidx/compose/ui/node/LayerPositionalProperties;)Z +Landroidx/compose/ui/node/LayoutAwareModifierNode; +HSPLandroidx/compose/ui/node/LayoutAwareModifierNode;->onRemeasured-ozmzZPI(J)V +Landroidx/compose/ui/node/LayoutModifierNode; +HSPLandroidx/compose/ui/node/LayoutModifierNode;->maxIntrinsicWidth(Landroidx/compose/ui/layout/IntrinsicMeasureScope;Landroidx/compose/ui/layout/IntrinsicMeasurable;I)I +Landroidx/compose/ui/node/LayoutModifierNode$maxIntrinsicWidth$1; +HSPLandroidx/compose/ui/node/LayoutModifierNode$maxIntrinsicWidth$1;->(Landroidx/compose/ui/node/LayoutModifierNode;)V +HSPLandroidx/compose/ui/node/LayoutModifierNode$maxIntrinsicWidth$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; +Landroidx/compose/ui/node/LayoutModifierNodeCoordinator; +HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->()V +HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/node/LayoutModifierNode;)V +HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->getLayoutModifierNode()Landroidx/compose/ui/node/LayoutModifierNode; +HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->getTail()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->getWrappedNonNull()Landroidx/compose/ui/node/NodeCoordinator; +HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->maxIntrinsicWidth(I)I +HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->measure-BRTryo0(J)Landroidx/compose/ui/layout/Placeable; +HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->performDraw(Landroidx/compose/ui/graphics/Canvas;)V +HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->placeAt-f8xVGno(JFLkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->setLayoutModifierNode$ui_release(Landroidx/compose/ui/node/LayoutModifierNode;)V +Landroidx/compose/ui/node/LayoutModifierNodeCoordinator$Companion; +HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator$Companion;->()V +HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/node/LayoutModifierNodeKt; +HSPLandroidx/compose/ui/node/LayoutModifierNodeKt;->invalidateLayer(Landroidx/compose/ui/node/LayoutModifierNode;)V +HSPLandroidx/compose/ui/node/LayoutModifierNodeKt;->invalidateMeasurement(Landroidx/compose/ui/node/LayoutModifierNode;)V +Landroidx/compose/ui/node/LayoutNode; +HSPLandroidx/compose/ui/node/LayoutNode;->$r8$lambda$DzqjNqe9pzqBZZ9IiiTtp-hu0n4(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/node/LayoutNode;)I +HSPLandroidx/compose/ui/node/LayoutNode;->()V +HSPLandroidx/compose/ui/node/LayoutNode;->(ZI)V +HSPLandroidx/compose/ui/node/LayoutNode;->(ZIILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/node/LayoutNode;->ZComparator$lambda$38(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/node/LayoutNode;)I +HSPLandroidx/compose/ui/node/LayoutNode;->access$getConstructor$cp()Lkotlin/jvm/functions/Function0; +HSPLandroidx/compose/ui/node/LayoutNode;->access$getZComparator$cp()Ljava/util/Comparator; +HSPLandroidx/compose/ui/node/LayoutNode;->access$setIgnoreRemeasureRequests$p(Landroidx/compose/ui/node/LayoutNode;Z)V +HSPLandroidx/compose/ui/node/LayoutNode;->attach$ui_release(Landroidx/compose/ui/node/Owner;)V +HSPLandroidx/compose/ui/node/LayoutNode;->clearSubtreeIntrinsicsUsage$ui_release()V +HSPLandroidx/compose/ui/node/LayoutNode;->clearSubtreePlacementIntrinsicsUsage()V +HSPLandroidx/compose/ui/node/LayoutNode;->detach$ui_release()V +HSPLandroidx/compose/ui/node/LayoutNode;->dispatchOnPositionedCallbacks$ui_release()V +HSPLandroidx/compose/ui/node/LayoutNode;->draw$ui_release(Landroidx/compose/ui/graphics/Canvas;)V +HSPLandroidx/compose/ui/node/LayoutNode;->forceRemeasure()V +HSPLandroidx/compose/ui/node/LayoutNode;->getCanMultiMeasure$ui_release()Z +HSPLandroidx/compose/ui/node/LayoutNode;->getChildMeasurables$ui_release()Ljava/util/List; +HSPLandroidx/compose/ui/node/LayoutNode;->getChildren$ui_release()Ljava/util/List; +HSPLandroidx/compose/ui/node/LayoutNode;->getCollapsedSemantics$ui_release()Landroidx/compose/ui/semantics/SemanticsConfiguration; +HSPLandroidx/compose/ui/node/LayoutNode;->getCompositionLocalMap()Landroidx/compose/runtime/CompositionLocalMap; +HSPLandroidx/compose/ui/node/LayoutNode;->getCoordinates()Landroidx/compose/ui/layout/LayoutCoordinates; +HSPLandroidx/compose/ui/node/LayoutNode;->getDensity()Landroidx/compose/ui/unit/Density; +HSPLandroidx/compose/ui/node/LayoutNode;->getDepth$ui_release()I +HSPLandroidx/compose/ui/node/LayoutNode;->getFoldedChildren$ui_release()Ljava/util/List; +HSPLandroidx/compose/ui/node/LayoutNode;->getHasFixedInnerContentConstraints$ui_release()Z +HSPLandroidx/compose/ui/node/LayoutNode;->getHeight()I +HSPLandroidx/compose/ui/node/LayoutNode;->getInnerCoordinator$ui_release()Landroidx/compose/ui/node/NodeCoordinator; +HSPLandroidx/compose/ui/node/LayoutNode;->getInnerLayerCoordinator()Landroidx/compose/ui/node/NodeCoordinator; +HSPLandroidx/compose/ui/node/LayoutNode;->getIntrinsicsPolicy$ui_release()Landroidx/compose/ui/node/IntrinsicsPolicy; +HSPLandroidx/compose/ui/node/LayoutNode;->getIntrinsicsUsageByParent$ui_release()Landroidx/compose/ui/node/LayoutNode$UsageByParent; +HSPLandroidx/compose/ui/node/LayoutNode;->getLayoutDelegate$ui_release()Landroidx/compose/ui/node/LayoutNodeLayoutDelegate; +HSPLandroidx/compose/ui/node/LayoutNode;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection; +HSPLandroidx/compose/ui/node/LayoutNode;->getLayoutPending$ui_release()Z +HSPLandroidx/compose/ui/node/LayoutNode;->getLayoutState$ui_release()Landroidx/compose/ui/node/LayoutNode$LayoutState; +HSPLandroidx/compose/ui/node/LayoutNode;->getLookaheadLayoutPending$ui_release()Z +HSPLandroidx/compose/ui/node/LayoutNode;->getLookaheadMeasurePending$ui_release()Z +HSPLandroidx/compose/ui/node/LayoutNode;->getLookaheadPassDelegate$ui_release()Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$LookaheadPassDelegate; +HSPLandroidx/compose/ui/node/LayoutNode;->getLookaheadRoot$ui_release()Landroidx/compose/ui/node/LayoutNode; +HSPLandroidx/compose/ui/node/LayoutNode;->getMDrawScope$ui_release()Landroidx/compose/ui/node/LayoutNodeDrawScope; +HSPLandroidx/compose/ui/node/LayoutNode;->getMeasurePassDelegate$ui_release()Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate; +HSPLandroidx/compose/ui/node/LayoutNode;->getMeasurePending$ui_release()Z +HSPLandroidx/compose/ui/node/LayoutNode;->getMeasurePolicy()Landroidx/compose/ui/layout/MeasurePolicy; +HSPLandroidx/compose/ui/node/LayoutNode;->getMeasuredByParent$ui_release()Landroidx/compose/ui/node/LayoutNode$UsageByParent; +HSPLandroidx/compose/ui/node/LayoutNode;->getNeedsOnPositionedDispatch$ui_release()Z +HSPLandroidx/compose/ui/node/LayoutNode;->getNodes$ui_release()Landroidx/compose/ui/node/NodeChain; +HSPLandroidx/compose/ui/node/LayoutNode;->getOuterCoordinator$ui_release()Landroidx/compose/ui/node/NodeCoordinator; +HSPLandroidx/compose/ui/node/LayoutNode;->getOwner$ui_release()Landroidx/compose/ui/node/Owner; +HSPLandroidx/compose/ui/node/LayoutNode;->getParent$ui_release()Landroidx/compose/ui/node/LayoutNode; +HSPLandroidx/compose/ui/node/LayoutNode;->getPlaceOrder$ui_release()I +HSPLandroidx/compose/ui/node/LayoutNode;->getSemanticsId()I +HSPLandroidx/compose/ui/node/LayoutNode;->getSubcompositionsState$ui_release()Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState; +HSPLandroidx/compose/ui/node/LayoutNode;->getViewConfiguration()Landroidx/compose/ui/platform/ViewConfiguration; +HSPLandroidx/compose/ui/node/LayoutNode;->getWidth()I +HSPLandroidx/compose/ui/node/LayoutNode;->getZIndex()F +HSPLandroidx/compose/ui/node/LayoutNode;->getZSortedChildren()Landroidx/compose/runtime/collection/MutableVector; +HSPLandroidx/compose/ui/node/LayoutNode;->get_children$ui_release()Landroidx/compose/runtime/collection/MutableVector; +HSPLandroidx/compose/ui/node/LayoutNode;->hitTest-M_7yMNQ$ui_release$default(Landroidx/compose/ui/node/LayoutNode;JLandroidx/compose/ui/node/HitTestResult;ZZILjava/lang/Object;)V +HSPLandroidx/compose/ui/node/LayoutNode;->hitTest-M_7yMNQ$ui_release(JLandroidx/compose/ui/node/HitTestResult;ZZ)V +HSPLandroidx/compose/ui/node/LayoutNode;->insertAt$ui_release(ILandroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/node/LayoutNode;->invalidateFocusOnAttach()V +HSPLandroidx/compose/ui/node/LayoutNode;->invalidateFocusOnDetach()V +HSPLandroidx/compose/ui/node/LayoutNode;->invalidateLayer$ui_release()V +HSPLandroidx/compose/ui/node/LayoutNode;->invalidateLayers$ui_release()V +HSPLandroidx/compose/ui/node/LayoutNode;->invalidateMeasurements$ui_release()V +HSPLandroidx/compose/ui/node/LayoutNode;->invalidateParentData$ui_release()V +HSPLandroidx/compose/ui/node/LayoutNode;->invalidateSemantics$ui_release()V +HSPLandroidx/compose/ui/node/LayoutNode;->invalidateUnfoldedVirtualChildren()V +HSPLandroidx/compose/ui/node/LayoutNode;->isAttached()Z +HSPLandroidx/compose/ui/node/LayoutNode;->isPlaced()Z +HSPLandroidx/compose/ui/node/LayoutNode;->isValidOwnerScope()Z +HSPLandroidx/compose/ui/node/LayoutNode;->markLayoutPending$ui_release()V +HSPLandroidx/compose/ui/node/LayoutNode;->markMeasurePending$ui_release()V +HSPLandroidx/compose/ui/node/LayoutNode;->onChildRemoved(Landroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/node/LayoutNode;->onDeactivate()V +HSPLandroidx/compose/ui/node/LayoutNode;->onDensityOrLayoutDirectionChanged()V +HSPLandroidx/compose/ui/node/LayoutNode;->onRelease()V +HSPLandroidx/compose/ui/node/LayoutNode;->onZSortedChildrenInvalidated$ui_release()V +HSPLandroidx/compose/ui/node/LayoutNode;->place$ui_release(II)V +HSPLandroidx/compose/ui/node/LayoutNode;->recreateUnfoldedChildrenIfDirty()V +HSPLandroidx/compose/ui/node/LayoutNode;->remeasure-_Sx5XlM$ui_release$default(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/unit/Constraints;ILjava/lang/Object;)Z +HSPLandroidx/compose/ui/node/LayoutNode;->remeasure-_Sx5XlM$ui_release(Landroidx/compose/ui/unit/Constraints;)Z +HSPLandroidx/compose/ui/node/LayoutNode;->removeAt$ui_release(II)V +HSPLandroidx/compose/ui/node/LayoutNode;->replace$ui_release()V +HSPLandroidx/compose/ui/node/LayoutNode;->requestRelayout$ui_release$default(Landroidx/compose/ui/node/LayoutNode;ZILjava/lang/Object;)V +HSPLandroidx/compose/ui/node/LayoutNode;->requestRelayout$ui_release(Z)V +HSPLandroidx/compose/ui/node/LayoutNode;->requestRemeasure$ui_release$default(Landroidx/compose/ui/node/LayoutNode;ZZILjava/lang/Object;)V +HSPLandroidx/compose/ui/node/LayoutNode;->requestRemeasure$ui_release(ZZ)V +HSPLandroidx/compose/ui/node/LayoutNode;->resetModifierState()V +HSPLandroidx/compose/ui/node/LayoutNode;->resetSubtreeIntrinsicsUsage$ui_release()V +HSPLandroidx/compose/ui/node/LayoutNode;->setCanMultiMeasure$ui_release(Z)V +HSPLandroidx/compose/ui/node/LayoutNode;->setCompositeKeyHash(I)V +HSPLandroidx/compose/ui/node/LayoutNode;->setCompositionLocalMap(Landroidx/compose/runtime/CompositionLocalMap;)V +HSPLandroidx/compose/ui/node/LayoutNode;->setDensity(Landroidx/compose/ui/unit/Density;)V +HSPLandroidx/compose/ui/node/LayoutNode;->setInnerLayerCoordinatorIsDirty$ui_release(Z)V +HSPLandroidx/compose/ui/node/LayoutNode;->setIntrinsicsUsageByParent$ui_release(Landroidx/compose/ui/node/LayoutNode$UsageByParent;)V +HSPLandroidx/compose/ui/node/LayoutNode;->setLayoutDirection(Landroidx/compose/ui/unit/LayoutDirection;)V +HSPLandroidx/compose/ui/node/LayoutNode;->setLookaheadRoot(Landroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/node/LayoutNode;->setMeasurePolicy(Landroidx/compose/ui/layout/MeasurePolicy;)V +HSPLandroidx/compose/ui/node/LayoutNode;->setModifier(Landroidx/compose/ui/Modifier;)V +HSPLandroidx/compose/ui/node/LayoutNode;->setNeedsOnPositionedDispatch$ui_release(Z)V +HSPLandroidx/compose/ui/node/LayoutNode;->setSubcompositionsState$ui_release(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)V +HSPLandroidx/compose/ui/node/LayoutNode;->setViewConfiguration(Landroidx/compose/ui/platform/ViewConfiguration;)V +HSPLandroidx/compose/ui/node/LayoutNode;->updateChildrenIfDirty$ui_release()V +Landroidx/compose/ui/node/LayoutNode$$ExternalSyntheticLambda0; +HSPLandroidx/compose/ui/node/LayoutNode$$ExternalSyntheticLambda0;->()V +HSPLandroidx/compose/ui/node/LayoutNode$$ExternalSyntheticLambda0;->compare(Ljava/lang/Object;Ljava/lang/Object;)I +Landroidx/compose/ui/node/LayoutNode$Companion; +HSPLandroidx/compose/ui/node/LayoutNode$Companion;->()V +HSPLandroidx/compose/ui/node/LayoutNode$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/node/LayoutNode$Companion;->getConstructor$ui_release()Lkotlin/jvm/functions/Function0; +HSPLandroidx/compose/ui/node/LayoutNode$Companion;->getZComparator$ui_release()Ljava/util/Comparator; +Landroidx/compose/ui/node/LayoutNode$Companion$Constructor$1; +HSPLandroidx/compose/ui/node/LayoutNode$Companion$Constructor$1;->()V +HSPLandroidx/compose/ui/node/LayoutNode$Companion$Constructor$1;->()V +HSPLandroidx/compose/ui/node/LayoutNode$Companion$Constructor$1;->invoke()Landroidx/compose/ui/node/LayoutNode; +HSPLandroidx/compose/ui/node/LayoutNode$Companion$Constructor$1;->invoke()Ljava/lang/Object; +Landroidx/compose/ui/node/LayoutNode$Companion$DummyViewConfiguration$1; +HSPLandroidx/compose/ui/node/LayoutNode$Companion$DummyViewConfiguration$1;->()V +Landroidx/compose/ui/node/LayoutNode$Companion$ErrorMeasurePolicy$1; +HSPLandroidx/compose/ui/node/LayoutNode$Companion$ErrorMeasurePolicy$1;->()V +Landroidx/compose/ui/node/LayoutNode$LayoutState; +HSPLandroidx/compose/ui/node/LayoutNode$LayoutState;->$values()[Landroidx/compose/ui/node/LayoutNode$LayoutState; +HSPLandroidx/compose/ui/node/LayoutNode$LayoutState;->()V +HSPLandroidx/compose/ui/node/LayoutNode$LayoutState;->(Ljava/lang/String;I)V +HSPLandroidx/compose/ui/node/LayoutNode$LayoutState;->values()[Landroidx/compose/ui/node/LayoutNode$LayoutState; +Landroidx/compose/ui/node/LayoutNode$NoIntrinsicsMeasurePolicy; +HSPLandroidx/compose/ui/node/LayoutNode$NoIntrinsicsMeasurePolicy;->(Ljava/lang/String;)V +Landroidx/compose/ui/node/LayoutNode$UsageByParent; +HSPLandroidx/compose/ui/node/LayoutNode$UsageByParent;->$values()[Landroidx/compose/ui/node/LayoutNode$UsageByParent; +HSPLandroidx/compose/ui/node/LayoutNode$UsageByParent;->()V +HSPLandroidx/compose/ui/node/LayoutNode$UsageByParent;->(Ljava/lang/String;I)V +HSPLandroidx/compose/ui/node/LayoutNode$UsageByParent;->values()[Landroidx/compose/ui/node/LayoutNode$UsageByParent; +Landroidx/compose/ui/node/LayoutNode$_foldedChildren$1; +HSPLandroidx/compose/ui/node/LayoutNode$_foldedChildren$1;->(Landroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/node/LayoutNode$_foldedChildren$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/ui/node/LayoutNode$_foldedChildren$1;->invoke()V +Landroidx/compose/ui/node/LayoutNode$collapsedSemantics$1; +HSPLandroidx/compose/ui/node/LayoutNode$collapsedSemantics$1;->(Landroidx/compose/ui/node/LayoutNode;Lkotlin/jvm/internal/Ref$ObjectRef;)V +HSPLandroidx/compose/ui/node/LayoutNode$collapsedSemantics$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/ui/node/LayoutNode$collapsedSemantics$1;->invoke()V +Landroidx/compose/ui/node/LayoutNodeAlignmentLines; +HSPLandroidx/compose/ui/node/LayoutNodeAlignmentLines;->(Landroidx/compose/ui/node/AlignmentLinesOwner;)V +Landroidx/compose/ui/node/LayoutNodeDrawScope; +HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->(Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope;)V +HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->(Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->draw-x_KDEd0$ui_release(Landroidx/compose/ui/graphics/Canvas;JLandroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/Modifier$Node;)V +HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawArc-yD3GUKo(JFFZJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V +HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawContent()V +HSPLandroidx/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 +HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawImage-AZ2fEMs(Landroidx/compose/ui/graphics/ImageBitmap;JJJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;II)V +HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawLine-1RTmtNc(Landroidx/compose/ui/graphics/Brush;JJFILandroidx/compose/ui/graphics/PathEffect;FLandroidx/compose/ui/graphics/ColorFilter;I)V +HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawPath-LG529CI(Landroidx/compose/ui/graphics/Path;JFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V +HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawRect-n-J9OG0(JJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V +HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawRoundRect-ZuiqVtQ(Landroidx/compose/ui/graphics/Brush;JJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V +HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawRoundRect-u-Aw5IA(JJJJLandroidx/compose/ui/graphics/drawscope/DrawStyle;FLandroidx/compose/ui/graphics/ColorFilter;I)V +HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->getDrawContext()Landroidx/compose/ui/graphics/drawscope/DrawContext; +HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection; +HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->getSize-NH-jbRc()J +HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->performDraw(Landroidx/compose/ui/node/DrawModifierNode;Landroidx/compose/ui/graphics/Canvas;)V +HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->roundToPx-0680j_4(F)I +HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->toPx-0680j_4(F)F +Landroidx/compose/ui/node/LayoutNodeDrawScopeKt; +HSPLandroidx/compose/ui/node/LayoutNodeDrawScopeKt;->access$nextDrawNode(Landroidx/compose/ui/node/DelegatableNode;)Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/node/LayoutNodeDrawScopeKt;->nextDrawNode(Landroidx/compose/ui/node/DelegatableNode;)Landroidx/compose/ui/Modifier$Node; +Landroidx/compose/ui/node/LayoutNodeKt; +HSPLandroidx/compose/ui/node/LayoutNodeKt;->()V +HSPLandroidx/compose/ui/node/LayoutNodeKt;->access$getDefaultDensity$p()Landroidx/compose/ui/unit/Density; +HSPLandroidx/compose/ui/node/LayoutNodeKt;->requireOwner(Landroidx/compose/ui/node/LayoutNode;)Landroidx/compose/ui/node/Owner; +Landroidx/compose/ui/node/LayoutNodeLayoutDelegate; +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->(Landroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->access$getLayoutNode$p(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;)Landroidx/compose/ui/node/LayoutNode; +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->access$getLayoutPendingForAlignment$p(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;)Z +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->access$getNextChildPlaceOrder$p(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;)I +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->access$isOutMostLookaheadRoot(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;Landroidx/compose/ui/node/LayoutNode;)Z +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->access$performMeasure-BRTryo0(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;J)V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->access$setLayoutPending$p(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;Z)V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->access$setLayoutPendingForAlignment$p(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;Z)V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->access$setLayoutState$p(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;Landroidx/compose/ui/node/LayoutNode$LayoutState;)V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->access$setNextChildPlaceOrder$p(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;I)V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getAlignmentLinesOwner$ui_release()Landroidx/compose/ui/node/AlignmentLinesOwner; +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getChildrenAccessingCoordinatesDuringPlacement()I +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getCoordinatesAccessedDuringModifierPlacement()Z +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getCoordinatesAccessedDuringPlacement()Z +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getHeight$ui_release()I +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getLastConstraints-DWUhwKw()Landroidx/compose/ui/unit/Constraints; +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getLayoutPending$ui_release()Z +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getLayoutState$ui_release()Landroidx/compose/ui/node/LayoutNode$LayoutState; +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getLookaheadLayoutPending$ui_release()Z +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getLookaheadMeasurePending$ui_release()Z +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getLookaheadPassDelegate$ui_release()Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$LookaheadPassDelegate; +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getMeasurePassDelegate$ui_release()Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate; +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getMeasurePending$ui_release()Z +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getOuterCoordinator()Landroidx/compose/ui/node/NodeCoordinator; +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getWidth$ui_release()I +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->invalidateParentData()V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->isOutMostLookaheadRoot(Landroidx/compose/ui/node/LayoutNode;)Z +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->markChildrenDirty()V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->markLayoutPending$ui_release()V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->markMeasurePending$ui_release()V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->onCoordinatesUsed()V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->performMeasure-BRTryo0(J)V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->resetAlignmentLines()V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->setCoordinatesAccessedDuringModifierPlacement(Z)V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->setCoordinatesAccessedDuringPlacement(Z)V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->updateParentData()V +Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$LookaheadPassDelegate; +Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate; +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;)V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->access$checkChildrenPlaceOrderForUpdates(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;)V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->access$clearPlaceOrder(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;)V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->checkChildrenPlaceOrderForUpdates()V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->clearPlaceOrder()V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->forEachChildAlignmentLinesOwner(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getAlignmentLines()Landroidx/compose/ui/node/AlignmentLines; +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getChildDelegates$ui_release()Ljava/util/List; +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getInnerCoordinator()Landroidx/compose/ui/node/NodeCoordinator; +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getLastConstraints-DWUhwKw()Landroidx/compose/ui/unit/Constraints; +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getMeasuredByParent$ui_release()Landroidx/compose/ui/node/LayoutNode$UsageByParent; +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getMeasuredWidth()I +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getParentAlignmentLinesOwner()Landroidx/compose/ui/node/AlignmentLinesOwner; +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getParentData()Ljava/lang/Object; +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getPlaceOrder$ui_release()I +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getZIndex$ui_release()F +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->invalidateIntrinsicsParent(Z)V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->invalidateParentData()V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->isPlaced()Z +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->layoutChildren()V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->markNodeAndSubtreeAsPlaced()V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->markSubtreeAsNotPlaced()V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->maxIntrinsicWidth(I)I +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->measure-BRTryo0(J)Landroidx/compose/ui/layout/Placeable; +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->notifyChildrenUsingCoordinatesWhilePlacing()V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->onBeforeLayoutChildren()V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->onIntrinsicsQueried()V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->onNodeDetached()V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->onNodePlaced$ui_release()V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->placeAt-f8xVGno(JFLkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->placeOuterCoordinator-f8xVGno(JFLkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->remeasure-BRTryo0(J)Z +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->replace()V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->setChildDelegatesDirty$ui_release(Z)V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->setMeasuredByParent$ui_release(Landroidx/compose/ui/node/LayoutNode$UsageByParent;)V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->setPlaced$ui_release(Z)V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->trackMeasurementByParent(Landroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->updateParentData()Z +Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$WhenMappings; +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$WhenMappings;->()V +Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$layoutChildren$1$1; +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$layoutChildren$1$1;->(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;Landroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$layoutChildren$1$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$layoutChildren$1$1;->invoke()V +Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$layoutChildren$1$1$1; +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$layoutChildren$1$1$1;->()V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$layoutChildren$1$1$1;->()V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$layoutChildren$1$1$1;->invoke(Landroidx/compose/ui/node/AlignmentLinesOwner;)V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$layoutChildren$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$layoutChildren$1$1$2; +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$layoutChildren$1$1$2;->()V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$layoutChildren$1$1$2;->()V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$layoutChildren$1$1$2;->invoke(Landroidx/compose/ui/node/AlignmentLinesOwner;)V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$layoutChildren$1$1$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$placeOuterCoordinator$1; +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$placeOuterCoordinator$1;->(Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;JF)V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$placeOuterCoordinator$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$placeOuterCoordinator$1;->invoke()V +Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$remeasure$1; +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$remeasure$1;->()V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$remeasure$1;->()V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$remeasure$1;->invoke(Landroidx/compose/ui/node/AlignmentLinesOwner;)V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$remeasure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$performMeasure$2; +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$performMeasure$2;->(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;J)V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$performMeasure$2;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$performMeasure$2;->invoke()V +Landroidx/compose/ui/node/LayoutTreeConsistencyChecker; +Landroidx/compose/ui/node/LookaheadCapablePlaceable; +HSPLandroidx/compose/ui/node/LookaheadCapablePlaceable;->()V +HSPLandroidx/compose/ui/node/LookaheadCapablePlaceable;->invalidateAlignmentLinesFromPositionChange(Landroidx/compose/ui/node/NodeCoordinator;)V +HSPLandroidx/compose/ui/node/LookaheadCapablePlaceable;->isPlacingForAlignment$ui_release()Z +HSPLandroidx/compose/ui/node/LookaheadCapablePlaceable;->isShallowPlacing$ui_release()Z +HSPLandroidx/compose/ui/node/LookaheadCapablePlaceable;->setPlacingForAlignment$ui_release(Z)V +Landroidx/compose/ui/node/LookaheadDelegate; +Landroidx/compose/ui/node/MeasureAndLayoutDelegate; +HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->(Landroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->access$getRoot$p(Landroidx/compose/ui/node/MeasureAndLayoutDelegate;)Landroidx/compose/ui/node/LayoutNode; +HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->access$remeasureAndRelayoutIfNeeded(Landroidx/compose/ui/node/MeasureAndLayoutDelegate;Landroidx/compose/ui/node/LayoutNode;Z)Z +HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->callOnLayoutCompletedListeners()V +HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->dispatchOnPositionedCallbacks$default(Landroidx/compose/ui/node/MeasureAndLayoutDelegate;ZILjava/lang/Object;)V +HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->dispatchOnPositionedCallbacks(Z)V +HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->doLookaheadRemeasure-sdFAvZA(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/unit/Constraints;)Z +HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->doRemeasure-sdFAvZA(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/unit/Constraints;)Z +HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->forceMeasureTheSubtree(Landroidx/compose/ui/node/LayoutNode;Z)V +HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->getCanAffectParent(Landroidx/compose/ui/node/LayoutNode;)Z +HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->getHasPendingMeasureOrLayout()Z +HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->getHasPendingOnPositionedCallbacks()Z +HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->getMeasureAffectsParent(Landroidx/compose/ui/node/LayoutNode;)Z +HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->measureAndLayout(Lkotlin/jvm/functions/Function0;)Z +HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->measureAndLayout-0kLqBqw(Landroidx/compose/ui/node/LayoutNode;J)V +HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->measureOnly()V +HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->onNodeDetached(Landroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->recurseRemeasure(Landroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->remeasureAndRelayoutIfNeeded$default(Landroidx/compose/ui/node/MeasureAndLayoutDelegate;Landroidx/compose/ui/node/LayoutNode;ZILjava/lang/Object;)Z +HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->remeasureAndRelayoutIfNeeded(Landroidx/compose/ui/node/LayoutNode;Z)Z +HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->remeasureOnly(Landroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->requestOnPositionedCallback(Landroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->requestRelayout(Landroidx/compose/ui/node/LayoutNode;Z)Z +HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->requestRemeasure$default(Landroidx/compose/ui/node/MeasureAndLayoutDelegate;Landroidx/compose/ui/node/LayoutNode;ZILjava/lang/Object;)Z +HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->requestRemeasure(Landroidx/compose/ui/node/LayoutNode;Z)Z +HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->updateRootConstraints-BRTryo0(J)V +Landroidx/compose/ui/node/MeasureAndLayoutDelegate$PostponedRequest; +Landroidx/compose/ui/node/MeasureAndLayoutDelegate$WhenMappings; +HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate$WhenMappings;->()V +Landroidx/compose/ui/node/MeasureAndLayoutDelegate$forceMeasureTheSubtree$pending$1; +HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate$forceMeasureTheSubtree$pending$1;->(Z)V +HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate$forceMeasureTheSubtree$pending$1;->invoke(Landroidx/compose/ui/node/LayoutNode;)Ljava/lang/Boolean; +HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate$forceMeasureTheSubtree$pending$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/node/MeasureScopeWithLayoutNode; +Landroidx/compose/ui/node/ModifierNodeElement; +HSPLandroidx/compose/ui/node/ModifierNodeElement;->()V +HSPLandroidx/compose/ui/node/ModifierNodeElement;->()V +Landroidx/compose/ui/node/MutableVectorWithMutationTracking; +HSPLandroidx/compose/ui/node/MutableVectorWithMutationTracking;->(Landroidx/compose/runtime/collection/MutableVector;Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/ui/node/MutableVectorWithMutationTracking;->add(ILjava/lang/Object;)V +HSPLandroidx/compose/ui/node/MutableVectorWithMutationTracking;->asList()Ljava/util/List; +HSPLandroidx/compose/ui/node/MutableVectorWithMutationTracking;->getVector()Landroidx/compose/runtime/collection/MutableVector; +HSPLandroidx/compose/ui/node/MutableVectorWithMutationTracking;->removeAt(I)Ljava/lang/Object; +Landroidx/compose/ui/node/MyersDiffKt; +HSPLandroidx/compose/ui/node/MyersDiffKt;->access$swap([III)V +HSPLandroidx/compose/ui/node/MyersDiffKt;->applyDiff(Landroidx/compose/ui/node/IntStack;Landroidx/compose/ui/node/DiffCallback;)V +HSPLandroidx/compose/ui/node/MyersDiffKt;->backward-4l5_RBY(IIIILandroidx/compose/ui/node/DiffCallback;[I[II[I)Z +HSPLandroidx/compose/ui/node/MyersDiffKt;->calculateDiff(IILandroidx/compose/ui/node/DiffCallback;)Landroidx/compose/ui/node/IntStack; +HSPLandroidx/compose/ui/node/MyersDiffKt;->executeDiff(IILandroidx/compose/ui/node/DiffCallback;)V +HSPLandroidx/compose/ui/node/MyersDiffKt;->fillSnake(IIIIZ[I)V +HSPLandroidx/compose/ui/node/MyersDiffKt;->forward-4l5_RBY(IIIILandroidx/compose/ui/node/DiffCallback;[I[II[I)Z +HSPLandroidx/compose/ui/node/MyersDiffKt;->midPoint-q5eDKzI(IIIILandroidx/compose/ui/node/DiffCallback;[I[I[I)Z +HSPLandroidx/compose/ui/node/MyersDiffKt;->swap([III)V +Landroidx/compose/ui/node/NodeChain; +HSPLandroidx/compose/ui/node/NodeChain;->(Landroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/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; +HSPLandroidx/compose/ui/node/NodeChain;->access$detachAndRemoveNode(Landroidx/compose/ui/node/NodeChain;Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/node/NodeChain;->access$getAggregateChildKindSet(Landroidx/compose/ui/node/NodeChain;)I +HSPLandroidx/compose/ui/node/NodeChain;->access$getLogger$p(Landroidx/compose/ui/node/NodeChain;)Landroidx/compose/ui/node/NodeChain$Logger; +PLandroidx/compose/ui/node/NodeChain;->access$propagateCoordinator(Landroidx/compose/ui/node/NodeChain;Landroidx/compose/ui/Modifier$Node;Landroidx/compose/ui/node/NodeCoordinator;)V +HSPLandroidx/compose/ui/node/NodeChain;->access$updateNode(Landroidx/compose/ui/node/NodeChain;Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Node;)V +HSPLandroidx/compose/ui/node/NodeChain;->createAndInsertNodeAsChild(Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/node/NodeChain;->detachAndRemoveNode(Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/node/NodeChain;->getAggregateChildKindSet()I +HSPLandroidx/compose/ui/node/NodeChain;->getDiffer(Landroidx/compose/ui/Modifier$Node;ILandroidx/compose/runtime/collection/MutableVector;Landroidx/compose/runtime/collection/MutableVector;Z)Landroidx/compose/ui/node/NodeChain$Differ; +HSPLandroidx/compose/ui/node/NodeChain;->getHead$ui_release()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/node/NodeChain;->getInnerCoordinator$ui_release()Landroidx/compose/ui/node/InnerNodeCoordinator; +HSPLandroidx/compose/ui/node/NodeChain;->getOuterCoordinator$ui_release()Landroidx/compose/ui/node/NodeCoordinator; +HSPLandroidx/compose/ui/node/NodeChain;->getTail$ui_release()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/node/NodeChain;->has$ui_release(I)Z +HSPLandroidx/compose/ui/node/NodeChain;->has-H91voCI$ui_release(I)Z +HSPLandroidx/compose/ui/node/NodeChain;->insertChild(Landroidx/compose/ui/Modifier$Node;Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/node/NodeChain;->markAsAttached()V +HSPLandroidx/compose/ui/node/NodeChain;->markAsDetached$ui_release()V +HSPLandroidx/compose/ui/node/NodeChain;->padChain()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/node/NodeChain;->propagateCoordinator(Landroidx/compose/ui/Modifier$Node;Landroidx/compose/ui/node/NodeCoordinator;)V +HSPLandroidx/compose/ui/node/NodeChain;->removeNode(Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/node/NodeChain;->resetState$ui_release()V +HSPLandroidx/compose/ui/node/NodeChain;->runAttachLifecycle()V +HSPLandroidx/compose/ui/node/NodeChain;->runDetachLifecycle$ui_release()V +HSPLandroidx/compose/ui/node/NodeChain;->structuralUpdate(ILandroidx/compose/runtime/collection/MutableVector;Landroidx/compose/runtime/collection/MutableVector;Landroidx/compose/ui/Modifier$Node;Z)V +HSPLandroidx/compose/ui/node/NodeChain;->syncAggregateChildKindSet()V +HSPLandroidx/compose/ui/node/NodeChain;->syncCoordinators()V +HSPLandroidx/compose/ui/node/NodeChain;->trimChain(Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/node/NodeChain;->updateFrom$ui_release(Landroidx/compose/ui/Modifier;)V +HSPLandroidx/compose/ui/node/NodeChain;->updateNode(Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Node;)V +Landroidx/compose/ui/node/NodeChain$Differ; +HSPLandroidx/compose/ui/node/NodeChain$Differ;->(Landroidx/compose/ui/node/NodeChain;Landroidx/compose/ui/Modifier$Node;ILandroidx/compose/runtime/collection/MutableVector;Landroidx/compose/runtime/collection/MutableVector;Z)V +HSPLandroidx/compose/ui/node/NodeChain$Differ;->areItemsTheSame(II)Z +HSPLandroidx/compose/ui/node/NodeChain$Differ;->insert(I)V +HSPLandroidx/compose/ui/node/NodeChain$Differ;->remove(II)V +HSPLandroidx/compose/ui/node/NodeChain$Differ;->same(II)V +HSPLandroidx/compose/ui/node/NodeChain$Differ;->setAfter(Landroidx/compose/runtime/collection/MutableVector;)V +HSPLandroidx/compose/ui/node/NodeChain$Differ;->setBefore(Landroidx/compose/runtime/collection/MutableVector;)V +HSPLandroidx/compose/ui/node/NodeChain$Differ;->setNode(Landroidx/compose/ui/Modifier$Node;)V +HSPLandroidx/compose/ui/node/NodeChain$Differ;->setOffset(I)V +HSPLandroidx/compose/ui/node/NodeChain$Differ;->setShouldAttachOnInsert(Z)V +Landroidx/compose/ui/node/NodeChain$Logger; +Landroidx/compose/ui/node/NodeChainKt; +HSPLandroidx/compose/ui/node/NodeChainKt;->()V +HSPLandroidx/compose/ui/node/NodeChainKt;->access$fillVector(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/collection/MutableVector;)Landroidx/compose/runtime/collection/MutableVector; +HSPLandroidx/compose/ui/node/NodeChainKt;->access$getSentinelHead$p()Landroidx/compose/ui/node/NodeChainKt$SentinelHead$1; +HSPLandroidx/compose/ui/node/NodeChainKt;->access$updateUnsafe(Landroidx/compose/ui/node/ModifierNodeElement;Landroidx/compose/ui/Modifier$Node;)V +HSPLandroidx/compose/ui/node/NodeChainKt;->actionForModifiers(Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Element;)I +HSPLandroidx/compose/ui/node/NodeChainKt;->fillVector(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/collection/MutableVector;)Landroidx/compose/runtime/collection/MutableVector; +HSPLandroidx/compose/ui/node/NodeChainKt;->updateUnsafe(Landroidx/compose/ui/node/ModifierNodeElement;Landroidx/compose/ui/Modifier$Node;)V +Landroidx/compose/ui/node/NodeChainKt$SentinelHead$1; +HSPLandroidx/compose/ui/node/NodeChainKt$SentinelHead$1;->()V +Landroidx/compose/ui/node/NodeChainKt$fillVector$1; +HSPLandroidx/compose/ui/node/NodeChainKt$fillVector$1;->(Landroidx/compose/runtime/collection/MutableVector;)V +Landroidx/compose/ui/node/NodeCoordinator; +HSPLandroidx/compose/ui/node/NodeCoordinator;->()V +HSPLandroidx/compose/ui/node/NodeCoordinator;->(Landroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/node/NodeCoordinator;->access$drawContainedDrawModifiers(Landroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/graphics/Canvas;)V +HSPLandroidx/compose/ui/node/NodeCoordinator;->access$getGraphicsLayerScope$cp()Landroidx/compose/ui/graphics/ReusableGraphicsLayerScope; +HSPLandroidx/compose/ui/node/NodeCoordinator;->access$getLayerPositionalProperties$p(Landroidx/compose/ui/node/NodeCoordinator;)Landroidx/compose/ui/node/LayerPositionalProperties; +HSPLandroidx/compose/ui/node/NodeCoordinator;->access$getPointerInputSource$cp()Landroidx/compose/ui/node/NodeCoordinator$HitTestSource; +HSPLandroidx/compose/ui/node/NodeCoordinator;->access$getTmpLayerPositionalProperties$cp()Landroidx/compose/ui/node/LayerPositionalProperties; +HSPLandroidx/compose/ui/node/NodeCoordinator;->access$headNode(Landroidx/compose/ui/node/NodeCoordinator;Z)Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/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 +HSPLandroidx/compose/ui/node/NodeCoordinator;->access$setMeasurementConstraints-BRTryo0(Landroidx/compose/ui/node/NodeCoordinator;J)V +HSPLandroidx/compose/ui/node/NodeCoordinator;->ancestorToLocal(Landroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/geometry/MutableRect;Z)V +HSPLandroidx/compose/ui/node/NodeCoordinator;->ancestorToLocal-R5De75A(Landroidx/compose/ui/node/NodeCoordinator;J)J +HSPLandroidx/compose/ui/node/NodeCoordinator;->calculateMinimumTouchTargetPadding-E7KxVPU(J)J +HSPLandroidx/compose/ui/node/NodeCoordinator;->distanceInMinimumTouchTarget-tz77jQw(JJ)F +HSPLandroidx/compose/ui/node/NodeCoordinator;->draw(Landroidx/compose/ui/graphics/Canvas;)V +HSPLandroidx/compose/ui/node/NodeCoordinator;->drawContainedDrawModifiers(Landroidx/compose/ui/graphics/Canvas;)V +HSPLandroidx/compose/ui/node/NodeCoordinator;->findCommonAncestor$ui_release(Landroidx/compose/ui/node/NodeCoordinator;)Landroidx/compose/ui/node/NodeCoordinator; +HSPLandroidx/compose/ui/node/NodeCoordinator;->fromParentPosition-MK-Hz9U(J)J +HSPLandroidx/compose/ui/node/NodeCoordinator;->getAlignmentLinesOwner()Landroidx/compose/ui/node/AlignmentLinesOwner; +HSPLandroidx/compose/ui/node/NodeCoordinator;->getCoordinates()Landroidx/compose/ui/layout/LayoutCoordinates; +HSPLandroidx/compose/ui/node/NodeCoordinator;->getDensity()F +HSPLandroidx/compose/ui/node/NodeCoordinator;->getFontScale()F +HSPLandroidx/compose/ui/node/NodeCoordinator;->getLastLayerDrawingWasSkipped$ui_release()Z +HSPLandroidx/compose/ui/node/NodeCoordinator;->getLastMeasurementConstraints-msEJaDk$ui_release()J +HSPLandroidx/compose/ui/node/NodeCoordinator;->getLayer()Landroidx/compose/ui/node/OwnedLayer; +HSPLandroidx/compose/ui/node/NodeCoordinator;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection; +HSPLandroidx/compose/ui/node/NodeCoordinator;->getLayoutNode()Landroidx/compose/ui/node/LayoutNode; +HSPLandroidx/compose/ui/node/NodeCoordinator;->getMeasureResult$ui_release()Landroidx/compose/ui/layout/MeasureResult; +HSPLandroidx/compose/ui/node/NodeCoordinator;->getMinimumTouchTargetSize-NH-jbRc()J +HSPLandroidx/compose/ui/node/NodeCoordinator;->getParent()Landroidx/compose/ui/node/LookaheadCapablePlaceable; +HSPLandroidx/compose/ui/node/NodeCoordinator;->getParentData()Ljava/lang/Object; +HSPLandroidx/compose/ui/node/NodeCoordinator;->getParentLayoutCoordinates()Landroidx/compose/ui/layout/LayoutCoordinates; +HSPLandroidx/compose/ui/node/NodeCoordinator;->getPosition-nOcc-ac()J +HSPLandroidx/compose/ui/node/NodeCoordinator;->getRectCache()Landroidx/compose/ui/geometry/MutableRect; +HSPLandroidx/compose/ui/node/NodeCoordinator;->getSize-YbymL2g()J +HSPLandroidx/compose/ui/node/NodeCoordinator;->getSnapshotObserver()Landroidx/compose/ui/node/OwnerSnapshotObserver; +HSPLandroidx/compose/ui/node/NodeCoordinator;->getWrapped$ui_release()Landroidx/compose/ui/node/NodeCoordinator; +HSPLandroidx/compose/ui/node/NodeCoordinator;->getWrappedBy$ui_release()Landroidx/compose/ui/node/NodeCoordinator; +HSPLandroidx/compose/ui/node/NodeCoordinator;->getZIndex()F +HSPLandroidx/compose/ui/node/NodeCoordinator;->hasNode-H91voCI(I)Z +HSPLandroidx/compose/ui/node/NodeCoordinator;->head-H91voCI(I)Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/node/NodeCoordinator;->headNode(Z)Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/node/NodeCoordinator;->hit-1hIXUjU(Landroidx/compose/ui/Modifier$Node;Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V +HSPLandroidx/compose/ui/node/NodeCoordinator;->hitTest-YqVAtuI(Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V +HSPLandroidx/compose/ui/node/NodeCoordinator;->hitTestChild-YqVAtuI(Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V +HSPLandroidx/compose/ui/node/NodeCoordinator;->invalidateLayer()V +HSPLandroidx/compose/ui/node/NodeCoordinator;->invoke(Landroidx/compose/ui/graphics/Canvas;)V +HSPLandroidx/compose/ui/node/NodeCoordinator;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/ui/node/NodeCoordinator;->isAttached()Z +HSPLandroidx/compose/ui/node/NodeCoordinator;->isPointerInBounds-k-4lQ0M(J)Z +HSPLandroidx/compose/ui/node/NodeCoordinator;->isTransparent()Z +HSPLandroidx/compose/ui/node/NodeCoordinator;->isValidOwnerScope()Z +HSPLandroidx/compose/ui/node/NodeCoordinator;->localBoundingBoxOf(Landroidx/compose/ui/layout/LayoutCoordinates;Z)Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/ui/node/NodeCoordinator;->localPositionOf-R5De75A(Landroidx/compose/ui/layout/LayoutCoordinates;J)J +HSPLandroidx/compose/ui/node/NodeCoordinator;->localToRoot-MK-Hz9U(J)J +HSPLandroidx/compose/ui/node/NodeCoordinator;->localToWindow-MK-Hz9U(J)J +HSPLandroidx/compose/ui/node/NodeCoordinator;->offsetFromEdge-MK-Hz9U(J)J +HSPLandroidx/compose/ui/node/NodeCoordinator;->onCoordinatesUsed$ui_release()V +HSPLandroidx/compose/ui/node/NodeCoordinator;->onLayoutModifierNodeChanged()V +HSPLandroidx/compose/ui/node/NodeCoordinator;->onLayoutNodeAttach()V +HSPLandroidx/compose/ui/node/NodeCoordinator;->onMeasureResultChanged(II)V +HSPLandroidx/compose/ui/node/NodeCoordinator;->onMeasured()V +HSPLandroidx/compose/ui/node/NodeCoordinator;->onPlaced()V +HSPLandroidx/compose/ui/node/NodeCoordinator;->onRelease()V +HSPLandroidx/compose/ui/node/NodeCoordinator;->placeAt-f8xVGno(JFLkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/node/NodeCoordinator;->placeSelf-f8xVGno(JFLkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/node/NodeCoordinator;->placeSelfApparentToRealOffset-f8xVGno(JFLkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/node/NodeCoordinator;->rectInParent$ui_release$default(Landroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/geometry/MutableRect;ZZILjava/lang/Object;)V +HSPLandroidx/compose/ui/node/NodeCoordinator;->rectInParent$ui_release(Landroidx/compose/ui/geometry/MutableRect;ZZ)V +HSPLandroidx/compose/ui/node/NodeCoordinator;->setMeasureResult$ui_release(Landroidx/compose/ui/layout/MeasureResult;)V +HSPLandroidx/compose/ui/node/NodeCoordinator;->setPosition--gyyYBs(J)V +HSPLandroidx/compose/ui/node/NodeCoordinator;->setWrapped$ui_release(Landroidx/compose/ui/node/NodeCoordinator;)V +HSPLandroidx/compose/ui/node/NodeCoordinator;->setWrappedBy$ui_release(Landroidx/compose/ui/node/NodeCoordinator;)V +HSPLandroidx/compose/ui/node/NodeCoordinator;->shouldSharePointerInputWithSiblings()Z +HSPLandroidx/compose/ui/node/NodeCoordinator;->toCoordinator(Landroidx/compose/ui/layout/LayoutCoordinates;)Landroidx/compose/ui/node/NodeCoordinator; +HSPLandroidx/compose/ui/node/NodeCoordinator;->toParentPosition-MK-Hz9U(J)J +HSPLandroidx/compose/ui/node/NodeCoordinator;->touchBoundsInRoot()Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/ui/node/NodeCoordinator;->updateLayerBlock$default(Landroidx/compose/ui/node/NodeCoordinator;Lkotlin/jvm/functions/Function1;ZILjava/lang/Object;)V +HSPLandroidx/compose/ui/node/NodeCoordinator;->updateLayerBlock(Lkotlin/jvm/functions/Function1;Z)V +HSPLandroidx/compose/ui/node/NodeCoordinator;->updateLayerParameters$default(Landroidx/compose/ui/node/NodeCoordinator;ZILjava/lang/Object;)V +HSPLandroidx/compose/ui/node/NodeCoordinator;->updateLayerParameters(Z)V +HSPLandroidx/compose/ui/node/NodeCoordinator;->withinLayerBounds-k-4lQ0M(J)Z +Landroidx/compose/ui/node/NodeCoordinator$Companion; +HSPLandroidx/compose/ui/node/NodeCoordinator$Companion;->()V +HSPLandroidx/compose/ui/node/NodeCoordinator$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/node/NodeCoordinator$Companion;->getPointerInputSource()Landroidx/compose/ui/node/NodeCoordinator$HitTestSource; +Landroidx/compose/ui/node/NodeCoordinator$Companion$PointerInputSource$1; +HSPLandroidx/compose/ui/node/NodeCoordinator$Companion$PointerInputSource$1;->()V +HSPLandroidx/compose/ui/node/NodeCoordinator$Companion$PointerInputSource$1;->childHitTest-YqVAtuI(Landroidx/compose/ui/node/LayoutNode;JLandroidx/compose/ui/node/HitTestResult;ZZ)V +HSPLandroidx/compose/ui/node/NodeCoordinator$Companion$PointerInputSource$1;->entityType-OLwlOKw()I +HSPLandroidx/compose/ui/node/NodeCoordinator$Companion$PointerInputSource$1;->shouldHitTestChildren(Landroidx/compose/ui/node/LayoutNode;)Z +Landroidx/compose/ui/node/NodeCoordinator$Companion$SemanticsSource$1; +HSPLandroidx/compose/ui/node/NodeCoordinator$Companion$SemanticsSource$1;->()V +Landroidx/compose/ui/node/NodeCoordinator$Companion$onCommitAffectingLayer$1; +HSPLandroidx/compose/ui/node/NodeCoordinator$Companion$onCommitAffectingLayer$1;->()V +HSPLandroidx/compose/ui/node/NodeCoordinator$Companion$onCommitAffectingLayer$1;->()V +HSPLandroidx/compose/ui/node/NodeCoordinator$Companion$onCommitAffectingLayer$1;->invoke(Landroidx/compose/ui/node/NodeCoordinator;)V +HSPLandroidx/compose/ui/node/NodeCoordinator$Companion$onCommitAffectingLayer$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/node/NodeCoordinator$Companion$onCommitAffectingLayerParams$1; +HSPLandroidx/compose/ui/node/NodeCoordinator$Companion$onCommitAffectingLayerParams$1;->()V +HSPLandroidx/compose/ui/node/NodeCoordinator$Companion$onCommitAffectingLayerParams$1;->()V +HSPLandroidx/compose/ui/node/NodeCoordinator$Companion$onCommitAffectingLayerParams$1;->invoke(Landroidx/compose/ui/node/NodeCoordinator;)V +HSPLandroidx/compose/ui/node/NodeCoordinator$Companion$onCommitAffectingLayerParams$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/node/NodeCoordinator$HitTestSource; +Landroidx/compose/ui/node/NodeCoordinator$hit$1; +HSPLandroidx/compose/ui/node/NodeCoordinator$hit$1;->(Landroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/Modifier$Node;Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V +HSPLandroidx/compose/ui/node/NodeCoordinator$hit$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/ui/node/NodeCoordinator$hit$1;->invoke()V +Landroidx/compose/ui/node/NodeCoordinator$invalidateParentLayer$1; +HSPLandroidx/compose/ui/node/NodeCoordinator$invalidateParentLayer$1;->(Landroidx/compose/ui/node/NodeCoordinator;)V +HSPLandroidx/compose/ui/node/NodeCoordinator$invalidateParentLayer$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/ui/node/NodeCoordinator$invalidateParentLayer$1;->invoke()V +Landroidx/compose/ui/node/NodeCoordinator$invoke$1; +HSPLandroidx/compose/ui/node/NodeCoordinator$invoke$1;->(Landroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/graphics/Canvas;)V +HSPLandroidx/compose/ui/node/NodeCoordinator$invoke$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/ui/node/NodeCoordinator$invoke$1;->invoke()V +Landroidx/compose/ui/node/NodeCoordinator$updateLayerParameters$1; +HSPLandroidx/compose/ui/node/NodeCoordinator$updateLayerParameters$1;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/node/NodeCoordinator$updateLayerParameters$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/ui/node/NodeCoordinator$updateLayerParameters$1;->invoke()V +Landroidx/compose/ui/node/NodeCoordinatorKt; +HSPLandroidx/compose/ui/node/NodeCoordinatorKt;->access$nextUntil-hw7D004(Landroidx/compose/ui/node/DelegatableNode;II)Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/node/NodeCoordinatorKt;->nextUntil-hw7D004(Landroidx/compose/ui/node/DelegatableNode;II)Landroidx/compose/ui/Modifier$Node; +Landroidx/compose/ui/node/NodeKind; +HSPLandroidx/compose/ui/node/NodeKind;->constructor-impl(I)I +Landroidx/compose/ui/node/NodeKindKt; +HSPLandroidx/compose/ui/node/NodeKindKt;->autoInvalidateInsertedNode(Landroidx/compose/ui/Modifier$Node;)V +HSPLandroidx/compose/ui/node/NodeKindKt;->autoInvalidateNodeIncludingDelegates(Landroidx/compose/ui/Modifier$Node;II)V +HSPLandroidx/compose/ui/node/NodeKindKt;->autoInvalidateNodeSelf(Landroidx/compose/ui/Modifier$Node;II)V +HSPLandroidx/compose/ui/node/NodeKindKt;->autoInvalidateRemovedNode(Landroidx/compose/ui/Modifier$Node;)V +HSPLandroidx/compose/ui/node/NodeKindKt;->autoInvalidateUpdatedNode(Landroidx/compose/ui/Modifier$Node;)V +HSPLandroidx/compose/ui/node/NodeKindKt;->calculateNodeKindSetFrom(Landroidx/compose/ui/Modifier$Element;)I +HSPLandroidx/compose/ui/node/NodeKindKt;->calculateNodeKindSetFrom(Landroidx/compose/ui/Modifier$Node;)I +HSPLandroidx/compose/ui/node/NodeKindKt;->calculateNodeKindSetFromIncludingDelegates(Landroidx/compose/ui/Modifier$Node;)I +HSPLandroidx/compose/ui/node/NodeKindKt;->getIncludeSelfInTraversal-H91voCI(I)Z +HSPLandroidx/compose/ui/node/NodeKindKt;->specifiesCanFocusProperty(Landroidx/compose/ui/focus/FocusPropertiesModifierNode;)Z +Landroidx/compose/ui/node/NodeMeasuringIntrinsics; +HSPLandroidx/compose/ui/node/NodeMeasuringIntrinsics;->()V +HSPLandroidx/compose/ui/node/NodeMeasuringIntrinsics;->()V +HSPLandroidx/compose/ui/node/NodeMeasuringIntrinsics;->maxWidth$ui_release(Landroidx/compose/ui/node/NodeMeasuringIntrinsics$MeasureBlock;Landroidx/compose/ui/layout/IntrinsicMeasureScope;Landroidx/compose/ui/layout/IntrinsicMeasurable;I)I +Landroidx/compose/ui/node/NodeMeasuringIntrinsics$DefaultIntrinsicMeasurable; +HSPLandroidx/compose/ui/node/NodeMeasuringIntrinsics$DefaultIntrinsicMeasurable;->(Landroidx/compose/ui/layout/IntrinsicMeasurable;Landroidx/compose/ui/node/NodeMeasuringIntrinsics$IntrinsicMinMax;Landroidx/compose/ui/node/NodeMeasuringIntrinsics$IntrinsicWidthHeight;)V +HSPLandroidx/compose/ui/node/NodeMeasuringIntrinsics$DefaultIntrinsicMeasurable;->measure-BRTryo0(J)Landroidx/compose/ui/layout/Placeable; +Landroidx/compose/ui/node/NodeMeasuringIntrinsics$EmptyPlaceable; +HSPLandroidx/compose/ui/node/NodeMeasuringIntrinsics$EmptyPlaceable;->(II)V +Landroidx/compose/ui/node/NodeMeasuringIntrinsics$IntrinsicMinMax; +HSPLandroidx/compose/ui/node/NodeMeasuringIntrinsics$IntrinsicMinMax;->$values()[Landroidx/compose/ui/node/NodeMeasuringIntrinsics$IntrinsicMinMax; +HSPLandroidx/compose/ui/node/NodeMeasuringIntrinsics$IntrinsicMinMax;->()V +HSPLandroidx/compose/ui/node/NodeMeasuringIntrinsics$IntrinsicMinMax;->(Ljava/lang/String;I)V +Landroidx/compose/ui/node/NodeMeasuringIntrinsics$IntrinsicWidthHeight; +HSPLandroidx/compose/ui/node/NodeMeasuringIntrinsics$IntrinsicWidthHeight;->$values()[Landroidx/compose/ui/node/NodeMeasuringIntrinsics$IntrinsicWidthHeight; +HSPLandroidx/compose/ui/node/NodeMeasuringIntrinsics$IntrinsicWidthHeight;->()V +HSPLandroidx/compose/ui/node/NodeMeasuringIntrinsics$IntrinsicWidthHeight;->(Ljava/lang/String;I)V +Landroidx/compose/ui/node/NodeMeasuringIntrinsics$MeasureBlock; +Landroidx/compose/ui/node/ObserverModifierNode; +Landroidx/compose/ui/node/ObserverModifierNodeKt; +HSPLandroidx/compose/ui/node/ObserverModifierNodeKt;->observeReads(Landroidx/compose/ui/Modifier$Node;Lkotlin/jvm/functions/Function0;)V +Landroidx/compose/ui/node/ObserverNodeOwnerScope; +HSPLandroidx/compose/ui/node/ObserverNodeOwnerScope;->()V +HSPLandroidx/compose/ui/node/ObserverNodeOwnerScope;->(Landroidx/compose/ui/node/ObserverModifierNode;)V +HSPLandroidx/compose/ui/node/ObserverNodeOwnerScope;->access$getOnObserveReadsChanged$cp()Lkotlin/jvm/functions/Function1; +Landroidx/compose/ui/node/ObserverNodeOwnerScope$Companion; +HSPLandroidx/compose/ui/node/ObserverNodeOwnerScope$Companion;->()V +HSPLandroidx/compose/ui/node/ObserverNodeOwnerScope$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/node/ObserverNodeOwnerScope$Companion;->getOnObserveReadsChanged$ui_release()Lkotlin/jvm/functions/Function1; +Landroidx/compose/ui/node/ObserverNodeOwnerScope$Companion$OnObserveReadsChanged$1; +HSPLandroidx/compose/ui/node/ObserverNodeOwnerScope$Companion$OnObserveReadsChanged$1;->()V +HSPLandroidx/compose/ui/node/ObserverNodeOwnerScope$Companion$OnObserveReadsChanged$1;->()V +Landroidx/compose/ui/node/OnPositionedDispatcher; +HSPLandroidx/compose/ui/node/OnPositionedDispatcher;->()V +HSPLandroidx/compose/ui/node/OnPositionedDispatcher;->()V +HSPLandroidx/compose/ui/node/OnPositionedDispatcher;->dispatch()V +HSPLandroidx/compose/ui/node/OnPositionedDispatcher;->dispatchHierarchy(Landroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/node/OnPositionedDispatcher;->isNotEmpty()Z +HSPLandroidx/compose/ui/node/OnPositionedDispatcher;->onNodePositioned(Landroidx/compose/ui/node/LayoutNode;)V +Landroidx/compose/ui/node/OnPositionedDispatcher$Companion; +HSPLandroidx/compose/ui/node/OnPositionedDispatcher$Companion;->()V +HSPLandroidx/compose/ui/node/OnPositionedDispatcher$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/node/OnPositionedDispatcher$Companion$DepthComparator; +HSPLandroidx/compose/ui/node/OnPositionedDispatcher$Companion$DepthComparator;->()V +HSPLandroidx/compose/ui/node/OnPositionedDispatcher$Companion$DepthComparator;->()V +HSPLandroidx/compose/ui/node/OnPositionedDispatcher$Companion$DepthComparator;->compare(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/node/LayoutNode;)I +HSPLandroidx/compose/ui/node/OnPositionedDispatcher$Companion$DepthComparator;->compare(Ljava/lang/Object;Ljava/lang/Object;)I +Landroidx/compose/ui/node/OwnedLayer; +Landroidx/compose/ui/node/Owner; +HSPLandroidx/compose/ui/node/Owner;->()V +HSPLandroidx/compose/ui/node/Owner;->forceMeasureTheSubtree$default(Landroidx/compose/ui/node/Owner;Landroidx/compose/ui/node/LayoutNode;ZILjava/lang/Object;)V +HSPLandroidx/compose/ui/node/Owner;->measureAndLayout$default(Landroidx/compose/ui/node/Owner;ZILjava/lang/Object;)V +HSPLandroidx/compose/ui/node/Owner;->onRequestMeasure$default(Landroidx/compose/ui/node/Owner;Landroidx/compose/ui/node/LayoutNode;ZZZILjava/lang/Object;)V +HSPLandroidx/compose/ui/node/Owner;->onRequestRelayout$default(Landroidx/compose/ui/node/Owner;Landroidx/compose/ui/node/LayoutNode;ZZILjava/lang/Object;)V +Landroidx/compose/ui/node/Owner$Companion; +HSPLandroidx/compose/ui/node/Owner$Companion;->()V +HSPLandroidx/compose/ui/node/Owner$Companion;->()V +HSPLandroidx/compose/ui/node/Owner$Companion;->getEnableExtraAssertions()Z +Landroidx/compose/ui/node/Owner$OnLayoutCompletedListener; +Landroidx/compose/ui/node/OwnerScope; +Landroidx/compose/ui/node/OwnerSnapshotObserver; +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver;->clearInvalidObservations$ui_release()V +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver;->observeLayoutModifierSnapshotReads$ui_release(Landroidx/compose/ui/node/LayoutNode;ZLkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver;->observeLayoutSnapshotReads$ui_release(Landroidx/compose/ui/node/LayoutNode;ZLkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver;->observeMeasureSnapshotReads$ui_release(Landroidx/compose/ui/node/LayoutNode;ZLkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver;->observeReads$ui_release(Landroidx/compose/ui/node/OwnerScope;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver;->observeSemanticsReads$ui_release(Landroidx/compose/ui/node/LayoutNode;Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver;->startObserving$ui_release()V +Landroidx/compose/ui/node/OwnerSnapshotObserver$clearInvalidObservations$1; +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$clearInvalidObservations$1;->()V +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$clearInvalidObservations$1;->()V +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$clearInvalidObservations$1;->invoke(Ljava/lang/Object;)Ljava/lang/Boolean; +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$clearInvalidObservations$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLayout$1; +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLayout$1;->()V +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLayout$1;->()V +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLayout$1;->invoke(Landroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLayout$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLayoutModifier$1; +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLayoutModifier$1;->()V +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLayoutModifier$1;->()V +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLayoutModifier$1;->invoke(Landroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLayoutModifier$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLayoutModifierInLookahead$1; +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLayoutModifierInLookahead$1;->()V +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLayoutModifierInLookahead$1;->()V +Landroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLookaheadLayout$1; +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLookaheadLayout$1;->()V +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLookaheadLayout$1;->()V +Landroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLookaheadMeasure$1; +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLookaheadMeasure$1;->()V +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLookaheadMeasure$1;->()V +Landroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingMeasure$1; +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingMeasure$1;->()V +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingMeasure$1;->()V +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingMeasure$1;->invoke(Landroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingMeasure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingSemantics$1; +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingSemantics$1;->()V +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingSemantics$1;->()V +Landroidx/compose/ui/node/ParentDataModifierNode; +Landroidx/compose/ui/node/ParentDataModifierNodeKt; +HSPLandroidx/compose/ui/node/ParentDataModifierNodeKt;->invalidateParentData(Landroidx/compose/ui/node/ParentDataModifierNode;)V +Landroidx/compose/ui/node/PointerInputModifierNode; +HSPLandroidx/compose/ui/node/PointerInputModifierNode;->sharePointerInputWithSiblings()Z +Landroidx/compose/ui/node/PointerInputModifierNodeKt; +HSPLandroidx/compose/ui/node/PointerInputModifierNodeKt;->getLayoutCoordinates(Landroidx/compose/ui/node/PointerInputModifierNode;)Landroidx/compose/ui/layout/LayoutCoordinates; +Landroidx/compose/ui/node/RootForTest; +Landroidx/compose/ui/node/SemanticsModifierNode; +HSPLandroidx/compose/ui/node/SemanticsModifierNode;->getShouldClearDescendantSemantics()Z +HSPLandroidx/compose/ui/node/SemanticsModifierNode;->getShouldMergeDescendantSemantics()Z +Landroidx/compose/ui/node/SemanticsModifierNodeKt; +HSPLandroidx/compose/ui/node/SemanticsModifierNodeKt;->getUseMinimumTouchTarget(Landroidx/compose/ui/semantics/SemanticsConfiguration;)Z +HSPLandroidx/compose/ui/node/SemanticsModifierNodeKt;->invalidateSemantics(Landroidx/compose/ui/node/SemanticsModifierNode;)V +HSPLandroidx/compose/ui/node/SemanticsModifierNodeKt;->touchBoundsInRoot(Landroidx/compose/ui/Modifier$Node;Z)Landroidx/compose/ui/geometry/Rect; +Landroidx/compose/ui/node/Snake; +HSPLandroidx/compose/ui/node/Snake;->addDiagonalToStack-impl([ILandroidx/compose/ui/node/IntStack;)V +HSPLandroidx/compose/ui/node/Snake;->constructor-impl([I)[I +HSPLandroidx/compose/ui/node/Snake;->getDiagonalSize-impl([I)I +HSPLandroidx/compose/ui/node/Snake;->getEndX-impl([I)I +HSPLandroidx/compose/ui/node/Snake;->getEndY-impl([I)I +HSPLandroidx/compose/ui/node/Snake;->getHasAdditionOrRemoval-impl([I)Z +HSPLandroidx/compose/ui/node/Snake;->getReverse-impl([I)Z +HSPLandroidx/compose/ui/node/Snake;->getStartX-impl([I)I +HSPLandroidx/compose/ui/node/Snake;->getStartY-impl([I)I +HSPLandroidx/compose/ui/node/Snake;->isAddition-impl([I)Z +Landroidx/compose/ui/node/TailModifierNode; +HSPLandroidx/compose/ui/node/TailModifierNode;->()V +HSPLandroidx/compose/ui/node/TailModifierNode;->getAttachHasBeenRun()Z +HSPLandroidx/compose/ui/node/TailModifierNode;->onAttach()V +HSPLandroidx/compose/ui/node/TailModifierNode;->onDetach()V +Landroidx/compose/ui/node/TreeSet; +HSPLandroidx/compose/ui/node/TreeSet;->(Ljava/util/Comparator;)V +Landroidx/compose/ui/node/UiApplier; +HSPLandroidx/compose/ui/node/UiApplier;->(Landroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/node/UiApplier;->insertBottomUp(ILandroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/node/UiApplier;->insertBottomUp(ILjava/lang/Object;)V +HSPLandroidx/compose/ui/node/UiApplier;->insertTopDown(ILandroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/node/UiApplier;->insertTopDown(ILjava/lang/Object;)V +HSPLandroidx/compose/ui/node/UiApplier;->onEndChanges()V +HSPLandroidx/compose/ui/node/UiApplier;->remove(II)V +Landroidx/compose/ui/platform/AbstractComposeView; +HSPLandroidx/compose/ui/platform/AbstractComposeView;->()V +HSPLandroidx/compose/ui/platform/AbstractComposeView;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V +HSPLandroidx/compose/ui/platform/AbstractComposeView;->addView(Landroid/view/View;ILandroid/view/ViewGroup$LayoutParams;)V +HSPLandroidx/compose/ui/platform/AbstractComposeView;->addView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V +HSPLandroidx/compose/ui/platform/AbstractComposeView;->cacheIfAlive(Landroidx/compose/runtime/CompositionContext;)Landroidx/compose/runtime/CompositionContext; +HSPLandroidx/compose/ui/platform/AbstractComposeView;->checkAddView()V +HSPLandroidx/compose/ui/platform/AbstractComposeView;->ensureCompositionCreated()V +HSPLandroidx/compose/ui/platform/AbstractComposeView;->internalOnLayout$ui_release(ZIIII)V +HSPLandroidx/compose/ui/platform/AbstractComposeView;->internalOnMeasure$ui_release(II)V +HSPLandroidx/compose/ui/platform/AbstractComposeView;->isAlive(Landroidx/compose/runtime/CompositionContext;)Z +HSPLandroidx/compose/ui/platform/AbstractComposeView;->onAttachedToWindow()V +HSPLandroidx/compose/ui/platform/AbstractComposeView;->onLayout(ZIIII)V +HSPLandroidx/compose/ui/platform/AbstractComposeView;->onMeasure(II)V +HSPLandroidx/compose/ui/platform/AbstractComposeView;->onRtlPropertiesChanged(I)V +HSPLandroidx/compose/ui/platform/AbstractComposeView;->resolveParentCompositionContext()Landroidx/compose/runtime/CompositionContext; +HSPLandroidx/compose/ui/platform/AbstractComposeView;->setParentCompositionContext(Landroidx/compose/runtime/CompositionContext;)V +HSPLandroidx/compose/ui/platform/AbstractComposeView;->setParentContext(Landroidx/compose/runtime/CompositionContext;)V +HSPLandroidx/compose/ui/platform/AbstractComposeView;->setPreviousAttachedWindowToken(Landroid/os/IBinder;)V +Landroidx/compose/ui/platform/AbstractComposeView$ensureCompositionCreated$1; +HSPLandroidx/compose/ui/platform/AbstractComposeView$ensureCompositionCreated$1;->(Landroidx/compose/ui/platform/AbstractComposeView;)V +HSPLandroidx/compose/ui/platform/AbstractComposeView$ensureCompositionCreated$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/ui/platform/AbstractComposeView$ensureCompositionCreated$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/platform/AccessibilityManager; +Landroidx/compose/ui/platform/AccessibilityNodeInfoVerificationHelperMethods; +HSPLandroidx/compose/ui/platform/AccessibilityNodeInfoVerificationHelperMethods;->()V +HSPLandroidx/compose/ui/platform/AccessibilityNodeInfoVerificationHelperMethods;->()V +HSPLandroidx/compose/ui/platform/AccessibilityNodeInfoVerificationHelperMethods;->setAvailableExtraData(Landroid/view/accessibility/AccessibilityNodeInfo;Ljava/util/List;)V +Landroidx/compose/ui/platform/AndroidAccessibilityManager; +HSPLandroidx/compose/ui/platform/AndroidAccessibilityManager;->()V +HSPLandroidx/compose/ui/platform/AndroidAccessibilityManager;->(Landroid/content/Context;)V +Landroidx/compose/ui/platform/AndroidAccessibilityManager$Companion; +HSPLandroidx/compose/ui/platform/AndroidAccessibilityManager$Companion;->()V +HSPLandroidx/compose/ui/platform/AndroidAccessibilityManager$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/platform/AndroidClipboardManager; +HSPLandroidx/compose/ui/platform/AndroidClipboardManager;->(Landroid/content/ClipboardManager;)V +HSPLandroidx/compose/ui/platform/AndroidClipboardManager;->(Landroid/content/Context;)V +HSPLandroidx/compose/ui/platform/AndroidClipboardManager;->hasText()Z +Landroidx/compose/ui/platform/AndroidComposeView; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->$r8$lambda$6rnsioIDxAVR319ScBkOteeoeiE(Landroidx/compose/ui/platform/AndroidComposeView;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->$r8$lambda$TvhWqMihl4JwF42Odovn0ewO6fk(Landroidx/compose/ui/platform/AndroidComposeView;Z)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->()V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->(Landroid/content/Context;Lkotlin/coroutines/CoroutineContext;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->access$getGetBooleanMethod$cp()Ljava/lang/reflect/Method; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->access$getPreviousMotionEvent$p(Landroidx/compose/ui/platform/AndroidComposeView;)Landroid/view/MotionEvent; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->access$getSystemPropertiesClass$cp()Ljava/lang/Class; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->access$get_viewTreeOwners(Landroidx/compose/ui/platform/AndroidComposeView;)Landroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->access$setGetBooleanMethod$cp(Ljava/lang/reflect/Method;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->access$setSystemPropertiesClass$cp(Ljava/lang/Class;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->autofillSupported()Z +HSPLandroidx/compose/ui/platform/AndroidComposeView;->boundsUpdatesEventLoop(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->calculatePositionInWindow-MK-Hz9U(J)J +HSPLandroidx/compose/ui/platform/AndroidComposeView;->childSizeCanAffectParentSize(Landroidx/compose/ui/node/LayoutNode;)Z +HSPLandroidx/compose/ui/platform/AndroidComposeView;->clearChildInvalidObservations(Landroid/view/ViewGroup;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->convertMeasureSpec-I7RO_PI(I)J +HSPLandroidx/compose/ui/platform/AndroidComposeView;->createLayer(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)Landroidx/compose/ui/node/OwnedLayer; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->dispatchDraw(Landroid/graphics/Canvas;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->dispatchTouchEvent(Landroid/view/MotionEvent;)Z +HSPLandroidx/compose/ui/platform/AndroidComposeView;->forceMeasureTheSubtree(Landroidx/compose/ui/node/LayoutNode;Z)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->getAccessibilityManager()Landroidx/compose/ui/platform/AccessibilityManager; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->getAccessibilityManager()Landroidx/compose/ui/platform/AndroidAccessibilityManager; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->getAndroidViewsHandler$ui_release()Landroidx/compose/ui/platform/AndroidViewsHandler; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->getAutofill()Landroidx/compose/ui/autofill/Autofill; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->getAutofillTree()Landroidx/compose/ui/autofill/AutofillTree; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->getClipboardManager()Landroidx/compose/ui/platform/AndroidClipboardManager; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->getClipboardManager()Landroidx/compose/ui/platform/ClipboardManager; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->getDensity()Landroidx/compose/ui/unit/Density; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->getFocusOwner()Landroidx/compose/ui/focus/FocusOwner; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->getFontFamilyResolver()Landroidx/compose/ui/text/font/FontFamily$Resolver; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->getFontLoader()Landroidx/compose/ui/text/font/Font$ResourceLoader; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->getFontWeightAdjustmentCompat(Landroid/content/res/Configuration;)I +HSPLandroidx/compose/ui/platform/AndroidComposeView;->getHapticFeedBack()Landroidx/compose/ui/hapticfeedback/HapticFeedback; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->getInputModeManager()Landroidx/compose/ui/input/InputModeManager; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->getModifierLocalManager()Landroidx/compose/ui/modifier/ModifierLocalManager; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->getPlatformTextInputPluginRegistry()Landroidx/compose/ui/text/input/PlatformTextInputPluginRegistry; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->getPlatformTextInputPluginRegistry()Landroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->getPointerIconService()Landroidx/compose/ui/input/pointer/PointerIconService; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->getRoot()Landroidx/compose/ui/node/LayoutNode; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->getSemanticsOwner()Landroidx/compose/ui/semantics/SemanticsOwner; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->getSharedDrawScope()Landroidx/compose/ui/node/LayoutNodeDrawScope; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->getShowLayoutBounds()Z +HSPLandroidx/compose/ui/platform/AndroidComposeView;->getSnapshotObserver()Landroidx/compose/ui/node/OwnerSnapshotObserver; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->getTextInputService()Landroidx/compose/ui/text/input/TextInputService; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->getTextToolbar()Landroidx/compose/ui/platform/TextToolbar; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->getView()Landroid/view/View; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->getViewConfiguration()Landroidx/compose/ui/platform/ViewConfiguration; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->getViewTreeOwners()Landroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->getWindowInfo()Landroidx/compose/ui/platform/WindowInfo; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->get_viewTreeOwners()Landroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->globalLayoutListener$lambda$1(Landroidx/compose/ui/platform/AndroidComposeView;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->handleMotionEvent-8iAsVTc(Landroid/view/MotionEvent;)I +HSPLandroidx/compose/ui/platform/AndroidComposeView;->hasChangedDevices(Landroid/view/MotionEvent;Landroid/view/MotionEvent;)Z +HSPLandroidx/compose/ui/platform/AndroidComposeView;->invalidateLayers(Landroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->invalidateLayoutNodeMeasurement(Landroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->isBadMotionEvent(Landroid/view/MotionEvent;)Z +HSPLandroidx/compose/ui/platform/AndroidComposeView;->isInBounds(Landroid/view/MotionEvent;)Z +HSPLandroidx/compose/ui/platform/AndroidComposeView;->localToScreen-MK-Hz9U(J)J +HSPLandroidx/compose/ui/platform/AndroidComposeView;->measureAndLayout(Z)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->measureAndLayout-0kLqBqw(Landroidx/compose/ui/node/LayoutNode;J)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->notifyLayerIsDirty$ui_release(Landroidx/compose/ui/node/OwnedLayer;Z)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->onAttach(Landroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->onAttachedToWindow()V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->onCheckIsTextEditor()Z +HSPLandroidx/compose/ui/platform/AndroidComposeView;->onCreateInputConnection(Landroid/view/inputmethod/EditorInfo;)Landroid/view/inputmethod/InputConnection; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->onDetach(Landroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->onDraw(Landroid/graphics/Canvas;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->onEndApplyChanges()V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->onFocusChanged(ZILandroid/graphics/Rect;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->onLayout(ZIIII)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->onLayoutChange(Landroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->onMeasure(II)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->onProvideAutofillVirtualStructure(Landroid/view/ViewStructure;I)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->onRequestMeasure(Landroidx/compose/ui/node/LayoutNode;ZZZ)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->onRequestRelayout(Landroidx/compose/ui/node/LayoutNode;ZZ)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->onResume(Landroidx/lifecycle/LifecycleOwner;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->onRtlPropertiesChanged(I)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->onSemanticsChange()V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->onWindowFocusChanged(Z)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->pack-ZIaKswc(II)J +HSPLandroidx/compose/ui/platform/AndroidComposeView;->recalculateWindowPosition()V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->recalculateWindowPosition(Landroid/view/MotionEvent;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->recalculateWindowViewTransforms()V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->recycle$ui_release(Landroidx/compose/ui/node/OwnedLayer;)Z +HSPLandroidx/compose/ui/platform/AndroidComposeView;->registerOnEndApplyChangesListener(Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->requestClearInvalidObservations()V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->requestOnPositionedCallback(Landroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->scheduleMeasureAndLayout$default(Landroidx/compose/ui/platform/AndroidComposeView;Landroidx/compose/ui/node/LayoutNode;ILjava/lang/Object;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->scheduleMeasureAndLayout(Landroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->screenToLocal-MK-Hz9U(J)J +HSPLandroidx/compose/ui/platform/AndroidComposeView;->sendMotionEvent-8iAsVTc(Landroid/view/MotionEvent;)I +HSPLandroidx/compose/ui/platform/AndroidComposeView;->setConfigurationChangeObserver(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->setLayoutDirection(Landroidx/compose/ui/unit/LayoutDirection;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->setOnViewTreeOwnersAvailable(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->setShowLayoutBounds(Z)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->set_viewTreeOwners(Landroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->touchModeChangeListener$lambda$3(Landroidx/compose/ui/platform/AndroidComposeView;Z)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->updatePositionCacheAndDispatch()V +Landroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda1; +HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda1;->(Landroidx/compose/ui/platform/AndroidComposeView;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda1;->onGlobalLayout()V +Landroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda2; +HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda2;->(Landroidx/compose/ui/platform/AndroidComposeView;)V +Landroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda3; +HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda3;->(Landroidx/compose/ui/platform/AndroidComposeView;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda3;->onTouchModeChanged(Z)V +Landroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda4; +HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda4;->(Landroidx/compose/ui/platform/AndroidComposeView;)V +Landroidx/compose/ui/platform/AndroidComposeView$Companion; +HSPLandroidx/compose/ui/platform/AndroidComposeView$Companion;->()V +HSPLandroidx/compose/ui/platform/AndroidComposeView$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView$Companion;->access$getIsShowingLayoutBounds(Landroidx/compose/ui/platform/AndroidComposeView$Companion;)Z +HSPLandroidx/compose/ui/platform/AndroidComposeView$Companion;->getIsShowingLayoutBounds()Z +Landroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners; +HSPLandroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;->()V +HSPLandroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;->(Landroidx/lifecycle/LifecycleOwner;Landroidx/savedstate/SavedStateRegistryOwner;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;->getLifecycleOwner()Landroidx/lifecycle/LifecycleOwner; +HSPLandroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;->getSavedStateRegistryOwner()Landroidx/savedstate/SavedStateRegistryOwner; +Landroidx/compose/ui/platform/AndroidComposeView$_inputModeManager$1; +HSPLandroidx/compose/ui/platform/AndroidComposeView$_inputModeManager$1;->(Landroidx/compose/ui/platform/AndroidComposeView;)V +Landroidx/compose/ui/platform/AndroidComposeView$configurationChangeObserver$1; +HSPLandroidx/compose/ui/platform/AndroidComposeView$configurationChangeObserver$1;->()V +HSPLandroidx/compose/ui/platform/AndroidComposeView$configurationChangeObserver$1;->()V +Landroidx/compose/ui/platform/AndroidComposeView$focusOwner$1; +HSPLandroidx/compose/ui/platform/AndroidComposeView$focusOwner$1;->(Landroidx/compose/ui/platform/AndroidComposeView;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView$focusOwner$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/ui/platform/AndroidComposeView$focusOwner$1;->invoke(Lkotlin/jvm/functions/Function0;)V +Landroidx/compose/ui/platform/AndroidComposeView$keyInputModifier$1; +HSPLandroidx/compose/ui/platform/AndroidComposeView$keyInputModifier$1;->(Landroidx/compose/ui/platform/AndroidComposeView;)V +Landroidx/compose/ui/platform/AndroidComposeView$platformTextInputPluginRegistry$1; +HSPLandroidx/compose/ui/platform/AndroidComposeView$platformTextInputPluginRegistry$1;->(Landroidx/compose/ui/platform/AndroidComposeView;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView$platformTextInputPluginRegistry$1;->invoke(Landroidx/compose/ui/text/input/PlatformTextInputPlugin;Landroidx/compose/ui/text/input/PlatformTextInput;)Landroidx/compose/ui/text/input/PlatformTextInputAdapter; +HSPLandroidx/compose/ui/platform/AndroidComposeView$platformTextInputPluginRegistry$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/platform/AndroidComposeView$pointerIconService$1; +HSPLandroidx/compose/ui/platform/AndroidComposeView$pointerIconService$1;->(Landroidx/compose/ui/platform/AndroidComposeView;)V +Landroidx/compose/ui/platform/AndroidComposeView$resendMotionEventOnLayout$1; +HSPLandroidx/compose/ui/platform/AndroidComposeView$resendMotionEventOnLayout$1;->(Landroidx/compose/ui/platform/AndroidComposeView;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView$resendMotionEventOnLayout$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/ui/platform/AndroidComposeView$resendMotionEventOnLayout$1;->invoke()V +Landroidx/compose/ui/platform/AndroidComposeView$resendMotionEventRunnable$1; +HSPLandroidx/compose/ui/platform/AndroidComposeView$resendMotionEventRunnable$1;->(Landroidx/compose/ui/platform/AndroidComposeView;)V +Landroidx/compose/ui/platform/AndroidComposeView$rotaryInputModifier$1; +HSPLandroidx/compose/ui/platform/AndroidComposeView$rotaryInputModifier$1;->()V +HSPLandroidx/compose/ui/platform/AndroidComposeView$rotaryInputModifier$1;->()V +Landroidx/compose/ui/platform/AndroidComposeView$snapshotObserver$1; +HSPLandroidx/compose/ui/platform/AndroidComposeView$snapshotObserver$1;->$r8$lambda$fxmMOjfIK0OrAcx22ga9_XhotFQ(Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView$snapshotObserver$1;->(Landroidx/compose/ui/platform/AndroidComposeView;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView$snapshotObserver$1;->invoke$lambda$0(Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView$snapshotObserver$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/ui/platform/AndroidComposeView$snapshotObserver$1;->invoke(Lkotlin/jvm/functions/Function0;)V +Landroidx/compose/ui/platform/AndroidComposeView$snapshotObserver$1$$ExternalSyntheticLambda0; +HSPLandroidx/compose/ui/platform/AndroidComposeView$snapshotObserver$1$$ExternalSyntheticLambda0;->run()V +Landroidx/compose/ui/platform/AndroidComposeView$viewTreeOwners$2; +HSPLandroidx/compose/ui/platform/AndroidComposeView$viewTreeOwners$2;->(Landroidx/compose/ui/platform/AndroidComposeView;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView$viewTreeOwners$2;->invoke()Landroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners; +HSPLandroidx/compose/ui/platform/AndroidComposeView$viewTreeOwners$2;->invoke()Ljava/lang/Object; +Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->()V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->(Landroidx/compose/ui/platform/AndroidComposeView;)V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->access$createNodeInfo(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;I)Landroid/view/accessibility/AccessibilityNodeInfo; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->access$getContentCaptureSessionCompat(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;Landroid/view/View;)Landroidx/compose/ui/platform/coreshims/ContentCaptureSessionCompat; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->access$performActionHelper(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;IILandroid/os/Bundle;)Z +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->addExtraDataToAccessibilityNodeInfoHelper(ILandroid/view/accessibility/AccessibilityNodeInfo;Ljava/lang/String;Landroid/os/Bundle;)V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->boundsUpdatesEventLoop(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->createNodeInfo(I)Landroid/view/accessibility/AccessibilityNodeInfo; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getAccessibilityManager$ui_release()Landroid/view/accessibility/AccessibilityManager; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getAccessibilityNodeProvider(Landroid/view/View;)Landroidx/core/view/accessibility/AccessibilityNodeProviderCompat; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getAccessibilitySelectionEnd(Landroidx/compose/ui/semantics/SemanticsNode;)I +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getAccessibilitySelectionStart(Landroidx/compose/ui/semantics/SemanticsNode;)I +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getContentCaptureSessionCompat(Landroid/view/View;)Landroidx/compose/ui/platform/coreshims/ContentCaptureSessionCompat; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getCurrentSemanticsNodes$ui_release()Ljava/util/Map; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getEnabledStateListener$ui_release()Landroid/view/accessibility/AccessibilityManager$AccessibilityStateChangeListener; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getInfoIsCheckable(Landroidx/compose/ui/semantics/SemanticsNode;)Z +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getInfoStateDescriptionOrNull(Landroidx/compose/ui/semantics/SemanticsNode;)Ljava/lang/String; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getInfoText(Landroidx/compose/ui/semantics/SemanticsNode;)Landroid/text/SpannableString; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getIterableTextForAccessibility(Landroidx/compose/ui/semantics/SemanticsNode;)Ljava/lang/String; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getTextForTextField(Landroidx/compose/ui/semantics/SemanticsConfiguration;)Landroidx/compose/ui/text/AnnotatedString; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getTouchExplorationStateListener$ui_release()Landroid/view/accessibility/AccessibilityManager$TouchExplorationStateChangeListener; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->isEnabled$ui_release()Z +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->isEnabledForAccessibility()Z +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->isEnabledForContentCapture()Z +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->isScreenReaderFocusable(Landroidx/compose/ui/semantics/SemanticsNode;)Z +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->onLayoutChange$ui_release(Landroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->onSemanticsChange$ui_release()V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->performActionHelper(IILandroid/os/Bundle;)Z +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->populateAccessibilityNodeInfoProperties$canScrollBackward(Landroidx/compose/ui/semantics/ScrollAxisRange;)Z +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->populateAccessibilityNodeInfoProperties$canScrollForward(Landroidx/compose/ui/semantics/ScrollAxisRange;)Z +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->populateAccessibilityNodeInfoProperties(ILandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;Landroidx/compose/ui/semantics/SemanticsNode;)V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->semanticComparator(Z)Ljava/util/Comparator; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->setContentCaptureSession$ui_release(Landroidx/compose/ui/platform/coreshims/ContentCaptureSessionCompat;)V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->setContentInvalid(Landroidx/compose/ui/semantics/SemanticsNode;Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat;)V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->setIsCheckable(Landroidx/compose/ui/semantics/SemanticsNode;Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat;)V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->setStateDescription(Landroidx/compose/ui/semantics/SemanticsNode;Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat;)V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->setText(Landroidx/compose/ui/semantics/SemanticsNode;Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat;)V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->setTraversalValues()V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->sortByGeometryGroupings$placedEntryRowOverlaps(Ljava/util/List;Landroidx/compose/ui/semantics/SemanticsNode;)Z +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->sortByGeometryGroupings(ZLjava/util/List;Ljava/util/Map;)Ljava/util/List; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->subtreeSortedByGeometryGrouping$depthFirstSearch(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;Ljava/util/List;Ljava/util/Map;ZLandroidx/compose/ui/semantics/SemanticsNode;)V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->subtreeSortedByGeometryGrouping(ZLjava/util/List;)Ljava/util/List; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->trimToSize(Ljava/lang/CharSequence;I)Ljava/lang/CharSequence; +Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda0; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda0;->(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)V +Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda1; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda1;->(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)V +Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda2; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda2;->(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)V +Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$1; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$1;->(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$1;->onViewAttachedToWindow(Landroid/view/View;)V +Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$Api24Impl; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$Api24Impl;->()V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$Api24Impl;->()V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$Api24Impl;->addSetProgressAction(Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat;Landroidx/compose/ui/semantics/SemanticsNode;)V +Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$Api29Impl; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$Api29Impl;->()V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$Api29Impl;->()V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$Api29Impl;->addPageActions(Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat;Landroidx/compose/ui/semantics/SemanticsNode;)V +Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$Companion; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$Companion;->()V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$MyNodeProvider; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$MyNodeProvider;->(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$MyNodeProvider;->createAccessibilityNodeInfo(I)Landroid/view/accessibility/AccessibilityNodeInfo; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$MyNodeProvider;->performAction(IILandroid/os/Bundle;)Z +Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$SemanticsNodeCopy; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$SemanticsNodeCopy;->(Landroidx/compose/ui/semantics/SemanticsNode;Ljava/util/Map;)V +Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$WhenMappings; +Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$boundsUpdatesEventLoop$1; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$boundsUpdatesEventLoop$1;->(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;Lkotlin/coroutines/Continuation;)V +Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$semanticComparator$$inlined$thenBy$1; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$semanticComparator$$inlined$thenBy$1;->(Ljava/util/Comparator;Ljava/util/Comparator;)V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$semanticComparator$$inlined$thenBy$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I +Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$semanticComparator$$inlined$thenBy$2; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$semanticComparator$$inlined$thenBy$2;->(Ljava/util/Comparator;)V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$semanticComparator$$inlined$thenBy$2;->compare(Ljava/lang/Object;Ljava/lang/Object;)I +Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$semanticComparator$comparator$1; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$semanticComparator$comparator$1;->()V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$semanticComparator$comparator$1;->()V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$semanticComparator$comparator$1;->invoke(Landroidx/compose/ui/semantics/SemanticsNode;)Ljava/lang/Comparable; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$semanticComparator$comparator$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$semanticComparator$comparator$2; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$semanticComparator$comparator$2;->()V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$semanticComparator$comparator$2;->()V +Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$semanticComparator$comparator$3; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$semanticComparator$comparator$3;->()V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$semanticComparator$comparator$3;->()V +Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$semanticComparator$comparator$4; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$semanticComparator$comparator$4;->()V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$semanticComparator$comparator$4;->()V +Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$sendScrollEventIfNeededLambda$1; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$sendScrollEventIfNeededLambda$1;->(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)V +Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$sortByGeometryGroupings$$inlined$compareBy$1; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$sortByGeometryGroupings$$inlined$compareBy$1;->()V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$sortByGeometryGroupings$$inlined$compareBy$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I +Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$sortByGeometryGroupings$1; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$sortByGeometryGroupings$1;->()V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$sortByGeometryGroupings$1;->()V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$sortByGeometryGroupings$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$sortByGeometryGroupings$1;->invoke(Lkotlin/Pair;)Ljava/lang/Comparable; +Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$sortByGeometryGroupings$2; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$sortByGeometryGroupings$2;->()V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$sortByGeometryGroupings$2;->()V +Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->access$enabled(Landroidx/compose/ui/semantics/SemanticsNode;)Z +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->access$excludeLineAndPageGranularities(Landroidx/compose/ui/semantics/SemanticsNode;)Z +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->access$getGetTraversalIndex(Landroidx/compose/ui/semantics/SemanticsNode;)F +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->access$getInfoContentDescriptionOrNull(Landroidx/compose/ui/semantics/SemanticsNode;)Ljava/lang/String; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->access$isPassword(Landroidx/compose/ui/semantics/SemanticsNode;)Z +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->access$isRtl(Landroidx/compose/ui/semantics/SemanticsNode;)Z +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->access$isTextField(Landroidx/compose/ui/semantics/SemanticsNode;)Z +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->access$isTraversalGroup(Landroidx/compose/ui/semantics/SemanticsNode;)Ljava/lang/Boolean; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->access$isVisible(Landroidx/compose/ui/semantics/SemanticsNode;)Z +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->access$overlaps(Landroidx/compose/ui/platform/OpenEndRange;Landroidx/compose/ui/platform/OpenEndRange;)Z +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->access$toLegacyClassName-V4PA4sw(I)Ljava/lang/String; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->enabled(Landroidx/compose/ui/semantics/SemanticsNode;)Z +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->excludeLineAndPageGranularities(Landroidx/compose/ui/semantics/SemanticsNode;)Z +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->findClosestParentNode(Landroidx/compose/ui/node/LayoutNode;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/node/LayoutNode; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->getAllUncoveredSemanticsNodesToMap$findAllSemanticNodesRecursive(Landroid/graphics/Region;Landroidx/compose/ui/semantics/SemanticsNode;Ljava/util/Map;Landroidx/compose/ui/semantics/SemanticsNode;)V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->getAllUncoveredSemanticsNodesToMap(Landroidx/compose/ui/semantics/SemanticsOwner;)Ljava/util/Map; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->getGetTraversalIndex(Landroidx/compose/ui/semantics/SemanticsNode;)F +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->getInfoContentDescriptionOrNull(Landroidx/compose/ui/semantics/SemanticsNode;)Ljava/lang/String; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->isPassword(Landroidx/compose/ui/semantics/SemanticsNode;)Z +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->isRtl(Landroidx/compose/ui/semantics/SemanticsNode;)Z +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->isTextField(Landroidx/compose/ui/semantics/SemanticsNode;)Z +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->isTraversalGroup(Landroidx/compose/ui/semantics/SemanticsNode;)Ljava/lang/Boolean; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->isVisible(Landroidx/compose/ui/semantics/SemanticsNode;)Z +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->overlaps(Landroidx/compose/ui/platform/OpenEndRange;Landroidx/compose/ui/platform/OpenEndRange;)Z +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->rangeUntil(FF)Landroidx/compose/ui/platform/OpenEndRange; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->semanticsIdToView(Landroidx/compose/ui/platform/AndroidViewsHandler;I)Landroid/view/View; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->toLegacyClassName-V4PA4sw(I)Ljava/lang/String; +Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt$excludeLineAndPageGranularities$ancestor$1; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt$excludeLineAndPageGranularities$ancestor$1;->()V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt$excludeLineAndPageGranularities$ancestor$1;->()V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt$excludeLineAndPageGranularities$ancestor$1;->invoke(Landroidx/compose/ui/node/LayoutNode;)Ljava/lang/Boolean; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt$excludeLineAndPageGranularities$ancestor$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/platform/AndroidComposeViewForceDarkModeQ; +HSPLandroidx/compose/ui/platform/AndroidComposeViewForceDarkModeQ;->()V +HSPLandroidx/compose/ui/platform/AndroidComposeViewForceDarkModeQ;->()V +HSPLandroidx/compose/ui/platform/AndroidComposeViewForceDarkModeQ;->disallowForceDark(Landroid/view/View;)V +Landroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsO; +HSPLandroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsO;->()V +HSPLandroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsO;->()V +HSPLandroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsO;->focusable(Landroid/view/View;IZ)V +Landroidx/compose/ui/platform/AndroidComposeView_androidKt; +HSPLandroidx/compose/ui/platform/AndroidComposeView_androidKt;->access$layoutDirectionFromInt(I)Landroidx/compose/ui/unit/LayoutDirection; +HSPLandroidx/compose/ui/platform/AndroidComposeView_androidKt;->getLocaleLayoutDirection(Landroid/content/res/Configuration;)Landroidx/compose/ui/unit/LayoutDirection; +HSPLandroidx/compose/ui/platform/AndroidComposeView_androidKt;->layoutDirectionFromInt(I)Landroidx/compose/ui/unit/LayoutDirection; +Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt; +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;->()V +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;->ProvideAndroidCompositionLocals$lambda$1(Landroidx/compose/runtime/MutableState;)Landroid/content/res/Configuration; +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;->ProvideAndroidCompositionLocals(Landroidx/compose/ui/platform/AndroidComposeView;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;->getLocalConfiguration()Landroidx/compose/runtime/ProvidableCompositionLocal; +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;->getLocalContext()Landroidx/compose/runtime/ProvidableCompositionLocal; +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;->getLocalLifecycleOwner()Landroidx/compose/runtime/ProvidableCompositionLocal; +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;->getLocalView()Landroidx/compose/runtime/ProvidableCompositionLocal; +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;->obtainImageVectorCache(Landroid/content/Context;Landroid/content/res/Configuration;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/res/ImageVectorCache; +Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalConfiguration$1; +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalConfiguration$1;->()V +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalConfiguration$1;->()V +Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalContext$1; +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalContext$1;->()V +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalContext$1;->()V +Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalImageVectorCache$1; +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalImageVectorCache$1;->()V +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalImageVectorCache$1;->()V +Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalLifecycleOwner$1; +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalLifecycleOwner$1;->()V +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalLifecycleOwner$1;->()V +Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalSavedStateRegistryOwner$1; +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalSavedStateRegistryOwner$1;->()V +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalSavedStateRegistryOwner$1;->()V +Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalView$1; +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalView$1;->()V +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalView$1;->()V +Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$1$1; +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$1$1;->(Landroidx/compose/runtime/MutableState;)V +Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$2; +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$2;->(Landroidx/compose/ui/platform/DisposableSaveableStateRegistry;)V +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$2;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult; +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$2$invoke$$inlined$onDispose$1; +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$2$invoke$$inlined$onDispose$1;->(Landroidx/compose/ui/platform/DisposableSaveableStateRegistry;)V +Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$3; +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$3;->(Landroidx/compose/ui/platform/AndroidComposeView;Landroidx/compose/ui/platform/AndroidUriHandler;Lkotlin/jvm/functions/Function2;I)V +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$3;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$4; +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$4;->(Landroidx/compose/ui/platform/AndroidComposeView;Lkotlin/jvm/functions/Function2;I)V +Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$1; +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$1;->(Landroid/content/Context;Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$callbacks$1$1;)V +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult; +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$1$invoke$$inlined$onDispose$1; +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$1$invoke$$inlined$onDispose$1;->(Landroid/content/Context;Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$callbacks$1$1;)V +Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$callbacks$1$1; +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$callbacks$1$1;->(Landroid/content/res/Configuration;Landroidx/compose/ui/res/ImageVectorCache;)V +Landroidx/compose/ui/platform/AndroidFontResourceLoader; +HSPLandroidx/compose/ui/platform/AndroidFontResourceLoader;->(Landroid/content/Context;)V +Landroidx/compose/ui/platform/AndroidTextToolbar; +HSPLandroidx/compose/ui/platform/AndroidTextToolbar;->(Landroid/view/View;)V +HSPLandroidx/compose/ui/platform/AndroidTextToolbar;->getStatus()Landroidx/compose/ui/platform/TextToolbarStatus; +Landroidx/compose/ui/platform/AndroidTextToolbar$textActionModeCallback$1; +HSPLandroidx/compose/ui/platform/AndroidTextToolbar$textActionModeCallback$1;->(Landroidx/compose/ui/platform/AndroidTextToolbar;)V +Landroidx/compose/ui/platform/AndroidUiDispatcher; +HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->()V +HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->(Landroid/view/Choreographer;Landroid/os/Handler;)V +HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->(Landroid/view/Choreographer;Landroid/os/Handler;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->access$getHandler$p(Landroidx/compose/ui/platform/AndroidUiDispatcher;)Landroid/os/Handler; +HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->access$getLock$p(Landroidx/compose/ui/platform/AndroidUiDispatcher;)Ljava/lang/Object; +HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->access$getMain$delegate$cp()Lkotlin/Lazy; +HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->access$getToRunOnFrame$p(Landroidx/compose/ui/platform/AndroidUiDispatcher;)Ljava/util/List; +HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->access$performFrameDispatch(Landroidx/compose/ui/platform/AndroidUiDispatcher;J)V +HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->access$performTrampolineDispatch(Landroidx/compose/ui/platform/AndroidUiDispatcher;)V +PLandroidx/compose/ui/platform/AndroidUiDispatcher;->access$setScheduledFrameDispatch$p(Landroidx/compose/ui/platform/AndroidUiDispatcher;Z)V +HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->dispatch(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V +HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->getChoreographer()Landroid/view/Choreographer; +HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->getFrameClock()Landroidx/compose/runtime/MonotonicFrameClock; +HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->nextTask()Ljava/lang/Runnable; +HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->performFrameDispatch(J)V +HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->performTrampolineDispatch()V +HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->postFrameCallback$ui_release(Landroid/view/Choreographer$FrameCallback;)V +Landroidx/compose/ui/platform/AndroidUiDispatcher$Companion; +HSPLandroidx/compose/ui/platform/AndroidUiDispatcher$Companion;->()V +HSPLandroidx/compose/ui/platform/AndroidUiDispatcher$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/platform/AndroidUiDispatcher$Companion;->getCurrentThread()Lkotlin/coroutines/CoroutineContext; +HSPLandroidx/compose/ui/platform/AndroidUiDispatcher$Companion;->getMain()Lkotlin/coroutines/CoroutineContext; +Landroidx/compose/ui/platform/AndroidUiDispatcher$Companion$Main$2; +HSPLandroidx/compose/ui/platform/AndroidUiDispatcher$Companion$Main$2;->()V +HSPLandroidx/compose/ui/platform/AndroidUiDispatcher$Companion$Main$2;->()V +HSPLandroidx/compose/ui/platform/AndroidUiDispatcher$Companion$Main$2;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/ui/platform/AndroidUiDispatcher$Companion$Main$2;->invoke()Lkotlin/coroutines/CoroutineContext; +Landroidx/compose/ui/platform/AndroidUiDispatcher$Companion$currentThread$1; +HSPLandroidx/compose/ui/platform/AndroidUiDispatcher$Companion$currentThread$1;->()V +Landroidx/compose/ui/platform/AndroidUiDispatcher$dispatchCallback$1; +HSPLandroidx/compose/ui/platform/AndroidUiDispatcher$dispatchCallback$1;->(Landroidx/compose/ui/platform/AndroidUiDispatcher;)V +HSPLandroidx/compose/ui/platform/AndroidUiDispatcher$dispatchCallback$1;->doFrame(J)V +HSPLandroidx/compose/ui/platform/AndroidUiDispatcher$dispatchCallback$1;->run()V +Landroidx/compose/ui/platform/AndroidUiDispatcher_androidKt; +HSPLandroidx/compose/ui/platform/AndroidUiDispatcher_androidKt;->access$isMainThread()Z +HSPLandroidx/compose/ui/platform/AndroidUiDispatcher_androidKt;->isMainThread()Z +Landroidx/compose/ui/platform/AndroidUiFrameClock; +HSPLandroidx/compose/ui/platform/AndroidUiFrameClock;->()V +HSPLandroidx/compose/ui/platform/AndroidUiFrameClock;->(Landroid/view/Choreographer;Landroidx/compose/ui/platform/AndroidUiDispatcher;)V +HSPLandroidx/compose/ui/platform/AndroidUiFrameClock;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; +HSPLandroidx/compose/ui/platform/AndroidUiFrameClock;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; +HSPLandroidx/compose/ui/platform/AndroidUiFrameClock;->getChoreographer()Landroid/view/Choreographer; +HSPLandroidx/compose/ui/platform/AndroidUiFrameClock;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext; +HSPLandroidx/compose/ui/platform/AndroidUiFrameClock;->withFrameNanos(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/compose/ui/platform/AndroidUiFrameClock$withFrameNanos$2$1; +HSPLandroidx/compose/ui/platform/AndroidUiFrameClock$withFrameNanos$2$1;->(Landroidx/compose/ui/platform/AndroidUiDispatcher;Landroid/view/Choreographer$FrameCallback;)V +Landroidx/compose/ui/platform/AndroidUiFrameClock$withFrameNanos$2$callback$1; +HSPLandroidx/compose/ui/platform/AndroidUiFrameClock$withFrameNanos$2$callback$1;->(Lkotlinx/coroutines/CancellableContinuation;Landroidx/compose/ui/platform/AndroidUiFrameClock;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/platform/AndroidUiFrameClock$withFrameNanos$2$callback$1;->doFrame(J)V +Landroidx/compose/ui/platform/AndroidUriHandler; +HSPLandroidx/compose/ui/platform/AndroidUriHandler;->()V +HSPLandroidx/compose/ui/platform/AndroidUriHandler;->(Landroid/content/Context;)V +Landroidx/compose/ui/platform/AndroidViewConfiguration; +HSPLandroidx/compose/ui/platform/AndroidViewConfiguration;->()V +HSPLandroidx/compose/ui/platform/AndroidViewConfiguration;->(Landroid/view/ViewConfiguration;)V +HSPLandroidx/compose/ui/platform/AndroidViewConfiguration;->getTouchSlop()F +Landroidx/compose/ui/platform/AndroidViewsHandler; +HSPLandroidx/compose/ui/platform/AndroidViewsHandler;->(Landroid/content/Context;)V +HSPLandroidx/compose/ui/platform/AndroidViewsHandler;->getLayoutNodeToHolder()Ljava/util/HashMap; +HSPLandroidx/compose/ui/platform/AndroidViewsHandler;->onLayout(ZIIII)V +HSPLandroidx/compose/ui/platform/AndroidViewsHandler;->onMeasure(II)V +HSPLandroidx/compose/ui/platform/AndroidViewsHandler;->requestLayout()V +Landroidx/compose/ui/platform/CalculateMatrixToWindow; +Landroidx/compose/ui/platform/CalculateMatrixToWindowApi29; +HSPLandroidx/compose/ui/platform/CalculateMatrixToWindowApi29;->()V +HSPLandroidx/compose/ui/platform/CalculateMatrixToWindowApi29;->calculateMatrixToWindow-EL8BTi8(Landroid/view/View;[F)V +Landroidx/compose/ui/platform/ClipboardManager; +Landroidx/compose/ui/platform/ComposableSingletons$Wrapper_androidKt; +HSPLandroidx/compose/ui/platform/ComposableSingletons$Wrapper_androidKt;->()V +HSPLandroidx/compose/ui/platform/ComposableSingletons$Wrapper_androidKt;->()V +HSPLandroidx/compose/ui/platform/ComposableSingletons$Wrapper_androidKt;->getLambda-1$ui_release()Lkotlin/jvm/functions/Function2; +Landroidx/compose/ui/platform/ComposableSingletons$Wrapper_androidKt$lambda-1$1; +HSPLandroidx/compose/ui/platform/ComposableSingletons$Wrapper_androidKt$lambda-1$1;->()V +HSPLandroidx/compose/ui/platform/ComposableSingletons$Wrapper_androidKt$lambda-1$1;->()V +Landroidx/compose/ui/platform/ComposeView; +HSPLandroidx/compose/ui/platform/ComposeView;->()V +HSPLandroidx/compose/ui/platform/ComposeView;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V +HSPLandroidx/compose/ui/platform/ComposeView;->(Landroid/content/Context;Landroid/util/AttributeSet;IILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/platform/ComposeView;->Content(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/ui/platform/ComposeView;->getAccessibilityClassName()Ljava/lang/CharSequence; +HSPLandroidx/compose/ui/platform/ComposeView;->getShouldCreateCompositionOnAttachedToWindow()Z +HSPLandroidx/compose/ui/platform/ComposeView;->setContent(Lkotlin/jvm/functions/Function2;)V +Landroidx/compose/ui/platform/ComposeView$Content$1; +HSPLandroidx/compose/ui/platform/ComposeView$Content$1;->(Landroidx/compose/ui/platform/ComposeView;I)V +Landroidx/compose/ui/platform/CompositionLocalsKt; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt;->()V +HSPLandroidx/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 +HSPLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalAutofill()Landroidx/compose/runtime/ProvidableCompositionLocal; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalAutofillTree()Landroidx/compose/runtime/ProvidableCompositionLocal; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalClipboardManager()Landroidx/compose/runtime/ProvidableCompositionLocal; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalDensity()Landroidx/compose/runtime/ProvidableCompositionLocal; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalFocusManager()Landroidx/compose/runtime/ProvidableCompositionLocal; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalFontFamilyResolver()Landroidx/compose/runtime/ProvidableCompositionLocal; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalHapticFeedback()Landroidx/compose/runtime/ProvidableCompositionLocal; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalInputModeManager()Landroidx/compose/runtime/ProvidableCompositionLocal; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalLayoutDirection()Landroidx/compose/runtime/ProvidableCompositionLocal; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalPointerIconService()Landroidx/compose/runtime/ProvidableCompositionLocal; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalTextInputService()Landroidx/compose/runtime/ProvidableCompositionLocal; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalTextToolbar()Landroidx/compose/runtime/ProvidableCompositionLocal; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalViewConfiguration()Landroidx/compose/runtime/ProvidableCompositionLocal; +Landroidx/compose/ui/platform/CompositionLocalsKt$LocalAccessibilityManager$1; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalAccessibilityManager$1;->()V +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalAccessibilityManager$1;->()V +Landroidx/compose/ui/platform/CompositionLocalsKt$LocalAutofill$1; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalAutofill$1;->()V +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalAutofill$1;->()V +Landroidx/compose/ui/platform/CompositionLocalsKt$LocalAutofillTree$1; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalAutofillTree$1;->()V +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalAutofillTree$1;->()V +Landroidx/compose/ui/platform/CompositionLocalsKt$LocalClipboardManager$1; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalClipboardManager$1;->()V +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalClipboardManager$1;->()V +Landroidx/compose/ui/platform/CompositionLocalsKt$LocalDensity$1; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalDensity$1;->()V +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalDensity$1;->()V +Landroidx/compose/ui/platform/CompositionLocalsKt$LocalFocusManager$1; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalFocusManager$1;->()V +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalFocusManager$1;->()V +Landroidx/compose/ui/platform/CompositionLocalsKt$LocalFontFamilyResolver$1; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalFontFamilyResolver$1;->()V +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalFontFamilyResolver$1;->()V +Landroidx/compose/ui/platform/CompositionLocalsKt$LocalFontLoader$1; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalFontLoader$1;->()V +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalFontLoader$1;->()V +Landroidx/compose/ui/platform/CompositionLocalsKt$LocalHapticFeedback$1; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalHapticFeedback$1;->()V +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalHapticFeedback$1;->()V +Landroidx/compose/ui/platform/CompositionLocalsKt$LocalInputModeManager$1; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalInputModeManager$1;->()V +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalInputModeManager$1;->()V +Landroidx/compose/ui/platform/CompositionLocalsKt$LocalLayoutDirection$1; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalLayoutDirection$1;->()V +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalLayoutDirection$1;->()V +Landroidx/compose/ui/platform/CompositionLocalsKt$LocalPlatformTextInputPluginRegistry$1; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalPlatformTextInputPluginRegistry$1;->()V +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalPlatformTextInputPluginRegistry$1;->()V +Landroidx/compose/ui/platform/CompositionLocalsKt$LocalPointerIconService$1; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalPointerIconService$1;->()V +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalPointerIconService$1;->()V +Landroidx/compose/ui/platform/CompositionLocalsKt$LocalTextInputService$1; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalTextInputService$1;->()V +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalTextInputService$1;->()V +Landroidx/compose/ui/platform/CompositionLocalsKt$LocalTextToolbar$1; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalTextToolbar$1;->()V +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalTextToolbar$1;->()V +Landroidx/compose/ui/platform/CompositionLocalsKt$LocalUriHandler$1; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalUriHandler$1;->()V +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalUriHandler$1;->()V +Landroidx/compose/ui/platform/CompositionLocalsKt$LocalViewConfiguration$1; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalViewConfiguration$1;->()V +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalViewConfiguration$1;->()V +Landroidx/compose/ui/platform/CompositionLocalsKt$LocalWindowInfo$1; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalWindowInfo$1;->()V +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalWindowInfo$1;->()V +Landroidx/compose/ui/platform/CompositionLocalsKt$ProvideCommonCompositionLocals$1; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$ProvideCommonCompositionLocals$1;->(Landroidx/compose/ui/node/Owner;Landroidx/compose/ui/platform/UriHandler;Lkotlin/jvm/functions/Function2;I)V +Landroidx/compose/ui/platform/DelegatingSoftwareKeyboardController; +HSPLandroidx/compose/ui/platform/DelegatingSoftwareKeyboardController;->(Landroidx/compose/ui/text/input/TextInputService;)V +Landroidx/compose/ui/platform/DeviceRenderNode; +Landroidx/compose/ui/platform/DisposableSaveableStateRegistry; +HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry;->(Landroidx/compose/runtime/saveable/SaveableStateRegistry;Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry;->canBeSaved(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry;->consumeRestored(Ljava/lang/String;)Ljava/lang/Object; +HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry;->registerProvider(Ljava/lang/String;Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/saveable/SaveableStateRegistry$Entry; +Landroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt; +HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt;->()V +HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt;->DisposableSaveableStateRegistry(Landroid/view/View;Landroidx/savedstate/SavedStateRegistryOwner;)Landroidx/compose/ui/platform/DisposableSaveableStateRegistry; +HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt;->DisposableSaveableStateRegistry(Ljava/lang/String;Landroidx/savedstate/SavedStateRegistryOwner;)Landroidx/compose/ui/platform/DisposableSaveableStateRegistry; +HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt;->access$canBeSavedToBundle(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt;->canBeSavedToBundle(Ljava/lang/Object;)Z +Landroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$1; +HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$1;->(ZLandroidx/savedstate/SavedStateRegistry;Ljava/lang/String;)V +Landroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$registered$1; +HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$registered$1;->(Landroidx/compose/runtime/saveable/SaveableStateRegistry;)V +Landroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$saveableStateRegistry$1; +HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$saveableStateRegistry$1;->()V +HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$saveableStateRegistry$1;->()V +HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$saveableStateRegistry$1;->invoke(Ljava/lang/Object;)Ljava/lang/Boolean; +HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$saveableStateRegistry$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/platform/GlobalSnapshotManager; +HSPLandroidx/compose/ui/platform/GlobalSnapshotManager;->()V +HSPLandroidx/compose/ui/platform/GlobalSnapshotManager;->()V +HSPLandroidx/compose/ui/platform/GlobalSnapshotManager;->ensureStarted()V +Landroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$1; +HSPLandroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$1;->(Lkotlinx/coroutines/channels/Channel;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$2; +HSPLandroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$2;->(Lkotlinx/coroutines/channels/Channel;)V +HSPLandroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$2;->invoke(Ljava/lang/Object;)V +Landroidx/compose/ui/platform/InfiniteAnimationPolicy; +HSPLandroidx/compose/ui/platform/InfiniteAnimationPolicy;->()V +Landroidx/compose/ui/platform/InfiniteAnimationPolicy$Key; +HSPLandroidx/compose/ui/platform/InfiniteAnimationPolicy$Key;->()V +HSPLandroidx/compose/ui/platform/InfiniteAnimationPolicy$Key;->()V +Landroidx/compose/ui/platform/InspectableModifier; +HSPLandroidx/compose/ui/platform/InspectableModifier;->()V +HSPLandroidx/compose/ui/platform/InspectableModifier;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/platform/InspectableModifier;->getEnd()Landroidx/compose/ui/platform/InspectableModifier$End; +Landroidx/compose/ui/platform/InspectableModifier$End; +HSPLandroidx/compose/ui/platform/InspectableModifier$End;->(Landroidx/compose/ui/platform/InspectableModifier;)V +Landroidx/compose/ui/platform/InspectableValue; +Landroidx/compose/ui/platform/InspectableValueKt; +HSPLandroidx/compose/ui/platform/InspectableValueKt;->()V +HSPLandroidx/compose/ui/platform/InspectableValueKt;->getNoInspectorInfo()Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/ui/platform/InspectableValueKt;->inspectableWrapper(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/ui/platform/InspectableValueKt;->isDebugInspectorInfoEnabled()Z +Landroidx/compose/ui/platform/InspectableValueKt$NoInspectorInfo$1; +HSPLandroidx/compose/ui/platform/InspectableValueKt$NoInspectorInfo$1;->()V +HSPLandroidx/compose/ui/platform/InspectableValueKt$NoInspectorInfo$1;->()V +Landroidx/compose/ui/platform/InspectorValueInfo; +HSPLandroidx/compose/ui/platform/InspectorValueInfo;->()V +HSPLandroidx/compose/ui/platform/InspectorValueInfo;->(Lkotlin/jvm/functions/Function1;)V +Landroidx/compose/ui/platform/InvertMatrixKt; +HSPLandroidx/compose/ui/platform/InvertMatrixKt;->invertTo-JiSxe2E([F[F)Z +Landroidx/compose/ui/platform/LayerMatrixCache; +HSPLandroidx/compose/ui/platform/LayerMatrixCache;->(Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/ui/platform/LayerMatrixCache;->calculateInverseMatrix-bWbORWo(Ljava/lang/Object;)[F +HSPLandroidx/compose/ui/platform/LayerMatrixCache;->calculateMatrix-GrdbGEg(Ljava/lang/Object;)[F +HSPLandroidx/compose/ui/platform/LayerMatrixCache;->invalidate()V +Landroidx/compose/ui/platform/LocalSoftwareKeyboardController; +HSPLandroidx/compose/ui/platform/LocalSoftwareKeyboardController;->()V +HSPLandroidx/compose/ui/platform/LocalSoftwareKeyboardController;->()V +HSPLandroidx/compose/ui/platform/LocalSoftwareKeyboardController;->delegatingController(Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/platform/SoftwareKeyboardController; +HSPLandroidx/compose/ui/platform/LocalSoftwareKeyboardController;->getCurrent(Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/platform/SoftwareKeyboardController; +Landroidx/compose/ui/platform/LocalSoftwareKeyboardController$LocalSoftwareKeyboardController$1; +HSPLandroidx/compose/ui/platform/LocalSoftwareKeyboardController$LocalSoftwareKeyboardController$1;->()V +HSPLandroidx/compose/ui/platform/LocalSoftwareKeyboardController$LocalSoftwareKeyboardController$1;->()V +HSPLandroidx/compose/ui/platform/LocalSoftwareKeyboardController$LocalSoftwareKeyboardController$1;->invoke()Landroidx/compose/ui/platform/SoftwareKeyboardController; +HSPLandroidx/compose/ui/platform/LocalSoftwareKeyboardController$LocalSoftwareKeyboardController$1;->invoke()Ljava/lang/Object; +Landroidx/compose/ui/platform/MotionDurationScaleImpl; +HSPLandroidx/compose/ui/platform/MotionDurationScaleImpl;->()V +HSPLandroidx/compose/ui/platform/MotionDurationScaleImpl;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; +HSPLandroidx/compose/ui/platform/MotionDurationScaleImpl;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; +HSPLandroidx/compose/ui/platform/MotionDurationScaleImpl;->getScaleFactor()F +HSPLandroidx/compose/ui/platform/MotionDurationScaleImpl;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext; +HSPLandroidx/compose/ui/platform/MotionDurationScaleImpl;->setScaleFactor(F)V +Landroidx/compose/ui/platform/OpenEndFloatRange; +HSPLandroidx/compose/ui/platform/OpenEndFloatRange;->(FF)V +HSPLandroidx/compose/ui/platform/OpenEndFloatRange;->getEndExclusive()Ljava/lang/Comparable; +HSPLandroidx/compose/ui/platform/OpenEndFloatRange;->getEndExclusive()Ljava/lang/Float; +HSPLandroidx/compose/ui/platform/OpenEndFloatRange;->getStart()Ljava/lang/Comparable; +HSPLandroidx/compose/ui/platform/OpenEndFloatRange;->getStart()Ljava/lang/Float; +HSPLandroidx/compose/ui/platform/OpenEndFloatRange;->isEmpty()Z +Landroidx/compose/ui/platform/OpenEndRange; +Landroidx/compose/ui/platform/OutlineResolver; +HSPLandroidx/compose/ui/platform/OutlineResolver;->(Landroidx/compose/ui/unit/Density;)V +HSPLandroidx/compose/ui/platform/OutlineResolver;->getOutline()Landroid/graphics/Outline; +HSPLandroidx/compose/ui/platform/OutlineResolver;->getOutlineClipSupported()Z +HSPLandroidx/compose/ui/platform/OutlineResolver;->isInOutline-k-4lQ0M(J)Z +HSPLandroidx/compose/ui/platform/OutlineResolver;->update(Landroidx/compose/ui/graphics/Shape;FZFLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;)Z +HSPLandroidx/compose/ui/platform/OutlineResolver;->update-uvyYCjk(J)V +HSPLandroidx/compose/ui/platform/OutlineResolver;->updateCache()V +HSPLandroidx/compose/ui/platform/OutlineResolver;->updateCacheWithPath(Landroidx/compose/ui/graphics/Path;)V +HSPLandroidx/compose/ui/platform/OutlineResolver;->updateCacheWithRect(Landroidx/compose/ui/geometry/Rect;)V +HSPLandroidx/compose/ui/platform/OutlineResolver;->updateCacheWithRoundRect(Landroidx/compose/ui/geometry/RoundRect;)V +Landroidx/compose/ui/platform/RenderNodeApi29; +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->(Landroidx/compose/ui/platform/AndroidComposeView;)V +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->discardDisplayList()V +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->drawInto(Landroid/graphics/Canvas;)V +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getAlpha()F +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getClipToBounds()Z +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getClipToOutline()Z +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getElevation()F +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getHasDisplayList()Z +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getHeight()I +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getLeft()I +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getMatrix(Landroid/graphics/Matrix;)V +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getTop()I +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getWidth()I +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->offsetLeftAndRight(I)V +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->offsetTopAndBottom(I)V +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->record(Landroidx/compose/ui/graphics/CanvasHolder;Landroidx/compose/ui/graphics/Path;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setAlpha(F)V +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setAmbientShadowColor(I)V +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setCameraDistance(F)V +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setClipToBounds(Z)V +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setClipToOutline(Z)V +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setCompositingStrategy-aDBOjCE(I)V +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setElevation(F)V +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setHasOverlappingRendering(Z)Z +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setOutline(Landroid/graphics/Outline;)V +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setPivotX(F)V +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setPivotY(F)V +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setPosition(IIII)Z +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setRenderEffect(Landroidx/compose/ui/graphics/RenderEffect;)V +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setRotationX(F)V +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setRotationY(F)V +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setRotationZ(F)V +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setScaleX(F)V +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setScaleY(F)V +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setSpotShadowColor(I)V +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setTranslationX(F)V +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setTranslationY(F)V +Landroidx/compose/ui/platform/RenderNodeApi29VerificationHelper; +HSPLandroidx/compose/ui/platform/RenderNodeApi29VerificationHelper;->()V +HSPLandroidx/compose/ui/platform/RenderNodeApi29VerificationHelper;->()V +HSPLandroidx/compose/ui/platform/RenderNodeApi29VerificationHelper;->setRenderEffect(Landroid/graphics/RenderNode;Landroidx/compose/ui/graphics/RenderEffect;)V +Landroidx/compose/ui/platform/RenderNodeLayer; +HSPLandroidx/compose/ui/platform/RenderNodeLayer;->()V +HSPLandroidx/compose/ui/platform/RenderNodeLayer;->(Landroidx/compose/ui/platform/AndroidComposeView;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/ui/platform/RenderNodeLayer;->destroy()V +HSPLandroidx/compose/ui/platform/RenderNodeLayer;->drawLayer(Landroidx/compose/ui/graphics/Canvas;)V +HSPLandroidx/compose/ui/platform/RenderNodeLayer;->invalidate()V +HSPLandroidx/compose/ui/platform/RenderNodeLayer;->isInLayer-k-4lQ0M(J)Z +HSPLandroidx/compose/ui/platform/RenderNodeLayer;->mapBounds(Landroidx/compose/ui/geometry/MutableRect;Z)V +HSPLandroidx/compose/ui/platform/RenderNodeLayer;->mapOffset-8S9VItk(JZ)J +HSPLandroidx/compose/ui/platform/RenderNodeLayer;->move--gyyYBs(J)V +HSPLandroidx/compose/ui/platform/RenderNodeLayer;->resize-ozmzZPI(J)V +HSPLandroidx/compose/ui/platform/RenderNodeLayer;->reuseLayer(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/ui/platform/RenderNodeLayer;->setDirty(Z)V +HSPLandroidx/compose/ui/platform/RenderNodeLayer;->triggerRepaint()V +HSPLandroidx/compose/ui/platform/RenderNodeLayer;->updateDisplayList()V +HSPLandroidx/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 +Landroidx/compose/ui/platform/RenderNodeLayer$Companion; +HSPLandroidx/compose/ui/platform/RenderNodeLayer$Companion;->()V +HSPLandroidx/compose/ui/platform/RenderNodeLayer$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/platform/RenderNodeLayer$Companion$getMatrix$1; +HSPLandroidx/compose/ui/platform/RenderNodeLayer$Companion$getMatrix$1;->()V +HSPLandroidx/compose/ui/platform/RenderNodeLayer$Companion$getMatrix$1;->()V +HSPLandroidx/compose/ui/platform/RenderNodeLayer$Companion$getMatrix$1;->invoke(Landroidx/compose/ui/platform/DeviceRenderNode;Landroid/graphics/Matrix;)V +HSPLandroidx/compose/ui/platform/RenderNodeLayer$Companion$getMatrix$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/platform/SemanticsNodeWithAdjustedBounds; +HSPLandroidx/compose/ui/platform/SemanticsNodeWithAdjustedBounds;->(Landroidx/compose/ui/semantics/SemanticsNode;Landroid/graphics/Rect;)V +HSPLandroidx/compose/ui/platform/SemanticsNodeWithAdjustedBounds;->getAdjustedBounds()Landroid/graphics/Rect; +HSPLandroidx/compose/ui/platform/SemanticsNodeWithAdjustedBounds;->getSemanticsNode()Landroidx/compose/ui/semantics/SemanticsNode; +Landroidx/compose/ui/platform/ShapeContainingUtilKt; +HSPLandroidx/compose/ui/platform/ShapeContainingUtilKt;->cornersFit(Landroidx/compose/ui/geometry/RoundRect;)Z +HSPLandroidx/compose/ui/platform/ShapeContainingUtilKt;->isInOutline(Landroidx/compose/ui/graphics/Outline;FFLandroidx/compose/ui/graphics/Path;Landroidx/compose/ui/graphics/Path;)Z +HSPLandroidx/compose/ui/platform/ShapeContainingUtilKt;->isInRectangle(Landroidx/compose/ui/geometry/Rect;FF)Z +HSPLandroidx/compose/ui/platform/ShapeContainingUtilKt;->isInRoundedRect(Landroidx/compose/ui/graphics/Outline$Rounded;FFLandroidx/compose/ui/graphics/Path;Landroidx/compose/ui/graphics/Path;)Z +Landroidx/compose/ui/platform/SoftwareKeyboardController; +Landroidx/compose/ui/platform/TestTagKt; +HSPLandroidx/compose/ui/platform/TestTagKt;->testTag(Landroidx/compose/ui/Modifier;Ljava/lang/String;)Landroidx/compose/ui/Modifier; +Landroidx/compose/ui/platform/TestTagKt$testTag$1; +HSPLandroidx/compose/ui/platform/TestTagKt$testTag$1;->(Ljava/lang/String;)V +HSPLandroidx/compose/ui/platform/TestTagKt$testTag$1;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V +HSPLandroidx/compose/ui/platform/TestTagKt$testTag$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/platform/TextToolbar; +Landroidx/compose/ui/platform/TextToolbarStatus; +HSPLandroidx/compose/ui/platform/TextToolbarStatus;->$values()[Landroidx/compose/ui/platform/TextToolbarStatus; +HSPLandroidx/compose/ui/platform/TextToolbarStatus;->()V +HSPLandroidx/compose/ui/platform/TextToolbarStatus;->(Ljava/lang/String;I)V +Landroidx/compose/ui/platform/UriHandler; +Landroidx/compose/ui/platform/ViewCompositionStrategy; +HSPLandroidx/compose/ui/platform/ViewCompositionStrategy;->()V +Landroidx/compose/ui/platform/ViewCompositionStrategy$Companion; +HSPLandroidx/compose/ui/platform/ViewCompositionStrategy$Companion;->()V +HSPLandroidx/compose/ui/platform/ViewCompositionStrategy$Companion;->()V +HSPLandroidx/compose/ui/platform/ViewCompositionStrategy$Companion;->getDefault()Landroidx/compose/ui/platform/ViewCompositionStrategy; +Landroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool; +HSPLandroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool;->()V +HSPLandroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool;->()V +HSPLandroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool;->installFor(Landroidx/compose/ui/platform/AbstractComposeView;)Lkotlin/jvm/functions/Function0; +Landroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$1; +HSPLandroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$1;->(Landroidx/compose/ui/platform/AbstractComposeView;Landroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$listener$1;Landroidx/customview/poolingcontainer/PoolingContainerListener;)V +Landroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$listener$1; +HSPLandroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$listener$1;->(Landroidx/compose/ui/platform/AbstractComposeView;)V +HSPLandroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$listener$1;->onViewAttachedToWindow(Landroid/view/View;)V +Landroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$poolingContainerListener$1; +HSPLandroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$poolingContainerListener$1;->(Landroidx/compose/ui/platform/AbstractComposeView;)V +Landroidx/compose/ui/platform/ViewConfiguration; +HSPLandroidx/compose/ui/platform/ViewConfiguration;->getMinimumTouchTargetSize-MYxV2XQ()J +Landroidx/compose/ui/platform/ViewLayer; +HSPLandroidx/compose/ui/platform/ViewLayer;->()V +HSPLandroidx/compose/ui/platform/ViewLayer;->access$getShouldUseDispatchDraw$cp()Z +Landroidx/compose/ui/platform/ViewLayer$Companion; +HSPLandroidx/compose/ui/platform/ViewLayer$Companion;->()V +HSPLandroidx/compose/ui/platform/ViewLayer$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/platform/ViewLayer$Companion;->getShouldUseDispatchDraw()Z +Landroidx/compose/ui/platform/ViewLayer$Companion$OutlineProvider$1; +HSPLandroidx/compose/ui/platform/ViewLayer$Companion$OutlineProvider$1;->()V +Landroidx/compose/ui/platform/ViewLayer$Companion$getMatrix$1; +HSPLandroidx/compose/ui/platform/ViewLayer$Companion$getMatrix$1;->()V +HSPLandroidx/compose/ui/platform/ViewLayer$Companion$getMatrix$1;->()V +Landroidx/compose/ui/platform/ViewRootForTest; +HSPLandroidx/compose/ui/platform/ViewRootForTest;->()V +Landroidx/compose/ui/platform/ViewRootForTest$Companion; +HSPLandroidx/compose/ui/platform/ViewRootForTest$Companion;->()V +HSPLandroidx/compose/ui/platform/ViewRootForTest$Companion;->()V +HSPLandroidx/compose/ui/platform/ViewRootForTest$Companion;->getOnViewCreatedCallback()Lkotlin/jvm/functions/Function1; +Landroidx/compose/ui/platform/WeakCache; +HSPLandroidx/compose/ui/platform/WeakCache;->()V +HSPLandroidx/compose/ui/platform/WeakCache;->clearWeakReferences()V +HSPLandroidx/compose/ui/platform/WeakCache;->pop()Ljava/lang/Object; +HSPLandroidx/compose/ui/platform/WeakCache;->push(Ljava/lang/Object;)V +Landroidx/compose/ui/platform/WindowInfo; +Landroidx/compose/ui/platform/WindowInfoImpl; +HSPLandroidx/compose/ui/platform/WindowInfoImpl;->()V +HSPLandroidx/compose/ui/platform/WindowInfoImpl;->()V +HSPLandroidx/compose/ui/platform/WindowInfoImpl;->setKeyboardModifiers-5xRPYO0(I)V +HSPLandroidx/compose/ui/platform/WindowInfoImpl;->setWindowFocused(Z)V +Landroidx/compose/ui/platform/WindowInfoImpl$Companion; +HSPLandroidx/compose/ui/platform/WindowInfoImpl$Companion;->()V +HSPLandroidx/compose/ui/platform/WindowInfoImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/platform/WindowRecomposerFactory; +HSPLandroidx/compose/ui/platform/WindowRecomposerFactory;->()V +Landroidx/compose/ui/platform/WindowRecomposerFactory$Companion; +HSPLandroidx/compose/ui/platform/WindowRecomposerFactory$Companion;->()V +HSPLandroidx/compose/ui/platform/WindowRecomposerFactory$Companion;->()V +HSPLandroidx/compose/ui/platform/WindowRecomposerFactory$Companion;->getLifecycleAware()Landroidx/compose/ui/platform/WindowRecomposerFactory; +Landroidx/compose/ui/platform/WindowRecomposerFactory$Companion$LifecycleAware$1; +HSPLandroidx/compose/ui/platform/WindowRecomposerFactory$Companion$LifecycleAware$1;->()V +HSPLandroidx/compose/ui/platform/WindowRecomposerFactory$Companion$LifecycleAware$1;->()V +HSPLandroidx/compose/ui/platform/WindowRecomposerFactory$Companion$LifecycleAware$1;->createRecomposer(Landroid/view/View;)Landroidx/compose/runtime/Recomposer; +Landroidx/compose/ui/platform/WindowRecomposerPolicy; +HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy;->()V +HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy;->()V +HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy;->createAndInstallWindowRecomposer$ui_release(Landroid/view/View;)Landroidx/compose/runtime/Recomposer; +Landroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$1; +HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$1;->(Lkotlinx/coroutines/Job;)V +HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$1;->onViewAttachedToWindow(Landroid/view/View;)V +Landroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$unsetJob$1; +HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$unsetJob$1;->(Landroidx/compose/runtime/Recomposer;Landroid/view/View;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$unsetJob$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$unsetJob$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/platform/WindowRecomposer_androidKt; +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt;->()V +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt;->access$getAnimationScaleFlowFor(Landroid/content/Context;)Lkotlinx/coroutines/flow/StateFlow; +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt;->createLifecycleAwareWindowRecomposer$default(Landroid/view/View;Lkotlin/coroutines/CoroutineContext;Landroidx/lifecycle/Lifecycle;ILjava/lang/Object;)Landroidx/compose/runtime/Recomposer; +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt;->createLifecycleAwareWindowRecomposer(Landroid/view/View;Lkotlin/coroutines/CoroutineContext;Landroidx/lifecycle/Lifecycle;)Landroidx/compose/runtime/Recomposer; +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt;->findViewTreeCompositionContext(Landroid/view/View;)Landroidx/compose/runtime/CompositionContext; +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt;->getAnimationScaleFlowFor(Landroid/content/Context;)Lkotlinx/coroutines/flow/StateFlow; +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt;->getCompositionContext(Landroid/view/View;)Landroidx/compose/runtime/CompositionContext; +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt;->getContentChild(Landroid/view/View;)Landroid/view/View; +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt;->getWindowRecomposer(Landroid/view/View;)Landroidx/compose/runtime/Recomposer; +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt;->setCompositionContext(Landroid/view/View;Landroidx/compose/runtime/CompositionContext;)V +Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$1; +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$1;->(Landroid/view/View;Landroidx/compose/runtime/Recomposer;)V +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$1;->onViewAttachedToWindow(Landroid/view/View;)V +Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2; +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2;->(Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/runtime/PausableMonotonicFrameClock;Landroidx/compose/runtime/Recomposer;Lkotlin/jvm/internal/Ref$ObjectRef;Landroid/view/View;)V +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V +Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$WhenMappings; +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$WhenMappings;->()V +Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1; +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1;->(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 +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1; +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1;->(Lkotlinx/coroutines/flow/StateFlow;Landroidx/compose/ui/platform/MotionDurationScaleImpl;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1$1; +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1$1;->(Landroidx/compose/ui/platform/MotionDurationScaleImpl;)V +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1$1;->emit(FLkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$1; +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$1;->(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 +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$contentObserver$1; +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$contentObserver$1;->(Lkotlinx/coroutines/channels/Channel;Landroid/os/Handler;)V +Landroidx/compose/ui/platform/WrappedComposition; +HSPLandroidx/compose/ui/platform/WrappedComposition;->(Landroidx/compose/ui/platform/AndroidComposeView;Landroidx/compose/runtime/Composition;)V +HSPLandroidx/compose/ui/platform/WrappedComposition;->access$getAddedToLifecycle$p(Landroidx/compose/ui/platform/WrappedComposition;)Landroidx/lifecycle/Lifecycle; +HSPLandroidx/compose/ui/platform/WrappedComposition;->access$getDisposed$p(Landroidx/compose/ui/platform/WrappedComposition;)Z +HSPLandroidx/compose/ui/platform/WrappedComposition;->access$setAddedToLifecycle$p(Landroidx/compose/ui/platform/WrappedComposition;Landroidx/lifecycle/Lifecycle;)V +HSPLandroidx/compose/ui/platform/WrappedComposition;->access$setLastContent$p(Landroidx/compose/ui/platform/WrappedComposition;Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/ui/platform/WrappedComposition;->getOriginal()Landroidx/compose/runtime/Composition; +HSPLandroidx/compose/ui/platform/WrappedComposition;->getOwner()Landroidx/compose/ui/platform/AndroidComposeView; +HSPLandroidx/compose/ui/platform/WrappedComposition;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V +HSPLandroidx/compose/ui/platform/WrappedComposition;->setContent(Lkotlin/jvm/functions/Function2;)V +Landroidx/compose/ui/platform/WrappedComposition$setContent$1; +HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1;->(Landroidx/compose/ui/platform/WrappedComposition;Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1;->invoke(Landroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;)V +HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/platform/WrappedComposition$setContent$1$1; +HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1;->(Landroidx/compose/ui/platform/WrappedComposition;Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/platform/WrappedComposition$setContent$1$1$1; +HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1$1;->(Landroidx/compose/ui/platform/WrappedComposition;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/platform/WrappedComposition$setContent$1$1$2; +HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1$2;->(Landroidx/compose/ui/platform/WrappedComposition;Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1$2;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/platform/WrapperRenderNodeLayerHelperMethods; +HSPLandroidx/compose/ui/platform/WrapperRenderNodeLayerHelperMethods;->()V +HSPLandroidx/compose/ui/platform/WrapperRenderNodeLayerHelperMethods;->()V +HSPLandroidx/compose/ui/platform/WrapperRenderNodeLayerHelperMethods;->onDescendantInvalidated(Landroidx/compose/ui/platform/AndroidComposeView;)V +Landroidx/compose/ui/platform/WrapperVerificationHelperMethods; +HSPLandroidx/compose/ui/platform/WrapperVerificationHelperMethods;->()V +HSPLandroidx/compose/ui/platform/WrapperVerificationHelperMethods;->()V +HSPLandroidx/compose/ui/platform/WrapperVerificationHelperMethods;->attributeSourceResourceMap(Landroid/view/View;)Ljava/util/Map; +Landroidx/compose/ui/platform/Wrapper_androidKt; +HSPLandroidx/compose/ui/platform/Wrapper_androidKt;->()V +HSPLandroidx/compose/ui/platform/Wrapper_androidKt;->createSubcomposition(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/runtime/CompositionContext;)Landroidx/compose/runtime/Composition; +HSPLandroidx/compose/ui/platform/Wrapper_androidKt;->doSetContent(Landroidx/compose/ui/platform/AndroidComposeView;Landroidx/compose/runtime/CompositionContext;Lkotlin/jvm/functions/Function2;)Landroidx/compose/runtime/Composition; +HSPLandroidx/compose/ui/platform/Wrapper_androidKt;->inspectionWanted(Landroidx/compose/ui/platform/AndroidComposeView;)Z +HSPLandroidx/compose/ui/platform/Wrapper_androidKt;->setContent(Landroidx/compose/ui/platform/AbstractComposeView;Landroidx/compose/runtime/CompositionContext;Lkotlin/jvm/functions/Function2;)Landroidx/compose/runtime/Composition; +Landroidx/compose/ui/platform/accessibility/CollectionInfoKt; +HSPLandroidx/compose/ui/platform/accessibility/CollectionInfoKt;->calculateIfHorizontallyStacked(Ljava/util/List;)Z +HSPLandroidx/compose/ui/platform/accessibility/CollectionInfoKt;->hasCollectionInfo(Landroidx/compose/ui/semantics/SemanticsNode;)Z +HSPLandroidx/compose/ui/platform/accessibility/CollectionInfoKt;->setCollectionInfo(Landroidx/compose/ui/semantics/SemanticsNode;Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat;)V +HSPLandroidx/compose/ui/platform/accessibility/CollectionInfoKt;->setCollectionItemInfo(Landroidx/compose/ui/semantics/SemanticsNode;Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat;)V +PLandroidx/compose/ui/platform/accessibility/CollectionInfoKt;->toAccessibilityCollectionInfo(Landroidx/compose/ui/semantics/CollectionInfo;)Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat$CollectionInfoCompat; +Landroidx/compose/ui/platform/accessibility/CollectionInfoKt$setCollectionItemInfo$itemInfo$1; +HSPLandroidx/compose/ui/platform/accessibility/CollectionInfoKt$setCollectionItemInfo$itemInfo$1;->()V +HSPLandroidx/compose/ui/platform/accessibility/CollectionInfoKt$setCollectionItemInfo$itemInfo$1;->()V +Landroidx/compose/ui/platform/actionmodecallback/TextActionModeCallback; +HSPLandroidx/compose/ui/platform/actionmodecallback/TextActionModeCallback;->(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/geometry/Rect;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/ui/platform/actionmodecallback/TextActionModeCallback;->(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/geometry/Rect;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/platform/coreshims/ContentCaptureSessionCompat; +Landroidx/compose/ui/platform/coreshims/SoftwareKeyboardControllerCompat; +HSPLandroidx/compose/ui/platform/coreshims/SoftwareKeyboardControllerCompat;->(Landroid/view/View;)V +HSPLandroidx/compose/ui/platform/coreshims/SoftwareKeyboardControllerCompat;->hide()V +HSPLandroidx/compose/ui/platform/coreshims/SoftwareKeyboardControllerCompat;->show()V +Landroidx/compose/ui/platform/coreshims/SoftwareKeyboardControllerCompat$Impl; +HSPLandroidx/compose/ui/platform/coreshims/SoftwareKeyboardControllerCompat$Impl;->()V +Landroidx/compose/ui/platform/coreshims/SoftwareKeyboardControllerCompat$Impl20; +HSPLandroidx/compose/ui/platform/coreshims/SoftwareKeyboardControllerCompat$Impl20;->(Landroid/view/View;)V +Landroidx/compose/ui/platform/coreshims/SoftwareKeyboardControllerCompat$Impl30; +HSPLandroidx/compose/ui/platform/coreshims/SoftwareKeyboardControllerCompat$Impl30;->(Landroid/view/View;)V +HSPLandroidx/compose/ui/platform/coreshims/SoftwareKeyboardControllerCompat$Impl30;->hide()V +HSPLandroidx/compose/ui/platform/coreshims/SoftwareKeyboardControllerCompat$Impl30;->lambda$hide$0(Ljava/util/concurrent/atomic/AtomicBoolean;Landroid/view/WindowInsetsController;I)V +HSPLandroidx/compose/ui/platform/coreshims/SoftwareKeyboardControllerCompat$Impl30;->show()V +Landroidx/compose/ui/platform/coreshims/SoftwareKeyboardControllerCompat$Impl30$$ExternalSyntheticLambda5; +HSPLandroidx/compose/ui/platform/coreshims/SoftwareKeyboardControllerCompat$Impl30$$ExternalSyntheticLambda5;->(Ljava/util/concurrent/atomic/AtomicBoolean;)V +HSPLandroidx/compose/ui/platform/coreshims/SoftwareKeyboardControllerCompat$Impl30$$ExternalSyntheticLambda5;->onControllableInsetsChanged(Landroid/view/WindowInsetsController;I)V +Landroidx/compose/ui/platform/coreshims/ViewCompatShims; +HSPLandroidx/compose/ui/platform/coreshims/ViewCompatShims;->getContentCaptureSession(Landroid/view/View;)Landroidx/compose/ui/platform/coreshims/ContentCaptureSessionCompat; +HSPLandroidx/compose/ui/platform/coreshims/ViewCompatShims;->setImportantForContentCapture(Landroid/view/View;I)V +Landroidx/compose/ui/platform/coreshims/ViewCompatShims$Api29Impl; +HSPLandroidx/compose/ui/platform/coreshims/ViewCompatShims$Api29Impl;->getContentCaptureSession(Landroid/view/View;)Landroid/view/contentcapture/ContentCaptureSession; +Landroidx/compose/ui/platform/coreshims/ViewCompatShims$Api30Impl; +HSPLandroidx/compose/ui/platform/coreshims/ViewCompatShims$Api30Impl;->setImportantForContentCapture(Landroid/view/View;I)V +Landroidx/compose/ui/res/ImageVectorCache; +HSPLandroidx/compose/ui/res/ImageVectorCache;->()V +Landroidx/compose/ui/semantics/AccessibilityAction; +HSPLandroidx/compose/ui/semantics/AccessibilityAction;->()V +HSPLandroidx/compose/ui/semantics/AccessibilityAction;->(Ljava/lang/String;Lkotlin/Function;)V +HSPLandroidx/compose/ui/semantics/AccessibilityAction;->getAction()Lkotlin/Function; +HSPLandroidx/compose/ui/semantics/AccessibilityAction;->getLabel()Ljava/lang/String; +Landroidx/compose/ui/semantics/AppendedSemanticsElement; +HSPLandroidx/compose/ui/semantics/AppendedSemanticsElement;->(ZLkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/semantics/AppendedSemanticsElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/semantics/AppendedSemanticsElement;->create()Landroidx/compose/ui/semantics/CoreSemanticsModifierNode; +HSPLandroidx/compose/ui/semantics/AppendedSemanticsElement;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/semantics/AppendedSemanticsElement;->update(Landroidx/compose/ui/Modifier$Node;)V +HSPLandroidx/compose/ui/semantics/AppendedSemanticsElement;->update(Landroidx/compose/ui/semantics/CoreSemanticsModifierNode;)V +Landroidx/compose/ui/semantics/ClearAndSetSemanticsElement; +HSPLandroidx/compose/ui/semantics/ClearAndSetSemanticsElement;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/semantics/ClearAndSetSemanticsElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/semantics/ClearAndSetSemanticsElement;->create()Landroidx/compose/ui/semantics/CoreSemanticsModifierNode; +HSPLandroidx/compose/ui/semantics/ClearAndSetSemanticsElement;->equals(Ljava/lang/Object;)Z +Landroidx/compose/ui/semantics/CollectionInfo; +HSPLandroidx/compose/ui/semantics/CollectionInfo;->()V +HSPLandroidx/compose/ui/semantics/CollectionInfo;->(II)V +PLandroidx/compose/ui/semantics/CollectionInfo;->getColumnCount()I +PLandroidx/compose/ui/semantics/CollectionInfo;->getRowCount()I +Landroidx/compose/ui/semantics/CollectionItemInfo; +Landroidx/compose/ui/semantics/CoreSemanticsModifierNode; +HSPLandroidx/compose/ui/semantics/CoreSemanticsModifierNode;->(ZZLkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/semantics/CoreSemanticsModifierNode;->applySemantics(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V +HSPLandroidx/compose/ui/semantics/CoreSemanticsModifierNode;->getShouldClearDescendantSemantics()Z +HSPLandroidx/compose/ui/semantics/CoreSemanticsModifierNode;->getShouldMergeDescendantSemantics()Z +HSPLandroidx/compose/ui/semantics/CoreSemanticsModifierNode;->setMergeDescendants(Z)V +HSPLandroidx/compose/ui/semantics/CoreSemanticsModifierNode;->setProperties(Lkotlin/jvm/functions/Function1;)V +Landroidx/compose/ui/semantics/CustomAccessibilityAction; +Landroidx/compose/ui/semantics/EmptySemanticsElement; +HSPLandroidx/compose/ui/semantics/EmptySemanticsElement;->()V +HSPLandroidx/compose/ui/semantics/EmptySemanticsElement;->()V +HSPLandroidx/compose/ui/semantics/EmptySemanticsElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/semantics/EmptySemanticsElement;->create()Landroidx/compose/ui/semantics/EmptySemanticsModifier; +Landroidx/compose/ui/semantics/EmptySemanticsModifier; +HSPLandroidx/compose/ui/semantics/EmptySemanticsModifier;->()V +HSPLandroidx/compose/ui/semantics/EmptySemanticsModifier;->applySemantics(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V +Landroidx/compose/ui/semantics/LiveRegionMode; +Landroidx/compose/ui/semantics/LiveRegionMode$Companion; +Landroidx/compose/ui/semantics/ProgressBarRangeInfo; +HSPLandroidx/compose/ui/semantics/ProgressBarRangeInfo;->()V +HSPLandroidx/compose/ui/semantics/ProgressBarRangeInfo;->(FLkotlin/ranges/ClosedFloatingPointRange;I)V +HSPLandroidx/compose/ui/semantics/ProgressBarRangeInfo;->(FLkotlin/ranges/ClosedFloatingPointRange;IILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/semantics/ProgressBarRangeInfo;->access$getIndeterminate$cp()Landroidx/compose/ui/semantics/ProgressBarRangeInfo; +Landroidx/compose/ui/semantics/ProgressBarRangeInfo$Companion; +HSPLandroidx/compose/ui/semantics/ProgressBarRangeInfo$Companion;->()V +HSPLandroidx/compose/ui/semantics/ProgressBarRangeInfo$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/semantics/ProgressBarRangeInfo$Companion;->getIndeterminate()Landroidx/compose/ui/semantics/ProgressBarRangeInfo; +Landroidx/compose/ui/semantics/Role; +HSPLandroidx/compose/ui/semantics/Role;->()V +HSPLandroidx/compose/ui/semantics/Role;->(I)V +HSPLandroidx/compose/ui/semantics/Role;->access$getButton$cp()I +HSPLandroidx/compose/ui/semantics/Role;->access$getCheckbox$cp()I +HSPLandroidx/compose/ui/semantics/Role;->access$getImage$cp()I +HSPLandroidx/compose/ui/semantics/Role;->access$getSwitch$cp()I +HSPLandroidx/compose/ui/semantics/Role;->access$getTab$cp()I +HSPLandroidx/compose/ui/semantics/Role;->box-impl(I)Landroidx/compose/ui/semantics/Role; +HSPLandroidx/compose/ui/semantics/Role;->constructor-impl(I)I +PLandroidx/compose/ui/semantics/Role;->equals(Ljava/lang/Object;)Z +PLandroidx/compose/ui/semantics/Role;->equals-impl(ILjava/lang/Object;)Z +HSPLandroidx/compose/ui/semantics/Role;->equals-impl0(II)Z +HSPLandroidx/compose/ui/semantics/Role;->unbox-impl()I +Landroidx/compose/ui/semantics/Role$Companion; +HSPLandroidx/compose/ui/semantics/Role$Companion;->()V +HSPLandroidx/compose/ui/semantics/Role$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/semantics/Role$Companion;->getButton-o7Vup1c()I +HSPLandroidx/compose/ui/semantics/Role$Companion;->getCheckbox-o7Vup1c()I +HSPLandroidx/compose/ui/semantics/Role$Companion;->getImage-o7Vup1c()I +HSPLandroidx/compose/ui/semantics/Role$Companion;->getSwitch-o7Vup1c()I +HSPLandroidx/compose/ui/semantics/Role$Companion;->getTab-o7Vup1c()I +Landroidx/compose/ui/semantics/ScrollAxisRange; +HSPLandroidx/compose/ui/semantics/ScrollAxisRange;->()V +HSPLandroidx/compose/ui/semantics/ScrollAxisRange;->(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Z)V +HSPLandroidx/compose/ui/semantics/ScrollAxisRange;->getMaxValue()Lkotlin/jvm/functions/Function0; +HSPLandroidx/compose/ui/semantics/ScrollAxisRange;->getValue()Lkotlin/jvm/functions/Function0; +Landroidx/compose/ui/semantics/SemanticsActions; +HSPLandroidx/compose/ui/semantics/SemanticsActions;->()V +HSPLandroidx/compose/ui/semantics/SemanticsActions;->()V +HSPLandroidx/compose/ui/semantics/SemanticsActions;->getCollapse()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsActions;->getCopyText()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsActions;->getCustomActions()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsActions;->getCutText()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsActions;->getDismiss()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsActions;->getExpand()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsActions;->getGetTextLayoutResult()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsActions;->getInsertTextAtCursor()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsActions;->getOnClick()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsActions;->getOnLongClick()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsActions;->getPageDown()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsActions;->getPageLeft()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsActions;->getPageRight()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsActions;->getPageUp()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsActions;->getPasteText()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsActions;->getPerformImeAction()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsActions;->getRequestFocus()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsActions;->getScrollBy()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsActions;->getScrollToIndex()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsActions;->getSetProgress()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsActions;->getSetSelection()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsActions;->getSetText()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +Landroidx/compose/ui/semantics/SemanticsConfiguration; +HSPLandroidx/compose/ui/semantics/SemanticsConfiguration;->()V +HSPLandroidx/compose/ui/semantics/SemanticsConfiguration;->()V +HSPLandroidx/compose/ui/semantics/SemanticsConfiguration;->contains(Landroidx/compose/ui/semantics/SemanticsPropertyKey;)Z +HSPLandroidx/compose/ui/semantics/SemanticsConfiguration;->get(Landroidx/compose/ui/semantics/SemanticsPropertyKey;)Ljava/lang/Object; +PLandroidx/compose/ui/semantics/SemanticsConfiguration;->getOrElse(Landroidx/compose/ui/semantics/SemanticsPropertyKey;Lkotlin/jvm/functions/Function0;)Ljava/lang/Object; +HSPLandroidx/compose/ui/semantics/SemanticsConfiguration;->getOrElseNullable(Landroidx/compose/ui/semantics/SemanticsPropertyKey;Lkotlin/jvm/functions/Function0;)Ljava/lang/Object; +HSPLandroidx/compose/ui/semantics/SemanticsConfiguration;->isClearingSemantics()Z +HSPLandroidx/compose/ui/semantics/SemanticsConfiguration;->isMergingSemanticsOfDescendants()Z +HSPLandroidx/compose/ui/semantics/SemanticsConfiguration;->set(Landroidx/compose/ui/semantics/SemanticsPropertyKey;Ljava/lang/Object;)V +HSPLandroidx/compose/ui/semantics/SemanticsConfiguration;->setClearingSemantics(Z)V +HSPLandroidx/compose/ui/semantics/SemanticsConfiguration;->setMergingSemanticsOfDescendants(Z)V +Landroidx/compose/ui/semantics/SemanticsConfigurationKt; +HSPLandroidx/compose/ui/semantics/SemanticsConfigurationKt;->getOrNull(Landroidx/compose/ui/semantics/SemanticsConfiguration;Landroidx/compose/ui/semantics/SemanticsPropertyKey;)Ljava/lang/Object; +Landroidx/compose/ui/semantics/SemanticsConfigurationKt$getOrNull$1; +HSPLandroidx/compose/ui/semantics/SemanticsConfigurationKt$getOrNull$1;->()V +HSPLandroidx/compose/ui/semantics/SemanticsConfigurationKt$getOrNull$1;->()V +HSPLandroidx/compose/ui/semantics/SemanticsConfigurationKt$getOrNull$1;->invoke()Ljava/lang/Object; +Landroidx/compose/ui/semantics/SemanticsModifier; +Landroidx/compose/ui/semantics/SemanticsModifierKt; +HSPLandroidx/compose/ui/semantics/SemanticsModifierKt;->()V +HSPLandroidx/compose/ui/semantics/SemanticsModifierKt;->clearAndSetSemantics(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/ui/semantics/SemanticsModifierKt;->generateSemanticsId()I +HSPLandroidx/compose/ui/semantics/SemanticsModifierKt;->semantics$default(Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function1;ILjava/lang/Object;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/ui/semantics/SemanticsModifierKt;->semantics(Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; +Landroidx/compose/ui/semantics/SemanticsNode; +HSPLandroidx/compose/ui/semantics/SemanticsNode;->()V +HSPLandroidx/compose/ui/semantics/SemanticsNode;->(Landroidx/compose/ui/Modifier$Node;ZLandroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/semantics/SemanticsConfiguration;)V +HSPLandroidx/compose/ui/semantics/SemanticsNode;->emitFakeNodes(Ljava/util/List;)V +HSPLandroidx/compose/ui/semantics/SemanticsNode;->fakeSemanticsNode-ypyhhiA(Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/semantics/SemanticsNode; +HSPLandroidx/compose/ui/semantics/SemanticsNode;->fillOneLayerOfSemanticsWrappers(Landroidx/compose/ui/node/LayoutNode;Ljava/util/List;)V +HSPLandroidx/compose/ui/semantics/SemanticsNode;->findCoordinatorToGetBounds$ui_release()Landroidx/compose/ui/node/NodeCoordinator; +HSPLandroidx/compose/ui/semantics/SemanticsNode;->getBoundsInRoot()Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/ui/semantics/SemanticsNode;->getBoundsInWindow()Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/ui/semantics/SemanticsNode;->getChildren()Ljava/util/List; +HSPLandroidx/compose/ui/semantics/SemanticsNode;->getChildren(ZZ)Ljava/util/List; +HSPLandroidx/compose/ui/semantics/SemanticsNode;->getConfig()Landroidx/compose/ui/semantics/SemanticsConfiguration; +HSPLandroidx/compose/ui/semantics/SemanticsNode;->getId()I +HSPLandroidx/compose/ui/semantics/SemanticsNode;->getLayoutInfo()Landroidx/compose/ui/layout/LayoutInfo; +HSPLandroidx/compose/ui/semantics/SemanticsNode;->getLayoutNode$ui_release()Landroidx/compose/ui/node/LayoutNode; +HSPLandroidx/compose/ui/semantics/SemanticsNode;->getParent()Landroidx/compose/ui/semantics/SemanticsNode; +HSPLandroidx/compose/ui/semantics/SemanticsNode;->getReplacedChildren$ui_release()Ljava/util/List; +HSPLandroidx/compose/ui/semantics/SemanticsNode;->getTouchBoundsInRoot()Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/ui/semantics/SemanticsNode;->getUnmergedConfig$ui_release()Landroidx/compose/ui/semantics/SemanticsConfiguration; +HSPLandroidx/compose/ui/semantics/SemanticsNode;->isFake$ui_release()Z +HSPLandroidx/compose/ui/semantics/SemanticsNode;->isMergingSemanticsOfDescendants()Z +HSPLandroidx/compose/ui/semantics/SemanticsNode;->isTransparent$ui_release()Z +HSPLandroidx/compose/ui/semantics/SemanticsNode;->isUnmergedLeafNode$ui_release()Z +HSPLandroidx/compose/ui/semantics/SemanticsNode;->unmergedChildren$ui_release(Z)Ljava/util/List; +Landroidx/compose/ui/semantics/SemanticsNode$emitFakeNodes$fakeNode$1; +HSPLandroidx/compose/ui/semantics/SemanticsNode$emitFakeNodes$fakeNode$1;->(Landroidx/compose/ui/semantics/Role;)V +HSPLandroidx/compose/ui/semantics/SemanticsNode$emitFakeNodes$fakeNode$1;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V +HSPLandroidx/compose/ui/semantics/SemanticsNode$emitFakeNodes$fakeNode$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/semantics/SemanticsNode$fakeSemanticsNode$fakeNode$1; +HSPLandroidx/compose/ui/semantics/SemanticsNode$fakeSemanticsNode$fakeNode$1;->(Lkotlin/jvm/functions/Function1;)V +Landroidx/compose/ui/semantics/SemanticsNode$isUnmergedLeafNode$1; +HSPLandroidx/compose/ui/semantics/SemanticsNode$isUnmergedLeafNode$1;->()V +HSPLandroidx/compose/ui/semantics/SemanticsNode$isUnmergedLeafNode$1;->()V +HSPLandroidx/compose/ui/semantics/SemanticsNode$isUnmergedLeafNode$1;->invoke(Landroidx/compose/ui/node/LayoutNode;)Ljava/lang/Boolean; +HSPLandroidx/compose/ui/semantics/SemanticsNode$isUnmergedLeafNode$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/semantics/SemanticsNode$parent$2; +HSPLandroidx/compose/ui/semantics/SemanticsNode$parent$2;->()V +HSPLandroidx/compose/ui/semantics/SemanticsNode$parent$2;->()V +HSPLandroidx/compose/ui/semantics/SemanticsNode$parent$2;->invoke(Landroidx/compose/ui/node/LayoutNode;)Ljava/lang/Boolean; +HSPLandroidx/compose/ui/semantics/SemanticsNode$parent$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/semantics/SemanticsNodeKt; +HSPLandroidx/compose/ui/semantics/SemanticsNodeKt;->SemanticsNode(Landroidx/compose/ui/node/LayoutNode;Z)Landroidx/compose/ui/semantics/SemanticsNode; +HSPLandroidx/compose/ui/semantics/SemanticsNodeKt;->access$getRole(Landroidx/compose/ui/semantics/SemanticsNode;)Landroidx/compose/ui/semantics/Role; +HSPLandroidx/compose/ui/semantics/SemanticsNodeKt;->access$roleFakeNodeId(Landroidx/compose/ui/semantics/SemanticsNode;)I +HSPLandroidx/compose/ui/semantics/SemanticsNodeKt;->findClosestParentNode(Landroidx/compose/ui/node/LayoutNode;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/node/LayoutNode; +HSPLandroidx/compose/ui/semantics/SemanticsNodeKt;->getOuterMergingSemantics(Landroidx/compose/ui/node/LayoutNode;)Landroidx/compose/ui/node/SemanticsModifierNode; +HSPLandroidx/compose/ui/semantics/SemanticsNodeKt;->getRole(Landroidx/compose/ui/semantics/SemanticsNode;)Landroidx/compose/ui/semantics/Role; +HSPLandroidx/compose/ui/semantics/SemanticsNodeKt;->roleFakeNodeId(Landroidx/compose/ui/semantics/SemanticsNode;)I +Landroidx/compose/ui/semantics/SemanticsOwner; +HSPLandroidx/compose/ui/semantics/SemanticsOwner;->()V +HSPLandroidx/compose/ui/semantics/SemanticsOwner;->(Landroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/semantics/SemanticsOwner;->getUnmergedRootSemanticsNode()Landroidx/compose/ui/semantics/SemanticsNode; +Landroidx/compose/ui/semantics/SemanticsProperties; +HSPLandroidx/compose/ui/semantics/SemanticsProperties;->()V +HSPLandroidx/compose/ui/semantics/SemanticsProperties;->()V +HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getCollectionInfo()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getCollectionItemInfo()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getContentDescription()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getDisabled()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getEditableText()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getError()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getFocused()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getHeading()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getHorizontalScrollAxisRange()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getImeAction()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getIndexForKey()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getInvisibleToUser()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getIsTraversalGroup()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getLiveRegion()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getPaneTitle()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getPassword()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getProgressBarRangeInfo()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getRole()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getSelectableGroup()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getSelected()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getStateDescription()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getTestTag()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getText()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getTextSelectionRange()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getToggleableState()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getTraversalIndex()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getVerticalScrollAxisRange()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +Landroidx/compose/ui/semantics/SemanticsProperties$ContentDescription$1; +HSPLandroidx/compose/ui/semantics/SemanticsProperties$ContentDescription$1;->()V +HSPLandroidx/compose/ui/semantics/SemanticsProperties$ContentDescription$1;->()V +Landroidx/compose/ui/semantics/SemanticsProperties$InvisibleToUser$1; +HSPLandroidx/compose/ui/semantics/SemanticsProperties$InvisibleToUser$1;->()V +HSPLandroidx/compose/ui/semantics/SemanticsProperties$InvisibleToUser$1;->()V +Landroidx/compose/ui/semantics/SemanticsProperties$IsDialog$1; +HSPLandroidx/compose/ui/semantics/SemanticsProperties$IsDialog$1;->()V +HSPLandroidx/compose/ui/semantics/SemanticsProperties$IsDialog$1;->()V +Landroidx/compose/ui/semantics/SemanticsProperties$IsPopup$1; +HSPLandroidx/compose/ui/semantics/SemanticsProperties$IsPopup$1;->()V +HSPLandroidx/compose/ui/semantics/SemanticsProperties$IsPopup$1;->()V +Landroidx/compose/ui/semantics/SemanticsProperties$PaneTitle$1; +HSPLandroidx/compose/ui/semantics/SemanticsProperties$PaneTitle$1;->()V +HSPLandroidx/compose/ui/semantics/SemanticsProperties$PaneTitle$1;->()V +Landroidx/compose/ui/semantics/SemanticsProperties$Role$1; +HSPLandroidx/compose/ui/semantics/SemanticsProperties$Role$1;->()V +HSPLandroidx/compose/ui/semantics/SemanticsProperties$Role$1;->()V +Landroidx/compose/ui/semantics/SemanticsProperties$TestTag$1; +HSPLandroidx/compose/ui/semantics/SemanticsProperties$TestTag$1;->()V +HSPLandroidx/compose/ui/semantics/SemanticsProperties$TestTag$1;->()V +Landroidx/compose/ui/semantics/SemanticsProperties$Text$1; +HSPLandroidx/compose/ui/semantics/SemanticsProperties$Text$1;->()V +HSPLandroidx/compose/ui/semantics/SemanticsProperties$Text$1;->()V +Landroidx/compose/ui/semantics/SemanticsProperties$TraversalIndex$1; +HSPLandroidx/compose/ui/semantics/SemanticsProperties$TraversalIndex$1;->()V +HSPLandroidx/compose/ui/semantics/SemanticsProperties$TraversalIndex$1;->()V +Landroidx/compose/ui/semantics/SemanticsPropertiesAndroid; +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesAndroid;->()V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesAndroid;->()V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesAndroid;->getTestTagsAsResourceId()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +Landroidx/compose/ui/semantics/SemanticsPropertiesAndroid$TestTagsAsResourceId$1; +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesAndroid$TestTagsAsResourceId$1;->()V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesAndroid$TestTagsAsResourceId$1;->()V +Landroidx/compose/ui/semantics/SemanticsPropertiesKt; +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->()V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->disabled(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->getTextLayoutResult$default(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->getTextLayoutResult(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->indexForKey(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->insertTextAtCursor$default(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->insertTextAtCursor(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->onClick$default(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function0;ILjava/lang/Object;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->onClick(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->onLongClick$default(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function0;ILjava/lang/Object;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->onLongClick(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->password(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->pasteText$default(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function0;ILjava/lang/Object;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->pasteText(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->performImeAction$default(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function0;ILjava/lang/Object;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->performImeAction(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->requestFocus$default(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function0;ILjava/lang/Object;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->requestFocus(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->scrollBy$default(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->scrollBy(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->scrollToIndex$default(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->scrollToIndex(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->selectableGroup(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setCollectionInfo(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Landroidx/compose/ui/semantics/CollectionInfo;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setContainer(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Z)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setEditableText(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Landroidx/compose/ui/text/AnnotatedString;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setFocused(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Z)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setImeAction-4L7nppU(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;I)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setProgressBarRangeInfo(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Landroidx/compose/ui/semantics/ProgressBarRangeInfo;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setRole-kuIjeqM(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;I)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setSelected(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Z)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setSelection$default(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function3;ILjava/lang/Object;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setSelection(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function3;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setTestTag(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setText$default(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setText(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Landroidx/compose/ui/text/AnnotatedString;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setText(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setTextSelectionRange-FDrldGo(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;J)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setTraversalGroup(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Z)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setVerticalScrollAxisRange(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Landroidx/compose/ui/semantics/ScrollAxisRange;)V +Landroidx/compose/ui/semantics/SemanticsPropertiesKt$ActionPropertyKey$1; +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt$ActionPropertyKey$1;->()V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt$ActionPropertyKey$1;->()V +Landroidx/compose/ui/semantics/SemanticsProperties_androidKt; +HSPLandroidx/compose/ui/semantics/SemanticsProperties_androidKt;->()V +HSPLandroidx/compose/ui/semantics/SemanticsProperties_androidKt;->setTestTagsAsResourceId(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Z)V +Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsPropertyKey;->()V +HSPLandroidx/compose/ui/semantics/SemanticsPropertyKey;->(Ljava/lang/String;Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertyKey;->(Ljava/lang/String;Lkotlin/jvm/functions/Function2;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertyKey;->setValue(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Lkotlin/reflect/KProperty;Ljava/lang/Object;)V +Landroidx/compose/ui/semantics/SemanticsPropertyKey$1; +HSPLandroidx/compose/ui/semantics/SemanticsPropertyKey$1;->()V +HSPLandroidx/compose/ui/semantics/SemanticsPropertyKey$1;->()V +Landroidx/compose/ui/semantics/SemanticsPropertyReceiver; +Landroidx/compose/ui/state/ToggleableState; +HSPLandroidx/compose/ui/state/ToggleableState;->$values()[Landroidx/compose/ui/state/ToggleableState; +HSPLandroidx/compose/ui/state/ToggleableState;->()V +HSPLandroidx/compose/ui/state/ToggleableState;->(Ljava/lang/String;I)V +HSPLandroidx/compose/ui/state/ToggleableState;->values()[Landroidx/compose/ui/state/ToggleableState; +Landroidx/compose/ui/state/ToggleableStateKt; +HSPLandroidx/compose/ui/state/ToggleableStateKt;->ToggleableState(Z)Landroidx/compose/ui/state/ToggleableState; +Landroidx/compose/ui/text/AndroidParagraph; +HSPLandroidx/compose/ui/text/AndroidParagraph;->(Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;IZJ)V +HSPLandroidx/compose/ui/text/AndroidParagraph;->(Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;IZJLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/AndroidParagraph;->constructTextLayout(IILandroid/text/TextUtils$TruncateAt;IIIII)Landroidx/compose/ui/text/android/TextLayout; +HSPLandroidx/compose/ui/text/AndroidParagraph;->getBoundingBox(I)Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/ui/text/AndroidParagraph;->getCursorRect(I)Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/ui/text/AndroidParagraph;->getDidExceedMaxLines()Z +HSPLandroidx/compose/ui/text/AndroidParagraph;->getFirstBaseline()F +HSPLandroidx/compose/ui/text/AndroidParagraph;->getHeight()F +HSPLandroidx/compose/ui/text/AndroidParagraph;->getLastBaseline()F +HSPLandroidx/compose/ui/text/AndroidParagraph;->getLineBaseline$ui_text_release(I)F +HSPLandroidx/compose/ui/text/AndroidParagraph;->getLineBottom(I)F +HSPLandroidx/compose/ui/text/AndroidParagraph;->getLineCount()I +HSPLandroidx/compose/ui/text/AndroidParagraph;->getMinIntrinsicWidth()F +HSPLandroidx/compose/ui/text/AndroidParagraph;->getPlaceholderRects()Ljava/util/List; +HSPLandroidx/compose/ui/text/AndroidParagraph;->getShaderBrushSpans(Landroidx/compose/ui/text/android/TextLayout;)[Landroidx/compose/ui/text/platform/style/ShaderBrushSpan; +HSPLandroidx/compose/ui/text/AndroidParagraph;->getTextPaint$ui_text_release()Landroidx/compose/ui/text/platform/AndroidTextPaint; +HSPLandroidx/compose/ui/text/AndroidParagraph;->getWidth()F +HSPLandroidx/compose/ui/text/AndroidParagraph;->paint(Landroidx/compose/ui/graphics/Canvas;)V +HSPLandroidx/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 +Landroidx/compose/ui/text/AndroidParagraph$wordBoundary$2; +HSPLandroidx/compose/ui/text/AndroidParagraph$wordBoundary$2;->(Landroidx/compose/ui/text/AndroidParagraph;)V +Landroidx/compose/ui/text/AndroidParagraph_androidKt; +HSPLandroidx/compose/ui/text/AndroidParagraph_androidKt;->access$shouldAttachIndentationFixSpan(Landroidx/compose/ui/text/TextStyle;Z)Z +HSPLandroidx/compose/ui/text/AndroidParagraph_androidKt;->access$toLayoutAlign-AMY3VfE(Landroidx/compose/ui/text/style/TextAlign;)I +HSPLandroidx/compose/ui/text/AndroidParagraph_androidKt;->access$toLayoutBreakStrategy-u6PBz3U(Landroidx/compose/ui/text/style/LineBreak$Strategy;)I +HSPLandroidx/compose/ui/text/AndroidParagraph_androidKt;->access$toLayoutHyphenationFrequency-0_XeFpE(Landroidx/compose/ui/text/style/Hyphens;)I +HSPLandroidx/compose/ui/text/AndroidParagraph_androidKt;->access$toLayoutLineBreakStyle-4a2g8L8(Landroidx/compose/ui/text/style/LineBreak$Strictness;)I +HSPLandroidx/compose/ui/text/AndroidParagraph_androidKt;->access$toLayoutLineBreakWordStyle-gvcdTPQ(Landroidx/compose/ui/text/style/LineBreak$WordBreak;)I +HSPLandroidx/compose/ui/text/AndroidParagraph_androidKt;->shouldAttachIndentationFixSpan(Landroidx/compose/ui/text/TextStyle;Z)Z +HSPLandroidx/compose/ui/text/AndroidParagraph_androidKt;->toLayoutAlign-AMY3VfE(Landroidx/compose/ui/text/style/TextAlign;)I +HSPLandroidx/compose/ui/text/AndroidParagraph_androidKt;->toLayoutBreakStrategy-u6PBz3U(Landroidx/compose/ui/text/style/LineBreak$Strategy;)I +HSPLandroidx/compose/ui/text/AndroidParagraph_androidKt;->toLayoutHyphenationFrequency-0_XeFpE(Landroidx/compose/ui/text/style/Hyphens;)I +HSPLandroidx/compose/ui/text/AndroidParagraph_androidKt;->toLayoutLineBreakStyle-4a2g8L8(Landroidx/compose/ui/text/style/LineBreak$Strictness;)I +HSPLandroidx/compose/ui/text/AndroidParagraph_androidKt;->toLayoutLineBreakWordStyle-gvcdTPQ(Landroidx/compose/ui/text/style/LineBreak$WordBreak;)I +Landroidx/compose/ui/text/AndroidTextStyle_androidKt; +HSPLandroidx/compose/ui/text/AndroidTextStyle_androidKt;->createPlatformTextStyle(Landroidx/compose/ui/text/PlatformSpanStyle;Landroidx/compose/ui/text/PlatformParagraphStyle;)Landroidx/compose/ui/text/PlatformTextStyle; +Landroidx/compose/ui/text/AnnotatedString; +HSPLandroidx/compose/ui/text/AnnotatedString;->()V +HSPLandroidx/compose/ui/text/AnnotatedString;->(Ljava/lang/String;Ljava/util/List;Ljava/util/List;)V +HSPLandroidx/compose/ui/text/AnnotatedString;->(Ljava/lang/String;Ljava/util/List;Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/AnnotatedString;->(Ljava/lang/String;Ljava/util/List;Ljava/util/List;Ljava/util/List;)V +HSPLandroidx/compose/ui/text/AnnotatedString;->(Ljava/lang/String;Ljava/util/List;Ljava/util/List;Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/AnnotatedString;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/text/AnnotatedString;->getLength()I +HSPLandroidx/compose/ui/text/AnnotatedString;->getParagraphStylesOrNull$ui_text_release()Ljava/util/List; +HSPLandroidx/compose/ui/text/AnnotatedString;->getSpanStyles()Ljava/util/List; +HSPLandroidx/compose/ui/text/AnnotatedString;->getSpanStylesOrNull$ui_text_release()Ljava/util/List; +HSPLandroidx/compose/ui/text/AnnotatedString;->getText()Ljava/lang/String; +HSPLandroidx/compose/ui/text/AnnotatedString;->getTtsAnnotations(II)Ljava/util/List; +HSPLandroidx/compose/ui/text/AnnotatedString;->getUrlAnnotations(II)Ljava/util/List; +HSPLandroidx/compose/ui/text/AnnotatedString;->hasStringAnnotations(Ljava/lang/String;II)Z +HSPLandroidx/compose/ui/text/AnnotatedString;->length()I +HSPLandroidx/compose/ui/text/AnnotatedString;->subSequence(II)Landroidx/compose/ui/text/AnnotatedString; +HSPLandroidx/compose/ui/text/AnnotatedString;->toString()Ljava/lang/String; +Landroidx/compose/ui/text/AnnotatedString$Builder; +HSPLandroidx/compose/ui/text/AnnotatedString$Builder;->()V +HSPLandroidx/compose/ui/text/AnnotatedString$Builder;->(I)V +HSPLandroidx/compose/ui/text/AnnotatedString$Builder;->(IILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/AnnotatedString$Builder;->append(Ljava/lang/String;)V +HSPLandroidx/compose/ui/text/AnnotatedString$Builder;->pop()V +HSPLandroidx/compose/ui/text/AnnotatedString$Builder;->pop(I)V +HSPLandroidx/compose/ui/text/AnnotatedString$Builder;->pushStyle(Landroidx/compose/ui/text/SpanStyle;)I +HSPLandroidx/compose/ui/text/AnnotatedString$Builder;->toAnnotatedString()Landroidx/compose/ui/text/AnnotatedString; +Landroidx/compose/ui/text/AnnotatedString$Builder$MutableRange; +HSPLandroidx/compose/ui/text/AnnotatedString$Builder$MutableRange;->(Ljava/lang/Object;IILjava/lang/String;)V +HSPLandroidx/compose/ui/text/AnnotatedString$Builder$MutableRange;->(Ljava/lang/Object;IILjava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/AnnotatedString$Builder$MutableRange;->setEnd(I)V +HSPLandroidx/compose/ui/text/AnnotatedString$Builder$MutableRange;->toRange(I)Landroidx/compose/ui/text/AnnotatedString$Range; +Landroidx/compose/ui/text/AnnotatedString$Range; +HSPLandroidx/compose/ui/text/AnnotatedString$Range;->()V +HSPLandroidx/compose/ui/text/AnnotatedString$Range;->(Ljava/lang/Object;II)V +HSPLandroidx/compose/ui/text/AnnotatedString$Range;->(Ljava/lang/Object;IILjava/lang/String;)V +HSPLandroidx/compose/ui/text/AnnotatedString$Range;->component1()Ljava/lang/Object; +HSPLandroidx/compose/ui/text/AnnotatedString$Range;->component2()I +HSPLandroidx/compose/ui/text/AnnotatedString$Range;->component3()I +HSPLandroidx/compose/ui/text/AnnotatedString$Range;->getEnd()I +HSPLandroidx/compose/ui/text/AnnotatedString$Range;->getItem()Ljava/lang/Object; +HSPLandroidx/compose/ui/text/AnnotatedString$Range;->getStart()I +Landroidx/compose/ui/text/AnnotatedStringKt; +HSPLandroidx/compose/ui/text/AnnotatedStringKt;->()V +HSPLandroidx/compose/ui/text/AnnotatedStringKt;->access$filterRanges(Ljava/util/List;II)Ljava/util/List; +HSPLandroidx/compose/ui/text/AnnotatedStringKt;->access$substringWithoutParagraphStyles(Landroidx/compose/ui/text/AnnotatedString;II)Landroidx/compose/ui/text/AnnotatedString; +HSPLandroidx/compose/ui/text/AnnotatedStringKt;->emptyAnnotatedString()Landroidx/compose/ui/text/AnnotatedString; +HSPLandroidx/compose/ui/text/AnnotatedStringKt;->filterRanges(Ljava/util/List;II)Ljava/util/List; +HSPLandroidx/compose/ui/text/AnnotatedStringKt;->getLocalSpanStyles(Landroidx/compose/ui/text/AnnotatedString;II)Ljava/util/List; +HSPLandroidx/compose/ui/text/AnnotatedStringKt;->normalizedParagraphStyles(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/ParagraphStyle;)Ljava/util/List; +HSPLandroidx/compose/ui/text/AnnotatedStringKt;->substringWithoutParagraphStyles(Landroidx/compose/ui/text/AnnotatedString;II)Landroidx/compose/ui/text/AnnotatedString; +Landroidx/compose/ui/text/EmojiSupportMatch; +HSPLandroidx/compose/ui/text/EmojiSupportMatch;->()V +HSPLandroidx/compose/ui/text/EmojiSupportMatch;->(I)V +HSPLandroidx/compose/ui/text/EmojiSupportMatch;->access$getDefault$cp()I +HSPLandroidx/compose/ui/text/EmojiSupportMatch;->access$getNone$cp()I +HSPLandroidx/compose/ui/text/EmojiSupportMatch;->box-impl(I)Landroidx/compose/ui/text/EmojiSupportMatch; +HSPLandroidx/compose/ui/text/EmojiSupportMatch;->constructor-impl(I)I +HSPLandroidx/compose/ui/text/EmojiSupportMatch;->equals-impl0(II)Z +HSPLandroidx/compose/ui/text/EmojiSupportMatch;->unbox-impl()I +Landroidx/compose/ui/text/EmojiSupportMatch$Companion; +HSPLandroidx/compose/ui/text/EmojiSupportMatch$Companion;->()V +HSPLandroidx/compose/ui/text/EmojiSupportMatch$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/EmojiSupportMatch$Companion;->getDefault-_3YsG6Y()I +HSPLandroidx/compose/ui/text/EmojiSupportMatch$Companion;->getNone-_3YsG6Y()I +Landroidx/compose/ui/text/MultiParagraph; +HSPLandroidx/compose/ui/text/MultiParagraph;->()V +HSPLandroidx/compose/ui/text/MultiParagraph;->(Landroidx/compose/ui/text/MultiParagraphIntrinsics;JIZ)V +HSPLandroidx/compose/ui/text/MultiParagraph;->(Landroidx/compose/ui/text/MultiParagraphIntrinsics;JIZLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/MultiParagraph;->getAnnotatedString()Landroidx/compose/ui/text/AnnotatedString; +HSPLandroidx/compose/ui/text/MultiParagraph;->getBoundingBox(I)Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/ui/text/MultiParagraph;->getCursorRect(I)Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/ui/text/MultiParagraph;->getDidExceedMaxLines()Z +HSPLandroidx/compose/ui/text/MultiParagraph;->getFirstBaseline()F +HSPLandroidx/compose/ui/text/MultiParagraph;->getHeight()F +HSPLandroidx/compose/ui/text/MultiParagraph;->getIntrinsics()Landroidx/compose/ui/text/MultiParagraphIntrinsics; +HSPLandroidx/compose/ui/text/MultiParagraph;->getLastBaseline()F +HSPLandroidx/compose/ui/text/MultiParagraph;->getLineBottom(I)F +HSPLandroidx/compose/ui/text/MultiParagraph;->getPlaceholderRects()Ljava/util/List; +HSPLandroidx/compose/ui/text/MultiParagraph;->getWidth()F +HSPLandroidx/compose/ui/text/MultiParagraph;->paint-LG529CI$default(Landroidx/compose/ui/text/MultiParagraph;Landroidx/compose/ui/graphics/Canvas;JLandroidx/compose/ui/graphics/Shadow;Landroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/drawscope/DrawStyle;IILjava/lang/Object;)V +HSPLandroidx/compose/ui/text/MultiParagraph;->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 +HSPLandroidx/compose/ui/text/MultiParagraph;->requireIndexInRange(I)V +HSPLandroidx/compose/ui/text/MultiParagraph;->requireIndexInRangeInclusiveEnd(I)V +HSPLandroidx/compose/ui/text/MultiParagraph;->requireLineIndexInRange(I)V +Landroidx/compose/ui/text/MultiParagraphIntrinsics; +HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics;->()V +HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics;->(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;Ljava/util/List;Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/text/font/FontFamily$Resolver;)V +HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics;->access$resolveTextDirection(Landroidx/compose/ui/text/MultiParagraphIntrinsics;Landroidx/compose/ui/text/ParagraphStyle;Landroidx/compose/ui/text/ParagraphStyle;)Landroidx/compose/ui/text/ParagraphStyle; +HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics;->getAnnotatedString()Landroidx/compose/ui/text/AnnotatedString; +HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics;->getHasStaleResolvedFonts()Z +HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics;->getInfoList$ui_text_release()Ljava/util/List; +HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics;->getMaxIntrinsicWidth()F +HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics;->getPlaceholders()Ljava/util/List; +HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics;->resolveTextDirection(Landroidx/compose/ui/text/ParagraphStyle;Landroidx/compose/ui/text/ParagraphStyle;)Landroidx/compose/ui/text/ParagraphStyle; +Landroidx/compose/ui/text/MultiParagraphIntrinsics$maxIntrinsicWidth$2; +HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics$maxIntrinsicWidth$2;->(Landroidx/compose/ui/text/MultiParagraphIntrinsics;)V +HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics$maxIntrinsicWidth$2;->invoke()Ljava/lang/Float; +HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics$maxIntrinsicWidth$2;->invoke()Ljava/lang/Object; +Landroidx/compose/ui/text/MultiParagraphIntrinsics$minIntrinsicWidth$2; +HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics$minIntrinsicWidth$2;->(Landroidx/compose/ui/text/MultiParagraphIntrinsics;)V +Landroidx/compose/ui/text/MultiParagraphIntrinsicsKt; +HSPLandroidx/compose/ui/text/MultiParagraphIntrinsicsKt;->access$getLocalPlaceholders(Ljava/util/List;II)Ljava/util/List; +HSPLandroidx/compose/ui/text/MultiParagraphIntrinsicsKt;->getLocalPlaceholders(Ljava/util/List;II)Ljava/util/List; +Landroidx/compose/ui/text/MultiParagraphKt; +HSPLandroidx/compose/ui/text/MultiParagraphKt;->findParagraphByIndex(Ljava/util/List;I)I +HSPLandroidx/compose/ui/text/MultiParagraphKt;->findParagraphByLineIndex(Ljava/util/List;I)I +Landroidx/compose/ui/text/Paragraph; +Landroidx/compose/ui/text/ParagraphInfo; +HSPLandroidx/compose/ui/text/ParagraphInfo;->(Landroidx/compose/ui/text/Paragraph;IIIIFF)V +HSPLandroidx/compose/ui/text/ParagraphInfo;->getEndIndex()I +HSPLandroidx/compose/ui/text/ParagraphInfo;->getEndLineIndex()I +HSPLandroidx/compose/ui/text/ParagraphInfo;->getParagraph()Landroidx/compose/ui/text/Paragraph; +HSPLandroidx/compose/ui/text/ParagraphInfo;->getStartIndex()I +HSPLandroidx/compose/ui/text/ParagraphInfo;->getStartLineIndex()I +HSPLandroidx/compose/ui/text/ParagraphInfo;->toGlobal(Landroidx/compose/ui/geometry/Rect;)Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/ui/text/ParagraphInfo;->toGlobalYPosition(F)F +HSPLandroidx/compose/ui/text/ParagraphInfo;->toLocalIndex(I)I +HSPLandroidx/compose/ui/text/ParagraphInfo;->toLocalLineIndex(I)I +Landroidx/compose/ui/text/ParagraphIntrinsicInfo; +HSPLandroidx/compose/ui/text/ParagraphIntrinsicInfo;->(Landroidx/compose/ui/text/ParagraphIntrinsics;II)V +HSPLandroidx/compose/ui/text/ParagraphIntrinsicInfo;->getEndIndex()I +HSPLandroidx/compose/ui/text/ParagraphIntrinsicInfo;->getIntrinsics()Landroidx/compose/ui/text/ParagraphIntrinsics; +HSPLandroidx/compose/ui/text/ParagraphIntrinsicInfo;->getStartIndex()I +Landroidx/compose/ui/text/ParagraphIntrinsics; +Landroidx/compose/ui/text/ParagraphIntrinsicsKt; +HSPLandroidx/compose/ui/text/ParagraphIntrinsicsKt;->ParagraphIntrinsics(Ljava/lang/String;Landroidx/compose/ui/text/TextStyle;Ljava/util/List;Ljava/util/List;Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/text/font/FontFamily$Resolver;)Landroidx/compose/ui/text/ParagraphIntrinsics; +Landroidx/compose/ui/text/ParagraphKt; +HSPLandroidx/compose/ui/text/ParagraphKt;->Paragraph-UdtVg6A$default(Ljava/lang/String;Landroidx/compose/ui/text/TextStyle;JLandroidx/compose/ui/unit/Density;Landroidx/compose/ui/text/font/FontFamily$Resolver;Ljava/util/List;Ljava/util/List;IZILjava/lang/Object;)Landroidx/compose/ui/text/Paragraph; +HSPLandroidx/compose/ui/text/ParagraphKt;->Paragraph-UdtVg6A(Ljava/lang/String;Landroidx/compose/ui/text/TextStyle;JLandroidx/compose/ui/unit/Density;Landroidx/compose/ui/text/font/FontFamily$Resolver;Ljava/util/List;Ljava/util/List;IZ)Landroidx/compose/ui/text/Paragraph; +HSPLandroidx/compose/ui/text/ParagraphKt;->Paragraph-_EkL_-Y(Landroidx/compose/ui/text/ParagraphIntrinsics;JIZ)Landroidx/compose/ui/text/Paragraph; +HSPLandroidx/compose/ui/text/ParagraphKt;->ceilToInt(F)I +Landroidx/compose/ui/text/ParagraphStyle; +HSPLandroidx/compose/ui/text/ParagraphStyle;->()V +HSPLandroidx/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;)V +HSPLandroidx/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;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/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;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/ParagraphStyle;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/text/ParagraphStyle;->getHyphens-EaSxIns()Landroidx/compose/ui/text/style/Hyphens; +HSPLandroidx/compose/ui/text/ParagraphStyle;->getHyphensOrDefault-vmbZdU8$ui_text_release()I +HSPLandroidx/compose/ui/text/ParagraphStyle;->getLineBreak-LgCVezo()Landroidx/compose/ui/text/style/LineBreak; +HSPLandroidx/compose/ui/text/ParagraphStyle;->getLineBreakOrDefault-rAG3T2k$ui_text_release()I +HSPLandroidx/compose/ui/text/ParagraphStyle;->getLineHeight-XSAIIZE()J +HSPLandroidx/compose/ui/text/ParagraphStyle;->getLineHeightStyle()Landroidx/compose/ui/text/style/LineHeightStyle; +HSPLandroidx/compose/ui/text/ParagraphStyle;->getPlatformStyle()Landroidx/compose/ui/text/PlatformParagraphStyle; +HSPLandroidx/compose/ui/text/ParagraphStyle;->getTextAlign-buA522U()Landroidx/compose/ui/text/style/TextAlign; +HSPLandroidx/compose/ui/text/ParagraphStyle;->getTextAlignOrDefault-e0LSkKk$ui_text_release()I +HSPLandroidx/compose/ui/text/ParagraphStyle;->getTextDirection-mmuk1to()Landroidx/compose/ui/text/style/TextDirection; +HSPLandroidx/compose/ui/text/ParagraphStyle;->getTextIndent()Landroidx/compose/ui/text/style/TextIndent; +HSPLandroidx/compose/ui/text/ParagraphStyle;->getTextMotion()Landroidx/compose/ui/text/style/TextMotion; +HSPLandroidx/compose/ui/text/ParagraphStyle;->merge(Landroidx/compose/ui/text/ParagraphStyle;)Landroidx/compose/ui/text/ParagraphStyle; +Landroidx/compose/ui/text/ParagraphStyleKt; +HSPLandroidx/compose/ui/text/ParagraphStyleKt;->()V +HSPLandroidx/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; +HSPLandroidx/compose/ui/text/ParagraphStyleKt;->mergePlatformStyle(Landroidx/compose/ui/text/ParagraphStyle;Landroidx/compose/ui/text/PlatformParagraphStyle;)Landroidx/compose/ui/text/PlatformParagraphStyle; +HSPLandroidx/compose/ui/text/ParagraphStyleKt;->resolveParagraphStyleDefaults(Landroidx/compose/ui/text/ParagraphStyle;Landroidx/compose/ui/unit/LayoutDirection;)Landroidx/compose/ui/text/ParagraphStyle; +Landroidx/compose/ui/text/PlatformParagraphStyle; +HSPLandroidx/compose/ui/text/PlatformParagraphStyle;->()V +HSPLandroidx/compose/ui/text/PlatformParagraphStyle;->()V +HSPLandroidx/compose/ui/text/PlatformParagraphStyle;->(IZ)V +HSPLandroidx/compose/ui/text/PlatformParagraphStyle;->(IZLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/PlatformParagraphStyle;->(Z)V +HSPLandroidx/compose/ui/text/PlatformParagraphStyle;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/text/PlatformParagraphStyle;->getEmojiSupportMatch-_3YsG6Y()I +HSPLandroidx/compose/ui/text/PlatformParagraphStyle;->getIncludeFontPadding()Z +HSPLandroidx/compose/ui/text/PlatformParagraphStyle;->merge(Landroidx/compose/ui/text/PlatformParagraphStyle;)Landroidx/compose/ui/text/PlatformParagraphStyle; +Landroidx/compose/ui/text/PlatformParagraphStyle$Companion; +HSPLandroidx/compose/ui/text/PlatformParagraphStyle$Companion;->()V +HSPLandroidx/compose/ui/text/PlatformParagraphStyle$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/text/PlatformSpanStyle; +Landroidx/compose/ui/text/PlatformTextStyle; +HSPLandroidx/compose/ui/text/PlatformTextStyle;->()V +HSPLandroidx/compose/ui/text/PlatformTextStyle;->(Landroidx/compose/ui/text/PlatformSpanStyle;Landroidx/compose/ui/text/PlatformParagraphStyle;)V +HSPLandroidx/compose/ui/text/PlatformTextStyle;->(Z)V +HSPLandroidx/compose/ui/text/PlatformTextStyle;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/text/PlatformTextStyle;->getParagraphStyle()Landroidx/compose/ui/text/PlatformParagraphStyle; +HSPLandroidx/compose/ui/text/PlatformTextStyle;->getSpanStyle()Landroidx/compose/ui/text/PlatformSpanStyle; +Landroidx/compose/ui/text/SpanStyle; +HSPLandroidx/compose/ui/text/SpanStyle;->()V +HSPLandroidx/compose/ui/text/SpanStyle;->(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 +HSPLandroidx/compose/ui/text/SpanStyle;->(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;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/SpanStyle;->(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;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/SpanStyle;->(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 +HSPLandroidx/compose/ui/text/SpanStyle;->(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;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/SpanStyle;->copy-GSF8kmg$default(Landroidx/compose/ui/text/SpanStyle;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;ILjava/lang/Object;)Landroidx/compose/ui/text/SpanStyle; +HSPLandroidx/compose/ui/text/SpanStyle;->copy-GSF8kmg(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;)Landroidx/compose/ui/text/SpanStyle; +HSPLandroidx/compose/ui/text/SpanStyle;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/text/SpanStyle;->getAlpha()F +HSPLandroidx/compose/ui/text/SpanStyle;->getBackground-0d7_KjU()J +HSPLandroidx/compose/ui/text/SpanStyle;->getBaselineShift-5SSeXJ0()Landroidx/compose/ui/text/style/BaselineShift; +HSPLandroidx/compose/ui/text/SpanStyle;->getBrush()Landroidx/compose/ui/graphics/Brush; +HSPLandroidx/compose/ui/text/SpanStyle;->getColor-0d7_KjU()J +HSPLandroidx/compose/ui/text/SpanStyle;->getDrawStyle()Landroidx/compose/ui/graphics/drawscope/DrawStyle; +HSPLandroidx/compose/ui/text/SpanStyle;->getFontFamily()Landroidx/compose/ui/text/font/FontFamily; +HSPLandroidx/compose/ui/text/SpanStyle;->getFontFeatureSettings()Ljava/lang/String; +HSPLandroidx/compose/ui/text/SpanStyle;->getFontSize-XSAIIZE()J +HSPLandroidx/compose/ui/text/SpanStyle;->getFontStyle-4Lr2A7w()Landroidx/compose/ui/text/font/FontStyle; +HSPLandroidx/compose/ui/text/SpanStyle;->getFontSynthesis-ZQGJjVo()Landroidx/compose/ui/text/font/FontSynthesis; +HSPLandroidx/compose/ui/text/SpanStyle;->getFontWeight()Landroidx/compose/ui/text/font/FontWeight; +HSPLandroidx/compose/ui/text/SpanStyle;->getLetterSpacing-XSAIIZE()J +HSPLandroidx/compose/ui/text/SpanStyle;->getLocaleList()Landroidx/compose/ui/text/intl/LocaleList; +HSPLandroidx/compose/ui/text/SpanStyle;->getPlatformStyle()Landroidx/compose/ui/text/PlatformSpanStyle; +HSPLandroidx/compose/ui/text/SpanStyle;->getShadow()Landroidx/compose/ui/graphics/Shadow; +HSPLandroidx/compose/ui/text/SpanStyle;->getTextDecoration()Landroidx/compose/ui/text/style/TextDecoration; +HSPLandroidx/compose/ui/text/SpanStyle;->getTextForegroundStyle$ui_text_release()Landroidx/compose/ui/text/style/TextForegroundStyle; +HSPLandroidx/compose/ui/text/SpanStyle;->getTextGeometricTransform()Landroidx/compose/ui/text/style/TextGeometricTransform; +HSPLandroidx/compose/ui/text/SpanStyle;->hasSameLayoutAffectingAttributes$ui_text_release(Landroidx/compose/ui/text/SpanStyle;)Z +HSPLandroidx/compose/ui/text/SpanStyle;->hasSameNonLayoutAttributes$ui_text_release(Landroidx/compose/ui/text/SpanStyle;)Z +HSPLandroidx/compose/ui/text/SpanStyle;->merge(Landroidx/compose/ui/text/SpanStyle;)Landroidx/compose/ui/text/SpanStyle; +Landroidx/compose/ui/text/SpanStyleKt; +HSPLandroidx/compose/ui/text/SpanStyleKt;->()V +HSPLandroidx/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; +HSPLandroidx/compose/ui/text/SpanStyleKt;->mergePlatformStyle(Landroidx/compose/ui/text/SpanStyle;Landroidx/compose/ui/text/PlatformSpanStyle;)Landroidx/compose/ui/text/PlatformSpanStyle; +HSPLandroidx/compose/ui/text/SpanStyleKt;->resolveSpanStyleDefaults(Landroidx/compose/ui/text/SpanStyle;)Landroidx/compose/ui/text/SpanStyle; +Landroidx/compose/ui/text/SpanStyleKt$resolveSpanStyleDefaults$1; +HSPLandroidx/compose/ui/text/SpanStyleKt$resolveSpanStyleDefaults$1;->()V +HSPLandroidx/compose/ui/text/SpanStyleKt$resolveSpanStyleDefaults$1;->()V +Landroidx/compose/ui/text/TextLayoutInput; +HSPLandroidx/compose/ui/text/TextLayoutInput;->()V +HSPLandroidx/compose/ui/text/TextLayoutInput;->(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;Ljava/util/List;IZILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/text/font/Font$ResourceLoader;Landroidx/compose/ui/text/font/FontFamily$Resolver;J)V +HSPLandroidx/compose/ui/text/TextLayoutInput;->(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;Ljava/util/List;IZILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/text/font/FontFamily$Resolver;J)V +HSPLandroidx/compose/ui/text/TextLayoutInput;->(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;Ljava/util/List;IZILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/text/font/FontFamily$Resolver;JLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/TextLayoutInput;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/text/TextLayoutInput;->getConstraints-msEJaDk()J +HSPLandroidx/compose/ui/text/TextLayoutInput;->getDensity()Landroidx/compose/ui/unit/Density; +HSPLandroidx/compose/ui/text/TextLayoutInput;->getFontFamilyResolver()Landroidx/compose/ui/text/font/FontFamily$Resolver; +HSPLandroidx/compose/ui/text/TextLayoutInput;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection; +HSPLandroidx/compose/ui/text/TextLayoutInput;->getMaxLines()I +HSPLandroidx/compose/ui/text/TextLayoutInput;->getOverflow-gIe3tQ8()I +HSPLandroidx/compose/ui/text/TextLayoutInput;->getPlaceholders()Ljava/util/List; +HSPLandroidx/compose/ui/text/TextLayoutInput;->getSoftWrap()Z +HSPLandroidx/compose/ui/text/TextLayoutInput;->getStyle()Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/ui/text/TextLayoutInput;->getText()Landroidx/compose/ui/text/AnnotatedString; +Landroidx/compose/ui/text/TextLayoutResult; +HSPLandroidx/compose/ui/text/TextLayoutResult;->()V +HSPLandroidx/compose/ui/text/TextLayoutResult;->(Landroidx/compose/ui/text/TextLayoutInput;Landroidx/compose/ui/text/MultiParagraph;J)V +HSPLandroidx/compose/ui/text/TextLayoutResult;->(Landroidx/compose/ui/text/TextLayoutInput;Landroidx/compose/ui/text/MultiParagraph;JLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/TextLayoutResult;->copy-O0kMr_c(Landroidx/compose/ui/text/TextLayoutInput;J)Landroidx/compose/ui/text/TextLayoutResult; +HSPLandroidx/compose/ui/text/TextLayoutResult;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/text/TextLayoutResult;->getBoundingBox(I)Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/ui/text/TextLayoutResult;->getCursorRect(I)Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/ui/text/TextLayoutResult;->getDidOverflowHeight()Z +HSPLandroidx/compose/ui/text/TextLayoutResult;->getDidOverflowWidth()Z +HSPLandroidx/compose/ui/text/TextLayoutResult;->getFirstBaseline()F +HSPLandroidx/compose/ui/text/TextLayoutResult;->getHasVisualOverflow()Z +HSPLandroidx/compose/ui/text/TextLayoutResult;->getLastBaseline()F +HSPLandroidx/compose/ui/text/TextLayoutResult;->getLayoutInput()Landroidx/compose/ui/text/TextLayoutInput; +HSPLandroidx/compose/ui/text/TextLayoutResult;->getLineBottom(I)F +HSPLandroidx/compose/ui/text/TextLayoutResult;->getMultiParagraph()Landroidx/compose/ui/text/MultiParagraph; +HSPLandroidx/compose/ui/text/TextLayoutResult;->getSize-YbymL2g()J +Landroidx/compose/ui/text/TextPainter; +HSPLandroidx/compose/ui/text/TextPainter;->()V +HSPLandroidx/compose/ui/text/TextPainter;->()V +HSPLandroidx/compose/ui/text/TextPainter;->paint(Landroidx/compose/ui/graphics/Canvas;Landroidx/compose/ui/text/TextLayoutResult;)V +Landroidx/compose/ui/text/TextRange; +HSPLandroidx/compose/ui/text/TextRange;->()V +HSPLandroidx/compose/ui/text/TextRange;->(J)V +HSPLandroidx/compose/ui/text/TextRange;->access$getZero$cp()J +HSPLandroidx/compose/ui/text/TextRange;->box-impl(J)Landroidx/compose/ui/text/TextRange; +HSPLandroidx/compose/ui/text/TextRange;->constructor-impl(J)J +HSPLandroidx/compose/ui/text/TextRange;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/text/TextRange;->equals-impl(JLjava/lang/Object;)Z +HSPLandroidx/compose/ui/text/TextRange;->equals-impl0(JJ)Z +HSPLandroidx/compose/ui/text/TextRange;->getCollapsed-impl(J)Z +HSPLandroidx/compose/ui/text/TextRange;->getEnd-impl(J)I +HSPLandroidx/compose/ui/text/TextRange;->getMax-impl(J)I +HSPLandroidx/compose/ui/text/TextRange;->getMin-impl(J)I +HSPLandroidx/compose/ui/text/TextRange;->getStart-impl(J)I +HSPLandroidx/compose/ui/text/TextRange;->unbox-impl()J +Landroidx/compose/ui/text/TextRange$Companion; +HSPLandroidx/compose/ui/text/TextRange$Companion;->()V +HSPLandroidx/compose/ui/text/TextRange$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/TextRange$Companion;->getZero-d9O1mEE()J +Landroidx/compose/ui/text/TextRangeKt; +HSPLandroidx/compose/ui/text/TextRangeKt;->TextRange(I)J +HSPLandroidx/compose/ui/text/TextRangeKt;->TextRange(II)J +HSPLandroidx/compose/ui/text/TextRangeKt;->coerceIn-8ffj60Q(JII)J +HSPLandroidx/compose/ui/text/TextRangeKt;->packWithCheck(II)J +Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/ui/text/TextStyle;->()V +HSPLandroidx/compose/ui/text/TextStyle;->(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/graphics/drawscope/DrawStyle;Landroidx/compose/ui/text/style/TextAlign;Landroidx/compose/ui/text/style/TextDirection;JLandroidx/compose/ui/text/style/TextIndent;Landroidx/compose/ui/text/PlatformTextStyle;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 +HSPLandroidx/compose/ui/text/TextStyle;->(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/graphics/drawscope/DrawStyle;Landroidx/compose/ui/text/style/TextAlign;Landroidx/compose/ui/text/style/TextDirection;JLandroidx/compose/ui/text/style/TextIndent;Landroidx/compose/ui/text/PlatformTextStyle;Landroidx/compose/ui/text/style/LineHeightStyle;Landroidx/compose/ui/text/style/LineBreak;Landroidx/compose/ui/text/style/Hyphens;Landroidx/compose/ui/text/style/TextMotion;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/TextStyle;->(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/graphics/drawscope/DrawStyle;Landroidx/compose/ui/text/style/TextAlign;Landroidx/compose/ui/text/style/TextDirection;JLandroidx/compose/ui/text/style/TextIndent;Landroidx/compose/ui/text/PlatformTextStyle;Landroidx/compose/ui/text/style/LineHeightStyle;Landroidx/compose/ui/text/style/LineBreak;Landroidx/compose/ui/text/style/Hyphens;Landroidx/compose/ui/text/style/TextMotion;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/TextStyle;->(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/style/TextAlign;Landroidx/compose/ui/text/style/TextDirection;JLandroidx/compose/ui/text/style/TextIndent;Landroidx/compose/ui/text/PlatformTextStyle;Landroidx/compose/ui/text/style/LineHeightStyle;Landroidx/compose/ui/text/style/LineBreak;Landroidx/compose/ui/text/style/Hyphens;)V +HSPLandroidx/compose/ui/text/TextStyle;->(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/style/TextAlign;Landroidx/compose/ui/text/style/TextDirection;JLandroidx/compose/ui/text/style/TextIndent;Landroidx/compose/ui/text/PlatformTextStyle;Landroidx/compose/ui/text/style/LineHeightStyle;Landroidx/compose/ui/text/style/LineBreak;Landroidx/compose/ui/text/style/Hyphens;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/TextStyle;->(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/style/TextAlign;Landroidx/compose/ui/text/style/TextDirection;JLandroidx/compose/ui/text/style/TextIndent;Landroidx/compose/ui/text/PlatformTextStyle;Landroidx/compose/ui/text/style/LineHeightStyle;Landroidx/compose/ui/text/style/LineBreak;Landroidx/compose/ui/text/style/Hyphens;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/TextStyle;->(Landroidx/compose/ui/text/SpanStyle;Landroidx/compose/ui/text/ParagraphStyle;)V +HSPLandroidx/compose/ui/text/TextStyle;->(Landroidx/compose/ui/text/SpanStyle;Landroidx/compose/ui/text/ParagraphStyle;Landroidx/compose/ui/text/PlatformTextStyle;)V +HSPLandroidx/compose/ui/text/TextStyle;->access$getDefault$cp()Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/ui/text/TextStyle;->copy-CXVQc50$default(Landroidx/compose/ui/text/TextStyle;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/style/TextAlign;Landroidx/compose/ui/text/style/TextDirection;JLandroidx/compose/ui/text/style/TextIndent;Landroidx/compose/ui/text/PlatformTextStyle;Landroidx/compose/ui/text/style/LineHeightStyle;Landroidx/compose/ui/text/style/LineBreak;Landroidx/compose/ui/text/style/Hyphens;ILjava/lang/Object;)Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/ui/text/TextStyle;->copy-CXVQc50(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/style/TextAlign;Landroidx/compose/ui/text/style/TextDirection;JLandroidx/compose/ui/text/style/TextIndent;Landroidx/compose/ui/text/PlatformTextStyle;Landroidx/compose/ui/text/style/LineHeightStyle;Landroidx/compose/ui/text/style/LineBreak;Landroidx/compose/ui/text/style/Hyphens;)Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/ui/text/TextStyle;->copy-v2rsoow$default(Landroidx/compose/ui/text/TextStyle;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/graphics/drawscope/DrawStyle;Landroidx/compose/ui/text/style/TextAlign;Landroidx/compose/ui/text/style/TextDirection;JLandroidx/compose/ui/text/style/TextIndent;Landroidx/compose/ui/text/PlatformTextStyle;Landroidx/compose/ui/text/style/LineHeightStyle;Landroidx/compose/ui/text/style/LineBreak;Landroidx/compose/ui/text/style/Hyphens;Landroidx/compose/ui/text/style/TextMotion;ILjava/lang/Object;)Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/ui/text/TextStyle;->copy-v2rsoow(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/graphics/drawscope/DrawStyle;Landroidx/compose/ui/text/style/TextAlign;Landroidx/compose/ui/text/style/TextDirection;JLandroidx/compose/ui/text/style/TextIndent;Landroidx/compose/ui/text/PlatformTextStyle;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/TextStyle; +HSPLandroidx/compose/ui/text/TextStyle;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/text/TextStyle;->getAlpha()F +HSPLandroidx/compose/ui/text/TextStyle;->getBrush()Landroidx/compose/ui/graphics/Brush; +HSPLandroidx/compose/ui/text/TextStyle;->getColor-0d7_KjU()J +HSPLandroidx/compose/ui/text/TextStyle;->getDrawStyle()Landroidx/compose/ui/graphics/drawscope/DrawStyle; +HSPLandroidx/compose/ui/text/TextStyle;->getFontFamily()Landroidx/compose/ui/text/font/FontFamily; +HSPLandroidx/compose/ui/text/TextStyle;->getFontSize-XSAIIZE()J +HSPLandroidx/compose/ui/text/TextStyle;->getFontStyle-4Lr2A7w()Landroidx/compose/ui/text/font/FontStyle; +HSPLandroidx/compose/ui/text/TextStyle;->getFontSynthesis-ZQGJjVo()Landroidx/compose/ui/text/font/FontSynthesis; +HSPLandroidx/compose/ui/text/TextStyle;->getFontWeight()Landroidx/compose/ui/text/font/FontWeight; +PLandroidx/compose/ui/text/TextStyle;->getLetterSpacing-XSAIIZE()J +HSPLandroidx/compose/ui/text/TextStyle;->getLineBreak-LgCVezo()Landroidx/compose/ui/text/style/LineBreak; +HSPLandroidx/compose/ui/text/TextStyle;->getLineHeight-XSAIIZE()J +HSPLandroidx/compose/ui/text/TextStyle;->getLineHeightStyle()Landroidx/compose/ui/text/style/LineHeightStyle; +HSPLandroidx/compose/ui/text/TextStyle;->getLocaleList()Landroidx/compose/ui/text/intl/LocaleList; +HSPLandroidx/compose/ui/text/TextStyle;->getParagraphStyle$ui_text_release()Landroidx/compose/ui/text/ParagraphStyle; +HSPLandroidx/compose/ui/text/TextStyle;->getPlatformStyle()Landroidx/compose/ui/text/PlatformTextStyle; +HSPLandroidx/compose/ui/text/TextStyle;->getShadow()Landroidx/compose/ui/graphics/Shadow; +HSPLandroidx/compose/ui/text/TextStyle;->getSpanStyle$ui_text_release()Landroidx/compose/ui/text/SpanStyle; +HSPLandroidx/compose/ui/text/TextStyle;->getTextAlign-buA522U()Landroidx/compose/ui/text/style/TextAlign; +HSPLandroidx/compose/ui/text/TextStyle;->getTextDecoration()Landroidx/compose/ui/text/style/TextDecoration; +HSPLandroidx/compose/ui/text/TextStyle;->getTextDirection-mmuk1to()Landroidx/compose/ui/text/style/TextDirection; +HSPLandroidx/compose/ui/text/TextStyle;->getTextIndent()Landroidx/compose/ui/text/style/TextIndent; +HSPLandroidx/compose/ui/text/TextStyle;->getTextMotion()Landroidx/compose/ui/text/style/TextMotion; +HSPLandroidx/compose/ui/text/TextStyle;->hasSameDrawAffectingAttributes(Landroidx/compose/ui/text/TextStyle;)Z +HSPLandroidx/compose/ui/text/TextStyle;->hasSameLayoutAffectingAttributes(Landroidx/compose/ui/text/TextStyle;)Z +HSPLandroidx/compose/ui/text/TextStyle;->merge(Landroidx/compose/ui/text/ParagraphStyle;)Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/ui/text/TextStyle;->merge(Landroidx/compose/ui/text/TextStyle;)Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/ui/text/TextStyle;->toParagraphStyle()Landroidx/compose/ui/text/ParagraphStyle; +HSPLandroidx/compose/ui/text/TextStyle;->toSpanStyle()Landroidx/compose/ui/text/SpanStyle; +Landroidx/compose/ui/text/TextStyle$Companion; +HSPLandroidx/compose/ui/text/TextStyle$Companion;->()V +HSPLandroidx/compose/ui/text/TextStyle$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/TextStyle$Companion;->getDefault()Landroidx/compose/ui/text/TextStyle; +Landroidx/compose/ui/text/TextStyleKt; +HSPLandroidx/compose/ui/text/TextStyleKt;->access$createPlatformTextStyleInternal(Landroidx/compose/ui/text/PlatformSpanStyle;Landroidx/compose/ui/text/PlatformParagraphStyle;)Landroidx/compose/ui/text/PlatformTextStyle; +HSPLandroidx/compose/ui/text/TextStyleKt;->createPlatformTextStyleInternal(Landroidx/compose/ui/text/PlatformSpanStyle;Landroidx/compose/ui/text/PlatformParagraphStyle;)Landroidx/compose/ui/text/PlatformTextStyle; +HSPLandroidx/compose/ui/text/TextStyleKt;->resolveDefaults(Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/unit/LayoutDirection;)Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/ui/text/TextStyleKt;->resolveTextDirection-Yj3eThk(Landroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/text/style/TextDirection;)I +Landroidx/compose/ui/text/TextStyleKt$WhenMappings; +HSPLandroidx/compose/ui/text/TextStyleKt$WhenMappings;->()V +Landroidx/compose/ui/text/android/BoringLayoutFactory; +HSPLandroidx/compose/ui/text/android/BoringLayoutFactory;->()V +HSPLandroidx/compose/ui/text/android/BoringLayoutFactory;->()V +HSPLandroidx/compose/ui/text/android/BoringLayoutFactory;->create(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/BoringLayout$Metrics;Landroid/text/Layout$Alignment;ZZLandroid/text/TextUtils$TruncateAt;I)Landroid/text/BoringLayout; +HSPLandroidx/compose/ui/text/android/BoringLayoutFactory;->measure(Ljava/lang/CharSequence;Landroid/text/TextPaint;Landroid/text/TextDirectionHeuristic;)Landroid/text/BoringLayout$Metrics; +Landroidx/compose/ui/text/android/BoringLayoutFactory33; +HSPLandroidx/compose/ui/text/android/BoringLayoutFactory33;->()V +HSPLandroidx/compose/ui/text/android/BoringLayoutFactory33;->()V +HSPLandroidx/compose/ui/text/android/BoringLayoutFactory33;->create(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFLandroid/text/BoringLayout$Metrics;ZZLandroid/text/TextUtils$TruncateAt;I)Landroid/text/BoringLayout; +HSPLandroidx/compose/ui/text/android/BoringLayoutFactory33;->isBoring(Ljava/lang/CharSequence;Landroid/text/TextPaint;Landroid/text/TextDirectionHeuristic;)Landroid/text/BoringLayout$Metrics; +Landroidx/compose/ui/text/android/CharSequenceCharacterIterator; +HSPLandroidx/compose/ui/text/android/CharSequenceCharacterIterator;->(Ljava/lang/CharSequence;II)V +HSPLandroidx/compose/ui/text/android/CharSequenceCharacterIterator;->current()C +HSPLandroidx/compose/ui/text/android/CharSequenceCharacterIterator;->first()C +HSPLandroidx/compose/ui/text/android/CharSequenceCharacterIterator;->getBeginIndex()I +HSPLandroidx/compose/ui/text/android/CharSequenceCharacterIterator;->getEndIndex()I +HSPLandroidx/compose/ui/text/android/CharSequenceCharacterIterator;->getIndex()I +HSPLandroidx/compose/ui/text/android/CharSequenceCharacterIterator;->next()C +HSPLandroidx/compose/ui/text/android/CharSequenceCharacterIterator;->setIndex(I)C +Landroidx/compose/ui/text/android/LayoutCompatKt; +HSPLandroidx/compose/ui/text/android/LayoutCompatKt;->getLineForOffset(Landroid/text/Layout;IZ)I +Landroidx/compose/ui/text/android/LayoutHelper; +HSPLandroidx/compose/ui/text/android/LayoutHelper;->(Landroid/text/Layout;)V +HSPLandroidx/compose/ui/text/android/LayoutHelper;->getDownstreamHorizontal(IZ)F +HSPLandroidx/compose/ui/text/android/LayoutHelper;->getHorizontalPosition(IZZ)F +Landroidx/compose/ui/text/android/LayoutIntrinsics; +HSPLandroidx/compose/ui/text/android/LayoutIntrinsics;->(Ljava/lang/CharSequence;Landroid/text/TextPaint;I)V +HSPLandroidx/compose/ui/text/android/LayoutIntrinsics;->getBoringMetrics()Landroid/text/BoringLayout$Metrics; +HSPLandroidx/compose/ui/text/android/LayoutIntrinsics;->getMaxIntrinsicWidth()F +HSPLandroidx/compose/ui/text/android/LayoutIntrinsics;->getMinIntrinsicWidth()F +Landroidx/compose/ui/text/android/LayoutIntrinsicsKt; +HSPLandroidx/compose/ui/text/android/LayoutIntrinsicsKt;->$r8$lambda$DtXonrOPJPXM49GdHH_fq-Et3g0(Lkotlin/Pair;Lkotlin/Pair;)I +HSPLandroidx/compose/ui/text/android/LayoutIntrinsicsKt;->access$shouldIncreaseMaxIntrinsic(FLjava/lang/CharSequence;Landroid/text/TextPaint;)Z +HSPLandroidx/compose/ui/text/android/LayoutIntrinsicsKt;->minIntrinsicWidth$lambda$0(Lkotlin/Pair;Lkotlin/Pair;)I +HSPLandroidx/compose/ui/text/android/LayoutIntrinsicsKt;->minIntrinsicWidth(Ljava/lang/CharSequence;Landroid/text/TextPaint;)F +HSPLandroidx/compose/ui/text/android/LayoutIntrinsicsKt;->shouldIncreaseMaxIntrinsic(FLjava/lang/CharSequence;Landroid/text/TextPaint;)Z +Landroidx/compose/ui/text/android/LayoutIntrinsicsKt$$ExternalSyntheticLambda0; +HSPLandroidx/compose/ui/text/android/LayoutIntrinsicsKt$$ExternalSyntheticLambda0;->()V +HSPLandroidx/compose/ui/text/android/LayoutIntrinsicsKt$$ExternalSyntheticLambda0;->compare(Ljava/lang/Object;Ljava/lang/Object;)I +Landroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0; +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/RenderNode;)V +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/RenderNode;)Z +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/RenderNode;F)Z +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/RenderNode;I)Z +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/RenderNode;Landroid/graphics/Matrix;)V +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/RenderNode;Z)Z +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/text/LineBreakConfig$Builder;I)Landroid/graphics/text/LineBreakConfig$Builder; +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/view/WindowInsetsController;I)V +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/view/WindowInsetsController;Landroid/view/WindowInsetsController$OnControllableInsetsChangedListener;)V +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$10(Landroid/graphics/RenderNode;F)Z +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$11(Landroid/graphics/RenderNode;F)Z +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$2(Landroid/graphics/RenderNode;)Z +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$2(Landroid/graphics/RenderNode;F)Z +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$2(Landroid/graphics/RenderNode;I)Z +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$2(Landroid/graphics/RenderNode;Z)Z +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$3(Landroid/graphics/RenderNode;)I +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$3(Landroid/graphics/RenderNode;F)Z +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$3(Landroid/graphics/RenderNode;I)Z +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$4(Landroid/graphics/RenderNode;)I +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$4(Landroid/graphics/RenderNode;F)Z +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$5(Landroid/graphics/RenderNode;)F +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$5(Landroid/graphics/RenderNode;)I +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$5(Landroid/graphics/RenderNode;F)Z +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$6(Landroid/graphics/RenderNode;F)Z +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$7(Landroid/graphics/RenderNode;F)Z +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$8(Landroid/graphics/RenderNode;F)Z +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$9(Landroid/graphics/RenderNode;)F +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$9(Landroid/graphics/RenderNode;F)Z +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m()I +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m()Landroid/graphics/text/LineBreakConfig$Builder; +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m()V +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(ILandroid/graphics/BlendMode;)Landroid/graphics/BlendModeColorFilter; +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/content/res/Configuration;)I +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/Canvas;Landroid/graphics/RenderNode;)V +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/Paint;Landroid/graphics/BlendMode;)V +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)I +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)Landroid/graphics/RecordingCanvas; +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)V +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)Z +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;F)Z +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;I)Z +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;IIII)Z +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;Landroid/graphics/Outline;)Z +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;Landroid/graphics/RenderEffect;)Z +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;Z)Z +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;ZLandroid/graphics/Paint;)Z +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/text/LineBreakConfig$Builder;)Landroid/graphics/text/LineBreakConfig; +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/text/LineBreakConfig$Builder;I)Landroid/graphics/text/LineBreakConfig$Builder; +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/text/StaticLayout$Builder;Landroid/graphics/text/LineBreakConfig;)Landroid/text/StaticLayout$Builder; +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/text/StaticLayout$Builder;Z)Landroid/text/StaticLayout$Builder; +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;)Ljava/util/Map; +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;Landroid/graphics/Matrix;)V +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;Z)V +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/WindowInsetsController;I)V +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/WindowInsetsController;Landroid/view/WindowInsetsController$OnControllableInsetsChangedListener;)V +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFLandroid/text/BoringLayout$Metrics;ZLandroid/text/TextUtils$TruncateAt;IZ)Landroid/text/BoringLayout; +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Ljava/lang/CharSequence;Landroid/text/TextPaint;Landroid/text/TextDirectionHeuristic;ZLandroid/text/BoringLayout$Metrics;)Landroid/text/BoringLayout$Metrics; +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Ljava/lang/String;)Landroid/graphics/RenderNode; +Landroidx/compose/ui/text/android/SpannedExtensionsKt; +HSPLandroidx/compose/ui/text/android/SpannedExtensionsKt;->hasSpan(Landroid/text/Spanned;Ljava/lang/Class;)Z +Landroidx/compose/ui/text/android/StaticLayoutFactory; +HSPLandroidx/compose/ui/text/android/StaticLayoutFactory;->()V +HSPLandroidx/compose/ui/text/android/StaticLayoutFactory;->()V +HSPLandroidx/compose/ui/text/android/StaticLayoutFactory;->create(Ljava/lang/CharSequence;IILandroid/text/TextPaint;ILandroid/text/TextDirectionHeuristic;Landroid/text/Layout$Alignment;ILandroid/text/TextUtils$TruncateAt;IFFIZZIIII[I[I)Landroid/text/StaticLayout; +Landroidx/compose/ui/text/android/StaticLayoutFactory23; +HSPLandroidx/compose/ui/text/android/StaticLayoutFactory23;->()V +HSPLandroidx/compose/ui/text/android/StaticLayoutFactory23;->create(Landroidx/compose/ui/text/android/StaticLayoutParams;)Landroid/text/StaticLayout; +Landroidx/compose/ui/text/android/StaticLayoutFactory26; +HSPLandroidx/compose/ui/text/android/StaticLayoutFactory26;->()V +HSPLandroidx/compose/ui/text/android/StaticLayoutFactory26;->()V +HSPLandroidx/compose/ui/text/android/StaticLayoutFactory26;->setJustificationMode(Landroid/text/StaticLayout$Builder;I)V +Landroidx/compose/ui/text/android/StaticLayoutFactory28; +HSPLandroidx/compose/ui/text/android/StaticLayoutFactory28;->()V +HSPLandroidx/compose/ui/text/android/StaticLayoutFactory28;->()V +HSPLandroidx/compose/ui/text/android/StaticLayoutFactory28;->setUseLineSpacingFromFallbacks(Landroid/text/StaticLayout$Builder;Z)V +Landroidx/compose/ui/text/android/StaticLayoutFactory33; +HSPLandroidx/compose/ui/text/android/StaticLayoutFactory33;->()V +HSPLandroidx/compose/ui/text/android/StaticLayoutFactory33;->()V +HSPLandroidx/compose/ui/text/android/StaticLayoutFactory33;->setLineBreakConfig(Landroid/text/StaticLayout$Builder;II)V +Landroidx/compose/ui/text/android/StaticLayoutFactoryImpl; +Landroidx/compose/ui/text/android/StaticLayoutParams; +HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->(Ljava/lang/CharSequence;IILandroid/text/TextPaint;ILandroid/text/TextDirectionHeuristic;Landroid/text/Layout$Alignment;ILandroid/text/TextUtils$TruncateAt;IFFIZZIIII[I[I)V +HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getAlignment()Landroid/text/Layout$Alignment; +HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getBreakStrategy()I +HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getEllipsize()Landroid/text/TextUtils$TruncateAt; +HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getEllipsizedWidth()I +HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getEnd()I +HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getHyphenationFrequency()I +HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getIncludePadding()Z +HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getJustificationMode()I +HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getLeftIndents()[I +HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getLineBreakStyle()I +HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getLineBreakWordStyle()I +HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getLineSpacingExtra()F +HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getLineSpacingMultiplier()F +HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getMaxLines()I +HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getPaint()Landroid/text/TextPaint; +HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getRightIndents()[I +HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getStart()I +HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getText()Ljava/lang/CharSequence; +HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getTextDir()Landroid/text/TextDirectionHeuristic; +HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getUseFallbackLineSpacing()Z +HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getWidth()I +Landroidx/compose/ui/text/android/TextAlignmentAdapter; +HSPLandroidx/compose/ui/text/android/TextAlignmentAdapter;->()V +HSPLandroidx/compose/ui/text/android/TextAlignmentAdapter;->()V +HSPLandroidx/compose/ui/text/android/TextAlignmentAdapter;->get(I)Landroid/text/Layout$Alignment; +Landroidx/compose/ui/text/android/TextAndroidCanvas; +HSPLandroidx/compose/ui/text/android/TextAndroidCanvas;->()V +HSPLandroidx/compose/ui/text/android/TextAndroidCanvas;->drawText(Ljava/lang/String;FFLandroid/graphics/Paint;)V +HSPLandroidx/compose/ui/text/android/TextAndroidCanvas;->drawTextRun(Ljava/lang/CharSequence;IIIIFFZLandroid/graphics/Paint;)V +HSPLandroidx/compose/ui/text/android/TextAndroidCanvas;->getClipBounds(Landroid/graphics/Rect;)Z +HSPLandroidx/compose/ui/text/android/TextAndroidCanvas;->setCanvas(Landroid/graphics/Canvas;)V +Landroidx/compose/ui/text/android/TextLayout; +HSPLandroidx/compose/ui/text/android/TextLayout;->(Ljava/lang/CharSequence;FLandroid/text/TextPaint;ILandroid/text/TextUtils$TruncateAt;IFFZZIIIIII[I[ILandroidx/compose/ui/text/android/LayoutIntrinsics;)V +HSPLandroidx/compose/ui/text/android/TextLayout;->(Ljava/lang/CharSequence;FLandroid/text/TextPaint;ILandroid/text/TextUtils$TruncateAt;IFFZZIIIIII[I[ILandroidx/compose/ui/text/android/LayoutIntrinsics;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/android/TextLayout;->getBoundingBox(I)Landroid/graphics/RectF; +HSPLandroidx/compose/ui/text/android/TextLayout;->getDidExceedMaxLines()Z +HSPLandroidx/compose/ui/text/android/TextLayout;->getHeight()I +HSPLandroidx/compose/ui/text/android/TextLayout;->getHorizontalPadding(I)F +HSPLandroidx/compose/ui/text/android/TextLayout;->getIncludePadding()Z +HSPLandroidx/compose/ui/text/android/TextLayout;->getLayout()Landroid/text/Layout; +HSPLandroidx/compose/ui/text/android/TextLayout;->getLayoutHelper()Landroidx/compose/ui/text/android/LayoutHelper; +HSPLandroidx/compose/ui/text/android/TextLayout;->getLineBaseline(I)F +HSPLandroidx/compose/ui/text/android/TextLayout;->getLineBottom(I)F +HSPLandroidx/compose/ui/text/android/TextLayout;->getLineCount()I +HSPLandroidx/compose/ui/text/android/TextLayout;->getLineForOffset(I)I +HSPLandroidx/compose/ui/text/android/TextLayout;->getLineTop(I)F +HSPLandroidx/compose/ui/text/android/TextLayout;->getParagraphDirection(I)I +HSPLandroidx/compose/ui/text/android/TextLayout;->getPrimaryHorizontal$default(Landroidx/compose/ui/text/android/TextLayout;IZILjava/lang/Object;)F +HSPLandroidx/compose/ui/text/android/TextLayout;->getPrimaryHorizontal(IZ)F +HSPLandroidx/compose/ui/text/android/TextLayout;->getText()Ljava/lang/CharSequence; +HSPLandroidx/compose/ui/text/android/TextLayout;->paint(Landroid/graphics/Canvas;)V +Landroidx/compose/ui/text/android/TextLayout$layoutHelper$2; +HSPLandroidx/compose/ui/text/android/TextLayout$layoutHelper$2;->(Landroidx/compose/ui/text/android/TextLayout;)V +HSPLandroidx/compose/ui/text/android/TextLayout$layoutHelper$2;->invoke()Landroidx/compose/ui/text/android/LayoutHelper; +HSPLandroidx/compose/ui/text/android/TextLayout$layoutHelper$2;->invoke()Ljava/lang/Object; +Landroidx/compose/ui/text/android/TextLayoutKt; +HSPLandroidx/compose/ui/text/android/TextLayoutKt;->()V +HSPLandroidx/compose/ui/text/android/TextLayoutKt;->VerticalPaddings(II)J +HSPLandroidx/compose/ui/text/android/TextLayoutKt;->access$getLastLineMetrics(Landroidx/compose/ui/text/android/TextLayout;Landroid/text/TextPaint;Landroid/text/TextDirectionHeuristic;[Landroidx/compose/ui/text/android/style/LineHeightStyleSpan;)Landroid/graphics/Paint$FontMetricsInt; +HSPLandroidx/compose/ui/text/android/TextLayoutKt;->access$getLineHeightPaddings(Landroidx/compose/ui/text/android/TextLayout;[Landroidx/compose/ui/text/android/style/LineHeightStyleSpan;)J +HSPLandroidx/compose/ui/text/android/TextLayoutKt;->access$getLineHeightSpans(Landroidx/compose/ui/text/android/TextLayout;)[Landroidx/compose/ui/text/android/style/LineHeightStyleSpan; +HSPLandroidx/compose/ui/text/android/TextLayoutKt;->access$getSharedTextAndroidCanvas$p()Landroidx/compose/ui/text/android/TextAndroidCanvas; +HSPLandroidx/compose/ui/text/android/TextLayoutKt;->access$getVerticalPaddings(Landroidx/compose/ui/text/android/TextLayout;)J +HSPLandroidx/compose/ui/text/android/TextLayoutKt;->getLastLineMetrics(Landroidx/compose/ui/text/android/TextLayout;Landroid/text/TextPaint;Landroid/text/TextDirectionHeuristic;[Landroidx/compose/ui/text/android/style/LineHeightStyleSpan;)Landroid/graphics/Paint$FontMetricsInt; +HSPLandroidx/compose/ui/text/android/TextLayoutKt;->getLineHeightPaddings(Landroidx/compose/ui/text/android/TextLayout;[Landroidx/compose/ui/text/android/style/LineHeightStyleSpan;)J +HSPLandroidx/compose/ui/text/android/TextLayoutKt;->getLineHeightSpans(Landroidx/compose/ui/text/android/TextLayout;)[Landroidx/compose/ui/text/android/style/LineHeightStyleSpan; +HSPLandroidx/compose/ui/text/android/TextLayoutKt;->getTextDirectionHeuristic(I)Landroid/text/TextDirectionHeuristic; +HSPLandroidx/compose/ui/text/android/TextLayoutKt;->getVerticalPaddings(Landroidx/compose/ui/text/android/TextLayout;)J +HSPLandroidx/compose/ui/text/android/TextLayoutKt;->isLineEllipsized(Landroid/text/Layout;I)Z +Landroidx/compose/ui/text/android/VerticalPaddings; +HSPLandroidx/compose/ui/text/android/VerticalPaddings;->constructor-impl(J)J +HSPLandroidx/compose/ui/text/android/VerticalPaddings;->getBottomPadding-impl(J)I +HSPLandroidx/compose/ui/text/android/VerticalPaddings;->getTopPadding-impl(J)I +Landroidx/compose/ui/text/android/style/BaselineShiftSpan; +Landroidx/compose/ui/text/android/style/IndentationFixSpanKt; +HSPLandroidx/compose/ui/text/android/style/IndentationFixSpanKt;->getEllipsizedLeftPadding$default(Landroid/text/Layout;ILandroid/graphics/Paint;ILjava/lang/Object;)F +HSPLandroidx/compose/ui/text/android/style/IndentationFixSpanKt;->getEllipsizedLeftPadding(Landroid/text/Layout;ILandroid/graphics/Paint;)F +HSPLandroidx/compose/ui/text/android/style/IndentationFixSpanKt;->getEllipsizedRightPadding$default(Landroid/text/Layout;ILandroid/graphics/Paint;ILjava/lang/Object;)F +HSPLandroidx/compose/ui/text/android/style/IndentationFixSpanKt;->getEllipsizedRightPadding(Landroid/text/Layout;ILandroid/graphics/Paint;)F +Landroidx/compose/ui/text/android/style/LetterSpacingSpanEm; +Landroidx/compose/ui/text/android/style/LetterSpacingSpanPx; +Landroidx/compose/ui/text/android/style/LineHeightSpan; +HSPLandroidx/compose/ui/text/android/style/LineHeightSpan;->(F)V +HSPLandroidx/compose/ui/text/android/style/LineHeightSpan;->chooseHeight(Ljava/lang/CharSequence;IIIILandroid/graphics/Paint$FontMetricsInt;)V +Landroidx/compose/ui/text/android/style/LineHeightStyleSpan; +Landroidx/compose/ui/text/android/style/LineHeightStyleSpanKt; +HSPLandroidx/compose/ui/text/android/style/LineHeightStyleSpanKt;->lineHeight(Landroid/graphics/Paint$FontMetricsInt;)I +Landroidx/compose/ui/text/android/style/PlaceholderSpan; +Landroidx/compose/ui/text/android/style/TypefaceSpan; +HSPLandroidx/compose/ui/text/android/style/TypefaceSpan;->(Landroid/graphics/Typeface;)V +HSPLandroidx/compose/ui/text/android/style/TypefaceSpan;->updateDrawState(Landroid/text/TextPaint;)V +HSPLandroidx/compose/ui/text/android/style/TypefaceSpan;->updateMeasureState(Landroid/text/TextPaint;)V +HSPLandroidx/compose/ui/text/android/style/TypefaceSpan;->updateTypeface(Landroid/graphics/Paint;)V +Landroidx/compose/ui/text/caches/ContainerHelpersKt; +HSPLandroidx/compose/ui/text/caches/ContainerHelpersKt;->()V +Landroidx/compose/ui/text/caches/LruCache; +HSPLandroidx/compose/ui/text/caches/LruCache;->(I)V +HSPLandroidx/compose/ui/text/caches/LruCache;->access$getMonitor$p(Landroidx/compose/ui/text/caches/LruCache;)Landroidx/compose/ui/text/platform/SynchronizedObject; +HSPLandroidx/compose/ui/text/caches/LruCache;->create(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/ui/text/caches/LruCache;->get(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/ui/text/caches/LruCache;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/ui/text/caches/LruCache;->safeSizeOf(Ljava/lang/Object;Ljava/lang/Object;)I +HSPLandroidx/compose/ui/text/caches/LruCache;->size()I +HSPLandroidx/compose/ui/text/caches/LruCache;->sizeOf(Ljava/lang/Object;Ljava/lang/Object;)I +HSPLandroidx/compose/ui/text/caches/LruCache;->trimToSize(I)V +Landroidx/compose/ui/text/caches/SimpleArrayMap; +HSPLandroidx/compose/ui/text/caches/SimpleArrayMap;->(I)V +HSPLandroidx/compose/ui/text/caches/SimpleArrayMap;->(IILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/caches/SimpleArrayMap;->get(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/ui/text/caches/SimpleArrayMap;->indexOf(Ljava/lang/Object;I)I +HSPLandroidx/compose/ui/text/caches/SimpleArrayMap;->indexOfKey(Ljava/lang/Object;)I +Landroidx/compose/ui/text/font/AndroidFont; +Landroidx/compose/ui/text/font/AndroidFontLoader; +HSPLandroidx/compose/ui/text/font/AndroidFontLoader;->(Landroid/content/Context;)V +HSPLandroidx/compose/ui/text/font/AndroidFontLoader;->getCacheKey()Ljava/lang/Object; +HSPLandroidx/compose/ui/text/font/AndroidFontLoader;->loadBlocking(Landroidx/compose/ui/text/font/Font;)Landroid/graphics/Typeface; +HSPLandroidx/compose/ui/text/font/AndroidFontLoader;->loadBlocking(Landroidx/compose/ui/text/font/Font;)Ljava/lang/Object; +Landroidx/compose/ui/text/font/AndroidFontLoader_androidKt; +HSPLandroidx/compose/ui/text/font/AndroidFontLoader_androidKt;->access$load(Landroidx/compose/ui/text/font/ResourceFont;Landroid/content/Context;)Landroid/graphics/Typeface; +HSPLandroidx/compose/ui/text/font/AndroidFontLoader_androidKt;->load(Landroidx/compose/ui/text/font/ResourceFont;Landroid/content/Context;)Landroid/graphics/Typeface; +Landroidx/compose/ui/text/font/AndroidFontResolveInterceptor; +HSPLandroidx/compose/ui/text/font/AndroidFontResolveInterceptor;->(I)V +HSPLandroidx/compose/ui/text/font/AndroidFontResolveInterceptor;->interceptFontWeight(Landroidx/compose/ui/text/font/FontWeight;)Landroidx/compose/ui/text/font/FontWeight; +Landroidx/compose/ui/text/font/AndroidFontResolveInterceptor_androidKt; +HSPLandroidx/compose/ui/text/font/AndroidFontResolveInterceptor_androidKt;->AndroidFontResolveInterceptor(Landroid/content/Context;)Landroidx/compose/ui/text/font/AndroidFontResolveInterceptor; +Landroidx/compose/ui/text/font/AndroidFontUtils_androidKt; +HSPLandroidx/compose/ui/text/font/AndroidFontUtils_androidKt;->getAndroidBold(Landroidx/compose/ui/text/font/FontWeight$Companion;)Landroidx/compose/ui/text/font/FontWeight; +HSPLandroidx/compose/ui/text/font/AndroidFontUtils_androidKt;->getAndroidTypefaceStyle(ZZ)I +HSPLandroidx/compose/ui/text/font/AndroidFontUtils_androidKt;->getAndroidTypefaceStyle-FO1MlWM(Landroidx/compose/ui/text/font/FontWeight;I)I +Landroidx/compose/ui/text/font/AsyncTypefaceCache; +HSPLandroidx/compose/ui/text/font/AsyncTypefaceCache;->()V +HSPLandroidx/compose/ui/text/font/AsyncTypefaceCache;->access$getCacheLock$p(Landroidx/compose/ui/text/font/AsyncTypefaceCache;)Landroidx/compose/ui/text/platform/SynchronizedObject; +HSPLandroidx/compose/ui/text/font/AsyncTypefaceCache;->access$getPermanentCache$p(Landroidx/compose/ui/text/font/AsyncTypefaceCache;)Landroidx/compose/ui/text/caches/SimpleArrayMap; +HSPLandroidx/compose/ui/text/font/AsyncTypefaceCache;->access$getResultCache$p(Landroidx/compose/ui/text/font/AsyncTypefaceCache;)Landroidx/compose/ui/text/caches/LruCache; +HSPLandroidx/compose/ui/text/font/AsyncTypefaceCache;->put$default(Landroidx/compose/ui/text/font/AsyncTypefaceCache;Landroidx/compose/ui/text/font/Font;Landroidx/compose/ui/text/font/PlatformFontLoader;Ljava/lang/Object;ZILjava/lang/Object;)V +HSPLandroidx/compose/ui/text/font/AsyncTypefaceCache;->put(Landroidx/compose/ui/text/font/Font;Landroidx/compose/ui/text/font/PlatformFontLoader;Ljava/lang/Object;Z)V +Landroidx/compose/ui/text/font/AsyncTypefaceCache$AsyncTypefaceResult; +HSPLandroidx/compose/ui/text/font/AsyncTypefaceCache$AsyncTypefaceResult;->(Ljava/lang/Object;)V +HSPLandroidx/compose/ui/text/font/AsyncTypefaceCache$AsyncTypefaceResult;->box-impl(Ljava/lang/Object;)Landroidx/compose/ui/text/font/AsyncTypefaceCache$AsyncTypefaceResult; +HSPLandroidx/compose/ui/text/font/AsyncTypefaceCache$AsyncTypefaceResult;->constructor-impl(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/text/font/AsyncTypefaceCache$Key; +HSPLandroidx/compose/ui/text/font/AsyncTypefaceCache$Key;->(Landroidx/compose/ui/text/font/Font;Ljava/lang/Object;)V +HSPLandroidx/compose/ui/text/font/AsyncTypefaceCache$Key;->hashCode()I +Landroidx/compose/ui/text/font/DefaultFontFamily; +HSPLandroidx/compose/ui/text/font/DefaultFontFamily;->()V +Landroidx/compose/ui/text/font/FileBasedFontFamily; +HSPLandroidx/compose/ui/text/font/FileBasedFontFamily;->()V +HSPLandroidx/compose/ui/text/font/FileBasedFontFamily;->()V +HSPLandroidx/compose/ui/text/font/FileBasedFontFamily;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/text/font/Font; +HSPLandroidx/compose/ui/text/font/Font;->()V +Landroidx/compose/ui/text/font/Font$Companion; +HSPLandroidx/compose/ui/text/font/Font$Companion;->()V +HSPLandroidx/compose/ui/text/font/Font$Companion;->()V +Landroidx/compose/ui/text/font/Font$ResourceLoader; +Landroidx/compose/ui/text/font/FontFamily; +HSPLandroidx/compose/ui/text/font/FontFamily;->()V +HSPLandroidx/compose/ui/text/font/FontFamily;->(Z)V +HSPLandroidx/compose/ui/text/font/FontFamily;->(ZLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/font/FontFamily;->access$getDefault$cp()Landroidx/compose/ui/text/font/SystemFontFamily; +HSPLandroidx/compose/ui/text/font/FontFamily;->access$getSansSerif$cp()Landroidx/compose/ui/text/font/GenericFontFamily; +Landroidx/compose/ui/text/font/FontFamily$Companion; +HSPLandroidx/compose/ui/text/font/FontFamily$Companion;->()V +HSPLandroidx/compose/ui/text/font/FontFamily$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/font/FontFamily$Companion;->getDefault()Landroidx/compose/ui/text/font/SystemFontFamily; +HSPLandroidx/compose/ui/text/font/FontFamily$Companion;->getSansSerif()Landroidx/compose/ui/text/font/GenericFontFamily; +Landroidx/compose/ui/text/font/FontFamily$Resolver; +Landroidx/compose/ui/text/font/FontFamilyKt; +HSPLandroidx/compose/ui/text/font/FontFamilyKt;->FontFamily([Landroidx/compose/ui/text/font/Font;)Landroidx/compose/ui/text/font/FontFamily; +Landroidx/compose/ui/text/font/FontFamilyResolverImpl; +HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;->(Landroidx/compose/ui/text/font/PlatformFontLoader;Landroidx/compose/ui/text/font/PlatformResolveInterceptor;Landroidx/compose/ui/text/font/TypefaceRequestCache;Landroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter;Landroidx/compose/ui/text/font/PlatformFontFamilyTypefaceAdapter;)V +HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;->(Landroidx/compose/ui/text/font/PlatformFontLoader;Landroidx/compose/ui/text/font/PlatformResolveInterceptor;Landroidx/compose/ui/text/font/TypefaceRequestCache;Landroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter;Landroidx/compose/ui/text/font/PlatformFontFamilyTypefaceAdapter;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;->access$getCreateDefaultTypeface$p(Landroidx/compose/ui/text/font/FontFamilyResolverImpl;)Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;->access$getFontListFontFamilyTypefaceAdapter$p(Landroidx/compose/ui/text/font/FontFamilyResolverImpl;)Landroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter; +HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;->access$getPlatformFamilyTypefaceAdapter$p(Landroidx/compose/ui/text/font/FontFamilyResolverImpl;)Landroidx/compose/ui/text/font/PlatformFontFamilyTypefaceAdapter; +HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;->getPlatformFontLoader$ui_text_release()Landroidx/compose/ui/text/font/PlatformFontLoader; +HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;->resolve(Landroidx/compose/ui/text/font/TypefaceRequest;)Landroidx/compose/runtime/State; +HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;->resolve-DPcqOEQ(Landroidx/compose/ui/text/font/FontFamily;Landroidx/compose/ui/text/font/FontWeight;II)Landroidx/compose/runtime/State; +Landroidx/compose/ui/text/font/FontFamilyResolverImpl$createDefaultTypeface$1; +HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl$createDefaultTypeface$1;->(Landroidx/compose/ui/text/font/FontFamilyResolverImpl;)V +Landroidx/compose/ui/text/font/FontFamilyResolverImpl$resolve$result$1; +HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl$resolve$result$1;->(Landroidx/compose/ui/text/font/FontFamilyResolverImpl;Landroidx/compose/ui/text/font/TypefaceRequest;)V +HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl$resolve$result$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl$resolve$result$1;->invoke(Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/text/font/TypefaceResult; +Landroidx/compose/ui/text/font/FontFamilyResolverKt; +HSPLandroidx/compose/ui/text/font/FontFamilyResolverKt;->()V +HSPLandroidx/compose/ui/text/font/FontFamilyResolverKt;->getGlobalAsyncTypefaceCache()Landroidx/compose/ui/text/font/AsyncTypefaceCache; +HSPLandroidx/compose/ui/text/font/FontFamilyResolverKt;->getGlobalTypefaceRequestCache()Landroidx/compose/ui/text/font/TypefaceRequestCache; +Landroidx/compose/ui/text/font/FontFamilyResolver_androidKt; +HSPLandroidx/compose/ui/text/font/FontFamilyResolver_androidKt;->createFontFamilyResolver(Landroid/content/Context;)Landroidx/compose/ui/text/font/FontFamily$Resolver; +Landroidx/compose/ui/text/font/FontFamilyTypefaceAdapter; +Landroidx/compose/ui/text/font/FontKt; +HSPLandroidx/compose/ui/text/font/FontKt;->Font-YpTlLL0$default(ILandroidx/compose/ui/text/font/FontWeight;IIILjava/lang/Object;)Landroidx/compose/ui/text/font/Font; +HSPLandroidx/compose/ui/text/font/FontKt;->Font-YpTlLL0(ILandroidx/compose/ui/text/font/FontWeight;II)Landroidx/compose/ui/text/font/Font; +Landroidx/compose/ui/text/font/FontListFontFamily; +HSPLandroidx/compose/ui/text/font/FontListFontFamily;->()V +HSPLandroidx/compose/ui/text/font/FontListFontFamily;->(Ljava/util/List;)V +HSPLandroidx/compose/ui/text/font/FontListFontFamily;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/text/font/FontListFontFamily;->getFonts()Ljava/util/List; +HSPLandroidx/compose/ui/text/font/FontListFontFamily;->hashCode()I +Landroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter; +HSPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter;->()V +HSPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter;->(Landroidx/compose/ui/text/font/AsyncTypefaceCache;Lkotlin/coroutines/CoroutineContext;)V +HSPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter;->(Landroidx/compose/ui/text/font/AsyncTypefaceCache;Lkotlin/coroutines/CoroutineContext;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter;->resolve(Landroidx/compose/ui/text/font/TypefaceRequest;Landroidx/compose/ui/text/font/PlatformFontLoader;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/text/font/TypefaceResult; +Landroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter$Companion; +HSPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter$Companion;->()V +HSPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter$special$$inlined$CoroutineExceptionHandler$1; +HSPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter$special$$inlined$CoroutineExceptionHandler$1;->(Lkotlinx/coroutines/CoroutineExceptionHandler$Key;)V +Landroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapterKt; +HSPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapterKt;->access$firstImmediatelyAvailable(Ljava/util/List;Landroidx/compose/ui/text/font/TypefaceRequest;Landroidx/compose/ui/text/font/AsyncTypefaceCache;Landroidx/compose/ui/text/font/PlatformFontLoader;Lkotlin/jvm/functions/Function1;)Lkotlin/Pair; +HSPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapterKt;->firstImmediatelyAvailable(Ljava/util/List;Landroidx/compose/ui/text/font/TypefaceRequest;Landroidx/compose/ui/text/font/AsyncTypefaceCache;Landroidx/compose/ui/text/font/PlatformFontLoader;Lkotlin/jvm/functions/Function1;)Lkotlin/Pair; +Landroidx/compose/ui/text/font/FontLoadingStrategy; +HSPLandroidx/compose/ui/text/font/FontLoadingStrategy;->()V +HSPLandroidx/compose/ui/text/font/FontLoadingStrategy;->access$getBlocking$cp()I +HSPLandroidx/compose/ui/text/font/FontLoadingStrategy;->constructor-impl(I)I +HSPLandroidx/compose/ui/text/font/FontLoadingStrategy;->equals-impl0(II)Z +HSPLandroidx/compose/ui/text/font/FontLoadingStrategy;->hashCode-impl(I)I +Landroidx/compose/ui/text/font/FontLoadingStrategy$Companion; +HSPLandroidx/compose/ui/text/font/FontLoadingStrategy$Companion;->()V +HSPLandroidx/compose/ui/text/font/FontLoadingStrategy$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/font/FontLoadingStrategy$Companion;->getBlocking-PKNRLFQ()I +Landroidx/compose/ui/text/font/FontMatcher; +HSPLandroidx/compose/ui/text/font/FontMatcher;->()V +HSPLandroidx/compose/ui/text/font/FontMatcher;->matchFont-RetOiIg(Ljava/util/List;Landroidx/compose/ui/text/font/FontWeight;I)Ljava/util/List; +Landroidx/compose/ui/text/font/FontStyle; +HSPLandroidx/compose/ui/text/font/FontStyle;->()V +HSPLandroidx/compose/ui/text/font/FontStyle;->(I)V +HSPLandroidx/compose/ui/text/font/FontStyle;->access$getItalic$cp()I +HSPLandroidx/compose/ui/text/font/FontStyle;->access$getNormal$cp()I +HSPLandroidx/compose/ui/text/font/FontStyle;->box-impl(I)Landroidx/compose/ui/text/font/FontStyle; +HSPLandroidx/compose/ui/text/font/FontStyle;->constructor-impl(I)I +HSPLandroidx/compose/ui/text/font/FontStyle;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/text/font/FontStyle;->equals-impl(ILjava/lang/Object;)Z +HSPLandroidx/compose/ui/text/font/FontStyle;->equals-impl0(II)Z +HSPLandroidx/compose/ui/text/font/FontStyle;->hashCode-impl(I)I +HSPLandroidx/compose/ui/text/font/FontStyle;->unbox-impl()I +Landroidx/compose/ui/text/font/FontStyle$Companion; +HSPLandroidx/compose/ui/text/font/FontStyle$Companion;->()V +HSPLandroidx/compose/ui/text/font/FontStyle$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/font/FontStyle$Companion;->getItalic-_-LCdwA()I +HSPLandroidx/compose/ui/text/font/FontStyle$Companion;->getNormal-_-LCdwA()I +Landroidx/compose/ui/text/font/FontSynthesis; +HSPLandroidx/compose/ui/text/font/FontSynthesis;->()V +HSPLandroidx/compose/ui/text/font/FontSynthesis;->(I)V +HSPLandroidx/compose/ui/text/font/FontSynthesis;->access$getAll$cp()I +HSPLandroidx/compose/ui/text/font/FontSynthesis;->box-impl(I)Landroidx/compose/ui/text/font/FontSynthesis; +HSPLandroidx/compose/ui/text/font/FontSynthesis;->constructor-impl(I)I +HSPLandroidx/compose/ui/text/font/FontSynthesis;->equals-impl0(II)Z +HSPLandroidx/compose/ui/text/font/FontSynthesis;->hashCode-impl(I)I +HSPLandroidx/compose/ui/text/font/FontSynthesis;->isStyleOn-impl$ui_text_release(I)Z +HSPLandroidx/compose/ui/text/font/FontSynthesis;->isWeightOn-impl$ui_text_release(I)Z +HSPLandroidx/compose/ui/text/font/FontSynthesis;->unbox-impl()I +Landroidx/compose/ui/text/font/FontSynthesis$Companion; +HSPLandroidx/compose/ui/text/font/FontSynthesis$Companion;->()V +HSPLandroidx/compose/ui/text/font/FontSynthesis$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/font/FontSynthesis$Companion;->getAll-GVVA2EU()I +Landroidx/compose/ui/text/font/FontSynthesis_androidKt; +HSPLandroidx/compose/ui/text/font/FontSynthesis_androidKt;->synthesizeTypeface-FxwP2eA(ILjava/lang/Object;Landroidx/compose/ui/text/font/Font;Landroidx/compose/ui/text/font/FontWeight;I)Ljava/lang/Object; +Landroidx/compose/ui/text/font/FontVariation$Setting; +Landroidx/compose/ui/text/font/FontVariation$Settings; +HSPLandroidx/compose/ui/text/font/FontVariation$Settings;->()V +HSPLandroidx/compose/ui/text/font/FontVariation$Settings;->([Landroidx/compose/ui/text/font/FontVariation$Setting;)V +HSPLandroidx/compose/ui/text/font/FontVariation$Settings;->getSettings()Ljava/util/List; +HSPLandroidx/compose/ui/text/font/FontVariation$Settings;->hashCode()I +Landroidx/compose/ui/text/font/FontWeight; +HSPLandroidx/compose/ui/text/font/FontWeight;->()V +HSPLandroidx/compose/ui/text/font/FontWeight;->(I)V +HSPLandroidx/compose/ui/text/font/FontWeight;->access$getBold$cp()Landroidx/compose/ui/text/font/FontWeight; +HSPLandroidx/compose/ui/text/font/FontWeight;->access$getLight$cp()Landroidx/compose/ui/text/font/FontWeight; +HSPLandroidx/compose/ui/text/font/FontWeight;->access$getMedium$cp()Landroidx/compose/ui/text/font/FontWeight; +HSPLandroidx/compose/ui/text/font/FontWeight;->access$getNormal$cp()Landroidx/compose/ui/text/font/FontWeight; +HSPLandroidx/compose/ui/text/font/FontWeight;->access$getW600$cp()Landroidx/compose/ui/text/font/FontWeight; +HSPLandroidx/compose/ui/text/font/FontWeight;->compareTo(Landroidx/compose/ui/text/font/FontWeight;)I +HSPLandroidx/compose/ui/text/font/FontWeight;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/text/font/FontWeight;->getWeight()I +HSPLandroidx/compose/ui/text/font/FontWeight;->hashCode()I +Landroidx/compose/ui/text/font/FontWeight$Companion; +HSPLandroidx/compose/ui/text/font/FontWeight$Companion;->()V +HSPLandroidx/compose/ui/text/font/FontWeight$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/font/FontWeight$Companion;->getBold()Landroidx/compose/ui/text/font/FontWeight; +HSPLandroidx/compose/ui/text/font/FontWeight$Companion;->getLight()Landroidx/compose/ui/text/font/FontWeight; +HSPLandroidx/compose/ui/text/font/FontWeight$Companion;->getMedium()Landroidx/compose/ui/text/font/FontWeight; +HSPLandroidx/compose/ui/text/font/FontWeight$Companion;->getNormal()Landroidx/compose/ui/text/font/FontWeight; +HSPLandroidx/compose/ui/text/font/FontWeight$Companion;->getW600()Landroidx/compose/ui/text/font/FontWeight; +Landroidx/compose/ui/text/font/GenericFontFamily; +HSPLandroidx/compose/ui/text/font/GenericFontFamily;->()V +HSPLandroidx/compose/ui/text/font/GenericFontFamily;->(Ljava/lang/String;Ljava/lang/String;)V +HSPLandroidx/compose/ui/text/font/GenericFontFamily;->getName()Ljava/lang/String; +Landroidx/compose/ui/text/font/PlatformFontFamilyTypefaceAdapter; +HSPLandroidx/compose/ui/text/font/PlatformFontFamilyTypefaceAdapter;->()V +HSPLandroidx/compose/ui/text/font/PlatformFontFamilyTypefaceAdapter;->resolve(Landroidx/compose/ui/text/font/TypefaceRequest;Landroidx/compose/ui/text/font/PlatformFontLoader;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/text/font/TypefaceResult; +Landroidx/compose/ui/text/font/PlatformFontLoader; +Landroidx/compose/ui/text/font/PlatformResolveInterceptor; +HSPLandroidx/compose/ui/text/font/PlatformResolveInterceptor;->()V +HSPLandroidx/compose/ui/text/font/PlatformResolveInterceptor;->interceptFontFamily(Landroidx/compose/ui/text/font/FontFamily;)Landroidx/compose/ui/text/font/FontFamily; +HSPLandroidx/compose/ui/text/font/PlatformResolveInterceptor;->interceptFontStyle-T2F_aPo(I)I +HSPLandroidx/compose/ui/text/font/PlatformResolveInterceptor;->interceptFontSynthesis-Mscr08Y(I)I +Landroidx/compose/ui/text/font/PlatformResolveInterceptor$Companion; +HSPLandroidx/compose/ui/text/font/PlatformResolveInterceptor$Companion;->()V +HSPLandroidx/compose/ui/text/font/PlatformResolveInterceptor$Companion;->()V +Landroidx/compose/ui/text/font/PlatformResolveInterceptor$Companion$Default$1; +HSPLandroidx/compose/ui/text/font/PlatformResolveInterceptor$Companion$Default$1;->()V +Landroidx/compose/ui/text/font/PlatformTypefaces; +Landroidx/compose/ui/text/font/PlatformTypefacesApi28; +HSPLandroidx/compose/ui/text/font/PlatformTypefacesApi28;->()V +HSPLandroidx/compose/ui/text/font/PlatformTypefacesApi28;->createAndroidTypefaceApi28-RetOiIg(Ljava/lang/String;Landroidx/compose/ui/text/font/FontWeight;I)Landroid/graphics/Typeface; +HSPLandroidx/compose/ui/text/font/PlatformTypefacesApi28;->createDefault-FO1MlWM(Landroidx/compose/ui/text/font/FontWeight;I)Landroid/graphics/Typeface; +HSPLandroidx/compose/ui/text/font/PlatformTypefacesApi28;->createNamed-RetOiIg(Landroidx/compose/ui/text/font/GenericFontFamily;Landroidx/compose/ui/text/font/FontWeight;I)Landroid/graphics/Typeface; +Landroidx/compose/ui/text/font/PlatformTypefacesKt; +HSPLandroidx/compose/ui/text/font/PlatformTypefacesKt;->PlatformTypefaces()Landroidx/compose/ui/text/font/PlatformTypefaces; +HSPLandroidx/compose/ui/text/font/PlatformTypefacesKt;->setFontVariationSettings(Landroid/graphics/Typeface;Landroidx/compose/ui/text/font/FontVariation$Settings;Landroid/content/Context;)Landroid/graphics/Typeface; +Landroidx/compose/ui/text/font/ResourceFont; +HSPLandroidx/compose/ui/text/font/ResourceFont;->()V +HSPLandroidx/compose/ui/text/font/ResourceFont;->(ILandroidx/compose/ui/text/font/FontWeight;ILandroidx/compose/ui/text/font/FontVariation$Settings;I)V +HSPLandroidx/compose/ui/text/font/ResourceFont;->(ILandroidx/compose/ui/text/font/FontWeight;ILandroidx/compose/ui/text/font/FontVariation$Settings;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/font/ResourceFont;->getLoadingStrategy-PKNRLFQ()I +HSPLandroidx/compose/ui/text/font/ResourceFont;->getResId()I +HSPLandroidx/compose/ui/text/font/ResourceFont;->getStyle-_-LCdwA()I +HSPLandroidx/compose/ui/text/font/ResourceFont;->getVariationSettings()Landroidx/compose/ui/text/font/FontVariation$Settings; +HSPLandroidx/compose/ui/text/font/ResourceFont;->getWeight()Landroidx/compose/ui/text/font/FontWeight; +HSPLandroidx/compose/ui/text/font/ResourceFont;->hashCode()I +Landroidx/compose/ui/text/font/ResourceFontHelper; +HSPLandroidx/compose/ui/text/font/ResourceFontHelper;->()V +HSPLandroidx/compose/ui/text/font/ResourceFontHelper;->()V +HSPLandroidx/compose/ui/text/font/ResourceFontHelper;->load(Landroid/content/Context;Landroidx/compose/ui/text/font/ResourceFont;)Landroid/graphics/Typeface; +Landroidx/compose/ui/text/font/SystemFontFamily; +HSPLandroidx/compose/ui/text/font/SystemFontFamily;->()V +HSPLandroidx/compose/ui/text/font/SystemFontFamily;->()V +HSPLandroidx/compose/ui/text/font/SystemFontFamily;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/text/font/TypefaceCompatApi26; +HSPLandroidx/compose/ui/text/font/TypefaceCompatApi26;->()V +HSPLandroidx/compose/ui/text/font/TypefaceCompatApi26;->()V +HSPLandroidx/compose/ui/text/font/TypefaceCompatApi26;->setFontVariationSettings(Landroid/graphics/Typeface;Landroidx/compose/ui/text/font/FontVariation$Settings;Landroid/content/Context;)Landroid/graphics/Typeface; +Landroidx/compose/ui/text/font/TypefaceRequest; +HSPLandroidx/compose/ui/text/font/TypefaceRequest;->(Landroidx/compose/ui/text/font/FontFamily;Landroidx/compose/ui/text/font/FontWeight;IILjava/lang/Object;)V +HSPLandroidx/compose/ui/text/font/TypefaceRequest;->(Landroidx/compose/ui/text/font/FontFamily;Landroidx/compose/ui/text/font/FontWeight;IILjava/lang/Object;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/font/TypefaceRequest;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/text/font/TypefaceRequest;->getFontFamily()Landroidx/compose/ui/text/font/FontFamily; +HSPLandroidx/compose/ui/text/font/TypefaceRequest;->getFontStyle-_-LCdwA()I +HSPLandroidx/compose/ui/text/font/TypefaceRequest;->getFontSynthesis-GVVA2EU()I +HSPLandroidx/compose/ui/text/font/TypefaceRequest;->getFontWeight()Landroidx/compose/ui/text/font/FontWeight; +HSPLandroidx/compose/ui/text/font/TypefaceRequest;->hashCode()I +Landroidx/compose/ui/text/font/TypefaceRequestCache; +HSPLandroidx/compose/ui/text/font/TypefaceRequestCache;->()V +HSPLandroidx/compose/ui/text/font/TypefaceRequestCache;->runCached(Landroidx/compose/ui/text/font/TypefaceRequest;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/State; +Landroidx/compose/ui/text/font/TypefaceRequestCache$runCached$currentTypefaceResult$1; +HSPLandroidx/compose/ui/text/font/TypefaceRequestCache$runCached$currentTypefaceResult$1;->(Landroidx/compose/ui/text/font/TypefaceRequestCache;Landroidx/compose/ui/text/font/TypefaceRequest;)V +Landroidx/compose/ui/text/font/TypefaceResult; +Landroidx/compose/ui/text/font/TypefaceResult$Immutable; +HSPLandroidx/compose/ui/text/font/TypefaceResult$Immutable;->()V +HSPLandroidx/compose/ui/text/font/TypefaceResult$Immutable;->(Ljava/lang/Object;Z)V +HSPLandroidx/compose/ui/text/font/TypefaceResult$Immutable;->(Ljava/lang/Object;ZILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/font/TypefaceResult$Immutable;->getCacheable()Z +HSPLandroidx/compose/ui/text/font/TypefaceResult$Immutable;->getValue()Ljava/lang/Object; +Landroidx/compose/ui/text/input/AndroidTextInputServicePlugin; +HSPLandroidx/compose/ui/text/input/AndroidTextInputServicePlugin;->()V +HSPLandroidx/compose/ui/text/input/AndroidTextInputServicePlugin;->()V +HSPLandroidx/compose/ui/text/input/AndroidTextInputServicePlugin;->createAdapter(Landroidx/compose/ui/text/input/PlatformTextInput;Landroid/view/View;)Landroidx/compose/ui/text/input/AndroidTextInputServicePlugin$Adapter; +HSPLandroidx/compose/ui/text/input/AndroidTextInputServicePlugin;->createAdapter(Landroidx/compose/ui/text/input/PlatformTextInput;Landroid/view/View;)Landroidx/compose/ui/text/input/PlatformTextInputAdapter; +Landroidx/compose/ui/text/input/AndroidTextInputServicePlugin$Adapter; +HSPLandroidx/compose/ui/text/input/AndroidTextInputServicePlugin$Adapter;->()V +HSPLandroidx/compose/ui/text/input/AndroidTextInputServicePlugin$Adapter;->(Landroidx/compose/ui/text/input/TextInputService;Landroidx/compose/ui/text/input/TextInputServiceAndroid;)V +HSPLandroidx/compose/ui/text/input/AndroidTextInputServicePlugin$Adapter;->createInputConnection(Landroid/view/inputmethod/EditorInfo;)Landroid/view/inputmethod/InputConnection; +HSPLandroidx/compose/ui/text/input/AndroidTextInputServicePlugin$Adapter;->getService()Landroidx/compose/ui/text/input/TextInputService; +Landroidx/compose/ui/text/input/CommitTextCommand; +HSPLandroidx/compose/ui/text/input/CommitTextCommand;->()V +HSPLandroidx/compose/ui/text/input/CommitTextCommand;->(Landroidx/compose/ui/text/AnnotatedString;I)V +HSPLandroidx/compose/ui/text/input/CommitTextCommand;->applyTo(Landroidx/compose/ui/text/input/EditingBuffer;)V +HSPLandroidx/compose/ui/text/input/CommitTextCommand;->getText()Ljava/lang/String; +Landroidx/compose/ui/text/input/DeleteAllCommand; +HSPLandroidx/compose/ui/text/input/DeleteAllCommand;->()V +HSPLandroidx/compose/ui/text/input/DeleteAllCommand;->()V +HSPLandroidx/compose/ui/text/input/DeleteAllCommand;->applyTo(Landroidx/compose/ui/text/input/EditingBuffer;)V +Landroidx/compose/ui/text/input/EditCommand; +Landroidx/compose/ui/text/input/EditProcessor; +HSPLandroidx/compose/ui/text/input/EditProcessor;->()V +HSPLandroidx/compose/ui/text/input/EditProcessor;->()V +HSPLandroidx/compose/ui/text/input/EditProcessor;->apply(Ljava/util/List;)Landroidx/compose/ui/text/input/TextFieldValue; +HSPLandroidx/compose/ui/text/input/EditProcessor;->reset(Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/ui/text/input/TextInputSession;)V +HSPLandroidx/compose/ui/text/input/EditProcessor;->toTextFieldValue()Landroidx/compose/ui/text/input/TextFieldValue; +Landroidx/compose/ui/text/input/EditingBuffer; +HSPLandroidx/compose/ui/text/input/EditingBuffer;->()V +HSPLandroidx/compose/ui/text/input/EditingBuffer;->(Landroidx/compose/ui/text/AnnotatedString;J)V +HSPLandroidx/compose/ui/text/input/EditingBuffer;->(Landroidx/compose/ui/text/AnnotatedString;JLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/input/EditingBuffer;->commitComposition$ui_text_release()V +HSPLandroidx/compose/ui/text/input/EditingBuffer;->getComposition-MzsxiRA$ui_text_release()Landroidx/compose/ui/text/TextRange; +HSPLandroidx/compose/ui/text/input/EditingBuffer;->getCursor$ui_text_release()I +HSPLandroidx/compose/ui/text/input/EditingBuffer;->getLength$ui_text_release()I +HSPLandroidx/compose/ui/text/input/EditingBuffer;->getSelection-d9O1mEE$ui_text_release()J +HSPLandroidx/compose/ui/text/input/EditingBuffer;->getSelectionEnd$ui_text_release()I +HSPLandroidx/compose/ui/text/input/EditingBuffer;->getSelectionStart$ui_text_release()I +HSPLandroidx/compose/ui/text/input/EditingBuffer;->hasComposition$ui_text_release()Z +HSPLandroidx/compose/ui/text/input/EditingBuffer;->replace$ui_text_release(IILjava/lang/String;)V +HSPLandroidx/compose/ui/text/input/EditingBuffer;->setCursor$ui_text_release(I)V +HSPLandroidx/compose/ui/text/input/EditingBuffer;->setSelection$ui_text_release(II)V +HSPLandroidx/compose/ui/text/input/EditingBuffer;->setSelectionEnd(I)V +HSPLandroidx/compose/ui/text/input/EditingBuffer;->setSelectionStart(I)V +HSPLandroidx/compose/ui/text/input/EditingBuffer;->toAnnotatedString$ui_text_release()Landroidx/compose/ui/text/AnnotatedString; +HSPLandroidx/compose/ui/text/input/EditingBuffer;->toString()Ljava/lang/String; +Landroidx/compose/ui/text/input/EditingBuffer$Companion; +HSPLandroidx/compose/ui/text/input/EditingBuffer$Companion;->()V +HSPLandroidx/compose/ui/text/input/EditingBuffer$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/text/input/GapBuffer; +HSPLandroidx/compose/ui/text/input/GapBuffer;->([CII)V +HSPLandroidx/compose/ui/text/input/GapBuffer;->append(Ljava/lang/StringBuilder;)V +HSPLandroidx/compose/ui/text/input/GapBuffer;->delete(II)V +HSPLandroidx/compose/ui/text/input/GapBuffer;->gapLength()I +HSPLandroidx/compose/ui/text/input/GapBuffer;->length()I +HSPLandroidx/compose/ui/text/input/GapBuffer;->makeSureAvailableSpace(I)V +HSPLandroidx/compose/ui/text/input/GapBuffer;->replace(IILjava/lang/String;)V +Landroidx/compose/ui/text/input/GapBufferKt; +HSPLandroidx/compose/ui/text/input/GapBufferKt;->access$toCharArray(Ljava/lang/String;[CI)V +HSPLandroidx/compose/ui/text/input/GapBufferKt;->toCharArray(Ljava/lang/String;[CI)V +Landroidx/compose/ui/text/input/GapBuffer_jvmKt; +HSPLandroidx/compose/ui/text/input/GapBuffer_jvmKt;->toCharArray(Ljava/lang/String;[CIII)V +Landroidx/compose/ui/text/input/ImeAction; +HSPLandroidx/compose/ui/text/input/ImeAction;->()V +HSPLandroidx/compose/ui/text/input/ImeAction;->(I)V +HSPLandroidx/compose/ui/text/input/ImeAction;->access$getDefault$cp()I +HSPLandroidx/compose/ui/text/input/ImeAction;->access$getDone$cp()I +HSPLandroidx/compose/ui/text/input/ImeAction;->access$getGo$cp()I +HSPLandroidx/compose/ui/text/input/ImeAction;->access$getNone$cp()I +HSPLandroidx/compose/ui/text/input/ImeAction;->box-impl(I)Landroidx/compose/ui/text/input/ImeAction; +HSPLandroidx/compose/ui/text/input/ImeAction;->constructor-impl(I)I +HSPLandroidx/compose/ui/text/input/ImeAction;->equals-impl0(II)Z +Landroidx/compose/ui/text/input/ImeAction$Companion; +HSPLandroidx/compose/ui/text/input/ImeAction$Companion;->()V +HSPLandroidx/compose/ui/text/input/ImeAction$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/input/ImeAction$Companion;->getDefault-eUduSuo()I +HSPLandroidx/compose/ui/text/input/ImeAction$Companion;->getDone-eUduSuo()I +HSPLandroidx/compose/ui/text/input/ImeAction$Companion;->getGo-eUduSuo()I +HSPLandroidx/compose/ui/text/input/ImeAction$Companion;->getNone-eUduSuo()I +Landroidx/compose/ui/text/input/ImeOptions; +HSPLandroidx/compose/ui/text/input/ImeOptions;->()V +HSPLandroidx/compose/ui/text/input/ImeOptions;->(ZIZII)V +HSPLandroidx/compose/ui/text/input/ImeOptions;->(ZIZIIILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/input/ImeOptions;->(ZIZIILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/input/ImeOptions;->access$getDefault$cp()Landroidx/compose/ui/text/input/ImeOptions; +HSPLandroidx/compose/ui/text/input/ImeOptions;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/text/input/ImeOptions;->getAutoCorrect()Z +HSPLandroidx/compose/ui/text/input/ImeOptions;->getCapitalization-IUNYP9k()I +HSPLandroidx/compose/ui/text/input/ImeOptions;->getImeAction-eUduSuo()I +HSPLandroidx/compose/ui/text/input/ImeOptions;->getKeyboardType-PjHm6EE()I +HSPLandroidx/compose/ui/text/input/ImeOptions;->getSingleLine()Z +Landroidx/compose/ui/text/input/ImeOptions$Companion; +HSPLandroidx/compose/ui/text/input/ImeOptions$Companion;->()V +HSPLandroidx/compose/ui/text/input/ImeOptions$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/input/ImeOptions$Companion;->getDefault()Landroidx/compose/ui/text/input/ImeOptions; +Landroidx/compose/ui/text/input/InputEventCallback2; +Landroidx/compose/ui/text/input/InputMethodManager; +Landroidx/compose/ui/text/input/InputMethodManagerImpl; +HSPLandroidx/compose/ui/text/input/InputMethodManagerImpl;->(Landroid/view/View;)V +HSPLandroidx/compose/ui/text/input/InputMethodManagerImpl;->access$getView$p(Landroidx/compose/ui/text/input/InputMethodManagerImpl;)Landroid/view/View; +HSPLandroidx/compose/ui/text/input/InputMethodManagerImpl;->getImm()Landroid/view/inputmethod/InputMethodManager; +HSPLandroidx/compose/ui/text/input/InputMethodManagerImpl;->hideSoftInput()V +HSPLandroidx/compose/ui/text/input/InputMethodManagerImpl;->restartInput()V +HSPLandroidx/compose/ui/text/input/InputMethodManagerImpl;->showSoftInput()V +HSPLandroidx/compose/ui/text/input/InputMethodManagerImpl;->updateSelection(IIII)V +Landroidx/compose/ui/text/input/InputMethodManagerImpl$imm$2; +HSPLandroidx/compose/ui/text/input/InputMethodManagerImpl$imm$2;->(Landroidx/compose/ui/text/input/InputMethodManagerImpl;)V +HSPLandroidx/compose/ui/text/input/InputMethodManagerImpl$imm$2;->invoke()Landroid/view/inputmethod/InputMethodManager; +HSPLandroidx/compose/ui/text/input/InputMethodManagerImpl$imm$2;->invoke()Ljava/lang/Object; +Landroidx/compose/ui/text/input/KeyboardCapitalization; +HSPLandroidx/compose/ui/text/input/KeyboardCapitalization;->()V +HSPLandroidx/compose/ui/text/input/KeyboardCapitalization;->access$getCharacters$cp()I +HSPLandroidx/compose/ui/text/input/KeyboardCapitalization;->access$getNone$cp()I +HSPLandroidx/compose/ui/text/input/KeyboardCapitalization;->access$getSentences$cp()I +HSPLandroidx/compose/ui/text/input/KeyboardCapitalization;->access$getWords$cp()I +HSPLandroidx/compose/ui/text/input/KeyboardCapitalization;->constructor-impl(I)I +HSPLandroidx/compose/ui/text/input/KeyboardCapitalization;->equals-impl0(II)Z +Landroidx/compose/ui/text/input/KeyboardCapitalization$Companion; +HSPLandroidx/compose/ui/text/input/KeyboardCapitalization$Companion;->()V +HSPLandroidx/compose/ui/text/input/KeyboardCapitalization$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/input/KeyboardCapitalization$Companion;->getCharacters-IUNYP9k()I +HSPLandroidx/compose/ui/text/input/KeyboardCapitalization$Companion;->getNone-IUNYP9k()I +HSPLandroidx/compose/ui/text/input/KeyboardCapitalization$Companion;->getSentences-IUNYP9k()I +HSPLandroidx/compose/ui/text/input/KeyboardCapitalization$Companion;->getWords-IUNYP9k()I +Landroidx/compose/ui/text/input/KeyboardType; +HSPLandroidx/compose/ui/text/input/KeyboardType;->()V +HSPLandroidx/compose/ui/text/input/KeyboardType;->access$getAscii$cp()I +HSPLandroidx/compose/ui/text/input/KeyboardType;->access$getEmail$cp()I +HSPLandroidx/compose/ui/text/input/KeyboardType;->access$getNumber$cp()I +HSPLandroidx/compose/ui/text/input/KeyboardType;->access$getPassword$cp()I +HSPLandroidx/compose/ui/text/input/KeyboardType;->access$getPhone$cp()I +HSPLandroidx/compose/ui/text/input/KeyboardType;->access$getText$cp()I +HSPLandroidx/compose/ui/text/input/KeyboardType;->access$getUri$cp()I +HSPLandroidx/compose/ui/text/input/KeyboardType;->constructor-impl(I)I +HSPLandroidx/compose/ui/text/input/KeyboardType;->equals-impl0(II)Z +Landroidx/compose/ui/text/input/KeyboardType$Companion; +HSPLandroidx/compose/ui/text/input/KeyboardType$Companion;->()V +HSPLandroidx/compose/ui/text/input/KeyboardType$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/input/KeyboardType$Companion;->getAscii-PjHm6EE()I +HSPLandroidx/compose/ui/text/input/KeyboardType$Companion;->getEmail-PjHm6EE()I +HSPLandroidx/compose/ui/text/input/KeyboardType$Companion;->getNumber-PjHm6EE()I +HSPLandroidx/compose/ui/text/input/KeyboardType$Companion;->getPassword-PjHm6EE()I +HSPLandroidx/compose/ui/text/input/KeyboardType$Companion;->getPhone-PjHm6EE()I +HSPLandroidx/compose/ui/text/input/KeyboardType$Companion;->getText-PjHm6EE()I +HSPLandroidx/compose/ui/text/input/KeyboardType$Companion;->getUri-PjHm6EE()I +Landroidx/compose/ui/text/input/OffsetMapping; +HSPLandroidx/compose/ui/text/input/OffsetMapping;->()V +Landroidx/compose/ui/text/input/OffsetMapping$Companion; +HSPLandroidx/compose/ui/text/input/OffsetMapping$Companion;->()V +HSPLandroidx/compose/ui/text/input/OffsetMapping$Companion;->()V +HSPLandroidx/compose/ui/text/input/OffsetMapping$Companion;->getIdentity()Landroidx/compose/ui/text/input/OffsetMapping; +Landroidx/compose/ui/text/input/OffsetMapping$Companion$Identity$1; +HSPLandroidx/compose/ui/text/input/OffsetMapping$Companion$Identity$1;->()V +HSPLandroidx/compose/ui/text/input/OffsetMapping$Companion$Identity$1;->originalToTransformed(I)I +Landroidx/compose/ui/text/input/PartialGapBuffer; +HSPLandroidx/compose/ui/text/input/PartialGapBuffer;->()V +HSPLandroidx/compose/ui/text/input/PartialGapBuffer;->(Ljava/lang/String;)V +HSPLandroidx/compose/ui/text/input/PartialGapBuffer;->getLength()I +HSPLandroidx/compose/ui/text/input/PartialGapBuffer;->replace(IILjava/lang/String;)V +HSPLandroidx/compose/ui/text/input/PartialGapBuffer;->toString()Ljava/lang/String; +Landroidx/compose/ui/text/input/PartialGapBuffer$Companion; +HSPLandroidx/compose/ui/text/input/PartialGapBuffer$Companion;->()V +HSPLandroidx/compose/ui/text/input/PartialGapBuffer$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/text/input/PasswordVisualTransformation; +HSPLandroidx/compose/ui/text/input/PasswordVisualTransformation;->()V +HSPLandroidx/compose/ui/text/input/PasswordVisualTransformation;->(C)V +HSPLandroidx/compose/ui/text/input/PasswordVisualTransformation;->(CILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/input/PasswordVisualTransformation;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/text/input/PasswordVisualTransformation;->filter(Landroidx/compose/ui/text/AnnotatedString;)Landroidx/compose/ui/text/input/TransformedText; +Landroidx/compose/ui/text/input/PlatformTextInput; +Landroidx/compose/ui/text/input/PlatformTextInputAdapter; +Landroidx/compose/ui/text/input/PlatformTextInputPlugin; +Landroidx/compose/ui/text/input/PlatformTextInputPluginRegistry; +Landroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl; +HSPLandroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl;->()V +HSPLandroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl;->(Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl;->access$getFocusedPlugin$p(Landroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl;)Landroidx/compose/ui/text/input/PlatformTextInputPlugin; +HSPLandroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl;->access$setFocusedPlugin$p(Landroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl;Landroidx/compose/ui/text/input/PlatformTextInputPlugin;)V +HSPLandroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl;->getFocusedAdapter()Landroidx/compose/ui/text/input/PlatformTextInputAdapter; +HSPLandroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl;->getOrCreateAdapter(Landroidx/compose/ui/text/input/PlatformTextInputPlugin;)Landroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl$AdapterHandle; +HSPLandroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl;->instantiateAdapter(Landroidx/compose/ui/text/input/PlatformTextInputPlugin;)Landroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl$AdapterWithRefCount; +Landroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl$AdapterHandle; +HSPLandroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl$AdapterHandle;->()V +HSPLandroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl$AdapterHandle;->(Landroidx/compose/ui/text/input/PlatformTextInputAdapter;Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl$AdapterHandle;->getAdapter()Landroidx/compose/ui/text/input/PlatformTextInputAdapter; +Landroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl$AdapterInput; +HSPLandroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl$AdapterInput;->(Landroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl;Landroidx/compose/ui/text/input/PlatformTextInputPlugin;)V +HSPLandroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl$AdapterInput;->releaseInputFocus()V +HSPLandroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl$AdapterInput;->requestInputFocus()V +Landroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl$AdapterWithRefCount; +HSPLandroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl$AdapterWithRefCount;->(Landroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl;Landroidx/compose/ui/text/input/PlatformTextInputAdapter;)V +HSPLandroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl$AdapterWithRefCount;->getAdapter()Landroidx/compose/ui/text/input/PlatformTextInputAdapter; +HSPLandroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl$AdapterWithRefCount;->getRefCount()I +HSPLandroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl$AdapterWithRefCount;->incrementRefCount()V +HSPLandroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl$AdapterWithRefCount;->setRefCount(I)V +Landroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl$getOrCreateAdapter$1; +HSPLandroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl$getOrCreateAdapter$1;->(Landroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl$AdapterWithRefCount;)V +Landroidx/compose/ui/text/input/PlatformTextInputService; +Landroidx/compose/ui/text/input/RecordingInputConnection; +HSPLandroidx/compose/ui/text/input/RecordingInputConnection;->(Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/ui/text/input/InputEventCallback2;Z)V +HSPLandroidx/compose/ui/text/input/RecordingInputConnection;->closeConnection()V +HSPLandroidx/compose/ui/text/input/RecordingInputConnection;->getHandler()Landroid/os/Handler; +HSPLandroidx/compose/ui/text/input/RecordingInputConnection;->getSelectedText(I)Ljava/lang/CharSequence; +HSPLandroidx/compose/ui/text/input/RecordingInputConnection;->getTextAfterCursor(II)Ljava/lang/CharSequence; +HSPLandroidx/compose/ui/text/input/RecordingInputConnection;->getTextBeforeCursor(II)Ljava/lang/CharSequence; +HSPLandroidx/compose/ui/text/input/RecordingInputConnection;->setMTextFieldValue$ui_release(Landroidx/compose/ui/text/input/TextFieldValue;)V +HSPLandroidx/compose/ui/text/input/RecordingInputConnection;->updateInputState(Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/ui/text/input/InputMethodManager;)V +Landroidx/compose/ui/text/input/TextFieldValue; +HSPLandroidx/compose/ui/text/input/TextFieldValue;->()V +HSPLandroidx/compose/ui/text/input/TextFieldValue;->(Landroidx/compose/ui/text/AnnotatedString;JLandroidx/compose/ui/text/TextRange;)V +HSPLandroidx/compose/ui/text/input/TextFieldValue;->(Landroidx/compose/ui/text/AnnotatedString;JLandroidx/compose/ui/text/TextRange;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/input/TextFieldValue;->(Ljava/lang/String;JLandroidx/compose/ui/text/TextRange;)V +HSPLandroidx/compose/ui/text/input/TextFieldValue;->(Ljava/lang/String;JLandroidx/compose/ui/text/TextRange;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/input/TextFieldValue;->(Ljava/lang/String;JLandroidx/compose/ui/text/TextRange;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/input/TextFieldValue;->copy-3r_uNRQ$default(Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/ui/text/AnnotatedString;JLandroidx/compose/ui/text/TextRange;ILjava/lang/Object;)Landroidx/compose/ui/text/input/TextFieldValue; +HSPLandroidx/compose/ui/text/input/TextFieldValue;->copy-3r_uNRQ$default(Landroidx/compose/ui/text/input/TextFieldValue;Ljava/lang/String;JLandroidx/compose/ui/text/TextRange;ILjava/lang/Object;)Landroidx/compose/ui/text/input/TextFieldValue; +HSPLandroidx/compose/ui/text/input/TextFieldValue;->copy-3r_uNRQ(Landroidx/compose/ui/text/AnnotatedString;JLandroidx/compose/ui/text/TextRange;)Landroidx/compose/ui/text/input/TextFieldValue; +HSPLandroidx/compose/ui/text/input/TextFieldValue;->copy-3r_uNRQ(Ljava/lang/String;JLandroidx/compose/ui/text/TextRange;)Landroidx/compose/ui/text/input/TextFieldValue; +HSPLandroidx/compose/ui/text/input/TextFieldValue;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/text/input/TextFieldValue;->getAnnotatedString()Landroidx/compose/ui/text/AnnotatedString; +HSPLandroidx/compose/ui/text/input/TextFieldValue;->getComposition-MzsxiRA()Landroidx/compose/ui/text/TextRange; +HSPLandroidx/compose/ui/text/input/TextFieldValue;->getSelection-d9O1mEE()J +HSPLandroidx/compose/ui/text/input/TextFieldValue;->getText()Ljava/lang/String; +Landroidx/compose/ui/text/input/TextFieldValue$Companion; +HSPLandroidx/compose/ui/text/input/TextFieldValue$Companion;->()V +HSPLandroidx/compose/ui/text/input/TextFieldValue$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/text/input/TextFieldValue$Companion$Saver$1; +HSPLandroidx/compose/ui/text/input/TextFieldValue$Companion$Saver$1;->()V +HSPLandroidx/compose/ui/text/input/TextFieldValue$Companion$Saver$1;->()V +Landroidx/compose/ui/text/input/TextFieldValue$Companion$Saver$2; +HSPLandroidx/compose/ui/text/input/TextFieldValue$Companion$Saver$2;->()V +HSPLandroidx/compose/ui/text/input/TextFieldValue$Companion$Saver$2;->()V +Landroidx/compose/ui/text/input/TextFieldValueKt; +HSPLandroidx/compose/ui/text/input/TextFieldValueKt;->getTextAfterSelection(Landroidx/compose/ui/text/input/TextFieldValue;I)Landroidx/compose/ui/text/AnnotatedString; +HSPLandroidx/compose/ui/text/input/TextFieldValueKt;->getTextBeforeSelection(Landroidx/compose/ui/text/input/TextFieldValue;I)Landroidx/compose/ui/text/AnnotatedString; +Landroidx/compose/ui/text/input/TextInputService; +HSPLandroidx/compose/ui/text/input/TextInputService;->()V +HSPLandroidx/compose/ui/text/input/TextInputService;->(Landroidx/compose/ui/text/input/PlatformTextInputService;)V +HSPLandroidx/compose/ui/text/input/TextInputService;->getCurrentInputSession$ui_text_release()Landroidx/compose/ui/text/input/TextInputSession; +HSPLandroidx/compose/ui/text/input/TextInputService;->startInput(Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/ui/text/input/ImeOptions;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/text/input/TextInputSession; +HSPLandroidx/compose/ui/text/input/TextInputService;->stopInput(Landroidx/compose/ui/text/input/TextInputSession;)V +Landroidx/compose/ui/text/input/TextInputServiceAndroid; +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid;->$r8$lambda$tFIm8sXGny3G873nGUe23EJe7OY(Landroidx/compose/ui/text/input/TextInputServiceAndroid;)V +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid;->(Landroid/view/View;Landroidx/compose/ui/text/input/InputMethodManager;Landroidx/compose/ui/text/input/PlatformTextInput;Ljava/util/concurrent/Executor;)V +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid;->(Landroid/view/View;Landroidx/compose/ui/text/input/InputMethodManager;Landroidx/compose/ui/text/input/PlatformTextInput;Ljava/util/concurrent/Executor;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid;->(Landroid/view/View;Landroidx/compose/ui/text/input/PlatformTextInput;)V +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid;->access$getIcs$p(Landroidx/compose/ui/text/input/TextInputServiceAndroid;)Ljava/util/List; +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid;->createInputConnection(Landroid/view/inputmethod/EditorInfo;)Landroid/view/inputmethod/InputConnection; +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid;->notifyFocusedRect(Landroidx/compose/ui/geometry/Rect;)V +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid;->processInputCommands$applyToState(Landroidx/compose/ui/text/input/TextInputServiceAndroid$TextInputCommand;Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlin/jvm/internal/Ref$ObjectRef;)V +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid;->processInputCommands()V +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid;->restartInputImmediately()V +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid;->sendInputCommand$lambda$1(Landroidx/compose/ui/text/input/TextInputServiceAndroid;)V +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid;->sendInputCommand(Landroidx/compose/ui/text/input/TextInputServiceAndroid$TextInputCommand;)V +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid;->setKeyboardVisibleImmediately(Z)V +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid;->startInput(Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/ui/text/input/ImeOptions;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid;->stopInput()V +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid;->updateState(Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/ui/text/input/TextFieldValue;)V +Landroidx/compose/ui/text/input/TextInputServiceAndroid$$ExternalSyntheticLambda0; +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid$$ExternalSyntheticLambda0;->(Landroidx/compose/ui/text/input/TextInputServiceAndroid;)V +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid$$ExternalSyntheticLambda0;->run()V +Landroidx/compose/ui/text/input/TextInputServiceAndroid$TextInputCommand; +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid$TextInputCommand;->$values()[Landroidx/compose/ui/text/input/TextInputServiceAndroid$TextInputCommand; +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid$TextInputCommand;->()V +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid$TextInputCommand;->(Ljava/lang/String;I)V +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid$TextInputCommand;->values()[Landroidx/compose/ui/text/input/TextInputServiceAndroid$TextInputCommand; +Landroidx/compose/ui/text/input/TextInputServiceAndroid$WhenMappings; +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid$WhenMappings;->()V +Landroidx/compose/ui/text/input/TextInputServiceAndroid$baseInputConnection$2; +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid$baseInputConnection$2;->(Landroidx/compose/ui/text/input/TextInputServiceAndroid;)V +Landroidx/compose/ui/text/input/TextInputServiceAndroid$createInputConnection$1; +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid$createInputConnection$1;->(Landroidx/compose/ui/text/input/TextInputServiceAndroid;)V +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid$createInputConnection$1;->onConnectionClosed(Landroidx/compose/ui/text/input/RecordingInputConnection;)V +Landroidx/compose/ui/text/input/TextInputServiceAndroid$onEditCommand$1; +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid$onEditCommand$1;->()V +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid$onEditCommand$1;->()V +Landroidx/compose/ui/text/input/TextInputServiceAndroid$onImeActionPerformed$1; +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid$onImeActionPerformed$1;->()V +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid$onImeActionPerformed$1;->()V +Landroidx/compose/ui/text/input/TextInputServiceAndroid$stopInput$1; +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid$stopInput$1;->()V +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid$stopInput$1;->()V +Landroidx/compose/ui/text/input/TextInputServiceAndroid$stopInput$2; +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid$stopInput$2;->()V +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid$stopInput$2;->()V +Landroidx/compose/ui/text/input/TextInputServiceAndroid_androidKt; +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid_androidKt;->$r8$lambda$RYljF3nl5HRu6JKEM8xFRHwbGFg(Ljava/lang/Runnable;J)V +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid_androidKt;->$r8$lambda$zzP0QYZAK9fPNHI8CrYdtRFmmqA(Landroid/view/Choreographer;Ljava/lang/Runnable;)V +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid_androidKt;->access$updateWithEmojiCompat(Landroid/view/inputmethod/EditorInfo;)V +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid_androidKt;->asExecutor$lambda$1$lambda$0(Ljava/lang/Runnable;J)V +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid_androidKt;->asExecutor$lambda$1(Landroid/view/Choreographer;Ljava/lang/Runnable;)V +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid_androidKt;->asExecutor(Landroid/view/Choreographer;)Ljava/util/concurrent/Executor; +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid_androidKt;->hasFlag(II)Z +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid_androidKt;->update(Landroid/view/inputmethod/EditorInfo;Landroidx/compose/ui/text/input/ImeOptions;Landroidx/compose/ui/text/input/TextFieldValue;)V +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid_androidKt;->updateWithEmojiCompat(Landroid/view/inputmethod/EditorInfo;)V +Landroidx/compose/ui/text/input/TextInputServiceAndroid_androidKt$$ExternalSyntheticLambda0; +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid_androidKt$$ExternalSyntheticLambda0;->(Ljava/lang/Runnable;)V +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid_androidKt$$ExternalSyntheticLambda0;->doFrame(J)V +Landroidx/compose/ui/text/input/TextInputServiceAndroid_androidKt$$ExternalSyntheticLambda1; +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid_androidKt$$ExternalSyntheticLambda1;->(Landroid/view/Choreographer;)V +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid_androidKt$$ExternalSyntheticLambda1;->execute(Ljava/lang/Runnable;)V +Landroidx/compose/ui/text/input/TextInputSession; +HSPLandroidx/compose/ui/text/input/TextInputSession;->()V +HSPLandroidx/compose/ui/text/input/TextInputSession;->(Landroidx/compose/ui/text/input/TextInputService;Landroidx/compose/ui/text/input/PlatformTextInputService;)V +HSPLandroidx/compose/ui/text/input/TextInputSession;->dispose()V +HSPLandroidx/compose/ui/text/input/TextInputSession;->isOpen()Z +HSPLandroidx/compose/ui/text/input/TextInputSession;->notifyFocusedRect(Landroidx/compose/ui/geometry/Rect;)Z +HSPLandroidx/compose/ui/text/input/TextInputSession;->updateState(Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/ui/text/input/TextFieldValue;)Z +Landroidx/compose/ui/text/input/TransformedText; +HSPLandroidx/compose/ui/text/input/TransformedText;->()V +HSPLandroidx/compose/ui/text/input/TransformedText;->(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/input/OffsetMapping;)V +HSPLandroidx/compose/ui/text/input/TransformedText;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/text/input/TransformedText;->getOffsetMapping()Landroidx/compose/ui/text/input/OffsetMapping; +HSPLandroidx/compose/ui/text/input/TransformedText;->getText()Landroidx/compose/ui/text/AnnotatedString; +Landroidx/compose/ui/text/input/VisualTransformation; +HSPLandroidx/compose/ui/text/input/VisualTransformation;->()V +Landroidx/compose/ui/text/input/VisualTransformation$Companion; +HSPLandroidx/compose/ui/text/input/VisualTransformation$Companion;->()V +HSPLandroidx/compose/ui/text/input/VisualTransformation$Companion;->()V +HSPLandroidx/compose/ui/text/input/VisualTransformation$Companion;->getNone()Landroidx/compose/ui/text/input/VisualTransformation; +Landroidx/compose/ui/text/input/VisualTransformation$Companion$None$1; +HSPLandroidx/compose/ui/text/input/VisualTransformation$Companion$None$1;->()V +HSPLandroidx/compose/ui/text/input/VisualTransformation$Companion$None$1;->()V +HSPLandroidx/compose/ui/text/input/VisualTransformation$Companion$None$1;->filter(Landroidx/compose/ui/text/AnnotatedString;)Landroidx/compose/ui/text/input/TransformedText; +Landroidx/compose/ui/text/intl/AndroidLocale; +HSPLandroidx/compose/ui/text/intl/AndroidLocale;->(Ljava/util/Locale;)V +Landroidx/compose/ui/text/intl/AndroidLocaleDelegateAPI24; +HSPLandroidx/compose/ui/text/intl/AndroidLocaleDelegateAPI24;->()V +HSPLandroidx/compose/ui/text/intl/AndroidLocaleDelegateAPI24;->getCurrent()Landroidx/compose/ui/text/intl/LocaleList; +Landroidx/compose/ui/text/intl/AndroidPlatformLocale_androidKt; +HSPLandroidx/compose/ui/text/intl/AndroidPlatformLocale_androidKt;->createPlatformLocaleDelegate()Landroidx/compose/ui/text/intl/PlatformLocaleDelegate; +Landroidx/compose/ui/text/intl/Locale; +HSPLandroidx/compose/ui/text/intl/Locale;->()V +HSPLandroidx/compose/ui/text/intl/Locale;->(Landroidx/compose/ui/text/intl/PlatformLocale;)V +Landroidx/compose/ui/text/intl/Locale$Companion; +HSPLandroidx/compose/ui/text/intl/Locale$Companion;->()V +HSPLandroidx/compose/ui/text/intl/Locale$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/text/intl/LocaleList; +HSPLandroidx/compose/ui/text/intl/LocaleList;->()V +HSPLandroidx/compose/ui/text/intl/LocaleList;->(Ljava/util/List;)V +HSPLandroidx/compose/ui/text/intl/LocaleList;->equals(Ljava/lang/Object;)Z +Landroidx/compose/ui/text/intl/LocaleList$Companion; +HSPLandroidx/compose/ui/text/intl/LocaleList$Companion;->()V +HSPLandroidx/compose/ui/text/intl/LocaleList$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/intl/LocaleList$Companion;->getCurrent()Landroidx/compose/ui/text/intl/LocaleList; +Landroidx/compose/ui/text/intl/PlatformLocale; +Landroidx/compose/ui/text/intl/PlatformLocaleDelegate; +Landroidx/compose/ui/text/intl/PlatformLocaleKt; +HSPLandroidx/compose/ui/text/intl/PlatformLocaleKt;->()V +HSPLandroidx/compose/ui/text/intl/PlatformLocaleKt;->getPlatformLocaleDelegate()Landroidx/compose/ui/text/intl/PlatformLocaleDelegate; +Landroidx/compose/ui/text/platform/AndroidAccessibilitySpannableString_androidKt; +HSPLandroidx/compose/ui/text/platform/AndroidAccessibilitySpannableString_androidKt;->setSpanStyle(Landroid/text/SpannableString;Landroidx/compose/ui/text/SpanStyle;IILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/text/font/FontFamily$Resolver;)V +HSPLandroidx/compose/ui/text/platform/AndroidAccessibilitySpannableString_androidKt;->toAccessibilitySpannableString(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/text/font/FontFamily$Resolver;Landroidx/compose/ui/text/platform/URLSpanCache;)Landroid/text/SpannableString; +Landroidx/compose/ui/text/platform/AndroidParagraphHelper_androidKt; +HSPLandroidx/compose/ui/text/platform/AndroidParagraphHelper_androidKt;->()V +HSPLandroidx/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; +HSPLandroidx/compose/ui/text/platform/AndroidParagraphHelper_androidKt;->isIncludeFontPaddingEnabled(Landroidx/compose/ui/text/TextStyle;)Z +Landroidx/compose/ui/text/platform/AndroidParagraphHelper_androidKt$NoopSpan$1; +HSPLandroidx/compose/ui/text/platform/AndroidParagraphHelper_androidKt$NoopSpan$1;->()V +Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics; +HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->(Ljava/lang/String;Landroidx/compose/ui/text/TextStyle;Ljava/util/List;Ljava/util/List;Landroidx/compose/ui/text/font/FontFamily$Resolver;Landroidx/compose/ui/unit/Density;)V +HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getCharSequence$ui_text_release()Ljava/lang/CharSequence; +HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getFontFamilyResolver()Landroidx/compose/ui/text/font/FontFamily$Resolver; +HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getHasStaleResolvedFonts()Z +HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getLayoutIntrinsics$ui_text_release()Landroidx/compose/ui/text/android/LayoutIntrinsics; +HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getMaxIntrinsicWidth()F +HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getMinIntrinsicWidth()F +HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getStyle()Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getTextDirectionHeuristic$ui_text_release()I +HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getTextPaint$ui_text_release()Landroidx/compose/ui/text/platform/AndroidTextPaint; +Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics$resolveTypeface$1; +HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics$resolveTypeface$1;->(Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;)V +HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics$resolveTypeface$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics$resolveTypeface$1;->invoke-DPcqOEQ(Landroidx/compose/ui/text/font/FontFamily;Landroidx/compose/ui/text/font/FontWeight;II)Landroid/graphics/Typeface; +Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics_androidKt; +HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics_androidKt;->ActualParagraphIntrinsics(Ljava/lang/String;Landroidx/compose/ui/text/TextStyle;Ljava/util/List;Ljava/util/List;Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/text/font/FontFamily$Resolver;)Landroidx/compose/ui/text/ParagraphIntrinsics; +HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics_androidKt;->access$getHasEmojiCompat(Landroidx/compose/ui/text/TextStyle;)Z +HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics_androidKt;->getHasEmojiCompat(Landroidx/compose/ui/text/TextStyle;)Z +HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics_androidKt;->resolveTextDirectionHeuristics-9GRLPo0(Landroidx/compose/ui/text/style/TextDirection;Landroidx/compose/ui/text/intl/LocaleList;)I +Landroidx/compose/ui/text/platform/AndroidParagraph_androidKt; +HSPLandroidx/compose/ui/text/platform/AndroidParagraph_androidKt;->ActualParagraph--hBUhpc(Landroidx/compose/ui/text/ParagraphIntrinsics;IZJ)Landroidx/compose/ui/text/Paragraph; +HSPLandroidx/compose/ui/text/platform/AndroidParagraph_androidKt;->ActualParagraph-O3s9Psw(Ljava/lang/String;Landroidx/compose/ui/text/TextStyle;Ljava/util/List;Ljava/util/List;IZJLandroidx/compose/ui/unit/Density;Landroidx/compose/ui/text/font/FontFamily$Resolver;)Landroidx/compose/ui/text/Paragraph; +Landroidx/compose/ui/text/platform/AndroidTextPaint; +HSPLandroidx/compose/ui/text/platform/AndroidTextPaint;->(IF)V +HSPLandroidx/compose/ui/text/platform/AndroidTextPaint;->getBlendMode-0nO6VwU()I +HSPLandroidx/compose/ui/text/platform/AndroidTextPaint;->setBlendMode-s9anfk8(I)V +HSPLandroidx/compose/ui/text/platform/AndroidTextPaint;->setBrush-12SF9DM(Landroidx/compose/ui/graphics/Brush;JF)V +HSPLandroidx/compose/ui/text/platform/AndroidTextPaint;->setColor-8_81llA(J)V +HSPLandroidx/compose/ui/text/platform/AndroidTextPaint;->setDrawStyle(Landroidx/compose/ui/graphics/drawscope/DrawStyle;)V +HSPLandroidx/compose/ui/text/platform/AndroidTextPaint;->setShadow(Landroidx/compose/ui/graphics/Shadow;)V +HSPLandroidx/compose/ui/text/platform/AndroidTextPaint;->setTextDecoration(Landroidx/compose/ui/text/style/TextDecoration;)V +Landroidx/compose/ui/text/platform/DefaultImpl; +HSPLandroidx/compose/ui/text/platform/DefaultImpl;->()V +HSPLandroidx/compose/ui/text/platform/DefaultImpl;->access$setLoadState$p(Landroidx/compose/ui/text/platform/DefaultImpl;Landroidx/compose/runtime/State;)V +HSPLandroidx/compose/ui/text/platform/DefaultImpl;->getFontLoadState()Landroidx/compose/runtime/State; +HSPLandroidx/compose/ui/text/platform/DefaultImpl;->getFontLoaded()Landroidx/compose/runtime/State; +Landroidx/compose/ui/text/platform/DefaultImpl$getFontLoadState$initCallback$1; +HSPLandroidx/compose/ui/text/platform/DefaultImpl$getFontLoadState$initCallback$1;->(Landroidx/compose/runtime/MutableState;Landroidx/compose/ui/text/platform/DefaultImpl;)V +HSPLandroidx/compose/ui/text/platform/DefaultImpl$getFontLoadState$initCallback$1;->onInitialized()V +Landroidx/compose/ui/text/platform/EmojiCompatStatus; +HSPLandroidx/compose/ui/text/platform/EmojiCompatStatus;->()V +HSPLandroidx/compose/ui/text/platform/EmojiCompatStatus;->()V +HSPLandroidx/compose/ui/text/platform/EmojiCompatStatus;->getFontLoaded()Landroidx/compose/runtime/State; +Landroidx/compose/ui/text/platform/EmojiCompatStatusDelegate; +Landroidx/compose/ui/text/platform/ImmutableBool; +HSPLandroidx/compose/ui/text/platform/ImmutableBool;->(Z)V +HSPLandroidx/compose/ui/text/platform/ImmutableBool;->getValue()Ljava/lang/Boolean; +HSPLandroidx/compose/ui/text/platform/ImmutableBool;->getValue()Ljava/lang/Object; +Landroidx/compose/ui/text/platform/Synchronization_jvmKt; +HSPLandroidx/compose/ui/text/platform/Synchronization_jvmKt;->createSynchronizedObject()Landroidx/compose/ui/text/platform/SynchronizedObject; +Landroidx/compose/ui/text/platform/SynchronizedObject; +HSPLandroidx/compose/ui/text/platform/SynchronizedObject;->()V +Landroidx/compose/ui/text/platform/URLSpanCache; +HSPLandroidx/compose/ui/text/platform/URLSpanCache;->()V +HSPLandroidx/compose/ui/text/platform/URLSpanCache;->()V +Landroidx/compose/ui/text/platform/extensions/PlaceholderExtensions_androidKt; +HSPLandroidx/compose/ui/text/platform/extensions/PlaceholderExtensions_androidKt;->setPlaceholders(Landroid/text/Spannable;Ljava/util/List;Landroidx/compose/ui/unit/Density;)V +Landroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt; +HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->flattenFontStylesAndApply(Landroidx/compose/ui/text/SpanStyle;Ljava/util/List;Lkotlin/jvm/functions/Function3;)V +HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->getNeedsLetterSpacingSpan(Landroidx/compose/ui/text/SpanStyle;)Z +HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->hasFontAttributes(Landroidx/compose/ui/text/TextStyle;)Z +HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->merge(Landroidx/compose/ui/text/SpanStyle;Landroidx/compose/ui/text/SpanStyle;)Landroidx/compose/ui/text/SpanStyle; +HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->resolveLineHeightInPx-o2QH7mI(JFLandroidx/compose/ui/unit/Density;)F +HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setBackground-RPmYEkk(Landroid/text/Spannable;JII)V +HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setBaselineShift-0ocSgnM(Landroid/text/Spannable;Landroidx/compose/ui/text/style/BaselineShift;II)V +HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setBrush(Landroid/text/Spannable;Landroidx/compose/ui/graphics/Brush;FII)V +HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setColor-RPmYEkk(Landroid/text/Spannable;JII)V +HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setDrawStyle(Landroid/text/Spannable;Landroidx/compose/ui/graphics/drawscope/DrawStyle;II)V +HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setFontAttributes(Landroid/text/Spannable;Landroidx/compose/ui/text/TextStyle;Ljava/util/List;Lkotlin/jvm/functions/Function4;)V +HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setFontFeatureSettings(Landroid/text/Spannable;Ljava/lang/String;II)V +HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setFontSize-KmRG4DE(Landroid/text/Spannable;JLandroidx/compose/ui/unit/Density;II)V +HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setGeometricTransform(Landroid/text/Spannable;Landroidx/compose/ui/text/style/TextGeometricTransform;II)V +HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setLineHeight-r9BaKPg(Landroid/text/Spannable;JFLandroidx/compose/ui/unit/Density;)V +HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setLocaleList(Landroid/text/Spannable;Landroidx/compose/ui/text/intl/LocaleList;II)V +HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setShadow(Landroid/text/Spannable;Landroidx/compose/ui/graphics/Shadow;II)V +HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setSpan(Landroid/text/Spannable;Ljava/lang/Object;II)V +HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setSpanStyle(Landroid/text/Spannable;Landroidx/compose/ui/text/AnnotatedString$Range;Landroidx/compose/ui/unit/Density;)V +HSPLandroidx/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 +HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setTextDecoration(Landroid/text/Spannable;Landroidx/compose/ui/text/style/TextDecoration;II)V +HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setTextIndent(Landroid/text/Spannable;Landroidx/compose/ui/text/style/TextIndent;FLandroidx/compose/ui/unit/Density;)V +Landroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt$setFontAttributes$1; +HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt$setFontAttributes$1;->(Landroid/text/Spannable;Lkotlin/jvm/functions/Function4;)V +HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt$setFontAttributes$1;->invoke(Landroidx/compose/ui/text/SpanStyle;II)V +HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt$setFontAttributes$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/text/platform/extensions/TextPaintExtensions_androidKt; +HSPLandroidx/compose/ui/text/platform/extensions/TextPaintExtensions_androidKt;->applySpanStyle(Landroidx/compose/ui/text/platform/AndroidTextPaint;Landroidx/compose/ui/text/SpanStyle;Lkotlin/jvm/functions/Function4;Landroidx/compose/ui/unit/Density;Z)Landroidx/compose/ui/text/SpanStyle; +HSPLandroidx/compose/ui/text/platform/extensions/TextPaintExtensions_androidKt;->generateFallbackSpanStyle-62GTOB8(JZJLandroidx/compose/ui/text/style/BaselineShift;)Landroidx/compose/ui/text/SpanStyle; +HSPLandroidx/compose/ui/text/platform/extensions/TextPaintExtensions_androidKt;->hasFontAttributes(Landroidx/compose/ui/text/SpanStyle;)Z +HSPLandroidx/compose/ui/text/platform/extensions/TextPaintExtensions_androidKt;->setTextMotion(Landroidx/compose/ui/text/platform/AndroidTextPaint;Landroidx/compose/ui/text/style/TextMotion;)V +Landroidx/compose/ui/text/platform/style/ShaderBrushSpan; +Landroidx/compose/ui/text/style/BaselineShift; +HSPLandroidx/compose/ui/text/style/BaselineShift;->()V +HSPLandroidx/compose/ui/text/style/BaselineShift;->(F)V +HSPLandroidx/compose/ui/text/style/BaselineShift;->access$getNone$cp()F +HSPLandroidx/compose/ui/text/style/BaselineShift;->box-impl(F)Landroidx/compose/ui/text/style/BaselineShift; +HSPLandroidx/compose/ui/text/style/BaselineShift;->constructor-impl(F)F +HSPLandroidx/compose/ui/text/style/BaselineShift;->equals-impl0(FF)Z +HSPLandroidx/compose/ui/text/style/BaselineShift;->unbox-impl()F +Landroidx/compose/ui/text/style/BaselineShift$Companion; +HSPLandroidx/compose/ui/text/style/BaselineShift$Companion;->()V +HSPLandroidx/compose/ui/text/style/BaselineShift$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/style/BaselineShift$Companion;->getNone-y9eOQZs()F +Landroidx/compose/ui/text/style/BrushStyle; +Landroidx/compose/ui/text/style/ColorStyle; +HSPLandroidx/compose/ui/text/style/ColorStyle;->(J)V +HSPLandroidx/compose/ui/text/style/ColorStyle;->(JLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/style/ColorStyle;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/text/style/ColorStyle;->getAlpha()F +HSPLandroidx/compose/ui/text/style/ColorStyle;->getBrush()Landroidx/compose/ui/graphics/Brush; +HSPLandroidx/compose/ui/text/style/ColorStyle;->getColor-0d7_KjU()J +Landroidx/compose/ui/text/style/Hyphens; +HSPLandroidx/compose/ui/text/style/Hyphens;->()V +HSPLandroidx/compose/ui/text/style/Hyphens;->(I)V +HSPLandroidx/compose/ui/text/style/Hyphens;->access$getAuto$cp()I +HSPLandroidx/compose/ui/text/style/Hyphens;->access$getNone$cp()I +HSPLandroidx/compose/ui/text/style/Hyphens;->box-impl(I)Landroidx/compose/ui/text/style/Hyphens; +HSPLandroidx/compose/ui/text/style/Hyphens;->constructor-impl(I)I +HSPLandroidx/compose/ui/text/style/Hyphens;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/text/style/Hyphens;->equals-impl(ILjava/lang/Object;)Z +HSPLandroidx/compose/ui/text/style/Hyphens;->equals-impl0(II)Z +HSPLandroidx/compose/ui/text/style/Hyphens;->unbox-impl()I +Landroidx/compose/ui/text/style/Hyphens$Companion; +HSPLandroidx/compose/ui/text/style/Hyphens$Companion;->()V +HSPLandroidx/compose/ui/text/style/Hyphens$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/style/Hyphens$Companion;->getAuto-vmbZdU8()I +HSPLandroidx/compose/ui/text/style/Hyphens$Companion;->getNone-vmbZdU8()I +Landroidx/compose/ui/text/style/LineBreak; +HSPLandroidx/compose/ui/text/style/LineBreak;->()V +HSPLandroidx/compose/ui/text/style/LineBreak;->(I)V +HSPLandroidx/compose/ui/text/style/LineBreak;->access$getSimple$cp()I +HSPLandroidx/compose/ui/text/style/LineBreak;->box-impl(I)Landroidx/compose/ui/text/style/LineBreak; +HSPLandroidx/compose/ui/text/style/LineBreak;->constructor-impl(I)I +HSPLandroidx/compose/ui/text/style/LineBreak;->constructor-impl(III)I +HSPLandroidx/compose/ui/text/style/LineBreak;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/text/style/LineBreak;->equals-impl(ILjava/lang/Object;)Z +HSPLandroidx/compose/ui/text/style/LineBreak;->getStrategy-fcGXIks(I)I +HSPLandroidx/compose/ui/text/style/LineBreak;->getStrictness-usljTpc(I)I +HSPLandroidx/compose/ui/text/style/LineBreak;->getWordBreak-jp8hJ3c(I)I +HSPLandroidx/compose/ui/text/style/LineBreak;->unbox-impl()I +Landroidx/compose/ui/text/style/LineBreak$Companion; +HSPLandroidx/compose/ui/text/style/LineBreak$Companion;->()V +HSPLandroidx/compose/ui/text/style/LineBreak$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/style/LineBreak$Companion;->getSimple-rAG3T2k()I +Landroidx/compose/ui/text/style/LineBreak$Strategy; +HSPLandroidx/compose/ui/text/style/LineBreak$Strategy;->()V +HSPLandroidx/compose/ui/text/style/LineBreak$Strategy;->(I)V +HSPLandroidx/compose/ui/text/style/LineBreak$Strategy;->access$getBalanced$cp()I +HSPLandroidx/compose/ui/text/style/LineBreak$Strategy;->access$getHighQuality$cp()I +HSPLandroidx/compose/ui/text/style/LineBreak$Strategy;->access$getSimple$cp()I +HSPLandroidx/compose/ui/text/style/LineBreak$Strategy;->box-impl(I)Landroidx/compose/ui/text/style/LineBreak$Strategy; +HSPLandroidx/compose/ui/text/style/LineBreak$Strategy;->constructor-impl(I)I +HSPLandroidx/compose/ui/text/style/LineBreak$Strategy;->equals-impl0(II)Z +HSPLandroidx/compose/ui/text/style/LineBreak$Strategy;->unbox-impl()I +Landroidx/compose/ui/text/style/LineBreak$Strategy$Companion; +HSPLandroidx/compose/ui/text/style/LineBreak$Strategy$Companion;->()V +HSPLandroidx/compose/ui/text/style/LineBreak$Strategy$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/style/LineBreak$Strategy$Companion;->getBalanced-fcGXIks()I +HSPLandroidx/compose/ui/text/style/LineBreak$Strategy$Companion;->getHighQuality-fcGXIks()I +HSPLandroidx/compose/ui/text/style/LineBreak$Strategy$Companion;->getSimple-fcGXIks()I +Landroidx/compose/ui/text/style/LineBreak$Strictness; +HSPLandroidx/compose/ui/text/style/LineBreak$Strictness;->()V +HSPLandroidx/compose/ui/text/style/LineBreak$Strictness;->(I)V +HSPLandroidx/compose/ui/text/style/LineBreak$Strictness;->access$getDefault$cp()I +HSPLandroidx/compose/ui/text/style/LineBreak$Strictness;->access$getLoose$cp()I +HSPLandroidx/compose/ui/text/style/LineBreak$Strictness;->access$getNormal$cp()I +HSPLandroidx/compose/ui/text/style/LineBreak$Strictness;->access$getStrict$cp()I +HSPLandroidx/compose/ui/text/style/LineBreak$Strictness;->box-impl(I)Landroidx/compose/ui/text/style/LineBreak$Strictness; +HSPLandroidx/compose/ui/text/style/LineBreak$Strictness;->constructor-impl(I)I +HSPLandroidx/compose/ui/text/style/LineBreak$Strictness;->equals-impl0(II)Z +HSPLandroidx/compose/ui/text/style/LineBreak$Strictness;->unbox-impl()I +Landroidx/compose/ui/text/style/LineBreak$Strictness$Companion; +HSPLandroidx/compose/ui/text/style/LineBreak$Strictness$Companion;->()V +HSPLandroidx/compose/ui/text/style/LineBreak$Strictness$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/style/LineBreak$Strictness$Companion;->getDefault-usljTpc()I +HSPLandroidx/compose/ui/text/style/LineBreak$Strictness$Companion;->getLoose-usljTpc()I +HSPLandroidx/compose/ui/text/style/LineBreak$Strictness$Companion;->getNormal-usljTpc()I +HSPLandroidx/compose/ui/text/style/LineBreak$Strictness$Companion;->getStrict-usljTpc()I +Landroidx/compose/ui/text/style/LineBreak$WordBreak; +HSPLandroidx/compose/ui/text/style/LineBreak$WordBreak;->()V +HSPLandroidx/compose/ui/text/style/LineBreak$WordBreak;->(I)V +HSPLandroidx/compose/ui/text/style/LineBreak$WordBreak;->access$getDefault$cp()I +HSPLandroidx/compose/ui/text/style/LineBreak$WordBreak;->access$getPhrase$cp()I +HSPLandroidx/compose/ui/text/style/LineBreak$WordBreak;->box-impl(I)Landroidx/compose/ui/text/style/LineBreak$WordBreak; +HSPLandroidx/compose/ui/text/style/LineBreak$WordBreak;->constructor-impl(I)I +HSPLandroidx/compose/ui/text/style/LineBreak$WordBreak;->equals-impl0(II)Z +HSPLandroidx/compose/ui/text/style/LineBreak$WordBreak;->unbox-impl()I +Landroidx/compose/ui/text/style/LineBreak$WordBreak$Companion; +HSPLandroidx/compose/ui/text/style/LineBreak$WordBreak$Companion;->()V +HSPLandroidx/compose/ui/text/style/LineBreak$WordBreak$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/style/LineBreak$WordBreak$Companion;->getDefault-jp8hJ3c()I +HSPLandroidx/compose/ui/text/style/LineBreak$WordBreak$Companion;->getPhrase-jp8hJ3c()I +Landroidx/compose/ui/text/style/LineBreak_androidKt; +HSPLandroidx/compose/ui/text/style/LineBreak_androidKt;->access$packBytes(III)I +HSPLandroidx/compose/ui/text/style/LineBreak_androidKt;->access$unpackByte1(I)I +HSPLandroidx/compose/ui/text/style/LineBreak_androidKt;->access$unpackByte2(I)I +HSPLandroidx/compose/ui/text/style/LineBreak_androidKt;->access$unpackByte3(I)I +HSPLandroidx/compose/ui/text/style/LineBreak_androidKt;->packBytes(III)I +HSPLandroidx/compose/ui/text/style/LineBreak_androidKt;->unpackByte1(I)I +HSPLandroidx/compose/ui/text/style/LineBreak_androidKt;->unpackByte2(I)I +HSPLandroidx/compose/ui/text/style/LineBreak_androidKt;->unpackByte3(I)I +Landroidx/compose/ui/text/style/LineHeightStyle; +Landroidx/compose/ui/text/style/TextAlign; +HSPLandroidx/compose/ui/text/style/TextAlign;->()V +HSPLandroidx/compose/ui/text/style/TextAlign;->(I)V +HSPLandroidx/compose/ui/text/style/TextAlign;->access$getCenter$cp()I +HSPLandroidx/compose/ui/text/style/TextAlign;->access$getEnd$cp()I +HSPLandroidx/compose/ui/text/style/TextAlign;->access$getJustify$cp()I +HSPLandroidx/compose/ui/text/style/TextAlign;->access$getLeft$cp()I +HSPLandroidx/compose/ui/text/style/TextAlign;->access$getRight$cp()I +HSPLandroidx/compose/ui/text/style/TextAlign;->access$getStart$cp()I +HSPLandroidx/compose/ui/text/style/TextAlign;->box-impl(I)Landroidx/compose/ui/text/style/TextAlign; +HSPLandroidx/compose/ui/text/style/TextAlign;->constructor-impl(I)I +HSPLandroidx/compose/ui/text/style/TextAlign;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/text/style/TextAlign;->equals-impl(ILjava/lang/Object;)Z +HSPLandroidx/compose/ui/text/style/TextAlign;->equals-impl0(II)Z +HSPLandroidx/compose/ui/text/style/TextAlign;->unbox-impl()I +Landroidx/compose/ui/text/style/TextAlign$Companion; +HSPLandroidx/compose/ui/text/style/TextAlign$Companion;->()V +HSPLandroidx/compose/ui/text/style/TextAlign$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/style/TextAlign$Companion;->getCenter-e0LSkKk()I +HSPLandroidx/compose/ui/text/style/TextAlign$Companion;->getEnd-e0LSkKk()I +HSPLandroidx/compose/ui/text/style/TextAlign$Companion;->getJustify-e0LSkKk()I +HSPLandroidx/compose/ui/text/style/TextAlign$Companion;->getLeft-e0LSkKk()I +HSPLandroidx/compose/ui/text/style/TextAlign$Companion;->getRight-e0LSkKk()I +HSPLandroidx/compose/ui/text/style/TextAlign$Companion;->getStart-e0LSkKk()I +Landroidx/compose/ui/text/style/TextDecoration; +HSPLandroidx/compose/ui/text/style/TextDecoration;->()V +HSPLandroidx/compose/ui/text/style/TextDecoration;->(I)V +HSPLandroidx/compose/ui/text/style/TextDecoration;->access$getNone$cp()Landroidx/compose/ui/text/style/TextDecoration; +HSPLandroidx/compose/ui/text/style/TextDecoration;->access$getUnderline$cp()Landroidx/compose/ui/text/style/TextDecoration; +HSPLandroidx/compose/ui/text/style/TextDecoration;->equals(Ljava/lang/Object;)Z +Landroidx/compose/ui/text/style/TextDecoration$Companion; +HSPLandroidx/compose/ui/text/style/TextDecoration$Companion;->()V +HSPLandroidx/compose/ui/text/style/TextDecoration$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/style/TextDecoration$Companion;->getNone()Landroidx/compose/ui/text/style/TextDecoration; +HSPLandroidx/compose/ui/text/style/TextDecoration$Companion;->getUnderline()Landroidx/compose/ui/text/style/TextDecoration; +Landroidx/compose/ui/text/style/TextDirection; +HSPLandroidx/compose/ui/text/style/TextDirection;->()V +HSPLandroidx/compose/ui/text/style/TextDirection;->(I)V +HSPLandroidx/compose/ui/text/style/TextDirection;->access$getContent$cp()I +HSPLandroidx/compose/ui/text/style/TextDirection;->access$getContentOrLtr$cp()I +HSPLandroidx/compose/ui/text/style/TextDirection;->access$getContentOrRtl$cp()I +HSPLandroidx/compose/ui/text/style/TextDirection;->access$getLtr$cp()I +HSPLandroidx/compose/ui/text/style/TextDirection;->access$getRtl$cp()I +HSPLandroidx/compose/ui/text/style/TextDirection;->box-impl(I)Landroidx/compose/ui/text/style/TextDirection; +HSPLandroidx/compose/ui/text/style/TextDirection;->constructor-impl(I)I +HSPLandroidx/compose/ui/text/style/TextDirection;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/text/style/TextDirection;->equals-impl(ILjava/lang/Object;)Z +HSPLandroidx/compose/ui/text/style/TextDirection;->equals-impl0(II)Z +HSPLandroidx/compose/ui/text/style/TextDirection;->unbox-impl()I +Landroidx/compose/ui/text/style/TextDirection$Companion; +HSPLandroidx/compose/ui/text/style/TextDirection$Companion;->()V +HSPLandroidx/compose/ui/text/style/TextDirection$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/style/TextDirection$Companion;->getContent-s_7X-co()I +HSPLandroidx/compose/ui/text/style/TextDirection$Companion;->getContentOrLtr-s_7X-co()I +HSPLandroidx/compose/ui/text/style/TextDirection$Companion;->getContentOrRtl-s_7X-co()I +HSPLandroidx/compose/ui/text/style/TextDirection$Companion;->getLtr-s_7X-co()I +HSPLandroidx/compose/ui/text/style/TextDirection$Companion;->getRtl-s_7X-co()I +Landroidx/compose/ui/text/style/TextForegroundStyle; +HSPLandroidx/compose/ui/text/style/TextForegroundStyle;->()V +HSPLandroidx/compose/ui/text/style/TextForegroundStyle;->merge(Landroidx/compose/ui/text/style/TextForegroundStyle;)Landroidx/compose/ui/text/style/TextForegroundStyle; +HSPLandroidx/compose/ui/text/style/TextForegroundStyle;->takeOrElse(Lkotlin/jvm/functions/Function0;)Landroidx/compose/ui/text/style/TextForegroundStyle; +Landroidx/compose/ui/text/style/TextForegroundStyle$Companion; +HSPLandroidx/compose/ui/text/style/TextForegroundStyle$Companion;->()V +HSPLandroidx/compose/ui/text/style/TextForegroundStyle$Companion;->()V +HSPLandroidx/compose/ui/text/style/TextForegroundStyle$Companion;->from-8_81llA(J)Landroidx/compose/ui/text/style/TextForegroundStyle; +Landroidx/compose/ui/text/style/TextForegroundStyle$Unspecified; +HSPLandroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;->()V +HSPLandroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;->()V +HSPLandroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;->getAlpha()F +HSPLandroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;->getBrush()Landroidx/compose/ui/graphics/Brush; +HSPLandroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;->getColor-0d7_KjU()J +Landroidx/compose/ui/text/style/TextForegroundStyle$merge$2; +HSPLandroidx/compose/ui/text/style/TextForegroundStyle$merge$2;->(Landroidx/compose/ui/text/style/TextForegroundStyle;)V +HSPLandroidx/compose/ui/text/style/TextForegroundStyle$merge$2;->invoke()Landroidx/compose/ui/text/style/TextForegroundStyle; +HSPLandroidx/compose/ui/text/style/TextForegroundStyle$merge$2;->invoke()Ljava/lang/Object; +Landroidx/compose/ui/text/style/TextGeometricTransform; +HSPLandroidx/compose/ui/text/style/TextGeometricTransform;->()V +HSPLandroidx/compose/ui/text/style/TextGeometricTransform;->(FF)V +HSPLandroidx/compose/ui/text/style/TextGeometricTransform;->access$getNone$cp()Landroidx/compose/ui/text/style/TextGeometricTransform; +HSPLandroidx/compose/ui/text/style/TextGeometricTransform;->equals(Ljava/lang/Object;)Z +Landroidx/compose/ui/text/style/TextGeometricTransform$Companion; +HSPLandroidx/compose/ui/text/style/TextGeometricTransform$Companion;->()V +HSPLandroidx/compose/ui/text/style/TextGeometricTransform$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/style/TextGeometricTransform$Companion;->getNone$ui_text_release()Landroidx/compose/ui/text/style/TextGeometricTransform; +Landroidx/compose/ui/text/style/TextIndent; +HSPLandroidx/compose/ui/text/style/TextIndent;->()V +HSPLandroidx/compose/ui/text/style/TextIndent;->(JJ)V +HSPLandroidx/compose/ui/text/style/TextIndent;->(JJILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/style/TextIndent;->(JJLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/style/TextIndent;->access$getNone$cp()Landroidx/compose/ui/text/style/TextIndent; +HSPLandroidx/compose/ui/text/style/TextIndent;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/text/style/TextIndent;->getFirstLine-XSAIIZE()J +HSPLandroidx/compose/ui/text/style/TextIndent;->getRestLine-XSAIIZE()J +Landroidx/compose/ui/text/style/TextIndent$Companion; +HSPLandroidx/compose/ui/text/style/TextIndent$Companion;->()V +HSPLandroidx/compose/ui/text/style/TextIndent$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/style/TextIndent$Companion;->getNone()Landroidx/compose/ui/text/style/TextIndent; +Landroidx/compose/ui/text/style/TextMotion; +HSPLandroidx/compose/ui/text/style/TextMotion;->()V +HSPLandroidx/compose/ui/text/style/TextMotion;->(IZ)V +HSPLandroidx/compose/ui/text/style/TextMotion;->(IZLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/style/TextMotion;->access$getStatic$cp()Landroidx/compose/ui/text/style/TextMotion; +HSPLandroidx/compose/ui/text/style/TextMotion;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/text/style/TextMotion;->getLinearity-4e0Vf04$ui_text_release()I +HSPLandroidx/compose/ui/text/style/TextMotion;->getSubpixelTextPositioning$ui_text_release()Z +Landroidx/compose/ui/text/style/TextMotion$Companion; +HSPLandroidx/compose/ui/text/style/TextMotion$Companion;->()V +HSPLandroidx/compose/ui/text/style/TextMotion$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/style/TextMotion$Companion;->getStatic()Landroidx/compose/ui/text/style/TextMotion; +Landroidx/compose/ui/text/style/TextMotion$Linearity; +HSPLandroidx/compose/ui/text/style/TextMotion$Linearity;->()V +HSPLandroidx/compose/ui/text/style/TextMotion$Linearity;->access$getFontHinting$cp()I +HSPLandroidx/compose/ui/text/style/TextMotion$Linearity;->access$getLinear$cp()I +HSPLandroidx/compose/ui/text/style/TextMotion$Linearity;->constructor-impl(I)I +HSPLandroidx/compose/ui/text/style/TextMotion$Linearity;->equals-impl0(II)Z +Landroidx/compose/ui/text/style/TextMotion$Linearity$Companion; +HSPLandroidx/compose/ui/text/style/TextMotion$Linearity$Companion;->()V +HSPLandroidx/compose/ui/text/style/TextMotion$Linearity$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/style/TextMotion$Linearity$Companion;->getFontHinting-4e0Vf04()I +HSPLandroidx/compose/ui/text/style/TextMotion$Linearity$Companion;->getLinear-4e0Vf04()I +Landroidx/compose/ui/text/style/TextOverflow; +HSPLandroidx/compose/ui/text/style/TextOverflow;->()V +HSPLandroidx/compose/ui/text/style/TextOverflow;->access$getClip$cp()I +HSPLandroidx/compose/ui/text/style/TextOverflow;->access$getEllipsis$cp()I +HSPLandroidx/compose/ui/text/style/TextOverflow;->constructor-impl(I)I +HSPLandroidx/compose/ui/text/style/TextOverflow;->equals-impl0(II)Z +Landroidx/compose/ui/text/style/TextOverflow$Companion; +HSPLandroidx/compose/ui/text/style/TextOverflow$Companion;->()V +HSPLandroidx/compose/ui/text/style/TextOverflow$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/style/TextOverflow$Companion;->getClip-gIe3tQ8()I +HSPLandroidx/compose/ui/text/style/TextOverflow$Companion;->getEllipsis-gIe3tQ8()I +Landroidx/compose/ui/unit/AndroidDensity_androidKt; +HSPLandroidx/compose/ui/unit/AndroidDensity_androidKt;->Density(Landroid/content/Context;)Landroidx/compose/ui/unit/Density; +Landroidx/compose/ui/unit/Constraints; +HSPLandroidx/compose/ui/unit/Constraints;->()V +HSPLandroidx/compose/ui/unit/Constraints;->(J)V +HSPLandroidx/compose/ui/unit/Constraints;->access$getMinHeightOffsets$cp()[I +HSPLandroidx/compose/ui/unit/Constraints;->box-impl(J)Landroidx/compose/ui/unit/Constraints; +HSPLandroidx/compose/ui/unit/Constraints;->constructor-impl(J)J +HSPLandroidx/compose/ui/unit/Constraints;->copy-Zbe2FdA$default(JIIIIILjava/lang/Object;)J +HSPLandroidx/compose/ui/unit/Constraints;->copy-Zbe2FdA(JIIII)J +HSPLandroidx/compose/ui/unit/Constraints;->equals-impl0(JJ)Z +HSPLandroidx/compose/ui/unit/Constraints;->getFocusIndex-impl(J)I +HSPLandroidx/compose/ui/unit/Constraints;->getHasBoundedHeight-impl(J)Z +HSPLandroidx/compose/ui/unit/Constraints;->getHasBoundedWidth-impl(J)Z +HSPLandroidx/compose/ui/unit/Constraints;->getHasFixedHeight-impl(J)Z +HSPLandroidx/compose/ui/unit/Constraints;->getHasFixedWidth-impl(J)Z +HSPLandroidx/compose/ui/unit/Constraints;->getMaxHeight-impl(J)I +HSPLandroidx/compose/ui/unit/Constraints;->getMaxWidth-impl(J)I +HSPLandroidx/compose/ui/unit/Constraints;->getMinHeight-impl(J)I +HSPLandroidx/compose/ui/unit/Constraints;->getMinWidth-impl(J)I +HSPLandroidx/compose/ui/unit/Constraints;->unbox-impl()J +Landroidx/compose/ui/unit/Constraints$Companion; +HSPLandroidx/compose/ui/unit/Constraints$Companion;->()V +HSPLandroidx/compose/ui/unit/Constraints$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/unit/Constraints$Companion;->bitsNeedForSize(I)I +HSPLandroidx/compose/ui/unit/Constraints$Companion;->createConstraints-Zbe2FdA$ui_unit_release(IIII)J +HSPLandroidx/compose/ui/unit/Constraints$Companion;->fixed-JhjzzOo(II)J +Landroidx/compose/ui/unit/ConstraintsKt; +HSPLandroidx/compose/ui/unit/ConstraintsKt;->Constraints$default(IIIIILjava/lang/Object;)J +HSPLandroidx/compose/ui/unit/ConstraintsKt;->Constraints(IIII)J +HSPLandroidx/compose/ui/unit/ConstraintsKt;->addMaxWithMinimum(II)I +HSPLandroidx/compose/ui/unit/ConstraintsKt;->constrain-4WqzIAM(JJ)J +HSPLandroidx/compose/ui/unit/ConstraintsKt;->constrain-N9IONVI(JJ)J +HSPLandroidx/compose/ui/unit/ConstraintsKt;->constrainHeight-K40F9xA(JI)I +HSPLandroidx/compose/ui/unit/ConstraintsKt;->constrainWidth-K40F9xA(JI)I +HSPLandroidx/compose/ui/unit/ConstraintsKt;->offset-NN6Ew-U(JII)J +Landroidx/compose/ui/unit/Density; +HSPLandroidx/compose/ui/unit/Density;->roundToPx-0680j_4(F)I +HSPLandroidx/compose/ui/unit/Density;->toDp-GaN1DYA(J)F +HSPLandroidx/compose/ui/unit/Density;->toDp-u2uoSUM(F)F +HSPLandroidx/compose/ui/unit/Density;->toDp-u2uoSUM(I)F +HSPLandroidx/compose/ui/unit/Density;->toDpSize-k-rfVVM(J)J +HSPLandroidx/compose/ui/unit/Density;->toPx--R2X_6o(J)F +HSPLandroidx/compose/ui/unit/Density;->toPx-0680j_4(F)F +HSPLandroidx/compose/ui/unit/Density;->toSize-XkaWNTQ(J)J +Landroidx/compose/ui/unit/DensityImpl; +HSPLandroidx/compose/ui/unit/DensityImpl;->(FF)V +HSPLandroidx/compose/ui/unit/DensityImpl;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/unit/DensityImpl;->getDensity()F +HSPLandroidx/compose/ui/unit/DensityImpl;->getFontScale()F +Landroidx/compose/ui/unit/DensityKt; +HSPLandroidx/compose/ui/unit/DensityKt;->Density$default(FFILjava/lang/Object;)Landroidx/compose/ui/unit/Density; +HSPLandroidx/compose/ui/unit/DensityKt;->Density(FF)Landroidx/compose/ui/unit/Density; +Landroidx/compose/ui/unit/Dp; +HSPLandroidx/compose/ui/unit/Dp;->()V +HSPLandroidx/compose/ui/unit/Dp;->(F)V +HSPLandroidx/compose/ui/unit/Dp;->access$getHairline$cp()F +HSPLandroidx/compose/ui/unit/Dp;->access$getUnspecified$cp()F +HSPLandroidx/compose/ui/unit/Dp;->box-impl(F)Landroidx/compose/ui/unit/Dp; +HSPLandroidx/compose/ui/unit/Dp;->compareTo(Ljava/lang/Object;)I +HSPLandroidx/compose/ui/unit/Dp;->compareTo-0680j_4(F)I +HSPLandroidx/compose/ui/unit/Dp;->compareTo-0680j_4(FF)I +HSPLandroidx/compose/ui/unit/Dp;->constructor-impl(F)F +HSPLandroidx/compose/ui/unit/Dp;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/unit/Dp;->equals-impl(FLjava/lang/Object;)Z +HSPLandroidx/compose/ui/unit/Dp;->equals-impl0(FF)Z +HSPLandroidx/compose/ui/unit/Dp;->hashCode-impl(F)I +HSPLandroidx/compose/ui/unit/Dp;->unbox-impl()F +Landroidx/compose/ui/unit/Dp$Companion; +HSPLandroidx/compose/ui/unit/Dp$Companion;->()V +HSPLandroidx/compose/ui/unit/Dp$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/unit/Dp$Companion;->getHairline-D9Ej5fM()F +HSPLandroidx/compose/ui/unit/Dp$Companion;->getUnspecified-D9Ej5fM()F +Landroidx/compose/ui/unit/DpKt; +HSPLandroidx/compose/ui/unit/DpKt;->DpOffset-YgX7TsA(FF)J +HSPLandroidx/compose/ui/unit/DpKt;->DpSize-YgX7TsA(FF)J +Landroidx/compose/ui/unit/DpOffset; +HSPLandroidx/compose/ui/unit/DpOffset;->()V +HSPLandroidx/compose/ui/unit/DpOffset;->constructor-impl(J)J +Landroidx/compose/ui/unit/DpOffset$Companion; +HSPLandroidx/compose/ui/unit/DpOffset$Companion;->()V +HSPLandroidx/compose/ui/unit/DpOffset$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/unit/DpSize; +HSPLandroidx/compose/ui/unit/DpSize;->()V +HSPLandroidx/compose/ui/unit/DpSize;->(J)V +HSPLandroidx/compose/ui/unit/DpSize;->access$getUnspecified$cp()J +HSPLandroidx/compose/ui/unit/DpSize;->box-impl(J)Landroidx/compose/ui/unit/DpSize; +HSPLandroidx/compose/ui/unit/DpSize;->constructor-impl(J)J +HSPLandroidx/compose/ui/unit/DpSize;->equals-impl0(JJ)Z +HSPLandroidx/compose/ui/unit/DpSize;->getHeight-D9Ej5fM(J)F +HSPLandroidx/compose/ui/unit/DpSize;->getWidth-D9Ej5fM(J)F +HSPLandroidx/compose/ui/unit/DpSize;->unbox-impl()J +Landroidx/compose/ui/unit/DpSize$Companion; +HSPLandroidx/compose/ui/unit/DpSize$Companion;->()V +HSPLandroidx/compose/ui/unit/DpSize$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/unit/DpSize$Companion;->getUnspecified-MYxV2XQ()J +Landroidx/compose/ui/unit/IntOffset; +HSPLandroidx/compose/ui/unit/IntOffset;->()V +HSPLandroidx/compose/ui/unit/IntOffset;->(J)V +HSPLandroidx/compose/ui/unit/IntOffset;->access$getZero$cp()J +HSPLandroidx/compose/ui/unit/IntOffset;->box-impl(J)Landroidx/compose/ui/unit/IntOffset; +HSPLandroidx/compose/ui/unit/IntOffset;->component1-impl(J)I +HSPLandroidx/compose/ui/unit/IntOffset;->component2-impl(J)I +HSPLandroidx/compose/ui/unit/IntOffset;->constructor-impl(J)J +HSPLandroidx/compose/ui/unit/IntOffset;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/unit/IntOffset;->equals-impl(JLjava/lang/Object;)Z +HSPLandroidx/compose/ui/unit/IntOffset;->equals-impl0(JJ)Z +HSPLandroidx/compose/ui/unit/IntOffset;->getX-impl(J)I +HSPLandroidx/compose/ui/unit/IntOffset;->getY-impl(J)I +HSPLandroidx/compose/ui/unit/IntOffset;->unbox-impl()J +Landroidx/compose/ui/unit/IntOffset$Companion; +HSPLandroidx/compose/ui/unit/IntOffset$Companion;->()V +HSPLandroidx/compose/ui/unit/IntOffset$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/unit/IntOffset$Companion;->getZero-nOcc-ac()J +Landroidx/compose/ui/unit/IntOffsetKt; +HSPLandroidx/compose/ui/unit/IntOffsetKt;->IntOffset(II)J +HSPLandroidx/compose/ui/unit/IntOffsetKt;->minus-Nv-tHpc(JJ)J +HSPLandroidx/compose/ui/unit/IntOffsetKt;->plus-Nv-tHpc(JJ)J +Landroidx/compose/ui/unit/IntSize; +HSPLandroidx/compose/ui/unit/IntSize;->()V +HSPLandroidx/compose/ui/unit/IntSize;->(J)V +HSPLandroidx/compose/ui/unit/IntSize;->access$getZero$cp()J +HSPLandroidx/compose/ui/unit/IntSize;->box-impl(J)Landroidx/compose/ui/unit/IntSize; +HSPLandroidx/compose/ui/unit/IntSize;->constructor-impl(J)J +HSPLandroidx/compose/ui/unit/IntSize;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/unit/IntSize;->equals-impl(JLjava/lang/Object;)Z +HSPLandroidx/compose/ui/unit/IntSize;->equals-impl0(JJ)Z +HSPLandroidx/compose/ui/unit/IntSize;->getHeight-impl(J)I +HSPLandroidx/compose/ui/unit/IntSize;->getWidth-impl(J)I +HSPLandroidx/compose/ui/unit/IntSize;->unbox-impl()J +Landroidx/compose/ui/unit/IntSize$Companion; +HSPLandroidx/compose/ui/unit/IntSize$Companion;->()V +HSPLandroidx/compose/ui/unit/IntSize$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/unit/IntSize$Companion;->getZero-YbymL2g()J +Landroidx/compose/ui/unit/IntSizeKt; +HSPLandroidx/compose/ui/unit/IntSizeKt;->IntSize(II)J +HSPLandroidx/compose/ui/unit/IntSizeKt;->getCenter-ozmzZPI(J)J +HSPLandroidx/compose/ui/unit/IntSizeKt;->toSize-ozmzZPI(J)J +Landroidx/compose/ui/unit/LayoutDirection; +HSPLandroidx/compose/ui/unit/LayoutDirection;->$values()[Landroidx/compose/ui/unit/LayoutDirection; +HSPLandroidx/compose/ui/unit/LayoutDirection;->()V +HSPLandroidx/compose/ui/unit/LayoutDirection;->(Ljava/lang/String;I)V +HSPLandroidx/compose/ui/unit/LayoutDirection;->values()[Landroidx/compose/ui/unit/LayoutDirection; +Landroidx/compose/ui/unit/TextUnit; +HSPLandroidx/compose/ui/unit/TextUnit;->()V +HSPLandroidx/compose/ui/unit/TextUnit;->access$getUnspecified$cp()J +HSPLandroidx/compose/ui/unit/TextUnit;->constructor-impl(J)J +HSPLandroidx/compose/ui/unit/TextUnit;->equals-impl0(JJ)Z +HSPLandroidx/compose/ui/unit/TextUnit;->getRawType-impl(J)J +HSPLandroidx/compose/ui/unit/TextUnit;->getType-UIouoOA(J)J +HSPLandroidx/compose/ui/unit/TextUnit;->getValue-impl(J)F +Landroidx/compose/ui/unit/TextUnit$Companion; +HSPLandroidx/compose/ui/unit/TextUnit$Companion;->()V +HSPLandroidx/compose/ui/unit/TextUnit$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/unit/TextUnit$Companion;->getUnspecified-XSAIIZE()J +Landroidx/compose/ui/unit/TextUnitKt; +HSPLandroidx/compose/ui/unit/TextUnitKt;->checkArithmetic--R2X_6o(J)V +HSPLandroidx/compose/ui/unit/TextUnitKt;->getSp(D)J +HSPLandroidx/compose/ui/unit/TextUnitKt;->getSp(F)J +HSPLandroidx/compose/ui/unit/TextUnitKt;->getSp(I)J +HSPLandroidx/compose/ui/unit/TextUnitKt;->isUnspecified--R2X_6o(J)Z +HSPLandroidx/compose/ui/unit/TextUnitKt;->pack(JF)J +Landroidx/compose/ui/unit/TextUnitType; +HSPLandroidx/compose/ui/unit/TextUnitType;->()V +HSPLandroidx/compose/ui/unit/TextUnitType;->(J)V +HSPLandroidx/compose/ui/unit/TextUnitType;->access$getEm$cp()J +HSPLandroidx/compose/ui/unit/TextUnitType;->access$getSp$cp()J +HSPLandroidx/compose/ui/unit/TextUnitType;->access$getUnspecified$cp()J +HSPLandroidx/compose/ui/unit/TextUnitType;->box-impl(J)Landroidx/compose/ui/unit/TextUnitType; +HSPLandroidx/compose/ui/unit/TextUnitType;->constructor-impl(J)J +HSPLandroidx/compose/ui/unit/TextUnitType;->equals-impl0(JJ)Z +HSPLandroidx/compose/ui/unit/TextUnitType;->unbox-impl()J +Landroidx/compose/ui/unit/TextUnitType$Companion; +HSPLandroidx/compose/ui/unit/TextUnitType$Companion;->()V +HSPLandroidx/compose/ui/unit/TextUnitType$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/unit/TextUnitType$Companion;->getEm-UIouoOA()J +HSPLandroidx/compose/ui/unit/TextUnitType$Companion;->getSp-UIouoOA()J +HSPLandroidx/compose/ui/unit/TextUnitType$Companion;->getUnspecified-UIouoOA()J +Landroidx/compose/ui/util/MathHelpersKt; +HSPLandroidx/compose/ui/util/MathHelpersKt;->lerp(FFF)F +Landroidx/compose/ui/viewinterop/AndroidViewHolder; +Landroidx/compose/ui/window/DialogWindowProvider; +Landroidx/compose/ui/window/PopupProperties; +HSPLandroidx/compose/ui/window/PopupProperties;->()V +HSPLandroidx/compose/ui/window/PopupProperties;->(ZZZLandroidx/compose/ui/window/SecureFlagPolicy;ZZ)V +HSPLandroidx/compose/ui/window/PopupProperties;->(ZZZLandroidx/compose/ui/window/SecureFlagPolicy;ZZILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/window/PopupProperties;->(ZZZLandroidx/compose/ui/window/SecureFlagPolicy;ZZZ)V +Landroidx/compose/ui/window/SecureFlagPolicy; +HSPLandroidx/compose/ui/window/SecureFlagPolicy;->$values()[Landroidx/compose/ui/window/SecureFlagPolicy; +HSPLandroidx/compose/ui/window/SecureFlagPolicy;->()V +HSPLandroidx/compose/ui/window/SecureFlagPolicy;->(Ljava/lang/String;I)V +PLandroidx/concurrent/futures/AbstractResolvableFuture;->()V +PLandroidx/concurrent/futures/AbstractResolvableFuture;->()V +PLandroidx/concurrent/futures/AbstractResolvableFuture;->afterDone()V +PLandroidx/concurrent/futures/AbstractResolvableFuture;->clearListeners(Landroidx/concurrent/futures/AbstractResolvableFuture$Listener;)Landroidx/concurrent/futures/AbstractResolvableFuture$Listener; +PLandroidx/concurrent/futures/AbstractResolvableFuture;->complete(Landroidx/concurrent/futures/AbstractResolvableFuture;)V +PLandroidx/concurrent/futures/AbstractResolvableFuture;->releaseWaiters()V +PLandroidx/concurrent/futures/AbstractResolvableFuture;->set(Ljava/lang/Object;)Z +PLandroidx/concurrent/futures/AbstractResolvableFuture$AtomicHelper;->()V +PLandroidx/concurrent/futures/AbstractResolvableFuture$AtomicHelper;->(Landroidx/concurrent/futures/AbstractResolvableFuture$1;)V +PLandroidx/concurrent/futures/AbstractResolvableFuture$Listener;->()V +PLandroidx/concurrent/futures/AbstractResolvableFuture$Listener;->(Ljava/lang/Runnable;Ljava/util/concurrent/Executor;)V +PLandroidx/concurrent/futures/AbstractResolvableFuture$SafeAtomicHelper;->(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 +PLandroidx/concurrent/futures/AbstractResolvableFuture$SafeAtomicHelper;->casListeners(Landroidx/concurrent/futures/AbstractResolvableFuture;Landroidx/concurrent/futures/AbstractResolvableFuture$Listener;Landroidx/concurrent/futures/AbstractResolvableFuture$Listener;)Z +PLandroidx/concurrent/futures/AbstractResolvableFuture$SafeAtomicHelper;->casValue(Landroidx/concurrent/futures/AbstractResolvableFuture;Ljava/lang/Object;Ljava/lang/Object;)Z +PLandroidx/concurrent/futures/AbstractResolvableFuture$SafeAtomicHelper;->casWaiters(Landroidx/concurrent/futures/AbstractResolvableFuture;Landroidx/concurrent/futures/AbstractResolvableFuture$Waiter;Landroidx/concurrent/futures/AbstractResolvableFuture$Waiter;)Z +Landroidx/concurrent/futures/AbstractResolvableFuture$SafeAtomicHelper$$ExternalSyntheticBackportWithForwarding0; +HSPLandroidx/concurrent/futures/AbstractResolvableFuture$SafeAtomicHelper$$ExternalSyntheticBackportWithForwarding0;->m(Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Z +PLandroidx/concurrent/futures/AbstractResolvableFuture$Waiter;->()V +PLandroidx/concurrent/futures/AbstractResolvableFuture$Waiter;->(Z)V +PLandroidx/concurrent/futures/ResolvableFuture;->()V +PLandroidx/concurrent/futures/ResolvableFuture;->create()Landroidx/concurrent/futures/ResolvableFuture; +PLandroidx/concurrent/futures/ResolvableFuture;->set(Ljava/lang/Object;)Z +Landroidx/core/R$id; +Landroidx/core/app/ActivityCompat$OnRequestPermissionsResultCallback; +Landroidx/core/app/ActivityCompat$RequestPermissionsRequestCodeValidator; +Landroidx/core/app/AppLocalesStorageHelper; +HSPLandroidx/core/app/AppLocalesStorageHelper;->()V +HSPLandroidx/core/app/AppLocalesStorageHelper;->readLocales(Landroid/content/Context;)Ljava/lang/String; +Landroidx/core/app/ComponentActivity; +HSPLandroidx/core/app/ComponentActivity;->()V +HSPLandroidx/core/app/ComponentActivity;->onCreate(Landroid/os/Bundle;)V +Landroidx/core/app/CoreComponentFactory; +HSPLandroidx/core/app/CoreComponentFactory;->()V +HSPLandroidx/core/app/CoreComponentFactory;->checkCompatWrapper(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/core/app/CoreComponentFactory;->instantiateActivity(Ljava/lang/ClassLoader;Ljava/lang/String;Landroid/content/Intent;)Landroid/app/Activity; +HSPLandroidx/core/app/CoreComponentFactory;->instantiateApplication(Ljava/lang/ClassLoader;Ljava/lang/String;)Landroid/app/Application; +HSPLandroidx/core/app/CoreComponentFactory;->instantiateProvider(Ljava/lang/ClassLoader;Ljava/lang/String;)Landroid/content/ContentProvider; +PLandroidx/core/app/CoreComponentFactory;->instantiateReceiver(Ljava/lang/ClassLoader;Ljava/lang/String;Landroid/content/Intent;)Landroid/content/BroadcastReceiver; +HSPLandroidx/core/app/CoreComponentFactory;->instantiateService(Ljava/lang/ClassLoader;Ljava/lang/String;Landroid/content/Intent;)Landroid/app/Service; +Landroidx/core/app/CoreComponentFactory$CompatWrapped; +Landroidx/core/app/LocaleManagerCompat; +HSPLandroidx/core/app/LocaleManagerCompat;->getApplicationLocales(Landroid/content/Context;)Landroidx/core/os/LocaleListCompat; +HSPLandroidx/core/app/LocaleManagerCompat;->getLocaleManagerForApplication(Landroid/content/Context;)Ljava/lang/Object; +Landroidx/core/app/LocaleManagerCompat$Api33Impl; +HSPLandroidx/core/app/LocaleManagerCompat$Api33Impl;->localeManagerGetApplicationLocales(Ljava/lang/Object;)Landroid/os/LocaleList; +Landroidx/core/app/NavUtils; +HSPLandroidx/core/app/NavUtils;->getParentActivityName(Landroid/app/Activity;)Ljava/lang/String; +HSPLandroidx/core/app/NavUtils;->getParentActivityName(Landroid/content/Context;Landroid/content/ComponentName;)Ljava/lang/String; +Landroidx/core/app/OnMultiWindowModeChangedProvider; +Landroidx/core/app/OnNewIntentProvider; +Landroidx/core/app/OnPictureInPictureModeChangedProvider; +Landroidx/core/app/TaskStackBuilder$SupportParentable; +Landroidx/core/content/ContextCompat; +HSPLandroidx/core/content/ContextCompat;->()V +HSPLandroidx/core/content/ContextCompat;->createDeviceProtectedStorageContext(Landroid/content/Context;)Landroid/content/Context; +HSPLandroidx/core/content/ContextCompat;->getContextForLanguage(Landroid/content/Context;)Landroid/content/Context; +HSPLandroidx/core/content/ContextCompat;->getDrawable(Landroid/content/Context;I)Landroid/graphics/drawable/Drawable; +HSPLandroidx/core/content/ContextCompat;->getSystemService(Landroid/content/Context;Ljava/lang/Class;)Ljava/lang/Object; +Landroidx/core/content/ContextCompat$Api21Impl; +HSPLandroidx/core/content/ContextCompat$Api21Impl;->getDrawable(Landroid/content/Context;I)Landroid/graphics/drawable/Drawable; +Landroidx/core/content/ContextCompat$Api23Impl; +HSPLandroidx/core/content/ContextCompat$Api23Impl;->getSystemService(Landroid/content/Context;Ljava/lang/Class;)Ljava/lang/Object; +Landroidx/core/content/ContextCompat$Api24Impl; +HSPLandroidx/core/content/ContextCompat$Api24Impl;->createDeviceProtectedStorageContext(Landroid/content/Context;)Landroid/content/Context; +Landroidx/core/content/FileProvider; +HSPLandroidx/core/content/FileProvider;->()V +HSPLandroidx/core/content/FileProvider;->()V +HSPLandroidx/core/content/FileProvider;->attachInfo(Landroid/content/Context;Landroid/content/pm/ProviderInfo;)V +HSPLandroidx/core/content/FileProvider;->onCreate()Z +Landroidx/core/content/OnConfigurationChangedProvider; +Landroidx/core/content/OnTrimMemoryProvider; +Landroidx/core/graphics/Insets; +HSPLandroidx/core/graphics/Insets;->()V +HSPLandroidx/core/graphics/Insets;->(IIII)V +HSPLandroidx/core/graphics/Insets;->equals(Ljava/lang/Object;)Z +HSPLandroidx/core/graphics/Insets;->of(IIII)Landroidx/core/graphics/Insets; +HSPLandroidx/core/graphics/Insets;->toCompatInsets(Landroid/graphics/Insets;)Landroidx/core/graphics/Insets; +HSPLandroidx/core/graphics/Insets;->toPlatformInsets()Landroid/graphics/Insets; +Landroidx/core/graphics/Insets$Api29Impl; +HSPLandroidx/core/graphics/Insets$Api29Impl;->of(IIII)Landroid/graphics/Insets; +Landroidx/core/graphics/TypefaceCompat; +HSPLandroidx/core/graphics/TypefaceCompat;->()V +HSPLandroidx/core/graphics/TypefaceCompat;->createFromFontInfo(Landroid/content/Context;Landroid/os/CancellationSignal;[Landroidx/core/provider/FontsContractCompat$FontInfo;I)Landroid/graphics/Typeface; +Landroidx/core/graphics/TypefaceCompatApi29Impl; +HSPLandroidx/core/graphics/TypefaceCompatApi29Impl;->()V +HSPLandroidx/core/graphics/TypefaceCompatApi29Impl;->createFromFontInfo(Landroid/content/Context;Landroid/os/CancellationSignal;[Landroidx/core/provider/FontsContractCompat$FontInfo;I)Landroid/graphics/Typeface; +HSPLandroidx/core/graphics/TypefaceCompatApi29Impl;->findBaseFont(Landroid/graphics/fonts/FontFamily;I)Landroid/graphics/fonts/Font; +HSPLandroidx/core/graphics/TypefaceCompatApi29Impl;->getMatchScore(Landroid/graphics/fonts/FontStyle;Landroid/graphics/fonts/FontStyle;)I +Landroidx/core/graphics/TypefaceCompatBaseImpl; +HSPLandroidx/core/graphics/TypefaceCompatBaseImpl;->()V +Landroidx/core/graphics/TypefaceCompatUtil; +HSPLandroidx/core/graphics/TypefaceCompatUtil;->mmap(Landroid/content/Context;Landroid/os/CancellationSignal;Landroid/net/Uri;)Ljava/nio/ByteBuffer; +Landroidx/core/graphics/TypefaceCompatUtil$Api19Impl; +HSPLandroidx/core/graphics/TypefaceCompatUtil$Api19Impl;->openFileDescriptor(Landroid/content/ContentResolver;Landroid/net/Uri;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/os/ParcelFileDescriptor; +Landroidx/core/graphics/drawable/TintAwareDrawable; +Landroidx/core/hardware/fingerprint/FingerprintManagerCompat; +Landroidx/core/net/ConnectivityManagerCompat; +HSPLandroidx/core/net/ConnectivityManagerCompat;->isActiveNetworkMetered(Landroid/net/ConnectivityManager;)Z +Landroidx/core/net/ConnectivityManagerCompat$Api16Impl; +HSPLandroidx/core/net/ConnectivityManagerCompat$Api16Impl;->isActiveNetworkMetered(Landroid/net/ConnectivityManager;)Z +Landroidx/core/os/BundleKt; +HSPLandroidx/core/os/BundleKt;->bundleOf([Lkotlin/Pair;)Landroid/os/Bundle; +Landroidx/core/os/HandlerCompat; +HSPLandroidx/core/os/HandlerCompat;->createAsync(Landroid/os/Looper;)Landroid/os/Handler; +Landroidx/core/os/HandlerCompat$Api28Impl; +HSPLandroidx/core/os/HandlerCompat$Api28Impl;->createAsync(Landroid/os/Looper;)Landroid/os/Handler; +Landroidx/core/os/LocaleListCompat; +HSPLandroidx/core/os/LocaleListCompat;->()V +HSPLandroidx/core/os/LocaleListCompat;->(Landroidx/core/os/LocaleListInterface;)V +HSPLandroidx/core/os/LocaleListCompat;->create([Ljava/util/Locale;)Landroidx/core/os/LocaleListCompat; +HSPLandroidx/core/os/LocaleListCompat;->forLanguageTags(Ljava/lang/String;)Landroidx/core/os/LocaleListCompat; +HSPLandroidx/core/os/LocaleListCompat;->isEmpty()Z +HSPLandroidx/core/os/LocaleListCompat;->wrap(Landroid/os/LocaleList;)Landroidx/core/os/LocaleListCompat; +Landroidx/core/os/LocaleListCompat$$ExternalSyntheticApiModelOutline0; +HSPLandroidx/core/os/LocaleListCompat$$ExternalSyntheticApiModelOutline0;->m$1()V +HSPLandroidx/core/os/LocaleListCompat$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/view/WindowInsetsAnimation$Bounds;)Landroid/graphics/Insets; +HSPLandroidx/core/os/LocaleListCompat$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/view/WindowInsetsAnimation;)F +HSPLandroidx/core/os/LocaleListCompat$$ExternalSyntheticApiModelOutline0;->m()Landroid/view/WindowInsets$Builder; +HSPLandroidx/core/os/LocaleListCompat$$ExternalSyntheticApiModelOutline0;->m(ILandroid/view/animation/Interpolator;J)Landroid/view/WindowInsetsAnimation; +HSPLandroidx/core/os/LocaleListCompat$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/Insets;Landroid/graphics/Insets;)Landroid/view/WindowInsetsAnimation$Bounds; +HSPLandroidx/core/os/LocaleListCompat$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/Typeface;IZ)Landroid/graphics/Typeface; +HSPLandroidx/core/os/LocaleListCompat$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;Landroid/view/WindowInsetsAnimation$Callback;)V +HSPLandroidx/core/os/LocaleListCompat$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/WindowInsets$Builder;)Landroid/view/WindowInsets; +HSPLandroidx/core/os/LocaleListCompat$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/WindowInsetsAnimation$Bounds;)Landroid/graphics/Insets; +HSPLandroidx/core/os/LocaleListCompat$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/WindowInsetsAnimation;)J +HSPLandroidx/core/os/LocaleListCompat$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/WindowInsetsAnimation;F)V +HSPLandroidx/core/os/LocaleListCompat$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/WindowInsetsController;II)V +HSPLandroidx/core/os/LocaleListCompat$$ExternalSyntheticApiModelOutline0;->m(Ljava/lang/Object;)Landroid/view/WindowInsetsAnimation; +Landroidx/core/os/LocaleListCompat$Api21Impl; +HSPLandroidx/core/os/LocaleListCompat$Api21Impl;->()V +HSPLandroidx/core/os/LocaleListCompat$Api21Impl;->forLanguageTag(Ljava/lang/String;)Ljava/util/Locale; +Landroidx/core/os/LocaleListCompat$Api24Impl; +HSPLandroidx/core/os/LocaleListCompat$Api24Impl;->createLocaleList([Ljava/util/Locale;)Landroid/os/LocaleList; +Landroidx/core/os/LocaleListInterface; +Landroidx/core/os/LocaleListPlatformWrapper; +HSPLandroidx/core/os/LocaleListPlatformWrapper;->(Ljava/lang/Object;)V +HSPLandroidx/core/os/LocaleListPlatformWrapper;->isEmpty()Z +Landroidx/core/os/TraceCompat; +HSPLandroidx/core/os/TraceCompat;->()V +HSPLandroidx/core/os/TraceCompat;->beginSection(Ljava/lang/String;)V +HSPLandroidx/core/os/TraceCompat;->endSection()V +Landroidx/core/os/TraceCompat$Api18Impl; +HSPLandroidx/core/os/TraceCompat$Api18Impl;->beginSection(Ljava/lang/String;)V +HSPLandroidx/core/os/TraceCompat$Api18Impl;->endSection()V +Landroidx/core/os/UserManagerCompat; +HSPLandroidx/core/os/UserManagerCompat;->isUserUnlocked(Landroid/content/Context;)Z +Landroidx/core/os/UserManagerCompat$Api24Impl; +HSPLandroidx/core/os/UserManagerCompat$Api24Impl;->isUserUnlocked(Landroid/content/Context;)Z +Landroidx/core/provider/FontProvider; +HSPLandroidx/core/provider/FontProvider;->()V +HSPLandroidx/core/provider/FontProvider;->convertToByteArrayList([Landroid/content/pm/Signature;)Ljava/util/List; +HSPLandroidx/core/provider/FontProvider;->equalsByteArrayList(Ljava/util/List;Ljava/util/List;)Z +HSPLandroidx/core/provider/FontProvider;->getCertificates(Landroidx/core/provider/FontRequest;Landroid/content/res/Resources;)Ljava/util/List; +HSPLandroidx/core/provider/FontProvider;->getFontFamilyResult(Landroid/content/Context;Landroidx/core/provider/FontRequest;Landroid/os/CancellationSignal;)Landroidx/core/provider/FontsContractCompat$FontFamilyResult; +HSPLandroidx/core/provider/FontProvider;->getProvider(Landroid/content/pm/PackageManager;Landroidx/core/provider/FontRequest;Landroid/content/res/Resources;)Landroid/content/pm/ProviderInfo; +HSPLandroidx/core/provider/FontProvider;->query(Landroid/content/Context;Landroidx/core/provider/FontRequest;Ljava/lang/String;Landroid/os/CancellationSignal;)[Landroidx/core/provider/FontsContractCompat$FontInfo; +Landroidx/core/provider/FontProvider$$ExternalSyntheticLambda0; +HSPLandroidx/core/provider/FontProvider$$ExternalSyntheticLambda0;->()V +Landroidx/core/provider/FontProvider$Api16Impl; +HSPLandroidx/core/provider/FontProvider$Api16Impl;->query(Landroid/content/ContentResolver;Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)Landroid/database/Cursor; +Landroidx/core/provider/FontRequest; +HSPLandroidx/core/provider/FontRequest;->(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;)V +HSPLandroidx/core/provider/FontRequest;->createIdentifier(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; +HSPLandroidx/core/provider/FontRequest;->getCertificates()Ljava/util/List; +HSPLandroidx/core/provider/FontRequest;->getProviderAuthority()Ljava/lang/String; +HSPLandroidx/core/provider/FontRequest;->getProviderPackage()Ljava/lang/String; +HSPLandroidx/core/provider/FontRequest;->getQuery()Ljava/lang/String; +Landroidx/core/provider/FontsContractCompat; +HSPLandroidx/core/provider/FontsContractCompat;->buildTypeface(Landroid/content/Context;Landroid/os/CancellationSignal;[Landroidx/core/provider/FontsContractCompat$FontInfo;)Landroid/graphics/Typeface; +HSPLandroidx/core/provider/FontsContractCompat;->fetchFonts(Landroid/content/Context;Landroid/os/CancellationSignal;Landroidx/core/provider/FontRequest;)Landroidx/core/provider/FontsContractCompat$FontFamilyResult; +Landroidx/core/provider/FontsContractCompat$FontFamilyResult; +HSPLandroidx/core/provider/FontsContractCompat$FontFamilyResult;->(I[Landroidx/core/provider/FontsContractCompat$FontInfo;)V +HSPLandroidx/core/provider/FontsContractCompat$FontFamilyResult;->create(I[Landroidx/core/provider/FontsContractCompat$FontInfo;)Landroidx/core/provider/FontsContractCompat$FontFamilyResult; +HSPLandroidx/core/provider/FontsContractCompat$FontFamilyResult;->getFonts()[Landroidx/core/provider/FontsContractCompat$FontInfo; +HSPLandroidx/core/provider/FontsContractCompat$FontFamilyResult;->getStatusCode()I +Landroidx/core/provider/FontsContractCompat$FontInfo; +HSPLandroidx/core/provider/FontsContractCompat$FontInfo;->(Landroid/net/Uri;IIZI)V +HSPLandroidx/core/provider/FontsContractCompat$FontInfo;->create(Landroid/net/Uri;IIZI)Landroidx/core/provider/FontsContractCompat$FontInfo; +HSPLandroidx/core/provider/FontsContractCompat$FontInfo;->getResultCode()I +HSPLandroidx/core/provider/FontsContractCompat$FontInfo;->getTtcIndex()I +HSPLandroidx/core/provider/FontsContractCompat$FontInfo;->getUri()Landroid/net/Uri; +HSPLandroidx/core/provider/FontsContractCompat$FontInfo;->getWeight()I +HSPLandroidx/core/provider/FontsContractCompat$FontInfo;->isItalic()Z +Landroidx/core/splashscreen/R$attr; +Landroidx/core/splashscreen/SplashScreen; +HSPLandroidx/core/splashscreen/SplashScreen;->()V +HSPLandroidx/core/splashscreen/SplashScreen;->(Landroid/app/Activity;)V +HSPLandroidx/core/splashscreen/SplashScreen;->(Landroid/app/Activity;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/core/splashscreen/SplashScreen;->access$install(Landroidx/core/splashscreen/SplashScreen;)V +HSPLandroidx/core/splashscreen/SplashScreen;->install()V +Landroidx/core/splashscreen/SplashScreen$Companion; +HSPLandroidx/core/splashscreen/SplashScreen$Companion;->()V +HSPLandroidx/core/splashscreen/SplashScreen$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/core/splashscreen/SplashScreen$Companion;->installSplashScreen(Landroid/app/Activity;)Landroidx/core/splashscreen/SplashScreen; +Landroidx/core/splashscreen/SplashScreen$Impl; +HSPLandroidx/core/splashscreen/SplashScreen$Impl;->(Landroid/app/Activity;)V +HSPLandroidx/core/splashscreen/SplashScreen$Impl;->getActivity()Landroid/app/Activity; +HSPLandroidx/core/splashscreen/SplashScreen$Impl;->setPostSplashScreenTheme(Landroid/content/res/Resources$Theme;Landroid/util/TypedValue;)V +Landroidx/core/splashscreen/SplashScreen$Impl$$ExternalSyntheticLambda1; +HSPLandroidx/core/splashscreen/SplashScreen$Impl$$ExternalSyntheticLambda1;->()V +Landroidx/core/splashscreen/SplashScreen$Impl31; +HSPLandroidx/core/splashscreen/SplashScreen$Impl31;->(Landroid/app/Activity;)V +HSPLandroidx/core/splashscreen/SplashScreen$Impl31;->install()V +Landroidx/core/splashscreen/SplashScreen$Impl31$hierarchyListener$1; +HSPLandroidx/core/splashscreen/SplashScreen$Impl31$hierarchyListener$1;->(Landroidx/core/splashscreen/SplashScreen$Impl31;Landroid/app/Activity;)V +Landroidx/core/splashscreen/SplashScreen$KeepOnScreenCondition; +Landroidx/core/text/TextUtilsCompat; +HSPLandroidx/core/text/TextUtilsCompat;->()V +HSPLandroidx/core/text/TextUtilsCompat;->getLayoutDirectionFromLocale(Ljava/util/Locale;)I +Landroidx/core/text/TextUtilsCompat$Api17Impl; +HSPLandroidx/core/text/TextUtilsCompat$Api17Impl;->getLayoutDirectionFromLocale(Ljava/util/Locale;)I +Landroidx/core/util/Consumer; +Landroidx/core/util/Preconditions; +HSPLandroidx/core/util/Preconditions;->checkArgument(ZLjava/lang/Object;)V +HSPLandroidx/core/util/Preconditions;->checkArgumentNonnegative(ILjava/lang/String;)I +HSPLandroidx/core/util/Preconditions;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/core/util/Preconditions;->checkNotNull(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/core/util/Preconditions;->checkState(ZLjava/lang/String;)V +Landroidx/core/view/AccessibilityDelegateCompat; +HSPLandroidx/core/view/AccessibilityDelegateCompat;->()V +HSPLandroidx/core/view/AccessibilityDelegateCompat;->()V +HSPLandroidx/core/view/AccessibilityDelegateCompat;->(Landroid/view/View$AccessibilityDelegate;)V +HSPLandroidx/core/view/AccessibilityDelegateCompat;->dispatchPopulateAccessibilityEvent(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)Z +HSPLandroidx/core/view/AccessibilityDelegateCompat;->getBridge()Landroid/view/View$AccessibilityDelegate; +HSPLandroidx/core/view/AccessibilityDelegateCompat;->onInitializeAccessibilityEvent(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)V +HSPLandroidx/core/view/AccessibilityDelegateCompat;->onPopulateAccessibilityEvent(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)V +HSPLandroidx/core/view/AccessibilityDelegateCompat;->onRequestSendAccessibilityEvent(Landroid/view/ViewGroup;Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)Z +HSPLandroidx/core/view/AccessibilityDelegateCompat;->sendAccessibilityEvent(Landroid/view/View;I)V +HSPLandroidx/core/view/AccessibilityDelegateCompat;->sendAccessibilityEventUnchecked(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)V +Landroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter; +HSPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->(Landroidx/core/view/AccessibilityDelegateCompat;)V +HSPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->dispatchPopulateAccessibilityEvent(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)Z +HSPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->getAccessibilityNodeProvider(Landroid/view/View;)Landroid/view/accessibility/AccessibilityNodeProvider; +HSPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->onInitializeAccessibilityEvent(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)V +HSPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->onPopulateAccessibilityEvent(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)V +HSPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->onRequestSendAccessibilityEvent(Landroid/view/ViewGroup;Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)Z +HSPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->sendAccessibilityEvent(Landroid/view/View;I)V +HSPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->sendAccessibilityEventUnchecked(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)V +Landroidx/core/view/DisplayCutoutCompat; +HSPLandroidx/core/view/DisplayCutoutCompat;->(Landroid/view/DisplayCutout;)V +HSPLandroidx/core/view/DisplayCutoutCompat;->getWaterfallInsets()Landroidx/core/graphics/Insets; +HSPLandroidx/core/view/DisplayCutoutCompat;->wrap(Landroid/view/DisplayCutout;)Landroidx/core/view/DisplayCutoutCompat; +Landroidx/core/view/DisplayCutoutCompat$Api30Impl; +HSPLandroidx/core/view/DisplayCutoutCompat$Api30Impl;->getWaterfallInsets(Landroid/view/DisplayCutout;)Landroid/graphics/Insets; +Landroidx/core/view/KeyEventDispatcher$Component; +Landroidx/core/view/LayoutInflaterCompat; +HSPLandroidx/core/view/LayoutInflaterCompat;->setFactory2(Landroid/view/LayoutInflater;Landroid/view/LayoutInflater$Factory2;)V +Landroidx/core/view/MenuHost; +Landroidx/core/view/MenuHostHelper; +HSPLandroidx/core/view/MenuHostHelper;->(Ljava/lang/Runnable;)V +HSPLandroidx/core/view/MenuHostHelper;->addMenuProvider(Landroidx/core/view/MenuProvider;)V +Landroidx/core/view/MenuProvider; +Landroidx/core/view/NestedScrollingParent; +Landroidx/core/view/NestedScrollingParent2; +Landroidx/core/view/NestedScrollingParent3; +Landroidx/core/view/OnApplyWindowInsetsListener; +Landroidx/core/view/OnReceiveContentViewBehavior; +Landroidx/core/view/SoftwareKeyboardControllerCompat; +HSPLandroidx/core/view/SoftwareKeyboardControllerCompat;->(Landroid/view/View;)V +Landroidx/core/view/SoftwareKeyboardControllerCompat$Impl; +HSPLandroidx/core/view/SoftwareKeyboardControllerCompat$Impl;->()V +Landroidx/core/view/SoftwareKeyboardControllerCompat$Impl20; +HSPLandroidx/core/view/SoftwareKeyboardControllerCompat$Impl20;->(Landroid/view/View;)V +Landroidx/core/view/SoftwareKeyboardControllerCompat$Impl30; +HSPLandroidx/core/view/SoftwareKeyboardControllerCompat$Impl30;->(Landroid/view/View;)V +Landroidx/core/view/ViewCompat; +HSPLandroidx/core/view/ViewCompat;->()V +HSPLandroidx/core/view/ViewCompat;->getImportantForAccessibility(Landroid/view/View;)I +HSPLandroidx/core/view/ViewCompat;->getParentForAccessibility(Landroid/view/View;)Landroid/view/ViewParent; +HSPLandroidx/core/view/ViewCompat;->getRootWindowInsets(Landroid/view/View;)Landroidx/core/view/WindowInsetsCompat; +HSPLandroidx/core/view/ViewCompat;->isAttachedToWindow(Landroid/view/View;)Z +HSPLandroidx/core/view/ViewCompat;->isLaidOut(Landroid/view/View;)Z +HSPLandroidx/core/view/ViewCompat;->onApplyWindowInsets(Landroid/view/View;Landroidx/core/view/WindowInsetsCompat;)Landroidx/core/view/WindowInsetsCompat; +HSPLandroidx/core/view/ViewCompat;->postOnAnimation(Landroid/view/View;Ljava/lang/Runnable;)V +HSPLandroidx/core/view/ViewCompat;->setAccessibilityDelegate(Landroid/view/View;Landroidx/core/view/AccessibilityDelegateCompat;)V +HSPLandroidx/core/view/ViewCompat;->setImportantForAccessibility(Landroid/view/View;I)V +HSPLandroidx/core/view/ViewCompat;->setImportantForAccessibilityIfNeeded(Landroid/view/View;)V +HSPLandroidx/core/view/ViewCompat;->setOnApplyWindowInsetsListener(Landroid/view/View;Landroidx/core/view/OnApplyWindowInsetsListener;)V +HSPLandroidx/core/view/ViewCompat;->setWindowInsetsAnimationCallback(Landroid/view/View;Landroidx/core/view/WindowInsetsAnimationCompat$Callback;)V +Landroidx/core/view/ViewCompat$$ExternalSyntheticLambda0; +HSPLandroidx/core/view/ViewCompat$$ExternalSyntheticLambda0;->()V +Landroidx/core/view/ViewCompat$AccessibilityPaneVisibilityManager; +HSPLandroidx/core/view/ViewCompat$AccessibilityPaneVisibilityManager;->()V +Landroidx/core/view/ViewCompat$Api16Impl; +HSPLandroidx/core/view/ViewCompat$Api16Impl;->getImportantForAccessibility(Landroid/view/View;)I +HSPLandroidx/core/view/ViewCompat$Api16Impl;->getParentForAccessibility(Landroid/view/View;)Landroid/view/ViewParent; +HSPLandroidx/core/view/ViewCompat$Api16Impl;->postOnAnimation(Landroid/view/View;Ljava/lang/Runnable;)V +HSPLandroidx/core/view/ViewCompat$Api16Impl;->setImportantForAccessibility(Landroid/view/View;I)V +Landroidx/core/view/ViewCompat$Api19Impl; +HSPLandroidx/core/view/ViewCompat$Api19Impl;->isAttachedToWindow(Landroid/view/View;)Z +HSPLandroidx/core/view/ViewCompat$Api19Impl;->isLaidOut(Landroid/view/View;)Z +Landroidx/core/view/ViewCompat$Api20Impl; +HSPLandroidx/core/view/ViewCompat$Api20Impl;->onApplyWindowInsets(Landroid/view/View;Landroid/view/WindowInsets;)Landroid/view/WindowInsets; +Landroidx/core/view/ViewCompat$Api21Impl; +HSPLandroidx/core/view/ViewCompat$Api21Impl;->setOnApplyWindowInsetsListener(Landroid/view/View;Landroidx/core/view/OnApplyWindowInsetsListener;)V +Landroidx/core/view/ViewCompat$Api21Impl$1; +HSPLandroidx/core/view/ViewCompat$Api21Impl$1;->(Landroid/view/View;Landroidx/core/view/OnApplyWindowInsetsListener;)V +HSPLandroidx/core/view/ViewCompat$Api21Impl$1;->onApplyWindowInsets(Landroid/view/View;Landroid/view/WindowInsets;)Landroid/view/WindowInsets; +Landroidx/core/view/ViewCompat$Api23Impl; +HSPLandroidx/core/view/ViewCompat$Api23Impl;->getRootWindowInsets(Landroid/view/View;)Landroidx/core/view/WindowInsetsCompat; +Landroidx/core/view/ViewPropertyAnimatorCompat; +Landroidx/core/view/WindowCompat; +HSPLandroidx/core/view/WindowCompat;->getInsetsController(Landroid/view/Window;Landroid/view/View;)Landroidx/core/view/WindowInsetsControllerCompat; +HSPLandroidx/core/view/WindowCompat;->setDecorFitsSystemWindows(Landroid/view/Window;Z)V +Landroidx/core/view/WindowCompat$Api30Impl; +HSPLandroidx/core/view/WindowCompat$Api30Impl;->setDecorFitsSystemWindows(Landroid/view/Window;Z)V +Landroidx/core/view/WindowInsetsAnimationCompat; +HSPLandroidx/core/view/WindowInsetsAnimationCompat;->(ILandroid/view/animation/Interpolator;J)V +HSPLandroidx/core/view/WindowInsetsAnimationCompat;->(Landroid/view/WindowInsetsAnimation;)V +HSPLandroidx/core/view/WindowInsetsAnimationCompat;->getDurationMillis()J +HSPLandroidx/core/view/WindowInsetsAnimationCompat;->setCallback(Landroid/view/View;Landroidx/core/view/WindowInsetsAnimationCompat$Callback;)V +HSPLandroidx/core/view/WindowInsetsAnimationCompat;->setFraction(F)V +HSPLandroidx/core/view/WindowInsetsAnimationCompat;->toWindowInsetsAnimationCompat(Landroid/view/WindowInsetsAnimation;)Landroidx/core/view/WindowInsetsAnimationCompat; +Landroidx/core/view/WindowInsetsAnimationCompat$BoundsCompat; +HSPLandroidx/core/view/WindowInsetsAnimationCompat$BoundsCompat;->(Landroid/view/WindowInsetsAnimation$Bounds;)V +HSPLandroidx/core/view/WindowInsetsAnimationCompat$BoundsCompat;->getLowerBound()Landroidx/core/graphics/Insets; +HSPLandroidx/core/view/WindowInsetsAnimationCompat$BoundsCompat;->getUpperBound()Landroidx/core/graphics/Insets; +HSPLandroidx/core/view/WindowInsetsAnimationCompat$BoundsCompat;->toBounds()Landroid/view/WindowInsetsAnimation$Bounds; +HSPLandroidx/core/view/WindowInsetsAnimationCompat$BoundsCompat;->toBoundsCompat(Landroid/view/WindowInsetsAnimation$Bounds;)Landroidx/core/view/WindowInsetsAnimationCompat$BoundsCompat; +Landroidx/core/view/WindowInsetsAnimationCompat$Callback; +HSPLandroidx/core/view/WindowInsetsAnimationCompat$Callback;->(I)V +HSPLandroidx/core/view/WindowInsetsAnimationCompat$Callback;->getDispatchMode()I +HSPLandroidx/core/view/WindowInsetsAnimationCompat$Callback;->onEnd(Landroidx/core/view/WindowInsetsAnimationCompat;)V +HSPLandroidx/core/view/WindowInsetsAnimationCompat$Callback;->onPrepare(Landroidx/core/view/WindowInsetsAnimationCompat;)V +HSPLandroidx/core/view/WindowInsetsAnimationCompat$Callback;->onStart(Landroidx/core/view/WindowInsetsAnimationCompat;Landroidx/core/view/WindowInsetsAnimationCompat$BoundsCompat;)Landroidx/core/view/WindowInsetsAnimationCompat$BoundsCompat; +Landroidx/core/view/WindowInsetsAnimationCompat$Impl; +HSPLandroidx/core/view/WindowInsetsAnimationCompat$Impl;->(ILandroid/view/animation/Interpolator;J)V +Landroidx/core/view/WindowInsetsAnimationCompat$Impl30; +HSPLandroidx/core/view/WindowInsetsAnimationCompat$Impl30;->(ILandroid/view/animation/Interpolator;J)V +HSPLandroidx/core/view/WindowInsetsAnimationCompat$Impl30;->(Landroid/view/WindowInsetsAnimation;)V +HSPLandroidx/core/view/WindowInsetsAnimationCompat$Impl30;->createPlatformBounds(Landroidx/core/view/WindowInsetsAnimationCompat$BoundsCompat;)Landroid/view/WindowInsetsAnimation$Bounds; +HSPLandroidx/core/view/WindowInsetsAnimationCompat$Impl30;->getDurationMillis()J +HSPLandroidx/core/view/WindowInsetsAnimationCompat$Impl30;->getHigherBounds(Landroid/view/WindowInsetsAnimation$Bounds;)Landroidx/core/graphics/Insets; +HSPLandroidx/core/view/WindowInsetsAnimationCompat$Impl30;->getLowerBounds(Landroid/view/WindowInsetsAnimation$Bounds;)Landroidx/core/graphics/Insets; +HSPLandroidx/core/view/WindowInsetsAnimationCompat$Impl30;->setCallback(Landroid/view/View;Landroidx/core/view/WindowInsetsAnimationCompat$Callback;)V +HSPLandroidx/core/view/WindowInsetsAnimationCompat$Impl30;->setFraction(F)V +Landroidx/core/view/WindowInsetsAnimationCompat$Impl30$ProxyCallback; +HSPLandroidx/core/view/WindowInsetsAnimationCompat$Impl30$ProxyCallback;->(Landroidx/core/view/WindowInsetsAnimationCompat$Callback;)V +HSPLandroidx/core/view/WindowInsetsAnimationCompat$Impl30$ProxyCallback;->getWindowInsetsAnimationCompat(Landroid/view/WindowInsetsAnimation;)Landroidx/core/view/WindowInsetsAnimationCompat; +HSPLandroidx/core/view/WindowInsetsAnimationCompat$Impl30$ProxyCallback;->onEnd(Landroid/view/WindowInsetsAnimation;)V +HSPLandroidx/core/view/WindowInsetsAnimationCompat$Impl30$ProxyCallback;->onPrepare(Landroid/view/WindowInsetsAnimation;)V +HSPLandroidx/core/view/WindowInsetsAnimationCompat$Impl30$ProxyCallback;->onProgress(Landroid/view/WindowInsets;Ljava/util/List;)Landroid/view/WindowInsets; +HSPLandroidx/core/view/WindowInsetsAnimationCompat$Impl30$ProxyCallback;->onStart(Landroid/view/WindowInsetsAnimation;Landroid/view/WindowInsetsAnimation$Bounds;)Landroid/view/WindowInsetsAnimation$Bounds; +Landroidx/core/view/WindowInsetsCompat; +HSPLandroidx/core/view/WindowInsetsCompat;->()V +HSPLandroidx/core/view/WindowInsetsCompat;->(Landroid/view/WindowInsets;)V +HSPLandroidx/core/view/WindowInsetsCompat;->(Landroidx/core/view/WindowInsetsCompat;)V +HSPLandroidx/core/view/WindowInsetsCompat;->consumeDisplayCutout()Landroidx/core/view/WindowInsetsCompat; +HSPLandroidx/core/view/WindowInsetsCompat;->consumeStableInsets()Landroidx/core/view/WindowInsetsCompat; +HSPLandroidx/core/view/WindowInsetsCompat;->consumeSystemWindowInsets()Landroidx/core/view/WindowInsetsCompat; +HSPLandroidx/core/view/WindowInsetsCompat;->copyRootViewBounds(Landroid/view/View;)V +HSPLandroidx/core/view/WindowInsetsCompat;->getDisplayCutout()Landroidx/core/view/DisplayCutoutCompat; +HSPLandroidx/core/view/WindowInsetsCompat;->getInsets(I)Landroidx/core/graphics/Insets; +HSPLandroidx/core/view/WindowInsetsCompat;->getInsetsIgnoringVisibility(I)Landroidx/core/graphics/Insets; +HSPLandroidx/core/view/WindowInsetsCompat;->getSystemWindowInsetTop()I +HSPLandroidx/core/view/WindowInsetsCompat;->isVisible(I)Z +HSPLandroidx/core/view/WindowInsetsCompat;->setOverriddenInsets([Landroidx/core/graphics/Insets;)V +HSPLandroidx/core/view/WindowInsetsCompat;->setRootWindowInsets(Landroidx/core/view/WindowInsetsCompat;)V +HSPLandroidx/core/view/WindowInsetsCompat;->toWindowInsets()Landroid/view/WindowInsets; +HSPLandroidx/core/view/WindowInsetsCompat;->toWindowInsetsCompat(Landroid/view/WindowInsets;)Landroidx/core/view/WindowInsetsCompat; +HSPLandroidx/core/view/WindowInsetsCompat;->toWindowInsetsCompat(Landroid/view/WindowInsets;Landroid/view/View;)Landroidx/core/view/WindowInsetsCompat; +Landroidx/core/view/WindowInsetsCompat$Builder; +HSPLandroidx/core/view/WindowInsetsCompat$Builder;->()V +HSPLandroidx/core/view/WindowInsetsCompat$Builder;->build()Landroidx/core/view/WindowInsetsCompat; +Landroidx/core/view/WindowInsetsCompat$BuilderImpl; +HSPLandroidx/core/view/WindowInsetsCompat$BuilderImpl;->()V +HSPLandroidx/core/view/WindowInsetsCompat$BuilderImpl;->(Landroidx/core/view/WindowInsetsCompat;)V +HSPLandroidx/core/view/WindowInsetsCompat$BuilderImpl;->applyInsetTypes()V +Landroidx/core/view/WindowInsetsCompat$BuilderImpl29; +HSPLandroidx/core/view/WindowInsetsCompat$BuilderImpl29;->()V +HSPLandroidx/core/view/WindowInsetsCompat$BuilderImpl29;->build()Landroidx/core/view/WindowInsetsCompat; +Landroidx/core/view/WindowInsetsCompat$BuilderImpl30; +HSPLandroidx/core/view/WindowInsetsCompat$BuilderImpl30;->()V +Landroidx/core/view/WindowInsetsCompat$Impl; +HSPLandroidx/core/view/WindowInsetsCompat$Impl;->()V +HSPLandroidx/core/view/WindowInsetsCompat$Impl;->(Landroidx/core/view/WindowInsetsCompat;)V +Landroidx/core/view/WindowInsetsCompat$Impl20; +HSPLandroidx/core/view/WindowInsetsCompat$Impl20;->()V +HSPLandroidx/core/view/WindowInsetsCompat$Impl20;->(Landroidx/core/view/WindowInsetsCompat;Landroid/view/WindowInsets;)V +HSPLandroidx/core/view/WindowInsetsCompat$Impl20;->getSystemWindowInsets()Landroidx/core/graphics/Insets; +HSPLandroidx/core/view/WindowInsetsCompat$Impl20;->setOverriddenInsets([Landroidx/core/graphics/Insets;)V +HSPLandroidx/core/view/WindowInsetsCompat$Impl20;->setRootWindowInsets(Landroidx/core/view/WindowInsetsCompat;)V +Landroidx/core/view/WindowInsetsCompat$Impl21; +HSPLandroidx/core/view/WindowInsetsCompat$Impl21;->(Landroidx/core/view/WindowInsetsCompat;Landroid/view/WindowInsets;)V +HSPLandroidx/core/view/WindowInsetsCompat$Impl21;->consumeStableInsets()Landroidx/core/view/WindowInsetsCompat; +HSPLandroidx/core/view/WindowInsetsCompat$Impl21;->consumeSystemWindowInsets()Landroidx/core/view/WindowInsetsCompat; +Landroidx/core/view/WindowInsetsCompat$Impl28; +HSPLandroidx/core/view/WindowInsetsCompat$Impl28;->(Landroidx/core/view/WindowInsetsCompat;Landroid/view/WindowInsets;)V +HSPLandroidx/core/view/WindowInsetsCompat$Impl28;->consumeDisplayCutout()Landroidx/core/view/WindowInsetsCompat; +HSPLandroidx/core/view/WindowInsetsCompat$Impl28;->getDisplayCutout()Landroidx/core/view/DisplayCutoutCompat; +Landroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0; +HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0;->m$1()I +HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0;->m$1()Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction; +HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/view/WindowInsets;I)Landroid/graphics/Insets; +HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/view/accessibility/AccessibilityNodeInfo;Ljava/lang/CharSequence;)V +HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0;->m$10()Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction; +HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0;->m$11()Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction; +HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0;->m$12()Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction; +HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0;->m$2()I +HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0;->m$2()Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction; +HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0;->m$2(Landroid/view/accessibility/AccessibilityNodeInfo;Z)V +HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0;->m$3()I +HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0;->m$3()Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction; +HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0;->m$4()I +HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0;->m$4()Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction; +HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0;->m$5()I +HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0;->m$5()Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction; +HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0;->m$6()I +HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0;->m$6()Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction; +HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0;->m$7()Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction; +HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0;->m$8()Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction; +HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0;->m$9()Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction; +HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0;->m()I +HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0;->m()Landroid/view/WindowInsets; +HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0;->m()Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction; +HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/Window;)Landroid/view/WindowInsetsController; +HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/WindowInsets;)Landroid/view/DisplayCutout; +HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/WindowInsets;)Landroid/view/WindowInsets; +HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/WindowInsets;I)Landroid/graphics/Insets; +HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/WindowInsets;I)Z +HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/WindowInsetsController;)I +Landroidx/core/view/WindowInsetsCompat$Impl29; +HSPLandroidx/core/view/WindowInsetsCompat$Impl29;->(Landroidx/core/view/WindowInsetsCompat;Landroid/view/WindowInsets;)V +Landroidx/core/view/WindowInsetsCompat$Impl30; +HSPLandroidx/core/view/WindowInsetsCompat$Impl30;->()V +HSPLandroidx/core/view/WindowInsetsCompat$Impl30;->(Landroidx/core/view/WindowInsetsCompat;Landroid/view/WindowInsets;)V +HSPLandroidx/core/view/WindowInsetsCompat$Impl30;->copyRootViewBounds(Landroid/view/View;)V +HSPLandroidx/core/view/WindowInsetsCompat$Impl30;->getInsets(I)Landroidx/core/graphics/Insets; +HSPLandroidx/core/view/WindowInsetsCompat$Impl30;->getInsetsIgnoringVisibility(I)Landroidx/core/graphics/Insets; +HSPLandroidx/core/view/WindowInsetsCompat$Impl30;->isVisible(I)Z +Landroidx/core/view/WindowInsetsCompat$Type; +HSPLandroidx/core/view/WindowInsetsCompat$Type;->captionBar()I +HSPLandroidx/core/view/WindowInsetsCompat$Type;->displayCutout()I +HSPLandroidx/core/view/WindowInsetsCompat$Type;->ime()I +HSPLandroidx/core/view/WindowInsetsCompat$Type;->mandatorySystemGestures()I +HSPLandroidx/core/view/WindowInsetsCompat$Type;->navigationBars()I +HSPLandroidx/core/view/WindowInsetsCompat$Type;->statusBars()I +HSPLandroidx/core/view/WindowInsetsCompat$Type;->systemBars()I +HSPLandroidx/core/view/WindowInsetsCompat$Type;->systemGestures()I +HSPLandroidx/core/view/WindowInsetsCompat$Type;->tappableElement()I +Landroidx/core/view/WindowInsetsCompat$TypeImpl30; +HSPLandroidx/core/view/WindowInsetsCompat$TypeImpl30;->toPlatformType(I)I +Landroidx/core/view/WindowInsetsControllerCompat; +HSPLandroidx/core/view/WindowInsetsControllerCompat;->(Landroid/view/Window;Landroid/view/View;)V +HSPLandroidx/core/view/WindowInsetsControllerCompat;->isAppearanceLightNavigationBars()Z +HSPLandroidx/core/view/WindowInsetsControllerCompat;->isAppearanceLightStatusBars()Z +HSPLandroidx/core/view/WindowInsetsControllerCompat;->setAppearanceLightNavigationBars(Z)V +HSPLandroidx/core/view/WindowInsetsControllerCompat;->setAppearanceLightStatusBars(Z)V +Landroidx/core/view/WindowInsetsControllerCompat$Impl; +HSPLandroidx/core/view/WindowInsetsControllerCompat$Impl;->()V +Landroidx/core/view/WindowInsetsControllerCompat$Impl30; +HSPLandroidx/core/view/WindowInsetsControllerCompat$Impl30;->(Landroid/view/Window;Landroidx/core/view/WindowInsetsControllerCompat;Landroidx/core/view/SoftwareKeyboardControllerCompat;)V +HSPLandroidx/core/view/WindowInsetsControllerCompat$Impl30;->(Landroid/view/WindowInsetsController;Landroidx/core/view/WindowInsetsControllerCompat;Landroidx/core/view/SoftwareKeyboardControllerCompat;)V +HSPLandroidx/core/view/WindowInsetsControllerCompat$Impl30;->isAppearanceLightNavigationBars()Z +HSPLandroidx/core/view/WindowInsetsControllerCompat$Impl30;->isAppearanceLightStatusBars()Z +HSPLandroidx/core/view/WindowInsetsControllerCompat$Impl30;->setAppearanceLightNavigationBars(Z)V +HSPLandroidx/core/view/WindowInsetsControllerCompat$Impl30;->setAppearanceLightStatusBars(Z)V +HSPLandroidx/core/view/WindowInsetsControllerCompat$Impl30;->setSystemUiFlag(I)V +Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat; +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->()V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->(Landroid/view/accessibility/AccessibilityNodeInfo;)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->addAction(I)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->addAction(Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat$AccessibilityActionCompat;)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->addChild(Landroid/view/View;I)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->extrasIntList(Ljava/lang/String;)Ljava/util/List; +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->getMovementGranularities()I +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->getText()Ljava/lang/CharSequence; +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->hasSpans()Z +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->isFocusable()Z +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->isFocused()Z +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->obtain()Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat; +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setAccessibilityFocused(Z)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setBoundsInScreen(Landroid/graphics/Rect;)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setCheckable(Z)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setClassName(Ljava/lang/CharSequence;)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setClickable(Z)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setCollectionInfo(Ljava/lang/Object;)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setCollectionItemInfo(Ljava/lang/Object;)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setContentDescription(Ljava/lang/CharSequence;)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setEditable(Z)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setEnabled(Z)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setFocusable(Z)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setFocused(Z)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setImportantForAccessibility(Z)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setLongClickable(Z)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setMovementGranularities(I)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setPackageName(Ljava/lang/CharSequence;)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setPaneTitle(Ljava/lang/CharSequence;)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setParent(Landroid/view/View;)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setParent(Landroid/view/View;I)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setPassword(Z)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setRoleDescription(Ljava/lang/CharSequence;)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setScreenReaderFocusable(Z)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setSelected(Z)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setSource(Landroid/view/View;I)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setStateDescription(Ljava/lang/CharSequence;)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setText(Ljava/lang/CharSequence;)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setTextSelection(II)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setTraversalBefore(Landroid/view/View;I)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setViewIdResourceName(Ljava/lang/String;)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setVisibleToUser(Z)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->unwrap()Landroid/view/accessibility/AccessibilityNodeInfo; +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->wrap(Landroid/view/accessibility/AccessibilityNodeInfo;)Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat; +Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat$AccessibilityActionCompat; +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$AccessibilityActionCompat;->()V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$AccessibilityActionCompat;->(ILjava/lang/CharSequence;)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$AccessibilityActionCompat;->(ILjava/lang/CharSequence;Ljava/lang/Class;)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$AccessibilityActionCompat;->(Ljava/lang/Object;ILjava/lang/CharSequence;Landroidx/core/view/accessibility/AccessibilityViewCommand;Ljava/lang/Class;)V +Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat$Api19Impl; +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$Api19Impl;->getExtras(Landroid/view/accessibility/AccessibilityNodeInfo;)Landroid/os/Bundle; +Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat$Api30Impl; +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$Api30Impl;->setStateDescription(Landroid/view/accessibility/AccessibilityNodeInfo;Ljava/lang/CharSequence;)V +Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat$CollectionInfoCompat; +PLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$CollectionInfoCompat;->(Ljava/lang/Object;)V +PLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$CollectionInfoCompat;->obtain(IIZI)Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat$CollectionInfoCompat; +Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat$CollectionItemInfoCompat; +PLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$CollectionItemInfoCompat;->(Ljava/lang/Object;)V +PLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$CollectionItemInfoCompat;->obtain(IIIIZZ)Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat$CollectionItemInfoCompat; +Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat$RangeInfoCompat; +Landroidx/core/view/accessibility/AccessibilityNodeProviderCompat; +HSPLandroidx/core/view/accessibility/AccessibilityNodeProviderCompat;->(Ljava/lang/Object;)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeProviderCompat;->getProvider()Ljava/lang/Object; +Landroidx/core/view/accessibility/AccessibilityViewCommand; +Landroidx/core/view/accessibility/AccessibilityViewCommand$CommandArguments; +Landroidx/core/view/accessibility/AccessibilityViewCommand$MoveAtGranularityArguments; +Landroidx/core/view/accessibility/AccessibilityViewCommand$MoveHtmlArguments; +Landroidx/core/view/accessibility/AccessibilityViewCommand$MoveWindowArguments; +Landroidx/core/view/accessibility/AccessibilityViewCommand$ScrollToPositionArguments; +Landroidx/core/view/accessibility/AccessibilityViewCommand$SetProgressArguments; +Landroidx/core/view/accessibility/AccessibilityViewCommand$SetSelectionArguments; +Landroidx/core/view/accessibility/AccessibilityViewCommand$SetTextArguments; +Landroidx/core/view/inputmethod/EditorInfoCompat; +HSPLandroidx/core/view/inputmethod/EditorInfoCompat;->()V +HSPLandroidx/core/view/inputmethod/EditorInfoCompat;->setInitialSurroundingText(Landroid/view/inputmethod/EditorInfo;Ljava/lang/CharSequence;)V +Landroidx/core/view/inputmethod/EditorInfoCompat$Api30Impl; +HSPLandroidx/core/view/inputmethod/EditorInfoCompat$Api30Impl;->setInitialSurroundingSubText(Landroid/view/inputmethod/EditorInfo;Ljava/lang/CharSequence;I)V +Landroidx/credentials/provider/Action$Companion$$ExternalSyntheticApiModelOutline0; +HSPLandroidx/credentials/provider/Action$Companion$$ExternalSyntheticApiModelOutline0;->m(Landroid/app/Activity;Landroid/app/Application$ActivityLifecycleCallbacks;)V +HSPLandroidx/credentials/provider/Action$Companion$$ExternalSyntheticApiModelOutline0;->m(Landroid/os/Looper;)Landroid/os/Handler; +Landroidx/customview/poolingcontainer/PoolingContainer; +HSPLandroidx/customview/poolingcontainer/PoolingContainer;->()V +HSPLandroidx/customview/poolingcontainer/PoolingContainer;->addPoolingContainerListener(Landroid/view/View;Landroidx/customview/poolingcontainer/PoolingContainerListener;)V +HSPLandroidx/customview/poolingcontainer/PoolingContainer;->getPoolingContainerListenerHolder(Landroid/view/View;)Landroidx/customview/poolingcontainer/PoolingContainerListenerHolder; +Landroidx/customview/poolingcontainer/PoolingContainerListener; +Landroidx/customview/poolingcontainer/PoolingContainerListenerHolder; +HSPLandroidx/customview/poolingcontainer/PoolingContainerListenerHolder;->()V +HSPLandroidx/customview/poolingcontainer/PoolingContainerListenerHolder;->addListener(Landroidx/customview/poolingcontainer/PoolingContainerListener;)V +Landroidx/customview/poolingcontainer/R$id; +Landroidx/datastore/DataStoreFile; +HSPLandroidx/datastore/DataStoreFile;->dataStoreFile(Landroid/content/Context;Ljava/lang/String;)Ljava/io/File; +Landroidx/datastore/core/CorruptionException; +Landroidx/datastore/core/CorruptionHandler; +Landroidx/datastore/core/Data; +HSPLandroidx/datastore/core/Data;->(Ljava/lang/Object;I)V +HSPLandroidx/datastore/core/Data;->getValue()Ljava/lang/Object; +Landroidx/datastore/core/DataMigrationInitializer; +HSPLandroidx/datastore/core/DataMigrationInitializer;->()V +Landroidx/datastore/core/DataMigrationInitializer$Companion; +HSPLandroidx/datastore/core/DataMigrationInitializer$Companion;->()V +HSPLandroidx/datastore/core/DataMigrationInitializer$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/datastore/core/DataMigrationInitializer$Companion;->access$runMigrations(Landroidx/datastore/core/DataMigrationInitializer$Companion;Ljava/util/List;Landroidx/datastore/core/InitializerApi;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/datastore/core/DataMigrationInitializer$Companion;->getInitializer(Ljava/util/List;)Lkotlin/jvm/functions/Function2; +HSPLandroidx/datastore/core/DataMigrationInitializer$Companion;->runMigrations(Ljava/util/List;Landroidx/datastore/core/InitializerApi;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/datastore/core/DataMigrationInitializer$Companion$getInitializer$1; +HSPLandroidx/datastore/core/DataMigrationInitializer$Companion$getInitializer$1;->(Ljava/util/List;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/datastore/core/DataMigrationInitializer$Companion$getInitializer$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/datastore/core/DataMigrationInitializer$Companion$getInitializer$1;->invoke(Landroidx/datastore/core/InitializerApi;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/datastore/core/DataMigrationInitializer$Companion$getInitializer$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/datastore/core/DataMigrationInitializer$Companion$getInitializer$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/datastore/core/DataMigrationInitializer$Companion$runMigrations$1; +HSPLandroidx/datastore/core/DataMigrationInitializer$Companion$runMigrations$1;->(Landroidx/datastore/core/DataMigrationInitializer$Companion;Lkotlin/coroutines/Continuation;)V +Landroidx/datastore/core/DataMigrationInitializer$Companion$runMigrations$2; +HSPLandroidx/datastore/core/DataMigrationInitializer$Companion$runMigrations$2;->(Ljava/util/List;Ljava/util/List;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/datastore/core/DataMigrationInitializer$Companion$runMigrations$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/datastore/core/DataMigrationInitializer$Companion$runMigrations$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/datastore/core/DataMigrationInitializer$Companion$runMigrations$2;->invoke(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/datastore/core/DataMigrationInitializer$Companion$runMigrations$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/datastore/core/DataStore; +Landroidx/datastore/core/DataStoreFactory; +HSPLandroidx/datastore/core/DataStoreFactory;->()V +HSPLandroidx/datastore/core/DataStoreFactory;->()V +HSPLandroidx/datastore/core/DataStoreFactory;->create(Landroidx/datastore/core/Serializer;Landroidx/datastore/core/handlers/ReplaceFileCorruptionHandler;Ljava/util/List;Lkotlinx/coroutines/CoroutineScope;Lkotlin/jvm/functions/Function0;)Landroidx/datastore/core/DataStore; +Landroidx/datastore/core/Final; +Landroidx/datastore/core/InitializerApi; +Landroidx/datastore/core/ReadException; +Landroidx/datastore/core/Serializer; +Landroidx/datastore/core/SimpleActor; +HSPLandroidx/datastore/core/SimpleActor;->(Lkotlinx/coroutines/CoroutineScope;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/datastore/core/SimpleActor;->access$getConsumeMessage$p(Landroidx/datastore/core/SimpleActor;)Lkotlin/jvm/functions/Function2; +HSPLandroidx/datastore/core/SimpleActor;->access$getMessageQueue$p(Landroidx/datastore/core/SimpleActor;)Lkotlinx/coroutines/channels/Channel; +HSPLandroidx/datastore/core/SimpleActor;->access$getRemainingMessages$p(Landroidx/datastore/core/SimpleActor;)Ljava/util/concurrent/atomic/AtomicInteger; +HSPLandroidx/datastore/core/SimpleActor;->access$getScope$p(Landroidx/datastore/core/SimpleActor;)Lkotlinx/coroutines/CoroutineScope; +HSPLandroidx/datastore/core/SimpleActor;->offer(Ljava/lang/Object;)V +Landroidx/datastore/core/SimpleActor$1; +HSPLandroidx/datastore/core/SimpleActor$1;->(Lkotlin/jvm/functions/Function1;Landroidx/datastore/core/SimpleActor;Lkotlin/jvm/functions/Function2;)V +Landroidx/datastore/core/SimpleActor$offer$2; +HSPLandroidx/datastore/core/SimpleActor$offer$2;->(Landroidx/datastore/core/SimpleActor;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/datastore/core/SimpleActor$offer$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/datastore/core/SimpleActor$offer$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/datastore/core/SingleProcessDataStore; +HSPLandroidx/datastore/core/SingleProcessDataStore;->()V +HSPLandroidx/datastore/core/SingleProcessDataStore;->(Lkotlin/jvm/functions/Function0;Landroidx/datastore/core/Serializer;Ljava/util/List;Landroidx/datastore/core/CorruptionHandler;Lkotlinx/coroutines/CoroutineScope;)V +HSPLandroidx/datastore/core/SingleProcessDataStore;->access$getActiveFiles$cp()Ljava/util/Set; +HSPLandroidx/datastore/core/SingleProcessDataStore;->access$getActiveFilesLock$cp()Ljava/lang/Object; +HSPLandroidx/datastore/core/SingleProcessDataStore;->access$getActor$p(Landroidx/datastore/core/SingleProcessDataStore;)Landroidx/datastore/core/SimpleActor; +HSPLandroidx/datastore/core/SingleProcessDataStore;->access$getDownstreamFlow$p(Landroidx/datastore/core/SingleProcessDataStore;)Lkotlinx/coroutines/flow/MutableStateFlow; +HSPLandroidx/datastore/core/SingleProcessDataStore;->access$getProduceFile$p(Landroidx/datastore/core/SingleProcessDataStore;)Lkotlin/jvm/functions/Function0; +HSPLandroidx/datastore/core/SingleProcessDataStore;->access$handleRead(Landroidx/datastore/core/SingleProcessDataStore;Landroidx/datastore/core/SingleProcessDataStore$Message$Read;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/datastore/core/SingleProcessDataStore;->getData()Lkotlinx/coroutines/flow/Flow; +HSPLandroidx/datastore/core/SingleProcessDataStore;->getFile()Ljava/io/File; +HSPLandroidx/datastore/core/SingleProcessDataStore;->handleRead(Landroidx/datastore/core/SingleProcessDataStore$Message$Read;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/datastore/core/SingleProcessDataStore;->readAndInit(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/datastore/core/SingleProcessDataStore;->readAndInitOrPropagateFailure(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/datastore/core/SingleProcessDataStore;->readData(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/datastore/core/SingleProcessDataStore;->readDataOrHandleCorruption(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/datastore/core/SingleProcessDataStore$Companion; +HSPLandroidx/datastore/core/SingleProcessDataStore$Companion;->()V +HSPLandroidx/datastore/core/SingleProcessDataStore$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/datastore/core/SingleProcessDataStore$Companion;->getActiveFiles$datastore_core()Ljava/util/Set; +HSPLandroidx/datastore/core/SingleProcessDataStore$Companion;->getActiveFilesLock$datastore_core()Ljava/lang/Object; +Landroidx/datastore/core/SingleProcessDataStore$Message; +HSPLandroidx/datastore/core/SingleProcessDataStore$Message;->()V +HSPLandroidx/datastore/core/SingleProcessDataStore$Message;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/datastore/core/SingleProcessDataStore$Message$Read; +HSPLandroidx/datastore/core/SingleProcessDataStore$Message$Read;->(Landroidx/datastore/core/State;)V +Landroidx/datastore/core/SingleProcessDataStore$actor$1; +HSPLandroidx/datastore/core/SingleProcessDataStore$actor$1;->(Landroidx/datastore/core/SingleProcessDataStore;)V +Landroidx/datastore/core/SingleProcessDataStore$actor$2; +HSPLandroidx/datastore/core/SingleProcessDataStore$actor$2;->()V +HSPLandroidx/datastore/core/SingleProcessDataStore$actor$2;->()V +Landroidx/datastore/core/SingleProcessDataStore$actor$3; +HSPLandroidx/datastore/core/SingleProcessDataStore$actor$3;->(Landroidx/datastore/core/SingleProcessDataStore;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/datastore/core/SingleProcessDataStore$actor$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/datastore/core/SingleProcessDataStore$actor$3;->invoke(Landroidx/datastore/core/SingleProcessDataStore$Message;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/datastore/core/SingleProcessDataStore$actor$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/datastore/core/SingleProcessDataStore$actor$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/datastore/core/SingleProcessDataStore$data$1; +HSPLandroidx/datastore/core/SingleProcessDataStore$data$1;->(Landroidx/datastore/core/SingleProcessDataStore;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/datastore/core/SingleProcessDataStore$data$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/datastore/core/SingleProcessDataStore$data$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/datastore/core/SingleProcessDataStore$data$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/datastore/core/SingleProcessDataStore$data$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/datastore/core/SingleProcessDataStore$data$1$1; +HSPLandroidx/datastore/core/SingleProcessDataStore$data$1$1;->(Landroidx/datastore/core/State;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/datastore/core/SingleProcessDataStore$data$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/datastore/core/SingleProcessDataStore$data$1$1;->invoke(Landroidx/datastore/core/State;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/datastore/core/SingleProcessDataStore$data$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/datastore/core/SingleProcessDataStore$data$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/datastore/core/SingleProcessDataStore$data$1$invokeSuspend$$inlined$map$1; +HSPLandroidx/datastore/core/SingleProcessDataStore$data$1$invokeSuspend$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLandroidx/datastore/core/SingleProcessDataStore$data$1$invokeSuspend$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/datastore/core/SingleProcessDataStore$data$1$invokeSuspend$$inlined$map$1$2; +HSPLandroidx/datastore/core/SingleProcessDataStore$data$1$invokeSuspend$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLandroidx/datastore/core/SingleProcessDataStore$data$1$invokeSuspend$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/datastore/core/SingleProcessDataStore$data$1$invokeSuspend$$inlined$map$1$2$1; +HSPLandroidx/datastore/core/SingleProcessDataStore$data$1$invokeSuspend$$inlined$map$1$2$1;->(Landroidx/datastore/core/SingleProcessDataStore$data$1$invokeSuspend$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Landroidx/datastore/core/SingleProcessDataStore$file$2; +HSPLandroidx/datastore/core/SingleProcessDataStore$file$2;->(Landroidx/datastore/core/SingleProcessDataStore;)V +HSPLandroidx/datastore/core/SingleProcessDataStore$file$2;->invoke()Ljava/io/File; +HSPLandroidx/datastore/core/SingleProcessDataStore$file$2;->invoke()Ljava/lang/Object; +Landroidx/datastore/core/SingleProcessDataStore$readAndInit$1; +HSPLandroidx/datastore/core/SingleProcessDataStore$readAndInit$1;->(Landroidx/datastore/core/SingleProcessDataStore;Lkotlin/coroutines/Continuation;)V +Landroidx/datastore/core/SingleProcessDataStore$readAndInit$api$1; +HSPLandroidx/datastore/core/SingleProcessDataStore$readAndInit$api$1;->(Lkotlinx/coroutines/sync/Mutex;Lkotlin/jvm/internal/Ref$BooleanRef;Lkotlin/jvm/internal/Ref$ObjectRef;Landroidx/datastore/core/SingleProcessDataStore;)V +HSPLandroidx/datastore/core/SingleProcessDataStore$readAndInit$api$1;->updateData(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/datastore/core/SingleProcessDataStore$readAndInit$api$1$updateData$1; +HSPLandroidx/datastore/core/SingleProcessDataStore$readAndInit$api$1$updateData$1;->(Landroidx/datastore/core/SingleProcessDataStore$readAndInit$api$1;Lkotlin/coroutines/Continuation;)V +Landroidx/datastore/core/SingleProcessDataStore$readAndInitOrPropagateFailure$1; +HSPLandroidx/datastore/core/SingleProcessDataStore$readAndInitOrPropagateFailure$1;->(Landroidx/datastore/core/SingleProcessDataStore;Lkotlin/coroutines/Continuation;)V +Landroidx/datastore/core/SingleProcessDataStore$readData$1; +HSPLandroidx/datastore/core/SingleProcessDataStore$readData$1;->(Landroidx/datastore/core/SingleProcessDataStore;Lkotlin/coroutines/Continuation;)V +Landroidx/datastore/core/SingleProcessDataStore$readDataOrHandleCorruption$1; +HSPLandroidx/datastore/core/SingleProcessDataStore$readDataOrHandleCorruption$1;->(Landroidx/datastore/core/SingleProcessDataStore;Lkotlin/coroutines/Continuation;)V +Landroidx/datastore/core/State; +HSPLandroidx/datastore/core/State;->()V +HSPLandroidx/datastore/core/State;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/datastore/core/UnInitialized; +HSPLandroidx/datastore/core/UnInitialized;->()V +HSPLandroidx/datastore/core/UnInitialized;->()V +Landroidx/datastore/core/handlers/NoOpCorruptionHandler; +HSPLandroidx/datastore/core/handlers/NoOpCorruptionHandler;->()V +Landroidx/datastore/core/handlers/ReplaceFileCorruptionHandler; +Landroidx/datastore/preferences/PreferenceDataStoreDelegateKt; +HSPLandroidx/datastore/preferences/PreferenceDataStoreDelegateKt;->preferencesDataStore$default(Ljava/lang/String;Landroidx/datastore/core/handlers/ReplaceFileCorruptionHandler;Lkotlin/jvm/functions/Function1;Lkotlinx/coroutines/CoroutineScope;ILjava/lang/Object;)Lkotlin/properties/ReadOnlyProperty; +HSPLandroidx/datastore/preferences/PreferenceDataStoreDelegateKt;->preferencesDataStore(Ljava/lang/String;Landroidx/datastore/core/handlers/ReplaceFileCorruptionHandler;Lkotlin/jvm/functions/Function1;Lkotlinx/coroutines/CoroutineScope;)Lkotlin/properties/ReadOnlyProperty; +Landroidx/datastore/preferences/PreferenceDataStoreDelegateKt$preferencesDataStore$1; +HSPLandroidx/datastore/preferences/PreferenceDataStoreDelegateKt$preferencesDataStore$1;->()V +HSPLandroidx/datastore/preferences/PreferenceDataStoreDelegateKt$preferencesDataStore$1;->()V +HSPLandroidx/datastore/preferences/PreferenceDataStoreDelegateKt$preferencesDataStore$1;->invoke(Landroid/content/Context;)Ljava/util/List; +HSPLandroidx/datastore/preferences/PreferenceDataStoreDelegateKt$preferencesDataStore$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/datastore/preferences/PreferenceDataStoreFile; +HSPLandroidx/datastore/preferences/PreferenceDataStoreFile;->preferencesDataStoreFile(Landroid/content/Context;Ljava/lang/String;)Ljava/io/File; +Landroidx/datastore/preferences/PreferenceDataStoreSingletonDelegate; +HSPLandroidx/datastore/preferences/PreferenceDataStoreSingletonDelegate;->(Ljava/lang/String;Landroidx/datastore/core/handlers/ReplaceFileCorruptionHandler;Lkotlin/jvm/functions/Function1;Lkotlinx/coroutines/CoroutineScope;)V +HSPLandroidx/datastore/preferences/PreferenceDataStoreSingletonDelegate;->access$getName$p(Landroidx/datastore/preferences/PreferenceDataStoreSingletonDelegate;)Ljava/lang/String; +HSPLandroidx/datastore/preferences/PreferenceDataStoreSingletonDelegate;->getValue(Landroid/content/Context;Lkotlin/reflect/KProperty;)Landroidx/datastore/core/DataStore; +HSPLandroidx/datastore/preferences/PreferenceDataStoreSingletonDelegate;->getValue(Ljava/lang/Object;Lkotlin/reflect/KProperty;)Ljava/lang/Object; +Landroidx/datastore/preferences/PreferenceDataStoreSingletonDelegate$getValue$1$1; +HSPLandroidx/datastore/preferences/PreferenceDataStoreSingletonDelegate$getValue$1$1;->(Landroid/content/Context;Landroidx/datastore/preferences/PreferenceDataStoreSingletonDelegate;)V +HSPLandroidx/datastore/preferences/PreferenceDataStoreSingletonDelegate$getValue$1$1;->invoke()Ljava/io/File; +HSPLandroidx/datastore/preferences/PreferenceDataStoreSingletonDelegate$getValue$1$1;->invoke()Ljava/lang/Object; +Landroidx/datastore/preferences/core/MutablePreferences; +HSPLandroidx/datastore/preferences/core/MutablePreferences;->(Ljava/util/Map;Z)V +HSPLandroidx/datastore/preferences/core/MutablePreferences;->(Ljava/util/Map;ZILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/datastore/preferences/core/MutablePreferences;->asMap()Ljava/util/Map; +HSPLandroidx/datastore/preferences/core/MutablePreferences;->equals(Ljava/lang/Object;)Z +HSPLandroidx/datastore/preferences/core/MutablePreferences;->get(Landroidx/datastore/preferences/core/Preferences$Key;)Ljava/lang/Object; +HSPLandroidx/datastore/preferences/core/MutablePreferences;->hashCode()I +Landroidx/datastore/preferences/core/PreferenceDataStore; +HSPLandroidx/datastore/preferences/core/PreferenceDataStore;->(Landroidx/datastore/core/DataStore;)V +HSPLandroidx/datastore/preferences/core/PreferenceDataStore;->getData()Lkotlinx/coroutines/flow/Flow; +Landroidx/datastore/preferences/core/PreferenceDataStoreFactory; +HSPLandroidx/datastore/preferences/core/PreferenceDataStoreFactory;->()V +HSPLandroidx/datastore/preferences/core/PreferenceDataStoreFactory;->()V +HSPLandroidx/datastore/preferences/core/PreferenceDataStoreFactory;->create(Landroidx/datastore/core/handlers/ReplaceFileCorruptionHandler;Ljava/util/List;Lkotlinx/coroutines/CoroutineScope;Lkotlin/jvm/functions/Function0;)Landroidx/datastore/core/DataStore; +Landroidx/datastore/preferences/core/PreferenceDataStoreFactory$create$delegate$1; +HSPLandroidx/datastore/preferences/core/PreferenceDataStoreFactory$create$delegate$1;->(Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/datastore/preferences/core/PreferenceDataStoreFactory$create$delegate$1;->invoke()Ljava/io/File; +HSPLandroidx/datastore/preferences/core/PreferenceDataStoreFactory$create$delegate$1;->invoke()Ljava/lang/Object; +Landroidx/datastore/preferences/core/Preferences; +HSPLandroidx/datastore/preferences/core/Preferences;->()V +HSPLandroidx/datastore/preferences/core/Preferences;->toPreferences()Landroidx/datastore/preferences/core/Preferences; +Landroidx/datastore/preferences/core/Preferences$Key; +HSPLandroidx/datastore/preferences/core/Preferences$Key;->(Ljava/lang/String;)V +Landroidx/datastore/preferences/core/PreferencesFactory; +HSPLandroidx/datastore/preferences/core/PreferencesFactory;->createEmpty()Landroidx/datastore/preferences/core/Preferences; +Landroidx/datastore/preferences/core/PreferencesKeys; +HSPLandroidx/datastore/preferences/core/PreferencesKeys;->booleanKey(Ljava/lang/String;)Landroidx/datastore/preferences/core/Preferences$Key; +HSPLandroidx/datastore/preferences/core/PreferencesKeys;->doubleKey(Ljava/lang/String;)Landroidx/datastore/preferences/core/Preferences$Key; +HSPLandroidx/datastore/preferences/core/PreferencesKeys;->intKey(Ljava/lang/String;)Landroidx/datastore/preferences/core/Preferences$Key; +HSPLandroidx/datastore/preferences/core/PreferencesKeys;->longKey(Ljava/lang/String;)Landroidx/datastore/preferences/core/Preferences$Key; +Landroidx/datastore/preferences/core/PreferencesSerializer; +HSPLandroidx/datastore/preferences/core/PreferencesSerializer;->()V +HSPLandroidx/datastore/preferences/core/PreferencesSerializer;->()V +HSPLandroidx/datastore/preferences/core/PreferencesSerializer;->getDefaultValue()Landroidx/datastore/preferences/core/Preferences; +HSPLandroidx/datastore/preferences/core/PreferencesSerializer;->getDefaultValue()Ljava/lang/Object; +HSPLandroidx/datastore/preferences/core/PreferencesSerializer;->getFileExtension()Ljava/lang/String; +Landroidx/emoji2/text/ConcurrencyHelpers; +HSPLandroidx/emoji2/text/ConcurrencyHelpers;->createBackgroundPriorityExecutor(Ljava/lang/String;)Ljava/util/concurrent/ThreadPoolExecutor; +HSPLandroidx/emoji2/text/ConcurrencyHelpers;->lambda$createBackgroundPriorityExecutor$0(Ljava/lang/String;Ljava/lang/Runnable;)Ljava/lang/Thread; +HSPLandroidx/emoji2/text/ConcurrencyHelpers;->mainHandlerAsync()Landroid/os/Handler; +Landroidx/emoji2/text/ConcurrencyHelpers$$ExternalSyntheticLambda0; +HSPLandroidx/emoji2/text/ConcurrencyHelpers$$ExternalSyntheticLambda0;->(Ljava/lang/String;)V +HSPLandroidx/emoji2/text/ConcurrencyHelpers$$ExternalSyntheticLambda0;->newThread(Ljava/lang/Runnable;)Ljava/lang/Thread; +Landroidx/emoji2/text/ConcurrencyHelpers$Handler28Impl; +HSPLandroidx/emoji2/text/ConcurrencyHelpers$Handler28Impl;->createAsync(Landroid/os/Looper;)Landroid/os/Handler; +Landroidx/emoji2/text/DefaultEmojiCompatConfig; +HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig;->create(Landroid/content/Context;)Landroidx/emoji2/text/FontRequestEmojiCompatConfig; +Landroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigFactory; +HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigFactory;->(Landroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper;)V +HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigFactory;->configOrNull(Landroid/content/Context;Landroidx/core/provider/FontRequest;)Landroidx/emoji2/text/EmojiCompat$Config; +HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigFactory;->convertToByteArray([Landroid/content/pm/Signature;)Ljava/util/List; +HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigFactory;->create(Landroid/content/Context;)Landroidx/emoji2/text/EmojiCompat$Config; +HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigFactory;->generateFontRequestFrom(Landroid/content/pm/ProviderInfo;Landroid/content/pm/PackageManager;)Landroidx/core/provider/FontRequest; +HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigFactory;->getHelperForApi()Landroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper; +HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigFactory;->hasFlagSystem(Landroid/content/pm/ProviderInfo;)Z +HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigFactory;->queryDefaultInstalledContentProvider(Landroid/content/pm/PackageManager;)Landroid/content/pm/ProviderInfo; +HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigFactory;->queryForDefaultFontRequest(Landroid/content/Context;)Landroidx/core/provider/FontRequest; +Landroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper; +HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper;->()V +Landroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper_API19; +HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper_API19;->()V +HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper_API19;->getProviderInfo(Landroid/content/pm/ResolveInfo;)Landroid/content/pm/ProviderInfo; +HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper_API19;->queryIntentContentProviders(Landroid/content/pm/PackageManager;Landroid/content/Intent;I)Ljava/util/List; +Landroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper_API28; +HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper_API28;->()V +HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper_API28;->getSigningSignatures(Landroid/content/pm/PackageManager;Ljava/lang/String;)[Landroid/content/pm/Signature; +Landroidx/emoji2/text/DefaultGlyphChecker; +HSPLandroidx/emoji2/text/DefaultGlyphChecker;->()V +HSPLandroidx/emoji2/text/DefaultGlyphChecker;->()V +Landroidx/emoji2/text/EmojiCompat; +HSPLandroidx/emoji2/text/EmojiCompat;->()V +HSPLandroidx/emoji2/text/EmojiCompat;->(Landroidx/emoji2/text/EmojiCompat$Config;)V +HSPLandroidx/emoji2/text/EmojiCompat;->access$000(Landroidx/emoji2/text/EmojiCompat;)Landroidx/emoji2/text/EmojiCompat$SpanFactory; +HSPLandroidx/emoji2/text/EmojiCompat;->access$100(Landroidx/emoji2/text/EmojiCompat;)Landroidx/emoji2/text/EmojiCompat$GlyphChecker; +HSPLandroidx/emoji2/text/EmojiCompat;->get()Landroidx/emoji2/text/EmojiCompat; +HSPLandroidx/emoji2/text/EmojiCompat;->getLoadState()I +HSPLandroidx/emoji2/text/EmojiCompat;->init(Landroidx/emoji2/text/EmojiCompat$Config;)Landroidx/emoji2/text/EmojiCompat; +HSPLandroidx/emoji2/text/EmojiCompat;->isConfigured()Z +HSPLandroidx/emoji2/text/EmojiCompat;->isInitialized()Z +HSPLandroidx/emoji2/text/EmojiCompat;->load()V +HSPLandroidx/emoji2/text/EmojiCompat;->loadMetadata()V +HSPLandroidx/emoji2/text/EmojiCompat;->onMetadataLoadSuccess()V +HSPLandroidx/emoji2/text/EmojiCompat;->process(Ljava/lang/CharSequence;)Ljava/lang/CharSequence; +HSPLandroidx/emoji2/text/EmojiCompat;->process(Ljava/lang/CharSequence;II)Ljava/lang/CharSequence; +HSPLandroidx/emoji2/text/EmojiCompat;->process(Ljava/lang/CharSequence;III)Ljava/lang/CharSequence; +HSPLandroidx/emoji2/text/EmojiCompat;->process(Ljava/lang/CharSequence;IIII)Ljava/lang/CharSequence; +HSPLandroidx/emoji2/text/EmojiCompat;->registerInitCallback(Landroidx/emoji2/text/EmojiCompat$InitCallback;)V +HSPLandroidx/emoji2/text/EmojiCompat;->updateEditorInfo(Landroid/view/inputmethod/EditorInfo;)V +Landroidx/emoji2/text/EmojiCompat$CompatInternal; +HSPLandroidx/emoji2/text/EmojiCompat$CompatInternal;->(Landroidx/emoji2/text/EmojiCompat;)V +Landroidx/emoji2/text/EmojiCompat$CompatInternal19; +HSPLandroidx/emoji2/text/EmojiCompat$CompatInternal19;->(Landroidx/emoji2/text/EmojiCompat;)V +HSPLandroidx/emoji2/text/EmojiCompat$CompatInternal19;->loadMetadata()V +HSPLandroidx/emoji2/text/EmojiCompat$CompatInternal19;->onMetadataLoadSuccess(Landroidx/emoji2/text/MetadataRepo;)V +HSPLandroidx/emoji2/text/EmojiCompat$CompatInternal19;->process(Ljava/lang/CharSequence;IIIZ)Ljava/lang/CharSequence; +HSPLandroidx/emoji2/text/EmojiCompat$CompatInternal19;->updateEditorInfoAttrs(Landroid/view/inputmethod/EditorInfo;)V +Landroidx/emoji2/text/EmojiCompat$CompatInternal19$1; +HSPLandroidx/emoji2/text/EmojiCompat$CompatInternal19$1;->(Landroidx/emoji2/text/EmojiCompat$CompatInternal19;)V +HSPLandroidx/emoji2/text/EmojiCompat$CompatInternal19$1;->onLoaded(Landroidx/emoji2/text/MetadataRepo;)V +Landroidx/emoji2/text/EmojiCompat$Config; +HSPLandroidx/emoji2/text/EmojiCompat$Config;->(Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoader;)V +HSPLandroidx/emoji2/text/EmojiCompat$Config;->getMetadataRepoLoader()Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoader; +HSPLandroidx/emoji2/text/EmojiCompat$Config;->setMetadataLoadStrategy(I)Landroidx/emoji2/text/EmojiCompat$Config; +Landroidx/emoji2/text/EmojiCompat$DefaultSpanFactory; +HSPLandroidx/emoji2/text/EmojiCompat$DefaultSpanFactory;->()V +Landroidx/emoji2/text/EmojiCompat$GlyphChecker; +Landroidx/emoji2/text/EmojiCompat$InitCallback; +HSPLandroidx/emoji2/text/EmojiCompat$InitCallback;->()V +Landroidx/emoji2/text/EmojiCompat$ListenerDispatcher; +HSPLandroidx/emoji2/text/EmojiCompat$ListenerDispatcher;->(Ljava/util/Collection;I)V +HSPLandroidx/emoji2/text/EmojiCompat$ListenerDispatcher;->(Ljava/util/Collection;ILjava/lang/Throwable;)V +HSPLandroidx/emoji2/text/EmojiCompat$ListenerDispatcher;->run()V +Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoader; +Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoaderCallback; +HSPLandroidx/emoji2/text/EmojiCompat$MetadataRepoLoaderCallback;->()V +Landroidx/emoji2/text/EmojiCompat$SpanFactory; +Landroidx/emoji2/text/EmojiCompatInitializer; +HSPLandroidx/emoji2/text/EmojiCompatInitializer;->()V +HSPLandroidx/emoji2/text/EmojiCompatInitializer;->create(Landroid/content/Context;)Ljava/lang/Boolean; +HSPLandroidx/emoji2/text/EmojiCompatInitializer;->create(Landroid/content/Context;)Ljava/lang/Object; +HSPLandroidx/emoji2/text/EmojiCompatInitializer;->delayUntilFirstResume(Landroid/content/Context;)V +HSPLandroidx/emoji2/text/EmojiCompatInitializer;->dependencies()Ljava/util/List; +HSPLandroidx/emoji2/text/EmojiCompatInitializer;->loadEmojiCompatAfterDelay()V +Landroidx/emoji2/text/EmojiCompatInitializer$1; +HSPLandroidx/emoji2/text/EmojiCompatInitializer$1;->(Landroidx/emoji2/text/EmojiCompatInitializer;Landroidx/lifecycle/Lifecycle;)V +HSPLandroidx/emoji2/text/EmojiCompatInitializer$1;->onResume(Landroidx/lifecycle/LifecycleOwner;)V +Landroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultConfig; +HSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultConfig;->(Landroid/content/Context;)V +Landroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader; +HSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader;->(Landroid/content/Context;)V +HSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader;->doLoad(Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoaderCallback;Ljava/util/concurrent/ThreadPoolExecutor;)V +HSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader;->lambda$load$0$androidx-emoji2-text-EmojiCompatInitializer$BackgroundDefaultLoader(Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoaderCallback;Ljava/util/concurrent/ThreadPoolExecutor;)V +HSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader;->load(Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoaderCallback;)V +Landroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$$ExternalSyntheticLambda0; +HSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$$ExternalSyntheticLambda0;->(Landroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader;Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoaderCallback;Ljava/util/concurrent/ThreadPoolExecutor;)V +HSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$$ExternalSyntheticLambda0;->run()V +Landroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$1; +HSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$1;->(Landroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader;Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoaderCallback;Ljava/util/concurrent/ThreadPoolExecutor;)V +HSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$1;->onLoaded(Landroidx/emoji2/text/MetadataRepo;)V +Landroidx/emoji2/text/EmojiCompatInitializer$LoadEmojiCompatRunnable; +HSPLandroidx/emoji2/text/EmojiCompatInitializer$LoadEmojiCompatRunnable;->()V +HSPLandroidx/emoji2/text/EmojiCompatInitializer$LoadEmojiCompatRunnable;->run()V +Landroidx/emoji2/text/EmojiExclusions; +HSPLandroidx/emoji2/text/EmojiExclusions;->getEmojiExclusions()Ljava/util/Set; +Landroidx/emoji2/text/EmojiExclusions$EmojiExclusions_Api34; +HSPLandroidx/emoji2/text/EmojiExclusions$EmojiExclusions_Api34;->getExclusions()Ljava/util/Set; +Landroidx/emoji2/text/EmojiExclusions$EmojiExclusions_Reflections; +HSPLandroidx/emoji2/text/EmojiExclusions$EmojiExclusions_Reflections;->getExclusions()Ljava/util/Set; +Landroidx/emoji2/text/EmojiProcessor; +HSPLandroidx/emoji2/text/EmojiProcessor;->(Landroidx/emoji2/text/MetadataRepo;Landroidx/emoji2/text/EmojiCompat$SpanFactory;Landroidx/emoji2/text/EmojiCompat$GlyphChecker;Z[ILjava/util/Set;)V +HSPLandroidx/emoji2/text/EmojiProcessor;->initExclusions(Ljava/util/Set;)V +HSPLandroidx/emoji2/text/EmojiProcessor;->process(Ljava/lang/CharSequence;IIIZ)Ljava/lang/CharSequence; +HSPLandroidx/emoji2/text/EmojiProcessor;->process(Ljava/lang/CharSequence;IIIZLandroidx/emoji2/text/EmojiProcessor$EmojiProcessCallback;)Ljava/lang/Object; +Landroidx/emoji2/text/EmojiProcessor$EmojiProcessAddSpanCallback; +HSPLandroidx/emoji2/text/EmojiProcessor$EmojiProcessAddSpanCallback;->(Landroidx/emoji2/text/UnprecomputeTextOnModificationSpannable;Landroidx/emoji2/text/EmojiCompat$SpanFactory;)V +HSPLandroidx/emoji2/text/EmojiProcessor$EmojiProcessAddSpanCallback;->getResult()Landroidx/emoji2/text/UnprecomputeTextOnModificationSpannable; +HSPLandroidx/emoji2/text/EmojiProcessor$EmojiProcessAddSpanCallback;->getResult()Ljava/lang/Object; +Landroidx/emoji2/text/EmojiProcessor$EmojiProcessCallback; +Landroidx/emoji2/text/EmojiProcessor$ProcessorSm; +HSPLandroidx/emoji2/text/EmojiProcessor$ProcessorSm;->(Landroidx/emoji2/text/MetadataRepo$Node;Z[I)V +HSPLandroidx/emoji2/text/EmojiProcessor$ProcessorSm;->check(I)I +HSPLandroidx/emoji2/text/EmojiProcessor$ProcessorSm;->isInFlushableState()Z +HSPLandroidx/emoji2/text/EmojiProcessor$ProcessorSm;->reset()I +Landroidx/emoji2/text/FontRequestEmojiCompatConfig; +HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig;->()V +HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig;->(Landroid/content/Context;Landroidx/core/provider/FontRequest;)V +HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig;->setLoadingExecutor(Ljava/util/concurrent/Executor;)Landroidx/emoji2/text/FontRequestEmojiCompatConfig; +Landroidx/emoji2/text/FontRequestEmojiCompatConfig$FontProviderHelper; +HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontProviderHelper;->()V +HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontProviderHelper;->buildTypeface(Landroid/content/Context;Landroidx/core/provider/FontsContractCompat$FontInfo;)Landroid/graphics/Typeface; +HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontProviderHelper;->fetchFonts(Landroid/content/Context;Landroidx/core/provider/FontRequest;)Landroidx/core/provider/FontsContractCompat$FontFamilyResult; +Landroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader; +HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;->(Landroid/content/Context;Landroidx/core/provider/FontRequest;Landroidx/emoji2/text/FontRequestEmojiCompatConfig$FontProviderHelper;)V +HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;->cleanUp()V +HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;->createMetadata()V +HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;->load(Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoaderCallback;)V +HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;->loadInternal()V +HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;->retrieveFontInfo()Landroidx/core/provider/FontsContractCompat$FontInfo; +HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;->setExecutor(Ljava/util/concurrent/Executor;)V +Landroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader$$ExternalSyntheticLambda0; +HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader$$ExternalSyntheticLambda0;->(Landroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;)V +HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader$$ExternalSyntheticLambda0;->run()V +Landroidx/emoji2/text/MetadataListReader; +HSPLandroidx/emoji2/text/MetadataListReader;->findOffsetInfo(Landroidx/emoji2/text/MetadataListReader$OpenTypeReader;)Landroidx/emoji2/text/MetadataListReader$OffsetInfo; +HSPLandroidx/emoji2/text/MetadataListReader;->read(Ljava/nio/ByteBuffer;)Landroidx/emoji2/text/flatbuffer/MetadataList; +HSPLandroidx/emoji2/text/MetadataListReader;->toUnsignedInt(I)J +HSPLandroidx/emoji2/text/MetadataListReader;->toUnsignedShort(S)I +Landroidx/emoji2/text/MetadataListReader$ByteBufferReader; +HSPLandroidx/emoji2/text/MetadataListReader$ByteBufferReader;->(Ljava/nio/ByteBuffer;)V +HSPLandroidx/emoji2/text/MetadataListReader$ByteBufferReader;->getPosition()J +HSPLandroidx/emoji2/text/MetadataListReader$ByteBufferReader;->readTag()I +HSPLandroidx/emoji2/text/MetadataListReader$ByteBufferReader;->readUnsignedInt()J +HSPLandroidx/emoji2/text/MetadataListReader$ByteBufferReader;->readUnsignedShort()I +HSPLandroidx/emoji2/text/MetadataListReader$ByteBufferReader;->skip(I)V +Landroidx/emoji2/text/MetadataListReader$OffsetInfo; +HSPLandroidx/emoji2/text/MetadataListReader$OffsetInfo;->(JJ)V +HSPLandroidx/emoji2/text/MetadataListReader$OffsetInfo;->getStartOffset()J +Landroidx/emoji2/text/MetadataListReader$OpenTypeReader; +Landroidx/emoji2/text/MetadataRepo; +HSPLandroidx/emoji2/text/MetadataRepo;->(Landroid/graphics/Typeface;Landroidx/emoji2/text/flatbuffer/MetadataList;)V +HSPLandroidx/emoji2/text/MetadataRepo;->constructIndex(Landroidx/emoji2/text/flatbuffer/MetadataList;)V +HSPLandroidx/emoji2/text/MetadataRepo;->create(Landroid/graphics/Typeface;Ljava/nio/ByteBuffer;)Landroidx/emoji2/text/MetadataRepo; +HPLandroidx/emoji2/text/MetadataRepo;->getMetadataList()Landroidx/emoji2/text/flatbuffer/MetadataList; +HSPLandroidx/emoji2/text/MetadataRepo;->getMetadataVersion()I +HSPLandroidx/emoji2/text/MetadataRepo;->getRootNode()Landroidx/emoji2/text/MetadataRepo$Node; +HSPLandroidx/emoji2/text/MetadataRepo;->put(Landroidx/emoji2/text/TypefaceEmojiRasterizer;)V +Landroidx/emoji2/text/MetadataRepo$Node; +HSPLandroidx/emoji2/text/MetadataRepo$Node;->()V +HSPLandroidx/emoji2/text/MetadataRepo$Node;->(I)V +HSPLandroidx/emoji2/text/MetadataRepo$Node;->get(I)Landroidx/emoji2/text/MetadataRepo$Node; +HSPLandroidx/emoji2/text/MetadataRepo$Node;->put(Landroidx/emoji2/text/TypefaceEmojiRasterizer;II)V +Landroidx/emoji2/text/SpannableBuilder; +Landroidx/emoji2/text/TypefaceEmojiRasterizer; +HSPLandroidx/emoji2/text/TypefaceEmojiRasterizer;->()V +HSPLandroidx/emoji2/text/TypefaceEmojiRasterizer;->(Landroidx/emoji2/text/MetadataRepo;I)V +HSPLandroidx/emoji2/text/TypefaceEmojiRasterizer;->getCodepointAt(I)I +HSPLandroidx/emoji2/text/TypefaceEmojiRasterizer;->getCodepointsLength()I +HSPLandroidx/emoji2/text/TypefaceEmojiRasterizer;->getId()I +Landroidx/emoji2/text/UnprecomputeTextOnModificationSpannable; +Landroidx/emoji2/text/flatbuffer/MetadataItem; +HSPLandroidx/emoji2/text/flatbuffer/MetadataItem;->()V +HSPLandroidx/emoji2/text/flatbuffer/MetadataItem;->codepoints(I)I +HSPLandroidx/emoji2/text/flatbuffer/MetadataItem;->codepointsLength()I +HSPLandroidx/emoji2/text/flatbuffer/MetadataItem;->id()I +Landroidx/emoji2/text/flatbuffer/MetadataList; +HSPLandroidx/emoji2/text/flatbuffer/MetadataList;->()V +HSPLandroidx/emoji2/text/flatbuffer/MetadataList;->__assign(ILjava/nio/ByteBuffer;)Landroidx/emoji2/text/flatbuffer/MetadataList; +HSPLandroidx/emoji2/text/flatbuffer/MetadataList;->__init(ILjava/nio/ByteBuffer;)V +HSPLandroidx/emoji2/text/flatbuffer/MetadataList;->getRootAsMetadataList(Ljava/nio/ByteBuffer;)Landroidx/emoji2/text/flatbuffer/MetadataList; +HSPLandroidx/emoji2/text/flatbuffer/MetadataList;->getRootAsMetadataList(Ljava/nio/ByteBuffer;Landroidx/emoji2/text/flatbuffer/MetadataList;)Landroidx/emoji2/text/flatbuffer/MetadataList; +HSPLandroidx/emoji2/text/flatbuffer/MetadataList;->list(Landroidx/emoji2/text/flatbuffer/MetadataItem;I)Landroidx/emoji2/text/flatbuffer/MetadataItem; +HSPLandroidx/emoji2/text/flatbuffer/MetadataList;->listLength()I +HSPLandroidx/emoji2/text/flatbuffer/MetadataList;->version()I +Landroidx/emoji2/text/flatbuffer/Table; +HSPLandroidx/emoji2/text/flatbuffer/Table;->()V +HSPLandroidx/emoji2/text/flatbuffer/Table;->__indirect(I)I +HSPLandroidx/emoji2/text/flatbuffer/Table;->__offset(I)I +HSPLandroidx/emoji2/text/flatbuffer/Table;->__reset(ILjava/nio/ByteBuffer;)V +HSPLandroidx/emoji2/text/flatbuffer/Table;->__vector(I)I +HPLandroidx/emoji2/text/flatbuffer/Table;->__vector_len(I)I +Landroidx/emoji2/text/flatbuffer/Utf8; +HSPLandroidx/emoji2/text/flatbuffer/Utf8;->()V +HSPLandroidx/emoji2/text/flatbuffer/Utf8;->getDefault()Landroidx/emoji2/text/flatbuffer/Utf8; +Landroidx/emoji2/text/flatbuffer/Utf8Safe; +HSPLandroidx/emoji2/text/flatbuffer/Utf8Safe;->()V +Landroidx/fragment/app/Fragment; +Landroidx/fragment/app/FragmentActivity; +HSPLandroidx/fragment/app/FragmentActivity;->()V +HSPLandroidx/fragment/app/FragmentActivity;->dispatchFragmentsOnCreateView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View; +HSPLandroidx/fragment/app/FragmentActivity;->init()V +HSPLandroidx/fragment/app/FragmentActivity;->lambda$init$3$androidx-fragment-app-FragmentActivity(Landroid/content/Context;)V +HSPLandroidx/fragment/app/FragmentActivity;->onCreate(Landroid/os/Bundle;)V +HSPLandroidx/fragment/app/FragmentActivity;->onCreateView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View; +HSPLandroidx/fragment/app/FragmentActivity;->onCreateView(Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View; +HSPLandroidx/fragment/app/FragmentActivity;->onPostResume()V +HSPLandroidx/fragment/app/FragmentActivity;->onResume()V +HSPLandroidx/fragment/app/FragmentActivity;->onResumeFragments()V +HSPLandroidx/fragment/app/FragmentActivity;->onStart()V +HSPLandroidx/fragment/app/FragmentActivity;->onStateNotSaved()V +Landroidx/fragment/app/FragmentActivity$$ExternalSyntheticLambda0; +HSPLandroidx/fragment/app/FragmentActivity$$ExternalSyntheticLambda0;->(Landroidx/fragment/app/FragmentActivity;)V +Landroidx/fragment/app/FragmentActivity$$ExternalSyntheticLambda1; +HSPLandroidx/fragment/app/FragmentActivity$$ExternalSyntheticLambda1;->(Landroidx/fragment/app/FragmentActivity;)V +Landroidx/fragment/app/FragmentActivity$$ExternalSyntheticLambda2; +HSPLandroidx/fragment/app/FragmentActivity$$ExternalSyntheticLambda2;->(Landroidx/fragment/app/FragmentActivity;)V +Landroidx/fragment/app/FragmentActivity$$ExternalSyntheticLambda3; +HSPLandroidx/fragment/app/FragmentActivity$$ExternalSyntheticLambda3;->(Landroidx/fragment/app/FragmentActivity;)V +HSPLandroidx/fragment/app/FragmentActivity$$ExternalSyntheticLambda3;->onContextAvailable(Landroid/content/Context;)V +Landroidx/fragment/app/FragmentActivity$HostCallbacks; +HSPLandroidx/fragment/app/FragmentActivity$HostCallbacks;->(Landroidx/fragment/app/FragmentActivity;)V +HSPLandroidx/fragment/app/FragmentActivity$HostCallbacks;->addMenuProvider(Landroidx/core/view/MenuProvider;)V +HSPLandroidx/fragment/app/FragmentActivity$HostCallbacks;->addOnConfigurationChangedListener(Landroidx/core/util/Consumer;)V +HSPLandroidx/fragment/app/FragmentActivity$HostCallbacks;->addOnMultiWindowModeChangedListener(Landroidx/core/util/Consumer;)V +HSPLandroidx/fragment/app/FragmentActivity$HostCallbacks;->addOnPictureInPictureModeChangedListener(Landroidx/core/util/Consumer;)V +HSPLandroidx/fragment/app/FragmentActivity$HostCallbacks;->addOnTrimMemoryListener(Landroidx/core/util/Consumer;)V +HSPLandroidx/fragment/app/FragmentActivity$HostCallbacks;->getActivityResultRegistry()Landroidx/activity/result/ActivityResultRegistry; +HSPLandroidx/fragment/app/FragmentActivity$HostCallbacks;->getLifecycle()Landroidx/lifecycle/Lifecycle; +HSPLandroidx/fragment/app/FragmentActivity$HostCallbacks;->getOnBackPressedDispatcher()Landroidx/activity/OnBackPressedDispatcher; +HSPLandroidx/fragment/app/FragmentActivity$HostCallbacks;->getSavedStateRegistry()Landroidx/savedstate/SavedStateRegistry; +HSPLandroidx/fragment/app/FragmentActivity$HostCallbacks;->getViewModelStore()Landroidx/lifecycle/ViewModelStore; +Landroidx/fragment/app/FragmentContainer; +HSPLandroidx/fragment/app/FragmentContainer;->()V +Landroidx/fragment/app/FragmentContainerView; +Landroidx/fragment/app/FragmentController; +HSPLandroidx/fragment/app/FragmentController;->(Landroidx/fragment/app/FragmentHostCallback;)V +HSPLandroidx/fragment/app/FragmentController;->attachHost(Landroidx/fragment/app/Fragment;)V +HSPLandroidx/fragment/app/FragmentController;->createController(Landroidx/fragment/app/FragmentHostCallback;)Landroidx/fragment/app/FragmentController; +HSPLandroidx/fragment/app/FragmentController;->dispatchActivityCreated()V +HSPLandroidx/fragment/app/FragmentController;->dispatchCreate()V +HSPLandroidx/fragment/app/FragmentController;->dispatchResume()V +HSPLandroidx/fragment/app/FragmentController;->dispatchStart()V +HSPLandroidx/fragment/app/FragmentController;->execPendingActions()Z +HSPLandroidx/fragment/app/FragmentController;->noteStateNotSaved()V +HSPLandroidx/fragment/app/FragmentController;->onCreateView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View; +Landroidx/fragment/app/FragmentFactory; +HSPLandroidx/fragment/app/FragmentFactory;->()V +HSPLandroidx/fragment/app/FragmentFactory;->()V +Landroidx/fragment/app/FragmentHostCallback; +HSPLandroidx/fragment/app/FragmentHostCallback;->(Landroid/app/Activity;Landroid/content/Context;Landroid/os/Handler;I)V +HSPLandroidx/fragment/app/FragmentHostCallback;->(Landroidx/fragment/app/FragmentActivity;)V +HSPLandroidx/fragment/app/FragmentHostCallback;->getHandler()Landroid/os/Handler; +Landroidx/fragment/app/FragmentLayoutInflaterFactory; +HSPLandroidx/fragment/app/FragmentLayoutInflaterFactory;->(Landroidx/fragment/app/FragmentManager;)V +HSPLandroidx/fragment/app/FragmentLayoutInflaterFactory;->onCreateView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View; +Landroidx/fragment/app/FragmentLifecycleCallbacksDispatcher; +HSPLandroidx/fragment/app/FragmentLifecycleCallbacksDispatcher;->(Landroidx/fragment/app/FragmentManager;)V +Landroidx/fragment/app/FragmentManager; +HSPLandroidx/fragment/app/FragmentManager;->()V +HSPLandroidx/fragment/app/FragmentManager;->()V +HSPLandroidx/fragment/app/FragmentManager;->addFragmentOnAttachListener(Landroidx/fragment/app/FragmentOnAttachListener;)V +HSPLandroidx/fragment/app/FragmentManager;->attachController(Landroidx/fragment/app/FragmentHostCallback;Landroidx/fragment/app/FragmentContainer;Landroidx/fragment/app/Fragment;)V +HSPLandroidx/fragment/app/FragmentManager;->collectAllSpecialEffectsController()Ljava/util/Set; +HSPLandroidx/fragment/app/FragmentManager;->dispatchActivityCreated()V +HSPLandroidx/fragment/app/FragmentManager;->dispatchCreate()V +HSPLandroidx/fragment/app/FragmentManager;->dispatchResume()V +HSPLandroidx/fragment/app/FragmentManager;->dispatchStart()V +HSPLandroidx/fragment/app/FragmentManager;->dispatchStateChange(I)V +HSPLandroidx/fragment/app/FragmentManager;->doPendingDeferredStart()V +HSPLandroidx/fragment/app/FragmentManager;->ensureExecReady(Z)V +HSPLandroidx/fragment/app/FragmentManager;->execPendingActions(Z)Z +HSPLandroidx/fragment/app/FragmentManager;->generateOpsForPendingActions(Ljava/util/ArrayList;Ljava/util/ArrayList;)Z +HSPLandroidx/fragment/app/FragmentManager;->getBackStackEntryCount()I +HSPLandroidx/fragment/app/FragmentManager;->getLayoutInflaterFactory()Landroid/view/LayoutInflater$Factory2; +HSPLandroidx/fragment/app/FragmentManager;->isStateSaved()Z +HSPLandroidx/fragment/app/FragmentManager;->moveToState(IZ)V +HSPLandroidx/fragment/app/FragmentManager;->noteStateNotSaved()V +HSPLandroidx/fragment/app/FragmentManager;->startPendingDeferredFragments()V +HSPLandroidx/fragment/app/FragmentManager;->updateOnBackPressedCallbackEnabled()V +Landroidx/fragment/app/FragmentManager$$ExternalSyntheticLambda0; +HSPLandroidx/fragment/app/FragmentManager$$ExternalSyntheticLambda0;->(Landroidx/fragment/app/FragmentManager;)V +Landroidx/fragment/app/FragmentManager$$ExternalSyntheticLambda1; +HSPLandroidx/fragment/app/FragmentManager$$ExternalSyntheticLambda1;->(Landroidx/fragment/app/FragmentManager;)V +Landroidx/fragment/app/FragmentManager$$ExternalSyntheticLambda2; +HSPLandroidx/fragment/app/FragmentManager$$ExternalSyntheticLambda2;->(Landroidx/fragment/app/FragmentManager;)V +Landroidx/fragment/app/FragmentManager$$ExternalSyntheticLambda3; +HSPLandroidx/fragment/app/FragmentManager$$ExternalSyntheticLambda3;->(Landroidx/fragment/app/FragmentManager;)V +Landroidx/fragment/app/FragmentManager$$ExternalSyntheticLambda4; +HSPLandroidx/fragment/app/FragmentManager$$ExternalSyntheticLambda4;->(Landroidx/fragment/app/FragmentManager;)V +Landroidx/fragment/app/FragmentManager$1; +HSPLandroidx/fragment/app/FragmentManager$1;->(Landroidx/fragment/app/FragmentManager;Z)V +Landroidx/fragment/app/FragmentManager$10; +HSPLandroidx/fragment/app/FragmentManager$10;->(Landroidx/fragment/app/FragmentManager;)V +Landroidx/fragment/app/FragmentManager$2; +HSPLandroidx/fragment/app/FragmentManager$2;->(Landroidx/fragment/app/FragmentManager;)V +Landroidx/fragment/app/FragmentManager$3; +HSPLandroidx/fragment/app/FragmentManager$3;->(Landroidx/fragment/app/FragmentManager;)V +Landroidx/fragment/app/FragmentManager$4; +HSPLandroidx/fragment/app/FragmentManager$4;->(Landroidx/fragment/app/FragmentManager;)V +Landroidx/fragment/app/FragmentManager$5; +HSPLandroidx/fragment/app/FragmentManager$5;->(Landroidx/fragment/app/FragmentManager;)V +Landroidx/fragment/app/FragmentManager$8; +HSPLandroidx/fragment/app/FragmentManager$8;->(Landroidx/fragment/app/FragmentManager;)V +Landroidx/fragment/app/FragmentManager$9; +HSPLandroidx/fragment/app/FragmentManager$9;->(Landroidx/fragment/app/FragmentManager;)V +Landroidx/fragment/app/FragmentManager$FragmentIntentSenderContract; +HSPLandroidx/fragment/app/FragmentManager$FragmentIntentSenderContract;->()V +Landroidx/fragment/app/FragmentManagerImpl; +HSPLandroidx/fragment/app/FragmentManagerImpl;->()V +Landroidx/fragment/app/FragmentManagerViewModel; +HSPLandroidx/fragment/app/FragmentManagerViewModel;->()V +HSPLandroidx/fragment/app/FragmentManagerViewModel;->(Z)V +HSPLandroidx/fragment/app/FragmentManagerViewModel;->getInstance(Landroidx/lifecycle/ViewModelStore;)Landroidx/fragment/app/FragmentManagerViewModel; +HSPLandroidx/fragment/app/FragmentManagerViewModel;->setIsStateSaved(Z)V +Landroidx/fragment/app/FragmentManagerViewModel$1; +HSPLandroidx/fragment/app/FragmentManagerViewModel$1;->()V +HSPLandroidx/fragment/app/FragmentManagerViewModel$1;->create(Ljava/lang/Class;)Landroidx/lifecycle/ViewModel; +Landroidx/fragment/app/FragmentOnAttachListener; +Landroidx/fragment/app/FragmentResultOwner; +Landroidx/fragment/app/FragmentStore; +HSPLandroidx/fragment/app/FragmentStore;->()V +HSPLandroidx/fragment/app/FragmentStore;->burpActive()V +HSPLandroidx/fragment/app/FragmentStore;->dispatchStateChange(I)V +HSPLandroidx/fragment/app/FragmentStore;->getActiveFragmentStateManagers()Ljava/util/List; +HSPLandroidx/fragment/app/FragmentStore;->getFragments()Ljava/util/List; +HSPLandroidx/fragment/app/FragmentStore;->moveToExpectedState()V +HSPLandroidx/fragment/app/FragmentStore;->setNonConfig(Landroidx/fragment/app/FragmentManagerViewModel;)V +Landroidx/fragment/app/SpecialEffectsControllerFactory; +Landroidx/lifecycle/AndroidViewModel; +Landroidx/lifecycle/DefaultLifecycleObserver; +HSPLandroidx/lifecycle/DefaultLifecycleObserver;->onCreate(Landroidx/lifecycle/LifecycleOwner;)V +HSPLandroidx/lifecycle/DefaultLifecycleObserver;->onStart(Landroidx/lifecycle/LifecycleOwner;)V +Landroidx/lifecycle/DefaultLifecycleObserverAdapter; +HSPLandroidx/lifecycle/DefaultLifecycleObserverAdapter;->(Landroidx/lifecycle/DefaultLifecycleObserver;Landroidx/lifecycle/LifecycleEventObserver;)V +HSPLandroidx/lifecycle/DefaultLifecycleObserverAdapter;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V +Landroidx/lifecycle/DefaultLifecycleObserverAdapter$WhenMappings; +HSPLandroidx/lifecycle/DefaultLifecycleObserverAdapter$WhenMappings;->()V +Landroidx/lifecycle/EmptyActivityLifecycleCallbacks; +HSPLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->()V +HSPLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V +HSPLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityResumed(Landroid/app/Activity;)V +HSPLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityStarted(Landroid/app/Activity;)V +Landroidx/lifecycle/HasDefaultViewModelProviderFactory; +Landroidx/lifecycle/Lifecycle; +HSPLandroidx/lifecycle/Lifecycle;->()V +HSPLandroidx/lifecycle/Lifecycle;->getInternalScopeRef()Ljava/util/concurrent/atomic/AtomicReference; +Landroidx/lifecycle/Lifecycle$Event; +HSPLandroidx/lifecycle/Lifecycle$Event;->$values()[Landroidx/lifecycle/Lifecycle$Event; +HSPLandroidx/lifecycle/Lifecycle$Event;->()V +HSPLandroidx/lifecycle/Lifecycle$Event;->(Ljava/lang/String;I)V +HSPLandroidx/lifecycle/Lifecycle$Event;->getTargetState()Landroidx/lifecycle/Lifecycle$State; +HSPLandroidx/lifecycle/Lifecycle$Event;->values()[Landroidx/lifecycle/Lifecycle$Event; +Landroidx/lifecycle/Lifecycle$Event$Companion; +HSPLandroidx/lifecycle/Lifecycle$Event$Companion;->()V +HSPLandroidx/lifecycle/Lifecycle$Event$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/lifecycle/Lifecycle$Event$Companion;->upFrom(Landroidx/lifecycle/Lifecycle$State;)Landroidx/lifecycle/Lifecycle$Event; +Landroidx/lifecycle/Lifecycle$Event$Companion$WhenMappings; +HSPLandroidx/lifecycle/Lifecycle$Event$Companion$WhenMappings;->()V +Landroidx/lifecycle/Lifecycle$Event$WhenMappings; +HSPLandroidx/lifecycle/Lifecycle$Event$WhenMappings;->()V +Landroidx/lifecycle/Lifecycle$State; +HSPLandroidx/lifecycle/Lifecycle$State;->$values()[Landroidx/lifecycle/Lifecycle$State; +HSPLandroidx/lifecycle/Lifecycle$State;->()V +HSPLandroidx/lifecycle/Lifecycle$State;->(Ljava/lang/String;I)V +HSPLandroidx/lifecycle/Lifecycle$State;->isAtLeast(Landroidx/lifecycle/Lifecycle$State;)Z +HSPLandroidx/lifecycle/Lifecycle$State;->values()[Landroidx/lifecycle/Lifecycle$State; +Landroidx/lifecycle/LifecycleCoroutineScope; +HSPLandroidx/lifecycle/LifecycleCoroutineScope;->()V +Landroidx/lifecycle/LifecycleCoroutineScopeImpl; +HSPLandroidx/lifecycle/LifecycleCoroutineScopeImpl;->(Landroidx/lifecycle/Lifecycle;Lkotlin/coroutines/CoroutineContext;)V +HSPLandroidx/lifecycle/LifecycleCoroutineScopeImpl;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext; +HSPLandroidx/lifecycle/LifecycleCoroutineScopeImpl;->getLifecycle$lifecycle_common()Landroidx/lifecycle/Lifecycle; +HSPLandroidx/lifecycle/LifecycleCoroutineScopeImpl;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V +HSPLandroidx/lifecycle/LifecycleCoroutineScopeImpl;->register()V +Landroidx/lifecycle/LifecycleCoroutineScopeImpl$register$1; +HSPLandroidx/lifecycle/LifecycleCoroutineScopeImpl$register$1;->(Landroidx/lifecycle/LifecycleCoroutineScopeImpl;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/lifecycle/LifecycleCoroutineScopeImpl$register$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/lifecycle/LifecycleCoroutineScopeImpl$register$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/lifecycle/LifecycleDispatcher; +HSPLandroidx/lifecycle/LifecycleDispatcher;->()V +HSPLandroidx/lifecycle/LifecycleDispatcher;->()V +HSPLandroidx/lifecycle/LifecycleDispatcher;->init(Landroid/content/Context;)V +Landroidx/lifecycle/LifecycleDispatcher$DispatcherActivityCallback; +HSPLandroidx/lifecycle/LifecycleDispatcher$DispatcherActivityCallback;->()V +HSPLandroidx/lifecycle/LifecycleDispatcher$DispatcherActivityCallback;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V +Landroidx/lifecycle/LifecycleEventObserver; +Landroidx/lifecycle/LifecycleKt; +HSPLandroidx/lifecycle/LifecycleKt;->getCoroutineScope(Landroidx/lifecycle/Lifecycle;)Landroidx/lifecycle/LifecycleCoroutineScope; +Landroidx/lifecycle/LifecycleObserver; +Landroidx/lifecycle/LifecycleOwner; +Landroidx/lifecycle/LifecycleOwnerKt; +HSPLandroidx/lifecycle/LifecycleOwnerKt;->getLifecycleScope(Landroidx/lifecycle/LifecycleOwner;)Landroidx/lifecycle/LifecycleCoroutineScope; +Landroidx/lifecycle/LifecycleRegistry; +HSPLandroidx/lifecycle/LifecycleRegistry;->()V +HSPLandroidx/lifecycle/LifecycleRegistry;->(Landroidx/lifecycle/LifecycleOwner;)V +HSPLandroidx/lifecycle/LifecycleRegistry;->(Landroidx/lifecycle/LifecycleOwner;Z)V +HSPLandroidx/lifecycle/LifecycleRegistry;->addObserver(Landroidx/lifecycle/LifecycleObserver;)V +HSPLandroidx/lifecycle/LifecycleRegistry;->calculateTargetState(Landroidx/lifecycle/LifecycleObserver;)Landroidx/lifecycle/Lifecycle$State; +HSPLandroidx/lifecycle/LifecycleRegistry;->enforceMainThreadIfNeeded(Ljava/lang/String;)V +HSPLandroidx/lifecycle/LifecycleRegistry;->forwardPass(Landroidx/lifecycle/LifecycleOwner;)V +HSPLandroidx/lifecycle/LifecycleRegistry;->getCurrentState()Landroidx/lifecycle/Lifecycle$State; +HSPLandroidx/lifecycle/LifecycleRegistry;->getCurrentStateFlow()Lkotlinx/coroutines/flow/StateFlow; +HSPLandroidx/lifecycle/LifecycleRegistry;->handleLifecycleEvent(Landroidx/lifecycle/Lifecycle$Event;)V +HSPLandroidx/lifecycle/LifecycleRegistry;->isSynced()Z +HSPLandroidx/lifecycle/LifecycleRegistry;->moveToState(Landroidx/lifecycle/Lifecycle$State;)V +HSPLandroidx/lifecycle/LifecycleRegistry;->popParentState()V +HSPLandroidx/lifecycle/LifecycleRegistry;->pushParentState(Landroidx/lifecycle/Lifecycle$State;)V +HSPLandroidx/lifecycle/LifecycleRegistry;->removeObserver(Landroidx/lifecycle/LifecycleObserver;)V +HSPLandroidx/lifecycle/LifecycleRegistry;->sync()V +Landroidx/lifecycle/LifecycleRegistry$Companion; +HSPLandroidx/lifecycle/LifecycleRegistry$Companion;->()V +HSPLandroidx/lifecycle/LifecycleRegistry$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/lifecycle/LifecycleRegistry$Companion;->min$lifecycle_runtime_release(Landroidx/lifecycle/Lifecycle$State;Landroidx/lifecycle/Lifecycle$State;)Landroidx/lifecycle/Lifecycle$State; +Landroidx/lifecycle/LifecycleRegistry$ObserverWithState; +HSPLandroidx/lifecycle/LifecycleRegistry$ObserverWithState;->(Landroidx/lifecycle/LifecycleObserver;Landroidx/lifecycle/Lifecycle$State;)V +HSPLandroidx/lifecycle/LifecycleRegistry$ObserverWithState;->dispatchEvent(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V +HSPLandroidx/lifecycle/LifecycleRegistry$ObserverWithState;->getState()Landroidx/lifecycle/Lifecycle$State; +Landroidx/lifecycle/LifecycleRegistryOwner; +Landroidx/lifecycle/Lifecycling; +HSPLandroidx/lifecycle/Lifecycling;->()V +HSPLandroidx/lifecycle/Lifecycling;->()V +HSPLandroidx/lifecycle/Lifecycling;->lifecycleEventObserver(Ljava/lang/Object;)Landroidx/lifecycle/LifecycleEventObserver; +Landroidx/lifecycle/LiveData; +HSPLandroidx/lifecycle/LiveData;->()V +HSPLandroidx/lifecycle/LiveData;->()V +HSPLandroidx/lifecycle/LiveData;->assertMainThread(Ljava/lang/String;)V +HSPLandroidx/lifecycle/LiveData;->dispatchingValue(Landroidx/lifecycle/LiveData$ObserverWrapper;)V +HSPLandroidx/lifecycle/LiveData;->postValue(Ljava/lang/Object;)V +HSPLandroidx/lifecycle/LiveData;->setValue(Ljava/lang/Object;)V +Landroidx/lifecycle/LiveData$1; +HSPLandroidx/lifecycle/LiveData$1;->(Landroidx/lifecycle/LiveData;)V +HSPLandroidx/lifecycle/LiveData$1;->run()V +Landroidx/lifecycle/MutableLiveData; +HSPLandroidx/lifecycle/MutableLiveData;->()V +HSPLandroidx/lifecycle/MutableLiveData;->postValue(Ljava/lang/Object;)V +HSPLandroidx/lifecycle/MutableLiveData;->setValue(Ljava/lang/Object;)V +Landroidx/lifecycle/ProcessLifecycleInitializer; +HSPLandroidx/lifecycle/ProcessLifecycleInitializer;->()V +HSPLandroidx/lifecycle/ProcessLifecycleInitializer;->create(Landroid/content/Context;)Landroidx/lifecycle/LifecycleOwner; +HSPLandroidx/lifecycle/ProcessLifecycleInitializer;->create(Landroid/content/Context;)Ljava/lang/Object; +HSPLandroidx/lifecycle/ProcessLifecycleInitializer;->dependencies()Ljava/util/List; +Landroidx/lifecycle/ProcessLifecycleOwner; +HSPLandroidx/lifecycle/ProcessLifecycleOwner;->()V +HSPLandroidx/lifecycle/ProcessLifecycleOwner;->()V +HSPLandroidx/lifecycle/ProcessLifecycleOwner;->access$getNewInstance$cp()Landroidx/lifecycle/ProcessLifecycleOwner; +HSPLandroidx/lifecycle/ProcessLifecycleOwner;->activityResumed$lifecycle_process_release()V +HSPLandroidx/lifecycle/ProcessLifecycleOwner;->activityStarted$lifecycle_process_release()V +HSPLandroidx/lifecycle/ProcessLifecycleOwner;->attach$lifecycle_process_release(Landroid/content/Context;)V +HSPLandroidx/lifecycle/ProcessLifecycleOwner;->getLifecycle()Landroidx/lifecycle/Lifecycle; +Landroidx/lifecycle/ProcessLifecycleOwner$$ExternalSyntheticLambda0; +HSPLandroidx/lifecycle/ProcessLifecycleOwner$$ExternalSyntheticLambda0;->(Landroidx/lifecycle/ProcessLifecycleOwner;)V +Landroidx/lifecycle/ProcessLifecycleOwner$Api29Impl; +HSPLandroidx/lifecycle/ProcessLifecycleOwner$Api29Impl;->()V +HSPLandroidx/lifecycle/ProcessLifecycleOwner$Api29Impl;->()V +HSPLandroidx/lifecycle/ProcessLifecycleOwner$Api29Impl;->registerActivityLifecycleCallbacks(Landroid/app/Activity;Landroid/app/Application$ActivityLifecycleCallbacks;)V +Landroidx/lifecycle/ProcessLifecycleOwner$Companion; +HSPLandroidx/lifecycle/ProcessLifecycleOwner$Companion;->()V +HSPLandroidx/lifecycle/ProcessLifecycleOwner$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/lifecycle/ProcessLifecycleOwner$Companion;->get()Landroidx/lifecycle/LifecycleOwner; +HSPLandroidx/lifecycle/ProcessLifecycleOwner$Companion;->init$lifecycle_process_release(Landroid/content/Context;)V +Landroidx/lifecycle/ProcessLifecycleOwner$attach$1; +HSPLandroidx/lifecycle/ProcessLifecycleOwner$attach$1;->(Landroidx/lifecycle/ProcessLifecycleOwner;)V +HSPLandroidx/lifecycle/ProcessLifecycleOwner$attach$1;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V +HSPLandroidx/lifecycle/ProcessLifecycleOwner$attach$1;->onActivityPreCreated(Landroid/app/Activity;Landroid/os/Bundle;)V +Landroidx/lifecycle/ProcessLifecycleOwner$attach$1$onActivityPreCreated$1; +HSPLandroidx/lifecycle/ProcessLifecycleOwner$attach$1$onActivityPreCreated$1;->(Landroidx/lifecycle/ProcessLifecycleOwner;)V +HSPLandroidx/lifecycle/ProcessLifecycleOwner$attach$1$onActivityPreCreated$1;->onActivityPostResumed(Landroid/app/Activity;)V +HSPLandroidx/lifecycle/ProcessLifecycleOwner$attach$1$onActivityPreCreated$1;->onActivityPostStarted(Landroid/app/Activity;)V +Landroidx/lifecycle/ProcessLifecycleOwner$initializationListener$1; +HSPLandroidx/lifecycle/ProcessLifecycleOwner$initializationListener$1;->(Landroidx/lifecycle/ProcessLifecycleOwner;)V +Landroidx/lifecycle/ReportFragment; +HSPLandroidx/lifecycle/ReportFragment;->()V +HSPLandroidx/lifecycle/ReportFragment;->()V +HSPLandroidx/lifecycle/ReportFragment;->dispatch(Landroidx/lifecycle/Lifecycle$Event;)V +HSPLandroidx/lifecycle/ReportFragment;->dispatchCreate(Landroidx/lifecycle/ReportFragment$ActivityInitializationListener;)V +HSPLandroidx/lifecycle/ReportFragment;->dispatchResume(Landroidx/lifecycle/ReportFragment$ActivityInitializationListener;)V +HSPLandroidx/lifecycle/ReportFragment;->dispatchStart(Landroidx/lifecycle/ReportFragment$ActivityInitializationListener;)V +HSPLandroidx/lifecycle/ReportFragment;->injectIfNeededIn(Landroid/app/Activity;)V +HSPLandroidx/lifecycle/ReportFragment;->onActivityCreated(Landroid/os/Bundle;)V +HSPLandroidx/lifecycle/ReportFragment;->onResume()V +HSPLandroidx/lifecycle/ReportFragment;->onStart()V +Landroidx/lifecycle/ReportFragment$ActivityInitializationListener; +Landroidx/lifecycle/ReportFragment$Companion; +HSPLandroidx/lifecycle/ReportFragment$Companion;->()V +HSPLandroidx/lifecycle/ReportFragment$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/lifecycle/ReportFragment$Companion;->dispatch$lifecycle_runtime_release(Landroid/app/Activity;Landroidx/lifecycle/Lifecycle$Event;)V +HSPLandroidx/lifecycle/ReportFragment$Companion;->injectIfNeededIn(Landroid/app/Activity;)V +Landroidx/lifecycle/ReportFragment$LifecycleCallbacks; +HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->()V +HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->()V +HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V +HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPostCreated(Landroid/app/Activity;Landroid/os/Bundle;)V +HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPostResumed(Landroid/app/Activity;)V +HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPostStarted(Landroid/app/Activity;)V +HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityResumed(Landroid/app/Activity;)V +HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityStarted(Landroid/app/Activity;)V +Landroidx/lifecycle/ReportFragment$LifecycleCallbacks$Companion; +HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks$Companion;->()V +HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks$Companion;->registerIn(Landroid/app/Activity;)V +Landroidx/lifecycle/SavedStateHandleAttacher; +HSPLandroidx/lifecycle/SavedStateHandleAttacher;->(Landroidx/lifecycle/SavedStateHandlesProvider;)V +HSPLandroidx/lifecycle/SavedStateHandleAttacher;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V +Landroidx/lifecycle/SavedStateHandleSupport; +HSPLandroidx/lifecycle/SavedStateHandleSupport;->()V +HSPLandroidx/lifecycle/SavedStateHandleSupport;->enableSavedStateHandles(Landroidx/savedstate/SavedStateRegistryOwner;)V +HSPLandroidx/lifecycle/SavedStateHandleSupport;->getSavedStateHandlesVM(Landroidx/lifecycle/ViewModelStoreOwner;)Landroidx/lifecycle/SavedStateHandlesVM; +Landroidx/lifecycle/SavedStateHandleSupport$DEFAULT_ARGS_KEY$1; +HSPLandroidx/lifecycle/SavedStateHandleSupport$DEFAULT_ARGS_KEY$1;->()V +Landroidx/lifecycle/SavedStateHandleSupport$SAVED_STATE_REGISTRY_OWNER_KEY$1; +HSPLandroidx/lifecycle/SavedStateHandleSupport$SAVED_STATE_REGISTRY_OWNER_KEY$1;->()V +Landroidx/lifecycle/SavedStateHandleSupport$VIEW_MODEL_STORE_OWNER_KEY$1; +HSPLandroidx/lifecycle/SavedStateHandleSupport$VIEW_MODEL_STORE_OWNER_KEY$1;->()V +Landroidx/lifecycle/SavedStateHandleSupport$savedStateHandlesVM$1; +HSPLandroidx/lifecycle/SavedStateHandleSupport$savedStateHandlesVM$1;->()V +HSPLandroidx/lifecycle/SavedStateHandleSupport$savedStateHandlesVM$1;->create(Ljava/lang/Class;Landroidx/lifecycle/viewmodel/CreationExtras;)Landroidx/lifecycle/ViewModel; +Landroidx/lifecycle/SavedStateHandlesProvider; +HSPLandroidx/lifecycle/SavedStateHandlesProvider;->(Landroidx/savedstate/SavedStateRegistry;Landroidx/lifecycle/ViewModelStoreOwner;)V +HSPLandroidx/lifecycle/SavedStateHandlesProvider;->getViewModel()Landroidx/lifecycle/SavedStateHandlesVM; +HSPLandroidx/lifecycle/SavedStateHandlesProvider;->performRestore()V +Landroidx/lifecycle/SavedStateHandlesProvider$viewModel$2; +HSPLandroidx/lifecycle/SavedStateHandlesProvider$viewModel$2;->(Landroidx/lifecycle/ViewModelStoreOwner;)V +HSPLandroidx/lifecycle/SavedStateHandlesProvider$viewModel$2;->invoke()Landroidx/lifecycle/SavedStateHandlesVM; +HSPLandroidx/lifecycle/SavedStateHandlesProvider$viewModel$2;->invoke()Ljava/lang/Object; +Landroidx/lifecycle/SavedStateHandlesVM; +HSPLandroidx/lifecycle/SavedStateHandlesVM;->()V +Landroidx/lifecycle/ViewModel; +HSPLandroidx/lifecycle/ViewModel;->()V +Landroidx/lifecycle/ViewModelProvider; +HSPLandroidx/lifecycle/ViewModelProvider;->(Landroidx/lifecycle/ViewModelStore;Landroidx/lifecycle/ViewModelProvider$Factory;)V +HSPLandroidx/lifecycle/ViewModelProvider;->(Landroidx/lifecycle/ViewModelStore;Landroidx/lifecycle/ViewModelProvider$Factory;Landroidx/lifecycle/viewmodel/CreationExtras;)V +HSPLandroidx/lifecycle/ViewModelProvider;->(Landroidx/lifecycle/ViewModelStore;Landroidx/lifecycle/ViewModelProvider$Factory;Landroidx/lifecycle/viewmodel/CreationExtras;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/lifecycle/ViewModelProvider;->(Landroidx/lifecycle/ViewModelStoreOwner;Landroidx/lifecycle/ViewModelProvider$Factory;)V +HSPLandroidx/lifecycle/ViewModelProvider;->get(Ljava/lang/Class;)Landroidx/lifecycle/ViewModel; +HSPLandroidx/lifecycle/ViewModelProvider;->get(Ljava/lang/String;Ljava/lang/Class;)Landroidx/lifecycle/ViewModel; +Landroidx/lifecycle/ViewModelProvider$AndroidViewModelFactory; +HSPLandroidx/lifecycle/ViewModelProvider$AndroidViewModelFactory;->()V +Landroidx/lifecycle/ViewModelProvider$AndroidViewModelFactory$Companion; +HSPLandroidx/lifecycle/ViewModelProvider$AndroidViewModelFactory$Companion;->()V +HSPLandroidx/lifecycle/ViewModelProvider$AndroidViewModelFactory$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/lifecycle/ViewModelProvider$AndroidViewModelFactory$Companion$ApplicationKeyImpl; +HSPLandroidx/lifecycle/ViewModelProvider$AndroidViewModelFactory$Companion$ApplicationKeyImpl;->()V +HSPLandroidx/lifecycle/ViewModelProvider$AndroidViewModelFactory$Companion$ApplicationKeyImpl;->()V +Landroidx/lifecycle/ViewModelProvider$Factory; +HSPLandroidx/lifecycle/ViewModelProvider$Factory;->()V +HSPLandroidx/lifecycle/ViewModelProvider$Factory;->create(Ljava/lang/Class;Landroidx/lifecycle/viewmodel/CreationExtras;)Landroidx/lifecycle/ViewModel; +Landroidx/lifecycle/ViewModelProvider$Factory$Companion; +HSPLandroidx/lifecycle/ViewModelProvider$Factory$Companion;->()V +HSPLandroidx/lifecycle/ViewModelProvider$Factory$Companion;->()V +Landroidx/lifecycle/ViewModelProvider$NewInstanceFactory; +HSPLandroidx/lifecycle/ViewModelProvider$NewInstanceFactory;->()V +Landroidx/lifecycle/ViewModelProvider$NewInstanceFactory$Companion; +HSPLandroidx/lifecycle/ViewModelProvider$NewInstanceFactory$Companion;->()V +HSPLandroidx/lifecycle/ViewModelProvider$NewInstanceFactory$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/lifecycle/ViewModelProvider$NewInstanceFactory$Companion$ViewModelKeyImpl; +HSPLandroidx/lifecycle/ViewModelProvider$NewInstanceFactory$Companion$ViewModelKeyImpl;->()V +HSPLandroidx/lifecycle/ViewModelProvider$NewInstanceFactory$Companion$ViewModelKeyImpl;->()V +Landroidx/lifecycle/ViewModelProviderGetKt; +HSPLandroidx/lifecycle/ViewModelProviderGetKt;->defaultCreationExtras(Landroidx/lifecycle/ViewModelStoreOwner;)Landroidx/lifecycle/viewmodel/CreationExtras; +Landroidx/lifecycle/ViewModelStore; +HSPLandroidx/lifecycle/ViewModelStore;->()V +HSPLandroidx/lifecycle/ViewModelStore;->get(Ljava/lang/String;)Landroidx/lifecycle/ViewModel; +HSPLandroidx/lifecycle/ViewModelStore;->put(Ljava/lang/String;Landroidx/lifecycle/ViewModel;)V +Landroidx/lifecycle/ViewModelStoreOwner; +Landroidx/lifecycle/ViewTreeLifecycleOwner; +HSPLandroidx/lifecycle/ViewTreeLifecycleOwner;->get(Landroid/view/View;)Landroidx/lifecycle/LifecycleOwner; +HSPLandroidx/lifecycle/ViewTreeLifecycleOwner;->set(Landroid/view/View;Landroidx/lifecycle/LifecycleOwner;)V +Landroidx/lifecycle/ViewTreeLifecycleOwner$findViewTreeLifecycleOwner$1; +HSPLandroidx/lifecycle/ViewTreeLifecycleOwner$findViewTreeLifecycleOwner$1;->()V +HSPLandroidx/lifecycle/ViewTreeLifecycleOwner$findViewTreeLifecycleOwner$1;->()V +HSPLandroidx/lifecycle/ViewTreeLifecycleOwner$findViewTreeLifecycleOwner$1;->invoke(Landroid/view/View;)Landroid/view/View; +HSPLandroidx/lifecycle/ViewTreeLifecycleOwner$findViewTreeLifecycleOwner$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/lifecycle/ViewTreeLifecycleOwner$findViewTreeLifecycleOwner$2; +HSPLandroidx/lifecycle/ViewTreeLifecycleOwner$findViewTreeLifecycleOwner$2;->()V +HSPLandroidx/lifecycle/ViewTreeLifecycleOwner$findViewTreeLifecycleOwner$2;->()V +HSPLandroidx/lifecycle/ViewTreeLifecycleOwner$findViewTreeLifecycleOwner$2;->invoke(Landroid/view/View;)Landroidx/lifecycle/LifecycleOwner; +HSPLandroidx/lifecycle/ViewTreeLifecycleOwner$findViewTreeLifecycleOwner$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/lifecycle/ViewTreeViewModelStoreOwner; +HSPLandroidx/lifecycle/ViewTreeViewModelStoreOwner;->get(Landroid/view/View;)Landroidx/lifecycle/ViewModelStoreOwner; +HSPLandroidx/lifecycle/ViewTreeViewModelStoreOwner;->set(Landroid/view/View;Landroidx/lifecycle/ViewModelStoreOwner;)V +Landroidx/lifecycle/ViewTreeViewModelStoreOwner$findViewTreeViewModelStoreOwner$1; +HSPLandroidx/lifecycle/ViewTreeViewModelStoreOwner$findViewTreeViewModelStoreOwner$1;->()V +HSPLandroidx/lifecycle/ViewTreeViewModelStoreOwner$findViewTreeViewModelStoreOwner$1;->()V +HSPLandroidx/lifecycle/ViewTreeViewModelStoreOwner$findViewTreeViewModelStoreOwner$1;->invoke(Landroid/view/View;)Landroid/view/View; +HSPLandroidx/lifecycle/ViewTreeViewModelStoreOwner$findViewTreeViewModelStoreOwner$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/lifecycle/ViewTreeViewModelStoreOwner$findViewTreeViewModelStoreOwner$2; +HSPLandroidx/lifecycle/ViewTreeViewModelStoreOwner$findViewTreeViewModelStoreOwner$2;->()V +HSPLandroidx/lifecycle/ViewTreeViewModelStoreOwner$findViewTreeViewModelStoreOwner$2;->()V +HSPLandroidx/lifecycle/ViewTreeViewModelStoreOwner$findViewTreeViewModelStoreOwner$2;->invoke(Landroid/view/View;)Landroidx/lifecycle/ViewModelStoreOwner; +HSPLandroidx/lifecycle/ViewTreeViewModelStoreOwner$findViewTreeViewModelStoreOwner$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/lifecycle/runtime/R$id; +Landroidx/lifecycle/viewmodel/CreationExtras; +HSPLandroidx/lifecycle/viewmodel/CreationExtras;->()V +HSPLandroidx/lifecycle/viewmodel/CreationExtras;->getMap$lifecycle_viewmodel_release()Ljava/util/Map; +Landroidx/lifecycle/viewmodel/CreationExtras$Empty; +HSPLandroidx/lifecycle/viewmodel/CreationExtras$Empty;->()V +HSPLandroidx/lifecycle/viewmodel/CreationExtras$Empty;->()V +Landroidx/lifecycle/viewmodel/CreationExtras$Key; +Landroidx/lifecycle/viewmodel/MutableCreationExtras; +HSPLandroidx/lifecycle/viewmodel/MutableCreationExtras;->()V +HSPLandroidx/lifecycle/viewmodel/MutableCreationExtras;->(Landroidx/lifecycle/viewmodel/CreationExtras;)V +HSPLandroidx/lifecycle/viewmodel/MutableCreationExtras;->(Landroidx/lifecycle/viewmodel/CreationExtras;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/lifecycle/viewmodel/MutableCreationExtras;->set(Landroidx/lifecycle/viewmodel/CreationExtras$Key;Ljava/lang/Object;)V +Landroidx/lifecycle/viewmodel/R$id; +Landroidx/loader/content/Loader; +PLandroidx/profileinstaller/ProfileInstallReceiver;->()V +PLandroidx/profileinstaller/ProfileInstallReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V +PLandroidx/profileinstaller/ProfileInstallReceiver;->saveProfile(Landroidx/profileinstaller/ProfileInstaller$DiagnosticsCallback;)V +PLandroidx/profileinstaller/ProfileInstallReceiver$ResultDiagnostics;->(Landroidx/profileinstaller/ProfileInstallReceiver;)V +PLandroidx/profileinstaller/ProfileInstallReceiver$ResultDiagnostics;->onResultReceived(ILjava/lang/Object;)V +PLandroidx/profileinstaller/ProfileInstaller;->()V +PLandroidx/profileinstaller/ProfileInstaller;->hasAlreadyWrittenProfileForThisInstall(Landroid/content/pm/PackageInfo;Ljava/io/File;Landroidx/profileinstaller/ProfileInstaller$DiagnosticsCallback;)Z +PLandroidx/profileinstaller/ProfileInstaller;->writeProfile(Landroid/content/Context;)V +PLandroidx/profileinstaller/ProfileInstaller;->writeProfile(Landroid/content/Context;Ljava/util/concurrent/Executor;Landroidx/profileinstaller/ProfileInstaller$DiagnosticsCallback;)V +PLandroidx/profileinstaller/ProfileInstaller;->writeProfile(Landroid/content/Context;Ljava/util/concurrent/Executor;Landroidx/profileinstaller/ProfileInstaller$DiagnosticsCallback;Z)V +PLandroidx/profileinstaller/ProfileInstaller$1;->()V +PLandroidx/profileinstaller/ProfileInstaller$1;->onResultReceived(ILjava/lang/Object;)V +PLandroidx/profileinstaller/ProfileInstaller$2;->()V +PLandroidx/profileinstaller/ProfileInstaller$2;->onResultReceived(ILjava/lang/Object;)V +Landroidx/profileinstaller/ProfileInstallerInitializer; +HSPLandroidx/profileinstaller/ProfileInstallerInitializer;->()V +HSPLandroidx/profileinstaller/ProfileInstallerInitializer;->create(Landroid/content/Context;)Landroidx/profileinstaller/ProfileInstallerInitializer$Result; +HSPLandroidx/profileinstaller/ProfileInstallerInitializer;->create(Landroid/content/Context;)Ljava/lang/Object; +HSPLandroidx/profileinstaller/ProfileInstallerInitializer;->delayAfterFirstFrame(Landroid/content/Context;)V +HSPLandroidx/profileinstaller/ProfileInstallerInitializer;->dependencies()Ljava/util/List; +HSPLandroidx/profileinstaller/ProfileInstallerInitializer;->installAfterDelay(Landroid/content/Context;)V +HSPLandroidx/profileinstaller/ProfileInstallerInitializer;->lambda$delayAfterFirstFrame$0$androidx-profileinstaller-ProfileInstallerInitializer(Landroid/content/Context;)V +PLandroidx/profileinstaller/ProfileInstallerInitializer;->lambda$installAfterDelay$1(Landroid/content/Context;)V +PLandroidx/profileinstaller/ProfileInstallerInitializer;->lambda$writeInBackground$2(Landroid/content/Context;)V +PLandroidx/profileinstaller/ProfileInstallerInitializer;->writeInBackground(Landroid/content/Context;)V +Landroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda0; +HSPLandroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda0;->(Landroid/content/Context;)V +PLandroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda0;->run()V +Landroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda1; +HSPLandroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda1;->(Landroidx/profileinstaller/ProfileInstallerInitializer;Landroid/content/Context;)V +HSPLandroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda1;->run()V +PLandroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda2;->(Landroid/content/Context;)V +PLandroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda2;->run()V +Landroidx/profileinstaller/ProfileInstallerInitializer$Choreographer16Impl; +HSPLandroidx/profileinstaller/ProfileInstallerInitializer$Choreographer16Impl;->lambda$postFrameCallback$0(Ljava/lang/Runnable;J)V +HSPLandroidx/profileinstaller/ProfileInstallerInitializer$Choreographer16Impl;->postFrameCallback(Ljava/lang/Runnable;)V +Landroidx/profileinstaller/ProfileInstallerInitializer$Choreographer16Impl$$ExternalSyntheticLambda0; +HSPLandroidx/profileinstaller/ProfileInstallerInitializer$Choreographer16Impl$$ExternalSyntheticLambda0;->(Ljava/lang/Runnable;)V +HSPLandroidx/profileinstaller/ProfileInstallerInitializer$Choreographer16Impl$$ExternalSyntheticLambda0;->doFrame(J)V +Landroidx/profileinstaller/ProfileInstallerInitializer$Handler28Impl; +HSPLandroidx/profileinstaller/ProfileInstallerInitializer$Handler28Impl;->createAsync(Landroid/os/Looper;)Landroid/os/Handler; +Landroidx/profileinstaller/ProfileInstallerInitializer$Result; +HSPLandroidx/profileinstaller/ProfileInstallerInitializer$Result;->()V +PLandroidx/profileinstaller/ProfileVerifier;->()V +PLandroidx/profileinstaller/ProfileVerifier;->getPackageLastUpdateTime(Landroid/content/Context;)J +PLandroidx/profileinstaller/ProfileVerifier;->setCompilationStatus(IZZ)Landroidx/profileinstaller/ProfileVerifier$CompilationStatus; +PLandroidx/profileinstaller/ProfileVerifier;->writeProfileVerification(Landroid/content/Context;Z)Landroidx/profileinstaller/ProfileVerifier$CompilationStatus; +PLandroidx/profileinstaller/ProfileVerifier$Api33Impl;->getPackageInfo(Landroid/content/pm/PackageManager;Landroid/content/Context;)Landroid/content/pm/PackageInfo; +PLandroidx/profileinstaller/ProfileVerifier$Cache;->(IIJJ)V +PLandroidx/profileinstaller/ProfileVerifier$Cache;->equals(Ljava/lang/Object;)Z +PLandroidx/profileinstaller/ProfileVerifier$Cache;->readFromFile(Ljava/io/File;)Landroidx/profileinstaller/ProfileVerifier$Cache; +PLandroidx/profileinstaller/ProfileVerifier$Cache;->writeOnFile(Ljava/io/File;)V +PLandroidx/profileinstaller/ProfileVerifier$CompilationStatus;->(IZZ)V +Landroidx/room/AutoClosingRoomOpenHelper; +Landroidx/room/CoroutinesRoom; +HSPLandroidx/room/CoroutinesRoom;->()V +HSPLandroidx/room/CoroutinesRoom;->createFlow(Landroidx/room/RoomDatabase;Z[Ljava/lang/String;Ljava/util/concurrent/Callable;)Lkotlinx/coroutines/flow/Flow; +HSPLandroidx/room/CoroutinesRoom;->execute(Landroidx/room/RoomDatabase;ZLjava/util/concurrent/Callable;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/room/CoroutinesRoom$Companion; +HSPLandroidx/room/CoroutinesRoom$Companion;->()V +HSPLandroidx/room/CoroutinesRoom$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/room/CoroutinesRoom$Companion;->createFlow(Landroidx/room/RoomDatabase;Z[Ljava/lang/String;Ljava/util/concurrent/Callable;)Lkotlinx/coroutines/flow/Flow; +HSPLandroidx/room/CoroutinesRoom$Companion;->execute(Landroidx/room/RoomDatabase;ZLjava/util/concurrent/Callable;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/room/CoroutinesRoom$Companion$createFlow$1; +HSPLandroidx/room/CoroutinesRoom$Companion$createFlow$1;->(ZLandroidx/room/RoomDatabase;[Ljava/lang/String;Ljava/util/concurrent/Callable;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/room/CoroutinesRoom$Companion$createFlow$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/room/CoroutinesRoom$Companion$createFlow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/room/CoroutinesRoom$Companion$createFlow$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/room/CoroutinesRoom$Companion$createFlow$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/room/CoroutinesRoom$Companion$createFlow$1$1; +HSPLandroidx/room/CoroutinesRoom$Companion$createFlow$1$1;->(ZLandroidx/room/RoomDatabase;Lkotlinx/coroutines/flow/FlowCollector;[Ljava/lang/String;Ljava/util/concurrent/Callable;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/room/CoroutinesRoom$Companion$createFlow$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/room/CoroutinesRoom$Companion$createFlow$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/room/CoroutinesRoom$Companion$createFlow$1$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/room/CoroutinesRoom$Companion$createFlow$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/room/CoroutinesRoom$Companion$createFlow$1$1$1; +HSPLandroidx/room/CoroutinesRoom$Companion$createFlow$1$1$1;->(Landroidx/room/RoomDatabase;Landroidx/room/CoroutinesRoom$Companion$createFlow$1$1$observer$1;Lkotlinx/coroutines/channels/Channel;Ljava/util/concurrent/Callable;Lkotlinx/coroutines/channels/Channel;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/room/CoroutinesRoom$Companion$createFlow$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/room/CoroutinesRoom$Companion$createFlow$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/room/CoroutinesRoom$Companion$createFlow$1$1$observer$1; +HSPLandroidx/room/CoroutinesRoom$Companion$createFlow$1$1$observer$1;->([Ljava/lang/String;Lkotlinx/coroutines/channels/Channel;)V +Landroidx/room/DatabaseConfiguration; +HSPLandroidx/room/DatabaseConfiguration;->(Landroid/content/Context;Ljava/lang/String;Landroidx/sqlite/db/SupportSQLiteOpenHelper$Factory;Landroidx/room/RoomDatabase$MigrationContainer;Ljava/util/List;ZLandroidx/room/RoomDatabase$JournalMode;Ljava/util/concurrent/Executor;Ljava/util/concurrent/Executor;Landroid/content/Intent;ZZLjava/util/Set;Ljava/lang/String;Ljava/io/File;Ljava/util/concurrent/Callable;Landroidx/room/RoomDatabase$PrepackagedDatabaseCallback;Ljava/util/List;Ljava/util/List;)V +Landroidx/room/DelegatingOpenHelper; +Landroidx/room/EntityDeletionOrUpdateAdapter; +HSPLandroidx/room/EntityDeletionOrUpdateAdapter;->(Landroidx/room/RoomDatabase;)V +Landroidx/room/EntityInsertionAdapter; +HSPLandroidx/room/EntityInsertionAdapter;->(Landroidx/room/RoomDatabase;)V +HSPLandroidx/room/EntityInsertionAdapter;->insert(Ljava/lang/Object;)V +Landroidx/room/InvalidationLiveDataContainer; +HSPLandroidx/room/InvalidationLiveDataContainer;->(Landroidx/room/RoomDatabase;)V +Landroidx/room/InvalidationTracker; +HSPLandroidx/room/InvalidationTracker;->()V +HSPLandroidx/room/InvalidationTracker;->(Landroidx/room/RoomDatabase;Ljava/util/Map;Ljava/util/Map;[Ljava/lang/String;)V +HSPLandroidx/room/InvalidationTracker;->access$getAutoCloser$p(Landroidx/room/InvalidationTracker;)Landroidx/room/AutoCloser; +HSPLandroidx/room/InvalidationTracker;->addObserver(Landroidx/room/InvalidationTracker$Observer;)V +HSPLandroidx/room/InvalidationTracker;->ensureInitialization$room_runtime_release()Z +HSPLandroidx/room/InvalidationTracker;->getDatabase$room_runtime_release()Landroidx/room/RoomDatabase; +HSPLandroidx/room/InvalidationTracker;->getPendingRefresh()Ljava/util/concurrent/atomic/AtomicBoolean; +HSPLandroidx/room/InvalidationTracker;->internalInit$room_runtime_release(Landroidx/sqlite/db/SupportSQLiteDatabase;)V +HSPLandroidx/room/InvalidationTracker;->refreshVersionsAsync()V +HSPLandroidx/room/InvalidationTracker;->removeObserver(Landroidx/room/InvalidationTracker$Observer;)V +HSPLandroidx/room/InvalidationTracker;->resolveViews([Ljava/lang/String;)[Ljava/lang/String; +HSPLandroidx/room/InvalidationTracker;->syncTriggers$room_runtime_release()V +HSPLandroidx/room/InvalidationTracker;->syncTriggers$room_runtime_release(Landroidx/sqlite/db/SupportSQLiteDatabase;)V +Landroidx/room/InvalidationTracker$Companion; +HSPLandroidx/room/InvalidationTracker$Companion;->()V +HSPLandroidx/room/InvalidationTracker$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/room/InvalidationTracker$ObservedTableTracker; +HSPLandroidx/room/InvalidationTracker$ObservedTableTracker;->()V +HSPLandroidx/room/InvalidationTracker$ObservedTableTracker;->(I)V +HSPLandroidx/room/InvalidationTracker$ObservedTableTracker;->getTablesToSync()[I +HSPLandroidx/room/InvalidationTracker$ObservedTableTracker;->onAdded([I)Z +HSPLandroidx/room/InvalidationTracker$ObservedTableTracker;->onRemoved([I)Z +Landroidx/room/InvalidationTracker$ObservedTableTracker$Companion; +HSPLandroidx/room/InvalidationTracker$ObservedTableTracker$Companion;->()V +HSPLandroidx/room/InvalidationTracker$ObservedTableTracker$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/room/InvalidationTracker$Observer; +HSPLandroidx/room/InvalidationTracker$Observer;->([Ljava/lang/String;)V +HSPLandroidx/room/InvalidationTracker$Observer;->getTables$room_runtime_release()[Ljava/lang/String; +Landroidx/room/InvalidationTracker$ObserverWrapper; +HSPLandroidx/room/InvalidationTracker$ObserverWrapper;->(Landroidx/room/InvalidationTracker$Observer;[I[Ljava/lang/String;)V +HSPLandroidx/room/InvalidationTracker$ObserverWrapper;->getTableIds$room_runtime_release()[I +Landroidx/room/InvalidationTracker$refreshRunnable$1; +HSPLandroidx/room/InvalidationTracker$refreshRunnable$1;->(Landroidx/room/InvalidationTracker;)V +HSPLandroidx/room/InvalidationTracker$refreshRunnable$1;->checkUpdatedTable()Ljava/util/Set; +HSPLandroidx/room/InvalidationTracker$refreshRunnable$1;->run()V +Landroidx/room/Room; +HSPLandroidx/room/Room;->()V +HSPLandroidx/room/Room;->()V +HSPLandroidx/room/Room;->databaseBuilder(Landroid/content/Context;Ljava/lang/Class;Ljava/lang/String;)Landroidx/room/RoomDatabase$Builder; +HSPLandroidx/room/Room;->getGeneratedImplementation(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Object; +Landroidx/room/RoomDatabase; +HSPLandroidx/room/RoomDatabase;->()V +HSPLandroidx/room/RoomDatabase;->()V +HSPLandroidx/room/RoomDatabase;->assertNotMainThread()V +HSPLandroidx/room/RoomDatabase;->assertNotSuspendingTransaction()V +HSPLandroidx/room/RoomDatabase;->beginTransaction()V +HSPLandroidx/room/RoomDatabase;->compileStatement(Ljava/lang/String;)Landroidx/sqlite/db/SupportSQLiteStatement; +HSPLandroidx/room/RoomDatabase;->endTransaction()V +HSPLandroidx/room/RoomDatabase;->getCloseLock$room_runtime_release()Ljava/util/concurrent/locks/Lock; +HSPLandroidx/room/RoomDatabase;->getInvalidationTracker()Landroidx/room/InvalidationTracker; +HSPLandroidx/room/RoomDatabase;->getOpenHelper()Landroidx/sqlite/db/SupportSQLiteOpenHelper; +HSPLandroidx/room/RoomDatabase;->getQueryExecutor()Ljava/util/concurrent/Executor; +HSPLandroidx/room/RoomDatabase;->getSuspendingTransactionId()Ljava/lang/ThreadLocal; +HSPLandroidx/room/RoomDatabase;->getTransactionExecutor()Ljava/util/concurrent/Executor; +HSPLandroidx/room/RoomDatabase;->inTransaction()Z +HSPLandroidx/room/RoomDatabase;->init(Landroidx/room/DatabaseConfiguration;)V +HSPLandroidx/room/RoomDatabase;->internalBeginTransaction()V +HSPLandroidx/room/RoomDatabase;->internalEndTransaction()V +HSPLandroidx/room/RoomDatabase;->internalInitInvalidationTracker(Landroidx/sqlite/db/SupportSQLiteDatabase;)V +HSPLandroidx/room/RoomDatabase;->isMainThread$room_runtime_release()Z +HSPLandroidx/room/RoomDatabase;->isOpenInternal()Z +HSPLandroidx/room/RoomDatabase;->query$default(Landroidx/room/RoomDatabase;Landroidx/sqlite/db/SupportSQLiteQuery;Landroid/os/CancellationSignal;ILjava/lang/Object;)Landroid/database/Cursor; +HSPLandroidx/room/RoomDatabase;->query(Landroidx/sqlite/db/SupportSQLiteQuery;Landroid/os/CancellationSignal;)Landroid/database/Cursor; +HSPLandroidx/room/RoomDatabase;->runInTransaction(Ljava/util/concurrent/Callable;)Ljava/lang/Object; +HSPLandroidx/room/RoomDatabase;->setTransactionSuccessful()V +HSPLandroidx/room/RoomDatabase;->unwrapOpenHelper(Ljava/lang/Class;Landroidx/sqlite/db/SupportSQLiteOpenHelper;)Ljava/lang/Object; +Landroidx/room/RoomDatabase$Builder; +HSPLandroidx/room/RoomDatabase$Builder;->(Landroid/content/Context;Ljava/lang/Class;Ljava/lang/String;)V +HSPLandroidx/room/RoomDatabase$Builder;->addCallback(Landroidx/room/RoomDatabase$Callback;)Landroidx/room/RoomDatabase$Builder; +HSPLandroidx/room/RoomDatabase$Builder;->addMigrations([Landroidx/room/migration/Migration;)Landroidx/room/RoomDatabase$Builder; +HSPLandroidx/room/RoomDatabase$Builder;->addTypeConverter(Ljava/lang/Object;)Landroidx/room/RoomDatabase$Builder; +HSPLandroidx/room/RoomDatabase$Builder;->build()Landroidx/room/RoomDatabase; +HSPLandroidx/room/RoomDatabase$Builder;->fallbackToDestructiveMigration()Landroidx/room/RoomDatabase$Builder; +HSPLandroidx/room/RoomDatabase$Builder;->openHelperFactory(Landroidx/sqlite/db/SupportSQLiteOpenHelper$Factory;)Landroidx/room/RoomDatabase$Builder; +HSPLandroidx/room/RoomDatabase$Builder;->setQueryExecutor(Ljava/util/concurrent/Executor;)Landroidx/room/RoomDatabase$Builder; +Landroidx/room/RoomDatabase$Callback; +HSPLandroidx/room/RoomDatabase$Callback;->()V +HSPLandroidx/room/RoomDatabase$Callback;->onOpen(Landroidx/sqlite/db/SupportSQLiteDatabase;)V +Landroidx/room/RoomDatabase$Companion; +HSPLandroidx/room/RoomDatabase$Companion;->()V +HSPLandroidx/room/RoomDatabase$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/room/RoomDatabase$JournalMode; +HSPLandroidx/room/RoomDatabase$JournalMode;->$values()[Landroidx/room/RoomDatabase$JournalMode; +HSPLandroidx/room/RoomDatabase$JournalMode;->()V +HSPLandroidx/room/RoomDatabase$JournalMode;->(Ljava/lang/String;I)V +HSPLandroidx/room/RoomDatabase$JournalMode;->isLowRamDevice(Landroid/app/ActivityManager;)Z +HSPLandroidx/room/RoomDatabase$JournalMode;->resolve$room_runtime_release(Landroid/content/Context;)Landroidx/room/RoomDatabase$JournalMode; +Landroidx/room/RoomDatabase$MigrationContainer; +HSPLandroidx/room/RoomDatabase$MigrationContainer;->()V +HSPLandroidx/room/RoomDatabase$MigrationContainer;->addMigration(Landroidx/room/migration/Migration;)V +HSPLandroidx/room/RoomDatabase$MigrationContainer;->addMigrations([Landroidx/room/migration/Migration;)V +HSPLandroidx/room/RoomDatabase$MigrationContainer;->contains(II)Z +HSPLandroidx/room/RoomDatabase$MigrationContainer;->getMigrations()Ljava/util/Map; +Landroidx/room/RoomDatabase$PrepackagedDatabaseCallback; +Landroidx/room/RoomDatabaseKt; +HSPLandroidx/room/RoomDatabaseKt;->access$createTransactionContext(Landroidx/room/RoomDatabase;Lkotlin/coroutines/ContinuationInterceptor;)Lkotlin/coroutines/CoroutineContext; +HSPLandroidx/room/RoomDatabaseKt;->createTransactionContext(Landroidx/room/RoomDatabase;Lkotlin/coroutines/ContinuationInterceptor;)Lkotlin/coroutines/CoroutineContext; +HSPLandroidx/room/RoomDatabaseKt;->startTransactionCoroutine(Landroidx/room/RoomDatabase;Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/room/RoomDatabaseKt;->withTransaction(Landroidx/room/RoomDatabase;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/room/RoomDatabaseKt$startTransactionCoroutine$2$1; +HSPLandroidx/room/RoomDatabaseKt$startTransactionCoroutine$2$1;->(Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/CancellableContinuation;Landroidx/room/RoomDatabase;Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/room/RoomDatabaseKt$startTransactionCoroutine$2$1;->run()V +Landroidx/room/RoomDatabaseKt$startTransactionCoroutine$2$1$1; +HSPLandroidx/room/RoomDatabaseKt$startTransactionCoroutine$2$1$1;->(Landroidx/room/RoomDatabase;Lkotlinx/coroutines/CancellableContinuation;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/room/RoomDatabaseKt$startTransactionCoroutine$2$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/room/RoomDatabaseKt$startTransactionCoroutine$2$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/room/RoomDatabaseKt$withTransaction$transactionBlock$1; +HSPLandroidx/room/RoomDatabaseKt$withTransaction$transactionBlock$1;->(Landroidx/room/RoomDatabase;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/room/RoomDatabaseKt$withTransaction$transactionBlock$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/room/RoomDatabaseKt$withTransaction$transactionBlock$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/room/RoomDatabaseKt$withTransaction$transactionBlock$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/room/RoomDatabaseKt$withTransaction$transactionBlock$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +PLandroidx/room/RoomMasterTable;->()V +PLandroidx/room/RoomMasterTable;->()V +PLandroidx/room/RoomMasterTable;->createInsertQuery(Ljava/lang/String;)Ljava/lang/String; +Landroidx/room/RoomOpenHelper; +HSPLandroidx/room/RoomOpenHelper;->()V +HSPLandroidx/room/RoomOpenHelper;->(Landroidx/room/DatabaseConfiguration;Landroidx/room/RoomOpenHelper$Delegate;Ljava/lang/String;Ljava/lang/String;)V +HSPLandroidx/room/RoomOpenHelper;->checkIdentity(Landroidx/sqlite/db/SupportSQLiteDatabase;)V +PLandroidx/room/RoomOpenHelper;->createMasterTableIfNotExists(Landroidx/sqlite/db/SupportSQLiteDatabase;)V +HSPLandroidx/room/RoomOpenHelper;->onConfigure(Landroidx/sqlite/db/SupportSQLiteDatabase;)V +PLandroidx/room/RoomOpenHelper;->onCreate(Landroidx/sqlite/db/SupportSQLiteDatabase;)V +HSPLandroidx/room/RoomOpenHelper;->onOpen(Landroidx/sqlite/db/SupportSQLiteDatabase;)V +PLandroidx/room/RoomOpenHelper;->updateIdentity(Landroidx/sqlite/db/SupportSQLiteDatabase;)V +Landroidx/room/RoomOpenHelper$Companion; +HSPLandroidx/room/RoomOpenHelper$Companion;->()V +HSPLandroidx/room/RoomOpenHelper$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +PLandroidx/room/RoomOpenHelper$Companion;->hasEmptySchema$room_runtime_release(Landroidx/sqlite/db/SupportSQLiteDatabase;)Z +HSPLandroidx/room/RoomOpenHelper$Companion;->hasRoomMasterTable$room_runtime_release(Landroidx/sqlite/db/SupportSQLiteDatabase;)Z +Landroidx/room/RoomOpenHelper$Delegate; +HSPLandroidx/room/RoomOpenHelper$Delegate;->(I)V +Landroidx/room/RoomSQLiteQuery; +HSPLandroidx/room/RoomSQLiteQuery;->()V +HSPLandroidx/room/RoomSQLiteQuery;->(I)V +HSPLandroidx/room/RoomSQLiteQuery;->(ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/room/RoomSQLiteQuery;->acquire(Ljava/lang/String;I)Landroidx/room/RoomSQLiteQuery; +HSPLandroidx/room/RoomSQLiteQuery;->bindLong(IJ)V +HSPLandroidx/room/RoomSQLiteQuery;->bindString(ILjava/lang/String;)V +HSPLandroidx/room/RoomSQLiteQuery;->bindTo(Landroidx/sqlite/db/SupportSQLiteProgram;)V +HSPLandroidx/room/RoomSQLiteQuery;->getArgCount()I +HSPLandroidx/room/RoomSQLiteQuery;->getSql()Ljava/lang/String; +HSPLandroidx/room/RoomSQLiteQuery;->init(Ljava/lang/String;I)V +HSPLandroidx/room/RoomSQLiteQuery;->release()V +Landroidx/room/RoomSQLiteQuery$Companion; +HSPLandroidx/room/RoomSQLiteQuery$Companion;->()V +HSPLandroidx/room/RoomSQLiteQuery$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/room/RoomSQLiteQuery$Companion;->acquire(Ljava/lang/String;I)Landroidx/room/RoomSQLiteQuery; +HSPLandroidx/room/RoomSQLiteQuery$Companion;->prunePoolLocked$room_runtime_release()V +Landroidx/room/SQLiteCopyOpenHelper; +Landroidx/room/SharedSQLiteStatement; +HSPLandroidx/room/SharedSQLiteStatement;->(Landroidx/room/RoomDatabase;)V +HSPLandroidx/room/SharedSQLiteStatement;->access$createNewStatement(Landroidx/room/SharedSQLiteStatement;)Landroidx/sqlite/db/SupportSQLiteStatement; +HSPLandroidx/room/SharedSQLiteStatement;->acquire()Landroidx/sqlite/db/SupportSQLiteStatement; +HSPLandroidx/room/SharedSQLiteStatement;->assertNotMainThread()V +HSPLandroidx/room/SharedSQLiteStatement;->createNewStatement()Landroidx/sqlite/db/SupportSQLiteStatement; +HSPLandroidx/room/SharedSQLiteStatement;->getStmt()Landroidx/sqlite/db/SupportSQLiteStatement; +HSPLandroidx/room/SharedSQLiteStatement;->getStmt(Z)Landroidx/sqlite/db/SupportSQLiteStatement; +HSPLandroidx/room/SharedSQLiteStatement;->release(Landroidx/sqlite/db/SupportSQLiteStatement;)V +Landroidx/room/SharedSQLiteStatement$stmt$2; +HSPLandroidx/room/SharedSQLiteStatement$stmt$2;->(Landroidx/room/SharedSQLiteStatement;)V +HSPLandroidx/room/SharedSQLiteStatement$stmt$2;->invoke()Landroidx/sqlite/db/SupportSQLiteStatement; +HSPLandroidx/room/SharedSQLiteStatement$stmt$2;->invoke()Ljava/lang/Object; +Landroidx/room/TransactionElement; +HSPLandroidx/room/TransactionElement;->()V +HSPLandroidx/room/TransactionElement;->(Lkotlin/coroutines/ContinuationInterceptor;)V +HSPLandroidx/room/TransactionElement;->acquire()V +HSPLandroidx/room/TransactionElement;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; +HSPLandroidx/room/TransactionElement;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; +HSPLandroidx/room/TransactionElement;->getKey()Lkotlin/coroutines/CoroutineContext$Key; +HSPLandroidx/room/TransactionElement;->getTransactionDispatcher$room_ktx_release()Lkotlin/coroutines/ContinuationInterceptor; +HSPLandroidx/room/TransactionElement;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext; +HSPLandroidx/room/TransactionElement;->release()V +Landroidx/room/TransactionElement$Key; +HSPLandroidx/room/TransactionElement$Key;->()V +HSPLandroidx/room/TransactionElement$Key;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/room/TransactionExecutor; +HSPLandroidx/room/TransactionExecutor;->$r8$lambda$AympDHYBb78s7_N_9gRsXF0sHiw(Ljava/lang/Runnable;Landroidx/room/TransactionExecutor;)V +HSPLandroidx/room/TransactionExecutor;->(Ljava/util/concurrent/Executor;)V +HSPLandroidx/room/TransactionExecutor;->execute$lambda$1$lambda$0(Ljava/lang/Runnable;Landroidx/room/TransactionExecutor;)V +HSPLandroidx/room/TransactionExecutor;->execute(Ljava/lang/Runnable;)V +HSPLandroidx/room/TransactionExecutor;->scheduleNext()V +Landroidx/room/TransactionExecutor$$ExternalSyntheticLambda0; +HSPLandroidx/room/TransactionExecutor$$ExternalSyntheticLambda0;->(Ljava/lang/Runnable;Landroidx/room/TransactionExecutor;)V +HSPLandroidx/room/TransactionExecutor$$ExternalSyntheticLambda0;->run()V +Landroidx/room/migration/AutoMigrationSpec; +Landroidx/room/migration/Migration; +HSPLandroidx/room/migration/Migration;->(II)V +Landroidx/room/util/CursorUtil; +HSPLandroidx/room/util/CursorUtil;->getColumnIndex(Landroid/database/Cursor;Ljava/lang/String;)I +HSPLandroidx/room/util/CursorUtil;->getColumnIndexOrThrow(Landroid/database/Cursor;Ljava/lang/String;)I +Landroidx/room/util/DBUtil; +HSPLandroidx/room/util/DBUtil;->query(Landroidx/room/RoomDatabase;Landroidx/sqlite/db/SupportSQLiteQuery;ZLandroid/os/CancellationSignal;)Landroid/database/Cursor; +Landroidx/savedstate/R$id; +Landroidx/savedstate/Recreator; +HSPLandroidx/savedstate/Recreator;->()V +HSPLandroidx/savedstate/Recreator;->(Landroidx/savedstate/SavedStateRegistryOwner;)V +HSPLandroidx/savedstate/Recreator;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V +Landroidx/savedstate/Recreator$Companion; +HSPLandroidx/savedstate/Recreator$Companion;->()V +HSPLandroidx/savedstate/Recreator$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/savedstate/SavedStateRegistry; +HSPLandroidx/savedstate/SavedStateRegistry;->$r8$lambda$AUDDdpkzZrJMhBj0r-_9pI-j6hA(Landroidx/savedstate/SavedStateRegistry;Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V +HSPLandroidx/savedstate/SavedStateRegistry;->()V +HSPLandroidx/savedstate/SavedStateRegistry;->()V +HSPLandroidx/savedstate/SavedStateRegistry;->consumeRestoredStateForKey(Ljava/lang/String;)Landroid/os/Bundle; +HSPLandroidx/savedstate/SavedStateRegistry;->getSavedStateProvider(Ljava/lang/String;)Landroidx/savedstate/SavedStateRegistry$SavedStateProvider; +HSPLandroidx/savedstate/SavedStateRegistry;->performAttach$lambda$4(Landroidx/savedstate/SavedStateRegistry;Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V +HSPLandroidx/savedstate/SavedStateRegistry;->performAttach$savedstate_release(Landroidx/lifecycle/Lifecycle;)V +HSPLandroidx/savedstate/SavedStateRegistry;->performRestore$savedstate_release(Landroid/os/Bundle;)V +HSPLandroidx/savedstate/SavedStateRegistry;->registerSavedStateProvider(Ljava/lang/String;Landroidx/savedstate/SavedStateRegistry$SavedStateProvider;)V +Landroidx/savedstate/SavedStateRegistry$$ExternalSyntheticLambda0; +HSPLandroidx/savedstate/SavedStateRegistry$$ExternalSyntheticLambda0;->(Landroidx/savedstate/SavedStateRegistry;)V +HSPLandroidx/savedstate/SavedStateRegistry$$ExternalSyntheticLambda0;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V +Landroidx/savedstate/SavedStateRegistry$Companion; +HSPLandroidx/savedstate/SavedStateRegistry$Companion;->()V +HSPLandroidx/savedstate/SavedStateRegistry$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/savedstate/SavedStateRegistry$SavedStateProvider; +Landroidx/savedstate/SavedStateRegistryController; +HSPLandroidx/savedstate/SavedStateRegistryController;->()V +HSPLandroidx/savedstate/SavedStateRegistryController;->(Landroidx/savedstate/SavedStateRegistryOwner;)V +HSPLandroidx/savedstate/SavedStateRegistryController;->(Landroidx/savedstate/SavedStateRegistryOwner;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/savedstate/SavedStateRegistryController;->create(Landroidx/savedstate/SavedStateRegistryOwner;)Landroidx/savedstate/SavedStateRegistryController; +HSPLandroidx/savedstate/SavedStateRegistryController;->getSavedStateRegistry()Landroidx/savedstate/SavedStateRegistry; +HSPLandroidx/savedstate/SavedStateRegistryController;->performAttach()V +HSPLandroidx/savedstate/SavedStateRegistryController;->performRestore(Landroid/os/Bundle;)V +Landroidx/savedstate/SavedStateRegistryController$Companion; +HSPLandroidx/savedstate/SavedStateRegistryController$Companion;->()V +HSPLandroidx/savedstate/SavedStateRegistryController$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/savedstate/SavedStateRegistryController$Companion;->create(Landroidx/savedstate/SavedStateRegistryOwner;)Landroidx/savedstate/SavedStateRegistryController; +Landroidx/savedstate/SavedStateRegistryOwner; +Landroidx/savedstate/ViewTreeSavedStateRegistryOwner; +HSPLandroidx/savedstate/ViewTreeSavedStateRegistryOwner;->get(Landroid/view/View;)Landroidx/savedstate/SavedStateRegistryOwner; +HSPLandroidx/savedstate/ViewTreeSavedStateRegistryOwner;->set(Landroid/view/View;Landroidx/savedstate/SavedStateRegistryOwner;)V +Landroidx/savedstate/ViewTreeSavedStateRegistryOwner$findViewTreeSavedStateRegistryOwner$1; +HSPLandroidx/savedstate/ViewTreeSavedStateRegistryOwner$findViewTreeSavedStateRegistryOwner$1;->()V +HSPLandroidx/savedstate/ViewTreeSavedStateRegistryOwner$findViewTreeSavedStateRegistryOwner$1;->()V +HSPLandroidx/savedstate/ViewTreeSavedStateRegistryOwner$findViewTreeSavedStateRegistryOwner$1;->invoke(Landroid/view/View;)Landroid/view/View; +HSPLandroidx/savedstate/ViewTreeSavedStateRegistryOwner$findViewTreeSavedStateRegistryOwner$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/savedstate/ViewTreeSavedStateRegistryOwner$findViewTreeSavedStateRegistryOwner$2; +HSPLandroidx/savedstate/ViewTreeSavedStateRegistryOwner$findViewTreeSavedStateRegistryOwner$2;->()V +HSPLandroidx/savedstate/ViewTreeSavedStateRegistryOwner$findViewTreeSavedStateRegistryOwner$2;->()V +HSPLandroidx/savedstate/ViewTreeSavedStateRegistryOwner$findViewTreeSavedStateRegistryOwner$2;->invoke(Landroid/view/View;)Landroidx/savedstate/SavedStateRegistryOwner; +HSPLandroidx/savedstate/ViewTreeSavedStateRegistryOwner$findViewTreeSavedStateRegistryOwner$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/security/crypto/EncryptedSharedPreferences; +HSPLandroidx/security/crypto/EncryptedSharedPreferences;->(Ljava/lang/String;Ljava/lang/String;Landroid/content/SharedPreferences;Lcom/google/crypto/tink/Aead;Lcom/google/crypto/tink/DeterministicAead;)V +HSPLandroidx/security/crypto/EncryptedSharedPreferences;->create(Landroid/content/Context;Ljava/lang/String;Landroidx/security/crypto/MasterKey;Landroidx/security/crypto/EncryptedSharedPreferences$PrefKeyEncryptionScheme;Landroidx/security/crypto/EncryptedSharedPreferences$PrefValueEncryptionScheme;)Landroid/content/SharedPreferences; +HSPLandroidx/security/crypto/EncryptedSharedPreferences;->create(Ljava/lang/String;Ljava/lang/String;Landroid/content/Context;Landroidx/security/crypto/EncryptedSharedPreferences$PrefKeyEncryptionScheme;Landroidx/security/crypto/EncryptedSharedPreferences$PrefValueEncryptionScheme;)Landroid/content/SharedPreferences; +HSPLandroidx/security/crypto/EncryptedSharedPreferences;->edit()Landroid/content/SharedPreferences$Editor; +HSPLandroidx/security/crypto/EncryptedSharedPreferences;->encryptKey(Ljava/lang/String;)Ljava/lang/String; +HSPLandroidx/security/crypto/EncryptedSharedPreferences;->encryptKeyValuePair(Ljava/lang/String;[B)Landroid/util/Pair; +HSPLandroidx/security/crypto/EncryptedSharedPreferences;->getBoolean(Ljava/lang/String;Z)Z +HSPLandroidx/security/crypto/EncryptedSharedPreferences;->getDecryptedObject(Ljava/lang/String;)Ljava/lang/Object; +HSPLandroidx/security/crypto/EncryptedSharedPreferences;->getString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; +HSPLandroidx/security/crypto/EncryptedSharedPreferences;->isReservedKey(Ljava/lang/String;)Z +HSPLandroidx/security/crypto/EncryptedSharedPreferences;->registerOnSharedPreferenceChangeListener(Landroid/content/SharedPreferences$OnSharedPreferenceChangeListener;)V +HSPLandroidx/security/crypto/EncryptedSharedPreferences;->unregisterOnSharedPreferenceChangeListener(Landroid/content/SharedPreferences$OnSharedPreferenceChangeListener;)V +Landroidx/security/crypto/EncryptedSharedPreferences$1; +HSPLandroidx/security/crypto/EncryptedSharedPreferences$1;->()V +Landroidx/security/crypto/EncryptedSharedPreferences$Editor; +HSPLandroidx/security/crypto/EncryptedSharedPreferences$Editor;->(Landroidx/security/crypto/EncryptedSharedPreferences;Landroid/content/SharedPreferences$Editor;)V +HSPLandroidx/security/crypto/EncryptedSharedPreferences$Editor;->clearKeysIfNeeded()V +HSPLandroidx/security/crypto/EncryptedSharedPreferences$Editor;->commit()Z +HSPLandroidx/security/crypto/EncryptedSharedPreferences$Editor;->notifyListeners()V +HSPLandroidx/security/crypto/EncryptedSharedPreferences$Editor;->putEncryptedObject(Ljava/lang/String;[B)V +HSPLandroidx/security/crypto/EncryptedSharedPreferences$Editor;->putLong(Ljava/lang/String;J)Landroid/content/SharedPreferences$Editor; +HSPLandroidx/security/crypto/EncryptedSharedPreferences$Editor;->putString(Ljava/lang/String;Ljava/lang/String;)Landroid/content/SharedPreferences$Editor; +Landroidx/security/crypto/EncryptedSharedPreferences$EncryptedType; +HSPLandroidx/security/crypto/EncryptedSharedPreferences$EncryptedType;->$values()[Landroidx/security/crypto/EncryptedSharedPreferences$EncryptedType; +HSPLandroidx/security/crypto/EncryptedSharedPreferences$EncryptedType;->()V +HSPLandroidx/security/crypto/EncryptedSharedPreferences$EncryptedType;->(Ljava/lang/String;II)V +HSPLandroidx/security/crypto/EncryptedSharedPreferences$EncryptedType;->fromId(I)Landroidx/security/crypto/EncryptedSharedPreferences$EncryptedType; +HSPLandroidx/security/crypto/EncryptedSharedPreferences$EncryptedType;->getId()I +HSPLandroidx/security/crypto/EncryptedSharedPreferences$EncryptedType;->values()[Landroidx/security/crypto/EncryptedSharedPreferences$EncryptedType; +Landroidx/security/crypto/EncryptedSharedPreferences$PrefKeyEncryptionScheme; +HSPLandroidx/security/crypto/EncryptedSharedPreferences$PrefKeyEncryptionScheme;->$values()[Landroidx/security/crypto/EncryptedSharedPreferences$PrefKeyEncryptionScheme; +HSPLandroidx/security/crypto/EncryptedSharedPreferences$PrefKeyEncryptionScheme;->()V +HSPLandroidx/security/crypto/EncryptedSharedPreferences$PrefKeyEncryptionScheme;->(Ljava/lang/String;ILjava/lang/String;)V +HSPLandroidx/security/crypto/EncryptedSharedPreferences$PrefKeyEncryptionScheme;->getKeyTemplate()Lcom/google/crypto/tink/KeyTemplate; +Landroidx/security/crypto/EncryptedSharedPreferences$PrefValueEncryptionScheme; +HSPLandroidx/security/crypto/EncryptedSharedPreferences$PrefValueEncryptionScheme;->$values()[Landroidx/security/crypto/EncryptedSharedPreferences$PrefValueEncryptionScheme; +HSPLandroidx/security/crypto/EncryptedSharedPreferences$PrefValueEncryptionScheme;->()V +HSPLandroidx/security/crypto/EncryptedSharedPreferences$PrefValueEncryptionScheme;->(Ljava/lang/String;ILjava/lang/String;)V +HSPLandroidx/security/crypto/EncryptedSharedPreferences$PrefValueEncryptionScheme;->getKeyTemplate()Lcom/google/crypto/tink/KeyTemplate; +Landroidx/security/crypto/MasterKey; +HSPLandroidx/security/crypto/MasterKey;->(Ljava/lang/String;Ljava/lang/Object;)V +HSPLandroidx/security/crypto/MasterKey;->getDefaultAuthenticationValidityDurationSeconds()I +HSPLandroidx/security/crypto/MasterKey;->getKeyAlias()Ljava/lang/String; +Landroidx/security/crypto/MasterKey$1; +HSPLandroidx/security/crypto/MasterKey$1;->()V +Landroidx/security/crypto/MasterKey$Builder; +HSPLandroidx/security/crypto/MasterKey$Builder;->(Landroid/content/Context;Ljava/lang/String;)V +HSPLandroidx/security/crypto/MasterKey$Builder;->build()Landroidx/security/crypto/MasterKey; +HSPLandroidx/security/crypto/MasterKey$Builder;->setKeyScheme(Landroidx/security/crypto/MasterKey$KeyScheme;)Landroidx/security/crypto/MasterKey$Builder; +HSPLandroidx/security/crypto/MasterKey$Builder;->setRequestStrongBoxBacked(Z)Landroidx/security/crypto/MasterKey$Builder; +HSPLandroidx/security/crypto/MasterKey$Builder;->setUserAuthenticationRequired(Z)Landroidx/security/crypto/MasterKey$Builder; +HSPLandroidx/security/crypto/MasterKey$Builder;->setUserAuthenticationRequired(ZI)Landroidx/security/crypto/MasterKey$Builder; +Landroidx/security/crypto/MasterKey$Builder$Api23Impl; +HSPLandroidx/security/crypto/MasterKey$Builder$Api23Impl;->build(Landroidx/security/crypto/MasterKey$Builder;)Landroidx/security/crypto/MasterKey; +Landroidx/security/crypto/MasterKey$KeyScheme; +HSPLandroidx/security/crypto/MasterKey$KeyScheme;->$values()[Landroidx/security/crypto/MasterKey$KeyScheme; +HSPLandroidx/security/crypto/MasterKey$KeyScheme;->()V +HSPLandroidx/security/crypto/MasterKey$KeyScheme;->(Ljava/lang/String;I)V +HSPLandroidx/security/crypto/MasterKey$KeyScheme;->values()[Landroidx/security/crypto/MasterKey$KeyScheme; +Landroidx/security/crypto/MasterKeys; +HSPLandroidx/security/crypto/MasterKeys;->()V +HSPLandroidx/security/crypto/MasterKeys;->createAES256GCMKeyGenParameterSpec(Ljava/lang/String;)Landroid/security/keystore/KeyGenParameterSpec; +HSPLandroidx/security/crypto/MasterKeys;->generateKey(Landroid/security/keystore/KeyGenParameterSpec;)V +HSPLandroidx/security/crypto/MasterKeys;->getOrCreate(Landroid/security/keystore/KeyGenParameterSpec;)Ljava/lang/String; +HSPLandroidx/security/crypto/MasterKeys;->keyExists(Ljava/lang/String;)Z +HSPLandroidx/security/crypto/MasterKeys;->validate(Landroid/security/keystore/KeyGenParameterSpec;)V +Landroidx/sqlite/db/SimpleSQLiteQuery; +HSPLandroidx/sqlite/db/SimpleSQLiteQuery;->()V +HSPLandroidx/sqlite/db/SimpleSQLiteQuery;->(Ljava/lang/String;)V +HSPLandroidx/sqlite/db/SimpleSQLiteQuery;->(Ljava/lang/String;[Ljava/lang/Object;)V +HSPLandroidx/sqlite/db/SimpleSQLiteQuery;->bindTo(Landroidx/sqlite/db/SupportSQLiteProgram;)V +HSPLandroidx/sqlite/db/SimpleSQLiteQuery;->getSql()Ljava/lang/String; +Landroidx/sqlite/db/SimpleSQLiteQuery$Companion; +HSPLandroidx/sqlite/db/SimpleSQLiteQuery$Companion;->()V +HSPLandroidx/sqlite/db/SimpleSQLiteQuery$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/sqlite/db/SimpleSQLiteQuery$Companion;->bind(Landroidx/sqlite/db/SupportSQLiteProgram;[Ljava/lang/Object;)V +Landroidx/sqlite/db/SupportSQLiteCompat$Api16Impl; +HSPLandroidx/sqlite/db/SupportSQLiteCompat$Api16Impl;->()V +HSPLandroidx/sqlite/db/SupportSQLiteCompat$Api16Impl;->()V +HSPLandroidx/sqlite/db/SupportSQLiteCompat$Api16Impl;->isWriteAheadLoggingEnabled(Landroid/database/sqlite/SQLiteDatabase;)Z +HSPLandroidx/sqlite/db/SupportSQLiteCompat$Api16Impl;->setWriteAheadLoggingEnabled(Landroid/database/sqlite/SQLiteOpenHelper;Z)V +Landroidx/sqlite/db/SupportSQLiteCompat$Api19Impl; +HSPLandroidx/sqlite/db/SupportSQLiteCompat$Api19Impl;->()V +HSPLandroidx/sqlite/db/SupportSQLiteCompat$Api19Impl;->()V +HSPLandroidx/sqlite/db/SupportSQLiteCompat$Api19Impl;->isLowRamDevice(Landroid/app/ActivityManager;)Z +Landroidx/sqlite/db/SupportSQLiteCompat$Api21Impl; +HSPLandroidx/sqlite/db/SupportSQLiteCompat$Api21Impl;->()V +HSPLandroidx/sqlite/db/SupportSQLiteCompat$Api21Impl;->()V +HSPLandroidx/sqlite/db/SupportSQLiteCompat$Api21Impl;->getNoBackupFilesDir(Landroid/content/Context;)Ljava/io/File; +Landroidx/sqlite/db/SupportSQLiteDatabase; +Landroidx/sqlite/db/SupportSQLiteOpenHelper; +Landroidx/sqlite/db/SupportSQLiteOpenHelper$Callback; +HSPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;->()V +HSPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;->(I)V +HSPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;->onConfigure(Landroidx/sqlite/db/SupportSQLiteDatabase;)V +HSPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;->onOpen(Landroidx/sqlite/db/SupportSQLiteDatabase;)V +Landroidx/sqlite/db/SupportSQLiteOpenHelper$Callback$Companion; +HSPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Callback$Companion;->()V +HSPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Callback$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration; +HSPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration;->()V +HSPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration;->(Landroid/content/Context;Ljava/lang/String;Landroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;ZZ)V +HSPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration;->builder(Landroid/content/Context;)Landroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration$Builder; +Landroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration$Builder; +HSPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration$Builder;->(Landroid/content/Context;)V +HSPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration$Builder;->allowDataLossOnRecovery(Z)Landroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration$Builder; +HSPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration$Builder;->build()Landroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration; +HSPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration$Builder;->callback(Landroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;)Landroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration$Builder; +HSPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration$Builder;->name(Ljava/lang/String;)Landroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration$Builder; +HSPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration$Builder;->noBackupDirectory(Z)Landroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration$Builder; +Landroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration$Companion; +HSPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration$Companion;->()V +HSPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration$Companion;->builder(Landroid/content/Context;)Landroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration$Builder; +Landroidx/sqlite/db/SupportSQLiteOpenHelper$Factory; +Landroidx/sqlite/db/SupportSQLiteProgram; +Landroidx/sqlite/db/SupportSQLiteQuery; +Landroidx/sqlite/db/SupportSQLiteStatement; +Landroidx/sqlite/db/framework/FrameworkSQLiteDatabase; +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->$r8$lambda$xWs7VTYEzeAWyi_2-SJixQ1HyKQ(Lkotlin/jvm/functions/Function4;Landroid/database/sqlite/SQLiteDatabase;Landroid/database/sqlite/SQLiteCursorDriver;Ljava/lang/String;Landroid/database/sqlite/SQLiteQuery;)Landroid/database/Cursor; +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->()V +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->(Landroid/database/sqlite/SQLiteDatabase;)V +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->beginTransaction()V +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->beginTransactionNonExclusive()V +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->compileStatement(Ljava/lang/String;)Landroidx/sqlite/db/SupportSQLiteStatement; +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->endTransaction()V +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->execSQL(Ljava/lang/String;)V +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->inTransaction()Z +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->isDelegate(Landroid/database/sqlite/SQLiteDatabase;)Z +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->isOpen()Z +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->isWriteAheadLoggingEnabled()Z +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->query$lambda$0(Lkotlin/jvm/functions/Function4;Landroid/database/sqlite/SQLiteDatabase;Landroid/database/sqlite/SQLiteCursorDriver;Ljava/lang/String;Landroid/database/sqlite/SQLiteQuery;)Landroid/database/Cursor; +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->query(Landroidx/sqlite/db/SupportSQLiteQuery;)Landroid/database/Cursor; +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->query(Ljava/lang/String;)Landroid/database/Cursor; +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->setTransactionSuccessful()V +Landroidx/sqlite/db/framework/FrameworkSQLiteDatabase$$ExternalSyntheticLambda1; +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase$$ExternalSyntheticLambda1;->(Lkotlin/jvm/functions/Function4;)V +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase$$ExternalSyntheticLambda1;->newCursor(Landroid/database/sqlite/SQLiteDatabase;Landroid/database/sqlite/SQLiteCursorDriver;Ljava/lang/String;Landroid/database/sqlite/SQLiteQuery;)Landroid/database/Cursor; +Landroidx/sqlite/db/framework/FrameworkSQLiteDatabase$Companion; +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase$Companion;->()V +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/sqlite/db/framework/FrameworkSQLiteDatabase$query$cursorFactory$1; +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase$query$cursorFactory$1;->(Landroidx/sqlite/db/SupportSQLiteQuery;)V +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase$query$cursorFactory$1;->invoke(Landroid/database/sqlite/SQLiteDatabase;Landroid/database/sqlite/SQLiteCursorDriver;Ljava/lang/String;Landroid/database/sqlite/SQLiteQuery;)Landroid/database/sqlite/SQLiteCursor; +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase$query$cursorFactory$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper; +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;->()V +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;->(Landroid/content/Context;Ljava/lang/String;Landroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;ZZ)V +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;->access$getAllowDataLossOnRecovery$p(Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;)Z +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;->access$getCallback$p(Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;)Landroidx/sqlite/db/SupportSQLiteOpenHelper$Callback; +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;->access$getContext$p(Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;)Landroid/content/Context; +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;->access$getName$p(Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;)Ljava/lang/String; +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;->access$getUseNoBackupDirectory$p(Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;)Z +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;->access$getWriteAheadLoggingEnabled$p(Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;)Z +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;->getDelegate()Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper; +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;->getWritableDatabase()Landroidx/sqlite/db/SupportSQLiteDatabase; +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;->setWriteAheadLoggingEnabled(Z)V +Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$Companion; +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$Companion;->()V +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$DBRefHolder; +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$DBRefHolder;->(Landroidx/sqlite/db/framework/FrameworkSQLiteDatabase;)V +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$DBRefHolder;->getDb()Landroidx/sqlite/db/framework/FrameworkSQLiteDatabase; +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$DBRefHolder;->setDb(Landroidx/sqlite/db/framework/FrameworkSQLiteDatabase;)V +Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper; +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper;->()V +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper;->(Landroid/content/Context;Ljava/lang/String;Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$DBRefHolder;Landroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;Z)V +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper;->getSupportDatabase(Z)Landroidx/sqlite/db/SupportSQLiteDatabase; +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper;->getWrappedDb(Landroid/database/sqlite/SQLiteDatabase;)Landroidx/sqlite/db/framework/FrameworkSQLiteDatabase; +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper;->getWritableOrReadableDatabase(Z)Landroid/database/sqlite/SQLiteDatabase; +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper;->innerGetDatabase(Z)Landroid/database/sqlite/SQLiteDatabase; +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper;->onConfigure(Landroid/database/sqlite/SQLiteDatabase;)V +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper;->onOpen(Landroid/database/sqlite/SQLiteDatabase;)V +Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper$$ExternalSyntheticLambda0; +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper$$ExternalSyntheticLambda0;->(Landroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$DBRefHolder;)V +Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper$CallbackException; +Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper$Companion; +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper$Companion;->()V +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper$Companion;->getWrappedDb(Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$DBRefHolder;Landroid/database/sqlite/SQLiteDatabase;)Landroidx/sqlite/db/framework/FrameworkSQLiteDatabase; +Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$lazyDelegate$1; +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$lazyDelegate$1;->(Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;)V +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$lazyDelegate$1;->invoke()Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper; +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$lazyDelegate$1;->invoke()Ljava/lang/Object; +Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelperFactory; +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelperFactory;->()V +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelperFactory;->create(Landroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration;)Landroidx/sqlite/db/SupportSQLiteOpenHelper; +Landroidx/sqlite/db/framework/FrameworkSQLiteProgram; +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteProgram;->(Landroid/database/sqlite/SQLiteProgram;)V +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteProgram;->bindBlob(I[B)V +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteProgram;->bindLong(IJ)V +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteProgram;->bindString(ILjava/lang/String;)V +Landroidx/sqlite/db/framework/FrameworkSQLiteStatement; +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteStatement;->(Landroid/database/sqlite/SQLiteStatement;)V +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteStatement;->executeInsert()J +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteStatement;->executeUpdateDelete()I +Landroidx/sqlite/util/ProcessLock; +HSPLandroidx/sqlite/util/ProcessLock;->()V +HSPLandroidx/sqlite/util/ProcessLock;->(Ljava/lang/String;Ljava/io/File;Z)V +HSPLandroidx/sqlite/util/ProcessLock;->access$getThreadLocksMap$cp()Ljava/util/Map; +HSPLandroidx/sqlite/util/ProcessLock;->lock(Z)V +HSPLandroidx/sqlite/util/ProcessLock;->unlock()V +Landroidx/sqlite/util/ProcessLock$Companion; +HSPLandroidx/sqlite/util/ProcessLock$Companion;->()V +HSPLandroidx/sqlite/util/ProcessLock$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/sqlite/util/ProcessLock$Companion;->access$getThreadLock(Landroidx/sqlite/util/ProcessLock$Companion;Ljava/lang/String;)Ljava/util/concurrent/locks/Lock; +HSPLandroidx/sqlite/util/ProcessLock$Companion;->getThreadLock(Ljava/lang/String;)Ljava/util/concurrent/locks/Lock; +Landroidx/startup/AppInitializer; +HSPLandroidx/startup/AppInitializer;->()V +HSPLandroidx/startup/AppInitializer;->(Landroid/content/Context;)V +HSPLandroidx/startup/AppInitializer;->discoverAndInitialize()V +HSPLandroidx/startup/AppInitializer;->discoverAndInitialize(Landroid/os/Bundle;)V +HSPLandroidx/startup/AppInitializer;->doInitialize(Ljava/lang/Class;)Ljava/lang/Object; +HSPLandroidx/startup/AppInitializer;->doInitialize(Ljava/lang/Class;Ljava/util/Set;)Ljava/lang/Object; +HSPLandroidx/startup/AppInitializer;->getInstance(Landroid/content/Context;)Landroidx/startup/AppInitializer; +HSPLandroidx/startup/AppInitializer;->initializeComponent(Ljava/lang/Class;)Ljava/lang/Object; +HSPLandroidx/startup/AppInitializer;->isEagerlyInitialized(Ljava/lang/Class;)Z +Landroidx/startup/InitializationProvider; +HSPLandroidx/startup/InitializationProvider;->()V +HSPLandroidx/startup/InitializationProvider;->onCreate()Z +Landroidx/startup/Initializer; +Landroidx/startup/R$string; +Landroidx/tracing/Trace; +HSPLandroidx/tracing/Trace;->beginSection(Ljava/lang/String;)V +HSPLandroidx/tracing/Trace;->endSection()V +HSPLandroidx/tracing/Trace;->isEnabled()Z +Landroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0; +HSPLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m$1()Ljava/lang/String; +HSPLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m$1()V +HSPLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m()Ljava/lang/String; +HSPLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m()V +HSPLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m()Z +HSPLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m(Landroid/app/ActivityManager;Ljava/lang/String;II)Ljava/util/List; +HSPLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m(Landroid/app/ApplicationExitInfo;)I +HSPLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m(Landroid/app/ApplicationExitInfo;)J +PLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m(Landroid/app/job/JobInfo$Builder;Z)Landroid/app/job/JobInfo$Builder; +HSPLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m(Landroid/content/pm/PackageInfo;)J +HSPLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m(Landroid/os/StrictMode$VmPolicy$Builder;)Landroid/os/StrictMode$VmPolicy$Builder; +HSPLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m(Ljava/lang/Object;)Landroid/app/ApplicationExitInfo; +HSPLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m(Ljava/lang/String;J)Landroid/database/CursorWindow; +HSPLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m(Ljava/lang/String;Ljava/lang/ClassLoader;)Ldalvik/system/DelegateLastClassLoader; +Landroidx/tracing/TraceApi18Impl; +HSPLandroidx/tracing/TraceApi18Impl;->beginSection(Ljava/lang/String;)V +HSPLandroidx/tracing/TraceApi18Impl;->endSection()V +Landroidx/vectordrawable/graphics/drawable/VectorDrawableCommon; +Landroidx/vectordrawable/graphics/drawable/VectorDrawableCompat; +Landroidx/work/BackoffPolicy; +HSPLandroidx/work/BackoffPolicy;->$values()[Landroidx/work/BackoffPolicy; +HSPLandroidx/work/BackoffPolicy;->()V +HSPLandroidx/work/BackoffPolicy;->(Ljava/lang/String;I)V +HSPLandroidx/work/BackoffPolicy;->values()[Landroidx/work/BackoffPolicy; +Landroidx/work/Clock; +Landroidx/work/Configuration; +HSPLandroidx/work/Configuration;->()V +HSPLandroidx/work/Configuration;->(Landroidx/work/Configuration$Builder;)V +HSPLandroidx/work/Configuration;->getClock()Landroidx/work/Clock; +HSPLandroidx/work/Configuration;->getDefaultProcessName()Ljava/lang/String; +HSPLandroidx/work/Configuration;->getExecutor()Ljava/util/concurrent/Executor; +HSPLandroidx/work/Configuration;->getInputMergerFactory()Landroidx/work/InputMergerFactory; +PLandroidx/work/Configuration;->getMaxJobSchedulerId()I +HSPLandroidx/work/Configuration;->getMaxSchedulerLimit()I +PLandroidx/work/Configuration;->getMinJobSchedulerId()I +HSPLandroidx/work/Configuration;->getMinimumLoggingLevel()I +HSPLandroidx/work/Configuration;->getRunnableScheduler()Landroidx/work/RunnableScheduler; +HSPLandroidx/work/Configuration;->getTaskExecutor()Ljava/util/concurrent/Executor; +HSPLandroidx/work/Configuration;->getWorkerFactory()Landroidx/work/WorkerFactory; +Landroidx/work/Configuration$Builder; +HSPLandroidx/work/Configuration$Builder;->()V +HSPLandroidx/work/Configuration$Builder;->build()Landroidx/work/Configuration; +HSPLandroidx/work/Configuration$Builder;->getClock$work_runtime_release()Landroidx/work/Clock; +HSPLandroidx/work/Configuration$Builder;->getContentUriTriggerWorkersLimit$work_runtime_release()I +HSPLandroidx/work/Configuration$Builder;->getDefaultProcessName$work_runtime_release()Ljava/lang/String; +HSPLandroidx/work/Configuration$Builder;->getExecutor$work_runtime_release()Ljava/util/concurrent/Executor; +HSPLandroidx/work/Configuration$Builder;->getInitializationExceptionHandler$work_runtime_release()Landroidx/core/util/Consumer; +HSPLandroidx/work/Configuration$Builder;->getInputMergerFactory$work_runtime_release()Landroidx/work/InputMergerFactory; +HSPLandroidx/work/Configuration$Builder;->getLoggingLevel$work_runtime_release()I +HSPLandroidx/work/Configuration$Builder;->getMaxJobSchedulerId$work_runtime_release()I +HSPLandroidx/work/Configuration$Builder;->getMaxSchedulerLimit$work_runtime_release()I +HSPLandroidx/work/Configuration$Builder;->getMinJobSchedulerId$work_runtime_release()I +HSPLandroidx/work/Configuration$Builder;->getRunnableScheduler$work_runtime_release()Landroidx/work/RunnableScheduler; +HSPLandroidx/work/Configuration$Builder;->getSchedulingExceptionHandler$work_runtime_release()Landroidx/core/util/Consumer; +HSPLandroidx/work/Configuration$Builder;->getTaskExecutor$work_runtime_release()Ljava/util/concurrent/Executor; +HSPLandroidx/work/Configuration$Builder;->getWorkerFactory$work_runtime_release()Landroidx/work/WorkerFactory; +Landroidx/work/Configuration$Companion; +HSPLandroidx/work/Configuration$Companion;->()V +HSPLandroidx/work/Configuration$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/work/ConfigurationKt; +HSPLandroidx/work/ConfigurationKt;->()V +HSPLandroidx/work/ConfigurationKt;->access$createDefaultExecutor(Z)Ljava/util/concurrent/Executor; +HSPLandroidx/work/ConfigurationKt;->createDefaultExecutor(Z)Ljava/util/concurrent/Executor; +HSPLandroidx/work/ConfigurationKt;->getDEFAULT_CONTENT_URI_TRIGGERS_WORKERS_LIMIT()I +Landroidx/work/ConfigurationKt$createDefaultExecutor$factory$1; +HSPLandroidx/work/ConfigurationKt$createDefaultExecutor$factory$1;->(Z)V +HSPLandroidx/work/ConfigurationKt$createDefaultExecutor$factory$1;->newThread(Ljava/lang/Runnable;)Ljava/lang/Thread; +Landroidx/work/Constraints; +HSPLandroidx/work/Constraints;->()V +HSPLandroidx/work/Constraints;->(Landroidx/work/Constraints;)V +HSPLandroidx/work/Constraints;->(Landroidx/work/NetworkType;ZZZ)V +HSPLandroidx/work/Constraints;->(Landroidx/work/NetworkType;ZZZILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/work/Constraints;->(Landroidx/work/NetworkType;ZZZZ)V +HSPLandroidx/work/Constraints;->(Landroidx/work/NetworkType;ZZZZJJLjava/util/Set;)V +HSPLandroidx/work/Constraints;->(Landroidx/work/NetworkType;ZZZZJJLjava/util/Set;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/work/Constraints;->equals(Ljava/lang/Object;)Z +HSPLandroidx/work/Constraints;->getContentTriggerMaxDelayMillis()J +HSPLandroidx/work/Constraints;->getContentTriggerUpdateDelayMillis()J +HSPLandroidx/work/Constraints;->getContentUriTriggers()Ljava/util/Set; +HSPLandroidx/work/Constraints;->getRequiredNetworkType()Landroidx/work/NetworkType; +HSPLandroidx/work/Constraints;->hasContentUriTriggers()Z +HSPLandroidx/work/Constraints;->hashCode()I +HSPLandroidx/work/Constraints;->requiresBatteryNotLow()Z +HSPLandroidx/work/Constraints;->requiresCharging()Z +HSPLandroidx/work/Constraints;->requiresDeviceIdle()Z +HSPLandroidx/work/Constraints;->requiresStorageNotLow()Z +Landroidx/work/Constraints$Builder; +HSPLandroidx/work/Constraints$Builder;->()V +HSPLandroidx/work/Constraints$Builder;->build()Landroidx/work/Constraints; +HSPLandroidx/work/Constraints$Builder;->setRequiredNetworkType(Landroidx/work/NetworkType;)Landroidx/work/Constraints$Builder; +Landroidx/work/Constraints$Companion; +HSPLandroidx/work/Constraints$Companion;->()V +HSPLandroidx/work/Constraints$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/work/CoroutineWorker; +HSPLandroidx/work/CoroutineWorker;->$r8$lambda$vS4ut6uACXh9vB8D1LtSlAShhGE(Landroidx/work/CoroutineWorker;)V +HSPLandroidx/work/CoroutineWorker;->(Landroid/content/Context;Landroidx/work/WorkerParameters;)V +HSPLandroidx/work/CoroutineWorker;->_init_$lambda$0(Landroidx/work/CoroutineWorker;)V +HSPLandroidx/work/CoroutineWorker;->getCoroutineContext()Lkotlinx/coroutines/CoroutineDispatcher; +HSPLandroidx/work/CoroutineWorker;->getFuture$work_runtime_release()Landroidx/work/impl/utils/futures/SettableFuture; +HSPLandroidx/work/CoroutineWorker;->startWork()Lcom/google/common/util/concurrent/ListenableFuture; +Landroidx/work/CoroutineWorker$$ExternalSyntheticLambda0; +HSPLandroidx/work/CoroutineWorker$$ExternalSyntheticLambda0;->(Landroidx/work/CoroutineWorker;)V +HSPLandroidx/work/CoroutineWorker$$ExternalSyntheticLambda0;->run()V +Landroidx/work/CoroutineWorker$startWork$1; +HSPLandroidx/work/CoroutineWorker$startWork$1;->(Landroidx/work/CoroutineWorker;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/work/CoroutineWorker$startWork$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/work/CoroutineWorker$startWork$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/work/Data; +HSPLandroidx/work/Data;->()V +HSPLandroidx/work/Data;->(Landroidx/work/Data;)V +HSPLandroidx/work/Data;->(Ljava/util/Map;)V +HSPLandroidx/work/Data;->fromByteArray([B)Landroidx/work/Data; +HSPLandroidx/work/Data;->getKeyValueMap()Ljava/util/Map; +HSPLandroidx/work/Data;->getStringArray(Ljava/lang/String;)[Ljava/lang/String; +HSPLandroidx/work/Data;->hashCode()I +HSPLandroidx/work/Data;->size()I +HSPLandroidx/work/Data;->toByteArrayInternal(Landroidx/work/Data;)[B +HSPLandroidx/work/Data;->toString()Ljava/lang/String; +Landroidx/work/Data$Builder; +HSPLandroidx/work/Data$Builder;->()V +HSPLandroidx/work/Data$Builder;->build()Landroidx/work/Data; +HSPLandroidx/work/Data$Builder;->put(Ljava/lang/String;Ljava/lang/Object;)Landroidx/work/Data$Builder; +HSPLandroidx/work/Data$Builder;->putAll(Ljava/util/Map;)Landroidx/work/Data$Builder; +HSPLandroidx/work/Data$Builder;->putStringArray(Ljava/lang/String;[Ljava/lang/String;)Landroidx/work/Data$Builder; +Landroidx/work/ExistingPeriodicWorkPolicy; +HSPLandroidx/work/ExistingPeriodicWorkPolicy;->$values()[Landroidx/work/ExistingPeriodicWorkPolicy; +HSPLandroidx/work/ExistingPeriodicWorkPolicy;->()V +HSPLandroidx/work/ExistingPeriodicWorkPolicy;->(Ljava/lang/String;I)V +Landroidx/work/ExistingWorkPolicy; +HSPLandroidx/work/ExistingWorkPolicy;->$values()[Landroidx/work/ExistingWorkPolicy; +HSPLandroidx/work/ExistingWorkPolicy;->()V +HSPLandroidx/work/ExistingWorkPolicy;->(Ljava/lang/String;I)V +Landroidx/work/ForegroundUpdater; +Landroidx/work/InputMerger; +HSPLandroidx/work/InputMerger;->()V +Landroidx/work/InputMergerFactory; +HSPLandroidx/work/InputMergerFactory;->()V +HSPLandroidx/work/InputMergerFactory;->createInputMergerWithDefaultFallback(Ljava/lang/String;)Landroidx/work/InputMerger; +Landroidx/work/InputMergerKt; +HSPLandroidx/work/InputMergerKt;->()V +HSPLandroidx/work/InputMergerKt;->fromClassName(Ljava/lang/String;)Landroidx/work/InputMerger; +Landroidx/work/ListenableWorker; +HSPLandroidx/work/ListenableWorker;->(Landroid/content/Context;Landroidx/work/WorkerParameters;)V +HSPLandroidx/work/ListenableWorker;->getApplicationContext()Landroid/content/Context; +HSPLandroidx/work/ListenableWorker;->getInputData()Landroidx/work/Data; +HSPLandroidx/work/ListenableWorker;->getTaskExecutor()Landroidx/work/impl/utils/taskexecutor/TaskExecutor; +HSPLandroidx/work/ListenableWorker;->isUsed()Z +HSPLandroidx/work/ListenableWorker;->setUsed()V +Landroidx/work/ListenableWorker$Result; +HSPLandroidx/work/ListenableWorker$Result;->()V +HSPLandroidx/work/ListenableWorker$Result;->failure()Landroidx/work/ListenableWorker$Result; +HSPLandroidx/work/ListenableWorker$Result;->success()Landroidx/work/ListenableWorker$Result; +Landroidx/work/ListenableWorker$Result$Failure; +HSPLandroidx/work/ListenableWorker$Result$Failure;->()V +HSPLandroidx/work/ListenableWorker$Result$Failure;->(Landroidx/work/Data;)V +Landroidx/work/ListenableWorker$Result$Success; +HSPLandroidx/work/ListenableWorker$Result$Success;->()V +HSPLandroidx/work/ListenableWorker$Result$Success;->(Landroidx/work/Data;)V +HSPLandroidx/work/ListenableWorker$Result$Success;->getOutputData()Landroidx/work/Data; +HSPLandroidx/work/ListenableWorker$Result$Success;->toString()Ljava/lang/String; +Landroidx/work/Logger; +HSPLandroidx/work/Logger;->()V +HSPLandroidx/work/Logger;->(I)V +HSPLandroidx/work/Logger;->get()Landroidx/work/Logger; +HSPLandroidx/work/Logger;->setLogger(Landroidx/work/Logger;)V +HSPLandroidx/work/Logger;->tagWithPrefix(Ljava/lang/String;)Ljava/lang/String; +Landroidx/work/Logger$LogcatLogger; +HSPLandroidx/work/Logger$LogcatLogger;->(I)V +HSPLandroidx/work/Logger$LogcatLogger;->debug(Ljava/lang/String;Ljava/lang/String;)V +HSPLandroidx/work/Logger$LogcatLogger;->info(Ljava/lang/String;Ljava/lang/String;)V +Landroidx/work/NetworkType; +HSPLandroidx/work/NetworkType;->$values()[Landroidx/work/NetworkType; +HSPLandroidx/work/NetworkType;->()V +HSPLandroidx/work/NetworkType;->(Ljava/lang/String;I)V +HSPLandroidx/work/NetworkType;->values()[Landroidx/work/NetworkType; +Landroidx/work/NoOpInputMergerFactory; +HSPLandroidx/work/NoOpInputMergerFactory;->()V +HSPLandroidx/work/NoOpInputMergerFactory;->()V +HSPLandroidx/work/NoOpInputMergerFactory;->createInputMerger(Ljava/lang/String;)Landroidx/work/InputMerger; +HSPLandroidx/work/NoOpInputMergerFactory;->createInputMerger(Ljava/lang/String;)Ljava/lang/Void; +Landroidx/work/OneTimeWorkRequest; +HSPLandroidx/work/OneTimeWorkRequest;->()V +HSPLandroidx/work/OneTimeWorkRequest;->(Landroidx/work/OneTimeWorkRequest$Builder;)V +Landroidx/work/OneTimeWorkRequest$Builder; +HSPLandroidx/work/OneTimeWorkRequest$Builder;->(Ljava/lang/Class;)V +HSPLandroidx/work/OneTimeWorkRequest$Builder;->buildInternal$work_runtime_release()Landroidx/work/OneTimeWorkRequest; +HSPLandroidx/work/OneTimeWorkRequest$Builder;->buildInternal$work_runtime_release()Landroidx/work/WorkRequest; +HSPLandroidx/work/OneTimeWorkRequest$Builder;->getThisObject$work_runtime_release()Landroidx/work/OneTimeWorkRequest$Builder; +HSPLandroidx/work/OneTimeWorkRequest$Builder;->getThisObject$work_runtime_release()Landroidx/work/WorkRequest$Builder; +Landroidx/work/OneTimeWorkRequest$Companion; +HSPLandroidx/work/OneTimeWorkRequest$Companion;->()V +HSPLandroidx/work/OneTimeWorkRequest$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/work/Operation; +HSPLandroidx/work/Operation;->()V +Landroidx/work/Operation$State; +HSPLandroidx/work/Operation$State;->()V +Landroidx/work/Operation$State$FAILURE; +Landroidx/work/Operation$State$IN_PROGRESS; +HSPLandroidx/work/Operation$State$IN_PROGRESS;->()V +HSPLandroidx/work/Operation$State$IN_PROGRESS;->(Landroidx/work/Operation$1;)V +Landroidx/work/Operation$State$SUCCESS; +HSPLandroidx/work/Operation$State$SUCCESS;->()V +HSPLandroidx/work/Operation$State$SUCCESS;->(Landroidx/work/Operation$1;)V +Landroidx/work/OutOfQuotaPolicy; +HSPLandroidx/work/OutOfQuotaPolicy;->$values()[Landroidx/work/OutOfQuotaPolicy; +HSPLandroidx/work/OutOfQuotaPolicy;->()V +HSPLandroidx/work/OutOfQuotaPolicy;->(Ljava/lang/String;I)V +HSPLandroidx/work/OutOfQuotaPolicy;->values()[Landroidx/work/OutOfQuotaPolicy; +Landroidx/work/OverwritingInputMerger; +HSPLandroidx/work/OverwritingInputMerger;->()V +HSPLandroidx/work/OverwritingInputMerger;->merge(Ljava/util/List;)Landroidx/work/Data; +Landroidx/work/PeriodicWorkRequest; +HSPLandroidx/work/PeriodicWorkRequest;->()V +HSPLandroidx/work/PeriodicWorkRequest;->(Landroidx/work/PeriodicWorkRequest$Builder;)V +Landroidx/work/PeriodicWorkRequest$Builder; +HSPLandroidx/work/PeriodicWorkRequest$Builder;->(Ljava/lang/Class;JLjava/util/concurrent/TimeUnit;JLjava/util/concurrent/TimeUnit;)V +HSPLandroidx/work/PeriodicWorkRequest$Builder;->buildInternal$work_runtime_release()Landroidx/work/PeriodicWorkRequest; +HSPLandroidx/work/PeriodicWorkRequest$Builder;->buildInternal$work_runtime_release()Landroidx/work/WorkRequest; +HSPLandroidx/work/PeriodicWorkRequest$Builder;->getThisObject$work_runtime_release()Landroidx/work/PeriodicWorkRequest$Builder; +HSPLandroidx/work/PeriodicWorkRequest$Builder;->getThisObject$work_runtime_release()Landroidx/work/WorkRequest$Builder; +Landroidx/work/PeriodicWorkRequest$Companion; +HSPLandroidx/work/PeriodicWorkRequest$Companion;->()V +HSPLandroidx/work/PeriodicWorkRequest$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/work/ProgressUpdater; +Landroidx/work/R$bool; +Landroidx/work/RunnableScheduler; +Landroidx/work/SystemClock; +HSPLandroidx/work/SystemClock;->()V +HSPLandroidx/work/SystemClock;->currentTimeMillis()J +Landroidx/work/WorkContinuation; +HSPLandroidx/work/WorkContinuation;->()V +Landroidx/work/WorkInfo$State; +HSPLandroidx/work/WorkInfo$State;->$values()[Landroidx/work/WorkInfo$State; +HSPLandroidx/work/WorkInfo$State;->()V +HSPLandroidx/work/WorkInfo$State;->(Ljava/lang/String;I)V +HSPLandroidx/work/WorkInfo$State;->values()[Landroidx/work/WorkInfo$State; +Landroidx/work/WorkManager; +HSPLandroidx/work/WorkManager;->()V +HSPLandroidx/work/WorkManager;->enqueueUniqueWork(Ljava/lang/String;Landroidx/work/ExistingWorkPolicy;Landroidx/work/OneTimeWorkRequest;)Landroidx/work/Operation; +HSPLandroidx/work/WorkManager;->getInstance(Landroid/content/Context;)Landroidx/work/WorkManager; +HSPLandroidx/work/WorkManager;->initialize(Landroid/content/Context;Landroidx/work/Configuration;)V +Landroidx/work/WorkManagerInitializer; +HSPLandroidx/work/WorkManagerInitializer;->()V +HSPLandroidx/work/WorkManagerInitializer;->()V +HSPLandroidx/work/WorkManagerInitializer;->create(Landroid/content/Context;)Landroidx/work/WorkManager; +HSPLandroidx/work/WorkManagerInitializer;->create(Landroid/content/Context;)Ljava/lang/Object; +HSPLandroidx/work/WorkManagerInitializer;->dependencies()Ljava/util/List; +Landroidx/work/WorkRequest; +HSPLandroidx/work/WorkRequest;->()V +HSPLandroidx/work/WorkRequest;->(Ljava/util/UUID;Landroidx/work/impl/model/WorkSpec;Ljava/util/Set;)V +HSPLandroidx/work/WorkRequest;->getId()Ljava/util/UUID; +HSPLandroidx/work/WorkRequest;->getStringId()Ljava/lang/String; +PLandroidx/work/WorkRequest;->getTags()Ljava/util/Set; +HSPLandroidx/work/WorkRequest;->getWorkSpec()Landroidx/work/impl/model/WorkSpec; +Landroidx/work/WorkRequest$Builder; +HSPLandroidx/work/WorkRequest$Builder;->(Ljava/lang/Class;)V +HSPLandroidx/work/WorkRequest$Builder;->build()Landroidx/work/WorkRequest; +HSPLandroidx/work/WorkRequest$Builder;->getBackoffCriteriaSet$work_runtime_release()Z +HSPLandroidx/work/WorkRequest$Builder;->getId$work_runtime_release()Ljava/util/UUID; +HSPLandroidx/work/WorkRequest$Builder;->getTags$work_runtime_release()Ljava/util/Set; +HSPLandroidx/work/WorkRequest$Builder;->getWorkSpec$work_runtime_release()Landroidx/work/impl/model/WorkSpec; +HSPLandroidx/work/WorkRequest$Builder;->setConstraints(Landroidx/work/Constraints;)Landroidx/work/WorkRequest$Builder; +HSPLandroidx/work/WorkRequest$Builder;->setId(Ljava/util/UUID;)Landroidx/work/WorkRequest$Builder; +HSPLandroidx/work/WorkRequest$Builder;->setInputData(Landroidx/work/Data;)Landroidx/work/WorkRequest$Builder; +Landroidx/work/WorkRequest$Companion; +HSPLandroidx/work/WorkRequest$Companion;->()V +HSPLandroidx/work/WorkRequest$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/work/WorkerFactory; +HSPLandroidx/work/WorkerFactory;->()V +HSPLandroidx/work/WorkerFactory;->()V +HSPLandroidx/work/WorkerFactory;->createWorkerWithDefaultFallback(Landroid/content/Context;Ljava/lang/String;Landroidx/work/WorkerParameters;)Landroidx/work/ListenableWorker; +HSPLandroidx/work/WorkerFactory;->getDefaultWorkerFactory()Landroidx/work/WorkerFactory; +Landroidx/work/WorkerFactory$1; +HSPLandroidx/work/WorkerFactory$1;->()V +HSPLandroidx/work/WorkerFactory$1;->createWorker(Landroid/content/Context;Ljava/lang/String;Landroidx/work/WorkerParameters;)Landroidx/work/ListenableWorker; +Landroidx/work/WorkerParameters; +HSPLandroidx/work/WorkerParameters;->(Ljava/util/UUID;Landroidx/work/Data;Ljava/util/Collection;Landroidx/work/WorkerParameters$RuntimeExtras;IILjava/util/concurrent/Executor;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;Landroidx/work/WorkerFactory;Landroidx/work/ProgressUpdater;Landroidx/work/ForegroundUpdater;)V +HSPLandroidx/work/WorkerParameters;->getForegroundUpdater()Landroidx/work/ForegroundUpdater; +HSPLandroidx/work/WorkerParameters;->getInputData()Landroidx/work/Data; +HSPLandroidx/work/WorkerParameters;->getTaskExecutor()Landroidx/work/impl/utils/taskexecutor/TaskExecutor; +Landroidx/work/WorkerParameters$RuntimeExtras; +HSPLandroidx/work/WorkerParameters$RuntimeExtras;->()V +Landroidx/work/impl/AutoMigration_14_15; +HSPLandroidx/work/impl/AutoMigration_14_15;->()V +Landroidx/work/impl/AutoMigration_19_20; +HSPLandroidx/work/impl/AutoMigration_19_20;->()V +Landroidx/work/impl/CleanupCallback; +HSPLandroidx/work/impl/CleanupCallback;->(Landroidx/work/Clock;)V +HSPLandroidx/work/impl/CleanupCallback;->getPruneDate()J +HSPLandroidx/work/impl/CleanupCallback;->getPruneSQL()Ljava/lang/String; +HSPLandroidx/work/impl/CleanupCallback;->onOpen(Landroidx/sqlite/db/SupportSQLiteDatabase;)V +Landroidx/work/impl/DefaultRunnableScheduler; +HSPLandroidx/work/impl/DefaultRunnableScheduler;->()V +HSPLandroidx/work/impl/DefaultRunnableScheduler;->cancel(Ljava/lang/Runnable;)V +HSPLandroidx/work/impl/DefaultRunnableScheduler;->scheduleWithDelay(JLjava/lang/Runnable;)V +Landroidx/work/impl/ExecutionListener; +Landroidx/work/impl/Migration_11_12; +HSPLandroidx/work/impl/Migration_11_12;->()V +HSPLandroidx/work/impl/Migration_11_12;->()V +Landroidx/work/impl/Migration_12_13; +HSPLandroidx/work/impl/Migration_12_13;->()V +HSPLandroidx/work/impl/Migration_12_13;->()V +Landroidx/work/impl/Migration_15_16; +HSPLandroidx/work/impl/Migration_15_16;->()V +HSPLandroidx/work/impl/Migration_15_16;->()V +Landroidx/work/impl/Migration_16_17; +HSPLandroidx/work/impl/Migration_16_17;->()V +HSPLandroidx/work/impl/Migration_16_17;->()V +Landroidx/work/impl/Migration_1_2; +HSPLandroidx/work/impl/Migration_1_2;->()V +HSPLandroidx/work/impl/Migration_1_2;->()V +Landroidx/work/impl/Migration_3_4; +HSPLandroidx/work/impl/Migration_3_4;->()V +HSPLandroidx/work/impl/Migration_3_4;->()V +Landroidx/work/impl/Migration_4_5; +HSPLandroidx/work/impl/Migration_4_5;->()V +HSPLandroidx/work/impl/Migration_4_5;->()V +Landroidx/work/impl/Migration_6_7; +HSPLandroidx/work/impl/Migration_6_7;->()V +HSPLandroidx/work/impl/Migration_6_7;->()V +Landroidx/work/impl/Migration_7_8; +HSPLandroidx/work/impl/Migration_7_8;->()V +HSPLandroidx/work/impl/Migration_7_8;->()V +Landroidx/work/impl/Migration_8_9; +HSPLandroidx/work/impl/Migration_8_9;->()V +HSPLandroidx/work/impl/Migration_8_9;->()V +Landroidx/work/impl/OperationImpl; +HSPLandroidx/work/impl/OperationImpl;->()V +HSPLandroidx/work/impl/OperationImpl;->markState(Landroidx/work/Operation$State;)V +Landroidx/work/impl/Processor; +HSPLandroidx/work/impl/Processor;->()V +HSPLandroidx/work/impl/Processor;->(Landroid/content/Context;Landroidx/work/Configuration;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;Landroidx/work/impl/WorkDatabase;)V +HSPLandroidx/work/impl/Processor;->addExecutionListener(Landroidx/work/impl/ExecutionListener;)V +HSPLandroidx/work/impl/Processor;->cleanUpWorkerUnsafe(Ljava/lang/String;)Landroidx/work/impl/WorkerWrapper; +HSPLandroidx/work/impl/Processor;->getWorkerWrapperUnsafe(Ljava/lang/String;)Landroidx/work/impl/WorkerWrapper; +HSPLandroidx/work/impl/Processor;->isCancelled(Ljava/lang/String;)Z +HSPLandroidx/work/impl/Processor;->isEnqueued(Ljava/lang/String;)Z +HSPLandroidx/work/impl/Processor;->lambda$startWork$0$androidx-work-impl-Processor(Ljava/util/ArrayList;Ljava/lang/String;)Landroidx/work/impl/model/WorkSpec; +HSPLandroidx/work/impl/Processor;->lambda$startWork$1$androidx-work-impl-Processor(Lcom/google/common/util/concurrent/ListenableFuture;Landroidx/work/impl/WorkerWrapper;)V +HSPLandroidx/work/impl/Processor;->onExecuted(Landroidx/work/impl/WorkerWrapper;Z)V +HSPLandroidx/work/impl/Processor;->removeExecutionListener(Landroidx/work/impl/ExecutionListener;)V +HSPLandroidx/work/impl/Processor;->startWork(Landroidx/work/impl/StartStopToken;Landroidx/work/WorkerParameters$RuntimeExtras;)Z +Landroidx/work/impl/Processor$$ExternalSyntheticLambda0; +HSPLandroidx/work/impl/Processor$$ExternalSyntheticLambda0;->(Landroidx/work/impl/Processor;Ljava/util/ArrayList;Ljava/lang/String;)V +HSPLandroidx/work/impl/Processor$$ExternalSyntheticLambda0;->call()Ljava/lang/Object; +Landroidx/work/impl/Processor$$ExternalSyntheticLambda1; +HSPLandroidx/work/impl/Processor$$ExternalSyntheticLambda1;->(Landroidx/work/impl/Processor;Lcom/google/common/util/concurrent/ListenableFuture;Landroidx/work/impl/WorkerWrapper;)V +HSPLandroidx/work/impl/Processor$$ExternalSyntheticLambda1;->run()V +Landroidx/work/impl/RescheduleMigration; +HSPLandroidx/work/impl/RescheduleMigration;->(Landroid/content/Context;II)V +Landroidx/work/impl/Scheduler; +Landroidx/work/impl/Schedulers; +HSPLandroidx/work/impl/Schedulers;->()V +HSPLandroidx/work/impl/Schedulers;->createBestAvailableBackgroundScheduler(Landroid/content/Context;Landroidx/work/impl/WorkDatabase;Landroidx/work/Configuration;)Landroidx/work/impl/Scheduler; +HSPLandroidx/work/impl/Schedulers;->lambda$registerRescheduling$0(Ljava/util/List;Landroidx/work/impl/model/WorkGenerationalId;Landroidx/work/Configuration;Landroidx/work/impl/WorkDatabase;)V +HSPLandroidx/work/impl/Schedulers;->lambda$registerRescheduling$1(Ljava/util/concurrent/Executor;Ljava/util/List;Landroidx/work/Configuration;Landroidx/work/impl/WorkDatabase;Landroidx/work/impl/model/WorkGenerationalId;Z)V +HSPLandroidx/work/impl/Schedulers;->markScheduled(Landroidx/work/impl/model/WorkSpecDao;Landroidx/work/Clock;Ljava/util/List;)V +HSPLandroidx/work/impl/Schedulers;->registerRescheduling(Ljava/util/List;Landroidx/work/impl/Processor;Ljava/util/concurrent/Executor;Landroidx/work/impl/WorkDatabase;Landroidx/work/Configuration;)V +HSPLandroidx/work/impl/Schedulers;->schedule(Landroidx/work/Configuration;Landroidx/work/impl/WorkDatabase;Ljava/util/List;)V +Landroidx/work/impl/Schedulers$$ExternalSyntheticLambda0; +HSPLandroidx/work/impl/Schedulers$$ExternalSyntheticLambda0;->(Ljava/util/List;Landroidx/work/impl/model/WorkGenerationalId;Landroidx/work/Configuration;Landroidx/work/impl/WorkDatabase;)V +HSPLandroidx/work/impl/Schedulers$$ExternalSyntheticLambda0;->run()V +Landroidx/work/impl/Schedulers$$ExternalSyntheticLambda1; +HSPLandroidx/work/impl/Schedulers$$ExternalSyntheticLambda1;->(Ljava/util/concurrent/Executor;Ljava/util/List;Landroidx/work/Configuration;Landroidx/work/impl/WorkDatabase;)V +HSPLandroidx/work/impl/Schedulers$$ExternalSyntheticLambda1;->onExecuted(Landroidx/work/impl/model/WorkGenerationalId;Z)V +Landroidx/work/impl/StartStopToken; +HSPLandroidx/work/impl/StartStopToken;->(Landroidx/work/impl/model/WorkGenerationalId;)V +HSPLandroidx/work/impl/StartStopToken;->getId()Landroidx/work/impl/model/WorkGenerationalId; +Landroidx/work/impl/StartStopTokens; +HSPLandroidx/work/impl/StartStopTokens;->()V +HSPLandroidx/work/impl/StartStopTokens;->contains(Landroidx/work/impl/model/WorkGenerationalId;)Z +HSPLandroidx/work/impl/StartStopTokens;->remove(Landroidx/work/impl/model/WorkGenerationalId;)Landroidx/work/impl/StartStopToken; +HSPLandroidx/work/impl/StartStopTokens;->remove(Ljava/lang/String;)Ljava/util/List; +HSPLandroidx/work/impl/StartStopTokens;->tokenFor(Landroidx/work/impl/model/WorkGenerationalId;)Landroidx/work/impl/StartStopToken; +Landroidx/work/impl/WorkContinuationImpl; +HSPLandroidx/work/impl/WorkContinuationImpl;->()V +HSPLandroidx/work/impl/WorkContinuationImpl;->(Landroidx/work/impl/WorkManagerImpl;Ljava/lang/String;Landroidx/work/ExistingWorkPolicy;Ljava/util/List;)V +HSPLandroidx/work/impl/WorkContinuationImpl;->(Landroidx/work/impl/WorkManagerImpl;Ljava/lang/String;Landroidx/work/ExistingWorkPolicy;Ljava/util/List;Ljava/util/List;)V +HSPLandroidx/work/impl/WorkContinuationImpl;->enqueue()Landroidx/work/Operation; +HSPLandroidx/work/impl/WorkContinuationImpl;->getExistingWorkPolicy()Landroidx/work/ExistingWorkPolicy; +HSPLandroidx/work/impl/WorkContinuationImpl;->getIds()Ljava/util/List; +HSPLandroidx/work/impl/WorkContinuationImpl;->getName()Ljava/lang/String; +HSPLandroidx/work/impl/WorkContinuationImpl;->getParents()Ljava/util/List; +HSPLandroidx/work/impl/WorkContinuationImpl;->getWork()Ljava/util/List; +HSPLandroidx/work/impl/WorkContinuationImpl;->getWorkManagerImpl()Landroidx/work/impl/WorkManagerImpl; +HSPLandroidx/work/impl/WorkContinuationImpl;->hasCycles()Z +HSPLandroidx/work/impl/WorkContinuationImpl;->hasCycles(Landroidx/work/impl/WorkContinuationImpl;Ljava/util/Set;)Z +HSPLandroidx/work/impl/WorkContinuationImpl;->markEnqueued()V +HSPLandroidx/work/impl/WorkContinuationImpl;->prerequisitesFor(Landroidx/work/impl/WorkContinuationImpl;)Ljava/util/Set; +Landroidx/work/impl/WorkDatabase; +HSPLandroidx/work/impl/WorkDatabase;->()V +HSPLandroidx/work/impl/WorkDatabase;->()V +Landroidx/work/impl/WorkDatabase$Companion; +HSPLandroidx/work/impl/WorkDatabase$Companion;->$r8$lambda$ZkS5S0p_73DOI66Tm39UHOpqbt0(Landroid/content/Context;Landroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration;)Landroidx/sqlite/db/SupportSQLiteOpenHelper; +HSPLandroidx/work/impl/WorkDatabase$Companion;->()V +HSPLandroidx/work/impl/WorkDatabase$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/work/impl/WorkDatabase$Companion;->create$lambda$0(Landroid/content/Context;Landroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration;)Landroidx/sqlite/db/SupportSQLiteOpenHelper; +HSPLandroidx/work/impl/WorkDatabase$Companion;->create(Landroid/content/Context;Ljava/util/concurrent/Executor;Landroidx/work/Clock;Z)Landroidx/work/impl/WorkDatabase; +Landroidx/work/impl/WorkDatabase$Companion$$ExternalSyntheticLambda0; +HSPLandroidx/work/impl/WorkDatabase$Companion$$ExternalSyntheticLambda0;->(Landroid/content/Context;)V +HSPLandroidx/work/impl/WorkDatabase$Companion$$ExternalSyntheticLambda0;->create(Landroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration;)Landroidx/sqlite/db/SupportSQLiteOpenHelper; +Landroidx/work/impl/WorkDatabaseKt; +HSPLandroidx/work/impl/WorkDatabaseKt;->()V +Landroidx/work/impl/WorkDatabasePathHelper; +HSPLandroidx/work/impl/WorkDatabasePathHelper;->()V +HSPLandroidx/work/impl/WorkDatabasePathHelper;->()V +HSPLandroidx/work/impl/WorkDatabasePathHelper;->getDefaultDatabasePath(Landroid/content/Context;)Ljava/io/File; +HSPLandroidx/work/impl/WorkDatabasePathHelper;->migrateDatabase(Landroid/content/Context;)V +Landroidx/work/impl/WorkDatabase_AutoMigration_13_14_Impl; +HSPLandroidx/work/impl/WorkDatabase_AutoMigration_13_14_Impl;->()V +Landroidx/work/impl/WorkDatabase_AutoMigration_14_15_Impl; +HSPLandroidx/work/impl/WorkDatabase_AutoMigration_14_15_Impl;->()V +Landroidx/work/impl/WorkDatabase_AutoMigration_16_17_Impl; +HSPLandroidx/work/impl/WorkDatabase_AutoMigration_16_17_Impl;->()V +Landroidx/work/impl/WorkDatabase_AutoMigration_17_18_Impl; +HSPLandroidx/work/impl/WorkDatabase_AutoMigration_17_18_Impl;->()V +Landroidx/work/impl/WorkDatabase_AutoMigration_18_19_Impl; +HSPLandroidx/work/impl/WorkDatabase_AutoMigration_18_19_Impl;->()V +Landroidx/work/impl/WorkDatabase_AutoMigration_19_20_Impl; +HSPLandroidx/work/impl/WorkDatabase_AutoMigration_19_20_Impl;->()V +Landroidx/work/impl/WorkDatabase_Impl; +HSPLandroidx/work/impl/WorkDatabase_Impl;->()V +HSPLandroidx/work/impl/WorkDatabase_Impl;->access$1000(Landroidx/work/impl/WorkDatabase_Impl;)Ljava/util/List; +HSPLandroidx/work/impl/WorkDatabase_Impl;->access$602(Landroidx/work/impl/WorkDatabase_Impl;Landroidx/sqlite/db/SupportSQLiteDatabase;)Landroidx/sqlite/db/SupportSQLiteDatabase; +HSPLandroidx/work/impl/WorkDatabase_Impl;->access$700(Landroidx/work/impl/WorkDatabase_Impl;Landroidx/sqlite/db/SupportSQLiteDatabase;)V +HSPLandroidx/work/impl/WorkDatabase_Impl;->access$800(Landroidx/work/impl/WorkDatabase_Impl;)Ljava/util/List; +HSPLandroidx/work/impl/WorkDatabase_Impl;->access$900(Landroidx/work/impl/WorkDatabase_Impl;)Ljava/util/List; +HSPLandroidx/work/impl/WorkDatabase_Impl;->createInvalidationTracker()Landroidx/room/InvalidationTracker; +HSPLandroidx/work/impl/WorkDatabase_Impl;->createOpenHelper(Landroidx/room/DatabaseConfiguration;)Landroidx/sqlite/db/SupportSQLiteOpenHelper; +HSPLandroidx/work/impl/WorkDatabase_Impl;->dependencyDao()Landroidx/work/impl/model/DependencyDao; +HSPLandroidx/work/impl/WorkDatabase_Impl;->getAutoMigrations(Ljava/util/Map;)Ljava/util/List; +HSPLandroidx/work/impl/WorkDatabase_Impl;->getRequiredAutoMigrationSpecs()Ljava/util/Set; +HSPLandroidx/work/impl/WorkDatabase_Impl;->getRequiredTypeConverters()Ljava/util/Map; +HSPLandroidx/work/impl/WorkDatabase_Impl;->preferenceDao()Landroidx/work/impl/model/PreferenceDao; +HSPLandroidx/work/impl/WorkDatabase_Impl;->systemIdInfoDao()Landroidx/work/impl/model/SystemIdInfoDao; +HSPLandroidx/work/impl/WorkDatabase_Impl;->workNameDao()Landroidx/work/impl/model/WorkNameDao; +HSPLandroidx/work/impl/WorkDatabase_Impl;->workProgressDao()Landroidx/work/impl/model/WorkProgressDao; +HSPLandroidx/work/impl/WorkDatabase_Impl;->workSpecDao()Landroidx/work/impl/model/WorkSpecDao; +HSPLandroidx/work/impl/WorkDatabase_Impl;->workTagDao()Landroidx/work/impl/model/WorkTagDao; +Landroidx/work/impl/WorkDatabase_Impl$1; +HSPLandroidx/work/impl/WorkDatabase_Impl$1;->(Landroidx/work/impl/WorkDatabase_Impl;I)V +HSPLandroidx/work/impl/WorkDatabase_Impl$1;->onOpen(Landroidx/sqlite/db/SupportSQLiteDatabase;)V +Landroidx/work/impl/WorkLauncher; +HSPLandroidx/work/impl/WorkLauncher;->startWork(Landroidx/work/impl/StartStopToken;)V +Landroidx/work/impl/WorkLauncherImpl; +HSPLandroidx/work/impl/WorkLauncherImpl;->(Landroidx/work/impl/Processor;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;)V +HSPLandroidx/work/impl/WorkLauncherImpl;->startWork(Landroidx/work/impl/StartStopToken;Landroidx/work/WorkerParameters$RuntimeExtras;)V +Landroidx/work/impl/WorkManagerImpl; +HSPLandroidx/work/impl/WorkManagerImpl;->()V +HSPLandroidx/work/impl/WorkManagerImpl;->(Landroid/content/Context;Landroidx/work/Configuration;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;Landroidx/work/impl/WorkDatabase;Ljava/util/List;Landroidx/work/impl/Processor;Landroidx/work/impl/constraints/trackers/Trackers;)V +HSPLandroidx/work/impl/WorkManagerImpl;->createWorkContinuationForUniquePeriodicWork(Ljava/lang/String;Landroidx/work/ExistingPeriodicWorkPolicy;Landroidx/work/PeriodicWorkRequest;)Landroidx/work/impl/WorkContinuationImpl; +HSPLandroidx/work/impl/WorkManagerImpl;->enqueueUniquePeriodicWork(Ljava/lang/String;Landroidx/work/ExistingPeriodicWorkPolicy;Landroidx/work/PeriodicWorkRequest;)Landroidx/work/Operation; +HSPLandroidx/work/impl/WorkManagerImpl;->enqueueUniqueWork(Ljava/lang/String;Landroidx/work/ExistingWorkPolicy;Ljava/util/List;)Landroidx/work/Operation; +HSPLandroidx/work/impl/WorkManagerImpl;->getApplicationContext()Landroid/content/Context; +HSPLandroidx/work/impl/WorkManagerImpl;->getConfiguration()Landroidx/work/Configuration; +HSPLandroidx/work/impl/WorkManagerImpl;->getInstance()Landroidx/work/impl/WorkManagerImpl; +HSPLandroidx/work/impl/WorkManagerImpl;->getInstance(Landroid/content/Context;)Landroidx/work/impl/WorkManagerImpl; +HSPLandroidx/work/impl/WorkManagerImpl;->getPreferenceUtils()Landroidx/work/impl/utils/PreferenceUtils; +HSPLandroidx/work/impl/WorkManagerImpl;->getProcessor()Landroidx/work/impl/Processor; +HSPLandroidx/work/impl/WorkManagerImpl;->getSchedulers()Ljava/util/List; +HSPLandroidx/work/impl/WorkManagerImpl;->getWorkDatabase()Landroidx/work/impl/WorkDatabase; +HSPLandroidx/work/impl/WorkManagerImpl;->getWorkTaskExecutor()Landroidx/work/impl/utils/taskexecutor/TaskExecutor; +HSPLandroidx/work/impl/WorkManagerImpl;->initialize(Landroid/content/Context;Landroidx/work/Configuration;)V +HSPLandroidx/work/impl/WorkManagerImpl;->onForceStopRunnableCompleted()V +HSPLandroidx/work/impl/WorkManagerImpl;->rescheduleEligibleWork()V +Landroidx/work/impl/WorkManagerImpl$Api24Impl; +HSPLandroidx/work/impl/WorkManagerImpl$Api24Impl;->isDeviceProtectedStorage(Landroid/content/Context;)Z +Landroidx/work/impl/WorkManagerImplExtKt; +HSPLandroidx/work/impl/WorkManagerImplExtKt;->access$createSchedulers(Landroid/content/Context;Landroidx/work/Configuration;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;Landroidx/work/impl/WorkDatabase;Landroidx/work/impl/constraints/trackers/Trackers;Landroidx/work/impl/Processor;)Ljava/util/List; +HSPLandroidx/work/impl/WorkManagerImplExtKt;->createSchedulers(Landroid/content/Context;Landroidx/work/Configuration;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;Landroidx/work/impl/WorkDatabase;Landroidx/work/impl/constraints/trackers/Trackers;Landroidx/work/impl/Processor;)Ljava/util/List; +HSPLandroidx/work/impl/WorkManagerImplExtKt;->createWorkManager$default(Landroid/content/Context;Landroidx/work/Configuration;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;Landroidx/work/impl/WorkDatabase;Landroidx/work/impl/constraints/trackers/Trackers;Landroidx/work/impl/Processor;Lkotlin/jvm/functions/Function6;ILjava/lang/Object;)Landroidx/work/impl/WorkManagerImpl; +HSPLandroidx/work/impl/WorkManagerImplExtKt;->createWorkManager(Landroid/content/Context;Landroidx/work/Configuration;)Landroidx/work/impl/WorkManagerImpl; +HSPLandroidx/work/impl/WorkManagerImplExtKt;->createWorkManager(Landroid/content/Context;Landroidx/work/Configuration;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;Landroidx/work/impl/WorkDatabase;Landroidx/work/impl/constraints/trackers/Trackers;Landroidx/work/impl/Processor;Lkotlin/jvm/functions/Function6;)Landroidx/work/impl/WorkManagerImpl; +Landroidx/work/impl/WorkManagerImplExtKt$WorkManagerImpl$1; +HSPLandroidx/work/impl/WorkManagerImplExtKt$WorkManagerImpl$1;->()V +HSPLandroidx/work/impl/WorkManagerImplExtKt$WorkManagerImpl$1;->()V +HSPLandroidx/work/impl/WorkManagerImplExtKt$WorkManagerImpl$1;->invoke(Landroid/content/Context;Landroidx/work/Configuration;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;Landroidx/work/impl/WorkDatabase;Landroidx/work/impl/constraints/trackers/Trackers;Landroidx/work/impl/Processor;)Ljava/util/List; +HSPLandroidx/work/impl/WorkManagerImplExtKt$WorkManagerImpl$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/work/impl/WorkMigration9To10; +HSPLandroidx/work/impl/WorkMigration9To10;->(Landroid/content/Context;)V +Landroidx/work/impl/WorkerWrapper; +HSPLandroidx/work/impl/WorkerWrapper;->()V +HSPLandroidx/work/impl/WorkerWrapper;->(Landroidx/work/impl/WorkerWrapper$Builder;)V +HSPLandroidx/work/impl/WorkerWrapper;->createWorkDescription(Ljava/util/List;)Ljava/lang/String; +HSPLandroidx/work/impl/WorkerWrapper;->getFuture()Lcom/google/common/util/concurrent/ListenableFuture; +HSPLandroidx/work/impl/WorkerWrapper;->getWorkGenerationalId()Landroidx/work/impl/model/WorkGenerationalId; +HSPLandroidx/work/impl/WorkerWrapper;->handleResult(Landroidx/work/ListenableWorker$Result;)V +HSPLandroidx/work/impl/WorkerWrapper;->lambda$runWorker$0$androidx-work-impl-WorkerWrapper(Lcom/google/common/util/concurrent/ListenableFuture;)V +HSPLandroidx/work/impl/WorkerWrapper;->onWorkFinished()V +HSPLandroidx/work/impl/WorkerWrapper;->resolve(Z)V +HSPLandroidx/work/impl/WorkerWrapper;->run()V +HSPLandroidx/work/impl/WorkerWrapper;->runWorker()V +HSPLandroidx/work/impl/WorkerWrapper;->setSucceededAndResolve()V +HSPLandroidx/work/impl/WorkerWrapper;->tryCheckForInterruptionAndResolve()Z +HSPLandroidx/work/impl/WorkerWrapper;->trySetRunning()Z +Landroidx/work/impl/WorkerWrapper$$ExternalSyntheticLambda0; +HSPLandroidx/work/impl/WorkerWrapper$$ExternalSyntheticLambda0;->(Landroidx/work/impl/WorkerWrapper;Lcom/google/common/util/concurrent/ListenableFuture;)V +HSPLandroidx/work/impl/WorkerWrapper$$ExternalSyntheticLambda0;->run()V +Landroidx/work/impl/WorkerWrapper$1; +HSPLandroidx/work/impl/WorkerWrapper$1;->(Landroidx/work/impl/WorkerWrapper;Lcom/google/common/util/concurrent/ListenableFuture;)V +HSPLandroidx/work/impl/WorkerWrapper$1;->run()V +Landroidx/work/impl/WorkerWrapper$2; +HSPLandroidx/work/impl/WorkerWrapper$2;->(Landroidx/work/impl/WorkerWrapper;Ljava/lang/String;)V +HSPLandroidx/work/impl/WorkerWrapper$2;->run()V +Landroidx/work/impl/WorkerWrapper$Builder; +HSPLandroidx/work/impl/WorkerWrapper$Builder;->(Landroid/content/Context;Landroidx/work/Configuration;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;Landroidx/work/impl/foreground/ForegroundProcessor;Landroidx/work/impl/WorkDatabase;Landroidx/work/impl/model/WorkSpec;Ljava/util/List;)V +HSPLandroidx/work/impl/WorkerWrapper$Builder;->access$000(Landroidx/work/impl/WorkerWrapper$Builder;)Ljava/util/List; +HSPLandroidx/work/impl/WorkerWrapper$Builder;->build()Landroidx/work/impl/WorkerWrapper; +HSPLandroidx/work/impl/WorkerWrapper$Builder;->withRuntimeExtras(Landroidx/work/WorkerParameters$RuntimeExtras;)Landroidx/work/impl/WorkerWrapper$Builder; +Landroidx/work/impl/background/greedy/DelayedWorkTracker; +HSPLandroidx/work/impl/background/greedy/DelayedWorkTracker;->()V +HSPLandroidx/work/impl/background/greedy/DelayedWorkTracker;->(Landroidx/work/impl/Scheduler;Landroidx/work/RunnableScheduler;Landroidx/work/Clock;)V +HSPLandroidx/work/impl/background/greedy/DelayedWorkTracker;->schedule(Landroidx/work/impl/model/WorkSpec;J)V +HSPLandroidx/work/impl/background/greedy/DelayedWorkTracker;->unschedule(Ljava/lang/String;)V +Landroidx/work/impl/background/greedy/DelayedWorkTracker$1; +HSPLandroidx/work/impl/background/greedy/DelayedWorkTracker$1;->(Landroidx/work/impl/background/greedy/DelayedWorkTracker;Landroidx/work/impl/model/WorkSpec;)V +Landroidx/work/impl/background/greedy/GreedyScheduler; +HSPLandroidx/work/impl/background/greedy/GreedyScheduler;->()V +HSPLandroidx/work/impl/background/greedy/GreedyScheduler;->(Landroid/content/Context;Landroidx/work/Configuration;Landroidx/work/impl/constraints/trackers/Trackers;Landroidx/work/impl/Processor;Landroidx/work/impl/WorkLauncher;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;)V +HSPLandroidx/work/impl/background/greedy/GreedyScheduler;->cancel(Ljava/lang/String;)V +HSPLandroidx/work/impl/background/greedy/GreedyScheduler;->checkDefaultProcess()V +HSPLandroidx/work/impl/background/greedy/GreedyScheduler;->hasLimitedSchedulingSlots()Z +HSPLandroidx/work/impl/background/greedy/GreedyScheduler;->onConstraintsStateChanged(Landroidx/work/impl/model/WorkSpec;Landroidx/work/impl/constraints/ConstraintsState;)V +HSPLandroidx/work/impl/background/greedy/GreedyScheduler;->onExecuted(Landroidx/work/impl/model/WorkGenerationalId;Z)V +HSPLandroidx/work/impl/background/greedy/GreedyScheduler;->registerExecutionListenerIfNeeded()V +HSPLandroidx/work/impl/background/greedy/GreedyScheduler;->removeConstraintTrackingFor(Landroidx/work/impl/model/WorkGenerationalId;)V +HSPLandroidx/work/impl/background/greedy/GreedyScheduler;->schedule([Landroidx/work/impl/model/WorkSpec;)V +HSPLandroidx/work/impl/background/greedy/GreedyScheduler;->throttleIfNeeded(Landroidx/work/impl/model/WorkSpec;)J +Landroidx/work/impl/background/greedy/GreedyScheduler$AttemptData; +HSPLandroidx/work/impl/background/greedy/GreedyScheduler$AttemptData;->(IJ)V +HSPLandroidx/work/impl/background/greedy/GreedyScheduler$AttemptData;->(IJLandroidx/work/impl/background/greedy/GreedyScheduler$1;)V +Landroidx/work/impl/background/greedy/TimeLimiter; +HSPLandroidx/work/impl/background/greedy/TimeLimiter;->(Landroidx/work/RunnableScheduler;Landroidx/work/impl/WorkLauncher;)V +HSPLandroidx/work/impl/background/greedy/TimeLimiter;->(Landroidx/work/RunnableScheduler;Landroidx/work/impl/WorkLauncher;J)V +HSPLandroidx/work/impl/background/greedy/TimeLimiter;->(Landroidx/work/RunnableScheduler;Landroidx/work/impl/WorkLauncher;JILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/work/impl/background/greedy/TimeLimiter;->cancel(Landroidx/work/impl/StartStopToken;)V +HSPLandroidx/work/impl/background/greedy/TimeLimiter;->track(Landroidx/work/impl/StartStopToken;)V +Landroidx/work/impl/background/greedy/TimeLimiter$$ExternalSyntheticLambda0; +HSPLandroidx/work/impl/background/greedy/TimeLimiter$$ExternalSyntheticLambda0;->(Landroidx/work/impl/background/greedy/TimeLimiter;Landroidx/work/impl/StartStopToken;)V +Landroidx/work/impl/background/systemalarm/RescheduleReceiver; +Landroidx/work/impl/background/systemjob/SystemJobInfoConverter; +HSPLandroidx/work/impl/background/systemjob/SystemJobInfoConverter;->()V +HSPLandroidx/work/impl/background/systemjob/SystemJobInfoConverter;->(Landroid/content/Context;Landroidx/work/Clock;)V +HSPLandroidx/work/impl/background/systemjob/SystemJobInfoConverter;->convert(Landroidx/work/impl/model/WorkSpec;I)Landroid/app/job/JobInfo; +HSPLandroidx/work/impl/background/systemjob/SystemJobInfoConverter;->convertNetworkType(Landroidx/work/NetworkType;)I +HSPLandroidx/work/impl/background/systemjob/SystemJobInfoConverter;->setRequiredNetwork(Landroid/app/job/JobInfo$Builder;Landroidx/work/NetworkType;)V +Landroidx/work/impl/background/systemjob/SystemJobInfoConverter$1; +HSPLandroidx/work/impl/background/systemjob/SystemJobInfoConverter$1;->()V +Landroidx/work/impl/background/systemjob/SystemJobScheduler; +HSPLandroidx/work/impl/background/systemjob/SystemJobScheduler;->()V +HSPLandroidx/work/impl/background/systemjob/SystemJobScheduler;->(Landroid/content/Context;Landroidx/work/impl/WorkDatabase;Landroidx/work/Configuration;)V +HSPLandroidx/work/impl/background/systemjob/SystemJobScheduler;->(Landroid/content/Context;Landroidx/work/impl/WorkDatabase;Landroidx/work/Configuration;Landroid/app/job/JobScheduler;Landroidx/work/impl/background/systemjob/SystemJobInfoConverter;)V +HSPLandroidx/work/impl/background/systemjob/SystemJobScheduler;->cancel(Ljava/lang/String;)V +HSPLandroidx/work/impl/background/systemjob/SystemJobScheduler;->cancelAll(Landroid/content/Context;)V +HSPLandroidx/work/impl/background/systemjob/SystemJobScheduler;->cancelJobById(Landroid/app/job/JobScheduler;I)V +HSPLandroidx/work/impl/background/systemjob/SystemJobScheduler;->getPendingJobIds(Landroid/content/Context;Landroid/app/job/JobScheduler;Ljava/lang/String;)Ljava/util/List; +HSPLandroidx/work/impl/background/systemjob/SystemJobScheduler;->getPendingJobs(Landroid/content/Context;Landroid/app/job/JobScheduler;)Ljava/util/List; +HSPLandroidx/work/impl/background/systemjob/SystemJobScheduler;->getWorkGenerationalIdFromJobInfo(Landroid/app/job/JobInfo;)Landroidx/work/impl/model/WorkGenerationalId; +HSPLandroidx/work/impl/background/systemjob/SystemJobScheduler;->hasLimitedSchedulingSlots()Z +HSPLandroidx/work/impl/background/systemjob/SystemJobScheduler;->reconcileJobs(Landroid/content/Context;Landroidx/work/impl/WorkDatabase;)Z +HSPLandroidx/work/impl/background/systemjob/SystemJobScheduler;->schedule([Landroidx/work/impl/model/WorkSpec;)V +HSPLandroidx/work/impl/background/systemjob/SystemJobScheduler;->scheduleInternal(Landroidx/work/impl/model/WorkSpec;I)V +Landroidx/work/impl/background/systemjob/SystemJobService; +HSPLandroidx/work/impl/background/systemjob/SystemJobService;->()V +HSPLandroidx/work/impl/background/systemjob/SystemJobService;->()V +HSPLandroidx/work/impl/background/systemjob/SystemJobService;->onCreate()V +HSPLandroidx/work/impl/background/systemjob/SystemJobService;->onDestroy()V +HSPLandroidx/work/impl/background/systemjob/SystemJobService;->onExecuted(Landroidx/work/impl/model/WorkGenerationalId;Z)V +HSPLandroidx/work/impl/background/systemjob/SystemJobService;->onStartJob(Landroid/app/job/JobParameters;)Z +HSPLandroidx/work/impl/background/systemjob/SystemJobService;->onStopJob(Landroid/app/job/JobParameters;)Z +HSPLandroidx/work/impl/background/systemjob/SystemJobService;->workGenerationalIdFromJobParameters(Landroid/app/job/JobParameters;)Landroidx/work/impl/model/WorkGenerationalId; +Landroidx/work/impl/background/systemjob/SystemJobService$Api24Impl; +HSPLandroidx/work/impl/background/systemjob/SystemJobService$Api24Impl;->getTriggeredContentAuthorities(Landroid/app/job/JobParameters;)[Ljava/lang/String; +HSPLandroidx/work/impl/background/systemjob/SystemJobService$Api24Impl;->getTriggeredContentUris(Landroid/app/job/JobParameters;)[Landroid/net/Uri; +Landroidx/work/impl/background/systemjob/SystemJobService$Api28Impl; +HSPLandroidx/work/impl/background/systemjob/SystemJobService$Api28Impl;->getNetwork(Landroid/app/job/JobParameters;)Landroid/net/Network; +Landroidx/work/impl/constraints/ConstraintListener; +Landroidx/work/impl/constraints/ConstraintsState; +HSPLandroidx/work/impl/constraints/ConstraintsState;->()V +HSPLandroidx/work/impl/constraints/ConstraintsState;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/work/impl/constraints/ConstraintsState$ConstraintsMet; +HSPLandroidx/work/impl/constraints/ConstraintsState$ConstraintsMet;->()V +HSPLandroidx/work/impl/constraints/ConstraintsState$ConstraintsMet;->()V +Landroidx/work/impl/constraints/NetworkState; +HSPLandroidx/work/impl/constraints/NetworkState;->(ZZZZ)V +HSPLandroidx/work/impl/constraints/NetworkState;->equals(Ljava/lang/Object;)Z +HSPLandroidx/work/impl/constraints/NetworkState;->isConnected()Z +HSPLandroidx/work/impl/constraints/NetworkState;->isValidated()Z +HSPLandroidx/work/impl/constraints/NetworkState;->toString()Ljava/lang/String; +Landroidx/work/impl/constraints/OnConstraintsStateChangedListener; +Landroidx/work/impl/constraints/WorkConstraintsTracker; +HSPLandroidx/work/impl/constraints/WorkConstraintsTracker;->(Landroidx/work/impl/constraints/trackers/Trackers;)V +HSPLandroidx/work/impl/constraints/WorkConstraintsTracker;->(Ljava/util/List;)V +HSPLandroidx/work/impl/constraints/WorkConstraintsTracker;->track(Landroidx/work/impl/model/WorkSpec;)Lkotlinx/coroutines/flow/Flow; +Landroidx/work/impl/constraints/WorkConstraintsTracker$track$$inlined$combine$1; +HSPLandroidx/work/impl/constraints/WorkConstraintsTracker$track$$inlined$combine$1;->([Lkotlinx/coroutines/flow/Flow;)V +HSPLandroidx/work/impl/constraints/WorkConstraintsTracker$track$$inlined$combine$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/work/impl/constraints/WorkConstraintsTracker$track$$inlined$combine$1$2; +HSPLandroidx/work/impl/constraints/WorkConstraintsTracker$track$$inlined$combine$1$2;->([Lkotlinx/coroutines/flow/Flow;)V +HSPLandroidx/work/impl/constraints/WorkConstraintsTracker$track$$inlined$combine$1$2;->invoke()Ljava/lang/Object; +HSPLandroidx/work/impl/constraints/WorkConstraintsTracker$track$$inlined$combine$1$2;->invoke()[Ljava/lang/Object; +Landroidx/work/impl/constraints/WorkConstraintsTracker$track$$inlined$combine$1$3; +HSPLandroidx/work/impl/constraints/WorkConstraintsTracker$track$$inlined$combine$1$3;->(Lkotlin/coroutines/Continuation;)V +HSPLandroidx/work/impl/constraints/WorkConstraintsTracker$track$$inlined$combine$1$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/work/impl/constraints/WorkConstraintsTracker$track$$inlined$combine$1$3;->invoke(Lkotlinx/coroutines/flow/FlowCollector;[Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/work/impl/constraints/WorkConstraintsTracker$track$$inlined$combine$1$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/work/impl/constraints/WorkConstraintsTrackerKt; +HSPLandroidx/work/impl/constraints/WorkConstraintsTrackerKt;->()V +HSPLandroidx/work/impl/constraints/WorkConstraintsTrackerKt;->listen(Landroidx/work/impl/constraints/WorkConstraintsTracker;Landroidx/work/impl/model/WorkSpec;Lkotlinx/coroutines/CoroutineDispatcher;Landroidx/work/impl/constraints/OnConstraintsStateChangedListener;)Lkotlinx/coroutines/Job; +Landroidx/work/impl/constraints/WorkConstraintsTrackerKt$listen$1; +HSPLandroidx/work/impl/constraints/WorkConstraintsTrackerKt$listen$1;->(Landroidx/work/impl/constraints/WorkConstraintsTracker;Landroidx/work/impl/model/WorkSpec;Landroidx/work/impl/constraints/OnConstraintsStateChangedListener;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/work/impl/constraints/WorkConstraintsTrackerKt$listen$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/work/impl/constraints/WorkConstraintsTrackerKt$listen$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/work/impl/constraints/WorkConstraintsTrackerKt$listen$1$1; +HSPLandroidx/work/impl/constraints/WorkConstraintsTrackerKt$listen$1$1;->(Landroidx/work/impl/constraints/OnConstraintsStateChangedListener;Landroidx/work/impl/model/WorkSpec;)V +HSPLandroidx/work/impl/constraints/WorkConstraintsTrackerKt$listen$1$1;->emit(Landroidx/work/impl/constraints/ConstraintsState;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/work/impl/constraints/WorkConstraintsTrackerKt$listen$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/work/impl/constraints/controllers/BatteryChargingController; +HSPLandroidx/work/impl/constraints/controllers/BatteryChargingController;->(Landroidx/work/impl/constraints/trackers/ConstraintTracker;)V +HSPLandroidx/work/impl/constraints/controllers/BatteryChargingController;->hasConstraint(Landroidx/work/impl/model/WorkSpec;)Z +Landroidx/work/impl/constraints/controllers/BatteryNotLowController; +HSPLandroidx/work/impl/constraints/controllers/BatteryNotLowController;->(Landroidx/work/impl/constraints/trackers/BatteryNotLowTracker;)V +HSPLandroidx/work/impl/constraints/controllers/BatteryNotLowController;->hasConstraint(Landroidx/work/impl/model/WorkSpec;)Z +Landroidx/work/impl/constraints/controllers/ConstraintController; +HSPLandroidx/work/impl/constraints/controllers/ConstraintController;->(Landroidx/work/impl/constraints/trackers/ConstraintTracker;)V +HSPLandroidx/work/impl/constraints/controllers/ConstraintController;->access$getTracker$p(Landroidx/work/impl/constraints/controllers/ConstraintController;)Landroidx/work/impl/constraints/trackers/ConstraintTracker; +HSPLandroidx/work/impl/constraints/controllers/ConstraintController;->track()Lkotlinx/coroutines/flow/Flow; +Landroidx/work/impl/constraints/controllers/ConstraintController$track$1; +HSPLandroidx/work/impl/constraints/controllers/ConstraintController$track$1;->(Landroidx/work/impl/constraints/controllers/ConstraintController;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/work/impl/constraints/controllers/ConstraintController$track$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/work/impl/constraints/controllers/ConstraintController$track$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/work/impl/constraints/controllers/ConstraintController$track$1;->invoke(Lkotlinx/coroutines/channels/ProducerScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/work/impl/constraints/controllers/ConstraintController$track$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/work/impl/constraints/controllers/ConstraintController$track$1$1; +HSPLandroidx/work/impl/constraints/controllers/ConstraintController$track$1$1;->(Landroidx/work/impl/constraints/controllers/ConstraintController;Landroidx/work/impl/constraints/controllers/ConstraintController$track$1$listener$1;)V +HSPLandroidx/work/impl/constraints/controllers/ConstraintController$track$1$1;->invoke()Ljava/lang/Object; +HSPLandroidx/work/impl/constraints/controllers/ConstraintController$track$1$1;->invoke()V +Landroidx/work/impl/constraints/controllers/ConstraintController$track$1$listener$1; +HSPLandroidx/work/impl/constraints/controllers/ConstraintController$track$1$listener$1;->(Landroidx/work/impl/constraints/controllers/ConstraintController;Lkotlinx/coroutines/channels/ProducerScope;)V +HSPLandroidx/work/impl/constraints/controllers/ConstraintController$track$1$listener$1;->onConstraintChanged(Ljava/lang/Object;)V +Landroidx/work/impl/constraints/controllers/NetworkConnectedController; +HSPLandroidx/work/impl/constraints/controllers/NetworkConnectedController;->(Landroidx/work/impl/constraints/trackers/ConstraintTracker;)V +HSPLandroidx/work/impl/constraints/controllers/NetworkConnectedController;->hasConstraint(Landroidx/work/impl/model/WorkSpec;)Z +HSPLandroidx/work/impl/constraints/controllers/NetworkConnectedController;->isConstrained(Landroidx/work/impl/constraints/NetworkState;)Z +HSPLandroidx/work/impl/constraints/controllers/NetworkConnectedController;->isConstrained(Ljava/lang/Object;)Z +Landroidx/work/impl/constraints/controllers/NetworkMeteredController; +HSPLandroidx/work/impl/constraints/controllers/NetworkMeteredController;->()V +HSPLandroidx/work/impl/constraints/controllers/NetworkMeteredController;->(Landroidx/work/impl/constraints/trackers/ConstraintTracker;)V +HSPLandroidx/work/impl/constraints/controllers/NetworkMeteredController;->hasConstraint(Landroidx/work/impl/model/WorkSpec;)Z +Landroidx/work/impl/constraints/controllers/NetworkMeteredController$Companion; +HSPLandroidx/work/impl/constraints/controllers/NetworkMeteredController$Companion;->()V +HSPLandroidx/work/impl/constraints/controllers/NetworkMeteredController$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/work/impl/constraints/controllers/NetworkNotRoamingController; +HSPLandroidx/work/impl/constraints/controllers/NetworkNotRoamingController;->()V +HSPLandroidx/work/impl/constraints/controllers/NetworkNotRoamingController;->(Landroidx/work/impl/constraints/trackers/ConstraintTracker;)V +HSPLandroidx/work/impl/constraints/controllers/NetworkNotRoamingController;->hasConstraint(Landroidx/work/impl/model/WorkSpec;)Z +Landroidx/work/impl/constraints/controllers/NetworkNotRoamingController$Companion; +HSPLandroidx/work/impl/constraints/controllers/NetworkNotRoamingController$Companion;->()V +HSPLandroidx/work/impl/constraints/controllers/NetworkNotRoamingController$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/work/impl/constraints/controllers/NetworkUnmeteredController; +HSPLandroidx/work/impl/constraints/controllers/NetworkUnmeteredController;->(Landroidx/work/impl/constraints/trackers/ConstraintTracker;)V +HSPLandroidx/work/impl/constraints/controllers/NetworkUnmeteredController;->hasConstraint(Landroidx/work/impl/model/WorkSpec;)Z +Landroidx/work/impl/constraints/controllers/StorageNotLowController; +HSPLandroidx/work/impl/constraints/controllers/StorageNotLowController;->(Landroidx/work/impl/constraints/trackers/ConstraintTracker;)V +HSPLandroidx/work/impl/constraints/controllers/StorageNotLowController;->hasConstraint(Landroidx/work/impl/model/WorkSpec;)Z +Landroidx/work/impl/constraints/trackers/BatteryChargingTracker; +HSPLandroidx/work/impl/constraints/trackers/BatteryChargingTracker;->(Landroid/content/Context;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;)V +Landroidx/work/impl/constraints/trackers/BatteryNotLowTracker; +HSPLandroidx/work/impl/constraints/trackers/BatteryNotLowTracker;->(Landroid/content/Context;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;)V +Landroidx/work/impl/constraints/trackers/BroadcastReceiverConstraintTracker; +HSPLandroidx/work/impl/constraints/trackers/BroadcastReceiverConstraintTracker;->(Landroid/content/Context;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;)V +Landroidx/work/impl/constraints/trackers/BroadcastReceiverConstraintTracker$broadcastReceiver$1; +HSPLandroidx/work/impl/constraints/trackers/BroadcastReceiverConstraintTracker$broadcastReceiver$1;->(Landroidx/work/impl/constraints/trackers/BroadcastReceiverConstraintTracker;)V +Landroidx/work/impl/constraints/trackers/ConstraintTracker; +HSPLandroidx/work/impl/constraints/trackers/ConstraintTracker;->(Landroid/content/Context;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;)V +HSPLandroidx/work/impl/constraints/trackers/ConstraintTracker;->addListener(Landroidx/work/impl/constraints/ConstraintListener;)V +HSPLandroidx/work/impl/constraints/trackers/ConstraintTracker;->getAppContext()Landroid/content/Context; +HSPLandroidx/work/impl/constraints/trackers/ConstraintTracker;->removeListener(Landroidx/work/impl/constraints/ConstraintListener;)V +HSPLandroidx/work/impl/constraints/trackers/ConstraintTracker;->setState(Ljava/lang/Object;)V +Landroidx/work/impl/constraints/trackers/ConstraintTrackerKt; +HSPLandroidx/work/impl/constraints/trackers/ConstraintTrackerKt;->()V +HSPLandroidx/work/impl/constraints/trackers/ConstraintTrackerKt;->access$getTAG$p()Ljava/lang/String; +Landroidx/work/impl/constraints/trackers/NetworkStateTracker24; +HSPLandroidx/work/impl/constraints/trackers/NetworkStateTracker24;->(Landroid/content/Context;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;)V +HSPLandroidx/work/impl/constraints/trackers/NetworkStateTracker24;->access$getConnectivityManager$p(Landroidx/work/impl/constraints/trackers/NetworkStateTracker24;)Landroid/net/ConnectivityManager; +HSPLandroidx/work/impl/constraints/trackers/NetworkStateTracker24;->readSystemState()Landroidx/work/impl/constraints/NetworkState; +HSPLandroidx/work/impl/constraints/trackers/NetworkStateTracker24;->readSystemState()Ljava/lang/Object; +HSPLandroidx/work/impl/constraints/trackers/NetworkStateTracker24;->startTracking()V +HSPLandroidx/work/impl/constraints/trackers/NetworkStateTracker24;->stopTracking()V +Landroidx/work/impl/constraints/trackers/NetworkStateTracker24$networkCallback$1; +HSPLandroidx/work/impl/constraints/trackers/NetworkStateTracker24$networkCallback$1;->(Landroidx/work/impl/constraints/trackers/NetworkStateTracker24;)V +HSPLandroidx/work/impl/constraints/trackers/NetworkStateTracker24$networkCallback$1;->onCapabilitiesChanged(Landroid/net/Network;Landroid/net/NetworkCapabilities;)V +Landroidx/work/impl/constraints/trackers/NetworkStateTrackerKt; +HSPLandroidx/work/impl/constraints/trackers/NetworkStateTrackerKt;->()V +HSPLandroidx/work/impl/constraints/trackers/NetworkStateTrackerKt;->NetworkStateTracker(Landroid/content/Context;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;)Landroidx/work/impl/constraints/trackers/ConstraintTracker; +HSPLandroidx/work/impl/constraints/trackers/NetworkStateTrackerKt;->access$getTAG$p()Ljava/lang/String; +HSPLandroidx/work/impl/constraints/trackers/NetworkStateTrackerKt;->getActiveNetworkState(Landroid/net/ConnectivityManager;)Landroidx/work/impl/constraints/NetworkState; +HSPLandroidx/work/impl/constraints/trackers/NetworkStateTrackerKt;->isActiveNetworkValidated(Landroid/net/ConnectivityManager;)Z +Landroidx/work/impl/constraints/trackers/StorageNotLowTracker; +HSPLandroidx/work/impl/constraints/trackers/StorageNotLowTracker;->(Landroid/content/Context;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;)V +Landroidx/work/impl/constraints/trackers/Trackers; +HSPLandroidx/work/impl/constraints/trackers/Trackers;->(Landroid/content/Context;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;Landroidx/work/impl/constraints/trackers/ConstraintTracker;Landroidx/work/impl/constraints/trackers/BatteryNotLowTracker;Landroidx/work/impl/constraints/trackers/ConstraintTracker;Landroidx/work/impl/constraints/trackers/ConstraintTracker;)V +HSPLandroidx/work/impl/constraints/trackers/Trackers;->(Landroid/content/Context;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;Landroidx/work/impl/constraints/trackers/ConstraintTracker;Landroidx/work/impl/constraints/trackers/BatteryNotLowTracker;Landroidx/work/impl/constraints/trackers/ConstraintTracker;Landroidx/work/impl/constraints/trackers/ConstraintTracker;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/work/impl/constraints/trackers/Trackers;->getBatteryChargingTracker()Landroidx/work/impl/constraints/trackers/ConstraintTracker; +HSPLandroidx/work/impl/constraints/trackers/Trackers;->getBatteryNotLowTracker()Landroidx/work/impl/constraints/trackers/BatteryNotLowTracker; +HSPLandroidx/work/impl/constraints/trackers/Trackers;->getNetworkStateTracker()Landroidx/work/impl/constraints/trackers/ConstraintTracker; +HSPLandroidx/work/impl/constraints/trackers/Trackers;->getStorageNotLowTracker()Landroidx/work/impl/constraints/trackers/ConstraintTracker; +Landroidx/work/impl/foreground/ForegroundProcessor; +Landroidx/work/impl/model/Dependency; +HSPLandroidx/work/impl/model/Dependency;->getPrerequisiteId()Ljava/lang/String; +HSPLandroidx/work/impl/model/Dependency;->getWorkSpecId()Ljava/lang/String; +Landroidx/work/impl/model/DependencyDao; +Landroidx/work/impl/model/DependencyDao_Impl; +HSPLandroidx/work/impl/model/DependencyDao_Impl;->(Landroidx/room/RoomDatabase;)V +HSPLandroidx/work/impl/model/DependencyDao_Impl;->getDependentWorkIds(Ljava/lang/String;)Ljava/util/List; +HSPLandroidx/work/impl/model/DependencyDao_Impl;->getRequiredConverters()Ljava/util/List; +HSPLandroidx/work/impl/model/DependencyDao_Impl;->hasDependents(Ljava/lang/String;)Z +HSPLandroidx/work/impl/model/DependencyDao_Impl;->insertDependency(Landroidx/work/impl/model/Dependency;)V +Landroidx/work/impl/model/DependencyDao_Impl$1; +HSPLandroidx/work/impl/model/DependencyDao_Impl$1;->(Landroidx/work/impl/model/DependencyDao_Impl;Landroidx/room/RoomDatabase;)V +HSPLandroidx/work/impl/model/DependencyDao_Impl$1;->bind(Landroidx/sqlite/db/SupportSQLiteStatement;Landroidx/work/impl/model/Dependency;)V +HSPLandroidx/work/impl/model/DependencyDao_Impl$1;->bind(Landroidx/sqlite/db/SupportSQLiteStatement;Ljava/lang/Object;)V +HSPLandroidx/work/impl/model/DependencyDao_Impl$1;->createQuery()Ljava/lang/String; +Landroidx/work/impl/model/Preference; +HSPLandroidx/work/impl/model/Preference;->(Ljava/lang/String;Ljava/lang/Long;)V +HSPLandroidx/work/impl/model/Preference;->getKey()Ljava/lang/String; +HSPLandroidx/work/impl/model/Preference;->getValue()Ljava/lang/Long; +Landroidx/work/impl/model/PreferenceDao; +Landroidx/work/impl/model/PreferenceDao_Impl; +HSPLandroidx/work/impl/model/PreferenceDao_Impl;->(Landroidx/room/RoomDatabase;)V +HSPLandroidx/work/impl/model/PreferenceDao_Impl;->getLongValue(Ljava/lang/String;)Ljava/lang/Long; +HSPLandroidx/work/impl/model/PreferenceDao_Impl;->getRequiredConverters()Ljava/util/List; +HSPLandroidx/work/impl/model/PreferenceDao_Impl;->insertPreference(Landroidx/work/impl/model/Preference;)V +Landroidx/work/impl/model/PreferenceDao_Impl$1; +HSPLandroidx/work/impl/model/PreferenceDao_Impl$1;->(Landroidx/work/impl/model/PreferenceDao_Impl;Landroidx/room/RoomDatabase;)V +HSPLandroidx/work/impl/model/PreferenceDao_Impl$1;->bind(Landroidx/sqlite/db/SupportSQLiteStatement;Landroidx/work/impl/model/Preference;)V +HSPLandroidx/work/impl/model/PreferenceDao_Impl$1;->bind(Landroidx/sqlite/db/SupportSQLiteStatement;Ljava/lang/Object;)V +HSPLandroidx/work/impl/model/PreferenceDao_Impl$1;->createQuery()Ljava/lang/String; +Landroidx/work/impl/model/RawWorkInfoDao; +Landroidx/work/impl/model/RawWorkInfoDao_Impl; +HSPLandroidx/work/impl/model/RawWorkInfoDao_Impl;->getRequiredConverters()Ljava/util/List; +Landroidx/work/impl/model/SystemIdInfo; +HSPLandroidx/work/impl/model/SystemIdInfo;->(Ljava/lang/String;II)V +HSPLandroidx/work/impl/model/SystemIdInfo;->getGeneration()I +Landroidx/work/impl/model/SystemIdInfoDao; +HSPLandroidx/work/impl/model/SystemIdInfoDao;->access$getSystemIdInfo$jd(Landroidx/work/impl/model/SystemIdInfoDao;Landroidx/work/impl/model/WorkGenerationalId;)Landroidx/work/impl/model/SystemIdInfo; +HSPLandroidx/work/impl/model/SystemIdInfoDao;->getSystemIdInfo(Landroidx/work/impl/model/WorkGenerationalId;)Landroidx/work/impl/model/SystemIdInfo; +Landroidx/work/impl/model/SystemIdInfoDao$DefaultImpls; +HSPLandroidx/work/impl/model/SystemIdInfoDao$DefaultImpls;->getSystemIdInfo(Landroidx/work/impl/model/SystemIdInfoDao;Landroidx/work/impl/model/WorkGenerationalId;)Landroidx/work/impl/model/SystemIdInfo; +Landroidx/work/impl/model/SystemIdInfoDao_Impl; +HSPLandroidx/work/impl/model/SystemIdInfoDao_Impl;->(Landroidx/room/RoomDatabase;)V +HSPLandroidx/work/impl/model/SystemIdInfoDao_Impl;->getRequiredConverters()Ljava/util/List; +HSPLandroidx/work/impl/model/SystemIdInfoDao_Impl;->getSystemIdInfo(Landroidx/work/impl/model/WorkGenerationalId;)Landroidx/work/impl/model/SystemIdInfo; +HSPLandroidx/work/impl/model/SystemIdInfoDao_Impl;->getSystemIdInfo(Ljava/lang/String;I)Landroidx/work/impl/model/SystemIdInfo; +HSPLandroidx/work/impl/model/SystemIdInfoDao_Impl;->getWorkSpecIds()Ljava/util/List; +HSPLandroidx/work/impl/model/SystemIdInfoDao_Impl;->insertSystemIdInfo(Landroidx/work/impl/model/SystemIdInfo;)V +HSPLandroidx/work/impl/model/SystemIdInfoDao_Impl;->removeSystemIdInfo(Ljava/lang/String;)V +Landroidx/work/impl/model/SystemIdInfoDao_Impl$1; +HSPLandroidx/work/impl/model/SystemIdInfoDao_Impl$1;->(Landroidx/work/impl/model/SystemIdInfoDao_Impl;Landroidx/room/RoomDatabase;)V +HSPLandroidx/work/impl/model/SystemIdInfoDao_Impl$1;->bind(Landroidx/sqlite/db/SupportSQLiteStatement;Landroidx/work/impl/model/SystemIdInfo;)V +HSPLandroidx/work/impl/model/SystemIdInfoDao_Impl$1;->bind(Landroidx/sqlite/db/SupportSQLiteStatement;Ljava/lang/Object;)V +HSPLandroidx/work/impl/model/SystemIdInfoDao_Impl$1;->createQuery()Ljava/lang/String; +Landroidx/work/impl/model/SystemIdInfoDao_Impl$2; +HSPLandroidx/work/impl/model/SystemIdInfoDao_Impl$2;->(Landroidx/work/impl/model/SystemIdInfoDao_Impl;Landroidx/room/RoomDatabase;)V +Landroidx/work/impl/model/SystemIdInfoDao_Impl$3; +HSPLandroidx/work/impl/model/SystemIdInfoDao_Impl$3;->(Landroidx/work/impl/model/SystemIdInfoDao_Impl;Landroidx/room/RoomDatabase;)V +HSPLandroidx/work/impl/model/SystemIdInfoDao_Impl$3;->createQuery()Ljava/lang/String; +Landroidx/work/impl/model/SystemIdInfoKt; +PLandroidx/work/impl/model/SystemIdInfoKt;->systemIdInfo(Landroidx/work/impl/model/WorkGenerationalId;I)Landroidx/work/impl/model/SystemIdInfo; +Landroidx/work/impl/model/WorkGenerationalId; +HSPLandroidx/work/impl/model/WorkGenerationalId;->(Ljava/lang/String;I)V +HSPLandroidx/work/impl/model/WorkGenerationalId;->equals(Ljava/lang/Object;)Z +HSPLandroidx/work/impl/model/WorkGenerationalId;->getGeneration()I +HSPLandroidx/work/impl/model/WorkGenerationalId;->getWorkSpecId()Ljava/lang/String; +HSPLandroidx/work/impl/model/WorkGenerationalId;->hashCode()I +HSPLandroidx/work/impl/model/WorkGenerationalId;->toString()Ljava/lang/String; +Landroidx/work/impl/model/WorkName; +PLandroidx/work/impl/model/WorkName;->(Ljava/lang/String;Ljava/lang/String;)V +HSPLandroidx/work/impl/model/WorkName;->getName()Ljava/lang/String; +HSPLandroidx/work/impl/model/WorkName;->getWorkSpecId()Ljava/lang/String; +Landroidx/work/impl/model/WorkNameDao; +Landroidx/work/impl/model/WorkNameDao_Impl; +HSPLandroidx/work/impl/model/WorkNameDao_Impl;->(Landroidx/room/RoomDatabase;)V +HSPLandroidx/work/impl/model/WorkNameDao_Impl;->getRequiredConverters()Ljava/util/List; +HSPLandroidx/work/impl/model/WorkNameDao_Impl;->insert(Landroidx/work/impl/model/WorkName;)V +Landroidx/work/impl/model/WorkNameDao_Impl$1; +HSPLandroidx/work/impl/model/WorkNameDao_Impl$1;->(Landroidx/work/impl/model/WorkNameDao_Impl;Landroidx/room/RoomDatabase;)V +HSPLandroidx/work/impl/model/WorkNameDao_Impl$1;->bind(Landroidx/sqlite/db/SupportSQLiteStatement;Landroidx/work/impl/model/WorkName;)V +HSPLandroidx/work/impl/model/WorkNameDao_Impl$1;->bind(Landroidx/sqlite/db/SupportSQLiteStatement;Ljava/lang/Object;)V +HSPLandroidx/work/impl/model/WorkNameDao_Impl$1;->createQuery()Ljava/lang/String; +Landroidx/work/impl/model/WorkProgressDao; +Landroidx/work/impl/model/WorkProgressDao_Impl; +HSPLandroidx/work/impl/model/WorkProgressDao_Impl;->(Landroidx/room/RoomDatabase;)V +HSPLandroidx/work/impl/model/WorkProgressDao_Impl;->delete(Ljava/lang/String;)V +HSPLandroidx/work/impl/model/WorkProgressDao_Impl;->deleteAll()V +HSPLandroidx/work/impl/model/WorkProgressDao_Impl;->getRequiredConverters()Ljava/util/List; +Landroidx/work/impl/model/WorkProgressDao_Impl$1; +HSPLandroidx/work/impl/model/WorkProgressDao_Impl$1;->(Landroidx/work/impl/model/WorkProgressDao_Impl;Landroidx/room/RoomDatabase;)V +Landroidx/work/impl/model/WorkProgressDao_Impl$2; +HSPLandroidx/work/impl/model/WorkProgressDao_Impl$2;->(Landroidx/work/impl/model/WorkProgressDao_Impl;Landroidx/room/RoomDatabase;)V +HSPLandroidx/work/impl/model/WorkProgressDao_Impl$2;->createQuery()Ljava/lang/String; +Landroidx/work/impl/model/WorkProgressDao_Impl$3; +HSPLandroidx/work/impl/model/WorkProgressDao_Impl$3;->(Landroidx/work/impl/model/WorkProgressDao_Impl;Landroidx/room/RoomDatabase;)V +HSPLandroidx/work/impl/model/WorkProgressDao_Impl$3;->createQuery()Ljava/lang/String; +Landroidx/work/impl/model/WorkSpec; +HSPLandroidx/work/impl/model/WorkSpec;->()V +HSPLandroidx/work/impl/model/WorkSpec;->(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;IIJII)V +HSPLandroidx/work/impl/model/WorkSpec;->(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;IIJIIILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/work/impl/model/WorkSpec;->(Ljava/lang/String;Landroidx/work/impl/model/WorkSpec;)V +HSPLandroidx/work/impl/model/WorkSpec;->(Ljava/lang/String;Ljava/lang/String;)V +HSPLandroidx/work/impl/model/WorkSpec;->calculateNextRunTime()J +HSPLandroidx/work/impl/model/WorkSpec;->getGeneration()I +HSPLandroidx/work/impl/model/WorkSpec;->getNextScheduleTimeOverride()J +HSPLandroidx/work/impl/model/WorkSpec;->getNextScheduleTimeOverrideGeneration()I +HSPLandroidx/work/impl/model/WorkSpec;->getPeriodCount()I +HSPLandroidx/work/impl/model/WorkSpec;->getStopReason()I +PLandroidx/work/impl/model/WorkSpec;->hasConstraints()Z +HSPLandroidx/work/impl/model/WorkSpec;->hashCode()I +HSPLandroidx/work/impl/model/WorkSpec;->isBackedOff()Z +HSPLandroidx/work/impl/model/WorkSpec;->isPeriodic()Z +HSPLandroidx/work/impl/model/WorkSpec;->setPeriodic(JJ)V +Landroidx/work/impl/model/WorkSpec$$ExternalSyntheticLambda0; +HSPLandroidx/work/impl/model/WorkSpec$$ExternalSyntheticLambda0;->()V +Landroidx/work/impl/model/WorkSpec$Companion; +HSPLandroidx/work/impl/model/WorkSpec$Companion;->()V +HSPLandroidx/work/impl/model/WorkSpec$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/work/impl/model/WorkSpec$Companion;->calculateNextRunTime(ZILandroidx/work/BackoffPolicy;JJIZJJJJ)J +Landroidx/work/impl/model/WorkSpec$IdAndState; +HSPLandroidx/work/impl/model/WorkSpec$IdAndState;->(Ljava/lang/String;Landroidx/work/WorkInfo$State;)V +Landroidx/work/impl/model/WorkSpecDao; +Landroidx/work/impl/model/WorkSpecDao_Impl; +HSPLandroidx/work/impl/model/WorkSpecDao_Impl;->(Landroidx/room/RoomDatabase;)V +HSPLandroidx/work/impl/model/WorkSpecDao_Impl;->getAllEligibleWorkSpecsForScheduling(I)Ljava/util/List; +HSPLandroidx/work/impl/model/WorkSpecDao_Impl;->getEligibleWorkForScheduling(I)Ljava/util/List; +HSPLandroidx/work/impl/model/WorkSpecDao_Impl;->getEligibleWorkForSchedulingWithContentUris()Ljava/util/List; +HSPLandroidx/work/impl/model/WorkSpecDao_Impl;->getInputsFromPrerequisites(Ljava/lang/String;)Ljava/util/List; +HSPLandroidx/work/impl/model/WorkSpecDao_Impl;->getRequiredConverters()Ljava/util/List; +HSPLandroidx/work/impl/model/WorkSpecDao_Impl;->getRunningWork()Ljava/util/List; +HSPLandroidx/work/impl/model/WorkSpecDao_Impl;->getState(Ljava/lang/String;)Landroidx/work/WorkInfo$State; +HSPLandroidx/work/impl/model/WorkSpecDao_Impl;->getWorkSpec(Ljava/lang/String;)Landroidx/work/impl/model/WorkSpec; +HSPLandroidx/work/impl/model/WorkSpecDao_Impl;->getWorkSpecIdAndStatesForName(Ljava/lang/String;)Ljava/util/List; +HSPLandroidx/work/impl/model/WorkSpecDao_Impl;->hasUnfinishedWork()Z +HSPLandroidx/work/impl/model/WorkSpecDao_Impl;->incrementWorkSpecRunAttemptCount(Ljava/lang/String;)I +HSPLandroidx/work/impl/model/WorkSpecDao_Impl;->insertWorkSpec(Landroidx/work/impl/model/WorkSpec;)V +HSPLandroidx/work/impl/model/WorkSpecDao_Impl;->markWorkSpecScheduled(Ljava/lang/String;J)I +HSPLandroidx/work/impl/model/WorkSpecDao_Impl;->resetScheduledState()I +HSPLandroidx/work/impl/model/WorkSpecDao_Impl;->setOutput(Ljava/lang/String;Landroidx/work/Data;)V +HSPLandroidx/work/impl/model/WorkSpecDao_Impl;->setState(Landroidx/work/WorkInfo$State;Ljava/lang/String;)I +HSPLandroidx/work/impl/model/WorkSpecDao_Impl;->setStopReason(Ljava/lang/String;I)V +Landroidx/work/impl/model/WorkSpecDao_Impl$1; +HSPLandroidx/work/impl/model/WorkSpecDao_Impl$1;->(Landroidx/work/impl/model/WorkSpecDao_Impl;Landroidx/room/RoomDatabase;)V +HSPLandroidx/work/impl/model/WorkSpecDao_Impl$1;->bind(Landroidx/sqlite/db/SupportSQLiteStatement;Landroidx/work/impl/model/WorkSpec;)V +HSPLandroidx/work/impl/model/WorkSpecDao_Impl$1;->bind(Landroidx/sqlite/db/SupportSQLiteStatement;Ljava/lang/Object;)V +HSPLandroidx/work/impl/model/WorkSpecDao_Impl$1;->createQuery()Ljava/lang/String; +Landroidx/work/impl/model/WorkSpecDao_Impl$10; +HSPLandroidx/work/impl/model/WorkSpecDao_Impl$10;->(Landroidx/work/impl/model/WorkSpecDao_Impl;Landroidx/room/RoomDatabase;)V +Landroidx/work/impl/model/WorkSpecDao_Impl$11; +HSPLandroidx/work/impl/model/WorkSpecDao_Impl$11;->(Landroidx/work/impl/model/WorkSpecDao_Impl;Landroidx/room/RoomDatabase;)V +Landroidx/work/impl/model/WorkSpecDao_Impl$12; +HSPLandroidx/work/impl/model/WorkSpecDao_Impl$12;->(Landroidx/work/impl/model/WorkSpecDao_Impl;Landroidx/room/RoomDatabase;)V +Landroidx/work/impl/model/WorkSpecDao_Impl$13; +HSPLandroidx/work/impl/model/WorkSpecDao_Impl$13;->(Landroidx/work/impl/model/WorkSpecDao_Impl;Landroidx/room/RoomDatabase;)V +HSPLandroidx/work/impl/model/WorkSpecDao_Impl$13;->createQuery()Ljava/lang/String; +Landroidx/work/impl/model/WorkSpecDao_Impl$14; +HSPLandroidx/work/impl/model/WorkSpecDao_Impl$14;->(Landroidx/work/impl/model/WorkSpecDao_Impl;Landroidx/room/RoomDatabase;)V +HSPLandroidx/work/impl/model/WorkSpecDao_Impl$14;->createQuery()Ljava/lang/String; +Landroidx/work/impl/model/WorkSpecDao_Impl$15; +HSPLandroidx/work/impl/model/WorkSpecDao_Impl$15;->(Landroidx/work/impl/model/WorkSpecDao_Impl;Landroidx/room/RoomDatabase;)V +Landroidx/work/impl/model/WorkSpecDao_Impl$16; +HSPLandroidx/work/impl/model/WorkSpecDao_Impl$16;->(Landroidx/work/impl/model/WorkSpecDao_Impl;Landroidx/room/RoomDatabase;)V +Landroidx/work/impl/model/WorkSpecDao_Impl$17; +HSPLandroidx/work/impl/model/WorkSpecDao_Impl$17;->(Landroidx/work/impl/model/WorkSpecDao_Impl;Landroidx/room/RoomDatabase;)V +HSPLandroidx/work/impl/model/WorkSpecDao_Impl$17;->createQuery()Ljava/lang/String; +Landroidx/work/impl/model/WorkSpecDao_Impl$2; +HSPLandroidx/work/impl/model/WorkSpecDao_Impl$2;->(Landroidx/work/impl/model/WorkSpecDao_Impl;Landroidx/room/RoomDatabase;)V +Landroidx/work/impl/model/WorkSpecDao_Impl$3; +HSPLandroidx/work/impl/model/WorkSpecDao_Impl$3;->(Landroidx/work/impl/model/WorkSpecDao_Impl;Landroidx/room/RoomDatabase;)V +Landroidx/work/impl/model/WorkSpecDao_Impl$4; +HSPLandroidx/work/impl/model/WorkSpecDao_Impl$4;->(Landroidx/work/impl/model/WorkSpecDao_Impl;Landroidx/room/RoomDatabase;)V +HSPLandroidx/work/impl/model/WorkSpecDao_Impl$4;->createQuery()Ljava/lang/String; +Landroidx/work/impl/model/WorkSpecDao_Impl$5; +HSPLandroidx/work/impl/model/WorkSpecDao_Impl$5;->(Landroidx/work/impl/model/WorkSpecDao_Impl;Landroidx/room/RoomDatabase;)V +Landroidx/work/impl/model/WorkSpecDao_Impl$6; +HSPLandroidx/work/impl/model/WorkSpecDao_Impl$6;->(Landroidx/work/impl/model/WorkSpecDao_Impl;Landroidx/room/RoomDatabase;)V +Landroidx/work/impl/model/WorkSpecDao_Impl$7; +HSPLandroidx/work/impl/model/WorkSpecDao_Impl$7;->(Landroidx/work/impl/model/WorkSpecDao_Impl;Landroidx/room/RoomDatabase;)V +HSPLandroidx/work/impl/model/WorkSpecDao_Impl$7;->createQuery()Ljava/lang/String; +Landroidx/work/impl/model/WorkSpecDao_Impl$8; +HSPLandroidx/work/impl/model/WorkSpecDao_Impl$8;->(Landroidx/work/impl/model/WorkSpecDao_Impl;Landroidx/room/RoomDatabase;)V +Landroidx/work/impl/model/WorkSpecDao_Impl$9; +HSPLandroidx/work/impl/model/WorkSpecDao_Impl$9;->(Landroidx/work/impl/model/WorkSpecDao_Impl;Landroidx/room/RoomDatabase;)V +HSPLandroidx/work/impl/model/WorkSpecDao_Impl$9;->createQuery()Ljava/lang/String; +Landroidx/work/impl/model/WorkSpecKt; +HSPLandroidx/work/impl/model/WorkSpecKt;->generationalId(Landroidx/work/impl/model/WorkSpec;)Landroidx/work/impl/model/WorkGenerationalId; +Landroidx/work/impl/model/WorkTag; +HSPLandroidx/work/impl/model/WorkTag;->(Ljava/lang/String;Ljava/lang/String;)V +HSPLandroidx/work/impl/model/WorkTag;->getTag()Ljava/lang/String; +HSPLandroidx/work/impl/model/WorkTag;->getWorkSpecId()Ljava/lang/String; +Landroidx/work/impl/model/WorkTagDao; +HSPLandroidx/work/impl/model/WorkTagDao;->access$insertTags$jd(Landroidx/work/impl/model/WorkTagDao;Ljava/lang/String;Ljava/util/Set;)V +HSPLandroidx/work/impl/model/WorkTagDao;->insertTags(Ljava/lang/String;Ljava/util/Set;)V +Landroidx/work/impl/model/WorkTagDao$DefaultImpls; +HSPLandroidx/work/impl/model/WorkTagDao$DefaultImpls;->insertTags(Landroidx/work/impl/model/WorkTagDao;Ljava/lang/String;Ljava/util/Set;)V +Landroidx/work/impl/model/WorkTagDao_Impl; +HSPLandroidx/work/impl/model/WorkTagDao_Impl;->(Landroidx/room/RoomDatabase;)V +HSPLandroidx/work/impl/model/WorkTagDao_Impl;->getRequiredConverters()Ljava/util/List; +HSPLandroidx/work/impl/model/WorkTagDao_Impl;->getTagsForWorkSpecId(Ljava/lang/String;)Ljava/util/List; +HSPLandroidx/work/impl/model/WorkTagDao_Impl;->insert(Landroidx/work/impl/model/WorkTag;)V +HSPLandroidx/work/impl/model/WorkTagDao_Impl;->insertTags(Ljava/lang/String;Ljava/util/Set;)V +Landroidx/work/impl/model/WorkTagDao_Impl$1; +HSPLandroidx/work/impl/model/WorkTagDao_Impl$1;->(Landroidx/work/impl/model/WorkTagDao_Impl;Landroidx/room/RoomDatabase;)V +HSPLandroidx/work/impl/model/WorkTagDao_Impl$1;->bind(Landroidx/sqlite/db/SupportSQLiteStatement;Landroidx/work/impl/model/WorkTag;)V +HSPLandroidx/work/impl/model/WorkTagDao_Impl$1;->bind(Landroidx/sqlite/db/SupportSQLiteStatement;Ljava/lang/Object;)V +HSPLandroidx/work/impl/model/WorkTagDao_Impl$1;->createQuery()Ljava/lang/String; +Landroidx/work/impl/model/WorkTagDao_Impl$2; +HSPLandroidx/work/impl/model/WorkTagDao_Impl$2;->(Landroidx/work/impl/model/WorkTagDao_Impl;Landroidx/room/RoomDatabase;)V +Landroidx/work/impl/model/WorkTypeConverters; +HSPLandroidx/work/impl/model/WorkTypeConverters;->()V +HSPLandroidx/work/impl/model/WorkTypeConverters;->()V +HSPLandroidx/work/impl/model/WorkTypeConverters;->backoffPolicyToInt(Landroidx/work/BackoffPolicy;)I +HSPLandroidx/work/impl/model/WorkTypeConverters;->byteArrayToSetOfTriggers([B)Ljava/util/Set; +HSPLandroidx/work/impl/model/WorkTypeConverters;->intToBackoffPolicy(I)Landroidx/work/BackoffPolicy; +HSPLandroidx/work/impl/model/WorkTypeConverters;->intToNetworkType(I)Landroidx/work/NetworkType; +HSPLandroidx/work/impl/model/WorkTypeConverters;->intToOutOfQuotaPolicy(I)Landroidx/work/OutOfQuotaPolicy; +HSPLandroidx/work/impl/model/WorkTypeConverters;->intToState(I)Landroidx/work/WorkInfo$State; +HSPLandroidx/work/impl/model/WorkTypeConverters;->networkTypeToInt(Landroidx/work/NetworkType;)I +HSPLandroidx/work/impl/model/WorkTypeConverters;->outOfQuotaPolicyToInt(Landroidx/work/OutOfQuotaPolicy;)I +HSPLandroidx/work/impl/model/WorkTypeConverters;->setOfTriggersToByteArray(Ljava/util/Set;)[B +HSPLandroidx/work/impl/model/WorkTypeConverters;->stateToInt(Landroidx/work/WorkInfo$State;)I +Landroidx/work/impl/model/WorkTypeConverters$WhenMappings; +HSPLandroidx/work/impl/model/WorkTypeConverters$WhenMappings;->()V +Landroidx/work/impl/utils/Api28Impl; +HSPLandroidx/work/impl/utils/Api28Impl;->()V +HSPLandroidx/work/impl/utils/Api28Impl;->()V +HSPLandroidx/work/impl/utils/Api28Impl;->getProcessName()Ljava/lang/String; +Landroidx/work/impl/utils/EnqueueRunnable; +HSPLandroidx/work/impl/utils/EnqueueRunnable;->()V +HSPLandroidx/work/impl/utils/EnqueueRunnable;->(Landroidx/work/impl/WorkContinuationImpl;)V +HSPLandroidx/work/impl/utils/EnqueueRunnable;->(Landroidx/work/impl/WorkContinuationImpl;Landroidx/work/impl/OperationImpl;)V +HSPLandroidx/work/impl/utils/EnqueueRunnable;->addToDatabase()Z +HSPLandroidx/work/impl/utils/EnqueueRunnable;->enqueueContinuation(Landroidx/work/impl/WorkContinuationImpl;)Z +HSPLandroidx/work/impl/utils/EnqueueRunnable;->enqueueWorkWithPrerequisites(Landroidx/work/impl/WorkManagerImpl;Ljava/util/List;[Ljava/lang/String;Ljava/lang/String;Landroidx/work/ExistingWorkPolicy;)Z +HSPLandroidx/work/impl/utils/EnqueueRunnable;->getOperation()Landroidx/work/Operation; +HSPLandroidx/work/impl/utils/EnqueueRunnable;->processContinuation(Landroidx/work/impl/WorkContinuationImpl;)Z +HSPLandroidx/work/impl/utils/EnqueueRunnable;->run()V +HSPLandroidx/work/impl/utils/EnqueueRunnable;->scheduleWorkInBackground()V +Landroidx/work/impl/utils/EnqueueUtilsKt; +HSPLandroidx/work/impl/utils/EnqueueUtilsKt;->checkContentUriTriggerWorkerLimits(Landroidx/work/impl/WorkDatabase;Landroidx/work/Configuration;Landroidx/work/impl/WorkContinuationImpl;)V +PLandroidx/work/impl/utils/EnqueueUtilsKt;->wrapInConstraintTrackingWorkerIfNeeded(Ljava/util/List;Landroidx/work/impl/model/WorkSpec;)Landroidx/work/impl/model/WorkSpec; +Landroidx/work/impl/utils/ForceStopRunnable; +HSPLandroidx/work/impl/utils/ForceStopRunnable;->()V +HSPLandroidx/work/impl/utils/ForceStopRunnable;->(Landroid/content/Context;Landroidx/work/impl/WorkManagerImpl;)V +HSPLandroidx/work/impl/utils/ForceStopRunnable;->cleanUp()Z +HSPLandroidx/work/impl/utils/ForceStopRunnable;->forceStopRunnable()V +HSPLandroidx/work/impl/utils/ForceStopRunnable;->getIntent(Landroid/content/Context;)Landroid/content/Intent; +HSPLandroidx/work/impl/utils/ForceStopRunnable;->getPendingIntent(Landroid/content/Context;I)Landroid/app/PendingIntent; +HSPLandroidx/work/impl/utils/ForceStopRunnable;->isForceStopped()Z +HSPLandroidx/work/impl/utils/ForceStopRunnable;->multiProcessChecks()Z +HSPLandroidx/work/impl/utils/ForceStopRunnable;->run()V +HSPLandroidx/work/impl/utils/ForceStopRunnable;->shouldRescheduleWorkers()Z +Landroidx/work/impl/utils/ForceStopRunnable$BroadcastReceiver; +Landroidx/work/impl/utils/IdGenerator; +HSPLandroidx/work/impl/utils/IdGenerator;->$r8$lambda$LyUC9fmKDw6AhARQq6V7VCdkafU(Landroidx/work/impl/utils/IdGenerator;II)Ljava/lang/Integer; +HSPLandroidx/work/impl/utils/IdGenerator;->(Landroidx/work/impl/WorkDatabase;)V +HSPLandroidx/work/impl/utils/IdGenerator;->nextJobSchedulerIdWithRange$lambda$0(Landroidx/work/impl/utils/IdGenerator;II)Ljava/lang/Integer; +PLandroidx/work/impl/utils/IdGenerator;->nextJobSchedulerIdWithRange(II)I +Landroidx/work/impl/utils/IdGenerator$$ExternalSyntheticLambda1; +PLandroidx/work/impl/utils/IdGenerator$$ExternalSyntheticLambda1;->(Landroidx/work/impl/utils/IdGenerator;II)V +HSPLandroidx/work/impl/utils/IdGenerator$$ExternalSyntheticLambda1;->call()Ljava/lang/Object; +Landroidx/work/impl/utils/IdGeneratorKt; +HSPLandroidx/work/impl/utils/IdGeneratorKt;->access$nextId(Landroidx/work/impl/WorkDatabase;Ljava/lang/String;)I +HSPLandroidx/work/impl/utils/IdGeneratorKt;->nextId(Landroidx/work/impl/WorkDatabase;Ljava/lang/String;)I +HSPLandroidx/work/impl/utils/IdGeneratorKt;->updatePreference(Landroidx/work/impl/WorkDatabase;Ljava/lang/String;I)V +Landroidx/work/impl/utils/NetworkApi21; +HSPLandroidx/work/impl/utils/NetworkApi21;->getNetworkCapabilitiesCompat(Landroid/net/ConnectivityManager;Landroid/net/Network;)Landroid/net/NetworkCapabilities; +HSPLandroidx/work/impl/utils/NetworkApi21;->hasCapabilityCompat(Landroid/net/NetworkCapabilities;I)Z +HSPLandroidx/work/impl/utils/NetworkApi21;->unregisterNetworkCallbackCompat(Landroid/net/ConnectivityManager;Landroid/net/ConnectivityManager$NetworkCallback;)V +Landroidx/work/impl/utils/NetworkApi23; +HSPLandroidx/work/impl/utils/NetworkApi23;->getActiveNetworkCompat(Landroid/net/ConnectivityManager;)Landroid/net/Network; +Landroidx/work/impl/utils/NetworkApi24; +HSPLandroidx/work/impl/utils/NetworkApi24;->registerDefaultNetworkCallbackCompat(Landroid/net/ConnectivityManager;Landroid/net/ConnectivityManager$NetworkCallback;)V +Landroidx/work/impl/utils/PackageManagerHelper; +HSPLandroidx/work/impl/utils/PackageManagerHelper;->()V +HSPLandroidx/work/impl/utils/PackageManagerHelper;->getComponentEnabledSetting(Landroid/content/Context;Ljava/lang/String;)I +HSPLandroidx/work/impl/utils/PackageManagerHelper;->isComponentEnabled(IZ)Z +HSPLandroidx/work/impl/utils/PackageManagerHelper;->setComponentEnabled(Landroid/content/Context;Ljava/lang/Class;Z)V +Landroidx/work/impl/utils/PreferenceUtils; +HSPLandroidx/work/impl/utils/PreferenceUtils;->(Landroidx/work/impl/WorkDatabase;)V +HSPLandroidx/work/impl/utils/PreferenceUtils;->getLastForceStopEventMillis()J +HSPLandroidx/work/impl/utils/PreferenceUtils;->getNeedsReschedule()Z +HSPLandroidx/work/impl/utils/PreferenceUtils;->setLastForceStopEventMillis(J)V +Landroidx/work/impl/utils/ProcessUtils; +HSPLandroidx/work/impl/utils/ProcessUtils;->()V +HSPLandroidx/work/impl/utils/ProcessUtils;->getProcessName(Landroid/content/Context;)Ljava/lang/String; +HSPLandroidx/work/impl/utils/ProcessUtils;->isDefaultProcess(Landroid/content/Context;Landroidx/work/Configuration;)Z +Landroidx/work/impl/utils/SerialExecutorImpl; +HSPLandroidx/work/impl/utils/SerialExecutorImpl;->(Ljava/util/concurrent/Executor;)V +HSPLandroidx/work/impl/utils/SerialExecutorImpl;->execute(Ljava/lang/Runnable;)V +HSPLandroidx/work/impl/utils/SerialExecutorImpl;->scheduleNext()V +Landroidx/work/impl/utils/SerialExecutorImpl$Task; +HSPLandroidx/work/impl/utils/SerialExecutorImpl$Task;->(Landroidx/work/impl/utils/SerialExecutorImpl;Ljava/lang/Runnable;)V +HSPLandroidx/work/impl/utils/SerialExecutorImpl$Task;->run()V +Landroidx/work/impl/utils/StartWorkRunnable; +HSPLandroidx/work/impl/utils/StartWorkRunnable;->(Landroidx/work/impl/Processor;Landroidx/work/impl/StartStopToken;Landroidx/work/WorkerParameters$RuntimeExtras;)V +HSPLandroidx/work/impl/utils/StartWorkRunnable;->run()V +Landroidx/work/impl/utils/SynchronousExecutor; +HSPLandroidx/work/impl/utils/SynchronousExecutor;->()V +HSPLandroidx/work/impl/utils/SynchronousExecutor;->execute(Ljava/lang/Runnable;)V +Landroidx/work/impl/utils/WorkForegroundRunnable; +HSPLandroidx/work/impl/utils/WorkForegroundRunnable;->()V +HSPLandroidx/work/impl/utils/WorkForegroundRunnable;->(Landroid/content/Context;Landroidx/work/impl/model/WorkSpec;Landroidx/work/ListenableWorker;Landroidx/work/ForegroundUpdater;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;)V +HSPLandroidx/work/impl/utils/WorkForegroundRunnable;->getFuture()Lcom/google/common/util/concurrent/ListenableFuture; +HSPLandroidx/work/impl/utils/WorkForegroundRunnable;->run()V +Landroidx/work/impl/utils/WorkForegroundUpdater; +HSPLandroidx/work/impl/utils/WorkForegroundUpdater;->()V +HSPLandroidx/work/impl/utils/WorkForegroundUpdater;->(Landroidx/work/impl/WorkDatabase;Landroidx/work/impl/foreground/ForegroundProcessor;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;)V +Landroidx/work/impl/utils/WorkProgressUpdater; +HSPLandroidx/work/impl/utils/WorkProgressUpdater;->()V +HSPLandroidx/work/impl/utils/WorkProgressUpdater;->(Landroidx/work/impl/WorkDatabase;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;)V +Landroidx/work/impl/utils/futures/AbstractFuture; +HSPLandroidx/work/impl/utils/futures/AbstractFuture;->()V +HSPLandroidx/work/impl/utils/futures/AbstractFuture;->()V +HSPLandroidx/work/impl/utils/futures/AbstractFuture;->addListener(Ljava/lang/Runnable;Ljava/util/concurrent/Executor;)V +HSPLandroidx/work/impl/utils/futures/AbstractFuture;->afterDone()V +HSPLandroidx/work/impl/utils/futures/AbstractFuture;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/work/impl/utils/futures/AbstractFuture;->clearListeners(Landroidx/work/impl/utils/futures/AbstractFuture$Listener;)Landroidx/work/impl/utils/futures/AbstractFuture$Listener; +HSPLandroidx/work/impl/utils/futures/AbstractFuture;->complete(Landroidx/work/impl/utils/futures/AbstractFuture;)V +HSPLandroidx/work/impl/utils/futures/AbstractFuture;->executeListener(Ljava/lang/Runnable;Ljava/util/concurrent/Executor;)V +HSPLandroidx/work/impl/utils/futures/AbstractFuture;->get()Ljava/lang/Object; +HSPLandroidx/work/impl/utils/futures/AbstractFuture;->getDoneValue(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/work/impl/utils/futures/AbstractFuture;->getFutureValue(Lcom/google/common/util/concurrent/ListenableFuture;)Ljava/lang/Object; +HSPLandroidx/work/impl/utils/futures/AbstractFuture;->isCancelled()Z +HSPLandroidx/work/impl/utils/futures/AbstractFuture;->isDone()Z +HSPLandroidx/work/impl/utils/futures/AbstractFuture;->releaseWaiters()V +HSPLandroidx/work/impl/utils/futures/AbstractFuture;->set(Ljava/lang/Object;)Z +HSPLandroidx/work/impl/utils/futures/AbstractFuture;->setFuture(Lcom/google/common/util/concurrent/ListenableFuture;)Z +Landroidx/work/impl/utils/futures/AbstractFuture$AtomicHelper; +HSPLandroidx/work/impl/utils/futures/AbstractFuture$AtomicHelper;->()V +HSPLandroidx/work/impl/utils/futures/AbstractFuture$AtomicHelper;->(Landroidx/work/impl/utils/futures/AbstractFuture$1;)V +Landroidx/work/impl/utils/futures/AbstractFuture$Cancellation; +Landroidx/work/impl/utils/futures/AbstractFuture$Failure; +Landroidx/work/impl/utils/futures/AbstractFuture$Listener; +HSPLandroidx/work/impl/utils/futures/AbstractFuture$Listener;->()V +HSPLandroidx/work/impl/utils/futures/AbstractFuture$Listener;->(Ljava/lang/Runnable;Ljava/util/concurrent/Executor;)V +Landroidx/work/impl/utils/futures/AbstractFuture$SafeAtomicHelper; +HSPLandroidx/work/impl/utils/futures/AbstractFuture$SafeAtomicHelper;->(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 +HSPLandroidx/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 +HSPLandroidx/work/impl/utils/futures/AbstractFuture$SafeAtomicHelper;->casValue(Landroidx/work/impl/utils/futures/AbstractFuture;Ljava/lang/Object;Ljava/lang/Object;)Z +HSPLandroidx/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 +Landroidx/work/impl/utils/futures/AbstractFuture$SetFuture; +HSPLandroidx/work/impl/utils/futures/AbstractFuture$SetFuture;->(Landroidx/work/impl/utils/futures/AbstractFuture;Lcom/google/common/util/concurrent/ListenableFuture;)V +Landroidx/work/impl/utils/futures/AbstractFuture$Waiter; +HSPLandroidx/work/impl/utils/futures/AbstractFuture$Waiter;->()V +HSPLandroidx/work/impl/utils/futures/AbstractFuture$Waiter;->(Z)V +Landroidx/work/impl/utils/futures/DirectExecutor; +HSPLandroidx/work/impl/utils/futures/DirectExecutor;->$values()[Landroidx/work/impl/utils/futures/DirectExecutor; +HSPLandroidx/work/impl/utils/futures/DirectExecutor;->()V +HSPLandroidx/work/impl/utils/futures/DirectExecutor;->(Ljava/lang/String;I)V +Landroidx/work/impl/utils/futures/SettableFuture; +HSPLandroidx/work/impl/utils/futures/SettableFuture;->()V +HSPLandroidx/work/impl/utils/futures/SettableFuture;->create()Landroidx/work/impl/utils/futures/SettableFuture; +HSPLandroidx/work/impl/utils/futures/SettableFuture;->set(Ljava/lang/Object;)Z +HSPLandroidx/work/impl/utils/futures/SettableFuture;->setFuture(Lcom/google/common/util/concurrent/ListenableFuture;)Z +Landroidx/work/impl/utils/taskexecutor/SerialExecutor; +Landroidx/work/impl/utils/taskexecutor/TaskExecutor; +HSPLandroidx/work/impl/utils/taskexecutor/TaskExecutor;->executeOnTaskThread(Ljava/lang/Runnable;)V +Landroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor; +HSPLandroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;->(Ljava/util/concurrent/Executor;)V +HSPLandroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;->getMainThreadExecutor()Ljava/util/concurrent/Executor; +HSPLandroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;->getSerialTaskExecutor()Landroidx/work/impl/utils/SerialExecutorImpl; +HSPLandroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;->getSerialTaskExecutor()Landroidx/work/impl/utils/taskexecutor/SerialExecutor; +HSPLandroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;->getTaskCoroutineDispatcher()Lkotlinx/coroutines/CoroutineDispatcher; +Landroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor$1; +HSPLandroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor$1;->(Landroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;)V +HSPLandroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor$1;->execute(Ljava/lang/Runnable;)V +Lapp/cash/sqldelight/BaseTransacterImpl; +HSPLapp/cash/sqldelight/BaseTransacterImpl;->(Lapp/cash/sqldelight/db/SqlDriver;)V +HSPLapp/cash/sqldelight/BaseTransacterImpl;->getDriver()Lapp/cash/sqldelight/db/SqlDriver; +HSPLapp/cash/sqldelight/BaseTransacterImpl;->postTransactionCleanup(Lapp/cash/sqldelight/Transacter$Transaction;Lapp/cash/sqldelight/Transacter$Transaction;Ljava/lang/Throwable;Ljava/lang/Object;)Ljava/lang/Object; +Lapp/cash/sqldelight/ColumnAdapter; +Lapp/cash/sqldelight/ExecutableQuery; +HSPLapp/cash/sqldelight/ExecutableQuery;->(Lkotlin/jvm/functions/Function1;)V +HSPLapp/cash/sqldelight/ExecutableQuery;->executeAsList()Ljava/util/List; +Lapp/cash/sqldelight/ExecutableQuery$executeAsList$1; +HSPLapp/cash/sqldelight/ExecutableQuery$executeAsList$1;->(Lapp/cash/sqldelight/ExecutableQuery;)V +HSPLapp/cash/sqldelight/ExecutableQuery$executeAsList$1;->invoke(Lapp/cash/sqldelight/db/SqlCursor;)Lapp/cash/sqldelight/db/QueryResult; +HSPLapp/cash/sqldelight/ExecutableQuery$executeAsList$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lapp/cash/sqldelight/Query; +HSPLapp/cash/sqldelight/Query;->(Lkotlin/jvm/functions/Function1;)V +Lapp/cash/sqldelight/Query$Listener; +Lapp/cash/sqldelight/QueryKt; +HSPLapp/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; +Lapp/cash/sqldelight/RollbackException; +Lapp/cash/sqldelight/SimpleQuery; +HSPLapp/cash/sqldelight/SimpleQuery;->(I[Ljava/lang/String;Lapp/cash/sqldelight/db/SqlDriver;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V +HSPLapp/cash/sqldelight/SimpleQuery;->addListener(Lapp/cash/sqldelight/Query$Listener;)V +HSPLapp/cash/sqldelight/SimpleQuery;->execute(Lkotlin/jvm/functions/Function1;)Lapp/cash/sqldelight/db/QueryResult; +HSPLapp/cash/sqldelight/SimpleQuery;->removeListener(Lapp/cash/sqldelight/Query$Listener;)V +Lapp/cash/sqldelight/Transacter; +Lapp/cash/sqldelight/Transacter$DefaultImpls; +HSPLapp/cash/sqldelight/Transacter$DefaultImpls;->transaction$default(Lapp/cash/sqldelight/Transacter;ZLkotlin/jvm/functions/Function1;ILjava/lang/Object;)V +Lapp/cash/sqldelight/Transacter$Transaction; +HSPLapp/cash/sqldelight/Transacter$Transaction;->()V +HSPLapp/cash/sqldelight/Transacter$Transaction;->checkThreadConfinement$runtime()V +HSPLapp/cash/sqldelight/Transacter$Transaction;->enclosingTransaction$runtime()Lapp/cash/sqldelight/Transacter$Transaction; +HSPLapp/cash/sqldelight/Transacter$Transaction;->endTransaction$runtime()Lapp/cash/sqldelight/db/QueryResult; +HSPLapp/cash/sqldelight/Transacter$Transaction;->getChildrenSuccessful$runtime()Z +HSPLapp/cash/sqldelight/Transacter$Transaction;->getPendingTables$runtime()Ljava/util/Set; +HSPLapp/cash/sqldelight/Transacter$Transaction;->getPostCommitHooks$runtime()Ljava/util/List; +HSPLapp/cash/sqldelight/Transacter$Transaction;->getRegisteredQueries$runtime()Ljava/util/Set; +HSPLapp/cash/sqldelight/Transacter$Transaction;->getSuccessful$runtime()Z +HSPLapp/cash/sqldelight/Transacter$Transaction;->setSuccessful$runtime(Z)V +HSPLapp/cash/sqldelight/Transacter$Transaction;->setTransacter$runtime(Lapp/cash/sqldelight/TransacterBase;)V +Lapp/cash/sqldelight/TransacterBase; +Lapp/cash/sqldelight/TransacterImpl; +HSPLapp/cash/sqldelight/TransacterImpl;->(Lapp/cash/sqldelight/db/SqlDriver;)V +HSPLapp/cash/sqldelight/TransacterImpl;->transaction(ZLkotlin/jvm/functions/Function1;)V +HSPLapp/cash/sqldelight/TransacterImpl;->transactionWithWrapper(ZLkotlin/jvm/functions/Function1;)Ljava/lang/Object; +Lapp/cash/sqldelight/TransactionCallbacks; +Lapp/cash/sqldelight/TransactionWithReturn; +Lapp/cash/sqldelight/TransactionWithoutReturn; +Lapp/cash/sqldelight/TransactionWrapper; +HSPLapp/cash/sqldelight/TransactionWrapper;->(Lapp/cash/sqldelight/Transacter$Transaction;)V +Lapp/cash/sqldelight/async/coroutines/QueryExtensionsKt; +HSPLapp/cash/sqldelight/async/coroutines/QueryExtensionsKt;->awaitAsList(Lapp/cash/sqldelight/ExecutableQuery;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lapp/cash/sqldelight/async/coroutines/QueryExtensionsKt$awaitAsList$2; +HSPLapp/cash/sqldelight/async/coroutines/QueryExtensionsKt$awaitAsList$2;->(Lapp/cash/sqldelight/ExecutableQuery;)V +HSPLapp/cash/sqldelight/async/coroutines/QueryExtensionsKt$awaitAsList$2;->invoke(Lapp/cash/sqldelight/db/SqlCursor;)Lapp/cash/sqldelight/db/QueryResult; +HSPLapp/cash/sqldelight/async/coroutines/QueryExtensionsKt$awaitAsList$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lapp/cash/sqldelight/coroutines/FlowQuery; +HSPLapp/cash/sqldelight/coroutines/FlowQuery;->mapToList(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/flow/Flow; +HSPLapp/cash/sqldelight/coroutines/FlowQuery;->toFlow(Lapp/cash/sqldelight/Query;)Lkotlinx/coroutines/flow/Flow; +Lapp/cash/sqldelight/coroutines/FlowQuery$asFlow$1; +HSPLapp/cash/sqldelight/coroutines/FlowQuery$asFlow$1;->(Lapp/cash/sqldelight/Query;Lkotlin/coroutines/Continuation;)V +HSPLapp/cash/sqldelight/coroutines/FlowQuery$asFlow$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLapp/cash/sqldelight/coroutines/FlowQuery$asFlow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLapp/cash/sqldelight/coroutines/FlowQuery$asFlow$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLapp/cash/sqldelight/coroutines/FlowQuery$asFlow$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lapp/cash/sqldelight/coroutines/FlowQuery$asFlow$1$$ExternalSyntheticLambda0; +HSPLapp/cash/sqldelight/coroutines/FlowQuery$asFlow$1$$ExternalSyntheticLambda0;->(Lkotlinx/coroutines/channels/Channel;)V +Lapp/cash/sqldelight/coroutines/FlowQuery$mapToList$$inlined$map$1; +HSPLapp/cash/sqldelight/coroutines/FlowQuery$mapToList$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/CoroutineContext;)V +HSPLapp/cash/sqldelight/coroutines/FlowQuery$mapToList$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lapp/cash/sqldelight/coroutines/FlowQuery$mapToList$$inlined$map$1$2; +HSPLapp/cash/sqldelight/coroutines/FlowQuery$mapToList$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/CoroutineContext;)V +HSPLapp/cash/sqldelight/coroutines/FlowQuery$mapToList$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lapp/cash/sqldelight/coroutines/FlowQuery$mapToList$$inlined$map$1$2$1; +HSPLapp/cash/sqldelight/coroutines/FlowQuery$mapToList$$inlined$map$1$2$1;->(Lapp/cash/sqldelight/coroutines/FlowQuery$mapToList$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +HSPLapp/cash/sqldelight/coroutines/FlowQuery$mapToList$$inlined$map$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lapp/cash/sqldelight/coroutines/FlowQuery$mapToList$1$1; +HSPLapp/cash/sqldelight/coroutines/FlowQuery$mapToList$1$1;->(Lapp/cash/sqldelight/Query;Lkotlin/coroutines/Continuation;)V +HSPLapp/cash/sqldelight/coroutines/FlowQuery$mapToList$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLapp/cash/sqldelight/coroutines/FlowQuery$mapToList$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lapp/cash/sqldelight/db/AfterVersion; +Lapp/cash/sqldelight/db/QueryResult; +HSPLapp/cash/sqldelight/db/QueryResult;->()V +Lapp/cash/sqldelight/db/QueryResult$AsyncValue; +Lapp/cash/sqldelight/db/QueryResult$Companion; +HSPLapp/cash/sqldelight/db/QueryResult$Companion;->()V +HSPLapp/cash/sqldelight/db/QueryResult$Companion;->()V +HSPLapp/cash/sqldelight/db/QueryResult$Companion;->getUnit-mlR-ZEE()Ljava/lang/Object; +Lapp/cash/sqldelight/db/QueryResult$Value; +HSPLapp/cash/sqldelight/db/QueryResult$Value;->(Ljava/lang/Object;)V +HSPLapp/cash/sqldelight/db/QueryResult$Value;->await(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLapp/cash/sqldelight/db/QueryResult$Value;->await-impl(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLapp/cash/sqldelight/db/QueryResult$Value;->box-impl(Ljava/lang/Object;)Lapp/cash/sqldelight/db/QueryResult$Value; +HSPLapp/cash/sqldelight/db/QueryResult$Value;->constructor-impl(Ljava/lang/Object;)Ljava/lang/Object; +HSPLapp/cash/sqldelight/db/QueryResult$Value;->getValue()Ljava/lang/Object; +Lapp/cash/sqldelight/db/SqlCursor; +Lapp/cash/sqldelight/db/SqlDriver; +PLapp/cash/sqldelight/db/SqlDriver$DefaultImpls;->execute$default(Lapp/cash/sqldelight/db/SqlDriver;Ljava/lang/Integer;Ljava/lang/String;ILkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lapp/cash/sqldelight/db/QueryResult; +Lapp/cash/sqldelight/db/SqlPreparedStatement; +Lapp/cash/sqldelight/db/SqlSchema; +Lapp/cash/sqldelight/driver/android/AndroidCursor; +HSPLapp/cash/sqldelight/driver/android/AndroidCursor;->(Landroid/database/Cursor;Ljava/lang/Long;)V +HSPLapp/cash/sqldelight/driver/android/AndroidCursor;->next()Lapp/cash/sqldelight/db/QueryResult; +HSPLapp/cash/sqldelight/driver/android/AndroidCursor;->next-mlR-ZEE()Ljava/lang/Object; +PLapp/cash/sqldelight/driver/android/AndroidPreparedStatement;->(Landroidx/sqlite/db/SupportSQLiteStatement;)V +PLapp/cash/sqldelight/driver/android/AndroidPreparedStatement;->close()V +PLapp/cash/sqldelight/driver/android/AndroidPreparedStatement;->execute()J +Lapp/cash/sqldelight/driver/android/AndroidQuery; +HSPLapp/cash/sqldelight/driver/android/AndroidQuery;->(Ljava/lang/String;Landroidx/sqlite/db/SupportSQLiteDatabase;ILjava/lang/Long;)V +HSPLapp/cash/sqldelight/driver/android/AndroidQuery;->bindTo(Landroidx/sqlite/db/SupportSQLiteProgram;)V +HSPLapp/cash/sqldelight/driver/android/AndroidQuery;->close()V +HSPLapp/cash/sqldelight/driver/android/AndroidQuery;->executeQuery(Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; +HSPLapp/cash/sqldelight/driver/android/AndroidQuery;->getArgCount()I +HSPLapp/cash/sqldelight/driver/android/AndroidQuery;->getSql()Ljava/lang/String; +Lapp/cash/sqldelight/driver/android/AndroidSqliteDriver; +HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;->(Landroidx/sqlite/db/SupportSQLiteOpenHelper;)V +HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;->(Landroidx/sqlite/db/SupportSQLiteOpenHelper;Landroidx/sqlite/db/SupportSQLiteDatabase;ILjava/lang/Long;)V +PLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;->(Landroidx/sqlite/db/SupportSQLiteOpenHelper;Landroidx/sqlite/db/SupportSQLiteDatabase;ILjava/lang/Long;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;->access$getDatabase(Lapp/cash/sqldelight/driver/android/AndroidSqliteDriver;)Landroidx/sqlite/db/SupportSQLiteDatabase; +HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;->access$getOpenHelper$p(Lapp/cash/sqldelight/driver/android/AndroidSqliteDriver;)Landroidx/sqlite/db/SupportSQLiteOpenHelper; +HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;->access$getTransactions$p(Lapp/cash/sqldelight/driver/android/AndroidSqliteDriver;)Ljava/lang/ThreadLocal; +HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;->access$getWindowSizeBytes$p(Lapp/cash/sqldelight/driver/android/AndroidSqliteDriver;)Ljava/lang/Long; +HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;->addListener([Ljava/lang/String;Lapp/cash/sqldelight/Query$Listener;)V +PLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;->execute(Ljava/lang/Integer;Ljava/lang/String;ILkotlin/jvm/functions/Function1;)Lapp/cash/sqldelight/db/QueryResult; +HSPLapp/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; +HSPLapp/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; +HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;->executeQuery-0yMERmw(Ljava/lang/Integer;Ljava/lang/String;Lkotlin/jvm/functions/Function1;ILkotlin/jvm/functions/Function1;)Ljava/lang/Object; +HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;->getDatabase()Landroidx/sqlite/db/SupportSQLiteDatabase; +HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;->newTransaction()Lapp/cash/sqldelight/db/QueryResult; +HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;->removeListener([Ljava/lang/String;Lapp/cash/sqldelight/Query$Listener;)V +Lapp/cash/sqldelight/driver/android/AndroidSqliteDriver$Callback; +HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$Callback;->(Lapp/cash/sqldelight/db/SqlSchema;[Lapp/cash/sqldelight/db/AfterVersion;)V +PLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$Callback;->onCreate(Landroidx/sqlite/db/SupportSQLiteDatabase;)V +Lapp/cash/sqldelight/driver/android/AndroidSqliteDriver$Transaction; +HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$Transaction;->(Lapp/cash/sqldelight/driver/android/AndroidSqliteDriver;Lapp/cash/sqldelight/Transacter$Transaction;)V +HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$Transaction;->endTransaction(Z)Lapp/cash/sqldelight/db/QueryResult; +HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$Transaction;->getEnclosingTransaction()Lapp/cash/sqldelight/Transacter$Transaction; +Lapp/cash/sqldelight/driver/android/AndroidSqliteDriver$database$2; +HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$database$2;->(Lapp/cash/sqldelight/driver/android/AndroidSqliteDriver;Landroidx/sqlite/db/SupportSQLiteDatabase;)V +HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$database$2;->invoke()Landroidx/sqlite/db/SupportSQLiteDatabase; +HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$database$2;->invoke()Ljava/lang/Object; +PLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$execute$1;->(Lapp/cash/sqldelight/driver/android/AndroidSqliteDriver;Ljava/lang/String;)V +PLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$execute$1;->invoke()Lapp/cash/sqldelight/driver/android/AndroidStatement; +PLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$execute$1;->invoke()Ljava/lang/Object; +PLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$execute$2;->()V +PLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$execute$2;->()V +PLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$execute$2;->invoke(Lapp/cash/sqldelight/driver/android/AndroidStatement;)Ljava/lang/Long; +PLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$execute$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lapp/cash/sqldelight/driver/android/AndroidSqliteDriver$executeQuery$1; +HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$executeQuery$1;->(Ljava/lang/String;Lapp/cash/sqldelight/driver/android/AndroidSqliteDriver;I)V +HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$executeQuery$1;->invoke()Lapp/cash/sqldelight/driver/android/AndroidStatement; +HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$executeQuery$1;->invoke()Ljava/lang/Object; +Lapp/cash/sqldelight/driver/android/AndroidSqliteDriver$executeQuery$2; +HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$executeQuery$2;->(Lkotlin/jvm/functions/Function1;)V +HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$executeQuery$2;->invoke(Lapp/cash/sqldelight/driver/android/AndroidStatement;)Ljava/lang/Object; +HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$executeQuery$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lapp/cash/sqldelight/driver/android/AndroidSqliteDriver$statements$1; +HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$statements$1;->(I)V +HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$statements$1;->entryRemoved(ZILapp/cash/sqldelight/driver/android/AndroidStatement;Lapp/cash/sqldelight/driver/android/AndroidStatement;)V +HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$statements$1;->entryRemoved(ZLjava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V +Lapp/cash/sqldelight/driver/android/AndroidStatement; +Lapp/cash/sqldelight/internal/CurrentThreadIdKt; +HSPLapp/cash/sqldelight/internal/CurrentThreadIdKt;->currentThreadId()J +Larrow/core/AndThen1; +HSPLarrow/core/AndThen1;->()V +HSPLarrow/core/AndThen1;->()V +HSPLarrow/core/AndThen1;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLarrow/core/AndThen1;->compose(Lkotlin/jvm/functions/Function1;)Larrow/core/AndThen1; +HSPLarrow/core/AndThen1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Larrow/core/AndThen1$Companion; +HSPLarrow/core/AndThen1$Companion;->()V +HSPLarrow/core/AndThen1$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLarrow/core/AndThen1$Companion;->invoke(Lkotlin/jvm/functions/Function1;)Larrow/core/AndThen1; +HSPLarrow/core/AndThen1$Companion;->loop(Larrow/core/AndThen1;Ljava/lang/Object;I)Ljava/lang/Object; +Larrow/core/AndThen1$Single; +HSPLarrow/core/AndThen1$Single;->(Lkotlin/jvm/functions/Function1;I)V +HSPLarrow/core/AndThen1$Single;->getF()Lkotlin/jvm/functions/Function1; +HSPLarrow/core/AndThen1$Single;->getIndex()I +Larrow/core/AndThen1$compose$1; +HSPLarrow/core/AndThen1$compose$1;->(Larrow/core/AndThen1;Lkotlin/jvm/functions/Function1;)V +HSPLarrow/core/AndThen1$compose$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Larrow/core/Composition; +HSPLarrow/core/Composition;->compose(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Lkotlin/jvm/functions/Function1; +Larrow/core/Either; +HSPLarrow/core/Either;->()V +HSPLarrow/core/Either;->()V +HSPLarrow/core/Either;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLarrow/core/Either;->getOrNull()Ljava/lang/Object; +Larrow/core/Either$Companion; +HSPLarrow/core/Either$Companion;->()V +HSPLarrow/core/Either$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Larrow/core/Either$Left; +Larrow/core/Either$Right; +HSPLarrow/core/Either$Right;->()V +HSPLarrow/core/Either$Right;->(Ljava/lang/Object;)V +HSPLarrow/core/Either$Right;->getValue()Ljava/lang/Object; +Larrow/core/Either$Right$Companion; +HSPLarrow/core/Either$Right$Companion;->()V +HSPLarrow/core/Either$Right$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Larrow/core/EitherKt; +PLarrow/core/EitherKt;->right(Ljava/lang/Object;)Larrow/core/Either; +Larrow/core/IterableKt; +HSPLarrow/core/IterableKt;->()V +HSPLarrow/core/IterableKt;->widen(Ljava/util/List;)Ljava/util/List; +Larrow/core/None; +Larrow/core/Option; +HSPLarrow/core/Option;->()V +HSPLarrow/core/Option;->()V +HSPLarrow/core/Option;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Larrow/core/Option$Companion; +HSPLarrow/core/Option$Companion;->()V +HSPLarrow/core/Option$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Larrow/core/Partials; +HSPLarrow/core/Partials;->partially1(Lkotlin/jvm/functions/Function1;Ljava/lang/Object;)Lkotlin/jvm/functions/Function0; +HSPLarrow/core/Partials;->partially1(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;)Lkotlin/jvm/functions/Function1; +HSPLarrow/core/Partials;->partially1Effect(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;)Lkotlin/jvm/functions/Function1; +Larrow/core/Partials$partially1$1; +HSPLarrow/core/Partials$partially1$1;->(Lkotlin/jvm/functions/Function1;Ljava/lang/Object;)V +HSPLarrow/core/Partials$partially1$1;->invoke()Ljava/lang/Object; +Larrow/core/Partials$partially1$2; +HSPLarrow/core/Partials$partially1$2;->(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;)V +Larrow/core/Partials$partially1$23; +HSPLarrow/core/Partials$partially1$23;->(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V +Larrow/core/PredefKt; +Larrow/core/Some; +HSPLarrow/core/Some;->()V +HSPLarrow/core/Some;->(Ljava/lang/Object;)V +HSPLarrow/core/Some;->getValue()Ljava/lang/Object; +Larrow/core/Some$Companion; +HSPLarrow/core/Some$Companion;->()V +HSPLarrow/core/Some$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Larrow/optics/Fold; +Larrow/optics/Getter; +Larrow/optics/OptionalKt; +HSPLarrow/optics/OptionalKt;->Optional(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;)Larrow/optics/POptional; +Larrow/optics/OptionalKt$Optional$1; +HSPLarrow/optics/OptionalKt$Optional$1;->(Lkotlin/jvm/functions/Function1;)V +Larrow/optics/PEvery; +Larrow/optics/PLens; +HSPLarrow/optics/PLens;->()V +Larrow/optics/PLens$Companion; +HSPLarrow/optics/PLens$Companion;->()V +HSPLarrow/optics/PLens$Companion;->()V +HSPLarrow/optics/PLens$Companion;->invoke(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;)Larrow/optics/PLens; +Larrow/optics/PLens$Companion$invoke$1; +HSPLarrow/optics/PLens$Companion$invoke$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;)V +Larrow/optics/POptional; +HSPLarrow/optics/POptional;->()V +Larrow/optics/POptional$Companion; +HSPLarrow/optics/POptional$Companion;->()V +HSPLarrow/optics/POptional$Companion;->()V +HSPLarrow/optics/POptional$Companion;->invoke(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;)Larrow/optics/POptional; +Larrow/optics/POptional$Companion$invoke$1; +HSPLarrow/optics/POptional$Companion$invoke$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;)V +Larrow/optics/POptionalGetter; +Larrow/optics/PSetter; +Larrow/optics/PTraversal; +Lch/qos/logback/classic/Level; +HSPLch/qos/logback/classic/Level;->()V +HSPLch/qos/logback/classic/Level;->(ILjava/lang/String;)V +HSPLch/qos/logback/classic/Level;->toLevel(Ljava/lang/String;)Lch/qos/logback/classic/Level; +HSPLch/qos/logback/classic/Level;->toLevel(Ljava/lang/String;Lch/qos/logback/classic/Level;)Lch/qos/logback/classic/Level; +HSPLch/qos/logback/classic/Level;->toString()Ljava/lang/String; +Lch/qos/logback/classic/Logger; +HSPLch/qos/logback/classic/Logger;->()V +HSPLch/qos/logback/classic/Logger;->(Ljava/lang/String;Lch/qos/logback/classic/Logger;Lch/qos/logback/classic/LoggerContext;)V +HSPLch/qos/logback/classic/Logger;->addAppender(Lch/qos/logback/core/Appender;)V +HSPLch/qos/logback/classic/Logger;->createChildByName(Ljava/lang/String;)Lch/qos/logback/classic/Logger; +HSPLch/qos/logback/classic/Logger;->getChildByName(Ljava/lang/String;)Lch/qos/logback/classic/Logger; +HSPLch/qos/logback/classic/Logger;->getName()Ljava/lang/String; +HSPLch/qos/logback/classic/Logger;->setLevel(Lch/qos/logback/classic/Level;)V +HSPLch/qos/logback/classic/Logger;->toString()Ljava/lang/String; +Lch/qos/logback/classic/LoggerContext; +HSPLch/qos/logback/classic/LoggerContext;->()V +HSPLch/qos/logback/classic/LoggerContext;->fireOnLevelChange(Lch/qos/logback/classic/Logger;Lch/qos/logback/classic/Level;)V +HSPLch/qos/logback/classic/LoggerContext;->fireOnStart()V +HSPLch/qos/logback/classic/LoggerContext;->getLogger(Ljava/lang/String;)Lch/qos/logback/classic/Logger; +HSPLch/qos/logback/classic/LoggerContext;->getLogger(Ljava/lang/String;)Lorg/slf4j/Logger; +HSPLch/qos/logback/classic/LoggerContext;->incSize()V +HSPLch/qos/logback/classic/LoggerContext;->initEvaluatorMap()V +HSPLch/qos/logback/classic/LoggerContext;->isPackagingDataEnabled()Z +HSPLch/qos/logback/classic/LoggerContext;->putProperty(Ljava/lang/String;Ljava/lang/String;)V +HSPLch/qos/logback/classic/LoggerContext;->setName(Ljava/lang/String;)V +HSPLch/qos/logback/classic/LoggerContext;->setPackagingDataEnabled(Z)V +HSPLch/qos/logback/classic/LoggerContext;->start()V +HSPLch/qos/logback/classic/LoggerContext;->updateLoggerContextVO()V +Lch/qos/logback/classic/PatternLayout; +HSPLch/qos/logback/classic/PatternLayout;->()V +HSPLch/qos/logback/classic/PatternLayout;->()V +HSPLch/qos/logback/classic/PatternLayout;->getDefaultConverterMap()Ljava/util/Map; +Lch/qos/logback/classic/android/LogcatAppender; +HSPLch/qos/logback/classic/android/LogcatAppender;->()V +HSPLch/qos/logback/classic/android/LogcatAppender;->setEncoder(Lch/qos/logback/classic/encoder/PatternLayoutEncoder;)V +HSPLch/qos/logback/classic/android/LogcatAppender;->setTagEncoder(Lch/qos/logback/classic/encoder/PatternLayoutEncoder;)V +HSPLch/qos/logback/classic/android/LogcatAppender;->start()V +Lch/qos/logback/classic/encoder/PatternLayoutEncoder; +HSPLch/qos/logback/classic/encoder/PatternLayoutEncoder;->()V +HSPLch/qos/logback/classic/encoder/PatternLayoutEncoder;->start()V +Lch/qos/logback/classic/joran/JoranConfigurator; +HSPLch/qos/logback/classic/joran/JoranConfigurator;->()V +HSPLch/qos/logback/classic/joran/JoranConfigurator;->addDefaultNestedComponentRegistryRules(Lch/qos/logback/core/joran/spi/DefaultNestedComponentRegistry;)V +HSPLch/qos/logback/classic/joran/JoranConfigurator;->addInstanceRules(Lch/qos/logback/core/joran/spi/RuleStore;)V +Lch/qos/logback/classic/joran/action/ConditionalIncludeAction; +HSPLch/qos/logback/classic/joran/action/ConditionalIncludeAction;->()V +Lch/qos/logback/classic/joran/action/ConfigurationAction; +HSPLch/qos/logback/classic/joran/action/ConfigurationAction;->()V +HSPLch/qos/logback/classic/joran/action/ConfigurationAction;->()V +HSPLch/qos/logback/classic/joran/action/ConfigurationAction;->begin(Lch/qos/logback/core/joran/spi/InterpretationContext;Ljava/lang/String;Lorg/xml/sax/Attributes;)V +HSPLch/qos/logback/classic/joran/action/ConfigurationAction;->end(Lch/qos/logback/core/joran/spi/InterpretationContext;Ljava/lang/String;)V +HSPLch/qos/logback/classic/joran/action/ConfigurationAction;->processScanAttrib(Lch/qos/logback/core/joran/spi/InterpretationContext;Lorg/xml/sax/Attributes;)V +Lch/qos/logback/classic/joran/action/ContextNameAction; +HSPLch/qos/logback/classic/joran/action/ContextNameAction;->()V +Lch/qos/logback/classic/joran/action/FindIncludeAction; +HSPLch/qos/logback/classic/joran/action/FindIncludeAction;->()V +Lch/qos/logback/classic/joran/action/LevelAction; +HSPLch/qos/logback/classic/joran/action/LevelAction;->()V +Lch/qos/logback/classic/joran/action/LoggerAction; +HSPLch/qos/logback/classic/joran/action/LoggerAction;->()V +Lch/qos/logback/classic/joran/action/LoggerContextListenerAction; +HSPLch/qos/logback/classic/joran/action/LoggerContextListenerAction;->()V +Lch/qos/logback/classic/joran/action/ReceiverAction; +HSPLch/qos/logback/classic/joran/action/ReceiverAction;->()V +Lch/qos/logback/classic/joran/action/RootLoggerAction; +HSPLch/qos/logback/classic/joran/action/RootLoggerAction;->()V +HSPLch/qos/logback/classic/joran/action/RootLoggerAction;->begin(Lch/qos/logback/core/joran/spi/InterpretationContext;Ljava/lang/String;Lorg/xml/sax/Attributes;)V +HSPLch/qos/logback/classic/joran/action/RootLoggerAction;->end(Lch/qos/logback/core/joran/spi/InterpretationContext;Ljava/lang/String;)V +Lch/qos/logback/classic/pattern/Abbreviator; +Lch/qos/logback/classic/pattern/CallerDataConverter; +Lch/qos/logback/classic/pattern/ClassOfCallerConverter; +Lch/qos/logback/classic/pattern/ClassicConverter; +HSPLch/qos/logback/classic/pattern/ClassicConverter;->()V +Lch/qos/logback/classic/pattern/ContextNameConverter; +Lch/qos/logback/classic/pattern/DateConverter; +Lch/qos/logback/classic/pattern/EnsureExceptionHandling; +HSPLch/qos/logback/classic/pattern/EnsureExceptionHandling;->()V +HSPLch/qos/logback/classic/pattern/EnsureExceptionHandling;->chainHandlesThrowable(Lch/qos/logback/core/pattern/Converter;)Z +HSPLch/qos/logback/classic/pattern/EnsureExceptionHandling;->process(Lch/qos/logback/core/Context;Lch/qos/logback/core/pattern/Converter;)V +Lch/qos/logback/classic/pattern/ExtendedThrowableProxyConverter; +Lch/qos/logback/classic/pattern/FileOfCallerConverter; +Lch/qos/logback/classic/pattern/LevelConverter; +Lch/qos/logback/classic/pattern/LineOfCallerConverter; +Lch/qos/logback/classic/pattern/LineSeparatorConverter; +Lch/qos/logback/classic/pattern/LocalSequenceNumberConverter; +Lch/qos/logback/classic/pattern/LoggerConverter; +HSPLch/qos/logback/classic/pattern/LoggerConverter;->()V +Lch/qos/logback/classic/pattern/MDCConverter; +Lch/qos/logback/classic/pattern/MarkerConverter; +Lch/qos/logback/classic/pattern/MessageConverter; +HSPLch/qos/logback/classic/pattern/MessageConverter;->()V +Lch/qos/logback/classic/pattern/MethodOfCallerConverter; +Lch/qos/logback/classic/pattern/NamedConverter; +HSPLch/qos/logback/classic/pattern/NamedConverter;->()V +HSPLch/qos/logback/classic/pattern/NamedConverter;->start()V +Lch/qos/logback/classic/pattern/NopThrowableInformationConverter; +HSPLch/qos/logback/classic/pattern/NopThrowableInformationConverter;->()V +Lch/qos/logback/classic/pattern/PropertyConverter; +Lch/qos/logback/classic/pattern/RelativeTimeConverter; +Lch/qos/logback/classic/pattern/RootCauseFirstThrowableProxyConverter; +Lch/qos/logback/classic/pattern/TargetLengthBasedClassNameAbbreviator; +HSPLch/qos/logback/classic/pattern/TargetLengthBasedClassNameAbbreviator;->(I)V +Lch/qos/logback/classic/pattern/ThreadConverter; +HSPLch/qos/logback/classic/pattern/ThreadConverter;->()V +Lch/qos/logback/classic/pattern/ThrowableHandlingConverter; +HSPLch/qos/logback/classic/pattern/ThrowableHandlingConverter;->()V +Lch/qos/logback/classic/pattern/ThrowableProxyConverter; +HSPLch/qos/logback/classic/pattern/ThrowableProxyConverter;->()V +HSPLch/qos/logback/classic/pattern/ThrowableProxyConverter;->start()V +Lch/qos/logback/classic/sift/SiftAction; +HSPLch/qos/logback/classic/sift/SiftAction;->()V +Lch/qos/logback/classic/spi/LoggerContextVO; +HSPLch/qos/logback/classic/spi/LoggerContextVO;->(Lch/qos/logback/classic/LoggerContext;)V +Lch/qos/logback/classic/spi/TurboFilterList; +HSPLch/qos/logback/classic/spi/TurboFilterList;->()V +Lch/qos/logback/classic/util/ContextInitializer; +HSPLch/qos/logback/classic/util/ContextInitializer;->(Lch/qos/logback/classic/LoggerContext;)V +HSPLch/qos/logback/classic/util/ContextInitializer;->autoConfig()V +HSPLch/qos/logback/classic/util/ContextInitializer;->findConfigFileFromSystemProperties(Z)Ljava/net/URL; +HSPLch/qos/logback/classic/util/ContextInitializer;->findConfigFileURLFromAssets(Z)Ljava/net/URL; +HSPLch/qos/logback/classic/util/ContextInitializer;->getResource(Ljava/lang/String;Ljava/lang/ClassLoader;Z)Ljava/net/URL; +HSPLch/qos/logback/classic/util/ContextInitializer;->statusOnResourceSearch(Ljava/lang/String;Ljava/lang/ClassLoader;Ljava/lang/String;)V +Lch/qos/logback/classic/util/DefaultNestedComponentRules; +HSPLch/qos/logback/classic/util/DefaultNestedComponentRules;->addDefaultNestedComponentRegistryRules(Lch/qos/logback/core/joran/spi/DefaultNestedComponentRegistry;)V +Lch/qos/logback/classic/util/LogbackMDCAdapter; +HSPLch/qos/logback/classic/util/LogbackMDCAdapter;->()V +Lch/qos/logback/classic/util/LoggerNameUtil; +HSPLch/qos/logback/classic/util/LoggerNameUtil;->getSeparatorIndexOf(Ljava/lang/String;I)I +Lch/qos/logback/core/Appender; +Lch/qos/logback/core/AppenderBase; +Lch/qos/logback/core/BasicStatusManager; +HSPLch/qos/logback/core/BasicStatusManager;->()V +HSPLch/qos/logback/core/BasicStatusManager;->add(Lch/qos/logback/core/status/Status;)V +HSPLch/qos/logback/core/BasicStatusManager;->fireStatusAddEvent(Lch/qos/logback/core/status/Status;)V +HSPLch/qos/logback/core/BasicStatusManager;->getCopyOfStatusList()Ljava/util/List; +HSPLch/qos/logback/core/BasicStatusManager;->getCopyOfStatusListenerList()Ljava/util/List; +Lch/qos/logback/core/Context; +Lch/qos/logback/core/ContextBase; +HSPLch/qos/logback/core/ContextBase;->()V +HSPLch/qos/logback/core/ContextBase;->getBirthTime()J +HSPLch/qos/logback/core/ContextBase;->getConfigurationLock()Ljava/lang/Object; +HSPLch/qos/logback/core/ContextBase;->getCopyOfPropertyMap()Ljava/util/Map; +HSPLch/qos/logback/core/ContextBase;->getName()Ljava/lang/String; +HSPLch/qos/logback/core/ContextBase;->getObject(Ljava/lang/String;)Ljava/lang/Object; +HSPLch/qos/logback/core/ContextBase;->getStatusManager()Lch/qos/logback/core/status/StatusManager; +HSPLch/qos/logback/core/ContextBase;->initCollisionMaps()V +HSPLch/qos/logback/core/ContextBase;->putObject(Ljava/lang/String;Ljava/lang/Object;)V +HSPLch/qos/logback/core/ContextBase;->putProperty(Ljava/lang/String;Ljava/lang/String;)V +HSPLch/qos/logback/core/ContextBase;->setName(Ljava/lang/String;)V +HSPLch/qos/logback/core/ContextBase;->start()V +Lch/qos/logback/core/CoreConstants; +HSPLch/qos/logback/core/CoreConstants;->()V +Lch/qos/logback/core/Layout; +Lch/qos/logback/core/LayoutBase; +HSPLch/qos/logback/core/LayoutBase;->()V +HSPLch/qos/logback/core/LayoutBase;->getContext()Lch/qos/logback/core/Context; +HSPLch/qos/logback/core/LayoutBase;->setContext(Lch/qos/logback/core/Context;)V +HSPLch/qos/logback/core/LayoutBase;->start()V +Lch/qos/logback/core/UnsynchronizedAppenderBase; +HSPLch/qos/logback/core/UnsynchronizedAppenderBase;->()V +HSPLch/qos/logback/core/UnsynchronizedAppenderBase;->setName(Ljava/lang/String;)V +HSPLch/qos/logback/core/UnsynchronizedAppenderBase;->start()V +Lch/qos/logback/core/android/AndroidContextUtil; +HSPLch/qos/logback/core/android/AndroidContextUtil;->containsProperties(Ljava/lang/String;)Z +Lch/qos/logback/core/android/SystemPropertiesProxy; +HSPLch/qos/logback/core/android/SystemPropertiesProxy;->()V +HSPLch/qos/logback/core/android/SystemPropertiesProxy;->(Ljava/lang/ClassLoader;)V +HSPLch/qos/logback/core/android/SystemPropertiesProxy;->get(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; +HSPLch/qos/logback/core/android/SystemPropertiesProxy;->getInstance()Lch/qos/logback/core/android/SystemPropertiesProxy; +HSPLch/qos/logback/core/android/SystemPropertiesProxy;->setClassLoader(Ljava/lang/ClassLoader;)V +Lch/qos/logback/core/boolex/EvaluationException; +Lch/qos/logback/core/encoder/Encoder; +Lch/qos/logback/core/encoder/EncoderBase; +HSPLch/qos/logback/core/encoder/EncoderBase;->()V +Lch/qos/logback/core/encoder/LayoutWrappingEncoder; +HSPLch/qos/logback/core/encoder/LayoutWrappingEncoder;->()V +HSPLch/qos/logback/core/encoder/LayoutWrappingEncoder;->getLayout()Lch/qos/logback/core/Layout; +HSPLch/qos/logback/core/encoder/LayoutWrappingEncoder;->setParent(Lch/qos/logback/core/Appender;)V +HSPLch/qos/logback/core/encoder/LayoutWrappingEncoder;->start()V +HSPLch/qos/logback/core/encoder/LayoutWrappingEncoder;->stop()V +Lch/qos/logback/core/filter/Filter; +Lch/qos/logback/core/helpers/CyclicBuffer; +HSPLch/qos/logback/core/helpers/CyclicBuffer;->(I)V +HSPLch/qos/logback/core/helpers/CyclicBuffer;->asList()Ljava/util/List; +HSPLch/qos/logback/core/helpers/CyclicBuffer;->init(I)V +HSPLch/qos/logback/core/helpers/CyclicBuffer;->length()I +Lch/qos/logback/core/joran/GenericConfigurator; +HSPLch/qos/logback/core/joran/GenericConfigurator;->()V +HSPLch/qos/logback/core/joran/GenericConfigurator;->buildInterpreter()V +HSPLch/qos/logback/core/joran/GenericConfigurator;->doConfigure(Ljava/io/InputStream;Ljava/lang/String;)V +HSPLch/qos/logback/core/joran/GenericConfigurator;->doConfigure(Ljava/net/URL;)V +HSPLch/qos/logback/core/joran/GenericConfigurator;->doConfigure(Ljava/util/List;)V +HSPLch/qos/logback/core/joran/GenericConfigurator;->doConfigure(Lorg/xml/sax/InputSource;)V +HSPLch/qos/logback/core/joran/GenericConfigurator;->informContextOfURLUsedForConfiguration(Lch/qos/logback/core/Context;Ljava/net/URL;)V +HSPLch/qos/logback/core/joran/GenericConfigurator;->initialElementPath()Lch/qos/logback/core/joran/spi/ElementPath; +HSPLch/qos/logback/core/joran/GenericConfigurator;->registerSafeConfiguration(Ljava/util/List;)V +Lch/qos/logback/core/joran/JoranConfiguratorBase; +HSPLch/qos/logback/core/joran/JoranConfiguratorBase;->()V +HSPLch/qos/logback/core/joran/JoranConfiguratorBase;->addImplicitRules(Lch/qos/logback/core/joran/spi/Interpreter;)V +HSPLch/qos/logback/core/joran/JoranConfiguratorBase;->addInstanceRules(Lch/qos/logback/core/joran/spi/RuleStore;)V +HSPLch/qos/logback/core/joran/JoranConfiguratorBase;->buildInterpreter()V +Lch/qos/logback/core/joran/action/AbstractIncludeAction; +HSPLch/qos/logback/core/joran/action/AbstractIncludeAction;->()V +Lch/qos/logback/core/joran/action/Action; +HSPLch/qos/logback/core/joran/action/Action;->()V +Lch/qos/logback/core/joran/action/AppenderAction; +HSPLch/qos/logback/core/joran/action/AppenderAction;->()V +HSPLch/qos/logback/core/joran/action/AppenderAction;->begin(Lch/qos/logback/core/joran/spi/InterpretationContext;Ljava/lang/String;Lorg/xml/sax/Attributes;)V +HSPLch/qos/logback/core/joran/action/AppenderAction;->end(Lch/qos/logback/core/joran/spi/InterpretationContext;Ljava/lang/String;)V +HSPLch/qos/logback/core/joran/action/AppenderAction;->warnDeprecated(Ljava/lang/String;)V +Lch/qos/logback/core/joran/action/AppenderRefAction; +HSPLch/qos/logback/core/joran/action/AppenderRefAction;->()V +HSPLch/qos/logback/core/joran/action/AppenderRefAction;->begin(Lch/qos/logback/core/joran/spi/InterpretationContext;Ljava/lang/String;Lorg/xml/sax/Attributes;)V +HSPLch/qos/logback/core/joran/action/AppenderRefAction;->end(Lch/qos/logback/core/joran/spi/InterpretationContext;Ljava/lang/String;)V +Lch/qos/logback/core/joran/action/ConversionRuleAction; +HSPLch/qos/logback/core/joran/action/ConversionRuleAction;->()V +Lch/qos/logback/core/joran/action/DefinePropertyAction; +HSPLch/qos/logback/core/joran/action/DefinePropertyAction;->()V +Lch/qos/logback/core/joran/action/IADataForBasicProperty; +HSPLch/qos/logback/core/joran/action/IADataForBasicProperty;->(Lch/qos/logback/core/joran/util/PropertySetter;Lch/qos/logback/core/util/AggregationType;Ljava/lang/String;)V +Lch/qos/logback/core/joran/action/IADataForComplexProperty; +HSPLch/qos/logback/core/joran/action/IADataForComplexProperty;->(Lch/qos/logback/core/joran/util/PropertySetter;Lch/qos/logback/core/util/AggregationType;Ljava/lang/String;)V +HSPLch/qos/logback/core/joran/action/IADataForComplexProperty;->getAggregationType()Lch/qos/logback/core/util/AggregationType; +HSPLch/qos/logback/core/joran/action/IADataForComplexProperty;->getComplexPropertyName()Ljava/lang/String; +HSPLch/qos/logback/core/joran/action/IADataForComplexProperty;->getNestedComplexProperty()Ljava/lang/Object; +HSPLch/qos/logback/core/joran/action/IADataForComplexProperty;->setNestedComplexProperty(Ljava/lang/Object;)V +Lch/qos/logback/core/joran/action/ImplicitAction; +HSPLch/qos/logback/core/joran/action/ImplicitAction;->()V +Lch/qos/logback/core/joran/action/IncludeAction; +HSPLch/qos/logback/core/joran/action/IncludeAction;->()V +HSPLch/qos/logback/core/joran/action/IncludeAction;->setEventOffset(I)V +Lch/qos/logback/core/joran/action/NOPAction; +HSPLch/qos/logback/core/joran/action/NOPAction;->()V +Lch/qos/logback/core/joran/action/NestedBasicPropertyIA; +HSPLch/qos/logback/core/joran/action/NestedBasicPropertyIA;->()V +HSPLch/qos/logback/core/joran/action/NestedBasicPropertyIA;->begin(Lch/qos/logback/core/joran/spi/InterpretationContext;Ljava/lang/String;Lorg/xml/sax/Attributes;)V +HSPLch/qos/logback/core/joran/action/NestedBasicPropertyIA;->body(Lch/qos/logback/core/joran/spi/InterpretationContext;Ljava/lang/String;)V +HSPLch/qos/logback/core/joran/action/NestedBasicPropertyIA;->end(Lch/qos/logback/core/joran/spi/InterpretationContext;Ljava/lang/String;)V +HSPLch/qos/logback/core/joran/action/NestedBasicPropertyIA;->isApplicable(Lch/qos/logback/core/joran/spi/ElementPath;Lorg/xml/sax/Attributes;Lch/qos/logback/core/joran/spi/InterpretationContext;)Z +Lch/qos/logback/core/joran/action/NestedBasicPropertyIA$1; +HSPLch/qos/logback/core/joran/action/NestedBasicPropertyIA$1;->()V +Lch/qos/logback/core/joran/action/NestedComplexPropertyIA; +HSPLch/qos/logback/core/joran/action/NestedComplexPropertyIA;->()V +HSPLch/qos/logback/core/joran/action/NestedComplexPropertyIA;->begin(Lch/qos/logback/core/joran/spi/InterpretationContext;Ljava/lang/String;Lorg/xml/sax/Attributes;)V +HSPLch/qos/logback/core/joran/action/NestedComplexPropertyIA;->end(Lch/qos/logback/core/joran/spi/InterpretationContext;Ljava/lang/String;)V +HSPLch/qos/logback/core/joran/action/NestedComplexPropertyIA;->isApplicable(Lch/qos/logback/core/joran/spi/ElementPath;Lorg/xml/sax/Attributes;Lch/qos/logback/core/joran/spi/InterpretationContext;)Z +Lch/qos/logback/core/joran/action/NestedComplexPropertyIA$1; +HSPLch/qos/logback/core/joran/action/NestedComplexPropertyIA$1;->()V +Lch/qos/logback/core/joran/action/NewRuleAction; +HSPLch/qos/logback/core/joran/action/NewRuleAction;->()V +Lch/qos/logback/core/joran/action/ParamAction; +HSPLch/qos/logback/core/joran/action/ParamAction;->()V +HSPLch/qos/logback/core/joran/action/ParamAction;->()V +Lch/qos/logback/core/joran/action/PropertyAction; +HSPLch/qos/logback/core/joran/action/PropertyAction;->()V +HSPLch/qos/logback/core/joran/action/PropertyAction;->()V +Lch/qos/logback/core/joran/action/ShutdownHookAction; +HSPLch/qos/logback/core/joran/action/ShutdownHookAction;->()V +Lch/qos/logback/core/joran/action/StatusListenerAction; +HSPLch/qos/logback/core/joran/action/StatusListenerAction;->()V +Lch/qos/logback/core/joran/action/TimestampAction; +HSPLch/qos/logback/core/joran/action/TimestampAction;->()V +HSPLch/qos/logback/core/joran/action/TimestampAction;->()V +Lch/qos/logback/core/joran/event/BodyEvent; +HSPLch/qos/logback/core/joran/event/BodyEvent;->(Ljava/lang/String;Lorg/xml/sax/Locator;)V +HSPLch/qos/logback/core/joran/event/BodyEvent;->getText()Ljava/lang/String; +Lch/qos/logback/core/joran/event/EndEvent; +HSPLch/qos/logback/core/joran/event/EndEvent;->(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/xml/sax/Locator;)V +Lch/qos/logback/core/joran/event/InPlayListener; +Lch/qos/logback/core/joran/event/SaxEvent; +HSPLch/qos/logback/core/joran/event/SaxEvent;->(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/xml/sax/Locator;)V +HSPLch/qos/logback/core/joran/event/SaxEvent;->getLocator()Lorg/xml/sax/Locator; +Lch/qos/logback/core/joran/event/SaxEventRecorder; +HSPLch/qos/logback/core/joran/event/SaxEventRecorder;->(Lch/qos/logback/core/Context;)V +HSPLch/qos/logback/core/joran/event/SaxEventRecorder;->buildPullParser()Lorg/xmlpull/v1/sax2/Driver; +HSPLch/qos/logback/core/joran/event/SaxEventRecorder;->characters([CII)V +HSPLch/qos/logback/core/joran/event/SaxEventRecorder;->endElement(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V +HSPLch/qos/logback/core/joran/event/SaxEventRecorder;->getLastEvent()Lch/qos/logback/core/joran/event/SaxEvent; +HSPLch/qos/logback/core/joran/event/SaxEventRecorder;->getLocator()Lorg/xml/sax/Locator; +HSPLch/qos/logback/core/joran/event/SaxEventRecorder;->getSaxEventList()Ljava/util/List; +HSPLch/qos/logback/core/joran/event/SaxEventRecorder;->getTagName(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; +HSPLch/qos/logback/core/joran/event/SaxEventRecorder;->isSpaceOnly(Ljava/lang/String;)Z +HSPLch/qos/logback/core/joran/event/SaxEventRecorder;->recordEvents(Lorg/xml/sax/InputSource;)Ljava/util/List; +HSPLch/qos/logback/core/joran/event/SaxEventRecorder;->setDocumentLocator(Lorg/xml/sax/Locator;)V +HSPLch/qos/logback/core/joran/event/SaxEventRecorder;->startDocument()V +HSPLch/qos/logback/core/joran/event/SaxEventRecorder;->startElement(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/xml/sax/Attributes;)V +Lch/qos/logback/core/joran/event/StartEvent; +HSPLch/qos/logback/core/joran/event/StartEvent;->(Lch/qos/logback/core/joran/spi/ElementPath;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/xml/sax/Attributes;Lorg/xml/sax/Locator;)V +Lch/qos/logback/core/joran/spi/ActionException; +Lch/qos/logback/core/joran/spi/CAI_WithLocatorSupport; +HSPLch/qos/logback/core/joran/spi/CAI_WithLocatorSupport;->(Lch/qos/logback/core/Context;Lch/qos/logback/core/joran/spi/Interpreter;)V +Lch/qos/logback/core/joran/spi/ConfigurationWatchList; +HSPLch/qos/logback/core/joran/spi/ConfigurationWatchList;->()V +HSPLch/qos/logback/core/joran/spi/ConfigurationWatchList;->addAsFileToWatch(Ljava/net/URL;)V +HSPLch/qos/logback/core/joran/spi/ConfigurationWatchList;->convertToFile(Ljava/net/URL;)Ljava/io/File; +HSPLch/qos/logback/core/joran/spi/ConfigurationWatchList;->setMainURL(Ljava/net/URL;)V +Lch/qos/logback/core/joran/spi/DefaultClass; +Lch/qos/logback/core/joran/spi/DefaultNestedComponentRegistry; +HSPLch/qos/logback/core/joran/spi/DefaultNestedComponentRegistry;->()V +HSPLch/qos/logback/core/joran/spi/DefaultNestedComponentRegistry;->add(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Class;)V +HSPLch/qos/logback/core/joran/spi/DefaultNestedComponentRegistry;->findDefaultComponentType(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Class; +HSPLch/qos/logback/core/joran/spi/DefaultNestedComponentRegistry;->oneShotFind(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Class; +Lch/qos/logback/core/joran/spi/ElementPath; +HSPLch/qos/logback/core/joran/spi/ElementPath;->()V +HSPLch/qos/logback/core/joran/spi/ElementPath;->(Ljava/lang/String;)V +HSPLch/qos/logback/core/joran/spi/ElementPath;->duplicate()Lch/qos/logback/core/joran/spi/ElementPath; +HSPLch/qos/logback/core/joran/spi/ElementPath;->get(I)Ljava/lang/String; +HSPLch/qos/logback/core/joran/spi/ElementPath;->peekLast()Ljava/lang/String; +HSPLch/qos/logback/core/joran/spi/ElementPath;->pop()V +HSPLch/qos/logback/core/joran/spi/ElementPath;->push(Ljava/lang/String;)V +HSPLch/qos/logback/core/joran/spi/ElementPath;->size()I +Lch/qos/logback/core/joran/spi/ElementSelector; +HSPLch/qos/logback/core/joran/spi/ElementSelector;->(Ljava/lang/String;)V +HSPLch/qos/logback/core/joran/spi/ElementSelector;->equalityCheck(Ljava/lang/String;Ljava/lang/String;)Z +HSPLch/qos/logback/core/joran/spi/ElementSelector;->fullPathMatch(Lch/qos/logback/core/joran/spi/ElementPath;)Z +HSPLch/qos/logback/core/joran/spi/ElementSelector;->getPrefixMatchLength(Lch/qos/logback/core/joran/spi/ElementPath;)I +HSPLch/qos/logback/core/joran/spi/ElementSelector;->getTailMatchLength(Lch/qos/logback/core/joran/spi/ElementPath;)I +HSPLch/qos/logback/core/joran/spi/ElementSelector;->hashCode()I +Lch/qos/logback/core/joran/spi/EventPlayer; +HSPLch/qos/logback/core/joran/spi/EventPlayer;->(Lch/qos/logback/core/joran/spi/Interpreter;)V +HSPLch/qos/logback/core/joran/spi/EventPlayer;->play(Ljava/util/List;)V +Lch/qos/logback/core/joran/spi/HostClassAndPropertyDouble; +HSPLch/qos/logback/core/joran/spi/HostClassAndPropertyDouble;->(Ljava/lang/Class;Ljava/lang/String;)V +HSPLch/qos/logback/core/joran/spi/HostClassAndPropertyDouble;->equals(Ljava/lang/Object;)Z +HSPLch/qos/logback/core/joran/spi/HostClassAndPropertyDouble;->hashCode()I +Lch/qos/logback/core/joran/spi/InterpretationContext; +HSPLch/qos/logback/core/joran/spi/InterpretationContext;->()V +HSPLch/qos/logback/core/joran/spi/InterpretationContext;->(Lch/qos/logback/core/Context;Lch/qos/logback/core/joran/spi/Interpreter;)V +HSPLch/qos/logback/core/joran/spi/InterpretationContext;->fireInPlay(Lch/qos/logback/core/joran/event/SaxEvent;)V +HSPLch/qos/logback/core/joran/spi/InterpretationContext;->getDefaultNestedComponentRegistry()Lch/qos/logback/core/joran/spi/DefaultNestedComponentRegistry; +HSPLch/qos/logback/core/joran/spi/InterpretationContext;->getObjectMap()Ljava/util/Map; +HSPLch/qos/logback/core/joran/spi/InterpretationContext;->initAndroidContextIfValueHasSpecialVars(Ljava/lang/String;)V +HSPLch/qos/logback/core/joran/spi/InterpretationContext;->isEmpty()Z +HSPLch/qos/logback/core/joran/spi/InterpretationContext;->peekObject()Ljava/lang/Object; +HSPLch/qos/logback/core/joran/spi/InterpretationContext;->popObject()Ljava/lang/Object; +HSPLch/qos/logback/core/joran/spi/InterpretationContext;->pushObject(Ljava/lang/Object;)V +HSPLch/qos/logback/core/joran/spi/InterpretationContext;->subst(Ljava/lang/String;)Ljava/lang/String; +Lch/qos/logback/core/joran/spi/Interpreter; +HSPLch/qos/logback/core/joran/spi/Interpreter;->()V +HSPLch/qos/logback/core/joran/spi/Interpreter;->(Lch/qos/logback/core/Context;Lch/qos/logback/core/joran/spi/RuleStore;Lch/qos/logback/core/joran/spi/ElementPath;)V +HSPLch/qos/logback/core/joran/spi/Interpreter;->addImplicitAction(Lch/qos/logback/core/joran/action/ImplicitAction;)V +HSPLch/qos/logback/core/joran/spi/Interpreter;->callBeginAction(Ljava/util/List;Ljava/lang/String;Lorg/xml/sax/Attributes;)V +HSPLch/qos/logback/core/joran/spi/Interpreter;->callBodyAction(Ljava/util/List;Ljava/lang/String;)V +HSPLch/qos/logback/core/joran/spi/Interpreter;->callEndAction(Ljava/util/List;Ljava/lang/String;)V +HSPLch/qos/logback/core/joran/spi/Interpreter;->characters(Lch/qos/logback/core/joran/event/BodyEvent;)V +HSPLch/qos/logback/core/joran/spi/Interpreter;->endElement(Lch/qos/logback/core/joran/event/EndEvent;)V +HSPLch/qos/logback/core/joran/spi/Interpreter;->endElement(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V +HSPLch/qos/logback/core/joran/spi/Interpreter;->getApplicableActionList(Lch/qos/logback/core/joran/spi/ElementPath;Lorg/xml/sax/Attributes;)Ljava/util/List; +HSPLch/qos/logback/core/joran/spi/Interpreter;->getEventPlayer()Lch/qos/logback/core/joran/spi/EventPlayer; +HSPLch/qos/logback/core/joran/spi/Interpreter;->getInterpretationContext()Lch/qos/logback/core/joran/spi/InterpretationContext; +HSPLch/qos/logback/core/joran/spi/Interpreter;->getTagName(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; +HSPLch/qos/logback/core/joran/spi/Interpreter;->lookupImplicitAction(Lch/qos/logback/core/joran/spi/ElementPath;Lorg/xml/sax/Attributes;Lch/qos/logback/core/joran/spi/InterpretationContext;)Ljava/util/List; +HSPLch/qos/logback/core/joran/spi/Interpreter;->setDocumentLocator(Lorg/xml/sax/Locator;)V +HSPLch/qos/logback/core/joran/spi/Interpreter;->startElement(Lch/qos/logback/core/joran/event/StartEvent;)V +HSPLch/qos/logback/core/joran/spi/Interpreter;->startElement(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/xml/sax/Attributes;)V +Lch/qos/logback/core/joran/spi/JoranException; +Lch/qos/logback/core/joran/spi/NoAutoStart; +Lch/qos/logback/core/joran/spi/NoAutoStartUtil; +HSPLch/qos/logback/core/joran/spi/NoAutoStartUtil;->notMarkedWithNoAutoStart(Ljava/lang/Object;)Z +Lch/qos/logback/core/joran/spi/RuleStore; +Lch/qos/logback/core/joran/spi/SimpleRuleStore; +HSPLch/qos/logback/core/joran/spi/SimpleRuleStore;->()V +HSPLch/qos/logback/core/joran/spi/SimpleRuleStore;->(Lch/qos/logback/core/Context;)V +HSPLch/qos/logback/core/joran/spi/SimpleRuleStore;->addRule(Lch/qos/logback/core/joran/spi/ElementSelector;Lch/qos/logback/core/joran/action/Action;)V +HSPLch/qos/logback/core/joran/spi/SimpleRuleStore;->fullPathMatch(Lch/qos/logback/core/joran/spi/ElementPath;)Ljava/util/List; +HSPLch/qos/logback/core/joran/spi/SimpleRuleStore;->isKleeneStar(Ljava/lang/String;)Z +HSPLch/qos/logback/core/joran/spi/SimpleRuleStore;->isSuffixPattern(Lch/qos/logback/core/joran/spi/ElementSelector;)Z +HSPLch/qos/logback/core/joran/spi/SimpleRuleStore;->matchActions(Lch/qos/logback/core/joran/spi/ElementPath;)Ljava/util/List; +HSPLch/qos/logback/core/joran/spi/SimpleRuleStore;->middleMatch(Lch/qos/logback/core/joran/spi/ElementPath;)Ljava/util/List; +HSPLch/qos/logback/core/joran/spi/SimpleRuleStore;->prefixMatch(Lch/qos/logback/core/joran/spi/ElementPath;)Ljava/util/List; +HSPLch/qos/logback/core/joran/spi/SimpleRuleStore;->suffixMatch(Lch/qos/logback/core/joran/spi/ElementPath;)Ljava/util/List; +Lch/qos/logback/core/joran/util/ConfigurationWatchListUtil; +HSPLch/qos/logback/core/joran/util/ConfigurationWatchListUtil;->()V +HSPLch/qos/logback/core/joran/util/ConfigurationWatchListUtil;->()V +HSPLch/qos/logback/core/joran/util/ConfigurationWatchListUtil;->getConfigurationWatchList(Lch/qos/logback/core/Context;)Lch/qos/logback/core/joran/spi/ConfigurationWatchList; +HSPLch/qos/logback/core/joran/util/ConfigurationWatchListUtil;->setMainWatchURL(Lch/qos/logback/core/Context;Ljava/net/URL;)V +Lch/qos/logback/core/joran/util/IntrospectionException; +Lch/qos/logback/core/joran/util/Introspector; +HSPLch/qos/logback/core/joran/util/Introspector;->decapitalize(Ljava/lang/String;)Ljava/lang/String; +HSPLch/qos/logback/core/joran/util/Introspector;->getMethodDescriptors(Ljava/lang/Class;)[Lch/qos/logback/core/joran/util/MethodDescriptor; +HSPLch/qos/logback/core/joran/util/Introspector;->getPropertyDescriptors(Ljava/lang/Class;)[Lch/qos/logback/core/joran/util/PropertyDescriptor; +Lch/qos/logback/core/joran/util/MethodDescriptor; +HSPLch/qos/logback/core/joran/util/MethodDescriptor;->(Ljava/lang/String;Ljava/lang/reflect/Method;)V +HSPLch/qos/logback/core/joran/util/MethodDescriptor;->getName()Ljava/lang/String; +Lch/qos/logback/core/joran/util/PropertyDescriptor; +HSPLch/qos/logback/core/joran/util/PropertyDescriptor;->(Ljava/lang/String;)V +HSPLch/qos/logback/core/joran/util/PropertyDescriptor;->getName()Ljava/lang/String; +HSPLch/qos/logback/core/joran/util/PropertyDescriptor;->getPropertyType()Ljava/lang/Class; +HSPLch/qos/logback/core/joran/util/PropertyDescriptor;->getWriteMethod()Ljava/lang/reflect/Method; +HSPLch/qos/logback/core/joran/util/PropertyDescriptor;->setPropertyType(Ljava/lang/Class;)V +HSPLch/qos/logback/core/joran/util/PropertyDescriptor;->setReadMethod(Ljava/lang/reflect/Method;)V +HSPLch/qos/logback/core/joran/util/PropertyDescriptor;->setWriteMethod(Ljava/lang/reflect/Method;)V +Lch/qos/logback/core/joran/util/PropertySetter; +HSPLch/qos/logback/core/joran/util/PropertySetter;->(Ljava/lang/Object;)V +HSPLch/qos/logback/core/joran/util/PropertySetter;->capitalizeFirstLetter(Ljava/lang/String;)Ljava/lang/String; +HSPLch/qos/logback/core/joran/util/PropertySetter;->computeAggregationType(Ljava/lang/String;)Lch/qos/logback/core/util/AggregationType; +HSPLch/qos/logback/core/joran/util/PropertySetter;->computeRawAggregationType(Ljava/lang/reflect/Method;)Lch/qos/logback/core/util/AggregationType; +HSPLch/qos/logback/core/joran/util/PropertySetter;->findAdderMethod(Ljava/lang/String;)Ljava/lang/reflect/Method; +HSPLch/qos/logback/core/joran/util/PropertySetter;->findSetterMethod(Ljava/lang/String;)Ljava/lang/reflect/Method; +HSPLch/qos/logback/core/joran/util/PropertySetter;->getAnnotation(Ljava/lang/String;Ljava/lang/Class;Ljava/lang/reflect/Method;)Ljava/lang/annotation/Annotation; +HSPLch/qos/logback/core/joran/util/PropertySetter;->getByConcreteType(Ljava/lang/String;Ljava/lang/reflect/Method;)Ljava/lang/Class; +HSPLch/qos/logback/core/joran/util/PropertySetter;->getClassNameViaImplicitRules(Ljava/lang/String;Lch/qos/logback/core/util/AggregationType;Lch/qos/logback/core/joran/spi/DefaultNestedComponentRegistry;)Ljava/lang/Class; +HSPLch/qos/logback/core/joran/util/PropertySetter;->getDefaultClassNameByAnnonation(Ljava/lang/String;Ljava/lang/reflect/Method;)Ljava/lang/Class; +HSPLch/qos/logback/core/joran/util/PropertySetter;->getMethod(Ljava/lang/String;)Ljava/lang/reflect/Method; +HSPLch/qos/logback/core/joran/util/PropertySetter;->getObj()Ljava/lang/Object; +HSPLch/qos/logback/core/joran/util/PropertySetter;->getParameterClassForMethod(Ljava/lang/reflect/Method;)Ljava/lang/Class; +HSPLch/qos/logback/core/joran/util/PropertySetter;->getPropertyDescriptor(Ljava/lang/String;)Lch/qos/logback/core/joran/util/PropertyDescriptor; +HSPLch/qos/logback/core/joran/util/PropertySetter;->getRelevantMethod(Ljava/lang/String;Lch/qos/logback/core/util/AggregationType;)Ljava/lang/reflect/Method; +HSPLch/qos/logback/core/joran/util/PropertySetter;->introspect()V +HSPLch/qos/logback/core/joran/util/PropertySetter;->invokeMethodWithSingleParameterOnThisObject(Ljava/lang/reflect/Method;Ljava/lang/Object;)V +HSPLch/qos/logback/core/joran/util/PropertySetter;->isSanityCheckSuccessful(Ljava/lang/String;Ljava/lang/reflect/Method;[Ljava/lang/Class;Ljava/lang/Object;)Z +HSPLch/qos/logback/core/joran/util/PropertySetter;->isUnequivocallyInstantiable(Ljava/lang/Class;)Z +HSPLch/qos/logback/core/joran/util/PropertySetter;->setComplexProperty(Ljava/lang/String;Ljava/lang/Object;)V +HSPLch/qos/logback/core/joran/util/PropertySetter;->setProperty(Lch/qos/logback/core/joran/util/PropertyDescriptor;Ljava/lang/String;Ljava/lang/String;)V +HSPLch/qos/logback/core/joran/util/PropertySetter;->setProperty(Ljava/lang/String;Ljava/lang/String;)V +Lch/qos/logback/core/joran/util/StringToObjectConverter; +HSPLch/qos/logback/core/joran/util/StringToObjectConverter;->()V +HSPLch/qos/logback/core/joran/util/StringToObjectConverter;->canBeBuiltFromSimpleString(Ljava/lang/Class;)Z +HSPLch/qos/logback/core/joran/util/StringToObjectConverter;->convertArg(Lch/qos/logback/core/spi/ContextAware;Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/Object; +HSPLch/qos/logback/core/joran/util/StringToObjectConverter;->followsTheValueOfConvention(Ljava/lang/Class;)Z +HSPLch/qos/logback/core/joran/util/StringToObjectConverter;->getValueOfMethod(Ljava/lang/Class;)Ljava/lang/reflect/Method; +HSPLch/qos/logback/core/joran/util/StringToObjectConverter;->isOfTypeCharset(Ljava/lang/Class;)Z +Lch/qos/logback/core/net/ssl/KeyManagerFactoryFactoryBean; +Lch/qos/logback/core/net/ssl/KeyStoreFactoryBean; +Lch/qos/logback/core/net/ssl/SSLComponent; +Lch/qos/logback/core/net/ssl/SSLConfiguration; +Lch/qos/logback/core/net/ssl/SSLContextFactoryBean; +Lch/qos/logback/core/net/ssl/SSLNestedComponentRegistryRules; +HSPLch/qos/logback/core/net/ssl/SSLNestedComponentRegistryRules;->addDefaultNestedComponentRegistryRules(Lch/qos/logback/core/joran/spi/DefaultNestedComponentRegistry;)V +Lch/qos/logback/core/net/ssl/SSLParametersConfiguration; +Lch/qos/logback/core/net/ssl/SecureRandomFactoryBean; +Lch/qos/logback/core/net/ssl/TrustManagerFactoryFactoryBean; +Lch/qos/logback/core/pattern/CompositeConverter; +Lch/qos/logback/core/pattern/Converter; +HSPLch/qos/logback/core/pattern/Converter;->()V +HSPLch/qos/logback/core/pattern/Converter;->getNext()Lch/qos/logback/core/pattern/Converter; +HSPLch/qos/logback/core/pattern/Converter;->setNext(Lch/qos/logback/core/pattern/Converter;)V +Lch/qos/logback/core/pattern/ConverterUtil; +HSPLch/qos/logback/core/pattern/ConverterUtil;->findTail(Lch/qos/logback/core/pattern/Converter;)Lch/qos/logback/core/pattern/Converter; +HSPLch/qos/logback/core/pattern/ConverterUtil;->setContextForConverters(Lch/qos/logback/core/Context;Lch/qos/logback/core/pattern/Converter;)V +HSPLch/qos/logback/core/pattern/ConverterUtil;->startConverters(Lch/qos/logback/core/pattern/Converter;)V +Lch/qos/logback/core/pattern/DynamicConverter; +HSPLch/qos/logback/core/pattern/DynamicConverter;->()V +HSPLch/qos/logback/core/pattern/DynamicConverter;->getFirstOption()Ljava/lang/String; +HSPLch/qos/logback/core/pattern/DynamicConverter;->getOptionList()Ljava/util/List; +HSPLch/qos/logback/core/pattern/DynamicConverter;->setContext(Lch/qos/logback/core/Context;)V +HSPLch/qos/logback/core/pattern/DynamicConverter;->setOptionList(Ljava/util/List;)V +HSPLch/qos/logback/core/pattern/DynamicConverter;->start()V +Lch/qos/logback/core/pattern/FormatInfo; +HSPLch/qos/logback/core/pattern/FormatInfo;->()V +HSPLch/qos/logback/core/pattern/FormatInfo;->valueOf(Ljava/lang/String;)Lch/qos/logback/core/pattern/FormatInfo; +Lch/qos/logback/core/pattern/FormattingConverter; +HSPLch/qos/logback/core/pattern/FormattingConverter;->()V +HSPLch/qos/logback/core/pattern/FormattingConverter;->setFormattingInfo(Lch/qos/logback/core/pattern/FormatInfo;)V +Lch/qos/logback/core/pattern/IdentityCompositeConverter; +Lch/qos/logback/core/pattern/LiteralConverter; +HSPLch/qos/logback/core/pattern/LiteralConverter;->(Ljava/lang/String;)V +Lch/qos/logback/core/pattern/PatternLayoutBase; +HSPLch/qos/logback/core/pattern/PatternLayoutBase;->()V +HSPLch/qos/logback/core/pattern/PatternLayoutBase;->getEffectiveConverterMap()Ljava/util/Map; +HSPLch/qos/logback/core/pattern/PatternLayoutBase;->setOutputPatternAsHeader(Z)V +HSPLch/qos/logback/core/pattern/PatternLayoutBase;->setPattern(Ljava/lang/String;)V +HSPLch/qos/logback/core/pattern/PatternLayoutBase;->setPostCompileProcessor(Lch/qos/logback/core/pattern/PostCompileProcessor;)V +HSPLch/qos/logback/core/pattern/PatternLayoutBase;->start()V +Lch/qos/logback/core/pattern/PatternLayoutEncoderBase; +HSPLch/qos/logback/core/pattern/PatternLayoutEncoderBase;->()V +HSPLch/qos/logback/core/pattern/PatternLayoutEncoderBase;->getPattern()Ljava/lang/String; +HSPLch/qos/logback/core/pattern/PatternLayoutEncoderBase;->setPattern(Ljava/lang/String;)V +Lch/qos/logback/core/pattern/PostCompileProcessor; +Lch/qos/logback/core/pattern/ReplacingCompositeConverter; +Lch/qos/logback/core/pattern/parser/Compiler; +HSPLch/qos/logback/core/pattern/parser/Compiler;->(Lch/qos/logback/core/pattern/parser/Node;Ljava/util/Map;)V +HSPLch/qos/logback/core/pattern/parser/Compiler;->addToList(Lch/qos/logback/core/pattern/Converter;)V +HSPLch/qos/logback/core/pattern/parser/Compiler;->compile()Lch/qos/logback/core/pattern/Converter; +HSPLch/qos/logback/core/pattern/parser/Compiler;->createConverter(Lch/qos/logback/core/pattern/parser/SimpleKeywordNode;)Lch/qos/logback/core/pattern/DynamicConverter; +Lch/qos/logback/core/pattern/parser/FormattingNode; +HSPLch/qos/logback/core/pattern/parser/FormattingNode;->(ILjava/lang/Object;)V +HSPLch/qos/logback/core/pattern/parser/FormattingNode;->getFormatInfo()Lch/qos/logback/core/pattern/FormatInfo; +HSPLch/qos/logback/core/pattern/parser/FormattingNode;->setFormatInfo(Lch/qos/logback/core/pattern/FormatInfo;)V +Lch/qos/logback/core/pattern/parser/Node; +HSPLch/qos/logback/core/pattern/parser/Node;->(ILjava/lang/Object;)V +HSPLch/qos/logback/core/pattern/parser/Node;->getValue()Ljava/lang/Object; +HSPLch/qos/logback/core/pattern/parser/Node;->setNext(Lch/qos/logback/core/pattern/parser/Node;)V +Lch/qos/logback/core/pattern/parser/OptionTokenizer; +HSPLch/qos/logback/core/pattern/parser/OptionTokenizer;->(Lch/qos/logback/core/pattern/parser/TokenStream;)V +HSPLch/qos/logback/core/pattern/parser/OptionTokenizer;->(Lch/qos/logback/core/pattern/parser/TokenStream;Lch/qos/logback/core/pattern/util/IEscapeUtil;)V +HSPLch/qos/logback/core/pattern/parser/OptionTokenizer;->emitOptionToken(Ljava/util/List;Ljava/util/List;)V +HSPLch/qos/logback/core/pattern/parser/OptionTokenizer;->tokenize(CLjava/util/List;)V +Lch/qos/logback/core/pattern/parser/Parser; +HSPLch/qos/logback/core/pattern/parser/Parser;->()V +HSPLch/qos/logback/core/pattern/parser/Parser;->(Ljava/lang/String;)V +HSPLch/qos/logback/core/pattern/parser/Parser;->(Ljava/lang/String;Lch/qos/logback/core/pattern/util/IEscapeUtil;)V +HSPLch/qos/logback/core/pattern/parser/Parser;->C()Lch/qos/logback/core/pattern/parser/FormattingNode; +HSPLch/qos/logback/core/pattern/parser/Parser;->E()Lch/qos/logback/core/pattern/parser/Node; +HSPLch/qos/logback/core/pattern/parser/Parser;->Eopt()Lch/qos/logback/core/pattern/parser/Node; +HSPLch/qos/logback/core/pattern/parser/Parser;->SINGLE()Lch/qos/logback/core/pattern/parser/FormattingNode; +HSPLch/qos/logback/core/pattern/parser/Parser;->T()Lch/qos/logback/core/pattern/parser/Node; +HSPLch/qos/logback/core/pattern/parser/Parser;->advanceTokenPointer()V +HSPLch/qos/logback/core/pattern/parser/Parser;->compile(Lch/qos/logback/core/pattern/parser/Node;Ljava/util/Map;)Lch/qos/logback/core/pattern/Converter; +HSPLch/qos/logback/core/pattern/parser/Parser;->expectNotNull(Lch/qos/logback/core/pattern/parser/Token;Ljava/lang/String;)V +HSPLch/qos/logback/core/pattern/parser/Parser;->getCurentToken()Lch/qos/logback/core/pattern/parser/Token; +HSPLch/qos/logback/core/pattern/parser/Parser;->getNextToken()Lch/qos/logback/core/pattern/parser/Token; +HSPLch/qos/logback/core/pattern/parser/Parser;->parse()Lch/qos/logback/core/pattern/parser/Node; +Lch/qos/logback/core/pattern/parser/SimpleKeywordNode; +HSPLch/qos/logback/core/pattern/parser/SimpleKeywordNode;->(Ljava/lang/Object;)V +HSPLch/qos/logback/core/pattern/parser/SimpleKeywordNode;->getOptions()Ljava/util/List; +HSPLch/qos/logback/core/pattern/parser/SimpleKeywordNode;->setOptions(Ljava/util/List;)V +Lch/qos/logback/core/pattern/parser/Token; +HSPLch/qos/logback/core/pattern/parser/Token;->()V +HSPLch/qos/logback/core/pattern/parser/Token;->(I)V +HSPLch/qos/logback/core/pattern/parser/Token;->(ILjava/lang/String;)V +HSPLch/qos/logback/core/pattern/parser/Token;->(ILjava/lang/String;Ljava/util/List;)V +HSPLch/qos/logback/core/pattern/parser/Token;->(ILjava/util/List;)V +HSPLch/qos/logback/core/pattern/parser/Token;->getOptionsList()Ljava/util/List; +HSPLch/qos/logback/core/pattern/parser/Token;->getType()I +HSPLch/qos/logback/core/pattern/parser/Token;->getValue()Ljava/lang/String; +Lch/qos/logback/core/pattern/parser/TokenStream; +HSPLch/qos/logback/core/pattern/parser/TokenStream;->(Ljava/lang/String;Lch/qos/logback/core/pattern/util/IEscapeUtil;)V +HSPLch/qos/logback/core/pattern/parser/TokenStream;->addValuedToken(ILjava/lang/StringBuffer;Ljava/util/List;)V +HSPLch/qos/logback/core/pattern/parser/TokenStream;->handleFormatModifierState(CLjava/util/List;Ljava/lang/StringBuffer;)V +HSPLch/qos/logback/core/pattern/parser/TokenStream;->handleKeywordState(CLjava/util/List;Ljava/lang/StringBuffer;)V +HSPLch/qos/logback/core/pattern/parser/TokenStream;->handleLiteralState(CLjava/util/List;Ljava/lang/StringBuffer;)V +HSPLch/qos/logback/core/pattern/parser/TokenStream;->processOption(CLjava/util/List;Ljava/lang/StringBuffer;)V +HSPLch/qos/logback/core/pattern/parser/TokenStream;->tokenize()Ljava/util/List; +Lch/qos/logback/core/pattern/parser/TokenStream$1; +HSPLch/qos/logback/core/pattern/parser/TokenStream$1;->()V +Lch/qos/logback/core/pattern/parser/TokenStream$TokenizerState; +HSPLch/qos/logback/core/pattern/parser/TokenStream$TokenizerState;->()V +HSPLch/qos/logback/core/pattern/parser/TokenStream$TokenizerState;->(Ljava/lang/String;I)V +HSPLch/qos/logback/core/pattern/parser/TokenStream$TokenizerState;->values()[Lch/qos/logback/core/pattern/parser/TokenStream$TokenizerState; +Lch/qos/logback/core/pattern/util/AsIsEscapeUtil; +HSPLch/qos/logback/core/pattern/util/AsIsEscapeUtil;->()V +Lch/qos/logback/core/pattern/util/IEscapeUtil; +Lch/qos/logback/core/pattern/util/RegularEscapeUtil; +HSPLch/qos/logback/core/pattern/util/RegularEscapeUtil;->()V +Lch/qos/logback/core/pattern/util/RestrictedEscapeUtil; +HSPLch/qos/logback/core/pattern/util/RestrictedEscapeUtil;->()V +Lch/qos/logback/core/spi/AppenderAttachable; +Lch/qos/logback/core/spi/AppenderAttachableImpl; +HSPLch/qos/logback/core/spi/AppenderAttachableImpl;->()V +HSPLch/qos/logback/core/spi/AppenderAttachableImpl;->()V +HSPLch/qos/logback/core/spi/AppenderAttachableImpl;->addAppender(Lch/qos/logback/core/Appender;)V +Lch/qos/logback/core/spi/ContextAware; +Lch/qos/logback/core/spi/ContextAwareBase; +HSPLch/qos/logback/core/spi/ContextAwareBase;->()V +HSPLch/qos/logback/core/spi/ContextAwareBase;->(Lch/qos/logback/core/spi/ContextAware;)V +HSPLch/qos/logback/core/spi/ContextAwareBase;->addInfo(Ljava/lang/String;)V +HSPLch/qos/logback/core/spi/ContextAwareBase;->addStatus(Lch/qos/logback/core/status/Status;)V +HSPLch/qos/logback/core/spi/ContextAwareBase;->getContext()Lch/qos/logback/core/Context; +HSPLch/qos/logback/core/spi/ContextAwareBase;->getDeclaredOrigin()Ljava/lang/Object; +HSPLch/qos/logback/core/spi/ContextAwareBase;->setContext(Lch/qos/logback/core/Context;)V +Lch/qos/logback/core/spi/ContextAwareImpl; +HSPLch/qos/logback/core/spi/ContextAwareImpl;->(Lch/qos/logback/core/Context;Ljava/lang/Object;)V +Lch/qos/logback/core/spi/FilterAttachable; +Lch/qos/logback/core/spi/FilterAttachableImpl; +HSPLch/qos/logback/core/spi/FilterAttachableImpl;->()V +Lch/qos/logback/core/spi/FilterReply; +Lch/qos/logback/core/spi/LifeCycle; +Lch/qos/logback/core/spi/LogbackLock; +HSPLch/qos/logback/core/spi/LogbackLock;->()V +Lch/qos/logback/core/spi/PropertyContainer; +Lch/qos/logback/core/spi/ScanException; +Lch/qos/logback/core/status/InfoStatus; +HSPLch/qos/logback/core/status/InfoStatus;->(Ljava/lang/String;Ljava/lang/Object;)V +Lch/qos/logback/core/status/Status; +Lch/qos/logback/core/status/StatusBase; +HSPLch/qos/logback/core/status/StatusBase;->()V +HSPLch/qos/logback/core/status/StatusBase;->(ILjava/lang/String;Ljava/lang/Object;)V +HSPLch/qos/logback/core/status/StatusBase;->(ILjava/lang/String;Ljava/lang/Object;Ljava/lang/Throwable;)V +HSPLch/qos/logback/core/status/StatusBase;->getDate()Ljava/lang/Long; +HSPLch/qos/logback/core/status/StatusBase;->getLevel()I +Lch/qos/logback/core/status/StatusListener; +Lch/qos/logback/core/status/StatusManager; +Lch/qos/logback/core/status/StatusUtil; +HSPLch/qos/logback/core/status/StatusUtil;->(Lch/qos/logback/core/Context;)V +HSPLch/qos/logback/core/status/StatusUtil;->containsMatch(JILjava/lang/String;)Z +HSPLch/qos/logback/core/status/StatusUtil;->contextHasStatusListener(Lch/qos/logback/core/Context;)Z +HSPLch/qos/logback/core/status/StatusUtil;->filterStatusListByTimeThreshold(Ljava/util/List;J)Ljava/util/List; +HSPLch/qos/logback/core/status/StatusUtil;->getHighestLevel(J)I +HSPLch/qos/logback/core/status/StatusUtil;->hasXMLParsingErrors(J)Z +HSPLch/qos/logback/core/status/StatusUtil;->noXMLParsingErrorsOccurred(J)Z +Lch/qos/logback/core/subst/Node; +HSPLch/qos/logback/core/subst/Node;->(Lch/qos/logback/core/subst/Node$Type;Ljava/lang/Object;)V +HSPLch/qos/logback/core/subst/Node;->append(Lch/qos/logback/core/subst/Node;)V +Lch/qos/logback/core/subst/Node$Type; +HSPLch/qos/logback/core/subst/Node$Type;->()V +HSPLch/qos/logback/core/subst/Node$Type;->(Ljava/lang/String;I)V +HSPLch/qos/logback/core/subst/Node$Type;->values()[Lch/qos/logback/core/subst/Node$Type; +Lch/qos/logback/core/subst/NodeToStringTransformer; +HSPLch/qos/logback/core/subst/NodeToStringTransformer;->(Lch/qos/logback/core/subst/Node;Lch/qos/logback/core/spi/PropertyContainer;Lch/qos/logback/core/spi/PropertyContainer;)V +HSPLch/qos/logback/core/subst/NodeToStringTransformer;->compileNode(Lch/qos/logback/core/subst/Node;Ljava/lang/StringBuilder;Ljava/util/Stack;)V +HSPLch/qos/logback/core/subst/NodeToStringTransformer;->handleLiteral(Lch/qos/logback/core/subst/Node;Ljava/lang/StringBuilder;)V +HSPLch/qos/logback/core/subst/NodeToStringTransformer;->substituteVariable(Ljava/lang/String;Lch/qos/logback/core/spi/PropertyContainer;Lch/qos/logback/core/spi/PropertyContainer;)Ljava/lang/String; +HSPLch/qos/logback/core/subst/NodeToStringTransformer;->tokenizeAndParseString(Ljava/lang/String;)Lch/qos/logback/core/subst/Node; +HSPLch/qos/logback/core/subst/NodeToStringTransformer;->transform()Ljava/lang/String; +Lch/qos/logback/core/subst/NodeToStringTransformer$1; +HSPLch/qos/logback/core/subst/NodeToStringTransformer$1;->()V +Lch/qos/logback/core/subst/Parser; +HSPLch/qos/logback/core/subst/Parser;->(Ljava/util/List;)V +HSPLch/qos/logback/core/subst/Parser;->C()Lch/qos/logback/core/subst/Node; +HSPLch/qos/logback/core/subst/Parser;->E()Lch/qos/logback/core/subst/Node; +HSPLch/qos/logback/core/subst/Parser;->Eopt()Lch/qos/logback/core/subst/Node; +HSPLch/qos/logback/core/subst/Parser;->T()Lch/qos/logback/core/subst/Node; +HSPLch/qos/logback/core/subst/Parser;->advanceTokenPointer()V +HSPLch/qos/logback/core/subst/Parser;->expectCurlyRight(Lch/qos/logback/core/subst/Token;)V +HSPLch/qos/logback/core/subst/Parser;->expectNotNull(Lch/qos/logback/core/subst/Token;Ljava/lang/String;)V +HSPLch/qos/logback/core/subst/Parser;->isDefaultToken(Lch/qos/logback/core/subst/Token;)Z +HSPLch/qos/logback/core/subst/Parser;->makeNewLiteralNode(Ljava/lang/String;)Lch/qos/logback/core/subst/Node; +HSPLch/qos/logback/core/subst/Parser;->parse()Lch/qos/logback/core/subst/Node; +HSPLch/qos/logback/core/subst/Parser;->peekAtCurentToken()Lch/qos/logback/core/subst/Token; +Lch/qos/logback/core/subst/Parser$1; +HSPLch/qos/logback/core/subst/Parser$1;->()V +Lch/qos/logback/core/subst/Token; +HSPLch/qos/logback/core/subst/Token;->()V +HSPLch/qos/logback/core/subst/Token;->(Lch/qos/logback/core/subst/Token$Type;Ljava/lang/String;)V +Lch/qos/logback/core/subst/Token$Type; +HSPLch/qos/logback/core/subst/Token$Type;->()V +HSPLch/qos/logback/core/subst/Token$Type;->(Ljava/lang/String;I)V +HSPLch/qos/logback/core/subst/Token$Type;->values()[Lch/qos/logback/core/subst/Token$Type; +Lch/qos/logback/core/subst/Tokenizer; +HSPLch/qos/logback/core/subst/Tokenizer;->(Ljava/lang/String;)V +HSPLch/qos/logback/core/subst/Tokenizer;->addLiteralToken(Ljava/util/List;Ljava/lang/StringBuilder;)V +HSPLch/qos/logback/core/subst/Tokenizer;->handleLiteralState(CLjava/util/List;Ljava/lang/StringBuilder;)V +HSPLch/qos/logback/core/subst/Tokenizer;->tokenize()Ljava/util/List; +Lch/qos/logback/core/subst/Tokenizer$1; +HSPLch/qos/logback/core/subst/Tokenizer$1;->()V +Lch/qos/logback/core/subst/Tokenizer$TokenizerState; +HSPLch/qos/logback/core/subst/Tokenizer$TokenizerState;->()V +HSPLch/qos/logback/core/subst/Tokenizer$TokenizerState;->(Ljava/lang/String;I)V +HSPLch/qos/logback/core/subst/Tokenizer$TokenizerState;->values()[Lch/qos/logback/core/subst/Tokenizer$TokenizerState; +Lch/qos/logback/core/util/AggregationType; +HSPLch/qos/logback/core/util/AggregationType;->()V +HSPLch/qos/logback/core/util/AggregationType;->(Ljava/lang/String;I)V +HSPLch/qos/logback/core/util/AggregationType;->values()[Lch/qos/logback/core/util/AggregationType; +Lch/qos/logback/core/util/COWArrayList; +HSPLch/qos/logback/core/util/COWArrayList;->([Ljava/lang/Object;)V +HSPLch/qos/logback/core/util/COWArrayList;->addIfAbsent(Ljava/lang/Object;)V +HSPLch/qos/logback/core/util/COWArrayList;->markAsStale()V +Lch/qos/logback/core/util/CachingDateFormatter; +HSPLch/qos/logback/core/util/CachingDateFormatter;->(Ljava/lang/String;)V +HSPLch/qos/logback/core/util/CachingDateFormatter;->(Ljava/lang/String;Ljava/util/Locale;)V +Lch/qos/logback/core/util/CloseUtil; +HSPLch/qos/logback/core/util/CloseUtil;->closeQuietly(Ljava/io/Closeable;)V +Lch/qos/logback/core/util/ContextUtil; +HSPLch/qos/logback/core/util/ContextUtil;->(Lch/qos/logback/core/Context;)V +HSPLch/qos/logback/core/util/ContextUtil;->addHostNameAsProperty()V +Lch/qos/logback/core/util/Duration; +HSPLch/qos/logback/core/util/Duration;->()V +HSPLch/qos/logback/core/util/Duration;->(J)V +HSPLch/qos/logback/core/util/Duration;->buildByMinutes(D)Lch/qos/logback/core/util/Duration; +Lch/qos/logback/core/util/EnvUtil; +HSPLch/qos/logback/core/util/EnvUtil;->()V +HSPLch/qos/logback/core/util/EnvUtil;->isJDK5()Z +HSPLch/qos/logback/core/util/EnvUtil;->isJDK_N_OrHigher(I)Z +Lch/qos/logback/core/util/IncompatibleClassException; +Lch/qos/logback/core/util/Loader; +HSPLch/qos/logback/core/util/Loader;->()V +HSPLch/qos/logback/core/util/Loader;->getClassLoaderOfClass(Ljava/lang/Class;)Ljava/lang/ClassLoader; +HSPLch/qos/logback/core/util/Loader;->getClassLoaderOfObject(Ljava/lang/Object;)Ljava/lang/ClassLoader; +Lch/qos/logback/core/util/Loader$1; +HSPLch/qos/logback/core/util/Loader$1;->()V +HSPLch/qos/logback/core/util/Loader$1;->run()Ljava/lang/Boolean; +HSPLch/qos/logback/core/util/Loader$1;->run()Ljava/lang/Object; +Lch/qos/logback/core/util/OptionHelper; +HSPLch/qos/logback/core/util/OptionHelper;->getAndroidSystemProperty(Ljava/lang/String;)Ljava/lang/String; +HSPLch/qos/logback/core/util/OptionHelper;->getSystemProperty(Ljava/lang/String;)Ljava/lang/String; +HSPLch/qos/logback/core/util/OptionHelper;->getSystemProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; +HSPLch/qos/logback/core/util/OptionHelper;->instantiateByClassName(Ljava/lang/String;Ljava/lang/Class;Lch/qos/logback/core/Context;)Ljava/lang/Object; +HSPLch/qos/logback/core/util/OptionHelper;->instantiateByClassName(Ljava/lang/String;Ljava/lang/Class;Ljava/lang/ClassLoader;)Ljava/lang/Object; +HSPLch/qos/logback/core/util/OptionHelper;->instantiateByClassNameAndParameter(Ljava/lang/String;Ljava/lang/Class;Ljava/lang/ClassLoader;Ljava/lang/Class;Ljava/lang/Object;)Ljava/lang/Object; +HSPLch/qos/logback/core/util/OptionHelper;->isEmpty(Ljava/lang/String;)Z +HSPLch/qos/logback/core/util/OptionHelper;->substVars(Ljava/lang/String;Lch/qos/logback/core/spi/PropertyContainer;Lch/qos/logback/core/spi/PropertyContainer;)Ljava/lang/String; +HSPLch/qos/logback/core/util/OptionHelper;->toBoolean(Ljava/lang/String;Z)Z +Lch/qos/logback/core/util/PropertySetterException; +Lch/qos/logback/core/util/StatusListenerConfigHelper; +HSPLch/qos/logback/core/util/StatusListenerConfigHelper;->installIfAsked(Lch/qos/logback/core/Context;)V +Lch/qos/logback/core/util/StatusPrinter; +HSPLch/qos/logback/core/util/StatusPrinter;->()V +HSPLch/qos/logback/core/util/StatusPrinter;->printInCaseOfErrorsOrWarnings(Lch/qos/logback/core/Context;)V +HSPLch/qos/logback/core/util/StatusPrinter;->printInCaseOfErrorsOrWarnings(Lch/qos/logback/core/Context;J)V +Lcom/artemchep/bindin/BindInKt; +HSPLcom/artemchep/bindin/BindInKt;->$r8$lambda$7FZYiAZKPPHiKth_BqoIeBFpcSE(Landroidx/lifecycle/Lifecycle$State;Lkotlin/jvm/internal/Ref$BooleanRef;Lkotlin/jvm/internal/Ref$ObjectRef;Landroidx/lifecycle/LifecycleOwner;Lkotlin/jvm/functions/Function1;Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V +HSPLcom/artemchep/bindin/BindInKt;->()V +HSPLcom/artemchep/bindin/BindInKt;->bindBlock$default(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$State;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lkotlin/jvm/functions/Function0; +HSPLcom/artemchep/bindin/BindInKt;->bindBlock$lambda-2(Landroidx/lifecycle/Lifecycle$State;Lkotlin/jvm/internal/Ref$BooleanRef;Lkotlin/jvm/internal/Ref$ObjectRef;Landroidx/lifecycle/LifecycleOwner;Lkotlin/jvm/functions/Function1;Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V +HSPLcom/artemchep/bindin/BindInKt;->bindBlock(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$State;Lkotlin/jvm/functions/Function1;)Lkotlin/jvm/functions/Function0; +Lcom/artemchep/bindin/BindInKt$$ExternalSyntheticLambda0; +HSPLcom/artemchep/bindin/BindInKt$$ExternalSyntheticLambda0;->(Landroidx/lifecycle/Lifecycle$State;Lkotlin/jvm/internal/Ref$BooleanRef;Lkotlin/jvm/internal/Ref$ObjectRef;Landroidx/lifecycle/LifecycleOwner;Lkotlin/jvm/functions/Function1;)V +HSPLcom/artemchep/bindin/BindInKt$$ExternalSyntheticLambda0;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V +Lcom/artemchep/bindin/BindInKt$bindBlock$observer$1$1; +HSPLcom/artemchep/bindin/BindInKt$bindBlock$observer$1$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/bindin/BindInKt$bindBlock$observer$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/bindin/BindInKt$bindBlock$observer$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/bindin/BindInKt$bindBlock$registration$1; +HSPLcom/artemchep/bindin/BindInKt$bindBlock$registration$1;->(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/LifecycleEventObserver;Lkotlin/jvm/internal/Ref$ObjectRef;)V +Lcom/artemchep/keyguard/AppMode; +Lcom/artemchep/keyguard/AppMode$HasType; +Lcom/artemchep/keyguard/AppMode$Main; +HSPLcom/artemchep/keyguard/AppMode$Main;->()V +HSPLcom/artemchep/keyguard/AppMode$Main;->()V +Lcom/artemchep/keyguard/AppMode$Pick; +Lcom/artemchep/keyguard/AppMode$PickPasskey; +Lcom/artemchep/keyguard/AppMode$Save; +Lcom/artemchep/keyguard/AppMode$SavePasskey; +Lcom/artemchep/keyguard/AutofillActArgsKt; +HSPLcom/artemchep/keyguard/AutofillActArgsKt;->getAutofillTarget(Lcom/artemchep/keyguard/AppMode;)Lcom/artemchep/keyguard/common/model/AutofillTarget; +Lcom/artemchep/keyguard/LocalAppModeKt; +HSPLcom/artemchep/keyguard/LocalAppModeKt;->()V +HSPLcom/artemchep/keyguard/LocalAppModeKt;->getLocalAppMode()Landroidx/compose/runtime/ProvidableCompositionLocal; +Lcom/artemchep/keyguard/LocalAppModeKt$LocalAppMode$1; +HSPLcom/artemchep/keyguard/LocalAppModeKt$LocalAppMode$1;->()V +HSPLcom/artemchep/keyguard/LocalAppModeKt$LocalAppMode$1;->()V +Lcom/artemchep/keyguard/Main; +HSPLcom/artemchep/keyguard/Main;->()V +HSPLcom/artemchep/keyguard/Main;->()V +HSPLcom/artemchep/keyguard/Main;->access$onCreate$lambda$1(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetVaultSession; +HSPLcom/artemchep/keyguard/Main;->access$onCreate$lambda$11(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetVaultLockAfterScreenOff; +HSPLcom/artemchep/keyguard/Main;->access$onCreate$lambda$12(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/service/power/PowerService; +HSPLcom/artemchep/keyguard/Main;->access$onCreate$lambda$3(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetVaultPersist; +HSPLcom/artemchep/keyguard/Main;->access$onCreate$lambda$4(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/service/vault/KeyReadWriteRepository; +HSPLcom/artemchep/keyguard/Main;->access$onCreate$lambda$6(Lkotlin/Lazy;)Lcom/artemchep/keyguard/android/downloader/journal/DownloadRepository; +HSPLcom/artemchep/keyguard/Main;->access$onCreate$lambda$7(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/CleanUpAttachment; +HSPLcom/artemchep/keyguard/Main;->access$onCreate$lambda$8(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/AppWorker; +HSPLcom/artemchep/keyguard/Main;->attachBaseContext(Landroid/content/Context;)V +HSPLcom/artemchep/keyguard/Main;->getDi()Lorg/kodein/di/DI; +HSPLcom/artemchep/keyguard/Main;->getDi()Lorg/kodein/di/LazyDI; +HSPLcom/artemchep/keyguard/Main;->getDiContext()Lorg/kodein/di/DIContext; +HSPLcom/artemchep/keyguard/Main;->getDiTrigger()Lorg/kodein/di/DITrigger; +HSPLcom/artemchep/keyguard/Main;->onCreate$lambda$1(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetVaultSession; +HSPLcom/artemchep/keyguard/Main;->onCreate$lambda$11(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetVaultLockAfterScreenOff; +HSPLcom/artemchep/keyguard/Main;->onCreate$lambda$12(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/service/power/PowerService; +HSPLcom/artemchep/keyguard/Main;->onCreate$lambda$3(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetVaultPersist; +HSPLcom/artemchep/keyguard/Main;->onCreate$lambda$4(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/service/vault/KeyReadWriteRepository; +HSPLcom/artemchep/keyguard/Main;->onCreate$lambda$6(Lkotlin/Lazy;)Lcom/artemchep/keyguard/android/downloader/journal/DownloadRepository; +HSPLcom/artemchep/keyguard/Main;->onCreate$lambda$7(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/CleanUpAttachment; +HSPLcom/artemchep/keyguard/Main;->onCreate$lambda$8(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/AppWorker; +HSPLcom/artemchep/keyguard/Main;->onCreate()V +Lcom/artemchep/keyguard/Main$di$2; +HSPLcom/artemchep/keyguard/Main$di$2;->(Lcom/artemchep/keyguard/Main;)V +HSPLcom/artemchep/keyguard/Main$di$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/Main$di$2;->invoke(Lorg/kodein/di/DI$MainBuilder;)V +Lcom/artemchep/keyguard/Main$di$2$1; +HSPLcom/artemchep/keyguard/Main$di$2$1;->(Lcom/artemchep/keyguard/Main;)V +HSPLcom/artemchep/keyguard/Main$di$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/Main$di$2$1;->invoke(Lorg/kodein/di/bindings/NoArgBindingDI;)Lcom/artemchep/keyguard/billing/BillingManagerImpl; +Lcom/artemchep/keyguard/Main$di$2$invoke$$inlined$bind$default$1; +HSPLcom/artemchep/keyguard/Main$di$2$invoke$$inlined$bind$default$1;->()V +Lcom/artemchep/keyguard/Main$di$2$invoke$$inlined$singleton$default$1; +HSPLcom/artemchep/keyguard/Main$di$2$invoke$$inlined$singleton$default$1;->()V +Lcom/artemchep/keyguard/Main$onCreate$$inlined$instance$1; +HSPLcom/artemchep/keyguard/Main$onCreate$$inlined$instance$1;->()V +Lcom/artemchep/keyguard/Main$onCreate$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/Main$onCreate$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/Main$onCreate$$inlined$instance$default$10; +HSPLcom/artemchep/keyguard/Main$onCreate$$inlined$instance$default$10;->()V +Lcom/artemchep/keyguard/Main$onCreate$$inlined$instance$default$11; +HSPLcom/artemchep/keyguard/Main$onCreate$$inlined$instance$default$11;->()V +Lcom/artemchep/keyguard/Main$onCreate$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/Main$onCreate$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/Main$onCreate$$inlined$instance$default$3; +HSPLcom/artemchep/keyguard/Main$onCreate$$inlined$instance$default$3;->()V +Lcom/artemchep/keyguard/Main$onCreate$$inlined$instance$default$4; +HSPLcom/artemchep/keyguard/Main$onCreate$$inlined$instance$default$4;->()V +Lcom/artemchep/keyguard/Main$onCreate$$inlined$instance$default$5; +HSPLcom/artemchep/keyguard/Main$onCreate$$inlined$instance$default$5;->()V +Lcom/artemchep/keyguard/Main$onCreate$$inlined$instance$default$6; +HSPLcom/artemchep/keyguard/Main$onCreate$$inlined$instance$default$6;->()V +Lcom/artemchep/keyguard/Main$onCreate$$inlined$instance$default$7; +HSPLcom/artemchep/keyguard/Main$onCreate$$inlined$instance$default$7;->()V +Lcom/artemchep/keyguard/Main$onCreate$$inlined$instance$default$8; +HSPLcom/artemchep/keyguard/Main$onCreate$$inlined$instance$default$8;->()V +Lcom/artemchep/keyguard/Main$onCreate$$inlined$instance$default$9; +HSPLcom/artemchep/keyguard/Main$onCreate$$inlined$instance$default$9;->()V +Lcom/artemchep/keyguard/Main$onCreate$$inlined$map$1; +HSPLcom/artemchep/keyguard/Main$onCreate$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/Main$onCreate$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/Main$onCreate$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/Main$onCreate$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/Main$onCreate$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/Main$onCreate$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/Main$onCreate$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/Main$onCreate$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/Main$onCreate$1; +HSPLcom/artemchep/keyguard/Main$onCreate$1;->(Lkotlinx/coroutines/flow/Flow;Lkotlin/Lazy;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/Main$onCreate$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/Main$onCreate$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/Main$onCreate$2; +HSPLcom/artemchep/keyguard/Main$onCreate$2;->(Lkotlin/Lazy;Lkotlin/Lazy;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/Main$onCreate$2;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/Main$onCreate$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/Main$onCreate$2;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/Main$onCreate$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/Main$onCreate$2$1; +HSPLcom/artemchep/keyguard/Main$onCreate$2$1;->(Lkotlin/Lazy;Lkotlin/Lazy;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/Main$onCreate$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/Main$onCreate$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/Main$onCreate$2$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/Main$onCreate$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/Main$onCreate$3; +HSPLcom/artemchep/keyguard/Main$onCreate$3;->(Lkotlin/Lazy;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/Main$onCreate$3;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/Main$onCreate$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/Main$onCreate$3;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/Main$onCreate$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/Main$onCreate$3$2; +HSPLcom/artemchep/keyguard/Main$onCreate$3$2;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/Main$onCreate$3$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/Main$onCreate$3$2;->invoke(Lcom/artemchep/keyguard/common/usecase/GetAccounts;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/Main$onCreate$3$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/Main$onCreate$3$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/Main$onCreate$3$2$1; +HSPLcom/artemchep/keyguard/Main$onCreate$3$2$1;->(Lcom/artemchep/keyguard/common/usecase/GetAccounts;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/Main$onCreate$3$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/Main$onCreate$3$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/Main$onCreate$3$2$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/Main$onCreate$3$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/Main$onCreate$3$invokeSuspend$$inlined$map$1; +HSPLcom/artemchep/keyguard/Main$onCreate$3$invokeSuspend$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/Main$onCreate$3$invokeSuspend$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/Main$onCreate$3$invokeSuspend$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/Main$onCreate$3$invokeSuspend$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/Main$onCreate$3$invokeSuspend$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/Main$onCreate$3$invokeSuspend$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/Main$onCreate$3$invokeSuspend$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/Main$onCreate$3$invokeSuspend$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/Main$onCreate$3$invokeSuspend$lambda$0$$inlined$instance$default$1; +PLcom/artemchep/keyguard/Main$onCreate$3$invokeSuspend$lambda$0$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/Main$onCreate$4; +HSPLcom/artemchep/keyguard/Main$onCreate$4;->(Lkotlin/Lazy;Lkotlin/Lazy;Lkotlin/Lazy;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/Main$onCreate$4;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/Main$onCreate$4;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/Main$onCreate$4;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/Main$onCreate$4;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/Main$onCreate$4$1; +HSPLcom/artemchep/keyguard/Main$onCreate$4$1;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/Main$onCreate$4$1;->invoke(Lcom/artemchep/keyguard/common/model/MasterSession;ZLkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/Main$onCreate$4$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/Main$onCreate$4$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/Main$onCreate$4$2; +HSPLcom/artemchep/keyguard/Main$onCreate$4$2;->(Lkotlin/Lazy;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/Main$onCreate$4$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/Main$onCreate$4$2;->invoke(Lcom/artemchep/keyguard/common/model/MasterKey;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/Main$onCreate$4$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/Main$onCreate$4$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/Main$onCreate$5; +HSPLcom/artemchep/keyguard/Main$onCreate$5;->(Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlin/Lazy;Lcom/artemchep/keyguard/Main;Lkotlin/Lazy;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/Main$onCreate$5;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/Main$onCreate$5;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/Main$onCreate$5;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/Main$onCreate$5;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/Main$onCreate$6; +HSPLcom/artemchep/keyguard/Main$onCreate$6;->(Lkotlin/Lazy;Lkotlin/Lazy;Lkotlin/Lazy;Lkotlin/Lazy;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/Main$onCreate$6;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/Main$onCreate$6;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/Main$onCreate$6$6; +HSPLcom/artemchep/keyguard/Main$onCreate$6$6;->(Lkotlinx/coroutines/CoroutineScope;Lkotlin/Lazy;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$filter$1; +HSPLcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$filter$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$filter$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$filter$1$2; +HSPLcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$filter$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +Lcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$flatMapLatest$1; +HSPLcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$flatMapLatest$1;->(Lkotlin/coroutines/Continuation;Lkotlin/Lazy;)V +HSPLcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$flatMapLatest$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$flatMapLatest$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$flatMapLatest$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$flatMapLatest$2; +HSPLcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$flatMapLatest$2;->(Lkotlin/coroutines/Continuation;Lkotlinx/coroutines/flow/SharedFlow;)V +HSPLcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$flatMapLatest$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$flatMapLatest$2;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$flatMapLatest$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$map$1; +HSPLcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$map$2; +HSPLcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$map$2;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$map$2;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$map$2$2; +HSPLcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$map$2$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$map$2$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$map$2$2$1; +HSPLcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$map$2$2$1;->(Lcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$map$2$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$map$3; +HSPLcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$map$3;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$map$3;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$map$3$2; +HSPLcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$map$3$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$map$3$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$map$3$2$1; +HSPLcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$map$3$2$1;->(Lcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$map$3$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$lambda$6$$inlined$mapNotNull$1; +PLcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$lambda$6$$inlined$mapNotNull$1;->(Lkotlinx/coroutines/flow/Flow;Lkotlinx/datetime/Instant;)V +HSPLcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$lambda$6$$inlined$mapNotNull$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$lambda$6$$inlined$mapNotNull$1$2; +HSPLcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$lambda$6$$inlined$mapNotNull$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lkotlinx/datetime/Instant;)V +HSPLcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$lambda$6$$inlined$mapNotNull$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$lambda$6$$inlined$mapNotNull$1$2$1; +HSPLcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$lambda$6$$inlined$mapNotNull$1$2$1;->(Lcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$lambda$6$$inlined$mapNotNull$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/android/BaseActivity; +HSPLcom/artemchep/keyguard/android/BaseActivity;->()V +HSPLcom/artemchep/keyguard/android/BaseActivity;->()V +HSPLcom/artemchep/keyguard/android/BaseActivity;->Navigation(Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/android/BaseActivity;->access$Navigation(Lcom/artemchep/keyguard/android/BaseActivity;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/android/BaseActivity;->access$setLastUseExternalBrowser$p(Lcom/artemchep/keyguard/android/BaseActivity;Z)V +HSPLcom/artemchep/keyguard/android/BaseActivity;->getDi()Lorg/kodein/di/DI; +HSPLcom/artemchep/keyguard/android/BaseActivity;->getDiContext()Lorg/kodein/di/DIContext; +HSPLcom/artemchep/keyguard/android/BaseActivity;->getDiTrigger()Lorg/kodein/di/DITrigger; +HSPLcom/artemchep/keyguard/android/BaseActivity;->onCreate$lambda$0(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetAllowScreenshots; +HSPLcom/artemchep/keyguard/android/BaseActivity;->onCreate$lambda$1(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetUseExternalBrowser; +HSPLcom/artemchep/keyguard/android/BaseActivity;->onCreate(Landroid/os/Bundle;)V +Lcom/artemchep/keyguard/android/BaseActivity$Navigation$1; +HSPLcom/artemchep/keyguard/android/BaseActivity$Navigation$1;->()V +HSPLcom/artemchep/keyguard/android/BaseActivity$Navigation$1;->(Lcom/artemchep/keyguard/android/BaseActivity;Lkotlin/jvm/functions/Function2;)V +HSPLcom/artemchep/keyguard/android/BaseActivity$Navigation$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/android/BaseActivity$Navigation$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/android/BaseActivity$Navigation$1$1; +HSPLcom/artemchep/keyguard/android/BaseActivity$Navigation$1$1;->(Lcom/artemchep/keyguard/android/BaseActivity;Lkotlin/Lazy;)V +Lcom/artemchep/keyguard/android/BaseActivity$Navigation$1$2; +HSPLcom/artemchep/keyguard/android/BaseActivity$Navigation$1$2;->(Lkotlin/jvm/functions/Function2;)V +HSPLcom/artemchep/keyguard/android/BaseActivity$Navigation$1$2;->invoke(Lcom/artemchep/keyguard/feature/navigation/NavigationController;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/android/BaseActivity$Navigation$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/android/BaseActivity$Navigation$1$2$1; +HSPLcom/artemchep/keyguard/android/BaseActivity$Navigation$1$2$1;->(Lcom/artemchep/keyguard/feature/navigation/BackHandler;Lcom/artemchep/keyguard/feature/navigation/NavigationController;)V +HSPLcom/artemchep/keyguard/android/BaseActivity$Navigation$1$2$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult; +HSPLcom/artemchep/keyguard/android/BaseActivity$Navigation$1$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/android/BaseActivity$Navigation$1$2$1$invoke$$inlined$onDispose$1; +HSPLcom/artemchep/keyguard/android/BaseActivity$Navigation$1$2$1$invoke$$inlined$onDispose$1;->(Lkotlin/jvm/functions/Function0;)V +Lcom/artemchep/keyguard/android/BaseActivity$Navigation$1$invoke$$inlined$rememberInstance$1; +HSPLcom/artemchep/keyguard/android/BaseActivity$Navigation$1$invoke$$inlined$rememberInstance$1;->()V +Lcom/artemchep/keyguard/android/BaseActivity$onCreate$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/android/BaseActivity$onCreate$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/android/BaseActivity$onCreate$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/android/BaseActivity$onCreate$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/android/BaseActivity$onCreate$1; +HSPLcom/artemchep/keyguard/android/BaseActivity$onCreate$1;->(Lcom/artemchep/keyguard/android/BaseActivity;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/android/BaseActivity$onCreate$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/android/BaseActivity$onCreate$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/BaseActivity$onCreate$1;->invoke(ZLkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/BaseActivity$onCreate$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/android/BaseActivity$onCreate$2; +HSPLcom/artemchep/keyguard/android/BaseActivity$onCreate$2;->(Lcom/artemchep/keyguard/android/BaseActivity;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/android/BaseActivity$onCreate$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/android/BaseActivity$onCreate$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/BaseActivity$onCreate$2;->invoke(ZLkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/BaseActivity$onCreate$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/android/BaseActivity$onCreate$3; +HSPLcom/artemchep/keyguard/android/BaseActivity$onCreate$3;->(Lcom/artemchep/keyguard/android/BaseActivity;)V +HSPLcom/artemchep/keyguard/android/BaseActivity$onCreate$3;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/android/BaseActivity$onCreate$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/android/BaseActivity$onCreate$3$1; +HSPLcom/artemchep/keyguard/android/BaseActivity$onCreate$3$1;->(Lcom/artemchep/keyguard/android/BaseActivity;)V +HSPLcom/artemchep/keyguard/android/BaseActivity$onCreate$3$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/android/BaseActivity$onCreate$3$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/android/BaseActivity$onCreate$3$1$1; +HSPLcom/artemchep/keyguard/android/BaseActivity$onCreate$3$1$1;->()V +HSPLcom/artemchep/keyguard/android/BaseActivity$onCreate$3$1$1;->()V +HSPLcom/artemchep/keyguard/android/BaseActivity$onCreate$3$1$1;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V +HSPLcom/artemchep/keyguard/android/BaseActivity$onCreate$3$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/android/BaseActivity$onCreate$3$1$2; +HSPLcom/artemchep/keyguard/android/BaseActivity$onCreate$3$1$2;->(Lcom/artemchep/keyguard/android/BaseActivity;)V +HSPLcom/artemchep/keyguard/android/BaseActivity$onCreate$3$1$2;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/android/BaseActivity$onCreate$3$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/android/BaseActivity$onCreate$3$1$2$1; +HSPLcom/artemchep/keyguard/android/BaseActivity$onCreate$3$1$2$1;->(Lcom/artemchep/keyguard/android/BaseActivity;)V +HSPLcom/artemchep/keyguard/android/BaseActivity$onCreate$3$1$2$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/android/BaseActivity$onCreate$3$1$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/android/BaseActivity$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/android/BaseActivity$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/android/BaseActivity$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/android/BaseActivity$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/android/BaseApp; +HSPLcom/artemchep/keyguard/android/BaseApp;->()V +HSPLcom/artemchep/keyguard/android/BaseApp;->()V +Lcom/artemchep/keyguard/android/ComposableSingletons$MainActivityKt; +HSPLcom/artemchep/keyguard/android/ComposableSingletons$MainActivityKt;->()V +HSPLcom/artemchep/keyguard/android/ComposableSingletons$MainActivityKt;->()V +HSPLcom/artemchep/keyguard/android/ComposableSingletons$MainActivityKt;->getLambda-1$common_noneRelease()Lkotlin/jvm/functions/Function2; +Lcom/artemchep/keyguard/android/ComposableSingletons$MainActivityKt$lambda-1$1; +HSPLcom/artemchep/keyguard/android/ComposableSingletons$MainActivityKt$lambda-1$1;->()V +HSPLcom/artemchep/keyguard/android/ComposableSingletons$MainActivityKt$lambda-1$1;->()V +HSPLcom/artemchep/keyguard/android/ComposableSingletons$MainActivityKt$lambda-1$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/android/ComposableSingletons$MainActivityKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/android/MainActivity; +HSPLcom/artemchep/keyguard/android/MainActivity;->()V +HSPLcom/artemchep/keyguard/android/MainActivity;->()V +HSPLcom/artemchep/keyguard/android/MainActivity;->Content(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/android/MainActivity;->onCreate(Landroid/os/Bundle;)V +HSPLcom/artemchep/keyguard/android/MainActivity;->updateDeeplinkFromIntent(Landroid/content/Intent;)V +Lcom/artemchep/keyguard/android/MainActivity$Companion; +HSPLcom/artemchep/keyguard/android/MainActivity$Companion;->()V +HSPLcom/artemchep/keyguard/android/MainActivity$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/android/MainActivity$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/android/MainActivity$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/android/PasskeyBeginGetRequest; +Lcom/artemchep/keyguard/android/PasskeyCreateRequest; +Lcom/artemchep/keyguard/android/PasskeyGenerator; +Lcom/artemchep/keyguard/android/PasskeyGeneratorBase; +Lcom/artemchep/keyguard/android/PasskeyGeneratorES256; +Lcom/artemchep/keyguard/android/PasskeyModuleKt; +HSPLcom/artemchep/keyguard/android/PasskeyModuleKt;->passkeysModule()Lorg/kodein/di/DI$Module; +Lcom/artemchep/keyguard/android/PasskeyModuleKt$passkeysModule$1; +HSPLcom/artemchep/keyguard/android/PasskeyModuleKt$passkeysModule$1;->()V +HSPLcom/artemchep/keyguard/android/PasskeyModuleKt$passkeysModule$1;->()V +HSPLcom/artemchep/keyguard/android/PasskeyModuleKt$passkeysModule$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/PasskeyModuleKt$passkeysModule$1;->invoke(Lorg/kodein/di/DI$Builder;)V +Lcom/artemchep/keyguard/android/PasskeyModuleKt$passkeysModule$1$1; +HSPLcom/artemchep/keyguard/android/PasskeyModuleKt$passkeysModule$1$1;->()V +HSPLcom/artemchep/keyguard/android/PasskeyModuleKt$passkeysModule$1$1;->()V +Lcom/artemchep/keyguard/android/PasskeyModuleKt$passkeysModule$1$2; +HSPLcom/artemchep/keyguard/android/PasskeyModuleKt$passkeysModule$1$2;->()V +HSPLcom/artemchep/keyguard/android/PasskeyModuleKt$passkeysModule$1$2;->()V +Lcom/artemchep/keyguard/android/PasskeyModuleKt$passkeysModule$1$3; +HSPLcom/artemchep/keyguard/android/PasskeyModuleKt$passkeysModule$1$3;->()V +HSPLcom/artemchep/keyguard/android/PasskeyModuleKt$passkeysModule$1$3;->()V +Lcom/artemchep/keyguard/android/PasskeyModuleKt$passkeysModule$1$4; +HSPLcom/artemchep/keyguard/android/PasskeyModuleKt$passkeysModule$1$4;->()V +HSPLcom/artemchep/keyguard/android/PasskeyModuleKt$passkeysModule$1$4;->()V +Lcom/artemchep/keyguard/android/PasskeyModuleKt$passkeysModule$1$5; +HSPLcom/artemchep/keyguard/android/PasskeyModuleKt$passkeysModule$1$5;->()V +HSPLcom/artemchep/keyguard/android/PasskeyModuleKt$passkeysModule$1$5;->()V +Lcom/artemchep/keyguard/android/PasskeyModuleKt$passkeysModule$1$invoke$$inlined$bindSingleton$default$1; +HSPLcom/artemchep/keyguard/android/PasskeyModuleKt$passkeysModule$1$invoke$$inlined$bindSingleton$default$1;->()V +Lcom/artemchep/keyguard/android/PasskeyModuleKt$passkeysModule$1$invoke$$inlined$bindSingleton$default$2; +HSPLcom/artemchep/keyguard/android/PasskeyModuleKt$passkeysModule$1$invoke$$inlined$bindSingleton$default$2;->()V +Lcom/artemchep/keyguard/android/PasskeyModuleKt$passkeysModule$1$invoke$$inlined$bindSingleton$default$3; +HSPLcom/artemchep/keyguard/android/PasskeyModuleKt$passkeysModule$1$invoke$$inlined$bindSingleton$default$3;->()V +Lcom/artemchep/keyguard/android/PasskeyModuleKt$passkeysModule$1$invoke$$inlined$bindSingleton$default$4; +HSPLcom/artemchep/keyguard/android/PasskeyModuleKt$passkeysModule$1$invoke$$inlined$bindSingleton$default$4;->()V +Lcom/artemchep/keyguard/android/PasskeyModuleKt$passkeysModule$1$invoke$$inlined$bindSingleton$default$5; +HSPLcom/artemchep/keyguard/android/PasskeyModuleKt$passkeysModule$1$invoke$$inlined$bindSingleton$default$5;->()V +Lcom/artemchep/keyguard/android/PasskeyProviderGetRequest; +Lcom/artemchep/keyguard/android/PasskeyUtils; +Lcom/artemchep/keyguard/android/downloader/DownloadClientAndroid; +Lcom/artemchep/keyguard/android/downloader/journal/CipherHistoryOpenedRepository; +Lcom/artemchep/keyguard/android/downloader/journal/CipherHistoryOpenedRepositoryImpl; +HSPLcom/artemchep/keyguard/android/downloader/journal/CipherHistoryOpenedRepositoryImpl;->()V +HSPLcom/artemchep/keyguard/android/downloader/journal/CipherHistoryOpenedRepositoryImpl;->(Lcom/artemchep/keyguard/core/store/DatabaseManager;Lkotlinx/coroutines/CoroutineDispatcher;)V +HSPLcom/artemchep/keyguard/android/downloader/journal/CipherHistoryOpenedRepositoryImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/android/downloader/journal/CipherHistoryOpenedRepositoryImpl$special$$inlined$instance$1; +HSPLcom/artemchep/keyguard/android/downloader/journal/CipherHistoryOpenedRepositoryImpl$special$$inlined$instance$1;->()V +Lcom/artemchep/keyguard/android/downloader/journal/CipherHistoryOpenedRepositoryImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/android/downloader/journal/CipherHistoryOpenedRepositoryImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/android/downloader/journal/DownloadRepository; +Lcom/artemchep/keyguard/android/downloader/journal/DownloadRepositoryImpl; +HSPLcom/artemchep/keyguard/android/downloader/journal/DownloadRepositoryImpl;->()V +HSPLcom/artemchep/keyguard/android/downloader/journal/DownloadRepositoryImpl;->(Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager;)V +HSPLcom/artemchep/keyguard/android/downloader/journal/DownloadRepositoryImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/android/downloader/journal/DownloadRepositoryImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/android/downloader/journal/DownloadRepositoryImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/android/downloader/journal/GeneratorHistoryRepository; +Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabase; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabase;->()V +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabase;->()V +Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager;->()V +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager;->(Landroid/content/Context;Ljava/lang/String;Lcom/artemchep/keyguard/common/usecase/DeviceEncryptionKeyUseCase;)V +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager;->access$getApplicationContext$p(Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager;)Landroid/content/Context; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager;->access$getDbIo$p(Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager;)Lkotlin/jvm/functions/Function1; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager;->access$getName$p(Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager;)Ljava/lang/String; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager;->migrateIfExists(Lcom/artemchep/keyguard/data/Database;)Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$migrateIfExists$$inlined$ioEffect$1; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$migrateIfExists$$inlined$ioEffect$1;->(Lkotlin/coroutines/Continuation;Lkotlin/coroutines/CoroutineContext;Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager;Lcom/artemchep/keyguard/data/Database;)V +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$migrateIfExists$$inlined$ioEffect$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$migrateIfExists$$inlined$ioEffect$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$migrateIfExists$$inlined$ioEffect$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$migrateIfExists$$inlined$ioEffect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$migrateIfExists$$inlined$ioEffect$1$1; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$migrateIfExists$$inlined$ioEffect$1$1;->(Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager;Lcom/artemchep/keyguard/data/Database;)V +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$migrateIfExists$$inlined$ioEffect$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$migrateIfExists$$inlined$ioEffect$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$migrateIfExists$1$1; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$migrateIfExists$1$1;->(Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabase;Lcom/artemchep/keyguard/data/Database;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$migrateIfExists$1$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$migrateIfExists$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$migrateIfExists$1$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$migrateIfExists$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$migrateIfExists$1$1$1; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$migrateIfExists$1$1$1;->(Ljava/util/List;Lcom/artemchep/keyguard/data/Database;)V +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$migrateIfExists$1$1$1;->invoke(Lapp/cash/sqldelight/TransactionWithoutReturn;)V +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$migrateIfExists$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$special$$inlined$effectMap$1; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$special$$inlined$effectMap$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager;)V +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$special$$inlined$effectMap$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$special$$inlined$effectMap$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$special$$inlined$effectMap$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$special$$inlined$effectMap$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$special$$inlined$effectMap$1$1; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$special$$inlined$effectMap$1$1;->(Ljava/lang/Object;Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager;)V +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$special$$inlined$effectMap$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$special$$inlined$effectMap$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$special$$inlined$retry$1; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$special$$inlined$retry$1;->(Lkotlin/coroutines/Continuation;Lkotlin/jvm/functions/Function1;Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager;)V +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$special$$inlined$retry$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$special$$inlined$retry$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$special$$inlined$retry$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$special$$inlined$retry$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseTypeConverter; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseTypeConverter;->()V +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseTypeConverter;->()V +Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabase_AutoMigration_1_2_Impl; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabase_AutoMigration_1_2_Impl;->()V +Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabase_Impl; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabase_Impl;->()V +PLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabase_Impl;->access$100(Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabase_Impl;)Ljava/util/List; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabase_Impl;->access$202(Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabase_Impl;Landroidx/sqlite/db/SupportSQLiteDatabase;)Landroidx/sqlite/db/SupportSQLiteDatabase; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabase_Impl;->access$300(Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabase_Impl;Landroidx/sqlite/db/SupportSQLiteDatabase;)V +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabase_Impl;->access$400(Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabase_Impl;)Ljava/util/List; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabase_Impl;->createInvalidationTracker()Landroidx/room/InvalidationTracker; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabase_Impl;->createOpenHelper(Landroidx/room/DatabaseConfiguration;)Landroidx/sqlite/db/SupportSQLiteOpenHelper; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabase_Impl;->generatorDao()Lcom/artemchep/keyguard/android/downloader/journal/room/GeneratorDao; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabase_Impl;->getAutoMigrations(Ljava/util/Map;)Ljava/util/List; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabase_Impl;->getRequiredAutoMigrationSpecs()Ljava/util/Set; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabase_Impl;->getRequiredTypeConverters()Ljava/util/Map; +Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabase_Impl$1; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabase_Impl$1;->(Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabase_Impl;I)V +PLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabase_Impl$1;->createAllTables(Landroidx/sqlite/db/SupportSQLiteDatabase;)V +PLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabase_Impl$1;->onCreate(Landroidx/sqlite/db/SupportSQLiteDatabase;)V +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabase_Impl$1;->onOpen(Landroidx/sqlite/db/SupportSQLiteDatabase;)V +Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadInfoDao; +Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadInfoDao_Impl; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadInfoDao_Impl;->getRequiredConverters()Ljava/util/List; +Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadInfoEntity2; +Lcom/artemchep/keyguard/android/downloader/journal/room/GeneratorDao; +Lcom/artemchep/keyguard/android/downloader/journal/room/GeneratorDao_Impl; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/GeneratorDao_Impl;->-$$Nest$fget__db(Lcom/artemchep/keyguard/android/downloader/journal/room/GeneratorDao_Impl;)Landroidx/room/RoomDatabase; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/GeneratorDao_Impl;->-$$Nest$fget__preparedStmtOfRemoveAll(Lcom/artemchep/keyguard/android/downloader/journal/room/GeneratorDao_Impl;)Landroidx/room/SharedSQLiteStatement; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/GeneratorDao_Impl;->(Landroidx/room/RoomDatabase;)V +HSPLcom/artemchep/keyguard/android/downloader/journal/room/GeneratorDao_Impl;->getAll()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/GeneratorDao_Impl;->getRequiredConverters()Ljava/util/List; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/GeneratorDao_Impl;->removeAll(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/android/downloader/journal/room/GeneratorDao_Impl$1; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/GeneratorDao_Impl$1;->(Lcom/artemchep/keyguard/android/downloader/journal/room/GeneratorDao_Impl;Landroidx/room/RoomDatabase;)V +Lcom/artemchep/keyguard/android/downloader/journal/room/GeneratorDao_Impl$2; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/GeneratorDao_Impl$2;->(Lcom/artemchep/keyguard/android/downloader/journal/room/GeneratorDao_Impl;Landroidx/room/RoomDatabase;)V +HSPLcom/artemchep/keyguard/android/downloader/journal/room/GeneratorDao_Impl$2;->createQuery()Ljava/lang/String; +Lcom/artemchep/keyguard/android/downloader/journal/room/GeneratorDao_Impl$4; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/GeneratorDao_Impl$4;->(Lcom/artemchep/keyguard/android/downloader/journal/room/GeneratorDao_Impl;)V +HSPLcom/artemchep/keyguard/android/downloader/journal/room/GeneratorDao_Impl$4;->call()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/GeneratorDao_Impl$4;->call()Lkotlin/Unit; +Lcom/artemchep/keyguard/android/downloader/journal/room/GeneratorDao_Impl$5; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/GeneratorDao_Impl$5;->(Lcom/artemchep/keyguard/android/downloader/journal/room/GeneratorDao_Impl;Landroidx/room/RoomSQLiteQuery;)V +HSPLcom/artemchep/keyguard/android/downloader/journal/room/GeneratorDao_Impl$5;->call()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/GeneratorDao_Impl$5;->call()Ljava/util/List; +PLcom/artemchep/keyguard/android/downloader/journal/room/GeneratorDao_Impl$5;->finalize()V +Lcom/artemchep/keyguard/android/downloader/worker/AttachmentDownloadAllWorker; +HSPLcom/artemchep/keyguard/android/downloader/worker/AttachmentDownloadAllWorker;->()V +Lcom/artemchep/keyguard/android/downloader/worker/AttachmentDownloadAllWorker$Companion; +HSPLcom/artemchep/keyguard/android/downloader/worker/AttachmentDownloadAllWorker$Companion;->()V +HSPLcom/artemchep/keyguard/android/downloader/worker/AttachmentDownloadAllWorker$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/android/downloader/worker/AttachmentDownloadAllWorker$Companion;->enqueue(Landroid/content/Context;)Landroidx/work/Operation; +Lcom/artemchep/keyguard/android/util/ScreenFlowKt; +HSPLcom/artemchep/keyguard/android/util/ScreenFlowKt;->access$screenState(Landroid/content/Context;)Lcom/artemchep/keyguard/common/model/Screen; +HSPLcom/artemchep/keyguard/android/util/ScreenFlowKt;->isScreenOn(Landroid/content/Context;)Z +HSPLcom/artemchep/keyguard/android/util/ScreenFlowKt;->screenFlow(Landroid/content/Context;)Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/android/util/ScreenFlowKt;->screenState(Landroid/content/Context;)Lcom/artemchep/keyguard/common/model/Screen; +Lcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$$inlined$flatMapLatest$1; +HSPLcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$$inlined$flatMapLatest$1;->(Lkotlin/coroutines/Continuation;Landroid/content/Context;)V +HSPLcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$$inlined$flatMapLatest$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$$inlined$flatMapLatest$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$$inlined$flatMapLatest$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$$inlined$observerFlow$1; +HSPLcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$$inlined$observerFlow$1;->(Lkotlin/coroutines/Continuation;Landroid/content/Context;)V +HSPLcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$$inlined$observerFlow$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$$inlined$observerFlow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$$inlined$observerFlow$1;->invoke(Lkotlinx/coroutines/channels/ProducerScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$$inlined$observerFlow$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$$inlined$observerFlow$1$1; +HSPLcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$$inlined$observerFlow$1$1;->(Lkotlinx/coroutines/channels/ProducerScope;Lkotlin/coroutines/Continuation;Landroid/content/Context;)V +HSPLcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$$inlined$observerFlow$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$$inlined$observerFlow$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$$inlined$observerFlow$1$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$$inlined$observerFlow$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$$inlined$observerFlow$1$1$1; +HSPLcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$$inlined$observerFlow$1$1$1;->(Lkotlinx/coroutines/channels/ProducerScope;)V +HSPLcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$$inlined$observerFlow$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$$inlined$observerFlow$1$1$1;->invoke-JP2dKIU(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$$inlined$observerFlow$1$2; +HSPLcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$$inlined$observerFlow$1$2;->(Lkotlinx/coroutines/CancellableContinuation;)V +Lcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$1$1; +HSPLcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$1$1;->(Landroid/content/Context;Lcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$1$broadcastReceiver$1;)V +Lcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$1$broadcastReceiver$1; +HSPLcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$1$broadcastReceiver$1;->(Lkotlin/jvm/functions/Function1;)V +Lcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$2$1; +HSPLcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$2$1;->(Lcom/artemchep/keyguard/common/model/Screen;Landroid/content/Context;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$2$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/android/worker/SyncWorker; +HSPLcom/artemchep/keyguard/android/worker/SyncWorker;->()V +HSPLcom/artemchep/keyguard/android/worker/SyncWorker;->(Landroid/content/Context;Landroidx/work/WorkerParameters;)V +HSPLcom/artemchep/keyguard/android/worker/SyncWorker;->doWork(Lorg/kodein/di/DI;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/worker/SyncWorker;->getAccountIds()Ljava/util/Set; +Lcom/artemchep/keyguard/android/worker/SyncWorker$Companion; +HSPLcom/artemchep/keyguard/android/worker/SyncWorker$Companion;->()V +HSPLcom/artemchep/keyguard/android/worker/SyncWorker$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/android/worker/SyncWorker$Companion;->enqueueOnce$default(Lcom/artemchep/keyguard/android/worker/SyncWorker$Companion;Landroid/content/Context;Ljava/util/Set;ILjava/lang/Object;)Landroidx/work/Operation; +HSPLcom/artemchep/keyguard/android/worker/SyncWorker$Companion;->enqueueOnce(Landroid/content/Context;Ljava/util/Set;)Landroidx/work/Operation; +HSPLcom/artemchep/keyguard/android/worker/SyncWorker$Companion;->getConstraints()Landroidx/work/Constraints; +Lcom/artemchep/keyguard/android/worker/SyncWorker$accountIds$2; +HSPLcom/artemchep/keyguard/android/worker/SyncWorker$accountIds$2;->(Lcom/artemchep/keyguard/android/worker/SyncWorker;)V +HSPLcom/artemchep/keyguard/android/worker/SyncWorker$accountIds$2;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/worker/SyncWorker$accountIds$2;->invoke()Ljava/util/Set; +Lcom/artemchep/keyguard/android/worker/SyncWorker$accountIds$2$1; +HSPLcom/artemchep/keyguard/android/worker/SyncWorker$accountIds$2$1;->()V +HSPLcom/artemchep/keyguard/android/worker/SyncWorker$accountIds$2$1;->()V +Lcom/artemchep/keyguard/android/worker/SyncWorker$doWork$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/android/worker/SyncWorker$doWork$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/android/worker/SyncWorker$doWork$$inlined$map$1; +HSPLcom/artemchep/keyguard/android/worker/SyncWorker$doWork$$inlined$map$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/android/worker/SyncWorker$doWork$$inlined$map$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/android/worker/SyncWorker$doWork$$inlined$map$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/worker/SyncWorker$doWork$$inlined$map$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/worker/SyncWorker$doWork$$inlined$map$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/android/worker/SyncWorker$doWork$1; +HSPLcom/artemchep/keyguard/android/worker/SyncWorker$doWork$1;->(Lcom/artemchep/keyguard/android/worker/SyncWorker;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/android/worker/SyncWorker$doWork$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/android/worker/util/SessionWorker; +HSPLcom/artemchep/keyguard/android/worker/util/SessionWorker;->()V +HSPLcom/artemchep/keyguard/android/worker/util/SessionWorker;->(Landroid/content/Context;Landroidx/work/WorkerParameters;)V +HSPLcom/artemchep/keyguard/android/worker/util/SessionWorker;->doWork$suspendImpl(Lcom/artemchep/keyguard/android/worker/util/SessionWorker;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/worker/util/SessionWorker;->doWork(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/worker/util/SessionWorker;->getDi()Lorg/kodein/di/DI; +HSPLcom/artemchep/keyguard/android/worker/util/SessionWorker;->getGetVaultSession()Lcom/artemchep/keyguard/common/usecase/GetVaultSession; +Lcom/artemchep/keyguard/android/worker/util/SessionWorker$Companion; +HSPLcom/artemchep/keyguard/android/worker/util/SessionWorker$Companion;->()V +HSPLcom/artemchep/keyguard/android/worker/util/SessionWorker$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/android/worker/util/SessionWorker$di$2; +HSPLcom/artemchep/keyguard/android/worker/util/SessionWorker$di$2;->(Lcom/artemchep/keyguard/android/worker/util/SessionWorker;)V +HSPLcom/artemchep/keyguard/android/worker/util/SessionWorker$di$2;->invoke()Landroid/content/Context; +HSPLcom/artemchep/keyguard/android/worker/util/SessionWorker$di$2;->invoke()Ljava/lang/Object; +Lcom/artemchep/keyguard/android/worker/util/SessionWorker$doWork$2$1; +HSPLcom/artemchep/keyguard/android/worker/util/SessionWorker$doWork$2$1;->(Lcom/artemchep/keyguard/android/worker/util/SessionWorker;Lcom/artemchep/keyguard/common/model/MasterSession;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/android/worker/util/SessionWorker$doWork$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/android/worker/util/SessionWorker$doWork$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/worker/util/SessionWorker$doWork$2$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/worker/util/SessionWorker$doWork$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/android/worker/util/SessionWorker$doWork$suspendImpl$$inlined$flatMapLatest$1; +HSPLcom/artemchep/keyguard/android/worker/util/SessionWorker$doWork$suspendImpl$$inlined$flatMapLatest$1;->(Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/android/worker/util/SessionWorker;)V +HSPLcom/artemchep/keyguard/android/worker/util/SessionWorker$doWork$suspendImpl$$inlined$flatMapLatest$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/worker/util/SessionWorker$doWork$suspendImpl$$inlined$flatMapLatest$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/worker/util/SessionWorker$doWork$suspendImpl$$inlined$flatMapLatest$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/android/worker/util/SessionWorker$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/android/worker/util/SessionWorker$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/billing/BillingManager; +Lcom/artemchep/keyguard/billing/BillingManagerImpl; +HSPLcom/artemchep/keyguard/billing/BillingManagerImpl;->()V +HSPLcom/artemchep/keyguard/billing/BillingManagerImpl;->(Landroid/content/Context;)V +HSPLcom/artemchep/keyguard/billing/BillingManagerImpl;->getBillingConnectionFlow()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/billing/BillingManagerImpl$Companion; +HSPLcom/artemchep/keyguard/billing/BillingManagerImpl$Companion;->()V +HSPLcom/artemchep/keyguard/billing/BillingManagerImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/billing/BillingManagerImpl$billingConnectionFlow$1; +HSPLcom/artemchep/keyguard/billing/BillingManagerImpl$billingConnectionFlow$1;->(Lcom/artemchep/keyguard/billing/BillingManagerImpl;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/build/BuildKonfig; +HSPLcom/artemchep/keyguard/build/BuildKonfig;->()V +HSPLcom/artemchep/keyguard/build/BuildKonfig;->()V +HSPLcom/artemchep/keyguard/build/BuildKonfig;->getBuildType()Ljava/lang/String; +Lcom/artemchep/keyguard/common/AppWorker; +Lcom/artemchep/keyguard/common/AppWorker$Feature; +HSPLcom/artemchep/keyguard/common/AppWorker$Feature;->$values()[Lcom/artemchep/keyguard/common/AppWorker$Feature; +HSPLcom/artemchep/keyguard/common/AppWorker$Feature;->()V +HSPLcom/artemchep/keyguard/common/AppWorker$Feature;->(Ljava/lang/String;I)V +Lcom/artemchep/keyguard/common/AppWorkerIm; +HSPLcom/artemchep/keyguard/common/AppWorkerIm;->()V +HSPLcom/artemchep/keyguard/common/AppWorkerIm;->(Lcom/artemchep/keyguard/common/usecase/GetVaultSession;)V +HSPLcom/artemchep/keyguard/common/AppWorkerIm;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/AppWorkerIm;->access$launchSyncManagerWhenAvailable(Lcom/artemchep/keyguard/common/AppWorkerIm;Lkotlinx/coroutines/CoroutineScope;)Lkotlinx/coroutines/Job; +HSPLcom/artemchep/keyguard/common/AppWorkerIm;->launch(Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/Job; +HSPLcom/artemchep/keyguard/common/AppWorkerIm;->launchSyncManagerWhenAvailable(Lkotlinx/coroutines/CoroutineScope;)Lkotlinx/coroutines/Job; +Lcom/artemchep/keyguard/common/AppWorkerIm$launch$1; +HSPLcom/artemchep/keyguard/common/AppWorkerIm$launch$1;->(Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/common/AppWorkerIm;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/AppWorkerIm$launch$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/AppWorkerIm$launch$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/AppWorkerIm$launch$1$1; +HSPLcom/artemchep/keyguard/common/AppWorkerIm$launch$1$1;->(Lcom/artemchep/keyguard/common/AppWorkerIm;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/AppWorkerIm$launch$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/AppWorkerIm$launch$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/AppWorkerIm$launch$1$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/AppWorkerIm$launch$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/AppWorkerIm$launchSyncManagerWhenAvailable$$inlined$map$1; +HSPLcom/artemchep/keyguard/common/AppWorkerIm$launchSyncManagerWhenAvailable$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/common/AppWorkerIm$launchSyncManagerWhenAvailable$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/AppWorkerIm$launchSyncManagerWhenAvailable$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/common/AppWorkerIm$launchSyncManagerWhenAvailable$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/common/AppWorkerIm$launchSyncManagerWhenAvailable$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/AppWorkerIm$launchSyncManagerWhenAvailable$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/common/AppWorkerIm$launchSyncManagerWhenAvailable$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/common/AppWorkerIm$launchSyncManagerWhenAvailable$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/common/AppWorkerIm$launchSyncManagerWhenAvailable$2; +HSPLcom/artemchep/keyguard/common/AppWorkerIm$launchSyncManagerWhenAvailable$2;->()V +HSPLcom/artemchep/keyguard/common/AppWorkerIm$launchSyncManagerWhenAvailable$2;->()V +HSPLcom/artemchep/keyguard/common/AppWorkerIm$launchSyncManagerWhenAvailable$2;->invoke(Lcom/artemchep/keyguard/common/NotificationsWorker;Lcom/artemchep/keyguard/common/NotificationsWorker;)Ljava/lang/Boolean; +HSPLcom/artemchep/keyguard/common/AppWorkerIm$launchSyncManagerWhenAvailable$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/AppWorkerIm$launchSyncManagerWhenAvailable$3; +HSPLcom/artemchep/keyguard/common/AppWorkerIm$launchSyncManagerWhenAvailable$3;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/AppWorkerIm$launchSyncManagerWhenAvailable$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/AppWorkerIm$launchSyncManagerWhenAvailable$3;->invoke(Lcom/artemchep/keyguard/common/NotificationsWorker;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/AppWorkerIm$launchSyncManagerWhenAvailable$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/AppWorkerIm$launchSyncManagerWhenAvailable$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/AppWorkerIm$launchSyncManagerWhenAvailable$3$1; +HSPLcom/artemchep/keyguard/common/AppWorkerIm$launchSyncManagerWhenAvailable$3$1;->(Lcom/artemchep/keyguard/common/NotificationsWorker;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/AppWorkerIm$launchSyncManagerWhenAvailable$3$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/AppWorkerIm$launchSyncManagerWhenAvailable$3$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/AppWorkerIm$launchSyncManagerWhenAvailable$3$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/AppWorkerIm$launchSyncManagerWhenAvailable$3$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/AppWorkerIm$launchSyncManagerWhenAvailable$lambda$0$$inlined$instance$default$1; +PLcom/artemchep/keyguard/common/AppWorkerIm$launchSyncManagerWhenAvailable$lambda$0$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/AppWorkerIm$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/AppWorkerIm$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/NotificationsWorker; +Lcom/artemchep/keyguard/common/R$font; +Lcom/artemchep/keyguard/common/R$string; +Lcom/artemchep/keyguard/common/io/IOBindKt; +HSPLcom/artemchep/keyguard/common/io/IOBindKt;->bind(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/io/IOExceptionKt; +HSPLcom/artemchep/keyguard/common/io/IOExceptionKt;->attempt(Lkotlin/jvm/functions/Function1;)Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/common/io/IOExceptionKt$attempt$$inlined$ioEffect$1; +HSPLcom/artemchep/keyguard/common/io/IOExceptionKt$attempt$$inlined$ioEffect$1;->(Lkotlin/coroutines/Continuation;Lkotlin/jvm/functions/Function1;)V +HSPLcom/artemchep/keyguard/common/io/IOExceptionKt$attempt$$inlined$ioEffect$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/io/IOExceptionKt$attempt$$inlined$ioEffect$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/io/IOExceptionKt$attempt$$inlined$ioEffect$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/io/IOExceptionKt$attempt$$inlined$ioEffect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/io/IOFactoryKt; +HSPLcom/artemchep/keyguard/common/io/IOFactoryKt;->()V +HSPLcom/artemchep/keyguard/common/io/IOFactoryKt;->io(Ljava/lang/Object;)Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/common/io/IOFactoryKt$io$$inlined$ioEffect$1; +HSPLcom/artemchep/keyguard/common/io/IOFactoryKt$io$$inlined$ioEffect$1;->(Lkotlin/coroutines/Continuation;Ljava/lang/Object;)V +HSPLcom/artemchep/keyguard/common/io/IOFactoryKt$io$$inlined$ioEffect$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/io/IOFactoryKt$io$$inlined$ioEffect$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/io/IOFactoryKt$io$$inlined$ioEffect$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/io/IOFactoryKt$io$$inlined$ioEffect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/io/IOFlattenKt; +HSPLcom/artemchep/keyguard/common/io/IOFlattenKt;->flatten(Lkotlin/jvm/functions/Function1;)Lkotlin/jvm/functions/Function1; +HSPLcom/artemchep/keyguard/common/io/IOFlattenKt;->flattenMap(Lkotlin/jvm/functions/Function1;)Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/common/io/IOFlattenKt$flatten$$inlined$flatMap$1; +HSPLcom/artemchep/keyguard/common/io/IOFlattenKt$flatten$$inlined$flatMap$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/io/IOFlattenKt$flatten$$inlined$flatMap$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/io/IOFlattenKt$flatten$$inlined$flatMap$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/io/IOFlattenKt$flatten$$inlined$flatMap$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/io/IOFlattenKt$flatten$$inlined$flatMap$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/io/IOFlattenKt$flattenMap$$inlined$effectMap$1; +HSPLcom/artemchep/keyguard/common/io/IOFlattenKt$flattenMap$$inlined$effectMap$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/io/IOFlattenKt$flattenMap$$inlined$effectMap$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/io/IOFlattenKt$flattenMap$$inlined$effectMap$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/io/IOFlattenKt$flattenMap$$inlined$effectMap$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/io/IOFlattenKt$flattenMap$$inlined$effectMap$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/io/IOFlowKt; +HSPLcom/artemchep/keyguard/common/io/IOFlowKt;->toIO(Lkotlinx/coroutines/flow/Flow;)Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/common/io/IOFlowKt$toIO$$inlined$ioEffect$1; +HSPLcom/artemchep/keyguard/common/io/IOFlowKt$toIO$$inlined$ioEffect$1;->(Lkotlin/coroutines/Continuation;Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/common/io/IOFlowKt$toIO$$inlined$ioEffect$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/io/IOFlowKt$toIO$$inlined$ioEffect$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/io/IOFlowKt$toIO$$inlined$ioEffect$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/io/IOFlowKt$toIO$$inlined$ioEffect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/io/IOForkKt; +HSPLcom/artemchep/keyguard/common/io/IOForkKt;->dispatchOn(Lkotlin/jvm/functions/Function1;Lkotlinx/coroutines/CoroutineDispatcher;)Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/common/io/IOForkKt$dispatchOn$1; +HSPLcom/artemchep/keyguard/common/io/IOForkKt$dispatchOn$1;->(Lkotlinx/coroutines/CoroutineDispatcher;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/io/IOForkKt$dispatchOn$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/io/IOForkKt$dispatchOn$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/io/IOForkKt$dispatchOn$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/io/IOForkKt$dispatchOn$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/io/IOForkKt$dispatchOn$1$1; +HSPLcom/artemchep/keyguard/common/io/IOForkKt$dispatchOn$1$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/io/IOForkKt$dispatchOn$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/io/IOForkKt$dispatchOn$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/io/IOForkKt$dispatchOn$1$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/io/IOForkKt$dispatchOn$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/io/IOLaunchInKt; +HSPLcom/artemchep/keyguard/common/io/IOLaunchInKt;->launchIn(Lkotlin/jvm/functions/Function1;Lkotlinx/coroutines/CoroutineScope;)Lkotlinx/coroutines/Job; +Lcom/artemchep/keyguard/common/io/IOLaunchInKt$launchIn$1; +HSPLcom/artemchep/keyguard/common/io/IOLaunchInKt$launchIn$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/io/IOLaunchInKt$launchIn$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/io/IOLaunchInKt$launchIn$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/io/IOMonadKt; +HSPLcom/artemchep/keyguard/common/io/IOMonadKt;->parallel$default(Ljava/util/List;Lkotlin/coroutines/CoroutineContext;IILjava/lang/Object;)Lkotlin/jvm/functions/Function1; +HSPLcom/artemchep/keyguard/common/io/IOMonadKt;->parallel(Ljava/util/List;Lkotlin/coroutines/CoroutineContext;I)Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/common/io/IOMonadKt$flatMap$1; +HSPLcom/artemchep/keyguard/common/io/IOMonadKt$flatMap$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/io/IOMonadKt$flatMap$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/io/IOMonadKt$flatMap$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/io/IOMonadKt$flatMap$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/io/IOMonadKt$flatMap$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/io/IOMonadKt$parallel$1; +HSPLcom/artemchep/keyguard/common/io/IOMonadKt$parallel$1;->(Ljava/util/List;ILkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/io/IOMonadKt$parallel$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/io/IOMonadKt$parallel$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/io/IOMonadKt$parallel$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/io/IOMonadKt$parallel$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/io/IOMonadKt$parallel$1$1; +HSPLcom/artemchep/keyguard/common/io/IOMonadKt$parallel$1$1;->(Ljava/util/List;ILkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/io/IOMonadKt$parallel$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/io/IOMonadKt$parallel$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/io/IOMonadKt$parallel$1$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/io/IOMonadKt$parallel$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/io/IOSharedKt; +HSPLcom/artemchep/keyguard/common/io/IOSharedKt;->shared$default(Lkotlin/jvm/functions/Function1;ZILjava/lang/Object;)Lkotlin/jvm/functions/Function1; +HSPLcom/artemchep/keyguard/common/io/IOSharedKt;->shared(Lkotlin/jvm/functions/Function1;Z)Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/common/io/IOSharedKt$shared$$inlined$ioEffect$1; +HSPLcom/artemchep/keyguard/common/io/IOSharedKt$shared$$inlined$ioEffect$1;->(Lkotlin/coroutines/Continuation;Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlin/jvm/functions/Function1;ZLkotlin/jvm/internal/Ref$ObjectRef;)V +HSPLcom/artemchep/keyguard/common/io/IOSharedKt$shared$$inlined$ioEffect$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/io/IOSharedKt$shared$$inlined$ioEffect$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/io/IOSharedKt$shared$$inlined$ioEffect$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/io/IOSharedKt$shared$$inlined$ioEffect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/io/IOSharedKt$shared$1$2$1; +HSPLcom/artemchep/keyguard/common/io/IOSharedKt$shared$1$2$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/io/IOSharedKt$shared$1$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/io/IOSharedKt$shared$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/io/IOWidenKt; +HSPLcom/artemchep/keyguard/common/io/IOWidenKt;->nullable(Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/common/io/IOWidenKt$nullable$$inlined$map$1; +HSPLcom/artemchep/keyguard/common/io/IOWidenKt$nullable$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/common/io/IOWidenKt$nullable$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/io/IOWidenKt$nullable$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/common/io/IOWidenKt$nullable$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/common/io/IOWidenKt$nullable$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/io/IOWidenKt$nullable$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/common/io/IOWidenKt$nullable$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/common/io/IOWidenKt$nullable$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/common/model/AccountId; +Lcom/artemchep/keyguard/common/model/AccountTask; +HSPLcom/artemchep/keyguard/common/model/AccountTask;->$values()[Lcom/artemchep/keyguard/common/model/AccountTask; +HSPLcom/artemchep/keyguard/common/model/AccountTask;->()V +HSPLcom/artemchep/keyguard/common/model/AccountTask;->(Ljava/lang/String;I)V +Lcom/artemchep/keyguard/common/model/AddCipherOpenedHistoryRequest; +Lcom/artemchep/keyguard/common/model/AddCipherUsedPasskeyHistoryRequest; +Lcom/artemchep/keyguard/common/model/AddPasskeyCipherRequest; +Lcom/artemchep/keyguard/common/model/AddUriCipherRequest; +Lcom/artemchep/keyguard/common/model/AnyMap; +HSPLcom/artemchep/keyguard/common/model/AnyMap;->()V +HSPLcom/artemchep/keyguard/common/model/AnyMap;->(Ljava/util/Map;)V +HSPLcom/artemchep/keyguard/common/model/AnyMap;->getValue()Ljava/util/Map; +Lcom/artemchep/keyguard/common/model/AppColors; +HSPLcom/artemchep/keyguard/common/model/AppColors;->$values()[Lcom/artemchep/keyguard/common/model/AppColors; +HSPLcom/artemchep/keyguard/common/model/AppColors;->()V +HSPLcom/artemchep/keyguard/common/model/AppColors;->(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;I)V +HSPLcom/artemchep/keyguard/common/model/AppColors;->getKey()Ljava/lang/String; +HSPLcom/artemchep/keyguard/common/model/AppColors;->values()[Lcom/artemchep/keyguard/common/model/AppColors; +Lcom/artemchep/keyguard/common/model/AppFont; +HSPLcom/artemchep/keyguard/common/model/AppFont;->$values()[Lcom/artemchep/keyguard/common/model/AppFont; +HSPLcom/artemchep/keyguard/common/model/AppFont;->()V +HSPLcom/artemchep/keyguard/common/model/AppFont;->(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V +HSPLcom/artemchep/keyguard/common/model/AppFont;->getKey()Ljava/lang/String; +HSPLcom/artemchep/keyguard/common/model/AppFont;->values()[Lcom/artemchep/keyguard/common/model/AppFont; +Lcom/artemchep/keyguard/common/model/AppTheme; +HSPLcom/artemchep/keyguard/common/model/AppTheme;->$values()[Lcom/artemchep/keyguard/common/model/AppTheme; +HSPLcom/artemchep/keyguard/common/model/AppTheme;->()V +HSPLcom/artemchep/keyguard/common/model/AppTheme;->(Ljava/lang/String;ILjava/lang/String;)V +HSPLcom/artemchep/keyguard/common/model/AppTheme;->getKey()Ljava/lang/String; +HSPLcom/artemchep/keyguard/common/model/AppTheme;->values()[Lcom/artemchep/keyguard/common/model/AppTheme; +Lcom/artemchep/keyguard/common/model/AuthResult; +HSPLcom/artemchep/keyguard/common/model/AuthResult;->()V +HSPLcom/artemchep/keyguard/common/model/AuthResult;->(Lcom/artemchep/keyguard/common/model/MasterKey;Lcom/artemchep/keyguard/common/model/FingerprintPassword;)V +HSPLcom/artemchep/keyguard/common/model/AuthResult;->getKey()Lcom/artemchep/keyguard/common/model/MasterKey; +PLcom/artemchep/keyguard/common/model/AuthResult;->getToken()Lcom/artemchep/keyguard/common/model/FingerprintPassword; +Lcom/artemchep/keyguard/common/model/AutofillHint; +HSPLcom/artemchep/keyguard/common/model/AutofillHint;->$values()[Lcom/artemchep/keyguard/common/model/AutofillHint; +HSPLcom/artemchep/keyguard/common/model/AutofillHint;->()V +HSPLcom/artemchep/keyguard/common/model/AutofillHint;->(Ljava/lang/String;I)V +HSPLcom/artemchep/keyguard/common/model/AutofillHint;->values()[Lcom/artemchep/keyguard/common/model/AutofillHint; +Lcom/artemchep/keyguard/common/model/AutofillTarget; +Lcom/artemchep/keyguard/common/model/BarcodeImageRequest; +Lcom/artemchep/keyguard/common/model/BiometricStatus; +Lcom/artemchep/keyguard/common/model/BiometricStatus$Available; +Lcom/artemchep/keyguard/common/model/BiometricStatus$Unavailable; +HSPLcom/artemchep/keyguard/common/model/BiometricStatus$Unavailable;->()V +HSPLcom/artemchep/keyguard/common/model/BiometricStatus$Unavailable;->()V +Lcom/artemchep/keyguard/common/model/CheckPasswordLeakRequest; +Lcom/artemchep/keyguard/common/model/CheckPasswordSetLeakRequest; +Lcom/artemchep/keyguard/common/model/CheckUsernameLeakRequest; +Lcom/artemchep/keyguard/common/model/CipherFieldSwitchToggleRequest; +Lcom/artemchep/keyguard/common/model/CipherOpenedHistoryMode; +Lcom/artemchep/keyguard/common/model/DAccount; +Lcom/artemchep/keyguard/common/model/DAccountStatus; +HSPLcom/artemchep/keyguard/common/model/DAccountStatus;->()V +HSPLcom/artemchep/keyguard/common/model/DAccountStatus;->(Lcom/artemchep/keyguard/common/model/DAccountStatus$Error;Lcom/artemchep/keyguard/common/model/DAccountStatus$Pending;Ljava/util/List;)V +HSPLcom/artemchep/keyguard/common/model/DAccountStatus;->(Lcom/artemchep/keyguard/common/model/DAccountStatus$Error;Lcom/artemchep/keyguard/common/model/DAccountStatus$Pending;Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/common/model/DAccountStatus;->equals(Ljava/lang/Object;)Z +HSPLcom/artemchep/keyguard/common/model/DAccountStatus;->getError()Lcom/artemchep/keyguard/common/model/DAccountStatus$Error; +HSPLcom/artemchep/keyguard/common/model/DAccountStatus;->getPending()Lcom/artemchep/keyguard/common/model/DAccountStatus$Pending; +HSPLcom/artemchep/keyguard/common/model/DAccountStatus;->getPendingPermissions()Ljava/util/List; +Lcom/artemchep/keyguard/common/model/DAccountStatus$Error; +HSPLcom/artemchep/keyguard/common/model/DAccountStatus$Error;->()V +HSPLcom/artemchep/keyguard/common/model/DAccountStatus$Error;->(I)V +Lcom/artemchep/keyguard/common/model/DAccountStatus$Pending; +HSPLcom/artemchep/keyguard/common/model/DAccountStatus$Pending;->()V +HSPLcom/artemchep/keyguard/common/model/DAccountStatus$Pending;->(I)V +Lcom/artemchep/keyguard/common/model/DCipherOpenedHistory; +Lcom/artemchep/keyguard/common/model/DCollection; +Lcom/artemchep/keyguard/common/model/DFilter; +HSPLcom/artemchep/keyguard/common/model/DFilter;->()V +Lcom/artemchep/keyguard/common/model/DFilter$All; +HSPLcom/artemchep/keyguard/common/model/DFilter$All;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$All;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$All;->toString()Ljava/lang/String; +Lcom/artemchep/keyguard/common/model/DFilter$All$1; +HSPLcom/artemchep/keyguard/common/model/DFilter$All$1;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$All$1;->()V +Lcom/artemchep/keyguard/common/model/DFilter$And; +HSPLcom/artemchep/keyguard/common/model/DFilter$And;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$And;->(Ljava/util/Collection;)V +HSPLcom/artemchep/keyguard/common/model/DFilter$And;->getFilters()Ljava/util/Collection; +Lcom/artemchep/keyguard/common/model/DFilter$And$Companion; +HSPLcom/artemchep/keyguard/common/model/DFilter$And$Companion;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$And$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/common/model/DFilter$ByAttachments; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByAttachments;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByAttachments;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByAttachments;->getKey()Ljava/lang/String; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByAttachments;->prepare(Lorg/kodein/di/DirectDI;Ljava/util/List;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/model/DFilter$ByAttachments$1; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByAttachments$1;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByAttachments$1;->()V +Lcom/artemchep/keyguard/common/model/DFilter$ByAttachments$prepare$2; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByAttachments$prepare$2;->(Ljava/lang/Object;)V +Lcom/artemchep/keyguard/common/model/DFilter$ByDuplicateWebsites; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByDuplicateWebsites;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByDuplicateWebsites;->()V +Lcom/artemchep/keyguard/common/model/DFilter$ByDuplicateWebsites$1; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByDuplicateWebsites$1;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByDuplicateWebsites$1;->()V +Lcom/artemchep/keyguard/common/model/DFilter$ByError; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByError;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByError;->(Z)V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByError;->getKey()Ljava/lang/String; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByError;->prepare(Lorg/kodein/di/DirectDI;Ljava/util/List;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/model/DFilter$ByError$$serializer; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByError$$serializer;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByError$$serializer;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByError$$serializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +Lcom/artemchep/keyguard/common/model/DFilter$ByError$Companion; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByError$Companion;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByError$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/common/model/DFilter$ByError$prepare$2; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByError$prepare$2;->(Ljava/lang/Object;)V +Lcom/artemchep/keyguard/common/model/DFilter$ByExpiring; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByExpiring;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByExpiring;->()V +Lcom/artemchep/keyguard/common/model/DFilter$ByExpiring$1; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByExpiring$1;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByExpiring$1;->()V +Lcom/artemchep/keyguard/common/model/DFilter$ById; +HSPLcom/artemchep/keyguard/common/model/DFilter$ById;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ById;->(Ljava/lang/String;Lcom/artemchep/keyguard/common/model/DFilter$ById$What;)V +HSPLcom/artemchep/keyguard/common/model/DFilter$ById;->getId()Ljava/lang/String; +HSPLcom/artemchep/keyguard/common/model/DFilter$ById;->getKey()Ljava/lang/String; +HSPLcom/artemchep/keyguard/common/model/DFilter$ById;->getWhat()Lcom/artemchep/keyguard/common/model/DFilter$ById$What; +Lcom/artemchep/keyguard/common/model/DFilter$ById$$serializer; +HSPLcom/artemchep/keyguard/common/model/DFilter$ById$$serializer;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ById$$serializer;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ById$$serializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +Lcom/artemchep/keyguard/common/model/DFilter$ById$Companion; +HSPLcom/artemchep/keyguard/common/model/DFilter$ById$Companion;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ById$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/common/model/DFilter$ById$What; +HSPLcom/artemchep/keyguard/common/model/DFilter$ById$What;->$values()[Lcom/artemchep/keyguard/common/model/DFilter$ById$What; +HSPLcom/artemchep/keyguard/common/model/DFilter$ById$What;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ById$What;->(Ljava/lang/String;I)V +HSPLcom/artemchep/keyguard/common/model/DFilter$ById$What;->access$get$cachedSerializer$delegate$cp()Lkotlin/Lazy; +HSPLcom/artemchep/keyguard/common/model/DFilter$ById$What;->values()[Lcom/artemchep/keyguard/common/model/DFilter$ById$What; +Lcom/artemchep/keyguard/common/model/DFilter$ById$What$Companion; +HSPLcom/artemchep/keyguard/common/model/DFilter$ById$What$Companion;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ById$What$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/common/model/DFilter$ById$What$Companion;->get$cachedSerializer()Lkotlinx/serialization/KSerializer; +HSPLcom/artemchep/keyguard/common/model/DFilter$ById$What$Companion;->serializer()Lkotlinx/serialization/KSerializer; +Lcom/artemchep/keyguard/common/model/DFilter$ById$What$Companion$1; +HSPLcom/artemchep/keyguard/common/model/DFilter$ById$What$Companion$1;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ById$What$Companion$1;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ById$What$Companion$1;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/model/DFilter$ById$What$Companion$1;->invoke()Lkotlinx/serialization/KSerializer; +Lcom/artemchep/keyguard/common/model/DFilter$ByIncomplete; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByIncomplete;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByIncomplete;->()V +Lcom/artemchep/keyguard/common/model/DFilter$ByIncomplete$1; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByIncomplete$1;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByIncomplete$1;->()V +Lcom/artemchep/keyguard/common/model/DFilter$ByOtp; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByOtp;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByOtp;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByOtp;->getKey()Ljava/lang/String; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByOtp;->prepare(Lorg/kodein/di/DirectDI;Ljava/util/List;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/model/DFilter$ByOtp$1; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByOtp$1;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByOtp$1;->()V +Lcom/artemchep/keyguard/common/model/DFilter$ByOtp$prepare$2; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByOtp$prepare$2;->(Ljava/lang/Object;)V +Lcom/artemchep/keyguard/common/model/DFilter$ByPasskeyWebsites; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByPasskeyWebsites;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByPasskeyWebsites;->()V +Lcom/artemchep/keyguard/common/model/DFilter$ByPasskeyWebsites$1; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByPasskeyWebsites$1;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByPasskeyWebsites$1;->()V +Lcom/artemchep/keyguard/common/model/DFilter$ByPasskeys; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByPasskeys;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByPasskeys;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByPasskeys;->getKey()Ljava/lang/String; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByPasskeys;->prepare(Lorg/kodein/di/DirectDI;Ljava/util/List;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/model/DFilter$ByPasskeys$1; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByPasskeys$1;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByPasskeys$1;->()V +Lcom/artemchep/keyguard/common/model/DFilter$ByPasskeys$prepare$2; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByPasskeys$prepare$2;->(Ljava/lang/Object;)V +Lcom/artemchep/keyguard/common/model/DFilter$ByPasswordDuplicates; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByPasswordDuplicates;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByPasswordDuplicates;->()V +Lcom/artemchep/keyguard/common/model/DFilter$ByPasswordDuplicates$1; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByPasswordDuplicates$1;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByPasswordDuplicates$1;->()V +Lcom/artemchep/keyguard/common/model/DFilter$ByPasswordPwned; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByPasswordPwned;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByPasswordPwned;->()V +Lcom/artemchep/keyguard/common/model/DFilter$ByPasswordPwned$1; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByPasswordPwned$1;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByPasswordPwned$1;->()V +Lcom/artemchep/keyguard/common/model/DFilter$ByPasswordStrength; +Lcom/artemchep/keyguard/common/model/DFilter$ByPasswordStrength$$serializer; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByPasswordStrength$$serializer;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByPasswordStrength$$serializer;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByPasswordStrength$$serializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +Lcom/artemchep/keyguard/common/model/DFilter$ByPasswordValue; +Lcom/artemchep/keyguard/common/model/DFilter$ByPasswordValue$$serializer; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByPasswordValue$$serializer;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByPasswordValue$$serializer;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByPasswordValue$$serializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +Lcom/artemchep/keyguard/common/model/DFilter$ByReprompt; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByReprompt;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByReprompt;->(Z)V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByReprompt;->getKey()Ljava/lang/String; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByReprompt;->prepare(Lorg/kodein/di/DirectDI;Ljava/util/List;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/model/DFilter$ByReprompt$$serializer; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByReprompt$$serializer;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByReprompt$$serializer;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByReprompt$$serializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +Lcom/artemchep/keyguard/common/model/DFilter$ByReprompt$Companion; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByReprompt$Companion;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByReprompt$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/common/model/DFilter$ByReprompt$prepare$2; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByReprompt$prepare$2;->(Ljava/lang/Object;)V +Lcom/artemchep/keyguard/common/model/DFilter$BySync; +HSPLcom/artemchep/keyguard/common/model/DFilter$BySync;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$BySync;->(Z)V +HSPLcom/artemchep/keyguard/common/model/DFilter$BySync;->getKey()Ljava/lang/String; +HSPLcom/artemchep/keyguard/common/model/DFilter$BySync;->prepare(Lorg/kodein/di/DirectDI;Ljava/util/List;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/model/DFilter$BySync$$serializer; +HSPLcom/artemchep/keyguard/common/model/DFilter$BySync$$serializer;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$BySync$$serializer;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$BySync$$serializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +Lcom/artemchep/keyguard/common/model/DFilter$BySync$Companion; +HSPLcom/artemchep/keyguard/common/model/DFilter$BySync$Companion;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$BySync$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/common/model/DFilter$BySync$prepare$2; +HSPLcom/artemchep/keyguard/common/model/DFilter$BySync$prepare$2;->(Ljava/lang/Object;)V +Lcom/artemchep/keyguard/common/model/DFilter$ByTfaWebsites; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByTfaWebsites;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByTfaWebsites;->()V +Lcom/artemchep/keyguard/common/model/DFilter$ByTfaWebsites$1; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByTfaWebsites$1;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByTfaWebsites$1;->()V +Lcom/artemchep/keyguard/common/model/DFilter$ByType; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByType;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByType;->(Lcom/artemchep/keyguard/common/model/DSecret$Type;)V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByType;->getKey()Ljava/lang/String; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByType;->prepare(Lorg/kodein/di/DirectDI;Ljava/util/List;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/model/DFilter$ByType$$serializer; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByType$$serializer;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByType$$serializer;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByType$$serializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +Lcom/artemchep/keyguard/common/model/DFilter$ByType$Companion; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByType$Companion;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByType$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/common/model/DFilter$ByType$prepare$2; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByType$prepare$2;->(Ljava/lang/Object;)V +Lcom/artemchep/keyguard/common/model/DFilter$ByUnsecureWebsites; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByUnsecureWebsites;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByUnsecureWebsites;->()V +Lcom/artemchep/keyguard/common/model/DFilter$ByUnsecureWebsites$1; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByUnsecureWebsites$1;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByUnsecureWebsites$1;->()V +Lcom/artemchep/keyguard/common/model/DFilter$ByWebsitePwned; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByWebsitePwned;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByWebsitePwned;->()V +Lcom/artemchep/keyguard/common/model/DFilter$ByWebsitePwned$1; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByWebsitePwned$1;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByWebsitePwned$1;->()V +Lcom/artemchep/keyguard/common/model/DFilter$Companion; +HSPLcom/artemchep/keyguard/common/model/DFilter$Companion;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$Companion;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$Companion;->_findOne(Lcom/artemchep/keyguard/common/model/DFilter;Ljava/lang/Class;Lkotlin/jvm/functions/Function1;)Larrow/core/Either; +HSPLcom/artemchep/keyguard/common/model/DFilter$Companion;->findOne$default(Lcom/artemchep/keyguard/common/model/DFilter$Companion;Lcom/artemchep/keyguard/common/model/DFilter;Ljava/lang/Class;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/model/DFilter$Companion;->findOne(Lcom/artemchep/keyguard/common/model/DFilter;Ljava/lang/Class;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/model/DFilter$Companion$findOne$2; +HSPLcom/artemchep/keyguard/common/model/DFilter$Companion$findOne$2;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$Companion$findOne$2;->()V +Lcom/artemchep/keyguard/common/model/DFilter$Or; +Lcom/artemchep/keyguard/common/model/DFilter$Primitive; +Lcom/artemchep/keyguard/common/model/DFolder; +Lcom/artemchep/keyguard/common/model/DFolderTree; +Lcom/artemchep/keyguard/common/model/DGeneratorEmailRelay; +Lcom/artemchep/keyguard/common/model/DGeneratorHistory; +Lcom/artemchep/keyguard/common/model/DHibpC; +Lcom/artemchep/keyguard/common/model/DMeta; +Lcom/artemchep/keyguard/common/model/DOrganization; +Lcom/artemchep/keyguard/common/model/DProfile; +Lcom/artemchep/keyguard/common/model/DSecret; +HSPLcom/artemchep/keyguard/common/model/DSecret;->()V +Lcom/artemchep/keyguard/common/model/DSecret$Companion; +HSPLcom/artemchep/keyguard/common/model/DSecret$Companion;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/common/model/DSecret$Field$LinkedId; +HSPLcom/artemchep/keyguard/common/model/DSecret$Field$LinkedId;->$values()[Lcom/artemchep/keyguard/common/model/DSecret$Field$LinkedId; +HSPLcom/artemchep/keyguard/common/model/DSecret$Field$LinkedId;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret$Field$LinkedId;->(Ljava/lang/String;ILcom/artemchep/keyguard/common/model/DSecret$Type;)V +HSPLcom/artemchep/keyguard/common/model/DSecret$Field$LinkedId;->values()[Lcom/artemchep/keyguard/common/model/DSecret$Field$LinkedId; +Lcom/artemchep/keyguard/common/model/DSecret$Identity; +HSPLcom/artemchep/keyguard/common/model/DSecret$Identity;->()V +Lcom/artemchep/keyguard/common/model/DSecret$Identity$Companion; +HSPLcom/artemchep/keyguard/common/model/DSecret$Identity$Companion;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret$Identity$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/common/model/DSecret$Login; +HSPLcom/artemchep/keyguard/common/model/DSecret$Login;->()V +Lcom/artemchep/keyguard/common/model/DSecret$Login$Companion; +HSPLcom/artemchep/keyguard/common/model/DSecret$Login$Companion;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret$Login$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/common/model/DSecret$Login$Fido2Credentials; +Lcom/artemchep/keyguard/common/model/DSecret$Type; +HSPLcom/artemchep/keyguard/common/model/DSecret$Type;->$values()[Lcom/artemchep/keyguard/common/model/DSecret$Type; +HSPLcom/artemchep/keyguard/common/model/DSecret$Type;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret$Type;->(Ljava/lang/String;I)V +HSPLcom/artemchep/keyguard/common/model/DSecret$Type;->values()[Lcom/artemchep/keyguard/common/model/DSecret$Type; +Lcom/artemchep/keyguard/common/model/DSecret$Uri; +Lcom/artemchep/keyguard/common/model/DSecret$Uri$MatchType; +HSPLcom/artemchep/keyguard/common/model/DSecret$Uri$MatchType;->$values()[Lcom/artemchep/keyguard/common/model/DSecret$Uri$MatchType; +HSPLcom/artemchep/keyguard/common/model/DSecret$Uri$MatchType;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret$Uri$MatchType;->(Ljava/lang/String;I)V +HSPLcom/artemchep/keyguard/common/model/DSecret$Uri$MatchType;->values()[Lcom/artemchep/keyguard/common/model/DSecret$Uri$MatchType; +Lcom/artemchep/keyguard/common/model/DSecret$Uri$MatchType$Companion; +HSPLcom/artemchep/keyguard/common/model/DSecret$Uri$MatchType$Companion;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret$Uri$MatchType$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/common/model/DSecretDuplicateGroup; +Lcom/artemchep/keyguard/common/model/DSecretFun; +HSPLcom/artemchep/keyguard/common/model/DSecretFun;->iconImageVector(Lcom/artemchep/keyguard/common/model/DSecret$Type;)Landroidx/compose/ui/graphics/vector/ImageVector; +HSPLcom/artemchep/keyguard/common/model/DSecretFun;->titleH(Lcom/artemchep/keyguard/common/model/DSecret$Type;)Ldev/icerock/moko/resources/StringResource; +Lcom/artemchep/keyguard/common/model/DSecretFun$WhenMappings; +HSPLcom/artemchep/keyguard/common/model/DSecretFun$WhenMappings;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$address1$1; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$address1$1;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$address1$1;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$address1$2; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$address1$2;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$address1$2;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$address2$1; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$address2$1;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$address2$1;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$address2$2; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$address2$2;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$address2$2;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$address3$1; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$address3$1;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$address3$1;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$address3$2; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$address3$2;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$address3$2;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$city$1; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$city$1;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$city$1;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$city$2; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$city$2;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$city$2;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$company$1; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$company$1;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$company$1;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$company$2; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$company$2;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$company$2;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$country$1; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$country$1;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$country$1;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$country$2; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$country$2;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$country$2;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$email$1; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$email$1;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$email$1;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$email$2; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$email$2;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$email$2;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$firstName$1; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$firstName$1;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$firstName$1;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$firstName$2; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$firstName$2;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$firstName$2;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$lastName$1; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$lastName$1;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$lastName$1;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$lastName$2; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$lastName$2;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$lastName$2;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$licenseNumber$1; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$licenseNumber$1;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$licenseNumber$1;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$licenseNumber$2; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$licenseNumber$2;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$licenseNumber$2;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$middleName$1; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$middleName$1;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$middleName$1;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$middleName$2; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$middleName$2;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$middleName$2;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$passportNumber$1; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$passportNumber$1;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$passportNumber$1;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$passportNumber$2; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$passportNumber$2;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$passportNumber$2;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$phone$1; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$phone$1;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$phone$1;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$phone$2; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$phone$2;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$phone$2;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$postalCode$1; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$postalCode$1;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$postalCode$1;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$postalCode$2; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$postalCode$2;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$postalCode$2;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$ssn$1; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$ssn$1;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$ssn$1;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$ssn$2; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$ssn$2;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$ssn$2;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$state$1; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$state$1;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$state$1;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$state$2; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$state$2;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$state$2;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$title$1; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$title$1;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$title$1;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$title$2; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$title$2;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$title$2;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$username$1; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$username$1;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$username$1;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$username$2; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$username$2;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$username$2;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Login__OpticsKt$password$1; +HSPLcom/artemchep/keyguard/common/model/DSecret_Login__OpticsKt$password$1;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Login__OpticsKt$password$1;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Login__OpticsKt$password$2; +HSPLcom/artemchep/keyguard/common/model/DSecret_Login__OpticsKt$password$2;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Login__OpticsKt$password$2;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Login__OpticsKt$totp$1; +HSPLcom/artemchep/keyguard/common/model/DSecret_Login__OpticsKt$totp$1;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Login__OpticsKt$totp$1;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Login__OpticsKt$totp$2; +HSPLcom/artemchep/keyguard/common/model/DSecret_Login__OpticsKt$totp$2;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Login__OpticsKt$totp$2;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Login__OpticsKt$username$1; +HSPLcom/artemchep/keyguard/common/model/DSecret_Login__OpticsKt$username$1;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Login__OpticsKt$username$1;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Login__OpticsKt$username$2; +HSPLcom/artemchep/keyguard/common/model/DSecret_Login__OpticsKt$username$2;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Login__OpticsKt$username$2;->()V +Lcom/artemchep/keyguard/common/model/DSecret__OpticsKt$attachments$1; +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$attachments$1;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$attachments$1;->()V +Lcom/artemchep/keyguard/common/model/DSecret__OpticsKt$attachments$2; +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$attachments$2;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$attachments$2;->()V +Lcom/artemchep/keyguard/common/model/DSecret__OpticsKt$card$1; +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$card$1;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$card$1;->()V +Lcom/artemchep/keyguard/common/model/DSecret__OpticsKt$card$2; +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$card$2;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$card$2;->()V +Lcom/artemchep/keyguard/common/model/DSecret__OpticsKt$favorite$1; +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$favorite$1;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$favorite$1;->()V +Lcom/artemchep/keyguard/common/model/DSecret__OpticsKt$favorite$2; +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$favorite$2;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$favorite$2;->()V +Lcom/artemchep/keyguard/common/model/DSecret__OpticsKt$fields$1; +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$fields$1;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$fields$1;->()V +Lcom/artemchep/keyguard/common/model/DSecret__OpticsKt$fields$2; +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$fields$2;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$fields$2;->()V +Lcom/artemchep/keyguard/common/model/DSecret__OpticsKt$identity$1; +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$identity$1;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$identity$1;->()V +Lcom/artemchep/keyguard/common/model/DSecret__OpticsKt$identity$2; +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$identity$2;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$identity$2;->()V +Lcom/artemchep/keyguard/common/model/DSecret__OpticsKt$login$1; +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$login$1;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$login$1;->()V +Lcom/artemchep/keyguard/common/model/DSecret__OpticsKt$login$2; +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$login$2;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$login$2;->()V +Lcom/artemchep/keyguard/common/model/DSecret__OpticsKt$notes$1; +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$notes$1;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$notes$1;->()V +Lcom/artemchep/keyguard/common/model/DSecret__OpticsKt$notes$2; +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$notes$2;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$notes$2;->()V +Lcom/artemchep/keyguard/common/model/DSecret__OpticsKt$reprompt$1; +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$reprompt$1;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$reprompt$1;->()V +Lcom/artemchep/keyguard/common/model/DSecret__OpticsKt$reprompt$2; +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$reprompt$2;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$reprompt$2;->()V +Lcom/artemchep/keyguard/common/model/DSecret__OpticsKt$type$1; +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$type$1;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$type$1;->()V +Lcom/artemchep/keyguard/common/model/DSecret__OpticsKt$type$2; +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$type$2;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$type$2;->()V +Lcom/artemchep/keyguard/common/model/DSecret__OpticsKt$uris$1; +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$uris$1;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$uris$1;->()V +Lcom/artemchep/keyguard/common/model/DSecret__OpticsKt$uris$2; +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$uris$2;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$uris$2;->()V +Lcom/artemchep/keyguard/common/model/DSend; +Lcom/artemchep/keyguard/common/model/DownloadAttachmentRequest; +Lcom/artemchep/keyguard/common/model/Fingerprint; +HSPLcom/artemchep/keyguard/common/model/Fingerprint;->()V +HSPLcom/artemchep/keyguard/common/model/Fingerprint;->(Lcom/artemchep/keyguard/common/model/FingerprintPassword;Lcom/artemchep/keyguard/common/model/FingerprintBiometric;)V +HSPLcom/artemchep/keyguard/common/model/Fingerprint;->getBiometric()Lcom/artemchep/keyguard/common/model/FingerprintBiometric; +HSPLcom/artemchep/keyguard/common/model/Fingerprint;->getMaster()Lcom/artemchep/keyguard/common/model/FingerprintPassword; +Lcom/artemchep/keyguard/common/model/FingerprintPassword; +HSPLcom/artemchep/keyguard/common/model/FingerprintPassword;->()V +HSPLcom/artemchep/keyguard/common/model/FingerprintPassword;->(Lcom/artemchep/keyguard/common/model/MasterPasswordHash;Lcom/artemchep/keyguard/common/model/MasterPasswordSalt;)V +HSPLcom/artemchep/keyguard/common/model/FingerprintPassword;->getHash()Lcom/artemchep/keyguard/common/model/MasterPasswordHash; +HSPLcom/artemchep/keyguard/common/model/FingerprintPassword;->getSalt()Lcom/artemchep/keyguard/common/model/MasterPasswordSalt; +HSPLcom/artemchep/keyguard/common/model/FingerprintPassword;->hashCode()I +Lcom/artemchep/keyguard/common/model/FolderOwnership2; +Lcom/artemchep/keyguard/common/model/GeneratorContext; +Lcom/artemchep/keyguard/common/model/HasAccountId; +Lcom/artemchep/keyguard/common/model/LinkInfo; +Lcom/artemchep/keyguard/common/model/LinkInfoAndroid; +Lcom/artemchep/keyguard/common/model/LinkInfoExecute; +Lcom/artemchep/keyguard/common/model/LinkInfoLaunch; +Lcom/artemchep/keyguard/common/model/LinkInfoPlatform; +Lcom/artemchep/keyguard/common/model/LinkInfoPlatform$Android; +Lcom/artemchep/keyguard/common/model/Loadable; +Lcom/artemchep/keyguard/common/model/Loadable$Loading; +HSPLcom/artemchep/keyguard/common/model/Loadable$Loading;->()V +HSPLcom/artemchep/keyguard/common/model/Loadable$Loading;->()V +HSPLcom/artemchep/keyguard/common/model/Loadable$Loading;->equals(Ljava/lang/Object;)Z +Lcom/artemchep/keyguard/common/model/Loadable$Ok; +HSPLcom/artemchep/keyguard/common/model/Loadable$Ok;->()V +HSPLcom/artemchep/keyguard/common/model/Loadable$Ok;->(Ljava/lang/Object;)V +HSPLcom/artemchep/keyguard/common/model/Loadable$Ok;->equals(Ljava/lang/Object;)Z +HSPLcom/artemchep/keyguard/common/model/Loadable$Ok;->getValue()Ljava/lang/Object; +Lcom/artemchep/keyguard/common/model/Loadable$Ok$Companion; +HSPLcom/artemchep/keyguard/common/model/Loadable$Ok$Companion;->()V +HSPLcom/artemchep/keyguard/common/model/Loadable$Ok$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/common/model/MasterKey; +HSPLcom/artemchep/keyguard/common/model/MasterKey;->()V +HSPLcom/artemchep/keyguard/common/model/MasterKey;->([B)V +HSPLcom/artemchep/keyguard/common/model/MasterKey;->getByteArray()[B +HSPLcom/artemchep/keyguard/common/model/MasterKey;->hashCode()I +Lcom/artemchep/keyguard/common/model/MasterPassword; +HSPLcom/artemchep/keyguard/common/model/MasterPassword;->([B)V +HSPLcom/artemchep/keyguard/common/model/MasterPassword;->box-impl([B)Lcom/artemchep/keyguard/common/model/MasterPassword; +HSPLcom/artemchep/keyguard/common/model/MasterPassword;->constructor-impl([B)[B +HSPLcom/artemchep/keyguard/common/model/MasterPassword;->unbox-impl()[B +Lcom/artemchep/keyguard/common/model/MasterPasswordHash; +HSPLcom/artemchep/keyguard/common/model/MasterPasswordHash;->()V +HSPLcom/artemchep/keyguard/common/model/MasterPasswordHash;->([B)V +HSPLcom/artemchep/keyguard/common/model/MasterPasswordHash;->getByteArray()[B +HSPLcom/artemchep/keyguard/common/model/MasterPasswordHash;->hashCode()I +Lcom/artemchep/keyguard/common/model/MasterPasswordSalt; +HSPLcom/artemchep/keyguard/common/model/MasterPasswordSalt;->()V +HSPLcom/artemchep/keyguard/common/model/MasterPasswordSalt;->([B)V +HSPLcom/artemchep/keyguard/common/model/MasterPasswordSalt;->getByteArray()[B +HSPLcom/artemchep/keyguard/common/model/MasterPasswordSalt;->hashCode()I +Lcom/artemchep/keyguard/common/model/MasterSession; +Lcom/artemchep/keyguard/common/model/MasterSession$Empty; +HSPLcom/artemchep/keyguard/common/model/MasterSession$Empty;->()V +HSPLcom/artemchep/keyguard/common/model/MasterSession$Empty;->(Ljava/lang/String;)V +HSPLcom/artemchep/keyguard/common/model/MasterSession$Empty;->(Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/common/model/MasterSession$Empty;->equals(Ljava/lang/Object;)Z +Lcom/artemchep/keyguard/common/model/MasterSession$Empty$Companion; +HSPLcom/artemchep/keyguard/common/model/MasterSession$Empty$Companion;->()V +HSPLcom/artemchep/keyguard/common/model/MasterSession$Empty$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/common/model/MasterSession$Key; +HSPLcom/artemchep/keyguard/common/model/MasterSession$Key;->()V +HSPLcom/artemchep/keyguard/common/model/MasterSession$Key;->(Lcom/artemchep/keyguard/common/model/MasterKey;Lorg/kodein/di/DI;Lcom/artemchep/keyguard/common/model/MasterSession$Key$Origin;Lkotlinx/datetime/Instant;)V +HSPLcom/artemchep/keyguard/common/model/MasterSession$Key;->getDi()Lorg/kodein/di/DI; +HSPLcom/artemchep/keyguard/common/model/MasterSession$Key;->getMasterKey()Lcom/artemchep/keyguard/common/model/MasterKey; +Lcom/artemchep/keyguard/common/model/MasterSession$Key$Authenticated; +HSPLcom/artemchep/keyguard/common/model/MasterSession$Key$Authenticated;->()V +HSPLcom/artemchep/keyguard/common/model/MasterSession$Key$Authenticated;->()V +Lcom/artemchep/keyguard/common/model/MasterSession$Key$Companion; +HSPLcom/artemchep/keyguard/common/model/MasterSession$Key$Companion;->()V +HSPLcom/artemchep/keyguard/common/model/MasterSession$Key$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/common/model/MasterSession$Key$Origin; +Lcom/artemchep/keyguard/common/model/NavAnimation; +HSPLcom/artemchep/keyguard/common/model/NavAnimation;->$values()[Lcom/artemchep/keyguard/common/model/NavAnimation; +HSPLcom/artemchep/keyguard/common/model/NavAnimation;->()V +HSPLcom/artemchep/keyguard/common/model/NavAnimation;->(Ljava/lang/String;ILjava/lang/String;Ldev/icerock/moko/resources/StringResource;)V +HSPLcom/artemchep/keyguard/common/model/NavAnimation;->getKey()Ljava/lang/String; +HSPLcom/artemchep/keyguard/common/model/NavAnimation;->values()[Lcom/artemchep/keyguard/common/model/NavAnimation; +Lcom/artemchep/keyguard/common/model/NavAnimation$Companion; +HSPLcom/artemchep/keyguard/common/model/NavAnimation$Companion;->()V +HSPLcom/artemchep/keyguard/common/model/NavAnimation$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/common/model/NavAnimation$Companion;->getDefault()Lcom/artemchep/keyguard/common/model/NavAnimation; +Lcom/artemchep/keyguard/common/model/PasswordGeneratorConfig; +Lcom/artemchep/keyguard/common/model/PasswordGeneratorConfig$Passphrase; +Lcom/artemchep/keyguard/common/model/PasswordPwnage; +Lcom/artemchep/keyguard/common/model/PasswordStrength; +Lcom/artemchep/keyguard/common/model/PersistedSession; +Lcom/artemchep/keyguard/common/model/Product; +Lcom/artemchep/keyguard/common/model/RemoveAttachmentRequest; +Lcom/artemchep/keyguard/common/model/Screen; +HSPLcom/artemchep/keyguard/common/model/Screen;->()V +HSPLcom/artemchep/keyguard/common/model/Screen;->()V +HSPLcom/artemchep/keyguard/common/model/Screen;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/common/model/Screen$On; +HSPLcom/artemchep/keyguard/common/model/Screen$On;->()V +HSPLcom/artemchep/keyguard/common/model/Screen$On;->()V +HSPLcom/artemchep/keyguard/common/model/Screen$On;->equals(Ljava/lang/Object;)Z +Lcom/artemchep/keyguard/common/model/Subscription; +Lcom/artemchep/keyguard/common/model/TotpCode; +Lcom/artemchep/keyguard/common/model/TotpToken; +Lcom/artemchep/keyguard/common/model/VaultState; +Lcom/artemchep/keyguard/common/model/VaultState$Create; +HSPLcom/artemchep/keyguard/common/model/VaultState$Create;->()V +HSPLcom/artemchep/keyguard/common/model/VaultState$Create;->(Lcom/artemchep/keyguard/common/model/VaultState$Create$WithPassword;Lcom/artemchep/keyguard/common/model/VaultState$Create$WithBiometric;)V +HSPLcom/artemchep/keyguard/common/model/VaultState$Create;->getCreateWithMasterPassword()Lcom/artemchep/keyguard/common/model/VaultState$Create$WithPassword; +HSPLcom/artemchep/keyguard/common/model/VaultState$Create;->getCreateWithMasterPasswordAndBiometric()Lcom/artemchep/keyguard/common/model/VaultState$Create$WithBiometric; +Lcom/artemchep/keyguard/common/model/VaultState$Create$WithBiometric; +Lcom/artemchep/keyguard/common/model/VaultState$Create$WithPassword; +HSPLcom/artemchep/keyguard/common/model/VaultState$Create$WithPassword;->()V +HSPLcom/artemchep/keyguard/common/model/VaultState$Create$WithPassword;->(Lkotlin/jvm/functions/Function1;)V +HSPLcom/artemchep/keyguard/common/model/VaultState$Create$WithPassword;->getGetCreateIo()Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/common/model/VaultState$Loading; +HSPLcom/artemchep/keyguard/common/model/VaultState$Loading;->()V +HSPLcom/artemchep/keyguard/common/model/VaultState$Loading;->()V +HSPLcom/artemchep/keyguard/common/model/VaultState$Loading;->equals(Ljava/lang/Object;)Z +HSPLcom/artemchep/keyguard/common/model/VaultState$Loading;->hashCode()I +Lcom/artemchep/keyguard/common/model/VaultState$Main; +HSPLcom/artemchep/keyguard/common/model/VaultState$Main;->()V +PLcom/artemchep/keyguard/common/model/VaultState$Main;->(Lcom/artemchep/keyguard/common/model/MasterKey;Lcom/artemchep/keyguard/common/model/VaultState$Main$ChangePassword;Lorg/kodein/di/DI;)V +HSPLcom/artemchep/keyguard/common/model/VaultState$Main;->equals(Ljava/lang/Object;)Z +HSPLcom/artemchep/keyguard/common/model/VaultState$Main;->getDi()Lorg/kodein/di/DI; +HSPLcom/artemchep/keyguard/common/model/VaultState$Main;->hashCode()I +Lcom/artemchep/keyguard/common/model/VaultState$Main$ChangePassword; +HSPLcom/artemchep/keyguard/common/model/VaultState$Main$ChangePassword;->()V +PLcom/artemchep/keyguard/common/model/VaultState$Main$ChangePassword;->(Ljava/lang/Object;Lcom/artemchep/keyguard/common/model/VaultState$Main$ChangePassword$WithPassword;Lcom/artemchep/keyguard/common/model/VaultState$Main$ChangePassword$WithBiometric;)V +HSPLcom/artemchep/keyguard/common/model/VaultState$Main$ChangePassword;->hashCode()I +Lcom/artemchep/keyguard/common/model/VaultState$Main$ChangePassword$WithPassword; +HSPLcom/artemchep/keyguard/common/model/VaultState$Main$ChangePassword$WithPassword;->()V +PLcom/artemchep/keyguard/common/model/VaultState$Main$ChangePassword$WithPassword;->(Lkotlin/jvm/functions/Function2;)V +Lcom/artemchep/keyguard/common/model/VaultState$Unlock; +HSPLcom/artemchep/keyguard/common/model/VaultState$Unlock;->()V +HSPLcom/artemchep/keyguard/common/model/VaultState$Unlock;->(Lcom/artemchep/keyguard/common/model/VaultState$Unlock$WithPassword;Lcom/artemchep/keyguard/common/model/VaultState$Unlock$WithBiometric;Ljava/lang/String;)V +HSPLcom/artemchep/keyguard/common/model/VaultState$Unlock;->getLockReason()Ljava/lang/String; +HSPLcom/artemchep/keyguard/common/model/VaultState$Unlock;->getUnlockWithBiometric()Lcom/artemchep/keyguard/common/model/VaultState$Unlock$WithBiometric; +HSPLcom/artemchep/keyguard/common/model/VaultState$Unlock;->getUnlockWithMasterPassword()Lcom/artemchep/keyguard/common/model/VaultState$Unlock$WithPassword; +Lcom/artemchep/keyguard/common/model/VaultState$Unlock$WithBiometric; +Lcom/artemchep/keyguard/common/model/VaultState$Unlock$WithPassword; +HSPLcom/artemchep/keyguard/common/model/VaultState$Unlock$WithPassword;->()V +HSPLcom/artemchep/keyguard/common/model/VaultState$Unlock$WithPassword;->(Lkotlin/jvm/functions/Function1;)V +HSPLcom/artemchep/keyguard/common/model/VaultState$Unlock$WithPassword;->getGetCreateIo()Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/common/model/WithBiometric; +Lcom/artemchep/keyguard/common/model/create/CreateRequest; +Lcom/artemchep/keyguard/common/model/create/CreateRequest$Ownership2; +Lcom/artemchep/keyguard/common/service/Files; +HSPLcom/artemchep/keyguard/common/service/Files;->$values()[Lcom/artemchep/keyguard/common/service/Files; +HSPLcom/artemchep/keyguard/common/service/Files;->()V +HSPLcom/artemchep/keyguard/common/service/Files;->(Ljava/lang/String;ILjava/lang/String;)V +HSPLcom/artemchep/keyguard/common/service/Files;->getFilename()Ljava/lang/String; +Lcom/artemchep/keyguard/common/service/autofill/AutofillService; +Lcom/artemchep/keyguard/common/service/clipboard/ClipboardService; +Lcom/artemchep/keyguard/common/service/connectivity/ConnectivityService; +Lcom/artemchep/keyguard/common/service/crypto/CipherEncryptor; +Lcom/artemchep/keyguard/common/service/crypto/CryptoGenerator; +Lcom/artemchep/keyguard/common/service/crypto/CryptoGenerator$DefaultImpls; +HSPLcom/artemchep/keyguard/common/service/crypto/CryptoGenerator$DefaultImpls;->hkdf$default(Lcom/artemchep/keyguard/common/service/crypto/CryptoGenerator;[B[B[BIILjava/lang/Object;)[B +HSPLcom/artemchep/keyguard/common/service/crypto/CryptoGenerator$DefaultImpls;->pbkdf2$default(Lcom/artemchep/keyguard/common/service/crypto/CryptoGenerator;[B[BIIILjava/lang/Object;)[B +Lcom/artemchep/keyguard/common/service/crypto/FileEncryptor; +Lcom/artemchep/keyguard/common/service/deeplink/DeeplinkService; +Lcom/artemchep/keyguard/common/service/deeplink/impl/DeeplinkServiceImpl; +HSPLcom/artemchep/keyguard/common/service/deeplink/impl/DeeplinkServiceImpl;->()V +HSPLcom/artemchep/keyguard/common/service/deeplink/impl/DeeplinkServiceImpl;->()V +HSPLcom/artemchep/keyguard/common/service/deeplink/impl/DeeplinkServiceImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/service/deeplink/impl/DeeplinkServiceImpl;->clear(Ljava/lang/String;)V +HSPLcom/artemchep/keyguard/common/service/deeplink/impl/DeeplinkServiceImpl;->get(Ljava/lang/String;)Ljava/lang/String; +Lcom/artemchep/keyguard/common/service/download/DownloadManager; +Lcom/artemchep/keyguard/common/service/download/DownloadService; +Lcom/artemchep/keyguard/common/service/extract/LinkInfoExtractor; +Lcom/artemchep/keyguard/common/service/extract/impl/LinkInfoPlatformExtractor; +Lcom/artemchep/keyguard/common/service/gpmprivapps/PrivilegedAppsService; +Lcom/artemchep/keyguard/common/service/hibp/breaches/all/BreachesLocalDataSource; +Lcom/artemchep/keyguard/common/service/hibp/breaches/all/BreachesRemoteDataSource; +Lcom/artemchep/keyguard/common/service/hibp/breaches/all/BreachesRepository; +Lcom/artemchep/keyguard/common/service/hibp/passwords/PasswordPwnageDataSource; +Lcom/artemchep/keyguard/common/service/hibp/passwords/PasswordPwnageDataSourceLocal; +Lcom/artemchep/keyguard/common/service/hibp/passwords/PasswordPwnageDataSourceRemote; +Lcom/artemchep/keyguard/common/service/hibp/passwords/PasswordPwnageRepository; +Lcom/artemchep/keyguard/common/service/id/IdRepository; +Lcom/artemchep/keyguard/common/service/id/impl/IdRepositoryImpl; +HSPLcom/artemchep/keyguard/common/service/id/impl/IdRepositoryImpl;->()V +HSPLcom/artemchep/keyguard/common/service/id/impl/IdRepositoryImpl;->(Lcom/artemchep/keyguard/common/service/keyvalue/KeyValueStore;)V +HSPLcom/artemchep/keyguard/common/service/id/impl/IdRepositoryImpl;->get()Lkotlin/jvm/functions/Function1; +PLcom/artemchep/keyguard/common/service/id/impl/IdRepositoryImpl;->put(Ljava/lang/String;)Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/common/service/id/impl/IdRepositoryImpl$Companion; +HSPLcom/artemchep/keyguard/common/service/id/impl/IdRepositoryImpl$Companion;->()V +HSPLcom/artemchep/keyguard/common/service/id/impl/IdRepositoryImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/common/service/justdeleteme/JustDeleteMeService; +Lcom/artemchep/keyguard/common/service/justdeleteme/JustDeleteMeServiceInfo; +Lcom/artemchep/keyguard/common/service/justgetmydata/JustGetMyDataService; +Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference; +Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreferenceKt; +HSPLcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreferenceKt;->asDuration(Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference;)Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreferenceKt$asDuration$$inlined$map$1; +HSPLcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreferenceKt$asDuration$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +Lcom/artemchep/keyguard/common/service/keyvalue/KeyValueStore; +Lcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt; +HSPLcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt;->getObject(Lcom/artemchep/keyguard/common/service/keyvalue/KeyValueStore;Ljava/lang/String;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference; +Lcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1; +HSPLcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1;->(Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V +HSPLcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1;->setAndCommit(Ljava/lang/Object;)Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1$collect$$inlined$map$1; +HSPLcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1$collect$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function1;)V +HSPLcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1$collect$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1$collect$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1$collect$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/jvm/functions/Function1;)V +HSPLcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1$collect$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1$collect$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1$collect$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1$collect$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1$collect$$inlined$map$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1$setAndCommit$$inlined$flatMap$1; +HSPLcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1$setAndCommit$$inlined$flatMap$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference;)V +HSPLcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1$setAndCommit$$inlined$flatMap$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1$setAndCommit$$inlined$flatMap$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1$setAndCommit$$inlined$flatMap$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1$setAndCommit$$inlined$flatMap$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1$setAndCommit$$inlined$ioEffect$1; +HSPLcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1$setAndCommit$$inlined$ioEffect$1;->(Lkotlin/coroutines/Continuation;Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function1;Ljava/lang/Object;)V +HSPLcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1$setAndCommit$$inlined$ioEffect$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1$setAndCommit$$inlined$ioEffect$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1$setAndCommit$$inlined$ioEffect$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1$setAndCommit$$inlined$ioEffect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1$setAndCommit$$inlined$ioEffect$1$1; +HSPLcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1$setAndCommit$$inlined$ioEffect$1$1;->(Lkotlin/coroutines/Continuation;Lkotlin/jvm/functions/Function1;Ljava/lang/Object;)V +HSPLcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1$setAndCommit$$inlined$ioEffect$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1$setAndCommit$$inlined$ioEffect$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1$setAndCommit$$inlined$ioEffect$1$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1$setAndCommit$$inlined$ioEffect$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/service/keyvalue/SecureKeyValueStore; +Lcom/artemchep/keyguard/common/service/license/LicenseService; +Lcom/artemchep/keyguard/common/service/logging/LogLevel; +HSPLcom/artemchep/keyguard/common/service/logging/LogLevel;->$values()[Lcom/artemchep/keyguard/common/service/logging/LogLevel; +HSPLcom/artemchep/keyguard/common/service/logging/LogLevel;->()V +HSPLcom/artemchep/keyguard/common/service/logging/LogLevel;->(Ljava/lang/String;I)V +Lcom/artemchep/keyguard/common/service/logging/LogRepository; +Lcom/artemchep/keyguard/common/service/logging/LogRepository$DefaultImpls; +HSPLcom/artemchep/keyguard/common/service/logging/LogRepository$DefaultImpls;->post$default(Lcom/artemchep/keyguard/common/service/logging/LogRepository;Ljava/lang/String;Ljava/lang/String;Lcom/artemchep/keyguard/common/service/logging/LogLevel;ILjava/lang/Object;)V +Lcom/artemchep/keyguard/common/service/passkey/PassKeyService; +Lcom/artemchep/keyguard/common/service/permission/Permission; +HSPLcom/artemchep/keyguard/common/service/permission/Permission;->$values()[Lcom/artemchep/keyguard/common/service/permission/Permission; +HSPLcom/artemchep/keyguard/common/service/permission/Permission;->()V +HSPLcom/artemchep/keyguard/common/service/permission/Permission;->(Ljava/lang/String;ILjava/lang/String;II)V +HSPLcom/artemchep/keyguard/common/service/permission/Permission;->(Ljava/lang/String;ILjava/lang/String;IIILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/common/service/permission/Permission;->getMaxSdk()I +HSPLcom/artemchep/keyguard/common/service/permission/Permission;->getMinSdk()I +HSPLcom/artemchep/keyguard/common/service/permission/Permission;->getPermission()Ljava/lang/String; +Lcom/artemchep/keyguard/common/service/permission/PermissionService; +Lcom/artemchep/keyguard/common/service/permission/PermissionState; +Lcom/artemchep/keyguard/common/service/permission/PermissionState$Declined; +HSPLcom/artemchep/keyguard/common/service/permission/PermissionState$Declined;->()V +HSPLcom/artemchep/keyguard/common/service/permission/PermissionState$Declined;->(Lkotlin/jvm/functions/Function1;)V +Lcom/artemchep/keyguard/common/service/power/PowerService; +Lcom/artemchep/keyguard/common/service/relays/api/EmailRelay; +Lcom/artemchep/keyguard/common/service/relays/api/anonaddy/AnonAddyEmailRelay; +Lcom/artemchep/keyguard/common/service/relays/api/duckduckgo/DuckDuckGoEmailRelay; +Lcom/artemchep/keyguard/common/service/relays/api/firefoxrelay/FirefoxRelayEmailRelay; +Lcom/artemchep/keyguard/common/service/relays/api/forwardemail/ForwardEmailEmailRelay; +Lcom/artemchep/keyguard/common/service/relays/api/simplelogin/SimpleLoginEmailRelay; +Lcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt; +HSPLcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt;->emailRelayDiModule()Lorg/kodein/di/DI$Module; +Lcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt$emailRelayDiModule$1; +HSPLcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt$emailRelayDiModule$1;->()V +HSPLcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt$emailRelayDiModule$1;->()V +HSPLcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt$emailRelayDiModule$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt$emailRelayDiModule$1;->invoke(Lorg/kodein/di/DI$Builder;)V +Lcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt$emailRelayDiModule$1$1; +HSPLcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt$emailRelayDiModule$1$1;->()V +HSPLcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt$emailRelayDiModule$1$1;->()V +Lcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt$emailRelayDiModule$1$2; +HSPLcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt$emailRelayDiModule$1$2;->()V +HSPLcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt$emailRelayDiModule$1$2;->()V +Lcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt$emailRelayDiModule$1$3; +HSPLcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt$emailRelayDiModule$1$3;->()V +HSPLcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt$emailRelayDiModule$1$3;->()V +Lcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt$emailRelayDiModule$1$4; +HSPLcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt$emailRelayDiModule$1$4;->()V +HSPLcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt$emailRelayDiModule$1$4;->()V +Lcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt$emailRelayDiModule$1$5; +HSPLcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt$emailRelayDiModule$1$5;->()V +HSPLcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt$emailRelayDiModule$1$5;->()V +Lcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt$emailRelayDiModule$1$invoke$$inlined$bindSingleton$default$1; +HSPLcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt$emailRelayDiModule$1$invoke$$inlined$bindSingleton$default$1;->()V +Lcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt$emailRelayDiModule$1$invoke$$inlined$bindSingleton$default$2; +HSPLcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt$emailRelayDiModule$1$invoke$$inlined$bindSingleton$default$2;->()V +Lcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt$emailRelayDiModule$1$invoke$$inlined$bindSingleton$default$3; +HSPLcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt$emailRelayDiModule$1$invoke$$inlined$bindSingleton$default$3;->()V +Lcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt$emailRelayDiModule$1$invoke$$inlined$bindSingleton$default$4; +HSPLcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt$emailRelayDiModule$1$invoke$$inlined$bindSingleton$default$4;->()V +Lcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt$emailRelayDiModule$1$invoke$$inlined$bindSingleton$default$5; +HSPLcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt$emailRelayDiModule$1$invoke$$inlined$bindSingleton$default$5;->()V +Lcom/artemchep/keyguard/common/service/relays/repo/GeneratorEmailRelayRepository; +Lcom/artemchep/keyguard/common/service/review/ReviewLog; +Lcom/artemchep/keyguard/common/service/review/ReviewService; +Lcom/artemchep/keyguard/common/service/settings/SettingsReadRepository; +Lcom/artemchep/keyguard/common/service/settings/SettingsReadWriteRepository; +Lcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->()V +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->(Lcom/artemchep/keyguard/common/service/keyvalue/KeyValueStore;)V +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getAllowScreenshots()Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getAllowScreenshots()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getAllowTwoPanelLayoutInLandscape()Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getAllowTwoPanelLayoutInLandscape()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getAllowTwoPanelLayoutInPortrait()Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getAllowTwoPanelLayoutInPortrait()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getAppIcons()Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getAppIcons()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getBiometricTimeout()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getCachePremium()Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getCachePremium()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getColors()Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getColors()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getConcealFields()Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getConcealFields()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getDebugPremium()Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getDebugPremium()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getDebugScreenDelay()Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getDebugScreenDelay()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getFont()Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getFont()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getNavAnimation()Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getNavAnimation()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getNavLabel()Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getNavLabel()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getTheme()Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getTheme()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getThemeUseAmoledDark()Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getThemeUseAmoledDark()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getUseExternalBrowser()Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getUseExternalBrowser()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getVaultPersist()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getVaultScreenLock()Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getVaultScreenLock()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getWebsiteIcons()Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getWebsiteIcons()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getWriteAccess()Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getWriteAccess()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$Companion; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$Companion;->()V +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$onboardingLastVisitInstantPref$1; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$onboardingLastVisitInstantPref$1;->()V +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$onboardingLastVisitInstantPref$1;->()V +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$onboardingLastVisitInstantPref$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$onboardingLastVisitInstantPref$1;->invoke(Lkotlinx/datetime/Instant;)Ljava/lang/String; +Lcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$onboardingLastVisitInstantPref$2; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$onboardingLastVisitInstantPref$2;->()V +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$onboardingLastVisitInstantPref$2;->()V +Lcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$1; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$1;->()V +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$1;->invoke(Ljava/lang/Enum;)Ljava/lang/String; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$2; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$2;->()V +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$2;->invoke(Ljava/lang/String;)Ljava/lang/Enum; +Lcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$3; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$3;->()V +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$3;->invoke(Ljava/lang/Enum;)Ljava/lang/String; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$4; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$4;->()V +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$4;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$4;->invoke(Ljava/lang/String;)Ljava/lang/Enum; +Lcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$5; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$5;->()V +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$5;->invoke(Ljava/lang/Enum;)Ljava/lang/String; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$5;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$6; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$6;->()V +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$6;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$6;->invoke(Ljava/lang/String;)Ljava/lang/Enum; +Lcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$7; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$7;->()V +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$7;->invoke(Ljava/lang/Enum;)Ljava/lang/String; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$7;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$8; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$8;->()V +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$8;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$8;->invoke(Ljava/lang/String;)Ljava/lang/Enum; +Lcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/common/service/similarity/SimilarityService; +Lcom/artemchep/keyguard/common/service/state/StateRepository; +Lcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImpl; +HSPLcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImpl;->()V +HSPLcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImpl;->(Lcom/artemchep/keyguard/common/service/keyvalue/KeyValueStore;Lkotlinx/serialization/json/Json;)V +HSPLcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImpl;->access$getJson$p(Lcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImpl;)Lkotlinx/serialization/json/Json; +HSPLcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImpl;->createOrGetPref(Ljava/lang/String;)Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference; +HSPLcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImpl;->createPref(Ljava/lang/String;)Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference; +HSPLcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImpl;->get(Ljava/lang/String;)Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImpl;->put(Ljava/lang/String;Ljava/util/Map;)Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImpl$createPref$1; +HSPLcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImpl$createPref$1;->(Lcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImpl;)V +HSPLcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImpl$createPref$1;->invoke(Lcom/artemchep/keyguard/common/model/AnyMap;)Ljava/lang/String; +HSPLcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImpl$createPref$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImpl$createPref$2; +HSPLcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImpl$createPref$2;->(Lcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImpl;)V +HSPLcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImpl$createPref$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImpl$createPref$2;->invoke(Ljava/lang/String;)Lcom/artemchep/keyguard/common/model/AnyMap; +Lcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImpl$get$$inlined$map$1; +HSPLcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImpl$get$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImpl$get$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImpl$get$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImpl$get$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImpl$get$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImpl$get$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImpl$get$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImpl$get$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImplKt; +HSPLcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImplKt;->getExtractedContent(Lkotlinx/serialization/json/JsonElement;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImplKt;->toJson(Ljava/lang/Object;)Lkotlinx/serialization/json/JsonElement; +HSPLcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImplKt;->toMap(Lkotlinx/serialization/json/JsonObject;)Ljava/util/Map; +Lcom/artemchep/keyguard/common/service/subscription/SubscriptionService; +Lcom/artemchep/keyguard/common/service/text/Base32Service; +Lcom/artemchep/keyguard/common/service/text/Base64Service; +Lcom/artemchep/keyguard/common/service/text/Base64Service$DefaultImpls; +HSPLcom/artemchep/keyguard/common/service/text/Base64Service$DefaultImpls;->decode(Lcom/artemchep/keyguard/common/service/text/Base64Service;Ljava/lang/String;)[B +Lcom/artemchep/keyguard/common/service/text/TextService; +Lcom/artemchep/keyguard/common/service/tld/TldService; +Lcom/artemchep/keyguard/common/service/tld/impl/TldServiceImpl; +HSPLcom/artemchep/keyguard/common/service/tld/impl/TldServiceImpl;->()V +HSPLcom/artemchep/keyguard/common/service/tld/impl/TldServiceImpl;->(Lcom/artemchep/keyguard/common/service/text/TextService;Lcom/artemchep/keyguard/common/service/logging/LogRepository;)V +HSPLcom/artemchep/keyguard/common/service/tld/impl/TldServiceImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/common/service/tld/impl/TldServiceImpl$Companion; +HSPLcom/artemchep/keyguard/common/service/tld/impl/TldServiceImpl$Companion;->()V +HSPLcom/artemchep/keyguard/common/service/tld/impl/TldServiceImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/common/service/tld/impl/TldServiceImpl$dataIo$1; +HSPLcom/artemchep/keyguard/common/service/tld/impl/TldServiceImpl$dataIo$1;->()V +HSPLcom/artemchep/keyguard/common/service/tld/impl/TldServiceImpl$dataIo$1;->()V +Lcom/artemchep/keyguard/common/service/tld/impl/TldServiceImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/service/tld/impl/TldServiceImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/service/tld/impl/TldServiceImpl$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/common/service/tld/impl/TldServiceImpl$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/common/service/tld/impl/TldServiceImpl$special$$inlined$measure$1; +HSPLcom/artemchep/keyguard/common/service/tld/impl/TldServiceImpl$special$$inlined$measure$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/common/service/tld/impl/TldServiceImpl;)V +Lcom/artemchep/keyguard/common/service/tld/impl/TldServiceImplKt; +Lcom/artemchep/keyguard/common/service/totp/TotpService; +Lcom/artemchep/keyguard/common/service/totp/impl/TotpServiceImpl; +HSPLcom/artemchep/keyguard/common/service/totp/impl/TotpServiceImpl;->()V +HSPLcom/artemchep/keyguard/common/service/totp/impl/TotpServiceImpl;->(Lcom/artemchep/keyguard/common/service/text/Base32Service;Lcom/artemchep/keyguard/common/service/crypto/CryptoGenerator;)V +HSPLcom/artemchep/keyguard/common/service/totp/impl/TotpServiceImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/common/service/totp/impl/TotpServiceImpl$Companion; +HSPLcom/artemchep/keyguard/common/service/totp/impl/TotpServiceImpl$Companion;->()V +HSPLcom/artemchep/keyguard/common/service/totp/impl/TotpServiceImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/common/service/totp/impl/TotpServiceImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/service/totp/impl/TotpServiceImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/service/totp/impl/TotpServiceImpl$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/common/service/totp/impl/TotpServiceImpl$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/common/service/twofa/TwoFaService; +Lcom/artemchep/keyguard/common/service/vault/FingerprintReadRepository; +Lcom/artemchep/keyguard/common/service/vault/FingerprintReadWriteRepository; +Lcom/artemchep/keyguard/common/service/vault/KeyReadRepository; +Lcom/artemchep/keyguard/common/service/vault/KeyReadWriteRepository; +Lcom/artemchep/keyguard/common/service/vault/SessionMetadataReadRepository; +Lcom/artemchep/keyguard/common/service/vault/SessionMetadataReadWriteRepository; +Lcom/artemchep/keyguard/common/service/vault/SessionReadRepository; +Lcom/artemchep/keyguard/common/service/vault/SessionReadWriteRepository; +Lcom/artemchep/keyguard/common/service/vault/impl/FingerprintRepositoryImpl; +HSPLcom/artemchep/keyguard/common/service/vault/impl/FingerprintRepositoryImpl;->()V +HSPLcom/artemchep/keyguard/common/service/vault/impl/FingerprintRepositoryImpl;->(Lcom/artemchep/keyguard/common/service/keyvalue/KeyValueStore;Lcom/artemchep/keyguard/common/service/text/Base64Service;)V +HSPLcom/artemchep/keyguard/common/service/vault/impl/FingerprintRepositoryImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/service/vault/impl/FingerprintRepositoryImpl;->access$getBase64Service$p(Lcom/artemchep/keyguard/common/service/vault/impl/FingerprintRepositoryImpl;)Lcom/artemchep/keyguard/common/service/text/Base64Service; +HSPLcom/artemchep/keyguard/common/service/vault/impl/FingerprintRepositoryImpl;->get()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/common/service/vault/impl/FingerprintRepositoryImpl;->put(Lcom/artemchep/keyguard/common/model/Fingerprint;)Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/common/service/vault/impl/FingerprintRepositoryImpl$dataPref$1; +HSPLcom/artemchep/keyguard/common/service/vault/impl/FingerprintRepositoryImpl$dataPref$1;->(Lcom/artemchep/keyguard/common/service/vault/impl/FingerprintRepositoryImpl;)V +HSPLcom/artemchep/keyguard/common/service/vault/impl/FingerprintRepositoryImpl$dataPref$1;->invoke(Lcom/artemchep/keyguard/common/model/Fingerprint;)Ljava/lang/String; +HSPLcom/artemchep/keyguard/common/service/vault/impl/FingerprintRepositoryImpl$dataPref$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +PLcom/artemchep/keyguard/common/service/vault/impl/FingerprintRepositoryImpl$dataPref$1$2;->()V +PLcom/artemchep/keyguard/common/service/vault/impl/FingerprintRepositoryImpl$dataPref$1$2;->()V +PLcom/artemchep/keyguard/common/service/vault/impl/FingerprintRepositoryImpl$dataPref$1$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +PLcom/artemchep/keyguard/common/service/vault/impl/FingerprintRepositoryImpl$dataPref$1$2;->invoke([B)Ljava/lang/CharSequence; +Lcom/artemchep/keyguard/common/service/vault/impl/FingerprintRepositoryImpl$dataPref$2; +HSPLcom/artemchep/keyguard/common/service/vault/impl/FingerprintRepositoryImpl$dataPref$2;->(Lcom/artemchep/keyguard/common/service/vault/impl/FingerprintRepositoryImpl;)V +HSPLcom/artemchep/keyguard/common/service/vault/impl/FingerprintRepositoryImpl$dataPref$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/service/vault/impl/FingerprintRepositoryImpl$dataPref$2;->invoke(Ljava/lang/String;)Lcom/artemchep/keyguard/common/model/Fingerprint; +Lcom/artemchep/keyguard/common/service/vault/impl/FingerprintRepositoryImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/service/vault/impl/FingerprintRepositoryImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/service/vault/impl/FingerprintRepositoryImpl$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/common/service/vault/impl/FingerprintRepositoryImpl$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/common/service/vault/impl/FingerprintRepositoryImpl$special$$inlined$instance$default$3; +HSPLcom/artemchep/keyguard/common/service/vault/impl/FingerprintRepositoryImpl$special$$inlined$instance$default$3;->()V +Lcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl; +HSPLcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl;->()V +HSPLcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl;->(Lcom/artemchep/keyguard/common/service/keyvalue/KeyValueStore;Lkotlinx/serialization/json/Json;Lcom/artemchep/keyguard/common/service/text/Base64Service;)V +HSPLcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl;->access$getDataPref$p(Lcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl;)Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference; +HSPLcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl;->get()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl;->put(Lcom/artemchep/keyguard/common/model/PersistedSession;)Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl$dataPref$1; +HSPLcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl$dataPref$1;->(Lcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl;)V +HSPLcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl$dataPref$1;->invoke(Lcom/artemchep/keyguard/common/service/vault/impl/PersistedSessionEntity;)Ljava/lang/String; +HSPLcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl$dataPref$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl$dataPref$2; +HSPLcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl$dataPref$2;->(Lcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl;)V +HSPLcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl$dataPref$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl$dataPref$2;->invoke(Ljava/lang/String;)Lcom/artemchep/keyguard/common/service/vault/impl/PersistedSessionEntity; +Lcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl$get$$inlined$map$1; +HSPLcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl$get$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl;)V +HSPLcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl$get$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl$get$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl$get$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl;)V +HSPLcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl$get$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl$get$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl$get$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl$get$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl$put$$inlined$ioEffect$1; +HSPLcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl$put$$inlined$ioEffect$1;->(Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/common/model/PersistedSession;Lcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl;)V +HSPLcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl$put$$inlined$ioEffect$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl$put$$inlined$ioEffect$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl$put$$inlined$ioEffect$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl$put$$inlined$ioEffect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl$special$$inlined$instance$default$3; +HSPLcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl$special$$inlined$instance$default$3;->()V +Lcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl$special$$inlined$instance$default$4; +HSPLcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl$special$$inlined$instance$default$4;->()V +Lcom/artemchep/keyguard/common/service/vault/impl/PersistedSessionEntity; +Lcom/artemchep/keyguard/common/service/vault/impl/SessionMetadataRepositoryImpl; +HSPLcom/artemchep/keyguard/common/service/vault/impl/SessionMetadataRepositoryImpl;->()V +HSPLcom/artemchep/keyguard/common/service/vault/impl/SessionMetadataRepositoryImpl;->(Lcom/artemchep/keyguard/common/service/keyvalue/KeyValueStore;)V +HSPLcom/artemchep/keyguard/common/service/vault/impl/SessionMetadataRepositoryImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/service/vault/impl/SessionMetadataRepositoryImpl;->setAndCommit(Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference;Lkotlinx/datetime/Instant;)Lkotlin/jvm/functions/Function1; +HSPLcom/artemchep/keyguard/common/service/vault/impl/SessionMetadataRepositoryImpl;->setLastPasswordUseTimestamp(Lkotlinx/datetime/Instant;)Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/common/service/vault/impl/SessionMetadataRepositoryImpl$Companion; +HSPLcom/artemchep/keyguard/common/service/vault/impl/SessionMetadataRepositoryImpl$Companion;->()V +HSPLcom/artemchep/keyguard/common/service/vault/impl/SessionMetadataRepositoryImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/common/service/vault/impl/SessionMetadataRepositoryImpl$setAndCommit$$inlined$flatMap$1; +HSPLcom/artemchep/keyguard/common/service/vault/impl/SessionMetadataRepositoryImpl$setAndCommit$$inlined$flatMap$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference;)V +HSPLcom/artemchep/keyguard/common/service/vault/impl/SessionMetadataRepositoryImpl$setAndCommit$$inlined$flatMap$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/service/vault/impl/SessionMetadataRepositoryImpl$setAndCommit$$inlined$flatMap$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/service/vault/impl/SessionMetadataRepositoryImpl$setAndCommit$$inlined$flatMap$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/service/vault/impl/SessionMetadataRepositoryImpl$setAndCommit$$inlined$flatMap$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/service/vault/impl/SessionMetadataRepositoryImpl$setAndCommit$$inlined$map$1; +HSPLcom/artemchep/keyguard/common/service/vault/impl/SessionMetadataRepositoryImpl$setAndCommit$$inlined$map$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/service/vault/impl/SessionMetadataRepositoryImpl$setAndCommit$$inlined$map$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/service/vault/impl/SessionMetadataRepositoryImpl$setAndCommit$$inlined$map$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/service/vault/impl/SessionMetadataRepositoryImpl$setAndCommit$$inlined$map$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/service/vault/impl/SessionMetadataRepositoryImpl$setAndCommit$$inlined$map$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/service/vault/impl/SessionMetadataRepositoryImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/service/vault/impl/SessionMetadataRepositoryImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/service/vault/impl/SessionMetadataRepositoryImpl$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/common/service/vault/impl/SessionMetadataRepositoryImpl$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/common/service/vault/impl/SessionRepositoryImpl; +HSPLcom/artemchep/keyguard/common/service/vault/impl/SessionRepositoryImpl;->()V +HSPLcom/artemchep/keyguard/common/service/vault/impl/SessionRepositoryImpl;->()V +HSPLcom/artemchep/keyguard/common/service/vault/impl/SessionRepositoryImpl;->get()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/common/service/vault/impl/SessionRepositoryImpl;->put(Lcom/artemchep/keyguard/common/model/MasterSession;)V +Lcom/artemchep/keyguard/common/service/wordlist/WordlistService; +Lcom/artemchep/keyguard/common/service/wordlist/impl/WordlistServiceImpl; +HSPLcom/artemchep/keyguard/common/service/wordlist/impl/WordlistServiceImpl;->()V +HSPLcom/artemchep/keyguard/common/service/wordlist/impl/WordlistServiceImpl;->(Lcom/artemchep/keyguard/common/service/text/TextService;)V +HSPLcom/artemchep/keyguard/common/service/wordlist/impl/WordlistServiceImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/common/service/wordlist/impl/WordlistServiceImpl$special$$inlined$handleErrorTap$default$1; +HSPLcom/artemchep/keyguard/common/service/wordlist/impl/WordlistServiceImpl$special$$inlined$handleErrorTap$default$1;->(Lkotlin/coroutines/Continuation;Lkotlin/jvm/functions/Function1;)V +Lcom/artemchep/keyguard/common/service/wordlist/impl/WordlistServiceImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/service/wordlist/impl/WordlistServiceImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/service/wordlist/impl/WordlistServiceImpl$wordListIo$1; +HSPLcom/artemchep/keyguard/common/service/wordlist/impl/WordlistServiceImpl$wordListIo$1;->()V +HSPLcom/artemchep/keyguard/common/service/wordlist/impl/WordlistServiceImpl$wordListIo$1;->()V +Lcom/artemchep/keyguard/common/service/wordlist/impl/WordlistServiceImplKt; +Lcom/artemchep/keyguard/common/usecase/AddCipher; +Lcom/artemchep/keyguard/common/usecase/AddCipherOpenedHistory; +Lcom/artemchep/keyguard/common/usecase/AddCipherUsedAutofillHistory; +Lcom/artemchep/keyguard/common/usecase/AddCipherUsedPasskeyHistory; +Lcom/artemchep/keyguard/common/usecase/AddEmailRelay; +Lcom/artemchep/keyguard/common/usecase/AddFolder; +Lcom/artemchep/keyguard/common/usecase/AddGeneratorHistory; +Lcom/artemchep/keyguard/common/usecase/AddPasskeyCipher; +Lcom/artemchep/keyguard/common/usecase/AddUriCipher; +Lcom/artemchep/keyguard/common/usecase/AuthConfirmMasterKeyUseCase; +Lcom/artemchep/keyguard/common/usecase/AuthGenerateMasterKeyUseCase; +Lcom/artemchep/keyguard/common/usecase/BiometricKeyDecryptUseCase; +Lcom/artemchep/keyguard/common/usecase/BiometricKeyEncryptUseCase; +Lcom/artemchep/keyguard/common/usecase/BiometricStatusUseCase; +Lcom/artemchep/keyguard/common/usecase/ChangeCipherNameById; +Lcom/artemchep/keyguard/common/usecase/ChangeCipherPasswordById; +Lcom/artemchep/keyguard/common/usecase/CheckPasswordLeak; +Lcom/artemchep/keyguard/common/usecase/CheckPasswordSetLeak; +Lcom/artemchep/keyguard/common/usecase/CheckUsernameLeak; +Lcom/artemchep/keyguard/common/usecase/CipherBreachCheck; +Lcom/artemchep/keyguard/common/usecase/CipherDuplicatesCheck; +Lcom/artemchep/keyguard/common/usecase/CipherDuplicatesCheck$Sensitivity; +Lcom/artemchep/keyguard/common/usecase/CipherExpiringCheck; +Lcom/artemchep/keyguard/common/usecase/CipherFieldSwitchToggle; +Lcom/artemchep/keyguard/common/usecase/CipherIncompleteCheck; +Lcom/artemchep/keyguard/common/usecase/CipherMerge; +Lcom/artemchep/keyguard/common/usecase/CipherRemovePasswordHistory; +Lcom/artemchep/keyguard/common/usecase/CipherRemovePasswordHistoryById; +Lcom/artemchep/keyguard/common/usecase/CipherToolbox; +Lcom/artemchep/keyguard/common/usecase/CipherToolboxImpl; +HSPLcom/artemchep/keyguard/common/usecase/CipherToolboxImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/CipherToolboxImpl;->(Lcom/artemchep/keyguard/common/usecase/FavouriteCipherById;Lcom/artemchep/keyguard/common/usecase/RePromptCipherById;Lcom/artemchep/keyguard/common/usecase/ChangeCipherNameById;Lcom/artemchep/keyguard/common/usecase/ChangeCipherPasswordById;Lcom/artemchep/keyguard/common/usecase/CopyCipherById;Lcom/artemchep/keyguard/common/usecase/MoveCipherToFolderById;Lcom/artemchep/keyguard/common/usecase/RestoreCipherById;Lcom/artemchep/keyguard/common/usecase/TrashCipherById;Lcom/artemchep/keyguard/common/usecase/RemoveCipherById;Lcom/artemchep/keyguard/common/usecase/CipherMerge;)V +HSPLcom/artemchep/keyguard/common/usecase/CipherToolboxImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/common/usecase/CipherToolboxImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/CipherToolboxImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/CipherToolboxImpl$special$$inlined$instance$default$10; +HSPLcom/artemchep/keyguard/common/usecase/CipherToolboxImpl$special$$inlined$instance$default$10;->()V +Lcom/artemchep/keyguard/common/usecase/CipherToolboxImpl$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/common/usecase/CipherToolboxImpl$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/common/usecase/CipherToolboxImpl$special$$inlined$instance$default$3; +HSPLcom/artemchep/keyguard/common/usecase/CipherToolboxImpl$special$$inlined$instance$default$3;->()V +Lcom/artemchep/keyguard/common/usecase/CipherToolboxImpl$special$$inlined$instance$default$4; +HSPLcom/artemchep/keyguard/common/usecase/CipherToolboxImpl$special$$inlined$instance$default$4;->()V +Lcom/artemchep/keyguard/common/usecase/CipherToolboxImpl$special$$inlined$instance$default$5; +HSPLcom/artemchep/keyguard/common/usecase/CipherToolboxImpl$special$$inlined$instance$default$5;->()V +Lcom/artemchep/keyguard/common/usecase/CipherToolboxImpl$special$$inlined$instance$default$6; +HSPLcom/artemchep/keyguard/common/usecase/CipherToolboxImpl$special$$inlined$instance$default$6;->()V +Lcom/artemchep/keyguard/common/usecase/CipherToolboxImpl$special$$inlined$instance$default$7; +HSPLcom/artemchep/keyguard/common/usecase/CipherToolboxImpl$special$$inlined$instance$default$7;->()V +Lcom/artemchep/keyguard/common/usecase/CipherToolboxImpl$special$$inlined$instance$default$8; +HSPLcom/artemchep/keyguard/common/usecase/CipherToolboxImpl$special$$inlined$instance$default$8;->()V +Lcom/artemchep/keyguard/common/usecase/CipherToolboxImpl$special$$inlined$instance$default$9; +HSPLcom/artemchep/keyguard/common/usecase/CipherToolboxImpl$special$$inlined$instance$default$9;->()V +Lcom/artemchep/keyguard/common/usecase/CipherUnsecureUrlAutoFix; +Lcom/artemchep/keyguard/common/usecase/CipherUnsecureUrlCheck; +Lcom/artemchep/keyguard/common/usecase/CipherUrlCheck; +Lcom/artemchep/keyguard/common/usecase/CipherUrlDuplicateCheck; +Lcom/artemchep/keyguard/common/usecase/CleanUpAttachment; +Lcom/artemchep/keyguard/common/usecase/ClearData; +Lcom/artemchep/keyguard/common/usecase/ClearVaultSession; +Lcom/artemchep/keyguard/common/usecase/ConfirmAccessByPasswordUseCase; +Lcom/artemchep/keyguard/common/usecase/CopyCipherById; +Lcom/artemchep/keyguard/common/usecase/CopyText; +HSPLcom/artemchep/keyguard/common/usecase/CopyText;->()V +HSPLcom/artemchep/keyguard/common/usecase/CopyText;->(Lcom/artemchep/keyguard/common/service/clipboard/ClipboardService;Lkotlin/jvm/functions/Function1;)V +Lcom/artemchep/keyguard/common/usecase/DateFormatter; +Lcom/artemchep/keyguard/common/usecase/DeviceEncryptionKeyUseCase; +HSPLcom/artemchep/keyguard/common/usecase/DeviceEncryptionKeyUseCase;->()V +HSPLcom/artemchep/keyguard/common/usecase/DeviceEncryptionKeyUseCase;->(Lcom/artemchep/keyguard/common/service/crypto/CryptoGenerator;Lcom/artemchep/keyguard/common/usecase/DeviceIdUseCase;)V +HSPLcom/artemchep/keyguard/common/usecase/DeviceEncryptionKeyUseCase;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/DeviceEncryptionKeyUseCase;->access$getCryptoGenerator$p(Lcom/artemchep/keyguard/common/usecase/DeviceEncryptionKeyUseCase;)Lcom/artemchep/keyguard/common/service/crypto/CryptoGenerator; +HSPLcom/artemchep/keyguard/common/usecase/DeviceEncryptionKeyUseCase;->invoke()Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/common/usecase/DeviceEncryptionKeyUseCase$invoke$$inlined$effectMap$1; +HSPLcom/artemchep/keyguard/common/usecase/DeviceEncryptionKeyUseCase$invoke$$inlined$effectMap$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/common/usecase/DeviceEncryptionKeyUseCase;)V +HSPLcom/artemchep/keyguard/common/usecase/DeviceEncryptionKeyUseCase$invoke$$inlined$effectMap$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/usecase/DeviceEncryptionKeyUseCase$invoke$$inlined$effectMap$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/DeviceEncryptionKeyUseCase$invoke$$inlined$effectMap$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/DeviceEncryptionKeyUseCase$invoke$$inlined$effectMap$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/DeviceEncryptionKeyUseCase$invoke$$inlined$effectMap$1$1; +HSPLcom/artemchep/keyguard/common/usecase/DeviceEncryptionKeyUseCase$invoke$$inlined$effectMap$1$1;->(Ljava/lang/Object;Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/common/usecase/DeviceEncryptionKeyUseCase;)V +HSPLcom/artemchep/keyguard/common/usecase/DeviceEncryptionKeyUseCase$invoke$$inlined$effectMap$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/usecase/DeviceEncryptionKeyUseCase$invoke$$inlined$effectMap$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/DeviceEncryptionKeyUseCase$invoke$$inlined$effectMap$1$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/DeviceEncryptionKeyUseCase$invoke$$inlined$effectMap$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/DeviceEncryptionKeyUseCase$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/DeviceEncryptionKeyUseCase$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/DeviceEncryptionKeyUseCase$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/common/usecase/DeviceEncryptionKeyUseCase$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/common/usecase/DeviceIdUseCase; +HSPLcom/artemchep/keyguard/common/usecase/DeviceIdUseCase;->()V +HSPLcom/artemchep/keyguard/common/usecase/DeviceIdUseCase;->(Lcom/artemchep/keyguard/common/service/id/IdRepository;)V +HSPLcom/artemchep/keyguard/common/usecase/DeviceIdUseCase;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/DeviceIdUseCase;->access$getDeviceId$p(Lcom/artemchep/keyguard/common/usecase/DeviceIdUseCase;)Ljava/lang/String; +PLcom/artemchep/keyguard/common/usecase/DeviceIdUseCase;->access$getDeviceIdRepository$p(Lcom/artemchep/keyguard/common/usecase/DeviceIdUseCase;)Lcom/artemchep/keyguard/common/service/id/IdRepository; +PLcom/artemchep/keyguard/common/usecase/DeviceIdUseCase;->access$setDeviceId$p(Lcom/artemchep/keyguard/common/usecase/DeviceIdUseCase;Ljava/lang/String;)V +HSPLcom/artemchep/keyguard/common/usecase/DeviceIdUseCase;->getOrSet()Lkotlin/jvm/functions/Function1; +HSPLcom/artemchep/keyguard/common/usecase/DeviceIdUseCase;->invoke()Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/common/usecase/DeviceIdUseCase$getOrSet$$inlined$flatMap$1; +HSPLcom/artemchep/keyguard/common/usecase/DeviceIdUseCase$getOrSet$$inlined$flatMap$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/common/usecase/DeviceIdUseCase;)V +HSPLcom/artemchep/keyguard/common/usecase/DeviceIdUseCase$getOrSet$$inlined$flatMap$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/usecase/DeviceIdUseCase$getOrSet$$inlined$flatMap$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/DeviceIdUseCase$getOrSet$$inlined$flatMap$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/DeviceIdUseCase$getOrSet$$inlined$flatMap$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +PLcom/artemchep/keyguard/common/usecase/DeviceIdUseCase$getOrSet$1$inMemoryId$1$3;->(Ljava/lang/Object;)V +PLcom/artemchep/keyguard/common/usecase/DeviceIdUseCase$getOrSet$1$inMemoryId$1$3;->set(Ljava/lang/Object;)V +PLcom/artemchep/keyguard/common/usecase/DeviceIdUseCase$getOrSet$lambda$5$lambda$4$$inlined$flatTap$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/common/service/id/IdRepository;)V +PLcom/artemchep/keyguard/common/usecase/DeviceIdUseCase$getOrSet$lambda$5$lambda$4$$inlined$flatTap$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +PLcom/artemchep/keyguard/common/usecase/DeviceIdUseCase$getOrSet$lambda$5$lambda$4$$inlined$flatTap$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +PLcom/artemchep/keyguard/common/usecase/DeviceIdUseCase$getOrSet$lambda$5$lambda$4$$inlined$flatTap$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +PLcom/artemchep/keyguard/common/usecase/DeviceIdUseCase$getOrSet$lambda$5$lambda$4$$inlined$flatTap$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/DeviceIdUseCase$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/DeviceIdUseCase$special$$inlined$instance$default$1;->()V +PLcom/artemchep/keyguard/common/usecase/DeviceIdUseCaseKt;->access$getDeviceId()Ljava/lang/String; +PLcom/artemchep/keyguard/common/usecase/DeviceIdUseCaseKt;->getDeviceId()Ljava/lang/String; +Lcom/artemchep/keyguard/common/usecase/DisableBiometric; +Lcom/artemchep/keyguard/common/usecase/DownloadAttachment; +Lcom/artemchep/keyguard/common/usecase/EnableBiometric; +Lcom/artemchep/keyguard/common/usecase/FavouriteCipherById; +Lcom/artemchep/keyguard/common/usecase/GenerateMasterHashUseCase; +Lcom/artemchep/keyguard/common/usecase/GenerateMasterKeyUseCase; +Lcom/artemchep/keyguard/common/usecase/GenerateMasterSaltUseCase; +Lcom/artemchep/keyguard/common/usecase/GetAccountHasError; +Lcom/artemchep/keyguard/common/usecase/GetAccountStatus; +Lcom/artemchep/keyguard/common/usecase/GetAccounts; +Lcom/artemchep/keyguard/common/usecase/GetAccountsHasError; +Lcom/artemchep/keyguard/common/usecase/GetAllowScreenshots; +Lcom/artemchep/keyguard/common/usecase/GetAllowTwoPanelLayoutInLandscape; +Lcom/artemchep/keyguard/common/usecase/GetAllowTwoPanelLayoutInPortrait; +Lcom/artemchep/keyguard/common/usecase/GetAppBuildDate; +Lcom/artemchep/keyguard/common/usecase/GetAppBuildType; +Lcom/artemchep/keyguard/common/usecase/GetAppIcons; +Lcom/artemchep/keyguard/common/usecase/GetAppVersion; +Lcom/artemchep/keyguard/common/usecase/GetAppVersionCode; +Lcom/artemchep/keyguard/common/usecase/GetAppVersionName; +Lcom/artemchep/keyguard/common/usecase/GetAutofillCopyTotp; +Lcom/artemchep/keyguard/common/usecase/GetAutofillInlineSuggestions; +Lcom/artemchep/keyguard/common/usecase/GetAutofillManualSelection; +Lcom/artemchep/keyguard/common/usecase/GetAutofillRespectAutofillOff; +Lcom/artemchep/keyguard/common/usecase/GetAutofillSaveRequest; +Lcom/artemchep/keyguard/common/usecase/GetAutofillSaveUri; +Lcom/artemchep/keyguard/common/usecase/GetBarcodeImage; +Lcom/artemchep/keyguard/common/usecase/GetBiometricRemainingDuration; +Lcom/artemchep/keyguard/common/usecase/GetBiometricTimeout; +Lcom/artemchep/keyguard/common/usecase/GetBiometricTimeoutVariants; +Lcom/artemchep/keyguard/common/usecase/GetCachePremium; +Lcom/artemchep/keyguard/common/usecase/GetCanAddAccount; +Lcom/artemchep/keyguard/common/usecase/GetCanWrite; +Lcom/artemchep/keyguard/common/usecase/GetCheckPwnedPasswords; +Lcom/artemchep/keyguard/common/usecase/GetCheckPwnedServices; +Lcom/artemchep/keyguard/common/usecase/GetCheckTwoFA; +Lcom/artemchep/keyguard/common/usecase/GetCipherOpenedCount; +Lcom/artemchep/keyguard/common/usecase/GetCipherOpenedHistory; +Lcom/artemchep/keyguard/common/usecase/GetCiphers; +Lcom/artemchep/keyguard/common/usecase/GetClipboardAutoClear; +Lcom/artemchep/keyguard/common/usecase/GetClipboardAutoClearVariants; +Lcom/artemchep/keyguard/common/usecase/GetClipboardAutoRefresh; +Lcom/artemchep/keyguard/common/usecase/GetClipboardAutoRefreshVariants; +Lcom/artemchep/keyguard/common/usecase/GetCollections; +Lcom/artemchep/keyguard/common/usecase/GetColors; +Lcom/artemchep/keyguard/common/usecase/GetColorsVariants; +Lcom/artemchep/keyguard/common/usecase/GetConcealFields; +Lcom/artemchep/keyguard/common/usecase/GetDebugPremium; +Lcom/artemchep/keyguard/common/usecase/GetDebugScreenDelay; +Lcom/artemchep/keyguard/common/usecase/GetEmailRelays; +Lcom/artemchep/keyguard/common/usecase/GetEnvSendUrl; +Lcom/artemchep/keyguard/common/usecase/GetFingerprint; +Lcom/artemchep/keyguard/common/usecase/GetFolderTree; +Lcom/artemchep/keyguard/common/usecase/GetFolderTreeById; +Lcom/artemchep/keyguard/common/usecase/GetFolders; +Lcom/artemchep/keyguard/common/usecase/GetFont; +Lcom/artemchep/keyguard/common/usecase/GetFontVariants; +Lcom/artemchep/keyguard/common/usecase/GetGeneratorHistory; +Lcom/artemchep/keyguard/common/usecase/GetGravatarUrl; +Lcom/artemchep/keyguard/common/usecase/GetJustDeleteMeByUrl; +Lcom/artemchep/keyguard/common/usecase/GetKeepScreenOn; +Lcom/artemchep/keyguard/common/usecase/GetLocale; +Lcom/artemchep/keyguard/common/usecase/GetLocaleVariants; +Lcom/artemchep/keyguard/common/usecase/GetMarkdown; +Lcom/artemchep/keyguard/common/usecase/GetMetas; +Lcom/artemchep/keyguard/common/usecase/GetNavAnimation; +Lcom/artemchep/keyguard/common/usecase/GetNavAnimationVariants; +Lcom/artemchep/keyguard/common/usecase/GetNavLabel; +Lcom/artemchep/keyguard/common/usecase/GetOnboardingLastVisitInstant; +Lcom/artemchep/keyguard/common/usecase/GetOrganizations; +Lcom/artemchep/keyguard/common/usecase/GetPassphrase; +Lcom/artemchep/keyguard/common/usecase/GetPassword; +Lcom/artemchep/keyguard/common/usecase/GetPasswordStrength; +Lcom/artemchep/keyguard/common/usecase/GetProducts; +Lcom/artemchep/keyguard/common/usecase/GetProfiles; +Lcom/artemchep/keyguard/common/usecase/GetPurchased; +Lcom/artemchep/keyguard/common/usecase/GetScreenState; +Lcom/artemchep/keyguard/common/usecase/GetSends; +Lcom/artemchep/keyguard/common/usecase/GetShouldRequestAppReview; +Lcom/artemchep/keyguard/common/usecase/GetSubscriptions; +Lcom/artemchep/keyguard/common/usecase/GetSuggestions; +Lcom/artemchep/keyguard/common/usecase/GetTheme; +Lcom/artemchep/keyguard/common/usecase/GetThemeUseAmoledDark; +Lcom/artemchep/keyguard/common/usecase/GetThemeVariants; +Lcom/artemchep/keyguard/common/usecase/GetTotpCode; +Lcom/artemchep/keyguard/common/usecase/GetUseExternalBrowser; +Lcom/artemchep/keyguard/common/usecase/GetVaultLockAfterReboot; +Lcom/artemchep/keyguard/common/usecase/GetVaultLockAfterScreenOff; +Lcom/artemchep/keyguard/common/usecase/GetVaultLockAfterTimeout; +Lcom/artemchep/keyguard/common/usecase/GetVaultLockAfterTimeoutVariants; +Lcom/artemchep/keyguard/common/usecase/GetVaultPersist; +Lcom/artemchep/keyguard/common/usecase/GetVaultSession; +Lcom/artemchep/keyguard/common/usecase/GetWebsiteIcons; +Lcom/artemchep/keyguard/common/usecase/GetWriteAccess; +Lcom/artemchep/keyguard/common/usecase/MergeFolderById; +Lcom/artemchep/keyguard/common/usecase/MessageHub; +Lcom/artemchep/keyguard/common/usecase/MoveCipherToFolderById; +Lcom/artemchep/keyguard/common/usecase/NumberFormatter; +Lcom/artemchep/keyguard/common/usecase/PasskeyTarget; +Lcom/artemchep/keyguard/common/usecase/PasskeyTargetCheck; +Lcom/artemchep/keyguard/common/usecase/PutAccountColorById; +Lcom/artemchep/keyguard/common/usecase/PutAccountMasterPasswordHintById; +Lcom/artemchep/keyguard/common/usecase/PutAccountNameById; +Lcom/artemchep/keyguard/common/usecase/PutAllowScreenshots; +Lcom/artemchep/keyguard/common/usecase/PutAllowTwoPanelLayoutInLandscape; +Lcom/artemchep/keyguard/common/usecase/PutAllowTwoPanelLayoutInPortrait; +Lcom/artemchep/keyguard/common/usecase/PutAppIcons; +Lcom/artemchep/keyguard/common/usecase/PutAutofillCopyTotp; +Lcom/artemchep/keyguard/common/usecase/PutAutofillInlineSuggestions; +Lcom/artemchep/keyguard/common/usecase/PutAutofillManualSelection; +Lcom/artemchep/keyguard/common/usecase/PutAutofillRespectAutofillOff; +Lcom/artemchep/keyguard/common/usecase/PutAutofillSaveRequest; +Lcom/artemchep/keyguard/common/usecase/PutAutofillSaveUri; +Lcom/artemchep/keyguard/common/usecase/PutBiometricTimeout; +Lcom/artemchep/keyguard/common/usecase/PutCachePremium; +Lcom/artemchep/keyguard/common/usecase/PutCheckPwnedPasswords; +Lcom/artemchep/keyguard/common/usecase/PutCheckPwnedServices; +Lcom/artemchep/keyguard/common/usecase/PutCheckTwoFA; +Lcom/artemchep/keyguard/common/usecase/PutClipboardAutoClear; +Lcom/artemchep/keyguard/common/usecase/PutClipboardAutoRefresh; +Lcom/artemchep/keyguard/common/usecase/PutColors; +Lcom/artemchep/keyguard/common/usecase/PutConcealFields; +Lcom/artemchep/keyguard/common/usecase/PutDebugPremium; +Lcom/artemchep/keyguard/common/usecase/PutDebugScreenDelay; +Lcom/artemchep/keyguard/common/usecase/PutFont; +Lcom/artemchep/keyguard/common/usecase/PutKeepScreenOn; +Lcom/artemchep/keyguard/common/usecase/PutLocale; +Lcom/artemchep/keyguard/common/usecase/PutMarkdown; +Lcom/artemchep/keyguard/common/usecase/PutNavAnimation; +Lcom/artemchep/keyguard/common/usecase/PutNavLabel; +Lcom/artemchep/keyguard/common/usecase/PutOnboardingLastVisitInstant; +Lcom/artemchep/keyguard/common/usecase/PutScreenState; +Lcom/artemchep/keyguard/common/usecase/PutTheme; +Lcom/artemchep/keyguard/common/usecase/PutThemeUseAmoledDark; +Lcom/artemchep/keyguard/common/usecase/PutUseExternalBrowser; +Lcom/artemchep/keyguard/common/usecase/PutVaultLockAfterReboot; +Lcom/artemchep/keyguard/common/usecase/PutVaultLockAfterScreenOff; +Lcom/artemchep/keyguard/common/usecase/PutVaultLockAfterTimeout; +Lcom/artemchep/keyguard/common/usecase/PutVaultPersist; +Lcom/artemchep/keyguard/common/usecase/PutVaultSession; +Lcom/artemchep/keyguard/common/usecase/PutWebsiteIcons; +Lcom/artemchep/keyguard/common/usecase/PutWriteAccess; +Lcom/artemchep/keyguard/common/usecase/QueueSyncAll; +Lcom/artemchep/keyguard/common/usecase/QueueSyncById; +Lcom/artemchep/keyguard/common/usecase/RePromptCipherById; +Lcom/artemchep/keyguard/common/usecase/RemoveAccountById; +Lcom/artemchep/keyguard/common/usecase/RemoveAccounts; +Lcom/artemchep/keyguard/common/usecase/RemoveAttachment; +Lcom/artemchep/keyguard/common/usecase/RemoveCipherById; +Lcom/artemchep/keyguard/common/usecase/RemoveEmailRelayById; +Lcom/artemchep/keyguard/common/usecase/RemoveFolderById; +Lcom/artemchep/keyguard/common/usecase/RemoveFolderById$OnCiphersConflict; +Lcom/artemchep/keyguard/common/usecase/RemoveGeneratorHistory; +Lcom/artemchep/keyguard/common/usecase/RemoveGeneratorHistoryById; +Lcom/artemchep/keyguard/common/usecase/RenameFolderById; +Lcom/artemchep/keyguard/common/usecase/RequestAppReview; +Lcom/artemchep/keyguard/common/usecase/RestoreCipherById; +Lcom/artemchep/keyguard/common/usecase/RetryCipher; +Lcom/artemchep/keyguard/common/usecase/RotateDeviceIdUseCase; +Lcom/artemchep/keyguard/common/usecase/ShowMessage; +Lcom/artemchep/keyguard/common/usecase/SupervisorRead; +Lcom/artemchep/keyguard/common/usecase/SyncAll; +Lcom/artemchep/keyguard/common/usecase/SyncById; +Lcom/artemchep/keyguard/common/usecase/TrashCipherByFolderId; +Lcom/artemchep/keyguard/common/usecase/TrashCipherById; +Lcom/artemchep/keyguard/common/usecase/UnlockUseCase; +Lcom/artemchep/keyguard/common/usecase/Watchdog; +Lcom/artemchep/keyguard/common/usecase/WatchdogImpl; +HSPLcom/artemchep/keyguard/common/usecase/WatchdogImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/WatchdogImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/WatchdogImpl;->get()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/common/usecase/WatchdogImpl;->get(Lcom/artemchep/keyguard/common/model/AccountTask;)Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/common/usecase/WatchdogImpl$get$$inlined$map$1; +HSPLcom/artemchep/keyguard/common/usecase/WatchdogImpl$get$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/common/usecase/WatchdogImpl;)V +HSPLcom/artemchep/keyguard/common/usecase/WatchdogImpl$get$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/WatchdogImpl$get$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/common/usecase/WatchdogImpl$get$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lcom/artemchep/keyguard/common/usecase/WatchdogImpl;)V +HSPLcom/artemchep/keyguard/common/usecase/WatchdogImpl$get$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/WatchdogImpl$get$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/common/usecase/WatchdogImpl$get$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/common/usecase/WatchdogImpl$get$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/usecase/WatchdogImpl$get$$inlined$map$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/WatchdogImpl$get$$inlined$map$2; +HSPLcom/artemchep/keyguard/common/usecase/WatchdogImpl$get$$inlined$map$2;->(Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/common/model/AccountTask;)V +HSPLcom/artemchep/keyguard/common/usecase/WatchdogImpl$get$$inlined$map$2;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/WatchdogImpl$get$$inlined$map$2$2; +HSPLcom/artemchep/keyguard/common/usecase/WatchdogImpl$get$$inlined$map$2$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lcom/artemchep/keyguard/common/model/AccountTask;)V +HSPLcom/artemchep/keyguard/common/usecase/WatchdogImpl$get$$inlined$map$2$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/WatchdogImpl$get$$inlined$map$2$2$1; +HSPLcom/artemchep/keyguard/common/usecase/WatchdogImpl$get$$inlined$map$2$2$1;->(Lcom/artemchep/keyguard/common/usecase/WatchdogImpl$get$$inlined$map$2$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/usecase/WatchdogImpl$get$$inlined$map$2$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/WindowCoroutineScope; +Lcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl;->(Lcom/artemchep/keyguard/common/usecase/GenerateMasterHashUseCase;Lcom/artemchep/keyguard/common/usecase/GenerateMasterKeyUseCase;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl;->access$getGenerateMasterHashUseCase$p(Lcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl;)Lcom/artemchep/keyguard/common/usecase/GenerateMasterHashUseCase; +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl;->access$getGenerateMasterKeyUseCase$p(Lcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl;)Lcom/artemchep/keyguard/common/usecase/GenerateMasterKeyUseCase; +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl;->invoke(Lcom/artemchep/keyguard/common/model/MasterPasswordSalt;Lcom/artemchep/keyguard/common/model/MasterPasswordHash;)Lkotlin/jvm/functions/Function1; +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl$invoke$1; +PLcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl$invoke$1;->(Lcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl;Lcom/artemchep/keyguard/common/model/MasterPasswordSalt;Lcom/artemchep/keyguard/common/model/MasterPasswordHash;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl$invoke$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl$invoke$1;->invoke-A0jvUzs([B)Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl$invoke$1$invoke-A0jvUzs$$inlined$flatMap$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl$invoke$1$invoke-A0jvUzs$$inlined$flatMap$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/common/model/MasterPasswordHash;Lcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl;[B)V +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl$invoke$1$invoke-A0jvUzs$$inlined$flatMap$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl$invoke$1$invoke-A0jvUzs$$inlined$flatMap$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl$invoke$1$invoke-A0jvUzs$$inlined$flatMap$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl$invoke$1$invoke-A0jvUzs$$inlined$flatMap$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl$invoke$1$invoke-A0jvUzs$$inlined$map$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl$invoke$1$invoke-A0jvUzs$$inlined$map$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/common/model/MasterPasswordHash;Lcom/artemchep/keyguard/common/model/MasterPasswordSalt;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl$invoke$1$invoke-A0jvUzs$$inlined$map$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl$invoke$1$invoke-A0jvUzs$$inlined$map$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl$invoke$1$invoke-A0jvUzs$$inlined$map$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl$invoke$1$invoke-A0jvUzs$$inlined$map$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl;->(Lcom/artemchep/keyguard/common/usecase/GenerateMasterHashUseCase;Lcom/artemchep/keyguard/common/usecase/GenerateMasterKeyUseCase;Lcom/artemchep/keyguard/common/usecase/GenerateMasterSaltUseCase;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl;->access$getGenerateMasterHashUseCase$p(Lcom/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl;)Lcom/artemchep/keyguard/common/usecase/GenerateMasterHashUseCase; +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl;->access$getGenerateMasterKeyUseCase$p(Lcom/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl;)Lcom/artemchep/keyguard/common/usecase/GenerateMasterKeyUseCase; +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl;->access$getGenerateMasterSaltUseCase$p(Lcom/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl;)Lcom/artemchep/keyguard/common/usecase/GenerateMasterSaltUseCase; +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl;->invoke()Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl$invoke$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl$invoke$1;->(Lcom/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl$invoke$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl$invoke$1;->invoke-A0jvUzs([B)Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl$invoke$1$invoke-A0jvUzs$$inlined$effectMap$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl$invoke$1$invoke-A0jvUzs$$inlined$effectMap$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl;[B)V +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl$invoke$1$invoke-A0jvUzs$$inlined$effectMap$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl$invoke$1$invoke-A0jvUzs$$inlined$effectMap$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl$invoke$1$invoke-A0jvUzs$$inlined$effectMap$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl$invoke$1$invoke-A0jvUzs$$inlined$effectMap$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl$special$$inlined$instance$default$3; +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl$special$$inlined$instance$default$3;->()V +Lcom/artemchep/keyguard/common/usecase/impl/BiometricKeyDecryptUseCaseImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/BiometricKeyDecryptUseCaseImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/BiometricKeyDecryptUseCaseImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/BiometricKeyDecryptUseCaseImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/common/usecase/impl/BiometricKeyEncryptUseCaseImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/BiometricKeyEncryptUseCaseImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/BiometricKeyEncryptUseCaseImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/BiometricKeyEncryptUseCaseImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/common/usecase/impl/CleanUpAttachmentImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/CleanUpAttachmentImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/CleanUpAttachmentImpl;->(Landroid/content/Context;Lcom/artemchep/keyguard/common/service/logging/LogRepository;Lcom/artemchep/keyguard/android/downloader/journal/DownloadRepository;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/CleanUpAttachmentImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/common/usecase/impl/CleanUpAttachmentImpl$Companion; +HSPLcom/artemchep/keyguard/common/usecase/impl/CleanUpAttachmentImpl$Companion;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/CleanUpAttachmentImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/CleanUpAttachmentImpl$Companion;->zzz(Lkotlinx/coroutines/CoroutineScope;Lcom/artemchep/keyguard/android/downloader/journal/DownloadRepository;Lcom/artemchep/keyguard/common/usecase/CleanUpAttachment;)Lkotlinx/coroutines/Job; +Lcom/artemchep/keyguard/common/usecase/impl/CleanUpAttachmentImpl$Companion$zzz$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/CleanUpAttachmentImpl$Companion$zzz$1;->(Lcom/artemchep/keyguard/android/downloader/journal/DownloadRepository;Lkotlinx/coroutines/CoroutineScope;Lcom/artemchep/keyguard/common/usecase/CleanUpAttachment;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/CleanUpAttachmentImpl$Companion$zzz$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/usecase/impl/CleanUpAttachmentImpl$Companion$zzz$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/CleanUpAttachmentImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/CleanUpAttachmentImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/CleanUpAttachmentImpl$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/common/usecase/impl/CleanUpAttachmentImpl$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/common/usecase/impl/CleanUpAttachmentImpl$special$$inlined$instance$default$3; +HSPLcom/artemchep/keyguard/common/usecase/impl/CleanUpAttachmentImpl$special$$inlined$instance$default$3;->()V +Lcom/artemchep/keyguard/common/usecase/impl/ClearVaultSessionImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/ClearVaultSessionImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/ClearVaultSessionImpl;->(Lcom/artemchep/keyguard/common/usecase/PutVaultSession;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/ClearVaultSessionImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/common/usecase/impl/ClearVaultSessionImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/ClearVaultSessionImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/DisableBiometricImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/DisableBiometricImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/DisableBiometricImpl;->(Lcom/artemchep/keyguard/common/service/vault/FingerprintReadWriteRepository;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/DisableBiometricImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/common/usecase/impl/DisableBiometricImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/DisableBiometricImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl;->(Lcom/artemchep/keyguard/common/service/crypto/CryptoGenerator;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl;->access$encode(Lcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl;[B[B)[B +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl;->encode([B[B)[B +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl;->invoke-NTeWIBM([BLcom/artemchep/keyguard/common/model/MasterPasswordSalt;)Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl$Companion; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl$Companion;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl$invoke-NTeWIBM$$inlined$ioEffect$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl$invoke-NTeWIBM$$inlined$ioEffect$1;->(Lkotlin/coroutines/Continuation;Lkotlin/coroutines/CoroutineContext;Lcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl;[BLcom/artemchep/keyguard/common/model/MasterPasswordSalt;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl$invoke-NTeWIBM$$inlined$ioEffect$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl$invoke-NTeWIBM$$inlined$ioEffect$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl$invoke-NTeWIBM$$inlined$ioEffect$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl$invoke-NTeWIBM$$inlined$ioEffect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl$invoke-NTeWIBM$$inlined$ioEffect$1$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl$invoke-NTeWIBM$$inlined$ioEffect$1$1;->(Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl;[BLcom/artemchep/keyguard/common/model/MasterPasswordSalt;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl$invoke-NTeWIBM$$inlined$ioEffect$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl$invoke-NTeWIBM$$inlined$ioEffect$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl$invoke-NTeWIBM$$inlined$ioEffect$1$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl$invoke-NTeWIBM$$inlined$ioEffect$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl$invoke-NTeWIBM$$inlined$map$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl$invoke-NTeWIBM$$inlined$map$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl$invoke-NTeWIBM$$inlined$map$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl$invoke-NTeWIBM$$inlined$map$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl$invoke-NTeWIBM$$inlined$map$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl$invoke-NTeWIBM$$inlined$map$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl;->(Lcom/artemchep/keyguard/common/service/crypto/CryptoGenerator;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl;->access$encode(Lcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl;[B[B)[B +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl;->encode([B[B)[B +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl;->invoke-NTeWIBM([BLcom/artemchep/keyguard/common/model/MasterPasswordHash;)Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl$Companion; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl$Companion;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl$invoke-NTeWIBM$$inlined$ioEffect$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl$invoke-NTeWIBM$$inlined$ioEffect$1;->(Lkotlin/coroutines/Continuation;Lkotlin/coroutines/CoroutineContext;Lcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl;[BLcom/artemchep/keyguard/common/model/MasterPasswordHash;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl$invoke-NTeWIBM$$inlined$ioEffect$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl$invoke-NTeWIBM$$inlined$ioEffect$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl$invoke-NTeWIBM$$inlined$ioEffect$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl$invoke-NTeWIBM$$inlined$ioEffect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl$invoke-NTeWIBM$$inlined$ioEffect$1$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl$invoke-NTeWIBM$$inlined$ioEffect$1$1;->(Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl;[BLcom/artemchep/keyguard/common/model/MasterPasswordHash;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl$invoke-NTeWIBM$$inlined$ioEffect$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl$invoke-NTeWIBM$$inlined$ioEffect$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl$invoke-NTeWIBM$$inlined$ioEffect$1$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl$invoke-NTeWIBM$$inlined$ioEffect$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl$invoke-NTeWIBM$$inlined$map$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl$invoke-NTeWIBM$$inlined$map$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl$invoke-NTeWIBM$$inlined$map$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl$invoke-NTeWIBM$$inlined$map$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl$invoke-NTeWIBM$$inlined$map$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl$invoke-NTeWIBM$$inlined$map$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl;->(Lcom/artemchep/keyguard/common/service/crypto/CryptoGenerator;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl;->access$getCryptoGenerator$p(Lcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl;)Lcom/artemchep/keyguard/common/service/crypto/CryptoGenerator; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl;->invoke()Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl$Companion; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl$Companion;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl$invoke$$inlined$ioEffect$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl$invoke$$inlined$ioEffect$1;->(Lkotlin/coroutines/Continuation;Lkotlin/coroutines/CoroutineContext;Lcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl$invoke$$inlined$ioEffect$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl$invoke$$inlined$ioEffect$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl$invoke$$inlined$ioEffect$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl$invoke$$inlined$ioEffect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl$invoke$$inlined$ioEffect$1$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl$invoke$$inlined$ioEffect$1$1;->(Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl$invoke$$inlined$ioEffect$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl$invoke$$inlined$ioEffect$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl$invoke$$inlined$ioEffect$1$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl$invoke$$inlined$ioEffect$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl$invoke$$inlined$map$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl$invoke$$inlined$map$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl$invoke$$inlined$map$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl$invoke$$inlined$map$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl$invoke$$inlined$map$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl$invoke$$inlined$map$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl;->(Lcom/artemchep/keyguard/common/service/permission/PermissionService;Lcom/artemchep/keyguard/common/usecase/GetAccounts;Lcom/artemchep/keyguard/common/usecase/GetMetas;Lcom/artemchep/keyguard/common/usecase/GetCiphers;Lcom/artemchep/keyguard/common/usecase/GetFolders;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl;->invoke()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$combineToList$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$combineToList$1;->(Ljava/util/List;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$combineToList$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$combineToList$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$combineToList$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$combineToList$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$combineToList$1$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$combineToList$1$1;->(Ljava/util/List;[Ljava/lang/Object;Ljava/util/concurrent/atomic/AtomicInteger;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$combineToList$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$combineToList$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$combineToList$1$1;->invoke(Lkotlinx/coroutines/channels/ProducerScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$combineToList$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$combineToList$1$1$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$combineToList$1$1$1;->(Lkotlinx/coroutines/flow/Flow;[Ljava/lang/Object;ILjava/util/concurrent/atomic/AtomicInteger;Lkotlinx/coroutines/channels/ProducerScope;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$combineToList$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$combineToList$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$combineToList$1$1$1$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$combineToList$1$1$1$1;->([Ljava/lang/Object;ILkotlin/jvm/internal/Ref$BooleanRef;Ljava/util/concurrent/atomic/AtomicInteger;Lkotlinx/coroutines/channels/ProducerScope;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$combineToList$1$1$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$combineToList$1$2; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$combineToList$1$2;->(Ljava/util/concurrent/atomic/AtomicInteger;Lkotlinx/coroutines/flow/FlowCollector;[Ljava/lang/Object;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$combineToList$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$combineToList$1$2;->emit(Lkotlin/Unit;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$map$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$map$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$1;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$1;->invoke(IILjava/util/List;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$hasFailureFlow$1$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$hasFailureFlow$1$1;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$hasFailureFlow$1$1;->invoke(IIILkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$hasFailureFlow$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$hasFailureFlow$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$hasPendingFlow$1$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$hasPendingFlow$1$1;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$hasPendingFlow$1$1;->invoke(IILkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$hasPendingFlow$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$hasPendingFlow$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$11$$inlined$map$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$11$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$11$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$11$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$11$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$11$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$11$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$11$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$11$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$11$$inlined$map$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$11$$inlined$map$2; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$11$$inlined$map$2;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$11$$inlined$map$2;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$11$$inlined$map$2$2; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$11$$inlined$map$2$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$11$$inlined$map$2$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$11$$inlined$map$2$2$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$11$$inlined$map$2$2$1;->(Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$11$$inlined$map$2$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$11$$inlined$map$2$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$6$$inlined$map$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$6$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$6$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$6$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$6$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$6$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$6$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$6$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$6$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$6$$inlined$map$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$6$$inlined$map$2; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$6$$inlined$map$2;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$6$$inlined$map$2;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$6$$inlined$map$2$2; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$6$$inlined$map$2$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$6$$inlined$map$2$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$6$$inlined$map$2$2$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$6$$inlined$map$2$2$1;->(Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$6$$inlined$map$2$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$6$$inlined$map$2$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$6$$inlined$map$3; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$6$$inlined$map$3;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$6$$inlined$map$3;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$6$$inlined$map$3$2; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$6$$inlined$map$3$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$6$$inlined$map$3$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$6$$inlined$map$3$2$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$6$$inlined$map$3$2$1;->(Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$6$$inlined$map$3$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$6$$inlined$map$3$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$special$$inlined$instance$default$3; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$special$$inlined$instance$default$3;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$special$$inlined$instance$default$4; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$special$$inlined$instance$default$4;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$special$$inlined$instance$default$5; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$special$$inlined$instance$default$5;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetAllowScreenshotsImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAllowScreenshotsImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAllowScreenshotsImpl;->(Lcom/artemchep/keyguard/common/service/settings/SettingsReadRepository;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAllowScreenshotsImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAllowScreenshotsImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAllowScreenshotsImpl;->invoke()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/common/usecase/impl/GetAllowScreenshotsImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAllowScreenshotsImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetAllowTwoPanelLayoutInLandscapeImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAllowTwoPanelLayoutInLandscapeImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAllowTwoPanelLayoutInLandscapeImpl;->(Lcom/artemchep/keyguard/common/service/settings/SettingsReadRepository;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAllowTwoPanelLayoutInLandscapeImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAllowTwoPanelLayoutInLandscapeImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAllowTwoPanelLayoutInLandscapeImpl;->invoke()Lkotlinx/coroutines/flow/StateFlow; +Lcom/artemchep/keyguard/common/usecase/impl/GetAllowTwoPanelLayoutInLandscapeImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAllowTwoPanelLayoutInLandscapeImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetAllowTwoPanelLayoutInPortraitImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAllowTwoPanelLayoutInPortraitImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAllowTwoPanelLayoutInPortraitImpl;->(Lcom/artemchep/keyguard/common/service/settings/SettingsReadRepository;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAllowTwoPanelLayoutInPortraitImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAllowTwoPanelLayoutInPortraitImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAllowTwoPanelLayoutInPortraitImpl;->invoke()Lkotlinx/coroutines/flow/StateFlow; +Lcom/artemchep/keyguard/common/usecase/impl/GetAllowTwoPanelLayoutInPortraitImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAllowTwoPanelLayoutInPortraitImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetAppIconsImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAppIconsImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAppIconsImpl;->(Lcom/artemchep/keyguard/common/service/settings/SettingsReadRepository;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAppIconsImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAppIconsImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAppIconsImpl;->invoke()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/common/usecase/impl/GetAppIconsImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAppIconsImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetBiometricRemainingDurationImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetBiometricRemainingDurationImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetBiometricRemainingDurationImpl;->(Lcom/artemchep/keyguard/common/service/vault/SessionMetadataReadRepository;Lcom/artemchep/keyguard/common/usecase/GetBiometricTimeout;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetBiometricRemainingDurationImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/common/usecase/impl/GetBiometricRemainingDurationImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetBiometricRemainingDurationImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetBiometricRemainingDurationImpl$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetBiometricRemainingDurationImpl$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetBiometricTimeoutImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetBiometricTimeoutImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetBiometricTimeoutImpl;->(Lcom/artemchep/keyguard/common/service/settings/SettingsReadRepository;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetBiometricTimeoutImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/common/usecase/impl/GetBiometricTimeoutImpl$Companion; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetBiometricTimeoutImpl$Companion;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetBiometricTimeoutImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/common/usecase/impl/GetBiometricTimeoutImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetBiometricTimeoutImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetBiometricTimeoutImpl$special$$inlined$map$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetBiometricTimeoutImpl$special$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +Lcom/artemchep/keyguard/common/usecase/impl/GetCachePremiumImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetCachePremiumImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetCachePremiumImpl;->(Lcom/artemchep/keyguard/common/service/settings/SettingsReadRepository;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetCachePremiumImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetCachePremiumImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetCachePremiumImpl;->invoke()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/common/usecase/impl/GetCachePremiumImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetCachePremiumImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetCanWriteImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetCanWriteImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetCanWriteImpl;->(Lcom/artemchep/keyguard/common/usecase/GetPurchased;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetCanWriteImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetCanWriteImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetCanWriteImpl;->invoke()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/common/usecase/impl/GetCanWriteImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetCanWriteImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetColorsImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetColorsImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetColorsImpl;->(Lcom/artemchep/keyguard/common/service/settings/SettingsReadRepository;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetColorsImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetColorsImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetColorsImpl;->invoke()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/common/usecase/impl/GetColorsImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetColorsImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetConcealFieldsImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetConcealFieldsImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetConcealFieldsImpl;->(Lcom/artemchep/keyguard/common/service/settings/SettingsReadRepository;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetConcealFieldsImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetConcealFieldsImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetConcealFieldsImpl;->invoke()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/common/usecase/impl/GetConcealFieldsImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetConcealFieldsImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetDebugPremiumImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetDebugPremiumImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetDebugPremiumImpl;->(Lcom/artemchep/keyguard/common/service/settings/SettingsReadRepository;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetDebugPremiumImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetDebugPremiumImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetDebugPremiumImpl;->invoke()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/common/usecase/impl/GetDebugPremiumImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetDebugPremiumImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetDebugScreenDelayImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetDebugScreenDelayImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetDebugScreenDelayImpl;->(Lcom/artemchep/keyguard/common/service/settings/SettingsReadRepository;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetDebugScreenDelayImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetDebugScreenDelayImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetDebugScreenDelayImpl;->invoke()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/common/usecase/impl/GetDebugScreenDelayImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetDebugScreenDelayImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetFontImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetFontImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetFontImpl;->(Lcom/artemchep/keyguard/common/service/settings/SettingsReadRepository;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetFontImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetFontImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetFontImpl;->invoke()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/common/usecase/impl/GetFontImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetFontImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetNavAnimationImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetNavAnimationImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetNavAnimationImpl;->(Lcom/artemchep/keyguard/common/service/settings/SettingsReadRepository;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetNavAnimationImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetNavAnimationImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetNavAnimationImpl;->invoke()Lkotlinx/coroutines/flow/StateFlow; +Lcom/artemchep/keyguard/common/usecase/impl/GetNavAnimationImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetNavAnimationImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetNavAnimationImpl$special$$inlined$map$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetNavAnimationImpl$special$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetNavAnimationImpl$special$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetNavAnimationImpl$special$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetNavAnimationImpl$special$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetNavAnimationImpl$special$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetNavAnimationImpl$special$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetNavAnimationImpl$special$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/common/usecase/impl/GetNavAnimationImpl$special$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/common/usecase/impl/GetNavLabelImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetNavLabelImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetNavLabelImpl;->(Lcom/artemchep/keyguard/common/service/settings/SettingsReadRepository;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetNavLabelImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetNavLabelImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetNavLabelImpl;->invoke()Lkotlinx/coroutines/flow/StateFlow; +Lcom/artemchep/keyguard/common/usecase/impl/GetNavLabelImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetNavLabelImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl;->(Landroid/content/Context;Lcom/artemchep/keyguard/common/service/subscription/SubscriptionService;Lcom/artemchep/keyguard/common/usecase/GetDebugPremium;Lcom/artemchep/keyguard/common/usecase/GetCachePremium;Lcom/artemchep/keyguard/common/usecase/PutCachePremium;Lcom/artemchep/keyguard/common/usecase/WindowCoroutineScope;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl;->hasGooglePlayServices()Z +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl;->invoke()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl;->localStatusFlow()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl;->upstreamStatusFlow()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$localStatusFlow$$inlined$map$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$localStatusFlow$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +Lcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$sharedFlow$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$sharedFlow$1;->(Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$sharedFlow$2; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$sharedFlow$2;->(Lcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$special$$inlined$instance$default$3; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$special$$inlined$instance$default$3;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$special$$inlined$instance$default$4; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$special$$inlined$instance$default$4;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$special$$inlined$instance$default$5; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$special$$inlined$instance$default$5;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$special$$inlined$instance$default$6; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$special$$inlined$instance$default$6;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$special$$inlined$map$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$special$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +Lcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$upstreamStatusFlow$$inlined$map$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$upstreamStatusFlow$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +Lcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$upstreamStatusFlow$1$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$upstreamStatusFlow$1$1;->(Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$upstreamStatusFlow$1$2; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$upstreamStatusFlow$1$2;->(Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$upstreamStatusFlow$lambda$3$$inlined$mapNotNull$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$upstreamStatusFlow$lambda$3$$inlined$mapNotNull$1;->(Lkotlinx/coroutines/flow/Flow;)V +Lcom/artemchep/keyguard/common/usecase/impl/GetScreenStateImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetScreenStateImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetScreenStateImpl;->(Lcom/artemchep/keyguard/common/service/state/StateRepository;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetScreenStateImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetScreenStateImpl;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetScreenStateImpl;->invoke(Ljava/lang/String;)Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/common/usecase/impl/GetScreenStateImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetScreenStateImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetSuggestionsImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetSuggestionsImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetSuggestionsImpl;->(Ljava/util/List;Lcom/artemchep/keyguard/common/usecase/CipherUrlCheck;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetSuggestionsImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/common/usecase/impl/GetSuggestionsImpl$special$$inlined$allInstances$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetSuggestionsImpl$special$$inlined$allInstances$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetSuggestionsImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetSuggestionsImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetThemeImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetThemeImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetThemeImpl;->(Lcom/artemchep/keyguard/common/service/settings/SettingsReadRepository;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetThemeImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetThemeImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetThemeImpl;->invoke()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/common/usecase/impl/GetThemeImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetThemeImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetThemeUseAmoledDarkImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetThemeUseAmoledDarkImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetThemeUseAmoledDarkImpl;->(Lcom/artemchep/keyguard/common/service/settings/SettingsReadRepository;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetThemeUseAmoledDarkImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetThemeUseAmoledDarkImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetThemeUseAmoledDarkImpl;->invoke()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/common/usecase/impl/GetThemeUseAmoledDarkImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetThemeUseAmoledDarkImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetTotpCodeImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetTotpCodeImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetTotpCodeImpl;->(Lcom/artemchep/keyguard/common/service/totp/TotpService;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetTotpCodeImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/common/usecase/impl/GetTotpCodeImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetTotpCodeImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetUseExternalBrowserImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetUseExternalBrowserImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetUseExternalBrowserImpl;->(Lcom/artemchep/keyguard/common/service/settings/SettingsReadRepository;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetUseExternalBrowserImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetUseExternalBrowserImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetUseExternalBrowserImpl;->invoke()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/common/usecase/impl/GetUseExternalBrowserImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetUseExternalBrowserImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetVaultLockAfterScreenOffImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultLockAfterScreenOffImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultLockAfterScreenOffImpl;->(Lcom/artemchep/keyguard/common/service/settings/SettingsReadRepository;Lcom/artemchep/keyguard/common/usecase/GetVaultPersist;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultLockAfterScreenOffImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultLockAfterScreenOffImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultLockAfterScreenOffImpl;->invoke()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/common/usecase/impl/GetVaultLockAfterScreenOffImpl$sharedFlow$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultLockAfterScreenOffImpl$sharedFlow$1;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultLockAfterScreenOffImpl$sharedFlow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultLockAfterScreenOffImpl$sharedFlow$1;->invoke(ZZLkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultLockAfterScreenOffImpl$sharedFlow$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetVaultLockAfterScreenOffImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultLockAfterScreenOffImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetVaultLockAfterScreenOffImpl$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultLockAfterScreenOffImpl$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetVaultPersistImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultPersistImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultPersistImpl;->(Lcom/artemchep/keyguard/common/service/settings/SettingsReadRepository;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultPersistImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultPersistImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultPersistImpl;->invoke()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/common/usecase/impl/GetVaultPersistImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultPersistImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl;->(Lorg/kodein/di/DI;Lcom/artemchep/keyguard/common/service/vault/SessionReadWriteRepository;Lcom/artemchep/keyguard/common/service/vault/KeyReadWriteRepository;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl;->access$getKeyReadWriteRepository$p(Lcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl;)Lcom/artemchep/keyguard/common/service/vault/KeyReadWriteRepository; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl;->access$getSessionReadWriteRepository$p(Lcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl;)Lcom/artemchep/keyguard/common/service/vault/SessionReadWriteRepository; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl;->invoke()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl$Companion; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl$Companion;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl$sharedFlow$1$2; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl$sharedFlow$1$2;->(Lcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl$sharedFlow$1$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl$sharedFlow$1$2;->invoke(Lcom/artemchep/keyguard/common/model/MasterSession;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl$sharedFlow$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl$sharedFlow$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl$sharedFlow$lambda$2$$inlined$map$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl$sharedFlow$lambda$2$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl$sharedFlow$lambda$2$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl$sharedFlow$lambda$2$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl$sharedFlow$lambda$2$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl$sharedFlow$lambda$2$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl$sharedFlow$lambda$2$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl$sharedFlow$lambda$2$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl$sharedFlow$lambda$2$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl$special$$inlined$flatMapLatest$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl$special$$inlined$flatMapLatest$1;->(Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl$special$$inlined$flatMapLatest$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl$special$$inlined$flatMapLatest$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl$special$$inlined$flatMapLatest$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetWebsiteIconsImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetWebsiteIconsImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetWebsiteIconsImpl;->(Lcom/artemchep/keyguard/common/service/settings/SettingsReadRepository;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetWebsiteIconsImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetWebsiteIconsImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetWebsiteIconsImpl;->invoke()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/common/usecase/impl/GetWebsiteIconsImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetWebsiteIconsImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetWriteAccessImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetWriteAccessImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetWriteAccessImpl;->(Lcom/artemchep/keyguard/common/service/settings/SettingsReadRepository;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetWriteAccessImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/common/usecase/impl/GetWriteAccessImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetWriteAccessImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/MessageHubImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/MessageHubImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/MessageHubImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/MessageHubImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/MessageHubImpl;->register(Ljava/lang/String;Lkotlin/jvm/functions/Function1;)Lkotlin/jvm/functions/Function0; +Lcom/artemchep/keyguard/common/usecase/impl/MessageHubImpl$Entry; +HSPLcom/artemchep/keyguard/common/usecase/impl/MessageHubImpl$Entry;->(Ljava/lang/String;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V +Lcom/artemchep/keyguard/common/usecase/impl/MessageHubImpl$register$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/MessageHubImpl$register$1;->(Lcom/artemchep/keyguard/common/usecase/impl/MessageHubImpl;Lcom/artemchep/keyguard/common/usecase/impl/MessageHubImpl$Entry;)V +Lcom/artemchep/keyguard/common/usecase/impl/PasskeyTargetCheckImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/PasskeyTargetCheckImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/PasskeyTargetCheckImpl;->(Lcom/artemchep/keyguard/common/service/tld/TldService;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/PasskeyTargetCheckImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/common/usecase/impl/PasskeyTargetCheckImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/PasskeyTargetCheckImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/PutCachePremiumImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/PutCachePremiumImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/PutCachePremiumImpl;->(Lcom/artemchep/keyguard/common/service/settings/SettingsReadWriteRepository;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/PutCachePremiumImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/common/usecase/impl/PutCachePremiumImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/PutCachePremiumImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/PutScreenStateImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/PutScreenStateImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/PutScreenStateImpl;->(Lcom/artemchep/keyguard/common/service/state/StateRepository;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/PutScreenStateImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/PutScreenStateImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/PutScreenStateImpl;->invoke(Ljava/lang/String;Ljava/util/Map;)Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/common/usecase/impl/PutScreenStateImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/PutScreenStateImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/PutVaultSessionImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/PutVaultSessionImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/PutVaultSessionImpl;->(Lcom/artemchep/keyguard/common/service/vault/SessionReadWriteRepository;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/PutVaultSessionImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/PutVaultSessionImpl;->access$getSessionReadWriteRepository$p(Lcom/artemchep/keyguard/common/usecase/impl/PutVaultSessionImpl;)Lcom/artemchep/keyguard/common/service/vault/SessionReadWriteRepository; +HSPLcom/artemchep/keyguard/common/usecase/impl/PutVaultSessionImpl;->invoke(Lcom/artemchep/keyguard/common/model/MasterSession;)Lkotlin/jvm/functions/Function1; +HSPLcom/artemchep/keyguard/common/usecase/impl/PutVaultSessionImpl;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/PutVaultSessionImpl$invoke$$inlined$ioEffect$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/PutVaultSessionImpl$invoke$$inlined$ioEffect$1;->(Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/common/usecase/impl/PutVaultSessionImpl;Lcom/artemchep/keyguard/common/model/MasterSession;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/PutVaultSessionImpl$invoke$$inlined$ioEffect$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/usecase/impl/PutVaultSessionImpl$invoke$$inlined$ioEffect$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/PutVaultSessionImpl$invoke$$inlined$ioEffect$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/PutVaultSessionImpl$invoke$$inlined$ioEffect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/PutVaultSessionImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/PutVaultSessionImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;->(Lorg/kodein/di/DI;Lcom/artemchep/keyguard/common/usecase/BiometricStatusUseCase;Lcom/artemchep/keyguard/common/usecase/GetVaultSession;Lcom/artemchep/keyguard/common/usecase/PutVaultSession;Lcom/artemchep/keyguard/common/usecase/DisableBiometric;Lcom/artemchep/keyguard/common/service/vault/FingerprintReadWriteRepository;Lcom/artemchep/keyguard/common/service/vault/SessionMetadataReadWriteRepository;Lcom/artemchep/keyguard/common/usecase/GetBiometricRemainingDuration;Lcom/artemchep/keyguard/common/usecase/BiometricKeyEncryptUseCase;Lcom/artemchep/keyguard/common/usecase/BiometricKeyDecryptUseCase;Lcom/artemchep/keyguard/common/usecase/AuthConfirmMasterKeyUseCase;Lcom/artemchep/keyguard/common/usecase/AuthGenerateMasterKeyUseCase;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;->access$create(Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;Lcom/artemchep/keyguard/common/model/AuthResult;Lcom/artemchep/keyguard/common/model/FingerprintBiometric;)Lkotlin/jvm/functions/Function1; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;->access$createCreateVaultState(Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;Lcom/artemchep/keyguard/common/model/BiometricStatus;)Lcom/artemchep/keyguard/common/model/VaultState; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;->access$createMainVaultState(Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;Lcom/artemchep/keyguard/common/model/Fingerprint;Lcom/artemchep/keyguard/common/model/BiometricStatus;Lcom/artemchep/keyguard/common/model/MasterKey;Lorg/kodein/di/DI;)Lcom/artemchep/keyguard/common/model/VaultState; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;->access$getDi$p(Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;)Lorg/kodein/di/DI; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;->access$getGenerateMasterKey$p(Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;)Lkotlin/jvm/functions/Function1; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;->access$unlock(Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;Lcom/artemchep/keyguard/common/model/MasterKey;)Lkotlin/jvm/functions/Function1; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;->access$writeLastPasswordUseTimestamp(Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;)Lkotlin/jvm/functions/Function1; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;->create(Lcom/artemchep/keyguard/common/model/AuthResult;Lcom/artemchep/keyguard/common/model/FingerprintBiometric;)Lkotlin/jvm/functions/Function1; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;->createCreateVaultState(Lcom/artemchep/keyguard/common/model/BiometricStatus;)Lcom/artemchep/keyguard/common/model/VaultState; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;->createMainVaultState(Lcom/artemchep/keyguard/common/model/Fingerprint;Lcom/artemchep/keyguard/common/model/BiometricStatus;Lcom/artemchep/keyguard/common/model/MasterKey;Lorg/kodein/di/DI;)Lcom/artemchep/keyguard/common/model/VaultState; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;->createUnlockVaultState(Lcom/artemchep/keyguard/common/model/Fingerprint;Lcom/artemchep/keyguard/common/model/BiometricStatus;Ljava/lang/String;)Lcom/artemchep/keyguard/common/model/VaultState; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;->getBiometricStatusFlow()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;->invoke()Lkotlinx/coroutines/flow/SharedFlow; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;->unlock(Lcom/artemchep/keyguard/common/model/MasterKey;)Lkotlin/jvm/functions/Function1; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;->writeLastPasswordUseTimestamp()Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$ComplexBiometricStatus; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$ComplexBiometricStatus;->(Lcom/artemchep/keyguard/common/model/BiometricStatus;Lcom/artemchep/keyguard/common/model/BiometricStatus;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$ComplexBiometricStatus;->getForCreate()Lcom/artemchep/keyguard/common/model/BiometricStatus; +PLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$create$$inlined$flatMap$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;Lcom/artemchep/keyguard/common/model/AuthResult;)V +PLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$create$$inlined$flatMap$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +PLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$create$$inlined$flatMap$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +PLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$create$$inlined$flatMap$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +PLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$create$$inlined$flatMap$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createCreateVaultState$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createCreateVaultState$1;->(Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createCreateVaultState$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createCreateVaultState$1;->invoke(Ljava/lang/String;)Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createCreateVaultState$1$invoke$$inlined$flatMap$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createCreateVaultState$1$invoke$$inlined$flatMap$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createCreateVaultState$1$invoke$$inlined$flatMap$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createCreateVaultState$1$invoke$$inlined$flatMap$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createCreateVaultState$1$invoke$$inlined$flatMap$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createCreateVaultState$1$invoke$$inlined$flatMap$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createCreateVaultState$1$invoke$$inlined$flatTap$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createCreateVaultState$1$invoke$$inlined$flatTap$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createCreateVaultState$1$invoke$$inlined$flatTap$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createCreateVaultState$1$invoke$$inlined$flatTap$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createCreateVaultState$1$invoke$$inlined$flatTap$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createCreateVaultState$1$invoke$$inlined$flatTap$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createMainVaultState$$inlined$instance$default$1; +PLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createMainVaultState$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createMainVaultState$getCreateIo$1; +PLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createMainVaultState$getCreateIo$1;->(Lkotlin/jvm/functions/Function1;Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;Lkotlin/Lazy;)V +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createMainVaultState$unlockMasterKey$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createMainVaultState$unlockMasterKey$1;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createMainVaultState$unlockMasterKey$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createUnlockVaultState$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createUnlockVaultState$1;->(Lkotlin/jvm/functions/Function1;Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createUnlockVaultState$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createUnlockVaultState$1;->invoke(Ljava/lang/String;)Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createUnlockVaultState$1$invoke$$inlined$flatMap$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createUnlockVaultState$1$invoke$$inlined$flatMap$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createUnlockVaultState$1$invoke$$inlined$flatMap$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createUnlockVaultState$1$invoke$$inlined$flatMap$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createUnlockVaultState$1$invoke$$inlined$flatMap$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createUnlockVaultState$1$invoke$$inlined$flatMap$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createUnlockVaultState$1$invoke$$inlined$flatTap$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createUnlockVaultState$1$invoke$$inlined$flatTap$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createUnlockVaultState$1$invoke$$inlined$flatTap$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createUnlockVaultState$1$invoke$$inlined$flatTap$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createUnlockVaultState$1$invoke$$inlined$flatTap$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createUnlockVaultState$1$invoke$$inlined$flatTap$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createUnlockVaultState$1$invoke$$inlined$map$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createUnlockVaultState$1$invoke$$inlined$map$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createUnlockVaultState$1$invoke$$inlined$map$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createUnlockVaultState$1$invoke$$inlined$map$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createUnlockVaultState$1$invoke$$inlined$map$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createUnlockVaultState$1$invoke$$inlined$map$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createUnlockVaultState$unlockMasterKey$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createUnlockVaultState$unlockMasterKey$1;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createUnlockVaultState$unlockMasterKey$1;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createUnlockVaultState$unlockMasterKey$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createUnlockVaultState$unlockMasterKey$1;->invoke-xshU9yM(Ljava/lang/String;)[B +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$generateMasterKey$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$generateMasterKey$1;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$generateMasterKey$1;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$generateMasterKey$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$generateMasterKey$1;->invoke-xshU9yM(Ljava/lang/String;)[B +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$getBiometricStatusFlow$$inlined$flatMapLatest$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$getBiometricStatusFlow$$inlined$flatMapLatest$1;->(Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$getBiometricStatusFlow$$inlined$flatMapLatest$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$getBiometricStatusFlow$$inlined$flatMapLatest$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$getBiometricStatusFlow$$inlined$flatMapLatest$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$getBiometricStatusFlow$lambda$4$$inlined$map$3; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$getBiometricStatusFlow$lambda$4$$inlined$map$3;->(Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/common/model/BiometricStatus;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$getBiometricStatusFlow$lambda$4$$inlined$map$3;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$getBiometricStatusFlow$lambda$4$$inlined$map$3$2; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$getBiometricStatusFlow$lambda$4$$inlined$map$3$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lcom/artemchep/keyguard/common/model/BiometricStatus;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$getBiometricStatusFlow$lambda$4$$inlined$map$3$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$getBiometricStatusFlow$lambda$4$$inlined$map$3$2$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$getBiometricStatusFlow$lambda$4$$inlined$map$3$2$1;->(Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$getBiometricStatusFlow$lambda$4$$inlined$map$3$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$sharedFlow$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$sharedFlow$1;->(Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$sharedFlow$1;->invoke(Lcom/artemchep/keyguard/common/model/Fingerprint;Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$ComplexBiometricStatus;Lcom/artemchep/keyguard/common/model/MasterSession;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$sharedFlow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$sharedFlow$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$special$$inlined$instance$default$10; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$special$$inlined$instance$default$10;->()V +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$special$$inlined$instance$default$11; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$special$$inlined$instance$default$11;->()V +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$special$$inlined$instance$default$3; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$special$$inlined$instance$default$3;->()V +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$special$$inlined$instance$default$4; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$special$$inlined$instance$default$4;->()V +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$special$$inlined$instance$default$5; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$special$$inlined$instance$default$5;->()V +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$special$$inlined$instance$default$6; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$special$$inlined$instance$default$6;->()V +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$special$$inlined$instance$default$7; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$special$$inlined$instance$default$7;->()V +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$special$$inlined$instance$default$8; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$special$$inlined$instance$default$8;->()V +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$special$$inlined$instance$default$9; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$special$$inlined$instance$default$9;->()V +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$unlock$$inlined$ioEffect$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$unlock$$inlined$ioEffect$1;->(Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;Lcom/artemchep/keyguard/common/model/MasterKey;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$unlock$$inlined$ioEffect$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$unlock$$inlined$ioEffect$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$unlock$$inlined$ioEffect$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$unlock$$inlined$ioEffect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$unlock$1$moduleDi$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$unlock$1$moduleDi$1;->(Lcom/artemchep/keyguard/common/model/MasterKey;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$unlock$1$moduleDi$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$unlock$1$moduleDi$1;->invoke(Lorg/kodein/di/DI$Builder;)V +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$unlock$lambda$12$$inlined$subDI$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$unlock$lambda$12$$inlined$subDI$1;->(Lorg/kodein/di/DI;Lorg/kodein/di/Copy;Lorg/kodein/di/DI$Module;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$unlock$lambda$12$$inlined$subDI$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$unlock$lambda$12$$inlined$subDI$1;->invoke(Lorg/kodein/di/DI$MainBuilder;)V +Lcom/artemchep/keyguard/common/usecase/impl/WindowCoroutineScopeImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/WindowCoroutineScopeImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/WindowCoroutineScopeImpl;->(Lkotlinx/coroutines/CoroutineScope;Lcom/artemchep/keyguard/common/usecase/ShowMessage;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/WindowCoroutineScopeImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/WindowCoroutineScopeImpl;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext; +Lcom/artemchep/keyguard/common/usecase/impl/WindowCoroutineScopeImpl$special$$inlined$CoroutineExceptionHandler$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/WindowCoroutineScopeImpl$special$$inlined$CoroutineExceptionHandler$1;->(Lkotlinx/coroutines/CoroutineExceptionHandler$Key;Lcom/artemchep/keyguard/common/usecase/impl/WindowCoroutineScopeImpl;)V +Lcom/artemchep/keyguard/common/usecase/impl/WindowCoroutineScopeImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/WindowCoroutineScopeImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/util/flow/EventFlow; +HSPLcom/artemchep/keyguard/common/util/flow/EventFlow;->()V +HSPLcom/artemchep/keyguard/common/util/flow/EventFlow;->(Lkotlin/coroutines/CoroutineContext;)V +HSPLcom/artemchep/keyguard/common/util/flow/EventFlow;->(Lkotlin/coroutines/CoroutineContext;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/common/util/flow/EventFlow;->access$getChannels$p(Lcom/artemchep/keyguard/common/util/flow/EventFlow;)Ljava/util/Queue; +HSPLcom/artemchep/keyguard/common/util/flow/EventFlow;->asFlow()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/common/util/flow/EventFlow;->collect$suspendImpl(Lcom/artemchep/keyguard/common/util/flow/EventFlow;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/util/flow/EventFlow;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/util/flow/EventFlow;->emit(Ljava/lang/Object;)V +HSPLcom/artemchep/keyguard/common/util/flow/EventFlow;->getMonitor()Lcom/artemchep/keyguard/common/util/flow/EventFlow; +HSPLcom/artemchep/keyguard/common/util/flow/EventFlow;->onActive()V +HSPLcom/artemchep/keyguard/common/util/flow/EventFlow;->onInactive()V +Lcom/artemchep/keyguard/common/util/flow/EventFlow$asFlow$1; +HSPLcom/artemchep/keyguard/common/util/flow/EventFlow$asFlow$1;->(Lcom/artemchep/keyguard/common/util/flow/EventFlow;)V +HSPLcom/artemchep/keyguard/common/util/flow/EventFlow$asFlow$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/util/flow/EventFlow$asFlow$1;->invoke(Lkotlinx/coroutines/channels/SendChannel;)V +Lcom/artemchep/keyguard/common/util/flow/EventFlow$asFlow$2; +HSPLcom/artemchep/keyguard/common/util/flow/EventFlow$asFlow$2;->(Lcom/artemchep/keyguard/common/util/flow/EventFlow;)V +HSPLcom/artemchep/keyguard/common/util/flow/EventFlow$asFlow$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/util/flow/EventFlow$asFlow$2;->invoke(Lkotlinx/coroutines/channels/SendChannel;)V +Lcom/artemchep/keyguard/common/util/flow/EventFlow$emit$1; +HSPLcom/artemchep/keyguard/common/util/flow/EventFlow$emit$1;->(Ljava/util/List;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/util/flow/EventFlow$emit$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/util/flow/EventFlow$emit$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/util/flow/EventFlowKt; +HSPLcom/artemchep/keyguard/common/util/flow/EventFlowKt;->access$flowWithLifecycle(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/common/util/flow/EventFlowKt;->flowWithLifecycle(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/common/util/flow/EventFlowKt$flowWithLifecycle$1; +HSPLcom/artemchep/keyguard/common/util/flow/EventFlowKt$flowWithLifecycle$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/util/flow/EventFlowKt$flowWithLifecycle$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/util/flow/EventFlowKt$flowWithLifecycle$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/util/flow/EventFlowKt$flowWithLifecycle$1;->invoke(Lkotlinx/coroutines/channels/ProducerScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/util/flow/EventFlowKt$flowWithLifecycle$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/util/flow/EventFlowKt$flowWithLifecycle$1$1$1; +HSPLcom/artemchep/keyguard/common/util/flow/EventFlowKt$flowWithLifecycle$1$1$1;->(Lkotlinx/coroutines/CancellableContinuation;)V +HSPLcom/artemchep/keyguard/common/util/flow/EventFlowKt$flowWithLifecycle$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/util/flow/EventFlowKt$flowWithLifecycle$1$1$1;->invoke(Ljava/lang/Throwable;)V +Lcom/artemchep/keyguard/common/util/flow/ReadonlyStateFlow; +HSPLcom/artemchep/keyguard/common/util/flow/ReadonlyStateFlow;->(Lkotlinx/coroutines/flow/StateFlow;Lkotlinx/coroutines/Job;)V +HSPLcom/artemchep/keyguard/common/util/flow/ReadonlyStateFlow;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/util/flow/ReadonlyStateFlow;->getValue()Ljava/lang/Object; +Lcom/artemchep/keyguard/common/util/flow/StateInKt; +HSPLcom/artemchep/keyguard/common/util/flow/StateInKt;->()V +HSPLcom/artemchep/keyguard/common/util/flow/StateInKt;->launchSharing(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/MutableStateFlow;Lkotlinx/coroutines/flow/SharingStarted;)Lkotlinx/coroutines/Job; +HSPLcom/artemchep/keyguard/common/util/flow/StateInKt;->persistingStateIn(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/SharingStarted;Ljava/lang/Object;)Lkotlinx/coroutines/flow/StateFlow; +Lcom/artemchep/keyguard/common/util/flow/StateInKt$launchSharing$1; +HSPLcom/artemchep/keyguard/common/util/flow/StateInKt$launchSharing$1;->(Lkotlinx/coroutines/flow/SharingStarted;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/MutableStateFlow;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/util/flow/StateInKt$launchSharing$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/util/flow/StateInKt$launchSharing$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/util/flow/StateInKt$launchSharing$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/util/flow/StateInKt$launchSharing$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/util/flow/StateInKt$launchSharing$1$2; +HSPLcom/artemchep/keyguard/common/util/flow/StateInKt$launchSharing$1$2;->(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/MutableStateFlow;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/util/flow/StateInKt$launchSharing$1$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/util/flow/StateInKt$launchSharing$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/util/flow/StateInKt$launchSharing$1$2;->invoke(Lkotlinx/coroutines/flow/SharingCommand;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/util/flow/StateInKt$launchSharing$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/util/flow/StateInKt$launchSharing$1$2$WhenMappings; +HSPLcom/artemchep/keyguard/common/util/flow/StateInKt$launchSharing$1$2$WhenMappings;->()V +Lcom/artemchep/keyguard/copy/Base32ServiceJvm; +HSPLcom/artemchep/keyguard/copy/Base32ServiceJvm;->()V +HSPLcom/artemchep/keyguard/copy/Base32ServiceJvm;->()V +HSPLcom/artemchep/keyguard/copy/Base32ServiceJvm;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/copy/Base64ServiceJvm; +HSPLcom/artemchep/keyguard/copy/Base64ServiceJvm;->()V +HSPLcom/artemchep/keyguard/copy/Base64ServiceJvm;->()V +HSPLcom/artemchep/keyguard/copy/Base64ServiceJvm;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/copy/Base64ServiceJvm;->decode(Ljava/lang/String;)[B +HSPLcom/artemchep/keyguard/copy/Base64ServiceJvm;->decode([B)[B +HSPLcom/artemchep/keyguard/copy/Base64ServiceJvm;->encode([B)[B +Lcom/artemchep/keyguard/copy/ClearDataAndroid; +HSPLcom/artemchep/keyguard/copy/ClearDataAndroid;->()V +HSPLcom/artemchep/keyguard/copy/ClearDataAndroid;->(Landroid/app/Application;)V +HSPLcom/artemchep/keyguard/copy/ClearDataAndroid;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/copy/ClearDataAndroid$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/copy/ClearDataAndroid$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/copy/ClipboardServiceAndroid; +HSPLcom/artemchep/keyguard/copy/ClipboardServiceAndroid;->()V +HSPLcom/artemchep/keyguard/copy/ClipboardServiceAndroid;->(Landroid/app/Application;Landroid/content/ClipboardManager;)V +HSPLcom/artemchep/keyguard/copy/ClipboardServiceAndroid;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/copy/ClipboardServiceAndroid$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/copy/ClipboardServiceAndroid$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/copy/ClipboardServiceAndroid$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/copy/ClipboardServiceAndroid$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/copy/ConnectivityServiceAndroid; +HSPLcom/artemchep/keyguard/copy/ConnectivityServiceAndroid;->()V +HSPLcom/artemchep/keyguard/copy/ConnectivityServiceAndroid;->(Landroid/content/Context;)V +HSPLcom/artemchep/keyguard/copy/ConnectivityServiceAndroid;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/copy/ConnectivityServiceAndroid$availableFlow$1; +HSPLcom/artemchep/keyguard/copy/ConnectivityServiceAndroid$availableFlow$1;->(Lcom/artemchep/keyguard/copy/ConnectivityServiceAndroid;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/copy/ConnectivityServiceAndroid$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/copy/ConnectivityServiceAndroid$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/copy/DateFormatterAndroid; +HSPLcom/artemchep/keyguard/copy/DateFormatterAndroid;->()V +HSPLcom/artemchep/keyguard/copy/DateFormatterAndroid;->()V +HSPLcom/artemchep/keyguard/copy/DateFormatterAndroid;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/copy/GetPasswordStrengthJvm; +HSPLcom/artemchep/keyguard/copy/GetPasswordStrengthJvm;->()V +HSPLcom/artemchep/keyguard/copy/GetPasswordStrengthJvm;->(Lcom/artemchep/keyguard/common/service/wordlist/WordlistService;)V +HSPLcom/artemchep/keyguard/copy/GetPasswordStrengthJvm;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/copy/GetPasswordStrengthJvm$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/copy/GetPasswordStrengthJvm$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/copy/GetPasswordStrengthJvm$zxcvbn$2; +HSPLcom/artemchep/keyguard/copy/GetPasswordStrengthJvm$zxcvbn$2;->()V +HSPLcom/artemchep/keyguard/copy/GetPasswordStrengthJvm$zxcvbn$2;->()V +Lcom/artemchep/keyguard/copy/LinkInfoExtractorAndroid; +HSPLcom/artemchep/keyguard/copy/LinkInfoExtractorAndroid;->()V +HSPLcom/artemchep/keyguard/copy/LinkInfoExtractorAndroid;->(Landroid/content/pm/PackageManager;)V +Lcom/artemchep/keyguard/copy/LinkInfoExtractorExecute; +Lcom/artemchep/keyguard/copy/LinkInfoExtractorLaunch; +Lcom/artemchep/keyguard/copy/LogRepositoryAndroid; +HSPLcom/artemchep/keyguard/copy/LogRepositoryAndroid;->()V +HSPLcom/artemchep/keyguard/copy/LogRepositoryAndroid;->()V +HSPLcom/artemchep/keyguard/copy/LogRepositoryAndroid;->add(Ljava/lang/String;Ljava/lang/String;Lcom/artemchep/keyguard/common/service/logging/LogLevel;)Lkotlin/jvm/functions/Function1; +HSPLcom/artemchep/keyguard/copy/LogRepositoryAndroid;->post(Ljava/lang/String;Ljava/lang/String;Lcom/artemchep/keyguard/common/service/logging/LogLevel;)V +Lcom/artemchep/keyguard/copy/LogRepositoryAndroid$add$$inlined$ioEffect$1; +HSPLcom/artemchep/keyguard/copy/LogRepositoryAndroid$add$$inlined$ioEffect$1;->(Lkotlin/coroutines/Continuation;Ljava/lang/String;Ljava/lang/String;)V +HSPLcom/artemchep/keyguard/copy/LogRepositoryAndroid$add$$inlined$ioEffect$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/copy/LogRepositoryAndroid$add$$inlined$ioEffect$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/copy/LogRepositoryAndroid$add$$inlined$ioEffect$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/copy/LogRepositoryAndroid$add$$inlined$ioEffect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/copy/PermissionServiceAndroid; +HSPLcom/artemchep/keyguard/copy/PermissionServiceAndroid;->()V +HSPLcom/artemchep/keyguard/copy/PermissionServiceAndroid;->(Landroid/content/Context;)V +HSPLcom/artemchep/keyguard/copy/PermissionServiceAndroid;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/copy/PermissionServiceAndroid;->access$checkPermission(Lcom/artemchep/keyguard/copy/PermissionServiceAndroid;Ljava/lang/String;)Lcom/artemchep/keyguard/common/service/permission/PermissionState; +HSPLcom/artemchep/keyguard/copy/PermissionServiceAndroid;->checkPermission(Ljava/lang/String;)Lcom/artemchep/keyguard/common/service/permission/PermissionState; +HSPLcom/artemchep/keyguard/copy/PermissionServiceAndroid;->getState(Lcom/artemchep/keyguard/common/service/permission/Permission;)Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/copy/PermissionServiceAndroid$Companion; +HSPLcom/artemchep/keyguard/copy/PermissionServiceAndroid$Companion;->()V +HSPLcom/artemchep/keyguard/copy/PermissionServiceAndroid$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/copy/PermissionServiceAndroid$checkPermission$1; +HSPLcom/artemchep/keyguard/copy/PermissionServiceAndroid$checkPermission$1;->(Ljava/lang/Object;)V +Lcom/artemchep/keyguard/copy/PermissionServiceAndroid$getState$$inlined$map$1; +HSPLcom/artemchep/keyguard/copy/PermissionServiceAndroid$getState$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/copy/PermissionServiceAndroid;Lcom/artemchep/keyguard/common/service/permission/Permission;)V +HSPLcom/artemchep/keyguard/copy/PermissionServiceAndroid$getState$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/copy/PermissionServiceAndroid$getState$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/copy/PermissionServiceAndroid$getState$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lcom/artemchep/keyguard/copy/PermissionServiceAndroid;Lcom/artemchep/keyguard/common/service/permission/Permission;)V +HSPLcom/artemchep/keyguard/copy/PermissionServiceAndroid$getState$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/copy/PermissionServiceAndroid$getState$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/copy/PermissionServiceAndroid$getState$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/copy/PermissionServiceAndroid$getState$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/copy/PermissionServiceAndroid$getState$1; +HSPLcom/artemchep/keyguard/copy/PermissionServiceAndroid$getState$1;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/copy/PermissionServiceAndroid$getState$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/copy/PermissionServiceAndroid$getState$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/copy/PermissionServiceAndroid$getState$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/copy/PermissionServiceAndroid$getState$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/copy/PermissionServiceAndroid$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/copy/PermissionServiceAndroid$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/copy/PowerServiceAndroid; +HSPLcom/artemchep/keyguard/copy/PowerServiceAndroid;->()V +HSPLcom/artemchep/keyguard/copy/PowerServiceAndroid;->(Landroid/app/Application;)V +HSPLcom/artemchep/keyguard/copy/PowerServiceAndroid;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/copy/PowerServiceAndroid;->getScreenState()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/copy/PowerServiceAndroid;->getScreenState()Lkotlinx/coroutines/flow/SharedFlow; +Lcom/artemchep/keyguard/copy/PowerServiceAndroid$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/copy/PowerServiceAndroid$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/copy/QueueSyncAllAndroid; +HSPLcom/artemchep/keyguard/copy/QueueSyncAllAndroid;->()V +HSPLcom/artemchep/keyguard/copy/QueueSyncAllAndroid;->(Landroid/content/Context;)V +HSPLcom/artemchep/keyguard/copy/QueueSyncAllAndroid;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/copy/QueueSyncAllAndroid;->access$getContext$p(Lcom/artemchep/keyguard/copy/QueueSyncAllAndroid;)Landroid/content/Context; +HSPLcom/artemchep/keyguard/copy/QueueSyncAllAndroid;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/copy/QueueSyncAllAndroid;->invoke()Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/copy/QueueSyncAllAndroid$invoke$$inlined$ioEffect$1; +HSPLcom/artemchep/keyguard/copy/QueueSyncAllAndroid$invoke$$inlined$ioEffect$1;->(Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/copy/QueueSyncAllAndroid;)V +HSPLcom/artemchep/keyguard/copy/QueueSyncAllAndroid$invoke$$inlined$ioEffect$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/copy/QueueSyncAllAndroid$invoke$$inlined$ioEffect$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/copy/QueueSyncAllAndroid$invoke$$inlined$ioEffect$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/copy/QueueSyncAllAndroid$invoke$$inlined$ioEffect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/copy/QueueSyncAllAndroid$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/copy/QueueSyncAllAndroid$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/copy/QueueSyncByIdAndroid; +HSPLcom/artemchep/keyguard/copy/QueueSyncByIdAndroid;->()V +HSPLcom/artemchep/keyguard/copy/QueueSyncByIdAndroid;->(Landroid/content/Context;)V +HSPLcom/artemchep/keyguard/copy/QueueSyncByIdAndroid;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/copy/QueueSyncByIdAndroid$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/copy/QueueSyncByIdAndroid$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/copy/SharedPreferencesStoreFactory; +Lcom/artemchep/keyguard/copy/SharedPreferencesStoreFactoryDefault; +HSPLcom/artemchep/keyguard/copy/SharedPreferencesStoreFactoryDefault;->()V +HSPLcom/artemchep/keyguard/copy/SharedPreferencesStoreFactoryDefault;->()V +HSPLcom/artemchep/keyguard/copy/SharedPreferencesStoreFactoryDefault;->getStore(Lorg/kodein/di/DI;Lcom/artemchep/keyguard/common/service/Files;)Lcom/artemchep/keyguard/common/service/keyvalue/KeyValueStore; +Lcom/artemchep/keyguard/copy/SharedPreferencesStoreFactoryDefault$getStore$$inlined$instance$1; +HSPLcom/artemchep/keyguard/copy/SharedPreferencesStoreFactoryDefault$getStore$$inlined$instance$1;->()V +Lcom/artemchep/keyguard/copy/SharedPreferencesStoreFactoryDefault$getStore$$inlined$instance$2; +HSPLcom/artemchep/keyguard/copy/SharedPreferencesStoreFactoryDefault$getStore$$inlined$instance$2;->()V +Lcom/artemchep/keyguard/copy/SubscriptionServiceAndroid; +HSPLcom/artemchep/keyguard/copy/SubscriptionServiceAndroid;->()V +HSPLcom/artemchep/keyguard/copy/SubscriptionServiceAndroid;->(Lcom/artemchep/keyguard/billing/BillingManager;)V +HSPLcom/artemchep/keyguard/copy/SubscriptionServiceAndroid;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/copy/SubscriptionServiceAndroid;->getReceiptFlow()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/copy/SubscriptionServiceAndroid;->purchased()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/copy/SubscriptionServiceAndroid$Companion; +HSPLcom/artemchep/keyguard/copy/SubscriptionServiceAndroid$Companion;->()V +HSPLcom/artemchep/keyguard/copy/SubscriptionServiceAndroid$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/copy/SubscriptionServiceAndroid$getReceiptFlow$$inlined$flatMapLatest$1; +HSPLcom/artemchep/keyguard/copy/SubscriptionServiceAndroid$getReceiptFlow$$inlined$flatMapLatest$1;->(Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/copy/SubscriptionServiceAndroid;)V +Lcom/artemchep/keyguard/copy/SubscriptionServiceAndroid$purchased$$inlined$map$1; +HSPLcom/artemchep/keyguard/copy/SubscriptionServiceAndroid$purchased$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +Lcom/artemchep/keyguard/copy/SubscriptionServiceAndroid$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/copy/SubscriptionServiceAndroid$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/copy/TextServiceAndroid; +HSPLcom/artemchep/keyguard/copy/TextServiceAndroid;->()V +HSPLcom/artemchep/keyguard/copy/TextServiceAndroid;->(Landroid/content/Context;)V +HSPLcom/artemchep/keyguard/copy/TextServiceAndroid;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/copy/TextServiceAndroid$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/copy/TextServiceAndroid$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/copy/download/DownloadClientJvm; +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt;->diFingerprintRepositoryModule()Lorg/kodein/di/DI$Module; +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1;->invoke(Lorg/kodein/di/DI$Builder;)V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$1; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$1;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$1;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$10; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$10;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$10;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$10;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$10;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetPurchased; +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$11; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$11;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$11;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$11;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$11;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/CleanUpAttachment; +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$12; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$12;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$12;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$12;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$12;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/service/clipboard/ClipboardService; +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$13; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$13;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$13;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$13;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$13;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/service/connectivity/ConnectivityService; +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$14; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$14;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$14;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$14;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$14;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/service/power/PowerService; +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$15; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$15;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$15;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$15;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$15;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/copy/PermissionServiceAndroid; +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$16; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$16;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$16;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$16;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$16;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/service/permission/PermissionService; +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$16$invoke$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$16$invoke$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$17; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$17;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$17;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$17;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$17;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/copy/LinkInfoExtractorAndroid; +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$17$invoke$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$17$invoke$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$18; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$18;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$18;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$19; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$19;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$19;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$2; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$2;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$2;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$2;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/BiometricStatusUseCase; +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$20; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$20;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$20;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$20;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$20;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/service/text/TextService; +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$21; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$21;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$21;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$22; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$22;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$22;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$22;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$22;->invoke(Lorg/kodein/di/DirectDI;)Landroid/content/pm/PackageManager; +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$22$invoke$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$22$invoke$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$23; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$23;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$23;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$24; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$24;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$24;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$25; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$25;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$25;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$25;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$25;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/android/downloader/journal/DownloadRepository; +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$26; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$26;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$26;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$27; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$27;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$27;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$27;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$27;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/service/subscription/SubscriptionService; +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$28; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$28;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$28;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$28;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$28;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/ClearData; +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$29; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$29;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$29;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$29;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$29;->invoke(Lorg/kodein/di/bindings/BindingDI;Lcom/artemchep/keyguard/common/service/Files;)Lcom/artemchep/keyguard/common/service/keyvalue/KeyValueStore; +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$29$invoke$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$29$invoke$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$3; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$3;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$3;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$30; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$30;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$30;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$30;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$30;->invoke(Lorg/kodein/di/bindings/BindingDI;Lcom/artemchep/keyguard/common/service/Files;)Ldb_key_value/crypto_prefs/SecurePrefKeyValueStore; +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$30$invoke$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$30$invoke$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$31; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$31;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$31;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$31;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$31;->invoke(Lorg/kodein/di/bindings/BindingDI;Lcom/artemchep/keyguard/common/service/Files;)Ldb_key_value/shared_prefs/SharedPrefsKeyValueStore; +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$31$invoke$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$31$invoke$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$32; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$32;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$32;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$32;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$32;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/copy/SharedPreferencesStoreFactory; +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$33; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$33;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$33;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$33;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$33;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager; +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$33$invoke$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$33$invoke$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$33$invoke$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$33$invoke$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$34; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$34;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$34;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$34;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$34;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/service/logging/LogRepository; +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$4; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$4;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$4;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$4;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$4;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetBiometricRemainingDuration; +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$5; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$5;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$5;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$5;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$5;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/DisableBiometric; +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$6; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$6;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$6;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$7; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$7;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$7;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$8; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$8;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$8;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$9; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$9;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$9;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$9;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$9;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetSuggestions; +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bind$default$1; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bind$default$1;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bind$default$2; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bind$default$2;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bind$default$3; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bind$default$3;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindProvider$default$1; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindProvider$default$1;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindProvider$default$2; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindProvider$default$2;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindProvider$default$3; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindProvider$default$3;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$1; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$1;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$10; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$10;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$11; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$11;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$12; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$12;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$13; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$13;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$14; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$14;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$15; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$15;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$16; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$16;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$17; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$17;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$18; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$18;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$19; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$19;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$2; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$2;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$20; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$20;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$21; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$21;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$22; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$22;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$23; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$23;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$24; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$24;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$25; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$25;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$26; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$26;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$27; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$27;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$28; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$28;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$3; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$3;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$4; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$4;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$5; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$5;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$6; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$6;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$7; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$7;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$8; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$8;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$9; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$9;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$factory$1; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$factory$1;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$factory$2; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$factory$2;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$multiton$default$1; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$multiton$default$1;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$multiton$default$2; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$multiton$default$2;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$multiton$default$3; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$multiton$default$3;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$multiton$default$4; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$multiton$default$4;->()V +Lcom/artemchep/keyguard/core/session/usecase/BiometricStatusUseCaseImpl; +HSPLcom/artemchep/keyguard/core/session/usecase/BiometricStatusUseCaseImpl;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/BiometricStatusUseCaseImpl;->(Landroid/app/Application;)V +HSPLcom/artemchep/keyguard/core/session/usecase/BiometricStatusUseCaseImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/core/session/usecase/BiometricStatusUseCaseImpl;->hasStrongBiometric()Z +HSPLcom/artemchep/keyguard/core/session/usecase/BiometricStatusUseCaseImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/BiometricStatusUseCaseImpl;->invoke()Lkotlinx/coroutines/flow/MutableStateFlow; +Lcom/artemchep/keyguard/core/session/usecase/BiometricStatusUseCaseImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/core/session/usecase/BiometricStatusUseCaseImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt; +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt;->createSubDi(Lorg/kodein/di/DI$Builder;Lcom/artemchep/keyguard/common/model/MasterKey;)V +Lcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$$inlined$bindSingleton$default$1; +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$$inlined$bindSingleton$default$1;->()V +Lcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$$inlined$bindSingleton$default$2; +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$$inlined$bindSingleton$default$2;->()V +Lcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$$inlined$bindSingleton$default$3; +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$$inlined$bindSingleton$default$3;->()V +Lcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$$inlined$bindSingleton$default$4; +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$$inlined$bindSingleton$default$4;->()V +Lcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$1; +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$1;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$1;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$1;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/QueueSyncAll; +Lcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$2; +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$2;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$2;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$2;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/QueueSyncById; +Lcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$3; +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$3;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$3;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$3;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/NotificationsWorker; +Lcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$4; +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$4;->(Lcom/artemchep/keyguard/common/model/MasterKey;)V +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$4;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$4;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/core/store/DatabaseManager; +Lcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$4$invoke$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$4$invoke$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$4$invoke$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$4$invoke$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$4$invoke$$inlined$instance$default$3; +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$4$invoke$$inlined$instance$default$3;->()V +Lcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$4$invoke$$inlined$instance$default$4; +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$4$invoke$$inlined$instance$default$4;->()V +Lcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$4$invoke$$inlined$instance$default$5; +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$4$invoke$$inlined$instance$default$5;->()V +Lcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$4$invoke$$inlined$instance$default$6; +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$4$invoke$$inlined$instance$default$6;->()V +Lcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$4$sqlManager$1; +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$4$sqlManager$1;->(Lcom/artemchep/keyguard/core/store/DatabaseManagerAndroid;Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager;)V +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$4$sqlManager$1;->invoke(Lcom/artemchep/keyguard/data/Database;)Lkotlin/jvm/functions/Function1; +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$4$sqlManager$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$4$sqlManager$1$2; +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$4$sqlManager$1$2;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$4$sqlManager$1$2;->()V +Lcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$4$sqlManager$1$invoke$$inlined$flatMap$1; +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$4$sqlManager$1$invoke$$inlined$flatMap$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager;Lcom/artemchep/keyguard/data/Database;)V +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$4$sqlManager$1$invoke$$inlined$flatMap$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$4$sqlManager$1$invoke$$inlined$flatMap$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$4$sqlManager$1$invoke$$inlined$flatMap$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$4$sqlManager$1$invoke$$inlined$flatMap$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/session/usecase/SqlManagerFile2; +HSPLcom/artemchep/keyguard/core/session/usecase/SqlManagerFile2;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SqlManagerFile2;->(Landroid/content/Context;Lkotlin/jvm/functions/Function1;)V +HSPLcom/artemchep/keyguard/core/session/usecase/SqlManagerFile2;->access$getContext$p(Lcom/artemchep/keyguard/core/session/usecase/SqlManagerFile2;)Landroid/content/Context; +HSPLcom/artemchep/keyguard/core/session/usecase/SqlManagerFile2;->access$getOnCreate$p(Lcom/artemchep/keyguard/core/session/usecase/SqlManagerFile2;)Lkotlin/jvm/functions/Function1; +HSPLcom/artemchep/keyguard/core/session/usecase/SqlManagerFile2;->create(Lcom/artemchep/keyguard/common/model/MasterKey;Lkotlin/jvm/functions/Function1;)Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/core/session/usecase/SqlManagerFile2$Callback; +HSPLcom/artemchep/keyguard/core/session/usecase/SqlManagerFile2$Callback;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SqlManagerFile2$Callback;->onConfigure(Landroidx/sqlite/db/SupportSQLiteDatabase;)V +Lcom/artemchep/keyguard/core/session/usecase/SqlManagerFile2$Helper; +HSPLcom/artemchep/keyguard/core/session/usecase/SqlManagerFile2$Helper;->(Lapp/cash/sqldelight/db/SqlDriver;Lcom/artemchep/keyguard/data/Database;Landroidx/sqlite/db/SupportSQLiteOpenHelper;)V +HSPLcom/artemchep/keyguard/core/session/usecase/SqlManagerFile2$Helper;->getDatabase()Lcom/artemchep/keyguard/data/Database; +Lcom/artemchep/keyguard/core/session/usecase/SqlManagerFile2$create$$inlined$ioEffect$1; +HSPLcom/artemchep/keyguard/core/session/usecase/SqlManagerFile2$create$$inlined$ioEffect$1;->(Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/common/model/MasterKey;Lcom/artemchep/keyguard/core/session/usecase/SqlManagerFile2;Lkotlin/jvm/functions/Function1;)V +HSPLcom/artemchep/keyguard/core/session/usecase/SqlManagerFile2$create$$inlined$ioEffect$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/core/session/usecase/SqlManagerFile2$create$$inlined$ioEffect$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SqlManagerFile2$create$$inlined$ioEffect$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SqlManagerFile2$create$$inlined$ioEffect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt;->createSubDi2(Lorg/kodein/di/DI$Builder;Lcom/artemchep/keyguard/common/model/MasterKey;)V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$1; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$1;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$10; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$10;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$11; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$11;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$12; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$12;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$13; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$13;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$14; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$14;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$15; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$15;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$16; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$16;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$17; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$17;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$18; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$18;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$19; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$19;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$2; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$2;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$20; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$20;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$21; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$21;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$22; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$22;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$23; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$23;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$24; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$24;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$25; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$25;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$26; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$26;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$27; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$27;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$28; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$28;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$29; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$29;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$3; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$3;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$30; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$30;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$31; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$31;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$32; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$32;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$33; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$33;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$34; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$34;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$35; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$35;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$36; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$36;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$37; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$37;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$38; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$38;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$39; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$39;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$4; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$4;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$40; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$40;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$41; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$41;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$42; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$42;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$43; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$43;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$44; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$44;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$45; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$45;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$46; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$46;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$47; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$47;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$48; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$48;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$49; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$49;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$5; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$5;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$50; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$50;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$51; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$51;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$52; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$52;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$53; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$53;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$54; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$54;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$55; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$55;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$56; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$56;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$57; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$57;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$58; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$58;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$59; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$59;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$6; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$6;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$60; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$60;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$61; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$61;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$62; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$62;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$63; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$63;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$64; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$64;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$65; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$65;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$66; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$66;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$67; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$67;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$68; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$68;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$69; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$69;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$7; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$7;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$70; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$70;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$71; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$71;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$72; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$72;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$73; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$73;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$74; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$74;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$75; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$75;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$76; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$76;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$77; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$77;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$78; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$78;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$79; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$79;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$8; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$8;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$80; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$80;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$81; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$81;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$82; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$82;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$83; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$83;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$84; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$84;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$85; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$85;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$86; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$86;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$87; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$87;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$88; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$88;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$89; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$89;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$9; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$9;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$90; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$90;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$91; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$91;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$92; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$92;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$93; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$93;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$94; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$94;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$95; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$95;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$96; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$96;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$97; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$97;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$98; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$98;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$99; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$99;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$1; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$1;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$1;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$10; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$10;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$10;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$11; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$11;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$11;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$11;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$11;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetCiphers; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$12; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$12;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$12;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$13; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$13;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$13;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$13;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$13;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetCollections; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$14; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$14;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$14;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$14;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$14;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetOrganizations; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$15; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$15;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$15;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$16; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$16;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$16;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$16;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$16;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetFolders; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$17; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$17;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$17;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$17;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$17;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetFolderTree; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$18; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$18;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$18;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$19; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$19;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$19;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$19;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$19;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetProfiles; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$2; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$2;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$2;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$20; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$20;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$20;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$20;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$20;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetMetas; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$21; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$21;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$21;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$22; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$22;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$22;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$23; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$23;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$23;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$24; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$24;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$24;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$25; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$25;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$25;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$26; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$26;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$26;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$26;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$26;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyCipherById; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$27; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$27;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$27;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$27;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$27;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyFolderById; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$28; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$28;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$28;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$29; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$29;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$29;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$29;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$29;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyDatabase; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$3; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$3;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$3;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$30; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$30;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$30;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$30;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$30;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/TrashCipherById; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$31; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$31;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$31;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$32; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$32;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$32;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$32;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$32;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/RestoreCipherById; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$33; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$33;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$33;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$33;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$33;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/MoveCipherToFolderById; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$34; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$34;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$34;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$34;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$34;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/RemoveCipherById; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$35; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$35;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$35;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$36; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$36;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$36;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$37; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$37;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$37;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$37;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$37;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/ChangeCipherPasswordById; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$38; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$38;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$38;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$38;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$38;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/ChangeCipherNameById; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$39; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$39;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$39;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$4; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$4;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$4;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$40; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$40;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$40;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$41; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$41;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$41;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$42; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$42;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$42;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$42;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$42;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/CipherToolbox; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$43; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$43;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$43;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$44; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$44;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$44;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$45; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$45;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$45;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$45;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$45;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/CipherMerge; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$46; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$46;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$46;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$47; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$47;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$47;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$48; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$48;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$48;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$49; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$49;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$49;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$49;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$49;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/RenameFolderById; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$5; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$5;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$5;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$50; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$50;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$50;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$51; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$51;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$51;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$52; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$52;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$52;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$53; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$53;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$53;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$53;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$53;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/AddFolder; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$54; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$54;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$54;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$55; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$55;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$55;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$56; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$56;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$56;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$57; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$57;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$57;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$58; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$58;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$58;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$59; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$59;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$59;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$6; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$6;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$6;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$60; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$60;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$60;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$61; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$61;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$61;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$62; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$62;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$62;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$63; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$63;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$63;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$64; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$64;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$64;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$65; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$65;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$65;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$65;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$65;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetCipherOpenedHistory; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$66; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$66;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$66;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$67; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$67;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$67;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$68; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$68;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$68;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$68;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$68;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/android/downloader/journal/CipherHistoryOpenedRepository; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$69; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$69;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$69;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$7; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$7;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$7;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$7;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$7;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetAccounts; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$70; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$70;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$70;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$71; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$71;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$71;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$72; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$72;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$72;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$73; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$73;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$73;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$74; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$74;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$74;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$75; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$75;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$75;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$76; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$76;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$76;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$77; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$77;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$77;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$78; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$78;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$78;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$79; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$79;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$79;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$79;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$79;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/FavouriteCipherById; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$8; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$8;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$8;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$8;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$8;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetAccountStatus; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$80; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$80;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$80;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$80;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$80;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/RePromptCipherById; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$81; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$81;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$81;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$81;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$81;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/CopyCipherById; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$82; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$82;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$82;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$83; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$83;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$83;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$84; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$84;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$84;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$84;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$84;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/SyncAll; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$85; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$85;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$85;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$86; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$86;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$86;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$86;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$86;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/provider/bitwarden/usecase/internal/SyncByToken; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$87; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$87;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$87;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$87;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$87;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/WatchdogImpl; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$88; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$88;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$88;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$88;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$88;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/Watchdog; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$88$invoke$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$88$invoke$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$89; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$89;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$89;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$89;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$89;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/SupervisorRead; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$89$invoke$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$89$invoke$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$9; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$9;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$9;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$90; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$90;->(Lcom/artemchep/keyguard/common/model/MasterKey;)V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$91; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$91;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$91;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$91;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$91;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenTokenRepository; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$92; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$92;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$92;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$93; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$93;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$93;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$93;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$93;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenCipherRepository; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$94; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$94;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$94;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$94;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$94;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenCollectionRepository; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$95; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$95;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$95;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$95;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$95;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenOrganizationRepository; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$96; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$96;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$96;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$96;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$96;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenFolderRepository; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$97; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$97;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$97;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$97;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$97;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenProfileRepository; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$98; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$98;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$98;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$98;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$98;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenMetaRepository; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$99; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$99;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$99;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$99;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$99;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/core/store/DatabaseSyncer; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$99$invoke$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$99$invoke$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/core/store/BitwardenCipherToStringAdapter; +HSPLcom/artemchep/keyguard/core/store/BitwardenCipherToStringAdapter;->(Lkotlinx/serialization/json/Json;)V +Lcom/artemchep/keyguard/core/store/BitwardenCollectionToStringAdapter; +HSPLcom/artemchep/keyguard/core/store/BitwardenCollectionToStringAdapter;->(Lkotlinx/serialization/json/Json;)V +Lcom/artemchep/keyguard/core/store/BitwardenFolderToStringAdapter; +HSPLcom/artemchep/keyguard/core/store/BitwardenFolderToStringAdapter;->(Lkotlinx/serialization/json/Json;)V +Lcom/artemchep/keyguard/core/store/BitwardenMetaToStringAdapter; +HSPLcom/artemchep/keyguard/core/store/BitwardenMetaToStringAdapter;->(Lkotlinx/serialization/json/Json;)V +Lcom/artemchep/keyguard/core/store/BitwardenOrganizationToStringAdapter; +HSPLcom/artemchep/keyguard/core/store/BitwardenOrganizationToStringAdapter;->(Lkotlinx/serialization/json/Json;)V +Lcom/artemchep/keyguard/core/store/BitwardenProfileToStringAdapter; +HSPLcom/artemchep/keyguard/core/store/BitwardenProfileToStringAdapter;->(Lkotlinx/serialization/json/Json;)V +Lcom/artemchep/keyguard/core/store/BitwardenSendToStringAdapter; +HSPLcom/artemchep/keyguard/core/store/BitwardenSendToStringAdapter;->(Lkotlinx/serialization/json/Json;)V +Lcom/artemchep/keyguard/core/store/BitwardenTokenToStringAdapter; +HSPLcom/artemchep/keyguard/core/store/BitwardenTokenToStringAdapter;->(Lkotlinx/serialization/json/Json;)V +Lcom/artemchep/keyguard/core/store/DatabaseDispatcher; +HSPLcom/artemchep/keyguard/core/store/DatabaseDispatcher;->()V +HSPLcom/artemchep/keyguard/core/store/DatabaseDispatcher;->()V +Lcom/artemchep/keyguard/core/store/DatabaseManager; +Lcom/artemchep/keyguard/core/store/DatabaseManagerAndroid; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid;->()V +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid;->(Landroid/content/Context;Lkotlinx/serialization/json/Json;Ljava/lang/String;Lcom/artemchep/keyguard/common/model/MasterKey;)V +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid;->access$getApplicationContext$p(Lcom/artemchep/keyguard/core/store/DatabaseManagerAndroid;)Landroid/content/Context; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid;->access$getDbFileIo$p(Lcom/artemchep/keyguard/core/store/DatabaseManagerAndroid;)Lkotlin/jvm/functions/Function1; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid;->access$getDbIo$p(Lcom/artemchep/keyguard/core/store/DatabaseManagerAndroid;)Lkotlin/jvm/functions/Function1; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid;->access$getName$p(Lcom/artemchep/keyguard/core/store/DatabaseManagerAndroid;)Ljava/lang/String; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid;->migrateIfExists(Lcom/artemchep/keyguard/data/Database;)Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/core/store/DatabaseManagerAndroid$Companion; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid$Companion;->()V +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/core/store/DatabaseManagerAndroid$migrateIfExists$$inlined$ioEffect$1; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid$migrateIfExists$$inlined$ioEffect$1;->(Lkotlin/coroutines/Continuation;Lkotlin/coroutines/CoroutineContext;Lcom/artemchep/keyguard/core/store/DatabaseManagerAndroid;Lcom/artemchep/keyguard/data/Database;)V +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid$migrateIfExists$$inlined$ioEffect$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid$migrateIfExists$$inlined$ioEffect$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid$migrateIfExists$$inlined$ioEffect$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid$migrateIfExists$$inlined$ioEffect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/DatabaseManagerAndroid$migrateIfExists$$inlined$ioEffect$1$1; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid$migrateIfExists$$inlined$ioEffect$1$1;->(Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/core/store/DatabaseManagerAndroid;Lcom/artemchep/keyguard/data/Database;)V +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid$migrateIfExists$$inlined$ioEffect$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid$migrateIfExists$$inlined$ioEffect$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/DatabaseManagerAndroid$special$$inlined$effectMap$1; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid$special$$inlined$effectMap$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/core/store/DatabaseManagerAndroid;)V +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid$special$$inlined$effectMap$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid$special$$inlined$effectMap$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid$special$$inlined$effectMap$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid$special$$inlined$effectMap$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/DatabaseManagerAndroid$special$$inlined$ioEffect$1; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid$special$$inlined$ioEffect$1;->(Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/core/store/DatabaseManagerAndroid;)V +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid$special$$inlined$ioEffect$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid$special$$inlined$ioEffect$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid$special$$inlined$ioEffect$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid$special$$inlined$ioEffect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/DatabaseManagerAndroid$special$$inlined$retry$1; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid$special$$inlined$retry$1;->(Lkotlin/coroutines/Continuation;Lkotlin/jvm/functions/Function1;Lcom/artemchep/keyguard/core/store/DatabaseManagerAndroid;)V +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid$special$$inlined$retry$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid$special$$inlined$retry$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid$special$$inlined$retry$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid$special$$inlined$retry$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/DatabaseManagerImpl; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl;->()V +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl;->(Lcom/artemchep/keyguard/common/service/logging/LogRepository;Lkotlinx/serialization/json/Json;Lcom/artemchep/keyguard/core/store/SqlManager;Lcom/artemchep/keyguard/common/model/MasterKey;)V +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl;->access$getBitwardenCipherToStringAdapter$p(Lcom/artemchep/keyguard/core/store/DatabaseManagerImpl;)Lcom/artemchep/keyguard/core/store/BitwardenCipherToStringAdapter; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl;->access$getBitwardenCollectionToStringAdapter$p(Lcom/artemchep/keyguard/core/store/DatabaseManagerImpl;)Lcom/artemchep/keyguard/core/store/BitwardenCollectionToStringAdapter; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl;->access$getBitwardenFolderToStringAdapter$p(Lcom/artemchep/keyguard/core/store/DatabaseManagerImpl;)Lcom/artemchep/keyguard/core/store/BitwardenFolderToStringAdapter; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl;->access$getBitwardenMetaToStringAdapter$p(Lcom/artemchep/keyguard/core/store/DatabaseManagerImpl;)Lcom/artemchep/keyguard/core/store/BitwardenMetaToStringAdapter; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl;->access$getBitwardenOrganizationToStringAdapter$p(Lcom/artemchep/keyguard/core/store/DatabaseManagerImpl;)Lcom/artemchep/keyguard/core/store/BitwardenOrganizationToStringAdapter; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl;->access$getBitwardenProfileToStringAdapter$p(Lcom/artemchep/keyguard/core/store/DatabaseManagerImpl;)Lcom/artemchep/keyguard/core/store/BitwardenProfileToStringAdapter; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl;->access$getBitwardenSendToStringAdapter$p(Lcom/artemchep/keyguard/core/store/DatabaseManagerImpl;)Lcom/artemchep/keyguard/core/store/BitwardenSendToStringAdapter; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl;->access$getBitwardenTokenToStringAdapter$p(Lcom/artemchep/keyguard/core/store/DatabaseManagerImpl;)Lcom/artemchep/keyguard/core/store/BitwardenTokenToStringAdapter; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl;->access$getHibpAccountBreachToStringAdapter$p(Lcom/artemchep/keyguard/core/store/DatabaseManagerImpl;)Lcom/artemchep/keyguard/core/store/HibpAccountBreachToStringAdapter; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl;->access$getMutex$cp()Lkotlinx/coroutines/sync/Mutex; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl;->access$getSqlManager$p(Lcom/artemchep/keyguard/core/store/DatabaseManagerImpl;)Lcom/artemchep/keyguard/core/store/SqlManager; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl;->get()Lkotlin/jvm/functions/Function1; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl;->mutate(Lkotlin/jvm/functions/Function2;)Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/core/store/DatabaseManagerImpl$Companion; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl$Companion;->()V +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/core/store/DatabaseManagerImpl$dbIo$1$databaseFactory$1; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl$dbIo$1$databaseFactory$1;->(Lcom/artemchep/keyguard/core/store/DatabaseManagerImpl;)V +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl$dbIo$1$databaseFactory$1;->invoke(Lapp/cash/sqldelight/db/SqlDriver;)Lcom/artemchep/keyguard/data/Database; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl$dbIo$1$databaseFactory$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/DatabaseManagerImpl$get$$inlined$map$1; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl$get$$inlined$map$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl$get$$inlined$map$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl$get$$inlined$map$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl$get$$inlined$map$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl$get$$inlined$map$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/DatabaseManagerImpl$mutate$$inlined$effectMap$1; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl$mutate$$inlined$effectMap$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/Continuation;Lkotlin/jvm/functions/Function2;)V +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl$mutate$$inlined$effectMap$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl$mutate$$inlined$effectMap$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl$mutate$$inlined$effectMap$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl$mutate$$inlined$effectMap$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/DatabaseManagerImpl$mutate$$inlined$effectMap$1$1; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl$mutate$$inlined$effectMap$1$1;->(Ljava/lang/Object;Lkotlin/coroutines/Continuation;Lkotlin/jvm/functions/Function2;)V +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl$mutate$$inlined$effectMap$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl$mutate$$inlined$effectMap$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/DatabaseManagerImpl$special$$inlined$effectMap$1; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl$special$$inlined$effectMap$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/core/store/DatabaseManagerImpl;)V +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl$special$$inlined$effectMap$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl$special$$inlined$effectMap$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl$special$$inlined$effectMap$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl$special$$inlined$effectMap$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/DatabaseManagerImpl$special$$inlined$retry$1; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl$special$$inlined$retry$1;->(Lkotlin/coroutines/Continuation;Lkotlin/jvm/functions/Function1;)V +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl$special$$inlined$retry$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl$special$$inlined$retry$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl$special$$inlined$retry$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl$special$$inlined$retry$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/DatabaseSyncer; +HSPLcom/artemchep/keyguard/core/store/DatabaseSyncer;->()V +HSPLcom/artemchep/keyguard/core/store/DatabaseSyncer;->(Lcom/artemchep/keyguard/common/service/crypto/CryptoGenerator;)V +Lcom/artemchep/keyguard/core/store/HibpAccountBreachToStringAdapter; +HSPLcom/artemchep/keyguard/core/store/HibpAccountBreachToStringAdapter;->(Lkotlinx/serialization/json/Json;)V +Lcom/artemchep/keyguard/core/store/InstantToLongAdapter; +HSPLcom/artemchep/keyguard/core/store/InstantToLongAdapter;->()V +HSPLcom/artemchep/keyguard/core/store/InstantToLongAdapter;->()V +Lcom/artemchep/keyguard/core/store/ObjectToStringAdapter; +HSPLcom/artemchep/keyguard/core/store/ObjectToStringAdapter;->()V +HSPLcom/artemchep/keyguard/core/store/ObjectToStringAdapter;->(Lkotlinx/serialization/KSerializer;Lkotlinx/serialization/json/Json;)V +Lcom/artemchep/keyguard/core/store/ObjectToStringAdapter$Companion; +HSPLcom/artemchep/keyguard/core/store/ObjectToStringAdapter$Companion;->()V +HSPLcom/artemchep/keyguard/core/store/ObjectToStringAdapter$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/core/store/SqlHelper; +Lcom/artemchep/keyguard/core/store/SqlManager; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$$serializer; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$$serializer;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$$serializer;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Attachment; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Attachment$Local; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Attachment$Local;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Attachment$Local$$serializer; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Attachment$Local$$serializer;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Attachment$Local$$serializer;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Attachment$Local$$serializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Attachment$Local$Companion; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Attachment$Local$Companion;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Attachment$Local$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Attachment$Local$Companion;->serializer()Lkotlinx/serialization/KSerializer; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Attachment$Remote; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Attachment$Remote;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Attachment$Remote$$serializer; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Attachment$Remote$$serializer;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Attachment$Remote$$serializer;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Attachment$Remote$$serializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Attachment$Remote$Companion; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Attachment$Remote$Companion;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Attachment$Remote$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Attachment$Remote$Companion;->serializer()Lkotlinx/serialization/KSerializer; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Companion; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Companion;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Companion;->serializer()Lkotlinx/serialization/KSerializer; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Field$$serializer; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Field$$serializer;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Field$$serializer;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Field$$serializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$RepromptType; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$RepromptType;->$values()[Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$RepromptType; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$RepromptType;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$RepromptType;->(Ljava/lang/String;I)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$RepromptType;->access$get$cachedSerializer$delegate$cp()Lkotlin/Lazy; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$RepromptType;->values()[Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$RepromptType; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$RepromptType$Companion; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$RepromptType$Companion;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$RepromptType$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$RepromptType$Companion;->get$cachedSerializer()Lkotlinx/serialization/KSerializer; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$RepromptType$Companion;->serializer()Lkotlinx/serialization/KSerializer; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$RepromptType$Companion$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$RepromptType$Companion$1;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$RepromptType$Companion$1;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$RepromptType$Companion$1;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$RepromptType$Companion$1;->invoke()Lkotlinx/serialization/KSerializer; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Type; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Type;->$values()[Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Type; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Type;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Type;->(Ljava/lang/String;I)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Type;->access$get$cachedSerializer$delegate$cp()Lkotlin/Lazy; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Type;->values()[Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Type; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Type$Companion; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Type$Companion;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Type$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Type$Companion;->get$cachedSerializer()Lkotlinx/serialization/KSerializer; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Type$Companion;->serializer()Lkotlinx/serialization/KSerializer; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Type$Companion$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Type$Companion$1;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Type$Companion$1;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Type$Companion$1;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Type$Companion$1;->invoke()Lkotlinx/serialization/KSerializer; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipherRepositoryImpl; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipherRepositoryImpl;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipherRepositoryImpl;->(Lcom/artemchep/keyguard/core/store/DatabaseManager;Lkotlinx/coroutines/CoroutineDispatcher;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipherRepositoryImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipherRepositoryImpl;->access$getDispatcher$p(Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipherRepositoryImpl;)Lkotlinx/coroutines/CoroutineDispatcher; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipherRepositoryImpl;->get()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipherRepositoryImpl$get$$inlined$flatMapLatest$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipherRepositoryImpl$get$$inlined$flatMapLatest$1;->(Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipherRepositoryImpl;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipherRepositoryImpl$get$$inlined$flatMapLatest$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipherRepositoryImpl$get$$inlined$flatMapLatest$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipherRepositoryImpl$get$$inlined$flatMapLatest$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipherRepositoryImpl$get$1$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipherRepositoryImpl$get$1$1;->(Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipherRepositoryImpl$get$lambda$2$$inlined$map$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipherRepositoryImpl$get$lambda$2$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipherRepositoryImpl$get$lambda$2$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipherRepositoryImpl$get$lambda$2$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipherRepositoryImpl$get$lambda$2$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipherRepositoryImpl$get$lambda$2$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipherRepositoryImpl$get$lambda$2$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipherRepositoryImpl$get$lambda$2$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipherRepositoryImpl$get$lambda$2$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipherRepositoryImpl$special$$inlined$instance$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipherRepositoryImpl$special$$inlined$instance$1;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipherRepositoryImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipherRepositoryImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollection; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollection;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollection$$serializer; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollection$$serializer;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollection$$serializer;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollection$Companion; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollection$Companion;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollection$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollection$Companion;->serializer()Lkotlinx/serialization/KSerializer; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollectionRepositoryImpl; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollectionRepositoryImpl;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollectionRepositoryImpl;->(Lcom/artemchep/keyguard/core/store/DatabaseManager;Lkotlinx/coroutines/CoroutineDispatcher;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollectionRepositoryImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollectionRepositoryImpl;->access$getDispatcher$p(Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollectionRepositoryImpl;)Lkotlinx/coroutines/CoroutineDispatcher; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollectionRepositoryImpl;->get()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollectionRepositoryImpl$get$$inlined$flatMapLatest$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollectionRepositoryImpl$get$$inlined$flatMapLatest$1;->(Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollectionRepositoryImpl;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollectionRepositoryImpl$get$$inlined$flatMapLatest$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollectionRepositoryImpl$get$$inlined$flatMapLatest$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollectionRepositoryImpl$get$$inlined$flatMapLatest$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollectionRepositoryImpl$get$lambda$2$$inlined$map$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollectionRepositoryImpl$get$lambda$2$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollectionRepositoryImpl$get$lambda$2$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollectionRepositoryImpl$get$lambda$2$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollectionRepositoryImpl$get$lambda$2$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollectionRepositoryImpl$get$lambda$2$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollectionRepositoryImpl$get$lambda$2$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollectionRepositoryImpl$get$lambda$2$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollectionRepositoryImpl$get$lambda$2$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollectionRepositoryImpl$special$$inlined$instance$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollectionRepositoryImpl$special$$inlined$instance$1;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollectionRepositoryImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollectionRepositoryImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolder; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolder;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolder$$serializer; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolder$$serializer;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolder$$serializer;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolder$Companion; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolder$Companion;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolder$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolder$Companion;->serializer()Lkotlinx/serialization/KSerializer; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolderRepositoryImpl; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolderRepositoryImpl;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolderRepositoryImpl;->(Lcom/artemchep/keyguard/core/store/DatabaseManager;Lkotlinx/coroutines/CoroutineDispatcher;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolderRepositoryImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolderRepositoryImpl;->access$getDispatcher$p(Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolderRepositoryImpl;)Lkotlinx/coroutines/CoroutineDispatcher; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolderRepositoryImpl;->get()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolderRepositoryImpl$get$$inlined$flatMapLatest$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolderRepositoryImpl$get$$inlined$flatMapLatest$1;->(Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolderRepositoryImpl;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolderRepositoryImpl$get$$inlined$flatMapLatest$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolderRepositoryImpl$get$$inlined$flatMapLatest$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolderRepositoryImpl$get$$inlined$flatMapLatest$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolderRepositoryImpl$get$lambda$2$$inlined$map$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolderRepositoryImpl$get$lambda$2$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolderRepositoryImpl$get$lambda$2$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolderRepositoryImpl$get$lambda$2$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolderRepositoryImpl$get$lambda$2$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolderRepositoryImpl$get$lambda$2$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolderRepositoryImpl$get$lambda$2$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolderRepositoryImpl$get$lambda$2$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolderRepositoryImpl$get$lambda$2$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolderRepositoryImpl$special$$inlined$instance$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolderRepositoryImpl$special$$inlined$instance$1;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolderRepositoryImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolderRepositoryImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenMeta; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenMeta;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenMeta$$serializer; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenMeta$$serializer;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenMeta$$serializer;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenMeta$Companion; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenMeta$Companion;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenMeta$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenMeta$Companion;->serializer()Lkotlinx/serialization/KSerializer; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenMeta$LastSyncResult; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenMeta$LastSyncResult$Failure; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenMeta$LastSyncResult$Failure$$serializer; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenMeta$LastSyncResult$Failure$$serializer;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenMeta$LastSyncResult$Failure$$serializer;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenMeta$LastSyncResult$Failure$$serializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenMeta$LastSyncResult$Success; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenMeta$LastSyncResult$Success;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenMeta$LastSyncResult$Success;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenMeta$LastSyncResult$Success$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenMeta$LastSyncResult$Success$1;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenMeta$LastSyncResult$Success$1;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenMetaRepositoryImpl; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenMetaRepositoryImpl;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenMetaRepositoryImpl;->(Lcom/artemchep/keyguard/core/store/DatabaseManager;Lkotlinx/coroutines/CoroutineDispatcher;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenMetaRepositoryImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenMetaRepositoryImpl;->access$getDispatcher$p(Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenMetaRepositoryImpl;)Lkotlinx/coroutines/CoroutineDispatcher; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenMetaRepositoryImpl;->get()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenMetaRepositoryImpl$get$$inlined$flatMapLatest$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenMetaRepositoryImpl$get$$inlined$flatMapLatest$1;->(Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenMetaRepositoryImpl;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenMetaRepositoryImpl$get$$inlined$flatMapLatest$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenMetaRepositoryImpl$get$$inlined$flatMapLatest$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenMetaRepositoryImpl$get$$inlined$flatMapLatest$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenMetaRepositoryImpl$get$lambda$2$$inlined$map$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenMetaRepositoryImpl$get$lambda$2$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenMetaRepositoryImpl$get$lambda$2$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenMetaRepositoryImpl$get$lambda$2$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenMetaRepositoryImpl$get$lambda$2$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenMetaRepositoryImpl$get$lambda$2$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenMetaRepositoryImpl$get$lambda$2$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenMetaRepositoryImpl$get$lambda$2$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenMetaRepositoryImpl$get$lambda$2$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenMetaRepositoryImpl$special$$inlined$instance$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenMetaRepositoryImpl$special$$inlined$instance$1;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenMetaRepositoryImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenMetaRepositoryImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganization; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganization;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganization$$serializer; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganization$$serializer;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganization$$serializer;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganization$Companion; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganization$Companion;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganization$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganization$Companion;->serializer()Lkotlinx/serialization/KSerializer; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganizationRepositoryImpl; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganizationRepositoryImpl;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganizationRepositoryImpl;->(Lcom/artemchep/keyguard/core/store/DatabaseManager;Lkotlinx/coroutines/CoroutineDispatcher;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganizationRepositoryImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganizationRepositoryImpl;->access$getDispatcher$p(Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganizationRepositoryImpl;)Lkotlinx/coroutines/CoroutineDispatcher; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganizationRepositoryImpl;->get()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganizationRepositoryImpl$get$$inlined$flatMapLatest$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganizationRepositoryImpl$get$$inlined$flatMapLatest$1;->(Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganizationRepositoryImpl;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganizationRepositoryImpl$get$$inlined$flatMapLatest$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganizationRepositoryImpl$get$$inlined$flatMapLatest$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganizationRepositoryImpl$get$$inlined$flatMapLatest$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganizationRepositoryImpl$get$lambda$2$$inlined$map$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganizationRepositoryImpl$get$lambda$2$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganizationRepositoryImpl$get$lambda$2$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganizationRepositoryImpl$get$lambda$2$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganizationRepositoryImpl$get$lambda$2$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganizationRepositoryImpl$get$lambda$2$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganizationRepositoryImpl$get$lambda$2$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganizationRepositoryImpl$get$lambda$2$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganizationRepositoryImpl$get$lambda$2$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganizationRepositoryImpl$special$$inlined$instance$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganizationRepositoryImpl$special$$inlined$instance$1;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganizationRepositoryImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganizationRepositoryImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfile; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfile;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfile$$serializer; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfile$$serializer;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfile$$serializer;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfile$Companion; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfile$Companion;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfile$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfile$Companion;->serializer()Lkotlinx/serialization/KSerializer; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfileRepositoryImpl; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfileRepositoryImpl;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfileRepositoryImpl;->(Lcom/artemchep/keyguard/core/store/DatabaseManager;Lkotlinx/coroutines/CoroutineDispatcher;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfileRepositoryImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfileRepositoryImpl;->access$getDispatcher$p(Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfileRepositoryImpl;)Lkotlinx/coroutines/CoroutineDispatcher; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfileRepositoryImpl;->get()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfileRepositoryImpl$get$$inlined$flatMapLatest$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfileRepositoryImpl$get$$inlined$flatMapLatest$1;->(Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfileRepositoryImpl;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfileRepositoryImpl$get$$inlined$flatMapLatest$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfileRepositoryImpl$get$$inlined$flatMapLatest$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfileRepositoryImpl$get$$inlined$flatMapLatest$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfileRepositoryImpl$get$lambda$2$$inlined$map$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfileRepositoryImpl$get$lambda$2$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfileRepositoryImpl$get$lambda$2$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfileRepositoryImpl$get$lambda$2$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfileRepositoryImpl$get$lambda$2$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfileRepositoryImpl$get$lambda$2$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfileRepositoryImpl$get$lambda$2$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfileRepositoryImpl$get$lambda$2$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfileRepositoryImpl$get$lambda$2$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfileRepositoryImpl$special$$inlined$instance$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfileRepositoryImpl$special$$inlined$instance$1;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfileRepositoryImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfileRepositoryImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenSend; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenSend;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenSend$$serializer; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenSend$$serializer;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenSend$$serializer;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenSend$Companion; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenSend$Companion;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenSend$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenSend$Companion;->serializer()Lkotlinx/serialization/KSerializer; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenSend$Type; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenSend$Type;->$values()[Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenSend$Type; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenSend$Type;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenSend$Type;->(Ljava/lang/String;I)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenSend$Type;->access$get$cachedSerializer$delegate$cp()Lkotlin/Lazy; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenSend$Type;->values()[Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenSend$Type; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenSend$Type$Companion; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenSend$Type$Companion;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenSend$Type$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenSend$Type$Companion;->get$cachedSerializer()Lkotlinx/serialization/KSerializer; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenSend$Type$Companion;->serializer()Lkotlinx/serialization/KSerializer; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenSend$Type$Companion$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenSend$Type$Companion$1;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenSend$Type$Companion$1;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenSend$Type$Companion$1;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenSend$Type$Companion$1;->invoke()Lkotlinx/serialization/KSerializer; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenService$Has; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenToken; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenToken;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenToken$$serializer; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenToken$$serializer;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenToken$$serializer;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenToken$Companion; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenToken$Companion;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenToken$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenToken$Companion;->serializer()Lkotlinx/serialization/KSerializer; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenTokenRepositoryImpl; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenTokenRepositoryImpl;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenTokenRepositoryImpl;->(Lcom/artemchep/keyguard/core/store/DatabaseManager;Lkotlinx/coroutines/CoroutineDispatcher;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenTokenRepositoryImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenTokenRepositoryImpl;->access$getDispatcher$p(Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenTokenRepositoryImpl;)Lkotlinx/coroutines/CoroutineDispatcher; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenTokenRepositoryImpl;->get()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenTokenRepositoryImpl;->getSnapshot()Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenTokenRepositoryImpl$get$$inlined$flatMapLatest$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenTokenRepositoryImpl$get$$inlined$flatMapLatest$1;->(Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenTokenRepositoryImpl;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenTokenRepositoryImpl$get$$inlined$flatMapLatest$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenTokenRepositoryImpl$get$$inlined$flatMapLatest$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenTokenRepositoryImpl$get$$inlined$flatMapLatest$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenTokenRepositoryImpl$get$lambda$2$$inlined$map$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenTokenRepositoryImpl$get$lambda$2$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenTokenRepositoryImpl$get$lambda$2$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenTokenRepositoryImpl$get$lambda$2$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenTokenRepositoryImpl$get$lambda$2$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenTokenRepositoryImpl$get$lambda$2$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenTokenRepositoryImpl$get$lambda$2$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenTokenRepositoryImpl$get$lambda$2$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenTokenRepositoryImpl$get$lambda$2$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenTokenRepositoryImpl$special$$inlined$instance$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenTokenRepositoryImpl$special$$inlined$instance$1;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenTokenRepositoryImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenTokenRepositoryImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/crypto/CipherEncryptorImpl; +HSPLcom/artemchep/keyguard/crypto/CipherEncryptorImpl;->()V +HSPLcom/artemchep/keyguard/crypto/CipherEncryptorImpl;->(Lcom/artemchep/keyguard/common/service/crypto/CryptoGenerator;Lcom/artemchep/keyguard/common/service/text/Base64Service;)V +HSPLcom/artemchep/keyguard/crypto/CipherEncryptorImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/crypto/CipherEncryptorImpl$Companion; +HSPLcom/artemchep/keyguard/crypto/CipherEncryptorImpl$Companion;->()V +HSPLcom/artemchep/keyguard/crypto/CipherEncryptorImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/crypto/CipherEncryptorImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/crypto/CipherEncryptorImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/crypto/CipherEncryptorImpl$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/crypto/CipherEncryptorImpl$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/crypto/CryptoGeneratorJvm; +HSPLcom/artemchep/keyguard/crypto/CryptoGeneratorJvm;->()V +HSPLcom/artemchep/keyguard/crypto/CryptoGeneratorJvm;->()V +HSPLcom/artemchep/keyguard/crypto/CryptoGeneratorJvm;->getSecureRandom()Ljava/security/SecureRandom; +HSPLcom/artemchep/keyguard/crypto/CryptoGeneratorJvm;->hkdf([B[B[BI)[B +HSPLcom/artemchep/keyguard/crypto/CryptoGeneratorJvm;->pbkdf2([B[BII)[B +HSPLcom/artemchep/keyguard/crypto/CryptoGeneratorJvm;->seed(I)[B +Lcom/artemchep/keyguard/crypto/CryptoGeneratorJvm$Companion; +HSPLcom/artemchep/keyguard/crypto/CryptoGeneratorJvm$Companion;->()V +HSPLcom/artemchep/keyguard/crypto/CryptoGeneratorJvm$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/crypto/CryptoGeneratorJvm$secureRandom$2; +HSPLcom/artemchep/keyguard/crypto/CryptoGeneratorJvm$secureRandom$2;->()V +HSPLcom/artemchep/keyguard/crypto/CryptoGeneratorJvm$secureRandom$2;->()V +HSPLcom/artemchep/keyguard/crypto/CryptoGeneratorJvm$secureRandom$2;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/crypto/CryptoGeneratorJvm$secureRandom$2;->invoke()Ljava/security/SecureRandom; +Lcom/artemchep/keyguard/crypto/util/HkdfKt; +HSPLcom/artemchep/keyguard/crypto/util/HkdfKt;->hkdf(Lorg/bouncycastle/crypto/Digest;[B[B[BI)[B +HSPLcom/artemchep/keyguard/crypto/util/HkdfKt;->hkdfSha256([B[B[BI)[B +Lcom/artemchep/keyguard/crypto/util/Pbkdf2Kt; +HSPLcom/artemchep/keyguard/crypto/util/Pbkdf2Kt;->pbkdf2(Lorg/bouncycastle/crypto/Digest;[B[BII)[B +HSPLcom/artemchep/keyguard/crypto/util/Pbkdf2Kt;->pbkdf2Sha256([B[BII)[B +Lcom/artemchep/keyguard/data/CipherUsageHistory$Adapter; +HSPLcom/artemchep/keyguard/data/CipherUsageHistory$Adapter;->()V +HSPLcom/artemchep/keyguard/data/CipherUsageHistory$Adapter;->(Lapp/cash/sqldelight/ColumnAdapter;)V +Lcom/artemchep/keyguard/data/CipherUsageHistoryQueries; +HSPLcom/artemchep/keyguard/data/CipherUsageHistoryQueries;->()V +HSPLcom/artemchep/keyguard/data/CipherUsageHistoryQueries;->(Lapp/cash/sqldelight/db/SqlDriver;Lcom/artemchep/keyguard/data/CipherUsageHistory$Adapter;)V +Lcom/artemchep/keyguard/data/Database; +HSPLcom/artemchep/keyguard/data/Database;->()V +Lcom/artemchep/keyguard/data/Database$Companion; +HSPLcom/artemchep/keyguard/data/Database$Companion;->()V +HSPLcom/artemchep/keyguard/data/Database$Companion;->()V +HSPLcom/artemchep/keyguard/data/Database$Companion;->getSchema()Lapp/cash/sqldelight/db/SqlSchema; +HSPLcom/artemchep/keyguard/data/Database$Companion;->invoke(Lapp/cash/sqldelight/db/SqlDriver;Lcom/artemchep/keyguard/data/bitwarden/Account$Adapter;Lcom/artemchep/keyguard/data/pwnage/AccountBreach$Adapter;Lcom/artemchep/keyguard/data/bitwarden/Cipher$Adapter;Lcom/artemchep/keyguard/data/CipherUsageHistory$Adapter;Lcom/artemchep/keyguard/data/bitwarden/Collection$Adapter;Lcom/artemchep/keyguard/data/bitwarden/Folder$Adapter;Lcom/artemchep/keyguard/data/GeneratorEmailRelay$Adapter;Lcom/artemchep/keyguard/data/GeneratorHistory$Adapter;Lcom/artemchep/keyguard/data/bitwarden/Meta$Adapter;Lcom/artemchep/keyguard/data/bitwarden/Organization$Adapter;Lcom/artemchep/keyguard/data/pwnage/PasswordBreach$Adapter;Lcom/artemchep/keyguard/data/bitwarden/Profile$Adapter;Lcom/artemchep/keyguard/data/bitwarden/Send$Adapter;)Lcom/artemchep/keyguard/data/Database; +Lcom/artemchep/keyguard/data/GeneratorEmailRelay$Adapter; +HSPLcom/artemchep/keyguard/data/GeneratorEmailRelay$Adapter;->()V +HSPLcom/artemchep/keyguard/data/GeneratorEmailRelay$Adapter;->(Lapp/cash/sqldelight/ColumnAdapter;)V +Lcom/artemchep/keyguard/data/GeneratorEmailRelayQueries; +HSPLcom/artemchep/keyguard/data/GeneratorEmailRelayQueries;->()V +HSPLcom/artemchep/keyguard/data/GeneratorEmailRelayQueries;->(Lapp/cash/sqldelight/db/SqlDriver;Lcom/artemchep/keyguard/data/GeneratorEmailRelay$Adapter;)V +Lcom/artemchep/keyguard/data/GeneratorHistory$Adapter; +HSPLcom/artemchep/keyguard/data/GeneratorHistory$Adapter;->()V +HSPLcom/artemchep/keyguard/data/GeneratorHistory$Adapter;->(Lapp/cash/sqldelight/ColumnAdapter;)V +Lcom/artemchep/keyguard/data/GeneratorHistoryQueries; +HSPLcom/artemchep/keyguard/data/GeneratorHistoryQueries;->()V +HSPLcom/artemchep/keyguard/data/GeneratorHistoryQueries;->(Lapp/cash/sqldelight/db/SqlDriver;Lcom/artemchep/keyguard/data/GeneratorHistory$Adapter;)V +Lcom/artemchep/keyguard/data/bitwarden/Account$Adapter; +HSPLcom/artemchep/keyguard/data/bitwarden/Account$Adapter;->()V +HSPLcom/artemchep/keyguard/data/bitwarden/Account$Adapter;->(Lapp/cash/sqldelight/ColumnAdapter;)V +Lcom/artemchep/keyguard/data/bitwarden/AccountQueries; +HSPLcom/artemchep/keyguard/data/bitwarden/AccountQueries;->()V +HSPLcom/artemchep/keyguard/data/bitwarden/AccountQueries;->(Lapp/cash/sqldelight/db/SqlDriver;Lcom/artemchep/keyguard/data/bitwarden/Account$Adapter;)V +HSPLcom/artemchep/keyguard/data/bitwarden/AccountQueries;->get()Lapp/cash/sqldelight/Query; +HSPLcom/artemchep/keyguard/data/bitwarden/AccountQueries;->get(Lkotlin/jvm/functions/Function2;)Lapp/cash/sqldelight/Query; +Lcom/artemchep/keyguard/data/bitwarden/AccountQueries$get$1; +HSPLcom/artemchep/keyguard/data/bitwarden/AccountQueries$get$1;->(Lkotlin/jvm/functions/Function2;Lcom/artemchep/keyguard/data/bitwarden/AccountQueries;)V +Lcom/artemchep/keyguard/data/bitwarden/AccountQueries$get$2; +HSPLcom/artemchep/keyguard/data/bitwarden/AccountQueries$get$2;->()V +HSPLcom/artemchep/keyguard/data/bitwarden/AccountQueries$get$2;->()V +Lcom/artemchep/keyguard/data/bitwarden/Cipher; +Lcom/artemchep/keyguard/data/bitwarden/Cipher$Adapter; +HSPLcom/artemchep/keyguard/data/bitwarden/Cipher$Adapter;->()V +HSPLcom/artemchep/keyguard/data/bitwarden/Cipher$Adapter;->(Lapp/cash/sqldelight/ColumnAdapter;)V +Lcom/artemchep/keyguard/data/bitwarden/CipherQueries; +HSPLcom/artemchep/keyguard/data/bitwarden/CipherQueries;->()V +HSPLcom/artemchep/keyguard/data/bitwarden/CipherQueries;->(Lapp/cash/sqldelight/db/SqlDriver;Lcom/artemchep/keyguard/data/bitwarden/Cipher$Adapter;)V +HSPLcom/artemchep/keyguard/data/bitwarden/CipherQueries;->get()Lapp/cash/sqldelight/Query; +HSPLcom/artemchep/keyguard/data/bitwarden/CipherQueries;->get(Lkotlin/jvm/functions/Function4;)Lapp/cash/sqldelight/Query; +Lcom/artemchep/keyguard/data/bitwarden/CipherQueries$get$1; +HSPLcom/artemchep/keyguard/data/bitwarden/CipherQueries$get$1;->(Lkotlin/jvm/functions/Function4;Lcom/artemchep/keyguard/data/bitwarden/CipherQueries;)V +Lcom/artemchep/keyguard/data/bitwarden/CipherQueries$get$2; +HSPLcom/artemchep/keyguard/data/bitwarden/CipherQueries$get$2;->()V +HSPLcom/artemchep/keyguard/data/bitwarden/CipherQueries$get$2;->()V +Lcom/artemchep/keyguard/data/bitwarden/Collection$Adapter; +HSPLcom/artemchep/keyguard/data/bitwarden/Collection$Adapter;->()V +HSPLcom/artemchep/keyguard/data/bitwarden/Collection$Adapter;->(Lapp/cash/sqldelight/ColumnAdapter;)V +Lcom/artemchep/keyguard/data/bitwarden/CollectionQueries; +HSPLcom/artemchep/keyguard/data/bitwarden/CollectionQueries;->()V +HSPLcom/artemchep/keyguard/data/bitwarden/CollectionQueries;->(Lapp/cash/sqldelight/db/SqlDriver;Lcom/artemchep/keyguard/data/bitwarden/Collection$Adapter;)V +HSPLcom/artemchep/keyguard/data/bitwarden/CollectionQueries;->get()Lapp/cash/sqldelight/Query; +HSPLcom/artemchep/keyguard/data/bitwarden/CollectionQueries;->get(Lkotlin/jvm/functions/Function3;)Lapp/cash/sqldelight/Query; +Lcom/artemchep/keyguard/data/bitwarden/CollectionQueries$get$1; +HSPLcom/artemchep/keyguard/data/bitwarden/CollectionQueries$get$1;->(Lkotlin/jvm/functions/Function3;Lcom/artemchep/keyguard/data/bitwarden/CollectionQueries;)V +Lcom/artemchep/keyguard/data/bitwarden/CollectionQueries$get$2; +HSPLcom/artemchep/keyguard/data/bitwarden/CollectionQueries$get$2;->()V +HSPLcom/artemchep/keyguard/data/bitwarden/CollectionQueries$get$2;->()V +Lcom/artemchep/keyguard/data/bitwarden/Folder$Adapter; +HSPLcom/artemchep/keyguard/data/bitwarden/Folder$Adapter;->()V +HSPLcom/artemchep/keyguard/data/bitwarden/Folder$Adapter;->(Lapp/cash/sqldelight/ColumnAdapter;)V +Lcom/artemchep/keyguard/data/bitwarden/FolderQueries; +HSPLcom/artemchep/keyguard/data/bitwarden/FolderQueries;->()V +HSPLcom/artemchep/keyguard/data/bitwarden/FolderQueries;->(Lapp/cash/sqldelight/db/SqlDriver;Lcom/artemchep/keyguard/data/bitwarden/Folder$Adapter;)V +HSPLcom/artemchep/keyguard/data/bitwarden/FolderQueries;->get()Lapp/cash/sqldelight/Query; +HSPLcom/artemchep/keyguard/data/bitwarden/FolderQueries;->get(Lkotlin/jvm/functions/Function3;)Lapp/cash/sqldelight/Query; +Lcom/artemchep/keyguard/data/bitwarden/FolderQueries$get$1; +HSPLcom/artemchep/keyguard/data/bitwarden/FolderQueries$get$1;->(Lkotlin/jvm/functions/Function3;Lcom/artemchep/keyguard/data/bitwarden/FolderQueries;)V +Lcom/artemchep/keyguard/data/bitwarden/FolderQueries$get$2; +HSPLcom/artemchep/keyguard/data/bitwarden/FolderQueries$get$2;->()V +HSPLcom/artemchep/keyguard/data/bitwarden/FolderQueries$get$2;->()V +Lcom/artemchep/keyguard/data/bitwarden/Meta$Adapter; +HSPLcom/artemchep/keyguard/data/bitwarden/Meta$Adapter;->()V +HSPLcom/artemchep/keyguard/data/bitwarden/Meta$Adapter;->(Lapp/cash/sqldelight/ColumnAdapter;)V +Lcom/artemchep/keyguard/data/bitwarden/MetaQueries; +HSPLcom/artemchep/keyguard/data/bitwarden/MetaQueries;->()V +HSPLcom/artemchep/keyguard/data/bitwarden/MetaQueries;->(Lapp/cash/sqldelight/db/SqlDriver;Lcom/artemchep/keyguard/data/bitwarden/Meta$Adapter;)V +HSPLcom/artemchep/keyguard/data/bitwarden/MetaQueries;->get()Lapp/cash/sqldelight/Query; +HSPLcom/artemchep/keyguard/data/bitwarden/MetaQueries;->get(Lkotlin/jvm/functions/Function2;)Lapp/cash/sqldelight/Query; +Lcom/artemchep/keyguard/data/bitwarden/MetaQueries$get$1; +HSPLcom/artemchep/keyguard/data/bitwarden/MetaQueries$get$1;->(Lkotlin/jvm/functions/Function2;Lcom/artemchep/keyguard/data/bitwarden/MetaQueries;)V +Lcom/artemchep/keyguard/data/bitwarden/MetaQueries$get$2; +HSPLcom/artemchep/keyguard/data/bitwarden/MetaQueries$get$2;->()V +HSPLcom/artemchep/keyguard/data/bitwarden/MetaQueries$get$2;->()V +Lcom/artemchep/keyguard/data/bitwarden/Organization$Adapter; +HSPLcom/artemchep/keyguard/data/bitwarden/Organization$Adapter;->()V +HSPLcom/artemchep/keyguard/data/bitwarden/Organization$Adapter;->(Lapp/cash/sqldelight/ColumnAdapter;)V +Lcom/artemchep/keyguard/data/bitwarden/OrganizationQueries; +HSPLcom/artemchep/keyguard/data/bitwarden/OrganizationQueries;->()V +HSPLcom/artemchep/keyguard/data/bitwarden/OrganizationQueries;->(Lapp/cash/sqldelight/db/SqlDriver;Lcom/artemchep/keyguard/data/bitwarden/Organization$Adapter;)V +HSPLcom/artemchep/keyguard/data/bitwarden/OrganizationQueries;->get()Lapp/cash/sqldelight/Query; +HSPLcom/artemchep/keyguard/data/bitwarden/OrganizationQueries;->get(Lkotlin/jvm/functions/Function3;)Lapp/cash/sqldelight/Query; +Lcom/artemchep/keyguard/data/bitwarden/OrganizationQueries$get$1; +HSPLcom/artemchep/keyguard/data/bitwarden/OrganizationQueries$get$1;->(Lkotlin/jvm/functions/Function3;Lcom/artemchep/keyguard/data/bitwarden/OrganizationQueries;)V +Lcom/artemchep/keyguard/data/bitwarden/OrganizationQueries$get$2; +HSPLcom/artemchep/keyguard/data/bitwarden/OrganizationQueries$get$2;->()V +HSPLcom/artemchep/keyguard/data/bitwarden/OrganizationQueries$get$2;->()V +Lcom/artemchep/keyguard/data/bitwarden/Profile$Adapter; +HSPLcom/artemchep/keyguard/data/bitwarden/Profile$Adapter;->()V +HSPLcom/artemchep/keyguard/data/bitwarden/Profile$Adapter;->(Lapp/cash/sqldelight/ColumnAdapter;)V +Lcom/artemchep/keyguard/data/bitwarden/ProfileQueries; +HSPLcom/artemchep/keyguard/data/bitwarden/ProfileQueries;->()V +HSPLcom/artemchep/keyguard/data/bitwarden/ProfileQueries;->(Lapp/cash/sqldelight/db/SqlDriver;Lcom/artemchep/keyguard/data/bitwarden/Profile$Adapter;)V +HSPLcom/artemchep/keyguard/data/bitwarden/ProfileQueries;->get()Lapp/cash/sqldelight/Query; +HSPLcom/artemchep/keyguard/data/bitwarden/ProfileQueries;->get(Lkotlin/jvm/functions/Function3;)Lapp/cash/sqldelight/Query; +Lcom/artemchep/keyguard/data/bitwarden/ProfileQueries$get$1; +HSPLcom/artemchep/keyguard/data/bitwarden/ProfileQueries$get$1;->(Lkotlin/jvm/functions/Function3;Lcom/artemchep/keyguard/data/bitwarden/ProfileQueries;)V +Lcom/artemchep/keyguard/data/bitwarden/ProfileQueries$get$2; +HSPLcom/artemchep/keyguard/data/bitwarden/ProfileQueries$get$2;->()V +HSPLcom/artemchep/keyguard/data/bitwarden/ProfileQueries$get$2;->()V +Lcom/artemchep/keyguard/data/bitwarden/Send$Adapter; +HSPLcom/artemchep/keyguard/data/bitwarden/Send$Adapter;->()V +HSPLcom/artemchep/keyguard/data/bitwarden/Send$Adapter;->(Lapp/cash/sqldelight/ColumnAdapter;)V +Lcom/artemchep/keyguard/data/bitwarden/SendQueries; +HSPLcom/artemchep/keyguard/data/bitwarden/SendQueries;->()V +HSPLcom/artemchep/keyguard/data/bitwarden/SendQueries;->(Lapp/cash/sqldelight/db/SqlDriver;Lcom/artemchep/keyguard/data/bitwarden/Send$Adapter;)V +Lcom/artemchep/keyguard/data/common/DatabaseImpl; +HSPLcom/artemchep/keyguard/data/common/DatabaseImpl;->(Lapp/cash/sqldelight/db/SqlDriver;Lcom/artemchep/keyguard/data/bitwarden/Account$Adapter;Lcom/artemchep/keyguard/data/pwnage/AccountBreach$Adapter;Lcom/artemchep/keyguard/data/bitwarden/Cipher$Adapter;Lcom/artemchep/keyguard/data/CipherUsageHistory$Adapter;Lcom/artemchep/keyguard/data/bitwarden/Collection$Adapter;Lcom/artemchep/keyguard/data/bitwarden/Folder$Adapter;Lcom/artemchep/keyguard/data/GeneratorEmailRelay$Adapter;Lcom/artemchep/keyguard/data/GeneratorHistory$Adapter;Lcom/artemchep/keyguard/data/bitwarden/Meta$Adapter;Lcom/artemchep/keyguard/data/bitwarden/Organization$Adapter;Lcom/artemchep/keyguard/data/pwnage/PasswordBreach$Adapter;Lcom/artemchep/keyguard/data/bitwarden/Profile$Adapter;Lcom/artemchep/keyguard/data/bitwarden/Send$Adapter;)V +HSPLcom/artemchep/keyguard/data/common/DatabaseImpl;->getAccountQueries()Lcom/artemchep/keyguard/data/bitwarden/AccountQueries; +HSPLcom/artemchep/keyguard/data/common/DatabaseImpl;->getCipherQueries()Lcom/artemchep/keyguard/data/bitwarden/CipherQueries; +HSPLcom/artemchep/keyguard/data/common/DatabaseImpl;->getCollectionQueries()Lcom/artemchep/keyguard/data/bitwarden/CollectionQueries; +HSPLcom/artemchep/keyguard/data/common/DatabaseImpl;->getFolderQueries()Lcom/artemchep/keyguard/data/bitwarden/FolderQueries; +HSPLcom/artemchep/keyguard/data/common/DatabaseImpl;->getMetaQueries()Lcom/artemchep/keyguard/data/bitwarden/MetaQueries; +HSPLcom/artemchep/keyguard/data/common/DatabaseImpl;->getOrganizationQueries()Lcom/artemchep/keyguard/data/bitwarden/OrganizationQueries; +HSPLcom/artemchep/keyguard/data/common/DatabaseImpl;->getProfileQueries()Lcom/artemchep/keyguard/data/bitwarden/ProfileQueries; +Lcom/artemchep/keyguard/data/common/DatabaseImpl$Schema; +HSPLcom/artemchep/keyguard/data/common/DatabaseImpl$Schema;->()V +HSPLcom/artemchep/keyguard/data/common/DatabaseImpl$Schema;->()V +PLcom/artemchep/keyguard/data/common/DatabaseImpl$Schema;->create(Lapp/cash/sqldelight/db/SqlDriver;)Lapp/cash/sqldelight/db/QueryResult; +PLcom/artemchep/keyguard/data/common/DatabaseImpl$Schema;->create-0iQ1-z0(Lapp/cash/sqldelight/db/SqlDriver;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/data/common/DatabaseImpl$Schema;->getVersion()J +Lcom/artemchep/keyguard/data/common/DatabaseImplKt; +HSPLcom/artemchep/keyguard/data/common/DatabaseImplKt;->getSchema(Lkotlin/reflect/KClass;)Lapp/cash/sqldelight/db/SqlSchema; +HSPLcom/artemchep/keyguard/data/common/DatabaseImplKt;->newInstance(Lkotlin/reflect/KClass;Lapp/cash/sqldelight/db/SqlDriver;Lcom/artemchep/keyguard/data/bitwarden/Account$Adapter;Lcom/artemchep/keyguard/data/pwnage/AccountBreach$Adapter;Lcom/artemchep/keyguard/data/bitwarden/Cipher$Adapter;Lcom/artemchep/keyguard/data/CipherUsageHistory$Adapter;Lcom/artemchep/keyguard/data/bitwarden/Collection$Adapter;Lcom/artemchep/keyguard/data/bitwarden/Folder$Adapter;Lcom/artemchep/keyguard/data/GeneratorEmailRelay$Adapter;Lcom/artemchep/keyguard/data/GeneratorHistory$Adapter;Lcom/artemchep/keyguard/data/bitwarden/Meta$Adapter;Lcom/artemchep/keyguard/data/bitwarden/Organization$Adapter;Lcom/artemchep/keyguard/data/pwnage/PasswordBreach$Adapter;Lcom/artemchep/keyguard/data/bitwarden/Profile$Adapter;Lcom/artemchep/keyguard/data/bitwarden/Send$Adapter;)Lcom/artemchep/keyguard/data/Database; +Lcom/artemchep/keyguard/data/pwnage/AccountBreach$Adapter; +HSPLcom/artemchep/keyguard/data/pwnage/AccountBreach$Adapter;->()V +HSPLcom/artemchep/keyguard/data/pwnage/AccountBreach$Adapter;->(Lapp/cash/sqldelight/ColumnAdapter;Lapp/cash/sqldelight/ColumnAdapter;)V +Lcom/artemchep/keyguard/data/pwnage/AccountBreachQueries; +HSPLcom/artemchep/keyguard/data/pwnage/AccountBreachQueries;->()V +HSPLcom/artemchep/keyguard/data/pwnage/AccountBreachQueries;->(Lapp/cash/sqldelight/db/SqlDriver;Lcom/artemchep/keyguard/data/pwnage/AccountBreach$Adapter;)V +Lcom/artemchep/keyguard/data/pwnage/PasswordBreach$Adapter; +HSPLcom/artemchep/keyguard/data/pwnage/PasswordBreach$Adapter;->()V +HSPLcom/artemchep/keyguard/data/pwnage/PasswordBreach$Adapter;->(Lapp/cash/sqldelight/ColumnAdapter;)V +Lcom/artemchep/keyguard/data/pwnage/PasswordBreachQueries; +HSPLcom/artemchep/keyguard/data/pwnage/PasswordBreachQueries;->()V +HSPLcom/artemchep/keyguard/data/pwnage/PasswordBreachQueries;->(Lapp/cash/sqldelight/db/SqlDriver;Lcom/artemchep/keyguard/data/pwnage/PasswordBreach$Adapter;)V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt;->access$installFingerprintRepo(Lorg/kodein/di/DI$Builder;)V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt;->access$installKeyRepo(Lorg/kodein/di/DI$Builder;)V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt;->access$installSessionMetadataRepo(Lorg/kodein/di/DI$Builder;)V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt;->access$installSessionRepo(Lorg/kodein/di/DI$Builder;)V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt;->access$installSettingsRepo(Lorg/kodein/di/DI$Builder;)V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt;->globalModuleJvm()Lorg/kodein/di/DI$Module; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt;->installFingerprintRepo(Lorg/kodein/di/DI$Builder;)V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt;->installKeyRepo(Lorg/kodein/di/DI$Builder;)V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt;->installSessionMetadataRepo(Lorg/kodein/di/DI$Builder;)V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt;->installSessionRepo(Lorg/kodein/di/DI$Builder;)V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt;->installSettingsRepo(Lorg/kodein/di/DI$Builder;)V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1;->invoke(Lorg/kodein/di/DI$Builder;)V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$1;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$1;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$1;->invoke(Lorg/kodein/di/DirectDI;)Lkotlinx/coroutines/CoroutineDispatcher; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$10; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$10;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$10;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$100; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$100;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$100;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$101; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$101;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$101;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$102; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$102;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$102;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$103; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$103;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$103;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$104; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$104;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$104;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$105; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$105;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$105;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$106; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$106;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$106;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$107; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$107;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$107;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$107;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$107;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/AppWorker; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$108; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$108;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$108;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$108;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$108;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetVaultSession; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$109; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$109;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$109;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$109;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$109;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetVaultPersist; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$11; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$11;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$11;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$11;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$11;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/UnlockUseCase; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$110; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$110;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$110;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$111; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$111;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$111;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$112; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$112;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$112;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$113; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$113;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$113;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$113;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$113;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/MessageHub; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$113$invoke$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$113$invoke$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$114; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$114;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$114;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$114;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$114;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/ShowMessage; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$114$invoke$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$114$invoke$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$115; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$115;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$115;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$115;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$115;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/impl/MessageHubImpl; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$116; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$116;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$116;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$117; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$117;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$117;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$118; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$118;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$118;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$118;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$118;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/WindowCoroutineScope; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$119; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$119;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$119;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$119;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$119;->invoke(Lorg/kodein/di/DirectDI;)Lkotlinx/serialization/json/Json; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$119$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$119$1;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$119$1;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$119$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$119$1;->invoke(Lkotlinx/serialization/json/JsonBuilder;)V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$119$1$1$1$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$119$1$1$1$1;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$119$1$1$1$1;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$12; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$12;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$12;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$12;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$12;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/service/text/Base64Service; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$120; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$120;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$120;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$120;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$120;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/service/crypto/CipherEncryptor; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$121; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$121;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$121;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$122; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$122;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$122;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$123; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$123;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$123;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$124; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$124;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$124;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$124;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$124;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/service/deeplink/DeeplinkService; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$125; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$125;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$125;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$125;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$125;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/service/wordlist/WordlistService; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$126; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$126;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$126;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$127; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$127;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$127;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$128; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$128;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$128;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$129; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$129;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$129;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$13; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$13;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$13;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$13;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$13;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/service/text/Base32Service; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$130; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$130;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$130;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$131; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$131;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$131;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$132; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$132;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$132;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$132;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$132;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/service/tld/TldService; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$133; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$133;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$133;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$134; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$134;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$134;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$135; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$135;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$135;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$135;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$135;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/service/id/IdRepository; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$135$invoke$$inlined$instance$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$135$invoke$$inlined$instance$1;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$135$invoke$$inlined$instance$2; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$135$invoke$$inlined$instance$2;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$136; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$136;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$136;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$136;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$136;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/service/state/StateRepository; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$136$invoke$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$136$invoke$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$136$invoke$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$136$invoke$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$136$invoke$$inlined$instance$default$3; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$136$invoke$$inlined$instance$default$3;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$137; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$137;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$137;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$137;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$137;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/DeviceIdUseCase; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$138; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$138;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$138;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$138;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$138;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/DeviceEncryptionKeyUseCase; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$139; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$139;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$139;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$14; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$14;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$14;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$14;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$14;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetTotpCode; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$140; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$140;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$140;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$141; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$141;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$141;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$141;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$141;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetPasswordStrength; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$142; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$142;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$142;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$143; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$143;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$143;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$143;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$143;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/DateFormatter; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$144; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$144;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$144;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$145; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$145;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$145;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$145;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$145;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/service/crypto/CryptoGenerator; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$146; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$146;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$146;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$146;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$146;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/service/totp/TotpService; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147;->invoke(Lorg/kodein/di/DirectDI;)Lio/ktor/client/HttpClient; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1;->(Lokhttp3/OkHttpClient;Lkotlinx/serialization/json/Json;)V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1;->invoke(Lio/ktor/client/HttpClientConfig;)V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$1;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$1;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$1;->invoke(Lio/ktor/client/plugins/UserAgentConfig;)V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$2; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$2;->(Lokhttp3/OkHttpClient;)V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$2;->invoke(Lio/ktor/client/engine/okhttp/OkHttpConfig;)V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$3; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$3;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$3;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$3;->invoke(Lio/ktor/client/plugins/logging/LoggingConfig;)V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$4; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$4;->(Lkotlinx/serialization/json/Json;)V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$4;->invoke(Lio/ktor/client/plugins/contentnegotiation/ContentNegotiationConfig;)V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$4;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$5; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$5;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$5;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$5;->invoke(Lio/ktor/client/plugins/websocket/WebSockets$Config;)V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$5;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$6; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$6;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$6;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$6;->invoke(Lio/ktor/client/plugins/cache/HttpCache$Config;)V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$6;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$7; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$7;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$7;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$7;->invoke(Lio/ktor/client/plugins/HttpRequestRetryConfig;)V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$7;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$7$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$7$1;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$7$1;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$invoke$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$invoke$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$invoke$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$invoke$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$148; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$148;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$148;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$149; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$149;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$149;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$149;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$149;->invoke(Lorg/kodein/di/DirectDI;)Lokhttp3/OkHttpClient; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$149$$ExternalSyntheticLambda0; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$149$$ExternalSyntheticLambda0;->(Lcom/artemchep/keyguard/common/service/logging/LogRepository;)V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$149$invoke$lambda$2$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$149$invoke$lambda$2$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$15; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$15;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$15;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$16; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$16;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$16;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$16;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$16;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetScreenState; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$17; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$17;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$17;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$17;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$17;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetConcealFields; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$18; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$18;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$18;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$19; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$19;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$19;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$2; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$2;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$2;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$20; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$20;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$20;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$21; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$21;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$21;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$21;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$21;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetBiometricTimeout; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$22; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$22;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$22;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$23; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$23;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$23;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$24; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$24;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$24;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$25; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$25;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$25;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$26; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$26;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$26;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$27; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$27;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$27;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$28; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$28;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$28;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$29; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$29;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$29;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$3; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$3;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$3;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$3;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/AuthConfirmMasterKeyUseCase; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$30; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$30;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$30;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$31; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$31;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$31;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$32; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$32;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$32;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$33; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$33;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$33;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$34; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$34;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$34;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$35; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$35;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$35;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$36; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$36;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$36;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$37; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$37;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$37;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$37;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$37;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/PutVaultSession; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$38; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$38;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$38;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$38;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$38;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/ClearVaultSession; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$39; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$39;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$39;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$4; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$4;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$4;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$4;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$4;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/AuthGenerateMasterKeyUseCase; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$40; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$40;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$40;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$41; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$41;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$41;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$42; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$42;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$42;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$43; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$43;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$43;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$44; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$44;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$44;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$44;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$44;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/PutScreenState; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$45; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$45;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$45;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$45;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$45;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetAllowScreenshots; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$46; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$46;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$46;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$46;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$46;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetAllowTwoPanelLayoutInLandscape; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$47; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$47;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$47;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$47;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$47;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetAllowTwoPanelLayoutInPortrait; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$48; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$48;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$48;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$48;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$48;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetVaultLockAfterScreenOff; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$49; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$49;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$49;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$5; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$5;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$5;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$5;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$5;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/BiometricKeyDecryptUseCase; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$50; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$50;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$50;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$50;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$50;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/PasskeyTargetCheck; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$51; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$51;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$51;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$52; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$52;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$52;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$52;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$52;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetUseExternalBrowser; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$53; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$53;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$53;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$54; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$54;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$54;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$55; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$55;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$55;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$56; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$56;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$56;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$57; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$57;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$57;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$58; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$58;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$58;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$59; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$59;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$59;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$6; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$6;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$6;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$6;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$6;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/BiometricKeyEncryptUseCase; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$60; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$60;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$60;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$61; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$61;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$61;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$62; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$62;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$62;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$63; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$63;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$63;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$64; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$64;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$64;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$65; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$65;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$65;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$66; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$66;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$66;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$66;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$66;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetNavAnimation; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$67; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$67;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$67;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$67;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$67;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetNavLabel; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$68; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$68;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$68;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$69; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$69;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$69;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$69;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$69;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetFont; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$7; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$7;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$7;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$7;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$7;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GenerateMasterHashUseCase; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$70; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$70;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$70;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$71; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$71;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$71;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$72; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$72;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$72;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$73; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$73;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$73;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$73;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$73;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetTheme; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$74; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$74;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$74;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$74;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$74;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetThemeUseAmoledDark; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$75; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$75;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$75;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$75;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$75;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetColors; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$76; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$76;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$76;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$77; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$77;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$77;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$78; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$78;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$78;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$78;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$78;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/CipherUrlCheck; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$79; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$79;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$79;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$8; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$8;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$8;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$8;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$8;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GenerateMasterKeyUseCase; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$80; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$80;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$80;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$80;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$80;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetCanWrite; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$81; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$81;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$81;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$81;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$81;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetCachePremium; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$82; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$82;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$82;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$82;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$82;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/PutCachePremium; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$83; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$83;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$83;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$84; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$84;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$84;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$85; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$85;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$85;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$86; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$86;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$86;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$87; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$87;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$87;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$88; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$88;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$88;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$89; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$89;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$89;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$9; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$9;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$9;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$9;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$9;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GenerateMasterSaltUseCase; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$90; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$90;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$90;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$91; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$91;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$91;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$91;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$91;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetDebugPremium; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$92; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$92;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$92;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$92;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$92;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetWriteAccess; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$93; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$93;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$93;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$93;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$93;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetDebugScreenDelay; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$94; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$94;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$94;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$94;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$94;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetAppIcons; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$95; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$95;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$95;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$95;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$95;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetWebsiteIcons; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$96; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$96;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$96;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$97; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$97;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$97;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$98; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$98;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$98;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$99; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$99;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$99;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindProvider$default$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindProvider$default$1;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindProvider$default$2; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindProvider$default$2;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindProvider$default$3; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindProvider$default$3;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$1;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$10; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$10;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$100; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$100;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$101; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$101;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$102; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$102;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$103; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$103;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$104; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$104;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$105; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$105;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$106; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$106;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$107; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$107;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$108; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$108;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$109; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$109;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$11; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$11;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$110; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$110;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$111; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$111;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$112; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$112;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$113; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$113;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$114; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$114;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$115; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$115;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$116; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$116;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$117; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$117;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$118; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$118;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$119; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$119;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$12; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$12;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$120; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$120;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$121; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$121;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$122; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$122;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$123; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$123;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$124; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$124;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$125; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$125;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$126; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$126;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$127; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$127;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$128; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$128;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$129; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$129;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$13; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$13;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$130; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$130;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$131; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$131;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$132; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$132;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$133; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$133;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$134; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$134;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$135; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$135;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$136; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$136;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$137; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$137;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$138; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$138;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$139; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$139;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$14; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$14;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$140; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$140;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$141; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$141;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$142; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$142;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$143; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$143;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$144; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$144;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$145; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$145;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$146; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$146;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$15; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$15;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$16; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$16;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$17; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$17;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$18; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$18;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$19; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$19;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$2; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$2;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$20; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$20;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$21; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$21;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$22; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$22;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$23; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$23;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$24; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$24;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$25; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$25;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$26; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$26;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$27; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$27;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$28; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$28;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$29; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$29;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$3; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$3;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$30; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$30;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$31; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$31;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$32; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$32;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$33; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$33;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$34; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$34;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$35; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$35;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$36; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$36;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$37; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$37;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$38; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$38;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$39; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$39;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$4; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$4;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$40; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$40;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$41; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$41;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$42; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$42;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$43; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$43;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$44; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$44;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$45; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$45;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$46; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$46;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$47; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$47;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$48; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$48;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$49; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$49;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$5; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$5;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$50; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$50;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$51; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$51;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$52; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$52;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$53; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$53;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$54; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$54;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$55; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$55;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$56; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$56;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$57; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$57;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$58; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$58;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$59; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$59;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$6; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$6;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$60; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$60;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$61; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$61;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$62; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$62;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$63; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$63;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$64; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$64;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$65; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$65;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$66; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$66;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$67; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$67;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$68; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$68;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$69; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$69;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$7; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$7;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$70; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$70;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$71; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$71;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$72; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$72;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$73; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$73;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$74; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$74;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$75; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$75;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$76; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$76;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$77; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$77;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$78; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$78;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$79; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$79;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$8; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$8;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$80; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$80;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$81; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$81;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$82; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$82;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$83; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$83;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$84; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$84;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$85; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$85;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$86; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$86;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$87; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$87;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$88; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$88;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$89; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$89;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$9; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$9;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$90; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$90;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$91; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$91;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$92; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$92;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$93; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$93;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$94; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$94;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$95; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$95;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$96; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$96;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$97; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$97;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$98; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$98;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$99; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$99;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installFingerprintRepo$$inlined$bindProvider$default$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installFingerprintRepo$$inlined$bindProvider$default$1;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installFingerprintRepo$$inlined$bindProvider$default$2; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installFingerprintRepo$$inlined$bindProvider$default$2;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installFingerprintRepo$$inlined$bindSingleton$default$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installFingerprintRepo$$inlined$bindSingleton$default$1;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installFingerprintRepo$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installFingerprintRepo$1;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installFingerprintRepo$1;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installFingerprintRepo$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installFingerprintRepo$1;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/service/vault/impl/FingerprintRepositoryImpl; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installFingerprintRepo$2; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installFingerprintRepo$2;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installFingerprintRepo$2;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installFingerprintRepo$3; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installFingerprintRepo$3;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installFingerprintRepo$3;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installFingerprintRepo$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installFingerprintRepo$3;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/service/vault/FingerprintReadWriteRepository; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installFingerprintRepo$3$invoke$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installFingerprintRepo$3$invoke$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installKeyRepo$$inlined$bindProvider$default$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installKeyRepo$$inlined$bindProvider$default$1;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installKeyRepo$$inlined$bindProvider$default$2; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installKeyRepo$$inlined$bindProvider$default$2;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installKeyRepo$$inlined$bindSingleton$default$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installKeyRepo$$inlined$bindSingleton$default$1;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installKeyRepo$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installKeyRepo$1;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installKeyRepo$1;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installKeyRepo$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installKeyRepo$1;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installKeyRepo$2; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installKeyRepo$2;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installKeyRepo$2;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installKeyRepo$3; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installKeyRepo$3;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installKeyRepo$3;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installKeyRepo$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installKeyRepo$3;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/service/vault/KeyReadWriteRepository; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installKeyRepo$3$invoke$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installKeyRepo$3$invoke$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionMetadataRepo$$inlined$bindProvider$default$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionMetadataRepo$$inlined$bindProvider$default$1;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionMetadataRepo$$inlined$bindProvider$default$2; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionMetadataRepo$$inlined$bindProvider$default$2;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionMetadataRepo$$inlined$bindSingleton$default$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionMetadataRepo$$inlined$bindSingleton$default$1;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionMetadataRepo$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionMetadataRepo$1;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionMetadataRepo$1;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionMetadataRepo$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionMetadataRepo$1;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/service/vault/impl/SessionMetadataRepositoryImpl; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionMetadataRepo$2; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionMetadataRepo$2;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionMetadataRepo$2;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionMetadataRepo$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionMetadataRepo$2;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/service/vault/SessionMetadataReadRepository; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionMetadataRepo$2$invoke$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionMetadataRepo$2$invoke$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionMetadataRepo$3; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionMetadataRepo$3;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionMetadataRepo$3;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionMetadataRepo$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionMetadataRepo$3;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/service/vault/SessionMetadataReadWriteRepository; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionMetadataRepo$3$invoke$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionMetadataRepo$3$invoke$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionRepo$$inlined$bindProvider$default$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionRepo$$inlined$bindProvider$default$1;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionRepo$$inlined$bindProvider$default$2; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionRepo$$inlined$bindProvider$default$2;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionRepo$$inlined$bindSingleton$default$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionRepo$$inlined$bindSingleton$default$1;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionRepo$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionRepo$1;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionRepo$1;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionRepo$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionRepo$1;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/service/vault/impl/SessionRepositoryImpl; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionRepo$2; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionRepo$2;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionRepo$2;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionRepo$3; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionRepo$3;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionRepo$3;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionRepo$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionRepo$3;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/service/vault/SessionReadWriteRepository; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionRepo$3$invoke$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionRepo$3$invoke$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSettingsRepo$$inlined$bindProvider$default$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSettingsRepo$$inlined$bindProvider$default$1;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSettingsRepo$$inlined$bindProvider$default$2; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSettingsRepo$$inlined$bindProvider$default$2;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSettingsRepo$$inlined$bindSingleton$default$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSettingsRepo$$inlined$bindSingleton$default$1;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSettingsRepo$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSettingsRepo$1;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSettingsRepo$1;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSettingsRepo$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSettingsRepo$1;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSettingsRepo$2; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSettingsRepo$2;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSettingsRepo$2;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSettingsRepo$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSettingsRepo$2;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/service/settings/SettingsReadRepository; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSettingsRepo$2$invoke$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSettingsRepo$2$invoke$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSettingsRepo$3; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSettingsRepo$3;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSettingsRepo$3;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSettingsRepo$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSettingsRepo$3;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/service/settings/SettingsReadWriteRepository; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSettingsRepo$3$invoke$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSettingsRepo$3$invoke$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/feature/attachments/SelectableItemState; +HSPLcom/artemchep/keyguard/feature/attachments/SelectableItemState;->()V +HSPLcom/artemchep/keyguard/feature/attachments/SelectableItemState;->(ZZZLkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;)V +Lcom/artemchep/keyguard/feature/auth/common/AutofillKt; +HSPLcom/artemchep/keyguard/feature/auth/common/AutofillKt;->autofill(Landroidx/compose/ui/Modifier;Ljava/lang/String;Ljava/util/List;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; +Lcom/artemchep/keyguard/feature/auth/common/AutofillKt$autofill$1; +HSPLcom/artemchep/keyguard/feature/auth/common/AutofillKt$autofill$1;->(Ljava/util/List;Lkotlin/jvm/functions/Function1;Ljava/lang/String;)V +HSPLcom/artemchep/keyguard/feature/auth/common/AutofillKt$autofill$1;->access$invoke$lambda$1(Landroidx/compose/runtime/State;)Landroidx/compose/ui/autofill/Autofill; +HSPLcom/artemchep/keyguard/feature/auth/common/AutofillKt$autofill$1;->access$invoke$lambda$2(Landroidx/compose/runtime/State;)Landroidx/compose/ui/autofill/AutofillNode; +HSPLcom/artemchep/keyguard/feature/auth/common/AutofillKt$autofill$1;->invoke$lambda$1(Landroidx/compose/runtime/State;)Landroidx/compose/ui/autofill/Autofill; +HSPLcom/artemchep/keyguard/feature/auth/common/AutofillKt$autofill$1;->invoke$lambda$2(Landroidx/compose/runtime/State;)Landroidx/compose/ui/autofill/AutofillNode; +HSPLcom/artemchep/keyguard/feature/auth/common/AutofillKt$autofill$1;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier; +HSPLcom/artemchep/keyguard/feature/auth/common/AutofillKt$autofill$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/auth/common/AutofillKt$autofill$1$1; +HSPLcom/artemchep/keyguard/feature/auth/common/AutofillKt$autofill$1$1;->(Landroidx/compose/ui/autofill/AutofillNode;)V +HSPLcom/artemchep/keyguard/feature/auth/common/AutofillKt$autofill$1$1;->invoke(Landroidx/compose/ui/layout/LayoutCoordinates;)V +HSPLcom/artemchep/keyguard/feature/auth/common/AutofillKt$autofill$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/auth/common/AutofillKt$autofill$1$2; +HSPLcom/artemchep/keyguard/feature/auth/common/AutofillKt$autofill$1$2;->(Landroidx/compose/ui/autofill/AutofillNode;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;)V +HSPLcom/artemchep/keyguard/feature/auth/common/AutofillKt$autofill$1$2;->invoke(Landroidx/compose/ui/focus/FocusState;)V +HSPLcom/artemchep/keyguard/feature/auth/common/AutofillKt$autofill$1$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/auth/common/Autofill_androidKt; +HSPLcom/artemchep/keyguard/feature/auth/common/Autofill_androidKt;->AutofillSideEffect(Ljava/lang/String;Landroidx/compose/ui/autofill/AutofillNode;Landroidx/compose/runtime/Composer;I)V +Lcom/artemchep/keyguard/feature/auth/common/Autofill_androidKt$AutofillSideEffect$1; +HSPLcom/artemchep/keyguard/feature/auth/common/Autofill_androidKt$AutofillSideEffect$1;->(Landroidx/compose/ui/autofill/AutofillNode;Landroid/view/autofill/AutofillManager;Landroid/view/View;Ljava/lang/String;)V +HSPLcom/artemchep/keyguard/feature/auth/common/Autofill_androidKt$AutofillSideEffect$1;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/auth/common/Autofill_androidKt$AutofillSideEffect$1;->invoke()V +Lcom/artemchep/keyguard/feature/auth/common/SwitchFieldModel; +HSPLcom/artemchep/keyguard/feature/auth/common/SwitchFieldModel;->()V +HSPLcom/artemchep/keyguard/feature/auth/common/SwitchFieldModel;->(ZLkotlin/jvm/functions/Function1;)V +HSPLcom/artemchep/keyguard/feature/auth/common/SwitchFieldModel;->equals(Ljava/lang/Object;)Z +HSPLcom/artemchep/keyguard/feature/auth/common/SwitchFieldModel;->getChecked()Z +HSPLcom/artemchep/keyguard/feature/auth/common/SwitchFieldModel;->getOnChange()Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/feature/auth/common/SwitchFieldModel$Companion; +HSPLcom/artemchep/keyguard/feature/auth/common/SwitchFieldModel$Companion;->()V +HSPLcom/artemchep/keyguard/feature/auth/common/SwitchFieldModel$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/feature/auth/common/TextFieldModel2; +HSPLcom/artemchep/keyguard/feature/auth/common/TextFieldModel2;->()V +HSPLcom/artemchep/keyguard/feature/auth/common/TextFieldModel2;->(Landroidx/compose/runtime/MutableState;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/artemchep/keyguard/feature/auth/common/TextFieldModel2$Vl;Lkotlinx/collections/immutable/ImmutableList;Lkotlin/jvm/functions/Function1;)V +HSPLcom/artemchep/keyguard/feature/auth/common/TextFieldModel2;->(Landroidx/compose/runtime/MutableState;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/artemchep/keyguard/feature/auth/common/TextFieldModel2$Vl;Lkotlinx/collections/immutable/ImmutableList;Lkotlin/jvm/functions/Function1;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/feature/auth/common/TextFieldModel2;->equals(Ljava/lang/Object;)Z +HSPLcom/artemchep/keyguard/feature/auth/common/TextFieldModel2;->getAutocompleteOptions()Lkotlinx/collections/immutable/ImmutableList; +HSPLcom/artemchep/keyguard/feature/auth/common/TextFieldModel2;->getError()Ljava/lang/String; +HSPLcom/artemchep/keyguard/feature/auth/common/TextFieldModel2;->getHint()Ljava/lang/String; +HSPLcom/artemchep/keyguard/feature/auth/common/TextFieldModel2;->getOnChange()Lkotlin/jvm/functions/Function1; +HSPLcom/artemchep/keyguard/feature/auth/common/TextFieldModel2;->getState()Landroidx/compose/runtime/MutableState; +HSPLcom/artemchep/keyguard/feature/auth/common/TextFieldModel2;->getText()Ljava/lang/String; +HSPLcom/artemchep/keyguard/feature/auth/common/TextFieldModel2;->getVl()Lcom/artemchep/keyguard/feature/auth/common/TextFieldModel2$Vl; +Lcom/artemchep/keyguard/feature/auth/common/TextFieldModel2$Companion; +HSPLcom/artemchep/keyguard/feature/auth/common/TextFieldModel2$Companion;->()V +HSPLcom/artemchep/keyguard/feature/auth/common/TextFieldModel2$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/feature/auth/common/TextFieldModel2$Companion;->of$default(Lcom/artemchep/keyguard/feature/auth/common/TextFieldModel2$Companion;Landroidx/compose/runtime/MutableState;Lcom/artemchep/keyguard/feature/auth/common/Validated;Ljava/lang/String;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lcom/artemchep/keyguard/feature/auth/common/TextFieldModel2; +HSPLcom/artemchep/keyguard/feature/auth/common/TextFieldModel2$Companion;->of(Landroidx/compose/runtime/MutableState;Lcom/artemchep/keyguard/feature/auth/common/Validated;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)Lcom/artemchep/keyguard/feature/auth/common/TextFieldModel2; +Lcom/artemchep/keyguard/feature/auth/common/TextFieldModel2$Companion$of$1; +HSPLcom/artemchep/keyguard/feature/auth/common/TextFieldModel2$Companion$of$1;->(Ljava/lang/Object;)V +HSPLcom/artemchep/keyguard/feature/auth/common/TextFieldModel2$Companion$of$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/auth/common/TextFieldModel2$Companion$of$1;->invoke(Ljava/lang/String;)V +Lcom/artemchep/keyguard/feature/auth/common/TextFieldModel2$Companion$of$2; +HSPLcom/artemchep/keyguard/feature/auth/common/TextFieldModel2$Companion$of$2;->(Ljava/lang/Object;)V +HSPLcom/artemchep/keyguard/feature/auth/common/TextFieldModel2$Companion$of$2;->set(Ljava/lang/Object;)V +Lcom/artemchep/keyguard/feature/auth/common/TextFieldModel2$Vl; +Lcom/artemchep/keyguard/feature/auth/common/TextFieldModel2$Vl$Type; +HSPLcom/artemchep/keyguard/feature/auth/common/TextFieldModel2$Vl$Type;->$values()[Lcom/artemchep/keyguard/feature/auth/common/TextFieldModel2$Vl$Type; +HSPLcom/artemchep/keyguard/feature/auth/common/TextFieldModel2$Vl$Type;->()V +HSPLcom/artemchep/keyguard/feature/auth/common/TextFieldModel2$Vl$Type;->(Ljava/lang/String;I)V +HSPLcom/artemchep/keyguard/feature/auth/common/TextFieldModel2$Vl$Type;->values()[Lcom/artemchep/keyguard/feature/auth/common/TextFieldModel2$Vl$Type; +Lcom/artemchep/keyguard/feature/auth/common/Validated; +Lcom/artemchep/keyguard/feature/auth/common/Validated$Failure; +HSPLcom/artemchep/keyguard/feature/auth/common/Validated$Failure;->()V +HSPLcom/artemchep/keyguard/feature/auth/common/Validated$Failure;->(Ljava/lang/Object;Ljava/lang/String;)V +HSPLcom/artemchep/keyguard/feature/auth/common/Validated$Failure;->getError()Ljava/lang/String; +HSPLcom/artemchep/keyguard/feature/auth/common/Validated$Failure;->getModel()Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/auth/common/Validated$Success; +HSPLcom/artemchep/keyguard/feature/auth/common/Validated$Success;->()V +HSPLcom/artemchep/keyguard/feature/auth/common/Validated$Success;->(Ljava/lang/Object;)V +HSPLcom/artemchep/keyguard/feature/auth/common/Validated$Success;->getModel()Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/auth/common/VisibilityKt; +HSPLcom/artemchep/keyguard/feature/auth/common/VisibilityKt;->VisibilityToggle(Lcom/artemchep/keyguard/feature/auth/common/VisibilityState;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/auth/common/VisibilityKt;->VisibilityToggle(ZZLkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V +Lcom/artemchep/keyguard/feature/auth/common/VisibilityKt$VisibilityToggle$1$1; +HSPLcom/artemchep/keyguard/feature/auth/common/VisibilityKt$VisibilityToggle$1$1;->(Lcom/artemchep/keyguard/feature/auth/common/VisibilityState;)V +Lcom/artemchep/keyguard/feature/auth/common/VisibilityKt$VisibilityToggle$2; +HSPLcom/artemchep/keyguard/feature/auth/common/VisibilityKt$VisibilityToggle$2;->(Lcom/artemchep/keyguard/feature/auth/common/VisibilityState;I)V +Lcom/artemchep/keyguard/feature/auth/common/VisibilityKt$VisibilityToggle$3; +HSPLcom/artemchep/keyguard/feature/auth/common/VisibilityKt$VisibilityToggle$3;->(Z)V +HSPLcom/artemchep/keyguard/feature/auth/common/VisibilityKt$VisibilityToggle$3;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/auth/common/VisibilityKt$VisibilityToggle$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/auth/common/VisibilityState; +HSPLcom/artemchep/keyguard/feature/auth/common/VisibilityState;->()V +HSPLcom/artemchep/keyguard/feature/auth/common/VisibilityState;->(ZZ)V +HSPLcom/artemchep/keyguard/feature/auth/common/VisibilityState;->(ZZILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/feature/auth/common/VisibilityState;->isEnabled()Z +HSPLcom/artemchep/keyguard/feature/auth/common/VisibilityState;->isVisible()Z +Lcom/artemchep/keyguard/feature/auth/common/util/ValidationPassword; +HSPLcom/artemchep/keyguard/feature/auth/common/util/ValidationPassword;->$values()[Lcom/artemchep/keyguard/feature/auth/common/util/ValidationPassword; +HSPLcom/artemchep/keyguard/feature/auth/common/util/ValidationPassword;->()V +HSPLcom/artemchep/keyguard/feature/auth/common/util/ValidationPassword;->(Ljava/lang/String;I)V +HSPLcom/artemchep/keyguard/feature/auth/common/util/ValidationPassword;->values()[Lcom/artemchep/keyguard/feature/auth/common/util/ValidationPassword; +Lcom/artemchep/keyguard/feature/auth/common/util/ValidationTitle; +HSPLcom/artemchep/keyguard/feature/auth/common/util/ValidationTitle;->$values()[Lcom/artemchep/keyguard/feature/auth/common/util/ValidationTitle; +HSPLcom/artemchep/keyguard/feature/auth/common/util/ValidationTitle;->()V +HSPLcom/artemchep/keyguard/feature/auth/common/util/ValidationTitle;->(Ljava/lang/String;I)V +HSPLcom/artemchep/keyguard/feature/auth/common/util/ValidationTitle;->values()[Lcom/artemchep/keyguard/feature/auth/common/util/ValidationTitle; +Lcom/artemchep/keyguard/feature/auth/common/util/ValidatorPasswordKt; +HSPLcom/artemchep/keyguard/feature/auth/common/util/ValidatorPasswordKt;->format(Lcom/artemchep/keyguard/feature/auth/common/util/ValidationPassword;Lcom/artemchep/keyguard/feature/navigation/state/TranslatorScope;)Ljava/lang/String; +HSPLcom/artemchep/keyguard/feature/auth/common/util/ValidatorPasswordKt;->validatePassword(Ljava/lang/String;)Lcom/artemchep/keyguard/feature/auth/common/util/ValidationPassword; +HSPLcom/artemchep/keyguard/feature/auth/common/util/ValidatorPasswordKt;->validatedPassword(Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/feature/navigation/state/TranslatorScope;)Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/feature/auth/common/util/ValidatorPasswordKt$WhenMappings; +HSPLcom/artemchep/keyguard/feature/auth/common/util/ValidatorPasswordKt$WhenMappings;->()V +Lcom/artemchep/keyguard/feature/auth/common/util/ValidatorPasswordKt$validatedPassword$$inlined$map$1; +HSPLcom/artemchep/keyguard/feature/auth/common/util/ValidatorPasswordKt$validatedPassword$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/feature/navigation/state/TranslatorScope;)V +HSPLcom/artemchep/keyguard/feature/auth/common/util/ValidatorPasswordKt$validatedPassword$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/auth/common/util/ValidatorPasswordKt$validatedPassword$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/feature/auth/common/util/ValidatorPasswordKt$validatedPassword$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lcom/artemchep/keyguard/feature/navigation/state/TranslatorScope;)V +HSPLcom/artemchep/keyguard/feature/auth/common/util/ValidatorPasswordKt$validatedPassword$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/auth/common/util/ValidatorPasswordKt$validatedPassword$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/feature/auth/common/util/ValidatorPasswordKt$validatedPassword$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/feature/auth/common/util/ValidatorPasswordKt$validatedPassword$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/auth/common/util/ValidatorPasswordKt$validatedPassword$$inlined$map$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/auth/common/util/ValidatorTitleKt; +HSPLcom/artemchep/keyguard/feature/auth/common/util/ValidatorTitleKt;->format(Lcom/artemchep/keyguard/feature/auth/common/util/ValidationTitle;Lcom/artemchep/keyguard/feature/navigation/state/TranslatorScope;)Ljava/lang/String; +HSPLcom/artemchep/keyguard/feature/auth/common/util/ValidatorTitleKt;->validateTitle(Ljava/lang/String;)Lcom/artemchep/keyguard/feature/auth/common/util/ValidationTitle; +HSPLcom/artemchep/keyguard/feature/auth/common/util/ValidatorTitleKt;->validatedTitle(Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/feature/navigation/state/TranslatorScope;)Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/feature/auth/common/util/ValidatorTitleKt$WhenMappings; +HSPLcom/artemchep/keyguard/feature/auth/common/util/ValidatorTitleKt$WhenMappings;->()V +Lcom/artemchep/keyguard/feature/auth/common/util/ValidatorTitleKt$validatedTitle$$inlined$map$1; +HSPLcom/artemchep/keyguard/feature/auth/common/util/ValidatorTitleKt$validatedTitle$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/feature/navigation/state/TranslatorScope;)V +HSPLcom/artemchep/keyguard/feature/auth/common/util/ValidatorTitleKt$validatedTitle$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/auth/common/util/ValidatorTitleKt$validatedTitle$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/feature/auth/common/util/ValidatorTitleKt$validatedTitle$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lcom/artemchep/keyguard/feature/navigation/state/TranslatorScope;)V +HSPLcom/artemchep/keyguard/feature/auth/common/util/ValidatorTitleKt$validatedTitle$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/auth/common/util/ValidatorTitleKt$validatedTitle$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/feature/auth/common/util/ValidatorTitleKt$validatedTitle$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/feature/auth/common/util/ValidatorTitleKt$validatedTitle$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/auth/common/util/ValidatorTitleKt$validatedTitle$$inlined$map$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/biometric/BiometricPromptEffectKt; +HSPLcom/artemchep/keyguard/feature/biometric/BiometricPromptEffectKt;->BiometricPromptEffect(Lkotlinx/coroutines/flow/Flow;Landroidx/compose/runtime/Composer;I)V +Lcom/artemchep/keyguard/feature/biometric/BiometricPromptEffectKt$BiometricPromptEffect$1$1; +HSPLcom/artemchep/keyguard/feature/biometric/BiometricPromptEffectKt$BiometricPromptEffect$1$1;->(Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/feature/crashlytics/CrashlyticsMapKt; +HSPLcom/artemchep/keyguard/feature/crashlytics/CrashlyticsMapKt;->crashlyticsTap$default(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lkotlin/jvm/functions/Function1; +HSPLcom/artemchep/keyguard/feature/crashlytics/CrashlyticsMapKt;->crashlyticsTap(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/feature/crashlytics/CrashlyticsMapKt$crashlyticsTap$$inlined$handleErrorTap$default$1; +HSPLcom/artemchep/keyguard/feature/crashlytics/CrashlyticsMapKt$crashlyticsTap$$inlined$handleErrorTap$default$1;->(Lkotlin/coroutines/Continuation;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V +HSPLcom/artemchep/keyguard/feature/crashlytics/CrashlyticsMapKt$crashlyticsTap$$inlined$handleErrorTap$default$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/crashlytics/CrashlyticsMapKt$crashlyticsTap$$inlined$handleErrorTap$default$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/crashlytics/CrashlyticsMapKt$crashlyticsTap$$inlined$handleErrorTap$default$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/crashlytics/CrashlyticsMapKt$crashlyticsTap$$inlined$handleErrorTap$default$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/crashlytics/CrashlyticsMapKt$crashlyticsTap$1; +HSPLcom/artemchep/keyguard/feature/crashlytics/CrashlyticsMapKt$crashlyticsTap$1;->()V +HSPLcom/artemchep/keyguard/feature/crashlytics/CrashlyticsMapKt$crashlyticsTap$1;->()V +Lcom/artemchep/keyguard/feature/decorator/ItemDecorator; +Lcom/artemchep/keyguard/feature/decorator/ItemDecoratorNone; +HSPLcom/artemchep/keyguard/feature/decorator/ItemDecoratorNone;->()V +HSPLcom/artemchep/keyguard/feature/decorator/ItemDecoratorNone;->()V +Lcom/artemchep/keyguard/feature/duplicates/DuplicatesStateProducerKt; +HSPLcom/artemchep/keyguard/feature/duplicates/DuplicatesStateProducerKt;->createCipherSelectionFlow(Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;Lcom/artemchep/keyguard/ui/selection/SelectionHandle;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/common/usecase/CipherToolbox;)Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/feature/duplicates/DuplicatesStateProducerKt$createCipherSelectionFlow$1; +HSPLcom/artemchep/keyguard/feature/duplicates/DuplicatesStateProducerKt$createCipherSelectionFlow$1;->(Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;Lcom/artemchep/keyguard/common/usecase/CipherToolbox;Lcom/artemchep/keyguard/ui/selection/SelectionHandle;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/duplicates/DuplicatesStateProducerKt$createCipherSelectionFlow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/duplicates/DuplicatesStateProducerKt$createCipherSelectionFlow$1;->invoke(Ljava/util/List;Ljava/util/Set;Ljava/util/List;ZLkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/duplicates/DuplicatesStateProducerKt$createCipherSelectionFlow$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/favicon/Favicon; +HSPLcom/artemchep/keyguard/feature/favicon/Favicon;->()V +HSPLcom/artemchep/keyguard/feature/favicon/Favicon;->()V +HSPLcom/artemchep/keyguard/feature/favicon/Favicon;->launch(Lkotlinx/coroutines/CoroutineScope;Lcom/artemchep/keyguard/common/usecase/GetAccounts;)V +HSPLcom/artemchep/keyguard/feature/favicon/Favicon;->setServers(Ljava/util/List;)V +Lcom/artemchep/keyguard/feature/favicon/Favicon$launch$$inlined$map$1; +HSPLcom/artemchep/keyguard/feature/favicon/Favicon$launch$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/feature/favicon/Favicon$launch$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/favicon/Favicon$launch$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/feature/favicon/Favicon$launch$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/feature/favicon/Favicon$launch$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/favicon/Favicon$launch$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/feature/favicon/Favicon$launch$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/feature/favicon/Favicon$launch$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/feature/favicon/Favicon$launch$2; +HSPLcom/artemchep/keyguard/feature/favicon/Favicon$launch$2;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/favicon/Favicon$launch$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/favicon/Favicon$launch$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/favicon/Favicon$launch$2;->invoke(Ljava/util/List;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/favicon/Favicon$launch$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/favicon/GravatarUrl; +Lcom/artemchep/keyguard/feature/generator/GeneratorRoute; +HSPLcom/artemchep/keyguard/feature/generator/GeneratorRoute;->()V +HSPLcom/artemchep/keyguard/feature/generator/GeneratorRoute;->(Lcom/artemchep/keyguard/feature/generator/GeneratorRoute$Args;)V +Lcom/artemchep/keyguard/feature/generator/GeneratorRoute$Args; +HSPLcom/artemchep/keyguard/feature/generator/GeneratorRoute$Args;->()V +HSPLcom/artemchep/keyguard/feature/generator/GeneratorRoute$Args;->(ZZ)V +Lcom/artemchep/keyguard/feature/generator/history/GeneratorHistoryStateProducerKt; +HSPLcom/artemchep/keyguard/feature/generator/history/GeneratorHistoryStateProducerKt;->mapLatestScoped(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function3;)Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/feature/generator/history/GeneratorHistoryStateProducerKt$mapLatestScoped$$inlined$flatMapLatest$1; +HSPLcom/artemchep/keyguard/feature/generator/history/GeneratorHistoryStateProducerKt$mapLatestScoped$$inlined$flatMapLatest$1;->(Lkotlin/coroutines/Continuation;Lkotlin/jvm/functions/Function3;)V +HSPLcom/artemchep/keyguard/feature/generator/history/GeneratorHistoryStateProducerKt$mapLatestScoped$$inlined$flatMapLatest$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/generator/history/GeneratorHistoryStateProducerKt$mapLatestScoped$$inlined$flatMapLatest$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/generator/history/GeneratorHistoryStateProducerKt$mapLatestScoped$$inlined$flatMapLatest$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/generator/history/GeneratorHistoryStateProducerKt$mapLatestScoped$1$1; +HSPLcom/artemchep/keyguard/feature/generator/history/GeneratorHistoryStateProducerKt$mapLatestScoped$1$1;->(Lkotlin/jvm/functions/Function3;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/generator/history/GeneratorHistoryStateProducerKt$mapLatestScoped$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/generator/history/GeneratorHistoryStateProducerKt$mapLatestScoped$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/generator/history/GeneratorHistoryStateProducerKt$mapLatestScoped$1$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/generator/history/GeneratorHistoryStateProducerKt$mapLatestScoped$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/generator/history/GeneratorHistoryStateProducerKt$mapLatestScoped$1$1$1; +HSPLcom/artemchep/keyguard/feature/generator/history/GeneratorHistoryStateProducerKt$mapLatestScoped$1$1$1;->(Lkotlin/jvm/functions/Function3;Ljava/lang/Object;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/generator/history/GeneratorHistoryStateProducerKt$mapLatestScoped$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/generator/history/GeneratorHistoryStateProducerKt$mapLatestScoped$1$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/generator/history/GeneratorHistoryStateProducerKt$mapLatestScoped$1$1$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/generator/history/GeneratorHistoryStateProducerKt$mapLatestScoped$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/BannerStatusBadgeContentModel; +HSPLcom/artemchep/keyguard/feature/home/BannerStatusBadgeContentModel;->(ILcom/artemchep/keyguard/feature/localization/TextHolder;Lcom/artemchep/keyguard/feature/localization/TextHolder;ZLkotlin/jvm/functions/Function0;)V +HSPLcom/artemchep/keyguard/feature/home/BannerStatusBadgeContentModel;->equals(Ljava/lang/Object;)Z +HSPLcom/artemchep/keyguard/feature/home/BannerStatusBadgeContentModel;->getCount()I +HSPLcom/artemchep/keyguard/feature/home/BannerStatusBadgeContentModel;->getError()Z +HSPLcom/artemchep/keyguard/feature/home/BannerStatusBadgeContentModel;->getOnClick()Lkotlin/jvm/functions/Function0; +HSPLcom/artemchep/keyguard/feature/home/BannerStatusBadgeContentModel;->getText()Lcom/artemchep/keyguard/feature/localization/TextHolder; +HSPLcom/artemchep/keyguard/feature/home/BannerStatusBadgeContentModel;->getTitle()Lcom/artemchep/keyguard/feature/localization/TextHolder; +Lcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt; +HSPLcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt;->()V +HSPLcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt;->()V +HSPLcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt;->getLambda-1$common_noneRelease()Lkotlin/jvm/functions/Function3; +HSPLcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt;->getLambda-2$common_noneRelease()Lkotlin/jvm/functions/Function3; +HSPLcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt;->getLambda-4$common_noneRelease()Lkotlin/jvm/functions/Function3; +Lcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt$lambda-1$1; +HSPLcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt$lambda-1$1;->()V +HSPLcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt$lambda-1$1;->()V +Lcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt$lambda-2$1; +HSPLcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt$lambda-2$1;->()V +HSPLcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt$lambda-2$1;->()V +HSPLcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt$lambda-2$1;->invoke(Lcom/artemchep/keyguard/feature/home/BannerStatusBadgeContentModel;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt$lambda-2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt$lambda-3$1; +HSPLcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt$lambda-3$1;->()V +HSPLcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt$lambda-3$1;->()V +Lcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt$lambda-4$1; +HSPLcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt$lambda-4$1;->()V +HSPLcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt$lambda-4$1;->()V +HSPLcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt$lambda-4$1;->invoke(Lcom/artemchep/keyguard/feature/localization/TextHolder;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt$lambda-4$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt$lambda-5$1; +HSPLcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt$lambda-5$1;->()V +HSPLcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt$lambda-5$1;->()V +Lcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt$lambda-6$1; +HSPLcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt$lambda-6$1;->()V +HSPLcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt$lambda-6$1;->()V +Lcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt$lambda-7$1; +HSPLcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt$lambda-7$1;->()V +HSPLcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt$lambda-7$1;->()V +Lcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt$lambda-8$1; +HSPLcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt$lambda-8$1;->()V +HSPLcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt$lambda-8$1;->()V +Lcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt$lambda-9$1; +HSPLcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt$lambda-9$1;->()V +HSPLcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt$lambda-9$1;->()V +Lcom/artemchep/keyguard/feature/home/HomeLayout; +Lcom/artemchep/keyguard/feature/home/HomeLayout$Horizontal; +Lcom/artemchep/keyguard/feature/home/HomeLayout$Vertical; +HSPLcom/artemchep/keyguard/feature/home/HomeLayout$Vertical;->()V +HSPLcom/artemchep/keyguard/feature/home/HomeLayout$Vertical;->()V +Lcom/artemchep/keyguard/feature/home/HomeLayoutKt; +HSPLcom/artemchep/keyguard/feature/home/HomeLayoutKt;->()V +HSPLcom/artemchep/keyguard/feature/home/HomeLayoutKt;->ResponsiveLayout(Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/HomeLayoutKt;->getLocalHomeLayout()Landroidx/compose/runtime/ProvidableCompositionLocal; +Lcom/artemchep/keyguard/feature/home/HomeLayoutKt$LocalHomeLayout$1; +HSPLcom/artemchep/keyguard/feature/home/HomeLayoutKt$LocalHomeLayout$1;->()V +HSPLcom/artemchep/keyguard/feature/home/HomeLayoutKt$LocalHomeLayout$1;->()V +Lcom/artemchep/keyguard/feature/home/HomeLayoutKt$ResponsiveLayout$1; +HSPLcom/artemchep/keyguard/feature/home/HomeLayoutKt$ResponsiveLayout$1;->(Lkotlin/jvm/functions/Function2;)V +HSPLcom/artemchep/keyguard/feature/home/HomeLayoutKt$ResponsiveLayout$1;->invoke(Landroidx/compose/foundation/layout/BoxWithConstraintsScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/HomeLayoutKt$ResponsiveLayout$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/HomeLayoutKt$ResponsiveLayout$1$1; +HSPLcom/artemchep/keyguard/feature/home/HomeLayoutKt$ResponsiveLayout$1$1;->(Lkotlin/jvm/functions/Function2;)V +HSPLcom/artemchep/keyguard/feature/home/HomeLayoutKt$ResponsiveLayout$1$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/HomeLayoutKt$ResponsiveLayout$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/HomeScreenKt; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt;->()V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt;->BannerStatusBadge(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/State;Landroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt;->BannerStatusBadgeContent(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Lcom/artemchep/keyguard/feature/home/BannerStatusBadgeContentModel;Landroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt;->BottomNavigationControllerItem(Landroidx/compose/foundation/layout/RowScope;Ljava/util/List;Lcom/artemchep/keyguard/feature/navigation/Route;Landroidx/compose/ui/graphics/vector/ImageVector;Landroidx/compose/ui/graphics/vector/ImageVector;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt;->HomeEffect$lambda$0(Lkotlin/Lazy;)Lcom/artemchep/keyguard/core/store/DatabaseManager; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt;->HomeEffect(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt;->HomeScreen(Lcom/artemchep/keyguard/feature/navigation/Route;ZLandroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt;->HomeScreenContent(Lkotlinx/collections/immutable/PersistentList;Ljava/util/List;ZLandroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt;->NavigationIcon(ZLandroidx/compose/ui/graphics/vector/ImageVector;Landroidx/compose/ui/graphics/vector/ImageVector;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt;->access$BannerStatusBadge(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/State;Landroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt;->access$BannerStatusBadgeContent(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Lcom/artemchep/keyguard/feature/home/BannerStatusBadgeContentModel;Landroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt;->access$BottomNavigationControllerItem(Landroidx/compose/foundation/layout/RowScope;Ljava/util/List;Lcom/artemchep/keyguard/feature/navigation/Route;Landroidx/compose/ui/graphics/vector/ImageVector;Landroidx/compose/ui/graphics/vector/ImageVector;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt;->access$HomeEffect$lambda$0(Lkotlin/Lazy;)Lcom/artemchep/keyguard/core/store/DatabaseManager; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt;->access$NavigationIcon(ZLandroidx/compose/ui/graphics/vector/ImageVector;Landroidx/compose/ui/graphics/vector/ImageVector;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt;->access$getVaultRoute$p()Lcom/artemchep/keyguard/feature/home/vault/VaultRoute; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt;->isSelected(Ljava/util/List;Lcom/artemchep/keyguard/feature/navigation/Route;)Z +Lcom/artemchep/keyguard/feature/home/HomeScreenKt$BannerStatusBadge$1; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$BannerStatusBadge$1;->(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/State;II)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$BannerStatusBadge$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$BannerStatusBadge$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/HomeScreenKt$BannerStatusBadge$errorState$1$1; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$BannerStatusBadge$errorState$1$1;->(Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$BannerStatusBadge$errorState$1$1;->invoke()Lcom/artemchep/keyguard/feature/home/BannerStatusBadgeContentModel; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$BannerStatusBadge$errorState$1$1;->invoke()Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/HomeScreenKt$BannerStatusBadge$errorState$1$1$2; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$BannerStatusBadge$errorState$1$1$2;->(Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;)V +Lcom/artemchep/keyguard/feature/home/HomeScreenKt$BannerStatusBadgeContent$2; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$BannerStatusBadgeContent$2;->(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Lcom/artemchep/keyguard/feature/home/BannerStatusBadgeContentModel;II)V +Lcom/artemchep/keyguard/feature/home/HomeScreenKt$BottomNavigationControllerItem$1; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$BottomNavigationControllerItem$1;->(Lcom/artemchep/keyguard/feature/navigation/NavigationController;Ljava/util/List;Lcom/artemchep/keyguard/feature/navigation/Route;)V +Lcom/artemchep/keyguard/feature/home/HomeScreenKt$BottomNavigationControllerItem$2; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$BottomNavigationControllerItem$2;->(ZLandroidx/compose/ui/graphics/vector/ImageVector;Landroidx/compose/ui/graphics/vector/ImageVector;Lkotlin/jvm/functions/Function3;)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$BottomNavigationControllerItem$2;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$BottomNavigationControllerItem$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeEffect$$inlined$rememberInstance$1; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeEffect$$inlined$rememberInstance$1;->()V +Lcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeEffect$$inlined$rememberInstance$2; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeEffect$$inlined$rememberInstance$2;->()V +Lcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeEffect$1; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeEffect$1;->(Lkotlin/Lazy;Lkotlin/Lazy;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeEffect$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeEffect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeEffect$1$1; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeEffect$1$1;->(Lkotlin/Lazy;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeEffect$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeEffect$1$1;->invoke(Lcom/artemchep/keyguard/data/Database;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeEffect$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeEffect$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeEffect$1$1$1; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeEffect$1$1$1;->([Lcom/artemchep/keyguard/data/bitwarden/Cipher;Lcom/artemchep/keyguard/data/Database;)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeEffect$1$1$1;->invoke(Lapp/cash/sqldelight/TransactionWithoutReturn;)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeEffect$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeEffect$2; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeEffect$2;->(I)V +Lcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreen$1; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreen$1;->(Ljava/util/List;Z)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreen$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreen$1;->invoke(Lkotlinx/collections/immutable/PersistentList;Landroidx/compose/runtime/Composer;I)V +Lcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1;->()V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1;->(ZLjava/util/List;Lkotlinx/collections/immutable/PersistentList;)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1;->access$invoke$lambda$6$lambda$0(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetNavLabel; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1;->access$invoke$lambda$6$lambda$2(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetAccountStatus; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1;->invoke$lambda$6$lambda$0(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetNavLabel; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1;->invoke$lambda$6$lambda$2(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetAccountStatus; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1$1$1; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1$1$1;->(Ljava/util/List;Lkotlinx/collections/immutable/PersistentList;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;)V +Lcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1$1$2$1$1; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1$1$2$1$1;->(Lkotlinx/collections/immutable/PersistentList;)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1$1$2$1$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1$1$2$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1$1$2$2; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1$1$2$2;->(Landroidx/compose/runtime/State;Landroidx/compose/foundation/layout/ColumnScope;Landroidx/compose/foundation/layout/WindowInsets;Ljava/util/List;Lkotlinx/collections/immutable/PersistentList;Landroidx/compose/runtime/State;)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1$1$2$2;->invoke(Landroidx/compose/animation/AnimatedVisibilityScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1$1$2$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1$1$2$2$1; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1$1$2$2$1;->(Landroidx/compose/runtime/State;Landroidx/compose/foundation/layout/ColumnScope;Landroidx/compose/foundation/layout/WindowInsets;Ljava/util/List;Lkotlinx/collections/immutable/PersistentList;Landroidx/compose/runtime/State;)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1$1$2$2$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1$1$2$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1$1$2$2$1$1$1$1$1; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1$1$2$2$1$1$1$1$1;->(Lcom/artemchep/keyguard/feature/home/Rail;)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1$1$2$2$1$1$1$1$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1$1$2$2$1$1$1$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1$1$2$2$1$isSyncingState$1$1; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1$1$2$2$1$isSyncingState$1$1;->(Landroidx/compose/runtime/State;)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1$1$2$2$1$isSyncingState$1$1;->invoke()Ljava/lang/Boolean; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1$1$2$2$1$isSyncingState$1$1;->invoke()Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1$invoke$lambda$6$$inlined$rememberInstance$1; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1$invoke$lambda$6$$inlined$rememberInstance$1;->()V +Lcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1$invoke$lambda$6$$inlined$rememberInstance$2; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1$invoke$lambda$6$$inlined$rememberInstance$2;->()V +Lcom/artemchep/keyguard/feature/home/HomeScreenKt$NavigationIcon$1; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$NavigationIcon$1;->(Landroidx/compose/ui/graphics/vector/ImageVector;Landroidx/compose/ui/graphics/vector/ImageVector;)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$NavigationIcon$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$NavigationIcon$1;->invoke(ZLandroidx/compose/runtime/Composer;I)V +Lcom/artemchep/keyguard/feature/home/Rail; +HSPLcom/artemchep/keyguard/feature/home/Rail;->()V +HSPLcom/artemchep/keyguard/feature/home/Rail;->(Lcom/artemchep/keyguard/feature/navigation/Route;Landroidx/compose/ui/graphics/vector/ImageVector;Landroidx/compose/ui/graphics/vector/ImageVector;Lcom/artemchep/keyguard/feature/localization/TextHolder;)V +HSPLcom/artemchep/keyguard/feature/home/Rail;->getIcon()Landroidx/compose/ui/graphics/vector/ImageVector; +HSPLcom/artemchep/keyguard/feature/home/Rail;->getIconSelected()Landroidx/compose/ui/graphics/vector/ImageVector; +HSPLcom/artemchep/keyguard/feature/home/Rail;->getLabel()Lcom/artemchep/keyguard/feature/localization/TextHolder; +HSPLcom/artemchep/keyguard/feature/home/Rail;->getRoute()Lcom/artemchep/keyguard/feature/navigation/Route; +Lcom/artemchep/keyguard/feature/home/settings/SettingsRoute; +HSPLcom/artemchep/keyguard/feature/home/settings/SettingsRoute;->()V +HSPLcom/artemchep/keyguard/feature/home/settings/SettingsRoute;->()V +Lcom/artemchep/keyguard/feature/home/vault/ComposableSingletons$VaultScreenKt; +HSPLcom/artemchep/keyguard/feature/home/vault/ComposableSingletons$VaultScreenKt;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/ComposableSingletons$VaultScreenKt;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/ComposableSingletons$VaultScreenKt;->getLambda-1$common_noneRelease()Lkotlin/jvm/functions/Function3; +Lcom/artemchep/keyguard/feature/home/vault/ComposableSingletons$VaultScreenKt$lambda-1$1; +HSPLcom/artemchep/keyguard/feature/home/vault/ComposableSingletons$VaultScreenKt$lambda-1$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/ComposableSingletons$VaultScreenKt$lambda-1$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/ComposableSingletons$VaultScreenKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/ComposableSingletons$VaultScreenKt$lambda-1$1;->invoke(Lkotlinx/collections/immutable/PersistentList;Landroidx/compose/runtime/Composer;I)V +Lcom/artemchep/keyguard/feature/home/vault/VaultRoute; +HSPLcom/artemchep/keyguard/feature/home/vault/VaultRoute;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/VaultRoute;->(Lcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args;)V +HSPLcom/artemchep/keyguard/feature/home/vault/VaultRoute;->(Lcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/feature/home/vault/VaultRoute;->Content(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/vault/VaultRoute;->hashCode()I +Lcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args; +HSPLcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args;->(Lcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args$AppBar;Lcom/artemchep/keyguard/common/model/DFilter;Lcom/artemchep/keyguard/feature/home/vault/search/sort/Sort;ZLcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args$SearchBy;Ljava/lang/Boolean;ZZ)V +HSPLcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args;->(Lcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args$AppBar;Lcom/artemchep/keyguard/common/model/DFilter;Lcom/artemchep/keyguard/feature/home/vault/search/sort/Sort;ZLcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args$SearchBy;Ljava/lang/Boolean;ZZILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args;->equals(Ljava/lang/Object;)Z +HSPLcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args;->getAppBar()Lcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args$AppBar; +HSPLcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args;->getCanAddSecrets()Z +HSPLcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args;->getCanAlwaysShowKeyboard()Z +HSPLcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args;->getCanQuickFilter()Z +HSPLcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args;->getFilter()Lcom/artemchep/keyguard/common/model/DFilter; +HSPLcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args;->getPreselect()Z +HSPLcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args;->getSort()Lcom/artemchep/keyguard/feature/home/vault/search/sort/Sort; +HSPLcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args;->hashCode()I +Lcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args$AppBar; +Lcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args$SearchBy; +HSPLcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args$SearchBy;->$values()[Lcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args$SearchBy; +HSPLcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args$SearchBy;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args$SearchBy;->(Ljava/lang/String;I)V +Lcom/artemchep/keyguard/feature/home/vault/VaultRoute$Companion; +HSPLcom/artemchep/keyguard/feature/home/vault/VaultRoute$Companion;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/VaultRoute$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/feature/home/vault/VaultScreenKt; +HSPLcom/artemchep/keyguard/feature/home/vault/VaultScreenKt;->VaultScreen(Lcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args;Landroidx/compose/runtime/Composer;I)V +Lcom/artemchep/keyguard/feature/home/vault/VaultScreenKt$VaultScreen$1; +HSPLcom/artemchep/keyguard/feature/home/vault/VaultScreenKt$VaultScreen$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListRoute;)V +HSPLcom/artemchep/keyguard/feature/home/vault/VaultScreenKt$VaultScreen$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/vault/VaultScreenKt$VaultScreen$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/VaultScreenKt$VaultScreen$2; +HSPLcom/artemchep/keyguard/feature/home/vault/VaultScreenKt$VaultScreen$2;->(Lcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args;I)V +Lcom/artemchep/keyguard/feature/home/vault/component/SearchTextFieldKt; +HSPLcom/artemchep/keyguard/feature/home/vault/component/SearchTextFieldKt;->SearchTextField(Landroidx/compose/ui/Modifier;Ljava/lang/String;Ljava/lang/String;ZLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/feature/home/vault/component/SearchTextFieldKt;->searchTextFieldBackground(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/ui/graphics/Shape;)Landroidx/compose/ui/Modifier; +Lcom/artemchep/keyguard/feature/home/vault/component/SearchTextFieldKt$SearchTextField$1$1$2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/component/SearchTextFieldKt$SearchTextField$1$1$2$1;->(Lkotlin/jvm/functions/Function0;)V +Lcom/artemchep/keyguard/feature/home/vault/component/SearchTextFieldKt$SearchTextField$1$1$3$1; +HSPLcom/artemchep/keyguard/feature/home/vault/component/SearchTextFieldKt$SearchTextField$1$1$3$1;->(Landroidx/compose/runtime/State;)V +Lcom/artemchep/keyguard/feature/home/vault/component/SearchTextFieldKt$SearchTextField$1$1$4; +HSPLcom/artemchep/keyguard/feature/home/vault/component/SearchTextFieldKt$SearchTextField$1$1$4;->(Ljava/lang/String;Landroidx/compose/ui/text/TextStyle;)V +HSPLcom/artemchep/keyguard/feature/home/vault/component/SearchTextFieldKt$SearchTextField$1$1$4;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/vault/component/SearchTextFieldKt$SearchTextField$1$1$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/component/SearchTextFieldKt$SearchTextField$1$1$6; +HSPLcom/artemchep/keyguard/feature/home/vault/component/SearchTextFieldKt$SearchTextField$1$1$6;->(Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/State;)V +Lcom/artemchep/keyguard/feature/home/vault/component/SearchTextFieldKt$SearchTextField$2; +HSPLcom/artemchep/keyguard/feature/home/vault/component/SearchTextFieldKt$SearchTextField$2;->(Landroidx/compose/ui/Modifier;Ljava/lang/String;Ljava/lang/String;ZLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;II)V +Lcom/artemchep/keyguard/feature/home/vault/component/SearchTextFieldKt$searchTextFieldBackground$1; +HSPLcom/artemchep/keyguard/feature/home/vault/component/SearchTextFieldKt$searchTextFieldBackground$1;->(Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/ui/graphics/Shape;)V +HSPLcom/artemchep/keyguard/feature/home/vault/component/SearchTextFieldKt$searchTextFieldBackground$1;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier; +HSPLcom/artemchep/keyguard/feature/home/vault/component/SearchTextFieldKt$searchTextFieldBackground$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/component/SearchTextFieldKt$searchTextFieldBackground$1$1$1; +HSPLcom/artemchep/keyguard/feature/home/vault/component/SearchTextFieldKt$searchTextFieldBackground$1$1$1;->(Landroidx/compose/runtime/State;)V +HSPLcom/artemchep/keyguard/feature/home/vault/component/SearchTextFieldKt$searchTextFieldBackground$1$1$1;->invoke(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V +HSPLcom/artemchep/keyguard/feature/home/vault/component/SearchTextFieldKt$searchTextFieldBackground$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/component/SearchTextFieldKt$searchTextFieldBackground$1$isHighlightedState$1$1; +HSPLcom/artemchep/keyguard/feature/home/vault/component/SearchTextFieldKt$searchTextFieldBackground$1$isHighlightedState$1$1;->(Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;)V +HSPLcom/artemchep/keyguard/feature/home/vault/component/SearchTextFieldKt$searchTextFieldBackground$1$isHighlightedState$1$1;->invoke()Ljava/lang/Boolean; +HSPLcom/artemchep/keyguard/feature/home/vault/component/SearchTextFieldKt$searchTextFieldBackground$1$isHighlightedState$1$1;->invoke()Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/model/FilterItem; +Lcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Item; +HSPLcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Item;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Item;->(Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;ZZILkotlin/jvm/functions/Function2;Ljava/lang/String;Ljava/lang/String;Lkotlin/jvm/functions/Function0;)V +HSPLcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Item;->copy$default(Lcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Item;Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;ZZILkotlin/jvm/functions/Function2;Ljava/lang/String;Ljava/lang/String;Lkotlin/jvm/functions/Function0;ILjava/lang/Object;)Lcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Item; +HSPLcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Item;->copy(Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;ZZILkotlin/jvm/functions/Function2;Ljava/lang/String;Ljava/lang/String;Lkotlin/jvm/functions/Function0;)Lcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Item; +HSPLcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Item;->getChecked()Z +HSPLcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Item;->getFilterSectionId()Ljava/lang/String; +HSPLcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Item;->getFilters()Ljava/util/Set; +HSPLcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Item;->getSectionId()Ljava/lang/String; +Lcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Item$Companion; +HSPLcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Item$Companion;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Item$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Item$id$1; +HSPLcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Item$id$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Item$id$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Item$id$1;->invoke(Lcom/artemchep/keyguard/common/model/DFilter$Primitive;)Ljava/lang/CharSequence; +HSPLcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Item$id$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Section; +HSPLcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Section;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Section;->(Ljava/lang/String;Ljava/lang/String;ZLkotlin/jvm/functions/Function0;)V +HSPLcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Section;->(Ljava/lang/String;Ljava/lang/String;ZLkotlin/jvm/functions/Function0;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Section;->getSectionId()Ljava/lang/String; +Lcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Section$Companion; +HSPLcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Section$Companion;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Section$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/feature/home/vault/model/SortItem; +Lcom/artemchep/keyguard/feature/home/vault/model/SortItem$Item; +HSPLcom/artemchep/keyguard/feature/home/vault/model/SortItem$Item;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/model/SortItem$Item;->(Ljava/lang/String;Lcom/artemchep/keyguard/feature/home/vault/screen/ComparatorHolder;Landroidx/compose/ui/graphics/vector/ImageVector;Lcom/artemchep/keyguard/feature/localization/TextHolder;ZLkotlin/jvm/functions/Function0;)V +HSPLcom/artemchep/keyguard/feature/home/vault/model/SortItem$Item;->copy$default(Lcom/artemchep/keyguard/feature/home/vault/model/SortItem$Item;Ljava/lang/String;Lcom/artemchep/keyguard/feature/home/vault/screen/ComparatorHolder;Landroidx/compose/ui/graphics/vector/ImageVector;Lcom/artemchep/keyguard/feature/localization/TextHolder;ZLkotlin/jvm/functions/Function0;ILjava/lang/Object;)Lcom/artemchep/keyguard/feature/home/vault/model/SortItem$Item; +HSPLcom/artemchep/keyguard/feature/home/vault/model/SortItem$Item;->copy(Ljava/lang/String;Lcom/artemchep/keyguard/feature/home/vault/screen/ComparatorHolder;Landroidx/compose/ui/graphics/vector/ImageVector;Lcom/artemchep/keyguard/feature/localization/TextHolder;ZLkotlin/jvm/functions/Function0;)Lcom/artemchep/keyguard/feature/home/vault/model/SortItem$Item; +HSPLcom/artemchep/keyguard/feature/home/vault/model/SortItem$Item;->getConfig()Lcom/artemchep/keyguard/feature/home/vault/screen/ComparatorHolder; +Lcom/artemchep/keyguard/feature/home/vault/model/SortItem$Section; +HSPLcom/artemchep/keyguard/feature/home/vault/model/SortItem$Section;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/model/SortItem$Section;->(Ljava/lang/String;Lcom/artemchep/keyguard/feature/localization/TextHolder;)V +Lcom/artemchep/keyguard/feature/home/vault/model/SortItem$Section$Companion; +HSPLcom/artemchep/keyguard/feature/home/vault/model/SortItem$Section$Companion;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/model/SortItem$Section$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/feature/home/vault/model/VaultItem2; +Lcom/artemchep/keyguard/feature/home/vault/model/VaultItem2$Item; +Lcom/artemchep/keyguard/feature/home/vault/model/VaultItem2$Item$LocalState; +HSPLcom/artemchep/keyguard/feature/home/vault/model/VaultItem2$Item$LocalState;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/model/VaultItem2$Item$LocalState;->(Lcom/artemchep/keyguard/feature/home/vault/model/VaultItem2$Item$OpenedState;Lcom/artemchep/keyguard/feature/attachments/SelectableItemState;)V +Lcom/artemchep/keyguard/feature/home/vault/model/VaultItem2$Item$OpenedState; +HSPLcom/artemchep/keyguard/feature/home/vault/model/VaultItem2$Item$OpenedState;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/model/VaultItem2$Item$OpenedState;->(Z)V +Lcom/artemchep/keyguard/feature/home/vault/model/VaultItem2$NoItems; +HSPLcom/artemchep/keyguard/feature/home/vault/model/VaultItem2$NoItems;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/model/VaultItem2$NoItems;->()V +Lcom/artemchep/keyguard/feature/home/vault/model/VaultItem2$QuickFilters; +HSPLcom/artemchep/keyguard/feature/home/vault/model/VaultItem2$QuickFilters;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/model/VaultItem2$QuickFilters;->(Ljava/lang/String;Lkotlinx/collections/immutable/ImmutableList;)V +Lcom/artemchep/keyguard/feature/home/vault/model/VaultItem2$QuickFilters$Companion; +HSPLcom/artemchep/keyguard/feature/home/vault/model/VaultItem2$QuickFilters$Companion;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/model/VaultItem2$QuickFilters$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/ComparatorHolder; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComparatorHolder;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComparatorHolder;->(Lcom/artemchep/keyguard/feature/home/vault/search/sort/Sort;ZZ)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComparatorHolder;->(Lcom/artemchep/keyguard/feature/home/vault/search/sort/Sort;ZZILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComparatorHolder;->equals(Ljava/lang/Object;)Z +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComparatorHolder;->getComparator()Lcom/artemchep/keyguard/feature/home/vault/search/sort/Sort; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComparatorHolder;->hashCode()I +Lcom/artemchep/keyguard/feature/home/vault/screen/ComparatorHolder$Companion; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComparatorHolder$Companion;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComparatorHolder$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/ComparatorHolder$Creator; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComparatorHolder$Creator;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt;->getLambda-1$common_noneRelease()Lkotlin/jvm/functions/Function2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt;->getLambda-2$common_noneRelease()Lkotlin/jvm/functions/Function3; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt;->getLambda-3$common_noneRelease()Lkotlin/jvm/functions/Function3; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt;->getLambda-4$common_noneRelease()Lkotlin/jvm/functions/Function2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt;->getLambda-5$common_noneRelease()Lkotlin/jvm/functions/Function3; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt;->getLambda-6$common_noneRelease()Lkotlin/jvm/functions/Function3; +Lcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt$lambda-1$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt$lambda-1$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt$lambda-1$1;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt$lambda-2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt$lambda-2$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt$lambda-2$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt$lambda-2$1;->invoke(Landroidx/compose/foundation/lazy/LazyItemScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt$lambda-2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt$lambda-3$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt$lambda-3$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt$lambda-3$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt$lambda-3$1;->invoke(Landroidx/compose/foundation/lazy/LazyItemScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt$lambda-3$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt$lambda-4$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt$lambda-4$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt$lambda-4$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt$lambda-4$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt$lambda-4$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt$lambda-5$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt$lambda-5$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt$lambda-5$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt$lambda-5$1;->invoke(Landroidx/compose/foundation/layout/RowScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt$lambda-5$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt$lambda-6$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt$lambda-6$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt$lambda-6$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt$lambda-6$1;->invoke(Landroidx/compose/foundation/layout/RowScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt$lambda-6$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListStateProducerKt; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListStateProducerKt;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListStateProducerKt;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListStateProducerKt;->getLambda-1$common_noneRelease()Lkotlin/jvm/functions/Function2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListStateProducerKt;->getLambda-2$common_noneRelease()Lkotlin/jvm/functions/Function2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListStateProducerKt;->getLambda-3$common_noneRelease()Lkotlin/jvm/functions/Function2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListStateProducerKt;->getLambda-4$common_noneRelease()Lkotlin/jvm/functions/Function2; +Lcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListStateProducerKt$lambda-1$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListStateProducerKt$lambda-1$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListStateProducerKt$lambda-1$1;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListStateProducerKt$lambda-2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListStateProducerKt$lambda-2$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListStateProducerKt$lambda-2$1;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListStateProducerKt$lambda-3$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListStateProducerKt$lambda-3$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListStateProducerKt$lambda-3$1;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListStateProducerKt$lambda-4$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListStateProducerKt$lambda-4$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListStateProducerKt$lambda-4$1;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListStateProducerKt$lambda-5$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListStateProducerKt$lambda-5$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListStateProducerKt$lambda-5$1;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListStateProducerKt$lambda-6$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListStateProducerKt$lambda-6$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListStateProducerKt$lambda-6$1;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListStateProducerKt$lambda-7$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListStateProducerKt$lambda-7$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListStateProducerKt$lambda-7$1;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListStateProducerKt$lambda-8$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListStateProducerKt$lambda-8$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListStateProducerKt$lambda-8$1;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/CreateFilterResult; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/CreateFilterResult;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/CreateFilterResult;->(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/CreateFilterResult;->getFilterFlow()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/CreateFilterResult;->getOnClear()Lkotlin/jvm/functions/Function0; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/CreateFilterResult;->getOnToggle()Lkotlin/jvm/functions/Function2; +Lcom/artemchep/keyguard/feature/home/vault/screen/FilterParams; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/FilterParams;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/FilterParams;->(Ljava/lang/String;Lcom/artemchep/keyguard/feature/home/vault/screen/FilterParams$Section;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/FilterParams;->(Ljava/lang/String;Lcom/artemchep/keyguard/feature/home/vault/screen/FilterParams$Section;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/FilterParams;->getDeeplinkCustomFilter()Ljava/lang/String; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/FilterParams;->getSection()Lcom/artemchep/keyguard/feature/home/vault/screen/FilterParams$Section; +Lcom/artemchep/keyguard/feature/home/vault/screen/FilterParams$Section; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/FilterParams$Section;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/FilterParams$Section;->(ZZZZZZ)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/FilterParams$Section;->(ZZZZZZILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/FilterParams$Section;->getAccount()Z +HSPLcom/artemchep/keyguard/feature/home/vault/screen/FilterParams$Section;->getCollection()Z +HSPLcom/artemchep/keyguard/feature/home/vault/screen/FilterParams$Section;->getFolder()Z +HSPLcom/artemchep/keyguard/feature/home/vault/screen/FilterParams$Section;->getMisc()Z +HSPLcom/artemchep/keyguard/feature/home/vault/screen/FilterParams$Section;->getOrganization()Z +HSPLcom/artemchep/keyguard/feature/home/vault/screen/FilterParams$Section;->getType()Z +Lcom/artemchep/keyguard/feature/home/vault/screen/FilteredBoo; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/FilteredBoo;->(ILjava/util/List;Ljava/util/List;Lcom/artemchep/keyguard/feature/home/vault/screen/ComparatorHolder;Lcom/artemchep/keyguard/feature/home/vault/search/filter/FilterHolder;Lcom/artemchep/keyguard/feature/home/vault/search/IndexedText;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/FilteredBoo;->(ILjava/util/List;Ljava/util/List;Lcom/artemchep/keyguard/feature/home/vault/screen/ComparatorHolder;Lcom/artemchep/keyguard/feature/home/vault/search/filter/FilterHolder;Lcom/artemchep/keyguard/feature/home/vault/search/IndexedText;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/FilteredBoo;->copy$default(Lcom/artemchep/keyguard/feature/home/vault/screen/FilteredBoo;ILjava/util/List;Ljava/util/List;Lcom/artemchep/keyguard/feature/home/vault/screen/ComparatorHolder;Lcom/artemchep/keyguard/feature/home/vault/search/filter/FilterHolder;Lcom/artemchep/keyguard/feature/home/vault/search/IndexedText;ILjava/lang/Object;)Lcom/artemchep/keyguard/feature/home/vault/screen/FilteredBoo; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/FilteredBoo;->copy(ILjava/util/List;Ljava/util/List;Lcom/artemchep/keyguard/feature/home/vault/screen/ComparatorHolder;Lcom/artemchep/keyguard/feature/home/vault/search/filter/FilterHolder;Lcom/artemchep/keyguard/feature/home/vault/search/IndexedText;)Lcom/artemchep/keyguard/feature/home/vault/screen/FilteredBoo; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/FilteredBoo;->getCount()I +HSPLcom/artemchep/keyguard/feature/home/vault/screen/FilteredBoo;->getFilterConfig()Lcom/artemchep/keyguard/feature/home/vault/search/filter/FilterHolder; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/FilteredBoo;->getList()Ljava/util/List; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/FilteredBoo;->getOrderConfig()Lcom/artemchep/keyguard/feature/home/vault/screen/ComparatorHolder; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/FilteredBoo;->getPreferredList()Ljava/util/List; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/FilteredBoo;->getQueryConfig()Lcom/artemchep/keyguard/feature/home/vault/search/IndexedText; +Lcom/artemchep/keyguard/feature/home/vault/screen/OhOhOh; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/OhOhOh;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/OhOhOh;->(Ljava/lang/String;II)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/OhOhOh;->(Ljava/lang/String;IIILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/OhOhOh;->getRevision()I +Lcom/artemchep/keyguard/feature/home/vault/screen/OhOhOh$Creator; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/OhOhOh$Creator;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/OurFilterResult; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/OurFilterResult;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/OurFilterResult;->(ILjava/util/List;Lkotlin/jvm/functions/Function0;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/OurFilterResult;->(ILjava/util/List;Lkotlin/jvm/functions/Function0;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/OurFilterResult;->equals(Ljava/lang/Object;)Z +HSPLcom/artemchep/keyguard/feature/home/vault/screen/OurFilterResult;->getItems()Ljava/util/List; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/OurFilterResult;->getOnClear()Lkotlin/jvm/functions/Function0; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/OurFilterResult;->getRev()I +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt;->access$ah$createFolderFilterAction(Ljava/lang/String;Lcom/artemchep/keyguard/feature/home/vault/screen/CreateFilterResult;Ljava/util/Set;Ljava/lang/String;Landroidx/compose/ui/graphics/vector/ImageVector;ZI)Lcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Item; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt;->ah$aaa$default(Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/feature/home/vault/screen/CreateFilterResult;Lkotlinx/coroutines/flow/MutableStateFlow;Ljava/lang/String;Ljava/lang/String;ZILjava/lang/Object;)Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt;->ah$aaa(Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/feature/home/vault/screen/CreateFilterResult;Lkotlinx/coroutines/flow/MutableStateFlow;Ljava/lang/String;Ljava/lang/String;Z)Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt;->ah$createCollectionFilterAction$default(Ljava/lang/String;Lcom/artemchep/keyguard/feature/home/vault/screen/CreateFilterResult;Ljava/util/Set;Ljava/lang/String;Landroidx/compose/ui/graphics/vector/ImageVector;ILjava/lang/Object;)Lcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Item; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt;->ah$createCollectionFilterAction(Ljava/lang/String;Lcom/artemchep/keyguard/feature/home/vault/screen/CreateFilterResult;Ljava/util/Set;Ljava/lang/String;Landroidx/compose/ui/graphics/vector/ImageVector;)Lcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Item; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt;->ah$createFilterAction$default(Lcom/artemchep/keyguard/feature/home/vault/screen/CreateFilterResult;Ljava/lang/String;Ljava/util/Set;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/artemchep/keyguard/ui/icons/AccentColors;Landroidx/compose/ui/graphics/vector/ImageVector;ZIILjava/lang/Object;)Lcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Item; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt;->ah$createFilterAction(Lcom/artemchep/keyguard/feature/home/vault/screen/CreateFilterResult;Ljava/lang/String;Ljava/util/Set;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/artemchep/keyguard/ui/icons/AccentColors;Landroidx/compose/ui/graphics/vector/ImageVector;ZI)Lcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Item; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt;->ah$createFolderFilterAction(Ljava/lang/String;Lcom/artemchep/keyguard/feature/home/vault/screen/CreateFilterResult;Ljava/util/Set;Ljava/lang/String;Landroidx/compose/ui/graphics/vector/ImageVector;ZI)Lcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Item; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt;->ah$createOrganizationFilterAction$default(Ljava/lang/String;Lcom/artemchep/keyguard/feature/home/vault/screen/CreateFilterResult;Ljava/util/Set;Ljava/lang/String;Landroidx/compose/ui/graphics/vector/ImageVector;ILjava/lang/Object;)Lcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Item; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt;->ah$createOrganizationFilterAction(Ljava/lang/String;Lcom/artemchep/keyguard/feature/home/vault/screen/CreateFilterResult;Ljava/util/Set;Ljava/lang/String;Landroidx/compose/ui/graphics/vector/ImageVector;)Lcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Item; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt;->ah$createTypeFilterAction$default(Ljava/lang/String;Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;Lcom/artemchep/keyguard/feature/home/vault/screen/CreateFilterResult;Lcom/artemchep/keyguard/common/model/DSecret$Type;Ljava/lang/String;ILjava/lang/Object;)Lcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Item; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt;->ah$createTypeFilterAction(Ljava/lang/String;Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;Lcom/artemchep/keyguard/feature/home/vault/screen/CreateFilterResult;Lcom/artemchep/keyguard/common/model/DSecret$Type;Ljava/lang/String;)Lcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Item; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt;->ah$filterSection(Lkotlinx/coroutines/flow/Flow;Z)Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt;->ah(Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;Lorg/kodein/di/DirectDI;Lkotlin/jvm/functions/Function1;Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function1;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function1;Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function1;Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function1;Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function1;Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/feature/home/vault/screen/CreateFilterResult;Lcom/artemchep/keyguard/feature/home/vault/screen/FilterParams;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt;->createFilter(Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt;->mapCiphers(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$combine$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$combine$1;->([Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$combine$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$combine$1$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$combine$1$2;->([Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$combine$1$2;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$combine$1$2;->invoke()[Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$combine$1$3; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$combine$1$3;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$combine$1$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$combine$1$3;->invoke(Lkotlinx/coroutines/flow/FlowCollector;[Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$combine$1$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function1;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/jvm/functions/Function1;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$2;->(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function1;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$2;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$2$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$2$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/jvm/functions/Function1;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$2$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$2$2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$2$2$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$2$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$2$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$3; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$3;->(Lkotlinx/coroutines/flow/Flow;Ljava/lang/String;Lcom/artemchep/keyguard/feature/home/vault/screen/CreateFilterResult;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$3;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$3$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$3$2;->(Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/String;Lcom/artemchep/keyguard/feature/home/vault/screen/CreateFilterResult;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$3$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$3$2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$3$2$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$3$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$3$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$4; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$4;->(Lkotlinx/coroutines/flow/Flow;Ljava/util/List;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$4;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$4$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$4$2;->(Lkotlinx/coroutines/flow/FlowCollector;Ljava/util/List;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$4$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$4$2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$4$2$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$4$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$4$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$5; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$5;->(Lkotlinx/coroutines/flow/Flow;Ljava/util/Set;Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;Lkotlin/jvm/functions/Function1;Lcom/artemchep/keyguard/common/usecase/GetFolderTree;Ljava/lang/String;Lcom/artemchep/keyguard/feature/home/vault/screen/CreateFilterResult;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$5;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$5$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$5$2;->(Lkotlinx/coroutines/flow/FlowCollector;Ljava/util/Set;Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;Lkotlin/jvm/functions/Function1;Lcom/artemchep/keyguard/common/usecase/GetFolderTree;Ljava/lang/String;Lcom/artemchep/keyguard/feature/home/vault/screen/CreateFilterResult;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$5$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$5$2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$5$2$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$5$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$5$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$6; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$6;->(Lkotlinx/coroutines/flow/Flow;Ljava/util/Set;Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;Lkotlin/jvm/functions/Function1;Ljava/lang/String;Lcom/artemchep/keyguard/feature/home/vault/screen/CreateFilterResult;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$6;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$6$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$6$2;->(Lkotlinx/coroutines/flow/FlowCollector;Ljava/util/Set;Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;Lkotlin/jvm/functions/Function1;Ljava/lang/String;Lcom/artemchep/keyguard/feature/home/vault/screen/CreateFilterResult;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$6$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$6$2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$6$2$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$6$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$6$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$7; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$7;->(Lkotlinx/coroutines/flow/Flow;Ljava/util/Set;Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;Lkotlin/jvm/functions/Function1;Ljava/lang/String;Lcom/artemchep/keyguard/feature/home/vault/screen/CreateFilterResult;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$7;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$7$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$7$2;->(Lkotlinx/coroutines/flow/FlowCollector;Ljava/util/Set;Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;Lkotlin/jvm/functions/Function1;Ljava/lang/String;Lcom/artemchep/keyguard/feature/home/vault/screen/CreateFilterResult;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$7$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$7$2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$7$2$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$7$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$7$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$8; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$8;->(Lkotlinx/coroutines/flow/Flow;Ljava/util/List;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$8;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$8$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$8$2;->(Lkotlinx/coroutines/flow/FlowCollector;Ljava/util/List;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$8$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$8$2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$8$2$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$8$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$8$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$9; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$9;->(Lkotlinx/coroutines/flow/Flow;Ljava/util/List;Ljava/util/List;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$9;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$9$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$9$2;->(Lkotlinx/coroutines/flow/FlowCollector;Ljava/util/List;Ljava/util/List;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$9$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$9$2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$9$2$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$9$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$9$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$1;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$3; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$3;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$3;->invoke(Ljava/util/List;Ljava/util/List;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$4; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$4;->(Lorg/kodein/di/DirectDI;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$4;->invoke(Ljava/util/List;Ljava/util/List;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$4;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$4$checkedSectionIds$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$4$checkedSectionIds$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$4$checkedSectionIds$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$4$checkedSectionIds$1;->invoke(Lcom/artemchep/keyguard/feature/home/vault/model/FilterItem;)Ljava/lang/String; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$4$checkedSectionIds$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$5; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$5;->(Lcom/artemchep/keyguard/feature/home/vault/screen/CreateFilterResult;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$5;->invoke(Ljava/util/List;Lcom/artemchep/keyguard/feature/home/vault/search/filter/FilterHolder;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$5;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$aaa$$inlined$map$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$aaa$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;ZLjava/lang/String;Ljava/lang/String;Lkotlinx/coroutines/flow/MutableStateFlow;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$aaa$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$aaa$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$aaa$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;ZLjava/lang/String;Ljava/lang/String;Lkotlinx/coroutines/flow/MutableStateFlow;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$aaa$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$aaa$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$aaa$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$aaa$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$aaa$$inlined$map$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$aaa$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$aaa$1;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$aaa$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$aaa$1;->invoke(Ljava/util/List;Lcom/artemchep/keyguard/feature/home/vault/search/filter/FilterHolder;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$aaa$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$aaa$2$1$sectionItem$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$aaa$2$1$sectionItem$1;->(Ljava/lang/String;Lkotlinx/coroutines/flow/MutableStateFlow;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$collapsedSectionIdsSink$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$collapsedSectionIdsSink$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$collapsedSectionIdsSink$1;->()V +PLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$collapsedSectionIdsSink$1;->invoke()Ljava/lang/Object; +PLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$collapsedSectionIdsSink$1;->invoke()Ljava/util/List; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$createCollectionFilterAction$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$createCollectionFilterAction$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$createCollectionFilterAction$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$createCollectionFilterAction$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$createCollectionFilterAction$1;->invoke(Ljava/lang/String;)Lcom/artemchep/keyguard/common/model/DFilter$ById; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$createFilterAction$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$createFilterAction$1;->(Landroidx/compose/ui/graphics/vector/ImageVector;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$createFolderFilterAction$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$createFolderFilterAction$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$createFolderFilterAction$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$createFolderFilterAction$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$createFolderFilterAction$1;->invoke(Ljava/lang/String;)Lcom/artemchep/keyguard/common/model/DFilter$ById; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$createOrganizationFilterAction$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$createOrganizationFilterAction$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$createOrganizationFilterAction$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$createOrganizationFilterAction$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$createOrganizationFilterAction$1;->invoke(Ljava/lang/String;)Lcom/artemchep/keyguard/common/model/DFilter$ById; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterAccountListFlow$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterAccountListFlow$2;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterAccountListFlow$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterAccountListFlow$2;->invoke(Ljava/util/List;Ljava/util/Set;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterAccountListFlow$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterAccountsWithCiphers$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterAccountsWithCiphers$1;->(Lkotlin/jvm/functions/Function1;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterCollectionListFlow$1$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterCollectionListFlow$1$2;->(Lkotlin/jvm/functions/Function1;Ljava/lang/String;Lcom/artemchep/keyguard/feature/home/vault/screen/CreateFilterResult;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterCollectionListFlow$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterCollectionListFlow$2;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterCollectionListFlow$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterCollectionListFlow$2;->invoke(Ljava/util/List;Ljava/util/Set;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterCollectionListFlow$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterCollectionsWithCiphers$1$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterCollectionsWithCiphers$1$1;->(Lkotlin/jvm/functions/Function1;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterFolderListFlow$1$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterFolderListFlow$1$2;->(Lkotlin/jvm/functions/Function1;Ljava/lang/String;Lcom/artemchep/keyguard/feature/home/vault/screen/CreateFilterResult;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterFolderListFlow$1$p$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterFolderListFlow$1$p$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterFolderListFlow$1$p$1;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterFolderListFlow$1$p$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterFolderListFlow$1$p$2;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterFolderListFlow$1$p$2;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterFolderListFlow$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterFolderListFlow$2;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterFolderListFlow$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterFolderListFlow$2;->invoke(Ljava/util/List;Ljava/util/Set;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterFolderListFlow$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterFoldersWithCiphers$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterFoldersWithCiphers$1;->(Lkotlin/jvm/functions/Function1;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterOrganizationListFlow$1$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterOrganizationListFlow$1$2;->(Lkotlin/jvm/functions/Function1;Ljava/lang/String;Lcom/artemchep/keyguard/feature/home/vault/screen/CreateFilterResult;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterOrganizationListFlow$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterOrganizationListFlow$2;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterOrganizationListFlow$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterOrganizationListFlow$2;->invoke(Ljava/util/List;Ljava/util/Set;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterOrganizationListFlow$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterOrganizationsWithCiphers$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterOrganizationsWithCiphers$1;->(Lkotlin/jvm/functions/Function1;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterTypesWithCiphers$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterTypesWithCiphers$1;->(Lkotlin/jvm/functions/Function1;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$lambda$17$$inlined$sortedBy$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$lambda$17$$inlined$sortedBy$1;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$lambda$20$$inlined$sortedBy$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$lambda$20$$inlined$sortedBy$1;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$lambda$23$$inlined$sortedBy$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$lambda$23$$inlined$sortedBy$1;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$createFilter$filterSink$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$createFilter$filterSink$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$createFilter$filterSink$1;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$createFilter$filterSink$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$createFilter$filterSink$2;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$createFilter$filterSink$2;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$createFilter$filterSink$3; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$createFilter$filterSink$3;->(Lcom/artemchep/keyguard/feature/home/vault/search/filter/FilterHolder;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$createFilter$filterSink$3;->invoke()Lcom/artemchep/keyguard/feature/home/vault/search/filter/FilterHolder; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$createFilter$filterSink$3;->invoke()Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$createFilter$onClear$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$createFilter$onClear$1;->(Lkotlinx/coroutines/flow/MutableStateFlow;Lcom/artemchep/keyguard/feature/home/vault/search/filter/FilterHolder;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$createFilter$onToggle$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$createFilter$onToggle$1;->(Lkotlinx/coroutines/flow/MutableStateFlow;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$mapCiphers$$inlined$map$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$mapCiphers$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function1;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$mapCiphers$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$mapCiphers$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$mapCiphers$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/jvm/functions/Function1;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$mapCiphers$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$mapCiphers$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$mapCiphers$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$mapCiphers$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$mapCiphers$$inlined$map$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListRoute; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListRoute;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListRoute;->(Lcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListRoute;->Content(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListRoute;->hashCode()I +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt;->VaultHomeScreenListPane(Landroidx/compose/ui/Modifier;Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;Lcom/artemchep/keyguard/ui/focus/FocusRequester2;Ljava/lang/String;Ljava/lang/String;ZZZLandroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt;->VaultListFilterButton(Landroidx/compose/ui/Modifier;Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;Landroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt;->VaultListScreen(Lcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt;->VaultListSortButton(Landroidx/compose/ui/Modifier;Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;Landroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt;->access$VaultListFilterButton(Landroidx/compose/ui/Modifier;Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;Landroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt;->access$VaultListSortButton(Landroidx/compose/ui/Modifier;Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;Landroidx/compose/runtime/Composer;II)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$Items$Revision;Landroidx/compose/foundation/lazy/LazyListState;Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$Items;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$2;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$Items$Revision;Landroidx/compose/foundation/lazy/LazyListState;Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$Items;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$4; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$4;->(Landroidx/compose/material3/TopAppBarScrollBehavior;Ljava/lang/String;Ljava/lang/String;Lcom/artemchep/keyguard/ui/focus/FocusRequester2;Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;Z)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$4;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$4$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$4$1;->(Ljava/lang/String;Ljava/lang/String;Lcom/artemchep/keyguard/ui/focus/FocusRequester2;Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;Z)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$4$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$4$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$4$1$1$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$4$1$1$2;->(Z)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$4$1$1$2;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$4$1$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$4$1$1$3; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$4$1$1$3;->(ZZLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$4$1$1$3;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$4$1$1$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$5; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$5;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$5;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$6; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$6;->(Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/State;Landroidx/compose/runtime/MutableState;Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$6;->invoke(Lcom/artemchep/keyguard/ui/FabScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$6;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$6$1$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$6$1$1;->(Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/State;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$6$1$2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$6$1$2$1;->(Landroidx/compose/runtime/MutableState;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$6$1$3; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$6$1$3;->(Landroidx/compose/runtime/MutableState;Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$7; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$7;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;Landroidx/compose/material/pullrefresh/PullRefreshState;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$7;->invoke(Lcom/artemchep/keyguard/ui/OverlayScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$7;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$8$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$8$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;ZZ)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$8$1;->invoke(Landroidx/compose/foundation/lazy/LazyListScope;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$8$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$8$1$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$8$1$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$8$1$1;->invoke(Landroidx/compose/foundation/lazy/LazyItemScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$8$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$8$1$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$8$1$2;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$8$1$2;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$8$1$invoke$$inlined$items$default$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$8$1$invoke$$inlined$items$default$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$8$1$invoke$$inlined$items$default$1;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$8$1$invoke$$inlined$items$default$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$8$1$invoke$$inlined$items$default$2;->(Lkotlin/jvm/functions/Function1;Ljava/util/List;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$8$1$invoke$$inlined$items$default$3; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$8$1$invoke$$inlined$items$default$3;->(Lkotlin/jvm/functions/Function1;Ljava/util/List;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$8$1$invoke$$inlined$items$default$4; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$8$1$invoke$$inlined$items$default$4;->(Ljava/util/List;ZLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;Z)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$pullRefreshState$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$pullRefreshState$1;->(Lcom/artemchep/keyguard/ui/focus/FocusRequester2;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$1$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$1$1;->(Landroidx/compose/runtime/MutableState;Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$1$1;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$1$1;->invoke()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$2;->(Lkotlin/jvm/functions/Function1;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$2;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$2$1;->(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$2$1$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$2$1$1;->(Lkotlin/jvm/functions/Function1;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$2$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$2$1$1;->emit(Ljava/util/List;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$2$childBackStackFlow$1$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$2$childBackStackFlow$1$1;->(Lkotlinx/collections/immutable/PersistentList;Ljava/lang/String;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$2$childBackStackFlow$1$1;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$2$childBackStackFlow$1$1;->invoke()Ljava/util/List; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$3$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$3$1;->(Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$4; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$4;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$5; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$5;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;Lcom/artemchep/keyguard/ui/focus/FocusRequester2;Lcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$5;->invoke(Lcom/artemchep/keyguard/feature/twopane/TwoPaneScaffoldScope;Landroidx/compose/ui/Modifier;ZLandroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$6; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$6;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;Lcom/artemchep/keyguard/ui/focus/FocusRequester2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$6;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$6;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$7; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$7;->(Lcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args;I)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$7;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$7;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;->(ILcom/artemchep/keyguard/feature/auth/common/TextFieldModel2;Ljava/util/List;Ljava/util/List;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;ZLjava/util/List;Ljava/util/List;Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content;Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$SideEffects;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;->(ILcom/artemchep/keyguard/feature/auth/common/TextFieldModel2;Ljava/util/List;Ljava/util/List;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;ZLjava/util/List;Ljava/util/List;Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content;Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$SideEffects;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;->copy$default(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;ILcom/artemchep/keyguard/feature/auth/common/TextFieldModel2;Ljava/util/List;Ljava/util/List;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;ZLjava/util/List;Ljava/util/List;Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content;Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$SideEffects;ILjava/lang/Object;)Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;->copy(ILcom/artemchep/keyguard/feature/auth/common/TextFieldModel2;Ljava/util/List;Ljava/util/List;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;ZLjava/util/List;Ljava/util/List;Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content;Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$SideEffects;)Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;->equals(Ljava/lang/Object;)Z +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;->getActions()Ljava/util/List; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;->getClearFilters()Lkotlin/jvm/functions/Function0; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;->getClearSort()Lkotlin/jvm/functions/Function0; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;->getContent()Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;->getFilters()Ljava/util/List; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;->getPrimaryActions()Ljava/util/List; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;->getQuery()Lcom/artemchep/keyguard/feature/auth/common/TextFieldModel2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;->getSelectCipher()Lkotlin/jvm/functions/Function1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;->getShowKeyboard()Z +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;->getSideEffects()Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$SideEffects; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;->getSort()Ljava/util/List; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Companion; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Companion;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$AddAccount; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$AddAccount;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$AddAccount;->(Lkotlin/jvm/functions/Function0;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$AddAccount;->getOnAddAccount()Lkotlin/jvm/functions/Function0; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$AddAccount$Companion; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$AddAccount$Companion;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$AddAccount$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$Items; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$Items;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$Items;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$Items$Revision;Lcom/artemchep/keyguard/ui/Selection;Ljava/util/List;ILkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$Items;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$Items$Revision;Lcom/artemchep/keyguard/ui/Selection;Ljava/util/List;ILkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$Items$Companion; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$Items$Companion;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$Items$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$Items$Revision; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$Items$Revision;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$Items$Revision;->(ILcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$Items$Revision$Mutable;Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$Items$Revision$Mutable;Lkotlin/jvm/functions/Function2;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$Items$Revision$Companion; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$Items$Revision$Companion;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$Items$Revision$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$Items$Revision$Mutable; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$Skeleton; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$Skeleton;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$Skeleton;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$SideEffects; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$SideEffects;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$SideEffects;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$SideEffects;->(Lkotlinx/coroutines/flow/Flow;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$SideEffects;->getShowBiometricPromptFlow()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$SideEffects$Companion; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$SideEffects$Companion;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$SideEffects$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt;->access$hahah-Samhc0A(Lorg/kodein/di/DirectDI;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/common/model/AutofillTarget;Lcom/artemchep/keyguard/common/usecase/GetSuggestions;Lcom/artemchep/keyguard/common/usecase/DateFormatter;JJ)Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt;->hahah-Samhc0A(Lorg/kodein/di/DirectDI;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/common/model/AutofillTarget;Lcom/artemchep/keyguard/common/usecase/GetSuggestions;Lcom/artemchep/keyguard/common/usecase/DateFormatter;JJ)Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt;->vaultListScreenState-ML3G3h0(Lorg/kodein/di/DirectDI;Lcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args;JJLcom/artemchep/keyguard/AppMode;Lcom/artemchep/keyguard/common/service/deeplink/DeeplinkService;Lcom/artemchep/keyguard/common/usecase/GetSuggestions;Lcom/artemchep/keyguard/common/usecase/GetAccounts;Lcom/artemchep/keyguard/common/usecase/GetProfiles;Lcom/artemchep/keyguard/common/usecase/GetCanWrite;Lcom/artemchep/keyguard/common/usecase/GetCiphers;Lcom/artemchep/keyguard/common/usecase/GetFolders;Lcom/artemchep/keyguard/common/usecase/GetCollections;Lcom/artemchep/keyguard/common/usecase/GetOrganizations;Lcom/artemchep/keyguard/common/usecase/GetTotpCode;Lcom/artemchep/keyguard/common/usecase/GetConcealFields;Lcom/artemchep/keyguard/common/usecase/GetAppIcons;Lcom/artemchep/keyguard/common/usecase/GetWebsiteIcons;Lcom/artemchep/keyguard/common/usecase/GetPasswordStrength;Lcom/artemchep/keyguard/common/usecase/GetCipherOpenedHistory;Lcom/artemchep/keyguard/common/usecase/PasskeyTargetCheck;Lcom/artemchep/keyguard/common/usecase/RenameFolderById;Lcom/artemchep/keyguard/common/usecase/ClearVaultSession;Lcom/artemchep/keyguard/common/usecase/CipherToolbox;Lcom/artemchep/keyguard/common/usecase/QueueSyncAll;Lcom/artemchep/keyguard/common/usecase/SupervisorRead;Lcom/artemchep/keyguard/common/usecase/DateFormatter;Lcom/artemchep/keyguard/common/service/clipboard/ClipboardService;Landroidx/compose/runtime/Composer;III)Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt;->vaultListScreenState-RIQooxk(Lcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args;JJLcom/artemchep/keyguard/AppMode;Landroidx/compose/runtime/Composer;I)Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah$2$orderComparator$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah$2$orderComparator$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/ComparatorHolder;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah$3; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah$3;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah$3;->invoke(Lcom/artemchep/keyguard/feature/home/vault/screen/FilteredBoo;Lkotlin/Pair;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah$4; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah$4;->(Lorg/kodein/di/DirectDI;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah$4;->invoke(Lcom/artemchep/keyguard/feature/home/vault/screen/FilteredBoo;Lcom/artemchep/keyguard/feature/home/vault/search/filter/FilterHolder;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah$4;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah$5; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah$5;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah$5;->invoke(Lcom/artemchep/keyguard/feature/home/vault/screen/FilteredBoo;Lcom/artemchep/keyguard/feature/home/vault/search/IndexedText;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah$5;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah$6; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah$6;->(JJLkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah$6;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah$6;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah$6;->invoke(Lkotlin/Pair;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah$6;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah$7$items$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah$7$items$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/FilteredBoo;Lcom/artemchep/keyguard/feature/home/vault/screen/ComparatorHolder;Lcom/artemchep/keyguard/feature/decorator/ItemDecorator;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah$7$items$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah$7$items$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah-Samhc0A$$inlined$map$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah-Samhc0A$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/common/model/AutofillTarget;Lcom/artemchep/keyguard/common/usecase/GetSuggestions;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah-Samhc0A$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah-Samhc0A$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah-Samhc0A$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lcom/artemchep/keyguard/common/model/AutofillTarget;Lcom/artemchep/keyguard/common/usecase/GetSuggestions;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah-Samhc0A$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah-Samhc0A$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah-Samhc0A$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah-Samhc0A$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah-Samhc0A$$inlined$map$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah-Samhc0A$$inlined$map$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah-Samhc0A$$inlined$map$2;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah-Samhc0A$$inlined$map$2;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah-Samhc0A$$inlined$map$2$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah-Samhc0A$$inlined$map$2$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah-Samhc0A$$inlined$map$2$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah-Samhc0A$$inlined$map$2$2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah-Samhc0A$$inlined$map$2$2$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah-Samhc0A$$inlined$map$2$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah-Samhc0A$$inlined$map$2$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah-Samhc0A$$inlined$map$3; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah-Samhc0A$$inlined$map$3;->(Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/common/usecase/DateFormatter;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah-Samhc0A$$inlined$map$3;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah-Samhc0A$$inlined$map$3$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah-Samhc0A$$inlined$map$3$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lcom/artemchep/keyguard/common/usecase/DateFormatter;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah-Samhc0A$$inlined$map$3$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah-Samhc0A$$inlined$map$3$2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah-Samhc0A$$inlined$map$3$2$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah-Samhc0A$$inlined$map$3$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2;->(Lcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args;Lcom/artemchep/keyguard/common/service/clipboard/ClipboardService;Lcom/artemchep/keyguard/common/usecase/GetCiphers;Lcom/artemchep/keyguard/common/usecase/SupervisorRead;Lcom/artemchep/keyguard/common/usecase/GetConcealFields;Lcom/artemchep/keyguard/common/usecase/GetAppIcons;Lcom/artemchep/keyguard/common/usecase/GetWebsiteIcons;Lcom/artemchep/keyguard/common/usecase/GetOrganizations;Lcom/artemchep/keyguard/AppMode;Lorg/kodein/di/DirectDI;Lcom/artemchep/keyguard/common/usecase/GetSuggestions;Lcom/artemchep/keyguard/common/usecase/DateFormatter;JJLcom/artemchep/keyguard/common/service/deeplink/DeeplinkService;Lcom/artemchep/keyguard/common/usecase/GetAccounts;Lcom/artemchep/keyguard/common/usecase/GetProfiles;Lcom/artemchep/keyguard/common/usecase/GetFolders;Lcom/artemchep/keyguard/common/usecase/GetCollections;Lcom/artemchep/keyguard/common/usecase/GetCanWrite;Lcom/artemchep/keyguard/common/usecase/CipherToolbox;Lcom/artemchep/keyguard/common/usecase/QueueSyncAll;Lcom/artemchep/keyguard/common/usecase/ClearVaultSession;Lcom/artemchep/keyguard/common/usecase/RenameFolderById;Lcom/artemchep/keyguard/common/usecase/PasskeyTargetCheck;Lcom/artemchep/keyguard/common/usecase/GetTotpCode;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2;->invoke(Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2;->invokeSuspend$createComparatorAction$default(Lkotlinx/coroutines/flow/MutableStateFlow;Ljava/lang/String;Ldev/icerock/moko/resources/StringResource;Landroidx/compose/ui/graphics/vector/ImageVector;Lcom/artemchep/keyguard/feature/home/vault/screen/ComparatorHolder;ILjava/lang/Object;)Lcom/artemchep/keyguard/feature/home/vault/model/SortItem$Item; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2;->invokeSuspend$createComparatorAction(Lkotlinx/coroutines/flow/MutableStateFlow;Ljava/lang/String;Ldev/icerock/moko/resources/StringResource;Landroidx/compose/ui/graphics/vector/ImageVector;Lcom/artemchep/keyguard/feature/home/vault/screen/ComparatorHolder;)Lcom/artemchep/keyguard/feature/home/vault/model/SortItem$Item; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$1;->(Lcom/artemchep/keyguard/ui/selection/SelectionHandle;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$1;->invoke(Ljava/util/List;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$2;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$2;->invoke(Ljava/util/List;Lcom/artemchep/keyguard/feature/home/vault/screen/ComparatorHolder;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$4; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$4;->(Landroidx/compose/runtime/MutableState;Lcom/artemchep/keyguard/feature/home/vault/screen/ComparatorHolder;Lcom/artemchep/keyguard/common/util/flow/EventFlow;Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;Lcom/artemchep/keyguard/AppMode;Lkotlinx/coroutines/flow/MutableStateFlow;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$4;->invoke(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$Items;Lcom/artemchep/keyguard/feature/home/vault/screen/OurFilterResult;Lkotlin/Pair;Lkotlin/Pair;ZLkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$4;->invokeSuspend$createTypeAction(Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;Lcom/artemchep/keyguard/AppMode;Ljava/lang/String;Lcom/artemchep/keyguard/common/model/DSecret$Type;)Lcom/artemchep/keyguard/ui/FlatItemAction; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$4;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$4$3; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$4$3;->(Ljava/lang/Object;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$4$content$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$4$content$1;->(Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$4$createTypeAction$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$4$createTypeAction$1;->(Lcom/artemchep/keyguard/AppMode;Ljava/lang/String;Lcom/artemchep/keyguard/common/model/DSecret$Type;Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$5; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$5;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$5;->invoke(ZLjava/util/Set;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$5;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$6; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$6;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$6;->invoke(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;ZLkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$6;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$6;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$7; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$7;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$7;->invoke(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;Lkotlinx/collections/immutable/PersistentList;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$7;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$7;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$8; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$8;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$8;->invoke(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;ZLkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$8;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$8;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$ConfigMapper; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$ConfigMapper;->(ZZZ)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$Fuu; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$Fuu;->(Lcom/artemchep/keyguard/feature/home/vault/model/SortItem$Item;Ljava/util/List;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$Fuu;->getItem()Lcom/artemchep/keyguard/feature/home/vault/model/SortItem$Item; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$Fuu;->getSubItems()Ljava/util/List; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$Rev; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$Rev;->(ILjava/util/List;I)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$Rev;->copy$default(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$Rev;ILjava/util/List;IILjava/lang/Object;)Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$Rev; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$Rev;->copy(ILjava/util/List;I)Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$Rev; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$Rev;->getCount()I +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$Rev;->getList()Ljava/util/List; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$Rev;->getRevision()I +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$1$1$1$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$1$1$1$1;->(Lkotlinx/collections/immutable/PersistentList;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$1$1$1$1;->invoke(Lcom/artemchep/keyguard/ui/ContextItemBuilder;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$1$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$actionAlwaysShowKeyboardFlow$1$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$actionAlwaysShowKeyboardFlow$1$1;->(ZLkotlinx/coroutines/flow/MutableStateFlow;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$actionAlwaysShowKeyboardFlow$1$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$actionAlwaysShowKeyboardFlow$1$2;->(Ljava/lang/Object;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$actionAlwaysShowKeyboardFlow$1$3; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$actionAlwaysShowKeyboardFlow$1$3;->(Ljava/lang/Object;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$actionDownloadsItem$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$actionDownloadsItem$1;->(Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$actionGroup2Flow$1$1$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$actionGroup2Flow$1$1$1;->([Lcom/artemchep/keyguard/ui/FlatItemAction;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$actionGroup2Flow$1$1$1;->invoke(Lcom/artemchep/keyguard/ui/ContextItemBuilder;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$actionGroup2Flow$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$actionGroup3Flow$1$1$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$actionGroup3Flow$1$1$1;->([Lcom/artemchep/keyguard/ui/FlatItemAction;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$actionGroup3Flow$1$1$1;->invoke(Lcom/artemchep/keyguard/ui/ContextItemBuilder;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$actionGroup3Flow$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$actionGroupFlow$1$1$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$actionGroupFlow$1$1$1;->([Lcom/artemchep/keyguard/ui/FlatItemAction;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$actionGroupFlow$1$1$1;->invoke(Lcom/artemchep/keyguard/ui/ContextItemBuilder;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$actionGroupFlow$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$actionLockVaultItem$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$actionLockVaultItem$1;->(Lcom/artemchep/keyguard/common/usecase/ClearVaultSession;Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$actionSyncAccountsFlow$1$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$actionSyncAccountsFlow$1$1;->(Z)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$actionSyncAccountsFlow$1$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$actionSyncAccountsFlow$1$2;->(Lcom/artemchep/keyguard/common/usecase/QueueSyncAll;Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$actionTrashItem$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$actionTrashItem$1;->(Lcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args;Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$ciphersFlow$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$ciphersFlow$1;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$ciphersFlow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$ciphersFlow$1;->invoke(Ljava/util/List;Ljava/util/Map;Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$ConfigMapper;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$ciphersFlow$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$ciphersFlow$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$ciphersFlow$2;->(Lcom/artemchep/keyguard/AppMode;Lcom/artemchep/keyguard/common/usecase/PasskeyTargetCheck;Lcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args;Lcom/artemchep/keyguard/ui/selection/SelectionHandle;Lkotlinx/coroutines/flow/MutableStateFlow;Lcom/artemchep/keyguard/common/usecase/CopyText;Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;Lcom/artemchep/keyguard/common/usecase/GetTotpCode;Lcom/artemchep/keyguard/common/util/flow/EventFlow;Lorg/kodein/di/DirectDI;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$ciphersFlow$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$ciphersFlow$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/Triple;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$ciphersFlow$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$configFlow$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$configFlow$1;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$configFlow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$configFlow$1;->invoke(ZZZLkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$configFlow$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$createComparatorAction$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$createComparatorAction$1;->(Lkotlinx/coroutines/flow/MutableStateFlow;Lcom/artemchep/keyguard/feature/home/vault/screen/ComparatorHolder;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$fffFolderId$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$fffFolderId$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$fffFolderId$1;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$filterListFlow$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$filterListFlow$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$filterListFlow$1;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$filterListFlow$3; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$filterListFlow$3;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$filterListFlow$3;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$filterListFlow$4; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$filterListFlow$4;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$filterListFlow$4;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$filterListFlow$5; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$filterListFlow$5;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$filterListFlow$5;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$filterListFlow$6; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$filterListFlow$6;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$filterListFlow$6;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$filterListFlow$7; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$filterListFlow$7;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$filterListFlow$7;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$2;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$2;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$2$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$2$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$2$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$2$2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$2$2$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$2$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$2$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$3; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$3;->(Lkotlinx/coroutines/flow/Flow;Ljava/util/Map;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$3;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$3$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$3$2;->(Lkotlinx/coroutines/flow/FlowCollector;Ljava/util/Map;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$3$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$3$2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$3$2$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$3$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$3$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$4; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$4;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$4;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$4$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$4$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$4$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$4$2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$4$2$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$4$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$4$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$5; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$5;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$5;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$5$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$5$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$5$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$5$2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$5$2$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$5$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$5$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$6; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$6;->(Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/AppMode;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$6;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$6$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$6$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lcom/artemchep/keyguard/AppMode;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$6$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$6$2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$6$2$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$6$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$7; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$7;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$7;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$7$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$7$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$7$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$7$2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$7$2$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$7$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$7$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$8; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$8;->(Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$8;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$8$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$8$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$8$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$8$2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$8$2$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$8$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$8$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$9; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$9;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$9;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$9$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$9$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$9$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$9$2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$9$2$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$9$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$9$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$1;->([Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$1$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$1$2;->([Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$1$2;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$1$2;->invoke()[Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$1$3; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$1$3;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$1$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$1$3;->invoke(Lkotlinx/coroutines/flow/FlowCollector;[Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$1$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$2;->([Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$2;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$2$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$2$2;->([Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$2$2;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$2$2;->invoke()[Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$2$3; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$2$3;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$2$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$2$3;->invoke(Lkotlinx/coroutines/flow/FlowCollector;[Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$2$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$3; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$3;->([Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$3;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$3$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$3$2;->([Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$3$2;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$3$2;->invoke()[Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$3$3; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$3$3;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$3$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$3$3;->invoke(Lkotlinx/coroutines/flow/FlowCollector;[Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$3$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$4; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$4;->([Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$4;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$4$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$4$2;->([Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$4$2;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$4$2;->invoke()[Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$4$3; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$4$3;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$4$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$4$3;->invoke(Lkotlinx/coroutines/flow/FlowCollector;[Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$4$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;Lkotlinx/coroutines/flow/MutableStateFlow;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;Lkotlinx/coroutines/flow/MutableStateFlow;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$2;->(Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;Lcom/artemchep/keyguard/common/usecase/QueueSyncAll;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$2;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$2$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$2$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;Lcom/artemchep/keyguard/common/usecase/QueueSyncAll;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$2$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$2$2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$2$2$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$2$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$2$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$3; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$3;->(Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;Ljava/lang/String;Lcom/artemchep/keyguard/common/usecase/RenameFolderById;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$3;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$3$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$3$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;Ljava/lang/String;Lcom/artemchep/keyguard/common/usecase/RenameFolderById;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$3$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$3$2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$3$2$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$3$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$3$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$4; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$4;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$4;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$4$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$4$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$4$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$4$2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$4$2$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$4$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$4$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$itemSink$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$itemSink$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$itemSink$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$itemSink$1;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$itemSink$1;->invoke()Ljava/lang/String; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$itemsFlow$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$itemsFlow$2;->(Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlinx/coroutines/flow/MutableStateFlow;Lkotlinx/coroutines/flow/MutableStateFlow;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$itemsFlow$2;->invoke(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$Rev;Lcom/artemchep/keyguard/ui/Selection;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$itemsFlow$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$itemsFlow$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$itemsFlow$2$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$itemsFlow$2$2;->(Ljava/util/List;Lkotlin/jvm/internal/Ref$ObjectRef;Ljava/util/List;Lkotlinx/coroutines/flow/MutableStateFlow;Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$Rev;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$itemsFlow$2$3; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$itemsFlow$2$3;->(Lkotlinx/coroutines/flow/MutableStateFlow;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$itemsFlow$2$a$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$itemsFlow$2$a$1;->(Lkotlinx/coroutines/flow/MutableStateFlow;Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$Rev;Ljava/util/List;II)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$itemsFlow$2$b$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$itemsFlow$2$b$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$itemsFlow$2$a$1;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$itemsFlow$2$c$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$itemsFlow$2$c$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$itemsFlow$2$a$1;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$querySink$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$querySink$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$querySink$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$querySink$1;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$querySink$1;->invoke()Ljava/lang/String; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$scrollPositionSink$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$scrollPositionSink$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$scrollPositionSink$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$scrollPositionSink$1;->invoke()Lcom/artemchep/keyguard/feature/home/vault/screen/OhOhOh; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$scrollPositionSink$1;->invoke()Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$showKeyboardSink$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$showKeyboardSink$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$showKeyboardSink$1;->()V +PLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$showKeyboardSink$1;->invoke()Ljava/lang/Boolean; +PLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$showKeyboardSink$1;->invoke()Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$sortSink$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$sortSink$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$sortSink$1;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$sortSink$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$sortSink$2;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$sortSink$2;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$sortSink$3; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$sortSink$3;->(Lcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args;Lcom/artemchep/keyguard/feature/home/vault/screen/ComparatorHolder;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$sortSink$3;->invoke()Lcom/artemchep/keyguard/feature/home/vault/screen/ComparatorHolder; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$sortSink$3;->invoke()Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$10; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$10;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$11; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$11;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$12; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$12;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$13; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$13;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$14; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$14;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$15; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$15;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$16; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$16;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$17; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$17;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$18; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$18;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$19; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$19;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$20; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$20;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$21; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$21;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$22; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$22;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$23; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$23;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$3; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$3;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$4; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$4;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$5; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$5;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$6; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$6;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$7; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$7;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$8; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$8;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$9; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$9;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultViewRoute; +Lcom/artemchep/keyguard/feature/home/vault/search/IndexedText; +Lcom/artemchep/keyguard/feature/home/vault/search/filter/FilterHolder; +HSPLcom/artemchep/keyguard/feature/home/vault/search/filter/FilterHolder;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/search/filter/FilterHolder;->(Ljava/util/Map;)V +HSPLcom/artemchep/keyguard/feature/home/vault/search/filter/FilterHolder;->getFilter()Lcom/artemchep/keyguard/common/model/DFilter$And; +HSPLcom/artemchep/keyguard/feature/home/vault/search/filter/FilterHolder;->getId()I +HSPLcom/artemchep/keyguard/feature/home/vault/search/filter/FilterHolder;->getState()Ljava/util/Map; +Lcom/artemchep/keyguard/feature/home/vault/search/filter/FilterHolder$1; +HSPLcom/artemchep/keyguard/feature/home/vault/search/filter/FilterHolder$1;->(Lcom/artemchep/keyguard/feature/home/vault/search/filter/FilterHolder;)V +HSPLcom/artemchep/keyguard/feature/home/vault/search/filter/FilterHolder$1;->invoke()Lcom/artemchep/keyguard/common/model/DFilter$And; +HSPLcom/artemchep/keyguard/feature/home/vault/search/filter/FilterHolder$1;->invoke()Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/search/filter/FilterHolder$2; +HSPLcom/artemchep/keyguard/feature/home/vault/search/filter/FilterHolder$2;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/search/filter/FilterHolder$2;->()V +Lcom/artemchep/keyguard/feature/home/vault/search/filter/FilterHolder$Companion; +HSPLcom/artemchep/keyguard/feature/home/vault/search/filter/FilterHolder$Companion;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/search/filter/FilterHolder$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/feature/home/vault/search/sort/AlphabeticalSort; +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/AlphabeticalSort;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/AlphabeticalSort;->()V +Lcom/artemchep/keyguard/feature/home/vault/search/sort/AlphabeticalSort$1; +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/AlphabeticalSort$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/AlphabeticalSort$1;->()V +Lcom/artemchep/keyguard/feature/home/vault/search/sort/AlphabeticalSort$Creator; +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/AlphabeticalSort$Creator;->()V +Lcom/artemchep/keyguard/feature/home/vault/search/sort/LastCreatedSort; +Lcom/artemchep/keyguard/feature/home/vault/search/sort/LastModifiedSort; +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/LastModifiedSort;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/LastModifiedSort;->()V +Lcom/artemchep/keyguard/feature/home/vault/search/sort/LastModifiedSort$1; +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/LastModifiedSort$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/LastModifiedSort$1;->()V +Lcom/artemchep/keyguard/feature/home/vault/search/sort/LastModifiedSort$Creator; +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/LastModifiedSort$Creator;->()V +Lcom/artemchep/keyguard/feature/home/vault/search/sort/LastModifiedSort$LastModifiedRawComparator; +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/LastModifiedSort$LastModifiedRawComparator;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/LastModifiedSort$LastModifiedRawComparator;->()V +Lcom/artemchep/keyguard/feature/home/vault/search/sort/LastModifiedSort$special$$inlined$thenBy$1; +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/LastModifiedSort$special$$inlined$thenBy$1;->(Ljava/util/Comparator;Ljava/util/Comparator;)V +Lcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordLastModifiedSort; +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordLastModifiedSort;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordLastModifiedSort;->()V +Lcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordLastModifiedSort$1; +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordLastModifiedSort$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordLastModifiedSort$1;->()V +Lcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordLastModifiedSort$Creator; +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordLastModifiedSort$Creator;->()V +Lcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordLastModifiedSort$PasswordLastModifiedRawComparator; +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordLastModifiedSort$PasswordLastModifiedRawComparator;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordLastModifiedSort$PasswordLastModifiedRawComparator;->()V +Lcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordLastModifiedSort$special$$inlined$thenBy$1; +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordLastModifiedSort$special$$inlined$thenBy$1;->(Ljava/util/Comparator;Ljava/util/Comparator;)V +Lcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordSort; +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordSort;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordSort;->()V +Lcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordSort$1; +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordSort$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordSort$1;->()V +Lcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordSort$Creator; +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordSort$Creator;->()V +Lcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordStrengthSort; +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordStrengthSort;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordStrengthSort;->()V +Lcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordStrengthSort$1; +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordStrengthSort$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordStrengthSort$1;->()V +Lcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordStrengthSort$Creator; +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordStrengthSort$Creator;->()V +Lcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordStrengthSort$PasswordStrengthRawComparator; +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordStrengthSort$PasswordStrengthRawComparator;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordStrengthSort$PasswordStrengthRawComparator;->()V +Lcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordStrengthSort$special$$inlined$thenBy$1; +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordStrengthSort$special$$inlined$thenBy$1;->(Ljava/util/Comparator;Ljava/util/Comparator;)V +Lcom/artemchep/keyguard/feature/home/vault/search/sort/PureSort; +Lcom/artemchep/keyguard/feature/home/vault/search/sort/Sort; +Lcom/artemchep/keyguard/feature/keyguard/AppRoute; +HSPLcom/artemchep/keyguard/feature/keyguard/AppRoute;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/AppRoute;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/AppRoute;->Content(Landroidx/compose/runtime/Composer;I)V +Lcom/artemchep/keyguard/feature/keyguard/AppScreenKt; +HSPLcom/artemchep/keyguard/feature/keyguard/AppScreenKt;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/AppScreenKt;->AppScreen(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/AppScreenKt;->ManualAppScreen$lambda$6$lambda$3(Landroidx/compose/runtime/MutableState;)Lcom/artemchep/keyguard/common/model/VaultState; +HSPLcom/artemchep/keyguard/feature/keyguard/AppScreenKt;->ManualAppScreen$lambda$6$lambda$4(Landroidx/compose/runtime/MutableState;Lcom/artemchep/keyguard/common/model/VaultState;)V +HSPLcom/artemchep/keyguard/feature/keyguard/AppScreenKt;->ManualAppScreen$lambda$6$lambda$5(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/UnlockUseCase; +HSPLcom/artemchep/keyguard/feature/keyguard/AppScreenKt;->ManualAppScreen(Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/AppScreenKt;->ManualAppScreenOnCreate(Lcom/artemchep/keyguard/common/model/VaultState$Create;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/AppScreenKt;->ManualAppScreenOnLoading(Lcom/artemchep/keyguard/common/model/VaultState$Loading;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/AppScreenKt;->ManualAppScreenOnMain(Lcom/artemchep/keyguard/common/model/VaultState$Main;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/AppScreenKt;->ManualAppScreenOnUnlock(Lcom/artemchep/keyguard/common/model/VaultState$Unlock;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/AppScreenKt;->access$ManualAppScreen$lambda$6$lambda$3(Landroidx/compose/runtime/MutableState;)Lcom/artemchep/keyguard/common/model/VaultState; +HSPLcom/artemchep/keyguard/feature/keyguard/AppScreenKt;->access$ManualAppScreen$lambda$6$lambda$4(Landroidx/compose/runtime/MutableState;Lcom/artemchep/keyguard/common/model/VaultState;)V +HSPLcom/artemchep/keyguard/feature/keyguard/AppScreenKt;->access$ManualAppScreen$lambda$6$lambda$5(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/UnlockUseCase; +Lcom/artemchep/keyguard/feature/keyguard/AppScreenKt$ManualAppScreen$1$1; +HSPLcom/artemchep/keyguard/feature/keyguard/AppScreenKt$ManualAppScreen$1$1;->(Lkotlinx/coroutines/flow/StateFlow;Lkotlin/Lazy;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/keyguard/AppScreenKt$ManualAppScreen$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/keyguard/AppScreenKt$ManualAppScreen$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/AppScreenKt$ManualAppScreen$1$1$1; +HSPLcom/artemchep/keyguard/feature/keyguard/AppScreenKt$ManualAppScreen$1$1$1;->(Landroidx/compose/runtime/MutableState;)V +HSPLcom/artemchep/keyguard/feature/keyguard/AppScreenKt$ManualAppScreen$1$1$1;->emit(Lcom/artemchep/keyguard/common/model/VaultState;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/keyguard/AppScreenKt$ManualAppScreen$1$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/AppScreenKt$ManualAppScreen$1$2; +HSPLcom/artemchep/keyguard/feature/keyguard/AppScreenKt$ManualAppScreen$1$2;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/AppScreenKt$ManualAppScreen$1$2;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/AppScreenKt$ManualAppScreen$1$2;->invoke(Lcom/artemchep/keyguard/common/model/VaultState;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/keyguard/AppScreenKt$ManualAppScreen$1$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/AppScreenKt$ManualAppScreen$1$3; +HSPLcom/artemchep/keyguard/feature/keyguard/AppScreenKt$ManualAppScreen$1$3;->(Lkotlin/jvm/functions/Function3;)V +HSPLcom/artemchep/keyguard/feature/keyguard/AppScreenKt$ManualAppScreen$1$3;->invoke(Lcom/artemchep/keyguard/common/model/VaultState;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/AppScreenKt$ManualAppScreen$1$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/AppScreenKt$ManualAppScreen$2; +HSPLcom/artemchep/keyguard/feature/keyguard/AppScreenKt$ManualAppScreen$2;->(Lkotlin/jvm/functions/Function3;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/AppScreenKt$ManualAppScreen$2;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/AppScreenKt$ManualAppScreen$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/AppScreenKt$ManualAppScreen$lambda$6$$inlined$rememberInstance$1; +HSPLcom/artemchep/keyguard/feature/keyguard/AppScreenKt$ManualAppScreen$lambda$6$$inlined$rememberInstance$1;->()V +Lcom/artemchep/keyguard/feature/keyguard/ComposableSingletons$AppScreenKt; +HSPLcom/artemchep/keyguard/feature/keyguard/ComposableSingletons$AppScreenKt;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/ComposableSingletons$AppScreenKt;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/ComposableSingletons$AppScreenKt;->getLambda-1$common_noneRelease()Lkotlin/jvm/functions/Function3; +HSPLcom/artemchep/keyguard/feature/keyguard/ComposableSingletons$AppScreenKt;->getLambda-2$common_noneRelease()Lkotlin/jvm/functions/Function2; +Lcom/artemchep/keyguard/feature/keyguard/ComposableSingletons$AppScreenKt$lambda-1$1; +HSPLcom/artemchep/keyguard/feature/keyguard/ComposableSingletons$AppScreenKt$lambda-1$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/ComposableSingletons$AppScreenKt$lambda-1$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/ComposableSingletons$AppScreenKt$lambda-1$1;->invoke(Lcom/artemchep/keyguard/common/model/VaultState;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/ComposableSingletons$AppScreenKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/ComposableSingletons$AppScreenKt$lambda-2$1; +HSPLcom/artemchep/keyguard/feature/keyguard/ComposableSingletons$AppScreenKt$lambda-2$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/ComposableSingletons$AppScreenKt$lambda-2$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/ComposableSingletons$AppScreenKt$lambda-2$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/ComposableSingletons$AppScreenKt$lambda-2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/main/MainRoute; +HSPLcom/artemchep/keyguard/feature/keyguard/main/MainRoute;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/main/MainRoute;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/main/MainRoute;->Content(Landroidx/compose/runtime/Composer;I)V +Lcom/artemchep/keyguard/feature/keyguard/main/MainScreenKt; +HSPLcom/artemchep/keyguard/feature/keyguard/main/MainScreenKt;->MainScreen(Landroidx/compose/runtime/Composer;I)V +Lcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt;->getLambda-1$common_noneRelease()Lkotlin/jvm/functions/Function3; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt;->getLambda-2$common_noneRelease()Lkotlin/jvm/functions/Function3; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt;->getLambda-3$common_noneRelease()Lkotlin/jvm/functions/Function3; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt;->getLambda-4$common_noneRelease()Lkotlin/jvm/functions/Function3; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt;->getLambda-5$common_noneRelease()Lkotlin/jvm/functions/Function3; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt;->getLambda-7$common_noneRelease()Lkotlin/jvm/functions/Function3; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt;->getLambda-8$common_noneRelease()Lkotlin/jvm/functions/Function3; +Lcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-1$1; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-1$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-1$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-1$1;->invoke(Landroidx/compose/foundation/layout/ColumnScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-2$1; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-2$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-2$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-2$1;->invoke(Landroidx/compose/foundation/layout/RowScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-3$1; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-3$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-3$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-3$1;->invoke(Landroidx/compose/foundation/layout/ColumnScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-3$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-4$1; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-4$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-4$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-4$1;->invoke(Landroidx/compose/foundation/layout/RowScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-4$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-5$1; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-5$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-5$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-5$1;->invoke(Landroidx/compose/foundation/layout/ColumnScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-5$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-6$1; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-6$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-6$1;->()V +Lcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-7$1; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-7$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-7$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-7$1;->invoke(Landroidx/compose/foundation/layout/ColumnScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-7$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-8$1; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-8$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-8$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-8$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-8$1;->invoke(ZLandroidx/compose/runtime/Composer;I)V +Lcom/artemchep/keyguard/feature/keyguard/setup/CreateVaultWithBiometric; +Lcom/artemchep/keyguard/feature/keyguard/setup/CreateVaultWithPassword; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/CreateVaultWithPassword;->(Lcom/artemchep/keyguard/feature/loading/LoadingTask;Lcom/artemchep/keyguard/common/model/VaultState$Create$WithPassword;)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/CreateVaultWithPassword;->(Lcom/artemchep/keyguard/feature/loading/LoadingTask;Lkotlin/jvm/functions/Function1;)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/CreateVaultWithPassword;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/CreateVaultWithPassword;->invoke(Ljava/lang/String;)V +Lcom/artemchep/keyguard/feature/keyguard/setup/SetupRoute; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupRoute;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupRoute;->(Lcom/artemchep/keyguard/common/model/VaultState$Create$WithPassword;Lcom/artemchep/keyguard/common/model/VaultState$Create$WithBiometric;)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupRoute;->Content(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupRoute;->hashCode()I +Lcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt;->SetupContent$lambda$7(Landroidx/compose/runtime/State;)Lcom/artemchep/keyguard/feature/auth/common/SwitchFieldModel; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt;->SetupContent$lambda$9(Landroidx/compose/runtime/State;)Lkotlin/jvm/functions/Function0; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt;->SetupContent(Landroidx/compose/foundation/layout/ColumnScope;Lcom/artemchep/keyguard/feature/keyguard/setup/SetupState;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt;->SetupScreen(Lcom/artemchep/keyguard/common/model/VaultState$Create$WithPassword;Lcom/artemchep/keyguard/common/model/VaultState$Create$WithBiometric;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt;->SetupScreen(Lcom/artemchep/keyguard/feature/keyguard/setup/SetupState;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt;->SetupScreenCreateVaultTitle(Landroidx/compose/foundation/layout/ColumnScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt;->SetupScreenSkeleton(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt;->access$SetupContent$lambda$9(Landroidx/compose/runtime/State;)Lkotlin/jvm/functions/Function0; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt;->access$SetupScreenCreateVaultTitle(Landroidx/compose/foundation/layout/ColumnScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt;->keyguardSpan()Landroidx/compose/ui/text/AnnotatedString; +Lcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupContent$1$1; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupContent$1$1;->(Landroidx/compose/ui/focus/FocusRequester;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupContent$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupContent$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupContent$2; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupContent$2;->(Lcom/artemchep/keyguard/feature/keyguard/setup/SetupState;)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupContent$2;->invoke(Landroidx/compose/foundation/layout/RowScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupContent$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupContent$5; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupContent$5;->(Lcom/artemchep/keyguard/feature/keyguard/setup/SetupState;)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupContent$5;->invoke(Landroidx/compose/foundation/layout/RowScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupContent$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupContent$6$1; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupContent$6$1;->(Landroidx/compose/runtime/State;)V +Lcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupContent$7$1; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupContent$7$1;->(Landroidx/compose/runtime/State;)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupContent$7$1;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupContent$7$1;->invoke()V +Lcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupContent$8; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupContent$8;->(Lcom/artemchep/keyguard/feature/keyguard/setup/SetupState;)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupContent$8;->invoke(Landroidx/compose/foundation/layout/RowScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupContent$8;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupContent$9; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupContent$9;->(Landroidx/compose/foundation/layout/ColumnScope;Lcom/artemchep/keyguard/feature/keyguard/setup/SetupState;I)V +Lcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupContent$keyboardOnGo$1$1; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupContent$keyboardOnGo$1$1;->(Lcom/artemchep/keyguard/feature/keyguard/setup/SetupState;)V +Lcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupScreen$3; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupScreen$3;->(Lcom/artemchep/keyguard/common/model/VaultState$Create$WithPassword;Lcom/artemchep/keyguard/common/model/VaultState$Create$WithBiometric;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupScreen$3;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupScreen$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupScreen$4; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupScreen$4;->(Lcom/artemchep/keyguard/feature/keyguard/setup/SetupState;)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupScreen$4;->invoke(Landroidx/compose/foundation/layout/ColumnScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupScreen$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupScreenCreateVaultTitle$2; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupScreenCreateVaultTitle$2;->(Landroidx/compose/foundation/layout/ColumnScope;I)V +Lcom/artemchep/keyguard/feature/keyguard/setup/SetupState; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupState;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupState;->(Lcom/artemchep/keyguard/feature/keyguard/setup/SetupState$SideEffects;Lcom/artemchep/keyguard/feature/auth/common/TextFieldModel2;Lcom/artemchep/keyguard/feature/auth/common/SwitchFieldModel;Lcom/artemchep/keyguard/feature/keyguard/setup/SetupState$Biometric;ZLkotlin/jvm/functions/Function0;)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupState;->equals(Ljava/lang/Object;)Z +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupState;->getBiometric()Lcom/artemchep/keyguard/feature/keyguard/setup/SetupState$Biometric; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupState;->getCrashlytics()Lcom/artemchep/keyguard/feature/auth/common/SwitchFieldModel; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupState;->getOnCreateVault()Lkotlin/jvm/functions/Function0; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupState;->getPassword()Lcom/artemchep/keyguard/feature/auth/common/TextFieldModel2; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupState;->getSideEffects()Lcom/artemchep/keyguard/feature/keyguard/setup/SetupState$SideEffects; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupState;->isLoading()Z +Lcom/artemchep/keyguard/feature/keyguard/setup/SetupState$Biometric; +Lcom/artemchep/keyguard/feature/keyguard/setup/SetupState$Companion; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupState$Companion;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupState$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/feature/keyguard/setup/SetupState$SideEffects; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupState$SideEffects;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupState$SideEffects;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupState$SideEffects;->equals(Ljava/lang/Object;)Z +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupState$SideEffects;->getShowBiometricPromptFlow()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/feature/keyguard/setup/SetupState$SideEffects$Companion; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupState$SideEffects$Companion;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupState$SideEffects$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt;->access$biometricStateFlow(Lkotlinx/coroutines/flow/MutableStateFlow;Z)Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt;->biometricStateFlow(Lkotlinx/coroutines/flow/MutableStateFlow;Z)Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt;->setupScreenState(Lcom/artemchep/keyguard/common/model/VaultState$Create$WithPassword;Lcom/artemchep/keyguard/common/model/VaultState$Create$WithBiometric;Landroidx/compose/runtime/Composer;I)Lcom/artemchep/keyguard/common/model/Loadable; +Lcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt$setupScreenState$1$1; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt$setupScreenState$1$1;->(Lcom/artemchep/keyguard/common/model/VaultState$Create$WithPassword;Lcom/artemchep/keyguard/common/model/VaultState$Create$WithBiometric;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt$setupScreenState$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt$setupScreenState$1$1;->invoke(Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt$setupScreenState$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt$setupScreenState$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt$setupScreenState$1$1$1; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt$setupScreenState$1$1$1;->(Landroidx/compose/runtime/MutableState;Lkotlinx/coroutines/flow/MutableStateFlow;Lcom/artemchep/keyguard/common/util/flow/EventFlow;Lcom/artemchep/keyguard/feature/keyguard/setup/CreateVaultWithBiometric;Lcom/artemchep/keyguard/feature/keyguard/setup/CreateVaultWithPassword;Lcom/artemchep/keyguard/feature/loading/LoadingTask;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt$setupScreenState$1$1$1;->invoke(Lcom/artemchep/keyguard/feature/auth/common/Validated;ZLcom/artemchep/keyguard/feature/keyguard/setup/SetupState$Biometric;ZLkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt$setupScreenState$1$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt$setupScreenState$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt$setupScreenState$1$1$1$state$1; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt$setupScreenState$1$1$1$state$1;->(Ljava/lang/Object;)V +Lcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt$setupScreenState$1$1$1$state$2; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt$setupScreenState$1$1$1$state$2;->(Ljava/lang/Object;)V +Lcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt$setupScreenState$1$1$biometricSink$1; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt$setupScreenState$1$1$biometricSink$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt$setupScreenState$1$1$biometricSink$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt$setupScreenState$1$1$biometricSink$1;->invoke()Ljava/lang/Boolean; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt$setupScreenState$1$1$biometricSink$1;->invoke()Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt$setupScreenState$1$1$crashlyticsSink$1; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt$setupScreenState$1$1$crashlyticsSink$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt$setupScreenState$1$1$crashlyticsSink$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt$setupScreenState$1$1$crashlyticsSink$1;->invoke()Ljava/lang/Boolean; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt$setupScreenState$1$1$crashlyticsSink$1;->invoke()Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt$setupScreenState$1$1$passwordSink$1; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt$setupScreenState$1$1$passwordSink$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt$setupScreenState$1$1$passwordSink$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt$setupScreenState$1$1$passwordSink$1;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt$setupScreenState$1$1$passwordSink$1;->invoke()Ljava/lang/String; +Lcom/artemchep/keyguard/feature/keyguard/unlock/BiometricStatePrecomputed; +Lcom/artemchep/keyguard/feature/keyguard/unlock/ComposableSingletons$UnlockScreenKt; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/ComposableSingletons$UnlockScreenKt;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/ComposableSingletons$UnlockScreenKt;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/ComposableSingletons$UnlockScreenKt;->getLambda-1$common_noneRelease()Lkotlin/jvm/functions/Function3; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/ComposableSingletons$UnlockScreenKt;->getLambda-2$common_noneRelease()Lkotlin/jvm/functions/Function3; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/ComposableSingletons$UnlockScreenKt;->getLambda-3$common_noneRelease()Lkotlin/jvm/functions/Function3; +Lcom/artemchep/keyguard/feature/keyguard/unlock/ComposableSingletons$UnlockScreenKt$lambda-1$1; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/ComposableSingletons$UnlockScreenKt$lambda-1$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/ComposableSingletons$UnlockScreenKt$lambda-1$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/ComposableSingletons$UnlockScreenKt$lambda-1$1;->invoke(Landroidx/compose/foundation/layout/ColumnScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/ComposableSingletons$UnlockScreenKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/unlock/ComposableSingletons$UnlockScreenKt$lambda-2$1; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/ComposableSingletons$UnlockScreenKt$lambda-2$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/ComposableSingletons$UnlockScreenKt$lambda-2$1;->()V +Lcom/artemchep/keyguard/feature/keyguard/unlock/ComposableSingletons$UnlockScreenKt$lambda-3$1; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/ComposableSingletons$UnlockScreenKt$lambda-3$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/ComposableSingletons$UnlockScreenKt$lambda-3$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/ComposableSingletons$UnlockScreenKt$lambda-3$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/ComposableSingletons$UnlockScreenKt$lambda-3$1;->invoke(ZLandroidx/compose/runtime/Composer;I)V +Lcom/artemchep/keyguard/feature/keyguard/unlock/ComposableSingletons$UnlockScreenKt$lambda-4$1; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/ComposableSingletons$UnlockScreenKt$lambda-4$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/ComposableSingletons$UnlockScreenKt$lambda-4$1;->()V +Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockRoute; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockRoute;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockRoute;->(Lcom/artemchep/keyguard/common/model/VaultState$Unlock$WithPassword;Lcom/artemchep/keyguard/common/model/VaultState$Unlock$WithBiometric;Ljava/lang/String;)V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockRoute;->Content(Landroidx/compose/runtime/Composer;I)V +Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt;->UnlockScreen$lambda$3(Landroidx/compose/runtime/State;)Z +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt;->UnlockScreen(Lcom/artemchep/keyguard/common/model/VaultState$Unlock$WithPassword;Lcom/artemchep/keyguard/common/model/VaultState$Unlock$WithBiometric;Ljava/lang/String;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt;->UnlockScreen(Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt;->UnlockScreenSkeleton(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt;->UnlockScreenTheVaultIsLockedTitle(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt;->access$UnlockScreen$lambda$3(Landroidx/compose/runtime/State;)Z +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt;->access$UnlockScreenTheVaultIsLockedTitle(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt;->getUnlockScreenActionPadding()F +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt;->getUnlockScreenTitlePadding()F +Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$3; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$3;->(Lcom/artemchep/keyguard/common/model/VaultState$Unlock$WithPassword;Lcom/artemchep/keyguard/common/model/VaultState$Unlock$WithBiometric;Ljava/lang/String;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$3;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$4; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$4;->(Lcom/artemchep/keyguard/ui/focus/FocusRequester2;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$4;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$4;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$5; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$5;->(Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState;)V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$5;->invoke(Landroidx/compose/foundation/layout/RowScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$6; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$6;->(Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState;Lcom/artemchep/keyguard/ui/focus/FocusRequester2;)V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$6;->access$invoke$lambda$6$lambda$3(Landroidx/compose/runtime/State;)Lkotlin/jvm/functions/Function0; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$6;->invoke$lambda$6$lambda$3(Landroidx/compose/runtime/State;)Lkotlin/jvm/functions/Function0; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$6;->invoke(Landroidx/compose/foundation/layout/ColumnScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$6;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$6$2$keyboardOnGo$1$1; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$6$2$keyboardOnGo$1$1;->(Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState;)V +Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$6$3$1$1; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$6$3$1$1;->(Landroidx/compose/runtime/State;)V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$6$3$1$1;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$6$3$1$1;->invoke()V +Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$6$3$2; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$6$3$2;->(Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState;)V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$6$3$2;->invoke(Landroidx/compose/foundation/layout/RowScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$6$3$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$6$3$3; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$6$3$3;->(Landroidx/compose/runtime/State;)V +Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState;->(Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState$SideEffects;Lcom/artemchep/keyguard/feature/auth/common/TextFieldModel2;Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState$Biometric;Ljava/lang/String;ZLkotlinx/collections/immutable/ImmutableList;Lkotlin/jvm/functions/Function0;)V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState;->equals(Ljava/lang/Object;)Z +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState;->getActions()Lkotlinx/collections/immutable/ImmutableList; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState;->getBiometric()Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState$Biometric; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState;->getLockReason()Ljava/lang/String; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState;->getPassword()Lcom/artemchep/keyguard/feature/auth/common/TextFieldModel2; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState;->getSideEffects()Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState$SideEffects; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState;->getUnlockVaultByMasterPassword()Lkotlin/jvm/functions/Function0; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState;->isLoading()Z +Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState$Biometric; +Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState$Companion; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState$Companion;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState$SideEffects; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState$SideEffects;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState$SideEffects;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState$SideEffects;->equals(Ljava/lang/Object;)Z +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState$SideEffects;->getShowBiometricPromptFlow()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState$SideEffects$Companion; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState$SideEffects$Companion;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState$SideEffects$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockStateProducerKt; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockStateProducerKt;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockStateProducerKt;->access$getDEFAULT_PASSWORD$p()Ljava/lang/String; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockStateProducerKt;->unlockScreenState(Lcom/artemchep/keyguard/common/usecase/ClearData;Lcom/artemchep/keyguard/common/model/VaultState$Unlock$WithPassword;Lcom/artemchep/keyguard/common/model/VaultState$Unlock$WithBiometric;Ljava/lang/String;Landroidx/compose/runtime/Composer;II)Lcom/artemchep/keyguard/common/model/Loadable; +Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockStateProducerKt$unlockScreenState$1; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockStateProducerKt$unlockScreenState$1;->(Lcom/artemchep/keyguard/common/model/VaultState$Unlock$WithPassword;Lcom/artemchep/keyguard/common/model/VaultState$Unlock$WithBiometric;Lcom/artemchep/keyguard/common/usecase/ClearData;Ljava/lang/String;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockStateProducerKt$unlockScreenState$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockStateProducerKt$unlockScreenState$1;->invoke(Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockStateProducerKt$unlockScreenState$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockStateProducerKt$unlockScreenState$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockStateProducerKt$unlockScreenState$1$1; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockStateProducerKt$unlockScreenState$1$1;->(Landroidx/compose/runtime/MutableState;Lcom/artemchep/keyguard/feature/keyguard/unlock/BiometricStatePrecomputed;Lkotlinx/coroutines/flow/SharedFlow;Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockVaultWithPassword;Ljava/lang/String;Lkotlinx/collections/immutable/PersistentList;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockStateProducerKt$unlockScreenState$1$1;->invoke(Lcom/artemchep/keyguard/feature/auth/common/Validated;ZLkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockStateProducerKt$unlockScreenState$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockStateProducerKt$unlockScreenState$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockStateProducerKt$unlockScreenState$1$actions$1; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockStateProducerKt$unlockScreenState$1$actions$1;->(Lcom/artemchep/keyguard/common/usecase/ClearData;Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;)V +Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockStateProducerKt$unlockScreenState$1$biometricPromptFlow$1; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockStateProducerKt$unlockScreenState$1$biometricPromptFlow$1;->(Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockVaultWithBiometric;Lcom/artemchep/keyguard/feature/loading/LoadingTask;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockStateProducerKt$unlockScreenState$1$biometricPromptFlow$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockStateProducerKt$unlockScreenState$1$biometricPromptFlow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockStateProducerKt$unlockScreenState$1$biometricPromptFlow$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockStateProducerKt$unlockScreenState$1$biometricPromptFlow$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockStateProducerKt$unlockScreenState$1$passwordSink$1; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockStateProducerKt$unlockScreenState$1$passwordSink$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockStateProducerKt$unlockScreenState$1$passwordSink$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockStateProducerKt$unlockScreenState$1$passwordSink$1;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockStateProducerKt$unlockScreenState$1$passwordSink$1;->invoke()Ljava/lang/String; +Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockVaultWithBiometric; +Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockVaultWithPassword; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockVaultWithPassword;->(Lcom/artemchep/keyguard/feature/loading/LoadingTask;Lcom/artemchep/keyguard/common/model/VaultState$Unlock$WithPassword;)V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockVaultWithPassword;->(Lcom/artemchep/keyguard/feature/loading/LoadingTask;Lkotlin/jvm/functions/Function1;)V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockVaultWithPassword;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockVaultWithPassword;->invoke(Ljava/lang/String;)V +Lcom/artemchep/keyguard/feature/loading/LoadingScreenKt; +HSPLcom/artemchep/keyguard/feature/loading/LoadingScreenKt;->LoadingScreen(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/loading/LoadingScreenKt;->LoadingScreenContent(Landroidx/compose/runtime/Composer;I)V +Lcom/artemchep/keyguard/feature/loading/LoadingTask; +HSPLcom/artemchep/keyguard/feature/loading/LoadingTask;->()V +HSPLcom/artemchep/keyguard/feature/loading/LoadingTask;->(Lcom/artemchep/keyguard/feature/navigation/state/TranslatorScope;Lkotlinx/coroutines/CoroutineScope;Lkotlin/jvm/functions/Function1;)V +HSPLcom/artemchep/keyguard/feature/loading/LoadingTask;->(Lcom/artemchep/keyguard/feature/navigation/state/TranslatorScope;Lkotlinx/coroutines/CoroutineScope;Lkotlin/jvm/functions/Function1;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/feature/loading/LoadingTask;->access$isWorkingSink$p(Lcom/artemchep/keyguard/feature/loading/LoadingTask;)Lkotlinx/coroutines/flow/MutableStateFlow; +HSPLcom/artemchep/keyguard/feature/loading/LoadingTask;->execute(Lkotlin/jvm/functions/Function1;Ljava/lang/String;)V +HSPLcom/artemchep/keyguard/feature/loading/LoadingTask;->getErrorFlow()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/feature/loading/LoadingTask;->isExecutingFlow()Lkotlinx/coroutines/flow/MutableStateFlow; +Lcom/artemchep/keyguard/feature/loading/LoadingTask$1; +HSPLcom/artemchep/keyguard/feature/loading/LoadingTask$1;->(Lcom/artemchep/keyguard/feature/navigation/state/TranslatorScope;)V +Lcom/artemchep/keyguard/feature/loading/LoadingTask$execute$1; +HSPLcom/artemchep/keyguard/feature/loading/LoadingTask$execute$1;->(Lcom/artemchep/keyguard/feature/loading/LoadingTask;Lkotlin/jvm/functions/Function1;Ljava/lang/String;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/loading/LoadingTask$execute$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/loading/LoadingTask$execute$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/loading/LoadingTask$special$$inlined$map$1; +HSPLcom/artemchep/keyguard/feature/loading/LoadingTask$special$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/feature/loading/LoadingTask$special$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/loading/LoadingTask$special$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/feature/loading/LoadingTask$special$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +Lcom/artemchep/keyguard/feature/localization/TextHolder; +Lcom/artemchep/keyguard/feature/localization/TextHolder$Res; +HSPLcom/artemchep/keyguard/feature/localization/TextHolder$Res;->()V +HSPLcom/artemchep/keyguard/feature/localization/TextHolder$Res;->(Ldev/icerock/moko/resources/StringResource;)V +HSPLcom/artemchep/keyguard/feature/localization/TextHolder$Res;->getData()Ldev/icerock/moko/resources/StringResource; +Lcom/artemchep/keyguard/feature/localization/TextHolder$Value; +HSPLcom/artemchep/keyguard/feature/localization/TextHolder$Value;->()V +HSPLcom/artemchep/keyguard/feature/localization/TextHolder$Value;->(Ljava/lang/String;)V +HSPLcom/artemchep/keyguard/feature/localization/TextHolder$Value;->getData()Ljava/lang/String; +Lcom/artemchep/keyguard/feature/localization/TextHolderKt; +HSPLcom/artemchep/keyguard/feature/localization/TextHolderKt;->textResource(Lcom/artemchep/keyguard/feature/localization/TextHolder;Landroidx/compose/runtime/Composer;I)Ljava/lang/String; +Lcom/artemchep/keyguard/feature/localization/TextResourceKt; +HSPLcom/artemchep/keyguard/feature/localization/TextResourceKt;->textResource(Ldev/icerock/moko/resources/StringResource;Lcom/artemchep/keyguard/platform/LeContext;)Ljava/lang/String; +HSPLcom/artemchep/keyguard/feature/localization/TextResourceKt;->textResource(Ldev/icerock/moko/resources/StringResource;Lcom/artemchep/keyguard/platform/LeContext;[Ljava/lang/Object;)Ljava/lang/String; +Lcom/artemchep/keyguard/feature/navigation/BackHandler; +HSPLcom/artemchep/keyguard/feature/navigation/BackHandler;->()V +HSPLcom/artemchep/keyguard/feature/navigation/BackHandler;->(Lkotlinx/coroutines/flow/MutableStateFlow;Lkotlinx/coroutines/flow/MutableStateFlow;)V +HSPLcom/artemchep/keyguard/feature/navigation/BackHandler;->(Lkotlinx/coroutines/flow/MutableStateFlow;Lkotlinx/coroutines/flow/MutableStateFlow;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/feature/navigation/BackHandler;->getEek()Lkotlinx/coroutines/flow/MutableStateFlow; +HSPLcom/artemchep/keyguard/feature/navigation/BackHandler;->register(Lcom/artemchep/keyguard/feature/navigation/NavigationController;Ljava/util/List;)Lkotlin/jvm/functions/Function0; +Lcom/artemchep/keyguard/feature/navigation/BackHandler$Entry; +HSPLcom/artemchep/keyguard/feature/navigation/BackHandler$Entry;->()V +HSPLcom/artemchep/keyguard/feature/navigation/BackHandler$Entry;->(Lcom/artemchep/keyguard/feature/navigation/NavigationController;Ljava/util/List;)V +PLcom/artemchep/keyguard/feature/navigation/BackHandler$Entry;->getBackStack()Ljava/util/List; +HSPLcom/artemchep/keyguard/feature/navigation/BackHandler$Entry;->getController()Lcom/artemchep/keyguard/feature/navigation/NavigationController; +Lcom/artemchep/keyguard/feature/navigation/BackHandler$register$1; +HSPLcom/artemchep/keyguard/feature/navigation/BackHandler$register$1;->(Lcom/artemchep/keyguard/feature/navigation/BackHandler;Ljava/lang/String;)V +Lcom/artemchep/keyguard/feature/navigation/ComposableSingletons$NavigationNodeKt; +HSPLcom/artemchep/keyguard/feature/navigation/ComposableSingletons$NavigationNodeKt;->()V +HSPLcom/artemchep/keyguard/feature/navigation/ComposableSingletons$NavigationNodeKt;->()V +HSPLcom/artemchep/keyguard/feature/navigation/ComposableSingletons$NavigationNodeKt;->getLambda-1$common_noneRelease()Lkotlin/jvm/functions/Function4; +HSPLcom/artemchep/keyguard/feature/navigation/ComposableSingletons$NavigationNodeKt;->getLambda-2$common_noneRelease()Lkotlin/jvm/functions/Function3; +Lcom/artemchep/keyguard/feature/navigation/ComposableSingletons$NavigationNodeKt$lambda-1$1; +HSPLcom/artemchep/keyguard/feature/navigation/ComposableSingletons$NavigationNodeKt$lambda-1$1;->()V +HSPLcom/artemchep/keyguard/feature/navigation/ComposableSingletons$NavigationNodeKt$lambda-1$1;->()V +HSPLcom/artemchep/keyguard/feature/navigation/ComposableSingletons$NavigationNodeKt$lambda-1$1;->invoke(Landroidx/compose/animation/AnimatedContentScope;Lcom/artemchep/keyguard/feature/navigation/Foo;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/navigation/ComposableSingletons$NavigationNodeKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/ComposableSingletons$NavigationNodeKt$lambda-1$1$1; +HSPLcom/artemchep/keyguard/feature/navigation/ComposableSingletons$NavigationNodeKt$lambda-1$1$1;->(Lcom/artemchep/keyguard/feature/navigation/NavigationEntry;)V +HSPLcom/artemchep/keyguard/feature/navigation/ComposableSingletons$NavigationNodeKt$lambda-1$1$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/navigation/ComposableSingletons$NavigationNodeKt$lambda-1$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/ComposableSingletons$NavigationNodeKt$lambda-2$1; +HSPLcom/artemchep/keyguard/feature/navigation/ComposableSingletons$NavigationNodeKt$lambda-2$1;->()V +HSPLcom/artemchep/keyguard/feature/navigation/ComposableSingletons$NavigationNodeKt$lambda-2$1;->()V +HSPLcom/artemchep/keyguard/feature/navigation/ComposableSingletons$NavigationNodeKt$lambda-2$1;->invoke(Lcom/artemchep/keyguard/feature/navigation/Foo;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/navigation/ComposableSingletons$NavigationNodeKt$lambda-2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/DialogRoute; +Lcom/artemchep/keyguard/feature/navigation/Foo; +HSPLcom/artemchep/keyguard/feature/navigation/Foo;->()V +HSPLcom/artemchep/keyguard/feature/navigation/Foo;->(Lkotlinx/collections/immutable/PersistentList;Lkotlinx/collections/immutable/PersistentList;Lcom/artemchep/keyguard/feature/navigation/NavigationEntry;)V +HSPLcom/artemchep/keyguard/feature/navigation/Foo;->access$getEmpty$cp()Lcom/artemchep/keyguard/feature/navigation/Foo; +HSPLcom/artemchep/keyguard/feature/navigation/Foo;->equals(Ljava/lang/Object;)Z +HSPLcom/artemchep/keyguard/feature/navigation/Foo;->getEntry()Lcom/artemchep/keyguard/feature/navigation/NavigationEntry; +HSPLcom/artemchep/keyguard/feature/navigation/Foo;->getLogicalStack()Lkotlinx/collections/immutable/PersistentList; +HSPLcom/artemchep/keyguard/feature/navigation/Foo;->getVisualStack()Lkotlinx/collections/immutable/PersistentList; +HSPLcom/artemchep/keyguard/feature/navigation/Foo;->hashCode()I +Lcom/artemchep/keyguard/feature/navigation/Foo$Companion; +HSPLcom/artemchep/keyguard/feature/navigation/Foo$Companion;->()V +HSPLcom/artemchep/keyguard/feature/navigation/Foo$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/feature/navigation/Foo$Companion;->getEmpty()Lcom/artemchep/keyguard/feature/navigation/Foo; +Lcom/artemchep/keyguard/feature/navigation/N; +HSPLcom/artemchep/keyguard/feature/navigation/N;->()V +HSPLcom/artemchep/keyguard/feature/navigation/N;->()V +HSPLcom/artemchep/keyguard/feature/navigation/N;->tag(Ljava/lang/String;)Ljava/lang/String; +Lcom/artemchep/keyguard/feature/navigation/NavigationAnimation; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationAnimation;->()V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationAnimation;->()V +Lcom/artemchep/keyguard/feature/navigation/NavigationAnimationKt; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationAnimationKt;->()V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationAnimationKt;->transform(Lcom/artemchep/keyguard/feature/navigation/NavigationAnimation;FLcom/artemchep/keyguard/common/model/NavAnimation;Lcom/artemchep/keyguard/feature/navigation/NavigationAnimationType;)Landroidx/compose/animation/ContentTransform; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationAnimationKt;->transformGoBack(Lcom/artemchep/keyguard/feature/navigation/NavigationAnimation;F)Landroidx/compose/animation/ContentTransform; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationAnimationKt;->transformSwitchContext(Lcom/artemchep/keyguard/feature/navigation/NavigationAnimation;F)Landroidx/compose/animation/ContentTransform; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationAnimationKt;->twaat(I)Landroidx/compose/animation/core/TweenSpec; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationAnimationKt;->twuut(I)Landroidx/compose/animation/core/TweenSpec; +Lcom/artemchep/keyguard/feature/navigation/NavigationAnimationKt$WhenMappings; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationAnimationKt$WhenMappings;->()V +Lcom/artemchep/keyguard/feature/navigation/NavigationAnimationKt$transformGoBack$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationAnimationKt$transformGoBack$1;->()V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationAnimationKt$transformGoBack$1;->()V +Lcom/artemchep/keyguard/feature/navigation/NavigationAnimationKt$transformGoBack$2; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationAnimationKt$transformGoBack$2;->()V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationAnimationKt$transformGoBack$2;->()V +Lcom/artemchep/keyguard/feature/navigation/NavigationAnimationType; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationAnimationType;->$values()[Lcom/artemchep/keyguard/feature/navigation/NavigationAnimationType; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationAnimationType;->()V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationAnimationType;->(Ljava/lang/String;I)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationAnimationType;->values()[Lcom/artemchep/keyguard/feature/navigation/NavigationAnimationType; +Lcom/artemchep/keyguard/feature/navigation/NavigationController; +Lcom/artemchep/keyguard/feature/navigation/NavigationControllerKt; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationControllerKt;->()V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationControllerKt;->NavigationController(Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationControllerKt;->getLocalNavigationController()Landroidx/compose/runtime/ProvidableCompositionLocal; +Lcom/artemchep/keyguard/feature/navigation/NavigationControllerKt$LocalNavigationController$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationControllerKt$LocalNavigationController$1;->()V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationControllerKt$LocalNavigationController$1;->()V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationControllerKt$LocalNavigationController$1;->invoke()Lcom/artemchep/keyguard/feature/navigation/NavigationController; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationControllerKt$LocalNavigationController$1;->invoke()Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/NavigationControllerKt$LocalNavigationController$1$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationControllerKt$LocalNavigationController$1$1;->()V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationControllerKt$LocalNavigationController$1$1;->canPop()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/feature/navigation/NavigationControllerKt$NavigationController$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationControllerKt$NavigationController$1;->(Lkotlin/jvm/functions/Function3;Lcom/artemchep/keyguard/feature/navigation/NavigationControllerKt$NavigationController$controller$1$handler$1;)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationControllerKt$NavigationController$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationControllerKt$NavigationController$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/NavigationControllerKt$NavigationController$controller$1$combinedCanPop$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationControllerKt$NavigationController$controller$1$combinedCanPop$1;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationControllerKt$NavigationController$controller$1$combinedCanPop$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationControllerKt$NavigationController$controller$1$combinedCanPop$1;->invoke(ZZLkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationControllerKt$NavigationController$controller$1$combinedCanPop$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/NavigationControllerKt$NavigationController$controller$1$handler$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationControllerKt$NavigationController$controller$1$handler$1;->(Lkotlinx/coroutines/CoroutineScope;Lcom/artemchep/keyguard/feature/navigation/NavigationController;Lkotlin/jvm/functions/Function1;Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationControllerKt$NavigationController$controller$1$handler$1;->canPop()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationControllerKt$NavigationController$controller$1$handler$1;->getScope()Lkotlinx/coroutines/CoroutineScope; +Lcom/artemchep/keyguard/feature/navigation/NavigationEntry; +Lcom/artemchep/keyguard/feature/navigation/NavigationEntryImpl; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationEntryImpl;->()V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationEntryImpl;->(Ljava/lang/String;Lkotlinx/coroutines/CoroutineScope;Ljava/lang/String;Lcom/artemchep/keyguard/feature/navigation/Route;)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationEntryImpl;->destroy()V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationEntryImpl;->getId()Ljava/lang/String; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationEntryImpl;->getRoute()Lcom/artemchep/keyguard/feature/navigation/Route; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationEntryImpl;->getScope()Lkotlinx/coroutines/CoroutineScope; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationEntryImpl;->getType()Ljava/lang/String; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationEntryImpl;->getVm()Lcom/artemchep/keyguard/feature/navigation/state/FlowHolderViewModel; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationEntryImpl;->hashCode()I +Lcom/artemchep/keyguard/feature/navigation/NavigationEntryImpl$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationEntryImpl$1;->(Lcom/artemchep/keyguard/feature/navigation/NavigationEntryImpl;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationEntryImpl$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationEntryImpl$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/NavigationEntryKt; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationEntryKt;->()V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationEntryKt;->getLocalNavigationEntry()Landroidx/compose/runtime/ProvidableCompositionLocal; +Lcom/artemchep/keyguard/feature/navigation/NavigationEntryKt$LocalNavigationEntry$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationEntryKt$LocalNavigationEntry$1;->()V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationEntryKt$LocalNavigationEntry$1;->()V +Lcom/artemchep/keyguard/feature/navigation/NavigationEntryProviderKt; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationEntryProviderKt;->NavigationNode(Ljava/lang/String;Lcom/artemchep/keyguard/feature/navigation/Route;Landroidx/compose/runtime/Composer;I)V +Lcom/artemchep/keyguard/feature/navigation/NavigationEntryProviderKt$NavigationNode$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationEntryProviderKt$NavigationNode$1;->(Lcom/artemchep/keyguard/feature/navigation/NavigationEntryImpl;)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationEntryProviderKt$NavigationNode$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationEntryProviderKt$NavigationNode$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/NavigationEntryProviderKt$NavigationNode$1$invoke$$inlined$onDispose$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationEntryProviderKt$NavigationNode$1$invoke$$inlined$onDispose$1;->(Lcom/artemchep/keyguard/feature/navigation/NavigationEntryImpl;)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationEntryProviderKt$NavigationNode$1$invoke$$inlined$onDispose$1;->dispose()V +Lcom/artemchep/keyguard/feature/navigation/NavigationKt; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationKt;->()V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationKt;->getLocalRoute()Landroidx/compose/runtime/ProvidableCompositionLocal; +Lcom/artemchep/keyguard/feature/navigation/NavigationKt$LocalBackHost$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationKt$LocalBackHost$1;->()V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationKt$LocalBackHost$1;->()V +Lcom/artemchep/keyguard/feature/navigation/NavigationKt$LocalRoute$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationKt$LocalRoute$1;->()V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationKt$LocalRoute$1;->()V +Lcom/artemchep/keyguard/feature/navigation/NavigationNodeCurrentStackKt; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeCurrentStackKt;->access$navigationNodeStack$lambda$0(Landroidx/compose/runtime/State;)Lkotlinx/collections/immutable/PersistentList; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeCurrentStackKt;->navigationNodeStack$lambda$0(Landroidx/compose/runtime/State;)Lkotlinx/collections/immutable/PersistentList; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeCurrentStackKt;->navigationNodeStack$lambda$2(Landroidx/compose/runtime/State;)Ljava/lang/String; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeCurrentStackKt;->navigationNodeStack(Landroidx/compose/runtime/Composer;I)Ljava/lang/String; +Lcom/artemchep/keyguard/feature/navigation/NavigationNodeCurrentStackKt$navigationNodeStack$value$2$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeCurrentStackKt$navigationNodeStack$value$2$1;->(Landroidx/compose/runtime/State;)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeCurrentStackKt$navigationNodeStack$value$2$1;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeCurrentStackKt$navigationNodeStack$value$2$1;->invoke()Ljava/lang/String; +Lcom/artemchep/keyguard/feature/navigation/NavigationNodeCurrentStackKt$navigationNodeStack$value$2$1$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeCurrentStackKt$navigationNodeStack$value$2$1$1;->()V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeCurrentStackKt$navigationNodeStack$value$2$1$1;->()V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeCurrentStackKt$navigationNodeStack$value$2$1$1;->invoke(Lcom/artemchep/keyguard/feature/navigation/NavigationEntry;)Ljava/lang/CharSequence; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeCurrentStackKt$navigationNodeStack$value$2$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/NavigationNodeKt; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeKt;->()V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeKt;->NavigationNode$lambda$0(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetNavAnimation; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeKt;->NavigationNode$lambda$12$lambda$9(Landroidx/compose/runtime/State;)F +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeKt;->NavigationNode(Lcom/artemchep/keyguard/feature/navigation/NavigationEntry;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeKt;->NavigationNode(Lkotlinx/collections/immutable/PersistentList;ILandroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeKt;->NavigationRoute(Lcom/artemchep/keyguard/feature/navigation/NavigationEntry;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeKt;->access$NavigationNode$lambda$0(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetNavAnimation; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeKt;->access$NavigationNode$lambda$12$lambda$9(Landroidx/compose/runtime/State;)F +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeKt;->access$NavigationRoute(Lcom/artemchep/keyguard/feature/navigation/NavigationEntry;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeKt;->getLocalNavigationNodeLogicalStack()Landroidx/compose/runtime/ProvidableCompositionLocal; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeKt;->getLocalNavigationNodeVisualStack()Landroidx/compose/runtime/ProvidableCompositionLocal; +Lcom/artemchep/keyguard/feature/navigation/NavigationNodeKt$LocalNavigationNodeLogicalStack$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeKt$LocalNavigationNodeLogicalStack$1;->()V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeKt$LocalNavigationNodeLogicalStack$1;->()V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeKt$LocalNavigationNodeLogicalStack$1;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeKt$LocalNavigationNodeLogicalStack$1;->invoke()Lkotlinx/collections/immutable/PersistentList; +Lcom/artemchep/keyguard/feature/navigation/NavigationNodeKt$LocalNavigationNodeVisualStack$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeKt$LocalNavigationNodeVisualStack$1;->()V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeKt$LocalNavigationNodeVisualStack$1;->()V +Lcom/artemchep/keyguard/feature/navigation/NavigationNodeKt$NavigationNode$$inlined$rememberInstance$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeKt$NavigationNode$$inlined$rememberInstance$1;->()V +Lcom/artemchep/keyguard/feature/navigation/NavigationNodeKt$NavigationNode$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeKt$NavigationNode$1;->(Lcom/artemchep/keyguard/feature/navigation/NavigationEntry;)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeKt$NavigationNode$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeKt$NavigationNode$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/NavigationNodeKt$NavigationNode$2; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeKt$NavigationNode$2;->(Lcom/artemchep/keyguard/feature/navigation/NavigationEntry;I)V +Lcom/artemchep/keyguard/feature/navigation/NavigationNodeKt$NavigationNode$3$2; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeKt$NavigationNode$3$2;->(Lkotlin/Lazy;Landroidx/compose/runtime/State;)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeKt$NavigationNode$3$2;->invoke(Landroidx/compose/animation/AnimatedContentTransitionScope;)Landroidx/compose/animation/ContentTransform; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeKt$NavigationNode$3$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/NavigationNodeKt$NavigationNode$4; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeKt$NavigationNode$4;->(Lkotlinx/collections/immutable/PersistentList;III)V +Lcom/artemchep/keyguard/feature/navigation/NavigationNodeKt$NavigationRoute$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeKt$NavigationRoute$1;->(Lcom/artemchep/keyguard/feature/navigation/NavigationEntry;)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeKt$NavigationRoute$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeKt$NavigationRoute$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2;->NavigationRouterBackHandler(Landroidx/activity/OnBackPressedDispatcher;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V +Lcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1;->(Landroidx/activity/OnBackPressedDispatcher;)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1;->invoke(Lcom/artemchep/keyguard/feature/navigation/BackHandler;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$1;->(Landroidx/activity/OnBackPressedDispatcher;Landroidx/activity/OnBackPressedCallback;)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$1$invoke$$inlined$onDispose$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$1$invoke$$inlined$onDispose$1;->(Landroidx/activity/OnBackPressedCallback;)V +Lcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$2; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$2;->(Lcom/artemchep/keyguard/feature/navigation/BackHandler;Landroidx/activity/OnBackPressedCallback;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$2$3; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$2$3;->(Landroidx/activity/OnBackPressedCallback;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$2$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$2$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$2$3;->invoke(ZLkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$2$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$2$invokeSuspend$$inlined$flatMapLatest$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$2$invokeSuspend$$inlined$flatMapLatest$1;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$2$invokeSuspend$$inlined$flatMapLatest$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$2$invokeSuspend$$inlined$flatMapLatest$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$2$invokeSuspend$$inlined$flatMapLatest$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$2$invokeSuspend$$inlined$map$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$2$invokeSuspend$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$2$invokeSuspend$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$2$invokeSuspend$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$2$invokeSuspend$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$2$invokeSuspend$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$2$invokeSuspend$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$2$invokeSuspend$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$2$invokeSuspend$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$callback$1$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$callback$1$1;->(Lcom/artemchep/keyguard/feature/navigation/BackHandler;)V +Lcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandlerKt; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandlerKt;->()V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandlerKt;->NavigationRouterBackHandler(Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandlerKt;->getLocalNavigationBackHandler()Landroidx/compose/runtime/ProvidableCompositionLocal; +Lcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandlerKt$LocalNavigationBackHandler$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandlerKt$LocalNavigationBackHandler$1;->()V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandlerKt$LocalNavigationBackHandler$1;->()V +Lcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandlerKt$NavigationRouterBackHandler$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandlerKt$NavigationRouterBackHandler$1;->(Lkotlin/jvm/functions/Function2;)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandlerKt$NavigationRouterBackHandler$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandlerKt$NavigationRouterBackHandler$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/NavigationRouterBackIconKt; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackIconKt;->NavigationIcon(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V +Lcom/artemchep/keyguard/feature/navigation/NavigationRouterBackIconKt$NavigationIcon$2; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackIconKt$NavigationIcon$2;->(Landroidx/compose/ui/Modifier;II)V +Lcom/artemchep/keyguard/feature/navigation/NavigationRouterKt; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterKt;->()V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterKt;->NavigationRouter(Ljava/lang/String;Lcom/artemchep/keyguard/feature/navigation/Route;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterKt;->getLocalNavigationRouter()Landroidx/compose/runtime/ProvidableCompositionLocal; +Lcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$LocalNavigationRouter$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$LocalNavigationRouter$1;->()V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$LocalNavigationRouter$1;->()V +Lcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$1;->(Lcom/artemchep/keyguard/feature/navigation/NavigationStack;Lkotlinx/coroutines/CoroutineScope;)V +Lcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$2; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$2;->(Lcom/artemchep/keyguard/feature/navigation/NavigationStack;Lkotlin/jvm/functions/Function3;)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$2;->invoke(Lcom/artemchep/keyguard/feature/navigation/NavigationController;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$2$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$2$1;->(Lcom/artemchep/keyguard/feature/navigation/BackHandler;Lcom/artemchep/keyguard/feature/navigation/NavigationController;Lkotlinx/collections/immutable/PersistentList;)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$2$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$2$1$invoke$$inlined$onDispose$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$2$1$invoke$$inlined$onDispose$1;->(Lkotlin/jvm/functions/Function0;)V +Lcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$2$2; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$2$2;->(Lkotlin/jvm/functions/Function3;Lkotlinx/collections/immutable/PersistentList;)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$2$2;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$2$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$3; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$3;->(Ljava/lang/String;Lcom/artemchep/keyguard/feature/navigation/Route;Lkotlin/jvm/functions/Function3;I)V +Lcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$canPop$1$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$canPop$1$1;->(Lcom/artemchep/keyguard/feature/navigation/NavigationStack;)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$canPop$1$1;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$canPop$1$1;->invoke()Lkotlinx/collections/immutable/PersistentList; +Lcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$lambda$2$$inlined$map$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$lambda$2$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$lambda$2$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$lambda$2$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$lambda$2$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$lambda$2$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$lambda$2$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$lambda$2$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$lambda$2$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$lambda$2$$inlined$map$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/NavigationStack; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationStack;->()V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationStack;->(Lcom/artemchep/keyguard/feature/navigation/NavigationEntry;)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationStack;->getValue()Lkotlinx/collections/immutable/PersistentList; +Lcom/artemchep/keyguard/feature/navigation/Route; +Lcom/artemchep/keyguard/feature/navigation/state/CopyKt; +HSPLcom/artemchep/keyguard/feature/navigation/state/CopyKt;->copy(Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;Lcom/artemchep/keyguard/common/service/clipboard/ClipboardService;)Lcom/artemchep/keyguard/common/usecase/CopyText; +Lcom/artemchep/keyguard/feature/navigation/state/CopyKt$copy$1; +HSPLcom/artemchep/keyguard/feature/navigation/state/CopyKt$copy$1;->(Ljava/lang/Object;)V +Lcom/artemchep/keyguard/feature/navigation/state/DiskHandle; +Lcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl; +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl;->()V +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl;->(Lkotlinx/coroutines/CoroutineScope;Lcom/artemchep/keyguard/common/usecase/PutScreenState;Ljava/lang/String;Ljava/util/Map;)V +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl;->(Lkotlinx/coroutines/CoroutineScope;Lcom/artemchep/keyguard/common/usecase/PutScreenState;Ljava/lang/String;Ljava/util/Map;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl;->access$tryWrite(Lcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl;Ljava/util/Map;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl;->getRestoredState()Ljava/util/Map; +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl;->link(Ljava/lang/String;Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl;->tryWrite(Ljava/util/Map;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$2; +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$2;->(Lcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$2;->invoke(Ljava/util/List;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$Companion; +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$Companion;->()V +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$Companion;->read(Lkotlinx/coroutines/CoroutineScope;Lcom/artemchep/keyguard/common/usecase/GetScreenState;Lcom/artemchep/keyguard/common/usecase/PutScreenState;Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$Companion$read$1; +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$Companion$read$1;->(Lcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$Companion;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$Companion$read$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$_init_$lambda$2$$inlined$combineToList$1; +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$_init_$lambda$2$$inlined$combineToList$1;->(Ljava/util/List;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$_init_$lambda$2$$inlined$combineToList$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$_init_$lambda$2$$inlined$combineToList$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$_init_$lambda$2$$inlined$combineToList$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$_init_$lambda$2$$inlined$combineToList$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$_init_$lambda$2$$inlined$combineToList$1$1; +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$_init_$lambda$2$$inlined$combineToList$1$1;->(Ljava/util/List;[Ljava/lang/Object;Ljava/util/concurrent/atomic/AtomicInteger;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$_init_$lambda$2$$inlined$combineToList$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$_init_$lambda$2$$inlined$combineToList$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$_init_$lambda$2$$inlined$combineToList$1$1;->invoke(Lkotlinx/coroutines/channels/ProducerScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$_init_$lambda$2$$inlined$combineToList$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$_init_$lambda$2$$inlined$combineToList$1$1$1; +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$_init_$lambda$2$$inlined$combineToList$1$1$1;->(Lkotlinx/coroutines/flow/Flow;[Ljava/lang/Object;ILjava/util/concurrent/atomic/AtomicInteger;Lkotlinx/coroutines/channels/ProducerScope;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$_init_$lambda$2$$inlined$combineToList$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$_init_$lambda$2$$inlined$combineToList$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$_init_$lambda$2$$inlined$combineToList$1$1$1$1; +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$_init_$lambda$2$$inlined$combineToList$1$1$1$1;->([Ljava/lang/Object;ILkotlin/jvm/internal/Ref$BooleanRef;Ljava/util/concurrent/atomic/AtomicInteger;Lkotlinx/coroutines/channels/ProducerScope;)V +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$_init_$lambda$2$$inlined$combineToList$1$1$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$_init_$lambda$2$$inlined$combineToList$1$2; +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$_init_$lambda$2$$inlined$combineToList$1$2;->(Ljava/util/concurrent/atomic/AtomicInteger;Lkotlinx/coroutines/flow/FlowCollector;[Ljava/lang/Object;)V +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$_init_$lambda$2$$inlined$combineToList$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$_init_$lambda$2$$inlined$combineToList$1$2;->emit(Lkotlin/Unit;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$lambda$2$lambda$1$$inlined$map$1; +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$lambda$2$lambda$1$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;Ljava/lang/String;)V +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$lambda$2$lambda$1$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$lambda$2$lambda$1$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$lambda$2$lambda$1$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/String;)V +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$lambda$2$lambda$1$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$lambda$2$lambda$1$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$lambda$2$lambda$1$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$lambda$2$lambda$1$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$special$$inlined$flatMapLatest$1; +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$special$$inlined$flatMapLatest$1;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$special$$inlined$flatMapLatest$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$special$$inlined$flatMapLatest$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$special$$inlined$flatMapLatest$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/state/FlowHolderViewModel; +HSPLcom/artemchep/keyguard/feature/navigation/state/FlowHolderViewModel;->()V +HSPLcom/artemchep/keyguard/feature/navigation/state/FlowHolderViewModel;->(Ljava/lang/String;Lkotlinx/coroutines/CoroutineScope;)V +HSPLcom/artemchep/keyguard/feature/navigation/state/FlowHolderViewModel;->clear(Ljava/lang/String;)V +HSPLcom/artemchep/keyguard/feature/navigation/state/FlowHolderViewModel;->destroy()V +HSPLcom/artemchep/keyguard/feature/navigation/state/FlowHolderViewModel;->getOrPut(Ljava/lang/String;Lcom/artemchep/keyguard/feature/navigation/NavigationController;Lcom/artemchep/keyguard/common/usecase/ShowMessage;Lcom/artemchep/keyguard/common/usecase/GetScreenState;Lcom/artemchep/keyguard/common/usecase/PutScreenState;Lcom/artemchep/keyguard/common/usecase/WindowCoroutineScope;Lkotlinx/serialization/json/Json;Ljava/lang/String;Ljava/lang/String;Lcom/artemchep/keyguard/platform/LeContext;Landroidx/compose/runtime/State;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/state/FlowHolderViewModel$Entry; +HSPLcom/artemchep/keyguard/feature/navigation/state/FlowHolderViewModel$Entry;->(Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;Lkotlinx/coroutines/Job;Ljava/lang/Object;)V +HSPLcom/artemchep/keyguard/feature/navigation/state/FlowHolderViewModel$Entry;->getJob()Lkotlinx/coroutines/Job; +HSPLcom/artemchep/keyguard/feature/navigation/state/FlowHolderViewModel$Entry;->getValue()Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/state/PersistedStorage; +Lcom/artemchep/keyguard/feature/navigation/state/PersistedStorage$InDisk; +HSPLcom/artemchep/keyguard/feature/navigation/state/PersistedStorage$InDisk;->()V +HSPLcom/artemchep/keyguard/feature/navigation/state/PersistedStorage$InDisk;->(Lcom/artemchep/keyguard/feature/navigation/state/DiskHandle;)V +PLcom/artemchep/keyguard/feature/navigation/state/PersistedStorage$InDisk;->getDisk()Lcom/artemchep/keyguard/feature/navigation/state/DiskHandle; +Lcom/artemchep/keyguard/feature/navigation/state/PersistedStorage$InMemory; +HSPLcom/artemchep/keyguard/feature/navigation/state/PersistedStorage$InMemory;->()V +HSPLcom/artemchep/keyguard/feature/navigation/state/PersistedStorage$InMemory;->()V +Lcom/artemchep/keyguard/feature/navigation/state/ProduceScreenStateKt; +HSPLcom/artemchep/keyguard/feature/navigation/state/ProduceScreenStateKt;->produceScreenState$lambda$0(Landroidx/compose/runtime/State;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/navigation/state/ProduceScreenStateKt;->produceScreenState(Ljava/lang/String;[Ljava/lang/Object;[Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/navigation/state/ProduceScreenStateKt;->rememberScreenState(Ljava/lang/String;[Ljava/lang/Object;[Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/State; +Lcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt;->()V +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt;->access$rememberScreenStateFlow$lambda$0(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/ShowMessage; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt;->access$rememberScreenStateFlow$lambda$1(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetScreenState; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt;->access$rememberScreenStateFlow$lambda$2(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetDebugScreenDelay; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt;->access$rememberScreenStateFlow$lambda$3(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/PutScreenState; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt;->access$rememberScreenStateFlow$lambda$4(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/WindowCoroutineScope; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt;->access$rememberScreenStateFlow$lambda$5(Lkotlin/Lazy;)Lkotlinx/serialization/json/Json; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt;->rememberScreenStateFlow$lambda$0(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/ShowMessage; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt;->rememberScreenStateFlow$lambda$1(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetScreenState; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt;->rememberScreenStateFlow$lambda$2(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetDebugScreenDelay; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt;->rememberScreenStateFlow$lambda$3(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/PutScreenState; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt;->rememberScreenStateFlow$lambda$4(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/WindowCoroutineScope; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt;->rememberScreenStateFlow$lambda$5(Lkotlin/Lazy;)Lkotlinx/serialization/json/Json; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt;->rememberScreenStateFlow(Ljava/lang/String;[Ljava/lang/Object;[Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)Lkotlinx/coroutines/flow/StateFlow; +Lcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$$inlined$rememberInstance$1; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$$inlined$rememberInstance$1;->()V +Lcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$$inlined$rememberInstance$2; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$$inlined$rememberInstance$2;->()V +Lcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$$inlined$rememberInstance$3; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$$inlined$rememberInstance$3;->()V +Lcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$$inlined$rememberInstance$4; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$$inlined$rememberInstance$4;->()V +Lcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$$inlined$rememberInstance$5; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$$inlined$rememberInstance$5;->()V +Lcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$$inlined$rememberInstance$6; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$$inlined$rememberInstance$6;->()V +Lcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$1$flow$1; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$1$flow$1;->(Ljava/lang/Object;Lkotlin/Lazy;Lkotlin/jvm/functions/Function2;)V +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$1$flow$1;->invoke(Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;)Lkotlinx/coroutines/flow/StateFlow; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$1$flow$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$1$flow$1$1; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$1$flow$1$1;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$1$flow$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$1$flow$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$1$flow$1$invoke$$inlined$map$1; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$1$flow$1$invoke$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$1$flow$1$invoke$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$1$flow$1$invoke$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$1$flow$1$invoke$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$1$flow$1$invoke$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$1$flow$1$invoke$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$1$flow$1$invoke$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$1$flow$1$invoke$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$1$flow$1$structureFlow$1; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$1$flow$1$structureFlow$1;->(Lkotlin/Lazy;Lkotlin/jvm/functions/Function2;Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$1$flow$1$structureFlow$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$1$flow$1$structureFlow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$1$flow$1$structureFlow$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$1$flow$1$structureFlow$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$1$flow$1$structureFlow$1$structure$1; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$1$flow$1$structureFlow$1$structure$1;->(Lkotlin/jvm/functions/Function2;Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$1$flow$1$structureFlow$1$structure$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$1$flow$1$structureFlow$1$structure$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$1$flow$1$structureFlow$1$structure$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$1$flow$1$structureFlow$1$structure$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope; +Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl;->()V +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl;->(Ljava/lang/String;Landroid/os/Bundle;Lcom/artemchep/keyguard/common/usecase/ShowMessage;Lcom/artemchep/keyguard/common/usecase/GetScreenState;Lcom/artemchep/keyguard/common/usecase/PutScreenState;Lcom/artemchep/keyguard/common/usecase/WindowCoroutineScope;Lcom/artemchep/keyguard/feature/navigation/NavigationController;Lkotlinx/serialization/json/Json;Lkotlinx/coroutines/CoroutineScope;Ljava/lang/String;Landroidx/compose/runtime/State;Ljava/lang/String;Lcom/artemchep/keyguard/platform/LeContext;)V +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl;->access$getJson$p(Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl;)Lkotlinx/serialization/json/Json; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl;->getAppScope()Lkotlinx/coroutines/CoroutineScope; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl;->getBundleKey(Ljava/lang/String;)Ljava/lang/String; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl;->getContext()Lcom/artemchep/keyguard/platform/LeContext; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl;->getScreenName()Ljava/lang/String; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl;->getScreenScope()Lkotlinx/coroutines/CoroutineScope; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl;->interceptBackPress(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function1;)V +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl;->loadDiskHandle(Ljava/lang/String;ZLkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl;->mutableComposeState(Lkotlinx/coroutines/flow/MutableStateFlow;)Landroidx/compose/runtime/MutableState; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl;->mutablePersistedFlow(Ljava/lang/String;Lcom/artemchep/keyguard/feature/navigation/state/PersistedStorage;Lkotlin/jvm/functions/Function0;)Lkotlinx/coroutines/flow/MutableStateFlow; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl;->mutablePersistedFlow(Ljava/lang/String;Lcom/artemchep/keyguard/feature/navigation/state/PersistedStorage;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;)Lkotlinx/coroutines/flow/MutableStateFlow; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl;->screenExecutor()Lcom/artemchep/keyguard/feature/loading/LoadingTask; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl;->translate(Ldev/icerock/moko/resources/StringResource;)Ljava/lang/String; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl;->translate(Ldev/icerock/moko/resources/StringResource;[Ljava/lang/Object;)Ljava/lang/String; +Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$Entry; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$Entry;->(Lkotlinx/coroutines/flow/MutableStateFlow;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$Entry$ComposeState;)V +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$Entry;->getSink()Lkotlinx/coroutines/flow/MutableStateFlow; +Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$Entry$ComposeState; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$Entry$ComposeState;->()V +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$Entry$ComposeState;->(Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/MutableStateFlow;)V +Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$Entry$ComposeState$collectScope$2; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$Entry$ComposeState$collectScope$2;->(Lkotlinx/coroutines/CoroutineScope;)V +Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$Entry$ComposeState$mutableState$2; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$Entry$ComposeState$mutableState$2;->(Lkotlinx/coroutines/flow/MutableStateFlow;Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$Entry$ComposeState;)V +Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$mutableComposeState$1; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$mutableComposeState$1;->(Landroidx/compose/runtime/MutableState;)V +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$mutableComposeState$1;->invoke()Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$mutableComposeState$2; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$mutableComposeState$2;->(Lkotlinx/coroutines/flow/MutableStateFlow;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$mutableComposeState$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$mutableComposeState$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$mutableComposeState$2;->invoke(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$mutableComposeState$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$mutablePersistedFlow$1; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$mutablePersistedFlow$1;->()V +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$mutablePersistedFlow$1;->()V +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$mutablePersistedFlow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$mutablePersistedFlow$1;->invoke(Lkotlinx/serialization/json/Json;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$mutablePersistedFlow$2; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$mutablePersistedFlow$2;->()V +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$mutablePersistedFlow$2;->()V +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$mutablePersistedFlow$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$mutablePersistedFlow$2;->invoke(Lkotlinx/serialization/json/Json;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$mutablePersistedFlow$lambda$4$lambda$3$$inlined$map$1; +PLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$mutablePersistedFlow$lambda$4$lambda$3$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl;)V +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$mutablePersistedFlow$lambda$4$lambda$3$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$mutablePersistedFlow$lambda$4$lambda$3$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$mutablePersistedFlow$lambda$4$lambda$3$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/jvm/functions/Function2;Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl;)V +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$mutablePersistedFlow$lambda$4$lambda$3$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$mutablePersistedFlow$lambda$4$lambda$3$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$mutablePersistedFlow$lambda$4$lambda$3$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$mutablePersistedFlow$lambda$4$lambda$3$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$screenExecutor$1; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$screenExecutor$1;->(Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeSub; +Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeSub$DefaultImpls; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeSub$DefaultImpls;->loadDiskHandle$default(Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeSub;Ljava/lang/String;ZLkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeSub$DefaultImpls;->mutablePersistedFlow$default(Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeSub;Ljava/lang/String;Lcom/artemchep/keyguard/feature/navigation/state/PersistedStorage;Lkotlin/jvm/functions/Function0;ILjava/lang/Object;)Lkotlinx/coroutines/flow/MutableStateFlow; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeSub$DefaultImpls;->mutablePersistedFlow$default(Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeSub;Ljava/lang/String;Lcom/artemchep/keyguard/feature/navigation/state/PersistedStorage;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;ILjava/lang/Object;)Lkotlinx/coroutines/flow/MutableStateFlow; +Lcom/artemchep/keyguard/feature/navigation/state/TranslatorScope; +Lcom/artemchep/keyguard/feature/search/component/ComposableSingletons$DropdownButtonKt; +HSPLcom/artemchep/keyguard/feature/search/component/ComposableSingletons$DropdownButtonKt;->()V +HSPLcom/artemchep/keyguard/feature/search/component/ComposableSingletons$DropdownButtonKt;->()V +HSPLcom/artemchep/keyguard/feature/search/component/ComposableSingletons$DropdownButtonKt;->getLambda-1$common_noneRelease()Lkotlin/jvm/functions/Function3; +Lcom/artemchep/keyguard/feature/search/component/ComposableSingletons$DropdownButtonKt$lambda-1$1; +HSPLcom/artemchep/keyguard/feature/search/component/ComposableSingletons$DropdownButtonKt$lambda-1$1;->()V +HSPLcom/artemchep/keyguard/feature/search/component/ComposableSingletons$DropdownButtonKt$lambda-1$1;->()V +Lcom/artemchep/keyguard/feature/search/component/DropdownButtonKt; +HSPLcom/artemchep/keyguard/feature/search/component/DropdownButtonKt;->DropdownButton$lambda$1(Landroidx/compose/runtime/MutableState;)Z +HSPLcom/artemchep/keyguard/feature/search/component/DropdownButtonKt;->DropdownButton(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/vector/ImageVector;Ljava/lang/String;Ljava/util/List;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/feature/search/component/DropdownButtonKt;->access$DropdownButton$lambda$1(Landroidx/compose/runtime/MutableState;)Z +Lcom/artemchep/keyguard/feature/search/component/DropdownButtonKt$DropdownButton$1; +HSPLcom/artemchep/keyguard/feature/search/component/DropdownButtonKt$DropdownButton$1;->(Ljava/util/List;Landroidx/compose/runtime/MutableState;)V +HSPLcom/artemchep/keyguard/feature/search/component/DropdownButtonKt$DropdownButton$1;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/search/component/DropdownButtonKt$DropdownButton$1;->invoke()V +Lcom/artemchep/keyguard/feature/search/component/DropdownButtonKt$DropdownButton$2$2; +HSPLcom/artemchep/keyguard/feature/search/component/DropdownButtonKt$DropdownButton$2$2;->(Ljava/util/List;Landroidx/compose/runtime/MutableState;Landroidx/compose/ui/graphics/vector/ImageVector;Lkotlin/jvm/functions/Function0;)V +HSPLcom/artemchep/keyguard/feature/search/component/DropdownButtonKt$DropdownButton$2$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/search/component/DropdownButtonKt$DropdownButton$2$2;->invoke(Lkotlin/Unit;Landroidx/compose/runtime/Composer;I)V +Lcom/artemchep/keyguard/feature/search/component/DropdownButtonKt$DropdownButton$2$2$1$1; +HSPLcom/artemchep/keyguard/feature/search/component/DropdownButtonKt$DropdownButton$2$2$1$1;->(Landroidx/compose/runtime/MutableState;)V +Lcom/artemchep/keyguard/feature/search/component/DropdownButtonKt$DropdownButton$2$2$2; +HSPLcom/artemchep/keyguard/feature/search/component/DropdownButtonKt$DropdownButton$2$2$2;->(Landroidx/compose/ui/graphics/vector/ImageVector;Lkotlin/jvm/functions/Function0;)V +HSPLcom/artemchep/keyguard/feature/search/component/DropdownButtonKt$DropdownButton$2$2$2;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/search/component/DropdownButtonKt$DropdownButton$2$2$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/search/component/DropdownButtonKt$DropdownButton$2$3; +HSPLcom/artemchep/keyguard/feature/search/component/DropdownButtonKt$DropdownButton$2$3;->(Ljava/lang/String;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function3;)V +Lcom/artemchep/keyguard/feature/search/component/DropdownButtonKt$DropdownButton$2$onDismissRequest$1$1; +HSPLcom/artemchep/keyguard/feature/search/component/DropdownButtonKt$DropdownButton$2$onDismissRequest$1$1;->(Landroidx/compose/runtime/MutableState;)V +Lcom/artemchep/keyguard/feature/search/component/DropdownButtonKt$DropdownButton$3; +HSPLcom/artemchep/keyguard/feature/search/component/DropdownButtonKt$DropdownButton$3;->(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/vector/ImageVector;Ljava/lang/String;Ljava/util/List;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function3;II)V +Lcom/artemchep/keyguard/feature/search/filter/FilterButtonKt; +HSPLcom/artemchep/keyguard/feature/search/filter/FilterButtonKt;->FilterButton(Landroidx/compose/ui/Modifier;Ljava/lang/Integer;Ljava/util/List;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;II)V +Lcom/artemchep/keyguard/feature/search/filter/FilterButtonKt$FilterButton$1; +HSPLcom/artemchep/keyguard/feature/search/filter/FilterButtonKt$FilterButton$1;->(Ljava/lang/Integer;Ljava/util/List;)V +Lcom/artemchep/keyguard/feature/search/filter/component/FilterItemKt; +HSPLcom/artemchep/keyguard/feature/search/filter/component/FilterItemKt;->FilterItemLayout$lambda$0(Landroidx/compose/runtime/State;)Lkotlin/jvm/functions/Function0; +HSPLcom/artemchep/keyguard/feature/search/filter/component/FilterItemKt;->FilterItemLayout(Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;ZLandroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/feature/search/filter/component/FilterItemKt;->access$FilterItemLayout$lambda$0(Landroidx/compose/runtime/State;)Lkotlin/jvm/functions/Function0; +Lcom/artemchep/keyguard/feature/search/filter/component/FilterItemKt$FilterItemLayout$1; +HSPLcom/artemchep/keyguard/feature/search/filter/component/FilterItemKt$FilterItemLayout$1;->()V +HSPLcom/artemchep/keyguard/feature/search/filter/component/FilterItemKt$FilterItemLayout$1;->()V +HSPLcom/artemchep/keyguard/feature/search/filter/component/FilterItemKt$FilterItemLayout$1;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V +HSPLcom/artemchep/keyguard/feature/search/filter/component/FilterItemKt$FilterItemLayout$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/search/filter/component/FilterItemKt$FilterItemLayout$2; +HSPLcom/artemchep/keyguard/feature/search/filter/component/FilterItemKt$FilterItemLayout$2;->(ZLandroidx/compose/runtime/State;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;)V +HSPLcom/artemchep/keyguard/feature/search/filter/component/FilterItemKt$FilterItemLayout$2;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/search/filter/component/FilterItemKt$FilterItemLayout$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/search/filter/component/FilterItemKt$FilterItemLayout$2$1; +HSPLcom/artemchep/keyguard/feature/search/filter/component/FilterItemKt$FilterItemLayout$2$1;->(Landroidx/compose/runtime/State;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;)V +HSPLcom/artemchep/keyguard/feature/search/filter/component/FilterItemKt$FilterItemLayout$2$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/search/filter/component/FilterItemKt$FilterItemLayout$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/search/filter/component/FilterItemKt$FilterItemLayout$3; +HSPLcom/artemchep/keyguard/feature/search/filter/component/FilterItemKt$FilterItemLayout$3;->(Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;ZII)V +Lcom/artemchep/keyguard/feature/search/filter/model/FilterItemModel; +Lcom/artemchep/keyguard/feature/search/filter/model/FilterItemModel$Item; +Lcom/artemchep/keyguard/feature/search/filter/model/FilterItemModel$Section; +Lcom/artemchep/keyguard/feature/search/sort/SortButtonKt; +HSPLcom/artemchep/keyguard/feature/search/sort/SortButtonKt;->SortButton(Landroidx/compose/ui/Modifier;Ljava/util/List;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;II)V +Lcom/artemchep/keyguard/feature/search/sort/SortButtonKt$SortButton$1; +HSPLcom/artemchep/keyguard/feature/search/sort/SortButtonKt$SortButton$1;->(Ljava/util/List;)V +Lcom/artemchep/keyguard/feature/search/sort/model/SortItemModel; +Lcom/artemchep/keyguard/feature/search/sort/model/SortItemModel$Item; +Lcom/artemchep/keyguard/feature/search/sort/model/SortItemModel$Section; +Lcom/artemchep/keyguard/feature/send/SendRoute; +HSPLcom/artemchep/keyguard/feature/send/SendRoute;->()V +HSPLcom/artemchep/keyguard/feature/send/SendRoute;->()V +Lcom/artemchep/keyguard/feature/twopane/ComposableSingletons$TwoPaneLayoutKt; +HSPLcom/artemchep/keyguard/feature/twopane/ComposableSingletons$TwoPaneLayoutKt;->()V +HSPLcom/artemchep/keyguard/feature/twopane/ComposableSingletons$TwoPaneLayoutKt;->()V +HSPLcom/artemchep/keyguard/feature/twopane/ComposableSingletons$TwoPaneLayoutKt;->getLambda-1$common_noneRelease()Lkotlin/jvm/functions/Function4; +Lcom/artemchep/keyguard/feature/twopane/ComposableSingletons$TwoPaneLayoutKt$lambda-1$1; +HSPLcom/artemchep/keyguard/feature/twopane/ComposableSingletons$TwoPaneLayoutKt$lambda-1$1;->()V +HSPLcom/artemchep/keyguard/feature/twopane/ComposableSingletons$TwoPaneLayoutKt$lambda-1$1;->()V +HSPLcom/artemchep/keyguard/feature/twopane/ComposableSingletons$TwoPaneLayoutKt$lambda-1$1;->invoke(Landroidx/compose/animation/AnimatedContentScope;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/twopane/ComposableSingletons$TwoPaneLayoutKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt; +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt;->()V +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt;->PaneLayout(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt;->TwoPaneLayout$lambda$5(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetNavAnimation; +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt;->TwoPaneLayout(Lcom/artemchep/keyguard/feature/twopane/TwoPaneScaffoldScope;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt;->TwoPaneScaffold-KLGhzwk(Landroidx/compose/ui/Modifier;FFFFLkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt;->TwoPaneScaffold_KLGhzwk$lambda$0(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetAllowTwoPanelLayoutInPortrait; +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt;->TwoPaneScaffold_KLGhzwk$lambda$2(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetAllowTwoPanelLayoutInLandscape; +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt;->access$TwoPaneLayout$lambda$5(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetNavAnimation; +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt;->access$TwoPaneScaffold_KLGhzwk$lambda$0(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetAllowTwoPanelLayoutInPortrait; +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt;->access$TwoPaneScaffold_KLGhzwk$lambda$2(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetAllowTwoPanelLayoutInLandscape; +Lcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt$TwoPaneLayout$$inlined$rememberInstance$1; +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt$TwoPaneLayout$$inlined$rememberInstance$1;->()V +Lcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt$TwoPaneLayout$1$2; +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt$TwoPaneLayout$1$2;->(Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Lcom/artemchep/keyguard/feature/twopane/TwoPaneScaffoldScope;Lkotlin/Lazy;)V +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt$TwoPaneLayout$1$2;->access$invoke$lambda$1(Landroidx/compose/runtime/State;)F +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt$TwoPaneLayout$1$2;->invoke$lambda$1(Landroidx/compose/runtime/State;)F +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt$TwoPaneLayout$1$2;->invoke(Landroidx/compose/foundation/layout/BoxScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt$TwoPaneLayout$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt$TwoPaneLayout$1$2$1; +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt$TwoPaneLayout$1$2$1;->(Lkotlin/Lazy;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/State;)V +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt$TwoPaneLayout$1$2$1;->invoke(Landroidx/compose/animation/AnimatedContentTransitionScope;)Landroidx/compose/animation/ContentTransform; +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt$TwoPaneLayout$1$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt$TwoPaneLayout$2; +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt$TwoPaneLayout$2;->(Lcom/artemchep/keyguard/feature/twopane/TwoPaneScaffoldScope;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;II)V +Lcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt$TwoPaneScaffold$2; +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt$TwoPaneScaffold$2;->(FFFFLandroidx/compose/runtime/State;Landroidx/compose/runtime/State;Lkotlin/jvm/functions/Function3;)V +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt$TwoPaneScaffold$2;->invoke(Landroidx/compose/foundation/layout/BoxWithConstraintsScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt$TwoPaneScaffold$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt$TwoPaneScaffold$3; +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt$TwoPaneScaffold$3;->(Landroidx/compose/ui/Modifier;FFFFLkotlin/jvm/functions/Function3;II)V +Lcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt$TwoPaneScaffold-KLGhzwk$$inlined$rememberInstance$1; +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt$TwoPaneScaffold-KLGhzwk$$inlined$rememberInstance$1;->()V +Lcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt$TwoPaneScaffold-KLGhzwk$$inlined$rememberInstance$2; +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt$TwoPaneScaffold-KLGhzwk$$inlined$rememberInstance$2;->()V +Lcom/artemchep/keyguard/feature/twopane/TwoPaneNavigationKt; +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneNavigationKt;->TwoPaneNavigationContent(Lkotlinx/collections/immutable/PersistentList;Landroidx/compose/runtime/Composer;I)V +Lcom/artemchep/keyguard/feature/twopane/TwoPaneNavigationKt$TwoPaneNavigationContent$1; +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneNavigationKt$TwoPaneNavigationContent$1;->(Lkotlinx/collections/immutable/PersistentList;)V +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneNavigationKt$TwoPaneNavigationContent$1;->invoke(Lcom/artemchep/keyguard/feature/twopane/TwoPaneScaffoldScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneNavigationKt$TwoPaneNavigationContent$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/twopane/TwoPaneNavigationKt$TwoPaneNavigationContent$1$2; +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneNavigationKt$TwoPaneNavigationContent$1$2;->(Lcom/artemchep/keyguard/feature/navigation/NavigationEntry;Lcom/artemchep/keyguard/feature/navigation/NavigationEntry;Lkotlinx/collections/immutable/PersistentList;)V +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneNavigationKt$TwoPaneNavigationContent$1$2;->invoke(Landroidx/compose/foundation/layout/BoxScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneNavigationKt$TwoPaneNavigationContent$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/twopane/TwoPaneScaffoldScope; +Lcom/artemchep/keyguard/feature/twopane/TwoPaneScaffoldScopeImpl; +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneScaffoldScopeImpl;->(Landroidx/compose/foundation/layout/BoxScope;ZF)V +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneScaffoldScopeImpl;->(Landroidx/compose/foundation/layout/BoxScope;ZFLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneScaffoldScopeImpl;->equals(Ljava/lang/Object;)Z +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneScaffoldScopeImpl;->getTabletUi()Z +Lcom/artemchep/keyguard/feature/twopane/TwoPaneScreenKt; +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneScreenKt;->TwoPaneScreen(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function5;Landroidx/compose/runtime/Composer;II)V +Lcom/artemchep/keyguard/feature/twopane/TwoPaneScreenKt$TwoPaneScreen$1; +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneScreenKt$TwoPaneScreen$1;->(Lkotlin/jvm/functions/Function5;Lkotlin/jvm/functions/Function4;)V +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneScreenKt$TwoPaneScreen$1;->invoke(Lcom/artemchep/keyguard/feature/twopane/TwoPaneScaffoldScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneScreenKt$TwoPaneScreen$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/watchtower/WatchtowerRoute; +HSPLcom/artemchep/keyguard/feature/watchtower/WatchtowerRoute;->()V +HSPLcom/artemchep/keyguard/feature/watchtower/WatchtowerRoute;->()V +Lcom/artemchep/keyguard/platform/LeAnimationKt; +HSPLcom/artemchep/keyguard/platform/LeAnimationKt;->getLocalAnimationFactor(Landroidx/compose/runtime/Composer;I)F +Lcom/artemchep/keyguard/platform/LeBundleKt; +HSPLcom/artemchep/keyguard/platform/LeBundleKt;->contains(Landroid/os/Bundle;Ljava/lang/String;)Z +HSPLcom/artemchep/keyguard/platform/LeBundleKt;->leBundleOf([Lkotlin/Pair;)Landroid/os/Bundle; +Lcom/artemchep/keyguard/platform/LeContext; +HSPLcom/artemchep/keyguard/platform/LeContext;->()V +HSPLcom/artemchep/keyguard/platform/LeContext;->(Landroid/content/Context;)V +HSPLcom/artemchep/keyguard/platform/LeContext;->getContext()Landroid/content/Context; +Lcom/artemchep/keyguard/platform/LeContextKt; +HSPLcom/artemchep/keyguard/platform/LeContextKt;->getLocalLeContext(Landroidx/compose/runtime/Composer;I)Lcom/artemchep/keyguard/platform/LeContext; +Lcom/artemchep/keyguard/platform/LeDebugKt; +HSPLcom/artemchep/keyguard/platform/LeDebugKt;->()V +HSPLcom/artemchep/keyguard/platform/LeDebugKt;->isStandalone()Z +Lcom/artemchep/keyguard/platform/LeImeKt; +HSPLcom/artemchep/keyguard/platform/LeImeKt;->getLeDisplayCutout(Landroidx/compose/foundation/layout/WindowInsets$Companion;Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/layout/WindowInsets; +HSPLcom/artemchep/keyguard/platform/LeImeKt;->getLeIme(Landroidx/compose/foundation/layout/WindowInsets$Companion;Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/layout/WindowInsets; +HSPLcom/artemchep/keyguard/platform/LeImeKt;->getLeNavigationBars(Landroidx/compose/foundation/layout/WindowInsets$Companion;Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/layout/WindowInsets; +HSPLcom/artemchep/keyguard/platform/LeImeKt;->getLeStatusBars(Landroidx/compose/foundation/layout/WindowInsets$Companion;Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/layout/WindowInsets; +HSPLcom/artemchep/keyguard/platform/LeImeKt;->getLeSystemBars(Landroidx/compose/foundation/layout/WindowInsets$Companion;Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/layout/WindowInsets; +Lcom/artemchep/keyguard/platform/LePlatformKt; +HSPLcom/artemchep/keyguard/platform/LePlatformKt;->()V +HSPLcom/artemchep/keyguard/platform/LePlatformKt;->getCurrentPlatform()Lcom/artemchep/keyguard/platform/Platform; +HSPLcom/artemchep/keyguard/platform/LePlatformKt;->getPlatform()Lcom/artemchep/keyguard/platform/Platform$Mobile$Android; +Lcom/artemchep/keyguard/platform/LePlatformKt$platform$2; +HSPLcom/artemchep/keyguard/platform/LePlatformKt$platform$2;->()V +HSPLcom/artemchep/keyguard/platform/LePlatformKt$platform$2;->()V +HSPLcom/artemchep/keyguard/platform/LePlatformKt$platform$2;->invoke()Lcom/artemchep/keyguard/platform/Platform$Mobile$Android; +HSPLcom/artemchep/keyguard/platform/LePlatformKt$platform$2;->invoke()Ljava/lang/Object; +Lcom/artemchep/keyguard/platform/Platform; +Lcom/artemchep/keyguard/platform/Platform$Desktop; +Lcom/artemchep/keyguard/platform/Platform$Mobile; +Lcom/artemchep/keyguard/platform/Platform$Mobile$Android; +HSPLcom/artemchep/keyguard/platform/Platform$Mobile$Android;->()V +HSPLcom/artemchep/keyguard/platform/Platform$Mobile$Android;->(Z)V +Lcom/artemchep/keyguard/platform/RecordExceptionKt; +HSPLcom/artemchep/keyguard/platform/RecordExceptionKt;->crashlyticsIsEnabled()Ljava/lang/Boolean; +HSPLcom/artemchep/keyguard/platform/RecordExceptionKt;->crashlyticsSetEnabled(Ljava/lang/Boolean;)V +HSPLcom/artemchep/keyguard/platform/RecordExceptionKt;->recordLog(Ljava/lang/String;)V +Lcom/artemchep/keyguard/platform/lifecycle/LeLifecycleExtKt; +HSPLcom/artemchep/keyguard/platform/lifecycle/LeLifecycleExtKt;->flowWithLifecycle$default(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/platform/lifecycle/LeLifecycleState;ILjava/lang/Object;)Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/platform/lifecycle/LeLifecycleExtKt;->flowWithLifecycle(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/platform/lifecycle/LeLifecycleState;)Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/platform/lifecycle/LeLifecycleExtKt;->onState(Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/platform/lifecycle/LeLifecycleState;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/platform/lifecycle/LeLifecycleExtKt$flowWithLifecycle$$inlined$flatMapLatest$1; +HSPLcom/artemchep/keyguard/platform/lifecycle/LeLifecycleExtKt$flowWithLifecycle$$inlined$flatMapLatest$1;->(Lkotlin/coroutines/Continuation;Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/platform/lifecycle/LeLifecycleExtKt$flowWithLifecycle$$inlined$flatMapLatest$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/platform/lifecycle/LeLifecycleExtKt$flowWithLifecycle$$inlined$flatMapLatest$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/platform/lifecycle/LeLifecycleExtKt$flowWithLifecycle$$inlined$flatMapLatest$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/platform/lifecycle/LeLifecycleExtKt$flowWithLifecycle$$inlined$map$1; +HSPLcom/artemchep/keyguard/platform/lifecycle/LeLifecycleExtKt$flowWithLifecycle$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/platform/lifecycle/LeLifecycleState;)V +HSPLcom/artemchep/keyguard/platform/lifecycle/LeLifecycleExtKt$flowWithLifecycle$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/platform/lifecycle/LeLifecycleExtKt$flowWithLifecycle$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/platform/lifecycle/LeLifecycleExtKt$flowWithLifecycle$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lcom/artemchep/keyguard/platform/lifecycle/LeLifecycleState;)V +HSPLcom/artemchep/keyguard/platform/lifecycle/LeLifecycleExtKt$flowWithLifecycle$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/platform/lifecycle/LeLifecycleExtKt$flowWithLifecycle$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/platform/lifecycle/LeLifecycleExtKt$flowWithLifecycle$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/platform/lifecycle/LeLifecycleExtKt$flowWithLifecycle$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/platform/lifecycle/LeLifecycleExtKt$onState$1$flow$1; +HSPLcom/artemchep/keyguard/platform/lifecycle/LeLifecycleExtKt$onState$1$flow$1;->(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/platform/lifecycle/LeLifecycleExtKt$onState$1$flow$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/platform/lifecycle/LeLifecycleExtKt$onState$1$flow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/platform/lifecycle/LeLifecycleExtKt$onState$1$flow$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/platform/lifecycle/LeLifecycleExtKt$onState$1$flow$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/platform/lifecycle/LeLifecycleState; +HSPLcom/artemchep/keyguard/platform/lifecycle/LeLifecycleState;->$values()[Lcom/artemchep/keyguard/platform/lifecycle/LeLifecycleState; +HSPLcom/artemchep/keyguard/platform/lifecycle/LeLifecycleState;->()V +HSPLcom/artemchep/keyguard/platform/lifecycle/LeLifecycleState;->(Ljava/lang/String;I)V +Lcom/artemchep/keyguard/platform/lifecycle/LocalLifecycleStateFlowKt; +HSPLcom/artemchep/keyguard/platform/lifecycle/LocalLifecycleStateFlowKt;->getLocalLifecycleStateFlow(Landroidx/compose/runtime/Composer;I)Lkotlinx/coroutines/flow/StateFlow; +HSPLcom/artemchep/keyguard/platform/lifecycle/LocalLifecycleStateFlowKt;->toCommon(Landroidx/lifecycle/Lifecycle$State;)Lcom/artemchep/keyguard/platform/lifecycle/LeLifecycleState; +Lcom/artemchep/keyguard/platform/lifecycle/LocalLifecycleStateFlowKt$LocalLifecycleStateFlow$1; +HSPLcom/artemchep/keyguard/platform/lifecycle/LocalLifecycleStateFlowKt$LocalLifecycleStateFlow$1;->$r8$lambda$YdcAxOC5sem8u3fiyg-GfdyOe8c(Lkotlinx/coroutines/flow/MutableStateFlow;Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V +HSPLcom/artemchep/keyguard/platform/lifecycle/LocalLifecycleStateFlowKt$LocalLifecycleStateFlow$1;->(Landroidx/lifecycle/LifecycleOwner;Lkotlinx/coroutines/flow/MutableStateFlow;)V +HSPLcom/artemchep/keyguard/platform/lifecycle/LocalLifecycleStateFlowKt$LocalLifecycleStateFlow$1;->invoke$lambda$0(Lkotlinx/coroutines/flow/MutableStateFlow;Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V +HSPLcom/artemchep/keyguard/platform/lifecycle/LocalLifecycleStateFlowKt$LocalLifecycleStateFlow$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult; +HSPLcom/artemchep/keyguard/platform/lifecycle/LocalLifecycleStateFlowKt$LocalLifecycleStateFlow$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/platform/lifecycle/LocalLifecycleStateFlowKt$LocalLifecycleStateFlow$1$$ExternalSyntheticLambda0; +HSPLcom/artemchep/keyguard/platform/lifecycle/LocalLifecycleStateFlowKt$LocalLifecycleStateFlow$1$$ExternalSyntheticLambda0;->(Lkotlinx/coroutines/flow/MutableStateFlow;)V +HSPLcom/artemchep/keyguard/platform/lifecycle/LocalLifecycleStateFlowKt$LocalLifecycleStateFlow$1$$ExternalSyntheticLambda0;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V +Lcom/artemchep/keyguard/platform/lifecycle/LocalLifecycleStateFlowKt$LocalLifecycleStateFlow$1$invoke$$inlined$onDispose$1; +HSPLcom/artemchep/keyguard/platform/lifecycle/LocalLifecycleStateFlowKt$LocalLifecycleStateFlow$1$invoke$$inlined$onDispose$1;->(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/LifecycleEventObserver;)V +Lcom/artemchep/keyguard/platform/lifecycle/LocalLifecycleStateFlowKt$WhenMappings; +HSPLcom/artemchep/keyguard/platform/lifecycle/LocalLifecycleStateFlowKt$WhenMappings;->()V +Lcom/artemchep/keyguard/platform/util/IsReleaseKt; +HSPLcom/artemchep/keyguard/platform/util/IsReleaseKt;->()V +HSPLcom/artemchep/keyguard/platform/util/IsReleaseKt;->isRelease()Z +Lcom/artemchep/keyguard/provider/bitwarden/ServerEnv; +Lcom/artemchep/keyguard/provider/bitwarden/ServerTwoFactorToken; +Lcom/artemchep/keyguard/provider/bitwarden/entity/HibpBreachGroup; +HSPLcom/artemchep/keyguard/provider/bitwarden/entity/HibpBreachGroup;->()V +Lcom/artemchep/keyguard/provider/bitwarden/entity/HibpBreachGroup$$serializer; +HSPLcom/artemchep/keyguard/provider/bitwarden/entity/HibpBreachGroup$$serializer;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/entity/HibpBreachGroup$$serializer;->()V +Lcom/artemchep/keyguard/provider/bitwarden/entity/HibpBreachGroup$Companion; +HSPLcom/artemchep/keyguard/provider/bitwarden/entity/HibpBreachGroup$Companion;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/entity/HibpBreachGroup$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/entity/HibpBreachGroup$Companion;->serializer()Lkotlinx/serialization/KSerializer; +Lcom/artemchep/keyguard/provider/bitwarden/entity/HibpBreachResponse$$serializer; +HSPLcom/artemchep/keyguard/provider/bitwarden/entity/HibpBreachResponse$$serializer;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/entity/HibpBreachResponse$$serializer;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/entity/HibpBreachResponse$$serializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +Lcom/artemchep/keyguard/provider/bitwarden/entity/HibpBreachResponse$$serializer$annotationImpl$kotlinx_serialization_json_JsonNames$0; +HSPLcom/artemchep/keyguard/provider/bitwarden/entity/HibpBreachResponse$$serializer$annotationImpl$kotlinx_serialization_json_JsonNames$0;->([Ljava/lang/String;)V +Lcom/artemchep/keyguard/provider/bitwarden/repository/BaseRepository; +Lcom/artemchep/keyguard/provider/bitwarden/repository/BaseRepository$DefaultImpls; +HSPLcom/artemchep/keyguard/provider/bitwarden/repository/BaseRepository$DefaultImpls;->getSnapshot(Lcom/artemchep/keyguard/provider/bitwarden/repository/BaseRepository;)Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenCipherRepository; +Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenCollectionRepository; +Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenFolderRepository; +Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenMetaRepository; +Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenOrganizationRepository; +Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenProfileRepository; +Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenSendRepository; +Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenTokenRepository; +Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenTokenRepository$DefaultImpls; +HSPLcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenTokenRepository$DefaultImpls;->getSnapshot(Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenTokenRepository;)Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/AddFolderImpl; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/AddFolderImpl;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/AddFolderImpl;->(Lcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyDatabase;Lcom/artemchep/keyguard/common/service/crypto/CryptoGenerator;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/AddFolderImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/AddFolderImpl$Companion; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/AddFolderImpl$Companion;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/AddFolderImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/AddFolderImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/AddFolderImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/AddFolderImpl$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/AddFolderImpl$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/ChangeCipherNameByIdImpl; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/ChangeCipherNameByIdImpl;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/ChangeCipherNameByIdImpl;->(Lcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyCipherById;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/ChangeCipherNameByIdImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/ChangeCipherNameByIdImpl$Companion; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/ChangeCipherNameByIdImpl$Companion;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/ChangeCipherNameByIdImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/ChangeCipherNameByIdImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/ChangeCipherNameByIdImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/ChangeCipherPasswordByIdImpl; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/ChangeCipherPasswordByIdImpl;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/ChangeCipherPasswordByIdImpl;->(Lcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyCipherById;Lcom/artemchep/keyguard/common/usecase/GetPasswordStrength;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/ChangeCipherPasswordByIdImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/ChangeCipherPasswordByIdImpl$Companion; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/ChangeCipherPasswordByIdImpl$Companion;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/ChangeCipherPasswordByIdImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/ChangeCipherPasswordByIdImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/ChangeCipherPasswordByIdImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/ChangeCipherPasswordByIdImpl$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/ChangeCipherPasswordByIdImpl$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$Node; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$Node$Group; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$Node$Group;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$Node$Group;->(Larrow/optics/POptional;Ljava/util/List;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$Node$Leaf; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$Node$Leaf;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$Node$Leaf;->(Larrow/optics/POptional;Lcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$PickStrategy;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$Node$Leaf;->(Larrow/optics/POptional;Lcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$PickStrategy;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$PickAttachmentStrategy; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$PickAttachmentStrategy;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$PickCardStrategy; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$PickCardStrategy;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$PickFieldStrategy; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$PickFieldStrategy;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$PickModeStrategy; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$PickModeStrategy;->(Lkotlin/jvm/functions/Function0;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$PickModeStrategy;->(Lkotlin/jvm/functions/Function0;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$PickStrategy; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$PickUriStrategy; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$PickUriStrategy;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$mergeRules$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$mergeRules$1;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$mergeRules$1;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$mergeRules$2; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$mergeRules$2;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$mergeRules$2;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$mergeRules$3; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$mergeRules$3;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$mergeRules$3;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$mergeRules$4; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$mergeRules$4;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$mergeRules$4;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$mergeRules$5; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$mergeRules$5;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$mergeRules$5;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/CipherUrlCheckImpl; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CipherUrlCheckImpl;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CipherUrlCheckImpl;->(Lcom/artemchep/keyguard/common/service/tld/TldService;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CipherUrlCheckImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/CipherUrlCheckImpl$Companion; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CipherUrlCheckImpl$Companion;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CipherUrlCheckImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/CipherUrlCheckImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CipherUrlCheckImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/CopyCipherByIdImpl; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CopyCipherByIdImpl;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CopyCipherByIdImpl;->(Lcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyCipherById;Lcom/artemchep/keyguard/common/usecase/AddFolder;Lcom/artemchep/keyguard/common/service/crypto/CryptoGenerator;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CopyCipherByIdImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/CopyCipherByIdImpl$Companion; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CopyCipherByIdImpl$Companion;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CopyCipherByIdImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/CopyCipherByIdImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CopyCipherByIdImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/CopyCipherByIdImpl$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CopyCipherByIdImpl$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/CopyCipherByIdImpl$special$$inlined$instance$default$3; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CopyCipherByIdImpl$special$$inlined$instance$default$3;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/FavouriteCipherByIdImpl; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/FavouriteCipherByIdImpl;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/FavouriteCipherByIdImpl;->(Lcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyCipherById;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/FavouriteCipherByIdImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/FavouriteCipherByIdImpl$Companion; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/FavouriteCipherByIdImpl$Companion;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/FavouriteCipherByIdImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/FavouriteCipherByIdImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/FavouriteCipherByIdImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetAccountsImpl; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetAccountsImpl;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetAccountsImpl;->(Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenTokenRepository;Lkotlin/coroutines/CoroutineContext;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetAccountsImpl;->(Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenTokenRepository;Lkotlin/coroutines/CoroutineContext;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetAccountsImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetAccountsImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetAccountsImpl;->invoke()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetAccountsImpl$Companion; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetAccountsImpl$Companion;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetAccountsImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetAccountsImpl$invoke$$inlined$map$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetAccountsImpl$invoke$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetAccountsImpl$invoke$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetAccountsImpl$invoke$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetAccountsImpl$invoke$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetAccountsImpl$invoke$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetAccountsImpl$invoke$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetAccountsImpl$invoke$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetAccountsImpl$invoke$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetAccountsImpl$invoke$$inlined$map$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetAccountsImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetAccountsImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetCipherOpenedHistoryImpl; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCipherOpenedHistoryImpl;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCipherOpenedHistoryImpl;->(Lcom/artemchep/keyguard/android/downloader/journal/CipherHistoryOpenedRepository;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCipherOpenedHistoryImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetCipherOpenedHistoryImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCipherOpenedHistoryImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl;->(Lcom/artemchep/keyguard/common/service/logging/LogRepository;Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenCipherRepository;Lcom/artemchep/keyguard/common/usecase/GetPasswordStrength;Lcom/artemchep/keyguard/common/usecase/WindowCoroutineScope;Lkotlin/coroutines/CoroutineContext;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl;->(Lcom/artemchep/keyguard/common/service/logging/LogRepository;Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenCipherRepository;Lcom/artemchep/keyguard/common/usecase/GetPasswordStrength;Lcom/artemchep/keyguard/common/usecase/WindowCoroutineScope;Lkotlin/coroutines/CoroutineContext;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl;->invoke()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$Companion; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$Companion;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$special$$inlined$instance$default$3; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$special$$inlined$instance$default$3;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$special$$inlined$instance$default$4; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$special$$inlined$instance$default$4;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$special$$inlined$map$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$special$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$special$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$special$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$special$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$special$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$special$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$special$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$special$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$special$$inlined$withLogTimeOfFirstEvent$default$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$special$$inlined$withLogTimeOfFirstEvent$default$1;->(Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/common/service/logging/LogRepository;Ljava/lang/String;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$special$$inlined$withLogTimeOfFirstEvent$default$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$special$$inlined$withLogTimeOfFirstEvent$default$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$special$$inlined$withLogTimeOfFirstEvent$default$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$special$$inlined$withLogTimeOfFirstEvent$default$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$special$$inlined$withLogTimeOfFirstEvent$default$1$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$special$$inlined$withLogTimeOfFirstEvent$default$1$1;->(Lkotlin/jvm/internal/Ref$BooleanRef;Lkotlinx/datetime/Instant;Lcom/artemchep/keyguard/common/service/logging/LogRepository;Ljava/lang/String;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$special$$inlined$withLogTimeOfFirstEvent$default$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$special$$inlined$withLogTimeOfFirstEvent$default$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$special$$inlined$withLogTimeOfFirstEvent$default$1$1;->invoke(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$special$$inlined$withLogTimeOfFirstEvent$default$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl;->(Lcom/artemchep/keyguard/common/service/logging/LogRepository;Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenCollectionRepository;Lcom/artemchep/keyguard/common/usecase/WindowCoroutineScope;Lkotlin/coroutines/CoroutineContext;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl;->(Lcom/artemchep/keyguard/common/service/logging/LogRepository;Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenCollectionRepository;Lcom/artemchep/keyguard/common/usecase/WindowCoroutineScope;Lkotlin/coroutines/CoroutineContext;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl;->invoke()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl$Companion; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl$Companion;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl$special$$inlined$instance$default$3; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl$special$$inlined$instance$default$3;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl$special$$inlined$map$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl$special$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl$special$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl$special$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl$special$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl$special$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl$special$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl$special$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl$special$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl$special$$inlined$withLogTimeOfFirstEvent$default$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl$special$$inlined$withLogTimeOfFirstEvent$default$1;->(Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/common/service/logging/LogRepository;Ljava/lang/String;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl$special$$inlined$withLogTimeOfFirstEvent$default$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl$special$$inlined$withLogTimeOfFirstEvent$default$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl$special$$inlined$withLogTimeOfFirstEvent$default$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl$special$$inlined$withLogTimeOfFirstEvent$default$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl$special$$inlined$withLogTimeOfFirstEvent$default$1$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl$special$$inlined$withLogTimeOfFirstEvent$default$1$1;->(Lkotlin/jvm/internal/Ref$BooleanRef;Lkotlinx/datetime/Instant;Lcom/artemchep/keyguard/common/service/logging/LogRepository;Ljava/lang/String;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl$special$$inlined$withLogTimeOfFirstEvent$default$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl$special$$inlined$withLogTimeOfFirstEvent$default$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl$special$$inlined$withLogTimeOfFirstEvent$default$1$1;->invoke(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl$special$$inlined$withLogTimeOfFirstEvent$default$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetFolderTreeImpl; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFolderTreeImpl;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFolderTreeImpl;->(Lkotlin/coroutines/CoroutineContext;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFolderTreeImpl;->(Lkotlin/coroutines/CoroutineContext;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFolderTreeImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetFolderTreeImpl$Companion; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFolderTreeImpl$Companion;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFolderTreeImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl;->(Lcom/artemchep/keyguard/common/service/logging/LogRepository;Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenFolderRepository;Lcom/artemchep/keyguard/common/usecase/WindowCoroutineScope;Lkotlin/coroutines/CoroutineContext;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl;->(Lcom/artemchep/keyguard/common/service/logging/LogRepository;Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenFolderRepository;Lcom/artemchep/keyguard/common/usecase/WindowCoroutineScope;Lkotlin/coroutines/CoroutineContext;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl;->invoke()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl$Companion; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl$Companion;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl$special$$inlined$instance$default$3; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl$special$$inlined$instance$default$3;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl$special$$inlined$map$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl$special$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl$special$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl$special$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl$special$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl$special$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl$special$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl$special$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl$special$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl$special$$inlined$withLogTimeOfFirstEvent$default$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl$special$$inlined$withLogTimeOfFirstEvent$default$1;->(Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/common/service/logging/LogRepository;Ljava/lang/String;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl$special$$inlined$withLogTimeOfFirstEvent$default$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl$special$$inlined$withLogTimeOfFirstEvent$default$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl$special$$inlined$withLogTimeOfFirstEvent$default$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl$special$$inlined$withLogTimeOfFirstEvent$default$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl$special$$inlined$withLogTimeOfFirstEvent$default$1$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl$special$$inlined$withLogTimeOfFirstEvent$default$1$1;->(Lkotlin/jvm/internal/Ref$BooleanRef;Lkotlinx/datetime/Instant;Lcom/artemchep/keyguard/common/service/logging/LogRepository;Ljava/lang/String;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl$special$$inlined$withLogTimeOfFirstEvent$default$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl$special$$inlined$withLogTimeOfFirstEvent$default$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl$special$$inlined$withLogTimeOfFirstEvent$default$1$1;->invoke(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl$special$$inlined$withLogTimeOfFirstEvent$default$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetMetasImpl; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetMetasImpl;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetMetasImpl;->(Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenMetaRepository;Lcom/artemchep/keyguard/common/usecase/WindowCoroutineScope;Lkotlin/coroutines/CoroutineContext;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetMetasImpl;->(Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenMetaRepository;Lcom/artemchep/keyguard/common/usecase/WindowCoroutineScope;Lkotlin/coroutines/CoroutineContext;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetMetasImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetMetasImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetMetasImpl;->invoke()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetMetasImpl$Companion; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetMetasImpl$Companion;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetMetasImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetMetasImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetMetasImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetMetasImpl$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetMetasImpl$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetMetasImpl$special$$inlined$map$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetMetasImpl$special$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetMetasImpl$special$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetMetasImpl$special$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetMetasImpl$special$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetMetasImpl$special$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetMetasImpl$special$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetMetasImpl$special$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetMetasImpl$special$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl;->(Lcom/artemchep/keyguard/common/service/logging/LogRepository;Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenOrganizationRepository;Lcom/artemchep/keyguard/common/usecase/WindowCoroutineScope;Lkotlin/coroutines/CoroutineContext;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl;->(Lcom/artemchep/keyguard/common/service/logging/LogRepository;Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenOrganizationRepository;Lcom/artemchep/keyguard/common/usecase/WindowCoroutineScope;Lkotlin/coroutines/CoroutineContext;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl;->invoke()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl$Companion; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl$Companion;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl$special$$inlined$instance$default$3; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl$special$$inlined$instance$default$3;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl$special$$inlined$map$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl$special$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl$special$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl$special$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl$special$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl$special$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl$special$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl$special$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl$special$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl$special$$inlined$withLogTimeOfFirstEvent$default$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl$special$$inlined$withLogTimeOfFirstEvent$default$1;->(Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/common/service/logging/LogRepository;Ljava/lang/String;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl$special$$inlined$withLogTimeOfFirstEvent$default$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl$special$$inlined$withLogTimeOfFirstEvent$default$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl$special$$inlined$withLogTimeOfFirstEvent$default$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl$special$$inlined$withLogTimeOfFirstEvent$default$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl$special$$inlined$withLogTimeOfFirstEvent$default$1$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl$special$$inlined$withLogTimeOfFirstEvent$default$1$1;->(Lkotlin/jvm/internal/Ref$BooleanRef;Lkotlinx/datetime/Instant;Lcom/artemchep/keyguard/common/service/logging/LogRepository;Ljava/lang/String;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl$special$$inlined$withLogTimeOfFirstEvent$default$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl$special$$inlined$withLogTimeOfFirstEvent$default$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl$special$$inlined$withLogTimeOfFirstEvent$default$1$1;->invoke(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl$special$$inlined$withLogTimeOfFirstEvent$default$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetProfilesImpl; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetProfilesImpl;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetProfilesImpl;->(Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenTokenRepository;Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenProfileRepository;Lcom/artemchep/keyguard/common/usecase/WindowCoroutineScope;Lkotlin/coroutines/CoroutineContext;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetProfilesImpl;->(Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenTokenRepository;Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenProfileRepository;Lcom/artemchep/keyguard/common/usecase/WindowCoroutineScope;Lkotlin/coroutines/CoroutineContext;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetProfilesImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetProfilesImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetProfilesImpl;->invoke()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetProfilesImpl$Companion; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetProfilesImpl$Companion;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetProfilesImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetProfilesImpl$sharedFlow$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetProfilesImpl$sharedFlow$1;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetProfilesImpl$sharedFlow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetProfilesImpl$sharedFlow$1;->invoke(Ljava/util/List;Ljava/util/List;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetProfilesImpl$sharedFlow$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetProfilesImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetProfilesImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetProfilesImpl$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetProfilesImpl$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetProfilesImpl$special$$inlined$instance$default$3; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetProfilesImpl$special$$inlined$instance$default$3;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/MoveCipherToFolderByIdImpl; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/MoveCipherToFolderByIdImpl;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/MoveCipherToFolderByIdImpl;->(Lcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyCipherById;Lcom/artemchep/keyguard/common/usecase/AddFolder;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/MoveCipherToFolderByIdImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/MoveCipherToFolderByIdImpl$Companion; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/MoveCipherToFolderByIdImpl$Companion;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/MoveCipherToFolderByIdImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/MoveCipherToFolderByIdImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/MoveCipherToFolderByIdImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/MoveCipherToFolderByIdImpl$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/MoveCipherToFolderByIdImpl$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl;->(Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenTokenRepository;Lcom/artemchep/keyguard/common/service/text/Base64Service;Lcom/artemchep/keyguard/common/service/connectivity/ConnectivityService;Lkotlinx/serialization/json/Json;Lio/ktor/client/HttpClient;Lcom/artemchep/keyguard/core/store/DatabaseManager;Lcom/artemchep/keyguard/common/usecase/QueueSyncById;Lcom/artemchep/keyguard/common/usecase/QueueSyncAll;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl;->access$getQueueSyncAll$p(Lcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl;)Lcom/artemchep/keyguard/common/usecase/QueueSyncAll; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl;->access$getTokenRepository$p(Lcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl;)Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenTokenRepository; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl;->launch(Lkotlinx/coroutines/CoroutineScope;)Lkotlinx/coroutines/Job; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl$launch$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl$launch$1;->(Lcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl$launch$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl$launch$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl$launch$1$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl$launch$1$1;->(Lkotlinx/coroutines/CoroutineScope;Lcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl$launch$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl$launch$1$1;->invoke(Lkotlinx/collections/immutable/PersistentMap;Ljava/util/List;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl$launch$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl$special$$inlined$instance$default$3; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl$special$$inlined$instance$default$3;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl$special$$inlined$instance$default$4; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl$special$$inlined$instance$default$4;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl$special$$inlined$instance$default$5; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl$special$$inlined$instance$default$5;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl$special$$inlined$instance$default$6; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl$special$$inlined$instance$default$6;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl$special$$inlined$instance$default$7; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl$special$$inlined$instance$default$7;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl$special$$inlined$instance$default$8; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl$special$$inlined$instance$default$8;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/RePromptCipherByIdImpl; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/RePromptCipherByIdImpl;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/RePromptCipherByIdImpl;->(Lcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyCipherById;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/RePromptCipherByIdImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/RePromptCipherByIdImpl$Companion; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/RePromptCipherByIdImpl$Companion;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/RePromptCipherByIdImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/RePromptCipherByIdImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/RePromptCipherByIdImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/RemoveCipherByIdImpl; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/RemoveCipherByIdImpl;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/RemoveCipherByIdImpl;->(Lcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyCipherById;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/RemoveCipherByIdImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/RemoveCipherByIdImpl$Companion; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/RemoveCipherByIdImpl$Companion;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/RemoveCipherByIdImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/RemoveCipherByIdImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/RemoveCipherByIdImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/RenameFolderByIdImpl; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/RenameFolderByIdImpl;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/RenameFolderByIdImpl;->(Lcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyFolderById;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/RenameFolderByIdImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/RenameFolderByIdImpl$Companion; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/RenameFolderByIdImpl$Companion;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/RenameFolderByIdImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/RenameFolderByIdImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/RenameFolderByIdImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/RestoreCipherByIdImpl; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/RestoreCipherByIdImpl;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/RestoreCipherByIdImpl;->(Lcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyCipherById;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/RestoreCipherByIdImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/RestoreCipherByIdImpl$Companion; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/RestoreCipherByIdImpl$Companion;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/RestoreCipherByIdImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/RestoreCipherByIdImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/RestoreCipherByIdImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/SyncAllImpl; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/SyncAllImpl;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/SyncAllImpl;->(Lcom/artemchep/keyguard/common/service/logging/LogRepository;Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenTokenRepository;Lcom/artemchep/keyguard/provider/bitwarden/usecase/internal/SyncByToken;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/SyncAllImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/SyncAllImpl;->access$getLogRepository$p(Lcom/artemchep/keyguard/provider/bitwarden/usecase/SyncAllImpl;)Lcom/artemchep/keyguard/common/service/logging/LogRepository; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/SyncAllImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/SyncAllImpl;->invoke()Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/SyncAllImpl$Companion; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/SyncAllImpl$Companion;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/SyncAllImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/SyncAllImpl$invoke$$inlined$flatMap$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/SyncAllImpl$invoke$$inlined$flatMap$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/provider/bitwarden/usecase/SyncAllImpl;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/SyncAllImpl$invoke$$inlined$flatMap$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/SyncAllImpl$invoke$$inlined$flatMap$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/SyncAllImpl$invoke$$inlined$flatMap$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/SyncAllImpl$invoke$$inlined$flatMap$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/SyncAllImpl$invoke$lambda$3$$inlined$map$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/SyncAllImpl$invoke$lambda$3$$inlined$map$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/SyncAllImpl$invoke$lambda$3$$inlined$map$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/SyncAllImpl$invoke$lambda$3$$inlined$map$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/SyncAllImpl$invoke$lambda$3$$inlined$map$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/SyncAllImpl$invoke$lambda$3$$inlined$map$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/SyncAllImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/SyncAllImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/SyncAllImpl$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/SyncAllImpl$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/SyncAllImpl$special$$inlined$instance$default$3; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/SyncAllImpl$special$$inlined$instance$default$3;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/TrashCipherByIdImpl; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/TrashCipherByIdImpl;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/TrashCipherByIdImpl;->(Lcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyCipherById;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/TrashCipherByIdImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/TrashCipherByIdImpl$Companion; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/TrashCipherByIdImpl$Companion;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/TrashCipherByIdImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/TrashCipherByIdImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/TrashCipherByIdImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/internal/AddAccount; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/internal/RequestEmailTfa; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/internal/SyncByToken; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/internal/SyncByTokenImpl; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/internal/SyncByTokenImpl;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/internal/SyncByTokenImpl;->(Lcom/artemchep/keyguard/common/service/logging/LogRepository;Lcom/artemchep/keyguard/common/service/crypto/CipherEncryptor;Lcom/artemchep/keyguard/common/service/crypto/CryptoGenerator;Lcom/artemchep/keyguard/common/service/text/Base64Service;Lkotlinx/serialization/json/Json;Lio/ktor/client/HttpClient;Lcom/artemchep/keyguard/core/store/DatabaseManager;Lcom/artemchep/keyguard/core/store/DatabaseSyncer;Lcom/artemchep/keyguard/common/usecase/Watchdog;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/internal/SyncByTokenImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/internal/SyncByTokenImpl$Companion; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/internal/SyncByTokenImpl$Companion;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/internal/SyncByTokenImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/internal/SyncByTokenImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/internal/SyncByTokenImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/internal/SyncByTokenImpl$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/internal/SyncByTokenImpl$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/internal/SyncByTokenImpl$special$$inlined$instance$default$3; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/internal/SyncByTokenImpl$special$$inlined$instance$default$3;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/internal/SyncByTokenImpl$special$$inlined$instance$default$4; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/internal/SyncByTokenImpl$special$$inlined$instance$default$4;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/internal/SyncByTokenImpl$special$$inlined$instance$default$5; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/internal/SyncByTokenImpl$special$$inlined$instance$default$5;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/internal/SyncByTokenImpl$special$$inlined$instance$default$6; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/internal/SyncByTokenImpl$special$$inlined$instance$default$6;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/internal/SyncByTokenImpl$special$$inlined$instance$default$7; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/internal/SyncByTokenImpl$special$$inlined$instance$default$7;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/internal/SyncByTokenImpl$special$$inlined$instance$default$8; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/internal/SyncByTokenImpl$special$$inlined$instance$default$8;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/internal/SyncByTokenImpl$special$$inlined$instance$default$9; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/internal/SyncByTokenImpl$special$$inlined$instance$default$9;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyCipherById; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyCipherById;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyCipherById;->(Lcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyDatabase;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyCipherById;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyCipherById$Companion; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyCipherById$Companion;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyCipherById$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyCipherById$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyCipherById$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyDatabase; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyDatabase;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyDatabase;->(Lcom/artemchep/keyguard/core/store/DatabaseManager;Lcom/artemchep/keyguard/common/usecase/GetCanWrite;Lcom/artemchep/keyguard/common/usecase/GetWriteAccess;Lcom/artemchep/keyguard/common/usecase/QueueSyncById;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyDatabase;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyDatabase$Companion; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyDatabase$Companion;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyDatabase$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyDatabase$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyDatabase$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyDatabase$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyDatabase$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyDatabase$special$$inlined$instance$default$3; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyDatabase$special$$inlined$instance$default$3;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyDatabase$special$$inlined$instance$default$4; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyDatabase$special$$inlined$instance$default$4;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyFolderById; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyFolderById;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyFolderById;->(Lcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyDatabase;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyFolderById;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyFolderById$Companion; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyFolderById$Companion;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyFolderById$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyFolderById$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyFolderById$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyProfileById; +Lcom/artemchep/keyguard/res/Res$fonts$RobotoMono; +HSPLcom/artemchep/keyguard/res/Res$fonts$RobotoMono;->()V +HSPLcom/artemchep/keyguard/res/Res$fonts$RobotoMono;->()V +HSPLcom/artemchep/keyguard/res/Res$fonts$RobotoMono;->getRobotoMono()Ldev/icerock/moko/resources/FontResource; +Lcom/artemchep/keyguard/res/Res$strings; +HSPLcom/artemchep/keyguard/res/Res$strings;->()V +HSPLcom/artemchep/keyguard/res/Res$strings;->()V +HSPLcom/artemchep/keyguard/res/Res$strings;->getAccount()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getAccount_main_add_account_title()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getAttachments()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getCipher_type_card()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getCipher_type_identity()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getCipher_type_login()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getCipher_type_note()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getCollection()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getCollection_none()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getCustom()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getDownloads()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getError_must_have_at_least_n_symbols()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getError_must_not_be_blank()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getFilter_header_title()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getFolder()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getFolder_none()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getHome_generator_label()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getHome_send_label()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getHome_settings_label()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getHome_vault_label()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getHome_watchtower_label()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getMisc()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getNav_animation_crossfade()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getNav_animation_disabled()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getNav_animation_dynamic()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getOne_time_password()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getOptions()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getOrganization()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getOrganization_none()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getPasskeys()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getPassword()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getPref_item_erase_data_text()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getPref_item_erase_data_title()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getPull_to_search()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getSetup_button_create_vault()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getSetup_button_send_crash_reports()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getSetup_field_app_password_label()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getSetup_header_text()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getSort_header_title()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getSortby_modification_date_normal_mode()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getSortby_modification_date_reverse_mode()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getSortby_modification_date_title()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getSortby_password_modification_date_normal_mode()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getSortby_password_modification_date_reverse_mode()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getSortby_password_modification_date_title()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getSortby_password_normal_mode()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getSortby_password_reverse_mode()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getSortby_password_strength_normal_mode()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getSortby_password_strength_reverse_mode()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getSortby_password_strength_title()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getSortby_password_title()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getSortby_title_normal_mode()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getSortby_title_reverse_mode()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getSortby_title_title()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getTrash()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getType()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getUnlock_button_unlock()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getUnlock_header_text()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getVault_action_always_show_keyboard_title()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getVault_action_lock_vault_title()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getVault_action_sync_vault_title()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getVault_main_search_placeholder()Ldev/icerock/moko/resources/StringResource; +Lcom/artemchep/keyguard/room/AppDatabase; +Lcom/artemchep/keyguard/ui/Afh; +HSPLcom/artemchep/keyguard/ui/Afh;->(Lkotlinx/collections/immutable/ImmutableList;Lkotlinx/datetime/Instant;)V +HSPLcom/artemchep/keyguard/ui/Afh;->equals(Ljava/lang/Object;)Z +HSPLcom/artemchep/keyguard/ui/Afh;->getOptions()Lkotlinx/collections/immutable/ImmutableList; +Lcom/artemchep/keyguard/ui/AnimatedFabVisibilityKt; +HSPLcom/artemchep/keyguard/ui/AnimatedFabVisibilityKt;->rememberFabExpanded(Landroidx/compose/material3/TopAppBarScrollBehavior;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State; +Lcom/artemchep/keyguard/ui/AnimatedFabVisibilityKt$rememberFabExpanded$1$1; +HSPLcom/artemchep/keyguard/ui/AnimatedFabVisibilityKt$rememberFabExpanded$1$1;->(Landroidx/compose/material3/TopAppBarScrollBehavior;)V +Lcom/artemchep/keyguard/ui/AutofillWindowKt; +HSPLcom/artemchep/keyguard/ui/AutofillWindowKt;->AutofillButton$lambda$1(Landroidx/compose/runtime/MutableState;)Z +HSPLcom/artemchep/keyguard/ui/AutofillWindowKt;->AutofillButton(Ljava/lang/String;ZZLkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V +Lcom/artemchep/keyguard/ui/AutofillWindowKt$AutofillButton$1$1; +HSPLcom/artemchep/keyguard/ui/AutofillWindowKt$AutofillButton$1$1;->(Landroidx/compose/runtime/MutableState;)V +Lcom/artemchep/keyguard/ui/AutofillWindowKt$AutofillButton$2; +HSPLcom/artemchep/keyguard/ui/AutofillWindowKt$AutofillButton$2;->(Ljava/lang/String;ZZLkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)V +Lcom/artemchep/keyguard/ui/AutofillWindowKt$AutofillButton$3; +HSPLcom/artemchep/keyguard/ui/AutofillWindowKt$AutofillButton$3;->(Ljava/lang/String;ZZLkotlin/jvm/functions/Function1;II)V +Lcom/artemchep/keyguard/ui/AutofillWindowKt$AutofillButton$onDismissRequest$1$1; +HSPLcom/artemchep/keyguard/ui/AutofillWindowKt$AutofillButton$onDismissRequest$1$1;->(Landroidx/compose/runtime/MutableState;)V +Lcom/artemchep/keyguard/ui/CollectedEffectKt; +HSPLcom/artemchep/keyguard/ui/CollectedEffectKt;->CollectedEffect(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V +Lcom/artemchep/keyguard/ui/CollectedEffectKt$CollectedEffect$1; +HSPLcom/artemchep/keyguard/ui/CollectedEffectKt$CollectedEffect$1;->(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/ui/CollectedEffectKt$CollectedEffect$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/ui/CollectedEffectKt$CollectedEffect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/CollectedEffectKt$CollectedEffect$1$1; +HSPLcom/artemchep/keyguard/ui/CollectedEffectKt$CollectedEffect$1$1;->(Lkotlin/jvm/functions/Function2;)V +HSPLcom/artemchep/keyguard/ui/CollectedEffectKt$CollectedEffect$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/ComposableKt; +HSPLcom/artemchep/keyguard/ui/ComposableKt;->Compose(Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V +Lcom/artemchep/keyguard/ui/ComposableSingletons$AutofillWindowKt; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$AutofillWindowKt;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$AutofillWindowKt;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$AutofillWindowKt;->getLambda-1$common_noneRelease()Lkotlin/jvm/functions/Function2; +Lcom/artemchep/keyguard/ui/ComposableSingletons$AutofillWindowKt$lambda-1$1; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$AutofillWindowKt$lambda-1$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$AutofillWindowKt$lambda-1$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$AutofillWindowKt$lambda-1$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$AutofillWindowKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/ComposableSingletons$AutofillWindowKt$lambda-2$1; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$AutofillWindowKt$lambda-2$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$AutofillWindowKt$lambda-2$1;->()V +Lcom/artemchep/keyguard/ui/ComposableSingletons$AutofillWindowKt$lambda-3$1; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$AutofillWindowKt$lambda-3$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$AutofillWindowKt$lambda-3$1;->()V +Lcom/artemchep/keyguard/ui/ComposableSingletons$AutofillWindowKt$lambda-4$1; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$AutofillWindowKt$lambda-4$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$AutofillWindowKt$lambda-4$1;->()V +Lcom/artemchep/keyguard/ui/ComposableSingletons$AutofillWindowKt$lambda-5$1; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$AutofillWindowKt$lambda-5$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$AutofillWindowKt$lambda-5$1;->()V +Lcom/artemchep/keyguard/ui/ComposableSingletons$AutofillWindowKt$lambda-6$1; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$AutofillWindowKt$lambda-6$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$AutofillWindowKt$lambda-6$1;->()V +Lcom/artemchep/keyguard/ui/ComposableSingletons$OptionsWindowKt; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$OptionsWindowKt;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$OptionsWindowKt;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$OptionsWindowKt;->getLambda-1$common_noneRelease()Lkotlin/jvm/functions/Function2; +Lcom/artemchep/keyguard/ui/ComposableSingletons$OptionsWindowKt$lambda-1$1; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$OptionsWindowKt$lambda-1$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$OptionsWindowKt$lambda-1$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$OptionsWindowKt$lambda-1$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$OptionsWindowKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt;->getLambda-12$common_noneRelease()Lkotlin/jvm/functions/Function3; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt;->getLambda-13$common_noneRelease()Lkotlin/jvm/functions/Function3; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt;->getLambda-3$common_noneRelease()Lkotlin/jvm/functions/Function2; +Lcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-1$1; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-1$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-1$1;->()V +Lcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-10$1; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-10$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-10$1;->()V +Lcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-11$1; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-11$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-11$1;->()V +Lcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-12$1; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-12$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-12$1;->()V +Lcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-13$1; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-13$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-13$1;->()V +Lcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-2$1; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-2$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-2$1;->()V +Lcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-3$1; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-3$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-3$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-3$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-3$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-4$1; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-4$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-4$1;->()V +Lcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-5$1; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-5$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-5$1;->()V +Lcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-6$1; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-6$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-6$1;->()V +Lcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-7$1; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-7$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-7$1;->()V +Lcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-8$1; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-8$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-8$1;->()V +Lcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-9$1; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-9$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-9$1;->()V +Lcom/artemchep/keyguard/ui/ComposableSingletons$TextItemKt; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$TextItemKt;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$TextItemKt;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$TextItemKt;->getLambda-3$common_noneRelease()Lkotlin/jvm/functions/Function3; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$TextItemKt;->getLambda-4$common_noneRelease()Lkotlin/jvm/functions/Function3; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$TextItemKt;->getLambda-5$common_noneRelease()Lkotlin/jvm/functions/Function2; +Lcom/artemchep/keyguard/ui/ComposableSingletons$TextItemKt$lambda-1$1; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$TextItemKt$lambda-1$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$TextItemKt$lambda-1$1;->()V +Lcom/artemchep/keyguard/ui/ComposableSingletons$TextItemKt$lambda-2$1; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$TextItemKt$lambda-2$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$TextItemKt$lambda-2$1;->()V +Lcom/artemchep/keyguard/ui/ComposableSingletons$TextItemKt$lambda-3$1; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$TextItemKt$lambda-3$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$TextItemKt$lambda-3$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$TextItemKt$lambda-3$1;->invoke(Landroidx/compose/foundation/layout/RowScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$TextItemKt$lambda-3$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/ComposableSingletons$TextItemKt$lambda-4$1; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$TextItemKt$lambda-4$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$TextItemKt$lambda-4$1;->()V +Lcom/artemchep/keyguard/ui/ComposableSingletons$TextItemKt$lambda-5$1; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$TextItemKt$lambda-5$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$TextItemKt$lambda-5$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$TextItemKt$lambda-5$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$TextItemKt$lambda-5$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/ComposableSingletons$TextItemKt$lambda-6$1; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$TextItemKt$lambda-6$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$TextItemKt$lambda-6$1;->()V +Lcom/artemchep/keyguard/ui/ComposableSingletons$TextItemKt$lambda-7$1; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$TextItemKt$lambda-7$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$TextItemKt$lambda-7$1;->()V +Lcom/artemchep/keyguard/ui/ContextItem; +Lcom/artemchep/keyguard/ui/ContextItem$Section; +HSPLcom/artemchep/keyguard/ui/ContextItem$Section;->()V +HSPLcom/artemchep/keyguard/ui/ContextItem$Section;->(Ljava/lang/String;)V +HSPLcom/artemchep/keyguard/ui/ContextItem$Section;->getTitle()Ljava/lang/String; +Lcom/artemchep/keyguard/ui/ContextItemBuilder; +HSPLcom/artemchep/keyguard/ui/ContextItemBuilder;->()V +HSPLcom/artemchep/keyguard/ui/ContextItemBuilder;->([Ljava/util/List;)V +HSPLcom/artemchep/keyguard/ui/ContextItemBuilder;->access$getItems$p(Lcom/artemchep/keyguard/ui/ContextItemBuilder;)Ljava/util/List; +HSPLcom/artemchep/keyguard/ui/ContextItemBuilder;->build()Lkotlinx/collections/immutable/PersistentList; +HSPLcom/artemchep/keyguard/ui/ContextItemBuilder;->plusAssign(Lcom/artemchep/keyguard/ui/ContextItem;)V +HSPLcom/artemchep/keyguard/ui/ContextItemBuilder;->section$default(Lcom/artemchep/keyguard/ui/ContextItemBuilder;Ljava/lang/String;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V +HSPLcom/artemchep/keyguard/ui/ContextItemBuilder;->section(Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V +Lcom/artemchep/keyguard/ui/ContextItemBuilder$build$1; +HSPLcom/artemchep/keyguard/ui/ContextItemBuilder$build$1;->(Lcom/artemchep/keyguard/ui/ContextItemBuilder;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/ui/ContextItemBuilder$build$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/ui/ContextItemBuilder$build$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/DropdownKt; +HSPLcom/artemchep/keyguard/ui/DropdownKt;->()V +HSPLcom/artemchep/keyguard/ui/DropdownKt;->getDropdownMinWidth()F +Lcom/artemchep/keyguard/ui/ExpandedIfNotEmptyKt; +HSPLcom/artemchep/keyguard/ui/ExpandedIfNotEmptyKt;->ExpandedIfNotEmpty(Ljava/lang/Object;Landroidx/compose/ui/Modifier;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/ui/ExpandedIfNotEmptyKt;->ExpandedIfNotEmptyForRow(Ljava/lang/Object;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V +Lcom/artemchep/keyguard/ui/ExpandedIfNotEmptyKt$ExpandedIfNotEmpty$1; +HSPLcom/artemchep/keyguard/ui/ExpandedIfNotEmptyKt$ExpandedIfNotEmpty$1;->()V +HSPLcom/artemchep/keyguard/ui/ExpandedIfNotEmptyKt$ExpandedIfNotEmpty$1;->()V +HSPLcom/artemchep/keyguard/ui/ExpandedIfNotEmptyKt$ExpandedIfNotEmpty$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/ui/ExpandedIfNotEmptyKt$ExpandedIfNotEmpty$1;->invoke-mzRDjE0(J)J +Lcom/artemchep/keyguard/ui/ExpandedIfNotEmptyKt$ExpandedIfNotEmpty$2; +HSPLcom/artemchep/keyguard/ui/ExpandedIfNotEmptyKt$ExpandedIfNotEmpty$2;->()V +HSPLcom/artemchep/keyguard/ui/ExpandedIfNotEmptyKt$ExpandedIfNotEmpty$2;->()V +HSPLcom/artemchep/keyguard/ui/ExpandedIfNotEmptyKt$ExpandedIfNotEmpty$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/ui/ExpandedIfNotEmptyKt$ExpandedIfNotEmpty$2;->invoke-mzRDjE0(J)J +Lcom/artemchep/keyguard/ui/ExpandedIfNotEmptyKt$ExpandedIfNotEmpty$3; +HSPLcom/artemchep/keyguard/ui/ExpandedIfNotEmptyKt$ExpandedIfNotEmpty$3;->(Ljava/lang/Object;Lkotlin/jvm/functions/Function3;I)V +HSPLcom/artemchep/keyguard/ui/ExpandedIfNotEmptyKt$ExpandedIfNotEmpty$3;->invoke$lambda$1(Landroidx/compose/runtime/MutableState;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/ui/ExpandedIfNotEmptyKt$ExpandedIfNotEmpty$3;->invoke$lambda$2(Landroidx/compose/runtime/MutableState;Ljava/lang/Object;)V +HSPLcom/artemchep/keyguard/ui/ExpandedIfNotEmptyKt$ExpandedIfNotEmpty$3;->invoke(Landroidx/compose/animation/AnimatedVisibilityScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/ExpandedIfNotEmptyKt$ExpandedIfNotEmpty$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/ExpandedIfNotEmptyKt$ExpandedIfNotEmptyForRow$1; +HSPLcom/artemchep/keyguard/ui/ExpandedIfNotEmptyKt$ExpandedIfNotEmptyForRow$1;->()V +HSPLcom/artemchep/keyguard/ui/ExpandedIfNotEmptyKt$ExpandedIfNotEmptyForRow$1;->()V +HSPLcom/artemchep/keyguard/ui/ExpandedIfNotEmptyKt$ExpandedIfNotEmptyForRow$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/ui/ExpandedIfNotEmptyKt$ExpandedIfNotEmptyForRow$1;->invoke-mzRDjE0(J)J +Lcom/artemchep/keyguard/ui/ExpandedIfNotEmptyKt$ExpandedIfNotEmptyForRow$2; +HSPLcom/artemchep/keyguard/ui/ExpandedIfNotEmptyKt$ExpandedIfNotEmptyForRow$2;->()V +HSPLcom/artemchep/keyguard/ui/ExpandedIfNotEmptyKt$ExpandedIfNotEmptyForRow$2;->()V +HSPLcom/artemchep/keyguard/ui/ExpandedIfNotEmptyKt$ExpandedIfNotEmptyForRow$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/ui/ExpandedIfNotEmptyKt$ExpandedIfNotEmptyForRow$2;->invoke-mzRDjE0(J)J +Lcom/artemchep/keyguard/ui/FabScope; +Lcom/artemchep/keyguard/ui/FabState; +Lcom/artemchep/keyguard/ui/FlatItemAction; +HSPLcom/artemchep/keyguard/ui/FlatItemAction;->()V +HSPLcom/artemchep/keyguard/ui/FlatItemAction;->(Ljava/lang/String;Landroidx/compose/ui/graphics/vector/ImageVector;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Ljava/lang/String;Ljava/lang/String;Lcom/artemchep/keyguard/ui/FlatItemAction$Type;Lkotlin/jvm/functions/Function0;)V +HSPLcom/artemchep/keyguard/ui/FlatItemAction;->(Ljava/lang/String;Landroidx/compose/ui/graphics/vector/ImageVector;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Ljava/lang/String;Ljava/lang/String;Lcom/artemchep/keyguard/ui/FlatItemAction$Type;Lkotlin/jvm/functions/Function0;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/ui/FlatItemAction$Companion; +HSPLcom/artemchep/keyguard/ui/FlatItemAction$Companion;->()V +HSPLcom/artemchep/keyguard/ui/FlatItemAction$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/ui/FlatItemAction$Type; +Lcom/artemchep/keyguard/ui/InputPhase; +HSPLcom/artemchep/keyguard/ui/InputPhase;->$values()[Lcom/artemchep/keyguard/ui/InputPhase; +HSPLcom/artemchep/keyguard/ui/InputPhase;->()V +HSPLcom/artemchep/keyguard/ui/InputPhase;->(Ljava/lang/String;I)V +HSPLcom/artemchep/keyguard/ui/InputPhase;->values()[Lcom/artemchep/keyguard/ui/InputPhase; +Lcom/artemchep/keyguard/ui/LeMOdelBottomSheetKt; +HSPLcom/artemchep/keyguard/ui/LeMOdelBottomSheetKt;->LeMOdelBottomSheet(ZLkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;I)V +Lcom/artemchep/keyguard/ui/LeMOdelBottomSheetKt$LeMOdelBottomSheet$3; +HSPLcom/artemchep/keyguard/ui/LeMOdelBottomSheetKt$LeMOdelBottomSheet$3;->(ZLkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function3;I)V +Lcom/artemchep/keyguard/ui/MutableFabScope; +HSPLcom/artemchep/keyguard/ui/MutableFabScope;->(Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;)V +HSPLcom/artemchep/keyguard/ui/MutableFabScope;->getState()Landroidx/compose/runtime/State; +Lcom/artemchep/keyguard/ui/MutableOverlayScope; +HSPLcom/artemchep/keyguard/ui/MutableOverlayScope;->(Landroidx/compose/runtime/State;)V +HSPLcom/artemchep/keyguard/ui/MutableOverlayScope;->getContentPadding()Landroidx/compose/runtime/State; +Lcom/artemchep/keyguard/ui/OptionsWindowKt; +HSPLcom/artemchep/keyguard/ui/OptionsWindowKt;->OptionsButton$lambda$4(Landroidx/compose/runtime/MutableState;)Z +HSPLcom/artemchep/keyguard/ui/OptionsWindowKt;->OptionsButton(Ljava/util/List;Landroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/ui/OptionsWindowKt;->OptionsButton(ZLkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V +Lcom/artemchep/keyguard/ui/OptionsWindowKt$OptionsButton$1; +HSPLcom/artemchep/keyguard/ui/OptionsWindowKt$OptionsButton$1;->(Ljava/util/List;)V +Lcom/artemchep/keyguard/ui/OptionsWindowKt$OptionsButton$3$1$1; +HSPLcom/artemchep/keyguard/ui/OptionsWindowKt$OptionsButton$3$1$1;->(Landroidx/compose/runtime/MutableState;)V +Lcom/artemchep/keyguard/ui/OptionsWindowKt$OptionsButton$3$2; +HSPLcom/artemchep/keyguard/ui/OptionsWindowKt$OptionsButton$3$2;->(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function3;)V +Lcom/artemchep/keyguard/ui/OptionsWindowKt$OptionsButton$3$onDismissRequest$1$1; +HSPLcom/artemchep/keyguard/ui/OptionsWindowKt$OptionsButton$3$onDismissRequest$1$1;->(Landroidx/compose/runtime/MutableState;)V +Lcom/artemchep/keyguard/ui/OptionsWindowKt$OptionsButton$4; +HSPLcom/artemchep/keyguard/ui/OptionsWindowKt$OptionsButton$4;->(ZLkotlin/jvm/functions/Function3;II)V +Lcom/artemchep/keyguard/ui/OtherScaffoldKt; +HSPLcom/artemchep/keyguard/ui/OtherScaffoldKt;->OtherScaffold(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V +Lcom/artemchep/keyguard/ui/OverlayScope; +Lcom/artemchep/keyguard/ui/PaddingKt; +HSPLcom/artemchep/keyguard/ui/PaddingKt;->minus(Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/layout/PaddingValues;)Landroidx/compose/foundation/layout/PaddingValues; +HSPLcom/artemchep/keyguard/ui/PaddingKt;->plus(Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/layout/PaddingValues;)Landroidx/compose/foundation/layout/PaddingValues; +Lcom/artemchep/keyguard/ui/PaddingKt$minus$1; +HSPLcom/artemchep/keyguard/ui/PaddingKt$minus$1;->(Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/layout/PaddingValues;)V +Lcom/artemchep/keyguard/ui/PaddingKt$plus$1; +HSPLcom/artemchep/keyguard/ui/PaddingKt$plus$1;->(Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/layout/PaddingValues;)V +HSPLcom/artemchep/keyguard/ui/PaddingKt$plus$1;->calculateBottomPadding-D9Ej5fM()F +HSPLcom/artemchep/keyguard/ui/PaddingKt$plus$1;->calculateLeftPadding-u2uoSUM(Landroidx/compose/ui/unit/LayoutDirection;)F +HSPLcom/artemchep/keyguard/ui/PaddingKt$plus$1;->calculateRightPadding-u2uoSUM(Landroidx/compose/ui/unit/LayoutDirection;)F +HSPLcom/artemchep/keyguard/ui/PaddingKt$plus$1;->calculateTopPadding-D9Ej5fM()F +Lcom/artemchep/keyguard/ui/PasswordFilterItemKt; +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt;->()V +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt;->Avatar-3IgeMak(Landroidx/compose/ui/Modifier;JLkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt;->FlatItem-ws5HyW4(Landroidx/compose/ui/Modifier;FJLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Ljava/util/List;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/layout/PaddingValues;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;ZLandroidx/compose/runtime/Composer;III)V +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt;->FlatItemLayout-uncuNKo(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/layout/PaddingValues;FJLkotlin/jvm/functions/Function3;Ljava/util/List;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;ZLandroidx/compose/runtime/Composer;III)V +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt;->FlatItemLayout_uncuNKo$lambda$11$lambda$7(Landroidx/compose/runtime/State;)F +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt;->FlatItemLayout_uncuNKo$lambda$11$lambda$9(Landroidx/compose/runtime/State;)F +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt;->FlatItemTextContent-uDo3WH8(Landroidx/compose/foundation/layout/ColumnScope;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;JZLandroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt;->getDefaultEmphasisAlpha()F +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt;->getDisabledEmphasisAlpha()F +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt;->getHighEmphasisAlpha()F +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt;->getMediumEmphasisAlpha()F +Lcom/artemchep/keyguard/ui/PasswordFilterItemKt$Avatar$3; +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt$Avatar$3;->(Landroidx/compose/ui/Modifier;JLkotlin/jvm/functions/Function3;II)V +Lcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItem$1; +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItem$1;->(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;)V +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItem$1;->invoke(Landroidx/compose/foundation/layout/ColumnScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItem$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItemLayout$1$1; +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItemLayout$1$1;->(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;ZLandroidx/compose/foundation/layout/PaddingValues;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;)V +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItemLayout$1$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItemLayout$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItemLayout$1$1$2$1; +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItemLayout$1$1$2$1;->(Landroidx/compose/runtime/State;)V +Lcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItemLayout$1$1$3$1; +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItemLayout$1$1$3$1;->(Landroidx/compose/runtime/State;)V +Lcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItemLayout$1$1$4$1$2; +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItemLayout$1$1$4$1$2;->(Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/layout/RowScope;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;)V +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItemLayout$1$1$4$1$2;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItemLayout$1$1$4$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItemLayout$1$1$4$1$2$1; +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItemLayout$1$1$4$1$2$1;->(Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/layout/RowScope;)V +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItemLayout$1$1$4$1$2$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItemLayout$1$1$4$1$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItemLayout$2; +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItemLayout$2;->(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/layout/PaddingValues;FJLkotlin/jvm/functions/Function3;Ljava/util/List;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;ZIII)V +Lcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItemTextContent$1; +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItemTextContent$1;->(Lkotlin/jvm/functions/Function2;)V +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItemTextContent$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItemTextContent$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItemTextContent$2; +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItemTextContent$2;->(Lkotlin/jvm/functions/Function2;)V +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItemTextContent$2;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItemTextContent$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItemTextContent$3; +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItemTextContent$3;->(Landroidx/compose/foundation/layout/ColumnScope;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;JZII)V +Lcom/artemchep/keyguard/ui/RightClickableKt; +HSPLcom/artemchep/keyguard/ui/RightClickableKt;->rightClickable(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function0;)Landroidx/compose/ui/Modifier; +Lcom/artemchep/keyguard/ui/ScaffoldKt; +HSPLcom/artemchep/keyguard/ui/ScaffoldKt;->()V +HSPLcom/artemchep/keyguard/ui/ScaffoldKt;->DefaultFab-DTcfvLk(Lcom/artemchep/keyguard/ui/FabScope;JJLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/ui/ScaffoldKt;->DefaultProgressBar(Lcom/artemchep/keyguard/ui/OverlayScope;Landroidx/compose/ui/Modifier;ZLandroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/ui/ScaffoldKt;->DefaultSelection(Lcom/artemchep/keyguard/ui/Selection;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/ScaffoldKt;->ScaffoldLazyColumn-k0_msSU(Landroidx/compose/ui/Modifier;Landroidx/compose/material3/TopAppBarScrollBehavior;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/State;Lkotlin/jvm/functions/Function3;ILandroidx/compose/material/pullrefresh/PullRefreshState;JJLandroidx/compose/foundation/layout/WindowInsets;Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/foundation/lazy/LazyListState;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;III)V +HSPLcom/artemchep/keyguard/ui/ScaffoldKt;->SmallFab(Lcom/artemchep/keyguard/ui/FabScope;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/ScaffoldKt;->access$calculatePaddingWithFab(Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/runtime/State;)Landroidx/compose/foundation/layout/PaddingValues; +HSPLcom/artemchep/keyguard/ui/ScaffoldKt;->access$getScreenPaddingTop$p()F +HSPLcom/artemchep/keyguard/ui/ScaffoldKt;->calculatePaddingWithFab(Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/runtime/State;)Landroidx/compose/foundation/layout/PaddingValues; +HSPLcom/artemchep/keyguard/ui/ScaffoldKt;->getScaffoldContentWindowInsets(Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/layout/WindowInsets; +HSPLcom/artemchep/keyguard/ui/ScaffoldKt;->getScreenMaxWidth()F +Lcom/artemchep/keyguard/ui/ScaffoldKt$DefaultFab$1; +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$DefaultFab$1;->(JJLcom/artemchep/keyguard/ui/FabScope;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/State;)V +Lcom/artemchep/keyguard/ui/ScaffoldKt$DefaultFab$2; +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$DefaultFab$2;->(Lcom/artemchep/keyguard/ui/FabScope;JJLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;II)V +Lcom/artemchep/keyguard/ui/ScaffoldKt$DefaultProgressBar$1; +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$DefaultProgressBar$1;->()V +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$DefaultProgressBar$1;->()V +Lcom/artemchep/keyguard/ui/ScaffoldKt$DefaultProgressBar$2; +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$DefaultProgressBar$2;->()V +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$DefaultProgressBar$2;->()V +Lcom/artemchep/keyguard/ui/ScaffoldKt$DefaultProgressBar$3; +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$DefaultProgressBar$3;->(Lcom/artemchep/keyguard/ui/OverlayScope;Landroidx/compose/ui/Modifier;ZII)V +Lcom/artemchep/keyguard/ui/ScaffoldKt$DefaultProgressBar$finalPadding$1$1; +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$DefaultProgressBar$finalPadding$1$1;->(Landroidx/compose/runtime/State;)V +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$DefaultProgressBar$finalPadding$1$1;->invoke()Landroidx/compose/foundation/layout/PaddingValues; +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$DefaultProgressBar$finalPadding$1$1;->invoke()Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/ScaffoldKt$ScaffoldLazyColumn$1$1; +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$ScaffoldLazyColumn$1$1;->(Landroidx/compose/foundation/layout/MutableWindowInsets;Landroidx/compose/foundation/layout/WindowInsets;)V +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$ScaffoldLazyColumn$1$1;->invoke(Landroidx/compose/foundation/layout/WindowInsets;)V +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$ScaffoldLazyColumn$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/ScaffoldKt$ScaffoldLazyColumn$2; +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$ScaffoldLazyColumn$2;->(Landroidx/compose/material3/TopAppBarScrollBehavior;Landroidx/compose/runtime/State;Lkotlin/jvm/functions/Function3;)V +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$ScaffoldLazyColumn$2;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$ScaffoldLazyColumn$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/ScaffoldKt$ScaffoldLazyColumn$3; +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$ScaffoldLazyColumn$3;->(Landroidx/compose/runtime/State;Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/foundation/lazy/LazyListState;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/State;Landroidx/compose/foundation/layout/Arrangement$Vertical;Lkotlin/jvm/functions/Function1;)V +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$ScaffoldLazyColumn$3;->invoke(Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$ScaffoldLazyColumn$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/ScaffoldKt$ScaffoldLazyColumn$3$1; +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$ScaffoldLazyColumn$3$1;->(Landroidx/compose/runtime/State;Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/layout/Arrangement$Vertical;Lkotlin/jvm/functions/Function1;)V +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$ScaffoldLazyColumn$3$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$ScaffoldLazyColumn$3$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/ScaffoldKt$ScaffoldLazyColumn$3$1$1$1; +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$ScaffoldLazyColumn$3$1$1$1;->(Landroidx/compose/runtime/State;)V +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$ScaffoldLazyColumn$3$1$1$1;->invoke(Landroidx/compose/ui/graphics/GraphicsLayerScope;)V +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$ScaffoldLazyColumn$3$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/ScaffoldKt$ScaffoldLazyColumn$3$1$2$1; +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$ScaffoldLazyColumn$3$1$2$1;->(Lkotlin/jvm/functions/Function1;)V +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$ScaffoldLazyColumn$3$1$2$1;->invoke(Landroidx/compose/foundation/lazy/LazyListScope;)V +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$ScaffoldLazyColumn$3$1$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/ScaffoldKt$ScaffoldLazyColumn$4; +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$ScaffoldLazyColumn$4;->(Landroidx/compose/ui/Modifier;Landroidx/compose/material3/TopAppBarScrollBehavior;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/State;Lkotlin/jvm/functions/Function3;ILandroidx/compose/material/pullrefresh/PullRefreshState;JJLandroidx/compose/foundation/layout/WindowInsets;Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/foundation/lazy/LazyListState;Lkotlin/jvm/functions/Function1;III)V +Lcom/artemchep/keyguard/ui/ScaffoldKt$ScaffoldLazyColumn$translationYState$1$1; +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$ScaffoldLazyColumn$translationYState$1$1;->(Landroidx/compose/ui/unit/Density;Landroidx/compose/material/pullrefresh/PullRefreshState;)V +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$ScaffoldLazyColumn$translationYState$1$1;->invoke()Ljava/lang/Float; +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$ScaffoldLazyColumn$translationYState$1$1;->invoke()Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/ScaffoldKt$SmallFab$1; +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$SmallFab$1;->(Landroidx/compose/runtime/State;Lkotlin/jvm/functions/Function2;)V +Lcom/artemchep/keyguard/ui/ScaffoldKt$SmallFab$2; +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$SmallFab$2;->(Lcom/artemchep/keyguard/ui/FabScope;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;I)V +Lcom/artemchep/keyguard/ui/Selection; +Lcom/artemchep/keyguard/ui/TextItemKt; +HSPLcom/artemchep/keyguard/ui/TextItemKt;->()V +HSPLcom/artemchep/keyguard/ui/TextItemKt;->ConcealedFlatTextField(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/artemchep/keyguard/feature/auth/common/TextFieldModel2;Landroidx/compose/foundation/text/KeyboardOptions;Landroidx/compose/foundation/text/KeyboardActions;ZILandroidx/compose/foundation/interaction/MutableInteractionSource;ZLkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;III)V +HSPLcom/artemchep/keyguard/ui/TextItemKt;->Decoration-KTwxG1Y(JLandroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/ui/TextItemKt;->FlatTextField$lambda$4(Landroidx/compose/runtime/MutableState;)Z +HSPLcom/artemchep/keyguard/ui/TextItemKt;->FlatTextField$lambda$5(Landroidx/compose/runtime/MutableState;Z)V +HSPLcom/artemchep/keyguard/ui/TextItemKt;->FlatTextField(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/artemchep/keyguard/feature/auth/common/TextFieldModel2;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/input/VisualTransformation;Landroidx/compose/foundation/text/KeyboardOptions;Landroidx/compose/foundation/text/KeyboardActions;ZILandroidx/compose/foundation/interaction/MutableInteractionSource;ZLkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;III)V +HSPLcom/artemchep/keyguard/ui/TextItemKt;->FlatTextFieldSurface$lambda$27(Landroidx/compose/runtime/State;)J +HSPLcom/artemchep/keyguard/ui/TextItemKt;->FlatTextFieldSurface(Landroidx/compose/ui/Modifier;ZZLkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/ui/TextItemKt;->PasswordFlatTextField(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/artemchep/keyguard/feature/auth/common/TextFieldModel2;Landroidx/compose/foundation/text/KeyboardOptions;Landroidx/compose/foundation/text/KeyboardActions;ZLkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;III)V +HSPLcom/artemchep/keyguard/ui/TextItemKt;->PlainTextField(Ljava/lang/String;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Ljava/lang/String;ZZLandroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function2;ZLandroidx/compose/ui/text/input/VisualTransformation;Landroidx/compose/foundation/text/KeyboardOptions;Landroidx/compose/foundation/text/KeyboardActions;ZILandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/Composer;III)V +HSPLcom/artemchep/keyguard/ui/TextItemKt;->PlainTextFieldDecorationBox$lambda$15(Landroidx/compose/runtime/State;)F +HSPLcom/artemchep/keyguard/ui/TextItemKt;->PlainTextFieldDecorationBox(Landroidx/compose/ui/Modifier;Ljava/lang/String;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/text/input/VisualTransformation;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/ui/TextItemKt;->access$Decoration-KTwxG1Y(JLandroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/ui/TextItemKt;->access$FlatTextField$lambda$4(Landroidx/compose/runtime/MutableState;)Z +HSPLcom/artemchep/keyguard/ui/TextItemKt;->access$FlatTextField$lambda$5(Landroidx/compose/runtime/MutableState;Z)V +HSPLcom/artemchep/keyguard/ui/TextItemKt;->access$FlatTextFieldSurface(Landroidx/compose/ui/Modifier;ZZLkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/ui/TextItemKt;->access$PlainTextFieldDecorationBox$lambda$15(Landroidx/compose/runtime/State;)F +HSPLcom/artemchep/keyguard/ui/TextItemKt;->access$PlainTextFieldDecorationBox(Landroidx/compose/ui/Modifier;Ljava/lang/String;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/text/input/VisualTransformation;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/Composer;II)V +Lcom/artemchep/keyguard/ui/TextItemKt$ConcealedFlatTextField$2; +HSPLcom/artemchep/keyguard/ui/TextItemKt$ConcealedFlatTextField$2;->(Lcom/artemchep/keyguard/feature/auth/common/VisibilityState;Lkotlin/jvm/functions/Function3;)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$ConcealedFlatTextField$2;->invoke(Landroidx/compose/foundation/layout/RowScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$ConcealedFlatTextField$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/TextItemKt$ConcealedFlatTextField$3; +HSPLcom/artemchep/keyguard/ui/TextItemKt$ConcealedFlatTextField$3;->(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/artemchep/keyguard/feature/auth/common/TextFieldModel2;Landroidx/compose/foundation/text/KeyboardOptions;Landroidx/compose/foundation/text/KeyboardActions;ZILandroidx/compose/foundation/interaction/MutableInteractionSource;ZLkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;III)V +Lcom/artemchep/keyguard/ui/TextItemKt$Decoration$contentWithColor$1; +HSPLcom/artemchep/keyguard/ui/TextItemKt$Decoration$contentWithColor$1;->(JLkotlin/jvm/functions/Function2;)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$Decoration$contentWithColor$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$Decoration$contentWithColor$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$2$1; +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$2$1;->(Landroidx/compose/runtime/MutableState;)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$2$1;->invoke(Landroidx/compose/ui/focus/FocusState;)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3; +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3;->(Lcom/artemchep/keyguard/feature/auth/common/TextFieldModel2;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Ljava/lang/String;ZLjava/lang/String;Landroidx/compose/ui/Modifier;Lcom/artemchep/keyguard/ui/focus/FocusRequester2;Landroidx/compose/ui/Modifier;Ljava/lang/String;ZLandroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/input/VisualTransformation;Landroidx/compose/foundation/text/KeyboardOptions;Landroidx/compose/foundation/text/KeyboardActions;ZILandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/MutableState;Lkotlin/jvm/functions/Function3;Z)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3;->invoke$lambda$20$lambda$15$lambda$11$lambda$9$lambda$2(Landroidx/compose/runtime/State;)F +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3;->invoke$lambda$20$lambda$15$lambda$11$lambda$9$lambda$3(Landroidx/compose/runtime/State;)J +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3;->invoke$lambda$20$lambda$15$lambda$11$lambda$9$lambda$4(Landroidx/compose/runtime/State;)F +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3;->invoke$lambda$20$lambda$15$lambda$11$lambda$9$lambda$7(Landroidx/compose/runtime/State;)F +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3;->invoke$lambda$20$lambda$18(Landroidx/compose/runtime/State;)Lcom/artemchep/keyguard/ui/Afh; +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$1$1$1; +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$1$1$1;->(Landroidx/compose/runtime/State;)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$1$1$1;->invoke(Landroidx/compose/ui/graphics/GraphicsLayerScope;)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$1$3$1$1$1; +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$1$3$1$1$1;->(Landroidx/compose/runtime/State;)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$1$3$1$1$1;->invoke(Landroidx/compose/ui/graphics/GraphicsLayerScope;)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$1$3$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$1$3$1$3; +Lcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$1$3$1$4$1; +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$1$3$1$4$1;->(Lcom/artemchep/keyguard/feature/auth/common/TextFieldModel2;)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$1$3$1$4$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$1$3$1$4$1;->invoke(Ljava/lang/String;)V +Lcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$1$4$1; +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$1$4$1;->(Landroidx/compose/runtime/State;)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$1$4$1;->invoke(Landroidx/compose/ui/graphics/GraphicsLayerScope;)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$1$4$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$1$7; +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$1$7;->(Lcom/artemchep/keyguard/feature/auth/common/TextFieldModel2;Lcom/artemchep/keyguard/ui/focus/FocusRequester2;)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$1$7;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$1$7;->invoke(Lkotlin/Unit;Landroidx/compose/runtime/Composer;I)V +Lcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$1$7$1$1; +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$1$7$1$1;->(Lcom/artemchep/keyguard/feature/auth/common/TextFieldModel2;Lcom/artemchep/keyguard/ui/focus/FocusRequester2;)V +Lcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$3; +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$3;->(Landroidx/compose/runtime/State;Lcom/artemchep/keyguard/feature/auth/common/TextFieldModel2;)V +Lcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$options$2$1; +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$options$2$1;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$options$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$options$2$1;->invoke(Ljava/lang/String;Lkotlinx/collections/immutable/ImmutableList;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$options$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$options$2$1$filteredOptions$1; +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$options$2$1$filteredOptions$1;->(Ljava/lang/String;)V +Lcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$options$2$optionsFlow$1; +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$options$2$optionsFlow$1;->(Landroidx/compose/runtime/State;)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$options$2$optionsFlow$1;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$options$2$optionsFlow$1;->invoke()Lkotlinx/collections/immutable/ImmutableList; +Lcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$options$2$valueFlow$1; +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$options$2$valueFlow$1;->(Landroidx/compose/runtime/State;)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$options$2$valueFlow$1;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$options$2$valueFlow$1;->invoke()Ljava/lang/String; +Lcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$invoke$lambda$20$lambda$17$$inlined$map$1; +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$invoke$lambda$20$lambda$17$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$invoke$lambda$20$lambda$17$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$invoke$lambda$20$lambda$17$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$invoke$lambda$20$lambda$17$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$invoke$lambda$20$lambda$17$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$invoke$lambda$20$lambda$17$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$invoke$lambda$20$lambda$17$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$invoke$lambda$20$lambda$17$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$4; +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$4;->(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/artemchep/keyguard/feature/auth/common/TextFieldModel2;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/input/VisualTransformation;Landroidx/compose/foundation/text/KeyboardOptions;Landroidx/compose/foundation/text/KeyboardActions;ZILandroidx/compose/foundation/interaction/MutableInteractionSource;ZLkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;III)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$4;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/TextItemKt$FlatTextFieldSurface$1; +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextFieldSurface$1;->(Lkotlin/jvm/functions/Function2;)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextFieldSurface$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextFieldSurface$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/TextItemKt$FlatTextFieldSurface$2; +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextFieldSurface$2;->(Landroidx/compose/ui/Modifier;ZZLkotlin/jvm/functions/Function2;II)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextFieldSurface$2;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextFieldSurface$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/TextItemKt$PlainTextField$2; +HSPLcom/artemchep/keyguard/ui/TextItemKt$PlainTextField$2;->(Landroidx/compose/ui/Modifier;Ljava/lang/String;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/text/input/VisualTransformation;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$PlainTextField$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/ui/TextItemKt$PlainTextField$2;->invoke(Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V +Lcom/artemchep/keyguard/ui/TextItemKt$PlainTextField$3; +HSPLcom/artemchep/keyguard/ui/TextItemKt$PlainTextField$3;->(Ljava/lang/String;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Ljava/lang/String;ZZLandroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function2;ZLandroidx/compose/ui/text/input/VisualTransformation;Landroidx/compose/foundation/text/KeyboardOptions;Landroidx/compose/foundation/text/KeyboardActions;ZILandroidx/compose/foundation/interaction/MutableInteractionSource;III)V +Lcom/artemchep/keyguard/ui/TextItemKt$PlainTextFieldDecorationBox$3; +HSPLcom/artemchep/keyguard/ui/TextItemKt$PlainTextFieldDecorationBox$3;->(Landroidx/compose/ui/Modifier;Ljava/lang/String;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/text/input/VisualTransformation;Landroidx/compose/foundation/interaction/MutableInteractionSource;II)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$PlainTextFieldDecorationBox$3;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$PlainTextFieldDecorationBox$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/TextItemKt$PlainTextFieldDecorationBox$decoratedPlaceholder$1; +PLcom/artemchep/keyguard/ui/TextItemKt$PlainTextFieldDecorationBox$decoratedPlaceholder$1;->(Landroidx/compose/runtime/State;Lkotlin/jvm/functions/Function2;)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$PlainTextFieldDecorationBox$decoratedPlaceholder$1;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$PlainTextFieldDecorationBox$decoratedPlaceholder$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/TextItemKt$PlainTextFieldDecorationBox$placeholderOpacity$2; +HSPLcom/artemchep/keyguard/ui/TextItemKt$PlainTextFieldDecorationBox$placeholderOpacity$2;->()V +HSPLcom/artemchep/keyguard/ui/TextItemKt$PlainTextFieldDecorationBox$placeholderOpacity$2;->()V +HSPLcom/artemchep/keyguard/ui/TextItemKt$PlainTextFieldDecorationBox$placeholderOpacity$2;->invoke(Landroidx/compose/animation/core/Transition$Segment;Landroidx/compose/runtime/Composer;I)Landroidx/compose/animation/core/FiniteAnimationSpec; +HSPLcom/artemchep/keyguard/ui/TextItemKt$PlainTextFieldDecorationBox$placeholderOpacity$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/TextItemKt$WhenMappings; +HSPLcom/artemchep/keyguard/ui/TextItemKt$WhenMappings;->()V +Lcom/artemchep/keyguard/ui/ToastComposableKt; +HSPLcom/artemchep/keyguard/ui/ToastComposableKt;->()V +HSPLcom/artemchep/keyguard/ui/ToastComposableKt;->ToastMessageHost$lambda$1(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/MessageHub; +HSPLcom/artemchep/keyguard/ui/ToastComposableKt;->ToastMessageHost$lambda$2(Landroidx/compose/runtime/State;)Ljava/util/List; +HSPLcom/artemchep/keyguard/ui/ToastComposableKt;->ToastMessageHost(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/ui/ToastComposableKt;->access$ToastMessageHost$lambda$1(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/MessageHub; +Lcom/artemchep/keyguard/ui/ToastComposableKt$ToastMessageHost$$inlined$rememberInstance$1; +HSPLcom/artemchep/keyguard/ui/ToastComposableKt$ToastMessageHost$$inlined$rememberInstance$1;->()V +Lcom/artemchep/keyguard/ui/ToastComposableKt$ToastMessageHost$1; +HSPLcom/artemchep/keyguard/ui/ToastComposableKt$ToastMessageHost$1;->(Ljava/lang/String;Lkotlin/Lazy;Lkotlinx/coroutines/flow/MutableStateFlow;Lkotlinx/coroutines/CoroutineScope;)V +HSPLcom/artemchep/keyguard/ui/ToastComposableKt$ToastMessageHost$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult; +HSPLcom/artemchep/keyguard/ui/ToastComposableKt$ToastMessageHost$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/ToastComposableKt$ToastMessageHost$1$invoke$$inlined$onDispose$1; +HSPLcom/artemchep/keyguard/ui/ToastComposableKt$ToastMessageHost$1$invoke$$inlined$onDispose$1;->(Lkotlin/jvm/functions/Function0;)V +Lcom/artemchep/keyguard/ui/ToastComposableKt$ToastMessageHost$1$unregister$1; +HSPLcom/artemchep/keyguard/ui/ToastComposableKt$ToastMessageHost$1$unregister$1;->(Lkotlinx/coroutines/flow/MutableStateFlow;Lkotlinx/coroutines/CoroutineScope;)V +Lcom/artemchep/keyguard/ui/ToastComposableKt$ToastMessageHost$3; +HSPLcom/artemchep/keyguard/ui/ToastComposableKt$ToastMessageHost$3;->(Landroidx/compose/ui/Modifier;II)V +Lcom/artemchep/keyguard/ui/focus/BringIntoViewKt; +HSPLcom/artemchep/keyguard/ui/focus/BringIntoViewKt;->bringIntoView(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; +Lcom/artemchep/keyguard/ui/focus/BringIntoViewKt$bringIntoView$1; +HSPLcom/artemchep/keyguard/ui/focus/BringIntoViewKt$bringIntoView$1;->()V +HSPLcom/artemchep/keyguard/ui/focus/BringIntoViewKt$bringIntoView$1;->()V +HSPLcom/artemchep/keyguard/ui/focus/BringIntoViewKt$bringIntoView$1;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier; +HSPLcom/artemchep/keyguard/ui/focus/BringIntoViewKt$bringIntoView$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/focus/BringIntoViewKt$bringIntoView$1$1; +HSPLcom/artemchep/keyguard/ui/focus/BringIntoViewKt$bringIntoView$1$1;->(Landroidx/compose/runtime/MutableState;Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/foundation/relocation/BringIntoViewRequester;)V +HSPLcom/artemchep/keyguard/ui/focus/BringIntoViewKt$bringIntoView$1$1;->invoke(Landroidx/compose/ui/focus/FocusState;)V +HSPLcom/artemchep/keyguard/ui/focus/BringIntoViewKt$bringIntoView$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/focus/BringIntoViewKt$bringIntoView$1$1$1; +HSPLcom/artemchep/keyguard/ui/focus/BringIntoViewKt$bringIntoView$1$1$1;->(Landroidx/compose/foundation/relocation/BringIntoViewRequester;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/ui/focus/BringIntoViewKt$bringIntoView$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/ui/focus/BringIntoViewKt$bringIntoView$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/focus/FocusEvent; +HSPLcom/artemchep/keyguard/ui/focus/FocusEvent;->()V +HSPLcom/artemchep/keyguard/ui/focus/FocusEvent;->(Z)V +Lcom/artemchep/keyguard/ui/focus/FocusRequester2; +HSPLcom/artemchep/keyguard/ui/focus/FocusRequester2;->()V +HSPLcom/artemchep/keyguard/ui/focus/FocusRequester2;->()V +HSPLcom/artemchep/keyguard/ui/focus/FocusRequester2;->getOnRequestFocusFlow()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/ui/focus/FocusRequester2;->requestFocus$default(Lcom/artemchep/keyguard/ui/focus/FocusRequester2;ZILjava/lang/Object;)V +HSPLcom/artemchep/keyguard/ui/focus/FocusRequester2;->requestFocus(Z)V +Lcom/artemchep/keyguard/ui/focus/FocusRequesterKt; +HSPLcom/artemchep/keyguard/ui/focus/FocusRequesterKt;->focusRequester2(Landroidx/compose/ui/Modifier;Lcom/artemchep/keyguard/ui/focus/FocusRequester2;)Landroidx/compose/ui/Modifier; +Lcom/artemchep/keyguard/ui/focus/FocusRequesterKt$focusRequester2$1; +HSPLcom/artemchep/keyguard/ui/focus/FocusRequesterKt$focusRequester2$1;->(Lcom/artemchep/keyguard/ui/focus/FocusRequester2;)V +HSPLcom/artemchep/keyguard/ui/focus/FocusRequesterKt$focusRequester2$1;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier; +HSPLcom/artemchep/keyguard/ui/focus/FocusRequesterKt$focusRequester2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/focus/FocusRequesterKt$focusRequester2$1$1$1; +HSPLcom/artemchep/keyguard/ui/focus/FocusRequesterKt$focusRequester2$1$1$1;->(Landroidx/compose/runtime/MutableState;Landroidx/compose/ui/platform/SoftwareKeyboardController;Landroidx/compose/ui/focus/FocusRequester;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/ui/focus/FocusRequesterKt$focusRequester2$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/ui/focus/FocusRequesterKt$focusRequester2$1$1$1;->invoke(Lcom/artemchep/keyguard/ui/focus/FocusEvent;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/ui/focus/FocusRequesterKt$focusRequester2$1$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/ui/focus/FocusRequesterKt$focusRequester2$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/focus/FocusRequesterKt$focusRequester2$1$2$1; +HSPLcom/artemchep/keyguard/ui/focus/FocusRequesterKt$focusRequester2$1$2$1;->(Landroidx/compose/runtime/MutableState;)V +HSPLcom/artemchep/keyguard/ui/focus/FocusRequesterKt$focusRequester2$1$2$1;->invoke(Landroidx/compose/ui/focus/FocusState;)V +HSPLcom/artemchep/keyguard/ui/focus/FocusRequesterKt$focusRequester2$1$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/icons/ChevronIconKt; +HSPLcom/artemchep/keyguard/ui/icons/ChevronIconKt;->ChevronIcon-iJQMabo(Landroidx/compose/ui/Modifier;JLandroidx/compose/runtime/Composer;II)V +Lcom/artemchep/keyguard/ui/icons/ChevronIconKt$ChevronIcon$1; +HSPLcom/artemchep/keyguard/ui/icons/ChevronIconKt$ChevronIcon$1;->(Landroidx/compose/ui/Modifier;JII)V +Lcom/artemchep/keyguard/ui/icons/ComposableSingletons$VisibilityIconKt; +HSPLcom/artemchep/keyguard/ui/icons/ComposableSingletons$VisibilityIconKt;->()V +HSPLcom/artemchep/keyguard/ui/icons/ComposableSingletons$VisibilityIconKt;->()V +HSPLcom/artemchep/keyguard/ui/icons/ComposableSingletons$VisibilityIconKt;->getLambda-1$common_noneRelease()Lkotlin/jvm/functions/Function3; +Lcom/artemchep/keyguard/ui/icons/ComposableSingletons$VisibilityIconKt$lambda-1$1; +HSPLcom/artemchep/keyguard/ui/icons/ComposableSingletons$VisibilityIconKt$lambda-1$1;->()V +HSPLcom/artemchep/keyguard/ui/icons/ComposableSingletons$VisibilityIconKt$lambda-1$1;->()V +HSPLcom/artemchep/keyguard/ui/icons/ComposableSingletons$VisibilityIconKt$lambda-1$1;->invoke(Landroidx/compose/ui/graphics/vector/ImageVector;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/icons/ComposableSingletons$VisibilityIconKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/icons/IconBoxKt; +HSPLcom/artemchep/keyguard/ui/icons/IconBoxKt;->IconBox(Landroidx/compose/ui/graphics/vector/ImageVector;Landroidx/compose/ui/graphics/vector/ImageVector;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V +Lcom/artemchep/keyguard/ui/icons/IconBoxKt$IconBox$1; +HSPLcom/artemchep/keyguard/ui/icons/IconBoxKt$IconBox$1;->()V +HSPLcom/artemchep/keyguard/ui/icons/IconBoxKt$IconBox$1;->()V +Lcom/artemchep/keyguard/ui/icons/IconBoxKt$IconBox$2; +HSPLcom/artemchep/keyguard/ui/icons/IconBoxKt$IconBox$2;->()V +HSPLcom/artemchep/keyguard/ui/icons/IconBoxKt$IconBox$2;->()V +Lcom/artemchep/keyguard/ui/icons/IconBoxKt$icon$1; +HSPLcom/artemchep/keyguard/ui/icons/IconBoxKt$icon$1;->(Landroidx/compose/ui/graphics/vector/ImageVector;Landroidx/compose/ui/graphics/vector/ImageVector;)V +Lcom/artemchep/keyguard/ui/icons/IconsKt; +HSPLcom/artemchep/keyguard/ui/icons/IconsKt;->()V +HSPLcom/artemchep/keyguard/ui/icons/IconsKt;->getKeyguardAttachment(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +HSPLcom/artemchep/keyguard/ui/icons/IconsKt;->getKeyguardNote(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +HSPLcom/artemchep/keyguard/ui/icons/IconsKt;->getKeyguardTwoFa(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +Lcom/artemchep/keyguard/ui/icons/VisibilityIconKt; +HSPLcom/artemchep/keyguard/ui/icons/VisibilityIconKt;->VisibilityIcon(Landroidx/compose/ui/Modifier;ZLandroidx/compose/runtime/Composer;II)V +Lcom/artemchep/keyguard/ui/pulltosearch/PullToSearchKt; +HSPLcom/artemchep/keyguard/ui/pulltosearch/PullToSearchKt;->PullToSearch$lambda$4$lambda$1(Landroidx/compose/runtime/State;)Z +HSPLcom/artemchep/keyguard/ui/pulltosearch/PullToSearchKt;->PullToSearch$lambda$4$lambda$3$lambda$2(Landroidx/compose/runtime/State;)J +HSPLcom/artemchep/keyguard/ui/pulltosearch/PullToSearchKt;->PullToSearch(Landroidx/compose/ui/Modifier;Landroidx/compose/material/pullrefresh/PullRefreshState;Landroidx/compose/runtime/Composer;II)V +Lcom/artemchep/keyguard/ui/pulltosearch/PullToSearchKt$PullToSearch$1$1; +HSPLcom/artemchep/keyguard/ui/pulltosearch/PullToSearchKt$PullToSearch$1$1;->(Landroidx/compose/material/pullrefresh/PullRefreshState;)V +HSPLcom/artemchep/keyguard/ui/pulltosearch/PullToSearchKt$PullToSearch$1$1;->invoke(Landroidx/compose/ui/graphics/GraphicsLayerScope;)V +HSPLcom/artemchep/keyguard/ui/pulltosearch/PullToSearchKt$PullToSearch$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/pulltosearch/PullToSearchKt$PullToSearch$1$willSearch$2$1; +HSPLcom/artemchep/keyguard/ui/pulltosearch/PullToSearchKt$PullToSearch$1$willSearch$2$1;->(Landroidx/compose/material/pullrefresh/PullRefreshState;)V +HSPLcom/artemchep/keyguard/ui/pulltosearch/PullToSearchKt$PullToSearch$1$willSearch$2$1;->invoke()Ljava/lang/Boolean; +HSPLcom/artemchep/keyguard/ui/pulltosearch/PullToSearchKt$PullToSearch$1$willSearch$2$1;->invoke()Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/pulltosearch/PullToSearchKt$PullToSearch$2; +HSPLcom/artemchep/keyguard/ui/pulltosearch/PullToSearchKt$PullToSearch$2;->(Landroidx/compose/ui/Modifier;Landroidx/compose/material/pullrefresh/PullRefreshState;II)V +Lcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt; +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt;->InternalLazyColumnScrollbar-pAIm_bA(Landroidx/compose/foundation/lazy/LazyListState;ZFFFJJLandroidx/compose/ui/graphics/Shape;Lcom/artemchep/keyguard/ui/scrollbar/ScrollbarSelectionMode;Lkotlin/jvm/functions/Function4;Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/runtime/Composer;III)V +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt;->InternalLazyColumnScrollbar_pAIm_bA$fractionHiddenTop(Landroidx/compose/foundation/lazy/LazyListItemInfo;)F +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt;->InternalLazyColumnScrollbar_pAIm_bA$fractionVisibleBottom(Landroidx/compose/foundation/lazy/LazyListItemInfo;I)F +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt;->InternalLazyColumnScrollbar_pAIm_bA$lambda$11(Landroidx/compose/runtime/State;)Landroidx/compose/foundation/lazy/LazyListItemInfo; +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt;->InternalLazyColumnScrollbar_pAIm_bA$lambda$13(Landroidx/compose/runtime/State;)Z +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt;->InternalLazyColumnScrollbar_pAIm_bA$lambda$15(Landroidx/compose/runtime/State;)F +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt;->InternalLazyColumnScrollbar_pAIm_bA$lambda$17(Landroidx/compose/runtime/State;)F +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt;->InternalLazyColumnScrollbar_pAIm_bA$lambda$19(Landroidx/compose/runtime/State;)F +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt;->InternalLazyColumnScrollbar_pAIm_bA$lambda$20(Landroidx/compose/runtime/State;)F +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt;->InternalLazyColumnScrollbar_pAIm_bA$lambda$21(Landroidx/compose/runtime/State;)F +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt;->InternalLazyColumnScrollbar_pAIm_bA$lambda$3(Landroidx/compose/runtime/MutableState;)Z +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt;->InternalLazyColumnScrollbar_pAIm_bA$lambda$9(Landroidx/compose/runtime/State;)Z +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt;->InternalLazyColumnScrollbar_pAIm_bA$offsetCorrection(FLandroidx/compose/runtime/State;Landroidx/compose/runtime/State;F)F +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt;->LazyColumnScrollbar-lnVutNI(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/LazyListState;ZFFFJJLandroidx/compose/ui/graphics/Shape;Lcom/artemchep/keyguard/ui/scrollbar/ScrollbarSelectionMode;ZLkotlin/jvm/functions/Function4;Landroidx/compose/foundation/layout/PaddingValues;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;III)V +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt;->access$InternalLazyColumnScrollbar_pAIm_bA$fractionHiddenTop(Landroidx/compose/foundation/lazy/LazyListItemInfo;)F +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt;->access$InternalLazyColumnScrollbar_pAIm_bA$fractionVisibleBottom(Landroidx/compose/foundation/lazy/LazyListItemInfo;I)F +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt;->access$InternalLazyColumnScrollbar_pAIm_bA$lambda$11(Landroidx/compose/runtime/State;)Landroidx/compose/foundation/lazy/LazyListItemInfo; +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt;->access$InternalLazyColumnScrollbar_pAIm_bA$lambda$13(Landroidx/compose/runtime/State;)Z +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt;->access$InternalLazyColumnScrollbar_pAIm_bA$lambda$15(Landroidx/compose/runtime/State;)F +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt;->access$InternalLazyColumnScrollbar_pAIm_bA$lambda$17(Landroidx/compose/runtime/State;)F +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt;->access$InternalLazyColumnScrollbar_pAIm_bA$lambda$19(Landroidx/compose/runtime/State;)F +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt;->access$InternalLazyColumnScrollbar_pAIm_bA$lambda$21(Landroidx/compose/runtime/State;)F +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt;->access$InternalLazyColumnScrollbar_pAIm_bA$lambda$3(Landroidx/compose/runtime/MutableState;)Z +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt;->access$InternalLazyColumnScrollbar_pAIm_bA$offsetCorrection(FLandroidx/compose/runtime/State;Landroidx/compose/runtime/State;F)F +Lcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$1; +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$1;->(Lkotlin/jvm/functions/Function4;ZLcom/artemchep/keyguard/ui/scrollbar/ScrollbarSelectionMode;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/lazy/LazyListState;Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/runtime/State;FLandroidx/compose/runtime/State;Landroidx/compose/runtime/State;FFLandroidx/compose/ui/graphics/Shape;JJ)V +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$1;->invoke(Landroidx/compose/foundation/layout/BoxWithConstraintsScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$1$3; +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$1$3;->(Landroidx/compose/foundation/layout/BoxWithConstraintsScope;Landroidx/compose/runtime/State;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/lazy/LazyListState;Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/runtime/State;FLandroidx/compose/runtime/State;Landroidx/compose/runtime/State;)V +Lcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$1$4; +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$1$4;->(Landroidx/compose/foundation/layout/BoxWithConstraintsScope;Lcom/artemchep/keyguard/ui/scrollbar/ScrollbarSelectionMode;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/lazy/LazyListState;Lkotlinx/coroutines/CoroutineScope;FLandroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$1$5$1; +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$1$5$1;->(Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$1$7; +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$1$7;->(FFLandroidx/compose/ui/graphics/Shape;JJLandroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/runtime/MutableState;)V +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$1$7;->invoke$lambda$0(Landroidx/compose/runtime/State;)F +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$1$7;->invoke(Landroidx/compose/foundation/layout/BoxWithConstraintsScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$1$7;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$2; +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$2;->(Landroidx/compose/foundation/lazy/LazyListState;ZFFFJJLandroidx/compose/ui/graphics/Shape;Lcom/artemchep/keyguard/ui/scrollbar/ScrollbarSelectionMode;Lkotlin/jvm/functions/Function4;Landroidx/compose/foundation/layout/PaddingValues;III)V +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$2;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$firstVisibleItemIndex$1$1; +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$firstVisibleItemIndex$1$1;->(Landroidx/compose/foundation/lazy/LazyListState;)V +Lcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$isStickyHeaderInAction$2$1; +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$isStickyHeaderInAction$2$1;->(Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/runtime/State;)V +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$isStickyHeaderInAction$2$1;->invoke()Ljava/lang/Boolean; +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$isStickyHeaderInAction$2$1;->invoke()Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$normalizedOffsetPosition$2$1; +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$normalizedOffsetPosition$2$1;->(Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/runtime/State;FLandroidx/compose/runtime/State;Landroidx/compose/runtime/State;)V +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$normalizedOffsetPosition$2$1;->invoke()Ljava/lang/Float; +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$normalizedOffsetPosition$2$1;->invoke()Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$normalizedThumbSize$2$1; +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$normalizedThumbSize$2$1;->(FLandroidx/compose/runtime/State;)V +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$normalizedThumbSize$2$1;->invoke()Ljava/lang/Float; +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$normalizedThumbSize$2$1;->invoke()Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$normalizedThumbSizeReal$2$1; +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$normalizedThumbSizeReal$2$1;->(Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;)V +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$normalizedThumbSizeReal$2$1;->invoke()Ljava/lang/Float; +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$normalizedThumbSizeReal$2$1;->invoke()Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$realFirstVisibleItem$2$1; +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$realFirstVisibleItem$2$1;->(Landroidx/compose/foundation/lazy/LazyListState;)V +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$realFirstVisibleItem$2$1;->invoke()Landroidx/compose/foundation/lazy/LazyListItemInfo; +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$realFirstVisibleItem$2$1;->invoke()Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$reverseLayout$2$1; +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$reverseLayout$2$1;->(Landroidx/compose/foundation/lazy/LazyListState;)V +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$reverseLayout$2$1;->invoke()Ljava/lang/Boolean; +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$reverseLayout$2$1;->invoke()Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$LazyColumnScrollbar$2; +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$LazyColumnScrollbar$2;->(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/LazyListState;ZFFFJJLandroidx/compose/ui/graphics/Shape;Lcom/artemchep/keyguard/ui/scrollbar/ScrollbarSelectionMode;ZLkotlin/jvm/functions/Function4;Landroidx/compose/foundation/layout/PaddingValues;Lkotlin/jvm/functions/Function2;III)V +Lcom/artemchep/keyguard/ui/scrollbar/ScrollbarSelectionMode; +HSPLcom/artemchep/keyguard/ui/scrollbar/ScrollbarSelectionMode;->$values()[Lcom/artemchep/keyguard/ui/scrollbar/ScrollbarSelectionMode; +HSPLcom/artemchep/keyguard/ui/scrollbar/ScrollbarSelectionMode;->()V +HSPLcom/artemchep/keyguard/ui/scrollbar/ScrollbarSelectionMode;->(Ljava/lang/String;I)V +Lcom/artemchep/keyguard/ui/scrollbar/ScrollbarSelectionMode$Companion; +HSPLcom/artemchep/keyguard/ui/scrollbar/ScrollbarSelectionMode$Companion;->()V +HSPLcom/artemchep/keyguard/ui/scrollbar/ScrollbarSelectionMode$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/ui/scrollbar/ScrollbarSelectionMode$Companion;->getDefault(Landroidx/compose/runtime/Composer;I)Lcom/artemchep/keyguard/ui/scrollbar/ScrollbarSelectionMode; +Lcom/artemchep/keyguard/ui/selection/SelectionHandle; +Lcom/artemchep/keyguard/ui/selection/SelectionUtilKt; +HSPLcom/artemchep/keyguard/ui/selection/SelectionUtilKt;->selectionHandle(Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;Ljava/lang/String;)Lcom/artemchep/keyguard/ui/selection/SelectionHandle; +Lcom/artemchep/keyguard/ui/selection/SelectionUtilKt$selectionHandle$$inlined$map$1; +HSPLcom/artemchep/keyguard/ui/selection/SelectionUtilKt$selectionHandle$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +Lcom/artemchep/keyguard/ui/selection/SelectionUtilKt$selectionHandle$2; +HSPLcom/artemchep/keyguard/ui/selection/SelectionUtilKt$selectionHandle$2;->(Lkotlinx/coroutines/flow/MutableStateFlow;)V +Lcom/artemchep/keyguard/ui/selection/SelectionUtilKt$selectionHandle$3; +HSPLcom/artemchep/keyguard/ui/selection/SelectionUtilKt$selectionHandle$3;->(Lkotlinx/coroutines/flow/MutableStateFlow;)V +HSPLcom/artemchep/keyguard/ui/selection/SelectionUtilKt$selectionHandle$3;->getIdsFlow()Lkotlinx/coroutines/flow/StateFlow; +Lcom/artemchep/keyguard/ui/selection/SelectionUtilKt$selectionHandle$itemIdsSink$1; +HSPLcom/artemchep/keyguard/ui/selection/SelectionUtilKt$selectionHandle$itemIdsSink$1;->()V +HSPLcom/artemchep/keyguard/ui/selection/SelectionUtilKt$selectionHandle$itemIdsSink$1;->()V +HSPLcom/artemchep/keyguard/ui/selection/SelectionUtilKt$selectionHandle$itemIdsSink$1;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/ui/selection/SelectionUtilKt$selectionHandle$itemIdsSink$1;->invoke()Ljava/util/Set; +Lcom/artemchep/keyguard/ui/shimmer/RememberShimmerBoundsWindowKt; +HSPLcom/artemchep/keyguard/ui/shimmer/RememberShimmerBoundsWindowKt;->rememberShimmerBoundsWindow(Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/geometry/Rect; +Lcom/artemchep/keyguard/ui/shimmer/RememberShimmerEffectKt; +HSPLcom/artemchep/keyguard/ui/shimmer/RememberShimmerEffectKt;->rememberShimmerEffect(Lcom/artemchep/keyguard/ui/shimmer/ShimmerTheme;Landroidx/compose/runtime/Composer;I)Lcom/artemchep/keyguard/ui/shimmer/ShimmerEffect; +Lcom/artemchep/keyguard/ui/shimmer/RememberShimmerEffectKt$rememberShimmerEffect$1; +HSPLcom/artemchep/keyguard/ui/shimmer/RememberShimmerEffectKt$rememberShimmerEffect$1;->(Lcom/artemchep/keyguard/ui/shimmer/ShimmerEffect;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/ui/shimmer/RememberShimmerEffectKt$rememberShimmerEffect$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/ui/shimmer/RememberShimmerEffectKt$rememberShimmerEffect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/shimmer/RememberShimmerKt; +HSPLcom/artemchep/keyguard/ui/shimmer/RememberShimmerKt;->rememberShimmer(Lcom/artemchep/keyguard/ui/shimmer/ShimmerBounds;Lcom/artemchep/keyguard/ui/shimmer/ShimmerTheme;Landroidx/compose/runtime/Composer;II)Lcom/artemchep/keyguard/ui/shimmer/Shimmer; +Lcom/artemchep/keyguard/ui/shimmer/Shimmer; +HSPLcom/artemchep/keyguard/ui/shimmer/Shimmer;->()V +HSPLcom/artemchep/keyguard/ui/shimmer/Shimmer;->(Lcom/artemchep/keyguard/ui/shimmer/ShimmerTheme;Lcom/artemchep/keyguard/ui/shimmer/ShimmerEffect;Landroidx/compose/ui/geometry/Rect;)V +HSPLcom/artemchep/keyguard/ui/shimmer/Shimmer;->getBoundsFlow$common_noneRelease()Lkotlinx/coroutines/flow/MutableStateFlow; +HSPLcom/artemchep/keyguard/ui/shimmer/Shimmer;->getEffect$common_noneRelease()Lcom/artemchep/keyguard/ui/shimmer/ShimmerEffect; +HSPLcom/artemchep/keyguard/ui/shimmer/Shimmer;->getTheme$common_noneRelease()Lcom/artemchep/keyguard/ui/shimmer/ShimmerTheme; +Lcom/artemchep/keyguard/ui/shimmer/ShimmerArea; +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerArea;->()V +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerArea;->(FF)V +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerArea;->computeShimmerBounds()V +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerArea;->computeTranslationDistance()V +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerArea;->getPivotPoint-F1C5BW0()J +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerArea;->getShimmerBounds()Landroidx/compose/ui/geometry/Rect; +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerArea;->getTranslationDistance()F +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerArea;->getViewBounds()Landroidx/compose/ui/geometry/Rect; +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerArea;->reduceRotation(F)F +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerArea;->setViewBounds(Landroidx/compose/ui/geometry/Rect;)V +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerArea;->toRadian(F)F +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerArea;->updateBounds(Landroidx/compose/ui/geometry/Rect;)V +Lcom/artemchep/keyguard/ui/shimmer/ShimmerBounds; +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerBounds;->()V +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerBounds;->()V +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerBounds;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/ui/shimmer/ShimmerBounds$Custom; +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerBounds$Custom;->()V +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerBounds$Custom;->()V +Lcom/artemchep/keyguard/ui/shimmer/ShimmerBounds$View; +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerBounds$View;->()V +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerBounds$View;->()V +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerBounds$View;->equals(Ljava/lang/Object;)Z +Lcom/artemchep/keyguard/ui/shimmer/ShimmerBounds$Window; +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerBounds$Window;->()V +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerBounds$Window;->()V +Lcom/artemchep/keyguard/ui/shimmer/ShimmerBoundsKt; +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerBoundsKt;->rememberShimmerBounds(Lcom/artemchep/keyguard/ui/shimmer/ShimmerBounds;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/geometry/Rect; +Lcom/artemchep/keyguard/ui/shimmer/ShimmerEffect; +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerEffect;->()V +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerEffect;->(Landroidx/compose/animation/core/AnimationSpec;IFLjava/util/List;Ljava/util/List;F)V +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerEffect;->(Landroidx/compose/animation/core/AnimationSpec;IFLjava/util/List;Ljava/util/List;FLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerEffect;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;Lcom/artemchep/keyguard/ui/shimmer/ShimmerArea;)V +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerEffect;->startAnimation$common_noneRelease(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/shimmer/ShimmerKt; +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerKt;->shimmer$default(Landroidx/compose/ui/Modifier;Lcom/artemchep/keyguard/ui/shimmer/Shimmer;ILjava/lang/Object;)Landroidx/compose/ui/Modifier; +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerKt;->shimmer(Landroidx/compose/ui/Modifier;Lcom/artemchep/keyguard/ui/shimmer/Shimmer;)Landroidx/compose/ui/Modifier; +Lcom/artemchep/keyguard/ui/shimmer/ShimmerKt$shimmer$2; +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerKt$shimmer$2;->(Lcom/artemchep/keyguard/ui/shimmer/Shimmer;)V +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerKt$shimmer$2;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier; +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerKt$shimmer$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/shimmer/ShimmerKt$shimmer$2$1; +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerKt$shimmer$2$1;->(Lcom/artemchep/keyguard/ui/shimmer/Shimmer;Lcom/artemchep/keyguard/ui/shimmer/ShimmerArea;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerKt$shimmer$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerKt$shimmer$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/shimmer/ShimmerKt$shimmer$2$1$1; +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerKt$shimmer$2$1$1;->(Lcom/artemchep/keyguard/ui/shimmer/ShimmerArea;)V +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerKt$shimmer$2$1$1;->emit(Landroidx/compose/ui/geometry/Rect;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerKt$shimmer$2$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/shimmer/ShimmerModifier; +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerModifier;->()V +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerModifier;->(Lcom/artemchep/keyguard/ui/shimmer/ShimmerArea;Lcom/artemchep/keyguard/ui/shimmer/ShimmerEffect;)V +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerModifier;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerModifier;->onGloballyPositioned(Landroidx/compose/ui/layout/LayoutCoordinates;)V +Lcom/artemchep/keyguard/ui/shimmer/ShimmerTheme; +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerTheme;->()V +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerTheme;->(Landroidx/compose/animation/core/AnimationSpec;IFLjava/util/List;Ljava/util/List;F)V +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerTheme;->(Landroidx/compose/animation/core/AnimationSpec;IFLjava/util/List;Ljava/util/List;FLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerTheme;->getAnimationSpec()Landroidx/compose/animation/core/AnimationSpec; +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerTheme;->getBlendMode-0nO6VwU()I +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerTheme;->getRotation()F +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerTheme;->getShaderColorStops()Ljava/util/List; +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerTheme;->getShaderColors()Ljava/util/List; +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerTheme;->getShimmerWidth-D9Ej5fM()F +Lcom/artemchep/keyguard/ui/shimmer/ShimmerThemeKt; +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerThemeKt;->()V +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerThemeKt;->getDefaultShimmerTheme()Lcom/artemchep/keyguard/ui/shimmer/ShimmerTheme; +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerThemeKt;->getLocalShimmerTheme()Landroidx/compose/runtime/ProvidableCompositionLocal; +Lcom/artemchep/keyguard/ui/shimmer/ShimmerThemeKt$LocalShimmerTheme$1; +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerThemeKt$LocalShimmerTheme$1;->()V +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerThemeKt$LocalShimmerTheme$1;->()V +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerThemeKt$LocalShimmerTheme$1;->invoke()Lcom/artemchep/keyguard/ui/shimmer/ShimmerTheme; +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerThemeKt$LocalShimmerTheme$1;->invoke()Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/shimmer/UnclippedBoundsInWindowKt; +HSPLcom/artemchep/keyguard/ui/shimmer/UnclippedBoundsInWindowKt;->unclippedBoundsInWindow(Landroidx/compose/ui/layout/LayoutCoordinates;)Landroidx/compose/ui/geometry/Rect; +Lcom/artemchep/keyguard/ui/skeleton/ComposableSingletons$SkeletonFilterKt; +HSPLcom/artemchep/keyguard/ui/skeleton/ComposableSingletons$SkeletonFilterKt;->()V +HSPLcom/artemchep/keyguard/ui/skeleton/ComposableSingletons$SkeletonFilterKt;->()V +HSPLcom/artemchep/keyguard/ui/skeleton/ComposableSingletons$SkeletonFilterKt;->getLambda-1$common_noneRelease()Lkotlin/jvm/functions/Function2; +Lcom/artemchep/keyguard/ui/skeleton/ComposableSingletons$SkeletonFilterKt$lambda-1$1; +HSPLcom/artemchep/keyguard/ui/skeleton/ComposableSingletons$SkeletonFilterKt$lambda-1$1;->()V +HSPLcom/artemchep/keyguard/ui/skeleton/ComposableSingletons$SkeletonFilterKt$lambda-1$1;->()V +HSPLcom/artemchep/keyguard/ui/skeleton/ComposableSingletons$SkeletonFilterKt$lambda-1$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/skeleton/ComposableSingletons$SkeletonFilterKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/skeleton/ComposableSingletons$SkeletonItemKt; +HSPLcom/artemchep/keyguard/ui/skeleton/ComposableSingletons$SkeletonItemKt;->()V +HSPLcom/artemchep/keyguard/ui/skeleton/ComposableSingletons$SkeletonItemKt;->()V +HSPLcom/artemchep/keyguard/ui/skeleton/ComposableSingletons$SkeletonItemKt;->getLambda-1$common_noneRelease()Lkotlin/jvm/functions/Function3; +HSPLcom/artemchep/keyguard/ui/skeleton/ComposableSingletons$SkeletonItemKt;->getLambda-2$common_noneRelease()Lkotlin/jvm/functions/Function3; +Lcom/artemchep/keyguard/ui/skeleton/ComposableSingletons$SkeletonItemKt$lambda-1$1; +HSPLcom/artemchep/keyguard/ui/skeleton/ComposableSingletons$SkeletonItemKt$lambda-1$1;->()V +HSPLcom/artemchep/keyguard/ui/skeleton/ComposableSingletons$SkeletonItemKt$lambda-1$1;->()V +HSPLcom/artemchep/keyguard/ui/skeleton/ComposableSingletons$SkeletonItemKt$lambda-1$1;->invoke(Landroidx/compose/foundation/layout/BoxScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/skeleton/ComposableSingletons$SkeletonItemKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/skeleton/ComposableSingletons$SkeletonItemKt$lambda-2$1; +HSPLcom/artemchep/keyguard/ui/skeleton/ComposableSingletons$SkeletonItemKt$lambda-2$1;->()V +HSPLcom/artemchep/keyguard/ui/skeleton/ComposableSingletons$SkeletonItemKt$lambda-2$1;->()V +HSPLcom/artemchep/keyguard/ui/skeleton/ComposableSingletons$SkeletonItemKt$lambda-2$1;->invoke(Landroidx/compose/foundation/layout/RowScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/skeleton/ComposableSingletons$SkeletonItemKt$lambda-2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/skeleton/SkeletonButtonKt; +HSPLcom/artemchep/keyguard/ui/skeleton/SkeletonButtonKt;->SkeletonButton(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V +Lcom/artemchep/keyguard/ui/skeleton/SkeletonButtonKt$SkeletonButton$1; +HSPLcom/artemchep/keyguard/ui/skeleton/SkeletonButtonKt$SkeletonButton$1;->(Landroidx/compose/ui/Modifier;II)V +Lcom/artemchep/keyguard/ui/skeleton/SkeletonCheckBoxKt; +HSPLcom/artemchep/keyguard/ui/skeleton/SkeletonCheckBoxKt;->SkeletonCheckbox(Landroidx/compose/ui/Modifier;ZLandroidx/compose/runtime/Composer;II)V +Lcom/artemchep/keyguard/ui/skeleton/SkeletonCheckBoxKt$SkeletonCheckbox$2; +HSPLcom/artemchep/keyguard/ui/skeleton/SkeletonCheckBoxKt$SkeletonCheckbox$2;->(Landroidx/compose/ui/Modifier;ZII)V +Lcom/artemchep/keyguard/ui/skeleton/SkeletonFilterKt; +HSPLcom/artemchep/keyguard/ui/skeleton/SkeletonFilterKt;->SkeletonFilter(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V +Lcom/artemchep/keyguard/ui/skeleton/SkeletonItemKt; +HSPLcom/artemchep/keyguard/ui/skeleton/SkeletonItemKt;->SkeletonItem(ZFLjava/lang/Float;Landroidx/compose/runtime/Composer;II)V +Lcom/artemchep/keyguard/ui/skeleton/SkeletonItemKt$SkeletonItem$1; +HSPLcom/artemchep/keyguard/ui/skeleton/SkeletonItemKt$SkeletonItem$1;->(Ljava/lang/Float;)V +HSPLcom/artemchep/keyguard/ui/skeleton/SkeletonItemKt$SkeletonItem$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/skeleton/SkeletonItemKt$SkeletonItem$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/skeleton/SkeletonItemKt$SkeletonItem$2; +HSPLcom/artemchep/keyguard/ui/skeleton/SkeletonItemKt$SkeletonItem$2;->(F)V +HSPLcom/artemchep/keyguard/ui/skeleton/SkeletonItemKt$SkeletonItem$2;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/skeleton/SkeletonItemKt$SkeletonItem$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/skeleton/SkeletonTextFieldKt; +HSPLcom/artemchep/keyguard/ui/skeleton/SkeletonTextFieldKt;->SkeletonTextField(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V +Lcom/artemchep/keyguard/ui/skeleton/SkeletonTextFieldKt$SkeletonTextField$1; +HSPLcom/artemchep/keyguard/ui/skeleton/SkeletonTextFieldKt$SkeletonTextField$1;->(Landroidx/compose/ui/Modifier;II)V +Lcom/artemchep/keyguard/ui/skeleton/SkeletonTextKt; +HSPLcom/artemchep/keyguard/ui/skeleton/SkeletonTextKt;->SkeletonText(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/text/TextStyle;FLandroidx/compose/runtime/Composer;II)V +Lcom/artemchep/keyguard/ui/skeleton/SkeletonTextKt$SkeletonText$1; +HSPLcom/artemchep/keyguard/ui/skeleton/SkeletonTextKt$SkeletonText$1;->(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/text/TextStyle;FII)V +Lcom/artemchep/keyguard/ui/theme/ColorKt; +HSPLcom/artemchep/keyguard/ui/theme/ColorKt;->combineAlpha-DxMtmZc(JF)J +Lcom/artemchep/keyguard/ui/theme/Dimen; +HSPLcom/artemchep/keyguard/ui/theme/Dimen;->()V +HSPLcom/artemchep/keyguard/ui/theme/Dimen;->(FFFF)V +HSPLcom/artemchep/keyguard/ui/theme/Dimen;->(FFFFILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/ui/theme/Dimen;->(FFFFLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/ui/theme/Dimen;->getButtonIconPadding-D9Ej5fM()F +HSPLcom/artemchep/keyguard/ui/theme/Dimen;->getHorizontalPadding-D9Ej5fM()F +HSPLcom/artemchep/keyguard/ui/theme/Dimen;->getVerticalPadding-D9Ej5fM()F +Lcom/artemchep/keyguard/ui/theme/Dimen$Companion; +HSPLcom/artemchep/keyguard/ui/theme/Dimen$Companion;->()V +HSPLcom/artemchep/keyguard/ui/theme/Dimen$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/ui/theme/Dimen$Companion;->normal()Lcom/artemchep/keyguard/ui/theme/Dimen; +Lcom/artemchep/keyguard/ui/theme/DimenKt; +HSPLcom/artemchep/keyguard/ui/theme/DimenKt;->()V +HSPLcom/artemchep/keyguard/ui/theme/DimenKt;->getDimens(Landroidx/compose/runtime/Composer;I)Lcom/artemchep/keyguard/ui/theme/Dimen; +Lcom/artemchep/keyguard/ui/theme/DimenKt$LocalDimens$1; +HSPLcom/artemchep/keyguard/ui/theme/DimenKt$LocalDimens$1;->()V +HSPLcom/artemchep/keyguard/ui/theme/DimenKt$LocalDimens$1;->()V +HSPLcom/artemchep/keyguard/ui/theme/DimenKt$LocalDimens$1;->invoke()Lcom/artemchep/keyguard/ui/theme/Dimen; +HSPLcom/artemchep/keyguard/ui/theme/DimenKt$LocalDimens$1;->invoke()Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/theme/PlatformTheme; +HSPLcom/artemchep/keyguard/ui/theme/PlatformTheme;->SystemUiThemeEffect(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/theme/PlatformTheme;->appDynamicLightColorScheme(Landroidx/compose/runtime/Composer;I)Landroidx/compose/material3/ColorScheme; +Lcom/artemchep/keyguard/ui/theme/PlatformTheme$SystemUiThemeEffect$1$1; +HSPLcom/artemchep/keyguard/ui/theme/PlatformTheme$SystemUiThemeEffect$1$1;->(Lcom/google/accompanist/systemuicontroller/SystemUiController;Z)V +HSPLcom/artemchep/keyguard/ui/theme/PlatformTheme$SystemUiThemeEffect$1$1;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/ui/theme/PlatformTheme$SystemUiThemeEffect$1$1;->invoke()V +Lcom/artemchep/keyguard/ui/theme/PlatformTheme$SystemUiThemeEffect$2; +HSPLcom/artemchep/keyguard/ui/theme/PlatformTheme$SystemUiThemeEffect$2;->(I)V +Lcom/artemchep/keyguard/ui/theme/ThemeKt; +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt;->()V +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt;->KeyguardTheme$lambda$10(Landroidx/compose/runtime/State;)Z +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt;->KeyguardTheme$lambda$12(Landroidx/compose/runtime/State;)Lcom/artemchep/keyguard/common/model/AppColors; +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt;->KeyguardTheme$lambda$14(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetFont; +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt;->KeyguardTheme$lambda$4(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetTheme; +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt;->KeyguardTheme$lambda$5(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetThemeUseAmoledDark; +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt;->KeyguardTheme$lambda$6(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetColors; +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt;->KeyguardTheme$lambda$8(Landroidx/compose/runtime/State;)Lcom/artemchep/keyguard/common/model/AppTheme; +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt;->KeyguardTheme(Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt;->access$KeyguardTheme$lambda$14(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetFont; +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt;->access$KeyguardTheme$lambda$4(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetTheme; +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt;->access$KeyguardTheme$lambda$5(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetThemeUseAmoledDark; +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt;->access$KeyguardTheme$lambda$6(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetColors; +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt;->access$buildContentColor(FZ)J +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt;->appColorScheme(Lcom/artemchep/keyguard/common/model/AppColors;ZLandroidx/compose/runtime/Composer;I)Landroidx/compose/material3/ColorScheme; +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt;->buildContainerColor(Landroidx/compose/material3/ColorScheme;FLandroidx/compose/runtime/Composer;I)J +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt;->buildContentColor(FZ)J +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt;->buildContentColor(Landroidx/compose/material3/ColorScheme;FLandroidx/compose/runtime/Composer;I)J +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt;->getInfo(Landroidx/compose/material3/ColorScheme;Landroidx/compose/runtime/Composer;I)J +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt;->getInfoContainer(Landroidx/compose/material3/ColorScheme;Landroidx/compose/runtime/Composer;I)J +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt;->getMonoFontFamily(Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/text/font/FontFamily; +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt;->getRobotoMonoFontFamily(Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/text/font/FontFamily; +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt;->get_error(Landroidx/compose/material3/ColorScheme;Landroidx/compose/runtime/Composer;I)J +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt;->get_errorContainer(Landroidx/compose/material3/ColorScheme;Landroidx/compose/runtime/Composer;I)J +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt;->get_onErrorContainer(Landroidx/compose/material3/ColorScheme;Landroidx/compose/runtime/Composer;I)J +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt;->isDark(Landroidx/compose/material3/ColorScheme;)Z +Lcom/artemchep/keyguard/ui/theme/ThemeKt$KeyguardTheme$$inlined$rememberInstance$1; +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt$KeyguardTheme$$inlined$rememberInstance$1;->()V +Lcom/artemchep/keyguard/ui/theme/ThemeKt$KeyguardTheme$$inlined$rememberInstance$2; +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt$KeyguardTheme$$inlined$rememberInstance$2;->()V +Lcom/artemchep/keyguard/ui/theme/ThemeKt$KeyguardTheme$$inlined$rememberInstance$3; +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt$KeyguardTheme$$inlined$rememberInstance$3;->()V +Lcom/artemchep/keyguard/ui/theme/ThemeKt$KeyguardTheme$$inlined$rememberInstance$4; +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt$KeyguardTheme$$inlined$rememberInstance$4;->()V +Lcom/artemchep/keyguard/ui/theme/ThemeKt$KeyguardTheme$1; +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt$KeyguardTheme$1;->(ZLandroidx/compose/material3/ColorScheme;Lkotlin/jvm/functions/Function2;)V +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt$KeyguardTheme$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt$KeyguardTheme$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/theme/ThemeKt$KeyguardTheme$1$1; +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt$KeyguardTheme$1$1;->(Lkotlin/jvm/functions/Function2;)V +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt$KeyguardTheme$1$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt$KeyguardTheme$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/theme/ThemeKt$KeyguardTheme$2; +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt$KeyguardTheme$2;->(Lkotlin/jvm/functions/Function2;I)V +Lcom/artemchep/keyguard/ui/toolbar/CustomToolbarKt; +HSPLcom/artemchep/keyguard/ui/toolbar/CustomToolbarKt;->CustomToolbar$lambda$0(Landroidx/compose/runtime/State;)J +HSPLcom/artemchep/keyguard/ui/toolbar/CustomToolbarKt;->CustomToolbar(Landroidx/compose/ui/Modifier;Landroidx/compose/material3/TopAppBarScrollBehavior;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V +Lcom/artemchep/keyguard/ui/toolbar/CustomToolbarKt$CustomToolbar$1; +HSPLcom/artemchep/keyguard/ui/toolbar/CustomToolbarKt$CustomToolbar$1;->(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/material3/TopAppBarScrollBehavior;Lkotlin/jvm/functions/Function2;)V +HSPLcom/artemchep/keyguard/ui/toolbar/CustomToolbarKt$CustomToolbar$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/toolbar/CustomToolbarKt$CustomToolbar$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/toolbar/CustomToolbarKt$CustomToolbar$1$1$1; +HSPLcom/artemchep/keyguard/ui/toolbar/CustomToolbarKt$CustomToolbar$1$1$1;->(Landroidx/compose/material3/TopAppBarScrollBehavior;)V +HSPLcom/artemchep/keyguard/ui/toolbar/CustomToolbarKt$CustomToolbar$1$1$1;->invoke(Landroidx/compose/ui/layout/LayoutCoordinates;)V +HSPLcom/artemchep/keyguard/ui/toolbar/CustomToolbarKt$CustomToolbar$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/toolbar/CustomToolbarKt$CustomToolbar$2; +HSPLcom/artemchep/keyguard/ui/toolbar/CustomToolbarKt$CustomToolbar$2;->(Landroidx/compose/ui/Modifier;Landroidx/compose/material3/TopAppBarScrollBehavior;Lkotlin/jvm/functions/Function2;II)V +HSPLcom/artemchep/keyguard/ui/toolbar/CustomToolbarKt$CustomToolbar$2;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/toolbar/CustomToolbarKt$CustomToolbar$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/util/DividerKt; +HSPLcom/artemchep/keyguard/ui/util/DividerKt;->Divider(Landroidx/compose/ui/Modifier;ZLandroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/ui/util/DividerKt;->VerticalDivider(Landroidx/compose/ui/Modifier;ZLandroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/ui/util/DividerKt;->getDividerColor(Landroidx/compose/runtime/Composer;I)J +HSPLcom/artemchep/keyguard/ui/util/DividerKt;->getDividerSize()F +Lcom/artemchep/keyguard/ui/util/DividerKt$Divider$1; +HSPLcom/artemchep/keyguard/ui/util/DividerKt$Divider$1;->(Landroidx/compose/ui/Modifier;ZII)V +Lcom/fredporciuncula/flow/preferences/BasePreference; +HSPLcom/fredporciuncula/flow/preferences/BasePreference;->(Ljava/lang/String;Lkotlinx/coroutines/flow/Flow;Landroid/content/SharedPreferences;Lkotlin/coroutines/CoroutineContext;)V +HSPLcom/fredporciuncula/flow/preferences/BasePreference;->asFlow()Lkotlinx/coroutines/flow/Flow; +Lcom/fredporciuncula/flow/preferences/BasePreference$asFlow$$inlined$filter$1; +HSPLcom/fredporciuncula/flow/preferences/BasePreference$asFlow$$inlined$filter$1;->(Lkotlinx/coroutines/flow/Flow;Lcom/fredporciuncula/flow/preferences/BasePreference;)V +HSPLcom/fredporciuncula/flow/preferences/BasePreference$asFlow$$inlined$filter$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/fredporciuncula/flow/preferences/BasePreference$asFlow$$inlined$filter$1$2; +HSPLcom/fredporciuncula/flow/preferences/BasePreference$asFlow$$inlined$filter$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lcom/fredporciuncula/flow/preferences/BasePreference;)V +HSPLcom/fredporciuncula/flow/preferences/BasePreference$asFlow$$inlined$filter$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +PLcom/fredporciuncula/flow/preferences/BasePreference$asFlow$$inlined$filter$1$2$1;->(Lcom/fredporciuncula/flow/preferences/BasePreference$asFlow$$inlined$filter$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/fredporciuncula/flow/preferences/BasePreference$asFlow$$inlined$map$1; +HSPLcom/fredporciuncula/flow/preferences/BasePreference$asFlow$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;Lcom/fredporciuncula/flow/preferences/BasePreference;)V +HSPLcom/fredporciuncula/flow/preferences/BasePreference$asFlow$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/fredporciuncula/flow/preferences/BasePreference$asFlow$$inlined$map$1$2; +HSPLcom/fredporciuncula/flow/preferences/BasePreference$asFlow$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lcom/fredporciuncula/flow/preferences/BasePreference;)V +HSPLcom/fredporciuncula/flow/preferences/BasePreference$asFlow$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/fredporciuncula/flow/preferences/BasePreference$asFlow$$inlined$map$1$2$1; +HSPLcom/fredporciuncula/flow/preferences/BasePreference$asFlow$$inlined$map$1$2$1;->(Lcom/fredporciuncula/flow/preferences/BasePreference$asFlow$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/fredporciuncula/flow/preferences/BasePreference$asFlow$2; +HSPLcom/fredporciuncula/flow/preferences/BasePreference$asFlow$2;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/fredporciuncula/flow/preferences/BasePreference$asFlow$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/fredporciuncula/flow/preferences/BasePreference$asFlow$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/fredporciuncula/flow/preferences/BasePreference$asFlow$2;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/fredporciuncula/flow/preferences/BasePreference$asFlow$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/fredporciuncula/flow/preferences/BooleanPreference; +HSPLcom/fredporciuncula/flow/preferences/BooleanPreference;->(Ljava/lang/String;ZLkotlinx/coroutines/flow/Flow;Landroid/content/SharedPreferences;Lkotlin/coroutines/CoroutineContext;)V +HSPLcom/fredporciuncula/flow/preferences/BooleanPreference;->get()Ljava/lang/Boolean; +HSPLcom/fredporciuncula/flow/preferences/BooleanPreference;->get()Ljava/lang/Object; +HSPLcom/fredporciuncula/flow/preferences/BooleanPreference;->getDefaultValue()Ljava/lang/Boolean; +HSPLcom/fredporciuncula/flow/preferences/BooleanPreference;->getKey()Ljava/lang/String; +Lcom/fredporciuncula/flow/preferences/FlowSharedPreferences; +HSPLcom/fredporciuncula/flow/preferences/FlowSharedPreferences;->(Landroid/content/SharedPreferences;Lkotlin/coroutines/CoroutineContext;)V +HSPLcom/fredporciuncula/flow/preferences/FlowSharedPreferences;->(Landroid/content/SharedPreferences;Lkotlin/coroutines/CoroutineContext;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/fredporciuncula/flow/preferences/FlowSharedPreferences;->getBoolean(Ljava/lang/String;Z)Lcom/fredporciuncula/flow/preferences/Preference; +HSPLcom/fredporciuncula/flow/preferences/FlowSharedPreferences;->getLong(Ljava/lang/String;J)Lcom/fredporciuncula/flow/preferences/Preference; +HSPLcom/fredporciuncula/flow/preferences/FlowSharedPreferences;->getString(Ljava/lang/String;Ljava/lang/String;)Lcom/fredporciuncula/flow/preferences/Preference; +Lcom/fredporciuncula/flow/preferences/LongPreference; +HSPLcom/fredporciuncula/flow/preferences/LongPreference;->(Ljava/lang/String;JLkotlinx/coroutines/flow/Flow;Landroid/content/SharedPreferences;Lkotlin/coroutines/CoroutineContext;)V +HSPLcom/fredporciuncula/flow/preferences/LongPreference;->access$getSharedPreferences$p(Lcom/fredporciuncula/flow/preferences/LongPreference;)Landroid/content/SharedPreferences; +HSPLcom/fredporciuncula/flow/preferences/LongPreference;->getKey()Ljava/lang/String; +HSPLcom/fredporciuncula/flow/preferences/LongPreference;->setAndCommit(JLkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/fredporciuncula/flow/preferences/LongPreference;->setAndCommit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/fredporciuncula/flow/preferences/LongPreference$setAndCommit$2; +HSPLcom/fredporciuncula/flow/preferences/LongPreference$setAndCommit$2;->(Lcom/fredporciuncula/flow/preferences/LongPreference;JLkotlin/coroutines/Continuation;)V +HSPLcom/fredporciuncula/flow/preferences/LongPreference$setAndCommit$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/fredporciuncula/flow/preferences/LongPreference$setAndCommit$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/fredporciuncula/flow/preferences/LongPreference$setAndCommit$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/fredporciuncula/flow/preferences/LongPreference$setAndCommit$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/fredporciuncula/flow/preferences/Preference; +Lcom/fredporciuncula/flow/preferences/SharedPreferencesExtensionsKt; +HSPLcom/fredporciuncula/flow/preferences/SharedPreferencesExtensionsKt;->getKeyFlow(Landroid/content/SharedPreferences;)Lkotlinx/coroutines/flow/Flow; +Lcom/fredporciuncula/flow/preferences/SharedPreferencesExtensionsKt$keyFlow$1; +HSPLcom/fredporciuncula/flow/preferences/SharedPreferencesExtensionsKt$keyFlow$1;->$r8$lambda$ILt5lcHT_KsH_b03g0fr8T5gYPE(Lkotlinx/coroutines/channels/ProducerScope;Landroid/content/SharedPreferences;Ljava/lang/String;)V +HSPLcom/fredporciuncula/flow/preferences/SharedPreferencesExtensionsKt$keyFlow$1;->(Landroid/content/SharedPreferences;Lkotlin/coroutines/Continuation;)V +HSPLcom/fredporciuncula/flow/preferences/SharedPreferencesExtensionsKt$keyFlow$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/fredporciuncula/flow/preferences/SharedPreferencesExtensionsKt$keyFlow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/fredporciuncula/flow/preferences/SharedPreferencesExtensionsKt$keyFlow$1;->invoke(Lkotlinx/coroutines/channels/ProducerScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/fredporciuncula/flow/preferences/SharedPreferencesExtensionsKt$keyFlow$1;->invokeSuspend$lambda$0(Lkotlinx/coroutines/channels/ProducerScope;Landroid/content/SharedPreferences;Ljava/lang/String;)V +HSPLcom/fredporciuncula/flow/preferences/SharedPreferencesExtensionsKt$keyFlow$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/fredporciuncula/flow/preferences/SharedPreferencesExtensionsKt$keyFlow$1$$ExternalSyntheticLambda0; +HSPLcom/fredporciuncula/flow/preferences/SharedPreferencesExtensionsKt$keyFlow$1$$ExternalSyntheticLambda0;->(Lkotlinx/coroutines/channels/ProducerScope;)V +HSPLcom/fredporciuncula/flow/preferences/SharedPreferencesExtensionsKt$keyFlow$1$$ExternalSyntheticLambda0;->onSharedPreferenceChanged(Landroid/content/SharedPreferences;Ljava/lang/String;)V +Lcom/fredporciuncula/flow/preferences/SharedPreferencesExtensionsKt$keyFlow$1$1; +HSPLcom/fredporciuncula/flow/preferences/SharedPreferencesExtensionsKt$keyFlow$1$1;->(Landroid/content/SharedPreferences;Landroid/content/SharedPreferences$OnSharedPreferenceChangeListener;)V +HSPLcom/fredporciuncula/flow/preferences/SharedPreferencesExtensionsKt$keyFlow$1$1;->invoke()Ljava/lang/Object; +HSPLcom/fredporciuncula/flow/preferences/SharedPreferencesExtensionsKt$keyFlow$1$1;->invoke()V +Lcom/fredporciuncula/flow/preferences/StringPreference; +HSPLcom/fredporciuncula/flow/preferences/StringPreference;->(Ljava/lang/String;Ljava/lang/String;Lkotlinx/coroutines/flow/Flow;Landroid/content/SharedPreferences;Lkotlin/coroutines/CoroutineContext;)V +HSPLcom/fredporciuncula/flow/preferences/StringPreference;->access$getSharedPreferences$p(Lcom/fredporciuncula/flow/preferences/StringPreference;)Landroid/content/SharedPreferences; +HSPLcom/fredporciuncula/flow/preferences/StringPreference;->get()Ljava/lang/Object; +HSPLcom/fredporciuncula/flow/preferences/StringPreference;->get()Ljava/lang/String; +HSPLcom/fredporciuncula/flow/preferences/StringPreference;->getDefaultValue()Ljava/lang/String; +HSPLcom/fredporciuncula/flow/preferences/StringPreference;->getKey()Ljava/lang/String; +HSPLcom/fredporciuncula/flow/preferences/StringPreference;->setAndCommit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/fredporciuncula/flow/preferences/StringPreference;->setAndCommit(Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/fredporciuncula/flow/preferences/StringPreference$setAndCommit$2; +HSPLcom/fredporciuncula/flow/preferences/StringPreference$setAndCommit$2;->(Lcom/fredporciuncula/flow/preferences/StringPreference;Ljava/lang/String;Lkotlin/coroutines/Continuation;)V +HSPLcom/fredporciuncula/flow/preferences/StringPreference$setAndCommit$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/fredporciuncula/flow/preferences/StringPreference$setAndCommit$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/fredporciuncula/flow/preferences/StringPreference$setAndCommit$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/fredporciuncula/flow/preferences/StringPreference$setAndCommit$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/google/accompanist/systemuicontroller/AndroidSystemUiController; +HSPLcom/google/accompanist/systemuicontroller/AndroidSystemUiController;->(Landroid/view/View;Landroid/view/Window;)V +HSPLcom/google/accompanist/systemuicontroller/AndroidSystemUiController;->setNavigationBarColor-Iv8Zu3U(JZZLkotlin/jvm/functions/Function1;)V +HSPLcom/google/accompanist/systemuicontroller/AndroidSystemUiController;->setNavigationBarContrastEnforced(Z)V +HSPLcom/google/accompanist/systemuicontroller/AndroidSystemUiController;->setNavigationBarDarkContentEnabled(Z)V +HSPLcom/google/accompanist/systemuicontroller/AndroidSystemUiController;->setStatusBarColor-ek8zF_U(JZLkotlin/jvm/functions/Function1;)V +HSPLcom/google/accompanist/systemuicontroller/AndroidSystemUiController;->setStatusBarDarkContentEnabled(Z)V +Lcom/google/accompanist/systemuicontroller/SystemUiController; +HSPLcom/google/accompanist/systemuicontroller/SystemUiController;->setSystemBarsColor-Iv8Zu3U$default(Lcom/google/accompanist/systemuicontroller/SystemUiController;JZZLkotlin/jvm/functions/Function1;ILjava/lang/Object;)V +HSPLcom/google/accompanist/systemuicontroller/SystemUiController;->setSystemBarsColor-Iv8Zu3U(JZZLkotlin/jvm/functions/Function1;)V +Lcom/google/accompanist/systemuicontroller/SystemUiControllerKt; +HSPLcom/google/accompanist/systemuicontroller/SystemUiControllerKt;->()V +HSPLcom/google/accompanist/systemuicontroller/SystemUiControllerKt;->access$getBlackScrimmed$p()Lkotlin/jvm/functions/Function1; +HSPLcom/google/accompanist/systemuicontroller/SystemUiControllerKt;->findWindow(Landroid/content/Context;)Landroid/view/Window; +HSPLcom/google/accompanist/systemuicontroller/SystemUiControllerKt;->findWindow(Landroidx/compose/runtime/Composer;I)Landroid/view/Window; +HSPLcom/google/accompanist/systemuicontroller/SystemUiControllerKt;->rememberSystemUiController(Landroid/view/Window;Landroidx/compose/runtime/Composer;II)Lcom/google/accompanist/systemuicontroller/SystemUiController; +Lcom/google/accompanist/systemuicontroller/SystemUiControllerKt$BlackScrimmed$1; +HSPLcom/google/accompanist/systemuicontroller/SystemUiControllerKt$BlackScrimmed$1;->()V +HSPLcom/google/accompanist/systemuicontroller/SystemUiControllerKt$BlackScrimmed$1;->()V +Lcom/google/android/datatransport/Encoding; +HSPLcom/google/android/datatransport/Encoding;->(Ljava/lang/String;)V +HSPLcom/google/android/datatransport/Encoding;->equals(Ljava/lang/Object;)Z +HSPLcom/google/android/datatransport/Encoding;->hashCode()I +HSPLcom/google/android/datatransport/Encoding;->of(Ljava/lang/String;)Lcom/google/android/datatransport/Encoding; +Lcom/google/android/datatransport/Priority; +HSPLcom/google/android/datatransport/Priority;->()V +HSPLcom/google/android/datatransport/Priority;->(Ljava/lang/String;I)V +HSPLcom/google/android/datatransport/Priority;->values()[Lcom/google/android/datatransport/Priority; +Lcom/google/android/datatransport/Transformer; +Lcom/google/android/datatransport/Transport; +Lcom/google/android/datatransport/TransportFactory; +Lcom/google/android/datatransport/cct/CCTDestination; +HSPLcom/google/android/datatransport/cct/CCTDestination;->()V +HSPLcom/google/android/datatransport/cct/CCTDestination;->(Ljava/lang/String;Ljava/lang/String;)V +HSPLcom/google/android/datatransport/cct/CCTDestination;->asByteArray()[B +HSPLcom/google/android/datatransport/cct/CCTDestination;->getExtras()[B +HSPLcom/google/android/datatransport/cct/CCTDestination;->getName()Ljava/lang/String; +HSPLcom/google/android/datatransport/cct/CCTDestination;->getSupportedEncodings()Ljava/util/Set; +Lcom/google/android/datatransport/cct/StringMerger; +HSPLcom/google/android/datatransport/cct/StringMerger;->mergeStrings(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; +Lcom/google/android/datatransport/runtime/AutoValue_TransportContext; +HSPLcom/google/android/datatransport/runtime/AutoValue_TransportContext;->(Ljava/lang/String;[BLcom/google/android/datatransport/Priority;)V +HSPLcom/google/android/datatransport/runtime/AutoValue_TransportContext;->(Ljava/lang/String;[BLcom/google/android/datatransport/Priority;Lcom/google/android/datatransport/runtime/AutoValue_TransportContext$1;)V +Lcom/google/android/datatransport/runtime/AutoValue_TransportContext$Builder; +HSPLcom/google/android/datatransport/runtime/AutoValue_TransportContext$Builder;->()V +HSPLcom/google/android/datatransport/runtime/AutoValue_TransportContext$Builder;->build()Lcom/google/android/datatransport/runtime/TransportContext; +HSPLcom/google/android/datatransport/runtime/AutoValue_TransportContext$Builder;->setBackendName(Ljava/lang/String;)Lcom/google/android/datatransport/runtime/TransportContext$Builder; +HSPLcom/google/android/datatransport/runtime/AutoValue_TransportContext$Builder;->setExtras([B)Lcom/google/android/datatransport/runtime/TransportContext$Builder; +HSPLcom/google/android/datatransport/runtime/AutoValue_TransportContext$Builder;->setPriority(Lcom/google/android/datatransport/Priority;)Lcom/google/android/datatransport/runtime/TransportContext$Builder; +Lcom/google/android/datatransport/runtime/DaggerTransportRuntimeComponent; +HSPLcom/google/android/datatransport/runtime/DaggerTransportRuntimeComponent;->(Landroid/content/Context;)V +HSPLcom/google/android/datatransport/runtime/DaggerTransportRuntimeComponent;->(Landroid/content/Context;Lcom/google/android/datatransport/runtime/DaggerTransportRuntimeComponent$1;)V +HSPLcom/google/android/datatransport/runtime/DaggerTransportRuntimeComponent;->builder()Lcom/google/android/datatransport/runtime/TransportRuntimeComponent$Builder; +HSPLcom/google/android/datatransport/runtime/DaggerTransportRuntimeComponent;->getTransportRuntime()Lcom/google/android/datatransport/runtime/TransportRuntime; +HSPLcom/google/android/datatransport/runtime/DaggerTransportRuntimeComponent;->initialize(Landroid/content/Context;)V +Lcom/google/android/datatransport/runtime/DaggerTransportRuntimeComponent$Builder; +HSPLcom/google/android/datatransport/runtime/DaggerTransportRuntimeComponent$Builder;->()V +HSPLcom/google/android/datatransport/runtime/DaggerTransportRuntimeComponent$Builder;->(Lcom/google/android/datatransport/runtime/DaggerTransportRuntimeComponent$1;)V +HSPLcom/google/android/datatransport/runtime/DaggerTransportRuntimeComponent$Builder;->build()Lcom/google/android/datatransport/runtime/TransportRuntimeComponent; +HSPLcom/google/android/datatransport/runtime/DaggerTransportRuntimeComponent$Builder;->setApplicationContext(Landroid/content/Context;)Lcom/google/android/datatransport/runtime/DaggerTransportRuntimeComponent$Builder; +HSPLcom/google/android/datatransport/runtime/DaggerTransportRuntimeComponent$Builder;->setApplicationContext(Landroid/content/Context;)Lcom/google/android/datatransport/runtime/TransportRuntimeComponent$Builder; +Lcom/google/android/datatransport/runtime/Destination; +Lcom/google/android/datatransport/runtime/EncodedDestination; +Lcom/google/android/datatransport/runtime/ExecutionModule; +HSPLcom/google/android/datatransport/runtime/ExecutionModule;->executor()Ljava/util/concurrent/Executor; +Lcom/google/android/datatransport/runtime/ExecutionModule_ExecutorFactory; +HSPLcom/google/android/datatransport/runtime/ExecutionModule_ExecutorFactory;->()V +HSPLcom/google/android/datatransport/runtime/ExecutionModule_ExecutorFactory;->create()Lcom/google/android/datatransport/runtime/ExecutionModule_ExecutorFactory; +HSPLcom/google/android/datatransport/runtime/ExecutionModule_ExecutorFactory;->executor()Ljava/util/concurrent/Executor; +HSPLcom/google/android/datatransport/runtime/ExecutionModule_ExecutorFactory;->get()Ljava/lang/Object; +HSPLcom/google/android/datatransport/runtime/ExecutionModule_ExecutorFactory;->get()Ljava/util/concurrent/Executor; +Lcom/google/android/datatransport/runtime/ExecutionModule_ExecutorFactory$InstanceHolder; +HSPLcom/google/android/datatransport/runtime/ExecutionModule_ExecutorFactory$InstanceHolder;->()V +HSPLcom/google/android/datatransport/runtime/ExecutionModule_ExecutorFactory$InstanceHolder;->access$000()Lcom/google/android/datatransport/runtime/ExecutionModule_ExecutorFactory; +Lcom/google/android/datatransport/runtime/SafeLoggingExecutor; +HSPLcom/google/android/datatransport/runtime/SafeLoggingExecutor;->(Ljava/util/concurrent/Executor;)V +HSPLcom/google/android/datatransport/runtime/SafeLoggingExecutor;->execute(Ljava/lang/Runnable;)V +Lcom/google/android/datatransport/runtime/SafeLoggingExecutor$SafeLoggingRunnable; +HSPLcom/google/android/datatransport/runtime/SafeLoggingExecutor$SafeLoggingRunnable;->(Ljava/lang/Runnable;)V +HSPLcom/google/android/datatransport/runtime/SafeLoggingExecutor$SafeLoggingRunnable;->run()V +Lcom/google/android/datatransport/runtime/TransportContext; +HSPLcom/google/android/datatransport/runtime/TransportContext;->()V +HSPLcom/google/android/datatransport/runtime/TransportContext;->builder()Lcom/google/android/datatransport/runtime/TransportContext$Builder; +Lcom/google/android/datatransport/runtime/TransportContext$Builder; +HSPLcom/google/android/datatransport/runtime/TransportContext$Builder;->()V +Lcom/google/android/datatransport/runtime/TransportFactoryImpl; +HSPLcom/google/android/datatransport/runtime/TransportFactoryImpl;->(Ljava/util/Set;Lcom/google/android/datatransport/runtime/TransportContext;Lcom/google/android/datatransport/runtime/TransportInternal;)V +HSPLcom/google/android/datatransport/runtime/TransportFactoryImpl;->getTransport(Ljava/lang/String;Ljava/lang/Class;Lcom/google/android/datatransport/Encoding;Lcom/google/android/datatransport/Transformer;)Lcom/google/android/datatransport/Transport; +Lcom/google/android/datatransport/runtime/TransportImpl; +HSPLcom/google/android/datatransport/runtime/TransportImpl;->(Lcom/google/android/datatransport/runtime/TransportContext;Ljava/lang/String;Lcom/google/android/datatransport/Encoding;Lcom/google/android/datatransport/Transformer;Lcom/google/android/datatransport/runtime/TransportInternal;)V +Lcom/google/android/datatransport/runtime/TransportInternal; +Lcom/google/android/datatransport/runtime/TransportRuntime; +HSPLcom/google/android/datatransport/runtime/TransportRuntime;->()V +HSPLcom/google/android/datatransport/runtime/TransportRuntime;->(Lcom/google/android/datatransport/runtime/time/Clock;Lcom/google/android/datatransport/runtime/time/Clock;Lcom/google/android/datatransport/runtime/scheduling/Scheduler;Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/Uploader;Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkInitializer;)V +HSPLcom/google/android/datatransport/runtime/TransportRuntime;->getInstance()Lcom/google/android/datatransport/runtime/TransportRuntime; +HSPLcom/google/android/datatransport/runtime/TransportRuntime;->getSupportedEncodings(Lcom/google/android/datatransport/runtime/Destination;)Ljava/util/Set; +HSPLcom/google/android/datatransport/runtime/TransportRuntime;->initialize(Landroid/content/Context;)V +HSPLcom/google/android/datatransport/runtime/TransportRuntime;->newFactory(Lcom/google/android/datatransport/runtime/Destination;)Lcom/google/android/datatransport/TransportFactory; +Lcom/google/android/datatransport/runtime/TransportRuntimeComponent; +HSPLcom/google/android/datatransport/runtime/TransportRuntimeComponent;->()V +Lcom/google/android/datatransport/runtime/TransportRuntimeComponent$Builder; +Lcom/google/android/datatransport/runtime/TransportRuntime_Factory; +HSPLcom/google/android/datatransport/runtime/TransportRuntime_Factory;->(Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;)V +HSPLcom/google/android/datatransport/runtime/TransportRuntime_Factory;->create(Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;)Lcom/google/android/datatransport/runtime/TransportRuntime_Factory; +HSPLcom/google/android/datatransport/runtime/TransportRuntime_Factory;->get()Lcom/google/android/datatransport/runtime/TransportRuntime; +HSPLcom/google/android/datatransport/runtime/TransportRuntime_Factory;->get()Ljava/lang/Object; +HSPLcom/google/android/datatransport/runtime/TransportRuntime_Factory;->newInstance(Lcom/google/android/datatransport/runtime/time/Clock;Lcom/google/android/datatransport/runtime/time/Clock;Lcom/google/android/datatransport/runtime/scheduling/Scheduler;Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/Uploader;Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkInitializer;)Lcom/google/android/datatransport/runtime/TransportRuntime; +Lcom/google/android/datatransport/runtime/backends/BackendRegistry; +Lcom/google/android/datatransport/runtime/backends/CreationContextFactory; +HSPLcom/google/android/datatransport/runtime/backends/CreationContextFactory;->(Landroid/content/Context;Lcom/google/android/datatransport/runtime/time/Clock;Lcom/google/android/datatransport/runtime/time/Clock;)V +Lcom/google/android/datatransport/runtime/backends/CreationContextFactory_Factory; +HSPLcom/google/android/datatransport/runtime/backends/CreationContextFactory_Factory;->(Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;)V +HSPLcom/google/android/datatransport/runtime/backends/CreationContextFactory_Factory;->create(Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;)Lcom/google/android/datatransport/runtime/backends/CreationContextFactory_Factory; +HSPLcom/google/android/datatransport/runtime/backends/CreationContextFactory_Factory;->get()Lcom/google/android/datatransport/runtime/backends/CreationContextFactory; +HSPLcom/google/android/datatransport/runtime/backends/CreationContextFactory_Factory;->get()Ljava/lang/Object; +HSPLcom/google/android/datatransport/runtime/backends/CreationContextFactory_Factory;->newInstance(Landroid/content/Context;Lcom/google/android/datatransport/runtime/time/Clock;Lcom/google/android/datatransport/runtime/time/Clock;)Lcom/google/android/datatransport/runtime/backends/CreationContextFactory; +Lcom/google/android/datatransport/runtime/backends/MetadataBackendRegistry; +HSPLcom/google/android/datatransport/runtime/backends/MetadataBackendRegistry;->(Landroid/content/Context;Lcom/google/android/datatransport/runtime/backends/CreationContextFactory;)V +HSPLcom/google/android/datatransport/runtime/backends/MetadataBackendRegistry;->(Lcom/google/android/datatransport/runtime/backends/MetadataBackendRegistry$BackendFactoryProvider;Lcom/google/android/datatransport/runtime/backends/CreationContextFactory;)V +Lcom/google/android/datatransport/runtime/backends/MetadataBackendRegistry$BackendFactoryProvider; +HSPLcom/google/android/datatransport/runtime/backends/MetadataBackendRegistry$BackendFactoryProvider;->(Landroid/content/Context;)V +Lcom/google/android/datatransport/runtime/backends/MetadataBackendRegistry_Factory; +HSPLcom/google/android/datatransport/runtime/backends/MetadataBackendRegistry_Factory;->(Ljavax/inject/Provider;Ljavax/inject/Provider;)V +HSPLcom/google/android/datatransport/runtime/backends/MetadataBackendRegistry_Factory;->create(Ljavax/inject/Provider;Ljavax/inject/Provider;)Lcom/google/android/datatransport/runtime/backends/MetadataBackendRegistry_Factory; +HSPLcom/google/android/datatransport/runtime/backends/MetadataBackendRegistry_Factory;->get()Lcom/google/android/datatransport/runtime/backends/MetadataBackendRegistry; +HSPLcom/google/android/datatransport/runtime/backends/MetadataBackendRegistry_Factory;->get()Ljava/lang/Object; +HSPLcom/google/android/datatransport/runtime/backends/MetadataBackendRegistry_Factory;->newInstance(Landroid/content/Context;Ljava/lang/Object;)Lcom/google/android/datatransport/runtime/backends/MetadataBackendRegistry; +Lcom/google/android/datatransport/runtime/dagger/Lazy; +Lcom/google/android/datatransport/runtime/dagger/internal/DoubleCheck; +HSPLcom/google/android/datatransport/runtime/dagger/internal/DoubleCheck;->()V +HSPLcom/google/android/datatransport/runtime/dagger/internal/DoubleCheck;->(Ljavax/inject/Provider;)V +HSPLcom/google/android/datatransport/runtime/dagger/internal/DoubleCheck;->get()Ljava/lang/Object; +HSPLcom/google/android/datatransport/runtime/dagger/internal/DoubleCheck;->provider(Ljavax/inject/Provider;)Ljavax/inject/Provider; +HSPLcom/google/android/datatransport/runtime/dagger/internal/DoubleCheck;->reentrantCheck(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/google/android/datatransport/runtime/dagger/internal/Factory; +Lcom/google/android/datatransport/runtime/dagger/internal/InstanceFactory; +HSPLcom/google/android/datatransport/runtime/dagger/internal/InstanceFactory;->()V +HSPLcom/google/android/datatransport/runtime/dagger/internal/InstanceFactory;->(Ljava/lang/Object;)V +HSPLcom/google/android/datatransport/runtime/dagger/internal/InstanceFactory;->create(Ljava/lang/Object;)Lcom/google/android/datatransport/runtime/dagger/internal/Factory; +HSPLcom/google/android/datatransport/runtime/dagger/internal/InstanceFactory;->get()Ljava/lang/Object; +Lcom/google/android/datatransport/runtime/dagger/internal/Preconditions; +HSPLcom/google/android/datatransport/runtime/dagger/internal/Preconditions;->checkBuilderRequirement(Ljava/lang/Object;Ljava/lang/Class;)V +HSPLcom/google/android/datatransport/runtime/dagger/internal/Preconditions;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/android/datatransport/runtime/dagger/internal/Preconditions;->checkNotNull(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object; +Lcom/google/android/datatransport/runtime/scheduling/DefaultScheduler; +HSPLcom/google/android/datatransport/runtime/scheduling/DefaultScheduler;->()V +HSPLcom/google/android/datatransport/runtime/scheduling/DefaultScheduler;->(Ljava/util/concurrent/Executor;Lcom/google/android/datatransport/runtime/backends/BackendRegistry;Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkScheduler;Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStore;Lcom/google/android/datatransport/runtime/synchronization/SynchronizationGuard;)V +Lcom/google/android/datatransport/runtime/scheduling/DefaultScheduler_Factory; +HSPLcom/google/android/datatransport/runtime/scheduling/DefaultScheduler_Factory;->(Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;)V +HSPLcom/google/android/datatransport/runtime/scheduling/DefaultScheduler_Factory;->create(Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;)Lcom/google/android/datatransport/runtime/scheduling/DefaultScheduler_Factory; +HSPLcom/google/android/datatransport/runtime/scheduling/DefaultScheduler_Factory;->get()Lcom/google/android/datatransport/runtime/scheduling/DefaultScheduler; +HSPLcom/google/android/datatransport/runtime/scheduling/DefaultScheduler_Factory;->get()Ljava/lang/Object; +HSPLcom/google/android/datatransport/runtime/scheduling/DefaultScheduler_Factory;->newInstance(Ljava/util/concurrent/Executor;Lcom/google/android/datatransport/runtime/backends/BackendRegistry;Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkScheduler;Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStore;Lcom/google/android/datatransport/runtime/synchronization/SynchronizationGuard;)Lcom/google/android/datatransport/runtime/scheduling/DefaultScheduler; +Lcom/google/android/datatransport/runtime/scheduling/Scheduler; +Lcom/google/android/datatransport/runtime/scheduling/SchedulingConfigModule; +HSPLcom/google/android/datatransport/runtime/scheduling/SchedulingConfigModule;->config(Lcom/google/android/datatransport/runtime/time/Clock;)Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig; +Lcom/google/android/datatransport/runtime/scheduling/SchedulingConfigModule_ConfigFactory; +HSPLcom/google/android/datatransport/runtime/scheduling/SchedulingConfigModule_ConfigFactory;->(Ljavax/inject/Provider;)V +HSPLcom/google/android/datatransport/runtime/scheduling/SchedulingConfigModule_ConfigFactory;->config(Lcom/google/android/datatransport/runtime/time/Clock;)Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig; +HSPLcom/google/android/datatransport/runtime/scheduling/SchedulingConfigModule_ConfigFactory;->create(Ljavax/inject/Provider;)Lcom/google/android/datatransport/runtime/scheduling/SchedulingConfigModule_ConfigFactory; +HSPLcom/google/android/datatransport/runtime/scheduling/SchedulingConfigModule_ConfigFactory;->get()Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig; +HSPLcom/google/android/datatransport/runtime/scheduling/SchedulingConfigModule_ConfigFactory;->get()Ljava/lang/Object; +Lcom/google/android/datatransport/runtime/scheduling/SchedulingModule; +HSPLcom/google/android/datatransport/runtime/scheduling/SchedulingModule;->workScheduler(Landroid/content/Context;Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStore;Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig;Lcom/google/android/datatransport/runtime/time/Clock;)Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkScheduler; +Lcom/google/android/datatransport/runtime/scheduling/SchedulingModule_WorkSchedulerFactory; +HSPLcom/google/android/datatransport/runtime/scheduling/SchedulingModule_WorkSchedulerFactory;->(Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;)V +HSPLcom/google/android/datatransport/runtime/scheduling/SchedulingModule_WorkSchedulerFactory;->create(Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;)Lcom/google/android/datatransport/runtime/scheduling/SchedulingModule_WorkSchedulerFactory; +HSPLcom/google/android/datatransport/runtime/scheduling/SchedulingModule_WorkSchedulerFactory;->get()Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkScheduler; +HSPLcom/google/android/datatransport/runtime/scheduling/SchedulingModule_WorkSchedulerFactory;->get()Ljava/lang/Object; +HSPLcom/google/android/datatransport/runtime/scheduling/SchedulingModule_WorkSchedulerFactory;->workScheduler(Landroid/content/Context;Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStore;Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig;Lcom/google/android/datatransport/runtime/time/Clock;)Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkScheduler; +Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/AutoValue_SchedulerConfig; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/AutoValue_SchedulerConfig;->(Lcom/google/android/datatransport/runtime/time/Clock;Ljava/util/Map;)V +Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/AutoValue_SchedulerConfig_ConfigValue; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/AutoValue_SchedulerConfig_ConfigValue;->(JJLjava/util/Set;)V +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/AutoValue_SchedulerConfig_ConfigValue;->(JJLjava/util/Set;Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/AutoValue_SchedulerConfig_ConfigValue$1;)V +Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/AutoValue_SchedulerConfig_ConfigValue$Builder; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/AutoValue_SchedulerConfig_ConfigValue$Builder;->()V +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/AutoValue_SchedulerConfig_ConfigValue$Builder;->build()Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig$ConfigValue; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/AutoValue_SchedulerConfig_ConfigValue$Builder;->setDelta(J)Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig$ConfigValue$Builder; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/AutoValue_SchedulerConfig_ConfigValue$Builder;->setFlags(Ljava/util/Set;)Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig$ConfigValue$Builder; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/AutoValue_SchedulerConfig_ConfigValue$Builder;->setMaxAllowedDelay(J)Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig$ConfigValue$Builder; +Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/JobInfoScheduler; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/JobInfoScheduler;->(Landroid/content/Context;Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStore;Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig;)V +Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig;->()V +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig;->builder()Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig$Builder; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig;->create(Lcom/google/android/datatransport/runtime/time/Clock;Ljava/util/Map;)Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig;->getDefault(Lcom/google/android/datatransport/runtime/time/Clock;)Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig;->immutableSetOf([Ljava/lang/Object;)Ljava/util/Set; +Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig$Builder; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig$Builder;->()V +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig$Builder;->addConfig(Lcom/google/android/datatransport/Priority;Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig$ConfigValue;)Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig$Builder; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig$Builder;->build()Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig$Builder;->setClock(Lcom/google/android/datatransport/runtime/time/Clock;)Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig$Builder; +Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig$ConfigValue; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig$ConfigValue;->()V +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig$ConfigValue;->builder()Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig$ConfigValue$Builder; +Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig$ConfigValue$Builder; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig$ConfigValue$Builder;->()V +Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig$Flag; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig$Flag;->()V +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig$Flag;->(Ljava/lang/String;I)V +Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/Uploader; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/Uploader;->(Landroid/content/Context;Lcom/google/android/datatransport/runtime/backends/BackendRegistry;Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStore;Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkScheduler;Ljava/util/concurrent/Executor;Lcom/google/android/datatransport/runtime/synchronization/SynchronizationGuard;Lcom/google/android/datatransport/runtime/time/Clock;Lcom/google/android/datatransport/runtime/time/Clock;Lcom/google/android/datatransport/runtime/scheduling/persistence/ClientHealthMetricsStore;)V +Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/Uploader_Factory; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/Uploader_Factory;->(Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;)V +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/Uploader_Factory;->create(Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;)Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/Uploader_Factory; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/Uploader_Factory;->get()Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/Uploader; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/Uploader_Factory;->get()Ljava/lang/Object; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/Uploader_Factory;->newInstance(Landroid/content/Context;Lcom/google/android/datatransport/runtime/backends/BackendRegistry;Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStore;Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkScheduler;Ljava/util/concurrent/Executor;Lcom/google/android/datatransport/runtime/synchronization/SynchronizationGuard;Lcom/google/android/datatransport/runtime/time/Clock;Lcom/google/android/datatransport/runtime/time/Clock;Lcom/google/android/datatransport/runtime/scheduling/persistence/ClientHealthMetricsStore;)Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/Uploader; +Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkInitializer; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkInitializer;->(Ljava/util/concurrent/Executor;Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStore;Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkScheduler;Lcom/google/android/datatransport/runtime/synchronization/SynchronizationGuard;)V +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkInitializer;->ensureContextsScheduled()V +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkInitializer;->lambda$ensureContextsScheduled$0$com-google-android-datatransport-runtime-scheduling-jobscheduling-WorkInitializer()Ljava/lang/Object; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkInitializer;->lambda$ensureContextsScheduled$1$com-google-android-datatransport-runtime-scheduling-jobscheduling-WorkInitializer()V +Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkInitializer$$ExternalSyntheticLambda0; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkInitializer$$ExternalSyntheticLambda0;->(Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkInitializer;)V +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkInitializer$$ExternalSyntheticLambda0;->execute()Ljava/lang/Object; +Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkInitializer$$ExternalSyntheticLambda1; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkInitializer$$ExternalSyntheticLambda1;->(Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkInitializer;)V +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkInitializer$$ExternalSyntheticLambda1;->run()V +Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkInitializer_Factory; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkInitializer_Factory;->(Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;)V +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkInitializer_Factory;->create(Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;)Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkInitializer_Factory; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkInitializer_Factory;->get()Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkInitializer; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkInitializer_Factory;->get()Ljava/lang/Object; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkInitializer_Factory;->newInstance(Ljava/util/concurrent/Executor;Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStore;Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkScheduler;Lcom/google/android/datatransport/runtime/synchronization/SynchronizationGuard;)Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkInitializer; +Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkScheduler; +Lcom/google/android/datatransport/runtime/scheduling/persistence/AutoValue_EventStoreConfig; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/AutoValue_EventStoreConfig;->(JIIJI)V +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/AutoValue_EventStoreConfig;->(JIIJILcom/google/android/datatransport/runtime/scheduling/persistence/AutoValue_EventStoreConfig$1;)V +Lcom/google/android/datatransport/runtime/scheduling/persistence/AutoValue_EventStoreConfig$Builder; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/AutoValue_EventStoreConfig$Builder;->()V +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/AutoValue_EventStoreConfig$Builder;->build()Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreConfig; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/AutoValue_EventStoreConfig$Builder;->setCriticalSectionEnterTimeoutMs(I)Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreConfig$Builder; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/AutoValue_EventStoreConfig$Builder;->setEventCleanUpAge(J)Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreConfig$Builder; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/AutoValue_EventStoreConfig$Builder;->setLoadBatchSize(I)Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreConfig$Builder; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/AutoValue_EventStoreConfig$Builder;->setMaxBlobByteSizePerRow(I)Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreConfig$Builder; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/AutoValue_EventStoreConfig$Builder;->setMaxStorageSizeInBytes(J)Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreConfig$Builder; +Lcom/google/android/datatransport/runtime/scheduling/persistence/ClientHealthMetricsStore; +Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStore; +Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreConfig; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreConfig;->()V +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreConfig;->()V +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreConfig;->builder()Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreConfig$Builder; +Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreConfig$Builder; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreConfig$Builder;->()V +Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule;->dbName()Ljava/lang/String; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule;->schemaVersion()I +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule;->storeConfig()Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreConfig; +Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_DbNameFactory; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_DbNameFactory;->()V +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_DbNameFactory;->create()Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_DbNameFactory; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_DbNameFactory;->dbName()Ljava/lang/String; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_DbNameFactory;->get()Ljava/lang/Object; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_DbNameFactory;->get()Ljava/lang/String; +Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_DbNameFactory$InstanceHolder; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_DbNameFactory$InstanceHolder;->()V +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_DbNameFactory$InstanceHolder;->access$000()Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_DbNameFactory; +Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_PackageNameFactory; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_PackageNameFactory;->(Ljavax/inject/Provider;)V +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_PackageNameFactory;->create(Ljavax/inject/Provider;)Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_PackageNameFactory; +Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_SchemaVersionFactory; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_SchemaVersionFactory;->()V +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_SchemaVersionFactory;->create()Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_SchemaVersionFactory; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_SchemaVersionFactory;->get()Ljava/lang/Integer; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_SchemaVersionFactory;->get()Ljava/lang/Object; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_SchemaVersionFactory;->schemaVersion()I +Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_SchemaVersionFactory$InstanceHolder; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_SchemaVersionFactory$InstanceHolder;->()V +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_SchemaVersionFactory$InstanceHolder;->access$000()Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_SchemaVersionFactory; +Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_StoreConfigFactory; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_StoreConfigFactory;->()V +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_StoreConfigFactory;->create()Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_StoreConfigFactory; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_StoreConfigFactory;->get()Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreConfig; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_StoreConfigFactory;->get()Ljava/lang/Object; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_StoreConfigFactory;->storeConfig()Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreConfig; +Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_StoreConfigFactory$InstanceHolder; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_StoreConfigFactory$InstanceHolder;->()V +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_StoreConfigFactory$InstanceHolder;->access$000()Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_StoreConfigFactory; +Lcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore;->()V +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore;->(Lcom/google/android/datatransport/runtime/time/Clock;Lcom/google/android/datatransport/runtime/time/Clock;Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreConfig;Lcom/google/android/datatransport/runtime/scheduling/persistence/SchemaManager;Ljavax/inject/Provider;)V +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore;->ensureBeginTransaction(Landroid/database/sqlite/SQLiteDatabase;)V +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore;->getDb()Landroid/database/sqlite/SQLiteDatabase; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore;->inTransaction(Lcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore$Function;)Ljava/lang/Object; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore;->lambda$ensureBeginTransaction$24(Landroid/database/sqlite/SQLiteDatabase;)Ljava/lang/Object; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore;->lambda$loadActiveContexts$10(Landroid/database/sqlite/SQLiteDatabase;)Ljava/util/List; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore;->lambda$loadActiveContexts$9(Landroid/database/Cursor;)Ljava/util/List; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore;->loadActiveContexts()Ljava/lang/Iterable; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore;->retryIfDbLocked(Lcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore$Producer;Lcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore$Function;)Ljava/lang/Object; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore;->runCriticalSection(Lcom/google/android/datatransport/runtime/synchronization/SynchronizationGuard$CriticalSection;)Ljava/lang/Object; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore;->tryWithCursor(Landroid/database/Cursor;Lcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore$Function;)Ljava/lang/Object; +Lcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore$$ExternalSyntheticLambda10; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore$$ExternalSyntheticLambda10;->(Landroid/database/sqlite/SQLiteDatabase;)V +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore$$ExternalSyntheticLambda10;->produce()Ljava/lang/Object; +Lcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore$$ExternalSyntheticLambda12; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore$$ExternalSyntheticLambda12;->()V +Lcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore$$ExternalSyntheticLambda15; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore$$ExternalSyntheticLambda15;->()V +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore$$ExternalSyntheticLambda15;->apply(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore$$ExternalSyntheticLambda2; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore$$ExternalSyntheticLambda2;->(Lcom/google/android/datatransport/runtime/scheduling/persistence/SchemaManager;)V +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore$$ExternalSyntheticLambda2;->produce()Ljava/lang/Object; +Lcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore$$ExternalSyntheticLambda24; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore$$ExternalSyntheticLambda24;->()V +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore$$ExternalSyntheticLambda24;->apply(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore$$ExternalSyntheticLambda3; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore$$ExternalSyntheticLambda3;->()V +Lcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore$Function; +Lcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore$Producer; +Lcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore_Factory; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore_Factory;->(Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;)V +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore_Factory;->create(Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;)Lcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore_Factory; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore_Factory;->get()Lcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore_Factory;->get()Ljava/lang/Object; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore_Factory;->newInstance(Lcom/google/android/datatransport/runtime/time/Clock;Lcom/google/android/datatransport/runtime/time/Clock;Ljava/lang/Object;Ljava/lang/Object;Ljavax/inject/Provider;)Lcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore; +Lcom/google/android/datatransport/runtime/scheduling/persistence/SchemaManager; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SchemaManager;->()V +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SchemaManager;->(Landroid/content/Context;Ljava/lang/String;I)V +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SchemaManager;->ensureConfigured(Landroid/database/sqlite/SQLiteDatabase;)V +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SchemaManager;->onConfigure(Landroid/database/sqlite/SQLiteDatabase;)V +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SchemaManager;->onOpen(Landroid/database/sqlite/SQLiteDatabase;)V +Lcom/google/android/datatransport/runtime/scheduling/persistence/SchemaManager$$ExternalSyntheticLambda0; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SchemaManager$$ExternalSyntheticLambda0;->()V +Lcom/google/android/datatransport/runtime/scheduling/persistence/SchemaManager$$ExternalSyntheticLambda1; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SchemaManager$$ExternalSyntheticLambda1;->()V +Lcom/google/android/datatransport/runtime/scheduling/persistence/SchemaManager$$ExternalSyntheticLambda2; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SchemaManager$$ExternalSyntheticLambda2;->()V +Lcom/google/android/datatransport/runtime/scheduling/persistence/SchemaManager$$ExternalSyntheticLambda3; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SchemaManager$$ExternalSyntheticLambda3;->()V +Lcom/google/android/datatransport/runtime/scheduling/persistence/SchemaManager$$ExternalSyntheticLambda4; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SchemaManager$$ExternalSyntheticLambda4;->()V +Lcom/google/android/datatransport/runtime/scheduling/persistence/SchemaManager$Migration; +Lcom/google/android/datatransport/runtime/scheduling/persistence/SchemaManager_Factory; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SchemaManager_Factory;->(Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;)V +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SchemaManager_Factory;->create(Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;)Lcom/google/android/datatransport/runtime/scheduling/persistence/SchemaManager_Factory; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SchemaManager_Factory;->get()Lcom/google/android/datatransport/runtime/scheduling/persistence/SchemaManager; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SchemaManager_Factory;->get()Ljava/lang/Object; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SchemaManager_Factory;->newInstance(Landroid/content/Context;Ljava/lang/String;I)Lcom/google/android/datatransport/runtime/scheduling/persistence/SchemaManager; +Lcom/google/android/datatransport/runtime/synchronization/SynchronizationException; +Lcom/google/android/datatransport/runtime/synchronization/SynchronizationGuard; +Lcom/google/android/datatransport/runtime/synchronization/SynchronizationGuard$CriticalSection; +Lcom/google/android/datatransport/runtime/time/Clock; +Lcom/google/android/datatransport/runtime/time/TimeModule; +HSPLcom/google/android/datatransport/runtime/time/TimeModule;->eventClock()Lcom/google/android/datatransport/runtime/time/Clock; +HSPLcom/google/android/datatransport/runtime/time/TimeModule;->uptimeClock()Lcom/google/android/datatransport/runtime/time/Clock; +Lcom/google/android/datatransport/runtime/time/TimeModule_EventClockFactory; +HSPLcom/google/android/datatransport/runtime/time/TimeModule_EventClockFactory;->()V +HSPLcom/google/android/datatransport/runtime/time/TimeModule_EventClockFactory;->create()Lcom/google/android/datatransport/runtime/time/TimeModule_EventClockFactory; +HSPLcom/google/android/datatransport/runtime/time/TimeModule_EventClockFactory;->eventClock()Lcom/google/android/datatransport/runtime/time/Clock; +HSPLcom/google/android/datatransport/runtime/time/TimeModule_EventClockFactory;->get()Lcom/google/android/datatransport/runtime/time/Clock; +HSPLcom/google/android/datatransport/runtime/time/TimeModule_EventClockFactory;->get()Ljava/lang/Object; +Lcom/google/android/datatransport/runtime/time/TimeModule_EventClockFactory$InstanceHolder; +HSPLcom/google/android/datatransport/runtime/time/TimeModule_EventClockFactory$InstanceHolder;->()V +HSPLcom/google/android/datatransport/runtime/time/TimeModule_EventClockFactory$InstanceHolder;->access$000()Lcom/google/android/datatransport/runtime/time/TimeModule_EventClockFactory; +Lcom/google/android/datatransport/runtime/time/TimeModule_UptimeClockFactory; +HSPLcom/google/android/datatransport/runtime/time/TimeModule_UptimeClockFactory;->()V +HSPLcom/google/android/datatransport/runtime/time/TimeModule_UptimeClockFactory;->create()Lcom/google/android/datatransport/runtime/time/TimeModule_UptimeClockFactory; +HSPLcom/google/android/datatransport/runtime/time/TimeModule_UptimeClockFactory;->get()Lcom/google/android/datatransport/runtime/time/Clock; +HSPLcom/google/android/datatransport/runtime/time/TimeModule_UptimeClockFactory;->get()Ljava/lang/Object; +HSPLcom/google/android/datatransport/runtime/time/TimeModule_UptimeClockFactory;->uptimeClock()Lcom/google/android/datatransport/runtime/time/Clock; +Lcom/google/android/datatransport/runtime/time/TimeModule_UptimeClockFactory$InstanceHolder; +HSPLcom/google/android/datatransport/runtime/time/TimeModule_UptimeClockFactory$InstanceHolder;->()V +HSPLcom/google/android/datatransport/runtime/time/TimeModule_UptimeClockFactory$InstanceHolder;->access$000()Lcom/google/android/datatransport/runtime/time/TimeModule_UptimeClockFactory; +Lcom/google/android/datatransport/runtime/time/UptimeClock; +HSPLcom/google/android/datatransport/runtime/time/UptimeClock;->()V +HSPLcom/google/android/datatransport/runtime/time/UptimeClock;->getTime()J +Lcom/google/android/datatransport/runtime/time/WallTimeClock; +HSPLcom/google/android/datatransport/runtime/time/WallTimeClock;->()V +Lcom/google/android/gms/common/ConnectionResult; +HSPLcom/google/android/gms/common/ConnectionResult;->()V +HSPLcom/google/android/gms/common/ConnectionResult;->(I)V +HSPLcom/google/android/gms/common/ConnectionResult;->(IILandroid/app/PendingIntent;Ljava/lang/String;)V +HSPLcom/google/android/gms/common/ConnectionResult;->(ILandroid/app/PendingIntent;Ljava/lang/String;)V +HSPLcom/google/android/gms/common/ConnectionResult;->isSuccess()Z +Lcom/google/android/gms/common/Feature; +HSPLcom/google/android/gms/common/Feature;->()V +Lcom/google/android/gms/common/GoogleApiAvailability; +HSPLcom/google/android/gms/common/GoogleApiAvailability;->()V +HSPLcom/google/android/gms/common/GoogleApiAvailability;->()V +HSPLcom/google/android/gms/common/GoogleApiAvailability;->getInstance()Lcom/google/android/gms/common/GoogleApiAvailability; +HSPLcom/google/android/gms/common/GoogleApiAvailability;->isGooglePlayServicesAvailable(Landroid/content/Context;)I +HSPLcom/google/android/gms/common/GoogleApiAvailability;->isGooglePlayServicesAvailable(Landroid/content/Context;I)I +Lcom/google/android/gms/common/GoogleApiAvailabilityLight; +HSPLcom/google/android/gms/common/GoogleApiAvailabilityLight;->()V +HSPLcom/google/android/gms/common/GoogleApiAvailabilityLight;->()V +HSPLcom/google/android/gms/common/GoogleApiAvailabilityLight;->getInstance()Lcom/google/android/gms/common/GoogleApiAvailabilityLight; +HSPLcom/google/android/gms/common/GoogleApiAvailabilityLight;->isGooglePlayServicesAvailable(Landroid/content/Context;)I +HSPLcom/google/android/gms/common/GoogleApiAvailabilityLight;->isGooglePlayServicesAvailable(Landroid/content/Context;I)I +Lcom/google/android/gms/common/GooglePlayServicesUtilLight; +HSPLcom/google/android/gms/common/GooglePlayServicesUtilLight;->()V +HSPLcom/google/android/gms/common/GooglePlayServicesUtilLight;->isGooglePlayServicesAvailable(Landroid/content/Context;I)I +HSPLcom/google/android/gms/common/GooglePlayServicesUtilLight;->isPlayServicesPossiblyUpdating(Landroid/content/Context;I)Z +Lcom/google/android/gms/common/GoogleSignatureVerifier; +HSPLcom/google/android/gms/common/GoogleSignatureVerifier;->(Landroid/content/Context;)V +HSPLcom/google/android/gms/common/GoogleSignatureVerifier;->getInstance(Landroid/content/Context;)Lcom/google/android/gms/common/GoogleSignatureVerifier; +HSPLcom/google/android/gms/common/GoogleSignatureVerifier;->zza(Landroid/content/pm/PackageInfo;[Lcom/google/android/gms/common/zzj;)Lcom/google/android/gms/common/zzj; +HSPLcom/google/android/gms/common/GoogleSignatureVerifier;->zzb(Landroid/content/pm/PackageInfo;Z)Z +Lcom/google/android/gms/common/R$string; +Lcom/google/android/gms/common/api/Scope; +Lcom/google/android/gms/common/api/internal/BackgroundDetector; +HSPLcom/google/android/gms/common/api/internal/BackgroundDetector;->()V +HSPLcom/google/android/gms/common/api/internal/BackgroundDetector;->()V +HSPLcom/google/android/gms/common/api/internal/BackgroundDetector;->addListener(Lcom/google/android/gms/common/api/internal/BackgroundDetector$BackgroundStateChangeListener;)V +HSPLcom/google/android/gms/common/api/internal/BackgroundDetector;->getInstance()Lcom/google/android/gms/common/api/internal/BackgroundDetector; +HSPLcom/google/android/gms/common/api/internal/BackgroundDetector;->initialize(Landroid/app/Application;)V +HSPLcom/google/android/gms/common/api/internal/BackgroundDetector;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V +HSPLcom/google/android/gms/common/api/internal/BackgroundDetector;->onActivityResumed(Landroid/app/Activity;)V +HSPLcom/google/android/gms/common/api/internal/BackgroundDetector;->onActivityStarted(Landroid/app/Activity;)V +Lcom/google/android/gms/common/api/internal/BackgroundDetector$BackgroundStateChangeListener; +Lcom/google/android/gms/common/internal/BaseGmsClient; +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->()V +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->(Landroid/content/Context;Landroid/os/Looper;ILcom/google/android/gms/common/internal/BaseGmsClient$BaseConnectionCallbacks;Lcom/google/android/gms/common/internal/BaseGmsClient$BaseOnConnectionFailedListener;Ljava/lang/String;)V +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->(Landroid/content/Context;Landroid/os/Looper;Lcom/google/android/gms/common/internal/GmsClientSupervisor;Lcom/google/android/gms/common/GoogleApiAvailabilityLight;ILcom/google/android/gms/common/internal/BaseGmsClient$BaseConnectionCallbacks;Lcom/google/android/gms/common/internal/BaseGmsClient$BaseOnConnectionFailedListener;Ljava/lang/String;)V +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->checkAvailabilityAndConnect()V +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->checkConnected()V +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->connect(Lcom/google/android/gms/common/internal/BaseGmsClient$ConnectionProgressReportCallbacks;)V +PLcom/google/android/gms/common/internal/BaseGmsClient;->disconnect()V +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->getApiFeatures()[Lcom/google/android/gms/common/Feature; +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->getBindServiceExecutor()Ljava/util/concurrent/Executor; +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->getConnectionHint()Landroid/os/Bundle; +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->getGetServiceRequestExtraArgs()Landroid/os/Bundle; +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->getRemoteService(Lcom/google/android/gms/common/internal/IAccountAccessor;Ljava/util/Set;)V +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->getScopes()Ljava/util/Set; +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->getService()Landroid/os/IInterface; +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->getStartServicePackage()Ljava/lang/String; +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->getUseDynamicLookup()Z +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->isConnected()Z +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->isConnecting()Z +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->onConnectedLocked(Landroid/os/IInterface;)V +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->onPostInitHandler(ILandroid/os/IBinder;Landroid/os/Bundle;I)V +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->requiresAccount()Z +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->requiresSignIn()Z +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->usesClientTelemetry()Z +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->zzb(Lcom/google/android/gms/common/internal/BaseGmsClient;)Lcom/google/android/gms/common/internal/BaseGmsClient$BaseConnectionCallbacks; +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->zzd(Lcom/google/android/gms/common/internal/BaseGmsClient;)Ljava/lang/Object; +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->zze()Ljava/lang/String; +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->zzf(Lcom/google/android/gms/common/internal/BaseGmsClient;)Ljava/util/ArrayList; +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->zzg(Lcom/google/android/gms/common/internal/BaseGmsClient;Lcom/google/android/gms/common/ConnectionResult;)V +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->zzh(Lcom/google/android/gms/common/internal/BaseGmsClient;Lcom/google/android/gms/common/internal/IGmsServiceBroker;)V +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->zzj(Lcom/google/android/gms/common/internal/BaseGmsClient;Lcom/google/android/gms/common/internal/zzj;)V +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->zzl(ILandroid/os/Bundle;I)V +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->zzn(Lcom/google/android/gms/common/internal/BaseGmsClient;IILandroid/os/IInterface;)Z +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->zzp(ILandroid/os/IInterface;)V +Lcom/google/android/gms/common/internal/BaseGmsClient$BaseConnectionCallbacks; +Lcom/google/android/gms/common/internal/BaseGmsClient$BaseOnConnectionFailedListener; +Lcom/google/android/gms/common/internal/BaseGmsClient$ConnectionProgressReportCallbacks; +Lcom/google/android/gms/common/internal/BaseGmsClient$LegacyClientCallbackAdapter; +HSPLcom/google/android/gms/common/internal/BaseGmsClient$LegacyClientCallbackAdapter;->(Lcom/google/android/gms/common/internal/BaseGmsClient;)V +HSPLcom/google/android/gms/common/internal/BaseGmsClient$LegacyClientCallbackAdapter;->onReportServiceBinding(Lcom/google/android/gms/common/ConnectionResult;)V +Lcom/google/android/gms/common/internal/ConnectionTelemetryConfiguration; +Lcom/google/android/gms/common/internal/GetServiceRequest; +HSPLcom/google/android/gms/common/internal/GetServiceRequest;->()V +HSPLcom/google/android/gms/common/internal/GetServiceRequest;->(IIILjava/lang/String;Landroid/os/IBinder;[Lcom/google/android/gms/common/api/Scope;Landroid/os/Bundle;Landroid/accounts/Account;[Lcom/google/android/gms/common/Feature;[Lcom/google/android/gms/common/Feature;ZIZLjava/lang/String;)V +HSPLcom/google/android/gms/common/internal/GetServiceRequest;->zza()Ljava/lang/String; +Lcom/google/android/gms/common/internal/GmsClientSupervisor; +HSPLcom/google/android/gms/common/internal/GmsClientSupervisor;->()V +HSPLcom/google/android/gms/common/internal/GmsClientSupervisor;->()V +HSPLcom/google/android/gms/common/internal/GmsClientSupervisor;->getDefaultBindFlags()I +HSPLcom/google/android/gms/common/internal/GmsClientSupervisor;->getInstance(Landroid/content/Context;)Lcom/google/android/gms/common/internal/GmsClientSupervisor; +PLcom/google/android/gms/common/internal/GmsClientSupervisor;->zzb(Ljava/lang/String;Ljava/lang/String;ILandroid/content/ServiceConnection;Ljava/lang/String;Z)V +Lcom/google/android/gms/common/internal/IGmsCallbacks; +Lcom/google/android/gms/common/internal/IGmsServiceBroker; +Lcom/google/android/gms/common/internal/Objects; +HSPLcom/google/android/gms/common/internal/Objects;->equal(Ljava/lang/Object;Ljava/lang/Object;)Z +HSPLcom/google/android/gms/common/internal/Objects;->hashCode([Ljava/lang/Object;)I +Lcom/google/android/gms/common/internal/Preconditions; +HSPLcom/google/android/gms/common/internal/Preconditions;->checkArgument(Z)V +HSPLcom/google/android/gms/common/internal/Preconditions;->checkMainThread(Ljava/lang/String;)V +HSPLcom/google/android/gms/common/internal/Preconditions;->checkNotEmpty(Ljava/lang/String;)Ljava/lang/String; +HSPLcom/google/android/gms/common/internal/Preconditions;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/android/gms/common/internal/Preconditions;->checkNotNull(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/android/gms/common/internal/Preconditions;->checkState(Z)V +HSPLcom/google/android/gms/common/internal/Preconditions;->checkState(ZLjava/lang/Object;)V +Lcom/google/android/gms/common/internal/ReflectedParcelable; +Lcom/google/android/gms/common/internal/StringResourceValueReader; +HSPLcom/google/android/gms/common/internal/StringResourceValueReader;->(Landroid/content/Context;)V +HSPLcom/google/android/gms/common/internal/StringResourceValueReader;->getString(Ljava/lang/String;)Ljava/lang/String; +Lcom/google/android/gms/common/internal/safeparcel/AbstractSafeParcelable; +HSPLcom/google/android/gms/common/internal/safeparcel/AbstractSafeParcelable;->()V +Lcom/google/android/gms/common/internal/safeparcel/SafeParcelReader; +HSPLcom/google/android/gms/common/internal/safeparcel/SafeParcelReader;->createTypedArray(Landroid/os/Parcel;ILandroid/os/Parcelable$Creator;)[Ljava/lang/Object; +HSPLcom/google/android/gms/common/internal/safeparcel/SafeParcelReader;->ensureAtEnd(Landroid/os/Parcel;I)V +HSPLcom/google/android/gms/common/internal/safeparcel/SafeParcelReader;->getFieldId(I)I +HSPLcom/google/android/gms/common/internal/safeparcel/SafeParcelReader;->readHeader(Landroid/os/Parcel;)I +HSPLcom/google/android/gms/common/internal/safeparcel/SafeParcelReader;->readInt(Landroid/os/Parcel;I)I +HSPLcom/google/android/gms/common/internal/safeparcel/SafeParcelReader;->readSize(Landroid/os/Parcel;I)I +HSPLcom/google/android/gms/common/internal/safeparcel/SafeParcelReader;->validateObjectHeader(Landroid/os/Parcel;)I +HSPLcom/google/android/gms/common/internal/safeparcel/SafeParcelReader;->zzb(Landroid/os/Parcel;II)V +Lcom/google/android/gms/common/internal/safeparcel/SafeParcelReader$ParseException; +Lcom/google/android/gms/common/internal/safeparcel/SafeParcelWriter; +HSPLcom/google/android/gms/common/internal/safeparcel/SafeParcelWriter;->beginObjectHeader(Landroid/os/Parcel;)I +HSPLcom/google/android/gms/common/internal/safeparcel/SafeParcelWriter;->finishObjectHeader(Landroid/os/Parcel;I)V +HSPLcom/google/android/gms/common/internal/safeparcel/SafeParcelWriter;->writeBoolean(Landroid/os/Parcel;IZ)V +HSPLcom/google/android/gms/common/internal/safeparcel/SafeParcelWriter;->writeBooleanObject(Landroid/os/Parcel;ILjava/lang/Boolean;Z)V +HSPLcom/google/android/gms/common/internal/safeparcel/SafeParcelWriter;->writeBundle(Landroid/os/Parcel;ILandroid/os/Bundle;Z)V +HSPLcom/google/android/gms/common/internal/safeparcel/SafeParcelWriter;->writeIBinder(Landroid/os/Parcel;ILandroid/os/IBinder;Z)V +HSPLcom/google/android/gms/common/internal/safeparcel/SafeParcelWriter;->writeInt(Landroid/os/Parcel;II)V +HSPLcom/google/android/gms/common/internal/safeparcel/SafeParcelWriter;->writeLong(Landroid/os/Parcel;IJ)V +HSPLcom/google/android/gms/common/internal/safeparcel/SafeParcelWriter;->writeParcelable(Landroid/os/Parcel;ILandroid/os/Parcelable;IZ)V +HSPLcom/google/android/gms/common/internal/safeparcel/SafeParcelWriter;->writeString(Landroid/os/Parcel;ILjava/lang/String;Z)V +HSPLcom/google/android/gms/common/internal/safeparcel/SafeParcelWriter;->writeStringList(Landroid/os/Parcel;ILjava/util/List;Z)V +HSPLcom/google/android/gms/common/internal/safeparcel/SafeParcelWriter;->writeTypedArray(Landroid/os/Parcel;I[Landroid/os/Parcelable;IZ)V +HSPLcom/google/android/gms/common/internal/safeparcel/SafeParcelWriter;->zza(Landroid/os/Parcel;I)I +HSPLcom/google/android/gms/common/internal/safeparcel/SafeParcelWriter;->zzb(Landroid/os/Parcel;I)V +HSPLcom/google/android/gms/common/internal/safeparcel/SafeParcelWriter;->zzc(Landroid/os/Parcel;II)V +Lcom/google/android/gms/common/internal/safeparcel/SafeParcelable; +Lcom/google/android/gms/common/internal/zza; +HSPLcom/google/android/gms/common/internal/zza;->(Lcom/google/android/gms/common/internal/BaseGmsClient;ILandroid/os/Bundle;)V +HSPLcom/google/android/gms/common/internal/zza;->zza(Ljava/lang/Object;)V +Lcom/google/android/gms/common/internal/zzab; +HSPLcom/google/android/gms/common/internal/zzab;->()V +HSPLcom/google/android/gms/common/internal/zzab;->zza(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z +Lcom/google/android/gms/common/internal/zzac; +HSPLcom/google/android/gms/common/internal/zzac;->(Landroid/os/IBinder;)V +HSPLcom/google/android/gms/common/internal/zzac;->getService(Lcom/google/android/gms/common/internal/IGmsCallbacks;Lcom/google/android/gms/common/internal/GetServiceRequest;)V +Lcom/google/android/gms/common/internal/zzag; +HSPLcom/google/android/gms/common/internal/zzag;->()V +HSPLcom/google/android/gms/common/internal/zzag;->zza(Landroid/content/Context;)I +HSPLcom/google/android/gms/common/internal/zzag;->zzc(Landroid/content/Context;)V +Lcom/google/android/gms/common/internal/zzb; +HSPLcom/google/android/gms/common/internal/zzb;->(Lcom/google/android/gms/common/internal/BaseGmsClient;Landroid/os/Looper;)V +HSPLcom/google/android/gms/common/internal/zzb;->handleMessage(Landroid/os/Message;)V +HSPLcom/google/android/gms/common/internal/zzb;->zzb(Landroid/os/Message;)Z +Lcom/google/android/gms/common/internal/zzc; +HSPLcom/google/android/gms/common/internal/zzc;->(Lcom/google/android/gms/common/internal/BaseGmsClient;Ljava/lang/Object;)V +HSPLcom/google/android/gms/common/internal/zzc;->zze()V +HSPLcom/google/android/gms/common/internal/zzc;->zzf()V +HSPLcom/google/android/gms/common/internal/zzc;->zzg()V +Lcom/google/android/gms/common/internal/zzd; +HSPLcom/google/android/gms/common/internal/zzd;->(Lcom/google/android/gms/common/internal/BaseGmsClient;I)V +HSPLcom/google/android/gms/common/internal/zzd;->onPostInitComplete(ILandroid/os/IBinder;Landroid/os/Bundle;)V +HSPLcom/google/android/gms/common/internal/zzd;->zzc(ILandroid/os/IBinder;Lcom/google/android/gms/common/internal/zzj;)V +Lcom/google/android/gms/common/internal/zze; +HSPLcom/google/android/gms/common/internal/zze;->(Lcom/google/android/gms/common/internal/BaseGmsClient;I)V +HSPLcom/google/android/gms/common/internal/zze;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V +Lcom/google/android/gms/common/internal/zzf; +HSPLcom/google/android/gms/common/internal/zzf;->(Lcom/google/android/gms/common/internal/BaseGmsClient;ILandroid/os/IBinder;Landroid/os/Bundle;)V +HSPLcom/google/android/gms/common/internal/zzf;->zzd()Z +Lcom/google/android/gms/common/internal/zzg; +HSPLcom/google/android/gms/common/internal/zzg;->(Lcom/google/android/gms/common/internal/BaseGmsClient;ILandroid/os/Bundle;)V +HSPLcom/google/android/gms/common/internal/zzg;->zzd()Z +Lcom/google/android/gms/common/internal/zzj; +HSPLcom/google/android/gms/common/internal/zzj;->()V +HSPLcom/google/android/gms/common/internal/zzj;->(Landroid/os/Bundle;[Lcom/google/android/gms/common/Feature;ILcom/google/android/gms/common/internal/ConnectionTelemetryConfiguration;)V +Lcom/google/android/gms/common/internal/zzk; +HSPLcom/google/android/gms/common/internal/zzk;->()V +HSPLcom/google/android/gms/common/internal/zzk;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object; +Lcom/google/android/gms/common/internal/zzm; +HSPLcom/google/android/gms/common/internal/zzm;->()V +HSPLcom/google/android/gms/common/internal/zzm;->zza(Lcom/google/android/gms/common/internal/GetServiceRequest;Landroid/os/Parcel;I)V +Lcom/google/android/gms/common/internal/zzn; +HSPLcom/google/android/gms/common/internal/zzn;->()V +HSPLcom/google/android/gms/common/internal/zzn;->(Ljava/lang/String;Ljava/lang/String;IZ)V +PLcom/google/android/gms/common/internal/zzn;->equals(Ljava/lang/Object;)Z +HSPLcom/google/android/gms/common/internal/zzn;->hashCode()I +HSPLcom/google/android/gms/common/internal/zzn;->zza()I +HSPLcom/google/android/gms/common/internal/zzn;->zzc(Landroid/content/Context;)Landroid/content/Intent; +Lcom/google/android/gms/common/internal/zzo; +HSPLcom/google/android/gms/common/internal/zzo;->(Lcom/google/android/gms/common/internal/zzr;Lcom/google/android/gms/common/internal/zzn;)V +HSPLcom/google/android/gms/common/internal/zzo;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V +HSPLcom/google/android/gms/common/internal/zzo;->zzd(Landroid/content/ServiceConnection;Landroid/content/ServiceConnection;Ljava/lang/String;)V +HSPLcom/google/android/gms/common/internal/zzo;->zze(Ljava/lang/String;Ljava/util/concurrent/Executor;)V +PLcom/google/android/gms/common/internal/zzo;->zzf(Landroid/content/ServiceConnection;Ljava/lang/String;)V +PLcom/google/android/gms/common/internal/zzo;->zzg(Ljava/lang/String;)V +PLcom/google/android/gms/common/internal/zzo;->zzh(Landroid/content/ServiceConnection;)Z +PLcom/google/android/gms/common/internal/zzo;->zzi()Z +HSPLcom/google/android/gms/common/internal/zzo;->zzj()Z +Lcom/google/android/gms/common/internal/zzq; +HSPLcom/google/android/gms/common/internal/zzq;->(Lcom/google/android/gms/common/internal/zzr;Lcom/google/android/gms/common/internal/zzp;)V +PLcom/google/android/gms/common/internal/zzq;->handleMessage(Landroid/os/Message;)Z +Lcom/google/android/gms/common/internal/zzr; +HSPLcom/google/android/gms/common/internal/zzr;->(Landroid/content/Context;Landroid/os/Looper;)V +PLcom/google/android/gms/common/internal/zzr;->zza(Lcom/google/android/gms/common/internal/zzn;Landroid/content/ServiceConnection;Ljava/lang/String;)V +HSPLcom/google/android/gms/common/internal/zzr;->zzc(Lcom/google/android/gms/common/internal/zzn;Landroid/content/ServiceConnection;Ljava/lang/String;Ljava/util/concurrent/Executor;)Z +HSPLcom/google/android/gms/common/internal/zzr;->zzd(Lcom/google/android/gms/common/internal/zzr;)J +HSPLcom/google/android/gms/common/internal/zzr;->zze(Lcom/google/android/gms/common/internal/zzr;)Landroid/content/Context; +HSPLcom/google/android/gms/common/internal/zzr;->zzf(Lcom/google/android/gms/common/internal/zzr;)Landroid/os/Handler; +HSPLcom/google/android/gms/common/internal/zzr;->zzg(Lcom/google/android/gms/common/internal/zzr;)Lcom/google/android/gms/common/stats/ConnectionTracker; +HSPLcom/google/android/gms/common/internal/zzr;->zzh(Lcom/google/android/gms/common/internal/zzr;)Ljava/util/HashMap; +Lcom/google/android/gms/common/internal/zzs; +Lcom/google/android/gms/common/internal/zzu; +HSPLcom/google/android/gms/common/internal/zzu;->(Ljava/lang/String;Ljava/lang/String;ZIZ)V +HSPLcom/google/android/gms/common/internal/zzu;->zza()I +HSPLcom/google/android/gms/common/internal/zzu;->zzb()Ljava/lang/String; +HSPLcom/google/android/gms/common/internal/zzu;->zzc()Ljava/lang/String; +HSPLcom/google/android/gms/common/internal/zzu;->zzd()Z +Lcom/google/android/gms/common/internal/zzy; +HSPLcom/google/android/gms/common/internal/zzy;->()V +Lcom/google/android/gms/common/internal/zzz; +Lcom/google/android/gms/common/stats/ConnectionTracker; +HSPLcom/google/android/gms/common/stats/ConnectionTracker;->()V +HSPLcom/google/android/gms/common/stats/ConnectionTracker;->()V +HSPLcom/google/android/gms/common/stats/ConnectionTracker;->getInstance()Lcom/google/android/gms/common/stats/ConnectionTracker; +PLcom/google/android/gms/common/stats/ConnectionTracker;->unbindService(Landroid/content/Context;Landroid/content/ServiceConnection;)V +HSPLcom/google/android/gms/common/stats/ConnectionTracker;->zza(Landroid/content/Context;Ljava/lang/String;Landroid/content/Intent;Landroid/content/ServiceConnection;ILjava/util/concurrent/Executor;)Z +PLcom/google/android/gms/common/stats/ConnectionTracker;->zzb(Landroid/content/Context;Landroid/content/ServiceConnection;)V +HSPLcom/google/android/gms/common/stats/ConnectionTracker;->zzc(Landroid/content/Context;Ljava/lang/String;Landroid/content/Intent;Landroid/content/ServiceConnection;IZLjava/util/concurrent/Executor;)Z +HSPLcom/google/android/gms/common/stats/ConnectionTracker;->zzd(Landroid/content/ServiceConnection;)Z +HSPLcom/google/android/gms/common/stats/ConnectionTracker;->zze(Landroid/content/Context;Landroid/content/Intent;Landroid/content/ServiceConnection;ILjava/util/concurrent/Executor;)Z +Lcom/google/android/gms/common/util/Base64Utils; +HSPLcom/google/android/gms/common/util/Base64Utils;->encodeUrlSafeNoPadding([B)Ljava/lang/String; +Lcom/google/android/gms/common/util/Clock; +Lcom/google/android/gms/common/util/DefaultClock; +HSPLcom/google/android/gms/common/util/DefaultClock;->()V +HSPLcom/google/android/gms/common/util/DefaultClock;->()V +HSPLcom/google/android/gms/common/util/DefaultClock;->currentTimeMillis()J +HSPLcom/google/android/gms/common/util/DefaultClock;->elapsedRealtime()J +HSPLcom/google/android/gms/common/util/DefaultClock;->getInstance()Lcom/google/android/gms/common/util/Clock; +Lcom/google/android/gms/common/util/DeviceProperties; +HSPLcom/google/android/gms/common/util/DeviceProperties;->isWearable(Landroid/content/Context;)Z +HSPLcom/google/android/gms/common/util/DeviceProperties;->isWearableWithoutPlayStore(Landroid/content/Context;)Z +HSPLcom/google/android/gms/common/util/DeviceProperties;->zza(Landroid/content/Context;)Z +HSPLcom/google/android/gms/common/util/DeviceProperties;->zzb(Landroid/content/Context;)Z +Lcom/google/android/gms/common/util/PlatformVersion; +HSPLcom/google/android/gms/common/util/PlatformVersion;->isAtLeastIceCreamSandwich()Z +HSPLcom/google/android/gms/common/util/PlatformVersion;->isAtLeastKitKatWatch()Z +HSPLcom/google/android/gms/common/util/PlatformVersion;->isAtLeastLollipop()Z +HSPLcom/google/android/gms/common/util/PlatformVersion;->isAtLeastO()Z +HSPLcom/google/android/gms/common/util/PlatformVersion;->isAtLeastQ()Z +HSPLcom/google/android/gms/common/util/PlatformVersion;->isAtLeastS()Z +Lcom/google/android/gms/common/util/Strings; +HSPLcom/google/android/gms/common/util/Strings;->()V +HSPLcom/google/android/gms/common/util/Strings;->isEmptyOrWhitespace(Ljava/lang/String;)Z +Lcom/google/android/gms/common/util/zza; +HSPLcom/google/android/gms/common/util/zza;->zza(I)I +Lcom/google/android/gms/common/util/zzb; +HSPLcom/google/android/gms/common/util/zzb;->zza()Z +Lcom/google/android/gms/common/wrappers/InstantApps; +HSPLcom/google/android/gms/common/wrappers/InstantApps;->isInstantApp(Landroid/content/Context;)Z +Lcom/google/android/gms/common/wrappers/PackageManagerWrapper; +HSPLcom/google/android/gms/common/wrappers/PackageManagerWrapper;->(Landroid/content/Context;)V +HSPLcom/google/android/gms/common/wrappers/PackageManagerWrapper;->checkCallingOrSelfPermission(Ljava/lang/String;)I +HSPLcom/google/android/gms/common/wrappers/PackageManagerWrapper;->getApplicationInfo(Ljava/lang/String;I)Landroid/content/pm/ApplicationInfo; +HSPLcom/google/android/gms/common/wrappers/PackageManagerWrapper;->getPackageInfo(Ljava/lang/String;I)Landroid/content/pm/PackageInfo; +HSPLcom/google/android/gms/common/wrappers/PackageManagerWrapper;->isCallerInstantApp()Z +Lcom/google/android/gms/common/wrappers/Wrappers; +HSPLcom/google/android/gms/common/wrappers/Wrappers;->()V +HSPLcom/google/android/gms/common/wrappers/Wrappers;->()V +HSPLcom/google/android/gms/common/wrappers/Wrappers;->packageManager(Landroid/content/Context;)Lcom/google/android/gms/common/wrappers/PackageManagerWrapper; +HSPLcom/google/android/gms/common/wrappers/Wrappers;->zza(Landroid/content/Context;)Lcom/google/android/gms/common/wrappers/PackageManagerWrapper; +Lcom/google/android/gms/common/zzb; +HSPLcom/google/android/gms/common/zzb;->()V +Lcom/google/android/gms/common/zzc; +HSPLcom/google/android/gms/common/zzc;->()V +HSPLcom/google/android/gms/common/zzc;->newArray(I)[Ljava/lang/Object; +Lcom/google/android/gms/common/zzf; +HSPLcom/google/android/gms/common/zzf;->([B)V +Lcom/google/android/gms/common/zzg; +HSPLcom/google/android/gms/common/zzg;->([B)V +Lcom/google/android/gms/common/zzh; +HSPLcom/google/android/gms/common/zzh;->([B)V +HSPLcom/google/android/gms/common/zzh;->zzb()[B +Lcom/google/android/gms/common/zzi; +HSPLcom/google/android/gms/common/zzi;->([B)V +Lcom/google/android/gms/common/zzj; +HSPLcom/google/android/gms/common/zzj;->([B)V +HSPLcom/google/android/gms/common/zzj;->equals(Ljava/lang/Object;)Z +HSPLcom/google/android/gms/common/zzj;->zzc()I +HSPLcom/google/android/gms/common/zzj;->zzd()Lcom/google/android/gms/dynamic/IObjectWrapper; +HSPLcom/google/android/gms/common/zzj;->zze(Ljava/lang/String;)[B +Lcom/google/android/gms/common/zzk; +HSPLcom/google/android/gms/common/zzk;->([B)V +HSPLcom/google/android/gms/common/zzk;->zzf()[B +Lcom/google/android/gms/common/zzl; +HSPLcom/google/android/gms/common/zzl;->()V +HSPLcom/google/android/gms/common/zzl;->([B)V +HSPLcom/google/android/gms/common/zzl;->zzf()[B +Lcom/google/android/gms/common/zzm; +HSPLcom/google/android/gms/common/zzm;->()V +Lcom/google/android/gms/common/zzn; +HSPLcom/google/android/gms/common/zzn;->()V +HSPLcom/google/android/gms/common/zzn;->zze(Landroid/content/Context;)V +Lcom/google/android/gms/dynamic/IObjectWrapper; +Lcom/google/android/gms/dynamic/IObjectWrapper$Stub; +HSPLcom/google/android/gms/dynamic/IObjectWrapper$Stub;->()V +Lcom/google/android/gms/dynamic/ObjectWrapper; +HSPLcom/google/android/gms/dynamic/ObjectWrapper;->(Ljava/lang/Object;)V +HSPLcom/google/android/gms/dynamic/ObjectWrapper;->unwrap(Lcom/google/android/gms/dynamic/IObjectWrapper;)Ljava/lang/Object; +HSPLcom/google/android/gms/dynamic/ObjectWrapper;->wrap(Ljava/lang/Object;)Lcom/google/android/gms/dynamic/IObjectWrapper; +Lcom/google/android/gms/dynamite/DynamiteModule; +HSPLcom/google/android/gms/dynamite/DynamiteModule;->()V +HSPLcom/google/android/gms/dynamite/DynamiteModule;->(Landroid/content/Context;)V +HSPLcom/google/android/gms/dynamite/DynamiteModule;->getLocalVersion(Landroid/content/Context;Ljava/lang/String;)I +HSPLcom/google/android/gms/dynamite/DynamiteModule;->getRemoteVersion(Landroid/content/Context;Ljava/lang/String;)I +HSPLcom/google/android/gms/dynamite/DynamiteModule;->instantiate(Ljava/lang/String;)Landroid/os/IBinder; +HSPLcom/google/android/gms/dynamite/DynamiteModule;->load(Landroid/content/Context;Lcom/google/android/gms/dynamite/DynamiteModule$VersionPolicy;Ljava/lang/String;)Lcom/google/android/gms/dynamite/DynamiteModule; +HSPLcom/google/android/gms/dynamite/DynamiteModule;->zza(Landroid/content/Context;Ljava/lang/String;Z)I +HSPLcom/google/android/gms/dynamite/DynamiteModule;->zzb(Landroid/content/Context;Ljava/lang/String;ZZ)I +HSPLcom/google/android/gms/dynamite/DynamiteModule;->zzc(Landroid/content/Context;Ljava/lang/String;)Lcom/google/android/gms/dynamite/DynamiteModule; +HSPLcom/google/android/gms/dynamite/DynamiteModule;->zzd(Ljava/lang/ClassLoader;)V +HSPLcom/google/android/gms/dynamite/DynamiteModule;->zze(Landroid/database/Cursor;)Z +HSPLcom/google/android/gms/dynamite/DynamiteModule;->zzf(Landroid/content/Context;)Z +Lcom/google/android/gms/dynamite/DynamiteModule$DynamiteLoaderClassLoader; +Lcom/google/android/gms/dynamite/DynamiteModule$LoadingException; +Lcom/google/android/gms/dynamite/DynamiteModule$VersionPolicy; +Lcom/google/android/gms/dynamite/DynamiteModule$VersionPolicy$IVersions; +Lcom/google/android/gms/dynamite/DynamiteModule$VersionPolicy$SelectionResult; +HSPLcom/google/android/gms/dynamite/DynamiteModule$VersionPolicy$SelectionResult;->()V +Lcom/google/android/gms/dynamite/descriptors/com/google/android/gms/measurement/dynamite/ModuleDescriptor; +Lcom/google/android/gms/dynamite/zza; +HSPLcom/google/android/gms/dynamite/zza;->(Ljava/lang/ThreadGroup;Ljava/lang/String;)V +HSPLcom/google/android/gms/dynamite/zza;->run()V +Lcom/google/android/gms/dynamite/zzb; +HSPLcom/google/android/gms/dynamite/zzb;->()V +HSPLcom/google/android/gms/dynamite/zzb;->zza()Ljava/lang/ClassLoader; +HSPLcom/google/android/gms/dynamite/zzb;->zzb()Ljava/lang/ClassLoader; +HSPLcom/google/android/gms/dynamite/zzb;->zzc()Ljava/lang/Thread; +Lcom/google/android/gms/dynamite/zzd; +HSPLcom/google/android/gms/dynamite/zzd;->()V +HSPLcom/google/android/gms/dynamite/zzd;->initialValue()Ljava/lang/Object; +Lcom/google/android/gms/dynamite/zze; +HSPLcom/google/android/gms/dynamite/zze;->()V +HSPLcom/google/android/gms/dynamite/zze;->zza(Landroid/content/Context;Ljava/lang/String;)I +HSPLcom/google/android/gms/dynamite/zze;->zzb(Landroid/content/Context;Ljava/lang/String;Z)I +Lcom/google/android/gms/dynamite/zzf; +HSPLcom/google/android/gms/dynamite/zzf;->()V +Lcom/google/android/gms/dynamite/zzg; +HSPLcom/google/android/gms/dynamite/zzg;->()V +Lcom/google/android/gms/dynamite/zzh; +HSPLcom/google/android/gms/dynamite/zzh;->()V +Lcom/google/android/gms/dynamite/zzi; +HSPLcom/google/android/gms/dynamite/zzi;->()V +HSPLcom/google/android/gms/dynamite/zzi;->selectModule(Landroid/content/Context;Ljava/lang/String;Lcom/google/android/gms/dynamite/DynamiteModule$VersionPolicy$IVersions;)Lcom/google/android/gms/dynamite/DynamiteModule$VersionPolicy$SelectionResult; +Lcom/google/android/gms/dynamite/zzj; +HSPLcom/google/android/gms/dynamite/zzj;->()V +Lcom/google/android/gms/dynamite/zzk; +HSPLcom/google/android/gms/dynamite/zzk;->()V +Lcom/google/android/gms/dynamite/zzl; +HSPLcom/google/android/gms/dynamite/zzl;->()V +Lcom/google/android/gms/dynamite/zzn; +HSPLcom/google/android/gms/dynamite/zzn;->(Lcom/google/android/gms/dynamite/zzm;)V +Lcom/google/android/gms/dynamite/zzr; +HSPLcom/google/android/gms/dynamite/zzr;->(Landroid/os/IBinder;)V +Lcom/google/android/gms/internal/common/zza; +HSPLcom/google/android/gms/internal/common/zza;->(Landroid/os/IBinder;Ljava/lang/String;)V +Lcom/google/android/gms/internal/common/zzb; +HSPLcom/google/android/gms/internal/common/zzb;->(Ljava/lang/String;)V +HSPLcom/google/android/gms/internal/common/zzb;->asBinder()Landroid/os/IBinder; +HSPLcom/google/android/gms/internal/common/zzb;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z +Lcom/google/android/gms/internal/common/zzc; +HSPLcom/google/android/gms/internal/common/zzc;->()V +HSPLcom/google/android/gms/internal/common/zzc;->zza(Landroid/os/Parcel;Landroid/os/Parcelable$Creator;)Landroid/os/Parcelable; +HSPLcom/google/android/gms/internal/common/zzc;->zzb(Landroid/os/Parcel;)V +Lcom/google/android/gms/internal/common/zzi; +HSPLcom/google/android/gms/internal/common/zzi;->(Landroid/os/Looper;)V +HSPLcom/google/android/gms/internal/common/zzi;->(Landroid/os/Looper;Landroid/os/Handler$Callback;)V +Lcom/google/android/gms/internal/measurement/zzbu; +HSPLcom/google/android/gms/internal/measurement/zzbu;->(Landroid/os/IBinder;Ljava/lang/String;)V +HSPLcom/google/android/gms/internal/measurement/zzbu;->a_()Landroid/os/Parcel; +HSPLcom/google/android/gms/internal/measurement/zzbu;->zza(ILandroid/os/Parcel;)Landroid/os/Parcel; +HSPLcom/google/android/gms/internal/measurement/zzbu;->zzb(ILandroid/os/Parcel;)V +Lcom/google/android/gms/internal/measurement/zzbw; +HSPLcom/google/android/gms/internal/measurement/zzbw;->()V +HSPLcom/google/android/gms/internal/measurement/zzbw;->zza(Landroid/os/Parcel;Landroid/os/Parcelable;)V +Lcom/google/android/gms/internal/measurement/zzbx; +HSPLcom/google/android/gms/internal/measurement/zzbx;->()V +HSPLcom/google/android/gms/internal/measurement/zzbx;->(Ljava/lang/String;)V +Lcom/google/android/gms/internal/measurement/zzch; +HSPLcom/google/android/gms/internal/measurement/zzch;->()V +HSPLcom/google/android/gms/internal/measurement/zzch;->zza()Lcom/google/android/gms/internal/measurement/zzci; +Lcom/google/android/gms/internal/measurement/zzci; +Lcom/google/android/gms/internal/measurement/zzck; +HSPLcom/google/android/gms/internal/measurement/zzck;->()V +HSPLcom/google/android/gms/internal/measurement/zzck;->(Lcom/google/android/gms/internal/measurement/zzcj;)V +HSPLcom/google/android/gms/internal/measurement/zzck;->zza(Ljava/util/concurrent/ThreadFactory;I)Ljava/util/concurrent/ExecutorService; +Lcom/google/android/gms/internal/measurement/zzcl; +HSPLcom/google/android/gms/internal/measurement/zzcl;->zza()Lcom/google/android/gms/internal/measurement/zzcm; +Lcom/google/android/gms/internal/measurement/zzcm; +Lcom/google/android/gms/internal/measurement/zzcn; +HSPLcom/google/android/gms/internal/measurement/zzcn;->()V +HSPLcom/google/android/gms/internal/measurement/zzcn;->zza(Ljava/lang/Runnable;)Ljava/lang/Runnable; +Lcom/google/android/gms/internal/measurement/zzco; +HSPLcom/google/android/gms/internal/measurement/zzco;->()V +HSPLcom/google/android/gms/internal/measurement/zzco;->zza()Lcom/google/android/gms/internal/measurement/zzcm; +Lcom/google/android/gms/internal/measurement/zzcp; +HSPLcom/google/android/gms/internal/measurement/zzcp;->()V +HSPLcom/google/android/gms/internal/measurement/zzcp;->(Landroid/os/Looper;)V +Lcom/google/android/gms/internal/measurement/zzcq; +HSPLcom/google/android/gms/internal/measurement/zzcq;->()V +Lcom/google/android/gms/internal/measurement/zzct; +HSPLcom/google/android/gms/internal/measurement/zzct;->()V +HSPLcom/google/android/gms/internal/measurement/zzct;->asInterface(Landroid/os/IBinder;)Lcom/google/android/gms/internal/measurement/zzcu; +Lcom/google/android/gms/internal/measurement/zzcu; +Lcom/google/android/gms/internal/measurement/zzcz; +HSPLcom/google/android/gms/internal/measurement/zzcz;->()V +Lcom/google/android/gms/internal/measurement/zzda; +Lcom/google/android/gms/internal/measurement/zzdd; +HSPLcom/google/android/gms/internal/measurement/zzdd;->()V +HSPLcom/google/android/gms/internal/measurement/zzdd;->(JJZLjava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;Ljava/lang/String;)V +Lcom/google/android/gms/internal/measurement/zzdf; +HSPLcom/google/android/gms/internal/measurement/zzdf;->(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)V +HSPLcom/google/android/gms/internal/measurement/zzdf;->zza(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)Lcom/google/android/gms/internal/measurement/zzdf; +HSPLcom/google/android/gms/internal/measurement/zzdf;->zza(Landroid/content/Context;Z)Lcom/google/android/gms/internal/measurement/zzcu; +HSPLcom/google/android/gms/internal/measurement/zzdf;->zza(Lcom/google/android/gms/internal/measurement/zzdf$zza;)V +HSPLcom/google/android/gms/internal/measurement/zzdf;->zza(Lcom/google/android/gms/internal/measurement/zzdf;)Lcom/google/android/gms/internal/measurement/zzcu; +HSPLcom/google/android/gms/internal/measurement/zzdf;->zza(Lcom/google/android/gms/internal/measurement/zzdf;Lcom/google/android/gms/internal/measurement/zzcu;)V +HSPLcom/google/android/gms/internal/measurement/zzdf;->zza(Lcom/google/android/gms/internal/measurement/zzdf;Lcom/google/android/gms/internal/measurement/zzdf$zza;)V +HSPLcom/google/android/gms/internal/measurement/zzdf;->zza(Lcom/google/android/gms/internal/measurement/zzdf;Ljava/lang/String;Ljava/lang/String;)Z +HSPLcom/google/android/gms/internal/measurement/zzdf;->zza(Lcom/google/android/gms/measurement/internal/zzil;)V +HSPLcom/google/android/gms/internal/measurement/zzdf;->zzb()Lcom/google/android/gms/measurement/api/AppMeasurementSdk; +HSPLcom/google/android/gms/internal/measurement/zzdf;->zzb(Landroid/content/Context;)Z +HSPLcom/google/android/gms/internal/measurement/zzdf;->zzc(Lcom/google/android/gms/internal/measurement/zzdf;)Z +HSPLcom/google/android/gms/internal/measurement/zzdf;->zzc(Ljava/lang/String;Ljava/lang/String;)Z +HSPLcom/google/android/gms/internal/measurement/zzdf;->zzk()Z +Lcom/google/android/gms/internal/measurement/zzdf$zza; +HSPLcom/google/android/gms/internal/measurement/zzdf$zza;->(Lcom/google/android/gms/internal/measurement/zzdf;)V +HSPLcom/google/android/gms/internal/measurement/zzdf$zza;->(Lcom/google/android/gms/internal/measurement/zzdf;Z)V +HSPLcom/google/android/gms/internal/measurement/zzdf$zza;->run()V +Lcom/google/android/gms/internal/measurement/zzdf$zzb; +HSPLcom/google/android/gms/internal/measurement/zzdf$zzb;->(Lcom/google/android/gms/measurement/internal/zzil;)V +HSPLcom/google/android/gms/internal/measurement/zzdf$zzb;->zza()I +Lcom/google/android/gms/internal/measurement/zzdf$zzd; +HSPLcom/google/android/gms/internal/measurement/zzdf$zzd;->(Lcom/google/android/gms/internal/measurement/zzdf;)V +HSPLcom/google/android/gms/internal/measurement/zzdf$zzd;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V +HSPLcom/google/android/gms/internal/measurement/zzdf$zzd;->onActivityResumed(Landroid/app/Activity;)V +HSPLcom/google/android/gms/internal/measurement/zzdf$zzd;->onActivityStarted(Landroid/app/Activity;)V +Lcom/google/android/gms/internal/measurement/zzdg; +HSPLcom/google/android/gms/internal/measurement/zzdg;->()V +Lcom/google/android/gms/internal/measurement/zzdi; +HSPLcom/google/android/gms/internal/measurement/zzdi;->(Lcom/google/android/gms/internal/measurement/zzdf;Ljava/lang/String;Ljava/lang/String;Landroid/content/Context;Landroid/os/Bundle;)V +HSPLcom/google/android/gms/internal/measurement/zzdi;->zza()V +Lcom/google/android/gms/internal/measurement/zzdr; +HSPLcom/google/android/gms/internal/measurement/zzdr;->(Lcom/google/android/gms/internal/measurement/zzdf;)V +HSPLcom/google/android/gms/internal/measurement/zzdr;->newThread(Ljava/lang/Runnable;)Ljava/lang/Thread; +Lcom/google/android/gms/internal/measurement/zzej; +HSPLcom/google/android/gms/internal/measurement/zzej;->(Lcom/google/android/gms/internal/measurement/zzdf;Lcom/google/android/gms/internal/measurement/zzdf$zzb;)V +HSPLcom/google/android/gms/internal/measurement/zzej;->zza()V +Lcom/google/android/gms/internal/measurement/zzeo; +HSPLcom/google/android/gms/internal/measurement/zzeo;->(Lcom/google/android/gms/internal/measurement/zzdf$zzd;Landroid/os/Bundle;Landroid/app/Activity;)V +HSPLcom/google/android/gms/internal/measurement/zzeo;->zza()V +Lcom/google/android/gms/internal/measurement/zzep; +HSPLcom/google/android/gms/internal/measurement/zzep;->(Lcom/google/android/gms/internal/measurement/zzdf$zzd;Landroid/app/Activity;)V +HSPLcom/google/android/gms/internal/measurement/zzep;->zza()V +Lcom/google/android/gms/internal/measurement/zzeq; +HSPLcom/google/android/gms/internal/measurement/zzeq;->(Lcom/google/android/gms/internal/measurement/zzdf$zzd;Landroid/app/Activity;)V +HSPLcom/google/android/gms/internal/measurement/zzeq;->zza()V +Lcom/google/android/gms/internal/measurement/zzfr; +HSPLcom/google/android/gms/internal/measurement/zzfr;->()V +Lcom/google/android/gms/internal/measurement/zzfr$zzb; +Lcom/google/android/gms/internal/measurement/zzfv; +HSPLcom/google/android/gms/internal/measurement/zzfv;->(Landroid/content/Context;Lcom/google/common/base/Supplier;)V +HSPLcom/google/android/gms/internal/measurement/zzfv;->zza()Landroid/content/Context; +HSPLcom/google/android/gms/internal/measurement/zzfv;->zzb()Lcom/google/common/base/Supplier; +Lcom/google/android/gms/internal/measurement/zzfx; +HSPLcom/google/android/gms/internal/measurement/zzfx;->(Lcom/google/android/gms/internal/measurement/zzfy;)V +HSPLcom/google/android/gms/internal/measurement/zzfx;->zza()Ljava/lang/Object; +Lcom/google/android/gms/internal/measurement/zzfy; +HSPLcom/google/android/gms/internal/measurement/zzfy;->()V +HSPLcom/google/android/gms/internal/measurement/zzfy;->(Landroid/content/ContentResolver;Landroid/net/Uri;Ljava/lang/Runnable;)V +HSPLcom/google/android/gms/internal/measurement/zzfy;->zza()Ljava/util/Map; +HSPLcom/google/android/gms/internal/measurement/zzfy;->zza(Landroid/content/ContentResolver;Landroid/net/Uri;Ljava/lang/Runnable;)Lcom/google/android/gms/internal/measurement/zzfy; +HSPLcom/google/android/gms/internal/measurement/zzfy;->zza(Ljava/lang/String;)Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zzfy;->zzb()Ljava/util/Map; +HSPLcom/google/android/gms/internal/measurement/zzfy;->zzc()V +HSPLcom/google/android/gms/internal/measurement/zzfy;->zze()Ljava/util/Map; +Lcom/google/android/gms/internal/measurement/zzga; +HSPLcom/google/android/gms/internal/measurement/zzga;->(Lcom/google/android/gms/internal/measurement/zzfy;Landroid/os/Handler;)V +Lcom/google/android/gms/internal/measurement/zzgb; +Lcom/google/android/gms/internal/measurement/zzgd; +Lcom/google/android/gms/internal/measurement/zzge; +HSPLcom/google/android/gms/internal/measurement/zzge;->zza(Lcom/google/android/gms/internal/measurement/zzgd;)Ljava/lang/Object; +Lcom/google/android/gms/internal/measurement/zzgg; +HSPLcom/google/android/gms/internal/measurement/zzgg;->zza()V +Lcom/google/android/gms/internal/measurement/zzgh; +Lcom/google/android/gms/internal/measurement/zzgj; +HSPLcom/google/android/gms/internal/measurement/zzgj;->()V +Lcom/google/android/gms/internal/measurement/zzgj$zza; +HSPLcom/google/android/gms/internal/measurement/zzgj$zza;->()V +HSPLcom/google/android/gms/internal/measurement/zzgj$zza;->zza(Landroid/content/Context;)Lcom/google/common/base/Optional; +Lcom/google/android/gms/internal/measurement/zzgk; +HSPLcom/google/android/gms/internal/measurement/zzgk;->()V +HSPLcom/google/android/gms/internal/measurement/zzgk;->zza(Ljava/lang/String;)Landroid/net/Uri; +Lcom/google/android/gms/internal/measurement/zzgl; +HSPLcom/google/android/gms/internal/measurement/zzgl;->()V +HSPLcom/google/android/gms/internal/measurement/zzgl;->zza(Landroid/content/Context;)Z +HSPLcom/google/android/gms/internal/measurement/zzgl;->zza(Landroid/content/Context;Landroid/net/Uri;)Z +Lcom/google/android/gms/internal/measurement/zzgm; +HSPLcom/google/android/gms/internal/measurement/zzgm;->()V +HSPLcom/google/android/gms/internal/measurement/zzgm;->()V +Lcom/google/android/gms/internal/measurement/zzgn; +HSPLcom/google/android/gms/internal/measurement/zzgn;->()V +HSPLcom/google/android/gms/internal/measurement/zzgn;->(Lcom/google/android/gms/internal/measurement/zzgv;Ljava/lang/String;Ljava/lang/Object;Z)V +HSPLcom/google/android/gms/internal/measurement/zzgn;->(Lcom/google/android/gms/internal/measurement/zzgv;Ljava/lang/String;Ljava/lang/Object;ZLcom/google/android/gms/internal/measurement/zzgx;)V +HSPLcom/google/android/gms/internal/measurement/zzgn;->zza()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zzgn;->zza(Landroid/content/Context;)Lcom/google/common/base/Optional; +HSPLcom/google/android/gms/internal/measurement/zzgn;->zza(Lcom/google/android/gms/internal/measurement/zzgu;)Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zzgn;->zza(Lcom/google/android/gms/internal/measurement/zzgv;Ljava/lang/String;Ljava/lang/Boolean;Z)Lcom/google/android/gms/internal/measurement/zzgn; +HSPLcom/google/android/gms/internal/measurement/zzgn;->zza(Lcom/google/android/gms/internal/measurement/zzgv;Ljava/lang/String;Ljava/lang/Double;Z)Lcom/google/android/gms/internal/measurement/zzgn; +HSPLcom/google/android/gms/internal/measurement/zzgn;->zza(Lcom/google/android/gms/internal/measurement/zzgv;Ljava/lang/String;Ljava/lang/Long;Z)Lcom/google/android/gms/internal/measurement/zzgn; +HSPLcom/google/android/gms/internal/measurement/zzgn;->zza(Lcom/google/android/gms/internal/measurement/zzgv;Ljava/lang/String;Ljava/lang/String;Z)Lcom/google/android/gms/internal/measurement/zzgn; +HSPLcom/google/android/gms/internal/measurement/zzgn;->zza(Ljava/lang/String;)Ljava/lang/String; +HSPLcom/google/android/gms/internal/measurement/zzgn;->zzb()Ljava/lang/String; +HSPLcom/google/android/gms/internal/measurement/zzgn;->zzb(Landroid/content/Context;)V +HSPLcom/google/android/gms/internal/measurement/zzgn;->zzb(Lcom/google/android/gms/internal/measurement/zzgu;)Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zzgn;->zzd()Z +Lcom/google/android/gms/internal/measurement/zzgo; +HSPLcom/google/android/gms/internal/measurement/zzgo;->()V +HSPLcom/google/android/gms/internal/measurement/zzgo;->()V +HSPLcom/google/android/gms/internal/measurement/zzgo;->zza()Z +Lcom/google/android/gms/internal/measurement/zzgp; +HSPLcom/google/android/gms/internal/measurement/zzgp;->(Landroid/content/Context;)V +HSPLcom/google/android/gms/internal/measurement/zzgp;->get()Ljava/lang/Object; +Lcom/google/android/gms/internal/measurement/zzgq; +HSPLcom/google/android/gms/internal/measurement/zzgq;->(Lcom/google/android/gms/internal/measurement/zzgv;Ljava/lang/String;Ljava/lang/Boolean;Z)V +HSPLcom/google/android/gms/internal/measurement/zzgq;->zza(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/google/android/gms/internal/measurement/zzgr; +HSPLcom/google/android/gms/internal/measurement/zzgr;->(Lcom/google/android/gms/internal/measurement/zzgv;Ljava/lang/String;Ljava/lang/Long;Z)V +HSPLcom/google/android/gms/internal/measurement/zzgr;->zza(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zzgr;->zzb(Ljava/lang/Object;)Ljava/lang/Long; +Lcom/google/android/gms/internal/measurement/zzgs; +HSPLcom/google/android/gms/internal/measurement/zzgs;->(Lcom/google/android/gms/internal/measurement/zzgv;Ljava/lang/String;Ljava/lang/String;Z)V +HSPLcom/google/android/gms/internal/measurement/zzgs;->zza(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/google/android/gms/internal/measurement/zzgt; +HSPLcom/google/android/gms/internal/measurement/zzgt;->(Lcom/google/android/gms/internal/measurement/zzgv;Ljava/lang/String;Ljava/lang/Double;Z)V +HSPLcom/google/android/gms/internal/measurement/zzgt;->zza(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zzgt;->zzb(Ljava/lang/Object;)Ljava/lang/Double; +Lcom/google/android/gms/internal/measurement/zzgu; +HSPLcom/google/android/gms/internal/measurement/zzgu;->()V +Lcom/google/android/gms/internal/measurement/zzgv; +HSPLcom/google/android/gms/internal/measurement/zzgv;->(Landroid/net/Uri;)V +HSPLcom/google/android/gms/internal/measurement/zzgv;->(Ljava/lang/String;Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;ZZZZLcom/google/common/base/Function;)V +HSPLcom/google/android/gms/internal/measurement/zzgv;->zza()Lcom/google/android/gms/internal/measurement/zzgv; +HSPLcom/google/android/gms/internal/measurement/zzgv;->zza(Ljava/lang/String;D)Lcom/google/android/gms/internal/measurement/zzgn; +HSPLcom/google/android/gms/internal/measurement/zzgv;->zza(Ljava/lang/String;J)Lcom/google/android/gms/internal/measurement/zzgn; +HSPLcom/google/android/gms/internal/measurement/zzgv;->zza(Ljava/lang/String;Ljava/lang/String;)Lcom/google/android/gms/internal/measurement/zzgn; +HSPLcom/google/android/gms/internal/measurement/zzgv;->zza(Ljava/lang/String;Z)Lcom/google/android/gms/internal/measurement/zzgn; +HSPLcom/google/android/gms/internal/measurement/zzgv;->zzb()Lcom/google/android/gms/internal/measurement/zzgv; +Lcom/google/android/gms/internal/measurement/zzgw; +HSPLcom/google/android/gms/internal/measurement/zzgw;->()V +HSPLcom/google/android/gms/internal/measurement/zzgw;->zza()V +Lcom/google/android/gms/internal/measurement/zzgy; +HSPLcom/google/android/gms/internal/measurement/zzgy;->(Lcom/google/android/gms/internal/measurement/zzhb;)V +Lcom/google/android/gms/internal/measurement/zzhb; +Lcom/google/android/gms/internal/measurement/zzmy; +HSPLcom/google/android/gms/internal/measurement/zzmy;->()V +HSPLcom/google/android/gms/internal/measurement/zzmy;->()V +HSPLcom/google/android/gms/internal/measurement/zzmy;->get()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zzmy;->zza()Z +Lcom/google/android/gms/internal/measurement/zzna; +HSPLcom/google/android/gms/internal/measurement/zzna;->()V +HSPLcom/google/android/gms/internal/measurement/zzna;->()V +HSPLcom/google/android/gms/internal/measurement/zzna;->zza()Z +Lcom/google/android/gms/internal/measurement/zznb; +Lcom/google/android/gms/internal/measurement/zznc; +Lcom/google/android/gms/internal/measurement/zznd; +HSPLcom/google/android/gms/internal/measurement/zznd;->()V +HSPLcom/google/android/gms/internal/measurement/zznd;->()V +HSPLcom/google/android/gms/internal/measurement/zznd;->get()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zznd;->zza()Z +Lcom/google/android/gms/internal/measurement/zzne; +HSPLcom/google/android/gms/internal/measurement/zzne;->()V +HSPLcom/google/android/gms/internal/measurement/zzne;->()V +HSPLcom/google/android/gms/internal/measurement/zzne;->get()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zzne;->zza()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzaa()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzab()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzac()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzad()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzae()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzaf()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzag()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzah()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzai()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzaj()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzak()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzal()Ljava/lang/String; +HSPLcom/google/android/gms/internal/measurement/zzne;->zzam()Ljava/lang/String; +HSPLcom/google/android/gms/internal/measurement/zzne;->zzan()Ljava/lang/String; +HSPLcom/google/android/gms/internal/measurement/zzne;->zzao()Ljava/lang/String; +HSPLcom/google/android/gms/internal/measurement/zzne;->zzap()Ljava/lang/String; +HSPLcom/google/android/gms/internal/measurement/zzne;->zzaq()Ljava/lang/String; +HSPLcom/google/android/gms/internal/measurement/zzne;->zzar()Ljava/lang/String; +HSPLcom/google/android/gms/internal/measurement/zzne;->zzas()Ljava/lang/String; +HSPLcom/google/android/gms/internal/measurement/zzne;->zzat()Ljava/lang/String; +HSPLcom/google/android/gms/internal/measurement/zzne;->zzau()Ljava/lang/String; +HSPLcom/google/android/gms/internal/measurement/zzne;->zzb()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzc()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzd()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zze()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzf()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzg()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzh()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzi()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzj()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzk()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzl()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzm()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzn()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzo()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzp()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzq()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzr()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzs()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzt()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzu()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzv()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzw()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzx()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzy()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzz()J +Lcom/google/android/gms/internal/measurement/zznf; +HSPLcom/google/android/gms/internal/measurement/zznf;->()V +HSPLcom/google/android/gms/internal/measurement/zznf;->()V +HSPLcom/google/android/gms/internal/measurement/zznf;->zza()Z +Lcom/google/android/gms/internal/measurement/zzng; +HSPLcom/google/android/gms/internal/measurement/zzng;->()V +HSPLcom/google/android/gms/internal/measurement/zzng;->()V +HSPLcom/google/android/gms/internal/measurement/zzng;->zza()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzaa()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzab()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzac()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzad()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzae()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzaf()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzag()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzah()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzai()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzaj()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzak()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzal()Ljava/lang/String; +HSPLcom/google/android/gms/internal/measurement/zzng;->zzam()Ljava/lang/String; +HSPLcom/google/android/gms/internal/measurement/zzng;->zzan()Ljava/lang/String; +HSPLcom/google/android/gms/internal/measurement/zzng;->zzao()Ljava/lang/String; +HSPLcom/google/android/gms/internal/measurement/zzng;->zzap()Ljava/lang/String; +HSPLcom/google/android/gms/internal/measurement/zzng;->zzaq()Ljava/lang/String; +HSPLcom/google/android/gms/internal/measurement/zzng;->zzar()Ljava/lang/String; +HSPLcom/google/android/gms/internal/measurement/zzng;->zzas()Ljava/lang/String; +HSPLcom/google/android/gms/internal/measurement/zzng;->zzat()Ljava/lang/String; +HSPLcom/google/android/gms/internal/measurement/zzng;->zzau()Ljava/lang/String; +HSPLcom/google/android/gms/internal/measurement/zzng;->zzb()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzc()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzd()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zze()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzf()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzg()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzh()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzi()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzj()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzk()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzl()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzm()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzn()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzo()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzp()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzq()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzr()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzs()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzt()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzu()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzv()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzw()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzx()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzy()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzz()J +Lcom/google/android/gms/internal/measurement/zznh; +Lcom/google/android/gms/internal/measurement/zzni; +Lcom/google/android/gms/internal/measurement/zznj; +HSPLcom/google/android/gms/internal/measurement/zznj;->()V +HSPLcom/google/android/gms/internal/measurement/zznj;->()V +HSPLcom/google/android/gms/internal/measurement/zznj;->get()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zznj;->zza()J +Lcom/google/android/gms/internal/measurement/zznk; +HSPLcom/google/android/gms/internal/measurement/zznk;->()V +HSPLcom/google/android/gms/internal/measurement/zznk;->()V +HSPLcom/google/android/gms/internal/measurement/zznk;->get()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zznk;->zzb()Z +Lcom/google/android/gms/internal/measurement/zznl; +HSPLcom/google/android/gms/internal/measurement/zznl;->()V +HSPLcom/google/android/gms/internal/measurement/zznl;->()V +HSPLcom/google/android/gms/internal/measurement/zznl;->zza()J +Lcom/google/android/gms/internal/measurement/zznm; +HSPLcom/google/android/gms/internal/measurement/zznm;->()V +HSPLcom/google/android/gms/internal/measurement/zznm;->()V +HSPLcom/google/android/gms/internal/measurement/zznm;->zzb()Z +Lcom/google/android/gms/internal/measurement/zznn; +Lcom/google/android/gms/internal/measurement/zzno; +Lcom/google/android/gms/internal/measurement/zznp; +HSPLcom/google/android/gms/internal/measurement/zznp;->()V +HSPLcom/google/android/gms/internal/measurement/zznp;->()V +HSPLcom/google/android/gms/internal/measurement/zznp;->get()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zznp;->zza()Z +HSPLcom/google/android/gms/internal/measurement/zznp;->zzb()Z +HSPLcom/google/android/gms/internal/measurement/zznp;->zzc()Z +HSPLcom/google/android/gms/internal/measurement/zznp;->zzd()Z +HSPLcom/google/android/gms/internal/measurement/zznp;->zze()Z +HSPLcom/google/android/gms/internal/measurement/zznp;->zzf()Z +HSPLcom/google/android/gms/internal/measurement/zznp;->zzg()Z +Lcom/google/android/gms/internal/measurement/zznq; +HSPLcom/google/android/gms/internal/measurement/zznq;->()V +HSPLcom/google/android/gms/internal/measurement/zznq;->()V +HSPLcom/google/android/gms/internal/measurement/zznq;->get()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zznq;->zzb()Z +HSPLcom/google/android/gms/internal/measurement/zznq;->zzc()Z +Lcom/google/android/gms/internal/measurement/zznr; +HSPLcom/google/android/gms/internal/measurement/zznr;->()V +HSPLcom/google/android/gms/internal/measurement/zznr;->()V +HSPLcom/google/android/gms/internal/measurement/zznr;->zza()Z +HSPLcom/google/android/gms/internal/measurement/zznr;->zzb()Z +HSPLcom/google/android/gms/internal/measurement/zznr;->zzc()Z +HSPLcom/google/android/gms/internal/measurement/zznr;->zzd()Z +HSPLcom/google/android/gms/internal/measurement/zznr;->zze()Z +HSPLcom/google/android/gms/internal/measurement/zznr;->zzf()Z +HSPLcom/google/android/gms/internal/measurement/zznr;->zzg()Z +Lcom/google/android/gms/internal/measurement/zzns; +HSPLcom/google/android/gms/internal/measurement/zzns;->()V +HSPLcom/google/android/gms/internal/measurement/zzns;->()V +HSPLcom/google/android/gms/internal/measurement/zzns;->zzb()Z +HSPLcom/google/android/gms/internal/measurement/zzns;->zzc()Z +Lcom/google/android/gms/internal/measurement/zznt; +Lcom/google/android/gms/internal/measurement/zznu; +Lcom/google/android/gms/internal/measurement/zznv; +HSPLcom/google/android/gms/internal/measurement/zznv;->()V +HSPLcom/google/android/gms/internal/measurement/zznv;->()V +HSPLcom/google/android/gms/internal/measurement/zznv;->get()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zznv;->zza()Z +HSPLcom/google/android/gms/internal/measurement/zznv;->zzb()Z +Lcom/google/android/gms/internal/measurement/zznw; +HSPLcom/google/android/gms/internal/measurement/zznw;->()V +HSPLcom/google/android/gms/internal/measurement/zznw;->()V +HSPLcom/google/android/gms/internal/measurement/zznw;->get()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zznw;->zzb()Z +Lcom/google/android/gms/internal/measurement/zznx; +HSPLcom/google/android/gms/internal/measurement/zznx;->()V +HSPLcom/google/android/gms/internal/measurement/zznx;->()V +HSPLcom/google/android/gms/internal/measurement/zznx;->zza()Z +HSPLcom/google/android/gms/internal/measurement/zznx;->zzb()Z +Lcom/google/android/gms/internal/measurement/zzny; +HSPLcom/google/android/gms/internal/measurement/zzny;->()V +HSPLcom/google/android/gms/internal/measurement/zzny;->()V +HSPLcom/google/android/gms/internal/measurement/zzny;->zzb()Z +Lcom/google/android/gms/internal/measurement/zznz; +Lcom/google/android/gms/internal/measurement/zzoa; +Lcom/google/android/gms/internal/measurement/zzob; +HSPLcom/google/android/gms/internal/measurement/zzob;->()V +HSPLcom/google/android/gms/internal/measurement/zzob;->()V +HSPLcom/google/android/gms/internal/measurement/zzob;->get()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zzob;->zzb()Z +HSPLcom/google/android/gms/internal/measurement/zzob;->zzc()Z +HSPLcom/google/android/gms/internal/measurement/zzob;->zzd()Z +Lcom/google/android/gms/internal/measurement/zzoc; +HSPLcom/google/android/gms/internal/measurement/zzoc;->()V +HSPLcom/google/android/gms/internal/measurement/zzoc;->()V +HSPLcom/google/android/gms/internal/measurement/zzoc;->get()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zzoc;->zzb()Z +Lcom/google/android/gms/internal/measurement/zzod; +HSPLcom/google/android/gms/internal/measurement/zzod;->()V +HSPLcom/google/android/gms/internal/measurement/zzod;->()V +HSPLcom/google/android/gms/internal/measurement/zzod;->zzb()Z +HSPLcom/google/android/gms/internal/measurement/zzod;->zzc()Z +HSPLcom/google/android/gms/internal/measurement/zzod;->zzd()Z +Lcom/google/android/gms/internal/measurement/zzoe; +HSPLcom/google/android/gms/internal/measurement/zzoe;->()V +HSPLcom/google/android/gms/internal/measurement/zzoe;->()V +HSPLcom/google/android/gms/internal/measurement/zzoe;->zzb()Z +Lcom/google/android/gms/internal/measurement/zzof; +Lcom/google/android/gms/internal/measurement/zzog; +Lcom/google/android/gms/internal/measurement/zzoh; +HSPLcom/google/android/gms/internal/measurement/zzoh;->()V +HSPLcom/google/android/gms/internal/measurement/zzoh;->()V +HSPLcom/google/android/gms/internal/measurement/zzoh;->get()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zzoh;->zzb()Z +Lcom/google/android/gms/internal/measurement/zzoi; +HSPLcom/google/android/gms/internal/measurement/zzoi;->()V +HSPLcom/google/android/gms/internal/measurement/zzoi;->()V +HSPLcom/google/android/gms/internal/measurement/zzoi;->get()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zzoi;->zzb()Z +HSPLcom/google/android/gms/internal/measurement/zzoi;->zzc()Z +Lcom/google/android/gms/internal/measurement/zzoj; +HSPLcom/google/android/gms/internal/measurement/zzoj;->()V +HSPLcom/google/android/gms/internal/measurement/zzoj;->()V +HSPLcom/google/android/gms/internal/measurement/zzoj;->zzb()Z +Lcom/google/android/gms/internal/measurement/zzok; +HSPLcom/google/android/gms/internal/measurement/zzok;->()V +HSPLcom/google/android/gms/internal/measurement/zzok;->()V +HSPLcom/google/android/gms/internal/measurement/zzok;->zzb()Z +HSPLcom/google/android/gms/internal/measurement/zzok;->zzc()Z +Lcom/google/android/gms/internal/measurement/zzol; +Lcom/google/android/gms/internal/measurement/zzom; +Lcom/google/android/gms/internal/measurement/zzon; +HSPLcom/google/android/gms/internal/measurement/zzon;->()V +HSPLcom/google/android/gms/internal/measurement/zzon;->()V +HSPLcom/google/android/gms/internal/measurement/zzon;->get()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zzon;->zzb()Z +Lcom/google/android/gms/internal/measurement/zzoo; +HSPLcom/google/android/gms/internal/measurement/zzoo;->()V +HSPLcom/google/android/gms/internal/measurement/zzoo;->()V +HSPLcom/google/android/gms/internal/measurement/zzoo;->get()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zzoo;->zza()Z +HSPLcom/google/android/gms/internal/measurement/zzoo;->zzb()Z +Lcom/google/android/gms/internal/measurement/zzop; +HSPLcom/google/android/gms/internal/measurement/zzop;->()V +HSPLcom/google/android/gms/internal/measurement/zzop;->()V +HSPLcom/google/android/gms/internal/measurement/zzop;->zzb()Z +Lcom/google/android/gms/internal/measurement/zzoq; +HSPLcom/google/android/gms/internal/measurement/zzoq;->()V +HSPLcom/google/android/gms/internal/measurement/zzoq;->()V +HSPLcom/google/android/gms/internal/measurement/zzoq;->zza()Z +HSPLcom/google/android/gms/internal/measurement/zzoq;->zzb()Z +Lcom/google/android/gms/internal/measurement/zzor; +Lcom/google/android/gms/internal/measurement/zzos; +Lcom/google/android/gms/internal/measurement/zzot; +HSPLcom/google/android/gms/internal/measurement/zzot;->()V +HSPLcom/google/android/gms/internal/measurement/zzot;->()V +HSPLcom/google/android/gms/internal/measurement/zzot;->get()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zzot;->zzb()Z +HSPLcom/google/android/gms/internal/measurement/zzot;->zzc()Z +Lcom/google/android/gms/internal/measurement/zzou; +HSPLcom/google/android/gms/internal/measurement/zzou;->()V +HSPLcom/google/android/gms/internal/measurement/zzou;->()V +HSPLcom/google/android/gms/internal/measurement/zzou;->get()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zzou;->zza()Z +Lcom/google/android/gms/internal/measurement/zzov; +HSPLcom/google/android/gms/internal/measurement/zzov;->()V +HSPLcom/google/android/gms/internal/measurement/zzov;->()V +HSPLcom/google/android/gms/internal/measurement/zzov;->zzb()Z +HSPLcom/google/android/gms/internal/measurement/zzov;->zzc()Z +Lcom/google/android/gms/internal/measurement/zzow; +HSPLcom/google/android/gms/internal/measurement/zzow;->()V +HSPLcom/google/android/gms/internal/measurement/zzow;->()V +HSPLcom/google/android/gms/internal/measurement/zzow;->zza()Z +Lcom/google/android/gms/internal/measurement/zzox; +Lcom/google/android/gms/internal/measurement/zzoy; +Lcom/google/android/gms/internal/measurement/zzoz; +HSPLcom/google/android/gms/internal/measurement/zzoz;->()V +HSPLcom/google/android/gms/internal/measurement/zzoz;->()V +HSPLcom/google/android/gms/internal/measurement/zzoz;->get()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zzoz;->zza()Z +Lcom/google/android/gms/internal/measurement/zzpa; +HSPLcom/google/android/gms/internal/measurement/zzpa;->()V +HSPLcom/google/android/gms/internal/measurement/zzpa;->()V +HSPLcom/google/android/gms/internal/measurement/zzpa;->get()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zzpa;->zza()D +HSPLcom/google/android/gms/internal/measurement/zzpa;->zzb()J +HSPLcom/google/android/gms/internal/measurement/zzpa;->zzc()J +HSPLcom/google/android/gms/internal/measurement/zzpa;->zzd()Ljava/lang/String; +HSPLcom/google/android/gms/internal/measurement/zzpa;->zze()Z +Lcom/google/android/gms/internal/measurement/zzpb; +HSPLcom/google/android/gms/internal/measurement/zzpb;->()V +HSPLcom/google/android/gms/internal/measurement/zzpb;->()V +HSPLcom/google/android/gms/internal/measurement/zzpb;->zza()Z +Lcom/google/android/gms/internal/measurement/zzpc; +HSPLcom/google/android/gms/internal/measurement/zzpc;->()V +HSPLcom/google/android/gms/internal/measurement/zzpc;->()V +HSPLcom/google/android/gms/internal/measurement/zzpc;->zza()D +HSPLcom/google/android/gms/internal/measurement/zzpc;->zzb()J +HSPLcom/google/android/gms/internal/measurement/zzpc;->zzc()J +HSPLcom/google/android/gms/internal/measurement/zzpc;->zzd()Ljava/lang/String; +HSPLcom/google/android/gms/internal/measurement/zzpc;->zze()Z +Lcom/google/android/gms/internal/measurement/zzpd; +Lcom/google/android/gms/internal/measurement/zzpe; +Lcom/google/android/gms/internal/measurement/zzpf; +HSPLcom/google/android/gms/internal/measurement/zzpf;->()V +HSPLcom/google/android/gms/internal/measurement/zzpf;->()V +HSPLcom/google/android/gms/internal/measurement/zzpf;->get()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zzpf;->zza()Z +Lcom/google/android/gms/internal/measurement/zzpg; +HSPLcom/google/android/gms/internal/measurement/zzpg;->()V +HSPLcom/google/android/gms/internal/measurement/zzpg;->()V +HSPLcom/google/android/gms/internal/measurement/zzpg;->get()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zzpg;->zza()Z +HSPLcom/google/android/gms/internal/measurement/zzpg;->zzb()Z +HSPLcom/google/android/gms/internal/measurement/zzpg;->zzc()Z +HSPLcom/google/android/gms/internal/measurement/zzpg;->zzd()Z +HSPLcom/google/android/gms/internal/measurement/zzpg;->zze()Z +HSPLcom/google/android/gms/internal/measurement/zzpg;->zzf()Z +Lcom/google/android/gms/internal/measurement/zzph; +HSPLcom/google/android/gms/internal/measurement/zzph;->()V +HSPLcom/google/android/gms/internal/measurement/zzph;->()V +HSPLcom/google/android/gms/internal/measurement/zzph;->zza()Z +Lcom/google/android/gms/internal/measurement/zzpi; +HSPLcom/google/android/gms/internal/measurement/zzpi;->()V +HSPLcom/google/android/gms/internal/measurement/zzpi;->()V +HSPLcom/google/android/gms/internal/measurement/zzpi;->zza()Z +HSPLcom/google/android/gms/internal/measurement/zzpi;->zzb()Z +HSPLcom/google/android/gms/internal/measurement/zzpi;->zzc()Z +HSPLcom/google/android/gms/internal/measurement/zzpi;->zzd()Z +HSPLcom/google/android/gms/internal/measurement/zzpi;->zze()Z +HSPLcom/google/android/gms/internal/measurement/zzpi;->zzf()Z +Lcom/google/android/gms/internal/measurement/zzpj; +Lcom/google/android/gms/internal/measurement/zzpk; +Lcom/google/android/gms/internal/measurement/zzpl; +HSPLcom/google/android/gms/internal/measurement/zzpl;->()V +HSPLcom/google/android/gms/internal/measurement/zzpl;->()V +HSPLcom/google/android/gms/internal/measurement/zzpl;->get()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zzpl;->zza()Z +HSPLcom/google/android/gms/internal/measurement/zzpl;->zzb()Z +Lcom/google/android/gms/internal/measurement/zzpm; +HSPLcom/google/android/gms/internal/measurement/zzpm;->()V +HSPLcom/google/android/gms/internal/measurement/zzpm;->()V +HSPLcom/google/android/gms/internal/measurement/zzpm;->get()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zzpm;->zzb()Z +Lcom/google/android/gms/internal/measurement/zzpn; +HSPLcom/google/android/gms/internal/measurement/zzpn;->()V +HSPLcom/google/android/gms/internal/measurement/zzpn;->()V +HSPLcom/google/android/gms/internal/measurement/zzpn;->zza()Z +HSPLcom/google/android/gms/internal/measurement/zzpn;->zzb()Z +Lcom/google/android/gms/internal/measurement/zzpo; +HSPLcom/google/android/gms/internal/measurement/zzpo;->()V +HSPLcom/google/android/gms/internal/measurement/zzpo;->()V +HSPLcom/google/android/gms/internal/measurement/zzpo;->zzb()Z +Lcom/google/android/gms/internal/measurement/zzpp; +Lcom/google/android/gms/internal/measurement/zzpq; +Lcom/google/android/gms/internal/measurement/zzpr; +HSPLcom/google/android/gms/internal/measurement/zzpr;->()V +HSPLcom/google/android/gms/internal/measurement/zzpr;->()V +HSPLcom/google/android/gms/internal/measurement/zzpr;->get()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zzpr;->zzb()Z +Lcom/google/android/gms/internal/measurement/zzps; +HSPLcom/google/android/gms/internal/measurement/zzps;->()V +HSPLcom/google/android/gms/internal/measurement/zzps;->()V +HSPLcom/google/android/gms/internal/measurement/zzps;->get()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zzps;->zza()Z +HSPLcom/google/android/gms/internal/measurement/zzps;->zzb()Z +HSPLcom/google/android/gms/internal/measurement/zzps;->zzc()Z +HSPLcom/google/android/gms/internal/measurement/zzps;->zzd()Z +Lcom/google/android/gms/internal/measurement/zzpt; +HSPLcom/google/android/gms/internal/measurement/zzpt;->()V +HSPLcom/google/android/gms/internal/measurement/zzpt;->()V +HSPLcom/google/android/gms/internal/measurement/zzpt;->zzb()Z +Lcom/google/android/gms/internal/measurement/zzpu; +HSPLcom/google/android/gms/internal/measurement/zzpu;->()V +HSPLcom/google/android/gms/internal/measurement/zzpu;->()V +HSPLcom/google/android/gms/internal/measurement/zzpu;->zza()Z +HSPLcom/google/android/gms/internal/measurement/zzpu;->zzb()Z +HSPLcom/google/android/gms/internal/measurement/zzpu;->zzc()Z +HSPLcom/google/android/gms/internal/measurement/zzpu;->zzd()Z +Lcom/google/android/gms/internal/measurement/zzpv; +Lcom/google/android/gms/internal/measurement/zzpw; +Lcom/google/android/gms/internal/measurement/zzpx; +HSPLcom/google/android/gms/internal/measurement/zzpx;->()V +HSPLcom/google/android/gms/internal/measurement/zzpx;->()V +HSPLcom/google/android/gms/internal/measurement/zzpx;->get()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zzpx;->zza()Z +Lcom/google/android/gms/internal/measurement/zzpy; +HSPLcom/google/android/gms/internal/measurement/zzpy;->()V +HSPLcom/google/android/gms/internal/measurement/zzpy;->()V +HSPLcom/google/android/gms/internal/measurement/zzpy;->get()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zzpy;->zzb()Z +HSPLcom/google/android/gms/internal/measurement/zzpy;->zzc()Z +Lcom/google/android/gms/internal/measurement/zzpz; +HSPLcom/google/android/gms/internal/measurement/zzpz;->()V +HSPLcom/google/android/gms/internal/measurement/zzpz;->()V +HSPLcom/google/android/gms/internal/measurement/zzpz;->zza()Z +Lcom/google/android/gms/internal/measurement/zzqa; +HSPLcom/google/android/gms/internal/measurement/zzqa;->()V +HSPLcom/google/android/gms/internal/measurement/zzqa;->()V +HSPLcom/google/android/gms/internal/measurement/zzqa;->zzb()Z +HSPLcom/google/android/gms/internal/measurement/zzqa;->zzc()Z +Lcom/google/android/gms/internal/measurement/zzqb; +Lcom/google/android/gms/internal/measurement/zzqc; +Lcom/google/android/gms/internal/measurement/zzqd; +HSPLcom/google/android/gms/internal/measurement/zzqd;->()V +HSPLcom/google/android/gms/internal/measurement/zzqd;->()V +HSPLcom/google/android/gms/internal/measurement/zzqd;->get()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zzqd;->zzb()Z +HSPLcom/google/android/gms/internal/measurement/zzqd;->zzc()Z +Lcom/google/android/gms/internal/measurement/zzqe; +HSPLcom/google/android/gms/internal/measurement/zzqe;->()V +HSPLcom/google/android/gms/internal/measurement/zzqe;->()V +HSPLcom/google/android/gms/internal/measurement/zzqe;->get()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zzqe;->zzb()Z +Lcom/google/android/gms/internal/measurement/zzqf; +HSPLcom/google/android/gms/internal/measurement/zzqf;->()V +HSPLcom/google/android/gms/internal/measurement/zzqf;->()V +HSPLcom/google/android/gms/internal/measurement/zzqf;->zzb()Z +HSPLcom/google/android/gms/internal/measurement/zzqf;->zzc()Z +Lcom/google/android/gms/internal/measurement/zzqg; +HSPLcom/google/android/gms/internal/measurement/zzqg;->()V +HSPLcom/google/android/gms/internal/measurement/zzqg;->()V +HSPLcom/google/android/gms/internal/measurement/zzqg;->zzb()Z +Lcom/google/android/gms/internal/measurement/zzqh; +Lcom/google/android/gms/internal/measurement/zzqi; +Lcom/google/android/gms/internal/measurement/zzqj; +HSPLcom/google/android/gms/internal/measurement/zzqj;->()V +HSPLcom/google/android/gms/internal/measurement/zzqj;->()V +HSPLcom/google/android/gms/internal/measurement/zzqj;->get()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zzqj;->zza()Z +Lcom/google/android/gms/internal/measurement/zzqk; +HSPLcom/google/android/gms/internal/measurement/zzqk;->()V +HSPLcom/google/android/gms/internal/measurement/zzqk;->()V +HSPLcom/google/android/gms/internal/measurement/zzqk;->get()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zzqk;->zza()Z +Lcom/google/android/gms/internal/measurement/zzql; +HSPLcom/google/android/gms/internal/measurement/zzql;->()V +HSPLcom/google/android/gms/internal/measurement/zzql;->()V +HSPLcom/google/android/gms/internal/measurement/zzql;->zza()Z +Lcom/google/android/gms/internal/measurement/zzqm; +HSPLcom/google/android/gms/internal/measurement/zzqm;->()V +HSPLcom/google/android/gms/internal/measurement/zzqm;->()V +HSPLcom/google/android/gms/internal/measurement/zzqm;->zza()Z +Lcom/google/android/gms/internal/measurement/zzqn; +Lcom/google/android/gms/internal/mlkit_common/zzaf; +HSPLcom/google/android/gms/internal/mlkit_common/zzaf;->zzb(IILjava/lang/String;)I +Lcom/google/android/gms/internal/mlkit_common/zzah; +HSPLcom/google/android/gms/internal/mlkit_common/zzah;->(II)V +Lcom/google/android/gms/internal/mlkit_common/zzaj; +Lcom/google/android/gms/internal/mlkit_common/zzan; +HSPLcom/google/android/gms/internal/mlkit_common/zzan;->()V +HSPLcom/google/android/gms/internal/mlkit_common/zzan;->()V +HSPLcom/google/android/gms/internal/mlkit_common/zzan;->toArray()[Ljava/lang/Object; +HSPLcom/google/android/gms/internal/mlkit_common/zzan;->toArray([Ljava/lang/Object;)[Ljava/lang/Object; +Lcom/google/android/gms/internal/mlkit_common/zzap; +HSPLcom/google/android/gms/internal/mlkit_common/zzap;->(Lcom/google/android/gms/internal/mlkit_common/zzar;I)V +Lcom/google/android/gms/internal/mlkit_common/zzar; +HSPLcom/google/android/gms/internal/mlkit_common/zzar;->()V +HSPLcom/google/android/gms/internal/mlkit_common/zzar;->()V +HSPLcom/google/android/gms/internal/mlkit_common/zzar;->zzg([Ljava/lang/Object;I)Lcom/google/android/gms/internal/mlkit_common/zzar; +HSPLcom/google/android/gms/internal/mlkit_common/zzar;->zzi(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Lcom/google/android/gms/internal/mlkit_common/zzar; +Lcom/google/android/gms/internal/mlkit_common/zzaw; +HSPLcom/google/android/gms/internal/mlkit_common/zzaw;->zza([Ljava/lang/Object;I)[Ljava/lang/Object; +Lcom/google/android/gms/internal/mlkit_common/zzax; +HSPLcom/google/android/gms/internal/mlkit_common/zzax;->()V +HSPLcom/google/android/gms/internal/mlkit_common/zzax;->([Ljava/lang/Object;I)V +HSPLcom/google/android/gms/internal/mlkit_common/zzax;->size()I +HSPLcom/google/android/gms/internal/mlkit_common/zzax;->zzb()I +HSPLcom/google/android/gms/internal/mlkit_common/zzax;->zzc()I +HSPLcom/google/android/gms/internal/mlkit_common/zzax;->zze()[Ljava/lang/Object; +Lcom/google/android/gms/internal/mlkit_common/zzbe; +HSPLcom/google/android/gms/internal/mlkit_common/zzbe;->()V +Lcom/google/android/gms/internal/mlkit_common/zzbf; +HSPLcom/google/android/gms/internal/mlkit_common/zzbf;->()V +Lcom/google/android/gms/internal/mlkit_common/zzbh; +Lcom/google/android/gms/internal/mlkit_vision_barcode/zzbc; +HSPLcom/google/android/gms/internal/mlkit_vision_barcode/zzbc;->zzb(IILjava/lang/String;)I +Lcom/google/android/gms/internal/mlkit_vision_barcode/zzbg; +HSPLcom/google/android/gms/internal/mlkit_vision_barcode/zzbg;->(II)V +Lcom/google/android/gms/internal/mlkit_vision_barcode/zzcq; +HSPLcom/google/android/gms/internal/mlkit_vision_barcode/zzcq;->()V +HSPLcom/google/android/gms/internal/mlkit_vision_barcode/zzcq;->()V +HSPLcom/google/android/gms/internal/mlkit_vision_barcode/zzcq;->toArray()[Ljava/lang/Object; +HSPLcom/google/android/gms/internal/mlkit_vision_barcode/zzcq;->toArray([Ljava/lang/Object;)[Ljava/lang/Object; +Lcom/google/android/gms/internal/mlkit_vision_barcode/zzct; +HSPLcom/google/android/gms/internal/mlkit_vision_barcode/zzct;->(Lcom/google/android/gms/internal/mlkit_vision_barcode/zzcv;I)V +Lcom/google/android/gms/internal/mlkit_vision_barcode/zzcv; +HSPLcom/google/android/gms/internal/mlkit_vision_barcode/zzcv;->()V +HSPLcom/google/android/gms/internal/mlkit_vision_barcode/zzcv;->()V +HSPLcom/google/android/gms/internal/mlkit_vision_barcode/zzcv;->zzg([Ljava/lang/Object;I)Lcom/google/android/gms/internal/mlkit_vision_barcode/zzcv; +HSPLcom/google/android/gms/internal/mlkit_vision_barcode/zzcv;->zzh(Ljava/lang/Object;Ljava/lang/Object;)Lcom/google/android/gms/internal/mlkit_vision_barcode/zzcv; +Lcom/google/android/gms/internal/mlkit_vision_barcode/zzdm; +HSPLcom/google/android/gms/internal/mlkit_vision_barcode/zzdm;->zza([Ljava/lang/Object;I)[Ljava/lang/Object; +Lcom/google/android/gms/internal/mlkit_vision_barcode/zzdn; +HSPLcom/google/android/gms/internal/mlkit_vision_barcode/zzdn;->()V +HSPLcom/google/android/gms/internal/mlkit_vision_barcode/zzdn;->([Ljava/lang/Object;I)V +HSPLcom/google/android/gms/internal/mlkit_vision_barcode/zzdn;->size()I +HSPLcom/google/android/gms/internal/mlkit_vision_barcode/zzdn;->zzb()I +HSPLcom/google/android/gms/internal/mlkit_vision_barcode/zzdn;->zzc()I +HSPLcom/google/android/gms/internal/mlkit_vision_barcode/zzdn;->zze()[Ljava/lang/Object; +Lcom/google/android/gms/internal/mlkit_vision_barcode/zzdx; +HSPLcom/google/android/gms/internal/mlkit_vision_barcode/zzdx;->()V +Lcom/google/android/gms/internal/mlkit_vision_barcode/zzdy; +HSPLcom/google/android/gms/internal/mlkit_vision_barcode/zzdy;->()V +Lcom/google/android/gms/internal/mlkit_vision_common/zzab; +HSPLcom/google/android/gms/internal/mlkit_vision_common/zzab;->()V +Lcom/google/android/gms/internal/mlkit_vision_common/zzac; +HSPLcom/google/android/gms/internal/mlkit_vision_common/zzac;->()V +Lcom/google/android/gms/internal/mlkit_vision_common/zzf; +HSPLcom/google/android/gms/internal/mlkit_vision_common/zzf;->zzb(IILjava/lang/String;)I +Lcom/google/android/gms/internal/mlkit_vision_common/zzh; +HSPLcom/google/android/gms/internal/mlkit_vision_common/zzh;->(II)V +Lcom/google/android/gms/internal/mlkit_vision_common/zzl; +HSPLcom/google/android/gms/internal/mlkit_vision_common/zzl;->()V +HSPLcom/google/android/gms/internal/mlkit_vision_common/zzl;->()V +HSPLcom/google/android/gms/internal/mlkit_vision_common/zzl;->toArray()[Ljava/lang/Object; +HSPLcom/google/android/gms/internal/mlkit_vision_common/zzl;->toArray([Ljava/lang/Object;)[Ljava/lang/Object; +Lcom/google/android/gms/internal/mlkit_vision_common/zzn; +HSPLcom/google/android/gms/internal/mlkit_vision_common/zzn;->(Lcom/google/android/gms/internal/mlkit_vision_common/zzp;I)V +Lcom/google/android/gms/internal/mlkit_vision_common/zzp; +HSPLcom/google/android/gms/internal/mlkit_vision_common/zzp;->()V +HSPLcom/google/android/gms/internal/mlkit_vision_common/zzp;->()V +HSPLcom/google/android/gms/internal/mlkit_vision_common/zzp;->zzh([Ljava/lang/Object;I)Lcom/google/android/gms/internal/mlkit_vision_common/zzp; +HSPLcom/google/android/gms/internal/mlkit_vision_common/zzp;->zzi(Ljava/lang/Object;)Lcom/google/android/gms/internal/mlkit_vision_common/zzp; +Lcom/google/android/gms/internal/mlkit_vision_common/zzt; +HSPLcom/google/android/gms/internal/mlkit_vision_common/zzt;->zza([Ljava/lang/Object;I)[Ljava/lang/Object; +Lcom/google/android/gms/internal/mlkit_vision_common/zzu; +HSPLcom/google/android/gms/internal/mlkit_vision_common/zzu;->()V +HSPLcom/google/android/gms/internal/mlkit_vision_common/zzu;->([Ljava/lang/Object;I)V +HSPLcom/google/android/gms/internal/mlkit_vision_common/zzu;->size()I +HSPLcom/google/android/gms/internal/mlkit_vision_common/zzu;->zzb()I +HSPLcom/google/android/gms/internal/mlkit_vision_common/zzu;->zzc()I +HSPLcom/google/android/gms/internal/mlkit_vision_common/zzu;->zze()[Ljava/lang/Object; +Lcom/google/android/gms/internal/tasks/zza; +HSPLcom/google/android/gms/internal/tasks/zza;->(Landroid/os/Looper;)V +Lcom/google/android/gms/measurement/api/AppMeasurementSdk; +HSPLcom/google/android/gms/measurement/api/AppMeasurementSdk;->(Lcom/google/android/gms/internal/measurement/zzdf;)V +HSPLcom/google/android/gms/measurement/api/AppMeasurementSdk;->registerOnMeasurementEventListener(Lcom/google/android/gms/measurement/api/AppMeasurementSdk$OnEventListener;)V +Lcom/google/android/gms/measurement/api/AppMeasurementSdk$OnEventListener; +Lcom/google/android/gms/measurement/internal/AppMeasurementDynamiteService; +HSPLcom/google/android/gms/measurement/internal/AppMeasurementDynamiteService;->()V +HSPLcom/google/android/gms/measurement/internal/AppMeasurementDynamiteService;->initialize(Lcom/google/android/gms/dynamic/IObjectWrapper;Lcom/google/android/gms/internal/measurement/zzdd;J)V +HSPLcom/google/android/gms/measurement/internal/AppMeasurementDynamiteService;->onActivityCreated(Lcom/google/android/gms/dynamic/IObjectWrapper;Landroid/os/Bundle;J)V +HSPLcom/google/android/gms/measurement/internal/AppMeasurementDynamiteService;->onActivityResumed(Lcom/google/android/gms/dynamic/IObjectWrapper;J)V +HSPLcom/google/android/gms/measurement/internal/AppMeasurementDynamiteService;->onActivityStarted(Lcom/google/android/gms/dynamic/IObjectWrapper;J)V +HSPLcom/google/android/gms/measurement/internal/AppMeasurementDynamiteService;->registerOnMeasurementEventListener(Lcom/google/android/gms/internal/measurement/zzda;)V +HSPLcom/google/android/gms/measurement/internal/AppMeasurementDynamiteService;->zza()V +Lcom/google/android/gms/measurement/internal/AppMeasurementDynamiteService$zzb; +HSPLcom/google/android/gms/measurement/internal/AppMeasurementDynamiteService$zzb;->(Lcom/google/android/gms/measurement/internal/AppMeasurementDynamiteService;Lcom/google/android/gms/internal/measurement/zzda;)V +Lcom/google/android/gms/measurement/internal/zzae; +HSPLcom/google/android/gms/measurement/internal/zzae;->(Landroid/content/Context;)V +HSPLcom/google/android/gms/measurement/internal/zzae;->zza()Z +Lcom/google/android/gms/measurement/internal/zzaf; +HSPLcom/google/android/gms/measurement/internal/zzaf;->(Lcom/google/android/gms/measurement/internal/zzhf;)V +HSPLcom/google/android/gms/measurement/internal/zzaf;->zza()Landroid/content/Context; +HSPLcom/google/android/gms/measurement/internal/zzaf;->zza(Lcom/google/android/gms/measurement/internal/zzfi;)Z +HSPLcom/google/android/gms/measurement/internal/zzaf;->zza(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; +HSPLcom/google/android/gms/measurement/internal/zzaf;->zzb(Ljava/lang/String;)I +HSPLcom/google/android/gms/measurement/internal/zzaf;->zze()Lcom/google/android/gms/measurement/internal/zzaf; +HSPLcom/google/android/gms/measurement/internal/zzaf;->zzf(Ljava/lang/String;Lcom/google/android/gms/measurement/internal/zzfi;)Z +HSPLcom/google/android/gms/measurement/internal/zzaf;->zzg(Ljava/lang/String;)Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzaf;->zzi(Ljava/lang/String;)Ljava/util/List; +HSPLcom/google/android/gms/measurement/internal/zzaf;->zzn()Ljava/lang/String; +HSPLcom/google/android/gms/measurement/internal/zzaf;->zzp()Z +HSPLcom/google/android/gms/measurement/internal/zzaf;->zzu()Z +HSPLcom/google/android/gms/measurement/internal/zzaf;->zzv()Z +HSPLcom/google/android/gms/measurement/internal/zzaf;->zzw()Z +HSPLcom/google/android/gms/measurement/internal/zzaf;->zzy()Landroid/os/Bundle; +Lcom/google/android/gms/measurement/internal/zzah; +Lcom/google/android/gms/measurement/internal/zzai; +HSPLcom/google/android/gms/measurement/internal/zzai;->()V +HSPLcom/google/android/gms/measurement/internal/zzai;->()V +Lcom/google/android/gms/measurement/internal/zzav; +HSPLcom/google/android/gms/measurement/internal/zzav;->(Lcom/google/android/gms/measurement/internal/zzaw;Lcom/google/android/gms/measurement/internal/zzif;)V +PLcom/google/android/gms/measurement/internal/zzav;->run()V +Lcom/google/android/gms/measurement/internal/zzaw; +HSPLcom/google/android/gms/measurement/internal/zzaw;->(Lcom/google/android/gms/measurement/internal/zzif;)V +HSPLcom/google/android/gms/measurement/internal/zzaw;->zza()V +HSPLcom/google/android/gms/measurement/internal/zzaw;->zza(J)V +PLcom/google/android/gms/measurement/internal/zzaw;->zza(Lcom/google/android/gms/measurement/internal/zzaw;J)V +PLcom/google/android/gms/measurement/internal/zzaw;->zzc()Z +HSPLcom/google/android/gms/measurement/internal/zzaw;->zzd()Landroid/os/Handler; +Lcom/google/android/gms/measurement/internal/zzb; +HSPLcom/google/android/gms/measurement/internal/zzb;->(Lcom/google/android/gms/measurement/internal/zzhf;)V +HSPLcom/google/android/gms/measurement/internal/zzb;->zza(Lcom/google/android/gms/measurement/internal/zzb;J)V +HSPLcom/google/android/gms/measurement/internal/zzb;->zzb()Lcom/google/android/gms/common/util/Clock; +HSPLcom/google/android/gms/measurement/internal/zzb;->zzb(J)V +HSPLcom/google/android/gms/measurement/internal/zzb;->zzl()Lcom/google/android/gms/measurement/internal/zzgy; +Lcom/google/android/gms/measurement/internal/zzba; +HSPLcom/google/android/gms/measurement/internal/zzba;->(Lcom/google/android/gms/measurement/internal/zzhf;)V +HSPLcom/google/android/gms/measurement/internal/zzba;->zzo()Z +Lcom/google/android/gms/measurement/internal/zzbi; +HSPLcom/google/android/gms/measurement/internal/zzbi;->()V +HSPLcom/google/android/gms/measurement/internal/zzbi;->zza()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zza(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;Lcom/google/android/gms/measurement/internal/zzfg;)Lcom/google/android/gms/measurement/internal/zzfi; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzaa()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzab()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzac()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzad()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzae()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzaf()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzag()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzah()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzai()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzaj()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzak()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzal()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzam()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzan()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzao()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzap()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzaq()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzar()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzas()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzat()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzau()Ljava/lang/Double; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzav()Ljava/lang/Integer; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzaw()Ljava/lang/Integer; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzax()Ljava/lang/Integer; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzay()Ljava/lang/Integer; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzaz()Ljava/lang/Integer; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzb()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzba()Ljava/lang/Integer; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzbb()Ljava/lang/Integer; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzbc()Ljava/lang/Integer; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzbd()Ljava/lang/Integer; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzbe()Ljava/lang/Integer; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzbf()Ljava/lang/Integer; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzbg()Ljava/lang/Integer; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzbh()Ljava/lang/Integer; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzbi()Ljava/lang/Integer; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzbj()Ljava/lang/Integer; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzbk()Ljava/lang/Integer; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzbl()Ljava/lang/Integer; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzbm()Ljava/lang/Integer; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzbn()Ljava/lang/Integer; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzbo()Ljava/lang/Integer; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzbp()Ljava/lang/Long; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzbq()Ljava/lang/Long; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzbr()Ljava/lang/Long; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzbs()Ljava/lang/Long; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzbt()Ljava/lang/Long; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzbu()Ljava/lang/Long; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzbv()Ljava/lang/Long; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzbw()Ljava/lang/Long; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzbx()Ljava/lang/Long; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzby()Ljava/lang/Long; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzbz()Ljava/lang/Long; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzc()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzca()Ljava/lang/Long; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzcb()Ljava/lang/Long; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzcc()Ljava/lang/Long; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzcd()Ljava/lang/Long; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzce()Ljava/lang/Long; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzcf()Ljava/lang/Long; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzcg()Ljava/lang/Long; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzch()Ljava/lang/Long; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzci()Ljava/lang/Long; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzcj()Ljava/lang/String; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzck()Ljava/lang/String; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzcl()Ljava/lang/String; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzcm()Ljava/lang/String; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzcn()Ljava/lang/String; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzco()Ljava/lang/String; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzcp()Ljava/lang/String; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzcq()Ljava/lang/String; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzcr()Ljava/lang/String; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzcs()Ljava/lang/String; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzct()Ljava/lang/String; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzcu()Ljava/util/List; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzd()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zze()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzf()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzg()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzh()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzi()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzj()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzk()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzl()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzm()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzn()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzo()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzp()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzq()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzr()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzs()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzt()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzu()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzv()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzw()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzx()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzy()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzz()Ljava/lang/Boolean; +Lcom/google/android/gms/measurement/internal/zzbj; +HSPLcom/google/android/gms/measurement/internal/zzbj;->()V +HSPLcom/google/android/gms/measurement/internal/zzbj;->()V +HSPLcom/google/android/gms/measurement/internal/zzbj;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzbk; +HSPLcom/google/android/gms/measurement/internal/zzbk;->()V +HSPLcom/google/android/gms/measurement/internal/zzbk;->()V +HSPLcom/google/android/gms/measurement/internal/zzbk;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzbl; +HSPLcom/google/android/gms/measurement/internal/zzbl;->()V +HSPLcom/google/android/gms/measurement/internal/zzbl;->()V +HSPLcom/google/android/gms/measurement/internal/zzbl;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzbm; +HSPLcom/google/android/gms/measurement/internal/zzbm;->()V +HSPLcom/google/android/gms/measurement/internal/zzbm;->()V +HSPLcom/google/android/gms/measurement/internal/zzbm;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzbn; +HSPLcom/google/android/gms/measurement/internal/zzbn;->()V +HSPLcom/google/android/gms/measurement/internal/zzbn;->()V +HSPLcom/google/android/gms/measurement/internal/zzbn;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzbo; +HSPLcom/google/android/gms/measurement/internal/zzbo;->()V +HSPLcom/google/android/gms/measurement/internal/zzbo;->()V +HSPLcom/google/android/gms/measurement/internal/zzbo;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzbp; +HSPLcom/google/android/gms/measurement/internal/zzbp;->()V +HSPLcom/google/android/gms/measurement/internal/zzbp;->()V +HSPLcom/google/android/gms/measurement/internal/zzbp;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzbq; +HSPLcom/google/android/gms/measurement/internal/zzbq;->()V +HSPLcom/google/android/gms/measurement/internal/zzbq;->()V +HSPLcom/google/android/gms/measurement/internal/zzbq;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzbr; +HSPLcom/google/android/gms/measurement/internal/zzbr;->()V +HSPLcom/google/android/gms/measurement/internal/zzbr;->()V +HSPLcom/google/android/gms/measurement/internal/zzbr;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzbs; +HSPLcom/google/android/gms/measurement/internal/zzbs;->()V +HSPLcom/google/android/gms/measurement/internal/zzbs;->()V +HSPLcom/google/android/gms/measurement/internal/zzbs;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzbt; +HSPLcom/google/android/gms/measurement/internal/zzbt;->()V +HSPLcom/google/android/gms/measurement/internal/zzbt;->()V +HSPLcom/google/android/gms/measurement/internal/zzbt;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzbu; +HSPLcom/google/android/gms/measurement/internal/zzbu;->()V +HSPLcom/google/android/gms/measurement/internal/zzbu;->()V +HSPLcom/google/android/gms/measurement/internal/zzbu;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzbv; +HSPLcom/google/android/gms/measurement/internal/zzbv;->()V +HSPLcom/google/android/gms/measurement/internal/zzbv;->()V +HSPLcom/google/android/gms/measurement/internal/zzbv;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzbw; +HSPLcom/google/android/gms/measurement/internal/zzbw;->()V +HSPLcom/google/android/gms/measurement/internal/zzbw;->()V +HSPLcom/google/android/gms/measurement/internal/zzbw;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzbx; +HSPLcom/google/android/gms/measurement/internal/zzbx;->()V +HSPLcom/google/android/gms/measurement/internal/zzbx;->()V +HSPLcom/google/android/gms/measurement/internal/zzbx;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzby; +HSPLcom/google/android/gms/measurement/internal/zzby;->()V +HSPLcom/google/android/gms/measurement/internal/zzby;->()V +HSPLcom/google/android/gms/measurement/internal/zzby;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzbz; +HSPLcom/google/android/gms/measurement/internal/zzbz;->()V +HSPLcom/google/android/gms/measurement/internal/zzbz;->()V +HSPLcom/google/android/gms/measurement/internal/zzbz;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzc; +HSPLcom/google/android/gms/measurement/internal/zzc;->(Lcom/google/android/gms/measurement/internal/zzb;J)V +HSPLcom/google/android/gms/measurement/internal/zzc;->run()V +Lcom/google/android/gms/measurement/internal/zzca; +HSPLcom/google/android/gms/measurement/internal/zzca;->()V +HSPLcom/google/android/gms/measurement/internal/zzca;->()V +HSPLcom/google/android/gms/measurement/internal/zzca;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzcb; +HSPLcom/google/android/gms/measurement/internal/zzcb;->()V +HSPLcom/google/android/gms/measurement/internal/zzcb;->()V +HSPLcom/google/android/gms/measurement/internal/zzcb;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzcc; +HSPLcom/google/android/gms/measurement/internal/zzcc;->()V +HSPLcom/google/android/gms/measurement/internal/zzcc;->()V +HSPLcom/google/android/gms/measurement/internal/zzcc;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzcd; +HSPLcom/google/android/gms/measurement/internal/zzcd;->()V +HSPLcom/google/android/gms/measurement/internal/zzcd;->()V +HSPLcom/google/android/gms/measurement/internal/zzcd;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzce; +HSPLcom/google/android/gms/measurement/internal/zzce;->()V +HSPLcom/google/android/gms/measurement/internal/zzce;->()V +HSPLcom/google/android/gms/measurement/internal/zzce;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzcf; +HSPLcom/google/android/gms/measurement/internal/zzcf;->()V +HSPLcom/google/android/gms/measurement/internal/zzcf;->()V +HSPLcom/google/android/gms/measurement/internal/zzcf;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzcg; +HSPLcom/google/android/gms/measurement/internal/zzcg;->()V +HSPLcom/google/android/gms/measurement/internal/zzcg;->()V +HSPLcom/google/android/gms/measurement/internal/zzcg;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzch; +HSPLcom/google/android/gms/measurement/internal/zzch;->()V +HSPLcom/google/android/gms/measurement/internal/zzch;->()V +HSPLcom/google/android/gms/measurement/internal/zzch;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzci; +HSPLcom/google/android/gms/measurement/internal/zzci;->()V +HSPLcom/google/android/gms/measurement/internal/zzci;->()V +HSPLcom/google/android/gms/measurement/internal/zzci;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzcj; +HSPLcom/google/android/gms/measurement/internal/zzcj;->()V +HSPLcom/google/android/gms/measurement/internal/zzcj;->()V +HSPLcom/google/android/gms/measurement/internal/zzcj;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzck; +HSPLcom/google/android/gms/measurement/internal/zzck;->()V +HSPLcom/google/android/gms/measurement/internal/zzck;->()V +HSPLcom/google/android/gms/measurement/internal/zzck;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzcl; +HSPLcom/google/android/gms/measurement/internal/zzcl;->()V +HSPLcom/google/android/gms/measurement/internal/zzcl;->()V +HSPLcom/google/android/gms/measurement/internal/zzcl;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzcm; +HSPLcom/google/android/gms/measurement/internal/zzcm;->()V +HSPLcom/google/android/gms/measurement/internal/zzcm;->()V +HSPLcom/google/android/gms/measurement/internal/zzcm;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzcn; +HSPLcom/google/android/gms/measurement/internal/zzcn;->()V +HSPLcom/google/android/gms/measurement/internal/zzcn;->()V +HSPLcom/google/android/gms/measurement/internal/zzcn;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzco; +HSPLcom/google/android/gms/measurement/internal/zzco;->()V +HSPLcom/google/android/gms/measurement/internal/zzco;->()V +HSPLcom/google/android/gms/measurement/internal/zzco;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzcp; +HSPLcom/google/android/gms/measurement/internal/zzcp;->()V +HSPLcom/google/android/gms/measurement/internal/zzcp;->()V +HSPLcom/google/android/gms/measurement/internal/zzcp;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzcq; +HSPLcom/google/android/gms/measurement/internal/zzcq;->()V +HSPLcom/google/android/gms/measurement/internal/zzcq;->()V +HSPLcom/google/android/gms/measurement/internal/zzcq;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzcr; +HSPLcom/google/android/gms/measurement/internal/zzcr;->()V +HSPLcom/google/android/gms/measurement/internal/zzcr;->()V +HSPLcom/google/android/gms/measurement/internal/zzcr;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzcs; +HSPLcom/google/android/gms/measurement/internal/zzcs;->()V +HSPLcom/google/android/gms/measurement/internal/zzcs;->()V +HSPLcom/google/android/gms/measurement/internal/zzcs;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzct; +HSPLcom/google/android/gms/measurement/internal/zzct;->()V +HSPLcom/google/android/gms/measurement/internal/zzct;->()V +HSPLcom/google/android/gms/measurement/internal/zzct;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzcu; +HSPLcom/google/android/gms/measurement/internal/zzcu;->()V +HSPLcom/google/android/gms/measurement/internal/zzcu;->()V +HSPLcom/google/android/gms/measurement/internal/zzcu;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzcv; +HSPLcom/google/android/gms/measurement/internal/zzcv;->()V +HSPLcom/google/android/gms/measurement/internal/zzcv;->()V +HSPLcom/google/android/gms/measurement/internal/zzcv;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzcw; +HSPLcom/google/android/gms/measurement/internal/zzcw;->()V +HSPLcom/google/android/gms/measurement/internal/zzcw;->()V +HSPLcom/google/android/gms/measurement/internal/zzcw;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzcx; +HSPLcom/google/android/gms/measurement/internal/zzcx;->()V +HSPLcom/google/android/gms/measurement/internal/zzcx;->()V +HSPLcom/google/android/gms/measurement/internal/zzcx;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzcy; +HSPLcom/google/android/gms/measurement/internal/zzcy;->()V +HSPLcom/google/android/gms/measurement/internal/zzcy;->()V +HSPLcom/google/android/gms/measurement/internal/zzcy;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzcz; +HSPLcom/google/android/gms/measurement/internal/zzcz;->()V +HSPLcom/google/android/gms/measurement/internal/zzcz;->()V +HSPLcom/google/android/gms/measurement/internal/zzcz;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzda; +HSPLcom/google/android/gms/measurement/internal/zzda;->()V +HSPLcom/google/android/gms/measurement/internal/zzda;->()V +HSPLcom/google/android/gms/measurement/internal/zzda;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzdb; +HSPLcom/google/android/gms/measurement/internal/zzdb;->()V +HSPLcom/google/android/gms/measurement/internal/zzdb;->()V +HSPLcom/google/android/gms/measurement/internal/zzdb;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzdc; +HSPLcom/google/android/gms/measurement/internal/zzdc;->()V +HSPLcom/google/android/gms/measurement/internal/zzdc;->()V +HSPLcom/google/android/gms/measurement/internal/zzdc;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzdd; +HSPLcom/google/android/gms/measurement/internal/zzdd;->()V +HSPLcom/google/android/gms/measurement/internal/zzdd;->()V +HSPLcom/google/android/gms/measurement/internal/zzdd;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzde; +HSPLcom/google/android/gms/measurement/internal/zzde;->()V +HSPLcom/google/android/gms/measurement/internal/zzde;->()V +HSPLcom/google/android/gms/measurement/internal/zzde;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzdf; +HSPLcom/google/android/gms/measurement/internal/zzdf;->()V +HSPLcom/google/android/gms/measurement/internal/zzdf;->()V +HSPLcom/google/android/gms/measurement/internal/zzdf;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzdg; +HSPLcom/google/android/gms/measurement/internal/zzdg;->()V +HSPLcom/google/android/gms/measurement/internal/zzdg;->()V +HSPLcom/google/android/gms/measurement/internal/zzdg;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzdh; +HSPLcom/google/android/gms/measurement/internal/zzdh;->()V +HSPLcom/google/android/gms/measurement/internal/zzdh;->()V +HSPLcom/google/android/gms/measurement/internal/zzdh;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzdi; +HSPLcom/google/android/gms/measurement/internal/zzdi;->()V +HSPLcom/google/android/gms/measurement/internal/zzdi;->()V +HSPLcom/google/android/gms/measurement/internal/zzdi;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzdj; +HSPLcom/google/android/gms/measurement/internal/zzdj;->()V +HSPLcom/google/android/gms/measurement/internal/zzdj;->()V +HSPLcom/google/android/gms/measurement/internal/zzdj;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzdk; +HSPLcom/google/android/gms/measurement/internal/zzdk;->()V +HSPLcom/google/android/gms/measurement/internal/zzdk;->()V +HSPLcom/google/android/gms/measurement/internal/zzdk;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzdl; +HSPLcom/google/android/gms/measurement/internal/zzdl;->()V +HSPLcom/google/android/gms/measurement/internal/zzdl;->()V +HSPLcom/google/android/gms/measurement/internal/zzdl;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzdm; +HSPLcom/google/android/gms/measurement/internal/zzdm;->()V +HSPLcom/google/android/gms/measurement/internal/zzdm;->()V +HSPLcom/google/android/gms/measurement/internal/zzdm;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzdn; +HSPLcom/google/android/gms/measurement/internal/zzdn;->()V +HSPLcom/google/android/gms/measurement/internal/zzdn;->()V +HSPLcom/google/android/gms/measurement/internal/zzdn;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzdo; +HSPLcom/google/android/gms/measurement/internal/zzdo;->()V +HSPLcom/google/android/gms/measurement/internal/zzdo;->()V +HSPLcom/google/android/gms/measurement/internal/zzdo;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzdp; +HSPLcom/google/android/gms/measurement/internal/zzdp;->()V +HSPLcom/google/android/gms/measurement/internal/zzdp;->()V +HSPLcom/google/android/gms/measurement/internal/zzdp;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzdq; +HSPLcom/google/android/gms/measurement/internal/zzdq;->()V +HSPLcom/google/android/gms/measurement/internal/zzdq;->()V +HSPLcom/google/android/gms/measurement/internal/zzdq;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzdr; +HSPLcom/google/android/gms/measurement/internal/zzdr;->()V +HSPLcom/google/android/gms/measurement/internal/zzdr;->()V +HSPLcom/google/android/gms/measurement/internal/zzdr;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzds; +HSPLcom/google/android/gms/measurement/internal/zzds;->()V +HSPLcom/google/android/gms/measurement/internal/zzds;->()V +HSPLcom/google/android/gms/measurement/internal/zzds;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzdt; +HSPLcom/google/android/gms/measurement/internal/zzdt;->()V +HSPLcom/google/android/gms/measurement/internal/zzdt;->()V +HSPLcom/google/android/gms/measurement/internal/zzdt;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzdu; +HSPLcom/google/android/gms/measurement/internal/zzdu;->()V +HSPLcom/google/android/gms/measurement/internal/zzdu;->()V +HSPLcom/google/android/gms/measurement/internal/zzdu;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzdv; +HSPLcom/google/android/gms/measurement/internal/zzdv;->()V +HSPLcom/google/android/gms/measurement/internal/zzdv;->()V +HSPLcom/google/android/gms/measurement/internal/zzdv;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzdw; +HSPLcom/google/android/gms/measurement/internal/zzdw;->()V +HSPLcom/google/android/gms/measurement/internal/zzdw;->()V +HSPLcom/google/android/gms/measurement/internal/zzdw;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzdx; +HSPLcom/google/android/gms/measurement/internal/zzdx;->()V +HSPLcom/google/android/gms/measurement/internal/zzdx;->()V +HSPLcom/google/android/gms/measurement/internal/zzdx;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzdy; +HSPLcom/google/android/gms/measurement/internal/zzdy;->()V +HSPLcom/google/android/gms/measurement/internal/zzdy;->()V +HSPLcom/google/android/gms/measurement/internal/zzdy;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzdz; +HSPLcom/google/android/gms/measurement/internal/zzdz;->()V +HSPLcom/google/android/gms/measurement/internal/zzdz;->()V +HSPLcom/google/android/gms/measurement/internal/zzdz;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zze; +HSPLcom/google/android/gms/measurement/internal/zze;->(Lcom/google/android/gms/measurement/internal/zzhf;)V +HSPLcom/google/android/gms/measurement/internal/zze;->zzu()V +HSPLcom/google/android/gms/measurement/internal/zze;->zzv()V +HSPLcom/google/android/gms/measurement/internal/zze;->zzw()V +HSPLcom/google/android/gms/measurement/internal/zze;->zzy()Z +Lcom/google/android/gms/measurement/internal/zzea; +HSPLcom/google/android/gms/measurement/internal/zzea;->()V +HSPLcom/google/android/gms/measurement/internal/zzea;->()V +HSPLcom/google/android/gms/measurement/internal/zzea;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzeb; +HSPLcom/google/android/gms/measurement/internal/zzeb;->()V +HSPLcom/google/android/gms/measurement/internal/zzeb;->()V +HSPLcom/google/android/gms/measurement/internal/zzeb;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzec; +HSPLcom/google/android/gms/measurement/internal/zzec;->()V +HSPLcom/google/android/gms/measurement/internal/zzec;->()V +HSPLcom/google/android/gms/measurement/internal/zzec;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzed; +HSPLcom/google/android/gms/measurement/internal/zzed;->()V +HSPLcom/google/android/gms/measurement/internal/zzed;->()V +HSPLcom/google/android/gms/measurement/internal/zzed;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzee; +HSPLcom/google/android/gms/measurement/internal/zzee;->()V +HSPLcom/google/android/gms/measurement/internal/zzee;->()V +HSPLcom/google/android/gms/measurement/internal/zzee;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzef; +HSPLcom/google/android/gms/measurement/internal/zzef;->()V +HSPLcom/google/android/gms/measurement/internal/zzef;->()V +HSPLcom/google/android/gms/measurement/internal/zzef;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzeg; +HSPLcom/google/android/gms/measurement/internal/zzeg;->()V +HSPLcom/google/android/gms/measurement/internal/zzeg;->()V +HSPLcom/google/android/gms/measurement/internal/zzeg;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzeh; +HSPLcom/google/android/gms/measurement/internal/zzeh;->()V +HSPLcom/google/android/gms/measurement/internal/zzeh;->()V +HSPLcom/google/android/gms/measurement/internal/zzeh;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzei; +HSPLcom/google/android/gms/measurement/internal/zzei;->()V +HSPLcom/google/android/gms/measurement/internal/zzei;->()V +HSPLcom/google/android/gms/measurement/internal/zzei;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzej; +HSPLcom/google/android/gms/measurement/internal/zzej;->()V +HSPLcom/google/android/gms/measurement/internal/zzej;->()V +HSPLcom/google/android/gms/measurement/internal/zzej;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzek; +HSPLcom/google/android/gms/measurement/internal/zzek;->()V +HSPLcom/google/android/gms/measurement/internal/zzek;->()V +HSPLcom/google/android/gms/measurement/internal/zzek;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzel; +HSPLcom/google/android/gms/measurement/internal/zzel;->()V +HSPLcom/google/android/gms/measurement/internal/zzel;->()V +HSPLcom/google/android/gms/measurement/internal/zzel;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzem; +HSPLcom/google/android/gms/measurement/internal/zzem;->()V +HSPLcom/google/android/gms/measurement/internal/zzem;->()V +HSPLcom/google/android/gms/measurement/internal/zzem;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzen; +HSPLcom/google/android/gms/measurement/internal/zzen;->()V +HSPLcom/google/android/gms/measurement/internal/zzen;->()V +HSPLcom/google/android/gms/measurement/internal/zzen;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzeo; +HSPLcom/google/android/gms/measurement/internal/zzeo;->()V +HSPLcom/google/android/gms/measurement/internal/zzeo;->()V +HSPLcom/google/android/gms/measurement/internal/zzeo;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzep; +HSPLcom/google/android/gms/measurement/internal/zzep;->()V +HSPLcom/google/android/gms/measurement/internal/zzep;->()V +HSPLcom/google/android/gms/measurement/internal/zzep;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzeq; +HSPLcom/google/android/gms/measurement/internal/zzeq;->()V +HSPLcom/google/android/gms/measurement/internal/zzeq;->()V +HSPLcom/google/android/gms/measurement/internal/zzeq;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzer; +HSPLcom/google/android/gms/measurement/internal/zzer;->()V +HSPLcom/google/android/gms/measurement/internal/zzer;->()V +HSPLcom/google/android/gms/measurement/internal/zzer;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzes; +HSPLcom/google/android/gms/measurement/internal/zzes;->()V +HSPLcom/google/android/gms/measurement/internal/zzes;->()V +HSPLcom/google/android/gms/measurement/internal/zzes;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzet; +HSPLcom/google/android/gms/measurement/internal/zzet;->()V +HSPLcom/google/android/gms/measurement/internal/zzet;->()V +HSPLcom/google/android/gms/measurement/internal/zzet;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzeu; +HSPLcom/google/android/gms/measurement/internal/zzeu;->()V +HSPLcom/google/android/gms/measurement/internal/zzeu;->()V +HSPLcom/google/android/gms/measurement/internal/zzeu;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzev; +HSPLcom/google/android/gms/measurement/internal/zzev;->()V +HSPLcom/google/android/gms/measurement/internal/zzev;->()V +HSPLcom/google/android/gms/measurement/internal/zzev;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzew; +HSPLcom/google/android/gms/measurement/internal/zzew;->()V +HSPLcom/google/android/gms/measurement/internal/zzew;->()V +HSPLcom/google/android/gms/measurement/internal/zzew;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzex; +HSPLcom/google/android/gms/measurement/internal/zzex;->()V +HSPLcom/google/android/gms/measurement/internal/zzex;->()V +HSPLcom/google/android/gms/measurement/internal/zzex;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzey; +HSPLcom/google/android/gms/measurement/internal/zzey;->()V +HSPLcom/google/android/gms/measurement/internal/zzey;->()V +HSPLcom/google/android/gms/measurement/internal/zzey;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzez; +HSPLcom/google/android/gms/measurement/internal/zzez;->()V +HSPLcom/google/android/gms/measurement/internal/zzez;->()V +HSPLcom/google/android/gms/measurement/internal/zzez;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzf; +HSPLcom/google/android/gms/measurement/internal/zzf;->(Lcom/google/android/gms/measurement/internal/zzhf;)V +HSPLcom/google/android/gms/measurement/internal/zzf;->zzc()Lcom/google/android/gms/measurement/internal/zzb; +HSPLcom/google/android/gms/measurement/internal/zzf;->zzg()Lcom/google/android/gms/measurement/internal/zzfl; +HSPLcom/google/android/gms/measurement/internal/zzf;->zzm()Lcom/google/android/gms/measurement/internal/zziq; +HSPLcom/google/android/gms/measurement/internal/zzf;->zzn()Lcom/google/android/gms/measurement/internal/zzkh; +HSPLcom/google/android/gms/measurement/internal/zzf;->zzo()Lcom/google/android/gms/measurement/internal/zzkp; +HSPLcom/google/android/gms/measurement/internal/zzf;->zzp()Lcom/google/android/gms/measurement/internal/zzlx; +HSPLcom/google/android/gms/measurement/internal/zzf;->zzt()V +Lcom/google/android/gms/measurement/internal/zzfa; +HSPLcom/google/android/gms/measurement/internal/zzfa;->()V +HSPLcom/google/android/gms/measurement/internal/zzfa;->()V +HSPLcom/google/android/gms/measurement/internal/zzfa;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzfb; +HSPLcom/google/android/gms/measurement/internal/zzfb;->()V +HSPLcom/google/android/gms/measurement/internal/zzfb;->()V +HSPLcom/google/android/gms/measurement/internal/zzfb;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzfc; +HSPLcom/google/android/gms/measurement/internal/zzfc;->()V +HSPLcom/google/android/gms/measurement/internal/zzfc;->()V +HSPLcom/google/android/gms/measurement/internal/zzfc;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzfd; +HSPLcom/google/android/gms/measurement/internal/zzfd;->()V +HSPLcom/google/android/gms/measurement/internal/zzfd;->()V +HSPLcom/google/android/gms/measurement/internal/zzfd;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzfe; +HSPLcom/google/android/gms/measurement/internal/zzfe;->()V +HSPLcom/google/android/gms/measurement/internal/zzfe;->()V +HSPLcom/google/android/gms/measurement/internal/zzfe;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzff; +Lcom/google/android/gms/measurement/internal/zzfg; +Lcom/google/android/gms/measurement/internal/zzfi; +HSPLcom/google/android/gms/measurement/internal/zzfi;->()V +HSPLcom/google/android/gms/measurement/internal/zzfi;->(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;Lcom/google/android/gms/measurement/internal/zzfg;)V +HSPLcom/google/android/gms/measurement/internal/zzfi;->(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;Lcom/google/android/gms/measurement/internal/zzfg;Lcom/google/android/gms/measurement/internal/zzfh;)V +HSPLcom/google/android/gms/measurement/internal/zzfi;->zza(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzfk; +Lcom/google/android/gms/measurement/internal/zzfl; +HSPLcom/google/android/gms/measurement/internal/zzfl;->(Lcom/google/android/gms/measurement/internal/zzhf;J)V +HSPLcom/google/android/gms/measurement/internal/zzfl;->zza()Landroid/content/Context; +HSPLcom/google/android/gms/measurement/internal/zzfl;->zza(Ljava/lang/String;)Lcom/google/android/gms/measurement/internal/zzo; +HSPLcom/google/android/gms/measurement/internal/zzfl;->zzaa()I +HSPLcom/google/android/gms/measurement/internal/zzfl;->zzab()I +HSPLcom/google/android/gms/measurement/internal/zzfl;->zzac()Ljava/lang/String; +HSPLcom/google/android/gms/measurement/internal/zzfl;->zzad()Ljava/lang/String; +HSPLcom/google/android/gms/measurement/internal/zzfl;->zzae()Ljava/lang/String; +HSPLcom/google/android/gms/measurement/internal/zzfl;->zzag()V +HSPLcom/google/android/gms/measurement/internal/zzfl;->zzb()Lcom/google/android/gms/common/util/Clock; +HSPLcom/google/android/gms/measurement/internal/zzfl;->zze()Lcom/google/android/gms/measurement/internal/zzaf; +HSPLcom/google/android/gms/measurement/internal/zzfl;->zzj()Lcom/google/android/gms/measurement/internal/zzfr; +HSPLcom/google/android/gms/measurement/internal/zzfl;->zzk()Lcom/google/android/gms/measurement/internal/zzgd; +HSPLcom/google/android/gms/measurement/internal/zzfl;->zzq()Lcom/google/android/gms/measurement/internal/zznd; +HSPLcom/google/android/gms/measurement/internal/zzfl;->zzt()V +HSPLcom/google/android/gms/measurement/internal/zzfl;->zzx()V +HSPLcom/google/android/gms/measurement/internal/zzfl;->zzz()Z +Lcom/google/android/gms/measurement/internal/zzfm; +HSPLcom/google/android/gms/measurement/internal/zzfm;->(Landroid/os/IBinder;)V +HSPLcom/google/android/gms/measurement/internal/zzfm;->zza(JLjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V +HSPLcom/google/android/gms/measurement/internal/zzfm;->zza(Landroid/os/Bundle;Lcom/google/android/gms/measurement/internal/zzo;)V +HSPLcom/google/android/gms/measurement/internal/zzfm;->zzb(Lcom/google/android/gms/measurement/internal/zzo;)Ljava/lang/String; +Lcom/google/android/gms/measurement/internal/zzfn; +HSPLcom/google/android/gms/measurement/internal/zzfn;->(Lcom/google/android/gms/measurement/internal/zzfo;Landroid/content/Context;Ljava/lang/String;)V +Lcom/google/android/gms/measurement/internal/zzfo; +HSPLcom/google/android/gms/measurement/internal/zzfo;->(Lcom/google/android/gms/measurement/internal/zzhf;)V +HSPLcom/google/android/gms/measurement/internal/zzfo;->zza()Landroid/content/Context; +HSPLcom/google/android/gms/measurement/internal/zzfo;->zzz()Z +Lcom/google/android/gms/measurement/internal/zzfp; +Lcom/google/android/gms/measurement/internal/zzfq; +HSPLcom/google/android/gms/measurement/internal/zzfq;->()V +HSPLcom/google/android/gms/measurement/internal/zzfq;->(Lcom/google/android/gms/measurement/internal/zzfp;)V +Lcom/google/android/gms/measurement/internal/zzfr; +HSPLcom/google/android/gms/measurement/internal/zzfr;->(Lcom/google/android/gms/measurement/internal/zzhf;)V +HSPLcom/google/android/gms/measurement/internal/zzfr;->zza(I)Z +HSPLcom/google/android/gms/measurement/internal/zzfr;->zza(ILjava/lang/String;)V +HSPLcom/google/android/gms/measurement/internal/zzfr;->zza(IZZLjava/lang/String;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V +HSPLcom/google/android/gms/measurement/internal/zzfr;->zza(ZLjava/lang/Object;)Ljava/lang/String; +HSPLcom/google/android/gms/measurement/internal/zzfr;->zza(ZLjava/lang/String;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/String; +HSPLcom/google/android/gms/measurement/internal/zzfr;->zzc()Lcom/google/android/gms/measurement/internal/zzft; +HSPLcom/google/android/gms/measurement/internal/zzfr;->zzn()Lcom/google/android/gms/measurement/internal/zzft; +HSPLcom/google/android/gms/measurement/internal/zzfr;->zzo()Z +HSPLcom/google/android/gms/measurement/internal/zzfr;->zzp()Lcom/google/android/gms/measurement/internal/zzft; +HSPLcom/google/android/gms/measurement/internal/zzfr;->zzy()Ljava/lang/String; +Lcom/google/android/gms/measurement/internal/zzfs; +HSPLcom/google/android/gms/measurement/internal/zzfs;->(Landroid/content/Context;Landroid/os/Looper;Lcom/google/android/gms/common/internal/BaseGmsClient$BaseConnectionCallbacks;Lcom/google/android/gms/common/internal/BaseGmsClient$BaseOnConnectionFailedListener;)V +HSPLcom/google/android/gms/measurement/internal/zzfs;->createServiceInterface(Landroid/os/IBinder;)Landroid/os/IInterface; +HSPLcom/google/android/gms/measurement/internal/zzfs;->getMinApkVersion()I +HSPLcom/google/android/gms/measurement/internal/zzfs;->getServiceDescriptor()Ljava/lang/String; +HSPLcom/google/android/gms/measurement/internal/zzfs;->getStartServiceAction()Ljava/lang/String; +Lcom/google/android/gms/measurement/internal/zzft; +HSPLcom/google/android/gms/measurement/internal/zzft;->(Lcom/google/android/gms/measurement/internal/zzfr;IZZ)V +HSPLcom/google/android/gms/measurement/internal/zzft;->zza(Ljava/lang/String;)V +HSPLcom/google/android/gms/measurement/internal/zzft;->zza(Ljava/lang/String;Ljava/lang/Object;)V +Lcom/google/android/gms/measurement/internal/zzgd; +HSPLcom/google/android/gms/measurement/internal/zzgd;->()V +HSPLcom/google/android/gms/measurement/internal/zzgd;->(Lcom/google/android/gms/measurement/internal/zzhf;)V +HSPLcom/google/android/gms/measurement/internal/zzgd;->zza(J)Z +HSPLcom/google/android/gms/measurement/internal/zzgd;->zzaa()Z +HSPLcom/google/android/gms/measurement/internal/zzgd;->zzb(Ljava/lang/String;)V +HSPLcom/google/android/gms/measurement/internal/zzgd;->zzc()Landroid/content/SharedPreferences; +HSPLcom/google/android/gms/measurement/internal/zzgd;->zzc(Ljava/lang/String;)V +HSPLcom/google/android/gms/measurement/internal/zzgd;->zzm()Lcom/google/android/gms/measurement/internal/zzih; +HSPLcom/google/android/gms/measurement/internal/zzgd;->zzn()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzgd;->zzo()Z +HSPLcom/google/android/gms/measurement/internal/zzgd;->zzu()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzgd;->zzw()Ljava/lang/String; +HSPLcom/google/android/gms/measurement/internal/zzgd;->zzx()Ljava/lang/String; +HSPLcom/google/android/gms/measurement/internal/zzgd;->zzz()V +Lcom/google/android/gms/measurement/internal/zzgf; +HSPLcom/google/android/gms/measurement/internal/zzgf;->(Lcom/google/android/gms/measurement/internal/zzgd;Ljava/lang/String;Landroid/os/Bundle;)V +HSPLcom/google/android/gms/measurement/internal/zzgf;->zza()Landroid/os/Bundle; +Lcom/google/android/gms/measurement/internal/zzgg; +HSPLcom/google/android/gms/measurement/internal/zzgg;->(Lcom/google/android/gms/measurement/internal/zzgd;Ljava/lang/String;Z)V +HSPLcom/google/android/gms/measurement/internal/zzgg;->zza(Z)V +Lcom/google/android/gms/measurement/internal/zzgh; +HSPLcom/google/android/gms/measurement/internal/zzgh;->(Lcom/google/android/gms/measurement/internal/zzgd;Ljava/lang/String;J)V +HSPLcom/google/android/gms/measurement/internal/zzgh;->(Lcom/google/android/gms/measurement/internal/zzgd;Ljava/lang/String;JLcom/google/android/gms/measurement/internal/zzgk;)V +Lcom/google/android/gms/measurement/internal/zzgi; +HSPLcom/google/android/gms/measurement/internal/zzgi;->(Lcom/google/android/gms/measurement/internal/zzgd;Ljava/lang/String;J)V +HSPLcom/google/android/gms/measurement/internal/zzgi;->zza()J +Lcom/google/android/gms/measurement/internal/zzgj; +HSPLcom/google/android/gms/measurement/internal/zzgj;->(Lcom/google/android/gms/measurement/internal/zzgd;Ljava/lang/String;Ljava/lang/String;)V +HSPLcom/google/android/gms/measurement/internal/zzgj;->zza()Ljava/lang/String; +HSPLcom/google/android/gms/measurement/internal/zzgj;->zza(Ljava/lang/String;)V +Lcom/google/android/gms/measurement/internal/zzgy; +HSPLcom/google/android/gms/measurement/internal/zzgy;->()V +HSPLcom/google/android/gms/measurement/internal/zzgy;->(Lcom/google/android/gms/measurement/internal/zzhf;)V +HSPLcom/google/android/gms/measurement/internal/zzgy;->zza(Lcom/google/android/gms/measurement/internal/zzhd;)V +HSPLcom/google/android/gms/measurement/internal/zzgy;->zzb(Ljava/lang/Runnable;)V +HSPLcom/google/android/gms/measurement/internal/zzgy;->zzc()Ljava/util/concurrent/atomic/AtomicLong; +HSPLcom/google/android/gms/measurement/internal/zzgy;->zzc(Lcom/google/android/gms/measurement/internal/zzgy;)Ljava/lang/Object; +HSPLcom/google/android/gms/measurement/internal/zzgy;->zzd(Lcom/google/android/gms/measurement/internal/zzgy;)Ljava/util/concurrent/Semaphore; +HSPLcom/google/android/gms/measurement/internal/zzgy;->zze(Lcom/google/android/gms/measurement/internal/zzgy;)Z +HSPLcom/google/android/gms/measurement/internal/zzgy;->zzo()Z +HSPLcom/google/android/gms/measurement/internal/zzgy;->zzt()V +Lcom/google/android/gms/measurement/internal/zzgz; +HSPLcom/google/android/gms/measurement/internal/zzgz;->(Landroid/content/Context;Ljava/lang/String;)V +HSPLcom/google/android/gms/measurement/internal/zzgz;->zza(Landroid/content/Context;)Ljava/lang/String; +HSPLcom/google/android/gms/measurement/internal/zzgz;->zza(Ljava/lang/String;)Ljava/lang/String; +Lcom/google/android/gms/measurement/internal/zzha; +HSPLcom/google/android/gms/measurement/internal/zzha;->(Lcom/google/android/gms/measurement/internal/zzgy;Ljava/lang/String;)V +Lcom/google/android/gms/measurement/internal/zzhc; +HSPLcom/google/android/gms/measurement/internal/zzhc;->(Lcom/google/android/gms/measurement/internal/zzgy;Ljava/lang/String;Ljava/util/concurrent/BlockingQueue;)V +HSPLcom/google/android/gms/measurement/internal/zzhc;->run()V +HSPLcom/google/android/gms/measurement/internal/zzhc;->zza()V +Lcom/google/android/gms/measurement/internal/zzhd; +HSPLcom/google/android/gms/measurement/internal/zzhd;->(Lcom/google/android/gms/measurement/internal/zzgy;Ljava/lang/Runnable;ZLjava/lang/String;)V +HSPLcom/google/android/gms/measurement/internal/zzhd;->compareTo(Ljava/lang/Object;)I +Lcom/google/android/gms/measurement/internal/zzhf; +HSPLcom/google/android/gms/measurement/internal/zzhf;->(Lcom/google/android/gms/measurement/internal/zzio;)V +HSPLcom/google/android/gms/measurement/internal/zzhf;->zza()Landroid/content/Context; +HSPLcom/google/android/gms/measurement/internal/zzhf;->zza(Landroid/content/Context;Lcom/google/android/gms/internal/measurement/zzdd;Ljava/lang/Long;)Lcom/google/android/gms/measurement/internal/zzhf; +HSPLcom/google/android/gms/measurement/internal/zzhf;->zza(Lcom/google/android/gms/internal/measurement/zzdd;)V +HSPLcom/google/android/gms/measurement/internal/zzhf;->zza(Lcom/google/android/gms/measurement/internal/zze;)V +HSPLcom/google/android/gms/measurement/internal/zzhf;->zza(Lcom/google/android/gms/measurement/internal/zzhf;Lcom/google/android/gms/measurement/internal/zzio;)V +HSPLcom/google/android/gms/measurement/internal/zzhf;->zza(Lcom/google/android/gms/measurement/internal/zzic;)V +HSPLcom/google/android/gms/measurement/internal/zzhf;->zza(Lcom/google/android/gms/measurement/internal/zzid;)V +HSPLcom/google/android/gms/measurement/internal/zzhf;->zzaa()V +HSPLcom/google/android/gms/measurement/internal/zzhf;->zzac()Z +HSPLcom/google/android/gms/measurement/internal/zzhf;->zzad()Z +HSPLcom/google/android/gms/measurement/internal/zzhf;->zzaf()Z +HSPLcom/google/android/gms/measurement/internal/zzhf;->zzag()Z +HSPLcom/google/android/gms/measurement/internal/zzhf;->zzb()Lcom/google/android/gms/common/util/Clock; +HSPLcom/google/android/gms/measurement/internal/zzhf;->zzc()I +PLcom/google/android/gms/measurement/internal/zzhf;->zzd()Lcom/google/android/gms/measurement/internal/zzae; +HSPLcom/google/android/gms/measurement/internal/zzhf;->zze()Lcom/google/android/gms/measurement/internal/zzb; +HSPLcom/google/android/gms/measurement/internal/zzhf;->zzf()Lcom/google/android/gms/measurement/internal/zzaf; +HSPLcom/google/android/gms/measurement/internal/zzhf;->zzh()Lcom/google/android/gms/measurement/internal/zzfl; +HSPLcom/google/android/gms/measurement/internal/zzhf;->zzj()Lcom/google/android/gms/measurement/internal/zzfr; +HSPLcom/google/android/gms/measurement/internal/zzhf;->zzl()Lcom/google/android/gms/measurement/internal/zzgy; +HSPLcom/google/android/gms/measurement/internal/zzhf;->zzn()Lcom/google/android/gms/measurement/internal/zzgd; +HSPLcom/google/android/gms/measurement/internal/zzhf;->zzp()Lcom/google/android/gms/measurement/internal/zziq; +HSPLcom/google/android/gms/measurement/internal/zzhf;->zzq()Lcom/google/android/gms/measurement/internal/zzkh; +HSPLcom/google/android/gms/measurement/internal/zzhf;->zzr()Lcom/google/android/gms/measurement/internal/zzkp; +HSPLcom/google/android/gms/measurement/internal/zzhf;->zzs()Lcom/google/android/gms/measurement/internal/zzlx; +HSPLcom/google/android/gms/measurement/internal/zzhf;->zzt()Lcom/google/android/gms/measurement/internal/zznd; +HSPLcom/google/android/gms/measurement/internal/zzhf;->zzu()Ljava/lang/String; +HSPLcom/google/android/gms/measurement/internal/zzhf;->zzw()Ljava/lang/String; +HSPLcom/google/android/gms/measurement/internal/zzhf;->zzx()Ljava/lang/String; +HSPLcom/google/android/gms/measurement/internal/zzhf;->zzz()V +Lcom/google/android/gms/measurement/internal/zzhg; +HSPLcom/google/android/gms/measurement/internal/zzhg;->(Lcom/google/android/gms/measurement/internal/zzhf;Lcom/google/android/gms/measurement/internal/zzio;)V +HSPLcom/google/android/gms/measurement/internal/zzhg;->run()V +Lcom/google/android/gms/measurement/internal/zzic; +HSPLcom/google/android/gms/measurement/internal/zzic;->(Lcom/google/android/gms/measurement/internal/zzhf;)V +HSPLcom/google/android/gms/measurement/internal/zzic;->zzab()V +HSPLcom/google/android/gms/measurement/internal/zzic;->zzac()V +HSPLcom/google/android/gms/measurement/internal/zzic;->zzad()V +HSPLcom/google/android/gms/measurement/internal/zzic;->zzae()Z +Lcom/google/android/gms/measurement/internal/zzid; +HSPLcom/google/android/gms/measurement/internal/zzid;->(Lcom/google/android/gms/measurement/internal/zzhf;)V +HSPLcom/google/android/gms/measurement/internal/zzid;->zza()Landroid/content/Context; +HSPLcom/google/android/gms/measurement/internal/zzid;->zzb()Lcom/google/android/gms/common/util/Clock; +HSPLcom/google/android/gms/measurement/internal/zzid;->zze()Lcom/google/android/gms/measurement/internal/zzaf; +HSPLcom/google/android/gms/measurement/internal/zzid;->zzj()Lcom/google/android/gms/measurement/internal/zzfr; +HSPLcom/google/android/gms/measurement/internal/zzid;->zzk()Lcom/google/android/gms/measurement/internal/zzgd; +HSPLcom/google/android/gms/measurement/internal/zzid;->zzl()Lcom/google/android/gms/measurement/internal/zzgy; +HSPLcom/google/android/gms/measurement/internal/zzid;->zzq()Lcom/google/android/gms/measurement/internal/zznd; +HSPLcom/google/android/gms/measurement/internal/zzid;->zzt()V +Lcom/google/android/gms/measurement/internal/zzif; +Lcom/google/android/gms/measurement/internal/zzig; +HSPLcom/google/android/gms/measurement/internal/zzig;->()V +HSPLcom/google/android/gms/measurement/internal/zzig;->(Ljava/lang/String;I[Lcom/google/android/gms/measurement/internal/zzih$zza;)V +HSPLcom/google/android/gms/measurement/internal/zzig;->zza()[Lcom/google/android/gms/measurement/internal/zzih$zza; +Lcom/google/android/gms/measurement/internal/zzih; +HSPLcom/google/android/gms/measurement/internal/zzih;->()V +HSPLcom/google/android/gms/measurement/internal/zzih;->(Ljava/lang/Boolean;Ljava/lang/Boolean;I)V +HSPLcom/google/android/gms/measurement/internal/zzih;->(Ljava/util/EnumMap;I)V +HSPLcom/google/android/gms/measurement/internal/zzih;->zza()I +HSPLcom/google/android/gms/measurement/internal/zzih;->zza(Lcom/google/android/gms/measurement/internal/zzih$zza;)Z +HSPLcom/google/android/gms/measurement/internal/zzih;->zza(Ljava/lang/Boolean;)C +HSPLcom/google/android/gms/measurement/internal/zzih;->zza(Ljava/lang/String;I)Lcom/google/android/gms/measurement/internal/zzih; +HSPLcom/google/android/gms/measurement/internal/zzih;->zze()Ljava/lang/String; +HSPLcom/google/android/gms/measurement/internal/zzih;->zzg()Z +HSPLcom/google/android/gms/measurement/internal/zzih;->zzh()Z +Lcom/google/android/gms/measurement/internal/zzih$zza; +HSPLcom/google/android/gms/measurement/internal/zzih$zza;->()V +HSPLcom/google/android/gms/measurement/internal/zzih$zza;->(Ljava/lang/String;ILjava/lang/String;)V +HSPLcom/google/android/gms/measurement/internal/zzih$zza;->values()[Lcom/google/android/gms/measurement/internal/zzih$zza; +Lcom/google/android/gms/measurement/internal/zzij; +HSPLcom/google/android/gms/measurement/internal/zzij;->()V +Lcom/google/android/gms/measurement/internal/zzil; +Lcom/google/android/gms/measurement/internal/zzin; +HSPLcom/google/android/gms/measurement/internal/zzin;->(Lcom/google/android/gms/measurement/internal/zzio;Lcom/google/android/gms/measurement/internal/zzhf;)V +Lcom/google/android/gms/measurement/internal/zzio; +HSPLcom/google/android/gms/measurement/internal/zzio;->(Landroid/content/Context;Lcom/google/android/gms/internal/measurement/zzdd;Ljava/lang/Long;)V +Lcom/google/android/gms/measurement/internal/zziq; +HSPLcom/google/android/gms/measurement/internal/zziq;->(Lcom/google/android/gms/measurement/internal/zzhf;)V +HSPLcom/google/android/gms/measurement/internal/zziq;->zza()Landroid/content/Context; +HSPLcom/google/android/gms/measurement/internal/zziq;->zza(Lcom/google/android/gms/measurement/internal/zzih;)V +HSPLcom/google/android/gms/measurement/internal/zziq;->zza(Lcom/google/android/gms/measurement/internal/zzil;)V +HSPLcom/google/android/gms/measurement/internal/zziq;->zza(Ljava/lang/String;)V +HSPLcom/google/android/gms/measurement/internal/zziq;->zza(Ljava/lang/String;Ljava/lang/String;JLandroid/os/Bundle;)V +HSPLcom/google/android/gms/measurement/internal/zziq;->zza(Ljava/lang/String;Ljava/lang/String;JLandroid/os/Bundle;ZZZLjava/lang/String;)V +HSPLcom/google/android/gms/measurement/internal/zziq;->zzak()V +HSPLcom/google/android/gms/measurement/internal/zziq;->zzj()Lcom/google/android/gms/measurement/internal/zzfr; +HSPLcom/google/android/gms/measurement/internal/zziq;->zzn()Lcom/google/android/gms/measurement/internal/zzkh; +HSPLcom/google/android/gms/measurement/internal/zziq;->zzp()Lcom/google/android/gms/measurement/internal/zzlx; +HSPLcom/google/android/gms/measurement/internal/zziq;->zzt()V +HSPLcom/google/android/gms/measurement/internal/zziq;->zzz()Z +Lcom/google/android/gms/measurement/internal/zzjp; +HSPLcom/google/android/gms/measurement/internal/zzjp;->(Lcom/google/android/gms/measurement/internal/zziq;)V +Lcom/google/android/gms/measurement/internal/zzjx; +HSPLcom/google/android/gms/measurement/internal/zzjx;->(Lcom/google/android/gms/measurement/internal/zziq;)V +HSPLcom/google/android/gms/measurement/internal/zzjx;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V +HSPLcom/google/android/gms/measurement/internal/zzjx;->onActivityResumed(Landroid/app/Activity;)V +HSPLcom/google/android/gms/measurement/internal/zzjx;->onActivityStarted(Landroid/app/Activity;)V +Lcom/google/android/gms/measurement/internal/zzkc; +HSPLcom/google/android/gms/measurement/internal/zzkc;->(Lcom/google/android/gms/measurement/internal/zzhf;)V +HSPLcom/google/android/gms/measurement/internal/zzkc;->zzo()Z +Lcom/google/android/gms/measurement/internal/zzkh; +HSPLcom/google/android/gms/measurement/internal/zzkh;->(Lcom/google/android/gms/measurement/internal/zzhf;)V +HSPLcom/google/android/gms/measurement/internal/zzkh;->zza(Landroid/app/Activity;Landroid/os/Bundle;)V +HSPLcom/google/android/gms/measurement/internal/zzkh;->zza(Landroid/app/Activity;Lcom/google/android/gms/measurement/internal/zzki;Z)V +HSPLcom/google/android/gms/measurement/internal/zzkh;->zza(Lcom/google/android/gms/measurement/internal/zzkh;Lcom/google/android/gms/measurement/internal/zzki;)V +HSPLcom/google/android/gms/measurement/internal/zzkh;->zza(Lcom/google/android/gms/measurement/internal/zzkh;Lcom/google/android/gms/measurement/internal/zzki;Lcom/google/android/gms/measurement/internal/zzki;JZLandroid/os/Bundle;)V +HSPLcom/google/android/gms/measurement/internal/zzkh;->zza(Lcom/google/android/gms/measurement/internal/zzki;Lcom/google/android/gms/measurement/internal/zzki;JZLandroid/os/Bundle;)V +HSPLcom/google/android/gms/measurement/internal/zzkh;->zza(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/String; +HSPLcom/google/android/gms/measurement/internal/zzkh;->zzb()Lcom/google/android/gms/common/util/Clock; +HSPLcom/google/android/gms/measurement/internal/zzkh;->zzc()Lcom/google/android/gms/measurement/internal/zzb; +HSPLcom/google/android/gms/measurement/internal/zzkh;->zzc(Landroid/app/Activity;)V +HSPLcom/google/android/gms/measurement/internal/zzkh;->zzd(Landroid/app/Activity;)Lcom/google/android/gms/measurement/internal/zzki; +HSPLcom/google/android/gms/measurement/internal/zzkh;->zze()Lcom/google/android/gms/measurement/internal/zzaf; +HSPLcom/google/android/gms/measurement/internal/zzkh;->zzl()Lcom/google/android/gms/measurement/internal/zzgy; +HSPLcom/google/android/gms/measurement/internal/zzkh;->zzm()Lcom/google/android/gms/measurement/internal/zziq; +HSPLcom/google/android/gms/measurement/internal/zzkh;->zzo()Lcom/google/android/gms/measurement/internal/zzkp; +HSPLcom/google/android/gms/measurement/internal/zzkh;->zzq()Lcom/google/android/gms/measurement/internal/zznd; +HSPLcom/google/android/gms/measurement/internal/zzkh;->zzt()V +HSPLcom/google/android/gms/measurement/internal/zzkh;->zzz()Z +Lcom/google/android/gms/measurement/internal/zzki; +HSPLcom/google/android/gms/measurement/internal/zzki;->(Ljava/lang/String;Ljava/lang/String;J)V +HSPLcom/google/android/gms/measurement/internal/zzki;->(Ljava/lang/String;Ljava/lang/String;JZJ)V +Lcom/google/android/gms/measurement/internal/zzkm; +HSPLcom/google/android/gms/measurement/internal/zzkm;->(Lcom/google/android/gms/measurement/internal/zzkh;Lcom/google/android/gms/measurement/internal/zzki;Lcom/google/android/gms/measurement/internal/zzki;JZ)V +HSPLcom/google/android/gms/measurement/internal/zzkm;->run()V +Lcom/google/android/gms/measurement/internal/zzkp; +HSPLcom/google/android/gms/measurement/internal/zzkp;->(Lcom/google/android/gms/measurement/internal/zzhf;)V +HSPLcom/google/android/gms/measurement/internal/zzkp;->zza()Landroid/content/Context; +HSPLcom/google/android/gms/measurement/internal/zzkp;->zza(Landroid/os/Bundle;)V +HSPLcom/google/android/gms/measurement/internal/zzkp;->zza(Lcom/google/android/gms/measurement/internal/zzfk;)V +HSPLcom/google/android/gms/measurement/internal/zzkp;->zza(Lcom/google/android/gms/measurement/internal/zzki;)V +HSPLcom/google/android/gms/measurement/internal/zzkp;->zza(Lcom/google/android/gms/measurement/internal/zzkp;)Lcom/google/android/gms/measurement/internal/zzfk; +HSPLcom/google/android/gms/measurement/internal/zzkp;->zza(Ljava/lang/Runnable;)V +HSPLcom/google/android/gms/measurement/internal/zzkp;->zza(Ljava/util/concurrent/atomic/AtomicReference;)V +HSPLcom/google/android/gms/measurement/internal/zzkp;->zzad()V +PLcom/google/android/gms/measurement/internal/zzkp;->zzae()V +HSPLcom/google/android/gms/measurement/internal/zzkp;->zzah()Z +HSPLcom/google/android/gms/measurement/internal/zzkp;->zzak()V +HSPLcom/google/android/gms/measurement/internal/zzkp;->zzal()V +HSPLcom/google/android/gms/measurement/internal/zzkp;->zzam()Z +HSPLcom/google/android/gms/measurement/internal/zzkp;->zzb(Z)Lcom/google/android/gms/measurement/internal/zzo; +PLcom/google/android/gms/measurement/internal/zzkp;->zzd(Lcom/google/android/gms/measurement/internal/zzkp;)V +HSPLcom/google/android/gms/measurement/internal/zzkp;->zze(Lcom/google/android/gms/measurement/internal/zzkp;)V +HSPLcom/google/android/gms/measurement/internal/zzkp;->zzg()Lcom/google/android/gms/measurement/internal/zzfl; +HSPLcom/google/android/gms/measurement/internal/zzkp;->zzj()Lcom/google/android/gms/measurement/internal/zzfr; +HSPLcom/google/android/gms/measurement/internal/zzkp;->zzk()Lcom/google/android/gms/measurement/internal/zzgd; +HSPLcom/google/android/gms/measurement/internal/zzkp;->zzl()Lcom/google/android/gms/measurement/internal/zzgy; +HSPLcom/google/android/gms/measurement/internal/zzkp;->zzm()Lcom/google/android/gms/measurement/internal/zziq; +HSPLcom/google/android/gms/measurement/internal/zzkp;->zzt()V +HSPLcom/google/android/gms/measurement/internal/zzkp;->zzz()Z +Lcom/google/android/gms/measurement/internal/zzkq; +HSPLcom/google/android/gms/measurement/internal/zzkq;->(Lcom/google/android/gms/measurement/internal/zzkh;)V +HSPLcom/google/android/gms/measurement/internal/zzkq;->run()V +Lcom/google/android/gms/measurement/internal/zzks; +HSPLcom/google/android/gms/measurement/internal/zzks;->(Lcom/google/android/gms/measurement/internal/zzkp;Lcom/google/android/gms/measurement/internal/zzif;)V +PLcom/google/android/gms/measurement/internal/zzks;->zzb()V +Lcom/google/android/gms/measurement/internal/zzky; +HSPLcom/google/android/gms/measurement/internal/zzky;->(Lcom/google/android/gms/measurement/internal/zzkp;Ljava/util/concurrent/atomic/AtomicReference;Lcom/google/android/gms/measurement/internal/zzo;)V +HSPLcom/google/android/gms/measurement/internal/zzky;->run()V +Lcom/google/android/gms/measurement/internal/zzkz; +HSPLcom/google/android/gms/measurement/internal/zzkz;->(Lcom/google/android/gms/measurement/internal/zzkp;Lcom/google/android/gms/measurement/internal/zzki;)V +HSPLcom/google/android/gms/measurement/internal/zzkz;->run()V +Lcom/google/android/gms/measurement/internal/zzlb; +HSPLcom/google/android/gms/measurement/internal/zzlb;->(Lcom/google/android/gms/measurement/internal/zzkp;Lcom/google/android/gms/measurement/internal/zzif;)V +Lcom/google/android/gms/measurement/internal/zzlc; +HSPLcom/google/android/gms/measurement/internal/zzlc;->(Lcom/google/android/gms/measurement/internal/zzkp;Lcom/google/android/gms/measurement/internal/zzo;Landroid/os/Bundle;)V +HSPLcom/google/android/gms/measurement/internal/zzlc;->run()V +Lcom/google/android/gms/measurement/internal/zzlm; +HSPLcom/google/android/gms/measurement/internal/zzlm;->(Lcom/google/android/gms/measurement/internal/zzkp;)V +HSPLcom/google/android/gms/measurement/internal/zzlm;->onConnected(Landroid/os/Bundle;)V +HSPLcom/google/android/gms/measurement/internal/zzlm;->zza()V +HSPLcom/google/android/gms/measurement/internal/zzlm;->zza(Lcom/google/android/gms/measurement/internal/zzlm;Z)V +PLcom/google/android/gms/measurement/internal/zzlm;->zzb()V +Lcom/google/android/gms/measurement/internal/zzln; +HSPLcom/google/android/gms/measurement/internal/zzln;->(Lcom/google/android/gms/measurement/internal/zzlm;Lcom/google/android/gms/measurement/internal/zzfk;)V +HSPLcom/google/android/gms/measurement/internal/zzln;->run()V +Lcom/google/android/gms/measurement/internal/zzlx; +HSPLcom/google/android/gms/measurement/internal/zzlx;->(Lcom/google/android/gms/measurement/internal/zzhf;)V +HSPLcom/google/android/gms/measurement/internal/zzlx;->zza(Z)V +HSPLcom/google/android/gms/measurement/internal/zzlx;->zzab()V +HSPLcom/google/android/gms/measurement/internal/zzlx;->zzb()Lcom/google/android/gms/common/util/Clock; +HSPLcom/google/android/gms/measurement/internal/zzlx;->zzb(Lcom/google/android/gms/measurement/internal/zzlx;J)V +HSPLcom/google/android/gms/measurement/internal/zzlx;->zze()Lcom/google/android/gms/measurement/internal/zzaf; +HSPLcom/google/android/gms/measurement/internal/zzlx;->zzj()Lcom/google/android/gms/measurement/internal/zzfr; +HSPLcom/google/android/gms/measurement/internal/zzlx;->zzk()Lcom/google/android/gms/measurement/internal/zzgd; +HSPLcom/google/android/gms/measurement/internal/zzlx;->zzl()Lcom/google/android/gms/measurement/internal/zzgy; +HSPLcom/google/android/gms/measurement/internal/zzlx;->zzt()V +HSPLcom/google/android/gms/measurement/internal/zzlx;->zzz()Z +Lcom/google/android/gms/measurement/internal/zzma; +HSPLcom/google/android/gms/measurement/internal/zzma;->(Lcom/google/android/gms/measurement/internal/zzlx;J)V +HSPLcom/google/android/gms/measurement/internal/zzma;->run()V +Lcom/google/android/gms/measurement/internal/zzmc; +HSPLcom/google/android/gms/measurement/internal/zzmc;->(Lcom/google/android/gms/measurement/internal/zzlx;)V +HSPLcom/google/android/gms/measurement/internal/zzmc;->zza()V +Lcom/google/android/gms/measurement/internal/zzmd; +HSPLcom/google/android/gms/measurement/internal/zzmd;->(Lcom/google/android/gms/measurement/internal/zzlx;)V +HSPLcom/google/android/gms/measurement/internal/zzmd;->zzc(J)V +Lcom/google/android/gms/measurement/internal/zzmf; +HSPLcom/google/android/gms/measurement/internal/zzmf;->(Lcom/google/android/gms/measurement/internal/zzlx;)V +HSPLcom/google/android/gms/measurement/internal/zzmf;->zza()V +HSPLcom/google/android/gms/measurement/internal/zzmf;->zzb(JZ)V +Lcom/google/android/gms/measurement/internal/zzmg; +HSPLcom/google/android/gms/measurement/internal/zzmg;->(Lcom/google/android/gms/measurement/internal/zzmd;Lcom/google/android/gms/measurement/internal/zzif;)V +Lcom/google/android/gms/measurement/internal/zzmi; +HSPLcom/google/android/gms/measurement/internal/zzmi;->(Lcom/google/android/gms/common/util/Clock;)V +HSPLcom/google/android/gms/measurement/internal/zzmi;->zzb()V +Lcom/google/android/gms/measurement/internal/zznd; +HSPLcom/google/android/gms/measurement/internal/zznd;->()V +HSPLcom/google/android/gms/measurement/internal/zznd;->(Lcom/google/android/gms/measurement/internal/zzhf;)V +HSPLcom/google/android/gms/measurement/internal/zznd;->zza()Landroid/content/Context; +HSPLcom/google/android/gms/measurement/internal/zznd;->zza(Landroid/content/Context;)Z +HSPLcom/google/android/gms/measurement/internal/zznd;->zza(Landroid/content/Context;Ljava/lang/String;)J +HSPLcom/google/android/gms/measurement/internal/zznd;->zza(Landroid/content/Context;Z)Z +HSPLcom/google/android/gms/measurement/internal/zznd;->zza(Lcom/google/android/gms/measurement/internal/zzki;Landroid/os/Bundle;Z)V +HSPLcom/google/android/gms/measurement/internal/zznd;->zza(Ljava/lang/String;Ljava/lang/String;)Z +HSPLcom/google/android/gms/measurement/internal/zznd;->zza(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z +HSPLcom/google/android/gms/measurement/internal/zznd;->zza([B)J +HSPLcom/google/android/gms/measurement/internal/zznd;->zzb(Landroid/content/Context;Ljava/lang/String;)Z +HSPLcom/google/android/gms/measurement/internal/zznd;->zzc(Landroid/content/Context;Ljava/lang/String;)Z +HSPLcom/google/android/gms/measurement/internal/zznd;->zzc(Ljava/lang/String;)J +HSPLcom/google/android/gms/measurement/internal/zznd;->zze()Lcom/google/android/gms/measurement/internal/zzaf; +HSPLcom/google/android/gms/measurement/internal/zznd;->zze(Ljava/lang/String;)Z +HSPLcom/google/android/gms/measurement/internal/zznd;->zzf(Ljava/lang/String;)Z +HSPLcom/google/android/gms/measurement/internal/zznd;->zzm()J +HSPLcom/google/android/gms/measurement/internal/zznd;->zzn(Ljava/lang/String;)Z +HSPLcom/google/android/gms/measurement/internal/zznd;->zzo()Z +HSPLcom/google/android/gms/measurement/internal/zznd;->zzp()Ljava/lang/String; +HSPLcom/google/android/gms/measurement/internal/zznd;->zzt()V +HSPLcom/google/android/gms/measurement/internal/zznd;->zzu()Ljava/security/MessageDigest; +HSPLcom/google/android/gms/measurement/internal/zznd;->zzv()Ljava/security/SecureRandom; +HSPLcom/google/android/gms/measurement/internal/zznd;->zzx()Z +HSPLcom/google/android/gms/measurement/internal/zznd;->zzz()V +Lcom/google/android/gms/measurement/internal/zznf; +Lcom/google/android/gms/measurement/internal/zzo; +HSPLcom/google/android/gms/measurement/internal/zzo;->()V +HSPLcom/google/android/gms/measurement/internal/zzo;->(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;JLjava/lang/String;JJLjava/lang/String;ZZLjava/lang/String;JJIZZLjava/lang/String;Ljava/lang/Boolean;JLjava/util/List;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZJILjava/lang/String;IJ)V +HSPLcom/google/android/gms/measurement/internal/zzo;->writeToParcel(Landroid/os/Parcel;I)V +Lcom/google/android/gms/measurement/internal/zzq; +HSPLcom/google/android/gms/measurement/internal/zzq;->()V +Lcom/google/android/gms/measurement/internal/zzu; +HSPLcom/google/android/gms/measurement/internal/zzu;->(Lcom/google/android/gms/measurement/internal/zzhf;)V +HSPLcom/google/android/gms/measurement/internal/zzu;->zzb()V +HSPLcom/google/android/gms/measurement/internal/zzu;->zzc()Z +Lcom/google/android/gms/tasks/Continuation; +Lcom/google/android/gms/tasks/OnCanceledListener; +Lcom/google/android/gms/tasks/OnFailureListener; +Lcom/google/android/gms/tasks/OnSuccessListener; +Lcom/google/android/gms/tasks/RuntimeExecutionException; +Lcom/google/android/gms/tasks/SuccessContinuation; +Lcom/google/android/gms/tasks/Task; +HSPLcom/google/android/gms/tasks/Task;->()V +Lcom/google/android/gms/tasks/TaskCompletionSource; +HSPLcom/google/android/gms/tasks/TaskCompletionSource;->()V +HSPLcom/google/android/gms/tasks/TaskCompletionSource;->getTask()Lcom/google/android/gms/tasks/Task; +HSPLcom/google/android/gms/tasks/TaskCompletionSource;->setResult(Ljava/lang/Object;)V +HSPLcom/google/android/gms/tasks/TaskCompletionSource;->trySetResult(Ljava/lang/Object;)Z +Lcom/google/android/gms/tasks/TaskExecutors; +HSPLcom/google/android/gms/tasks/TaskExecutors;->()V +Lcom/google/android/gms/tasks/Tasks; +HSPLcom/google/android/gms/tasks/Tasks;->call(Ljava/util/concurrent/Executor;Ljava/util/concurrent/Callable;)Lcom/google/android/gms/tasks/Task; +HSPLcom/google/android/gms/tasks/Tasks;->forResult(Ljava/lang/Object;)Lcom/google/android/gms/tasks/Task; +Lcom/google/android/gms/tasks/zzc; +HSPLcom/google/android/gms/tasks/zzc;->(Lcom/google/android/gms/tasks/zzd;Lcom/google/android/gms/tasks/Task;)V +HSPLcom/google/android/gms/tasks/zzc;->run()V +Lcom/google/android/gms/tasks/zzd; +HSPLcom/google/android/gms/tasks/zzd;->(Ljava/util/concurrent/Executor;Lcom/google/android/gms/tasks/Continuation;Lcom/google/android/gms/tasks/zzw;)V +HSPLcom/google/android/gms/tasks/zzd;->zza(Lcom/google/android/gms/tasks/zzd;)Lcom/google/android/gms/tasks/Continuation; +HSPLcom/google/android/gms/tasks/zzd;->zzb(Lcom/google/android/gms/tasks/zzd;)Lcom/google/android/gms/tasks/zzw; +HSPLcom/google/android/gms/tasks/zzd;->zzd(Lcom/google/android/gms/tasks/Task;)V +Lcom/google/android/gms/tasks/zzp; +HSPLcom/google/android/gms/tasks/zzp;->(Ljava/util/concurrent/Executor;Lcom/google/android/gms/tasks/SuccessContinuation;Lcom/google/android/gms/tasks/zzw;)V +Lcom/google/android/gms/tasks/zzq; +Lcom/google/android/gms/tasks/zzr; +HSPLcom/google/android/gms/tasks/zzr;->()V +HSPLcom/google/android/gms/tasks/zzr;->zza(Lcom/google/android/gms/tasks/zzq;)V +HSPLcom/google/android/gms/tasks/zzr;->zzb(Lcom/google/android/gms/tasks/Task;)V +Lcom/google/android/gms/tasks/zzt; +HSPLcom/google/android/gms/tasks/zzt;->()V +Lcom/google/android/gms/tasks/zzu; +HSPLcom/google/android/gms/tasks/zzu;->()V +Lcom/google/android/gms/tasks/zzw; +HSPLcom/google/android/gms/tasks/zzw;->()V +HSPLcom/google/android/gms/tasks/zzw;->continueWith(Ljava/util/concurrent/Executor;Lcom/google/android/gms/tasks/Continuation;)Lcom/google/android/gms/tasks/Task; +HSPLcom/google/android/gms/tasks/zzw;->getResult()Ljava/lang/Object; +HSPLcom/google/android/gms/tasks/zzw;->isCanceled()Z +HSPLcom/google/android/gms/tasks/zzw;->isSuccessful()Z +HSPLcom/google/android/gms/tasks/zzw;->onSuccessTask(Ljava/util/concurrent/Executor;Lcom/google/android/gms/tasks/SuccessContinuation;)Lcom/google/android/gms/tasks/Task; +HSPLcom/google/android/gms/tasks/zzw;->zzb(Ljava/lang/Object;)V +HSPLcom/google/android/gms/tasks/zzw;->zze(Ljava/lang/Object;)Z +HSPLcom/google/android/gms/tasks/zzw;->zzf()V +HSPLcom/google/android/gms/tasks/zzw;->zzg()V +HSPLcom/google/android/gms/tasks/zzw;->zzh()V +HSPLcom/google/android/gms/tasks/zzw;->zzi()V +Lcom/google/android/gms/tasks/zzz; +HSPLcom/google/android/gms/tasks/zzz;->(Lcom/google/android/gms/tasks/zzw;Ljava/util/concurrent/Callable;)V +HSPLcom/google/android/gms/tasks/zzz;->run()V +Lcom/google/common/base/Absent; +HSPLcom/google/common/base/Absent;->()V +HSPLcom/google/common/base/Absent;->()V +HSPLcom/google/common/base/Absent;->isPresent()Z +HSPLcom/google/common/base/Absent;->withType()Lcom/google/common/base/Optional; +Lcom/google/common/base/Function; +Lcom/google/common/base/NullnessCasts; +HSPLcom/google/common/base/NullnessCasts;->uncheckedCastNullableTToT(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/google/common/base/Optional; +HSPLcom/google/common/base/Optional;->()V +HSPLcom/google/common/base/Optional;->absent()Lcom/google/common/base/Optional; +HSPLcom/google/common/base/Optional;->of(Ljava/lang/Object;)Lcom/google/common/base/Optional; +Lcom/google/common/base/Preconditions; +HSPLcom/google/common/base/Preconditions;->checkArgument(ZLjava/lang/Object;)V +HSPLcom/google/common/base/Preconditions;->checkElementIndex(II)I +HSPLcom/google/common/base/Preconditions;->checkElementIndex(IILjava/lang/String;)I +HSPLcom/google/common/base/Preconditions;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/common/base/Preconditions;->checkNotNull(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/common/base/Preconditions;->checkPositionIndex(II)I +HSPLcom/google/common/base/Preconditions;->checkPositionIndex(IILjava/lang/String;)I +HSPLcom/google/common/base/Preconditions;->checkState(ZLjava/lang/Object;)V +Lcom/google/common/base/Present; +HSPLcom/google/common/base/Present;->(Ljava/lang/Object;)V +HSPLcom/google/common/base/Present;->get()Ljava/lang/Object; +HSPLcom/google/common/base/Present;->isPresent()Z +Lcom/google/common/base/Supplier; +Lcom/google/common/base/Suppliers; +HSPLcom/google/common/base/Suppliers;->memoize(Lcom/google/common/base/Supplier;)Lcom/google/common/base/Supplier; +HSPLcom/google/common/base/Suppliers;->ofInstance(Ljava/lang/Object;)Lcom/google/common/base/Supplier; +Lcom/google/common/base/Suppliers$MemoizingSupplier; +Lcom/google/common/base/Suppliers$NonSerializableMemoizingSupplier; +HSPLcom/google/common/base/Suppliers$NonSerializableMemoizingSupplier;->(Lcom/google/common/base/Supplier;)V +HSPLcom/google/common/base/Suppliers$NonSerializableMemoizingSupplier;->get()Ljava/lang/Object; +Lcom/google/common/base/Suppliers$SupplierOfInstance; +HSPLcom/google/common/base/Suppliers$SupplierOfInstance;->(Ljava/lang/Object;)V +HSPLcom/google/common/base/Suppliers$SupplierOfInstance;->get()Ljava/lang/Object; +Lcom/google/common/collect/AbstractIndexedListIterator; +HSPLcom/google/common/collect/AbstractIndexedListIterator;->(II)V +Lcom/google/common/collect/CollectPreconditions; +HSPLcom/google/common/collect/CollectPreconditions;->checkNonnegative(ILjava/lang/String;)I +Lcom/google/common/collect/Hashing; +HSPLcom/google/common/collect/Hashing;->smear(I)I +Lcom/google/common/collect/ImmutableCollection; +HSPLcom/google/common/collect/ImmutableCollection;->()V +HSPLcom/google/common/collect/ImmutableCollection;->()V +Lcom/google/common/collect/ImmutableCollection$ArrayBasedBuilder; +HSPLcom/google/common/collect/ImmutableCollection$ArrayBasedBuilder;->(I)V +HSPLcom/google/common/collect/ImmutableCollection$ArrayBasedBuilder;->add([Ljava/lang/Object;)Lcom/google/common/collect/ImmutableCollection$Builder; +HSPLcom/google/common/collect/ImmutableCollection$ArrayBasedBuilder;->addAll([Ljava/lang/Object;I)V +HSPLcom/google/common/collect/ImmutableCollection$ArrayBasedBuilder;->getReadyToExpandTo(I)V +Lcom/google/common/collect/ImmutableCollection$Builder; +HSPLcom/google/common/collect/ImmutableCollection$Builder;->()V +HSPLcom/google/common/collect/ImmutableCollection$Builder;->expandedCapacity(II)I +Lcom/google/common/collect/ImmutableList; +HSPLcom/google/common/collect/ImmutableList;->()V +HSPLcom/google/common/collect/ImmutableList;->()V +HSPLcom/google/common/collect/ImmutableList;->asImmutableList([Ljava/lang/Object;)Lcom/google/common/collect/ImmutableList; +HSPLcom/google/common/collect/ImmutableList;->asImmutableList([Ljava/lang/Object;I)Lcom/google/common/collect/ImmutableList; +HSPLcom/google/common/collect/ImmutableList;->construct([Ljava/lang/Object;)Lcom/google/common/collect/ImmutableList; +HSPLcom/google/common/collect/ImmutableList;->contains(Ljava/lang/Object;)Z +HSPLcom/google/common/collect/ImmutableList;->indexOf(Ljava/lang/Object;)I +HSPLcom/google/common/collect/ImmutableList;->of(Ljava/lang/Object;Ljava/lang/Object;)Lcom/google/common/collect/ImmutableList; +HSPLcom/google/common/collect/ImmutableList;->of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Lcom/google/common/collect/ImmutableList; +HSPLcom/google/common/collect/ImmutableList;->of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Lcom/google/common/collect/ImmutableList; +Lcom/google/common/collect/ImmutableList$Builder; +HSPLcom/google/common/collect/ImmutableList$Builder;->()V +HSPLcom/google/common/collect/ImmutableList$Builder;->(I)V +HSPLcom/google/common/collect/ImmutableList$Builder;->add([Ljava/lang/Object;)Lcom/google/common/collect/ImmutableList$Builder; +HSPLcom/google/common/collect/ImmutableList$Builder;->build()Lcom/google/common/collect/ImmutableList; +Lcom/google/common/collect/ImmutableList$Itr; +HSPLcom/google/common/collect/ImmutableList$Itr;->(Lcom/google/common/collect/ImmutableList;I)V +Lcom/google/common/collect/ImmutableSet; +HSPLcom/google/common/collect/ImmutableSet;->()V +HSPLcom/google/common/collect/ImmutableSet;->chooseTableSize(I)I +HSPLcom/google/common/collect/ImmutableSet;->construct(I[Ljava/lang/Object;)Lcom/google/common/collect/ImmutableSet; +HSPLcom/google/common/collect/ImmutableSet;->of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;[Ljava/lang/Object;)Lcom/google/common/collect/ImmutableSet; +HSPLcom/google/common/collect/ImmutableSet;->shouldTrim(II)Z +Lcom/google/common/collect/Lists; +HSPLcom/google/common/collect/Lists;->indexOfImpl(Ljava/util/List;Ljava/lang/Object;)I +HSPLcom/google/common/collect/Lists;->indexOfRandomAccess(Ljava/util/List;Ljava/lang/Object;)I +Lcom/google/common/collect/ObjectArrays; +HSPLcom/google/common/collect/ObjectArrays;->checkElementNotNull(Ljava/lang/Object;I)Ljava/lang/Object; +HSPLcom/google/common/collect/ObjectArrays;->checkElementsNotNull([Ljava/lang/Object;)[Ljava/lang/Object; +HSPLcom/google/common/collect/ObjectArrays;->checkElementsNotNull([Ljava/lang/Object;I)[Ljava/lang/Object; +Lcom/google/common/collect/RegularImmutableList; +HSPLcom/google/common/collect/RegularImmutableList;->()V +HSPLcom/google/common/collect/RegularImmutableList;->([Ljava/lang/Object;I)V +HSPLcom/google/common/collect/RegularImmutableList;->get(I)Ljava/lang/Object; +HSPLcom/google/common/collect/RegularImmutableList;->size()I +Lcom/google/common/collect/RegularImmutableSet; +HSPLcom/google/common/collect/RegularImmutableSet;->()V +HSPLcom/google/common/collect/RegularImmutableSet;->([Ljava/lang/Object;I[Ljava/lang/Object;II)V +Lcom/google/common/collect/UnmodifiableIterator; +HSPLcom/google/common/collect/UnmodifiableIterator;->()V +Lcom/google/common/collect/UnmodifiableListIterator; +HSPLcom/google/common/collect/UnmodifiableListIterator;->()V +Lcom/google/common/util/concurrent/ListenableFuture; +Lcom/google/common/util/concurrent/Striped$SmallLazyStriped$$ExternalSyntheticBackportWithForwarding0; +HSPLcom/google/common/util/concurrent/Striped$SmallLazyStriped$$ExternalSyntheticBackportWithForwarding0;->m(Ljava/util/concurrent/atomic/AtomicReferenceArray;ILjava/lang/Object;Ljava/lang/Object;)Z +Lcom/google/crypto/tink/Aead; +Lcom/google/crypto/tink/BinaryKeysetReader; +HSPLcom/google/crypto/tink/BinaryKeysetReader;->(Ljava/io/InputStream;)V +HSPLcom/google/crypto/tink/BinaryKeysetReader;->readEncrypted()Lcom/google/crypto/tink/proto/EncryptedKeyset; +HSPLcom/google/crypto/tink/BinaryKeysetReader;->withBytes([B)Lcom/google/crypto/tink/KeysetReader; +Lcom/google/crypto/tink/CryptoFormat; +HSPLcom/google/crypto/tink/CryptoFormat;->()V +HSPLcom/google/crypto/tink/CryptoFormat;->getOutputPrefix(Lcom/google/crypto/tink/proto/Keyset$Key;)[B +Lcom/google/crypto/tink/CryptoFormat$1; +HSPLcom/google/crypto/tink/CryptoFormat$1;->()V +Lcom/google/crypto/tink/DeterministicAead; +Lcom/google/crypto/tink/InsecureSecretKeyAccess; +HSPLcom/google/crypto/tink/InsecureSecretKeyAccess;->get()Lcom/google/crypto/tink/SecretKeyAccess; +Lcom/google/crypto/tink/Key; +HSPLcom/google/crypto/tink/Key;->()V +Lcom/google/crypto/tink/KeyManager; +Lcom/google/crypto/tink/KeyManagerImpl; +HSPLcom/google/crypto/tink/KeyManagerImpl;->(Lcom/google/crypto/tink/internal/KeyTypeManager;Ljava/lang/Class;)V +HSPLcom/google/crypto/tink/KeyManagerImpl;->getKeyType()Ljava/lang/String; +HSPLcom/google/crypto/tink/KeyManagerImpl;->getPrimitive(Lcom/google/crypto/tink/shaded/protobuf/ByteString;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/KeyManagerImpl;->keyFactoryHelper()Lcom/google/crypto/tink/KeyManagerImpl$KeyFactoryHelper; +HSPLcom/google/crypto/tink/KeyManagerImpl;->newKeyData(Lcom/google/crypto/tink/shaded/protobuf/ByteString;)Lcom/google/crypto/tink/proto/KeyData; +HSPLcom/google/crypto/tink/KeyManagerImpl;->validateKeyAndGetPrimitive(Lcom/google/crypto/tink/shaded/protobuf/MessageLite;)Ljava/lang/Object; +Lcom/google/crypto/tink/KeyManagerImpl$KeyFactoryHelper; +HSPLcom/google/crypto/tink/KeyManagerImpl$KeyFactoryHelper;->(Lcom/google/crypto/tink/internal/KeyTypeManager$KeyFactory;)V +HSPLcom/google/crypto/tink/KeyManagerImpl$KeyFactoryHelper;->parseValidateCreate(Lcom/google/crypto/tink/shaded/protobuf/ByteString;)Lcom/google/crypto/tink/shaded/protobuf/MessageLite; +HSPLcom/google/crypto/tink/KeyManagerImpl$KeyFactoryHelper;->validateCreate(Lcom/google/crypto/tink/shaded/protobuf/MessageLite;)Lcom/google/crypto/tink/shaded/protobuf/MessageLite; +Lcom/google/crypto/tink/KeyManagerRegistry; +HSPLcom/google/crypto/tink/KeyManagerRegistry;->()V +HSPLcom/google/crypto/tink/KeyManagerRegistry;->()V +HSPLcom/google/crypto/tink/KeyManagerRegistry;->(Lcom/google/crypto/tink/KeyManagerRegistry;)V +HSPLcom/google/crypto/tink/KeyManagerRegistry;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/KeyManagerRegistry;->createContainerFor(Lcom/google/crypto/tink/internal/KeyTypeManager;)Lcom/google/crypto/tink/KeyManagerRegistry$KeyManagerContainer; +HSPLcom/google/crypto/tink/KeyManagerRegistry;->getKeyManager(Ljava/lang/String;Ljava/lang/Class;)Lcom/google/crypto/tink/KeyManager; +HSPLcom/google/crypto/tink/KeyManagerRegistry;->getKeyManagerContainerOrThrow(Ljava/lang/String;)Lcom/google/crypto/tink/KeyManagerRegistry$KeyManagerContainer; +HSPLcom/google/crypto/tink/KeyManagerRegistry;->getKeyManagerInternal(Ljava/lang/String;Ljava/lang/Class;)Lcom/google/crypto/tink/KeyManager; +HSPLcom/google/crypto/tink/KeyManagerRegistry;->getUntypedKeyManager(Ljava/lang/String;)Lcom/google/crypto/tink/KeyManager; +HSPLcom/google/crypto/tink/KeyManagerRegistry;->registerKeyManager(Lcom/google/crypto/tink/internal/KeyTypeManager;)V +HSPLcom/google/crypto/tink/KeyManagerRegistry;->registerKeyManagerContainer(Lcom/google/crypto/tink/KeyManagerRegistry$KeyManagerContainer;Z)V +HSPLcom/google/crypto/tink/KeyManagerRegistry;->typeUrlExists(Ljava/lang/String;)Z +Lcom/google/crypto/tink/KeyManagerRegistry$2; +HSPLcom/google/crypto/tink/KeyManagerRegistry$2;->(Lcom/google/crypto/tink/internal/KeyTypeManager;)V +HSPLcom/google/crypto/tink/KeyManagerRegistry$2;->getImplementingClass()Ljava/lang/Class; +HSPLcom/google/crypto/tink/KeyManagerRegistry$2;->getKeyManager(Ljava/lang/Class;)Lcom/google/crypto/tink/KeyManager; +HSPLcom/google/crypto/tink/KeyManagerRegistry$2;->getUntypedKeyManager()Lcom/google/crypto/tink/KeyManager; +HSPLcom/google/crypto/tink/KeyManagerRegistry$2;->supportedPrimitives()Ljava/util/Set; +Lcom/google/crypto/tink/KeyManagerRegistry$KeyManagerContainer; +Lcom/google/crypto/tink/KeyStatus; +HSPLcom/google/crypto/tink/KeyStatus;->()V +HSPLcom/google/crypto/tink/KeyStatus;->(Ljava/lang/String;)V +Lcom/google/crypto/tink/KeyTemplate; +HSPLcom/google/crypto/tink/KeyTemplate;->(Lcom/google/crypto/tink/proto/KeyTemplate;)V +HSPLcom/google/crypto/tink/KeyTemplate;->create(Ljava/lang/String;[BLcom/google/crypto/tink/KeyTemplate$OutputPrefixType;)Lcom/google/crypto/tink/KeyTemplate; +HSPLcom/google/crypto/tink/KeyTemplate;->getProto()Lcom/google/crypto/tink/proto/KeyTemplate; +HSPLcom/google/crypto/tink/KeyTemplate;->toProto(Lcom/google/crypto/tink/KeyTemplate$OutputPrefixType;)Lcom/google/crypto/tink/proto/OutputPrefixType; +Lcom/google/crypto/tink/KeyTemplate$1; +HSPLcom/google/crypto/tink/KeyTemplate$1;->()V +Lcom/google/crypto/tink/KeyTemplate$OutputPrefixType; +HSPLcom/google/crypto/tink/KeyTemplate$OutputPrefixType;->()V +HSPLcom/google/crypto/tink/KeyTemplate$OutputPrefixType;->(Ljava/lang/String;I)V +HSPLcom/google/crypto/tink/KeyTemplate$OutputPrefixType;->values()[Lcom/google/crypto/tink/KeyTemplate$OutputPrefixType; +Lcom/google/crypto/tink/KeyTemplates; +HSPLcom/google/crypto/tink/KeyTemplates;->get(Ljava/lang/String;)Lcom/google/crypto/tink/KeyTemplate; +Lcom/google/crypto/tink/KeysetHandle; +HSPLcom/google/crypto/tink/KeysetHandle;->(Lcom/google/crypto/tink/proto/Keyset;Ljava/util/List;)V +HSPLcom/google/crypto/tink/KeysetHandle;->assertEnoughEncryptedKeyMaterial(Lcom/google/crypto/tink/proto/EncryptedKeyset;)V +HSPLcom/google/crypto/tink/KeysetHandle;->assertEnoughKeyMaterial(Lcom/google/crypto/tink/proto/Keyset;)V +HSPLcom/google/crypto/tink/KeysetHandle;->decrypt(Lcom/google/crypto/tink/proto/EncryptedKeyset;Lcom/google/crypto/tink/Aead;[B)Lcom/google/crypto/tink/proto/Keyset; +HSPLcom/google/crypto/tink/KeysetHandle;->encrypt(Lcom/google/crypto/tink/proto/Keyset;Lcom/google/crypto/tink/Aead;[B)Lcom/google/crypto/tink/proto/EncryptedKeyset; +HSPLcom/google/crypto/tink/KeysetHandle;->fromKeyset(Lcom/google/crypto/tink/proto/Keyset;)Lcom/google/crypto/tink/KeysetHandle; +HSPLcom/google/crypto/tink/KeysetHandle;->getEntriesFromKeyset(Lcom/google/crypto/tink/proto/Keyset;)Ljava/util/List; +HSPLcom/google/crypto/tink/KeysetHandle;->getFullPrimitiveOrNull(Lcom/google/crypto/tink/Key;Ljava/lang/Class;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/KeysetHandle;->getKeyset()Lcom/google/crypto/tink/proto/Keyset; +HSPLcom/google/crypto/tink/KeysetHandle;->getKeysetInfo()Lcom/google/crypto/tink/proto/KeysetInfo; +HSPLcom/google/crypto/tink/KeysetHandle;->getLegacyPrimitiveOrNull(Lcom/google/crypto/tink/proto/Keyset$Key;Ljava/lang/Class;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/KeysetHandle;->getPrimitive(Ljava/lang/Class;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/KeysetHandle;->getPrimitiveWithKnownInputPrimitive(Ljava/lang/Class;Ljava/lang/Class;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/KeysetHandle;->parseStatus(Lcom/google/crypto/tink/proto/KeyStatusType;)Lcom/google/crypto/tink/KeyStatus; +HSPLcom/google/crypto/tink/KeysetHandle;->read(Lcom/google/crypto/tink/KeysetReader;Lcom/google/crypto/tink/Aead;)Lcom/google/crypto/tink/KeysetHandle; +HSPLcom/google/crypto/tink/KeysetHandle;->readWithAssociatedData(Lcom/google/crypto/tink/KeysetReader;Lcom/google/crypto/tink/Aead;[B)Lcom/google/crypto/tink/KeysetHandle; +HSPLcom/google/crypto/tink/KeysetHandle;->size()I +HSPLcom/google/crypto/tink/KeysetHandle;->toProtoKeySerialization(Lcom/google/crypto/tink/proto/Keyset$Key;)Lcom/google/crypto/tink/internal/ProtoKeySerialization; +HSPLcom/google/crypto/tink/KeysetHandle;->write(Lcom/google/crypto/tink/KeysetWriter;Lcom/google/crypto/tink/Aead;)V +HSPLcom/google/crypto/tink/KeysetHandle;->writeWithAssociatedData(Lcom/google/crypto/tink/KeysetWriter;Lcom/google/crypto/tink/Aead;[B)V +Lcom/google/crypto/tink/KeysetHandle$1; +HSPLcom/google/crypto/tink/KeysetHandle$1;->()V +Lcom/google/crypto/tink/KeysetHandle$Entry; +HSPLcom/google/crypto/tink/KeysetHandle$Entry;->(Lcom/google/crypto/tink/Key;Lcom/google/crypto/tink/KeyStatus;IZ)V +HSPLcom/google/crypto/tink/KeysetHandle$Entry;->(Lcom/google/crypto/tink/Key;Lcom/google/crypto/tink/KeyStatus;IZLcom/google/crypto/tink/KeysetHandle$1;)V +HSPLcom/google/crypto/tink/KeysetHandle$Entry;->getKey()Lcom/google/crypto/tink/Key; +Lcom/google/crypto/tink/KeysetManager; +HSPLcom/google/crypto/tink/KeysetManager;->(Lcom/google/crypto/tink/proto/Keyset$Builder;)V +HSPLcom/google/crypto/tink/KeysetManager;->add(Lcom/google/crypto/tink/KeyTemplate;)Lcom/google/crypto/tink/KeysetManager; +HSPLcom/google/crypto/tink/KeysetManager;->addNewKey(Lcom/google/crypto/tink/proto/KeyTemplate;Z)I +HSPLcom/google/crypto/tink/KeysetManager;->createKeysetKey(Lcom/google/crypto/tink/proto/KeyData;Lcom/google/crypto/tink/proto/OutputPrefixType;)Lcom/google/crypto/tink/proto/Keyset$Key; +HSPLcom/google/crypto/tink/KeysetManager;->getKeysetHandle()Lcom/google/crypto/tink/KeysetHandle; +HSPLcom/google/crypto/tink/KeysetManager;->keyIdExists(I)Z +HSPLcom/google/crypto/tink/KeysetManager;->newKey(Lcom/google/crypto/tink/proto/KeyTemplate;)Lcom/google/crypto/tink/proto/Keyset$Key; +HSPLcom/google/crypto/tink/KeysetManager;->newKeyId()I +HSPLcom/google/crypto/tink/KeysetManager;->setPrimary(I)Lcom/google/crypto/tink/KeysetManager; +HSPLcom/google/crypto/tink/KeysetManager;->withEmptyKeyset()Lcom/google/crypto/tink/KeysetManager; +HSPLcom/google/crypto/tink/KeysetManager;->withKeysetHandle(Lcom/google/crypto/tink/KeysetHandle;)Lcom/google/crypto/tink/KeysetManager; +Lcom/google/crypto/tink/KeysetReader; +Lcom/google/crypto/tink/KeysetWriter; +Lcom/google/crypto/tink/KmsClient; +Lcom/google/crypto/tink/Mac; +Lcom/google/crypto/tink/Parameters; +HSPLcom/google/crypto/tink/Parameters;->()V +Lcom/google/crypto/tink/PrimitiveSet; +HSPLcom/google/crypto/tink/PrimitiveSet;->(Ljava/util/concurrent/ConcurrentMap;Lcom/google/crypto/tink/PrimitiveSet$Entry;Lcom/google/crypto/tink/monitoring/MonitoringAnnotations;Ljava/lang/Class;)V +HSPLcom/google/crypto/tink/PrimitiveSet;->(Ljava/util/concurrent/ConcurrentMap;Lcom/google/crypto/tink/PrimitiveSet$Entry;Lcom/google/crypto/tink/monitoring/MonitoringAnnotations;Ljava/lang/Class;Lcom/google/crypto/tink/PrimitiveSet$1;)V +HSPLcom/google/crypto/tink/PrimitiveSet;->access$100(Ljava/lang/Object;Ljava/lang/Object;Lcom/google/crypto/tink/proto/Keyset$Key;Ljava/util/concurrent/ConcurrentMap;)Lcom/google/crypto/tink/PrimitiveSet$Entry; +HSPLcom/google/crypto/tink/PrimitiveSet;->addEntryToMap(Ljava/lang/Object;Ljava/lang/Object;Lcom/google/crypto/tink/proto/Keyset$Key;Ljava/util/concurrent/ConcurrentMap;)Lcom/google/crypto/tink/PrimitiveSet$Entry; +HSPLcom/google/crypto/tink/PrimitiveSet;->getPrimary()Lcom/google/crypto/tink/PrimitiveSet$Entry; +HSPLcom/google/crypto/tink/PrimitiveSet;->getPrimitive([B)Ljava/util/List; +HSPLcom/google/crypto/tink/PrimitiveSet;->getPrimitiveClass()Ljava/lang/Class; +HSPLcom/google/crypto/tink/PrimitiveSet;->hasAnnotations()Z +HSPLcom/google/crypto/tink/PrimitiveSet;->newBuilder(Ljava/lang/Class;)Lcom/google/crypto/tink/PrimitiveSet$Builder; +Lcom/google/crypto/tink/PrimitiveSet$Builder; +HSPLcom/google/crypto/tink/PrimitiveSet$Builder;->(Ljava/lang/Class;)V +HSPLcom/google/crypto/tink/PrimitiveSet$Builder;->(Ljava/lang/Class;Lcom/google/crypto/tink/PrimitiveSet$1;)V +HSPLcom/google/crypto/tink/PrimitiveSet$Builder;->addPrimaryFullPrimitiveAndOptionalPrimitive(Ljava/lang/Object;Ljava/lang/Object;Lcom/google/crypto/tink/proto/Keyset$Key;)Lcom/google/crypto/tink/PrimitiveSet$Builder; +HSPLcom/google/crypto/tink/PrimitiveSet$Builder;->addPrimitive(Ljava/lang/Object;Ljava/lang/Object;Lcom/google/crypto/tink/proto/Keyset$Key;Z)Lcom/google/crypto/tink/PrimitiveSet$Builder; +HSPLcom/google/crypto/tink/PrimitiveSet$Builder;->build()Lcom/google/crypto/tink/PrimitiveSet; +HSPLcom/google/crypto/tink/PrimitiveSet$Builder;->setAnnotations(Lcom/google/crypto/tink/monitoring/MonitoringAnnotations;)Lcom/google/crypto/tink/PrimitiveSet$Builder; +Lcom/google/crypto/tink/PrimitiveSet$Entry; +HSPLcom/google/crypto/tink/PrimitiveSet$Entry;->(Ljava/lang/Object;Ljava/lang/Object;[BLcom/google/crypto/tink/proto/KeyStatusType;Lcom/google/crypto/tink/proto/OutputPrefixType;ILjava/lang/String;Lcom/google/crypto/tink/Key;)V +HSPLcom/google/crypto/tink/PrimitiveSet$Entry;->getIdentifier()[B +HSPLcom/google/crypto/tink/PrimitiveSet$Entry;->getKeyId()I +HSPLcom/google/crypto/tink/PrimitiveSet$Entry;->getPrimitive()Ljava/lang/Object; +Lcom/google/crypto/tink/PrimitiveSet$Prefix; +HSPLcom/google/crypto/tink/PrimitiveSet$Prefix;->([B)V +HSPLcom/google/crypto/tink/PrimitiveSet$Prefix;->([BLcom/google/crypto/tink/PrimitiveSet$1;)V +HSPLcom/google/crypto/tink/PrimitiveSet$Prefix;->equals(Ljava/lang/Object;)Z +HSPLcom/google/crypto/tink/PrimitiveSet$Prefix;->hashCode()I +Lcom/google/crypto/tink/PrimitiveWrapper; +Lcom/google/crypto/tink/Registry; +HSPLcom/google/crypto/tink/Registry;->()V +HSPLcom/google/crypto/tink/Registry;->createDeriverFor(Lcom/google/crypto/tink/internal/KeyTypeManager;)Lcom/google/crypto/tink/Registry$KeyDeriverContainer; +HSPLcom/google/crypto/tink/Registry;->ensureKeyManagerInsertable(Ljava/lang/String;Ljava/util/Map;Z)V +HSPLcom/google/crypto/tink/Registry;->getFullPrimitive(Lcom/google/crypto/tink/Key;Ljava/lang/Class;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/Registry;->getInputPrimitive(Ljava/lang/Class;)Ljava/lang/Class; +HSPLcom/google/crypto/tink/Registry;->getPrimitive(Lcom/google/crypto/tink/proto/KeyData;Ljava/lang/Class;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/Registry;->getPrimitive(Ljava/lang/String;Lcom/google/crypto/tink/shaded/protobuf/ByteString;Ljava/lang/Class;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/Registry;->getUntypedKeyManager(Ljava/lang/String;)Lcom/google/crypto/tink/KeyManager; +HSPLcom/google/crypto/tink/Registry;->keyTemplateMap()Ljava/util/Map; +HSPLcom/google/crypto/tink/Registry;->newKeyData(Lcom/google/crypto/tink/proto/KeyTemplate;)Lcom/google/crypto/tink/proto/KeyData; +HSPLcom/google/crypto/tink/Registry;->registerKeyManager(Lcom/google/crypto/tink/internal/KeyTypeManager;Z)V +HSPLcom/google/crypto/tink/Registry;->registerKeyTemplates(Ljava/lang/String;Ljava/util/Map;)V +HSPLcom/google/crypto/tink/Registry;->registerPrimitiveWrapper(Lcom/google/crypto/tink/PrimitiveWrapper;)V +HSPLcom/google/crypto/tink/Registry;->wrap(Lcom/google/crypto/tink/PrimitiveSet;Ljava/lang/Class;)Ljava/lang/Object; +Lcom/google/crypto/tink/Registry$1; +HSPLcom/google/crypto/tink/Registry$1;->(Lcom/google/crypto/tink/internal/KeyTypeManager;)V +Lcom/google/crypto/tink/Registry$KeyDeriverContainer; +Lcom/google/crypto/tink/SecretKeyAccess; +HSPLcom/google/crypto/tink/SecretKeyAccess;->()V +HSPLcom/google/crypto/tink/SecretKeyAccess;->()V +HSPLcom/google/crypto/tink/SecretKeyAccess;->instance()Lcom/google/crypto/tink/SecretKeyAccess; +HSPLcom/google/crypto/tink/SecretKeyAccess;->requireAccess(Lcom/google/crypto/tink/SecretKeyAccess;)Lcom/google/crypto/tink/SecretKeyAccess; +Lcom/google/crypto/tink/Util; +HSPLcom/google/crypto/tink/Util;->()V +HSPLcom/google/crypto/tink/Util;->getKeyInfo(Lcom/google/crypto/tink/proto/Keyset$Key;)Lcom/google/crypto/tink/proto/KeysetInfo$KeyInfo; +HSPLcom/google/crypto/tink/Util;->getKeysetInfo(Lcom/google/crypto/tink/proto/Keyset;)Lcom/google/crypto/tink/proto/KeysetInfo; +HSPLcom/google/crypto/tink/Util;->validateKey(Lcom/google/crypto/tink/proto/Keyset$Key;)V +HSPLcom/google/crypto/tink/Util;->validateKeyset(Lcom/google/crypto/tink/proto/Keyset;)V +Lcom/google/crypto/tink/aead/AeadConfig; +HSPLcom/google/crypto/tink/aead/AeadConfig;->()V +HSPLcom/google/crypto/tink/aead/AeadConfig;->init()V +HSPLcom/google/crypto/tink/aead/AeadConfig;->register()V +Lcom/google/crypto/tink/aead/AeadKey; +HSPLcom/google/crypto/tink/aead/AeadKey;->()V +Lcom/google/crypto/tink/aead/AeadParameters; +HSPLcom/google/crypto/tink/aead/AeadParameters;->()V +Lcom/google/crypto/tink/aead/AeadWrapper; +HSPLcom/google/crypto/tink/aead/AeadWrapper;->()V +HSPLcom/google/crypto/tink/aead/AeadWrapper;->()V +HSPLcom/google/crypto/tink/aead/AeadWrapper;->getInputPrimitiveClass()Ljava/lang/Class; +HSPLcom/google/crypto/tink/aead/AeadWrapper;->getPrimitiveClass()Ljava/lang/Class; +HSPLcom/google/crypto/tink/aead/AeadWrapper;->register()V +HSPLcom/google/crypto/tink/aead/AeadWrapper;->wrap(Lcom/google/crypto/tink/PrimitiveSet;)Lcom/google/crypto/tink/Aead; +HSPLcom/google/crypto/tink/aead/AeadWrapper;->wrap(Lcom/google/crypto/tink/PrimitiveSet;)Ljava/lang/Object; +Lcom/google/crypto/tink/aead/AeadWrapper$WrappedAead; +HSPLcom/google/crypto/tink/aead/AeadWrapper$WrappedAead;->(Lcom/google/crypto/tink/PrimitiveSet;)V +HSPLcom/google/crypto/tink/aead/AeadWrapper$WrappedAead;->(Lcom/google/crypto/tink/PrimitiveSet;Lcom/google/crypto/tink/aead/AeadWrapper$1;)V +HSPLcom/google/crypto/tink/aead/AeadWrapper$WrappedAead;->decrypt([B[B)[B +HSPLcom/google/crypto/tink/aead/AeadWrapper$WrappedAead;->encrypt([B[B)[B +Lcom/google/crypto/tink/aead/AesCtrHmacAeadKeyManager; +HSPLcom/google/crypto/tink/aead/AesCtrHmacAeadKeyManager;->()V +HSPLcom/google/crypto/tink/aead/AesCtrHmacAeadKeyManager;->access$000(IIIILcom/google/crypto/tink/proto/HashType;Lcom/google/crypto/tink/KeyTemplate$OutputPrefixType;)Lcom/google/crypto/tink/internal/KeyTypeManager$KeyFactory$KeyFormat; +HSPLcom/google/crypto/tink/aead/AesCtrHmacAeadKeyManager;->createKeyFormat(IIIILcom/google/crypto/tink/proto/HashType;)Lcom/google/crypto/tink/proto/AesCtrHmacAeadKeyFormat; +HSPLcom/google/crypto/tink/aead/AesCtrHmacAeadKeyManager;->createKeyFormat(IIIILcom/google/crypto/tink/proto/HashType;Lcom/google/crypto/tink/KeyTemplate$OutputPrefixType;)Lcom/google/crypto/tink/internal/KeyTypeManager$KeyFactory$KeyFormat; +HSPLcom/google/crypto/tink/aead/AesCtrHmacAeadKeyManager;->fipsStatus()Lcom/google/crypto/tink/config/internal/TinkFipsUtil$AlgorithmFipsCompatibility; +HSPLcom/google/crypto/tink/aead/AesCtrHmacAeadKeyManager;->getKeyType()Ljava/lang/String; +HSPLcom/google/crypto/tink/aead/AesCtrHmacAeadKeyManager;->keyFactory()Lcom/google/crypto/tink/internal/KeyTypeManager$KeyFactory; +HSPLcom/google/crypto/tink/aead/AesCtrHmacAeadKeyManager;->register(Z)V +Lcom/google/crypto/tink/aead/AesCtrHmacAeadKeyManager$1; +HSPLcom/google/crypto/tink/aead/AesCtrHmacAeadKeyManager$1;->(Ljava/lang/Class;)V +Lcom/google/crypto/tink/aead/AesCtrHmacAeadKeyManager$2; +HSPLcom/google/crypto/tink/aead/AesCtrHmacAeadKeyManager$2;->(Lcom/google/crypto/tink/aead/AesCtrHmacAeadKeyManager;Ljava/lang/Class;)V +HSPLcom/google/crypto/tink/aead/AesCtrHmacAeadKeyManager$2;->keyFormats()Ljava/util/Map; +Lcom/google/crypto/tink/aead/AesEaxKey; +Lcom/google/crypto/tink/aead/AesEaxKeyManager; +HSPLcom/google/crypto/tink/aead/AesEaxKeyManager;->()V +HSPLcom/google/crypto/tink/aead/AesEaxKeyManager;->access$000(IILcom/google/crypto/tink/KeyTemplate$OutputPrefixType;)Lcom/google/crypto/tink/internal/KeyTypeManager$KeyFactory$KeyFormat; +HSPLcom/google/crypto/tink/aead/AesEaxKeyManager;->createKeyFormat(IILcom/google/crypto/tink/KeyTemplate$OutputPrefixType;)Lcom/google/crypto/tink/internal/KeyTypeManager$KeyFactory$KeyFormat; +HSPLcom/google/crypto/tink/aead/AesEaxKeyManager;->getKeyType()Ljava/lang/String; +HSPLcom/google/crypto/tink/aead/AesEaxKeyManager;->keyFactory()Lcom/google/crypto/tink/internal/KeyTypeManager$KeyFactory; +HSPLcom/google/crypto/tink/aead/AesEaxKeyManager;->register(Z)V +Lcom/google/crypto/tink/aead/AesEaxKeyManager$1; +HSPLcom/google/crypto/tink/aead/AesEaxKeyManager$1;->(Ljava/lang/Class;)V +Lcom/google/crypto/tink/aead/AesEaxKeyManager$2; +HSPLcom/google/crypto/tink/aead/AesEaxKeyManager$2;->(Lcom/google/crypto/tink/aead/AesEaxKeyManager;Ljava/lang/Class;)V +HSPLcom/google/crypto/tink/aead/AesEaxKeyManager$2;->keyFormats()Ljava/util/Map; +Lcom/google/crypto/tink/aead/AesEaxParameters; +Lcom/google/crypto/tink/aead/AesEaxProtoSerialization; +HSPLcom/google/crypto/tink/aead/AesEaxProtoSerialization;->()V +HSPLcom/google/crypto/tink/aead/AesEaxProtoSerialization;->register()V +HSPLcom/google/crypto/tink/aead/AesEaxProtoSerialization;->register(Lcom/google/crypto/tink/internal/MutableSerializationRegistry;)V +Lcom/google/crypto/tink/aead/AesEaxProtoSerialization$$ExternalSyntheticLambda0; +HSPLcom/google/crypto/tink/aead/AesEaxProtoSerialization$$ExternalSyntheticLambda0;->()V +Lcom/google/crypto/tink/aead/AesEaxProtoSerialization$$ExternalSyntheticLambda1; +HSPLcom/google/crypto/tink/aead/AesEaxProtoSerialization$$ExternalSyntheticLambda1;->()V +Lcom/google/crypto/tink/aead/AesEaxProtoSerialization$$ExternalSyntheticLambda2; +HSPLcom/google/crypto/tink/aead/AesEaxProtoSerialization$$ExternalSyntheticLambda2;->()V +Lcom/google/crypto/tink/aead/AesEaxProtoSerialization$$ExternalSyntheticLambda3; +HSPLcom/google/crypto/tink/aead/AesEaxProtoSerialization$$ExternalSyntheticLambda3;->()V +Lcom/google/crypto/tink/aead/AesGcmKey; +HSPLcom/google/crypto/tink/aead/AesGcmKey;->(Lcom/google/crypto/tink/aead/AesGcmParameters;Lcom/google/crypto/tink/util/SecretBytes;Lcom/google/crypto/tink/util/Bytes;Ljava/lang/Integer;)V +HSPLcom/google/crypto/tink/aead/AesGcmKey;->(Lcom/google/crypto/tink/aead/AesGcmParameters;Lcom/google/crypto/tink/util/SecretBytes;Lcom/google/crypto/tink/util/Bytes;Ljava/lang/Integer;Lcom/google/crypto/tink/aead/AesGcmKey$1;)V +HSPLcom/google/crypto/tink/aead/AesGcmKey;->builder()Lcom/google/crypto/tink/aead/AesGcmKey$Builder; +Lcom/google/crypto/tink/aead/AesGcmKey$Builder; +HSPLcom/google/crypto/tink/aead/AesGcmKey$Builder;->()V +HSPLcom/google/crypto/tink/aead/AesGcmKey$Builder;->(Lcom/google/crypto/tink/aead/AesGcmKey$1;)V +HSPLcom/google/crypto/tink/aead/AesGcmKey$Builder;->build()Lcom/google/crypto/tink/aead/AesGcmKey; +HSPLcom/google/crypto/tink/aead/AesGcmKey$Builder;->getOutputPrefix()Lcom/google/crypto/tink/util/Bytes; +HSPLcom/google/crypto/tink/aead/AesGcmKey$Builder;->setIdRequirement(Ljava/lang/Integer;)Lcom/google/crypto/tink/aead/AesGcmKey$Builder; +HSPLcom/google/crypto/tink/aead/AesGcmKey$Builder;->setKeyBytes(Lcom/google/crypto/tink/util/SecretBytes;)Lcom/google/crypto/tink/aead/AesGcmKey$Builder; +HSPLcom/google/crypto/tink/aead/AesGcmKey$Builder;->setParameters(Lcom/google/crypto/tink/aead/AesGcmParameters;)Lcom/google/crypto/tink/aead/AesGcmKey$Builder; +Lcom/google/crypto/tink/aead/AesGcmKeyManager; +HSPLcom/google/crypto/tink/aead/AesGcmKeyManager;->()V +HSPLcom/google/crypto/tink/aead/AesGcmKeyManager;->access$000(ILcom/google/crypto/tink/KeyTemplate$OutputPrefixType;)Lcom/google/crypto/tink/internal/KeyTypeManager$KeyFactory$KeyFormat; +HSPLcom/google/crypto/tink/aead/AesGcmKeyManager;->createKeyFormat(ILcom/google/crypto/tink/KeyTemplate$OutputPrefixType;)Lcom/google/crypto/tink/internal/KeyTypeManager$KeyFactory$KeyFormat; +HSPLcom/google/crypto/tink/aead/AesGcmKeyManager;->fipsStatus()Lcom/google/crypto/tink/config/internal/TinkFipsUtil$AlgorithmFipsCompatibility; +HSPLcom/google/crypto/tink/aead/AesGcmKeyManager;->getKeyType()Ljava/lang/String; +HSPLcom/google/crypto/tink/aead/AesGcmKeyManager;->getVersion()I +HSPLcom/google/crypto/tink/aead/AesGcmKeyManager;->keyFactory()Lcom/google/crypto/tink/internal/KeyTypeManager$KeyFactory; +HSPLcom/google/crypto/tink/aead/AesGcmKeyManager;->keyMaterialType()Lcom/google/crypto/tink/proto/KeyData$KeyMaterialType; +HSPLcom/google/crypto/tink/aead/AesGcmKeyManager;->parseKey(Lcom/google/crypto/tink/shaded/protobuf/ByteString;)Lcom/google/crypto/tink/proto/AesGcmKey; +HSPLcom/google/crypto/tink/aead/AesGcmKeyManager;->parseKey(Lcom/google/crypto/tink/shaded/protobuf/ByteString;)Lcom/google/crypto/tink/shaded/protobuf/MessageLite; +HSPLcom/google/crypto/tink/aead/AesGcmKeyManager;->register(Z)V +HSPLcom/google/crypto/tink/aead/AesGcmKeyManager;->validateKey(Lcom/google/crypto/tink/proto/AesGcmKey;)V +HSPLcom/google/crypto/tink/aead/AesGcmKeyManager;->validateKey(Lcom/google/crypto/tink/shaded/protobuf/MessageLite;)V +Lcom/google/crypto/tink/aead/AesGcmKeyManager$1; +HSPLcom/google/crypto/tink/aead/AesGcmKeyManager$1;->(Ljava/lang/Class;)V +HSPLcom/google/crypto/tink/aead/AesGcmKeyManager$1;->getPrimitive(Lcom/google/crypto/tink/proto/AesGcmKey;)Lcom/google/crypto/tink/Aead; +HSPLcom/google/crypto/tink/aead/AesGcmKeyManager$1;->getPrimitive(Lcom/google/crypto/tink/shaded/protobuf/MessageLite;)Ljava/lang/Object; +Lcom/google/crypto/tink/aead/AesGcmKeyManager$2; +HSPLcom/google/crypto/tink/aead/AesGcmKeyManager$2;->(Lcom/google/crypto/tink/aead/AesGcmKeyManager;Ljava/lang/Class;)V +HSPLcom/google/crypto/tink/aead/AesGcmKeyManager$2;->createKey(Lcom/google/crypto/tink/proto/AesGcmKeyFormat;)Lcom/google/crypto/tink/proto/AesGcmKey; +HSPLcom/google/crypto/tink/aead/AesGcmKeyManager$2;->createKey(Lcom/google/crypto/tink/shaded/protobuf/MessageLite;)Lcom/google/crypto/tink/shaded/protobuf/MessageLite; +HSPLcom/google/crypto/tink/aead/AesGcmKeyManager$2;->keyFormats()Ljava/util/Map; +HSPLcom/google/crypto/tink/aead/AesGcmKeyManager$2;->parseKeyFormat(Lcom/google/crypto/tink/shaded/protobuf/ByteString;)Lcom/google/crypto/tink/proto/AesGcmKeyFormat; +HSPLcom/google/crypto/tink/aead/AesGcmKeyManager$2;->parseKeyFormat(Lcom/google/crypto/tink/shaded/protobuf/ByteString;)Lcom/google/crypto/tink/shaded/protobuf/MessageLite; +HSPLcom/google/crypto/tink/aead/AesGcmKeyManager$2;->validateKeyFormat(Lcom/google/crypto/tink/proto/AesGcmKeyFormat;)V +HSPLcom/google/crypto/tink/aead/AesGcmKeyManager$2;->validateKeyFormat(Lcom/google/crypto/tink/shaded/protobuf/MessageLite;)V +Lcom/google/crypto/tink/aead/AesGcmParameters; +HSPLcom/google/crypto/tink/aead/AesGcmParameters;->(IIILcom/google/crypto/tink/aead/AesGcmParameters$Variant;)V +HSPLcom/google/crypto/tink/aead/AesGcmParameters;->(IIILcom/google/crypto/tink/aead/AesGcmParameters$Variant;Lcom/google/crypto/tink/aead/AesGcmParameters$1;)V +HSPLcom/google/crypto/tink/aead/AesGcmParameters;->builder()Lcom/google/crypto/tink/aead/AesGcmParameters$Builder; +HSPLcom/google/crypto/tink/aead/AesGcmParameters;->getKeySizeBytes()I +HSPLcom/google/crypto/tink/aead/AesGcmParameters;->getVariant()Lcom/google/crypto/tink/aead/AesGcmParameters$Variant; +HSPLcom/google/crypto/tink/aead/AesGcmParameters;->hasIdRequirement()Z +Lcom/google/crypto/tink/aead/AesGcmParameters$Builder; +HSPLcom/google/crypto/tink/aead/AesGcmParameters$Builder;->()V +HSPLcom/google/crypto/tink/aead/AesGcmParameters$Builder;->(Lcom/google/crypto/tink/aead/AesGcmParameters$1;)V +HSPLcom/google/crypto/tink/aead/AesGcmParameters$Builder;->build()Lcom/google/crypto/tink/aead/AesGcmParameters; +HSPLcom/google/crypto/tink/aead/AesGcmParameters$Builder;->setIvSizeBytes(I)Lcom/google/crypto/tink/aead/AesGcmParameters$Builder; +HSPLcom/google/crypto/tink/aead/AesGcmParameters$Builder;->setKeySizeBytes(I)Lcom/google/crypto/tink/aead/AesGcmParameters$Builder; +HSPLcom/google/crypto/tink/aead/AesGcmParameters$Builder;->setTagSizeBytes(I)Lcom/google/crypto/tink/aead/AesGcmParameters$Builder; +HSPLcom/google/crypto/tink/aead/AesGcmParameters$Builder;->setVariant(Lcom/google/crypto/tink/aead/AesGcmParameters$Variant;)Lcom/google/crypto/tink/aead/AesGcmParameters$Builder; +Lcom/google/crypto/tink/aead/AesGcmParameters$Variant; +HSPLcom/google/crypto/tink/aead/AesGcmParameters$Variant;->()V +HSPLcom/google/crypto/tink/aead/AesGcmParameters$Variant;->(Ljava/lang/String;)V +Lcom/google/crypto/tink/aead/AesGcmProtoSerialization; +HSPLcom/google/crypto/tink/aead/AesGcmProtoSerialization;->$r8$lambda$RUN6s-jYME9EdLASXNpQ12CSlHc(Lcom/google/crypto/tink/internal/ProtoKeySerialization;Lcom/google/crypto/tink/SecretKeyAccess;)Lcom/google/crypto/tink/aead/AesGcmKey; +HSPLcom/google/crypto/tink/aead/AesGcmProtoSerialization;->()V +HSPLcom/google/crypto/tink/aead/AesGcmProtoSerialization;->parseKey(Lcom/google/crypto/tink/internal/ProtoKeySerialization;Lcom/google/crypto/tink/SecretKeyAccess;)Lcom/google/crypto/tink/aead/AesGcmKey; +HSPLcom/google/crypto/tink/aead/AesGcmProtoSerialization;->register()V +HSPLcom/google/crypto/tink/aead/AesGcmProtoSerialization;->register(Lcom/google/crypto/tink/internal/MutableSerializationRegistry;)V +HSPLcom/google/crypto/tink/aead/AesGcmProtoSerialization;->toVariant(Lcom/google/crypto/tink/proto/OutputPrefixType;)Lcom/google/crypto/tink/aead/AesGcmParameters$Variant; +Lcom/google/crypto/tink/aead/AesGcmProtoSerialization$$ExternalSyntheticLambda0; +HSPLcom/google/crypto/tink/aead/AesGcmProtoSerialization$$ExternalSyntheticLambda0;->()V +Lcom/google/crypto/tink/aead/AesGcmProtoSerialization$$ExternalSyntheticLambda1; +HSPLcom/google/crypto/tink/aead/AesGcmProtoSerialization$$ExternalSyntheticLambda1;->()V +Lcom/google/crypto/tink/aead/AesGcmProtoSerialization$$ExternalSyntheticLambda2; +HSPLcom/google/crypto/tink/aead/AesGcmProtoSerialization$$ExternalSyntheticLambda2;->()V +Lcom/google/crypto/tink/aead/AesGcmProtoSerialization$$ExternalSyntheticLambda3; +HSPLcom/google/crypto/tink/aead/AesGcmProtoSerialization$$ExternalSyntheticLambda3;->()V +HSPLcom/google/crypto/tink/aead/AesGcmProtoSerialization$$ExternalSyntheticLambda3;->parseKey(Lcom/google/crypto/tink/internal/Serialization;Lcom/google/crypto/tink/SecretKeyAccess;)Lcom/google/crypto/tink/Key; +Lcom/google/crypto/tink/aead/AesGcmProtoSerialization$1; +HSPLcom/google/crypto/tink/aead/AesGcmProtoSerialization$1;->()V +Lcom/google/crypto/tink/aead/AesGcmSivKey; +Lcom/google/crypto/tink/aead/AesGcmSivKeyManager; +HSPLcom/google/crypto/tink/aead/AesGcmSivKeyManager;->()V +HSPLcom/google/crypto/tink/aead/AesGcmSivKeyManager;->access$000(ILcom/google/crypto/tink/KeyTemplate$OutputPrefixType;)Lcom/google/crypto/tink/internal/KeyTypeManager$KeyFactory$KeyFormat; +HSPLcom/google/crypto/tink/aead/AesGcmSivKeyManager;->canUseAesGcmSive()Z +HSPLcom/google/crypto/tink/aead/AesGcmSivKeyManager;->createKeyFormat(ILcom/google/crypto/tink/KeyTemplate$OutputPrefixType;)Lcom/google/crypto/tink/internal/KeyTypeManager$KeyFactory$KeyFormat; +HSPLcom/google/crypto/tink/aead/AesGcmSivKeyManager;->getKeyType()Ljava/lang/String; +HSPLcom/google/crypto/tink/aead/AesGcmSivKeyManager;->keyFactory()Lcom/google/crypto/tink/internal/KeyTypeManager$KeyFactory; +HSPLcom/google/crypto/tink/aead/AesGcmSivKeyManager;->register(Z)V +Lcom/google/crypto/tink/aead/AesGcmSivKeyManager$1; +HSPLcom/google/crypto/tink/aead/AesGcmSivKeyManager$1;->(Ljava/lang/Class;)V +Lcom/google/crypto/tink/aead/AesGcmSivKeyManager$2; +HSPLcom/google/crypto/tink/aead/AesGcmSivKeyManager$2;->(Lcom/google/crypto/tink/aead/AesGcmSivKeyManager;Ljava/lang/Class;)V +HSPLcom/google/crypto/tink/aead/AesGcmSivKeyManager$2;->keyFormats()Ljava/util/Map; +Lcom/google/crypto/tink/aead/AesGcmSivParameters; +Lcom/google/crypto/tink/aead/AesGcmSivProtoSerialization; +HSPLcom/google/crypto/tink/aead/AesGcmSivProtoSerialization;->()V +HSPLcom/google/crypto/tink/aead/AesGcmSivProtoSerialization;->register()V +HSPLcom/google/crypto/tink/aead/AesGcmSivProtoSerialization;->register(Lcom/google/crypto/tink/internal/MutableSerializationRegistry;)V +Lcom/google/crypto/tink/aead/AesGcmSivProtoSerialization$$ExternalSyntheticLambda0; +HSPLcom/google/crypto/tink/aead/AesGcmSivProtoSerialization$$ExternalSyntheticLambda0;->()V +Lcom/google/crypto/tink/aead/AesGcmSivProtoSerialization$$ExternalSyntheticLambda1; +HSPLcom/google/crypto/tink/aead/AesGcmSivProtoSerialization$$ExternalSyntheticLambda1;->()V +Lcom/google/crypto/tink/aead/AesGcmSivProtoSerialization$$ExternalSyntheticLambda2; +HSPLcom/google/crypto/tink/aead/AesGcmSivProtoSerialization$$ExternalSyntheticLambda2;->()V +Lcom/google/crypto/tink/aead/AesGcmSivProtoSerialization$$ExternalSyntheticLambda3; +HSPLcom/google/crypto/tink/aead/AesGcmSivProtoSerialization$$ExternalSyntheticLambda3;->()V +Lcom/google/crypto/tink/aead/ChaCha20Poly1305Key; +Lcom/google/crypto/tink/aead/ChaCha20Poly1305KeyManager; +HSPLcom/google/crypto/tink/aead/ChaCha20Poly1305KeyManager;->()V +HSPLcom/google/crypto/tink/aead/ChaCha20Poly1305KeyManager;->getKeyType()Ljava/lang/String; +HSPLcom/google/crypto/tink/aead/ChaCha20Poly1305KeyManager;->keyFactory()Lcom/google/crypto/tink/internal/KeyTypeManager$KeyFactory; +HSPLcom/google/crypto/tink/aead/ChaCha20Poly1305KeyManager;->register(Z)V +Lcom/google/crypto/tink/aead/ChaCha20Poly1305KeyManager$1; +HSPLcom/google/crypto/tink/aead/ChaCha20Poly1305KeyManager$1;->(Ljava/lang/Class;)V +Lcom/google/crypto/tink/aead/ChaCha20Poly1305KeyManager$2; +HSPLcom/google/crypto/tink/aead/ChaCha20Poly1305KeyManager$2;->(Lcom/google/crypto/tink/aead/ChaCha20Poly1305KeyManager;Ljava/lang/Class;)V +HSPLcom/google/crypto/tink/aead/ChaCha20Poly1305KeyManager$2;->keyFormats()Ljava/util/Map; +Lcom/google/crypto/tink/aead/ChaCha20Poly1305Parameters; +Lcom/google/crypto/tink/aead/ChaCha20Poly1305ProtoSerialization; +HSPLcom/google/crypto/tink/aead/ChaCha20Poly1305ProtoSerialization;->()V +HSPLcom/google/crypto/tink/aead/ChaCha20Poly1305ProtoSerialization;->register()V +HSPLcom/google/crypto/tink/aead/ChaCha20Poly1305ProtoSerialization;->register(Lcom/google/crypto/tink/internal/MutableSerializationRegistry;)V +Lcom/google/crypto/tink/aead/ChaCha20Poly1305ProtoSerialization$$ExternalSyntheticLambda0; +HSPLcom/google/crypto/tink/aead/ChaCha20Poly1305ProtoSerialization$$ExternalSyntheticLambda0;->()V +Lcom/google/crypto/tink/aead/ChaCha20Poly1305ProtoSerialization$$ExternalSyntheticLambda1; +HSPLcom/google/crypto/tink/aead/ChaCha20Poly1305ProtoSerialization$$ExternalSyntheticLambda1;->()V +Lcom/google/crypto/tink/aead/ChaCha20Poly1305ProtoSerialization$$ExternalSyntheticLambda2; +HSPLcom/google/crypto/tink/aead/ChaCha20Poly1305ProtoSerialization$$ExternalSyntheticLambda2;->()V +Lcom/google/crypto/tink/aead/ChaCha20Poly1305ProtoSerialization$$ExternalSyntheticLambda3; +HSPLcom/google/crypto/tink/aead/ChaCha20Poly1305ProtoSerialization$$ExternalSyntheticLambda3;->()V +Lcom/google/crypto/tink/aead/KmsAeadKeyManager; +HSPLcom/google/crypto/tink/aead/KmsAeadKeyManager;->()V +HSPLcom/google/crypto/tink/aead/KmsAeadKeyManager;->getKeyType()Ljava/lang/String; +HSPLcom/google/crypto/tink/aead/KmsAeadKeyManager;->keyFactory()Lcom/google/crypto/tink/internal/KeyTypeManager$KeyFactory; +HSPLcom/google/crypto/tink/aead/KmsAeadKeyManager;->register(Z)V +Lcom/google/crypto/tink/aead/KmsAeadKeyManager$1; +HSPLcom/google/crypto/tink/aead/KmsAeadKeyManager$1;->(Ljava/lang/Class;)V +Lcom/google/crypto/tink/aead/KmsAeadKeyManager$2; +HSPLcom/google/crypto/tink/aead/KmsAeadKeyManager$2;->(Lcom/google/crypto/tink/aead/KmsAeadKeyManager;Ljava/lang/Class;)V +Lcom/google/crypto/tink/aead/KmsEnvelopeAeadKeyManager; +HSPLcom/google/crypto/tink/aead/KmsEnvelopeAeadKeyManager;->()V +HSPLcom/google/crypto/tink/aead/KmsEnvelopeAeadKeyManager;->getKeyType()Ljava/lang/String; +HSPLcom/google/crypto/tink/aead/KmsEnvelopeAeadKeyManager;->keyFactory()Lcom/google/crypto/tink/internal/KeyTypeManager$KeyFactory; +HSPLcom/google/crypto/tink/aead/KmsEnvelopeAeadKeyManager;->register(Z)V +Lcom/google/crypto/tink/aead/KmsEnvelopeAeadKeyManager$1; +HSPLcom/google/crypto/tink/aead/KmsEnvelopeAeadKeyManager$1;->(Ljava/lang/Class;)V +Lcom/google/crypto/tink/aead/KmsEnvelopeAeadKeyManager$2; +HSPLcom/google/crypto/tink/aead/KmsEnvelopeAeadKeyManager$2;->(Lcom/google/crypto/tink/aead/KmsEnvelopeAeadKeyManager;Ljava/lang/Class;)V +Lcom/google/crypto/tink/aead/XChaCha20Poly1305Key; +Lcom/google/crypto/tink/aead/XChaCha20Poly1305KeyManager; +HSPLcom/google/crypto/tink/aead/XChaCha20Poly1305KeyManager;->()V +HSPLcom/google/crypto/tink/aead/XChaCha20Poly1305KeyManager;->getKeyType()Ljava/lang/String; +HSPLcom/google/crypto/tink/aead/XChaCha20Poly1305KeyManager;->keyFactory()Lcom/google/crypto/tink/internal/KeyTypeManager$KeyFactory; +HSPLcom/google/crypto/tink/aead/XChaCha20Poly1305KeyManager;->register(Z)V +Lcom/google/crypto/tink/aead/XChaCha20Poly1305KeyManager$1; +HSPLcom/google/crypto/tink/aead/XChaCha20Poly1305KeyManager$1;->(Ljava/lang/Class;)V +Lcom/google/crypto/tink/aead/XChaCha20Poly1305KeyManager$2; +HSPLcom/google/crypto/tink/aead/XChaCha20Poly1305KeyManager$2;->(Lcom/google/crypto/tink/aead/XChaCha20Poly1305KeyManager;Ljava/lang/Class;)V +HSPLcom/google/crypto/tink/aead/XChaCha20Poly1305KeyManager$2;->keyFormats()Ljava/util/Map; +Lcom/google/crypto/tink/aead/XChaCha20Poly1305Parameters; +Lcom/google/crypto/tink/aead/XChaCha20Poly1305ProtoSerialization; +HSPLcom/google/crypto/tink/aead/XChaCha20Poly1305ProtoSerialization;->()V +HSPLcom/google/crypto/tink/aead/XChaCha20Poly1305ProtoSerialization;->register()V +HSPLcom/google/crypto/tink/aead/XChaCha20Poly1305ProtoSerialization;->register(Lcom/google/crypto/tink/internal/MutableSerializationRegistry;)V +Lcom/google/crypto/tink/aead/XChaCha20Poly1305ProtoSerialization$$ExternalSyntheticLambda0; +HSPLcom/google/crypto/tink/aead/XChaCha20Poly1305ProtoSerialization$$ExternalSyntheticLambda0;->()V +Lcom/google/crypto/tink/aead/XChaCha20Poly1305ProtoSerialization$$ExternalSyntheticLambda1; +HSPLcom/google/crypto/tink/aead/XChaCha20Poly1305ProtoSerialization$$ExternalSyntheticLambda1;->()V +Lcom/google/crypto/tink/aead/XChaCha20Poly1305ProtoSerialization$$ExternalSyntheticLambda2; +HSPLcom/google/crypto/tink/aead/XChaCha20Poly1305ProtoSerialization$$ExternalSyntheticLambda2;->()V +Lcom/google/crypto/tink/aead/XChaCha20Poly1305ProtoSerialization$$ExternalSyntheticLambda3; +HSPLcom/google/crypto/tink/aead/XChaCha20Poly1305ProtoSerialization$$ExternalSyntheticLambda3;->()V +Lcom/google/crypto/tink/aead/internal/InsecureNonceAesGcmJce; +HSPLcom/google/crypto/tink/aead/internal/InsecureNonceAesGcmJce;->()V +HSPLcom/google/crypto/tink/aead/internal/InsecureNonceAesGcmJce;->([BZ)V +HSPLcom/google/crypto/tink/aead/internal/InsecureNonceAesGcmJce;->decrypt([B[B[B)[B +HSPLcom/google/crypto/tink/aead/internal/InsecureNonceAesGcmJce;->encrypt([B[B[B)[B +HSPLcom/google/crypto/tink/aead/internal/InsecureNonceAesGcmJce;->getParams([B)Ljava/security/spec/AlgorithmParameterSpec; +HSPLcom/google/crypto/tink/aead/internal/InsecureNonceAesGcmJce;->getParams([BII)Ljava/security/spec/AlgorithmParameterSpec; +Lcom/google/crypto/tink/aead/internal/InsecureNonceAesGcmJce$1; +HSPLcom/google/crypto/tink/aead/internal/InsecureNonceAesGcmJce$1;->()V +HSPLcom/google/crypto/tink/aead/internal/InsecureNonceAesGcmJce$1;->initialValue()Ljava/lang/Object; +HSPLcom/google/crypto/tink/aead/internal/InsecureNonceAesGcmJce$1;->initialValue()Ljavax/crypto/Cipher; +Lcom/google/crypto/tink/config/TinkFips; +HSPLcom/google/crypto/tink/config/TinkFips;->useOnlyFips()Z +Lcom/google/crypto/tink/config/internal/TinkFipsStatus; +HSPLcom/google/crypto/tink/config/internal/TinkFipsStatus;->useOnlyFips()Z +Lcom/google/crypto/tink/config/internal/TinkFipsUtil; +HSPLcom/google/crypto/tink/config/internal/TinkFipsUtil;->()V +HSPLcom/google/crypto/tink/config/internal/TinkFipsUtil;->useOnlyFips()Z +Lcom/google/crypto/tink/config/internal/TinkFipsUtil$AlgorithmFipsCompatibility; +HSPLcom/google/crypto/tink/config/internal/TinkFipsUtil$AlgorithmFipsCompatibility;->()V +HSPLcom/google/crypto/tink/config/internal/TinkFipsUtil$AlgorithmFipsCompatibility;->(Ljava/lang/String;I)V +HSPLcom/google/crypto/tink/config/internal/TinkFipsUtil$AlgorithmFipsCompatibility;->(Ljava/lang/String;ILcom/google/crypto/tink/config/internal/TinkFipsUtil$1;)V +Lcom/google/crypto/tink/config/internal/TinkFipsUtil$AlgorithmFipsCompatibility$1; +HSPLcom/google/crypto/tink/config/internal/TinkFipsUtil$AlgorithmFipsCompatibility$1;->(Ljava/lang/String;I)V +HSPLcom/google/crypto/tink/config/internal/TinkFipsUtil$AlgorithmFipsCompatibility$1;->isCompatible()Z +Lcom/google/crypto/tink/config/internal/TinkFipsUtil$AlgorithmFipsCompatibility$2; +HSPLcom/google/crypto/tink/config/internal/TinkFipsUtil$AlgorithmFipsCompatibility$2;->(Ljava/lang/String;I)V +HSPLcom/google/crypto/tink/config/internal/TinkFipsUtil$AlgorithmFipsCompatibility$2;->isCompatible()Z +Lcom/google/crypto/tink/daead/AesSivKeyManager; +HSPLcom/google/crypto/tink/daead/AesSivKeyManager;->()V +HSPLcom/google/crypto/tink/daead/AesSivKeyManager;->getKeyType()Ljava/lang/String; +HSPLcom/google/crypto/tink/daead/AesSivKeyManager;->getVersion()I +HSPLcom/google/crypto/tink/daead/AesSivKeyManager;->keyFactory()Lcom/google/crypto/tink/internal/KeyTypeManager$KeyFactory; +HSPLcom/google/crypto/tink/daead/AesSivKeyManager;->keyMaterialType()Lcom/google/crypto/tink/proto/KeyData$KeyMaterialType; +HSPLcom/google/crypto/tink/daead/AesSivKeyManager;->parseKey(Lcom/google/crypto/tink/shaded/protobuf/ByteString;)Lcom/google/crypto/tink/proto/AesSivKey; +HSPLcom/google/crypto/tink/daead/AesSivKeyManager;->parseKey(Lcom/google/crypto/tink/shaded/protobuf/ByteString;)Lcom/google/crypto/tink/shaded/protobuf/MessageLite; +HSPLcom/google/crypto/tink/daead/AesSivKeyManager;->register(Z)V +HSPLcom/google/crypto/tink/daead/AesSivKeyManager;->validateKey(Lcom/google/crypto/tink/proto/AesSivKey;)V +HSPLcom/google/crypto/tink/daead/AesSivKeyManager;->validateKey(Lcom/google/crypto/tink/shaded/protobuf/MessageLite;)V +Lcom/google/crypto/tink/daead/AesSivKeyManager$1; +HSPLcom/google/crypto/tink/daead/AesSivKeyManager$1;->(Ljava/lang/Class;)V +HSPLcom/google/crypto/tink/daead/AesSivKeyManager$1;->getPrimitive(Lcom/google/crypto/tink/proto/AesSivKey;)Lcom/google/crypto/tink/DeterministicAead; +HSPLcom/google/crypto/tink/daead/AesSivKeyManager$1;->getPrimitive(Lcom/google/crypto/tink/shaded/protobuf/MessageLite;)Ljava/lang/Object; +Lcom/google/crypto/tink/daead/AesSivKeyManager$2; +HSPLcom/google/crypto/tink/daead/AesSivKeyManager$2;->(Lcom/google/crypto/tink/daead/AesSivKeyManager;Ljava/lang/Class;)V +HSPLcom/google/crypto/tink/daead/AesSivKeyManager$2;->createKey(Lcom/google/crypto/tink/proto/AesSivKeyFormat;)Lcom/google/crypto/tink/proto/AesSivKey; +HSPLcom/google/crypto/tink/daead/AesSivKeyManager$2;->createKey(Lcom/google/crypto/tink/shaded/protobuf/MessageLite;)Lcom/google/crypto/tink/shaded/protobuf/MessageLite; +HSPLcom/google/crypto/tink/daead/AesSivKeyManager$2;->keyFormats()Ljava/util/Map; +HSPLcom/google/crypto/tink/daead/AesSivKeyManager$2;->parseKeyFormat(Lcom/google/crypto/tink/shaded/protobuf/ByteString;)Lcom/google/crypto/tink/proto/AesSivKeyFormat; +HSPLcom/google/crypto/tink/daead/AesSivKeyManager$2;->parseKeyFormat(Lcom/google/crypto/tink/shaded/protobuf/ByteString;)Lcom/google/crypto/tink/shaded/protobuf/MessageLite; +HSPLcom/google/crypto/tink/daead/AesSivKeyManager$2;->validateKeyFormat(Lcom/google/crypto/tink/proto/AesSivKeyFormat;)V +HSPLcom/google/crypto/tink/daead/AesSivKeyManager$2;->validateKeyFormat(Lcom/google/crypto/tink/shaded/protobuf/MessageLite;)V +Lcom/google/crypto/tink/daead/DeterministicAeadConfig; +HSPLcom/google/crypto/tink/daead/DeterministicAeadConfig;->()V +HSPLcom/google/crypto/tink/daead/DeterministicAeadConfig;->register()V +Lcom/google/crypto/tink/daead/DeterministicAeadWrapper; +HSPLcom/google/crypto/tink/daead/DeterministicAeadWrapper;->()V +HSPLcom/google/crypto/tink/daead/DeterministicAeadWrapper;->()V +HSPLcom/google/crypto/tink/daead/DeterministicAeadWrapper;->getInputPrimitiveClass()Ljava/lang/Class; +HSPLcom/google/crypto/tink/daead/DeterministicAeadWrapper;->getPrimitiveClass()Ljava/lang/Class; +HSPLcom/google/crypto/tink/daead/DeterministicAeadWrapper;->register()V +HSPLcom/google/crypto/tink/daead/DeterministicAeadWrapper;->wrap(Lcom/google/crypto/tink/PrimitiveSet;)Lcom/google/crypto/tink/DeterministicAead; +HSPLcom/google/crypto/tink/daead/DeterministicAeadWrapper;->wrap(Lcom/google/crypto/tink/PrimitiveSet;)Ljava/lang/Object; +Lcom/google/crypto/tink/daead/DeterministicAeadWrapper$WrappedDeterministicAead; +HSPLcom/google/crypto/tink/daead/DeterministicAeadWrapper$WrappedDeterministicAead;->(Lcom/google/crypto/tink/PrimitiveSet;)V +HSPLcom/google/crypto/tink/daead/DeterministicAeadWrapper$WrappedDeterministicAead;->encryptDeterministically([B[B)[B +Lcom/google/crypto/tink/integration/android/AndroidKeysetManager; +HSPLcom/google/crypto/tink/integration/android/AndroidKeysetManager;->()V +HSPLcom/google/crypto/tink/integration/android/AndroidKeysetManager;->(Lcom/google/crypto/tink/integration/android/AndroidKeysetManager$Builder;)V +HSPLcom/google/crypto/tink/integration/android/AndroidKeysetManager;->(Lcom/google/crypto/tink/integration/android/AndroidKeysetManager$Builder;Lcom/google/crypto/tink/integration/android/AndroidKeysetManager$1;)V +HSPLcom/google/crypto/tink/integration/android/AndroidKeysetManager;->access$600()Ljava/lang/Object; +HSPLcom/google/crypto/tink/integration/android/AndroidKeysetManager;->access$700()Z +HSPLcom/google/crypto/tink/integration/android/AndroidKeysetManager;->getKeysetHandle()Lcom/google/crypto/tink/KeysetHandle; +HSPLcom/google/crypto/tink/integration/android/AndroidKeysetManager;->isAtLeastM()Z +Lcom/google/crypto/tink/integration/android/AndroidKeysetManager$Builder; +HSPLcom/google/crypto/tink/integration/android/AndroidKeysetManager$Builder;->()V +HSPLcom/google/crypto/tink/integration/android/AndroidKeysetManager$Builder;->access$000(Lcom/google/crypto/tink/integration/android/AndroidKeysetManager$Builder;)Landroid/content/Context; +HSPLcom/google/crypto/tink/integration/android/AndroidKeysetManager$Builder;->access$100(Lcom/google/crypto/tink/integration/android/AndroidKeysetManager$Builder;)Ljava/lang/String; +HSPLcom/google/crypto/tink/integration/android/AndroidKeysetManager$Builder;->access$200(Lcom/google/crypto/tink/integration/android/AndroidKeysetManager$Builder;)Ljava/lang/String; +HSPLcom/google/crypto/tink/integration/android/AndroidKeysetManager$Builder;->access$300(Lcom/google/crypto/tink/integration/android/AndroidKeysetManager$Builder;)Lcom/google/crypto/tink/Aead; +HSPLcom/google/crypto/tink/integration/android/AndroidKeysetManager$Builder;->access$400(Lcom/google/crypto/tink/integration/android/AndroidKeysetManager$Builder;)Lcom/google/crypto/tink/KeysetManager; +HSPLcom/google/crypto/tink/integration/android/AndroidKeysetManager$Builder;->build()Lcom/google/crypto/tink/integration/android/AndroidKeysetManager; +HSPLcom/google/crypto/tink/integration/android/AndroidKeysetManager$Builder;->generateKeysetAndWriteToPrefs()Lcom/google/crypto/tink/KeysetManager; +HSPLcom/google/crypto/tink/integration/android/AndroidKeysetManager$Builder;->readKeysetFromPrefs(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;)[B +HSPLcom/google/crypto/tink/integration/android/AndroidKeysetManager$Builder;->readMasterkeyDecryptAndParseKeyset([B)Lcom/google/crypto/tink/KeysetManager; +HSPLcom/google/crypto/tink/integration/android/AndroidKeysetManager$Builder;->readOrGenerateNewMasterKey()Lcom/google/crypto/tink/Aead; +HSPLcom/google/crypto/tink/integration/android/AndroidKeysetManager$Builder;->withKeyTemplate(Lcom/google/crypto/tink/KeyTemplate;)Lcom/google/crypto/tink/integration/android/AndroidKeysetManager$Builder; +HSPLcom/google/crypto/tink/integration/android/AndroidKeysetManager$Builder;->withMasterKeyUri(Ljava/lang/String;)Lcom/google/crypto/tink/integration/android/AndroidKeysetManager$Builder; +HSPLcom/google/crypto/tink/integration/android/AndroidKeysetManager$Builder;->withSharedPref(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;)Lcom/google/crypto/tink/integration/android/AndroidKeysetManager$Builder; +Lcom/google/crypto/tink/integration/android/AndroidKeystoreAesGcm; +HSPLcom/google/crypto/tink/integration/android/AndroidKeystoreAesGcm;->()V +HSPLcom/google/crypto/tink/integration/android/AndroidKeystoreAesGcm;->(Ljava/lang/String;Ljava/security/KeyStore;)V +HSPLcom/google/crypto/tink/integration/android/AndroidKeystoreAesGcm;->decrypt([B[B)[B +HSPLcom/google/crypto/tink/integration/android/AndroidKeystoreAesGcm;->decryptInternal([B[B)[B +HSPLcom/google/crypto/tink/integration/android/AndroidKeystoreAesGcm;->encrypt([B[B)[B +HSPLcom/google/crypto/tink/integration/android/AndroidKeystoreAesGcm;->encryptInternal([B[B)[B +Lcom/google/crypto/tink/integration/android/AndroidKeystoreKmsClient; +HSPLcom/google/crypto/tink/integration/android/AndroidKeystoreKmsClient;->()V +HSPLcom/google/crypto/tink/integration/android/AndroidKeystoreKmsClient;->()V +HSPLcom/google/crypto/tink/integration/android/AndroidKeystoreKmsClient;->(Lcom/google/crypto/tink/integration/android/AndroidKeystoreKmsClient$Builder;)V +HSPLcom/google/crypto/tink/integration/android/AndroidKeystoreKmsClient;->access$000()Z +HSPLcom/google/crypto/tink/integration/android/AndroidKeystoreKmsClient;->generateKeyIfNotExist(Ljava/lang/String;)Z +HSPLcom/google/crypto/tink/integration/android/AndroidKeystoreKmsClient;->getAead(Ljava/lang/String;)Lcom/google/crypto/tink/Aead; +HSPLcom/google/crypto/tink/integration/android/AndroidKeystoreKmsClient;->hasKey(Ljava/lang/String;)Z +HSPLcom/google/crypto/tink/integration/android/AndroidKeystoreKmsClient;->isAtLeastM()Z +HSPLcom/google/crypto/tink/integration/android/AndroidKeystoreKmsClient;->validateAead(Lcom/google/crypto/tink/Aead;)Lcom/google/crypto/tink/Aead; +Lcom/google/crypto/tink/integration/android/AndroidKeystoreKmsClient$Builder; +HSPLcom/google/crypto/tink/integration/android/AndroidKeystoreKmsClient$Builder;->()V +Lcom/google/crypto/tink/integration/android/SharedPrefKeysetWriter; +HSPLcom/google/crypto/tink/integration/android/SharedPrefKeysetWriter;->(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;)V +HSPLcom/google/crypto/tink/integration/android/SharedPrefKeysetWriter;->write(Lcom/google/crypto/tink/proto/EncryptedKeyset;)V +Lcom/google/crypto/tink/internal/BuildDispatchedCode; +HSPLcom/google/crypto/tink/internal/BuildDispatchedCode;->getApiLevel()Ljava/lang/Integer; +Lcom/google/crypto/tink/internal/KeyParser; +HSPLcom/google/crypto/tink/internal/KeyParser;->(Lcom/google/crypto/tink/util/Bytes;Ljava/lang/Class;)V +HSPLcom/google/crypto/tink/internal/KeyParser;->(Lcom/google/crypto/tink/util/Bytes;Ljava/lang/Class;Lcom/google/crypto/tink/internal/KeyParser$1;)V +HSPLcom/google/crypto/tink/internal/KeyParser;->create(Lcom/google/crypto/tink/internal/KeyParser$KeyParsingFunction;Lcom/google/crypto/tink/util/Bytes;Ljava/lang/Class;)Lcom/google/crypto/tink/internal/KeyParser; +HSPLcom/google/crypto/tink/internal/KeyParser;->getObjectIdentifier()Lcom/google/crypto/tink/util/Bytes; +HSPLcom/google/crypto/tink/internal/KeyParser;->getSerializationClass()Ljava/lang/Class; +Lcom/google/crypto/tink/internal/KeyParser$1; +HSPLcom/google/crypto/tink/internal/KeyParser$1;->(Lcom/google/crypto/tink/util/Bytes;Ljava/lang/Class;Lcom/google/crypto/tink/internal/KeyParser$KeyParsingFunction;)V +HSPLcom/google/crypto/tink/internal/KeyParser$1;->parseKey(Lcom/google/crypto/tink/internal/Serialization;Lcom/google/crypto/tink/SecretKeyAccess;)Lcom/google/crypto/tink/Key; +Lcom/google/crypto/tink/internal/KeyParser$KeyParsingFunction; +Lcom/google/crypto/tink/internal/KeySerializer; +HSPLcom/google/crypto/tink/internal/KeySerializer;->(Ljava/lang/Class;Ljava/lang/Class;)V +HSPLcom/google/crypto/tink/internal/KeySerializer;->(Ljava/lang/Class;Ljava/lang/Class;Lcom/google/crypto/tink/internal/KeySerializer$1;)V +HSPLcom/google/crypto/tink/internal/KeySerializer;->create(Lcom/google/crypto/tink/internal/KeySerializer$KeySerializationFunction;Ljava/lang/Class;Ljava/lang/Class;)Lcom/google/crypto/tink/internal/KeySerializer; +HSPLcom/google/crypto/tink/internal/KeySerializer;->getKeyClass()Ljava/lang/Class; +HSPLcom/google/crypto/tink/internal/KeySerializer;->getSerializationClass()Ljava/lang/Class; +Lcom/google/crypto/tink/internal/KeySerializer$1; +HSPLcom/google/crypto/tink/internal/KeySerializer$1;->(Ljava/lang/Class;Ljava/lang/Class;Lcom/google/crypto/tink/internal/KeySerializer$KeySerializationFunction;)V +Lcom/google/crypto/tink/internal/KeySerializer$KeySerializationFunction; +Lcom/google/crypto/tink/internal/KeyTypeManager; +HSPLcom/google/crypto/tink/internal/KeyTypeManager;->(Ljava/lang/Class;[Lcom/google/crypto/tink/internal/PrimitiveFactory;)V +HSPLcom/google/crypto/tink/internal/KeyTypeManager;->fipsStatus()Lcom/google/crypto/tink/config/internal/TinkFipsUtil$AlgorithmFipsCompatibility; +HSPLcom/google/crypto/tink/internal/KeyTypeManager;->firstSupportedPrimitiveClass()Ljava/lang/Class; +HSPLcom/google/crypto/tink/internal/KeyTypeManager;->getPrimitive(Lcom/google/crypto/tink/shaded/protobuf/MessageLite;Ljava/lang/Class;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/internal/KeyTypeManager;->supportedPrimitives()Ljava/util/Set; +Lcom/google/crypto/tink/internal/KeyTypeManager$KeyFactory; +HSPLcom/google/crypto/tink/internal/KeyTypeManager$KeyFactory;->(Ljava/lang/Class;)V +HSPLcom/google/crypto/tink/internal/KeyTypeManager$KeyFactory;->keyFormats()Ljava/util/Map; +Lcom/google/crypto/tink/internal/KeyTypeManager$KeyFactory$KeyFormat; +HSPLcom/google/crypto/tink/internal/KeyTypeManager$KeyFactory$KeyFormat;->(Ljava/lang/Object;Lcom/google/crypto/tink/KeyTemplate$OutputPrefixType;)V +Lcom/google/crypto/tink/internal/LegacyProtoKey; +HSPLcom/google/crypto/tink/internal/LegacyProtoKey;->(Lcom/google/crypto/tink/internal/ProtoKeySerialization;Lcom/google/crypto/tink/SecretKeyAccess;)V +HSPLcom/google/crypto/tink/internal/LegacyProtoKey;->throwIfMissingAccess(Lcom/google/crypto/tink/internal/ProtoKeySerialization;Lcom/google/crypto/tink/SecretKeyAccess;)V +Lcom/google/crypto/tink/internal/LegacyProtoKey$1; +HSPLcom/google/crypto/tink/internal/LegacyProtoKey$1;->()V +Lcom/google/crypto/tink/internal/MonitoringUtil; +HSPLcom/google/crypto/tink/internal/MonitoringUtil;->()V +Lcom/google/crypto/tink/internal/MonitoringUtil$DoNothingLogger; +HSPLcom/google/crypto/tink/internal/MonitoringUtil$DoNothingLogger;->()V +HSPLcom/google/crypto/tink/internal/MonitoringUtil$DoNothingLogger;->(Lcom/google/crypto/tink/internal/MonitoringUtil$1;)V +HSPLcom/google/crypto/tink/internal/MonitoringUtil$DoNothingLogger;->log(IJ)V +Lcom/google/crypto/tink/internal/MutablePrimitiveRegistry; +HSPLcom/google/crypto/tink/internal/MutablePrimitiveRegistry;->()V +HSPLcom/google/crypto/tink/internal/MutablePrimitiveRegistry;->()V +HSPLcom/google/crypto/tink/internal/MutablePrimitiveRegistry;->getInputPrimitiveClass(Ljava/lang/Class;)Ljava/lang/Class; +HSPLcom/google/crypto/tink/internal/MutablePrimitiveRegistry;->getPrimitive(Lcom/google/crypto/tink/Key;Ljava/lang/Class;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/internal/MutablePrimitiveRegistry;->globalInstance()Lcom/google/crypto/tink/internal/MutablePrimitiveRegistry; +HSPLcom/google/crypto/tink/internal/MutablePrimitiveRegistry;->registerPrimitiveConstructor(Lcom/google/crypto/tink/internal/PrimitiveConstructor;)V +HSPLcom/google/crypto/tink/internal/MutablePrimitiveRegistry;->registerPrimitiveWrapper(Lcom/google/crypto/tink/PrimitiveWrapper;)V +HSPLcom/google/crypto/tink/internal/MutablePrimitiveRegistry;->wrap(Lcom/google/crypto/tink/PrimitiveSet;Ljava/lang/Class;)Ljava/lang/Object; +Lcom/google/crypto/tink/internal/MutableSerializationRegistry; +HSPLcom/google/crypto/tink/internal/MutableSerializationRegistry;->()V +HSPLcom/google/crypto/tink/internal/MutableSerializationRegistry;->()V +HSPLcom/google/crypto/tink/internal/MutableSerializationRegistry;->globalInstance()Lcom/google/crypto/tink/internal/MutableSerializationRegistry; +HSPLcom/google/crypto/tink/internal/MutableSerializationRegistry;->hasParserForKey(Lcom/google/crypto/tink/internal/Serialization;)Z +HSPLcom/google/crypto/tink/internal/MutableSerializationRegistry;->parseKey(Lcom/google/crypto/tink/internal/Serialization;Lcom/google/crypto/tink/SecretKeyAccess;)Lcom/google/crypto/tink/Key; +HSPLcom/google/crypto/tink/internal/MutableSerializationRegistry;->parseKeyWithLegacyFallback(Lcom/google/crypto/tink/internal/ProtoKeySerialization;Lcom/google/crypto/tink/SecretKeyAccess;)Lcom/google/crypto/tink/Key; +HSPLcom/google/crypto/tink/internal/MutableSerializationRegistry;->registerKeyParser(Lcom/google/crypto/tink/internal/KeyParser;)V +HSPLcom/google/crypto/tink/internal/MutableSerializationRegistry;->registerKeySerializer(Lcom/google/crypto/tink/internal/KeySerializer;)V +HSPLcom/google/crypto/tink/internal/MutableSerializationRegistry;->registerParametersParser(Lcom/google/crypto/tink/internal/ParametersParser;)V +HSPLcom/google/crypto/tink/internal/MutableSerializationRegistry;->registerParametersSerializer(Lcom/google/crypto/tink/internal/ParametersSerializer;)V +Lcom/google/crypto/tink/internal/ParametersParser; +HSPLcom/google/crypto/tink/internal/ParametersParser;->(Lcom/google/crypto/tink/util/Bytes;Ljava/lang/Class;)V +HSPLcom/google/crypto/tink/internal/ParametersParser;->(Lcom/google/crypto/tink/util/Bytes;Ljava/lang/Class;Lcom/google/crypto/tink/internal/ParametersParser$1;)V +HSPLcom/google/crypto/tink/internal/ParametersParser;->create(Lcom/google/crypto/tink/internal/ParametersParser$ParametersParsingFunction;Lcom/google/crypto/tink/util/Bytes;Ljava/lang/Class;)Lcom/google/crypto/tink/internal/ParametersParser; +HSPLcom/google/crypto/tink/internal/ParametersParser;->getObjectIdentifier()Lcom/google/crypto/tink/util/Bytes; +HSPLcom/google/crypto/tink/internal/ParametersParser;->getSerializationClass()Ljava/lang/Class; +Lcom/google/crypto/tink/internal/ParametersParser$1; +HSPLcom/google/crypto/tink/internal/ParametersParser$1;->(Lcom/google/crypto/tink/util/Bytes;Ljava/lang/Class;Lcom/google/crypto/tink/internal/ParametersParser$ParametersParsingFunction;)V +Lcom/google/crypto/tink/internal/ParametersParser$ParametersParsingFunction; +Lcom/google/crypto/tink/internal/ParametersSerializer; +HSPLcom/google/crypto/tink/internal/ParametersSerializer;->(Ljava/lang/Class;Ljava/lang/Class;)V +HSPLcom/google/crypto/tink/internal/ParametersSerializer;->(Ljava/lang/Class;Ljava/lang/Class;Lcom/google/crypto/tink/internal/ParametersSerializer$1;)V +HSPLcom/google/crypto/tink/internal/ParametersSerializer;->create(Lcom/google/crypto/tink/internal/ParametersSerializer$ParametersSerializationFunction;Ljava/lang/Class;Ljava/lang/Class;)Lcom/google/crypto/tink/internal/ParametersSerializer; +HSPLcom/google/crypto/tink/internal/ParametersSerializer;->getParametersClass()Ljava/lang/Class; +HSPLcom/google/crypto/tink/internal/ParametersSerializer;->getSerializationClass()Ljava/lang/Class; +Lcom/google/crypto/tink/internal/ParametersSerializer$1; +HSPLcom/google/crypto/tink/internal/ParametersSerializer$1;->(Ljava/lang/Class;Ljava/lang/Class;Lcom/google/crypto/tink/internal/ParametersSerializer$ParametersSerializationFunction;)V +Lcom/google/crypto/tink/internal/ParametersSerializer$ParametersSerializationFunction; +Lcom/google/crypto/tink/internal/PrimitiveConstructor; +HSPLcom/google/crypto/tink/internal/PrimitiveConstructor;->(Ljava/lang/Class;Ljava/lang/Class;)V +HSPLcom/google/crypto/tink/internal/PrimitiveConstructor;->(Ljava/lang/Class;Ljava/lang/Class;Lcom/google/crypto/tink/internal/PrimitiveConstructor$1;)V +HSPLcom/google/crypto/tink/internal/PrimitiveConstructor;->create(Lcom/google/crypto/tink/internal/PrimitiveConstructor$PrimitiveConstructionFunction;Ljava/lang/Class;Ljava/lang/Class;)Lcom/google/crypto/tink/internal/PrimitiveConstructor; +HSPLcom/google/crypto/tink/internal/PrimitiveConstructor;->getKeyClass()Ljava/lang/Class; +HSPLcom/google/crypto/tink/internal/PrimitiveConstructor;->getPrimitiveClass()Ljava/lang/Class; +Lcom/google/crypto/tink/internal/PrimitiveConstructor$1; +HSPLcom/google/crypto/tink/internal/PrimitiveConstructor$1;->(Ljava/lang/Class;Ljava/lang/Class;Lcom/google/crypto/tink/internal/PrimitiveConstructor$PrimitiveConstructionFunction;)V +Lcom/google/crypto/tink/internal/PrimitiveConstructor$PrimitiveConstructionFunction; +Lcom/google/crypto/tink/internal/PrimitiveFactory; +HSPLcom/google/crypto/tink/internal/PrimitiveFactory;->(Ljava/lang/Class;)V +HSPLcom/google/crypto/tink/internal/PrimitiveFactory;->getPrimitiveClass()Ljava/lang/Class; +Lcom/google/crypto/tink/internal/PrimitiveRegistry; +HSPLcom/google/crypto/tink/internal/PrimitiveRegistry;->(Lcom/google/crypto/tink/internal/PrimitiveRegistry$Builder;)V +HSPLcom/google/crypto/tink/internal/PrimitiveRegistry;->(Lcom/google/crypto/tink/internal/PrimitiveRegistry$Builder;Lcom/google/crypto/tink/internal/PrimitiveRegistry$1;)V +HSPLcom/google/crypto/tink/internal/PrimitiveRegistry;->access$000(Lcom/google/crypto/tink/internal/PrimitiveRegistry;)Ljava/util/Map; +HSPLcom/google/crypto/tink/internal/PrimitiveRegistry;->access$100(Lcom/google/crypto/tink/internal/PrimitiveRegistry;)Ljava/util/Map; +HSPLcom/google/crypto/tink/internal/PrimitiveRegistry;->getInputPrimitiveClass(Ljava/lang/Class;)Ljava/lang/Class; +HSPLcom/google/crypto/tink/internal/PrimitiveRegistry;->getPrimitive(Lcom/google/crypto/tink/Key;Ljava/lang/Class;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/internal/PrimitiveRegistry;->wrap(Lcom/google/crypto/tink/PrimitiveSet;Ljava/lang/Class;)Ljava/lang/Object; +Lcom/google/crypto/tink/internal/PrimitiveRegistry$Builder; +HSPLcom/google/crypto/tink/internal/PrimitiveRegistry$Builder;->()V +HSPLcom/google/crypto/tink/internal/PrimitiveRegistry$Builder;->(Lcom/google/crypto/tink/internal/PrimitiveRegistry;)V +HSPLcom/google/crypto/tink/internal/PrimitiveRegistry$Builder;->access$400(Lcom/google/crypto/tink/internal/PrimitiveRegistry$Builder;)Ljava/util/Map; +HSPLcom/google/crypto/tink/internal/PrimitiveRegistry$Builder;->access$500(Lcom/google/crypto/tink/internal/PrimitiveRegistry$Builder;)Ljava/util/Map; +HSPLcom/google/crypto/tink/internal/PrimitiveRegistry$Builder;->build()Lcom/google/crypto/tink/internal/PrimitiveRegistry; +HSPLcom/google/crypto/tink/internal/PrimitiveRegistry$Builder;->registerPrimitiveConstructor(Lcom/google/crypto/tink/internal/PrimitiveConstructor;)Lcom/google/crypto/tink/internal/PrimitiveRegistry$Builder; +HSPLcom/google/crypto/tink/internal/PrimitiveRegistry$Builder;->registerPrimitiveWrapper(Lcom/google/crypto/tink/PrimitiveWrapper;)Lcom/google/crypto/tink/internal/PrimitiveRegistry$Builder; +Lcom/google/crypto/tink/internal/PrimitiveRegistry$PrimitiveConstructorIndex; +HSPLcom/google/crypto/tink/internal/PrimitiveRegistry$PrimitiveConstructorIndex;->(Ljava/lang/Class;Ljava/lang/Class;)V +HSPLcom/google/crypto/tink/internal/PrimitiveRegistry$PrimitiveConstructorIndex;->(Ljava/lang/Class;Ljava/lang/Class;Lcom/google/crypto/tink/internal/PrimitiveRegistry$1;)V +HSPLcom/google/crypto/tink/internal/PrimitiveRegistry$PrimitiveConstructorIndex;->equals(Ljava/lang/Object;)Z +HSPLcom/google/crypto/tink/internal/PrimitiveRegistry$PrimitiveConstructorIndex;->hashCode()I +HSPLcom/google/crypto/tink/internal/PrimitiveRegistry$PrimitiveConstructorIndex;->toString()Ljava/lang/String; +Lcom/google/crypto/tink/internal/ProtoKeySerialization; +HSPLcom/google/crypto/tink/internal/ProtoKeySerialization;->(Ljava/lang/String;Lcom/google/crypto/tink/shaded/protobuf/ByteString;Lcom/google/crypto/tink/proto/KeyData$KeyMaterialType;Lcom/google/crypto/tink/proto/OutputPrefixType;Ljava/lang/Integer;)V +HSPLcom/google/crypto/tink/internal/ProtoKeySerialization;->create(Ljava/lang/String;Lcom/google/crypto/tink/shaded/protobuf/ByteString;Lcom/google/crypto/tink/proto/KeyData$KeyMaterialType;Lcom/google/crypto/tink/proto/OutputPrefixType;Ljava/lang/Integer;)Lcom/google/crypto/tink/internal/ProtoKeySerialization; +HSPLcom/google/crypto/tink/internal/ProtoKeySerialization;->getIdRequirementOrNull()Ljava/lang/Integer; +HSPLcom/google/crypto/tink/internal/ProtoKeySerialization;->getKeyMaterialType()Lcom/google/crypto/tink/proto/KeyData$KeyMaterialType; +HSPLcom/google/crypto/tink/internal/ProtoKeySerialization;->getObjectIdentifier()Lcom/google/crypto/tink/util/Bytes; +HSPLcom/google/crypto/tink/internal/ProtoKeySerialization;->getOutputPrefixType()Lcom/google/crypto/tink/proto/OutputPrefixType; +HSPLcom/google/crypto/tink/internal/ProtoKeySerialization;->getTypeUrl()Ljava/lang/String; +HSPLcom/google/crypto/tink/internal/ProtoKeySerialization;->getValue()Lcom/google/crypto/tink/shaded/protobuf/ByteString; +Lcom/google/crypto/tink/internal/ProtoParametersSerialization; +Lcom/google/crypto/tink/internal/Serialization; +Lcom/google/crypto/tink/internal/SerializationRegistry; +HSPLcom/google/crypto/tink/internal/SerializationRegistry;->(Lcom/google/crypto/tink/internal/SerializationRegistry$Builder;)V +HSPLcom/google/crypto/tink/internal/SerializationRegistry;->(Lcom/google/crypto/tink/internal/SerializationRegistry$Builder;Lcom/google/crypto/tink/internal/SerializationRegistry$1;)V +HSPLcom/google/crypto/tink/internal/SerializationRegistry;->access$000(Lcom/google/crypto/tink/internal/SerializationRegistry;)Ljava/util/Map; +HSPLcom/google/crypto/tink/internal/SerializationRegistry;->access$100(Lcom/google/crypto/tink/internal/SerializationRegistry;)Ljava/util/Map; +HSPLcom/google/crypto/tink/internal/SerializationRegistry;->access$200(Lcom/google/crypto/tink/internal/SerializationRegistry;)Ljava/util/Map; +HSPLcom/google/crypto/tink/internal/SerializationRegistry;->access$300(Lcom/google/crypto/tink/internal/SerializationRegistry;)Ljava/util/Map; +HSPLcom/google/crypto/tink/internal/SerializationRegistry;->hasParserForKey(Lcom/google/crypto/tink/internal/Serialization;)Z +HSPLcom/google/crypto/tink/internal/SerializationRegistry;->parseKey(Lcom/google/crypto/tink/internal/Serialization;Lcom/google/crypto/tink/SecretKeyAccess;)Lcom/google/crypto/tink/Key; +Lcom/google/crypto/tink/internal/SerializationRegistry$Builder; +HSPLcom/google/crypto/tink/internal/SerializationRegistry$Builder;->()V +HSPLcom/google/crypto/tink/internal/SerializationRegistry$Builder;->(Lcom/google/crypto/tink/internal/SerializationRegistry;)V +HSPLcom/google/crypto/tink/internal/SerializationRegistry$Builder;->access$1000(Lcom/google/crypto/tink/internal/SerializationRegistry$Builder;)Ljava/util/Map; +HSPLcom/google/crypto/tink/internal/SerializationRegistry$Builder;->access$700(Lcom/google/crypto/tink/internal/SerializationRegistry$Builder;)Ljava/util/Map; +HSPLcom/google/crypto/tink/internal/SerializationRegistry$Builder;->access$800(Lcom/google/crypto/tink/internal/SerializationRegistry$Builder;)Ljava/util/Map; +HSPLcom/google/crypto/tink/internal/SerializationRegistry$Builder;->access$900(Lcom/google/crypto/tink/internal/SerializationRegistry$Builder;)Ljava/util/Map; +HSPLcom/google/crypto/tink/internal/SerializationRegistry$Builder;->build()Lcom/google/crypto/tink/internal/SerializationRegistry; +HSPLcom/google/crypto/tink/internal/SerializationRegistry$Builder;->registerKeyParser(Lcom/google/crypto/tink/internal/KeyParser;)Lcom/google/crypto/tink/internal/SerializationRegistry$Builder; +HSPLcom/google/crypto/tink/internal/SerializationRegistry$Builder;->registerKeySerializer(Lcom/google/crypto/tink/internal/KeySerializer;)Lcom/google/crypto/tink/internal/SerializationRegistry$Builder; +HSPLcom/google/crypto/tink/internal/SerializationRegistry$Builder;->registerParametersParser(Lcom/google/crypto/tink/internal/ParametersParser;)Lcom/google/crypto/tink/internal/SerializationRegistry$Builder; +HSPLcom/google/crypto/tink/internal/SerializationRegistry$Builder;->registerParametersSerializer(Lcom/google/crypto/tink/internal/ParametersSerializer;)Lcom/google/crypto/tink/internal/SerializationRegistry$Builder; +Lcom/google/crypto/tink/internal/SerializationRegistry$ParserIndex; +HSPLcom/google/crypto/tink/internal/SerializationRegistry$ParserIndex;->(Ljava/lang/Class;Lcom/google/crypto/tink/util/Bytes;)V +HSPLcom/google/crypto/tink/internal/SerializationRegistry$ParserIndex;->(Ljava/lang/Class;Lcom/google/crypto/tink/util/Bytes;Lcom/google/crypto/tink/internal/SerializationRegistry$1;)V +HSPLcom/google/crypto/tink/internal/SerializationRegistry$ParserIndex;->equals(Ljava/lang/Object;)Z +HSPLcom/google/crypto/tink/internal/SerializationRegistry$ParserIndex;->hashCode()I +Lcom/google/crypto/tink/internal/SerializationRegistry$SerializerIndex; +HSPLcom/google/crypto/tink/internal/SerializationRegistry$SerializerIndex;->(Ljava/lang/Class;Ljava/lang/Class;)V +HSPLcom/google/crypto/tink/internal/SerializationRegistry$SerializerIndex;->(Ljava/lang/Class;Ljava/lang/Class;Lcom/google/crypto/tink/internal/SerializationRegistry$1;)V +HSPLcom/google/crypto/tink/internal/SerializationRegistry$SerializerIndex;->equals(Ljava/lang/Object;)Z +HSPLcom/google/crypto/tink/internal/SerializationRegistry$SerializerIndex;->hashCode()I +Lcom/google/crypto/tink/internal/Util; +HSPLcom/google/crypto/tink/internal/Util;->()V +HSPLcom/google/crypto/tink/internal/Util;->getAndroidApiLevel()Ljava/lang/Integer; +HSPLcom/google/crypto/tink/internal/Util;->isAndroid()Z +HSPLcom/google/crypto/tink/internal/Util;->randKeyId()I +HSPLcom/google/crypto/tink/internal/Util;->toByteFromPrintableAscii(C)B +HSPLcom/google/crypto/tink/internal/Util;->toBytesFromPrintableAscii(Ljava/lang/String;)Lcom/google/crypto/tink/util/Bytes; +Lcom/google/crypto/tink/mac/AesCmacKey; +Lcom/google/crypto/tink/mac/AesCmacKeyManager; +HSPLcom/google/crypto/tink/mac/AesCmacKeyManager;->()V +HSPLcom/google/crypto/tink/mac/AesCmacKeyManager;->()V +HSPLcom/google/crypto/tink/mac/AesCmacKeyManager;->getKeyType()Ljava/lang/String; +HSPLcom/google/crypto/tink/mac/AesCmacKeyManager;->keyFactory()Lcom/google/crypto/tink/internal/KeyTypeManager$KeyFactory; +HSPLcom/google/crypto/tink/mac/AesCmacKeyManager;->register(Z)V +Lcom/google/crypto/tink/mac/AesCmacKeyManager$$ExternalSyntheticLambda0; +HSPLcom/google/crypto/tink/mac/AesCmacKeyManager$$ExternalSyntheticLambda0;->()V +Lcom/google/crypto/tink/mac/AesCmacKeyManager$1; +HSPLcom/google/crypto/tink/mac/AesCmacKeyManager$1;->(Ljava/lang/Class;)V +Lcom/google/crypto/tink/mac/AesCmacKeyManager$2; +HSPLcom/google/crypto/tink/mac/AesCmacKeyManager$2;->(Lcom/google/crypto/tink/mac/AesCmacKeyManager;Ljava/lang/Class;)V +HSPLcom/google/crypto/tink/mac/AesCmacKeyManager$2;->keyFormats()Ljava/util/Map; +Lcom/google/crypto/tink/mac/AesCmacParameters; +Lcom/google/crypto/tink/mac/AesCmacProtoSerialization; +HSPLcom/google/crypto/tink/mac/AesCmacProtoSerialization;->()V +HSPLcom/google/crypto/tink/mac/AesCmacProtoSerialization;->register()V +HSPLcom/google/crypto/tink/mac/AesCmacProtoSerialization;->register(Lcom/google/crypto/tink/internal/MutableSerializationRegistry;)V +Lcom/google/crypto/tink/mac/AesCmacProtoSerialization$$ExternalSyntheticLambda0; +HSPLcom/google/crypto/tink/mac/AesCmacProtoSerialization$$ExternalSyntheticLambda0;->()V +Lcom/google/crypto/tink/mac/AesCmacProtoSerialization$$ExternalSyntheticLambda1; +HSPLcom/google/crypto/tink/mac/AesCmacProtoSerialization$$ExternalSyntheticLambda1;->()V +Lcom/google/crypto/tink/mac/AesCmacProtoSerialization$$ExternalSyntheticLambda2; +HSPLcom/google/crypto/tink/mac/AesCmacProtoSerialization$$ExternalSyntheticLambda2;->()V +Lcom/google/crypto/tink/mac/AesCmacProtoSerialization$$ExternalSyntheticLambda3; +HSPLcom/google/crypto/tink/mac/AesCmacProtoSerialization$$ExternalSyntheticLambda3;->()V +Lcom/google/crypto/tink/mac/ChunkedMac; +Lcom/google/crypto/tink/mac/ChunkedMacWrapper; +HSPLcom/google/crypto/tink/mac/ChunkedMacWrapper;->()V +HSPLcom/google/crypto/tink/mac/ChunkedMacWrapper;->()V +HSPLcom/google/crypto/tink/mac/ChunkedMacWrapper;->getPrimitiveClass()Ljava/lang/Class; +HSPLcom/google/crypto/tink/mac/ChunkedMacWrapper;->register()V +Lcom/google/crypto/tink/mac/HmacKey; +Lcom/google/crypto/tink/mac/HmacKeyManager; +HSPLcom/google/crypto/tink/mac/HmacKeyManager;->()V +HSPLcom/google/crypto/tink/mac/HmacKeyManager;->()V +HSPLcom/google/crypto/tink/mac/HmacKeyManager;->access$100(IILcom/google/crypto/tink/proto/HashType;Lcom/google/crypto/tink/KeyTemplate$OutputPrefixType;)Lcom/google/crypto/tink/internal/KeyTypeManager$KeyFactory$KeyFormat; +HSPLcom/google/crypto/tink/mac/HmacKeyManager;->createKeyFormat(IILcom/google/crypto/tink/proto/HashType;Lcom/google/crypto/tink/KeyTemplate$OutputPrefixType;)Lcom/google/crypto/tink/internal/KeyTypeManager$KeyFactory$KeyFormat; +HSPLcom/google/crypto/tink/mac/HmacKeyManager;->fipsStatus()Lcom/google/crypto/tink/config/internal/TinkFipsUtil$AlgorithmFipsCompatibility; +HSPLcom/google/crypto/tink/mac/HmacKeyManager;->getKeyType()Ljava/lang/String; +HSPLcom/google/crypto/tink/mac/HmacKeyManager;->keyFactory()Lcom/google/crypto/tink/internal/KeyTypeManager$KeyFactory; +HSPLcom/google/crypto/tink/mac/HmacKeyManager;->register(Z)V +Lcom/google/crypto/tink/mac/HmacKeyManager$$ExternalSyntheticLambda0; +HSPLcom/google/crypto/tink/mac/HmacKeyManager$$ExternalSyntheticLambda0;->()V +Lcom/google/crypto/tink/mac/HmacKeyManager$1; +HSPLcom/google/crypto/tink/mac/HmacKeyManager$1;->(Ljava/lang/Class;)V +Lcom/google/crypto/tink/mac/HmacKeyManager$2; +HSPLcom/google/crypto/tink/mac/HmacKeyManager$2;->(Lcom/google/crypto/tink/mac/HmacKeyManager;Ljava/lang/Class;)V +HSPLcom/google/crypto/tink/mac/HmacKeyManager$2;->keyFormats()Ljava/util/Map; +Lcom/google/crypto/tink/mac/HmacParameters; +Lcom/google/crypto/tink/mac/HmacProtoSerialization; +HSPLcom/google/crypto/tink/mac/HmacProtoSerialization;->()V +HSPLcom/google/crypto/tink/mac/HmacProtoSerialization;->register()V +HSPLcom/google/crypto/tink/mac/HmacProtoSerialization;->register(Lcom/google/crypto/tink/internal/MutableSerializationRegistry;)V +Lcom/google/crypto/tink/mac/HmacProtoSerialization$$ExternalSyntheticLambda0; +HSPLcom/google/crypto/tink/mac/HmacProtoSerialization$$ExternalSyntheticLambda0;->()V +Lcom/google/crypto/tink/mac/HmacProtoSerialization$$ExternalSyntheticLambda1; +HSPLcom/google/crypto/tink/mac/HmacProtoSerialization$$ExternalSyntheticLambda1;->()V +Lcom/google/crypto/tink/mac/HmacProtoSerialization$$ExternalSyntheticLambda2; +HSPLcom/google/crypto/tink/mac/HmacProtoSerialization$$ExternalSyntheticLambda2;->()V +Lcom/google/crypto/tink/mac/HmacProtoSerialization$$ExternalSyntheticLambda3; +HSPLcom/google/crypto/tink/mac/HmacProtoSerialization$$ExternalSyntheticLambda3;->()V +Lcom/google/crypto/tink/mac/MacConfig; +HSPLcom/google/crypto/tink/mac/MacConfig;->()V +HSPLcom/google/crypto/tink/mac/MacConfig;->init()V +HSPLcom/google/crypto/tink/mac/MacConfig;->register()V +Lcom/google/crypto/tink/mac/MacKey; +Lcom/google/crypto/tink/mac/MacParameters; +Lcom/google/crypto/tink/mac/MacWrapper; +HSPLcom/google/crypto/tink/mac/MacWrapper;->()V +HSPLcom/google/crypto/tink/mac/MacWrapper;->()V +HSPLcom/google/crypto/tink/mac/MacWrapper;->getPrimitiveClass()Ljava/lang/Class; +HSPLcom/google/crypto/tink/mac/MacWrapper;->register()V +Lcom/google/crypto/tink/mac/internal/AesUtil; +HSPLcom/google/crypto/tink/mac/internal/AesUtil;->cmacPad([B)[B +HSPLcom/google/crypto/tink/mac/internal/AesUtil;->dbl([B)[B +Lcom/google/crypto/tink/monitoring/MonitoringAnnotations; +HSPLcom/google/crypto/tink/monitoring/MonitoringAnnotations;->()V +HSPLcom/google/crypto/tink/monitoring/MonitoringAnnotations;->(Ljava/util/Map;)V +HSPLcom/google/crypto/tink/monitoring/MonitoringAnnotations;->(Ljava/util/Map;Lcom/google/crypto/tink/monitoring/MonitoringAnnotations$1;)V +HSPLcom/google/crypto/tink/monitoring/MonitoringAnnotations;->newBuilder()Lcom/google/crypto/tink/monitoring/MonitoringAnnotations$Builder; +HSPLcom/google/crypto/tink/monitoring/MonitoringAnnotations;->toMap()Ljava/util/Map; +Lcom/google/crypto/tink/monitoring/MonitoringAnnotations$Builder; +HSPLcom/google/crypto/tink/monitoring/MonitoringAnnotations$Builder;->()V +HSPLcom/google/crypto/tink/monitoring/MonitoringAnnotations$Builder;->build()Lcom/google/crypto/tink/monitoring/MonitoringAnnotations; +Lcom/google/crypto/tink/monitoring/MonitoringClient$Logger; +Lcom/google/crypto/tink/prf/Prf; +Lcom/google/crypto/tink/proto/AesCmacKey; +Lcom/google/crypto/tink/proto/AesCmacKeyFormat; +HSPLcom/google/crypto/tink/proto/AesCmacKeyFormat;->()V +HSPLcom/google/crypto/tink/proto/AesCmacKeyFormat;->()V +HSPLcom/google/crypto/tink/proto/AesCmacKeyFormat;->access$000()Lcom/google/crypto/tink/proto/AesCmacKeyFormat; +HSPLcom/google/crypto/tink/proto/AesCmacKeyFormat;->access$100(Lcom/google/crypto/tink/proto/AesCmacKeyFormat;I)V +HSPLcom/google/crypto/tink/proto/AesCmacKeyFormat;->access$300(Lcom/google/crypto/tink/proto/AesCmacKeyFormat;Lcom/google/crypto/tink/proto/AesCmacParams;)V +HSPLcom/google/crypto/tink/proto/AesCmacKeyFormat;->dynamicMethod(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$MethodToInvoke;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/proto/AesCmacKeyFormat;->newBuilder()Lcom/google/crypto/tink/proto/AesCmacKeyFormat$Builder; +HSPLcom/google/crypto/tink/proto/AesCmacKeyFormat;->setKeySize(I)V +HSPLcom/google/crypto/tink/proto/AesCmacKeyFormat;->setParams(Lcom/google/crypto/tink/proto/AesCmacParams;)V +Lcom/google/crypto/tink/proto/AesCmacKeyFormat$1; +HSPLcom/google/crypto/tink/proto/AesCmacKeyFormat$1;->()V +Lcom/google/crypto/tink/proto/AesCmacKeyFormat$Builder; +HSPLcom/google/crypto/tink/proto/AesCmacKeyFormat$Builder;->()V +HSPLcom/google/crypto/tink/proto/AesCmacKeyFormat$Builder;->(Lcom/google/crypto/tink/proto/AesCmacKeyFormat$1;)V +HSPLcom/google/crypto/tink/proto/AesCmacKeyFormat$Builder;->setKeySize(I)Lcom/google/crypto/tink/proto/AesCmacKeyFormat$Builder; +HSPLcom/google/crypto/tink/proto/AesCmacKeyFormat$Builder;->setParams(Lcom/google/crypto/tink/proto/AesCmacParams;)Lcom/google/crypto/tink/proto/AesCmacKeyFormat$Builder; +Lcom/google/crypto/tink/proto/AesCmacKeyFormatOrBuilder; +Lcom/google/crypto/tink/proto/AesCmacKeyOrBuilder; +Lcom/google/crypto/tink/proto/AesCmacParams; +HSPLcom/google/crypto/tink/proto/AesCmacParams;->()V +HSPLcom/google/crypto/tink/proto/AesCmacParams;->()V +HSPLcom/google/crypto/tink/proto/AesCmacParams;->access$000()Lcom/google/crypto/tink/proto/AesCmacParams; +HSPLcom/google/crypto/tink/proto/AesCmacParams;->access$100(Lcom/google/crypto/tink/proto/AesCmacParams;I)V +HSPLcom/google/crypto/tink/proto/AesCmacParams;->dynamicMethod(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$MethodToInvoke;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/proto/AesCmacParams;->newBuilder()Lcom/google/crypto/tink/proto/AesCmacParams$Builder; +HSPLcom/google/crypto/tink/proto/AesCmacParams;->setTagSize(I)V +Lcom/google/crypto/tink/proto/AesCmacParams$1; +HSPLcom/google/crypto/tink/proto/AesCmacParams$1;->()V +Lcom/google/crypto/tink/proto/AesCmacParams$Builder; +HSPLcom/google/crypto/tink/proto/AesCmacParams$Builder;->()V +HSPLcom/google/crypto/tink/proto/AesCmacParams$Builder;->(Lcom/google/crypto/tink/proto/AesCmacParams$1;)V +HSPLcom/google/crypto/tink/proto/AesCmacParams$Builder;->setTagSize(I)Lcom/google/crypto/tink/proto/AesCmacParams$Builder; +Lcom/google/crypto/tink/proto/AesCmacParamsOrBuilder; +Lcom/google/crypto/tink/proto/AesCtrHmacAeadKey; +Lcom/google/crypto/tink/proto/AesCtrHmacAeadKeyFormat; +HSPLcom/google/crypto/tink/proto/AesCtrHmacAeadKeyFormat;->()V +HSPLcom/google/crypto/tink/proto/AesCtrHmacAeadKeyFormat;->()V +HSPLcom/google/crypto/tink/proto/AesCtrHmacAeadKeyFormat;->access$000()Lcom/google/crypto/tink/proto/AesCtrHmacAeadKeyFormat; +HSPLcom/google/crypto/tink/proto/AesCtrHmacAeadKeyFormat;->access$100(Lcom/google/crypto/tink/proto/AesCtrHmacAeadKeyFormat;Lcom/google/crypto/tink/proto/AesCtrKeyFormat;)V +HSPLcom/google/crypto/tink/proto/AesCtrHmacAeadKeyFormat;->access$400(Lcom/google/crypto/tink/proto/AesCtrHmacAeadKeyFormat;Lcom/google/crypto/tink/proto/HmacKeyFormat;)V +HSPLcom/google/crypto/tink/proto/AesCtrHmacAeadKeyFormat;->dynamicMethod(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$MethodToInvoke;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/proto/AesCtrHmacAeadKeyFormat;->newBuilder()Lcom/google/crypto/tink/proto/AesCtrHmacAeadKeyFormat$Builder; +HSPLcom/google/crypto/tink/proto/AesCtrHmacAeadKeyFormat;->setAesCtrKeyFormat(Lcom/google/crypto/tink/proto/AesCtrKeyFormat;)V +HSPLcom/google/crypto/tink/proto/AesCtrHmacAeadKeyFormat;->setHmacKeyFormat(Lcom/google/crypto/tink/proto/HmacKeyFormat;)V +Lcom/google/crypto/tink/proto/AesCtrHmacAeadKeyFormat$1; +HSPLcom/google/crypto/tink/proto/AesCtrHmacAeadKeyFormat$1;->()V +Lcom/google/crypto/tink/proto/AesCtrHmacAeadKeyFormat$Builder; +HSPLcom/google/crypto/tink/proto/AesCtrHmacAeadKeyFormat$Builder;->()V +HSPLcom/google/crypto/tink/proto/AesCtrHmacAeadKeyFormat$Builder;->(Lcom/google/crypto/tink/proto/AesCtrHmacAeadKeyFormat$1;)V +HSPLcom/google/crypto/tink/proto/AesCtrHmacAeadKeyFormat$Builder;->setAesCtrKeyFormat(Lcom/google/crypto/tink/proto/AesCtrKeyFormat;)Lcom/google/crypto/tink/proto/AesCtrHmacAeadKeyFormat$Builder; +HSPLcom/google/crypto/tink/proto/AesCtrHmacAeadKeyFormat$Builder;->setHmacKeyFormat(Lcom/google/crypto/tink/proto/HmacKeyFormat;)Lcom/google/crypto/tink/proto/AesCtrHmacAeadKeyFormat$Builder; +Lcom/google/crypto/tink/proto/AesCtrHmacAeadKeyFormatOrBuilder; +Lcom/google/crypto/tink/proto/AesCtrHmacAeadKeyOrBuilder; +Lcom/google/crypto/tink/proto/AesCtrKeyFormat; +HSPLcom/google/crypto/tink/proto/AesCtrKeyFormat;->()V +HSPLcom/google/crypto/tink/proto/AesCtrKeyFormat;->()V +HSPLcom/google/crypto/tink/proto/AesCtrKeyFormat;->access$000()Lcom/google/crypto/tink/proto/AesCtrKeyFormat; +HSPLcom/google/crypto/tink/proto/AesCtrKeyFormat;->access$100(Lcom/google/crypto/tink/proto/AesCtrKeyFormat;Lcom/google/crypto/tink/proto/AesCtrParams;)V +HSPLcom/google/crypto/tink/proto/AesCtrKeyFormat;->access$400(Lcom/google/crypto/tink/proto/AesCtrKeyFormat;I)V +HSPLcom/google/crypto/tink/proto/AesCtrKeyFormat;->dynamicMethod(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$MethodToInvoke;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/proto/AesCtrKeyFormat;->newBuilder()Lcom/google/crypto/tink/proto/AesCtrKeyFormat$Builder; +HSPLcom/google/crypto/tink/proto/AesCtrKeyFormat;->setKeySize(I)V +HSPLcom/google/crypto/tink/proto/AesCtrKeyFormat;->setParams(Lcom/google/crypto/tink/proto/AesCtrParams;)V +Lcom/google/crypto/tink/proto/AesCtrKeyFormat$1; +HSPLcom/google/crypto/tink/proto/AesCtrKeyFormat$1;->()V +Lcom/google/crypto/tink/proto/AesCtrKeyFormat$Builder; +HSPLcom/google/crypto/tink/proto/AesCtrKeyFormat$Builder;->()V +HSPLcom/google/crypto/tink/proto/AesCtrKeyFormat$Builder;->(Lcom/google/crypto/tink/proto/AesCtrKeyFormat$1;)V +HSPLcom/google/crypto/tink/proto/AesCtrKeyFormat$Builder;->setKeySize(I)Lcom/google/crypto/tink/proto/AesCtrKeyFormat$Builder; +HSPLcom/google/crypto/tink/proto/AesCtrKeyFormat$Builder;->setParams(Lcom/google/crypto/tink/proto/AesCtrParams;)Lcom/google/crypto/tink/proto/AesCtrKeyFormat$Builder; +Lcom/google/crypto/tink/proto/AesCtrKeyFormatOrBuilder; +Lcom/google/crypto/tink/proto/AesCtrParams; +HSPLcom/google/crypto/tink/proto/AesCtrParams;->()V +HSPLcom/google/crypto/tink/proto/AesCtrParams;->()V +HSPLcom/google/crypto/tink/proto/AesCtrParams;->access$000()Lcom/google/crypto/tink/proto/AesCtrParams; +HSPLcom/google/crypto/tink/proto/AesCtrParams;->access$100(Lcom/google/crypto/tink/proto/AesCtrParams;I)V +HSPLcom/google/crypto/tink/proto/AesCtrParams;->dynamicMethod(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$MethodToInvoke;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/proto/AesCtrParams;->newBuilder()Lcom/google/crypto/tink/proto/AesCtrParams$Builder; +HSPLcom/google/crypto/tink/proto/AesCtrParams;->setIvSize(I)V +Lcom/google/crypto/tink/proto/AesCtrParams$1; +HSPLcom/google/crypto/tink/proto/AesCtrParams$1;->()V +Lcom/google/crypto/tink/proto/AesCtrParams$Builder; +HSPLcom/google/crypto/tink/proto/AesCtrParams$Builder;->()V +HSPLcom/google/crypto/tink/proto/AesCtrParams$Builder;->(Lcom/google/crypto/tink/proto/AesCtrParams$1;)V +HSPLcom/google/crypto/tink/proto/AesCtrParams$Builder;->setIvSize(I)Lcom/google/crypto/tink/proto/AesCtrParams$Builder; +Lcom/google/crypto/tink/proto/AesCtrParamsOrBuilder; +Lcom/google/crypto/tink/proto/AesEaxKey; +Lcom/google/crypto/tink/proto/AesEaxKeyFormat; +HSPLcom/google/crypto/tink/proto/AesEaxKeyFormat;->()V +HSPLcom/google/crypto/tink/proto/AesEaxKeyFormat;->()V +HSPLcom/google/crypto/tink/proto/AesEaxKeyFormat;->access$000()Lcom/google/crypto/tink/proto/AesEaxKeyFormat; +HSPLcom/google/crypto/tink/proto/AesEaxKeyFormat;->access$100(Lcom/google/crypto/tink/proto/AesEaxKeyFormat;Lcom/google/crypto/tink/proto/AesEaxParams;)V +HSPLcom/google/crypto/tink/proto/AesEaxKeyFormat;->access$400(Lcom/google/crypto/tink/proto/AesEaxKeyFormat;I)V +HSPLcom/google/crypto/tink/proto/AesEaxKeyFormat;->dynamicMethod(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$MethodToInvoke;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/proto/AesEaxKeyFormat;->newBuilder()Lcom/google/crypto/tink/proto/AesEaxKeyFormat$Builder; +HSPLcom/google/crypto/tink/proto/AesEaxKeyFormat;->setKeySize(I)V +HSPLcom/google/crypto/tink/proto/AesEaxKeyFormat;->setParams(Lcom/google/crypto/tink/proto/AesEaxParams;)V +Lcom/google/crypto/tink/proto/AesEaxKeyFormat$1; +HSPLcom/google/crypto/tink/proto/AesEaxKeyFormat$1;->()V +Lcom/google/crypto/tink/proto/AesEaxKeyFormat$Builder; +HSPLcom/google/crypto/tink/proto/AesEaxKeyFormat$Builder;->()V +HSPLcom/google/crypto/tink/proto/AesEaxKeyFormat$Builder;->(Lcom/google/crypto/tink/proto/AesEaxKeyFormat$1;)V +HSPLcom/google/crypto/tink/proto/AesEaxKeyFormat$Builder;->setKeySize(I)Lcom/google/crypto/tink/proto/AesEaxKeyFormat$Builder; +HSPLcom/google/crypto/tink/proto/AesEaxKeyFormat$Builder;->setParams(Lcom/google/crypto/tink/proto/AesEaxParams;)Lcom/google/crypto/tink/proto/AesEaxKeyFormat$Builder; +Lcom/google/crypto/tink/proto/AesEaxKeyFormatOrBuilder; +Lcom/google/crypto/tink/proto/AesEaxKeyOrBuilder; +Lcom/google/crypto/tink/proto/AesEaxParams; +HSPLcom/google/crypto/tink/proto/AesEaxParams;->()V +HSPLcom/google/crypto/tink/proto/AesEaxParams;->()V +HSPLcom/google/crypto/tink/proto/AesEaxParams;->access$000()Lcom/google/crypto/tink/proto/AesEaxParams; +HSPLcom/google/crypto/tink/proto/AesEaxParams;->access$100(Lcom/google/crypto/tink/proto/AesEaxParams;I)V +HSPLcom/google/crypto/tink/proto/AesEaxParams;->dynamicMethod(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$MethodToInvoke;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/proto/AesEaxParams;->newBuilder()Lcom/google/crypto/tink/proto/AesEaxParams$Builder; +HSPLcom/google/crypto/tink/proto/AesEaxParams;->setIvSize(I)V +Lcom/google/crypto/tink/proto/AesEaxParams$1; +HSPLcom/google/crypto/tink/proto/AesEaxParams$1;->()V +Lcom/google/crypto/tink/proto/AesEaxParams$Builder; +HSPLcom/google/crypto/tink/proto/AesEaxParams$Builder;->()V +HSPLcom/google/crypto/tink/proto/AesEaxParams$Builder;->(Lcom/google/crypto/tink/proto/AesEaxParams$1;)V +HSPLcom/google/crypto/tink/proto/AesEaxParams$Builder;->setIvSize(I)Lcom/google/crypto/tink/proto/AesEaxParams$Builder; +Lcom/google/crypto/tink/proto/AesEaxParamsOrBuilder; +Lcom/google/crypto/tink/proto/AesGcmKey; +HSPLcom/google/crypto/tink/proto/AesGcmKey;->()V +HSPLcom/google/crypto/tink/proto/AesGcmKey;->()V +HSPLcom/google/crypto/tink/proto/AesGcmKey;->access$000()Lcom/google/crypto/tink/proto/AesGcmKey; +HSPLcom/google/crypto/tink/proto/AesGcmKey;->access$100(Lcom/google/crypto/tink/proto/AesGcmKey;I)V +HSPLcom/google/crypto/tink/proto/AesGcmKey;->access$300(Lcom/google/crypto/tink/proto/AesGcmKey;Lcom/google/crypto/tink/shaded/protobuf/ByteString;)V +HSPLcom/google/crypto/tink/proto/AesGcmKey;->dynamicMethod(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$MethodToInvoke;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/proto/AesGcmKey;->getKeyValue()Lcom/google/crypto/tink/shaded/protobuf/ByteString; +HSPLcom/google/crypto/tink/proto/AesGcmKey;->getVersion()I +HSPLcom/google/crypto/tink/proto/AesGcmKey;->newBuilder()Lcom/google/crypto/tink/proto/AesGcmKey$Builder; +HSPLcom/google/crypto/tink/proto/AesGcmKey;->parseFrom(Lcom/google/crypto/tink/shaded/protobuf/ByteString;Lcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryLite;)Lcom/google/crypto/tink/proto/AesGcmKey; +HSPLcom/google/crypto/tink/proto/AesGcmKey;->setKeyValue(Lcom/google/crypto/tink/shaded/protobuf/ByteString;)V +HSPLcom/google/crypto/tink/proto/AesGcmKey;->setVersion(I)V +Lcom/google/crypto/tink/proto/AesGcmKey$1; +HSPLcom/google/crypto/tink/proto/AesGcmKey$1;->()V +Lcom/google/crypto/tink/proto/AesGcmKey$Builder; +HSPLcom/google/crypto/tink/proto/AesGcmKey$Builder;->()V +HSPLcom/google/crypto/tink/proto/AesGcmKey$Builder;->(Lcom/google/crypto/tink/proto/AesGcmKey$1;)V +HSPLcom/google/crypto/tink/proto/AesGcmKey$Builder;->setKeyValue(Lcom/google/crypto/tink/shaded/protobuf/ByteString;)Lcom/google/crypto/tink/proto/AesGcmKey$Builder; +HSPLcom/google/crypto/tink/proto/AesGcmKey$Builder;->setVersion(I)Lcom/google/crypto/tink/proto/AesGcmKey$Builder; +Lcom/google/crypto/tink/proto/AesGcmKeyFormat; +HSPLcom/google/crypto/tink/proto/AesGcmKeyFormat;->()V +HSPLcom/google/crypto/tink/proto/AesGcmKeyFormat;->()V +HSPLcom/google/crypto/tink/proto/AesGcmKeyFormat;->access$000()Lcom/google/crypto/tink/proto/AesGcmKeyFormat; +HSPLcom/google/crypto/tink/proto/AesGcmKeyFormat;->access$100(Lcom/google/crypto/tink/proto/AesGcmKeyFormat;I)V +HSPLcom/google/crypto/tink/proto/AesGcmKeyFormat;->dynamicMethod(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$MethodToInvoke;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/proto/AesGcmKeyFormat;->getKeySize()I +HSPLcom/google/crypto/tink/proto/AesGcmKeyFormat;->newBuilder()Lcom/google/crypto/tink/proto/AesGcmKeyFormat$Builder; +HSPLcom/google/crypto/tink/proto/AesGcmKeyFormat;->parseFrom(Lcom/google/crypto/tink/shaded/protobuf/ByteString;Lcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryLite;)Lcom/google/crypto/tink/proto/AesGcmKeyFormat; +HSPLcom/google/crypto/tink/proto/AesGcmKeyFormat;->setKeySize(I)V +Lcom/google/crypto/tink/proto/AesGcmKeyFormat$1; +HSPLcom/google/crypto/tink/proto/AesGcmKeyFormat$1;->()V +Lcom/google/crypto/tink/proto/AesGcmKeyFormat$Builder; +HSPLcom/google/crypto/tink/proto/AesGcmKeyFormat$Builder;->()V +HSPLcom/google/crypto/tink/proto/AesGcmKeyFormat$Builder;->(Lcom/google/crypto/tink/proto/AesGcmKeyFormat$1;)V +HSPLcom/google/crypto/tink/proto/AesGcmKeyFormat$Builder;->setKeySize(I)Lcom/google/crypto/tink/proto/AesGcmKeyFormat$Builder; +Lcom/google/crypto/tink/proto/AesGcmKeyFormatOrBuilder; +Lcom/google/crypto/tink/proto/AesGcmKeyOrBuilder; +Lcom/google/crypto/tink/proto/AesGcmSivKey; +Lcom/google/crypto/tink/proto/AesGcmSivKeyFormat; +HSPLcom/google/crypto/tink/proto/AesGcmSivKeyFormat;->()V +HSPLcom/google/crypto/tink/proto/AesGcmSivKeyFormat;->()V +HSPLcom/google/crypto/tink/proto/AesGcmSivKeyFormat;->access$000()Lcom/google/crypto/tink/proto/AesGcmSivKeyFormat; +HSPLcom/google/crypto/tink/proto/AesGcmSivKeyFormat;->access$100(Lcom/google/crypto/tink/proto/AesGcmSivKeyFormat;I)V +HSPLcom/google/crypto/tink/proto/AesGcmSivKeyFormat;->dynamicMethod(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$MethodToInvoke;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/proto/AesGcmSivKeyFormat;->newBuilder()Lcom/google/crypto/tink/proto/AesGcmSivKeyFormat$Builder; +HSPLcom/google/crypto/tink/proto/AesGcmSivKeyFormat;->setKeySize(I)V +Lcom/google/crypto/tink/proto/AesGcmSivKeyFormat$1; +HSPLcom/google/crypto/tink/proto/AesGcmSivKeyFormat$1;->()V +Lcom/google/crypto/tink/proto/AesGcmSivKeyFormat$Builder; +HSPLcom/google/crypto/tink/proto/AesGcmSivKeyFormat$Builder;->()V +HSPLcom/google/crypto/tink/proto/AesGcmSivKeyFormat$Builder;->(Lcom/google/crypto/tink/proto/AesGcmSivKeyFormat$1;)V +HSPLcom/google/crypto/tink/proto/AesGcmSivKeyFormat$Builder;->setKeySize(I)Lcom/google/crypto/tink/proto/AesGcmSivKeyFormat$Builder; +Lcom/google/crypto/tink/proto/AesGcmSivKeyFormatOrBuilder; +Lcom/google/crypto/tink/proto/AesGcmSivKeyOrBuilder; +Lcom/google/crypto/tink/proto/AesSivKey; +HSPLcom/google/crypto/tink/proto/AesSivKey;->()V +HSPLcom/google/crypto/tink/proto/AesSivKey;->()V +HSPLcom/google/crypto/tink/proto/AesSivKey;->access$000()Lcom/google/crypto/tink/proto/AesSivKey; +HSPLcom/google/crypto/tink/proto/AesSivKey;->access$100(Lcom/google/crypto/tink/proto/AesSivKey;I)V +HSPLcom/google/crypto/tink/proto/AesSivKey;->access$300(Lcom/google/crypto/tink/proto/AesSivKey;Lcom/google/crypto/tink/shaded/protobuf/ByteString;)V +HSPLcom/google/crypto/tink/proto/AesSivKey;->dynamicMethod(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$MethodToInvoke;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/proto/AesSivKey;->getKeyValue()Lcom/google/crypto/tink/shaded/protobuf/ByteString; +HSPLcom/google/crypto/tink/proto/AesSivKey;->getVersion()I +HSPLcom/google/crypto/tink/proto/AesSivKey;->newBuilder()Lcom/google/crypto/tink/proto/AesSivKey$Builder; +HSPLcom/google/crypto/tink/proto/AesSivKey;->parseFrom(Lcom/google/crypto/tink/shaded/protobuf/ByteString;Lcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryLite;)Lcom/google/crypto/tink/proto/AesSivKey; +HSPLcom/google/crypto/tink/proto/AesSivKey;->setKeyValue(Lcom/google/crypto/tink/shaded/protobuf/ByteString;)V +HSPLcom/google/crypto/tink/proto/AesSivKey;->setVersion(I)V +Lcom/google/crypto/tink/proto/AesSivKey$1; +HSPLcom/google/crypto/tink/proto/AesSivKey$1;->()V +Lcom/google/crypto/tink/proto/AesSivKey$Builder; +HSPLcom/google/crypto/tink/proto/AesSivKey$Builder;->()V +HSPLcom/google/crypto/tink/proto/AesSivKey$Builder;->(Lcom/google/crypto/tink/proto/AesSivKey$1;)V +HSPLcom/google/crypto/tink/proto/AesSivKey$Builder;->setKeyValue(Lcom/google/crypto/tink/shaded/protobuf/ByteString;)Lcom/google/crypto/tink/proto/AesSivKey$Builder; +HSPLcom/google/crypto/tink/proto/AesSivKey$Builder;->setVersion(I)Lcom/google/crypto/tink/proto/AesSivKey$Builder; +Lcom/google/crypto/tink/proto/AesSivKeyFormat; +HSPLcom/google/crypto/tink/proto/AesSivKeyFormat;->()V +HSPLcom/google/crypto/tink/proto/AesSivKeyFormat;->()V +HSPLcom/google/crypto/tink/proto/AesSivKeyFormat;->access$000()Lcom/google/crypto/tink/proto/AesSivKeyFormat; +HSPLcom/google/crypto/tink/proto/AesSivKeyFormat;->access$100(Lcom/google/crypto/tink/proto/AesSivKeyFormat;I)V +HSPLcom/google/crypto/tink/proto/AesSivKeyFormat;->dynamicMethod(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$MethodToInvoke;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/proto/AesSivKeyFormat;->getKeySize()I +HSPLcom/google/crypto/tink/proto/AesSivKeyFormat;->newBuilder()Lcom/google/crypto/tink/proto/AesSivKeyFormat$Builder; +HSPLcom/google/crypto/tink/proto/AesSivKeyFormat;->parseFrom(Lcom/google/crypto/tink/shaded/protobuf/ByteString;Lcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryLite;)Lcom/google/crypto/tink/proto/AesSivKeyFormat; +HSPLcom/google/crypto/tink/proto/AesSivKeyFormat;->setKeySize(I)V +Lcom/google/crypto/tink/proto/AesSivKeyFormat$1; +HSPLcom/google/crypto/tink/proto/AesSivKeyFormat$1;->()V +Lcom/google/crypto/tink/proto/AesSivKeyFormat$Builder; +HSPLcom/google/crypto/tink/proto/AesSivKeyFormat$Builder;->()V +HSPLcom/google/crypto/tink/proto/AesSivKeyFormat$Builder;->(Lcom/google/crypto/tink/proto/AesSivKeyFormat$1;)V +HSPLcom/google/crypto/tink/proto/AesSivKeyFormat$Builder;->setKeySize(I)Lcom/google/crypto/tink/proto/AesSivKeyFormat$Builder; +Lcom/google/crypto/tink/proto/AesSivKeyFormatOrBuilder; +Lcom/google/crypto/tink/proto/AesSivKeyOrBuilder; +Lcom/google/crypto/tink/proto/ChaCha20Poly1305Key; +Lcom/google/crypto/tink/proto/ChaCha20Poly1305KeyFormat; +HSPLcom/google/crypto/tink/proto/ChaCha20Poly1305KeyFormat;->()V +HSPLcom/google/crypto/tink/proto/ChaCha20Poly1305KeyFormat;->()V +HSPLcom/google/crypto/tink/proto/ChaCha20Poly1305KeyFormat;->dynamicMethod(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$MethodToInvoke;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/proto/ChaCha20Poly1305KeyFormat;->getDefaultInstance()Lcom/google/crypto/tink/proto/ChaCha20Poly1305KeyFormat; +Lcom/google/crypto/tink/proto/ChaCha20Poly1305KeyFormat$1; +HSPLcom/google/crypto/tink/proto/ChaCha20Poly1305KeyFormat$1;->()V +Lcom/google/crypto/tink/proto/ChaCha20Poly1305KeyFormatOrBuilder; +Lcom/google/crypto/tink/proto/ChaCha20Poly1305KeyOrBuilder; +Lcom/google/crypto/tink/proto/EncryptedKeyset; +HSPLcom/google/crypto/tink/proto/EncryptedKeyset;->()V +HSPLcom/google/crypto/tink/proto/EncryptedKeyset;->()V +HSPLcom/google/crypto/tink/proto/EncryptedKeyset;->access$000()Lcom/google/crypto/tink/proto/EncryptedKeyset; +HSPLcom/google/crypto/tink/proto/EncryptedKeyset;->access$100(Lcom/google/crypto/tink/proto/EncryptedKeyset;Lcom/google/crypto/tink/shaded/protobuf/ByteString;)V +HSPLcom/google/crypto/tink/proto/EncryptedKeyset;->access$300(Lcom/google/crypto/tink/proto/EncryptedKeyset;Lcom/google/crypto/tink/proto/KeysetInfo;)V +HSPLcom/google/crypto/tink/proto/EncryptedKeyset;->dynamicMethod(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$MethodToInvoke;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/proto/EncryptedKeyset;->getEncryptedKeyset()Lcom/google/crypto/tink/shaded/protobuf/ByteString; +HSPLcom/google/crypto/tink/proto/EncryptedKeyset;->newBuilder()Lcom/google/crypto/tink/proto/EncryptedKeyset$Builder; +HSPLcom/google/crypto/tink/proto/EncryptedKeyset;->parseFrom(Ljava/io/InputStream;Lcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryLite;)Lcom/google/crypto/tink/proto/EncryptedKeyset; +HSPLcom/google/crypto/tink/proto/EncryptedKeyset;->setEncryptedKeyset(Lcom/google/crypto/tink/shaded/protobuf/ByteString;)V +HSPLcom/google/crypto/tink/proto/EncryptedKeyset;->setKeysetInfo(Lcom/google/crypto/tink/proto/KeysetInfo;)V +Lcom/google/crypto/tink/proto/EncryptedKeyset$1; +HSPLcom/google/crypto/tink/proto/EncryptedKeyset$1;->()V +Lcom/google/crypto/tink/proto/EncryptedKeyset$Builder; +HSPLcom/google/crypto/tink/proto/EncryptedKeyset$Builder;->()V +HSPLcom/google/crypto/tink/proto/EncryptedKeyset$Builder;->(Lcom/google/crypto/tink/proto/EncryptedKeyset$1;)V +HSPLcom/google/crypto/tink/proto/EncryptedKeyset$Builder;->setEncryptedKeyset(Lcom/google/crypto/tink/shaded/protobuf/ByteString;)Lcom/google/crypto/tink/proto/EncryptedKeyset$Builder; +HSPLcom/google/crypto/tink/proto/EncryptedKeyset$Builder;->setKeysetInfo(Lcom/google/crypto/tink/proto/KeysetInfo;)Lcom/google/crypto/tink/proto/EncryptedKeyset$Builder; +Lcom/google/crypto/tink/proto/EncryptedKeysetOrBuilder; +Lcom/google/crypto/tink/proto/HashType; +HSPLcom/google/crypto/tink/proto/HashType;->()V +HSPLcom/google/crypto/tink/proto/HashType;->(Ljava/lang/String;II)V +HSPLcom/google/crypto/tink/proto/HashType;->getNumber()I +Lcom/google/crypto/tink/proto/HashType$1; +HSPLcom/google/crypto/tink/proto/HashType$1;->()V +Lcom/google/crypto/tink/proto/HmacKey; +Lcom/google/crypto/tink/proto/HmacKeyFormat; +HSPLcom/google/crypto/tink/proto/HmacKeyFormat;->()V +HSPLcom/google/crypto/tink/proto/HmacKeyFormat;->()V +HSPLcom/google/crypto/tink/proto/HmacKeyFormat;->access$000()Lcom/google/crypto/tink/proto/HmacKeyFormat; +HSPLcom/google/crypto/tink/proto/HmacKeyFormat;->access$100(Lcom/google/crypto/tink/proto/HmacKeyFormat;Lcom/google/crypto/tink/proto/HmacParams;)V +HSPLcom/google/crypto/tink/proto/HmacKeyFormat;->access$400(Lcom/google/crypto/tink/proto/HmacKeyFormat;I)V +HSPLcom/google/crypto/tink/proto/HmacKeyFormat;->dynamicMethod(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$MethodToInvoke;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/proto/HmacKeyFormat;->newBuilder()Lcom/google/crypto/tink/proto/HmacKeyFormat$Builder; +HSPLcom/google/crypto/tink/proto/HmacKeyFormat;->setKeySize(I)V +HSPLcom/google/crypto/tink/proto/HmacKeyFormat;->setParams(Lcom/google/crypto/tink/proto/HmacParams;)V +Lcom/google/crypto/tink/proto/HmacKeyFormat$1; +HSPLcom/google/crypto/tink/proto/HmacKeyFormat$1;->()V +Lcom/google/crypto/tink/proto/HmacKeyFormat$Builder; +HSPLcom/google/crypto/tink/proto/HmacKeyFormat$Builder;->()V +HSPLcom/google/crypto/tink/proto/HmacKeyFormat$Builder;->(Lcom/google/crypto/tink/proto/HmacKeyFormat$1;)V +HSPLcom/google/crypto/tink/proto/HmacKeyFormat$Builder;->setKeySize(I)Lcom/google/crypto/tink/proto/HmacKeyFormat$Builder; +HSPLcom/google/crypto/tink/proto/HmacKeyFormat$Builder;->setParams(Lcom/google/crypto/tink/proto/HmacParams;)Lcom/google/crypto/tink/proto/HmacKeyFormat$Builder; +Lcom/google/crypto/tink/proto/HmacKeyFormatOrBuilder; +Lcom/google/crypto/tink/proto/HmacKeyOrBuilder; +Lcom/google/crypto/tink/proto/HmacParams; +HSPLcom/google/crypto/tink/proto/HmacParams;->()V +HSPLcom/google/crypto/tink/proto/HmacParams;->()V +HSPLcom/google/crypto/tink/proto/HmacParams;->access$000()Lcom/google/crypto/tink/proto/HmacParams; +HSPLcom/google/crypto/tink/proto/HmacParams;->access$200(Lcom/google/crypto/tink/proto/HmacParams;Lcom/google/crypto/tink/proto/HashType;)V +HSPLcom/google/crypto/tink/proto/HmacParams;->access$400(Lcom/google/crypto/tink/proto/HmacParams;I)V +HSPLcom/google/crypto/tink/proto/HmacParams;->dynamicMethod(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$MethodToInvoke;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/proto/HmacParams;->newBuilder()Lcom/google/crypto/tink/proto/HmacParams$Builder; +HSPLcom/google/crypto/tink/proto/HmacParams;->setHash(Lcom/google/crypto/tink/proto/HashType;)V +HSPLcom/google/crypto/tink/proto/HmacParams;->setTagSize(I)V +Lcom/google/crypto/tink/proto/HmacParams$1; +HSPLcom/google/crypto/tink/proto/HmacParams$1;->()V +Lcom/google/crypto/tink/proto/HmacParams$Builder; +HSPLcom/google/crypto/tink/proto/HmacParams$Builder;->()V +HSPLcom/google/crypto/tink/proto/HmacParams$Builder;->(Lcom/google/crypto/tink/proto/HmacParams$1;)V +HSPLcom/google/crypto/tink/proto/HmacParams$Builder;->setHash(Lcom/google/crypto/tink/proto/HashType;)Lcom/google/crypto/tink/proto/HmacParams$Builder; +HSPLcom/google/crypto/tink/proto/HmacParams$Builder;->setTagSize(I)Lcom/google/crypto/tink/proto/HmacParams$Builder; +Lcom/google/crypto/tink/proto/HmacParamsOrBuilder; +Lcom/google/crypto/tink/proto/KeyData; +HSPLcom/google/crypto/tink/proto/KeyData;->()V +HSPLcom/google/crypto/tink/proto/KeyData;->()V +HSPLcom/google/crypto/tink/proto/KeyData;->access$000()Lcom/google/crypto/tink/proto/KeyData; +HSPLcom/google/crypto/tink/proto/KeyData;->access$100(Lcom/google/crypto/tink/proto/KeyData;Ljava/lang/String;)V +HSPLcom/google/crypto/tink/proto/KeyData;->access$400(Lcom/google/crypto/tink/proto/KeyData;Lcom/google/crypto/tink/shaded/protobuf/ByteString;)V +HSPLcom/google/crypto/tink/proto/KeyData;->access$700(Lcom/google/crypto/tink/proto/KeyData;Lcom/google/crypto/tink/proto/KeyData$KeyMaterialType;)V +HSPLcom/google/crypto/tink/proto/KeyData;->dynamicMethod(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$MethodToInvoke;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/proto/KeyData;->getKeyMaterialType()Lcom/google/crypto/tink/proto/KeyData$KeyMaterialType; +HSPLcom/google/crypto/tink/proto/KeyData;->getTypeUrl()Ljava/lang/String; +HSPLcom/google/crypto/tink/proto/KeyData;->getValue()Lcom/google/crypto/tink/shaded/protobuf/ByteString; +HSPLcom/google/crypto/tink/proto/KeyData;->newBuilder()Lcom/google/crypto/tink/proto/KeyData$Builder; +HSPLcom/google/crypto/tink/proto/KeyData;->setKeyMaterialType(Lcom/google/crypto/tink/proto/KeyData$KeyMaterialType;)V +HSPLcom/google/crypto/tink/proto/KeyData;->setTypeUrl(Ljava/lang/String;)V +HSPLcom/google/crypto/tink/proto/KeyData;->setValue(Lcom/google/crypto/tink/shaded/protobuf/ByteString;)V +Lcom/google/crypto/tink/proto/KeyData$1; +HSPLcom/google/crypto/tink/proto/KeyData$1;->()V +Lcom/google/crypto/tink/proto/KeyData$Builder; +HSPLcom/google/crypto/tink/proto/KeyData$Builder;->()V +HSPLcom/google/crypto/tink/proto/KeyData$Builder;->(Lcom/google/crypto/tink/proto/KeyData$1;)V +HSPLcom/google/crypto/tink/proto/KeyData$Builder;->setKeyMaterialType(Lcom/google/crypto/tink/proto/KeyData$KeyMaterialType;)Lcom/google/crypto/tink/proto/KeyData$Builder; +HSPLcom/google/crypto/tink/proto/KeyData$Builder;->setTypeUrl(Ljava/lang/String;)Lcom/google/crypto/tink/proto/KeyData$Builder; +HSPLcom/google/crypto/tink/proto/KeyData$Builder;->setValue(Lcom/google/crypto/tink/shaded/protobuf/ByteString;)Lcom/google/crypto/tink/proto/KeyData$Builder; +Lcom/google/crypto/tink/proto/KeyData$KeyMaterialType; +HSPLcom/google/crypto/tink/proto/KeyData$KeyMaterialType;->()V +HSPLcom/google/crypto/tink/proto/KeyData$KeyMaterialType;->(Ljava/lang/String;II)V +HSPLcom/google/crypto/tink/proto/KeyData$KeyMaterialType;->forNumber(I)Lcom/google/crypto/tink/proto/KeyData$KeyMaterialType; +HSPLcom/google/crypto/tink/proto/KeyData$KeyMaterialType;->getNumber()I +HSPLcom/google/crypto/tink/proto/KeyData$KeyMaterialType;->values()[Lcom/google/crypto/tink/proto/KeyData$KeyMaterialType; +Lcom/google/crypto/tink/proto/KeyData$KeyMaterialType$1; +HSPLcom/google/crypto/tink/proto/KeyData$KeyMaterialType$1;->()V +Lcom/google/crypto/tink/proto/KeyDataOrBuilder; +Lcom/google/crypto/tink/proto/KeyStatusType; +HSPLcom/google/crypto/tink/proto/KeyStatusType;->()V +HSPLcom/google/crypto/tink/proto/KeyStatusType;->(Ljava/lang/String;II)V +HSPLcom/google/crypto/tink/proto/KeyStatusType;->forNumber(I)Lcom/google/crypto/tink/proto/KeyStatusType; +HSPLcom/google/crypto/tink/proto/KeyStatusType;->getNumber()I +HSPLcom/google/crypto/tink/proto/KeyStatusType;->values()[Lcom/google/crypto/tink/proto/KeyStatusType; +Lcom/google/crypto/tink/proto/KeyStatusType$1; +HSPLcom/google/crypto/tink/proto/KeyStatusType$1;->()V +Lcom/google/crypto/tink/proto/KeyTemplate; +HSPLcom/google/crypto/tink/proto/KeyTemplate;->()V +HSPLcom/google/crypto/tink/proto/KeyTemplate;->()V +HSPLcom/google/crypto/tink/proto/KeyTemplate;->access$000()Lcom/google/crypto/tink/proto/KeyTemplate; +HSPLcom/google/crypto/tink/proto/KeyTemplate;->access$100(Lcom/google/crypto/tink/proto/KeyTemplate;Ljava/lang/String;)V +HSPLcom/google/crypto/tink/proto/KeyTemplate;->access$400(Lcom/google/crypto/tink/proto/KeyTemplate;Lcom/google/crypto/tink/shaded/protobuf/ByteString;)V +HSPLcom/google/crypto/tink/proto/KeyTemplate;->access$700(Lcom/google/crypto/tink/proto/KeyTemplate;Lcom/google/crypto/tink/proto/OutputPrefixType;)V +HSPLcom/google/crypto/tink/proto/KeyTemplate;->dynamicMethod(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$MethodToInvoke;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/proto/KeyTemplate;->getOutputPrefixType()Lcom/google/crypto/tink/proto/OutputPrefixType; +HSPLcom/google/crypto/tink/proto/KeyTemplate;->getTypeUrl()Ljava/lang/String; +HSPLcom/google/crypto/tink/proto/KeyTemplate;->getValue()Lcom/google/crypto/tink/shaded/protobuf/ByteString; +HSPLcom/google/crypto/tink/proto/KeyTemplate;->newBuilder()Lcom/google/crypto/tink/proto/KeyTemplate$Builder; +HSPLcom/google/crypto/tink/proto/KeyTemplate;->setOutputPrefixType(Lcom/google/crypto/tink/proto/OutputPrefixType;)V +HSPLcom/google/crypto/tink/proto/KeyTemplate;->setTypeUrl(Ljava/lang/String;)V +HSPLcom/google/crypto/tink/proto/KeyTemplate;->setValue(Lcom/google/crypto/tink/shaded/protobuf/ByteString;)V +Lcom/google/crypto/tink/proto/KeyTemplate$1; +HSPLcom/google/crypto/tink/proto/KeyTemplate$1;->()V +Lcom/google/crypto/tink/proto/KeyTemplate$Builder; +HSPLcom/google/crypto/tink/proto/KeyTemplate$Builder;->()V +HSPLcom/google/crypto/tink/proto/KeyTemplate$Builder;->(Lcom/google/crypto/tink/proto/KeyTemplate$1;)V +HSPLcom/google/crypto/tink/proto/KeyTemplate$Builder;->setOutputPrefixType(Lcom/google/crypto/tink/proto/OutputPrefixType;)Lcom/google/crypto/tink/proto/KeyTemplate$Builder; +HSPLcom/google/crypto/tink/proto/KeyTemplate$Builder;->setTypeUrl(Ljava/lang/String;)Lcom/google/crypto/tink/proto/KeyTemplate$Builder; +HSPLcom/google/crypto/tink/proto/KeyTemplate$Builder;->setValue(Lcom/google/crypto/tink/shaded/protobuf/ByteString;)Lcom/google/crypto/tink/proto/KeyTemplate$Builder; +Lcom/google/crypto/tink/proto/KeyTemplateOrBuilder; +Lcom/google/crypto/tink/proto/Keyset; +HSPLcom/google/crypto/tink/proto/Keyset;->()V +HSPLcom/google/crypto/tink/proto/Keyset;->()V +HSPLcom/google/crypto/tink/proto/Keyset;->access$1300()Lcom/google/crypto/tink/proto/Keyset; +HSPLcom/google/crypto/tink/proto/Keyset;->access$1400(Lcom/google/crypto/tink/proto/Keyset;I)V +HSPLcom/google/crypto/tink/proto/Keyset;->access$1700(Lcom/google/crypto/tink/proto/Keyset;Lcom/google/crypto/tink/proto/Keyset$Key;)V +HSPLcom/google/crypto/tink/proto/Keyset;->addKey(Lcom/google/crypto/tink/proto/Keyset$Key;)V +HSPLcom/google/crypto/tink/proto/Keyset;->dynamicMethod(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$MethodToInvoke;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/proto/Keyset;->ensureKeyIsMutable()V +HSPLcom/google/crypto/tink/proto/Keyset;->getKey(I)Lcom/google/crypto/tink/proto/Keyset$Key; +HSPLcom/google/crypto/tink/proto/Keyset;->getKeyCount()I +HSPLcom/google/crypto/tink/proto/Keyset;->getKeyList()Ljava/util/List; +HSPLcom/google/crypto/tink/proto/Keyset;->getPrimaryKeyId()I +HSPLcom/google/crypto/tink/proto/Keyset;->newBuilder()Lcom/google/crypto/tink/proto/Keyset$Builder; +HSPLcom/google/crypto/tink/proto/Keyset;->parseFrom([BLcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryLite;)Lcom/google/crypto/tink/proto/Keyset; +HSPLcom/google/crypto/tink/proto/Keyset;->setPrimaryKeyId(I)V +Lcom/google/crypto/tink/proto/Keyset$1; +HSPLcom/google/crypto/tink/proto/Keyset$1;->()V +Lcom/google/crypto/tink/proto/Keyset$Builder; +HSPLcom/google/crypto/tink/proto/Keyset$Builder;->()V +HSPLcom/google/crypto/tink/proto/Keyset$Builder;->(Lcom/google/crypto/tink/proto/Keyset$1;)V +HSPLcom/google/crypto/tink/proto/Keyset$Builder;->addKey(Lcom/google/crypto/tink/proto/Keyset$Key;)Lcom/google/crypto/tink/proto/Keyset$Builder; +HSPLcom/google/crypto/tink/proto/Keyset$Builder;->getKey(I)Lcom/google/crypto/tink/proto/Keyset$Key; +HSPLcom/google/crypto/tink/proto/Keyset$Builder;->getKeyCount()I +HSPLcom/google/crypto/tink/proto/Keyset$Builder;->getKeyList()Ljava/util/List; +HSPLcom/google/crypto/tink/proto/Keyset$Builder;->setPrimaryKeyId(I)Lcom/google/crypto/tink/proto/Keyset$Builder; +Lcom/google/crypto/tink/proto/Keyset$Key; +HSPLcom/google/crypto/tink/proto/Keyset$Key;->()V +HSPLcom/google/crypto/tink/proto/Keyset$Key;->()V +HSPLcom/google/crypto/tink/proto/Keyset$Key;->access$000()Lcom/google/crypto/tink/proto/Keyset$Key; +HSPLcom/google/crypto/tink/proto/Keyset$Key;->access$100(Lcom/google/crypto/tink/proto/Keyset$Key;Lcom/google/crypto/tink/proto/KeyData;)V +HSPLcom/google/crypto/tink/proto/Keyset$Key;->access$1000(Lcom/google/crypto/tink/proto/Keyset$Key;Lcom/google/crypto/tink/proto/OutputPrefixType;)V +HSPLcom/google/crypto/tink/proto/Keyset$Key;->access$500(Lcom/google/crypto/tink/proto/Keyset$Key;Lcom/google/crypto/tink/proto/KeyStatusType;)V +HSPLcom/google/crypto/tink/proto/Keyset$Key;->access$700(Lcom/google/crypto/tink/proto/Keyset$Key;I)V +HSPLcom/google/crypto/tink/proto/Keyset$Key;->dynamicMethod(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$MethodToInvoke;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/proto/Keyset$Key;->getKeyData()Lcom/google/crypto/tink/proto/KeyData; +HSPLcom/google/crypto/tink/proto/Keyset$Key;->getKeyId()I +HSPLcom/google/crypto/tink/proto/Keyset$Key;->getOutputPrefixType()Lcom/google/crypto/tink/proto/OutputPrefixType; +HSPLcom/google/crypto/tink/proto/Keyset$Key;->getStatus()Lcom/google/crypto/tink/proto/KeyStatusType; +HSPLcom/google/crypto/tink/proto/Keyset$Key;->hasKeyData()Z +HSPLcom/google/crypto/tink/proto/Keyset$Key;->newBuilder()Lcom/google/crypto/tink/proto/Keyset$Key$Builder; +HSPLcom/google/crypto/tink/proto/Keyset$Key;->setKeyData(Lcom/google/crypto/tink/proto/KeyData;)V +HSPLcom/google/crypto/tink/proto/Keyset$Key;->setKeyId(I)V +HSPLcom/google/crypto/tink/proto/Keyset$Key;->setOutputPrefixType(Lcom/google/crypto/tink/proto/OutputPrefixType;)V +HSPLcom/google/crypto/tink/proto/Keyset$Key;->setStatus(Lcom/google/crypto/tink/proto/KeyStatusType;)V +Lcom/google/crypto/tink/proto/Keyset$Key$Builder; +HSPLcom/google/crypto/tink/proto/Keyset$Key$Builder;->()V +HSPLcom/google/crypto/tink/proto/Keyset$Key$Builder;->(Lcom/google/crypto/tink/proto/Keyset$1;)V +HSPLcom/google/crypto/tink/proto/Keyset$Key$Builder;->setKeyData(Lcom/google/crypto/tink/proto/KeyData;)Lcom/google/crypto/tink/proto/Keyset$Key$Builder; +HSPLcom/google/crypto/tink/proto/Keyset$Key$Builder;->setKeyId(I)Lcom/google/crypto/tink/proto/Keyset$Key$Builder; +HSPLcom/google/crypto/tink/proto/Keyset$Key$Builder;->setOutputPrefixType(Lcom/google/crypto/tink/proto/OutputPrefixType;)Lcom/google/crypto/tink/proto/Keyset$Key$Builder; +HSPLcom/google/crypto/tink/proto/Keyset$Key$Builder;->setStatus(Lcom/google/crypto/tink/proto/KeyStatusType;)Lcom/google/crypto/tink/proto/Keyset$Key$Builder; +Lcom/google/crypto/tink/proto/Keyset$KeyOrBuilder; +Lcom/google/crypto/tink/proto/KeysetInfo; +HSPLcom/google/crypto/tink/proto/KeysetInfo;->()V +HSPLcom/google/crypto/tink/proto/KeysetInfo;->()V +HSPLcom/google/crypto/tink/proto/KeysetInfo;->access$1300()Lcom/google/crypto/tink/proto/KeysetInfo; +HSPLcom/google/crypto/tink/proto/KeysetInfo;->access$1400(Lcom/google/crypto/tink/proto/KeysetInfo;I)V +HSPLcom/google/crypto/tink/proto/KeysetInfo;->access$1700(Lcom/google/crypto/tink/proto/KeysetInfo;Lcom/google/crypto/tink/proto/KeysetInfo$KeyInfo;)V +HSPLcom/google/crypto/tink/proto/KeysetInfo;->addKeyInfo(Lcom/google/crypto/tink/proto/KeysetInfo$KeyInfo;)V +HSPLcom/google/crypto/tink/proto/KeysetInfo;->dynamicMethod(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$MethodToInvoke;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/proto/KeysetInfo;->ensureKeyInfoIsMutable()V +HSPLcom/google/crypto/tink/proto/KeysetInfo;->getKeyInfo(I)Lcom/google/crypto/tink/proto/KeysetInfo$KeyInfo; +HSPLcom/google/crypto/tink/proto/KeysetInfo;->newBuilder()Lcom/google/crypto/tink/proto/KeysetInfo$Builder; +HSPLcom/google/crypto/tink/proto/KeysetInfo;->setPrimaryKeyId(I)V +Lcom/google/crypto/tink/proto/KeysetInfo$1; +HSPLcom/google/crypto/tink/proto/KeysetInfo$1;->()V +Lcom/google/crypto/tink/proto/KeysetInfo$Builder; +HSPLcom/google/crypto/tink/proto/KeysetInfo$Builder;->()V +HSPLcom/google/crypto/tink/proto/KeysetInfo$Builder;->(Lcom/google/crypto/tink/proto/KeysetInfo$1;)V +HSPLcom/google/crypto/tink/proto/KeysetInfo$Builder;->addKeyInfo(Lcom/google/crypto/tink/proto/KeysetInfo$KeyInfo;)Lcom/google/crypto/tink/proto/KeysetInfo$Builder; +HSPLcom/google/crypto/tink/proto/KeysetInfo$Builder;->setPrimaryKeyId(I)Lcom/google/crypto/tink/proto/KeysetInfo$Builder; +Lcom/google/crypto/tink/proto/KeysetInfo$KeyInfo; +HSPLcom/google/crypto/tink/proto/KeysetInfo$KeyInfo;->()V +HSPLcom/google/crypto/tink/proto/KeysetInfo$KeyInfo;->()V +HSPLcom/google/crypto/tink/proto/KeysetInfo$KeyInfo;->access$000()Lcom/google/crypto/tink/proto/KeysetInfo$KeyInfo; +HSPLcom/google/crypto/tink/proto/KeysetInfo$KeyInfo;->access$100(Lcom/google/crypto/tink/proto/KeysetInfo$KeyInfo;Ljava/lang/String;)V +HSPLcom/google/crypto/tink/proto/KeysetInfo$KeyInfo;->access$1000(Lcom/google/crypto/tink/proto/KeysetInfo$KeyInfo;Lcom/google/crypto/tink/proto/OutputPrefixType;)V +HSPLcom/google/crypto/tink/proto/KeysetInfo$KeyInfo;->access$500(Lcom/google/crypto/tink/proto/KeysetInfo$KeyInfo;Lcom/google/crypto/tink/proto/KeyStatusType;)V +HSPLcom/google/crypto/tink/proto/KeysetInfo$KeyInfo;->access$700(Lcom/google/crypto/tink/proto/KeysetInfo$KeyInfo;I)V +HSPLcom/google/crypto/tink/proto/KeysetInfo$KeyInfo;->dynamicMethod(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$MethodToInvoke;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/proto/KeysetInfo$KeyInfo;->getKeyId()I +HSPLcom/google/crypto/tink/proto/KeysetInfo$KeyInfo;->newBuilder()Lcom/google/crypto/tink/proto/KeysetInfo$KeyInfo$Builder; +HSPLcom/google/crypto/tink/proto/KeysetInfo$KeyInfo;->setKeyId(I)V +HSPLcom/google/crypto/tink/proto/KeysetInfo$KeyInfo;->setOutputPrefixType(Lcom/google/crypto/tink/proto/OutputPrefixType;)V +HSPLcom/google/crypto/tink/proto/KeysetInfo$KeyInfo;->setStatus(Lcom/google/crypto/tink/proto/KeyStatusType;)V +HSPLcom/google/crypto/tink/proto/KeysetInfo$KeyInfo;->setTypeUrl(Ljava/lang/String;)V +Lcom/google/crypto/tink/proto/KeysetInfo$KeyInfo$Builder; +HSPLcom/google/crypto/tink/proto/KeysetInfo$KeyInfo$Builder;->()V +HSPLcom/google/crypto/tink/proto/KeysetInfo$KeyInfo$Builder;->(Lcom/google/crypto/tink/proto/KeysetInfo$1;)V +HSPLcom/google/crypto/tink/proto/KeysetInfo$KeyInfo$Builder;->setKeyId(I)Lcom/google/crypto/tink/proto/KeysetInfo$KeyInfo$Builder; +HSPLcom/google/crypto/tink/proto/KeysetInfo$KeyInfo$Builder;->setOutputPrefixType(Lcom/google/crypto/tink/proto/OutputPrefixType;)Lcom/google/crypto/tink/proto/KeysetInfo$KeyInfo$Builder; +HSPLcom/google/crypto/tink/proto/KeysetInfo$KeyInfo$Builder;->setStatus(Lcom/google/crypto/tink/proto/KeyStatusType;)Lcom/google/crypto/tink/proto/KeysetInfo$KeyInfo$Builder; +HSPLcom/google/crypto/tink/proto/KeysetInfo$KeyInfo$Builder;->setTypeUrl(Ljava/lang/String;)Lcom/google/crypto/tink/proto/KeysetInfo$KeyInfo$Builder; +Lcom/google/crypto/tink/proto/KeysetInfo$KeyInfoOrBuilder; +Lcom/google/crypto/tink/proto/KeysetInfoOrBuilder; +Lcom/google/crypto/tink/proto/KeysetOrBuilder; +Lcom/google/crypto/tink/proto/KmsAeadKey; +Lcom/google/crypto/tink/proto/KmsAeadKeyFormat; +Lcom/google/crypto/tink/proto/KmsAeadKeyFormatOrBuilder; +Lcom/google/crypto/tink/proto/KmsAeadKeyOrBuilder; +Lcom/google/crypto/tink/proto/KmsEnvelopeAeadKey; +Lcom/google/crypto/tink/proto/KmsEnvelopeAeadKeyFormat; +Lcom/google/crypto/tink/proto/KmsEnvelopeAeadKeyFormatOrBuilder; +Lcom/google/crypto/tink/proto/KmsEnvelopeAeadKeyOrBuilder; +Lcom/google/crypto/tink/proto/OutputPrefixType; +HSPLcom/google/crypto/tink/proto/OutputPrefixType;->()V +HSPLcom/google/crypto/tink/proto/OutputPrefixType;->(Ljava/lang/String;II)V +HSPLcom/google/crypto/tink/proto/OutputPrefixType;->forNumber(I)Lcom/google/crypto/tink/proto/OutputPrefixType; +HSPLcom/google/crypto/tink/proto/OutputPrefixType;->getNumber()I +HSPLcom/google/crypto/tink/proto/OutputPrefixType;->values()[Lcom/google/crypto/tink/proto/OutputPrefixType; +Lcom/google/crypto/tink/proto/OutputPrefixType$1; +HSPLcom/google/crypto/tink/proto/OutputPrefixType$1;->()V +Lcom/google/crypto/tink/proto/RegistryConfig; +HSPLcom/google/crypto/tink/proto/RegistryConfig;->()V +HSPLcom/google/crypto/tink/proto/RegistryConfig;->()V +HSPLcom/google/crypto/tink/proto/RegistryConfig;->getDefaultInstance()Lcom/google/crypto/tink/proto/RegistryConfig; +Lcom/google/crypto/tink/proto/RegistryConfigOrBuilder; +Lcom/google/crypto/tink/proto/XChaCha20Poly1305Key; +Lcom/google/crypto/tink/proto/XChaCha20Poly1305KeyFormat; +HSPLcom/google/crypto/tink/proto/XChaCha20Poly1305KeyFormat;->()V +HSPLcom/google/crypto/tink/proto/XChaCha20Poly1305KeyFormat;->()V +HSPLcom/google/crypto/tink/proto/XChaCha20Poly1305KeyFormat;->dynamicMethod(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$MethodToInvoke;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/proto/XChaCha20Poly1305KeyFormat;->getDefaultInstance()Lcom/google/crypto/tink/proto/XChaCha20Poly1305KeyFormat; +Lcom/google/crypto/tink/proto/XChaCha20Poly1305KeyFormat$1; +HSPLcom/google/crypto/tink/proto/XChaCha20Poly1305KeyFormat$1;->()V +Lcom/google/crypto/tink/proto/XChaCha20Poly1305KeyFormatOrBuilder; +Lcom/google/crypto/tink/proto/XChaCha20Poly1305KeyOrBuilder; +Lcom/google/crypto/tink/shaded/protobuf/AbstractMessageLite; +HSPLcom/google/crypto/tink/shaded/protobuf/AbstractMessageLite;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/AbstractMessageLite;->toByteArray()[B +HSPLcom/google/crypto/tink/shaded/protobuf/AbstractMessageLite;->toByteString()Lcom/google/crypto/tink/shaded/protobuf/ByteString; +Lcom/google/crypto/tink/shaded/protobuf/AbstractMessageLite$Builder; +HSPLcom/google/crypto/tink/shaded/protobuf/AbstractMessageLite$Builder;->()V +Lcom/google/crypto/tink/shaded/protobuf/AbstractProtobufList; +HSPLcom/google/crypto/tink/shaded/protobuf/AbstractProtobufList;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/AbstractProtobufList;->ensureIsMutable()V +HSPLcom/google/crypto/tink/shaded/protobuf/AbstractProtobufList;->equals(Ljava/lang/Object;)Z +HSPLcom/google/crypto/tink/shaded/protobuf/AbstractProtobufList;->isModifiable()Z +HSPLcom/google/crypto/tink/shaded/protobuf/AbstractProtobufList;->makeImmutable()V +Lcom/google/crypto/tink/shaded/protobuf/Android; +HSPLcom/google/crypto/tink/shaded/protobuf/Android;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/Android;->getClassForName(Ljava/lang/String;)Ljava/lang/Class; +HSPLcom/google/crypto/tink/shaded/protobuf/Android;->getMemoryClass()Ljava/lang/Class; +HSPLcom/google/crypto/tink/shaded/protobuf/Android;->isOnAndroidDevice()Z +Lcom/google/crypto/tink/shaded/protobuf/ArrayDecoders; +HSPLcom/google/crypto/tink/shaded/protobuf/ArrayDecoders;->decodeBytes([BILcom/google/crypto/tink/shaded/protobuf/ArrayDecoders$Registers;)I +HSPLcom/google/crypto/tink/shaded/protobuf/ArrayDecoders;->decodeMessageField(Lcom/google/crypto/tink/shaded/protobuf/Schema;[BIILcom/google/crypto/tink/shaded/protobuf/ArrayDecoders$Registers;)I +HSPLcom/google/crypto/tink/shaded/protobuf/ArrayDecoders;->decodeMessageList(Lcom/google/crypto/tink/shaded/protobuf/Schema;I[BIILcom/google/crypto/tink/shaded/protobuf/Internal$ProtobufList;Lcom/google/crypto/tink/shaded/protobuf/ArrayDecoders$Registers;)I +HSPLcom/google/crypto/tink/shaded/protobuf/ArrayDecoders;->decodeStringRequireUtf8([BILcom/google/crypto/tink/shaded/protobuf/ArrayDecoders$Registers;)I +HSPLcom/google/crypto/tink/shaded/protobuf/ArrayDecoders;->decodeVarint32(I[BILcom/google/crypto/tink/shaded/protobuf/ArrayDecoders$Registers;)I +HSPLcom/google/crypto/tink/shaded/protobuf/ArrayDecoders;->decodeVarint32([BILcom/google/crypto/tink/shaded/protobuf/ArrayDecoders$Registers;)I +HSPLcom/google/crypto/tink/shaded/protobuf/ArrayDecoders;->mergeMessageField(Ljava/lang/Object;Lcom/google/crypto/tink/shaded/protobuf/Schema;[BIILcom/google/crypto/tink/shaded/protobuf/ArrayDecoders$Registers;)I +Lcom/google/crypto/tink/shaded/protobuf/ArrayDecoders$Registers; +HSPLcom/google/crypto/tink/shaded/protobuf/ArrayDecoders$Registers;->(Lcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryLite;)V +Lcom/google/crypto/tink/shaded/protobuf/ByteOutput; +HSPLcom/google/crypto/tink/shaded/protobuf/ByteOutput;->()V +Lcom/google/crypto/tink/shaded/protobuf/ByteString; +HSPLcom/google/crypto/tink/shaded/protobuf/ByteString;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/ByteString;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/ByteString;->checkRange(III)I +HSPLcom/google/crypto/tink/shaded/protobuf/ByteString;->copyFrom([B)Lcom/google/crypto/tink/shaded/protobuf/ByteString; +HSPLcom/google/crypto/tink/shaded/protobuf/ByteString;->copyFrom([BII)Lcom/google/crypto/tink/shaded/protobuf/ByteString; +HSPLcom/google/crypto/tink/shaded/protobuf/ByteString;->newCodedBuilder(I)Lcom/google/crypto/tink/shaded/protobuf/ByteString$CodedBuilder; +HSPLcom/google/crypto/tink/shaded/protobuf/ByteString;->peekCachedHashCode()I +HSPLcom/google/crypto/tink/shaded/protobuf/ByteString;->toByteArray()[B +Lcom/google/crypto/tink/shaded/protobuf/ByteString$2; +HSPLcom/google/crypto/tink/shaded/protobuf/ByteString$2;->()V +Lcom/google/crypto/tink/shaded/protobuf/ByteString$ByteArrayCopier; +Lcom/google/crypto/tink/shaded/protobuf/ByteString$CodedBuilder; +HSPLcom/google/crypto/tink/shaded/protobuf/ByteString$CodedBuilder;->(I)V +HSPLcom/google/crypto/tink/shaded/protobuf/ByteString$CodedBuilder;->(ILcom/google/crypto/tink/shaded/protobuf/ByteString$1;)V +HSPLcom/google/crypto/tink/shaded/protobuf/ByteString$CodedBuilder;->build()Lcom/google/crypto/tink/shaded/protobuf/ByteString; +HSPLcom/google/crypto/tink/shaded/protobuf/ByteString$CodedBuilder;->getCodedOutput()Lcom/google/crypto/tink/shaded/protobuf/CodedOutputStream; +Lcom/google/crypto/tink/shaded/protobuf/ByteString$LeafByteString; +HSPLcom/google/crypto/tink/shaded/protobuf/ByteString$LeafByteString;->()V +Lcom/google/crypto/tink/shaded/protobuf/ByteString$LiteralByteString; +HSPLcom/google/crypto/tink/shaded/protobuf/ByteString$LiteralByteString;->([B)V +HSPLcom/google/crypto/tink/shaded/protobuf/ByteString$LiteralByteString;->copyToInternal([BIII)V +HSPLcom/google/crypto/tink/shaded/protobuf/ByteString$LiteralByteString;->equals(Ljava/lang/Object;)Z +HSPLcom/google/crypto/tink/shaded/protobuf/ByteString$LiteralByteString;->equalsRange(Lcom/google/crypto/tink/shaded/protobuf/ByteString;II)Z +HSPLcom/google/crypto/tink/shaded/protobuf/ByteString$LiteralByteString;->getOffsetIntoBytes()I +HSPLcom/google/crypto/tink/shaded/protobuf/ByteString$LiteralByteString;->newCodedInput()Lcom/google/crypto/tink/shaded/protobuf/CodedInputStream; +HSPLcom/google/crypto/tink/shaded/protobuf/ByteString$LiteralByteString;->size()I +HSPLcom/google/crypto/tink/shaded/protobuf/ByteString$LiteralByteString;->writeTo(Lcom/google/crypto/tink/shaded/protobuf/ByteOutput;)V +Lcom/google/crypto/tink/shaded/protobuf/ByteString$SystemByteArrayCopier; +HSPLcom/google/crypto/tink/shaded/protobuf/ByteString$SystemByteArrayCopier;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/ByteString$SystemByteArrayCopier;->(Lcom/google/crypto/tink/shaded/protobuf/ByteString$1;)V +HSPLcom/google/crypto/tink/shaded/protobuf/ByteString$SystemByteArrayCopier;->copyFrom([BII)[B +Lcom/google/crypto/tink/shaded/protobuf/CodedInputStream; +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream;->(Lcom/google/crypto/tink/shaded/protobuf/CodedInputStream$1;)V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream;->newInstance(Ljava/io/InputStream;)Lcom/google/crypto/tink/shaded/protobuf/CodedInputStream; +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream;->newInstance(Ljava/io/InputStream;I)Lcom/google/crypto/tink/shaded/protobuf/CodedInputStream; +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream;->newInstance([B)Lcom/google/crypto/tink/shaded/protobuf/CodedInputStream; +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream;->newInstance([BII)Lcom/google/crypto/tink/shaded/protobuf/CodedInputStream; +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream;->newInstance([BIIZ)Lcom/google/crypto/tink/shaded/protobuf/CodedInputStream; +Lcom/google/crypto/tink/shaded/protobuf/CodedInputStream$ArrayDecoder; +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream$ArrayDecoder;->([BIIZ)V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream$ArrayDecoder;->([BIIZLcom/google/crypto/tink/shaded/protobuf/CodedInputStream$1;)V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream$ArrayDecoder;->checkLastTagWas(I)V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream$ArrayDecoder;->getTotalBytesRead()I +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream$ArrayDecoder;->isAtEnd()Z +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream$ArrayDecoder;->pushLimit(I)I +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream$ArrayDecoder;->readBytes()Lcom/google/crypto/tink/shaded/protobuf/ByteString; +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream$ArrayDecoder;->readRawVarint32()I +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream$ArrayDecoder;->readTag()I +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream$ArrayDecoder;->readUInt32()I +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream$ArrayDecoder;->recomputeBufferSizeAfterLimit()V +Lcom/google/crypto/tink/shaded/protobuf/CodedInputStream$StreamDecoder; +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream$StreamDecoder;->(Ljava/io/InputStream;I)V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream$StreamDecoder;->(Ljava/io/InputStream;ILcom/google/crypto/tink/shaded/protobuf/CodedInputStream$1;)V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream$StreamDecoder;->checkLastTagWas(I)V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream$StreamDecoder;->isAtEnd()Z +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream$StreamDecoder;->popLimit(I)V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream$StreamDecoder;->pushLimit(I)I +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream$StreamDecoder;->read(Ljava/io/InputStream;[BII)I +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream$StreamDecoder;->readBytes()Lcom/google/crypto/tink/shaded/protobuf/ByteString; +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream$StreamDecoder;->readEnum()I +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream$StreamDecoder;->readRawByte()B +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream$StreamDecoder;->readRawVarint32()I +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream$StreamDecoder;->readRawVarint64SlowPath()J +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream$StreamDecoder;->readStringRequireUtf8()Ljava/lang/String; +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream$StreamDecoder;->readTag()I +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream$StreamDecoder;->readUInt32()I +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream$StreamDecoder;->recomputeBufferSizeAfterLimit()V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream$StreamDecoder;->tryRefillBuffer(I)Z +Lcom/google/crypto/tink/shaded/protobuf/CodedInputStream$StreamDecoder$RefillCallback; +Lcom/google/crypto/tink/shaded/protobuf/CodedInputStreamReader; +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStreamReader;->(Lcom/google/crypto/tink/shaded/protobuf/CodedInputStream;)V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStreamReader;->forCodedInput(Lcom/google/crypto/tink/shaded/protobuf/CodedInputStream;)Lcom/google/crypto/tink/shaded/protobuf/CodedInputStreamReader; +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStreamReader;->getFieldNumber()I +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStreamReader;->mergeMessageField(Ljava/lang/Object;Lcom/google/crypto/tink/shaded/protobuf/Schema;Lcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryLite;)V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStreamReader;->mergeMessageFieldInternal(Ljava/lang/Object;Lcom/google/crypto/tink/shaded/protobuf/Schema;Lcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryLite;)V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStreamReader;->readBytes()Lcom/google/crypto/tink/shaded/protobuf/ByteString; +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStreamReader;->readEnum()I +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStreamReader;->readMessage(Lcom/google/crypto/tink/shaded/protobuf/Schema;Lcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryLite;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStreamReader;->readMessageList(Ljava/util/List;Lcom/google/crypto/tink/shaded/protobuf/Schema;Lcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryLite;)V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStreamReader;->readStringRequireUtf8()Ljava/lang/String; +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStreamReader;->readUInt32()I +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStreamReader;->requireWireType(I)V +Lcom/google/crypto/tink/shaded/protobuf/CodedOutputStream; +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream;->(Lcom/google/crypto/tink/shaded/protobuf/CodedOutputStream$1;)V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream;->checkNoSpaceLeft()V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream;->computeBytesSize(ILcom/google/crypto/tink/shaded/protobuf/ByteString;)I +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream;->computeBytesSizeNoTag(Lcom/google/crypto/tink/shaded/protobuf/ByteString;)I +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream;->computeEnumSize(II)I +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream;->computeEnumSizeNoTag(I)I +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream;->computeInt32SizeNoTag(I)I +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream;->computeLengthDelimitedFieldSize(I)I +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream;->computeMessageSize(ILcom/google/crypto/tink/shaded/protobuf/MessageLite;Lcom/google/crypto/tink/shaded/protobuf/Schema;)I +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream;->computeMessageSizeNoTag(Lcom/google/crypto/tink/shaded/protobuf/MessageLite;Lcom/google/crypto/tink/shaded/protobuf/Schema;)I +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream;->computeStringSize(ILjava/lang/String;)I +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream;->computeStringSizeNoTag(Ljava/lang/String;)I +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream;->computeTagSize(I)I +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream;->computeUInt32Size(II)I +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream;->computeUInt32SizeNoTag(I)I +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream;->newInstance([B)Lcom/google/crypto/tink/shaded/protobuf/CodedOutputStream; +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream;->newInstance([BII)Lcom/google/crypto/tink/shaded/protobuf/CodedOutputStream; +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream;->writeEnum(II)V +Lcom/google/crypto/tink/shaded/protobuf/CodedOutputStream$ArrayEncoder; +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream$ArrayEncoder;->([BII)V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream$ArrayEncoder;->spaceLeft()I +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream$ArrayEncoder;->write([BII)V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream$ArrayEncoder;->writeBytes(ILcom/google/crypto/tink/shaded/protobuf/ByteString;)V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream$ArrayEncoder;->writeBytesNoTag(Lcom/google/crypto/tink/shaded/protobuf/ByteString;)V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream$ArrayEncoder;->writeInt32(II)V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream$ArrayEncoder;->writeInt32NoTag(I)V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream$ArrayEncoder;->writeLazy([BII)V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream$ArrayEncoder;->writeMessage(ILcom/google/crypto/tink/shaded/protobuf/MessageLite;Lcom/google/crypto/tink/shaded/protobuf/Schema;)V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream$ArrayEncoder;->writeString(ILjava/lang/String;)V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream$ArrayEncoder;->writeStringNoTag(Ljava/lang/String;)V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream$ArrayEncoder;->writeTag(II)V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream$ArrayEncoder;->writeUInt32(II)V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream$ArrayEncoder;->writeUInt32NoTag(I)V +Lcom/google/crypto/tink/shaded/protobuf/CodedOutputStreamWriter; +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStreamWriter;->(Lcom/google/crypto/tink/shaded/protobuf/CodedOutputStream;)V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStreamWriter;->fieldOrder()Lcom/google/crypto/tink/shaded/protobuf/Writer$FieldOrder; +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStreamWriter;->forCodedOutput(Lcom/google/crypto/tink/shaded/protobuf/CodedOutputStream;)Lcom/google/crypto/tink/shaded/protobuf/CodedOutputStreamWriter; +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStreamWriter;->writeBytes(ILcom/google/crypto/tink/shaded/protobuf/ByteString;)V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStreamWriter;->writeEnum(II)V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStreamWriter;->writeMessage(ILjava/lang/Object;Lcom/google/crypto/tink/shaded/protobuf/Schema;)V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStreamWriter;->writeMessageList(ILjava/util/List;Lcom/google/crypto/tink/shaded/protobuf/Schema;)V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStreamWriter;->writeString(ILjava/lang/String;)V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStreamWriter;->writeUInt32(II)V +Lcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryFactory; +HSPLcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryFactory;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryFactory;->createEmpty()Lcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryLite; +HSPLcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryFactory;->invokeSubclassFactory(Ljava/lang/String;)Lcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryLite; +HSPLcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryFactory;->reflectExtensionRegistry()Ljava/lang/Class; +Lcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryLite; +HSPLcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryLite;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryLite;->(Z)V +HSPLcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryLite;->getEmptyRegistry()Lcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryLite; +Lcom/google/crypto/tink/shaded/protobuf/ExtensionSchema; +Lcom/google/crypto/tink/shaded/protobuf/FieldType; +HSPLcom/google/crypto/tink/shaded/protobuf/FieldType;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/FieldType;->(Ljava/lang/String;IILcom/google/crypto/tink/shaded/protobuf/FieldType$Collection;Lcom/google/crypto/tink/shaded/protobuf/JavaType;)V +HSPLcom/google/crypto/tink/shaded/protobuf/FieldType;->id()I +HSPLcom/google/crypto/tink/shaded/protobuf/FieldType;->values()[Lcom/google/crypto/tink/shaded/protobuf/FieldType; +Lcom/google/crypto/tink/shaded/protobuf/FieldType$1; +HSPLcom/google/crypto/tink/shaded/protobuf/FieldType$1;->()V +Lcom/google/crypto/tink/shaded/protobuf/FieldType$Collection; +HSPLcom/google/crypto/tink/shaded/protobuf/FieldType$Collection;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/FieldType$Collection;->(Ljava/lang/String;IZ)V +HSPLcom/google/crypto/tink/shaded/protobuf/FieldType$Collection;->values()[Lcom/google/crypto/tink/shaded/protobuf/FieldType$Collection; +Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageInfoFactory; +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageInfoFactory;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageInfoFactory;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageInfoFactory;->getInstance()Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageInfoFactory; +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageInfoFactory;->isSupported(Ljava/lang/Class;)Z +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageInfoFactory;->messageInfoFor(Ljava/lang/Class;)Lcom/google/crypto/tink/shaded/protobuf/MessageInfo; +Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite; +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->buildMessageInfo()Ljava/lang/Object; +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->checkMessageInitialized(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;)Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite; +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->clearMemoizedHashCode()V +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->clearMemoizedSerializedSize()V +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->computeSerializedSize(Lcom/google/crypto/tink/shaded/protobuf/Schema;)I +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->createBuilder()Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$Builder; +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->dynamicMethod(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$MethodToInvoke;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->emptyProtobufList()Lcom/google/crypto/tink/shaded/protobuf/Internal$ProtobufList; +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->equals(Ljava/lang/Object;)Z +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->getDefaultInstance(Ljava/lang/Class;)Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite; +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->getMemoizedSerializedSize()I +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->getSerializedSize()I +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->getSerializedSize(Lcom/google/crypto/tink/shaded/protobuf/Schema;)I +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->isInitialized()Z +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->isInitialized(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;Z)Z +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->isMutable()Z +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->makeImmutable()V +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->markImmutable()V +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->mutableCopy(Lcom/google/crypto/tink/shaded/protobuf/Internal$ProtobufList;)Lcom/google/crypto/tink/shaded/protobuf/Internal$ProtobufList; +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->newMessageInfo(Lcom/google/crypto/tink/shaded/protobuf/MessageLite;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->newMutableInstance()Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite; +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->parseFrom(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;Lcom/google/crypto/tink/shaded/protobuf/ByteString;Lcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryLite;)Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite; +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->parseFrom(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;Ljava/io/InputStream;Lcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryLite;)Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite; +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->parseFrom(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;[BLcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryLite;)Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite; +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->parsePartialFrom(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;Lcom/google/crypto/tink/shaded/protobuf/ByteString;Lcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryLite;)Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite; +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->parsePartialFrom(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;Lcom/google/crypto/tink/shaded/protobuf/CodedInputStream;Lcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryLite;)Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite; +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->parsePartialFrom(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;[BIILcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryLite;)Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite; +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->registerDefaultInstance(Ljava/lang/Class;Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;)V +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->setMemoizedSerializedSize(I)V +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->toBuilder()Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$Builder; +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->writeTo(Lcom/google/crypto/tink/shaded/protobuf/CodedOutputStream;)V +Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$Builder; +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$Builder;->(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;)V +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$Builder;->build()Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite; +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$Builder;->buildPartial()Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite; +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$Builder;->copyOnWrite()V +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$Builder;->copyOnWriteInternal()V +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$Builder;->getDefaultInstanceForType()Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite; +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$Builder;->mergeFrom(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;)Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$Builder; +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$Builder;->mergeFromInstance(Ljava/lang/Object;Ljava/lang/Object;)V +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$Builder;->newMutableInstance()Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite; +Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$MethodToInvoke; +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$MethodToInvoke;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$MethodToInvoke;->(Ljava/lang/String;I)V +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$MethodToInvoke;->values()[Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$MethodToInvoke; +Lcom/google/crypto/tink/shaded/protobuf/Internal; +HSPLcom/google/crypto/tink/shaded/protobuf/Internal;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/Internal;->checkNotNull(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object; +Lcom/google/crypto/tink/shaded/protobuf/Internal$EnumLite; +Lcom/google/crypto/tink/shaded/protobuf/Internal$EnumLiteMap; +Lcom/google/crypto/tink/shaded/protobuf/Internal$EnumVerifier; +Lcom/google/crypto/tink/shaded/protobuf/Internal$ProtobufList; +Lcom/google/crypto/tink/shaded/protobuf/InvalidProtocolBufferException; +Lcom/google/crypto/tink/shaded/protobuf/InvalidProtocolBufferException$InvalidWireTypeException; +Lcom/google/crypto/tink/shaded/protobuf/JavaType; +HSPLcom/google/crypto/tink/shaded/protobuf/JavaType;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/JavaType;->(Ljava/lang/String;ILjava/lang/Class;Ljava/lang/Class;Ljava/lang/Object;)V +HSPLcom/google/crypto/tink/shaded/protobuf/JavaType;->getBoxedType()Ljava/lang/Class; +HSPLcom/google/crypto/tink/shaded/protobuf/JavaType;->values()[Lcom/google/crypto/tink/shaded/protobuf/JavaType; +Lcom/google/crypto/tink/shaded/protobuf/LazyFieldLite; +Lcom/google/crypto/tink/shaded/protobuf/ListFieldSchema; +HSPLcom/google/crypto/tink/shaded/protobuf/ListFieldSchema;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/ListFieldSchema;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/ListFieldSchema;->(Lcom/google/crypto/tink/shaded/protobuf/ListFieldSchema$1;)V +HSPLcom/google/crypto/tink/shaded/protobuf/ListFieldSchema;->lite()Lcom/google/crypto/tink/shaded/protobuf/ListFieldSchema; +Lcom/google/crypto/tink/shaded/protobuf/ListFieldSchema$ListFieldSchemaFull; +HSPLcom/google/crypto/tink/shaded/protobuf/ListFieldSchema$ListFieldSchemaFull;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/ListFieldSchema$ListFieldSchemaFull;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/ListFieldSchema$ListFieldSchemaFull;->(Lcom/google/crypto/tink/shaded/protobuf/ListFieldSchema$1;)V +Lcom/google/crypto/tink/shaded/protobuf/ListFieldSchema$ListFieldSchemaLite; +HSPLcom/google/crypto/tink/shaded/protobuf/ListFieldSchema$ListFieldSchemaLite;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/ListFieldSchema$ListFieldSchemaLite;->(Lcom/google/crypto/tink/shaded/protobuf/ListFieldSchema$1;)V +HSPLcom/google/crypto/tink/shaded/protobuf/ListFieldSchema$ListFieldSchemaLite;->getProtobufList(Ljava/lang/Object;J)Lcom/google/crypto/tink/shaded/protobuf/Internal$ProtobufList; +HSPLcom/google/crypto/tink/shaded/protobuf/ListFieldSchema$ListFieldSchemaLite;->makeImmutableListAt(Ljava/lang/Object;J)V +HSPLcom/google/crypto/tink/shaded/protobuf/ListFieldSchema$ListFieldSchemaLite;->mergeListsAt(Ljava/lang/Object;Ljava/lang/Object;J)V +HSPLcom/google/crypto/tink/shaded/protobuf/ListFieldSchema$ListFieldSchemaLite;->mutableListAt(Ljava/lang/Object;J)Ljava/util/List; +Lcom/google/crypto/tink/shaded/protobuf/ManifestSchemaFactory; +HSPLcom/google/crypto/tink/shaded/protobuf/ManifestSchemaFactory;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/ManifestSchemaFactory;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/ManifestSchemaFactory;->(Lcom/google/crypto/tink/shaded/protobuf/MessageInfoFactory;)V +HSPLcom/google/crypto/tink/shaded/protobuf/ManifestSchemaFactory;->createSchema(Ljava/lang/Class;)Lcom/google/crypto/tink/shaded/protobuf/Schema; +HSPLcom/google/crypto/tink/shaded/protobuf/ManifestSchemaFactory;->getDefaultMessageInfoFactory()Lcom/google/crypto/tink/shaded/protobuf/MessageInfoFactory; +HSPLcom/google/crypto/tink/shaded/protobuf/ManifestSchemaFactory;->getDescriptorMessageInfoFactory()Lcom/google/crypto/tink/shaded/protobuf/MessageInfoFactory; +HSPLcom/google/crypto/tink/shaded/protobuf/ManifestSchemaFactory;->isProto2(Lcom/google/crypto/tink/shaded/protobuf/MessageInfo;)Z +HSPLcom/google/crypto/tink/shaded/protobuf/ManifestSchemaFactory;->newSchema(Ljava/lang/Class;Lcom/google/crypto/tink/shaded/protobuf/MessageInfo;)Lcom/google/crypto/tink/shaded/protobuf/Schema; +Lcom/google/crypto/tink/shaded/protobuf/ManifestSchemaFactory$1; +HSPLcom/google/crypto/tink/shaded/protobuf/ManifestSchemaFactory$1;->()V +Lcom/google/crypto/tink/shaded/protobuf/ManifestSchemaFactory$CompositeMessageInfoFactory; +HSPLcom/google/crypto/tink/shaded/protobuf/ManifestSchemaFactory$CompositeMessageInfoFactory;->([Lcom/google/crypto/tink/shaded/protobuf/MessageInfoFactory;)V +HSPLcom/google/crypto/tink/shaded/protobuf/ManifestSchemaFactory$CompositeMessageInfoFactory;->messageInfoFor(Ljava/lang/Class;)Lcom/google/crypto/tink/shaded/protobuf/MessageInfo; +Lcom/google/crypto/tink/shaded/protobuf/MapFieldSchema; +Lcom/google/crypto/tink/shaded/protobuf/MapFieldSchemaLite; +HSPLcom/google/crypto/tink/shaded/protobuf/MapFieldSchemaLite;->()V +Lcom/google/crypto/tink/shaded/protobuf/MapFieldSchemas; +HSPLcom/google/crypto/tink/shaded/protobuf/MapFieldSchemas;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/MapFieldSchemas;->lite()Lcom/google/crypto/tink/shaded/protobuf/MapFieldSchema; +HSPLcom/google/crypto/tink/shaded/protobuf/MapFieldSchemas;->loadSchemaForFullRuntime()Lcom/google/crypto/tink/shaded/protobuf/MapFieldSchema; +Lcom/google/crypto/tink/shaded/protobuf/MessageInfo; +Lcom/google/crypto/tink/shaded/protobuf/MessageInfoFactory; +Lcom/google/crypto/tink/shaded/protobuf/MessageLite; +Lcom/google/crypto/tink/shaded/protobuf/MessageLite$Builder; +Lcom/google/crypto/tink/shaded/protobuf/MessageLiteOrBuilder; +Lcom/google/crypto/tink/shaded/protobuf/MessageSchema; +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->([I[Ljava/lang/Object;IILcom/google/crypto/tink/shaded/protobuf/MessageLite;ZZ[IIILcom/google/crypto/tink/shaded/protobuf/NewInstanceSchema;Lcom/google/crypto/tink/shaded/protobuf/ListFieldSchema;Lcom/google/crypto/tink/shaded/protobuf/UnknownFieldSchema;Lcom/google/crypto/tink/shaded/protobuf/ExtensionSchema;Lcom/google/crypto/tink/shaded/protobuf/MapFieldSchema;)V +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->arePresentForEquals(Ljava/lang/Object;Ljava/lang/Object;I)Z +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->checkMutable(Ljava/lang/Object;)V +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->equals(Ljava/lang/Object;Ljava/lang/Object;)Z +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->equals(Ljava/lang/Object;Ljava/lang/Object;I)Z +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->getEnumFieldVerifier(I)Lcom/google/crypto/tink/shaded/protobuf/Internal$EnumVerifier; +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->getMessageFieldSchema(I)Lcom/google/crypto/tink/shaded/protobuf/Schema; +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->getSerializedSize(Ljava/lang/Object;)I +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->getSerializedSizeProto3(Ljava/lang/Object;)I +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->getUnknownFieldsSerializedSize(Lcom/google/crypto/tink/shaded/protobuf/UnknownFieldSchema;Ljava/lang/Object;)I +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->intAt(Ljava/lang/Object;J)I +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->isEnforceUtf8(I)Z +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->isFieldPresent(Ljava/lang/Object;I)Z +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->isMutable(Ljava/lang/Object;)Z +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->listAt(Ljava/lang/Object;J)Ljava/util/List; +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->makeImmutable(Ljava/lang/Object;)V +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->mergeFrom(Ljava/lang/Object;Lcom/google/crypto/tink/shaded/protobuf/Reader;Lcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryLite;)V +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->mergeFrom(Ljava/lang/Object;Ljava/lang/Object;)V +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->mergeFrom(Ljava/lang/Object;[BIILcom/google/crypto/tink/shaded/protobuf/ArrayDecoders$Registers;)V +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->mergeFromHelper(Lcom/google/crypto/tink/shaded/protobuf/UnknownFieldSchema;Lcom/google/crypto/tink/shaded/protobuf/ExtensionSchema;Ljava/lang/Object;Lcom/google/crypto/tink/shaded/protobuf/Reader;Lcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryLite;)V +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->mergeSingleField(Ljava/lang/Object;Ljava/lang/Object;I)V +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->mutableMessageFieldForMerge(Ljava/lang/Object;I)Ljava/lang/Object; +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->newInstance()Ljava/lang/Object; +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->newSchema(Ljava/lang/Class;Lcom/google/crypto/tink/shaded/protobuf/MessageInfo;Lcom/google/crypto/tink/shaded/protobuf/NewInstanceSchema;Lcom/google/crypto/tink/shaded/protobuf/ListFieldSchema;Lcom/google/crypto/tink/shaded/protobuf/UnknownFieldSchema;Lcom/google/crypto/tink/shaded/protobuf/ExtensionSchema;Lcom/google/crypto/tink/shaded/protobuf/MapFieldSchema;)Lcom/google/crypto/tink/shaded/protobuf/MessageSchema; +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->newSchemaForRawMessageInfo(Lcom/google/crypto/tink/shaded/protobuf/RawMessageInfo;Lcom/google/crypto/tink/shaded/protobuf/NewInstanceSchema;Lcom/google/crypto/tink/shaded/protobuf/ListFieldSchema;Lcom/google/crypto/tink/shaded/protobuf/UnknownFieldSchema;Lcom/google/crypto/tink/shaded/protobuf/ExtensionSchema;Lcom/google/crypto/tink/shaded/protobuf/MapFieldSchema;)Lcom/google/crypto/tink/shaded/protobuf/MessageSchema; +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->numberAt(I)I +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->offset(I)J +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->parseProto3Message(Ljava/lang/Object;[BIILcom/google/crypto/tink/shaded/protobuf/ArrayDecoders$Registers;)I +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->positionForFieldNumber(I)I +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->positionForFieldNumber(II)I +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->presenceMaskAndOffsetAt(I)I +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->readMessageList(Ljava/lang/Object;ILcom/google/crypto/tink/shaded/protobuf/Reader;Lcom/google/crypto/tink/shaded/protobuf/Schema;Lcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryLite;)V +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->readString(Ljava/lang/Object;ILcom/google/crypto/tink/shaded/protobuf/Reader;)V +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->reflectField(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/reflect/Field; +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->setFieldPresent(Ljava/lang/Object;I)V +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->slowPositionForFieldNumber(II)I +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->storeMessageField(Ljava/lang/Object;ILjava/lang/Object;)V +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->type(I)I +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->typeAndOffsetAt(I)I +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->writeFieldsInAscendingOrderProto3(Ljava/lang/Object;Lcom/google/crypto/tink/shaded/protobuf/Writer;)V +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->writeString(ILjava/lang/Object;Lcom/google/crypto/tink/shaded/protobuf/Writer;)V +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->writeTo(Ljava/lang/Object;Lcom/google/crypto/tink/shaded/protobuf/Writer;)V +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->writeUnknownInMessageTo(Lcom/google/crypto/tink/shaded/protobuf/UnknownFieldSchema;Ljava/lang/Object;Lcom/google/crypto/tink/shaded/protobuf/Writer;)V +Lcom/google/crypto/tink/shaded/protobuf/NewInstanceSchema; +Lcom/google/crypto/tink/shaded/protobuf/NewInstanceSchemaLite; +HSPLcom/google/crypto/tink/shaded/protobuf/NewInstanceSchemaLite;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/NewInstanceSchemaLite;->newInstance(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/google/crypto/tink/shaded/protobuf/NewInstanceSchemas; +HSPLcom/google/crypto/tink/shaded/protobuf/NewInstanceSchemas;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/NewInstanceSchemas;->lite()Lcom/google/crypto/tink/shaded/protobuf/NewInstanceSchema; +HSPLcom/google/crypto/tink/shaded/protobuf/NewInstanceSchemas;->loadSchemaForFullRuntime()Lcom/google/crypto/tink/shaded/protobuf/NewInstanceSchema; +Lcom/google/crypto/tink/shaded/protobuf/ProtoSyntax; +HSPLcom/google/crypto/tink/shaded/protobuf/ProtoSyntax;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/ProtoSyntax;->(Ljava/lang/String;I)V +Lcom/google/crypto/tink/shaded/protobuf/Protobuf; +HSPLcom/google/crypto/tink/shaded/protobuf/Protobuf;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/Protobuf;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/Protobuf;->getInstance()Lcom/google/crypto/tink/shaded/protobuf/Protobuf; +HSPLcom/google/crypto/tink/shaded/protobuf/Protobuf;->registerSchema(Ljava/lang/Class;Lcom/google/crypto/tink/shaded/protobuf/Schema;)Lcom/google/crypto/tink/shaded/protobuf/Schema; +HSPLcom/google/crypto/tink/shaded/protobuf/Protobuf;->schemaFor(Ljava/lang/Class;)Lcom/google/crypto/tink/shaded/protobuf/Schema; +HSPLcom/google/crypto/tink/shaded/protobuf/Protobuf;->schemaFor(Ljava/lang/Object;)Lcom/google/crypto/tink/shaded/protobuf/Schema; +Lcom/google/crypto/tink/shaded/protobuf/ProtobufArrayList; +HSPLcom/google/crypto/tink/shaded/protobuf/ProtobufArrayList;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/ProtobufArrayList;->([Ljava/lang/Object;I)V +HSPLcom/google/crypto/tink/shaded/protobuf/ProtobufArrayList;->add(Ljava/lang/Object;)Z +HSPLcom/google/crypto/tink/shaded/protobuf/ProtobufArrayList;->emptyList()Lcom/google/crypto/tink/shaded/protobuf/ProtobufArrayList; +HSPLcom/google/crypto/tink/shaded/protobuf/ProtobufArrayList;->ensureIndexInRange(I)V +HSPLcom/google/crypto/tink/shaded/protobuf/ProtobufArrayList;->get(I)Ljava/lang/Object; +HSPLcom/google/crypto/tink/shaded/protobuf/ProtobufArrayList;->mutableCopyWithCapacity(I)Lcom/google/crypto/tink/shaded/protobuf/Internal$ProtobufList; +HSPLcom/google/crypto/tink/shaded/protobuf/ProtobufArrayList;->mutableCopyWithCapacity(I)Lcom/google/crypto/tink/shaded/protobuf/ProtobufArrayList; +HSPLcom/google/crypto/tink/shaded/protobuf/ProtobufArrayList;->size()I +Lcom/google/crypto/tink/shaded/protobuf/RawMessageInfo; +HSPLcom/google/crypto/tink/shaded/protobuf/RawMessageInfo;->(Lcom/google/crypto/tink/shaded/protobuf/MessageLite;Ljava/lang/String;[Ljava/lang/Object;)V +HSPLcom/google/crypto/tink/shaded/protobuf/RawMessageInfo;->getDefaultInstance()Lcom/google/crypto/tink/shaded/protobuf/MessageLite; +HSPLcom/google/crypto/tink/shaded/protobuf/RawMessageInfo;->getObjects()[Ljava/lang/Object; +HSPLcom/google/crypto/tink/shaded/protobuf/RawMessageInfo;->getStringInfo()Ljava/lang/String; +HSPLcom/google/crypto/tink/shaded/protobuf/RawMessageInfo;->getSyntax()Lcom/google/crypto/tink/shaded/protobuf/ProtoSyntax; +HSPLcom/google/crypto/tink/shaded/protobuf/RawMessageInfo;->isMessageSetWireFormat()Z +Lcom/google/crypto/tink/shaded/protobuf/Reader; +Lcom/google/crypto/tink/shaded/protobuf/Schema; +Lcom/google/crypto/tink/shaded/protobuf/SchemaFactory; +Lcom/google/crypto/tink/shaded/protobuf/SchemaUtil; +HSPLcom/google/crypto/tink/shaded/protobuf/SchemaUtil;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/SchemaUtil;->computeSizeMessage(ILjava/lang/Object;Lcom/google/crypto/tink/shaded/protobuf/Schema;)I +HSPLcom/google/crypto/tink/shaded/protobuf/SchemaUtil;->computeSizeMessageList(ILjava/util/List;Lcom/google/crypto/tink/shaded/protobuf/Schema;)I +HSPLcom/google/crypto/tink/shaded/protobuf/SchemaUtil;->getGeneratedMessageClass()Ljava/lang/Class; +HSPLcom/google/crypto/tink/shaded/protobuf/SchemaUtil;->getUnknownFieldSetSchema(Z)Lcom/google/crypto/tink/shaded/protobuf/UnknownFieldSchema; +HSPLcom/google/crypto/tink/shaded/protobuf/SchemaUtil;->getUnknownFieldSetSchemaClass()Ljava/lang/Class; +HSPLcom/google/crypto/tink/shaded/protobuf/SchemaUtil;->mergeUnknownFields(Lcom/google/crypto/tink/shaded/protobuf/UnknownFieldSchema;Ljava/lang/Object;Ljava/lang/Object;)V +HSPLcom/google/crypto/tink/shaded/protobuf/SchemaUtil;->requireGeneratedMessage(Ljava/lang/Class;)V +HSPLcom/google/crypto/tink/shaded/protobuf/SchemaUtil;->safeEquals(Ljava/lang/Object;Ljava/lang/Object;)Z +HSPLcom/google/crypto/tink/shaded/protobuf/SchemaUtil;->unknownFieldSetLiteSchema()Lcom/google/crypto/tink/shaded/protobuf/UnknownFieldSchema; +HSPLcom/google/crypto/tink/shaded/protobuf/SchemaUtil;->writeMessageList(ILjava/util/List;Lcom/google/crypto/tink/shaded/protobuf/Writer;Lcom/google/crypto/tink/shaded/protobuf/Schema;)V +Lcom/google/crypto/tink/shaded/protobuf/UninitializedMessageException; +Lcom/google/crypto/tink/shaded/protobuf/UnknownFieldSchema; +HSPLcom/google/crypto/tink/shaded/protobuf/UnknownFieldSchema;->()V +Lcom/google/crypto/tink/shaded/protobuf/UnknownFieldSetLite; +HSPLcom/google/crypto/tink/shaded/protobuf/UnknownFieldSetLite;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/UnknownFieldSetLite;->(I[I[Ljava/lang/Object;Z)V +HSPLcom/google/crypto/tink/shaded/protobuf/UnknownFieldSetLite;->equals(Ljava/lang/Object;)Z +HSPLcom/google/crypto/tink/shaded/protobuf/UnknownFieldSetLite;->getDefaultInstance()Lcom/google/crypto/tink/shaded/protobuf/UnknownFieldSetLite; +HSPLcom/google/crypto/tink/shaded/protobuf/UnknownFieldSetLite;->getSerializedSize()I +HSPLcom/google/crypto/tink/shaded/protobuf/UnknownFieldSetLite;->makeImmutable()V +HSPLcom/google/crypto/tink/shaded/protobuf/UnknownFieldSetLite;->writeTo(Lcom/google/crypto/tink/shaded/protobuf/Writer;)V +Lcom/google/crypto/tink/shaded/protobuf/UnknownFieldSetLiteSchema; +HSPLcom/google/crypto/tink/shaded/protobuf/UnknownFieldSetLiteSchema;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/UnknownFieldSetLiteSchema;->getFromMessage(Ljava/lang/Object;)Lcom/google/crypto/tink/shaded/protobuf/UnknownFieldSetLite; +HSPLcom/google/crypto/tink/shaded/protobuf/UnknownFieldSetLiteSchema;->getFromMessage(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/shaded/protobuf/UnknownFieldSetLiteSchema;->getSerializedSize(Lcom/google/crypto/tink/shaded/protobuf/UnknownFieldSetLite;)I +HSPLcom/google/crypto/tink/shaded/protobuf/UnknownFieldSetLiteSchema;->getSerializedSize(Ljava/lang/Object;)I +HSPLcom/google/crypto/tink/shaded/protobuf/UnknownFieldSetLiteSchema;->makeImmutable(Ljava/lang/Object;)V +HSPLcom/google/crypto/tink/shaded/protobuf/UnknownFieldSetLiteSchema;->merge(Lcom/google/crypto/tink/shaded/protobuf/UnknownFieldSetLite;Lcom/google/crypto/tink/shaded/protobuf/UnknownFieldSetLite;)Lcom/google/crypto/tink/shaded/protobuf/UnknownFieldSetLite; +HSPLcom/google/crypto/tink/shaded/protobuf/UnknownFieldSetLiteSchema;->merge(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/shaded/protobuf/UnknownFieldSetLiteSchema;->setToMessage(Ljava/lang/Object;Lcom/google/crypto/tink/shaded/protobuf/UnknownFieldSetLite;)V +HSPLcom/google/crypto/tink/shaded/protobuf/UnknownFieldSetLiteSchema;->setToMessage(Ljava/lang/Object;Ljava/lang/Object;)V +HSPLcom/google/crypto/tink/shaded/protobuf/UnknownFieldSetLiteSchema;->writeTo(Lcom/google/crypto/tink/shaded/protobuf/UnknownFieldSetLite;Lcom/google/crypto/tink/shaded/protobuf/Writer;)V +HSPLcom/google/crypto/tink/shaded/protobuf/UnknownFieldSetLiteSchema;->writeTo(Ljava/lang/Object;Lcom/google/crypto/tink/shaded/protobuf/Writer;)V +Lcom/google/crypto/tink/shaded/protobuf/UnsafeUtil; +HSPLcom/google/crypto/tink/shaded/protobuf/UnsafeUtil;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/UnsafeUtil;->arrayBaseOffset(Ljava/lang/Class;)I +HSPLcom/google/crypto/tink/shaded/protobuf/UnsafeUtil;->arrayIndexScale(Ljava/lang/Class;)I +HSPLcom/google/crypto/tink/shaded/protobuf/UnsafeUtil;->bufferAddressField()Ljava/lang/reflect/Field; +HSPLcom/google/crypto/tink/shaded/protobuf/UnsafeUtil;->determineAndroidSupportByAddressSize(Ljava/lang/Class;)Z +HSPLcom/google/crypto/tink/shaded/protobuf/UnsafeUtil;->field(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/reflect/Field; +HSPLcom/google/crypto/tink/shaded/protobuf/UnsafeUtil;->fieldOffset(Ljava/lang/reflect/Field;)J +HSPLcom/google/crypto/tink/shaded/protobuf/UnsafeUtil;->getInt(Ljava/lang/Object;J)I +HSPLcom/google/crypto/tink/shaded/protobuf/UnsafeUtil;->getMemoryAccessor()Lcom/google/crypto/tink/shaded/protobuf/UnsafeUtil$MemoryAccessor; +HSPLcom/google/crypto/tink/shaded/protobuf/UnsafeUtil;->getObject(Ljava/lang/Object;J)Ljava/lang/Object; +HSPLcom/google/crypto/tink/shaded/protobuf/UnsafeUtil;->getUnsafe()Lsun/misc/Unsafe; +HSPLcom/google/crypto/tink/shaded/protobuf/UnsafeUtil;->hasUnsafeArrayOperations()Z +HSPLcom/google/crypto/tink/shaded/protobuf/UnsafeUtil;->hasUnsafeByteBufferOperations()Z +HSPLcom/google/crypto/tink/shaded/protobuf/UnsafeUtil;->putInt(Ljava/lang/Object;JI)V +HSPLcom/google/crypto/tink/shaded/protobuf/UnsafeUtil;->putObject(Ljava/lang/Object;JLjava/lang/Object;)V +HSPLcom/google/crypto/tink/shaded/protobuf/UnsafeUtil;->supportsUnsafeArrayOperations()Z +HSPLcom/google/crypto/tink/shaded/protobuf/UnsafeUtil;->supportsUnsafeByteBufferOperations()Z +Lcom/google/crypto/tink/shaded/protobuf/UnsafeUtil$1; +HSPLcom/google/crypto/tink/shaded/protobuf/UnsafeUtil$1;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/UnsafeUtil$1;->run()Ljava/lang/Object; +HSPLcom/google/crypto/tink/shaded/protobuf/UnsafeUtil$1;->run()Lsun/misc/Unsafe; +Lcom/google/crypto/tink/shaded/protobuf/UnsafeUtil$Android64MemoryAccessor; +HSPLcom/google/crypto/tink/shaded/protobuf/UnsafeUtil$Android64MemoryAccessor;->(Lsun/misc/Unsafe;)V +HSPLcom/google/crypto/tink/shaded/protobuf/UnsafeUtil$Android64MemoryAccessor;->supportsUnsafeByteBufferOperations()Z +Lcom/google/crypto/tink/shaded/protobuf/UnsafeUtil$MemoryAccessor; +HSPLcom/google/crypto/tink/shaded/protobuf/UnsafeUtil$MemoryAccessor;->(Lsun/misc/Unsafe;)V +HSPLcom/google/crypto/tink/shaded/protobuf/UnsafeUtil$MemoryAccessor;->arrayBaseOffset(Ljava/lang/Class;)I +HSPLcom/google/crypto/tink/shaded/protobuf/UnsafeUtil$MemoryAccessor;->arrayIndexScale(Ljava/lang/Class;)I +HSPLcom/google/crypto/tink/shaded/protobuf/UnsafeUtil$MemoryAccessor;->getInt(Ljava/lang/Object;J)I +HSPLcom/google/crypto/tink/shaded/protobuf/UnsafeUtil$MemoryAccessor;->getObject(Ljava/lang/Object;J)Ljava/lang/Object; +HSPLcom/google/crypto/tink/shaded/protobuf/UnsafeUtil$MemoryAccessor;->objectFieldOffset(Ljava/lang/reflect/Field;)J +HSPLcom/google/crypto/tink/shaded/protobuf/UnsafeUtil$MemoryAccessor;->putInt(Ljava/lang/Object;JI)V +HSPLcom/google/crypto/tink/shaded/protobuf/UnsafeUtil$MemoryAccessor;->putObject(Ljava/lang/Object;JLjava/lang/Object;)V +HSPLcom/google/crypto/tink/shaded/protobuf/UnsafeUtil$MemoryAccessor;->supportsUnsafeArrayOperations()Z +Lcom/google/crypto/tink/shaded/protobuf/Utf8; +HSPLcom/google/crypto/tink/shaded/protobuf/Utf8;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/Utf8;->decodeUtf8([BII)Ljava/lang/String; +HSPLcom/google/crypto/tink/shaded/protobuf/Utf8;->encode(Ljava/lang/CharSequence;[BII)I +HSPLcom/google/crypto/tink/shaded/protobuf/Utf8;->encodedLength(Ljava/lang/CharSequence;)I +Lcom/google/crypto/tink/shaded/protobuf/Utf8$DecodeUtil; +HSPLcom/google/crypto/tink/shaded/protobuf/Utf8$DecodeUtil;->access$400(B)Z +HSPLcom/google/crypto/tink/shaded/protobuf/Utf8$DecodeUtil;->access$500(B[CI)V +HSPLcom/google/crypto/tink/shaded/protobuf/Utf8$DecodeUtil;->handleOneByte(B[CI)V +HSPLcom/google/crypto/tink/shaded/protobuf/Utf8$DecodeUtil;->isOneByte(B)Z +Lcom/google/crypto/tink/shaded/protobuf/Utf8$Processor; +HSPLcom/google/crypto/tink/shaded/protobuf/Utf8$Processor;->()V +Lcom/google/crypto/tink/shaded/protobuf/Utf8$SafeProcessor; +HSPLcom/google/crypto/tink/shaded/protobuf/Utf8$SafeProcessor;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/Utf8$SafeProcessor;->decodeUtf8([BII)Ljava/lang/String; +HSPLcom/google/crypto/tink/shaded/protobuf/Utf8$SafeProcessor;->encodeUtf8(Ljava/lang/CharSequence;[BII)I +Lcom/google/crypto/tink/shaded/protobuf/Utf8$UnpairedSurrogateException; +Lcom/google/crypto/tink/shaded/protobuf/Utf8$UnsafeProcessor; +HSPLcom/google/crypto/tink/shaded/protobuf/Utf8$UnsafeProcessor;->isAvailable()Z +Lcom/google/crypto/tink/shaded/protobuf/WireFormat; +HSPLcom/google/crypto/tink/shaded/protobuf/WireFormat;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/WireFormat;->getTagFieldNumber(I)I +HSPLcom/google/crypto/tink/shaded/protobuf/WireFormat;->getTagWireType(I)I +HSPLcom/google/crypto/tink/shaded/protobuf/WireFormat;->makeTag(II)I +Lcom/google/crypto/tink/shaded/protobuf/Writer; +Lcom/google/crypto/tink/shaded/protobuf/Writer$FieldOrder; +HSPLcom/google/crypto/tink/shaded/protobuf/Writer$FieldOrder;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/Writer$FieldOrder;->(Ljava/lang/String;I)V +Lcom/google/crypto/tink/subtle/AesGcmJce; +HSPLcom/google/crypto/tink/subtle/AesGcmJce;->()V +HSPLcom/google/crypto/tink/subtle/AesGcmJce;->([B)V +HSPLcom/google/crypto/tink/subtle/AesGcmJce;->decrypt([B[B)[B +HSPLcom/google/crypto/tink/subtle/AesGcmJce;->encrypt([B[B)[B +Lcom/google/crypto/tink/subtle/AesSiv; +HSPLcom/google/crypto/tink/subtle/AesSiv;->()V +HSPLcom/google/crypto/tink/subtle/AesSiv;->([B)V +HSPLcom/google/crypto/tink/subtle/AesSiv;->encryptDeterministically([B[B)[B +HSPLcom/google/crypto/tink/subtle/AesSiv;->s2v([[B)[B +Lcom/google/crypto/tink/subtle/Base64; +HSPLcom/google/crypto/tink/subtle/Base64;->()V +HSPLcom/google/crypto/tink/subtle/Base64;->decode(Ljava/lang/String;I)[B +HSPLcom/google/crypto/tink/subtle/Base64;->decode([BI)[B +HSPLcom/google/crypto/tink/subtle/Base64;->decode([BIII)[B +HSPLcom/google/crypto/tink/subtle/Base64;->encode([B)Ljava/lang/String; +HSPLcom/google/crypto/tink/subtle/Base64;->encode([BI)[B +HSPLcom/google/crypto/tink/subtle/Base64;->encode([BIII)[B +HSPLcom/google/crypto/tink/subtle/Base64;->encodeToString([BI)Ljava/lang/String; +Lcom/google/crypto/tink/subtle/Base64$Coder; +HSPLcom/google/crypto/tink/subtle/Base64$Coder;->()V +Lcom/google/crypto/tink/subtle/Base64$Decoder; +HSPLcom/google/crypto/tink/subtle/Base64$Decoder;->()V +PLcom/google/crypto/tink/subtle/Base64$Decoder;->(I[B)V +HSPLcom/google/crypto/tink/subtle/Base64$Decoder;->process([BIIZ)Z +Lcom/google/crypto/tink/subtle/Base64$Encoder; +HSPLcom/google/crypto/tink/subtle/Base64$Encoder;->()V +HSPLcom/google/crypto/tink/subtle/Base64$Encoder;->(I[B)V +HSPLcom/google/crypto/tink/subtle/Base64$Encoder;->process([BIIZ)Z +Lcom/google/crypto/tink/subtle/Bytes; +HSPLcom/google/crypto/tink/subtle/Bytes;->concat([[B)[B +HSPLcom/google/crypto/tink/subtle/Bytes;->xor([BI[BII)[B +HSPLcom/google/crypto/tink/subtle/Bytes;->xor([B[B)[B +HSPLcom/google/crypto/tink/subtle/Bytes;->xorEnd([B[B)[B +Lcom/google/crypto/tink/subtle/EngineFactory; +HSPLcom/google/crypto/tink/subtle/EngineFactory;->()V +HSPLcom/google/crypto/tink/subtle/EngineFactory;->(Lcom/google/crypto/tink/subtle/EngineWrapper;)V +HSPLcom/google/crypto/tink/subtle/EngineFactory;->getInstance(Ljava/lang/String;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/subtle/EngineFactory;->toProviderList([Ljava/lang/String;)Ljava/util/List; +Lcom/google/crypto/tink/subtle/EngineFactory$AndroidPolicy; +HSPLcom/google/crypto/tink/subtle/EngineFactory$AndroidPolicy;->(Lcom/google/crypto/tink/subtle/EngineWrapper;)V +HSPLcom/google/crypto/tink/subtle/EngineFactory$AndroidPolicy;->(Lcom/google/crypto/tink/subtle/EngineWrapper;Lcom/google/crypto/tink/subtle/EngineFactory$1;)V +HSPLcom/google/crypto/tink/subtle/EngineFactory$AndroidPolicy;->getInstance(Ljava/lang/String;)Ljava/lang/Object; +Lcom/google/crypto/tink/subtle/EngineFactory$Policy; +Lcom/google/crypto/tink/subtle/EngineWrapper; +Lcom/google/crypto/tink/subtle/EngineWrapper$TCipher; +HSPLcom/google/crypto/tink/subtle/EngineWrapper$TCipher;->()V +HSPLcom/google/crypto/tink/subtle/EngineWrapper$TCipher;->getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/subtle/EngineWrapper$TCipher;->getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljavax/crypto/Cipher; +Lcom/google/crypto/tink/subtle/EngineWrapper$TKeyAgreement; +HSPLcom/google/crypto/tink/subtle/EngineWrapper$TKeyAgreement;->()V +Lcom/google/crypto/tink/subtle/EngineWrapper$TKeyFactory; +HSPLcom/google/crypto/tink/subtle/EngineWrapper$TKeyFactory;->()V +Lcom/google/crypto/tink/subtle/EngineWrapper$TKeyPairGenerator; +HSPLcom/google/crypto/tink/subtle/EngineWrapper$TKeyPairGenerator;->()V +Lcom/google/crypto/tink/subtle/EngineWrapper$TMac; +HSPLcom/google/crypto/tink/subtle/EngineWrapper$TMac;->()V +Lcom/google/crypto/tink/subtle/EngineWrapper$TMessageDigest; +HSPLcom/google/crypto/tink/subtle/EngineWrapper$TMessageDigest;->()V +Lcom/google/crypto/tink/subtle/EngineWrapper$TSignature; +HSPLcom/google/crypto/tink/subtle/EngineWrapper$TSignature;->()V +Lcom/google/crypto/tink/subtle/Hex; +HSPLcom/google/crypto/tink/subtle/Hex;->decode(Ljava/lang/String;)[B +HSPLcom/google/crypto/tink/subtle/Hex;->encode([B)Ljava/lang/String; +Lcom/google/crypto/tink/subtle/PrfAesCmac; +HSPLcom/google/crypto/tink/subtle/PrfAesCmac;->()V +HSPLcom/google/crypto/tink/subtle/PrfAesCmac;->([B)V +HSPLcom/google/crypto/tink/subtle/PrfAesCmac;->compute([BI)[B +HSPLcom/google/crypto/tink/subtle/PrfAesCmac;->generateSubKeys()V +HSPLcom/google/crypto/tink/subtle/PrfAesCmac;->instance()Ljavax/crypto/Cipher; +Lcom/google/crypto/tink/subtle/Random; +HSPLcom/google/crypto/tink/subtle/Random;->()V +HSPLcom/google/crypto/tink/subtle/Random;->access$000()Ljava/security/SecureRandom; +HSPLcom/google/crypto/tink/subtle/Random;->newDefaultSecureRandom()Ljava/security/SecureRandom; +HSPLcom/google/crypto/tink/subtle/Random;->randBytes(I)[B +Lcom/google/crypto/tink/subtle/Random$1; +HSPLcom/google/crypto/tink/subtle/Random$1;->()V +HSPLcom/google/crypto/tink/subtle/Random$1;->initialValue()Ljava/lang/Object; +HSPLcom/google/crypto/tink/subtle/Random$1;->initialValue()Ljava/security/SecureRandom; +Lcom/google/crypto/tink/subtle/SubtleUtil; +HSPLcom/google/crypto/tink/subtle/SubtleUtil;->androidApiLevel()I +HSPLcom/google/crypto/tink/subtle/SubtleUtil;->isAndroid()Z +Lcom/google/crypto/tink/subtle/Validators; +HSPLcom/google/crypto/tink/subtle/Validators;->()V +HSPLcom/google/crypto/tink/subtle/Validators;->validateAesKeySize(I)V +HSPLcom/google/crypto/tink/subtle/Validators;->validateKmsKeyUriAndRemovePrefix(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; +HSPLcom/google/crypto/tink/subtle/Validators;->validateVersion(II)V +Lcom/google/crypto/tink/util/Bytes; +HSPLcom/google/crypto/tink/util/Bytes;->([BII)V +HSPLcom/google/crypto/tink/util/Bytes;->copyFrom([B)Lcom/google/crypto/tink/util/Bytes; +HSPLcom/google/crypto/tink/util/Bytes;->copyFrom([BII)Lcom/google/crypto/tink/util/Bytes; +HSPLcom/google/crypto/tink/util/Bytes;->equals(Ljava/lang/Object;)Z +HSPLcom/google/crypto/tink/util/Bytes;->hashCode()I +HSPLcom/google/crypto/tink/util/Bytes;->size()I +Lcom/google/crypto/tink/util/SecretBytes; +HSPLcom/google/crypto/tink/util/SecretBytes;->(Lcom/google/crypto/tink/util/Bytes;)V +HSPLcom/google/crypto/tink/util/SecretBytes;->copyFrom([BLcom/google/crypto/tink/SecretKeyAccess;)Lcom/google/crypto/tink/util/SecretBytes; +HSPLcom/google/crypto/tink/util/SecretBytes;->size()I +Lcom/google/firebase/AutoValue_StartupTime; +HSPLcom/google/firebase/AutoValue_StartupTime;->(JJJ)V +Lcom/google/firebase/DataCollectionDefaultChange; +Lcom/google/firebase/FirebaseApp; +HSPLcom/google/firebase/FirebaseApp;->()V +HSPLcom/google/firebase/FirebaseApp;->(Landroid/content/Context;Ljava/lang/String;Lcom/google/firebase/FirebaseOptions;)V +HSPLcom/google/firebase/FirebaseApp;->addBackgroundStateChangeListener(Lcom/google/firebase/FirebaseApp$BackgroundStateChangeListener;)V +HSPLcom/google/firebase/FirebaseApp;->checkNotDeleted()V +HSPLcom/google/firebase/FirebaseApp;->get(Ljava/lang/Class;)Ljava/lang/Object; +HSPLcom/google/firebase/FirebaseApp;->getApplicationContext()Landroid/content/Context; +HSPLcom/google/firebase/FirebaseApp;->getInstance()Lcom/google/firebase/FirebaseApp; +HSPLcom/google/firebase/FirebaseApp;->getName()Ljava/lang/String; +HSPLcom/google/firebase/FirebaseApp;->getOptions()Lcom/google/firebase/FirebaseOptions; +HSPLcom/google/firebase/FirebaseApp;->getPersistenceKey()Ljava/lang/String; +HSPLcom/google/firebase/FirebaseApp;->initializeAllApis()V +HSPLcom/google/firebase/FirebaseApp;->initializeApp(Landroid/content/Context;)Lcom/google/firebase/FirebaseApp; +HSPLcom/google/firebase/FirebaseApp;->initializeApp(Landroid/content/Context;Lcom/google/firebase/FirebaseOptions;)Lcom/google/firebase/FirebaseApp; +HSPLcom/google/firebase/FirebaseApp;->initializeApp(Landroid/content/Context;Lcom/google/firebase/FirebaseOptions;Ljava/lang/String;)Lcom/google/firebase/FirebaseApp; +HSPLcom/google/firebase/FirebaseApp;->isDataCollectionDefaultEnabled()Z +HSPLcom/google/firebase/FirebaseApp;->isDefaultApp()Z +HSPLcom/google/firebase/FirebaseApp;->lambda$new$0$com-google-firebase-FirebaseApp(Landroid/content/Context;)Lcom/google/firebase/internal/DataCollectionConfigStorage; +HSPLcom/google/firebase/FirebaseApp;->normalize(Ljava/lang/String;)Ljava/lang/String; +Lcom/google/firebase/FirebaseApp$$ExternalSyntheticLambda0; +HSPLcom/google/firebase/FirebaseApp$$ExternalSyntheticLambda0;->(Lcom/google/firebase/FirebaseApp;Landroid/content/Context;)V +HSPLcom/google/firebase/FirebaseApp$$ExternalSyntheticLambda0;->get()Ljava/lang/Object; +Lcom/google/firebase/FirebaseApp$$ExternalSyntheticLambda1; +HSPLcom/google/firebase/FirebaseApp$$ExternalSyntheticLambda1;->(Lcom/google/firebase/FirebaseApp;)V +Lcom/google/firebase/FirebaseApp$BackgroundStateChangeListener; +Lcom/google/firebase/FirebaseApp$GlobalBackgroundStateListener; +HSPLcom/google/firebase/FirebaseApp$GlobalBackgroundStateListener;->()V +HSPLcom/google/firebase/FirebaseApp$GlobalBackgroundStateListener;->()V +HSPLcom/google/firebase/FirebaseApp$GlobalBackgroundStateListener;->access$000(Landroid/content/Context;)V +HSPLcom/google/firebase/FirebaseApp$GlobalBackgroundStateListener;->ensureBackgroundStateListenerRegistered(Landroid/content/Context;)V +Lcom/google/firebase/FirebaseCommonKtxRegistrar; +HSPLcom/google/firebase/FirebaseCommonKtxRegistrar;->()V +HSPLcom/google/firebase/FirebaseCommonKtxRegistrar;->getComponents()Ljava/util/List; +Lcom/google/firebase/FirebaseCommonKtxRegistrar$getComponents$$inlined$coroutineDispatcher$1; +HSPLcom/google/firebase/FirebaseCommonKtxRegistrar$getComponents$$inlined$coroutineDispatcher$1;->()V +HSPLcom/google/firebase/FirebaseCommonKtxRegistrar$getComponents$$inlined$coroutineDispatcher$1;->()V +HSPLcom/google/firebase/FirebaseCommonKtxRegistrar$getComponents$$inlined$coroutineDispatcher$1;->create(Lcom/google/firebase/components/ComponentContainer;)Ljava/lang/Object; +HSPLcom/google/firebase/FirebaseCommonKtxRegistrar$getComponents$$inlined$coroutineDispatcher$1;->create(Lcom/google/firebase/components/ComponentContainer;)Lkotlinx/coroutines/CoroutineDispatcher; +Lcom/google/firebase/FirebaseCommonKtxRegistrar$getComponents$$inlined$coroutineDispatcher$2; +HSPLcom/google/firebase/FirebaseCommonKtxRegistrar$getComponents$$inlined$coroutineDispatcher$2;->()V +HSPLcom/google/firebase/FirebaseCommonKtxRegistrar$getComponents$$inlined$coroutineDispatcher$2;->()V +Lcom/google/firebase/FirebaseCommonKtxRegistrar$getComponents$$inlined$coroutineDispatcher$3; +HSPLcom/google/firebase/FirebaseCommonKtxRegistrar$getComponents$$inlined$coroutineDispatcher$3;->()V +HSPLcom/google/firebase/FirebaseCommonKtxRegistrar$getComponents$$inlined$coroutineDispatcher$3;->()V +HSPLcom/google/firebase/FirebaseCommonKtxRegistrar$getComponents$$inlined$coroutineDispatcher$3;->create(Lcom/google/firebase/components/ComponentContainer;)Ljava/lang/Object; +HSPLcom/google/firebase/FirebaseCommonKtxRegistrar$getComponents$$inlined$coroutineDispatcher$3;->create(Lcom/google/firebase/components/ComponentContainer;)Lkotlinx/coroutines/CoroutineDispatcher; +Lcom/google/firebase/FirebaseCommonKtxRegistrar$getComponents$$inlined$coroutineDispatcher$4; +HSPLcom/google/firebase/FirebaseCommonKtxRegistrar$getComponents$$inlined$coroutineDispatcher$4;->()V +HSPLcom/google/firebase/FirebaseCommonKtxRegistrar$getComponents$$inlined$coroutineDispatcher$4;->()V +Lcom/google/firebase/FirebaseCommonRegistrar; +HSPLcom/google/firebase/FirebaseCommonRegistrar;->()V +HSPLcom/google/firebase/FirebaseCommonRegistrar;->getComponents()Ljava/util/List; +HSPLcom/google/firebase/FirebaseCommonRegistrar;->lambda$getComponents$0(Landroid/content/Context;)Ljava/lang/String; +HSPLcom/google/firebase/FirebaseCommonRegistrar;->lambda$getComponents$1(Landroid/content/Context;)Ljava/lang/String; +HSPLcom/google/firebase/FirebaseCommonRegistrar;->lambda$getComponents$2(Landroid/content/Context;)Ljava/lang/String; +HSPLcom/google/firebase/FirebaseCommonRegistrar;->lambda$getComponents$3(Landroid/content/Context;)Ljava/lang/String; +HSPLcom/google/firebase/FirebaseCommonRegistrar;->safeValue(Ljava/lang/String;)Ljava/lang/String; +Lcom/google/firebase/FirebaseCommonRegistrar$$ExternalSyntheticLambda0; +HSPLcom/google/firebase/FirebaseCommonRegistrar$$ExternalSyntheticLambda0;->()V +HSPLcom/google/firebase/FirebaseCommonRegistrar$$ExternalSyntheticLambda0;->extract(Ljava/lang/Object;)Ljava/lang/String; +Lcom/google/firebase/FirebaseCommonRegistrar$$ExternalSyntheticLambda1; +HSPLcom/google/firebase/FirebaseCommonRegistrar$$ExternalSyntheticLambda1;->()V +HSPLcom/google/firebase/FirebaseCommonRegistrar$$ExternalSyntheticLambda1;->extract(Ljava/lang/Object;)Ljava/lang/String; +Lcom/google/firebase/FirebaseCommonRegistrar$$ExternalSyntheticLambda2; +HSPLcom/google/firebase/FirebaseCommonRegistrar$$ExternalSyntheticLambda2;->()V +HSPLcom/google/firebase/FirebaseCommonRegistrar$$ExternalSyntheticLambda2;->extract(Ljava/lang/Object;)Ljava/lang/String; +Lcom/google/firebase/FirebaseCommonRegistrar$$ExternalSyntheticLambda3; +HSPLcom/google/firebase/FirebaseCommonRegistrar$$ExternalSyntheticLambda3;->()V +HSPLcom/google/firebase/FirebaseCommonRegistrar$$ExternalSyntheticLambda3;->extract(Ljava/lang/Object;)Ljava/lang/String; +Lcom/google/firebase/FirebaseException; +Lcom/google/firebase/FirebaseOptions; +HSPLcom/google/firebase/FirebaseOptions;->(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V +HSPLcom/google/firebase/FirebaseOptions;->fromResource(Landroid/content/Context;)Lcom/google/firebase/FirebaseOptions; +HSPLcom/google/firebase/FirebaseOptions;->getApplicationId()Ljava/lang/String; +Lcom/google/firebase/StartupTime; +HSPLcom/google/firebase/StartupTime;->()V +HSPLcom/google/firebase/StartupTime;->create(JJJ)Lcom/google/firebase/StartupTime; +HSPLcom/google/firebase/StartupTime;->now()Lcom/google/firebase/StartupTime; +Lcom/google/firebase/analytics/FirebaseAnalytics; +Lcom/google/firebase/analytics/connector/AnalyticsConnector; +Lcom/google/firebase/analytics/connector/AnalyticsConnector$AnalyticsConnectorHandle; +Lcom/google/firebase/analytics/connector/AnalyticsConnector$AnalyticsConnectorListener; +Lcom/google/firebase/analytics/connector/AnalyticsConnectorImpl; +HSPLcom/google/firebase/analytics/connector/AnalyticsConnectorImpl;->(Lcom/google/android/gms/measurement/api/AppMeasurementSdk;)V +HSPLcom/google/firebase/analytics/connector/AnalyticsConnectorImpl;->getInstance(Lcom/google/firebase/FirebaseApp;Landroid/content/Context;Lcom/google/firebase/events/Subscriber;)Lcom/google/firebase/analytics/connector/AnalyticsConnector; +HSPLcom/google/firebase/analytics/connector/AnalyticsConnectorImpl;->registerAnalyticsConnectorListener(Ljava/lang/String;Lcom/google/firebase/analytics/connector/AnalyticsConnector$AnalyticsConnectorListener;)Lcom/google/firebase/analytics/connector/AnalyticsConnector$AnalyticsConnectorHandle; +HSPLcom/google/firebase/analytics/connector/AnalyticsConnectorImpl;->zza(Ljava/lang/String;)Z +Lcom/google/firebase/analytics/connector/AnalyticsConnectorImpl$1; +HSPLcom/google/firebase/analytics/connector/AnalyticsConnectorImpl$1;->(Lcom/google/firebase/analytics/connector/AnalyticsConnectorImpl;Ljava/lang/String;)V +Lcom/google/firebase/analytics/connector/internal/AnalyticsConnectorRegistrar; +HSPLcom/google/firebase/analytics/connector/internal/AnalyticsConnectorRegistrar;->()V +HSPLcom/google/firebase/analytics/connector/internal/AnalyticsConnectorRegistrar;->getComponents()Ljava/util/List; +HSPLcom/google/firebase/analytics/connector/internal/AnalyticsConnectorRegistrar;->lambda$getComponents$0(Lcom/google/firebase/components/ComponentContainer;)Lcom/google/firebase/analytics/connector/AnalyticsConnector; +Lcom/google/firebase/analytics/connector/internal/zza; +Lcom/google/firebase/analytics/connector/internal/zzb; +HSPLcom/google/firebase/analytics/connector/internal/zzb;->()V +HSPLcom/google/firebase/analytics/connector/internal/zzb;->zzf(Ljava/lang/String;)Z +Lcom/google/firebase/analytics/connector/internal/zzc; +HSPLcom/google/firebase/analytics/connector/internal/zzc;->()V +HSPLcom/google/firebase/analytics/connector/internal/zzc;->()V +HSPLcom/google/firebase/analytics/connector/internal/zzc;->create(Lcom/google/firebase/components/ComponentContainer;)Ljava/lang/Object; +Lcom/google/firebase/analytics/connector/internal/zzf; +HSPLcom/google/firebase/analytics/connector/internal/zzf;->(Lcom/google/firebase/analytics/connector/internal/zzg;)V +Lcom/google/firebase/analytics/connector/internal/zzg; +HSPLcom/google/firebase/analytics/connector/internal/zzg;->(Lcom/google/android/gms/measurement/api/AppMeasurementSdk;Lcom/google/firebase/analytics/connector/AnalyticsConnector$AnalyticsConnectorListener;)V +Lcom/google/firebase/analytics/connector/zza; +HSPLcom/google/firebase/analytics/connector/zza;->()V +HSPLcom/google/firebase/analytics/connector/zza;->()V +Lcom/google/firebase/analytics/connector/zzb; +HSPLcom/google/firebase/analytics/connector/zzb;->()V +HSPLcom/google/firebase/analytics/connector/zzb;->()V +Lcom/google/firebase/analytics/ktx/FirebaseAnalyticsLegacyRegistrar; +HSPLcom/google/firebase/analytics/ktx/FirebaseAnalyticsLegacyRegistrar;->()V +HSPLcom/google/firebase/analytics/ktx/FirebaseAnalyticsLegacyRegistrar;->getComponents()Ljava/util/List; +Lcom/google/firebase/annotations/concurrent/Background; +Lcom/google/firebase/annotations/concurrent/Blocking; +Lcom/google/firebase/annotations/concurrent/Lightweight; +Lcom/google/firebase/annotations/concurrent/UiThread; +Lcom/google/firebase/components/Component; +HSPLcom/google/firebase/components/Component;->(Ljava/lang/String;Ljava/util/Set;Ljava/util/Set;IILcom/google/firebase/components/ComponentFactory;Ljava/util/Set;)V +HSPLcom/google/firebase/components/Component;->(Ljava/lang/String;Ljava/util/Set;Ljava/util/Set;IILcom/google/firebase/components/ComponentFactory;Ljava/util/Set;Lcom/google/firebase/components/Component$1;)V +HSPLcom/google/firebase/components/Component;->builder(Lcom/google/firebase/components/Qualified;)Lcom/google/firebase/components/Component$Builder; +HSPLcom/google/firebase/components/Component;->builder(Lcom/google/firebase/components/Qualified;[Lcom/google/firebase/components/Qualified;)Lcom/google/firebase/components/Component$Builder; +HSPLcom/google/firebase/components/Component;->builder(Ljava/lang/Class;)Lcom/google/firebase/components/Component$Builder; +HSPLcom/google/firebase/components/Component;->builder(Ljava/lang/Class;[Ljava/lang/Class;)Lcom/google/firebase/components/Component$Builder; +HSPLcom/google/firebase/components/Component;->getDependencies()Ljava/util/Set; +HSPLcom/google/firebase/components/Component;->getFactory()Lcom/google/firebase/components/ComponentFactory; +HSPLcom/google/firebase/components/Component;->getName()Ljava/lang/String; +HSPLcom/google/firebase/components/Component;->getProvidedInterfaces()Ljava/util/Set; +HSPLcom/google/firebase/components/Component;->getPublishedEvents()Ljava/util/Set; +HSPLcom/google/firebase/components/Component;->intoSet(Ljava/lang/Object;Ljava/lang/Class;)Lcom/google/firebase/components/Component; +HSPLcom/google/firebase/components/Component;->intoSetBuilder(Ljava/lang/Class;)Lcom/google/firebase/components/Component$Builder; +HSPLcom/google/firebase/components/Component;->isAlwaysEager()Z +HSPLcom/google/firebase/components/Component;->isEagerInDefaultApp()Z +HSPLcom/google/firebase/components/Component;->isValue()Z +HSPLcom/google/firebase/components/Component;->lambda$intoSet$3(Ljava/lang/Object;Lcom/google/firebase/components/ComponentContainer;)Ljava/lang/Object; +HSPLcom/google/firebase/components/Component;->lambda$of$1(Ljava/lang/Object;Lcom/google/firebase/components/ComponentContainer;)Ljava/lang/Object; +HSPLcom/google/firebase/components/Component;->of(Ljava/lang/Object;Ljava/lang/Class;[Ljava/lang/Class;)Lcom/google/firebase/components/Component; +HSPLcom/google/firebase/components/Component;->withFactory(Lcom/google/firebase/components/ComponentFactory;)Lcom/google/firebase/components/Component; +Lcom/google/firebase/components/Component$$ExternalSyntheticLambda0; +HSPLcom/google/firebase/components/Component$$ExternalSyntheticLambda0;->(Ljava/lang/Object;)V +HSPLcom/google/firebase/components/Component$$ExternalSyntheticLambda0;->create(Lcom/google/firebase/components/ComponentContainer;)Ljava/lang/Object; +Lcom/google/firebase/components/Component$$ExternalSyntheticLambda1; +HSPLcom/google/firebase/components/Component$$ExternalSyntheticLambda1;->(Ljava/lang/Object;)V +HSPLcom/google/firebase/components/Component$$ExternalSyntheticLambda1;->create(Lcom/google/firebase/components/ComponentContainer;)Ljava/lang/Object; +Lcom/google/firebase/components/Component$Builder; +HSPLcom/google/firebase/components/Component$Builder;->(Lcom/google/firebase/components/Qualified;[Lcom/google/firebase/components/Qualified;)V +HSPLcom/google/firebase/components/Component$Builder;->(Lcom/google/firebase/components/Qualified;[Lcom/google/firebase/components/Qualified;Lcom/google/firebase/components/Component$1;)V +HSPLcom/google/firebase/components/Component$Builder;->(Ljava/lang/Class;[Ljava/lang/Class;)V +HSPLcom/google/firebase/components/Component$Builder;->(Ljava/lang/Class;[Ljava/lang/Class;Lcom/google/firebase/components/Component$1;)V +HSPLcom/google/firebase/components/Component$Builder;->access$200(Lcom/google/firebase/components/Component$Builder;)Lcom/google/firebase/components/Component$Builder; +HSPLcom/google/firebase/components/Component$Builder;->add(Lcom/google/firebase/components/Dependency;)Lcom/google/firebase/components/Component$Builder; +HSPLcom/google/firebase/components/Component$Builder;->build()Lcom/google/firebase/components/Component; +HSPLcom/google/firebase/components/Component$Builder;->eagerInDefaultApp()Lcom/google/firebase/components/Component$Builder; +HSPLcom/google/firebase/components/Component$Builder;->factory(Lcom/google/firebase/components/ComponentFactory;)Lcom/google/firebase/components/Component$Builder; +HSPLcom/google/firebase/components/Component$Builder;->intoSet()Lcom/google/firebase/components/Component$Builder; +HSPLcom/google/firebase/components/Component$Builder;->name(Ljava/lang/String;)Lcom/google/firebase/components/Component$Builder; +HSPLcom/google/firebase/components/Component$Builder;->setInstantiation(I)Lcom/google/firebase/components/Component$Builder; +HSPLcom/google/firebase/components/Component$Builder;->validateInterface(Lcom/google/firebase/components/Qualified;)V +Lcom/google/firebase/components/ComponentContainer; +HSPLcom/google/firebase/components/ComponentContainer;->get(Lcom/google/firebase/components/Qualified;)Ljava/lang/Object; +HSPLcom/google/firebase/components/ComponentContainer;->get(Ljava/lang/Class;)Ljava/lang/Object; +HSPLcom/google/firebase/components/ComponentContainer;->getProvider(Ljava/lang/Class;)Lcom/google/firebase/inject/Provider; +HSPLcom/google/firebase/components/ComponentContainer;->setOf(Lcom/google/firebase/components/Qualified;)Ljava/util/Set; +HSPLcom/google/firebase/components/ComponentContainer;->setOf(Ljava/lang/Class;)Ljava/util/Set; +Lcom/google/firebase/components/ComponentDiscovery; +HSPLcom/google/firebase/components/ComponentDiscovery;->(Ljava/lang/Object;Lcom/google/firebase/components/ComponentDiscovery$RegistrarNameRetriever;)V +HSPLcom/google/firebase/components/ComponentDiscovery;->discoverLazy()Ljava/util/List; +HSPLcom/google/firebase/components/ComponentDiscovery;->forContext(Landroid/content/Context;Ljava/lang/Class;)Lcom/google/firebase/components/ComponentDiscovery; +HSPLcom/google/firebase/components/ComponentDiscovery;->instantiate(Ljava/lang/String;)Lcom/google/firebase/components/ComponentRegistrar; +HSPLcom/google/firebase/components/ComponentDiscovery;->lambda$discoverLazy$0(Ljava/lang/String;)Lcom/google/firebase/components/ComponentRegistrar; +Lcom/google/firebase/components/ComponentDiscovery$$ExternalSyntheticLambda0; +HSPLcom/google/firebase/components/ComponentDiscovery$$ExternalSyntheticLambda0;->(Ljava/lang/String;)V +HSPLcom/google/firebase/components/ComponentDiscovery$$ExternalSyntheticLambda0;->get()Ljava/lang/Object; +Lcom/google/firebase/components/ComponentDiscovery$MetadataRegistrarNameRetriever; +HSPLcom/google/firebase/components/ComponentDiscovery$MetadataRegistrarNameRetriever;->(Ljava/lang/Class;)V +HSPLcom/google/firebase/components/ComponentDiscovery$MetadataRegistrarNameRetriever;->(Ljava/lang/Class;Lcom/google/firebase/components/ComponentDiscovery$1;)V +HSPLcom/google/firebase/components/ComponentDiscovery$MetadataRegistrarNameRetriever;->getMetadata(Landroid/content/Context;)Landroid/os/Bundle; +HSPLcom/google/firebase/components/ComponentDiscovery$MetadataRegistrarNameRetriever;->retrieve(Landroid/content/Context;)Ljava/util/List; +HSPLcom/google/firebase/components/ComponentDiscovery$MetadataRegistrarNameRetriever;->retrieve(Ljava/lang/Object;)Ljava/util/List; +Lcom/google/firebase/components/ComponentDiscovery$RegistrarNameRetriever; +Lcom/google/firebase/components/ComponentDiscoveryService; +Lcom/google/firebase/components/ComponentFactory; +Lcom/google/firebase/components/ComponentRegistrar; +Lcom/google/firebase/components/ComponentRegistrarProcessor; +HSPLcom/google/firebase/components/ComponentRegistrarProcessor;->()V +Lcom/google/firebase/components/ComponentRegistrarProcessor$$ExternalSyntheticLambda0; +HSPLcom/google/firebase/components/ComponentRegistrarProcessor$$ExternalSyntheticLambda0;->()V +HSPLcom/google/firebase/components/ComponentRegistrarProcessor$$ExternalSyntheticLambda0;->processRegistrar(Lcom/google/firebase/components/ComponentRegistrar;)Ljava/util/List; +Lcom/google/firebase/components/ComponentRuntime; +HSPLcom/google/firebase/components/ComponentRuntime;->()V +HSPLcom/google/firebase/components/ComponentRuntime;->(Ljava/util/concurrent/Executor;Ljava/lang/Iterable;Ljava/util/Collection;Lcom/google/firebase/components/ComponentRegistrarProcessor;)V +HSPLcom/google/firebase/components/ComponentRuntime;->(Ljava/util/concurrent/Executor;Ljava/lang/Iterable;Ljava/util/Collection;Lcom/google/firebase/components/ComponentRegistrarProcessor;Lcom/google/firebase/components/ComponentRuntime$1;)V +HSPLcom/google/firebase/components/ComponentRuntime;->builder(Ljava/util/concurrent/Executor;)Lcom/google/firebase/components/ComponentRuntime$Builder; +HSPLcom/google/firebase/components/ComponentRuntime;->discoverComponents(Ljava/util/List;)V +HSPLcom/google/firebase/components/ComponentRuntime;->doInitializeEagerComponents(Ljava/util/Map;Z)V +HSPLcom/google/firebase/components/ComponentRuntime;->getDeferred(Lcom/google/firebase/components/Qualified;)Lcom/google/firebase/inject/Deferred; +HSPLcom/google/firebase/components/ComponentRuntime;->getProvider(Lcom/google/firebase/components/Qualified;)Lcom/google/firebase/inject/Provider; +HSPLcom/google/firebase/components/ComponentRuntime;->initializeEagerComponents(Z)V +HSPLcom/google/firebase/components/ComponentRuntime;->iterableToList(Ljava/lang/Iterable;)Ljava/util/List; +HSPLcom/google/firebase/components/ComponentRuntime;->lambda$discoverComponents$0$com-google-firebase-components-ComponentRuntime(Lcom/google/firebase/components/Component;)Ljava/lang/Object; +HSPLcom/google/firebase/components/ComponentRuntime;->maybeInitializeEagerComponents()V +HSPLcom/google/firebase/components/ComponentRuntime;->processDependencies()V +HSPLcom/google/firebase/components/ComponentRuntime;->processInstanceComponents(Ljava/util/List;)Ljava/util/List; +HSPLcom/google/firebase/components/ComponentRuntime;->processSetComponents()Ljava/util/List; +HSPLcom/google/firebase/components/ComponentRuntime;->setOfProvider(Lcom/google/firebase/components/Qualified;)Lcom/google/firebase/inject/Provider; +Lcom/google/firebase/components/ComponentRuntime$$ExternalSyntheticLambda1; +HSPLcom/google/firebase/components/ComponentRuntime$$ExternalSyntheticLambda1;->(Lcom/google/firebase/components/ComponentRuntime;Lcom/google/firebase/components/Component;)V +HSPLcom/google/firebase/components/ComponentRuntime$$ExternalSyntheticLambda1;->get()Ljava/lang/Object; +Lcom/google/firebase/components/ComponentRuntime$$ExternalSyntheticLambda4; +HSPLcom/google/firebase/components/ComponentRuntime$$ExternalSyntheticLambda4;->()V +Lcom/google/firebase/components/ComponentRuntime$Builder; +HSPLcom/google/firebase/components/ComponentRuntime$Builder;->(Ljava/util/concurrent/Executor;)V +HSPLcom/google/firebase/components/ComponentRuntime$Builder;->addComponent(Lcom/google/firebase/components/Component;)Lcom/google/firebase/components/ComponentRuntime$Builder; +HSPLcom/google/firebase/components/ComponentRuntime$Builder;->addComponentRegistrar(Lcom/google/firebase/components/ComponentRegistrar;)Lcom/google/firebase/components/ComponentRuntime$Builder; +HSPLcom/google/firebase/components/ComponentRuntime$Builder;->addLazyComponentRegistrars(Ljava/util/Collection;)Lcom/google/firebase/components/ComponentRuntime$Builder; +HSPLcom/google/firebase/components/ComponentRuntime$Builder;->build()Lcom/google/firebase/components/ComponentRuntime; +HSPLcom/google/firebase/components/ComponentRuntime$Builder;->lambda$addComponentRegistrar$0(Lcom/google/firebase/components/ComponentRegistrar;)Lcom/google/firebase/components/ComponentRegistrar; +HSPLcom/google/firebase/components/ComponentRuntime$Builder;->setProcessor(Lcom/google/firebase/components/ComponentRegistrarProcessor;)Lcom/google/firebase/components/ComponentRuntime$Builder; +Lcom/google/firebase/components/ComponentRuntime$Builder$$ExternalSyntheticLambda0; +HSPLcom/google/firebase/components/ComponentRuntime$Builder$$ExternalSyntheticLambda0;->(Lcom/google/firebase/components/ComponentRegistrar;)V +HSPLcom/google/firebase/components/ComponentRuntime$Builder$$ExternalSyntheticLambda0;->get()Ljava/lang/Object; +Lcom/google/firebase/components/CycleDetector; +HSPLcom/google/firebase/components/CycleDetector;->detect(Ljava/util/List;)V +HSPLcom/google/firebase/components/CycleDetector;->getRoots(Ljava/util/Set;)Ljava/util/Set; +HSPLcom/google/firebase/components/CycleDetector;->toGraph(Ljava/util/List;)Ljava/util/Set; +Lcom/google/firebase/components/CycleDetector$ComponentNode; +HSPLcom/google/firebase/components/CycleDetector$ComponentNode;->(Lcom/google/firebase/components/Component;)V +HSPLcom/google/firebase/components/CycleDetector$ComponentNode;->addDependency(Lcom/google/firebase/components/CycleDetector$ComponentNode;)V +HSPLcom/google/firebase/components/CycleDetector$ComponentNode;->addDependent(Lcom/google/firebase/components/CycleDetector$ComponentNode;)V +HSPLcom/google/firebase/components/CycleDetector$ComponentNode;->getComponent()Lcom/google/firebase/components/Component; +HSPLcom/google/firebase/components/CycleDetector$ComponentNode;->getDependencies()Ljava/util/Set; +HSPLcom/google/firebase/components/CycleDetector$ComponentNode;->isRoot()Z +HSPLcom/google/firebase/components/CycleDetector$ComponentNode;->removeDependent(Lcom/google/firebase/components/CycleDetector$ComponentNode;)V +Lcom/google/firebase/components/CycleDetector$Dep; +HSPLcom/google/firebase/components/CycleDetector$Dep;->(Lcom/google/firebase/components/Qualified;Z)V +HSPLcom/google/firebase/components/CycleDetector$Dep;->(Lcom/google/firebase/components/Qualified;ZLcom/google/firebase/components/CycleDetector$1;)V +HSPLcom/google/firebase/components/CycleDetector$Dep;->access$100(Lcom/google/firebase/components/CycleDetector$Dep;)Z +HSPLcom/google/firebase/components/CycleDetector$Dep;->equals(Ljava/lang/Object;)Z +HSPLcom/google/firebase/components/CycleDetector$Dep;->hashCode()I +Lcom/google/firebase/components/Dependency; +HSPLcom/google/firebase/components/Dependency;->(Lcom/google/firebase/components/Qualified;II)V +HSPLcom/google/firebase/components/Dependency;->(Ljava/lang/Class;II)V +HSPLcom/google/firebase/components/Dependency;->deferred(Ljava/lang/Class;)Lcom/google/firebase/components/Dependency; +HSPLcom/google/firebase/components/Dependency;->getInterface()Lcom/google/firebase/components/Qualified; +HSPLcom/google/firebase/components/Dependency;->hashCode()I +HSPLcom/google/firebase/components/Dependency;->isDeferred()Z +HSPLcom/google/firebase/components/Dependency;->isDirectInjection()Z +HSPLcom/google/firebase/components/Dependency;->isRequired()Z +HSPLcom/google/firebase/components/Dependency;->isSet()Z +HSPLcom/google/firebase/components/Dependency;->optionalProvider(Ljava/lang/Class;)Lcom/google/firebase/components/Dependency; +HSPLcom/google/firebase/components/Dependency;->required(Lcom/google/firebase/components/Qualified;)Lcom/google/firebase/components/Dependency; +HSPLcom/google/firebase/components/Dependency;->required(Ljava/lang/Class;)Lcom/google/firebase/components/Dependency; +HSPLcom/google/firebase/components/Dependency;->requiredProvider(Lcom/google/firebase/components/Qualified;)Lcom/google/firebase/components/Dependency; +HSPLcom/google/firebase/components/Dependency;->requiredProvider(Ljava/lang/Class;)Lcom/google/firebase/components/Dependency; +HSPLcom/google/firebase/components/Dependency;->setOf(Ljava/lang/Class;)Lcom/google/firebase/components/Dependency; +Lcom/google/firebase/components/EventBus; +HSPLcom/google/firebase/components/EventBus;->(Ljava/util/concurrent/Executor;)V +HSPLcom/google/firebase/components/EventBus;->enablePublishingAndFlushPending()V +HSPLcom/google/firebase/components/EventBus;->subscribe(Ljava/lang/Class;Ljava/util/concurrent/Executor;Lcom/google/firebase/events/EventHandler;)V +Lcom/google/firebase/components/InvalidRegistrarException; +Lcom/google/firebase/components/Lazy; +HSPLcom/google/firebase/components/Lazy;->()V +HSPLcom/google/firebase/components/Lazy;->(Lcom/google/firebase/inject/Provider;)V +HSPLcom/google/firebase/components/Lazy;->get()Ljava/lang/Object; +Lcom/google/firebase/components/LazySet; +HSPLcom/google/firebase/components/LazySet;->(Ljava/util/Collection;)V +HSPLcom/google/firebase/components/LazySet;->fromCollection(Ljava/util/Collection;)Lcom/google/firebase/components/LazySet; +HSPLcom/google/firebase/components/LazySet;->get()Ljava/lang/Object; +HSPLcom/google/firebase/components/LazySet;->get()Ljava/util/Set; +HSPLcom/google/firebase/components/LazySet;->updateSet()V +Lcom/google/firebase/components/OptionalProvider; +HSPLcom/google/firebase/components/OptionalProvider;->()V +HSPLcom/google/firebase/components/OptionalProvider;->(Lcom/google/firebase/inject/Deferred$DeferredHandler;Lcom/google/firebase/inject/Provider;)V +HSPLcom/google/firebase/components/OptionalProvider;->empty()Lcom/google/firebase/components/OptionalProvider; +HSPLcom/google/firebase/components/OptionalProvider;->of(Lcom/google/firebase/inject/Provider;)Lcom/google/firebase/components/OptionalProvider; +HSPLcom/google/firebase/components/OptionalProvider;->whenAvailable(Lcom/google/firebase/inject/Deferred$DeferredHandler;)V +Lcom/google/firebase/components/OptionalProvider$$ExternalSyntheticLambda0; +HSPLcom/google/firebase/components/OptionalProvider$$ExternalSyntheticLambda0;->()V +Lcom/google/firebase/components/OptionalProvider$$ExternalSyntheticLambda1; +HSPLcom/google/firebase/components/OptionalProvider$$ExternalSyntheticLambda1;->()V +Lcom/google/firebase/components/OptionalProvider$$ExternalSyntheticLambda2; +HSPLcom/google/firebase/components/OptionalProvider$$ExternalSyntheticLambda2;->(Lcom/google/firebase/inject/Deferred$DeferredHandler;Lcom/google/firebase/inject/Deferred$DeferredHandler;)V +Lcom/google/firebase/components/Preconditions; +HSPLcom/google/firebase/components/Preconditions;->checkArgument(ZLjava/lang/String;)V +HSPLcom/google/firebase/components/Preconditions;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/firebase/components/Preconditions;->checkNotNull(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object; +HSPLcom/google/firebase/components/Preconditions;->checkState(ZLjava/lang/String;)V +Lcom/google/firebase/components/Qualified; +HSPLcom/google/firebase/components/Qualified;->(Ljava/lang/Class;Ljava/lang/Class;)V +HSPLcom/google/firebase/components/Qualified;->equals(Ljava/lang/Object;)Z +HSPLcom/google/firebase/components/Qualified;->hashCode()I +HSPLcom/google/firebase/components/Qualified;->qualified(Ljava/lang/Class;Ljava/lang/Class;)Lcom/google/firebase/components/Qualified; +HSPLcom/google/firebase/components/Qualified;->toString()Ljava/lang/String; +HSPLcom/google/firebase/components/Qualified;->unqualified(Ljava/lang/Class;)Lcom/google/firebase/components/Qualified; +Lcom/google/firebase/components/Qualified$Unqualified; +Lcom/google/firebase/components/RestrictedComponentContainer; +HSPLcom/google/firebase/components/RestrictedComponentContainer;->(Lcom/google/firebase/components/Component;Lcom/google/firebase/components/ComponentContainer;)V +HSPLcom/google/firebase/components/RestrictedComponentContainer;->get(Lcom/google/firebase/components/Qualified;)Ljava/lang/Object; +HSPLcom/google/firebase/components/RestrictedComponentContainer;->get(Ljava/lang/Class;)Ljava/lang/Object; +HSPLcom/google/firebase/components/RestrictedComponentContainer;->getDeferred(Lcom/google/firebase/components/Qualified;)Lcom/google/firebase/inject/Deferred; +HSPLcom/google/firebase/components/RestrictedComponentContainer;->getDeferred(Ljava/lang/Class;)Lcom/google/firebase/inject/Deferred; +HSPLcom/google/firebase/components/RestrictedComponentContainer;->getProvider(Lcom/google/firebase/components/Qualified;)Lcom/google/firebase/inject/Provider; +HSPLcom/google/firebase/components/RestrictedComponentContainer;->getProvider(Ljava/lang/Class;)Lcom/google/firebase/inject/Provider; +HSPLcom/google/firebase/components/RestrictedComponentContainer;->setOf(Lcom/google/firebase/components/Qualified;)Ljava/util/Set; +Lcom/google/firebase/concurrent/CustomThreadFactory; +HSPLcom/google/firebase/concurrent/CustomThreadFactory;->()V +HSPLcom/google/firebase/concurrent/CustomThreadFactory;->(Ljava/lang/String;ILandroid/os/StrictMode$ThreadPolicy;)V +HSPLcom/google/firebase/concurrent/CustomThreadFactory;->lambda$newThread$0$com-google-firebase-concurrent-CustomThreadFactory(Ljava/lang/Runnable;)V +HSPLcom/google/firebase/concurrent/CustomThreadFactory;->newThread(Ljava/lang/Runnable;)Ljava/lang/Thread; +Lcom/google/firebase/concurrent/CustomThreadFactory$$ExternalSyntheticLambda0; +HSPLcom/google/firebase/concurrent/CustomThreadFactory$$ExternalSyntheticLambda0;->(Lcom/google/firebase/concurrent/CustomThreadFactory;Ljava/lang/Runnable;)V +HSPLcom/google/firebase/concurrent/CustomThreadFactory$$ExternalSyntheticLambda0;->run()V +Lcom/google/firebase/concurrent/DelegatingScheduledExecutorService; +HSPLcom/google/firebase/concurrent/DelegatingScheduledExecutorService;->(Ljava/util/concurrent/ExecutorService;Ljava/util/concurrent/ScheduledExecutorService;)V +HSPLcom/google/firebase/concurrent/DelegatingScheduledExecutorService;->execute(Ljava/lang/Runnable;)V +Lcom/google/firebase/concurrent/ExecutorsRegistrar; +HSPLcom/google/firebase/concurrent/ExecutorsRegistrar;->()V +HSPLcom/google/firebase/concurrent/ExecutorsRegistrar;->()V +HSPLcom/google/firebase/concurrent/ExecutorsRegistrar;->bgPolicy()Landroid/os/StrictMode$ThreadPolicy; +HSPLcom/google/firebase/concurrent/ExecutorsRegistrar;->factory(Ljava/lang/String;I)Ljava/util/concurrent/ThreadFactory; +HSPLcom/google/firebase/concurrent/ExecutorsRegistrar;->factory(Ljava/lang/String;ILandroid/os/StrictMode$ThreadPolicy;)Ljava/util/concurrent/ThreadFactory; +HSPLcom/google/firebase/concurrent/ExecutorsRegistrar;->getComponents()Ljava/util/List; +HSPLcom/google/firebase/concurrent/ExecutorsRegistrar;->lambda$getComponents$4(Lcom/google/firebase/components/ComponentContainer;)Ljava/util/concurrent/ScheduledExecutorService; +HSPLcom/google/firebase/concurrent/ExecutorsRegistrar;->lambda$getComponents$5(Lcom/google/firebase/components/ComponentContainer;)Ljava/util/concurrent/ScheduledExecutorService; +HSPLcom/google/firebase/concurrent/ExecutorsRegistrar;->lambda$static$0()Ljava/util/concurrent/ScheduledExecutorService; +HSPLcom/google/firebase/concurrent/ExecutorsRegistrar;->lambda$static$2()Ljava/util/concurrent/ScheduledExecutorService; +HSPLcom/google/firebase/concurrent/ExecutorsRegistrar;->lambda$static$3()Ljava/util/concurrent/ScheduledExecutorService; +HSPLcom/google/firebase/concurrent/ExecutorsRegistrar;->scheduled(Ljava/util/concurrent/ExecutorService;)Ljava/util/concurrent/ScheduledExecutorService; +Lcom/google/firebase/concurrent/ExecutorsRegistrar$$ExternalSyntheticLambda0; +HSPLcom/google/firebase/concurrent/ExecutorsRegistrar$$ExternalSyntheticLambda0;->()V +HSPLcom/google/firebase/concurrent/ExecutorsRegistrar$$ExternalSyntheticLambda0;->create(Lcom/google/firebase/components/ComponentContainer;)Ljava/lang/Object; +Lcom/google/firebase/concurrent/ExecutorsRegistrar$$ExternalSyntheticLambda1; +HSPLcom/google/firebase/concurrent/ExecutorsRegistrar$$ExternalSyntheticLambda1;->()V +HSPLcom/google/firebase/concurrent/ExecutorsRegistrar$$ExternalSyntheticLambda1;->create(Lcom/google/firebase/components/ComponentContainer;)Ljava/lang/Object; +Lcom/google/firebase/concurrent/ExecutorsRegistrar$$ExternalSyntheticLambda2; +HSPLcom/google/firebase/concurrent/ExecutorsRegistrar$$ExternalSyntheticLambda2;->()V +Lcom/google/firebase/concurrent/ExecutorsRegistrar$$ExternalSyntheticLambda3; +HSPLcom/google/firebase/concurrent/ExecutorsRegistrar$$ExternalSyntheticLambda3;->()V +Lcom/google/firebase/concurrent/ExecutorsRegistrar$$ExternalSyntheticLambda4; +HSPLcom/google/firebase/concurrent/ExecutorsRegistrar$$ExternalSyntheticLambda4;->()V +HSPLcom/google/firebase/concurrent/ExecutorsRegistrar$$ExternalSyntheticLambda4;->get()Ljava/lang/Object; +Lcom/google/firebase/concurrent/ExecutorsRegistrar$$ExternalSyntheticLambda5; +HSPLcom/google/firebase/concurrent/ExecutorsRegistrar$$ExternalSyntheticLambda5;->()V +Lcom/google/firebase/concurrent/ExecutorsRegistrar$$ExternalSyntheticLambda6; +HSPLcom/google/firebase/concurrent/ExecutorsRegistrar$$ExternalSyntheticLambda6;->()V +HSPLcom/google/firebase/concurrent/ExecutorsRegistrar$$ExternalSyntheticLambda6;->get()Ljava/lang/Object; +Lcom/google/firebase/concurrent/ExecutorsRegistrar$$ExternalSyntheticLambda7; +HSPLcom/google/firebase/concurrent/ExecutorsRegistrar$$ExternalSyntheticLambda7;->()V +HSPLcom/google/firebase/concurrent/ExecutorsRegistrar$$ExternalSyntheticLambda7;->get()Ljava/lang/Object; +Lcom/google/firebase/concurrent/FirebaseExecutors; +HSPLcom/google/firebase/concurrent/FirebaseExecutors;->newSequentialExecutor(Ljava/util/concurrent/Executor;)Ljava/util/concurrent/Executor; +Lcom/google/firebase/concurrent/SequentialExecutor; +HSPLcom/google/firebase/concurrent/SequentialExecutor;->()V +HSPLcom/google/firebase/concurrent/SequentialExecutor;->(Ljava/util/concurrent/Executor;)V +Lcom/google/firebase/concurrent/SequentialExecutor$QueueWorker; +HSPLcom/google/firebase/concurrent/SequentialExecutor$QueueWorker;->(Lcom/google/firebase/concurrent/SequentialExecutor;)V +HSPLcom/google/firebase/concurrent/SequentialExecutor$QueueWorker;->(Lcom/google/firebase/concurrent/SequentialExecutor;Lcom/google/firebase/concurrent/SequentialExecutor$1;)V +Lcom/google/firebase/concurrent/SequentialExecutor$WorkerRunningState; +HSPLcom/google/firebase/concurrent/SequentialExecutor$WorkerRunningState;->()V +HSPLcom/google/firebase/concurrent/SequentialExecutor$WorkerRunningState;->(Ljava/lang/String;I)V +Lcom/google/firebase/concurrent/UiExecutor; +HSPLcom/google/firebase/concurrent/UiExecutor;->()V +HSPLcom/google/firebase/concurrent/UiExecutor;->(Ljava/lang/String;I)V +Lcom/google/firebase/crashlytics/AnalyticsDeferredProxy; +HSPLcom/google/firebase/crashlytics/AnalyticsDeferredProxy;->(Lcom/google/firebase/inject/Deferred;)V +HSPLcom/google/firebase/crashlytics/AnalyticsDeferredProxy;->(Lcom/google/firebase/inject/Deferred;Lcom/google/firebase/crashlytics/internal/breadcrumbs/BreadcrumbSource;Lcom/google/firebase/crashlytics/internal/analytics/AnalyticsEventLogger;)V +HSPLcom/google/firebase/crashlytics/AnalyticsDeferredProxy;->getAnalyticsEventLogger()Lcom/google/firebase/crashlytics/internal/analytics/AnalyticsEventLogger; +HSPLcom/google/firebase/crashlytics/AnalyticsDeferredProxy;->getDeferredBreadcrumbSource()Lcom/google/firebase/crashlytics/internal/breadcrumbs/BreadcrumbSource; +HSPLcom/google/firebase/crashlytics/AnalyticsDeferredProxy;->init()V +HSPLcom/google/firebase/crashlytics/AnalyticsDeferredProxy;->lambda$getDeferredBreadcrumbSource$0$com-google-firebase-crashlytics-AnalyticsDeferredProxy(Lcom/google/firebase/crashlytics/internal/breadcrumbs/BreadcrumbHandler;)V +HSPLcom/google/firebase/crashlytics/AnalyticsDeferredProxy;->lambda$init$2$com-google-firebase-crashlytics-AnalyticsDeferredProxy(Lcom/google/firebase/inject/Provider;)V +HSPLcom/google/firebase/crashlytics/AnalyticsDeferredProxy;->subscribeToAnalyticsEvents(Lcom/google/firebase/analytics/connector/AnalyticsConnector;Lcom/google/firebase/crashlytics/CrashlyticsAnalyticsListener;)Lcom/google/firebase/analytics/connector/AnalyticsConnector$AnalyticsConnectorHandle; +Lcom/google/firebase/crashlytics/AnalyticsDeferredProxy$$ExternalSyntheticLambda0; +HSPLcom/google/firebase/crashlytics/AnalyticsDeferredProxy$$ExternalSyntheticLambda0;->(Lcom/google/firebase/crashlytics/AnalyticsDeferredProxy;)V +HSPLcom/google/firebase/crashlytics/AnalyticsDeferredProxy$$ExternalSyntheticLambda0;->registerBreadcrumbHandler(Lcom/google/firebase/crashlytics/internal/breadcrumbs/BreadcrumbHandler;)V +Lcom/google/firebase/crashlytics/AnalyticsDeferredProxy$$ExternalSyntheticLambda1; +HSPLcom/google/firebase/crashlytics/AnalyticsDeferredProxy$$ExternalSyntheticLambda1;->(Lcom/google/firebase/crashlytics/AnalyticsDeferredProxy;)V +Lcom/google/firebase/crashlytics/AnalyticsDeferredProxy$$ExternalSyntheticLambda2; +HSPLcom/google/firebase/crashlytics/AnalyticsDeferredProxy$$ExternalSyntheticLambda2;->(Lcom/google/firebase/crashlytics/AnalyticsDeferredProxy;)V +HSPLcom/google/firebase/crashlytics/AnalyticsDeferredProxy$$ExternalSyntheticLambda2;->handle(Lcom/google/firebase/inject/Provider;)V +Lcom/google/firebase/crashlytics/CrashlyticsAnalyticsListener; +HSPLcom/google/firebase/crashlytics/CrashlyticsAnalyticsListener;->()V +HSPLcom/google/firebase/crashlytics/CrashlyticsAnalyticsListener;->setBreadcrumbEventReceiver(Lcom/google/firebase/crashlytics/internal/analytics/AnalyticsEventReceiver;)V +HSPLcom/google/firebase/crashlytics/CrashlyticsAnalyticsListener;->setCrashlyticsOriginEventReceiver(Lcom/google/firebase/crashlytics/internal/analytics/AnalyticsEventReceiver;)V +Lcom/google/firebase/crashlytics/CrashlyticsRegistrar; +HSPLcom/google/firebase/crashlytics/CrashlyticsRegistrar;->$r8$lambda$Pfd5XmDCFzNyAT9o9H6rDnTBQE4(Lcom/google/firebase/crashlytics/CrashlyticsRegistrar;Lcom/google/firebase/components/ComponentContainer;)Lcom/google/firebase/crashlytics/FirebaseCrashlytics; +HSPLcom/google/firebase/crashlytics/CrashlyticsRegistrar;->()V +HSPLcom/google/firebase/crashlytics/CrashlyticsRegistrar;->()V +HSPLcom/google/firebase/crashlytics/CrashlyticsRegistrar;->buildCrashlytics(Lcom/google/firebase/components/ComponentContainer;)Lcom/google/firebase/crashlytics/FirebaseCrashlytics; +HSPLcom/google/firebase/crashlytics/CrashlyticsRegistrar;->getComponents()Ljava/util/List; +Lcom/google/firebase/crashlytics/CrashlyticsRegistrar$$ExternalSyntheticLambda0; +HSPLcom/google/firebase/crashlytics/CrashlyticsRegistrar$$ExternalSyntheticLambda0;->(Lcom/google/firebase/crashlytics/CrashlyticsRegistrar;)V +HSPLcom/google/firebase/crashlytics/CrashlyticsRegistrar$$ExternalSyntheticLambda0;->create(Lcom/google/firebase/components/ComponentContainer;)Ljava/lang/Object; +Lcom/google/firebase/crashlytics/FirebaseCrashlytics; +HSPLcom/google/firebase/crashlytics/FirebaseCrashlytics;->(Lcom/google/firebase/crashlytics/internal/common/CrashlyticsCore;)V +HSPLcom/google/firebase/crashlytics/FirebaseCrashlytics;->getInstance()Lcom/google/firebase/crashlytics/FirebaseCrashlytics; +HSPLcom/google/firebase/crashlytics/FirebaseCrashlytics;->init(Lcom/google/firebase/FirebaseApp;Lcom/google/firebase/installations/FirebaseInstallationsApi;Lcom/google/firebase/inject/Deferred;Lcom/google/firebase/inject/Deferred;Lcom/google/firebase/inject/Deferred;)Lcom/google/firebase/crashlytics/FirebaseCrashlytics; +HSPLcom/google/firebase/crashlytics/FirebaseCrashlytics;->log(Ljava/lang/String;)V +HSPLcom/google/firebase/crashlytics/FirebaseCrashlytics;->setCrashlyticsCollectionEnabled(Ljava/lang/Boolean;)V +Lcom/google/firebase/crashlytics/FirebaseCrashlytics$1; +HSPLcom/google/firebase/crashlytics/FirebaseCrashlytics$1;->()V +Lcom/google/firebase/crashlytics/FirebaseCrashlytics$2; +HSPLcom/google/firebase/crashlytics/FirebaseCrashlytics$2;->(ZLcom/google/firebase/crashlytics/internal/common/CrashlyticsCore;Lcom/google/firebase/crashlytics/internal/settings/SettingsController;)V +HSPLcom/google/firebase/crashlytics/FirebaseCrashlytics$2;->call()Ljava/lang/Object; +HSPLcom/google/firebase/crashlytics/FirebaseCrashlytics$2;->call()Ljava/lang/Void; +Lcom/google/firebase/crashlytics/FirebaseCrashlyticsKtxRegistrar; +HSPLcom/google/firebase/crashlytics/FirebaseCrashlyticsKtxRegistrar;->()V +HSPLcom/google/firebase/crashlytics/FirebaseCrashlyticsKtxRegistrar;->()V +HSPLcom/google/firebase/crashlytics/FirebaseCrashlyticsKtxRegistrar;->getComponents()Ljava/util/List; +Lcom/google/firebase/crashlytics/FirebaseCrashlyticsKtxRegistrar$Companion; +HSPLcom/google/firebase/crashlytics/FirebaseCrashlyticsKtxRegistrar$Companion;->()V +HSPLcom/google/firebase/crashlytics/FirebaseCrashlyticsKtxRegistrar$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/google/firebase/crashlytics/IsEnabledKt; +HSPLcom/google/firebase/crashlytics/IsEnabledKt;->()V +HSPLcom/google/firebase/crashlytics/IsEnabledKt;->isEnabled(Lcom/google/firebase/crashlytics/FirebaseCrashlytics;)Ljava/lang/Boolean; +HSPLcom/google/firebase/crashlytics/IsEnabledKt;->setEnabled(Lcom/google/firebase/crashlytics/FirebaseCrashlytics;Ljava/lang/Boolean;)V +Lcom/google/firebase/crashlytics/internal/CrashlyticsNativeComponent; +Lcom/google/firebase/crashlytics/internal/CrashlyticsNativeComponentDeferredProxy; +HSPLcom/google/firebase/crashlytics/internal/CrashlyticsNativeComponentDeferredProxy;->()V +HSPLcom/google/firebase/crashlytics/internal/CrashlyticsNativeComponentDeferredProxy;->(Lcom/google/firebase/inject/Deferred;)V +HSPLcom/google/firebase/crashlytics/internal/CrashlyticsNativeComponentDeferredProxy;->hasCrashDataForSession(Ljava/lang/String;)Z +HSPLcom/google/firebase/crashlytics/internal/CrashlyticsNativeComponentDeferredProxy;->prepareNativeSession(Ljava/lang/String;Ljava/lang/String;JLcom/google/firebase/crashlytics/internal/model/StaticSessionData;)V +Lcom/google/firebase/crashlytics/internal/CrashlyticsNativeComponentDeferredProxy$$ExternalSyntheticLambda0; +HSPLcom/google/firebase/crashlytics/internal/CrashlyticsNativeComponentDeferredProxy$$ExternalSyntheticLambda0;->(Lcom/google/firebase/crashlytics/internal/CrashlyticsNativeComponentDeferredProxy;)V +Lcom/google/firebase/crashlytics/internal/CrashlyticsNativeComponentDeferredProxy$$ExternalSyntheticLambda1; +HSPLcom/google/firebase/crashlytics/internal/CrashlyticsNativeComponentDeferredProxy$$ExternalSyntheticLambda1;->(Ljava/lang/String;Ljava/lang/String;JLcom/google/firebase/crashlytics/internal/model/StaticSessionData;)V +Lcom/google/firebase/crashlytics/internal/CrashlyticsNativeComponentDeferredProxy$MissingNativeSessionFileProvider; +HSPLcom/google/firebase/crashlytics/internal/CrashlyticsNativeComponentDeferredProxy$MissingNativeSessionFileProvider;->()V +HSPLcom/google/firebase/crashlytics/internal/CrashlyticsNativeComponentDeferredProxy$MissingNativeSessionFileProvider;->(Lcom/google/firebase/crashlytics/internal/CrashlyticsNativeComponentDeferredProxy$1;)V +Lcom/google/firebase/crashlytics/internal/CrashlyticsRemoteConfigListener; +HSPLcom/google/firebase/crashlytics/internal/CrashlyticsRemoteConfigListener;->(Lcom/google/firebase/crashlytics/internal/metadata/UserMetadata;)V +Lcom/google/firebase/crashlytics/internal/DevelopmentPlatformProvider; +HSPLcom/google/firebase/crashlytics/internal/DevelopmentPlatformProvider;->(Landroid/content/Context;)V +HSPLcom/google/firebase/crashlytics/internal/DevelopmentPlatformProvider;->access$300(Lcom/google/firebase/crashlytics/internal/DevelopmentPlatformProvider;)Landroid/content/Context; +HSPLcom/google/firebase/crashlytics/internal/DevelopmentPlatformProvider;->access$400(Lcom/google/firebase/crashlytics/internal/DevelopmentPlatformProvider;Ljava/lang/String;)Z +HSPLcom/google/firebase/crashlytics/internal/DevelopmentPlatformProvider;->assetFileExists(Ljava/lang/String;)Z +HSPLcom/google/firebase/crashlytics/internal/DevelopmentPlatformProvider;->getDevelopmentPlatform()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/DevelopmentPlatformProvider;->getDevelopmentPlatformVersion()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/DevelopmentPlatformProvider;->initDevelopmentPlatform()Lcom/google/firebase/crashlytics/internal/DevelopmentPlatformProvider$DevelopmentPlatform; +Lcom/google/firebase/crashlytics/internal/DevelopmentPlatformProvider$DevelopmentPlatform; +HSPLcom/google/firebase/crashlytics/internal/DevelopmentPlatformProvider$DevelopmentPlatform;->(Lcom/google/firebase/crashlytics/internal/DevelopmentPlatformProvider;)V +HSPLcom/google/firebase/crashlytics/internal/DevelopmentPlatformProvider$DevelopmentPlatform;->(Lcom/google/firebase/crashlytics/internal/DevelopmentPlatformProvider;Lcom/google/firebase/crashlytics/internal/DevelopmentPlatformProvider$1;)V +HSPLcom/google/firebase/crashlytics/internal/DevelopmentPlatformProvider$DevelopmentPlatform;->access$000(Lcom/google/firebase/crashlytics/internal/DevelopmentPlatformProvider$DevelopmentPlatform;)Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/DevelopmentPlatformProvider$DevelopmentPlatform;->access$100(Lcom/google/firebase/crashlytics/internal/DevelopmentPlatformProvider$DevelopmentPlatform;)Ljava/lang/String; +Lcom/google/firebase/crashlytics/internal/Logger; +HSPLcom/google/firebase/crashlytics/internal/Logger;->()V +HSPLcom/google/firebase/crashlytics/internal/Logger;->(Ljava/lang/String;)V +HSPLcom/google/firebase/crashlytics/internal/Logger;->canLog(I)Z +HSPLcom/google/firebase/crashlytics/internal/Logger;->d(Ljava/lang/String;)V +HSPLcom/google/firebase/crashlytics/internal/Logger;->d(Ljava/lang/String;Ljava/lang/Throwable;)V +HSPLcom/google/firebase/crashlytics/internal/Logger;->getLogger()Lcom/google/firebase/crashlytics/internal/Logger; +HSPLcom/google/firebase/crashlytics/internal/Logger;->i(Ljava/lang/String;)V +HSPLcom/google/firebase/crashlytics/internal/Logger;->i(Ljava/lang/String;Ljava/lang/Throwable;)V +HSPLcom/google/firebase/crashlytics/internal/Logger;->v(Ljava/lang/String;)V +HSPLcom/google/firebase/crashlytics/internal/Logger;->v(Ljava/lang/String;Ljava/lang/Throwable;)V +Lcom/google/firebase/crashlytics/internal/NativeSessionFileProvider; +Lcom/google/firebase/crashlytics/internal/ProcessDetailsProvider; +HSPLcom/google/firebase/crashlytics/internal/ProcessDetailsProvider;->()V +HSPLcom/google/firebase/crashlytics/internal/ProcessDetailsProvider;->()V +Lcom/google/firebase/crashlytics/internal/RemoteConfigDeferredProxy; +HSPLcom/google/firebase/crashlytics/internal/RemoteConfigDeferredProxy;->(Lcom/google/firebase/inject/Deferred;)V +HSPLcom/google/firebase/crashlytics/internal/RemoteConfigDeferredProxy;->setupListener(Lcom/google/firebase/crashlytics/internal/metadata/UserMetadata;)V +Lcom/google/firebase/crashlytics/internal/RemoteConfigDeferredProxy$$ExternalSyntheticLambda0; +HSPLcom/google/firebase/crashlytics/internal/RemoteConfigDeferredProxy$$ExternalSyntheticLambda0;->(Lcom/google/firebase/crashlytics/internal/CrashlyticsRemoteConfigListener;)V +Lcom/google/firebase/crashlytics/internal/analytics/AnalyticsEventLogger; +Lcom/google/firebase/crashlytics/internal/analytics/AnalyticsEventReceiver; +Lcom/google/firebase/crashlytics/internal/analytics/BlockingAnalyticsEventLogger; +HSPLcom/google/firebase/crashlytics/internal/analytics/BlockingAnalyticsEventLogger;->(Lcom/google/firebase/crashlytics/internal/analytics/CrashlyticsOriginAnalyticsEventLogger;ILjava/util/concurrent/TimeUnit;)V +Lcom/google/firebase/crashlytics/internal/analytics/BreadcrumbAnalyticsEventReceiver; +HSPLcom/google/firebase/crashlytics/internal/analytics/BreadcrumbAnalyticsEventReceiver;->()V +HSPLcom/google/firebase/crashlytics/internal/analytics/BreadcrumbAnalyticsEventReceiver;->registerBreadcrumbHandler(Lcom/google/firebase/crashlytics/internal/breadcrumbs/BreadcrumbHandler;)V +Lcom/google/firebase/crashlytics/internal/analytics/CrashlyticsOriginAnalyticsEventLogger; +HSPLcom/google/firebase/crashlytics/internal/analytics/CrashlyticsOriginAnalyticsEventLogger;->(Lcom/google/firebase/analytics/connector/AnalyticsConnector;)V +Lcom/google/firebase/crashlytics/internal/analytics/UnavailableAnalyticsEventLogger; +HSPLcom/google/firebase/crashlytics/internal/analytics/UnavailableAnalyticsEventLogger;->()V +Lcom/google/firebase/crashlytics/internal/breadcrumbs/BreadcrumbHandler; +Lcom/google/firebase/crashlytics/internal/breadcrumbs/BreadcrumbSource; +Lcom/google/firebase/crashlytics/internal/breadcrumbs/DisabledBreadcrumbSource; +HSPLcom/google/firebase/crashlytics/internal/breadcrumbs/DisabledBreadcrumbSource;->()V +Lcom/google/firebase/crashlytics/internal/common/AppData; +HSPLcom/google/firebase/crashlytics/internal/common/AppData;->(Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/google/firebase/crashlytics/internal/DevelopmentPlatformProvider;)V +HSPLcom/google/firebase/crashlytics/internal/common/AppData;->create(Landroid/content/Context;Lcom/google/firebase/crashlytics/internal/common/IdManager;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Lcom/google/firebase/crashlytics/internal/DevelopmentPlatformProvider;)Lcom/google/firebase/crashlytics/internal/common/AppData; +HSPLcom/google/firebase/crashlytics/internal/common/AppData;->getAppBuildVersion(Landroid/content/pm/PackageInfo;)Ljava/lang/String; +Lcom/google/firebase/crashlytics/internal/common/AutoValue_InstallIdProvider_InstallIds; +HSPLcom/google/firebase/crashlytics/internal/common/AutoValue_InstallIdProvider_InstallIds;->(Ljava/lang/String;Ljava/lang/String;)V +HSPLcom/google/firebase/crashlytics/internal/common/AutoValue_InstallIdProvider_InstallIds;->getCrashlyticsInstallId()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/common/AutoValue_InstallIdProvider_InstallIds;->getFirebaseInstallationId()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/common/AutoValue_InstallIdProvider_InstallIds;->toString()Ljava/lang/String; +Lcom/google/firebase/crashlytics/internal/common/BackgroundPriorityRunnable; +HSPLcom/google/firebase/crashlytics/internal/common/BackgroundPriorityRunnable;->()V +HSPLcom/google/firebase/crashlytics/internal/common/BackgroundPriorityRunnable;->run()V +Lcom/google/firebase/crashlytics/internal/common/CLSUUID; +HSPLcom/google/firebase/crashlytics/internal/common/CLSUUID;->()V +HSPLcom/google/firebase/crashlytics/internal/common/CLSUUID;->(Lcom/google/firebase/crashlytics/internal/common/IdManager;)V +HSPLcom/google/firebase/crashlytics/internal/common/CLSUUID;->convertLongToFourByteBuffer(J)[B +HSPLcom/google/firebase/crashlytics/internal/common/CLSUUID;->convertLongToTwoByteBuffer(J)[B +HSPLcom/google/firebase/crashlytics/internal/common/CLSUUID;->populatePID([B)V +HSPLcom/google/firebase/crashlytics/internal/common/CLSUUID;->populateSequenceNumber([B)V +HSPLcom/google/firebase/crashlytics/internal/common/CLSUUID;->populateTime([B)V +HSPLcom/google/firebase/crashlytics/internal/common/CLSUUID;->toString()Ljava/lang/String; +Lcom/google/firebase/crashlytics/internal/common/CommonUtils; +HSPLcom/google/firebase/crashlytics/internal/common/CommonUtils;->()V +HSPLcom/google/firebase/crashlytics/internal/common/CommonUtils;->calculateTotalRamInBytes(Landroid/content/Context;)J +HSPLcom/google/firebase/crashlytics/internal/common/CommonUtils;->closeOrLog(Ljava/io/Closeable;Ljava/lang/String;)V +HSPLcom/google/firebase/crashlytics/internal/common/CommonUtils;->createInstanceIdFrom([Ljava/lang/String;)Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/common/CommonUtils;->getBooleanResourceValue(Landroid/content/Context;Ljava/lang/String;Z)Z +HSPLcom/google/firebase/crashlytics/internal/common/CommonUtils;->getBuildIdInfo(Landroid/content/Context;)Ljava/util/List; +HSPLcom/google/firebase/crashlytics/internal/common/CommonUtils;->getCpuArchitectureInt()I +HSPLcom/google/firebase/crashlytics/internal/common/CommonUtils;->getDeviceState()I +HSPLcom/google/firebase/crashlytics/internal/common/CommonUtils;->getMappingFileId(Landroid/content/Context;)Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/common/CommonUtils;->getResourcePackageName(Landroid/content/Context;)Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/common/CommonUtils;->getResourcesIdentifier(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;)I +HSPLcom/google/firebase/crashlytics/internal/common/CommonUtils;->getSharedPrefs(Landroid/content/Context;)Landroid/content/SharedPreferences; +HSPLcom/google/firebase/crashlytics/internal/common/CommonUtils;->hash(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/common/CommonUtils;->hash([BLjava/lang/String;)Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/common/CommonUtils;->hexify([B)Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/common/CommonUtils;->isDebuggerAttached()Z +HSPLcom/google/firebase/crashlytics/internal/common/CommonUtils;->isEmulator()Z +HSPLcom/google/firebase/crashlytics/internal/common/CommonUtils;->isRooted()Z +HSPLcom/google/firebase/crashlytics/internal/common/CommonUtils;->sha1(Ljava/lang/String;)Ljava/lang/String; +Lcom/google/firebase/crashlytics/internal/common/CommonUtils$Architecture; +HSPLcom/google/firebase/crashlytics/internal/common/CommonUtils$Architecture;->()V +HSPLcom/google/firebase/crashlytics/internal/common/CommonUtils$Architecture;->(Ljava/lang/String;I)V +HSPLcom/google/firebase/crashlytics/internal/common/CommonUtils$Architecture;->getValue()Lcom/google/firebase/crashlytics/internal/common/CommonUtils$Architecture; +Lcom/google/firebase/crashlytics/internal/common/CrashlyticsAppQualitySessionsStore; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsAppQualitySessionsStore;->()V +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsAppQualitySessionsStore;->(Lcom/google/firebase/crashlytics/internal/persistence/FileStore;)V +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsAppQualitySessionsStore;->persist(Lcom/google/firebase/crashlytics/internal/persistence/FileStore;Ljava/lang/String;Ljava/lang/String;)V +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsAppQualitySessionsStore;->rotateSessionId(Ljava/lang/String;)V +Lcom/google/firebase/crashlytics/internal/common/CrashlyticsAppQualitySessionsStore$$ExternalSyntheticLambda0; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsAppQualitySessionsStore$$ExternalSyntheticLambda0;->()V +Lcom/google/firebase/crashlytics/internal/common/CrashlyticsAppQualitySessionsStore$$ExternalSyntheticLambda1; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsAppQualitySessionsStore$$ExternalSyntheticLambda1;->()V +Lcom/google/firebase/crashlytics/internal/common/CrashlyticsAppQualitySessionsSubscriber; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsAppQualitySessionsSubscriber;->(Lcom/google/firebase/crashlytics/internal/common/DataCollectionArbiter;Lcom/google/firebase/crashlytics/internal/persistence/FileStore;)V +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsAppQualitySessionsSubscriber;->getSessionSubscriberName()Lcom/google/firebase/sessions/api/SessionSubscriber$Name; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsAppQualitySessionsSubscriber;->isDataCollectionEnabled()Z +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsAppQualitySessionsSubscriber;->setSessionId(Ljava/lang/String;)V +Lcom/google/firebase/crashlytics/internal/common/CrashlyticsBackgroundWorker; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsBackgroundWorker;->(Ljava/util/concurrent/Executor;)V +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsBackgroundWorker;->access$000(Lcom/google/firebase/crashlytics/internal/common/CrashlyticsBackgroundWorker;)Ljava/lang/ThreadLocal; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsBackgroundWorker;->checkRunningOnThread()V +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsBackgroundWorker;->ignoreResult(Lcom/google/android/gms/tasks/Task;)Lcom/google/android/gms/tasks/Task; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsBackgroundWorker;->isRunningOnThread()Z +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsBackgroundWorker;->newContinuation(Ljava/util/concurrent/Callable;)Lcom/google/android/gms/tasks/Continuation; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsBackgroundWorker;->submit(Ljava/util/concurrent/Callable;)Lcom/google/android/gms/tasks/Task; +Lcom/google/firebase/crashlytics/internal/common/CrashlyticsBackgroundWorker$1; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsBackgroundWorker$1;->(Lcom/google/firebase/crashlytics/internal/common/CrashlyticsBackgroundWorker;)V +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsBackgroundWorker$1;->run()V +Lcom/google/firebase/crashlytics/internal/common/CrashlyticsBackgroundWorker$3; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsBackgroundWorker$3;->(Lcom/google/firebase/crashlytics/internal/common/CrashlyticsBackgroundWorker;Ljava/util/concurrent/Callable;)V +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsBackgroundWorker$3;->then(Lcom/google/android/gms/tasks/Task;)Ljava/lang/Object; +Lcom/google/firebase/crashlytics/internal/common/CrashlyticsBackgroundWorker$4; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsBackgroundWorker$4;->(Lcom/google/firebase/crashlytics/internal/common/CrashlyticsBackgroundWorker;)V +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsBackgroundWorker$4;->then(Lcom/google/android/gms/tasks/Task;)Ljava/lang/Object; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsBackgroundWorker$4;->then(Lcom/google/android/gms/tasks/Task;)Ljava/lang/Void; +Lcom/google/firebase/crashlytics/internal/common/CrashlyticsController; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsController;->()V +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsController;->(Landroid/content/Context;Lcom/google/firebase/crashlytics/internal/common/CrashlyticsBackgroundWorker;Lcom/google/firebase/crashlytics/internal/common/IdManager;Lcom/google/firebase/crashlytics/internal/common/DataCollectionArbiter;Lcom/google/firebase/crashlytics/internal/persistence/FileStore;Lcom/google/firebase/crashlytics/internal/common/CrashlyticsFileMarker;Lcom/google/firebase/crashlytics/internal/common/AppData;Lcom/google/firebase/crashlytics/internal/metadata/UserMetadata;Lcom/google/firebase/crashlytics/internal/metadata/LogFileManager;Lcom/google/firebase/crashlytics/internal/common/SessionReportingCoordinator;Lcom/google/firebase/crashlytics/internal/CrashlyticsNativeComponent;Lcom/google/firebase/crashlytics/internal/analytics/AnalyticsEventLogger;Lcom/google/firebase/crashlytics/internal/common/CrashlyticsAppQualitySessionsSubscriber;)V +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsController;->access$1100(Lcom/google/firebase/crashlytics/internal/common/CrashlyticsController;)Lcom/google/firebase/crashlytics/internal/metadata/LogFileManager; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsController;->access$600(Lcom/google/firebase/crashlytics/internal/common/CrashlyticsController;Ljava/lang/String;Ljava/lang/Boolean;)V +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsController;->createAppData(Lcom/google/firebase/crashlytics/internal/common/IdManager;Lcom/google/firebase/crashlytics/internal/common/AppData;)Lcom/google/firebase/crashlytics/internal/model/StaticSessionData$AppData; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsController;->createDeviceData(Landroid/content/Context;)Lcom/google/firebase/crashlytics/internal/model/StaticSessionData$DeviceData; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsController;->createOsData()Lcom/google/firebase/crashlytics/internal/model/StaticSessionData$OsData; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsController;->didCrashOnPreviousExecution()Z +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsController;->doCloseSessions(ZLcom/google/firebase/crashlytics/internal/settings/SettingsProvider;)V +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsController;->doOpenSession(Ljava/lang/String;Ljava/lang/Boolean;)V +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsController;->enableExceptionHandling(Ljava/lang/String;Ljava/lang/Thread$UncaughtExceptionHandler;Lcom/google/firebase/crashlytics/internal/settings/SettingsProvider;)V +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsController;->finalizeSessions(Lcom/google/firebase/crashlytics/internal/settings/SettingsProvider;)Z +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsController;->getCurrentSessionId()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsController;->getCurrentTimestampSeconds()J +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsController;->getResourceAsStream(Ljava/lang/String;)Ljava/io/InputStream; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsController;->getTimestampSeconds(J)J +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsController;->getVersionControlInfo()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsController;->isHandlingException()Z +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsController;->openSession(Ljava/lang/String;)V +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsController;->saveVersionControlInfo()V +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsController;->submitAllReports(Lcom/google/android/gms/tasks/Task;)Lcom/google/android/gms/tasks/Task; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsController;->writeToLog(JLjava/lang/String;)V +Lcom/google/firebase/crashlytics/internal/common/CrashlyticsController$$ExternalSyntheticLambda0; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsController$$ExternalSyntheticLambda0;->()V +Lcom/google/firebase/crashlytics/internal/common/CrashlyticsController$1; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsController$1;->(Lcom/google/firebase/crashlytics/internal/common/CrashlyticsController;)V +Lcom/google/firebase/crashlytics/internal/common/CrashlyticsController$5; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsController$5;->(Lcom/google/firebase/crashlytics/internal/common/CrashlyticsController;JLjava/lang/String;)V +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsController$5;->call()Ljava/lang/Object; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsController$5;->call()Ljava/lang/Void; +Lcom/google/firebase/crashlytics/internal/common/CrashlyticsController$7; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsController$7;->(Lcom/google/firebase/crashlytics/internal/common/CrashlyticsController;Ljava/lang/String;)V +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsController$7;->call()Ljava/lang/Object; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsController$7;->call()Ljava/lang/Void; +Lcom/google/firebase/crashlytics/internal/common/CrashlyticsCore; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsCore;->(Lcom/google/firebase/FirebaseApp;Lcom/google/firebase/crashlytics/internal/common/IdManager;Lcom/google/firebase/crashlytics/internal/CrashlyticsNativeComponent;Lcom/google/firebase/crashlytics/internal/common/DataCollectionArbiter;Lcom/google/firebase/crashlytics/internal/breadcrumbs/BreadcrumbSource;Lcom/google/firebase/crashlytics/internal/analytics/AnalyticsEventLogger;Lcom/google/firebase/crashlytics/internal/persistence/FileStore;Ljava/util/concurrent/ExecutorService;Lcom/google/firebase/crashlytics/internal/common/CrashlyticsAppQualitySessionsSubscriber;Lcom/google/firebase/crashlytics/internal/RemoteConfigDeferredProxy;)V +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsCore;->access$000(Lcom/google/firebase/crashlytics/internal/common/CrashlyticsCore;Lcom/google/firebase/crashlytics/internal/settings/SettingsProvider;)Lcom/google/android/gms/tasks/Task; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsCore;->access$100(Lcom/google/firebase/crashlytics/internal/common/CrashlyticsCore;)Lcom/google/firebase/crashlytics/internal/common/CrashlyticsFileMarker; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsCore;->access$200(Lcom/google/firebase/crashlytics/internal/common/CrashlyticsCore;)Lcom/google/firebase/crashlytics/internal/common/CrashlyticsController; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsCore;->checkForPreviousCrash()V +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsCore;->didPreviousInitializationFail()Z +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsCore;->doBackgroundInitialization(Lcom/google/firebase/crashlytics/internal/settings/SettingsProvider;)Lcom/google/android/gms/tasks/Task; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsCore;->doBackgroundInitializationAsync(Lcom/google/firebase/crashlytics/internal/settings/SettingsProvider;)Lcom/google/android/gms/tasks/Task; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsCore;->getVersion()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsCore;->isBuildIdValid(Ljava/lang/String;Z)Z +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsCore;->log(Ljava/lang/String;)V +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsCore;->markInitializationComplete()V +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsCore;->markInitializationStarted()V +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsCore;->onPreExecute(Lcom/google/firebase/crashlytics/internal/common/AppData;Lcom/google/firebase/crashlytics/internal/settings/SettingsProvider;)Z +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsCore;->setCrashlyticsCollectionEnabled(Ljava/lang/Boolean;)V +Lcom/google/firebase/crashlytics/internal/common/CrashlyticsCore$$ExternalSyntheticLambda0; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsCore$$ExternalSyntheticLambda0;->(Lcom/google/firebase/crashlytics/internal/common/CrashlyticsCore;)V +Lcom/google/firebase/crashlytics/internal/common/CrashlyticsCore$1; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsCore$1;->(Lcom/google/firebase/crashlytics/internal/common/CrashlyticsCore;Lcom/google/firebase/crashlytics/internal/settings/SettingsProvider;)V +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsCore$1;->call()Lcom/google/android/gms/tasks/Task; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsCore$1;->call()Ljava/lang/Object; +Lcom/google/firebase/crashlytics/internal/common/CrashlyticsCore$3; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsCore$3;->(Lcom/google/firebase/crashlytics/internal/common/CrashlyticsCore;)V +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsCore$3;->call()Ljava/lang/Boolean; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsCore$3;->call()Ljava/lang/Object; +Lcom/google/firebase/crashlytics/internal/common/CrashlyticsCore$4; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsCore$4;->(Lcom/google/firebase/crashlytics/internal/common/CrashlyticsCore;)V +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsCore$4;->call()Ljava/lang/Boolean; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsCore$4;->call()Ljava/lang/Object; +Lcom/google/firebase/crashlytics/internal/common/CrashlyticsFileMarker; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsFileMarker;->(Ljava/lang/String;Lcom/google/firebase/crashlytics/internal/persistence/FileStore;)V +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsFileMarker;->create()Z +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsFileMarker;->getMarkerFile()Ljava/io/File; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsFileMarker;->isPresent()Z +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsFileMarker;->remove()Z +Lcom/google/firebase/crashlytics/internal/common/CrashlyticsLifecycleEvents; +Lcom/google/firebase/crashlytics/internal/common/CrashlyticsReportDataCapture; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsReportDataCapture;->()V +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsReportDataCapture;->(Landroid/content/Context;Lcom/google/firebase/crashlytics/internal/common/IdManager;Lcom/google/firebase/crashlytics/internal/common/AppData;Lcom/google/firebase/crashlytics/internal/stacktrace/StackTraceTrimmingStrategy;Lcom/google/firebase/crashlytics/internal/settings/SettingsProvider;)V +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsReportDataCapture;->buildReportData()Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Builder; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsReportDataCapture;->captureReportData(Ljava/lang/String;J)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsReportDataCapture;->getDeviceArchitecture()I +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsReportDataCapture;->populateSessionApplicationData()Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Application; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsReportDataCapture;->populateSessionData(Ljava/lang/String;J)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsReportDataCapture;->populateSessionDeviceData()Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Device; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsReportDataCapture;->populateSessionOperatingSystemData()Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$OperatingSystem; +Lcom/google/firebase/crashlytics/internal/common/CrashlyticsUncaughtExceptionHandler; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsUncaughtExceptionHandler;->(Lcom/google/firebase/crashlytics/internal/common/CrashlyticsUncaughtExceptionHandler$CrashListener;Lcom/google/firebase/crashlytics/internal/settings/SettingsProvider;Ljava/lang/Thread$UncaughtExceptionHandler;Lcom/google/firebase/crashlytics/internal/CrashlyticsNativeComponent;)V +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsUncaughtExceptionHandler;->isHandlingException()Z +Lcom/google/firebase/crashlytics/internal/common/CrashlyticsUncaughtExceptionHandler$CrashListener; +Lcom/google/firebase/crashlytics/internal/common/CurrentTimeProvider; +Lcom/google/firebase/crashlytics/internal/common/DataCollectionArbiter; +HSPLcom/google/firebase/crashlytics/internal/common/DataCollectionArbiter;->(Lcom/google/firebase/FirebaseApp;)V +HSPLcom/google/firebase/crashlytics/internal/common/DataCollectionArbiter;->getDataCollectionValueFromManifest(Landroid/content/Context;)Ljava/lang/Boolean; +HSPLcom/google/firebase/crashlytics/internal/common/DataCollectionArbiter;->getDataCollectionValueFromSharedPreferences()Ljava/lang/Boolean; +HSPLcom/google/firebase/crashlytics/internal/common/DataCollectionArbiter;->isAutomaticDataCollectionEnabled()Z +HSPLcom/google/firebase/crashlytics/internal/common/DataCollectionArbiter;->logDataCollectionState(Z)V +HSPLcom/google/firebase/crashlytics/internal/common/DataCollectionArbiter;->readCrashlyticsDataCollectionEnabledFromManifest(Landroid/content/Context;)Ljava/lang/Boolean; +HSPLcom/google/firebase/crashlytics/internal/common/DataCollectionArbiter;->setCrashlyticsDataCollectionEnabled(Ljava/lang/Boolean;)V +HSPLcom/google/firebase/crashlytics/internal/common/DataCollectionArbiter;->storeDataCollectionValueInSharedPreferences(Landroid/content/SharedPreferences;Ljava/lang/Boolean;)V +HSPLcom/google/firebase/crashlytics/internal/common/DataCollectionArbiter;->waitForAutomaticDataCollectionEnabled()Lcom/google/android/gms/tasks/Task; +HSPLcom/google/firebase/crashlytics/internal/common/DataCollectionArbiter;->waitForDataCollectionPermission(Ljava/util/concurrent/Executor;)Lcom/google/android/gms/tasks/Task; +Lcom/google/firebase/crashlytics/internal/common/DeliveryMechanism; +HSPLcom/google/firebase/crashlytics/internal/common/DeliveryMechanism;->()V +HSPLcom/google/firebase/crashlytics/internal/common/DeliveryMechanism;->(Ljava/lang/String;II)V +HSPLcom/google/firebase/crashlytics/internal/common/DeliveryMechanism;->determineFrom(Ljava/lang/String;)Lcom/google/firebase/crashlytics/internal/common/DeliveryMechanism; +HSPLcom/google/firebase/crashlytics/internal/common/DeliveryMechanism;->getId()I +Lcom/google/firebase/crashlytics/internal/common/ExecutorUtils; +HSPLcom/google/firebase/crashlytics/internal/common/ExecutorUtils;->addDelayedShutdownHook(Ljava/lang/String;Ljava/util/concurrent/ExecutorService;)V +HSPLcom/google/firebase/crashlytics/internal/common/ExecutorUtils;->addDelayedShutdownHook(Ljava/lang/String;Ljava/util/concurrent/ExecutorService;JLjava/util/concurrent/TimeUnit;)V +HSPLcom/google/firebase/crashlytics/internal/common/ExecutorUtils;->buildSingleThreadExecutorService(Ljava/lang/String;)Ljava/util/concurrent/ExecutorService; +HSPLcom/google/firebase/crashlytics/internal/common/ExecutorUtils;->getNamedThreadFactory(Ljava/lang/String;)Ljava/util/concurrent/ThreadFactory; +HSPLcom/google/firebase/crashlytics/internal/common/ExecutorUtils;->newSingleThreadExecutor(Ljava/util/concurrent/ThreadFactory;Ljava/util/concurrent/RejectedExecutionHandler;)Ljava/util/concurrent/ExecutorService; +Lcom/google/firebase/crashlytics/internal/common/ExecutorUtils$1; +HSPLcom/google/firebase/crashlytics/internal/common/ExecutorUtils$1;->(Ljava/lang/String;Ljava/util/concurrent/atomic/AtomicLong;)V +HSPLcom/google/firebase/crashlytics/internal/common/ExecutorUtils$1;->newThread(Ljava/lang/Runnable;)Ljava/lang/Thread; +Lcom/google/firebase/crashlytics/internal/common/ExecutorUtils$1$1; +HSPLcom/google/firebase/crashlytics/internal/common/ExecutorUtils$1$1;->(Lcom/google/firebase/crashlytics/internal/common/ExecutorUtils$1;Ljava/lang/Runnable;)V +HSPLcom/google/firebase/crashlytics/internal/common/ExecutorUtils$1$1;->onRun()V +Lcom/google/firebase/crashlytics/internal/common/ExecutorUtils$2; +HSPLcom/google/firebase/crashlytics/internal/common/ExecutorUtils$2;->(Ljava/lang/String;Ljava/util/concurrent/ExecutorService;JLjava/util/concurrent/TimeUnit;)V +Lcom/google/firebase/crashlytics/internal/common/IdManager; +HSPLcom/google/firebase/crashlytics/internal/common/IdManager;->()V +HSPLcom/google/firebase/crashlytics/internal/common/IdManager;->(Landroid/content/Context;Ljava/lang/String;Lcom/google/firebase/installations/FirebaseInstallationsApi;Lcom/google/firebase/crashlytics/internal/common/DataCollectionArbiter;)V +HSPLcom/google/firebase/crashlytics/internal/common/IdManager;->getAppIdentifier()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/common/IdManager;->getInstallIds()Lcom/google/firebase/crashlytics/internal/common/InstallIdProvider$InstallIds; +HSPLcom/google/firebase/crashlytics/internal/common/IdManager;->getInstallerPackageName()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/common/IdManager;->getModelName()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/common/IdManager;->getOsBuildVersionString()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/common/IdManager;->getOsDisplayVersionString()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/common/IdManager;->isSyntheticFid(Ljava/lang/String;)Z +HSPLcom/google/firebase/crashlytics/internal/common/IdManager;->readCachedCrashlyticsInstallId(Landroid/content/SharedPreferences;)Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/common/IdManager;->removeForwardSlashesIn(Ljava/lang/String;)Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/common/IdManager;->shouldRefresh()Z +Lcom/google/firebase/crashlytics/internal/common/InstallIdProvider; +Lcom/google/firebase/crashlytics/internal/common/InstallIdProvider$InstallIds; +HSPLcom/google/firebase/crashlytics/internal/common/InstallIdProvider$InstallIds;->()V +HSPLcom/google/firebase/crashlytics/internal/common/InstallIdProvider$InstallIds;->create(Ljava/lang/String;Ljava/lang/String;)Lcom/google/firebase/crashlytics/internal/common/InstallIdProvider$InstallIds; +HSPLcom/google/firebase/crashlytics/internal/common/InstallIdProvider$InstallIds;->createWithoutFid(Ljava/lang/String;)Lcom/google/firebase/crashlytics/internal/common/InstallIdProvider$InstallIds; +Lcom/google/firebase/crashlytics/internal/common/InstallerPackageNameProvider; +HSPLcom/google/firebase/crashlytics/internal/common/InstallerPackageNameProvider;->()V +HSPLcom/google/firebase/crashlytics/internal/common/InstallerPackageNameProvider;->getInstallerPackageName(Landroid/content/Context;)Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/common/InstallerPackageNameProvider;->loadInstallerPackageName(Landroid/content/Context;)Ljava/lang/String; +Lcom/google/firebase/crashlytics/internal/common/OnDemandCounter; +HSPLcom/google/firebase/crashlytics/internal/common/OnDemandCounter;->()V +Lcom/google/firebase/crashlytics/internal/common/SessionReportingCoordinator; +HSPLcom/google/firebase/crashlytics/internal/common/SessionReportingCoordinator;->(Lcom/google/firebase/crashlytics/internal/common/CrashlyticsReportDataCapture;Lcom/google/firebase/crashlytics/internal/persistence/CrashlyticsReportPersistence;Lcom/google/firebase/crashlytics/internal/send/DataTransportCrashlyticsReportSender;Lcom/google/firebase/crashlytics/internal/metadata/LogFileManager;Lcom/google/firebase/crashlytics/internal/metadata/UserMetadata;Lcom/google/firebase/crashlytics/internal/common/IdManager;)V +HSPLcom/google/firebase/crashlytics/internal/common/SessionReportingCoordinator;->create(Landroid/content/Context;Lcom/google/firebase/crashlytics/internal/common/IdManager;Lcom/google/firebase/crashlytics/internal/persistence/FileStore;Lcom/google/firebase/crashlytics/internal/common/AppData;Lcom/google/firebase/crashlytics/internal/metadata/LogFileManager;Lcom/google/firebase/crashlytics/internal/metadata/UserMetadata;Lcom/google/firebase/crashlytics/internal/stacktrace/StackTraceTrimmingStrategy;Lcom/google/firebase/crashlytics/internal/settings/SettingsProvider;Lcom/google/firebase/crashlytics/internal/common/OnDemandCounter;Lcom/google/firebase/crashlytics/internal/common/CrashlyticsAppQualitySessionsSubscriber;)Lcom/google/firebase/crashlytics/internal/common/SessionReportingCoordinator; +HSPLcom/google/firebase/crashlytics/internal/common/SessionReportingCoordinator;->finalizeSessions(JLjava/lang/String;)V +HSPLcom/google/firebase/crashlytics/internal/common/SessionReportingCoordinator;->hasReportsToSend()Z +HSPLcom/google/firebase/crashlytics/internal/common/SessionReportingCoordinator;->listSortedOpenSessionIds()Ljava/util/SortedSet; +HSPLcom/google/firebase/crashlytics/internal/common/SessionReportingCoordinator;->onBeginSession(Ljava/lang/String;J)V +Lcom/google/firebase/crashlytics/internal/common/SystemCurrentTimeProvider; +HSPLcom/google/firebase/crashlytics/internal/common/SystemCurrentTimeProvider;->()V +HSPLcom/google/firebase/crashlytics/internal/common/SystemCurrentTimeProvider;->getCurrentTimeMillis()J +Lcom/google/firebase/crashlytics/internal/common/Utils; +HSPLcom/google/firebase/crashlytics/internal/common/Utils;->()V +HSPLcom/google/firebase/crashlytics/internal/common/Utils;->awaitEvenIfOnMainThread(Lcom/google/android/gms/tasks/Task;)Ljava/lang/Object; +HSPLcom/google/firebase/crashlytics/internal/common/Utils;->callTask(Ljava/util/concurrent/Executor;Ljava/util/concurrent/Callable;)Lcom/google/android/gms/tasks/Task; +HSPLcom/google/firebase/crashlytics/internal/common/Utils;->lambda$awaitEvenIfOnMainThread$4(Ljava/util/concurrent/CountDownLatch;Lcom/google/android/gms/tasks/Task;)Ljava/lang/Object; +HSPLcom/google/firebase/crashlytics/internal/common/Utils;->lambda$callTask$2(Lcom/google/android/gms/tasks/TaskCompletionSource;Lcom/google/android/gms/tasks/Task;)Ljava/lang/Object; +HSPLcom/google/firebase/crashlytics/internal/common/Utils;->lambda$callTask$3(Ljava/util/concurrent/Callable;Ljava/util/concurrent/Executor;Lcom/google/android/gms/tasks/TaskCompletionSource;)V +HSPLcom/google/firebase/crashlytics/internal/common/Utils;->race(Ljava/util/concurrent/Executor;Lcom/google/android/gms/tasks/Task;Lcom/google/android/gms/tasks/Task;)Lcom/google/android/gms/tasks/Task; +Lcom/google/firebase/crashlytics/internal/common/Utils$$ExternalSyntheticLambda0; +HSPLcom/google/firebase/crashlytics/internal/common/Utils$$ExternalSyntheticLambda0;->(Lcom/google/android/gms/tasks/TaskCompletionSource;)V +HSPLcom/google/firebase/crashlytics/internal/common/Utils$$ExternalSyntheticLambda0;->then(Lcom/google/android/gms/tasks/Task;)Ljava/lang/Object; +Lcom/google/firebase/crashlytics/internal/common/Utils$$ExternalSyntheticLambda2; +HSPLcom/google/firebase/crashlytics/internal/common/Utils$$ExternalSyntheticLambda2;->(Ljava/util/concurrent/CountDownLatch;)V +HSPLcom/google/firebase/crashlytics/internal/common/Utils$$ExternalSyntheticLambda2;->then(Lcom/google/android/gms/tasks/Task;)Ljava/lang/Object; +Lcom/google/firebase/crashlytics/internal/common/Utils$$ExternalSyntheticLambda3; +HSPLcom/google/firebase/crashlytics/internal/common/Utils$$ExternalSyntheticLambda3;->(Lcom/google/android/gms/tasks/TaskCompletionSource;)V +Lcom/google/firebase/crashlytics/internal/common/Utils$$ExternalSyntheticLambda4; +HSPLcom/google/firebase/crashlytics/internal/common/Utils$$ExternalSyntheticLambda4;->(Ljava/util/concurrent/Callable;Ljava/util/concurrent/Executor;Lcom/google/android/gms/tasks/TaskCompletionSource;)V +HSPLcom/google/firebase/crashlytics/internal/common/Utils$$ExternalSyntheticLambda4;->run()V +Lcom/google/firebase/crashlytics/internal/metadata/FileLogStore; +Lcom/google/firebase/crashlytics/internal/metadata/KeysMap; +HSPLcom/google/firebase/crashlytics/internal/metadata/KeysMap;->(II)V +Lcom/google/firebase/crashlytics/internal/metadata/LogFileManager; +HSPLcom/google/firebase/crashlytics/internal/metadata/LogFileManager;->()V +HSPLcom/google/firebase/crashlytics/internal/metadata/LogFileManager;->(Lcom/google/firebase/crashlytics/internal/persistence/FileStore;)V +HSPLcom/google/firebase/crashlytics/internal/metadata/LogFileManager;->getWorkingFileForSession(Ljava/lang/String;)Ljava/io/File; +HSPLcom/google/firebase/crashlytics/internal/metadata/LogFileManager;->setCurrentSession(Ljava/lang/String;)V +HSPLcom/google/firebase/crashlytics/internal/metadata/LogFileManager;->setLogFile(Ljava/io/File;I)V +HSPLcom/google/firebase/crashlytics/internal/metadata/LogFileManager;->writeToLog(JLjava/lang/String;)V +Lcom/google/firebase/crashlytics/internal/metadata/LogFileManager$NoopLogStore; +HSPLcom/google/firebase/crashlytics/internal/metadata/LogFileManager$NoopLogStore;->()V +HSPLcom/google/firebase/crashlytics/internal/metadata/LogFileManager$NoopLogStore;->(Lcom/google/firebase/crashlytics/internal/metadata/LogFileManager$1;)V +HSPLcom/google/firebase/crashlytics/internal/metadata/LogFileManager$NoopLogStore;->closeLogFile()V +Lcom/google/firebase/crashlytics/internal/metadata/MetaDataStore; +HSPLcom/google/firebase/crashlytics/internal/metadata/MetaDataStore;->()V +HSPLcom/google/firebase/crashlytics/internal/metadata/MetaDataStore;->(Lcom/google/firebase/crashlytics/internal/persistence/FileStore;)V +Lcom/google/firebase/crashlytics/internal/metadata/QueueFile; +HSPLcom/google/firebase/crashlytics/internal/metadata/QueueFile;->()V +HSPLcom/google/firebase/crashlytics/internal/metadata/QueueFile;->(Ljava/io/File;)V +HSPLcom/google/firebase/crashlytics/internal/metadata/QueueFile;->add([B)V +HSPLcom/google/firebase/crashlytics/internal/metadata/QueueFile;->add([BII)V +HSPLcom/google/firebase/crashlytics/internal/metadata/QueueFile;->expandIfNecessary(I)V +HSPLcom/google/firebase/crashlytics/internal/metadata/QueueFile;->initialize(Ljava/io/File;)V +HSPLcom/google/firebase/crashlytics/internal/metadata/QueueFile;->isEmpty()Z +HSPLcom/google/firebase/crashlytics/internal/metadata/QueueFile;->nonNull(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object; +HSPLcom/google/firebase/crashlytics/internal/metadata/QueueFile;->open(Ljava/io/File;)Ljava/io/RandomAccessFile; +HSPLcom/google/firebase/crashlytics/internal/metadata/QueueFile;->readElement(I)Lcom/google/firebase/crashlytics/internal/metadata/QueueFile$Element; +HSPLcom/google/firebase/crashlytics/internal/metadata/QueueFile;->readHeader()V +HSPLcom/google/firebase/crashlytics/internal/metadata/QueueFile;->readInt([BI)I +HSPLcom/google/firebase/crashlytics/internal/metadata/QueueFile;->remainingBytes()I +HSPLcom/google/firebase/crashlytics/internal/metadata/QueueFile;->ringWrite(I[BII)V +HSPLcom/google/firebase/crashlytics/internal/metadata/QueueFile;->usedBytes()I +HSPLcom/google/firebase/crashlytics/internal/metadata/QueueFile;->wrapPosition(I)I +HSPLcom/google/firebase/crashlytics/internal/metadata/QueueFile;->writeHeader(IIII)V +HSPLcom/google/firebase/crashlytics/internal/metadata/QueueFile;->writeInt([BII)V +HSPLcom/google/firebase/crashlytics/internal/metadata/QueueFile;->writeInts([B[I)V +Lcom/google/firebase/crashlytics/internal/metadata/QueueFile$Element; +HSPLcom/google/firebase/crashlytics/internal/metadata/QueueFile$Element;->()V +HSPLcom/google/firebase/crashlytics/internal/metadata/QueueFile$Element;->(II)V +Lcom/google/firebase/crashlytics/internal/metadata/QueueFileLogStore; +HSPLcom/google/firebase/crashlytics/internal/metadata/QueueFileLogStore;->()V +HSPLcom/google/firebase/crashlytics/internal/metadata/QueueFileLogStore;->(Ljava/io/File;I)V +HSPLcom/google/firebase/crashlytics/internal/metadata/QueueFileLogStore;->doWriteToLog(JLjava/lang/String;)V +HSPLcom/google/firebase/crashlytics/internal/metadata/QueueFileLogStore;->openLogFile()V +HSPLcom/google/firebase/crashlytics/internal/metadata/QueueFileLogStore;->writeToLog(JLjava/lang/String;)V +Lcom/google/firebase/crashlytics/internal/metadata/RolloutAssignmentList; +HSPLcom/google/firebase/crashlytics/internal/metadata/RolloutAssignmentList;->(I)V +Lcom/google/firebase/crashlytics/internal/metadata/UserMetadata; +HSPLcom/google/firebase/crashlytics/internal/metadata/UserMetadata;->(Ljava/lang/String;Lcom/google/firebase/crashlytics/internal/persistence/FileStore;Lcom/google/firebase/crashlytics/internal/common/CrashlyticsBackgroundWorker;)V +Lcom/google/firebase/crashlytics/internal/metadata/UserMetadata$SerializeableKeysMap; +HSPLcom/google/firebase/crashlytics/internal/metadata/UserMetadata$SerializeableKeysMap;->(Lcom/google/firebase/crashlytics/internal/metadata/UserMetadata;Z)V +Lcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder;->configure(Lcom/google/firebase/encoders/config/EncoderConfig;)V +Lcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportApplicationExitInfoBuildIdMappingForArchEncoder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportApplicationExitInfoBuildIdMappingForArchEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportApplicationExitInfoBuildIdMappingForArchEncoder;->()V +Lcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportApplicationExitInfoEncoder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportApplicationExitInfoEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportApplicationExitInfoEncoder;->()V +Lcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportCustomAttributeEncoder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportCustomAttributeEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportCustomAttributeEncoder;->()V +Lcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportEncoder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportEncoder;->encode(Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport;Lcom/google/firebase/encoders/ObjectEncoderContext;)V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportEncoder;->encode(Ljava/lang/Object;Ljava/lang/Object;)V +Lcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportFilesPayloadEncoder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportFilesPayloadEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportFilesPayloadEncoder;->()V +Lcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportFilesPayloadFileEncoder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportFilesPayloadFileEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportFilesPayloadFileEncoder;->()V +Lcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionApplicationEncoder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionApplicationEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionApplicationEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionApplicationEncoder;->encode(Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Application;Lcom/google/firebase/encoders/ObjectEncoderContext;)V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionApplicationEncoder;->encode(Ljava/lang/Object;Ljava/lang/Object;)V +Lcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionApplicationOrganizationEncoder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionApplicationOrganizationEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionApplicationOrganizationEncoder;->()V +Lcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionDeviceEncoder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionDeviceEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionDeviceEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionDeviceEncoder;->encode(Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Device;Lcom/google/firebase/encoders/ObjectEncoderContext;)V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionDeviceEncoder;->encode(Ljava/lang/Object;Ljava/lang/Object;)V +Lcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEncoder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEncoder;->encode(Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session;Lcom/google/firebase/encoders/ObjectEncoderContext;)V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEncoder;->encode(Ljava/lang/Object;Ljava/lang/Object;)V +Lcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventApplicationEncoder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventApplicationEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventApplicationEncoder;->()V +Lcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventApplicationExecutionBinaryImageEncoder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventApplicationExecutionBinaryImageEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventApplicationExecutionBinaryImageEncoder;->()V +Lcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventApplicationExecutionEncoder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventApplicationExecutionEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventApplicationExecutionEncoder;->()V +Lcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventApplicationExecutionExceptionEncoder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventApplicationExecutionExceptionEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventApplicationExecutionExceptionEncoder;->()V +Lcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventApplicationExecutionSignalEncoder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventApplicationExecutionSignalEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventApplicationExecutionSignalEncoder;->()V +Lcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventApplicationExecutionThreadEncoder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventApplicationExecutionThreadEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventApplicationExecutionThreadEncoder;->()V +Lcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventApplicationExecutionThreadFrameEncoder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventApplicationExecutionThreadFrameEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventApplicationExecutionThreadFrameEncoder;->()V +Lcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventApplicationProcessDetailsEncoder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventApplicationProcessDetailsEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventApplicationProcessDetailsEncoder;->()V +Lcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventDeviceEncoder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventDeviceEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventDeviceEncoder;->()V +Lcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventEncoder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventEncoder;->()V +Lcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventLogEncoder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventLogEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventLogEncoder;->()V +Lcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventRolloutAssignmentEncoder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventRolloutAssignmentEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventRolloutAssignmentEncoder;->()V +Lcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventRolloutAssignmentRolloutVariantEncoder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventRolloutAssignmentRolloutVariantEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventRolloutAssignmentRolloutVariantEncoder;->()V +Lcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventRolloutsStateEncoder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventRolloutsStateEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventRolloutsStateEncoder;->()V +Lcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionOperatingSystemEncoder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionOperatingSystemEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionOperatingSystemEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionOperatingSystemEncoder;->encode(Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$OperatingSystem;Lcom/google/firebase/encoders/ObjectEncoderContext;)V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionOperatingSystemEncoder;->encode(Ljava/lang/Object;Ljava/lang/Object;)V +Lcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionUserEncoder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionUserEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionUserEncoder;->()V +Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport;->(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session;Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$FilesPayload;Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$ApplicationExitInfo;)V +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport;->(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session;Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$FilesPayload;Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$ApplicationExitInfo;Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport$1;)V +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport;->getAppExitInfo()Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$ApplicationExitInfo; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport;->getAppQualitySessionId()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport;->getBuildVersion()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport;->getDisplayVersion()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport;->getFirebaseInstallationId()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport;->getGmpAppId()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport;->getInstallationUuid()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport;->getNdkPayload()Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$FilesPayload; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport;->getPlatform()I +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport;->getSdkVersion()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport;->getSession()Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session; +Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport$Builder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport$Builder;->build()Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport$Builder;->setBuildVersion(Ljava/lang/String;)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport$Builder;->setDisplayVersion(Ljava/lang/String;)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport$Builder;->setFirebaseInstallationId(Ljava/lang/String;)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport$Builder;->setGmpAppId(Ljava/lang/String;)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport$Builder;->setInstallationUuid(Ljava/lang/String;)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport$Builder;->setPlatform(I)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport$Builder;->setSdkVersion(Ljava/lang/String;)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport$Builder;->setSession(Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session;)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Builder; +Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_ApplicationExitInfo; +Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_ApplicationExitInfo_BuildIdMappingForArch; +Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_CustomAttribute; +Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_FilesPayload; +Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_FilesPayload_File; +Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session;->(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;JLjava/lang/Long;ZLcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Application;Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$User;Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$OperatingSystem;Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Device;Ljava/util/List;I)V +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session;->(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;JLjava/lang/Long;ZLcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Application;Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$User;Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$OperatingSystem;Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Device;Ljava/util/List;ILcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session$1;)V +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session;->getApp()Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Application; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session;->getAppQualitySessionId()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session;->getDevice()Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Device; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session;->getEndedAt()Ljava/lang/Long; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session;->getEvents()Ljava/util/List; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session;->getGenerator()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session;->getGeneratorType()I +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session;->getIdentifier()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session;->getOs()Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$OperatingSystem; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session;->getStartedAt()J +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session;->getUser()Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$User; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session;->isCrashed()Z +Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session$Builder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session$Builder;->build()Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session$Builder;->setApp(Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Application;)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session$Builder;->setCrashed(Z)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session$Builder;->setDevice(Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Device;)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session$Builder;->setGenerator(Ljava/lang/String;)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session$Builder;->setGeneratorType(I)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session$Builder;->setIdentifier(Ljava/lang/String;)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session$Builder;->setOs(Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$OperatingSystem;)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session$Builder;->setStartedAt(J)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Builder; +Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Application; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Application;->(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Application$Organization;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Application;->(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Application$Organization;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Application$1;)V +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Application;->getDevelopmentPlatform()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Application;->getDevelopmentPlatformVersion()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Application;->getDisplayVersion()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Application;->getIdentifier()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Application;->getInstallationUuid()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Application;->getOrganization()Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Application$Organization; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Application;->getVersion()Ljava/lang/String; +Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Application$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Application$Builder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Application$Builder;->build()Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Application; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Application$Builder;->setDevelopmentPlatform(Ljava/lang/String;)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Application$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Application$Builder;->setDevelopmentPlatformVersion(Ljava/lang/String;)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Application$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Application$Builder;->setDisplayVersion(Ljava/lang/String;)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Application$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Application$Builder;->setIdentifier(Ljava/lang/String;)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Application$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Application$Builder;->setInstallationUuid(Ljava/lang/String;)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Application$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Application$Builder;->setVersion(Ljava/lang/String;)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Application$Builder; +Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Application_Organization; +Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Device; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Device;->(ILjava/lang/String;IJJZILjava/lang/String;Ljava/lang/String;)V +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Device;->(ILjava/lang/String;IJJZILjava/lang/String;Ljava/lang/String;Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Device$1;)V +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Device;->getArch()I +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Device;->getCores()I +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Device;->getDiskSpace()J +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Device;->getManufacturer()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Device;->getModel()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Device;->getModelClass()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Device;->getRam()J +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Device;->getState()I +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Device;->isSimulator()Z +Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Device$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Device$Builder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Device$Builder;->build()Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Device; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Device$Builder;->setArch(I)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Device$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Device$Builder;->setCores(I)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Device$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Device$Builder;->setDiskSpace(J)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Device$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Device$Builder;->setManufacturer(Ljava/lang/String;)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Device$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Device$Builder;->setModel(Ljava/lang/String;)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Device$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Device$Builder;->setModelClass(Ljava/lang/String;)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Device$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Device$Builder;->setRam(J)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Device$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Device$Builder;->setSimulator(Z)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Device$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Device$Builder;->setState(I)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Device$Builder; +Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Event; +Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Event_Application; +Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Event_Application_Execution; +Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Event_Application_Execution_BinaryImage; +Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Event_Application_Execution_Exception; +Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Event_Application_Execution_Signal; +Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Event_Application_Execution_Thread; +Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Event_Application_Execution_Thread_Frame; +Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Event_Application_ProcessDetails; +Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Event_Device; +Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Event_Log; +Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Event_RolloutAssignment; +Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Event_RolloutAssignment_RolloutVariant; +Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Event_RolloutsState; +Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_OperatingSystem; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_OperatingSystem;->(ILjava/lang/String;Ljava/lang/String;Z)V +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_OperatingSystem;->(ILjava/lang/String;Ljava/lang/String;ZLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_OperatingSystem$1;)V +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_OperatingSystem;->getBuildVersion()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_OperatingSystem;->getPlatform()I +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_OperatingSystem;->getVersion()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_OperatingSystem;->isJailbroken()Z +Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_OperatingSystem$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_OperatingSystem$Builder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_OperatingSystem$Builder;->build()Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$OperatingSystem; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_OperatingSystem$Builder;->setBuildVersion(Ljava/lang/String;)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$OperatingSystem$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_OperatingSystem$Builder;->setJailbroken(Z)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$OperatingSystem$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_OperatingSystem$Builder;->setPlatform(I)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$OperatingSystem$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_OperatingSystem$Builder;->setVersion(Ljava/lang/String;)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$OperatingSystem$Builder; +Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_User; +Lcom/google/firebase/crashlytics/internal/model/AutoValue_StaticSessionData; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_StaticSessionData;->(Lcom/google/firebase/crashlytics/internal/model/StaticSessionData$AppData;Lcom/google/firebase/crashlytics/internal/model/StaticSessionData$OsData;Lcom/google/firebase/crashlytics/internal/model/StaticSessionData$DeviceData;)V +Lcom/google/firebase/crashlytics/internal/model/AutoValue_StaticSessionData_AppData; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_StaticSessionData_AppData;->(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILcom/google/firebase/crashlytics/internal/DevelopmentPlatformProvider;)V +Lcom/google/firebase/crashlytics/internal/model/AutoValue_StaticSessionData_DeviceData; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_StaticSessionData_DeviceData;->(ILjava/lang/String;IJJZILjava/lang/String;Ljava/lang/String;)V +Lcom/google/firebase/crashlytics/internal/model/AutoValue_StaticSessionData_OsData; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_StaticSessionData_OsData;->(Ljava/lang/String;Ljava/lang/String;Z)V +Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport; +HSPLcom/google/firebase/crashlytics/internal/model/CrashlyticsReport;->()V +HSPLcom/google/firebase/crashlytics/internal/model/CrashlyticsReport;->()V +HSPLcom/google/firebase/crashlytics/internal/model/CrashlyticsReport;->access$000()Ljava/nio/charset/Charset; +HSPLcom/google/firebase/crashlytics/internal/model/CrashlyticsReport;->builder()Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Builder; +Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$ApplicationExitInfo; +Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$ApplicationExitInfo$BuildIdMappingForArch; +Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Builder;->()V +Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$CustomAttribute; +Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$FilesPayload; +Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$FilesPayload$File; +Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session; +HSPLcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session;->()V +HSPLcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session;->builder()Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session;->getIdentifierUtf8Bytes()[B +Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Application; +HSPLcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Application;->()V +HSPLcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Application;->builder()Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Application$Builder; +Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Application$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Application$Builder;->()V +Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Application$Organization; +Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Builder;->()V +Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Device; +HSPLcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Device;->()V +HSPLcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Device;->builder()Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Device$Builder; +Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Device$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Device$Builder;->()V +Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Event; +Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Event$Application; +Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Event$Application$Execution; +Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Event$Application$Execution$BinaryImage; +Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Event$Application$Execution$Exception; +Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Event$Application$Execution$Signal; +Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Event$Application$Execution$Thread; +Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Event$Application$Execution$Thread$Frame; +Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Event$Application$ProcessDetails; +Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Event$Device; +Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Event$Log; +Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Event$RolloutAssignment; +Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Event$RolloutAssignment$RolloutVariant; +Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Event$RolloutsState; +Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$OperatingSystem; +HSPLcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$OperatingSystem;->()V +HSPLcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$OperatingSystem;->builder()Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$OperatingSystem$Builder; +Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$OperatingSystem$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$OperatingSystem$Builder;->()V +Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$User; +Lcom/google/firebase/crashlytics/internal/model/StaticSessionData; +HSPLcom/google/firebase/crashlytics/internal/model/StaticSessionData;->()V +HSPLcom/google/firebase/crashlytics/internal/model/StaticSessionData;->create(Lcom/google/firebase/crashlytics/internal/model/StaticSessionData$AppData;Lcom/google/firebase/crashlytics/internal/model/StaticSessionData$OsData;Lcom/google/firebase/crashlytics/internal/model/StaticSessionData$DeviceData;)Lcom/google/firebase/crashlytics/internal/model/StaticSessionData; +Lcom/google/firebase/crashlytics/internal/model/StaticSessionData$AppData; +HSPLcom/google/firebase/crashlytics/internal/model/StaticSessionData$AppData;->()V +HSPLcom/google/firebase/crashlytics/internal/model/StaticSessionData$AppData;->create(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILcom/google/firebase/crashlytics/internal/DevelopmentPlatformProvider;)Lcom/google/firebase/crashlytics/internal/model/StaticSessionData$AppData; +Lcom/google/firebase/crashlytics/internal/model/StaticSessionData$DeviceData; +HSPLcom/google/firebase/crashlytics/internal/model/StaticSessionData$DeviceData;->()V +HSPLcom/google/firebase/crashlytics/internal/model/StaticSessionData$DeviceData;->create(ILjava/lang/String;IJJZILjava/lang/String;Ljava/lang/String;)Lcom/google/firebase/crashlytics/internal/model/StaticSessionData$DeviceData; +Lcom/google/firebase/crashlytics/internal/model/StaticSessionData$OsData; +HSPLcom/google/firebase/crashlytics/internal/model/StaticSessionData$OsData;->()V +HSPLcom/google/firebase/crashlytics/internal/model/StaticSessionData$OsData;->create(Ljava/lang/String;Ljava/lang/String;Z)Lcom/google/firebase/crashlytics/internal/model/StaticSessionData$OsData; +Lcom/google/firebase/crashlytics/internal/model/serialization/CrashlyticsReportJsonTransform; +HSPLcom/google/firebase/crashlytics/internal/model/serialization/CrashlyticsReportJsonTransform;->()V +HSPLcom/google/firebase/crashlytics/internal/model/serialization/CrashlyticsReportJsonTransform;->()V +HSPLcom/google/firebase/crashlytics/internal/model/serialization/CrashlyticsReportJsonTransform;->reportToJson(Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport;)Ljava/lang/String; +Lcom/google/firebase/crashlytics/internal/network/HttpRequestFactory; +HSPLcom/google/firebase/crashlytics/internal/network/HttpRequestFactory;->()V +Lcom/google/firebase/crashlytics/internal/persistence/CrashlyticsReportPersistence; +HSPLcom/google/firebase/crashlytics/internal/persistence/CrashlyticsReportPersistence;->()V +HSPLcom/google/firebase/crashlytics/internal/persistence/CrashlyticsReportPersistence;->(Lcom/google/firebase/crashlytics/internal/persistence/FileStore;Lcom/google/firebase/crashlytics/internal/settings/SettingsProvider;Lcom/google/firebase/crashlytics/internal/common/CrashlyticsAppQualitySessionsSubscriber;)V +HSPLcom/google/firebase/crashlytics/internal/persistence/CrashlyticsReportPersistence;->capAndGetOpenSessions(Ljava/lang/String;)Ljava/util/SortedSet; +HSPLcom/google/firebase/crashlytics/internal/persistence/CrashlyticsReportPersistence;->capFinalizedReports()V +HSPLcom/google/firebase/crashlytics/internal/persistence/CrashlyticsReportPersistence;->convertTimestampFromSecondsToMs(J)J +HSPLcom/google/firebase/crashlytics/internal/persistence/CrashlyticsReportPersistence;->finalizeReports(Ljava/lang/String;J)V +HSPLcom/google/firebase/crashlytics/internal/persistence/CrashlyticsReportPersistence;->getAllFinalizedReportFiles()Ljava/util/List; +HSPLcom/google/firebase/crashlytics/internal/persistence/CrashlyticsReportPersistence;->getOpenSessionIds()Ljava/util/SortedSet; +HSPLcom/google/firebase/crashlytics/internal/persistence/CrashlyticsReportPersistence;->hasFinalizedReports()Z +HSPLcom/google/firebase/crashlytics/internal/persistence/CrashlyticsReportPersistence;->lambda$static$1(Ljava/io/File;Ljava/lang/String;)Z +HSPLcom/google/firebase/crashlytics/internal/persistence/CrashlyticsReportPersistence;->persistReport(Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport;)V +HSPLcom/google/firebase/crashlytics/internal/persistence/CrashlyticsReportPersistence;->synthesizeReport(Ljava/lang/String;J)V +HSPLcom/google/firebase/crashlytics/internal/persistence/CrashlyticsReportPersistence;->writeTextFile(Ljava/io/File;Ljava/lang/String;)V +HSPLcom/google/firebase/crashlytics/internal/persistence/CrashlyticsReportPersistence;->writeTextFile(Ljava/io/File;Ljava/lang/String;J)V +Lcom/google/firebase/crashlytics/internal/persistence/CrashlyticsReportPersistence$$ExternalSyntheticLambda2; +HSPLcom/google/firebase/crashlytics/internal/persistence/CrashlyticsReportPersistence$$ExternalSyntheticLambda2;->()V +Lcom/google/firebase/crashlytics/internal/persistence/CrashlyticsReportPersistence$$ExternalSyntheticLambda3; +HSPLcom/google/firebase/crashlytics/internal/persistence/CrashlyticsReportPersistence$$ExternalSyntheticLambda3;->()V +HSPLcom/google/firebase/crashlytics/internal/persistence/CrashlyticsReportPersistence$$ExternalSyntheticLambda3;->accept(Ljava/io/File;Ljava/lang/String;)Z +Lcom/google/firebase/crashlytics/internal/persistence/FileStore; +HSPLcom/google/firebase/crashlytics/internal/persistence/FileStore;->(Landroid/content/Context;)V +HSPLcom/google/firebase/crashlytics/internal/persistence/FileStore;->cleanupDir(Ljava/io/File;)V +HSPLcom/google/firebase/crashlytics/internal/persistence/FileStore;->cleanupPreviousFileSystems()V +HSPLcom/google/firebase/crashlytics/internal/persistence/FileStore;->deleteSessionFiles(Ljava/lang/String;)Z +HSPLcom/google/firebase/crashlytics/internal/persistence/FileStore;->getAllOpenSessionIds()Ljava/util/List; +HSPLcom/google/firebase/crashlytics/internal/persistence/FileStore;->getCommonFile(Ljava/lang/String;)Ljava/io/File; +HSPLcom/google/firebase/crashlytics/internal/persistence/FileStore;->getNativeReports()Ljava/util/List; +HSPLcom/google/firebase/crashlytics/internal/persistence/FileStore;->getPriorityReports()Ljava/util/List; +HSPLcom/google/firebase/crashlytics/internal/persistence/FileStore;->getReports()Ljava/util/List; +HSPLcom/google/firebase/crashlytics/internal/persistence/FileStore;->getSessionDir(Ljava/lang/String;)Ljava/io/File; +HSPLcom/google/firebase/crashlytics/internal/persistence/FileStore;->getSessionFile(Ljava/lang/String;Ljava/lang/String;)Ljava/io/File; +HSPLcom/google/firebase/crashlytics/internal/persistence/FileStore;->getSessionFiles(Ljava/lang/String;Ljava/io/FilenameFilter;)Ljava/util/List; +HSPLcom/google/firebase/crashlytics/internal/persistence/FileStore;->prepareBaseDir(Ljava/io/File;)Ljava/io/File; +HSPLcom/google/firebase/crashlytics/internal/persistence/FileStore;->prepareDir(Ljava/io/File;)Ljava/io/File; +HSPLcom/google/firebase/crashlytics/internal/persistence/FileStore;->recursiveDelete(Ljava/io/File;)Z +HSPLcom/google/firebase/crashlytics/internal/persistence/FileStore;->safeArrayToList([Ljava/lang/Object;)Ljava/util/List; +HSPLcom/google/firebase/crashlytics/internal/persistence/FileStore;->sanitizeName(Ljava/lang/String;)Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/persistence/FileStore;->useV2FileSystem()Z +Lcom/google/firebase/crashlytics/internal/send/DataTransportCrashlyticsReportSender; +HSPLcom/google/firebase/crashlytics/internal/send/DataTransportCrashlyticsReportSender;->()V +HSPLcom/google/firebase/crashlytics/internal/send/DataTransportCrashlyticsReportSender;->(Lcom/google/firebase/crashlytics/internal/send/ReportQueue;Lcom/google/android/datatransport/Transformer;)V +HSPLcom/google/firebase/crashlytics/internal/send/DataTransportCrashlyticsReportSender;->create(Landroid/content/Context;Lcom/google/firebase/crashlytics/internal/settings/SettingsProvider;Lcom/google/firebase/crashlytics/internal/common/OnDemandCounter;)Lcom/google/firebase/crashlytics/internal/send/DataTransportCrashlyticsReportSender; +HSPLcom/google/firebase/crashlytics/internal/send/DataTransportCrashlyticsReportSender;->mergeStrings(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; +Lcom/google/firebase/crashlytics/internal/send/DataTransportCrashlyticsReportSender$$ExternalSyntheticLambda0; +HSPLcom/google/firebase/crashlytics/internal/send/DataTransportCrashlyticsReportSender$$ExternalSyntheticLambda0;->()V +Lcom/google/firebase/crashlytics/internal/send/ReportQueue; +HSPLcom/google/firebase/crashlytics/internal/send/ReportQueue;->(DDJLcom/google/android/datatransport/Transport;Lcom/google/firebase/crashlytics/internal/common/OnDemandCounter;)V +HSPLcom/google/firebase/crashlytics/internal/send/ReportQueue;->(Lcom/google/android/datatransport/Transport;Lcom/google/firebase/crashlytics/internal/settings/Settings;Lcom/google/firebase/crashlytics/internal/common/OnDemandCounter;)V +Lcom/google/firebase/crashlytics/internal/settings/CachedSettingsIo; +HSPLcom/google/firebase/crashlytics/internal/settings/CachedSettingsIo;->(Lcom/google/firebase/crashlytics/internal/persistence/FileStore;)V +HSPLcom/google/firebase/crashlytics/internal/settings/CachedSettingsIo;->getSettingsFile()Ljava/io/File; +HSPLcom/google/firebase/crashlytics/internal/settings/CachedSettingsIo;->readCachedSettings()Lorg/json/JSONObject; +Lcom/google/firebase/crashlytics/internal/settings/DefaultSettingsJsonTransform; +HSPLcom/google/firebase/crashlytics/internal/settings/DefaultSettingsJsonTransform;->defaultSettings(Lcom/google/firebase/crashlytics/internal/common/CurrentTimeProvider;)Lcom/google/firebase/crashlytics/internal/settings/Settings; +Lcom/google/firebase/crashlytics/internal/settings/DefaultSettingsSpiCall; +HSPLcom/google/firebase/crashlytics/internal/settings/DefaultSettingsSpiCall;->(Ljava/lang/String;Lcom/google/firebase/crashlytics/internal/network/HttpRequestFactory;)V +HSPLcom/google/firebase/crashlytics/internal/settings/DefaultSettingsSpiCall;->(Ljava/lang/String;Lcom/google/firebase/crashlytics/internal/network/HttpRequestFactory;Lcom/google/firebase/crashlytics/internal/Logger;)V +Lcom/google/firebase/crashlytics/internal/settings/Settings; +HSPLcom/google/firebase/crashlytics/internal/settings/Settings;->(JLcom/google/firebase/crashlytics/internal/settings/Settings$SessionData;Lcom/google/firebase/crashlytics/internal/settings/Settings$FeatureFlagData;IIDDI)V +Lcom/google/firebase/crashlytics/internal/settings/Settings$FeatureFlagData; +HSPLcom/google/firebase/crashlytics/internal/settings/Settings$FeatureFlagData;->(ZZZ)V +Lcom/google/firebase/crashlytics/internal/settings/Settings$SessionData; +HSPLcom/google/firebase/crashlytics/internal/settings/Settings$SessionData;->(II)V +Lcom/google/firebase/crashlytics/internal/settings/SettingsCacheBehavior; +HSPLcom/google/firebase/crashlytics/internal/settings/SettingsCacheBehavior;->()V +HSPLcom/google/firebase/crashlytics/internal/settings/SettingsCacheBehavior;->(Ljava/lang/String;I)V +Lcom/google/firebase/crashlytics/internal/settings/SettingsController; +HSPLcom/google/firebase/crashlytics/internal/settings/SettingsController;->(Landroid/content/Context;Lcom/google/firebase/crashlytics/internal/settings/SettingsRequest;Lcom/google/firebase/crashlytics/internal/common/CurrentTimeProvider;Lcom/google/firebase/crashlytics/internal/settings/SettingsJsonParser;Lcom/google/firebase/crashlytics/internal/settings/CachedSettingsIo;Lcom/google/firebase/crashlytics/internal/settings/SettingsSpiCall;Lcom/google/firebase/crashlytics/internal/common/DataCollectionArbiter;)V +HSPLcom/google/firebase/crashlytics/internal/settings/SettingsController;->buildInstanceIdentifierChanged()Z +HSPLcom/google/firebase/crashlytics/internal/settings/SettingsController;->create(Landroid/content/Context;Ljava/lang/String;Lcom/google/firebase/crashlytics/internal/common/IdManager;Lcom/google/firebase/crashlytics/internal/network/HttpRequestFactory;Ljava/lang/String;Ljava/lang/String;Lcom/google/firebase/crashlytics/internal/persistence/FileStore;Lcom/google/firebase/crashlytics/internal/common/DataCollectionArbiter;)Lcom/google/firebase/crashlytics/internal/settings/SettingsController; +HSPLcom/google/firebase/crashlytics/internal/settings/SettingsController;->getCachedSettingsData(Lcom/google/firebase/crashlytics/internal/settings/SettingsCacheBehavior;)Lcom/google/firebase/crashlytics/internal/settings/Settings; +HSPLcom/google/firebase/crashlytics/internal/settings/SettingsController;->getSettingsAsync()Lcom/google/android/gms/tasks/Task; +HSPLcom/google/firebase/crashlytics/internal/settings/SettingsController;->getSettingsSync()Lcom/google/firebase/crashlytics/internal/settings/Settings; +HSPLcom/google/firebase/crashlytics/internal/settings/SettingsController;->getStoredBuildInstanceIdentifier()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/settings/SettingsController;->loadSettingsData(Lcom/google/firebase/crashlytics/internal/settings/SettingsCacheBehavior;Ljava/util/concurrent/Executor;)Lcom/google/android/gms/tasks/Task; +HSPLcom/google/firebase/crashlytics/internal/settings/SettingsController;->loadSettingsData(Ljava/util/concurrent/Executor;)Lcom/google/android/gms/tasks/Task; +Lcom/google/firebase/crashlytics/internal/settings/SettingsController$1; +HSPLcom/google/firebase/crashlytics/internal/settings/SettingsController$1;->(Lcom/google/firebase/crashlytics/internal/settings/SettingsController;)V +Lcom/google/firebase/crashlytics/internal/settings/SettingsJsonParser; +HSPLcom/google/firebase/crashlytics/internal/settings/SettingsJsonParser;->(Lcom/google/firebase/crashlytics/internal/common/CurrentTimeProvider;)V +Lcom/google/firebase/crashlytics/internal/settings/SettingsJsonTransform; +Lcom/google/firebase/crashlytics/internal/settings/SettingsProvider; +Lcom/google/firebase/crashlytics/internal/settings/SettingsRequest; +HSPLcom/google/firebase/crashlytics/internal/settings/SettingsRequest;->(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/google/firebase/crashlytics/internal/common/InstallIdProvider;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V +Lcom/google/firebase/crashlytics/internal/settings/SettingsSpiCall; +Lcom/google/firebase/crashlytics/internal/stacktrace/MiddleOutFallbackStrategy; +HSPLcom/google/firebase/crashlytics/internal/stacktrace/MiddleOutFallbackStrategy;->(I[Lcom/google/firebase/crashlytics/internal/stacktrace/StackTraceTrimmingStrategy;)V +Lcom/google/firebase/crashlytics/internal/stacktrace/MiddleOutStrategy; +HSPLcom/google/firebase/crashlytics/internal/stacktrace/MiddleOutStrategy;->(I)V +Lcom/google/firebase/crashlytics/internal/stacktrace/RemoveRepeatsStrategy; +HSPLcom/google/firebase/crashlytics/internal/stacktrace/RemoveRepeatsStrategy;->(I)V +Lcom/google/firebase/crashlytics/internal/stacktrace/StackTraceTrimmingStrategy; +Lcom/google/firebase/crashlytics/ktx/FirebaseCrashlyticsKt; +HSPLcom/google/firebase/crashlytics/ktx/FirebaseCrashlyticsKt;->getCrashlytics(Lcom/google/firebase/ktx/Firebase;)Lcom/google/firebase/crashlytics/FirebaseCrashlytics; +Lcom/google/firebase/crashlytics/ktx/FirebaseCrashlyticsKtxRegistrar; +HSPLcom/google/firebase/crashlytics/ktx/FirebaseCrashlyticsKtxRegistrar;->()V +HSPLcom/google/firebase/crashlytics/ktx/FirebaseCrashlyticsKtxRegistrar;->()V +HSPLcom/google/firebase/crashlytics/ktx/FirebaseCrashlyticsKtxRegistrar;->getComponents()Ljava/util/List; +Lcom/google/firebase/crashlytics/ktx/FirebaseCrashlyticsKtxRegistrar$Companion; +HSPLcom/google/firebase/crashlytics/ktx/FirebaseCrashlyticsKtxRegistrar$Companion;->()V +HSPLcom/google/firebase/crashlytics/ktx/FirebaseCrashlyticsKtxRegistrar$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/google/firebase/datatransport/TransportRegistrar; +HSPLcom/google/firebase/datatransport/TransportRegistrar;->()V +HSPLcom/google/firebase/datatransport/TransportRegistrar;->getComponents()Ljava/util/List; +Lcom/google/firebase/datatransport/TransportRegistrar$$ExternalSyntheticLambda0; +HSPLcom/google/firebase/datatransport/TransportRegistrar$$ExternalSyntheticLambda0;->()V +Lcom/google/firebase/dynamicloading/ComponentLoader; +Lcom/google/firebase/encoders/DataEncoder; +Lcom/google/firebase/encoders/Encoder; +Lcom/google/firebase/encoders/FieldDescriptor; +HSPLcom/google/firebase/encoders/FieldDescriptor;->(Ljava/lang/String;Ljava/util/Map;)V +HSPLcom/google/firebase/encoders/FieldDescriptor;->getName()Ljava/lang/String; +HSPLcom/google/firebase/encoders/FieldDescriptor;->of(Ljava/lang/String;)Lcom/google/firebase/encoders/FieldDescriptor; +Lcom/google/firebase/encoders/ObjectEncoder; +Lcom/google/firebase/encoders/ObjectEncoderContext; +Lcom/google/firebase/encoders/ValueEncoder; +Lcom/google/firebase/encoders/ValueEncoderContext; +Lcom/google/firebase/encoders/config/Configurator; +Lcom/google/firebase/encoders/config/EncoderConfig; +Lcom/google/firebase/encoders/json/JsonDataEncoderBuilder; +HSPLcom/google/firebase/encoders/json/JsonDataEncoderBuilder;->()V +HSPLcom/google/firebase/encoders/json/JsonDataEncoderBuilder;->()V +HSPLcom/google/firebase/encoders/json/JsonDataEncoderBuilder;->access$100(Lcom/google/firebase/encoders/json/JsonDataEncoderBuilder;)Ljava/util/Map; +HSPLcom/google/firebase/encoders/json/JsonDataEncoderBuilder;->access$200(Lcom/google/firebase/encoders/json/JsonDataEncoderBuilder;)Ljava/util/Map; +HSPLcom/google/firebase/encoders/json/JsonDataEncoderBuilder;->access$300(Lcom/google/firebase/encoders/json/JsonDataEncoderBuilder;)Lcom/google/firebase/encoders/ObjectEncoder; +HSPLcom/google/firebase/encoders/json/JsonDataEncoderBuilder;->access$400(Lcom/google/firebase/encoders/json/JsonDataEncoderBuilder;)Z +HSPLcom/google/firebase/encoders/json/JsonDataEncoderBuilder;->build()Lcom/google/firebase/encoders/DataEncoder; +HSPLcom/google/firebase/encoders/json/JsonDataEncoderBuilder;->configureWith(Lcom/google/firebase/encoders/config/Configurator;)Lcom/google/firebase/encoders/json/JsonDataEncoderBuilder; +HSPLcom/google/firebase/encoders/json/JsonDataEncoderBuilder;->ignoreNullValues(Z)Lcom/google/firebase/encoders/json/JsonDataEncoderBuilder; +HSPLcom/google/firebase/encoders/json/JsonDataEncoderBuilder;->lambda$static$1(Ljava/lang/String;Lcom/google/firebase/encoders/ValueEncoderContext;)V +HSPLcom/google/firebase/encoders/json/JsonDataEncoderBuilder;->registerEncoder(Ljava/lang/Class;Lcom/google/firebase/encoders/ObjectEncoder;)Lcom/google/firebase/encoders/config/EncoderConfig; +HSPLcom/google/firebase/encoders/json/JsonDataEncoderBuilder;->registerEncoder(Ljava/lang/Class;Lcom/google/firebase/encoders/ObjectEncoder;)Lcom/google/firebase/encoders/json/JsonDataEncoderBuilder; +HSPLcom/google/firebase/encoders/json/JsonDataEncoderBuilder;->registerEncoder(Ljava/lang/Class;Lcom/google/firebase/encoders/ValueEncoder;)Lcom/google/firebase/encoders/json/JsonDataEncoderBuilder; +Lcom/google/firebase/encoders/json/JsonDataEncoderBuilder$$ExternalSyntheticLambda0; +HSPLcom/google/firebase/encoders/json/JsonDataEncoderBuilder$$ExternalSyntheticLambda0;->()V +Lcom/google/firebase/encoders/json/JsonDataEncoderBuilder$$ExternalSyntheticLambda1; +HSPLcom/google/firebase/encoders/json/JsonDataEncoderBuilder$$ExternalSyntheticLambda1;->()V +HSPLcom/google/firebase/encoders/json/JsonDataEncoderBuilder$$ExternalSyntheticLambda1;->encode(Ljava/lang/Object;Ljava/lang/Object;)V +Lcom/google/firebase/encoders/json/JsonDataEncoderBuilder$$ExternalSyntheticLambda2; +HSPLcom/google/firebase/encoders/json/JsonDataEncoderBuilder$$ExternalSyntheticLambda2;->()V +Lcom/google/firebase/encoders/json/JsonDataEncoderBuilder$1; +HSPLcom/google/firebase/encoders/json/JsonDataEncoderBuilder$1;->(Lcom/google/firebase/encoders/json/JsonDataEncoderBuilder;)V +HSPLcom/google/firebase/encoders/json/JsonDataEncoderBuilder$1;->encode(Ljava/lang/Object;)Ljava/lang/String; +HSPLcom/google/firebase/encoders/json/JsonDataEncoderBuilder$1;->encode(Ljava/lang/Object;Ljava/io/Writer;)V +Lcom/google/firebase/encoders/json/JsonDataEncoderBuilder$TimestampEncoder; +HSPLcom/google/firebase/encoders/json/JsonDataEncoderBuilder$TimestampEncoder;->()V +HSPLcom/google/firebase/encoders/json/JsonDataEncoderBuilder$TimestampEncoder;->()V +HSPLcom/google/firebase/encoders/json/JsonDataEncoderBuilder$TimestampEncoder;->(Lcom/google/firebase/encoders/json/JsonDataEncoderBuilder$1;)V +Lcom/google/firebase/encoders/json/JsonValueObjectEncoderContext; +HSPLcom/google/firebase/encoders/json/JsonValueObjectEncoderContext;->(Ljava/io/Writer;Ljava/util/Map;Ljava/util/Map;Lcom/google/firebase/encoders/ObjectEncoder;Z)V +HSPLcom/google/firebase/encoders/json/JsonValueObjectEncoderContext;->add(I)Lcom/google/firebase/encoders/json/JsonValueObjectEncoderContext; +HSPLcom/google/firebase/encoders/json/JsonValueObjectEncoderContext;->add(J)Lcom/google/firebase/encoders/json/JsonValueObjectEncoderContext; +HSPLcom/google/firebase/encoders/json/JsonValueObjectEncoderContext;->add(Lcom/google/firebase/encoders/FieldDescriptor;I)Lcom/google/firebase/encoders/ObjectEncoderContext; +HSPLcom/google/firebase/encoders/json/JsonValueObjectEncoderContext;->add(Lcom/google/firebase/encoders/FieldDescriptor;J)Lcom/google/firebase/encoders/ObjectEncoderContext; +HSPLcom/google/firebase/encoders/json/JsonValueObjectEncoderContext;->add(Lcom/google/firebase/encoders/FieldDescriptor;Ljava/lang/Object;)Lcom/google/firebase/encoders/ObjectEncoderContext; +HSPLcom/google/firebase/encoders/json/JsonValueObjectEncoderContext;->add(Lcom/google/firebase/encoders/FieldDescriptor;Z)Lcom/google/firebase/encoders/ObjectEncoderContext; +HSPLcom/google/firebase/encoders/json/JsonValueObjectEncoderContext;->add(Ljava/lang/Object;Z)Lcom/google/firebase/encoders/json/JsonValueObjectEncoderContext; +HSPLcom/google/firebase/encoders/json/JsonValueObjectEncoderContext;->add(Ljava/lang/String;)Lcom/google/firebase/encoders/ValueEncoderContext; +HSPLcom/google/firebase/encoders/json/JsonValueObjectEncoderContext;->add(Ljava/lang/String;)Lcom/google/firebase/encoders/json/JsonValueObjectEncoderContext; +HSPLcom/google/firebase/encoders/json/JsonValueObjectEncoderContext;->add(Ljava/lang/String;I)Lcom/google/firebase/encoders/json/JsonValueObjectEncoderContext; +HSPLcom/google/firebase/encoders/json/JsonValueObjectEncoderContext;->add(Ljava/lang/String;J)Lcom/google/firebase/encoders/json/JsonValueObjectEncoderContext; +HSPLcom/google/firebase/encoders/json/JsonValueObjectEncoderContext;->add(Ljava/lang/String;Ljava/lang/Object;)Lcom/google/firebase/encoders/json/JsonValueObjectEncoderContext; +HSPLcom/google/firebase/encoders/json/JsonValueObjectEncoderContext;->add(Ljava/lang/String;Z)Lcom/google/firebase/encoders/json/JsonValueObjectEncoderContext; +HSPLcom/google/firebase/encoders/json/JsonValueObjectEncoderContext;->add(Z)Lcom/google/firebase/encoders/json/JsonValueObjectEncoderContext; +HSPLcom/google/firebase/encoders/json/JsonValueObjectEncoderContext;->add([B)Lcom/google/firebase/encoders/json/JsonValueObjectEncoderContext; +HSPLcom/google/firebase/encoders/json/JsonValueObjectEncoderContext;->close()V +HSPLcom/google/firebase/encoders/json/JsonValueObjectEncoderContext;->doEncode(Lcom/google/firebase/encoders/ObjectEncoder;Ljava/lang/Object;Z)Lcom/google/firebase/encoders/json/JsonValueObjectEncoderContext; +HSPLcom/google/firebase/encoders/json/JsonValueObjectEncoderContext;->internalAddIgnoreNullValues(Ljava/lang/String;Ljava/lang/Object;)Lcom/google/firebase/encoders/json/JsonValueObjectEncoderContext; +HSPLcom/google/firebase/encoders/json/JsonValueObjectEncoderContext;->maybeUnNest()V +Lcom/google/firebase/encoders/json/NumberedEnum; +Lcom/google/firebase/events/EventHandler; +Lcom/google/firebase/events/Publisher; +Lcom/google/firebase/events/Subscriber; +Lcom/google/firebase/heartbeatinfo/DefaultHeartBeatController; +HSPLcom/google/firebase/heartbeatinfo/DefaultHeartBeatController;->(Landroid/content/Context;Ljava/lang/String;Ljava/util/Set;Lcom/google/firebase/inject/Provider;Ljava/util/concurrent/Executor;)V +HSPLcom/google/firebase/heartbeatinfo/DefaultHeartBeatController;->(Lcom/google/firebase/inject/Provider;Ljava/util/Set;Ljava/util/concurrent/Executor;Lcom/google/firebase/inject/Provider;Landroid/content/Context;)V +HSPLcom/google/firebase/heartbeatinfo/DefaultHeartBeatController;->component()Lcom/google/firebase/components/Component; +HSPLcom/google/firebase/heartbeatinfo/DefaultHeartBeatController;->lambda$component$3(Lcom/google/firebase/components/Qualified;Lcom/google/firebase/components/ComponentContainer;)Lcom/google/firebase/heartbeatinfo/DefaultHeartBeatController; +HSPLcom/google/firebase/heartbeatinfo/DefaultHeartBeatController;->lambda$new$2(Landroid/content/Context;Ljava/lang/String;)Lcom/google/firebase/heartbeatinfo/HeartBeatInfoStorage; +HSPLcom/google/firebase/heartbeatinfo/DefaultHeartBeatController;->lambda$registerHeartBeat$0$com-google-firebase-heartbeatinfo-DefaultHeartBeatController()Ljava/lang/Void; +HSPLcom/google/firebase/heartbeatinfo/DefaultHeartBeatController;->registerHeartBeat()Lcom/google/android/gms/tasks/Task; +Lcom/google/firebase/heartbeatinfo/DefaultHeartBeatController$$ExternalSyntheticLambda1; +HSPLcom/google/firebase/heartbeatinfo/DefaultHeartBeatController$$ExternalSyntheticLambda1;->(Lcom/google/firebase/heartbeatinfo/DefaultHeartBeatController;)V +HSPLcom/google/firebase/heartbeatinfo/DefaultHeartBeatController$$ExternalSyntheticLambda1;->call()Ljava/lang/Object; +Lcom/google/firebase/heartbeatinfo/DefaultHeartBeatController$$ExternalSyntheticLambda2; +HSPLcom/google/firebase/heartbeatinfo/DefaultHeartBeatController$$ExternalSyntheticLambda2;->(Lcom/google/firebase/components/Qualified;)V +HSPLcom/google/firebase/heartbeatinfo/DefaultHeartBeatController$$ExternalSyntheticLambda2;->create(Lcom/google/firebase/components/ComponentContainer;)Ljava/lang/Object; +Lcom/google/firebase/heartbeatinfo/DefaultHeartBeatController$$ExternalSyntheticLambda3; +HSPLcom/google/firebase/heartbeatinfo/DefaultHeartBeatController$$ExternalSyntheticLambda3;->(Landroid/content/Context;Ljava/lang/String;)V +HSPLcom/google/firebase/heartbeatinfo/DefaultHeartBeatController$$ExternalSyntheticLambda3;->get()Ljava/lang/Object; +Lcom/google/firebase/heartbeatinfo/HeartBeatConsumer; +Lcom/google/firebase/heartbeatinfo/HeartBeatConsumerComponent; +HSPLcom/google/firebase/heartbeatinfo/HeartBeatConsumerComponent;->create()Lcom/google/firebase/components/Component; +Lcom/google/firebase/heartbeatinfo/HeartBeatConsumerComponent$1; +HSPLcom/google/firebase/heartbeatinfo/HeartBeatConsumerComponent$1;->()V +Lcom/google/firebase/heartbeatinfo/HeartBeatController; +Lcom/google/firebase/heartbeatinfo/HeartBeatInfo; +Lcom/google/firebase/heartbeatinfo/HeartBeatInfoStorage; +HSPLcom/google/firebase/heartbeatinfo/HeartBeatInfoStorage;->()V +HSPLcom/google/firebase/heartbeatinfo/HeartBeatInfoStorage;->(Landroid/content/Context;Ljava/lang/String;)V +HSPLcom/google/firebase/heartbeatinfo/HeartBeatInfoStorage;->getFormattedDate(J)Ljava/lang/String; +HSPLcom/google/firebase/heartbeatinfo/HeartBeatInfoStorage;->getStoredUserAgentString(Ljava/lang/String;)Ljava/lang/String; +HSPLcom/google/firebase/heartbeatinfo/HeartBeatInfoStorage;->storeHeartBeat(JLjava/lang/String;)V +Lcom/google/firebase/inject/Deferred; +Lcom/google/firebase/inject/Deferred$DeferredHandler; +Lcom/google/firebase/inject/Provider; +Lcom/google/firebase/installations/FirebaseInstallations; +HSPLcom/google/firebase/installations/FirebaseInstallations;->()V +HSPLcom/google/firebase/installations/FirebaseInstallations;->(Lcom/google/firebase/FirebaseApp;Lcom/google/firebase/inject/Provider;Ljava/util/concurrent/ExecutorService;Ljava/util/concurrent/Executor;)V +HSPLcom/google/firebase/installations/FirebaseInstallations;->(Ljava/util/concurrent/ExecutorService;Ljava/util/concurrent/Executor;Lcom/google/firebase/FirebaseApp;Lcom/google/firebase/installations/remote/FirebaseInstallationServiceClient;Lcom/google/firebase/installations/local/PersistedInstallation;Lcom/google/firebase/installations/Utils;Lcom/google/firebase/components/Lazy;Lcom/google/firebase/installations/RandomFidGenerator;)V +Lcom/google/firebase/installations/FirebaseInstallations$$ExternalSyntheticLambda4; +HSPLcom/google/firebase/installations/FirebaseInstallations$$ExternalSyntheticLambda4;->(Lcom/google/firebase/FirebaseApp;)V +Lcom/google/firebase/installations/FirebaseInstallations$1; +HSPLcom/google/firebase/installations/FirebaseInstallations$1;->()V +Lcom/google/firebase/installations/FirebaseInstallationsApi; +Lcom/google/firebase/installations/FirebaseInstallationsException; +Lcom/google/firebase/installations/FirebaseInstallationsKtxRegistrar; +HSPLcom/google/firebase/installations/FirebaseInstallationsKtxRegistrar;->()V +HSPLcom/google/firebase/installations/FirebaseInstallationsKtxRegistrar;->getComponents()Ljava/util/List; +Lcom/google/firebase/installations/FirebaseInstallationsRegistrar; +HSPLcom/google/firebase/installations/FirebaseInstallationsRegistrar;->()V +HSPLcom/google/firebase/installations/FirebaseInstallationsRegistrar;->getComponents()Ljava/util/List; +HSPLcom/google/firebase/installations/FirebaseInstallationsRegistrar;->lambda$getComponents$0(Lcom/google/firebase/components/ComponentContainer;)Lcom/google/firebase/installations/FirebaseInstallationsApi; +Lcom/google/firebase/installations/FirebaseInstallationsRegistrar$$ExternalSyntheticLambda0; +HSPLcom/google/firebase/installations/FirebaseInstallationsRegistrar$$ExternalSyntheticLambda0;->()V +HSPLcom/google/firebase/installations/FirebaseInstallationsRegistrar$$ExternalSyntheticLambda0;->create(Lcom/google/firebase/components/ComponentContainer;)Ljava/lang/Object; +Lcom/google/firebase/installations/RandomFidGenerator; +HSPLcom/google/firebase/installations/RandomFidGenerator;->()V +HSPLcom/google/firebase/installations/RandomFidGenerator;->()V +Lcom/google/firebase/installations/Utils; +HSPLcom/google/firebase/installations/Utils;->()V +HSPLcom/google/firebase/installations/Utils;->(Lcom/google/firebase/installations/time/Clock;)V +HSPLcom/google/firebase/installations/Utils;->getInstance()Lcom/google/firebase/installations/Utils; +HSPLcom/google/firebase/installations/Utils;->getInstance(Lcom/google/firebase/installations/time/Clock;)Lcom/google/firebase/installations/Utils; +Lcom/google/firebase/installations/local/PersistedInstallation; +HSPLcom/google/firebase/installations/local/PersistedInstallation;->(Lcom/google/firebase/FirebaseApp;)V +Lcom/google/firebase/installations/remote/FirebaseInstallationServiceClient; +HSPLcom/google/firebase/installations/remote/FirebaseInstallationServiceClient;->()V +HSPLcom/google/firebase/installations/remote/FirebaseInstallationServiceClient;->(Landroid/content/Context;Lcom/google/firebase/inject/Provider;)V +Lcom/google/firebase/installations/remote/RequestLimiter; +HSPLcom/google/firebase/installations/remote/RequestLimiter;->()V +HSPLcom/google/firebase/installations/remote/RequestLimiter;->()V +Lcom/google/firebase/installations/time/Clock; +Lcom/google/firebase/installations/time/SystemClock; +HSPLcom/google/firebase/installations/time/SystemClock;->()V +HSPLcom/google/firebase/installations/time/SystemClock;->getInstance()Lcom/google/firebase/installations/time/SystemClock; +Lcom/google/firebase/internal/DataCollectionConfigStorage; +HSPLcom/google/firebase/internal/DataCollectionConfigStorage;->(Landroid/content/Context;Ljava/lang/String;Lcom/google/firebase/events/Publisher;)V +HSPLcom/google/firebase/internal/DataCollectionConfigStorage;->directBootSafe(Landroid/content/Context;)Landroid/content/Context; +HSPLcom/google/firebase/internal/DataCollectionConfigStorage;->isEnabled()Z +HSPLcom/google/firebase/internal/DataCollectionConfigStorage;->readAutoDataCollectionEnabled()Z +HSPLcom/google/firebase/internal/DataCollectionConfigStorage;->readManifestDataCollectionEnabled()Z +Lcom/google/firebase/ktx/Firebase; +HSPLcom/google/firebase/ktx/Firebase;->()V +HSPLcom/google/firebase/ktx/Firebase;->()V +Lcom/google/firebase/ktx/FirebaseCommonLegacyRegistrar; +HSPLcom/google/firebase/ktx/FirebaseCommonLegacyRegistrar;->()V +HSPLcom/google/firebase/ktx/FirebaseCommonLegacyRegistrar;->getComponents()Ljava/util/List; +Lcom/google/firebase/platforminfo/AutoValue_LibraryVersion; +HSPLcom/google/firebase/platforminfo/AutoValue_LibraryVersion;->(Ljava/lang/String;Ljava/lang/String;)V +HSPLcom/google/firebase/platforminfo/AutoValue_LibraryVersion;->getLibraryName()Ljava/lang/String; +HSPLcom/google/firebase/platforminfo/AutoValue_LibraryVersion;->getVersion()Ljava/lang/String; +HSPLcom/google/firebase/platforminfo/AutoValue_LibraryVersion;->hashCode()I +Lcom/google/firebase/platforminfo/DefaultUserAgentPublisher; +HSPLcom/google/firebase/platforminfo/DefaultUserAgentPublisher;->(Ljava/util/Set;Lcom/google/firebase/platforminfo/GlobalLibraryVersionRegistrar;)V +HSPLcom/google/firebase/platforminfo/DefaultUserAgentPublisher;->component()Lcom/google/firebase/components/Component; +HSPLcom/google/firebase/platforminfo/DefaultUserAgentPublisher;->getUserAgent()Ljava/lang/String; +HSPLcom/google/firebase/platforminfo/DefaultUserAgentPublisher;->lambda$component$0(Lcom/google/firebase/components/ComponentContainer;)Lcom/google/firebase/platforminfo/UserAgentPublisher; +HSPLcom/google/firebase/platforminfo/DefaultUserAgentPublisher;->toUserAgent(Ljava/util/Set;)Ljava/lang/String; +Lcom/google/firebase/platforminfo/DefaultUserAgentPublisher$$ExternalSyntheticLambda0; +HSPLcom/google/firebase/platforminfo/DefaultUserAgentPublisher$$ExternalSyntheticLambda0;->()V +HSPLcom/google/firebase/platforminfo/DefaultUserAgentPublisher$$ExternalSyntheticLambda0;->create(Lcom/google/firebase/components/ComponentContainer;)Ljava/lang/Object; +Lcom/google/firebase/platforminfo/GlobalLibraryVersionRegistrar; +HSPLcom/google/firebase/platforminfo/GlobalLibraryVersionRegistrar;->()V +HSPLcom/google/firebase/platforminfo/GlobalLibraryVersionRegistrar;->getInstance()Lcom/google/firebase/platforminfo/GlobalLibraryVersionRegistrar; +HSPLcom/google/firebase/platforminfo/GlobalLibraryVersionRegistrar;->getRegisteredVersions()Ljava/util/Set; +Lcom/google/firebase/platforminfo/KotlinDetector; +HSPLcom/google/firebase/platforminfo/KotlinDetector;->detectVersion()Ljava/lang/String; +Lcom/google/firebase/platforminfo/LibraryVersion; +HSPLcom/google/firebase/platforminfo/LibraryVersion;->()V +HSPLcom/google/firebase/platforminfo/LibraryVersion;->create(Ljava/lang/String;Ljava/lang/String;)Lcom/google/firebase/platforminfo/LibraryVersion; +Lcom/google/firebase/platforminfo/LibraryVersionComponent; +HSPLcom/google/firebase/platforminfo/LibraryVersionComponent;->create(Ljava/lang/String;Ljava/lang/String;)Lcom/google/firebase/components/Component; +HSPLcom/google/firebase/platforminfo/LibraryVersionComponent;->fromContext(Ljava/lang/String;Lcom/google/firebase/platforminfo/LibraryVersionComponent$VersionExtractor;)Lcom/google/firebase/components/Component; +HSPLcom/google/firebase/platforminfo/LibraryVersionComponent;->lambda$fromContext$0(Ljava/lang/String;Lcom/google/firebase/platforminfo/LibraryVersionComponent$VersionExtractor;Lcom/google/firebase/components/ComponentContainer;)Lcom/google/firebase/platforminfo/LibraryVersion; +Lcom/google/firebase/platforminfo/LibraryVersionComponent$$ExternalSyntheticLambda0; +HSPLcom/google/firebase/platforminfo/LibraryVersionComponent$$ExternalSyntheticLambda0;->(Ljava/lang/String;Lcom/google/firebase/platforminfo/LibraryVersionComponent$VersionExtractor;)V +HSPLcom/google/firebase/platforminfo/LibraryVersionComponent$$ExternalSyntheticLambda0;->create(Lcom/google/firebase/components/ComponentContainer;)Ljava/lang/Object; +Lcom/google/firebase/platforminfo/LibraryVersionComponent$VersionExtractor; +Lcom/google/firebase/platforminfo/UserAgentPublisher; +Lcom/google/firebase/provider/FirebaseInitProvider; +HSPLcom/google/firebase/provider/FirebaseInitProvider;->()V +HSPLcom/google/firebase/provider/FirebaseInitProvider;->()V +HSPLcom/google/firebase/provider/FirebaseInitProvider;->attachInfo(Landroid/content/Context;Landroid/content/pm/ProviderInfo;)V +HSPLcom/google/firebase/provider/FirebaseInitProvider;->checkContentProviderAuthority(Landroid/content/pm/ProviderInfo;)V +HSPLcom/google/firebase/provider/FirebaseInitProvider;->getStartupTime()Lcom/google/firebase/StartupTime; +HSPLcom/google/firebase/provider/FirebaseInitProvider;->isCurrentlyInitializing()Z +HSPLcom/google/firebase/provider/FirebaseInitProvider;->onCreate()Z +Lcom/google/firebase/remoteconfig/interop/FirebaseRemoteConfigInterop; +Lcom/google/firebase/remoteconfig/interop/rollouts/RolloutsStateSubscriber; +Lcom/google/firebase/sessions/AndroidApplicationInfo; +HSPLcom/google/firebase/sessions/AndroidApplicationInfo;->(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/google/firebase/sessions/ProcessDetails;Ljava/util/List;)V +Lcom/google/firebase/sessions/ApplicationInfo; +HSPLcom/google/firebase/sessions/ApplicationInfo;->(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/google/firebase/sessions/LogEnvironment;Lcom/google/firebase/sessions/AndroidApplicationInfo;)V +Lcom/google/firebase/sessions/AutoSessionEventEncoder; +HSPLcom/google/firebase/sessions/AutoSessionEventEncoder;->()V +HSPLcom/google/firebase/sessions/AutoSessionEventEncoder;->()V +HSPLcom/google/firebase/sessions/AutoSessionEventEncoder;->configure(Lcom/google/firebase/encoders/config/EncoderConfig;)V +Lcom/google/firebase/sessions/AutoSessionEventEncoder$AndroidApplicationInfoEncoder; +HSPLcom/google/firebase/sessions/AutoSessionEventEncoder$AndroidApplicationInfoEncoder;->()V +HSPLcom/google/firebase/sessions/AutoSessionEventEncoder$AndroidApplicationInfoEncoder;->()V +Lcom/google/firebase/sessions/AutoSessionEventEncoder$ApplicationInfoEncoder; +HSPLcom/google/firebase/sessions/AutoSessionEventEncoder$ApplicationInfoEncoder;->()V +HSPLcom/google/firebase/sessions/AutoSessionEventEncoder$ApplicationInfoEncoder;->()V +Lcom/google/firebase/sessions/AutoSessionEventEncoder$DataCollectionStatusEncoder; +HSPLcom/google/firebase/sessions/AutoSessionEventEncoder$DataCollectionStatusEncoder;->()V +HSPLcom/google/firebase/sessions/AutoSessionEventEncoder$DataCollectionStatusEncoder;->()V +Lcom/google/firebase/sessions/AutoSessionEventEncoder$ProcessDetailsEncoder; +HSPLcom/google/firebase/sessions/AutoSessionEventEncoder$ProcessDetailsEncoder;->()V +HSPLcom/google/firebase/sessions/AutoSessionEventEncoder$ProcessDetailsEncoder;->()V +Lcom/google/firebase/sessions/AutoSessionEventEncoder$SessionEventEncoder; +HSPLcom/google/firebase/sessions/AutoSessionEventEncoder$SessionEventEncoder;->()V +HSPLcom/google/firebase/sessions/AutoSessionEventEncoder$SessionEventEncoder;->()V +Lcom/google/firebase/sessions/AutoSessionEventEncoder$SessionInfoEncoder; +HSPLcom/google/firebase/sessions/AutoSessionEventEncoder$SessionInfoEncoder;->()V +HSPLcom/google/firebase/sessions/AutoSessionEventEncoder$SessionInfoEncoder;->()V +Lcom/google/firebase/sessions/DataCollectionStatus; +Lcom/google/firebase/sessions/FirebaseSessions; +HSPLcom/google/firebase/sessions/FirebaseSessions;->()V +HSPLcom/google/firebase/sessions/FirebaseSessions;->(Lcom/google/firebase/FirebaseApp;Lcom/google/firebase/sessions/settings/SessionsSettings;Lkotlin/coroutines/CoroutineContext;)V +Lcom/google/firebase/sessions/FirebaseSessions$1; +HSPLcom/google/firebase/sessions/FirebaseSessions$1;->(Lcom/google/firebase/sessions/FirebaseSessions;Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/Continuation;)V +HSPLcom/google/firebase/sessions/FirebaseSessions$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/google/firebase/sessions/FirebaseSessions$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/google/firebase/sessions/FirebaseSessions$Companion; +HSPLcom/google/firebase/sessions/FirebaseSessions$Companion;->()V +HSPLcom/google/firebase/sessions/FirebaseSessions$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/google/firebase/sessions/FirebaseSessionsRegistrar; +HSPLcom/google/firebase/sessions/FirebaseSessionsRegistrar;->$r8$lambda$JITndpZCWeA0w9BDlkcI3l22oGY(Lcom/google/firebase/components/ComponentContainer;)Lcom/google/firebase/sessions/FirebaseSessions; +HSPLcom/google/firebase/sessions/FirebaseSessionsRegistrar;->$r8$lambda$lQmicvH5m7EC8I4trkeatnIrMEc(Lcom/google/firebase/components/ComponentContainer;)Lcom/google/firebase/sessions/settings/SessionsSettings; +HSPLcom/google/firebase/sessions/FirebaseSessionsRegistrar;->()V +HSPLcom/google/firebase/sessions/FirebaseSessionsRegistrar;->()V +HSPLcom/google/firebase/sessions/FirebaseSessionsRegistrar;->getComponents$lambda-0(Lcom/google/firebase/components/ComponentContainer;)Lcom/google/firebase/sessions/FirebaseSessions; +HSPLcom/google/firebase/sessions/FirebaseSessionsRegistrar;->getComponents$lambda-3(Lcom/google/firebase/components/ComponentContainer;)Lcom/google/firebase/sessions/settings/SessionsSettings; +HSPLcom/google/firebase/sessions/FirebaseSessionsRegistrar;->getComponents()Ljava/util/List; +Lcom/google/firebase/sessions/FirebaseSessionsRegistrar$$ExternalSyntheticLambda0; +HSPLcom/google/firebase/sessions/FirebaseSessionsRegistrar$$ExternalSyntheticLambda0;->()V +HSPLcom/google/firebase/sessions/FirebaseSessionsRegistrar$$ExternalSyntheticLambda0;->create(Lcom/google/firebase/components/ComponentContainer;)Ljava/lang/Object; +Lcom/google/firebase/sessions/FirebaseSessionsRegistrar$$ExternalSyntheticLambda1; +HSPLcom/google/firebase/sessions/FirebaseSessionsRegistrar$$ExternalSyntheticLambda1;->()V +Lcom/google/firebase/sessions/FirebaseSessionsRegistrar$$ExternalSyntheticLambda2; +HSPLcom/google/firebase/sessions/FirebaseSessionsRegistrar$$ExternalSyntheticLambda2;->()V +Lcom/google/firebase/sessions/FirebaseSessionsRegistrar$$ExternalSyntheticLambda3; +HSPLcom/google/firebase/sessions/FirebaseSessionsRegistrar$$ExternalSyntheticLambda3;->()V +HSPLcom/google/firebase/sessions/FirebaseSessionsRegistrar$$ExternalSyntheticLambda3;->create(Lcom/google/firebase/components/ComponentContainer;)Ljava/lang/Object; +Lcom/google/firebase/sessions/FirebaseSessionsRegistrar$$ExternalSyntheticLambda4; +HSPLcom/google/firebase/sessions/FirebaseSessionsRegistrar$$ExternalSyntheticLambda4;->()V +Lcom/google/firebase/sessions/FirebaseSessionsRegistrar$$ExternalSyntheticLambda5; +HSPLcom/google/firebase/sessions/FirebaseSessionsRegistrar$$ExternalSyntheticLambda5;->()V +Lcom/google/firebase/sessions/FirebaseSessionsRegistrar$Companion; +HSPLcom/google/firebase/sessions/FirebaseSessionsRegistrar$Companion;->()V +HSPLcom/google/firebase/sessions/FirebaseSessionsRegistrar$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/google/firebase/sessions/LogEnvironment; +HSPLcom/google/firebase/sessions/LogEnvironment;->$values()[Lcom/google/firebase/sessions/LogEnvironment; +HSPLcom/google/firebase/sessions/LogEnvironment;->()V +HSPLcom/google/firebase/sessions/LogEnvironment;->(Ljava/lang/String;II)V +Lcom/google/firebase/sessions/ProcessDetails; +HSPLcom/google/firebase/sessions/ProcessDetails;->(Ljava/lang/String;IIZ)V +HSPLcom/google/firebase/sessions/ProcessDetails;->getPid()I +Lcom/google/firebase/sessions/ProcessDetailsProvider; +HSPLcom/google/firebase/sessions/ProcessDetailsProvider;->()V +HSPLcom/google/firebase/sessions/ProcessDetailsProvider;->()V +HSPLcom/google/firebase/sessions/ProcessDetailsProvider;->getAppProcessDetails(Landroid/content/Context;)Ljava/util/List; +HSPLcom/google/firebase/sessions/ProcessDetailsProvider;->getCurrentProcessDetails(Landroid/content/Context;)Lcom/google/firebase/sessions/ProcessDetails; +HSPLcom/google/firebase/sessions/ProcessDetailsProvider;->getProcessName$com_google_firebase_firebase_sessions()Ljava/lang/String; +Lcom/google/firebase/sessions/SessionDataStoreConfigs; +HSPLcom/google/firebase/sessions/SessionDataStoreConfigs;->()V +HSPLcom/google/firebase/sessions/SessionDataStoreConfigs;->()V +HSPLcom/google/firebase/sessions/SessionDataStoreConfigs;->getSETTINGS_CONFIG_NAME()Ljava/lang/String; +Lcom/google/firebase/sessions/SessionDatastore; +Lcom/google/firebase/sessions/SessionEvent; +Lcom/google/firebase/sessions/SessionEvents; +HSPLcom/google/firebase/sessions/SessionEvents;->()V +HSPLcom/google/firebase/sessions/SessionEvents;->()V +HSPLcom/google/firebase/sessions/SessionEvents;->getApplicationInfo(Lcom/google/firebase/FirebaseApp;)Lcom/google/firebase/sessions/ApplicationInfo; +Lcom/google/firebase/sessions/SessionFirelogPublisher; +Lcom/google/firebase/sessions/SessionGenerator; +Lcom/google/firebase/sessions/SessionInfo; +Lcom/google/firebase/sessions/SessionLifecycleServiceBinder; +Lcom/google/firebase/sessions/SessionsActivityLifecycleCallbacks; +HSPLcom/google/firebase/sessions/SessionsActivityLifecycleCallbacks;->()V +HSPLcom/google/firebase/sessions/SessionsActivityLifecycleCallbacks;->()V +HSPLcom/google/firebase/sessions/SessionsActivityLifecycleCallbacks;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V +HSPLcom/google/firebase/sessions/SessionsActivityLifecycleCallbacks;->onActivityResumed(Landroid/app/Activity;)V +HSPLcom/google/firebase/sessions/SessionsActivityLifecycleCallbacks;->onActivityStarted(Landroid/app/Activity;)V +Lcom/google/firebase/sessions/api/FirebaseSessionsDependencies; +HSPLcom/google/firebase/sessions/api/FirebaseSessionsDependencies;->()V +HSPLcom/google/firebase/sessions/api/FirebaseSessionsDependencies;->()V +HSPLcom/google/firebase/sessions/api/FirebaseSessionsDependencies;->addDependency(Lcom/google/firebase/sessions/api/SessionSubscriber$Name;)V +HSPLcom/google/firebase/sessions/api/FirebaseSessionsDependencies;->getDependency(Lcom/google/firebase/sessions/api/SessionSubscriber$Name;)Lcom/google/firebase/sessions/api/FirebaseSessionsDependencies$Dependency; +HSPLcom/google/firebase/sessions/api/FirebaseSessionsDependencies;->getRegisteredSubscribers$com_google_firebase_firebase_sessions(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/google/firebase/sessions/api/FirebaseSessionsDependencies;->getSubscriber$com_google_firebase_firebase_sessions(Lcom/google/firebase/sessions/api/SessionSubscriber$Name;)Lcom/google/firebase/sessions/api/SessionSubscriber; +HSPLcom/google/firebase/sessions/api/FirebaseSessionsDependencies;->register(Lcom/google/firebase/sessions/api/SessionSubscriber;)V +Lcom/google/firebase/sessions/api/FirebaseSessionsDependencies$Dependency; +HSPLcom/google/firebase/sessions/api/FirebaseSessionsDependencies$Dependency;->(Lkotlinx/coroutines/sync/Mutex;Lcom/google/firebase/sessions/api/SessionSubscriber;)V +HSPLcom/google/firebase/sessions/api/FirebaseSessionsDependencies$Dependency;->(Lkotlinx/coroutines/sync/Mutex;Lcom/google/firebase/sessions/api/SessionSubscriber;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/google/firebase/sessions/api/FirebaseSessionsDependencies$Dependency;->getMutex()Lkotlinx/coroutines/sync/Mutex; +HSPLcom/google/firebase/sessions/api/FirebaseSessionsDependencies$Dependency;->getSubscriber()Lcom/google/firebase/sessions/api/SessionSubscriber; +HSPLcom/google/firebase/sessions/api/FirebaseSessionsDependencies$Dependency;->setSubscriber(Lcom/google/firebase/sessions/api/SessionSubscriber;)V +Lcom/google/firebase/sessions/api/FirebaseSessionsDependencies$getRegisteredSubscribers$1; +HSPLcom/google/firebase/sessions/api/FirebaseSessionsDependencies$getRegisteredSubscribers$1;->(Lcom/google/firebase/sessions/api/FirebaseSessionsDependencies;Lkotlin/coroutines/Continuation;)V +HSPLcom/google/firebase/sessions/api/FirebaseSessionsDependencies$getRegisteredSubscribers$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/google/firebase/sessions/api/SessionSubscriber; +Lcom/google/firebase/sessions/api/SessionSubscriber$Name; +HSPLcom/google/firebase/sessions/api/SessionSubscriber$Name;->$values()[Lcom/google/firebase/sessions/api/SessionSubscriber$Name; +HSPLcom/google/firebase/sessions/api/SessionSubscriber$Name;->()V +HSPLcom/google/firebase/sessions/api/SessionSubscriber$Name;->(Ljava/lang/String;I)V +Lcom/google/firebase/sessions/settings/CrashlyticsSettingsFetcher; +Lcom/google/firebase/sessions/settings/LocalOverrideSettings; +HSPLcom/google/firebase/sessions/settings/LocalOverrideSettings;->()V +HSPLcom/google/firebase/sessions/settings/LocalOverrideSettings;->(Landroid/content/Context;)V +Lcom/google/firebase/sessions/settings/LocalOverrideSettings$Companion; +HSPLcom/google/firebase/sessions/settings/LocalOverrideSettings$Companion;->()V +HSPLcom/google/firebase/sessions/settings/LocalOverrideSettings$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/google/firebase/sessions/settings/RemoteSettings; +HSPLcom/google/firebase/sessions/settings/RemoteSettings;->()V +HSPLcom/google/firebase/sessions/settings/RemoteSettings;->(Lkotlin/coroutines/CoroutineContext;Lcom/google/firebase/installations/FirebaseInstallationsApi;Lcom/google/firebase/sessions/ApplicationInfo;Lcom/google/firebase/sessions/settings/CrashlyticsSettingsFetcher;Landroidx/datastore/core/DataStore;)V +Lcom/google/firebase/sessions/settings/RemoteSettings$Companion; +HSPLcom/google/firebase/sessions/settings/RemoteSettings$Companion;->()V +HSPLcom/google/firebase/sessions/settings/RemoteSettings$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/google/firebase/sessions/settings/RemoteSettingsFetcher; +HSPLcom/google/firebase/sessions/settings/RemoteSettingsFetcher;->()V +HSPLcom/google/firebase/sessions/settings/RemoteSettingsFetcher;->(Lcom/google/firebase/sessions/ApplicationInfo;Lkotlin/coroutines/CoroutineContext;Ljava/lang/String;)V +HSPLcom/google/firebase/sessions/settings/RemoteSettingsFetcher;->(Lcom/google/firebase/sessions/ApplicationInfo;Lkotlin/coroutines/CoroutineContext;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/google/firebase/sessions/settings/RemoteSettingsFetcher$Companion; +HSPLcom/google/firebase/sessions/settings/RemoteSettingsFetcher$Companion;->()V +HSPLcom/google/firebase/sessions/settings/RemoteSettingsFetcher$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/google/firebase/sessions/settings/SessionConfigs; +HSPLcom/google/firebase/sessions/settings/SessionConfigs;->(Ljava/lang/Boolean;Ljava/lang/Double;Ljava/lang/Integer;Ljava/lang/Integer;Ljava/lang/Long;)V +Lcom/google/firebase/sessions/settings/SessionsSettings; +HSPLcom/google/firebase/sessions/settings/SessionsSettings;->()V +HSPLcom/google/firebase/sessions/settings/SessionsSettings;->(Landroid/content/Context;Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/CoroutineContext;Lcom/google/firebase/installations/FirebaseInstallationsApi;Lcom/google/firebase/sessions/ApplicationInfo;)V +HSPLcom/google/firebase/sessions/settings/SessionsSettings;->(Lcom/google/firebase/FirebaseApp;Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/CoroutineContext;Lcom/google/firebase/installations/FirebaseInstallationsApi;)V +HSPLcom/google/firebase/sessions/settings/SessionsSettings;->(Lcom/google/firebase/sessions/settings/SettingsProvider;Lcom/google/firebase/sessions/settings/SettingsProvider;)V +HSPLcom/google/firebase/sessions/settings/SessionsSettings;->access$getDataStore$delegate$cp()Lkotlin/properties/ReadOnlyProperty; +Lcom/google/firebase/sessions/settings/SessionsSettings$Companion; +HSPLcom/google/firebase/sessions/settings/SessionsSettings$Companion;->()V +HSPLcom/google/firebase/sessions/settings/SessionsSettings$Companion;->()V +HSPLcom/google/firebase/sessions/settings/SessionsSettings$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/google/firebase/sessions/settings/SessionsSettings$Companion;->access$getDataStore(Lcom/google/firebase/sessions/settings/SessionsSettings$Companion;Landroid/content/Context;)Landroidx/datastore/core/DataStore; +HSPLcom/google/firebase/sessions/settings/SessionsSettings$Companion;->getDataStore(Landroid/content/Context;)Landroidx/datastore/core/DataStore; +Lcom/google/firebase/sessions/settings/SettingsCache; +HSPLcom/google/firebase/sessions/settings/SettingsCache;->()V +HSPLcom/google/firebase/sessions/settings/SettingsCache;->(Landroidx/datastore/core/DataStore;)V +HSPLcom/google/firebase/sessions/settings/SettingsCache;->access$getDataStore$p(Lcom/google/firebase/sessions/settings/SettingsCache;)Landroidx/datastore/core/DataStore; +HSPLcom/google/firebase/sessions/settings/SettingsCache;->access$updateSessionConfigs(Lcom/google/firebase/sessions/settings/SettingsCache;Landroidx/datastore/preferences/core/Preferences;)V +HSPLcom/google/firebase/sessions/settings/SettingsCache;->updateSessionConfigs(Landroidx/datastore/preferences/core/Preferences;)V +Lcom/google/firebase/sessions/settings/SettingsCache$1; +HSPLcom/google/firebase/sessions/settings/SettingsCache$1;->(Lcom/google/firebase/sessions/settings/SettingsCache;Lkotlin/coroutines/Continuation;)V +HSPLcom/google/firebase/sessions/settings/SettingsCache$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/google/firebase/sessions/settings/SettingsCache$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/google/firebase/sessions/settings/SettingsCache$Companion; +HSPLcom/google/firebase/sessions/settings/SettingsCache$Companion;->()V +HSPLcom/google/firebase/sessions/settings/SettingsCache$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/google/firebase/sessions/settings/SettingsProvider; +Lcom/google/firebase/tracing/ComponentMonitor; +HSPLcom/google/firebase/tracing/ComponentMonitor;->()V +HSPLcom/google/firebase/tracing/ComponentMonitor;->lambda$processRegistrar$0(Ljava/lang/String;Lcom/google/firebase/components/Component;Lcom/google/firebase/components/ComponentContainer;)Ljava/lang/Object; +HSPLcom/google/firebase/tracing/ComponentMonitor;->processRegistrar(Lcom/google/firebase/components/ComponentRegistrar;)Ljava/util/List; +Lcom/google/firebase/tracing/ComponentMonitor$$ExternalSyntheticLambda0; +HSPLcom/google/firebase/tracing/ComponentMonitor$$ExternalSyntheticLambda0;->(Ljava/lang/String;Lcom/google/firebase/components/Component;)V +HSPLcom/google/firebase/tracing/ComponentMonitor$$ExternalSyntheticLambda0;->create(Lcom/google/firebase/components/ComponentContainer;)Ljava/lang/Object; +Lcom/google/firebase/tracing/FirebaseTrace; +HSPLcom/google/firebase/tracing/FirebaseTrace;->popTrace()V +HSPLcom/google/firebase/tracing/FirebaseTrace;->pushTrace(Ljava/lang/String;)V +Lcom/google/mlkit/common/internal/CommonComponentRegistrar; +HSPLcom/google/mlkit/common/internal/CommonComponentRegistrar;->()V +HSPLcom/google/mlkit/common/internal/CommonComponentRegistrar;->getComponents()Ljava/util/List; +Lcom/google/mlkit/common/internal/MlKitComponentDiscoveryService; +Lcom/google/mlkit/common/internal/MlKitInitProvider; +HSPLcom/google/mlkit/common/internal/MlKitInitProvider;->()V +HSPLcom/google/mlkit/common/internal/MlKitInitProvider;->attachInfo(Landroid/content/Context;Landroid/content/pm/ProviderInfo;)V +HSPLcom/google/mlkit/common/internal/MlKitInitProvider;->onCreate()Z +Lcom/google/mlkit/common/internal/model/zzg; +Lcom/google/mlkit/common/internal/zza; +HSPLcom/google/mlkit/common/internal/zza;->()V +HSPLcom/google/mlkit/common/internal/zza;->()V +Lcom/google/mlkit/common/internal/zzb; +HSPLcom/google/mlkit/common/internal/zzb;->()V +HSPLcom/google/mlkit/common/internal/zzb;->()V +Lcom/google/mlkit/common/internal/zzc; +HSPLcom/google/mlkit/common/internal/zzc;->()V +HSPLcom/google/mlkit/common/internal/zzc;->()V +Lcom/google/mlkit/common/internal/zzd; +HSPLcom/google/mlkit/common/internal/zzd;->()V +HSPLcom/google/mlkit/common/internal/zzd;->()V +Lcom/google/mlkit/common/internal/zze; +HSPLcom/google/mlkit/common/internal/zze;->()V +HSPLcom/google/mlkit/common/internal/zze;->()V +Lcom/google/mlkit/common/internal/zzf; +HSPLcom/google/mlkit/common/internal/zzf;->()V +HSPLcom/google/mlkit/common/internal/zzf;->()V +Lcom/google/mlkit/common/internal/zzg; +HSPLcom/google/mlkit/common/internal/zzg;->()V +HSPLcom/google/mlkit/common/internal/zzg;->()V +Lcom/google/mlkit/common/internal/zzh; +HSPLcom/google/mlkit/common/internal/zzh;->()V +HSPLcom/google/mlkit/common/internal/zzh;->()V +Lcom/google/mlkit/common/model/RemoteModelManager; +Lcom/google/mlkit/common/model/RemoteModelManager$RemoteModelManagerRegistration; +Lcom/google/mlkit/common/sdkinternal/Cleaner; +Lcom/google/mlkit/common/sdkinternal/CloseGuard$Factory; +Lcom/google/mlkit/common/sdkinternal/ExecutorSelector; +Lcom/google/mlkit/common/sdkinternal/LazyInstanceMap; +Lcom/google/mlkit/common/sdkinternal/MlKitContext; +HSPLcom/google/mlkit/common/sdkinternal/MlKitContext;->()V +HSPLcom/google/mlkit/common/sdkinternal/MlKitContext;->()V +HSPLcom/google/mlkit/common/sdkinternal/MlKitContext;->zza(Landroid/content/Context;)Lcom/google/mlkit/common/sdkinternal/MlKitContext; +HSPLcom/google/mlkit/common/sdkinternal/MlKitContext;->zzb(Landroid/content/Context;)Landroid/content/Context; +Lcom/google/mlkit/common/sdkinternal/MlKitThreadPool; +Lcom/google/mlkit/common/sdkinternal/SharedPrefManager; +HSPLcom/google/mlkit/common/sdkinternal/SharedPrefManager;->()V +Lcom/google/mlkit/common/sdkinternal/model/ModelFileHelper; +Lcom/google/mlkit/common/sdkinternal/model/RemoteModelManagerInterface; +Lcom/google/mlkit/common/sdkinternal/zzs; +HSPLcom/google/mlkit/common/sdkinternal/zzs;->()V +HSPLcom/google/mlkit/common/sdkinternal/zzs;->()V +Lcom/google/mlkit/vision/barcode/internal/BarcodeRegistrar; +HSPLcom/google/mlkit/vision/barcode/internal/BarcodeRegistrar;->()V +HSPLcom/google/mlkit/vision/barcode/internal/BarcodeRegistrar;->getComponents()Ljava/util/List; +Lcom/google/mlkit/vision/barcode/internal/zzc; +HSPLcom/google/mlkit/vision/barcode/internal/zzc;->()V +HSPLcom/google/mlkit/vision/barcode/internal/zzc;->()V +Lcom/google/mlkit/vision/barcode/internal/zzd; +HSPLcom/google/mlkit/vision/barcode/internal/zzd;->()V +HSPLcom/google/mlkit/vision/barcode/internal/zzd;->()V +Lcom/google/mlkit/vision/barcode/internal/zzg; +Lcom/google/mlkit/vision/barcode/internal/zzh; +Lcom/google/mlkit/vision/common/internal/MultiFlavorDetectorCreator; +Lcom/google/mlkit/vision/common/internal/MultiFlavorDetectorCreator$Registration; +Lcom/google/mlkit/vision/common/internal/VisionCommonRegistrar; +HSPLcom/google/mlkit/vision/common/internal/VisionCommonRegistrar;->()V +HSPLcom/google/mlkit/vision/common/internal/VisionCommonRegistrar;->getComponents()Ljava/util/List; +Lcom/google/mlkit/vision/common/internal/zzf; +HSPLcom/google/mlkit/vision/common/internal/zzf;->()V +HSPLcom/google/mlkit/vision/common/internal/zzf;->()V +Ldb_key_value/crypto_prefs/SecurePrefKeyValueStore; +HSPLdb_key_value/crypto_prefs/SecurePrefKeyValueStore;->()V +HSPLdb_key_value/crypto_prefs/SecurePrefKeyValueStore;->(Landroid/content/Context;Ljava/lang/String;)V +HSPLdb_key_value/crypto_prefs/SecurePrefKeyValueStore;->getBoolean(Ljava/lang/String;Z)Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference; +HSPLdb_key_value/crypto_prefs/SecurePrefKeyValueStore;->getLong(Ljava/lang/String;J)Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference; +HSPLdb_key_value/crypto_prefs/SecurePrefKeyValueStore;->getString(Ljava/lang/String;Ljava/lang/String;)Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference; +Ldb_key_value/crypto_prefs/SecurePrefKeyValueStore$1; +HSPLdb_key_value/crypto_prefs/SecurePrefKeyValueStore$1;->(Landroid/content/Context;Ljava/lang/String;Lkotlin/coroutines/Continuation;)V +HSPLdb_key_value/crypto_prefs/SecurePrefKeyValueStore$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLdb_key_value/crypto_prefs/SecurePrefKeyValueStore$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLdb_key_value/crypto_prefs/SecurePrefKeyValueStore$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLdb_key_value/crypto_prefs/SecurePrefKeyValueStore$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Ldb_key_value/crypto_prefs/SecurePrefKeyValueStoreKt; +HSPLdb_key_value/crypto_prefs/SecurePrefKeyValueStoreKt;->access$getEncryptedSharedPrefsOrRecreate(Landroid/content/Context;Ljava/lang/String;)Landroid/content/SharedPreferences; +HSPLdb_key_value/crypto_prefs/SecurePrefKeyValueStoreKt;->getEncryptedSharedPrefs(Landroid/content/Context;Ljava/lang/String;)Landroid/content/SharedPreferences; +HSPLdb_key_value/crypto_prefs/SecurePrefKeyValueStoreKt;->getEncryptedSharedPrefsOrRecreate(Landroid/content/Context;Ljava/lang/String;)Landroid/content/SharedPreferences; +HSPLdb_key_value/crypto_prefs/SecurePrefKeyValueStoreKt;->getMasterKeyAlias(Landroid/content/Context;Ljava/lang/String;Lkotlin/jvm/functions/Function0;)Landroidx/security/crypto/MasterKey; +Ldb_key_value/crypto_prefs/SecurePrefKeyValueStoreKt$getEncryptedSharedPrefs$1$masterKeyAlias$1; +HSPLdb_key_value/crypto_prefs/SecurePrefKeyValueStoreKt$getEncryptedSharedPrefs$1$masterKeyAlias$1;->(Landroid/content/Context;Ljava/lang/String;)V +Ldb_key_value/shared_prefs/SharedPrefsKeyValuePreference; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValuePreference;->()V +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValuePreference;->(Lkotlin/jvm/functions/Function1;)V +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValuePreference;->access$getPref(Ldb_key_value/shared_prefs/SharedPrefsKeyValuePreference;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValuePreference;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValuePreference;->flowOfPref()Lkotlinx/coroutines/flow/Flow; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValuePreference;->getPref(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValuePreference;->setAndCommit(Ljava/lang/Object;)Lkotlin/jvm/functions/Function1; +Ldb_key_value/shared_prefs/SharedPrefsKeyValuePreference$flowOfPref$1; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValuePreference$flowOfPref$1;->(Ldb_key_value/shared_prefs/SharedPrefsKeyValuePreference;Lkotlin/coroutines/Continuation;)V +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValuePreference$flowOfPref$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValuePreference$flowOfPref$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValuePreference$flowOfPref$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValuePreference$flowOfPref$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Ldb_key_value/shared_prefs/SharedPrefsKeyValuePreference$flowOfPref$1$1; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValuePreference$flowOfPref$1$1;->(Ldb_key_value/shared_prefs/SharedPrefsKeyValuePreference;Lkotlin/coroutines/Continuation;)V +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValuePreference$flowOfPref$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValuePreference$flowOfPref$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Ldb_key_value/shared_prefs/SharedPrefsKeyValuePreference$flowOfPref$1$2; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValuePreference$flowOfPref$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValuePreference$flowOfPref$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Ldb_key_value/shared_prefs/SharedPrefsKeyValuePreference$getPref$1; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValuePreference$getPref$1;->(Ldb_key_value/shared_prefs/SharedPrefsKeyValuePreference;Lkotlin/coroutines/Continuation;)V +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValuePreference$getPref$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Ldb_key_value/shared_prefs/SharedPrefsKeyValuePreference$setAndCommit$$inlined$ioEffect$1; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValuePreference$setAndCommit$$inlined$ioEffect$1;->(Lkotlin/coroutines/Continuation;Lkotlin/coroutines/CoroutineContext;Ldb_key_value/shared_prefs/SharedPrefsKeyValuePreference;Ljava/lang/Object;)V +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValuePreference$setAndCommit$$inlined$ioEffect$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValuePreference$setAndCommit$$inlined$ioEffect$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValuePreference$setAndCommit$$inlined$ioEffect$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValuePreference$setAndCommit$$inlined$ioEffect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Ldb_key_value/shared_prefs/SharedPrefsKeyValuePreference$setAndCommit$$inlined$ioEffect$1$1; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValuePreference$setAndCommit$$inlined$ioEffect$1$1;->(Lkotlin/coroutines/Continuation;Ldb_key_value/shared_prefs/SharedPrefsKeyValuePreference;Ljava/lang/Object;)V +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValuePreference$setAndCommit$$inlined$ioEffect$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValuePreference$setAndCommit$$inlined$ioEffect$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Ldb_key_value/shared_prefs/SharedPrefsKeyValueStore; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValueStore;->()V +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValueStore;->(Landroid/content/Context;Ljava/lang/String;)V +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValueStore;->(Lkotlin/jvm/functions/Function1;)V +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValueStore;->access$getFlowPrefs(Ldb_key_value/shared_prefs/SharedPrefsKeyValueStore;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValueStore;->getBoolean(Ljava/lang/String;Z)Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValueStore;->getFlowPrefs(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValueStore;->getLong(Ljava/lang/String;J)Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValueStore;->getString(Ljava/lang/String;Ljava/lang/String;)Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference; +Ldb_key_value/shared_prefs/SharedPrefsKeyValueStore$1; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValueStore$1;->(Landroid/content/Context;Ljava/lang/String;Lkotlin/coroutines/Continuation;)V +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValueStore$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValueStore$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValueStore$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValueStore$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Ldb_key_value/shared_prefs/SharedPrefsKeyValueStore$getBoolean$1; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValueStore$getBoolean$1;->(Ldb_key_value/shared_prefs/SharedPrefsKeyValueStore;Ljava/lang/String;ZLkotlin/coroutines/Continuation;)V +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValueStore$getBoolean$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValueStore$getBoolean$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValueStore$getBoolean$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValueStore$getBoolean$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Ldb_key_value/shared_prefs/SharedPrefsKeyValueStore$getFlowPrefs$1; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValueStore$getFlowPrefs$1;->(Ldb_key_value/shared_prefs/SharedPrefsKeyValueStore;Lkotlin/coroutines/Continuation;)V +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValueStore$getFlowPrefs$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Ldb_key_value/shared_prefs/SharedPrefsKeyValueStore$getLong$1; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValueStore$getLong$1;->(Ldb_key_value/shared_prefs/SharedPrefsKeyValueStore;Ljava/lang/String;JLkotlin/coroutines/Continuation;)V +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValueStore$getLong$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValueStore$getLong$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValueStore$getLong$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValueStore$getLong$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Ldb_key_value/shared_prefs/SharedPrefsKeyValueStore$getString$1; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValueStore$getString$1;->(Ldb_key_value/shared_prefs/SharedPrefsKeyValueStore;Ljava/lang/String;Ljava/lang/String;Lkotlin/coroutines/Continuation;)V +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValueStore$getString$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValueStore$getString$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValueStore$getString$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValueStore$getString$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Ldev/icerock/moko/resources/FontResource; +HSPLdev/icerock/moko/resources/FontResource;->()V +HSPLdev/icerock/moko/resources/FontResource;->(I)V +HSPLdev/icerock/moko/resources/FontResource;->getFontResourceId()I +Ldev/icerock/moko/resources/FontResource$Creator; +HSPLdev/icerock/moko/resources/FontResource$Creator;->()V +Ldev/icerock/moko/resources/ResourceContainer; +Ldev/icerock/moko/resources/StringResource; +HSPLdev/icerock/moko/resources/StringResource;->()V +HSPLdev/icerock/moko/resources/StringResource;->(I)V +HSPLdev/icerock/moko/resources/StringResource;->getResourceId()I +Ldev/icerock/moko/resources/StringResource$Creator; +HSPLdev/icerock/moko/resources/StringResource$Creator;->()V +Ldev/icerock/moko/resources/compose/FontResource_androidKt; +HSPLdev/icerock/moko/resources/compose/FontResource_androidKt;->asFont-DnXFreY(Ldev/icerock/moko/resources/FontResource;Landroidx/compose/ui/text/font/FontWeight;ILandroidx/compose/runtime/Composer;II)Landroidx/compose/ui/text/font/Font; +Ldev/icerock/moko/resources/compose/FontResource_commonKt; +HSPLdev/icerock/moko/resources/compose/FontResource_commonKt;->fontFamilyResource(Ldev/icerock/moko/resources/FontResource;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/text/font/FontFamily; +Ldev/icerock/moko/resources/compose/StringResourceKt; +HSPLdev/icerock/moko/resources/compose/StringResourceKt;->stringResource(Ldev/icerock/moko/resources/StringResource;Landroidx/compose/runtime/Composer;I)Ljava/lang/String; +Ldev/icerock/moko/resources/desc/ResourceFormattedStringDesc; +HSPLdev/icerock/moko/resources/desc/ResourceFormattedStringDesc;->(Ldev/icerock/moko/resources/StringResource;Ljava/util/List;)V +HSPLdev/icerock/moko/resources/desc/ResourceFormattedStringDesc;->toString(Landroid/content/Context;)Ljava/lang/String; +Ldev/icerock/moko/resources/desc/ResourceFormattedStringDescKt; +HSPLdev/icerock/moko/resources/desc/ResourceFormattedStringDescKt;->ResourceFormatted(Ldev/icerock/moko/resources/desc/StringDesc$Companion;Ldev/icerock/moko/resources/StringResource;[Ljava/lang/Object;)Ldev/icerock/moko/resources/desc/ResourceFormattedStringDesc; +Ldev/icerock/moko/resources/desc/ResourceStringDesc; +HSPLdev/icerock/moko/resources/desc/ResourceStringDesc;->()V +HSPLdev/icerock/moko/resources/desc/ResourceStringDesc;->(Ldev/icerock/moko/resources/StringResource;)V +HSPLdev/icerock/moko/resources/desc/ResourceStringDesc;->toString(Landroid/content/Context;)Ljava/lang/String; +Ldev/icerock/moko/resources/desc/ResourceStringDesc$Creator; +HSPLdev/icerock/moko/resources/desc/ResourceStringDesc$Creator;->()V +Ldev/icerock/moko/resources/desc/ResourceStringDescKt; +HSPLdev/icerock/moko/resources/desc/ResourceStringDescKt;->Resource(Ldev/icerock/moko/resources/desc/StringDesc$Companion;Ldev/icerock/moko/resources/StringResource;)Ldev/icerock/moko/resources/desc/ResourceStringDesc; +Ldev/icerock/moko/resources/desc/StringDesc; +HSPLdev/icerock/moko/resources/desc/StringDesc;->()V +Ldev/icerock/moko/resources/desc/StringDesc$Companion; +HSPLdev/icerock/moko/resources/desc/StringDesc$Companion;->()V +HSPLdev/icerock/moko/resources/desc/StringDesc$Companion;->()V +HSPLdev/icerock/moko/resources/desc/StringDesc$Companion;->getLocaleType()Ldev/icerock/moko/resources/desc/StringDesc$LocaleType; +Ldev/icerock/moko/resources/desc/StringDesc$LocaleType; +HSPLdev/icerock/moko/resources/desc/StringDesc$LocaleType;->()V +HSPLdev/icerock/moko/resources/desc/StringDesc$LocaleType;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Ldev/icerock/moko/resources/desc/StringDesc$LocaleType$System; +HSPLdev/icerock/moko/resources/desc/StringDesc$LocaleType$System;->()V +HSPLdev/icerock/moko/resources/desc/StringDesc$LocaleType$System;->()V +HSPLdev/icerock/moko/resources/desc/StringDesc$LocaleType$System;->getSystemLocale()Ljava/util/Locale; +Ldev/icerock/moko/resources/desc/Utils; +HSPLdev/icerock/moko/resources/desc/Utils;->()V +HSPLdev/icerock/moko/resources/desc/Utils;->()V +HSPLdev/icerock/moko/resources/desc/Utils;->localizedContext(Landroid/content/Context;)Landroid/content/Context; +HSPLdev/icerock/moko/resources/desc/Utils;->processArgs(Ljava/util/List;Landroid/content/Context;)[Ljava/lang/Object; +HSPLdev/icerock/moko/resources/desc/Utils;->resourcesForContext(Landroid/content/Context;)Landroid/content/res/Resources; +Lio/ktor/client/HttpClient; +HSPLio/ktor/client/HttpClient;->()V +HSPLio/ktor/client/HttpClient;->(Lio/ktor/client/engine/HttpClientEngine;Lio/ktor/client/HttpClientConfig;)V +HSPLio/ktor/client/HttpClient;->(Lio/ktor/client/engine/HttpClientEngine;Lio/ktor/client/HttpClientConfig;Z)V +HSPLio/ktor/client/HttpClient;->getAttributes()Lio/ktor/util/Attributes; +HSPLio/ktor/client/HttpClient;->getConfig$ktor_client_core()Lio/ktor/client/HttpClientConfig; +HSPLio/ktor/client/HttpClient;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext; +HSPLio/ktor/client/HttpClient;->getEngine()Lio/ktor/client/engine/HttpClientEngine; +HSPLio/ktor/client/HttpClient;->getReceivePipeline()Lio/ktor/client/statement/HttpReceivePipeline; +HSPLio/ktor/client/HttpClient;->getRequestPipeline()Lio/ktor/client/request/HttpRequestPipeline; +HSPLio/ktor/client/HttpClient;->getResponsePipeline()Lio/ktor/client/statement/HttpResponsePipeline; +HSPLio/ktor/client/HttpClient;->getSendPipeline()Lio/ktor/client/request/HttpSendPipeline; +Lio/ktor/client/HttpClient$2; +HSPLio/ktor/client/HttpClient$2;->(Lio/ktor/client/HttpClient;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/HttpClient$3$1; +HSPLio/ktor/client/HttpClient$3$1;->()V +HSPLio/ktor/client/HttpClient$3$1;->()V +HSPLio/ktor/client/HttpClient$3$1;->invoke(Lio/ktor/client/HttpClient;)V +HSPLio/ktor/client/HttpClient$3$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lio/ktor/client/HttpClient$4; +HSPLio/ktor/client/HttpClient$4;->(Lio/ktor/client/HttpClient;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/HttpClientConfig; +HSPLio/ktor/client/HttpClientConfig;->()V +HSPLio/ktor/client/HttpClientConfig;->access$getPluginConfigurations$p(Lio/ktor/client/HttpClientConfig;)Ljava/util/Map; +HSPLio/ktor/client/HttpClientConfig;->engine(Lkotlin/jvm/functions/Function1;)V +HSPLio/ktor/client/HttpClientConfig;->getDevelopmentMode()Z +HSPLio/ktor/client/HttpClientConfig;->getEngineConfig$ktor_client_core()Lkotlin/jvm/functions/Function1; +HSPLio/ktor/client/HttpClientConfig;->getExpectSuccess()Z +HSPLio/ktor/client/HttpClientConfig;->getFollowRedirects()Z +HSPLio/ktor/client/HttpClientConfig;->getUseDefaultTransformers()Z +HSPLio/ktor/client/HttpClientConfig;->install$default(Lio/ktor/client/HttpClientConfig;Lio/ktor/client/plugins/HttpClientPlugin;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V +HSPLio/ktor/client/HttpClientConfig;->install(Lio/ktor/client/HttpClient;)V +HSPLio/ktor/client/HttpClientConfig;->install(Lio/ktor/client/plugins/HttpClientPlugin;Lkotlin/jvm/functions/Function1;)V +HSPLio/ktor/client/HttpClientConfig;->install(Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V +HSPLio/ktor/client/HttpClientConfig;->plusAssign(Lio/ktor/client/HttpClientConfig;)V +Lio/ktor/client/HttpClientConfig$engine$1; +HSPLio/ktor/client/HttpClientConfig$engine$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V +HSPLio/ktor/client/HttpClientConfig$engine$1;->invoke(Lio/ktor/client/engine/HttpClientEngineConfig;)V +HSPLio/ktor/client/HttpClientConfig$engine$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lio/ktor/client/HttpClientConfig$engineConfig$1; +HSPLio/ktor/client/HttpClientConfig$engineConfig$1;->()V +HSPLio/ktor/client/HttpClientConfig$engineConfig$1;->()V +HSPLio/ktor/client/HttpClientConfig$engineConfig$1;->invoke(Lio/ktor/client/engine/HttpClientEngineConfig;)V +HSPLio/ktor/client/HttpClientConfig$engineConfig$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lio/ktor/client/HttpClientConfig$install$1; +HSPLio/ktor/client/HttpClientConfig$install$1;->()V +HSPLio/ktor/client/HttpClientConfig$install$1;->()V +HSPLio/ktor/client/HttpClientConfig$install$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLio/ktor/client/HttpClientConfig$install$1;->invoke(Ljava/lang/Object;)V +Lio/ktor/client/HttpClientConfig$install$2; +HSPLio/ktor/client/HttpClientConfig$install$2;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V +HSPLio/ktor/client/HttpClientConfig$install$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLio/ktor/client/HttpClientConfig$install$2;->invoke(Ljava/lang/Object;)V +Lio/ktor/client/HttpClientConfig$install$3; +HSPLio/ktor/client/HttpClientConfig$install$3;->(Lio/ktor/client/plugins/HttpClientPlugin;)V +HSPLio/ktor/client/HttpClientConfig$install$3;->invoke(Lio/ktor/client/HttpClient;)V +HSPLio/ktor/client/HttpClientConfig$install$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lio/ktor/client/HttpClientConfig$install$3$attributes$1; +HSPLio/ktor/client/HttpClientConfig$install$3$attributes$1;->()V +HSPLio/ktor/client/HttpClientConfig$install$3$attributes$1;->()V +HSPLio/ktor/client/HttpClientConfig$install$3$attributes$1;->invoke()Lio/ktor/util/Attributes; +HSPLio/ktor/client/HttpClientConfig$install$3$attributes$1;->invoke()Ljava/lang/Object; +Lio/ktor/client/HttpClientKt; +HSPLio/ktor/client/HttpClientKt;->HttpClient(Lio/ktor/client/engine/HttpClientEngineFactory;Lkotlin/jvm/functions/Function1;)Lio/ktor/client/HttpClient; +Lio/ktor/client/HttpClientKt$HttpClient$2; +HSPLio/ktor/client/HttpClientKt$HttpClient$2;->(Lio/ktor/client/engine/HttpClientEngine;)V +Lio/ktor/client/content/ProgressListener; +Lio/ktor/client/engine/HttpClientEngine; +Lio/ktor/client/engine/HttpClientEngine$DefaultImpls; +HSPLio/ktor/client/engine/HttpClientEngine$DefaultImpls;->install(Lio/ktor/client/engine/HttpClientEngine;Lio/ktor/client/HttpClient;)V +Lio/ktor/client/engine/HttpClientEngine$install$1; +HSPLio/ktor/client/engine/HttpClientEngine$install$1;->(Lio/ktor/client/HttpClient;Lio/ktor/client/engine/HttpClientEngine;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/engine/HttpClientEngineBase; +HSPLio/ktor/client/engine/HttpClientEngineBase;->()V +HSPLio/ktor/client/engine/HttpClientEngineBase;->(Ljava/lang/String;)V +HSPLio/ktor/client/engine/HttpClientEngineBase;->access$getEngineName$p(Lio/ktor/client/engine/HttpClientEngineBase;)Ljava/lang/String; +HSPLio/ktor/client/engine/HttpClientEngineBase;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext; +HSPLio/ktor/client/engine/HttpClientEngineBase;->getDispatcher()Lkotlinx/coroutines/CoroutineDispatcher; +HSPLio/ktor/client/engine/HttpClientEngineBase;->install(Lio/ktor/client/HttpClient;)V +Lio/ktor/client/engine/HttpClientEngineBase$coroutineContext$2; +HSPLio/ktor/client/engine/HttpClientEngineBase$coroutineContext$2;->(Lio/ktor/client/engine/HttpClientEngineBase;)V +HSPLio/ktor/client/engine/HttpClientEngineBase$coroutineContext$2;->invoke()Ljava/lang/Object; +HSPLio/ktor/client/engine/HttpClientEngineBase$coroutineContext$2;->invoke()Lkotlin/coroutines/CoroutineContext; +Lio/ktor/client/engine/HttpClientEngineBase_jvmKt; +HSPLio/ktor/client/engine/HttpClientEngineBase_jvmKt;->ioDispatcher()Lkotlinx/coroutines/CoroutineDispatcher; +Lio/ktor/client/engine/HttpClientEngineCapability; +Lio/ktor/client/engine/HttpClientEngineConfig; +HSPLio/ktor/client/engine/HttpClientEngineConfig;->()V +Lio/ktor/client/engine/HttpClientEngineFactory; +Lio/ktor/client/engine/okhttp/OkHttp; +HSPLio/ktor/client/engine/okhttp/OkHttp;->()V +HSPLio/ktor/client/engine/okhttp/OkHttp;->()V +HSPLio/ktor/client/engine/okhttp/OkHttp;->create(Lkotlin/jvm/functions/Function1;)Lio/ktor/client/engine/HttpClientEngine; +Lio/ktor/client/engine/okhttp/OkHttpConfig; +HSPLio/ktor/client/engine/okhttp/OkHttpConfig;->()V +HSPLio/ktor/client/engine/okhttp/OkHttpConfig;->getClientCacheSize()I +HSPLio/ktor/client/engine/okhttp/OkHttpConfig;->setPreconfigured(Lokhttp3/OkHttpClient;)V +Lio/ktor/client/engine/okhttp/OkHttpConfig$config$1; +HSPLio/ktor/client/engine/okhttp/OkHttpConfig$config$1;->()V +HSPLio/ktor/client/engine/okhttp/OkHttpConfig$config$1;->()V +Lio/ktor/client/engine/okhttp/OkHttpEngine; +HSPLio/ktor/client/engine/okhttp/OkHttpEngine;->()V +HSPLio/ktor/client/engine/okhttp/OkHttpEngine;->(Lio/ktor/client/engine/okhttp/OkHttpConfig;)V +HSPLio/ktor/client/engine/okhttp/OkHttpEngine;->access$getRequestsJob$p(Lio/ktor/client/engine/okhttp/OkHttpEngine;)Lkotlin/coroutines/CoroutineContext; +HSPLio/ktor/client/engine/okhttp/OkHttpEngine;->getConfig()Lio/ktor/client/engine/HttpClientEngineConfig; +HSPLio/ktor/client/engine/okhttp/OkHttpEngine;->getConfig()Lio/ktor/client/engine/okhttp/OkHttpConfig; +HSPLio/ktor/client/engine/okhttp/OkHttpEngine;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext; +HSPLio/ktor/client/engine/okhttp/OkHttpEngine;->getSupportedCapabilities()Ljava/util/Set; +Lio/ktor/client/engine/okhttp/OkHttpEngine$1; +HSPLio/ktor/client/engine/okhttp/OkHttpEngine$1;->(Lio/ktor/client/engine/okhttp/OkHttpEngine;Lkotlin/coroutines/Continuation;)V +HSPLio/ktor/client/engine/okhttp/OkHttpEngine$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLio/ktor/client/engine/okhttp/OkHttpEngine$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lio/ktor/client/engine/okhttp/OkHttpEngine$Companion; +HSPLio/ktor/client/engine/okhttp/OkHttpEngine$Companion;->()V +HSPLio/ktor/client/engine/okhttp/OkHttpEngine$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lio/ktor/client/engine/okhttp/OkHttpEngine$Companion$okHttpClientPrototype$2; +HSPLio/ktor/client/engine/okhttp/OkHttpEngine$Companion$okHttpClientPrototype$2;->()V +HSPLio/ktor/client/engine/okhttp/OkHttpEngine$Companion$okHttpClientPrototype$2;->()V +Lio/ktor/client/engine/okhttp/OkHttpEngine$clientCache$1; +HSPLio/ktor/client/engine/okhttp/OkHttpEngine$clientCache$1;->(Ljava/lang/Object;)V +Lio/ktor/client/engine/okhttp/OkHttpEngine$clientCache$2; +HSPLio/ktor/client/engine/okhttp/OkHttpEngine$clientCache$2;->()V +HSPLio/ktor/client/engine/okhttp/OkHttpEngine$clientCache$2;->()V +Lio/ktor/client/plugins/AfterReceiveHook; +HSPLio/ktor/client/plugins/AfterReceiveHook;->()V +HSPLio/ktor/client/plugins/AfterReceiveHook;->()V +HSPLio/ktor/client/plugins/AfterReceiveHook;->install(Lio/ktor/client/HttpClient;Ljava/lang/Object;)V +HSPLio/ktor/client/plugins/AfterReceiveHook;->install(Lio/ktor/client/HttpClient;Lkotlin/jvm/functions/Function2;)V +Lio/ktor/client/plugins/AfterReceiveHook$install$1; +HSPLio/ktor/client/plugins/AfterReceiveHook$install$1;->(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/AfterRenderHook; +HSPLio/ktor/client/plugins/AfterRenderHook;->()V +HSPLio/ktor/client/plugins/AfterRenderHook;->()V +HSPLio/ktor/client/plugins/AfterRenderHook;->install(Lio/ktor/client/HttpClient;Ljava/lang/Object;)V +HSPLio/ktor/client/plugins/AfterRenderHook;->install(Lio/ktor/client/HttpClient;Lkotlin/jvm/functions/Function3;)V +Lio/ktor/client/plugins/AfterRenderHook$install$1; +HSPLio/ktor/client/plugins/AfterRenderHook$install$1;->(Lkotlin/jvm/functions/Function3;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/BodyProgressKt; +HSPLio/ktor/client/plugins/BodyProgressKt;->()V +HSPLio/ktor/client/plugins/BodyProgressKt;->getBodyProgress()Lio/ktor/client/plugins/api/ClientPlugin; +Lio/ktor/client/plugins/BodyProgressKt$BodyProgress$1; +HSPLio/ktor/client/plugins/BodyProgressKt$BodyProgress$1;->()V +HSPLio/ktor/client/plugins/BodyProgressKt$BodyProgress$1;->()V +HSPLio/ktor/client/plugins/BodyProgressKt$BodyProgress$1;->invoke(Lio/ktor/client/plugins/api/ClientPluginBuilder;)V +HSPLio/ktor/client/plugins/BodyProgressKt$BodyProgress$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lio/ktor/client/plugins/BodyProgressKt$BodyProgress$1$1; +HSPLio/ktor/client/plugins/BodyProgressKt$BodyProgress$1$1;->(Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/BodyProgressKt$BodyProgress$1$2; +HSPLio/ktor/client/plugins/BodyProgressKt$BodyProgress$1$2;->(Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/DefaultResponseValidationKt; +HSPLio/ktor/client/plugins/DefaultResponseValidationKt;->()V +HSPLio/ktor/client/plugins/DefaultResponseValidationKt;->addDefaultResponseValidation(Lio/ktor/client/HttpClientConfig;)V +Lio/ktor/client/plugins/DefaultResponseValidationKt$addDefaultResponseValidation$1; +HSPLio/ktor/client/plugins/DefaultResponseValidationKt$addDefaultResponseValidation$1;->(Lio/ktor/client/HttpClientConfig;)V +HSPLio/ktor/client/plugins/DefaultResponseValidationKt$addDefaultResponseValidation$1;->invoke(Lio/ktor/client/plugins/HttpCalValidatorConfig;)V +HSPLio/ktor/client/plugins/DefaultResponseValidationKt$addDefaultResponseValidation$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lio/ktor/client/plugins/DefaultResponseValidationKt$addDefaultResponseValidation$1$1; +HSPLio/ktor/client/plugins/DefaultResponseValidationKt$addDefaultResponseValidation$1$1;->(Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/DefaultTransformKt; +HSPLio/ktor/client/plugins/DefaultTransformKt;->()V +HSPLio/ktor/client/plugins/DefaultTransformKt;->defaultTransformers(Lio/ktor/client/HttpClient;)V +Lio/ktor/client/plugins/DefaultTransformKt$defaultTransformers$1; +HSPLio/ktor/client/plugins/DefaultTransformKt$defaultTransformers$1;->(Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/DefaultTransformKt$defaultTransformers$2; +HSPLio/ktor/client/plugins/DefaultTransformKt$defaultTransformers$2;->(Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/DefaultTransformersJvmKt; +HSPLio/ktor/client/plugins/DefaultTransformersJvmKt;->platformResponseDefaultTransformers(Lio/ktor/client/HttpClient;)V +Lio/ktor/client/plugins/DefaultTransformersJvmKt$platformResponseDefaultTransformers$1; +HSPLio/ktor/client/plugins/DefaultTransformersJvmKt$platformResponseDefaultTransformers$1;->(Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/DoubleReceivePluginKt; +HSPLio/ktor/client/plugins/DoubleReceivePluginKt;->()V +HSPLio/ktor/client/plugins/DoubleReceivePluginKt;->getSaveBodyPlugin()Lio/ktor/client/plugins/api/ClientPlugin; +Lio/ktor/client/plugins/DoubleReceivePluginKt$SaveBodyPlugin$1; +HSPLio/ktor/client/plugins/DoubleReceivePluginKt$SaveBodyPlugin$1;->()V +HSPLio/ktor/client/plugins/DoubleReceivePluginKt$SaveBodyPlugin$1;->()V +HSPLio/ktor/client/plugins/DoubleReceivePluginKt$SaveBodyPlugin$1;->invoke()Lio/ktor/client/plugins/SaveBodyPluginConfig; +HSPLio/ktor/client/plugins/DoubleReceivePluginKt$SaveBodyPlugin$1;->invoke()Ljava/lang/Object; +Lio/ktor/client/plugins/DoubleReceivePluginKt$SaveBodyPlugin$2; +HSPLio/ktor/client/plugins/DoubleReceivePluginKt$SaveBodyPlugin$2;->()V +HSPLio/ktor/client/plugins/DoubleReceivePluginKt$SaveBodyPlugin$2;->()V +HSPLio/ktor/client/plugins/DoubleReceivePluginKt$SaveBodyPlugin$2;->invoke(Lio/ktor/client/plugins/api/ClientPluginBuilder;)V +HSPLio/ktor/client/plugins/DoubleReceivePluginKt$SaveBodyPlugin$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lio/ktor/client/plugins/DoubleReceivePluginKt$SaveBodyPlugin$2$1; +HSPLio/ktor/client/plugins/DoubleReceivePluginKt$SaveBodyPlugin$2$1;->(ZLkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/HttpCalValidatorConfig; +HSPLio/ktor/client/plugins/HttpCalValidatorConfig;->()V +HSPLio/ktor/client/plugins/HttpCalValidatorConfig;->getExpectSuccess()Z +HSPLio/ktor/client/plugins/HttpCalValidatorConfig;->getResponseExceptionHandlers$ktor_client_core()Ljava/util/List; +HSPLio/ktor/client/plugins/HttpCalValidatorConfig;->getResponseValidators$ktor_client_core()Ljava/util/List; +HSPLio/ktor/client/plugins/HttpCalValidatorConfig;->setExpectSuccess(Z)V +HSPLio/ktor/client/plugins/HttpCalValidatorConfig;->validateResponse(Lkotlin/jvm/functions/Function2;)V +Lio/ktor/client/plugins/HttpCallValidatorKt; +HSPLio/ktor/client/plugins/HttpCallValidatorKt;->()V +HSPLio/ktor/client/plugins/HttpCallValidatorKt;->HttpResponseValidator(Lio/ktor/client/HttpClientConfig;Lkotlin/jvm/functions/Function1;)V +HSPLio/ktor/client/plugins/HttpCallValidatorKt;->getHttpCallValidator()Lio/ktor/client/plugins/api/ClientPlugin; +Lio/ktor/client/plugins/HttpCallValidatorKt$HttpCallValidator$1; +HSPLio/ktor/client/plugins/HttpCallValidatorKt$HttpCallValidator$1;->()V +HSPLio/ktor/client/plugins/HttpCallValidatorKt$HttpCallValidator$1;->()V +HSPLio/ktor/client/plugins/HttpCallValidatorKt$HttpCallValidator$1;->invoke()Lio/ktor/client/plugins/HttpCalValidatorConfig; +HSPLio/ktor/client/plugins/HttpCallValidatorKt$HttpCallValidator$1;->invoke()Ljava/lang/Object; +Lio/ktor/client/plugins/HttpCallValidatorKt$HttpCallValidator$2; +HSPLio/ktor/client/plugins/HttpCallValidatorKt$HttpCallValidator$2;->()V +HSPLio/ktor/client/plugins/HttpCallValidatorKt$HttpCallValidator$2;->()V +HSPLio/ktor/client/plugins/HttpCallValidatorKt$HttpCallValidator$2;->invoke(Lio/ktor/client/plugins/api/ClientPluginBuilder;)V +HSPLio/ktor/client/plugins/HttpCallValidatorKt$HttpCallValidator$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lio/ktor/client/plugins/HttpCallValidatorKt$HttpCallValidator$2$1; +HSPLio/ktor/client/plugins/HttpCallValidatorKt$HttpCallValidator$2$1;->(ZLkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/HttpCallValidatorKt$HttpCallValidator$2$2; +HSPLio/ktor/client/plugins/HttpCallValidatorKt$HttpCallValidator$2$2;->(Ljava/util/List;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/HttpCallValidatorKt$HttpCallValidator$2$3; +HSPLio/ktor/client/plugins/HttpCallValidatorKt$HttpCallValidator$2$3;->(Ljava/util/List;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/HttpCallValidatorKt$HttpCallValidator$2$4; +HSPLio/ktor/client/plugins/HttpCallValidatorKt$HttpCallValidator$2$4;->(Ljava/util/List;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/HttpClientPlugin; +Lio/ktor/client/plugins/HttpClientPluginKt; +HSPLio/ktor/client/plugins/HttpClientPluginKt;->()V +HSPLio/ktor/client/plugins/HttpClientPluginKt;->getPLUGIN_INSTALLED_LIST()Lio/ktor/util/AttributeKey; +HSPLio/ktor/client/plugins/HttpClientPluginKt;->plugin(Lio/ktor/client/HttpClient;Lio/ktor/client/plugins/HttpClientPlugin;)Ljava/lang/Object; +HSPLio/ktor/client/plugins/HttpClientPluginKt;->pluginOrNull(Lio/ktor/client/HttpClient;Lio/ktor/client/plugins/HttpClientPlugin;)Ljava/lang/Object; +Lio/ktor/client/plugins/HttpPlainTextConfig; +HSPLio/ktor/client/plugins/HttpPlainTextConfig;->()V +HSPLio/ktor/client/plugins/HttpPlainTextConfig;->getCharsetQuality$ktor_client_core()Ljava/util/Map; +HSPLio/ktor/client/plugins/HttpPlainTextConfig;->getCharsets$ktor_client_core()Ljava/util/Set; +HSPLio/ktor/client/plugins/HttpPlainTextConfig;->getResponseCharsetFallback()Ljava/nio/charset/Charset; +HSPLio/ktor/client/plugins/HttpPlainTextConfig;->getSendCharset()Ljava/nio/charset/Charset; +Lio/ktor/client/plugins/HttpPlainTextKt; +HSPLio/ktor/client/plugins/HttpPlainTextKt;->()V +HSPLio/ktor/client/plugins/HttpPlainTextKt;->getHttpPlainText()Lio/ktor/client/plugins/api/ClientPlugin; +Lio/ktor/client/plugins/HttpPlainTextKt$HttpPlainText$1; +HSPLio/ktor/client/plugins/HttpPlainTextKt$HttpPlainText$1;->()V +HSPLio/ktor/client/plugins/HttpPlainTextKt$HttpPlainText$1;->()V +HSPLio/ktor/client/plugins/HttpPlainTextKt$HttpPlainText$1;->invoke()Lio/ktor/client/plugins/HttpPlainTextConfig; +HSPLio/ktor/client/plugins/HttpPlainTextKt$HttpPlainText$1;->invoke()Ljava/lang/Object; +Lio/ktor/client/plugins/HttpPlainTextKt$HttpPlainText$2; +HSPLio/ktor/client/plugins/HttpPlainTextKt$HttpPlainText$2;->()V +HSPLio/ktor/client/plugins/HttpPlainTextKt$HttpPlainText$2;->()V +HSPLio/ktor/client/plugins/HttpPlainTextKt$HttpPlainText$2;->invoke(Lio/ktor/client/plugins/api/ClientPluginBuilder;)V +HSPLio/ktor/client/plugins/HttpPlainTextKt$HttpPlainText$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lio/ktor/client/plugins/HttpPlainTextKt$HttpPlainText$2$1; +HSPLio/ktor/client/plugins/HttpPlainTextKt$HttpPlainText$2$1;->(Ljava/lang/String;Ljava/nio/charset/Charset;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/HttpPlainTextKt$HttpPlainText$2$2; +HSPLio/ktor/client/plugins/HttpPlainTextKt$HttpPlainText$2$2;->(Ljava/nio/charset/Charset;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/HttpPlainTextKt$HttpPlainText$2$invoke$$inlined$sortedBy$1; +HSPLio/ktor/client/plugins/HttpPlainTextKt$HttpPlainText$2$invoke$$inlined$sortedBy$1;->()V +Lio/ktor/client/plugins/HttpPlainTextKt$HttpPlainText$2$invoke$$inlined$sortedByDescending$1; +HSPLio/ktor/client/plugins/HttpPlainTextKt$HttpPlainText$2$invoke$$inlined$sortedByDescending$1;->()V +Lio/ktor/client/plugins/HttpRedirectConfig; +HSPLio/ktor/client/plugins/HttpRedirectConfig;->()V +HSPLio/ktor/client/plugins/HttpRedirectConfig;->getAllowHttpsDowngrade()Z +HSPLio/ktor/client/plugins/HttpRedirectConfig;->getCheckHttpMethod()Z +Lio/ktor/client/plugins/HttpRedirectKt; +HSPLio/ktor/client/plugins/HttpRedirectKt;->()V +HSPLio/ktor/client/plugins/HttpRedirectKt;->getHttpRedirect()Lio/ktor/client/plugins/api/ClientPlugin; +Lio/ktor/client/plugins/HttpRedirectKt$HttpRedirect$1; +HSPLio/ktor/client/plugins/HttpRedirectKt$HttpRedirect$1;->()V +HSPLio/ktor/client/plugins/HttpRedirectKt$HttpRedirect$1;->()V +HSPLio/ktor/client/plugins/HttpRedirectKt$HttpRedirect$1;->invoke()Lio/ktor/client/plugins/HttpRedirectConfig; +HSPLio/ktor/client/plugins/HttpRedirectKt$HttpRedirect$1;->invoke()Ljava/lang/Object; +Lio/ktor/client/plugins/HttpRedirectKt$HttpRedirect$2; +HSPLio/ktor/client/plugins/HttpRedirectKt$HttpRedirect$2;->()V +HSPLio/ktor/client/plugins/HttpRedirectKt$HttpRedirect$2;->()V +HSPLio/ktor/client/plugins/HttpRedirectKt$HttpRedirect$2;->invoke(Lio/ktor/client/plugins/api/ClientPluginBuilder;)V +HSPLio/ktor/client/plugins/HttpRedirectKt$HttpRedirect$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lio/ktor/client/plugins/HttpRedirectKt$HttpRedirect$2$1; +HSPLio/ktor/client/plugins/HttpRedirectKt$HttpRedirect$2$1;->(ZZLio/ktor/client/plugins/api/ClientPluginBuilder;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/HttpRequestLifecycleKt; +HSPLio/ktor/client/plugins/HttpRequestLifecycleKt;->()V +HSPLio/ktor/client/plugins/HttpRequestLifecycleKt;->getHttpRequestLifecycle()Lio/ktor/client/plugins/api/ClientPlugin; +Lio/ktor/client/plugins/HttpRequestLifecycleKt$HttpRequestLifecycle$1; +HSPLio/ktor/client/plugins/HttpRequestLifecycleKt$HttpRequestLifecycle$1;->()V +HSPLio/ktor/client/plugins/HttpRequestLifecycleKt$HttpRequestLifecycle$1;->()V +HSPLio/ktor/client/plugins/HttpRequestLifecycleKt$HttpRequestLifecycle$1;->invoke(Lio/ktor/client/plugins/api/ClientPluginBuilder;)V +HSPLio/ktor/client/plugins/HttpRequestLifecycleKt$HttpRequestLifecycle$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lio/ktor/client/plugins/HttpRequestLifecycleKt$HttpRequestLifecycle$1$1; +HSPLio/ktor/client/plugins/HttpRequestLifecycleKt$HttpRequestLifecycle$1$1;->(Lio/ktor/client/plugins/api/ClientPluginBuilder;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/HttpRequestRetryConfig; +HSPLio/ktor/client/plugins/HttpRequestRetryConfig;->()V +HSPLio/ktor/client/plugins/HttpRequestRetryConfig;->constantDelay$default(Lio/ktor/client/plugins/HttpRequestRetryConfig;JJZILjava/lang/Object;)V +HSPLio/ktor/client/plugins/HttpRequestRetryConfig;->constantDelay(JJZ)V +HSPLio/ktor/client/plugins/HttpRequestRetryConfig;->delayMillis(ZLkotlin/jvm/functions/Function2;)V +HSPLio/ktor/client/plugins/HttpRequestRetryConfig;->exponentialDelay$default(Lio/ktor/client/plugins/HttpRequestRetryConfig;DJJZILjava/lang/Object;)V +HSPLio/ktor/client/plugins/HttpRequestRetryConfig;->exponentialDelay(DJJZ)V +HSPLio/ktor/client/plugins/HttpRequestRetryConfig;->getDelay$ktor_client_core()Lkotlin/jvm/functions/Function2; +HSPLio/ktor/client/plugins/HttpRequestRetryConfig;->getDelayMillis$ktor_client_core()Lkotlin/jvm/functions/Function2; +HSPLio/ktor/client/plugins/HttpRequestRetryConfig;->getMaxRetries()I +HSPLio/ktor/client/plugins/HttpRequestRetryConfig;->getModifyRequest$ktor_client_core()Lkotlin/jvm/functions/Function2; +HSPLio/ktor/client/plugins/HttpRequestRetryConfig;->getShouldRetry$ktor_client_core()Lkotlin/jvm/functions/Function3; +HSPLio/ktor/client/plugins/HttpRequestRetryConfig;->getShouldRetryOnException$ktor_client_core()Lkotlin/jvm/functions/Function3; +HSPLio/ktor/client/plugins/HttpRequestRetryConfig;->retryIf$default(Lio/ktor/client/plugins/HttpRequestRetryConfig;ILkotlin/jvm/functions/Function3;ILjava/lang/Object;)V +HSPLio/ktor/client/plugins/HttpRequestRetryConfig;->retryIf(ILkotlin/jvm/functions/Function3;)V +HSPLio/ktor/client/plugins/HttpRequestRetryConfig;->retryOnException$default(Lio/ktor/client/plugins/HttpRequestRetryConfig;IZILjava/lang/Object;)V +HSPLio/ktor/client/plugins/HttpRequestRetryConfig;->retryOnException(IZ)V +HSPLio/ktor/client/plugins/HttpRequestRetryConfig;->retryOnExceptionIf(ILkotlin/jvm/functions/Function3;)V +HSPLio/ktor/client/plugins/HttpRequestRetryConfig;->retryOnExceptionOrServerErrors(I)V +HSPLio/ktor/client/plugins/HttpRequestRetryConfig;->retryOnServerErrors(I)V +HSPLio/ktor/client/plugins/HttpRequestRetryConfig;->setDelayMillis$ktor_client_core(Lkotlin/jvm/functions/Function2;)V +HSPLio/ktor/client/plugins/HttpRequestRetryConfig;->setMaxRetries(I)V +HSPLio/ktor/client/plugins/HttpRequestRetryConfig;->setShouldRetry$ktor_client_core(Lkotlin/jvm/functions/Function3;)V +HSPLio/ktor/client/plugins/HttpRequestRetryConfig;->setShouldRetryOnException$ktor_client_core(Lkotlin/jvm/functions/Function3;)V +Lio/ktor/client/plugins/HttpRequestRetryConfig$constantDelay$1; +HSPLio/ktor/client/plugins/HttpRequestRetryConfig$constantDelay$1;->(JLio/ktor/client/plugins/HttpRequestRetryConfig;J)V +Lio/ktor/client/plugins/HttpRequestRetryConfig$delay$1; +HSPLio/ktor/client/plugins/HttpRequestRetryConfig$delay$1;->(Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/HttpRequestRetryConfig$delayMillis$1; +HSPLio/ktor/client/plugins/HttpRequestRetryConfig$delayMillis$1;->(ZLkotlin/jvm/functions/Function2;)V +Lio/ktor/client/plugins/HttpRequestRetryConfig$exponentialDelay$1; +HSPLio/ktor/client/plugins/HttpRequestRetryConfig$exponentialDelay$1;->(DJLio/ktor/client/plugins/HttpRequestRetryConfig;J)V +Lio/ktor/client/plugins/HttpRequestRetryConfig$modifyRequest$1; +HSPLio/ktor/client/plugins/HttpRequestRetryConfig$modifyRequest$1;->()V +HSPLio/ktor/client/plugins/HttpRequestRetryConfig$modifyRequest$1;->()V +Lio/ktor/client/plugins/HttpRequestRetryConfig$retryOnException$1; +HSPLio/ktor/client/plugins/HttpRequestRetryConfig$retryOnException$1;->(Z)V +Lio/ktor/client/plugins/HttpRequestRetryConfig$retryOnServerErrors$1; +HSPLio/ktor/client/plugins/HttpRequestRetryConfig$retryOnServerErrors$1;->()V +HSPLio/ktor/client/plugins/HttpRequestRetryConfig$retryOnServerErrors$1;->()V +Lio/ktor/client/plugins/HttpRequestRetryKt; +HSPLio/ktor/client/plugins/HttpRequestRetryKt;->()V +HSPLio/ktor/client/plugins/HttpRequestRetryKt;->getHttpRequestRetry()Lio/ktor/client/plugins/api/ClientPlugin; +Lio/ktor/client/plugins/HttpRequestRetryKt$HttpRequestRetry$1; +HSPLio/ktor/client/plugins/HttpRequestRetryKt$HttpRequestRetry$1;->()V +HSPLio/ktor/client/plugins/HttpRequestRetryKt$HttpRequestRetry$1;->()V +HSPLio/ktor/client/plugins/HttpRequestRetryKt$HttpRequestRetry$1;->invoke()Lio/ktor/client/plugins/HttpRequestRetryConfig; +HSPLio/ktor/client/plugins/HttpRequestRetryKt$HttpRequestRetry$1;->invoke()Ljava/lang/Object; +Lio/ktor/client/plugins/HttpRequestRetryKt$HttpRequestRetry$2; +HSPLio/ktor/client/plugins/HttpRequestRetryKt$HttpRequestRetry$2;->()V +HSPLio/ktor/client/plugins/HttpRequestRetryKt$HttpRequestRetry$2;->()V +HSPLio/ktor/client/plugins/HttpRequestRetryKt$HttpRequestRetry$2;->invoke(Lio/ktor/client/plugins/api/ClientPluginBuilder;)V +HSPLio/ktor/client/plugins/HttpRequestRetryKt$HttpRequestRetry$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lio/ktor/client/plugins/HttpRequestRetryKt$HttpRequestRetry$2$1; +HSPLio/ktor/client/plugins/HttpRequestRetryKt$HttpRequestRetry$2$1;->(Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;ILkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lio/ktor/client/plugins/api/ClientPluginBuilder;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/HttpSend; +HSPLio/ktor/client/plugins/HttpSend;->()V +HSPLio/ktor/client/plugins/HttpSend;->(I)V +HSPLio/ktor/client/plugins/HttpSend;->(ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLio/ktor/client/plugins/HttpSend;->access$getKey$cp()Lio/ktor/util/AttributeKey; +HSPLio/ktor/client/plugins/HttpSend;->intercept(Lkotlin/jvm/functions/Function3;)V +Lio/ktor/client/plugins/HttpSend$Config; +HSPLio/ktor/client/plugins/HttpSend$Config;->()V +HSPLio/ktor/client/plugins/HttpSend$Config;->getMaxSendCount()I +Lio/ktor/client/plugins/HttpSend$Plugin; +HSPLio/ktor/client/plugins/HttpSend$Plugin;->()V +HSPLio/ktor/client/plugins/HttpSend$Plugin;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLio/ktor/client/plugins/HttpSend$Plugin;->getKey()Lio/ktor/util/AttributeKey; +HSPLio/ktor/client/plugins/HttpSend$Plugin;->install(Lio/ktor/client/plugins/HttpSend;Lio/ktor/client/HttpClient;)V +HSPLio/ktor/client/plugins/HttpSend$Plugin;->install(Ljava/lang/Object;Lio/ktor/client/HttpClient;)V +HSPLio/ktor/client/plugins/HttpSend$Plugin;->prepare(Lkotlin/jvm/functions/Function1;)Lio/ktor/client/plugins/HttpSend; +HSPLio/ktor/client/plugins/HttpSend$Plugin;->prepare(Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; +Lio/ktor/client/plugins/HttpSend$Plugin$install$1; +HSPLio/ktor/client/plugins/HttpSend$Plugin$install$1;->(Lio/ktor/client/plugins/HttpSend;Lio/ktor/client/HttpClient;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/HttpTimeoutCapability; +HSPLio/ktor/client/plugins/HttpTimeoutCapability;->()V +HSPLio/ktor/client/plugins/HttpTimeoutCapability;->()V +Lio/ktor/client/plugins/ReceiveError; +HSPLio/ktor/client/plugins/ReceiveError;->()V +HSPLio/ktor/client/plugins/ReceiveError;->()V +HSPLio/ktor/client/plugins/ReceiveError;->install(Lio/ktor/client/HttpClient;Ljava/lang/Object;)V +HSPLio/ktor/client/plugins/ReceiveError;->install(Lio/ktor/client/HttpClient;Lkotlin/jvm/functions/Function3;)V +Lio/ktor/client/plugins/ReceiveError$install$1; +HSPLio/ktor/client/plugins/ReceiveError$install$1;->(Lkotlin/jvm/functions/Function3;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/RenderRequestHook; +HSPLio/ktor/client/plugins/RenderRequestHook;->()V +HSPLio/ktor/client/plugins/RenderRequestHook;->()V +HSPLio/ktor/client/plugins/RenderRequestHook;->install(Lio/ktor/client/HttpClient;Ljava/lang/Object;)V +HSPLio/ktor/client/plugins/RenderRequestHook;->install(Lio/ktor/client/HttpClient;Lkotlin/jvm/functions/Function3;)V +Lio/ktor/client/plugins/RenderRequestHook$install$1; +HSPLio/ktor/client/plugins/RenderRequestHook$install$1;->(Lkotlin/jvm/functions/Function3;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/RequestError; +HSPLio/ktor/client/plugins/RequestError;->()V +HSPLio/ktor/client/plugins/RequestError;->()V +HSPLio/ktor/client/plugins/RequestError;->install(Lio/ktor/client/HttpClient;Ljava/lang/Object;)V +HSPLio/ktor/client/plugins/RequestError;->install(Lio/ktor/client/HttpClient;Lkotlin/jvm/functions/Function3;)V +Lio/ktor/client/plugins/RequestError$install$1; +HSPLio/ktor/client/plugins/RequestError$install$1;->(Lkotlin/jvm/functions/Function3;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/SaveBodyPluginConfig; +HSPLio/ktor/client/plugins/SaveBodyPluginConfig;->()V +HSPLio/ktor/client/plugins/SaveBodyPluginConfig;->getDisabled()Z +Lio/ktor/client/plugins/SetupRequestContext; +HSPLio/ktor/client/plugins/SetupRequestContext;->()V +HSPLio/ktor/client/plugins/SetupRequestContext;->()V +HSPLio/ktor/client/plugins/SetupRequestContext;->install(Lio/ktor/client/HttpClient;Ljava/lang/Object;)V +HSPLio/ktor/client/plugins/SetupRequestContext;->install(Lio/ktor/client/HttpClient;Lkotlin/jvm/functions/Function3;)V +Lio/ktor/client/plugins/SetupRequestContext$install$1; +HSPLio/ktor/client/plugins/SetupRequestContext$install$1;->(Lkotlin/jvm/functions/Function3;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/UserAgentConfig; +HSPLio/ktor/client/plugins/UserAgentConfig;->(Ljava/lang/String;)V +HSPLio/ktor/client/plugins/UserAgentConfig;->(Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLio/ktor/client/plugins/UserAgentConfig;->getAgent()Ljava/lang/String; +HSPLio/ktor/client/plugins/UserAgentConfig;->setAgent(Ljava/lang/String;)V +Lio/ktor/client/plugins/UserAgentKt; +HSPLio/ktor/client/plugins/UserAgentKt;->()V +HSPLio/ktor/client/plugins/UserAgentKt;->getUserAgent()Lio/ktor/client/plugins/api/ClientPlugin; +Lio/ktor/client/plugins/UserAgentKt$UserAgent$1; +HSPLio/ktor/client/plugins/UserAgentKt$UserAgent$1;->()V +HSPLio/ktor/client/plugins/UserAgentKt$UserAgent$1;->()V +HSPLio/ktor/client/plugins/UserAgentKt$UserAgent$1;->invoke()Lio/ktor/client/plugins/UserAgentConfig; +HSPLio/ktor/client/plugins/UserAgentKt$UserAgent$1;->invoke()Ljava/lang/Object; +Lio/ktor/client/plugins/UserAgentKt$UserAgent$2; +HSPLio/ktor/client/plugins/UserAgentKt$UserAgent$2;->()V +HSPLio/ktor/client/plugins/UserAgentKt$UserAgent$2;->()V +HSPLio/ktor/client/plugins/UserAgentKt$UserAgent$2;->invoke(Lio/ktor/client/plugins/api/ClientPluginBuilder;)V +HSPLio/ktor/client/plugins/UserAgentKt$UserAgent$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lio/ktor/client/plugins/UserAgentKt$UserAgent$2$1; +HSPLio/ktor/client/plugins/UserAgentKt$UserAgent$2$1;->(Ljava/lang/String;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/api/ClientHook; +Lio/ktor/client/plugins/api/ClientPlugin; +Lio/ktor/client/plugins/api/ClientPluginBuilder; +HSPLio/ktor/client/plugins/api/ClientPluginBuilder;->(Lio/ktor/util/AttributeKey;Lio/ktor/client/HttpClient;Ljava/lang/Object;)V +HSPLio/ktor/client/plugins/api/ClientPluginBuilder;->getClient()Lio/ktor/client/HttpClient; +HSPLio/ktor/client/plugins/api/ClientPluginBuilder;->getHooks$ktor_client_core()Ljava/util/List; +HSPLio/ktor/client/plugins/api/ClientPluginBuilder;->getOnClose$ktor_client_core()Lkotlin/jvm/functions/Function0; +HSPLio/ktor/client/plugins/api/ClientPluginBuilder;->getPluginConfig()Ljava/lang/Object; +HSPLio/ktor/client/plugins/api/ClientPluginBuilder;->on(Lio/ktor/client/plugins/api/ClientHook;Ljava/lang/Object;)V +HSPLio/ktor/client/plugins/api/ClientPluginBuilder;->onRequest(Lkotlin/jvm/functions/Function4;)V +HSPLio/ktor/client/plugins/api/ClientPluginBuilder;->transformRequestBody(Lkotlin/jvm/functions/Function5;)V +HSPLio/ktor/client/plugins/api/ClientPluginBuilder;->transformResponseBody(Lkotlin/jvm/functions/Function5;)V +Lio/ktor/client/plugins/api/ClientPluginBuilder$onClose$1; +HSPLio/ktor/client/plugins/api/ClientPluginBuilder$onClose$1;->()V +HSPLio/ktor/client/plugins/api/ClientPluginBuilder$onClose$1;->()V +Lio/ktor/client/plugins/api/ClientPluginInstance; +HSPLio/ktor/client/plugins/api/ClientPluginInstance;->(Ljava/lang/Object;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V +HSPLio/ktor/client/plugins/api/ClientPluginInstance;->install(Lio/ktor/client/HttpClient;)V +Lio/ktor/client/plugins/api/ClientPluginInstance$onClose$1; +HSPLio/ktor/client/plugins/api/ClientPluginInstance$onClose$1;->()V +HSPLio/ktor/client/plugins/api/ClientPluginInstance$onClose$1;->()V +Lio/ktor/client/plugins/api/CreatePluginUtilsKt; +HSPLio/ktor/client/plugins/api/CreatePluginUtilsKt;->createClientPlugin(Ljava/lang/String;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;)Lio/ktor/client/plugins/api/ClientPlugin; +HSPLio/ktor/client/plugins/api/CreatePluginUtilsKt;->createClientPlugin(Ljava/lang/String;Lkotlin/jvm/functions/Function1;)Lio/ktor/client/plugins/api/ClientPlugin; +Lio/ktor/client/plugins/api/CreatePluginUtilsKt$createClientPlugin$1; +HSPLio/ktor/client/plugins/api/CreatePluginUtilsKt$createClientPlugin$1;->(Ljava/lang/String;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;)V +HSPLio/ktor/client/plugins/api/CreatePluginUtilsKt$createClientPlugin$1;->getKey()Lio/ktor/util/AttributeKey; +HSPLio/ktor/client/plugins/api/CreatePluginUtilsKt$createClientPlugin$1;->install(Lio/ktor/client/plugins/api/ClientPluginInstance;Lio/ktor/client/HttpClient;)V +HSPLio/ktor/client/plugins/api/CreatePluginUtilsKt$createClientPlugin$1;->install(Ljava/lang/Object;Lio/ktor/client/HttpClient;)V +HSPLio/ktor/client/plugins/api/CreatePluginUtilsKt$createClientPlugin$1;->prepare(Lkotlin/jvm/functions/Function1;)Lio/ktor/client/plugins/api/ClientPluginInstance; +HSPLio/ktor/client/plugins/api/CreatePluginUtilsKt$createClientPlugin$1;->prepare(Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; +Lio/ktor/client/plugins/api/CreatePluginUtilsKt$createClientPlugin$2; +HSPLio/ktor/client/plugins/api/CreatePluginUtilsKt$createClientPlugin$2;->()V +HSPLio/ktor/client/plugins/api/CreatePluginUtilsKt$createClientPlugin$2;->()V +HSPLio/ktor/client/plugins/api/CreatePluginUtilsKt$createClientPlugin$2;->invoke()Ljava/lang/Object; +HSPLio/ktor/client/plugins/api/CreatePluginUtilsKt$createClientPlugin$2;->invoke()V +Lio/ktor/client/plugins/api/HookHandler; +HSPLio/ktor/client/plugins/api/HookHandler;->(Lio/ktor/client/plugins/api/ClientHook;Ljava/lang/Object;)V +HSPLio/ktor/client/plugins/api/HookHandler;->install(Lio/ktor/client/HttpClient;)V +Lio/ktor/client/plugins/api/RequestHook; +HSPLio/ktor/client/plugins/api/RequestHook;->()V +HSPLio/ktor/client/plugins/api/RequestHook;->()V +HSPLio/ktor/client/plugins/api/RequestHook;->install(Lio/ktor/client/HttpClient;Ljava/lang/Object;)V +HSPLio/ktor/client/plugins/api/RequestHook;->install(Lio/ktor/client/HttpClient;Lkotlin/jvm/functions/Function4;)V +Lio/ktor/client/plugins/api/RequestHook$install$1; +HSPLio/ktor/client/plugins/api/RequestHook$install$1;->(Lkotlin/jvm/functions/Function4;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/api/Send; +HSPLio/ktor/client/plugins/api/Send;->()V +HSPLio/ktor/client/plugins/api/Send;->()V +HSPLio/ktor/client/plugins/api/Send;->install(Lio/ktor/client/HttpClient;Ljava/lang/Object;)V +HSPLio/ktor/client/plugins/api/Send;->install(Lio/ktor/client/HttpClient;Lkotlin/jvm/functions/Function3;)V +Lio/ktor/client/plugins/api/Send$install$1; +HSPLio/ktor/client/plugins/api/Send$install$1;->(Lkotlin/jvm/functions/Function3;Lio/ktor/client/HttpClient;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/api/SetupRequest; +HSPLio/ktor/client/plugins/api/SetupRequest;->()V +HSPLio/ktor/client/plugins/api/SetupRequest;->()V +HSPLio/ktor/client/plugins/api/SetupRequest;->install(Lio/ktor/client/HttpClient;Ljava/lang/Object;)V +HSPLio/ktor/client/plugins/api/SetupRequest;->install(Lio/ktor/client/HttpClient;Lkotlin/jvm/functions/Function2;)V +Lio/ktor/client/plugins/api/SetupRequest$install$1; +HSPLio/ktor/client/plugins/api/SetupRequest$install$1;->(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/api/TransformRequestBodyHook; +HSPLio/ktor/client/plugins/api/TransformRequestBodyHook;->()V +HSPLio/ktor/client/plugins/api/TransformRequestBodyHook;->()V +HSPLio/ktor/client/plugins/api/TransformRequestBodyHook;->install(Lio/ktor/client/HttpClient;Ljava/lang/Object;)V +HSPLio/ktor/client/plugins/api/TransformRequestBodyHook;->install(Lio/ktor/client/HttpClient;Lkotlin/jvm/functions/Function5;)V +Lio/ktor/client/plugins/api/TransformRequestBodyHook$install$1; +HSPLio/ktor/client/plugins/api/TransformRequestBodyHook$install$1;->(Lkotlin/jvm/functions/Function5;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/api/TransformResponseBodyHook; +HSPLio/ktor/client/plugins/api/TransformResponseBodyHook;->()V +HSPLio/ktor/client/plugins/api/TransformResponseBodyHook;->()V +HSPLio/ktor/client/plugins/api/TransformResponseBodyHook;->install(Lio/ktor/client/HttpClient;Ljava/lang/Object;)V +HSPLio/ktor/client/plugins/api/TransformResponseBodyHook;->install(Lio/ktor/client/HttpClient;Lkotlin/jvm/functions/Function5;)V +Lio/ktor/client/plugins/api/TransformResponseBodyHook$install$1; +HSPLio/ktor/client/plugins/api/TransformResponseBodyHook$install$1;->(Lkotlin/jvm/functions/Function5;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/cache/HttpCache; +HSPLio/ktor/client/plugins/cache/HttpCache;->()V +HSPLio/ktor/client/plugins/cache/HttpCache;->(Lio/ktor/client/plugins/cache/storage/HttpCacheStorage;Lio/ktor/client/plugins/cache/storage/HttpCacheStorage;Lio/ktor/client/plugins/cache/storage/CacheStorage;Lio/ktor/client/plugins/cache/storage/CacheStorage;ZZ)V +HSPLio/ktor/client/plugins/cache/HttpCache;->(Lio/ktor/client/plugins/cache/storage/HttpCacheStorage;Lio/ktor/client/plugins/cache/storage/HttpCacheStorage;Lio/ktor/client/plugins/cache/storage/CacheStorage;Lio/ktor/client/plugins/cache/storage/CacheStorage;ZZLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLio/ktor/client/plugins/cache/HttpCache;->access$getKey$cp()Lio/ktor/util/AttributeKey; +Lio/ktor/client/plugins/cache/HttpCache$Companion; +HSPLio/ktor/client/plugins/cache/HttpCache$Companion;->()V +HSPLio/ktor/client/plugins/cache/HttpCache$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLio/ktor/client/plugins/cache/HttpCache$Companion;->getKey()Lio/ktor/util/AttributeKey; +HSPLio/ktor/client/plugins/cache/HttpCache$Companion;->install(Lio/ktor/client/plugins/cache/HttpCache;Lio/ktor/client/HttpClient;)V +HSPLio/ktor/client/plugins/cache/HttpCache$Companion;->install(Ljava/lang/Object;Lio/ktor/client/HttpClient;)V +HSPLio/ktor/client/plugins/cache/HttpCache$Companion;->prepare(Lkotlin/jvm/functions/Function1;)Lio/ktor/client/plugins/cache/HttpCache; +HSPLio/ktor/client/plugins/cache/HttpCache$Companion;->prepare(Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; +Lio/ktor/client/plugins/cache/HttpCache$Companion$install$1; +HSPLio/ktor/client/plugins/cache/HttpCache$Companion$install$1;->(Lio/ktor/client/plugins/cache/HttpCache;Lio/ktor/client/HttpClient;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/cache/HttpCache$Companion$install$2; +HSPLio/ktor/client/plugins/cache/HttpCache$Companion$install$2;->(Lio/ktor/client/plugins/cache/HttpCache;Lio/ktor/client/HttpClient;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/cache/HttpCache$Config; +HSPLio/ktor/client/plugins/cache/HttpCache$Config;->()V +HSPLio/ktor/client/plugins/cache/HttpCache$Config;->getPrivateStorage()Lio/ktor/client/plugins/cache/storage/HttpCacheStorage; +HSPLio/ktor/client/plugins/cache/HttpCache$Config;->getPrivateStorageNew$ktor_client_core()Lio/ktor/client/plugins/cache/storage/CacheStorage; +HSPLio/ktor/client/plugins/cache/HttpCache$Config;->getPublicStorage()Lio/ktor/client/plugins/cache/storage/HttpCacheStorage; +HSPLio/ktor/client/plugins/cache/HttpCache$Config;->getPublicStorageNew$ktor_client_core()Lio/ktor/client/plugins/cache/storage/CacheStorage; +HSPLio/ktor/client/plugins/cache/HttpCache$Config;->getUseOldStorage$ktor_client_core()Z +HSPLio/ktor/client/plugins/cache/HttpCache$Config;->isShared()Z +Lio/ktor/client/plugins/cache/storage/CacheStorage; +HSPLio/ktor/client/plugins/cache/storage/CacheStorage;->()V +Lio/ktor/client/plugins/cache/storage/CacheStorage$Companion; +HSPLio/ktor/client/plugins/cache/storage/CacheStorage$Companion;->()V +HSPLio/ktor/client/plugins/cache/storage/CacheStorage$Companion;->()V +HSPLio/ktor/client/plugins/cache/storage/CacheStorage$Companion;->getUnlimited()Lkotlin/jvm/functions/Function0; +Lio/ktor/client/plugins/cache/storage/CacheStorage$Companion$Unlimited$1; +HSPLio/ktor/client/plugins/cache/storage/CacheStorage$Companion$Unlimited$1;->()V +HSPLio/ktor/client/plugins/cache/storage/CacheStorage$Companion$Unlimited$1;->()V +HSPLio/ktor/client/plugins/cache/storage/CacheStorage$Companion$Unlimited$1;->invoke()Lio/ktor/client/plugins/cache/storage/UnlimitedStorage; +HSPLio/ktor/client/plugins/cache/storage/CacheStorage$Companion$Unlimited$1;->invoke()Ljava/lang/Object; +Lio/ktor/client/plugins/cache/storage/DisabledCacheStorage; +HSPLio/ktor/client/plugins/cache/storage/DisabledCacheStorage;->()V +HSPLio/ktor/client/plugins/cache/storage/DisabledCacheStorage;->()V +Lio/ktor/client/plugins/cache/storage/DisabledStorage; +HSPLio/ktor/client/plugins/cache/storage/DisabledStorage;->()V +HSPLio/ktor/client/plugins/cache/storage/DisabledStorage;->()V +Lio/ktor/client/plugins/cache/storage/HttpCacheStorage; +HSPLio/ktor/client/plugins/cache/storage/HttpCacheStorage;->()V +HSPLio/ktor/client/plugins/cache/storage/HttpCacheStorage;->()V +HSPLio/ktor/client/plugins/cache/storage/HttpCacheStorage;->access$getUnlimited$cp()Lkotlin/jvm/functions/Function0; +Lio/ktor/client/plugins/cache/storage/HttpCacheStorage$Companion; +HSPLio/ktor/client/plugins/cache/storage/HttpCacheStorage$Companion;->()V +HSPLio/ktor/client/plugins/cache/storage/HttpCacheStorage$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLio/ktor/client/plugins/cache/storage/HttpCacheStorage$Companion;->getUnlimited()Lkotlin/jvm/functions/Function0; +Lio/ktor/client/plugins/cache/storage/HttpCacheStorage$Companion$Unlimited$1; +HSPLio/ktor/client/plugins/cache/storage/HttpCacheStorage$Companion$Unlimited$1;->()V +HSPLio/ktor/client/plugins/cache/storage/HttpCacheStorage$Companion$Unlimited$1;->()V +HSPLio/ktor/client/plugins/cache/storage/HttpCacheStorage$Companion$Unlimited$1;->invoke()Lio/ktor/client/plugins/cache/storage/UnlimitedCacheStorage; +HSPLio/ktor/client/plugins/cache/storage/HttpCacheStorage$Companion$Unlimited$1;->invoke()Ljava/lang/Object; +Lio/ktor/client/plugins/cache/storage/UnlimitedCacheStorage; +HSPLio/ktor/client/plugins/cache/storage/UnlimitedCacheStorage;->()V +Lio/ktor/client/plugins/cache/storage/UnlimitedStorage; +HSPLio/ktor/client/plugins/cache/storage/UnlimitedStorage;->()V +Lio/ktor/client/plugins/contentnegotiation/ContentNegotiationConfig; +HSPLio/ktor/client/plugins/contentnegotiation/ContentNegotiationConfig;->()V +HSPLio/ktor/client/plugins/contentnegotiation/ContentNegotiationConfig;->getIgnoredTypes$ktor_client_content_negotiation()Ljava/util/Set; +HSPLio/ktor/client/plugins/contentnegotiation/ContentNegotiationConfig;->getRegistrations$ktor_client_content_negotiation()Ljava/util/List; +HSPLio/ktor/client/plugins/contentnegotiation/ContentNegotiationConfig;->register(Lio/ktor/http/ContentType;Lio/ktor/serialization/ContentConverter;Lio/ktor/http/ContentTypeMatcher;Lkotlin/jvm/functions/Function1;)V +HSPLio/ktor/client/plugins/contentnegotiation/ContentNegotiationConfig;->register(Lio/ktor/http/ContentType;Lio/ktor/serialization/ContentConverter;Lkotlin/jvm/functions/Function1;)V +Lio/ktor/client/plugins/contentnegotiation/ContentNegotiationConfig$ConverterRegistration; +HSPLio/ktor/client/plugins/contentnegotiation/ContentNegotiationConfig$ConverterRegistration;->(Lio/ktor/serialization/ContentConverter;Lio/ktor/http/ContentType;Lio/ktor/http/ContentTypeMatcher;)V +Lio/ktor/client/plugins/contentnegotiation/ContentNegotiationKt; +HSPLio/ktor/client/plugins/contentnegotiation/ContentNegotiationKt;->()V +HSPLio/ktor/client/plugins/contentnegotiation/ContentNegotiationKt;->getContentNegotiation()Lio/ktor/client/plugins/api/ClientPlugin; +HSPLio/ktor/client/plugins/contentnegotiation/ContentNegotiationKt;->getDefaultCommonIgnoredTypes()Ljava/util/Set; +Lio/ktor/client/plugins/contentnegotiation/ContentNegotiationKt$ContentNegotiation$1; +HSPLio/ktor/client/plugins/contentnegotiation/ContentNegotiationKt$ContentNegotiation$1;->()V +HSPLio/ktor/client/plugins/contentnegotiation/ContentNegotiationKt$ContentNegotiation$1;->()V +HSPLio/ktor/client/plugins/contentnegotiation/ContentNegotiationKt$ContentNegotiation$1;->invoke()Lio/ktor/client/plugins/contentnegotiation/ContentNegotiationConfig; +HSPLio/ktor/client/plugins/contentnegotiation/ContentNegotiationKt$ContentNegotiation$1;->invoke()Ljava/lang/Object; +Lio/ktor/client/plugins/contentnegotiation/ContentNegotiationKt$ContentNegotiation$2; +HSPLio/ktor/client/plugins/contentnegotiation/ContentNegotiationKt$ContentNegotiation$2;->()V +HSPLio/ktor/client/plugins/contentnegotiation/ContentNegotiationKt$ContentNegotiation$2;->()V +HSPLio/ktor/client/plugins/contentnegotiation/ContentNegotiationKt$ContentNegotiation$2;->invoke(Lio/ktor/client/plugins/api/ClientPluginBuilder;)V +HSPLio/ktor/client/plugins/contentnegotiation/ContentNegotiationKt$ContentNegotiation$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lio/ktor/client/plugins/contentnegotiation/ContentNegotiationKt$ContentNegotiation$2$1; +HSPLio/ktor/client/plugins/contentnegotiation/ContentNegotiationKt$ContentNegotiation$2$1;->(Ljava/util/List;Ljava/util/Set;Lio/ktor/client/plugins/api/ClientPluginBuilder;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/contentnegotiation/ContentNegotiationKt$ContentNegotiation$2$2; +HSPLio/ktor/client/plugins/contentnegotiation/ContentNegotiationKt$ContentNegotiation$2$2;->(Ljava/util/Set;Ljava/util/List;Lio/ktor/client/plugins/api/ClientPluginBuilder;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/contentnegotiation/DefaultIgnoredTypesJvmKt; +HSPLio/ktor/client/plugins/contentnegotiation/DefaultIgnoredTypesJvmKt;->()V +HSPLio/ktor/client/plugins/contentnegotiation/DefaultIgnoredTypesJvmKt;->getDefaultIgnoredTypes()Ljava/util/Set; +Lio/ktor/client/plugins/contentnegotiation/JsonContentTypeMatcher; +HSPLio/ktor/client/plugins/contentnegotiation/JsonContentTypeMatcher;->()V +HSPLio/ktor/client/plugins/contentnegotiation/JsonContentTypeMatcher;->()V +Lio/ktor/client/plugins/logging/HttpClientCallLogger; +Lio/ktor/client/plugins/logging/LogLevel; +HSPLio/ktor/client/plugins/logging/LogLevel;->$values()[Lio/ktor/client/plugins/logging/LogLevel; +HSPLio/ktor/client/plugins/logging/LogLevel;->()V +HSPLio/ktor/client/plugins/logging/LogLevel;->(Ljava/lang/String;IZZZ)V +HSPLio/ktor/client/plugins/logging/LogLevel;->getBody()Z +Lio/ktor/client/plugins/logging/Logger; +HSPLio/ktor/client/plugins/logging/Logger;->()V +Lio/ktor/client/plugins/logging/Logger$Companion; +HSPLio/ktor/client/plugins/logging/Logger$Companion;->()V +HSPLio/ktor/client/plugins/logging/Logger$Companion;->()V +Lio/ktor/client/plugins/logging/LoggerJvmKt; +HSPLio/ktor/client/plugins/logging/LoggerJvmKt;->getDEFAULT(Lio/ktor/client/plugins/logging/Logger$Companion;)Lio/ktor/client/plugins/logging/Logger; +Lio/ktor/client/plugins/logging/LoggerJvmKt$DEFAULT$1; +HSPLio/ktor/client/plugins/logging/LoggerJvmKt$DEFAULT$1;->()V +Lio/ktor/client/plugins/logging/LoggingConfig; +HSPLio/ktor/client/plugins/logging/LoggingConfig;->()V +HSPLio/ktor/client/plugins/logging/LoggingConfig;->getFilters$ktor_client_logging()Ljava/util/List; +HSPLio/ktor/client/plugins/logging/LoggingConfig;->getLevel()Lio/ktor/client/plugins/logging/LogLevel; +HSPLio/ktor/client/plugins/logging/LoggingConfig;->getLogger()Lio/ktor/client/plugins/logging/Logger; +HSPLio/ktor/client/plugins/logging/LoggingConfig;->getSanitizedHeaders$ktor_client_logging()Ljava/util/List; +HSPLio/ktor/client/plugins/logging/LoggingConfig;->setLevel(Lio/ktor/client/plugins/logging/LogLevel;)V +Lio/ktor/client/plugins/logging/LoggingKt; +HSPLio/ktor/client/plugins/logging/LoggingKt;->()V +HSPLio/ktor/client/plugins/logging/LoggingKt;->getLogging()Lio/ktor/client/plugins/api/ClientPlugin; +Lio/ktor/client/plugins/logging/LoggingKt$Logging$1; +HSPLio/ktor/client/plugins/logging/LoggingKt$Logging$1;->()V +HSPLio/ktor/client/plugins/logging/LoggingKt$Logging$1;->()V +HSPLio/ktor/client/plugins/logging/LoggingKt$Logging$1;->invoke()Lio/ktor/client/plugins/logging/LoggingConfig; +HSPLio/ktor/client/plugins/logging/LoggingKt$Logging$1;->invoke()Ljava/lang/Object; +Lio/ktor/client/plugins/logging/LoggingKt$Logging$2; +HSPLio/ktor/client/plugins/logging/LoggingKt$Logging$2;->()V +HSPLio/ktor/client/plugins/logging/LoggingKt$Logging$2;->()V +HSPLio/ktor/client/plugins/logging/LoggingKt$Logging$2;->invoke(Lio/ktor/client/plugins/api/ClientPluginBuilder;)V +HSPLio/ktor/client/plugins/logging/LoggingKt$Logging$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lio/ktor/client/plugins/logging/LoggingKt$Logging$2$1; +HSPLio/ktor/client/plugins/logging/LoggingKt$Logging$2$1;->(Ljava/util/List;Lio/ktor/client/plugins/logging/Logger;Lio/ktor/client/plugins/logging/LogLevel;Ljava/util/List;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/logging/LoggingKt$Logging$2$2; +HSPLio/ktor/client/plugins/logging/LoggingKt$Logging$2$2;->(Lio/ktor/client/plugins/logging/LogLevel;Ljava/util/List;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/logging/LoggingKt$Logging$2$3; +HSPLio/ktor/client/plugins/logging/LoggingKt$Logging$2$3;->(Lio/ktor/client/plugins/logging/LogLevel;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/logging/LoggingKt$Logging$2$4; +HSPLio/ktor/client/plugins/logging/LoggingKt$Logging$2$4;->(Lkotlin/jvm/functions/Function2;)V +HSPLio/ktor/client/plugins/logging/LoggingKt$Logging$2$4;->invoke(Lio/ktor/client/plugins/observer/ResponseObserverConfig;)V +HSPLio/ktor/client/plugins/logging/LoggingKt$Logging$2$4;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lio/ktor/client/plugins/logging/LoggingKt$Logging$2$observer$1; +HSPLio/ktor/client/plugins/logging/LoggingKt$Logging$2$observer$1;->(Lio/ktor/client/plugins/logging/LogLevel;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/logging/ReceiveHook; +HSPLio/ktor/client/plugins/logging/ReceiveHook;->()V +HSPLio/ktor/client/plugins/logging/ReceiveHook;->()V +HSPLio/ktor/client/plugins/logging/ReceiveHook;->install(Lio/ktor/client/HttpClient;Ljava/lang/Object;)V +HSPLio/ktor/client/plugins/logging/ReceiveHook;->install(Lio/ktor/client/HttpClient;Lkotlin/jvm/functions/Function3;)V +Lio/ktor/client/plugins/logging/ReceiveHook$install$1; +HSPLio/ktor/client/plugins/logging/ReceiveHook$install$1;->(Lkotlin/jvm/functions/Function3;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/logging/ResponseHook; +HSPLio/ktor/client/plugins/logging/ResponseHook;->()V +HSPLio/ktor/client/plugins/logging/ResponseHook;->()V +HSPLio/ktor/client/plugins/logging/ResponseHook;->install(Lio/ktor/client/HttpClient;Ljava/lang/Object;)V +HSPLio/ktor/client/plugins/logging/ResponseHook;->install(Lio/ktor/client/HttpClient;Lkotlin/jvm/functions/Function3;)V +Lio/ktor/client/plugins/logging/ResponseHook$install$1; +HSPLio/ktor/client/plugins/logging/ResponseHook$install$1;->(Lkotlin/jvm/functions/Function3;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/logging/SendHook; +HSPLio/ktor/client/plugins/logging/SendHook;->()V +HSPLio/ktor/client/plugins/logging/SendHook;->()V +HSPLio/ktor/client/plugins/logging/SendHook;->install(Lio/ktor/client/HttpClient;Ljava/lang/Object;)V +HSPLio/ktor/client/plugins/logging/SendHook;->install(Lio/ktor/client/HttpClient;Lkotlin/jvm/functions/Function3;)V +Lio/ktor/client/plugins/logging/SendHook$install$1; +HSPLio/ktor/client/plugins/logging/SendHook$install$1;->(Lkotlin/jvm/functions/Function3;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/observer/AfterReceiveHook; +HSPLio/ktor/client/plugins/observer/AfterReceiveHook;->()V +HSPLio/ktor/client/plugins/observer/AfterReceiveHook;->()V +HSPLio/ktor/client/plugins/observer/AfterReceiveHook;->install(Lio/ktor/client/HttpClient;Ljava/lang/Object;)V +HSPLio/ktor/client/plugins/observer/AfterReceiveHook;->install(Lio/ktor/client/HttpClient;Lkotlin/jvm/functions/Function3;)V +Lio/ktor/client/plugins/observer/AfterReceiveHook$install$1; +HSPLio/ktor/client/plugins/observer/AfterReceiveHook$install$1;->(Lkotlin/jvm/functions/Function3;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/observer/ResponseObserverConfig; +HSPLio/ktor/client/plugins/observer/ResponseObserverConfig;->()V +HSPLio/ktor/client/plugins/observer/ResponseObserverConfig;->getFilter$ktor_client_core()Lkotlin/jvm/functions/Function1; +HSPLio/ktor/client/plugins/observer/ResponseObserverConfig;->getResponseHandler$ktor_client_core()Lkotlin/jvm/functions/Function2; +HSPLio/ktor/client/plugins/observer/ResponseObserverConfig;->onResponse(Lkotlin/jvm/functions/Function2;)V +Lio/ktor/client/plugins/observer/ResponseObserverConfig$responseHandler$1; +HSPLio/ktor/client/plugins/observer/ResponseObserverConfig$responseHandler$1;->(Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/observer/ResponseObserverKt; +HSPLio/ktor/client/plugins/observer/ResponseObserverKt;->()V +HSPLio/ktor/client/plugins/observer/ResponseObserverKt;->getResponseObserver()Lio/ktor/client/plugins/api/ClientPlugin; +Lio/ktor/client/plugins/observer/ResponseObserverKt$ResponseObserver$1; +HSPLio/ktor/client/plugins/observer/ResponseObserverKt$ResponseObserver$1;->()V +HSPLio/ktor/client/plugins/observer/ResponseObserverKt$ResponseObserver$1;->()V +HSPLio/ktor/client/plugins/observer/ResponseObserverKt$ResponseObserver$1;->invoke()Lio/ktor/client/plugins/observer/ResponseObserverConfig; +HSPLio/ktor/client/plugins/observer/ResponseObserverKt$ResponseObserver$1;->invoke()Ljava/lang/Object; +Lio/ktor/client/plugins/observer/ResponseObserverKt$ResponseObserver$2; +HSPLio/ktor/client/plugins/observer/ResponseObserverKt$ResponseObserver$2;->()V +HSPLio/ktor/client/plugins/observer/ResponseObserverKt$ResponseObserver$2;->()V +HSPLio/ktor/client/plugins/observer/ResponseObserverKt$ResponseObserver$2;->invoke(Lio/ktor/client/plugins/api/ClientPluginBuilder;)V +HSPLio/ktor/client/plugins/observer/ResponseObserverKt$ResponseObserver$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lio/ktor/client/plugins/observer/ResponseObserverKt$ResponseObserver$2$1; +HSPLio/ktor/client/plugins/observer/ResponseObserverKt$ResponseObserver$2$1;->(Lkotlin/jvm/functions/Function1;Lio/ktor/client/plugins/api/ClientPluginBuilder;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/sse/SSECapability; +HSPLio/ktor/client/plugins/sse/SSECapability;->()V +HSPLio/ktor/client/plugins/sse/SSECapability;->()V +Lio/ktor/client/plugins/websocket/WebSocketCapability; +HSPLio/ktor/client/plugins/websocket/WebSocketCapability;->()V +HSPLio/ktor/client/plugins/websocket/WebSocketCapability;->()V +Lio/ktor/client/plugins/websocket/WebSocketExtensionsCapability; +HSPLio/ktor/client/plugins/websocket/WebSocketExtensionsCapability;->()V +HSPLio/ktor/client/plugins/websocket/WebSocketExtensionsCapability;->()V +Lio/ktor/client/plugins/websocket/WebSockets; +HSPLio/ktor/client/plugins/websocket/WebSockets;->()V +HSPLio/ktor/client/plugins/websocket/WebSockets;->(JJLio/ktor/websocket/WebSocketExtensionsConfig;Lio/ktor/serialization/WebsocketContentConverter;)V +HSPLio/ktor/client/plugins/websocket/WebSockets;->access$getKey$cp()Lio/ktor/util/AttributeKey; +Lio/ktor/client/plugins/websocket/WebSockets$Config; +HSPLio/ktor/client/plugins/websocket/WebSockets$Config;->()V +HSPLio/ktor/client/plugins/websocket/WebSockets$Config;->getContentConverter()Lio/ktor/serialization/WebsocketContentConverter; +HSPLio/ktor/client/plugins/websocket/WebSockets$Config;->getExtensionsConfig$ktor_client_core()Lio/ktor/websocket/WebSocketExtensionsConfig; +HSPLio/ktor/client/plugins/websocket/WebSockets$Config;->getMaxFrameSize()J +HSPLio/ktor/client/plugins/websocket/WebSockets$Config;->getPingInterval()J +HSPLio/ktor/client/plugins/websocket/WebSockets$Config;->setPingInterval(J)V +Lio/ktor/client/plugins/websocket/WebSockets$Plugin; +HSPLio/ktor/client/plugins/websocket/WebSockets$Plugin;->()V +HSPLio/ktor/client/plugins/websocket/WebSockets$Plugin;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLio/ktor/client/plugins/websocket/WebSockets$Plugin;->getKey()Lio/ktor/util/AttributeKey; +HSPLio/ktor/client/plugins/websocket/WebSockets$Plugin;->install(Lio/ktor/client/plugins/websocket/WebSockets;Lio/ktor/client/HttpClient;)V +HSPLio/ktor/client/plugins/websocket/WebSockets$Plugin;->install(Ljava/lang/Object;Lio/ktor/client/HttpClient;)V +HSPLio/ktor/client/plugins/websocket/WebSockets$Plugin;->prepare(Lkotlin/jvm/functions/Function1;)Lio/ktor/client/plugins/websocket/WebSockets; +HSPLio/ktor/client/plugins/websocket/WebSockets$Plugin;->prepare(Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; +Lio/ktor/client/plugins/websocket/WebSockets$Plugin$install$1; +HSPLio/ktor/client/plugins/websocket/WebSockets$Plugin$install$1;->(ZLio/ktor/client/plugins/websocket/WebSockets;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/websocket/WebSockets$Plugin$install$2; +HSPLio/ktor/client/plugins/websocket/WebSockets$Plugin$install$2;->(Lio/ktor/client/plugins/websocket/WebSockets;ZLkotlin/coroutines/Continuation;)V +Lio/ktor/client/request/HttpRequestPipeline; +HSPLio/ktor/client/request/HttpRequestPipeline;->()V +HSPLio/ktor/client/request/HttpRequestPipeline;->(Z)V +HSPLio/ktor/client/request/HttpRequestPipeline;->access$getBefore$cp()Lio/ktor/util/pipeline/PipelinePhase; +HSPLio/ktor/client/request/HttpRequestPipeline;->access$getRender$cp()Lio/ktor/util/pipeline/PipelinePhase; +HSPLio/ktor/client/request/HttpRequestPipeline;->access$getSend$cp()Lio/ktor/util/pipeline/PipelinePhase; +HSPLio/ktor/client/request/HttpRequestPipeline;->access$getState$cp()Lio/ktor/util/pipeline/PipelinePhase; +HSPLio/ktor/client/request/HttpRequestPipeline;->access$getTransform$cp()Lio/ktor/util/pipeline/PipelinePhase; +Lio/ktor/client/request/HttpRequestPipeline$Phases; +HSPLio/ktor/client/request/HttpRequestPipeline$Phases;->()V +HSPLio/ktor/client/request/HttpRequestPipeline$Phases;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLio/ktor/client/request/HttpRequestPipeline$Phases;->getBefore()Lio/ktor/util/pipeline/PipelinePhase; +HSPLio/ktor/client/request/HttpRequestPipeline$Phases;->getRender()Lio/ktor/util/pipeline/PipelinePhase; +HSPLio/ktor/client/request/HttpRequestPipeline$Phases;->getSend()Lio/ktor/util/pipeline/PipelinePhase; +HSPLio/ktor/client/request/HttpRequestPipeline$Phases;->getState()Lio/ktor/util/pipeline/PipelinePhase; +HSPLio/ktor/client/request/HttpRequestPipeline$Phases;->getTransform()Lio/ktor/util/pipeline/PipelinePhase; +Lio/ktor/client/request/HttpSendPipeline; +HSPLio/ktor/client/request/HttpSendPipeline;->()V +HSPLio/ktor/client/request/HttpSendPipeline;->(Z)V +HSPLio/ktor/client/request/HttpSendPipeline;->access$getEngine$cp()Lio/ktor/util/pipeline/PipelinePhase; +HSPLio/ktor/client/request/HttpSendPipeline;->access$getMonitoring$cp()Lio/ktor/util/pipeline/PipelinePhase; +HSPLio/ktor/client/request/HttpSendPipeline;->access$getReceive$cp()Lio/ktor/util/pipeline/PipelinePhase; +HSPLio/ktor/client/request/HttpSendPipeline;->access$getState$cp()Lio/ktor/util/pipeline/PipelinePhase; +Lio/ktor/client/request/HttpSendPipeline$Phases; +HSPLio/ktor/client/request/HttpSendPipeline$Phases;->()V +HSPLio/ktor/client/request/HttpSendPipeline$Phases;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLio/ktor/client/request/HttpSendPipeline$Phases;->getEngine()Lio/ktor/util/pipeline/PipelinePhase; +HSPLio/ktor/client/request/HttpSendPipeline$Phases;->getMonitoring()Lio/ktor/util/pipeline/PipelinePhase; +HSPLio/ktor/client/request/HttpSendPipeline$Phases;->getReceive()Lio/ktor/util/pipeline/PipelinePhase; +HSPLio/ktor/client/request/HttpSendPipeline$Phases;->getState()Lio/ktor/util/pipeline/PipelinePhase; +Lio/ktor/client/statement/HttpReceivePipeline; +HSPLio/ktor/client/statement/HttpReceivePipeline;->()V +HSPLio/ktor/client/statement/HttpReceivePipeline;->(Z)V +HSPLio/ktor/client/statement/HttpReceivePipeline;->access$getAfter$cp()Lio/ktor/util/pipeline/PipelinePhase; +HSPLio/ktor/client/statement/HttpReceivePipeline;->access$getBefore$cp()Lio/ktor/util/pipeline/PipelinePhase; +HSPLio/ktor/client/statement/HttpReceivePipeline;->access$getState$cp()Lio/ktor/util/pipeline/PipelinePhase; +Lio/ktor/client/statement/HttpReceivePipeline$Phases; +HSPLio/ktor/client/statement/HttpReceivePipeline$Phases;->()V +HSPLio/ktor/client/statement/HttpReceivePipeline$Phases;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLio/ktor/client/statement/HttpReceivePipeline$Phases;->getAfter()Lio/ktor/util/pipeline/PipelinePhase; +HSPLio/ktor/client/statement/HttpReceivePipeline$Phases;->getBefore()Lio/ktor/util/pipeline/PipelinePhase; +HSPLio/ktor/client/statement/HttpReceivePipeline$Phases;->getState()Lio/ktor/util/pipeline/PipelinePhase; +Lio/ktor/client/statement/HttpResponsePipeline; +HSPLio/ktor/client/statement/HttpResponsePipeline;->()V +HSPLio/ktor/client/statement/HttpResponsePipeline;->(Z)V +HSPLio/ktor/client/statement/HttpResponsePipeline;->access$getParse$cp()Lio/ktor/util/pipeline/PipelinePhase; +HSPLio/ktor/client/statement/HttpResponsePipeline;->access$getReceive$cp()Lio/ktor/util/pipeline/PipelinePhase; +HSPLio/ktor/client/statement/HttpResponsePipeline;->access$getTransform$cp()Lio/ktor/util/pipeline/PipelinePhase; +Lio/ktor/client/statement/HttpResponsePipeline$Phases; +HSPLio/ktor/client/statement/HttpResponsePipeline$Phases;->()V +HSPLio/ktor/client/statement/HttpResponsePipeline$Phases;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLio/ktor/client/statement/HttpResponsePipeline$Phases;->getParse()Lio/ktor/util/pipeline/PipelinePhase; +HSPLio/ktor/client/statement/HttpResponsePipeline$Phases;->getReceive()Lio/ktor/util/pipeline/PipelinePhase; +HSPLio/ktor/client/statement/HttpResponsePipeline$Phases;->getTransform()Lio/ktor/util/pipeline/PipelinePhase; +Lio/ktor/events/EventDefinition; +HSPLio/ktor/events/EventDefinition;->()V +Lio/ktor/events/Events; +HSPLio/ktor/events/Events;->()V +Lio/ktor/http/ContentType; +HSPLio/ktor/http/ContentType;->()V +HSPLio/ktor/http/ContentType;->(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;)V +HSPLio/ktor/http/ContentType;->(Ljava/lang/String;Ljava/lang/String;Ljava/util/List;)V +HSPLio/ktor/http/ContentType;->(Ljava/lang/String;Ljava/lang/String;Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLio/ktor/http/ContentType;->equals(Ljava/lang/Object;)Z +Lio/ktor/http/ContentType$Application; +HSPLio/ktor/http/ContentType$Application;->()V +HSPLio/ktor/http/ContentType$Application;->()V +HSPLio/ktor/http/ContentType$Application;->getJson()Lio/ktor/http/ContentType; +Lio/ktor/http/ContentType$Companion; +HSPLio/ktor/http/ContentType$Companion;->()V +HSPLio/ktor/http/ContentType$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lio/ktor/http/ContentTypeMatcher; +Lio/ktor/http/HeaderValueWithParameters; +HSPLio/ktor/http/HeaderValueWithParameters;->()V +HSPLio/ktor/http/HeaderValueWithParameters;->(Ljava/lang/String;Ljava/util/List;)V +HSPLio/ktor/http/HeaderValueWithParameters;->getParameters()Ljava/util/List; +Lio/ktor/http/HeaderValueWithParameters$Companion; +HSPLio/ktor/http/HeaderValueWithParameters$Companion;->()V +HSPLio/ktor/http/HeaderValueWithParameters$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lio/ktor/http/HttpMethod; +HSPLio/ktor/http/HttpMethod;->()V +HSPLio/ktor/http/HttpMethod;->(Ljava/lang/String;)V +HSPLio/ktor/http/HttpMethod;->access$getGet$cp()Lio/ktor/http/HttpMethod; +HSPLio/ktor/http/HttpMethod;->access$getHead$cp()Lio/ktor/http/HttpMethod; +HSPLio/ktor/http/HttpMethod;->hashCode()I +Lio/ktor/http/HttpMethod$Companion; +HSPLio/ktor/http/HttpMethod$Companion;->()V +HSPLio/ktor/http/HttpMethod$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLio/ktor/http/HttpMethod$Companion;->getGet()Lio/ktor/http/HttpMethod; +HSPLio/ktor/http/HttpMethod$Companion;->getHead()Lio/ktor/http/HttpMethod; +Lio/ktor/http/HttpStatusCode; +Lio/ktor/http/content/OutgoingContent; +Lio/ktor/serialization/Configuration; +Lio/ktor/serialization/Configuration$DefaultImpls; +HSPLio/ktor/serialization/Configuration$DefaultImpls;->register$default(Lio/ktor/serialization/Configuration;Lio/ktor/http/ContentType;Lio/ktor/serialization/ContentConverter;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V +Lio/ktor/serialization/Configuration$register$1; +HSPLio/ktor/serialization/Configuration$register$1;->()V +HSPLio/ktor/serialization/Configuration$register$1;->()V +HSPLio/ktor/serialization/Configuration$register$1;->invoke(Lio/ktor/serialization/ContentConverter;)V +HSPLio/ktor/serialization/Configuration$register$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lio/ktor/serialization/ContentConverter; +Lio/ktor/serialization/WebsocketContentConverter; +Lio/ktor/serialization/kotlinx/ExtensionsJvmKt; +HSPLio/ktor/serialization/kotlinx/ExtensionsJvmKt;->()V +HSPLio/ktor/serialization/kotlinx/ExtensionsJvmKt;->getProviders()Ljava/util/List; +Lio/ktor/serialization/kotlinx/ExtensionsKt; +HSPLio/ktor/serialization/kotlinx/ExtensionsKt;->extensions(Lkotlinx/serialization/SerialFormat;)Ljava/util/List; +Lio/ktor/serialization/kotlinx/KotlinxSerializationConverter; +HSPLio/ktor/serialization/kotlinx/KotlinxSerializationConverter;->(Lkotlinx/serialization/SerialFormat;)V +Lio/ktor/serialization/kotlinx/KotlinxSerializationExtensionProvider; +Lio/ktor/util/AttributeKey; +HSPLio/ktor/util/AttributeKey;->(Ljava/lang/String;Ljava/lang/String;)V +HSPLio/ktor/util/AttributeKey;->hashCode()I +Lio/ktor/util/Attributes; +Lio/ktor/util/AttributesJvmBase; +HSPLio/ktor/util/AttributesJvmBase;->()V +HSPLio/ktor/util/AttributesJvmBase;->getOrNull(Lio/ktor/util/AttributeKey;)Ljava/lang/Object; +HSPLio/ktor/util/AttributesJvmBase;->put(Lio/ktor/util/AttributeKey;Ljava/lang/Object;)V +Lio/ktor/util/AttributesJvmKt; +HSPLio/ktor/util/AttributesJvmKt;->Attributes(Z)Lio/ktor/util/Attributes; +Lio/ktor/util/CacheKt; +HSPLio/ktor/util/CacheKt;->createLRUCache(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;I)Ljava/util/Map; +Lio/ktor/util/ConcurrentSafeAttributes; +HSPLio/ktor/util/ConcurrentSafeAttributes;->()V +HSPLio/ktor/util/ConcurrentSafeAttributes;->computeIfAbsent(Lio/ktor/util/AttributeKey;Lkotlin/jvm/functions/Function0;)Ljava/lang/Object; +HSPLio/ktor/util/ConcurrentSafeAttributes;->getMap()Ljava/util/Map; +HSPLio/ktor/util/ConcurrentSafeAttributes;->getMap()Ljava/util/concurrent/ConcurrentHashMap; +Lio/ktor/util/CoroutinesUtilsKt; +HSPLio/ktor/util/CoroutinesUtilsKt;->SilentSupervisor$default(Lkotlinx/coroutines/Job;ILjava/lang/Object;)Lkotlin/coroutines/CoroutineContext; +HSPLio/ktor/util/CoroutinesUtilsKt;->SilentSupervisor(Lkotlinx/coroutines/Job;)Lkotlin/coroutines/CoroutineContext; +Lio/ktor/util/CoroutinesUtilsKt$SilentSupervisor$$inlined$CoroutineExceptionHandler$1; +HSPLio/ktor/util/CoroutinesUtilsKt$SilentSupervisor$$inlined$CoroutineExceptionHandler$1;->(Lkotlinx/coroutines/CoroutineExceptionHandler$Key;)V +Lio/ktor/util/LRUCache; +HSPLio/ktor/util/LRUCache;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;I)V +Lio/ktor/util/Platform; +HSPLio/ktor/util/Platform;->$values()[Lio/ktor/util/Platform; +HSPLio/ktor/util/Platform;->()V +HSPLio/ktor/util/Platform;->(Ljava/lang/String;I)V +Lio/ktor/util/PlatformUtils; +HSPLio/ktor/util/PlatformUtils;->()V +HSPLio/ktor/util/PlatformUtils;->()V +HSPLio/ktor/util/PlatformUtils;->getIS_DEVELOPMENT_MODE()Z +Lio/ktor/util/PlatformUtilsJvmKt; +HSPLio/ktor/util/PlatformUtilsJvmKt;->getPlatform(Lio/ktor/util/PlatformUtils;)Lio/ktor/util/Platform; +HSPLio/ktor/util/PlatformUtilsJvmKt;->isDevelopmentMode(Lio/ktor/util/PlatformUtils;)Z +HSPLio/ktor/util/PlatformUtilsJvmKt;->isNewMemoryModel(Lio/ktor/util/PlatformUtils;)Z +Lio/ktor/util/collections/ConcurrentMap; +HSPLio/ktor/util/collections/ConcurrentMap;->(I)V +HSPLio/ktor/util/collections/ConcurrentMap;->(IILkotlin/jvm/internal/DefaultConstructorMarker;)V +Lio/ktor/util/collections/CopyOnWriteHashMap; +HSPLio/ktor/util/collections/CopyOnWriteHashMap;->()V +HSPLio/ktor/util/collections/CopyOnWriteHashMap;->()V +Lio/ktor/util/logging/KtorSimpleLoggerJvmKt; +HSPLio/ktor/util/logging/KtorSimpleLoggerJvmKt;->KtorSimpleLogger(Ljava/lang/String;)Lorg/slf4j/Logger; +Lio/ktor/util/pipeline/PhaseContent; +HSPLio/ktor/util/pipeline/PhaseContent;->()V +HSPLio/ktor/util/pipeline/PhaseContent;->(Lio/ktor/util/pipeline/PipelinePhase;Lio/ktor/util/pipeline/PipelinePhaseRelation;)V +HSPLio/ktor/util/pipeline/PhaseContent;->(Lio/ktor/util/pipeline/PipelinePhase;Lio/ktor/util/pipeline/PipelinePhaseRelation;Ljava/util/List;)V +HSPLio/ktor/util/pipeline/PhaseContent;->addInterceptor(Lkotlin/jvm/functions/Function3;)V +HSPLio/ktor/util/pipeline/PhaseContent;->copiedInterceptors()Ljava/util/List; +HSPLio/ktor/util/pipeline/PhaseContent;->copyInterceptors()V +HSPLio/ktor/util/pipeline/PhaseContent;->getPhase()Lio/ktor/util/pipeline/PipelinePhase; +HSPLio/ktor/util/pipeline/PhaseContent;->getRelation()Lio/ktor/util/pipeline/PipelinePhaseRelation; +Lio/ktor/util/pipeline/PhaseContent$Companion; +HSPLio/ktor/util/pipeline/PhaseContent$Companion;->()V +HSPLio/ktor/util/pipeline/PhaseContent$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lio/ktor/util/pipeline/Pipeline; +HSPLio/ktor/util/pipeline/Pipeline;->([Lio/ktor/util/pipeline/PipelinePhase;)V +HSPLio/ktor/util/pipeline/Pipeline;->afterIntercepted()V +HSPLio/ktor/util/pipeline/Pipeline;->findPhase(Lio/ktor/util/pipeline/PipelinePhase;)Lio/ktor/util/pipeline/PhaseContent; +HSPLio/ktor/util/pipeline/Pipeline;->findPhaseIndex(Lio/ktor/util/pipeline/PipelinePhase;)I +HSPLio/ktor/util/pipeline/Pipeline;->getInterceptors()Ljava/util/List; +HSPLio/ktor/util/pipeline/Pipeline;->hasPhase(Lio/ktor/util/pipeline/PipelinePhase;)Z +HSPLio/ktor/util/pipeline/Pipeline;->insertPhaseAfter(Lio/ktor/util/pipeline/PipelinePhase;Lio/ktor/util/pipeline/PipelinePhase;)V +HSPLio/ktor/util/pipeline/Pipeline;->insertPhaseBefore(Lio/ktor/util/pipeline/PipelinePhase;Lio/ktor/util/pipeline/PipelinePhase;)V +HSPLio/ktor/util/pipeline/Pipeline;->intercept(Lio/ktor/util/pipeline/PipelinePhase;Lkotlin/jvm/functions/Function3;)V +HSPLio/ktor/util/pipeline/Pipeline;->resetInterceptorsList()V +HSPLio/ktor/util/pipeline/Pipeline;->setInterceptors(Ljava/util/List;)V +HSPLio/ktor/util/pipeline/Pipeline;->tryAddToPhaseFastPath(Lio/ktor/util/pipeline/PipelinePhase;Lkotlin/jvm/functions/Function3;)Z +Lio/ktor/util/pipeline/PipelinePhase; +HSPLio/ktor/util/pipeline/PipelinePhase;->(Ljava/lang/String;)V +Lio/ktor/util/pipeline/PipelinePhaseRelation; +HSPLio/ktor/util/pipeline/PipelinePhaseRelation;->()V +HSPLio/ktor/util/pipeline/PipelinePhaseRelation;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lio/ktor/util/pipeline/PipelinePhaseRelation$After; +HSPLio/ktor/util/pipeline/PipelinePhaseRelation$After;->(Lio/ktor/util/pipeline/PipelinePhase;)V +Lio/ktor/util/pipeline/PipelinePhaseRelation$Before; +HSPLio/ktor/util/pipeline/PipelinePhaseRelation$Before;->(Lio/ktor/util/pipeline/PipelinePhase;)V +Lio/ktor/util/pipeline/PipelinePhaseRelation$Last; +HSPLio/ktor/util/pipeline/PipelinePhaseRelation$Last;->()V +HSPLio/ktor/util/pipeline/PipelinePhaseRelation$Last;->()V +Lio/ktor/utils/io/ByteReadChannel; +Lio/ktor/utils/io/charsets/CharsetJVMKt; +HSPLio/ktor/utils/io/charsets/CharsetJVMKt;->()V +HSPLio/ktor/utils/io/charsets/CharsetJVMKt;->getName(Ljava/nio/charset/Charset;)Ljava/lang/String; +Lio/ktor/utils/io/charsets/MalformedInputException; +Lio/ktor/websocket/WebSocketExtensionsConfig; +HSPLio/ktor/websocket/WebSocketExtensionsConfig;->()V +Ljavax/inject/Provider; +Lkotlin/Function; +Lkotlin/KotlinNothingValueException; +Lkotlin/KotlinVersion; +HSPLkotlin/KotlinVersion;->()V +HSPLkotlin/KotlinVersion;->(III)V +HSPLkotlin/KotlinVersion;->toString()Ljava/lang/String; +HSPLkotlin/KotlinVersion;->versionOf(III)I +Lkotlin/KotlinVersion$Companion; +HSPLkotlin/KotlinVersion$Companion;->()V +HSPLkotlin/KotlinVersion$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlin/KotlinVersionCurrentValue; +HSPLkotlin/KotlinVersionCurrentValue;->()V +HSPLkotlin/KotlinVersionCurrentValue;->()V +HSPLkotlin/KotlinVersionCurrentValue;->get()Lkotlin/KotlinVersion; +Lkotlin/Lazy; +Lkotlin/LazyKt; +Lkotlin/LazyKt__LazyJVMKt; +HSPLkotlin/LazyKt__LazyJVMKt;->lazy(Lkotlin/LazyThreadSafetyMode;Lkotlin/jvm/functions/Function0;)Lkotlin/Lazy; +HSPLkotlin/LazyKt__LazyJVMKt;->lazy(Lkotlin/jvm/functions/Function0;)Lkotlin/Lazy; +Lkotlin/LazyKt__LazyJVMKt$WhenMappings; +HSPLkotlin/LazyKt__LazyJVMKt$WhenMappings;->()V +Lkotlin/LazyKt__LazyKt; +Lkotlin/LazyThreadSafetyMode; +HSPLkotlin/LazyThreadSafetyMode;->$values()[Lkotlin/LazyThreadSafetyMode; +HSPLkotlin/LazyThreadSafetyMode;->()V +HSPLkotlin/LazyThreadSafetyMode;->(Ljava/lang/String;I)V +HSPLkotlin/LazyThreadSafetyMode;->values()[Lkotlin/LazyThreadSafetyMode; +Lkotlin/Pair; +HSPLkotlin/Pair;->(Ljava/lang/Object;Ljava/lang/Object;)V +HSPLkotlin/Pair;->component1()Ljava/lang/Object; +HSPLkotlin/Pair;->component2()Ljava/lang/Object; +HSPLkotlin/Pair;->getFirst()Ljava/lang/Object; +HSPLkotlin/Pair;->getSecond()Ljava/lang/Object; +Lkotlin/Result; +HSPLkotlin/Result;->()V +HSPLkotlin/Result;->constructor-impl(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlin/Result;->exceptionOrNull-impl(Ljava/lang/Object;)Ljava/lang/Throwable; +HSPLkotlin/Result;->isFailure-impl(Ljava/lang/Object;)Z +HSPLkotlin/Result;->isSuccess-impl(Ljava/lang/Object;)Z +Lkotlin/Result$Companion; +HSPLkotlin/Result$Companion;->()V +HSPLkotlin/Result$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlin/Result$Failure; +HSPLkotlin/Result$Failure;->(Ljava/lang/Throwable;)V +Lkotlin/ResultKt; +HSPLkotlin/ResultKt;->createFailure(Ljava/lang/Throwable;)Ljava/lang/Object; +HSPLkotlin/ResultKt;->throwOnFailure(Ljava/lang/Object;)V +Lkotlin/SafePublicationLazyImpl; +HSPLkotlin/SafePublicationLazyImpl;->()V +HSPLkotlin/SafePublicationLazyImpl;->(Lkotlin/jvm/functions/Function0;)V +HSPLkotlin/SafePublicationLazyImpl;->getValue()Ljava/lang/Object; +Lkotlin/SafePublicationLazyImpl$Companion; +HSPLkotlin/SafePublicationLazyImpl$Companion;->()V +HSPLkotlin/SafePublicationLazyImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlin/SynchronizedLazyImpl; +HSPLkotlin/SynchronizedLazyImpl;->(Lkotlin/jvm/functions/Function0;Ljava/lang/Object;)V +HSPLkotlin/SynchronizedLazyImpl;->(Lkotlin/jvm/functions/Function0;Ljava/lang/Object;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlin/SynchronizedLazyImpl;->getValue()Ljava/lang/Object; +HSPLkotlin/SynchronizedLazyImpl;->isInitialized()Z +Lkotlin/Triple; +HSPLkotlin/Triple;->(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V +HSPLkotlin/Triple;->component1()Ljava/lang/Object; +HSPLkotlin/Triple;->component2()Ljava/lang/Object; +HSPLkotlin/Triple;->component3()Ljava/lang/Object; +PLkotlin/Triple;->copy$default(Lkotlin/Triple;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;ILjava/lang/Object;)Lkotlin/Triple; +PLkotlin/Triple;->copy(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Triple; +HSPLkotlin/Triple;->getSecond()Ljava/lang/Object; +Lkotlin/TuplesKt; +HSPLkotlin/TuplesKt;->to(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair; +Lkotlin/UByte; +HSPLkotlin/UByte;->()V +Lkotlin/UByte$Companion; +HSPLkotlin/UByte$Companion;->()V +HSPLkotlin/UByte$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlin/UByteArray; +Lkotlin/UInt; +HSPLkotlin/UInt;->()V +Lkotlin/UInt$Companion; +HSPLkotlin/UInt$Companion;->()V +HSPLkotlin/UInt$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlin/UIntArray; +Lkotlin/ULong; +HSPLkotlin/ULong;->()V +HSPLkotlin/ULong;->constructor-impl(J)J +HSPLkotlin/ULong;->equals-impl0(JJ)Z +HSPLkotlin/ULong;->hashCode-impl(J)I +Lkotlin/ULong$Companion; +HSPLkotlin/ULong$Companion;->()V +HSPLkotlin/ULong$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlin/ULongArray; +Lkotlin/UNINITIALIZED_VALUE; +HSPLkotlin/UNINITIALIZED_VALUE;->()V +HSPLkotlin/UNINITIALIZED_VALUE;->()V +Lkotlin/UShort; +HSPLkotlin/UShort;->()V +Lkotlin/UShort$Companion; +HSPLkotlin/UShort$Companion;->()V +HSPLkotlin/UShort$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlin/UShortArray; +Lkotlin/Unit; +HSPLkotlin/Unit;->()V +HSPLkotlin/Unit;->()V +Lkotlin/UnsafeLazyImpl; +HSPLkotlin/UnsafeLazyImpl;->(Lkotlin/jvm/functions/Function0;)V +HSPLkotlin/UnsafeLazyImpl;->getValue()Ljava/lang/Object; +Lkotlin/UnsignedKt; +HSPLkotlin/UnsignedKt;->ulongToDouble(J)D +Lkotlin/collections/AbstractCollection; +HSPLkotlin/collections/AbstractCollection;->()V +HSPLkotlin/collections/AbstractCollection;->isEmpty()Z +HSPLkotlin/collections/AbstractCollection;->size()I +HSPLkotlin/collections/AbstractCollection;->toArray()[Ljava/lang/Object; +Lkotlin/collections/AbstractList; +HSPLkotlin/collections/AbstractList;->()V +HSPLkotlin/collections/AbstractList;->()V +HSPLkotlin/collections/AbstractList;->equals(Ljava/lang/Object;)Z +HSPLkotlin/collections/AbstractList;->hashCode()I +HSPLkotlin/collections/AbstractList;->iterator()Ljava/util/Iterator; +HSPLkotlin/collections/AbstractList;->listIterator(I)Ljava/util/ListIterator; +Lkotlin/collections/AbstractList$Companion; +HSPLkotlin/collections/AbstractList$Companion;->()V +HSPLkotlin/collections/AbstractList$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlin/collections/AbstractList$Companion;->checkElementIndex$kotlin_stdlib(II)V +HSPLkotlin/collections/AbstractList$Companion;->checkPositionIndex$kotlin_stdlib(II)V +HSPLkotlin/collections/AbstractList$Companion;->newCapacity$kotlin_stdlib(II)I +HSPLkotlin/collections/AbstractList$Companion;->orderedEquals$kotlin_stdlib(Ljava/util/Collection;Ljava/util/Collection;)Z +HSPLkotlin/collections/AbstractList$Companion;->orderedHashCode$kotlin_stdlib(Ljava/util/Collection;)I +Lkotlin/collections/AbstractList$IteratorImpl; +HSPLkotlin/collections/AbstractList$IteratorImpl;->(Lkotlin/collections/AbstractList;)V +HSPLkotlin/collections/AbstractList$IteratorImpl;->getIndex()I +HSPLkotlin/collections/AbstractList$IteratorImpl;->hasNext()Z +HSPLkotlin/collections/AbstractList$IteratorImpl;->next()Ljava/lang/Object; +HSPLkotlin/collections/AbstractList$IteratorImpl;->setIndex(I)V +Lkotlin/collections/AbstractList$ListIteratorImpl; +HSPLkotlin/collections/AbstractList$ListIteratorImpl;->(Lkotlin/collections/AbstractList;I)V +HSPLkotlin/collections/AbstractList$ListIteratorImpl;->hasPrevious()Z +HSPLkotlin/collections/AbstractList$ListIteratorImpl;->nextIndex()I +HSPLkotlin/collections/AbstractList$ListIteratorImpl;->previous()Ljava/lang/Object; +Lkotlin/collections/AbstractMap; +HSPLkotlin/collections/AbstractMap;->()V +HSPLkotlin/collections/AbstractMap;->()V +HSPLkotlin/collections/AbstractMap;->containsEntry$kotlin_stdlib(Ljava/util/Map$Entry;)Z +HSPLkotlin/collections/AbstractMap;->entrySet()Ljava/util/Set; +HSPLkotlin/collections/AbstractMap;->equals(Ljava/lang/Object;)Z +HSPLkotlin/collections/AbstractMap;->isEmpty()Z +HSPLkotlin/collections/AbstractMap;->size()I +HSPLkotlin/collections/AbstractMap;->values()Ljava/util/Collection; +Lkotlin/collections/AbstractMap$Companion; +HSPLkotlin/collections/AbstractMap$Companion;->()V +HSPLkotlin/collections/AbstractMap$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlin/collections/AbstractMutableList; +HSPLkotlin/collections/AbstractMutableList;->()V +HSPLkotlin/collections/AbstractMutableList;->size()I +Lkotlin/collections/AbstractMutableMap; +HSPLkotlin/collections/AbstractMutableMap;->()V +HSPLkotlin/collections/AbstractMutableMap;->size()I +Lkotlin/collections/AbstractMutableSet; +HSPLkotlin/collections/AbstractMutableSet;->()V +HSPLkotlin/collections/AbstractMutableSet;->size()I +Lkotlin/collections/AbstractSet; +HSPLkotlin/collections/AbstractSet;->()V +HSPLkotlin/collections/AbstractSet;->()V +HSPLkotlin/collections/AbstractSet;->equals(Ljava/lang/Object;)Z +Lkotlin/collections/AbstractSet$Companion; +HSPLkotlin/collections/AbstractSet$Companion;->()V +HSPLkotlin/collections/AbstractSet$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlin/collections/AbstractSet$Companion;->setEquals$kotlin_stdlib(Ljava/util/Set;Ljava/util/Set;)Z +Lkotlin/collections/ArrayAsCollection; +HSPLkotlin/collections/ArrayAsCollection;->([Ljava/lang/Object;Z)V +HSPLkotlin/collections/ArrayAsCollection;->toArray()[Ljava/lang/Object; +Lkotlin/collections/ArrayDeque; +HSPLkotlin/collections/ArrayDeque;->()V +HSPLkotlin/collections/ArrayDeque;->()V +HSPLkotlin/collections/ArrayDeque;->add(Ljava/lang/Object;)Z +HSPLkotlin/collections/ArrayDeque;->addLast(Ljava/lang/Object;)V +HSPLkotlin/collections/ArrayDeque;->copyElements(I)V +HSPLkotlin/collections/ArrayDeque;->ensureCapacity(I)V +HSPLkotlin/collections/ArrayDeque;->first()Ljava/lang/Object; +HSPLkotlin/collections/ArrayDeque;->get(I)Ljava/lang/Object; +HSPLkotlin/collections/ArrayDeque;->getSize()I +HSPLkotlin/collections/ArrayDeque;->incremented(I)I +HSPLkotlin/collections/ArrayDeque;->isEmpty()Z +HSPLkotlin/collections/ArrayDeque;->positiveMod(I)I +HSPLkotlin/collections/ArrayDeque;->removeFirst()Ljava/lang/Object; +HSPLkotlin/collections/ArrayDeque;->removeFirstOrNull()Ljava/lang/Object; +HSPLkotlin/collections/ArrayDeque;->removeLast()Ljava/lang/Object; +HSPLkotlin/collections/ArrayDeque;->removeLastOrNull()Ljava/lang/Object; +Lkotlin/collections/ArrayDeque$Companion; +HSPLkotlin/collections/ArrayDeque$Companion;->()V +HSPLkotlin/collections/ArrayDeque$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlin/collections/ArraysKt; +Lkotlin/collections/ArraysKt__ArraysJVMKt; +Lkotlin/collections/ArraysKt__ArraysKt; +Lkotlin/collections/ArraysKt___ArraysJvmKt; +HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->asList([Ljava/lang/Object;)Ljava/util/List; +HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto$default([F[FIIIILjava/lang/Object;)[F +HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto$default([I[IIIIILjava/lang/Object;)[I +HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto$default([Ljava/lang/Object;[Ljava/lang/Object;IIIILjava/lang/Object;)[Ljava/lang/Object; +HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto([B[BIII)[B +HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto([C[CIII)[C +HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto([F[FIII)[F +HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto([I[IIII)[I +HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto([Ljava/lang/Object;[Ljava/lang/Object;III)[Ljava/lang/Object; +HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->fill$default([IIIIILjava/lang/Object;)V +HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->fill$default([Ljava/lang/Object;Ljava/lang/Object;IIILjava/lang/Object;)V +HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->fill([IIII)V +HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->fill([Ljava/lang/Object;Ljava/lang/Object;II)V +HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->sortWith([Ljava/lang/Object;Ljava/util/Comparator;II)V +Lkotlin/collections/ArraysKt___ArraysKt; +HSPLkotlin/collections/ArraysKt___ArraysKt;->asIterable([Ljava/lang/Object;)Ljava/lang/Iterable; +HSPLkotlin/collections/ArraysKt___ArraysKt;->asSequence([Ljava/lang/Object;)Lkotlin/sequences/Sequence; +HSPLkotlin/collections/ArraysKt___ArraysKt;->filterNotNull([Ljava/lang/Object;)Ljava/util/List; +HSPLkotlin/collections/ArraysKt___ArraysKt;->filterNotNullTo([Ljava/lang/Object;Ljava/util/Collection;)Ljava/util/Collection; +HSPLkotlin/collections/ArraysKt___ArraysKt;->getIndices([I)Lkotlin/ranges/IntRange; +HSPLkotlin/collections/ArraysKt___ArraysKt;->getIndices([Ljava/lang/Object;)Lkotlin/ranges/IntRange; +HSPLkotlin/collections/ArraysKt___ArraysKt;->getLastIndex([I)I +HSPLkotlin/collections/ArraysKt___ArraysKt;->getLastIndex([Ljava/lang/Object;)I +HSPLkotlin/collections/ArraysKt___ArraysKt;->getOrNull([Ljava/lang/Object;I)Ljava/lang/Object; +HSPLkotlin/collections/ArraysKt___ArraysKt;->indexOf([Ljava/lang/Object;Ljava/lang/Object;)I +HSPLkotlin/collections/ArraysKt___ArraysKt;->toCollection([Ljava/lang/Object;Ljava/util/Collection;)Ljava/util/Collection; +HSPLkotlin/collections/ArraysKt___ArraysKt;->toList([Ljava/lang/Object;)Ljava/util/List; +HSPLkotlin/collections/ArraysKt___ArraysKt;->toMutableList([Ljava/lang/Object;)Ljava/util/List; +HSPLkotlin/collections/ArraysKt___ArraysKt;->toSet([Ljava/lang/Object;)Ljava/util/Set; +HSPLkotlin/collections/ArraysKt___ArraysKt;->withIndex([Ljava/lang/Object;)Ljava/lang/Iterable; +HSPLkotlin/collections/ArraysKt___ArraysKt;->zip([Ljava/lang/Object;[Ljava/lang/Object;)Ljava/util/List; +Lkotlin/collections/ArraysKt___ArraysKt$asIterable$$inlined$Iterable$1; +HSPLkotlin/collections/ArraysKt___ArraysKt$asIterable$$inlined$Iterable$1;->([Ljava/lang/Object;)V +Lkotlin/collections/ArraysKt___ArraysKt$withIndex$1; +HSPLkotlin/collections/ArraysKt___ArraysKt$withIndex$1;->([Ljava/lang/Object;)V +HSPLkotlin/collections/ArraysKt___ArraysKt$withIndex$1;->invoke()Ljava/lang/Object; +HSPLkotlin/collections/ArraysKt___ArraysKt$withIndex$1;->invoke()Ljava/util/Iterator; +Lkotlin/collections/ArraysUtilJVM; +HSPLkotlin/collections/ArraysUtilJVM;->asList([Ljava/lang/Object;)Ljava/util/List; +Lkotlin/collections/CollectionsKt; +Lkotlin/collections/CollectionsKt__CollectionsJVMKt; +HSPLkotlin/collections/CollectionsKt__CollectionsJVMKt;->build(Ljava/util/List;)Ljava/util/List; +HSPLkotlin/collections/CollectionsKt__CollectionsJVMKt;->copyToArrayOfAny([Ljava/lang/Object;Z)[Ljava/lang/Object; +HSPLkotlin/collections/CollectionsKt__CollectionsJVMKt;->createListBuilder()Ljava/util/List; +HSPLkotlin/collections/CollectionsKt__CollectionsJVMKt;->listOf(Ljava/lang/Object;)Ljava/util/List; +HSPLkotlin/collections/CollectionsKt__CollectionsJVMKt;->terminateCollectionToArray(I[Ljava/lang/Object;)[Ljava/lang/Object; +Lkotlin/collections/CollectionsKt__CollectionsKt; +HSPLkotlin/collections/CollectionsKt__CollectionsKt;->asCollection([Ljava/lang/Object;)Ljava/util/Collection; +HSPLkotlin/collections/CollectionsKt__CollectionsKt;->binarySearch$default(Ljava/util/List;Ljava/lang/Comparable;IIILjava/lang/Object;)I +HSPLkotlin/collections/CollectionsKt__CollectionsKt;->binarySearch(Ljava/util/List;Ljava/lang/Comparable;II)I +HSPLkotlin/collections/CollectionsKt__CollectionsKt;->emptyList()Ljava/util/List; +HSPLkotlin/collections/CollectionsKt__CollectionsKt;->getLastIndex(Ljava/util/List;)I +HSPLkotlin/collections/CollectionsKt__CollectionsKt;->listOf([Ljava/lang/Object;)Ljava/util/List; +HSPLkotlin/collections/CollectionsKt__CollectionsKt;->listOfNotNull([Ljava/lang/Object;)Ljava/util/List; +HSPLkotlin/collections/CollectionsKt__CollectionsKt;->mutableListOf([Ljava/lang/Object;)Ljava/util/List; +PLkotlin/collections/CollectionsKt__CollectionsKt;->optimizeReadOnlyList(Ljava/util/List;)Ljava/util/List; +HSPLkotlin/collections/CollectionsKt__CollectionsKt;->rangeCheck$CollectionsKt__CollectionsKt(III)V +Lkotlin/collections/CollectionsKt__IterablesKt; +HSPLkotlin/collections/CollectionsKt__IterablesKt;->collectionSizeOrDefault(Ljava/lang/Iterable;I)I +HSPLkotlin/collections/CollectionsKt__IterablesKt;->collectionSizeOrNull(Ljava/lang/Iterable;)Ljava/lang/Integer; +Lkotlin/collections/CollectionsKt__IteratorsJVMKt; +Lkotlin/collections/CollectionsKt__IteratorsKt; +Lkotlin/collections/CollectionsKt__MutableCollectionsJVMKt; +HSPLkotlin/collections/CollectionsKt__MutableCollectionsJVMKt;->sort(Ljava/util/List;)V +HSPLkotlin/collections/CollectionsKt__MutableCollectionsJVMKt;->sortWith(Ljava/util/List;Ljava/util/Comparator;)V +Lkotlin/collections/CollectionsKt__MutableCollectionsKt; +HSPLkotlin/collections/CollectionsKt__MutableCollectionsKt;->addAll(Ljava/util/Collection;Ljava/lang/Iterable;)Z +HSPLkotlin/collections/CollectionsKt__MutableCollectionsKt;->addAll(Ljava/util/Collection;Lkotlin/sequences/Sequence;)Z +HSPLkotlin/collections/CollectionsKt__MutableCollectionsKt;->filterInPlace$CollectionsKt__MutableCollectionsKt(Ljava/lang/Iterable;Lkotlin/jvm/functions/Function1;Z)Z +HSPLkotlin/collections/CollectionsKt__MutableCollectionsKt;->filterInPlace$CollectionsKt__MutableCollectionsKt(Ljava/util/List;Lkotlin/jvm/functions/Function1;Z)Z +HSPLkotlin/collections/CollectionsKt__MutableCollectionsKt;->removeAll(Ljava/util/List;Lkotlin/jvm/functions/Function1;)Z +HSPLkotlin/collections/CollectionsKt__MutableCollectionsKt;->removeFirstOrNull(Ljava/util/List;)Ljava/lang/Object; +HSPLkotlin/collections/CollectionsKt__MutableCollectionsKt;->removeLast(Ljava/util/List;)Ljava/lang/Object; +Lkotlin/collections/CollectionsKt__ReversedViewsKt; +Lkotlin/collections/CollectionsKt___CollectionsJvmKt; +Lkotlin/collections/CollectionsKt___CollectionsKt; +HSPLkotlin/collections/CollectionsKt___CollectionsKt;->asSequence(Ljava/lang/Iterable;)Lkotlin/sequences/Sequence; +HSPLkotlin/collections/CollectionsKt___CollectionsKt;->filterNotNull(Ljava/lang/Iterable;)Ljava/util/List; +HSPLkotlin/collections/CollectionsKt___CollectionsKt;->filterNotNullTo(Ljava/lang/Iterable;Ljava/util/Collection;)Ljava/util/Collection; +HSPLkotlin/collections/CollectionsKt___CollectionsKt;->first(Ljava/util/List;)Ljava/lang/Object; +HSPLkotlin/collections/CollectionsKt___CollectionsKt;->firstOrNull(Ljava/lang/Iterable;)Ljava/lang/Object; +HSPLkotlin/collections/CollectionsKt___CollectionsKt;->firstOrNull(Ljava/util/List;)Ljava/lang/Object; +HSPLkotlin/collections/CollectionsKt___CollectionsKt;->getOrNull(Ljava/util/List;I)Ljava/lang/Object; +HSPLkotlin/collections/CollectionsKt___CollectionsKt;->joinTo(Ljava/lang/Iterable;Ljava/lang/Appendable;Ljava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/CharSequence;ILjava/lang/CharSequence;Lkotlin/jvm/functions/Function1;)Ljava/lang/Appendable; +HSPLkotlin/collections/CollectionsKt___CollectionsKt;->joinToString$default(Ljava/lang/Iterable;Ljava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/CharSequence;ILjava/lang/CharSequence;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ljava/lang/String; +HSPLkotlin/collections/CollectionsKt___CollectionsKt;->joinToString(Ljava/lang/Iterable;Ljava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/CharSequence;ILjava/lang/CharSequence;Lkotlin/jvm/functions/Function1;)Ljava/lang/String; +HSPLkotlin/collections/CollectionsKt___CollectionsKt;->last(Ljava/util/List;)Ljava/lang/Object; +HSPLkotlin/collections/CollectionsKt___CollectionsKt;->lastOrNull(Ljava/util/List;)Ljava/lang/Object; +HSPLkotlin/collections/CollectionsKt___CollectionsKt;->plus(Ljava/util/Collection;Ljava/lang/Iterable;)Ljava/util/List; +HSPLkotlin/collections/CollectionsKt___CollectionsKt;->plus(Ljava/util/Collection;Ljava/lang/Object;)Ljava/util/List; +HSPLkotlin/collections/CollectionsKt___CollectionsKt;->reversed(Ljava/lang/Iterable;)Ljava/util/List; +HSPLkotlin/collections/CollectionsKt___CollectionsKt;->singleOrNull(Ljava/util/List;)Ljava/lang/Object; +HSPLkotlin/collections/CollectionsKt___CollectionsKt;->sorted(Ljava/lang/Iterable;)Ljava/util/List; +HSPLkotlin/collections/CollectionsKt___CollectionsKt;->sortedWith(Ljava/lang/Iterable;Ljava/util/Comparator;)Ljava/util/List; +HSPLkotlin/collections/CollectionsKt___CollectionsKt;->toBooleanArray(Ljava/util/Collection;)[Z +HSPLkotlin/collections/CollectionsKt___CollectionsKt;->toCollection(Ljava/lang/Iterable;Ljava/util/Collection;)Ljava/util/Collection; +HSPLkotlin/collections/CollectionsKt___CollectionsKt;->toFloatArray(Ljava/util/Collection;)[F +HSPLkotlin/collections/CollectionsKt___CollectionsKt;->toHashSet(Ljava/lang/Iterable;)Ljava/util/HashSet; +HSPLkotlin/collections/CollectionsKt___CollectionsKt;->toIntArray(Ljava/util/Collection;)[I +HSPLkotlin/collections/CollectionsKt___CollectionsKt;->toList(Ljava/lang/Iterable;)Ljava/util/List; +PLkotlin/collections/CollectionsKt___CollectionsKt;->toMutableList(Ljava/lang/Iterable;)Ljava/util/List; +HSPLkotlin/collections/CollectionsKt___CollectionsKt;->toMutableList(Ljava/util/Collection;)Ljava/util/List; +HSPLkotlin/collections/CollectionsKt___CollectionsKt;->toMutableSet(Ljava/lang/Iterable;)Ljava/util/Set; +HSPLkotlin/collections/CollectionsKt___CollectionsKt;->toSet(Ljava/lang/Iterable;)Ljava/util/Set; +HSPLkotlin/collections/CollectionsKt___CollectionsKt;->windowed(Ljava/lang/Iterable;IIZ)Ljava/util/List; +Lkotlin/collections/CollectionsKt___CollectionsKt$asSequence$$inlined$Sequence$1; +HSPLkotlin/collections/CollectionsKt___CollectionsKt$asSequence$$inlined$Sequence$1;->(Ljava/lang/Iterable;)V +HSPLkotlin/collections/CollectionsKt___CollectionsKt$asSequence$$inlined$Sequence$1;->iterator()Ljava/util/Iterator; +Lkotlin/collections/EmptyIterator; +HSPLkotlin/collections/EmptyIterator;->()V +HSPLkotlin/collections/EmptyIterator;->()V +HSPLkotlin/collections/EmptyIterator;->hasNext()Z +Lkotlin/collections/EmptyList; +HSPLkotlin/collections/EmptyList;->()V +HSPLkotlin/collections/EmptyList;->()V +PLkotlin/collections/EmptyList;->contains(Ljava/lang/Object;)Z +HSPLkotlin/collections/EmptyList;->equals(Ljava/lang/Object;)Z +HSPLkotlin/collections/EmptyList;->getSize()I +HSPLkotlin/collections/EmptyList;->hashCode()I +HSPLkotlin/collections/EmptyList;->isEmpty()Z +HSPLkotlin/collections/EmptyList;->iterator()Ljava/util/Iterator; +HSPLkotlin/collections/EmptyList;->size()I +HSPLkotlin/collections/EmptyList;->toArray()[Ljava/lang/Object; +Lkotlin/collections/EmptyMap; +HSPLkotlin/collections/EmptyMap;->()V +HSPLkotlin/collections/EmptyMap;->()V +PLkotlin/collections/EmptyMap;->containsKey(Ljava/lang/Object;)Z +HSPLkotlin/collections/EmptyMap;->entrySet()Ljava/util/Set; +HSPLkotlin/collections/EmptyMap;->get(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlin/collections/EmptyMap;->get(Ljava/lang/Object;)Ljava/lang/Void; +HSPLkotlin/collections/EmptyMap;->getEntries()Ljava/util/Set; +HSPLkotlin/collections/EmptyMap;->getSize()I +HSPLkotlin/collections/EmptyMap;->isEmpty()Z +HSPLkotlin/collections/EmptyMap;->size()I +Lkotlin/collections/EmptySet; +HSPLkotlin/collections/EmptySet;->()V +HSPLkotlin/collections/EmptySet;->()V +HSPLkotlin/collections/EmptySet;->contains(Ljava/lang/Object;)Z +HSPLkotlin/collections/EmptySet;->getSize()I +HSPLkotlin/collections/EmptySet;->isEmpty()Z +HSPLkotlin/collections/EmptySet;->iterator()Ljava/util/Iterator; +HSPLkotlin/collections/EmptySet;->size()I +Lkotlin/collections/Grouping; +Lkotlin/collections/IndexedValue; +HSPLkotlin/collections/IndexedValue;->(ILjava/lang/Object;)V +HSPLkotlin/collections/IndexedValue;->getIndex()I +HSPLkotlin/collections/IndexedValue;->getValue()Ljava/lang/Object; +Lkotlin/collections/IndexingIterable; +HSPLkotlin/collections/IndexingIterable;->(Lkotlin/jvm/functions/Function0;)V +HSPLkotlin/collections/IndexingIterable;->iterator()Ljava/util/Iterator; +Lkotlin/collections/IndexingIterator; +HSPLkotlin/collections/IndexingIterator;->(Ljava/util/Iterator;)V +HSPLkotlin/collections/IndexingIterator;->hasNext()Z +HSPLkotlin/collections/IndexingIterator;->next()Ljava/lang/Object; +HSPLkotlin/collections/IndexingIterator;->next()Lkotlin/collections/IndexedValue; +Lkotlin/collections/IntIterator; +HSPLkotlin/collections/IntIterator;->()V +Lkotlin/collections/MapWithDefault; +Lkotlin/collections/MapsKt; +Lkotlin/collections/MapsKt__MapWithDefaultKt; +HSPLkotlin/collections/MapsKt__MapWithDefaultKt;->getOrImplicitDefaultNullable(Ljava/util/Map;Ljava/lang/Object;)Ljava/lang/Object; +Lkotlin/collections/MapsKt__MapsJVMKt; +HSPLkotlin/collections/MapsKt__MapsJVMKt;->mapCapacity(I)I +PLkotlin/collections/MapsKt__MapsJVMKt;->mapOf(Lkotlin/Pair;)Ljava/util/Map; +Lkotlin/collections/MapsKt__MapsKt; +HSPLkotlin/collections/MapsKt__MapsKt;->emptyMap()Ljava/util/Map; +HSPLkotlin/collections/MapsKt__MapsKt;->getValue(Ljava/util/Map;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlin/collections/MapsKt__MapsKt;->hashMapOf([Lkotlin/Pair;)Ljava/util/HashMap; +HSPLkotlin/collections/MapsKt__MapsKt;->mapOf([Lkotlin/Pair;)Ljava/util/Map; +HSPLkotlin/collections/MapsKt__MapsKt;->putAll(Ljava/util/Map;Ljava/lang/Iterable;)V +HSPLkotlin/collections/MapsKt__MapsKt;->putAll(Ljava/util/Map;[Lkotlin/Pair;)V +HSPLkotlin/collections/MapsKt__MapsKt;->toMap(Ljava/lang/Iterable;)Ljava/util/Map; +HSPLkotlin/collections/MapsKt__MapsKt;->toMap(Ljava/lang/Iterable;Ljava/util/Map;)Ljava/util/Map; +HSPLkotlin/collections/MapsKt__MapsKt;->toMap(Ljava/util/Map;)Ljava/util/Map; +HSPLkotlin/collections/MapsKt__MapsKt;->toMap([Lkotlin/Pair;Ljava/util/Map;)Ljava/util/Map; +HSPLkotlin/collections/MapsKt__MapsKt;->toMutableMap(Ljava/util/Map;)Ljava/util/Map; +Lkotlin/collections/MapsKt___MapsJvmKt; +Lkotlin/collections/MapsKt___MapsKt; +HSPLkotlin/collections/MapsKt___MapsKt;->asSequence(Ljava/util/Map;)Lkotlin/sequences/Sequence; +HSPLkotlin/collections/MapsKt___MapsKt;->toList(Ljava/util/Map;)Ljava/util/List; +Lkotlin/collections/SetsKt; +Lkotlin/collections/SetsKt__SetsJVMKt; +HSPLkotlin/collections/SetsKt__SetsJVMKt;->build(Ljava/util/Set;)Ljava/util/Set; +HSPLkotlin/collections/SetsKt__SetsJVMKt;->createSetBuilder()Ljava/util/Set; +HSPLkotlin/collections/SetsKt__SetsJVMKt;->setOf(Ljava/lang/Object;)Ljava/util/Set; +Lkotlin/collections/SetsKt__SetsKt; +HSPLkotlin/collections/SetsKt__SetsKt;->emptySet()Ljava/util/Set; +HSPLkotlin/collections/SetsKt__SetsKt;->mutableSetOf([Ljava/lang/Object;)Ljava/util/Set; +HSPLkotlin/collections/SetsKt__SetsKt;->setOf([Ljava/lang/Object;)Ljava/util/Set; +Lkotlin/collections/SetsKt___SetsKt; +HSPLkotlin/collections/SetsKt___SetsKt;->plus(Ljava/util/Set;Ljava/lang/Iterable;)Ljava/util/Set; +HSPLkotlin/collections/SetsKt___SetsKt;->plus(Ljava/util/Set;Ljava/lang/Object;)Ljava/util/Set; +Lkotlin/collections/SlidingWindowKt; +HSPLkotlin/collections/SlidingWindowKt;->checkWindowSizeStep(II)V +Lkotlin/collections/builders/ListBuilder; +HSPLkotlin/collections/builders/ListBuilder;->()V +PLkotlin/collections/builders/ListBuilder;->()V +HSPLkotlin/collections/builders/ListBuilder;->(I)V +HSPLkotlin/collections/builders/ListBuilder;->([Ljava/lang/Object;IIZLkotlin/collections/builders/ListBuilder;Lkotlin/collections/builders/ListBuilder;)V +HSPLkotlin/collections/builders/ListBuilder;->add(Ljava/lang/Object;)Z +HSPLkotlin/collections/builders/ListBuilder;->addAtInternal(ILjava/lang/Object;)V +PLkotlin/collections/builders/ListBuilder;->build()Ljava/util/List; +HSPLkotlin/collections/builders/ListBuilder;->checkForComodification()V +HSPLkotlin/collections/builders/ListBuilder;->checkIsMutable()V +HSPLkotlin/collections/builders/ListBuilder;->ensureCapacityInternal(I)V +HSPLkotlin/collections/builders/ListBuilder;->ensureExtraCapacity(I)V +HSPLkotlin/collections/builders/ListBuilder;->insertAtInternal(II)V +HSPLkotlin/collections/builders/ListBuilder;->isEffectivelyReadOnly()Z +HSPLkotlin/collections/builders/ListBuilder;->registerModification()V +HPLkotlin/collections/builders/ListBuilder;->toArray([Ljava/lang/Object;)[Ljava/lang/Object; +Lkotlin/collections/builders/ListBuilder$Companion; +HSPLkotlin/collections/builders/ListBuilder$Companion;->()V +HSPLkotlin/collections/builders/ListBuilder$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlin/collections/builders/ListBuilderKt; +HSPLkotlin/collections/builders/ListBuilderKt;->arrayOfUninitializedElements(I)[Ljava/lang/Object; +Lkotlin/collections/builders/MapBuilder; +HSPLkotlin/collections/builders/MapBuilder;->()V +HSPLkotlin/collections/builders/MapBuilder;->()V +HSPLkotlin/collections/builders/MapBuilder;->(I)V +HSPLkotlin/collections/builders/MapBuilder;->([Ljava/lang/Object;[Ljava/lang/Object;[I[III)V +HSPLkotlin/collections/builders/MapBuilder;->access$getEmpty$cp()Lkotlin/collections/builders/MapBuilder; +HSPLkotlin/collections/builders/MapBuilder;->access$getKeysArray$p(Lkotlin/collections/builders/MapBuilder;)[Ljava/lang/Object; +HSPLkotlin/collections/builders/MapBuilder;->access$getLength$p(Lkotlin/collections/builders/MapBuilder;)I +HSPLkotlin/collections/builders/MapBuilder;->access$getModCount$p(Lkotlin/collections/builders/MapBuilder;)I +HSPLkotlin/collections/builders/MapBuilder;->access$getPresenceArray$p(Lkotlin/collections/builders/MapBuilder;)[I +HSPLkotlin/collections/builders/MapBuilder;->addKey$kotlin_stdlib(Ljava/lang/Object;)I +HSPLkotlin/collections/builders/MapBuilder;->build()Ljava/util/Map; +HSPLkotlin/collections/builders/MapBuilder;->checkIsMutable$kotlin_stdlib()V +HSPLkotlin/collections/builders/MapBuilder;->getCapacity$kotlin_stdlib()I +HSPLkotlin/collections/builders/MapBuilder;->getHashSize()I +HSPLkotlin/collections/builders/MapBuilder;->getSize()I +HSPLkotlin/collections/builders/MapBuilder;->hash(Ljava/lang/Object;)I +HSPLkotlin/collections/builders/MapBuilder;->isEmpty()Z +HSPLkotlin/collections/builders/MapBuilder;->keysIterator$kotlin_stdlib()Lkotlin/collections/builders/MapBuilder$KeysItr; +HSPLkotlin/collections/builders/MapBuilder;->registerModification()V +HSPLkotlin/collections/builders/MapBuilder;->size()I +Lkotlin/collections/builders/MapBuilder$Companion; +HSPLkotlin/collections/builders/MapBuilder$Companion;->()V +HSPLkotlin/collections/builders/MapBuilder$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlin/collections/builders/MapBuilder$Companion;->access$computeHashSize(Lkotlin/collections/builders/MapBuilder$Companion;I)I +HSPLkotlin/collections/builders/MapBuilder$Companion;->access$computeShift(Lkotlin/collections/builders/MapBuilder$Companion;I)I +HSPLkotlin/collections/builders/MapBuilder$Companion;->computeHashSize(I)I +HSPLkotlin/collections/builders/MapBuilder$Companion;->computeShift(I)I +HSPLkotlin/collections/builders/MapBuilder$Companion;->getEmpty$kotlin_stdlib()Lkotlin/collections/builders/MapBuilder; +Lkotlin/collections/builders/MapBuilder$Itr; +HSPLkotlin/collections/builders/MapBuilder$Itr;->(Lkotlin/collections/builders/MapBuilder;)V +HSPLkotlin/collections/builders/MapBuilder$Itr;->checkForComodification$kotlin_stdlib()V +HSPLkotlin/collections/builders/MapBuilder$Itr;->getIndex$kotlin_stdlib()I +HSPLkotlin/collections/builders/MapBuilder$Itr;->getLastIndex$kotlin_stdlib()I +HSPLkotlin/collections/builders/MapBuilder$Itr;->getMap$kotlin_stdlib()Lkotlin/collections/builders/MapBuilder; +HSPLkotlin/collections/builders/MapBuilder$Itr;->hasNext()Z +HSPLkotlin/collections/builders/MapBuilder$Itr;->initNext$kotlin_stdlib()V +HSPLkotlin/collections/builders/MapBuilder$Itr;->setIndex$kotlin_stdlib(I)V +HSPLkotlin/collections/builders/MapBuilder$Itr;->setLastIndex$kotlin_stdlib(I)V +Lkotlin/collections/builders/MapBuilder$KeysItr; +HSPLkotlin/collections/builders/MapBuilder$KeysItr;->(Lkotlin/collections/builders/MapBuilder;)V +HSPLkotlin/collections/builders/MapBuilder$KeysItr;->next()Ljava/lang/Object; +Lkotlin/collections/builders/SetBuilder; +HSPLkotlin/collections/builders/SetBuilder;->()V +HSPLkotlin/collections/builders/SetBuilder;->()V +HSPLkotlin/collections/builders/SetBuilder;->(Lkotlin/collections/builders/MapBuilder;)V +HSPLkotlin/collections/builders/SetBuilder;->add(Ljava/lang/Object;)Z +HSPLkotlin/collections/builders/SetBuilder;->build()Ljava/util/Set; +HSPLkotlin/collections/builders/SetBuilder;->getSize()I +HSPLkotlin/collections/builders/SetBuilder;->isEmpty()Z +HSPLkotlin/collections/builders/SetBuilder;->iterator()Ljava/util/Iterator; +Lkotlin/collections/builders/SetBuilder$Companion; +HSPLkotlin/collections/builders/SetBuilder$Companion;->()V +HSPLkotlin/collections/builders/SetBuilder$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlin/comparisons/ComparisonsKt; +Lkotlin/comparisons/ComparisonsKt__ComparisonsKt; +HSPLkotlin/comparisons/ComparisonsKt__ComparisonsKt;->$r8$lambda$nq8UCGW90ISdL04-oV8sJ24EEKI([Lkotlin/jvm/functions/Function1;Ljava/lang/Object;Ljava/lang/Object;)I +HSPLkotlin/comparisons/ComparisonsKt__ComparisonsKt;->compareBy$lambda$0$ComparisonsKt__ComparisonsKt([Lkotlin/jvm/functions/Function1;Ljava/lang/Object;Ljava/lang/Object;)I +HSPLkotlin/comparisons/ComparisonsKt__ComparisonsKt;->compareBy([Lkotlin/jvm/functions/Function1;)Ljava/util/Comparator; +HSPLkotlin/comparisons/ComparisonsKt__ComparisonsKt;->compareValues(Ljava/lang/Comparable;Ljava/lang/Comparable;)I +HSPLkotlin/comparisons/ComparisonsKt__ComparisonsKt;->compareValuesByImpl$ComparisonsKt__ComparisonsKt(Ljava/lang/Object;Ljava/lang/Object;[Lkotlin/jvm/functions/Function1;)I +Lkotlin/comparisons/ComparisonsKt__ComparisonsKt$$ExternalSyntheticLambda1; +HSPLkotlin/comparisons/ComparisonsKt__ComparisonsKt$$ExternalSyntheticLambda1;->([Lkotlin/jvm/functions/Function1;)V +HSPLkotlin/comparisons/ComparisonsKt__ComparisonsKt$$ExternalSyntheticLambda1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I +Lkotlin/comparisons/ComparisonsKt___ComparisonsJvmKt; +HSPLkotlin/comparisons/ComparisonsKt___ComparisonsJvmKt;->maxOf(F[F)F +HSPLkotlin/comparisons/ComparisonsKt___ComparisonsJvmKt;->minOf(F[F)F +Lkotlin/comparisons/ComparisonsKt___ComparisonsKt; +Lkotlin/coroutines/AbstractCoroutineContextElement; +HSPLkotlin/coroutines/AbstractCoroutineContextElement;->(Lkotlin/coroutines/CoroutineContext$Key;)V +HSPLkotlin/coroutines/AbstractCoroutineContextElement;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; +HSPLkotlin/coroutines/AbstractCoroutineContextElement;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; +HSPLkotlin/coroutines/AbstractCoroutineContextElement;->getKey()Lkotlin/coroutines/CoroutineContext$Key; +HSPLkotlin/coroutines/AbstractCoroutineContextElement;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext; +HSPLkotlin/coroutines/AbstractCoroutineContextElement;->plus(Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext; +Lkotlin/coroutines/AbstractCoroutineContextKey; +HSPLkotlin/coroutines/AbstractCoroutineContextKey;->(Lkotlin/coroutines/CoroutineContext$Key;Lkotlin/jvm/functions/Function1;)V +Lkotlin/coroutines/CombinedContext; +HSPLkotlin/coroutines/CombinedContext;->(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/CoroutineContext$Element;)V +HSPLkotlin/coroutines/CombinedContext;->contains(Lkotlin/coroutines/CoroutineContext$Element;)Z +HSPLkotlin/coroutines/CombinedContext;->containsAll(Lkotlin/coroutines/CombinedContext;)Z +HSPLkotlin/coroutines/CombinedContext;->equals(Ljava/lang/Object;)Z +HSPLkotlin/coroutines/CombinedContext;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; +HSPLkotlin/coroutines/CombinedContext;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; +HSPLkotlin/coroutines/CombinedContext;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext; +HSPLkotlin/coroutines/CombinedContext;->plus(Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext; +HSPLkotlin/coroutines/CombinedContext;->size()I +Lkotlin/coroutines/Continuation; +Lkotlin/coroutines/ContinuationInterceptor; +HSPLkotlin/coroutines/ContinuationInterceptor;->()V +Lkotlin/coroutines/ContinuationInterceptor$DefaultImpls; +HSPLkotlin/coroutines/ContinuationInterceptor$DefaultImpls;->get(Lkotlin/coroutines/ContinuationInterceptor;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; +HSPLkotlin/coroutines/ContinuationInterceptor$DefaultImpls;->minusKey(Lkotlin/coroutines/ContinuationInterceptor;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext; +Lkotlin/coroutines/ContinuationInterceptor$Key; +HSPLkotlin/coroutines/ContinuationInterceptor$Key;->()V +HSPLkotlin/coroutines/ContinuationInterceptor$Key;->()V +Lkotlin/coroutines/ContinuationKt; +HSPLkotlin/coroutines/ContinuationKt;->createCoroutine(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLkotlin/coroutines/ContinuationKt;->startCoroutine(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V +Lkotlin/coroutines/CoroutineContext; +Lkotlin/coroutines/CoroutineContext$DefaultImpls; +HSPLkotlin/coroutines/CoroutineContext$DefaultImpls;->plus(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext; +Lkotlin/coroutines/CoroutineContext$Element; +Lkotlin/coroutines/CoroutineContext$Element$DefaultImpls; +HSPLkotlin/coroutines/CoroutineContext$Element$DefaultImpls;->fold(Lkotlin/coroutines/CoroutineContext$Element;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; +HSPLkotlin/coroutines/CoroutineContext$Element$DefaultImpls;->get(Lkotlin/coroutines/CoroutineContext$Element;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; +HSPLkotlin/coroutines/CoroutineContext$Element$DefaultImpls;->minusKey(Lkotlin/coroutines/CoroutineContext$Element;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext; +HSPLkotlin/coroutines/CoroutineContext$Element$DefaultImpls;->plus(Lkotlin/coroutines/CoroutineContext$Element;Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext; +Lkotlin/coroutines/CoroutineContext$Key; +Lkotlin/coroutines/CoroutineContext$plus$1; +HSPLkotlin/coroutines/CoroutineContext$plus$1;->()V +HSPLkotlin/coroutines/CoroutineContext$plus$1;->()V +HSPLkotlin/coroutines/CoroutineContext$plus$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlin/coroutines/CoroutineContext$plus$1;->invoke(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/CoroutineContext$Element;)Lkotlin/coroutines/CoroutineContext; +Lkotlin/coroutines/EmptyCoroutineContext; +HSPLkotlin/coroutines/EmptyCoroutineContext;->()V +HSPLkotlin/coroutines/EmptyCoroutineContext;->()V +HSPLkotlin/coroutines/EmptyCoroutineContext;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; +HSPLkotlin/coroutines/EmptyCoroutineContext;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; +HSPLkotlin/coroutines/EmptyCoroutineContext;->plus(Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext; +Lkotlin/coroutines/SafeContinuation; +HSPLkotlin/coroutines/SafeContinuation;->()V +HSPLkotlin/coroutines/SafeContinuation;->(Lkotlin/coroutines/Continuation;Ljava/lang/Object;)V +HSPLkotlin/coroutines/SafeContinuation;->resumeWith(Ljava/lang/Object;)V +Lkotlin/coroutines/SafeContinuation$Companion; +HSPLkotlin/coroutines/SafeContinuation$Companion;->()V +HSPLkotlin/coroutines/SafeContinuation$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlin/coroutines/intrinsics/CoroutineSingletons; +HSPLkotlin/coroutines/intrinsics/CoroutineSingletons;->$values()[Lkotlin/coroutines/intrinsics/CoroutineSingletons; +HSPLkotlin/coroutines/intrinsics/CoroutineSingletons;->()V +HSPLkotlin/coroutines/intrinsics/CoroutineSingletons;->(Ljava/lang/String;I)V +Lkotlin/coroutines/intrinsics/IntrinsicsKt; +Lkotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsJvmKt; +HSPLkotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsJvmKt;->createCoroutineUnintercepted(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLkotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsJvmKt;->intercepted(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +Lkotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsKt; +HSPLkotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsKt;->getCOROUTINE_SUSPENDED()Ljava/lang/Object; +Lkotlin/coroutines/jvm/internal/BaseContinuationImpl; +HSPLkotlin/coroutines/jvm/internal/BaseContinuationImpl;->(Lkotlin/coroutines/Continuation;)V +HSPLkotlin/coroutines/jvm/internal/BaseContinuationImpl;->getCallerFrame()Lkotlin/coroutines/jvm/internal/CoroutineStackFrame; +HSPLkotlin/coroutines/jvm/internal/BaseContinuationImpl;->releaseIntercepted()V +HSPLkotlin/coroutines/jvm/internal/BaseContinuationImpl;->resumeWith(Ljava/lang/Object;)V +Lkotlin/coroutines/jvm/internal/Boxing; +HSPLkotlin/coroutines/jvm/internal/Boxing;->boxBoolean(Z)Ljava/lang/Boolean; +HSPLkotlin/coroutines/jvm/internal/Boxing;->boxFloat(F)Ljava/lang/Float; +HSPLkotlin/coroutines/jvm/internal/Boxing;->boxInt(I)Ljava/lang/Integer; +HSPLkotlin/coroutines/jvm/internal/Boxing;->boxLong(J)Ljava/lang/Long; +Lkotlin/coroutines/jvm/internal/CompletedContinuation; +HSPLkotlin/coroutines/jvm/internal/CompletedContinuation;->()V +HSPLkotlin/coroutines/jvm/internal/CompletedContinuation;->()V +Lkotlin/coroutines/jvm/internal/ContinuationImpl; +HSPLkotlin/coroutines/jvm/internal/ContinuationImpl;->(Lkotlin/coroutines/Continuation;)V +HSPLkotlin/coroutines/jvm/internal/ContinuationImpl;->(Lkotlin/coroutines/Continuation;Lkotlin/coroutines/CoroutineContext;)V +HSPLkotlin/coroutines/jvm/internal/ContinuationImpl;->getContext()Lkotlin/coroutines/CoroutineContext; +HSPLkotlin/coroutines/jvm/internal/ContinuationImpl;->intercepted()Lkotlin/coroutines/Continuation; +HSPLkotlin/coroutines/jvm/internal/ContinuationImpl;->releaseIntercepted()V +Lkotlin/coroutines/jvm/internal/CoroutineStackFrame; +Lkotlin/coroutines/jvm/internal/DebugProbesKt; +HSPLkotlin/coroutines/jvm/internal/DebugProbesKt;->probeCoroutineCreated(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLkotlin/coroutines/jvm/internal/DebugProbesKt;->probeCoroutineResumed(Lkotlin/coroutines/Continuation;)V +HSPLkotlin/coroutines/jvm/internal/DebugProbesKt;->probeCoroutineSuspended(Lkotlin/coroutines/Continuation;)V +Lkotlin/coroutines/jvm/internal/RestrictedContinuationImpl; +HSPLkotlin/coroutines/jvm/internal/RestrictedContinuationImpl;->(Lkotlin/coroutines/Continuation;)V +HSPLkotlin/coroutines/jvm/internal/RestrictedContinuationImpl;->getContext()Lkotlin/coroutines/CoroutineContext; +Lkotlin/coroutines/jvm/internal/RestrictedSuspendLambda; +HSPLkotlin/coroutines/jvm/internal/RestrictedSuspendLambda;->(ILkotlin/coroutines/Continuation;)V +Lkotlin/coroutines/jvm/internal/SuspendFunction; +Lkotlin/coroutines/jvm/internal/SuspendLambda; +HSPLkotlin/coroutines/jvm/internal/SuspendLambda;->(ILkotlin/coroutines/Continuation;)V +HSPLkotlin/coroutines/jvm/internal/SuspendLambda;->getArity()I +Lkotlin/enums/EnumEntries; +Lkotlin/enums/EnumEntriesKt; +HSPLkotlin/enums/EnumEntriesKt;->enumEntries([Ljava/lang/Enum;)Lkotlin/enums/EnumEntries; +Lkotlin/enums/EnumEntriesList; +HSPLkotlin/enums/EnumEntriesList;->([Ljava/lang/Enum;)V +HSPLkotlin/enums/EnumEntriesList;->getSize()I +Lkotlin/internal/PlatformImplementations; +HSPLkotlin/internal/PlatformImplementations;->()V +Lkotlin/internal/PlatformImplementationsKt; +HSPLkotlin/internal/PlatformImplementationsKt;->()V +Lkotlin/internal/ProgressionUtilKt; +HSPLkotlin/internal/ProgressionUtilKt;->differenceModulo(III)I +HSPLkotlin/internal/ProgressionUtilKt;->differenceModulo(JJJ)J +HSPLkotlin/internal/ProgressionUtilKt;->getProgressionLastElement(III)I +HSPLkotlin/internal/ProgressionUtilKt;->getProgressionLastElement(JJJ)J +HSPLkotlin/internal/ProgressionUtilKt;->mod(II)I +HSPLkotlin/internal/ProgressionUtilKt;->mod(JJ)J +Lkotlin/internal/jdk7/JDK7PlatformImplementations; +HSPLkotlin/internal/jdk7/JDK7PlatformImplementations;->()V +Lkotlin/internal/jdk8/JDK8PlatformImplementations; +HSPLkotlin/internal/jdk8/JDK8PlatformImplementations;->()V +HSPLkotlin/internal/jdk8/JDK8PlatformImplementations;->defaultPlatformRandom()Lkotlin/random/Random; +HSPLkotlin/internal/jdk8/JDK8PlatformImplementations;->sdkIsNullOrAtLeast(I)Z +Lkotlin/internal/jdk8/JDK8PlatformImplementations$ReflectSdkVersion; +HSPLkotlin/internal/jdk8/JDK8PlatformImplementations$ReflectSdkVersion;->()V +HSPLkotlin/internal/jdk8/JDK8PlatformImplementations$ReflectSdkVersion;->()V +Lkotlin/io/CloseableKt; +HSPLkotlin/io/CloseableKt;->closeFinally(Ljava/io/Closeable;Ljava/lang/Throwable;)V +Lkotlin/io/FileSystemException; +Lkotlin/io/FilesKt; +Lkotlin/io/FilesKt__FilePathComponentsKt; +Lkotlin/io/FilesKt__FileReadWriteKt; +Lkotlin/io/FilesKt__FileTreeWalkKt; +Lkotlin/io/FilesKt__UtilsKt; +HSPLkotlin/io/FilesKt__UtilsKt;->getExtension(Ljava/io/File;)Ljava/lang/String; +Lkotlin/io/TerminateException; +Lkotlin/jvm/JvmClassMappingKt; +HSPLkotlin/jvm/JvmClassMappingKt;->getJavaClass(Lkotlin/reflect/KClass;)Ljava/lang/Class; +HSPLkotlin/jvm/JvmClassMappingKt;->getJavaObjectType(Lkotlin/reflect/KClass;)Ljava/lang/Class; +HSPLkotlin/jvm/JvmClassMappingKt;->getJavaPrimitiveType(Lkotlin/reflect/KClass;)Ljava/lang/Class; +Lkotlin/jvm/functions/Function0; +Lkotlin/jvm/functions/Function1; +Lkotlin/jvm/functions/Function10; +Lkotlin/jvm/functions/Function11; +Lkotlin/jvm/functions/Function12; +Lkotlin/jvm/functions/Function13; +Lkotlin/jvm/functions/Function14; +Lkotlin/jvm/functions/Function15; +Lkotlin/jvm/functions/Function16; +Lkotlin/jvm/functions/Function17; +Lkotlin/jvm/functions/Function18; +Lkotlin/jvm/functions/Function19; +Lkotlin/jvm/functions/Function2; +Lkotlin/jvm/functions/Function20; +Lkotlin/jvm/functions/Function21; +Lkotlin/jvm/functions/Function22; +Lkotlin/jvm/functions/Function3; +Lkotlin/jvm/functions/Function4; +Lkotlin/jvm/functions/Function5; +Lkotlin/jvm/functions/Function6; +Lkotlin/jvm/functions/Function7; +Lkotlin/jvm/functions/Function8; +Lkotlin/jvm/functions/Function9; +Lkotlin/jvm/internal/AdaptedFunctionReference; +HSPLkotlin/jvm/internal/AdaptedFunctionReference;->(ILjava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V +HSPLkotlin/jvm/internal/AdaptedFunctionReference;->(ILjava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V +Lkotlin/jvm/internal/ArrayIterator; +HSPLkotlin/jvm/internal/ArrayIterator;->([Ljava/lang/Object;)V +HSPLkotlin/jvm/internal/ArrayIterator;->hasNext()Z +HSPLkotlin/jvm/internal/ArrayIterator;->next()Ljava/lang/Object; +Lkotlin/jvm/internal/ArrayIteratorKt; +HSPLkotlin/jvm/internal/ArrayIteratorKt;->iterator([Ljava/lang/Object;)Ljava/util/Iterator; +Lkotlin/jvm/internal/BooleanCompanionObject; +HSPLkotlin/jvm/internal/BooleanCompanionObject;->()V +HSPLkotlin/jvm/internal/BooleanCompanionObject;->()V +Lkotlin/jvm/internal/ByteCompanionObject; +HSPLkotlin/jvm/internal/ByteCompanionObject;->()V +HSPLkotlin/jvm/internal/ByteCompanionObject;->()V +Lkotlin/jvm/internal/CallableReference; +HSPLkotlin/jvm/internal/CallableReference;->()V +HSPLkotlin/jvm/internal/CallableReference;->(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;Z)V +HSPLkotlin/jvm/internal/CallableReference;->getBoundReceiver()Ljava/lang/Object; +HSPLkotlin/jvm/internal/CallableReference;->getName()Ljava/lang/String; +HSPLkotlin/jvm/internal/CallableReference;->getOwner()Lkotlin/reflect/KDeclarationContainer; +HSPLkotlin/jvm/internal/CallableReference;->getSignature()Ljava/lang/String; +Lkotlin/jvm/internal/CallableReference$NoReceiver; +HSPLkotlin/jvm/internal/CallableReference$NoReceiver;->()V +HSPLkotlin/jvm/internal/CallableReference$NoReceiver;->()V +HSPLkotlin/jvm/internal/CallableReference$NoReceiver;->access$000()Lkotlin/jvm/internal/CallableReference$NoReceiver; +Lkotlin/jvm/internal/CharCompanionObject; +HSPLkotlin/jvm/internal/CharCompanionObject;->()V +HSPLkotlin/jvm/internal/CharCompanionObject;->()V +Lkotlin/jvm/internal/ClassBasedDeclarationContainer; +Lkotlin/jvm/internal/CollectionToArray; +HSPLkotlin/jvm/internal/CollectionToArray;->()V +HSPLkotlin/jvm/internal/CollectionToArray;->toArray(Ljava/util/Collection;)[Ljava/lang/Object; +Lkotlin/jvm/internal/DefaultConstructorMarker; +Lkotlin/jvm/internal/DoubleCompanionObject; +HSPLkotlin/jvm/internal/DoubleCompanionObject;->()V +HSPLkotlin/jvm/internal/DoubleCompanionObject;->()V +Lkotlin/jvm/internal/FloatCompanionObject; +HSPLkotlin/jvm/internal/FloatCompanionObject;->()V +HSPLkotlin/jvm/internal/FloatCompanionObject;->()V +Lkotlin/jvm/internal/FunctionBase; +Lkotlin/jvm/internal/FunctionReference; +HSPLkotlin/jvm/internal/FunctionReference;->(ILjava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V +HSPLkotlin/jvm/internal/FunctionReference;->equals(Ljava/lang/Object;)Z +HSPLkotlin/jvm/internal/FunctionReference;->getArity()I +Lkotlin/jvm/internal/FunctionReferenceImpl; +HSPLkotlin/jvm/internal/FunctionReferenceImpl;->(ILjava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V +HSPLkotlin/jvm/internal/FunctionReferenceImpl;->(ILjava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V +Lkotlin/jvm/internal/InlineMarker; +HSPLkotlin/jvm/internal/InlineMarker;->mark(I)V +Lkotlin/jvm/internal/IntCompanionObject; +HSPLkotlin/jvm/internal/IntCompanionObject;->()V +HSPLkotlin/jvm/internal/IntCompanionObject;->()V +Lkotlin/jvm/internal/Intrinsics; +HSPLkotlin/jvm/internal/Intrinsics;->areEqual(Ljava/lang/Float;F)Z +HSPLkotlin/jvm/internal/Intrinsics;->checkNotNull(Ljava/lang/Object;)V +HSPLkotlin/jvm/internal/Intrinsics;->checkNotNull(Ljava/lang/Object;Ljava/lang/String;)V +HSPLkotlin/jvm/internal/Intrinsics;->checkNotNullExpressionValue(Ljava/lang/Object;Ljava/lang/String;)V +HSPLkotlin/jvm/internal/Intrinsics;->checkNotNullParameter(Ljava/lang/Object;Ljava/lang/String;)V +HSPLkotlin/jvm/internal/Intrinsics;->compare(II)I +HSPLkotlin/jvm/internal/Intrinsics;->sanitizeStackTrace(Ljava/lang/Throwable;)Ljava/lang/Throwable; +HSPLkotlin/jvm/internal/Intrinsics;->sanitizeStackTrace(Ljava/lang/Throwable;Ljava/lang/String;)Ljava/lang/Throwable; +HSPLkotlin/jvm/internal/Intrinsics;->stringPlus(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/String; +Lkotlin/jvm/internal/Intrinsics$Kotlin; +Lkotlin/jvm/internal/Lambda; +HSPLkotlin/jvm/internal/Lambda;->(I)V +HSPLkotlin/jvm/internal/Lambda;->getArity()I +Lkotlin/jvm/internal/LongCompanionObject; +HSPLkotlin/jvm/internal/LongCompanionObject;->()V +HSPLkotlin/jvm/internal/LongCompanionObject;->()V +Lkotlin/jvm/internal/MutablePropertyReference; +HSPLkotlin/jvm/internal/MutablePropertyReference;->(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V +Lkotlin/jvm/internal/MutablePropertyReference0; +HSPLkotlin/jvm/internal/MutablePropertyReference0;->(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V +Lkotlin/jvm/internal/MutablePropertyReference0Impl; +HSPLkotlin/jvm/internal/MutablePropertyReference0Impl;->(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V +Lkotlin/jvm/internal/MutablePropertyReference1; +HSPLkotlin/jvm/internal/MutablePropertyReference1;->(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V +Lkotlin/jvm/internal/MutablePropertyReference1Impl; +HSPLkotlin/jvm/internal/MutablePropertyReference1Impl;->(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V +Lkotlin/jvm/internal/PropertyReference; +HSPLkotlin/jvm/internal/PropertyReference;->(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V +HSPLkotlin/jvm/internal/PropertyReference;->equals(Ljava/lang/Object;)Z +Lkotlin/jvm/internal/PropertyReference0; +HSPLkotlin/jvm/internal/PropertyReference0;->(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V +HSPLkotlin/jvm/internal/PropertyReference0;->invoke()Ljava/lang/Object; +Lkotlin/jvm/internal/PropertyReference0Impl; +HSPLkotlin/jvm/internal/PropertyReference0Impl;->(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V +HSPLkotlin/jvm/internal/PropertyReference0Impl;->(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V +Lkotlin/jvm/internal/PropertyReference1; +HSPLkotlin/jvm/internal/PropertyReference1;->(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V +Lkotlin/jvm/internal/PropertyReference1Impl; +HSPLkotlin/jvm/internal/PropertyReference1Impl;->(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V +HSPLkotlin/jvm/internal/PropertyReference1Impl;->(Lkotlin/reflect/KDeclarationContainer;Ljava/lang/String;Ljava/lang/String;)V +Lkotlin/jvm/internal/PropertyReference2; +HSPLkotlin/jvm/internal/PropertyReference2;->(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V +Lkotlin/jvm/internal/PropertyReference2Impl; +HSPLkotlin/jvm/internal/PropertyReference2Impl;->(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V +Lkotlin/jvm/internal/Ref$BooleanRef; +HSPLkotlin/jvm/internal/Ref$BooleanRef;->()V +Lkotlin/jvm/internal/Ref$FloatRef; +HSPLkotlin/jvm/internal/Ref$FloatRef;->()V +Lkotlin/jvm/internal/Ref$IntRef; +HSPLkotlin/jvm/internal/Ref$IntRef;->()V +Lkotlin/jvm/internal/Ref$LongRef; +HSPLkotlin/jvm/internal/Ref$LongRef;->()V +Lkotlin/jvm/internal/Ref$ObjectRef; +HSPLkotlin/jvm/internal/Ref$ObjectRef;->()V +Lkotlin/jvm/internal/Reflection; +HSPLkotlin/jvm/internal/Reflection;->()V +HSPLkotlin/jvm/internal/Reflection;->getOrCreateKotlinClass(Ljava/lang/Class;)Lkotlin/reflect/KClass; +HSPLkotlin/jvm/internal/Reflection;->getOrCreateKotlinPackage(Ljava/lang/Class;)Lkotlin/reflect/KDeclarationContainer; +HSPLkotlin/jvm/internal/Reflection;->mutableProperty1(Lkotlin/jvm/internal/MutablePropertyReference1;)Lkotlin/reflect/KMutableProperty1; +HSPLkotlin/jvm/internal/Reflection;->property0(Lkotlin/jvm/internal/PropertyReference0;)Lkotlin/reflect/KProperty0; +HSPLkotlin/jvm/internal/Reflection;->property1(Lkotlin/jvm/internal/PropertyReference1;)Lkotlin/reflect/KProperty1; +HSPLkotlin/jvm/internal/Reflection;->property2(Lkotlin/jvm/internal/PropertyReference2;)Lkotlin/reflect/KProperty2; +Lkotlin/jvm/internal/ReflectionFactory; +HSPLkotlin/jvm/internal/ReflectionFactory;->()V +Lkotlin/jvm/internal/ShortCompanionObject; +HSPLkotlin/jvm/internal/ShortCompanionObject;->()V +HSPLkotlin/jvm/internal/ShortCompanionObject;->()V +Lkotlin/jvm/internal/SpreadBuilder; +HSPLkotlin/jvm/internal/SpreadBuilder;->(I)V +HSPLkotlin/jvm/internal/SpreadBuilder;->add(Ljava/lang/Object;)V +HSPLkotlin/jvm/internal/SpreadBuilder;->addSpread(Ljava/lang/Object;)V +HSPLkotlin/jvm/internal/SpreadBuilder;->size()I +HSPLkotlin/jvm/internal/SpreadBuilder;->toArray([Ljava/lang/Object;)[Ljava/lang/Object; +Lkotlin/jvm/internal/StringCompanionObject; +HSPLkotlin/jvm/internal/StringCompanionObject;->()V +HSPLkotlin/jvm/internal/StringCompanionObject;->()V +Lkotlin/jvm/internal/TypeIntrinsics; +HSPLkotlin/jvm/internal/TypeIntrinsics;->asMutableCollection(Ljava/lang/Object;)Ljava/util/Collection; +HSPLkotlin/jvm/internal/TypeIntrinsics;->asMutableIterable(Ljava/lang/Object;)Ljava/lang/Iterable; +HSPLkotlin/jvm/internal/TypeIntrinsics;->asMutableList(Ljava/lang/Object;)Ljava/util/List; +HSPLkotlin/jvm/internal/TypeIntrinsics;->beforeCheckcastToFunctionOfArity(Ljava/lang/Object;I)Ljava/lang/Object; +HSPLkotlin/jvm/internal/TypeIntrinsics;->castToCollection(Ljava/lang/Object;)Ljava/util/Collection; +HSPLkotlin/jvm/internal/TypeIntrinsics;->castToIterable(Ljava/lang/Object;)Ljava/lang/Iterable; +HSPLkotlin/jvm/internal/TypeIntrinsics;->castToList(Ljava/lang/Object;)Ljava/util/List; +HSPLkotlin/jvm/internal/TypeIntrinsics;->getFunctionArity(Ljava/lang/Object;)I +HSPLkotlin/jvm/internal/TypeIntrinsics;->isFunctionOfArity(Ljava/lang/Object;I)Z +HSPLkotlin/jvm/internal/TypeIntrinsics;->isMutableSet(Ljava/lang/Object;)Z +Lkotlin/jvm/internal/markers/KMappedMarker; +Lkotlin/jvm/internal/markers/KMutableCollection; +Lkotlin/jvm/internal/markers/KMutableIterable; +Lkotlin/jvm/internal/markers/KMutableIterator; +Lkotlin/jvm/internal/markers/KMutableList; +Lkotlin/jvm/internal/markers/KMutableListIterator; +Lkotlin/jvm/internal/markers/KMutableMap; +Lkotlin/jvm/internal/markers/KMutableSet; +Lkotlin/math/MathKt; +Lkotlin/math/MathKt__MathHKt; +Lkotlin/math/MathKt__MathJVMKt; +HSPLkotlin/math/MathKt__MathJVMKt;->getSign(I)I +HSPLkotlin/math/MathKt__MathJVMKt;->getSign(J)I +HSPLkotlin/math/MathKt__MathJVMKt;->roundToInt(F)I +Lkotlin/properties/ReadOnlyProperty; +Lkotlin/random/AbstractPlatformRandom; +HSPLkotlin/random/AbstractPlatformRandom;->()V +HSPLkotlin/random/AbstractPlatformRandom;->nextInt()I +HSPLkotlin/random/AbstractPlatformRandom;->nextInt(I)I +Lkotlin/random/Random; +HSPLkotlin/random/Random;->()V +HSPLkotlin/random/Random;->()V +HSPLkotlin/random/Random;->access$getDefaultRandom$cp()Lkotlin/random/Random; +Lkotlin/random/Random$Default; +HSPLkotlin/random/Random$Default;->()V +HSPLkotlin/random/Random$Default;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlin/random/Random$Default;->nextInt()I +HSPLkotlin/random/Random$Default;->nextInt(I)I +Lkotlin/random/jdk8/PlatformThreadLocalRandom; +HSPLkotlin/random/jdk8/PlatformThreadLocalRandom;->()V +HSPLkotlin/random/jdk8/PlatformThreadLocalRandom;->getImpl()Ljava/util/Random; +Lkotlin/ranges/ClosedFloatRange; +HSPLkotlin/ranges/ClosedFloatRange;->(FF)V +HSPLkotlin/ranges/ClosedFloatRange;->getEndInclusive()Ljava/lang/Comparable; +HSPLkotlin/ranges/ClosedFloatRange;->getEndInclusive()Ljava/lang/Float; +HSPLkotlin/ranges/ClosedFloatRange;->getStart()Ljava/lang/Comparable; +HSPLkotlin/ranges/ClosedFloatRange;->getStart()Ljava/lang/Float; +HSPLkotlin/ranges/ClosedFloatRange;->isEmpty()Z +HSPLkotlin/ranges/ClosedFloatRange;->lessThanOrEquals(FF)Z +HSPLkotlin/ranges/ClosedFloatRange;->lessThanOrEquals(Ljava/lang/Comparable;Ljava/lang/Comparable;)Z +Lkotlin/ranges/ClosedFloatingPointRange; +Lkotlin/ranges/ClosedRange; +Lkotlin/ranges/IntProgression; +HSPLkotlin/ranges/IntProgression;->()V +HSPLkotlin/ranges/IntProgression;->(III)V +HSPLkotlin/ranges/IntProgression;->getFirst()I +HSPLkotlin/ranges/IntProgression;->getLast()I +HSPLkotlin/ranges/IntProgression;->getStep()I +HSPLkotlin/ranges/IntProgression;->iterator()Ljava/util/Iterator; +HSPLkotlin/ranges/IntProgression;->iterator()Lkotlin/collections/IntIterator; +Lkotlin/ranges/IntProgression$Companion; +HSPLkotlin/ranges/IntProgression$Companion;->()V +HSPLkotlin/ranges/IntProgression$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlin/ranges/IntProgressionIterator; +HSPLkotlin/ranges/IntProgressionIterator;->(III)V +HSPLkotlin/ranges/IntProgressionIterator;->hasNext()Z +HSPLkotlin/ranges/IntProgressionIterator;->nextInt()I +Lkotlin/ranges/IntRange; +HSPLkotlin/ranges/IntRange;->()V +HSPLkotlin/ranges/IntRange;->(II)V +HSPLkotlin/ranges/IntRange;->contains(I)Z +Lkotlin/ranges/IntRange$Companion; +HSPLkotlin/ranges/IntRange$Companion;->()V +HSPLkotlin/ranges/IntRange$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlin/ranges/LongProgression; +HSPLkotlin/ranges/LongProgression;->()V +HSPLkotlin/ranges/LongProgression;->(JJJ)V +HSPLkotlin/ranges/LongProgression;->getFirst()J +HSPLkotlin/ranges/LongProgression;->getLast()J +Lkotlin/ranges/LongProgression$Companion; +HSPLkotlin/ranges/LongProgression$Companion;->()V +HSPLkotlin/ranges/LongProgression$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlin/ranges/LongRange; +HSPLkotlin/ranges/LongRange;->()V +HSPLkotlin/ranges/LongRange;->(JJ)V +HSPLkotlin/ranges/LongRange;->contains(J)Z +Lkotlin/ranges/LongRange$Companion; +HSPLkotlin/ranges/LongRange$Companion;->()V +HSPLkotlin/ranges/LongRange$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlin/ranges/OpenEndRange; +Lkotlin/ranges/RangesKt; +Lkotlin/ranges/RangesKt__RangesKt; +HSPLkotlin/ranges/RangesKt__RangesKt;->rangeTo(FF)Lkotlin/ranges/ClosedFloatingPointRange; +Lkotlin/ranges/RangesKt___RangesKt; +HSPLkotlin/ranges/RangesKt___RangesKt;->coerceAtLeast(FF)F +HSPLkotlin/ranges/RangesKt___RangesKt;->coerceAtLeast(II)I +HSPLkotlin/ranges/RangesKt___RangesKt;->coerceAtLeast(JJ)J +HSPLkotlin/ranges/RangesKt___RangesKt;->coerceAtLeast(Ljava/lang/Comparable;Ljava/lang/Comparable;)Ljava/lang/Comparable; +HSPLkotlin/ranges/RangesKt___RangesKt;->coerceAtMost(FF)F +HSPLkotlin/ranges/RangesKt___RangesKt;->coerceAtMost(II)I +HSPLkotlin/ranges/RangesKt___RangesKt;->coerceAtMost(JJ)J +HSPLkotlin/ranges/RangesKt___RangesKt;->coerceIn(DDD)D +HSPLkotlin/ranges/RangesKt___RangesKt;->coerceIn(FFF)F +HSPLkotlin/ranges/RangesKt___RangesKt;->coerceIn(III)I +HSPLkotlin/ranges/RangesKt___RangesKt;->coerceIn(JJJ)J +HSPLkotlin/ranges/RangesKt___RangesKt;->coerceIn(Ljava/lang/Comparable;Lkotlin/ranges/ClosedFloatingPointRange;)Ljava/lang/Comparable; +HSPLkotlin/ranges/RangesKt___RangesKt;->until(II)Lkotlin/ranges/IntRange; +Lkotlin/reflect/KAnnotatedElement; +Lkotlin/reflect/KCallable; +Lkotlin/reflect/KClass; +Lkotlin/reflect/KClassifier; +Lkotlin/reflect/KDeclarationContainer; +Lkotlin/reflect/KFunction; +Lkotlin/reflect/KMutableProperty; +Lkotlin/reflect/KMutableProperty0; +Lkotlin/reflect/KMutableProperty1; +Lkotlin/reflect/KProperty; +Lkotlin/reflect/KProperty0; +Lkotlin/reflect/KProperty1; +Lkotlin/reflect/KProperty2; +Lkotlin/reflect/jvm/internal/CacheByClass; +HSPLkotlin/reflect/jvm/internal/CacheByClass;->()V +Lkotlin/reflect/jvm/internal/CacheByClassKt; +HSPLkotlin/reflect/jvm/internal/CacheByClassKt;->()V +HSPLkotlin/reflect/jvm/internal/CacheByClassKt;->createCache(Lkotlin/jvm/functions/Function1;)Lkotlin/reflect/jvm/internal/CacheByClass; +Lkotlin/reflect/jvm/internal/CachesKt; +HSPLkotlin/reflect/jvm/internal/CachesKt;->()V +HSPLkotlin/reflect/jvm/internal/CachesKt;->getOrCreateKotlinClass(Ljava/lang/Class;)Lkotlin/reflect/jvm/internal/KClassImpl; +HSPLkotlin/reflect/jvm/internal/CachesKt;->getOrCreateKotlinPackage(Ljava/lang/Class;)Lkotlin/reflect/KDeclarationContainer; +Lkotlin/reflect/jvm/internal/CachesKt$CACHE_FOR_BASE_CLASSIFIERS$1; +HSPLkotlin/reflect/jvm/internal/CachesKt$CACHE_FOR_BASE_CLASSIFIERS$1;->()V +HSPLkotlin/reflect/jvm/internal/CachesKt$CACHE_FOR_BASE_CLASSIFIERS$1;->()V +Lkotlin/reflect/jvm/internal/CachesKt$CACHE_FOR_GENERIC_CLASSIFIERS$1; +HSPLkotlin/reflect/jvm/internal/CachesKt$CACHE_FOR_GENERIC_CLASSIFIERS$1;->()V +HSPLkotlin/reflect/jvm/internal/CachesKt$CACHE_FOR_GENERIC_CLASSIFIERS$1;->()V +Lkotlin/reflect/jvm/internal/CachesKt$CACHE_FOR_NULLABLE_BASE_CLASSIFIERS$1; +HSPLkotlin/reflect/jvm/internal/CachesKt$CACHE_FOR_NULLABLE_BASE_CLASSIFIERS$1;->()V +HSPLkotlin/reflect/jvm/internal/CachesKt$CACHE_FOR_NULLABLE_BASE_CLASSIFIERS$1;->()V +Lkotlin/reflect/jvm/internal/CachesKt$K_CLASS_CACHE$1; +HSPLkotlin/reflect/jvm/internal/CachesKt$K_CLASS_CACHE$1;->()V +HSPLkotlin/reflect/jvm/internal/CachesKt$K_CLASS_CACHE$1;->()V +HSPLkotlin/reflect/jvm/internal/CachesKt$K_CLASS_CACHE$1;->invoke(Ljava/lang/Class;)Lkotlin/reflect/jvm/internal/KClassImpl; +HSPLkotlin/reflect/jvm/internal/CachesKt$K_CLASS_CACHE$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlin/reflect/jvm/internal/CachesKt$K_PACKAGE_CACHE$1; +HSPLkotlin/reflect/jvm/internal/CachesKt$K_PACKAGE_CACHE$1;->()V +HSPLkotlin/reflect/jvm/internal/CachesKt$K_PACKAGE_CACHE$1;->()V +HSPLkotlin/reflect/jvm/internal/CachesKt$K_PACKAGE_CACHE$1;->invoke(Ljava/lang/Class;)Lkotlin/reflect/jvm/internal/KPackageImpl; +HSPLkotlin/reflect/jvm/internal/CachesKt$K_PACKAGE_CACHE$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlin/reflect/jvm/internal/ClassValueCache; +HSPLkotlin/reflect/jvm/internal/ClassValueCache;->(Lkotlin/jvm/functions/Function1;)V +HSPLkotlin/reflect/jvm/internal/ClassValueCache;->get(Ljava/lang/Class;)Ljava/lang/Object; +Lkotlin/reflect/jvm/internal/ClassValueCache$$ExternalSyntheticApiModelOutline0; +HSPLkotlin/reflect/jvm/internal/ClassValueCache$$ExternalSyntheticApiModelOutline0;->m(Lkotlin/reflect/jvm/internal/ComputableClassValue;Ljava/lang/Class;)Ljava/lang/Object; +Lkotlin/reflect/jvm/internal/ComputableClassValue; +HSPLkotlin/reflect/jvm/internal/ComputableClassValue;->(Lkotlin/jvm/functions/Function1;)V +HSPLkotlin/reflect/jvm/internal/ComputableClassValue;->computeValue(Ljava/lang/Class;)Ljava/lang/Object; +HSPLkotlin/reflect/jvm/internal/ComputableClassValue;->computeValue(Ljava/lang/Class;)Ljava/lang/ref/SoftReference; +Lkotlin/reflect/jvm/internal/KCallableImpl; +HSPLkotlin/reflect/jvm/internal/KCallableImpl;->()V +Lkotlin/reflect/jvm/internal/KCallableImpl$_absentArguments$1; +HSPLkotlin/reflect/jvm/internal/KCallableImpl$_absentArguments$1;->(Lkotlin/reflect/jvm/internal/KCallableImpl;)V +Lkotlin/reflect/jvm/internal/KCallableImpl$_annotations$1; +HSPLkotlin/reflect/jvm/internal/KCallableImpl$_annotations$1;->(Lkotlin/reflect/jvm/internal/KCallableImpl;)V +Lkotlin/reflect/jvm/internal/KCallableImpl$_parameters$1; +HSPLkotlin/reflect/jvm/internal/KCallableImpl$_parameters$1;->(Lkotlin/reflect/jvm/internal/KCallableImpl;)V +Lkotlin/reflect/jvm/internal/KCallableImpl$_returnType$1; +HSPLkotlin/reflect/jvm/internal/KCallableImpl$_returnType$1;->(Lkotlin/reflect/jvm/internal/KCallableImpl;)V +Lkotlin/reflect/jvm/internal/KCallableImpl$_typeParameters$1; +HSPLkotlin/reflect/jvm/internal/KCallableImpl$_typeParameters$1;->(Lkotlin/reflect/jvm/internal/KCallableImpl;)V +Lkotlin/reflect/jvm/internal/KCallableImpl$parametersNeedMFVCFlattening$1; +HSPLkotlin/reflect/jvm/internal/KCallableImpl$parametersNeedMFVCFlattening$1;->(Lkotlin/reflect/jvm/internal/KCallableImpl;)V +Lkotlin/reflect/jvm/internal/KClassImpl; +HSPLkotlin/reflect/jvm/internal/KClassImpl;->(Ljava/lang/Class;)V +HSPLkotlin/reflect/jvm/internal/KClassImpl;->access$getClassId(Lkotlin/reflect/jvm/internal/KClassImpl;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; +HSPLkotlin/reflect/jvm/internal/KClassImpl;->equals(Ljava/lang/Object;)Z +HSPLkotlin/reflect/jvm/internal/KClassImpl;->getClassId()Lkotlin/reflect/jvm/internal/impl/name/ClassId; +HSPLkotlin/reflect/jvm/internal/KClassImpl;->getJClass()Ljava/lang/Class; +HSPLkotlin/reflect/jvm/internal/KClassImpl;->getSimpleName()Ljava/lang/String; +HSPLkotlin/reflect/jvm/internal/KClassImpl;->hashCode()I +HSPLkotlin/reflect/jvm/internal/KClassImpl;->toString()Ljava/lang/String; +Lkotlin/reflect/jvm/internal/KClassImpl$Data; +HSPLkotlin/reflect/jvm/internal/KClassImpl$Data;->()V +HSPLkotlin/reflect/jvm/internal/KClassImpl$Data;->(Lkotlin/reflect/jvm/internal/KClassImpl;)V +HSPLkotlin/reflect/jvm/internal/KClassImpl$Data;->getSimpleName()Ljava/lang/String; +Lkotlin/reflect/jvm/internal/KClassImpl$Data$allMembers$2; +HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$allMembers$2;->(Lkotlin/reflect/jvm/internal/KClassImpl$Data;)V +Lkotlin/reflect/jvm/internal/KClassImpl$Data$allNonStaticMembers$2; +HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$allNonStaticMembers$2;->(Lkotlin/reflect/jvm/internal/KClassImpl$Data;)V +Lkotlin/reflect/jvm/internal/KClassImpl$Data$allStaticMembers$2; +HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$allStaticMembers$2;->(Lkotlin/reflect/jvm/internal/KClassImpl$Data;)V +Lkotlin/reflect/jvm/internal/KClassImpl$Data$annotations$2; +HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$annotations$2;->(Lkotlin/reflect/jvm/internal/KClassImpl$Data;)V +Lkotlin/reflect/jvm/internal/KClassImpl$Data$constructors$2; +HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$constructors$2;->(Lkotlin/reflect/jvm/internal/KClassImpl;)V +Lkotlin/reflect/jvm/internal/KClassImpl$Data$declaredMembers$2; +HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$declaredMembers$2;->(Lkotlin/reflect/jvm/internal/KClassImpl$Data;)V +Lkotlin/reflect/jvm/internal/KClassImpl$Data$declaredNonStaticMembers$2; +HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$declaredNonStaticMembers$2;->(Lkotlin/reflect/jvm/internal/KClassImpl;)V +Lkotlin/reflect/jvm/internal/KClassImpl$Data$declaredStaticMembers$2; +HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$declaredStaticMembers$2;->(Lkotlin/reflect/jvm/internal/KClassImpl;)V +Lkotlin/reflect/jvm/internal/KClassImpl$Data$descriptor$2; +HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$descriptor$2;->(Lkotlin/reflect/jvm/internal/KClassImpl;)V +Lkotlin/reflect/jvm/internal/KClassImpl$Data$inheritedNonStaticMembers$2; +HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$inheritedNonStaticMembers$2;->(Lkotlin/reflect/jvm/internal/KClassImpl;)V +Lkotlin/reflect/jvm/internal/KClassImpl$Data$inheritedStaticMembers$2; +HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$inheritedStaticMembers$2;->(Lkotlin/reflect/jvm/internal/KClassImpl;)V +Lkotlin/reflect/jvm/internal/KClassImpl$Data$nestedClasses$2; +HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$nestedClasses$2;->(Lkotlin/reflect/jvm/internal/KClassImpl$Data;)V +Lkotlin/reflect/jvm/internal/KClassImpl$Data$objectInstance$2; +HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$objectInstance$2;->(Lkotlin/reflect/jvm/internal/KClassImpl$Data;Lkotlin/reflect/jvm/internal/KClassImpl;)V +Lkotlin/reflect/jvm/internal/KClassImpl$Data$qualifiedName$2; +HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$qualifiedName$2;->(Lkotlin/reflect/jvm/internal/KClassImpl;)V +Lkotlin/reflect/jvm/internal/KClassImpl$Data$sealedSubclasses$2; +HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$sealedSubclasses$2;->(Lkotlin/reflect/jvm/internal/KClassImpl$Data;)V +Lkotlin/reflect/jvm/internal/KClassImpl$Data$simpleName$2; +HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$simpleName$2;->(Lkotlin/reflect/jvm/internal/KClassImpl;Lkotlin/reflect/jvm/internal/KClassImpl$Data;)V +HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$simpleName$2;->invoke()Ljava/lang/Object; +HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$simpleName$2;->invoke()Ljava/lang/String; +Lkotlin/reflect/jvm/internal/KClassImpl$Data$supertypes$2; +HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$supertypes$2;->(Lkotlin/reflect/jvm/internal/KClassImpl$Data;Lkotlin/reflect/jvm/internal/KClassImpl;)V +Lkotlin/reflect/jvm/internal/KClassImpl$Data$typeParameters$2; +HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$typeParameters$2;->(Lkotlin/reflect/jvm/internal/KClassImpl$Data;Lkotlin/reflect/jvm/internal/KClassImpl;)V +Lkotlin/reflect/jvm/internal/KClassImpl$data$1; +HSPLkotlin/reflect/jvm/internal/KClassImpl$data$1;->(Lkotlin/reflect/jvm/internal/KClassImpl;)V +HSPLkotlin/reflect/jvm/internal/KClassImpl$data$1;->invoke()Ljava/lang/Object; +HSPLkotlin/reflect/jvm/internal/KClassImpl$data$1;->invoke()Lkotlin/reflect/jvm/internal/KClassImpl$Data; +Lkotlin/reflect/jvm/internal/KClassifierImpl; +Lkotlin/reflect/jvm/internal/KDeclarationContainerImpl; +HSPLkotlin/reflect/jvm/internal/KDeclarationContainerImpl;->()V +HSPLkotlin/reflect/jvm/internal/KDeclarationContainerImpl;->()V +Lkotlin/reflect/jvm/internal/KDeclarationContainerImpl$Companion; +HSPLkotlin/reflect/jvm/internal/KDeclarationContainerImpl$Companion;->()V +HSPLkotlin/reflect/jvm/internal/KDeclarationContainerImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlin/reflect/jvm/internal/KDeclarationContainerImpl$Data; +HSPLkotlin/reflect/jvm/internal/KDeclarationContainerImpl$Data;->()V +HSPLkotlin/reflect/jvm/internal/KDeclarationContainerImpl$Data;->(Lkotlin/reflect/jvm/internal/KDeclarationContainerImpl;)V +Lkotlin/reflect/jvm/internal/KDeclarationContainerImpl$Data$moduleData$2; +HSPLkotlin/reflect/jvm/internal/KDeclarationContainerImpl$Data$moduleData$2;->(Lkotlin/reflect/jvm/internal/KDeclarationContainerImpl;)V +Lkotlin/reflect/jvm/internal/KMutableProperty1Impl; +HSPLkotlin/reflect/jvm/internal/KMutableProperty1Impl;->(Lkotlin/reflect/jvm/internal/KDeclarationContainerImpl;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)V +Lkotlin/reflect/jvm/internal/KMutableProperty1Impl$_setter$1; +HSPLkotlin/reflect/jvm/internal/KMutableProperty1Impl$_setter$1;->(Lkotlin/reflect/jvm/internal/KMutableProperty1Impl;)V +Lkotlin/reflect/jvm/internal/KPackageImpl; +HSPLkotlin/reflect/jvm/internal/KPackageImpl;->(Ljava/lang/Class;)V +Lkotlin/reflect/jvm/internal/KPackageImpl$data$1; +HSPLkotlin/reflect/jvm/internal/KPackageImpl$data$1;->(Lkotlin/reflect/jvm/internal/KPackageImpl;)V +Lkotlin/reflect/jvm/internal/KProperty0Impl; +HSPLkotlin/reflect/jvm/internal/KProperty0Impl;->(Lkotlin/reflect/jvm/internal/KDeclarationContainerImpl;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)V +Lkotlin/reflect/jvm/internal/KProperty0Impl$_getter$1; +HSPLkotlin/reflect/jvm/internal/KProperty0Impl$_getter$1;->(Lkotlin/reflect/jvm/internal/KProperty0Impl;)V +Lkotlin/reflect/jvm/internal/KProperty0Impl$delegateValue$1; +HSPLkotlin/reflect/jvm/internal/KProperty0Impl$delegateValue$1;->(Lkotlin/reflect/jvm/internal/KProperty0Impl;)V +Lkotlin/reflect/jvm/internal/KProperty1Impl; +HSPLkotlin/reflect/jvm/internal/KProperty1Impl;->(Lkotlin/reflect/jvm/internal/KDeclarationContainerImpl;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)V +Lkotlin/reflect/jvm/internal/KProperty1Impl$_getter$1; +HSPLkotlin/reflect/jvm/internal/KProperty1Impl$_getter$1;->(Lkotlin/reflect/jvm/internal/KProperty1Impl;)V +Lkotlin/reflect/jvm/internal/KProperty1Impl$delegateSource$1; +HSPLkotlin/reflect/jvm/internal/KProperty1Impl$delegateSource$1;->(Lkotlin/reflect/jvm/internal/KProperty1Impl;)V +Lkotlin/reflect/jvm/internal/KProperty2Impl; +HSPLkotlin/reflect/jvm/internal/KProperty2Impl;->(Lkotlin/reflect/jvm/internal/KDeclarationContainerImpl;Ljava/lang/String;Ljava/lang/String;)V +Lkotlin/reflect/jvm/internal/KProperty2Impl$_getter$1; +HSPLkotlin/reflect/jvm/internal/KProperty2Impl$_getter$1;->(Lkotlin/reflect/jvm/internal/KProperty2Impl;)V +Lkotlin/reflect/jvm/internal/KProperty2Impl$delegateSource$1; +HSPLkotlin/reflect/jvm/internal/KProperty2Impl$delegateSource$1;->(Lkotlin/reflect/jvm/internal/KProperty2Impl;)V +Lkotlin/reflect/jvm/internal/KPropertyImpl; +HSPLkotlin/reflect/jvm/internal/KPropertyImpl;->()V +HSPLkotlin/reflect/jvm/internal/KPropertyImpl;->(Lkotlin/reflect/jvm/internal/KDeclarationContainerImpl;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)V +HSPLkotlin/reflect/jvm/internal/KPropertyImpl;->(Lkotlin/reflect/jvm/internal/KDeclarationContainerImpl;Ljava/lang/String;Ljava/lang/String;Lkotlin/reflect/jvm/internal/impl/descriptors/PropertyDescriptor;Ljava/lang/Object;)V +HSPLkotlin/reflect/jvm/internal/KPropertyImpl;->getName()Ljava/lang/String; +Lkotlin/reflect/jvm/internal/KPropertyImpl$Companion; +HSPLkotlin/reflect/jvm/internal/KPropertyImpl$Companion;->()V +HSPLkotlin/reflect/jvm/internal/KPropertyImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlin/reflect/jvm/internal/KPropertyImpl$_descriptor$1; +HSPLkotlin/reflect/jvm/internal/KPropertyImpl$_descriptor$1;->(Lkotlin/reflect/jvm/internal/KPropertyImpl;)V +Lkotlin/reflect/jvm/internal/KPropertyImpl$_javaField$1; +HSPLkotlin/reflect/jvm/internal/KPropertyImpl$_javaField$1;->(Lkotlin/reflect/jvm/internal/KPropertyImpl;)V +Lkotlin/reflect/jvm/internal/KTypeParameterOwnerImpl; +Lkotlin/reflect/jvm/internal/ReflectProperties; +HSPLkotlin/reflect/jvm/internal/ReflectProperties;->lazy(Lkotlin/jvm/functions/Function0;)Lkotlin/reflect/jvm/internal/ReflectProperties$LazyVal; +HSPLkotlin/reflect/jvm/internal/ReflectProperties;->lazySoft(Ljava/lang/Object;Lkotlin/jvm/functions/Function0;)Lkotlin/reflect/jvm/internal/ReflectProperties$LazySoftVal; +HSPLkotlin/reflect/jvm/internal/ReflectProperties;->lazySoft(Lkotlin/jvm/functions/Function0;)Lkotlin/reflect/jvm/internal/ReflectProperties$LazySoftVal; +Lkotlin/reflect/jvm/internal/ReflectProperties$LazySoftVal; +HSPLkotlin/reflect/jvm/internal/ReflectProperties$LazySoftVal;->(Ljava/lang/Object;Lkotlin/jvm/functions/Function0;)V +HSPLkotlin/reflect/jvm/internal/ReflectProperties$LazySoftVal;->invoke()Ljava/lang/Object; +Lkotlin/reflect/jvm/internal/ReflectProperties$LazyVal; +HSPLkotlin/reflect/jvm/internal/ReflectProperties$LazyVal;->(Lkotlin/jvm/functions/Function0;)V +HSPLkotlin/reflect/jvm/internal/ReflectProperties$LazyVal;->invoke()Ljava/lang/Object; +Lkotlin/reflect/jvm/internal/ReflectProperties$Val; +HSPLkotlin/reflect/jvm/internal/ReflectProperties$Val;->()V +HSPLkotlin/reflect/jvm/internal/ReflectProperties$Val;->()V +HSPLkotlin/reflect/jvm/internal/ReflectProperties$Val;->escape(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlin/reflect/jvm/internal/ReflectProperties$Val;->getValue(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lkotlin/reflect/jvm/internal/ReflectProperties$Val$1; +HSPLkotlin/reflect/jvm/internal/ReflectProperties$Val$1;->()V +Lkotlin/reflect/jvm/internal/ReflectionFactoryImpl; +HSPLkotlin/reflect/jvm/internal/ReflectionFactoryImpl;->()V +HSPLkotlin/reflect/jvm/internal/ReflectionFactoryImpl;->getOrCreateKotlinClass(Ljava/lang/Class;)Lkotlin/reflect/KClass; +HSPLkotlin/reflect/jvm/internal/ReflectionFactoryImpl;->getOrCreateKotlinPackage(Ljava/lang/Class;Ljava/lang/String;)Lkotlin/reflect/KDeclarationContainer; +HSPLkotlin/reflect/jvm/internal/ReflectionFactoryImpl;->getOwner(Lkotlin/jvm/internal/CallableReference;)Lkotlin/reflect/jvm/internal/KDeclarationContainerImpl; +HSPLkotlin/reflect/jvm/internal/ReflectionFactoryImpl;->mutableProperty1(Lkotlin/jvm/internal/MutablePropertyReference1;)Lkotlin/reflect/KMutableProperty1; +HSPLkotlin/reflect/jvm/internal/ReflectionFactoryImpl;->property0(Lkotlin/jvm/internal/PropertyReference0;)Lkotlin/reflect/KProperty0; +HSPLkotlin/reflect/jvm/internal/ReflectionFactoryImpl;->property1(Lkotlin/jvm/internal/PropertyReference1;)Lkotlin/reflect/KProperty1; +HSPLkotlin/reflect/jvm/internal/ReflectionFactoryImpl;->property2(Lkotlin/jvm/internal/PropertyReference2;)Lkotlin/reflect/KProperty2; +Lkotlin/reflect/jvm/internal/RuntimeTypeMapper; +HSPLkotlin/reflect/jvm/internal/RuntimeTypeMapper;->()V +HSPLkotlin/reflect/jvm/internal/RuntimeTypeMapper;->()V +HSPLkotlin/reflect/jvm/internal/RuntimeTypeMapper;->getPrimitiveType(Ljava/lang/Class;)Lkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType; +HSPLkotlin/reflect/jvm/internal/RuntimeTypeMapper;->mapJvmClassToKotlinClassId(Ljava/lang/Class;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; +Lkotlin/reflect/jvm/internal/impl/builtins/CompanionObjectMapping; +HSPLkotlin/reflect/jvm/internal/impl/builtins/CompanionObjectMapping;->()V +HSPLkotlin/reflect/jvm/internal/impl/builtins/CompanionObjectMapping;->()V +HSPLkotlin/reflect/jvm/internal/impl/builtins/CompanionObjectMapping;->allClassesWithIntrinsicCompanions()Ljava/util/Set; +Lkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType; +HSPLkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType;->$values()[Lkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType; +HSPLkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType;->()V +HSPLkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType;->(Ljava/lang/String;ILjava/lang/String;)V +HSPLkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType;->getArrayTypeName()Lkotlin/reflect/jvm/internal/impl/name/Name; +HSPLkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType;->getTypeName()Lkotlin/reflect/jvm/internal/impl/name/Name; +HSPLkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType;->values()[Lkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType; +Lkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType$Companion; +HSPLkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType$Companion;->()V +HSPLkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType$arrayTypeFqName$2; +HSPLkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType$arrayTypeFqName$2;->(Lkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType;)V +Lkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType$typeFqName$2; +HSPLkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType$typeFqName$2;->(Lkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType;)V +Lkotlin/reflect/jvm/internal/impl/builtins/StandardNames; +HSPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames;->()V +HSPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames;->()V +HSPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames;->getFunctionClassId(I)Lkotlin/reflect/jvm/internal/impl/name/ClassId; +HSPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames;->getFunctionName(I)Ljava/lang/String; +HSPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames;->getPrimitiveFqName(Lkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType;)Lkotlin/reflect/jvm/internal/impl/name/FqName; +Lkotlin/reflect/jvm/internal/impl/builtins/StandardNames$FqNames; +HSPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames$FqNames;->()V +HSPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames$FqNames;->()V +HSPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames$FqNames;->annotationName(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/FqName; +HSPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames$FqNames;->collectionsFqName(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/FqName; +HSPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames$FqNames;->fqName(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/FqName; +HSPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames$FqNames;->fqNameUnsafe(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe; +HSPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames$FqNames;->internalName(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/FqName; +HSPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames$FqNames;->rangesFqName(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe; +HSPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames$FqNames;->reflect(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe; +Lkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind; +HSPLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind;->(Lkotlin/reflect/jvm/internal/impl/name/FqName;Ljava/lang/String;ZLkotlin/reflect/jvm/internal/impl/name/ClassId;)V +HSPLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind;->getClassNamePrefix()Ljava/lang/String; +HSPLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind;->getPackageFqName()Lkotlin/reflect/jvm/internal/impl/name/FqName; +Lkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$Function; +HSPLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$Function;->()V +HSPLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$Function;->()V +Lkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$KFunction; +HSPLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$KFunction;->()V +HSPLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$KFunction;->()V +Lkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$KSuspendFunction; +HSPLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$KSuspendFunction;->()V +HSPLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$KSuspendFunction;->()V +Lkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$SuspendFunction; +HSPLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$SuspendFunction;->()V +HSPLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$SuspendFunction;->()V +Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap; +HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap;->()V +HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap;->()V +HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap;->add(Lkotlin/reflect/jvm/internal/impl/name/ClassId;Lkotlin/reflect/jvm/internal/impl/name/ClassId;)V +HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap;->addJavaToKotlin(Lkotlin/reflect/jvm/internal/impl/name/ClassId;Lkotlin/reflect/jvm/internal/impl/name/ClassId;)V +HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap;->addKotlinToJava(Lkotlin/reflect/jvm/internal/impl/name/FqName;Lkotlin/reflect/jvm/internal/impl/name/ClassId;)V +HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap;->addMapping(Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap$PlatformMutabilityMapping;)V +HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap;->addTopLevel(Ljava/lang/Class;Lkotlin/reflect/jvm/internal/impl/name/FqName;)V +HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap;->addTopLevel(Ljava/lang/Class;Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;)V +HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap;->classId(Ljava/lang/Class;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; +HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap;->mapJavaToKotlin(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; +Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap$PlatformMutabilityMapping; +HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap$PlatformMutabilityMapping;->(Lkotlin/reflect/jvm/internal/impl/name/ClassId;Lkotlin/reflect/jvm/internal/impl/name/ClassId;Lkotlin/reflect/jvm/internal/impl/name/ClassId;)V +HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap$PlatformMutabilityMapping;->component1()Lkotlin/reflect/jvm/internal/impl/name/ClassId; +HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap$PlatformMutabilityMapping;->component2()Lkotlin/reflect/jvm/internal/impl/name/ClassId; +HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap$PlatformMutabilityMapping;->component3()Lkotlin/reflect/jvm/internal/impl/name/ClassId; +Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectClassUtilKt; +HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectClassUtilKt;->()V +HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectClassUtilKt;->getClassId(Ljava/lang/Class;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; +Lkotlin/reflect/jvm/internal/impl/name/ClassId; +HSPLkotlin/reflect/jvm/internal/impl/name/ClassId;->()V +HSPLkotlin/reflect/jvm/internal/impl/name/ClassId;->(Lkotlin/reflect/jvm/internal/impl/name/FqName;Lkotlin/reflect/jvm/internal/impl/name/FqName;Z)V +HSPLkotlin/reflect/jvm/internal/impl/name/ClassId;->(Lkotlin/reflect/jvm/internal/impl/name/FqName;Lkotlin/reflect/jvm/internal/impl/name/Name;)V +HSPLkotlin/reflect/jvm/internal/impl/name/ClassId;->asSingleFqName()Lkotlin/reflect/jvm/internal/impl/name/FqName; +HSPLkotlin/reflect/jvm/internal/impl/name/ClassId;->createNestedClassId(Lkotlin/reflect/jvm/internal/impl/name/Name;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; +HSPLkotlin/reflect/jvm/internal/impl/name/ClassId;->getPackageFqName()Lkotlin/reflect/jvm/internal/impl/name/FqName; +HSPLkotlin/reflect/jvm/internal/impl/name/ClassId;->getRelativeClassName()Lkotlin/reflect/jvm/internal/impl/name/FqName; +HSPLkotlin/reflect/jvm/internal/impl/name/ClassId;->getShortClassName()Lkotlin/reflect/jvm/internal/impl/name/Name; +HSPLkotlin/reflect/jvm/internal/impl/name/ClassId;->hashCode()I +HSPLkotlin/reflect/jvm/internal/impl/name/ClassId;->isLocal()Z +HSPLkotlin/reflect/jvm/internal/impl/name/ClassId;->topLevel(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; +Lkotlin/reflect/jvm/internal/impl/name/FqName; +HSPLkotlin/reflect/jvm/internal/impl/name/FqName;->()V +HSPLkotlin/reflect/jvm/internal/impl/name/FqName;->(Ljava/lang/String;)V +HSPLkotlin/reflect/jvm/internal/impl/name/FqName;->(Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;)V +HSPLkotlin/reflect/jvm/internal/impl/name/FqName;->(Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;Lkotlin/reflect/jvm/internal/impl/name/FqName;)V +HSPLkotlin/reflect/jvm/internal/impl/name/FqName;->asString()Ljava/lang/String; +HSPLkotlin/reflect/jvm/internal/impl/name/FqName;->child(Lkotlin/reflect/jvm/internal/impl/name/Name;)Lkotlin/reflect/jvm/internal/impl/name/FqName; +HSPLkotlin/reflect/jvm/internal/impl/name/FqName;->equals(Ljava/lang/Object;)Z +HSPLkotlin/reflect/jvm/internal/impl/name/FqName;->hashCode()I +HSPLkotlin/reflect/jvm/internal/impl/name/FqName;->isRoot()Z +HSPLkotlin/reflect/jvm/internal/impl/name/FqName;->parent()Lkotlin/reflect/jvm/internal/impl/name/FqName; +HSPLkotlin/reflect/jvm/internal/impl/name/FqName;->shortName()Lkotlin/reflect/jvm/internal/impl/name/Name; +HSPLkotlin/reflect/jvm/internal/impl/name/FqName;->toString()Ljava/lang/String; +HSPLkotlin/reflect/jvm/internal/impl/name/FqName;->toUnsafe()Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe; +HSPLkotlin/reflect/jvm/internal/impl/name/FqName;->topLevel(Lkotlin/reflect/jvm/internal/impl/name/Name;)Lkotlin/reflect/jvm/internal/impl/name/FqName; +Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe; +HSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->()V +HSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->(Ljava/lang/String;)V +HSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->(Ljava/lang/String;Lkotlin/reflect/jvm/internal/impl/name/FqName;)V +HSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->(Ljava/lang/String;Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;Lkotlin/reflect/jvm/internal/impl/name/Name;)V +HSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->asString()Ljava/lang/String; +HSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->child(Lkotlin/reflect/jvm/internal/impl/name/Name;)Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe; +HSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->compute()V +HSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->equals(Ljava/lang/Object;)Z +HSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->hashCode()I +HSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->isRoot()Z +HSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->parent()Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe; +HSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->shortName()Lkotlin/reflect/jvm/internal/impl/name/Name; +HSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->toSafe()Lkotlin/reflect/jvm/internal/impl/name/FqName; +HSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->toString()Ljava/lang/String; +HSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->topLevel(Lkotlin/reflect/jvm/internal/impl/name/Name;)Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe; +Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe$1; +HSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe$1;->()V +Lkotlin/reflect/jvm/internal/impl/name/FqNamesUtilKt; +HSPLkotlin/reflect/jvm/internal/impl/name/FqNamesUtilKt;->isSubpackageOf(Ljava/lang/String;Ljava/lang/String;)Z +HSPLkotlin/reflect/jvm/internal/impl/name/FqNamesUtilKt;->isSubpackageOf(Lkotlin/reflect/jvm/internal/impl/name/FqName;Lkotlin/reflect/jvm/internal/impl/name/FqName;)Z +HSPLkotlin/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; +Lkotlin/reflect/jvm/internal/impl/name/Name; +HSPLkotlin/reflect/jvm/internal/impl/name/Name;->(Ljava/lang/String;Z)V +HSPLkotlin/reflect/jvm/internal/impl/name/Name;->asString()Ljava/lang/String; +HSPLkotlin/reflect/jvm/internal/impl/name/Name;->getIdentifier()Ljava/lang/String; +HSPLkotlin/reflect/jvm/internal/impl/name/Name;->guessByFirstCharacter(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/Name; +HSPLkotlin/reflect/jvm/internal/impl/name/Name;->hashCode()I +HSPLkotlin/reflect/jvm/internal/impl/name/Name;->identifier(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/Name; +HSPLkotlin/reflect/jvm/internal/impl/name/Name;->special(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/Name; +Lkotlin/reflect/jvm/internal/impl/name/SpecialNames; +HSPLkotlin/reflect/jvm/internal/impl/name/SpecialNames;->()V +HSPLkotlin/reflect/jvm/internal/impl/name/SpecialNames;->()V +Lkotlin/reflect/jvm/internal/impl/name/StandardClassIds; +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->()V +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->()V +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->getArray()Lkotlin/reflect/jvm/internal/impl/name/ClassId; +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->getBASE_ANNOTATION_PACKAGE()Lkotlin/reflect/jvm/internal/impl/name/FqName; +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->getBASE_COLLECTIONS_PACKAGE()Lkotlin/reflect/jvm/internal/impl/name/FqName; +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->getBASE_COROUTINES_PACKAGE()Lkotlin/reflect/jvm/internal/impl/name/FqName; +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->getBASE_ENUMS_PACKAGE()Lkotlin/reflect/jvm/internal/impl/name/FqName; +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->getBASE_KOTLIN_PACKAGE()Lkotlin/reflect/jvm/internal/impl/name/FqName; +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->getBASE_RANGES_PACKAGE()Lkotlin/reflect/jvm/internal/impl/name/FqName; +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->getBASE_REFLECT_PACKAGE()Lkotlin/reflect/jvm/internal/impl/name/FqName; +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->getKClass()Lkotlin/reflect/jvm/internal/impl/name/ClassId; +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->getKFunction()Lkotlin/reflect/jvm/internal/impl/name/ClassId; +Lkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt; +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->()V +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->access$annotationId(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->access$baseId(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->access$collectionsId(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->access$coroutinesId(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->access$enumsId(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->access$inverseMap(Ljava/util/Map;)Ljava/util/Map; +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->access$primitiveArrayId(Lkotlin/reflect/jvm/internal/impl/name/Name;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->access$rangesId(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->access$reflectId(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->access$unsignedId(Lkotlin/reflect/jvm/internal/impl/name/ClassId;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->annotationId(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->baseId(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->collectionsId(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->coroutinesId(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->enumsId(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->inverseMap(Ljava/util/Map;)Ljava/util/Map; +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->primitiveArrayId(Lkotlin/reflect/jvm/internal/impl/name/Name;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->rangesId(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->reflectId(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->unsignedId(Lkotlin/reflect/jvm/internal/impl/name/ClassId;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; +Lkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType; +HSPLkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType;->()V +HSPLkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType;->(Ljava/lang/String;ILkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V +HSPLkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType;->get(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType; +HSPLkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType;->getDesc()Ljava/lang/String; +HSPLkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType;->getJavaKeywordName()Ljava/lang/String; +HSPLkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType;->getPrimitiveType()Lkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType; +HSPLkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType;->getWrapperFqName()Lkotlin/reflect/jvm/internal/impl/name/FqName; +HSPLkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType;->values()[Lkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType; +Lkotlin/reflect/jvm/internal/impl/utils/CollectionsKt; +HSPLkotlin/reflect/jvm/internal/impl/utils/CollectionsKt;->capacity(I)I +HSPLkotlin/reflect/jvm/internal/impl/utils/CollectionsKt;->newHashMapWithExpectedSize(I)Ljava/util/HashMap; +HSPLkotlin/reflect/jvm/internal/impl/utils/CollectionsKt;->newHashSetWithExpectedSize(I)Ljava/util/HashSet; +Lkotlin/sequences/DropTakeSequence; +Lkotlin/sequences/EmptySequence; +HSPLkotlin/sequences/EmptySequence;->()V +HSPLkotlin/sequences/EmptySequence;->()V +HSPLkotlin/sequences/EmptySequence;->iterator()Ljava/util/Iterator; +Lkotlin/sequences/FilteringSequence; +HSPLkotlin/sequences/FilteringSequence;->(Lkotlin/sequences/Sequence;ZLkotlin/jvm/functions/Function1;)V +HSPLkotlin/sequences/FilteringSequence;->access$getPredicate$p(Lkotlin/sequences/FilteringSequence;)Lkotlin/jvm/functions/Function1; +HSPLkotlin/sequences/FilteringSequence;->access$getSendWhen$p(Lkotlin/sequences/FilteringSequence;)Z +HSPLkotlin/sequences/FilteringSequence;->access$getSequence$p(Lkotlin/sequences/FilteringSequence;)Lkotlin/sequences/Sequence; +HSPLkotlin/sequences/FilteringSequence;->iterator()Ljava/util/Iterator; +Lkotlin/sequences/FilteringSequence$iterator$1; +HSPLkotlin/sequences/FilteringSequence$iterator$1;->(Lkotlin/sequences/FilteringSequence;)V +HSPLkotlin/sequences/FilteringSequence$iterator$1;->calcNext()V +HSPLkotlin/sequences/FilteringSequence$iterator$1;->hasNext()Z +HSPLkotlin/sequences/FilteringSequence$iterator$1;->next()Ljava/lang/Object; +Lkotlin/sequences/FlatteningSequence; +HSPLkotlin/sequences/FlatteningSequence;->(Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V +HSPLkotlin/sequences/FlatteningSequence;->access$getIterator$p(Lkotlin/sequences/FlatteningSequence;)Lkotlin/jvm/functions/Function1; +HSPLkotlin/sequences/FlatteningSequence;->access$getSequence$p(Lkotlin/sequences/FlatteningSequence;)Lkotlin/sequences/Sequence; +HSPLkotlin/sequences/FlatteningSequence;->access$getTransformer$p(Lkotlin/sequences/FlatteningSequence;)Lkotlin/jvm/functions/Function1; +HSPLkotlin/sequences/FlatteningSequence;->iterator()Ljava/util/Iterator; +Lkotlin/sequences/FlatteningSequence$iterator$1; +HSPLkotlin/sequences/FlatteningSequence$iterator$1;->(Lkotlin/sequences/FlatteningSequence;)V +HSPLkotlin/sequences/FlatteningSequence$iterator$1;->ensureItemIterator()Z +HSPLkotlin/sequences/FlatteningSequence$iterator$1;->hasNext()Z +HSPLkotlin/sequences/FlatteningSequence$iterator$1;->next()Ljava/lang/Object; +Lkotlin/sequences/GeneratorSequence; +HSPLkotlin/sequences/GeneratorSequence;->(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;)V +HSPLkotlin/sequences/GeneratorSequence;->access$getGetInitialValue$p(Lkotlin/sequences/GeneratorSequence;)Lkotlin/jvm/functions/Function0; +HSPLkotlin/sequences/GeneratorSequence;->access$getGetNextValue$p(Lkotlin/sequences/GeneratorSequence;)Lkotlin/jvm/functions/Function1; +HSPLkotlin/sequences/GeneratorSequence;->iterator()Ljava/util/Iterator; +Lkotlin/sequences/GeneratorSequence$iterator$1; +HSPLkotlin/sequences/GeneratorSequence$iterator$1;->(Lkotlin/sequences/GeneratorSequence;)V +HSPLkotlin/sequences/GeneratorSequence$iterator$1;->calcNext()V +HSPLkotlin/sequences/GeneratorSequence$iterator$1;->hasNext()Z +HSPLkotlin/sequences/GeneratorSequence$iterator$1;->next()Ljava/lang/Object; +Lkotlin/sequences/Sequence; +Lkotlin/sequences/SequenceBuilderIterator; +HSPLkotlin/sequences/SequenceBuilderIterator;->()V +HSPLkotlin/sequences/SequenceBuilderIterator;->getContext()Lkotlin/coroutines/CoroutineContext; +HSPLkotlin/sequences/SequenceBuilderIterator;->hasNext()Z +HSPLkotlin/sequences/SequenceBuilderIterator;->next()Ljava/lang/Object; +HSPLkotlin/sequences/SequenceBuilderIterator;->resumeWith(Ljava/lang/Object;)V +HSPLkotlin/sequences/SequenceBuilderIterator;->setNextStep(Lkotlin/coroutines/Continuation;)V +HSPLkotlin/sequences/SequenceBuilderIterator;->yield(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlin/sequences/SequenceScope; +HSPLkotlin/sequences/SequenceScope;->()V +Lkotlin/sequences/SequencesKt; +Lkotlin/sequences/SequencesKt__SequenceBuilderKt; +HSPLkotlin/sequences/SequencesKt__SequenceBuilderKt;->iterator(Lkotlin/jvm/functions/Function2;)Ljava/util/Iterator; +HSPLkotlin/sequences/SequencesKt__SequenceBuilderKt;->sequence(Lkotlin/jvm/functions/Function2;)Lkotlin/sequences/Sequence; +Lkotlin/sequences/SequencesKt__SequenceBuilderKt$sequence$$inlined$Sequence$1; +HSPLkotlin/sequences/SequencesKt__SequenceBuilderKt$sequence$$inlined$Sequence$1;->(Lkotlin/jvm/functions/Function2;)V +HSPLkotlin/sequences/SequencesKt__SequenceBuilderKt$sequence$$inlined$Sequence$1;->iterator()Ljava/util/Iterator; +Lkotlin/sequences/SequencesKt__SequencesJVMKt; +Lkotlin/sequences/SequencesKt__SequencesKt; +HSPLkotlin/sequences/SequencesKt__SequencesKt;->emptySequence()Lkotlin/sequences/Sequence; +HSPLkotlin/sequences/SequencesKt__SequencesKt;->generateSequence(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence; +Lkotlin/sequences/SequencesKt__SequencesKt$generateSequence$2; +HSPLkotlin/sequences/SequencesKt__SequencesKt$generateSequence$2;->(Ljava/lang/Object;)V +HSPLkotlin/sequences/SequencesKt__SequencesKt$generateSequence$2;->invoke()Ljava/lang/Object; +Lkotlin/sequences/SequencesKt___SequencesJvmKt; +Lkotlin/sequences/SequencesKt___SequencesKt; +HSPLkotlin/sequences/SequencesKt___SequencesKt;->filter(Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence; +HSPLkotlin/sequences/SequencesKt___SequencesKt;->filterNot(Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence; +HSPLkotlin/sequences/SequencesKt___SequencesKt;->filterNotNull(Lkotlin/sequences/Sequence;)Lkotlin/sequences/Sequence; +HSPLkotlin/sequences/SequencesKt___SequencesKt;->firstOrNull(Lkotlin/sequences/Sequence;)Ljava/lang/Object; +HSPLkotlin/sequences/SequencesKt___SequencesKt;->flatMap(Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence; +HSPLkotlin/sequences/SequencesKt___SequencesKt;->flatMapIterable(Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence; +HSPLkotlin/sequences/SequencesKt___SequencesKt;->map(Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence; +HSPLkotlin/sequences/SequencesKt___SequencesKt;->mapNotNull(Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence; +HSPLkotlin/sequences/SequencesKt___SequencesKt;->sortedWith(Lkotlin/sequences/Sequence;Ljava/util/Comparator;)Lkotlin/sequences/Sequence; +HSPLkotlin/sequences/SequencesKt___SequencesKt;->take(Lkotlin/sequences/Sequence;I)Lkotlin/sequences/Sequence; +HSPLkotlin/sequences/SequencesKt___SequencesKt;->toCollection(Lkotlin/sequences/Sequence;Ljava/util/Collection;)Ljava/util/Collection; +HSPLkotlin/sequences/SequencesKt___SequencesKt;->toList(Lkotlin/sequences/Sequence;)Ljava/util/List; +HSPLkotlin/sequences/SequencesKt___SequencesKt;->toMutableList(Lkotlin/sequences/Sequence;)Ljava/util/List; +HSPLkotlin/sequences/SequencesKt___SequencesKt;->toSet(Lkotlin/sequences/Sequence;)Ljava/util/Set; +Lkotlin/sequences/SequencesKt___SequencesKt$filterNotNull$1; +HSPLkotlin/sequences/SequencesKt___SequencesKt$filterNotNull$1;->()V +HSPLkotlin/sequences/SequencesKt___SequencesKt$filterNotNull$1;->()V +HSPLkotlin/sequences/SequencesKt___SequencesKt$filterNotNull$1;->invoke(Ljava/lang/Object;)Ljava/lang/Boolean; +HSPLkotlin/sequences/SequencesKt___SequencesKt$filterNotNull$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlin/sequences/SequencesKt___SequencesKt$flatMap$1; +HSPLkotlin/sequences/SequencesKt___SequencesKt$flatMap$1;->()V +HSPLkotlin/sequences/SequencesKt___SequencesKt$flatMap$1;->()V +Lkotlin/sequences/SequencesKt___SequencesKt$flatMap$2; +HSPLkotlin/sequences/SequencesKt___SequencesKt$flatMap$2;->()V +HSPLkotlin/sequences/SequencesKt___SequencesKt$flatMap$2;->()V +HSPLkotlin/sequences/SequencesKt___SequencesKt$flatMap$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlin/sequences/SequencesKt___SequencesKt$flatMap$2;->invoke(Lkotlin/sequences/Sequence;)Ljava/util/Iterator; +Lkotlin/sequences/SequencesKt___SequencesKt$sortedWith$1; +HSPLkotlin/sequences/SequencesKt___SequencesKt$sortedWith$1;->(Lkotlin/sequences/Sequence;Ljava/util/Comparator;)V +HSPLkotlin/sequences/SequencesKt___SequencesKt$sortedWith$1;->iterator()Ljava/util/Iterator; +Lkotlin/sequences/TakeSequence; +HSPLkotlin/sequences/TakeSequence;->(Lkotlin/sequences/Sequence;I)V +HSPLkotlin/sequences/TakeSequence;->access$getCount$p(Lkotlin/sequences/TakeSequence;)I +HSPLkotlin/sequences/TakeSequence;->access$getSequence$p(Lkotlin/sequences/TakeSequence;)Lkotlin/sequences/Sequence; +HSPLkotlin/sequences/TakeSequence;->iterator()Ljava/util/Iterator; +Lkotlin/sequences/TakeSequence$iterator$1; +HSPLkotlin/sequences/TakeSequence$iterator$1;->(Lkotlin/sequences/TakeSequence;)V +HSPLkotlin/sequences/TakeSequence$iterator$1;->hasNext()Z +Lkotlin/sequences/TransformingSequence; +HSPLkotlin/sequences/TransformingSequence;->(Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function1;)V +HSPLkotlin/sequences/TransformingSequence;->access$getSequence$p(Lkotlin/sequences/TransformingSequence;)Lkotlin/sequences/Sequence; +HSPLkotlin/sequences/TransformingSequence;->access$getTransformer$p(Lkotlin/sequences/TransformingSequence;)Lkotlin/jvm/functions/Function1; +HSPLkotlin/sequences/TransformingSequence;->iterator()Ljava/util/Iterator; +Lkotlin/sequences/TransformingSequence$iterator$1; +HSPLkotlin/sequences/TransformingSequence$iterator$1;->(Lkotlin/sequences/TransformingSequence;)V +HSPLkotlin/sequences/TransformingSequence$iterator$1;->hasNext()Z +HSPLkotlin/sequences/TransformingSequence$iterator$1;->next()Ljava/lang/Object; +Lkotlin/text/CharsKt; +Lkotlin/text/CharsKt__CharJVMKt; +HSPLkotlin/text/CharsKt__CharJVMKt;->checkRadix(I)I +HSPLkotlin/text/CharsKt__CharJVMKt;->digitOf(CI)I +HSPLkotlin/text/CharsKt__CharJVMKt;->isWhitespace(C)Z +Lkotlin/text/CharsKt__CharKt; +HSPLkotlin/text/CharsKt__CharKt;->equals(CCZ)Z +Lkotlin/text/Charsets; +HSPLkotlin/text/Charsets;->()V +HSPLkotlin/text/Charsets;->()V +Lkotlin/text/Regex; +HSPLkotlin/text/Regex;->()V +HSPLkotlin/text/Regex;->(Ljava/lang/String;)V +HSPLkotlin/text/Regex;->(Ljava/util/regex/Pattern;)V +HSPLkotlin/text/Regex;->matches(Ljava/lang/CharSequence;)Z +Lkotlin/text/Regex$Companion; +HSPLkotlin/text/Regex$Companion;->()V +HSPLkotlin/text/Regex$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlin/text/ScreenFloatValueRegEx; +HSPLkotlin/text/ScreenFloatValueRegEx;->()V +HSPLkotlin/text/ScreenFloatValueRegEx;->()V +Lkotlin/text/StringsKt; +Lkotlin/text/StringsKt__AppendableKt; +HSPLkotlin/text/StringsKt__AppendableKt;->appendElement(Ljava/lang/Appendable;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)V +Lkotlin/text/StringsKt__IndentKt; +Lkotlin/text/StringsKt__RegexExtensionsJVMKt; +Lkotlin/text/StringsKt__RegexExtensionsKt; +Lkotlin/text/StringsKt__StringBuilderJVMKt; +Lkotlin/text/StringsKt__StringBuilderKt; +Lkotlin/text/StringsKt__StringNumberConversionsJVMKt; +HSPLkotlin/text/StringsKt__StringNumberConversionsJVMKt;->toDoubleOrNull(Ljava/lang/String;)Ljava/lang/Double; +Lkotlin/text/StringsKt__StringNumberConversionsKt; +HSPLkotlin/text/StringsKt__StringNumberConversionsKt;->toLongOrNull(Ljava/lang/String;)Ljava/lang/Long; +HSPLkotlin/text/StringsKt__StringNumberConversionsKt;->toLongOrNull(Ljava/lang/String;I)Ljava/lang/Long; +Lkotlin/text/StringsKt__StringsJVMKt; +HSPLkotlin/text/StringsKt__StringsJVMKt;->encodeToByteArray(Ljava/lang/String;)[B +HSPLkotlin/text/StringsKt__StringsJVMKt;->endsWith$default(Ljava/lang/String;Ljava/lang/String;ZILjava/lang/Object;)Z +HSPLkotlin/text/StringsKt__StringsJVMKt;->endsWith(Ljava/lang/String;Ljava/lang/String;Z)Z +HSPLkotlin/text/StringsKt__StringsJVMKt;->equals(Ljava/lang/String;Ljava/lang/String;Z)Z +HSPLkotlin/text/StringsKt__StringsJVMKt;->isBlank(Ljava/lang/CharSequence;)Z +HSPLkotlin/text/StringsKt__StringsJVMKt;->repeat(Ljava/lang/CharSequence;I)Ljava/lang/String; +HSPLkotlin/text/StringsKt__StringsJVMKt;->replace$default(Ljava/lang/String;CCZILjava/lang/Object;)Ljava/lang/String; +HSPLkotlin/text/StringsKt__StringsJVMKt;->replace(Ljava/lang/String;CCZ)Ljava/lang/String; +HSPLkotlin/text/StringsKt__StringsJVMKt;->startsWith$default(Ljava/lang/String;Ljava/lang/String;ZILjava/lang/Object;)Z +HSPLkotlin/text/StringsKt__StringsJVMKt;->startsWith(Ljava/lang/String;Ljava/lang/String;Z)Z +Lkotlin/text/StringsKt__StringsKt; +HSPLkotlin/text/StringsKt__StringsKt;->contains$default(Ljava/lang/CharSequence;CZILjava/lang/Object;)Z +HSPLkotlin/text/StringsKt__StringsKt;->contains(Ljava/lang/CharSequence;CZ)Z +HSPLkotlin/text/StringsKt__StringsKt;->endsWith$default(Ljava/lang/CharSequence;Ljava/lang/CharSequence;ZILjava/lang/Object;)Z +HSPLkotlin/text/StringsKt__StringsKt;->endsWith(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Z)Z +HSPLkotlin/text/StringsKt__StringsKt;->getIndices(Ljava/lang/CharSequence;)Lkotlin/ranges/IntRange; +HSPLkotlin/text/StringsKt__StringsKt;->getLastIndex(Ljava/lang/CharSequence;)I +HSPLkotlin/text/StringsKt__StringsKt;->indexOf$default(Ljava/lang/CharSequence;CIZILjava/lang/Object;)I +HSPLkotlin/text/StringsKt__StringsKt;->indexOf(Ljava/lang/CharSequence;CIZ)I +HSPLkotlin/text/StringsKt__StringsKt;->indexOf(Ljava/lang/CharSequence;Ljava/lang/String;IZ)I +HSPLkotlin/text/StringsKt__StringsKt;->indexOfAny(Ljava/lang/CharSequence;[CIZ)I +HSPLkotlin/text/StringsKt__StringsKt;->lastIndexOf$default(Ljava/lang/CharSequence;CIZILjava/lang/Object;)I +HSPLkotlin/text/StringsKt__StringsKt;->lastIndexOf(Ljava/lang/CharSequence;CIZ)I +HSPLkotlin/text/StringsKt__StringsKt;->padStart(Ljava/lang/CharSequence;IC)Ljava/lang/CharSequence; +HSPLkotlin/text/StringsKt__StringsKt;->padStart(Ljava/lang/String;IC)Ljava/lang/String; +HSPLkotlin/text/StringsKt__StringsKt;->removePrefix(Ljava/lang/String;Ljava/lang/CharSequence;)Ljava/lang/String; +HSPLkotlin/text/StringsKt__StringsKt;->removeSuffix(Ljava/lang/String;Ljava/lang/CharSequence;)Ljava/lang/String; +HSPLkotlin/text/StringsKt__StringsKt;->requireNonNegativeLimit(I)V +HSPLkotlin/text/StringsKt__StringsKt;->split$StringsKt__StringsKt(Ljava/lang/CharSequence;Ljava/lang/String;ZI)Ljava/util/List; +HSPLkotlin/text/StringsKt__StringsKt;->split$default(Ljava/lang/CharSequence;[Ljava/lang/String;ZIILjava/lang/Object;)Ljava/util/List; +HSPLkotlin/text/StringsKt__StringsKt;->split(Ljava/lang/CharSequence;[Ljava/lang/String;ZI)Ljava/util/List; +HSPLkotlin/text/StringsKt__StringsKt;->startsWith$default(Ljava/lang/CharSequence;Ljava/lang/CharSequence;ZILjava/lang/Object;)Z +HSPLkotlin/text/StringsKt__StringsKt;->startsWith(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Z)Z +HSPLkotlin/text/StringsKt__StringsKt;->substringAfterLast(Ljava/lang/String;CLjava/lang/String;)Ljava/lang/String; +HSPLkotlin/text/StringsKt__StringsKt;->toBooleanStrictOrNull(Ljava/lang/String;)Ljava/lang/Boolean; +HSPLkotlin/text/StringsKt__StringsKt;->trim(Ljava/lang/CharSequence;)Ljava/lang/CharSequence; +Lkotlin/text/StringsKt___StringsJvmKt; +Lkotlin/text/StringsKt___StringsKt; +Lkotlin/text/UStringsKt; +HSPLkotlin/text/UStringsKt;->toULongOrNull(Ljava/lang/String;)Lkotlin/ULong; +HSPLkotlin/text/UStringsKt;->toULongOrNull(Ljava/lang/String;I)Lkotlin/ULong; +Lkotlin/time/Duration; +HSPLkotlin/time/Duration;->()V +HSPLkotlin/time/Duration;->appendFractional-impl(JLjava/lang/StringBuilder;IIILjava/lang/String;Z)V +HSPLkotlin/time/Duration;->constructor-impl(J)J +HSPLkotlin/time/Duration;->getAbsoluteValue-UwyO8pc(J)J +HSPLkotlin/time/Duration;->getHoursComponent-impl(J)I +HSPLkotlin/time/Duration;->getInWholeDays-impl(J)J +HSPLkotlin/time/Duration;->getInWholeHours-impl(J)J +HSPLkotlin/time/Duration;->getInWholeMilliseconds-impl(J)J +HSPLkotlin/time/Duration;->getInWholeMinutes-impl(J)J +HSPLkotlin/time/Duration;->getInWholeSeconds-impl(J)J +HSPLkotlin/time/Duration;->getMinutesComponent-impl(J)I +HSPLkotlin/time/Duration;->getNanosecondsComponent-impl(J)I +HSPLkotlin/time/Duration;->getSecondsComponent-impl(J)I +HSPLkotlin/time/Duration;->getStorageUnit-impl(J)Lkotlin/time/DurationUnit; +HSPLkotlin/time/Duration;->getValue-impl(J)J +HSPLkotlin/time/Duration;->isInMillis-impl(J)Z +HSPLkotlin/time/Duration;->isInNanos-impl(J)Z +HSPLkotlin/time/Duration;->isInfinite-impl(J)Z +HSPLkotlin/time/Duration;->isNegative-impl(J)Z +HSPLkotlin/time/Duration;->isPositive-impl(J)Z +HSPLkotlin/time/Duration;->plus-LRDsOJo(JJ)J +HSPLkotlin/time/Duration;->toLong-impl(JLkotlin/time/DurationUnit;)J +HSPLkotlin/time/Duration;->toString-impl(J)Ljava/lang/String; +Lkotlin/time/Duration$Companion; +HSPLkotlin/time/Duration$Companion;->()V +HSPLkotlin/time/Duration$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlin/time/DurationJvmKt; +HSPLkotlin/time/DurationJvmKt;->()V +HSPLkotlin/time/DurationJvmKt;->getDurationAssertionsEnabled()Z +Lkotlin/time/DurationKt; +HSPLkotlin/time/DurationKt;->access$durationOfMillis(J)J +HSPLkotlin/time/DurationKt;->access$durationOfNanosNormalized(J)J +HSPLkotlin/time/DurationKt;->durationOfMillis(J)J +HSPLkotlin/time/DurationKt;->durationOfNanos(J)J +HSPLkotlin/time/DurationKt;->durationOfNanosNormalized(J)J +HSPLkotlin/time/DurationKt;->toDuration(ILkotlin/time/DurationUnit;)J +HSPLkotlin/time/DurationKt;->toDuration(JLkotlin/time/DurationUnit;)J +Lkotlin/time/DurationUnit; +HSPLkotlin/time/DurationUnit;->$values()[Lkotlin/time/DurationUnit; +HSPLkotlin/time/DurationUnit;->()V +HSPLkotlin/time/DurationUnit;->(Ljava/lang/String;ILjava/util/concurrent/TimeUnit;)V +HSPLkotlin/time/DurationUnit;->getTimeUnit$kotlin_stdlib()Ljava/util/concurrent/TimeUnit; +Lkotlin/time/DurationUnitKt; +Lkotlin/time/DurationUnitKt__DurationUnitJvmKt; +HSPLkotlin/time/DurationUnitKt__DurationUnitJvmKt;->convertDurationUnit(JLkotlin/time/DurationUnit;Lkotlin/time/DurationUnit;)J +HSPLkotlin/time/DurationUnitKt__DurationUnitJvmKt;->convertDurationUnitOverflow(JLkotlin/time/DurationUnit;Lkotlin/time/DurationUnit;)J +Lkotlin/time/DurationUnitKt__DurationUnitKt; +Lkotlinx/collections/immutable/ExtensionsKt; +HSPLkotlinx/collections/immutable/ExtensionsKt;->persistentListOf()Lkotlinx/collections/immutable/PersistentList; +HSPLkotlinx/collections/immutable/ExtensionsKt;->persistentListOf([Ljava/lang/Object;)Lkotlinx/collections/immutable/PersistentList; +HSPLkotlinx/collections/immutable/ExtensionsKt;->persistentMapOf()Lkotlinx/collections/immutable/PersistentMap; +HSPLkotlinx/collections/immutable/ExtensionsKt;->plus(Lkotlinx/collections/immutable/PersistentList;Lkotlin/sequences/Sequence;)Lkotlinx/collections/immutable/PersistentList; +HSPLkotlinx/collections/immutable/ExtensionsKt;->toImmutableList(Lkotlin/sequences/Sequence;)Lkotlinx/collections/immutable/ImmutableList; +HSPLkotlinx/collections/immutable/ExtensionsKt;->toPersistentList(Lkotlin/sequences/Sequence;)Lkotlinx/collections/immutable/PersistentList; +Lkotlinx/collections/immutable/ImmutableCollection; +Lkotlinx/collections/immutable/ImmutableList; +Lkotlinx/collections/immutable/ImmutableList$DefaultImpls; +HSPLkotlinx/collections/immutable/ImmutableList$DefaultImpls;->subList(Lkotlinx/collections/immutable/ImmutableList;II)Lkotlinx/collections/immutable/ImmutableList; +Lkotlinx/collections/immutable/ImmutableList$SubList; +HSPLkotlinx/collections/immutable/ImmutableList$SubList;->(Lkotlinx/collections/immutable/ImmutableList;II)V +HSPLkotlinx/collections/immutable/ImmutableList$SubList;->get(I)Ljava/lang/Object; +HSPLkotlinx/collections/immutable/ImmutableList$SubList;->getSize()I +HSPLkotlinx/collections/immutable/ImmutableList$SubList;->subList(II)Lkotlinx/collections/immutable/ImmutableList; +Lkotlinx/collections/immutable/ImmutableMap; +Lkotlinx/collections/immutable/ImmutableSet; +Lkotlinx/collections/immutable/PersistentCollection; +Lkotlinx/collections/immutable/PersistentCollection$Builder; +Lkotlinx/collections/immutable/PersistentList; +Lkotlinx/collections/immutable/PersistentList$Builder; +Lkotlinx/collections/immutable/PersistentList$DefaultImpls; +HSPLkotlinx/collections/immutable/PersistentList$DefaultImpls;->subList(Lkotlinx/collections/immutable/PersistentList;II)Lkotlinx/collections/immutable/ImmutableList; +Lkotlinx/collections/immutable/PersistentMap; +Lkotlinx/collections/immutable/implementations/immutableList/AbstractListIterator; +HSPLkotlinx/collections/immutable/implementations/immutableList/AbstractListIterator;->(II)V +HSPLkotlinx/collections/immutable/implementations/immutableList/AbstractListIterator;->getIndex()I +HSPLkotlinx/collections/immutable/implementations/immutableList/AbstractListIterator;->hasNext()Z +HSPLkotlinx/collections/immutable/implementations/immutableList/AbstractListIterator;->setIndex(I)V +Lkotlinx/collections/immutable/implementations/immutableList/AbstractPersistentList; +HSPLkotlinx/collections/immutable/implementations/immutableList/AbstractPersistentList;->()V +HSPLkotlinx/collections/immutable/implementations/immutableList/AbstractPersistentList;->iterator()Ljava/util/Iterator; +HSPLkotlinx/collections/immutable/implementations/immutableList/AbstractPersistentList;->listIterator()Ljava/util/ListIterator; +HSPLkotlinx/collections/immutable/implementations/immutableList/AbstractPersistentList;->subList(II)Lkotlinx/collections/immutable/ImmutableList; +Lkotlinx/collections/immutable/implementations/immutableList/BufferIterator; +HSPLkotlinx/collections/immutable/implementations/immutableList/BufferIterator;->([Ljava/lang/Object;II)V +HSPLkotlinx/collections/immutable/implementations/immutableList/BufferIterator;->next()Ljava/lang/Object; +Lkotlinx/collections/immutable/implementations/immutableList/PersistentVectorBuilder; +HSPLkotlinx/collections/immutable/implementations/immutableList/PersistentVectorBuilder;->(Lkotlinx/collections/immutable/PersistentList;[Ljava/lang/Object;[Ljava/lang/Object;I)V +HSPLkotlinx/collections/immutable/implementations/immutableList/PersistentVectorBuilder;->add(Ljava/lang/Object;)Z +HSPLkotlinx/collections/immutable/implementations/immutableList/PersistentVectorBuilder;->build()Lkotlinx/collections/immutable/PersistentList; +HSPLkotlinx/collections/immutable/implementations/immutableList/PersistentVectorBuilder;->getSize()I +HSPLkotlinx/collections/immutable/implementations/immutableList/PersistentVectorBuilder;->isMutable([Ljava/lang/Object;)Z +HSPLkotlinx/collections/immutable/implementations/immutableList/PersistentVectorBuilder;->makeMutable([Ljava/lang/Object;)[Ljava/lang/Object; +HSPLkotlinx/collections/immutable/implementations/immutableList/PersistentVectorBuilder;->mutableBuffer()[Ljava/lang/Object; +HSPLkotlinx/collections/immutable/implementations/immutableList/PersistentVectorBuilder;->tailSize()I +HSPLkotlinx/collections/immutable/implementations/immutableList/PersistentVectorBuilder;->tailSize(I)I +Lkotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector; +HSPLkotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->()V +HSPLkotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->([Ljava/lang/Object;)V +HSPLkotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->access$getEMPTY$cp()Lkotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector; +HSPLkotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->add(Ljava/lang/Object;)Lkotlinx/collections/immutable/PersistentList; +HSPLkotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->addAll(Ljava/util/Collection;)Lkotlinx/collections/immutable/PersistentList; +HSPLkotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->builder()Lkotlinx/collections/immutable/PersistentList$Builder; +HSPLkotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->get(I)Ljava/lang/Object; +HSPLkotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->getSize()I +HSPLkotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->listIterator(I)Ljava/util/ListIterator; +HSPLkotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->removeAt(I)Lkotlinx/collections/immutable/PersistentList; +Lkotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector$Companion; +HSPLkotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector$Companion;->()V +HSPLkotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector$Companion;->getEMPTY()Lkotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector; +Lkotlinx/collections/immutable/implementations/immutableList/UtilsKt; +HSPLkotlinx/collections/immutable/implementations/immutableList/UtilsKt;->persistentVectorOf()Lkotlinx/collections/immutable/PersistentList; +Lkotlinx/collections/immutable/implementations/immutableMap/MapEntry; +HSPLkotlinx/collections/immutable/implementations/immutableMap/MapEntry;->(Ljava/lang/Object;Ljava/lang/Object;)V +HSPLkotlinx/collections/immutable/implementations/immutableMap/MapEntry;->getKey()Ljava/lang/Object; +HSPLkotlinx/collections/immutable/implementations/immutableMap/MapEntry;->getValue()Ljava/lang/Object; +Lkotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap; +HSPLkotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->()V +HSPLkotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->(Lkotlinx/collections/immutable/implementations/immutableMap/TrieNode;I)V +HSPLkotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->access$getEMPTY$cp()Lkotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap; +HSPLkotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->get(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->getSize()I +HSPLkotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Lkotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap; +Lkotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap$Companion; +HSPLkotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap$Companion;->()V +HSPLkotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap$Companion;->emptyOf$kotlinx_collections_immutable()Lkotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap; +Lkotlinx/collections/immutable/implementations/immutableMap/TrieNode; +HSPLkotlinx/collections/immutable/implementations/immutableMap/TrieNode;->()V +HSPLkotlinx/collections/immutable/implementations/immutableMap/TrieNode;->(II[Ljava/lang/Object;)V +HSPLkotlinx/collections/immutable/implementations/immutableMap/TrieNode;->(II[Ljava/lang/Object;Lkotlinx/collections/immutable/internal/MutabilityOwnership;)V +HSPLkotlinx/collections/immutable/implementations/immutableMap/TrieNode;->access$getEMPTY$cp()Lkotlinx/collections/immutable/implementations/immutableMap/TrieNode; +HSPLkotlinx/collections/immutable/implementations/immutableMap/TrieNode;->asInsertResult()Lkotlinx/collections/immutable/implementations/immutableMap/TrieNode$ModificationResult; +PLkotlinx/collections/immutable/implementations/immutableMap/TrieNode;->asUpdateResult()Lkotlinx/collections/immutable/implementations/immutableMap/TrieNode$ModificationResult; +HSPLkotlinx/collections/immutable/implementations/immutableMap/TrieNode;->bufferMoveEntryToNode(IIILjava/lang/Object;Ljava/lang/Object;ILkotlinx/collections/immutable/internal/MutabilityOwnership;)[Ljava/lang/Object; +HSPLkotlinx/collections/immutable/implementations/immutableMap/TrieNode;->entryKeyIndex$kotlinx_collections_immutable(I)I +HSPLkotlinx/collections/immutable/implementations/immutableMap/TrieNode;->get(ILjava/lang/Object;I)Ljava/lang/Object; +HSPLkotlinx/collections/immutable/implementations/immutableMap/TrieNode;->hasEntryAt$kotlinx_collections_immutable(I)Z +HSPLkotlinx/collections/immutable/implementations/immutableMap/TrieNode;->hasNodeAt(I)Z +HSPLkotlinx/collections/immutable/implementations/immutableMap/TrieNode;->insertEntryAt(ILjava/lang/Object;Ljava/lang/Object;)Lkotlinx/collections/immutable/implementations/immutableMap/TrieNode; +HSPLkotlinx/collections/immutable/implementations/immutableMap/TrieNode;->keyAtIndex(I)Ljava/lang/Object; +HSPLkotlinx/collections/immutable/implementations/immutableMap/TrieNode;->makeNode(ILjava/lang/Object;Ljava/lang/Object;ILjava/lang/Object;Ljava/lang/Object;ILkotlinx/collections/immutable/internal/MutabilityOwnership;)Lkotlinx/collections/immutable/implementations/immutableMap/TrieNode; +HSPLkotlinx/collections/immutable/implementations/immutableMap/TrieNode;->nodeIndex$kotlinx_collections_immutable(I)I +HSPLkotlinx/collections/immutable/implementations/immutableMap/TrieNode;->put(ILjava/lang/Object;Ljava/lang/Object;I)Lkotlinx/collections/immutable/implementations/immutableMap/TrieNode$ModificationResult; +HSPLkotlinx/collections/immutable/implementations/immutableMap/TrieNode;->updateNodeAtIndex(IILkotlinx/collections/immutable/implementations/immutableMap/TrieNode;)Lkotlinx/collections/immutable/implementations/immutableMap/TrieNode; +PLkotlinx/collections/immutable/implementations/immutableMap/TrieNode;->updateValueAtIndex(ILjava/lang/Object;)Lkotlinx/collections/immutable/implementations/immutableMap/TrieNode; +HSPLkotlinx/collections/immutable/implementations/immutableMap/TrieNode;->valueAtKeyIndex(I)Ljava/lang/Object; +Lkotlinx/collections/immutable/implementations/immutableMap/TrieNode$Companion; +HSPLkotlinx/collections/immutable/implementations/immutableMap/TrieNode$Companion;->()V +HSPLkotlinx/collections/immutable/implementations/immutableMap/TrieNode$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlinx/collections/immutable/implementations/immutableMap/TrieNode$Companion;->getEMPTY$kotlinx_collections_immutable()Lkotlinx/collections/immutable/implementations/immutableMap/TrieNode; +Lkotlinx/collections/immutable/implementations/immutableMap/TrieNode$ModificationResult; +HSPLkotlinx/collections/immutable/implementations/immutableMap/TrieNode$ModificationResult;->(Lkotlinx/collections/immutable/implementations/immutableMap/TrieNode;I)V +HSPLkotlinx/collections/immutable/implementations/immutableMap/TrieNode$ModificationResult;->getNode()Lkotlinx/collections/immutable/implementations/immutableMap/TrieNode; +HSPLkotlinx/collections/immutable/implementations/immutableMap/TrieNode$ModificationResult;->getSizeDelta()I +Lkotlinx/collections/immutable/implementations/immutableMap/TrieNodeKt; +HSPLkotlinx/collections/immutable/implementations/immutableMap/TrieNodeKt;->access$insertEntryAtIndex([Ljava/lang/Object;ILjava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object; +HSPLkotlinx/collections/immutable/implementations/immutableMap/TrieNodeKt;->access$replaceEntryWithNode([Ljava/lang/Object;IILkotlinx/collections/immutable/implementations/immutableMap/TrieNode;)[Ljava/lang/Object; +HSPLkotlinx/collections/immutable/implementations/immutableMap/TrieNodeKt;->indexSegment(II)I +HSPLkotlinx/collections/immutable/implementations/immutableMap/TrieNodeKt;->insertEntryAtIndex([Ljava/lang/Object;ILjava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object; +HSPLkotlinx/collections/immutable/implementations/immutableMap/TrieNodeKt;->replaceEntryWithNode([Ljava/lang/Object;IILkotlinx/collections/immutable/implementations/immutableMap/TrieNode;)[Ljava/lang/Object; +Lkotlinx/collections/immutable/implementations/persistentOrderedMap/LinkedValue; +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/LinkedValue;->(Ljava/lang/Object;)V +PLkotlinx/collections/immutable/implementations/persistentOrderedMap/LinkedValue;->(Ljava/lang/Object;Ljava/lang/Object;)V +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/LinkedValue;->(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/LinkedValue;->getNext()Ljava/lang/Object; +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/LinkedValue;->getValue()Ljava/lang/Object; +PLkotlinx/collections/immutable/implementations/persistentOrderedMap/LinkedValue;->withNext(Ljava/lang/Object;)Lkotlinx/collections/immutable/implementations/persistentOrderedMap/LinkedValue; +Lkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMap; +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMap;->()V +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMap;->(Ljava/lang/Object;Ljava/lang/Object;Lkotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;)V +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMap;->access$getEMPTY$cp()Lkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMap; +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMap;->createEntries()Lkotlinx/collections/immutable/ImmutableSet; +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMap;->equals(Ljava/lang/Object;)Z +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMap;->get(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMap;->getEntries()Ljava/util/Set; +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMap;->getFirstKey$kotlinx_collections_immutable()Ljava/lang/Object; +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMap;->getHashMap$kotlinx_collections_immutable()Lkotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap; +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMap;->getSize()I +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMap;->getValues()Ljava/util/Collection; +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMap;->getValues()Lkotlinx/collections/immutable/ImmutableCollection; +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Lkotlinx/collections/immutable/PersistentMap; +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Lkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMap; +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMap;->remove(Ljava/lang/Object;)Lkotlinx/collections/immutable/PersistentMap; +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMap;->remove(Ljava/lang/Object;)Lkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMap; +Lkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMap$Companion; +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMap$Companion;->()V +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMap$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMap$Companion;->emptyOf$kotlinx_collections_immutable()Lkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMap; +Lkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMapEntries; +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMapEntries;->(Lkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMap;)V +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMapEntries;->getSize()I +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMapEntries;->iterator()Ljava/util/Iterator; +Lkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMapEntriesIterator; +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMapEntriesIterator;->(Lkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMap;)V +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMapEntriesIterator;->hasNext()Z +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMapEntriesIterator;->next()Ljava/lang/Object; +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMapEntriesIterator;->next()Ljava/util/Map$Entry; +Lkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMapLinksIterator; +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMapLinksIterator;->(Ljava/lang/Object;Ljava/util/Map;)V +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMapLinksIterator;->getNextKey$kotlinx_collections_immutable()Ljava/lang/Object; +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMapLinksIterator;->hasNext()Z +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMapLinksIterator;->next()Lkotlinx/collections/immutable/implementations/persistentOrderedMap/LinkedValue; +Lkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMapValues; +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMapValues;->(Lkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMap;)V +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMapValues;->iterator()Ljava/util/Iterator; +Lkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMapValuesIterator; +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMapValuesIterator;->(Lkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMap;)V +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMapValuesIterator;->hasNext()Z +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMapValuesIterator;->next()Ljava/lang/Object; +Lkotlinx/collections/immutable/internal/CommonFunctionsKt; +HSPLkotlinx/collections/immutable/internal/CommonFunctionsKt;->assert(Z)V +Lkotlinx/collections/immutable/internal/EndOfChain; +HSPLkotlinx/collections/immutable/internal/EndOfChain;->()V +HSPLkotlinx/collections/immutable/internal/EndOfChain;->()V +Lkotlinx/collections/immutable/internal/ListImplementation; +HSPLkotlinx/collections/immutable/internal/ListImplementation;->()V +HSPLkotlinx/collections/immutable/internal/ListImplementation;->()V +HSPLkotlinx/collections/immutable/internal/ListImplementation;->checkElementIndex$kotlinx_collections_immutable(II)V +HSPLkotlinx/collections/immutable/internal/ListImplementation;->checkPositionIndex$kotlinx_collections_immutable(II)V +HSPLkotlinx/collections/immutable/internal/ListImplementation;->checkRangeIndexes$kotlinx_collections_immutable(III)V +Lkotlinx/collections/immutable/internal/MutabilityOwnership; +HSPLkotlinx/collections/immutable/internal/MutabilityOwnership;->()V +Lkotlinx/coroutines/AbstractCoroutine; +HSPLkotlinx/coroutines/AbstractCoroutine;->(Lkotlin/coroutines/CoroutineContext;ZZ)V +HSPLkotlinx/coroutines/AbstractCoroutine;->afterResume(Ljava/lang/Object;)V +HSPLkotlinx/coroutines/AbstractCoroutine;->cancellationExceptionMessage()Ljava/lang/String; +HSPLkotlinx/coroutines/AbstractCoroutine;->getContext()Lkotlin/coroutines/CoroutineContext; +HSPLkotlinx/coroutines/AbstractCoroutine;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext; +HSPLkotlinx/coroutines/AbstractCoroutine;->isActive()Z +HSPLkotlinx/coroutines/AbstractCoroutine;->onCancelled(Ljava/lang/Throwable;Z)V +HSPLkotlinx/coroutines/AbstractCoroutine;->onCompleted(Ljava/lang/Object;)V +HSPLkotlinx/coroutines/AbstractCoroutine;->onCompletionInternal(Ljava/lang/Object;)V +HSPLkotlinx/coroutines/AbstractCoroutine;->resumeWith(Ljava/lang/Object;)V +HSPLkotlinx/coroutines/AbstractCoroutine;->start(Lkotlinx/coroutines/CoroutineStart;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V +Lkotlinx/coroutines/AbstractTimeSourceKt; +HSPLkotlinx/coroutines/AbstractTimeSourceKt;->()V +HSPLkotlinx/coroutines/AbstractTimeSourceKt;->getTimeSource()Lkotlinx/coroutines/AbstractTimeSource; +Lkotlinx/coroutines/Active; +HSPLkotlinx/coroutines/Active;->()V +HSPLkotlinx/coroutines/Active;->()V +Lkotlinx/coroutines/BlockingCoroutine; +HSPLkotlinx/coroutines/BlockingCoroutine;->(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Thread;Lkotlinx/coroutines/EventLoop;)V +HSPLkotlinx/coroutines/BlockingCoroutine;->afterCompletion(Ljava/lang/Object;)V +HSPLkotlinx/coroutines/BlockingCoroutine;->joinBlocking()Ljava/lang/Object; +Lkotlinx/coroutines/BlockingEventLoop; +HSPLkotlinx/coroutines/BlockingEventLoop;->(Ljava/lang/Thread;)V +HSPLkotlinx/coroutines/BlockingEventLoop;->getThread()Ljava/lang/Thread; +Lkotlinx/coroutines/BuildersKt; +HSPLkotlinx/coroutines/BuildersKt;->async$default(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/CoroutineStart;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/Deferred; +HSPLkotlinx/coroutines/BuildersKt;->async(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/CoroutineStart;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/Deferred; +HSPLkotlinx/coroutines/BuildersKt;->launch$default(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/CoroutineStart;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/Job; +HSPLkotlinx/coroutines/BuildersKt;->launch(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/CoroutineStart;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/Job; +HSPLkotlinx/coroutines/BuildersKt;->runBlocking$default(Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/BuildersKt;->runBlocking(Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; +HSPLkotlinx/coroutines/BuildersKt;->withContext(Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/BuildersKt__BuildersKt; +HSPLkotlinx/coroutines/BuildersKt__BuildersKt;->runBlocking$default(Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/BuildersKt__BuildersKt;->runBlocking(Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; +Lkotlinx/coroutines/BuildersKt__Builders_commonKt; +HSPLkotlinx/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; +HSPLkotlinx/coroutines/BuildersKt__Builders_commonKt;->async(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/CoroutineStart;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/Deferred; +HSPLkotlinx/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; +HSPLkotlinx/coroutines/BuildersKt__Builders_commonKt;->launch(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/CoroutineStart;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/Job; +HSPLkotlinx/coroutines/BuildersKt__Builders_commonKt;->withContext(Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/CancelHandler; +HSPLkotlinx/coroutines/CancelHandler;->()V +Lkotlinx/coroutines/CancelHandlerBase; +HSPLkotlinx/coroutines/CancelHandlerBase;->()V +Lkotlinx/coroutines/CancellableContinuation; +Lkotlinx/coroutines/CancellableContinuation$DefaultImpls; +Lkotlinx/coroutines/CancellableContinuationImpl; +HSPLkotlinx/coroutines/CancellableContinuationImpl;->()V +HSPLkotlinx/coroutines/CancellableContinuationImpl;->(Lkotlin/coroutines/Continuation;I)V +HSPLkotlinx/coroutines/CancellableContinuationImpl;->callCancelHandler(Lkotlinx/coroutines/CancelHandler;Ljava/lang/Throwable;)V +HSPLkotlinx/coroutines/CancellableContinuationImpl;->callSegmentOnCancellation(Lkotlinx/coroutines/internal/Segment;Ljava/lang/Throwable;)V +HSPLkotlinx/coroutines/CancellableContinuationImpl;->cancel(Ljava/lang/Throwable;)Z +HSPLkotlinx/coroutines/CancellableContinuationImpl;->cancelCompletedResult$kotlinx_coroutines_core(Ljava/lang/Object;Ljava/lang/Throwable;)V +HSPLkotlinx/coroutines/CancellableContinuationImpl;->cancelLater(Ljava/lang/Throwable;)Z +HSPLkotlinx/coroutines/CancellableContinuationImpl;->completeResume(Ljava/lang/Object;)V +HSPLkotlinx/coroutines/CancellableContinuationImpl;->detachChild$kotlinx_coroutines_core()V +HSPLkotlinx/coroutines/CancellableContinuationImpl;->detachChildIfNonResuable()V +HSPLkotlinx/coroutines/CancellableContinuationImpl;->dispatchResume(I)V +HSPLkotlinx/coroutines/CancellableContinuationImpl;->getContext()Lkotlin/coroutines/CoroutineContext; +HSPLkotlinx/coroutines/CancellableContinuationImpl;->getContinuationCancellationCause(Lkotlinx/coroutines/Job;)Ljava/lang/Throwable; +HSPLkotlinx/coroutines/CancellableContinuationImpl;->getDelegate$kotlinx_coroutines_core()Lkotlin/coroutines/Continuation; +HSPLkotlinx/coroutines/CancellableContinuationImpl;->getExceptionalResult$kotlinx_coroutines_core(Ljava/lang/Object;)Ljava/lang/Throwable; +HSPLkotlinx/coroutines/CancellableContinuationImpl;->getParentHandle()Lkotlinx/coroutines/DisposableHandle; +HSPLkotlinx/coroutines/CancellableContinuationImpl;->getResult()Ljava/lang/Object; +HSPLkotlinx/coroutines/CancellableContinuationImpl;->getState$kotlinx_coroutines_core()Ljava/lang/Object; +HSPLkotlinx/coroutines/CancellableContinuationImpl;->getSuccessfulResult$kotlinx_coroutines_core(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/CancellableContinuationImpl;->get_decisionAndIndex$volatile$FU()Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater; +HSPLkotlinx/coroutines/CancellableContinuationImpl;->get_parentHandle$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/CancellableContinuationImpl;->get_state$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/CancellableContinuationImpl;->initCancellability()V +HSPLkotlinx/coroutines/CancellableContinuationImpl;->installParentHandle()Lkotlinx/coroutines/DisposableHandle; +HSPLkotlinx/coroutines/CancellableContinuationImpl;->invokeOnCancellation(Lkotlin/jvm/functions/Function1;)V +HSPLkotlinx/coroutines/CancellableContinuationImpl;->invokeOnCancellation(Lkotlinx/coroutines/internal/Segment;I)V +HSPLkotlinx/coroutines/CancellableContinuationImpl;->invokeOnCancellationImpl(Ljava/lang/Object;)V +HSPLkotlinx/coroutines/CancellableContinuationImpl;->isCompleted()Z +HSPLkotlinx/coroutines/CancellableContinuationImpl;->isReusable()Z +HSPLkotlinx/coroutines/CancellableContinuationImpl;->makeCancelHandler(Lkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/CancelHandler; +HSPLkotlinx/coroutines/CancellableContinuationImpl;->parentCancelled$kotlinx_coroutines_core(Ljava/lang/Throwable;)V +HSPLkotlinx/coroutines/CancellableContinuationImpl;->releaseClaimedReusableContinuation$kotlinx_coroutines_core()V +HSPLkotlinx/coroutines/CancellableContinuationImpl;->resetStateReusable()Z +HSPLkotlinx/coroutines/CancellableContinuationImpl;->resume(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)V +HSPLkotlinx/coroutines/CancellableContinuationImpl;->resumeImpl$default(Lkotlinx/coroutines/CancellableContinuationImpl;Ljava/lang/Object;ILkotlin/jvm/functions/Function1;ILjava/lang/Object;)V +HSPLkotlinx/coroutines/CancellableContinuationImpl;->resumeImpl(Ljava/lang/Object;ILkotlin/jvm/functions/Function1;)V +HSPLkotlinx/coroutines/CancellableContinuationImpl;->resumeUndispatched(Lkotlinx/coroutines/CoroutineDispatcher;Ljava/lang/Object;)V +HSPLkotlinx/coroutines/CancellableContinuationImpl;->resumeWith(Ljava/lang/Object;)V +HSPLkotlinx/coroutines/CancellableContinuationImpl;->resumedState(Lkotlinx/coroutines/NotCompleted;Ljava/lang/Object;ILkotlin/jvm/functions/Function1;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/CancellableContinuationImpl;->takeState$kotlinx_coroutines_core()Ljava/lang/Object; +HSPLkotlinx/coroutines/CancellableContinuationImpl;->tryResume()Z +HSPLkotlinx/coroutines/CancellableContinuationImpl;->tryResume(Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; +HSPLkotlinx/coroutines/CancellableContinuationImpl;->tryResumeImpl(Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/CancellableContinuationImpl;->trySuspend()Z +Lkotlinx/coroutines/CancellableContinuationImplKt; +HSPLkotlinx/coroutines/CancellableContinuationImplKt;->()V +Lkotlinx/coroutines/CancellableContinuationKt; +HSPLkotlinx/coroutines/CancellableContinuationKt;->disposeOnCancellation(Lkotlinx/coroutines/CancellableContinuation;Lkotlinx/coroutines/DisposableHandle;)V +HSPLkotlinx/coroutines/CancellableContinuationKt;->getOrCreateCancellableContinuation(Lkotlin/coroutines/Continuation;)Lkotlinx/coroutines/CancellableContinuationImpl; +Lkotlinx/coroutines/CancelledContinuation; +HSPLkotlinx/coroutines/CancelledContinuation;->()V +HSPLkotlinx/coroutines/CancelledContinuation;->(Lkotlin/coroutines/Continuation;Ljava/lang/Throwable;Z)V +HSPLkotlinx/coroutines/CancelledContinuation;->get_resumed$volatile$FU()Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater; +HSPLkotlinx/coroutines/CancelledContinuation;->makeResumed()Z +Lkotlinx/coroutines/ChildContinuation; +HSPLkotlinx/coroutines/ChildContinuation;->(Lkotlinx/coroutines/CancellableContinuationImpl;)V +HSPLkotlinx/coroutines/ChildContinuation;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/ChildContinuation;->invoke(Ljava/lang/Throwable;)V +Lkotlinx/coroutines/ChildHandle; +Lkotlinx/coroutines/ChildHandleNode; +HSPLkotlinx/coroutines/ChildHandleNode;->(Lkotlinx/coroutines/ChildJob;)V +HSPLkotlinx/coroutines/ChildHandleNode;->childCancelled(Ljava/lang/Throwable;)Z +HSPLkotlinx/coroutines/ChildHandleNode;->getParent()Lkotlinx/coroutines/Job; +PLkotlinx/coroutines/ChildHandleNode;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/ChildHandleNode;->invoke(Ljava/lang/Throwable;)V +Lkotlinx/coroutines/ChildJob; +Lkotlinx/coroutines/CompletableJob; +Lkotlinx/coroutines/CompletedContinuation; +HSPLkotlinx/coroutines/CompletedContinuation;->(Ljava/lang/Object;Lkotlinx/coroutines/CancelHandler;Lkotlin/jvm/functions/Function1;Ljava/lang/Object;Ljava/lang/Throwable;)V +HSPLkotlinx/coroutines/CompletedContinuation;->(Ljava/lang/Object;Lkotlinx/coroutines/CancelHandler;Lkotlin/jvm/functions/Function1;Ljava/lang/Object;Ljava/lang/Throwable;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlinx/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; +HSPLkotlinx/coroutines/CompletedContinuation;->copy(Ljava/lang/Object;Lkotlinx/coroutines/CancelHandler;Lkotlin/jvm/functions/Function1;Ljava/lang/Object;Ljava/lang/Throwable;)Lkotlinx/coroutines/CompletedContinuation; +HSPLkotlinx/coroutines/CompletedContinuation;->getCancelled()Z +HSPLkotlinx/coroutines/CompletedContinuation;->invokeHandlers(Lkotlinx/coroutines/CancellableContinuationImpl;Ljava/lang/Throwable;)V +Lkotlinx/coroutines/CompletedExceptionally; +HSPLkotlinx/coroutines/CompletedExceptionally;->()V +HSPLkotlinx/coroutines/CompletedExceptionally;->(Ljava/lang/Throwable;Z)V +HSPLkotlinx/coroutines/CompletedExceptionally;->(Ljava/lang/Throwable;ZILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlinx/coroutines/CompletedExceptionally;->getHandled()Z +HSPLkotlinx/coroutines/CompletedExceptionally;->get_handled$volatile$FU()Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater; +HSPLkotlinx/coroutines/CompletedExceptionally;->makeHandled()Z +Lkotlinx/coroutines/CompletionHandlerBase; +HSPLkotlinx/coroutines/CompletionHandlerBase;->()V +Lkotlinx/coroutines/CompletionStateKt; +HSPLkotlinx/coroutines/CompletionStateKt;->recoverResult(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/CompletionStateKt;->toState$default(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/CompletionStateKt;->toState(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; +HSPLkotlinx/coroutines/CompletionStateKt;->toState(Ljava/lang/Object;Lkotlinx/coroutines/CancellableContinuation;)Ljava/lang/Object; +Lkotlinx/coroutines/CopyableThreadContextElement; +Lkotlinx/coroutines/CopyableThrowable; +Lkotlinx/coroutines/CoroutineContextKt; +HSPLkotlinx/coroutines/CoroutineContextKt;->foldCopies(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/CoroutineContext;Z)Lkotlin/coroutines/CoroutineContext; +HSPLkotlinx/coroutines/CoroutineContextKt;->hasCopyableElements(Lkotlin/coroutines/CoroutineContext;)Z +HSPLkotlinx/coroutines/CoroutineContextKt;->newCoroutineContext(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext; +HSPLkotlinx/coroutines/CoroutineContextKt;->newCoroutineContext(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext; +PLkotlinx/coroutines/CoroutineContextKt;->undispatchedCompletion(Lkotlin/coroutines/jvm/internal/CoroutineStackFrame;)Lkotlinx/coroutines/UndispatchedCoroutine; +PLkotlinx/coroutines/CoroutineContextKt;->updateUndispatchedCompletion(Lkotlin/coroutines/Continuation;Lkotlin/coroutines/CoroutineContext;Ljava/lang/Object;)Lkotlinx/coroutines/UndispatchedCoroutine; +Lkotlinx/coroutines/CoroutineContextKt$hasCopyableElements$1; +HSPLkotlinx/coroutines/CoroutineContextKt$hasCopyableElements$1;->()V +HSPLkotlinx/coroutines/CoroutineContextKt$hasCopyableElements$1;->()V +HSPLkotlinx/coroutines/CoroutineContextKt$hasCopyableElements$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/CoroutineContextKt$hasCopyableElements$1;->invoke(ZLkotlin/coroutines/CoroutineContext$Element;)Ljava/lang/Boolean; +Lkotlinx/coroutines/CoroutineDispatcher; +HSPLkotlinx/coroutines/CoroutineDispatcher;->()V +HSPLkotlinx/coroutines/CoroutineDispatcher;->()V +HSPLkotlinx/coroutines/CoroutineDispatcher;->dispatchYield(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V +HSPLkotlinx/coroutines/CoroutineDispatcher;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; +HSPLkotlinx/coroutines/CoroutineDispatcher;->interceptContinuation(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLkotlinx/coroutines/CoroutineDispatcher;->isDispatchNeeded(Lkotlin/coroutines/CoroutineContext;)Z +HSPLkotlinx/coroutines/CoroutineDispatcher;->limitedParallelism(I)Lkotlinx/coroutines/CoroutineDispatcher; +HSPLkotlinx/coroutines/CoroutineDispatcher;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext; +HSPLkotlinx/coroutines/CoroutineDispatcher;->releaseInterceptedContinuation(Lkotlin/coroutines/Continuation;)V +Lkotlinx/coroutines/CoroutineDispatcher$Key; +HSPLkotlinx/coroutines/CoroutineDispatcher$Key;->()V +HSPLkotlinx/coroutines/CoroutineDispatcher$Key;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlinx/coroutines/CoroutineDispatcher$Key$1; +HSPLkotlinx/coroutines/CoroutineDispatcher$Key$1;->()V +HSPLkotlinx/coroutines/CoroutineDispatcher$Key$1;->()V +Lkotlinx/coroutines/CoroutineExceptionHandler; +HSPLkotlinx/coroutines/CoroutineExceptionHandler;->()V +Lkotlinx/coroutines/CoroutineExceptionHandler$Key; +HSPLkotlinx/coroutines/CoroutineExceptionHandler$Key;->()V +HSPLkotlinx/coroutines/CoroutineExceptionHandler$Key;->()V +Lkotlinx/coroutines/CoroutineId; +Lkotlinx/coroutines/CoroutineName; +HSPLkotlinx/coroutines/CoroutineName;->()V +HSPLkotlinx/coroutines/CoroutineName;->(Ljava/lang/String;)V +Lkotlinx/coroutines/CoroutineName$Key; +HSPLkotlinx/coroutines/CoroutineName$Key;->()V +HSPLkotlinx/coroutines/CoroutineName$Key;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlinx/coroutines/CoroutineScope; +Lkotlinx/coroutines/CoroutineScopeKt; +HSPLkotlinx/coroutines/CoroutineScopeKt;->CoroutineScope(Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/CoroutineScope; +HSPLkotlinx/coroutines/CoroutineScopeKt;->MainScope()Lkotlinx/coroutines/CoroutineScope; +HSPLkotlinx/coroutines/CoroutineScopeKt;->cancel(Lkotlinx/coroutines/CoroutineScope;Ljava/util/concurrent/CancellationException;)V +HSPLkotlinx/coroutines/CoroutineScopeKt;->coroutineScope(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/CoroutineScopeKt;->ensureActive(Lkotlinx/coroutines/CoroutineScope;)V +HSPLkotlinx/coroutines/CoroutineScopeKt;->isActive(Lkotlinx/coroutines/CoroutineScope;)Z +HSPLkotlinx/coroutines/CoroutineScopeKt;->plus(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/CoroutineScope; +Lkotlinx/coroutines/CoroutineStart; +HSPLkotlinx/coroutines/CoroutineStart;->$values()[Lkotlinx/coroutines/CoroutineStart; +HSPLkotlinx/coroutines/CoroutineStart;->()V +HSPLkotlinx/coroutines/CoroutineStart;->(Ljava/lang/String;I)V +HSPLkotlinx/coroutines/CoroutineStart;->invoke(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/CoroutineStart;->isLazy()Z +HSPLkotlinx/coroutines/CoroutineStart;->values()[Lkotlinx/coroutines/CoroutineStart; +Lkotlinx/coroutines/CoroutineStart$WhenMappings; +HSPLkotlinx/coroutines/CoroutineStart$WhenMappings;->()V +Lkotlinx/coroutines/DebugKt; +HSPLkotlinx/coroutines/DebugKt;->()V +HSPLkotlinx/coroutines/DebugKt;->getASSERTIONS_ENABLED()Z +HSPLkotlinx/coroutines/DebugKt;->getDEBUG()Z +HSPLkotlinx/coroutines/DebugKt;->getRECOVER_STACK_TRACES()Z +Lkotlinx/coroutines/DebugStringsKt; +HSPLkotlinx/coroutines/DebugStringsKt;->getClassSimpleName(Ljava/lang/Object;)Ljava/lang/String; +Lkotlinx/coroutines/DefaultExecutor; +HSPLkotlinx/coroutines/DefaultExecutor;->()V +HSPLkotlinx/coroutines/DefaultExecutor;->()V +PLkotlinx/coroutines/DefaultExecutor;->acknowledgeShutdownIfNeeded()V +HSPLkotlinx/coroutines/DefaultExecutor;->createThreadSync()Ljava/lang/Thread; +HSPLkotlinx/coroutines/DefaultExecutor;->getThread()Ljava/lang/Thread; +HSPLkotlinx/coroutines/DefaultExecutor;->invokeOnTimeout(JLjava/lang/Runnable;Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/DisposableHandle; +HSPLkotlinx/coroutines/DefaultExecutor;->isShutdownRequested()Z +HSPLkotlinx/coroutines/DefaultExecutor;->notifyStartup()Z +HSPLkotlinx/coroutines/DefaultExecutor;->run()V +Lkotlinx/coroutines/DefaultExecutorKt; +HSPLkotlinx/coroutines/DefaultExecutorKt;->()V +HSPLkotlinx/coroutines/DefaultExecutorKt;->getDefaultDelay()Lkotlinx/coroutines/Delay; +HSPLkotlinx/coroutines/DefaultExecutorKt;->initializeDefaultDelay()Lkotlinx/coroutines/Delay; +Lkotlinx/coroutines/Deferred; +Lkotlinx/coroutines/DeferredCoroutine; +HSPLkotlinx/coroutines/DeferredCoroutine;->(Lkotlin/coroutines/CoroutineContext;Z)V +HSPLkotlinx/coroutines/DeferredCoroutine;->await$suspendImpl(Lkotlinx/coroutines/DeferredCoroutine;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/DeferredCoroutine;->await(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/Delay; +Lkotlinx/coroutines/DelayKt; +HSPLkotlinx/coroutines/DelayKt;->awaitCancellation(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/DelayKt;->delay(JLkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/DelayKt;->delay-VtjQ1oo(JLkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/DelayKt;->getDelay(Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/Delay; +HSPLkotlinx/coroutines/DelayKt;->toDelayMillis-LRDsOJo(J)J +Lkotlinx/coroutines/DelayKt$awaitCancellation$1; +HSPLkotlinx/coroutines/DelayKt$awaitCancellation$1;->(Lkotlin/coroutines/Continuation;)V +Lkotlinx/coroutines/DispatchedCoroutine; +HSPLkotlinx/coroutines/DispatchedCoroutine;->()V +HSPLkotlinx/coroutines/DispatchedCoroutine;->(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/DispatchedCoroutine;->afterCompletion(Ljava/lang/Object;)V +HSPLkotlinx/coroutines/DispatchedCoroutine;->afterResume(Ljava/lang/Object;)V +HSPLkotlinx/coroutines/DispatchedCoroutine;->getResult$kotlinx_coroutines_core()Ljava/lang/Object; +HSPLkotlinx/coroutines/DispatchedCoroutine;->get_decision$volatile$FU$kotlinx_coroutines_core()Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater; +HSPLkotlinx/coroutines/DispatchedCoroutine;->tryResume()Z +HSPLkotlinx/coroutines/DispatchedCoroutine;->trySuspend()Z +Lkotlinx/coroutines/DispatchedTask; +HSPLkotlinx/coroutines/DispatchedTask;->(I)V +HSPLkotlinx/coroutines/DispatchedTask;->getExceptionalResult$kotlinx_coroutines_core(Ljava/lang/Object;)Ljava/lang/Throwable; +HSPLkotlinx/coroutines/DispatchedTask;->getSuccessfulResult$kotlinx_coroutines_core(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/DispatchedTask;->handleFatalException$kotlinx_coroutines_core(Ljava/lang/Throwable;Ljava/lang/Throwable;)V +HSPLkotlinx/coroutines/DispatchedTask;->run()V +Lkotlinx/coroutines/DispatchedTaskKt; +HSPLkotlinx/coroutines/DispatchedTaskKt;->dispatch(Lkotlinx/coroutines/DispatchedTask;I)V +HSPLkotlinx/coroutines/DispatchedTaskKt;->isCancellableMode(I)Z +HSPLkotlinx/coroutines/DispatchedTaskKt;->isReusableMode(I)Z +HSPLkotlinx/coroutines/DispatchedTaskKt;->resume(Lkotlinx/coroutines/DispatchedTask;Lkotlin/coroutines/Continuation;Z)V +HSPLkotlinx/coroutines/DispatchedTaskKt;->resumeUnconfined(Lkotlinx/coroutines/DispatchedTask;)V +Lkotlinx/coroutines/DispatcherExecutor; +Lkotlinx/coroutines/Dispatchers; +HSPLkotlinx/coroutines/Dispatchers;->()V +HSPLkotlinx/coroutines/Dispatchers;->()V +HSPLkotlinx/coroutines/Dispatchers;->getDefault()Lkotlinx/coroutines/CoroutineDispatcher; +HSPLkotlinx/coroutines/Dispatchers;->getIO()Lkotlinx/coroutines/CoroutineDispatcher; +HSPLkotlinx/coroutines/Dispatchers;->getMain()Lkotlinx/coroutines/MainCoroutineDispatcher; +Lkotlinx/coroutines/DisposableHandle; +Lkotlinx/coroutines/DisposeOnCancel; +HSPLkotlinx/coroutines/DisposeOnCancel;->(Lkotlinx/coroutines/DisposableHandle;)V +HSPLkotlinx/coroutines/DisposeOnCancel;->invoke(Ljava/lang/Throwable;)V +Lkotlinx/coroutines/Empty; +HSPLkotlinx/coroutines/Empty;->(Z)V +HSPLkotlinx/coroutines/Empty;->getList()Lkotlinx/coroutines/NodeList; +HSPLkotlinx/coroutines/Empty;->isActive()Z +Lkotlinx/coroutines/EventLoop; +HSPLkotlinx/coroutines/EventLoop;->()V +HSPLkotlinx/coroutines/EventLoop;->decrementUseCount$default(Lkotlinx/coroutines/EventLoop;ZILjava/lang/Object;)V +HSPLkotlinx/coroutines/EventLoop;->decrementUseCount(Z)V +HSPLkotlinx/coroutines/EventLoop;->delta(Z)J +HSPLkotlinx/coroutines/EventLoop;->dispatchUnconfined(Lkotlinx/coroutines/DispatchedTask;)V +HSPLkotlinx/coroutines/EventLoop;->getNextTime()J +HSPLkotlinx/coroutines/EventLoop;->incrementUseCount$default(Lkotlinx/coroutines/EventLoop;ZILjava/lang/Object;)V +HSPLkotlinx/coroutines/EventLoop;->incrementUseCount(Z)V +HSPLkotlinx/coroutines/EventLoop;->isUnconfinedLoopActive()Z +HSPLkotlinx/coroutines/EventLoop;->isUnconfinedQueueEmpty()Z +HSPLkotlinx/coroutines/EventLoop;->processUnconfinedEvent()Z +Lkotlinx/coroutines/EventLoopImplBase; +HSPLkotlinx/coroutines/EventLoopImplBase;->()V +HSPLkotlinx/coroutines/EventLoopImplBase;->()V +HSPLkotlinx/coroutines/EventLoopImplBase;->access$isCompleted(Lkotlinx/coroutines/EventLoopImplBase;)Z +HSPLkotlinx/coroutines/EventLoopImplBase;->closeQueue()V +HSPLkotlinx/coroutines/EventLoopImplBase;->dequeue()Ljava/lang/Runnable; +HSPLkotlinx/coroutines/EventLoopImplBase;->dispatch(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V +HSPLkotlinx/coroutines/EventLoopImplBase;->enqueue(Ljava/lang/Runnable;)V +HSPLkotlinx/coroutines/EventLoopImplBase;->enqueueImpl(Ljava/lang/Runnable;)Z +HSPLkotlinx/coroutines/EventLoopImplBase;->getNextTime()J +HSPLkotlinx/coroutines/EventLoopImplBase;->get_delayed$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/EventLoopImplBase;->get_isCompleted$volatile$FU()Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater; +HSPLkotlinx/coroutines/EventLoopImplBase;->get_queue$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/EventLoopImplBase;->isCompleted()Z +HSPLkotlinx/coroutines/EventLoopImplBase;->isEmpty()Z +HSPLkotlinx/coroutines/EventLoopImplBase;->processNextEvent()J +HSPLkotlinx/coroutines/EventLoopImplBase;->rescheduleAllDelayed()V +HSPLkotlinx/coroutines/EventLoopImplBase;->schedule(JLkotlinx/coroutines/EventLoopImplBase$DelayedTask;)V +HSPLkotlinx/coroutines/EventLoopImplBase;->scheduleImpl(JLkotlinx/coroutines/EventLoopImplBase$DelayedTask;)I +HSPLkotlinx/coroutines/EventLoopImplBase;->scheduleInvokeOnTimeout(JLjava/lang/Runnable;)Lkotlinx/coroutines/DisposableHandle; +HSPLkotlinx/coroutines/EventLoopImplBase;->scheduleResumeAfterDelay(JLkotlinx/coroutines/CancellableContinuation;)V +HSPLkotlinx/coroutines/EventLoopImplBase;->setCompleted(Z)V +HSPLkotlinx/coroutines/EventLoopImplBase;->shouldUnpark(Lkotlinx/coroutines/EventLoopImplBase$DelayedTask;)Z +HSPLkotlinx/coroutines/EventLoopImplBase;->shutdown()V +Lkotlinx/coroutines/EventLoopImplBase$DelayedResumeTask; +HSPLkotlinx/coroutines/EventLoopImplBase$DelayedResumeTask;->(Lkotlinx/coroutines/EventLoopImplBase;JLkotlinx/coroutines/CancellableContinuation;)V +HSPLkotlinx/coroutines/EventLoopImplBase$DelayedResumeTask;->run()V +Lkotlinx/coroutines/EventLoopImplBase$DelayedRunnableTask; +HSPLkotlinx/coroutines/EventLoopImplBase$DelayedRunnableTask;->(JLjava/lang/Runnable;)V +HSPLkotlinx/coroutines/EventLoopImplBase$DelayedRunnableTask;->run()V +Lkotlinx/coroutines/EventLoopImplBase$DelayedTask; +HSPLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->(J)V +HSPLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->compareTo(Ljava/lang/Object;)I +HSPLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->compareTo(Lkotlinx/coroutines/EventLoopImplBase$DelayedTask;)I +HSPLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->dispose()V +HSPLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->getHeap()Lkotlinx/coroutines/internal/ThreadSafeHeap; +HSPLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->getIndex()I +HSPLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->scheduleTask(JLkotlinx/coroutines/EventLoopImplBase$DelayedTaskQueue;Lkotlinx/coroutines/EventLoopImplBase;)I +HSPLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->setHeap(Lkotlinx/coroutines/internal/ThreadSafeHeap;)V +HSPLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->setIndex(I)V +HSPLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->timeToExecute(J)Z +Lkotlinx/coroutines/EventLoopImplBase$DelayedTaskQueue; +HSPLkotlinx/coroutines/EventLoopImplBase$DelayedTaskQueue;->(J)V +Lkotlinx/coroutines/EventLoopImplPlatform; +HSPLkotlinx/coroutines/EventLoopImplPlatform;->()V +HSPLkotlinx/coroutines/EventLoopImplPlatform;->unpark()V +Lkotlinx/coroutines/EventLoopKt; +HSPLkotlinx/coroutines/EventLoopKt;->createEventLoop()Lkotlinx/coroutines/EventLoop; +Lkotlinx/coroutines/EventLoop_commonKt; +HSPLkotlinx/coroutines/EventLoop_commonKt;->()V +HSPLkotlinx/coroutines/EventLoop_commonKt;->access$getCLOSED_EMPTY$p()Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/EventLoop_commonKt;->access$getDISPOSED_TASK$p()Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/EventLoop_commonKt;->delayToNanos(J)J +Lkotlinx/coroutines/ExecutorCoroutineDispatcher; +HSPLkotlinx/coroutines/ExecutorCoroutineDispatcher;->()V +HSPLkotlinx/coroutines/ExecutorCoroutineDispatcher;->()V +Lkotlinx/coroutines/ExecutorCoroutineDispatcher$Key; +HSPLkotlinx/coroutines/ExecutorCoroutineDispatcher$Key;->()V +HSPLkotlinx/coroutines/ExecutorCoroutineDispatcher$Key;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlinx/coroutines/ExecutorCoroutineDispatcher$Key$1; +HSPLkotlinx/coroutines/ExecutorCoroutineDispatcher$Key$1;->()V +HSPLkotlinx/coroutines/ExecutorCoroutineDispatcher$Key$1;->()V +Lkotlinx/coroutines/ExecutorCoroutineDispatcherImpl; +HSPLkotlinx/coroutines/ExecutorCoroutineDispatcherImpl;->(Ljava/util/concurrent/Executor;)V +HSPLkotlinx/coroutines/ExecutorCoroutineDispatcherImpl;->dispatch(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V +HSPLkotlinx/coroutines/ExecutorCoroutineDispatcherImpl;->getExecutor()Ljava/util/concurrent/Executor; +Lkotlinx/coroutines/ExecutorsKt; +HSPLkotlinx/coroutines/ExecutorsKt;->from(Ljava/util/concurrent/Executor;)Lkotlinx/coroutines/CoroutineDispatcher; +Lkotlinx/coroutines/GlobalScope; +HSPLkotlinx/coroutines/GlobalScope;->()V +HSPLkotlinx/coroutines/GlobalScope;->()V +HSPLkotlinx/coroutines/GlobalScope;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext; +Lkotlinx/coroutines/InactiveNodeList; +Lkotlinx/coroutines/Incomplete; +Lkotlinx/coroutines/IncompleteStateBox; +Lkotlinx/coroutines/InvokeOnCancel; +HSPLkotlinx/coroutines/InvokeOnCancel;->(Lkotlin/jvm/functions/Function1;)V +HSPLkotlinx/coroutines/InvokeOnCancel;->invoke(Ljava/lang/Throwable;)V +Lkotlinx/coroutines/InvokeOnCancelling; +Lkotlinx/coroutines/InvokeOnCompletion; +HSPLkotlinx/coroutines/InvokeOnCompletion;->(Lkotlin/jvm/functions/Function1;)V +Lkotlinx/coroutines/Job; +HSPLkotlinx/coroutines/Job;->()V +Lkotlinx/coroutines/Job$DefaultImpls; +HSPLkotlinx/coroutines/Job$DefaultImpls;->cancel$default(Lkotlinx/coroutines/Job;Ljava/util/concurrent/CancellationException;ILjava/lang/Object;)V +HSPLkotlinx/coroutines/Job$DefaultImpls;->fold(Lkotlinx/coroutines/Job;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; +HSPLkotlinx/coroutines/Job$DefaultImpls;->get(Lkotlinx/coroutines/Job;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; +HSPLkotlinx/coroutines/Job$DefaultImpls;->invokeOnCompletion$default(Lkotlinx/coroutines/Job;ZZLkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lkotlinx/coroutines/DisposableHandle; +HSPLkotlinx/coroutines/Job$DefaultImpls;->minusKey(Lkotlinx/coroutines/Job;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext; +HSPLkotlinx/coroutines/Job$DefaultImpls;->plus(Lkotlinx/coroutines/Job;Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext; +Lkotlinx/coroutines/Job$Key; +HSPLkotlinx/coroutines/Job$Key;->()V +HSPLkotlinx/coroutines/Job$Key;->()V +Lkotlinx/coroutines/JobCancellationException; +PLkotlinx/coroutines/JobCancellationException;->(Ljava/lang/String;Ljava/lang/Throwable;Lkotlinx/coroutines/Job;)V +HSPLkotlinx/coroutines/JobCancellationException;->equals(Ljava/lang/Object;)Z +PLkotlinx/coroutines/JobCancellationException;->fillInStackTrace()Ljava/lang/Throwable; +Lkotlinx/coroutines/JobCancellingNode; +HSPLkotlinx/coroutines/JobCancellingNode;->()V +Lkotlinx/coroutines/JobImpl; +HSPLkotlinx/coroutines/JobImpl;->(Lkotlinx/coroutines/Job;)V +HSPLkotlinx/coroutines/JobImpl;->getHandlesException$kotlinx_coroutines_core()Z +HSPLkotlinx/coroutines/JobImpl;->getOnCancelComplete$kotlinx_coroutines_core()Z +HSPLkotlinx/coroutines/JobImpl;->handlesException()Z +Lkotlinx/coroutines/JobKt; +HSPLkotlinx/coroutines/JobKt;->Job$default(Lkotlinx/coroutines/Job;ILjava/lang/Object;)Lkotlinx/coroutines/CompletableJob; +HSPLkotlinx/coroutines/JobKt;->Job(Lkotlinx/coroutines/Job;)Lkotlinx/coroutines/CompletableJob; +HSPLkotlinx/coroutines/JobKt;->ensureActive(Lkotlin/coroutines/CoroutineContext;)V +HSPLkotlinx/coroutines/JobKt;->ensureActive(Lkotlinx/coroutines/Job;)V +HSPLkotlinx/coroutines/JobKt;->getJob(Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/Job; +HSPLkotlinx/coroutines/JobKt;->isActive(Lkotlin/coroutines/CoroutineContext;)Z +Lkotlinx/coroutines/JobKt__JobKt; +HSPLkotlinx/coroutines/JobKt__JobKt;->Job$default(Lkotlinx/coroutines/Job;ILjava/lang/Object;)Lkotlinx/coroutines/CompletableJob; +HSPLkotlinx/coroutines/JobKt__JobKt;->Job(Lkotlinx/coroutines/Job;)Lkotlinx/coroutines/CompletableJob; +HSPLkotlinx/coroutines/JobKt__JobKt;->ensureActive(Lkotlin/coroutines/CoroutineContext;)V +HSPLkotlinx/coroutines/JobKt__JobKt;->ensureActive(Lkotlinx/coroutines/Job;)V +HSPLkotlinx/coroutines/JobKt__JobKt;->getJob(Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/Job; +HSPLkotlinx/coroutines/JobKt__JobKt;->isActive(Lkotlin/coroutines/CoroutineContext;)Z +Lkotlinx/coroutines/JobNode; +HSPLkotlinx/coroutines/JobNode;->()V +HSPLkotlinx/coroutines/JobNode;->dispose()V +HSPLkotlinx/coroutines/JobNode;->getJob()Lkotlinx/coroutines/JobSupport; +HSPLkotlinx/coroutines/JobNode;->getList()Lkotlinx/coroutines/NodeList; +HSPLkotlinx/coroutines/JobNode;->isActive()Z +HSPLkotlinx/coroutines/JobNode;->setJob(Lkotlinx/coroutines/JobSupport;)V +Lkotlinx/coroutines/JobSupport; +HSPLkotlinx/coroutines/JobSupport;->()V +HSPLkotlinx/coroutines/JobSupport;->(Z)V +PLkotlinx/coroutines/JobSupport;->access$cancellationExceptionMessage(Lkotlinx/coroutines/JobSupport;)Ljava/lang/String; +HSPLkotlinx/coroutines/JobSupport;->access$continueCompleting(Lkotlinx/coroutines/JobSupport;Lkotlinx/coroutines/JobSupport$Finishing;Lkotlinx/coroutines/ChildHandleNode;Ljava/lang/Object;)V +HSPLkotlinx/coroutines/JobSupport;->addLastAtomic(Ljava/lang/Object;Lkotlinx/coroutines/NodeList;Lkotlinx/coroutines/JobNode;)Z +HSPLkotlinx/coroutines/JobSupport;->addSuppressedExceptions(Ljava/lang/Throwable;Ljava/util/List;)V +HSPLkotlinx/coroutines/JobSupport;->afterCompletion(Ljava/lang/Object;)V +HSPLkotlinx/coroutines/JobSupport;->attachChild(Lkotlinx/coroutines/ChildJob;)Lkotlinx/coroutines/ChildHandle; +HSPLkotlinx/coroutines/JobSupport;->awaitInternal(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/JobSupport;->awaitSuspend(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/JobSupport;->cancel(Ljava/util/concurrent/CancellationException;)V +HSPLkotlinx/coroutines/JobSupport;->cancelCoroutine(Ljava/lang/Throwable;)Z +HSPLkotlinx/coroutines/JobSupport;->cancelImpl$kotlinx_coroutines_core(Ljava/lang/Object;)Z +HSPLkotlinx/coroutines/JobSupport;->cancelInternal(Ljava/lang/Throwable;)V +HSPLkotlinx/coroutines/JobSupport;->cancelMakeCompleting(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/JobSupport;->cancelParent(Ljava/lang/Throwable;)Z +HSPLkotlinx/coroutines/JobSupport;->cancellationExceptionMessage()Ljava/lang/String; +HSPLkotlinx/coroutines/JobSupport;->childCancelled(Ljava/lang/Throwable;)Z +HSPLkotlinx/coroutines/JobSupport;->completeStateFinalization(Lkotlinx/coroutines/Incomplete;Ljava/lang/Object;)V +HSPLkotlinx/coroutines/JobSupport;->continueCompleting(Lkotlinx/coroutines/JobSupport$Finishing;Lkotlinx/coroutines/ChildHandleNode;Ljava/lang/Object;)V +HSPLkotlinx/coroutines/JobSupport;->createCauseException(Ljava/lang/Object;)Ljava/lang/Throwable; +HSPLkotlinx/coroutines/JobSupport;->finalizeFinishingState(Lkotlinx/coroutines/JobSupport$Finishing;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/JobSupport;->firstChild(Lkotlinx/coroutines/Incomplete;)Lkotlinx/coroutines/ChildHandleNode; +HSPLkotlinx/coroutines/JobSupport;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; +HSPLkotlinx/coroutines/JobSupport;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; +HSPLkotlinx/coroutines/JobSupport;->getCancellationException()Ljava/util/concurrent/CancellationException; +HSPLkotlinx/coroutines/JobSupport;->getChildJobCancellationCause()Ljava/util/concurrent/CancellationException; +HSPLkotlinx/coroutines/JobSupport;->getFinalRootCause(Lkotlinx/coroutines/JobSupport$Finishing;Ljava/util/List;)Ljava/lang/Throwable; +HSPLkotlinx/coroutines/JobSupport;->getKey()Lkotlin/coroutines/CoroutineContext$Key; +HSPLkotlinx/coroutines/JobSupport;->getOnCancelComplete$kotlinx_coroutines_core()Z +HSPLkotlinx/coroutines/JobSupport;->getOrPromoteCancellingList(Lkotlinx/coroutines/Incomplete;)Lkotlinx/coroutines/NodeList; +HSPLkotlinx/coroutines/JobSupport;->getParent()Lkotlinx/coroutines/Job; +HSPLkotlinx/coroutines/JobSupport;->getParentHandle$kotlinx_coroutines_core()Lkotlinx/coroutines/ChildHandle; +HSPLkotlinx/coroutines/JobSupport;->getState$kotlinx_coroutines_core()Ljava/lang/Object; +HSPLkotlinx/coroutines/JobSupport;->get_parentHandle$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/JobSupport;->get_state$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/JobSupport;->initParentJob(Lkotlinx/coroutines/Job;)V +HSPLkotlinx/coroutines/JobSupport;->invokeOnCompletion(Lkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/DisposableHandle; +HSPLkotlinx/coroutines/JobSupport;->invokeOnCompletion(ZZLkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/DisposableHandle; +HSPLkotlinx/coroutines/JobSupport;->isActive()Z +HSPLkotlinx/coroutines/JobSupport;->isCancelled()Z +HSPLkotlinx/coroutines/JobSupport;->isCompleted()Z +HSPLkotlinx/coroutines/JobSupport;->isScopedCoroutine()Z +HSPLkotlinx/coroutines/JobSupport;->join(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/JobSupport;->joinInternal()Z +HSPLkotlinx/coroutines/JobSupport;->joinSuspend(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/JobSupport;->makeCancelling(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/JobSupport;->makeCompletingOnce$kotlinx_coroutines_core(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/JobSupport;->makeNode(Lkotlin/jvm/functions/Function1;Z)Lkotlinx/coroutines/JobNode; +HSPLkotlinx/coroutines/JobSupport;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext; +HSPLkotlinx/coroutines/JobSupport;->nextChild(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)Lkotlinx/coroutines/ChildHandleNode; +HSPLkotlinx/coroutines/JobSupport;->notifyCancelling(Lkotlinx/coroutines/NodeList;Ljava/lang/Throwable;)V +HSPLkotlinx/coroutines/JobSupport;->notifyCompletion(Lkotlinx/coroutines/NodeList;Ljava/lang/Throwable;)V +HSPLkotlinx/coroutines/JobSupport;->onCancelling(Ljava/lang/Throwable;)V +HSPLkotlinx/coroutines/JobSupport;->onCompletionInternal(Ljava/lang/Object;)V +HSPLkotlinx/coroutines/JobSupport;->parentCancelled(Lkotlinx/coroutines/ParentJob;)V +HSPLkotlinx/coroutines/JobSupport;->plus(Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext; +HSPLkotlinx/coroutines/JobSupport;->promoteSingleToNodeList(Lkotlinx/coroutines/JobNode;)V +HSPLkotlinx/coroutines/JobSupport;->removeNode$kotlinx_coroutines_core(Lkotlinx/coroutines/JobNode;)V +HSPLkotlinx/coroutines/JobSupport;->setParentHandle$kotlinx_coroutines_core(Lkotlinx/coroutines/ChildHandle;)V +HSPLkotlinx/coroutines/JobSupport;->start()Z +HSPLkotlinx/coroutines/JobSupport;->startInternal(Ljava/lang/Object;)I +HSPLkotlinx/coroutines/JobSupport;->toCancellationException$default(Lkotlinx/coroutines/JobSupport;Ljava/lang/Throwable;Ljava/lang/String;ILjava/lang/Object;)Ljava/util/concurrent/CancellationException; +HSPLkotlinx/coroutines/JobSupport;->toCancellationException(Ljava/lang/Throwable;Ljava/lang/String;)Ljava/util/concurrent/CancellationException; +HSPLkotlinx/coroutines/JobSupport;->tryFinalizeSimpleState(Lkotlinx/coroutines/Incomplete;Ljava/lang/Object;)Z +HSPLkotlinx/coroutines/JobSupport;->tryMakeCancelling(Lkotlinx/coroutines/Incomplete;Ljava/lang/Throwable;)Z +HSPLkotlinx/coroutines/JobSupport;->tryMakeCompleting(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/JobSupport;->tryMakeCompletingSlowPath(Lkotlinx/coroutines/Incomplete;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/JobSupport;->tryWaitForChild(Lkotlinx/coroutines/JobSupport$Finishing;Lkotlinx/coroutines/ChildHandleNode;Ljava/lang/Object;)Z +Lkotlinx/coroutines/JobSupport$AwaitContinuation; +HSPLkotlinx/coroutines/JobSupport$AwaitContinuation;->(Lkotlin/coroutines/Continuation;Lkotlinx/coroutines/JobSupport;)V +Lkotlinx/coroutines/JobSupport$ChildCompletion; +HSPLkotlinx/coroutines/JobSupport$ChildCompletion;->(Lkotlinx/coroutines/JobSupport;Lkotlinx/coroutines/JobSupport$Finishing;Lkotlinx/coroutines/ChildHandleNode;Ljava/lang/Object;)V +HSPLkotlinx/coroutines/JobSupport$ChildCompletion;->invoke(Ljava/lang/Throwable;)V +Lkotlinx/coroutines/JobSupport$Finishing; +HSPLkotlinx/coroutines/JobSupport$Finishing;->()V +HSPLkotlinx/coroutines/JobSupport$Finishing;->(Lkotlinx/coroutines/NodeList;ZLjava/lang/Throwable;)V +HSPLkotlinx/coroutines/JobSupport$Finishing;->addExceptionLocked(Ljava/lang/Throwable;)V +HSPLkotlinx/coroutines/JobSupport$Finishing;->allocateList()Ljava/util/ArrayList; +HSPLkotlinx/coroutines/JobSupport$Finishing;->getExceptionsHolder()Ljava/lang/Object; +HSPLkotlinx/coroutines/JobSupport$Finishing;->getList()Lkotlinx/coroutines/NodeList; +HSPLkotlinx/coroutines/JobSupport$Finishing;->getRootCause()Ljava/lang/Throwable; +HSPLkotlinx/coroutines/JobSupport$Finishing;->get_exceptionsHolder$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/JobSupport$Finishing;->get_isCompleting$volatile$FU()Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater; +HSPLkotlinx/coroutines/JobSupport$Finishing;->get_rootCause$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/JobSupport$Finishing;->isActive()Z +HSPLkotlinx/coroutines/JobSupport$Finishing;->isCancelling()Z +HSPLkotlinx/coroutines/JobSupport$Finishing;->isCompleting()Z +PLkotlinx/coroutines/JobSupport$Finishing;->isSealed()Z +HSPLkotlinx/coroutines/JobSupport$Finishing;->sealLocked(Ljava/lang/Throwable;)Ljava/util/List; +HSPLkotlinx/coroutines/JobSupport$Finishing;->setCompleting(Z)V +HSPLkotlinx/coroutines/JobSupport$Finishing;->setExceptionsHolder(Ljava/lang/Object;)V +HSPLkotlinx/coroutines/JobSupport$Finishing;->setRootCause(Ljava/lang/Throwable;)V +Lkotlinx/coroutines/JobSupport$addLastAtomic$$inlined$addLastIf$1; +HSPLkotlinx/coroutines/JobSupport$addLastAtomic$$inlined$addLastIf$1;->(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;Lkotlinx/coroutines/JobSupport;Ljava/lang/Object;)V +HSPLkotlinx/coroutines/JobSupport$addLastAtomic$$inlined$addLastIf$1;->prepare(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/JobSupport$addLastAtomic$$inlined$addLastIf$1;->prepare(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)Ljava/lang/Object; +Lkotlinx/coroutines/JobSupportKt; +HSPLkotlinx/coroutines/JobSupportKt;->()V +HSPLkotlinx/coroutines/JobSupportKt;->access$getCOMPLETING_ALREADY$p()Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/JobSupportKt;->access$getCOMPLETING_RETRY$p()Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/JobSupportKt;->access$getEMPTY_ACTIVE$p()Lkotlinx/coroutines/Empty; +HSPLkotlinx/coroutines/JobSupportKt;->access$getSEALED$p()Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/JobSupportKt;->access$getTOO_LATE_TO_CANCEL$p()Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/JobSupportKt;->boxIncomplete(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/JobSupportKt;->unboxState(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/MainCoroutineDispatcher; +HSPLkotlinx/coroutines/MainCoroutineDispatcher;->()V +Lkotlinx/coroutines/NodeList; +HSPLkotlinx/coroutines/NodeList;->()V +HSPLkotlinx/coroutines/NodeList;->getList()Lkotlinx/coroutines/NodeList; +HSPLkotlinx/coroutines/NodeList;->isActive()Z +Lkotlinx/coroutines/NonDisposableHandle; +HSPLkotlinx/coroutines/NonDisposableHandle;->()V +HSPLkotlinx/coroutines/NonDisposableHandle;->()V +HSPLkotlinx/coroutines/NonDisposableHandle;->dispose()V +Lkotlinx/coroutines/NotCompleted; +Lkotlinx/coroutines/ParentJob; +Lkotlinx/coroutines/ResumeAwaitOnCompletion; +HSPLkotlinx/coroutines/ResumeAwaitOnCompletion;->(Lkotlinx/coroutines/CancellableContinuationImpl;)V +HSPLkotlinx/coroutines/ResumeAwaitOnCompletion;->invoke(Ljava/lang/Throwable;)V +Lkotlinx/coroutines/ResumeOnCompletion; +HSPLkotlinx/coroutines/ResumeOnCompletion;->(Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/ResumeOnCompletion;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/ResumeOnCompletion;->invoke(Ljava/lang/Throwable;)V +Lkotlinx/coroutines/StandaloneCoroutine; +HSPLkotlinx/coroutines/StandaloneCoroutine;->(Lkotlin/coroutines/CoroutineContext;Z)V +Lkotlinx/coroutines/SupervisorJobImpl; +HSPLkotlinx/coroutines/SupervisorJobImpl;->(Lkotlinx/coroutines/Job;)V +Lkotlinx/coroutines/SupervisorKt; +HSPLkotlinx/coroutines/SupervisorKt;->SupervisorJob$default(Lkotlinx/coroutines/Job;ILjava/lang/Object;)Lkotlinx/coroutines/CompletableJob; +HSPLkotlinx/coroutines/SupervisorKt;->SupervisorJob(Lkotlinx/coroutines/Job;)Lkotlinx/coroutines/CompletableJob; +Lkotlinx/coroutines/ThreadContextElement; +Lkotlinx/coroutines/ThreadContextElement$DefaultImpls; +HSPLkotlinx/coroutines/ThreadContextElement$DefaultImpls;->fold(Lkotlinx/coroutines/ThreadContextElement;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; +Lkotlinx/coroutines/ThreadContextElementKt; +HSPLkotlinx/coroutines/ThreadContextElementKt;->asContextElement(Ljava/lang/ThreadLocal;Ljava/lang/Object;)Lkotlinx/coroutines/ThreadContextElement; +Lkotlinx/coroutines/ThreadLocalEventLoop; +HSPLkotlinx/coroutines/ThreadLocalEventLoop;->()V +HSPLkotlinx/coroutines/ThreadLocalEventLoop;->()V +HSPLkotlinx/coroutines/ThreadLocalEventLoop;->getEventLoop$kotlinx_coroutines_core()Lkotlinx/coroutines/EventLoop; +HSPLkotlinx/coroutines/ThreadLocalEventLoop;->resetEventLoop$kotlinx_coroutines_core()V +HSPLkotlinx/coroutines/ThreadLocalEventLoop;->setEventLoop$kotlinx_coroutines_core(Lkotlinx/coroutines/EventLoop;)V +Lkotlinx/coroutines/TimeoutCancellationException; +Lkotlinx/coroutines/Unconfined; +HSPLkotlinx/coroutines/Unconfined;->()V +HSPLkotlinx/coroutines/Unconfined;->()V +Lkotlinx/coroutines/UndispatchedCoroutine; +HSPLkotlinx/coroutines/UndispatchedCoroutine;->(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/UndispatchedCoroutine;->afterResume(Ljava/lang/Object;)V +PLkotlinx/coroutines/UndispatchedCoroutine;->clearThreadContext()Z +PLkotlinx/coroutines/UndispatchedCoroutine;->saveThreadContext(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Object;)V +Lkotlinx/coroutines/UndispatchedMarker; +HSPLkotlinx/coroutines/UndispatchedMarker;->()V +HSPLkotlinx/coroutines/UndispatchedMarker;->()V +HSPLkotlinx/coroutines/UndispatchedMarker;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; +HSPLkotlinx/coroutines/UndispatchedMarker;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; +HSPLkotlinx/coroutines/UndispatchedMarker;->getKey()Lkotlin/coroutines/CoroutineContext$Key; +Lkotlinx/coroutines/Waiter; +Lkotlinx/coroutines/YieldContext; +HSPLkotlinx/coroutines/YieldContext;->()V +HSPLkotlinx/coroutines/YieldContext;->()V +Lkotlinx/coroutines/YieldContext$Key; +HSPLkotlinx/coroutines/YieldContext$Key;->()V +HSPLkotlinx/coroutines/YieldContext$Key;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlinx/coroutines/YieldKt; +HSPLkotlinx/coroutines/YieldKt;->yield(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/android/AndroidDispatcherFactory; +HSPLkotlinx/coroutines/android/AndroidDispatcherFactory;->()V +HSPLkotlinx/coroutines/android/AndroidDispatcherFactory;->createDispatcher(Ljava/util/List;)Lkotlinx/coroutines/MainCoroutineDispatcher; +Lkotlinx/coroutines/android/HandlerContext; +HSPLkotlinx/coroutines/android/HandlerContext;->(Landroid/os/Handler;Ljava/lang/String;)V +HSPLkotlinx/coroutines/android/HandlerContext;->(Landroid/os/Handler;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlinx/coroutines/android/HandlerContext;->(Landroid/os/Handler;Ljava/lang/String;Z)V +HSPLkotlinx/coroutines/android/HandlerContext;->dispatch(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V +HSPLkotlinx/coroutines/android/HandlerContext;->equals(Ljava/lang/Object;)Z +HSPLkotlinx/coroutines/android/HandlerContext;->getImmediate()Lkotlinx/coroutines/MainCoroutineDispatcher; +HSPLkotlinx/coroutines/android/HandlerContext;->getImmediate()Lkotlinx/coroutines/android/HandlerContext; +HSPLkotlinx/coroutines/android/HandlerContext;->getImmediate()Lkotlinx/coroutines/android/HandlerDispatcher; +HSPLkotlinx/coroutines/android/HandlerContext;->isDispatchNeeded(Lkotlin/coroutines/CoroutineContext;)Z +HSPLkotlinx/coroutines/android/HandlerContext;->scheduleResumeAfterDelay(JLkotlinx/coroutines/CancellableContinuation;)V +Lkotlinx/coroutines/android/HandlerContext$scheduleResumeAfterDelay$$inlined$Runnable$1; +HSPLkotlinx/coroutines/android/HandlerContext$scheduleResumeAfterDelay$$inlined$Runnable$1;->(Lkotlinx/coroutines/CancellableContinuation;Lkotlinx/coroutines/android/HandlerContext;)V +HSPLkotlinx/coroutines/android/HandlerContext$scheduleResumeAfterDelay$$inlined$Runnable$1;->run()V +Lkotlinx/coroutines/android/HandlerContext$scheduleResumeAfterDelay$1; +HSPLkotlinx/coroutines/android/HandlerContext$scheduleResumeAfterDelay$1;->(Lkotlinx/coroutines/android/HandlerContext;Ljava/lang/Runnable;)V +Lkotlinx/coroutines/android/HandlerDispatcher; +HSPLkotlinx/coroutines/android/HandlerDispatcher;->()V +HSPLkotlinx/coroutines/android/HandlerDispatcher;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlinx/coroutines/android/HandlerDispatcherKt; +HSPLkotlinx/coroutines/android/HandlerDispatcherKt;->()V +HSPLkotlinx/coroutines/android/HandlerDispatcherKt;->asHandler(Landroid/os/Looper;Z)Landroid/os/Handler; +HSPLkotlinx/coroutines/android/HandlerDispatcherKt;->from(Landroid/os/Handler;Ljava/lang/String;)Lkotlinx/coroutines/android/HandlerDispatcher; +Lkotlinx/coroutines/channels/BufferOverflow; +HSPLkotlinx/coroutines/channels/BufferOverflow;->$values()[Lkotlinx/coroutines/channels/BufferOverflow; +HSPLkotlinx/coroutines/channels/BufferOverflow;->()V +HSPLkotlinx/coroutines/channels/BufferOverflow;->(Ljava/lang/String;I)V +Lkotlinx/coroutines/channels/BufferedChannel; +HSPLkotlinx/coroutines/channels/BufferedChannel;->()V +HSPLkotlinx/coroutines/channels/BufferedChannel;->(ILkotlin/jvm/functions/Function1;)V +HSPLkotlinx/coroutines/channels/BufferedChannel;->access$findSegmentReceive(Lkotlinx/coroutines/channels/BufferedChannel;JLkotlinx/coroutines/channels/ChannelSegment;)Lkotlinx/coroutines/channels/ChannelSegment; +HSPLkotlinx/coroutines/channels/BufferedChannel;->access$findSegmentSend(Lkotlinx/coroutines/channels/BufferedChannel;JLkotlinx/coroutines/channels/ChannelSegment;)Lkotlinx/coroutines/channels/ChannelSegment; +HSPLkotlinx/coroutines/channels/BufferedChannel;->access$getReceiveSegment$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/channels/BufferedChannel;->access$getReceivers$volatile$FU()Ljava/util/concurrent/atomic/AtomicLongFieldUpdater; +HSPLkotlinx/coroutines/channels/BufferedChannel;->access$getSendSegment$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/channels/BufferedChannel;->access$getSendersAndCloseStatus$volatile$FU()Ljava/util/concurrent/atomic/AtomicLongFieldUpdater; +HSPLkotlinx/coroutines/channels/BufferedChannel;->access$isClosedForSend0(Lkotlinx/coroutines/channels/BufferedChannel;J)Z +HSPLkotlinx/coroutines/channels/BufferedChannel;->access$prepareReceiverForSuspension(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/Waiter;Lkotlinx/coroutines/channels/ChannelSegment;I)V +HSPLkotlinx/coroutines/channels/BufferedChannel;->access$prepareSenderForSuspension(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/Waiter;Lkotlinx/coroutines/channels/ChannelSegment;I)V +HSPLkotlinx/coroutines/channels/BufferedChannel;->access$processResultSelectReceiveCatching(Lkotlinx/coroutines/channels/BufferedChannel;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/BufferedChannel;->access$receiveCatchingOnNoWaiterSuspend-GKJJFZk(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/channels/ChannelSegment;IJLkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/BufferedChannel;->access$registerSelectForReceive(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/selects/SelectInstance;Ljava/lang/Object;)V +HSPLkotlinx/coroutines/channels/BufferedChannel;->access$updateCellReceive(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/channels/ChannelSegment;IJLjava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/BufferedChannel;->access$updateCellSend(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/channels/ChannelSegment;ILjava/lang/Object;JLjava/lang/Object;Z)I +HSPLkotlinx/coroutines/channels/BufferedChannel;->bufferOrRendezvousSend(J)Z +HSPLkotlinx/coroutines/channels/BufferedChannel;->cancel(Ljava/util/concurrent/CancellationException;)V +HSPLkotlinx/coroutines/channels/BufferedChannel;->cancelImpl$kotlinx_coroutines_core(Ljava/lang/Throwable;)Z +HSPLkotlinx/coroutines/channels/BufferedChannel;->cancelSuspendedReceiveRequests(Lkotlinx/coroutines/channels/ChannelSegment;J)V +HSPLkotlinx/coroutines/channels/BufferedChannel;->close(Ljava/lang/Throwable;)Z +HSPLkotlinx/coroutines/channels/BufferedChannel;->closeLinkedList()Lkotlinx/coroutines/channels/ChannelSegment; +HSPLkotlinx/coroutines/channels/BufferedChannel;->closeOrCancelImpl(Ljava/lang/Throwable;Z)Z +HSPLkotlinx/coroutines/channels/BufferedChannel;->completeCancel(J)V +HSPLkotlinx/coroutines/channels/BufferedChannel;->completeClose(J)Lkotlinx/coroutines/channels/ChannelSegment; +HSPLkotlinx/coroutines/channels/BufferedChannel;->completeCloseOrCancel()V +HSPLkotlinx/coroutines/channels/BufferedChannel;->dropFirstElementUntilTheSpecifiedCellIsInTheBuffer(J)V +HSPLkotlinx/coroutines/channels/BufferedChannel;->expandBuffer()V +HSPLkotlinx/coroutines/channels/BufferedChannel;->findSegmentBufferEnd(JLkotlinx/coroutines/channels/ChannelSegment;J)Lkotlinx/coroutines/channels/ChannelSegment; +HSPLkotlinx/coroutines/channels/BufferedChannel;->findSegmentReceive(JLkotlinx/coroutines/channels/ChannelSegment;)Lkotlinx/coroutines/channels/ChannelSegment; +HSPLkotlinx/coroutines/channels/BufferedChannel;->findSegmentSend(JLkotlinx/coroutines/channels/ChannelSegment;)Lkotlinx/coroutines/channels/ChannelSegment; +HSPLkotlinx/coroutines/channels/BufferedChannel;->getBufferEnd$volatile$FU()Ljava/util/concurrent/atomic/AtomicLongFieldUpdater; +HSPLkotlinx/coroutines/channels/BufferedChannel;->getBufferEndCounter()J +HSPLkotlinx/coroutines/channels/BufferedChannel;->getBufferEndSegment$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/channels/BufferedChannel;->getCloseCause()Ljava/lang/Throwable; +HSPLkotlinx/coroutines/channels/BufferedChannel;->getCloseHandler$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/channels/BufferedChannel;->getCompletedExpandBuffersAndPauseFlag$volatile$FU()Ljava/util/concurrent/atomic/AtomicLongFieldUpdater; +HSPLkotlinx/coroutines/channels/BufferedChannel;->getOnReceiveCatching()Lkotlinx/coroutines/selects/SelectClause1; +HSPLkotlinx/coroutines/channels/BufferedChannel;->getReceiveSegment$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/channels/BufferedChannel;->getReceivers$volatile$FU()Ljava/util/concurrent/atomic/AtomicLongFieldUpdater; +HSPLkotlinx/coroutines/channels/BufferedChannel;->getReceiversCounter$kotlinx_coroutines_core()J +HSPLkotlinx/coroutines/channels/BufferedChannel;->getSendSegment$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/channels/BufferedChannel;->getSendersAndCloseStatus$volatile$FU()Ljava/util/concurrent/atomic/AtomicLongFieldUpdater; +HSPLkotlinx/coroutines/channels/BufferedChannel;->getSendersCounter$kotlinx_coroutines_core()J +HSPLkotlinx/coroutines/channels/BufferedChannel;->get_closeCause$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/channels/BufferedChannel;->hasElements$kotlinx_coroutines_core()Z +HSPLkotlinx/coroutines/channels/BufferedChannel;->incCompletedExpandBufferAttempts$default(Lkotlinx/coroutines/channels/BufferedChannel;JILjava/lang/Object;)V +HSPLkotlinx/coroutines/channels/BufferedChannel;->incCompletedExpandBufferAttempts(J)V +HSPLkotlinx/coroutines/channels/BufferedChannel;->invokeCloseHandler()V +HSPLkotlinx/coroutines/channels/BufferedChannel;->invokeOnClose(Lkotlin/jvm/functions/Function1;)V +HSPLkotlinx/coroutines/channels/BufferedChannel;->isClosed(JZ)Z +HSPLkotlinx/coroutines/channels/BufferedChannel;->isClosedForReceive()Z +HSPLkotlinx/coroutines/channels/BufferedChannel;->isClosedForReceive0(J)Z +HSPLkotlinx/coroutines/channels/BufferedChannel;->isClosedForSend()Z +HSPLkotlinx/coroutines/channels/BufferedChannel;->isClosedForSend0(J)Z +HSPLkotlinx/coroutines/channels/BufferedChannel;->isConflatedDropOldest()Z +HSPLkotlinx/coroutines/channels/BufferedChannel;->isRendezvousOrUnlimited()Z +HSPLkotlinx/coroutines/channels/BufferedChannel;->iterator()Lkotlinx/coroutines/channels/ChannelIterator; +HSPLkotlinx/coroutines/channels/BufferedChannel;->markAllEmptyCellsAsClosed(Lkotlinx/coroutines/channels/ChannelSegment;)J +HSPLkotlinx/coroutines/channels/BufferedChannel;->markCancellationStarted()V +HSPLkotlinx/coroutines/channels/BufferedChannel;->markCancelled()V +HSPLkotlinx/coroutines/channels/BufferedChannel;->markClosed()V +HSPLkotlinx/coroutines/channels/BufferedChannel;->onClosedIdempotent()V +HSPLkotlinx/coroutines/channels/BufferedChannel;->onReceiveDequeued()V +HSPLkotlinx/coroutines/channels/BufferedChannel;->onReceiveEnqueued()V +HSPLkotlinx/coroutines/channels/BufferedChannel;->prepareReceiverForSuspension(Lkotlinx/coroutines/Waiter;Lkotlinx/coroutines/channels/ChannelSegment;I)V +HSPLkotlinx/coroutines/channels/BufferedChannel;->prepareSenderForSuspension(Lkotlinx/coroutines/Waiter;Lkotlinx/coroutines/channels/ChannelSegment;I)V +HSPLkotlinx/coroutines/channels/BufferedChannel;->processResultSelectReceiveCatching(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/BufferedChannel;->receive$suspendImpl(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/BufferedChannel;->receive(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/BufferedChannel;->receiveCatching-JP2dKIU$suspendImpl(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/BufferedChannel;->receiveCatching-JP2dKIU(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/BufferedChannel;->receiveCatchingOnNoWaiterSuspend-GKJJFZk(Lkotlinx/coroutines/channels/ChannelSegment;IJLkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/BufferedChannel;->receiveOnNoWaiterSuspend(Lkotlinx/coroutines/channels/ChannelSegment;IJLkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/BufferedChannel;->registerSelectForReceive(Lkotlinx/coroutines/selects/SelectInstance;Ljava/lang/Object;)V +HSPLkotlinx/coroutines/channels/BufferedChannel;->removeUnprocessedElements(Lkotlinx/coroutines/channels/ChannelSegment;)V +HSPLkotlinx/coroutines/channels/BufferedChannel;->resumeReceiverOnClosedChannel(Lkotlinx/coroutines/Waiter;)V +HSPLkotlinx/coroutines/channels/BufferedChannel;->resumeWaiterOnClosedChannel(Lkotlinx/coroutines/Waiter;Z)V +HSPLkotlinx/coroutines/channels/BufferedChannel;->send$suspendImpl(Lkotlinx/coroutines/channels/BufferedChannel;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/BufferedChannel;->send(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/BufferedChannel;->sendOnNoWaiterSuspend(Lkotlinx/coroutines/channels/ChannelSegment;ILjava/lang/Object;JLkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/BufferedChannel;->shouldSendSuspend(J)Z +HSPLkotlinx/coroutines/channels/BufferedChannel;->tryReceive-PtdJZtk()Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/BufferedChannel;->tryResumeReceiver(Ljava/lang/Object;Ljava/lang/Object;)Z +HSPLkotlinx/coroutines/channels/BufferedChannel;->tryResumeSender(Ljava/lang/Object;Lkotlinx/coroutines/channels/ChannelSegment;I)Z +HSPLkotlinx/coroutines/channels/BufferedChannel;->trySend-JP2dKIU(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/BufferedChannel;->updateCellExpandBuffer(Lkotlinx/coroutines/channels/ChannelSegment;IJ)Z +HSPLkotlinx/coroutines/channels/BufferedChannel;->updateCellExpandBufferSlow(Lkotlinx/coroutines/channels/ChannelSegment;IJ)Z +HSPLkotlinx/coroutines/channels/BufferedChannel;->updateCellReceive(Lkotlinx/coroutines/channels/ChannelSegment;IJLjava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/BufferedChannel;->updateCellReceiveSlow(Lkotlinx/coroutines/channels/ChannelSegment;IJLjava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/BufferedChannel;->updateCellSend(Lkotlinx/coroutines/channels/ChannelSegment;ILjava/lang/Object;JLjava/lang/Object;Z)I +HSPLkotlinx/coroutines/channels/BufferedChannel;->updateCellSendSlow(Lkotlinx/coroutines/channels/ChannelSegment;ILjava/lang/Object;JLjava/lang/Object;Z)I +HSPLkotlinx/coroutines/channels/BufferedChannel;->waitExpandBufferCompletion$kotlinx_coroutines_core(J)V +Lkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator; +HSPLkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;->(Lkotlinx/coroutines/channels/BufferedChannel;)V +HSPLkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;->access$setContinuation$p(Lkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;Lkotlinx/coroutines/CancellableContinuationImpl;)V +HSPLkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;->access$setReceiveResult$p(Lkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;Ljava/lang/Object;)V +HSPLkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;->hasNext(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;->hasNextOnNoWaiterSuspend(Lkotlinx/coroutines/channels/ChannelSegment;IJLkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;->invokeOnCancellation(Lkotlinx/coroutines/internal/Segment;I)V +HSPLkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;->next()Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;->tryResumeHasNext(Ljava/lang/Object;)Z +HSPLkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;->tryResumeHasNextOnClosedChannel()V +Lkotlinx/coroutines/channels/BufferedChannel$SendBroadcast; +Lkotlinx/coroutines/channels/BufferedChannel$onReceiveCatching$1; +HSPLkotlinx/coroutines/channels/BufferedChannel$onReceiveCatching$1;->()V +HSPLkotlinx/coroutines/channels/BufferedChannel$onReceiveCatching$1;->()V +HSPLkotlinx/coroutines/channels/BufferedChannel$onReceiveCatching$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/BufferedChannel$onReceiveCatching$1;->invoke(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/selects/SelectInstance;Ljava/lang/Object;)V +Lkotlinx/coroutines/channels/BufferedChannel$onReceiveCatching$2; +HSPLkotlinx/coroutines/channels/BufferedChannel$onReceiveCatching$2;->()V +HSPLkotlinx/coroutines/channels/BufferedChannel$onReceiveCatching$2;->()V +HSPLkotlinx/coroutines/channels/BufferedChannel$onReceiveCatching$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/BufferedChannel$onReceiveCatching$2;->invoke(Lkotlinx/coroutines/channels/BufferedChannel;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/channels/BufferedChannel$receiveCatching$1; +HSPLkotlinx/coroutines/channels/BufferedChannel$receiveCatching$1;->(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/channels/BufferedChannel$receiveCatching$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/channels/BufferedChannel$receiveCatchingOnNoWaiterSuspend$1; +HSPLkotlinx/coroutines/channels/BufferedChannel$receiveCatchingOnNoWaiterSuspend$1;->(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/channels/BufferedChannel$receiveCatchingOnNoWaiterSuspend$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/channels/BufferedChannelKt; +HSPLkotlinx/coroutines/channels/BufferedChannelKt;->()V +HSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$constructSendersAndCloseStatus(JI)J +HSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$createSegment(JLkotlinx/coroutines/channels/ChannelSegment;)Lkotlinx/coroutines/channels/ChannelSegment; +HSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getCLOSE_HANDLER_CLOSED$p()Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getCLOSE_HANDLER_INVOKED$p()Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getDONE_RCV$p()Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getEXPAND_BUFFER_COMPLETION_WAIT_ITERATIONS$p()I +HSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getFAILED$p()Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getINTERRUPTED_RCV$p()Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getINTERRUPTED_SEND$p()Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getIN_BUFFER$p()Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getNO_CLOSE_CAUSE$p()Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getNO_RECEIVE_RESULT$p()Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getNULL_SEGMENT$p()Lkotlinx/coroutines/channels/ChannelSegment; +HSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getPOISONED$p()Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getRESUMING_BY_EB$p()Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getRESUMING_BY_RCV$p()Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getSUSPEND$p()Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getSUSPEND_NO_WAITER$p()Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$initialBufferEnd(I)J +HSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$tryResume0(Lkotlinx/coroutines/CancellableContinuation;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Z +HSPLkotlinx/coroutines/channels/BufferedChannelKt;->constructSendersAndCloseStatus(JI)J +HSPLkotlinx/coroutines/channels/BufferedChannelKt;->createSegment(JLkotlinx/coroutines/channels/ChannelSegment;)Lkotlinx/coroutines/channels/ChannelSegment; +HSPLkotlinx/coroutines/channels/BufferedChannelKt;->createSegmentFunction()Lkotlin/reflect/KFunction; +HSPLkotlinx/coroutines/channels/BufferedChannelKt;->getCHANNEL_CLOSED()Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/channels/BufferedChannelKt;->initialBufferEnd(I)J +HSPLkotlinx/coroutines/channels/BufferedChannelKt;->tryResume0$default(Lkotlinx/coroutines/CancellableContinuation;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Z +HSPLkotlinx/coroutines/channels/BufferedChannelKt;->tryResume0(Lkotlinx/coroutines/CancellableContinuation;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Z +Lkotlinx/coroutines/channels/BufferedChannelKt$createSegmentFunction$1; +HSPLkotlinx/coroutines/channels/BufferedChannelKt$createSegmentFunction$1;->()V +HSPLkotlinx/coroutines/channels/BufferedChannelKt$createSegmentFunction$1;->()V +HSPLkotlinx/coroutines/channels/BufferedChannelKt$createSegmentFunction$1;->invoke(JLkotlinx/coroutines/channels/ChannelSegment;)Lkotlinx/coroutines/channels/ChannelSegment; +HSPLkotlinx/coroutines/channels/BufferedChannelKt$createSegmentFunction$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/channels/Channel; +HSPLkotlinx/coroutines/channels/Channel;->()V +Lkotlinx/coroutines/channels/Channel$Factory; +HSPLkotlinx/coroutines/channels/Channel$Factory;->()V +HSPLkotlinx/coroutines/channels/Channel$Factory;->()V +HSPLkotlinx/coroutines/channels/Channel$Factory;->getCHANNEL_DEFAULT_CAPACITY$kotlinx_coroutines_core()I +Lkotlinx/coroutines/channels/ChannelCoroutine; +HSPLkotlinx/coroutines/channels/ChannelCoroutine;->(Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/channels/Channel;ZZ)V +HSPLkotlinx/coroutines/channels/ChannelCoroutine;->cancel(Ljava/util/concurrent/CancellationException;)V +HSPLkotlinx/coroutines/channels/ChannelCoroutine;->cancelInternal(Ljava/lang/Throwable;)V +HSPLkotlinx/coroutines/channels/ChannelCoroutine;->getChannel()Lkotlinx/coroutines/channels/Channel; +HSPLkotlinx/coroutines/channels/ChannelCoroutine;->getOnReceiveCatching()Lkotlinx/coroutines/selects/SelectClause1; +HSPLkotlinx/coroutines/channels/ChannelCoroutine;->get_channel()Lkotlinx/coroutines/channels/Channel; +HSPLkotlinx/coroutines/channels/ChannelCoroutine;->invokeOnClose(Lkotlin/jvm/functions/Function1;)V +HSPLkotlinx/coroutines/channels/ChannelCoroutine;->iterator()Lkotlinx/coroutines/channels/ChannelIterator; +HSPLkotlinx/coroutines/channels/ChannelCoroutine;->send(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/ChannelCoroutine;->trySend-JP2dKIU(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/channels/ChannelIterator; +Lkotlinx/coroutines/channels/ChannelKt; +HSPLkotlinx/coroutines/channels/ChannelKt;->Channel$default(ILkotlinx/coroutines/channels/BufferOverflow;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lkotlinx/coroutines/channels/Channel; +HSPLkotlinx/coroutines/channels/ChannelKt;->Channel(ILkotlinx/coroutines/channels/BufferOverflow;Lkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/channels/Channel; +Lkotlinx/coroutines/channels/ChannelResult; +HSPLkotlinx/coroutines/channels/ChannelResult;->()V +HSPLkotlinx/coroutines/channels/ChannelResult;->(Ljava/lang/Object;)V +HSPLkotlinx/coroutines/channels/ChannelResult;->access$getFailed$cp()Lkotlinx/coroutines/channels/ChannelResult$Failed; +HSPLkotlinx/coroutines/channels/ChannelResult;->box-impl(Ljava/lang/Object;)Lkotlinx/coroutines/channels/ChannelResult; +HSPLkotlinx/coroutines/channels/ChannelResult;->constructor-impl(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/ChannelResult;->getOrNull-impl(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/ChannelResult;->isSuccess-impl(Ljava/lang/Object;)Z +HSPLkotlinx/coroutines/channels/ChannelResult;->unbox-impl()Ljava/lang/Object; +Lkotlinx/coroutines/channels/ChannelResult$Closed; +HSPLkotlinx/coroutines/channels/ChannelResult$Closed;->(Ljava/lang/Throwable;)V +Lkotlinx/coroutines/channels/ChannelResult$Companion; +HSPLkotlinx/coroutines/channels/ChannelResult$Companion;->()V +HSPLkotlinx/coroutines/channels/ChannelResult$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlinx/coroutines/channels/ChannelResult$Companion;->closed-JP2dKIU(Ljava/lang/Throwable;)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/ChannelResult$Companion;->failure-PtdJZtk()Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/ChannelResult$Companion;->success-JP2dKIU(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/channels/ChannelResult$Failed; +HSPLkotlinx/coroutines/channels/ChannelResult$Failed;->()V +Lkotlinx/coroutines/channels/ChannelSegment; +HSPLkotlinx/coroutines/channels/ChannelSegment;->(JLkotlinx/coroutines/channels/ChannelSegment;Lkotlinx/coroutines/channels/BufferedChannel;I)V +HSPLkotlinx/coroutines/channels/ChannelSegment;->casState$kotlinx_coroutines_core(ILjava/lang/Object;Ljava/lang/Object;)Z +HSPLkotlinx/coroutines/channels/ChannelSegment;->cleanElement$kotlinx_coroutines_core(I)V +HSPLkotlinx/coroutines/channels/ChannelSegment;->getChannel()Lkotlinx/coroutines/channels/BufferedChannel; +HSPLkotlinx/coroutines/channels/ChannelSegment;->getData()Ljava/util/concurrent/atomic/AtomicReferenceArray; +HSPLkotlinx/coroutines/channels/ChannelSegment;->getElement$kotlinx_coroutines_core(I)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/ChannelSegment;->getNumberOfSlots()I +HSPLkotlinx/coroutines/channels/ChannelSegment;->getState$kotlinx_coroutines_core(I)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/ChannelSegment;->onCancellation(ILjava/lang/Throwable;Lkotlin/coroutines/CoroutineContext;)V +HSPLkotlinx/coroutines/channels/ChannelSegment;->onCancelledRequest(IZ)V +HSPLkotlinx/coroutines/channels/ChannelSegment;->retrieveElement$kotlinx_coroutines_core(I)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/ChannelSegment;->setElementLazy(ILjava/lang/Object;)V +HSPLkotlinx/coroutines/channels/ChannelSegment;->setState$kotlinx_coroutines_core(ILjava/lang/Object;)V +HSPLkotlinx/coroutines/channels/ChannelSegment;->storeElement$kotlinx_coroutines_core(ILjava/lang/Object;)V +Lkotlinx/coroutines/channels/ChannelsKt; +HSPLkotlinx/coroutines/channels/ChannelsKt;->cancelConsumed(Lkotlinx/coroutines/channels/ReceiveChannel;Ljava/lang/Throwable;)V +Lkotlinx/coroutines/channels/ChannelsKt__Channels_commonKt; +HSPLkotlinx/coroutines/channels/ChannelsKt__Channels_commonKt;->cancelConsumed(Lkotlinx/coroutines/channels/ReceiveChannel;Ljava/lang/Throwable;)V +Lkotlinx/coroutines/channels/ConflatedBufferedChannel; +HSPLkotlinx/coroutines/channels/ConflatedBufferedChannel;->(ILkotlinx/coroutines/channels/BufferOverflow;Lkotlin/jvm/functions/Function1;)V +HSPLkotlinx/coroutines/channels/ConflatedBufferedChannel;->isConflatedDropOldest()Z +HSPLkotlinx/coroutines/channels/ConflatedBufferedChannel;->send$suspendImpl(Lkotlinx/coroutines/channels/ConflatedBufferedChannel;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/ConflatedBufferedChannel;->send(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/ConflatedBufferedChannel;->trySend-JP2dKIU(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/ConflatedBufferedChannel;->trySendDropOldest-JP2dKIU(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/ConflatedBufferedChannel;->trySendImpl-Mj0NB7M(Ljava/lang/Object;Z)Ljava/lang/Object; +Lkotlinx/coroutines/channels/ProduceKt; +HSPLkotlinx/coroutines/channels/ProduceKt;->awaitClose$default(Lkotlinx/coroutines/channels/ProducerScope;Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/ProduceKt;->awaitClose(Lkotlinx/coroutines/channels/ProducerScope;Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/ProduceKt;->produce$default(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;ILkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/channels/ReceiveChannel; +HSPLkotlinx/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; +HSPLkotlinx/coroutines/channels/ProduceKt;->produce(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;ILkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/channels/ReceiveChannel; +HSPLkotlinx/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; +Lkotlinx/coroutines/channels/ProduceKt$awaitClose$1; +HSPLkotlinx/coroutines/channels/ProduceKt$awaitClose$1;->(Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/channels/ProduceKt$awaitClose$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/channels/ProduceKt$awaitClose$2; +HSPLkotlinx/coroutines/channels/ProduceKt$awaitClose$2;->()V +HSPLkotlinx/coroutines/channels/ProduceKt$awaitClose$2;->()V +Lkotlinx/coroutines/channels/ProduceKt$awaitClose$4$1; +HSPLkotlinx/coroutines/channels/ProduceKt$awaitClose$4$1;->(Lkotlinx/coroutines/CancellableContinuation;)V +HSPLkotlinx/coroutines/channels/ProduceKt$awaitClose$4$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/ProduceKt$awaitClose$4$1;->invoke(Ljava/lang/Throwable;)V +Lkotlinx/coroutines/channels/ProducerCoroutine; +HSPLkotlinx/coroutines/channels/ProducerCoroutine;->(Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/channels/Channel;)V +HSPLkotlinx/coroutines/channels/ProducerCoroutine;->getChannel()Lkotlinx/coroutines/channels/SendChannel; +HSPLkotlinx/coroutines/channels/ProducerCoroutine;->isActive()Z +HSPLkotlinx/coroutines/channels/ProducerCoroutine;->onCancelled(Ljava/lang/Throwable;Z)V +Lkotlinx/coroutines/channels/ProducerScope; +Lkotlinx/coroutines/channels/ReceiveCatching; +HSPLkotlinx/coroutines/channels/ReceiveCatching;->(Lkotlinx/coroutines/CancellableContinuationImpl;)V +HSPLkotlinx/coroutines/channels/ReceiveCatching;->invokeOnCancellation(Lkotlinx/coroutines/internal/Segment;I)V +Lkotlinx/coroutines/channels/ReceiveChannel; +Lkotlinx/coroutines/channels/SendChannel; +Lkotlinx/coroutines/channels/SendChannel$DefaultImpls; +HSPLkotlinx/coroutines/channels/SendChannel$DefaultImpls;->close$default(Lkotlinx/coroutines/channels/SendChannel;Ljava/lang/Throwable;ILjava/lang/Object;)Z +Lkotlinx/coroutines/channels/WaiterEB; +Lkotlinx/coroutines/flow/AbstractFlow; +HSPLkotlinx/coroutines/flow/AbstractFlow;->()V +HSPLkotlinx/coroutines/flow/AbstractFlow;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/AbstractFlow$collect$1; +HSPLkotlinx/coroutines/flow/AbstractFlow$collect$1;->(Lkotlinx/coroutines/flow/AbstractFlow;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/AbstractFlow$collect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/CallbackFlowBuilder; +HSPLkotlinx/coroutines/flow/CallbackFlowBuilder;->(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)V +HSPLkotlinx/coroutines/flow/CallbackFlowBuilder;->(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlinx/coroutines/flow/CallbackFlowBuilder;->collectTo(Lkotlinx/coroutines/channels/ProducerScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/CallbackFlowBuilder$collectTo$1; +HSPLkotlinx/coroutines/flow/CallbackFlowBuilder$collectTo$1;->(Lkotlinx/coroutines/flow/CallbackFlowBuilder;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/CallbackFlowBuilder$collectTo$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/CancellableFlow; +Lkotlinx/coroutines/flow/ChannelFlowBuilder; +HSPLkotlinx/coroutines/flow/ChannelFlowBuilder;->(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)V +HSPLkotlinx/coroutines/flow/ChannelFlowBuilder;->(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlinx/coroutines/flow/ChannelFlowBuilder;->collectTo$suspendImpl(Lkotlinx/coroutines/flow/ChannelFlowBuilder;Lkotlinx/coroutines/channels/ProducerScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/ChannelFlowBuilder;->collectTo(Lkotlinx/coroutines/channels/ProducerScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/DistinctFlowImpl; +HSPLkotlinx/coroutines/flow/DistinctFlowImpl;->(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;)V +HSPLkotlinx/coroutines/flow/DistinctFlowImpl;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/DistinctFlowImpl$collect$2; +HSPLkotlinx/coroutines/flow/DistinctFlowImpl$collect$2;->(Lkotlinx/coroutines/flow/DistinctFlowImpl;Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLkotlinx/coroutines/flow/DistinctFlowImpl$collect$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/DistinctFlowImpl$collect$2$emit$1; +HSPLkotlinx/coroutines/flow/DistinctFlowImpl$collect$2$emit$1;->(Lkotlinx/coroutines/flow/DistinctFlowImpl$collect$2;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/DistinctFlowImpl$collect$2$emit$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/EmptyFlow; +HSPLkotlinx/coroutines/flow/EmptyFlow;->()V +HSPLkotlinx/coroutines/flow/EmptyFlow;->()V +HSPLkotlinx/coroutines/flow/EmptyFlow;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/Flow; +Lkotlinx/coroutines/flow/FlowCollector; +Lkotlinx/coroutines/flow/FlowKt; +HSPLkotlinx/coroutines/flow/FlowKt;->asFlow(Lkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt;->asStateFlow(Lkotlinx/coroutines/flow/MutableStateFlow;)Lkotlinx/coroutines/flow/StateFlow; +HSPLkotlinx/coroutines/flow/FlowKt;->buffer$default(Lkotlinx/coroutines/flow/Flow;ILkotlinx/coroutines/channels/BufferOverflow;ILjava/lang/Object;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt;->buffer(Lkotlinx/coroutines/flow/Flow;ILkotlinx/coroutines/channels/BufferOverflow;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt;->callbackFlow(Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt;->catch(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function3;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt;->catchImpl(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt;->channelFlow(Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt;->collect(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt;->collectLatest(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt;->combine(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function3;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt;->combine(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function4;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt;->combine(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function5;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/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; +HSPLkotlinx/coroutines/flow/FlowKt;->conflate(Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt;->debounce(Lkotlinx/coroutines/flow/Flow;J)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt;->distinctUntilChanged(Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt;->distinctUntilChanged(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt;->dropWhile(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt;->emitAll(Lkotlinx/coroutines/flow/FlowCollector;Lkotlinx/coroutines/channels/ReceiveChannel;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt;->emitAll(Lkotlinx/coroutines/flow/FlowCollector;Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt;->emptyFlow()Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt;->ensureActive(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLkotlinx/coroutines/flow/FlowKt;->first(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt;->first(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt;->firstOrNull(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt;->flattenConcat(Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt;->flow(Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt;->flowCombine(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function3;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt;->flowOf(Ljava/lang/Object;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt;->flowOn(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt;->launchIn(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineScope;)Lkotlinx/coroutines/Job; +HSPLkotlinx/coroutines/flow/FlowKt;->mapLatest(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt;->merge(Ljava/lang/Iterable;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt;->merge([Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt;->onEach(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt;->onStart(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt;->runningFold(Lkotlinx/coroutines/flow/Flow;Ljava/lang/Object;Lkotlin/jvm/functions/Function3;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt;->runningReduce(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function3;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt;->scan(Lkotlinx/coroutines/flow/Flow;Ljava/lang/Object;Lkotlin/jvm/functions/Function3;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt;->shareIn$default(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/SharingStarted;IILjava/lang/Object;)Lkotlinx/coroutines/flow/SharedFlow; +HSPLkotlinx/coroutines/flow/FlowKt;->shareIn(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/SharingStarted;I)Lkotlinx/coroutines/flow/SharedFlow; +HSPLkotlinx/coroutines/flow/FlowKt;->stateIn(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/SharingStarted;Ljava/lang/Object;)Lkotlinx/coroutines/flow/StateFlow; +HSPLkotlinx/coroutines/flow/FlowKt;->transformLatest(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function3;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt;->withIndex(Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow; +Lkotlinx/coroutines/flow/FlowKt__BuildersKt; +HSPLkotlinx/coroutines/flow/FlowKt__BuildersKt;->asFlow(Lkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt__BuildersKt;->callbackFlow(Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt__BuildersKt;->channelFlow(Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt__BuildersKt;->emptyFlow()Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt__BuildersKt;->flow(Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt__BuildersKt;->flowOf(Ljava/lang/Object;)Lkotlinx/coroutines/flow/Flow; +Lkotlinx/coroutines/flow/FlowKt__BuildersKt$asFlow$$inlined$unsafeFlow$2; +HSPLkotlinx/coroutines/flow/FlowKt__BuildersKt$asFlow$$inlined$unsafeFlow$2;->(Lkotlin/jvm/functions/Function1;)V +HSPLkotlinx/coroutines/flow/FlowKt__BuildersKt$asFlow$$inlined$unsafeFlow$2;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__BuildersKt$asFlow$$inlined$unsafeFlow$2$1; +HSPLkotlinx/coroutines/flow/FlowKt__BuildersKt$asFlow$$inlined$unsafeFlow$2$1;->(Lkotlinx/coroutines/flow/FlowKt__BuildersKt$asFlow$$inlined$unsafeFlow$2;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/FlowKt__BuildersKt$asFlow$$inlined$unsafeFlow$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__BuildersKt$flowOf$$inlined$unsafeFlow$2; +HSPLkotlinx/coroutines/flow/FlowKt__BuildersKt$flowOf$$inlined$unsafeFlow$2;->(Ljava/lang/Object;)V +HSPLkotlinx/coroutines/flow/FlowKt__BuildersKt$flowOf$$inlined$unsafeFlow$2;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__ChannelsKt; +HSPLkotlinx/coroutines/flow/FlowKt__ChannelsKt;->access$emitAllImpl$FlowKt__ChannelsKt(Lkotlinx/coroutines/flow/FlowCollector;Lkotlinx/coroutines/channels/ReceiveChannel;ZLkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt__ChannelsKt;->emitAll(Lkotlinx/coroutines/flow/FlowCollector;Lkotlinx/coroutines/channels/ReceiveChannel;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt__ChannelsKt;->emitAllImpl$FlowKt__ChannelsKt(Lkotlinx/coroutines/flow/FlowCollector;Lkotlinx/coroutines/channels/ReceiveChannel;ZLkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__ChannelsKt$emitAllImpl$1; +HSPLkotlinx/coroutines/flow/FlowKt__ChannelsKt$emitAllImpl$1;->(Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/FlowKt__ChannelsKt$emitAllImpl$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__CollectKt; +HSPLkotlinx/coroutines/flow/FlowKt__CollectKt;->collect(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt__CollectKt;->collectLatest(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt__CollectKt;->emitAll(Lkotlinx/coroutines/flow/FlowCollector;Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt__CollectKt;->launchIn(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineScope;)Lkotlinx/coroutines/Job; +Lkotlinx/coroutines/flow/FlowKt__CollectKt$launchIn$1; +HSPLkotlinx/coroutines/flow/FlowKt__CollectKt$launchIn$1;->(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/FlowKt__CollectKt$launchIn$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLkotlinx/coroutines/flow/FlowKt__CollectKt$launchIn$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__ContextKt; +HSPLkotlinx/coroutines/flow/FlowKt__ContextKt;->buffer$default(Lkotlinx/coroutines/flow/Flow;ILkotlinx/coroutines/channels/BufferOverflow;ILjava/lang/Object;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt__ContextKt;->buffer(Lkotlinx/coroutines/flow/Flow;ILkotlinx/coroutines/channels/BufferOverflow;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt__ContextKt;->checkFlowContext$FlowKt__ContextKt(Lkotlin/coroutines/CoroutineContext;)V +HSPLkotlinx/coroutines/flow/FlowKt__ContextKt;->conflate(Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt__ContextKt;->flowOn(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/flow/Flow; +Lkotlinx/coroutines/flow/FlowKt__DelayKt; +HSPLkotlinx/coroutines/flow/FlowKt__DelayKt;->debounce(Lkotlinx/coroutines/flow/Flow;J)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt__DelayKt;->debounceInternal$FlowKt__DelayKt(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/flow/Flow; +Lkotlinx/coroutines/flow/FlowKt__DelayKt$debounce$2; +HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounce$2;->(J)V +HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounce$2;->invoke(Ljava/lang/Object;)Ljava/lang/Long; +HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounce$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1; +HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1;->(Lkotlin/jvm/functions/Function1;Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$1; +HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$1;->(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$2; +HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$2;->(Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$2;->invoke-WpGqRn0(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$values$1; +HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$values$1;->(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$values$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$values$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$values$1$1; +HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$values$1$1;->(Lkotlinx/coroutines/channels/ProducerScope;)V +HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$values$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$values$1$1$emit$1; +HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$values$1$1$emit$1;->(Lkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$values$1$1;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$values$1$1$emit$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__DistinctKt; +HSPLkotlinx/coroutines/flow/FlowKt__DistinctKt;->()V +HSPLkotlinx/coroutines/flow/FlowKt__DistinctKt;->distinctUntilChanged(Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt__DistinctKt;->distinctUntilChanged(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt__DistinctKt;->distinctUntilChangedBy$FlowKt__DistinctKt(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow; +Lkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultAreEquivalent$1; +HSPLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultAreEquivalent$1;->()V +HSPLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultAreEquivalent$1;->()V +HSPLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultAreEquivalent$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Boolean; +HSPLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultAreEquivalent$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultKeySelector$1; +HSPLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultKeySelector$1;->()V +HSPLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultKeySelector$1;->()V +HSPLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultKeySelector$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__EmittersKt; +HSPLkotlinx/coroutines/flow/FlowKt__EmittersKt;->ensureActive(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLkotlinx/coroutines/flow/FlowKt__EmittersKt;->onStart(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow; +Lkotlinx/coroutines/flow/FlowKt__EmittersKt$onStart$$inlined$unsafeFlow$1; +HSPLkotlinx/coroutines/flow/FlowKt__EmittersKt$onStart$$inlined$unsafeFlow$1;->(Lkotlin/jvm/functions/Function2;Lkotlinx/coroutines/flow/Flow;)V +HSPLkotlinx/coroutines/flow/FlowKt__EmittersKt$onStart$$inlined$unsafeFlow$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__EmittersKt$onStart$$inlined$unsafeFlow$1$1; +HSPLkotlinx/coroutines/flow/FlowKt__EmittersKt$onStart$$inlined$unsafeFlow$1$1;->(Lkotlinx/coroutines/flow/FlowKt__EmittersKt$onStart$$inlined$unsafeFlow$1;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/FlowKt__EmittersKt$onStart$$inlined$unsafeFlow$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__ErrorsKt; +HSPLkotlinx/coroutines/flow/FlowKt__ErrorsKt;->catch(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function3;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt__ErrorsKt;->catchImpl(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__ErrorsKt$catch$$inlined$unsafeFlow$1; +HSPLkotlinx/coroutines/flow/FlowKt__ErrorsKt$catch$$inlined$unsafeFlow$1;->(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function3;)V +HSPLkotlinx/coroutines/flow/FlowKt__ErrorsKt$catch$$inlined$unsafeFlow$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__ErrorsKt$catch$$inlined$unsafeFlow$1$1; +HSPLkotlinx/coroutines/flow/FlowKt__ErrorsKt$catch$$inlined$unsafeFlow$1$1;->(Lkotlinx/coroutines/flow/FlowKt__ErrorsKt$catch$$inlined$unsafeFlow$1;Lkotlin/coroutines/Continuation;)V +Lkotlinx/coroutines/flow/FlowKt__ErrorsKt$catchImpl$1; +HSPLkotlinx/coroutines/flow/FlowKt__ErrorsKt$catchImpl$1;->(Lkotlin/coroutines/Continuation;)V +Lkotlinx/coroutines/flow/FlowKt__ErrorsKt$catchImpl$2; +HSPLkotlinx/coroutines/flow/FlowKt__ErrorsKt$catchImpl$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/jvm/internal/Ref$ObjectRef;)V +HSPLkotlinx/coroutines/flow/FlowKt__ErrorsKt$catchImpl$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__ErrorsKt$catchImpl$2$emit$1; +HSPLkotlinx/coroutines/flow/FlowKt__ErrorsKt$catchImpl$2$emit$1;->(Lkotlinx/coroutines/flow/FlowKt__ErrorsKt$catchImpl$2;Lkotlin/coroutines/Continuation;)V +Lkotlinx/coroutines/flow/FlowKt__LimitKt; +HSPLkotlinx/coroutines/flow/FlowKt__LimitKt;->dropWhile(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow; +Lkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$$inlined$unsafeFlow$1; +HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$$inlined$unsafeFlow$1;->(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;)V +HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$$inlined$unsafeFlow$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1; +HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1;->(Lkotlin/jvm/internal/Ref$BooleanRef;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/jvm/functions/Function2;)V +HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1$emit$1; +HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1$emit$1;->(Lkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1$emit$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__MergeKt; +HSPLkotlinx/coroutines/flow/FlowKt__MergeKt;->()V +HSPLkotlinx/coroutines/flow/FlowKt__MergeKt;->flattenConcat(Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt__MergeKt;->mapLatest(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt__MergeKt;->merge(Ljava/lang/Iterable;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt__MergeKt;->merge([Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt__MergeKt;->transformLatest(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function3;)Lkotlinx/coroutines/flow/Flow; +Lkotlinx/coroutines/flow/FlowKt__MergeKt$flattenConcat$$inlined$unsafeFlow$1; +HSPLkotlinx/coroutines/flow/FlowKt__MergeKt$flattenConcat$$inlined$unsafeFlow$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLkotlinx/coroutines/flow/FlowKt__MergeKt$flattenConcat$$inlined$unsafeFlow$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__MergeKt$flattenConcat$1$1; +HSPLkotlinx/coroutines/flow/FlowKt__MergeKt$flattenConcat$1$1;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLkotlinx/coroutines/flow/FlowKt__MergeKt$flattenConcat$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt__MergeKt$flattenConcat$1$1;->emit(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__MergeKt$flattenConcat$1$1$emit$1; +HSPLkotlinx/coroutines/flow/FlowKt__MergeKt$flattenConcat$1$1$emit$1;->(Lkotlinx/coroutines/flow/FlowKt__MergeKt$flattenConcat$1$1;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/FlowKt__MergeKt$flattenConcat$1$1$emit$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__MergeKt$mapLatest$1; +HSPLkotlinx/coroutines/flow/FlowKt__MergeKt$mapLatest$1;->(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/FlowKt__MergeKt$mapLatest$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt__MergeKt$mapLatest$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt__MergeKt$mapLatest$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__ReduceKt; +HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt;->first(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt;->first(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt;->firstOrNull(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$1; +HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$1;->(Lkotlin/jvm/internal/Ref$ObjectRef;)V +HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2; +HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2;->(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/internal/Ref$ObjectRef;)V +HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2$1; +HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2$1;->(Lkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2;Lkotlin/coroutines/Continuation;)V +Lkotlinx/coroutines/flow/FlowKt__ReduceKt$first$1; +HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$1;->(Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__ReduceKt$first$3; +HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$3;->(Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__ReduceKt$firstOrNull$$inlined$collectWhile$1; +HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$firstOrNull$$inlined$collectWhile$1;->(Lkotlin/jvm/internal/Ref$ObjectRef;)V +HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$firstOrNull$$inlined$collectWhile$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__ReduceKt$firstOrNull$1; +HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$firstOrNull$1;->(Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$firstOrNull$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__ShareKt; +HSPLkotlinx/coroutines/flow/FlowKt__ShareKt;->asStateFlow(Lkotlinx/coroutines/flow/MutableStateFlow;)Lkotlinx/coroutines/flow/StateFlow; +HSPLkotlinx/coroutines/flow/FlowKt__ShareKt;->configureSharing$FlowKt__ShareKt(Lkotlinx/coroutines/flow/Flow;I)Lkotlinx/coroutines/flow/SharingConfig; +HSPLkotlinx/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; +HSPLkotlinx/coroutines/flow/FlowKt__ShareKt;->shareIn$default(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/SharingStarted;IILjava/lang/Object;)Lkotlinx/coroutines/flow/SharedFlow; +HSPLkotlinx/coroutines/flow/FlowKt__ShareKt;->shareIn(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/SharingStarted;I)Lkotlinx/coroutines/flow/SharedFlow; +HSPLkotlinx/coroutines/flow/FlowKt__ShareKt;->stateIn(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/SharingStarted;Ljava/lang/Object;)Lkotlinx/coroutines/flow/StateFlow; +Lkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1; +HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1;->(Lkotlinx/coroutines/flow/SharingStarted;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/MutableSharedFlow;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$1; +HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$1;->(Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$1;->invoke(ILkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2; +HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2;->(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/MutableSharedFlow;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2;->invoke(Lkotlinx/coroutines/flow/SharingCommand;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2$WhenMappings; +HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2$WhenMappings;->()V +Lkotlinx/coroutines/flow/FlowKt__TransformKt; +HSPLkotlinx/coroutines/flow/FlowKt__TransformKt;->onEach(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt__TransformKt;->runningFold(Lkotlinx/coroutines/flow/Flow;Ljava/lang/Object;Lkotlin/jvm/functions/Function3;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt__TransformKt;->runningReduce(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function3;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt__TransformKt;->scan(Lkotlinx/coroutines/flow/Flow;Ljava/lang/Object;Lkotlin/jvm/functions/Function3;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt__TransformKt;->withIndex(Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow; +Lkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1; +HSPLkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1;->(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;)V +HSPLkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1$2; +HSPLkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/jvm/functions/Function2;)V +HSPLkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1$2$1; +HSPLkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1$2$1;->(Lkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1$2;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__TransformKt$runningFold$$inlined$unsafeFlow$1; +HSPLkotlinx/coroutines/flow/FlowKt__TransformKt$runningFold$$inlined$unsafeFlow$1;->(Ljava/lang/Object;Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function3;)V +HSPLkotlinx/coroutines/flow/FlowKt__TransformKt$runningFold$$inlined$unsafeFlow$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__TransformKt$runningFold$$inlined$unsafeFlow$1$1; +HSPLkotlinx/coroutines/flow/FlowKt__TransformKt$runningFold$$inlined$unsafeFlow$1$1;->(Lkotlinx/coroutines/flow/FlowKt__TransformKt$runningFold$$inlined$unsafeFlow$1;Lkotlin/coroutines/Continuation;)V +Lkotlinx/coroutines/flow/FlowKt__TransformKt$runningFold$1$1; +HSPLkotlinx/coroutines/flow/FlowKt__TransformKt$runningFold$1$1;->(Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlin/jvm/functions/Function3;Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLkotlinx/coroutines/flow/FlowKt__TransformKt$runningFold$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__TransformKt$runningFold$1$1$emit$1; +HSPLkotlinx/coroutines/flow/FlowKt__TransformKt$runningFold$1$1$emit$1;->(Lkotlinx/coroutines/flow/FlowKt__TransformKt$runningFold$1$1;Lkotlin/coroutines/Continuation;)V +Lkotlinx/coroutines/flow/FlowKt__TransformKt$runningReduce$$inlined$unsafeFlow$1; +HSPLkotlinx/coroutines/flow/FlowKt__TransformKt$runningReduce$$inlined$unsafeFlow$1;->(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function3;)V +Lkotlinx/coroutines/flow/FlowKt__TransformKt$withIndex$$inlined$unsafeFlow$1; +HSPLkotlinx/coroutines/flow/FlowKt__TransformKt$withIndex$$inlined$unsafeFlow$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLkotlinx/coroutines/flow/FlowKt__TransformKt$withIndex$$inlined$unsafeFlow$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__TransformKt$withIndex$1$1; +HSPLkotlinx/coroutines/flow/FlowKt__TransformKt$withIndex$1$1;->(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/jvm/internal/Ref$IntRef;)V +HSPLkotlinx/coroutines/flow/FlowKt__TransformKt$withIndex$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__TransformKt$withIndex$1$1$emit$1; +HSPLkotlinx/coroutines/flow/FlowKt__TransformKt$withIndex$1$1$emit$1;->(Lkotlinx/coroutines/flow/FlowKt__TransformKt$withIndex$1$1;Lkotlin/coroutines/Continuation;)V +Lkotlinx/coroutines/flow/FlowKt__ZipKt; +HSPLkotlinx/coroutines/flow/FlowKt__ZipKt;->access$nullArrayFactory()Lkotlin/jvm/functions/Function0; +HSPLkotlinx/coroutines/flow/FlowKt__ZipKt;->combine(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function3;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/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; +HSPLkotlinx/coroutines/flow/FlowKt__ZipKt;->combine(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function5;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/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; +HSPLkotlinx/coroutines/flow/FlowKt__ZipKt;->flowCombine(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function3;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt__ZipKt;->nullArrayFactory$FlowKt__ZipKt()Lkotlin/jvm/functions/Function0; +Lkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$1; +HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$1;->([Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function4;)V +HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$1$2; +HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$1$2;->(Lkotlin/coroutines/Continuation;Lkotlin/jvm/functions/Function4;)V +HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/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; +HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$2; +HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$2;->([Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function5;)V +HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$2;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$2$2; +HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$2$2;->(Lkotlin/coroutines/Continuation;Lkotlin/jvm/functions/Function5;)V +HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$2$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$2$2;->invoke(Lkotlinx/coroutines/flow/FlowCollector;[Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$2$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$3; +HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$3;->([Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function6;)V +HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$3;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$3$2; +HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$3$2;->(Lkotlin/coroutines/Continuation;Lkotlin/jvm/functions/Function6;)V +HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$3$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/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; +HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$3$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$unsafeFlow$1; +HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$unsafeFlow$1;->(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function3;)V +HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$unsafeFlow$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__ZipKt$combine$1$1; +HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$1$1;->(Lkotlin/jvm/functions/Function3;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$1$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;[Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__ZipKt$nullArrayFactory$1; +HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$nullArrayFactory$1;->()V +HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$nullArrayFactory$1;->()V +HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$nullArrayFactory$1;->invoke()Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$nullArrayFactory$1;->invoke()Ljava/lang/Void; +Lkotlinx/coroutines/flow/MutableSharedFlow; +Lkotlinx/coroutines/flow/MutableStateFlow; +Lkotlinx/coroutines/flow/ReadonlySharedFlow; +HSPLkotlinx/coroutines/flow/ReadonlySharedFlow;->(Lkotlinx/coroutines/flow/SharedFlow;Lkotlinx/coroutines/Job;)V +HSPLkotlinx/coroutines/flow/ReadonlySharedFlow;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/ReadonlyStateFlow; +HSPLkotlinx/coroutines/flow/ReadonlyStateFlow;->(Lkotlinx/coroutines/flow/StateFlow;Lkotlinx/coroutines/Job;)V +HSPLkotlinx/coroutines/flow/ReadonlyStateFlow;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/ReadonlyStateFlow;->getValue()Ljava/lang/Object; +Lkotlinx/coroutines/flow/SafeFlow; +HSPLkotlinx/coroutines/flow/SafeFlow;->(Lkotlin/jvm/functions/Function2;)V +HSPLkotlinx/coroutines/flow/SafeFlow;->collectSafely(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/SharedFlow; +Lkotlinx/coroutines/flow/SharedFlowImpl; +HSPLkotlinx/coroutines/flow/SharedFlowImpl;->(IILkotlinx/coroutines/channels/BufferOverflow;)V +HSPLkotlinx/coroutines/flow/SharedFlowImpl;->access$tryPeekLocked(Lkotlinx/coroutines/flow/SharedFlowImpl;Lkotlinx/coroutines/flow/SharedFlowSlot;)J +HSPLkotlinx/coroutines/flow/SharedFlowImpl;->awaitValue(Lkotlinx/coroutines/flow/SharedFlowSlot;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/SharedFlowImpl;->cleanupTailLocked()V +HSPLkotlinx/coroutines/flow/SharedFlowImpl;->collect$suspendImpl(Lkotlinx/coroutines/flow/SharedFlowImpl;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/SharedFlowImpl;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/SharedFlowImpl;->createSlot()Lkotlinx/coroutines/flow/SharedFlowSlot; +HSPLkotlinx/coroutines/flow/SharedFlowImpl;->createSlot()Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot; +HSPLkotlinx/coroutines/flow/SharedFlowImpl;->createSlotArray(I)[Lkotlinx/coroutines/flow/SharedFlowSlot; +HSPLkotlinx/coroutines/flow/SharedFlowImpl;->createSlotArray(I)[Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot; +HSPLkotlinx/coroutines/flow/SharedFlowImpl;->dropOldestLocked()V +HSPLkotlinx/coroutines/flow/SharedFlowImpl;->emit$suspendImpl(Lkotlinx/coroutines/flow/SharedFlowImpl;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/SharedFlowImpl;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/SharedFlowImpl;->enqueueLocked(Ljava/lang/Object;)V +HSPLkotlinx/coroutines/flow/SharedFlowImpl;->findSlotsToResumeLocked([Lkotlin/coroutines/Continuation;)[Lkotlin/coroutines/Continuation; +HSPLkotlinx/coroutines/flow/SharedFlowImpl;->getBufferEndIndex()J +HSPLkotlinx/coroutines/flow/SharedFlowImpl;->getHead()J +HSPLkotlinx/coroutines/flow/SharedFlowImpl;->getLastReplayedLocked()Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/SharedFlowImpl;->getPeekedValueLockedAt(J)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/SharedFlowImpl;->getQueueEndIndex()J +HSPLkotlinx/coroutines/flow/SharedFlowImpl;->getReplaySize()I +HSPLkotlinx/coroutines/flow/SharedFlowImpl;->getTotalSize()I +HSPLkotlinx/coroutines/flow/SharedFlowImpl;->growBuffer([Ljava/lang/Object;II)[Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/SharedFlowImpl;->tryEmit(Ljava/lang/Object;)Z +HSPLkotlinx/coroutines/flow/SharedFlowImpl;->tryEmitLocked(Ljava/lang/Object;)Z +HSPLkotlinx/coroutines/flow/SharedFlowImpl;->tryEmitNoCollectorsLocked(Ljava/lang/Object;)Z +HSPLkotlinx/coroutines/flow/SharedFlowImpl;->tryPeekLocked(Lkotlinx/coroutines/flow/SharedFlowSlot;)J +HSPLkotlinx/coroutines/flow/SharedFlowImpl;->tryTakeValue(Lkotlinx/coroutines/flow/SharedFlowSlot;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/SharedFlowImpl;->updateBufferLocked(JJJJ)V +HSPLkotlinx/coroutines/flow/SharedFlowImpl;->updateCollectorIndexLocked$kotlinx_coroutines_core(J)[Lkotlin/coroutines/Continuation; +HSPLkotlinx/coroutines/flow/SharedFlowImpl;->updateNewCollectorIndexLocked$kotlinx_coroutines_core()J +Lkotlinx/coroutines/flow/SharedFlowImpl$Emitter; +Lkotlinx/coroutines/flow/SharedFlowImpl$collect$1; +HSPLkotlinx/coroutines/flow/SharedFlowImpl$collect$1;->(Lkotlinx/coroutines/flow/SharedFlowImpl;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/SharedFlowImpl$collect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/SharedFlowKt; +HSPLkotlinx/coroutines/flow/SharedFlowKt;->()V +HSPLkotlinx/coroutines/flow/SharedFlowKt;->MutableSharedFlow$default(IILkotlinx/coroutines/channels/BufferOverflow;ILjava/lang/Object;)Lkotlinx/coroutines/flow/MutableSharedFlow; +HSPLkotlinx/coroutines/flow/SharedFlowKt;->MutableSharedFlow(IILkotlinx/coroutines/channels/BufferOverflow;)Lkotlinx/coroutines/flow/MutableSharedFlow; +HSPLkotlinx/coroutines/flow/SharedFlowKt;->access$getBufferAt([Ljava/lang/Object;J)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/SharedFlowKt;->access$setBufferAt([Ljava/lang/Object;JLjava/lang/Object;)V +HSPLkotlinx/coroutines/flow/SharedFlowKt;->getBufferAt([Ljava/lang/Object;J)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/SharedFlowKt;->setBufferAt([Ljava/lang/Object;JLjava/lang/Object;)V +Lkotlinx/coroutines/flow/SharedFlowSlot; +HSPLkotlinx/coroutines/flow/SharedFlowSlot;->()V +HSPLkotlinx/coroutines/flow/SharedFlowSlot;->allocateLocked(Ljava/lang/Object;)Z +HSPLkotlinx/coroutines/flow/SharedFlowSlot;->allocateLocked(Lkotlinx/coroutines/flow/SharedFlowImpl;)Z +HSPLkotlinx/coroutines/flow/SharedFlowSlot;->freeLocked(Ljava/lang/Object;)[Lkotlin/coroutines/Continuation; +HSPLkotlinx/coroutines/flow/SharedFlowSlot;->freeLocked(Lkotlinx/coroutines/flow/SharedFlowImpl;)[Lkotlin/coroutines/Continuation; +Lkotlinx/coroutines/flow/SharingCommand; +HSPLkotlinx/coroutines/flow/SharingCommand;->$values()[Lkotlinx/coroutines/flow/SharingCommand; +HSPLkotlinx/coroutines/flow/SharingCommand;->()V +HSPLkotlinx/coroutines/flow/SharingCommand;->(Ljava/lang/String;I)V +HSPLkotlinx/coroutines/flow/SharingCommand;->values()[Lkotlinx/coroutines/flow/SharingCommand; +Lkotlinx/coroutines/flow/SharingConfig; +HSPLkotlinx/coroutines/flow/SharingConfig;->(Lkotlinx/coroutines/flow/Flow;ILkotlinx/coroutines/channels/BufferOverflow;Lkotlin/coroutines/CoroutineContext;)V +Lkotlinx/coroutines/flow/SharingStarted; +HSPLkotlinx/coroutines/flow/SharingStarted;->()V +Lkotlinx/coroutines/flow/SharingStarted$Companion; +HSPLkotlinx/coroutines/flow/SharingStarted$Companion;->()V +HSPLkotlinx/coroutines/flow/SharingStarted$Companion;->()V +HSPLkotlinx/coroutines/flow/SharingStarted$Companion;->WhileSubscribed$default(Lkotlinx/coroutines/flow/SharingStarted$Companion;JJILjava/lang/Object;)Lkotlinx/coroutines/flow/SharingStarted; +HSPLkotlinx/coroutines/flow/SharingStarted$Companion;->WhileSubscribed(JJ)Lkotlinx/coroutines/flow/SharingStarted; +HSPLkotlinx/coroutines/flow/SharingStarted$Companion;->getEagerly()Lkotlinx/coroutines/flow/SharingStarted; +HSPLkotlinx/coroutines/flow/SharingStarted$Companion;->getLazily()Lkotlinx/coroutines/flow/SharingStarted; +Lkotlinx/coroutines/flow/StartedEagerly; +HSPLkotlinx/coroutines/flow/StartedEagerly;->()V +Lkotlinx/coroutines/flow/StartedLazily; +HSPLkotlinx/coroutines/flow/StartedLazily;->()V +Lkotlinx/coroutines/flow/StartedWhileSubscribed; +HSPLkotlinx/coroutines/flow/StartedWhileSubscribed;->(JJ)V +HSPLkotlinx/coroutines/flow/StartedWhileSubscribed;->access$getReplayExpiration$p(Lkotlinx/coroutines/flow/StartedWhileSubscribed;)J +HSPLkotlinx/coroutines/flow/StartedWhileSubscribed;->access$getStopTimeout$p(Lkotlinx/coroutines/flow/StartedWhileSubscribed;)J +HSPLkotlinx/coroutines/flow/StartedWhileSubscribed;->command(Lkotlinx/coroutines/flow/StateFlow;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/StartedWhileSubscribed;->equals(Ljava/lang/Object;)Z +Lkotlinx/coroutines/flow/StartedWhileSubscribed$command$1; +HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$1;->(Lkotlinx/coroutines/flow/StartedWhileSubscribed;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;ILkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/StartedWhileSubscribed$command$2; +HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;->(Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;->invoke(Lkotlinx/coroutines/flow/SharingCommand;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/StateFlow; +Lkotlinx/coroutines/flow/StateFlowImpl; +HSPLkotlinx/coroutines/flow/StateFlowImpl;->()V +HSPLkotlinx/coroutines/flow/StateFlowImpl;->(Ljava/lang/Object;)V +HSPLkotlinx/coroutines/flow/StateFlowImpl;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/StateFlowImpl;->compareAndSet(Ljava/lang/Object;Ljava/lang/Object;)Z +HSPLkotlinx/coroutines/flow/StateFlowImpl;->createSlot()Lkotlinx/coroutines/flow/StateFlowSlot; +HSPLkotlinx/coroutines/flow/StateFlowImpl;->createSlot()Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot; +HSPLkotlinx/coroutines/flow/StateFlowImpl;->createSlotArray(I)[Lkotlinx/coroutines/flow/StateFlowSlot; +HSPLkotlinx/coroutines/flow/StateFlowImpl;->createSlotArray(I)[Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot; +HSPLkotlinx/coroutines/flow/StateFlowImpl;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/StateFlowImpl;->getValue()Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/StateFlowImpl;->get_state$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/flow/StateFlowImpl;->setValue(Ljava/lang/Object;)V +HSPLkotlinx/coroutines/flow/StateFlowImpl;->updateState(Ljava/lang/Object;Ljava/lang/Object;)Z +Lkotlinx/coroutines/flow/StateFlowImpl$collect$1; +HSPLkotlinx/coroutines/flow/StateFlowImpl$collect$1;->(Lkotlinx/coroutines/flow/StateFlowImpl;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/StateFlowImpl$collect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/StateFlowKt; +HSPLkotlinx/coroutines/flow/StateFlowKt;->()V +HSPLkotlinx/coroutines/flow/StateFlowKt;->MutableStateFlow(Ljava/lang/Object;)Lkotlinx/coroutines/flow/MutableStateFlow; +HSPLkotlinx/coroutines/flow/StateFlowKt;->access$getNONE$p()Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/flow/StateFlowKt;->access$getPENDING$p()Lkotlinx/coroutines/internal/Symbol; +Lkotlinx/coroutines/flow/StateFlowSlot; +HSPLkotlinx/coroutines/flow/StateFlowSlot;->()V +HSPLkotlinx/coroutines/flow/StateFlowSlot;->()V +HSPLkotlinx/coroutines/flow/StateFlowSlot;->access$get_state$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/flow/StateFlowSlot;->allocateLocked(Ljava/lang/Object;)Z +HSPLkotlinx/coroutines/flow/StateFlowSlot;->allocateLocked(Lkotlinx/coroutines/flow/StateFlowImpl;)Z +HSPLkotlinx/coroutines/flow/StateFlowSlot;->awaitPending(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/StateFlowSlot;->freeLocked(Ljava/lang/Object;)[Lkotlin/coroutines/Continuation; +HSPLkotlinx/coroutines/flow/StateFlowSlot;->freeLocked(Lkotlinx/coroutines/flow/StateFlowImpl;)[Lkotlin/coroutines/Continuation; +HSPLkotlinx/coroutines/flow/StateFlowSlot;->get_state$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/flow/StateFlowSlot;->makePending()V +HSPLkotlinx/coroutines/flow/StateFlowSlot;->takePending()Z +Lkotlinx/coroutines/flow/SubscribedFlowCollector; +Lkotlinx/coroutines/flow/ThrowingCollector; +Lkotlinx/coroutines/flow/internal/AbortFlowException; +HSPLkotlinx/coroutines/flow/internal/AbortFlowException;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLkotlinx/coroutines/flow/internal/AbortFlowException;->fillInStackTrace()Ljava/lang/Throwable; +Lkotlinx/coroutines/flow/internal/AbstractSharedFlow; +HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->()V +HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->access$getNCollectors(Lkotlinx/coroutines/flow/internal/AbstractSharedFlow;)I +HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->access$getSlots(Lkotlinx/coroutines/flow/internal/AbstractSharedFlow;)[Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot; +HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->allocateSlot()Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot; +HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->freeSlot(Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;)V +HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->getNCollectors()I +HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->getSlots()[Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot; +HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->getSubscriptionCount()Lkotlinx/coroutines/flow/StateFlow; +Lkotlinx/coroutines/flow/internal/AbstractSharedFlowKt; +HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlowKt;->()V +Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot; +HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;->()V +Lkotlinx/coroutines/flow/internal/ChannelFlow; +HSPLkotlinx/coroutines/flow/internal/ChannelFlow;->(Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)V +HSPLkotlinx/coroutines/flow/internal/ChannelFlow;->collect$suspendImpl(Lkotlinx/coroutines/flow/internal/ChannelFlow;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/internal/ChannelFlow;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/internal/ChannelFlow;->dropChannelOperators()Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/internal/ChannelFlow;->fuse(Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/internal/ChannelFlow;->getCollectToFun$kotlinx_coroutines_core()Lkotlin/jvm/functions/Function2; +HSPLkotlinx/coroutines/flow/internal/ChannelFlow;->getProduceCapacity$kotlinx_coroutines_core()I +HSPLkotlinx/coroutines/flow/internal/ChannelFlow;->produceImpl(Lkotlinx/coroutines/CoroutineScope;)Lkotlinx/coroutines/channels/ReceiveChannel; +Lkotlinx/coroutines/flow/internal/ChannelFlow$collect$2; +HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collect$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lkotlinx/coroutines/flow/internal/ChannelFlow;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collect$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collect$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collect$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collect$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/internal/ChannelFlow$collectToFun$1; +HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collectToFun$1;->(Lkotlinx/coroutines/flow/internal/ChannelFlow;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collectToFun$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collectToFun$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/internal/ChannelFlowOperator; +HSPLkotlinx/coroutines/flow/internal/ChannelFlowOperator;->(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)V +HSPLkotlinx/coroutines/flow/internal/ChannelFlowOperator;->collect$suspendImpl(Lkotlinx/coroutines/flow/internal/ChannelFlowOperator;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/internal/ChannelFlowOperator;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/internal/ChannelFlowOperator;->collectTo$suspendImpl(Lkotlinx/coroutines/flow/internal/ChannelFlowOperator;Lkotlinx/coroutines/channels/ProducerScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/internal/ChannelFlowOperator;->collectTo(Lkotlinx/coroutines/channels/ProducerScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/internal/ChannelFlowOperatorImpl; +HSPLkotlinx/coroutines/flow/internal/ChannelFlowOperatorImpl;->(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)V +HSPLkotlinx/coroutines/flow/internal/ChannelFlowOperatorImpl;->(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlinx/coroutines/flow/internal/ChannelFlowOperatorImpl;->dropChannelOperators()Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/internal/ChannelFlowOperatorImpl;->flowCollect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest; +HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;->(Lkotlin/jvm/functions/Function3;Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)V +HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;->(Lkotlin/jvm/functions/Function3;Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;->access$getTransform$p(Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;)Lkotlin/jvm/functions/Function3; +HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;->create(Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)Lkotlinx/coroutines/flow/internal/ChannelFlow; +HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;->flowCollect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3; +HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3;->(Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1; +HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1;->(Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2; +HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;->(Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$emit$1; +HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$emit$1;->(Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$emit$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/internal/ChannelLimitedFlowMerge; +HSPLkotlinx/coroutines/flow/internal/ChannelLimitedFlowMerge;->(Ljava/lang/Iterable;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)V +HSPLkotlinx/coroutines/flow/internal/ChannelLimitedFlowMerge;->(Ljava/lang/Iterable;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlinx/coroutines/flow/internal/ChildCancelledException; +HSPLkotlinx/coroutines/flow/internal/ChildCancelledException;->()V +HSPLkotlinx/coroutines/flow/internal/ChildCancelledException;->fillInStackTrace()Ljava/lang/Throwable; +Lkotlinx/coroutines/flow/internal/CombineKt; +HSPLkotlinx/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; +Lkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2; +HSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2;->([Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function3;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1; +HSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1;->([Lkotlinx/coroutines/flow/Flow;ILjava/util/concurrent/atomic/AtomicInteger;Lkotlinx/coroutines/channels/Channel;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1$1; +HSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1$1;->(Lkotlinx/coroutines/channels/Channel;I)V +HSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1$1$emit$1; +HSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1$1$emit$1;->(Lkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1$1;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1$1$emit$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/internal/DownstreamExceptionContext; +HSPLkotlinx/coroutines/flow/internal/DownstreamExceptionContext;->(Ljava/lang/Throwable;Lkotlin/coroutines/CoroutineContext;)V +Lkotlinx/coroutines/flow/internal/FlowCoroutine; +HSPLkotlinx/coroutines/flow/internal/FlowCoroutine;->(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/internal/FlowCoroutine;->childCancelled(Ljava/lang/Throwable;)Z +Lkotlinx/coroutines/flow/internal/FlowCoroutineKt; +HSPLkotlinx/coroutines/flow/internal/FlowCoroutineKt;->flowScope(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/internal/FlowCoroutineKt;->scopedFlow(Lkotlin/jvm/functions/Function3;)Lkotlinx/coroutines/flow/Flow; +Lkotlinx/coroutines/flow/internal/FlowCoroutineKt$scopedFlow$$inlined$unsafeFlow$1; +HSPLkotlinx/coroutines/flow/internal/FlowCoroutineKt$scopedFlow$$inlined$unsafeFlow$1;->(Lkotlin/jvm/functions/Function3;)V +HSPLkotlinx/coroutines/flow/internal/FlowCoroutineKt$scopedFlow$$inlined$unsafeFlow$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/internal/FlowCoroutineKt$scopedFlow$1$1; +HSPLkotlinx/coroutines/flow/internal/FlowCoroutineKt$scopedFlow$1$1;->(Lkotlin/jvm/functions/Function3;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/internal/FlowCoroutineKt$scopedFlow$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLkotlinx/coroutines/flow/internal/FlowCoroutineKt$scopedFlow$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/internal/FlowCoroutineKt$scopedFlow$1$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/internal/FlowCoroutineKt$scopedFlow$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/internal/FlowExceptions_commonKt; +HSPLkotlinx/coroutines/flow/internal/FlowExceptions_commonKt;->checkOwnership(Lkotlinx/coroutines/flow/internal/AbortFlowException;Lkotlinx/coroutines/flow/FlowCollector;)V +Lkotlinx/coroutines/flow/internal/FusibleFlow; +Lkotlinx/coroutines/flow/internal/FusibleFlow$DefaultImpls; +HSPLkotlinx/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; +Lkotlinx/coroutines/flow/internal/NoOpContinuation; +HSPLkotlinx/coroutines/flow/internal/NoOpContinuation;->()V +HSPLkotlinx/coroutines/flow/internal/NoOpContinuation;->()V +Lkotlinx/coroutines/flow/internal/NopCollector; +HSPLkotlinx/coroutines/flow/internal/NopCollector;->()V +HSPLkotlinx/coroutines/flow/internal/NopCollector;->()V +HSPLkotlinx/coroutines/flow/internal/NopCollector;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/internal/NullSurrogateKt; +HSPLkotlinx/coroutines/flow/internal/NullSurrogateKt;->()V +Lkotlinx/coroutines/flow/internal/SafeCollector; +HSPLkotlinx/coroutines/flow/internal/SafeCollector;->(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/CoroutineContext;)V +HSPLkotlinx/coroutines/flow/internal/SafeCollector;->checkContext(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/CoroutineContext;Ljava/lang/Object;)V +HSPLkotlinx/coroutines/flow/internal/SafeCollector;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/internal/SafeCollector;->emit(Lkotlin/coroutines/Continuation;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/internal/SafeCollector;->getContext()Lkotlin/coroutines/CoroutineContext; +HSPLkotlinx/coroutines/flow/internal/SafeCollector;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/internal/SafeCollector;->releaseIntercepted()V +Lkotlinx/coroutines/flow/internal/SafeCollector$collectContextSize$1; +HSPLkotlinx/coroutines/flow/internal/SafeCollector$collectContextSize$1;->()V +HSPLkotlinx/coroutines/flow/internal/SafeCollector$collectContextSize$1;->()V +HSPLkotlinx/coroutines/flow/internal/SafeCollector$collectContextSize$1;->invoke(ILkotlin/coroutines/CoroutineContext$Element;)Ljava/lang/Integer; +HSPLkotlinx/coroutines/flow/internal/SafeCollector$collectContextSize$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/internal/SafeCollectorKt; +HSPLkotlinx/coroutines/flow/internal/SafeCollectorKt;->()V +HSPLkotlinx/coroutines/flow/internal/SafeCollectorKt;->access$getEmitFun$p()Lkotlin/jvm/functions/Function3; +Lkotlinx/coroutines/flow/internal/SafeCollectorKt$emitFun$1; +HSPLkotlinx/coroutines/flow/internal/SafeCollectorKt$emitFun$1;->()V +HSPLkotlinx/coroutines/flow/internal/SafeCollectorKt$emitFun$1;->()V +HSPLkotlinx/coroutines/flow/internal/SafeCollectorKt$emitFun$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/internal/SafeCollectorKt$emitFun$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/internal/SafeCollector_commonKt; +HSPLkotlinx/coroutines/flow/internal/SafeCollector_commonKt;->checkContext(Lkotlinx/coroutines/flow/internal/SafeCollector;Lkotlin/coroutines/CoroutineContext;)V +HSPLkotlinx/coroutines/flow/internal/SafeCollector_commonKt;->transitiveCoroutineParent(Lkotlinx/coroutines/Job;Lkotlinx/coroutines/Job;)Lkotlinx/coroutines/Job; +Lkotlinx/coroutines/flow/internal/SafeCollector_commonKt$checkContext$result$1; +HSPLkotlinx/coroutines/flow/internal/SafeCollector_commonKt$checkContext$result$1;->(Lkotlinx/coroutines/flow/internal/SafeCollector;)V +HSPLkotlinx/coroutines/flow/internal/SafeCollector_commonKt$checkContext$result$1;->invoke(ILkotlin/coroutines/CoroutineContext$Element;)Ljava/lang/Integer; +HSPLkotlinx/coroutines/flow/internal/SafeCollector_commonKt$checkContext$result$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/internal/SendingCollector; +HSPLkotlinx/coroutines/flow/internal/SendingCollector;->(Lkotlinx/coroutines/channels/SendChannel;)V +HSPLkotlinx/coroutines/flow/internal/SendingCollector;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/internal/SubscriptionCountStateFlow; +HSPLkotlinx/coroutines/flow/internal/SubscriptionCountStateFlow;->(I)V +HSPLkotlinx/coroutines/flow/internal/SubscriptionCountStateFlow;->increment(I)Z +Lkotlinx/coroutines/internal/AtomicKt; +HSPLkotlinx/coroutines/internal/AtomicKt;->()V +Lkotlinx/coroutines/internal/AtomicOp; +HSPLkotlinx/coroutines/internal/AtomicOp;->()V +HSPLkotlinx/coroutines/internal/AtomicOp;->()V +HSPLkotlinx/coroutines/internal/AtomicOp;->decide(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/internal/AtomicOp;->get_consensus$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/internal/AtomicOp;->perform(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/internal/ConcurrentKt; +HSPLkotlinx/coroutines/internal/ConcurrentKt;->()V +HSPLkotlinx/coroutines/internal/ConcurrentKt;->removeFutureOnCancel(Ljava/util/concurrent/Executor;)Z +Lkotlinx/coroutines/internal/ConcurrentLinkedListKt; +HSPLkotlinx/coroutines/internal/ConcurrentLinkedListKt;->()V +HSPLkotlinx/coroutines/internal/ConcurrentLinkedListKt;->access$getCLOSED$p()Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/internal/ConcurrentLinkedListKt;->close(Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;)Lkotlinx/coroutines/internal/ConcurrentLinkedListNode; +HSPLkotlinx/coroutines/internal/ConcurrentLinkedListKt;->findSegmentInternal(Lkotlinx/coroutines/internal/Segment;JLkotlin/jvm/functions/Function2;)Ljava/lang/Object; +Lkotlinx/coroutines/internal/ConcurrentLinkedListNode; +HSPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;->()V +HSPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;->(Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;)V +HSPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;->access$getNextOrClosed(Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;)Ljava/lang/Object; +HSPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;->cleanPrev()V +HSPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;->getNext()Lkotlinx/coroutines/internal/ConcurrentLinkedListNode; +HSPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;->getNextOrClosed()Ljava/lang/Object; +HSPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;->getPrev()Lkotlinx/coroutines/internal/ConcurrentLinkedListNode; +HSPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;->get_next$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;->get_prev$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;->markAsClosed()Z +HSPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;->trySetNext(Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;)Z +Lkotlinx/coroutines/internal/ContextScope; +HSPLkotlinx/coroutines/internal/ContextScope;->(Lkotlin/coroutines/CoroutineContext;)V +HSPLkotlinx/coroutines/internal/ContextScope;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext; +Lkotlinx/coroutines/internal/DispatchedContinuation; +HSPLkotlinx/coroutines/internal/DispatchedContinuation;->()V +HSPLkotlinx/coroutines/internal/DispatchedContinuation;->(Lkotlinx/coroutines/CoroutineDispatcher;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/internal/DispatchedContinuation;->awaitReusability$kotlinx_coroutines_core()V +HSPLkotlinx/coroutines/internal/DispatchedContinuation;->claimReusableCancellableContinuation$kotlinx_coroutines_core()Lkotlinx/coroutines/CancellableContinuationImpl; +HSPLkotlinx/coroutines/internal/DispatchedContinuation;->dispatchYield$kotlinx_coroutines_core(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Object;)V +HSPLkotlinx/coroutines/internal/DispatchedContinuation;->getContext()Lkotlin/coroutines/CoroutineContext; +HSPLkotlinx/coroutines/internal/DispatchedContinuation;->getDelegate$kotlinx_coroutines_core()Lkotlin/coroutines/Continuation; +HSPLkotlinx/coroutines/internal/DispatchedContinuation;->getReusableCancellableContinuation()Lkotlinx/coroutines/CancellableContinuationImpl; +HSPLkotlinx/coroutines/internal/DispatchedContinuation;->get_reusableCancellableContinuation$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/internal/DispatchedContinuation;->isReusable$kotlinx_coroutines_core()Z +HSPLkotlinx/coroutines/internal/DispatchedContinuation;->postponeCancellation$kotlinx_coroutines_core(Ljava/lang/Throwable;)Z +HSPLkotlinx/coroutines/internal/DispatchedContinuation;->release$kotlinx_coroutines_core()V +HSPLkotlinx/coroutines/internal/DispatchedContinuation;->resumeWith(Ljava/lang/Object;)V +HSPLkotlinx/coroutines/internal/DispatchedContinuation;->takeState$kotlinx_coroutines_core()Ljava/lang/Object; +HSPLkotlinx/coroutines/internal/DispatchedContinuation;->tryReleaseClaimedContinuation$kotlinx_coroutines_core(Lkotlinx/coroutines/CancellableContinuation;)Ljava/lang/Throwable; +Lkotlinx/coroutines/internal/DispatchedContinuationKt; +HSPLkotlinx/coroutines/internal/DispatchedContinuationKt;->()V +HSPLkotlinx/coroutines/internal/DispatchedContinuationKt;->access$getUNDEFINED$p()Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/internal/DispatchedContinuationKt;->resumeCancellableWith$default(Lkotlin/coroutines/Continuation;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V +HSPLkotlinx/coroutines/internal/DispatchedContinuationKt;->resumeCancellableWith(Lkotlin/coroutines/Continuation;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)V +Lkotlinx/coroutines/internal/FastServiceLoader; +HSPLkotlinx/coroutines/internal/FastServiceLoader;->()V +HSPLkotlinx/coroutines/internal/FastServiceLoader;->()V +HSPLkotlinx/coroutines/internal/FastServiceLoader;->loadMainDispatcherFactory$kotlinx_coroutines_core()Ljava/util/List; +Lkotlinx/coroutines/internal/FastServiceLoaderKt; +HSPLkotlinx/coroutines/internal/FastServiceLoaderKt;->()V +HSPLkotlinx/coroutines/internal/FastServiceLoaderKt;->getANDROID_DETECTED()Z +Lkotlinx/coroutines/internal/InlineList; +HSPLkotlinx/coroutines/internal/InlineList;->constructor-impl$default(Ljava/lang/Object;ILkotlin/jvm/internal/DefaultConstructorMarker;)Ljava/lang/Object; +HSPLkotlinx/coroutines/internal/InlineList;->constructor-impl(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/internal/InlineList;->plus-FjFbRPM(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/internal/LimitedDispatcher; +HSPLkotlinx/coroutines/internal/LimitedDispatcher;->()V +HSPLkotlinx/coroutines/internal/LimitedDispatcher;->(Lkotlinx/coroutines/CoroutineDispatcher;I)V +HSPLkotlinx/coroutines/internal/LimitedDispatcher;->access$obtainTaskOrDeallocateWorker(Lkotlinx/coroutines/internal/LimitedDispatcher;)Ljava/lang/Runnable; +HSPLkotlinx/coroutines/internal/LimitedDispatcher;->dispatch(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V +HSPLkotlinx/coroutines/internal/LimitedDispatcher;->getRunningWorkers$volatile$FU()Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater; +HSPLkotlinx/coroutines/internal/LimitedDispatcher;->obtainTaskOrDeallocateWorker()Ljava/lang/Runnable; +HSPLkotlinx/coroutines/internal/LimitedDispatcher;->tryAllocateWorker()Z +Lkotlinx/coroutines/internal/LimitedDispatcher$Worker; +HSPLkotlinx/coroutines/internal/LimitedDispatcher$Worker;->(Lkotlinx/coroutines/internal/LimitedDispatcher;Ljava/lang/Runnable;)V +HSPLkotlinx/coroutines/internal/LimitedDispatcher$Worker;->run()V +Lkotlinx/coroutines/internal/LimitedDispatcherKt; +HSPLkotlinx/coroutines/internal/LimitedDispatcherKt;->checkParallelism(I)V +Lkotlinx/coroutines/internal/LockFreeLinkedListHead; +HSPLkotlinx/coroutines/internal/LockFreeLinkedListHead;->()V +HSPLkotlinx/coroutines/internal/LockFreeLinkedListHead;->isRemoved()Z +Lkotlinx/coroutines/internal/LockFreeLinkedListNode; +HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->()V +HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->()V +HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->access$finishAdd(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)V +HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->access$get_next$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->addOneIfEmpty(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)Z +HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->correctPrev(Lkotlinx/coroutines/internal/OpDescriptor;)Lkotlinx/coroutines/internal/LockFreeLinkedListNode; +HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->findPrevNonRemoved(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)Lkotlinx/coroutines/internal/LockFreeLinkedListNode; +HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->finishAdd(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)V +HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->getNext()Ljava/lang/Object; +HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->getNextNode()Lkotlinx/coroutines/internal/LockFreeLinkedListNode; +HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->getPrevNode()Lkotlinx/coroutines/internal/LockFreeLinkedListNode; +HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->get_next$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->get_prev$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->get_removedRef$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->isRemoved()Z +HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->remove()Z +HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->removeOrNext()Lkotlinx/coroutines/internal/LockFreeLinkedListNode; +HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->removed()Lkotlinx/coroutines/internal/Removed; +HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->tryCondAddNext(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;Lkotlinx/coroutines/internal/LockFreeLinkedListNode;Lkotlinx/coroutines/internal/LockFreeLinkedListNode$CondAddOp;)I +Lkotlinx/coroutines/internal/LockFreeLinkedListNode$CondAddOp; +HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode$CondAddOp;->(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)V +HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode$CondAddOp;->complete(Ljava/lang/Object;Ljava/lang/Object;)V +HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode$CondAddOp;->complete(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;Ljava/lang/Object;)V +Lkotlinx/coroutines/internal/LockFreeTaskQueue; +HSPLkotlinx/coroutines/internal/LockFreeTaskQueue;->()V +HSPLkotlinx/coroutines/internal/LockFreeTaskQueue;->(Z)V +HSPLkotlinx/coroutines/internal/LockFreeTaskQueue;->addLast(Ljava/lang/Object;)Z +HSPLkotlinx/coroutines/internal/LockFreeTaskQueue;->getSize()I +HSPLkotlinx/coroutines/internal/LockFreeTaskQueue;->get_cur$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/internal/LockFreeTaskQueue;->removeFirstOrNull()Ljava/lang/Object; +Lkotlinx/coroutines/internal/LockFreeTaskQueueCore; +HSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore;->()V +HSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore;->(IZ)V +HSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore;->addLast(Ljava/lang/Object;)I +HSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore;->allocateNextCopy(J)Lkotlinx/coroutines/internal/LockFreeTaskQueueCore; +PLkotlinx/coroutines/internal/LockFreeTaskQueueCore;->allocateOrGetNextCopy(J)Lkotlinx/coroutines/internal/LockFreeTaskQueueCore; +HSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore;->getArray()Ljava/util/concurrent/atomic/AtomicReferenceArray; +HSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore;->getSize()I +PLkotlinx/coroutines/internal/LockFreeTaskQueueCore;->get_next$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore;->get_state$volatile$FU()Ljava/util/concurrent/atomic/AtomicLongFieldUpdater; +PLkotlinx/coroutines/internal/LockFreeTaskQueueCore;->markFrozen()J +PLkotlinx/coroutines/internal/LockFreeTaskQueueCore;->next()Lkotlinx/coroutines/internal/LockFreeTaskQueueCore; +HSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore;->removeFirstOrNull()Ljava/lang/Object; +Lkotlinx/coroutines/internal/LockFreeTaskQueueCore$Companion; +HSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore$Companion;->()V +HSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore$Companion;->updateHead(JI)J +HSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore$Companion;->updateTail(JI)J +HSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore$Companion;->wo(JJ)J +Lkotlinx/coroutines/internal/LockFreeTaskQueueCore$Placeholder; +Lkotlinx/coroutines/internal/MainDispatcherFactory; +Lkotlinx/coroutines/internal/MainDispatcherLoader; +HSPLkotlinx/coroutines/internal/MainDispatcherLoader;->()V +HSPLkotlinx/coroutines/internal/MainDispatcherLoader;->()V +HSPLkotlinx/coroutines/internal/MainDispatcherLoader;->loadMainDispatcher()Lkotlinx/coroutines/MainCoroutineDispatcher; +Lkotlinx/coroutines/internal/MainDispatchersKt; +HSPLkotlinx/coroutines/internal/MainDispatchersKt;->()V +HSPLkotlinx/coroutines/internal/MainDispatchersKt;->tryCreateDispatcher(Lkotlinx/coroutines/internal/MainDispatcherFactory;Ljava/util/List;)Lkotlinx/coroutines/MainCoroutineDispatcher; +Lkotlinx/coroutines/internal/OnUndeliveredElementKt; +Lkotlinx/coroutines/internal/OpDescriptor; +HSPLkotlinx/coroutines/internal/OpDescriptor;->()V +Lkotlinx/coroutines/internal/Removed; +HSPLkotlinx/coroutines/internal/Removed;->(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)V +Lkotlinx/coroutines/internal/ResizableAtomicArray; +HSPLkotlinx/coroutines/internal/ResizableAtomicArray;->(I)V +HSPLkotlinx/coroutines/internal/ResizableAtomicArray;->get(I)Ljava/lang/Object; +HSPLkotlinx/coroutines/internal/ResizableAtomicArray;->setSynchronized(ILjava/lang/Object;)V +Lkotlinx/coroutines/internal/ScopeCoroutine; +HSPLkotlinx/coroutines/internal/ScopeCoroutine;->(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/internal/ScopeCoroutine;->afterCompletion(Ljava/lang/Object;)V +HSPLkotlinx/coroutines/internal/ScopeCoroutine;->afterResume(Ljava/lang/Object;)V +HSPLkotlinx/coroutines/internal/ScopeCoroutine;->getCallerFrame()Lkotlin/coroutines/jvm/internal/CoroutineStackFrame; +HSPLkotlinx/coroutines/internal/ScopeCoroutine;->isScopedCoroutine()Z +Lkotlinx/coroutines/internal/Segment; +HSPLkotlinx/coroutines/internal/Segment;->()V +HSPLkotlinx/coroutines/internal/Segment;->(JLkotlinx/coroutines/internal/Segment;I)V +HSPLkotlinx/coroutines/internal/Segment;->decPointers$kotlinx_coroutines_core()Z +HSPLkotlinx/coroutines/internal/Segment;->getCleanedAndPointers$volatile$FU()Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater; +HSPLkotlinx/coroutines/internal/Segment;->isRemoved()Z +HSPLkotlinx/coroutines/internal/Segment;->onSlotCleaned()V +HSPLkotlinx/coroutines/internal/Segment;->tryIncPointers$kotlinx_coroutines_core()Z +Lkotlinx/coroutines/internal/SegmentOrClosed; +HSPLkotlinx/coroutines/internal/SegmentOrClosed;->constructor-impl(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/internal/SegmentOrClosed;->getSegment-impl(Ljava/lang/Object;)Lkotlinx/coroutines/internal/Segment; +HSPLkotlinx/coroutines/internal/SegmentOrClosed;->isClosed-impl(Ljava/lang/Object;)Z +Lkotlinx/coroutines/internal/StackTraceRecoveryKt; +HSPLkotlinx/coroutines/internal/StackTraceRecoveryKt;->()V +HSPLkotlinx/coroutines/internal/StackTraceRecoveryKt;->recoverStackTrace(Ljava/lang/Throwable;)Ljava/lang/Throwable; +Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/internal/Symbol;->(Ljava/lang/String;)V +Lkotlinx/coroutines/internal/SystemPropsKt; +HSPLkotlinx/coroutines/internal/SystemPropsKt;->getAVAILABLE_PROCESSORS()I +HSPLkotlinx/coroutines/internal/SystemPropsKt;->systemProp$default(Ljava/lang/String;IIIILjava/lang/Object;)I +HSPLkotlinx/coroutines/internal/SystemPropsKt;->systemProp$default(Ljava/lang/String;JJJILjava/lang/Object;)J +HSPLkotlinx/coroutines/internal/SystemPropsKt;->systemProp(Ljava/lang/String;)Ljava/lang/String; +HSPLkotlinx/coroutines/internal/SystemPropsKt;->systemProp(Ljava/lang/String;III)I +HSPLkotlinx/coroutines/internal/SystemPropsKt;->systemProp(Ljava/lang/String;JJJ)J +HSPLkotlinx/coroutines/internal/SystemPropsKt;->systemProp(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; +HSPLkotlinx/coroutines/internal/SystemPropsKt;->systemProp(Ljava/lang/String;Z)Z +Lkotlinx/coroutines/internal/SystemPropsKt__SystemPropsKt; +HSPLkotlinx/coroutines/internal/SystemPropsKt__SystemPropsKt;->()V +HSPLkotlinx/coroutines/internal/SystemPropsKt__SystemPropsKt;->getAVAILABLE_PROCESSORS()I +HSPLkotlinx/coroutines/internal/SystemPropsKt__SystemPropsKt;->systemProp(Ljava/lang/String;)Ljava/lang/String; +Lkotlinx/coroutines/internal/SystemPropsKt__SystemProps_commonKt; +HSPLkotlinx/coroutines/internal/SystemPropsKt__SystemProps_commonKt;->systemProp$default(Ljava/lang/String;IIIILjava/lang/Object;)I +HSPLkotlinx/coroutines/internal/SystemPropsKt__SystemProps_commonKt;->systemProp$default(Ljava/lang/String;JJJILjava/lang/Object;)J +HSPLkotlinx/coroutines/internal/SystemPropsKt__SystemProps_commonKt;->systemProp(Ljava/lang/String;III)I +HSPLkotlinx/coroutines/internal/SystemPropsKt__SystemProps_commonKt;->systemProp(Ljava/lang/String;JJJ)J +HSPLkotlinx/coroutines/internal/SystemPropsKt__SystemProps_commonKt;->systemProp(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; +HSPLkotlinx/coroutines/internal/SystemPropsKt__SystemProps_commonKt;->systemProp(Ljava/lang/String;Z)Z +Lkotlinx/coroutines/internal/ThreadContextKt; +HSPLkotlinx/coroutines/internal/ThreadContextKt;->()V +HSPLkotlinx/coroutines/internal/ThreadContextKt;->restoreThreadContext(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Object;)V +HSPLkotlinx/coroutines/internal/ThreadContextKt;->threadContextElements(Lkotlin/coroutines/CoroutineContext;)Ljava/lang/Object; +HSPLkotlinx/coroutines/internal/ThreadContextKt;->updateThreadContext(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/internal/ThreadContextKt$countAll$1; +HSPLkotlinx/coroutines/internal/ThreadContextKt$countAll$1;->()V +HSPLkotlinx/coroutines/internal/ThreadContextKt$countAll$1;->()V +HSPLkotlinx/coroutines/internal/ThreadContextKt$countAll$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/internal/ThreadContextKt$countAll$1;->invoke(Ljava/lang/Object;Lkotlin/coroutines/CoroutineContext$Element;)Ljava/lang/Object; +Lkotlinx/coroutines/internal/ThreadContextKt$findOne$1; +HSPLkotlinx/coroutines/internal/ThreadContextKt$findOne$1;->()V +HSPLkotlinx/coroutines/internal/ThreadContextKt$findOne$1;->()V +HSPLkotlinx/coroutines/internal/ThreadContextKt$findOne$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/internal/ThreadContextKt$findOne$1;->invoke(Lkotlinx/coroutines/ThreadContextElement;Lkotlin/coroutines/CoroutineContext$Element;)Lkotlinx/coroutines/ThreadContextElement; +Lkotlinx/coroutines/internal/ThreadContextKt$updateState$1; +HSPLkotlinx/coroutines/internal/ThreadContextKt$updateState$1;->()V +HSPLkotlinx/coroutines/internal/ThreadContextKt$updateState$1;->()V +Lkotlinx/coroutines/internal/ThreadLocalElement; +HSPLkotlinx/coroutines/internal/ThreadLocalElement;->(Ljava/lang/Object;Ljava/lang/ThreadLocal;)V +HSPLkotlinx/coroutines/internal/ThreadLocalElement;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; +HSPLkotlinx/coroutines/internal/ThreadLocalElement;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; +HSPLkotlinx/coroutines/internal/ThreadLocalElement;->getKey()Lkotlin/coroutines/CoroutineContext$Key; +HSPLkotlinx/coroutines/internal/ThreadLocalElement;->restoreThreadContext(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Object;)V +HSPLkotlinx/coroutines/internal/ThreadLocalElement;->updateThreadContext(Lkotlin/coroutines/CoroutineContext;)Ljava/lang/Object; +Lkotlinx/coroutines/internal/ThreadLocalKey; +HSPLkotlinx/coroutines/internal/ThreadLocalKey;->(Ljava/lang/ThreadLocal;)V +HSPLkotlinx/coroutines/internal/ThreadLocalKey;->equals(Ljava/lang/Object;)Z +Lkotlinx/coroutines/internal/ThreadLocalKt; +HSPLkotlinx/coroutines/internal/ThreadLocalKt;->commonThreadLocal(Lkotlinx/coroutines/internal/Symbol;)Ljava/lang/ThreadLocal; +Lkotlinx/coroutines/internal/ThreadSafeHeap; +HSPLkotlinx/coroutines/internal/ThreadSafeHeap;->()V +HSPLkotlinx/coroutines/internal/ThreadSafeHeap;->()V +HSPLkotlinx/coroutines/internal/ThreadSafeHeap;->addImpl(Lkotlinx/coroutines/internal/ThreadSafeHeapNode;)V +HSPLkotlinx/coroutines/internal/ThreadSafeHeap;->firstImpl()Lkotlinx/coroutines/internal/ThreadSafeHeapNode; +HSPLkotlinx/coroutines/internal/ThreadSafeHeap;->getSize()I +HSPLkotlinx/coroutines/internal/ThreadSafeHeap;->get_size$volatile$FU()Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater; +HSPLkotlinx/coroutines/internal/ThreadSafeHeap;->isEmpty()Z +HSPLkotlinx/coroutines/internal/ThreadSafeHeap;->peek()Lkotlinx/coroutines/internal/ThreadSafeHeapNode; +HSPLkotlinx/coroutines/internal/ThreadSafeHeap;->realloc()[Lkotlinx/coroutines/internal/ThreadSafeHeapNode; +HSPLkotlinx/coroutines/internal/ThreadSafeHeap;->remove(Lkotlinx/coroutines/internal/ThreadSafeHeapNode;)Z +HSPLkotlinx/coroutines/internal/ThreadSafeHeap;->removeAtImpl(I)Lkotlinx/coroutines/internal/ThreadSafeHeapNode; +HSPLkotlinx/coroutines/internal/ThreadSafeHeap;->setSize(I)V +HSPLkotlinx/coroutines/internal/ThreadSafeHeap;->siftDownFrom(I)V +HSPLkotlinx/coroutines/internal/ThreadSafeHeap;->siftUpFrom(I)V +HSPLkotlinx/coroutines/internal/ThreadSafeHeap;->swap(II)V +Lkotlinx/coroutines/internal/ThreadSafeHeapNode; +Lkotlinx/coroutines/internal/ThreadState; +Lkotlinx/coroutines/intrinsics/CancellableKt; +HSPLkotlinx/coroutines/intrinsics/CancellableKt;->startCoroutineCancellable$default(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/Continuation;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V +HSPLkotlinx/coroutines/intrinsics/CancellableKt;->startCoroutineCancellable(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/Continuation;Lkotlin/jvm/functions/Function1;)V +Lkotlinx/coroutines/intrinsics/UndispatchedKt; +HSPLkotlinx/coroutines/intrinsics/UndispatchedKt;->startCoroutineUndispatched(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/intrinsics/UndispatchedKt;->startUndispatchedOrReturn(Lkotlinx/coroutines/internal/ScopeCoroutine;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; +Lkotlinx/coroutines/scheduling/CoroutineScheduler; +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->()V +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->(IIJLjava/lang/String;)V +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->access$getControlState$volatile$FU()Ljava/util/concurrent/atomic/AtomicLongFieldUpdater; +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->addToGlobalQueue(Lkotlinx/coroutines/scheduling/Task;)Z +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->createNewWorker()I +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->createTask(Ljava/lang/Runnable;Lkotlinx/coroutines/scheduling/TaskContext;)Lkotlinx/coroutines/scheduling/Task; +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->currentWorker()Lkotlinx/coroutines/scheduling/CoroutineScheduler$Worker; +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->dispatch$default(Lkotlinx/coroutines/scheduling/CoroutineScheduler;Ljava/lang/Runnable;Lkotlinx/coroutines/scheduling/TaskContext;ZILjava/lang/Object;)V +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->dispatch(Ljava/lang/Runnable;Lkotlinx/coroutines/scheduling/TaskContext;Z)V +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->getControlState$volatile$FU()Ljava/util/concurrent/atomic/AtomicLongFieldUpdater; +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->getParkedWorkersStack$volatile$FU()Ljava/util/concurrent/atomic/AtomicLongFieldUpdater; +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->get_isTerminated$volatile$FU()Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater; +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->isTerminated()Z +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->parkedWorkersStackNextIndex(Lkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;)I +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->parkedWorkersStackPop()Lkotlinx/coroutines/scheduling/CoroutineScheduler$Worker; +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->parkedWorkersStackPush(Lkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;)Z +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->runSafely(Lkotlinx/coroutines/scheduling/Task;)V +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->signalBlockingWork(JZ)V +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->signalCpuWork()V +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->submitToLocalQueue(Lkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;Lkotlinx/coroutines/scheduling/Task;Z)Lkotlinx/coroutines/scheduling/Task; +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->tryCreateWorker$default(Lkotlinx/coroutines/scheduling/CoroutineScheduler;JILjava/lang/Object;)Z +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->tryCreateWorker(J)Z +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->tryUnpark()Z +Lkotlinx/coroutines/scheduling/CoroutineScheduler$Companion; +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Companion;->()V +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlinx/coroutines/scheduling/CoroutineScheduler$Worker; +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->()V +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->(Lkotlinx/coroutines/scheduling/CoroutineScheduler;)V +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->(Lkotlinx/coroutines/scheduling/CoroutineScheduler;I)V +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->access$getThis$0$p(Lkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;)Lkotlinx/coroutines/scheduling/CoroutineScheduler; +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->afterTask(I)V +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->beforeTask(I)V +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->executeTask(Lkotlinx/coroutines/scheduling/Task;)V +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->findAnyTask(Z)Lkotlinx/coroutines/scheduling/Task; +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->findBlockingTask()Lkotlinx/coroutines/scheduling/Task; +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->findTask(Z)Lkotlinx/coroutines/scheduling/Task; +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->getIndexInArray()I +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->getNextParkedWorker()Ljava/lang/Object; +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->getWorkerCtl$volatile$FU$kotlinx_coroutines_core()Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater; +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->idleReset(I)V +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->inStack()Z +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->nextInt(I)I +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->park()V +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->pollGlobalQueues()Lkotlinx/coroutines/scheduling/Task; +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->run()V +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->runWorker()V +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->setIndexInArray(I)V +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->setNextParkedWorker(Ljava/lang/Object;)V +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->tryAcquireCpuPermit()Z +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->tryPark()V +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->tryReleaseCpu(Lkotlinx/coroutines/scheduling/CoroutineScheduler$WorkerState;)Z +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->trySteal(I)Lkotlinx/coroutines/scheduling/Task; +Lkotlinx/coroutines/scheduling/CoroutineScheduler$WorkerState; +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$WorkerState;->$values()[Lkotlinx/coroutines/scheduling/CoroutineScheduler$WorkerState; +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$WorkerState;->()V +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$WorkerState;->(Ljava/lang/String;I)V +Lkotlinx/coroutines/scheduling/DefaultIoScheduler; +HSPLkotlinx/coroutines/scheduling/DefaultIoScheduler;->()V +HSPLkotlinx/coroutines/scheduling/DefaultIoScheduler;->()V +HSPLkotlinx/coroutines/scheduling/DefaultIoScheduler;->dispatch(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V +Lkotlinx/coroutines/scheduling/DefaultScheduler; +HSPLkotlinx/coroutines/scheduling/DefaultScheduler;->()V +HSPLkotlinx/coroutines/scheduling/DefaultScheduler;->()V +Lkotlinx/coroutines/scheduling/GlobalQueue; +HSPLkotlinx/coroutines/scheduling/GlobalQueue;->()V +Lkotlinx/coroutines/scheduling/NanoTimeSource; +HSPLkotlinx/coroutines/scheduling/NanoTimeSource;->()V +HSPLkotlinx/coroutines/scheduling/NanoTimeSource;->()V +HSPLkotlinx/coroutines/scheduling/NanoTimeSource;->nanoTime()J +Lkotlinx/coroutines/scheduling/SchedulerCoroutineDispatcher; +HSPLkotlinx/coroutines/scheduling/SchedulerCoroutineDispatcher;->(IIJLjava/lang/String;)V +HSPLkotlinx/coroutines/scheduling/SchedulerCoroutineDispatcher;->createScheduler()Lkotlinx/coroutines/scheduling/CoroutineScheduler; +HSPLkotlinx/coroutines/scheduling/SchedulerCoroutineDispatcher;->dispatch(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V +HSPLkotlinx/coroutines/scheduling/SchedulerCoroutineDispatcher;->dispatchWithContext$kotlinx_coroutines_core(Ljava/lang/Runnable;Lkotlinx/coroutines/scheduling/TaskContext;Z)V +HSPLkotlinx/coroutines/scheduling/SchedulerCoroutineDispatcher;->dispatchYield(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V +Lkotlinx/coroutines/scheduling/SchedulerTimeSource; +HSPLkotlinx/coroutines/scheduling/SchedulerTimeSource;->()V +Lkotlinx/coroutines/scheduling/Task; +HSPLkotlinx/coroutines/scheduling/Task;->()V +HSPLkotlinx/coroutines/scheduling/Task;->(JLkotlinx/coroutines/scheduling/TaskContext;)V +Lkotlinx/coroutines/scheduling/TaskContext; +Lkotlinx/coroutines/scheduling/TaskContextImpl; +HSPLkotlinx/coroutines/scheduling/TaskContextImpl;->(I)V +HSPLkotlinx/coroutines/scheduling/TaskContextImpl;->afterTask()V +HSPLkotlinx/coroutines/scheduling/TaskContextImpl;->getTaskMode()I +Lkotlinx/coroutines/scheduling/TaskImpl; +HSPLkotlinx/coroutines/scheduling/TaskImpl;->(Ljava/lang/Runnable;JLkotlinx/coroutines/scheduling/TaskContext;)V +HSPLkotlinx/coroutines/scheduling/TaskImpl;->run()V +Lkotlinx/coroutines/scheduling/TasksKt; +HSPLkotlinx/coroutines/scheduling/TasksKt;->()V +Lkotlinx/coroutines/scheduling/UnlimitedIoScheduler; +HSPLkotlinx/coroutines/scheduling/UnlimitedIoScheduler;->()V +HSPLkotlinx/coroutines/scheduling/UnlimitedIoScheduler;->()V +HSPLkotlinx/coroutines/scheduling/UnlimitedIoScheduler;->dispatch(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V +HSPLkotlinx/coroutines/scheduling/UnlimitedIoScheduler;->limitedParallelism(I)Lkotlinx/coroutines/CoroutineDispatcher; +Lkotlinx/coroutines/scheduling/WorkQueue; +HSPLkotlinx/coroutines/scheduling/WorkQueue;->()V +HSPLkotlinx/coroutines/scheduling/WorkQueue;->()V +HSPLkotlinx/coroutines/scheduling/WorkQueue;->add(Lkotlinx/coroutines/scheduling/Task;Z)Lkotlinx/coroutines/scheduling/Task; +HSPLkotlinx/coroutines/scheduling/WorkQueue;->addLast(Lkotlinx/coroutines/scheduling/Task;)Lkotlinx/coroutines/scheduling/Task; +HSPLkotlinx/coroutines/scheduling/WorkQueue;->decrementIfBlocking(Lkotlinx/coroutines/scheduling/Task;)V +HSPLkotlinx/coroutines/scheduling/WorkQueue;->getBlockingTasksInBuffer$volatile$FU()Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater; +HSPLkotlinx/coroutines/scheduling/WorkQueue;->getBufferSize()I +HSPLkotlinx/coroutines/scheduling/WorkQueue;->getConsumerIndex$volatile$FU()Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater; +HSPLkotlinx/coroutines/scheduling/WorkQueue;->getLastScheduledTask$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/scheduling/WorkQueue;->getProducerIndex$volatile$FU()Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater; +HSPLkotlinx/coroutines/scheduling/WorkQueue;->poll()Lkotlinx/coroutines/scheduling/Task; +HSPLkotlinx/coroutines/scheduling/WorkQueue;->pollBlocking()Lkotlinx/coroutines/scheduling/Task; +HSPLkotlinx/coroutines/scheduling/WorkQueue;->pollBuffer()Lkotlinx/coroutines/scheduling/Task; +HSPLkotlinx/coroutines/scheduling/WorkQueue;->pollWithExclusiveMode(Z)Lkotlinx/coroutines/scheduling/Task; +HSPLkotlinx/coroutines/scheduling/WorkQueue;->stealWithExclusiveMode(I)Lkotlinx/coroutines/scheduling/Task; +HSPLkotlinx/coroutines/scheduling/WorkQueue;->tryExtractFromTheMiddle(IZ)Lkotlinx/coroutines/scheduling/Task; +HSPLkotlinx/coroutines/scheduling/WorkQueue;->trySteal(ILkotlin/jvm/internal/Ref$ObjectRef;)J +HSPLkotlinx/coroutines/scheduling/WorkQueue;->tryStealLastScheduled(ILkotlin/jvm/internal/Ref$ObjectRef;)J +Lkotlinx/coroutines/selects/OnTimeout; +HSPLkotlinx/coroutines/selects/OnTimeout;->(J)V +HSPLkotlinx/coroutines/selects/OnTimeout;->access$register(Lkotlinx/coroutines/selects/OnTimeout;Lkotlinx/coroutines/selects/SelectInstance;Ljava/lang/Object;)V +HSPLkotlinx/coroutines/selects/OnTimeout;->getSelectClause()Lkotlinx/coroutines/selects/SelectClause0; +HSPLkotlinx/coroutines/selects/OnTimeout;->register(Lkotlinx/coroutines/selects/SelectInstance;Ljava/lang/Object;)V +Lkotlinx/coroutines/selects/OnTimeout$register$$inlined$Runnable$1; +HSPLkotlinx/coroutines/selects/OnTimeout$register$$inlined$Runnable$1;->(Lkotlinx/coroutines/selects/SelectInstance;Lkotlinx/coroutines/selects/OnTimeout;)V +HSPLkotlinx/coroutines/selects/OnTimeout$register$$inlined$Runnable$1;->run()V +Lkotlinx/coroutines/selects/OnTimeout$selectClause$1; +HSPLkotlinx/coroutines/selects/OnTimeout$selectClause$1;->()V +HSPLkotlinx/coroutines/selects/OnTimeout$selectClause$1;->()V +HSPLkotlinx/coroutines/selects/OnTimeout$selectClause$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/selects/OnTimeout$selectClause$1;->invoke(Lkotlinx/coroutines/selects/OnTimeout;Lkotlinx/coroutines/selects/SelectInstance;Ljava/lang/Object;)V +Lkotlinx/coroutines/selects/OnTimeoutKt; +HSPLkotlinx/coroutines/selects/OnTimeoutKt;->onTimeout(Lkotlinx/coroutines/selects/SelectBuilder;JLkotlin/jvm/functions/Function1;)V +Lkotlinx/coroutines/selects/SelectBuilder; +Lkotlinx/coroutines/selects/SelectClause; +Lkotlinx/coroutines/selects/SelectClause0; +Lkotlinx/coroutines/selects/SelectClause0Impl; +HSPLkotlinx/coroutines/selects/SelectClause0Impl;->(Ljava/lang/Object;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;)V +HSPLkotlinx/coroutines/selects/SelectClause0Impl;->(Ljava/lang/Object;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlinx/coroutines/selects/SelectClause0Impl;->getClauseObject()Ljava/lang/Object; +HSPLkotlinx/coroutines/selects/SelectClause0Impl;->getOnCancellationConstructor()Lkotlin/jvm/functions/Function3; +HSPLkotlinx/coroutines/selects/SelectClause0Impl;->getProcessResFunc()Lkotlin/jvm/functions/Function3; +HSPLkotlinx/coroutines/selects/SelectClause0Impl;->getRegFunc()Lkotlin/jvm/functions/Function3; +Lkotlinx/coroutines/selects/SelectClause1; +Lkotlinx/coroutines/selects/SelectClause1Impl; +HSPLkotlinx/coroutines/selects/SelectClause1Impl;->(Ljava/lang/Object;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;)V +HSPLkotlinx/coroutines/selects/SelectClause1Impl;->getClauseObject()Ljava/lang/Object; +HSPLkotlinx/coroutines/selects/SelectClause1Impl;->getOnCancellationConstructor()Lkotlin/jvm/functions/Function3; +HSPLkotlinx/coroutines/selects/SelectClause1Impl;->getProcessResFunc()Lkotlin/jvm/functions/Function3; +HSPLkotlinx/coroutines/selects/SelectClause1Impl;->getRegFunc()Lkotlin/jvm/functions/Function3; +Lkotlinx/coroutines/selects/SelectImplementation; +HSPLkotlinx/coroutines/selects/SelectImplementation;->()V +HSPLkotlinx/coroutines/selects/SelectImplementation;->(Lkotlin/coroutines/CoroutineContext;)V +HSPLkotlinx/coroutines/selects/SelectImplementation;->access$doSelectSuspend(Lkotlinx/coroutines/selects/SelectImplementation;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/selects/SelectImplementation;->access$getInternalResult$p(Lkotlinx/coroutines/selects/SelectImplementation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/selects/SelectImplementation;->access$getState$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/selects/SelectImplementation;->checkClauseObject(Ljava/lang/Object;)V +HSPLkotlinx/coroutines/selects/SelectImplementation;->cleanup(Lkotlinx/coroutines/selects/SelectImplementation$ClauseData;)V +HSPLkotlinx/coroutines/selects/SelectImplementation;->complete(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/selects/SelectImplementation;->disposeOnCompletion(Lkotlinx/coroutines/DisposableHandle;)V +HSPLkotlinx/coroutines/selects/SelectImplementation;->doSelect$suspendImpl(Lkotlinx/coroutines/selects/SelectImplementation;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/selects/SelectImplementation;->doSelect(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/selects/SelectImplementation;->doSelectSuspend(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/selects/SelectImplementation;->findClause(Ljava/lang/Object;)Lkotlinx/coroutines/selects/SelectImplementation$ClauseData; +HSPLkotlinx/coroutines/selects/SelectImplementation;->getContext()Lkotlin/coroutines/CoroutineContext; +HSPLkotlinx/coroutines/selects/SelectImplementation;->getState$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/selects/SelectImplementation;->invoke(Ljava/lang/Throwable;)V +HSPLkotlinx/coroutines/selects/SelectImplementation;->invoke(Lkotlinx/coroutines/selects/SelectClause0;Lkotlin/jvm/functions/Function1;)V +HSPLkotlinx/coroutines/selects/SelectImplementation;->invoke(Lkotlinx/coroutines/selects/SelectClause1;Lkotlin/jvm/functions/Function2;)V +HSPLkotlinx/coroutines/selects/SelectImplementation;->invokeOnCancellation(Lkotlinx/coroutines/internal/Segment;I)V +HSPLkotlinx/coroutines/selects/SelectImplementation;->isSelected()Z +HSPLkotlinx/coroutines/selects/SelectImplementation;->register$default(Lkotlinx/coroutines/selects/SelectImplementation;Lkotlinx/coroutines/selects/SelectImplementation$ClauseData;ZILjava/lang/Object;)V +HSPLkotlinx/coroutines/selects/SelectImplementation;->register(Lkotlinx/coroutines/selects/SelectImplementation$ClauseData;Z)V +HSPLkotlinx/coroutines/selects/SelectImplementation;->selectInRegistrationPhase(Ljava/lang/Object;)V +HSPLkotlinx/coroutines/selects/SelectImplementation;->trySelect(Ljava/lang/Object;Ljava/lang/Object;)Z +HSPLkotlinx/coroutines/selects/SelectImplementation;->trySelectInternal(Ljava/lang/Object;Ljava/lang/Object;)I +HSPLkotlinx/coroutines/selects/SelectImplementation;->waitUntilSelected(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/selects/SelectImplementation$ClauseData; +HSPLkotlinx/coroutines/selects/SelectImplementation$ClauseData;->(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 +HSPLkotlinx/coroutines/selects/SelectImplementation$ClauseData;->createOnCancellationAction(Lkotlinx/coroutines/selects/SelectInstance;Ljava/lang/Object;)Lkotlin/jvm/functions/Function1; +HSPLkotlinx/coroutines/selects/SelectImplementation$ClauseData;->dispose()V +HSPLkotlinx/coroutines/selects/SelectImplementation$ClauseData;->invokeBlock(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/selects/SelectImplementation$ClauseData;->processResult(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/selects/SelectImplementation$ClauseData;->tryRegisterAsWaiter(Lkotlinx/coroutines/selects/SelectImplementation;)Z +Lkotlinx/coroutines/selects/SelectImplementation$doSelectSuspend$1; +HSPLkotlinx/coroutines/selects/SelectImplementation$doSelectSuspend$1;->(Lkotlinx/coroutines/selects/SelectImplementation;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/selects/SelectImplementation$doSelectSuspend$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/selects/SelectInstance; +Lkotlinx/coroutines/selects/SelectInstanceInternal; +Lkotlinx/coroutines/selects/SelectKt; +HSPLkotlinx/coroutines/selects/SelectKt;->()V +HSPLkotlinx/coroutines/selects/SelectKt;->access$getDUMMY_PROCESS_RESULT_FUNCTION$p()Lkotlin/jvm/functions/Function3; +HSPLkotlinx/coroutines/selects/SelectKt;->access$getNO_RESULT$p()Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/selects/SelectKt;->access$getSTATE_CANCELLED$p()Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/selects/SelectKt;->access$getSTATE_COMPLETED$p()Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/selects/SelectKt;->access$getSTATE_REG$p()Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/selects/SelectKt;->access$tryResume(Lkotlinx/coroutines/CancellableContinuation;Lkotlin/jvm/functions/Function1;)Z +HSPLkotlinx/coroutines/selects/SelectKt;->getPARAM_CLAUSE_0()Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/selects/SelectKt;->tryResume(Lkotlinx/coroutines/CancellableContinuation;Lkotlin/jvm/functions/Function1;)Z +Lkotlinx/coroutines/selects/SelectKt$DUMMY_PROCESS_RESULT_FUNCTION$1; +HSPLkotlinx/coroutines/selects/SelectKt$DUMMY_PROCESS_RESULT_FUNCTION$1;->()V +HSPLkotlinx/coroutines/selects/SelectKt$DUMMY_PROCESS_RESULT_FUNCTION$1;->()V +HSPLkotlinx/coroutines/selects/SelectKt$DUMMY_PROCESS_RESULT_FUNCTION$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/selects/SelectKt$DUMMY_PROCESS_RESULT_FUNCTION$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Void; +Lkotlinx/coroutines/sync/Mutex; +Lkotlinx/coroutines/sync/Mutex$DefaultImpls; +HSPLkotlinx/coroutines/sync/Mutex$DefaultImpls;->lock$default(Lkotlinx/coroutines/sync/Mutex;Ljava/lang/Object;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/sync/Mutex$DefaultImpls;->unlock$default(Lkotlinx/coroutines/sync/Mutex;Ljava/lang/Object;ILjava/lang/Object;)V +Lkotlinx/coroutines/sync/MutexImpl; +HSPLkotlinx/coroutines/sync/MutexImpl;->()V +HSPLkotlinx/coroutines/sync/MutexImpl;->(Z)V +HSPLkotlinx/coroutines/sync/MutexImpl;->access$getOwner$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/sync/MutexImpl;->getOwner$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/sync/MutexImpl;->isLocked()Z +HSPLkotlinx/coroutines/sync/MutexImpl;->lock$suspendImpl(Lkotlinx/coroutines/sync/MutexImpl;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/sync/MutexImpl;->lock(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/sync/MutexImpl;->lockSuspend(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/sync/MutexImpl;->tryLock(Ljava/lang/Object;)Z +HSPLkotlinx/coroutines/sync/MutexImpl;->tryLockImpl(Ljava/lang/Object;)I +HSPLkotlinx/coroutines/sync/MutexImpl;->unlock(Ljava/lang/Object;)V +Lkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner; +HSPLkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner;->(Lkotlinx/coroutines/sync/MutexImpl;Lkotlinx/coroutines/CancellableContinuationImpl;Ljava/lang/Object;)V +HSPLkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner;->completeResume(Ljava/lang/Object;)V +HSPLkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner;->invokeOnCancellation(Lkotlinx/coroutines/internal/Segment;I)V +HSPLkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner;->tryResume(Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; +HSPLkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner;->tryResume(Lkotlin/Unit;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; +Lkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner$tryResume$token$1; +HSPLkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner$tryResume$token$1;->(Lkotlinx/coroutines/sync/MutexImpl;Lkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner;)V +Lkotlinx/coroutines/sync/MutexImpl$onSelectCancellationUnlockConstructor$1; +HSPLkotlinx/coroutines/sync/MutexImpl$onSelectCancellationUnlockConstructor$1;->(Lkotlinx/coroutines/sync/MutexImpl;)V +Lkotlinx/coroutines/sync/MutexKt; +HSPLkotlinx/coroutines/sync/MutexKt;->()V +HSPLkotlinx/coroutines/sync/MutexKt;->Mutex$default(ZILjava/lang/Object;)Lkotlinx/coroutines/sync/Mutex; +HSPLkotlinx/coroutines/sync/MutexKt;->Mutex(Z)Lkotlinx/coroutines/sync/Mutex; +HSPLkotlinx/coroutines/sync/MutexKt;->access$getNO_OWNER$p()Lkotlinx/coroutines/internal/Symbol; +Lkotlinx/coroutines/sync/Semaphore; +Lkotlinx/coroutines/sync/SemaphoreImpl; +HSPLkotlinx/coroutines/sync/SemaphoreImpl;->()V +HSPLkotlinx/coroutines/sync/SemaphoreImpl;->(II)V +HSPLkotlinx/coroutines/sync/SemaphoreImpl;->acquire(Lkotlinx/coroutines/CancellableContinuation;)V +HSPLkotlinx/coroutines/sync/SemaphoreImpl;->addAcquireToQueue(Lkotlinx/coroutines/Waiter;)Z +HSPLkotlinx/coroutines/sync/SemaphoreImpl;->decPermits()I +HSPLkotlinx/coroutines/sync/SemaphoreImpl;->getAvailablePermits()I +HSPLkotlinx/coroutines/sync/SemaphoreImpl;->getDeqIdx$volatile$FU()Ljava/util/concurrent/atomic/AtomicLongFieldUpdater; +HSPLkotlinx/coroutines/sync/SemaphoreImpl;->getEnqIdx$volatile$FU()Ljava/util/concurrent/atomic/AtomicLongFieldUpdater; +HSPLkotlinx/coroutines/sync/SemaphoreImpl;->getHead$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/sync/SemaphoreImpl;->getTail$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/sync/SemaphoreImpl;->get_availablePermits$volatile$FU()Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater; +HSPLkotlinx/coroutines/sync/SemaphoreImpl;->release()V +HSPLkotlinx/coroutines/sync/SemaphoreImpl;->tryAcquire()Z +HSPLkotlinx/coroutines/sync/SemaphoreImpl;->tryResumeAcquire(Ljava/lang/Object;)Z +HSPLkotlinx/coroutines/sync/SemaphoreImpl;->tryResumeNextFromQueue()Z +Lkotlinx/coroutines/sync/SemaphoreImpl$addAcquireToQueue$createNewSegment$1; +HSPLkotlinx/coroutines/sync/SemaphoreImpl$addAcquireToQueue$createNewSegment$1;->()V +HSPLkotlinx/coroutines/sync/SemaphoreImpl$addAcquireToQueue$createNewSegment$1;->()V +HSPLkotlinx/coroutines/sync/SemaphoreImpl$addAcquireToQueue$createNewSegment$1;->invoke(JLkotlinx/coroutines/sync/SemaphoreSegment;)Lkotlinx/coroutines/sync/SemaphoreSegment; +HSPLkotlinx/coroutines/sync/SemaphoreImpl$addAcquireToQueue$createNewSegment$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/sync/SemaphoreImpl$onCancellationRelease$1; +HSPLkotlinx/coroutines/sync/SemaphoreImpl$onCancellationRelease$1;->(Lkotlinx/coroutines/sync/SemaphoreImpl;)V +Lkotlinx/coroutines/sync/SemaphoreImpl$tryResumeNextFromQueue$createNewSegment$1; +HSPLkotlinx/coroutines/sync/SemaphoreImpl$tryResumeNextFromQueue$createNewSegment$1;->()V +HSPLkotlinx/coroutines/sync/SemaphoreImpl$tryResumeNextFromQueue$createNewSegment$1;->()V +Lkotlinx/coroutines/sync/SemaphoreKt; +HSPLkotlinx/coroutines/sync/SemaphoreKt;->()V +HSPLkotlinx/coroutines/sync/SemaphoreKt;->access$createSegment(JLkotlinx/coroutines/sync/SemaphoreSegment;)Lkotlinx/coroutines/sync/SemaphoreSegment; +HSPLkotlinx/coroutines/sync/SemaphoreKt;->access$getCANCELLED$p()Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/sync/SemaphoreKt;->access$getPERMIT$p()Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/sync/SemaphoreKt;->access$getSEGMENT_SIZE$p()I +HSPLkotlinx/coroutines/sync/SemaphoreKt;->createSegment(JLkotlinx/coroutines/sync/SemaphoreSegment;)Lkotlinx/coroutines/sync/SemaphoreSegment; +Lkotlinx/coroutines/sync/SemaphoreSegment; +HSPLkotlinx/coroutines/sync/SemaphoreSegment;->(JLkotlinx/coroutines/sync/SemaphoreSegment;I)V +HSPLkotlinx/coroutines/sync/SemaphoreSegment;->getAcquirers()Ljava/util/concurrent/atomic/AtomicReferenceArray; +HSPLkotlinx/coroutines/sync/SemaphoreSegment;->getNumberOfSlots()I +Lkotlinx/datetime/Clock; +Lkotlinx/datetime/Clock$System; +HSPLkotlinx/datetime/Clock$System;->()V +HSPLkotlinx/datetime/Clock$System;->()V +HSPLkotlinx/datetime/Clock$System;->now()Lkotlinx/datetime/Instant; +Lkotlinx/datetime/Instant; +HSPLkotlinx/datetime/Instant;->()V +HSPLkotlinx/datetime/Instant;->(Ljava/time/Instant;)V +HSPLkotlinx/datetime/Instant;->compareTo(Lkotlinx/datetime/Instant;)I +HSPLkotlinx/datetime/Instant;->equals(Ljava/lang/Object;)Z +HSPLkotlinx/datetime/Instant;->minus-5sfh64U(Lkotlinx/datetime/Instant;)J +HSPLkotlinx/datetime/Instant;->toEpochMilliseconds()J +Lkotlinx/datetime/Instant$Companion; +HSPLkotlinx/datetime/Instant$Companion;->()V +HSPLkotlinx/datetime/Instant$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlinx/datetime/Instant$Companion;->now()Lkotlinx/datetime/Instant; +Lkotlinx/serialization/BinaryFormat; +Lkotlinx/serialization/DeserializationStrategy; +Lkotlinx/serialization/KSerializer; +Lkotlinx/serialization/MissingFieldException; +Lkotlinx/serialization/PolymorphicSerializer; +HSPLkotlinx/serialization/PolymorphicSerializer;->(Lkotlin/reflect/KClass;)V +HSPLkotlinx/serialization/PolymorphicSerializer;->(Lkotlin/reflect/KClass;[Ljava/lang/annotation/Annotation;)V +Lkotlinx/serialization/PolymorphicSerializer$descriptor$2; +HSPLkotlinx/serialization/PolymorphicSerializer$descriptor$2;->(Lkotlinx/serialization/PolymorphicSerializer;)V +Lkotlinx/serialization/SealedClassSerializer; +HSPLkotlinx/serialization/SealedClassSerializer;->(Ljava/lang/String;Lkotlin/reflect/KClass;[Lkotlin/reflect/KClass;[Lkotlinx/serialization/KSerializer;)V +HSPLkotlinx/serialization/SealedClassSerializer;->(Ljava/lang/String;Lkotlin/reflect/KClass;[Lkotlin/reflect/KClass;[Lkotlinx/serialization/KSerializer;[Ljava/lang/annotation/Annotation;)V +HSPLkotlinx/serialization/SealedClassSerializer;->access$getSerialName2Serializer$p(Lkotlinx/serialization/SealedClassSerializer;)Ljava/util/Map; +HSPLkotlinx/serialization/SealedClassSerializer;->access$get_annotations$p(Lkotlinx/serialization/SealedClassSerializer;)Ljava/util/List; +HSPLkotlinx/serialization/SealedClassSerializer;->getBaseClass()Lkotlin/reflect/KClass; +HSPLkotlinx/serialization/SealedClassSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +Lkotlinx/serialization/SealedClassSerializer$descriptor$2; +HSPLkotlinx/serialization/SealedClassSerializer$descriptor$2;->(Ljava/lang/String;Lkotlinx/serialization/SealedClassSerializer;)V +HSPLkotlinx/serialization/SealedClassSerializer$descriptor$2;->invoke()Ljava/lang/Object; +HSPLkotlinx/serialization/SealedClassSerializer$descriptor$2;->invoke()Lkotlinx/serialization/descriptors/SerialDescriptor; +Lkotlinx/serialization/SealedClassSerializer$descriptor$2$1; +HSPLkotlinx/serialization/SealedClassSerializer$descriptor$2$1;->(Lkotlinx/serialization/SealedClassSerializer;)V +HSPLkotlinx/serialization/SealedClassSerializer$descriptor$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/serialization/SealedClassSerializer$descriptor$2$1;->invoke(Lkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;)V +Lkotlinx/serialization/SealedClassSerializer$descriptor$2$1$elementDescriptor$1; +HSPLkotlinx/serialization/SealedClassSerializer$descriptor$2$1$elementDescriptor$1;->(Lkotlinx/serialization/SealedClassSerializer;)V +HSPLkotlinx/serialization/SealedClassSerializer$descriptor$2$1$elementDescriptor$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/serialization/SealedClassSerializer$descriptor$2$1$elementDescriptor$1;->invoke(Lkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;)V +Lkotlinx/serialization/SealedClassSerializer$special$$inlined$groupingBy$1; +HSPLkotlinx/serialization/SealedClassSerializer$special$$inlined$groupingBy$1;->(Ljava/lang/Iterable;)V +HSPLkotlinx/serialization/SealedClassSerializer$special$$inlined$groupingBy$1;->keyOf(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/serialization/SealedClassSerializer$special$$inlined$groupingBy$1;->sourceIterator()Ljava/util/Iterator; +Lkotlinx/serialization/SerialFormat; +Lkotlinx/serialization/SerializationException; +PLkotlinx/serialization/SerializationException;->(Ljava/lang/String;)V +Lkotlinx/serialization/SerializationStrategy; +Lkotlinx/serialization/SerializersKt; +HSPLkotlinx/serialization/SerializersKt;->serializer(Lkotlin/reflect/KClass;)Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/SerializersKt;->serializerOrNull(Lkotlin/reflect/KClass;)Lkotlinx/serialization/KSerializer; +Lkotlinx/serialization/SerializersKt__SerializersKt; +HSPLkotlinx/serialization/SerializersKt__SerializersKt;->serializer(Lkotlin/reflect/KClass;)Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/SerializersKt__SerializersKt;->serializerOrNull(Lkotlin/reflect/KClass;)Lkotlinx/serialization/KSerializer; +Lkotlinx/serialization/StringFormat; +Lkotlinx/serialization/builtins/BuiltinSerializersKt; +HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->BooleanArraySerializer()Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->ByteArraySerializer()Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->CharArraySerializer()Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->DoubleArraySerializer()Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->FloatArraySerializer()Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->IntArraySerializer()Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->ListSerializer(Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->LongArraySerializer()Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->MapSerializer(Lkotlinx/serialization/KSerializer;Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->NothingSerializer()Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->ShortArraySerializer()Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->UByteArraySerializer()Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->UIntArraySerializer()Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->ULongArraySerializer()Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->UShortArraySerializer()Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/UByte$Companion;)Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/UInt$Companion;)Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/ULong$Companion;)Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/UShort$Companion;)Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/Unit;)Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/jvm/internal/BooleanCompanionObject;)Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/jvm/internal/ByteCompanionObject;)Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/jvm/internal/CharCompanionObject;)Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/jvm/internal/DoubleCompanionObject;)Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/jvm/internal/FloatCompanionObject;)Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/jvm/internal/IntCompanionObject;)Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/jvm/internal/LongCompanionObject;)Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/jvm/internal/ShortCompanionObject;)Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/jvm/internal/StringCompanionObject;)Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/time/Duration$Companion;)Lkotlinx/serialization/KSerializer; +Lkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder; +HSPLkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;->(Ljava/lang/String;)V +HSPLkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;->element$default(Lkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;Ljava/lang/String;Lkotlinx/serialization/descriptors/SerialDescriptor;Ljava/util/List;ZILjava/lang/Object;)V +HSPLkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;->element(Ljava/lang/String;Lkotlinx/serialization/descriptors/SerialDescriptor;Ljava/util/List;Z)V +HSPLkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;->getAnnotations()Ljava/util/List; +HSPLkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;->getElementAnnotations$kotlinx_serialization_core()Ljava/util/List; +HSPLkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;->getElementDescriptors$kotlinx_serialization_core()Ljava/util/List; +HSPLkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;->getElementNames$kotlinx_serialization_core()Ljava/util/List; +HSPLkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;->getElementOptionality$kotlinx_serialization_core()Ljava/util/List; +HSPLkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;->setAnnotations(Ljava/util/List;)V +Lkotlinx/serialization/descriptors/PolymorphicKind; +HSPLkotlinx/serialization/descriptors/PolymorphicKind;->()V +HSPLkotlinx/serialization/descriptors/PolymorphicKind;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlinx/serialization/descriptors/PolymorphicKind$SEALED; +HSPLkotlinx/serialization/descriptors/PolymorphicKind$SEALED;->()V +HSPLkotlinx/serialization/descriptors/PolymorphicKind$SEALED;->()V +Lkotlinx/serialization/descriptors/PrimitiveKind; +HSPLkotlinx/serialization/descriptors/PrimitiveKind;->()V +HSPLkotlinx/serialization/descriptors/PrimitiveKind;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlinx/serialization/descriptors/PrimitiveKind$BOOLEAN; +HSPLkotlinx/serialization/descriptors/PrimitiveKind$BOOLEAN;->()V +HSPLkotlinx/serialization/descriptors/PrimitiveKind$BOOLEAN;->()V +Lkotlinx/serialization/descriptors/PrimitiveKind$BYTE; +HSPLkotlinx/serialization/descriptors/PrimitiveKind$BYTE;->()V +HSPLkotlinx/serialization/descriptors/PrimitiveKind$BYTE;->()V +Lkotlinx/serialization/descriptors/PrimitiveKind$CHAR; +HSPLkotlinx/serialization/descriptors/PrimitiveKind$CHAR;->()V +HSPLkotlinx/serialization/descriptors/PrimitiveKind$CHAR;->()V +Lkotlinx/serialization/descriptors/PrimitiveKind$DOUBLE; +HSPLkotlinx/serialization/descriptors/PrimitiveKind$DOUBLE;->()V +HSPLkotlinx/serialization/descriptors/PrimitiveKind$DOUBLE;->()V +Lkotlinx/serialization/descriptors/PrimitiveKind$FLOAT; +HSPLkotlinx/serialization/descriptors/PrimitiveKind$FLOAT;->()V +HSPLkotlinx/serialization/descriptors/PrimitiveKind$FLOAT;->()V +Lkotlinx/serialization/descriptors/PrimitiveKind$INT; +HSPLkotlinx/serialization/descriptors/PrimitiveKind$INT;->()V +HSPLkotlinx/serialization/descriptors/PrimitiveKind$INT;->()V +Lkotlinx/serialization/descriptors/PrimitiveKind$LONG; +HSPLkotlinx/serialization/descriptors/PrimitiveKind$LONG;->()V +HSPLkotlinx/serialization/descriptors/PrimitiveKind$LONG;->()V +Lkotlinx/serialization/descriptors/PrimitiveKind$SHORT; +HSPLkotlinx/serialization/descriptors/PrimitiveKind$SHORT;->()V +HSPLkotlinx/serialization/descriptors/PrimitiveKind$SHORT;->()V +Lkotlinx/serialization/descriptors/PrimitiveKind$STRING; +HSPLkotlinx/serialization/descriptors/PrimitiveKind$STRING;->()V +HSPLkotlinx/serialization/descriptors/PrimitiveKind$STRING;->()V +Lkotlinx/serialization/descriptors/SerialDescriptor; +Lkotlinx/serialization/descriptors/SerialDescriptor$DefaultImpls; +HSPLkotlinx/serialization/descriptors/SerialDescriptor$DefaultImpls;->isInline(Lkotlinx/serialization/descriptors/SerialDescriptor;)Z +Lkotlinx/serialization/descriptors/SerialDescriptorImpl; +HSPLkotlinx/serialization/descriptors/SerialDescriptorImpl;->(Ljava/lang/String;Lkotlinx/serialization/descriptors/SerialKind;ILjava/util/List;Lkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;)V +HSPLkotlinx/serialization/descriptors/SerialDescriptorImpl;->getSerialName()Ljava/lang/String; +Lkotlinx/serialization/descriptors/SerialDescriptorImpl$_hashCode$2; +HSPLkotlinx/serialization/descriptors/SerialDescriptorImpl$_hashCode$2;->(Lkotlinx/serialization/descriptors/SerialDescriptorImpl;)V +Lkotlinx/serialization/descriptors/SerialDescriptorsKt; +HSPLkotlinx/serialization/descriptors/SerialDescriptorsKt;->PrimitiveSerialDescriptor(Ljava/lang/String;Lkotlinx/serialization/descriptors/PrimitiveKind;)Lkotlinx/serialization/descriptors/SerialDescriptor; +HSPLkotlinx/serialization/descriptors/SerialDescriptorsKt;->buildSerialDescriptor$default(Ljava/lang/String;Lkotlinx/serialization/descriptors/SerialKind;[Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lkotlinx/serialization/descriptors/SerialDescriptor; +HSPLkotlinx/serialization/descriptors/SerialDescriptorsKt;->buildSerialDescriptor(Ljava/lang/String;Lkotlinx/serialization/descriptors/SerialKind;[Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlin/jvm/functions/Function1;)Lkotlinx/serialization/descriptors/SerialDescriptor; +Lkotlinx/serialization/descriptors/SerialDescriptorsKt$buildSerialDescriptor$1; +HSPLkotlinx/serialization/descriptors/SerialDescriptorsKt$buildSerialDescriptor$1;->()V +HSPLkotlinx/serialization/descriptors/SerialDescriptorsKt$buildSerialDescriptor$1;->()V +HSPLkotlinx/serialization/descriptors/SerialDescriptorsKt$buildSerialDescriptor$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/serialization/descriptors/SerialDescriptorsKt$buildSerialDescriptor$1;->invoke(Lkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;)V +Lkotlinx/serialization/descriptors/SerialKind; +HSPLkotlinx/serialization/descriptors/SerialKind;->()V +HSPLkotlinx/serialization/descriptors/SerialKind;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlinx/serialization/descriptors/SerialKind$CONTEXTUAL; +HSPLkotlinx/serialization/descriptors/SerialKind$CONTEXTUAL;->()V +HSPLkotlinx/serialization/descriptors/SerialKind$CONTEXTUAL;->()V +Lkotlinx/serialization/descriptors/SerialKind$ENUM; +HSPLkotlinx/serialization/descriptors/SerialKind$ENUM;->()V +HSPLkotlinx/serialization/descriptors/SerialKind$ENUM;->()V +Lkotlinx/serialization/descriptors/StructureKind; +HSPLkotlinx/serialization/descriptors/StructureKind;->()V +HSPLkotlinx/serialization/descriptors/StructureKind;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlinx/serialization/descriptors/StructureKind$CLASS; +HSPLkotlinx/serialization/descriptors/StructureKind$CLASS;->()V +HSPLkotlinx/serialization/descriptors/StructureKind$CLASS;->()V +Lkotlinx/serialization/descriptors/StructureKind$LIST; +HSPLkotlinx/serialization/descriptors/StructureKind$LIST;->()V +HSPLkotlinx/serialization/descriptors/StructureKind$LIST;->()V +Lkotlinx/serialization/descriptors/StructureKind$MAP; +HSPLkotlinx/serialization/descriptors/StructureKind$MAP;->()V +HSPLkotlinx/serialization/descriptors/StructureKind$MAP;->()V +Lkotlinx/serialization/descriptors/StructureKind$OBJECT; +HSPLkotlinx/serialization/descriptors/StructureKind$OBJECT;->()V +HSPLkotlinx/serialization/descriptors/StructureKind$OBJECT;->()V +Lkotlinx/serialization/encoding/AbstractDecoder; +HSPLkotlinx/serialization/encoding/AbstractDecoder;->()V +HSPLkotlinx/serialization/encoding/AbstractDecoder;->decodeSequentially()Z +HSPLkotlinx/serialization/encoding/AbstractDecoder;->decodeSerializableElement(Lkotlinx/serialization/descriptors/SerialDescriptor;ILkotlinx/serialization/DeserializationStrategy;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/serialization/encoding/AbstractDecoder;->decodeSerializableValue(Lkotlinx/serialization/DeserializationStrategy;Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/serialization/encoding/AbstractEncoder; +HSPLkotlinx/serialization/encoding/AbstractEncoder;->()V +HSPLkotlinx/serialization/encoding/AbstractEncoder;->beginCollection(Lkotlinx/serialization/descriptors/SerialDescriptor;I)Lkotlinx/serialization/encoding/CompositeEncoder; +HSPLkotlinx/serialization/encoding/AbstractEncoder;->encodeSerializableElement(Lkotlinx/serialization/descriptors/SerialDescriptor;ILkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)V +Lkotlinx/serialization/encoding/ChunkedDecoder; +Lkotlinx/serialization/encoding/CompositeDecoder; +Lkotlinx/serialization/encoding/CompositeDecoder$DefaultImpls; +HSPLkotlinx/serialization/encoding/CompositeDecoder$DefaultImpls;->decodeSequentially(Lkotlinx/serialization/encoding/CompositeDecoder;)Z +HSPLkotlinx/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; +Lkotlinx/serialization/encoding/CompositeEncoder; +Lkotlinx/serialization/encoding/Decoder; +Lkotlinx/serialization/encoding/Encoder; +Lkotlinx/serialization/encoding/Encoder$DefaultImpls; +HSPLkotlinx/serialization/encoding/Encoder$DefaultImpls;->beginCollection(Lkotlinx/serialization/encoding/Encoder;Lkotlinx/serialization/descriptors/SerialDescriptor;I)Lkotlinx/serialization/encoding/CompositeEncoder; +Lkotlinx/serialization/internal/AbstractCollectionSerializer; +HSPLkotlinx/serialization/internal/AbstractCollectionSerializer;->()V +HSPLkotlinx/serialization/internal/AbstractCollectionSerializer;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlinx/serialization/internal/AbstractCollectionSerializer;->deserialize(Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; +HSPLkotlinx/serialization/internal/AbstractCollectionSerializer;->merge(Lkotlinx/serialization/encoding/Decoder;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/serialization/internal/AbstractCollectionSerializer;->readElement$default(Lkotlinx/serialization/internal/AbstractCollectionSerializer;Lkotlinx/serialization/encoding/CompositeDecoder;ILjava/lang/Object;ZILjava/lang/Object;)V +Lkotlinx/serialization/internal/AbstractPolymorphicSerializer; +HSPLkotlinx/serialization/internal/AbstractPolymorphicSerializer;->()V +Lkotlinx/serialization/internal/ArrayListClassDesc; +HSPLkotlinx/serialization/internal/ArrayListClassDesc;->(Lkotlinx/serialization/descriptors/SerialDescriptor;)V +Lkotlinx/serialization/internal/ArrayListSerializer; +HSPLkotlinx/serialization/internal/ArrayListSerializer;->(Lkotlinx/serialization/KSerializer;)V +HSPLkotlinx/serialization/internal/ArrayListSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +Lkotlinx/serialization/internal/BooleanArraySerializer; +HSPLkotlinx/serialization/internal/BooleanArraySerializer;->()V +HSPLkotlinx/serialization/internal/BooleanArraySerializer;->()V +Lkotlinx/serialization/internal/BooleanSerializer; +HSPLkotlinx/serialization/internal/BooleanSerializer;->()V +HSPLkotlinx/serialization/internal/BooleanSerializer;->()V +HSPLkotlinx/serialization/internal/BooleanSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +Lkotlinx/serialization/internal/ByteArraySerializer; +HSPLkotlinx/serialization/internal/ByteArraySerializer;->()V +HSPLkotlinx/serialization/internal/ByteArraySerializer;->()V +Lkotlinx/serialization/internal/ByteSerializer; +HSPLkotlinx/serialization/internal/ByteSerializer;->()V +HSPLkotlinx/serialization/internal/ByteSerializer;->()V +HSPLkotlinx/serialization/internal/ByteSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +Lkotlinx/serialization/internal/CachedNames; +Lkotlinx/serialization/internal/CharArraySerializer; +HSPLkotlinx/serialization/internal/CharArraySerializer;->()V +HSPLkotlinx/serialization/internal/CharArraySerializer;->()V +Lkotlinx/serialization/internal/CharSerializer; +HSPLkotlinx/serialization/internal/CharSerializer;->()V +HSPLkotlinx/serialization/internal/CharSerializer;->()V +HSPLkotlinx/serialization/internal/CharSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +Lkotlinx/serialization/internal/CollectionLikeSerializer; +HSPLkotlinx/serialization/internal/CollectionLikeSerializer;->(Lkotlinx/serialization/KSerializer;)V +HSPLkotlinx/serialization/internal/CollectionLikeSerializer;->(Lkotlinx/serialization/KSerializer;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlinx/serialization/internal/CollectionLikeSerializer;->serialize(Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V +Lkotlinx/serialization/internal/CollectionSerializer; +HSPLkotlinx/serialization/internal/CollectionSerializer;->(Lkotlinx/serialization/KSerializer;)V +HSPLkotlinx/serialization/internal/CollectionSerializer;->collectionIterator(Ljava/lang/Object;)Ljava/util/Iterator; +HSPLkotlinx/serialization/internal/CollectionSerializer;->collectionIterator(Ljava/util/Collection;)Ljava/util/Iterator; +HSPLkotlinx/serialization/internal/CollectionSerializer;->collectionSize(Ljava/lang/Object;)I +HSPLkotlinx/serialization/internal/CollectionSerializer;->collectionSize(Ljava/util/Collection;)I +Lkotlinx/serialization/internal/DoubleArraySerializer; +HSPLkotlinx/serialization/internal/DoubleArraySerializer;->()V +HSPLkotlinx/serialization/internal/DoubleArraySerializer;->()V +Lkotlinx/serialization/internal/DoubleSerializer; +HSPLkotlinx/serialization/internal/DoubleSerializer;->()V +HSPLkotlinx/serialization/internal/DoubleSerializer;->()V +HSPLkotlinx/serialization/internal/DoubleSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +Lkotlinx/serialization/internal/DurationSerializer; +HSPLkotlinx/serialization/internal/DurationSerializer;->()V +HSPLkotlinx/serialization/internal/DurationSerializer;->()V +Lkotlinx/serialization/internal/EnumDescriptor; +HSPLkotlinx/serialization/internal/EnumDescriptor;->(Ljava/lang/String;I)V +Lkotlinx/serialization/internal/EnumDescriptor$elementDescriptors$2; +HSPLkotlinx/serialization/internal/EnumDescriptor$elementDescriptors$2;->(ILjava/lang/String;Lkotlinx/serialization/internal/EnumDescriptor;)V +Lkotlinx/serialization/internal/EnumSerializer; +HSPLkotlinx/serialization/internal/EnumSerializer;->(Ljava/lang/String;[Ljava/lang/Enum;)V +HSPLkotlinx/serialization/internal/EnumSerializer;->(Ljava/lang/String;[Ljava/lang/Enum;Lkotlinx/serialization/descriptors/SerialDescriptor;)V +Lkotlinx/serialization/internal/EnumSerializer$descriptor$2; +HSPLkotlinx/serialization/internal/EnumSerializer$descriptor$2;->(Lkotlinx/serialization/internal/EnumSerializer;Ljava/lang/String;)V +Lkotlinx/serialization/internal/EnumsKt; +HSPLkotlinx/serialization/internal/EnumsKt;->createAnnotatedEnumSerializer(Ljava/lang/String;[Ljava/lang/Enum;[Ljava/lang/String;[[Ljava/lang/annotation/Annotation;[Ljava/lang/annotation/Annotation;)Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/internal/EnumsKt;->createSimpleEnumSerializer(Ljava/lang/String;[Ljava/lang/Enum;)Lkotlinx/serialization/KSerializer; +Lkotlinx/serialization/internal/FloatArraySerializer; +HSPLkotlinx/serialization/internal/FloatArraySerializer;->()V +HSPLkotlinx/serialization/internal/FloatArraySerializer;->()V +Lkotlinx/serialization/internal/FloatSerializer; +HSPLkotlinx/serialization/internal/FloatSerializer;->()V +HSPLkotlinx/serialization/internal/FloatSerializer;->()V +HSPLkotlinx/serialization/internal/FloatSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +Lkotlinx/serialization/internal/GeneratedSerializer; +Lkotlinx/serialization/internal/InlineClassDescriptor; +HSPLkotlinx/serialization/internal/InlineClassDescriptor;->(Ljava/lang/String;Lkotlinx/serialization/internal/GeneratedSerializer;)V +Lkotlinx/serialization/internal/InlineClassDescriptorKt; +HSPLkotlinx/serialization/internal/InlineClassDescriptorKt;->InlinePrimitiveDescriptor(Ljava/lang/String;Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/descriptors/SerialDescriptor; +Lkotlinx/serialization/internal/InlineClassDescriptorKt$InlinePrimitiveDescriptor$1; +HSPLkotlinx/serialization/internal/InlineClassDescriptorKt$InlinePrimitiveDescriptor$1;->(Lkotlinx/serialization/KSerializer;)V +Lkotlinx/serialization/internal/IntArraySerializer; +HSPLkotlinx/serialization/internal/IntArraySerializer;->()V +HSPLkotlinx/serialization/internal/IntArraySerializer;->()V +Lkotlinx/serialization/internal/IntSerializer; +HSPLkotlinx/serialization/internal/IntSerializer;->()V +HSPLkotlinx/serialization/internal/IntSerializer;->()V +HSPLkotlinx/serialization/internal/IntSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +Lkotlinx/serialization/internal/LinkedHashMapClassDesc; +HSPLkotlinx/serialization/internal/LinkedHashMapClassDesc;->(Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlinx/serialization/descriptors/SerialDescriptor;)V +Lkotlinx/serialization/internal/LinkedHashMapSerializer; +HSPLkotlinx/serialization/internal/LinkedHashMapSerializer;->(Lkotlinx/serialization/KSerializer;Lkotlinx/serialization/KSerializer;)V +HSPLkotlinx/serialization/internal/LinkedHashMapSerializer;->builder()Ljava/lang/Object; +HSPLkotlinx/serialization/internal/LinkedHashMapSerializer;->builder()Ljava/util/LinkedHashMap; +HSPLkotlinx/serialization/internal/LinkedHashMapSerializer;->builderSize(Ljava/lang/Object;)I +HSPLkotlinx/serialization/internal/LinkedHashMapSerializer;->builderSize(Ljava/util/LinkedHashMap;)I +HSPLkotlinx/serialization/internal/LinkedHashMapSerializer;->collectionIterator(Ljava/lang/Object;)Ljava/util/Iterator; +HSPLkotlinx/serialization/internal/LinkedHashMapSerializer;->collectionIterator(Ljava/util/Map;)Ljava/util/Iterator; +HSPLkotlinx/serialization/internal/LinkedHashMapSerializer;->collectionSize(Ljava/lang/Object;)I +HSPLkotlinx/serialization/internal/LinkedHashMapSerializer;->collectionSize(Ljava/util/Map;)I +HSPLkotlinx/serialization/internal/LinkedHashMapSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +HSPLkotlinx/serialization/internal/LinkedHashMapSerializer;->toResult(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/serialization/internal/LinkedHashMapSerializer;->toResult(Ljava/util/LinkedHashMap;)Ljava/util/Map; +Lkotlinx/serialization/internal/LinkedHashSetClassDesc; +HSPLkotlinx/serialization/internal/LinkedHashSetClassDesc;->(Lkotlinx/serialization/descriptors/SerialDescriptor;)V +Lkotlinx/serialization/internal/LinkedHashSetSerializer; +HSPLkotlinx/serialization/internal/LinkedHashSetSerializer;->(Lkotlinx/serialization/KSerializer;)V +HSPLkotlinx/serialization/internal/LinkedHashSetSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +Lkotlinx/serialization/internal/ListLikeDescriptor; +HSPLkotlinx/serialization/internal/ListLikeDescriptor;->(Lkotlinx/serialization/descriptors/SerialDescriptor;)V +HSPLkotlinx/serialization/internal/ListLikeDescriptor;->(Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlinx/serialization/internal/ListLikeDescriptor;->getKind()Lkotlinx/serialization/descriptors/SerialKind; +Lkotlinx/serialization/internal/LongArraySerializer; +HSPLkotlinx/serialization/internal/LongArraySerializer;->()V +HSPLkotlinx/serialization/internal/LongArraySerializer;->()V +Lkotlinx/serialization/internal/LongSerializer; +HSPLkotlinx/serialization/internal/LongSerializer;->()V +HSPLkotlinx/serialization/internal/LongSerializer;->()V +HSPLkotlinx/serialization/internal/LongSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +Lkotlinx/serialization/internal/MapLikeDescriptor; +HSPLkotlinx/serialization/internal/MapLikeDescriptor;->(Ljava/lang/String;Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlinx/serialization/descriptors/SerialDescriptor;)V +HSPLkotlinx/serialization/internal/MapLikeDescriptor;->(Ljava/lang/String;Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlinx/serialization/internal/MapLikeDescriptor;->getElementDescriptor(I)Lkotlinx/serialization/descriptors/SerialDescriptor; +HSPLkotlinx/serialization/internal/MapLikeDescriptor;->getElementsCount()I +HSPLkotlinx/serialization/internal/MapLikeDescriptor;->getKind()Lkotlinx/serialization/descriptors/SerialKind; +Lkotlinx/serialization/internal/MapLikeSerializer; +HSPLkotlinx/serialization/internal/MapLikeSerializer;->(Lkotlinx/serialization/KSerializer;Lkotlinx/serialization/KSerializer;)V +HSPLkotlinx/serialization/internal/MapLikeSerializer;->(Lkotlinx/serialization/KSerializer;Lkotlinx/serialization/KSerializer;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlinx/serialization/internal/MapLikeSerializer;->getKeySerializer()Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/internal/MapLikeSerializer;->getValueSerializer()Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/internal/MapLikeSerializer;->readElement(Lkotlinx/serialization/encoding/CompositeDecoder;ILjava/lang/Object;Z)V +HSPLkotlinx/serialization/internal/MapLikeSerializer;->readElement(Lkotlinx/serialization/encoding/CompositeDecoder;ILjava/util/Map;Z)V +HSPLkotlinx/serialization/internal/MapLikeSerializer;->serialize(Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V +Lkotlinx/serialization/internal/NothingSerialDescriptor; +HSPLkotlinx/serialization/internal/NothingSerialDescriptor;->()V +HSPLkotlinx/serialization/internal/NothingSerialDescriptor;->()V +Lkotlinx/serialization/internal/NothingSerializer; +HSPLkotlinx/serialization/internal/NothingSerializer;->()V +HSPLkotlinx/serialization/internal/NothingSerializer;->()V +Lkotlinx/serialization/internal/ObjectSerializer; +HSPLkotlinx/serialization/internal/ObjectSerializer;->(Ljava/lang/String;Ljava/lang/Object;)V +HSPLkotlinx/serialization/internal/ObjectSerializer;->(Ljava/lang/String;Ljava/lang/Object;[Ljava/lang/annotation/Annotation;)V +HSPLkotlinx/serialization/internal/ObjectSerializer;->access$get_annotations$p(Lkotlinx/serialization/internal/ObjectSerializer;)Ljava/util/List; +HSPLkotlinx/serialization/internal/ObjectSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +Lkotlinx/serialization/internal/ObjectSerializer$descriptor$2; +HSPLkotlinx/serialization/internal/ObjectSerializer$descriptor$2;->(Ljava/lang/String;Lkotlinx/serialization/internal/ObjectSerializer;)V +HSPLkotlinx/serialization/internal/ObjectSerializer$descriptor$2;->invoke()Ljava/lang/Object; +HSPLkotlinx/serialization/internal/ObjectSerializer$descriptor$2;->invoke()Lkotlinx/serialization/descriptors/SerialDescriptor; +Lkotlinx/serialization/internal/ObjectSerializer$descriptor$2$1; +HSPLkotlinx/serialization/internal/ObjectSerializer$descriptor$2$1;->(Lkotlinx/serialization/internal/ObjectSerializer;)V +HSPLkotlinx/serialization/internal/ObjectSerializer$descriptor$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/serialization/internal/ObjectSerializer$descriptor$2$1;->invoke(Lkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;)V +Lkotlinx/serialization/internal/PlatformKt; +HSPLkotlinx/serialization/internal/PlatformKt;->companionOrNull(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Object; +HSPLkotlinx/serialization/internal/PlatformKt;->compiledSerializerImpl(Lkotlin/reflect/KClass;)Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/internal/PlatformKt;->constructSerializerForGivenTypeArgs(Ljava/lang/Class;[Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/internal/PlatformKt;->constructSerializerForGivenTypeArgs(Lkotlin/reflect/KClass;[Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/internal/PlatformKt;->invokeSerializerOnCompanion(Ljava/lang/Object;[Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/internal/PlatformKt;->invokeSerializerOnDefaultCompanion(Ljava/lang/Class;[Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer; +Lkotlinx/serialization/internal/Platform_commonKt; +HSPLkotlinx/serialization/internal/Platform_commonKt;->()V +HSPLkotlinx/serialization/internal/Platform_commonKt;->compactArray(Ljava/util/List;)[Lkotlinx/serialization/descriptors/SerialDescriptor; +Lkotlinx/serialization/internal/PluginGeneratedSerialDescriptor; +HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->(Ljava/lang/String;Lkotlinx/serialization/internal/GeneratedSerializer;I)V +HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->(Ljava/lang/String;Lkotlinx/serialization/internal/GeneratedSerializer;IILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->addElement$default(Lkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;Ljava/lang/String;ZILjava/lang/Object;)V +HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->addElement(Ljava/lang/String;Z)V +HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->buildIndices()Ljava/util/Map; +HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->getElementName(I)Ljava/lang/String; +HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->getElementsCount()I +HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->getKind()Lkotlinx/serialization/descriptors/SerialKind; +HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->getSerialName()Ljava/lang/String; +HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->pushAnnotation(Ljava/lang/annotation/Annotation;)V +Lkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$_hashCode$2; +HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$_hashCode$2;->(Lkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;)V +Lkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$childSerializers$2; +HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$childSerializers$2;->(Lkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;)V +Lkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$typeParameterDescriptors$2; +HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$typeParameterDescriptors$2;->(Lkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;)V +Lkotlinx/serialization/internal/PrimitiveArrayDescriptor; +HSPLkotlinx/serialization/internal/PrimitiveArrayDescriptor;->(Lkotlinx/serialization/descriptors/SerialDescriptor;)V +Lkotlinx/serialization/internal/PrimitiveArraySerializer; +HSPLkotlinx/serialization/internal/PrimitiveArraySerializer;->(Lkotlinx/serialization/KSerializer;)V +Lkotlinx/serialization/internal/PrimitiveSerialDescriptor; +HSPLkotlinx/serialization/internal/PrimitiveSerialDescriptor;->(Ljava/lang/String;Lkotlinx/serialization/descriptors/PrimitiveKind;)V +HSPLkotlinx/serialization/internal/PrimitiveSerialDescriptor;->getKind()Lkotlinx/serialization/descriptors/PrimitiveKind; +HSPLkotlinx/serialization/internal/PrimitiveSerialDescriptor;->getKind()Lkotlinx/serialization/descriptors/SerialKind; +HSPLkotlinx/serialization/internal/PrimitiveSerialDescriptor;->getSerialName()Ljava/lang/String; +HSPLkotlinx/serialization/internal/PrimitiveSerialDescriptor;->isInline()Z +Lkotlinx/serialization/internal/PrimitivesKt; +HSPLkotlinx/serialization/internal/PrimitivesKt;->()V +HSPLkotlinx/serialization/internal/PrimitivesKt;->PrimitiveDescriptorSafe(Ljava/lang/String;Lkotlinx/serialization/descriptors/PrimitiveKind;)Lkotlinx/serialization/descriptors/SerialDescriptor; +HSPLkotlinx/serialization/internal/PrimitivesKt;->capitalize(Ljava/lang/String;)Ljava/lang/String; +HSPLkotlinx/serialization/internal/PrimitivesKt;->checkName(Ljava/lang/String;)V +Lkotlinx/serialization/internal/ShortArraySerializer; +HSPLkotlinx/serialization/internal/ShortArraySerializer;->()V +HSPLkotlinx/serialization/internal/ShortArraySerializer;->()V +Lkotlinx/serialization/internal/ShortSerializer; +HSPLkotlinx/serialization/internal/ShortSerializer;->()V +HSPLkotlinx/serialization/internal/ShortSerializer;->()V +HSPLkotlinx/serialization/internal/ShortSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +Lkotlinx/serialization/internal/StringSerializer; +HSPLkotlinx/serialization/internal/StringSerializer;->()V +HSPLkotlinx/serialization/internal/StringSerializer;->()V +HSPLkotlinx/serialization/internal/StringSerializer;->deserialize(Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; +HSPLkotlinx/serialization/internal/StringSerializer;->deserialize(Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/String; +HSPLkotlinx/serialization/internal/StringSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +HSPLkotlinx/serialization/internal/StringSerializer;->serialize(Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V +HSPLkotlinx/serialization/internal/StringSerializer;->serialize(Lkotlinx/serialization/encoding/Encoder;Ljava/lang/String;)V +Lkotlinx/serialization/internal/UByteArraySerializer; +HSPLkotlinx/serialization/internal/UByteArraySerializer;->()V +HSPLkotlinx/serialization/internal/UByteArraySerializer;->()V +Lkotlinx/serialization/internal/UByteSerializer; +HSPLkotlinx/serialization/internal/UByteSerializer;->()V +HSPLkotlinx/serialization/internal/UByteSerializer;->()V +HSPLkotlinx/serialization/internal/UByteSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +Lkotlinx/serialization/internal/UIntArraySerializer; +HSPLkotlinx/serialization/internal/UIntArraySerializer;->()V +HSPLkotlinx/serialization/internal/UIntArraySerializer;->()V +Lkotlinx/serialization/internal/UIntSerializer; +HSPLkotlinx/serialization/internal/UIntSerializer;->()V +HSPLkotlinx/serialization/internal/UIntSerializer;->()V +HSPLkotlinx/serialization/internal/UIntSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +Lkotlinx/serialization/internal/ULongArraySerializer; +HSPLkotlinx/serialization/internal/ULongArraySerializer;->()V +HSPLkotlinx/serialization/internal/ULongArraySerializer;->()V +Lkotlinx/serialization/internal/ULongSerializer; +HSPLkotlinx/serialization/internal/ULongSerializer;->()V +HSPLkotlinx/serialization/internal/ULongSerializer;->()V +HSPLkotlinx/serialization/internal/ULongSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +Lkotlinx/serialization/internal/UShortArraySerializer; +HSPLkotlinx/serialization/internal/UShortArraySerializer;->()V +HSPLkotlinx/serialization/internal/UShortArraySerializer;->()V +Lkotlinx/serialization/internal/UShortSerializer; +HSPLkotlinx/serialization/internal/UShortSerializer;->()V +HSPLkotlinx/serialization/internal/UShortSerializer;->()V +HSPLkotlinx/serialization/internal/UShortSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +Lkotlinx/serialization/internal/UnitSerializer; +HSPLkotlinx/serialization/internal/UnitSerializer;->()V +HSPLkotlinx/serialization/internal/UnitSerializer;->()V +Lkotlinx/serialization/json/Json; +HSPLkotlinx/serialization/json/Json;->()V +HSPLkotlinx/serialization/json/Json;->(Lkotlinx/serialization/json/JsonConfiguration;Lkotlinx/serialization/modules/SerializersModule;)V +HSPLkotlinx/serialization/json/Json;->(Lkotlinx/serialization/json/JsonConfiguration;Lkotlinx/serialization/modules/SerializersModule;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlinx/serialization/json/Json;->decodeFromString(Lkotlinx/serialization/DeserializationStrategy;Ljava/lang/String;)Ljava/lang/Object; +HSPLkotlinx/serialization/json/Json;->encodeToString(Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)Ljava/lang/String; +HSPLkotlinx/serialization/json/Json;->getConfiguration()Lkotlinx/serialization/json/JsonConfiguration; +HSPLkotlinx/serialization/json/Json;->getSerializersModule()Lkotlinx/serialization/modules/SerializersModule; +Lkotlinx/serialization/json/Json$Default; +HSPLkotlinx/serialization/json/Json$Default;->()V +HSPLkotlinx/serialization/json/Json$Default;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlinx/serialization/json/JsonArray; +HSPLkotlinx/serialization/json/JsonArray;->()V +HSPLkotlinx/serialization/json/JsonArray;->(Ljava/util/List;)V +HSPLkotlinx/serialization/json/JsonArray;->getSize()I +HSPLkotlinx/serialization/json/JsonArray;->iterator()Ljava/util/Iterator; +HSPLkotlinx/serialization/json/JsonArray;->size()I +Lkotlinx/serialization/json/JsonArray$Companion; +HSPLkotlinx/serialization/json/JsonArray$Companion;->()V +HSPLkotlinx/serialization/json/JsonArray$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlinx/serialization/json/JsonArraySerializer; +HSPLkotlinx/serialization/json/JsonArraySerializer;->()V +HSPLkotlinx/serialization/json/JsonArraySerializer;->()V +HSPLkotlinx/serialization/json/JsonArraySerializer;->serialize(Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V +HSPLkotlinx/serialization/json/JsonArraySerializer;->serialize(Lkotlinx/serialization/encoding/Encoder;Lkotlinx/serialization/json/JsonArray;)V +Lkotlinx/serialization/json/JsonArraySerializer$JsonArrayDescriptor; +HSPLkotlinx/serialization/json/JsonArraySerializer$JsonArrayDescriptor;->()V +HSPLkotlinx/serialization/json/JsonArraySerializer$JsonArrayDescriptor;->()V +Lkotlinx/serialization/json/JsonBuilder; +HSPLkotlinx/serialization/json/JsonBuilder;->(Lkotlinx/serialization/json/Json;)V +HSPLkotlinx/serialization/json/JsonBuilder;->build$kotlinx_serialization_json()Lkotlinx/serialization/json/JsonConfiguration; +HSPLkotlinx/serialization/json/JsonBuilder;->getSerializersModule()Lkotlinx/serialization/modules/SerializersModule; +HSPLkotlinx/serialization/json/JsonBuilder;->setCoerceInputValues(Z)V +HSPLkotlinx/serialization/json/JsonBuilder;->setIgnoreUnknownKeys(Z)V +HSPLkotlinx/serialization/json/JsonBuilder;->setLenient(Z)V +HSPLkotlinx/serialization/json/JsonBuilder;->setPrettyPrint(Z)V +HSPLkotlinx/serialization/json/JsonBuilder;->setSerializersModule(Lkotlinx/serialization/modules/SerializersModule;)V +Lkotlinx/serialization/json/JsonConfiguration; +HSPLkotlinx/serialization/json/JsonConfiguration;->(ZZZZZZLjava/lang/String;ZZLjava/lang/String;ZZLkotlinx/serialization/json/JsonNamingStrategy;ZZ)V +HSPLkotlinx/serialization/json/JsonConfiguration;->(ZZZZZZLjava/lang/String;ZZLjava/lang/String;ZZLkotlinx/serialization/json/JsonNamingStrategy;ZZILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlinx/serialization/json/JsonConfiguration;->getAllowSpecialFloatingPointValues()Z +HSPLkotlinx/serialization/json/JsonConfiguration;->getAllowStructuredMapKeys()Z +HSPLkotlinx/serialization/json/JsonConfiguration;->getAllowTrailingComma()Z +HSPLkotlinx/serialization/json/JsonConfiguration;->getClassDiscriminator()Ljava/lang/String; +HSPLkotlinx/serialization/json/JsonConfiguration;->getCoerceInputValues()Z +HSPLkotlinx/serialization/json/JsonConfiguration;->getDecodeEnumsCaseInsensitive()Z +HSPLkotlinx/serialization/json/JsonConfiguration;->getEncodeDefaults()Z +HSPLkotlinx/serialization/json/JsonConfiguration;->getExplicitNulls()Z +HSPLkotlinx/serialization/json/JsonConfiguration;->getIgnoreUnknownKeys()Z +HSPLkotlinx/serialization/json/JsonConfiguration;->getNamingStrategy()Lkotlinx/serialization/json/JsonNamingStrategy; +HSPLkotlinx/serialization/json/JsonConfiguration;->getPrettyPrint()Z +HSPLkotlinx/serialization/json/JsonConfiguration;->getPrettyPrintIndent()Ljava/lang/String; +HSPLkotlinx/serialization/json/JsonConfiguration;->getUseAlternativeNames()Z +HSPLkotlinx/serialization/json/JsonConfiguration;->getUseArrayPolymorphism()Z +HSPLkotlinx/serialization/json/JsonConfiguration;->isLenient()Z +Lkotlinx/serialization/json/JsonDecoder; +Lkotlinx/serialization/json/JsonElement; +HSPLkotlinx/serialization/json/JsonElement;->()V +HSPLkotlinx/serialization/json/JsonElement;->()V +HSPLkotlinx/serialization/json/JsonElement;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlinx/serialization/json/JsonElement$Companion; +HSPLkotlinx/serialization/json/JsonElement$Companion;->()V +HSPLkotlinx/serialization/json/JsonElement$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlinx/serialization/json/JsonElement$Companion;->serializer()Lkotlinx/serialization/KSerializer; +Lkotlinx/serialization/json/JsonElementKt; +HSPLkotlinx/serialization/json/JsonElementKt;->()V +HSPLkotlinx/serialization/json/JsonElementKt;->JsonPrimitive(Ljava/lang/Boolean;)Lkotlinx/serialization/json/JsonPrimitive; +HSPLkotlinx/serialization/json/JsonElementKt;->getBooleanOrNull(Lkotlinx/serialization/json/JsonPrimitive;)Ljava/lang/Boolean; +HSPLkotlinx/serialization/json/JsonElementKt;->getJsonArray(Lkotlinx/serialization/json/JsonElement;)Lkotlinx/serialization/json/JsonArray; +HSPLkotlinx/serialization/json/JsonElementKt;->getJsonPrimitive(Lkotlinx/serialization/json/JsonElement;)Lkotlinx/serialization/json/JsonPrimitive; +Lkotlinx/serialization/json/JsonElementSerializer; +HSPLkotlinx/serialization/json/JsonElementSerializer;->()V +HSPLkotlinx/serialization/json/JsonElementSerializer;->()V +HSPLkotlinx/serialization/json/JsonElementSerializer;->deserialize(Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; +HSPLkotlinx/serialization/json/JsonElementSerializer;->deserialize(Lkotlinx/serialization/encoding/Decoder;)Lkotlinx/serialization/json/JsonElement; +HSPLkotlinx/serialization/json/JsonElementSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +HSPLkotlinx/serialization/json/JsonElementSerializer;->serialize(Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V +HSPLkotlinx/serialization/json/JsonElementSerializer;->serialize(Lkotlinx/serialization/encoding/Encoder;Lkotlinx/serialization/json/JsonElement;)V +Lkotlinx/serialization/json/JsonElementSerializer$descriptor$1; +HSPLkotlinx/serialization/json/JsonElementSerializer$descriptor$1;->()V +HSPLkotlinx/serialization/json/JsonElementSerializer$descriptor$1;->()V +HSPLkotlinx/serialization/json/JsonElementSerializer$descriptor$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/serialization/json/JsonElementSerializer$descriptor$1;->invoke(Lkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;)V +Lkotlinx/serialization/json/JsonElementSerializer$descriptor$1$1; +HSPLkotlinx/serialization/json/JsonElementSerializer$descriptor$1$1;->()V +HSPLkotlinx/serialization/json/JsonElementSerializer$descriptor$1$1;->()V +Lkotlinx/serialization/json/JsonElementSerializer$descriptor$1$2; +HSPLkotlinx/serialization/json/JsonElementSerializer$descriptor$1$2;->()V +HSPLkotlinx/serialization/json/JsonElementSerializer$descriptor$1$2;->()V +Lkotlinx/serialization/json/JsonElementSerializer$descriptor$1$3; +HSPLkotlinx/serialization/json/JsonElementSerializer$descriptor$1$3;->()V +HSPLkotlinx/serialization/json/JsonElementSerializer$descriptor$1$3;->()V +Lkotlinx/serialization/json/JsonElementSerializer$descriptor$1$4; +HSPLkotlinx/serialization/json/JsonElementSerializer$descriptor$1$4;->()V +HSPLkotlinx/serialization/json/JsonElementSerializer$descriptor$1$4;->()V +Lkotlinx/serialization/json/JsonElementSerializer$descriptor$1$5; +HSPLkotlinx/serialization/json/JsonElementSerializer$descriptor$1$5;->()V +HSPLkotlinx/serialization/json/JsonElementSerializer$descriptor$1$5;->()V +Lkotlinx/serialization/json/JsonElementSerializersKt; +HSPLkotlinx/serialization/json/JsonElementSerializersKt;->access$defer(Lkotlin/jvm/functions/Function0;)Lkotlinx/serialization/descriptors/SerialDescriptor; +HSPLkotlinx/serialization/json/JsonElementSerializersKt;->access$verify(Lkotlinx/serialization/encoding/Decoder;)V +HSPLkotlinx/serialization/json/JsonElementSerializersKt;->access$verify(Lkotlinx/serialization/encoding/Encoder;)V +HSPLkotlinx/serialization/json/JsonElementSerializersKt;->asJsonDecoder(Lkotlinx/serialization/encoding/Decoder;)Lkotlinx/serialization/json/JsonDecoder; +HSPLkotlinx/serialization/json/JsonElementSerializersKt;->asJsonEncoder(Lkotlinx/serialization/encoding/Encoder;)Lkotlinx/serialization/json/JsonEncoder; +HSPLkotlinx/serialization/json/JsonElementSerializersKt;->defer(Lkotlin/jvm/functions/Function0;)Lkotlinx/serialization/descriptors/SerialDescriptor; +HSPLkotlinx/serialization/json/JsonElementSerializersKt;->verify(Lkotlinx/serialization/encoding/Decoder;)V +HSPLkotlinx/serialization/json/JsonElementSerializersKt;->verify(Lkotlinx/serialization/encoding/Encoder;)V +Lkotlinx/serialization/json/JsonElementSerializersKt$defer$1; +HSPLkotlinx/serialization/json/JsonElementSerializersKt$defer$1;->(Lkotlin/jvm/functions/Function0;)V +Lkotlinx/serialization/json/JsonEncoder; +Lkotlinx/serialization/json/JsonImpl; +HSPLkotlinx/serialization/json/JsonImpl;->(Lkotlinx/serialization/json/JsonConfiguration;Lkotlinx/serialization/modules/SerializersModule;)V +HSPLkotlinx/serialization/json/JsonImpl;->validateConfiguration()V +Lkotlinx/serialization/json/JsonKt; +HSPLkotlinx/serialization/json/JsonKt;->Json$default(Lkotlinx/serialization/json/Json;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lkotlinx/serialization/json/Json; +HSPLkotlinx/serialization/json/JsonKt;->Json(Lkotlinx/serialization/json/Json;Lkotlin/jvm/functions/Function1;)Lkotlinx/serialization/json/Json; +Lkotlinx/serialization/json/JsonLiteral; +HSPLkotlinx/serialization/json/JsonLiteral;->(Ljava/lang/Object;ZLkotlinx/serialization/descriptors/SerialDescriptor;)V +HSPLkotlinx/serialization/json/JsonLiteral;->(Ljava/lang/Object;ZLkotlinx/serialization/descriptors/SerialDescriptor;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlinx/serialization/json/JsonLiteral;->getCoerceToInlineType$kotlinx_serialization_json()Lkotlinx/serialization/descriptors/SerialDescriptor; +HSPLkotlinx/serialization/json/JsonLiteral;->getContent()Ljava/lang/String; +HSPLkotlinx/serialization/json/JsonLiteral;->isString()Z +Lkotlinx/serialization/json/JsonLiteralSerializer; +HSPLkotlinx/serialization/json/JsonLiteralSerializer;->()V +HSPLkotlinx/serialization/json/JsonLiteralSerializer;->()V +HSPLkotlinx/serialization/json/JsonLiteralSerializer;->serialize(Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V +HSPLkotlinx/serialization/json/JsonLiteralSerializer;->serialize(Lkotlinx/serialization/encoding/Encoder;Lkotlinx/serialization/json/JsonLiteral;)V +Lkotlinx/serialization/json/JsonNames; +Lkotlinx/serialization/json/JsonNamingStrategy; +Lkotlinx/serialization/json/JsonNull; +HSPLkotlinx/serialization/json/JsonNull;->()V +HSPLkotlinx/serialization/json/JsonNull;->()V +Lkotlinx/serialization/json/JsonNull$1; +HSPLkotlinx/serialization/json/JsonNull$1;->()V +HSPLkotlinx/serialization/json/JsonNull$1;->()V +Lkotlinx/serialization/json/JsonNullSerializer; +HSPLkotlinx/serialization/json/JsonNullSerializer;->()V +HSPLkotlinx/serialization/json/JsonNullSerializer;->()V +HSPLkotlinx/serialization/json/JsonNullSerializer;->serialize(Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V +HSPLkotlinx/serialization/json/JsonNullSerializer;->serialize(Lkotlinx/serialization/encoding/Encoder;Lkotlinx/serialization/json/JsonNull;)V +Lkotlinx/serialization/json/JsonObject; +HSPLkotlinx/serialization/json/JsonObject;->()V +HSPLkotlinx/serialization/json/JsonObject;->(Ljava/util/Map;)V +HSPLkotlinx/serialization/json/JsonObject;->entrySet()Ljava/util/Set; +HSPLkotlinx/serialization/json/JsonObject;->getEntries()Ljava/util/Set; +HSPLkotlinx/serialization/json/JsonObject;->getSize()I +HSPLkotlinx/serialization/json/JsonObject;->size()I +Lkotlinx/serialization/json/JsonObject$Companion; +HSPLkotlinx/serialization/json/JsonObject$Companion;->()V +HSPLkotlinx/serialization/json/JsonObject$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlinx/serialization/json/JsonObject$Companion;->serializer()Lkotlinx/serialization/KSerializer; +Lkotlinx/serialization/json/JsonObjectSerializer; +HSPLkotlinx/serialization/json/JsonObjectSerializer;->()V +HSPLkotlinx/serialization/json/JsonObjectSerializer;->()V +HSPLkotlinx/serialization/json/JsonObjectSerializer;->deserialize(Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; +HSPLkotlinx/serialization/json/JsonObjectSerializer;->deserialize(Lkotlinx/serialization/encoding/Decoder;)Lkotlinx/serialization/json/JsonObject; +HSPLkotlinx/serialization/json/JsonObjectSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +HSPLkotlinx/serialization/json/JsonObjectSerializer;->serialize(Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V +HSPLkotlinx/serialization/json/JsonObjectSerializer;->serialize(Lkotlinx/serialization/encoding/Encoder;Lkotlinx/serialization/json/JsonObject;)V +Lkotlinx/serialization/json/JsonObjectSerializer$JsonObjectDescriptor; +HSPLkotlinx/serialization/json/JsonObjectSerializer$JsonObjectDescriptor;->()V +HSPLkotlinx/serialization/json/JsonObjectSerializer$JsonObjectDescriptor;->()V +Lkotlinx/serialization/json/JsonPrimitive; +HSPLkotlinx/serialization/json/JsonPrimitive;->()V +HSPLkotlinx/serialization/json/JsonPrimitive;->()V +HSPLkotlinx/serialization/json/JsonPrimitive;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlinx/serialization/json/JsonPrimitive$Companion; +HSPLkotlinx/serialization/json/JsonPrimitive$Companion;->()V +HSPLkotlinx/serialization/json/JsonPrimitive$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlinx/serialization/json/JsonPrimitiveSerializer; +HSPLkotlinx/serialization/json/JsonPrimitiveSerializer;->()V +HSPLkotlinx/serialization/json/JsonPrimitiveSerializer;->()V +HSPLkotlinx/serialization/json/JsonPrimitiveSerializer;->serialize(Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V +HSPLkotlinx/serialization/json/JsonPrimitiveSerializer;->serialize(Lkotlinx/serialization/encoding/Encoder;Lkotlinx/serialization/json/JsonPrimitive;)V +Lkotlinx/serialization/json/internal/AbstractJsonLexer; +HSPLkotlinx/serialization/json/internal/AbstractJsonLexer;->()V +HSPLkotlinx/serialization/json/internal/AbstractJsonLexer;->consumeNextToken(B)B +HSPLkotlinx/serialization/json/internal/AbstractJsonLexer;->consumeString()Ljava/lang/String; +HSPLkotlinx/serialization/json/internal/AbstractJsonLexer;->consumeStringLenient()Ljava/lang/String; +HSPLkotlinx/serialization/json/internal/AbstractJsonLexer;->consumeStringLenientNotNull()Ljava/lang/String; +HSPLkotlinx/serialization/json/internal/AbstractJsonLexer;->expectEof()V +PLkotlinx/serialization/json/internal/AbstractJsonLexer;->fail$default(Lkotlinx/serialization/json/internal/AbstractJsonLexer;Ljava/lang/String;ILjava/lang/String;ILjava/lang/Object;)Ljava/lang/Void; +PLkotlinx/serialization/json/internal/AbstractJsonLexer;->fail$kotlinx_serialization_json$default(Lkotlinx/serialization/json/internal/AbstractJsonLexer;BZILjava/lang/Object;)Ljava/lang/Void; +PLkotlinx/serialization/json/internal/AbstractJsonLexer;->fail$kotlinx_serialization_json(BZ)Ljava/lang/Void; +PLkotlinx/serialization/json/internal/AbstractJsonLexer;->fail(Ljava/lang/String;ILjava/lang/String;)Ljava/lang/Void; +HSPLkotlinx/serialization/json/internal/AbstractJsonLexer;->isValidValueStart(C)Z +HSPLkotlinx/serialization/json/internal/AbstractJsonLexer;->peekNextToken()B +HSPLkotlinx/serialization/json/internal/AbstractJsonLexer;->substring(II)Ljava/lang/String; +PLkotlinx/serialization/json/internal/AbstractJsonLexer;->unexpectedToken(C)V +Lkotlinx/serialization/json/internal/AbstractJsonLexerKt; +HSPLkotlinx/serialization/json/internal/AbstractJsonLexerKt;->charToTokenClass(C)B +PLkotlinx/serialization/json/internal/AbstractJsonLexerKt;->tokenDescription(B)Ljava/lang/String; +Lkotlinx/serialization/json/internal/ArrayPoolsKt; +HSPLkotlinx/serialization/json/internal/ArrayPoolsKt;->()V +HSPLkotlinx/serialization/json/internal/ArrayPoolsKt;->access$getMAX_CHARS_IN_POOL$p()I +Lkotlinx/serialization/json/internal/CharArrayPool; +HSPLkotlinx/serialization/json/internal/CharArrayPool;->()V +HSPLkotlinx/serialization/json/internal/CharArrayPool;->()V +HSPLkotlinx/serialization/json/internal/CharArrayPool;->release([C)V +HSPLkotlinx/serialization/json/internal/CharArrayPool;->take()[C +Lkotlinx/serialization/json/internal/CharArrayPoolBase; +HSPLkotlinx/serialization/json/internal/CharArrayPoolBase;->()V +HSPLkotlinx/serialization/json/internal/CharArrayPoolBase;->releaseImpl([C)V +HSPLkotlinx/serialization/json/internal/CharArrayPoolBase;->take(I)[C +Lkotlinx/serialization/json/internal/CharMappings; +HSPLkotlinx/serialization/json/internal/CharMappings;->()V +HSPLkotlinx/serialization/json/internal/CharMappings;->()V +HSPLkotlinx/serialization/json/internal/CharMappings;->initC2ESC(CC)V +HSPLkotlinx/serialization/json/internal/CharMappings;->initC2ESC(IC)V +HSPLkotlinx/serialization/json/internal/CharMappings;->initC2TC(CB)V +HSPLkotlinx/serialization/json/internal/CharMappings;->initC2TC(IB)V +HSPLkotlinx/serialization/json/internal/CharMappings;->initCharToToken()V +HSPLkotlinx/serialization/json/internal/CharMappings;->initEscape()V +Lkotlinx/serialization/json/internal/Composer; +HSPLkotlinx/serialization/json/internal/Composer;->(Lkotlinx/serialization/json/internal/InternalJsonWriter;)V +HSPLkotlinx/serialization/json/internal/Composer;->getWritingFirst()Z +HSPLkotlinx/serialization/json/internal/Composer;->indent()V +HSPLkotlinx/serialization/json/internal/Composer;->nextItem()V +HSPLkotlinx/serialization/json/internal/Composer;->print(C)V +HSPLkotlinx/serialization/json/internal/Composer;->print(Ljava/lang/String;)V +HSPLkotlinx/serialization/json/internal/Composer;->print(Z)V +HSPLkotlinx/serialization/json/internal/Composer;->printQuoted(Ljava/lang/String;)V +HSPLkotlinx/serialization/json/internal/Composer;->space()V +HSPLkotlinx/serialization/json/internal/Composer;->unIndent()V +Lkotlinx/serialization/json/internal/ComposersKt; +HSPLkotlinx/serialization/json/internal/ComposersKt;->Composer(Lkotlinx/serialization/json/internal/InternalJsonWriter;Lkotlinx/serialization/json/Json;)Lkotlinx/serialization/json/internal/Composer; +Lkotlinx/serialization/json/internal/CreateMapForCacheKt; +HSPLkotlinx/serialization/json/internal/CreateMapForCacheKt;->createMapForCache(I)Ljava/util/Map; +Lkotlinx/serialization/json/internal/DescriptorSchemaCache; +HSPLkotlinx/serialization/json/internal/DescriptorSchemaCache;->()V +Lkotlinx/serialization/json/internal/InternalJsonWriter; +Lkotlinx/serialization/json/internal/JsonDecodingException; +PLkotlinx/serialization/json/internal/JsonDecodingException;->(Ljava/lang/String;)V +Lkotlinx/serialization/json/internal/JsonElementMarker; +Lkotlinx/serialization/json/internal/JsonException; +PLkotlinx/serialization/json/internal/JsonException;->(Ljava/lang/String;)V +PLkotlinx/serialization/json/internal/JsonExceptionsKt;->JsonDecodingException(ILjava/lang/String;)Lkotlinx/serialization/json/internal/JsonDecodingException; +PLkotlinx/serialization/json/internal/JsonExceptionsKt;->JsonDecodingException(ILjava/lang/String;Ljava/lang/CharSequence;)Lkotlinx/serialization/json/internal/JsonDecodingException; +PLkotlinx/serialization/json/internal/JsonExceptionsKt;->minify(Ljava/lang/CharSequence;I)Ljava/lang/CharSequence; +Lkotlinx/serialization/json/internal/JsonPath; +HSPLkotlinx/serialization/json/internal/JsonPath;->()V +PLkotlinx/serialization/json/internal/JsonPath;->getPath()Ljava/lang/String; +HSPLkotlinx/serialization/json/internal/JsonPath;->popDescriptor()V +HSPLkotlinx/serialization/json/internal/JsonPath;->pushDescriptor(Lkotlinx/serialization/descriptors/SerialDescriptor;)V +HSPLkotlinx/serialization/json/internal/JsonPath;->resetCurrentMapKey()V +HSPLkotlinx/serialization/json/internal/JsonPath;->updateCurrentMapKey(Ljava/lang/Object;)V +Lkotlinx/serialization/json/internal/JsonStreamsKt; +HSPLkotlinx/serialization/json/internal/JsonStreamsKt;->encodeByWriter(Lkotlinx/serialization/json/Json;Lkotlinx/serialization/json/internal/InternalJsonWriter;Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)V +Lkotlinx/serialization/json/internal/JsonToStringWriter; +HSPLkotlinx/serialization/json/internal/JsonToStringWriter;->()V +HSPLkotlinx/serialization/json/internal/JsonToStringWriter;->ensureAdditionalCapacity(I)V +HSPLkotlinx/serialization/json/internal/JsonToStringWriter;->ensureTotalCapacity(II)I +HSPLkotlinx/serialization/json/internal/JsonToStringWriter;->release()V +HSPLkotlinx/serialization/json/internal/JsonToStringWriter;->toString()Ljava/lang/String; +HSPLkotlinx/serialization/json/internal/JsonToStringWriter;->write(Ljava/lang/String;)V +HSPLkotlinx/serialization/json/internal/JsonToStringWriter;->writeChar(C)V +HSPLkotlinx/serialization/json/internal/JsonToStringWriter;->writeQuoted(Ljava/lang/String;)V +Lkotlinx/serialization/json/internal/JsonTreeReader; +HSPLkotlinx/serialization/json/internal/JsonTreeReader;->(Lkotlinx/serialization/json/JsonConfiguration;Lkotlinx/serialization/json/internal/AbstractJsonLexer;)V +HSPLkotlinx/serialization/json/internal/JsonTreeReader;->read()Lkotlinx/serialization/json/JsonElement; +HSPLkotlinx/serialization/json/internal/JsonTreeReader;->readArray()Lkotlinx/serialization/json/JsonElement; +HSPLkotlinx/serialization/json/internal/JsonTreeReader;->readValue(Z)Lkotlinx/serialization/json/JsonPrimitive; +Lkotlinx/serialization/json/internal/PolymorphismValidator; +HSPLkotlinx/serialization/json/internal/PolymorphismValidator;->(ZLjava/lang/String;)V +HSPLkotlinx/serialization/json/internal/PolymorphismValidator;->checkDiscriminatorCollisions(Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlin/reflect/KClass;)V +HSPLkotlinx/serialization/json/internal/PolymorphismValidator;->checkKind(Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlin/reflect/KClass;)V +HSPLkotlinx/serialization/json/internal/PolymorphismValidator;->polymorphic(Lkotlin/reflect/KClass;Lkotlin/reflect/KClass;Lkotlinx/serialization/KSerializer;)V +HSPLkotlinx/serialization/json/internal/PolymorphismValidator;->polymorphicDefaultDeserializer(Lkotlin/reflect/KClass;Lkotlin/jvm/functions/Function1;)V +Lkotlinx/serialization/json/internal/StreamingJsonDecoder; +HSPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->(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 +HSPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->beginStructure(Lkotlinx/serialization/descriptors/SerialDescriptor;)Lkotlinx/serialization/encoding/CompositeDecoder; +HSPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->checkLeadingComma()V +HSPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->decodeElementIndex(Lkotlinx/serialization/descriptors/SerialDescriptor;)I +HSPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->decodeJsonElement()Lkotlinx/serialization/json/JsonElement; +HSPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->decodeMapIndex()I +HSPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->decodeSerializableElement(Lkotlinx/serialization/descriptors/SerialDescriptor;ILkotlinx/serialization/DeserializationStrategy;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->decodeSerializableValue(Lkotlinx/serialization/DeserializationStrategy;)Ljava/lang/Object; +HSPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->decodeString()Ljava/lang/String; +HSPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->endStructure(Lkotlinx/serialization/descriptors/SerialDescriptor;)V +Lkotlinx/serialization/json/internal/StreamingJsonDecoder$DiscriminatorHolder; +Lkotlinx/serialization/json/internal/StreamingJsonDecoder$WhenMappings; +HSPLkotlinx/serialization/json/internal/StreamingJsonDecoder$WhenMappings;->()V +Lkotlinx/serialization/json/internal/StreamingJsonEncoder; +HSPLkotlinx/serialization/json/internal/StreamingJsonEncoder;->(Lkotlinx/serialization/json/internal/Composer;Lkotlinx/serialization/json/Json;Lkotlinx/serialization/json/internal/WriteMode;[Lkotlinx/serialization/json/JsonEncoder;)V +HSPLkotlinx/serialization/json/internal/StreamingJsonEncoder;->(Lkotlinx/serialization/json/internal/InternalJsonWriter;Lkotlinx/serialization/json/Json;Lkotlinx/serialization/json/internal/WriteMode;[Lkotlinx/serialization/json/JsonEncoder;)V +HSPLkotlinx/serialization/json/internal/StreamingJsonEncoder;->beginStructure(Lkotlinx/serialization/descriptors/SerialDescriptor;)Lkotlinx/serialization/encoding/CompositeEncoder; +HSPLkotlinx/serialization/json/internal/StreamingJsonEncoder;->encodeBoolean(Z)V +HSPLkotlinx/serialization/json/internal/StreamingJsonEncoder;->encodeElement(Lkotlinx/serialization/descriptors/SerialDescriptor;I)Z +HSPLkotlinx/serialization/json/internal/StreamingJsonEncoder;->encodeNull()V +HSPLkotlinx/serialization/json/internal/StreamingJsonEncoder;->encodeSerializableValue(Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)V +HSPLkotlinx/serialization/json/internal/StreamingJsonEncoder;->encodeString(Ljava/lang/String;)V +HSPLkotlinx/serialization/json/internal/StreamingJsonEncoder;->endStructure(Lkotlinx/serialization/descriptors/SerialDescriptor;)V +HSPLkotlinx/serialization/json/internal/StreamingJsonEncoder;->getJson()Lkotlinx/serialization/json/Json; +Lkotlinx/serialization/json/internal/StreamingJsonEncoder$WhenMappings; +HSPLkotlinx/serialization/json/internal/StreamingJsonEncoder$WhenMappings;->()V +Lkotlinx/serialization/json/internal/StringJsonLexer; +HSPLkotlinx/serialization/json/internal/StringJsonLexer;->(Ljava/lang/String;)V +HSPLkotlinx/serialization/json/internal/StringJsonLexer;->canConsumeValue()Z +HSPLkotlinx/serialization/json/internal/StringJsonLexer;->consumeKeyString()Ljava/lang/String; +HSPLkotlinx/serialization/json/internal/StringJsonLexer;->consumeNextToken()B +HSPLkotlinx/serialization/json/internal/StringJsonLexer;->consumeNextToken(C)V +HSPLkotlinx/serialization/json/internal/StringJsonLexer;->getSource()Ljava/lang/CharSequence; +HSPLkotlinx/serialization/json/internal/StringJsonLexer;->getSource()Ljava/lang/String; +HSPLkotlinx/serialization/json/internal/StringJsonLexer;->prefetchOrEof(I)I +HSPLkotlinx/serialization/json/internal/StringJsonLexer;->skipWhitespaces()I +HSPLkotlinx/serialization/json/internal/StringJsonLexer;->tryConsumeComma()Z +Lkotlinx/serialization/json/internal/StringOpsKt; +HSPLkotlinx/serialization/json/internal/StringOpsKt;->()V +HSPLkotlinx/serialization/json/internal/StringOpsKt;->getESCAPE_MARKERS()[B +HSPLkotlinx/serialization/json/internal/StringOpsKt;->toBooleanStrictOrNull(Ljava/lang/String;)Ljava/lang/Boolean; +HSPLkotlinx/serialization/json/internal/StringOpsKt;->toHexChar(I)C +Lkotlinx/serialization/json/internal/WriteMode; +HSPLkotlinx/serialization/json/internal/WriteMode;->$values()[Lkotlinx/serialization/json/internal/WriteMode; +HSPLkotlinx/serialization/json/internal/WriteMode;->()V +HSPLkotlinx/serialization/json/internal/WriteMode;->(Ljava/lang/String;ICC)V +HSPLkotlinx/serialization/json/internal/WriteMode;->getEntries()Lkotlin/enums/EnumEntries; +HSPLkotlinx/serialization/json/internal/WriteMode;->values()[Lkotlinx/serialization/json/internal/WriteMode; +Lkotlinx/serialization/json/internal/WriteModeKt; +HSPLkotlinx/serialization/json/internal/WriteModeKt;->carrierDescriptor(Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlinx/serialization/modules/SerializersModule;)Lkotlinx/serialization/descriptors/SerialDescriptor; +HSPLkotlinx/serialization/json/internal/WriteModeKt;->switchMode(Lkotlinx/serialization/json/Json;Lkotlinx/serialization/descriptors/SerialDescriptor;)Lkotlinx/serialization/json/internal/WriteMode; +Lkotlinx/serialization/modules/PolymorphicModuleBuilder; +HSPLkotlinx/serialization/modules/PolymorphicModuleBuilder;->(Lkotlin/reflect/KClass;Lkotlinx/serialization/KSerializer;)V +HSPLkotlinx/serialization/modules/PolymorphicModuleBuilder;->buildTo(Lkotlinx/serialization/modules/SerializersModuleBuilder;)V +HSPLkotlinx/serialization/modules/PolymorphicModuleBuilder;->defaultDeserializer(Lkotlin/jvm/functions/Function1;)V +HSPLkotlinx/serialization/modules/PolymorphicModuleBuilder;->subclass(Lkotlin/reflect/KClass;Lkotlinx/serialization/KSerializer;)V +Lkotlinx/serialization/modules/SerialModuleImpl; +HSPLkotlinx/serialization/modules/SerialModuleImpl;->(Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;)V +HSPLkotlinx/serialization/modules/SerialModuleImpl;->dumpTo(Lkotlinx/serialization/modules/SerializersModuleCollector;)V +Lkotlinx/serialization/modules/SerializersModule; +HSPLkotlinx/serialization/modules/SerializersModule;->()V +HSPLkotlinx/serialization/modules/SerializersModule;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlinx/serialization/modules/SerializersModuleBuilder; +HSPLkotlinx/serialization/modules/SerializersModuleBuilder;->()V +HSPLkotlinx/serialization/modules/SerializersModuleBuilder;->build()Lkotlinx/serialization/modules/SerializersModule; +HSPLkotlinx/serialization/modules/SerializersModuleBuilder;->registerDefaultPolymorphicDeserializer(Lkotlin/reflect/KClass;Lkotlin/jvm/functions/Function1;Z)V +HSPLkotlinx/serialization/modules/SerializersModuleBuilder;->registerPolymorphicSerializer$default(Lkotlinx/serialization/modules/SerializersModuleBuilder;Lkotlin/reflect/KClass;Lkotlin/reflect/KClass;Lkotlinx/serialization/KSerializer;ZILjava/lang/Object;)V +HSPLkotlinx/serialization/modules/SerializersModuleBuilder;->registerPolymorphicSerializer(Lkotlin/reflect/KClass;Lkotlin/reflect/KClass;Lkotlinx/serialization/KSerializer;Z)V +Lkotlinx/serialization/modules/SerializersModuleBuildersKt; +HSPLkotlinx/serialization/modules/SerializersModuleBuildersKt;->EmptySerializersModule()Lkotlinx/serialization/modules/SerializersModule; +Lkotlinx/serialization/modules/SerializersModuleCollector; +Lkotlinx/serialization/modules/SerializersModuleKt; +HSPLkotlinx/serialization/modules/SerializersModuleKt;->()V +HSPLkotlinx/serialization/modules/SerializersModuleKt;->getEmptySerializersModule()Lkotlinx/serialization/modules/SerializersModule; +Lnet/zetetic/database/DatabaseErrorHandler; +Lnet/zetetic/database/DatabaseUtils; +HSPLnet/zetetic/database/DatabaseUtils;->()V +HSPLnet/zetetic/database/DatabaseUtils;->cursorPickFillWindowStartPosition(II)I +HSPLnet/zetetic/database/DatabaseUtils;->getSqlStatementType(Ljava/lang/String;)I +HSPLnet/zetetic/database/DatabaseUtils;->longForQuery(Lnet/zetetic/database/sqlcipher/SQLiteDatabase;Ljava/lang/String;[Ljava/lang/String;)J +HSPLnet/zetetic/database/DatabaseUtils;->longForQuery(Lnet/zetetic/database/sqlcipher/SQLiteStatement;[Ljava/lang/String;)J +Lnet/zetetic/database/DefaultDatabaseErrorHandler; +HSPLnet/zetetic/database/DefaultDatabaseErrorHandler;->()V +Lnet/zetetic/database/sqlcipher/CloseGuard; +HSPLnet/zetetic/database/sqlcipher/CloseGuard;->()V +HSPLnet/zetetic/database/sqlcipher/CloseGuard;->()V +HSPLnet/zetetic/database/sqlcipher/CloseGuard;->get()Lnet/zetetic/database/sqlcipher/CloseGuard; +HSPLnet/zetetic/database/sqlcipher/CloseGuard;->open(Ljava/lang/String;)V +Lnet/zetetic/database/sqlcipher/CloseGuard$DefaultReporter; +HSPLnet/zetetic/database/sqlcipher/CloseGuard$DefaultReporter;->()V +HSPLnet/zetetic/database/sqlcipher/CloseGuard$DefaultReporter;->(Lnet/zetetic/database/sqlcipher/CloseGuard$1;)V +Lnet/zetetic/database/sqlcipher/CloseGuard$Reporter; +Lnet/zetetic/database/sqlcipher/SQLiteClosable; +HSPLnet/zetetic/database/sqlcipher/SQLiteClosable;->()V +HSPLnet/zetetic/database/sqlcipher/SQLiteClosable;->acquireReference()V +HSPLnet/zetetic/database/sqlcipher/SQLiteClosable;->close()V +HSPLnet/zetetic/database/sqlcipher/SQLiteClosable;->releaseReference()V +Lnet/zetetic/database/sqlcipher/SQLiteConnection; +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->()V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->(Lnet/zetetic/database/sqlcipher/SQLiteConnectionPool;Lnet/zetetic/database/sqlcipher/SQLiteDatabaseConfiguration;IZ)V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->acquirePreparedStatement(Ljava/lang/String;)Lnet/zetetic/database/sqlcipher/SQLiteConnection$PreparedStatement; +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->applyBlockGuardPolicy(Lnet/zetetic/database/sqlcipher/SQLiteConnection$PreparedStatement;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->attachCancellationSignal(Landroid/os/CancellationSignal;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->bindArguments(Lnet/zetetic/database/sqlcipher/SQLiteConnection$PreparedStatement;[Ljava/lang/Object;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->canonicalizeSyncMode(Ljava/lang/String;)Ljava/lang/String; +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->detachCancellationSignal(Landroid/os/CancellationSignal;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->execute(Ljava/lang/String;[Ljava/lang/Object;Landroid/os/CancellationSignal;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->executeForChangedRowCount(Ljava/lang/String;[Ljava/lang/Object;Landroid/os/CancellationSignal;)I +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->executeForCursorWindow(Ljava/lang/String;[Ljava/lang/Object;Landroid/database/CursorWindow;IIZLandroid/os/CancellationSignal;)I +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->executeForLong(Ljava/lang/String;[Ljava/lang/Object;Landroid/os/CancellationSignal;)J +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->executeForString(Ljava/lang/String;[Ljava/lang/Object;Landroid/os/CancellationSignal;)Ljava/lang/String; +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->finalizePreparedStatement(Lnet/zetetic/database/sqlcipher/SQLiteConnection$PreparedStatement;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->hasCodec()Z +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->isCacheable(I)Z +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->isPrimaryConnection()Z +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->obtainPreparedStatement(Ljava/lang/String;JIIZ)Lnet/zetetic/database/sqlcipher/SQLiteConnection$PreparedStatement; +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->open()V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->open(Lnet/zetetic/database/sqlcipher/SQLiteConnectionPool;Lnet/zetetic/database/sqlcipher/SQLiteDatabaseConfiguration;IZ)Lnet/zetetic/database/sqlcipher/SQLiteConnection; +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->prepare(Ljava/lang/String;Lnet/zetetic/database/sqlcipher/SQLiteStatementInfo;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->reconfigure(Lnet/zetetic/database/sqlcipher/SQLiteDatabaseConfiguration;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->recyclePreparedStatement(Lnet/zetetic/database/sqlcipher/SQLiteConnection$PreparedStatement;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->releasePreparedStatement(Lnet/zetetic/database/sqlcipher/SQLiteConnection$PreparedStatement;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->setAutoCheckpointInterval()V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->setForeignKeyModeFromConfiguration()V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->setJournalMode(Ljava/lang/String;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->setJournalSizeLimit()V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->setOnlyAllowReadOnlyOperations(Z)V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->setPageSize()V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->setSyncMode(Ljava/lang/String;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->setWalModeFromConfiguration()V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->throwIfStatementForbidden(Lnet/zetetic/database/sqlcipher/SQLiteConnection$PreparedStatement;)V +Lnet/zetetic/database/sqlcipher/SQLiteConnection$Operation; +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection$Operation;->()V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection$Operation;->(Lnet/zetetic/database/sqlcipher/SQLiteConnection$1;)V +Lnet/zetetic/database/sqlcipher/SQLiteConnection$OperationLog; +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection$OperationLog;->()V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection$OperationLog;->(Lnet/zetetic/database/sqlcipher/SQLiteConnection$1;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection$OperationLog;->beginOperation(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)I +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection$OperationLog;->endOperation(I)V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection$OperationLog;->endOperationDeferLog(I)Z +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection$OperationLog;->endOperationDeferLogLocked(I)Z +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection$OperationLog;->getOperationLocked(I)Lnet/zetetic/database/sqlcipher/SQLiteConnection$Operation; +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection$OperationLog;->newOperationCookieLocked(I)I +Lnet/zetetic/database/sqlcipher/SQLiteConnection$PreparedStatement; +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection$PreparedStatement;->()V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection$PreparedStatement;->(Lnet/zetetic/database/sqlcipher/SQLiteConnection$1;)V +Lnet/zetetic/database/sqlcipher/SQLiteConnection$PreparedStatementCache; +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection$PreparedStatementCache;->(Lnet/zetetic/database/sqlcipher/SQLiteConnection;I)V +Lnet/zetetic/database/sqlcipher/SQLiteConnectionPool; +HSPLnet/zetetic/database/sqlcipher/SQLiteConnectionPool;->()V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnectionPool;->(Lnet/zetetic/database/sqlcipher/SQLiteDatabaseConfiguration;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnectionPool;->acquireConnection(Ljava/lang/String;ILandroid/os/CancellationSignal;)Lnet/zetetic/database/sqlcipher/SQLiteConnection; +HSPLnet/zetetic/database/sqlcipher/SQLiteConnectionPool;->closeExcessConnectionsAndLogExceptionsLocked()V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnectionPool;->finishAcquireConnectionLocked(Lnet/zetetic/database/sqlcipher/SQLiteConnection;I)V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnectionPool;->getPriority(I)I +HSPLnet/zetetic/database/sqlcipher/SQLiteConnectionPool;->markAcquiredConnectionsLocked(Lnet/zetetic/database/sqlcipher/SQLiteConnectionPool$AcquiredConnectionStatus;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnectionPool;->obtainConnectionWaiterLocked(Ljava/lang/Thread;JIZLjava/lang/String;I)Lnet/zetetic/database/sqlcipher/SQLiteConnectionPool$ConnectionWaiter; +HSPLnet/zetetic/database/sqlcipher/SQLiteConnectionPool;->open()V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnectionPool;->open(Lnet/zetetic/database/sqlcipher/SQLiteDatabaseConfiguration;)Lnet/zetetic/database/sqlcipher/SQLiteConnectionPool; +HSPLnet/zetetic/database/sqlcipher/SQLiteConnectionPool;->openConnectionLocked(Lnet/zetetic/database/sqlcipher/SQLiteDatabaseConfiguration;Z)Lnet/zetetic/database/sqlcipher/SQLiteConnection; +HSPLnet/zetetic/database/sqlcipher/SQLiteConnectionPool;->reconfigure(Lnet/zetetic/database/sqlcipher/SQLiteDatabaseConfiguration;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnectionPool;->reconfigureAllConnectionsLocked()V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnectionPool;->recycleConnectionLocked(Lnet/zetetic/database/sqlcipher/SQLiteConnection;Lnet/zetetic/database/sqlcipher/SQLiteConnectionPool$AcquiredConnectionStatus;)Z +HSPLnet/zetetic/database/sqlcipher/SQLiteConnectionPool;->recycleConnectionWaiterLocked(Lnet/zetetic/database/sqlcipher/SQLiteConnectionPool$ConnectionWaiter;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnectionPool;->releaseConnection(Lnet/zetetic/database/sqlcipher/SQLiteConnection;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnectionPool;->setMaxConnectionPoolSizeLocked()V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnectionPool;->throwIfClosedLocked()V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnectionPool;->tryAcquireNonPrimaryConnectionLocked(Ljava/lang/String;I)Lnet/zetetic/database/sqlcipher/SQLiteConnection; +HSPLnet/zetetic/database/sqlcipher/SQLiteConnectionPool;->tryAcquirePrimaryConnectionLocked(I)Lnet/zetetic/database/sqlcipher/SQLiteConnection; +HSPLnet/zetetic/database/sqlcipher/SQLiteConnectionPool;->waitForConnection(Ljava/lang/String;ILandroid/os/CancellationSignal;)Lnet/zetetic/database/sqlcipher/SQLiteConnection; +HSPLnet/zetetic/database/sqlcipher/SQLiteConnectionPool;->wakeConnectionWaitersLocked()V +Lnet/zetetic/database/sqlcipher/SQLiteConnectionPool$AcquiredConnectionStatus; +HSPLnet/zetetic/database/sqlcipher/SQLiteConnectionPool$AcquiredConnectionStatus;->$values()[Lnet/zetetic/database/sqlcipher/SQLiteConnectionPool$AcquiredConnectionStatus; +HSPLnet/zetetic/database/sqlcipher/SQLiteConnectionPool$AcquiredConnectionStatus;->()V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnectionPool$AcquiredConnectionStatus;->(Ljava/lang/String;I)V +Lnet/zetetic/database/sqlcipher/SQLiteConnectionPool$ConnectionWaiter; +HSPLnet/zetetic/database/sqlcipher/SQLiteConnectionPool$ConnectionWaiter;->()V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnectionPool$ConnectionWaiter;->(Lnet/zetetic/database/sqlcipher/SQLiteConnectionPool$1;)V +Lnet/zetetic/database/sqlcipher/SQLiteCursor; +HSPLnet/zetetic/database/sqlcipher/SQLiteCursor;->()V +HSPLnet/zetetic/database/sqlcipher/SQLiteCursor;->(Lnet/zetetic/database/sqlcipher/SQLiteCursorDriver;Ljava/lang/String;Lnet/zetetic/database/sqlcipher/SQLiteQuery;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteCursor;->awc_clearOrCreateWindow(Ljava/lang/String;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteCursor;->close()V +HSPLnet/zetetic/database/sqlcipher/SQLiteCursor;->fillWindow(I)V +PLnet/zetetic/database/sqlcipher/SQLiteCursor;->finalize()V +HSPLnet/zetetic/database/sqlcipher/SQLiteCursor;->getColumnIndex(Ljava/lang/String;)I +HSPLnet/zetetic/database/sqlcipher/SQLiteCursor;->getCount()I +HSPLnet/zetetic/database/sqlcipher/SQLiteCursor;->getDatabase()Lnet/zetetic/database/sqlcipher/SQLiteDatabase; +HSPLnet/zetetic/database/sqlcipher/SQLiteCursor;->onMove(II)Z +HSPLnet/zetetic/database/sqlcipher/SQLiteCursor;->setWindow(Landroid/database/CursorWindow;)V +Lnet/zetetic/database/sqlcipher/SQLiteCursorDriver; +Lnet/zetetic/database/sqlcipher/SQLiteCustomFunction; +Lnet/zetetic/database/sqlcipher/SQLiteDatabase; +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->()V +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->(Ljava/lang/String;[BILnet/zetetic/database/sqlcipher/SQLiteDatabase$CursorFactory;Lnet/zetetic/database/DatabaseErrorHandler;Lnet/zetetic/database/sqlcipher/SQLiteDatabaseHook;)V +PLnet/zetetic/database/sqlcipher/SQLiteDatabase;->beginTransaction()V +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->beginTransaction(Lnet/zetetic/database/sqlcipher/SQLiteTransactionListener;Z)V +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->beginTransactionNonExclusive()V +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->compileStatement(Ljava/lang/String;)Landroidx/sqlite/db/SupportSQLiteStatement; +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->compileStatement(Ljava/lang/String;)Lnet/zetetic/database/sqlcipher/SQLiteStatement; +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->createSession()Lnet/zetetic/database/sqlcipher/SQLiteSession; +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->endTransaction()V +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->execSQL(Ljava/lang/String;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->executeSql(Ljava/lang/String;[Ljava/lang/Object;)I +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->getPath()Ljava/lang/String; +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->getThreadDefaultConnectionFlags(Z)I +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->getThreadSession()Lnet/zetetic/database/sqlcipher/SQLiteSession; +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->getVersion()I +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->hasCodec()Z +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->inTransaction()Z +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->isMainThread()Z +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->isOpen()Z +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->isReadOnly()Z +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->isReadOnlyLocked()Z +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->isWriteAheadLoggingEnabled()Z +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->open()V +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->openDatabase(Ljava/lang/String;[BLnet/zetetic/database/sqlcipher/SQLiteDatabase$CursorFactory;ILnet/zetetic/database/DatabaseErrorHandler;Lnet/zetetic/database/sqlcipher/SQLiteDatabaseHook;)Lnet/zetetic/database/sqlcipher/SQLiteDatabase; +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->openInner()V +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->query(Landroidx/sqlite/db/SupportSQLiteQuery;)Landroid/database/Cursor; +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->query(Landroidx/sqlite/db/SupportSQLiteQuery;Landroid/os/CancellationSignal;)Landroid/database/Cursor; +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->query(Ljava/lang/String;)Landroid/database/Cursor; +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->rawQuery(Ljava/lang/String;[Ljava/lang/Object;)Landroid/database/Cursor; +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->setForeignKeyConstraintsEnabled(Z)V +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->setTransactionSuccessful()V +PLnet/zetetic/database/sqlcipher/SQLiteDatabase;->setVersion(I)V +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->throwIfNotOpenLocked()V +Lnet/zetetic/database/sqlcipher/SQLiteDatabase$1; +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase$1;->(Lnet/zetetic/database/sqlcipher/SQLiteDatabase;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase$1;->initialValue()Ljava/lang/Object; +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase$1;->initialValue()Lnet/zetetic/database/sqlcipher/SQLiteSession; +Lnet/zetetic/database/sqlcipher/SQLiteDatabase$CursorFactory; +Lnet/zetetic/database/sqlcipher/SQLiteDatabaseConfiguration; +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabaseConfiguration;->()V +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabaseConfiguration;->(Ljava/lang/String;I[BLnet/zetetic/database/sqlcipher/SQLiteDatabaseHook;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabaseConfiguration;->(Lnet/zetetic/database/sqlcipher/SQLiteDatabaseConfiguration;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabaseConfiguration;->isInMemoryDb()Z +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabaseConfiguration;->stripPathForLogs(Ljava/lang/String;)Ljava/lang/String; +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabaseConfiguration;->updateParametersFrom(Lnet/zetetic/database/sqlcipher/SQLiteDatabaseConfiguration;)V +Lnet/zetetic/database/sqlcipher/SQLiteDatabaseHook; +Lnet/zetetic/database/sqlcipher/SQLiteDebug; +HSPLnet/zetetic/database/sqlcipher/SQLiteDebug;->()V +Lnet/zetetic/database/sqlcipher/SQLiteDebug$PagerStats; +Lnet/zetetic/database/sqlcipher/SQLiteDirectCursorDriver; +HSPLnet/zetetic/database/sqlcipher/SQLiteDirectCursorDriver;->(Lnet/zetetic/database/sqlcipher/SQLiteDatabase;Ljava/lang/String;Ljava/lang/String;Landroid/os/CancellationSignal;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteDirectCursorDriver;->cursorClosed()V +HSPLnet/zetetic/database/sqlcipher/SQLiteDirectCursorDriver;->query(Lnet/zetetic/database/sqlcipher/SQLiteDatabase$CursorFactory;[Ljava/lang/Object;)Landroid/database/Cursor; +Lnet/zetetic/database/sqlcipher/SQLiteGlobal; +HSPLnet/zetetic/database/sqlcipher/SQLiteGlobal;->()V +HSPLnet/zetetic/database/sqlcipher/SQLiteGlobal;->getDefaultJournalMode()Ljava/lang/String; +HSPLnet/zetetic/database/sqlcipher/SQLiteGlobal;->getDefaultSyncMode()Ljava/lang/String; +HSPLnet/zetetic/database/sqlcipher/SQLiteGlobal;->getJournalSizeLimit()I +HSPLnet/zetetic/database/sqlcipher/SQLiteGlobal;->getWALAutoCheckpoint()I +HSPLnet/zetetic/database/sqlcipher/SQLiteGlobal;->getWALConnectionPoolSize()I +HSPLnet/zetetic/database/sqlcipher/SQLiteGlobal;->getWALSyncMode()Ljava/lang/String; +Lnet/zetetic/database/sqlcipher/SQLiteOpenHelper; +HSPLnet/zetetic/database/sqlcipher/SQLiteOpenHelper;->()V +HSPLnet/zetetic/database/sqlcipher/SQLiteOpenHelper;->(Landroid/content/Context;Ljava/lang/String;[BLnet/zetetic/database/sqlcipher/SQLiteDatabase$CursorFactory;IILnet/zetetic/database/DatabaseErrorHandler;Lnet/zetetic/database/sqlcipher/SQLiteDatabaseHook;Z)V +HSPLnet/zetetic/database/sqlcipher/SQLiteOpenHelper;->getDatabaseLocked(Z)Lnet/zetetic/database/sqlcipher/SQLiteDatabase; +HSPLnet/zetetic/database/sqlcipher/SQLiteOpenHelper;->getWritableDatabase()Lnet/zetetic/database/sqlcipher/SQLiteDatabase; +HSPLnet/zetetic/database/sqlcipher/SQLiteOpenHelper;->setWriteAheadLoggingEnabled(Z)V +Lnet/zetetic/database/sqlcipher/SQLiteProgram; +HSPLnet/zetetic/database/sqlcipher/SQLiteProgram;->()V +HSPLnet/zetetic/database/sqlcipher/SQLiteProgram;->(Lnet/zetetic/database/sqlcipher/SQLiteDatabase;Ljava/lang/String;[Ljava/lang/Object;Landroid/os/CancellationSignal;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteProgram;->bindAllArgs([Ljava/lang/Object;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteProgram;->bindAllArgsAsStrings([Ljava/lang/String;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteProgram;->clearBindings()V +HSPLnet/zetetic/database/sqlcipher/SQLiteProgram;->getBindArgs()[Ljava/lang/Object; +HSPLnet/zetetic/database/sqlcipher/SQLiteProgram;->getColumnNames()[Ljava/lang/String; +HSPLnet/zetetic/database/sqlcipher/SQLiteProgram;->getConnectionFlags()I +HSPLnet/zetetic/database/sqlcipher/SQLiteProgram;->getDatabase()Lnet/zetetic/database/sqlcipher/SQLiteDatabase; +HSPLnet/zetetic/database/sqlcipher/SQLiteProgram;->getSession()Lnet/zetetic/database/sqlcipher/SQLiteSession; +HSPLnet/zetetic/database/sqlcipher/SQLiteProgram;->getSql()Ljava/lang/String; +HSPLnet/zetetic/database/sqlcipher/SQLiteProgram;->onAllReferencesReleased()V +Lnet/zetetic/database/sqlcipher/SQLiteQuery; +HSPLnet/zetetic/database/sqlcipher/SQLiteQuery;->(Lnet/zetetic/database/sqlcipher/SQLiteDatabase;Ljava/lang/String;Landroid/os/CancellationSignal;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteQuery;->fillWindow(Landroid/database/CursorWindow;IIZ)I +Lnet/zetetic/database/sqlcipher/SQLiteSession; +HSPLnet/zetetic/database/sqlcipher/SQLiteSession;->()V +HSPLnet/zetetic/database/sqlcipher/SQLiteSession;->(Lnet/zetetic/database/sqlcipher/SQLiteConnectionPool;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteSession;->acquireConnection(Ljava/lang/String;ILandroid/os/CancellationSignal;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteSession;->beginTransaction(ILnet/zetetic/database/sqlcipher/SQLiteTransactionListener;ILandroid/os/CancellationSignal;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteSession;->beginTransactionUnchecked(ILnet/zetetic/database/sqlcipher/SQLiteTransactionListener;ILandroid/os/CancellationSignal;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteSession;->endTransaction(Landroid/os/CancellationSignal;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteSession;->endTransactionUnchecked(Landroid/os/CancellationSignal;Z)V +HSPLnet/zetetic/database/sqlcipher/SQLiteSession;->executeForChangedRowCount(Ljava/lang/String;[Ljava/lang/Object;ILandroid/os/CancellationSignal;)I +HSPLnet/zetetic/database/sqlcipher/SQLiteSession;->executeForCursorWindow(Ljava/lang/String;[Ljava/lang/Object;Landroid/database/CursorWindow;IIZILandroid/os/CancellationSignal;)I +HSPLnet/zetetic/database/sqlcipher/SQLiteSession;->executeForLong(Ljava/lang/String;[Ljava/lang/Object;ILandroid/os/CancellationSignal;)J +HSPLnet/zetetic/database/sqlcipher/SQLiteSession;->executeSpecial(Ljava/lang/String;[Ljava/lang/Object;ILandroid/os/CancellationSignal;)Z +HSPLnet/zetetic/database/sqlcipher/SQLiteSession;->hasTransaction()Z +HSPLnet/zetetic/database/sqlcipher/SQLiteSession;->obtainTransaction(ILnet/zetetic/database/sqlcipher/SQLiteTransactionListener;)Lnet/zetetic/database/sqlcipher/SQLiteSession$Transaction; +HSPLnet/zetetic/database/sqlcipher/SQLiteSession;->prepare(Ljava/lang/String;ILandroid/os/CancellationSignal;Lnet/zetetic/database/sqlcipher/SQLiteStatementInfo;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteSession;->recycleTransaction(Lnet/zetetic/database/sqlcipher/SQLiteSession$Transaction;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteSession;->releaseConnection()V +HSPLnet/zetetic/database/sqlcipher/SQLiteSession;->setTransactionSuccessful()V +HSPLnet/zetetic/database/sqlcipher/SQLiteSession;->throwIfNoTransaction()V +HSPLnet/zetetic/database/sqlcipher/SQLiteSession;->throwIfTransactionMarkedSuccessful()V +Lnet/zetetic/database/sqlcipher/SQLiteSession$Transaction; +HSPLnet/zetetic/database/sqlcipher/SQLiteSession$Transaction;->()V +HSPLnet/zetetic/database/sqlcipher/SQLiteSession$Transaction;->(Lnet/zetetic/database/sqlcipher/SQLiteSession$1;)V +Lnet/zetetic/database/sqlcipher/SQLiteStatement; +HSPLnet/zetetic/database/sqlcipher/SQLiteStatement;->(Lnet/zetetic/database/sqlcipher/SQLiteDatabase;Ljava/lang/String;[Ljava/lang/Object;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteStatement;->executeUpdateDelete()I +HSPLnet/zetetic/database/sqlcipher/SQLiteStatement;->simpleQueryForLong()J +Lnet/zetetic/database/sqlcipher/SQLiteStatementInfo; +HSPLnet/zetetic/database/sqlcipher/SQLiteStatementInfo;->()V +Lnet/zetetic/database/sqlcipher/SQLiteTransactionListener; +Lnet/zetetic/database/sqlcipher/SupportHelper; +HSPLnet/zetetic/database/sqlcipher/SupportHelper;->(Landroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration;[BLnet/zetetic/database/sqlcipher/SQLiteDatabaseHook;Z)V +HSPLnet/zetetic/database/sqlcipher/SupportHelper;->(Landroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration;[BLnet/zetetic/database/sqlcipher/SQLiteDatabaseHook;ZI)V +HSPLnet/zetetic/database/sqlcipher/SupportHelper;->getWritableDatabase()Landroidx/sqlite/db/SupportSQLiteDatabase; +HSPLnet/zetetic/database/sqlcipher/SupportHelper;->setWriteAheadLoggingEnabled(Z)V +Lnet/zetetic/database/sqlcipher/SupportHelper$1; +HSPLnet/zetetic/database/sqlcipher/SupportHelper$1;->(Lnet/zetetic/database/sqlcipher/SupportHelper;Landroid/content/Context;Ljava/lang/String;[BLnet/zetetic/database/sqlcipher/SQLiteDatabase$CursorFactory;IILnet/zetetic/database/DatabaseErrorHandler;Lnet/zetetic/database/sqlcipher/SQLiteDatabaseHook;ZLandroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration;)V +HSPLnet/zetetic/database/sqlcipher/SupportHelper$1;->onConfigure(Lnet/zetetic/database/sqlcipher/SQLiteDatabase;)V +PLnet/zetetic/database/sqlcipher/SupportHelper$1;->onCreate(Lnet/zetetic/database/sqlcipher/SQLiteDatabase;)V +HSPLnet/zetetic/database/sqlcipher/SupportHelper$1;->onOpen(Lnet/zetetic/database/sqlcipher/SQLiteDatabase;)V +Lnet/zetetic/database/sqlcipher/SupportOpenHelperFactory; +HSPLnet/zetetic/database/sqlcipher/SupportOpenHelperFactory;->([BLnet/zetetic/database/sqlcipher/SQLiteDatabaseHook;Z)V +HSPLnet/zetetic/database/sqlcipher/SupportOpenHelperFactory;->([BLnet/zetetic/database/sqlcipher/SQLiteDatabaseHook;ZI)V +HSPLnet/zetetic/database/sqlcipher/SupportOpenHelperFactory;->create(Landroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration;)Landroidx/sqlite/db/SupportSQLiteOpenHelper; +Lokhttp3/Authenticator; +HSPLokhttp3/Authenticator;->()V +Lokhttp3/Authenticator$Companion; +HSPLokhttp3/Authenticator$Companion;->()V +HSPLokhttp3/Authenticator$Companion;->()V +Lokhttp3/Authenticator$Companion$AuthenticatorNone; +HSPLokhttp3/Authenticator$Companion$AuthenticatorNone;->()V +Lokhttp3/Cache; +Lokhttp3/Call$Factory; +Lokhttp3/CertificatePinner; +HSPLokhttp3/CertificatePinner;->()V +HSPLokhttp3/CertificatePinner;->(Ljava/util/Set;Lokhttp3/internal/tls/CertificateChainCleaner;)V +HSPLokhttp3/CertificatePinner;->(Ljava/util/Set;Lokhttp3/internal/tls/CertificateChainCleaner;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLokhttp3/CertificatePinner;->withCertificateChainCleaner$okhttp(Lokhttp3/internal/tls/CertificateChainCleaner;)Lokhttp3/CertificatePinner; +Lokhttp3/CertificatePinner$Builder; +HSPLokhttp3/CertificatePinner$Builder;->()V +HSPLokhttp3/CertificatePinner$Builder;->build()Lokhttp3/CertificatePinner; +Lokhttp3/CertificatePinner$Companion; +HSPLokhttp3/CertificatePinner$Companion;->()V +HSPLokhttp3/CertificatePinner$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lokhttp3/CipherSuite; +HSPLokhttp3/CipherSuite;->()V +HSPLokhttp3/CipherSuite;->(Ljava/lang/String;)V +HSPLokhttp3/CipherSuite;->(Ljava/lang/String;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLokhttp3/CipherSuite;->access$getINSTANCES$cp()Ljava/util/Map; +HSPLokhttp3/CipherSuite;->javaName()Ljava/lang/String; +Lokhttp3/CipherSuite$Companion; +HSPLokhttp3/CipherSuite$Companion;->()V +HSPLokhttp3/CipherSuite$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLokhttp3/CipherSuite$Companion;->access$init(Lokhttp3/CipherSuite$Companion;Ljava/lang/String;I)Lokhttp3/CipherSuite; +HSPLokhttp3/CipherSuite$Companion;->init(Ljava/lang/String;I)Lokhttp3/CipherSuite; +Lokhttp3/CipherSuite$Companion$ORDER_BY_NAME$1; +HSPLokhttp3/CipherSuite$Companion$ORDER_BY_NAME$1;->()V +Lokhttp3/ConnectionPool; +HSPLokhttp3/ConnectionPool;->()V +HSPLokhttp3/ConnectionPool;->(IJLjava/util/concurrent/TimeUnit;)V +HSPLokhttp3/ConnectionPool;->(Lokhttp3/internal/connection/RealConnectionPool;)V +Lokhttp3/ConnectionSpec; +HSPLokhttp3/ConnectionSpec;->()V +HSPLokhttp3/ConnectionSpec;->(ZZ[Ljava/lang/String;[Ljava/lang/String;)V +HSPLokhttp3/ConnectionSpec;->isTls()Z +Lokhttp3/ConnectionSpec$Builder; +HSPLokhttp3/ConnectionSpec$Builder;->(Z)V +HSPLokhttp3/ConnectionSpec$Builder;->build()Lokhttp3/ConnectionSpec; +HSPLokhttp3/ConnectionSpec$Builder;->cipherSuites([Ljava/lang/String;)Lokhttp3/ConnectionSpec$Builder; +HSPLokhttp3/ConnectionSpec$Builder;->cipherSuites([Lokhttp3/CipherSuite;)Lokhttp3/ConnectionSpec$Builder; +HSPLokhttp3/ConnectionSpec$Builder;->supportsTlsExtensions(Z)Lokhttp3/ConnectionSpec$Builder; +HSPLokhttp3/ConnectionSpec$Builder;->tlsVersions([Ljava/lang/String;)Lokhttp3/ConnectionSpec$Builder; +HSPLokhttp3/ConnectionSpec$Builder;->tlsVersions([Lokhttp3/TlsVersion;)Lokhttp3/ConnectionSpec$Builder; +Lokhttp3/ConnectionSpec$Companion; +HSPLokhttp3/ConnectionSpec$Companion;->()V +HSPLokhttp3/ConnectionSpec$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lokhttp3/CookieJar; +HSPLokhttp3/CookieJar;->()V +Lokhttp3/CookieJar$Companion; +HSPLokhttp3/CookieJar$Companion;->()V +HSPLokhttp3/CookieJar$Companion;->()V +Lokhttp3/CookieJar$Companion$NoCookies; +HSPLokhttp3/CookieJar$Companion$NoCookies;->()V +Lokhttp3/Dispatcher; +HSPLokhttp3/Dispatcher;->()V +Lokhttp3/Dns; +HSPLokhttp3/Dns;->()V +Lokhttp3/Dns$Companion; +HSPLokhttp3/Dns$Companion;->()V +HSPLokhttp3/Dns$Companion;->()V +Lokhttp3/Dns$Companion$DnsSystem; +HSPLokhttp3/Dns$Companion$DnsSystem;->()V +Lokhttp3/EventListener; +HSPLokhttp3/EventListener;->()V +HSPLokhttp3/EventListener;->()V +Lokhttp3/EventListener$Companion; +HSPLokhttp3/EventListener$Companion;->()V +HSPLokhttp3/EventListener$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lokhttp3/EventListener$Companion$NONE$1; +HSPLokhttp3/EventListener$Companion$NONE$1;->()V +Lokhttp3/EventListener$Factory; +Lokhttp3/Headers; +HSPLokhttp3/Headers;->()V +HSPLokhttp3/Headers;->([Ljava/lang/String;)V +HSPLokhttp3/Headers;->([Ljava/lang/String;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lokhttp3/Headers$Companion; +HSPLokhttp3/Headers$Companion;->()V +HSPLokhttp3/Headers$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLokhttp3/Headers$Companion;->of([Ljava/lang/String;)Lokhttp3/Headers; +Lokhttp3/Interceptor; +Lokhttp3/MediaType; +Lokhttp3/OkHttpClient; +HSPLokhttp3/OkHttpClient;->()V +HSPLokhttp3/OkHttpClient;->(Lokhttp3/OkHttpClient$Builder;)V +HSPLokhttp3/OkHttpClient;->access$getDEFAULT_CONNECTION_SPECS$cp()Ljava/util/List; +HSPLokhttp3/OkHttpClient;->access$getDEFAULT_PROTOCOLS$cp()Ljava/util/List; +HSPLokhttp3/OkHttpClient;->verifyClientState()V +Lokhttp3/OkHttpClient$Builder; +HSPLokhttp3/OkHttpClient$Builder;->()V +HSPLokhttp3/OkHttpClient$Builder;->addInterceptor(Lokhttp3/Interceptor;)Lokhttp3/OkHttpClient$Builder; +HSPLokhttp3/OkHttpClient$Builder;->build()Lokhttp3/OkHttpClient; +HSPLokhttp3/OkHttpClient$Builder;->getAuthenticator$okhttp()Lokhttp3/Authenticator; +HSPLokhttp3/OkHttpClient$Builder;->getCache$okhttp()Lokhttp3/Cache; +HSPLokhttp3/OkHttpClient$Builder;->getCallTimeout$okhttp()I +HSPLokhttp3/OkHttpClient$Builder;->getCertificatePinner$okhttp()Lokhttp3/CertificatePinner; +HSPLokhttp3/OkHttpClient$Builder;->getConnectTimeout$okhttp()I +HSPLokhttp3/OkHttpClient$Builder;->getConnectionPool$okhttp()Lokhttp3/ConnectionPool; +HSPLokhttp3/OkHttpClient$Builder;->getConnectionSpecs$okhttp()Ljava/util/List; +HSPLokhttp3/OkHttpClient$Builder;->getCookieJar$okhttp()Lokhttp3/CookieJar; +HSPLokhttp3/OkHttpClient$Builder;->getDispatcher$okhttp()Lokhttp3/Dispatcher; +HSPLokhttp3/OkHttpClient$Builder;->getDns$okhttp()Lokhttp3/Dns; +HSPLokhttp3/OkHttpClient$Builder;->getEventListenerFactory$okhttp()Lokhttp3/EventListener$Factory; +HSPLokhttp3/OkHttpClient$Builder;->getFollowRedirects$okhttp()Z +HSPLokhttp3/OkHttpClient$Builder;->getFollowSslRedirects$okhttp()Z +HSPLokhttp3/OkHttpClient$Builder;->getHostnameVerifier$okhttp()Ljavax/net/ssl/HostnameVerifier; +HSPLokhttp3/OkHttpClient$Builder;->getInterceptors$okhttp()Ljava/util/List; +HSPLokhttp3/OkHttpClient$Builder;->getMinWebSocketMessageToCompress$okhttp()J +HSPLokhttp3/OkHttpClient$Builder;->getNetworkInterceptors$okhttp()Ljava/util/List; +HSPLokhttp3/OkHttpClient$Builder;->getPingInterval$okhttp()I +HSPLokhttp3/OkHttpClient$Builder;->getProtocols$okhttp()Ljava/util/List; +HSPLokhttp3/OkHttpClient$Builder;->getProxy$okhttp()Ljava/net/Proxy; +HSPLokhttp3/OkHttpClient$Builder;->getProxyAuthenticator$okhttp()Lokhttp3/Authenticator; +HSPLokhttp3/OkHttpClient$Builder;->getProxySelector$okhttp()Ljava/net/ProxySelector; +HSPLokhttp3/OkHttpClient$Builder;->getReadTimeout$okhttp()I +HSPLokhttp3/OkHttpClient$Builder;->getRetryOnConnectionFailure$okhttp()Z +HSPLokhttp3/OkHttpClient$Builder;->getRouteDatabase$okhttp()Lokhttp3/internal/connection/RouteDatabase; +HSPLokhttp3/OkHttpClient$Builder;->getSocketFactory$okhttp()Ljavax/net/SocketFactory; +HSPLokhttp3/OkHttpClient$Builder;->getSslSocketFactoryOrNull$okhttp()Ljavax/net/ssl/SSLSocketFactory; +HSPLokhttp3/OkHttpClient$Builder;->getWriteTimeout$okhttp()I +Lokhttp3/OkHttpClient$Companion; +HSPLokhttp3/OkHttpClient$Companion;->()V +HSPLokhttp3/OkHttpClient$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLokhttp3/OkHttpClient$Companion;->getDEFAULT_CONNECTION_SPECS$okhttp()Ljava/util/List; +HSPLokhttp3/OkHttpClient$Companion;->getDEFAULT_PROTOCOLS$okhttp()Ljava/util/List; +Lokhttp3/Protocol; +HSPLokhttp3/Protocol;->$values()[Lokhttp3/Protocol; +HSPLokhttp3/Protocol;->()V +HSPLokhttp3/Protocol;->(Ljava/lang/String;ILjava/lang/String;)V +Lokhttp3/Protocol$Companion; +HSPLokhttp3/Protocol$Companion;->()V +HSPLokhttp3/Protocol$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lokhttp3/RequestBody; +HSPLokhttp3/RequestBody;->()V +HSPLokhttp3/RequestBody;->()V +Lokhttp3/RequestBody$Companion; +HSPLokhttp3/RequestBody$Companion;->()V +HSPLokhttp3/RequestBody$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLokhttp3/RequestBody$Companion;->create$default(Lokhttp3/RequestBody$Companion;[BLokhttp3/MediaType;IIILjava/lang/Object;)Lokhttp3/RequestBody; +HSPLokhttp3/RequestBody$Companion;->create([BLokhttp3/MediaType;II)Lokhttp3/RequestBody; +Lokhttp3/RequestBody$Companion$toRequestBody$2; +HSPLokhttp3/RequestBody$Companion$toRequestBody$2;->(Lokhttp3/MediaType;I[BI)V +Lokhttp3/ResponseBody; +HSPLokhttp3/ResponseBody;->()V +HSPLokhttp3/ResponseBody;->()V +Lokhttp3/ResponseBody$Companion; +HSPLokhttp3/ResponseBody$Companion;->()V +HSPLokhttp3/ResponseBody$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLokhttp3/ResponseBody$Companion;->create$default(Lokhttp3/ResponseBody$Companion;[BLokhttp3/MediaType;ILjava/lang/Object;)Lokhttp3/ResponseBody; +HSPLokhttp3/ResponseBody$Companion;->create(Lokio/BufferedSource;Lokhttp3/MediaType;J)Lokhttp3/ResponseBody; +HSPLokhttp3/ResponseBody$Companion;->create([BLokhttp3/MediaType;)Lokhttp3/ResponseBody; +Lokhttp3/ResponseBody$Companion$asResponseBody$1; +HSPLokhttp3/ResponseBody$Companion$asResponseBody$1;->(Lokhttp3/MediaType;JLokio/BufferedSource;)V +Lokhttp3/TlsVersion; +HSPLokhttp3/TlsVersion;->$values()[Lokhttp3/TlsVersion; +HSPLokhttp3/TlsVersion;->()V +HSPLokhttp3/TlsVersion;->(Ljava/lang/String;ILjava/lang/String;)V +HSPLokhttp3/TlsVersion;->javaName()Ljava/lang/String; +Lokhttp3/TlsVersion$Companion; +HSPLokhttp3/TlsVersion$Companion;->()V +HSPLokhttp3/TlsVersion$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lokhttp3/WebSocket$Factory; +Lokhttp3/internal/Util; +HSPLokhttp3/internal/Util;->()V +HSPLokhttp3/internal/Util;->asFactory(Lokhttp3/EventListener;)Lokhttp3/EventListener$Factory; +HSPLokhttp3/internal/Util;->checkOffsetAndCount(JJJ)V +HSPLokhttp3/internal/Util;->immutableListOf([Ljava/lang/Object;)Ljava/util/List; +HSPLokhttp3/internal/Util;->threadFactory(Ljava/lang/String;Z)Ljava/util/concurrent/ThreadFactory; +HSPLokhttp3/internal/Util;->toImmutableList(Ljava/util/List;)Ljava/util/List; +Lokhttp3/internal/Util$$ExternalSyntheticLambda0; +HSPLokhttp3/internal/Util$$ExternalSyntheticLambda0;->(Ljava/lang/String;Z)V +Lokhttp3/internal/Util$$ExternalSyntheticLambda1; +HSPLokhttp3/internal/Util$$ExternalSyntheticLambda1;->(Lokhttp3/EventListener;)V +Lokhttp3/internal/authenticator/JavaNetAuthenticator; +HSPLokhttp3/internal/authenticator/JavaNetAuthenticator;->(Lokhttp3/Dns;)V +HSPLokhttp3/internal/authenticator/JavaNetAuthenticator;->(Lokhttp3/Dns;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +Lokhttp3/internal/concurrent/Task; +HSPLokhttp3/internal/concurrent/Task;->(Ljava/lang/String;Z)V +HSPLokhttp3/internal/concurrent/Task;->(Ljava/lang/String;ZILkotlin/jvm/internal/DefaultConstructorMarker;)V +Lokhttp3/internal/concurrent/TaskQueue; +HSPLokhttp3/internal/concurrent/TaskQueue;->(Lokhttp3/internal/concurrent/TaskRunner;Ljava/lang/String;)V +Lokhttp3/internal/concurrent/TaskRunner; +HSPLokhttp3/internal/concurrent/TaskRunner;->()V +HSPLokhttp3/internal/concurrent/TaskRunner;->(Lokhttp3/internal/concurrent/TaskRunner$Backend;)V +HSPLokhttp3/internal/concurrent/TaskRunner;->newQueue()Lokhttp3/internal/concurrent/TaskQueue; +Lokhttp3/internal/concurrent/TaskRunner$Backend; +Lokhttp3/internal/concurrent/TaskRunner$Companion; +HSPLokhttp3/internal/concurrent/TaskRunner$Companion;->()V +HSPLokhttp3/internal/concurrent/TaskRunner$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lokhttp3/internal/concurrent/TaskRunner$RealBackend; +HSPLokhttp3/internal/concurrent/TaskRunner$RealBackend;->(Ljava/util/concurrent/ThreadFactory;)V +Lokhttp3/internal/concurrent/TaskRunner$runnable$1; +HSPLokhttp3/internal/concurrent/TaskRunner$runnable$1;->(Lokhttp3/internal/concurrent/TaskRunner;)V +Lokhttp3/internal/connection/RealConnectionPool; +HSPLokhttp3/internal/connection/RealConnectionPool;->()V +HSPLokhttp3/internal/connection/RealConnectionPool;->(Lokhttp3/internal/concurrent/TaskRunner;IJLjava/util/concurrent/TimeUnit;)V +Lokhttp3/internal/connection/RealConnectionPool$Companion; +HSPLokhttp3/internal/connection/RealConnectionPool$Companion;->()V +HSPLokhttp3/internal/connection/RealConnectionPool$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lokhttp3/internal/connection/RealConnectionPool$cleanupTask$1; +HSPLokhttp3/internal/connection/RealConnectionPool$cleanupTask$1;->(Lokhttp3/internal/connection/RealConnectionPool;Ljava/lang/String;)V +Lokhttp3/internal/connection/RouteDatabase; +HSPLokhttp3/internal/connection/RouteDatabase;->()V +Lokhttp3/internal/http2/Http2; +Lokhttp3/internal/platform/Android10Platform; +HSPLokhttp3/internal/platform/Android10Platform;->()V +HSPLokhttp3/internal/platform/Android10Platform;->()V +HSPLokhttp3/internal/platform/Android10Platform;->access$isSupported$cp()Z +HSPLokhttp3/internal/platform/Android10Platform;->buildCertificateChainCleaner(Ljavax/net/ssl/X509TrustManager;)Lokhttp3/internal/tls/CertificateChainCleaner; +Lokhttp3/internal/platform/Android10Platform$Companion; +HSPLokhttp3/internal/platform/Android10Platform$Companion;->()V +HSPLokhttp3/internal/platform/Android10Platform$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLokhttp3/internal/platform/Android10Platform$Companion;->buildIfSupported()Lokhttp3/internal/platform/Platform; +HSPLokhttp3/internal/platform/Android10Platform$Companion;->isSupported()Z +Lokhttp3/internal/platform/Platform; +HSPLokhttp3/internal/platform/Platform;->()V +HSPLokhttp3/internal/platform/Platform;->()V +HSPLokhttp3/internal/platform/Platform;->access$getPlatform$cp()Lokhttp3/internal/platform/Platform; +HSPLokhttp3/internal/platform/Platform;->newSSLContext()Ljavax/net/ssl/SSLContext; +HSPLokhttp3/internal/platform/Platform;->newSslSocketFactory(Ljavax/net/ssl/X509TrustManager;)Ljavax/net/ssl/SSLSocketFactory; +HSPLokhttp3/internal/platform/Platform;->platformTrustManager()Ljavax/net/ssl/X509TrustManager; +Lokhttp3/internal/platform/Platform$Companion; +HSPLokhttp3/internal/platform/Platform$Companion;->()V +HSPLokhttp3/internal/platform/Platform$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLokhttp3/internal/platform/Platform$Companion;->access$findPlatform(Lokhttp3/internal/platform/Platform$Companion;)Lokhttp3/internal/platform/Platform; +HSPLokhttp3/internal/platform/Platform$Companion;->findAndroidPlatform()Lokhttp3/internal/platform/Platform; +HSPLokhttp3/internal/platform/Platform$Companion;->findPlatform()Lokhttp3/internal/platform/Platform; +HSPLokhttp3/internal/platform/Platform$Companion;->get()Lokhttp3/internal/platform/Platform; +HSPLokhttp3/internal/platform/Platform$Companion;->isAndroid()Z +Lokhttp3/internal/platform/android/Android10SocketAdapter; +HSPLokhttp3/internal/platform/android/Android10SocketAdapter;->()V +HSPLokhttp3/internal/platform/android/Android10SocketAdapter;->()V +HSPLokhttp3/internal/platform/android/Android10SocketAdapter;->isSupported()Z +Lokhttp3/internal/platform/android/Android10SocketAdapter$Companion; +HSPLokhttp3/internal/platform/android/Android10SocketAdapter$Companion;->()V +HSPLokhttp3/internal/platform/android/Android10SocketAdapter$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLokhttp3/internal/platform/android/Android10SocketAdapter$Companion;->buildIfSupported()Lokhttp3/internal/platform/android/SocketAdapter; +HSPLokhttp3/internal/platform/android/Android10SocketAdapter$Companion;->isSupported()Z +Lokhttp3/internal/platform/android/AndroidCertificateChainCleaner; +HSPLokhttp3/internal/platform/android/AndroidCertificateChainCleaner;->()V +HSPLokhttp3/internal/platform/android/AndroidCertificateChainCleaner;->(Ljavax/net/ssl/X509TrustManager;Landroid/net/http/X509TrustManagerExtensions;)V +Lokhttp3/internal/platform/android/AndroidCertificateChainCleaner$Companion; +HSPLokhttp3/internal/platform/android/AndroidCertificateChainCleaner$Companion;->()V +HSPLokhttp3/internal/platform/android/AndroidCertificateChainCleaner$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLokhttp3/internal/platform/android/AndroidCertificateChainCleaner$Companion;->buildIfSupported(Ljavax/net/ssl/X509TrustManager;)Lokhttp3/internal/platform/android/AndroidCertificateChainCleaner; +Lokhttp3/internal/platform/android/AndroidLog; +HSPLokhttp3/internal/platform/android/AndroidLog;->()V +HSPLokhttp3/internal/platform/android/AndroidLog;->()V +HSPLokhttp3/internal/platform/android/AndroidLog;->enable()V +HSPLokhttp3/internal/platform/android/AndroidLog;->enableLogging(Ljava/lang/String;Ljava/lang/String;)V +Lokhttp3/internal/platform/android/AndroidLogHandler; +HSPLokhttp3/internal/platform/android/AndroidLogHandler;->()V +HSPLokhttp3/internal/platform/android/AndroidLogHandler;->()V +Lokhttp3/internal/platform/android/AndroidSocketAdapter; +HSPLokhttp3/internal/platform/android/AndroidSocketAdapter;->()V +HSPLokhttp3/internal/platform/android/AndroidSocketAdapter;->access$getPlayProviderFactory$cp()Lokhttp3/internal/platform/android/DeferredSocketAdapter$Factory; +Lokhttp3/internal/platform/android/AndroidSocketAdapter$Companion; +HSPLokhttp3/internal/platform/android/AndroidSocketAdapter$Companion;->()V +HSPLokhttp3/internal/platform/android/AndroidSocketAdapter$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLokhttp3/internal/platform/android/AndroidSocketAdapter$Companion;->factory(Ljava/lang/String;)Lokhttp3/internal/platform/android/DeferredSocketAdapter$Factory; +HSPLokhttp3/internal/platform/android/AndroidSocketAdapter$Companion;->getPlayProviderFactory()Lokhttp3/internal/platform/android/DeferredSocketAdapter$Factory; +Lokhttp3/internal/platform/android/AndroidSocketAdapter$Companion$factory$1; +HSPLokhttp3/internal/platform/android/AndroidSocketAdapter$Companion$factory$1;->(Ljava/lang/String;)V +Lokhttp3/internal/platform/android/BouncyCastleSocketAdapter; +HSPLokhttp3/internal/platform/android/BouncyCastleSocketAdapter;->()V +HSPLokhttp3/internal/platform/android/BouncyCastleSocketAdapter;->access$getFactory$cp()Lokhttp3/internal/platform/android/DeferredSocketAdapter$Factory; +Lokhttp3/internal/platform/android/BouncyCastleSocketAdapter$Companion; +HSPLokhttp3/internal/platform/android/BouncyCastleSocketAdapter$Companion;->()V +HSPLokhttp3/internal/platform/android/BouncyCastleSocketAdapter$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLokhttp3/internal/platform/android/BouncyCastleSocketAdapter$Companion;->getFactory()Lokhttp3/internal/platform/android/DeferredSocketAdapter$Factory; +Lokhttp3/internal/platform/android/BouncyCastleSocketAdapter$Companion$factory$1; +HSPLokhttp3/internal/platform/android/BouncyCastleSocketAdapter$Companion$factory$1;->()V +Lokhttp3/internal/platform/android/ConscryptSocketAdapter; +HSPLokhttp3/internal/platform/android/ConscryptSocketAdapter;->()V +HSPLokhttp3/internal/platform/android/ConscryptSocketAdapter;->access$getFactory$cp()Lokhttp3/internal/platform/android/DeferredSocketAdapter$Factory; +Lokhttp3/internal/platform/android/ConscryptSocketAdapter$Companion; +HSPLokhttp3/internal/platform/android/ConscryptSocketAdapter$Companion;->()V +HSPLokhttp3/internal/platform/android/ConscryptSocketAdapter$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLokhttp3/internal/platform/android/ConscryptSocketAdapter$Companion;->getFactory()Lokhttp3/internal/platform/android/DeferredSocketAdapter$Factory; +Lokhttp3/internal/platform/android/ConscryptSocketAdapter$Companion$factory$1; +HSPLokhttp3/internal/platform/android/ConscryptSocketAdapter$Companion$factory$1;->()V +Lokhttp3/internal/platform/android/DeferredSocketAdapter; +HSPLokhttp3/internal/platform/android/DeferredSocketAdapter;->(Lokhttp3/internal/platform/android/DeferredSocketAdapter$Factory;)V +HSPLokhttp3/internal/platform/android/DeferredSocketAdapter;->isSupported()Z +Lokhttp3/internal/platform/android/DeferredSocketAdapter$Factory; +Lokhttp3/internal/platform/android/SocketAdapter; +Lokhttp3/internal/tls/CertificateChainCleaner; +HSPLokhttp3/internal/tls/CertificateChainCleaner;->()V +HSPLokhttp3/internal/tls/CertificateChainCleaner;->()V +Lokhttp3/internal/tls/CertificateChainCleaner$Companion; +HSPLokhttp3/internal/tls/CertificateChainCleaner$Companion;->()V +HSPLokhttp3/internal/tls/CertificateChainCleaner$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLokhttp3/internal/tls/CertificateChainCleaner$Companion;->get(Ljavax/net/ssl/X509TrustManager;)Lokhttp3/internal/tls/CertificateChainCleaner; +Lokhttp3/internal/tls/OkHostnameVerifier; +HSPLokhttp3/internal/tls/OkHostnameVerifier;->()V +HSPLokhttp3/internal/tls/OkHostnameVerifier;->()V +Lokhttp3/logging/HttpLoggingInterceptor; +HSPLokhttp3/logging/HttpLoggingInterceptor;->(Lokhttp3/logging/HttpLoggingInterceptor$Logger;)V +HSPLokhttp3/logging/HttpLoggingInterceptor;->level(Lokhttp3/logging/HttpLoggingInterceptor$Level;)V +Lokhttp3/logging/HttpLoggingInterceptor$Level; +HSPLokhttp3/logging/HttpLoggingInterceptor$Level;->$values()[Lokhttp3/logging/HttpLoggingInterceptor$Level; +HSPLokhttp3/logging/HttpLoggingInterceptor$Level;->()V +HSPLokhttp3/logging/HttpLoggingInterceptor$Level;->(Ljava/lang/String;I)V +Lokhttp3/logging/HttpLoggingInterceptor$Logger; +Lokio/-SegmentedByteString; +HSPLokio/-SegmentedByteString;->()V +HSPLokio/-SegmentedByteString;->arrayRangeEquals([BI[BII)Z +HSPLokio/-SegmentedByteString;->checkOffsetAndCount(JJJ)V +Lokio/Buffer; +HSPLokio/Buffer;->()V +HSPLokio/Buffer;->exhausted()Z +HSPLokio/Buffer;->read(Lokio/Buffer;J)J +HSPLokio/Buffer;->readInt()I +HSPLokio/Buffer;->setSize$okio(J)V +HSPLokio/Buffer;->size()J +HSPLokio/Buffer;->writableSegment$okio(I)Lokio/Segment; +HSPLokio/Buffer;->write(Lokio/Buffer;J)V +HSPLokio/Buffer;->write([B)Lokio/Buffer; +HSPLokio/Buffer;->write([BII)Lokio/Buffer; +HSPLokio/Buffer;->writeAll(Lokio/Source;)J +HSPLokio/Buffer;->writeInt(I)Lokio/Buffer; +Lokio/Buffer$UnsafeCursor; +HSPLokio/Buffer$UnsafeCursor;->()V +Lokio/BufferedSink; +Lokio/BufferedSource; +Lokio/ByteString; +HSPLokio/ByteString;->()V +HSPLokio/ByteString;->([B)V +HSPLokio/ByteString;->compareTo(Ljava/lang/Object;)I +HSPLokio/ByteString;->compareTo(Lokio/ByteString;)I +HSPLokio/ByteString;->getByte(I)B +HSPLokio/ByteString;->getData$okio()[B +HSPLokio/ByteString;->getSize$okio()I +HSPLokio/ByteString;->internalGet$okio(I)B +HSPLokio/ByteString;->rangeEquals(ILokio/ByteString;II)Z +HSPLokio/ByteString;->rangeEquals(I[BII)Z +HSPLokio/ByteString;->size()I +HSPLokio/ByteString;->startsWith(Lokio/ByteString;)Z +Lokio/ByteString$Companion; +HSPLokio/ByteString$Companion;->()V +HSPLokio/ByteString$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLokio/ByteString$Companion;->decodeHex(Ljava/lang/String;)Lokio/ByteString; +Lokio/Options; +HSPLokio/Options;->()V +HSPLokio/Options;->([Lokio/ByteString;[I)V +HSPLokio/Options;->([Lokio/ByteString;[ILkotlin/jvm/internal/DefaultConstructorMarker;)V +Lokio/Options$Companion; +HSPLokio/Options$Companion;->()V +HSPLokio/Options$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLokio/Options$Companion;->buildTrieRecursive$default(Lokio/Options$Companion;JLokio/Buffer;ILjava/util/List;IILjava/util/List;ILjava/lang/Object;)V +HSPLokio/Options$Companion;->buildTrieRecursive(JLokio/Buffer;ILjava/util/List;IILjava/util/List;)V +HSPLokio/Options$Companion;->getIntCount(Lokio/Buffer;)J +HSPLokio/Options$Companion;->of([Lokio/ByteString;)Lokio/Options; +Lokio/Segment; +HSPLokio/Segment;->()V +HSPLokio/Segment;->()V +HSPLokio/Segment;->([BIIZZ)V +HSPLokio/Segment;->compact()V +HSPLokio/Segment;->pop()Lokio/Segment; +HSPLokio/Segment;->push(Lokio/Segment;)Lokio/Segment; +HSPLokio/Segment;->writeTo(Lokio/Segment;I)V +Lokio/Segment$Companion; +HSPLokio/Segment$Companion;->()V +HSPLokio/Segment$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lokio/SegmentPool; +HSPLokio/SegmentPool;->()V +HSPLokio/SegmentPool;->()V +HSPLokio/SegmentPool;->firstRef()Ljava/util/concurrent/atomic/AtomicReference; +HSPLokio/SegmentPool;->recycle(Lokio/Segment;)V +HSPLokio/SegmentPool;->take()Lokio/Segment; +Lokio/Sink; +Lokio/Source; +Lokio/internal/-ByteString; +HSPLokio/internal/-ByteString;->()V +HSPLokio/internal/-ByteString;->access$decodeHexDigit(C)I +HSPLokio/internal/-ByteString;->decodeHexDigit(C)I +Lorg/apache/commons/codec/BinaryDecoder; +Lorg/apache/commons/codec/BinaryEncoder; +Lorg/apache/commons/codec/CodecPolicy; +HSPLorg/apache/commons/codec/CodecPolicy;->()V +HSPLorg/apache/commons/codec/CodecPolicy;->(Ljava/lang/String;I)V +Lorg/apache/commons/codec/Decoder; +Lorg/apache/commons/codec/Encoder; +Lorg/apache/commons/codec/binary/Base32; +HSPLorg/apache/commons/codec/binary/Base32;->()V +HSPLorg/apache/commons/codec/binary/Base32;->()V +HSPLorg/apache/commons/codec/binary/Base32;->(I[BZB)V +HSPLorg/apache/commons/codec/binary/Base32;->(I[BZBLorg/apache/commons/codec/CodecPolicy;)V +HSPLorg/apache/commons/codec/binary/Base32;->(Z)V +HSPLorg/apache/commons/codec/binary/Base32;->isInAlphabet(B)Z +Lorg/apache/commons/codec/binary/Base64; +HSPLorg/apache/commons/codec/binary/Base64;->()V +HSPLorg/apache/commons/codec/binary/Base64;->()V +HSPLorg/apache/commons/codec/binary/Base64;->(I)V +HSPLorg/apache/commons/codec/binary/Base64;->(I[B)V +HSPLorg/apache/commons/codec/binary/Base64;->(I[BZ)V +HSPLorg/apache/commons/codec/binary/Base64;->(I[BZLorg/apache/commons/codec/CodecPolicy;)V +HSPLorg/apache/commons/codec/binary/Base64;->decode([BIILorg/apache/commons/codec/binary/BaseNCodec$Context;)V +HSPLorg/apache/commons/codec/binary/Base64;->encode([BIILorg/apache/commons/codec/binary/BaseNCodec$Context;)V +HSPLorg/apache/commons/codec/binary/Base64;->isInAlphabet(B)Z +HSPLorg/apache/commons/codec/binary/Base64;->validateCharacter(ILorg/apache/commons/codec/binary/BaseNCodec$Context;)V +Lorg/apache/commons/codec/binary/BaseNCodec; +HSPLorg/apache/commons/codec/binary/BaseNCodec;->()V +HSPLorg/apache/commons/codec/binary/BaseNCodec;->(IIIIBLorg/apache/commons/codec/CodecPolicy;)V +HSPLorg/apache/commons/codec/binary/BaseNCodec;->available(Lorg/apache/commons/codec/binary/BaseNCodec$Context;)I +HSPLorg/apache/commons/codec/binary/BaseNCodec;->containsAlphabetOrPad([B)Z +HSPLorg/apache/commons/codec/binary/BaseNCodec;->decode([B)[B +HSPLorg/apache/commons/codec/binary/BaseNCodec;->encode([B)[B +HSPLorg/apache/commons/codec/binary/BaseNCodec;->encode([BII)[B +HSPLorg/apache/commons/codec/binary/BaseNCodec;->ensureBufferSize(ILorg/apache/commons/codec/binary/BaseNCodec$Context;)[B +HSPLorg/apache/commons/codec/binary/BaseNCodec;->getDefaultBufferSize()I +HSPLorg/apache/commons/codec/binary/BaseNCodec;->hasData(Lorg/apache/commons/codec/binary/BaseNCodec$Context;)Z +HSPLorg/apache/commons/codec/binary/BaseNCodec;->isStrictDecoding()Z +HSPLorg/apache/commons/codec/binary/BaseNCodec;->readResults([BIILorg/apache/commons/codec/binary/BaseNCodec$Context;)I +Lorg/apache/commons/codec/binary/BaseNCodec$Context; +PLorg/apache/commons/codec/binary/BaseNCodec$Context;->()V +Lorg/apache/commons/codec/binary/BinaryCodec; +HSPLorg/apache/commons/codec/binary/BinaryCodec;->()V +HSPLorg/apache/commons/codec/binary/BinaryCodec;->isEmpty([B)Z +Lorg/bouncycastle/asn1/ASN1Encodable; +Lorg/bouncycastle/asn1/ASN1Object; +HSPLorg/bouncycastle/asn1/ASN1Object;->()V +Lorg/bouncycastle/asn1/ASN1ObjectIdentifier; +HSPLorg/bouncycastle/asn1/ASN1ObjectIdentifier;->()V +HSPLorg/bouncycastle/asn1/ASN1ObjectIdentifier;->(Ljava/lang/String;)V +HSPLorg/bouncycastle/asn1/ASN1ObjectIdentifier;->(Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;Ljava/lang/String;)V +HSPLorg/bouncycastle/asn1/ASN1ObjectIdentifier;->branch(Ljava/lang/String;)Lorg/bouncycastle/asn1/ASN1ObjectIdentifier; +HSPLorg/bouncycastle/asn1/ASN1ObjectIdentifier;->doOutput(Ljava/io/ByteArrayOutputStream;)V +HSPLorg/bouncycastle/asn1/ASN1ObjectIdentifier;->getContents()[B +HSPLorg/bouncycastle/asn1/ASN1ObjectIdentifier;->getId()Ljava/lang/String; +HSPLorg/bouncycastle/asn1/ASN1ObjectIdentifier;->hashCode()I +HSPLorg/bouncycastle/asn1/ASN1ObjectIdentifier;->intern()Lorg/bouncycastle/asn1/ASN1ObjectIdentifier; +HSPLorg/bouncycastle/asn1/ASN1ObjectIdentifier;->isValidIdentifier(Ljava/lang/String;)Z +HSPLorg/bouncycastle/asn1/ASN1ObjectIdentifier;->toString()Ljava/lang/String; +Lorg/bouncycastle/asn1/ASN1ObjectIdentifier$1; +HSPLorg/bouncycastle/asn1/ASN1ObjectIdentifier$1;->(Ljava/lang/Class;I)V +Lorg/bouncycastle/asn1/ASN1ObjectIdentifier$OidHandle; +HSPLorg/bouncycastle/asn1/ASN1ObjectIdentifier$OidHandle;->([B)V +HSPLorg/bouncycastle/asn1/ASN1ObjectIdentifier$OidHandle;->hashCode()I +Lorg/bouncycastle/asn1/ASN1Primitive; +HSPLorg/bouncycastle/asn1/ASN1Primitive;->()V +Lorg/bouncycastle/asn1/ASN1RelativeOID; +HSPLorg/bouncycastle/asn1/ASN1RelativeOID;->()V +HSPLorg/bouncycastle/asn1/ASN1RelativeOID;->isValidIdentifier(Ljava/lang/String;I)Z +HSPLorg/bouncycastle/asn1/ASN1RelativeOID;->writeField(Ljava/io/ByteArrayOutputStream;J)V +Lorg/bouncycastle/asn1/ASN1RelativeOID$1; +HSPLorg/bouncycastle/asn1/ASN1RelativeOID$1;->(Ljava/lang/Class;I)V +Lorg/bouncycastle/asn1/ASN1Tag; +HSPLorg/bouncycastle/asn1/ASN1Tag;->(II)V +HSPLorg/bouncycastle/asn1/ASN1Tag;->create(II)Lorg/bouncycastle/asn1/ASN1Tag; +Lorg/bouncycastle/asn1/ASN1Type; +HSPLorg/bouncycastle/asn1/ASN1Type;->(Ljava/lang/Class;)V +Lorg/bouncycastle/asn1/ASN1UniversalType; +HSPLorg/bouncycastle/asn1/ASN1UniversalType;->(Ljava/lang/Class;I)V +Lorg/bouncycastle/asn1/OIDTokenizer; +HSPLorg/bouncycastle/asn1/OIDTokenizer;->(Ljava/lang/String;)V +HSPLorg/bouncycastle/asn1/OIDTokenizer;->hasMoreTokens()Z +HSPLorg/bouncycastle/asn1/OIDTokenizer;->nextToken()Ljava/lang/String; +Lorg/bouncycastle/asn1/bc/BCObjectIdentifiers; +HSPLorg/bouncycastle/asn1/bc/BCObjectIdentifiers;->()V +Lorg/bouncycastle/asn1/cryptopro/CryptoProObjectIdentifiers; +HSPLorg/bouncycastle/asn1/cryptopro/CryptoProObjectIdentifiers;->()V +Lorg/bouncycastle/asn1/edec/EdECObjectIdentifiers; +HSPLorg/bouncycastle/asn1/edec/EdECObjectIdentifiers;->()V +Lorg/bouncycastle/asn1/gm/GMObjectIdentifiers; +HSPLorg/bouncycastle/asn1/gm/GMObjectIdentifiers;->()V +Lorg/bouncycastle/asn1/gnu/GNUObjectIdentifiers; +HSPLorg/bouncycastle/asn1/gnu/GNUObjectIdentifiers;->()V +Lorg/bouncycastle/asn1/iana/IANAObjectIdentifiers; +HSPLorg/bouncycastle/asn1/iana/IANAObjectIdentifiers;->()V +Lorg/bouncycastle/asn1/isara/IsaraObjectIdentifiers; +HSPLorg/bouncycastle/asn1/isara/IsaraObjectIdentifiers;->()V +Lorg/bouncycastle/asn1/iso/ISOIECObjectIdentifiers; +HSPLorg/bouncycastle/asn1/iso/ISOIECObjectIdentifiers;->()V +Lorg/bouncycastle/asn1/kisa/KISAObjectIdentifiers; +HSPLorg/bouncycastle/asn1/kisa/KISAObjectIdentifiers;->()V +Lorg/bouncycastle/asn1/misc/MiscObjectIdentifiers; +HSPLorg/bouncycastle/asn1/misc/MiscObjectIdentifiers;->()V +Lorg/bouncycastle/asn1/nist/NISTObjectIdentifiers; +HSPLorg/bouncycastle/asn1/nist/NISTObjectIdentifiers;->()V +Lorg/bouncycastle/asn1/nsri/NSRIObjectIdentifiers; +HSPLorg/bouncycastle/asn1/nsri/NSRIObjectIdentifiers;->()V +Lorg/bouncycastle/asn1/ntt/NTTObjectIdentifiers; +HSPLorg/bouncycastle/asn1/ntt/NTTObjectIdentifiers;->()V +Lorg/bouncycastle/asn1/oiw/OIWObjectIdentifiers; +HSPLorg/bouncycastle/asn1/oiw/OIWObjectIdentifiers;->()V +Lorg/bouncycastle/asn1/pkcs/PKCSObjectIdentifiers; +HSPLorg/bouncycastle/asn1/pkcs/PKCSObjectIdentifiers;->()V +Lorg/bouncycastle/asn1/rosstandart/RosstandartObjectIdentifiers; +HSPLorg/bouncycastle/asn1/rosstandart/RosstandartObjectIdentifiers;->()V +Lorg/bouncycastle/asn1/sec/SECObjectIdentifiers; +HSPLorg/bouncycastle/asn1/sec/SECObjectIdentifiers;->()V +Lorg/bouncycastle/asn1/teletrust/TeleTrusTObjectIdentifiers; +HSPLorg/bouncycastle/asn1/teletrust/TeleTrusTObjectIdentifiers;->()V +Lorg/bouncycastle/asn1/ua/UAObjectIdentifiers; +HSPLorg/bouncycastle/asn1/ua/UAObjectIdentifiers;->()V +Lorg/bouncycastle/asn1/x509/X509ObjectIdentifiers; +HSPLorg/bouncycastle/asn1/x509/X509ObjectIdentifiers;->()V +Lorg/bouncycastle/asn1/x9/X9ECParameters; +Lorg/bouncycastle/asn1/x9/X9ObjectIdentifiers; +HSPLorg/bouncycastle/asn1/x9/X9ObjectIdentifiers;->()V +Lorg/bouncycastle/crypto/CipherParameters; +Lorg/bouncycastle/crypto/CryptoServiceConstraintsException; +Lorg/bouncycastle/crypto/CryptoServiceProperties; +Lorg/bouncycastle/crypto/CryptoServicePurpose; +HSPLorg/bouncycastle/crypto/CryptoServicePurpose;->()V +HSPLorg/bouncycastle/crypto/CryptoServicePurpose;->(Ljava/lang/String;I)V +Lorg/bouncycastle/crypto/CryptoServicesConstraints; +Lorg/bouncycastle/crypto/CryptoServicesPermission; +HSPLorg/bouncycastle/crypto/CryptoServicesPermission;->(Ljava/lang/String;)V +Lorg/bouncycastle/crypto/CryptoServicesRegistrar; +HSPLorg/bouncycastle/crypto/CryptoServicesRegistrar;->()V +HSPLorg/bouncycastle/crypto/CryptoServicesRegistrar;->checkConstraints(Lorg/bouncycastle/crypto/CryptoServiceProperties;)V +HSPLorg/bouncycastle/crypto/CryptoServicesRegistrar;->chooseLowerBound(I)I +HSPLorg/bouncycastle/crypto/CryptoServicesRegistrar;->getDefaultConstraints()Lorg/bouncycastle/crypto/CryptoServicesConstraints; +HSPLorg/bouncycastle/crypto/CryptoServicesRegistrar;->localSetGlobalProperty(Lorg/bouncycastle/crypto/CryptoServicesRegistrar$Property;[Ljava/lang/Object;)V +HSPLorg/bouncycastle/crypto/CryptoServicesRegistrar;->localSetThread(Lorg/bouncycastle/crypto/CryptoServicesRegistrar$Property;[Ljava/lang/Object;)V +HSPLorg/bouncycastle/crypto/CryptoServicesRegistrar;->toDH(Lorg/bouncycastle/crypto/params/DSAParameters;)Lorg/bouncycastle/crypto/params/DHParameters; +Lorg/bouncycastle/crypto/CryptoServicesRegistrar$1; +HSPLorg/bouncycastle/crypto/CryptoServicesRegistrar$1;->()V +HSPLorg/bouncycastle/crypto/CryptoServicesRegistrar$1;->check(Lorg/bouncycastle/crypto/CryptoServiceProperties;)V +Lorg/bouncycastle/crypto/CryptoServicesRegistrar$Property; +HSPLorg/bouncycastle/crypto/CryptoServicesRegistrar$Property;->()V +HSPLorg/bouncycastle/crypto/CryptoServicesRegistrar$Property;->(Ljava/lang/String;Ljava/lang/Class;)V +HSPLorg/bouncycastle/crypto/CryptoServicesRegistrar$Property;->access$100(Lorg/bouncycastle/crypto/CryptoServicesRegistrar$Property;)Ljava/lang/String; +HSPLorg/bouncycastle/crypto/CryptoServicesRegistrar$Property;->access$200(Lorg/bouncycastle/crypto/CryptoServicesRegistrar$Property;)Ljava/lang/Class; +Lorg/bouncycastle/crypto/CryptoServicesRegistrar$ThreadLocalSecureRandomProvider; +HSPLorg/bouncycastle/crypto/CryptoServicesRegistrar$ThreadLocalSecureRandomProvider;->()V +HSPLorg/bouncycastle/crypto/CryptoServicesRegistrar$ThreadLocalSecureRandomProvider;->(Lorg/bouncycastle/crypto/CryptoServicesRegistrar$1;)V +Lorg/bouncycastle/crypto/DerivationFunction; +Lorg/bouncycastle/crypto/DerivationParameters; +Lorg/bouncycastle/crypto/Digest; +Lorg/bouncycastle/crypto/ExtendedDigest; +Lorg/bouncycastle/crypto/Mac; +Lorg/bouncycastle/crypto/PBEParametersGenerator; +HSPLorg/bouncycastle/crypto/PBEParametersGenerator;->()V +HSPLorg/bouncycastle/crypto/PBEParametersGenerator;->init([B[BI)V +Lorg/bouncycastle/crypto/SavableDigest; +Lorg/bouncycastle/crypto/SecureRandomProvider; +Lorg/bouncycastle/crypto/digests/EncodableDigest; +Lorg/bouncycastle/crypto/digests/GeneralDigest; +HSPLorg/bouncycastle/crypto/digests/GeneralDigest;->(Lorg/bouncycastle/crypto/CryptoServicePurpose;)V +HSPLorg/bouncycastle/crypto/digests/GeneralDigest;->(Lorg/bouncycastle/crypto/digests/GeneralDigest;)V +HSPLorg/bouncycastle/crypto/digests/GeneralDigest;->copyIn(Lorg/bouncycastle/crypto/digests/GeneralDigest;)V +HSPLorg/bouncycastle/crypto/digests/GeneralDigest;->getByteLength()I +HPLorg/bouncycastle/crypto/digests/GeneralDigest;->reset()V +Lorg/bouncycastle/crypto/digests/SHA256Digest; +HSPLorg/bouncycastle/crypto/digests/SHA256Digest;->()V +HSPLorg/bouncycastle/crypto/digests/SHA256Digest;->()V +HSPLorg/bouncycastle/crypto/digests/SHA256Digest;->(Lorg/bouncycastle/crypto/CryptoServicePurpose;)V +HSPLorg/bouncycastle/crypto/digests/SHA256Digest;->(Lorg/bouncycastle/crypto/digests/SHA256Digest;)V +HSPLorg/bouncycastle/crypto/digests/SHA256Digest;->Ch(III)I +HSPLorg/bouncycastle/crypto/digests/SHA256Digest;->Maj(III)I +HSPLorg/bouncycastle/crypto/digests/SHA256Digest;->Sum0(I)I +HSPLorg/bouncycastle/crypto/digests/SHA256Digest;->Sum1(I)I +HSPLorg/bouncycastle/crypto/digests/SHA256Digest;->Theta0(I)I +HSPLorg/bouncycastle/crypto/digests/SHA256Digest;->Theta1(I)I +HSPLorg/bouncycastle/crypto/digests/SHA256Digest;->copy()Lorg/bouncycastle/util/Memoable; +HSPLorg/bouncycastle/crypto/digests/SHA256Digest;->copyIn(Lorg/bouncycastle/crypto/digests/SHA256Digest;)V +HSPLorg/bouncycastle/crypto/digests/SHA256Digest;->cryptoServiceProperties()Lorg/bouncycastle/crypto/CryptoServiceProperties; +HSPLorg/bouncycastle/crypto/digests/SHA256Digest;->getAlgorithmName()Ljava/lang/String; +HSPLorg/bouncycastle/crypto/digests/SHA256Digest;->getDigestSize()I +HSPLorg/bouncycastle/crypto/digests/SHA256Digest;->processBlock()V +HSPLorg/bouncycastle/crypto/digests/SHA256Digest;->processLength(J)V +HSPLorg/bouncycastle/crypto/digests/SHA256Digest;->processWord([BI)V +HSPLorg/bouncycastle/crypto/digests/SHA256Digest;->reset()V +HSPLorg/bouncycastle/crypto/digests/SHA256Digest;->reset(Lorg/bouncycastle/util/Memoable;)V +Lorg/bouncycastle/crypto/digests/Utils; +HSPLorg/bouncycastle/crypto/digests/Utils;->getDefaultProperties(Lorg/bouncycastle/crypto/Digest;ILorg/bouncycastle/crypto/CryptoServicePurpose;)Lorg/bouncycastle/crypto/CryptoServiceProperties; +Lorg/bouncycastle/crypto/digests/Utils$DefaultPropertiesWithPRF; +HSPLorg/bouncycastle/crypto/digests/Utils$DefaultPropertiesWithPRF;->(IILjava/lang/String;Lorg/bouncycastle/crypto/CryptoServicePurpose;)V +Lorg/bouncycastle/crypto/generators/HKDFBytesGenerator; +HSPLorg/bouncycastle/crypto/generators/HKDFBytesGenerator;->(Lorg/bouncycastle/crypto/Digest;)V +HSPLorg/bouncycastle/crypto/generators/HKDFBytesGenerator;->expandNext()V +HSPLorg/bouncycastle/crypto/generators/HKDFBytesGenerator;->generateBytes([BII)I +HSPLorg/bouncycastle/crypto/generators/HKDFBytesGenerator;->init(Lorg/bouncycastle/crypto/DerivationParameters;)V +Lorg/bouncycastle/crypto/generators/PKCS5S2ParametersGenerator; +HSPLorg/bouncycastle/crypto/generators/PKCS5S2ParametersGenerator;->(Lorg/bouncycastle/crypto/Digest;)V +HPLorg/bouncycastle/crypto/generators/PKCS5S2ParametersGenerator;->F([BI[B[BI)V +HSPLorg/bouncycastle/crypto/generators/PKCS5S2ParametersGenerator;->generateDerivedKey(I)[B +HSPLorg/bouncycastle/crypto/generators/PKCS5S2ParametersGenerator;->generateDerivedMacParameters(I)Lorg/bouncycastle/crypto/CipherParameters; +HSPLorg/bouncycastle/crypto/generators/PKCS5S2ParametersGenerator;->generateDerivedParameters(I)Lorg/bouncycastle/crypto/CipherParameters; +Lorg/bouncycastle/crypto/macs/HMac; +HSPLorg/bouncycastle/crypto/macs/HMac;->()V +HSPLorg/bouncycastle/crypto/macs/HMac;->(Lorg/bouncycastle/crypto/Digest;)V +HSPLorg/bouncycastle/crypto/macs/HMac;->(Lorg/bouncycastle/crypto/Digest;I)V +HSPLorg/bouncycastle/crypto/macs/HMac;->getByteLength(Lorg/bouncycastle/crypto/Digest;)I +HSPLorg/bouncycastle/crypto/macs/HMac;->getMacSize()I +HSPLorg/bouncycastle/crypto/macs/HMac;->init(Lorg/bouncycastle/crypto/CipherParameters;)V +HSPLorg/bouncycastle/crypto/macs/HMac;->update(B)V +HSPLorg/bouncycastle/crypto/macs/HMac;->update([BII)V +HSPLorg/bouncycastle/crypto/macs/HMac;->xorPad([BIB)V +Lorg/bouncycastle/crypto/params/DHParameters; +HSPLorg/bouncycastle/crypto/params/DHParameters;->(Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;IILjava/math/BigInteger;Lorg/bouncycastle/crypto/params/DHValidationParameters;)V +Lorg/bouncycastle/crypto/params/DHValidationParameters; +HSPLorg/bouncycastle/crypto/params/DHValidationParameters;->([BI)V +Lorg/bouncycastle/crypto/params/DSAParameters; +HSPLorg/bouncycastle/crypto/params/DSAParameters;->(Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Lorg/bouncycastle/crypto/params/DSAValidationParameters;)V +HSPLorg/bouncycastle/crypto/params/DSAParameters;->getG()Ljava/math/BigInteger; +HSPLorg/bouncycastle/crypto/params/DSAParameters;->getP()Ljava/math/BigInteger; +HSPLorg/bouncycastle/crypto/params/DSAParameters;->getQ()Ljava/math/BigInteger; +HSPLorg/bouncycastle/crypto/params/DSAParameters;->getValidationParameters()Lorg/bouncycastle/crypto/params/DSAValidationParameters; +Lorg/bouncycastle/crypto/params/DSAValidationParameters; +HSPLorg/bouncycastle/crypto/params/DSAValidationParameters;->([BI)V +HSPLorg/bouncycastle/crypto/params/DSAValidationParameters;->([BII)V +HSPLorg/bouncycastle/crypto/params/DSAValidationParameters;->getCounter()I +HSPLorg/bouncycastle/crypto/params/DSAValidationParameters;->getSeed()[B +Lorg/bouncycastle/crypto/params/HKDFParameters; +HSPLorg/bouncycastle/crypto/params/HKDFParameters;->([BZ[B[B)V +HSPLorg/bouncycastle/crypto/params/HKDFParameters;->getIKM()[B +HSPLorg/bouncycastle/crypto/params/HKDFParameters;->getInfo()[B +HSPLorg/bouncycastle/crypto/params/HKDFParameters;->skipExtract()Z +HSPLorg/bouncycastle/crypto/params/HKDFParameters;->skipExtractParameters([B[B)Lorg/bouncycastle/crypto/params/HKDFParameters; +Lorg/bouncycastle/crypto/params/KeyParameter; +HSPLorg/bouncycastle/crypto/params/KeyParameter;->(I)V +HSPLorg/bouncycastle/crypto/params/KeyParameter;->([B)V +HSPLorg/bouncycastle/crypto/params/KeyParameter;->([BII)V +HSPLorg/bouncycastle/crypto/params/KeyParameter;->getKey()[B +Lorg/bouncycastle/internal/asn1/bsi/BSIObjectIdentifiers; +HSPLorg/bouncycastle/internal/asn1/bsi/BSIObjectIdentifiers;->()V +Lorg/bouncycastle/internal/asn1/cms/CMSObjectIdentifiers; +HSPLorg/bouncycastle/internal/asn1/cms/CMSObjectIdentifiers;->()V +Lorg/bouncycastle/internal/asn1/eac/EACObjectIdentifiers; +HSPLorg/bouncycastle/internal/asn1/eac/EACObjectIdentifiers;->()V +Lorg/bouncycastle/jcajce/provider/asymmetric/COMPOSITE; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/COMPOSITE;->()V +HSPLorg/bouncycastle/jcajce/provider/asymmetric/COMPOSITE;->access$000()Lorg/bouncycastle/jcajce/provider/util/AsymmetricKeyInfoConverter; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/COMPOSITE;->access$002(Lorg/bouncycastle/jcajce/provider/util/AsymmetricKeyInfoConverter;)Lorg/bouncycastle/jcajce/provider/util/AsymmetricKeyInfoConverter; +Lorg/bouncycastle/jcajce/provider/asymmetric/COMPOSITE$CompositeKeyInfoConverter; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/COMPOSITE$CompositeKeyInfoConverter;->(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/asymmetric/COMPOSITE$Mappings; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/COMPOSITE$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/asymmetric/COMPOSITE$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/asymmetric/DH; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/DH;->()V +HSPLorg/bouncycastle/jcajce/provider/asymmetric/DH;->access$000()Ljava/util/Map; +Lorg/bouncycastle/jcajce/provider/asymmetric/DH$Mappings; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/DH$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/asymmetric/DH$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/asymmetric/DSA$Mappings; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/DSA$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/asymmetric/DSA$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/asymmetric/DSTU4145$Mappings; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/DSTU4145$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/asymmetric/DSTU4145$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/asymmetric/Dilithium$Mappings; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/Dilithium$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/asymmetric/Dilithium$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/asymmetric/EC; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/EC;->()V +HSPLorg/bouncycastle/jcajce/provider/asymmetric/EC;->access$000()Ljava/util/Map; +Lorg/bouncycastle/jcajce/provider/asymmetric/EC$Mappings; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/EC$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/asymmetric/EC$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/asymmetric/ECGOST$Mappings; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/ECGOST$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/asymmetric/ECGOST$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/asymmetric/EXTERNAL; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/EXTERNAL;->()V +HSPLorg/bouncycastle/jcajce/provider/asymmetric/EXTERNAL;->access$000()Lorg/bouncycastle/jcajce/provider/util/AsymmetricKeyInfoConverter; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/EXTERNAL;->access$002(Lorg/bouncycastle/jcajce/provider/util/AsymmetricKeyInfoConverter;)Lorg/bouncycastle/jcajce/provider/util/AsymmetricKeyInfoConverter; +Lorg/bouncycastle/jcajce/provider/asymmetric/EXTERNAL$ExternalKeyInfoConverter; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/EXTERNAL$ExternalKeyInfoConverter;->(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/asymmetric/EXTERNAL$Mappings; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/EXTERNAL$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/asymmetric/EXTERNAL$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/asymmetric/EdEC$Mappings; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/EdEC$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/asymmetric/EdEC$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/asymmetric/ElGamal$Mappings; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/ElGamal$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/asymmetric/ElGamal$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/asymmetric/Falcon$Mappings; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/Falcon$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/asymmetric/Falcon$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/asymmetric/GM$Mappings; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/GM$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/asymmetric/GM$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/asymmetric/GOST$Mappings; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/GOST$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/asymmetric/GOST$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/asymmetric/IES$Mappings; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/IES$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/asymmetric/IES$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/asymmetric/LMS$Mappings; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/LMS$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/asymmetric/LMS$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/asymmetric/NTRU$Mappings; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/NTRU$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/asymmetric/NTRU$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/asymmetric/RSA; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/RSA;->()V +HSPLorg/bouncycastle/jcajce/provider/asymmetric/RSA;->access$000()Ljava/util/Map; +Lorg/bouncycastle/jcajce/provider/asymmetric/RSA$Mappings; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/RSA$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/asymmetric/RSA$Mappings;->addDigestSignature(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;Ljava/lang/String;Ljava/lang/String;Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;)V +HSPLorg/bouncycastle/jcajce/provider/asymmetric/RSA$Mappings;->addISO9796Signature(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;Ljava/lang/String;Ljava/lang/String;)V +HSPLorg/bouncycastle/jcajce/provider/asymmetric/RSA$Mappings;->addPSSSignature(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V +HSPLorg/bouncycastle/jcajce/provider/asymmetric/RSA$Mappings;->addPSSSignature(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;Ljava/lang/String;Ljava/lang/String;Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;)V +HSPLorg/bouncycastle/jcajce/provider/asymmetric/RSA$Mappings;->addX931Signature(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;Ljava/lang/String;Ljava/lang/String;)V +HSPLorg/bouncycastle/jcajce/provider/asymmetric/RSA$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/asymmetric/SPHINCSPlus$Mappings; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/SPHINCSPlus$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/asymmetric/SPHINCSPlus$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/asymmetric/X509$Mappings; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/X509$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/asymmetric/X509$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/asymmetric/dh/KeyFactorySpi; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/dh/KeyFactorySpi;->()V +Lorg/bouncycastle/jcajce/provider/asymmetric/dsa/DSAUtil; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/dsa/DSAUtil;->()V +Lorg/bouncycastle/jcajce/provider/asymmetric/dsa/KeyFactorySpi; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/dsa/KeyFactorySpi;->()V +Lorg/bouncycastle/jcajce/provider/asymmetric/dstu/KeyFactorySpi; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/dstu/KeyFactorySpi;->()V +Lorg/bouncycastle/jcajce/provider/asymmetric/ec/KeyFactorySpi; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/ec/KeyFactorySpi;->(Ljava/lang/String;Lorg/bouncycastle/jcajce/provider/config/ProviderConfiguration;)V +Lorg/bouncycastle/jcajce/provider/asymmetric/ec/KeyFactorySpi$EC; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/ec/KeyFactorySpi$EC;->()V +Lorg/bouncycastle/jcajce/provider/asymmetric/ec/KeyFactorySpi$ECMQV; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/ec/KeyFactorySpi$ECMQV;->()V +Lorg/bouncycastle/jcajce/provider/asymmetric/ecgost/KeyFactorySpi; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/ecgost/KeyFactorySpi;->()V +Lorg/bouncycastle/jcajce/provider/asymmetric/ecgost12/KeyFactorySpi; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/ecgost12/KeyFactorySpi;->()V +Lorg/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi;->()V +HSPLorg/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi;->(Ljava/lang/String;ZI)V +Lorg/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi$Ed25519; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi$Ed25519;->()V +Lorg/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi$Ed448; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi$Ed448;->()V +Lorg/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi$X25519; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi$X25519;->()V +Lorg/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi$X448; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi$X448;->()V +Lorg/bouncycastle/jcajce/provider/asymmetric/elgamal/KeyFactorySpi; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/elgamal/KeyFactorySpi;->()V +Lorg/bouncycastle/jcajce/provider/asymmetric/gost/KeyFactorySpi; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/gost/KeyFactorySpi;->()V +Lorg/bouncycastle/jcajce/provider/asymmetric/rsa/KeyFactorySpi; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/rsa/KeyFactorySpi;->()V +Lorg/bouncycastle/jcajce/provider/asymmetric/util/BaseKeyFactorySpi; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/util/BaseKeyFactorySpi;->()V +Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider; +Lorg/bouncycastle/jcajce/provider/config/ProviderConfiguration; +Lorg/bouncycastle/jcajce/provider/config/ProviderConfigurationPermission; +HSPLorg/bouncycastle/jcajce/provider/config/ProviderConfigurationPermission;->(Ljava/lang/String;Ljava/lang/String;)V +HSPLorg/bouncycastle/jcajce/provider/config/ProviderConfigurationPermission;->calculateMask(Ljava/lang/String;)I +Lorg/bouncycastle/jcajce/provider/digest/Blake2b; +Lorg/bouncycastle/jcajce/provider/digest/Blake2b$Mappings; +HSPLorg/bouncycastle/jcajce/provider/digest/Blake2b$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/Blake2b$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/Blake2b$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/digest/Blake2s; +Lorg/bouncycastle/jcajce/provider/digest/Blake2s$Mappings; +HSPLorg/bouncycastle/jcajce/provider/digest/Blake2s$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/Blake2s$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/Blake2s$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/digest/Blake3; +Lorg/bouncycastle/jcajce/provider/digest/Blake3$Mappings; +HSPLorg/bouncycastle/jcajce/provider/digest/Blake3$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/Blake3$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/Blake3$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/digest/DSTU7564; +Lorg/bouncycastle/jcajce/provider/digest/DSTU7564$Mappings; +HSPLorg/bouncycastle/jcajce/provider/digest/DSTU7564$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/DSTU7564$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/DSTU7564$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/digest/DigestAlgorithmProvider; +HSPLorg/bouncycastle/jcajce/provider/digest/DigestAlgorithmProvider;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/DigestAlgorithmProvider;->addHMACAlgorithm(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V +HSPLorg/bouncycastle/jcajce/provider/digest/DigestAlgorithmProvider;->addHMACAlias(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;Ljava/lang/String;Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;)V +HSPLorg/bouncycastle/jcajce/provider/digest/DigestAlgorithmProvider;->addKMACAlgorithm(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V +Lorg/bouncycastle/jcajce/provider/digest/GOST3411; +Lorg/bouncycastle/jcajce/provider/digest/GOST3411$Mappings; +HSPLorg/bouncycastle/jcajce/provider/digest/GOST3411$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/GOST3411$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/GOST3411$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/digest/Haraka; +Lorg/bouncycastle/jcajce/provider/digest/Haraka$Mappings; +HSPLorg/bouncycastle/jcajce/provider/digest/Haraka$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/Haraka$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/Haraka$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/digest/Keccak; +Lorg/bouncycastle/jcajce/provider/digest/Keccak$Mappings; +HSPLorg/bouncycastle/jcajce/provider/digest/Keccak$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/Keccak$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/Keccak$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/digest/MD2; +Lorg/bouncycastle/jcajce/provider/digest/MD2$Mappings; +HSPLorg/bouncycastle/jcajce/provider/digest/MD2$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/MD2$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/MD2$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/digest/MD4; +Lorg/bouncycastle/jcajce/provider/digest/MD4$Mappings; +HSPLorg/bouncycastle/jcajce/provider/digest/MD4$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/MD4$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/MD4$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/digest/MD5; +Lorg/bouncycastle/jcajce/provider/digest/MD5$Mappings; +HSPLorg/bouncycastle/jcajce/provider/digest/MD5$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/MD5$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/MD5$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/digest/RIPEMD128; +Lorg/bouncycastle/jcajce/provider/digest/RIPEMD128$Mappings; +HSPLorg/bouncycastle/jcajce/provider/digest/RIPEMD128$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/RIPEMD128$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/RIPEMD128$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/digest/RIPEMD160; +Lorg/bouncycastle/jcajce/provider/digest/RIPEMD160$Mappings; +HSPLorg/bouncycastle/jcajce/provider/digest/RIPEMD160$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/RIPEMD160$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/RIPEMD160$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/digest/RIPEMD256; +Lorg/bouncycastle/jcajce/provider/digest/RIPEMD256$Mappings; +HSPLorg/bouncycastle/jcajce/provider/digest/RIPEMD256$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/RIPEMD256$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/RIPEMD256$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/digest/RIPEMD320; +Lorg/bouncycastle/jcajce/provider/digest/RIPEMD320$Mappings; +HSPLorg/bouncycastle/jcajce/provider/digest/RIPEMD320$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/RIPEMD320$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/RIPEMD320$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/digest/SHA1; +Lorg/bouncycastle/jcajce/provider/digest/SHA1$Mappings; +HSPLorg/bouncycastle/jcajce/provider/digest/SHA1$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/SHA1$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/SHA1$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/digest/SHA224; +Lorg/bouncycastle/jcajce/provider/digest/SHA224$Mappings; +HSPLorg/bouncycastle/jcajce/provider/digest/SHA224$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/SHA224$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/SHA224$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/digest/SHA256; +Lorg/bouncycastle/jcajce/provider/digest/SHA256$Mappings; +HSPLorg/bouncycastle/jcajce/provider/digest/SHA256$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/SHA256$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/SHA256$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/digest/SHA3; +Lorg/bouncycastle/jcajce/provider/digest/SHA3$Mappings; +HSPLorg/bouncycastle/jcajce/provider/digest/SHA3$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/SHA3$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/SHA3$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/digest/SHA384; +Lorg/bouncycastle/jcajce/provider/digest/SHA384$Mappings; +HSPLorg/bouncycastle/jcajce/provider/digest/SHA384$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/SHA384$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/SHA384$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/digest/SHA512; +Lorg/bouncycastle/jcajce/provider/digest/SHA512$Mappings; +HSPLorg/bouncycastle/jcajce/provider/digest/SHA512$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/SHA512$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/SHA512$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/digest/SM3; +Lorg/bouncycastle/jcajce/provider/digest/SM3$Mappings; +HSPLorg/bouncycastle/jcajce/provider/digest/SM3$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/SM3$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/SM3$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/digest/Skein; +Lorg/bouncycastle/jcajce/provider/digest/Skein$Mappings; +HSPLorg/bouncycastle/jcajce/provider/digest/Skein$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/Skein$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/Skein$Mappings;->addSkeinMacAlgorithm(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;II)V +HSPLorg/bouncycastle/jcajce/provider/digest/Skein$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/digest/Tiger; +Lorg/bouncycastle/jcajce/provider/digest/Tiger$Mappings; +HSPLorg/bouncycastle/jcajce/provider/digest/Tiger$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/Tiger$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/Tiger$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/digest/Whirlpool; +Lorg/bouncycastle/jcajce/provider/digest/Whirlpool$Mappings; +HSPLorg/bouncycastle/jcajce/provider/digest/Whirlpool$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/Whirlpool$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/Whirlpool$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/drbg/DRBG; +HSPLorg/bouncycastle/jcajce/provider/drbg/DRBG;->()V +HSPLorg/bouncycastle/jcajce/provider/drbg/DRBG;->access$000()Ljava/lang/String; +Lorg/bouncycastle/jcajce/provider/drbg/DRBG$Mappings; +HSPLorg/bouncycastle/jcajce/provider/drbg/DRBG$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/drbg/DRBG$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/drbg/EntropyDaemon; +HSPLorg/bouncycastle/jcajce/provider/drbg/EntropyDaemon;->()V +HSPLorg/bouncycastle/jcajce/provider/drbg/EntropyDaemon;->()V +Lorg/bouncycastle/jcajce/provider/keystore/BC$Mappings; +HSPLorg/bouncycastle/jcajce/provider/keystore/BC$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/keystore/BC$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/keystore/BCFKS$Mappings; +HSPLorg/bouncycastle/jcajce/provider/keystore/BCFKS$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/keystore/BCFKS$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/keystore/PKCS12$Mappings; +HSPLorg/bouncycastle/jcajce/provider/keystore/PKCS12$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/keystore/PKCS12$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/AES; +HSPLorg/bouncycastle/jcajce/provider/symmetric/AES;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/AES;->access$100()Ljava/util/Map; +Lorg/bouncycastle/jcajce/provider/symmetric/AES$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/AES$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/AES$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/AES$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/ARC4; +Lorg/bouncycastle/jcajce/provider/symmetric/ARC4$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/ARC4$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/ARC4$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/ARC4$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/ARIA; +Lorg/bouncycastle/jcajce/provider/symmetric/ARIA$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/ARIA$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/ARIA$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/ARIA$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/Blowfish; +Lorg/bouncycastle/jcajce/provider/symmetric/Blowfish$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/Blowfish$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/Blowfish$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/Blowfish$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/CAST5; +Lorg/bouncycastle/jcajce/provider/symmetric/CAST5$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/CAST5$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/CAST5$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/CAST5$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/CAST6; +Lorg/bouncycastle/jcajce/provider/symmetric/CAST6$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/CAST6$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/CAST6$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/CAST6$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/Camellia; +Lorg/bouncycastle/jcajce/provider/symmetric/Camellia$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/Camellia$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/Camellia$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/Camellia$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/ChaCha; +Lorg/bouncycastle/jcajce/provider/symmetric/ChaCha$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/ChaCha$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/ChaCha$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/ChaCha$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/DES; +Lorg/bouncycastle/jcajce/provider/symmetric/DES$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/DES$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/DES$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/DES$Mappings;->addAlias(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;Ljava/lang/String;)V +HSPLorg/bouncycastle/jcajce/provider/symmetric/DES$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/DESede; +Lorg/bouncycastle/jcajce/provider/symmetric/DESede$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/DESede$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/DESede$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/DESede$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/DSTU7624; +Lorg/bouncycastle/jcajce/provider/symmetric/DSTU7624$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/DSTU7624$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/DSTU7624$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/DSTU7624$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/GOST28147; +Lorg/bouncycastle/jcajce/provider/symmetric/GOST28147$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/GOST28147$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/GOST28147$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/GOST28147$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/GOST3412_2015; +Lorg/bouncycastle/jcajce/provider/symmetric/GOST3412_2015$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/GOST3412_2015$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/GOST3412_2015$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/GOST3412_2015$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/Grain128; +Lorg/bouncycastle/jcajce/provider/symmetric/Grain128$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/Grain128$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/Grain128$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/Grain128$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/Grainv1; +Lorg/bouncycastle/jcajce/provider/symmetric/Grainv1$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/Grainv1$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/Grainv1$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/Grainv1$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/HC128; +Lorg/bouncycastle/jcajce/provider/symmetric/HC128$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/HC128$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/HC128$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/HC128$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/HC256; +Lorg/bouncycastle/jcajce/provider/symmetric/HC256$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/HC256$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/HC256$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/HC256$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/IDEA; +Lorg/bouncycastle/jcajce/provider/symmetric/IDEA$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/IDEA$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/IDEA$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/IDEA$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/Noekeon; +Lorg/bouncycastle/jcajce/provider/symmetric/Noekeon$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/Noekeon$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/Noekeon$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/Noekeon$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/OpenSSLPBKDF; +Lorg/bouncycastle/jcajce/provider/symmetric/OpenSSLPBKDF$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/OpenSSLPBKDF$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/OpenSSLPBKDF$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/OpenSSLPBKDF$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/PBEPBKDF1; +Lorg/bouncycastle/jcajce/provider/symmetric/PBEPBKDF1$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/PBEPBKDF1$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/PBEPBKDF1$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/PBEPBKDF1$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/PBEPBKDF2; +Lorg/bouncycastle/jcajce/provider/symmetric/PBEPBKDF2$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/PBEPBKDF2$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/PBEPBKDF2$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/PBEPBKDF2$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/PBEPKCS12; +Lorg/bouncycastle/jcajce/provider/symmetric/PBEPKCS12$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/PBEPKCS12$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/PBEPKCS12$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/PBEPKCS12$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/Poly1305; +Lorg/bouncycastle/jcajce/provider/symmetric/Poly1305$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/Poly1305$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/Poly1305$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/Poly1305$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/RC2; +Lorg/bouncycastle/jcajce/provider/symmetric/RC2$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/RC2$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/RC2$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/RC2$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/RC5; +Lorg/bouncycastle/jcajce/provider/symmetric/RC5$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/RC5$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/RC5$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/RC5$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/RC6; +Lorg/bouncycastle/jcajce/provider/symmetric/RC6$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/RC6$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/RC6$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/RC6$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/Rijndael; +Lorg/bouncycastle/jcajce/provider/symmetric/Rijndael$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/Rijndael$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/Rijndael$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/Rijndael$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/SCRYPT; +Lorg/bouncycastle/jcajce/provider/symmetric/SCRYPT$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/SCRYPT$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/SCRYPT$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/SCRYPT$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/SEED; +Lorg/bouncycastle/jcajce/provider/symmetric/SEED$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/SEED$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/SEED$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/SEED$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/SM4; +Lorg/bouncycastle/jcajce/provider/symmetric/SM4$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/SM4$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/SM4$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/SM4$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/Salsa20; +Lorg/bouncycastle/jcajce/provider/symmetric/Salsa20$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/Salsa20$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/Salsa20$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/Salsa20$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/Serpent; +Lorg/bouncycastle/jcajce/provider/symmetric/Serpent$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/Serpent$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/Serpent$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/Serpent$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/Shacal2; +Lorg/bouncycastle/jcajce/provider/symmetric/Shacal2$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/Shacal2$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/Shacal2$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/Shacal2$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/SipHash; +Lorg/bouncycastle/jcajce/provider/symmetric/SipHash$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/SipHash$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/SipHash$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/SipHash$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/SipHash128; +Lorg/bouncycastle/jcajce/provider/symmetric/SipHash128$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/SipHash128$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/SipHash128$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/SipHash128$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/Skipjack; +Lorg/bouncycastle/jcajce/provider/symmetric/Skipjack$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/Skipjack$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/Skipjack$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/Skipjack$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/SymmetricAlgorithmProvider; +HSPLorg/bouncycastle/jcajce/provider/symmetric/SymmetricAlgorithmProvider;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/SymmetricAlgorithmProvider;->addCMacAlgorithm(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V +HSPLorg/bouncycastle/jcajce/provider/symmetric/SymmetricAlgorithmProvider;->addGMacAlgorithm(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V +HSPLorg/bouncycastle/jcajce/provider/symmetric/SymmetricAlgorithmProvider;->addPoly1305Algorithm(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V +Lorg/bouncycastle/jcajce/provider/symmetric/TEA; +Lorg/bouncycastle/jcajce/provider/symmetric/TEA$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/TEA$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/TEA$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/TEA$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/TLSKDF; +Lorg/bouncycastle/jcajce/provider/symmetric/TLSKDF$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/TLSKDF$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/TLSKDF$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/TLSKDF$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/Threefish; +Lorg/bouncycastle/jcajce/provider/symmetric/Threefish$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/Threefish$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/Threefish$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/Threefish$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/Twofish; +Lorg/bouncycastle/jcajce/provider/symmetric/Twofish$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/Twofish$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/Twofish$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/Twofish$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/VMPC; +Lorg/bouncycastle/jcajce/provider/symmetric/VMPC$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/VMPC$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/VMPC$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/VMPC$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/VMPCKSA3; +Lorg/bouncycastle/jcajce/provider/symmetric/VMPCKSA3$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/VMPCKSA3$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/VMPCKSA3$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/VMPCKSA3$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/XSalsa20; +Lorg/bouncycastle/jcajce/provider/symmetric/XSalsa20$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/XSalsa20$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/XSalsa20$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/XSalsa20$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/XTEA; +Lorg/bouncycastle/jcajce/provider/symmetric/XTEA$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/XTEA$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/XTEA$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/XTEA$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/Zuc; +Lorg/bouncycastle/jcajce/provider/symmetric/Zuc$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/Zuc$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/Zuc$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/Zuc$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/util/ClassUtil; +HSPLorg/bouncycastle/jcajce/provider/symmetric/util/ClassUtil;->loadClass(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Class; +Lorg/bouncycastle/jcajce/provider/util/AlgorithmProvider; +HSPLorg/bouncycastle/jcajce/provider/util/AlgorithmProvider;->()V +Lorg/bouncycastle/jcajce/provider/util/AsymmetricAlgorithmProvider; +HSPLorg/bouncycastle/jcajce/provider/util/AsymmetricAlgorithmProvider;->()V +HSPLorg/bouncycastle/jcajce/provider/util/AsymmetricAlgorithmProvider;->addKeyFactoryAlgorithm(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;Ljava/lang/String;Ljava/lang/String;Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;Lorg/bouncycastle/jcajce/provider/util/AsymmetricKeyInfoConverter;)V +HSPLorg/bouncycastle/jcajce/provider/util/AsymmetricAlgorithmProvider;->addKeyPairGeneratorAlgorithm(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;Ljava/lang/String;Ljava/lang/String;Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;)V +HSPLorg/bouncycastle/jcajce/provider/util/AsymmetricAlgorithmProvider;->addSignatureAlgorithm(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V +HSPLorg/bouncycastle/jcajce/provider/util/AsymmetricAlgorithmProvider;->addSignatureAlgorithm(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;)V +HSPLorg/bouncycastle/jcajce/provider/util/AsymmetricAlgorithmProvider;->addSignatureAlgorithm(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;Ljava/util/Map;)V +HSPLorg/bouncycastle/jcajce/provider/util/AsymmetricAlgorithmProvider;->addSignatureAlgorithm(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;Ljava/lang/String;Ljava/lang/String;Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;)V +HSPLorg/bouncycastle/jcajce/provider/util/AsymmetricAlgorithmProvider;->registerKeyFactoryOid(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;Ljava/lang/String;Lorg/bouncycastle/jcajce/provider/util/AsymmetricKeyInfoConverter;)V +HSPLorg/bouncycastle/jcajce/provider/util/AsymmetricAlgorithmProvider;->registerOid(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;Ljava/lang/String;Lorg/bouncycastle/jcajce/provider/util/AsymmetricKeyInfoConverter;)V +HSPLorg/bouncycastle/jcajce/provider/util/AsymmetricAlgorithmProvider;->registerOidAlgorithmParameterGenerator(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;Ljava/lang/String;)V +HSPLorg/bouncycastle/jcajce/provider/util/AsymmetricAlgorithmProvider;->registerOidAlgorithmParameters(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;Ljava/lang/String;)V +Lorg/bouncycastle/jcajce/provider/util/AsymmetricKeyInfoConverter; +Lorg/bouncycastle/jce/provider/BouncyCastleProvider; +HSPLorg/bouncycastle/jce/provider/BouncyCastleProvider;->()V +HSPLorg/bouncycastle/jce/provider/BouncyCastleProvider;->()V +HSPLorg/bouncycastle/jce/provider/BouncyCastleProvider;->access$000(Lorg/bouncycastle/jce/provider/BouncyCastleProvider;)V +HSPLorg/bouncycastle/jce/provider/BouncyCastleProvider;->access$101(Lorg/bouncycastle/jce/provider/BouncyCastleProvider;Ljava/lang/String;Ljava/lang/String;)Ljava/security/Provider$Service; +HSPLorg/bouncycastle/jce/provider/BouncyCastleProvider;->access$200(Lorg/bouncycastle/jce/provider/BouncyCastleProvider;)Ljava/util/Map; +HSPLorg/bouncycastle/jce/provider/BouncyCastleProvider;->access$301(Lorg/bouncycastle/jce/provider/BouncyCastleProvider;Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/bouncycastle/jce/provider/BouncyCastleProvider;->access$401(Lorg/bouncycastle/jce/provider/BouncyCastleProvider;Ljava/security/Provider$Service;)V +HSPLorg/bouncycastle/jce/provider/BouncyCastleProvider;->addAlgorithm(Ljava/lang/String;Ljava/lang/String;)V +HSPLorg/bouncycastle/jce/provider/BouncyCastleProvider;->addAlgorithm(Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;)V +HSPLorg/bouncycastle/jce/provider/BouncyCastleProvider;->addAlgorithm(Ljava/lang/String;Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;Ljava/lang/String;)V +HSPLorg/bouncycastle/jce/provider/BouncyCastleProvider;->addAlgorithm(Ljava/lang/String;Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;Ljava/lang/String;Ljava/util/Map;)V +HSPLorg/bouncycastle/jce/provider/BouncyCastleProvider;->addAttributes(Ljava/lang/String;Ljava/util/Map;)V +HSPLorg/bouncycastle/jce/provider/BouncyCastleProvider;->addKeyInfoConverter(Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;Lorg/bouncycastle/jcajce/provider/util/AsymmetricKeyInfoConverter;)V +HSPLorg/bouncycastle/jce/provider/BouncyCastleProvider;->getService(Ljava/lang/String;Ljava/lang/String;)Ljava/security/Provider$Service; +HSPLorg/bouncycastle/jce/provider/BouncyCastleProvider;->hasAlgorithm(Ljava/lang/String;Ljava/lang/String;)Z +HSPLorg/bouncycastle/jce/provider/BouncyCastleProvider;->loadAlgorithms(Ljava/lang/String;[Ljava/lang/String;)V +HSPLorg/bouncycastle/jce/provider/BouncyCastleProvider;->loadAlgorithms(Ljava/lang/String;[Lorg/bouncycastle/crypto/CryptoServiceProperties;)V +HSPLorg/bouncycastle/jce/provider/BouncyCastleProvider;->loadPQCKeys()V +HSPLorg/bouncycastle/jce/provider/BouncyCastleProvider;->loadServiceClass(Ljava/lang/String;Ljava/lang/String;)V +HSPLorg/bouncycastle/jce/provider/BouncyCastleProvider;->service(Ljava/lang/String;I)Lorg/bouncycastle/crypto/CryptoServiceProperties; +HSPLorg/bouncycastle/jce/provider/BouncyCastleProvider;->setup()V +Lorg/bouncycastle/jce/provider/BouncyCastleProvider$1; +HSPLorg/bouncycastle/jce/provider/BouncyCastleProvider$1;->(Lorg/bouncycastle/jce/provider/BouncyCastleProvider;)V +HSPLorg/bouncycastle/jce/provider/BouncyCastleProvider$1;->run()Ljava/lang/Object; +Lorg/bouncycastle/jce/provider/BouncyCastleProvider$2; +HSPLorg/bouncycastle/jce/provider/BouncyCastleProvider$2;->(Lorg/bouncycastle/jce/provider/BouncyCastleProvider;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V +HSPLorg/bouncycastle/jce/provider/BouncyCastleProvider$2;->run()Ljava/lang/Object; +HSPLorg/bouncycastle/jce/provider/BouncyCastleProvider$2;->run()Ljava/security/Provider$Service; +Lorg/bouncycastle/jce/provider/BouncyCastleProvider$JcaCryptoService; +HSPLorg/bouncycastle/jce/provider/BouncyCastleProvider$JcaCryptoService;->(Ljava/lang/String;I)V +HSPLorg/bouncycastle/jce/provider/BouncyCastleProvider$JcaCryptoService;->getServiceName()Ljava/lang/String; +Lorg/bouncycastle/jce/provider/BouncyCastleProviderConfiguration; +HSPLorg/bouncycastle/jce/provider/BouncyCastleProviderConfiguration;->()V +HSPLorg/bouncycastle/jce/provider/BouncyCastleProviderConfiguration;->()V +Lorg/bouncycastle/pqc/asn1/PQCObjectIdentifiers; +HSPLorg/bouncycastle/pqc/asn1/PQCObjectIdentifiers;->()V +Lorg/bouncycastle/pqc/jcajce/provider/bike/BIKEKeyFactorySpi; +HSPLorg/bouncycastle/pqc/jcajce/provider/bike/BIKEKeyFactorySpi;->()V +Lorg/bouncycastle/pqc/jcajce/provider/cmce/CMCEKeyFactorySpi; +HSPLorg/bouncycastle/pqc/jcajce/provider/cmce/CMCEKeyFactorySpi;->()V +Lorg/bouncycastle/pqc/jcajce/provider/dilithium/DilithiumKeyFactorySpi; +HSPLorg/bouncycastle/pqc/jcajce/provider/dilithium/DilithiumKeyFactorySpi;->()V +HSPLorg/bouncycastle/pqc/jcajce/provider/dilithium/DilithiumKeyFactorySpi;->()V +HSPLorg/bouncycastle/pqc/jcajce/provider/dilithium/DilithiumKeyFactorySpi;->(Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;)V +Lorg/bouncycastle/pqc/jcajce/provider/dilithium/DilithiumKeyFactorySpi$Base2; +HSPLorg/bouncycastle/pqc/jcajce/provider/dilithium/DilithiumKeyFactorySpi$Base2;->()V +Lorg/bouncycastle/pqc/jcajce/provider/dilithium/DilithiumKeyFactorySpi$Base3; +HSPLorg/bouncycastle/pqc/jcajce/provider/dilithium/DilithiumKeyFactorySpi$Base3;->()V +Lorg/bouncycastle/pqc/jcajce/provider/dilithium/DilithiumKeyFactorySpi$Base5; +HSPLorg/bouncycastle/pqc/jcajce/provider/dilithium/DilithiumKeyFactorySpi$Base5;->()V +Lorg/bouncycastle/pqc/jcajce/provider/falcon/FalconKeyFactorySpi; +HSPLorg/bouncycastle/pqc/jcajce/provider/falcon/FalconKeyFactorySpi;->()V +HSPLorg/bouncycastle/pqc/jcajce/provider/falcon/FalconKeyFactorySpi;->()V +HSPLorg/bouncycastle/pqc/jcajce/provider/falcon/FalconKeyFactorySpi;->(Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;)V +Lorg/bouncycastle/pqc/jcajce/provider/falcon/FalconKeyFactorySpi$Falcon1024; +HSPLorg/bouncycastle/pqc/jcajce/provider/falcon/FalconKeyFactorySpi$Falcon1024;->()V +Lorg/bouncycastle/pqc/jcajce/provider/falcon/FalconKeyFactorySpi$Falcon512; +HSPLorg/bouncycastle/pqc/jcajce/provider/falcon/FalconKeyFactorySpi$Falcon512;->()V +Lorg/bouncycastle/pqc/jcajce/provider/hqc/HQCKeyFactorySpi; +HSPLorg/bouncycastle/pqc/jcajce/provider/hqc/HQCKeyFactorySpi;->()V +Lorg/bouncycastle/pqc/jcajce/provider/kyber/KyberKeyFactorySpi; +HSPLorg/bouncycastle/pqc/jcajce/provider/kyber/KyberKeyFactorySpi;->()V +HSPLorg/bouncycastle/pqc/jcajce/provider/kyber/KyberKeyFactorySpi;->()V +Lorg/bouncycastle/pqc/jcajce/provider/lms/LMSKeyFactorySpi; +HSPLorg/bouncycastle/pqc/jcajce/provider/lms/LMSKeyFactorySpi;->()V +Lorg/bouncycastle/pqc/jcajce/provider/newhope/NHKeyFactorySpi; +HSPLorg/bouncycastle/pqc/jcajce/provider/newhope/NHKeyFactorySpi;->()V +Lorg/bouncycastle/pqc/jcajce/provider/ntru/NTRUKeyFactorySpi; +HSPLorg/bouncycastle/pqc/jcajce/provider/ntru/NTRUKeyFactorySpi;->()V +Lorg/bouncycastle/pqc/jcajce/provider/picnic/PicnicKeyFactorySpi; +HSPLorg/bouncycastle/pqc/jcajce/provider/picnic/PicnicKeyFactorySpi;->()V +Lorg/bouncycastle/pqc/jcajce/provider/sphincs/Sphincs256KeyFactorySpi; +HSPLorg/bouncycastle/pqc/jcajce/provider/sphincs/Sphincs256KeyFactorySpi;->()V +Lorg/bouncycastle/pqc/jcajce/provider/sphincsplus/SPHINCSPlusKeyFactorySpi; +HSPLorg/bouncycastle/pqc/jcajce/provider/sphincsplus/SPHINCSPlusKeyFactorySpi;->()V +Lorg/bouncycastle/pqc/jcajce/provider/util/BaseKeyFactorySpi; +HSPLorg/bouncycastle/pqc/jcajce/provider/util/BaseKeyFactorySpi;->(Ljava/util/Set;)V +HSPLorg/bouncycastle/pqc/jcajce/provider/util/BaseKeyFactorySpi;->(Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;)V +Lorg/bouncycastle/pqc/jcajce/provider/xmss/XMSSKeyFactorySpi; +HSPLorg/bouncycastle/pqc/jcajce/provider/xmss/XMSSKeyFactorySpi;->()V +Lorg/bouncycastle/pqc/jcajce/provider/xmss/XMSSMTKeyFactorySpi; +HSPLorg/bouncycastle/pqc/jcajce/provider/xmss/XMSSMTKeyFactorySpi;->()V +Lorg/bouncycastle/util/Arrays; +HSPLorg/bouncycastle/util/Arrays;->clone([B)[B +HSPLorg/bouncycastle/util/Arrays;->hashCode([B)I +Lorg/bouncycastle/util/Encodable; +Lorg/bouncycastle/util/Integers; +HSPLorg/bouncycastle/util/Integers;->valueOf(I)Ljava/lang/Integer; +Lorg/bouncycastle/util/Memoable; +Lorg/bouncycastle/util/Pack; +HPLorg/bouncycastle/util/Pack;->bigEndianToInt([BI)I +HSPLorg/bouncycastle/util/Pack;->intToBigEndian(I[BI)V +Lorg/bouncycastle/util/Properties; +HSPLorg/bouncycastle/util/Properties;->()V +HSPLorg/bouncycastle/util/Properties;->getPropertyValue(Ljava/lang/String;)Ljava/lang/String; +HSPLorg/bouncycastle/util/Properties;->isOverrideSet(Ljava/lang/String;)Z +HSPLorg/bouncycastle/util/Properties;->isSetTrue(Ljava/lang/String;)Z +Lorg/bouncycastle/util/Properties$1; +HSPLorg/bouncycastle/util/Properties$1;->(Ljava/lang/String;)V +HSPLorg/bouncycastle/util/Properties$1;->run()Ljava/lang/Object; +Lorg/bouncycastle/util/Properties$2; +HSPLorg/bouncycastle/util/Properties$2;->(Ljava/lang/String;)V +HSPLorg/bouncycastle/util/Properties$2;->run()Ljava/lang/Object; +Lorg/bouncycastle/util/Strings; +HSPLorg/bouncycastle/util/Strings;->()V +HSPLorg/bouncycastle/util/Strings;->toLowerCase(Ljava/lang/String;)Ljava/lang/String; +HSPLorg/bouncycastle/util/Strings;->toUpperCase(Ljava/lang/String;)Ljava/lang/String; +Lorg/bouncycastle/util/Strings$1; +HSPLorg/bouncycastle/util/Strings$1;->()V +HSPLorg/bouncycastle/util/Strings$1;->run()Ljava/lang/Object; +HSPLorg/bouncycastle/util/Strings$1;->run()Ljava/lang/String; +Lorg/bouncycastle/util/encoders/Encoder; +Lorg/bouncycastle/util/encoders/Hex; +HSPLorg/bouncycastle/util/encoders/Hex;->()V +HSPLorg/bouncycastle/util/encoders/Hex;->decode(Ljava/lang/String;)[B +HSPLorg/bouncycastle/util/encoders/Hex;->decodeStrict(Ljava/lang/String;)[B +Lorg/bouncycastle/util/encoders/HexEncoder; +HSPLorg/bouncycastle/util/encoders/HexEncoder;->()V +HSPLorg/bouncycastle/util/encoders/HexEncoder;->decode(Ljava/lang/String;Ljava/io/OutputStream;)I +HSPLorg/bouncycastle/util/encoders/HexEncoder;->decodeStrict(Ljava/lang/String;II)[B +HSPLorg/bouncycastle/util/encoders/HexEncoder;->ignore(C)Z +HSPLorg/bouncycastle/util/encoders/HexEncoder;->initialiseDecodingTable()V +Lorg/kodein/di/Contexes; +HSPLorg/kodein/di/Contexes;->()V +HSPLorg/kodein/di/Contexes;->()V +HSPLorg/kodein/di/Contexes;->getAnyDIContext()Lorg/kodein/di/DIContext; +Lorg/kodein/di/Copy; +Lorg/kodein/di/Copy$None; +HSPLorg/kodein/di/Copy$None;->()V +HSPLorg/kodein/di/Copy$None;->()V +HSPLorg/kodein/di/Copy$None;->keySet(Lorg/kodein/di/DITree;)Ljava/util/Set; +Lorg/kodein/di/DI; +HSPLorg/kodein/di/DI;->()V +Lorg/kodein/di/DI$BindBuilder; +Lorg/kodein/di/DI$BindBuilder$WithScope; +Lorg/kodein/di/DI$Builder; +Lorg/kodein/di/DI$Builder$DefaultImpls; +HSPLorg/kodein/di/DI$Builder$DefaultImpls;->import$default(Lorg/kodein/di/DI$Builder;Lorg/kodein/di/DI$Module;ZILjava/lang/Object;)V +HSPLorg/kodein/di/DI$Builder$DefaultImpls;->importOnce$default(Lorg/kodein/di/DI$Builder;Lorg/kodein/di/DI$Module;ZILjava/lang/Object;)V +Lorg/kodein/di/DI$Builder$TypeBinder; +Lorg/kodein/di/DI$Companion; +HSPLorg/kodein/di/DI$Companion;->()V +HSPLorg/kodein/di/DI$Companion;->()V +HSPLorg/kodein/di/DI$Companion;->getDefaultFullContainerTreeOnError()Z +HSPLorg/kodein/di/DI$Companion;->getDefaultFullDescriptionOnError()Z +HSPLorg/kodein/di/DI$Companion;->lazy$default(Lorg/kodein/di/DI$Companion;ZLkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lorg/kodein/di/LazyDI; +HSPLorg/kodein/di/DI$Companion;->lazy(ZLkotlin/jvm/functions/Function1;)Lorg/kodein/di/LazyDI; +Lorg/kodein/di/DI$Companion$lazy$1; +HSPLorg/kodein/di/DI$Companion$lazy$1;->(ZLkotlin/jvm/functions/Function1;)V +HSPLorg/kodein/di/DI$Companion$lazy$1;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/DI$Companion$lazy$1;->invoke()Lorg/kodein/di/DI; +Lorg/kodein/di/DI$DefaultImpls; +HSPLorg/kodein/di/DI$DefaultImpls;->getDi(Lorg/kodein/di/DI;)Lorg/kodein/di/DI; +HSPLorg/kodein/di/DI$DefaultImpls;->getDiContext(Lorg/kodein/di/DI;)Lorg/kodein/di/DIContext; +HSPLorg/kodein/di/DI$DefaultImpls;->getDiTrigger(Lorg/kodein/di/DI;)Lorg/kodein/di/DITrigger; +Lorg/kodein/di/DI$Key; +HSPLorg/kodein/di/DI$Key;->(Lorg/kodein/type/TypeToken;Lorg/kodein/type/TypeToken;Lorg/kodein/type/TypeToken;Ljava/lang/Object;)V +PLorg/kodein/di/DI$Key;->copy$default(Lorg/kodein/di/DI$Key;Lorg/kodein/type/TypeToken;Lorg/kodein/type/TypeToken;Lorg/kodein/type/TypeToken;Ljava/lang/Object;ILjava/lang/Object;)Lorg/kodein/di/DI$Key; +PLorg/kodein/di/DI$Key;->copy(Lorg/kodein/type/TypeToken;Lorg/kodein/type/TypeToken;Lorg/kodein/type/TypeToken;Ljava/lang/Object;)Lorg/kodein/di/DI$Key; +HSPLorg/kodein/di/DI$Key;->equals(Ljava/lang/Object;)Z +HSPLorg/kodein/di/DI$Key;->getArgType()Lorg/kodein/type/TypeToken; +HSPLorg/kodein/di/DI$Key;->getContextType()Lorg/kodein/type/TypeToken; +HSPLorg/kodein/di/DI$Key;->getTag()Ljava/lang/Object; +HSPLorg/kodein/di/DI$Key;->getType()Lorg/kodein/type/TypeToken; +HSPLorg/kodein/di/DI$Key;->hashCode()I +Lorg/kodein/di/DI$MainBuilder; +Lorg/kodein/di/DI$MainBuilder$DefaultImpls; +HSPLorg/kodein/di/DI$MainBuilder$DefaultImpls;->extend$default(Lorg/kodein/di/DI$MainBuilder;Lorg/kodein/di/DI;ZLorg/kodein/di/Copy;ILjava/lang/Object;)V +Lorg/kodein/di/DI$Module; +HSPLorg/kodein/di/DI$Module;->(Ljava/lang/String;ZLjava/lang/String;Lkotlin/jvm/functions/Function1;)V +HSPLorg/kodein/di/DI$Module;->(Ljava/lang/String;ZLjava/lang/String;Lkotlin/jvm/functions/Function1;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLorg/kodein/di/DI$Module;->(ZLjava/lang/String;Lkotlin/jvm/functions/Function1;)V +HSPLorg/kodein/di/DI$Module;->getAllowSilentOverride()Z +HSPLorg/kodein/di/DI$Module;->getInit()Lkotlin/jvm/functions/Function1; +HSPLorg/kodein/di/DI$Module;->getName()Ljava/lang/String; +HSPLorg/kodein/di/DI$Module;->getPrefix()Ljava/lang/String; +Lorg/kodein/di/DIAware; +Lorg/kodein/di/DIAware$DefaultImpls; +HSPLorg/kodein/di/DIAware$DefaultImpls;->getDiContext(Lorg/kodein/di/DIAware;)Lorg/kodein/di/DIContext; +HSPLorg/kodein/di/DIAware$DefaultImpls;->getDiTrigger(Lorg/kodein/di/DIAware;)Lorg/kodein/di/DITrigger; +Lorg/kodein/di/DIAwareKt; +HSPLorg/kodein/di/DIAwareKt;->Instance(Lorg/kodein/di/DIAware;Lorg/kodein/type/TypeToken;Ljava/lang/Object;)Lorg/kodein/di/LazyDelegate; +HSPLorg/kodein/di/DIAwareKt;->On$default(Lorg/kodein/di/DIAware;Lorg/kodein/di/DIContext;Lorg/kodein/di/DITrigger;ILjava/lang/Object;)Lorg/kodein/di/DI; +HSPLorg/kodein/di/DIAwareKt;->On(Lorg/kodein/di/DIAware;Lorg/kodein/di/DIContext;Lorg/kodein/di/DITrigger;)Lorg/kodein/di/DI; +HSPLorg/kodein/di/DIAwareKt;->getAnyDIContext()Lorg/kodein/di/DIContext; +HSPLorg/kodein/di/DIAwareKt;->getDirect(Lorg/kodein/di/DIAware;)Lorg/kodein/di/DirectDI; +Lorg/kodein/di/DIAwareKt$Instance$1; +HSPLorg/kodein/di/DIAwareKt$Instance$1;->(Lorg/kodein/di/DIAware;Lorg/kodein/type/TypeToken;Ljava/lang/Object;)V +HSPLorg/kodein/di/DIAwareKt$Instance$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/kodein/di/DIAwareKt$Instance$1;->invoke(Lorg/kodein/di/DIContext;Ljava/lang/String;)Ljava/lang/Object; +Lorg/kodein/di/DIContainer; +Lorg/kodein/di/DIContainer$Builder; +Lorg/kodein/di/DIContainer$DefaultImpls; +HSPLorg/kodein/di/DIContainer$DefaultImpls;->allFactories$default(Lorg/kodein/di/DIContainer;Lorg/kodein/di/DI$Key;Ljava/lang/Object;IILjava/lang/Object;)Ljava/util/List; +HSPLorg/kodein/di/DIContainer$DefaultImpls;->allProviders$default(Lorg/kodein/di/DIContainer;Lorg/kodein/di/DI$Key;Ljava/lang/Object;IILjava/lang/Object;)Ljava/util/List; +HSPLorg/kodein/di/DIContainer$DefaultImpls;->allProviders(Lorg/kodein/di/DIContainer;Lorg/kodein/di/DI$Key;Ljava/lang/Object;I)Ljava/util/List; +HSPLorg/kodein/di/DIContainer$DefaultImpls;->factory$default(Lorg/kodein/di/DIContainer;Lorg/kodein/di/DI$Key;Ljava/lang/Object;IILjava/lang/Object;)Lkotlin/jvm/functions/Function1; +HSPLorg/kodein/di/DIContainer$DefaultImpls;->provider$default(Lorg/kodein/di/DIContainer;Lorg/kodein/di/DI$Key;Ljava/lang/Object;IILjava/lang/Object;)Lkotlin/jvm/functions/Function0; +HSPLorg/kodein/di/DIContainer$DefaultImpls;->provider(Lorg/kodein/di/DIContainer;Lorg/kodein/di/DI$Key;Ljava/lang/Object;I)Lkotlin/jvm/functions/Function0; +Lorg/kodein/di/DIContainer$DefaultImpls$allProviders$lambda$3$$inlined$toProvider$1; +HSPLorg/kodein/di/DIContainer$DefaultImpls$allProviders$lambda$3$$inlined$toProvider$1;->(Lkotlin/jvm/functions/Function1;)V +HSPLorg/kodein/di/DIContainer$DefaultImpls$allProviders$lambda$3$$inlined$toProvider$1;->invoke()Ljava/lang/Object; +Lorg/kodein/di/DIContainer$DefaultImpls$provider$$inlined$toProvider$1; +HSPLorg/kodein/di/DIContainer$DefaultImpls$provider$$inlined$toProvider$1;->(Lkotlin/jvm/functions/Function1;)V +HSPLorg/kodein/di/DIContainer$DefaultImpls$provider$$inlined$toProvider$1;->invoke()Ljava/lang/Object; +Lorg/kodein/di/DIContext; +HSPLorg/kodein/di/DIContext;->()V +Lorg/kodein/di/DIContext$Companion; +HSPLorg/kodein/di/DIContext$Companion;->()V +HSPLorg/kodein/di/DIContext$Companion;->()V +HSPLorg/kodein/di/DIContext$Companion;->invoke(Lorg/kodein/type/TypeToken;Ljava/lang/Object;)Lorg/kodein/di/DIContext; +Lorg/kodein/di/DIContext$Value; +HSPLorg/kodein/di/DIContext$Value;->(Lorg/kodein/type/TypeToken;Ljava/lang/Object;)V +HSPLorg/kodein/di/DIContext$Value;->getType()Lorg/kodein/type/TypeToken; +HSPLorg/kodein/di/DIContext$Value;->getValue()Ljava/lang/Object; +Lorg/kodein/di/DIDefining; +HSPLorg/kodein/di/DIDefining;->(Lorg/kodein/di/bindings/DIBinding;Ljava/lang/String;)V +HSPLorg/kodein/di/DIDefining;->getBinding()Lorg/kodein/di/bindings/DIBinding; +HSPLorg/kodein/di/DIDefining;->getFromModule()Ljava/lang/String; +Lorg/kodein/di/DIDefinition; +HSPLorg/kodein/di/DIDefinition;->(Lorg/kodein/di/bindings/DIBinding;Ljava/lang/String;Lorg/kodein/di/DITree;)V +HSPLorg/kodein/di/DIDefinition;->getTree()Lorg/kodein/di/DITree; +Lorg/kodein/di/DIProperty; +HSPLorg/kodein/di/DIProperty;->(Lorg/kodein/di/DITrigger;Lorg/kodein/di/DIContext;Lkotlin/jvm/functions/Function2;)V +HSPLorg/kodein/di/DIProperty;->access$getGet$p(Lorg/kodein/di/DIProperty;)Lkotlin/jvm/functions/Function2; +HSPLorg/kodein/di/DIProperty;->getOriginalContext()Lorg/kodein/di/DIContext; +HSPLorg/kodein/di/DIProperty;->provideDelegate(Ljava/lang/Object;Lkotlin/reflect/KProperty;)Lkotlin/Lazy; +Lorg/kodein/di/DIProperty$provideDelegate$1; +HSPLorg/kodein/di/DIProperty$provideDelegate$1;->(Ljava/lang/Object;Lorg/kodein/di/DIProperty;Lkotlin/reflect/KProperty;)V +HSPLorg/kodein/di/DIProperty$provideDelegate$1;->invoke()Ljava/lang/Object; +Lorg/kodein/di/DITree; +Lorg/kodein/di/DITree$DefaultImpls; +HSPLorg/kodein/di/DITree$DefaultImpls;->find$default(Lorg/kodein/di/DITree;Lorg/kodein/di/DI$Key;IZILjava/lang/Object;)Ljava/util/List; +Lorg/kodein/di/DITrigger; +Lorg/kodein/di/DIWrapper; +HSPLorg/kodein/di/DIWrapper;->(Lorg/kodein/di/DI;Lorg/kodein/di/DIContext;Lorg/kodein/di/DITrigger;)V +HSPLorg/kodein/di/DIWrapper;->(Lorg/kodein/di/DIAware;Lorg/kodein/di/DIContext;Lorg/kodein/di/DITrigger;)V +HSPLorg/kodein/di/DIWrapper;->getContainer()Lorg/kodein/di/DIContainer; +HSPLorg/kodein/di/DIWrapper;->getDi()Lorg/kodein/di/DI; +HSPLorg/kodein/di/DIWrapper;->getDiContext()Lorg/kodein/di/DIContext; +Lorg/kodein/di/DirectDI; +Lorg/kodein/di/DirectDI$DefaultImpls; +HSPLorg/kodein/di/DirectDI$DefaultImpls;->getDi(Lorg/kodein/di/DirectDI;)Lorg/kodein/di/DI; +Lorg/kodein/di/DirectDIAware; +Lorg/kodein/di/DirectDIBase; +Lorg/kodein/di/DirectDIBase$DefaultImpls; +HSPLorg/kodein/di/DirectDIBase$DefaultImpls;->getDi(Lorg/kodein/di/DirectDIBase;)Lorg/kodein/di/DI; +Lorg/kodein/di/LazyDI; +HSPLorg/kodein/di/LazyDI;->(Lkotlin/jvm/functions/Function0;)V +HSPLorg/kodein/di/LazyDI;->getBaseDI()Lorg/kodein/di/DI; +HSPLorg/kodein/di/LazyDI;->getContainer()Lorg/kodein/di/DIContainer; +HSPLorg/kodein/di/LazyDI;->getDi()Lorg/kodein/di/DI; +HSPLorg/kodein/di/LazyDI;->getDiContext()Lorg/kodein/di/DIContext; +HSPLorg/kodein/di/LazyDI;->getDiTrigger()Lorg/kodein/di/DITrigger; +HSPLorg/kodein/di/LazyDI;->getValue(Ljava/lang/Object;Lkotlin/reflect/KProperty;)Lorg/kodein/di/LazyDI; +Lorg/kodein/di/LazyDelegate; +Lorg/kodein/di/SearchSpecs; +PLorg/kodein/di/SearchSpecs;->(Lorg/kodein/type/TypeToken;Lorg/kodein/type/TypeToken;Lorg/kodein/type/TypeToken;Ljava/lang/Object;)V +HSPLorg/kodein/di/SearchSpecs;->getArgType()Lorg/kodein/type/TypeToken; +HSPLorg/kodein/di/SearchSpecs;->getContextType()Lorg/kodein/type/TypeToken; +HSPLorg/kodein/di/SearchSpecs;->getTag()Ljava/lang/Object; +HSPLorg/kodein/di/SearchSpecs;->getType()Lorg/kodein/type/TypeToken; +Lorg/kodein/di/SearchSpecs$NoDefinedTag; +HSPLorg/kodein/di/SearchSpecs$NoDefinedTag;->()V +HSPLorg/kodein/di/SearchSpecs$NoDefinedTag;->()V +Lorg/kodein/di/android/ClosestKt; +HSPLorg/kodein/di/android/ClosestKt;->access$closestDI(Ljava/lang/Object;Landroid/content/Context;)Lorg/kodein/di/DI; +HSPLorg/kodein/di/android/ClosestKt;->closestDI()Lorg/kodein/di/android/DIPropertyDelegateProvider; +HSPLorg/kodein/di/android/ClosestKt;->closestDI(Ljava/lang/Object;Landroid/content/Context;)Lorg/kodein/di/DI; +HSPLorg/kodein/di/android/ClosestKt;->closestDI(Lkotlin/jvm/functions/Function0;)Lorg/kodein/di/android/DIPropertyDelegateProvider; +Lorg/kodein/di/android/ContextDIPropertyDelegateProvider; +HSPLorg/kodein/di/android/ContextDIPropertyDelegateProvider;->()V +HSPLorg/kodein/di/android/ContextDIPropertyDelegateProvider;->provideDelegate(Landroid/content/Context;Lkotlin/reflect/KProperty;)Lkotlin/Lazy; +HSPLorg/kodein/di/android/ContextDIPropertyDelegateProvider;->provideDelegate(Ljava/lang/Object;Lkotlin/reflect/KProperty;)Lkotlin/Lazy; +Lorg/kodein/di/android/ContextDIPropertyDelegateProvider$provideDelegate$1; +HSPLorg/kodein/di/android/ContextDIPropertyDelegateProvider$provideDelegate$1;->(Landroid/content/Context;)V +HSPLorg/kodein/di/android/ContextDIPropertyDelegateProvider$provideDelegate$1;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ContextDIPropertyDelegateProvider$provideDelegate$1;->invoke()Lorg/kodein/di/DI; +Lorg/kodein/di/android/DIPropertyDelegateProvider; +Lorg/kodein/di/android/LazyContextDIPropertyDelegateProvider; +HSPLorg/kodein/di/android/LazyContextDIPropertyDelegateProvider;->(Lkotlin/jvm/functions/Function0;)V +HSPLorg/kodein/di/android/LazyContextDIPropertyDelegateProvider;->access$getGetContext$p(Lorg/kodein/di/android/LazyContextDIPropertyDelegateProvider;)Lkotlin/jvm/functions/Function0; +HSPLorg/kodein/di/android/LazyContextDIPropertyDelegateProvider;->provideDelegate(Ljava/lang/Object;Lkotlin/reflect/KProperty;)Lkotlin/Lazy; +Lorg/kodein/di/android/LazyContextDIPropertyDelegateProvider$provideDelegate$1; +HSPLorg/kodein/di/android/LazyContextDIPropertyDelegateProvider$provideDelegate$1;->(Ljava/lang/Object;Lorg/kodein/di/android/LazyContextDIPropertyDelegateProvider;)V +HSPLorg/kodein/di/android/LazyContextDIPropertyDelegateProvider$provideDelegate$1;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/LazyContextDIPropertyDelegateProvider$provideDelegate$1;->invoke()Lorg/kodein/di/DI; +Lorg/kodein/di/android/ModuleKt; +HSPLorg/kodein/di/android/ModuleKt;->()V +HSPLorg/kodein/di/android/ModuleKt;->androidCoreModule(Landroid/app/Application;)Lorg/kodein/di/DI$Module; +HSPLorg/kodein/di/android/ModuleKt;->getAndroidCoreContextTranslators()Lorg/kodein/di/DI$Module; +Lorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1;->invoke(Lorg/kodein/di/DI$Builder;)V +Lorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$2; +HSPLorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$2;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$2;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$3; +HSPLorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$3;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$3;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$4; +HSPLorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$4;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$4;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$5; +HSPLorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$5;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$5;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$invoke$$inlined$generic$10; +HSPLorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$invoke$$inlined$generic$10;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$invoke$$inlined$generic$2; +HSPLorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$invoke$$inlined$generic$2;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$invoke$$inlined$generic$3; +HSPLorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$invoke$$inlined$generic$3;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$invoke$$inlined$generic$4; +HSPLorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$invoke$$inlined$generic$4;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$invoke$$inlined$generic$5; +HSPLorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$invoke$$inlined$generic$5;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$invoke$$inlined$generic$6; +HSPLorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$invoke$$inlined$generic$6;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$invoke$$inlined$generic$7; +HSPLorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$invoke$$inlined$generic$7;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$invoke$$inlined$generic$8; +HSPLorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$invoke$$inlined$generic$8;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$invoke$$inlined$generic$9; +HSPLorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$invoke$$inlined$generic$9;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1;->(Landroid/app/Application;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1;->invoke(Lorg/kodein/di/DI$Builder;)V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$1;->(Landroid/app/Application;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$1;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$1;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$1$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$1$1;->(Landroid/app/Application;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$1$1;->invoke(Lorg/kodein/di/bindings/NoArgBindingDI;)Landroid/app/Application; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$1$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$1$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$10; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$10;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$10;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$10;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$10$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$10$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$10$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$10$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$10$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$10$invoke$$inlined$generic$2; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$10$invoke$$inlined$generic$2;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$11; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$11;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$11;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$11;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$11$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$11$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$11$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$11$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$11$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$12; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$12;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$12;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$12;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$12$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$12$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$12$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$12$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$12$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$13; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$13;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$13;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$13;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$13$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$13$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$13$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$13$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$13$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$14; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$14;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$14;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$14;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$14$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$14$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$14$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$14$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$14$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$15; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$15;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$15;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$15;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$15$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$15$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$15$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$15$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$15$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$16; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$16;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$16;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$16;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$16$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$16$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$16$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$16$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$16$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$17; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$17;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$17;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$17;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$17$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$17$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$17$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$17$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$17$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$18; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$18;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$18;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$18;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$18$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$18$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$18$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$18$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$18$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$19; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$19;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$19;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$19;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$19$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$19$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$19$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$19$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$19$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$2; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$2;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$2;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$2;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$2$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$2$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$2$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$2$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$2$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$20; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$20;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$20;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$20;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$20$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$20$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$20$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$20$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$20$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$21; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$21;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$21;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$21;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$21$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$21$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$21$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$21$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$21$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$22; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$22;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$22;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$22;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$22$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$22$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$22$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$22$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$22$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$23; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$23;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$23;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$23;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$23$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$23$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$23$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$23$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$23$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$24; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$24;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$24;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$24;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$24$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$24$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$24$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$24$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$24$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$25; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$25;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$25;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$25;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$25$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$25$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$25$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$25$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$25$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$26; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$26;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$26;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$26;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$26$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$26$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$26$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$26$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$26$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$27; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$27;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$27;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$27;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$27$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$27$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$27$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$27$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$27$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$28; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$28;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$28;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$28;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$28$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$28$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$28$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$28$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$28$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$29; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$29;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$29;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$29;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$29$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$29$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$29$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$29$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$29$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$3; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$3;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$3;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$3;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$3$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$3$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$3$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$3$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$3$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$30; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$30;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$30;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$30;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$30$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$30$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$30$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$30$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$30$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$31; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$31;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$31;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$31;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$31$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$31$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$31$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$31$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$31$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$32; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$32;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$32;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$32;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$32$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$32$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$32$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$32$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$32$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$33; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$33;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$33;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$33;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$33$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$33$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$33$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$33$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$33$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$34; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$34;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$34;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$34;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$34$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$34$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$34$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$34$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$34$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$35; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$35;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$35;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$35;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$35$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$35$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$35$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$35$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$35$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$36; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$36;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$36;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$36;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$36$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$36$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$36$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$36$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$36$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$37; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$37;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$37;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$37;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$37$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$37$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$37$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$37$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$37$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$38; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$38;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$38;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$38;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$38$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$38$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$38$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$38$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$38$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$39; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$39;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$39;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$39;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$39$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$39$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$39$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$39$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$39$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$4; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$4;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$4;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$4;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$4$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$4$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$4$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$4$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$4$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$40; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$40;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$40;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$40;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$40$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$40$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$40$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$40$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$40$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$41; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$41;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$41;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$41;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$41$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$41$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$41$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$41$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$41$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$42; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$42;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$42;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$42;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$42$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$42$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$42$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$42$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$42$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$43; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$43;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$43;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$43;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$43$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$43$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$43$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$43$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$43$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$44; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$44;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$44;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$44;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$44$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$44$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$44$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$44$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$44$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$45; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$45;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$45;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$45;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$45$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$45$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$45$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$45$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$45$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$46; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$46;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$46;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$46;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$46$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$46$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$46$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$46$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$46$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$47; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$47;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$47;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$47;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$47$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$47$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$47$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$47$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$47$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$48; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$48;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$48;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$48;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$48$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$48$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$48$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$48$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$48$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$49; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$49;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$49;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$49;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$49$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$49$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$49$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$49$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$49$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$5; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$5;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$5;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$5;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$5$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$5$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$5$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$5$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$5$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$50; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$50;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$50;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$50;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$50$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$50$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$50$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$50$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$50$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$51; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$51;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$51;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$51;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$51$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$51$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$51$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$51$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$51$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$52; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$52;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$52;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$52;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$52$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$52$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$52$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$52$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$52$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$53; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$53;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$53;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$53;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$53$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$53$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$53$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$53$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$53$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$54; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$54;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$54;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$54;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$54$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$54$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$54$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$54$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$54$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$55; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$55;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$55;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$55;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$55$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$55$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$55$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$55$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$55$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$56; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$56;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$56;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$56;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$56$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$56$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$56$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$56$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$56$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$57; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$57;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$57;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$57;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$57$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$57$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$57$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$57$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$57$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$58; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$58;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$58;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$58;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$58$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$58$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$58$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$58$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$58$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$59; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$59;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$59;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$59;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$59$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$59$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$59$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$59$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$59$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$6; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$6;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$6;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$6;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$6$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$6$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$6$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$6$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$6$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$60; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$60;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$60;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$60;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$60$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$60$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$60$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$60$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$60$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$61; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$61;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$61;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$61;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$61$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$61$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$61$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$61$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$61$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$62; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$62;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$62;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$62;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$62$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$62$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$62$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$62$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$62$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$63; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$63;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$63;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$63;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$63$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$63$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$63$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$63$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$63$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$64; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$64;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$64;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$64;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$64$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$64$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$64$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$64$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$64$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$7; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$7;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$7;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$7;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$7$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$7$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$7$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$7$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$7$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$8; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$8;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$8;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$8;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$8$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$8$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$8$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$8$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$8$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$9; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$9;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$9;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$9;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$9$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$9$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$9$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$9$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$9$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/x/ModuleKt; +HSPLorg/kodein/di/android/x/ModuleKt;->()V +HSPLorg/kodein/di/android/x/ModuleKt;->androidXModule(Landroid/app/Application;)Lorg/kodein/di/DI$Module; +HSPLorg/kodein/di/android/x/ModuleKt;->getAndroidXContextTranslators()Lorg/kodein/di/DI$Module; +Lorg/kodein/di/android/x/ModuleKt$androidXContextTranslators$1; +HSPLorg/kodein/di/android/x/ModuleKt$androidXContextTranslators$1;->()V +HSPLorg/kodein/di/android/x/ModuleKt$androidXContextTranslators$1;->()V +HSPLorg/kodein/di/android/x/ModuleKt$androidXContextTranslators$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/kodein/di/android/x/ModuleKt$androidXContextTranslators$1;->invoke(Lorg/kodein/di/DI$Builder;)V +Lorg/kodein/di/android/x/ModuleKt$androidXContextTranslators$1$1; +HSPLorg/kodein/di/android/x/ModuleKt$androidXContextTranslators$1$1;->()V +HSPLorg/kodein/di/android/x/ModuleKt$androidXContextTranslators$1$1;->()V +Lorg/kodein/di/android/x/ModuleKt$androidXContextTranslators$1$2; +HSPLorg/kodein/di/android/x/ModuleKt$androidXContextTranslators$1$2;->()V +HSPLorg/kodein/di/android/x/ModuleKt$androidXContextTranslators$1$2;->()V +Lorg/kodein/di/android/x/ModuleKt$androidXContextTranslators$1$3; +HSPLorg/kodein/di/android/x/ModuleKt$androidXContextTranslators$1$3;->()V +HSPLorg/kodein/di/android/x/ModuleKt$androidXContextTranslators$1$3;->()V +Lorg/kodein/di/android/x/ModuleKt$androidXContextTranslators$1$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/x/ModuleKt$androidXContextTranslators$1$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/x/ModuleKt$androidXContextTranslators$1$invoke$$inlined$generic$2; +HSPLorg/kodein/di/android/x/ModuleKt$androidXContextTranslators$1$invoke$$inlined$generic$2;->()V +Lorg/kodein/di/android/x/ModuleKt$androidXContextTranslators$1$invoke$$inlined$generic$3; +HSPLorg/kodein/di/android/x/ModuleKt$androidXContextTranslators$1$invoke$$inlined$generic$3;->()V +Lorg/kodein/di/android/x/ModuleKt$androidXContextTranslators$1$invoke$$inlined$generic$4; +HSPLorg/kodein/di/android/x/ModuleKt$androidXContextTranslators$1$invoke$$inlined$generic$4;->()V +Lorg/kodein/di/android/x/ModuleKt$androidXContextTranslators$1$invoke$$inlined$generic$5; +HSPLorg/kodein/di/android/x/ModuleKt$androidXContextTranslators$1$invoke$$inlined$generic$5;->()V +Lorg/kodein/di/android/x/ModuleKt$androidXContextTranslators$1$invoke$$inlined$generic$6; +HSPLorg/kodein/di/android/x/ModuleKt$androidXContextTranslators$1$invoke$$inlined$generic$6;->()V +Lorg/kodein/di/android/x/ModuleKt$androidXModule$1; +HSPLorg/kodein/di/android/x/ModuleKt$androidXModule$1;->(Landroid/app/Application;)V +HSPLorg/kodein/di/android/x/ModuleKt$androidXModule$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/kodein/di/android/x/ModuleKt$androidXModule$1;->invoke(Lorg/kodein/di/DI$Builder;)V +Lorg/kodein/di/bindings/Binding; +Lorg/kodein/di/bindings/BindingDI; +Lorg/kodein/di/bindings/CompositeContextTranslator; +Lorg/kodein/di/bindings/ContextTranslator; +Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/bindings/DIBinding$Copier; +HSPLorg/kodein/di/bindings/DIBinding$Copier;->()V +Lorg/kodein/di/bindings/DIBinding$Copier$Companion; +HSPLorg/kodein/di/bindings/DIBinding$Copier$Companion;->()V +HSPLorg/kodein/di/bindings/DIBinding$Copier$Companion;->()V +HSPLorg/kodein/di/bindings/DIBinding$Copier$Companion;->invoke(Lkotlin/jvm/functions/Function1;)Lorg/kodein/di/bindings/DIBinding$Copier; +Lorg/kodein/di/bindings/DIBinding$Copier$Companion$invoke$1; +HSPLorg/kodein/di/bindings/DIBinding$Copier$Companion$invoke$1;->(Lkotlin/jvm/functions/Function1;)V +Lorg/kodein/di/bindings/DIBinding$DefaultImpls; +HSPLorg/kodein/di/bindings/DIBinding$DefaultImpls;->getSupportSubTypes(Lorg/kodein/di/bindings/DIBinding;)Z +Lorg/kodein/di/bindings/ErasedContext; +HSPLorg/kodein/di/bindings/ErasedContext;->()V +HSPLorg/kodein/di/bindings/ErasedContext;->()V +HSPLorg/kodein/di/bindings/ErasedContext;->getType()Lorg/kodein/type/TypeToken; +HSPLorg/kodein/di/bindings/ErasedContext;->getValue()Ljava/lang/Object; +HSPLorg/kodein/di/bindings/ErasedContext;->getValue()Lorg/kodein/di/bindings/ErasedContext; +Lorg/kodein/di/bindings/Factory; +HSPLorg/kodein/di/bindings/Factory;->(Lorg/kodein/type/TypeToken;Lorg/kodein/type/TypeToken;Lorg/kodein/type/TypeToken;Lkotlin/jvm/functions/Function2;)V +HSPLorg/kodein/di/bindings/Factory;->access$getCreator$p(Lorg/kodein/di/bindings/Factory;)Lkotlin/jvm/functions/Function2; +HSPLorg/kodein/di/bindings/Factory;->getArgType()Lorg/kodein/type/TypeToken; +HSPLorg/kodein/di/bindings/Factory;->getContextType()Lorg/kodein/type/TypeToken; +HSPLorg/kodein/di/bindings/Factory;->getCreatedType()Lorg/kodein/type/TypeToken; +HSPLorg/kodein/di/bindings/Factory;->getFactory(Lorg/kodein/di/DI$Key;Lorg/kodein/di/bindings/BindingDI;)Lkotlin/jvm/functions/Function1; +HSPLorg/kodein/di/bindings/Factory;->getSupportSubTypes()Z +Lorg/kodein/di/bindings/Factory$getFactory$1; +HSPLorg/kodein/di/bindings/Factory$getFactory$1;->(Lorg/kodein/di/bindings/Factory;Lorg/kodein/di/bindings/BindingDI;)V +HSPLorg/kodein/di/bindings/Factory$getFactory$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lorg/kodein/di/bindings/Multiton; +HSPLorg/kodein/di/bindings/Multiton;->(Lorg/kodein/di/bindings/Scope;Lorg/kodein/type/TypeToken;ZLorg/kodein/type/TypeToken;Lorg/kodein/type/TypeToken;Lorg/kodein/di/bindings/RefMaker;ZLkotlin/jvm/functions/Function2;)V +HSPLorg/kodein/di/bindings/Multiton;->access$getCreator$p(Lorg/kodein/di/bindings/Multiton;)Lkotlin/jvm/functions/Function2; +HSPLorg/kodein/di/bindings/Multiton;->access$get_refMaker$p(Lorg/kodein/di/bindings/Multiton;)Lorg/kodein/di/bindings/RefMaker; +HSPLorg/kodein/di/bindings/Multiton;->access$get_scopeId$p(Lorg/kodein/di/bindings/Multiton;)Ljava/lang/Object; +HSPLorg/kodein/di/bindings/Multiton;->getArgType()Lorg/kodein/type/TypeToken; +HSPLorg/kodein/di/bindings/Multiton;->getContextType()Lorg/kodein/type/TypeToken; +HSPLorg/kodein/di/bindings/Multiton;->getFactory(Lorg/kodein/di/DI$Key;Lorg/kodein/di/bindings/BindingDI;)Lkotlin/jvm/functions/Function1; +HSPLorg/kodein/di/bindings/Multiton;->getScope()Lorg/kodein/di/bindings/Scope; +HSPLorg/kodein/di/bindings/Multiton;->getSupportSubTypes()Z +HSPLorg/kodein/di/bindings/Multiton;->getSync()Z +Lorg/kodein/di/bindings/Multiton$copier$1; +HSPLorg/kodein/di/bindings/Multiton$copier$1;->(Lorg/kodein/di/bindings/Multiton;)V +Lorg/kodein/di/bindings/Multiton$getFactory$1; +HSPLorg/kodein/di/bindings/Multiton$getFactory$1;->(Lkotlin/jvm/internal/Ref$ObjectRef;Lorg/kodein/di/bindings/Multiton;Lorg/kodein/di/bindings/BindingDI;)V +HSPLorg/kodein/di/bindings/Multiton$getFactory$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lorg/kodein/di/bindings/Multiton$getFactory$1$1; +HSPLorg/kodein/di/bindings/Multiton$getFactory$1$1;->(Lorg/kodein/di/bindings/Multiton;Lorg/kodein/di/bindings/BindingDI;Ljava/lang/Object;)V +HSPLorg/kodein/di/bindings/Multiton$getFactory$1$1;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/bindings/Multiton$getFactory$1$1;->invoke()Lorg/kodein/di/bindings/Reference; +Lorg/kodein/di/bindings/Multiton$getFactory$1$1$1; +HSPLorg/kodein/di/bindings/Multiton$getFactory$1$1$1;->(Lorg/kodein/di/bindings/Multiton;Lorg/kodein/di/bindings/BindingDI;Ljava/lang/Object;)V +HSPLorg/kodein/di/bindings/Multiton$getFactory$1$1$1;->invoke()Ljava/lang/Object; +Lorg/kodein/di/bindings/NoArgBindingDI; +Lorg/kodein/di/bindings/NoArgBindingDIWrap; +HSPLorg/kodein/di/bindings/NoArgBindingDIWrap;->(Lorg/kodein/di/bindings/BindingDI;)V +HSPLorg/kodein/di/bindings/NoArgBindingDIWrap;->getDi()Lorg/kodein/di/DI; +HSPLorg/kodein/di/bindings/NoArgBindingDIWrap;->getDirectDI()Lorg/kodein/di/DirectDI; +Lorg/kodein/di/bindings/NoArgDIBinding; +Lorg/kodein/di/bindings/NoArgDIBinding$DefaultImpls; +HSPLorg/kodein/di/bindings/NoArgDIBinding$DefaultImpls;->getArgType(Lorg/kodein/di/bindings/NoArgDIBinding;)Lorg/kodein/type/TypeToken; +HSPLorg/kodein/di/bindings/NoArgDIBinding$DefaultImpls;->getSupportSubTypes(Lorg/kodein/di/bindings/NoArgDIBinding;)Z +Lorg/kodein/di/bindings/NoScope; +HSPLorg/kodein/di/bindings/NoScope;->()V +HSPLorg/kodein/di/bindings/NoScope;->getRegistry(Ljava/lang/Object;)Lorg/kodein/di/bindings/ScopeRegistry; +HSPLorg/kodein/di/bindings/NoScope;->getRegistry(Ljava/lang/Object;)Lorg/kodein/di/bindings/StandardScopeRegistry; +Lorg/kodein/di/bindings/Provider; +HSPLorg/kodein/di/bindings/Provider;->(Lorg/kodein/type/TypeToken;Lorg/kodein/type/TypeToken;Lkotlin/jvm/functions/Function1;)V +HSPLorg/kodein/di/bindings/Provider;->getArgType()Lorg/kodein/type/TypeToken; +HSPLorg/kodein/di/bindings/Provider;->getContextType()Lorg/kodein/type/TypeToken; +HSPLorg/kodein/di/bindings/Provider;->getCreatedType()Lorg/kodein/type/TypeToken; +HSPLorg/kodein/di/bindings/Provider;->getCreator()Lkotlin/jvm/functions/Function1; +HSPLorg/kodein/di/bindings/Provider;->getFactory(Lorg/kodein/di/DI$Key;Lorg/kodein/di/bindings/BindingDI;)Lkotlin/jvm/functions/Function1; +HSPLorg/kodein/di/bindings/Provider;->getSupportSubTypes()Z +Lorg/kodein/di/bindings/Provider$getFactory$1; +HSPLorg/kodein/di/bindings/Provider$getFactory$1;->(Lorg/kodein/di/bindings/Provider;Lorg/kodein/di/bindings/BindingDI;)V +HSPLorg/kodein/di/bindings/Provider$getFactory$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/kodein/di/bindings/Provider$getFactory$1;->invoke(Lkotlin/Unit;)Ljava/lang/Object; +Lorg/kodein/di/bindings/RefMaker; +Lorg/kodein/di/bindings/Reference; +HSPLorg/kodein/di/bindings/Reference;->(Ljava/lang/Object;Lkotlin/jvm/functions/Function0;)V +HSPLorg/kodein/di/bindings/Reference;->component1()Ljava/lang/Object; +HSPLorg/kodein/di/bindings/Reference;->component2()Lkotlin/jvm/functions/Function0; +Lorg/kodein/di/bindings/Scope; +Lorg/kodein/di/bindings/ScopeCloseable; +Lorg/kodein/di/bindings/ScopeKey; +HSPLorg/kodein/di/bindings/ScopeKey;->(Ljava/lang/Object;Ljava/lang/Object;)V +HSPLorg/kodein/di/bindings/ScopeKey;->hashCode()I +Lorg/kodein/di/bindings/ScopeRegistry; +HSPLorg/kodein/di/bindings/ScopeRegistry;->()V +HSPLorg/kodein/di/bindings/ScopeRegistry;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lorg/kodein/di/bindings/SimpleContextTranslator; +HSPLorg/kodein/di/bindings/SimpleContextTranslator;->(Lorg/kodein/type/TypeToken;Lorg/kodein/type/TypeToken;Lkotlin/jvm/functions/Function2;)V +HSPLorg/kodein/di/bindings/SimpleContextTranslator;->getContextType()Lorg/kodein/type/TypeToken; +HSPLorg/kodein/di/bindings/SimpleContextTranslator;->getScopeType()Lorg/kodein/type/TypeToken; +Lorg/kodein/di/bindings/Singleton; +HPLorg/kodein/di/bindings/Singleton;->(Lorg/kodein/di/bindings/Scope;Lorg/kodein/type/TypeToken;ZLorg/kodein/type/TypeToken;Lorg/kodein/di/bindings/RefMaker;ZLkotlin/jvm/functions/Function1;)V +HSPLorg/kodein/di/bindings/Singleton;->access$get_refMaker$p(Lorg/kodein/di/bindings/Singleton;)Lorg/kodein/di/bindings/RefMaker; +HSPLorg/kodein/di/bindings/Singleton;->access$get_scopeKey$p(Lorg/kodein/di/bindings/Singleton;)Lorg/kodein/di/bindings/ScopeKey; +HSPLorg/kodein/di/bindings/Singleton;->getArgType()Lorg/kodein/type/TypeToken; +HSPLorg/kodein/di/bindings/Singleton;->getContextType()Lorg/kodein/type/TypeToken; +HSPLorg/kodein/di/bindings/Singleton;->getCreatedType()Lorg/kodein/type/TypeToken; +HSPLorg/kodein/di/bindings/Singleton;->getCreator()Lkotlin/jvm/functions/Function1; +HSPLorg/kodein/di/bindings/Singleton;->getFactory(Lorg/kodein/di/DI$Key;Lorg/kodein/di/bindings/BindingDI;)Lkotlin/jvm/functions/Function1; +HSPLorg/kodein/di/bindings/Singleton;->getScope()Lorg/kodein/di/bindings/Scope; +HSPLorg/kodein/di/bindings/Singleton;->getSupportSubTypes()Z +HSPLorg/kodein/di/bindings/Singleton;->getSync()Z +Lorg/kodein/di/bindings/Singleton$copier$1; +HSPLorg/kodein/di/bindings/Singleton$copier$1;->(Lorg/kodein/di/bindings/Singleton;)V +Lorg/kodein/di/bindings/Singleton$getFactory$1; +HSPLorg/kodein/di/bindings/Singleton$getFactory$1;->(Lkotlin/jvm/internal/Ref$ObjectRef;Lorg/kodein/di/bindings/Singleton;Lorg/kodein/di/bindings/BindingDI;)V +HSPLorg/kodein/di/bindings/Singleton$getFactory$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/kodein/di/bindings/Singleton$getFactory$1;->invoke(Lkotlin/Unit;)Ljava/lang/Object; +Lorg/kodein/di/bindings/Singleton$getFactory$1$1; +HSPLorg/kodein/di/bindings/Singleton$getFactory$1$1;->(Lorg/kodein/di/bindings/Singleton;Lorg/kodein/di/bindings/BindingDI;)V +HSPLorg/kodein/di/bindings/Singleton$getFactory$1$1;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/bindings/Singleton$getFactory$1$1;->invoke()Lorg/kodein/di/bindings/Reference; +Lorg/kodein/di/bindings/Singleton$getFactory$1$1$1; +HSPLorg/kodein/di/bindings/Singleton$getFactory$1$1$1;->(Lorg/kodein/di/bindings/Singleton;Lorg/kodein/di/bindings/BindingDI;)V +HSPLorg/kodein/di/bindings/Singleton$getFactory$1$1$1;->invoke()Ljava/lang/Object; +Lorg/kodein/di/bindings/SingletonReference; +HSPLorg/kodein/di/bindings/SingletonReference;->()V +HSPLorg/kodein/di/bindings/SingletonReference;->()V +HSPLorg/kodein/di/bindings/SingletonReference;->make(Lkotlin/jvm/functions/Function0;)Lorg/kodein/di/bindings/Reference; +Lorg/kodein/di/bindings/SingletonReference$make$1; +HSPLorg/kodein/di/bindings/SingletonReference$make$1;->(Ljava/lang/Object;)V +HSPLorg/kodein/di/bindings/SingletonReference$make$1;->invoke()Ljava/lang/Object; +Lorg/kodein/di/bindings/StandardScopeRegistry; +HSPLorg/kodein/di/bindings/StandardScopeRegistry;->()V +HSPLorg/kodein/di/bindings/StandardScopeRegistry;->getOrCreate(Ljava/lang/Object;ZLkotlin/jvm/functions/Function0;)Ljava/lang/Object; +Lorg/kodein/di/bindings/WithContext; +Lorg/kodein/di/compose/AndroidContextKt; +HSPLorg/kodein/di/compose/AndroidContextKt;->()V +HSPLorg/kodein/di/compose/AndroidContextKt;->access$androidContextDI$lambda$0(Lkotlin/Lazy;)Lorg/kodein/di/DI; +HSPLorg/kodein/di/compose/AndroidContextKt;->androidContextDI$lambda$0(Lkotlin/Lazy;)Lorg/kodein/di/DI; +HSPLorg/kodein/di/compose/AndroidContextKt;->androidContextDI(Landroidx/compose/runtime/Composer;I)Lorg/kodein/di/DI; +HSPLorg/kodein/di/compose/AndroidContextKt;->diFromAppContext(Landroidx/compose/runtime/Composer;I)Lorg/kodein/di/DI; +Lorg/kodein/di/compose/AndroidContextKt$androidContextDI$di$2; +HSPLorg/kodein/di/compose/AndroidContextKt$androidContextDI$di$2;->(Landroid/content/Context;)V +HSPLorg/kodein/di/compose/AndroidContextKt$androidContextDI$di$2;->invoke()Landroid/content/Context; +HSPLorg/kodein/di/compose/AndroidContextKt$androidContextDI$di$2;->invoke()Ljava/lang/Object; +Lorg/kodein/di/compose/ComposableDILazyDelegate; +HSPLorg/kodein/di/compose/ComposableDILazyDelegate;->()V +HSPLorg/kodein/di/compose/ComposableDILazyDelegate;->(Lorg/kodein/di/LazyDelegate;)V +HSPLorg/kodein/di/compose/ComposableDILazyDelegate;->provideDelegate(Ljava/lang/Object;Lkotlin/reflect/KProperty;)Lkotlin/Lazy; +Lorg/kodein/di/compose/CompositionLocalKt; +HSPLorg/kodein/di/compose/CompositionLocalKt;->()V +HSPLorg/kodein/di/compose/CompositionLocalKt;->getLocalDI()Landroidx/compose/runtime/ProvidableCompositionLocal; +HSPLorg/kodein/di/compose/CompositionLocalKt;->localDI(Landroidx/compose/runtime/Composer;I)Lorg/kodein/di/DI; +Lorg/kodein/di/compose/CompositionLocalKt$LocalDI$1; +HSPLorg/kodein/di/compose/CompositionLocalKt$LocalDI$1;->()V +HSPLorg/kodein/di/compose/CompositionLocalKt$LocalDI$1;->()V +HSPLorg/kodein/di/compose/CompositionLocalKt$LocalDI$1;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/compose/CompositionLocalKt$LocalDI$1;->invoke()Lorg/kodein/di/DI; +Lorg/kodein/di/compose/WithDIKt; +HSPLorg/kodein/di/compose/WithDIKt;->withDI(Lorg/kodein/di/DI;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V +Lorg/kodein/di/compose/WithDIKt$withDI$7; +HSPLorg/kodein/di/compose/WithDIKt$withDI$7;->(Lkotlin/jvm/functions/Function2;)V +HSPLorg/kodein/di/compose/WithDIKt$withDI$7;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLorg/kodein/di/compose/WithDIKt$withDI$7;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lorg/kodein/di/internal/BindingDIImpl; +HSPLorg/kodein/di/internal/BindingDIImpl;->(Lorg/kodein/di/DirectDI;Lorg/kodein/di/DI$Key;I)V +HSPLorg/kodein/di/internal/BindingDIImpl;->getContext()Ljava/lang/Object; +HSPLorg/kodein/di/internal/BindingDIImpl;->getDi()Lorg/kodein/di/DI; +HSPLorg/kodein/di/internal/BindingDIImpl;->getDirectDI()Lorg/kodein/di/DirectDI; +HSPLorg/kodein/di/internal/BindingDIImpl;->onErasedContext()Lorg/kodein/di/bindings/BindingDI; +Lorg/kodein/di/internal/DIBuilderImpl; +HSPLorg/kodein/di/internal/DIBuilderImpl;->(Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;Lorg/kodein/di/internal/DIContainerBuilderImpl;)V +HSPLorg/kodein/di/internal/DIBuilderImpl;->Bind(Ljava/lang/Object;Ljava/lang/Boolean;Lorg/kodein/di/bindings/DIBinding;)V +HSPLorg/kodein/di/internal/DIBuilderImpl;->Bind(Lorg/kodein/type/TypeToken;Ljava/lang/Object;Ljava/lang/Boolean;)Lorg/kodein/di/DI$Builder$TypeBinder; +HSPLorg/kodein/di/internal/DIBuilderImpl;->Bind(Lorg/kodein/type/TypeToken;Ljava/lang/Object;Ljava/lang/Boolean;)Lorg/kodein/di/internal/DIBuilderImpl$TypeBinder; +HSPLorg/kodein/di/internal/DIBuilderImpl;->RegisterContextTranslator(Lorg/kodein/di/bindings/ContextTranslator;)V +HSPLorg/kodein/di/internal/DIBuilderImpl;->access$getModuleName$p(Lorg/kodein/di/internal/DIBuilderImpl;)Ljava/lang/String; +HSPLorg/kodein/di/internal/DIBuilderImpl;->getContainerBuilder()Lorg/kodein/di/internal/DIContainerBuilderImpl; +HSPLorg/kodein/di/internal/DIBuilderImpl;->getContextType()Lorg/kodein/type/TypeToken; +HSPLorg/kodein/di/internal/DIBuilderImpl;->getExplicitContext()Z +HSPLorg/kodein/di/internal/DIBuilderImpl;->getImportedModules$kodein_di()Ljava/util/Set; +HSPLorg/kodein/di/internal/DIBuilderImpl;->getScope()Lorg/kodein/di/bindings/Scope; +HSPLorg/kodein/di/internal/DIBuilderImpl;->import(Lorg/kodein/di/DI$Module;Z)V +HSPLorg/kodein/di/internal/DIBuilderImpl;->importOnce(Lorg/kodein/di/DI$Module;Z)V +Lorg/kodein/di/internal/DIBuilderImpl$TypeBinder; +HSPLorg/kodein/di/internal/DIBuilderImpl$TypeBinder;->(Lorg/kodein/di/internal/DIBuilderImpl;Lorg/kodein/type/TypeToken;Ljava/lang/Object;Ljava/lang/Boolean;)V +HSPLorg/kodein/di/internal/DIBuilderImpl$TypeBinder;->getContainerBuilder$kodein_di()Lorg/kodein/di/internal/DIContainerBuilderImpl; +HSPLorg/kodein/di/internal/DIBuilderImpl$TypeBinder;->with(Lorg/kodein/di/bindings/DIBinding;)V +Lorg/kodein/di/internal/DIContainerBuilderImpl; +HSPLorg/kodein/di/internal/DIContainerBuilderImpl;->(ZZLjava/util/Map;Ljava/util/List;Ljava/util/List;)V +HSPLorg/kodein/di/internal/DIContainerBuilderImpl;->bind(Lorg/kodein/di/DI$Key;Lorg/kodein/di/bindings/DIBinding;Ljava/lang/String;Ljava/lang/Boolean;)V +HSPLorg/kodein/di/internal/DIContainerBuilderImpl;->checkMatch(Z)V +HSPLorg/kodein/di/internal/DIContainerBuilderImpl;->checkOverrides(Lorg/kodein/di/DI$Key;Ljava/lang/Boolean;)V +HSPLorg/kodein/di/internal/DIContainerBuilderImpl;->extend(Lorg/kodein/di/DIContainer;ZLjava/util/Set;)V +HSPLorg/kodein/di/internal/DIContainerBuilderImpl;->getBindingsMap$kodein_di()Ljava/util/Map; +HSPLorg/kodein/di/internal/DIContainerBuilderImpl;->getCallbacks$kodein_di()Ljava/util/List; +HSPLorg/kodein/di/internal/DIContainerBuilderImpl;->getTranslators$kodein_di()Ljava/util/List; +HSPLorg/kodein/di/internal/DIContainerBuilderImpl;->registerContextTranslator(Lorg/kodein/di/bindings/ContextTranslator;)V +HSPLorg/kodein/di/internal/DIContainerBuilderImpl;->subBuilder(ZZ)Lorg/kodein/di/internal/DIContainerBuilderImpl; +Lorg/kodein/di/internal/DIContainerBuilderImpl$OverrideMode; +HSPLorg/kodein/di/internal/DIContainerBuilderImpl$OverrideMode;->$values()[Lorg/kodein/di/internal/DIContainerBuilderImpl$OverrideMode; +HSPLorg/kodein/di/internal/DIContainerBuilderImpl$OverrideMode;->()V +HSPLorg/kodein/di/internal/DIContainerBuilderImpl$OverrideMode;->(Ljava/lang/String;I)V +HSPLorg/kodein/di/internal/DIContainerBuilderImpl$OverrideMode;->(Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +Lorg/kodein/di/internal/DIContainerBuilderImpl$OverrideMode$ALLOW_EXPLICIT; +HSPLorg/kodein/di/internal/DIContainerBuilderImpl$OverrideMode$ALLOW_EXPLICIT;->(Ljava/lang/String;I)V +HSPLorg/kodein/di/internal/DIContainerBuilderImpl$OverrideMode$ALLOW_EXPLICIT;->isAllowed()Z +HSPLorg/kodein/di/internal/DIContainerBuilderImpl$OverrideMode$ALLOW_EXPLICIT;->must(Ljava/lang/Boolean;)Ljava/lang/Boolean; +Lorg/kodein/di/internal/DIContainerBuilderImpl$OverrideMode$ALLOW_SILENT; +HSPLorg/kodein/di/internal/DIContainerBuilderImpl$OverrideMode$ALLOW_SILENT;->(Ljava/lang/String;I)V +Lorg/kodein/di/internal/DIContainerBuilderImpl$OverrideMode$Companion; +HSPLorg/kodein/di/internal/DIContainerBuilderImpl$OverrideMode$Companion;->()V +HSPLorg/kodein/di/internal/DIContainerBuilderImpl$OverrideMode$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLorg/kodein/di/internal/DIContainerBuilderImpl$OverrideMode$Companion;->get(ZZ)Lorg/kodein/di/internal/DIContainerBuilderImpl$OverrideMode; +Lorg/kodein/di/internal/DIContainerBuilderImpl$OverrideMode$FORBID; +HSPLorg/kodein/di/internal/DIContainerBuilderImpl$OverrideMode$FORBID;->(Ljava/lang/String;I)V +HSPLorg/kodein/di/internal/DIContainerBuilderImpl$OverrideMode$FORBID;->isAllowed()Z +HSPLorg/kodein/di/internal/DIContainerBuilderImpl$OverrideMode$FORBID;->must(Ljava/lang/Boolean;)Ljava/lang/Boolean; +Lorg/kodein/di/internal/DIContainerImpl; +HSPLorg/kodein/di/internal/DIContainerImpl;->(Lorg/kodein/di/DITree;Lorg/kodein/di/internal/DIContainerImpl$Node;ZZ)V +HSPLorg/kodein/di/internal/DIContainerImpl;->(Lorg/kodein/di/internal/DIContainerBuilderImpl;Ljava/util/List;ZZZ)V +HSPLorg/kodein/di/internal/DIContainerImpl;->allFactories(Lorg/kodein/di/DI$Key;Ljava/lang/Object;I)Ljava/util/List; +HSPLorg/kodein/di/internal/DIContainerImpl;->allProviders(Lorg/kodein/di/DI$Key;Ljava/lang/Object;I)Ljava/util/List; +HSPLorg/kodein/di/internal/DIContainerImpl;->bindingDI(Lorg/kodein/di/DI$Key;Lorg/kodein/di/DIContext;Lorg/kodein/di/DITree;I)Lorg/kodein/di/bindings/BindingDI; +HSPLorg/kodein/di/internal/DIContainerImpl;->factory(Lorg/kodein/di/DI$Key;Ljava/lang/Object;I)Lkotlin/jvm/functions/Function1; +HSPLorg/kodein/di/internal/DIContainerImpl;->getInitCallbacks()Lkotlin/jvm/functions/Function0; +HSPLorg/kodein/di/internal/DIContainerImpl;->getTree()Lorg/kodein/di/DITree; +HSPLorg/kodein/di/internal/DIContainerImpl;->provider(Lorg/kodein/di/DI$Key;Ljava/lang/Object;I)Lkotlin/jvm/functions/Function0; +Lorg/kodein/di/internal/DIContainerImpl$Node; +HSPLorg/kodein/di/internal/DIContainerImpl$Node;->(Lorg/kodein/di/DI$Key;ILorg/kodein/di/internal/DIContainerImpl$Node;Z)V +HSPLorg/kodein/di/internal/DIContainerImpl$Node;->check$kodein_di(Lorg/kodein/di/DI$Key;I)V +HSPLorg/kodein/di/internal/DIContainerImpl$Node;->recursiveCheck(Lorg/kodein/di/internal/DIContainerImpl$Node;Lorg/kodein/di/DI$Key;I)Z +Lorg/kodein/di/internal/DIContainerImpl$init$1; +HSPLorg/kodein/di/internal/DIContainerImpl$init$1;->(Lorg/kodein/di/internal/DIContainerImpl;Lorg/kodein/di/internal/DIContainerBuilderImpl;)V +HSPLorg/kodein/di/internal/DIContainerImpl$init$1;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/internal/DIContainerImpl$init$1;->invoke()V +Lorg/kodein/di/internal/DIImpl; +HSPLorg/kodein/di/internal/DIImpl;->()V +HSPLorg/kodein/di/internal/DIImpl;->(Lorg/kodein/di/internal/DIContainerImpl;)V +HSPLorg/kodein/di/internal/DIImpl;->(Lorg/kodein/di/internal/DIMainBuilderImpl;Z)V +HSPLorg/kodein/di/internal/DIImpl;->(ZLkotlin/jvm/functions/Function1;)V +HSPLorg/kodein/di/internal/DIImpl;->access$get_container$p(Lorg/kodein/di/internal/DIImpl;)Lorg/kodein/di/internal/DIContainerImpl; +HSPLorg/kodein/di/internal/DIImpl;->getContainer()Lorg/kodein/di/DIContainer; +HSPLorg/kodein/di/internal/DIImpl;->getDi()Lorg/kodein/di/DI; +HSPLorg/kodein/di/internal/DIImpl;->getDiTrigger()Lorg/kodein/di/DITrigger; +Lorg/kodein/di/internal/DIImpl$Companion; +HSPLorg/kodein/di/internal/DIImpl$Companion;->()V +HSPLorg/kodein/di/internal/DIImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLorg/kodein/di/internal/DIImpl$Companion;->access$newBuilder(Lorg/kodein/di/internal/DIImpl$Companion;ZLkotlin/jvm/functions/Function1;)Lorg/kodein/di/internal/DIMainBuilderImpl; +HSPLorg/kodein/di/internal/DIImpl$Companion;->newBuilder(ZLkotlin/jvm/functions/Function1;)Lorg/kodein/di/internal/DIMainBuilderImpl; +Lorg/kodein/di/internal/DIImpl$container$2; +HSPLorg/kodein/di/internal/DIImpl$container$2;->(Lorg/kodein/di/internal/DIImpl;)V +HSPLorg/kodein/di/internal/DIImpl$container$2;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/internal/DIImpl$container$2;->invoke()Lorg/kodein/di/internal/DIContainerImpl; +Lorg/kodein/di/internal/DIMainBuilderImpl; +HSPLorg/kodein/di/internal/DIMainBuilderImpl;->(Z)V +HSPLorg/kodein/di/internal/DIMainBuilderImpl;->extend(Lorg/kodein/di/DI;ZLorg/kodein/di/Copy;)V +HSPLorg/kodein/di/internal/DIMainBuilderImpl;->getExternalSources()Ljava/util/List; +HSPLorg/kodein/di/internal/DIMainBuilderImpl;->getFullContainerTreeOnError()Z +HSPLorg/kodein/di/internal/DIMainBuilderImpl;->getFullDescriptionOnError()Z +Lorg/kodein/di/internal/DITreeImpl; +HPLorg/kodein/di/internal/DITreeImpl;->(Ljava/util/Map;Ljava/util/List;Ljava/util/List;)V +HSPLorg/kodein/di/internal/DITreeImpl;->find(Lorg/kodein/di/DI$Key;IZ)Ljava/util/List; +HSPLorg/kodein/di/internal/DITreeImpl;->findBySpecs(Lorg/kodein/di/SearchSpecs;)Ljava/util/List; +HSPLorg/kodein/di/internal/DITreeImpl;->getBindings()Ljava/util/Map; +HSPLorg/kodein/di/internal/DITreeImpl;->getExternalSources()Ljava/util/List; +HSPLorg/kodein/di/internal/DITreeImpl;->getRegisteredTranslators()Ljava/util/List; +Lorg/kodein/di/internal/DITreeImpl$findBySpecs$1; +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$1;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$1;->invoke(Ljava/util/Map$Entry;)Ljava/lang/Boolean; +Lorg/kodein/di/internal/DITreeImpl$findBySpecs$2; +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$2;->(Lorg/kodein/type/TypeToken;Lorg/kodein/di/internal/DITreeImpl;)V +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$2;->invoke(Lkotlin/Triple;)Lkotlin/Triple; +Lorg/kodein/di/internal/DITreeImpl$findBySpecs$3; +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$3;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$3;->invoke(Lkotlin/Triple;)Ljava/lang/Boolean; +Lorg/kodein/di/internal/DITreeImpl$findBySpecs$4; +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$4;->(Ljava/lang/Object;)V +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$4;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$4;->invoke(Lkotlin/Triple;)Ljava/lang/Boolean; +Lorg/kodein/di/internal/DITreeImpl$findBySpecs$argSeq$1; +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$argSeq$1;->()V +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$argSeq$1;->()V +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$argSeq$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$argSeq$1;->invoke(Lkotlin/Triple;)Lkotlin/sequences/Sequence; +Lorg/kodein/di/internal/DITreeImpl$findBySpecs$argSeq$1$1; +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$argSeq$1$1;->(Lorg/kodein/di/bindings/ContextTranslator;)V +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$argSeq$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$argSeq$1$1;->invoke(Ljava/util/Map$Entry;)Lkotlin/Triple; +Lorg/kodein/di/internal/DITreeImpl$findBySpecs$contextSeq$1; +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$contextSeq$1;->()V +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$contextSeq$1;->()V +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$contextSeq$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$contextSeq$1;->invoke(Ljava/util/Map$Entry;)Lkotlin/sequences/Sequence; +Lorg/kodein/di/internal/DITreeImpl$findBySpecs$contextSeq$1$1; +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$contextSeq$1$1;->()V +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$contextSeq$1$1;->()V +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$contextSeq$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$contextSeq$1$1;->invoke(Ljava/util/Map$Entry;)Lkotlin/Triple; +Lorg/kodein/di/internal/DITreeImpl$findBySpecs$resultSeq$1; +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$resultSeq$1;->()V +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$resultSeq$1;->()V +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$resultSeq$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$resultSeq$1;->invoke(Lkotlin/Triple;)Lkotlin/Pair; +Lorg/kodein/di/internal/DITreeImpl$findBySpecs$tagSeq$1; +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$tagSeq$1;->()V +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$tagSeq$1;->()V +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$tagSeq$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$tagSeq$1;->invoke(Lkotlin/Triple;)Lkotlin/sequences/Sequence; +Lorg/kodein/di/internal/DITreeImpl$findBySpecs$tagSeq$1$1; +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$tagSeq$1$1;->(Lorg/kodein/di/bindings/ContextTranslator;)V +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$tagSeq$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$tagSeq$1$1;->invoke(Ljava/util/Map$Entry;)Lkotlin/Triple; +Lorg/kodein/di/internal/DirectDIBaseImpl; +HSPLorg/kodein/di/internal/DirectDIBaseImpl;->(Lorg/kodein/di/DIContainer;Lorg/kodein/di/DIContext;)V +HSPLorg/kodein/di/internal/DirectDIBaseImpl;->Instance(Lorg/kodein/type/TypeToken;Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/kodein/di/internal/DirectDIBaseImpl;->Instance(Lorg/kodein/type/TypeToken;Lorg/kodein/type/TypeToken;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/kodein/di/internal/DirectDIBaseImpl;->On(Lorg/kodein/di/DIContext;)Lorg/kodein/di/DirectDI; +HSPLorg/kodein/di/internal/DirectDIBaseImpl;->getContainer()Lorg/kodein/di/DIContainer; +HSPLorg/kodein/di/internal/DirectDIBaseImpl;->getContext()Lorg/kodein/di/DIContext; +HSPLorg/kodein/di/internal/DirectDIBaseImpl;->getDi()Lorg/kodein/di/DI; +HSPLorg/kodein/di/internal/DirectDIBaseImpl;->getDirectDI()Lorg/kodein/di/DirectDI; +HSPLorg/kodein/di/internal/DirectDIBaseImpl;->getLazy()Lorg/kodein/di/DI; +Lorg/kodein/di/internal/DirectDIImpl; +HSPLorg/kodein/di/internal/DirectDIImpl;->(Lorg/kodein/di/DIContainer;Lorg/kodein/di/DIContext;)V +HSPLorg/kodein/di/internal/DirectDIImpl;->AllInstances(Lorg/kodein/type/TypeToken;Ljava/lang/Object;)Ljava/util/List; +Lorg/kodein/di/internal/DirectDIJVMImplKt; +HSPLorg/kodein/di/internal/DirectDIJVMImplKt;->access$getAnyType(Lorg/kodein/di/DIContext;)Lorg/kodein/type/TypeToken; +HSPLorg/kodein/di/internal/DirectDIJVMImplKt;->getAnyType(Lorg/kodein/di/DIContext;)Lorg/kodein/type/TypeToken; +Lorg/kodein/di/internal/LangKt; +HSPLorg/kodein/di/internal/LangKt;->newConcurrentMap()Ljava/util/Map; +HSPLorg/kodein/di/internal/LangKt;->newLinkedList()Ljava/util/List; +HSPLorg/kodein/di/internal/LangKt;->newLinkedList(Ljava/util/Collection;)Ljava/util/List; +Lorg/kodein/di/internal/TypeChecker; +HSPLorg/kodein/di/internal/TypeChecker;->()V +HSPLorg/kodein/di/internal/TypeChecker;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lorg/kodein/di/internal/TypeChecker$Down; +HSPLorg/kodein/di/internal/TypeChecker$Down;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/internal/TypeChecker$Down;->check(Lorg/kodein/type/TypeToken;)Z +HSPLorg/kodein/di/internal/TypeChecker$Down;->equals(Ljava/lang/Object;)Z +HSPLorg/kodein/di/internal/TypeChecker$Down;->getType()Lorg/kodein/type/TypeToken; +HSPLorg/kodein/di/internal/TypeChecker$Down;->hashCode()I +Lorg/kodein/di/internal/TypeChecker$Up; +HSPLorg/kodein/di/internal/TypeChecker$Up;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/internal/TypeChecker$Up;->check(Lorg/kodein/type/TypeToken;)Z +HSPLorg/kodein/di/internal/TypeChecker$Up;->equals(Ljava/lang/Object;)Z +HSPLorg/kodein/di/internal/TypeChecker$Up;->getType()Lorg/kodein/type/TypeToken; +HSPLorg/kodein/di/internal/TypeChecker$Up;->hashCode()I +Lorg/kodein/type/AbstractTypeToken; +HSPLorg/kodein/type/AbstractTypeToken;->()V +HSPLorg/kodein/type/AbstractTypeToken;->()V +HPLorg/kodein/type/AbstractTypeToken;->equals(Ljava/lang/Object;)Z +HSPLorg/kodein/type/AbstractTypeToken;->hashCode()I +HSPLorg/kodein/type/AbstractTypeToken;->isAssignableFrom(Lorg/kodein/type/TypeToken;)Z +Lorg/kodein/type/AbstractTypeToken$Companion; +HSPLorg/kodein/type/AbstractTypeToken$Companion;->()V +HSPLorg/kodein/type/AbstractTypeToken$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lorg/kodein/type/GenericArrayTypeImpl; +HSPLorg/kodein/type/GenericArrayTypeImpl;->()V +HSPLorg/kodein/type/GenericArrayTypeImpl;->(Ljava/lang/reflect/Type;)V +HSPLorg/kodein/type/GenericArrayTypeImpl;->(Ljava/lang/reflect/Type;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLorg/kodein/type/GenericArrayTypeImpl;->getGenericComponentType()Ljava/lang/reflect/Type; +Lorg/kodein/type/GenericArrayTypeImpl$Companion; +HSPLorg/kodein/type/GenericArrayTypeImpl$Companion;->()V +HSPLorg/kodein/type/GenericArrayTypeImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLorg/kodein/type/GenericArrayTypeImpl$Companion;->invoke(Ljava/lang/reflect/Type;)Lorg/kodein/type/GenericArrayTypeImpl; +Lorg/kodein/type/GenericJVMTypeTokenDelegate; +HSPLorg/kodein/type/GenericJVMTypeTokenDelegate;->(Lorg/kodein/type/JVMTypeToken;Ljava/lang/Class;)V +HSPLorg/kodein/type/GenericJVMTypeTokenDelegate;->equals(Ljava/lang/Object;)Z +HSPLorg/kodein/type/GenericJVMTypeTokenDelegate;->getRaw()Lorg/kodein/type/TypeToken; +HSPLorg/kodein/type/GenericJVMTypeTokenDelegate;->getSuper()Ljava/util/List; +HSPLorg/kodein/type/GenericJVMTypeTokenDelegate;->hashCode()I +HSPLorg/kodein/type/GenericJVMTypeTokenDelegate;->isAssignableFrom(Lorg/kodein/type/TypeToken;)Z +HSPLorg/kodein/type/GenericJVMTypeTokenDelegate;->isWildcard()Z +Lorg/kodein/type/JVMAbstractTypeToken; +HSPLorg/kodein/type/JVMAbstractTypeToken;->()V +HSPLorg/kodein/type/JVMAbstractTypeToken;->()V +HSPLorg/kodein/type/JVMAbstractTypeToken;->access$getNeedGATWorkaround$delegate$cp()Lkotlin/Lazy; +HSPLorg/kodein/type/JVMAbstractTypeToken;->access$getNeedPTWorkaround$delegate$cp()Lkotlin/Lazy; +HSPLorg/kodein/type/JVMAbstractTypeToken;->typeEquals$kaverit_release(Lorg/kodein/type/TypeToken;)Z +HSPLorg/kodein/type/JVMAbstractTypeToken;->typeHashCode$kaverit_release()I +Lorg/kodein/type/JVMAbstractTypeToken$Companion; +HSPLorg/kodein/type/JVMAbstractTypeToken$Companion;->()V +HSPLorg/kodein/type/JVMAbstractTypeToken$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HPLorg/kodein/type/JVMAbstractTypeToken$Companion;->Equals(Ljava/lang/reflect/Type;Ljava/lang/reflect/Type;)Z +HSPLorg/kodein/type/JVMAbstractTypeToken$Companion;->HashCode(Ljava/lang/reflect/Type;)I +HSPLorg/kodein/type/JVMAbstractTypeToken$Companion;->getNeedGATWorkaround()Z +HSPLorg/kodein/type/JVMAbstractTypeToken$Companion;->getNeedPTWorkaround()Z +Lorg/kodein/type/JVMAbstractTypeToken$Companion$WrappingTest; +HSPLorg/kodein/type/JVMAbstractTypeToken$Companion$WrappingTest;->()V +HSPLorg/kodein/type/JVMAbstractTypeToken$Companion$WrappingTest;->getType()Ljava/lang/reflect/Type; +Lorg/kodein/type/JVMAbstractTypeToken$Companion$needGATWorkaround$2; +HSPLorg/kodein/type/JVMAbstractTypeToken$Companion$needGATWorkaround$2;->()V +HSPLorg/kodein/type/JVMAbstractTypeToken$Companion$needGATWorkaround$2;->()V +HSPLorg/kodein/type/JVMAbstractTypeToken$Companion$needGATWorkaround$2;->invoke()Ljava/lang/Boolean; +HSPLorg/kodein/type/JVMAbstractTypeToken$Companion$needGATWorkaround$2;->invoke()Ljava/lang/Object; +Lorg/kodein/type/JVMAbstractTypeToken$Companion$needGATWorkaround$2$t1$1; +HSPLorg/kodein/type/JVMAbstractTypeToken$Companion$needGATWorkaround$2$t1$1;->()V +Lorg/kodein/type/JVMAbstractTypeToken$Companion$needGATWorkaround$2$t2$1; +HSPLorg/kodein/type/JVMAbstractTypeToken$Companion$needGATWorkaround$2$t2$1;->()V +Lorg/kodein/type/JVMAbstractTypeToken$Companion$needPTWorkaround$2; +HSPLorg/kodein/type/JVMAbstractTypeToken$Companion$needPTWorkaround$2;->()V +HSPLorg/kodein/type/JVMAbstractTypeToken$Companion$needPTWorkaround$2;->()V +HSPLorg/kodein/type/JVMAbstractTypeToken$Companion$needPTWorkaround$2;->invoke()Ljava/lang/Boolean; +HSPLorg/kodein/type/JVMAbstractTypeToken$Companion$needPTWorkaround$2;->invoke()Ljava/lang/Object; +Lorg/kodein/type/JVMAbstractTypeToken$Companion$needPTWorkaround$2$t1$1; +HSPLorg/kodein/type/JVMAbstractTypeToken$Companion$needPTWorkaround$2$t1$1;->()V +Lorg/kodein/type/JVMAbstractTypeToken$Companion$needPTWorkaround$2$t2$1; +HSPLorg/kodein/type/JVMAbstractTypeToken$Companion$needPTWorkaround$2$t2$1;->()V +Lorg/kodein/type/JVMClassTypeToken; +HSPLorg/kodein/type/JVMClassTypeToken;->(Ljava/lang/Class;)V +HSPLorg/kodein/type/JVMClassTypeToken;->getJvmType()Ljava/lang/Class; +HSPLorg/kodein/type/JVMClassTypeToken;->getJvmType()Ljava/lang/reflect/Type; +HSPLorg/kodein/type/JVMClassTypeToken;->getRaw()Lorg/kodein/type/JVMClassTypeToken; +HSPLorg/kodein/type/JVMClassTypeToken;->getRaw()Lorg/kodein/type/TypeToken; +HSPLorg/kodein/type/JVMClassTypeToken;->getSuper()Ljava/util/List; +HSPLorg/kodein/type/JVMClassTypeToken;->isAssignableFrom(Lorg/kodein/type/TypeToken;)Z +HSPLorg/kodein/type/JVMClassTypeToken;->isWildcard()Z +Lorg/kodein/type/JVMParameterizedTypeToken; +HSPLorg/kodein/type/JVMParameterizedTypeToken;->(Ljava/lang/reflect/ParameterizedType;)V +HSPLorg/kodein/type/JVMParameterizedTypeToken;->getGenericParameters()[Lorg/kodein/type/TypeToken; +HSPLorg/kodein/type/JVMParameterizedTypeToken;->getJvmType()Ljava/lang/reflect/ParameterizedType; +HSPLorg/kodein/type/JVMParameterizedTypeToken;->getJvmType()Ljava/lang/reflect/Type; +HSPLorg/kodein/type/JVMParameterizedTypeToken;->getRaw()Lorg/kodein/type/TypeToken; +HPLorg/kodein/type/JVMParameterizedTypeToken;->getSuper()Ljava/util/List; +HSPLorg/kodein/type/JVMParameterizedTypeToken;->isWildcard()Z +Lorg/kodein/type/JVMTypeToken; +Lorg/kodein/type/JVMUtilsKt; +HSPLorg/kodein/type/JVMUtilsKt;->allTypeEquals([Ljava/lang/reflect/Type;[Ljava/lang/reflect/Type;)Z +HSPLorg/kodein/type/JVMUtilsKt;->boundedTypeArguments(Ljava/lang/reflect/ParameterizedType;)[Ljava/lang/reflect/Type; +HSPLorg/kodein/type/JVMUtilsKt;->getBoundedGenericSuperClass(Ljava/lang/Class;)Ljava/lang/reflect/Type; +HSPLorg/kodein/type/JVMUtilsKt;->getRawClass(Ljava/lang/reflect/ParameterizedType;)Ljava/lang/Class; +HSPLorg/kodein/type/JVMUtilsKt;->kodein(Ljava/lang/reflect/Type;)Ljava/lang/reflect/Type; +PLorg/kodein/type/JVMUtilsKt;->reify$default(Ljava/lang/reflect/ParameterizedType;Ljava/lang/reflect/Type;Ljava/lang/reflect/ParameterizedType;[Ljava/lang/reflect/Type;ILjava/lang/Object;)Ljava/lang/reflect/Type; +HPLorg/kodein/type/JVMUtilsKt;->reify(Ljava/lang/reflect/ParameterizedType;Ljava/lang/reflect/Type;Ljava/lang/reflect/ParameterizedType;[Ljava/lang/reflect/Type;)Ljava/lang/reflect/Type; +HSPLorg/kodein/type/JVMUtilsKt;->removeVariables(Ljava/lang/reflect/Type;)Ljava/lang/reflect/Type; +HSPLorg/kodein/type/JVMUtilsKt;->typeEquals(Ljava/lang/reflect/Type;Ljava/lang/reflect/Type;)Z +HSPLorg/kodein/type/JVMUtilsKt;->typeHashCode(Ljava/lang/reflect/Type;)I +Lorg/kodein/type/ParameterizedTypeImpl; +HSPLorg/kodein/type/ParameterizedTypeImpl;->()V +HSPLorg/kodein/type/ParameterizedTypeImpl;->(Ljava/lang/Class;[Ljava/lang/reflect/Type;Ljava/lang/reflect/Type;)V +HSPLorg/kodein/type/ParameterizedTypeImpl;->equals(Ljava/lang/Object;)Z +HSPLorg/kodein/type/ParameterizedTypeImpl;->getActualTypeArguments()[Ljava/lang/reflect/Type; +HSPLorg/kodein/type/ParameterizedTypeImpl;->getRawType()Ljava/lang/Class; +HSPLorg/kodein/type/ParameterizedTypeImpl;->getRawType()Ljava/lang/reflect/Type; +HSPLorg/kodein/type/ParameterizedTypeImpl;->hashCode()I +Lorg/kodein/type/ParameterizedTypeImpl$Companion; +HSPLorg/kodein/type/ParameterizedTypeImpl$Companion;->()V +HSPLorg/kodein/type/ParameterizedTypeImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLorg/kodein/type/ParameterizedTypeImpl$Companion;->invoke(Ljava/lang/reflect/ParameterizedType;)Lorg/kodein/type/ParameterizedTypeImpl; +Lorg/kodein/type/TypeReference; +HSPLorg/kodein/type/TypeReference;->()V +HSPLorg/kodein/type/TypeReference;->getSuperType()Ljava/lang/reflect/Type; +Lorg/kodein/type/TypeToken; +HSPLorg/kodein/type/TypeToken;->()V +Lorg/kodein/type/TypeToken$Companion; +HSPLorg/kodein/type/TypeToken$Companion;->()V +HSPLorg/kodein/type/TypeToken$Companion;->()V +HSPLorg/kodein/type/TypeToken$Companion;->getAny()Lorg/kodein/type/TypeToken; +HSPLorg/kodein/type/TypeToken$Companion;->getUnit()Lorg/kodein/type/TypeToken; +Lorg/kodein/type/TypeTokensJVMKt; +HSPLorg/kodein/type/TypeTokensJVMKt;->()V +HSPLorg/kodein/type/TypeTokensJVMKt;->erased(Lkotlin/reflect/KClass;)Lorg/kodein/type/TypeToken; +PLorg/kodein/type/TypeTokensJVMKt;->erasedOf(Ljava/lang/Object;)Lorg/kodein/type/TypeToken; +HSPLorg/kodein/type/TypeTokensJVMKt;->isReified(Ljava/lang/reflect/Type;)Z +HSPLorg/kodein/type/TypeTokensJVMKt;->typeToken(Ljava/lang/reflect/Type;)Lorg/kodein/type/JVMTypeToken; +Lorg/slf4j/ILoggerFactory; +Lorg/slf4j/IMarkerFactory; +Lorg/slf4j/Logger; +Lorg/slf4j/LoggerFactory; +HSPLorg/slf4j/LoggerFactory;->()V +HSPLorg/slf4j/LoggerFactory;->bind()V +HSPLorg/slf4j/LoggerFactory;->findServiceProviders()Ljava/util/List; +HSPLorg/slf4j/LoggerFactory;->fixSubstituteLoggers()V +HSPLorg/slf4j/LoggerFactory;->getILoggerFactory()Lorg/slf4j/ILoggerFactory; +HSPLorg/slf4j/LoggerFactory;->getLogger(Ljava/lang/Class;)Lorg/slf4j/Logger; +HSPLorg/slf4j/LoggerFactory;->getLogger(Ljava/lang/String;)Lorg/slf4j/Logger; +HSPLorg/slf4j/LoggerFactory;->getProvider()Lorg/slf4j/spi/SLF4JServiceProvider; +HSPLorg/slf4j/LoggerFactory;->getServiceLoader(Ljava/lang/ClassLoader;)Ljava/util/ServiceLoader; +HSPLorg/slf4j/LoggerFactory;->isAmbiguousProviderList(Ljava/util/List;)Z +HSPLorg/slf4j/LoggerFactory;->loadExplicitlySpecified(Ljava/lang/ClassLoader;)Lorg/slf4j/spi/SLF4JServiceProvider; +HSPLorg/slf4j/LoggerFactory;->performInitialization()V +HSPLorg/slf4j/LoggerFactory;->postBindCleanUp()V +HSPLorg/slf4j/LoggerFactory;->replayEvents()V +HSPLorg/slf4j/LoggerFactory;->reportActualBinding(Ljava/util/List;)V +HSPLorg/slf4j/LoggerFactory;->reportMultipleBindingAmbiguity(Ljava/util/List;)V +HSPLorg/slf4j/LoggerFactory;->safelyInstantiate(Ljava/util/List;Ljava/util/Iterator;)V +HSPLorg/slf4j/LoggerFactory;->versionSanityCheck()V +Lorg/slf4j/helpers/BasicMDCAdapter; +HSPLorg/slf4j/helpers/BasicMDCAdapter;->()V +Lorg/slf4j/helpers/BasicMDCAdapter$1; +HSPLorg/slf4j/helpers/BasicMDCAdapter$1;->(Lorg/slf4j/helpers/BasicMDCAdapter;)V +Lorg/slf4j/helpers/BasicMarkerFactory; +HSPLorg/slf4j/helpers/BasicMarkerFactory;->()V +Lorg/slf4j/helpers/NOPLoggerFactory; +HSPLorg/slf4j/helpers/NOPLoggerFactory;->()V +Lorg/slf4j/helpers/NOPMDCAdapter; +HSPLorg/slf4j/helpers/NOPMDCAdapter;->()V +Lorg/slf4j/helpers/NOP_FallbackServiceProvider; +HSPLorg/slf4j/helpers/NOP_FallbackServiceProvider;->()V +HSPLorg/slf4j/helpers/NOP_FallbackServiceProvider;->()V +Lorg/slf4j/helpers/SubstituteLoggerFactory; +HSPLorg/slf4j/helpers/SubstituteLoggerFactory;->()V +HSPLorg/slf4j/helpers/SubstituteLoggerFactory;->clear()V +HSPLorg/slf4j/helpers/SubstituteLoggerFactory;->getEventQueue()Ljava/util/concurrent/LinkedBlockingQueue; +HSPLorg/slf4j/helpers/SubstituteLoggerFactory;->getLoggers()Ljava/util/List; +HSPLorg/slf4j/helpers/SubstituteLoggerFactory;->postInitialization()V +Lorg/slf4j/helpers/SubstituteServiceProvider; +HSPLorg/slf4j/helpers/SubstituteServiceProvider;->()V +HSPLorg/slf4j/helpers/SubstituteServiceProvider;->getSubstituteLoggerFactory()Lorg/slf4j/helpers/SubstituteLoggerFactory; +Lorg/slf4j/helpers/ThreadLocalMapOfStacks; +HSPLorg/slf4j/helpers/ThreadLocalMapOfStacks;->()V +Lorg/slf4j/helpers/Util; +HSPLorg/slf4j/helpers/Util;->()V +HSPLorg/slf4j/helpers/Util;->safeGetBooleanSystemProperty(Ljava/lang/String;)Z +HSPLorg/slf4j/helpers/Util;->safeGetSystemProperty(Ljava/lang/String;)Ljava/lang/String; +Lorg/slf4j/impl/LoggerServiceProvider; +HSPLorg/slf4j/impl/LoggerServiceProvider;->()V +HSPLorg/slf4j/impl/LoggerServiceProvider;->()V +HSPLorg/slf4j/impl/LoggerServiceProvider;->getLoggerFactory()Lorg/slf4j/ILoggerFactory; +HSPLorg/slf4j/impl/LoggerServiceProvider;->getRequestedApiVersion()Ljava/lang/String; +HSPLorg/slf4j/impl/LoggerServiceProvider;->initialize()V +HSPLorg/slf4j/impl/LoggerServiceProvider;->initializeLoggerContext()V +Lorg/slf4j/spi/LocationAwareLogger; +Lorg/slf4j/spi/MDCAdapter; +Lorg/slf4j/spi/SLF4JServiceProvider; \ No newline at end of file diff --git a/androidApp/src/playStoreRelease/generated/baselineProfiles/baseline-prof.txt b/androidApp/src/playStoreRelease/generated/baselineProfiles/baseline-prof.txt new file mode 100644 index 00000000..2aa693fb --- /dev/null +++ b/androidApp/src/playStoreRelease/generated/baselineProfiles/baseline-prof.txt @@ -0,0 +1,43760 @@ +L_COROUTINE/ArtificialStackFrames; +HSPL_COROUTINE/ArtificialStackFrames;->()V +HSPL_COROUTINE/ArtificialStackFrames;->coroutineBoundary()Ljava/lang/StackTraceElement; +L_COROUTINE/CoroutineDebuggingKt; +HSPL_COROUTINE/CoroutineDebuggingKt;->()V +HSPL_COROUTINE/CoroutineDebuggingKt;->access$artificialFrame(Ljava/lang/Throwable;Ljava/lang/String;)Ljava/lang/StackTraceElement; +HSPL_COROUTINE/CoroutineDebuggingKt;->artificialFrame(Ljava/lang/Throwable;Ljava/lang/String;)Ljava/lang/StackTraceElement; +L_COROUTINE/_BOUNDARY; +Landroidx/activity/Cancellable; +Landroidx/activity/ComponentActivity; +HSPLandroidx/activity/ComponentActivity;->()V +HSPLandroidx/activity/ComponentActivity;->access$100(Landroidx/activity/ComponentActivity;)Landroidx/activity/OnBackPressedDispatcher; +HSPLandroidx/activity/ComponentActivity;->addMenuProvider(Landroidx/core/view/MenuProvider;)V +HSPLandroidx/activity/ComponentActivity;->addOnConfigurationChangedListener(Landroidx/core/util/Consumer;)V +HSPLandroidx/activity/ComponentActivity;->addOnContextAvailableListener(Landroidx/activity/contextaware/OnContextAvailableListener;)V +HSPLandroidx/activity/ComponentActivity;->addOnMultiWindowModeChangedListener(Landroidx/core/util/Consumer;)V +HSPLandroidx/activity/ComponentActivity;->addOnNewIntentListener(Landroidx/core/util/Consumer;)V +HSPLandroidx/activity/ComponentActivity;->addOnPictureInPictureModeChangedListener(Landroidx/core/util/Consumer;)V +HSPLandroidx/activity/ComponentActivity;->addOnTrimMemoryListener(Landroidx/core/util/Consumer;)V +HSPLandroidx/activity/ComponentActivity;->createFullyDrawnExecutor()Landroidx/activity/ComponentActivity$ReportFullyDrawnExecutor; +HSPLandroidx/activity/ComponentActivity;->ensureViewModelStore()V +HSPLandroidx/activity/ComponentActivity;->getActivityResultRegistry()Landroidx/activity/result/ActivityResultRegistry; +HSPLandroidx/activity/ComponentActivity;->getDefaultViewModelCreationExtras()Landroidx/lifecycle/viewmodel/CreationExtras; +HSPLandroidx/activity/ComponentActivity;->getLifecycle()Landroidx/lifecycle/Lifecycle; +HSPLandroidx/activity/ComponentActivity;->getOnBackPressedDispatcher()Landroidx/activity/OnBackPressedDispatcher; +HSPLandroidx/activity/ComponentActivity;->getSavedStateRegistry()Landroidx/savedstate/SavedStateRegistry; +HSPLandroidx/activity/ComponentActivity;->getViewModelStore()Landroidx/lifecycle/ViewModelStore; +HSPLandroidx/activity/ComponentActivity;->invalidateMenu()V +HSPLandroidx/activity/ComponentActivity;->lambda$new$2$androidx-activity-ComponentActivity(Landroid/content/Context;)V +HSPLandroidx/activity/ComponentActivity;->onCreate(Landroid/os/Bundle;)V +Landroidx/activity/ComponentActivity$$ExternalSyntheticLambda0; +HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda0;->(Landroidx/activity/ComponentActivity;)V +HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda0;->run()V +Landroidx/activity/ComponentActivity$$ExternalSyntheticLambda1; +HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda1;->(Landroidx/activity/ComponentActivity;)V +Landroidx/activity/ComponentActivity$$ExternalSyntheticLambda2; +HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda2;->(Landroidx/activity/ComponentActivity;)V +Landroidx/activity/ComponentActivity$$ExternalSyntheticLambda3; +HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda3;->(Landroidx/activity/ComponentActivity;)V +HSPLandroidx/activity/ComponentActivity$$ExternalSyntheticLambda3;->onContextAvailable(Landroid/content/Context;)V +Landroidx/activity/ComponentActivity$1; +HSPLandroidx/activity/ComponentActivity$1;->(Landroidx/activity/ComponentActivity;)V +Landroidx/activity/ComponentActivity$2; +HSPLandroidx/activity/ComponentActivity$2;->(Landroidx/activity/ComponentActivity;)V +HSPLandroidx/activity/ComponentActivity$2;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V +Landroidx/activity/ComponentActivity$3; +HSPLandroidx/activity/ComponentActivity$3;->(Landroidx/activity/ComponentActivity;)V +HSPLandroidx/activity/ComponentActivity$3;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V +Landroidx/activity/ComponentActivity$4; +HSPLandroidx/activity/ComponentActivity$4;->(Landroidx/activity/ComponentActivity;)V +HSPLandroidx/activity/ComponentActivity$4;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V +Landroidx/activity/ComponentActivity$5; +HSPLandroidx/activity/ComponentActivity$5;->(Landroidx/activity/ComponentActivity;)V +Landroidx/activity/ComponentActivity$6; +HSPLandroidx/activity/ComponentActivity$6;->(Landroidx/activity/ComponentActivity;)V +HSPLandroidx/activity/ComponentActivity$6;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V +Landroidx/activity/ComponentActivity$Api33Impl; +HSPLandroidx/activity/ComponentActivity$Api33Impl;->getOnBackInvokedDispatcher(Landroid/app/Activity;)Landroid/window/OnBackInvokedDispatcher; +Landroidx/activity/ComponentActivity$NonConfigurationInstances; +Landroidx/activity/ComponentActivity$ReportFullyDrawnExecutor; +Landroidx/activity/ComponentActivity$ReportFullyDrawnExecutorApi16Impl; +HSPLandroidx/activity/ComponentActivity$ReportFullyDrawnExecutorApi16Impl;->(Landroidx/activity/ComponentActivity;)V +Landroidx/activity/ComponentDialog$$ExternalSyntheticApiModelOutline0; +HSPLandroidx/activity/ComponentDialog$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/Insets;)I +HSPLandroidx/activity/ComponentDialog$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/view/Window;Z)V +HSPLandroidx/activity/ComponentDialog$$ExternalSyntheticApiModelOutline0;->m$2(Landroid/graphics/Insets;)I +HSPLandroidx/activity/ComponentDialog$$ExternalSyntheticApiModelOutline0;->m$3(Landroid/graphics/Insets;)I +HSPLandroidx/activity/ComponentDialog$$ExternalSyntheticApiModelOutline0;->m$4()Landroid/graphics/BlendMode; +HSPLandroidx/activity/ComponentDialog$$ExternalSyntheticApiModelOutline0;->m$7()Landroid/graphics/BlendMode; +HSPLandroidx/activity/ComponentDialog$$ExternalSyntheticApiModelOutline0;->m$8()Landroid/graphics/BlendMode; +HSPLandroidx/activity/ComponentDialog$$ExternalSyntheticApiModelOutline0;->m()Landroid/graphics/BlendMode; +HSPLandroidx/activity/ComponentDialog$$ExternalSyntheticApiModelOutline0;->m(Landroid/app/Activity;)Landroid/window/OnBackInvokedDispatcher; +HSPLandroidx/activity/ComponentDialog$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/Insets;)I +HSPLandroidx/activity/ComponentDialog$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;)Landroid/view/WindowInsetsController; +Landroidx/activity/FullyDrawnReporter; +HSPLandroidx/activity/FullyDrawnReporter;->(Ljava/util/concurrent/Executor;Lkotlin/jvm/functions/Function0;)V +Landroidx/activity/FullyDrawnReporter$$ExternalSyntheticLambda0; +HSPLandroidx/activity/FullyDrawnReporter$$ExternalSyntheticLambda0;->(Landroidx/activity/FullyDrawnReporter;)V +Landroidx/activity/FullyDrawnReporterOwner; +Landroidx/activity/OnBackPressedCallback; +HSPLandroidx/activity/OnBackPressedCallback;->(Z)V +HSPLandroidx/activity/OnBackPressedCallback;->addCancellable(Landroidx/activity/Cancellable;)V +HSPLandroidx/activity/OnBackPressedCallback;->isEnabled()Z +HSPLandroidx/activity/OnBackPressedCallback;->setEnabled(Z)V +HSPLandroidx/activity/OnBackPressedCallback;->setEnabledChangedCallback$activity_release(Lkotlin/jvm/functions/Function0;)V +Landroidx/activity/OnBackPressedDispatcher; +HSPLandroidx/activity/OnBackPressedDispatcher;->(Ljava/lang/Runnable;)V +HSPLandroidx/activity/OnBackPressedDispatcher;->(Ljava/lang/Runnable;Landroidx/core/util/Consumer;)V +HSPLandroidx/activity/OnBackPressedDispatcher;->access$updateEnabledCallbacks(Landroidx/activity/OnBackPressedDispatcher;)V +HSPLandroidx/activity/OnBackPressedDispatcher;->addCallback(Landroidx/activity/OnBackPressedCallback;)V +HSPLandroidx/activity/OnBackPressedDispatcher;->addCallback(Landroidx/lifecycle/LifecycleOwner;Landroidx/activity/OnBackPressedCallback;)V +HSPLandroidx/activity/OnBackPressedDispatcher;->addCancellableCallback$activity_release(Landroidx/activity/OnBackPressedCallback;)Landroidx/activity/Cancellable; +HSPLandroidx/activity/OnBackPressedDispatcher;->setOnBackInvokedDispatcher(Landroid/window/OnBackInvokedDispatcher;)V +HSPLandroidx/activity/OnBackPressedDispatcher;->updateBackInvokedCallbackState(Z)V +HSPLandroidx/activity/OnBackPressedDispatcher;->updateEnabledCallbacks()V +Landroidx/activity/OnBackPressedDispatcher$1; +HSPLandroidx/activity/OnBackPressedDispatcher$1;->(Landroidx/activity/OnBackPressedDispatcher;)V +Landroidx/activity/OnBackPressedDispatcher$2; +HSPLandroidx/activity/OnBackPressedDispatcher$2;->(Landroidx/activity/OnBackPressedDispatcher;)V +Landroidx/activity/OnBackPressedDispatcher$3; +HSPLandroidx/activity/OnBackPressedDispatcher$3;->(Landroidx/activity/OnBackPressedDispatcher;)V +Landroidx/activity/OnBackPressedDispatcher$4; +HSPLandroidx/activity/OnBackPressedDispatcher$4;->(Landroidx/activity/OnBackPressedDispatcher;)V +Landroidx/activity/OnBackPressedDispatcher$Api34Impl; +HSPLandroidx/activity/OnBackPressedDispatcher$Api34Impl;->()V +HSPLandroidx/activity/OnBackPressedDispatcher$Api34Impl;->()V +HSPLandroidx/activity/OnBackPressedDispatcher$Api34Impl;->createOnBackAnimationCallback(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;)Landroid/window/OnBackInvokedCallback; +Landroidx/activity/OnBackPressedDispatcher$Api34Impl$createOnBackAnimationCallback$1; +HSPLandroidx/activity/OnBackPressedDispatcher$Api34Impl$createOnBackAnimationCallback$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;)V +Landroidx/activity/OnBackPressedDispatcher$LifecycleOnBackPressedCancellable; +HSPLandroidx/activity/OnBackPressedDispatcher$LifecycleOnBackPressedCancellable;->(Landroidx/activity/OnBackPressedDispatcher;Landroidx/lifecycle/Lifecycle;Landroidx/activity/OnBackPressedCallback;)V +HSPLandroidx/activity/OnBackPressedDispatcher$LifecycleOnBackPressedCancellable;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V +Landroidx/activity/OnBackPressedDispatcher$OnBackPressedCancellable; +HSPLandroidx/activity/OnBackPressedDispatcher$OnBackPressedCancellable;->(Landroidx/activity/OnBackPressedDispatcher;Landroidx/activity/OnBackPressedCallback;)V +Landroidx/activity/OnBackPressedDispatcher$addCallback$1; +HSPLandroidx/activity/OnBackPressedDispatcher$addCallback$1;->(Ljava/lang/Object;)V +HSPLandroidx/activity/OnBackPressedDispatcher$addCallback$1;->invoke()Ljava/lang/Object; +HSPLandroidx/activity/OnBackPressedDispatcher$addCallback$1;->invoke()V +Landroidx/activity/OnBackPressedDispatcher$addCancellableCallback$1; +HSPLandroidx/activity/OnBackPressedDispatcher$addCancellableCallback$1;->(Ljava/lang/Object;)V +HSPLandroidx/activity/OnBackPressedDispatcher$addCancellableCallback$1;->invoke()Ljava/lang/Object; +HSPLandroidx/activity/OnBackPressedDispatcher$addCancellableCallback$1;->invoke()V +Landroidx/activity/OnBackPressedDispatcherOwner; +Landroidx/activity/R$id; +Landroidx/activity/ViewTreeOnBackPressedDispatcherOwner; +HSPLandroidx/activity/ViewTreeOnBackPressedDispatcherOwner;->set(Landroid/view/View;Landroidx/activity/OnBackPressedDispatcherOwner;)V +Landroidx/activity/compose/ComponentActivityKt; +HSPLandroidx/activity/compose/ComponentActivityKt;->()V +HSPLandroidx/activity/compose/ComponentActivityKt;->setContent$default(Landroidx/activity/ComponentActivity;Landroidx/compose/runtime/CompositionContext;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)V +HSPLandroidx/activity/compose/ComponentActivityKt;->setContent(Landroidx/activity/ComponentActivity;Landroidx/compose/runtime/CompositionContext;Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/activity/compose/ComponentActivityKt;->setOwners(Landroidx/activity/ComponentActivity;)V +Landroidx/activity/contextaware/ContextAware; +Landroidx/activity/contextaware/ContextAwareHelper; +HSPLandroidx/activity/contextaware/ContextAwareHelper;->()V +HSPLandroidx/activity/contextaware/ContextAwareHelper;->addOnContextAvailableListener(Landroidx/activity/contextaware/OnContextAvailableListener;)V +HSPLandroidx/activity/contextaware/ContextAwareHelper;->dispatchOnContextAvailable(Landroid/content/Context;)V +Landroidx/activity/contextaware/OnContextAvailableListener; +Landroidx/activity/result/ActivityResult; +Landroidx/activity/result/ActivityResultCallback; +Landroidx/activity/result/ActivityResultCaller; +Landroidx/activity/result/ActivityResultLauncher; +HSPLandroidx/activity/result/ActivityResultLauncher;->()V +Landroidx/activity/result/ActivityResultRegistry; +HSPLandroidx/activity/result/ActivityResultRegistry;->()V +HSPLandroidx/activity/result/ActivityResultRegistry;->bindRcKey(ILjava/lang/String;)V +HSPLandroidx/activity/result/ActivityResultRegistry;->generateRandomNumber()I +HSPLandroidx/activity/result/ActivityResultRegistry;->register(Ljava/lang/String;Landroidx/activity/result/contract/ActivityResultContract;Landroidx/activity/result/ActivityResultCallback;)Landroidx/activity/result/ActivityResultLauncher; +HSPLandroidx/activity/result/ActivityResultRegistry;->registerKey(Ljava/lang/String;)V +Landroidx/activity/result/ActivityResultRegistry$3; +HSPLandroidx/activity/result/ActivityResultRegistry$3;->(Landroidx/activity/result/ActivityResultRegistry;Ljava/lang/String;Landroidx/activity/result/contract/ActivityResultContract;)V +Landroidx/activity/result/ActivityResultRegistry$CallbackAndContract; +HSPLandroidx/activity/result/ActivityResultRegistry$CallbackAndContract;->(Landroidx/activity/result/ActivityResultCallback;Landroidx/activity/result/contract/ActivityResultContract;)V +Landroidx/activity/result/ActivityResultRegistryOwner; +Landroidx/activity/result/contract/ActivityResultContract; +HSPLandroidx/activity/result/contract/ActivityResultContract;->()V +Landroidx/activity/result/contract/ActivityResultContracts$RequestMultiplePermissions; +HSPLandroidx/activity/result/contract/ActivityResultContracts$RequestMultiplePermissions;->()V +HSPLandroidx/activity/result/contract/ActivityResultContracts$RequestMultiplePermissions;->()V +Landroidx/activity/result/contract/ActivityResultContracts$RequestMultiplePermissions$Companion; +HSPLandroidx/activity/result/contract/ActivityResultContracts$RequestMultiplePermissions$Companion;->()V +HSPLandroidx/activity/result/contract/ActivityResultContracts$RequestMultiplePermissions$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/activity/result/contract/ActivityResultContracts$StartActivityForResult; +HSPLandroidx/activity/result/contract/ActivityResultContracts$StartActivityForResult;->()V +HSPLandroidx/activity/result/contract/ActivityResultContracts$StartActivityForResult;->()V +Landroidx/activity/result/contract/ActivityResultContracts$StartActivityForResult$Companion; +HSPLandroidx/activity/result/contract/ActivityResultContracts$StartActivityForResult$Companion;->()V +HSPLandroidx/activity/result/contract/ActivityResultContracts$StartActivityForResult$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/appcompat/R$drawable; +Landroidx/appcompat/R$id; +Landroidx/appcompat/R$layout; +Landroidx/appcompat/R$style; +Landroidx/appcompat/R$styleable; +HSPLandroidx/appcompat/R$styleable;->()V +Landroidx/appcompat/app/ActionBarDrawerToggle$DelegateProvider; +Landroidx/appcompat/app/AppCompatActivity; +HSPLandroidx/appcompat/app/AppCompatActivity;->()V +HSPLandroidx/appcompat/app/AppCompatActivity;->attachBaseContext(Landroid/content/Context;)V +HSPLandroidx/appcompat/app/AppCompatActivity;->getDelegate()Landroidx/appcompat/app/AppCompatDelegate; +HSPLandroidx/appcompat/app/AppCompatActivity;->getResources()Landroid/content/res/Resources; +HSPLandroidx/appcompat/app/AppCompatActivity;->initDelegate()V +HSPLandroidx/appcompat/app/AppCompatActivity;->initViewTreeOwners()V +HSPLandroidx/appcompat/app/AppCompatActivity;->invalidateOptionsMenu()V +HSPLandroidx/appcompat/app/AppCompatActivity;->onContentChanged()V +HSPLandroidx/appcompat/app/AppCompatActivity;->onPostCreate(Landroid/os/Bundle;)V +HSPLandroidx/appcompat/app/AppCompatActivity;->onPostResume()V +HSPLandroidx/appcompat/app/AppCompatActivity;->onStart()V +HSPLandroidx/appcompat/app/AppCompatActivity;->onSupportContentChanged()V +HSPLandroidx/appcompat/app/AppCompatActivity;->onTitleChanged(Ljava/lang/CharSequence;I)V +HSPLandroidx/appcompat/app/AppCompatActivity;->setContentView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V +HSPLandroidx/appcompat/app/AppCompatActivity;->setTheme(I)V +Landroidx/appcompat/app/AppCompatActivity$1; +HSPLandroidx/appcompat/app/AppCompatActivity$1;->(Landroidx/appcompat/app/AppCompatActivity;)V +Landroidx/appcompat/app/AppCompatActivity$2; +HSPLandroidx/appcompat/app/AppCompatActivity$2;->(Landroidx/appcompat/app/AppCompatActivity;)V +HSPLandroidx/appcompat/app/AppCompatActivity$2;->onContextAvailable(Landroid/content/Context;)V +Landroidx/appcompat/app/AppCompatCallback; +Landroidx/appcompat/app/AppCompatDelegate; +HSPLandroidx/appcompat/app/AppCompatDelegate;->()V +HSPLandroidx/appcompat/app/AppCompatDelegate;->()V +HSPLandroidx/appcompat/app/AppCompatDelegate;->addActiveDelegate(Landroidx/appcompat/app/AppCompatDelegate;)V +HSPLandroidx/appcompat/app/AppCompatDelegate;->attachBaseContext(Landroid/content/Context;)V +HSPLandroidx/appcompat/app/AppCompatDelegate;->attachBaseContext2(Landroid/content/Context;)Landroid/content/Context; +HSPLandroidx/appcompat/app/AppCompatDelegate;->create(Landroid/app/Activity;Landroidx/appcompat/app/AppCompatCallback;)Landroidx/appcompat/app/AppCompatDelegate; +HSPLandroidx/appcompat/app/AppCompatDelegate;->getApplicationLocales()Landroidx/core/os/LocaleListCompat; +HSPLandroidx/appcompat/app/AppCompatDelegate;->getDefaultNightMode()I +HSPLandroidx/appcompat/app/AppCompatDelegate;->getLocaleManagerForApplication()Ljava/lang/Object; +HSPLandroidx/appcompat/app/AppCompatDelegate;->isAutoStorageOptedIn(Landroid/content/Context;)Z +HSPLandroidx/appcompat/app/AppCompatDelegate;->lambda$syncRequestedAndStoredLocales$1(Landroid/content/Context;)V +HSPLandroidx/appcompat/app/AppCompatDelegate;->removeDelegateFromActives(Landroidx/appcompat/app/AppCompatDelegate;)V +HSPLandroidx/appcompat/app/AppCompatDelegate;->setOnBackInvokedDispatcher(Landroid/window/OnBackInvokedDispatcher;)V +HSPLandroidx/appcompat/app/AppCompatDelegate;->syncLocalesToFramework(Landroid/content/Context;)V +HSPLandroidx/appcompat/app/AppCompatDelegate;->syncRequestedAndStoredLocales(Landroid/content/Context;)V +Landroidx/appcompat/app/AppCompatDelegate$$ExternalSyntheticLambda1; +HSPLandroidx/appcompat/app/AppCompatDelegate$$ExternalSyntheticLambda1;->(Landroid/content/Context;)V +HSPLandroidx/appcompat/app/AppCompatDelegate$$ExternalSyntheticLambda1;->run()V +Landroidx/appcompat/app/AppCompatDelegate$Api24Impl; +HSPLandroidx/appcompat/app/AppCompatDelegate$Api24Impl;->localeListForLanguageTags(Ljava/lang/String;)Landroid/os/LocaleList; +Landroidx/appcompat/app/AppCompatDelegate$Api33Impl; +HSPLandroidx/appcompat/app/AppCompatDelegate$Api33Impl;->localeManagerSetApplicationLocales(Ljava/lang/Object;Landroid/os/LocaleList;)V +Landroidx/appcompat/app/AppCompatDelegate$SerialExecutor; +HSPLandroidx/appcompat/app/AppCompatDelegate$SerialExecutor;->(Ljava/util/concurrent/Executor;)V +HSPLandroidx/appcompat/app/AppCompatDelegate$SerialExecutor;->execute(Ljava/lang/Runnable;)V +HSPLandroidx/appcompat/app/AppCompatDelegate$SerialExecutor;->lambda$execute$0$androidx-appcompat-app-AppCompatDelegate$SerialExecutor(Ljava/lang/Runnable;)V +HSPLandroidx/appcompat/app/AppCompatDelegate$SerialExecutor;->scheduleNext()V +Landroidx/appcompat/app/AppCompatDelegate$SerialExecutor$$ExternalSyntheticLambda0; +HSPLandroidx/appcompat/app/AppCompatDelegate$SerialExecutor$$ExternalSyntheticLambda0;->(Landroidx/appcompat/app/AppCompatDelegate$SerialExecutor;Ljava/lang/Runnable;)V +HSPLandroidx/appcompat/app/AppCompatDelegate$SerialExecutor$$ExternalSyntheticLambda0;->run()V +Landroidx/appcompat/app/AppCompatDelegate$ThreadPerTaskExecutor; +HSPLandroidx/appcompat/app/AppCompatDelegate$ThreadPerTaskExecutor;->()V +HSPLandroidx/appcompat/app/AppCompatDelegate$ThreadPerTaskExecutor;->execute(Ljava/lang/Runnable;)V +Landroidx/appcompat/app/AppCompatDelegateImpl; +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->()V +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->(Landroid/app/Activity;Landroidx/appcompat/app/AppCompatCallback;)V +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->(Landroid/content/Context;Landroid/view/Window;Landroidx/appcompat/app/AppCompatCallback;Ljava/lang/Object;)V +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->applyApplicationSpecificConfig(Z)Z +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->applyApplicationSpecificConfig(ZZ)Z +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->applyFixedSizeWindow()V +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->attachBaseContext2(Landroid/content/Context;)Landroid/content/Context; +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->attachToWindow(Landroid/view/Window;)V +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->calculateApplicationLocales(Landroid/content/Context;)Landroidx/core/os/LocaleListCompat; +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->calculateNightMode()I +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->createOverrideAppConfiguration(Landroid/content/Context;ILandroidx/core/os/LocaleListCompat;Landroid/content/res/Configuration;Z)Landroid/content/res/Configuration; +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->createSubDecor()Landroid/view/ViewGroup; +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->createView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View; +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->doInvalidatePanelMenu(I)V +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->ensureSubDecor()V +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->ensureWindow()V +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->getActivityHandlesConfigChangesFlags(Landroid/content/Context;)I +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->getConfigurationLocales(Landroid/content/res/Configuration;)Landroidx/core/os/LocaleListCompat; +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->getPanelState(IZ)Landroidx/appcompat/app/AppCompatDelegateImpl$PanelFeatureState; +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->getSupportActionBar()Landroidx/appcompat/app/ActionBar; +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->getTitle()Ljava/lang/CharSequence; +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->initWindowDecorActionBar()V +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->installViewFactory()V +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->invalidateOptionsMenu()V +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->invalidatePanelMenu(I)V +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->mapNightMode(Landroid/content/Context;I)I +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->onCreate(Landroid/os/Bundle;)V +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->onCreateView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View; +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->onPostCreate(Landroid/os/Bundle;)V +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->onPostResume()V +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->onStart()V +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->onSubDecorInstalled(Landroid/view/ViewGroup;)V +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->peekSupportActionBar()Landroidx/appcompat/app/ActionBar; +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->requestWindowFeature(I)Z +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->sanitizeWindowFeatureId(I)I +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->setContentView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->setOnBackInvokedDispatcher(Landroid/window/OnBackInvokedDispatcher;)V +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->setTheme(I)V +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->setTitle(Ljava/lang/CharSequence;)V +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->shouldRegisterBackInvokedCallback()Z +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->throwFeatureRequestIfSubDecorInstalled()V +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->updateAppConfiguration(ILandroidx/core/os/LocaleListCompat;Z)Z +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->updateBackInvokedCallbackState()V +HSPLandroidx/appcompat/app/AppCompatDelegateImpl;->updateStatusGuard(Landroidx/core/view/WindowInsetsCompat;Landroid/graphics/Rect;)I +Landroidx/appcompat/app/AppCompatDelegateImpl$2; +HSPLandroidx/appcompat/app/AppCompatDelegateImpl$2;->(Landroidx/appcompat/app/AppCompatDelegateImpl;)V +HSPLandroidx/appcompat/app/AppCompatDelegateImpl$2;->run()V +Landroidx/appcompat/app/AppCompatDelegateImpl$3; +HSPLandroidx/appcompat/app/AppCompatDelegateImpl$3;->(Landroidx/appcompat/app/AppCompatDelegateImpl;)V +HSPLandroidx/appcompat/app/AppCompatDelegateImpl$3;->onApplyWindowInsets(Landroid/view/View;Landroidx/core/view/WindowInsetsCompat;)Landroidx/core/view/WindowInsetsCompat; +Landroidx/appcompat/app/AppCompatDelegateImpl$5; +HSPLandroidx/appcompat/app/AppCompatDelegateImpl$5;->(Landroidx/appcompat/app/AppCompatDelegateImpl;)V +HSPLandroidx/appcompat/app/AppCompatDelegateImpl$5;->onAttachedFromWindow()V +Landroidx/appcompat/app/AppCompatDelegateImpl$Api17Impl; +HSPLandroidx/appcompat/app/AppCompatDelegateImpl$Api17Impl;->createConfigurationContext(Landroid/content/Context;Landroid/content/res/Configuration;)Landroid/content/Context; +Landroidx/appcompat/app/AppCompatDelegateImpl$Api24Impl; +HSPLandroidx/appcompat/app/AppCompatDelegateImpl$Api24Impl;->getLocales(Landroid/content/res/Configuration;)Landroidx/core/os/LocaleListCompat; +Landroidx/appcompat/app/AppCompatDelegateImpl$Api33Impl; +HSPLandroidx/appcompat/app/AppCompatDelegateImpl$Api33Impl;->getOnBackInvokedDispatcher(Landroid/app/Activity;)Landroid/window/OnBackInvokedDispatcher; +Landroidx/appcompat/app/AppCompatDelegateImpl$AppCompatWindowCallback; +HSPLandroidx/appcompat/app/AppCompatDelegateImpl$AppCompatWindowCallback;->(Landroidx/appcompat/app/AppCompatDelegateImpl;Landroid/view/Window$Callback;)V +HSPLandroidx/appcompat/app/AppCompatDelegateImpl$AppCompatWindowCallback;->bypassOnContentChanged(Landroid/view/Window$Callback;)V +HSPLandroidx/appcompat/app/AppCompatDelegateImpl$AppCompatWindowCallback;->onContentChanged()V +Landroidx/appcompat/app/AppCompatDelegateImpl$PanelFeatureState; +HSPLandroidx/appcompat/app/AppCompatDelegateImpl$PanelFeatureState;->(I)V +Landroidx/appcompat/app/AppCompatViewInflater; +HSPLandroidx/appcompat/app/AppCompatViewInflater;->()V +HSPLandroidx/appcompat/app/AppCompatViewInflater;->()V +HSPLandroidx/appcompat/app/AppCompatViewInflater;->createView(Landroid/content/Context;Ljava/lang/String;Landroid/util/AttributeSet;)Landroid/view/View; +HSPLandroidx/appcompat/app/AppCompatViewInflater;->createView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;ZZZZ)Landroid/view/View; +HSPLandroidx/appcompat/app/AppCompatViewInflater;->themifyContext(Landroid/content/Context;Landroid/util/AttributeSet;ZZ)Landroid/content/Context; +Landroidx/appcompat/app/AppLocalesMetadataHolderService; +HSPLandroidx/appcompat/app/AppLocalesMetadataHolderService;->getServiceInfo(Landroid/content/Context;)Landroid/content/pm/ServiceInfo; +Landroidx/appcompat/app/AppLocalesMetadataHolderService$Api24Impl; +HSPLandroidx/appcompat/app/AppLocalesMetadataHolderService$Api24Impl;->getDisabledComponentFlag()I +Landroidx/appcompat/resources/R$drawable; +Landroidx/appcompat/view/ContextThemeWrapper; +HSPLandroidx/appcompat/view/ContextThemeWrapper;->(Landroid/content/Context;I)V +HSPLandroidx/appcompat/view/ContextThemeWrapper;->applyOverrideConfiguration(Landroid/content/res/Configuration;)V +HSPLandroidx/appcompat/view/ContextThemeWrapper;->getResources()Landroid/content/res/Resources; +HSPLandroidx/appcompat/view/ContextThemeWrapper;->getResourcesInternal()Landroid/content/res/Resources; +HSPLandroidx/appcompat/view/ContextThemeWrapper;->getSystemService(Ljava/lang/String;)Ljava/lang/Object; +HSPLandroidx/appcompat/view/ContextThemeWrapper;->getTheme()Landroid/content/res/Resources$Theme; +HSPLandroidx/appcompat/view/ContextThemeWrapper;->initializeTheme()V +HSPLandroidx/appcompat/view/ContextThemeWrapper;->isEmptyConfiguration(Landroid/content/res/Configuration;)Z +HSPLandroidx/appcompat/view/ContextThemeWrapper;->onApplyThemeResource(Landroid/content/res/Resources$Theme;IZ)V +Landroidx/appcompat/view/WindowCallbackWrapper; +HSPLandroidx/appcompat/view/WindowCallbackWrapper;->(Landroid/view/Window$Callback;)V +HSPLandroidx/appcompat/view/WindowCallbackWrapper;->dispatchPopulateAccessibilityEvent(Landroid/view/accessibility/AccessibilityEvent;)Z +HSPLandroidx/appcompat/view/WindowCallbackWrapper;->dispatchTouchEvent(Landroid/view/MotionEvent;)Z +HSPLandroidx/appcompat/view/WindowCallbackWrapper;->getWrapped()Landroid/view/Window$Callback; +HSPLandroidx/appcompat/view/WindowCallbackWrapper;->onAttachedToWindow()V +HSPLandroidx/appcompat/view/WindowCallbackWrapper;->onWindowAttributesChanged(Landroid/view/WindowManager$LayoutParams;)V +HSPLandroidx/appcompat/view/WindowCallbackWrapper;->onWindowFocusChanged(Z)V +Landroidx/appcompat/view/menu/MenuBuilder$Callback; +Landroidx/appcompat/widget/AppCompatDrawableManager; +HSPLandroidx/appcompat/widget/AppCompatDrawableManager;->()V +HSPLandroidx/appcompat/widget/AppCompatDrawableManager;->()V +HSPLandroidx/appcompat/widget/AppCompatDrawableManager;->access$000()Landroid/graphics/PorterDuff$Mode; +HSPLandroidx/appcompat/widget/AppCompatDrawableManager;->get()Landroidx/appcompat/widget/AppCompatDrawableManager; +HSPLandroidx/appcompat/widget/AppCompatDrawableManager;->getDrawable(Landroid/content/Context;IZ)Landroid/graphics/drawable/Drawable; +HSPLandroidx/appcompat/widget/AppCompatDrawableManager;->preload()V +Landroidx/appcompat/widget/AppCompatDrawableManager$1; +HSPLandroidx/appcompat/widget/AppCompatDrawableManager$1;->()V +HSPLandroidx/appcompat/widget/AppCompatDrawableManager$1;->arrayContains([II)Z +HSPLandroidx/appcompat/widget/AppCompatDrawableManager$1;->createDrawableFor(Landroidx/appcompat/widget/ResourceManagerInternal;Landroid/content/Context;I)Landroid/graphics/drawable/Drawable; +HSPLandroidx/appcompat/widget/AppCompatDrawableManager$1;->getTintListForDrawableRes(Landroid/content/Context;I)Landroid/content/res/ColorStateList; +HSPLandroidx/appcompat/widget/AppCompatDrawableManager$1;->tintDrawable(Landroid/content/Context;ILandroid/graphics/drawable/Drawable;)Z +HSPLandroidx/appcompat/widget/AppCompatDrawableManager$1;->tintDrawableUsingColorFilter(Landroid/content/Context;ILandroid/graphics/drawable/Drawable;)Z +Landroidx/appcompat/widget/ContentFrameLayout; +HSPLandroidx/appcompat/widget/ContentFrameLayout;->(Landroid/content/Context;Landroid/util/AttributeSet;)V +HSPLandroidx/appcompat/widget/ContentFrameLayout;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V +HSPLandroidx/appcompat/widget/ContentFrameLayout;->getMinWidthMajor()Landroid/util/TypedValue; +HSPLandroidx/appcompat/widget/ContentFrameLayout;->getMinWidthMinor()Landroid/util/TypedValue; +HSPLandroidx/appcompat/widget/ContentFrameLayout;->onAttachedToWindow()V +HSPLandroidx/appcompat/widget/ContentFrameLayout;->onMeasure(II)V +HSPLandroidx/appcompat/widget/ContentFrameLayout;->setAttachListener(Landroidx/appcompat/widget/ContentFrameLayout$OnAttachListener;)V +HSPLandroidx/appcompat/widget/ContentFrameLayout;->setDecorPadding(IIII)V +Landroidx/appcompat/widget/ContentFrameLayout$OnAttachListener; +Landroidx/appcompat/widget/DrawableUtils; +HSPLandroidx/appcompat/widget/DrawableUtils;->()V +HSPLandroidx/appcompat/widget/DrawableUtils;->fixDrawable(Landroid/graphics/drawable/Drawable;)V +Landroidx/appcompat/widget/FitWindowsLinearLayout; +HSPLandroidx/appcompat/widget/FitWindowsLinearLayout;->(Landroid/content/Context;Landroid/util/AttributeSet;)V +HSPLandroidx/appcompat/widget/FitWindowsLinearLayout;->fitSystemWindows(Landroid/graphics/Rect;)Z +Landroidx/appcompat/widget/FitWindowsViewGroup; +Landroidx/appcompat/widget/ResourceManagerInternal; +HSPLandroidx/appcompat/widget/ResourceManagerInternal;->()V +HSPLandroidx/appcompat/widget/ResourceManagerInternal;->()V +HSPLandroidx/appcompat/widget/ResourceManagerInternal;->checkVectorDrawableSetup(Landroid/content/Context;)V +HSPLandroidx/appcompat/widget/ResourceManagerInternal;->createCacheKey(Landroid/util/TypedValue;)J +HSPLandroidx/appcompat/widget/ResourceManagerInternal;->createDrawableIfNeeded(Landroid/content/Context;I)Landroid/graphics/drawable/Drawable; +HSPLandroidx/appcompat/widget/ResourceManagerInternal;->get()Landroidx/appcompat/widget/ResourceManagerInternal; +HSPLandroidx/appcompat/widget/ResourceManagerInternal;->getCachedDrawable(Landroid/content/Context;J)Landroid/graphics/drawable/Drawable; +HSPLandroidx/appcompat/widget/ResourceManagerInternal;->getDrawable(Landroid/content/Context;I)Landroid/graphics/drawable/Drawable; +HSPLandroidx/appcompat/widget/ResourceManagerInternal;->getDrawable(Landroid/content/Context;IZ)Landroid/graphics/drawable/Drawable; +HSPLandroidx/appcompat/widget/ResourceManagerInternal;->getTintList(Landroid/content/Context;I)Landroid/content/res/ColorStateList; +HSPLandroidx/appcompat/widget/ResourceManagerInternal;->getTintListFromCache(Landroid/content/Context;I)Landroid/content/res/ColorStateList; +HSPLandroidx/appcompat/widget/ResourceManagerInternal;->installDefaultInflateDelegates(Landroidx/appcompat/widget/ResourceManagerInternal;)V +HSPLandroidx/appcompat/widget/ResourceManagerInternal;->isVectorDrawable(Landroid/graphics/drawable/Drawable;)Z +HSPLandroidx/appcompat/widget/ResourceManagerInternal;->loadDrawableFromDelegates(Landroid/content/Context;I)Landroid/graphics/drawable/Drawable; +HSPLandroidx/appcompat/widget/ResourceManagerInternal;->setHooks(Landroidx/appcompat/widget/ResourceManagerInternal$ResourceManagerHooks;)V +HSPLandroidx/appcompat/widget/ResourceManagerInternal;->tintDrawable(Landroid/content/Context;IZLandroid/graphics/drawable/Drawable;)Landroid/graphics/drawable/Drawable; +HSPLandroidx/appcompat/widget/ResourceManagerInternal;->tintDrawableUsingColorFilter(Landroid/content/Context;ILandroid/graphics/drawable/Drawable;)Z +Landroidx/appcompat/widget/ResourceManagerInternal$ColorFilterLruCache; +HSPLandroidx/appcompat/widget/ResourceManagerInternal$ColorFilterLruCache;->(I)V +Landroidx/appcompat/widget/ResourceManagerInternal$ResourceManagerHooks; +Landroidx/appcompat/widget/ResourcesWrapper; +Landroidx/appcompat/widget/TintTypedArray; +HSPLandroidx/appcompat/widget/TintTypedArray;->(Landroid/content/Context;Landroid/content/res/TypedArray;)V +HSPLandroidx/appcompat/widget/TintTypedArray;->getDrawableIfKnown(I)Landroid/graphics/drawable/Drawable; +HSPLandroidx/appcompat/widget/TintTypedArray;->obtainStyledAttributes(Landroid/content/Context;Landroid/util/AttributeSet;[I)Landroidx/appcompat/widget/TintTypedArray; +HSPLandroidx/appcompat/widget/TintTypedArray;->recycle()V +Landroidx/appcompat/widget/VectorEnabledTintResources; +HSPLandroidx/appcompat/widget/VectorEnabledTintResources;->()V +HSPLandroidx/appcompat/widget/VectorEnabledTintResources;->isCompatVectorFromResourcesEnabled()Z +HSPLandroidx/appcompat/widget/VectorEnabledTintResources;->shouldBeUsed()Z +Landroidx/appcompat/widget/ViewStubCompat; +HSPLandroidx/appcompat/widget/ViewStubCompat;->(Landroid/content/Context;Landroid/util/AttributeSet;)V +HSPLandroidx/appcompat/widget/ViewStubCompat;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V +HSPLandroidx/appcompat/widget/ViewStubCompat;->setVisibility(I)V +Landroidx/appcompat/widget/ViewUtils; +HSPLandroidx/appcompat/widget/ViewUtils;->()V +HSPLandroidx/appcompat/widget/ViewUtils;->makeOptionalFitsSystemWindows(Landroid/view/View;)V +Landroidx/arch/core/executor/ArchTaskExecutor; +HSPLandroidx/arch/core/executor/ArchTaskExecutor;->()V +HSPLandroidx/arch/core/executor/ArchTaskExecutor;->()V +HSPLandroidx/arch/core/executor/ArchTaskExecutor;->executeOnDiskIO(Ljava/lang/Runnable;)V +HSPLandroidx/arch/core/executor/ArchTaskExecutor;->getIOThreadExecutor()Ljava/util/concurrent/Executor; +HSPLandroidx/arch/core/executor/ArchTaskExecutor;->getInstance()Landroidx/arch/core/executor/ArchTaskExecutor; +HSPLandroidx/arch/core/executor/ArchTaskExecutor;->isMainThread()Z +HSPLandroidx/arch/core/executor/ArchTaskExecutor;->lambda$static$1(Ljava/lang/Runnable;)V +HSPLandroidx/arch/core/executor/ArchTaskExecutor;->postToMainThread(Ljava/lang/Runnable;)V +Landroidx/arch/core/executor/ArchTaskExecutor$$ExternalSyntheticLambda0; +HSPLandroidx/arch/core/executor/ArchTaskExecutor$$ExternalSyntheticLambda0;->()V +Landroidx/arch/core/executor/ArchTaskExecutor$$ExternalSyntheticLambda1; +HSPLandroidx/arch/core/executor/ArchTaskExecutor$$ExternalSyntheticLambda1;->()V +HSPLandroidx/arch/core/executor/ArchTaskExecutor$$ExternalSyntheticLambda1;->execute(Ljava/lang/Runnable;)V +Landroidx/arch/core/executor/DefaultTaskExecutor; +HSPLandroidx/arch/core/executor/DefaultTaskExecutor;->()V +HSPLandroidx/arch/core/executor/DefaultTaskExecutor;->createAsync(Landroid/os/Looper;)Landroid/os/Handler; +HSPLandroidx/arch/core/executor/DefaultTaskExecutor;->executeOnDiskIO(Ljava/lang/Runnable;)V +HSPLandroidx/arch/core/executor/DefaultTaskExecutor;->isMainThread()Z +HSPLandroidx/arch/core/executor/DefaultTaskExecutor;->postToMainThread(Ljava/lang/Runnable;)V +Landroidx/arch/core/executor/DefaultTaskExecutor$1; +HSPLandroidx/arch/core/executor/DefaultTaskExecutor$1;->(Landroidx/arch/core/executor/DefaultTaskExecutor;)V +HSPLandroidx/arch/core/executor/DefaultTaskExecutor$1;->newThread(Ljava/lang/Runnable;)Ljava/lang/Thread; +Landroidx/arch/core/executor/DefaultTaskExecutor$Api28Impl; +HSPLandroidx/arch/core/executor/DefaultTaskExecutor$Api28Impl;->createAsync(Landroid/os/Looper;)Landroid/os/Handler; +Landroidx/arch/core/executor/TaskExecutor; +HSPLandroidx/arch/core/executor/TaskExecutor;->()V +Landroidx/arch/core/internal/FastSafeIterableMap; +HSPLandroidx/arch/core/internal/FastSafeIterableMap;->()V +HSPLandroidx/arch/core/internal/FastSafeIterableMap;->ceil(Ljava/lang/Object;)Ljava/util/Map$Entry; +HSPLandroidx/arch/core/internal/FastSafeIterableMap;->contains(Ljava/lang/Object;)Z +HSPLandroidx/arch/core/internal/FastSafeIterableMap;->get(Ljava/lang/Object;)Landroidx/arch/core/internal/SafeIterableMap$Entry; +HSPLandroidx/arch/core/internal/FastSafeIterableMap;->putIfAbsent(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/arch/core/internal/FastSafeIterableMap;->remove(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/arch/core/internal/SafeIterableMap; +HSPLandroidx/arch/core/internal/SafeIterableMap;->()V +HSPLandroidx/arch/core/internal/SafeIterableMap;->eldest()Ljava/util/Map$Entry; +HSPLandroidx/arch/core/internal/SafeIterableMap;->get(Ljava/lang/Object;)Landroidx/arch/core/internal/SafeIterableMap$Entry; +HSPLandroidx/arch/core/internal/SafeIterableMap;->iterator()Ljava/util/Iterator; +HSPLandroidx/arch/core/internal/SafeIterableMap;->iteratorWithAdditions()Landroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions; +HSPLandroidx/arch/core/internal/SafeIterableMap;->newest()Ljava/util/Map$Entry; +HSPLandroidx/arch/core/internal/SafeIterableMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Landroidx/arch/core/internal/SafeIterableMap$Entry; +HSPLandroidx/arch/core/internal/SafeIterableMap;->putIfAbsent(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/arch/core/internal/SafeIterableMap;->remove(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/arch/core/internal/SafeIterableMap;->size()I +Landroidx/arch/core/internal/SafeIterableMap$AscendingIterator; +HSPLandroidx/arch/core/internal/SafeIterableMap$AscendingIterator;->(Landroidx/arch/core/internal/SafeIterableMap$Entry;Landroidx/arch/core/internal/SafeIterableMap$Entry;)V +Landroidx/arch/core/internal/SafeIterableMap$Entry; +HSPLandroidx/arch/core/internal/SafeIterableMap$Entry;->(Ljava/lang/Object;Ljava/lang/Object;)V +HSPLandroidx/arch/core/internal/SafeIterableMap$Entry;->getKey()Ljava/lang/Object; +HSPLandroidx/arch/core/internal/SafeIterableMap$Entry;->getValue()Ljava/lang/Object; +Landroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions; +HSPLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;->(Landroidx/arch/core/internal/SafeIterableMap;)V +HSPLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;->hasNext()Z +HSPLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;->next()Ljava/lang/Object; +HSPLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;->next()Ljava/util/Map$Entry; +HSPLandroidx/arch/core/internal/SafeIterableMap$IteratorWithAdditions;->supportRemove(Landroidx/arch/core/internal/SafeIterableMap$Entry;)V +Landroidx/arch/core/internal/SafeIterableMap$ListIterator; +HSPLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->(Landroidx/arch/core/internal/SafeIterableMap$Entry;Landroidx/arch/core/internal/SafeIterableMap$Entry;)V +HSPLandroidx/arch/core/internal/SafeIterableMap$ListIterator;->hasNext()Z +Landroidx/arch/core/internal/SafeIterableMap$SupportRemove; +HSPLandroidx/arch/core/internal/SafeIterableMap$SupportRemove;->()V +Landroidx/arch/core/util/Function; +Landroidx/biometric/BiometricManager; +HSPLandroidx/biometric/BiometricManager;->(Landroidx/biometric/BiometricManager$Injector;)V +HSPLandroidx/biometric/BiometricManager;->canAuthenticate(I)I +HSPLandroidx/biometric/BiometricManager;->from(Landroid/content/Context;)Landroidx/biometric/BiometricManager; +Landroidx/biometric/BiometricManager$Api29Impl; +HSPLandroidx/biometric/BiometricManager$Api29Impl;->create(Landroid/content/Context;)Landroid/hardware/biometrics/BiometricManager; +Landroidx/biometric/BiometricManager$Api30Impl; +HSPLandroidx/biometric/BiometricManager$Api30Impl;->canAuthenticate(Landroid/hardware/biometrics/BiometricManager;I)I +Landroidx/biometric/BiometricManager$DefaultInjector; +HSPLandroidx/biometric/BiometricManager$DefaultInjector;->(Landroid/content/Context;)V +HSPLandroidx/biometric/BiometricManager$DefaultInjector;->getBiometricManager()Landroid/hardware/biometrics/BiometricManager; +Landroidx/biometric/BiometricManager$Injector; +PLandroidx/biometric/auth/Class2BiometricAuthExtensionsKt$$ExternalSyntheticLambda0;->()V +Landroidx/camera/view/PreviewView$1$$ExternalSyntheticBackportWithForwarding0; +HSPLandroidx/camera/view/PreviewView$1$$ExternalSyntheticBackportWithForwarding0;->m(Ljava/util/concurrent/atomic/AtomicReference;Ljava/lang/Object;Ljava/lang/Object;)Z +Landroidx/collection/ArrayMap; +HSPLandroidx/collection/ArrayMap;->()V +HSPLandroidx/collection/ArrayMap;->keySet()Ljava/util/Set; +HSPLandroidx/collection/ArrayMap;->values()Ljava/util/Collection; +Landroidx/collection/ArrayMap$KeyIterator; +HSPLandroidx/collection/ArrayMap$KeyIterator;->(Landroidx/collection/ArrayMap;)V +Landroidx/collection/ArrayMap$KeySet; +HSPLandroidx/collection/ArrayMap$KeySet;->(Landroidx/collection/ArrayMap;)V +HSPLandroidx/collection/ArrayMap$KeySet;->iterator()Ljava/util/Iterator; +Landroidx/collection/ArrayMap$ValueCollection; +HSPLandroidx/collection/ArrayMap$ValueCollection;->(Landroidx/collection/ArrayMap;)V +HSPLandroidx/collection/ArrayMap$ValueCollection;->iterator()Ljava/util/Iterator; +Landroidx/collection/ArrayMap$ValueIterator; +HSPLandroidx/collection/ArrayMap$ValueIterator;->(Landroidx/collection/ArrayMap;)V +Landroidx/collection/ArraySet; +HSPLandroidx/collection/ArraySet;->()V +HSPLandroidx/collection/ArraySet;->()V +HSPLandroidx/collection/ArraySet;->(I)V +HSPLandroidx/collection/ArraySet;->add(Ljava/lang/Object;)Z +HSPLandroidx/collection/ArraySet;->allocArrays(I)V +HSPLandroidx/collection/ArraySet;->clear()V +HSPLandroidx/collection/ArraySet;->freeArrays([I[Ljava/lang/Object;I)V +HSPLandroidx/collection/ArraySet;->indexOf(Ljava/lang/Object;I)I +HSPLandroidx/collection/ArraySet;->iterator()Ljava/util/Iterator; +HSPLandroidx/collection/ArraySet;->toArray()[Ljava/lang/Object; +Landroidx/collection/ArraySet$ElementIterator; +HSPLandroidx/collection/ArraySet$ElementIterator;->(Landroidx/collection/ArraySet;)V +Landroidx/collection/ContainerHelpers; +HSPLandroidx/collection/ContainerHelpers;->()V +HSPLandroidx/collection/ContainerHelpers;->binarySearch([III)I +HSPLandroidx/collection/ContainerHelpers;->idealByteArraySize(I)I +HSPLandroidx/collection/ContainerHelpers;->idealIntArraySize(I)I +Landroidx/collection/IndexBasedArrayIterator; +HSPLandroidx/collection/IndexBasedArrayIterator;->(I)V +HSPLandroidx/collection/IndexBasedArrayIterator;->hasNext()Z +Landroidx/collection/LongSparseArray; +Landroidx/collection/LruCache; +HSPLandroidx/collection/LruCache;->(I)V +Landroidx/collection/SimpleArrayMap; +HSPLandroidx/collection/SimpleArrayMap;->()V +HSPLandroidx/collection/SimpleArrayMap;->allocArrays(I)V +HSPLandroidx/collection/SimpleArrayMap;->binarySearchHashes([III)I +HSPLandroidx/collection/SimpleArrayMap;->clear()V +HSPLandroidx/collection/SimpleArrayMap;->containsKey(Ljava/lang/Object;)Z +HSPLandroidx/collection/SimpleArrayMap;->freeArrays([I[Ljava/lang/Object;I)V +HSPLandroidx/collection/SimpleArrayMap;->get(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/collection/SimpleArrayMap;->getOrDefault(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/collection/SimpleArrayMap;->indexOf(Ljava/lang/Object;I)I +HSPLandroidx/collection/SimpleArrayMap;->indexOfKey(Ljava/lang/Object;)I +HSPLandroidx/collection/SimpleArrayMap;->isEmpty()Z +HSPLandroidx/collection/SimpleArrayMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/collection/SparseArrayCompat; +HSPLandroidx/collection/SparseArrayCompat;->()V +HSPLandroidx/collection/SparseArrayCompat;->()V +HSPLandroidx/collection/SparseArrayCompat;->(I)V +Landroidx/compose/animation/AnimatedContentKt; +HSPLandroidx/compose/animation/AnimatedContentKt;->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 +HSPLandroidx/compose/animation/AnimatedContentKt;->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 +HSPLandroidx/compose/animation/AnimatedContentKt;->SizeTransform$default(ZLkotlin/jvm/functions/Function2;ILjava/lang/Object;)Landroidx/compose/animation/SizeTransform; +HSPLandroidx/compose/animation/AnimatedContentKt;->SizeTransform(ZLkotlin/jvm/functions/Function2;)Landroidx/compose/animation/SizeTransform; +HSPLandroidx/compose/animation/AnimatedContentKt;->with(Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;)Landroidx/compose/animation/ContentTransform; +Landroidx/compose/animation/AnimatedContentKt$AnimatedContent$2; +HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$2;->()V +HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$2;->()V +HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/AnimatedContentKt$AnimatedContent$3; +HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$3;->(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 +Landroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1; +HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1;->(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 +HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$1; +HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$1;->(Landroidx/compose/animation/ContentTransform;)V +HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$1;->invoke-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; +Landroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$1$1; +HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$1$1;->(Landroidx/compose/ui/layout/Placeable;Landroidx/compose/animation/ContentTransform;)V +HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$1$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$3; +HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$3;->(Ljava/lang/Object;)V +HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$3;->invoke(Ljava/lang/Object;)Ljava/lang/Boolean; +HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$4; +HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$4;->(Landroidx/compose/animation/AnimatedContentTransitionScopeImpl;Ljava/lang/Object;Landroidx/compose/runtime/snapshots/SnapshotStateList;Lkotlin/jvm/functions/Function4;I)V +HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$4;->invoke(Landroidx/compose/animation/AnimatedVisibilityScope;Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$4$1; +HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$4$1;->(Landroidx/compose/runtime/snapshots/SnapshotStateList;Ljava/lang/Object;Landroidx/compose/animation/AnimatedContentTransitionScopeImpl;)V +HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$4$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult; +HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$4$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$4$1$invoke$$inlined$onDispose$1; +HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$6$1$4$1$invoke$$inlined$onDispose$1;->(Landroidx/compose/runtime/snapshots/SnapshotStateList;Ljava/lang/Object;Landroidx/compose/animation/AnimatedContentTransitionScopeImpl;)V +Landroidx/compose/animation/AnimatedContentKt$AnimatedContent$9; +HSPLandroidx/compose/animation/AnimatedContentKt$AnimatedContent$9;->(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 +Landroidx/compose/animation/AnimatedContentKt$SizeTransform$1; +HSPLandroidx/compose/animation/AnimatedContentKt$SizeTransform$1;->()V +HSPLandroidx/compose/animation/AnimatedContentKt$SizeTransform$1;->()V +Landroidx/compose/animation/AnimatedContentMeasurePolicy; +HSPLandroidx/compose/animation/AnimatedContentMeasurePolicy;->(Landroidx/compose/animation/AnimatedContentTransitionScopeImpl;)V +HSPLandroidx/compose/animation/AnimatedContentMeasurePolicy;->getRootScope()Landroidx/compose/animation/AnimatedContentTransitionScopeImpl; +HSPLandroidx/compose/animation/AnimatedContentMeasurePolicy;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; +Landroidx/compose/animation/AnimatedContentMeasurePolicy$measure$3; +HSPLandroidx/compose/animation/AnimatedContentMeasurePolicy$measure$3;->([Landroidx/compose/ui/layout/Placeable;Landroidx/compose/animation/AnimatedContentMeasurePolicy;II)V +HSPLandroidx/compose/animation/AnimatedContentMeasurePolicy$measure$3;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/animation/AnimatedContentMeasurePolicy$measure$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/AnimatedContentScope; +Landroidx/compose/animation/AnimatedContentScopeImpl; +HSPLandroidx/compose/animation/AnimatedContentScopeImpl;->(Landroidx/compose/animation/AnimatedVisibilityScope;)V +Landroidx/compose/animation/AnimatedContentTransitionScope; +Landroidx/compose/animation/AnimatedContentTransitionScopeImpl; +HSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl;->(Landroidx/compose/animation/core/Transition;Landroidx/compose/ui/Alignment;Landroidx/compose/ui/unit/LayoutDirection;)V +HSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl;->createSizeAnimationModifier$animation_release(Landroidx/compose/animation/ContentTransform;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl;->createSizeAnimationModifier$lambda$2(Landroidx/compose/runtime/MutableState;)Z +HSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl;->createSizeAnimationModifier$lambda$3(Landroidx/compose/runtime/MutableState;Z)V +HSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl;->getContentAlignment$animation_release()Landroidx/compose/ui/Alignment; +HSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl;->getInitialState()Ljava/lang/Object; +HSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl;->getTargetSizeMap$animation_release()Ljava/util/Map; +HSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl;->getTargetState()Ljava/lang/Object; +HSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl;->setContentAlignment$animation_release(Landroidx/compose/ui/Alignment;)V +HSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl;->setLayoutDirection$animation_release(Landroidx/compose/ui/unit/LayoutDirection;)V +HSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl;->setMeasuredSize-ozmzZPI$animation_release(J)V +Landroidx/compose/animation/AnimatedContentTransitionScopeImpl$ChildData; +HSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl$ChildData;->(Z)V +HSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl$ChildData;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl$ChildData;->isTarget()Z +HSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl$ChildData;->modifyParentData(Landroidx/compose/ui/unit/Density;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/animation/AnimatedContentTransitionScopeImpl$ChildData;->setTarget(Z)V +Landroidx/compose/animation/AnimatedEnterExitMeasurePolicy; +HSPLandroidx/compose/animation/AnimatedEnterExitMeasurePolicy;->(Landroidx/compose/animation/AnimatedVisibilityScopeImpl;)V +HSPLandroidx/compose/animation/AnimatedEnterExitMeasurePolicy;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; +Landroidx/compose/animation/AnimatedEnterExitMeasurePolicy$measure$1; +HSPLandroidx/compose/animation/AnimatedEnterExitMeasurePolicy$measure$1;->(Ljava/util/List;)V +HSPLandroidx/compose/animation/AnimatedEnterExitMeasurePolicy$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/animation/AnimatedEnterExitMeasurePolicy$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/AnimatedVisibilityKt; +HSPLandroidx/compose/animation/AnimatedVisibilityKt;->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/Function3;Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/animation/AnimatedVisibilityKt;->AnimatedVisibility(Landroidx/compose/animation/core/Transition;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V +HSPLandroidx/compose/animation/AnimatedVisibilityKt;->AnimatedVisibility(Landroidx/compose/foundation/layout/ColumnScope;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 +HSPLandroidx/compose/animation/AnimatedVisibilityKt;->AnimatedVisibility(Landroidx/compose/foundation/layout/RowScope;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 +HSPLandroidx/compose/animation/AnimatedVisibilityKt;->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 +HSPLandroidx/compose/animation/AnimatedVisibilityKt;->access$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/Function3;Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/animation/AnimatedVisibilityKt;->targetEnterExit(Landroidx/compose/animation/core/Transition;Lkotlin/jvm/functions/Function1;Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)Landroidx/compose/animation/EnterExitState; +Landroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$1$1; +HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$1$1;->(Landroidx/compose/animation/core/Transition;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$1$1$1; +HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$1$1$1;->(Landroidx/compose/animation/core/Transition;)V +HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$1$1$1;->invoke()Ljava/lang/Boolean; +HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$1$1$1;->invoke()Ljava/lang/Object; +Landroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$1$1$2; +HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$1$1$2;->(Landroidx/compose/runtime/MutableState;)V +HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$1$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$1$1$2;->emit(ZLkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$2; +HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$2;->(Landroidx/compose/animation/core/Transition;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Lkotlin/jvm/functions/Function3;I)V +HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$2;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedEnterExitImpl$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$1; +HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$1;->()V +HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$1;->()V +HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$1;->invoke(Z)Ljava/lang/Boolean; +Landroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$2; +HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$2;->(ZLandroidx/compose/ui/Modifier;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Ljava/lang/String;Lkotlin/jvm/functions/Function3;II)V +Landroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$3; +HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$3;->()V +HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$3;->()V +HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$3;->invoke(Z)Ljava/lang/Boolean; +Landroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$4; +HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$4;->(Landroidx/compose/foundation/layout/RowScope;ZLandroidx/compose/ui/Modifier;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Ljava/lang/String;Lkotlin/jvm/functions/Function3;II)V +Landroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$5; +HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$5;->()V +HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$5;->()V +HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$5;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$5;->invoke(Z)Ljava/lang/Boolean; +Landroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$6; +HSPLandroidx/compose/animation/AnimatedVisibilityKt$AnimatedVisibility$6;->(Landroidx/compose/foundation/layout/ColumnScope;ZLandroidx/compose/ui/Modifier;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Ljava/lang/String;Lkotlin/jvm/functions/Function3;II)V +Landroidx/compose/animation/AnimatedVisibilityScope; +Landroidx/compose/animation/AnimatedVisibilityScopeImpl; +HSPLandroidx/compose/animation/AnimatedVisibilityScopeImpl;->(Landroidx/compose/animation/core/Transition;)V +HSPLandroidx/compose/animation/AnimatedVisibilityScopeImpl;->getTargetSize$animation_release()Landroidx/compose/runtime/MutableState; +Landroidx/compose/animation/ChangeSize; +HSPLandroidx/compose/animation/ChangeSize;->(Landroidx/compose/ui/Alignment;Lkotlin/jvm/functions/Function1;Landroidx/compose/animation/core/FiniteAnimationSpec;Z)V +HSPLandroidx/compose/animation/ChangeSize;->equals(Ljava/lang/Object;)Z +PLandroidx/compose/animation/ChangeSize;->getAlignment()Landroidx/compose/ui/Alignment; +HSPLandroidx/compose/animation/ChangeSize;->getAnimationSpec()Landroidx/compose/animation/core/FiniteAnimationSpec; +PLandroidx/compose/animation/ChangeSize;->getClip()Z +HSPLandroidx/compose/animation/ChangeSize;->getSize()Lkotlin/jvm/functions/Function1; +Landroidx/compose/animation/ColorVectorConverterKt; +HSPLandroidx/compose/animation/ColorVectorConverterKt;->()V +HSPLandroidx/compose/animation/ColorVectorConverterKt;->getVectorConverter(Landroidx/compose/ui/graphics/Color$Companion;)Lkotlin/jvm/functions/Function1; +Landroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1; +HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1;->()V +HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1;->()V +HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1;->invoke(Landroidx/compose/ui/graphics/colorspace/ColorSpace;)Landroidx/compose/animation/core/TwoWayConverter; +HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$1; +HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$1;->()V +HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$1;->()V +HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$1;->invoke-8_81llA(J)Landroidx/compose/animation/core/AnimationVector4D; +Landroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$2; +HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$2;->(Landroidx/compose/ui/graphics/colorspace/ColorSpace;)V +HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/animation/ColorVectorConverterKt$ColorToVector$1$2;->invoke-vNxB06k(Landroidx/compose/animation/core/AnimationVector4D;)J +Landroidx/compose/animation/ContentTransform; +HSPLandroidx/compose/animation/ContentTransform;->()V +HSPLandroidx/compose/animation/ContentTransform;->(Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;FLandroidx/compose/animation/SizeTransform;)V +HSPLandroidx/compose/animation/ContentTransform;->(Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;FLandroidx/compose/animation/SizeTransform;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/animation/ContentTransform;->getSizeTransform()Landroidx/compose/animation/SizeTransform; +HSPLandroidx/compose/animation/ContentTransform;->getTargetContentEnter()Landroidx/compose/animation/EnterTransition; +HSPLandroidx/compose/animation/ContentTransform;->getTargetContentZIndex()F +Landroidx/compose/animation/CrossfadeKt; +HSPLandroidx/compose/animation/CrossfadeKt;->Crossfade(Landroidx/compose/animation/core/Transition;Landroidx/compose/ui/Modifier;Landroidx/compose/animation/core/FiniteAnimationSpec;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V +HSPLandroidx/compose/animation/CrossfadeKt;->Crossfade(Ljava/lang/Object;Landroidx/compose/ui/Modifier;Landroidx/compose/animation/core/FiniteAnimationSpec;Ljava/lang/String;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V +Landroidx/compose/animation/CrossfadeKt$Crossfade$1; +HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$1;->(Ljava/lang/Object;Landroidx/compose/ui/Modifier;Landroidx/compose/animation/core/FiniteAnimationSpec;Ljava/lang/String;Lkotlin/jvm/functions/Function3;II)V +Landroidx/compose/animation/CrossfadeKt$Crossfade$3; +HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$3;->()V +HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$3;->()V +HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/CrossfadeKt$Crossfade$4$1; +HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$4$1;->(Landroidx/compose/animation/core/Transition;)V +HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$4$1;->invoke(Ljava/lang/Object;)Ljava/lang/Boolean; +HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$4$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/CrossfadeKt$Crossfade$5$1; +HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$5$1;->(Landroidx/compose/animation/core/Transition;ILandroidx/compose/animation/core/FiniteAnimationSpec;Ljava/lang/Object;Lkotlin/jvm/functions/Function3;)V +HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$5$1;->access$invoke$lambda$1(Landroidx/compose/runtime/State;)F +HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$5$1;->invoke$lambda$1(Landroidx/compose/runtime/State;)F +HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$5$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$5$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/CrossfadeKt$Crossfade$5$1$1$1; +HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$5$1$1$1;->(Landroidx/compose/runtime/State;)V +HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$5$1$1$1;->invoke(Landroidx/compose/ui/graphics/GraphicsLayerScope;)V +HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$5$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/CrossfadeKt$Crossfade$5$1$alpha$2; +HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$5$1$alpha$2;->(Landroidx/compose/animation/core/FiniteAnimationSpec;)V +HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$5$1$alpha$2;->invoke(Landroidx/compose/animation/core/Transition$Segment;Landroidx/compose/runtime/Composer;I)Landroidx/compose/animation/core/FiniteAnimationSpec; +HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$5$1$alpha$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/CrossfadeKt$Crossfade$7; +HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$7;->(Landroidx/compose/animation/core/Transition;Landroidx/compose/ui/Modifier;Landroidx/compose/animation/core/FiniteAnimationSpec;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;II)V +HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$7;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/animation/CrossfadeKt$Crossfade$7;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/EnterExitState; +HSPLandroidx/compose/animation/EnterExitState;->$values()[Landroidx/compose/animation/EnterExitState; +HSPLandroidx/compose/animation/EnterExitState;->()V +HSPLandroidx/compose/animation/EnterExitState;->(Ljava/lang/String;I)V +HSPLandroidx/compose/animation/EnterExitState;->values()[Landroidx/compose/animation/EnterExitState; +Landroidx/compose/animation/EnterExitTransitionKt; +HSPLandroidx/compose/animation/EnterExitTransitionKt;->()V +HSPLandroidx/compose/animation/EnterExitTransitionKt;->access$createModifier$lambda$11(Landroidx/compose/runtime/State;)F +HSPLandroidx/compose/animation/EnterExitTransitionKt;->access$createModifier$lambda$13(Landroidx/compose/runtime/State;)J +HSPLandroidx/compose/animation/EnterExitTransitionKt;->access$createModifier$lambda$8(Landroidx/compose/runtime/State;)F +HSPLandroidx/compose/animation/EnterExitTransitionKt;->access$getDefaultOffsetAnimationSpec$p()Landroidx/compose/animation/core/SpringSpec; +HSPLandroidx/compose/animation/EnterExitTransitionKt;->createModifier$lambda$1(Landroidx/compose/runtime/MutableState;)Z +HSPLandroidx/compose/animation/EnterExitTransitionKt;->createModifier$lambda$11(Landroidx/compose/runtime/State;)F +HSPLandroidx/compose/animation/EnterExitTransitionKt;->createModifier$lambda$13(Landroidx/compose/runtime/State;)J +HSPLandroidx/compose/animation/EnterExitTransitionKt;->createModifier$lambda$2(Landroidx/compose/runtime/MutableState;Z)V +HSPLandroidx/compose/animation/EnterExitTransitionKt;->createModifier$lambda$4(Landroidx/compose/runtime/MutableState;)Z +HSPLandroidx/compose/animation/EnterExitTransitionKt;->createModifier$lambda$5(Landroidx/compose/runtime/MutableState;Z)V +HSPLandroidx/compose/animation/EnterExitTransitionKt;->createModifier$lambda$8(Landroidx/compose/runtime/State;)F +HSPLandroidx/compose/animation/EnterExitTransitionKt;->createModifier(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Ljava/lang/String;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/animation/EnterExitTransitionKt;->expandHorizontally$default(Landroidx/compose/animation/core/FiniteAnimationSpec;Landroidx/compose/ui/Alignment$Horizontal;ZLkotlin/jvm/functions/Function1;ILjava/lang/Object;)Landroidx/compose/animation/EnterTransition; +HSPLandroidx/compose/animation/EnterExitTransitionKt;->expandHorizontally(Landroidx/compose/animation/core/FiniteAnimationSpec;Landroidx/compose/ui/Alignment$Horizontal;ZLkotlin/jvm/functions/Function1;)Landroidx/compose/animation/EnterTransition; +HSPLandroidx/compose/animation/EnterExitTransitionKt;->expandIn$default(Landroidx/compose/animation/core/FiniteAnimationSpec;Landroidx/compose/ui/Alignment;ZLkotlin/jvm/functions/Function1;ILjava/lang/Object;)Landroidx/compose/animation/EnterTransition; +HSPLandroidx/compose/animation/EnterExitTransitionKt;->expandIn(Landroidx/compose/animation/core/FiniteAnimationSpec;Landroidx/compose/ui/Alignment;ZLkotlin/jvm/functions/Function1;)Landroidx/compose/animation/EnterTransition; +HSPLandroidx/compose/animation/EnterExitTransitionKt;->expandVertically$default(Landroidx/compose/animation/core/FiniteAnimationSpec;Landroidx/compose/ui/Alignment$Vertical;ZLkotlin/jvm/functions/Function1;ILjava/lang/Object;)Landroidx/compose/animation/EnterTransition; +HSPLandroidx/compose/animation/EnterExitTransitionKt;->expandVertically(Landroidx/compose/animation/core/FiniteAnimationSpec;Landroidx/compose/ui/Alignment$Vertical;ZLkotlin/jvm/functions/Function1;)Landroidx/compose/animation/EnterTransition; +HSPLandroidx/compose/animation/EnterExitTransitionKt;->fadeIn$default(Landroidx/compose/animation/core/FiniteAnimationSpec;FILjava/lang/Object;)Landroidx/compose/animation/EnterTransition; +HSPLandroidx/compose/animation/EnterExitTransitionKt;->fadeIn(Landroidx/compose/animation/core/FiniteAnimationSpec;F)Landroidx/compose/animation/EnterTransition; +HSPLandroidx/compose/animation/EnterExitTransitionKt;->fadeOut$default(Landroidx/compose/animation/core/FiniteAnimationSpec;FILjava/lang/Object;)Landroidx/compose/animation/ExitTransition; +HSPLandroidx/compose/animation/EnterExitTransitionKt;->fadeOut(Landroidx/compose/animation/core/FiniteAnimationSpec;F)Landroidx/compose/animation/ExitTransition; +HSPLandroidx/compose/animation/EnterExitTransitionKt;->scaleIn-L8ZKh-E$default(Landroidx/compose/animation/core/FiniteAnimationSpec;FJILjava/lang/Object;)Landroidx/compose/animation/EnterTransition; +HSPLandroidx/compose/animation/EnterExitTransitionKt;->scaleIn-L8ZKh-E(Landroidx/compose/animation/core/FiniteAnimationSpec;FJ)Landroidx/compose/animation/EnterTransition; +HSPLandroidx/compose/animation/EnterExitTransitionKt;->scaleOut-L8ZKh-E$default(Landroidx/compose/animation/core/FiniteAnimationSpec;FJILjava/lang/Object;)Landroidx/compose/animation/ExitTransition; +HSPLandroidx/compose/animation/EnterExitTransitionKt;->scaleOut-L8ZKh-E(Landroidx/compose/animation/core/FiniteAnimationSpec;FJ)Landroidx/compose/animation/ExitTransition; +HSPLandroidx/compose/animation/EnterExitTransitionKt;->shrinkExpand(Landroidx/compose/ui/Modifier;Landroidx/compose/animation/core/Transition;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Ljava/lang/String;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/animation/EnterExitTransitionKt;->shrinkHorizontally$default(Landroidx/compose/animation/core/FiniteAnimationSpec;Landroidx/compose/ui/Alignment$Horizontal;ZLkotlin/jvm/functions/Function1;ILjava/lang/Object;)Landroidx/compose/animation/ExitTransition; +HSPLandroidx/compose/animation/EnterExitTransitionKt;->shrinkHorizontally(Landroidx/compose/animation/core/FiniteAnimationSpec;Landroidx/compose/ui/Alignment$Horizontal;ZLkotlin/jvm/functions/Function1;)Landroidx/compose/animation/ExitTransition; +HSPLandroidx/compose/animation/EnterExitTransitionKt;->shrinkOut$default(Landroidx/compose/animation/core/FiniteAnimationSpec;Landroidx/compose/ui/Alignment;ZLkotlin/jvm/functions/Function1;ILjava/lang/Object;)Landroidx/compose/animation/ExitTransition; +HSPLandroidx/compose/animation/EnterExitTransitionKt;->shrinkOut(Landroidx/compose/animation/core/FiniteAnimationSpec;Landroidx/compose/ui/Alignment;ZLkotlin/jvm/functions/Function1;)Landroidx/compose/animation/ExitTransition; +HSPLandroidx/compose/animation/EnterExitTransitionKt;->shrinkVertically$default(Landroidx/compose/animation/core/FiniteAnimationSpec;Landroidx/compose/ui/Alignment$Vertical;ZLkotlin/jvm/functions/Function1;ILjava/lang/Object;)Landroidx/compose/animation/ExitTransition; +HSPLandroidx/compose/animation/EnterExitTransitionKt;->shrinkVertically(Landroidx/compose/animation/core/FiniteAnimationSpec;Landroidx/compose/ui/Alignment$Vertical;ZLkotlin/jvm/functions/Function1;)Landroidx/compose/animation/ExitTransition; +HSPLandroidx/compose/animation/EnterExitTransitionKt;->slideIn(Landroidx/compose/animation/core/FiniteAnimationSpec;Lkotlin/jvm/functions/Function1;)Landroidx/compose/animation/EnterTransition; +HSPLandroidx/compose/animation/EnterExitTransitionKt;->slideInHorizontally(Landroidx/compose/animation/core/FiniteAnimationSpec;Lkotlin/jvm/functions/Function1;)Landroidx/compose/animation/EnterTransition; +HSPLandroidx/compose/animation/EnterExitTransitionKt;->slideInOut(Landroidx/compose/ui/Modifier;Landroidx/compose/animation/core/Transition;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Ljava/lang/String;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/animation/EnterExitTransitionKt;->slideOut(Landroidx/compose/animation/core/FiniteAnimationSpec;Lkotlin/jvm/functions/Function1;)Landroidx/compose/animation/ExitTransition; +HSPLandroidx/compose/animation/EnterExitTransitionKt;->slideOutHorizontally(Landroidx/compose/animation/core/FiniteAnimationSpec;Lkotlin/jvm/functions/Function1;)Landroidx/compose/animation/ExitTransition; +HSPLandroidx/compose/animation/EnterExitTransitionKt;->toAlignment(Landroidx/compose/ui/Alignment$Horizontal;)Landroidx/compose/ui/Alignment; +HSPLandroidx/compose/animation/EnterExitTransitionKt;->toAlignment(Landroidx/compose/ui/Alignment$Vertical;)Landroidx/compose/ui/Alignment; +Landroidx/compose/animation/EnterExitTransitionKt$TransformOriginVectorConverter$1; +HSPLandroidx/compose/animation/EnterExitTransitionKt$TransformOriginVectorConverter$1;->()V +HSPLandroidx/compose/animation/EnterExitTransitionKt$TransformOriginVectorConverter$1;->()V +HSPLandroidx/compose/animation/EnterExitTransitionKt$TransformOriginVectorConverter$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/animation/EnterExitTransitionKt$TransformOriginVectorConverter$1;->invoke-__ExYCQ(J)Landroidx/compose/animation/core/AnimationVector2D; +Landroidx/compose/animation/EnterExitTransitionKt$TransformOriginVectorConverter$2; +HSPLandroidx/compose/animation/EnterExitTransitionKt$TransformOriginVectorConverter$2;->()V +HSPLandroidx/compose/animation/EnterExitTransitionKt$TransformOriginVectorConverter$2;->()V +Landroidx/compose/animation/EnterExitTransitionKt$WhenMappings; +HSPLandroidx/compose/animation/EnterExitTransitionKt$WhenMappings;->()V +Landroidx/compose/animation/EnterExitTransitionKt$createModifier$$inlined$animateValue$1; +HSPLandroidx/compose/animation/EnterExitTransitionKt$createModifier$$inlined$animateValue$1;->()V +HSPLandroidx/compose/animation/EnterExitTransitionKt$createModifier$$inlined$animateValue$1;->()V +HSPLandroidx/compose/animation/EnterExitTransitionKt$createModifier$$inlined$animateValue$1;->invoke(Landroidx/compose/animation/core/Transition$Segment;Landroidx/compose/runtime/Composer;I)Landroidx/compose/animation/core/SpringSpec; +HSPLandroidx/compose/animation/EnterExitTransitionKt$createModifier$$inlined$animateValue$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/EnterExitTransitionKt$createModifier$1$1; +HSPLandroidx/compose/animation/EnterExitTransitionKt$createModifier$1$1;->(Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;)V +HSPLandroidx/compose/animation/EnterExitTransitionKt$createModifier$1$1;->invoke(Landroidx/compose/ui/graphics/GraphicsLayerScope;)V +HSPLandroidx/compose/animation/EnterExitTransitionKt$createModifier$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/EnterExitTransitionKt$createModifier$2$1; +HSPLandroidx/compose/animation/EnterExitTransitionKt$createModifier$2$1;->(Landroidx/compose/runtime/State;)V +HSPLandroidx/compose/animation/EnterExitTransitionKt$createModifier$2$1;->invoke(Landroidx/compose/ui/graphics/GraphicsLayerScope;)V +HSPLandroidx/compose/animation/EnterExitTransitionKt$createModifier$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/EnterExitTransitionKt$createModifier$alpha$2; +HSPLandroidx/compose/animation/EnterExitTransitionKt$createModifier$alpha$2;->(Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;)V +HSPLandroidx/compose/animation/EnterExitTransitionKt$createModifier$alpha$2;->invoke(Landroidx/compose/animation/core/Transition$Segment;Landroidx/compose/runtime/Composer;I)Landroidx/compose/animation/core/FiniteAnimationSpec; +HSPLandroidx/compose/animation/EnterExitTransitionKt$createModifier$alpha$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/EnterExitTransitionKt$createModifier$scale$2; +HSPLandroidx/compose/animation/EnterExitTransitionKt$createModifier$scale$2;->(Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;)V +HSPLandroidx/compose/animation/EnterExitTransitionKt$createModifier$scale$2;->invoke(Landroidx/compose/animation/core/Transition$Segment;Landroidx/compose/runtime/Composer;I)Landroidx/compose/animation/core/FiniteAnimationSpec; +HSPLandroidx/compose/animation/EnterExitTransitionKt$createModifier$scale$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/EnterExitTransitionKt$expandHorizontally$1; +HSPLandroidx/compose/animation/EnterExitTransitionKt$expandHorizontally$1;->()V +HSPLandroidx/compose/animation/EnterExitTransitionKt$expandHorizontally$1;->()V +Landroidx/compose/animation/EnterExitTransitionKt$expandHorizontally$2; +HSPLandroidx/compose/animation/EnterExitTransitionKt$expandHorizontally$2;->(Lkotlin/jvm/functions/Function1;)V +Landroidx/compose/animation/EnterExitTransitionKt$expandIn$1; +HSPLandroidx/compose/animation/EnterExitTransitionKt$expandIn$1;->()V +HSPLandroidx/compose/animation/EnterExitTransitionKt$expandIn$1;->()V +Landroidx/compose/animation/EnterExitTransitionKt$expandVertically$1; +HSPLandroidx/compose/animation/EnterExitTransitionKt$expandVertically$1;->()V +HSPLandroidx/compose/animation/EnterExitTransitionKt$expandVertically$1;->()V +Landroidx/compose/animation/EnterExitTransitionKt$expandVertically$2; +HSPLandroidx/compose/animation/EnterExitTransitionKt$expandVertically$2;->(Lkotlin/jvm/functions/Function1;)V +Landroidx/compose/animation/EnterExitTransitionKt$shrinkExpand$1; +HSPLandroidx/compose/animation/EnterExitTransitionKt$shrinkExpand$1;->(Landroidx/compose/animation/core/Transition;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Ljava/lang/String;)V +HSPLandroidx/compose/animation/EnterExitTransitionKt$shrinkExpand$1;->invoke$lambda$1(Landroidx/compose/runtime/MutableState;)Z +HSPLandroidx/compose/animation/EnterExitTransitionKt$shrinkExpand$1;->invoke$lambda$2(Landroidx/compose/runtime/MutableState;Z)V +HSPLandroidx/compose/animation/EnterExitTransitionKt$shrinkExpand$1;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/animation/EnterExitTransitionKt$shrinkExpand$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/EnterExitTransitionKt$shrinkHorizontally$1; +HSPLandroidx/compose/animation/EnterExitTransitionKt$shrinkHorizontally$1;->()V +HSPLandroidx/compose/animation/EnterExitTransitionKt$shrinkHorizontally$1;->()V +Landroidx/compose/animation/EnterExitTransitionKt$shrinkHorizontally$2; +HSPLandroidx/compose/animation/EnterExitTransitionKt$shrinkHorizontally$2;->(Lkotlin/jvm/functions/Function1;)V +Landroidx/compose/animation/EnterExitTransitionKt$shrinkOut$1; +HSPLandroidx/compose/animation/EnterExitTransitionKt$shrinkOut$1;->()V +HSPLandroidx/compose/animation/EnterExitTransitionKt$shrinkOut$1;->()V +Landroidx/compose/animation/EnterExitTransitionKt$shrinkVertically$1; +HSPLandroidx/compose/animation/EnterExitTransitionKt$shrinkVertically$1;->()V +HSPLandroidx/compose/animation/EnterExitTransitionKt$shrinkVertically$1;->()V +Landroidx/compose/animation/EnterExitTransitionKt$shrinkVertically$2; +HSPLandroidx/compose/animation/EnterExitTransitionKt$shrinkVertically$2;->(Lkotlin/jvm/functions/Function1;)V +Landroidx/compose/animation/EnterExitTransitionKt$slideInHorizontally$2; +HSPLandroidx/compose/animation/EnterExitTransitionKt$slideInHorizontally$2;->(Lkotlin/jvm/functions/Function1;)V +Landroidx/compose/animation/EnterExitTransitionKt$slideInOut$1; +HSPLandroidx/compose/animation/EnterExitTransitionKt$slideInOut$1;->(Landroidx/compose/animation/core/Transition;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Ljava/lang/String;)V +HSPLandroidx/compose/animation/EnterExitTransitionKt$slideInOut$1;->invoke$lambda$1(Landroidx/compose/runtime/MutableState;)Z +HSPLandroidx/compose/animation/EnterExitTransitionKt$slideInOut$1;->invoke$lambda$2(Landroidx/compose/runtime/MutableState;Z)V +HSPLandroidx/compose/animation/EnterExitTransitionKt$slideInOut$1;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/animation/EnterExitTransitionKt$slideInOut$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/EnterExitTransitionKt$slideOutHorizontally$2; +HSPLandroidx/compose/animation/EnterExitTransitionKt$slideOutHorizontally$2;->(Lkotlin/jvm/functions/Function1;)V +Landroidx/compose/animation/EnterTransition; +HSPLandroidx/compose/animation/EnterTransition;->()V +HSPLandroidx/compose/animation/EnterTransition;->()V +HSPLandroidx/compose/animation/EnterTransition;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/animation/EnterTransition;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/animation/EnterTransition;->plus(Landroidx/compose/animation/EnterTransition;)Landroidx/compose/animation/EnterTransition; +Landroidx/compose/animation/EnterTransition$Companion; +HSPLandroidx/compose/animation/EnterTransition$Companion;->()V +HSPLandroidx/compose/animation/EnterTransition$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/animation/EnterTransitionImpl; +HSPLandroidx/compose/animation/EnterTransitionImpl;->(Landroidx/compose/animation/TransitionData;)V +HSPLandroidx/compose/animation/EnterTransitionImpl;->getData$animation_release()Landroidx/compose/animation/TransitionData; +Landroidx/compose/animation/ExitTransition; +HSPLandroidx/compose/animation/ExitTransition;->()V +HSPLandroidx/compose/animation/ExitTransition;->()V +HSPLandroidx/compose/animation/ExitTransition;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/animation/ExitTransition;->access$getNone$cp()Landroidx/compose/animation/ExitTransition; +HSPLandroidx/compose/animation/ExitTransition;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/animation/ExitTransition;->plus(Landroidx/compose/animation/ExitTransition;)Landroidx/compose/animation/ExitTransition; +Landroidx/compose/animation/ExitTransition$Companion; +HSPLandroidx/compose/animation/ExitTransition$Companion;->()V +HSPLandroidx/compose/animation/ExitTransition$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/animation/ExitTransition$Companion;->getNone()Landroidx/compose/animation/ExitTransition; +Landroidx/compose/animation/ExitTransitionImpl; +HSPLandroidx/compose/animation/ExitTransitionImpl;->(Landroidx/compose/animation/TransitionData;)V +HSPLandroidx/compose/animation/ExitTransitionImpl;->getData$animation_release()Landroidx/compose/animation/TransitionData; +Landroidx/compose/animation/ExpandShrinkModifier; +HSPLandroidx/compose/animation/ExpandShrinkModifier;->(Landroidx/compose/animation/core/Transition$DeferredAnimation;Landroidx/compose/animation/core/Transition$DeferredAnimation;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;)V +PLandroidx/compose/animation/ExpandShrinkModifier;->getCurrentAlignment()Landroidx/compose/ui/Alignment; +HSPLandroidx/compose/animation/ExpandShrinkModifier;->getExpand()Landroidx/compose/runtime/State; +HSPLandroidx/compose/animation/ExpandShrinkModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; +PLandroidx/compose/animation/ExpandShrinkModifier;->setCurrentAlignment(Landroidx/compose/ui/Alignment;)V +HSPLandroidx/compose/animation/ExpandShrinkModifier;->sizeByState-Uzc_VyU(Landroidx/compose/animation/EnterExitState;J)J +HSPLandroidx/compose/animation/ExpandShrinkModifier;->targetOffsetByState-oFUgxo0(Landroidx/compose/animation/EnterExitState;J)J +Landroidx/compose/animation/ExpandShrinkModifier$WhenMappings; +HSPLandroidx/compose/animation/ExpandShrinkModifier$WhenMappings;->()V +Landroidx/compose/animation/ExpandShrinkModifier$measure$1; +HSPLandroidx/compose/animation/ExpandShrinkModifier$measure$1;->(Landroidx/compose/ui/layout/Placeable;JJ)V +HSPLandroidx/compose/animation/ExpandShrinkModifier$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/animation/ExpandShrinkModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/ExpandShrinkModifier$measure$currentSize$1; +HSPLandroidx/compose/animation/ExpandShrinkModifier$measure$currentSize$1;->(Landroidx/compose/animation/ExpandShrinkModifier;J)V +HSPLandroidx/compose/animation/ExpandShrinkModifier$measure$currentSize$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/animation/ExpandShrinkModifier$measure$currentSize$1;->invoke-YEO4UFw(Landroidx/compose/animation/EnterExitState;)J +Landroidx/compose/animation/ExpandShrinkModifier$measure$offsetDelta$1; +HSPLandroidx/compose/animation/ExpandShrinkModifier$measure$offsetDelta$1;->()V +HSPLandroidx/compose/animation/ExpandShrinkModifier$measure$offsetDelta$1;->()V +HSPLandroidx/compose/animation/ExpandShrinkModifier$measure$offsetDelta$1;->invoke(Landroidx/compose/animation/core/Transition$Segment;)Landroidx/compose/animation/core/FiniteAnimationSpec; +HSPLandroidx/compose/animation/ExpandShrinkModifier$measure$offsetDelta$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/ExpandShrinkModifier$measure$offsetDelta$2; +HSPLandroidx/compose/animation/ExpandShrinkModifier$measure$offsetDelta$2;->(Landroidx/compose/animation/ExpandShrinkModifier;J)V +HSPLandroidx/compose/animation/ExpandShrinkModifier$measure$offsetDelta$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/animation/ExpandShrinkModifier$measure$offsetDelta$2;->invoke-Bjo55l4(Landroidx/compose/animation/EnterExitState;)J +Landroidx/compose/animation/ExpandShrinkModifier$sizeTransitionSpec$1; +HSPLandroidx/compose/animation/ExpandShrinkModifier$sizeTransitionSpec$1;->(Landroidx/compose/animation/ExpandShrinkModifier;)V +HSPLandroidx/compose/animation/ExpandShrinkModifier$sizeTransitionSpec$1;->invoke(Landroidx/compose/animation/core/Transition$Segment;)Landroidx/compose/animation/core/FiniteAnimationSpec; +HSPLandroidx/compose/animation/ExpandShrinkModifier$sizeTransitionSpec$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/Fade; +HSPLandroidx/compose/animation/Fade;->(FLandroidx/compose/animation/core/FiniteAnimationSpec;)V +PLandroidx/compose/animation/Fade;->getAlpha()F +HSPLandroidx/compose/animation/Fade;->getAnimationSpec()Landroidx/compose/animation/core/FiniteAnimationSpec; +Landroidx/compose/animation/FlingCalculator; +HSPLandroidx/compose/animation/FlingCalculator;->(FLandroidx/compose/ui/unit/Density;)V +HSPLandroidx/compose/animation/FlingCalculator;->computeDeceleration(Landroidx/compose/ui/unit/Density;)F +Landroidx/compose/animation/FlingCalculatorKt; +HSPLandroidx/compose/animation/FlingCalculatorKt;->()V +HSPLandroidx/compose/animation/FlingCalculatorKt;->access$computeDeceleration(FF)F +HSPLandroidx/compose/animation/FlingCalculatorKt;->computeDeceleration(FF)F +Landroidx/compose/animation/LayoutModifierWithPassThroughIntrinsics; +HSPLandroidx/compose/animation/LayoutModifierWithPassThroughIntrinsics;->()V +Landroidx/compose/animation/Scale; +HSPLandroidx/compose/animation/Scale;->(FJLandroidx/compose/animation/core/FiniteAnimationSpec;)V +HSPLandroidx/compose/animation/Scale;->(FJLandroidx/compose/animation/core/FiniteAnimationSpec;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/animation/Scale;->getAnimationSpec()Landroidx/compose/animation/core/FiniteAnimationSpec; +PLandroidx/compose/animation/Scale;->getScale()F +PLandroidx/compose/animation/Scale;->getTransformOrigin-SzJe1aQ()J +Landroidx/compose/animation/SingleValueAnimationKt; +HSPLandroidx/compose/animation/SingleValueAnimationKt;->()V +HSPLandroidx/compose/animation/SingleValueAnimationKt;->animateColorAsState-euL9pac(JLandroidx/compose/animation/core/AnimationSpec;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/State; +Landroidx/compose/animation/SizeTransform; +Landroidx/compose/animation/SizeTransformImpl; +HSPLandroidx/compose/animation/SizeTransformImpl;->(ZLkotlin/jvm/functions/Function2;)V +Landroidx/compose/animation/Slide; +HSPLandroidx/compose/animation/Slide;->(Lkotlin/jvm/functions/Function1;Landroidx/compose/animation/core/FiniteAnimationSpec;)V +HSPLandroidx/compose/animation/Slide;->equals(Ljava/lang/Object;)Z +Landroidx/compose/animation/SplineBasedFloatDecayAnimationSpec; +HSPLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec;->()V +HSPLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec;->(Landroidx/compose/ui/unit/Density;)V +Landroidx/compose/animation/SplineBasedFloatDecayAnimationSpec_androidKt; +HSPLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec_androidKt;->()V +HSPLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec_androidKt;->getPlatformFlingScrollFriction()F +HSPLandroidx/compose/animation/SplineBasedFloatDecayAnimationSpec_androidKt;->rememberSplineBasedDecay(Landroidx/compose/runtime/Composer;I)Landroidx/compose/animation/core/DecayAnimationSpec; +Landroidx/compose/animation/TransitionData; +HSPLandroidx/compose/animation/TransitionData;->(Landroidx/compose/animation/Fade;Landroidx/compose/animation/Slide;Landroidx/compose/animation/ChangeSize;Landroidx/compose/animation/Scale;)V +HSPLandroidx/compose/animation/TransitionData;->(Landroidx/compose/animation/Fade;Landroidx/compose/animation/Slide;Landroidx/compose/animation/ChangeSize;Landroidx/compose/animation/Scale;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/animation/TransitionData;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/animation/TransitionData;->getChangeSize()Landroidx/compose/animation/ChangeSize; +HSPLandroidx/compose/animation/TransitionData;->getFade()Landroidx/compose/animation/Fade; +HSPLandroidx/compose/animation/TransitionData;->getScale()Landroidx/compose/animation/Scale; +HSPLandroidx/compose/animation/TransitionData;->getSlide()Landroidx/compose/animation/Slide; +Landroidx/compose/animation/core/Animatable; +HSPLandroidx/compose/animation/core/Animatable;->()V +HSPLandroidx/compose/animation/core/Animatable;->(Ljava/lang/Object;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;Ljava/lang/String;)V +HSPLandroidx/compose/animation/core/Animatable;->(Ljava/lang/Object;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/animation/core/Animatable;->access$clampToBounds(Landroidx/compose/animation/core/Animatable;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/animation/core/Animatable;->access$endAnimation(Landroidx/compose/animation/core/Animatable;)V +HSPLandroidx/compose/animation/core/Animatable;->access$setRunning(Landroidx/compose/animation/core/Animatable;Z)V +HSPLandroidx/compose/animation/core/Animatable;->access$setTargetValue(Landroidx/compose/animation/core/Animatable;Ljava/lang/Object;)V +HSPLandroidx/compose/animation/core/Animatable;->animateTo$default(Landroidx/compose/animation/core/Animatable;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationSpec;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/animation/core/Animatable;->animateTo(Ljava/lang/Object;Landroidx/compose/animation/core/AnimationSpec;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/animation/core/Animatable;->asState()Landroidx/compose/runtime/State; +HSPLandroidx/compose/animation/core/Animatable;->clampToBounds(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/animation/core/Animatable;->createVector(Ljava/lang/Object;F)Landroidx/compose/animation/core/AnimationVector; +HSPLandroidx/compose/animation/core/Animatable;->endAnimation()V +HSPLandroidx/compose/animation/core/Animatable;->getInternalState$animation_core_release()Landroidx/compose/animation/core/AnimationState; +HSPLandroidx/compose/animation/core/Animatable;->getTargetValue()Ljava/lang/Object; +HSPLandroidx/compose/animation/core/Animatable;->getTypeConverter()Landroidx/compose/animation/core/TwoWayConverter; +HSPLandroidx/compose/animation/core/Animatable;->getValue()Ljava/lang/Object; +HSPLandroidx/compose/animation/core/Animatable;->getVelocity()Ljava/lang/Object; +HSPLandroidx/compose/animation/core/Animatable;->getVelocityVector()Landroidx/compose/animation/core/AnimationVector; +HSPLandroidx/compose/animation/core/Animatable;->runAnimation(Landroidx/compose/animation/core/Animation;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/animation/core/Animatable;->setRunning(Z)V +HSPLandroidx/compose/animation/core/Animatable;->setTargetValue(Ljava/lang/Object;)V +HSPLandroidx/compose/animation/core/Animatable;->snapTo(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/compose/animation/core/Animatable$runAnimation$2; +HSPLandroidx/compose/animation/core/Animatable$runAnimation$2;->(Landroidx/compose/animation/core/Animatable;Ljava/lang/Object;Landroidx/compose/animation/core/Animation;JLkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/animation/core/Animatable$runAnimation$2;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/animation/core/Animatable$runAnimation$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/animation/core/Animatable$runAnimation$2;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/animation/core/Animatable$runAnimation$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/core/Animatable$runAnimation$2$1; +HSPLandroidx/compose/animation/core/Animatable$runAnimation$2$1;->(Landroidx/compose/animation/core/Animatable;Landroidx/compose/animation/core/AnimationState;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/internal/Ref$BooleanRef;)V +HSPLandroidx/compose/animation/core/Animatable$runAnimation$2$1;->invoke(Landroidx/compose/animation/core/AnimationScope;)V +HSPLandroidx/compose/animation/core/Animatable$runAnimation$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/core/Animatable$snapTo$2; +HSPLandroidx/compose/animation/core/Animatable$snapTo$2;->(Landroidx/compose/animation/core/Animatable;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/animation/core/Animatable$snapTo$2;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/animation/core/Animatable$snapTo$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/animation/core/Animatable$snapTo$2;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/animation/core/Animatable$snapTo$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/core/AnimatableKt; +HSPLandroidx/compose/animation/core/AnimatableKt;->Animatable$default(FFILjava/lang/Object;)Landroidx/compose/animation/core/Animatable; +HSPLandroidx/compose/animation/core/AnimatableKt;->Animatable(FF)Landroidx/compose/animation/core/Animatable; +Landroidx/compose/animation/core/AnimateAsStateKt; +HSPLandroidx/compose/animation/core/AnimateAsStateKt;->()V +HSPLandroidx/compose/animation/core/AnimateAsStateKt;->access$animateValueAsState$lambda$4(Landroidx/compose/runtime/State;)Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/animation/core/AnimateAsStateKt;->access$animateValueAsState$lambda$6(Landroidx/compose/runtime/State;)Landroidx/compose/animation/core/AnimationSpec; +HSPLandroidx/compose/animation/core/AnimateAsStateKt;->animateDpAsState-AjpBEmI(FLandroidx/compose/animation/core/AnimationSpec;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/State; +HSPLandroidx/compose/animation/core/AnimateAsStateKt;->animateFloatAsState(FLandroidx/compose/animation/core/AnimationSpec;FLjava/lang/String;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/State; +HSPLandroidx/compose/animation/core/AnimateAsStateKt;->animateValueAsState$lambda$4(Landroidx/compose/runtime/State;)Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/animation/core/AnimateAsStateKt;->animateValueAsState$lambda$6(Landroidx/compose/runtime/State;)Landroidx/compose/animation/core/AnimationSpec; +HSPLandroidx/compose/animation/core/AnimateAsStateKt;->animateValueAsState(Ljava/lang/Object;Landroidx/compose/animation/core/TwoWayConverter;Landroidx/compose/animation/core/AnimationSpec;Ljava/lang/Object;Ljava/lang/String;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/State; +Landroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$2; +HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$2;->(Lkotlinx/coroutines/channels/Channel;Ljava/lang/Object;)V +HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$2;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$2;->invoke()V +Landroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3; +HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3;->(Lkotlinx/coroutines/channels/Channel;Landroidx/compose/animation/core/Animatable;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3$1; +HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3$1;->(Ljava/lang/Object;Landroidx/compose/animation/core/Animatable;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/animation/core/AnimateAsStateKt$animateValueAsState$3$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/core/Animation; +HSPLandroidx/compose/animation/core/Animation;->isFinishedFromNanos(J)Z +Landroidx/compose/animation/core/AnimationEndReason; +HSPLandroidx/compose/animation/core/AnimationEndReason;->$values()[Landroidx/compose/animation/core/AnimationEndReason; +HSPLandroidx/compose/animation/core/AnimationEndReason;->()V +HSPLandroidx/compose/animation/core/AnimationEndReason;->(Ljava/lang/String;I)V +Landroidx/compose/animation/core/AnimationKt; +HSPLandroidx/compose/animation/core/AnimationKt;->TargetBasedAnimation(Landroidx/compose/animation/core/AnimationSpec;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Landroidx/compose/animation/core/TargetBasedAnimation; +Landroidx/compose/animation/core/AnimationResult; +HSPLandroidx/compose/animation/core/AnimationResult;->()V +HSPLandroidx/compose/animation/core/AnimationResult;->(Landroidx/compose/animation/core/AnimationState;Landroidx/compose/animation/core/AnimationEndReason;)V +Landroidx/compose/animation/core/AnimationScope; +HSPLandroidx/compose/animation/core/AnimationScope;->()V +HSPLandroidx/compose/animation/core/AnimationScope;->(Ljava/lang/Object;Landroidx/compose/animation/core/TwoWayConverter;Landroidx/compose/animation/core/AnimationVector;JLjava/lang/Object;JZLkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/animation/core/AnimationScope;->getFinishedTimeNanos()J +HSPLandroidx/compose/animation/core/AnimationScope;->getLastFrameTimeNanos()J +HSPLandroidx/compose/animation/core/AnimationScope;->getStartTimeNanos()J +HSPLandroidx/compose/animation/core/AnimationScope;->getValue()Ljava/lang/Object; +HSPLandroidx/compose/animation/core/AnimationScope;->getVelocityVector()Landroidx/compose/animation/core/AnimationVector; +HSPLandroidx/compose/animation/core/AnimationScope;->isRunning()Z +HSPLandroidx/compose/animation/core/AnimationScope;->setFinishedTimeNanos$animation_core_release(J)V +HSPLandroidx/compose/animation/core/AnimationScope;->setLastFrameTimeNanos$animation_core_release(J)V +HSPLandroidx/compose/animation/core/AnimationScope;->setRunning$animation_core_release(Z)V +HSPLandroidx/compose/animation/core/AnimationScope;->setValue$animation_core_release(Ljava/lang/Object;)V +HSPLandroidx/compose/animation/core/AnimationScope;->setVelocityVector$animation_core_release(Landroidx/compose/animation/core/AnimationVector;)V +Landroidx/compose/animation/core/AnimationSpec; +Landroidx/compose/animation/core/AnimationSpecKt; +HSPLandroidx/compose/animation/core/AnimationSpecKt;->access$convert(Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;)Landroidx/compose/animation/core/AnimationVector; +HSPLandroidx/compose/animation/core/AnimationSpecKt;->convert(Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;)Landroidx/compose/animation/core/AnimationVector; +HSPLandroidx/compose/animation/core/AnimationSpecKt;->infiniteRepeatable-9IiC70o$default(Landroidx/compose/animation/core/DurationBasedAnimationSpec;Landroidx/compose/animation/core/RepeatMode;JILjava/lang/Object;)Landroidx/compose/animation/core/InfiniteRepeatableSpec; +HSPLandroidx/compose/animation/core/AnimationSpecKt;->infiniteRepeatable-9IiC70o(Landroidx/compose/animation/core/DurationBasedAnimationSpec;Landroidx/compose/animation/core/RepeatMode;J)Landroidx/compose/animation/core/InfiniteRepeatableSpec; +HSPLandroidx/compose/animation/core/AnimationSpecKt;->keyframes(Lkotlin/jvm/functions/Function1;)Landroidx/compose/animation/core/KeyframesSpec; +HSPLandroidx/compose/animation/core/AnimationSpecKt;->snap$default(IILjava/lang/Object;)Landroidx/compose/animation/core/SnapSpec; +HSPLandroidx/compose/animation/core/AnimationSpecKt;->snap(I)Landroidx/compose/animation/core/SnapSpec; +HSPLandroidx/compose/animation/core/AnimationSpecKt;->spring$default(FFLjava/lang/Object;ILjava/lang/Object;)Landroidx/compose/animation/core/SpringSpec; +HSPLandroidx/compose/animation/core/AnimationSpecKt;->spring(FFLjava/lang/Object;)Landroidx/compose/animation/core/SpringSpec; +HSPLandroidx/compose/animation/core/AnimationSpecKt;->tween$default(IILandroidx/compose/animation/core/Easing;ILjava/lang/Object;)Landroidx/compose/animation/core/TweenSpec; +HSPLandroidx/compose/animation/core/AnimationSpecKt;->tween(IILandroidx/compose/animation/core/Easing;)Landroidx/compose/animation/core/TweenSpec; +Landroidx/compose/animation/core/AnimationState; +HSPLandroidx/compose/animation/core/AnimationState;->()V +HSPLandroidx/compose/animation/core/AnimationState;->(Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;JJZ)V +HSPLandroidx/compose/animation/core/AnimationState;->(Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;JJZILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/animation/core/AnimationState;->getLastFrameTimeNanos()J +HSPLandroidx/compose/animation/core/AnimationState;->getTypeConverter()Landroidx/compose/animation/core/TwoWayConverter; +HSPLandroidx/compose/animation/core/AnimationState;->getValue()Ljava/lang/Object; +HSPLandroidx/compose/animation/core/AnimationState;->getVelocityVector()Landroidx/compose/animation/core/AnimationVector; +HSPLandroidx/compose/animation/core/AnimationState;->isRunning()Z +HSPLandroidx/compose/animation/core/AnimationState;->setFinishedTimeNanos$animation_core_release(J)V +HSPLandroidx/compose/animation/core/AnimationState;->setLastFrameTimeNanos$animation_core_release(J)V +HSPLandroidx/compose/animation/core/AnimationState;->setRunning$animation_core_release(Z)V +HSPLandroidx/compose/animation/core/AnimationState;->setValue$animation_core_release(Ljava/lang/Object;)V +HSPLandroidx/compose/animation/core/AnimationState;->setVelocityVector$animation_core_release(Landroidx/compose/animation/core/AnimationVector;)V +Landroidx/compose/animation/core/AnimationStateKt; +HSPLandroidx/compose/animation/core/AnimationStateKt;->copy$default(Landroidx/compose/animation/core/AnimationState;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;JJZILjava/lang/Object;)Landroidx/compose/animation/core/AnimationState; +HSPLandroidx/compose/animation/core/AnimationStateKt;->copy(Landroidx/compose/animation/core/AnimationState;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;JJZ)Landroidx/compose/animation/core/AnimationState; +HSPLandroidx/compose/animation/core/AnimationStateKt;->createZeroVectorFrom(Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;)Landroidx/compose/animation/core/AnimationVector; +Landroidx/compose/animation/core/AnimationVector; +HSPLandroidx/compose/animation/core/AnimationVector;->()V +HSPLandroidx/compose/animation/core/AnimationVector;->()V +HSPLandroidx/compose/animation/core/AnimationVector;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/animation/core/AnimationVector1D; +HSPLandroidx/compose/animation/core/AnimationVector1D;->()V +HSPLandroidx/compose/animation/core/AnimationVector1D;->(F)V +HSPLandroidx/compose/animation/core/AnimationVector1D;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/animation/core/AnimationVector1D;->get$animation_core_release(I)F +HSPLandroidx/compose/animation/core/AnimationVector1D;->getSize$animation_core_release()I +HSPLandroidx/compose/animation/core/AnimationVector1D;->getValue()F +HSPLandroidx/compose/animation/core/AnimationVector1D;->newVector$animation_core_release()Landroidx/compose/animation/core/AnimationVector1D; +HSPLandroidx/compose/animation/core/AnimationVector1D;->newVector$animation_core_release()Landroidx/compose/animation/core/AnimationVector; +HSPLandroidx/compose/animation/core/AnimationVector1D;->reset$animation_core_release()V +HSPLandroidx/compose/animation/core/AnimationVector1D;->set$animation_core_release(IF)V +Landroidx/compose/animation/core/AnimationVector2D; +HSPLandroidx/compose/animation/core/AnimationVector2D;->()V +HSPLandroidx/compose/animation/core/AnimationVector2D;->(FF)V +HSPLandroidx/compose/animation/core/AnimationVector2D;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/animation/core/AnimationVector2D;->get$animation_core_release(I)F +HSPLandroidx/compose/animation/core/AnimationVector2D;->getSize$animation_core_release()I +HSPLandroidx/compose/animation/core/AnimationVector2D;->getV1()F +HSPLandroidx/compose/animation/core/AnimationVector2D;->getV2()F +HSPLandroidx/compose/animation/core/AnimationVector2D;->newVector$animation_core_release()Landroidx/compose/animation/core/AnimationVector2D; +HSPLandroidx/compose/animation/core/AnimationVector2D;->newVector$animation_core_release()Landroidx/compose/animation/core/AnimationVector; +HSPLandroidx/compose/animation/core/AnimationVector2D;->reset$animation_core_release()V +HSPLandroidx/compose/animation/core/AnimationVector2D;->set$animation_core_release(IF)V +Landroidx/compose/animation/core/AnimationVector4D; +HSPLandroidx/compose/animation/core/AnimationVector4D;->()V +HSPLandroidx/compose/animation/core/AnimationVector4D;->(FFFF)V +HSPLandroidx/compose/animation/core/AnimationVector4D;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/animation/core/AnimationVector4D;->get$animation_core_release(I)F +HSPLandroidx/compose/animation/core/AnimationVector4D;->getSize$animation_core_release()I +HSPLandroidx/compose/animation/core/AnimationVector4D;->getV1()F +HSPLandroidx/compose/animation/core/AnimationVector4D;->getV2()F +HSPLandroidx/compose/animation/core/AnimationVector4D;->getV3()F +HSPLandroidx/compose/animation/core/AnimationVector4D;->getV4()F +HSPLandroidx/compose/animation/core/AnimationVector4D;->newVector$animation_core_release()Landroidx/compose/animation/core/AnimationVector4D; +HSPLandroidx/compose/animation/core/AnimationVector4D;->newVector$animation_core_release()Landroidx/compose/animation/core/AnimationVector; +HSPLandroidx/compose/animation/core/AnimationVector4D;->reset$animation_core_release()V +HSPLandroidx/compose/animation/core/AnimationVector4D;->set$animation_core_release(IF)V +Landroidx/compose/animation/core/AnimationVectorsKt; +HSPLandroidx/compose/animation/core/AnimationVectorsKt;->copy(Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; +HSPLandroidx/compose/animation/core/AnimationVectorsKt;->copyFrom(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)V +HSPLandroidx/compose/animation/core/AnimationVectorsKt;->newInstance(Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; +Landroidx/compose/animation/core/Animations; +Landroidx/compose/animation/core/ComplexDouble; +HSPLandroidx/compose/animation/core/ComplexDouble;->(DD)V +HSPLandroidx/compose/animation/core/ComplexDouble;->access$get_imaginary$p(Landroidx/compose/animation/core/ComplexDouble;)D +HSPLandroidx/compose/animation/core/ComplexDouble;->access$get_real$p(Landroidx/compose/animation/core/ComplexDouble;)D +HSPLandroidx/compose/animation/core/ComplexDouble;->access$set_imaginary$p(Landroidx/compose/animation/core/ComplexDouble;D)V +HSPLandroidx/compose/animation/core/ComplexDouble;->access$set_real$p(Landroidx/compose/animation/core/ComplexDouble;D)V +HSPLandroidx/compose/animation/core/ComplexDouble;->getReal()D +Landroidx/compose/animation/core/ComplexDoubleKt; +HSPLandroidx/compose/animation/core/ComplexDoubleKt;->complexSqrt(D)Landroidx/compose/animation/core/ComplexDouble; +Landroidx/compose/animation/core/CubicBezierEasing; +HSPLandroidx/compose/animation/core/CubicBezierEasing;->()V +HSPLandroidx/compose/animation/core/CubicBezierEasing;->(FFFF)V +HSPLandroidx/compose/animation/core/CubicBezierEasing;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/animation/core/CubicBezierEasing;->evaluateCubic(FFF)F +HSPLandroidx/compose/animation/core/CubicBezierEasing;->transform(F)F +Landroidx/compose/animation/core/DecayAnimationSpec; +Landroidx/compose/animation/core/DecayAnimationSpecImpl; +HSPLandroidx/compose/animation/core/DecayAnimationSpecImpl;->(Landroidx/compose/animation/core/FloatDecayAnimationSpec;)V +Landroidx/compose/animation/core/DecayAnimationSpecKt; +HSPLandroidx/compose/animation/core/DecayAnimationSpecKt;->generateDecayAnimationSpec(Landroidx/compose/animation/core/FloatDecayAnimationSpec;)Landroidx/compose/animation/core/DecayAnimationSpec; +Landroidx/compose/animation/core/DurationBasedAnimationSpec; +Landroidx/compose/animation/core/Easing; +Landroidx/compose/animation/core/EasingKt; +HSPLandroidx/compose/animation/core/EasingKt;->()V +HSPLandroidx/compose/animation/core/EasingKt;->getFastOutLinearInEasing()Landroidx/compose/animation/core/Easing; +HSPLandroidx/compose/animation/core/EasingKt;->getFastOutSlowInEasing()Landroidx/compose/animation/core/Easing; +HSPLandroidx/compose/animation/core/EasingKt;->getLinearEasing()Landroidx/compose/animation/core/Easing; +Landroidx/compose/animation/core/EasingKt$LinearEasing$1; +HSPLandroidx/compose/animation/core/EasingKt$LinearEasing$1;->()V +HSPLandroidx/compose/animation/core/EasingKt$LinearEasing$1;->()V +HSPLandroidx/compose/animation/core/EasingKt$LinearEasing$1;->transform(F)F +Landroidx/compose/animation/core/FiniteAnimationSpec; +Landroidx/compose/animation/core/FloatAnimationSpec; +Landroidx/compose/animation/core/FloatDecayAnimationSpec; +Landroidx/compose/animation/core/FloatSpringSpec; +HSPLandroidx/compose/animation/core/FloatSpringSpec;->()V +HSPLandroidx/compose/animation/core/FloatSpringSpec;->(FFF)V +HSPLandroidx/compose/animation/core/FloatSpringSpec;->(FFFILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/animation/core/FloatSpringSpec;->getDurationNanos(FFF)J +HSPLandroidx/compose/animation/core/FloatSpringSpec;->getEndVelocity(FFF)F +HSPLandroidx/compose/animation/core/FloatSpringSpec;->getValueFromNanos(JFFF)F +HSPLandroidx/compose/animation/core/FloatSpringSpec;->getVelocityFromNanos(JFFF)F +Landroidx/compose/animation/core/FloatTweenSpec; +HSPLandroidx/compose/animation/core/FloatTweenSpec;->()V +HSPLandroidx/compose/animation/core/FloatTweenSpec;->(IILandroidx/compose/animation/core/Easing;)V +HSPLandroidx/compose/animation/core/FloatTweenSpec;->clampPlayTime(J)J +HSPLandroidx/compose/animation/core/FloatTweenSpec;->getValueFromNanos(JFFF)F +HSPLandroidx/compose/animation/core/FloatTweenSpec;->getVelocityFromNanos(JFFF)F +Landroidx/compose/animation/core/InfiniteAnimationPolicyKt; +HSPLandroidx/compose/animation/core/InfiniteAnimationPolicyKt;->withInfiniteAnimationFrameNanos(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/compose/animation/core/InfiniteRepeatableSpec; +HSPLandroidx/compose/animation/core/InfiniteRepeatableSpec;->()V +HSPLandroidx/compose/animation/core/InfiniteRepeatableSpec;->(Landroidx/compose/animation/core/DurationBasedAnimationSpec;Landroidx/compose/animation/core/RepeatMode;J)V +HSPLandroidx/compose/animation/core/InfiniteRepeatableSpec;->(Landroidx/compose/animation/core/DurationBasedAnimationSpec;Landroidx/compose/animation/core/RepeatMode;JLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/animation/core/InfiniteRepeatableSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedAnimationSpec; +Landroidx/compose/animation/core/InfiniteTransition; +HSPLandroidx/compose/animation/core/InfiniteTransition;->()V +HSPLandroidx/compose/animation/core/InfiniteTransition;->(Ljava/lang/String;)V +HSPLandroidx/compose/animation/core/InfiniteTransition;->access$getStartTimeNanos$p(Landroidx/compose/animation/core/InfiniteTransition;)J +HSPLandroidx/compose/animation/core/InfiniteTransition;->access$get_animations$p(Landroidx/compose/animation/core/InfiniteTransition;)Landroidx/compose/runtime/collection/MutableVector; +HSPLandroidx/compose/animation/core/InfiniteTransition;->access$onFrame(Landroidx/compose/animation/core/InfiniteTransition;J)V +HSPLandroidx/compose/animation/core/InfiniteTransition;->access$setRefreshChildNeeded(Landroidx/compose/animation/core/InfiniteTransition;Z)V +HSPLandroidx/compose/animation/core/InfiniteTransition;->access$setStartTimeNanos$p(Landroidx/compose/animation/core/InfiniteTransition;J)V +HSPLandroidx/compose/animation/core/InfiniteTransition;->addAnimation$animation_core_release(Landroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;)V +HSPLandroidx/compose/animation/core/InfiniteTransition;->isRunning()Z +HSPLandroidx/compose/animation/core/InfiniteTransition;->onFrame(J)V +HSPLandroidx/compose/animation/core/InfiniteTransition;->removeAnimation$animation_core_release(Landroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;)V +HSPLandroidx/compose/animation/core/InfiniteTransition;->run$animation_core_release(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/animation/core/InfiniteTransition;->setRefreshChildNeeded(Z)V +HSPLandroidx/compose/animation/core/InfiniteTransition;->setRunning(Z)V +Landroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState; +HSPLandroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;->(Landroidx/compose/animation/core/InfiniteTransition;Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/animation/core/TwoWayConverter;Landroidx/compose/animation/core/AnimationSpec;Ljava/lang/String;)V +HSPLandroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;->getInitialValue$animation_core_release()Ljava/lang/Object; +HSPLandroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;->getTargetValue$animation_core_release()Ljava/lang/Object; +HSPLandroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;->getValue()Ljava/lang/Object; +HSPLandroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;->isFinished$animation_core_release()Z +HSPLandroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;->onPlayTimeChanged$animation_core_release(J)V +HSPLandroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;->reset$animation_core_release()V +HSPLandroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;->setValue$animation_core_release(Ljava/lang/Object;)V +Landroidx/compose/animation/core/InfiniteTransition$run$1; +HSPLandroidx/compose/animation/core/InfiniteTransition$run$1;->(Landroidx/compose/runtime/MutableState;Landroidx/compose/animation/core/InfiniteTransition;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/animation/core/InfiniteTransition$run$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/animation/core/InfiniteTransition$run$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/core/InfiniteTransition$run$1$1; +HSPLandroidx/compose/animation/core/InfiniteTransition$run$1$1;->(Landroidx/compose/runtime/MutableState;Landroidx/compose/animation/core/InfiniteTransition;Lkotlin/jvm/internal/Ref$FloatRef;Lkotlinx/coroutines/CoroutineScope;)V +HSPLandroidx/compose/animation/core/InfiniteTransition$run$1$1;->invoke(J)V +HSPLandroidx/compose/animation/core/InfiniteTransition$run$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/core/InfiniteTransition$run$2; +HSPLandroidx/compose/animation/core/InfiniteTransition$run$2;->(Landroidx/compose/animation/core/InfiniteTransition;I)V +Landroidx/compose/animation/core/InfiniteTransitionKt; +HSPLandroidx/compose/animation/core/InfiniteTransitionKt;->animateFloat(Landroidx/compose/animation/core/InfiniteTransition;FFLandroidx/compose/animation/core/InfiniteRepeatableSpec;Ljava/lang/String;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/State; +HSPLandroidx/compose/animation/core/InfiniteTransitionKt;->animateValue(Landroidx/compose/animation/core/InfiniteTransition;Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/animation/core/TwoWayConverter;Landroidx/compose/animation/core/InfiniteRepeatableSpec;Ljava/lang/String;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/State; +HSPLandroidx/compose/animation/core/InfiniteTransitionKt;->rememberInfiniteTransition(Ljava/lang/String;Landroidx/compose/runtime/Composer;II)Landroidx/compose/animation/core/InfiniteTransition; +Landroidx/compose/animation/core/InfiniteTransitionKt$animateValue$1; +HSPLandroidx/compose/animation/core/InfiniteTransitionKt$animateValue$1;->(Ljava/lang/Object;Landroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;Ljava/lang/Object;Landroidx/compose/animation/core/InfiniteRepeatableSpec;)V +HSPLandroidx/compose/animation/core/InfiniteTransitionKt$animateValue$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/animation/core/InfiniteTransitionKt$animateValue$1;->invoke()V +Landroidx/compose/animation/core/InfiniteTransitionKt$animateValue$2; +HSPLandroidx/compose/animation/core/InfiniteTransitionKt$animateValue$2;->(Landroidx/compose/animation/core/InfiniteTransition;Landroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;)V +HSPLandroidx/compose/animation/core/InfiniteTransitionKt$animateValue$2;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult; +HSPLandroidx/compose/animation/core/InfiniteTransitionKt$animateValue$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/core/InfiniteTransitionKt$animateValue$2$invoke$$inlined$onDispose$1; +HSPLandroidx/compose/animation/core/InfiniteTransitionKt$animateValue$2$invoke$$inlined$onDispose$1;->(Landroidx/compose/animation/core/InfiniteTransition;Landroidx/compose/animation/core/InfiniteTransition$TransitionAnimationState;)V +HSPLandroidx/compose/animation/core/InfiniteTransitionKt$animateValue$2$invoke$$inlined$onDispose$1;->dispose()V +Landroidx/compose/animation/core/KeyframesSpec; +HSPLandroidx/compose/animation/core/KeyframesSpec;->()V +HSPLandroidx/compose/animation/core/KeyframesSpec;->(Landroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig;)V +HSPLandroidx/compose/animation/core/KeyframesSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedDurationBasedAnimationSpec; +HSPLandroidx/compose/animation/core/KeyframesSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedKeyframesSpec; +Landroidx/compose/animation/core/KeyframesSpec$KeyframeEntity; +HSPLandroidx/compose/animation/core/KeyframesSpec$KeyframeEntity;->()V +HSPLandroidx/compose/animation/core/KeyframesSpec$KeyframeEntity;->(Ljava/lang/Object;Landroidx/compose/animation/core/Easing;)V +HSPLandroidx/compose/animation/core/KeyframesSpec$KeyframeEntity;->(Ljava/lang/Object;Landroidx/compose/animation/core/Easing;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/animation/core/KeyframesSpec$KeyframeEntity;->setEasing$animation_core_release(Landroidx/compose/animation/core/Easing;)V +HSPLandroidx/compose/animation/core/KeyframesSpec$KeyframeEntity;->toPair$animation_core_release(Lkotlin/jvm/functions/Function1;)Lkotlin/Pair; +Landroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig; +HSPLandroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig;->()V +HSPLandroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig;->()V +HSPLandroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig;->at(Ljava/lang/Object;I)Landroidx/compose/animation/core/KeyframesSpec$KeyframeEntity; +HSPLandroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig;->getDelayMillis()I +HSPLandroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig;->getDurationMillis()I +HSPLandroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig;->getKeyframes$animation_core_release()Ljava/util/Map; +HSPLandroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig;->setDurationMillis(I)V +HSPLandroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig;->with(Landroidx/compose/animation/core/KeyframesSpec$KeyframeEntity;Landroidx/compose/animation/core/Easing;)V +Landroidx/compose/animation/core/Motion; +HSPLandroidx/compose/animation/core/Motion;->constructor-impl(J)J +HSPLandroidx/compose/animation/core/Motion;->getValue-impl(J)F +HSPLandroidx/compose/animation/core/Motion;->getVelocity-impl(J)F +Landroidx/compose/animation/core/MutableTransitionState; +HSPLandroidx/compose/animation/core/MutableTransitionState;->()V +HSPLandroidx/compose/animation/core/MutableTransitionState;->(Ljava/lang/Object;)V +HSPLandroidx/compose/animation/core/MutableTransitionState;->getCurrentState()Ljava/lang/Object; +HSPLandroidx/compose/animation/core/MutableTransitionState;->getTargetState()Ljava/lang/Object; +HSPLandroidx/compose/animation/core/MutableTransitionState;->setCurrentState$animation_core_release(Ljava/lang/Object;)V +HSPLandroidx/compose/animation/core/MutableTransitionState;->setRunning$animation_core_release(Z)V +HSPLandroidx/compose/animation/core/MutableTransitionState;->setTargetState(Ljava/lang/Object;)V +Landroidx/compose/animation/core/MutatePriority; +HSPLandroidx/compose/animation/core/MutatePriority;->$values()[Landroidx/compose/animation/core/MutatePriority; +HSPLandroidx/compose/animation/core/MutatePriority;->()V +HSPLandroidx/compose/animation/core/MutatePriority;->(Ljava/lang/String;I)V +Landroidx/compose/animation/core/MutationInterruptedException; +PLandroidx/compose/animation/core/MutationInterruptedException;->()V +PLandroidx/compose/animation/core/MutationInterruptedException;->fillInStackTrace()Ljava/lang/Throwable; +Landroidx/compose/animation/core/MutatorMutex; +HSPLandroidx/compose/animation/core/MutatorMutex;->()V +HSPLandroidx/compose/animation/core/MutatorMutex;->access$getCurrentMutator$p(Landroidx/compose/animation/core/MutatorMutex;)Ljava/util/concurrent/atomic/AtomicReference; +HSPLandroidx/compose/animation/core/MutatorMutex;->access$getMutex$p(Landroidx/compose/animation/core/MutatorMutex;)Lkotlinx/coroutines/sync/Mutex; +HSPLandroidx/compose/animation/core/MutatorMutex;->access$tryMutateOrCancel(Landroidx/compose/animation/core/MutatorMutex;Landroidx/compose/animation/core/MutatorMutex$Mutator;)V +HSPLandroidx/compose/animation/core/MutatorMutex;->mutate$default(Landroidx/compose/animation/core/MutatorMutex;Landroidx/compose/animation/core/MutatePriority;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/animation/core/MutatorMutex;->mutate(Landroidx/compose/animation/core/MutatePriority;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/animation/core/MutatorMutex;->tryMutateOrCancel(Landroidx/compose/animation/core/MutatorMutex$Mutator;)V +Landroidx/compose/animation/core/MutatorMutex$Mutator; +HSPLandroidx/compose/animation/core/MutatorMutex$Mutator;->(Landroidx/compose/animation/core/MutatePriority;Lkotlinx/coroutines/Job;)V +PLandroidx/compose/animation/core/MutatorMutex$Mutator;->canInterrupt(Landroidx/compose/animation/core/MutatorMutex$Mutator;)Z +PLandroidx/compose/animation/core/MutatorMutex$Mutator;->cancel()V +Landroidx/compose/animation/core/MutatorMutex$mutate$2; +HSPLandroidx/compose/animation/core/MutatorMutex$mutate$2;->(Landroidx/compose/animation/core/MutatePriority;Landroidx/compose/animation/core/MutatorMutex;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/animation/core/MutatorMutex$mutate$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/animation/core/MutatorMutex$mutate$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/animation/core/MutatorMutex$mutate$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/animation/core/MutatorMutex$mutate$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/core/RepeatMode; +HSPLandroidx/compose/animation/core/RepeatMode;->$values()[Landroidx/compose/animation/core/RepeatMode; +HSPLandroidx/compose/animation/core/RepeatMode;->()V +HSPLandroidx/compose/animation/core/RepeatMode;->(Ljava/lang/String;I)V +Landroidx/compose/animation/core/SnapSpec; +HSPLandroidx/compose/animation/core/SnapSpec;->()V +HSPLandroidx/compose/animation/core/SnapSpec;->(I)V +Landroidx/compose/animation/core/SpringEstimationKt; +HSPLandroidx/compose/animation/core/SpringEstimationKt;->estimateAnimationDurationMillis(DDDDD)J +HSPLandroidx/compose/animation/core/SpringEstimationKt;->estimateAnimationDurationMillis(FFFFF)J +HSPLandroidx/compose/animation/core/SpringEstimationKt;->estimateCriticallyDamped(Landroidx/compose/animation/core/ComplexDouble;DDD)D +HSPLandroidx/compose/animation/core/SpringEstimationKt;->estimateDurationInternal(Landroidx/compose/animation/core/ComplexDouble;Landroidx/compose/animation/core/ComplexDouble;DDDD)J +Landroidx/compose/animation/core/SpringSimulation; +HSPLandroidx/compose/animation/core/SpringSimulation;->(F)V +HSPLandroidx/compose/animation/core/SpringSimulation;->getDampingRatio()F +HSPLandroidx/compose/animation/core/SpringSimulation;->getStiffness()F +HSPLandroidx/compose/animation/core/SpringSimulation;->init()V +HSPLandroidx/compose/animation/core/SpringSimulation;->setDampingRatio(F)V +HSPLandroidx/compose/animation/core/SpringSimulation;->setFinalPosition(F)V +HSPLandroidx/compose/animation/core/SpringSimulation;->setStiffness(F)V +HSPLandroidx/compose/animation/core/SpringSimulation;->updateValues-IJZedt4$animation_core_release(FFJ)J +Landroidx/compose/animation/core/SpringSimulationKt; +HSPLandroidx/compose/animation/core/SpringSimulationKt;->()V +HSPLandroidx/compose/animation/core/SpringSimulationKt;->Motion(FF)J +HSPLandroidx/compose/animation/core/SpringSimulationKt;->getUNSET()F +Landroidx/compose/animation/core/SpringSpec; +HSPLandroidx/compose/animation/core/SpringSpec;->()V +HSPLandroidx/compose/animation/core/SpringSpec;->(FFLjava/lang/Object;)V +HSPLandroidx/compose/animation/core/SpringSpec;->(FFLjava/lang/Object;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/animation/core/SpringSpec;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/animation/core/SpringSpec;->getVisibilityThreshold()Ljava/lang/Object; +HSPLandroidx/compose/animation/core/SpringSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedAnimationSpec; +HSPLandroidx/compose/animation/core/SpringSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedSpringSpec; +Landroidx/compose/animation/core/StartOffset; +HSPLandroidx/compose/animation/core/StartOffset;->constructor-impl$default(IIILkotlin/jvm/internal/DefaultConstructorMarker;)J +HSPLandroidx/compose/animation/core/StartOffset;->constructor-impl(II)J +HSPLandroidx/compose/animation/core/StartOffset;->constructor-impl(J)J +Landroidx/compose/animation/core/StartOffsetType; +HSPLandroidx/compose/animation/core/StartOffsetType;->()V +HSPLandroidx/compose/animation/core/StartOffsetType;->access$getDelay$cp()I +HSPLandroidx/compose/animation/core/StartOffsetType;->constructor-impl(I)I +Landroidx/compose/animation/core/StartOffsetType$Companion; +HSPLandroidx/compose/animation/core/StartOffsetType$Companion;->()V +HSPLandroidx/compose/animation/core/StartOffsetType$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/animation/core/StartOffsetType$Companion;->getDelay-Eo1U57Q()I +Landroidx/compose/animation/core/SuspendAnimationKt; +HSPLandroidx/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 +HSPLandroidx/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; +HSPLandroidx/compose/animation/core/SuspendAnimationKt;->callWithFrameNanos(Landroidx/compose/animation/core/Animation;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/animation/core/SuspendAnimationKt;->doAnimationFrame(Landroidx/compose/animation/core/AnimationScope;JJLandroidx/compose/animation/core/Animation;Landroidx/compose/animation/core/AnimationState;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/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 +HSPLandroidx/compose/animation/core/SuspendAnimationKt;->getDurationScale(Lkotlin/coroutines/CoroutineContext;)F +HSPLandroidx/compose/animation/core/SuspendAnimationKt;->updateState(Landroidx/compose/animation/core/AnimationScope;Landroidx/compose/animation/core/AnimationState;)V +Landroidx/compose/animation/core/SuspendAnimationKt$animate$4; +HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$4;->(Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$4;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/core/SuspendAnimationKt$animate$6; +HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$6;->(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 +HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$6;->invoke(J)V +HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$6;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/core/SuspendAnimationKt$animate$6$1; +HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$6$1;->(Landroidx/compose/animation/core/AnimationState;)V +Landroidx/compose/animation/core/SuspendAnimationKt$animate$7; +PLandroidx/compose/animation/core/SuspendAnimationKt$animate$7;->(Landroidx/compose/animation/core/AnimationState;)V +Landroidx/compose/animation/core/SuspendAnimationKt$animate$9; +HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$9;->(Lkotlin/jvm/internal/Ref$ObjectRef;FLandroidx/compose/animation/core/Animation;Landroidx/compose/animation/core/AnimationState;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$9;->invoke(J)V +HSPLandroidx/compose/animation/core/SuspendAnimationKt$animate$9;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/core/SuspendAnimationKt$callWithFrameNanos$2; +HSPLandroidx/compose/animation/core/SuspendAnimationKt$callWithFrameNanos$2;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/animation/core/SuspendAnimationKt$callWithFrameNanos$2;->invoke(J)Ljava/lang/Object; +HSPLandroidx/compose/animation/core/SuspendAnimationKt$callWithFrameNanos$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/core/TargetBasedAnimation; +HSPLandroidx/compose/animation/core/TargetBasedAnimation;->()V +HSPLandroidx/compose/animation/core/TargetBasedAnimation;->(Landroidx/compose/animation/core/AnimationSpec;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;)V +HSPLandroidx/compose/animation/core/TargetBasedAnimation;->(Landroidx/compose/animation/core/AnimationSpec;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/animation/core/TargetBasedAnimation;->(Landroidx/compose/animation/core/VectorizedAnimationSpec;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;)V +HSPLandroidx/compose/animation/core/TargetBasedAnimation;->getDurationNanos()J +HSPLandroidx/compose/animation/core/TargetBasedAnimation;->getTargetValue()Ljava/lang/Object; +HSPLandroidx/compose/animation/core/TargetBasedAnimation;->getTypeConverter()Landroidx/compose/animation/core/TwoWayConverter; +HSPLandroidx/compose/animation/core/TargetBasedAnimation;->getValueFromNanos(J)Ljava/lang/Object; +HSPLandroidx/compose/animation/core/TargetBasedAnimation;->getVelocityVectorFromNanos(J)Landroidx/compose/animation/core/AnimationVector; +HSPLandroidx/compose/animation/core/TargetBasedAnimation;->isInfinite()Z +Landroidx/compose/animation/core/Transition; +HSPLandroidx/compose/animation/core/Transition;->()V +HSPLandroidx/compose/animation/core/Transition;->(Landroidx/compose/animation/core/MutableTransitionState;Ljava/lang/String;)V +HSPLandroidx/compose/animation/core/Transition;->(Ljava/lang/Object;Ljava/lang/String;)V +HSPLandroidx/compose/animation/core/Transition;->access$onChildAnimationUpdated(Landroidx/compose/animation/core/Transition;)V +HSPLandroidx/compose/animation/core/Transition;->addAnimation$animation_core_release(Landroidx/compose/animation/core/Transition$TransitionAnimationState;)Z +HSPLandroidx/compose/animation/core/Transition;->addTransition$animation_core_release(Landroidx/compose/animation/core/Transition;)Z +HSPLandroidx/compose/animation/core/Transition;->animateTo$animation_core_release(Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/animation/core/Transition;->getCurrentState()Ljava/lang/Object; +HSPLandroidx/compose/animation/core/Transition;->getLabel()Ljava/lang/String; +HSPLandroidx/compose/animation/core/Transition;->getPlayTimeNanos()J +HSPLandroidx/compose/animation/core/Transition;->getSegment()Landroidx/compose/animation/core/Transition$Segment; +HSPLandroidx/compose/animation/core/Transition;->getStartTimeNanos()J +HSPLandroidx/compose/animation/core/Transition;->getTargetState()Ljava/lang/Object; +HSPLandroidx/compose/animation/core/Transition;->getUpdateChildrenNeeded$animation_core_release()Z +HSPLandroidx/compose/animation/core/Transition;->isRunning()Z +HSPLandroidx/compose/animation/core/Transition;->isSeeking()Z +HSPLandroidx/compose/animation/core/Transition;->onChildAnimationUpdated()V +HSPLandroidx/compose/animation/core/Transition;->onFrame$animation_core_release(JF)V +HSPLandroidx/compose/animation/core/Transition;->onTransitionEnd$animation_core_release()V +HSPLandroidx/compose/animation/core/Transition;->onTransitionStart$animation_core_release(J)V +HSPLandroidx/compose/animation/core/Transition;->removeAnimation$animation_core_release(Landroidx/compose/animation/core/Transition$DeferredAnimation;)V +HSPLandroidx/compose/animation/core/Transition;->removeAnimation$animation_core_release(Landroidx/compose/animation/core/Transition$TransitionAnimationState;)V +HSPLandroidx/compose/animation/core/Transition;->removeTransition$animation_core_release(Landroidx/compose/animation/core/Transition;)Z +HSPLandroidx/compose/animation/core/Transition;->setCurrentState$animation_core_release(Ljava/lang/Object;)V +HSPLandroidx/compose/animation/core/Transition;->setPlayTimeNanos(J)V +HSPLandroidx/compose/animation/core/Transition;->setSeeking$animation_core_release(Z)V +HSPLandroidx/compose/animation/core/Transition;->setSegment(Landroidx/compose/animation/core/Transition$Segment;)V +HSPLandroidx/compose/animation/core/Transition;->setStartTimeNanos(J)V +HSPLandroidx/compose/animation/core/Transition;->setTargetState$animation_core_release(Ljava/lang/Object;)V +HSPLandroidx/compose/animation/core/Transition;->setUpdateChildrenNeeded$animation_core_release(Z)V +HSPLandroidx/compose/animation/core/Transition;->updateTarget$animation_core_release(Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)V +Landroidx/compose/animation/core/Transition$DeferredAnimation; +HSPLandroidx/compose/animation/core/Transition$DeferredAnimation;->(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/String;)V +HSPLandroidx/compose/animation/core/Transition$DeferredAnimation;->animate(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/State; +HSPLandroidx/compose/animation/core/Transition$DeferredAnimation;->getData$animation_core_release()Landroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData; +HSPLandroidx/compose/animation/core/Transition$DeferredAnimation;->setData$animation_core_release(Landroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData;)V +Landroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData; +HSPLandroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData;->(Landroidx/compose/animation/core/Transition$DeferredAnimation;Landroidx/compose/animation/core/Transition$TransitionAnimationState;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData;->getAnimation()Landroidx/compose/animation/core/Transition$TransitionAnimationState; +HSPLandroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData;->getValue()Ljava/lang/Object; +HSPLandroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData;->setTargetValueByState(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData;->setTransitionSpec(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/animation/core/Transition$DeferredAnimation$DeferredAnimationData;->updateAnimationStates(Landroidx/compose/animation/core/Transition$Segment;)V +Landroidx/compose/animation/core/Transition$Segment; +HSPLandroidx/compose/animation/core/Transition$Segment;->isTransitioningTo(Ljava/lang/Object;Ljava/lang/Object;)Z +Landroidx/compose/animation/core/Transition$SegmentImpl; +HSPLandroidx/compose/animation/core/Transition$SegmentImpl;->(Ljava/lang/Object;Ljava/lang/Object;)V +HSPLandroidx/compose/animation/core/Transition$SegmentImpl;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/animation/core/Transition$SegmentImpl;->getInitialState()Ljava/lang/Object; +HSPLandroidx/compose/animation/core/Transition$SegmentImpl;->getTargetState()Ljava/lang/Object; +Landroidx/compose/animation/core/Transition$TransitionAnimationState; +HSPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->(Landroidx/compose/animation/core/Transition;Ljava/lang/Object;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/String;)V +HSPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->getAnimation()Landroidx/compose/animation/core/TargetBasedAnimation; +HSPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->getAnimationSpec()Landroidx/compose/animation/core/FiniteAnimationSpec; +HSPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->getNeedsReset()Z +HSPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->getOffsetTimeNanos()J +HSPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->getTargetValue()Ljava/lang/Object; +HSPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->getValue()Ljava/lang/Object; +HSPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->isFinished$animation_core_release()Z +HSPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->onPlayTimeChanged$animation_core_release(JF)V +HSPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->resetAnimation$animation_core_release()V +HSPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->setAnimation(Landroidx/compose/animation/core/TargetBasedAnimation;)V +HSPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->setAnimationSpec(Landroidx/compose/animation/core/FiniteAnimationSpec;)V +HSPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->setFinished$animation_core_release(Z)V +HSPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->setNeedsReset(Z)V +HSPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->setOffsetTimeNanos(J)V +HSPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->setTargetValue(Ljava/lang/Object;)V +HSPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->setValue$animation_core_release(Ljava/lang/Object;)V +HSPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->updateAnimation$default(Landroidx/compose/animation/core/Transition$TransitionAnimationState;Ljava/lang/Object;ZILjava/lang/Object;)V +HSPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->updateAnimation(Ljava/lang/Object;Z)V +HSPLandroidx/compose/animation/core/Transition$TransitionAnimationState;->updateTargetValue$animation_core_release(Ljava/lang/Object;Landroidx/compose/animation/core/FiniteAnimationSpec;)V +Landroidx/compose/animation/core/Transition$animateTo$1$1; +HSPLandroidx/compose/animation/core/Transition$animateTo$1$1;->(Landroidx/compose/animation/core/Transition;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/animation/core/Transition$animateTo$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/animation/core/Transition$animateTo$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/core/Transition$animateTo$1$1$1; +HSPLandroidx/compose/animation/core/Transition$animateTo$1$1$1;->(Landroidx/compose/animation/core/Transition;F)V +HSPLandroidx/compose/animation/core/Transition$animateTo$1$1$1;->invoke(J)V +HSPLandroidx/compose/animation/core/Transition$animateTo$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/core/Transition$animateTo$2; +HSPLandroidx/compose/animation/core/Transition$animateTo$2;->(Landroidx/compose/animation/core/Transition;Ljava/lang/Object;I)V +HSPLandroidx/compose/animation/core/Transition$animateTo$2;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/animation/core/Transition$animateTo$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/core/Transition$totalDurationNanos$2; +HSPLandroidx/compose/animation/core/Transition$totalDurationNanos$2;->(Landroidx/compose/animation/core/Transition;)V +Landroidx/compose/animation/core/Transition$updateTarget$2; +HSPLandroidx/compose/animation/core/Transition$updateTarget$2;->(Landroidx/compose/animation/core/Transition;Ljava/lang/Object;I)V +HSPLandroidx/compose/animation/core/Transition$updateTarget$2;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/animation/core/Transition$updateTarget$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/core/TransitionKt; +HSPLandroidx/compose/animation/core/TransitionKt;->createChildTransitionInternal(Landroidx/compose/animation/core/Transition;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/String;Landroidx/compose/runtime/Composer;I)Landroidx/compose/animation/core/Transition; +HSPLandroidx/compose/animation/core/TransitionKt;->createDeferredAnimation(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/String;Landroidx/compose/runtime/Composer;II)Landroidx/compose/animation/core/Transition$DeferredAnimation; +HSPLandroidx/compose/animation/core/TransitionKt;->createTransitionAnimation(Landroidx/compose/animation/core/Transition;Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/animation/core/FiniteAnimationSpec;Landroidx/compose/animation/core/TwoWayConverter;Ljava/lang/String;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State; +HSPLandroidx/compose/animation/core/TransitionKt;->updateTransition(Ljava/lang/Object;Ljava/lang/String;Landroidx/compose/runtime/Composer;II)Landroidx/compose/animation/core/Transition; +Landroidx/compose/animation/core/TransitionKt$createChildTransitionInternal$1$1; +HSPLandroidx/compose/animation/core/TransitionKt$createChildTransitionInternal$1$1;->(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/core/Transition;)V +HSPLandroidx/compose/animation/core/TransitionKt$createChildTransitionInternal$1$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult; +HSPLandroidx/compose/animation/core/TransitionKt$createChildTransitionInternal$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/core/TransitionKt$createChildTransitionInternal$1$1$invoke$$inlined$onDispose$1; +HSPLandroidx/compose/animation/core/TransitionKt$createChildTransitionInternal$1$1$invoke$$inlined$onDispose$1;->(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/core/Transition;)V +HSPLandroidx/compose/animation/core/TransitionKt$createChildTransitionInternal$1$1$invoke$$inlined$onDispose$1;->dispose()V +Landroidx/compose/animation/core/TransitionKt$createDeferredAnimation$1; +HSPLandroidx/compose/animation/core/TransitionKt$createDeferredAnimation$1;->(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/core/Transition$DeferredAnimation;)V +HSPLandroidx/compose/animation/core/TransitionKt$createDeferredAnimation$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult; +HSPLandroidx/compose/animation/core/TransitionKt$createDeferredAnimation$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/core/TransitionKt$createDeferredAnimation$1$invoke$$inlined$onDispose$1; +HSPLandroidx/compose/animation/core/TransitionKt$createDeferredAnimation$1$invoke$$inlined$onDispose$1;->(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/core/Transition$DeferredAnimation;)V +HSPLandroidx/compose/animation/core/TransitionKt$createDeferredAnimation$1$invoke$$inlined$onDispose$1;->dispose()V +Landroidx/compose/animation/core/TransitionKt$createTransitionAnimation$1$1; +HSPLandroidx/compose/animation/core/TransitionKt$createTransitionAnimation$1$1;->(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/core/Transition$TransitionAnimationState;)V +HSPLandroidx/compose/animation/core/TransitionKt$createTransitionAnimation$1$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult; +HSPLandroidx/compose/animation/core/TransitionKt$createTransitionAnimation$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/core/TransitionKt$createTransitionAnimation$1$1$invoke$$inlined$onDispose$1; +HSPLandroidx/compose/animation/core/TransitionKt$createTransitionAnimation$1$1$invoke$$inlined$onDispose$1;->(Landroidx/compose/animation/core/Transition;Landroidx/compose/animation/core/Transition$TransitionAnimationState;)V +HSPLandroidx/compose/animation/core/TransitionKt$createTransitionAnimation$1$1$invoke$$inlined$onDispose$1;->dispose()V +Landroidx/compose/animation/core/TransitionKt$updateTransition$1$1; +HSPLandroidx/compose/animation/core/TransitionKt$updateTransition$1$1;->(Landroidx/compose/animation/core/Transition;)V +HSPLandroidx/compose/animation/core/TransitionKt$updateTransition$1$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult; +HSPLandroidx/compose/animation/core/TransitionKt$updateTransition$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/core/TransitionKt$updateTransition$1$1$invoke$$inlined$onDispose$1; +HSPLandroidx/compose/animation/core/TransitionKt$updateTransition$1$1$invoke$$inlined$onDispose$1;->(Landroidx/compose/animation/core/Transition;)V +HSPLandroidx/compose/animation/core/TransitionKt$updateTransition$1$1$invoke$$inlined$onDispose$1;->dispose()V +Landroidx/compose/animation/core/TweenSpec; +HSPLandroidx/compose/animation/core/TweenSpec;->()V +HSPLandroidx/compose/animation/core/TweenSpec;->(IILandroidx/compose/animation/core/Easing;)V +HSPLandroidx/compose/animation/core/TweenSpec;->(IILandroidx/compose/animation/core/Easing;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/animation/core/TweenSpec;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/animation/core/TweenSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedAnimationSpec; +HSPLandroidx/compose/animation/core/TweenSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedDurationBasedAnimationSpec; +HSPLandroidx/compose/animation/core/TweenSpec;->vectorize(Landroidx/compose/animation/core/TwoWayConverter;)Landroidx/compose/animation/core/VectorizedTweenSpec; +Landroidx/compose/animation/core/TwoWayConverter; +Landroidx/compose/animation/core/TwoWayConverterImpl; +HSPLandroidx/compose/animation/core/TwoWayConverterImpl;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/animation/core/TwoWayConverterImpl;->getConvertFromVector()Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/animation/core/TwoWayConverterImpl;->getConvertToVector()Lkotlin/jvm/functions/Function1; +Landroidx/compose/animation/core/VectorConvertersKt; +HSPLandroidx/compose/animation/core/VectorConvertersKt;->()V +HSPLandroidx/compose/animation/core/VectorConvertersKt;->TwoWayConverter(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/animation/core/TwoWayConverter; +HSPLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter(Landroidx/compose/ui/geometry/Offset$Companion;)Landroidx/compose/animation/core/TwoWayConverter; +HSPLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter(Landroidx/compose/ui/geometry/Rect$Companion;)Landroidx/compose/animation/core/TwoWayConverter; +HSPLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter(Landroidx/compose/ui/geometry/Size$Companion;)Landroidx/compose/animation/core/TwoWayConverter; +HSPLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter(Landroidx/compose/ui/unit/Dp$Companion;)Landroidx/compose/animation/core/TwoWayConverter; +HSPLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter(Landroidx/compose/ui/unit/DpOffset$Companion;)Landroidx/compose/animation/core/TwoWayConverter; +HSPLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter(Landroidx/compose/ui/unit/IntOffset$Companion;)Landroidx/compose/animation/core/TwoWayConverter; +HSPLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter(Landroidx/compose/ui/unit/IntSize$Companion;)Landroidx/compose/animation/core/TwoWayConverter; +HSPLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter(Lkotlin/jvm/internal/FloatCompanionObject;)Landroidx/compose/animation/core/TwoWayConverter; +HSPLandroidx/compose/animation/core/VectorConvertersKt;->getVectorConverter(Lkotlin/jvm/internal/IntCompanionObject;)Landroidx/compose/animation/core/TwoWayConverter; +HSPLandroidx/compose/animation/core/VectorConvertersKt;->lerp(FFF)F +Landroidx/compose/animation/core/VectorConvertersKt$DpOffsetToVector$1; +HSPLandroidx/compose/animation/core/VectorConvertersKt$DpOffsetToVector$1;->()V +HSPLandroidx/compose/animation/core/VectorConvertersKt$DpOffsetToVector$1;->()V +Landroidx/compose/animation/core/VectorConvertersKt$DpOffsetToVector$2; +HSPLandroidx/compose/animation/core/VectorConvertersKt$DpOffsetToVector$2;->()V +HSPLandroidx/compose/animation/core/VectorConvertersKt$DpOffsetToVector$2;->()V +Landroidx/compose/animation/core/VectorConvertersKt$DpToVector$1; +HSPLandroidx/compose/animation/core/VectorConvertersKt$DpToVector$1;->()V +HSPLandroidx/compose/animation/core/VectorConvertersKt$DpToVector$1;->()V +HSPLandroidx/compose/animation/core/VectorConvertersKt$DpToVector$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/animation/core/VectorConvertersKt$DpToVector$1;->invoke-0680j_4(F)Landroidx/compose/animation/core/AnimationVector1D; +Landroidx/compose/animation/core/VectorConvertersKt$DpToVector$2; +HSPLandroidx/compose/animation/core/VectorConvertersKt$DpToVector$2;->()V +HSPLandroidx/compose/animation/core/VectorConvertersKt$DpToVector$2;->()V +HSPLandroidx/compose/animation/core/VectorConvertersKt$DpToVector$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/animation/core/VectorConvertersKt$DpToVector$2;->invoke-u2uoSUM(Landroidx/compose/animation/core/AnimationVector1D;)F +Landroidx/compose/animation/core/VectorConvertersKt$FloatToVector$1; +HSPLandroidx/compose/animation/core/VectorConvertersKt$FloatToVector$1;->()V +HSPLandroidx/compose/animation/core/VectorConvertersKt$FloatToVector$1;->()V +HSPLandroidx/compose/animation/core/VectorConvertersKt$FloatToVector$1;->invoke(F)Landroidx/compose/animation/core/AnimationVector1D; +HSPLandroidx/compose/animation/core/VectorConvertersKt$FloatToVector$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/core/VectorConvertersKt$FloatToVector$2; +HSPLandroidx/compose/animation/core/VectorConvertersKt$FloatToVector$2;->()V +HSPLandroidx/compose/animation/core/VectorConvertersKt$FloatToVector$2;->()V +HSPLandroidx/compose/animation/core/VectorConvertersKt$FloatToVector$2;->invoke(Landroidx/compose/animation/core/AnimationVector1D;)Ljava/lang/Float; +HSPLandroidx/compose/animation/core/VectorConvertersKt$FloatToVector$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/core/VectorConvertersKt$IntOffsetToVector$1; +HSPLandroidx/compose/animation/core/VectorConvertersKt$IntOffsetToVector$1;->()V +HSPLandroidx/compose/animation/core/VectorConvertersKt$IntOffsetToVector$1;->()V +HSPLandroidx/compose/animation/core/VectorConvertersKt$IntOffsetToVector$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/animation/core/VectorConvertersKt$IntOffsetToVector$1;->invoke--gyyYBs(J)Landroidx/compose/animation/core/AnimationVector2D; +Landroidx/compose/animation/core/VectorConvertersKt$IntOffsetToVector$2; +HSPLandroidx/compose/animation/core/VectorConvertersKt$IntOffsetToVector$2;->()V +HSPLandroidx/compose/animation/core/VectorConvertersKt$IntOffsetToVector$2;->()V +HSPLandroidx/compose/animation/core/VectorConvertersKt$IntOffsetToVector$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/animation/core/VectorConvertersKt$IntOffsetToVector$2;->invoke-Bjo55l4(Landroidx/compose/animation/core/AnimationVector2D;)J +Landroidx/compose/animation/core/VectorConvertersKt$IntSizeToVector$1; +HSPLandroidx/compose/animation/core/VectorConvertersKt$IntSizeToVector$1;->()V +HSPLandroidx/compose/animation/core/VectorConvertersKt$IntSizeToVector$1;->()V +HSPLandroidx/compose/animation/core/VectorConvertersKt$IntSizeToVector$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/animation/core/VectorConvertersKt$IntSizeToVector$1;->invoke-ozmzZPI(J)Landroidx/compose/animation/core/AnimationVector2D; +Landroidx/compose/animation/core/VectorConvertersKt$IntSizeToVector$2; +HSPLandroidx/compose/animation/core/VectorConvertersKt$IntSizeToVector$2;->()V +HSPLandroidx/compose/animation/core/VectorConvertersKt$IntSizeToVector$2;->()V +HSPLandroidx/compose/animation/core/VectorConvertersKt$IntSizeToVector$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/animation/core/VectorConvertersKt$IntSizeToVector$2;->invoke-YEO4UFw(Landroidx/compose/animation/core/AnimationVector2D;)J +Landroidx/compose/animation/core/VectorConvertersKt$IntToVector$1; +HSPLandroidx/compose/animation/core/VectorConvertersKt$IntToVector$1;->()V +HSPLandroidx/compose/animation/core/VectorConvertersKt$IntToVector$1;->()V +HSPLandroidx/compose/animation/core/VectorConvertersKt$IntToVector$1;->invoke(I)Landroidx/compose/animation/core/AnimationVector1D; +HSPLandroidx/compose/animation/core/VectorConvertersKt$IntToVector$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/core/VectorConvertersKt$IntToVector$2; +HSPLandroidx/compose/animation/core/VectorConvertersKt$IntToVector$2;->()V +HSPLandroidx/compose/animation/core/VectorConvertersKt$IntToVector$2;->()V +HSPLandroidx/compose/animation/core/VectorConvertersKt$IntToVector$2;->invoke(Landroidx/compose/animation/core/AnimationVector1D;)Ljava/lang/Integer; +HSPLandroidx/compose/animation/core/VectorConvertersKt$IntToVector$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/animation/core/VectorConvertersKt$OffsetToVector$1; +HSPLandroidx/compose/animation/core/VectorConvertersKt$OffsetToVector$1;->()V +HSPLandroidx/compose/animation/core/VectorConvertersKt$OffsetToVector$1;->()V +Landroidx/compose/animation/core/VectorConvertersKt$OffsetToVector$2; +HSPLandroidx/compose/animation/core/VectorConvertersKt$OffsetToVector$2;->()V +HSPLandroidx/compose/animation/core/VectorConvertersKt$OffsetToVector$2;->()V +Landroidx/compose/animation/core/VectorConvertersKt$RectToVector$1; +HSPLandroidx/compose/animation/core/VectorConvertersKt$RectToVector$1;->()V +HSPLandroidx/compose/animation/core/VectorConvertersKt$RectToVector$1;->()V +Landroidx/compose/animation/core/VectorConvertersKt$RectToVector$2; +HSPLandroidx/compose/animation/core/VectorConvertersKt$RectToVector$2;->()V +HSPLandroidx/compose/animation/core/VectorConvertersKt$RectToVector$2;->()V +Landroidx/compose/animation/core/VectorConvertersKt$SizeToVector$1; +HSPLandroidx/compose/animation/core/VectorConvertersKt$SizeToVector$1;->()V +HSPLandroidx/compose/animation/core/VectorConvertersKt$SizeToVector$1;->()V +Landroidx/compose/animation/core/VectorConvertersKt$SizeToVector$2; +HSPLandroidx/compose/animation/core/VectorConvertersKt$SizeToVector$2;->()V +HSPLandroidx/compose/animation/core/VectorConvertersKt$SizeToVector$2;->()V +Landroidx/compose/animation/core/VectorizedAnimationSpec; +HSPLandroidx/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; +Landroidx/compose/animation/core/VectorizedAnimationSpecKt; +HSPLandroidx/compose/animation/core/VectorizedAnimationSpecKt;->access$clampPlayTime(Landroidx/compose/animation/core/VectorizedDurationBasedAnimationSpec;J)J +HSPLandroidx/compose/animation/core/VectorizedAnimationSpecKt;->access$createSpringAnimations(Landroidx/compose/animation/core/AnimationVector;FF)Landroidx/compose/animation/core/Animations; +HSPLandroidx/compose/animation/core/VectorizedAnimationSpecKt;->clampPlayTime(Landroidx/compose/animation/core/VectorizedDurationBasedAnimationSpec;J)J +HSPLandroidx/compose/animation/core/VectorizedAnimationSpecKt;->createSpringAnimations(Landroidx/compose/animation/core/AnimationVector;FF)Landroidx/compose/animation/core/Animations; +HSPLandroidx/compose/animation/core/VectorizedAnimationSpecKt;->getValueFromMillis(Landroidx/compose/animation/core/VectorizedAnimationSpec;JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; +Landroidx/compose/animation/core/VectorizedAnimationSpecKt$createSpringAnimations$1; +HSPLandroidx/compose/animation/core/VectorizedAnimationSpecKt$createSpringAnimations$1;->(Landroidx/compose/animation/core/AnimationVector;FF)V +HSPLandroidx/compose/animation/core/VectorizedAnimationSpecKt$createSpringAnimations$1;->get(I)Landroidx/compose/animation/core/FloatAnimationSpec; +HSPLandroidx/compose/animation/core/VectorizedAnimationSpecKt$createSpringAnimations$1;->get(I)Landroidx/compose/animation/core/FloatSpringSpec; +Landroidx/compose/animation/core/VectorizedAnimationSpecKt$createSpringAnimations$2; +HSPLandroidx/compose/animation/core/VectorizedAnimationSpecKt$createSpringAnimations$2;->(FF)V +HSPLandroidx/compose/animation/core/VectorizedAnimationSpecKt$createSpringAnimations$2;->get(I)Landroidx/compose/animation/core/FloatAnimationSpec; +HSPLandroidx/compose/animation/core/VectorizedAnimationSpecKt$createSpringAnimations$2;->get(I)Landroidx/compose/animation/core/FloatSpringSpec; +Landroidx/compose/animation/core/VectorizedDurationBasedAnimationSpec; +HSPLandroidx/compose/animation/core/VectorizedDurationBasedAnimationSpec;->getDurationNanos(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)J +Landroidx/compose/animation/core/VectorizedFiniteAnimationSpec; +HSPLandroidx/compose/animation/core/VectorizedFiniteAnimationSpec;->isInfinite()Z +Landroidx/compose/animation/core/VectorizedFloatAnimationSpec; +HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;->()V +HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;->(Landroidx/compose/animation/core/Animations;)V +HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;->(Landroidx/compose/animation/core/FloatAnimationSpec;)V +HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec;->getDurationNanos(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)J +HSPLandroidx/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; +HSPLandroidx/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; +HSPLandroidx/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; +Landroidx/compose/animation/core/VectorizedFloatAnimationSpec$1; +HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec$1;->(Landroidx/compose/animation/core/FloatAnimationSpec;)V +HSPLandroidx/compose/animation/core/VectorizedFloatAnimationSpec$1;->get(I)Landroidx/compose/animation/core/FloatAnimationSpec; +Landroidx/compose/animation/core/VectorizedInfiniteRepeatableSpec; +HSPLandroidx/compose/animation/core/VectorizedInfiniteRepeatableSpec;->()V +HSPLandroidx/compose/animation/core/VectorizedInfiniteRepeatableSpec;->(Landroidx/compose/animation/core/VectorizedDurationBasedAnimationSpec;Landroidx/compose/animation/core/RepeatMode;J)V +HSPLandroidx/compose/animation/core/VectorizedInfiniteRepeatableSpec;->(Landroidx/compose/animation/core/VectorizedDurationBasedAnimationSpec;Landroidx/compose/animation/core/RepeatMode;JLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/animation/core/VectorizedInfiniteRepeatableSpec;->getDurationNanos(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)J +HSPLandroidx/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; +HSPLandroidx/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; +HSPLandroidx/compose/animation/core/VectorizedInfiniteRepeatableSpec;->isInfinite()Z +HSPLandroidx/compose/animation/core/VectorizedInfiniteRepeatableSpec;->repetitionPlayTimeNanos(J)J +HSPLandroidx/compose/animation/core/VectorizedInfiniteRepeatableSpec;->repetitionStartVelocity(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; +Landroidx/compose/animation/core/VectorizedKeyframesSpec; +HSPLandroidx/compose/animation/core/VectorizedKeyframesSpec;->()V +HSPLandroidx/compose/animation/core/VectorizedKeyframesSpec;->(Ljava/util/Map;II)V +HSPLandroidx/compose/animation/core/VectorizedKeyframesSpec;->getDelayMillis()I +HSPLandroidx/compose/animation/core/VectorizedKeyframesSpec;->getDurationMillis()I +HSPLandroidx/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; +HSPLandroidx/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; +HSPLandroidx/compose/animation/core/VectorizedKeyframesSpec;->init(Landroidx/compose/animation/core/AnimationVector;)V +Landroidx/compose/animation/core/VectorizedSpringSpec; +HSPLandroidx/compose/animation/core/VectorizedSpringSpec;->()V +HSPLandroidx/compose/animation/core/VectorizedSpringSpec;->(FFLandroidx/compose/animation/core/AnimationVector;)V +HSPLandroidx/compose/animation/core/VectorizedSpringSpec;->(FFLandroidx/compose/animation/core/Animations;)V +HSPLandroidx/compose/animation/core/VectorizedSpringSpec;->getDurationNanos(Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)J +HSPLandroidx/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; +HSPLandroidx/compose/animation/core/VectorizedSpringSpec;->getValueFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; +HSPLandroidx/compose/animation/core/VectorizedSpringSpec;->getVelocityFromNanos(JLandroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;Landroidx/compose/animation/core/AnimationVector;)Landroidx/compose/animation/core/AnimationVector; +HSPLandroidx/compose/animation/core/VectorizedSpringSpec;->isInfinite()Z +Landroidx/compose/animation/core/VectorizedTweenSpec; +HSPLandroidx/compose/animation/core/VectorizedTweenSpec;->()V +HSPLandroidx/compose/animation/core/VectorizedTweenSpec;->(IILandroidx/compose/animation/core/Easing;)V +HSPLandroidx/compose/animation/core/VectorizedTweenSpec;->getDelayMillis()I +HSPLandroidx/compose/animation/core/VectorizedTweenSpec;->getDurationMillis()I +HSPLandroidx/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; +HSPLandroidx/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; +Landroidx/compose/animation/core/VisibilityThresholdsKt; +HSPLandroidx/compose/animation/core/VisibilityThresholdsKt;->()V +HSPLandroidx/compose/animation/core/VisibilityThresholdsKt;->getVisibilityThreshold(Landroidx/compose/ui/geometry/Offset$Companion;)J +HSPLandroidx/compose/animation/core/VisibilityThresholdsKt;->getVisibilityThreshold(Landroidx/compose/ui/geometry/Rect$Companion;)Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/animation/core/VisibilityThresholdsKt;->getVisibilityThreshold(Landroidx/compose/ui/geometry/Size$Companion;)J +HSPLandroidx/compose/animation/core/VisibilityThresholdsKt;->getVisibilityThreshold(Landroidx/compose/ui/unit/Dp$Companion;)F +HSPLandroidx/compose/animation/core/VisibilityThresholdsKt;->getVisibilityThreshold(Landroidx/compose/ui/unit/IntOffset$Companion;)J +HSPLandroidx/compose/animation/core/VisibilityThresholdsKt;->getVisibilityThreshold(Landroidx/compose/ui/unit/IntSize$Companion;)J +HSPLandroidx/compose/animation/core/VisibilityThresholdsKt;->getVisibilityThreshold(Lkotlin/jvm/internal/IntCompanionObject;)I +HSPLandroidx/compose/animation/core/VisibilityThresholdsKt;->getVisibilityThresholdMap()Ljava/util/Map; +Landroidx/compose/foundation/AbstractClickableNode; +HSPLandroidx/compose/foundation/AbstractClickableNode;->(Landroidx/compose/foundation/interaction/MutableInteractionSource;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/foundation/AbstractClickableNode;->(Landroidx/compose/foundation/interaction/MutableInteractionSource;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/AbstractClickableNode;->disposeInteractionSource()V +HSPLandroidx/compose/foundation/AbstractClickableNode;->getInteractionData()Landroidx/compose/foundation/AbstractClickableNode$InteractionData; +HSPLandroidx/compose/foundation/AbstractClickableNode;->onDetach()V +HSPLandroidx/compose/foundation/AbstractClickableNode;->onPointerEvent-H0pRuoY(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEventPass;J)V +HSPLandroidx/compose/foundation/AbstractClickableNode;->updateCommon-XHw0xAI(Landroidx/compose/foundation/interaction/MutableInteractionSource;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;)V +Landroidx/compose/foundation/AbstractClickableNode$InteractionData; +HSPLandroidx/compose/foundation/AbstractClickableNode$InteractionData;->()V +HSPLandroidx/compose/foundation/AbstractClickableNode$InteractionData;->()V +HSPLandroidx/compose/foundation/AbstractClickableNode$InteractionData;->getCurrentKeyPressInteractions()Ljava/util/Map; +HSPLandroidx/compose/foundation/AbstractClickableNode$InteractionData;->getPressInteraction()Landroidx/compose/foundation/interaction/PressInteraction$Press; +HSPLandroidx/compose/foundation/AbstractClickableNode$InteractionData;->setCentreOffset-k-4lQ0M(J)V +HSPLandroidx/compose/foundation/AbstractClickableNode$InteractionData;->setPressInteraction(Landroidx/compose/foundation/interaction/PressInteraction$Press;)V +Landroidx/compose/foundation/AbstractClickablePointerInputNode; +HSPLandroidx/compose/foundation/AbstractClickablePointerInputNode;->(ZLandroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function0;Landroidx/compose/foundation/AbstractClickableNode$InteractionData;)V +HSPLandroidx/compose/foundation/AbstractClickablePointerInputNode;->(ZLandroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function0;Landroidx/compose/foundation/AbstractClickableNode$InteractionData;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/AbstractClickablePointerInputNode;->getEnabled()Z +HSPLandroidx/compose/foundation/AbstractClickablePointerInputNode;->getInteractionData()Landroidx/compose/foundation/AbstractClickableNode$InteractionData; +HSPLandroidx/compose/foundation/AbstractClickablePointerInputNode;->getOnClick()Lkotlin/jvm/functions/Function0; +HSPLandroidx/compose/foundation/AbstractClickablePointerInputNode;->handlePressInteraction-d-4ec7I(Landroidx/compose/foundation/gestures/PressGestureScope;JLkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/AbstractClickablePointerInputNode;->onPointerEvent-H0pRuoY(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEventPass;J)V +HSPLandroidx/compose/foundation/AbstractClickablePointerInputNode;->setEnabled(Z)V +HSPLandroidx/compose/foundation/AbstractClickablePointerInputNode;->setInteractionSource(Landroidx/compose/foundation/interaction/MutableInteractionSource;)V +HSPLandroidx/compose/foundation/AbstractClickablePointerInputNode;->setOnClick(Lkotlin/jvm/functions/Function0;)V +Landroidx/compose/foundation/AbstractClickablePointerInputNode$delayPressInteraction$1; +HSPLandroidx/compose/foundation/AbstractClickablePointerInputNode$delayPressInteraction$1;->(Landroidx/compose/foundation/AbstractClickablePointerInputNode;)V +HSPLandroidx/compose/foundation/AbstractClickablePointerInputNode$delayPressInteraction$1;->invoke()Ljava/lang/Boolean; +HSPLandroidx/compose/foundation/AbstractClickablePointerInputNode$delayPressInteraction$1;->invoke()Ljava/lang/Object; +Landroidx/compose/foundation/AbstractClickablePointerInputNode$pointerInputNode$1; +HSPLandroidx/compose/foundation/AbstractClickablePointerInputNode$pointerInputNode$1;->(Landroidx/compose/foundation/AbstractClickablePointerInputNode;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/AbstractClickablePointerInputNode$pointerInputNode$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/AbstractClickablePointerInputNode$pointerInputNode$1;->invoke(Landroidx/compose/ui/input/pointer/PointerInputScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/AbstractClickablePointerInputNode$pointerInputNode$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/AbstractClickablePointerInputNode$pointerInputNode$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect; +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->(Landroid/content/Context;Landroidx/compose/foundation/OverscrollConfiguration;)V +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$animateToRelease(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)V +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getBottomEffect$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect; +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getBottomEffectNegation$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect; +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getContainerSize$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)J +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getLeftEffect$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect; +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getLeftEffectNegation$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect; +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getRightEffect$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect; +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getRightEffectNegation$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect; +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getTopEffect$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect; +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$getTopEffectNegation$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)Landroid/widget/EdgeEffect; +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$invalidateOverscroll(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)V +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$setContainerSize$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;J)V +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$setPointerId$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;Landroidx/compose/ui/input/pointer/PointerId;)V +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->access$setPointerPosition$p(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;Landroidx/compose/ui/geometry/Offset;)V +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->animateToRelease()V +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->drawOverscroll(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->getEffectModifier()Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->invalidateOverscroll()V +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;->isInProgress()Z +Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1; +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1;->(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1;->invoke(Landroidx/compose/ui/input/pointer/PointerInputScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1$1; +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1$1;->(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1$1;->invoke(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$effectModifier$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$onNewSize$1; +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$onNewSize$1;->(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;)V +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$onNewSize$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect$onNewSize$1;->invoke-ozmzZPI(J)V +Landroidx/compose/foundation/AndroidOverscrollKt; +HSPLandroidx/compose/foundation/AndroidOverscrollKt;->()V +HSPLandroidx/compose/foundation/AndroidOverscrollKt;->access$getStretchOverscrollNonClippingLayer$p()Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/AndroidOverscrollKt;->rememberOverscrollEffect(Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/OverscrollEffect; +Landroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1; +HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1;->()V +HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1;->()V +HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1;->invoke-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; +Landroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1$1; +HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1$1;->(Landroidx/compose/ui/layout/Placeable;I)V +HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2; +HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2;->()V +HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2;->()V +HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2;->invoke-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; +Landroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2$1; +HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2$1;->(Landroidx/compose/ui/layout/Placeable;I)V +HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/foundation/AndroidOverscrollKt$StretchOverscrollNonClippingLayer$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/Api31Impl; +HSPLandroidx/compose/foundation/Api31Impl;->()V +HSPLandroidx/compose/foundation/Api31Impl;->()V +HSPLandroidx/compose/foundation/Api31Impl;->create(Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/widget/EdgeEffect; +HSPLandroidx/compose/foundation/Api31Impl;->getDistance(Landroid/widget/EdgeEffect;)F +Landroidx/compose/foundation/BackgroundElement; +HSPLandroidx/compose/foundation/BackgroundElement;->(JLandroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/Shape;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/foundation/BackgroundElement;->(JLandroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/Shape;Lkotlin/jvm/functions/Function1;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/BackgroundElement;->(JLandroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/Shape;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/BackgroundElement;->create()Landroidx/compose/foundation/BackgroundNode; +HSPLandroidx/compose/foundation/BackgroundElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/foundation/BackgroundElement;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/foundation/BackgroundElement;->update(Landroidx/compose/foundation/BackgroundNode;)V +HSPLandroidx/compose/foundation/BackgroundElement;->update(Landroidx/compose/ui/Modifier$Node;)V +Landroidx/compose/foundation/BackgroundKt; +HSPLandroidx/compose/foundation/BackgroundKt;->background-bw27NRU$default(Landroidx/compose/ui/Modifier;JLandroidx/compose/ui/graphics/Shape;ILjava/lang/Object;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/BackgroundKt;->background-bw27NRU(Landroidx/compose/ui/Modifier;JLandroidx/compose/ui/graphics/Shape;)Landroidx/compose/ui/Modifier; +Landroidx/compose/foundation/BackgroundNode; +HSPLandroidx/compose/foundation/BackgroundNode;->(JLandroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/Shape;)V +HSPLandroidx/compose/foundation/BackgroundNode;->(JLandroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/Shape;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/BackgroundNode;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V +HSPLandroidx/compose/foundation/BackgroundNode;->drawOutline(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V +HSPLandroidx/compose/foundation/BackgroundNode;->drawRect(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V +HSPLandroidx/compose/foundation/BackgroundNode;->setAlpha(F)V +HSPLandroidx/compose/foundation/BackgroundNode;->setBrush(Landroidx/compose/ui/graphics/Brush;)V +HSPLandroidx/compose/foundation/BackgroundNode;->setColor-8_81llA(J)V +HSPLandroidx/compose/foundation/BackgroundNode;->setShape(Landroidx/compose/ui/graphics/Shape;)V +Landroidx/compose/foundation/BorderKt; +HSPLandroidx/compose/foundation/BorderKt;->access$shrink-Kibmq7A(JF)J +HSPLandroidx/compose/foundation/BorderKt;->border(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/BorderStroke;Landroidx/compose/ui/graphics/Shape;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/BorderKt;->border-xT4_qwU(Landroidx/compose/ui/Modifier;FJLandroidx/compose/ui/graphics/Shape;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/BorderKt;->border-ziNgDLE(Landroidx/compose/ui/Modifier;FLandroidx/compose/ui/graphics/Brush;Landroidx/compose/ui/graphics/Shape;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/BorderKt;->shrink-Kibmq7A(JF)J +Landroidx/compose/foundation/BorderModifierNode; +HSPLandroidx/compose/foundation/BorderModifierNode;->(FLandroidx/compose/ui/graphics/Brush;Landroidx/compose/ui/graphics/Shape;)V +HSPLandroidx/compose/foundation/BorderModifierNode;->(FLandroidx/compose/ui/graphics/Brush;Landroidx/compose/ui/graphics/Shape;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/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; +HSPLandroidx/compose/foundation/BorderModifierNode;->drawRoundRectBorder-JqoCqck(Landroidx/compose/ui/draw/CacheDrawScope;Landroidx/compose/ui/graphics/Brush;Landroidx/compose/ui/graphics/Outline$Rounded;JJZF)Landroidx/compose/ui/draw/DrawResult; +HSPLandroidx/compose/foundation/BorderModifierNode;->getBrush()Landroidx/compose/ui/graphics/Brush; +HSPLandroidx/compose/foundation/BorderModifierNode;->getShape()Landroidx/compose/ui/graphics/Shape; +HSPLandroidx/compose/foundation/BorderModifierNode;->getWidth-D9Ej5fM()F +HSPLandroidx/compose/foundation/BorderModifierNode;->setBrush(Landroidx/compose/ui/graphics/Brush;)V +HSPLandroidx/compose/foundation/BorderModifierNode;->setShape(Landroidx/compose/ui/graphics/Shape;)V +HSPLandroidx/compose/foundation/BorderModifierNode;->setWidth-0680j_4(F)V +Landroidx/compose/foundation/BorderModifierNode$drawRoundRectBorder$1; +HSPLandroidx/compose/foundation/BorderModifierNode$drawRoundRectBorder$1;->(ZLandroidx/compose/ui/graphics/Brush;JFFJJLandroidx/compose/ui/graphics/drawscope/Stroke;)V +HSPLandroidx/compose/foundation/BorderModifierNode$drawRoundRectBorder$1;->invoke(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V +HSPLandroidx/compose/foundation/BorderModifierNode$drawRoundRectBorder$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/BorderModifierNode$drawWithCacheModifierNode$1; +HSPLandroidx/compose/foundation/BorderModifierNode$drawWithCacheModifierNode$1;->(Landroidx/compose/foundation/BorderModifierNode;)V +HSPLandroidx/compose/foundation/BorderModifierNode$drawWithCacheModifierNode$1;->invoke(Landroidx/compose/ui/draw/CacheDrawScope;)Landroidx/compose/ui/draw/DrawResult; +HSPLandroidx/compose/foundation/BorderModifierNode$drawWithCacheModifierNode$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/BorderModifierNodeElement; +HSPLandroidx/compose/foundation/BorderModifierNodeElement;->(FLandroidx/compose/ui/graphics/Brush;Landroidx/compose/ui/graphics/Shape;)V +HSPLandroidx/compose/foundation/BorderModifierNodeElement;->(FLandroidx/compose/ui/graphics/Brush;Landroidx/compose/ui/graphics/Shape;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/BorderModifierNodeElement;->create()Landroidx/compose/foundation/BorderModifierNode; +HSPLandroidx/compose/foundation/BorderModifierNodeElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/foundation/BorderModifierNodeElement;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/foundation/BorderModifierNodeElement;->update(Landroidx/compose/foundation/BorderModifierNode;)V +HSPLandroidx/compose/foundation/BorderModifierNodeElement;->update(Landroidx/compose/ui/Modifier$Node;)V +Landroidx/compose/foundation/BorderStroke; +HSPLandroidx/compose/foundation/BorderStroke;->()V +HSPLandroidx/compose/foundation/BorderStroke;->(FLandroidx/compose/ui/graphics/Brush;)V +HSPLandroidx/compose/foundation/BorderStroke;->(FLandroidx/compose/ui/graphics/Brush;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/BorderStroke;->getBrush()Landroidx/compose/ui/graphics/Brush; +HSPLandroidx/compose/foundation/BorderStroke;->getWidth-D9Ej5fM()F +Landroidx/compose/foundation/BorderStrokeKt; +HSPLandroidx/compose/foundation/BorderStrokeKt;->BorderStroke-cXLIe8U(FJ)Landroidx/compose/foundation/BorderStroke; +Landroidx/compose/foundation/CanvasKt; +HSPLandroidx/compose/foundation/CanvasKt;->Canvas(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;I)V +Landroidx/compose/foundation/CheckScrollableContainerConstraintsKt; +HSPLandroidx/compose/foundation/CheckScrollableContainerConstraintsKt;->checkScrollableContainerConstraints-K40F9xA(JLandroidx/compose/foundation/gestures/Orientation;)V +Landroidx/compose/foundation/ClickableElement; +HSPLandroidx/compose/foundation/ClickableElement;->(Landroidx/compose/foundation/interaction/MutableInteractionSource;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/foundation/ClickableElement;->(Landroidx/compose/foundation/interaction/MutableInteractionSource;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/ClickableElement;->create()Landroidx/compose/foundation/ClickableNode; +HSPLandroidx/compose/foundation/ClickableElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/foundation/ClickableElement;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/foundation/ClickableElement;->update(Landroidx/compose/foundation/ClickableNode;)V +HSPLandroidx/compose/foundation/ClickableElement;->update(Landroidx/compose/ui/Modifier$Node;)V +Landroidx/compose/foundation/ClickableKt; +HSPLandroidx/compose/foundation/ClickableKt;->access$handlePressInteraction-EPk0efs(Landroidx/compose/foundation/gestures/PressGestureScope;JLandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/AbstractClickableNode$InteractionData;Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/ClickableKt;->clickable-O2vRcR0$default(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;ILjava/lang/Object;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/ClickableKt;->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; +HSPLandroidx/compose/foundation/ClickableKt;->clickable-XHw0xAI$default(Landroidx/compose/ui/Modifier;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;ILjava/lang/Object;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/ClickableKt;->clickable-XHw0xAI(Landroidx/compose/ui/Modifier;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/ClickableKt;->combinedClickable-XVZzFYc(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/Indication;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/ClickableKt;->combinedClickable-cJG_KMw$default(Landroidx/compose/ui/Modifier;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;ILjava/lang/Object;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/ClickableKt;->combinedClickable-cJG_KMw(Landroidx/compose/ui/Modifier;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/ClickableKt;->handlePressInteraction-EPk0efs(Landroidx/compose/foundation/gestures/PressGestureScope;JLandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/AbstractClickableNode$InteractionData;Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/compose/foundation/ClickableKt$clickable$2; +HSPLandroidx/compose/foundation/ClickableKt$clickable$2;->(ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/foundation/ClickableKt$clickable$2;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/ClickableKt$clickable$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/ClickableKt$combinedClickable$2; +HSPLandroidx/compose/foundation/ClickableKt$combinedClickable$2;->(ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/foundation/ClickableKt$combinedClickable$2;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/ClickableKt$combinedClickable$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/ClickableKt$handlePressInteraction$2; +HSPLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2;->(Landroidx/compose/foundation/gestures/PressGestureScope;JLandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/AbstractClickableNode$InteractionData;Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/ClickableKt$handlePressInteraction$2$delayJob$1; +HSPLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2$delayJob$1;->(Lkotlin/jvm/functions/Function0;JLandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/AbstractClickableNode$InteractionData;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2$delayJob$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/ClickableKt$handlePressInteraction$2$delayJob$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/ClickableNode; +HSPLandroidx/compose/foundation/ClickableNode;->(Landroidx/compose/foundation/interaction/MutableInteractionSource;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/foundation/ClickableNode;->(Landroidx/compose/foundation/interaction/MutableInteractionSource;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/ClickableNode;->getClickablePointerInputNode()Landroidx/compose/foundation/AbstractClickablePointerInputNode; +HSPLandroidx/compose/foundation/ClickableNode;->getClickablePointerInputNode()Landroidx/compose/foundation/ClickablePointerInputNode; +HSPLandroidx/compose/foundation/ClickableNode;->getClickableSemanticsNode()Landroidx/compose/foundation/ClickableSemanticsNode; +HSPLandroidx/compose/foundation/ClickableNode;->update-XHw0xAI(Landroidx/compose/foundation/interaction/MutableInteractionSource;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;)V +Landroidx/compose/foundation/ClickablePointerInputNode; +HSPLandroidx/compose/foundation/ClickablePointerInputNode;->(ZLandroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function0;Landroidx/compose/foundation/AbstractClickableNode$InteractionData;)V +HSPLandroidx/compose/foundation/ClickablePointerInputNode;->pointerInput(Landroidx/compose/ui/input/pointer/PointerInputScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/ClickablePointerInputNode;->update(ZLandroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function0;)V +Landroidx/compose/foundation/ClickablePointerInputNode$pointerInput$2; +HSPLandroidx/compose/foundation/ClickablePointerInputNode$pointerInput$2;->(Landroidx/compose/foundation/ClickablePointerInputNode;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/ClickablePointerInputNode$pointerInput$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/ClickablePointerInputNode$pointerInput$2;->invoke-d-4ec7I(Landroidx/compose/foundation/gestures/PressGestureScope;JLkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/ClickablePointerInputNode$pointerInput$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/ClickablePointerInputNode$pointerInput$3; +HSPLandroidx/compose/foundation/ClickablePointerInputNode$pointerInput$3;->(Landroidx/compose/foundation/ClickablePointerInputNode;)V +HSPLandroidx/compose/foundation/ClickablePointerInputNode$pointerInput$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/ClickablePointerInputNode$pointerInput$3;->invoke-k-4lQ0M(J)V +Landroidx/compose/foundation/ClickableSemanticsNode; +HSPLandroidx/compose/foundation/ClickableSemanticsNode;->(ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;Ljava/lang/String;Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/foundation/ClickableSemanticsNode;->(ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/ClickableSemanticsNode;->applySemantics(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V +HSPLandroidx/compose/foundation/ClickableSemanticsNode;->getShouldMergeDescendantSemantics()Z +HSPLandroidx/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 +Landroidx/compose/foundation/ClickableSemanticsNode$applySemantics$1; +HSPLandroidx/compose/foundation/ClickableSemanticsNode$applySemantics$1;->(Landroidx/compose/foundation/ClickableSemanticsNode;)V +Landroidx/compose/foundation/Clickable_androidKt; +HSPLandroidx/compose/foundation/Clickable_androidKt;->()V +HSPLandroidx/compose/foundation/Clickable_androidKt;->getTapIndicationDelay()J +Landroidx/compose/foundation/ClipScrollableContainerKt; +HSPLandroidx/compose/foundation/ClipScrollableContainerKt;->()V +HSPLandroidx/compose/foundation/ClipScrollableContainerKt;->clipScrollableContainer(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/gestures/Orientation;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/ClipScrollableContainerKt;->getMaxSupportedElevation()F +Landroidx/compose/foundation/ClipScrollableContainerKt$HorizontalScrollableClipModifier$1; +HSPLandroidx/compose/foundation/ClipScrollableContainerKt$HorizontalScrollableClipModifier$1;->()V +Landroidx/compose/foundation/ClipScrollableContainerKt$VerticalScrollableClipModifier$1; +HSPLandroidx/compose/foundation/ClipScrollableContainerKt$VerticalScrollableClipModifier$1;->()V +HSPLandroidx/compose/foundation/ClipScrollableContainerKt$VerticalScrollableClipModifier$1;->createOutline-Pq9zytI(JLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;)Landroidx/compose/ui/graphics/Outline; +Landroidx/compose/foundation/CombinedClickableElement; +HSPLandroidx/compose/foundation/CombinedClickableElement;->(Landroidx/compose/foundation/interaction/MutableInteractionSource;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/foundation/CombinedClickableElement;->(Landroidx/compose/foundation/interaction/MutableInteractionSource;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/CombinedClickableElement;->create()Landroidx/compose/foundation/CombinedClickableNode; +HSPLandroidx/compose/foundation/CombinedClickableElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/foundation/CombinedClickableElement;->equals(Ljava/lang/Object;)Z +Landroidx/compose/foundation/CombinedClickableNode; +HSPLandroidx/compose/foundation/CombinedClickableNode;->(Landroidx/compose/foundation/interaction/MutableInteractionSource;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/foundation/CombinedClickableNode;->(Landroidx/compose/foundation/interaction/MutableInteractionSource;ZLjava/lang/String;Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function0;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/foundation/CombinedClickablePointerInputNode; +HSPLandroidx/compose/foundation/CombinedClickablePointerInputNode;->(ZLandroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function0;Landroidx/compose/foundation/AbstractClickableNode$InteractionData;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;)V +Landroidx/compose/foundation/DarkThemeKt; +HSPLandroidx/compose/foundation/DarkThemeKt;->isSystemInDarkTheme(Landroidx/compose/runtime/Composer;I)Z +Landroidx/compose/foundation/DarkTheme_androidKt; +HSPLandroidx/compose/foundation/DarkTheme_androidKt;->_isSystemInDarkTheme(Landroidx/compose/runtime/Composer;I)Z +Landroidx/compose/foundation/DrawOverscrollModifier; +HSPLandroidx/compose/foundation/DrawOverscrollModifier;->(Landroidx/compose/foundation/AndroidEdgeEffectOverscrollEffect;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/foundation/DrawOverscrollModifier;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V +HSPLandroidx/compose/foundation/DrawOverscrollModifier;->equals(Ljava/lang/Object;)Z +Landroidx/compose/foundation/EdgeEffectCompat; +HSPLandroidx/compose/foundation/EdgeEffectCompat;->()V +HSPLandroidx/compose/foundation/EdgeEffectCompat;->()V +HSPLandroidx/compose/foundation/EdgeEffectCompat;->create(Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/widget/EdgeEffect; +HSPLandroidx/compose/foundation/EdgeEffectCompat;->getDistanceCompat(Landroid/widget/EdgeEffect;)F +Landroidx/compose/foundation/FocusableElement; +HSPLandroidx/compose/foundation/FocusableElement;->(Landroidx/compose/foundation/interaction/MutableInteractionSource;)V +HSPLandroidx/compose/foundation/FocusableElement;->create()Landroidx/compose/foundation/FocusableNode; +HSPLandroidx/compose/foundation/FocusableElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/foundation/FocusableElement;->equals(Ljava/lang/Object;)Z +Landroidx/compose/foundation/FocusableInNonTouchMode; +HSPLandroidx/compose/foundation/FocusableInNonTouchMode;->()V +HSPLandroidx/compose/foundation/FocusableInNonTouchMode;->applyFocusProperties(Landroidx/compose/ui/focus/FocusProperties;)V +HSPLandroidx/compose/foundation/FocusableInNonTouchMode;->getInputModeManager()Landroidx/compose/ui/input/InputModeManager; +Landroidx/compose/foundation/FocusableInteractionNode; +HSPLandroidx/compose/foundation/FocusableInteractionNode;->(Landroidx/compose/foundation/interaction/MutableInteractionSource;)V +HSPLandroidx/compose/foundation/FocusableInteractionNode;->emitWithFallback(Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/interaction/Interaction;)V +HSPLandroidx/compose/foundation/FocusableInteractionNode;->setFocus(Z)V +Landroidx/compose/foundation/FocusableInteractionNode$emitWithFallback$1; +HSPLandroidx/compose/foundation/FocusableInteractionNode$emitWithFallback$1;->(Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/interaction/Interaction;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/FocusableInteractionNode$emitWithFallback$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/FocusableInteractionNode$emitWithFallback$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/FocusableKt; +HSPLandroidx/compose/foundation/FocusableKt;->()V +HSPLandroidx/compose/foundation/FocusableKt;->focusGroup(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/FocusableKt;->focusable(Landroidx/compose/ui/Modifier;ZLandroidx/compose/foundation/interaction/MutableInteractionSource;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/FocusableKt;->focusableInNonTouchMode(Landroidx/compose/ui/Modifier;ZLandroidx/compose/foundation/interaction/MutableInteractionSource;)Landroidx/compose/ui/Modifier; +Landroidx/compose/foundation/FocusableKt$FocusableInNonTouchModeElement$1; +HSPLandroidx/compose/foundation/FocusableKt$FocusableInNonTouchModeElement$1;->()V +HSPLandroidx/compose/foundation/FocusableKt$FocusableInNonTouchModeElement$1;->create()Landroidx/compose/foundation/FocusableInNonTouchMode; +HSPLandroidx/compose/foundation/FocusableKt$FocusableInNonTouchModeElement$1;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/foundation/FocusableKt$FocusableInNonTouchModeElement$1;->equals(Ljava/lang/Object;)Z +Landroidx/compose/foundation/FocusableKt$focusGroup$1; +HSPLandroidx/compose/foundation/FocusableKt$focusGroup$1;->()V +HSPLandroidx/compose/foundation/FocusableKt$focusGroup$1;->()V +HSPLandroidx/compose/foundation/FocusableKt$focusGroup$1;->invoke(Landroidx/compose/ui/focus/FocusProperties;)V +HSPLandroidx/compose/foundation/FocusableKt$focusGroup$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/FocusableKt$focusableInNonTouchMode$1; +HSPLandroidx/compose/foundation/FocusableKt$focusableInNonTouchMode$1;->(ZLandroidx/compose/foundation/interaction/MutableInteractionSource;)V +Landroidx/compose/foundation/FocusableNode; +HSPLandroidx/compose/foundation/FocusableNode;->(Landroidx/compose/foundation/interaction/MutableInteractionSource;)V +HSPLandroidx/compose/foundation/FocusableNode;->access$getBringIntoViewRequester$p(Landroidx/compose/foundation/FocusableNode;)Landroidx/compose/foundation/relocation/BringIntoViewRequester; +HSPLandroidx/compose/foundation/FocusableNode;->applySemantics(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V +HSPLandroidx/compose/foundation/FocusableNode;->onFocusEvent(Landroidx/compose/ui/focus/FocusState;)V +HSPLandroidx/compose/foundation/FocusableNode;->onGloballyPositioned(Landroidx/compose/ui/layout/LayoutCoordinates;)V +HSPLandroidx/compose/foundation/FocusableNode;->onPlaced(Landroidx/compose/ui/layout/LayoutCoordinates;)V +Landroidx/compose/foundation/FocusableNode$onFocusEvent$1; +HSPLandroidx/compose/foundation/FocusableNode$onFocusEvent$1;->(Landroidx/compose/foundation/FocusableNode;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/FocusableNode$onFocusEvent$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/FocusableNode$onFocusEvent$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/FocusablePinnableContainerNode; +HSPLandroidx/compose/foundation/FocusablePinnableContainerNode;->()V +HSPLandroidx/compose/foundation/FocusablePinnableContainerNode;->retrievePinnableContainer()Landroidx/compose/ui/layout/PinnableContainer; +HSPLandroidx/compose/foundation/FocusablePinnableContainerNode;->setFocus(Z)V +Landroidx/compose/foundation/FocusablePinnableContainerNode$retrievePinnableContainer$1; +HSPLandroidx/compose/foundation/FocusablePinnableContainerNode$retrievePinnableContainer$1;->(Lkotlin/jvm/internal/Ref$ObjectRef;Landroidx/compose/foundation/FocusablePinnableContainerNode;)V +HSPLandroidx/compose/foundation/FocusablePinnableContainerNode$retrievePinnableContainer$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/foundation/FocusablePinnableContainerNode$retrievePinnableContainer$1;->invoke()V +Landroidx/compose/foundation/FocusableSemanticsNode; +HSPLandroidx/compose/foundation/FocusableSemanticsNode;->()V +HSPLandroidx/compose/foundation/FocusableSemanticsNode;->applySemantics(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V +HSPLandroidx/compose/foundation/FocusableSemanticsNode;->setFocus(Z)V +Landroidx/compose/foundation/FocusableSemanticsNode$applySemantics$1; +HSPLandroidx/compose/foundation/FocusableSemanticsNode$applySemantics$1;->(Landroidx/compose/foundation/FocusableSemanticsNode;)V +Landroidx/compose/foundation/FocusedBoundsKt; +HSPLandroidx/compose/foundation/FocusedBoundsKt;->()V +HSPLandroidx/compose/foundation/FocusedBoundsKt;->getModifierLocalFocusedBoundsObserver()Landroidx/compose/ui/modifier/ProvidableModifierLocal; +HSPLandroidx/compose/foundation/FocusedBoundsKt;->onFocusedBoundsChanged(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; +Landroidx/compose/foundation/FocusedBoundsKt$ModifierLocalFocusedBoundsObserver$1; +HSPLandroidx/compose/foundation/FocusedBoundsKt$ModifierLocalFocusedBoundsObserver$1;->()V +HSPLandroidx/compose/foundation/FocusedBoundsKt$ModifierLocalFocusedBoundsObserver$1;->()V +HSPLandroidx/compose/foundation/FocusedBoundsKt$ModifierLocalFocusedBoundsObserver$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/foundation/FocusedBoundsKt$ModifierLocalFocusedBoundsObserver$1;->invoke()Lkotlin/jvm/functions/Function1; +Landroidx/compose/foundation/FocusedBoundsNode; +HSPLandroidx/compose/foundation/FocusedBoundsNode;->()V +HSPLandroidx/compose/foundation/FocusedBoundsNode;->getObserver()Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/foundation/FocusedBoundsNode;->notifyObserverWhenAttached()V +HSPLandroidx/compose/foundation/FocusedBoundsNode;->onGloballyPositioned(Landroidx/compose/ui/layout/LayoutCoordinates;)V +HSPLandroidx/compose/foundation/FocusedBoundsNode;->setFocus(Z)V +Landroidx/compose/foundation/FocusedBoundsObserverElement; +HSPLandroidx/compose/foundation/FocusedBoundsObserverElement;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/foundation/FocusedBoundsObserverElement;->create()Landroidx/compose/foundation/FocusedBoundsObserverNode; +HSPLandroidx/compose/foundation/FocusedBoundsObserverElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/foundation/FocusedBoundsObserverElement;->equals(Ljava/lang/Object;)Z +Landroidx/compose/foundation/FocusedBoundsObserverNode; +HSPLandroidx/compose/foundation/FocusedBoundsObserverNode;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/foundation/FocusedBoundsObserverNode;->getParent()Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/foundation/FocusedBoundsObserverNode;->getProvidedValues()Landroidx/compose/ui/modifier/ModifierLocalMap; +HSPLandroidx/compose/foundation/FocusedBoundsObserverNode;->invoke(Landroidx/compose/ui/layout/LayoutCoordinates;)V +HSPLandroidx/compose/foundation/FocusedBoundsObserverNode;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/HoverableElement; +HSPLandroidx/compose/foundation/HoverableElement;->(Landroidx/compose/foundation/interaction/MutableInteractionSource;)V +HSPLandroidx/compose/foundation/HoverableElement;->create()Landroidx/compose/foundation/HoverableNode; +HSPLandroidx/compose/foundation/HoverableElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/foundation/HoverableElement;->equals(Ljava/lang/Object;)Z +Landroidx/compose/foundation/HoverableKt; +HSPLandroidx/compose/foundation/HoverableKt;->hoverable(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/interaction/MutableInteractionSource;Z)Landroidx/compose/ui/Modifier; +Landroidx/compose/foundation/HoverableNode; +HSPLandroidx/compose/foundation/HoverableNode;->(Landroidx/compose/foundation/interaction/MutableInteractionSource;)V +HSPLandroidx/compose/foundation/HoverableNode;->onDetach()V +HSPLandroidx/compose/foundation/HoverableNode;->onPointerEvent-H0pRuoY(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEventPass;J)V +HSPLandroidx/compose/foundation/HoverableNode;->tryEmitExit()V +Landroidx/compose/foundation/Indication; +Landroidx/compose/foundation/IndicationInstance; +Landroidx/compose/foundation/IndicationKt; +HSPLandroidx/compose/foundation/IndicationKt;->()V +HSPLandroidx/compose/foundation/IndicationKt;->getLocalIndication()Landroidx/compose/runtime/ProvidableCompositionLocal; +HSPLandroidx/compose/foundation/IndicationKt;->indication(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/foundation/Indication;)Landroidx/compose/ui/Modifier; +Landroidx/compose/foundation/IndicationKt$LocalIndication$1; +HSPLandroidx/compose/foundation/IndicationKt$LocalIndication$1;->()V +HSPLandroidx/compose/foundation/IndicationKt$LocalIndication$1;->()V +Landroidx/compose/foundation/IndicationKt$indication$2; +HSPLandroidx/compose/foundation/IndicationKt$indication$2;->(Landroidx/compose/foundation/Indication;Landroidx/compose/foundation/interaction/InteractionSource;)V +HSPLandroidx/compose/foundation/IndicationKt$indication$2;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/IndicationKt$indication$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/IndicationModifier; +HSPLandroidx/compose/foundation/IndicationModifier;->(Landroidx/compose/foundation/IndicationInstance;)V +HSPLandroidx/compose/foundation/IndicationModifier;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V +Landroidx/compose/foundation/MagnifierKt; +HSPLandroidx/compose/foundation/MagnifierKt;->()V +HSPLandroidx/compose/foundation/MagnifierKt;->getMagnifierPositionInRoot()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/foundation/MagnifierKt;->isPlatformMagnifierSupported$default(IILjava/lang/Object;)Z +HSPLandroidx/compose/foundation/MagnifierKt;->isPlatformMagnifierSupported(I)Z +HSPLandroidx/compose/foundation/MagnifierKt;->magnifier$default(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;FLandroidx/compose/foundation/MagnifierStyle;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/MagnifierKt;->magnifier(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;FLandroidx/compose/foundation/MagnifierStyle;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/MagnifierKt;->magnifier(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;FLandroidx/compose/foundation/MagnifierStyle;Lkotlin/jvm/functions/Function1;Landroidx/compose/foundation/PlatformMagnifierFactory;)Landroidx/compose/ui/Modifier; +Landroidx/compose/foundation/MagnifierKt$magnifier$1; +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$1;->()V +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$1;->()V +Landroidx/compose/foundation/MagnifierKt$magnifier$4; +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;FLkotlin/jvm/functions/Function1;Landroidx/compose/foundation/PlatformMagnifierFactory;Landroidx/compose/foundation/MagnifierStyle;)V +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4;->access$invoke$lambda$1(Landroidx/compose/runtime/MutableState;)J +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4;->access$invoke$lambda$10(Landroidx/compose/runtime/State;)Z +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4;->access$invoke$lambda$2(Landroidx/compose/runtime/MutableState;J)V +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4;->access$invoke$lambda$3(Landroidx/compose/runtime/State;)Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4;->access$invoke$lambda$6(Landroidx/compose/runtime/State;)Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4;->access$invoke$lambda$8(Landroidx/compose/runtime/State;)J +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4;->invoke$lambda$1(Landroidx/compose/runtime/MutableState;)J +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4;->invoke$lambda$10(Landroidx/compose/runtime/State;)Z +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4;->invoke$lambda$2(Landroidx/compose/runtime/MutableState;J)V +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4;->invoke$lambda$3(Landroidx/compose/runtime/State;)Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4;->invoke$lambda$6(Landroidx/compose/runtime/State;)Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4;->invoke$lambda$8(Landroidx/compose/runtime/State;)J +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/MagnifierKt$magnifier$4$1; +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4$1;->(Landroidx/compose/foundation/PlatformMagnifierFactory;Landroidx/compose/foundation/MagnifierStyle;Landroid/view/View;Landroidx/compose/ui/unit/Density;FLkotlinx/coroutines/flow/MutableSharedFlow;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/MagnifierKt$magnifier$4$1$1; +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4$1$1;->(Landroidx/compose/foundation/PlatformMagnifier;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4$1$1;->invoke(Lkotlin/Unit;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/MagnifierKt$magnifier$4$1$2; +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4$1$2;->(Landroidx/compose/foundation/PlatformMagnifier;Landroidx/compose/ui/unit/Density;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/State;Lkotlin/jvm/internal/Ref$LongRef;Landroidx/compose/runtime/State;)V +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4$1$2;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4$1$2;->invoke()V +Landroidx/compose/foundation/MagnifierKt$magnifier$4$2$1; +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4$2$1;->(Landroidx/compose/runtime/MutableState;)V +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4$2$1;->invoke(Landroidx/compose/ui/layout/LayoutCoordinates;)V +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/MagnifierKt$magnifier$4$3; +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4$3;->(Lkotlinx/coroutines/flow/MutableSharedFlow;)V +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4$3;->invoke(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/MagnifierKt$magnifier$4$4$1; +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4$4$1;->(Landroidx/compose/runtime/State;)V +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4$4$1;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4$4$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/MagnifierKt$magnifier$4$4$1$1; +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4$4$1$1;->(Landroidx/compose/runtime/State;)V +Landroidx/compose/foundation/MagnifierKt$magnifier$4$isMagnifierShown$2$1; +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4$isMagnifierShown$2$1;->(Landroidx/compose/runtime/State;)V +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4$isMagnifierShown$2$1;->invoke()Ljava/lang/Boolean; +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4$isMagnifierShown$2$1;->invoke()Ljava/lang/Object; +Landroidx/compose/foundation/MagnifierKt$magnifier$4$sourceCenterInRoot$2$1; +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4$sourceCenterInRoot$2$1;->(Landroidx/compose/ui/unit/Density;Landroidx/compose/runtime/State;Landroidx/compose/runtime/MutableState;)V +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4$sourceCenterInRoot$2$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/foundation/MagnifierKt$magnifier$4$sourceCenterInRoot$2$1;->invoke-F1C5BW0()J +Landroidx/compose/foundation/MagnifierStyle; +HSPLandroidx/compose/foundation/MagnifierStyle;->()V +HSPLandroidx/compose/foundation/MagnifierStyle;->(JFFZZ)V +HSPLandroidx/compose/foundation/MagnifierStyle;->(JFFZZILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/MagnifierStyle;->(JFFZZLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/MagnifierStyle;->(ZJFFZZ)V +HSPLandroidx/compose/foundation/MagnifierStyle;->(ZJFFZZLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/MagnifierStyle;->access$getTextDefault$cp()Landroidx/compose/foundation/MagnifierStyle; +HSPLandroidx/compose/foundation/MagnifierStyle;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/foundation/MagnifierStyle;->getFishEyeEnabled$foundation_release()Z +HSPLandroidx/compose/foundation/MagnifierStyle;->getUseTextDefault$foundation_release()Z +HSPLandroidx/compose/foundation/MagnifierStyle;->isSupported()Z +Landroidx/compose/foundation/MagnifierStyle$Companion; +HSPLandroidx/compose/foundation/MagnifierStyle$Companion;->()V +HSPLandroidx/compose/foundation/MagnifierStyle$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/MagnifierStyle$Companion;->getTextDefault()Landroidx/compose/foundation/MagnifierStyle; +HSPLandroidx/compose/foundation/MagnifierStyle$Companion;->isStyleSupported$foundation_release$default(Landroidx/compose/foundation/MagnifierStyle$Companion;Landroidx/compose/foundation/MagnifierStyle;IILjava/lang/Object;)Z +HSPLandroidx/compose/foundation/MagnifierStyle$Companion;->isStyleSupported$foundation_release(Landroidx/compose/foundation/MagnifierStyle;I)Z +Landroidx/compose/foundation/MutatePriority; +HSPLandroidx/compose/foundation/MutatePriority;->$values()[Landroidx/compose/foundation/MutatePriority; +HSPLandroidx/compose/foundation/MutatePriority;->()V +HSPLandroidx/compose/foundation/MutatePriority;->(Ljava/lang/String;I)V +Landroidx/compose/foundation/MutatorMutex; +HSPLandroidx/compose/foundation/MutatorMutex;->()V +HSPLandroidx/compose/foundation/MutatorMutex;->()V +HSPLandroidx/compose/foundation/MutatorMutex;->access$getCurrentMutator$p(Landroidx/compose/foundation/MutatorMutex;)Ljava/util/concurrent/atomic/AtomicReference; +HSPLandroidx/compose/foundation/MutatorMutex;->access$getMutex$p(Landroidx/compose/foundation/MutatorMutex;)Lkotlinx/coroutines/sync/Mutex; +HSPLandroidx/compose/foundation/MutatorMutex;->access$tryMutateOrCancel(Landroidx/compose/foundation/MutatorMutex;Landroidx/compose/foundation/MutatorMutex$Mutator;)V +HSPLandroidx/compose/foundation/MutatorMutex;->mutateWith(Ljava/lang/Object;Landroidx/compose/foundation/MutatePriority;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/MutatorMutex;->tryMutateOrCancel(Landroidx/compose/foundation/MutatorMutex$Mutator;)V +Landroidx/compose/foundation/MutatorMutex$Mutator; +HSPLandroidx/compose/foundation/MutatorMutex$Mutator;->(Landroidx/compose/foundation/MutatePriority;Lkotlinx/coroutines/Job;)V +Landroidx/compose/foundation/MutatorMutex$mutateWith$2; +HSPLandroidx/compose/foundation/MutatorMutex$mutateWith$2;->(Landroidx/compose/foundation/MutatePriority;Landroidx/compose/foundation/MutatorMutex;Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/MutatorMutex$mutateWith$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/MutatorMutex$mutateWith$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/MutatorMutex$mutateWith$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/MutatorMutex$mutateWith$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/NoIndication; +HSPLandroidx/compose/foundation/NoIndication;->()V +HSPLandroidx/compose/foundation/NoIndication;->()V +HSPLandroidx/compose/foundation/NoIndication;->rememberUpdatedInstance(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/IndicationInstance; +Landroidx/compose/foundation/NoIndication$NoIndicationInstance; +HSPLandroidx/compose/foundation/NoIndication$NoIndicationInstance;->()V +HSPLandroidx/compose/foundation/NoIndication$NoIndicationInstance;->()V +HSPLandroidx/compose/foundation/NoIndication$NoIndicationInstance;->drawIndication(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V +Landroidx/compose/foundation/OverscrollConfiguration; +HSPLandroidx/compose/foundation/OverscrollConfiguration;->()V +HSPLandroidx/compose/foundation/OverscrollConfiguration;->(JLandroidx/compose/foundation/layout/PaddingValues;)V +HSPLandroidx/compose/foundation/OverscrollConfiguration;->(JLandroidx/compose/foundation/layout/PaddingValues;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/OverscrollConfiguration;->(JLandroidx/compose/foundation/layout/PaddingValues;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/OverscrollConfiguration;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/foundation/OverscrollConfiguration;->getGlowColor-0d7_KjU()J +Landroidx/compose/foundation/OverscrollConfigurationKt; +HSPLandroidx/compose/foundation/OverscrollConfigurationKt;->()V +HSPLandroidx/compose/foundation/OverscrollConfigurationKt;->getLocalOverscrollConfiguration()Landroidx/compose/runtime/ProvidableCompositionLocal; +Landroidx/compose/foundation/OverscrollConfigurationKt$LocalOverscrollConfiguration$1; +HSPLandroidx/compose/foundation/OverscrollConfigurationKt$LocalOverscrollConfiguration$1;->()V +HSPLandroidx/compose/foundation/OverscrollConfigurationKt$LocalOverscrollConfiguration$1;->()V +HSPLandroidx/compose/foundation/OverscrollConfigurationKt$LocalOverscrollConfiguration$1;->invoke()Landroidx/compose/foundation/OverscrollConfiguration; +HSPLandroidx/compose/foundation/OverscrollConfigurationKt$LocalOverscrollConfiguration$1;->invoke()Ljava/lang/Object; +Landroidx/compose/foundation/OverscrollEffect; +Landroidx/compose/foundation/OverscrollKt; +HSPLandroidx/compose/foundation/OverscrollKt;->overscroll(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/OverscrollEffect;)Landroidx/compose/ui/Modifier; +Landroidx/compose/foundation/PlatformMagnifier; +Landroidx/compose/foundation/PlatformMagnifierFactory; +HSPLandroidx/compose/foundation/PlatformMagnifierFactory;->()V +Landroidx/compose/foundation/PlatformMagnifierFactory$Companion; +HSPLandroidx/compose/foundation/PlatformMagnifierFactory$Companion;->()V +HSPLandroidx/compose/foundation/PlatformMagnifierFactory$Companion;->()V +HSPLandroidx/compose/foundation/PlatformMagnifierFactory$Companion;->getForCurrentPlatform()Landroidx/compose/foundation/PlatformMagnifierFactory; +Landroidx/compose/foundation/PlatformMagnifierFactoryApi28Impl$PlatformMagnifierImpl; +HSPLandroidx/compose/foundation/PlatformMagnifierFactoryApi28Impl$PlatformMagnifierImpl;->()V +HSPLandroidx/compose/foundation/PlatformMagnifierFactoryApi28Impl$PlatformMagnifierImpl;->(Landroid/widget/Magnifier;)V +HSPLandroidx/compose/foundation/PlatformMagnifierFactoryApi28Impl$PlatformMagnifierImpl;->dismiss()V +HSPLandroidx/compose/foundation/PlatformMagnifierFactoryApi28Impl$PlatformMagnifierImpl;->getSize-YbymL2g()J +HSPLandroidx/compose/foundation/PlatformMagnifierFactoryApi28Impl$PlatformMagnifierImpl;->updateContent()V +Landroidx/compose/foundation/PlatformMagnifierFactoryApi29Impl; +HSPLandroidx/compose/foundation/PlatformMagnifierFactoryApi29Impl;->()V +HSPLandroidx/compose/foundation/PlatformMagnifierFactoryApi29Impl;->()V +HSPLandroidx/compose/foundation/PlatformMagnifierFactoryApi29Impl;->create(Landroidx/compose/foundation/MagnifierStyle;Landroid/view/View;Landroidx/compose/ui/unit/Density;F)Landroidx/compose/foundation/PlatformMagnifier; +HSPLandroidx/compose/foundation/PlatformMagnifierFactoryApi29Impl;->create(Landroidx/compose/foundation/MagnifierStyle;Landroid/view/View;Landroidx/compose/ui/unit/Density;F)Landroidx/compose/foundation/PlatformMagnifierFactoryApi29Impl$PlatformMagnifierImpl; +HSPLandroidx/compose/foundation/PlatformMagnifierFactoryApi29Impl;->getCanUpdateZoom()Z +Landroidx/compose/foundation/PlatformMagnifierFactoryApi29Impl$PlatformMagnifierImpl; +HSPLandroidx/compose/foundation/PlatformMagnifierFactoryApi29Impl$PlatformMagnifierImpl;->()V +HSPLandroidx/compose/foundation/PlatformMagnifierFactoryApi29Impl$PlatformMagnifierImpl;->(Landroid/widget/Magnifier;)V +Landroidx/compose/foundation/ProgressSemanticsKt; +HSPLandroidx/compose/foundation/ProgressSemanticsKt;->progressSemantics(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; +Landroidx/compose/foundation/ProgressSemanticsKt$progressSemantics$2; +HSPLandroidx/compose/foundation/ProgressSemanticsKt$progressSemantics$2;->()V +HSPLandroidx/compose/foundation/ProgressSemanticsKt$progressSemantics$2;->()V +HSPLandroidx/compose/foundation/ProgressSemanticsKt$progressSemantics$2;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V +HSPLandroidx/compose/foundation/ProgressSemanticsKt$progressSemantics$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/ScrollKt; +HSPLandroidx/compose/foundation/ScrollKt;->rememberScrollState(ILandroidx/compose/runtime/Composer;II)Landroidx/compose/foundation/ScrollState; +HSPLandroidx/compose/foundation/ScrollKt;->scroll(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/ScrollState;ZLandroidx/compose/foundation/gestures/FlingBehavior;ZZ)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/ScrollKt;->verticalScroll$default(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/ScrollState;ZLandroidx/compose/foundation/gestures/FlingBehavior;ZILjava/lang/Object;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/ScrollKt;->verticalScroll(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/ScrollState;ZLandroidx/compose/foundation/gestures/FlingBehavior;Z)Landroidx/compose/ui/Modifier; +Landroidx/compose/foundation/ScrollKt$rememberScrollState$1$1; +HSPLandroidx/compose/foundation/ScrollKt$rememberScrollState$1$1;->(I)V +HSPLandroidx/compose/foundation/ScrollKt$rememberScrollState$1$1;->invoke()Landroidx/compose/foundation/ScrollState; +HSPLandroidx/compose/foundation/ScrollKt$rememberScrollState$1$1;->invoke()Ljava/lang/Object; +Landroidx/compose/foundation/ScrollKt$scroll$2; +HSPLandroidx/compose/foundation/ScrollKt$scroll$2;->(ZZLandroidx/compose/foundation/ScrollState;ZLandroidx/compose/foundation/gestures/FlingBehavior;)V +HSPLandroidx/compose/foundation/ScrollKt$scroll$2;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/ScrollKt$scroll$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/ScrollKt$scroll$2$semantics$1; +HSPLandroidx/compose/foundation/ScrollKt$scroll$2$semantics$1;->(ZZZLandroidx/compose/foundation/ScrollState;Lkotlinx/coroutines/CoroutineScope;)V +HSPLandroidx/compose/foundation/ScrollKt$scroll$2$semantics$1;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V +HSPLandroidx/compose/foundation/ScrollKt$scroll$2$semantics$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/ScrollKt$scroll$2$semantics$1$1; +HSPLandroidx/compose/foundation/ScrollKt$scroll$2$semantics$1$1;->(Lkotlinx/coroutines/CoroutineScope;ZLandroidx/compose/foundation/ScrollState;)V +Landroidx/compose/foundation/ScrollKt$scroll$2$semantics$1$accessibilityScrollState$1; +HSPLandroidx/compose/foundation/ScrollKt$scroll$2$semantics$1$accessibilityScrollState$1;->(Landroidx/compose/foundation/ScrollState;)V +HSPLandroidx/compose/foundation/ScrollKt$scroll$2$semantics$1$accessibilityScrollState$1;->invoke()Ljava/lang/Float; +HSPLandroidx/compose/foundation/ScrollKt$scroll$2$semantics$1$accessibilityScrollState$1;->invoke()Ljava/lang/Object; +Landroidx/compose/foundation/ScrollKt$scroll$2$semantics$1$accessibilityScrollState$2; +HSPLandroidx/compose/foundation/ScrollKt$scroll$2$semantics$1$accessibilityScrollState$2;->(Landroidx/compose/foundation/ScrollState;)V +HSPLandroidx/compose/foundation/ScrollKt$scroll$2$semantics$1$accessibilityScrollState$2;->invoke()Ljava/lang/Float; +HSPLandroidx/compose/foundation/ScrollKt$scroll$2$semantics$1$accessibilityScrollState$2;->invoke()Ljava/lang/Object; +Landroidx/compose/foundation/ScrollState; +HSPLandroidx/compose/foundation/ScrollState;->()V +HSPLandroidx/compose/foundation/ScrollState;->(I)V +HSPLandroidx/compose/foundation/ScrollState;->access$getSaver$cp()Landroidx/compose/runtime/saveable/Saver; +HSPLandroidx/compose/foundation/ScrollState;->getInternalInteractionSource$foundation_release()Landroidx/compose/foundation/interaction/MutableInteractionSource; +HSPLandroidx/compose/foundation/ScrollState;->getMaxValue()I +HSPLandroidx/compose/foundation/ScrollState;->getValue()I +HSPLandroidx/compose/foundation/ScrollState;->isScrollInProgress()Z +HSPLandroidx/compose/foundation/ScrollState;->setMaxValue$foundation_release(I)V +HSPLandroidx/compose/foundation/ScrollState;->setViewportSize$foundation_release(I)V +Landroidx/compose/foundation/ScrollState$Companion; +HSPLandroidx/compose/foundation/ScrollState$Companion;->()V +HSPLandroidx/compose/foundation/ScrollState$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/ScrollState$Companion;->getSaver()Landroidx/compose/runtime/saveable/Saver; +Landroidx/compose/foundation/ScrollState$Companion$Saver$1; +HSPLandroidx/compose/foundation/ScrollState$Companion$Saver$1;->()V +HSPLandroidx/compose/foundation/ScrollState$Companion$Saver$1;->()V +HSPLandroidx/compose/foundation/ScrollState$Companion$Saver$1;->invoke(Landroidx/compose/runtime/saveable/SaverScope;Landroidx/compose/foundation/ScrollState;)Ljava/lang/Integer; +HSPLandroidx/compose/foundation/ScrollState$Companion$Saver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/ScrollState$Companion$Saver$2; +HSPLandroidx/compose/foundation/ScrollState$Companion$Saver$2;->()V +HSPLandroidx/compose/foundation/ScrollState$Companion$Saver$2;->()V +Landroidx/compose/foundation/ScrollState$canScrollBackward$2; +HSPLandroidx/compose/foundation/ScrollState$canScrollBackward$2;->(Landroidx/compose/foundation/ScrollState;)V +Landroidx/compose/foundation/ScrollState$canScrollForward$2; +HSPLandroidx/compose/foundation/ScrollState$canScrollForward$2;->(Landroidx/compose/foundation/ScrollState;)V +Landroidx/compose/foundation/ScrollState$scrollableState$1; +HSPLandroidx/compose/foundation/ScrollState$scrollableState$1;->(Landroidx/compose/foundation/ScrollState;)V +Landroidx/compose/foundation/ScrollingLayoutElement; +HSPLandroidx/compose/foundation/ScrollingLayoutElement;->(Landroidx/compose/foundation/ScrollState;ZZ)V +HSPLandroidx/compose/foundation/ScrollingLayoutElement;->create()Landroidx/compose/foundation/ScrollingLayoutNode; +HSPLandroidx/compose/foundation/ScrollingLayoutElement;->create()Landroidx/compose/ui/Modifier$Node; +Landroidx/compose/foundation/ScrollingLayoutNode; +HSPLandroidx/compose/foundation/ScrollingLayoutNode;->(Landroidx/compose/foundation/ScrollState;ZZ)V +HSPLandroidx/compose/foundation/ScrollingLayoutNode;->getScrollerState()Landroidx/compose/foundation/ScrollState; +HSPLandroidx/compose/foundation/ScrollingLayoutNode;->isReversed()Z +HSPLandroidx/compose/foundation/ScrollingLayoutNode;->isVertical()Z +HSPLandroidx/compose/foundation/ScrollingLayoutNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; +Landroidx/compose/foundation/ScrollingLayoutNode$measure$1; +HSPLandroidx/compose/foundation/ScrollingLayoutNode$measure$1;->(Landroidx/compose/foundation/ScrollingLayoutNode;ILandroidx/compose/ui/layout/Placeable;)V +HSPLandroidx/compose/foundation/ScrollingLayoutNode$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/foundation/ScrollingLayoutNode$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/gestures/AndroidConfig; +HSPLandroidx/compose/foundation/gestures/AndroidConfig;->()V +HSPLandroidx/compose/foundation/gestures/AndroidConfig;->()V +Landroidx/compose/foundation/gestures/AndroidScrollable_androidKt; +HSPLandroidx/compose/foundation/gestures/AndroidScrollable_androidKt;->platformScrollConfig(Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/gestures/ScrollConfig; +Landroidx/compose/foundation/gestures/BringIntoViewRequestPriorityQueue; +HSPLandroidx/compose/foundation/gestures/BringIntoViewRequestPriorityQueue;->()V +Landroidx/compose/foundation/gestures/ContentInViewModifier; +HSPLandroidx/compose/foundation/gestures/ContentInViewModifier;->(Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/gestures/ScrollableState;Z)V +HSPLandroidx/compose/foundation/gestures/ContentInViewModifier;->access$setFocusedChild$p(Landroidx/compose/foundation/gestures/ContentInViewModifier;Landroidx/compose/ui/layout/LayoutCoordinates;)V +HSPLandroidx/compose/foundation/gestures/ContentInViewModifier;->bringChildIntoView(Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/gestures/ContentInViewModifier;->calculateRectForParent(Landroidx/compose/ui/geometry/Rect;)Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/foundation/gestures/ContentInViewModifier;->compareTo-TemP2vQ(JJ)I +HSPLandroidx/compose/foundation/gestures/ContentInViewModifier;->computeDestination-O0kMr_c(Landroidx/compose/ui/geometry/Rect;J)Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/foundation/gestures/ContentInViewModifier;->getFocusedChildBounds()Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/foundation/gestures/ContentInViewModifier;->getModifier()Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/gestures/ContentInViewModifier;->isMaxVisible-O0kMr_c$default(Landroidx/compose/foundation/gestures/ContentInViewModifier;Landroidx/compose/ui/geometry/Rect;JILjava/lang/Object;)Z +HSPLandroidx/compose/foundation/gestures/ContentInViewModifier;->isMaxVisible-O0kMr_c(Landroidx/compose/ui/geometry/Rect;J)Z +HSPLandroidx/compose/foundation/gestures/ContentInViewModifier;->onPlaced(Landroidx/compose/ui/layout/LayoutCoordinates;)V +HSPLandroidx/compose/foundation/gestures/ContentInViewModifier;->onRemeasured-ozmzZPI(J)V +HSPLandroidx/compose/foundation/gestures/ContentInViewModifier;->relocationDistance(FFF)F +HSPLandroidx/compose/foundation/gestures/ContentInViewModifier;->relocationOffset-BMxPBkI(Landroidx/compose/ui/geometry/Rect;J)J +Landroidx/compose/foundation/gestures/ContentInViewModifier$Request; +Landroidx/compose/foundation/gestures/ContentInViewModifier$WhenMappings; +HSPLandroidx/compose/foundation/gestures/ContentInViewModifier$WhenMappings;->()V +Landroidx/compose/foundation/gestures/ContentInViewModifier$modifier$1; +HSPLandroidx/compose/foundation/gestures/ContentInViewModifier$modifier$1;->(Landroidx/compose/foundation/gestures/ContentInViewModifier;)V +HSPLandroidx/compose/foundation/gestures/ContentInViewModifier$modifier$1;->invoke(Landroidx/compose/ui/layout/LayoutCoordinates;)V +HSPLandroidx/compose/foundation/gestures/ContentInViewModifier$modifier$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/gestures/DefaultDraggableState; +HSPLandroidx/compose/foundation/gestures/DefaultDraggableState;->(Lkotlin/jvm/functions/Function1;)V +Landroidx/compose/foundation/gestures/DefaultDraggableState$dragScope$1; +HSPLandroidx/compose/foundation/gestures/DefaultDraggableState$dragScope$1;->(Landroidx/compose/foundation/gestures/DefaultDraggableState;)V +Landroidx/compose/foundation/gestures/DefaultFlingBehavior; +HSPLandroidx/compose/foundation/gestures/DefaultFlingBehavior;->(Landroidx/compose/animation/core/DecayAnimationSpec;Landroidx/compose/ui/MotionDurationScale;)V +HSPLandroidx/compose/foundation/gestures/DefaultFlingBehavior;->(Landroidx/compose/animation/core/DecayAnimationSpec;Landroidx/compose/ui/MotionDurationScale;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/foundation/gestures/DefaultScrollableState; +HSPLandroidx/compose/foundation/gestures/DefaultScrollableState;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/foundation/gestures/DefaultScrollableState;->access$getScrollMutex$p(Landroidx/compose/foundation/gestures/DefaultScrollableState;)Landroidx/compose/foundation/MutatorMutex; +HSPLandroidx/compose/foundation/gestures/DefaultScrollableState;->access$getScrollScope$p(Landroidx/compose/foundation/gestures/DefaultScrollableState;)Landroidx/compose/foundation/gestures/ScrollScope; +HSPLandroidx/compose/foundation/gestures/DefaultScrollableState;->access$isScrollingState$p(Landroidx/compose/foundation/gestures/DefaultScrollableState;)Landroidx/compose/runtime/MutableState; +HSPLandroidx/compose/foundation/gestures/DefaultScrollableState;->isScrollInProgress()Z +HSPLandroidx/compose/foundation/gestures/DefaultScrollableState;->scroll(Landroidx/compose/foundation/MutatePriority;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2; +HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2;->(Landroidx/compose/foundation/gestures/DefaultScrollableState;Landroidx/compose/foundation/MutatePriority;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2$1; +HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2$1;->(Landroidx/compose/foundation/gestures/DefaultScrollableState;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2$1;->invoke(Landroidx/compose/foundation/gestures/ScrollScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scroll$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/gestures/DefaultScrollableState$scrollScope$1; +HSPLandroidx/compose/foundation/gestures/DefaultScrollableState$scrollScope$1;->(Landroidx/compose/foundation/gestures/DefaultScrollableState;)V +Landroidx/compose/foundation/gestures/DragGestureDetectorKt; +HSPLandroidx/compose/foundation/gestures/DragGestureDetectorKt;->()V +HSPLandroidx/compose/foundation/gestures/DragGestureDetectorKt;->access$isPointerUp-DmW0f2w(Landroidx/compose/ui/input/pointer/PointerEvent;J)Z +HSPLandroidx/compose/foundation/gestures/DragGestureDetectorKt;->isPointerUp-DmW0f2w(Landroidx/compose/ui/input/pointer/PointerEvent;J)Z +HSPLandroidx/compose/foundation/gestures/DragGestureDetectorKt;->pointerSlop-E8SPZFQ(Landroidx/compose/ui/platform/ViewConfiguration;I)F +HSPLandroidx/compose/foundation/gestures/DragGestureDetectorKt;->toPointerDirectionConfig(Landroidx/compose/foundation/gestures/Orientation;)Landroidx/compose/foundation/gestures/PointerDirectionConfig; +Landroidx/compose/foundation/gestures/DragGestureDetectorKt$HorizontalPointerDirectionConfig$1; +HSPLandroidx/compose/foundation/gestures/DragGestureDetectorKt$HorizontalPointerDirectionConfig$1;->()V +Landroidx/compose/foundation/gestures/DragGestureDetectorKt$VerticalPointerDirectionConfig$1; +HSPLandroidx/compose/foundation/gestures/DragGestureDetectorKt$VerticalPointerDirectionConfig$1;->()V +Landroidx/compose/foundation/gestures/DragScope; +Landroidx/compose/foundation/gestures/DraggableElement; +HSPLandroidx/compose/foundation/gestures/DraggableElement;->(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 +HSPLandroidx/compose/foundation/gestures/DraggableElement;->create()Landroidx/compose/foundation/gestures/DraggableNode; +HSPLandroidx/compose/foundation/gestures/DraggableElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/foundation/gestures/DraggableElement;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/foundation/gestures/DraggableElement;->update(Landroidx/compose/foundation/gestures/DraggableNode;)V +HSPLandroidx/compose/foundation/gestures/DraggableElement;->update(Landroidx/compose/ui/Modifier$Node;)V +Landroidx/compose/foundation/gestures/DraggableKt; +HSPLandroidx/compose/foundation/gestures/DraggableKt;->DraggableState(Lkotlin/jvm/functions/Function1;)Landroidx/compose/foundation/gestures/DraggableState; +HSPLandroidx/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/lang/Object; +HSPLandroidx/compose/foundation/gestures/DraggableKt;->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/lang/Object; +HSPLandroidx/compose/foundation/gestures/DraggableKt;->draggable$default(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/gestures/DraggableState;Landroidx/compose/foundation/gestures/Orientation;ZLandroidx/compose/foundation/interaction/MutableInteractionSource;ZLkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;ZILjava/lang/Object;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/gestures/DraggableKt;->draggable(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/gestures/DraggableState;Landroidx/compose/foundation/gestures/Orientation;ZLandroidx/compose/foundation/interaction/MutableInteractionSource;ZLkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Z)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/gestures/DraggableKt;->rememberDraggableState(Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/gestures/DraggableState; +Landroidx/compose/foundation/gestures/DraggableKt$awaitDownAndSlop$1; +HSPLandroidx/compose/foundation/gestures/DraggableKt$awaitDownAndSlop$1;->(Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/gestures/DraggableKt$awaitDownAndSlop$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/gestures/DraggableKt$awaitDownAndSlop$postPointerSlop$1; +HSPLandroidx/compose/foundation/gestures/DraggableKt$awaitDownAndSlop$postPointerSlop$1;->(Landroidx/compose/ui/input/pointer/util/VelocityTracker;Lkotlin/jvm/internal/Ref$LongRef;)V +Landroidx/compose/foundation/gestures/DraggableKt$draggable$3; +HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$3;->()V +HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$3;->()V +Landroidx/compose/foundation/gestures/DraggableKt$draggable$4; +HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$4;->(Z)V +Landroidx/compose/foundation/gestures/DraggableKt$draggable$5; +HSPLandroidx/compose/foundation/gestures/DraggableKt$draggable$5;->(Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/gestures/Orientation;Lkotlin/coroutines/Continuation;)V +Landroidx/compose/foundation/gestures/DraggableKt$rememberDraggableState$1$1; +HSPLandroidx/compose/foundation/gestures/DraggableKt$rememberDraggableState$1$1;->(Landroidx/compose/runtime/State;)V +Landroidx/compose/foundation/gestures/DraggableNode; +HSPLandroidx/compose/foundation/gestures/DraggableNode;->(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 +HSPLandroidx/compose/foundation/gestures/DraggableNode;->access$getCanDrag$p(Landroidx/compose/foundation/gestures/DraggableNode;)Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/foundation/gestures/DraggableNode;->access$getChannel$p(Landroidx/compose/foundation/gestures/DraggableNode;)Lkotlinx/coroutines/channels/Channel; +HSPLandroidx/compose/foundation/gestures/DraggableNode;->access$getEnabled$p(Landroidx/compose/foundation/gestures/DraggableNode;)Z +HSPLandroidx/compose/foundation/gestures/DraggableNode;->access$getOrientation$p(Landroidx/compose/foundation/gestures/DraggableNode;)Landroidx/compose/foundation/gestures/Orientation; +HSPLandroidx/compose/foundation/gestures/DraggableNode;->access$getStartDragImmediately$p(Landroidx/compose/foundation/gestures/DraggableNode;)Lkotlin/jvm/functions/Function0; +HSPLandroidx/compose/foundation/gestures/DraggableNode;->access$getVelocityTracker$p(Landroidx/compose/foundation/gestures/DraggableNode;)Landroidx/compose/ui/input/pointer/util/VelocityTracker; +HSPLandroidx/compose/foundation/gestures/DraggableNode;->access$get_canDrag$p(Landroidx/compose/foundation/gestures/DraggableNode;)Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/foundation/gestures/DraggableNode;->access$get_startDragImmediately$p(Landroidx/compose/foundation/gestures/DraggableNode;)Lkotlin/jvm/functions/Function0; +HSPLandroidx/compose/foundation/gestures/DraggableNode;->disposeInteractionSource()V +HSPLandroidx/compose/foundation/gestures/DraggableNode;->onDetach()V +HSPLandroidx/compose/foundation/gestures/DraggableNode;->onPointerEvent-H0pRuoY(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEventPass;J)V +HSPLandroidx/compose/foundation/gestures/DraggableNode;->update(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 +Landroidx/compose/foundation/gestures/DraggableNode$_canDrag$1; +HSPLandroidx/compose/foundation/gestures/DraggableNode$_canDrag$1;->(Landroidx/compose/foundation/gestures/DraggableNode;)V +HSPLandroidx/compose/foundation/gestures/DraggableNode$_canDrag$1;->invoke(Landroidx/compose/ui/input/pointer/PointerInputChange;)Ljava/lang/Boolean; +HSPLandroidx/compose/foundation/gestures/DraggableNode$_canDrag$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/gestures/DraggableNode$_startDragImmediately$1; +HSPLandroidx/compose/foundation/gestures/DraggableNode$_startDragImmediately$1;->(Landroidx/compose/foundation/gestures/DraggableNode;)V +HSPLandroidx/compose/foundation/gestures/DraggableNode$_startDragImmediately$1;->invoke()Ljava/lang/Boolean; +HSPLandroidx/compose/foundation/gestures/DraggableNode$_startDragImmediately$1;->invoke()Ljava/lang/Object; +Landroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1; +HSPLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1;->(Landroidx/compose/foundation/gestures/DraggableNode;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1;->invoke(Landroidx/compose/ui/input/pointer/PointerInputScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1$1; +HSPLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1$1;->(Landroidx/compose/ui/input/pointer/PointerInputScope;Landroidx/compose/foundation/gestures/DraggableNode;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1$1$1; +HSPLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1$1$1;->(Landroidx/compose/foundation/gestures/DraggableNode;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1$1$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1$1$2; +HSPLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1$1$2;->(Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/foundation/gestures/DraggableNode;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1$1$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/gestures/DraggableNode$pointerInputNode$1$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/gestures/DraggableState; +Landroidx/compose/foundation/gestures/FlingBehavior; +Landroidx/compose/foundation/gestures/ForEachGestureKt; +HSPLandroidx/compose/foundation/gestures/ForEachGestureKt;->allPointersUp(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;)Z +HSPLandroidx/compose/foundation/gestures/ForEachGestureKt;->awaitAllPointersUp(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/gestures/ForEachGestureKt;->awaitEachGesture(Landroidx/compose/ui/input/pointer/PointerInputScope;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/compose/foundation/gestures/ForEachGestureKt$awaitAllPointersUp$3; +HSPLandroidx/compose/foundation/gestures/ForEachGestureKt$awaitAllPointersUp$3;->(Lkotlin/coroutines/Continuation;)V +Landroidx/compose/foundation/gestures/ForEachGestureKt$awaitEachGesture$2; +HSPLandroidx/compose/foundation/gestures/ForEachGestureKt$awaitEachGesture$2;->(Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/gestures/ForEachGestureKt$awaitEachGesture$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/gestures/ForEachGestureKt$awaitEachGesture$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/gestures/ModifierLocalScrollableContainerProvider; +HSPLandroidx/compose/foundation/gestures/ModifierLocalScrollableContainerProvider;->()V +HSPLandroidx/compose/foundation/gestures/ModifierLocalScrollableContainerProvider;->()V +HSPLandroidx/compose/foundation/gestures/ModifierLocalScrollableContainerProvider;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal; +HSPLandroidx/compose/foundation/gestures/ModifierLocalScrollableContainerProvider;->getValue()Ljava/lang/Boolean; +HSPLandroidx/compose/foundation/gestures/ModifierLocalScrollableContainerProvider;->getValue()Ljava/lang/Object; +Landroidx/compose/foundation/gestures/MouseWheelScrollElement; +HSPLandroidx/compose/foundation/gestures/MouseWheelScrollElement;->(Landroidx/compose/runtime/State;Landroidx/compose/foundation/gestures/ScrollConfig;)V +HSPLandroidx/compose/foundation/gestures/MouseWheelScrollElement;->create()Landroidx/compose/foundation/gestures/MouseWheelScrollNode; +HSPLandroidx/compose/foundation/gestures/MouseWheelScrollElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/foundation/gestures/MouseWheelScrollElement;->equals(Ljava/lang/Object;)Z +Landroidx/compose/foundation/gestures/MouseWheelScrollNode; +HSPLandroidx/compose/foundation/gestures/MouseWheelScrollNode;->(Landroidx/compose/runtime/State;Landroidx/compose/foundation/gestures/ScrollConfig;)V +HSPLandroidx/compose/foundation/gestures/MouseWheelScrollNode;->onPointerEvent-H0pRuoY(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEventPass;J)V +Landroidx/compose/foundation/gestures/MouseWheelScrollNode$pointerInputNode$1; +HSPLandroidx/compose/foundation/gestures/MouseWheelScrollNode$pointerInputNode$1;->(Landroidx/compose/foundation/gestures/MouseWheelScrollNode;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/gestures/MouseWheelScrollNode$pointerInputNode$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/gestures/MouseWheelScrollNode$pointerInputNode$1;->invoke(Landroidx/compose/ui/input/pointer/PointerInputScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/gestures/MouseWheelScrollNode$pointerInputNode$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/gestures/MouseWheelScrollNode$pointerInputNode$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/gestures/MouseWheelScrollNode$pointerInputNode$1$1; +HSPLandroidx/compose/foundation/gestures/MouseWheelScrollNode$pointerInputNode$1$1;->(Landroidx/compose/foundation/gestures/MouseWheelScrollNode;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/gestures/MouseWheelScrollNode$pointerInputNode$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/gestures/MouseWheelScrollNode$pointerInputNode$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/gestures/Orientation; +HSPLandroidx/compose/foundation/gestures/Orientation;->$values()[Landroidx/compose/foundation/gestures/Orientation; +HSPLandroidx/compose/foundation/gestures/Orientation;->()V +HSPLandroidx/compose/foundation/gestures/Orientation;->(Ljava/lang/String;I)V +HSPLandroidx/compose/foundation/gestures/Orientation;->values()[Landroidx/compose/foundation/gestures/Orientation; +Landroidx/compose/foundation/gestures/PointerDirectionConfig; +Landroidx/compose/foundation/gestures/PressGestureScope; +Landroidx/compose/foundation/gestures/PressGestureScopeImpl; +HSPLandroidx/compose/foundation/gestures/PressGestureScopeImpl;->(Landroidx/compose/ui/unit/Density;)V +HSPLandroidx/compose/foundation/gestures/PressGestureScopeImpl;->release()V +HSPLandroidx/compose/foundation/gestures/PressGestureScopeImpl;->reset(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/gestures/PressGestureScopeImpl;->tryAwaitRelease(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/compose/foundation/gestures/PressGestureScopeImpl$reset$1; +HSPLandroidx/compose/foundation/gestures/PressGestureScopeImpl$reset$1;->(Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/gestures/PressGestureScopeImpl$reset$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/gestures/PressGestureScopeImpl$tryAwaitRelease$1; +HSPLandroidx/compose/foundation/gestures/PressGestureScopeImpl$tryAwaitRelease$1;->(Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/gestures/PressGestureScopeImpl$tryAwaitRelease$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/gestures/ScrollConfig; +Landroidx/compose/foundation/gestures/ScrollDraggableState; +HSPLandroidx/compose/foundation/gestures/ScrollDraggableState;->(Landroidx/compose/runtime/State;)V +Landroidx/compose/foundation/gestures/ScrollScope; +Landroidx/compose/foundation/gestures/ScrollableDefaults; +HSPLandroidx/compose/foundation/gestures/ScrollableDefaults;->()V +HSPLandroidx/compose/foundation/gestures/ScrollableDefaults;->()V +HSPLandroidx/compose/foundation/gestures/ScrollableDefaults;->flingBehavior(Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/gestures/FlingBehavior; +HSPLandroidx/compose/foundation/gestures/ScrollableDefaults;->overscrollEffect(Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/OverscrollEffect; +HSPLandroidx/compose/foundation/gestures/ScrollableDefaults;->reverseDirection(Landroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/foundation/gestures/Orientation;Z)Z +Landroidx/compose/foundation/gestures/ScrollableKt; +HSPLandroidx/compose/foundation/gestures/ScrollableKt;->()V +HSPLandroidx/compose/foundation/gestures/ScrollableKt;->access$awaitScrollEvent(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/gestures/ScrollableKt;->access$getNoOpScrollScope$p()Landroidx/compose/foundation/gestures/ScrollScope; +HSPLandroidx/compose/foundation/gestures/ScrollableKt;->access$pointerScrollable(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/gestures/Orientation;ZLandroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/foundation/OverscrollEffect;ZLandroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/gestures/ScrollableKt;->access$scrollableNestedScrollConnection(Landroidx/compose/runtime/State;Z)Landroidx/compose/ui/input/nestedscroll/NestedScrollConnection; +HSPLandroidx/compose/foundation/gestures/ScrollableKt;->awaitScrollEvent(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/gestures/ScrollableKt;->getDefaultScrollMotionDurationScale()Landroidx/compose/ui/MotionDurationScale; +HSPLandroidx/compose/foundation/gestures/ScrollableKt;->getModifierLocalScrollableContainer()Landroidx/compose/ui/modifier/ProvidableModifierLocal; +HSPLandroidx/compose/foundation/gestures/ScrollableKt;->pointerScrollable(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/gestures/Orientation;ZLandroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/foundation/OverscrollEffect;ZLandroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/gestures/ScrollableKt;->scrollable$default(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/Orientation;ZZLandroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/foundation/interaction/MutableInteractionSource;ILjava/lang/Object;)Landroidx/compose/ui/Modifier; +HSPLandroidx/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/ui/Modifier; +HSPLandroidx/compose/foundation/gestures/ScrollableKt;->scrollable(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/Orientation;ZZLandroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/foundation/interaction/MutableInteractionSource;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/gestures/ScrollableKt;->scrollableNestedScrollConnection(Landroidx/compose/runtime/State;Z)Landroidx/compose/ui/input/nestedscroll/NestedScrollConnection; +Landroidx/compose/foundation/gestures/ScrollableKt$DefaultScrollMotionDurationScale$1; +HSPLandroidx/compose/foundation/gestures/ScrollableKt$DefaultScrollMotionDurationScale$1;->()V +Landroidx/compose/foundation/gestures/ScrollableKt$ModifierLocalScrollableContainer$1; +HSPLandroidx/compose/foundation/gestures/ScrollableKt$ModifierLocalScrollableContainer$1;->()V +HSPLandroidx/compose/foundation/gestures/ScrollableKt$ModifierLocalScrollableContainer$1;->()V +Landroidx/compose/foundation/gestures/ScrollableKt$NoOpOnDragStarted$1; +HSPLandroidx/compose/foundation/gestures/ScrollableKt$NoOpOnDragStarted$1;->(Lkotlin/coroutines/Continuation;)V +Landroidx/compose/foundation/gestures/ScrollableKt$NoOpScrollScope$1; +HSPLandroidx/compose/foundation/gestures/ScrollableKt$NoOpScrollScope$1;->()V +Landroidx/compose/foundation/gestures/ScrollableKt$awaitScrollEvent$1; +HSPLandroidx/compose/foundation/gestures/ScrollableKt$awaitScrollEvent$1;->(Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/gestures/ScrollableKt$awaitScrollEvent$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$1; +HSPLandroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$1;->()V +HSPLandroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$1;->()V +HSPLandroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$1;->invoke(Landroidx/compose/ui/input/pointer/PointerInputChange;)Ljava/lang/Boolean; +HSPLandroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$2$1; +HSPLandroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$2$1;->(Landroidx/compose/runtime/State;)V +HSPLandroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$2$1;->invoke()Ljava/lang/Boolean; +HSPLandroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$2$1;->invoke()Ljava/lang/Object; +Landroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$3$1; +HSPLandroidx/compose/foundation/gestures/ScrollableKt$pointerScrollable$3$1;->(Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V +Landroidx/compose/foundation/gestures/ScrollableKt$scrollable$2; +HSPLandroidx/compose/foundation/gestures/ScrollableKt$scrollable$2;->(Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/foundation/gestures/ScrollableState;ZLandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/foundation/OverscrollEffect;Z)V +HSPLandroidx/compose/foundation/gestures/ScrollableKt$scrollable$2;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/gestures/ScrollableKt$scrollable$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/gestures/ScrollableKt$scrollableNestedScrollConnection$1; +HSPLandroidx/compose/foundation/gestures/ScrollableKt$scrollableNestedScrollConnection$1;->(Landroidx/compose/runtime/State;Z)V +Landroidx/compose/foundation/gestures/ScrollableState; +HSPLandroidx/compose/foundation/gestures/ScrollableState;->scroll$default(Landroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/MutatePriority;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/gestures/ScrollableStateKt; +HSPLandroidx/compose/foundation/gestures/ScrollableStateKt;->ScrollableState(Lkotlin/jvm/functions/Function1;)Landroidx/compose/foundation/gestures/ScrollableState; +HSPLandroidx/compose/foundation/gestures/ScrollableStateKt;->rememberScrollableState(Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/gestures/ScrollableState; +Landroidx/compose/foundation/gestures/ScrollableStateKt$rememberScrollableState$1$1; +HSPLandroidx/compose/foundation/gestures/ScrollableStateKt$rememberScrollableState$1$1;->(Landroidx/compose/runtime/State;)V +Landroidx/compose/foundation/gestures/ScrollingLogic; +HSPLandroidx/compose/foundation/gestures/ScrollingLogic;->(Landroidx/compose/foundation/gestures/Orientation;ZLandroidx/compose/runtime/State;Landroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/gestures/FlingBehavior;Landroidx/compose/foundation/OverscrollEffect;)V +HSPLandroidx/compose/foundation/gestures/ScrollingLogic;->shouldScrollImmediately()Z +Landroidx/compose/foundation/gestures/TapGestureDetectorKt; +HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt;->()V +HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt;->access$getNoPressGesture$p()Lkotlin/jvm/functions/Function3; +HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt;->awaitFirstDown$default(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;ZLandroidx/compose/ui/input/pointer/PointerEventPass;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt;->awaitFirstDown(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;ZLandroidx/compose/ui/input/pointer/PointerEventPass;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/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; +HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt;->waitForUpOrCancellation$default(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Landroidx/compose/ui/input/pointer/PointerEventPass;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt;->waitForUpOrCancellation(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Landroidx/compose/ui/input/pointer/PointerEventPass;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/compose/foundation/gestures/TapGestureDetectorKt$NoPressGesture$1; +HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$NoPressGesture$1;->(Lkotlin/coroutines/Continuation;)V +Landroidx/compose/foundation/gestures/TapGestureDetectorKt$awaitFirstDown$2; +HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$awaitFirstDown$2;->(Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$awaitFirstDown$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2; +HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2;->(Landroidx/compose/ui/input/pointer/PointerInputScope;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function1;Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1; +HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1;->(Lkotlinx/coroutines/CoroutineScope;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function1;Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1;->invoke(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$1; +HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$1;->(Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$2; +HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$2;->(Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Landroidx/compose/ui/input/pointer/PointerInputChange;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$4; +HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$4;->(Landroidx/compose/foundation/gestures/PressGestureScopeImpl;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$4;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$detectTapAndPress$2$1$4;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/gestures/TapGestureDetectorKt$waitForUpOrCancellation$2; +HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$waitForUpOrCancellation$2;->(Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/gestures/TapGestureDetectorKt$waitForUpOrCancellation$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/gestures/UpdatableAnimationState; +HSPLandroidx/compose/foundation/gestures/UpdatableAnimationState;->()V +HSPLandroidx/compose/foundation/gestures/UpdatableAnimationState;->()V +Landroidx/compose/foundation/gestures/UpdatableAnimationState$Companion; +HSPLandroidx/compose/foundation/gestures/UpdatableAnimationState$Companion;->()V +HSPLandroidx/compose/foundation/gestures/UpdatableAnimationState$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/foundation/interaction/FocusInteraction; +Landroidx/compose/foundation/interaction/FocusInteraction$Focus; +HSPLandroidx/compose/foundation/interaction/FocusInteraction$Focus;->()V +HSPLandroidx/compose/foundation/interaction/FocusInteraction$Focus;->()V +Landroidx/compose/foundation/interaction/FocusInteraction$Unfocus; +HSPLandroidx/compose/foundation/interaction/FocusInteraction$Unfocus;->()V +HSPLandroidx/compose/foundation/interaction/FocusInteraction$Unfocus;->(Landroidx/compose/foundation/interaction/FocusInteraction$Focus;)V +Landroidx/compose/foundation/interaction/FocusInteractionKt; +HSPLandroidx/compose/foundation/interaction/FocusInteractionKt;->collectIsFocusedAsState(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State; +Landroidx/compose/foundation/interaction/FocusInteractionKt$collectIsFocusedAsState$1$1; +HSPLandroidx/compose/foundation/interaction/FocusInteractionKt$collectIsFocusedAsState$1$1;->(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/interaction/FocusInteractionKt$collectIsFocusedAsState$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/interaction/FocusInteractionKt$collectIsFocusedAsState$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/interaction/FocusInteractionKt$collectIsFocusedAsState$1$1$1; +HSPLandroidx/compose/foundation/interaction/FocusInteractionKt$collectIsFocusedAsState$1$1$1;->(Ljava/util/List;Landroidx/compose/runtime/MutableState;)V +HSPLandroidx/compose/foundation/interaction/FocusInteractionKt$collectIsFocusedAsState$1$1$1;->emit(Landroidx/compose/foundation/interaction/Interaction;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/interaction/FocusInteractionKt$collectIsFocusedAsState$1$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/compose/foundation/interaction/HoverInteraction; +Landroidx/compose/foundation/interaction/HoverInteraction$Enter; +Landroidx/compose/foundation/interaction/HoverInteraction$Exit; +Landroidx/compose/foundation/interaction/Interaction; +Landroidx/compose/foundation/interaction/InteractionSource; +Landroidx/compose/foundation/interaction/InteractionSourceKt; +HSPLandroidx/compose/foundation/interaction/InteractionSourceKt;->MutableInteractionSource()Landroidx/compose/foundation/interaction/MutableInteractionSource; +Landroidx/compose/foundation/interaction/MutableInteractionSource; +Landroidx/compose/foundation/interaction/MutableInteractionSourceImpl; +HSPLandroidx/compose/foundation/interaction/MutableInteractionSourceImpl;->()V +HSPLandroidx/compose/foundation/interaction/MutableInteractionSourceImpl;->emit(Landroidx/compose/foundation/interaction/Interaction;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/interaction/MutableInteractionSourceImpl;->getInteractions()Lkotlinx/coroutines/flow/Flow; +HSPLandroidx/compose/foundation/interaction/MutableInteractionSourceImpl;->getInteractions()Lkotlinx/coroutines/flow/MutableSharedFlow; +HSPLandroidx/compose/foundation/interaction/MutableInteractionSourceImpl;->tryEmit(Landroidx/compose/foundation/interaction/Interaction;)Z +Landroidx/compose/foundation/interaction/PressInteraction; +Landroidx/compose/foundation/interaction/PressInteraction$Press; +HSPLandroidx/compose/foundation/interaction/PressInteraction$Press;->()V +HSPLandroidx/compose/foundation/interaction/PressInteraction$Press;->(J)V +HSPLandroidx/compose/foundation/interaction/PressInteraction$Press;->(JLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/interaction/PressInteraction$Press;->getPressPosition-F1C5BW0()J +Landroidx/compose/foundation/interaction/PressInteraction$Release; +HSPLandroidx/compose/foundation/interaction/PressInteraction$Release;->()V +HSPLandroidx/compose/foundation/interaction/PressInteraction$Release;->(Landroidx/compose/foundation/interaction/PressInteraction$Press;)V +HSPLandroidx/compose/foundation/interaction/PressInteraction$Release;->getPress()Landroidx/compose/foundation/interaction/PressInteraction$Press; +Landroidx/compose/foundation/layout/AddedInsets; +HSPLandroidx/compose/foundation/layout/AddedInsets;->(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/foundation/layout/WindowInsets;)V +HSPLandroidx/compose/foundation/layout/AddedInsets;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/foundation/layout/AddedInsets;->getBottom(Landroidx/compose/ui/unit/Density;)I +HSPLandroidx/compose/foundation/layout/AddedInsets;->getLeft(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I +HSPLandroidx/compose/foundation/layout/AddedInsets;->getRight(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I +HSPLandroidx/compose/foundation/layout/AddedInsets;->getTop(Landroidx/compose/ui/unit/Density;)I +Landroidx/compose/foundation/layout/AndroidWindowInsets; +HSPLandroidx/compose/foundation/layout/AndroidWindowInsets;->(ILjava/lang/String;)V +HSPLandroidx/compose/foundation/layout/AndroidWindowInsets;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/foundation/layout/AndroidWindowInsets;->getBottom(Landroidx/compose/ui/unit/Density;)I +HSPLandroidx/compose/foundation/layout/AndroidWindowInsets;->getInsets$foundation_layout_release()Landroidx/core/graphics/Insets; +HSPLandroidx/compose/foundation/layout/AndroidWindowInsets;->getLeft(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I +HSPLandroidx/compose/foundation/layout/AndroidWindowInsets;->getRight(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I +HSPLandroidx/compose/foundation/layout/AndroidWindowInsets;->getTop(Landroidx/compose/ui/unit/Density;)I +HSPLandroidx/compose/foundation/layout/AndroidWindowInsets;->setInsets$foundation_layout_release(Landroidx/core/graphics/Insets;)V +HSPLandroidx/compose/foundation/layout/AndroidWindowInsets;->setVisible(Z)V +HSPLandroidx/compose/foundation/layout/AndroidWindowInsets;->update$foundation_layout_release(Landroidx/core/view/WindowInsetsCompat;I)V +Landroidx/compose/foundation/layout/Arrangement; +HSPLandroidx/compose/foundation/layout/Arrangement;->()V +HSPLandroidx/compose/foundation/layout/Arrangement;->()V +HSPLandroidx/compose/foundation/layout/Arrangement;->getCenter()Landroidx/compose/foundation/layout/Arrangement$HorizontalOrVertical; +HSPLandroidx/compose/foundation/layout/Arrangement;->getEnd()Landroidx/compose/foundation/layout/Arrangement$Horizontal; +HSPLandroidx/compose/foundation/layout/Arrangement;->getSpaceBetween()Landroidx/compose/foundation/layout/Arrangement$HorizontalOrVertical; +HSPLandroidx/compose/foundation/layout/Arrangement;->getStart()Landroidx/compose/foundation/layout/Arrangement$Horizontal; +HSPLandroidx/compose/foundation/layout/Arrangement;->getTop()Landroidx/compose/foundation/layout/Arrangement$Vertical; +HSPLandroidx/compose/foundation/layout/Arrangement;->placeCenter$foundation_layout_release(I[I[IZ)V +HSPLandroidx/compose/foundation/layout/Arrangement;->placeLeftOrTop$foundation_layout_release([I[IZ)V +HSPLandroidx/compose/foundation/layout/Arrangement;->placeRightOrBottom$foundation_layout_release(I[I[IZ)V +HSPLandroidx/compose/foundation/layout/Arrangement;->placeSpaceBetween$foundation_layout_release(I[I[IZ)V +HSPLandroidx/compose/foundation/layout/Arrangement;->spacedBy-0680j_4(F)Landroidx/compose/foundation/layout/Arrangement$HorizontalOrVertical; +Landroidx/compose/foundation/layout/Arrangement$Bottom$1; +HSPLandroidx/compose/foundation/layout/Arrangement$Bottom$1;->()V +Landroidx/compose/foundation/layout/Arrangement$Center$1; +HSPLandroidx/compose/foundation/layout/Arrangement$Center$1;->()V +HSPLandroidx/compose/foundation/layout/Arrangement$Center$1;->arrange(Landroidx/compose/ui/unit/Density;I[ILandroidx/compose/ui/unit/LayoutDirection;[I)V +HSPLandroidx/compose/foundation/layout/Arrangement$Center$1;->arrange(Landroidx/compose/ui/unit/Density;I[I[I)V +HSPLandroidx/compose/foundation/layout/Arrangement$Center$1;->getSpacing-D9Ej5fM()F +Landroidx/compose/foundation/layout/Arrangement$End$1; +HSPLandroidx/compose/foundation/layout/Arrangement$End$1;->()V +HSPLandroidx/compose/foundation/layout/Arrangement$End$1;->arrange(Landroidx/compose/ui/unit/Density;I[ILandroidx/compose/ui/unit/LayoutDirection;[I)V +Landroidx/compose/foundation/layout/Arrangement$Horizontal; +HSPLandroidx/compose/foundation/layout/Arrangement$Horizontal;->getSpacing-D9Ej5fM()F +Landroidx/compose/foundation/layout/Arrangement$HorizontalOrVertical; +Landroidx/compose/foundation/layout/Arrangement$SpaceAround$1; +HSPLandroidx/compose/foundation/layout/Arrangement$SpaceAround$1;->()V +Landroidx/compose/foundation/layout/Arrangement$SpaceBetween$1; +HSPLandroidx/compose/foundation/layout/Arrangement$SpaceBetween$1;->()V +HSPLandroidx/compose/foundation/layout/Arrangement$SpaceBetween$1;->arrange(Landroidx/compose/ui/unit/Density;I[ILandroidx/compose/ui/unit/LayoutDirection;[I)V +HSPLandroidx/compose/foundation/layout/Arrangement$SpaceBetween$1;->getSpacing-D9Ej5fM()F +Landroidx/compose/foundation/layout/Arrangement$SpaceEvenly$1; +HSPLandroidx/compose/foundation/layout/Arrangement$SpaceEvenly$1;->()V +Landroidx/compose/foundation/layout/Arrangement$SpacedAligned; +HSPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;->(FZLkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;->(FZLkotlin/jvm/functions/Function2;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;->arrange(Landroidx/compose/ui/unit/Density;I[ILandroidx/compose/ui/unit/LayoutDirection;[I)V +HSPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;->arrange(Landroidx/compose/ui/unit/Density;I[I[I)V +HSPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/foundation/layout/Arrangement$SpacedAligned;->getSpacing-D9Ej5fM()F +Landroidx/compose/foundation/layout/Arrangement$Start$1; +HSPLandroidx/compose/foundation/layout/Arrangement$Start$1;->()V +HSPLandroidx/compose/foundation/layout/Arrangement$Start$1;->arrange(Landroidx/compose/ui/unit/Density;I[ILandroidx/compose/ui/unit/LayoutDirection;[I)V +Landroidx/compose/foundation/layout/Arrangement$Top$1; +HSPLandroidx/compose/foundation/layout/Arrangement$Top$1;->()V +HSPLandroidx/compose/foundation/layout/Arrangement$Top$1;->arrange(Landroidx/compose/ui/unit/Density;I[I[I)V +Landroidx/compose/foundation/layout/Arrangement$Vertical; +HSPLandroidx/compose/foundation/layout/Arrangement$Vertical;->getSpacing-D9Ej5fM()F +Landroidx/compose/foundation/layout/Arrangement$spacedBy$1; +HSPLandroidx/compose/foundation/layout/Arrangement$spacedBy$1;->()V +HSPLandroidx/compose/foundation/layout/Arrangement$spacedBy$1;->()V +HSPLandroidx/compose/foundation/layout/Arrangement$spacedBy$1;->invoke(ILandroidx/compose/ui/unit/LayoutDirection;)Ljava/lang/Integer; +HSPLandroidx/compose/foundation/layout/Arrangement$spacedBy$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/layout/BoxChildDataElement; +HSPLandroidx/compose/foundation/layout/BoxChildDataElement;->(Landroidx/compose/ui/Alignment;ZLkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/foundation/layout/BoxChildDataElement;->create()Landroidx/compose/foundation/layout/BoxChildDataNode; +HSPLandroidx/compose/foundation/layout/BoxChildDataElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/foundation/layout/BoxChildDataElement;->equals(Ljava/lang/Object;)Z +Landroidx/compose/foundation/layout/BoxChildDataNode; +HSPLandroidx/compose/foundation/layout/BoxChildDataNode;->(Landroidx/compose/ui/Alignment;Z)V +HSPLandroidx/compose/foundation/layout/BoxChildDataNode;->getAlignment()Landroidx/compose/ui/Alignment; +HSPLandroidx/compose/foundation/layout/BoxChildDataNode;->getMatchParentSize()Z +HSPLandroidx/compose/foundation/layout/BoxChildDataNode;->modifyParentData(Landroidx/compose/ui/unit/Density;Ljava/lang/Object;)Landroidx/compose/foundation/layout/BoxChildDataNode; +HSPLandroidx/compose/foundation/layout/BoxChildDataNode;->modifyParentData(Landroidx/compose/ui/unit/Density;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/layout/BoxKt; +HSPLandroidx/compose/foundation/layout/BoxKt;->()V +HSPLandroidx/compose/foundation/layout/BoxKt;->Box(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/foundation/layout/BoxKt;->access$getMatchesParentSize(Landroidx/compose/ui/layout/Measurable;)Z +HSPLandroidx/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 +HSPLandroidx/compose/foundation/layout/BoxKt;->boxMeasurePolicy(Landroidx/compose/ui/Alignment;Z)Landroidx/compose/ui/layout/MeasurePolicy; +HSPLandroidx/compose/foundation/layout/BoxKt;->getBoxChildDataNode(Landroidx/compose/ui/layout/Measurable;)Landroidx/compose/foundation/layout/BoxChildDataNode; +HSPLandroidx/compose/foundation/layout/BoxKt;->getMatchesParentSize(Landroidx/compose/ui/layout/Measurable;)Z +HSPLandroidx/compose/foundation/layout/BoxKt;->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 +HSPLandroidx/compose/foundation/layout/BoxKt;->rememberBoxMeasurePolicy(Landroidx/compose/ui/Alignment;ZLandroidx/compose/runtime/Composer;I)Landroidx/compose/ui/layout/MeasurePolicy; +Landroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1; +HSPLandroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1;->()V +HSPLandroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1;->()V +HSPLandroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; +Landroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1$measure$1; +HSPLandroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1$measure$1;->()V +HSPLandroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1$measure$1;->()V +HSPLandroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/foundation/layout/BoxKt$EmptyBoxMeasurePolicy$1$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1; +HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1;->(ZLandroidx/compose/ui/Alignment;)V +HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; +Landroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$1; +HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$1;->()V +HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$1;->()V +HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$2; +HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$2;->(Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/Measurable;Landroidx/compose/ui/layout/MeasureScope;IILandroidx/compose/ui/Alignment;)V +HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$2;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$5; +HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$5;->([Landroidx/compose/ui/layout/Placeable;Ljava/util/List;Landroidx/compose/ui/layout/MeasureScope;Lkotlin/jvm/internal/Ref$IntRef;Lkotlin/jvm/internal/Ref$IntRef;Landroidx/compose/ui/Alignment;)V +HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$5;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/foundation/layout/BoxKt$boxMeasurePolicy$1$measure$5;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/layout/BoxScope; +Landroidx/compose/foundation/layout/BoxScopeInstance; +HSPLandroidx/compose/foundation/layout/BoxScopeInstance;->()V +HSPLandroidx/compose/foundation/layout/BoxScopeInstance;->()V +HSPLandroidx/compose/foundation/layout/BoxScopeInstance;->align(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Alignment;)Landroidx/compose/ui/Modifier; +Landroidx/compose/foundation/layout/BoxWithConstraintsKt; +HSPLandroidx/compose/foundation/layout/BoxWithConstraintsKt;->BoxWithConstraints(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Alignment;ZLkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V +Landroidx/compose/foundation/layout/BoxWithConstraintsKt$BoxWithConstraints$1$1; +HSPLandroidx/compose/foundation/layout/BoxWithConstraintsKt$BoxWithConstraints$1$1;->(Landroidx/compose/ui/layout/MeasurePolicy;Lkotlin/jvm/functions/Function3;I)V +HSPLandroidx/compose/foundation/layout/BoxWithConstraintsKt$BoxWithConstraints$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/layout/BoxWithConstraintsKt$BoxWithConstraints$1$1;->invoke-0kLqBqw(Landroidx/compose/ui/layout/SubcomposeMeasureScope;J)Landroidx/compose/ui/layout/MeasureResult; +Landroidx/compose/foundation/layout/BoxWithConstraintsKt$BoxWithConstraints$1$1$measurables$1; +HSPLandroidx/compose/foundation/layout/BoxWithConstraintsKt$BoxWithConstraints$1$1$measurables$1;->(Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/layout/BoxWithConstraintsScopeImpl;I)V +HSPLandroidx/compose/foundation/layout/BoxWithConstraintsKt$BoxWithConstraints$1$1$measurables$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/foundation/layout/BoxWithConstraintsKt$BoxWithConstraints$1$1$measurables$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/layout/BoxWithConstraintsScope; +Landroidx/compose/foundation/layout/BoxWithConstraintsScopeImpl; +HSPLandroidx/compose/foundation/layout/BoxWithConstraintsScopeImpl;->(Landroidx/compose/ui/unit/Density;J)V +HSPLandroidx/compose/foundation/layout/BoxWithConstraintsScopeImpl;->(Landroidx/compose/ui/unit/Density;JLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/layout/BoxWithConstraintsScopeImpl;->align(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Alignment;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/layout/BoxWithConstraintsScopeImpl;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/foundation/layout/BoxWithConstraintsScopeImpl;->getConstraints-msEJaDk()J +HSPLandroidx/compose/foundation/layout/BoxWithConstraintsScopeImpl;->getMaxHeight-D9Ej5fM()F +HSPLandroidx/compose/foundation/layout/BoxWithConstraintsScopeImpl;->getMaxWidth-D9Ej5fM()F +Landroidx/compose/foundation/layout/ColumnKt; +HSPLandroidx/compose/foundation/layout/ColumnKt;->()V +HSPLandroidx/compose/foundation/layout/ColumnKt;->columnMeasurePolicy(Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/layout/MeasurePolicy; +Landroidx/compose/foundation/layout/ColumnKt$DefaultColumnMeasurePolicy$1; +HSPLandroidx/compose/foundation/layout/ColumnKt$DefaultColumnMeasurePolicy$1;->()V +HSPLandroidx/compose/foundation/layout/ColumnKt$DefaultColumnMeasurePolicy$1;->()V +HSPLandroidx/compose/foundation/layout/ColumnKt$DefaultColumnMeasurePolicy$1;->invoke(I[ILandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;[I)V +HSPLandroidx/compose/foundation/layout/ColumnKt$DefaultColumnMeasurePolicy$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/layout/ColumnKt$columnMeasurePolicy$1$1; +HSPLandroidx/compose/foundation/layout/ColumnKt$columnMeasurePolicy$1$1;->(Landroidx/compose/foundation/layout/Arrangement$Vertical;)V +HSPLandroidx/compose/foundation/layout/ColumnKt$columnMeasurePolicy$1$1;->invoke(I[ILandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;[I)V +HSPLandroidx/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; +Landroidx/compose/foundation/layout/ColumnScope; +HSPLandroidx/compose/foundation/layout/ColumnScope;->weight$default(Landroidx/compose/foundation/layout/ColumnScope;Landroidx/compose/ui/Modifier;FZILjava/lang/Object;)Landroidx/compose/ui/Modifier; +Landroidx/compose/foundation/layout/ColumnScopeInstance; +HSPLandroidx/compose/foundation/layout/ColumnScopeInstance;->()V +HSPLandroidx/compose/foundation/layout/ColumnScopeInstance;->()V +HSPLandroidx/compose/foundation/layout/ColumnScopeInstance;->weight(Landroidx/compose/ui/Modifier;FZ)Landroidx/compose/ui/Modifier; +Landroidx/compose/foundation/layout/ConsumedInsetsModifier; +HSPLandroidx/compose/foundation/layout/ConsumedInsetsModifier;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/foundation/layout/ConsumedInsetsModifier;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/foundation/layout/ConsumedInsetsModifier;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V +Landroidx/compose/foundation/layout/CrossAxisAlignment; +HSPLandroidx/compose/foundation/layout/CrossAxisAlignment;->()V +HSPLandroidx/compose/foundation/layout/CrossAxisAlignment;->()V +HSPLandroidx/compose/foundation/layout/CrossAxisAlignment;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/foundation/layout/CrossAxisAlignment$CenterCrossAxisAlignment; +HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$CenterCrossAxisAlignment;->()V +HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$CenterCrossAxisAlignment;->()V +Landroidx/compose/foundation/layout/CrossAxisAlignment$Companion; +HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$Companion;->()V +HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$Companion;->horizontal$foundation_layout_release(Landroidx/compose/ui/Alignment$Horizontal;)Landroidx/compose/foundation/layout/CrossAxisAlignment; +HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$Companion;->vertical$foundation_layout_release(Landroidx/compose/ui/Alignment$Vertical;)Landroidx/compose/foundation/layout/CrossAxisAlignment; +Landroidx/compose/foundation/layout/CrossAxisAlignment$EndCrossAxisAlignment; +HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$EndCrossAxisAlignment;->()V +HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$EndCrossAxisAlignment;->()V +Landroidx/compose/foundation/layout/CrossAxisAlignment$HorizontalCrossAxisAlignment; +HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$HorizontalCrossAxisAlignment;->(Landroidx/compose/ui/Alignment$Horizontal;)V +HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$HorizontalCrossAxisAlignment;->align$foundation_layout_release(ILandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/layout/Placeable;I)I +Landroidx/compose/foundation/layout/CrossAxisAlignment$StartCrossAxisAlignment; +HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$StartCrossAxisAlignment;->()V +HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$StartCrossAxisAlignment;->()V +Landroidx/compose/foundation/layout/CrossAxisAlignment$VerticalCrossAxisAlignment; +HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$VerticalCrossAxisAlignment;->(Landroidx/compose/ui/Alignment$Vertical;)V +HSPLandroidx/compose/foundation/layout/CrossAxisAlignment$VerticalCrossAxisAlignment;->align$foundation_layout_release(ILandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/layout/Placeable;I)I +Landroidx/compose/foundation/layout/Direction; +HSPLandroidx/compose/foundation/layout/Direction;->$values()[Landroidx/compose/foundation/layout/Direction; +HSPLandroidx/compose/foundation/layout/Direction;->()V +HSPLandroidx/compose/foundation/layout/Direction;->(Ljava/lang/String;I)V +Landroidx/compose/foundation/layout/ExcludeInsets; +HSPLandroidx/compose/foundation/layout/ExcludeInsets;->(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/foundation/layout/WindowInsets;)V +HSPLandroidx/compose/foundation/layout/ExcludeInsets;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/foundation/layout/ExcludeInsets;->getBottom(Landroidx/compose/ui/unit/Density;)I +HSPLandroidx/compose/foundation/layout/ExcludeInsets;->getLeft(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I +HSPLandroidx/compose/foundation/layout/ExcludeInsets;->getRight(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I +HSPLandroidx/compose/foundation/layout/ExcludeInsets;->getTop(Landroidx/compose/ui/unit/Density;)I +Landroidx/compose/foundation/layout/FillElement; +HSPLandroidx/compose/foundation/layout/FillElement;->()V +HSPLandroidx/compose/foundation/layout/FillElement;->(Landroidx/compose/foundation/layout/Direction;FLjava/lang/String;)V +HSPLandroidx/compose/foundation/layout/FillElement;->create()Landroidx/compose/foundation/layout/FillNode; +HSPLandroidx/compose/foundation/layout/FillElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/foundation/layout/FillElement;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/foundation/layout/FillElement;->update(Landroidx/compose/foundation/layout/FillNode;)V +HSPLandroidx/compose/foundation/layout/FillElement;->update(Landroidx/compose/ui/Modifier$Node;)V +Landroidx/compose/foundation/layout/FillElement$Companion; +HSPLandroidx/compose/foundation/layout/FillElement$Companion;->()V +HSPLandroidx/compose/foundation/layout/FillElement$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/layout/FillElement$Companion;->height(F)Landroidx/compose/foundation/layout/FillElement; +HSPLandroidx/compose/foundation/layout/FillElement$Companion;->size(F)Landroidx/compose/foundation/layout/FillElement; +HSPLandroidx/compose/foundation/layout/FillElement$Companion;->width(F)Landroidx/compose/foundation/layout/FillElement; +Landroidx/compose/foundation/layout/FillNode; +HSPLandroidx/compose/foundation/layout/FillNode;->(Landroidx/compose/foundation/layout/Direction;F)V +HSPLandroidx/compose/foundation/layout/FillNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; +HSPLandroidx/compose/foundation/layout/FillNode;->setDirection(Landroidx/compose/foundation/layout/Direction;)V +HSPLandroidx/compose/foundation/layout/FillNode;->setFraction(F)V +Landroidx/compose/foundation/layout/FillNode$measure$1; +HSPLandroidx/compose/foundation/layout/FillNode$measure$1;->(Landroidx/compose/ui/layout/Placeable;)V +HSPLandroidx/compose/foundation/layout/FillNode$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/foundation/layout/FillNode$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/layout/FixedDpInsets; +HSPLandroidx/compose/foundation/layout/FixedDpInsets;->(FFFF)V +HSPLandroidx/compose/foundation/layout/FixedDpInsets;->(FFFFLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/layout/FixedDpInsets;->getBottom(Landroidx/compose/ui/unit/Density;)I +HSPLandroidx/compose/foundation/layout/FixedDpInsets;->getLeft(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I +HSPLandroidx/compose/foundation/layout/FixedDpInsets;->getRight(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I +HSPLandroidx/compose/foundation/layout/FixedDpInsets;->getTop(Landroidx/compose/ui/unit/Density;)I +Landroidx/compose/foundation/layout/FixedIntInsets; +HSPLandroidx/compose/foundation/layout/FixedIntInsets;->(IIII)V +HSPLandroidx/compose/foundation/layout/FixedIntInsets;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/foundation/layout/FixedIntInsets;->getBottom(Landroidx/compose/ui/unit/Density;)I +HSPLandroidx/compose/foundation/layout/FixedIntInsets;->getLeft(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I +HSPLandroidx/compose/foundation/layout/FixedIntInsets;->getRight(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I +HSPLandroidx/compose/foundation/layout/FixedIntInsets;->getTop(Landroidx/compose/ui/unit/Density;)I +Landroidx/compose/foundation/layout/FlowLayoutKt; +HSPLandroidx/compose/foundation/layout/FlowLayoutKt;->()V +HSPLandroidx/compose/foundation/layout/FlowLayoutKt;->access$flowMeasurePolicy-bs7tm-s(Landroidx/compose/foundation/layout/LayoutOrientation;Lkotlin/jvm/functions/Function5;FLandroidx/compose/foundation/layout/SizeMode;Landroidx/compose/foundation/layout/CrossAxisAlignment;Lkotlin/jvm/functions/Function5;FI)Landroidx/compose/ui/layout/MeasurePolicy; +HSPLandroidx/compose/foundation/layout/FlowLayoutKt;->access$getCROSS_AXIS_ALIGNMENT_TOP$p()Landroidx/compose/foundation/layout/CrossAxisAlignment; +HSPLandroidx/compose/foundation/layout/FlowLayoutKt;->access$getHorizontalArrangement(Landroidx/compose/foundation/layout/Arrangement$Horizontal;)Lkotlin/jvm/functions/Function5; +HSPLandroidx/compose/foundation/layout/FlowLayoutKt;->access$getVerticalArrangement(Landroidx/compose/foundation/layout/Arrangement$Vertical;)Lkotlin/jvm/functions/Function5; +HSPLandroidx/compose/foundation/layout/FlowLayoutKt;->breakDownItems-w1Onq5I(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/foundation/layout/RowColumnMeasurementHelper;Landroidx/compose/foundation/layout/LayoutOrientation;JI)Landroidx/compose/foundation/layout/FlowResult; +HSPLandroidx/compose/foundation/layout/FlowLayoutKt;->flowMeasurePolicy-bs7tm-s(Landroidx/compose/foundation/layout/LayoutOrientation;Lkotlin/jvm/functions/Function5;FLandroidx/compose/foundation/layout/SizeMode;Landroidx/compose/foundation/layout/CrossAxisAlignment;Lkotlin/jvm/functions/Function5;FI)Landroidx/compose/ui/layout/MeasurePolicy; +HSPLandroidx/compose/foundation/layout/FlowLayoutKt;->getHorizontalArrangement(Landroidx/compose/foundation/layout/Arrangement$Horizontal;)Lkotlin/jvm/functions/Function5; +HSPLandroidx/compose/foundation/layout/FlowLayoutKt;->getVerticalArrangement(Landroidx/compose/foundation/layout/Arrangement$Vertical;)Lkotlin/jvm/functions/Function5; +HSPLandroidx/compose/foundation/layout/FlowLayoutKt;->mainAxisSize(Landroidx/compose/ui/layout/Placeable;Landroidx/compose/foundation/layout/LayoutOrientation;)I +HSPLandroidx/compose/foundation/layout/FlowLayoutKt;->measureAndCache-6m2dt9o(Landroidx/compose/ui/layout/Measurable;JLandroidx/compose/foundation/layout/LayoutOrientation;Lkotlin/jvm/functions/Function1;)I +HSPLandroidx/compose/foundation/layout/FlowLayoutKt;->rowMeasurementHelper(Landroidx/compose/foundation/layout/Arrangement$Horizontal;Landroidx/compose/foundation/layout/Arrangement$Vertical;ILandroidx/compose/runtime/Composer;I)Landroidx/compose/ui/layout/MeasurePolicy; +Landroidx/compose/foundation/layout/FlowLayoutKt$breakDownItems$1; +HSPLandroidx/compose/foundation/layout/FlowLayoutKt$breakDownItems$1;->([Landroidx/compose/ui/layout/Placeable;I)V +HSPLandroidx/compose/foundation/layout/FlowLayoutKt$breakDownItems$1;->invoke(Landroidx/compose/ui/layout/Placeable;)V +HSPLandroidx/compose/foundation/layout/FlowLayoutKt$breakDownItems$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/layout/FlowLayoutKt$breakDownItems$nextSize$1; +HSPLandroidx/compose/foundation/layout/FlowLayoutKt$breakDownItems$nextSize$1;->([Landroidx/compose/ui/layout/Placeable;)V +HSPLandroidx/compose/foundation/layout/FlowLayoutKt$breakDownItems$nextSize$1;->invoke(Landroidx/compose/ui/layout/Placeable;)V +HSPLandroidx/compose/foundation/layout/FlowLayoutKt$breakDownItems$nextSize$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/layout/FlowLayoutKt$flowMeasurePolicy$1; +HSPLandroidx/compose/foundation/layout/FlowLayoutKt$flowMeasurePolicy$1;->(Landroidx/compose/foundation/layout/LayoutOrientation;Lkotlin/jvm/functions/Function5;FLandroidx/compose/foundation/layout/SizeMode;Landroidx/compose/foundation/layout/CrossAxisAlignment;IFLkotlin/jvm/functions/Function5;)V +HSPLandroidx/compose/foundation/layout/FlowLayoutKt$flowMeasurePolicy$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; +Landroidx/compose/foundation/layout/FlowLayoutKt$flowMeasurePolicy$1$maxCrossAxisIntrinsicItemSize$1; +HSPLandroidx/compose/foundation/layout/FlowLayoutKt$flowMeasurePolicy$1$maxCrossAxisIntrinsicItemSize$1;->()V +HSPLandroidx/compose/foundation/layout/FlowLayoutKt$flowMeasurePolicy$1$maxCrossAxisIntrinsicItemSize$1;->()V +Landroidx/compose/foundation/layout/FlowLayoutKt$flowMeasurePolicy$1$maxMainAxisIntrinsicItemSize$1; +HSPLandroidx/compose/foundation/layout/FlowLayoutKt$flowMeasurePolicy$1$maxMainAxisIntrinsicItemSize$1;->()V +HSPLandroidx/compose/foundation/layout/FlowLayoutKt$flowMeasurePolicy$1$maxMainAxisIntrinsicItemSize$1;->()V +Landroidx/compose/foundation/layout/FlowLayoutKt$flowMeasurePolicy$1$measure$2; +HSPLandroidx/compose/foundation/layout/FlowLayoutKt$flowMeasurePolicy$1$measure$2;->(Landroidx/compose/foundation/layout/FlowResult;Landroidx/compose/foundation/layout/RowColumnMeasurementHelper;[ILandroidx/compose/ui/layout/MeasureScope;)V +HSPLandroidx/compose/foundation/layout/FlowLayoutKt$flowMeasurePolicy$1$measure$2;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/foundation/layout/FlowLayoutKt$flowMeasurePolicy$1$measure$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/layout/FlowLayoutKt$flowMeasurePolicy$1$minCrossAxisIntrinsicItemSize$1; +HSPLandroidx/compose/foundation/layout/FlowLayoutKt$flowMeasurePolicy$1$minCrossAxisIntrinsicItemSize$1;->()V +HSPLandroidx/compose/foundation/layout/FlowLayoutKt$flowMeasurePolicy$1$minCrossAxisIntrinsicItemSize$1;->()V +Landroidx/compose/foundation/layout/FlowLayoutKt$flowMeasurePolicy$1$minMainAxisIntrinsicItemSize$1; +HSPLandroidx/compose/foundation/layout/FlowLayoutKt$flowMeasurePolicy$1$minMainAxisIntrinsicItemSize$1;->()V +HSPLandroidx/compose/foundation/layout/FlowLayoutKt$flowMeasurePolicy$1$minMainAxisIntrinsicItemSize$1;->()V +Landroidx/compose/foundation/layout/FlowLayoutKt$getHorizontalArrangement$1; +HSPLandroidx/compose/foundation/layout/FlowLayoutKt$getHorizontalArrangement$1;->(Landroidx/compose/foundation/layout/Arrangement$Horizontal;)V +HSPLandroidx/compose/foundation/layout/FlowLayoutKt$getHorizontalArrangement$1;->invoke(I[ILandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;[I)V +HSPLandroidx/compose/foundation/layout/FlowLayoutKt$getHorizontalArrangement$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/layout/FlowLayoutKt$getVerticalArrangement$1; +HSPLandroidx/compose/foundation/layout/FlowLayoutKt$getVerticalArrangement$1;->(Landroidx/compose/foundation/layout/Arrangement$Vertical;)V +HSPLandroidx/compose/foundation/layout/FlowLayoutKt$getVerticalArrangement$1;->invoke(I[ILandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;[I)V +HSPLandroidx/compose/foundation/layout/FlowLayoutKt$getVerticalArrangement$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/layout/FlowResult; +HSPLandroidx/compose/foundation/layout/FlowResult;->(IILandroidx/compose/runtime/collection/MutableVector;)V +HSPLandroidx/compose/foundation/layout/FlowResult;->getCrossAxisTotalSize()I +HSPLandroidx/compose/foundation/layout/FlowResult;->getItems()Landroidx/compose/runtime/collection/MutableVector; +HSPLandroidx/compose/foundation/layout/FlowResult;->getMainAxisTotalSize()I +Landroidx/compose/foundation/layout/FlowRowScope; +Landroidx/compose/foundation/layout/FlowRowScopeInstance; +HSPLandroidx/compose/foundation/layout/FlowRowScopeInstance;->()V +HSPLandroidx/compose/foundation/layout/FlowRowScopeInstance;->()V +Landroidx/compose/foundation/layout/InsetsConsumingModifier; +HSPLandroidx/compose/foundation/layout/InsetsConsumingModifier;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/foundation/layout/InsetsConsumingModifier;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/layout/InsetsConsumingModifier;->getConsumedInsets()Landroidx/compose/foundation/layout/WindowInsets; +HSPLandroidx/compose/foundation/layout/InsetsConsumingModifier;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal; +HSPLandroidx/compose/foundation/layout/InsetsConsumingModifier;->getValue()Landroidx/compose/foundation/layout/WindowInsets; +HSPLandroidx/compose/foundation/layout/InsetsConsumingModifier;->getValue()Ljava/lang/Object; +HSPLandroidx/compose/foundation/layout/InsetsConsumingModifier;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V +HSPLandroidx/compose/foundation/layout/InsetsConsumingModifier;->setConsumedInsets(Landroidx/compose/foundation/layout/WindowInsets;)V +Landroidx/compose/foundation/layout/InsetsListener; +HSPLandroidx/compose/foundation/layout/InsetsListener;->(Landroidx/compose/foundation/layout/WindowInsetsHolder;)V +HSPLandroidx/compose/foundation/layout/InsetsListener;->onApplyWindowInsets(Landroid/view/View;Landroidx/core/view/WindowInsetsCompat;)Landroidx/core/view/WindowInsetsCompat; +HSPLandroidx/compose/foundation/layout/InsetsListener;->onEnd(Landroidx/core/view/WindowInsetsAnimationCompat;)V +HSPLandroidx/compose/foundation/layout/InsetsListener;->onPrepare(Landroidx/core/view/WindowInsetsAnimationCompat;)V +HSPLandroidx/compose/foundation/layout/InsetsListener;->onProgress(Landroidx/core/view/WindowInsetsCompat;Ljava/util/List;)Landroidx/core/view/WindowInsetsCompat; +HSPLandroidx/compose/foundation/layout/InsetsListener;->onStart(Landroidx/core/view/WindowInsetsAnimationCompat;Landroidx/core/view/WindowInsetsAnimationCompat$BoundsCompat;)Landroidx/core/view/WindowInsetsAnimationCompat$BoundsCompat; +HSPLandroidx/compose/foundation/layout/InsetsListener;->onViewAttachedToWindow(Landroid/view/View;)V +Landroidx/compose/foundation/layout/InsetsPaddingModifier; +HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier;->(Landroidx/compose/foundation/layout/WindowInsets;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier;->getConsumedInsets()Landroidx/compose/foundation/layout/WindowInsets; +HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal; +HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier;->getUnconsumedInsets()Landroidx/compose/foundation/layout/WindowInsets; +HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier;->getValue()Landroidx/compose/foundation/layout/WindowInsets; +HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier;->getValue()Ljava/lang/Object; +HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; +HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V +HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier;->setConsumedInsets(Landroidx/compose/foundation/layout/WindowInsets;)V +HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier;->setUnconsumedInsets(Landroidx/compose/foundation/layout/WindowInsets;)V +Landroidx/compose/foundation/layout/InsetsPaddingModifier$measure$1; +HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier$measure$1;->(Landroidx/compose/ui/layout/Placeable;II)V +HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/foundation/layout/InsetsPaddingModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/layout/InsetsPaddingValues; +HSPLandroidx/compose/foundation/layout/InsetsPaddingValues;->(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/ui/unit/Density;)V +HSPLandroidx/compose/foundation/layout/InsetsPaddingValues;->calculateBottomPadding-D9Ej5fM()F +HSPLandroidx/compose/foundation/layout/InsetsPaddingValues;->calculateLeftPadding-u2uoSUM(Landroidx/compose/ui/unit/LayoutDirection;)F +HSPLandroidx/compose/foundation/layout/InsetsPaddingValues;->calculateRightPadding-u2uoSUM(Landroidx/compose/ui/unit/LayoutDirection;)F +HSPLandroidx/compose/foundation/layout/InsetsPaddingValues;->calculateTopPadding-D9Ej5fM()F +HSPLandroidx/compose/foundation/layout/InsetsPaddingValues;->equals(Ljava/lang/Object;)Z +Landroidx/compose/foundation/layout/InsetsValues; +HSPLandroidx/compose/foundation/layout/InsetsValues;->(IIII)V +HSPLandroidx/compose/foundation/layout/InsetsValues;->equals(Ljava/lang/Object;)Z +Landroidx/compose/foundation/layout/LayoutOrientation; +HSPLandroidx/compose/foundation/layout/LayoutOrientation;->$values()[Landroidx/compose/foundation/layout/LayoutOrientation; +HSPLandroidx/compose/foundation/layout/LayoutOrientation;->()V +HSPLandroidx/compose/foundation/layout/LayoutOrientation;->(Ljava/lang/String;I)V +Landroidx/compose/foundation/layout/LayoutWeightElement; +HSPLandroidx/compose/foundation/layout/LayoutWeightElement;->(FZ)V +HSPLandroidx/compose/foundation/layout/LayoutWeightElement;->create()Landroidx/compose/foundation/layout/LayoutWeightNode; +HSPLandroidx/compose/foundation/layout/LayoutWeightElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/foundation/layout/LayoutWeightElement;->equals(Ljava/lang/Object;)Z +Landroidx/compose/foundation/layout/LayoutWeightNode; +HSPLandroidx/compose/foundation/layout/LayoutWeightNode;->(FZ)V +HSPLandroidx/compose/foundation/layout/LayoutWeightNode;->modifyParentData(Landroidx/compose/ui/unit/Density;Ljava/lang/Object;)Landroidx/compose/foundation/layout/RowColumnParentData; +HSPLandroidx/compose/foundation/layout/LayoutWeightNode;->modifyParentData(Landroidx/compose/ui/unit/Density;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/layout/LimitInsets; +HSPLandroidx/compose/foundation/layout/LimitInsets;->(Landroidx/compose/foundation/layout/WindowInsets;I)V +HSPLandroidx/compose/foundation/layout/LimitInsets;->(Landroidx/compose/foundation/layout/WindowInsets;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/layout/LimitInsets;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/foundation/layout/LimitInsets;->getBottom(Landroidx/compose/ui/unit/Density;)I +HSPLandroidx/compose/foundation/layout/LimitInsets;->getLeft(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I +HSPLandroidx/compose/foundation/layout/LimitInsets;->getRight(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I +HSPLandroidx/compose/foundation/layout/LimitInsets;->getTop(Landroidx/compose/ui/unit/Density;)I +Landroidx/compose/foundation/layout/MutableWindowInsets; +HSPLandroidx/compose/foundation/layout/MutableWindowInsets;->()V +HSPLandroidx/compose/foundation/layout/MutableWindowInsets;->(Landroidx/compose/foundation/layout/WindowInsets;)V +HSPLandroidx/compose/foundation/layout/MutableWindowInsets;->(Landroidx/compose/foundation/layout/WindowInsets;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/layout/MutableWindowInsets;->getBottom(Landroidx/compose/ui/unit/Density;)I +HSPLandroidx/compose/foundation/layout/MutableWindowInsets;->getInsets()Landroidx/compose/foundation/layout/WindowInsets; +HSPLandroidx/compose/foundation/layout/MutableWindowInsets;->getLeft(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I +HSPLandroidx/compose/foundation/layout/MutableWindowInsets;->getRight(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I +HSPLandroidx/compose/foundation/layout/MutableWindowInsets;->setInsets(Landroidx/compose/foundation/layout/WindowInsets;)V +Landroidx/compose/foundation/layout/OrientationIndependentConstraints; +HSPLandroidx/compose/foundation/layout/OrientationIndependentConstraints;->constructor-impl(IIII)J +HSPLandroidx/compose/foundation/layout/OrientationIndependentConstraints;->constructor-impl(J)J +HSPLandroidx/compose/foundation/layout/OrientationIndependentConstraints;->constructor-impl(JLandroidx/compose/foundation/layout/LayoutOrientation;)J +HSPLandroidx/compose/foundation/layout/OrientationIndependentConstraints;->copy-yUG9Ft0$default(JIIIIILjava/lang/Object;)J +HSPLandroidx/compose/foundation/layout/OrientationIndependentConstraints;->copy-yUG9Ft0(JIIII)J +HSPLandroidx/compose/foundation/layout/OrientationIndependentConstraints;->toBoxConstraints-OenEA2s(JLandroidx/compose/foundation/layout/LayoutOrientation;)J +Landroidx/compose/foundation/layout/PaddingElement; +HSPLandroidx/compose/foundation/layout/PaddingElement;->(FFFFZLkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/foundation/layout/PaddingElement;->(FFFFZLkotlin/jvm/functions/Function1;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/layout/PaddingElement;->create()Landroidx/compose/foundation/layout/PaddingNode; +HSPLandroidx/compose/foundation/layout/PaddingElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/foundation/layout/PaddingElement;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/foundation/layout/PaddingElement;->update(Landroidx/compose/foundation/layout/PaddingNode;)V +HSPLandroidx/compose/foundation/layout/PaddingElement;->update(Landroidx/compose/ui/Modifier$Node;)V +Landroidx/compose/foundation/layout/PaddingKt; +HSPLandroidx/compose/foundation/layout/PaddingKt;->PaddingValues-0680j_4(F)Landroidx/compose/foundation/layout/PaddingValues; +HSPLandroidx/compose/foundation/layout/PaddingKt;->PaddingValues-YgX7TsA$default(FFILjava/lang/Object;)Landroidx/compose/foundation/layout/PaddingValues; +HSPLandroidx/compose/foundation/layout/PaddingKt;->PaddingValues-YgX7TsA(FF)Landroidx/compose/foundation/layout/PaddingValues; +HSPLandroidx/compose/foundation/layout/PaddingKt;->PaddingValues-a9UjIt4$default(FFFFILjava/lang/Object;)Landroidx/compose/foundation/layout/PaddingValues; +HSPLandroidx/compose/foundation/layout/PaddingKt;->PaddingValues-a9UjIt4(FFFF)Landroidx/compose/foundation/layout/PaddingValues; +HSPLandroidx/compose/foundation/layout/PaddingKt;->calculateEndPadding(Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/ui/unit/LayoutDirection;)F +HSPLandroidx/compose/foundation/layout/PaddingKt;->calculateStartPadding(Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/ui/unit/LayoutDirection;)F +HSPLandroidx/compose/foundation/layout/PaddingKt;->padding(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/layout/PaddingValues;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/layout/PaddingKt;->padding-3ABfNKs(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/layout/PaddingKt;->padding-VpY3zN4$default(Landroidx/compose/ui/Modifier;FFILjava/lang/Object;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/layout/PaddingKt;->padding-VpY3zN4(Landroidx/compose/ui/Modifier;FF)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/layout/PaddingKt;->padding-qDBjuR0$default(Landroidx/compose/ui/Modifier;FFFFILjava/lang/Object;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/layout/PaddingKt;->padding-qDBjuR0(Landroidx/compose/ui/Modifier;FFFF)Landroidx/compose/ui/Modifier; +Landroidx/compose/foundation/layout/PaddingKt$padding$1; +HSPLandroidx/compose/foundation/layout/PaddingKt$padding$1;->(FFFF)V +Landroidx/compose/foundation/layout/PaddingKt$padding$2; +HSPLandroidx/compose/foundation/layout/PaddingKt$padding$2;->(FF)V +Landroidx/compose/foundation/layout/PaddingKt$padding$3; +HSPLandroidx/compose/foundation/layout/PaddingKt$padding$3;->(F)V +Landroidx/compose/foundation/layout/PaddingKt$padding$4; +HSPLandroidx/compose/foundation/layout/PaddingKt$padding$4;->(Landroidx/compose/foundation/layout/PaddingValues;)V +Landroidx/compose/foundation/layout/PaddingNode; +HSPLandroidx/compose/foundation/layout/PaddingNode;->(FFFFZ)V +HSPLandroidx/compose/foundation/layout/PaddingNode;->(FFFFZLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/layout/PaddingNode;->getRtlAware()Z +HSPLandroidx/compose/foundation/layout/PaddingNode;->getStart-D9Ej5fM()F +HSPLandroidx/compose/foundation/layout/PaddingNode;->getTop-D9Ej5fM()F +HSPLandroidx/compose/foundation/layout/PaddingNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; +HSPLandroidx/compose/foundation/layout/PaddingNode;->setBottom-0680j_4(F)V +HSPLandroidx/compose/foundation/layout/PaddingNode;->setEnd-0680j_4(F)V +HSPLandroidx/compose/foundation/layout/PaddingNode;->setRtlAware(Z)V +HSPLandroidx/compose/foundation/layout/PaddingNode;->setStart-0680j_4(F)V +HSPLandroidx/compose/foundation/layout/PaddingNode;->setTop-0680j_4(F)V +Landroidx/compose/foundation/layout/PaddingNode$measure$1; +HSPLandroidx/compose/foundation/layout/PaddingNode$measure$1;->(Landroidx/compose/foundation/layout/PaddingNode;Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/MeasureScope;)V +HSPLandroidx/compose/foundation/layout/PaddingNode$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/foundation/layout/PaddingNode$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/layout/PaddingValues; +Landroidx/compose/foundation/layout/PaddingValuesElement; +HSPLandroidx/compose/foundation/layout/PaddingValuesElement;->(Landroidx/compose/foundation/layout/PaddingValues;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/foundation/layout/PaddingValuesElement;->create()Landroidx/compose/foundation/layout/PaddingValuesModifier; +HSPLandroidx/compose/foundation/layout/PaddingValuesElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/foundation/layout/PaddingValuesElement;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/foundation/layout/PaddingValuesElement;->update(Landroidx/compose/foundation/layout/PaddingValuesModifier;)V +HSPLandroidx/compose/foundation/layout/PaddingValuesElement;->update(Landroidx/compose/ui/Modifier$Node;)V +Landroidx/compose/foundation/layout/PaddingValuesImpl; +HSPLandroidx/compose/foundation/layout/PaddingValuesImpl;->(FFFF)V +HSPLandroidx/compose/foundation/layout/PaddingValuesImpl;->(FFFFLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/layout/PaddingValuesImpl;->calculateBottomPadding-D9Ej5fM()F +HSPLandroidx/compose/foundation/layout/PaddingValuesImpl;->calculateLeftPadding-u2uoSUM(Landroidx/compose/ui/unit/LayoutDirection;)F +HSPLandroidx/compose/foundation/layout/PaddingValuesImpl;->calculateRightPadding-u2uoSUM(Landroidx/compose/ui/unit/LayoutDirection;)F +HSPLandroidx/compose/foundation/layout/PaddingValuesImpl;->calculateTopPadding-D9Ej5fM()F +HSPLandroidx/compose/foundation/layout/PaddingValuesImpl;->equals(Ljava/lang/Object;)Z +Landroidx/compose/foundation/layout/PaddingValuesModifier; +HSPLandroidx/compose/foundation/layout/PaddingValuesModifier;->(Landroidx/compose/foundation/layout/PaddingValues;)V +HSPLandroidx/compose/foundation/layout/PaddingValuesModifier;->getPaddingValues()Landroidx/compose/foundation/layout/PaddingValues; +HSPLandroidx/compose/foundation/layout/PaddingValuesModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; +HSPLandroidx/compose/foundation/layout/PaddingValuesModifier;->setPaddingValues(Landroidx/compose/foundation/layout/PaddingValues;)V +Landroidx/compose/foundation/layout/PaddingValuesModifier$measure$2; +HSPLandroidx/compose/foundation/layout/PaddingValuesModifier$measure$2;->(Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/foundation/layout/PaddingValuesModifier;)V +HSPLandroidx/compose/foundation/layout/PaddingValuesModifier$measure$2;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/foundation/layout/PaddingValuesModifier$measure$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/layout/RowColumnImplKt; +HSPLandroidx/compose/foundation/layout/RowColumnImplKt;->getCrossAxisAlignment(Landroidx/compose/foundation/layout/RowColumnParentData;)Landroidx/compose/foundation/layout/CrossAxisAlignment; +HSPLandroidx/compose/foundation/layout/RowColumnImplKt;->getFill(Landroidx/compose/foundation/layout/RowColumnParentData;)Z +HSPLandroidx/compose/foundation/layout/RowColumnImplKt;->getRowColumnParentData(Landroidx/compose/ui/layout/IntrinsicMeasurable;)Landroidx/compose/foundation/layout/RowColumnParentData; +HSPLandroidx/compose/foundation/layout/RowColumnImplKt;->getWeight(Landroidx/compose/foundation/layout/RowColumnParentData;)F +HSPLandroidx/compose/foundation/layout/RowColumnImplKt;->isRelative(Landroidx/compose/foundation/layout/RowColumnParentData;)Z +HSPLandroidx/compose/foundation/layout/RowColumnImplKt;->rowColumnMeasurePolicy-TDGSqEk(Landroidx/compose/foundation/layout/LayoutOrientation;Lkotlin/jvm/functions/Function5;FLandroidx/compose/foundation/layout/SizeMode;Landroidx/compose/foundation/layout/CrossAxisAlignment;)Landroidx/compose/ui/layout/MeasurePolicy; +Landroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1; +HSPLandroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1;->(Landroidx/compose/foundation/layout/LayoutOrientation;Lkotlin/jvm/functions/Function5;FLandroidx/compose/foundation/layout/SizeMode;Landroidx/compose/foundation/layout/CrossAxisAlignment;)V +HSPLandroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; +Landroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1$measure$1; +HSPLandroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1$measure$1;->(Landroidx/compose/foundation/layout/RowColumnMeasurementHelper;Landroidx/compose/foundation/layout/RowColumnMeasureHelperResult;Landroidx/compose/ui/layout/MeasureScope;)V +HSPLandroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/foundation/layout/RowColumnImplKt$rowColumnMeasurePolicy$1$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/layout/RowColumnMeasureHelperResult; +HSPLandroidx/compose/foundation/layout/RowColumnMeasureHelperResult;->(IIIII[I)V +HSPLandroidx/compose/foundation/layout/RowColumnMeasureHelperResult;->getBeforeCrossAxisAlignmentLine()I +HSPLandroidx/compose/foundation/layout/RowColumnMeasureHelperResult;->getCrossAxisSize()I +HSPLandroidx/compose/foundation/layout/RowColumnMeasureHelperResult;->getEndIndex()I +HSPLandroidx/compose/foundation/layout/RowColumnMeasureHelperResult;->getMainAxisPositions()[I +HSPLandroidx/compose/foundation/layout/RowColumnMeasureHelperResult;->getMainAxisSize()I +HSPLandroidx/compose/foundation/layout/RowColumnMeasureHelperResult;->getStartIndex()I +Landroidx/compose/foundation/layout/RowColumnMeasurementHelper; +HSPLandroidx/compose/foundation/layout/RowColumnMeasurementHelper;->(Landroidx/compose/foundation/layout/LayoutOrientation;Lkotlin/jvm/functions/Function5;FLandroidx/compose/foundation/layout/SizeMode;Landroidx/compose/foundation/layout/CrossAxisAlignment;Ljava/util/List;[Landroidx/compose/ui/layout/Placeable;)V +HSPLandroidx/compose/foundation/layout/RowColumnMeasurementHelper;->(Landroidx/compose/foundation/layout/LayoutOrientation;Lkotlin/jvm/functions/Function5;FLandroidx/compose/foundation/layout/SizeMode;Landroidx/compose/foundation/layout/CrossAxisAlignment;Ljava/util/List;[Landroidx/compose/ui/layout/Placeable;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/layout/RowColumnMeasurementHelper;->crossAxisSize(Landroidx/compose/ui/layout/Placeable;)I +HSPLandroidx/compose/foundation/layout/RowColumnMeasurementHelper;->getArrangementSpacing-D9Ej5fM()F +HSPLandroidx/compose/foundation/layout/RowColumnMeasurementHelper;->getCrossAxisPosition(Landroidx/compose/ui/layout/Placeable;Landroidx/compose/foundation/layout/RowColumnParentData;ILandroidx/compose/ui/unit/LayoutDirection;I)I +HSPLandroidx/compose/foundation/layout/RowColumnMeasurementHelper;->getMeasurables()Ljava/util/List; +HSPLandroidx/compose/foundation/layout/RowColumnMeasurementHelper;->getPlaceables()[Landroidx/compose/ui/layout/Placeable; +HSPLandroidx/compose/foundation/layout/RowColumnMeasurementHelper;->mainAxisPositions(I[I[ILandroidx/compose/ui/layout/MeasureScope;)[I +HSPLandroidx/compose/foundation/layout/RowColumnMeasurementHelper;->mainAxisSize(Landroidx/compose/ui/layout/Placeable;)I +HSPLandroidx/compose/foundation/layout/RowColumnMeasurementHelper;->measureWithoutPlacing-_EkL_-Y(Landroidx/compose/ui/layout/MeasureScope;JII)Landroidx/compose/foundation/layout/RowColumnMeasureHelperResult; +HSPLandroidx/compose/foundation/layout/RowColumnMeasurementHelper;->placeHelper(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/foundation/layout/RowColumnMeasureHelperResult;ILandroidx/compose/ui/unit/LayoutDirection;)V +Landroidx/compose/foundation/layout/RowColumnParentData; +HSPLandroidx/compose/foundation/layout/RowColumnParentData;->(FZLandroidx/compose/foundation/layout/CrossAxisAlignment;)V +HSPLandroidx/compose/foundation/layout/RowColumnParentData;->(FZLandroidx/compose/foundation/layout/CrossAxisAlignment;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/layout/RowColumnParentData;->getCrossAxisAlignment()Landroidx/compose/foundation/layout/CrossAxisAlignment; +HSPLandroidx/compose/foundation/layout/RowColumnParentData;->getFill()Z +HSPLandroidx/compose/foundation/layout/RowColumnParentData;->getWeight()F +HSPLandroidx/compose/foundation/layout/RowColumnParentData;->setFill(Z)V +HSPLandroidx/compose/foundation/layout/RowColumnParentData;->setWeight(F)V +Landroidx/compose/foundation/layout/RowKt; +HSPLandroidx/compose/foundation/layout/RowKt;->()V +HSPLandroidx/compose/foundation/layout/RowKt;->rowMeasurePolicy(Landroidx/compose/foundation/layout/Arrangement$Horizontal;Landroidx/compose/ui/Alignment$Vertical;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/layout/MeasurePolicy; +Landroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1; +HSPLandroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1;->()V +HSPLandroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1;->()V +HSPLandroidx/compose/foundation/layout/RowKt$DefaultRowMeasurePolicy$1;->invoke(I[ILandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;[I)V +HSPLandroidx/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; +Landroidx/compose/foundation/layout/RowKt$rowMeasurePolicy$1$1; +HSPLandroidx/compose/foundation/layout/RowKt$rowMeasurePolicy$1$1;->(Landroidx/compose/foundation/layout/Arrangement$Horizontal;)V +HSPLandroidx/compose/foundation/layout/RowKt$rowMeasurePolicy$1$1;->invoke(I[ILandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;[I)V +HSPLandroidx/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; +Landroidx/compose/foundation/layout/RowScope; +HSPLandroidx/compose/foundation/layout/RowScope;->weight$default(Landroidx/compose/foundation/layout/RowScope;Landroidx/compose/ui/Modifier;FZILjava/lang/Object;)Landroidx/compose/ui/Modifier; +Landroidx/compose/foundation/layout/RowScopeInstance; +HSPLandroidx/compose/foundation/layout/RowScopeInstance;->()V +HSPLandroidx/compose/foundation/layout/RowScopeInstance;->()V +HSPLandroidx/compose/foundation/layout/RowScopeInstance;->weight(Landroidx/compose/ui/Modifier;FZ)Landroidx/compose/ui/Modifier; +Landroidx/compose/foundation/layout/SizeElement; +HSPLandroidx/compose/foundation/layout/SizeElement;->(FFFFZLkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/foundation/layout/SizeElement;->(FFFFZLkotlin/jvm/functions/Function1;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/layout/SizeElement;->(FFFFZLkotlin/jvm/functions/Function1;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/layout/SizeElement;->create()Landroidx/compose/foundation/layout/SizeNode; +HSPLandroidx/compose/foundation/layout/SizeElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/foundation/layout/SizeElement;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/foundation/layout/SizeElement;->update(Landroidx/compose/foundation/layout/SizeNode;)V +HSPLandroidx/compose/foundation/layout/SizeElement;->update(Landroidx/compose/ui/Modifier$Node;)V +Landroidx/compose/foundation/layout/SizeKt; +HSPLandroidx/compose/foundation/layout/SizeKt;->()V +HSPLandroidx/compose/foundation/layout/SizeKt;->defaultMinSize-VpY3zN4$default(Landroidx/compose/ui/Modifier;FFILjava/lang/Object;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/layout/SizeKt;->defaultMinSize-VpY3zN4(Landroidx/compose/ui/Modifier;FF)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/layout/SizeKt;->fillMaxHeight$default(Landroidx/compose/ui/Modifier;FILjava/lang/Object;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/layout/SizeKt;->fillMaxHeight(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/layout/SizeKt;->fillMaxSize$default(Landroidx/compose/ui/Modifier;FILjava/lang/Object;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/layout/SizeKt;->fillMaxSize(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/layout/SizeKt;->fillMaxWidth$default(Landroidx/compose/ui/Modifier;FILjava/lang/Object;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/layout/SizeKt;->fillMaxWidth(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/layout/SizeKt;->height-3ABfNKs(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/layout/SizeKt;->heightIn-VpY3zN4$default(Landroidx/compose/ui/Modifier;FFILjava/lang/Object;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/layout/SizeKt;->heightIn-VpY3zN4(Landroidx/compose/ui/Modifier;FF)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/layout/SizeKt;->requiredSize-3ABfNKs(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/layout/SizeKt;->size-3ABfNKs(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/layout/SizeKt;->width-3ABfNKs(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/layout/SizeKt;->widthIn-VpY3zN4$default(Landroidx/compose/ui/Modifier;FFILjava/lang/Object;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/layout/SizeKt;->widthIn-VpY3zN4(Landroidx/compose/ui/Modifier;FF)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/layout/SizeKt;->wrapContentSize$default(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Alignment;ZILjava/lang/Object;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/layout/SizeKt;->wrapContentSize(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Alignment;Z)Landroidx/compose/ui/Modifier; +Landroidx/compose/foundation/layout/SizeMode; +HSPLandroidx/compose/foundation/layout/SizeMode;->$values()[Landroidx/compose/foundation/layout/SizeMode; +HSPLandroidx/compose/foundation/layout/SizeMode;->()V +HSPLandroidx/compose/foundation/layout/SizeMode;->(Ljava/lang/String;I)V +Landroidx/compose/foundation/layout/SizeNode; +HSPLandroidx/compose/foundation/layout/SizeNode;->(FFFFZ)V +HSPLandroidx/compose/foundation/layout/SizeNode;->(FFFFZLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/layout/SizeNode;->getTargetConstraints-OenEA2s(Landroidx/compose/ui/unit/Density;)J +HSPLandroidx/compose/foundation/layout/SizeNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; +HSPLandroidx/compose/foundation/layout/SizeNode;->setEnforceIncoming(Z)V +HSPLandroidx/compose/foundation/layout/SizeNode;->setMaxHeight-0680j_4(F)V +HSPLandroidx/compose/foundation/layout/SizeNode;->setMaxWidth-0680j_4(F)V +HSPLandroidx/compose/foundation/layout/SizeNode;->setMinHeight-0680j_4(F)V +HSPLandroidx/compose/foundation/layout/SizeNode;->setMinWidth-0680j_4(F)V +Landroidx/compose/foundation/layout/SizeNode$measure$1; +HSPLandroidx/compose/foundation/layout/SizeNode$measure$1;->(Landroidx/compose/ui/layout/Placeable;)V +HSPLandroidx/compose/foundation/layout/SizeNode$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/foundation/layout/SizeNode$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/layout/SpacerKt; +HSPLandroidx/compose/foundation/layout/SpacerKt;->Spacer(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)V +Landroidx/compose/foundation/layout/SpacerMeasurePolicy; +HSPLandroidx/compose/foundation/layout/SpacerMeasurePolicy;->()V +HSPLandroidx/compose/foundation/layout/SpacerMeasurePolicy;->()V +HSPLandroidx/compose/foundation/layout/SpacerMeasurePolicy;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; +Landroidx/compose/foundation/layout/SpacerMeasurePolicy$measure$1$1; +HSPLandroidx/compose/foundation/layout/SpacerMeasurePolicy$measure$1$1;->()V +HSPLandroidx/compose/foundation/layout/SpacerMeasurePolicy$measure$1$1;->()V +HSPLandroidx/compose/foundation/layout/SpacerMeasurePolicy$measure$1$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/foundation/layout/SpacerMeasurePolicy$measure$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/layout/UnionInsets; +HSPLandroidx/compose/foundation/layout/UnionInsets;->(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/foundation/layout/WindowInsets;)V +HSPLandroidx/compose/foundation/layout/UnionInsets;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/foundation/layout/UnionInsets;->getBottom(Landroidx/compose/ui/unit/Density;)I +HSPLandroidx/compose/foundation/layout/UnionInsets;->getLeft(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I +HSPLandroidx/compose/foundation/layout/UnionInsets;->getRight(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;)I +HSPLandroidx/compose/foundation/layout/UnionInsets;->getTop(Landroidx/compose/ui/unit/Density;)I +Landroidx/compose/foundation/layout/UnionInsetsConsumingModifier; +HSPLandroidx/compose/foundation/layout/UnionInsetsConsumingModifier;->(Landroidx/compose/foundation/layout/WindowInsets;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/foundation/layout/UnionInsetsConsumingModifier;->calculateInsets(Landroidx/compose/foundation/layout/WindowInsets;)Landroidx/compose/foundation/layout/WindowInsets; +HSPLandroidx/compose/foundation/layout/UnionInsetsConsumingModifier;->equals(Ljava/lang/Object;)Z +Landroidx/compose/foundation/layout/UnspecifiedConstraintsElement; +HSPLandroidx/compose/foundation/layout/UnspecifiedConstraintsElement;->(FF)V +HSPLandroidx/compose/foundation/layout/UnspecifiedConstraintsElement;->(FFLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/layout/UnspecifiedConstraintsElement;->create()Landroidx/compose/foundation/layout/UnspecifiedConstraintsNode; +HSPLandroidx/compose/foundation/layout/UnspecifiedConstraintsElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/foundation/layout/UnspecifiedConstraintsElement;->equals(Ljava/lang/Object;)Z +Landroidx/compose/foundation/layout/UnspecifiedConstraintsNode; +HSPLandroidx/compose/foundation/layout/UnspecifiedConstraintsNode;->(FF)V +HSPLandroidx/compose/foundation/layout/UnspecifiedConstraintsNode;->(FFLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/layout/UnspecifiedConstraintsNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; +Landroidx/compose/foundation/layout/UnspecifiedConstraintsNode$measure$1; +HSPLandroidx/compose/foundation/layout/UnspecifiedConstraintsNode$measure$1;->(Landroidx/compose/ui/layout/Placeable;)V +HSPLandroidx/compose/foundation/layout/UnspecifiedConstraintsNode$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/foundation/layout/UnspecifiedConstraintsNode$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/layout/ValueInsets; +HSPLandroidx/compose/foundation/layout/ValueInsets;->(Landroidx/compose/foundation/layout/InsetsValues;Ljava/lang/String;)V +HSPLandroidx/compose/foundation/layout/ValueInsets;->setValue$foundation_layout_release(Landroidx/compose/foundation/layout/InsetsValues;)V +Landroidx/compose/foundation/layout/WindowInsets; +HSPLandroidx/compose/foundation/layout/WindowInsets;->()V +Landroidx/compose/foundation/layout/WindowInsets$Companion; +HSPLandroidx/compose/foundation/layout/WindowInsets$Companion;->()V +HSPLandroidx/compose/foundation/layout/WindowInsets$Companion;->()V +Landroidx/compose/foundation/layout/WindowInsetsHolder; +HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->()V +HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->(Landroidx/core/view/WindowInsetsCompat;Landroid/view/View;)V +HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->(Landroidx/core/view/WindowInsetsCompat;Landroid/view/View;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->access$getViewMap$cp()Ljava/util/WeakHashMap; +HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->decrementAccessors(Landroid/view/View;)V +HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->getConsumes()Z +HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->getDisplayCutout()Landroidx/compose/foundation/layout/AndroidWindowInsets; +HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->getIme()Landroidx/compose/foundation/layout/AndroidWindowInsets; +HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->getNavigationBars()Landroidx/compose/foundation/layout/AndroidWindowInsets; +HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->getStatusBars()Landroidx/compose/foundation/layout/AndroidWindowInsets; +HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->getSystemBars()Landroidx/compose/foundation/layout/AndroidWindowInsets; +HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->incrementAccessors(Landroid/view/View;)V +HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->update$default(Landroidx/compose/foundation/layout/WindowInsetsHolder;Landroidx/core/view/WindowInsetsCompat;IILjava/lang/Object;)V +HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->update(Landroidx/core/view/WindowInsetsCompat;I)V +HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->updateImeAnimationSource(Landroidx/core/view/WindowInsetsCompat;)V +HSPLandroidx/compose/foundation/layout/WindowInsetsHolder;->updateImeAnimationTarget(Landroidx/core/view/WindowInsetsCompat;)V +Landroidx/compose/foundation/layout/WindowInsetsHolder$Companion; +HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion;->()V +HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion;->access$systemInsets(Landroidx/compose/foundation/layout/WindowInsetsHolder$Companion;Landroidx/core/view/WindowInsetsCompat;ILjava/lang/String;)Landroidx/compose/foundation/layout/AndroidWindowInsets; +HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion;->access$valueInsetsIgnoringVisibility(Landroidx/compose/foundation/layout/WindowInsetsHolder$Companion;Landroidx/core/view/WindowInsetsCompat;ILjava/lang/String;)Landroidx/compose/foundation/layout/ValueInsets; +HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion;->current(Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/layout/WindowInsetsHolder; +HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion;->getOrCreateFor(Landroid/view/View;)Landroidx/compose/foundation/layout/WindowInsetsHolder; +HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion;->systemInsets(Landroidx/core/view/WindowInsetsCompat;ILjava/lang/String;)Landroidx/compose/foundation/layout/AndroidWindowInsets; +HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion;->valueInsetsIgnoringVisibility(Landroidx/core/view/WindowInsetsCompat;ILjava/lang/String;)Landroidx/compose/foundation/layout/ValueInsets; +Landroidx/compose/foundation/layout/WindowInsetsHolder$Companion$current$1; +HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion$current$1;->(Landroidx/compose/foundation/layout/WindowInsetsHolder;Landroid/view/View;)V +HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion$current$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult; +HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion$current$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/layout/WindowInsetsHolder$Companion$current$1$invoke$$inlined$onDispose$1; +HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion$current$1$invoke$$inlined$onDispose$1;->(Landroidx/compose/foundation/layout/WindowInsetsHolder;Landroid/view/View;)V +HSPLandroidx/compose/foundation/layout/WindowInsetsHolder$Companion$current$1$invoke$$inlined$onDispose$1;->dispose()V +Landroidx/compose/foundation/layout/WindowInsetsKt; +HSPLandroidx/compose/foundation/layout/WindowInsetsKt;->WindowInsets(IIII)Landroidx/compose/foundation/layout/WindowInsets; +HSPLandroidx/compose/foundation/layout/WindowInsetsKt;->WindowInsets-a9UjIt4$default(FFFFILjava/lang/Object;)Landroidx/compose/foundation/layout/WindowInsets; +HSPLandroidx/compose/foundation/layout/WindowInsetsKt;->WindowInsets-a9UjIt4(FFFF)Landroidx/compose/foundation/layout/WindowInsets; +HSPLandroidx/compose/foundation/layout/WindowInsetsKt;->add(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/foundation/layout/WindowInsets;)Landroidx/compose/foundation/layout/WindowInsets; +HSPLandroidx/compose/foundation/layout/WindowInsetsKt;->asPaddingValues(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/layout/PaddingValues; +HSPLandroidx/compose/foundation/layout/WindowInsetsKt;->asPaddingValues(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/ui/unit/Density;)Landroidx/compose/foundation/layout/PaddingValues; +HSPLandroidx/compose/foundation/layout/WindowInsetsKt;->exclude(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/foundation/layout/WindowInsets;)Landroidx/compose/foundation/layout/WindowInsets; +HSPLandroidx/compose/foundation/layout/WindowInsetsKt;->only-bOOhFvg(Landroidx/compose/foundation/layout/WindowInsets;I)Landroidx/compose/foundation/layout/WindowInsets; +HSPLandroidx/compose/foundation/layout/WindowInsetsKt;->union(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/foundation/layout/WindowInsets;)Landroidx/compose/foundation/layout/WindowInsets; +Landroidx/compose/foundation/layout/WindowInsetsPaddingKt; +HSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt;->()V +HSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt;->consumeWindowInsets(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/layout/WindowInsets;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt;->getModifierLocalConsumedWindowInsets()Landroidx/compose/ui/modifier/ProvidableModifierLocal; +HSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt;->onConsumedWindowInsetsChanged(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt;->windowInsetsPadding(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/layout/WindowInsets;)Landroidx/compose/ui/Modifier; +Landroidx/compose/foundation/layout/WindowInsetsPaddingKt$ModifierLocalConsumedWindowInsets$1; +HSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt$ModifierLocalConsumedWindowInsets$1;->()V +HSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt$ModifierLocalConsumedWindowInsets$1;->()V +HSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt$ModifierLocalConsumedWindowInsets$1;->invoke()Landroidx/compose/foundation/layout/WindowInsets; +HSPLandroidx/compose/foundation/layout/WindowInsetsPaddingKt$ModifierLocalConsumedWindowInsets$1;->invoke()Ljava/lang/Object; +Landroidx/compose/foundation/layout/WindowInsetsSides; +HSPLandroidx/compose/foundation/layout/WindowInsetsSides;->()V +HSPLandroidx/compose/foundation/layout/WindowInsetsSides;->access$getAllowLeftInLtr$cp()I +HSPLandroidx/compose/foundation/layout/WindowInsetsSides;->access$getAllowRightInLtr$cp()I +HSPLandroidx/compose/foundation/layout/WindowInsetsSides;->access$getBottom$cp()I +HSPLandroidx/compose/foundation/layout/WindowInsetsSides;->access$getHorizontal$cp()I +HSPLandroidx/compose/foundation/layout/WindowInsetsSides;->access$getTop$cp()I +HSPLandroidx/compose/foundation/layout/WindowInsetsSides;->constructor-impl(I)I +HSPLandroidx/compose/foundation/layout/WindowInsetsSides;->equals-impl0(II)Z +HSPLandroidx/compose/foundation/layout/WindowInsetsSides;->hasAny-bkgdKaI$foundation_layout_release(II)Z +HSPLandroidx/compose/foundation/layout/WindowInsetsSides;->plus-gK_yJZ4(II)I +Landroidx/compose/foundation/layout/WindowInsetsSides$Companion; +HSPLandroidx/compose/foundation/layout/WindowInsetsSides$Companion;->()V +HSPLandroidx/compose/foundation/layout/WindowInsetsSides$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/layout/WindowInsetsSides$Companion;->getAllowLeftInLtr-JoeWqyM$foundation_layout_release()I +HSPLandroidx/compose/foundation/layout/WindowInsetsSides$Companion;->getAllowRightInLtr-JoeWqyM$foundation_layout_release()I +HSPLandroidx/compose/foundation/layout/WindowInsetsSides$Companion;->getBottom-JoeWqyM()I +HSPLandroidx/compose/foundation/layout/WindowInsetsSides$Companion;->getHorizontal-JoeWqyM()I +HSPLandroidx/compose/foundation/layout/WindowInsetsSides$Companion;->getTop-JoeWqyM()I +Landroidx/compose/foundation/layout/WindowInsets_androidKt; +HSPLandroidx/compose/foundation/layout/WindowInsets_androidKt;->ValueInsets(Landroidx/core/graphics/Insets;Ljava/lang/String;)Landroidx/compose/foundation/layout/ValueInsets; +HSPLandroidx/compose/foundation/layout/WindowInsets_androidKt;->getDisplayCutout(Landroidx/compose/foundation/layout/WindowInsets$Companion;Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/layout/WindowInsets; +HSPLandroidx/compose/foundation/layout/WindowInsets_androidKt;->getIme(Landroidx/compose/foundation/layout/WindowInsets$Companion;Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/layout/WindowInsets; +HSPLandroidx/compose/foundation/layout/WindowInsets_androidKt;->getNavigationBars(Landroidx/compose/foundation/layout/WindowInsets$Companion;Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/layout/WindowInsets; +HSPLandroidx/compose/foundation/layout/WindowInsets_androidKt;->getStatusBars(Landroidx/compose/foundation/layout/WindowInsets$Companion;Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/layout/WindowInsets; +HSPLandroidx/compose/foundation/layout/WindowInsets_androidKt;->getSystemBars(Landroidx/compose/foundation/layout/WindowInsets$Companion;Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/layout/WindowInsets; +HSPLandroidx/compose/foundation/layout/WindowInsets_androidKt;->toInsetsValues(Landroidx/core/graphics/Insets;)Landroidx/compose/foundation/layout/InsetsValues; +Landroidx/compose/foundation/layout/WrapContentElement; +HSPLandroidx/compose/foundation/layout/WrapContentElement;->()V +HSPLandroidx/compose/foundation/layout/WrapContentElement;->(Landroidx/compose/foundation/layout/Direction;ZLkotlin/jvm/functions/Function2;Ljava/lang/Object;Ljava/lang/String;)V +HSPLandroidx/compose/foundation/layout/WrapContentElement;->create()Landroidx/compose/foundation/layout/WrapContentNode; +HSPLandroidx/compose/foundation/layout/WrapContentElement;->create()Landroidx/compose/ui/Modifier$Node; +Landroidx/compose/foundation/layout/WrapContentElement$Companion; +HSPLandroidx/compose/foundation/layout/WrapContentElement$Companion;->()V +HSPLandroidx/compose/foundation/layout/WrapContentElement$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/layout/WrapContentElement$Companion;->height(Landroidx/compose/ui/Alignment$Vertical;Z)Landroidx/compose/foundation/layout/WrapContentElement; +HSPLandroidx/compose/foundation/layout/WrapContentElement$Companion;->size(Landroidx/compose/ui/Alignment;Z)Landroidx/compose/foundation/layout/WrapContentElement; +HSPLandroidx/compose/foundation/layout/WrapContentElement$Companion;->width(Landroidx/compose/ui/Alignment$Horizontal;Z)Landroidx/compose/foundation/layout/WrapContentElement; +Landroidx/compose/foundation/layout/WrapContentElement$Companion$height$1; +HSPLandroidx/compose/foundation/layout/WrapContentElement$Companion$height$1;->(Landroidx/compose/ui/Alignment$Vertical;)V +Landroidx/compose/foundation/layout/WrapContentElement$Companion$size$1; +HSPLandroidx/compose/foundation/layout/WrapContentElement$Companion$size$1;->(Landroidx/compose/ui/Alignment;)V +HSPLandroidx/compose/foundation/layout/WrapContentElement$Companion$size$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/layout/WrapContentElement$Companion$size$1;->invoke-5SAbXVA(JLandroidx/compose/ui/unit/LayoutDirection;)J +Landroidx/compose/foundation/layout/WrapContentElement$Companion$width$1; +HSPLandroidx/compose/foundation/layout/WrapContentElement$Companion$width$1;->(Landroidx/compose/ui/Alignment$Horizontal;)V +Landroidx/compose/foundation/layout/WrapContentNode; +HSPLandroidx/compose/foundation/layout/WrapContentNode;->(Landroidx/compose/foundation/layout/Direction;ZLkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/foundation/layout/WrapContentNode;->getAlignmentCallback()Lkotlin/jvm/functions/Function2; +HSPLandroidx/compose/foundation/layout/WrapContentNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; +Landroidx/compose/foundation/layout/WrapContentNode$measure$1; +HSPLandroidx/compose/foundation/layout/WrapContentNode$measure$1;->(Landroidx/compose/foundation/layout/WrapContentNode;ILandroidx/compose/ui/layout/Placeable;ILandroidx/compose/ui/layout/MeasureScope;)V +HSPLandroidx/compose/foundation/layout/WrapContentNode$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/foundation/layout/WrapContentNode$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/lazy/EmptyLazyListLayoutInfo; +HSPLandroidx/compose/foundation/lazy/EmptyLazyListLayoutInfo;->()V +HSPLandroidx/compose/foundation/lazy/EmptyLazyListLayoutInfo;->()V +Landroidx/compose/foundation/lazy/LazyDslKt; +HSPLandroidx/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 +Landroidx/compose/foundation/lazy/LazyItemScope; +Landroidx/compose/foundation/lazy/LazyItemScopeImpl; +HSPLandroidx/compose/foundation/lazy/LazyItemScopeImpl;->()V +HSPLandroidx/compose/foundation/lazy/LazyItemScopeImpl;->setMaxSize(II)V +Landroidx/compose/foundation/lazy/LazyLayoutSemanticStateKt; +HSPLandroidx/compose/foundation/lazy/LazyLayoutSemanticStateKt;->LazyLayoutSemanticState(Landroidx/compose/foundation/lazy/LazyListState;Z)Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticState; +Landroidx/compose/foundation/lazy/LazyLayoutSemanticStateKt$LazyLayoutSemanticState$1; +HSPLandroidx/compose/foundation/lazy/LazyLayoutSemanticStateKt$LazyLayoutSemanticState$1;->(Landroidx/compose/foundation/lazy/LazyListState;Z)V +HSPLandroidx/compose/foundation/lazy/LazyLayoutSemanticStateKt$LazyLayoutSemanticState$1;->collectionInfo()Landroidx/compose/ui/semantics/CollectionInfo; +HSPLandroidx/compose/foundation/lazy/LazyLayoutSemanticStateKt$LazyLayoutSemanticState$1;->getCanScrollForward()Z +HSPLandroidx/compose/foundation/lazy/LazyLayoutSemanticStateKt$LazyLayoutSemanticState$1;->getCurrentPosition()F +Landroidx/compose/foundation/lazy/LazyListAnimateScrollScope; +HSPLandroidx/compose/foundation/lazy/LazyListAnimateScrollScope;->(Landroidx/compose/foundation/lazy/LazyListState;)V +Landroidx/compose/foundation/lazy/LazyListBeyondBoundsModifierKt; +HSPLandroidx/compose/foundation/lazy/LazyListBeyondBoundsModifierKt;->lazyListBeyondBoundsModifier(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/LazyListState;IZLandroidx/compose/foundation/gestures/Orientation;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier; +Landroidx/compose/foundation/lazy/LazyListBeyondBoundsState; +HSPLandroidx/compose/foundation/lazy/LazyListBeyondBoundsState;->(Landroidx/compose/foundation/lazy/LazyListState;I)V +Landroidx/compose/foundation/lazy/LazyListInterval; +HSPLandroidx/compose/foundation/lazy/LazyListInterval;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function4;)V +HSPLandroidx/compose/foundation/lazy/LazyListInterval;->getItem()Lkotlin/jvm/functions/Function4; +HSPLandroidx/compose/foundation/lazy/LazyListInterval;->getKey()Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/foundation/lazy/LazyListInterval;->getType()Lkotlin/jvm/functions/Function1; +Landroidx/compose/foundation/lazy/LazyListIntervalContent; +HSPLandroidx/compose/foundation/lazy/LazyListIntervalContent;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/foundation/lazy/LazyListIntervalContent;->getHeaderIndexes()Ljava/util/List; +HSPLandroidx/compose/foundation/lazy/LazyListIntervalContent;->getIntervals()Landroidx/compose/foundation/lazy/layout/IntervalList; +HSPLandroidx/compose/foundation/lazy/LazyListIntervalContent;->getIntervals()Landroidx/compose/foundation/lazy/layout/MutableIntervalList; +HSPLandroidx/compose/foundation/lazy/LazyListIntervalContent;->item(Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function3;)V +HSPLandroidx/compose/foundation/lazy/LazyListIntervalContent;->items(ILkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function4;)V +Landroidx/compose/foundation/lazy/LazyListIntervalContent$item$1; +HSPLandroidx/compose/foundation/lazy/LazyListIntervalContent$item$1;->(Ljava/lang/Object;)V +HSPLandroidx/compose/foundation/lazy/LazyListIntervalContent$item$1;->invoke(I)Ljava/lang/Object; +HSPLandroidx/compose/foundation/lazy/LazyListIntervalContent$item$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/lazy/LazyListIntervalContent$item$2; +HSPLandroidx/compose/foundation/lazy/LazyListIntervalContent$item$2;->(Ljava/lang/Object;)V +HSPLandroidx/compose/foundation/lazy/LazyListIntervalContent$item$2;->invoke(I)Ljava/lang/Object; +HSPLandroidx/compose/foundation/lazy/LazyListIntervalContent$item$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/lazy/LazyListIntervalContent$item$3; +HSPLandroidx/compose/foundation/lazy/LazyListIntervalContent$item$3;->(Lkotlin/jvm/functions/Function3;)V +HSPLandroidx/compose/foundation/lazy/LazyListIntervalContent$item$3;->invoke(Landroidx/compose/foundation/lazy/LazyItemScope;ILandroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/foundation/lazy/LazyListIntervalContent$item$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/lazy/LazyListItemInfo; +Landroidx/compose/foundation/lazy/LazyListItemPlacementAnimator; +HSPLandroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;->()V +HSPLandroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;->getHasAnimations(Landroidx/compose/foundation/lazy/LazyListMeasuredItem;)Z +HSPLandroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;->getNode(Ljava/lang/Object;)Landroidx/compose/foundation/lazy/layout/LazyLayoutAnimateItemModifierNode; +HSPLandroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;->onMeasured(IIILjava/util/List;Landroidx/compose/foundation/lazy/LazyListMeasuredItemProvider;Z)V +HSPLandroidx/compose/foundation/lazy/LazyListItemPlacementAnimator;->reset()V +Landroidx/compose/foundation/lazy/LazyListItemProvider; +Landroidx/compose/foundation/lazy/LazyListItemProviderImpl; +HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->(Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/lazy/LazyListIntervalContent;Landroidx/compose/foundation/lazy/LazyItemScopeImpl;Landroidx/compose/foundation/lazy/layout/LazyLayoutKeyIndexMap;)V +HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->Item(ILjava/lang/Object;Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->access$getIntervalContent$p(Landroidx/compose/foundation/lazy/LazyListItemProviderImpl;)Landroidx/compose/foundation/lazy/LazyListIntervalContent; +HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getContentType(I)Ljava/lang/Object; +HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getHeaderIndexes()Ljava/util/List; +HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getIndex(Ljava/lang/Object;)I +HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getItemCount()I +HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getItemScope()Landroidx/compose/foundation/lazy/LazyItemScopeImpl; +HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getKey(I)Ljava/lang/Object; +HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl;->getKeyIndexMap()Landroidx/compose/foundation/lazy/layout/LazyLayoutKeyIndexMap; +Landroidx/compose/foundation/lazy/LazyListItemProviderImpl$Item$1; +HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl$Item$1;->(Landroidx/compose/foundation/lazy/LazyListItemProviderImpl;I)V +HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl$Item$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/foundation/lazy/LazyListItemProviderImpl$Item$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/lazy/LazyListItemProviderKt; +HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt;->rememberLazyListItemProviderLambda(Landroidx/compose/foundation/lazy/LazyListState;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;I)Lkotlin/jvm/functions/Function0; +Landroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProviderLambda$1$1; +HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProviderLambda$1$1;->(Ljava/lang/Object;)V +HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProviderLambda$1$1;->get()Ljava/lang/Object; +Landroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProviderLambda$1$intervalContentState$1; +HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProviderLambda$1$intervalContentState$1;->(Landroidx/compose/runtime/State;)V +HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProviderLambda$1$intervalContentState$1;->invoke()Landroidx/compose/foundation/lazy/LazyListIntervalContent; +HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProviderLambda$1$intervalContentState$1;->invoke()Ljava/lang/Object; +Landroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProviderLambda$1$itemProviderState$1; +HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProviderLambda$1$itemProviderState$1;->(Landroidx/compose/runtime/State;Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/lazy/LazyItemScopeImpl;)V +HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProviderLambda$1$itemProviderState$1;->invoke()Landroidx/compose/foundation/lazy/LazyListItemProviderImpl; +HSPLandroidx/compose/foundation/lazy/LazyListItemProviderKt$rememberLazyListItemProviderLambda$1$itemProviderState$1;->invoke()Ljava/lang/Object; +Landroidx/compose/foundation/lazy/LazyListKt; +HSPLandroidx/compose/foundation/lazy/LazyListKt;->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 +HSPLandroidx/compose/foundation/lazy/LazyListKt;->ScrollPositionUpdater(Lkotlin/jvm/functions/Function0;Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/foundation/lazy/LazyListKt;->rememberLazyListMeasurePolicy(Lkotlin/jvm/functions/Function0;Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/layout/PaddingValues;ZZILandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/ui/Alignment$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/runtime/Composer;II)Lkotlin/jvm/functions/Function2; +Landroidx/compose/foundation/lazy/LazyListKt$ScrollPositionUpdater$1; +HSPLandroidx/compose/foundation/lazy/LazyListKt$ScrollPositionUpdater$1;->(Lkotlin/jvm/functions/Function0;Landroidx/compose/foundation/lazy/LazyListState;I)V +Landroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1; +HSPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1;->(ZLandroidx/compose/foundation/layout/PaddingValues;ZLandroidx/compose/foundation/lazy/LazyListState;Lkotlin/jvm/functions/Function0;Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;ILandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/ui/Alignment$Vertical;)V +HSPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1;->invoke-0kLqBqw(Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScope;J)Landroidx/compose/foundation/lazy/LazyListMeasureResult; +Landroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$2; +HSPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$2;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScope;JII)V +HSPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$2;->invoke(IILkotlin/jvm/functions/Function1;)Landroidx/compose/ui/layout/MeasureResult; +HSPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1; +HSPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1;->(JZLandroidx/compose/foundation/lazy/LazyListItemProvider;Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScope;IILandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/ui/Alignment$Vertical;ZIIJ)V +HSPLandroidx/compose/foundation/lazy/LazyListKt$rememberLazyListMeasurePolicy$1$1$measuredItemProvider$1;->createItem(ILjava/lang/Object;Ljava/lang/Object;Ljava/util/List;)Landroidx/compose/foundation/lazy/LazyListMeasuredItem; +Landroidx/compose/foundation/lazy/LazyListLayoutInfo; +Landroidx/compose/foundation/lazy/LazyListMeasureKt; +HSPLandroidx/compose/foundation/lazy/LazyListMeasureKt;->calculateItemsOffsets$reverseAware(IZI)I +HSPLandroidx/compose/foundation/lazy/LazyListMeasureKt;->calculateItemsOffsets(Ljava/util/List;Ljava/util/List;Ljava/util/List;IIIIIZLandroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/foundation/layout/Arrangement$Horizontal;ZLandroidx/compose/ui/unit/Density;)Ljava/util/List; +HSPLandroidx/compose/foundation/lazy/LazyListMeasureKt;->createItemsAfterList(Ljava/util/List;Landroidx/compose/foundation/lazy/LazyListMeasuredItemProvider;IILjava/util/List;)Ljava/util/List; +HSPLandroidx/compose/foundation/lazy/LazyListMeasureKt;->createItemsBeforeList(ILandroidx/compose/foundation/lazy/LazyListMeasuredItemProvider;ILjava/util/List;)Ljava/util/List; +HSPLandroidx/compose/foundation/lazy/LazyListMeasureKt;->measureLazyList-CD5nmq0(ILandroidx/compose/foundation/lazy/LazyListMeasuredItemProvider;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;Lkotlin/jvm/functions/Function3;)Landroidx/compose/foundation/lazy/LazyListMeasureResult; +Landroidx/compose/foundation/lazy/LazyListMeasureKt$measureLazyList$5; +HSPLandroidx/compose/foundation/lazy/LazyListMeasureKt$measureLazyList$5;->(Ljava/util/List;Landroidx/compose/foundation/lazy/LazyListMeasuredItem;)V +HSPLandroidx/compose/foundation/lazy/LazyListMeasureKt$measureLazyList$5;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/foundation/lazy/LazyListMeasureKt$measureLazyList$5;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/lazy/LazyListMeasureResult; +HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->(Landroidx/compose/foundation/lazy/LazyListMeasuredItem;IZFLandroidx/compose/ui/layout/MeasureResult;Ljava/util/List;IIIZLandroidx/compose/foundation/gestures/Orientation;II)V +HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getAlignmentLines()Ljava/util/Map; +HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getCanScrollForward()Z +HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getConsumedScroll()F +HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getFirstVisibleItem()Landroidx/compose/foundation/lazy/LazyListMeasuredItem; +HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getFirstVisibleItemScrollOffset()I +HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getHeight()I +HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getReverseLayout()Z +HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getTotalItemsCount()I +HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getViewportEndOffset()I +HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getVisibleItemsInfo()Ljava/util/List; +HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->getWidth()I +HSPLandroidx/compose/foundation/lazy/LazyListMeasureResult;->placeChildren()V +Landroidx/compose/foundation/lazy/LazyListMeasuredItem; +HSPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->(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 +HSPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->(ILjava/util/List;ZLandroidx/compose/ui/Alignment$Horizontal;Landroidx/compose/ui/Alignment$Vertical;Landroidx/compose/ui/unit/LayoutDirection;ZIIIJLjava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->getCrossAxisSize()I +HSPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->getIndex()I +HSPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->getKey()Ljava/lang/Object; +HSPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->getMainAxisSize(Landroidx/compose/ui/layout/Placeable;)I +HSPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->getOffset()I +HSPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->getOffset-Bjo55l4(I)J +HSPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->getParentData(I)Ljava/lang/Object; +HSPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->getPlaceablesCount()I +HSPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->getSize()I +HSPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->getSizeWithSpacings()I +HSPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->place(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/foundation/lazy/LazyListMeasuredItem;->position(III)V +Landroidx/compose/foundation/lazy/LazyListMeasuredItemProvider; +HSPLandroidx/compose/foundation/lazy/LazyListMeasuredItemProvider;->(JZLandroidx/compose/foundation/lazy/LazyListItemProvider;Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScope;)V +HSPLandroidx/compose/foundation/lazy/LazyListMeasuredItemProvider;->(JZLandroidx/compose/foundation/lazy/LazyListItemProvider;Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScope;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/lazy/LazyListMeasuredItemProvider;->getAndMeasure(I)Landroidx/compose/foundation/lazy/LazyListMeasuredItem; +HSPLandroidx/compose/foundation/lazy/LazyListMeasuredItemProvider;->getChildConstraints-msEJaDk()J +Landroidx/compose/foundation/lazy/LazyListScope; +HSPLandroidx/compose/foundation/lazy/LazyListScope;->item$default(Landroidx/compose/foundation/lazy/LazyListScope;Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function3;ILjava/lang/Object;)V +Landroidx/compose/foundation/lazy/LazyListScrollPosition; +HSPLandroidx/compose/foundation/lazy/LazyListScrollPosition;->(II)V +HSPLandroidx/compose/foundation/lazy/LazyListScrollPosition;->getIndex()I +HSPLandroidx/compose/foundation/lazy/LazyListScrollPosition;->getNearestRangeState()Landroidx/compose/foundation/lazy/layout/LazyLayoutNearestRangeState; +HSPLandroidx/compose/foundation/lazy/LazyListScrollPosition;->getScrollOffset()I +HSPLandroidx/compose/foundation/lazy/LazyListScrollPosition;->requestPosition(II)V +HSPLandroidx/compose/foundation/lazy/LazyListScrollPosition;->setIndex(I)V +HSPLandroidx/compose/foundation/lazy/LazyListScrollPosition;->setScrollOffset(I)V +HSPLandroidx/compose/foundation/lazy/LazyListScrollPosition;->update(II)V +HSPLandroidx/compose/foundation/lazy/LazyListScrollPosition;->updateFromMeasureResult(Landroidx/compose/foundation/lazy/LazyListMeasureResult;)V +HSPLandroidx/compose/foundation/lazy/LazyListScrollPosition;->updateScrollPositionIfTheFirstItemWasMoved(Landroidx/compose/foundation/lazy/LazyListItemProvider;I)I +Landroidx/compose/foundation/lazy/LazyListSemanticsKt; +HSPLandroidx/compose/foundation/lazy/LazyListSemanticsKt;->rememberLazyListSemanticState(Landroidx/compose/foundation/lazy/LazyListState;ZLandroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticState; +Landroidx/compose/foundation/lazy/LazyListState; +HSPLandroidx/compose/foundation/lazy/LazyListState;->()V +HSPLandroidx/compose/foundation/lazy/LazyListState;->(II)V +HSPLandroidx/compose/foundation/lazy/LazyListState;->access$setRemeasurement$p(Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/ui/layout/Remeasurement;)V +HSPLandroidx/compose/foundation/lazy/LazyListState;->applyMeasureResult$foundation_release(Landroidx/compose/foundation/lazy/LazyListMeasureResult;)V +HSPLandroidx/compose/foundation/lazy/LazyListState;->cancelPrefetchIfVisibleItemsChanged(Landroidx/compose/foundation/lazy/LazyListLayoutInfo;)V +HSPLandroidx/compose/foundation/lazy/LazyListState;->getAwaitLayoutModifier$foundation_release()Landroidx/compose/foundation/lazy/layout/AwaitFirstLayoutModifier; +HSPLandroidx/compose/foundation/lazy/LazyListState;->getBeyondBoundsInfo$foundation_release()Landroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsInfo; +HSPLandroidx/compose/foundation/lazy/LazyListState;->getCanScrollForward()Z +HSPLandroidx/compose/foundation/lazy/LazyListState;->getFirstVisibleItemIndex()I +HSPLandroidx/compose/foundation/lazy/LazyListState;->getFirstVisibleItemScrollOffset()I +HSPLandroidx/compose/foundation/lazy/LazyListState;->getInternalInteractionSource$foundation_release()Landroidx/compose/foundation/interaction/MutableInteractionSource; +HSPLandroidx/compose/foundation/lazy/LazyListState;->getLayoutInfo()Landroidx/compose/foundation/lazy/LazyListLayoutInfo; +HSPLandroidx/compose/foundation/lazy/LazyListState;->getNearestRange$foundation_release()Lkotlin/ranges/IntRange; +HSPLandroidx/compose/foundation/lazy/LazyListState;->getPinnedItems$foundation_release()Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList; +HSPLandroidx/compose/foundation/lazy/LazyListState;->getPlacementAnimator$foundation_release()Landroidx/compose/foundation/lazy/LazyListItemPlacementAnimator; +HSPLandroidx/compose/foundation/lazy/LazyListState;->getPrefetchState$foundation_release()Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState; +HSPLandroidx/compose/foundation/lazy/LazyListState;->getRemeasurementModifier$foundation_release()Landroidx/compose/ui/layout/RemeasurementModifier; +HSPLandroidx/compose/foundation/lazy/LazyListState;->getScrollToBeConsumed$foundation_release()F +HSPLandroidx/compose/foundation/lazy/LazyListState;->isScrollInProgress()Z +HSPLandroidx/compose/foundation/lazy/LazyListState;->scroll(Landroidx/compose/foundation/MutatePriority;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/lazy/LazyListState;->scrollToItem(IILkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/lazy/LazyListState;->setCanScrollBackward(Z)V +HSPLandroidx/compose/foundation/lazy/LazyListState;->setCanScrollForward(Z)V +HSPLandroidx/compose/foundation/lazy/LazyListState;->setDensity$foundation_release(Landroidx/compose/ui/unit/Density;)V +HSPLandroidx/compose/foundation/lazy/LazyListState;->setPremeasureConstraints-BRTryo0$foundation_release(J)V +HSPLandroidx/compose/foundation/lazy/LazyListState;->snapToItemIndexInternal$foundation_release(II)V +HSPLandroidx/compose/foundation/lazy/LazyListState;->updateScrollPositionIfTheFirstItemWasMoved$foundation_release$default(Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/lazy/LazyListItemProvider;IILjava/lang/Object;)I +HSPLandroidx/compose/foundation/lazy/LazyListState;->updateScrollPositionIfTheFirstItemWasMoved$foundation_release(Landroidx/compose/foundation/lazy/LazyListItemProvider;I)I +Landroidx/compose/foundation/lazy/LazyListState$Companion; +HSPLandroidx/compose/foundation/lazy/LazyListState$Companion;->()V +HSPLandroidx/compose/foundation/lazy/LazyListState$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/foundation/lazy/LazyListState$Companion$Saver$1; +HSPLandroidx/compose/foundation/lazy/LazyListState$Companion$Saver$1;->()V +HSPLandroidx/compose/foundation/lazy/LazyListState$Companion$Saver$1;->()V +Landroidx/compose/foundation/lazy/LazyListState$Companion$Saver$2; +HSPLandroidx/compose/foundation/lazy/LazyListState$Companion$Saver$2;->()V +HSPLandroidx/compose/foundation/lazy/LazyListState$Companion$Saver$2;->()V +Landroidx/compose/foundation/lazy/LazyListState$remeasurementModifier$1; +HSPLandroidx/compose/foundation/lazy/LazyListState$remeasurementModifier$1;->(Landroidx/compose/foundation/lazy/LazyListState;)V +HSPLandroidx/compose/foundation/lazy/LazyListState$remeasurementModifier$1;->onRemeasurementAvailable(Landroidx/compose/ui/layout/Remeasurement;)V +Landroidx/compose/foundation/lazy/LazyListState$scroll$1; +HSPLandroidx/compose/foundation/lazy/LazyListState$scroll$1;->(Landroidx/compose/foundation/lazy/LazyListState;Lkotlin/coroutines/Continuation;)V +Landroidx/compose/foundation/lazy/LazyListState$scrollToItem$2; +HSPLandroidx/compose/foundation/lazy/LazyListState$scrollToItem$2;->(Landroidx/compose/foundation/lazy/LazyListState;IILkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/lazy/LazyListState$scrollToItem$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/lazy/LazyListState$scrollToItem$2;->invoke(Landroidx/compose/foundation/gestures/ScrollScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/lazy/LazyListState$scrollToItem$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/lazy/LazyListState$scrollToItem$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/lazy/LazyListState$scrollableState$1; +HSPLandroidx/compose/foundation/lazy/LazyListState$scrollableState$1;->(Landroidx/compose/foundation/lazy/LazyListState;)V +Landroidx/compose/foundation/lazy/layout/AwaitFirstLayoutModifier; +HSPLandroidx/compose/foundation/lazy/layout/AwaitFirstLayoutModifier;->()V +HSPLandroidx/compose/foundation/lazy/layout/AwaitFirstLayoutModifier;->onGloballyPositioned(Landroidx/compose/ui/layout/LayoutCoordinates;)V +HSPLandroidx/compose/foundation/lazy/layout/AwaitFirstLayoutModifier;->waitForFirstLayout(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/compose/foundation/lazy/layout/AwaitFirstLayoutModifier$waitForFirstLayout$1; +HSPLandroidx/compose/foundation/lazy/layout/AwaitFirstLayoutModifier$waitForFirstLayout$1;->(Landroidx/compose/foundation/lazy/layout/AwaitFirstLayoutModifier;Lkotlin/coroutines/Continuation;)V +Landroidx/compose/foundation/lazy/layout/DefaultLazyKey; +HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey;->()V +HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey;->(I)V +HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey;->hashCode()I +Landroidx/compose/foundation/lazy/layout/DefaultLazyKey$Companion; +HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey$Companion;->()V +HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/foundation/lazy/layout/DefaultLazyKey$Companion$CREATOR$1; +HSPLandroidx/compose/foundation/lazy/layout/DefaultLazyKey$Companion$CREATOR$1;->()V +Landroidx/compose/foundation/lazy/layout/IntervalList; +Landroidx/compose/foundation/lazy/layout/IntervalList$Interval; +HSPLandroidx/compose/foundation/lazy/layout/IntervalList$Interval;->()V +HSPLandroidx/compose/foundation/lazy/layout/IntervalList$Interval;->(IILjava/lang/Object;)V +HSPLandroidx/compose/foundation/lazy/layout/IntervalList$Interval;->getSize()I +HSPLandroidx/compose/foundation/lazy/layout/IntervalList$Interval;->getStartIndex()I +HSPLandroidx/compose/foundation/lazy/layout/IntervalList$Interval;->getValue()Ljava/lang/Object; +Landroidx/compose/foundation/lazy/layout/IntervalListKt; +HSPLandroidx/compose/foundation/lazy/layout/IntervalListKt;->access$binarySearch(Landroidx/compose/runtime/collection/MutableVector;I)I +HSPLandroidx/compose/foundation/lazy/layout/IntervalListKt;->binarySearch(Landroidx/compose/runtime/collection/MutableVector;I)I +Landroidx/compose/foundation/lazy/layout/LazyAnimateScrollScope; +Landroidx/compose/foundation/lazy/layout/LazyLayoutAnimateItemModifierNode; +Landroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsInfo; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsInfo;->()V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsInfo;->hasIntervals()Z +Landroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsInfo$Interval; +Landroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsModifierLocal; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsModifierLocal;->()V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsModifierLocal;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsState;Landroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsInfo;ZLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/foundation/gestures/Orientation;)V +Landroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsModifierLocal$Companion; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsModifierLocal$Companion;->()V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsModifierLocal$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsModifierLocal$Companion$emptyBeyondBoundsScope$1; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsModifierLocal$Companion$emptyBeyondBoundsScope$1;->()V +Landroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsState; +Landroidx/compose/foundation/lazy/layout/LazyLayoutBeyondBoundsStateKt; +HSPLandroidx/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; +Landroidx/compose/foundation/lazy/layout/LazyLayoutIntervalContent; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutIntervalContent;->()V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutIntervalContent;->()V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutIntervalContent;->getContentType(I)Ljava/lang/Object; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutIntervalContent;->getItemCount()I +Landroidx/compose/foundation/lazy/layout/LazyLayoutIntervalContent$Interval; +Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;->(Landroidx/compose/runtime/saveable/SaveableStateHolder;Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;->access$getSaveableStateHolder$p(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;)Landroidx/compose/runtime/saveable/SaveableStateHolder; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;->getContent(ILjava/lang/Object;Ljava/lang/Object;)Lkotlin/jvm/functions/Function2; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;->getContentType(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;->getItemProvider()Lkotlin/jvm/functions/Function0; +Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;ILjava/lang/Object;Ljava/lang/Object;)V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;->access$set_content$p(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;->createContentLambda()Lkotlin/jvm/functions/Function2; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;->getContent()Lkotlin/jvm/functions/Function2; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;->getContentType()Ljava/lang/Object; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;->getIndex()I +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;->getKey()Ljava/lang/Object; +Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;)V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$2; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$2;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;)V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$2;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$2$invoke$$inlined$onDispose$1; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$2$invoke$$inlined$onDispose$1;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent;)V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory$CachedItemContent$createContentLambda$1$2$invoke$$inlined$onDispose$1;->dispose()V +Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactoryKt; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactoryKt;->SkippableItem-JVlU9Rs(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;Ljava/lang/Object;ILjava/lang/Object;Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactoryKt;->access$SkippableItem-JVlU9Rs(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;Ljava/lang/Object;ILjava/lang/Object;Landroidx/compose/runtime/Composer;I)V +Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactoryKt$SkippableItem$1; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactoryKt$SkippableItem$1;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;ILjava/lang/Object;I)V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactoryKt$SkippableItem$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactoryKt$SkippableItem$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider; +Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProviderKt; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemProviderKt;->findIndexByKey(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider;Ljava/lang/Object;I)I +Landroidx/compose/foundation/lazy/layout/LazyLayoutItemReusePolicy; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemReusePolicy;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;)V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutItemReusePolicy;->getSlotsToRetain(Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;)V +Landroidx/compose/foundation/lazy/layout/LazyLayoutKeyIndexMap; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKeyIndexMap;->()V +Landroidx/compose/foundation/lazy/layout/LazyLayoutKeyIndexMap$Empty; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKeyIndexMap$Empty;->()V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKeyIndexMap$Empty;->()V +Landroidx/compose/foundation/lazy/layout/LazyLayoutKt; +HSPLandroidx/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 +Landroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;ILandroidx/compose/runtime/State;)V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3;->invoke(Landroidx/compose/runtime/saveable/SaveableStateHolder;Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$2$1; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$2$1;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$2$1;->invoke-0kLqBqw(Landroidx/compose/ui/layout/SubcomposeMeasureScope;J)Landroidx/compose/ui/layout/MeasureResult; +Landroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$itemContentFactory$1$1; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$itemContentFactory$1$1;->(Landroidx/compose/runtime/State;)V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$itemContentFactory$1$1;->invoke()Landroidx/compose/foundation/lazy/layout/LazyLayoutItemProvider; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutKt$LazyLayout$3$itemContentFactory$1$1;->invoke()Ljava/lang/Object; +Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScope; +Landroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Landroidx/compose/ui/layout/SubcomposeMeasureScope;)V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->layout(IILjava/util/Map;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/layout/MeasureResult; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->measure-0kLqBqw(IJ)Ljava/util/List; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutMeasureScopeImpl;->roundToPx-0680j_4(F)I +Landroidx/compose/foundation/lazy/layout/LazyLayoutNearestRangeState; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutNearestRangeState;->()V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutNearestRangeState;->(III)V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutNearestRangeState;->getValue()Ljava/lang/Object; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutNearestRangeState;->getValue()Lkotlin/ranges/IntRange; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutNearestRangeState;->update(I)V +Landroidx/compose/foundation/lazy/layout/LazyLayoutNearestRangeState$Companion; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutNearestRangeState$Companion;->()V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutNearestRangeState$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutNearestRangeState$Companion;->access$calculateNearestItemsRange(Landroidx/compose/foundation/lazy/layout/LazyLayoutNearestRangeState$Companion;III)Lkotlin/ranges/IntRange; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutNearestRangeState$Companion;->calculateNearestItemsRange(III)Lkotlin/ranges/IntRange; +Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;->(Ljava/lang/Object;Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;)V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;->getPinsCount()I +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;->get_parentPinnableContainer()Landroidx/compose/ui/layout/PinnableContainer; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;->onDisposed()V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;->setIndex(I)V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;->setParentPinnableContainer(Landroidx/compose/ui/layout/PinnableContainer;)V +Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItemKt; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItemKt;->LazyLayoutPinnableItem(Ljava/lang/Object;ILandroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V +Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItemKt$LazyLayoutPinnableItem$1$1; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItemKt$LazyLayoutPinnableItem$1$1;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;)V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItemKt$LazyLayoutPinnableItem$1$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItemKt$LazyLayoutPinnableItem$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItemKt$LazyLayoutPinnableItem$1$1$invoke$$inlined$onDispose$1; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItemKt$LazyLayoutPinnableItem$1$1$invoke$$inlined$onDispose$1;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItem;)V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnableItemKt$LazyLayoutPinnableItem$1$1$invoke$$inlined$onDispose$1;->dispose()V +Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;->()V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;->()V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;->(Ljava/util/List;)V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList;->isEmpty()Z +Landroidx/compose/foundation/lazy/layout/LazyLayoutPinnedItemList$PinnedItem; +Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;->()V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;->()V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;->setPrefetcher$foundation_release(Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState$Prefetcher;)V +Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState$PrefetchHandle; +Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState$Prefetcher; +Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->()V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Landroid/view/View;)V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->access$getFrameIntervalNs$cp()J +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->access$setFrameIntervalNs$cp(J)V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher;->onRemembered()V +Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$Companion; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$Companion;->()V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$Companion;->access$calculateFrameIntervalIfNeeded(Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$Companion;Landroid/view/View;)V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$Companion;->calculateFrameIntervalIfNeeded(Landroid/view/View;)V +Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher$PrefetchRequest; +Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher_androidKt; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutPrefetcher_androidKt;->LazyLayoutPrefetcher(Landroidx/compose/foundation/lazy/layout/LazyLayoutPrefetchState;Landroidx/compose/foundation/lazy/layout/LazyLayoutItemContentFactory;Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/runtime/Composer;I)V +Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticState; +Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt;->lazyLayoutSemantics(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function0;Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticState;Landroidx/compose/foundation/gestures/Orientation;ZZLandroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier; +Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$1; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$1;->(Lkotlin/jvm/functions/Function1;ZLandroidx/compose/ui/semantics/ScrollAxisRange;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/semantics/CollectionInfo;)V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$1;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$accessibilityScrollState$1; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$accessibilityScrollState$1;->(Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticState;)V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$accessibilityScrollState$1;->invoke()Ljava/lang/Float; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$accessibilityScrollState$1;->invoke()Ljava/lang/Object; +Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$accessibilityScrollState$2; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$accessibilityScrollState$2;->(Lkotlin/jvm/functions/Function0;Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticState;)V +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$accessibilityScrollState$2;->invoke()Ljava/lang/Float; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$accessibilityScrollState$2;->invoke()Ljava/lang/Object; +Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$indexForKeyMapping$1; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$indexForKeyMapping$1;->(Lkotlin/jvm/functions/Function0;)V +Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$scrollByAction$1; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$scrollByAction$1;->(ZLkotlinx/coroutines/CoroutineScope;Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticState;)V +Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$scrollToIndexAction$1; +HSPLandroidx/compose/foundation/lazy/layout/LazyLayoutSemanticsKt$lazyLayoutSemantics$1$scrollToIndexAction$1;->(Lkotlin/jvm/functions/Function0;Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/foundation/lazy/layout/LazyLayoutSemanticState;)V +Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder; +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->()V +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->(Landroidx/compose/runtime/saveable/SaveableStateRegistry;)V +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->(Landroidx/compose/runtime/saveable/SaveableStateRegistry;Ljava/util/Map;)V +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->SaveableStateProvider(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->access$getPreviouslyComposedKeys$p(Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;)Ljava/util/Set; +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->canBeSaved(Ljava/lang/Object;)Z +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->consumeRestored(Ljava/lang/String;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->getWrappedHolder()Landroidx/compose/runtime/saveable/SaveableStateHolder; +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->performSave()Ljava/util/Map; +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->registerProvider(Ljava/lang/String;Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/saveable/SaveableStateRegistry$Entry; +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;->setWrappedHolder(Landroidx/compose/runtime/saveable/SaveableStateHolder;)V +Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$1; +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$1;->(Landroidx/compose/runtime/saveable/SaveableStateRegistry;)V +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$1;->invoke(Ljava/lang/Object;)Ljava/lang/Boolean; +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion; +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion;->()V +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion;->saver(Landroidx/compose/runtime/saveable/SaveableStateRegistry;)Landroidx/compose/runtime/saveable/Saver; +Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion$saver$1; +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion$saver$1;->()V +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion$saver$1;->()V +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion$saver$1;->invoke(Landroidx/compose/runtime/saveable/SaverScope;Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;)Ljava/util/Map; +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion$saver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion$saver$2; +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$Companion$saver$2;->(Landroidx/compose/runtime/saveable/SaveableStateRegistry;)V +Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$1; +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$1;->(Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;Ljava/lang/Object;)V +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult; +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$1$invoke$$inlined$onDispose$1; +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$1$invoke$$inlined$onDispose$1;->(Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;Ljava/lang/Object;)V +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$1$invoke$$inlined$onDispose$1;->dispose()V +Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$2; +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolder$SaveableStateProvider$2;->(Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;I)V +Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt; +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt;->LazySaveableStateHolderProvider(Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;I)V +Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt$LazySaveableStateHolderProvider$1; +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt$LazySaveableStateHolderProvider$1;->(Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder;Lkotlin/jvm/functions/Function3;I)V +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt$LazySaveableStateHolderProvider$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt$LazySaveableStateHolderProvider$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt$LazySaveableStateHolderProvider$holder$1; +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt$LazySaveableStateHolderProvider$holder$1;->(Landroidx/compose/runtime/saveable/SaveableStateRegistry;)V +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt$LazySaveableStateHolderProvider$holder$1;->invoke()Landroidx/compose/foundation/lazy/layout/LazySaveableStateHolder; +HSPLandroidx/compose/foundation/lazy/layout/LazySaveableStateHolderKt$LazySaveableStateHolderProvider$holder$1;->invoke()Ljava/lang/Object; +Landroidx/compose/foundation/lazy/layout/Lazy_androidKt; +HSPLandroidx/compose/foundation/lazy/layout/Lazy_androidKt;->getDefaultLazyLayoutKey(I)Ljava/lang/Object; +Landroidx/compose/foundation/lazy/layout/MutableIntervalList; +HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->()V +HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->()V +HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->addInterval(ILjava/lang/Object;)V +HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->checkIndexBounds(I)V +HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->contains(Landroidx/compose/foundation/lazy/layout/IntervalList$Interval;I)Z +HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->forEach(IILkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->get(I)Landroidx/compose/foundation/lazy/layout/IntervalList$Interval; +HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->getIntervalForIndex(I)Landroidx/compose/foundation/lazy/layout/IntervalList$Interval; +HSPLandroidx/compose/foundation/lazy/layout/MutableIntervalList;->getSize()I +Landroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap; +HSPLandroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap;->(Lkotlin/ranges/IntRange;Landroidx/compose/foundation/lazy/layout/LazyLayoutIntervalContent;)V +HSPLandroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap;->access$getKeys$p(Landroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap;)[Ljava/lang/Object; +HSPLandroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap;->access$getKeysStartIndex$p(Landroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap;)I +HSPLandroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap;->getIndex(Ljava/lang/Object;)I +HSPLandroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap;->getKey(I)Ljava/lang/Object; +Landroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap$1$1; +HSPLandroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap$1$1;->(IILjava/util/HashMap;Landroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap;)V +HSPLandroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap$1$1;->invoke(Landroidx/compose/foundation/lazy/layout/IntervalList$Interval;)V +HSPLandroidx/compose/foundation/lazy/layout/NearestRangeKeyIndexMap$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/lazy/layout/StableValue; +HSPLandroidx/compose/foundation/lazy/layout/StableValue;->constructor-impl(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/relocation/BringIntoViewChildNode; +HSPLandroidx/compose/foundation/relocation/BringIntoViewChildNode;->()V +HSPLandroidx/compose/foundation/relocation/BringIntoViewChildNode;->getLayoutCoordinates()Landroidx/compose/ui/layout/LayoutCoordinates; +HSPLandroidx/compose/foundation/relocation/BringIntoViewChildNode;->getLocalParent()Landroidx/compose/foundation/relocation/BringIntoViewParent; +HSPLandroidx/compose/foundation/relocation/BringIntoViewChildNode;->getParent()Landroidx/compose/foundation/relocation/BringIntoViewParent; +HSPLandroidx/compose/foundation/relocation/BringIntoViewChildNode;->onPlaced(Landroidx/compose/ui/layout/LayoutCoordinates;)V +Landroidx/compose/foundation/relocation/BringIntoViewKt; +HSPLandroidx/compose/foundation/relocation/BringIntoViewKt;->()V +HSPLandroidx/compose/foundation/relocation/BringIntoViewKt;->getModifierLocalBringIntoViewParent()Landroidx/compose/ui/modifier/ProvidableModifierLocal; +Landroidx/compose/foundation/relocation/BringIntoViewKt$ModifierLocalBringIntoViewParent$1; +HSPLandroidx/compose/foundation/relocation/BringIntoViewKt$ModifierLocalBringIntoViewParent$1;->()V +HSPLandroidx/compose/foundation/relocation/BringIntoViewKt$ModifierLocalBringIntoViewParent$1;->()V +HSPLandroidx/compose/foundation/relocation/BringIntoViewKt$ModifierLocalBringIntoViewParent$1;->invoke()Landroidx/compose/foundation/relocation/BringIntoViewParent; +HSPLandroidx/compose/foundation/relocation/BringIntoViewKt$ModifierLocalBringIntoViewParent$1;->invoke()Ljava/lang/Object; +Landroidx/compose/foundation/relocation/BringIntoViewParent; +Landroidx/compose/foundation/relocation/BringIntoViewRequester; +HSPLandroidx/compose/foundation/relocation/BringIntoViewRequester;->bringIntoView$default(Landroidx/compose/foundation/relocation/BringIntoViewRequester;Landroidx/compose/ui/geometry/Rect;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/relocation/BringIntoViewRequesterElement; +HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterElement;->(Landroidx/compose/foundation/relocation/BringIntoViewRequester;)V +HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterElement;->create()Landroidx/compose/foundation/relocation/BringIntoViewRequesterNode; +HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterElement;->equals(Ljava/lang/Object;)Z +Landroidx/compose/foundation/relocation/BringIntoViewRequesterImpl; +HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterImpl;->()V +HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterImpl;->bringIntoView(Landroidx/compose/ui/geometry/Rect;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterImpl;->getModifiers()Landroidx/compose/runtime/collection/MutableVector; +Landroidx/compose/foundation/relocation/BringIntoViewRequesterImpl$bringIntoView$1; +HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterImpl$bringIntoView$1;->(Landroidx/compose/foundation/relocation/BringIntoViewRequesterImpl;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterImpl$bringIntoView$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/relocation/BringIntoViewRequesterKt; +HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterKt;->BringIntoViewRequester()Landroidx/compose/foundation/relocation/BringIntoViewRequester; +HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterKt;->bringIntoViewRequester(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/relocation/BringIntoViewRequester;)Landroidx/compose/ui/Modifier; +Landroidx/compose/foundation/relocation/BringIntoViewRequesterNode; +HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterNode;->(Landroidx/compose/foundation/relocation/BringIntoViewRequester;)V +HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterNode;->bringIntoView(Landroidx/compose/ui/geometry/Rect;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterNode;->disposeRequester()V +HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterNode;->onAttach()V +HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterNode;->onDetach()V +HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterNode;->updateRequester(Landroidx/compose/foundation/relocation/BringIntoViewRequester;)V +Landroidx/compose/foundation/relocation/BringIntoViewRequesterNode$bringIntoView$2; +HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterNode$bringIntoView$2;->(Landroidx/compose/ui/geometry/Rect;Landroidx/compose/foundation/relocation/BringIntoViewRequesterNode;)V +HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterNode$bringIntoView$2;->invoke()Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/foundation/relocation/BringIntoViewRequesterNode$bringIntoView$2;->invoke()Ljava/lang/Object; +Landroidx/compose/foundation/relocation/BringIntoViewResponder; +Landroidx/compose/foundation/relocation/BringIntoViewResponderElement; +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderElement;->(Landroidx/compose/foundation/relocation/BringIntoViewResponder;)V +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderElement;->create()Landroidx/compose/foundation/relocation/BringIntoViewResponderNode; +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderElement;->equals(Ljava/lang/Object;)Z +Landroidx/compose/foundation/relocation/BringIntoViewResponderKt; +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderKt;->access$localRectOf(Landroidx/compose/ui/layout/LayoutCoordinates;Landroidx/compose/ui/layout/LayoutCoordinates;Landroidx/compose/ui/geometry/Rect;)Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderKt;->bringIntoViewResponder(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/relocation/BringIntoViewResponder;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderKt;->localRectOf(Landroidx/compose/ui/layout/LayoutCoordinates;Landroidx/compose/ui/layout/LayoutCoordinates;Landroidx/compose/ui/geometry/Rect;)Landroidx/compose/ui/geometry/Rect; +Landroidx/compose/foundation/relocation/BringIntoViewResponderNode; +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode;->(Landroidx/compose/foundation/relocation/BringIntoViewResponder;)V +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode;->access$bringChildIntoView$localRect(Landroidx/compose/foundation/relocation/BringIntoViewResponderNode;Landroidx/compose/ui/layout/LayoutCoordinates;Lkotlin/jvm/functions/Function0;)Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode;->bringChildIntoView$localRect(Landroidx/compose/foundation/relocation/BringIntoViewResponderNode;Landroidx/compose/ui/layout/LayoutCoordinates;Lkotlin/jvm/functions/Function0;)Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode;->bringChildIntoView(Landroidx/compose/ui/layout/LayoutCoordinates;Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode;->getProvidedValues()Landroidx/compose/ui/modifier/ModifierLocalMap; +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode;->getResponder()Landroidx/compose/foundation/relocation/BringIntoViewResponder; +Landroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2; +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2;->(Landroidx/compose/foundation/relocation/BringIntoViewResponderNode;Landroidx/compose/ui/layout/LayoutCoordinates;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2$1; +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2$1;->(Landroidx/compose/foundation/relocation/BringIntoViewResponderNode;Landroidx/compose/ui/layout/LayoutCoordinates;Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2$1$1; +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2$1$1;->(Landroidx/compose/foundation/relocation/BringIntoViewResponderNode;Landroidx/compose/ui/layout/LayoutCoordinates;Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2$1$1;->invoke()Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2$1$1;->invoke()Ljava/lang/Object; +Landroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2$2; +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2$2;->(Landroidx/compose/foundation/relocation/BringIntoViewResponderNode;Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$2$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$parentRect$1; +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$parentRect$1;->(Landroidx/compose/foundation/relocation/BringIntoViewResponderNode;Landroidx/compose/ui/layout/LayoutCoordinates;Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$parentRect$1;->invoke()Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponderNode$bringChildIntoView$parentRect$1;->invoke()Ljava/lang/Object; +Landroidx/compose/foundation/relocation/BringIntoViewResponder_androidKt; +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponder_androidKt;->access$toRect(Landroidx/compose/ui/geometry/Rect;)Landroid/graphics/Rect; +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponder_androidKt;->defaultBringIntoViewParent(Landroidx/compose/ui/node/CompositionLocalConsumerModifierNode;)Landroidx/compose/foundation/relocation/BringIntoViewParent; +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponder_androidKt;->toRect(Landroidx/compose/ui/geometry/Rect;)Landroid/graphics/Rect; +Landroidx/compose/foundation/relocation/BringIntoViewResponder_androidKt$defaultBringIntoViewParent$1; +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponder_androidKt$defaultBringIntoViewParent$1;->(Landroidx/compose/ui/node/CompositionLocalConsumerModifierNode;)V +HSPLandroidx/compose/foundation/relocation/BringIntoViewResponder_androidKt$defaultBringIntoViewParent$1;->bringChildIntoView(Landroidx/compose/ui/layout/LayoutCoordinates;Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/compose/foundation/selection/SelectableGroupKt; +HSPLandroidx/compose/foundation/selection/SelectableGroupKt;->selectableGroup(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; +Landroidx/compose/foundation/selection/SelectableGroupKt$selectableGroup$1; +HSPLandroidx/compose/foundation/selection/SelectableGroupKt$selectableGroup$1;->()V +HSPLandroidx/compose/foundation/selection/SelectableGroupKt$selectableGroup$1;->()V +HSPLandroidx/compose/foundation/selection/SelectableGroupKt$selectableGroup$1;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V +HSPLandroidx/compose/foundation/selection/SelectableGroupKt$selectableGroup$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/selection/SelectableKt; +HSPLandroidx/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; +Landroidx/compose/foundation/selection/SelectableKt$selectable$4$1; +HSPLandroidx/compose/foundation/selection/SelectableKt$selectable$4$1;->(Z)V +HSPLandroidx/compose/foundation/selection/SelectableKt$selectable$4$1;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V +HSPLandroidx/compose/foundation/selection/SelectableKt$selectable$4$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/shape/CornerBasedShape; +HSPLandroidx/compose/foundation/shape/CornerBasedShape;->()V +HSPLandroidx/compose/foundation/shape/CornerBasedShape;->(Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;)V +HSPLandroidx/compose/foundation/shape/CornerBasedShape;->copy$default(Landroidx/compose/foundation/shape/CornerBasedShape;Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;ILjava/lang/Object;)Landroidx/compose/foundation/shape/CornerBasedShape; +HSPLandroidx/compose/foundation/shape/CornerBasedShape;->createOutline-Pq9zytI(JLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;)Landroidx/compose/ui/graphics/Outline; +PLandroidx/compose/foundation/shape/CornerBasedShape;->getBottomEnd()Landroidx/compose/foundation/shape/CornerSize; +PLandroidx/compose/foundation/shape/CornerBasedShape;->getBottomStart()Landroidx/compose/foundation/shape/CornerSize; +PLandroidx/compose/foundation/shape/CornerBasedShape;->getTopEnd()Landroidx/compose/foundation/shape/CornerSize; +HSPLandroidx/compose/foundation/shape/CornerBasedShape;->getTopStart()Landroidx/compose/foundation/shape/CornerSize; +Landroidx/compose/foundation/shape/CornerSize; +Landroidx/compose/foundation/shape/CornerSizeKt; +HSPLandroidx/compose/foundation/shape/CornerSizeKt;->()V +HSPLandroidx/compose/foundation/shape/CornerSizeKt;->CornerSize(I)Landroidx/compose/foundation/shape/CornerSize; +HSPLandroidx/compose/foundation/shape/CornerSizeKt;->CornerSize-0680j_4(F)Landroidx/compose/foundation/shape/CornerSize; +Landroidx/compose/foundation/shape/CornerSizeKt$ZeroCornerSize$1; +HSPLandroidx/compose/foundation/shape/CornerSizeKt$ZeroCornerSize$1;->()V +Landroidx/compose/foundation/shape/DpCornerSize; +HSPLandroidx/compose/foundation/shape/DpCornerSize;->(F)V +HSPLandroidx/compose/foundation/shape/DpCornerSize;->(FLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/shape/DpCornerSize;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/foundation/shape/DpCornerSize;->toPx-TmRCtEA(JLandroidx/compose/ui/unit/Density;)F +Landroidx/compose/foundation/shape/PercentCornerSize; +HSPLandroidx/compose/foundation/shape/PercentCornerSize;->(F)V +HSPLandroidx/compose/foundation/shape/PercentCornerSize;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/foundation/shape/PercentCornerSize;->toPx-TmRCtEA(JLandroidx/compose/ui/unit/Density;)F +Landroidx/compose/foundation/shape/RoundedCornerShape; +HSPLandroidx/compose/foundation/shape/RoundedCornerShape;->()V +HSPLandroidx/compose/foundation/shape/RoundedCornerShape;->(Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;)V +HSPLandroidx/compose/foundation/shape/RoundedCornerShape;->copy(Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;)Landroidx/compose/foundation/shape/CornerBasedShape; +HSPLandroidx/compose/foundation/shape/RoundedCornerShape;->copy(Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;Landroidx/compose/foundation/shape/CornerSize;)Landroidx/compose/foundation/shape/RoundedCornerShape; +HSPLandroidx/compose/foundation/shape/RoundedCornerShape;->createOutline-LjSzlW0(JFFFFLandroidx/compose/ui/unit/LayoutDirection;)Landroidx/compose/ui/graphics/Outline; +HSPLandroidx/compose/foundation/shape/RoundedCornerShape;->equals(Ljava/lang/Object;)Z +Landroidx/compose/foundation/shape/RoundedCornerShapeKt; +HSPLandroidx/compose/foundation/shape/RoundedCornerShapeKt;->()V +HSPLandroidx/compose/foundation/shape/RoundedCornerShapeKt;->RoundedCornerShape(I)Landroidx/compose/foundation/shape/RoundedCornerShape; +HSPLandroidx/compose/foundation/shape/RoundedCornerShapeKt;->RoundedCornerShape(Landroidx/compose/foundation/shape/CornerSize;)Landroidx/compose/foundation/shape/RoundedCornerShape; +HSPLandroidx/compose/foundation/shape/RoundedCornerShapeKt;->RoundedCornerShape-0680j_4(F)Landroidx/compose/foundation/shape/RoundedCornerShape; +HSPLandroidx/compose/foundation/shape/RoundedCornerShapeKt;->RoundedCornerShape-a9UjIt4(FFFF)Landroidx/compose/foundation/shape/RoundedCornerShape; +HSPLandroidx/compose/foundation/shape/RoundedCornerShapeKt;->getCircleShape()Landroidx/compose/foundation/shape/RoundedCornerShape; +Landroidx/compose/foundation/text/AnnotatedStringResolveInlineContentKt; +HSPLandroidx/compose/foundation/text/AnnotatedStringResolveInlineContentKt;->()V +HSPLandroidx/compose/foundation/text/AnnotatedStringResolveInlineContentKt;->hasInlineContent(Landroidx/compose/ui/text/AnnotatedString;)Z +Landroidx/compose/foundation/text/BasicTextFieldKt; +HSPLandroidx/compose/foundation/text/BasicTextFieldKt;->BasicTextField$lambda$2(Landroidx/compose/runtime/MutableState;)Landroidx/compose/ui/text/input/TextFieldValue; +HSPLandroidx/compose/foundation/text/BasicTextFieldKt;->BasicTextField$lambda$3(Landroidx/compose/runtime/MutableState;Landroidx/compose/ui/text/input/TextFieldValue;)V +HSPLandroidx/compose/foundation/text/BasicTextFieldKt;->BasicTextField$lambda$6(Landroidx/compose/runtime/MutableState;)Ljava/lang/String; +HSPLandroidx/compose/foundation/text/BasicTextFieldKt;->BasicTextField$lambda$7(Landroidx/compose/runtime/MutableState;Ljava/lang/String;)V +HSPLandroidx/compose/foundation/text/BasicTextFieldKt;->BasicTextField(Ljava/lang/String;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;ZZLandroidx/compose/ui/text/TextStyle;Landroidx/compose/foundation/text/KeyboardOptions;Landroidx/compose/foundation/text/KeyboardActions;ZIILandroidx/compose/ui/text/input/VisualTransformation;Lkotlin/jvm/functions/Function1;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/ui/graphics/Brush;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;III)V +HSPLandroidx/compose/foundation/text/BasicTextFieldKt;->access$BasicTextField$lambda$2(Landroidx/compose/runtime/MutableState;)Landroidx/compose/ui/text/input/TextFieldValue; +HSPLandroidx/compose/foundation/text/BasicTextFieldKt;->access$BasicTextField$lambda$3(Landroidx/compose/runtime/MutableState;Landroidx/compose/ui/text/input/TextFieldValue;)V +HSPLandroidx/compose/foundation/text/BasicTextFieldKt;->access$BasicTextField$lambda$6(Landroidx/compose/runtime/MutableState;)Ljava/lang/String; +HSPLandroidx/compose/foundation/text/BasicTextFieldKt;->access$BasicTextField$lambda$7(Landroidx/compose/runtime/MutableState;Ljava/lang/String;)V +Landroidx/compose/foundation/text/BasicTextFieldKt$BasicTextField$1; +HSPLandroidx/compose/foundation/text/BasicTextFieldKt$BasicTextField$1;->()V +HSPLandroidx/compose/foundation/text/BasicTextFieldKt$BasicTextField$1;->()V +HSPLandroidx/compose/foundation/text/BasicTextFieldKt$BasicTextField$1;->invoke(Landroidx/compose/ui/text/TextLayoutResult;)V +HSPLandroidx/compose/foundation/text/BasicTextFieldKt$BasicTextField$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/BasicTextFieldKt$BasicTextField$3$1; +HSPLandroidx/compose/foundation/text/BasicTextFieldKt$BasicTextField$3$1;->(Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/runtime/MutableState;)V +HSPLandroidx/compose/foundation/text/BasicTextFieldKt$BasicTextField$3$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/foundation/text/BasicTextFieldKt$BasicTextField$3$1;->invoke()V +Landroidx/compose/foundation/text/BasicTextFieldKt$BasicTextField$4$1; +HSPLandroidx/compose/foundation/text/BasicTextFieldKt$BasicTextField$4$1;->(Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/MutableState;)V +HSPLandroidx/compose/foundation/text/BasicTextFieldKt$BasicTextField$4$1;->invoke(Landroidx/compose/ui/text/input/TextFieldValue;)V +HSPLandroidx/compose/foundation/text/BasicTextFieldKt$BasicTextField$4$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/BasicTextFieldKt$BasicTextField$5; +HSPLandroidx/compose/foundation/text/BasicTextFieldKt$BasicTextField$5;->(Ljava/lang/String;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;ZZLandroidx/compose/ui/text/TextStyle;Landroidx/compose/foundation/text/KeyboardOptions;Landroidx/compose/foundation/text/KeyboardActions;ZIILandroidx/compose/ui/text/input/VisualTransformation;Lkotlin/jvm/functions/Function1;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/ui/graphics/Brush;Lkotlin/jvm/functions/Function3;III)V +Landroidx/compose/foundation/text/BasicTextKt; +HSPLandroidx/compose/foundation/text/BasicTextKt;->BasicText-4YKlhWE(Ljava/lang/String;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function1;IZIILandroidx/compose/runtime/Composer;II)V +HSPLandroidx/compose/foundation/text/BasicTextKt;->BasicText-RWo7tUw(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function1;IZIILjava/util/Map;Landroidx/compose/ui/graphics/ColorProducer;Landroidx/compose/runtime/Composer;II)V +HSPLandroidx/compose/foundation/text/BasicTextKt;->BasicText-VhcvRP8(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function1;IZIILjava/util/Map;Landroidx/compose/runtime/Composer;II)V +HSPLandroidx/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 +HSPLandroidx/compose/foundation/text/BasicTextKt;->textModifier-RWo7tUw(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function1;IZIILandroidx/compose/ui/text/font/FontFamily$Resolver;Ljava/util/List;Lkotlin/jvm/functions/Function1;Landroidx/compose/foundation/text/modifiers/SelectionController;Landroidx/compose/ui/graphics/ColorProducer;)Landroidx/compose/ui/Modifier; +Landroidx/compose/foundation/text/BasicTextKt$BasicText-RWo7tUw$$inlined$Layout$1; +HSPLandroidx/compose/foundation/text/BasicTextKt$BasicText-RWo7tUw$$inlined$Layout$1;->(Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/foundation/text/BasicTextKt$BasicText-RWo7tUw$$inlined$Layout$1;->invoke()Ljava/lang/Object; +Landroidx/compose/foundation/text/BasicTextKt$BasicText-VhcvRP8$$inlined$Layout$1; +HSPLandroidx/compose/foundation/text/BasicTextKt$BasicText-VhcvRP8$$inlined$Layout$1;->(Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/foundation/text/BasicTextKt$BasicText-VhcvRP8$$inlined$Layout$1;->invoke()Ljava/lang/Object; +Landroidx/compose/foundation/text/CoreTextFieldKt; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt;->CoreTextField$lambda$8(Landroidx/compose/runtime/State;)Z +HSPLandroidx/compose/foundation/text/CoreTextFieldKt;->CoreTextField(Landroidx/compose/ui/text/input/TextFieldValue;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/input/VisualTransformation;Lkotlin/jvm/functions/Function1;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/ui/graphics/Brush;ZIILandroidx/compose/ui/text/input/ImeOptions;Landroidx/compose/foundation/text/KeyboardActions;ZZLkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;III)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt;->CoreTextFieldRootBox(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/text/selection/TextFieldSelectionManager;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt;->SelectionToolbarAndHandles(Landroidx/compose/foundation/text/selection/TextFieldSelectionManager;ZLandroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt;->access$CoreTextField$lambda$8(Landroidx/compose/runtime/State;)Z +HSPLandroidx/compose/foundation/text/CoreTextFieldKt;->access$SelectionToolbarAndHandles(Landroidx/compose/foundation/text/selection/TextFieldSelectionManager;ZLandroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt;->access$endInputSession(Landroidx/compose/foundation/text/TextFieldState;)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt;->access$notifyFocusedRect(Landroidx/compose/foundation/text/TextFieldState;Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/ui/text/input/OffsetMapping;)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt;->access$startInputSession(Landroidx/compose/ui/text/input/TextInputService;Landroidx/compose/foundation/text/TextFieldState;Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/ui/text/input/ImeOptions;Landroidx/compose/ui/text/input/OffsetMapping;)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt;->bringSelectionEndIntoView(Landroidx/compose/foundation/relocation/BringIntoViewRequester;Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/foundation/text/TextDelegate;Landroidx/compose/ui/text/TextLayoutResult;Landroidx/compose/ui/text/input/OffsetMapping;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt;->endInputSession(Landroidx/compose/foundation/text/TextFieldState;)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt;->notifyFocusedRect(Landroidx/compose/foundation/text/TextFieldState;Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/ui/text/input/OffsetMapping;)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt;->previewKeyEventToDeselectOnBack(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/text/TextFieldState;Landroidx/compose/foundation/text/selection/TextFieldSelectionManager;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt;->startInputSession(Landroidx/compose/ui/text/input/TextInputService;Landroidx/compose/foundation/text/TextFieldState;Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/ui/text/input/ImeOptions;Landroidx/compose/ui/text/input/OffsetMapping;)V +Landroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$2; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$2;->(Landroidx/compose/foundation/text/TextFieldState;Landroidx/compose/runtime/State;Landroidx/compose/ui/text/input/TextInputService;Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/ui/text/input/ImeOptions;Landroidx/compose/ui/text/input/OffsetMapping;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$2$1; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$2$1;->(Landroidx/compose/runtime/State;)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$2$1;->invoke()Ljava/lang/Boolean; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$2$1;->invoke()Ljava/lang/Object; +Landroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$2$2; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$2$2;->(Landroidx/compose/foundation/text/TextFieldState;Landroidx/compose/ui/text/input/TextInputService;Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/ui/text/input/ImeOptions;Landroidx/compose/ui/text/input/OffsetMapping;)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$2$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$2$2;->emit(ZLkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$3; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$3;->(Landroidx/compose/foundation/text/selection/TextFieldSelectionManager;)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$3;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$3$invoke$$inlined$onDispose$1; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$3$invoke$$inlined$onDispose$1;->(Landroidx/compose/foundation/text/selection/TextFieldSelectionManager;)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$3$invoke$$inlined$onDispose$1;->dispose()V +Landroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$4; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$4;->(Landroidx/compose/ui/text/input/TextInputService;Landroidx/compose/foundation/text/TextFieldState;Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/ui/text/input/ImeOptions;)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$4;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$4;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$4$invoke$$inlined$onDispose$1; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$4$invoke$$inlined$onDispose$1;->()V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$4$invoke$$inlined$onDispose$1;->dispose()V +Landroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$5; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$5;->(Lkotlin/jvm/functions/Function3;ILandroidx/compose/foundation/text/TextFieldState;Landroidx/compose/ui/text/TextStyle;IILandroidx/compose/foundation/text/TextFieldScrollerPosition;Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/ui/text/input/VisualTransformation;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/relocation/BringIntoViewRequester;Landroidx/compose/foundation/text/selection/TextFieldSelectionManager;ZZLkotlin/jvm/functions/Function1;Landroidx/compose/ui/text/input/OffsetMapping;Landroidx/compose/ui/unit/Density;)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$5;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$5$1; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$5$1;->(Landroidx/compose/foundation/text/TextFieldState;Landroidx/compose/ui/text/TextStyle;IILandroidx/compose/foundation/text/TextFieldScrollerPosition;Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/ui/text/input/VisualTransformation;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/relocation/BringIntoViewRequester;Landroidx/compose/foundation/text/selection/TextFieldSelectionManager;ZZLkotlin/jvm/functions/Function1;Landroidx/compose/ui/text/input/OffsetMapping;Landroidx/compose/ui/unit/Density;)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$5$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$5$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$5$1$1; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$5$1$1;->(Landroidx/compose/foundation/text/selection/TextFieldSelectionManager;Landroidx/compose/foundation/text/TextFieldState;ZZLkotlin/jvm/functions/Function1;Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/ui/text/input/OffsetMapping;Landroidx/compose/ui/unit/Density;I)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$5$1$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$5$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$5$1$1$2; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$5$1$1$2;->(Landroidx/compose/foundation/text/TextFieldState;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/ui/text/input/OffsetMapping;Landroidx/compose/ui/unit/Density;I)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$5$1$1$2;->maxIntrinsicWidth(Landroidx/compose/ui/layout/IntrinsicMeasureScope;Ljava/util/List;I)I +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$5$1$1$2;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; +Landroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$5$1$1$2$measure$2; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$5$1$1$2$measure$2;->()V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$5$1$1$2$measure$2;->()V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$5$1$1$2$measure$2;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$5$1$1$2$measure$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$5$1$coreTextFieldModifier$1; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$5$1$coreTextFieldModifier$1;->(Landroidx/compose/foundation/text/TextFieldState;)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$5$1$coreTextFieldModifier$1;->invoke()Landroidx/compose/foundation/text/TextLayoutResultProxy; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$5$1$coreTextFieldModifier$1;->invoke()Ljava/lang/Object; +Landroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$6; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$6;->(Landroidx/compose/ui/text/input/TextFieldValue;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/input/VisualTransformation;Lkotlin/jvm/functions/Function1;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/ui/graphics/Brush;ZIILandroidx/compose/ui/text/input/ImeOptions;Landroidx/compose/foundation/text/KeyboardActions;ZZLkotlin/jvm/functions/Function3;III)V +Landroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$decorationBoxModifier$1; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$decorationBoxModifier$1;->(Landroidx/compose/foundation/text/TextFieldState;)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$decorationBoxModifier$1;->invoke(Landroidx/compose/ui/layout/LayoutCoordinates;)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$decorationBoxModifier$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$drawModifier$1; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$drawModifier$1;->(Landroidx/compose/foundation/text/TextFieldState;Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/ui/text/input/OffsetMapping;)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$drawModifier$1;->invoke(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$drawModifier$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$focusModifier$1; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$focusModifier$1;->(Landroidx/compose/foundation/text/TextFieldState;Landroidx/compose/ui/text/input/TextInputService;ZZLandroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/ui/text/input/ImeOptions;Landroidx/compose/ui/text/input/OffsetMapping;Landroidx/compose/foundation/text/selection/TextFieldSelectionManager;Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/foundation/relocation/BringIntoViewRequester;)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$focusModifier$1;->invoke(Landroidx/compose/ui/focus/FocusState;)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$focusModifier$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$focusModifier$1$1$1; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$focusModifier$1$1$1;->(Landroidx/compose/foundation/relocation/BringIntoViewRequester;Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/foundation/text/TextFieldState;Landroidx/compose/foundation/text/TextLayoutResultProxy;Landroidx/compose/ui/text/input/OffsetMapping;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$focusModifier$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$focusModifier$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$onPositionedModifier$1; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$onPositionedModifier$1;->(Landroidx/compose/foundation/text/TextFieldState;ZLandroidx/compose/foundation/text/selection/TextFieldSelectionManager;Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/ui/text/input/OffsetMapping;)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$onPositionedModifier$1;->invoke(Landroidx/compose/ui/layout/LayoutCoordinates;)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$onPositionedModifier$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$pointerModifier$1; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$pointerModifier$1;->(Landroidx/compose/foundation/text/TextFieldState;Landroidx/compose/ui/focus/FocusRequester;ZLandroidx/compose/foundation/text/selection/TextFieldSelectionManager;Landroidx/compose/ui/text/input/OffsetMapping;)V +Landroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$scrollerPosition$1$1; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$scrollerPosition$1$1;->(Landroidx/compose/foundation/gestures/Orientation;)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$scrollerPosition$1$1;->invoke()Landroidx/compose/foundation/text/TextFieldScrollerPosition; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$scrollerPosition$1$1;->invoke()Ljava/lang/Object; +Landroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$semanticsModifier$1; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$semanticsModifier$1;->(Landroidx/compose/ui/text/input/ImeOptions;Landroidx/compose/ui/text/input/TransformedText;Landroidx/compose/ui/text/input/TextFieldValue;ZZZLandroidx/compose/foundation/text/TextFieldState;Landroidx/compose/ui/text/input/OffsetMapping;Landroidx/compose/foundation/text/selection/TextFieldSelectionManager;Landroidx/compose/ui/focus/FocusRequester;)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$semanticsModifier$1;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$semanticsModifier$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$semanticsModifier$1$1; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$semanticsModifier$1$1;->(Landroidx/compose/foundation/text/TextFieldState;)V +Landroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$semanticsModifier$1$10; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$semanticsModifier$1$10;->(Landroidx/compose/foundation/text/selection/TextFieldSelectionManager;)V +Landroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$semanticsModifier$1$2; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$semanticsModifier$1$2;->(ZZLandroidx/compose/foundation/text/TextFieldState;Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$semanticsModifier$1$2;->invoke(Landroidx/compose/ui/text/AnnotatedString;)Ljava/lang/Boolean; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$semanticsModifier$1$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$semanticsModifier$1$3; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$semanticsModifier$1$3;->(ZZLandroidx/compose/foundation/text/TextFieldState;Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Landroidx/compose/ui/text/input/TextFieldValue;)V +Landroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$semanticsModifier$1$4; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$semanticsModifier$1$4;->(Landroidx/compose/ui/text/input/OffsetMapping;ZLandroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/foundation/text/selection/TextFieldSelectionManager;Landroidx/compose/foundation/text/TextFieldState;)V +Landroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$semanticsModifier$1$5; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$semanticsModifier$1$5;->(Landroidx/compose/foundation/text/TextFieldState;Landroidx/compose/ui/text/input/ImeOptions;)V +Landroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$semanticsModifier$1$6; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$semanticsModifier$1$6;->(Landroidx/compose/foundation/text/TextFieldState;Landroidx/compose/ui/focus/FocusRequester;Z)V +Landroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$semanticsModifier$1$7; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$CoreTextField$semanticsModifier$1$7;->(Landroidx/compose/foundation/text/selection/TextFieldSelectionManager;)V +Landroidx/compose/foundation/text/CoreTextFieldKt$previewKeyEventToDeselectOnBack$1; +HSPLandroidx/compose/foundation/text/CoreTextFieldKt$previewKeyEventToDeselectOnBack$1;->(Landroidx/compose/foundation/text/TextFieldState;Landroidx/compose/foundation/text/selection/TextFieldSelectionManager;)V +Landroidx/compose/foundation/text/DeadKeyCombiner; +HSPLandroidx/compose/foundation/text/DeadKeyCombiner;->()V +Landroidx/compose/foundation/text/EmptyMeasurePolicy; +HSPLandroidx/compose/foundation/text/EmptyMeasurePolicy;->()V +HSPLandroidx/compose/foundation/text/EmptyMeasurePolicy;->()V +HSPLandroidx/compose/foundation/text/EmptyMeasurePolicy;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; +Landroidx/compose/foundation/text/EmptyMeasurePolicy$placementBlock$1; +HSPLandroidx/compose/foundation/text/EmptyMeasurePolicy$placementBlock$1;->()V +HSPLandroidx/compose/foundation/text/EmptyMeasurePolicy$placementBlock$1;->()V +HSPLandroidx/compose/foundation/text/EmptyMeasurePolicy$placementBlock$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/foundation/text/EmptyMeasurePolicy$placementBlock$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/FixedMotionDurationScale; +HSPLandroidx/compose/foundation/text/FixedMotionDurationScale;->()V +HSPLandroidx/compose/foundation/text/FixedMotionDurationScale;->()V +HSPLandroidx/compose/foundation/text/FixedMotionDurationScale;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/text/FixedMotionDurationScale;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; +HSPLandroidx/compose/foundation/text/FixedMotionDurationScale;->getScaleFactor()F +Landroidx/compose/foundation/text/Handle; +Landroidx/compose/foundation/text/HandleState; +HSPLandroidx/compose/foundation/text/HandleState;->$values()[Landroidx/compose/foundation/text/HandleState; +HSPLandroidx/compose/foundation/text/HandleState;->()V +HSPLandroidx/compose/foundation/text/HandleState;->(Ljava/lang/String;I)V +Landroidx/compose/foundation/text/HeightInLinesModifierKt; +HSPLandroidx/compose/foundation/text/HeightInLinesModifierKt;->heightInLines(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/text/TextStyle;II)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/text/HeightInLinesModifierKt;->validateMinMaxLines(II)V +Landroidx/compose/foundation/text/HeightInLinesModifierKt$heightInLines$2; +HSPLandroidx/compose/foundation/text/HeightInLinesModifierKt$heightInLines$2;->(IILandroidx/compose/ui/text/TextStyle;)V +HSPLandroidx/compose/foundation/text/HeightInLinesModifierKt$heightInLines$2;->invoke$lambda$2(Landroidx/compose/runtime/State;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/text/HeightInLinesModifierKt$heightInLines$2;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/text/HeightInLinesModifierKt$heightInLines$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/HorizontalScrollLayoutModifier; +HSPLandroidx/compose/foundation/text/HorizontalScrollLayoutModifier;->(Landroidx/compose/foundation/text/TextFieldScrollerPosition;ILandroidx/compose/ui/text/input/TransformedText;Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/foundation/text/HorizontalScrollLayoutModifier;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/foundation/text/HorizontalScrollLayoutModifier;->getCursorOffset()I +HSPLandroidx/compose/foundation/text/HorizontalScrollLayoutModifier;->getScrollerPosition()Landroidx/compose/foundation/text/TextFieldScrollerPosition; +HSPLandroidx/compose/foundation/text/HorizontalScrollLayoutModifier;->getTextLayoutResultProvider()Lkotlin/jvm/functions/Function0; +HSPLandroidx/compose/foundation/text/HorizontalScrollLayoutModifier;->getTransformedText()Landroidx/compose/ui/text/input/TransformedText; +HSPLandroidx/compose/foundation/text/HorizontalScrollLayoutModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; +Landroidx/compose/foundation/text/HorizontalScrollLayoutModifier$measure$1; +HSPLandroidx/compose/foundation/text/HorizontalScrollLayoutModifier$measure$1;->(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/foundation/text/HorizontalScrollLayoutModifier;Landroidx/compose/ui/layout/Placeable;I)V +HSPLandroidx/compose/foundation/text/HorizontalScrollLayoutModifier$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/foundation/text/HorizontalScrollLayoutModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/KeyMapping; +Landroidx/compose/foundation/text/KeyMapping_androidKt; +HSPLandroidx/compose/foundation/text/KeyMapping_androidKt;->()V +HSPLandroidx/compose/foundation/text/KeyMapping_androidKt;->getPlatformDefaultKeyMapping()Landroidx/compose/foundation/text/KeyMapping; +Landroidx/compose/foundation/text/KeyMapping_androidKt$platformDefaultKeyMapping$1; +HSPLandroidx/compose/foundation/text/KeyMapping_androidKt$platformDefaultKeyMapping$1;->()V +Landroidx/compose/foundation/text/KeyboardActionRunner; +HSPLandroidx/compose/foundation/text/KeyboardActionRunner;->()V +HSPLandroidx/compose/foundation/text/KeyboardActionRunner;->setFocusManager(Landroidx/compose/ui/focus/FocusManager;)V +HSPLandroidx/compose/foundation/text/KeyboardActionRunner;->setInputSession(Landroidx/compose/ui/text/input/TextInputSession;)V +HSPLandroidx/compose/foundation/text/KeyboardActionRunner;->setKeyboardActions(Landroidx/compose/foundation/text/KeyboardActions;)V +Landroidx/compose/foundation/text/KeyboardActionScope; +Landroidx/compose/foundation/text/KeyboardActions; +HSPLandroidx/compose/foundation/text/KeyboardActions;->()V +HSPLandroidx/compose/foundation/text/KeyboardActions;->(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 +HSPLandroidx/compose/foundation/text/KeyboardActions;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/text/KeyboardActions;->equals(Ljava/lang/Object;)Z +Landroidx/compose/foundation/text/KeyboardActions$Companion; +HSPLandroidx/compose/foundation/text/KeyboardActions$Companion;->()V +HSPLandroidx/compose/foundation/text/KeyboardActions$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/foundation/text/KeyboardOptions; +HSPLandroidx/compose/foundation/text/KeyboardOptions;->()V +HSPLandroidx/compose/foundation/text/KeyboardOptions;->(IZII)V +HSPLandroidx/compose/foundation/text/KeyboardOptions;->(IZIIILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/text/KeyboardOptions;->(IZIILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/text/KeyboardOptions;->copy-3m2b7yw$default(Landroidx/compose/foundation/text/KeyboardOptions;IZIIILjava/lang/Object;)Landroidx/compose/foundation/text/KeyboardOptions; +HSPLandroidx/compose/foundation/text/KeyboardOptions;->copy-3m2b7yw(IZII)Landroidx/compose/foundation/text/KeyboardOptions; +HSPLandroidx/compose/foundation/text/KeyboardOptions;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/foundation/text/KeyboardOptions;->toImeOptions$foundation_release(Z)Landroidx/compose/ui/text/input/ImeOptions; +Landroidx/compose/foundation/text/KeyboardOptions$Companion; +HSPLandroidx/compose/foundation/text/KeyboardOptions$Companion;->()V +HSPLandroidx/compose/foundation/text/KeyboardOptions$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/foundation/text/TextDelegate; +HSPLandroidx/compose/foundation/text/TextDelegate;->()V +HSPLandroidx/compose/foundation/text/TextDelegate;->(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;IIZILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/text/font/FontFamily$Resolver;Ljava/util/List;)V +HSPLandroidx/compose/foundation/text/TextDelegate;->(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;IIZILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/text/font/FontFamily$Resolver;Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/text/TextDelegate;->(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;IIZILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/text/font/FontFamily$Resolver;Ljava/util/List;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/text/TextDelegate;->getDensity()Landroidx/compose/ui/unit/Density; +HSPLandroidx/compose/foundation/text/TextDelegate;->getFontFamilyResolver()Landroidx/compose/ui/text/font/FontFamily$Resolver; +HSPLandroidx/compose/foundation/text/TextDelegate;->getMaxIntrinsicWidth()I +HSPLandroidx/compose/foundation/text/TextDelegate;->getMaxLines()I +HSPLandroidx/compose/foundation/text/TextDelegate;->getMinLines()I +HSPLandroidx/compose/foundation/text/TextDelegate;->getNonNullIntrinsics()Landroidx/compose/ui/text/MultiParagraphIntrinsics; +HSPLandroidx/compose/foundation/text/TextDelegate;->getOverflow-gIe3tQ8()I +HSPLandroidx/compose/foundation/text/TextDelegate;->getPlaceholders()Ljava/util/List; +HSPLandroidx/compose/foundation/text/TextDelegate;->getSoftWrap()Z +HSPLandroidx/compose/foundation/text/TextDelegate;->getStyle()Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/foundation/text/TextDelegate;->getText()Landroidx/compose/ui/text/AnnotatedString; +HSPLandroidx/compose/foundation/text/TextDelegate;->layout-NN6Ew-U(JLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/text/TextLayoutResult;)Landroidx/compose/ui/text/TextLayoutResult; +HSPLandroidx/compose/foundation/text/TextDelegate;->layoutIntrinsics(Landroidx/compose/ui/unit/LayoutDirection;)V +HSPLandroidx/compose/foundation/text/TextDelegate;->layoutText-K40F9xA(JLandroidx/compose/ui/unit/LayoutDirection;)Landroidx/compose/ui/text/MultiParagraph; +Landroidx/compose/foundation/text/TextDelegate$Companion; +HSPLandroidx/compose/foundation/text/TextDelegate$Companion;->()V +HSPLandroidx/compose/foundation/text/TextDelegate$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/foundation/text/TextDelegateKt; +HSPLandroidx/compose/foundation/text/TextDelegateKt;->ceilToIntPx(F)I +HSPLandroidx/compose/foundation/text/TextDelegateKt;->updateTextDelegate-rm0N8CA$default(Landroidx/compose/foundation/text/TextDelegate;Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/text/font/FontFamily$Resolver;ZIIILjava/util/List;ILjava/lang/Object;)Landroidx/compose/foundation/text/TextDelegate; +HSPLandroidx/compose/foundation/text/TextDelegateKt;->updateTextDelegate-rm0N8CA(Landroidx/compose/foundation/text/TextDelegate;Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/text/font/FontFamily$Resolver;ZIIILjava/util/List;)Landroidx/compose/foundation/text/TextDelegate; +Landroidx/compose/foundation/text/TextDragObserver; +Landroidx/compose/foundation/text/TextFieldCursorKt; +HSPLandroidx/compose/foundation/text/TextFieldCursorKt;->()V +HSPLandroidx/compose/foundation/text/TextFieldCursorKt;->access$getCursorAnimationSpec$p()Landroidx/compose/animation/core/AnimationSpec; +HSPLandroidx/compose/foundation/text/TextFieldCursorKt;->cursor(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/text/TextFieldState;Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/ui/text/input/OffsetMapping;Landroidx/compose/ui/graphics/Brush;Z)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/text/TextFieldCursorKt;->getDefaultCursorThickness()F +Landroidx/compose/foundation/text/TextFieldCursorKt$cursor$1; +HSPLandroidx/compose/foundation/text/TextFieldCursorKt$cursor$1;->(Landroidx/compose/ui/graphics/Brush;Landroidx/compose/foundation/text/TextFieldState;Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/ui/text/input/OffsetMapping;)V +HSPLandroidx/compose/foundation/text/TextFieldCursorKt$cursor$1;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/text/TextFieldCursorKt$cursor$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/TextFieldCursorKt$cursor$1$1; +HSPLandroidx/compose/foundation/text/TextFieldCursorKt$cursor$1$1;->(Landroidx/compose/animation/core/Animatable;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/text/TextFieldCursorKt$cursor$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/text/TextFieldCursorKt$cursor$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/TextFieldCursorKt$cursor$1$1$1; +HSPLandroidx/compose/foundation/text/TextFieldCursorKt$cursor$1$1$1;->(Landroidx/compose/animation/core/Animatable;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/text/TextFieldCursorKt$cursor$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/text/TextFieldCursorKt$cursor$1$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/text/TextFieldCursorKt$cursor$1$1$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/text/TextFieldCursorKt$cursor$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/TextFieldCursorKt$cursor$1$2; +HSPLandroidx/compose/foundation/text/TextFieldCursorKt$cursor$1$2;->(Landroidx/compose/animation/core/Animatable;Landroidx/compose/ui/text/input/OffsetMapping;Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/foundation/text/TextFieldState;Landroidx/compose/ui/graphics/Brush;)V +HSPLandroidx/compose/foundation/text/TextFieldCursorKt$cursor$1$2;->invoke(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V +HSPLandroidx/compose/foundation/text/TextFieldCursorKt$cursor$1$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/TextFieldCursorKt$cursorAnimationSpec$1; +HSPLandroidx/compose/foundation/text/TextFieldCursorKt$cursorAnimationSpec$1;->()V +HSPLandroidx/compose/foundation/text/TextFieldCursorKt$cursorAnimationSpec$1;->()V +HSPLandroidx/compose/foundation/text/TextFieldCursorKt$cursorAnimationSpec$1;->invoke(Landroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig;)V +HSPLandroidx/compose/foundation/text/TextFieldCursorKt$cursorAnimationSpec$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/TextFieldDelegate; +HSPLandroidx/compose/foundation/text/TextFieldDelegate;->()V +Landroidx/compose/foundation/text/TextFieldDelegate$Companion; +HSPLandroidx/compose/foundation/text/TextFieldDelegate$Companion;->()V +HSPLandroidx/compose/foundation/text/TextFieldDelegate$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/text/TextFieldDelegate$Companion;->draw$foundation_release(Landroidx/compose/ui/graphics/Canvas;Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/ui/text/input/OffsetMapping;Landroidx/compose/ui/text/TextLayoutResult;Landroidx/compose/ui/graphics/Paint;)V +HSPLandroidx/compose/foundation/text/TextFieldDelegate$Companion;->layout-_EkL_-Y$foundation_release(Landroidx/compose/foundation/text/TextDelegate;JLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/text/TextLayoutResult;)Lkotlin/Triple; +HSPLandroidx/compose/foundation/text/TextFieldDelegate$Companion;->notifyFocusedRect$foundation_release(Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/foundation/text/TextDelegate;Landroidx/compose/ui/text/TextLayoutResult;Landroidx/compose/ui/layout/LayoutCoordinates;Landroidx/compose/ui/text/input/TextInputSession;ZLandroidx/compose/ui/text/input/OffsetMapping;)V +HSPLandroidx/compose/foundation/text/TextFieldDelegate$Companion;->onBlur$foundation_release(Landroidx/compose/ui/text/input/TextInputSession;Landroidx/compose/ui/text/input/EditProcessor;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/foundation/text/TextFieldDelegate$Companion;->onEditCommand$foundation_release(Ljava/util/List;Landroidx/compose/ui/text/input/EditProcessor;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/text/input/TextInputSession;)V +HSPLandroidx/compose/foundation/text/TextFieldDelegate$Companion;->onFocus$foundation_release(Landroidx/compose/ui/text/input/TextInputService;Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/ui/text/input/EditProcessor;Landroidx/compose/ui/text/input/ImeOptions;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/text/input/TextInputSession; +HSPLandroidx/compose/foundation/text/TextFieldDelegate$Companion;->restartInput$foundation_release(Landroidx/compose/ui/text/input/TextInputService;Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/ui/text/input/EditProcessor;Landroidx/compose/ui/text/input/ImeOptions;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/text/input/TextInputSession; +Landroidx/compose/foundation/text/TextFieldDelegate$Companion$restartInput$1; +HSPLandroidx/compose/foundation/text/TextFieldDelegate$Companion$restartInput$1;->(Landroidx/compose/ui/text/input/EditProcessor;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/internal/Ref$ObjectRef;)V +Landroidx/compose/foundation/text/TextFieldDelegateKt; +HSPLandroidx/compose/foundation/text/TextFieldDelegateKt;->()V +HSPLandroidx/compose/foundation/text/TextFieldDelegateKt;->computeSizeForDefaultText$default(Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/text/font/FontFamily$Resolver;Ljava/lang/String;IILjava/lang/Object;)J +HSPLandroidx/compose/foundation/text/TextFieldDelegateKt;->computeSizeForDefaultText(Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/text/font/FontFamily$Resolver;Ljava/lang/String;I)J +HSPLandroidx/compose/foundation/text/TextFieldDelegateKt;->getEmptyTextReplacement()Ljava/lang/String; +Landroidx/compose/foundation/text/TextFieldFocusModifier_androidKt; +HSPLandroidx/compose/foundation/text/TextFieldFocusModifier_androidKt;->interceptDPadAndMoveFocus(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/text/TextFieldState;Landroidx/compose/ui/focus/FocusManager;)Landroidx/compose/ui/Modifier; +Landroidx/compose/foundation/text/TextFieldFocusModifier_androidKt$interceptDPadAndMoveFocus$1; +HSPLandroidx/compose/foundation/text/TextFieldFocusModifier_androidKt$interceptDPadAndMoveFocus$1;->(Landroidx/compose/ui/focus/FocusManager;Landroidx/compose/foundation/text/TextFieldState;)V +Landroidx/compose/foundation/text/TextFieldGestureModifiersKt; +HSPLandroidx/compose/foundation/text/TextFieldGestureModifiersKt;->longPressDragGestureFilter(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/text/TextDragObserver;Z)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/text/TextFieldGestureModifiersKt;->textFieldFocusModifier(Landroidx/compose/ui/Modifier;ZLandroidx/compose/ui/focus/FocusRequester;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; +Landroidx/compose/foundation/text/TextFieldGestureModifiersKt$longPressDragGestureFilter$1; +HSPLandroidx/compose/foundation/text/TextFieldGestureModifiersKt$longPressDragGestureFilter$1;->(Landroidx/compose/foundation/text/TextDragObserver;Lkotlin/coroutines/Continuation;)V +Landroidx/compose/foundation/text/TextFieldKeyInput; +HSPLandroidx/compose/foundation/text/TextFieldKeyInput;->(Landroidx/compose/foundation/text/TextFieldState;Landroidx/compose/foundation/text/selection/TextFieldSelectionManager;Landroidx/compose/ui/text/input/TextFieldValue;ZZLandroidx/compose/foundation/text/selection/TextPreparedSelectionState;Landroidx/compose/ui/text/input/OffsetMapping;Landroidx/compose/foundation/text/UndoManager;Landroidx/compose/foundation/text/DeadKeyCombiner;Landroidx/compose/foundation/text/KeyMapping;Lkotlin/jvm/functions/Function1;I)V +HSPLandroidx/compose/foundation/text/TextFieldKeyInput;->(Landroidx/compose/foundation/text/TextFieldState;Landroidx/compose/foundation/text/selection/TextFieldSelectionManager;Landroidx/compose/ui/text/input/TextFieldValue;ZZLandroidx/compose/foundation/text/selection/TextPreparedSelectionState;Landroidx/compose/ui/text/input/OffsetMapping;Landroidx/compose/foundation/text/UndoManager;Landroidx/compose/foundation/text/DeadKeyCombiner;Landroidx/compose/foundation/text/KeyMapping;Lkotlin/jvm/functions/Function1;IILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/text/TextFieldKeyInput;->(Landroidx/compose/foundation/text/TextFieldState;Landroidx/compose/foundation/text/selection/TextFieldSelectionManager;Landroidx/compose/ui/text/input/TextFieldValue;ZZLandroidx/compose/foundation/text/selection/TextPreparedSelectionState;Landroidx/compose/ui/text/input/OffsetMapping;Landroidx/compose/foundation/text/UndoManager;Landroidx/compose/foundation/text/DeadKeyCombiner;Landroidx/compose/foundation/text/KeyMapping;Lkotlin/jvm/functions/Function1;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/foundation/text/TextFieldKeyInputKt; +HSPLandroidx/compose/foundation/text/TextFieldKeyInputKt;->textFieldKeyInput-2WJ9YEU(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/text/TextFieldState;Landroidx/compose/foundation/text/selection/TextFieldSelectionManager;Landroidx/compose/ui/text/input/TextFieldValue;Lkotlin/jvm/functions/Function1;ZZLandroidx/compose/ui/text/input/OffsetMapping;Landroidx/compose/foundation/text/UndoManager;I)Landroidx/compose/ui/Modifier; +Landroidx/compose/foundation/text/TextFieldKeyInputKt$textFieldKeyInput$2; +HSPLandroidx/compose/foundation/text/TextFieldKeyInputKt$textFieldKeyInput$2;->(Landroidx/compose/foundation/text/TextFieldState;Landroidx/compose/foundation/text/selection/TextFieldSelectionManager;Landroidx/compose/ui/text/input/TextFieldValue;ZZLandroidx/compose/ui/text/input/OffsetMapping;Landroidx/compose/foundation/text/UndoManager;Lkotlin/jvm/functions/Function1;I)V +HSPLandroidx/compose/foundation/text/TextFieldKeyInputKt$textFieldKeyInput$2;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/text/TextFieldKeyInputKt$textFieldKeyInput$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/TextFieldKeyInputKt$textFieldKeyInput$2$1; +HSPLandroidx/compose/foundation/text/TextFieldKeyInputKt$textFieldKeyInput$2$1;->(Ljava/lang/Object;)V +Landroidx/compose/foundation/text/TextFieldPressGestureFilterKt; +HSPLandroidx/compose/foundation/text/TextFieldPressGestureFilterKt;->tapPressTextFieldModifier(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/interaction/MutableInteractionSource;ZLkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; +Landroidx/compose/foundation/text/TextFieldPressGestureFilterKt$tapPressTextFieldModifier$1; +HSPLandroidx/compose/foundation/text/TextFieldPressGestureFilterKt$tapPressTextFieldModifier$1;->(Lkotlin/jvm/functions/Function1;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V +HSPLandroidx/compose/foundation/text/TextFieldPressGestureFilterKt$tapPressTextFieldModifier$1;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/text/TextFieldPressGestureFilterKt$tapPressTextFieldModifier$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/TextFieldPressGestureFilterKt$tapPressTextFieldModifier$1$1$1; +HSPLandroidx/compose/foundation/text/TextFieldPressGestureFilterKt$tapPressTextFieldModifier$1$1$1;->(Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V +HSPLandroidx/compose/foundation/text/TextFieldPressGestureFilterKt$tapPressTextFieldModifier$1$1$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult; +HSPLandroidx/compose/foundation/text/TextFieldPressGestureFilterKt$tapPressTextFieldModifier$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/TextFieldPressGestureFilterKt$tapPressTextFieldModifier$1$1$1$invoke$$inlined$onDispose$1; +HSPLandroidx/compose/foundation/text/TextFieldPressGestureFilterKt$tapPressTextFieldModifier$1$1$1$invoke$$inlined$onDispose$1;->(Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V +HSPLandroidx/compose/foundation/text/TextFieldPressGestureFilterKt$tapPressTextFieldModifier$1$1$1$invoke$$inlined$onDispose$1;->dispose()V +Landroidx/compose/foundation/text/TextFieldPressGestureFilterKt$tapPressTextFieldModifier$1$2; +HSPLandroidx/compose/foundation/text/TextFieldPressGestureFilterKt$tapPressTextFieldModifier$1$2;->(Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V +Landroidx/compose/foundation/text/TextFieldScrollKt; +HSPLandroidx/compose/foundation/text/TextFieldScrollKt;->access$getCursorRectInScroller(Landroidx/compose/ui/unit/Density;ILandroidx/compose/ui/text/input/TransformedText;Landroidx/compose/ui/text/TextLayoutResult;ZI)Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/foundation/text/TextFieldScrollKt;->getCursorRectInScroller(Landroidx/compose/ui/unit/Density;ILandroidx/compose/ui/text/input/TransformedText;Landroidx/compose/ui/text/TextLayoutResult;ZI)Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/foundation/text/TextFieldScrollKt;->textFieldScroll(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/text/TextFieldScrollerPosition;Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/ui/text/input/VisualTransformation;Lkotlin/jvm/functions/Function0;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/text/TextFieldScrollKt;->textFieldScrollable(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/text/TextFieldScrollerPosition;Landroidx/compose/foundation/interaction/MutableInteractionSource;Z)Landroidx/compose/ui/Modifier; +Landroidx/compose/foundation/text/TextFieldScrollKt$WhenMappings; +HSPLandroidx/compose/foundation/text/TextFieldScrollKt$WhenMappings;->()V +Landroidx/compose/foundation/text/TextFieldScrollKt$textFieldScrollable$2; +HSPLandroidx/compose/foundation/text/TextFieldScrollKt$textFieldScrollable$2;->(Landroidx/compose/foundation/text/TextFieldScrollerPosition;ZLandroidx/compose/foundation/interaction/MutableInteractionSource;)V +HSPLandroidx/compose/foundation/text/TextFieldScrollKt$textFieldScrollable$2;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/text/TextFieldScrollKt$textFieldScrollable$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/TextFieldScrollKt$textFieldScrollable$2$scrollableState$1$1; +HSPLandroidx/compose/foundation/text/TextFieldScrollKt$textFieldScrollable$2$scrollableState$1$1;->(Landroidx/compose/foundation/text/TextFieldScrollerPosition;)V +Landroidx/compose/foundation/text/TextFieldScrollKt$textFieldScrollable$2$wrappedScrollableState$1$1; +HSPLandroidx/compose/foundation/text/TextFieldScrollKt$textFieldScrollable$2$wrappedScrollableState$1$1;->(Landroidx/compose/foundation/gestures/ScrollableState;Landroidx/compose/foundation/text/TextFieldScrollerPosition;)V +Landroidx/compose/foundation/text/TextFieldScrollKt$textFieldScrollable$2$wrappedScrollableState$1$1$canScrollBackward$2; +HSPLandroidx/compose/foundation/text/TextFieldScrollKt$textFieldScrollable$2$wrappedScrollableState$1$1$canScrollBackward$2;->(Landroidx/compose/foundation/text/TextFieldScrollerPosition;)V +Landroidx/compose/foundation/text/TextFieldScrollKt$textFieldScrollable$2$wrappedScrollableState$1$1$canScrollForward$2; +HSPLandroidx/compose/foundation/text/TextFieldScrollKt$textFieldScrollable$2$wrappedScrollableState$1$1$canScrollForward$2;->(Landroidx/compose/foundation/text/TextFieldScrollerPosition;)V +Landroidx/compose/foundation/text/TextFieldScrollerPosition; +HSPLandroidx/compose/foundation/text/TextFieldScrollerPosition;->()V +HSPLandroidx/compose/foundation/text/TextFieldScrollerPosition;->(Landroidx/compose/foundation/gestures/Orientation;F)V +HSPLandroidx/compose/foundation/text/TextFieldScrollerPosition;->(Landroidx/compose/foundation/gestures/Orientation;FILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/text/TextFieldScrollerPosition;->access$getSaver$cp()Landroidx/compose/runtime/saveable/Saver; +HSPLandroidx/compose/foundation/text/TextFieldScrollerPosition;->coerceOffset$foundation_release(FFI)V +HSPLandroidx/compose/foundation/text/TextFieldScrollerPosition;->getMaximum()F +HSPLandroidx/compose/foundation/text/TextFieldScrollerPosition;->getOffset()F +HSPLandroidx/compose/foundation/text/TextFieldScrollerPosition;->getOffsetToFollow-5zc-tL8(J)I +HSPLandroidx/compose/foundation/text/TextFieldScrollerPosition;->getOrientation()Landroidx/compose/foundation/gestures/Orientation; +HSPLandroidx/compose/foundation/text/TextFieldScrollerPosition;->setMaximum(F)V +HSPLandroidx/compose/foundation/text/TextFieldScrollerPosition;->setOffset(F)V +HSPLandroidx/compose/foundation/text/TextFieldScrollerPosition;->setPreviousSelection-5zc-tL8(J)V +HSPLandroidx/compose/foundation/text/TextFieldScrollerPosition;->update(Landroidx/compose/foundation/gestures/Orientation;Landroidx/compose/ui/geometry/Rect;II)V +Landroidx/compose/foundation/text/TextFieldScrollerPosition$Companion; +HSPLandroidx/compose/foundation/text/TextFieldScrollerPosition$Companion;->()V +HSPLandroidx/compose/foundation/text/TextFieldScrollerPosition$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/text/TextFieldScrollerPosition$Companion;->getSaver()Landroidx/compose/runtime/saveable/Saver; +Landroidx/compose/foundation/text/TextFieldScrollerPosition$Companion$Saver$1; +HSPLandroidx/compose/foundation/text/TextFieldScrollerPosition$Companion$Saver$1;->()V +HSPLandroidx/compose/foundation/text/TextFieldScrollerPosition$Companion$Saver$1;->()V +HSPLandroidx/compose/foundation/text/TextFieldScrollerPosition$Companion$Saver$1;->invoke(Landroidx/compose/runtime/saveable/SaverScope;Landroidx/compose/foundation/text/TextFieldScrollerPosition;)Ljava/util/List; +HSPLandroidx/compose/foundation/text/TextFieldScrollerPosition$Companion$Saver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/TextFieldScrollerPosition$Companion$Saver$2; +HSPLandroidx/compose/foundation/text/TextFieldScrollerPosition$Companion$Saver$2;->()V +HSPLandroidx/compose/foundation/text/TextFieldScrollerPosition$Companion$Saver$2;->()V +Landroidx/compose/foundation/text/TextFieldSize; +HSPLandroidx/compose/foundation/text/TextFieldSize;->(Landroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/text/font/FontFamily$Resolver;Landroidx/compose/ui/text/TextStyle;Ljava/lang/Object;)V +HSPLandroidx/compose/foundation/text/TextFieldSize;->computeMinSize-YbymL2g()J +HSPLandroidx/compose/foundation/text/TextFieldSize;->getMinSize-YbymL2g()J +HSPLandroidx/compose/foundation/text/TextFieldSize;->update(Landroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/text/font/FontFamily$Resolver;Landroidx/compose/ui/text/TextStyle;Ljava/lang/Object;)V +Landroidx/compose/foundation/text/TextFieldSizeKt; +HSPLandroidx/compose/foundation/text/TextFieldSizeKt;->textFieldMinSize(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/text/TextStyle;)Landroidx/compose/ui/Modifier; +Landroidx/compose/foundation/text/TextFieldSizeKt$textFieldMinSize$1; +HSPLandroidx/compose/foundation/text/TextFieldSizeKt$textFieldMinSize$1;->(Landroidx/compose/ui/text/TextStyle;)V +HSPLandroidx/compose/foundation/text/TextFieldSizeKt$textFieldMinSize$1;->access$invoke$lambda$2(Landroidx/compose/runtime/State;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/text/TextFieldSizeKt$textFieldMinSize$1;->invoke$lambda$2(Landroidx/compose/runtime/State;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/text/TextFieldSizeKt$textFieldMinSize$1;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/text/TextFieldSizeKt$textFieldMinSize$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/TextFieldSizeKt$textFieldMinSize$1$1; +HSPLandroidx/compose/foundation/text/TextFieldSizeKt$textFieldMinSize$1$1;->(Landroidx/compose/foundation/text/TextFieldSize;)V +HSPLandroidx/compose/foundation/text/TextFieldSizeKt$textFieldMinSize$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/text/TextFieldSizeKt$textFieldMinSize$1$1;->invoke-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; +Landroidx/compose/foundation/text/TextFieldSizeKt$textFieldMinSize$1$1$1; +HSPLandroidx/compose/foundation/text/TextFieldSizeKt$textFieldMinSize$1$1$1;->(Landroidx/compose/ui/layout/Placeable;)V +HSPLandroidx/compose/foundation/text/TextFieldSizeKt$textFieldMinSize$1$1$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/foundation/text/TextFieldSizeKt$textFieldMinSize$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/TextFieldState; +HSPLandroidx/compose/foundation/text/TextFieldState;->(Landroidx/compose/foundation/text/TextDelegate;Landroidx/compose/runtime/RecomposeScope;)V +HSPLandroidx/compose/foundation/text/TextFieldState;->access$getOnValueChangeOriginal$p(Landroidx/compose/foundation/text/TextFieldState;)Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/foundation/text/TextFieldState;->getHandleState()Landroidx/compose/foundation/text/HandleState; +HSPLandroidx/compose/foundation/text/TextFieldState;->getHasFocus()Z +HSPLandroidx/compose/foundation/text/TextFieldState;->getInputSession()Landroidx/compose/ui/text/input/TextInputSession; +HSPLandroidx/compose/foundation/text/TextFieldState;->getLayoutCoordinates()Landroidx/compose/ui/layout/LayoutCoordinates; +HSPLandroidx/compose/foundation/text/TextFieldState;->getLayoutResult()Landroidx/compose/foundation/text/TextLayoutResultProxy; +HSPLandroidx/compose/foundation/text/TextFieldState;->getMinHeightForSingleLineField-D9Ej5fM()F +HSPLandroidx/compose/foundation/text/TextFieldState;->getOnImeActionPerformed()Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/foundation/text/TextFieldState;->getOnValueChange()Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/foundation/text/TextFieldState;->getProcessor()Landroidx/compose/ui/text/input/EditProcessor; +HSPLandroidx/compose/foundation/text/TextFieldState;->getRecomposeScope()Landroidx/compose/runtime/RecomposeScope; +HSPLandroidx/compose/foundation/text/TextFieldState;->getSelectionPaint()Landroidx/compose/ui/graphics/Paint; +HSPLandroidx/compose/foundation/text/TextFieldState;->getTextDelegate()Landroidx/compose/foundation/text/TextDelegate; +HSPLandroidx/compose/foundation/text/TextFieldState;->getUntransformedText()Landroidx/compose/ui/text/AnnotatedString; +HSPLandroidx/compose/foundation/text/TextFieldState;->setHandleState(Landroidx/compose/foundation/text/HandleState;)V +HSPLandroidx/compose/foundation/text/TextFieldState;->setHasFocus(Z)V +HSPLandroidx/compose/foundation/text/TextFieldState;->setInputSession(Landroidx/compose/ui/text/input/TextInputSession;)V +HSPLandroidx/compose/foundation/text/TextFieldState;->setLayoutCoordinates(Landroidx/compose/ui/layout/LayoutCoordinates;)V +HSPLandroidx/compose/foundation/text/TextFieldState;->setLayoutResult(Landroidx/compose/foundation/text/TextLayoutResultProxy;)V +HSPLandroidx/compose/foundation/text/TextFieldState;->setMinHeightForSingleLineField-0680j_4(F)V +HSPLandroidx/compose/foundation/text/TextFieldState;->update-fnh65Uc(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;ZLandroidx/compose/ui/unit/Density;Landroidx/compose/ui/text/font/FontFamily$Resolver;Lkotlin/jvm/functions/Function1;Landroidx/compose/foundation/text/KeyboardActions;Landroidx/compose/ui/focus/FocusManager;J)V +Landroidx/compose/foundation/text/TextFieldState$onImeActionPerformed$1; +HSPLandroidx/compose/foundation/text/TextFieldState$onImeActionPerformed$1;->(Landroidx/compose/foundation/text/TextFieldState;)V +Landroidx/compose/foundation/text/TextFieldState$onValueChange$1; +HSPLandroidx/compose/foundation/text/TextFieldState$onValueChange$1;->(Landroidx/compose/foundation/text/TextFieldState;)V +HSPLandroidx/compose/foundation/text/TextFieldState$onValueChange$1;->invoke(Landroidx/compose/ui/text/input/TextFieldValue;)V +HSPLandroidx/compose/foundation/text/TextFieldState$onValueChange$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/TextFieldState$onValueChangeOriginal$1; +HSPLandroidx/compose/foundation/text/TextFieldState$onValueChangeOriginal$1;->()V +HSPLandroidx/compose/foundation/text/TextFieldState$onValueChangeOriginal$1;->()V +Landroidx/compose/foundation/text/TextLayoutHelperKt; +HSPLandroidx/compose/foundation/text/TextLayoutHelperKt;->canReuse-7_7YC6M(Landroidx/compose/ui/text/TextLayoutResult;Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;Ljava/util/List;IZILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/text/font/FontFamily$Resolver;J)Z +Landroidx/compose/foundation/text/TextLayoutResultProxy; +HSPLandroidx/compose/foundation/text/TextLayoutResultProxy;->(Landroidx/compose/ui/text/TextLayoutResult;)V +HSPLandroidx/compose/foundation/text/TextLayoutResultProxy;->getValue()Landroidx/compose/ui/text/TextLayoutResult; +HSPLandroidx/compose/foundation/text/TextLayoutResultProxy;->setDecorationBoxCoordinates(Landroidx/compose/ui/layout/LayoutCoordinates;)V +HSPLandroidx/compose/foundation/text/TextLayoutResultProxy;->setInnerTextFieldCoordinates(Landroidx/compose/ui/layout/LayoutCoordinates;)V +Landroidx/compose/foundation/text/TextPointerIcon_androidKt; +HSPLandroidx/compose/foundation/text/TextPointerIcon_androidKt;->()V +HSPLandroidx/compose/foundation/text/TextPointerIcon_androidKt;->getTextPointerIcon()Landroidx/compose/ui/input/pointer/PointerIcon; +Landroidx/compose/foundation/text/TouchMode_androidKt; +HSPLandroidx/compose/foundation/text/TouchMode_androidKt;->()V +HSPLandroidx/compose/foundation/text/TouchMode_androidKt;->isInTouchMode()Z +Landroidx/compose/foundation/text/UndoManager; +HSPLandroidx/compose/foundation/text/UndoManager;->(I)V +HSPLandroidx/compose/foundation/text/UndoManager;->(IILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/text/UndoManager;->makeSnapshot(Landroidx/compose/ui/text/input/TextFieldValue;)V +HSPLandroidx/compose/foundation/text/UndoManager;->snapshotIfNeeded$default(Landroidx/compose/foundation/text/UndoManager;Landroidx/compose/ui/text/input/TextFieldValue;JILjava/lang/Object;)V +HSPLandroidx/compose/foundation/text/UndoManager;->snapshotIfNeeded(Landroidx/compose/ui/text/input/TextFieldValue;J)V +Landroidx/compose/foundation/text/UndoManager$Entry; +HSPLandroidx/compose/foundation/text/UndoManager$Entry;->(Landroidx/compose/foundation/text/UndoManager$Entry;Landroidx/compose/ui/text/input/TextFieldValue;)V +Landroidx/compose/foundation/text/UndoManagerKt; +HSPLandroidx/compose/foundation/text/UndoManagerKt;->()V +HSPLandroidx/compose/foundation/text/UndoManagerKt;->getSNAPSHOTS_INTERVAL_MILLIS()I +Landroidx/compose/foundation/text/UndoManager_jvmKt; +HSPLandroidx/compose/foundation/text/UndoManager_jvmKt;->timeNowMillis()J +Landroidx/compose/foundation/text/ValidatingOffsetMapping; +HSPLandroidx/compose/foundation/text/ValidatingOffsetMapping;->(Landroidx/compose/ui/text/input/OffsetMapping;II)V +HSPLandroidx/compose/foundation/text/ValidatingOffsetMapping;->originalToTransformed(I)I +Landroidx/compose/foundation/text/ValidatingOffsetMappingKt; +HSPLandroidx/compose/foundation/text/ValidatingOffsetMappingKt;->()V +HSPLandroidx/compose/foundation/text/ValidatingOffsetMappingKt;->filterWithValidation(Landroidx/compose/ui/text/input/VisualTransformation;Landroidx/compose/ui/text/AnnotatedString;)Landroidx/compose/ui/text/input/TransformedText; +HSPLandroidx/compose/foundation/text/ValidatingOffsetMappingKt;->getValidatingEmptyOffsetMappingIdentity()Landroidx/compose/ui/text/input/OffsetMapping; +Landroidx/compose/foundation/text/modifiers/InlineDensity; +HSPLandroidx/compose/foundation/text/modifiers/InlineDensity;->()V +HSPLandroidx/compose/foundation/text/modifiers/InlineDensity;->access$getUnspecified$cp()J +HSPLandroidx/compose/foundation/text/modifiers/InlineDensity;->constructor-impl(FF)J +HSPLandroidx/compose/foundation/text/modifiers/InlineDensity;->constructor-impl(J)J +HSPLandroidx/compose/foundation/text/modifiers/InlineDensity;->constructor-impl(Landroidx/compose/ui/unit/Density;)J +HSPLandroidx/compose/foundation/text/modifiers/InlineDensity;->equals-impl0(JJ)Z +Landroidx/compose/foundation/text/modifiers/InlineDensity$Companion; +HSPLandroidx/compose/foundation/text/modifiers/InlineDensity$Companion;->()V +HSPLandroidx/compose/foundation/text/modifiers/InlineDensity$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/text/modifiers/InlineDensity$Companion;->getUnspecified-L26CHvs()J +Landroidx/compose/foundation/text/modifiers/LayoutUtilsKt; +HSPLandroidx/compose/foundation/text/modifiers/LayoutUtilsKt;->finalConstraints-tfFHcEY(JZIF)J +HSPLandroidx/compose/foundation/text/modifiers/LayoutUtilsKt;->finalMaxLines-xdlQI24(ZII)I +HSPLandroidx/compose/foundation/text/modifiers/LayoutUtilsKt;->finalMaxWidth-tfFHcEY(JZIF)I +Landroidx/compose/foundation/text/modifiers/MultiParagraphLayoutCache; +HSPLandroidx/compose/foundation/text/modifiers/MultiParagraphLayoutCache;->(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamily$Resolver;IZIILjava/util/List;)V +HSPLandroidx/compose/foundation/text/modifiers/MultiParagraphLayoutCache;->(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamily$Resolver;IZIILjava/util/List;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/text/modifiers/MultiParagraphLayoutCache;->getTextLayoutResult()Landroidx/compose/ui/text/TextLayoutResult; +HSPLandroidx/compose/foundation/text/modifiers/MultiParagraphLayoutCache;->layoutText-K40F9xA(JLandroidx/compose/ui/unit/LayoutDirection;)Landroidx/compose/ui/text/MultiParagraph; +HSPLandroidx/compose/foundation/text/modifiers/MultiParagraphLayoutCache;->layoutWithConstraints-K40F9xA(JLandroidx/compose/ui/unit/LayoutDirection;)Z +HSPLandroidx/compose/foundation/text/modifiers/MultiParagraphLayoutCache;->markDirty()V +HSPLandroidx/compose/foundation/text/modifiers/MultiParagraphLayoutCache;->newLayoutWillBeDifferent-VKLhPVY(Landroidx/compose/ui/text/TextLayoutResult;JLandroidx/compose/ui/unit/LayoutDirection;)Z +HSPLandroidx/compose/foundation/text/modifiers/MultiParagraphLayoutCache;->setDensity$foundation_release(Landroidx/compose/ui/unit/Density;)V +HSPLandroidx/compose/foundation/text/modifiers/MultiParagraphLayoutCache;->setLayoutDirection(Landroidx/compose/ui/unit/LayoutDirection;)Landroidx/compose/ui/text/MultiParagraphIntrinsics; +HSPLandroidx/compose/foundation/text/modifiers/MultiParagraphLayoutCache;->textLayoutResult-VKLhPVY(Landroidx/compose/ui/unit/LayoutDirection;JLandroidx/compose/ui/text/MultiParagraph;)Landroidx/compose/ui/text/TextLayoutResult; +HSPLandroidx/compose/foundation/text/modifiers/MultiParagraphLayoutCache;->update-ZNqEYIc(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamily$Resolver;IZIILjava/util/List;)V +Landroidx/compose/foundation/text/modifiers/SelectionController; +Landroidx/compose/foundation/text/modifiers/TextAnnotatedStringElement; +HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringElement;->(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamily$Resolver;Lkotlin/jvm/functions/Function1;IZIILjava/util/List;Lkotlin/jvm/functions/Function1;Landroidx/compose/foundation/text/modifiers/SelectionController;Landroidx/compose/ui/graphics/ColorProducer;)V +HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringElement;->(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamily$Resolver;Lkotlin/jvm/functions/Function1;IZIILjava/util/List;Lkotlin/jvm/functions/Function1;Landroidx/compose/foundation/text/modifiers/SelectionController;Landroidx/compose/ui/graphics/ColorProducer;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringElement;->create()Landroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode; +HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringElement;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringElement;->update(Landroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode;)V +HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringElement;->update(Landroidx/compose/ui/Modifier$Node;)V +Landroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode; +HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode;->(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamily$Resolver;Lkotlin/jvm/functions/Function1;IZIILjava/util/List;Lkotlin/jvm/functions/Function1;Landroidx/compose/foundation/text/modifiers/SelectionController;Landroidx/compose/ui/graphics/ColorProducer;)V +HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode;->(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamily$Resolver;Lkotlin/jvm/functions/Function1;IZIILjava/util/List;Lkotlin/jvm/functions/Function1;Landroidx/compose/foundation/text/modifiers/SelectionController;Landroidx/compose/ui/graphics/ColorProducer;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode;->applySemantics(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V +HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode;->doInvalidations(ZZZZ)V +HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V +HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode;->getLayoutCache()Landroidx/compose/foundation/text/modifiers/MultiParagraphLayoutCache; +HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode;->getLayoutCache(Landroidx/compose/ui/unit/Density;)Landroidx/compose/foundation/text/modifiers/MultiParagraphLayoutCache; +HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; +HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode;->updateCallbacks(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Landroidx/compose/foundation/text/modifiers/SelectionController;)Z +HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode;->updateDraw(Landroidx/compose/ui/graphics/ColorProducer;Landroidx/compose/ui/text/TextStyle;)Z +HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode;->updateLayoutRelatedArgs-MPT68mk(Landroidx/compose/ui/text/TextStyle;Ljava/util/List;IIZLandroidx/compose/ui/text/font/FontFamily$Resolver;I)Z +HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode;->updateText(Landroidx/compose/ui/text/AnnotatedString;)Z +Landroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode$applySemantics$1; +HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode$applySemantics$1;->(Landroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode;)V +Landroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode$measure$1; +HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode$measure$1;->(Landroidx/compose/ui/layout/Placeable;)V +HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/foundation/text/modifiers/TextAnnotatedStringNode$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/selection/MouseSelectionObserver; +Landroidx/compose/foundation/text/selection/SelectionMagnifierKt; +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt;->()V +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt;->access$getOffsetDisplacementThreshold$p()J +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt;->access$getUnspecifiedAnimationVector2D$p()Landroidx/compose/animation/core/AnimationVector2D; +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt;->access$getUnspecifiedSafeOffsetVectorConverter$p()Landroidx/compose/animation/core/TwoWayConverter; +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt;->access$rememberAnimatedMagnifierPosition$lambda$1(Landroidx/compose/runtime/State;)J +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt;->access$rememberAnimatedMagnifierPosition(Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State; +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt;->animatedSelectionMagnifier(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt;->rememberAnimatedMagnifierPosition$lambda$1(Landroidx/compose/runtime/State;)J +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt;->rememberAnimatedMagnifierPosition(Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State; +Landroidx/compose/foundation/text/selection/SelectionMagnifierKt$UnspecifiedSafeOffsetVectorConverter$1; +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt$UnspecifiedSafeOffsetVectorConverter$1;->()V +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt$UnspecifiedSafeOffsetVectorConverter$1;->()V +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt$UnspecifiedSafeOffsetVectorConverter$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt$UnspecifiedSafeOffsetVectorConverter$1;->invoke-k-4lQ0M(J)Landroidx/compose/animation/core/AnimationVector2D; +Landroidx/compose/foundation/text/selection/SelectionMagnifierKt$UnspecifiedSafeOffsetVectorConverter$2; +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt$UnspecifiedSafeOffsetVectorConverter$2;->()V +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt$UnspecifiedSafeOffsetVectorConverter$2;->()V +Landroidx/compose/foundation/text/selection/SelectionMagnifierKt$animatedSelectionMagnifier$1; +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt$animatedSelectionMagnifier$1;->(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt$animatedSelectionMagnifier$1;->access$invoke$lambda$0(Landroidx/compose/runtime/State;)J +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt$animatedSelectionMagnifier$1;->invoke$lambda$0(Landroidx/compose/runtime/State;)J +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt$animatedSelectionMagnifier$1;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt$animatedSelectionMagnifier$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/selection/SelectionMagnifierKt$animatedSelectionMagnifier$1$1$1; +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt$animatedSelectionMagnifier$1$1$1;->(Landroidx/compose/runtime/State;)V +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt$animatedSelectionMagnifier$1$1$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt$animatedSelectionMagnifier$1$1$1;->invoke-F1C5BW0()J +Landroidx/compose/foundation/text/selection/SelectionMagnifierKt$rememberAnimatedMagnifierPosition$1; +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt$rememberAnimatedMagnifierPosition$1;->(Landroidx/compose/runtime/State;Landroidx/compose/animation/core/Animatable;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt$rememberAnimatedMagnifierPosition$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt$rememberAnimatedMagnifierPosition$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/selection/SelectionMagnifierKt$rememberAnimatedMagnifierPosition$1$1; +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt$rememberAnimatedMagnifierPosition$1$1;->(Landroidx/compose/runtime/State;)V +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt$rememberAnimatedMagnifierPosition$1$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt$rememberAnimatedMagnifierPosition$1$1;->invoke-F1C5BW0()J +Landroidx/compose/foundation/text/selection/SelectionMagnifierKt$rememberAnimatedMagnifierPosition$1$2; +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt$rememberAnimatedMagnifierPosition$1$2;->(Landroidx/compose/animation/core/Animatable;Lkotlinx/coroutines/CoroutineScope;)V +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt$rememberAnimatedMagnifierPosition$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/text/selection/SelectionMagnifierKt$rememberAnimatedMagnifierPosition$1$2;->emit-3MmeM6k(JLkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/compose/foundation/text/selection/SelectionRegistrar; +Landroidx/compose/foundation/text/selection/SelectionRegistrarKt; +HSPLandroidx/compose/foundation/text/selection/SelectionRegistrarKt;->()V +HSPLandroidx/compose/foundation/text/selection/SelectionRegistrarKt;->getLocalSelectionRegistrar()Landroidx/compose/runtime/ProvidableCompositionLocal; +Landroidx/compose/foundation/text/selection/SelectionRegistrarKt$LocalSelectionRegistrar$1; +HSPLandroidx/compose/foundation/text/selection/SelectionRegistrarKt$LocalSelectionRegistrar$1;->()V +HSPLandroidx/compose/foundation/text/selection/SelectionRegistrarKt$LocalSelectionRegistrar$1;->()V +HSPLandroidx/compose/foundation/text/selection/SelectionRegistrarKt$LocalSelectionRegistrar$1;->invoke()Landroidx/compose/foundation/text/selection/SelectionRegistrar; +HSPLandroidx/compose/foundation/text/selection/SelectionRegistrarKt$LocalSelectionRegistrar$1;->invoke()Ljava/lang/Object; +Landroidx/compose/foundation/text/selection/SimpleLayoutKt; +HSPLandroidx/compose/foundation/text/selection/SimpleLayoutKt;->SimpleLayout(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V +Landroidx/compose/foundation/text/selection/SimpleLayoutKt$SimpleLayout$1; +HSPLandroidx/compose/foundation/text/selection/SimpleLayoutKt$SimpleLayout$1;->()V +HSPLandroidx/compose/foundation/text/selection/SimpleLayoutKt$SimpleLayout$1;->()V +HSPLandroidx/compose/foundation/text/selection/SimpleLayoutKt$SimpleLayout$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; +Landroidx/compose/foundation/text/selection/SimpleLayoutKt$SimpleLayout$1$measure$1; +HSPLandroidx/compose/foundation/text/selection/SimpleLayoutKt$SimpleLayout$1$measure$1;->(Ljava/util/List;)V +HSPLandroidx/compose/foundation/text/selection/SimpleLayoutKt$SimpleLayout$1$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/foundation/text/selection/SimpleLayoutKt$SimpleLayout$1$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/selection/TextFieldSelectionManager; +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager;->(Landroidx/compose/foundation/text/UndoManager;)V +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager;->deselect-_kEHs6E$foundation_release$default(Landroidx/compose/foundation/text/selection/TextFieldSelectionManager;Landroidx/compose/ui/geometry/Offset;ILjava/lang/Object;)V +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager;->deselect-_kEHs6E$foundation_release(Landroidx/compose/ui/geometry/Offset;)V +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager;->getDraggingHandle()Landroidx/compose/foundation/text/Handle; +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager;->getTouchSelectionObserver$foundation_release()Landroidx/compose/foundation/text/TextDragObserver; +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager;->getValue$foundation_release()Landroidx/compose/ui/text/input/TextFieldValue; +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager;->hideSelectionToolbar$foundation_release()V +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager;->setClipboardManager$foundation_release(Landroidx/compose/ui/platform/ClipboardManager;)V +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager;->setEditable(Z)V +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager;->setFocusRequester(Landroidx/compose/ui/focus/FocusRequester;)V +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager;->setHandleState(Landroidx/compose/foundation/text/HandleState;)V +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager;->setHapticFeedBack(Landroidx/compose/ui/hapticfeedback/HapticFeedback;)V +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager;->setOffsetMapping$foundation_release(Landroidx/compose/ui/text/input/OffsetMapping;)V +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager;->setOnValueChange$foundation_release(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager;->setState$foundation_release(Landroidx/compose/foundation/text/TextFieldState;)V +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager;->setTextToolbar(Landroidx/compose/ui/platform/TextToolbar;)V +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager;->setValue$foundation_release(Landroidx/compose/ui/text/input/TextFieldValue;)V +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager;->setVisualTransformation$foundation_release(Landroidx/compose/ui/text/input/VisualTransformation;)V +Landroidx/compose/foundation/text/selection/TextFieldSelectionManager$mouseSelectionObserver$1; +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager$mouseSelectionObserver$1;->(Landroidx/compose/foundation/text/selection/TextFieldSelectionManager;)V +Landroidx/compose/foundation/text/selection/TextFieldSelectionManager$onValueChange$1; +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager$onValueChange$1;->()V +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager$onValueChange$1;->()V +Landroidx/compose/foundation/text/selection/TextFieldSelectionManager$touchSelectionObserver$1; +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager$touchSelectionObserver$1;->(Landroidx/compose/foundation/text/selection/TextFieldSelectionManager;)V +Landroidx/compose/foundation/text/selection/TextFieldSelectionManagerKt; +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManagerKt;->calculateSelectionMagnifierCenterAndroid-O0kMr_c(Landroidx/compose/foundation/text/selection/TextFieldSelectionManager;J)J +Landroidx/compose/foundation/text/selection/TextFieldSelectionManager_androidKt; +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager_androidKt;->textFieldMagnifier(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/text/selection/TextFieldSelectionManager;)Landroidx/compose/ui/Modifier; +Landroidx/compose/foundation/text/selection/TextFieldSelectionManager_androidKt$textFieldMagnifier$1; +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager_androidKt$textFieldMagnifier$1;->(Landroidx/compose/foundation/text/selection/TextFieldSelectionManager;)V +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager_androidKt$textFieldMagnifier$1;->access$invoke$lambda$1(Landroidx/compose/runtime/MutableState;)J +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager_androidKt$textFieldMagnifier$1;->access$invoke$lambda$2(Landroidx/compose/runtime/MutableState;J)V +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager_androidKt$textFieldMagnifier$1;->invoke$lambda$1(Landroidx/compose/runtime/MutableState;)J +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager_androidKt$textFieldMagnifier$1;->invoke$lambda$2(Landroidx/compose/runtime/MutableState;J)V +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager_androidKt$textFieldMagnifier$1;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager_androidKt$textFieldMagnifier$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/foundation/text/selection/TextFieldSelectionManager_androidKt$textFieldMagnifier$1$1; +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager_androidKt$textFieldMagnifier$1$1;->(Landroidx/compose/foundation/text/selection/TextFieldSelectionManager;Landroidx/compose/runtime/MutableState;)V +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager_androidKt$textFieldMagnifier$1$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager_androidKt$textFieldMagnifier$1$1;->invoke-F1C5BW0()J +Landroidx/compose/foundation/text/selection/TextFieldSelectionManager_androidKt$textFieldMagnifier$1$2$1; +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager_androidKt$textFieldMagnifier$1$2$1;->(Landroidx/compose/ui/unit/Density;Landroidx/compose/runtime/MutableState;)V +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager_androidKt$textFieldMagnifier$1$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager_androidKt$textFieldMagnifier$1$2$1;->invoke(Lkotlin/jvm/functions/Function0;)Landroidx/compose/ui/Modifier; +Landroidx/compose/foundation/text/selection/TextFieldSelectionManager_androidKt$textFieldMagnifier$1$2$1$1; +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager_androidKt$textFieldMagnifier$1$2$1$1;->(Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager_androidKt$textFieldMagnifier$1$2$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager_androidKt$textFieldMagnifier$1$2$1$1;->invoke-tuRUvjQ(Landroidx/compose/ui/unit/Density;)J +Landroidx/compose/foundation/text/selection/TextFieldSelectionManager_androidKt$textFieldMagnifier$1$2$1$2; +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager_androidKt$textFieldMagnifier$1$2$1$2;->(Landroidx/compose/ui/unit/Density;Landroidx/compose/runtime/MutableState;)V +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager_androidKt$textFieldMagnifier$1$2$1$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/foundation/text/selection/TextFieldSelectionManager_androidKt$textFieldMagnifier$1$2$1$2;->invoke-EaSLcWc(J)V +Landroidx/compose/foundation/text/selection/TextPreparedSelectionState; +HSPLandroidx/compose/foundation/text/selection/TextPreparedSelectionState;->()V +Landroidx/compose/foundation/text/selection/TextSelectionColors; +HSPLandroidx/compose/foundation/text/selection/TextSelectionColors;->()V +HSPLandroidx/compose/foundation/text/selection/TextSelectionColors;->(JJ)V +HSPLandroidx/compose/foundation/text/selection/TextSelectionColors;->(JJLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/foundation/text/selection/TextSelectionColors;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/foundation/text/selection/TextSelectionColors;->getBackgroundColor-0d7_KjU()J +Landroidx/compose/foundation/text/selection/TextSelectionColorsKt; +HSPLandroidx/compose/foundation/text/selection/TextSelectionColorsKt;->()V +HSPLandroidx/compose/foundation/text/selection/TextSelectionColorsKt;->getLocalTextSelectionColors()Landroidx/compose/runtime/ProvidableCompositionLocal; +Landroidx/compose/foundation/text/selection/TextSelectionColorsKt$LocalTextSelectionColors$1; +HSPLandroidx/compose/foundation/text/selection/TextSelectionColorsKt$LocalTextSelectionColors$1;->()V +HSPLandroidx/compose/foundation/text/selection/TextSelectionColorsKt$LocalTextSelectionColors$1;->()V +Landroidx/compose/material/Colors; +HSPLandroidx/compose/material/Colors;->()V +HSPLandroidx/compose/material/Colors;->(JJJJJJJJJJJJZ)V +HSPLandroidx/compose/material/Colors;->(JJJJJJJJJJJJZLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/material/Colors;->copy-pvPzIIM$default(Landroidx/compose/material/Colors;JJJJJJJJJJJJZILjava/lang/Object;)Landroidx/compose/material/Colors; +HSPLandroidx/compose/material/Colors;->copy-pvPzIIM(JJJJJJJJJJJJZ)Landroidx/compose/material/Colors; +HSPLandroidx/compose/material/Colors;->getBackground-0d7_KjU()J +HSPLandroidx/compose/material/Colors;->getError-0d7_KjU()J +HSPLandroidx/compose/material/Colors;->getOnBackground-0d7_KjU()J +HSPLandroidx/compose/material/Colors;->getOnError-0d7_KjU()J +HSPLandroidx/compose/material/Colors;->getOnPrimary-0d7_KjU()J +HSPLandroidx/compose/material/Colors;->getOnSecondary-0d7_KjU()J +HSPLandroidx/compose/material/Colors;->getOnSurface-0d7_KjU()J +HSPLandroidx/compose/material/Colors;->getPrimary-0d7_KjU()J +HSPLandroidx/compose/material/Colors;->getPrimaryVariant-0d7_KjU()J +HSPLandroidx/compose/material/Colors;->getSecondary-0d7_KjU()J +HSPLandroidx/compose/material/Colors;->getSecondaryVariant-0d7_KjU()J +HSPLandroidx/compose/material/Colors;->getSurface-0d7_KjU()J +HSPLandroidx/compose/material/Colors;->isLight()Z +HSPLandroidx/compose/material/Colors;->setBackground-8_81llA$material_release(J)V +HSPLandroidx/compose/material/Colors;->setError-8_81llA$material_release(J)V +HSPLandroidx/compose/material/Colors;->setLight$material_release(Z)V +HSPLandroidx/compose/material/Colors;->setOnBackground-8_81llA$material_release(J)V +HSPLandroidx/compose/material/Colors;->setOnError-8_81llA$material_release(J)V +HSPLandroidx/compose/material/Colors;->setOnPrimary-8_81llA$material_release(J)V +HSPLandroidx/compose/material/Colors;->setOnSecondary-8_81llA$material_release(J)V +HSPLandroidx/compose/material/Colors;->setOnSurface-8_81llA$material_release(J)V +HSPLandroidx/compose/material/Colors;->setPrimary-8_81llA$material_release(J)V +HSPLandroidx/compose/material/Colors;->setPrimaryVariant-8_81llA$material_release(J)V +HSPLandroidx/compose/material/Colors;->setSecondary-8_81llA$material_release(J)V +HSPLandroidx/compose/material/Colors;->setSecondaryVariant-8_81llA$material_release(J)V +HSPLandroidx/compose/material/Colors;->setSurface-8_81llA$material_release(J)V +Landroidx/compose/material/ColorsKt; +HSPLandroidx/compose/material/ColorsKt;->()V +HSPLandroidx/compose/material/ColorsKt;->contentColorFor-4WTKRHQ(Landroidx/compose/material/Colors;J)J +HSPLandroidx/compose/material/ColorsKt;->getLocalColors()Landroidx/compose/runtime/ProvidableCompositionLocal; +HSPLandroidx/compose/material/ColorsKt;->lightColors-2qZNXz8$default(JJJJJJJJJJJJILjava/lang/Object;)Landroidx/compose/material/Colors; +HSPLandroidx/compose/material/ColorsKt;->lightColors-2qZNXz8(JJJJJJJJJJJJ)Landroidx/compose/material/Colors; +HSPLandroidx/compose/material/ColorsKt;->updateColorsFrom(Landroidx/compose/material/Colors;Landroidx/compose/material/Colors;)V +Landroidx/compose/material/ColorsKt$LocalColors$1; +HSPLandroidx/compose/material/ColorsKt$LocalColors$1;->()V +HSPLandroidx/compose/material/ColorsKt$LocalColors$1;->()V +HSPLandroidx/compose/material/ColorsKt$LocalColors$1;->invoke()Landroidx/compose/material/Colors; +HSPLandroidx/compose/material/ColorsKt$LocalColors$1;->invoke()Ljava/lang/Object; +Landroidx/compose/material/ContentAlpha; +HSPLandroidx/compose/material/ContentAlpha;->()V +HSPLandroidx/compose/material/ContentAlpha;->()V +HSPLandroidx/compose/material/ContentAlpha;->contentAlpha(FFLandroidx/compose/runtime/Composer;I)F +HSPLandroidx/compose/material/ContentAlpha;->getHigh(Landroidx/compose/runtime/Composer;I)F +HSPLandroidx/compose/material/ContentAlpha;->getMedium(Landroidx/compose/runtime/Composer;I)F +Landroidx/compose/material/ContentAlphaKt; +HSPLandroidx/compose/material/ContentAlphaKt;->()V +HSPLandroidx/compose/material/ContentAlphaKt;->getLocalContentAlpha()Landroidx/compose/runtime/ProvidableCompositionLocal; +Landroidx/compose/material/ContentAlphaKt$LocalContentAlpha$1; +HSPLandroidx/compose/material/ContentAlphaKt$LocalContentAlpha$1;->()V +HSPLandroidx/compose/material/ContentAlphaKt$LocalContentAlpha$1;->()V +Landroidx/compose/material/ContentColorKt; +HSPLandroidx/compose/material/ContentColorKt;->()V +HSPLandroidx/compose/material/ContentColorKt;->getLocalContentColor()Landroidx/compose/runtime/ProvidableCompositionLocal; +Landroidx/compose/material/ContentColorKt$LocalContentColor$1; +HSPLandroidx/compose/material/ContentColorKt$LocalContentColor$1;->()V +HSPLandroidx/compose/material/ContentColorKt$LocalContentColor$1;->()V +HSPLandroidx/compose/material/ContentColorKt$LocalContentColor$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/material/ContentColorKt$LocalContentColor$1;->invoke-0d7_KjU()J +Landroidx/compose/material/DefaultPlatformTextStyle_androidKt; +HSPLandroidx/compose/material/DefaultPlatformTextStyle_androidKt;->()V +HSPLandroidx/compose/material/DefaultPlatformTextStyle_androidKt;->defaultPlatformTextStyle()Landroidx/compose/ui/text/PlatformTextStyle; +Landroidx/compose/material/MaterialRippleTheme; +HSPLandroidx/compose/material/MaterialRippleTheme;->()V +HSPLandroidx/compose/material/MaterialRippleTheme;->()V +HSPLandroidx/compose/material/MaterialRippleTheme;->defaultColor-WaAFU9c(Landroidx/compose/runtime/Composer;I)J +HSPLandroidx/compose/material/MaterialRippleTheme;->rippleAlpha(Landroidx/compose/runtime/Composer;I)Landroidx/compose/material/ripple/RippleAlpha; +Landroidx/compose/material/MaterialTextSelectionColorsKt; +HSPLandroidx/compose/material/MaterialTextSelectionColorsKt;->calculateContrastRatio--OWjLjI(JJ)F +HSPLandroidx/compose/material/MaterialTextSelectionColorsKt;->calculateContrastRatio-nb2GgbA(JFJJ)F +HSPLandroidx/compose/material/MaterialTextSelectionColorsKt;->calculateSelectionBackgroundColor-ysEtTa8(JJJ)J +HSPLandroidx/compose/material/MaterialTextSelectionColorsKt;->rememberTextSelectionColors(Landroidx/compose/material/Colors;Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/text/selection/TextSelectionColors; +Landroidx/compose/material/MaterialTheme; +HSPLandroidx/compose/material/MaterialTheme;->()V +HSPLandroidx/compose/material/MaterialTheme;->()V +HSPLandroidx/compose/material/MaterialTheme;->getColors(Landroidx/compose/runtime/Composer;I)Landroidx/compose/material/Colors; +HSPLandroidx/compose/material/MaterialTheme;->getShapes(Landroidx/compose/runtime/Composer;I)Landroidx/compose/material/Shapes; +HSPLandroidx/compose/material/MaterialTheme;->getTypography(Landroidx/compose/runtime/Composer;I)Landroidx/compose/material/Typography; +Landroidx/compose/material/MaterialThemeKt; +HSPLandroidx/compose/material/MaterialThemeKt;->MaterialTheme(Landroidx/compose/material/Colors;Landroidx/compose/material/Typography;Landroidx/compose/material/Shapes;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V +Landroidx/compose/material/MaterialThemeKt$MaterialTheme$1; +HSPLandroidx/compose/material/MaterialThemeKt$MaterialTheme$1;->(Landroidx/compose/material/Typography;Lkotlin/jvm/functions/Function2;I)V +HSPLandroidx/compose/material/MaterialThemeKt$MaterialTheme$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/material/MaterialThemeKt$MaterialTheme$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material/MaterialThemeKt$MaterialTheme$1$1; +HSPLandroidx/compose/material/MaterialThemeKt$MaterialTheme$1$1;->(Lkotlin/jvm/functions/Function2;I)V +HSPLandroidx/compose/material/MaterialThemeKt$MaterialTheme$1$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/material/MaterialThemeKt$MaterialTheme$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material/MaterialThemeKt$MaterialTheme$2; +HSPLandroidx/compose/material/MaterialThemeKt$MaterialTheme$2;->(Landroidx/compose/material/Colors;Landroidx/compose/material/Typography;Landroidx/compose/material/Shapes;Lkotlin/jvm/functions/Function2;II)V +Landroidx/compose/material/MaterialTheme_androidKt; +HSPLandroidx/compose/material/MaterialTheme_androidKt;->PlatformMaterialTheme(Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V +Landroidx/compose/material/Shapes; +HSPLandroidx/compose/material/Shapes;->()V +HSPLandroidx/compose/material/Shapes;->(Landroidx/compose/foundation/shape/CornerBasedShape;Landroidx/compose/foundation/shape/CornerBasedShape;Landroidx/compose/foundation/shape/CornerBasedShape;)V +HSPLandroidx/compose/material/Shapes;->(Landroidx/compose/foundation/shape/CornerBasedShape;Landroidx/compose/foundation/shape/CornerBasedShape;Landroidx/compose/foundation/shape/CornerBasedShape;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/material/ShapesKt; +HSPLandroidx/compose/material/ShapesKt;->()V +HSPLandroidx/compose/material/ShapesKt;->getLocalShapes()Landroidx/compose/runtime/ProvidableCompositionLocal; +Landroidx/compose/material/ShapesKt$LocalShapes$1; +HSPLandroidx/compose/material/ShapesKt$LocalShapes$1;->()V +HSPLandroidx/compose/material/ShapesKt$LocalShapes$1;->()V +HSPLandroidx/compose/material/ShapesKt$LocalShapes$1;->invoke()Landroidx/compose/material/Shapes; +HSPLandroidx/compose/material/ShapesKt$LocalShapes$1;->invoke()Ljava/lang/Object; +Landroidx/compose/material/TextKt; +HSPLandroidx/compose/material/TextKt;->()V +HSPLandroidx/compose/material/TextKt;->ProvideTextStyle(Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V +Landroidx/compose/material/TextKt$LocalTextStyle$1; +HSPLandroidx/compose/material/TextKt$LocalTextStyle$1;->()V +HSPLandroidx/compose/material/TextKt$LocalTextStyle$1;->()V +HSPLandroidx/compose/material/TextKt$LocalTextStyle$1;->invoke()Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/material/TextKt$LocalTextStyle$1;->invoke()Ljava/lang/Object; +Landroidx/compose/material/Typography; +HSPLandroidx/compose/material/Typography;->()V +HSPLandroidx/compose/material/Typography;->(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 +HSPLandroidx/compose/material/Typography;->(Landroidx/compose/ui/text/font/FontFamily;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 +HSPLandroidx/compose/material/Typography;->(Landroidx/compose/ui/text/font/FontFamily;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;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/material/Typography;->getBody1()Landroidx/compose/ui/text/TextStyle; +Landroidx/compose/material/TypographyKt; +HSPLandroidx/compose/material/TypographyKt;->()V +HSPLandroidx/compose/material/TypographyKt;->access$withDefaultFontFamily(Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamily;)Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/material/TypographyKt;->getDefaultTextStyle()Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/material/TypographyKt;->getLocalTypography()Landroidx/compose/runtime/ProvidableCompositionLocal; +HSPLandroidx/compose/material/TypographyKt;->withDefaultFontFamily(Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/font/FontFamily;)Landroidx/compose/ui/text/TextStyle; +Landroidx/compose/material/TypographyKt$LocalTypography$1; +HSPLandroidx/compose/material/TypographyKt$LocalTypography$1;->()V +HSPLandroidx/compose/material/TypographyKt$LocalTypography$1;->()V +HSPLandroidx/compose/material/TypographyKt$LocalTypography$1;->invoke()Landroidx/compose/material/Typography; +HSPLandroidx/compose/material/TypographyKt$LocalTypography$1;->invoke()Ljava/lang/Object; +Landroidx/compose/material/icons/Icons$Filled; +HSPLandroidx/compose/material/icons/Icons$Filled;->()V +HSPLandroidx/compose/material/icons/Icons$Filled;->()V +Landroidx/compose/material/icons/Icons$Outlined; +HSPLandroidx/compose/material/icons/Icons$Outlined;->()V +HSPLandroidx/compose/material/icons/Icons$Outlined;->()V +Landroidx/compose/material/icons/filled/HomeKt; +HSPLandroidx/compose/material/icons/filled/HomeKt;->()V +HSPLandroidx/compose/material/icons/filled/HomeKt;->getHome(Landroidx/compose/material/icons/Icons$Filled;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/filled/PasswordKt; +HSPLandroidx/compose/material/icons/filled/PasswordKt;->()V +HSPLandroidx/compose/material/icons/filled/PasswordKt;->getPassword(Landroidx/compose/material/icons/Icons$Filled;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/filled/SecurityKt; +HSPLandroidx/compose/material/icons/filled/SecurityKt;->()V +HSPLandroidx/compose/material/icons/filled/SecurityKt;->getSecurity(Landroidx/compose/material/icons/Icons$Filled;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/filled/SendKt; +HSPLandroidx/compose/material/icons/filled/SendKt;->()V +HSPLandroidx/compose/material/icons/filled/SendKt;->getSend(Landroidx/compose/material/icons/Icons$Filled;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/filled/SettingsKt; +HSPLandroidx/compose/material/icons/filled/SettingsKt;->()V +HSPLandroidx/compose/material/icons/filled/SettingsKt;->getSettings(Landroidx/compose/material/icons/Icons$Filled;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/outlined/AddKt; +HSPLandroidx/compose/material/icons/outlined/AddKt;->()V +HSPLandroidx/compose/material/icons/outlined/AddKt;->getAdd(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/outlined/AttachmentKt; +HSPLandroidx/compose/material/icons/outlined/AttachmentKt;->()V +HSPLandroidx/compose/material/icons/outlined/AttachmentKt;->getAttachment(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/outlined/AutoAwesomeKt; +HSPLandroidx/compose/material/icons/outlined/AutoAwesomeKt;->()V +HSPLandroidx/compose/material/icons/outlined/AutoAwesomeKt;->getAutoAwesome(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/outlined/CalendarMonthKt; +HSPLandroidx/compose/material/icons/outlined/CalendarMonthKt;->()V +HSPLandroidx/compose/material/icons/outlined/CalendarMonthKt;->getCalendarMonth(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/outlined/ChevronRightKt; +HSPLandroidx/compose/material/icons/outlined/ChevronRightKt;->()V +HSPLandroidx/compose/material/icons/outlined/ChevronRightKt;->getChevronRight(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/outlined/ClearKt; +HSPLandroidx/compose/material/icons/outlined/ClearKt;->()V +HSPLandroidx/compose/material/icons/outlined/ClearKt;->getClear(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/outlined/CloudOffKt; +HSPLandroidx/compose/material/icons/outlined/CloudOffKt;->()V +HSPLandroidx/compose/material/icons/outlined/CloudOffKt;->getCloudOff(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/outlined/CreditCardKt; +HSPLandroidx/compose/material/icons/outlined/CreditCardKt;->()V +HSPLandroidx/compose/material/icons/outlined/CreditCardKt;->getCreditCard(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/outlined/DeleteKt; +HSPLandroidx/compose/material/icons/outlined/DeleteKt;->()V +HSPLandroidx/compose/material/icons/outlined/DeleteKt;->getDelete(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/outlined/ErrorOutlineKt; +HSPLandroidx/compose/material/icons/outlined/ErrorOutlineKt;->()V +HSPLandroidx/compose/material/icons/outlined/ErrorOutlineKt;->getErrorOutline(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/outlined/FilterAltKt; +HSPLandroidx/compose/material/icons/outlined/FilterAltKt;->()V +HSPLandroidx/compose/material/icons/outlined/FilterAltKt;->getFilterAlt(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/outlined/FolderOffKt; +HSPLandroidx/compose/material/icons/outlined/FolderOffKt;->()V +HSPLandroidx/compose/material/icons/outlined/FolderOffKt;->getFolderOff(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/outlined/HomeKt; +HSPLandroidx/compose/material/icons/outlined/HomeKt;->()V +HSPLandroidx/compose/material/icons/outlined/HomeKt;->getHome(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/outlined/InfoKt; +HSPLandroidx/compose/material/icons/outlined/InfoKt;->()V +HSPLandroidx/compose/material/icons/outlined/InfoKt;->getInfo(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/outlined/KeyKt; +HSPLandroidx/compose/material/icons/outlined/KeyKt;->()V +HSPLandroidx/compose/material/icons/outlined/KeyKt;->getKey(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/outlined/LockKt; +HSPLandroidx/compose/material/icons/outlined/LockKt;->()V +HSPLandroidx/compose/material/icons/outlined/LockKt;->getLock(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/outlined/LockOpenKt; +HSPLandroidx/compose/material/icons/outlined/LockOpenKt;->()V +HSPLandroidx/compose/material/icons/outlined/LockOpenKt;->getLockOpen(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/outlined/MoreVertKt; +HSPLandroidx/compose/material/icons/outlined/MoreVertKt;->()V +HSPLandroidx/compose/material/icons/outlined/MoreVertKt;->getMoreVert(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/outlined/NumbersKt; +HSPLandroidx/compose/material/icons/outlined/NumbersKt;->()V +HSPLandroidx/compose/material/icons/outlined/NumbersKt;->getNumbers(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/outlined/PasswordKt; +HSPLandroidx/compose/material/icons/outlined/PasswordKt;->()V +HSPLandroidx/compose/material/icons/outlined/PasswordKt;->getPassword(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/outlined/PermIdentityKt; +HSPLandroidx/compose/material/icons/outlined/PermIdentityKt;->()V +HSPLandroidx/compose/material/icons/outlined/PermIdentityKt;->getPermIdentity(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/outlined/PersonAddKt; +HSPLandroidx/compose/material/icons/outlined/PersonAddKt;->()V +HSPLandroidx/compose/material/icons/outlined/PersonAddKt;->getPersonAdd(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/outlined/SearchKt; +HSPLandroidx/compose/material/icons/outlined/SearchKt;->()V +HSPLandroidx/compose/material/icons/outlined/SearchKt;->getSearch(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/outlined/SecurityKt; +HSPLandroidx/compose/material/icons/outlined/SecurityKt;->()V +HSPLandroidx/compose/material/icons/outlined/SecurityKt;->getSecurity(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/outlined/SendKt; +HSPLandroidx/compose/material/icons/outlined/SendKt;->()V +HSPLandroidx/compose/material/icons/outlined/SendKt;->getSend(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/outlined/SettingsKt; +HSPLandroidx/compose/material/icons/outlined/SettingsKt;->()V +HSPLandroidx/compose/material/icons/outlined/SettingsKt;->getSettings(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/outlined/SortByAlphaKt; +HSPLandroidx/compose/material/icons/outlined/SortByAlphaKt;->()V +HSPLandroidx/compose/material/icons/outlined/SortByAlphaKt;->getSortByAlpha(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/outlined/StickyNote2Kt; +HSPLandroidx/compose/material/icons/outlined/StickyNote2Kt;->()V +HSPLandroidx/compose/material/icons/outlined/StickyNote2Kt;->getStickyNote2(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/icons/outlined/VisibilityOffKt; +HSPLandroidx/compose/material/icons/outlined/VisibilityOffKt;->()V +HSPLandroidx/compose/material/icons/outlined/VisibilityOffKt;->getVisibilityOff(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +Landroidx/compose/material/pullrefresh/PullRefreshDefaults; +HSPLandroidx/compose/material/pullrefresh/PullRefreshDefaults;->()V +HSPLandroidx/compose/material/pullrefresh/PullRefreshDefaults;->()V +HSPLandroidx/compose/material/pullrefresh/PullRefreshDefaults;->getRefreshThreshold-D9Ej5fM()F +HSPLandroidx/compose/material/pullrefresh/PullRefreshDefaults;->getRefreshingOffset-D9Ej5fM()F +Landroidx/compose/material/pullrefresh/PullRefreshKt; +HSPLandroidx/compose/material/pullrefresh/PullRefreshKt;->pullRefresh$default(Landroidx/compose/ui/Modifier;Landroidx/compose/material/pullrefresh/PullRefreshState;ZILjava/lang/Object;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/material/pullrefresh/PullRefreshKt;->pullRefresh(Landroidx/compose/ui/Modifier;Landroidx/compose/material/pullrefresh/PullRefreshState;Z)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/material/pullrefresh/PullRefreshKt;->pullRefresh(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;Z)Landroidx/compose/ui/Modifier; +Landroidx/compose/material/pullrefresh/PullRefreshKt$pullRefresh$2$1; +HSPLandroidx/compose/material/pullrefresh/PullRefreshKt$pullRefresh$2$1;->(Ljava/lang/Object;)V +Landroidx/compose/material/pullrefresh/PullRefreshKt$pullRefresh$2$2; +HSPLandroidx/compose/material/pullrefresh/PullRefreshKt$pullRefresh$2$2;->(Ljava/lang/Object;)V +Landroidx/compose/material/pullrefresh/PullRefreshNestedScrollConnection; +HSPLandroidx/compose/material/pullrefresh/PullRefreshNestedScrollConnection;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;Z)V +Landroidx/compose/material/pullrefresh/PullRefreshState; +HSPLandroidx/compose/material/pullrefresh/PullRefreshState;->()V +HSPLandroidx/compose/material/pullrefresh/PullRefreshState;->(Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/runtime/State;FF)V +HSPLandroidx/compose/material/pullrefresh/PullRefreshState;->access$getDistancePulled(Landroidx/compose/material/pullrefresh/PullRefreshState;)F +HSPLandroidx/compose/material/pullrefresh/PullRefreshState;->getAdjustedDistancePulled()F +HSPLandroidx/compose/material/pullrefresh/PullRefreshState;->getDistancePulled()F +HSPLandroidx/compose/material/pullrefresh/PullRefreshState;->getProgress()F +HSPLandroidx/compose/material/pullrefresh/PullRefreshState;->getThreshold$material_release()F +HSPLandroidx/compose/material/pullrefresh/PullRefreshState;->get_refreshing()Z +HSPLandroidx/compose/material/pullrefresh/PullRefreshState;->get_refreshingOffset()F +HSPLandroidx/compose/material/pullrefresh/PullRefreshState;->get_threshold()F +HSPLandroidx/compose/material/pullrefresh/PullRefreshState;->setRefreshing$material_release(Z)V +HSPLandroidx/compose/material/pullrefresh/PullRefreshState;->setRefreshingOffset$material_release(F)V +HSPLandroidx/compose/material/pullrefresh/PullRefreshState;->setThreshold$material_release(F)V +HSPLandroidx/compose/material/pullrefresh/PullRefreshState;->set_threshold(F)V +Landroidx/compose/material/pullrefresh/PullRefreshState$adjustedDistancePulled$2; +HSPLandroidx/compose/material/pullrefresh/PullRefreshState$adjustedDistancePulled$2;->(Landroidx/compose/material/pullrefresh/PullRefreshState;)V +HSPLandroidx/compose/material/pullrefresh/PullRefreshState$adjustedDistancePulled$2;->invoke()Ljava/lang/Float; +HSPLandroidx/compose/material/pullrefresh/PullRefreshState$adjustedDistancePulled$2;->invoke()Ljava/lang/Object; +Landroidx/compose/material/pullrefresh/PullRefreshStateKt; +HSPLandroidx/compose/material/pullrefresh/PullRefreshStateKt;->rememberPullRefreshState-UuyPYSY(ZLkotlin/jvm/functions/Function0;FFLandroidx/compose/runtime/Composer;II)Landroidx/compose/material/pullrefresh/PullRefreshState; +Landroidx/compose/material/pullrefresh/PullRefreshStateKt$rememberPullRefreshState$3; +HSPLandroidx/compose/material/pullrefresh/PullRefreshStateKt$rememberPullRefreshState$3;->(Landroidx/compose/material/pullrefresh/PullRefreshState;ZLkotlin/jvm/internal/Ref$FloatRef;Lkotlin/jvm/internal/Ref$FloatRef;)V +HSPLandroidx/compose/material/pullrefresh/PullRefreshStateKt$rememberPullRefreshState$3;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/material/pullrefresh/PullRefreshStateKt$rememberPullRefreshState$3;->invoke()V +Landroidx/compose/material/ripple/AndroidRippleIndicationInstance; +HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->(ZFLandroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/material/ripple/RippleContainer;)V +HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->(ZFLandroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/material/ripple/RippleContainer;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->access$getInvalidateTick(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;)Z +HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->access$setInvalidateTick(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;Z)V +HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->addRipple(Landroidx/compose/foundation/interaction/PressInteraction$Press;Lkotlinx/coroutines/CoroutineScope;)V +HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->dispose()V +HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->drawIndication(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V +HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->getInvalidateTick()Z +HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->getRippleHostView()Landroidx/compose/material/ripple/RippleHostView; +HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->onForgotten()V +HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->onRemembered()V +HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->removeRipple(Landroidx/compose/foundation/interaction/PressInteraction$Press;)V +HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->resetHostView()V +HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->setInvalidateTick(Z)V +HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance;->setRippleHostView(Landroidx/compose/material/ripple/RippleHostView;)V +Landroidx/compose/material/ripple/AndroidRippleIndicationInstance$onInvalidateRipple$1; +HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance$onInvalidateRipple$1;->(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;)V +HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance$onInvalidateRipple$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/material/ripple/AndroidRippleIndicationInstance$onInvalidateRipple$1;->invoke()V +Landroidx/compose/material/ripple/PlatformRipple; +HSPLandroidx/compose/material/ripple/PlatformRipple;->(ZFLandroidx/compose/runtime/State;)V +HSPLandroidx/compose/material/ripple/PlatformRipple;->(ZFLandroidx/compose/runtime/State;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/material/ripple/PlatformRipple;->findNearestViewGroup(Landroidx/compose/runtime/Composer;I)Landroid/view/ViewGroup; +HSPLandroidx/compose/material/ripple/PlatformRipple;->rememberUpdatedRippleInstance-942rkJo(Landroidx/compose/foundation/interaction/InteractionSource;ZFLandroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/runtime/Composer;I)Landroidx/compose/material/ripple/RippleIndicationInstance; +Landroidx/compose/material/ripple/Ripple; +HSPLandroidx/compose/material/ripple/Ripple;->(ZFLandroidx/compose/runtime/State;)V +HSPLandroidx/compose/material/ripple/Ripple;->(ZFLandroidx/compose/runtime/State;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/material/ripple/Ripple;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/material/ripple/Ripple;->rememberUpdatedInstance(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/IndicationInstance; +Landroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1; +HSPLandroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1;->(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/material/ripple/RippleIndicationInstance;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1$1; +HSPLandroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1$1;->(Landroidx/compose/material/ripple/RippleIndicationInstance;Lkotlinx/coroutines/CoroutineScope;)V +HSPLandroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1$1;->emit(Landroidx/compose/foundation/interaction/Interaction;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/material/ripple/Ripple$rememberUpdatedInstance$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/compose/material/ripple/RippleAlpha; +HSPLandroidx/compose/material/ripple/RippleAlpha;->()V +HSPLandroidx/compose/material/ripple/RippleAlpha;->(FFFF)V +HSPLandroidx/compose/material/ripple/RippleAlpha;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/material/ripple/RippleAlpha;->getPressedAlpha()F +Landroidx/compose/material/ripple/RippleAnimationKt; +HSPLandroidx/compose/material/ripple/RippleAnimationKt;->()V +HSPLandroidx/compose/material/ripple/RippleAnimationKt;->getRippleEndRadius-cSwnlzA(Landroidx/compose/ui/unit/Density;ZJ)F +Landroidx/compose/material/ripple/RippleContainer; +HSPLandroidx/compose/material/ripple/RippleContainer;->(Landroid/content/Context;)V +HSPLandroidx/compose/material/ripple/RippleContainer;->disposeRippleIfNeeded(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;)V +HSPLandroidx/compose/material/ripple/RippleContainer;->getRippleHostView(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;)Landroidx/compose/material/ripple/RippleHostView; +Landroidx/compose/material/ripple/RippleHostMap; +HSPLandroidx/compose/material/ripple/RippleHostMap;->()V +HSPLandroidx/compose/material/ripple/RippleHostMap;->get(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;)Landroidx/compose/material/ripple/RippleHostView; +HSPLandroidx/compose/material/ripple/RippleHostMap;->remove(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;)V +HSPLandroidx/compose/material/ripple/RippleHostMap;->set(Landroidx/compose/material/ripple/AndroidRippleIndicationInstance;Landroidx/compose/material/ripple/RippleHostView;)V +Landroidx/compose/material/ripple/RippleHostView; +HSPLandroidx/compose/material/ripple/RippleHostView;->$r8$lambda$4nztiuYeQHklB-09QfMAnp7Ay8E(Landroidx/compose/material/ripple/RippleHostView;)V +HSPLandroidx/compose/material/ripple/RippleHostView;->()V +HSPLandroidx/compose/material/ripple/RippleHostView;->(Landroid/content/Context;)V +HSPLandroidx/compose/material/ripple/RippleHostView;->addRipple-KOepWvA(Landroidx/compose/foundation/interaction/PressInteraction$Press;ZJIJFLkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/material/ripple/RippleHostView;->createRipple(Z)V +HSPLandroidx/compose/material/ripple/RippleHostView;->disposeRipple()V +HSPLandroidx/compose/material/ripple/RippleHostView;->invalidateDrawable(Landroid/graphics/drawable/Drawable;)V +HSPLandroidx/compose/material/ripple/RippleHostView;->refreshDrawableState()V +HSPLandroidx/compose/material/ripple/RippleHostView;->removeRipple()V +HSPLandroidx/compose/material/ripple/RippleHostView;->setRippleState$lambda$2(Landroidx/compose/material/ripple/RippleHostView;)V +HSPLandroidx/compose/material/ripple/RippleHostView;->setRippleState(Z)V +HSPLandroidx/compose/material/ripple/RippleHostView;->updateRippleProperties-biQXAtU(JIJF)V +Landroidx/compose/material/ripple/RippleHostView$$ExternalSyntheticLambda0; +HSPLandroidx/compose/material/ripple/RippleHostView$$ExternalSyntheticLambda0;->(Landroidx/compose/material/ripple/RippleHostView;)V +HSPLandroidx/compose/material/ripple/RippleHostView$$ExternalSyntheticLambda0;->run()V +Landroidx/compose/material/ripple/RippleHostView$Companion; +HSPLandroidx/compose/material/ripple/RippleHostView$Companion;->()V +HSPLandroidx/compose/material/ripple/RippleHostView$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/material/ripple/RippleIndicationInstance; +HSPLandroidx/compose/material/ripple/RippleIndicationInstance;->(ZLandroidx/compose/runtime/State;)V +HSPLandroidx/compose/material/ripple/RippleIndicationInstance;->drawStateLayer-H2RKhps(Landroidx/compose/ui/graphics/drawscope/DrawScope;FJ)V +Landroidx/compose/material/ripple/RippleKt; +HSPLandroidx/compose/material/ripple/RippleKt;->()V +HSPLandroidx/compose/material/ripple/RippleKt;->rememberRipple-9IZ8Weo(ZFJLandroidx/compose/runtime/Composer;II)Landroidx/compose/foundation/Indication; +Landroidx/compose/material/ripple/RippleTheme; +HSPLandroidx/compose/material/ripple/RippleTheme;->()V +Landroidx/compose/material/ripple/RippleTheme$Companion; +HSPLandroidx/compose/material/ripple/RippleTheme$Companion;->()V +HSPLandroidx/compose/material/ripple/RippleTheme$Companion;->()V +HSPLandroidx/compose/material/ripple/RippleTheme$Companion;->defaultRippleAlpha-DxMtmZc(JZ)Landroidx/compose/material/ripple/RippleAlpha; +HSPLandroidx/compose/material/ripple/RippleTheme$Companion;->defaultRippleColor-5vOe2sY(JZ)J +Landroidx/compose/material/ripple/RippleThemeKt; +HSPLandroidx/compose/material/ripple/RippleThemeKt;->()V +HSPLandroidx/compose/material/ripple/RippleThemeKt;->access$getLightThemeLowContrastRippleAlpha$p()Landroidx/compose/material/ripple/RippleAlpha; +HSPLandroidx/compose/material/ripple/RippleThemeKt;->getLocalRippleTheme()Landroidx/compose/runtime/ProvidableCompositionLocal; +Landroidx/compose/material/ripple/RippleThemeKt$LocalRippleTheme$1; +HSPLandroidx/compose/material/ripple/RippleThemeKt$LocalRippleTheme$1;->()V +HSPLandroidx/compose/material/ripple/RippleThemeKt$LocalRippleTheme$1;->()V +Landroidx/compose/material/ripple/StateLayer; +HSPLandroidx/compose/material/ripple/StateLayer;->(ZLandroidx/compose/runtime/State;)V +HSPLandroidx/compose/material/ripple/StateLayer;->drawStateLayer-H2RKhps(Landroidx/compose/ui/graphics/drawscope/DrawScope;FJ)V +Landroidx/compose/material/ripple/UnprojectedRipple; +HSPLandroidx/compose/material/ripple/UnprojectedRipple;->()V +HSPLandroidx/compose/material/ripple/UnprojectedRipple;->(Z)V +HSPLandroidx/compose/material/ripple/UnprojectedRipple;->calculateRippleColor-5vOe2sY(JF)J +HSPLandroidx/compose/material/ripple/UnprojectedRipple;->getDirtyBounds()Landroid/graphics/Rect; +HSPLandroidx/compose/material/ripple/UnprojectedRipple;->isProjected()Z +HSPLandroidx/compose/material/ripple/UnprojectedRipple;->setColor-DxMtmZc(JF)V +HSPLandroidx/compose/material/ripple/UnprojectedRipple;->trySetRadius(I)V +Landroidx/compose/material/ripple/UnprojectedRipple$Companion; +HSPLandroidx/compose/material/ripple/UnprojectedRipple$Companion;->()V +HSPLandroidx/compose/material/ripple/UnprojectedRipple$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/material/ripple/UnprojectedRipple$MRadiusHelper; +HSPLandroidx/compose/material/ripple/UnprojectedRipple$MRadiusHelper;->()V +HSPLandroidx/compose/material/ripple/UnprojectedRipple$MRadiusHelper;->()V +HSPLandroidx/compose/material/ripple/UnprojectedRipple$MRadiusHelper;->setRadius(Landroid/graphics/drawable/RippleDrawable;I)V +Landroidx/compose/material3/AndroidMenu_androidKt; +HSPLandroidx/compose/material3/AndroidMenu_androidKt;->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 +Landroidx/compose/material3/AndroidMenu_androidKt$DropdownMenu$2; +HSPLandroidx/compose/material3/AndroidMenu_androidKt$DropdownMenu$2;->(ZLkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;JLandroidx/compose/ui/window/PopupProperties;Lkotlin/jvm/functions/Function3;II)V +Landroidx/compose/material3/AppBarKt; +HSPLandroidx/compose/material3/AppBarKt;->()V +HSPLandroidx/compose/material3/AppBarKt;->rememberTopAppBarState(FFFLandroidx/compose/runtime/Composer;II)Landroidx/compose/material3/TopAppBarState; +Landroidx/compose/material3/AppBarKt$rememberTopAppBarState$1$1; +HSPLandroidx/compose/material3/AppBarKt$rememberTopAppBarState$1$1;->(FFF)V +HSPLandroidx/compose/material3/AppBarKt$rememberTopAppBarState$1$1;->invoke()Landroidx/compose/material3/TopAppBarState; +HSPLandroidx/compose/material3/AppBarKt$rememberTopAppBarState$1$1;->invoke()Ljava/lang/Object; +Landroidx/compose/material3/ButtonColors; +HSPLandroidx/compose/material3/ButtonColors;->()V +HSPLandroidx/compose/material3/ButtonColors;->(JJJJ)V +HSPLandroidx/compose/material3/ButtonColors;->(JJJJLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/material3/ButtonColors;->containerColor$material3_release(ZLandroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State; +HSPLandroidx/compose/material3/ButtonColors;->contentColor$material3_release(ZLandroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State; +Landroidx/compose/material3/ButtonDefaults; +HSPLandroidx/compose/material3/ButtonDefaults;->()V +HSPLandroidx/compose/material3/ButtonDefaults;->()V +HSPLandroidx/compose/material3/ButtonDefaults;->buttonColors-ro_MJ88(JJJJLandroidx/compose/runtime/Composer;II)Landroidx/compose/material3/ButtonColors; +HSPLandroidx/compose/material3/ButtonDefaults;->buttonElevation-R_JCAzs(FFFFFLandroidx/compose/runtime/Composer;II)Landroidx/compose/material3/ButtonElevation; +HSPLandroidx/compose/material3/ButtonDefaults;->getContentPadding()Landroidx/compose/foundation/layout/PaddingValues; +HSPLandroidx/compose/material3/ButtonDefaults;->getMinHeight-D9Ej5fM()F +HSPLandroidx/compose/material3/ButtonDefaults;->getMinWidth-D9Ej5fM()F +HSPLandroidx/compose/material3/ButtonDefaults;->getShape(Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/graphics/Shape; +Landroidx/compose/material3/ButtonElevation; +HSPLandroidx/compose/material3/ButtonElevation;->()V +HSPLandroidx/compose/material3/ButtonElevation;->(FFFFF)V +HSPLandroidx/compose/material3/ButtonElevation;->(FFFFFLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/material3/ButtonElevation;->access$getPressedElevation$p(Landroidx/compose/material3/ButtonElevation;)F +HSPLandroidx/compose/material3/ButtonElevation;->animateElevation(ZLandroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State; +HSPLandroidx/compose/material3/ButtonElevation;->shadowElevation$material3_release(ZLandroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State; +HSPLandroidx/compose/material3/ButtonElevation;->tonalElevation$material3_release(ZLandroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State; +Landroidx/compose/material3/ButtonElevation$animateElevation$1$1; +HSPLandroidx/compose/material3/ButtonElevation$animateElevation$1$1;->(Landroidx/compose/foundation/interaction/InteractionSource;Landroidx/compose/runtime/snapshots/SnapshotStateList;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/material3/ButtonElevation$animateElevation$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/material3/ButtonElevation$animateElevation$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/ButtonElevation$animateElevation$1$1$1; +HSPLandroidx/compose/material3/ButtonElevation$animateElevation$1$1$1;->(Landroidx/compose/runtime/snapshots/SnapshotStateList;)V +HSPLandroidx/compose/material3/ButtonElevation$animateElevation$1$1$1;->emit(Landroidx/compose/foundation/interaction/Interaction;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/material3/ButtonElevation$animateElevation$1$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/compose/material3/ButtonElevation$animateElevation$2; +HSPLandroidx/compose/material3/ButtonElevation$animateElevation$2;->(Landroidx/compose/animation/core/Animatable;FLkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/material3/ButtonElevation$animateElevation$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/material3/ButtonElevation$animateElevation$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/ButtonElevation$animateElevation$3; +HSPLandroidx/compose/material3/ButtonElevation$animateElevation$3;->(Landroidx/compose/animation/core/Animatable;Landroidx/compose/material3/ButtonElevation;FLandroidx/compose/foundation/interaction/Interaction;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/material3/ButtonElevation$animateElevation$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/material3/ButtonElevation$animateElevation$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/ButtonKt; +HSPLandroidx/compose/material3/ButtonKt;->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 +Landroidx/compose/material3/ButtonKt$Button$2; +HSPLandroidx/compose/material3/ButtonKt$Button$2;->()V +HSPLandroidx/compose/material3/ButtonKt$Button$2;->()V +HSPLandroidx/compose/material3/ButtonKt$Button$2;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V +HSPLandroidx/compose/material3/ButtonKt$Button$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/ButtonKt$Button$3; +HSPLandroidx/compose/material3/ButtonKt$Button$3;->(JLandroidx/compose/foundation/layout/PaddingValues;Lkotlin/jvm/functions/Function3;I)V +HSPLandroidx/compose/material3/ButtonKt$Button$3;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/material3/ButtonKt$Button$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/ButtonKt$Button$3$1; +HSPLandroidx/compose/material3/ButtonKt$Button$3$1;->(Landroidx/compose/foundation/layout/PaddingValues;Lkotlin/jvm/functions/Function3;I)V +HSPLandroidx/compose/material3/ButtonKt$Button$3$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/material3/ButtonKt$Button$3$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/ButtonKt$Button$3$1$1; +HSPLandroidx/compose/material3/ButtonKt$Button$3$1$1;->(Landroidx/compose/foundation/layout/PaddingValues;Lkotlin/jvm/functions/Function3;I)V +HSPLandroidx/compose/material3/ButtonKt$Button$3$1$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/material3/ButtonKt$Button$3$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/ButtonKt$Button$4; +HSPLandroidx/compose/material3/ButtonKt$Button$4;->(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;II)V +HSPLandroidx/compose/material3/ButtonKt$Button$4;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/material3/ButtonKt$Button$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/CheckDrawingCache; +HSPLandroidx/compose/material3/CheckDrawingCache;->(Landroidx/compose/ui/graphics/Path;Landroidx/compose/ui/graphics/PathMeasure;Landroidx/compose/ui/graphics/Path;)V +HSPLandroidx/compose/material3/CheckDrawingCache;->(Landroidx/compose/ui/graphics/Path;Landroidx/compose/ui/graphics/PathMeasure;Landroidx/compose/ui/graphics/Path;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/material3/CheckDrawingCache;->getCheckPath()Landroidx/compose/ui/graphics/Path; +HSPLandroidx/compose/material3/CheckDrawingCache;->getPathMeasure()Landroidx/compose/ui/graphics/PathMeasure; +HSPLandroidx/compose/material3/CheckDrawingCache;->getPathToDraw()Landroidx/compose/ui/graphics/Path; +Landroidx/compose/material3/CheckboxColors; +HSPLandroidx/compose/material3/CheckboxColors;->()V +HSPLandroidx/compose/material3/CheckboxColors;->(JJJJJJJJJJJ)V +HSPLandroidx/compose/material3/CheckboxColors;->(JJJJJJJJJJJLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/material3/CheckboxColors;->borderColor$material3_release(ZLandroidx/compose/ui/state/ToggleableState;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State; +HSPLandroidx/compose/material3/CheckboxColors;->boxColor$material3_release(ZLandroidx/compose/ui/state/ToggleableState;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State; +HSPLandroidx/compose/material3/CheckboxColors;->checkmarkColor$material3_release(Landroidx/compose/ui/state/ToggleableState;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State; +Landroidx/compose/material3/CheckboxColors$WhenMappings; +HSPLandroidx/compose/material3/CheckboxColors$WhenMappings;->()V +Landroidx/compose/material3/CheckboxDefaults; +HSPLandroidx/compose/material3/CheckboxDefaults;->()V +HSPLandroidx/compose/material3/CheckboxDefaults;->()V +HSPLandroidx/compose/material3/CheckboxDefaults;->colors-5tl4gsc(JJJJJJLandroidx/compose/runtime/Composer;II)Landroidx/compose/material3/CheckboxColors; +Landroidx/compose/material3/CheckboxKt; +HSPLandroidx/compose/material3/CheckboxKt;->()V +HSPLandroidx/compose/material3/CheckboxKt;->Checkbox(ZLkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;ZLandroidx/compose/material3/CheckboxColors;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/Composer;II)V +HSPLandroidx/compose/material3/CheckboxKt;->CheckboxImpl(ZLandroidx/compose/ui/state/ToggleableState;Landroidx/compose/ui/Modifier;Landroidx/compose/material3/CheckboxColors;Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/material3/CheckboxKt;->TriStateCheckbox(Landroidx/compose/ui/state/ToggleableState;Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLandroidx/compose/material3/CheckboxColors;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/Composer;II)V +HSPLandroidx/compose/material3/CheckboxKt;->access$drawBox-1wkBAMs(Landroidx/compose/ui/graphics/drawscope/DrawScope;JJFF)V +HSPLandroidx/compose/material3/CheckboxKt;->access$drawCheck-3IgeMak(Landroidx/compose/ui/graphics/drawscope/DrawScope;JFFFLandroidx/compose/material3/CheckDrawingCache;)V +HSPLandroidx/compose/material3/CheckboxKt;->access$getRadiusSize$p()F +HSPLandroidx/compose/material3/CheckboxKt;->access$getStrokeWidth$p()F +HSPLandroidx/compose/material3/CheckboxKt;->drawBox-1wkBAMs(Landroidx/compose/ui/graphics/drawscope/DrawScope;JJFF)V +HSPLandroidx/compose/material3/CheckboxKt;->drawCheck-3IgeMak(Landroidx/compose/ui/graphics/drawscope/DrawScope;JFFFLandroidx/compose/material3/CheckDrawingCache;)V +Landroidx/compose/material3/CheckboxKt$Checkbox$3; +HSPLandroidx/compose/material3/CheckboxKt$Checkbox$3;->(ZLkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;ZLandroidx/compose/material3/CheckboxColors;Landroidx/compose/foundation/interaction/MutableInteractionSource;II)V +Landroidx/compose/material3/CheckboxKt$CheckboxImpl$1$1; +HSPLandroidx/compose/material3/CheckboxKt$CheckboxImpl$1$1;->(Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/material3/CheckDrawingCache;)V +HSPLandroidx/compose/material3/CheckboxKt$CheckboxImpl$1$1;->invoke(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V +HSPLandroidx/compose/material3/CheckboxKt$CheckboxImpl$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/CheckboxKt$CheckboxImpl$2; +HSPLandroidx/compose/material3/CheckboxKt$CheckboxImpl$2;->(ZLandroidx/compose/ui/state/ToggleableState;Landroidx/compose/ui/Modifier;Landroidx/compose/material3/CheckboxColors;I)V +Landroidx/compose/material3/CheckboxKt$CheckboxImpl$checkCenterGravitationShiftFraction$1; +HSPLandroidx/compose/material3/CheckboxKt$CheckboxImpl$checkCenterGravitationShiftFraction$1;->()V +HSPLandroidx/compose/material3/CheckboxKt$CheckboxImpl$checkCenterGravitationShiftFraction$1;->()V +HSPLandroidx/compose/material3/CheckboxKt$CheckboxImpl$checkCenterGravitationShiftFraction$1;->invoke(Landroidx/compose/animation/core/Transition$Segment;Landroidx/compose/runtime/Composer;I)Landroidx/compose/animation/core/FiniteAnimationSpec; +HSPLandroidx/compose/material3/CheckboxKt$CheckboxImpl$checkCenterGravitationShiftFraction$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/CheckboxKt$CheckboxImpl$checkDrawFraction$1; +HSPLandroidx/compose/material3/CheckboxKt$CheckboxImpl$checkDrawFraction$1;->()V +HSPLandroidx/compose/material3/CheckboxKt$CheckboxImpl$checkDrawFraction$1;->()V +HSPLandroidx/compose/material3/CheckboxKt$CheckboxImpl$checkDrawFraction$1;->invoke(Landroidx/compose/animation/core/Transition$Segment;Landroidx/compose/runtime/Composer;I)Landroidx/compose/animation/core/FiniteAnimationSpec; +HSPLandroidx/compose/material3/CheckboxKt$CheckboxImpl$checkDrawFraction$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/CheckboxKt$WhenMappings; +HSPLandroidx/compose/material3/CheckboxKt$WhenMappings;->()V +Landroidx/compose/material3/ColorResourceHelper; +HSPLandroidx/compose/material3/ColorResourceHelper;->()V +HSPLandroidx/compose/material3/ColorResourceHelper;->()V +HSPLandroidx/compose/material3/ColorResourceHelper;->getColor-WaAFU9c(Landroid/content/Context;I)J +Landroidx/compose/material3/ColorScheme; +HSPLandroidx/compose/material3/ColorScheme;->()V +HSPLandroidx/compose/material3/ColorScheme;->(JJJJJJJJJJJJJJJJJJJJJJJJJJJJJ)V +HSPLandroidx/compose/material3/ColorScheme;->(JJJJJJJJJJJJJJJJJJJJJJJJJJJJJLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/material3/ColorScheme;->copy-G1PFc-w$default(Landroidx/compose/material3/ColorScheme;JJJJJJJJJJJJJJJJJJJJJJJJJJJJJILjava/lang/Object;)Landroidx/compose/material3/ColorScheme; +HSPLandroidx/compose/material3/ColorScheme;->copy-G1PFc-w(JJJJJJJJJJJJJJJJJJJJJJJJJJJJJ)Landroidx/compose/material3/ColorScheme; +HSPLandroidx/compose/material3/ColorScheme;->getBackground-0d7_KjU()J +HSPLandroidx/compose/material3/ColorScheme;->getError-0d7_KjU()J +HSPLandroidx/compose/material3/ColorScheme;->getErrorContainer-0d7_KjU()J +HSPLandroidx/compose/material3/ColorScheme;->getInverseOnSurface-0d7_KjU()J +HSPLandroidx/compose/material3/ColorScheme;->getInversePrimary-0d7_KjU()J +HSPLandroidx/compose/material3/ColorScheme;->getInverseSurface-0d7_KjU()J +HSPLandroidx/compose/material3/ColorScheme;->getOnBackground-0d7_KjU()J +HSPLandroidx/compose/material3/ColorScheme;->getOnError-0d7_KjU()J +HSPLandroidx/compose/material3/ColorScheme;->getOnErrorContainer-0d7_KjU()J +HSPLandroidx/compose/material3/ColorScheme;->getOnPrimary-0d7_KjU()J +HSPLandroidx/compose/material3/ColorScheme;->getOnPrimaryContainer-0d7_KjU()J +HSPLandroidx/compose/material3/ColorScheme;->getOnSecondary-0d7_KjU()J +HSPLandroidx/compose/material3/ColorScheme;->getOnSecondaryContainer-0d7_KjU()J +HSPLandroidx/compose/material3/ColorScheme;->getOnSurface-0d7_KjU()J +HSPLandroidx/compose/material3/ColorScheme;->getOnSurfaceVariant-0d7_KjU()J +HSPLandroidx/compose/material3/ColorScheme;->getOnTertiary-0d7_KjU()J +HSPLandroidx/compose/material3/ColorScheme;->getOnTertiaryContainer-0d7_KjU()J +HSPLandroidx/compose/material3/ColorScheme;->getOutline-0d7_KjU()J +HSPLandroidx/compose/material3/ColorScheme;->getOutlineVariant-0d7_KjU()J +HSPLandroidx/compose/material3/ColorScheme;->getPrimary-0d7_KjU()J +HSPLandroidx/compose/material3/ColorScheme;->getPrimaryContainer-0d7_KjU()J +HSPLandroidx/compose/material3/ColorScheme;->getScrim-0d7_KjU()J +HSPLandroidx/compose/material3/ColorScheme;->getSecondary-0d7_KjU()J +HSPLandroidx/compose/material3/ColorScheme;->getSecondaryContainer-0d7_KjU()J +HSPLandroidx/compose/material3/ColorScheme;->getSurface-0d7_KjU()J +HSPLandroidx/compose/material3/ColorScheme;->getSurfaceTint-0d7_KjU()J +HSPLandroidx/compose/material3/ColorScheme;->getSurfaceVariant-0d7_KjU()J +HSPLandroidx/compose/material3/ColorScheme;->getTertiary-0d7_KjU()J +HSPLandroidx/compose/material3/ColorScheme;->getTertiaryContainer-0d7_KjU()J +HSPLandroidx/compose/material3/ColorScheme;->setBackground-8_81llA$material3_release(J)V +HSPLandroidx/compose/material3/ColorScheme;->setError-8_81llA$material3_release(J)V +HSPLandroidx/compose/material3/ColorScheme;->setErrorContainer-8_81llA$material3_release(J)V +HSPLandroidx/compose/material3/ColorScheme;->setInverseOnSurface-8_81llA$material3_release(J)V +HSPLandroidx/compose/material3/ColorScheme;->setInversePrimary-8_81llA$material3_release(J)V +HSPLandroidx/compose/material3/ColorScheme;->setInverseSurface-8_81llA$material3_release(J)V +HSPLandroidx/compose/material3/ColorScheme;->setOnBackground-8_81llA$material3_release(J)V +HSPLandroidx/compose/material3/ColorScheme;->setOnError-8_81llA$material3_release(J)V +HSPLandroidx/compose/material3/ColorScheme;->setOnErrorContainer-8_81llA$material3_release(J)V +HSPLandroidx/compose/material3/ColorScheme;->setOnPrimary-8_81llA$material3_release(J)V +HSPLandroidx/compose/material3/ColorScheme;->setOnPrimaryContainer-8_81llA$material3_release(J)V +HSPLandroidx/compose/material3/ColorScheme;->setOnSecondary-8_81llA$material3_release(J)V +HSPLandroidx/compose/material3/ColorScheme;->setOnSecondaryContainer-8_81llA$material3_release(J)V +HSPLandroidx/compose/material3/ColorScheme;->setOnSurface-8_81llA$material3_release(J)V +HSPLandroidx/compose/material3/ColorScheme;->setOnSurfaceVariant-8_81llA$material3_release(J)V +HSPLandroidx/compose/material3/ColorScheme;->setOnTertiary-8_81llA$material3_release(J)V +HSPLandroidx/compose/material3/ColorScheme;->setOnTertiaryContainer-8_81llA$material3_release(J)V +HSPLandroidx/compose/material3/ColorScheme;->setOutline-8_81llA$material3_release(J)V +HSPLandroidx/compose/material3/ColorScheme;->setOutlineVariant-8_81llA$material3_release(J)V +HSPLandroidx/compose/material3/ColorScheme;->setPrimary-8_81llA$material3_release(J)V +HSPLandroidx/compose/material3/ColorScheme;->setPrimaryContainer-8_81llA$material3_release(J)V +HSPLandroidx/compose/material3/ColorScheme;->setScrim-8_81llA$material3_release(J)V +HSPLandroidx/compose/material3/ColorScheme;->setSecondary-8_81llA$material3_release(J)V +HSPLandroidx/compose/material3/ColorScheme;->setSecondaryContainer-8_81llA$material3_release(J)V +HSPLandroidx/compose/material3/ColorScheme;->setSurface-8_81llA$material3_release(J)V +HSPLandroidx/compose/material3/ColorScheme;->setSurfaceTint-8_81llA$material3_release(J)V +HSPLandroidx/compose/material3/ColorScheme;->setSurfaceVariant-8_81llA$material3_release(J)V +HSPLandroidx/compose/material3/ColorScheme;->setTertiary-8_81llA$material3_release(J)V +HSPLandroidx/compose/material3/ColorScheme;->setTertiaryContainer-8_81llA$material3_release(J)V +Landroidx/compose/material3/ColorSchemeKt; +HSPLandroidx/compose/material3/ColorSchemeKt;->()V +HSPLandroidx/compose/material3/ColorSchemeKt;->contentColorFor-4WTKRHQ(Landroidx/compose/material3/ColorScheme;J)J +HSPLandroidx/compose/material3/ColorSchemeKt;->contentColorFor-ek8zF_U(JLandroidx/compose/runtime/Composer;I)J +HSPLandroidx/compose/material3/ColorSchemeKt;->fromToken(Landroidx/compose/material3/ColorScheme;Landroidx/compose/material3/tokens/ColorSchemeKeyTokens;)J +HSPLandroidx/compose/material3/ColorSchemeKt;->getLocalColorScheme()Landroidx/compose/runtime/ProvidableCompositionLocal; +HSPLandroidx/compose/material3/ColorSchemeKt;->lightColorScheme-G1PFc-w$default(JJJJJJJJJJJJJJJJJJJJJJJJJJJJJILjava/lang/Object;)Landroidx/compose/material3/ColorScheme; +HSPLandroidx/compose/material3/ColorSchemeKt;->lightColorScheme-G1PFc-w(JJJJJJJJJJJJJJJJJJJJJJJJJJJJJ)Landroidx/compose/material3/ColorScheme; +HSPLandroidx/compose/material3/ColorSchemeKt;->surfaceColorAtElevation-3ABfNKs(Landroidx/compose/material3/ColorScheme;F)J +HSPLandroidx/compose/material3/ColorSchemeKt;->toColor(Landroidx/compose/material3/tokens/ColorSchemeKeyTokens;Landroidx/compose/runtime/Composer;I)J +HSPLandroidx/compose/material3/ColorSchemeKt;->updateColorSchemeFrom(Landroidx/compose/material3/ColorScheme;Landroidx/compose/material3/ColorScheme;)V +Landroidx/compose/material3/ColorSchemeKt$LocalColorScheme$1; +HSPLandroidx/compose/material3/ColorSchemeKt$LocalColorScheme$1;->()V +HSPLandroidx/compose/material3/ColorSchemeKt$LocalColorScheme$1;->()V +Landroidx/compose/material3/ColorSchemeKt$WhenMappings; +HSPLandroidx/compose/material3/ColorSchemeKt$WhenMappings;->()V +Landroidx/compose/material3/ContentColorKt; +HSPLandroidx/compose/material3/ContentColorKt;->()V +HSPLandroidx/compose/material3/ContentColorKt;->getLocalContentColor()Landroidx/compose/runtime/ProvidableCompositionLocal; +Landroidx/compose/material3/ContentColorKt$LocalContentColor$1; +HSPLandroidx/compose/material3/ContentColorKt$LocalContentColor$1;->()V +HSPLandroidx/compose/material3/ContentColorKt$LocalContentColor$1;->()V +Landroidx/compose/material3/DefaultPlatformTextStyle_androidKt; +HSPLandroidx/compose/material3/DefaultPlatformTextStyle_androidKt;->()V +HSPLandroidx/compose/material3/DefaultPlatformTextStyle_androidKt;->defaultPlatformTextStyle()Landroidx/compose/ui/text/PlatformTextStyle; +Landroidx/compose/material3/DynamicTonalPaletteKt; +HSPLandroidx/compose/material3/DynamicTonalPaletteKt;->dynamicLightColorScheme(Landroid/content/Context;)Landroidx/compose/material3/ColorScheme; +HSPLandroidx/compose/material3/DynamicTonalPaletteKt;->dynamicTonalPalette(Landroid/content/Context;)Landroidx/compose/material3/TonalPalette; +Landroidx/compose/material3/ElevationDefaults; +HSPLandroidx/compose/material3/ElevationDefaults;->()V +HSPLandroidx/compose/material3/ElevationDefaults;->()V +HSPLandroidx/compose/material3/ElevationDefaults;->outgoingAnimationSpecForInteraction(Landroidx/compose/foundation/interaction/Interaction;)Landroidx/compose/animation/core/AnimationSpec; +Landroidx/compose/material3/ElevationKt; +HSPLandroidx/compose/material3/ElevationKt;->()V +HSPLandroidx/compose/material3/ElevationKt;->access$getDefaultOutgoingSpec$p()Landroidx/compose/animation/core/TweenSpec; +HSPLandroidx/compose/material3/ElevationKt;->animateElevation-rAjV9yQ(Landroidx/compose/animation/core/Animatable;FLandroidx/compose/foundation/interaction/Interaction;Landroidx/compose/foundation/interaction/Interaction;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/compose/material3/FabPlacement; +Landroidx/compose/material3/FabPosition; +HSPLandroidx/compose/material3/FabPosition;->()V +HSPLandroidx/compose/material3/FabPosition;->(I)V +HSPLandroidx/compose/material3/FabPosition;->access$getEnd$cp()I +HSPLandroidx/compose/material3/FabPosition;->box-impl(I)Landroidx/compose/material3/FabPosition; +HSPLandroidx/compose/material3/FabPosition;->constructor-impl(I)I +Landroidx/compose/material3/FabPosition$Companion; +HSPLandroidx/compose/material3/FabPosition$Companion;->()V +HSPLandroidx/compose/material3/FabPosition$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/material3/FabPosition$Companion;->getEnd-ERTFSPs()I +Landroidx/compose/material3/IconButtonColors; +HSPLandroidx/compose/material3/IconButtonColors;->()V +HSPLandroidx/compose/material3/IconButtonColors;->(JJJJ)V +HSPLandroidx/compose/material3/IconButtonColors;->(JJJJLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/material3/IconButtonColors;->containerColor$material3_release(ZLandroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State; +HSPLandroidx/compose/material3/IconButtonColors;->contentColor$material3_release(ZLandroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State; +Landroidx/compose/material3/IconButtonDefaults; +HSPLandroidx/compose/material3/IconButtonDefaults;->()V +HSPLandroidx/compose/material3/IconButtonDefaults;->()V +HSPLandroidx/compose/material3/IconButtonDefaults;->iconButtonColors-ro_MJ88(JJJJLandroidx/compose/runtime/Composer;II)Landroidx/compose/material3/IconButtonColors; +Landroidx/compose/material3/IconButtonKt; +HSPLandroidx/compose/material3/IconButtonKt;->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 +Landroidx/compose/material3/IconButtonKt$IconButton$3; +HSPLandroidx/compose/material3/IconButtonKt$IconButton$3;->(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/Modifier;ZLandroidx/compose/material3/IconButtonColors;Landroidx/compose/foundation/interaction/MutableInteractionSource;Lkotlin/jvm/functions/Function2;II)V +Landroidx/compose/material3/IconKt; +HSPLandroidx/compose/material3/IconKt;->()V +HSPLandroidx/compose/material3/IconKt;->Icon-ww6aTOc(Landroidx/compose/ui/graphics/painter/Painter;Ljava/lang/String;Landroidx/compose/ui/Modifier;JLandroidx/compose/runtime/Composer;II)V +HSPLandroidx/compose/material3/IconKt;->Icon-ww6aTOc(Landroidx/compose/ui/graphics/vector/ImageVector;Ljava/lang/String;Landroidx/compose/ui/Modifier;JLandroidx/compose/runtime/Composer;II)V +HSPLandroidx/compose/material3/IconKt;->defaultSizeFor(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/painter/Painter;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/material3/IconKt;->isInfinite-uvyYCjk(J)Z +Landroidx/compose/material3/IconKt$Icon$1; +HSPLandroidx/compose/material3/IconKt$Icon$1;->(Landroidx/compose/ui/graphics/vector/ImageVector;Ljava/lang/String;Landroidx/compose/ui/Modifier;JII)V +HSPLandroidx/compose/material3/IconKt$Icon$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/material3/IconKt$Icon$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/IconKt$Icon$3; +HSPLandroidx/compose/material3/IconKt$Icon$3;->(Landroidx/compose/ui/graphics/painter/Painter;Ljava/lang/String;Landroidx/compose/ui/Modifier;JII)V +Landroidx/compose/material3/InteractiveComponentSizeKt; +HSPLandroidx/compose/material3/InteractiveComponentSizeKt;->()V +HSPLandroidx/compose/material3/InteractiveComponentSizeKt;->access$getMinimumInteractiveComponentSize$p()J +HSPLandroidx/compose/material3/InteractiveComponentSizeKt;->getLocalMinimumInteractiveComponentEnforcement()Landroidx/compose/runtime/ProvidableCompositionLocal; +HSPLandroidx/compose/material3/InteractiveComponentSizeKt;->minimumInteractiveComponentSize(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; +Landroidx/compose/material3/InteractiveComponentSizeKt$LocalMinimumInteractiveComponentEnforcement$1; +HSPLandroidx/compose/material3/InteractiveComponentSizeKt$LocalMinimumInteractiveComponentEnforcement$1;->()V +HSPLandroidx/compose/material3/InteractiveComponentSizeKt$LocalMinimumInteractiveComponentEnforcement$1;->()V +HSPLandroidx/compose/material3/InteractiveComponentSizeKt$LocalMinimumInteractiveComponentEnforcement$1;->invoke()Ljava/lang/Boolean; +HSPLandroidx/compose/material3/InteractiveComponentSizeKt$LocalMinimumInteractiveComponentEnforcement$1;->invoke()Ljava/lang/Object; +Landroidx/compose/material3/InteractiveComponentSizeKt$minimumInteractiveComponentSize$2; +HSPLandroidx/compose/material3/InteractiveComponentSizeKt$minimumInteractiveComponentSize$2;->()V +HSPLandroidx/compose/material3/InteractiveComponentSizeKt$minimumInteractiveComponentSize$2;->()V +HSPLandroidx/compose/material3/InteractiveComponentSizeKt$minimumInteractiveComponentSize$2;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/material3/InteractiveComponentSizeKt$minimumInteractiveComponentSize$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/InternalMutatorMutex; +HSPLandroidx/compose/material3/InternalMutatorMutex;->()V +Landroidx/compose/material3/MappedInteractionSource; +HSPLandroidx/compose/material3/MappedInteractionSource;->(Landroidx/compose/foundation/interaction/InteractionSource;J)V +HSPLandroidx/compose/material3/MappedInteractionSource;->(Landroidx/compose/foundation/interaction/InteractionSource;JLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/material3/MappedInteractionSource;->getInteractions()Lkotlinx/coroutines/flow/Flow; +Landroidx/compose/material3/MappedInteractionSource$special$$inlined$map$1; +HSPLandroidx/compose/material3/MappedInteractionSource$special$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;Landroidx/compose/material3/MappedInteractionSource;)V +HSPLandroidx/compose/material3/MappedInteractionSource$special$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/compose/material3/MappedInteractionSource$special$$inlined$map$1$2; +HSPLandroidx/compose/material3/MappedInteractionSource$special$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;Landroidx/compose/material3/MappedInteractionSource;)V +Landroidx/compose/material3/MaterialRippleTheme; +HSPLandroidx/compose/material3/MaterialRippleTheme;->()V +HSPLandroidx/compose/material3/MaterialRippleTheme;->()V +Landroidx/compose/material3/MaterialTheme; +HSPLandroidx/compose/material3/MaterialTheme;->()V +HSPLandroidx/compose/material3/MaterialTheme;->()V +HSPLandroidx/compose/material3/MaterialTheme;->getColorScheme(Landroidx/compose/runtime/Composer;I)Landroidx/compose/material3/ColorScheme; +HSPLandroidx/compose/material3/MaterialTheme;->getShapes(Landroidx/compose/runtime/Composer;I)Landroidx/compose/material3/Shapes; +HSPLandroidx/compose/material3/MaterialTheme;->getTypography(Landroidx/compose/runtime/Composer;I)Landroidx/compose/material3/Typography; +Landroidx/compose/material3/MaterialThemeKt; +HSPLandroidx/compose/material3/MaterialThemeKt;->()V +HSPLandroidx/compose/material3/MaterialThemeKt;->MaterialTheme(Landroidx/compose/material3/ColorScheme;Landroidx/compose/material3/Shapes;Landroidx/compose/material3/Typography;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V +HSPLandroidx/compose/material3/MaterialThemeKt;->rememberTextSelectionColors(Landroidx/compose/material3/ColorScheme;Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/text/selection/TextSelectionColors; +Landroidx/compose/material3/MaterialThemeKt$MaterialTheme$1; +HSPLandroidx/compose/material3/MaterialThemeKt$MaterialTheme$1;->(Landroidx/compose/material3/Typography;Lkotlin/jvm/functions/Function2;I)V +HSPLandroidx/compose/material3/MaterialThemeKt$MaterialTheme$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/material3/MaterialThemeKt$MaterialTheme$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/MaterialThemeKt$MaterialTheme$2; +HSPLandroidx/compose/material3/MaterialThemeKt$MaterialTheme$2;->(Landroidx/compose/material3/ColorScheme;Landroidx/compose/material3/Shapes;Landroidx/compose/material3/Typography;Lkotlin/jvm/functions/Function2;II)V +Landroidx/compose/material3/MinimumInteractiveComponentSizeModifier; +HSPLandroidx/compose/material3/MinimumInteractiveComponentSizeModifier;->(J)V +HSPLandroidx/compose/material3/MinimumInteractiveComponentSizeModifier;->(JLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/material3/MinimumInteractiveComponentSizeModifier;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/material3/MinimumInteractiveComponentSizeModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; +Landroidx/compose/material3/MinimumInteractiveComponentSizeModifier$measure$1; +HSPLandroidx/compose/material3/MinimumInteractiveComponentSizeModifier$measure$1;->(ILandroidx/compose/ui/layout/Placeable;I)V +HSPLandroidx/compose/material3/MinimumInteractiveComponentSizeModifier$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/material3/MinimumInteractiveComponentSizeModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/ModalBottomSheet_androidKt; +HSPLandroidx/compose/material3/ModalBottomSheet_androidKt;->rememberModalBottomSheetState(ZLkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)Landroidx/compose/material3/SheetState; +Landroidx/compose/material3/ModalBottomSheet_androidKt$rememberModalBottomSheetState$1; +HSPLandroidx/compose/material3/ModalBottomSheet_androidKt$rememberModalBottomSheetState$1;->()V +HSPLandroidx/compose/material3/ModalBottomSheet_androidKt$rememberModalBottomSheetState$1;->()V +Landroidx/compose/material3/NavigationBarItemColors; +HSPLandroidx/compose/material3/NavigationBarItemColors;->()V +HSPLandroidx/compose/material3/NavigationBarItemColors;->(JJJJJJJ)V +HSPLandroidx/compose/material3/NavigationBarItemColors;->(JJJJJJJLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/material3/NavigationBarItemColors;->getIndicatorColor-0d7_KjU$material3_release()J +HSPLandroidx/compose/material3/NavigationBarItemColors;->iconColor$material3_release(ZZLandroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State; +HSPLandroidx/compose/material3/NavigationBarItemColors;->textColor$material3_release(ZZLandroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State; +Landroidx/compose/material3/NavigationBarItemDefaults; +HSPLandroidx/compose/material3/NavigationBarItemDefaults;->()V +HSPLandroidx/compose/material3/NavigationBarItemDefaults;->()V +HSPLandroidx/compose/material3/NavigationBarItemDefaults;->colors-69fazGs(JJJJJJJLandroidx/compose/runtime/Composer;II)Landroidx/compose/material3/NavigationBarItemColors; +Landroidx/compose/material3/NavigationBarKt; +HSPLandroidx/compose/material3/NavigationBarKt;->()V +HSPLandroidx/compose/material3/NavigationBarKt;->NavigationBarItem$lambda$3(Landroidx/compose/runtime/MutableState;)I +HSPLandroidx/compose/material3/NavigationBarKt;->NavigationBarItem$lambda$4(Landroidx/compose/runtime/MutableState;I)V +HSPLandroidx/compose/material3/NavigationBarKt;->NavigationBarItem$lambda$9$lambda$6(Landroidx/compose/runtime/State;)F +HSPLandroidx/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 +HSPLandroidx/compose/material3/NavigationBarKt;->NavigationBarItemBaselineLayout(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;ZFLandroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/material3/NavigationBarKt;->access$NavigationBarItem$lambda$4(Landroidx/compose/runtime/MutableState;I)V +HSPLandroidx/compose/material3/NavigationBarKt;->access$NavigationBarItem$lambda$9$lambda$6(Landroidx/compose/runtime/State;)F +HSPLandroidx/compose/material3/NavigationBarKt;->access$getIndicatorHorizontalPadding$p()F +HSPLandroidx/compose/material3/NavigationBarKt;->access$getIndicatorVerticalPadding$p()F +HSPLandroidx/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; +HSPLandroidx/compose/material3/NavigationBarKt;->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; +Landroidx/compose/material3/NavigationBarKt$NavigationBarItem$2$1; +HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$2$1;->(Landroidx/compose/runtime/MutableState;)V +HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$2$1;->invoke-ozmzZPI(J)V +Landroidx/compose/material3/NavigationBarKt$NavigationBarItem$3$indicator$1; +HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$3$indicator$1;->(Landroidx/compose/material3/NavigationBarItemColors;Landroidx/compose/runtime/State;)V +HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$3$indicator$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$3$indicator$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/NavigationBarKt$NavigationBarItem$3$indicatorRipple$1; +HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$3$indicatorRipple$1;->(Landroidx/compose/material3/MappedInteractionSource;)V +HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$3$indicatorRipple$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$3$indicatorRipple$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/NavigationBarKt$NavigationBarItem$4; +HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$4;->(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 +HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$4;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledIcon$1; +HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledIcon$1;->(Landroidx/compose/material3/NavigationBarItemColors;ZZILkotlin/jvm/functions/Function2;ZLkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledIcon$1;->invoke$lambda$0(Landroidx/compose/runtime/State;)J +HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledIcon$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledIcon$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledIcon$1$1; +HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledIcon$1$1;->()V +HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledIcon$1$1;->()V +HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledIcon$1$1;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V +HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledIcon$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledLabel$1$1; +HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledLabel$1$1;->(Landroidx/compose/material3/NavigationBarItemColors;ZZILkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledLabel$1$1;->invoke$lambda$0(Landroidx/compose/runtime/State;)J +HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledLabel$1$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledLabel$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledLabel$1$1$1; +HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledLabel$1$1$1;->(Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function2;I)V +HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledLabel$1$1$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItem$styledLabel$1$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/NavigationBarKt$NavigationBarItemBaselineLayout$2; +HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItemBaselineLayout$2;->(FLkotlin/jvm/functions/Function2;Z)V +HSPLandroidx/compose/material3/NavigationBarKt$NavigationBarItemBaselineLayout$2;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; +Landroidx/compose/material3/NavigationBarKt$placeLabelAndIcon$1; +HSPLandroidx/compose/material3/NavigationBarKt$placeLabelAndIcon$1;->(Landroidx/compose/ui/layout/Placeable;ZFLandroidx/compose/ui/layout/Placeable;IIILandroidx/compose/ui/layout/Placeable;IILandroidx/compose/ui/layout/Placeable;IIILandroidx/compose/ui/layout/MeasureScope;)V +HSPLandroidx/compose/material3/NavigationBarKt$placeLabelAndIcon$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/material3/NavigationBarKt$placeLabelAndIcon$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/PinnedScrollBehavior; +HSPLandroidx/compose/material3/PinnedScrollBehavior;->(Landroidx/compose/material3/TopAppBarState;Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/material3/PinnedScrollBehavior;->getNestedScrollConnection()Landroidx/compose/ui/input/nestedscroll/NestedScrollConnection; +HSPLandroidx/compose/material3/PinnedScrollBehavior;->getState()Landroidx/compose/material3/TopAppBarState; +HSPLandroidx/compose/material3/PinnedScrollBehavior;->isPinned()Z +Landroidx/compose/material3/PinnedScrollBehavior$nestedScrollConnection$1; +HSPLandroidx/compose/material3/PinnedScrollBehavior$nestedScrollConnection$1;->(Landroidx/compose/material3/PinnedScrollBehavior;)V +Landroidx/compose/material3/ProgressIndicatorDefaults; +HSPLandroidx/compose/material3/ProgressIndicatorDefaults;->()V +HSPLandroidx/compose/material3/ProgressIndicatorDefaults;->()V +HSPLandroidx/compose/material3/ProgressIndicatorDefaults;->getCircularColor(Landroidx/compose/runtime/Composer;I)J +HSPLandroidx/compose/material3/ProgressIndicatorDefaults;->getCircularIndeterminateStrokeCap-KaPHkGw()I +HSPLandroidx/compose/material3/ProgressIndicatorDefaults;->getCircularStrokeWidth-D9Ej5fM()F +HSPLandroidx/compose/material3/ProgressIndicatorDefaults;->getCircularTrackColor(Landroidx/compose/runtime/Composer;I)J +Landroidx/compose/material3/ProgressIndicatorKt; +HSPLandroidx/compose/material3/ProgressIndicatorKt;->()V +HSPLandroidx/compose/material3/ProgressIndicatorKt;->CircularProgressIndicator-LxG7B9w(Landroidx/compose/ui/Modifier;JFJILandroidx/compose/runtime/Composer;II)V +HSPLandroidx/compose/material3/ProgressIndicatorKt;->access$drawCircularIndicatorTrack-bw27NRU(Landroidx/compose/ui/graphics/drawscope/DrawScope;JLandroidx/compose/ui/graphics/drawscope/Stroke;)V +HSPLandroidx/compose/material3/ProgressIndicatorKt;->access$drawIndeterminateCircularIndicator-hrjfTZI(Landroidx/compose/ui/graphics/drawscope/DrawScope;FFFJLandroidx/compose/ui/graphics/drawscope/Stroke;)V +HSPLandroidx/compose/material3/ProgressIndicatorKt;->access$getCircularEasing$p()Landroidx/compose/animation/core/CubicBezierEasing; +HSPLandroidx/compose/material3/ProgressIndicatorKt;->drawCircularIndicator-42QJj7c(Landroidx/compose/ui/graphics/drawscope/DrawScope;FFJLandroidx/compose/ui/graphics/drawscope/Stroke;)V +HSPLandroidx/compose/material3/ProgressIndicatorKt;->drawCircularIndicatorTrack-bw27NRU(Landroidx/compose/ui/graphics/drawscope/DrawScope;JLandroidx/compose/ui/graphics/drawscope/Stroke;)V +HSPLandroidx/compose/material3/ProgressIndicatorKt;->drawIndeterminateCircularIndicator-hrjfTZI(Landroidx/compose/ui/graphics/drawscope/DrawScope;FFFJLandroidx/compose/ui/graphics/drawscope/Stroke;)V +Landroidx/compose/material3/ProgressIndicatorKt$CircularProgressIndicator$3; +HSPLandroidx/compose/material3/ProgressIndicatorKt$CircularProgressIndicator$3;->(JLandroidx/compose/ui/graphics/drawscope/Stroke;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;FJ)V +HSPLandroidx/compose/material3/ProgressIndicatorKt$CircularProgressIndicator$3;->invoke(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V +HSPLandroidx/compose/material3/ProgressIndicatorKt$CircularProgressIndicator$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/ProgressIndicatorKt$CircularProgressIndicator$4; +HSPLandroidx/compose/material3/ProgressIndicatorKt$CircularProgressIndicator$4;->(Landroidx/compose/ui/Modifier;JFJIII)V +Landroidx/compose/material3/ProgressIndicatorKt$CircularProgressIndicator$endAngle$1; +HSPLandroidx/compose/material3/ProgressIndicatorKt$CircularProgressIndicator$endAngle$1;->()V +HSPLandroidx/compose/material3/ProgressIndicatorKt$CircularProgressIndicator$endAngle$1;->()V +HSPLandroidx/compose/material3/ProgressIndicatorKt$CircularProgressIndicator$endAngle$1;->invoke(Landroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig;)V +HSPLandroidx/compose/material3/ProgressIndicatorKt$CircularProgressIndicator$endAngle$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/ProgressIndicatorKt$CircularProgressIndicator$startAngle$1; +HSPLandroidx/compose/material3/ProgressIndicatorKt$CircularProgressIndicator$startAngle$1;->()V +HSPLandroidx/compose/material3/ProgressIndicatorKt$CircularProgressIndicator$startAngle$1;->()V +HSPLandroidx/compose/material3/ProgressIndicatorKt$CircularProgressIndicator$startAngle$1;->invoke(Landroidx/compose/animation/core/KeyframesSpec$KeyframesSpecConfig;)V +HSPLandroidx/compose/material3/ProgressIndicatorKt$CircularProgressIndicator$startAngle$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/ScaffoldKt; +HSPLandroidx/compose/material3/ScaffoldKt;->()V +HSPLandroidx/compose/material3/ScaffoldKt;->Scaffold-TvnljyQ(Landroidx/compose/ui/Modifier;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;II)V +HSPLandroidx/compose/material3/ScaffoldKt;->ScaffoldLayout-FMILGgc(ILkotlin/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 +HSPLandroidx/compose/material3/ScaffoldKt;->access$ScaffoldLayout-FMILGgc(ILkotlin/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 +HSPLandroidx/compose/material3/ScaffoldKt;->getLocalFabPlacement()Landroidx/compose/runtime/ProvidableCompositionLocal; +Landroidx/compose/material3/ScaffoldKt$LocalFabPlacement$1; +HSPLandroidx/compose/material3/ScaffoldKt$LocalFabPlacement$1;->()V +HSPLandroidx/compose/material3/ScaffoldKt$LocalFabPlacement$1;->()V +Landroidx/compose/material3/ScaffoldKt$Scaffold$1; +HSPLandroidx/compose/material3/ScaffoldKt$Scaffold$1;->(ILkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Landroidx/compose/foundation/layout/WindowInsets;Lkotlin/jvm/functions/Function2;I)V +HSPLandroidx/compose/material3/ScaffoldKt$Scaffold$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/material3/ScaffoldKt$Scaffold$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/ScaffoldKt$Scaffold$2; +HSPLandroidx/compose/material3/ScaffoldKt$Scaffold$2;->(Landroidx/compose/ui/Modifier;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;II)V +Landroidx/compose/material3/ScaffoldKt$ScaffoldLayout$1$1; +HSPLandroidx/compose/material3/ScaffoldKt$ScaffoldLayout$1$1;->(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;ILandroidx/compose/foundation/layout/WindowInsets;Lkotlin/jvm/functions/Function2;ILkotlin/jvm/functions/Function3;)V +HSPLandroidx/compose/material3/ScaffoldKt$ScaffoldLayout$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/material3/ScaffoldKt$ScaffoldLayout$1$1;->invoke-0kLqBqw(Landroidx/compose/ui/layout/SubcomposeMeasureScope;J)Landroidx/compose/ui/layout/MeasureResult; +Landroidx/compose/material3/ScaffoldKt$ScaffoldLayout$1$1$1; +HSPLandroidx/compose/material3/ScaffoldKt$ScaffoldLayout$1$1$1;->(Landroidx/compose/ui/layout/SubcomposeMeasureScope;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;IILandroidx/compose/foundation/layout/WindowInsets;JLkotlin/jvm/functions/Function2;ILkotlin/jvm/functions/Function3;I)V +HSPLandroidx/compose/material3/ScaffoldKt$ScaffoldLayout$1$1$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/material3/ScaffoldKt$ScaffoldLayout$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/ScaffoldKt$ScaffoldLayout$1$1$1$bodyContentPlaceables$1; +HSPLandroidx/compose/material3/ScaffoldKt$ScaffoldLayout$1$1$1$bodyContentPlaceables$1;->(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/ui/layout/SubcomposeMeasureScope;Ljava/util/List;ILjava/util/List;Ljava/lang/Integer;Lkotlin/jvm/functions/Function3;I)V +HSPLandroidx/compose/material3/ScaffoldKt$ScaffoldLayout$1$1$1$bodyContentPlaceables$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/material3/ScaffoldKt$ScaffoldLayout$1$1$1$bodyContentPlaceables$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/ScaffoldKt$ScaffoldLayout$1$1$1$bottomBarPlaceables$1; +HSPLandroidx/compose/material3/ScaffoldKt$ScaffoldLayout$1$1$1$bottomBarPlaceables$1;->(Landroidx/compose/material3/FabPlacement;Lkotlin/jvm/functions/Function2;I)V +HSPLandroidx/compose/material3/ScaffoldKt$ScaffoldLayout$1$1$1$bottomBarPlaceables$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/material3/ScaffoldKt$ScaffoldLayout$1$1$1$bottomBarPlaceables$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/ScaffoldLayoutContent; +HSPLandroidx/compose/material3/ScaffoldLayoutContent;->$values()[Landroidx/compose/material3/ScaffoldLayoutContent; +HSPLandroidx/compose/material3/ScaffoldLayoutContent;->()V +HSPLandroidx/compose/material3/ScaffoldLayoutContent;->(Ljava/lang/String;I)V +Landroidx/compose/material3/ShapeDefaults; +HSPLandroidx/compose/material3/ShapeDefaults;->()V +HSPLandroidx/compose/material3/ShapeDefaults;->()V +HSPLandroidx/compose/material3/ShapeDefaults;->getExtraLarge()Landroidx/compose/foundation/shape/CornerBasedShape; +HSPLandroidx/compose/material3/ShapeDefaults;->getExtraSmall()Landroidx/compose/foundation/shape/CornerBasedShape; +HSPLandroidx/compose/material3/ShapeDefaults;->getLarge()Landroidx/compose/foundation/shape/CornerBasedShape; +HSPLandroidx/compose/material3/ShapeDefaults;->getMedium()Landroidx/compose/foundation/shape/CornerBasedShape; +HSPLandroidx/compose/material3/ShapeDefaults;->getSmall()Landroidx/compose/foundation/shape/CornerBasedShape; +Landroidx/compose/material3/Shapes; +HSPLandroidx/compose/material3/Shapes;->()V +HSPLandroidx/compose/material3/Shapes;->(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 +HSPLandroidx/compose/material3/Shapes;->(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;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/material3/Shapes;->getLarge()Landroidx/compose/foundation/shape/CornerBasedShape; +HSPLandroidx/compose/material3/Shapes;->getMedium()Landroidx/compose/foundation/shape/CornerBasedShape; +HSPLandroidx/compose/material3/Shapes;->getSmall()Landroidx/compose/foundation/shape/CornerBasedShape; +Landroidx/compose/material3/ShapesKt; +HSPLandroidx/compose/material3/ShapesKt;->()V +HSPLandroidx/compose/material3/ShapesKt;->fromToken(Landroidx/compose/material3/Shapes;Landroidx/compose/material3/tokens/ShapeKeyTokens;)Landroidx/compose/ui/graphics/Shape; +HSPLandroidx/compose/material3/ShapesKt;->getLocalShapes()Landroidx/compose/runtime/ProvidableCompositionLocal; +HSPLandroidx/compose/material3/ShapesKt;->toShape(Landroidx/compose/material3/tokens/ShapeKeyTokens;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/graphics/Shape; +Landroidx/compose/material3/ShapesKt$LocalShapes$1; +HSPLandroidx/compose/material3/ShapesKt$LocalShapes$1;->()V +HSPLandroidx/compose/material3/ShapesKt$LocalShapes$1;->()V +HSPLandroidx/compose/material3/ShapesKt$LocalShapes$1;->invoke()Landroidx/compose/material3/Shapes; +HSPLandroidx/compose/material3/ShapesKt$LocalShapes$1;->invoke()Ljava/lang/Object; +Landroidx/compose/material3/ShapesKt$WhenMappings; +HSPLandroidx/compose/material3/ShapesKt$WhenMappings;->()V +Landroidx/compose/material3/SheetDefaultsKt; +HSPLandroidx/compose/material3/SheetDefaultsKt;->()V +HSPLandroidx/compose/material3/SheetDefaultsKt;->rememberSheetState(ZLkotlin/jvm/functions/Function1;Landroidx/compose/material3/SheetValue;ZLandroidx/compose/runtime/Composer;II)Landroidx/compose/material3/SheetState; +Landroidx/compose/material3/SheetDefaultsKt$rememberSheetState$2$1; +HSPLandroidx/compose/material3/SheetDefaultsKt$rememberSheetState$2$1;->(ZLandroidx/compose/material3/SheetValue;Lkotlin/jvm/functions/Function1;Z)V +HSPLandroidx/compose/material3/SheetDefaultsKt$rememberSheetState$2$1;->invoke()Landroidx/compose/material3/SheetState; +HSPLandroidx/compose/material3/SheetDefaultsKt$rememberSheetState$2$1;->invoke()Ljava/lang/Object; +Landroidx/compose/material3/SheetState; +HSPLandroidx/compose/material3/SheetState;->()V +HSPLandroidx/compose/material3/SheetState;->(ZLandroidx/compose/material3/SheetValue;Lkotlin/jvm/functions/Function1;Z)V +HSPLandroidx/compose/material3/SheetState;->getCurrentValue()Landroidx/compose/material3/SheetValue; +Landroidx/compose/material3/SheetState$Companion; +HSPLandroidx/compose/material3/SheetState$Companion;->()V +HSPLandroidx/compose/material3/SheetState$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/material3/SheetState$Companion;->Saver(ZLkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/saveable/Saver; +Landroidx/compose/material3/SheetState$Companion$Saver$1; +HSPLandroidx/compose/material3/SheetState$Companion$Saver$1;->()V +HSPLandroidx/compose/material3/SheetState$Companion$Saver$1;->()V +HSPLandroidx/compose/material3/SheetState$Companion$Saver$1;->invoke(Landroidx/compose/runtime/saveable/SaverScope;Landroidx/compose/material3/SheetState;)Landroidx/compose/material3/SheetValue; +HSPLandroidx/compose/material3/SheetState$Companion$Saver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/SheetState$Companion$Saver$2; +HSPLandroidx/compose/material3/SheetState$Companion$Saver$2;->(ZLkotlin/jvm/functions/Function1;)V +Landroidx/compose/material3/SheetValue; +HSPLandroidx/compose/material3/SheetValue;->$values()[Landroidx/compose/material3/SheetValue; +HSPLandroidx/compose/material3/SheetValue;->()V +HSPLandroidx/compose/material3/SheetValue;->(Ljava/lang/String;I)V +Landroidx/compose/material3/SurfaceKt; +HSPLandroidx/compose/material3/SurfaceKt;->()V +HSPLandroidx/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 +HSPLandroidx/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;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;III)V +HSPLandroidx/compose/material3/SurfaceKt;->access$surface-8ww4TTg(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/Shape;JLandroidx/compose/foundation/BorderStroke;F)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/material3/SurfaceKt;->access$surfaceColorAtElevation-CLU3JFs(JFLandroidx/compose/runtime/Composer;I)J +HSPLandroidx/compose/material3/SurfaceKt;->surface-8ww4TTg(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/Shape;JLandroidx/compose/foundation/BorderStroke;F)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/material3/SurfaceKt;->surfaceColorAtElevation-CLU3JFs(JFLandroidx/compose/runtime/Composer;I)J +Landroidx/compose/material3/SurfaceKt$LocalAbsoluteTonalElevation$1; +HSPLandroidx/compose/material3/SurfaceKt$LocalAbsoluteTonalElevation$1;->()V +HSPLandroidx/compose/material3/SurfaceKt$LocalAbsoluteTonalElevation$1;->()V +HSPLandroidx/compose/material3/SurfaceKt$LocalAbsoluteTonalElevation$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/material3/SurfaceKt$LocalAbsoluteTonalElevation$1;->invoke-D9Ej5fM()F +Landroidx/compose/material3/SurfaceKt$Surface$1; +HSPLandroidx/compose/material3/SurfaceKt$Surface$1;->(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/Shape;JFILandroidx/compose/foundation/BorderStroke;FLkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/material3/SurfaceKt$Surface$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/material3/SurfaceKt$Surface$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/SurfaceKt$Surface$1$1; +HSPLandroidx/compose/material3/SurfaceKt$Surface$1$1;->()V +HSPLandroidx/compose/material3/SurfaceKt$Surface$1$1;->()V +HSPLandroidx/compose/material3/SurfaceKt$Surface$1$1;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V +HSPLandroidx/compose/material3/SurfaceKt$Surface$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/SurfaceKt$Surface$1$2; +HSPLandroidx/compose/material3/SurfaceKt$Surface$1$2;->(Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/material3/SurfaceKt$Surface$1$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/material3/SurfaceKt$Surface$1$2;->invoke(Landroidx/compose/ui/input/pointer/PointerInputScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/material3/SurfaceKt$Surface$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/material3/SurfaceKt$Surface$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/SurfaceKt$Surface$3; +HSPLandroidx/compose/material3/SurfaceKt$Surface$3;->(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/Shape;JFILandroidx/compose/foundation/BorderStroke;FLandroidx/compose/foundation/interaction/MutableInteractionSource;ZLkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function2;I)V +HSPLandroidx/compose/material3/SurfaceKt$Surface$3;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/material3/SurfaceKt$Surface$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/SwipeableV2Defaults; +HSPLandroidx/compose/material3/SwipeableV2Defaults;->()V +HSPLandroidx/compose/material3/SwipeableV2Defaults;->()V +HSPLandroidx/compose/material3/SwipeableV2Defaults;->getAnimationSpec()Landroidx/compose/animation/core/SpringSpec; +HSPLandroidx/compose/material3/SwipeableV2Defaults;->getPositionalThreshold()Lkotlin/jvm/functions/Function2; +HSPLandroidx/compose/material3/SwipeableV2Defaults;->getVelocityThreshold-D9Ej5fM()F +Landroidx/compose/material3/SwipeableV2Kt; +HSPLandroidx/compose/material3/SwipeableV2Kt;->fixedPositionalThreshold-0680j_4(F)Lkotlin/jvm/functions/Function2; +Landroidx/compose/material3/SwipeableV2Kt$fixedPositionalThreshold$1; +HSPLandroidx/compose/material3/SwipeableV2Kt$fixedPositionalThreshold$1;->(F)V +Landroidx/compose/material3/SwipeableV2State; +HSPLandroidx/compose/material3/SwipeableV2State;->()V +HSPLandroidx/compose/material3/SwipeableV2State;->(Ljava/lang/Object;Landroidx/compose/animation/core/AnimationSpec;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;F)V +HSPLandroidx/compose/material3/SwipeableV2State;->(Ljava/lang/Object;Landroidx/compose/animation/core/AnimationSpec;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;FILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/material3/SwipeableV2State;->(Ljava/lang/Object;Landroidx/compose/animation/core/AnimationSpec;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;FLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/material3/SwipeableV2State;->getCurrentValue()Ljava/lang/Object; +Landroidx/compose/material3/SwipeableV2State$Companion; +HSPLandroidx/compose/material3/SwipeableV2State$Companion;->()V +HSPLandroidx/compose/material3/SwipeableV2State$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/material3/SwipeableV2State$maxOffset$2; +HSPLandroidx/compose/material3/SwipeableV2State$maxOffset$2;->(Landroidx/compose/material3/SwipeableV2State;)V +Landroidx/compose/material3/SwipeableV2State$minOffset$2; +HSPLandroidx/compose/material3/SwipeableV2State$minOffset$2;->(Landroidx/compose/material3/SwipeableV2State;)V +Landroidx/compose/material3/SwipeableV2State$progress$2; +HSPLandroidx/compose/material3/SwipeableV2State$progress$2;->(Landroidx/compose/material3/SwipeableV2State;)V +Landroidx/compose/material3/SwipeableV2State$swipeDraggableState$1; +HSPLandroidx/compose/material3/SwipeableV2State$swipeDraggableState$1;->(Landroidx/compose/material3/SwipeableV2State;)V +Landroidx/compose/material3/SwipeableV2State$swipeDraggableState$1$dragScope$1; +HSPLandroidx/compose/material3/SwipeableV2State$swipeDraggableState$1$dragScope$1;->(Landroidx/compose/material3/SwipeableV2State;)V +Landroidx/compose/material3/SwipeableV2State$targetValue$2; +HSPLandroidx/compose/material3/SwipeableV2State$targetValue$2;->(Landroidx/compose/material3/SwipeableV2State;)V +Landroidx/compose/material3/SystemBarsDefaultInsets_androidKt; +HSPLandroidx/compose/material3/SystemBarsDefaultInsets_androidKt;->getSystemBarsForVisualComponents(Landroidx/compose/foundation/layout/WindowInsets$Companion;Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/layout/WindowInsets; +Landroidx/compose/material3/TextFieldDefaults; +HSPLandroidx/compose/material3/TextFieldDefaults;->()V +HSPLandroidx/compose/material3/TextFieldDefaults;->()V +HSPLandroidx/compose/material3/TextFieldDefaults;->getMinWidth-D9Ej5fM()F +Landroidx/compose/material3/TextKt; +HSPLandroidx/compose/material3/TextKt;->()V +HSPLandroidx/compose/material3/TextKt;->ProvideTextStyle(Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/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 +HSPLandroidx/compose/material3/TextKt;->Text-IbK3jfQ(Landroidx/compose/ui/text/AnnotatedString;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;JIZIILjava/util/Map;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/runtime/Composer;III)V +HSPLandroidx/compose/material3/TextKt;->getLocalTextStyle()Landroidx/compose/runtime/ProvidableCompositionLocal; +Landroidx/compose/material3/TextKt$LocalTextStyle$1; +HSPLandroidx/compose/material3/TextKt$LocalTextStyle$1;->()V +HSPLandroidx/compose/material3/TextKt$LocalTextStyle$1;->()V +HSPLandroidx/compose/material3/TextKt$LocalTextStyle$1;->invoke()Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/material3/TextKt$LocalTextStyle$1;->invoke()Ljava/lang/Object; +Landroidx/compose/material3/TextKt$ProvideTextStyle$1; +HSPLandroidx/compose/material3/TextKt$ProvideTextStyle$1;->(Landroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function2;I)V +Landroidx/compose/material3/TextKt$Text$1; +HSPLandroidx/compose/material3/TextKt$Text$1;->()V +HSPLandroidx/compose/material3/TextKt$Text$1;->()V +HSPLandroidx/compose/material3/TextKt$Text$1;->invoke(Landroidx/compose/ui/text/TextLayoutResult;)V +HSPLandroidx/compose/material3/TextKt$Text$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/TextKt$Text$2; +HSPLandroidx/compose/material3/TextKt$Text$2;->(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 +Landroidx/compose/material3/TextKt$Text$5; +HSPLandroidx/compose/material3/TextKt$Text$5;->()V +HSPLandroidx/compose/material3/TextKt$Text$5;->()V +HSPLandroidx/compose/material3/TextKt$Text$5;->invoke(Landroidx/compose/ui/text/TextLayoutResult;)V +HSPLandroidx/compose/material3/TextKt$Text$5;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/TextKt$Text$6; +HSPLandroidx/compose/material3/TextKt$Text$6;->(Landroidx/compose/ui/text/AnnotatedString;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;JIZIILjava/util/Map;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/text/TextStyle;III)V +Landroidx/compose/material3/TonalPalette; +HSPLandroidx/compose/material3/TonalPalette;->(JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ)V +HSPLandroidx/compose/material3/TonalPalette;->(JJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/material3/TonalPalette;->getNeutral10-0d7_KjU()J +HSPLandroidx/compose/material3/TonalPalette;->getNeutral20-0d7_KjU()J +HSPLandroidx/compose/material3/TonalPalette;->getNeutral95-0d7_KjU()J +HSPLandroidx/compose/material3/TonalPalette;->getNeutral99-0d7_KjU()J +HSPLandroidx/compose/material3/TonalPalette;->getNeutralVariant30-0d7_KjU()J +HSPLandroidx/compose/material3/TonalPalette;->getNeutralVariant50-0d7_KjU()J +HSPLandroidx/compose/material3/TonalPalette;->getNeutralVariant90-0d7_KjU()J +HSPLandroidx/compose/material3/TonalPalette;->getPrimary10-0d7_KjU()J +HSPLandroidx/compose/material3/TonalPalette;->getPrimary100-0d7_KjU()J +HSPLandroidx/compose/material3/TonalPalette;->getPrimary40-0d7_KjU()J +HSPLandroidx/compose/material3/TonalPalette;->getPrimary80-0d7_KjU()J +HSPLandroidx/compose/material3/TonalPalette;->getPrimary90-0d7_KjU()J +HSPLandroidx/compose/material3/TonalPalette;->getSecondary10-0d7_KjU()J +HSPLandroidx/compose/material3/TonalPalette;->getSecondary100-0d7_KjU()J +HSPLandroidx/compose/material3/TonalPalette;->getSecondary40-0d7_KjU()J +HSPLandroidx/compose/material3/TonalPalette;->getSecondary90-0d7_KjU()J +HSPLandroidx/compose/material3/TonalPalette;->getTertiary10-0d7_KjU()J +HSPLandroidx/compose/material3/TonalPalette;->getTertiary100-0d7_KjU()J +HSPLandroidx/compose/material3/TonalPalette;->getTertiary40-0d7_KjU()J +HSPLandroidx/compose/material3/TonalPalette;->getTertiary90-0d7_KjU()J +Landroidx/compose/material3/TopAppBarDefaults; +HSPLandroidx/compose/material3/TopAppBarDefaults;->()V +HSPLandroidx/compose/material3/TopAppBarDefaults;->()V +HSPLandroidx/compose/material3/TopAppBarDefaults;->getWindowInsets(Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/layout/WindowInsets; +HSPLandroidx/compose/material3/TopAppBarDefaults;->pinnedScrollBehavior(Landroidx/compose/material3/TopAppBarState;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;II)Landroidx/compose/material3/TopAppBarScrollBehavior; +Landroidx/compose/material3/TopAppBarDefaults$pinnedScrollBehavior$1; +HSPLandroidx/compose/material3/TopAppBarDefaults$pinnedScrollBehavior$1;->()V +HSPLandroidx/compose/material3/TopAppBarDefaults$pinnedScrollBehavior$1;->()V +Landroidx/compose/material3/TopAppBarScrollBehavior; +Landroidx/compose/material3/TopAppBarState; +HSPLandroidx/compose/material3/TopAppBarState;->()V +HSPLandroidx/compose/material3/TopAppBarState;->(FFF)V +HSPLandroidx/compose/material3/TopAppBarState;->access$getSaver$cp()Landroidx/compose/runtime/saveable/Saver; +HSPLandroidx/compose/material3/TopAppBarState;->getContentOffset()F +HSPLandroidx/compose/material3/TopAppBarState;->getHeightOffset()F +HSPLandroidx/compose/material3/TopAppBarState;->getHeightOffsetLimit()F +HSPLandroidx/compose/material3/TopAppBarState;->getOverlappedFraction()F +HSPLandroidx/compose/material3/TopAppBarState;->setHeightOffsetLimit(F)V +Landroidx/compose/material3/TopAppBarState$Companion; +HSPLandroidx/compose/material3/TopAppBarState$Companion;->()V +HSPLandroidx/compose/material3/TopAppBarState$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/material3/TopAppBarState$Companion;->getSaver()Landroidx/compose/runtime/saveable/Saver; +Landroidx/compose/material3/TopAppBarState$Companion$Saver$1; +HSPLandroidx/compose/material3/TopAppBarState$Companion$Saver$1;->()V +HSPLandroidx/compose/material3/TopAppBarState$Companion$Saver$1;->()V +HSPLandroidx/compose/material3/TopAppBarState$Companion$Saver$1;->invoke(Landroidx/compose/runtime/saveable/SaverScope;Landroidx/compose/material3/TopAppBarState;)Ljava/util/List; +HSPLandroidx/compose/material3/TopAppBarState$Companion$Saver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/material3/TopAppBarState$Companion$Saver$2; +HSPLandroidx/compose/material3/TopAppBarState$Companion$Saver$2;->()V +HSPLandroidx/compose/material3/TopAppBarState$Companion$Saver$2;->()V +Landroidx/compose/material3/Typography; +HSPLandroidx/compose/material3/Typography;->()V +HSPLandroidx/compose/material3/Typography;->(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 +HSPLandroidx/compose/material3/Typography;->(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;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/material3/Typography;->getBodyLarge()Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/material3/Typography;->getBodyMedium()Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/material3/Typography;->getBodySmall()Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/material3/Typography;->getLabelLarge()Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/material3/Typography;->getLabelMedium()Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/material3/Typography;->getLabelSmall()Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/material3/Typography;->getTitleLarge()Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/material3/Typography;->getTitleMedium()Landroidx/compose/ui/text/TextStyle; +Landroidx/compose/material3/TypographyKt; +HSPLandroidx/compose/material3/TypographyKt;->()V +HSPLandroidx/compose/material3/TypographyKt;->fromToken(Landroidx/compose/material3/Typography;Landroidx/compose/material3/tokens/TypographyKeyTokens;)Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/material3/TypographyKt;->getLocalTypography()Landroidx/compose/runtime/ProvidableCompositionLocal; +Landroidx/compose/material3/TypographyKt$LocalTypography$1; +HSPLandroidx/compose/material3/TypographyKt$LocalTypography$1;->()V +HSPLandroidx/compose/material3/TypographyKt$LocalTypography$1;->()V +Landroidx/compose/material3/TypographyKt$WhenMappings; +HSPLandroidx/compose/material3/TypographyKt$WhenMappings;->()V +Landroidx/compose/material3/tokens/CheckboxTokens; +HSPLandroidx/compose/material3/tokens/CheckboxTokens;->()V +HSPLandroidx/compose/material3/tokens/CheckboxTokens;->()V +HSPLandroidx/compose/material3/tokens/CheckboxTokens;->getSelectedContainerColor()Landroidx/compose/material3/tokens/ColorSchemeKeyTokens; +HSPLandroidx/compose/material3/tokens/CheckboxTokens;->getSelectedDisabledContainerColor()Landroidx/compose/material3/tokens/ColorSchemeKeyTokens; +HSPLandroidx/compose/material3/tokens/CheckboxTokens;->getSelectedIconColor()Landroidx/compose/material3/tokens/ColorSchemeKeyTokens; +HSPLandroidx/compose/material3/tokens/CheckboxTokens;->getUnselectedDisabledOutlineColor()Landroidx/compose/material3/tokens/ColorSchemeKeyTokens; +HSPLandroidx/compose/material3/tokens/CheckboxTokens;->getUnselectedOutlineColor()Landroidx/compose/material3/tokens/ColorSchemeKeyTokens; +Landroidx/compose/material3/tokens/CircularProgressIndicatorTokens; +HSPLandroidx/compose/material3/tokens/CircularProgressIndicatorTokens;->()V +HSPLandroidx/compose/material3/tokens/CircularProgressIndicatorTokens;->()V +HSPLandroidx/compose/material3/tokens/CircularProgressIndicatorTokens;->getActiveIndicatorColor()Landroidx/compose/material3/tokens/ColorSchemeKeyTokens; +HSPLandroidx/compose/material3/tokens/CircularProgressIndicatorTokens;->getActiveIndicatorWidth-D9Ej5fM()F +HSPLandroidx/compose/material3/tokens/CircularProgressIndicatorTokens;->getSize-D9Ej5fM()F +Landroidx/compose/material3/tokens/ColorLightTokens; +HSPLandroidx/compose/material3/tokens/ColorLightTokens;->()V +HSPLandroidx/compose/material3/tokens/ColorLightTokens;->()V +HSPLandroidx/compose/material3/tokens/ColorLightTokens;->getError-0d7_KjU()J +HSPLandroidx/compose/material3/tokens/ColorLightTokens;->getErrorContainer-0d7_KjU()J +HSPLandroidx/compose/material3/tokens/ColorLightTokens;->getOnError-0d7_KjU()J +HSPLandroidx/compose/material3/tokens/ColorLightTokens;->getOnErrorContainer-0d7_KjU()J +HSPLandroidx/compose/material3/tokens/ColorLightTokens;->getOutlineVariant-0d7_KjU()J +HSPLandroidx/compose/material3/tokens/ColorLightTokens;->getScrim-0d7_KjU()J +Landroidx/compose/material3/tokens/ColorSchemeKeyTokens; +HSPLandroidx/compose/material3/tokens/ColorSchemeKeyTokens;->$values()[Landroidx/compose/material3/tokens/ColorSchemeKeyTokens; +HSPLandroidx/compose/material3/tokens/ColorSchemeKeyTokens;->()V +HSPLandroidx/compose/material3/tokens/ColorSchemeKeyTokens;->(Ljava/lang/String;I)V +HSPLandroidx/compose/material3/tokens/ColorSchemeKeyTokens;->values()[Landroidx/compose/material3/tokens/ColorSchemeKeyTokens; +Landroidx/compose/material3/tokens/ElevationTokens; +HSPLandroidx/compose/material3/tokens/ElevationTokens;->()V +HSPLandroidx/compose/material3/tokens/ElevationTokens;->()V +HSPLandroidx/compose/material3/tokens/ElevationTokens;->getLevel0-D9Ej5fM()F +HSPLandroidx/compose/material3/tokens/ElevationTokens;->getLevel1-D9Ej5fM()F +HSPLandroidx/compose/material3/tokens/ElevationTokens;->getLevel2-D9Ej5fM()F +Landroidx/compose/material3/tokens/FilledButtonTokens; +HSPLandroidx/compose/material3/tokens/FilledButtonTokens;->()V +HSPLandroidx/compose/material3/tokens/FilledButtonTokens;->()V +HSPLandroidx/compose/material3/tokens/FilledButtonTokens;->getContainerColor()Landroidx/compose/material3/tokens/ColorSchemeKeyTokens; +HSPLandroidx/compose/material3/tokens/FilledButtonTokens;->getContainerElevation-D9Ej5fM()F +HSPLandroidx/compose/material3/tokens/FilledButtonTokens;->getContainerShape()Landroidx/compose/material3/tokens/ShapeKeyTokens; +HSPLandroidx/compose/material3/tokens/FilledButtonTokens;->getDisabledContainerColor()Landroidx/compose/material3/tokens/ColorSchemeKeyTokens; +HSPLandroidx/compose/material3/tokens/FilledButtonTokens;->getDisabledContainerElevation-D9Ej5fM()F +HSPLandroidx/compose/material3/tokens/FilledButtonTokens;->getDisabledLabelTextColor()Landroidx/compose/material3/tokens/ColorSchemeKeyTokens; +HSPLandroidx/compose/material3/tokens/FilledButtonTokens;->getFocusContainerElevation-D9Ej5fM()F +HSPLandroidx/compose/material3/tokens/FilledButtonTokens;->getHoverContainerElevation-D9Ej5fM()F +HSPLandroidx/compose/material3/tokens/FilledButtonTokens;->getIconSize-D9Ej5fM()F +HSPLandroidx/compose/material3/tokens/FilledButtonTokens;->getLabelTextColor()Landroidx/compose/material3/tokens/ColorSchemeKeyTokens; +HSPLandroidx/compose/material3/tokens/FilledButtonTokens;->getPressedContainerElevation-D9Ej5fM()F +Landroidx/compose/material3/tokens/IconButtonTokens; +HSPLandroidx/compose/material3/tokens/IconButtonTokens;->()V +HSPLandroidx/compose/material3/tokens/IconButtonTokens;->()V +HSPLandroidx/compose/material3/tokens/IconButtonTokens;->getIconSize-D9Ej5fM()F +HSPLandroidx/compose/material3/tokens/IconButtonTokens;->getStateLayerShape()Landroidx/compose/material3/tokens/ShapeKeyTokens; +HSPLandroidx/compose/material3/tokens/IconButtonTokens;->getStateLayerSize-D9Ej5fM()F +Landroidx/compose/material3/tokens/LinearProgressIndicatorTokens; +HSPLandroidx/compose/material3/tokens/LinearProgressIndicatorTokens;->()V +HSPLandroidx/compose/material3/tokens/LinearProgressIndicatorTokens;->()V +HSPLandroidx/compose/material3/tokens/LinearProgressIndicatorTokens;->getTrackHeight-D9Ej5fM()F +Landroidx/compose/material3/tokens/NavigationBarTokens; +HSPLandroidx/compose/material3/tokens/NavigationBarTokens;->()V +HSPLandroidx/compose/material3/tokens/NavigationBarTokens;->()V +HSPLandroidx/compose/material3/tokens/NavigationBarTokens;->getActiveIconColor()Landroidx/compose/material3/tokens/ColorSchemeKeyTokens; +HSPLandroidx/compose/material3/tokens/NavigationBarTokens;->getActiveIndicatorColor()Landroidx/compose/material3/tokens/ColorSchemeKeyTokens; +HSPLandroidx/compose/material3/tokens/NavigationBarTokens;->getActiveIndicatorHeight-D9Ej5fM()F +HSPLandroidx/compose/material3/tokens/NavigationBarTokens;->getActiveIndicatorShape()Landroidx/compose/material3/tokens/ShapeKeyTokens; +HSPLandroidx/compose/material3/tokens/NavigationBarTokens;->getActiveIndicatorWidth-D9Ej5fM()F +HSPLandroidx/compose/material3/tokens/NavigationBarTokens;->getActiveLabelTextColor()Landroidx/compose/material3/tokens/ColorSchemeKeyTokens; +HSPLandroidx/compose/material3/tokens/NavigationBarTokens;->getContainerHeight-D9Ej5fM()F +HSPLandroidx/compose/material3/tokens/NavigationBarTokens;->getIconSize-D9Ej5fM()F +HSPLandroidx/compose/material3/tokens/NavigationBarTokens;->getInactiveIconColor()Landroidx/compose/material3/tokens/ColorSchemeKeyTokens; +HSPLandroidx/compose/material3/tokens/NavigationBarTokens;->getInactiveLabelTextColor()Landroidx/compose/material3/tokens/ColorSchemeKeyTokens; +HSPLandroidx/compose/material3/tokens/NavigationBarTokens;->getLabelTextFont()Landroidx/compose/material3/tokens/TypographyKeyTokens; +Landroidx/compose/material3/tokens/PaletteTokens; +HSPLandroidx/compose/material3/tokens/PaletteTokens;->()V +HSPLandroidx/compose/material3/tokens/PaletteTokens;->()V +HSPLandroidx/compose/material3/tokens/PaletteTokens;->getError10-0d7_KjU()J +HSPLandroidx/compose/material3/tokens/PaletteTokens;->getError100-0d7_KjU()J +HSPLandroidx/compose/material3/tokens/PaletteTokens;->getError40-0d7_KjU()J +HSPLandroidx/compose/material3/tokens/PaletteTokens;->getError90-0d7_KjU()J +HSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral0-0d7_KjU()J +HSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral10-0d7_KjU()J +HSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral20-0d7_KjU()J +HSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral95-0d7_KjU()J +HSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutral99-0d7_KjU()J +HSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutralVariant30-0d7_KjU()J +HSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutralVariant50-0d7_KjU()J +HSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutralVariant80-0d7_KjU()J +HSPLandroidx/compose/material3/tokens/PaletteTokens;->getNeutralVariant90-0d7_KjU()J +HSPLandroidx/compose/material3/tokens/PaletteTokens;->getPrimary10-0d7_KjU()J +HSPLandroidx/compose/material3/tokens/PaletteTokens;->getPrimary100-0d7_KjU()J +HSPLandroidx/compose/material3/tokens/PaletteTokens;->getPrimary40-0d7_KjU()J +HSPLandroidx/compose/material3/tokens/PaletteTokens;->getPrimary80-0d7_KjU()J +HSPLandroidx/compose/material3/tokens/PaletteTokens;->getPrimary90-0d7_KjU()J +HSPLandroidx/compose/material3/tokens/PaletteTokens;->getSecondary10-0d7_KjU()J +HSPLandroidx/compose/material3/tokens/PaletteTokens;->getSecondary100-0d7_KjU()J +HSPLandroidx/compose/material3/tokens/PaletteTokens;->getSecondary40-0d7_KjU()J +HSPLandroidx/compose/material3/tokens/PaletteTokens;->getSecondary90-0d7_KjU()J +HSPLandroidx/compose/material3/tokens/PaletteTokens;->getTertiary10-0d7_KjU()J +HSPLandroidx/compose/material3/tokens/PaletteTokens;->getTertiary100-0d7_KjU()J +HSPLandroidx/compose/material3/tokens/PaletteTokens;->getTertiary40-0d7_KjU()J +HSPLandroidx/compose/material3/tokens/PaletteTokens;->getTertiary90-0d7_KjU()J +Landroidx/compose/material3/tokens/ShapeKeyTokens; +HSPLandroidx/compose/material3/tokens/ShapeKeyTokens;->$values()[Landroidx/compose/material3/tokens/ShapeKeyTokens; +HSPLandroidx/compose/material3/tokens/ShapeKeyTokens;->()V +HSPLandroidx/compose/material3/tokens/ShapeKeyTokens;->(Ljava/lang/String;I)V +HSPLandroidx/compose/material3/tokens/ShapeKeyTokens;->values()[Landroidx/compose/material3/tokens/ShapeKeyTokens; +Landroidx/compose/material3/tokens/ShapeTokens; +HSPLandroidx/compose/material3/tokens/ShapeTokens;->()V +HSPLandroidx/compose/material3/tokens/ShapeTokens;->()V +HSPLandroidx/compose/material3/tokens/ShapeTokens;->getCornerExtraLarge()Landroidx/compose/foundation/shape/RoundedCornerShape; +HSPLandroidx/compose/material3/tokens/ShapeTokens;->getCornerExtraSmall()Landroidx/compose/foundation/shape/RoundedCornerShape; +HSPLandroidx/compose/material3/tokens/ShapeTokens;->getCornerLarge()Landroidx/compose/foundation/shape/RoundedCornerShape; +HSPLandroidx/compose/material3/tokens/ShapeTokens;->getCornerMedium()Landroidx/compose/foundation/shape/RoundedCornerShape; +HSPLandroidx/compose/material3/tokens/ShapeTokens;->getCornerSmall()Landroidx/compose/foundation/shape/RoundedCornerShape; +Landroidx/compose/material3/tokens/TypeScaleTokens; +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->()V +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->()V +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getBodyLargeFont()Landroidx/compose/ui/text/font/GenericFontFamily; +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getBodyLargeLineHeight-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getBodyLargeSize-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getBodyLargeTracking-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getBodyLargeWeight()Landroidx/compose/ui/text/font/FontWeight; +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getBodyMediumFont()Landroidx/compose/ui/text/font/GenericFontFamily; +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getBodyMediumLineHeight-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getBodyMediumSize-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getBodyMediumTracking-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getBodyMediumWeight()Landroidx/compose/ui/text/font/FontWeight; +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getBodySmallFont()Landroidx/compose/ui/text/font/GenericFontFamily; +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getBodySmallLineHeight-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getBodySmallSize-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getBodySmallTracking-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getBodySmallWeight()Landroidx/compose/ui/text/font/FontWeight; +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getDisplayLargeFont()Landroidx/compose/ui/text/font/GenericFontFamily; +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getDisplayLargeLineHeight-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getDisplayLargeSize-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getDisplayLargeTracking-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getDisplayLargeWeight()Landroidx/compose/ui/text/font/FontWeight; +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getDisplayMediumFont()Landroidx/compose/ui/text/font/GenericFontFamily; +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getDisplayMediumLineHeight-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getDisplayMediumSize-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getDisplayMediumTracking-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getDisplayMediumWeight()Landroidx/compose/ui/text/font/FontWeight; +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getDisplaySmallFont()Landroidx/compose/ui/text/font/GenericFontFamily; +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getDisplaySmallLineHeight-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getDisplaySmallSize-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getDisplaySmallTracking-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getDisplaySmallWeight()Landroidx/compose/ui/text/font/FontWeight; +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getHeadlineLargeFont()Landroidx/compose/ui/text/font/GenericFontFamily; +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getHeadlineLargeLineHeight-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getHeadlineLargeSize-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getHeadlineLargeTracking-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getHeadlineLargeWeight()Landroidx/compose/ui/text/font/FontWeight; +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getHeadlineMediumFont()Landroidx/compose/ui/text/font/GenericFontFamily; +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getHeadlineMediumLineHeight-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getHeadlineMediumSize-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getHeadlineMediumTracking-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getHeadlineMediumWeight()Landroidx/compose/ui/text/font/FontWeight; +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getHeadlineSmallFont()Landroidx/compose/ui/text/font/GenericFontFamily; +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getHeadlineSmallLineHeight-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getHeadlineSmallSize-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getHeadlineSmallTracking-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getHeadlineSmallWeight()Landroidx/compose/ui/text/font/FontWeight; +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getLabelLargeFont()Landroidx/compose/ui/text/font/GenericFontFamily; +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getLabelLargeLineHeight-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getLabelLargeSize-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getLabelLargeTracking-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getLabelLargeWeight()Landroidx/compose/ui/text/font/FontWeight; +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getLabelMediumFont()Landroidx/compose/ui/text/font/GenericFontFamily; +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getLabelMediumLineHeight-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getLabelMediumSize-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getLabelMediumTracking-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getLabelMediumWeight()Landroidx/compose/ui/text/font/FontWeight; +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getLabelSmallFont()Landroidx/compose/ui/text/font/GenericFontFamily; +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getLabelSmallLineHeight-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getLabelSmallSize-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getLabelSmallTracking-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getLabelSmallWeight()Landroidx/compose/ui/text/font/FontWeight; +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getTitleLargeFont()Landroidx/compose/ui/text/font/GenericFontFamily; +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getTitleLargeLineHeight-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getTitleLargeSize-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getTitleLargeTracking-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getTitleLargeWeight()Landroidx/compose/ui/text/font/FontWeight; +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getTitleMediumFont()Landroidx/compose/ui/text/font/GenericFontFamily; +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getTitleMediumLineHeight-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getTitleMediumSize-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getTitleMediumTracking-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getTitleMediumWeight()Landroidx/compose/ui/text/font/FontWeight; +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getTitleSmallFont()Landroidx/compose/ui/text/font/GenericFontFamily; +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getTitleSmallLineHeight-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getTitleSmallSize-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getTitleSmallTracking-XSAIIZE()J +HSPLandroidx/compose/material3/tokens/TypeScaleTokens;->getTitleSmallWeight()Landroidx/compose/ui/text/font/FontWeight; +Landroidx/compose/material3/tokens/TypefaceTokens; +HSPLandroidx/compose/material3/tokens/TypefaceTokens;->()V +HSPLandroidx/compose/material3/tokens/TypefaceTokens;->()V +HSPLandroidx/compose/material3/tokens/TypefaceTokens;->getBrand()Landroidx/compose/ui/text/font/GenericFontFamily; +HSPLandroidx/compose/material3/tokens/TypefaceTokens;->getPlain()Landroidx/compose/ui/text/font/GenericFontFamily; +HSPLandroidx/compose/material3/tokens/TypefaceTokens;->getWeightMedium()Landroidx/compose/ui/text/font/FontWeight; +HSPLandroidx/compose/material3/tokens/TypefaceTokens;->getWeightRegular()Landroidx/compose/ui/text/font/FontWeight; +Landroidx/compose/material3/tokens/TypographyKeyTokens; +HSPLandroidx/compose/material3/tokens/TypographyKeyTokens;->$values()[Landroidx/compose/material3/tokens/TypographyKeyTokens; +HSPLandroidx/compose/material3/tokens/TypographyKeyTokens;->()V +HSPLandroidx/compose/material3/tokens/TypographyKeyTokens;->(Ljava/lang/String;I)V +HSPLandroidx/compose/material3/tokens/TypographyKeyTokens;->values()[Landroidx/compose/material3/tokens/TypographyKeyTokens; +Landroidx/compose/material3/tokens/TypographyTokens; +HSPLandroidx/compose/material3/tokens/TypographyTokens;->()V +HSPLandroidx/compose/material3/tokens/TypographyTokens;->()V +HSPLandroidx/compose/material3/tokens/TypographyTokens;->getBodyLarge()Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/material3/tokens/TypographyTokens;->getBodyMedium()Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/material3/tokens/TypographyTokens;->getBodySmall()Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/material3/tokens/TypographyTokens;->getDisplayLarge()Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/material3/tokens/TypographyTokens;->getDisplayMedium()Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/material3/tokens/TypographyTokens;->getDisplaySmall()Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/material3/tokens/TypographyTokens;->getHeadlineLarge()Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/material3/tokens/TypographyTokens;->getHeadlineMedium()Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/material3/tokens/TypographyTokens;->getHeadlineSmall()Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/material3/tokens/TypographyTokens;->getLabelLarge()Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/material3/tokens/TypographyTokens;->getLabelMedium()Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/material3/tokens/TypographyTokens;->getLabelSmall()Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/material3/tokens/TypographyTokens;->getTitleLarge()Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/material3/tokens/TypographyTokens;->getTitleMedium()Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/material3/tokens/TypographyTokens;->getTitleSmall()Landroidx/compose/ui/text/TextStyle; +Landroidx/compose/material3/tokens/TypographyTokensKt; +HSPLandroidx/compose/material3/tokens/TypographyTokensKt;->()V +HSPLandroidx/compose/material3/tokens/TypographyTokensKt;->getDefaultTextStyle()Landroidx/compose/ui/text/TextStyle; +Landroidx/compose/runtime/AbstractApplier; +HSPLandroidx/compose/runtime/AbstractApplier;->()V +HSPLandroidx/compose/runtime/AbstractApplier;->(Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/AbstractApplier;->clear()V +HSPLandroidx/compose/runtime/AbstractApplier;->down(Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/AbstractApplier;->getCurrent()Ljava/lang/Object; +HSPLandroidx/compose/runtime/AbstractApplier;->getRoot()Ljava/lang/Object; +HSPLandroidx/compose/runtime/AbstractApplier;->setCurrent(Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/AbstractApplier;->up()V +Landroidx/compose/runtime/ActualAndroid_androidKt; +HSPLandroidx/compose/runtime/ActualAndroid_androidKt;->()V +HSPLandroidx/compose/runtime/ActualAndroid_androidKt;->createSnapshotMutableFloatState(F)Landroidx/compose/runtime/MutableFloatState; +HSPLandroidx/compose/runtime/ActualAndroid_androidKt;->createSnapshotMutableIntState(I)Landroidx/compose/runtime/MutableIntState; +HSPLandroidx/compose/runtime/ActualAndroid_androidKt;->createSnapshotMutableLongState(J)Landroidx/compose/runtime/MutableLongState; +HSPLandroidx/compose/runtime/ActualAndroid_androidKt;->createSnapshotMutableState(Ljava/lang/Object;Landroidx/compose/runtime/SnapshotMutationPolicy;)Landroidx/compose/runtime/snapshots/SnapshotMutableState; +Landroidx/compose/runtime/ActualAndroid_androidKt$DefaultMonotonicFrameClock$2; +HSPLandroidx/compose/runtime/ActualAndroid_androidKt$DefaultMonotonicFrameClock$2;->()V +HSPLandroidx/compose/runtime/ActualAndroid_androidKt$DefaultMonotonicFrameClock$2;->()V +Landroidx/compose/runtime/ActualJvm_jvmKt; +HSPLandroidx/compose/runtime/ActualJvm_jvmKt;->identityHashCode(Ljava/lang/Object;)I +HSPLandroidx/compose/runtime/ActualJvm_jvmKt;->invokeComposable(Landroidx/compose/runtime/Composer;Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/runtime/ActualJvm_jvmKt;->invokeComposableForResult(Landroidx/compose/runtime/Composer;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; +Landroidx/compose/runtime/Anchor; +HSPLandroidx/compose/runtime/Anchor;->(I)V +HSPLandroidx/compose/runtime/Anchor;->getLocation$runtime_release()I +HSPLandroidx/compose/runtime/Anchor;->getValid()Z +HSPLandroidx/compose/runtime/Anchor;->setLocation$runtime_release(I)V +HSPLandroidx/compose/runtime/Anchor;->toIndexFor(Landroidx/compose/runtime/SlotTable;)I +HSPLandroidx/compose/runtime/Anchor;->toIndexFor(Landroidx/compose/runtime/SlotWriter;)I +Landroidx/compose/runtime/Applier; +HSPLandroidx/compose/runtime/Applier;->onBeginChanges()V +HSPLandroidx/compose/runtime/Applier;->onEndChanges()V +Landroidx/compose/runtime/AtomicInt; +HSPLandroidx/compose/runtime/AtomicInt;->(I)V +HSPLandroidx/compose/runtime/AtomicInt;->add(I)I +Landroidx/compose/runtime/BroadcastFrameClock; +HSPLandroidx/compose/runtime/BroadcastFrameClock;->()V +HSPLandroidx/compose/runtime/BroadcastFrameClock;->(Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/runtime/BroadcastFrameClock;->access$getAwaiters$p(Landroidx/compose/runtime/BroadcastFrameClock;)Ljava/util/List; +HSPLandroidx/compose/runtime/BroadcastFrameClock;->access$getFailureCause$p(Landroidx/compose/runtime/BroadcastFrameClock;)Ljava/lang/Throwable; +HSPLandroidx/compose/runtime/BroadcastFrameClock;->access$getLock$p(Landroidx/compose/runtime/BroadcastFrameClock;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/BroadcastFrameClock;->access$getOnNewAwaiters$p(Landroidx/compose/runtime/BroadcastFrameClock;)Lkotlin/jvm/functions/Function0; +HSPLandroidx/compose/runtime/BroadcastFrameClock;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/BroadcastFrameClock;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; +HSPLandroidx/compose/runtime/BroadcastFrameClock;->getHasAwaiters()Z +HSPLandroidx/compose/runtime/BroadcastFrameClock;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext; +HSPLandroidx/compose/runtime/BroadcastFrameClock;->sendFrame(J)V +HSPLandroidx/compose/runtime/BroadcastFrameClock;->withFrameNanos(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/compose/runtime/BroadcastFrameClock$FrameAwaiter; +HSPLandroidx/compose/runtime/BroadcastFrameClock$FrameAwaiter;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/runtime/BroadcastFrameClock$FrameAwaiter;->resume(J)V +Landroidx/compose/runtime/BroadcastFrameClock$withFrameNanos$2$1; +HSPLandroidx/compose/runtime/BroadcastFrameClock$withFrameNanos$2$1;->(Landroidx/compose/runtime/BroadcastFrameClock;Lkotlin/jvm/internal/Ref$ObjectRef;)V +HSPLandroidx/compose/runtime/BroadcastFrameClock$withFrameNanos$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/BroadcastFrameClock$withFrameNanos$2$1;->invoke(Ljava/lang/Throwable;)V +Landroidx/compose/runtime/ComposableSingletons$CompositionKt; +HSPLandroidx/compose/runtime/ComposableSingletons$CompositionKt;->()V +HSPLandroidx/compose/runtime/ComposableSingletons$CompositionKt;->()V +HSPLandroidx/compose/runtime/ComposableSingletons$CompositionKt;->getLambda-1$runtime_release()Lkotlin/jvm/functions/Function2; +HSPLandroidx/compose/runtime/ComposableSingletons$CompositionKt;->getLambda-2$runtime_release()Lkotlin/jvm/functions/Function2; +Landroidx/compose/runtime/ComposableSingletons$CompositionKt$lambda-1$1; +HSPLandroidx/compose/runtime/ComposableSingletons$CompositionKt$lambda-1$1;->()V +HSPLandroidx/compose/runtime/ComposableSingletons$CompositionKt$lambda-1$1;->()V +Landroidx/compose/runtime/ComposableSingletons$CompositionKt$lambda-2$1; +HSPLandroidx/compose/runtime/ComposableSingletons$CompositionKt$lambda-2$1;->()V +HSPLandroidx/compose/runtime/ComposableSingletons$CompositionKt$lambda-2$1;->()V +Landroidx/compose/runtime/ComposablesKt; +HSPLandroidx/compose/runtime/ComposablesKt;->getCurrentCompositeKeyHash(Landroidx/compose/runtime/Composer;I)I +HSPLandroidx/compose/runtime/ComposablesKt;->getCurrentRecomposeScope(Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/RecomposeScope; +HSPLandroidx/compose/runtime/ComposablesKt;->rememberCompositionContext(Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/CompositionContext; +Landroidx/compose/runtime/ComposeNodeLifecycleCallback; +Landroidx/compose/runtime/Composer; +HSPLandroidx/compose/runtime/Composer;->()V +Landroidx/compose/runtime/Composer$Companion; +HSPLandroidx/compose/runtime/Composer$Companion;->()V +HSPLandroidx/compose/runtime/Composer$Companion;->()V +HSPLandroidx/compose/runtime/Composer$Companion;->getEmpty()Ljava/lang/Object; +Landroidx/compose/runtime/Composer$Companion$Empty$1; +HSPLandroidx/compose/runtime/Composer$Companion$Empty$1;->()V +Landroidx/compose/runtime/ComposerImpl; +HSPLandroidx/compose/runtime/ComposerImpl;->(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/CompositionContext;Landroidx/compose/runtime/SlotTable;Ljava/util/Set;Ljava/util/List;Ljava/util/List;Landroidx/compose/runtime/ControlledComposition;)V +HSPLandroidx/compose/runtime/ComposerImpl;->access$getChildrenComposing$p(Landroidx/compose/runtime/ComposerImpl;)I +HSPLandroidx/compose/runtime/ComposerImpl;->access$getParentContext$p(Landroidx/compose/runtime/ComposerImpl;)Landroidx/compose/runtime/CompositionContext; +HSPLandroidx/compose/runtime/ComposerImpl;->access$getReader$p(Landroidx/compose/runtime/ComposerImpl;)Landroidx/compose/runtime/SlotReader; +HSPLandroidx/compose/runtime/ComposerImpl;->access$setChildrenComposing$p(Landroidx/compose/runtime/ComposerImpl;I)V +HSPLandroidx/compose/runtime/ComposerImpl;->addRecomposeScope()V +HSPLandroidx/compose/runtime/ComposerImpl;->apply(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/runtime/ComposerImpl;->buildContext()Landroidx/compose/runtime/CompositionContext; +HSPLandroidx/compose/runtime/ComposerImpl;->changed(F)Z +HSPLandroidx/compose/runtime/ComposerImpl;->changed(I)Z +HSPLandroidx/compose/runtime/ComposerImpl;->changed(J)Z +HSPLandroidx/compose/runtime/ComposerImpl;->changed(Ljava/lang/Object;)Z +HSPLandroidx/compose/runtime/ComposerImpl;->changed(Z)Z +HSPLandroidx/compose/runtime/ComposerImpl;->changedInstance(Ljava/lang/Object;)Z +HSPLandroidx/compose/runtime/ComposerImpl;->changesApplied$runtime_release()V +HSPLandroidx/compose/runtime/ComposerImpl;->cleanUpCompose()V +HSPLandroidx/compose/runtime/ComposerImpl;->clearUpdatedNodeCounts()V +HSPLandroidx/compose/runtime/ComposerImpl;->composeContent$runtime_release(Landroidx/compose/runtime/collection/IdentityArrayMap;Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/runtime/ComposerImpl;->compoundKeyOf(III)I +HSPLandroidx/compose/runtime/ComposerImpl;->consume(Landroidx/compose/runtime/CompositionLocal;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/ComposerImpl;->createFreshInsertTable()V +HSPLandroidx/compose/runtime/ComposerImpl;->createNode(Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/runtime/ComposerImpl;->currentCompositionLocalScope()Landroidx/compose/runtime/PersistentCompositionLocalMap; +HSPLandroidx/compose/runtime/ComposerImpl;->currentCompositionLocalScope(I)Landroidx/compose/runtime/PersistentCompositionLocalMap; +HSPLandroidx/compose/runtime/ComposerImpl;->deactivateToEndGroup(Z)V +HSPLandroidx/compose/runtime/ComposerImpl;->disableReusing()V +HSPLandroidx/compose/runtime/ComposerImpl;->dispose$runtime_release()V +HSPLandroidx/compose/runtime/ComposerImpl;->doCompose(Landroidx/compose/runtime/collection/IdentityArrayMap;Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/runtime/ComposerImpl;->doRecordDownsFor(II)V +HSPLandroidx/compose/runtime/ComposerImpl;->enableReusing()V +HSPLandroidx/compose/runtime/ComposerImpl;->end(Z)V +HSPLandroidx/compose/runtime/ComposerImpl;->endDefaults()V +HSPLandroidx/compose/runtime/ComposerImpl;->endGroup()V +HSPLandroidx/compose/runtime/ComposerImpl;->endMovableGroup()V +HSPLandroidx/compose/runtime/ComposerImpl;->endNode()V +HSPLandroidx/compose/runtime/ComposerImpl;->endProviders()V +HSPLandroidx/compose/runtime/ComposerImpl;->endReplaceableGroup()V +HSPLandroidx/compose/runtime/ComposerImpl;->endRestartGroup()Landroidx/compose/runtime/ScopeUpdateScope; +HSPLandroidx/compose/runtime/ComposerImpl;->endReusableGroup()V +HSPLandroidx/compose/runtime/ComposerImpl;->endRoot()V +HSPLandroidx/compose/runtime/ComposerImpl;->ensureWriter()V +HSPLandroidx/compose/runtime/ComposerImpl;->enterGroup(ZLandroidx/compose/runtime/Pending;)V +HSPLandroidx/compose/runtime/ComposerImpl;->exitGroup(IZ)V +HSPLandroidx/compose/runtime/ComposerImpl;->finalizeCompose()V +HSPLandroidx/compose/runtime/ComposerImpl;->getApplier()Landroidx/compose/runtime/Applier; +HSPLandroidx/compose/runtime/ComposerImpl;->getApplyCoroutineContext()Lkotlin/coroutines/CoroutineContext; +HSPLandroidx/compose/runtime/ComposerImpl;->getAreChildrenComposing$runtime_release()Z +HSPLandroidx/compose/runtime/ComposerImpl;->getComposition()Landroidx/compose/runtime/ControlledComposition; +HSPLandroidx/compose/runtime/ComposerImpl;->getCompoundKeyHash()I +HSPLandroidx/compose/runtime/ComposerImpl;->getCurrentCompositionLocalMap()Landroidx/compose/runtime/CompositionLocalMap; +HSPLandroidx/compose/runtime/ComposerImpl;->getCurrentRecomposeScope$runtime_release()Landroidx/compose/runtime/RecomposeScopeImpl; +HSPLandroidx/compose/runtime/ComposerImpl;->getDefaultsInvalid()Z +HSPLandroidx/compose/runtime/ComposerImpl;->getDeferredChanges$runtime_release()Ljava/util/List; +HSPLandroidx/compose/runtime/ComposerImpl;->getInserting()Z +HSPLandroidx/compose/runtime/ComposerImpl;->getNode(Landroidx/compose/runtime/SlotReader;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/ComposerImpl;->getRecomposeScope()Landroidx/compose/runtime/RecomposeScope; +HSPLandroidx/compose/runtime/ComposerImpl;->getSkipping()Z +HSPLandroidx/compose/runtime/ComposerImpl;->groupCompoundKeyPart(Landroidx/compose/runtime/SlotReader;I)I +HSPLandroidx/compose/runtime/ComposerImpl;->insertedGroupVirtualIndex(I)I +HSPLandroidx/compose/runtime/ComposerImpl;->isComposing$runtime_release()Z +HSPLandroidx/compose/runtime/ComposerImpl;->nextSlot()Ljava/lang/Object; +HSPLandroidx/compose/runtime/ComposerImpl;->nodeAt(Landroidx/compose/runtime/SlotReader;I)Ljava/lang/Object; +HSPLandroidx/compose/runtime/ComposerImpl;->nodeIndexOf(IIII)I +HSPLandroidx/compose/runtime/ComposerImpl;->prepareCompose$runtime_release(Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/runtime/ComposerImpl;->realizeDowns()V +HSPLandroidx/compose/runtime/ComposerImpl;->realizeDowns([Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/ComposerImpl;->realizeMovement()V +HSPLandroidx/compose/runtime/ComposerImpl;->realizeOperationLocation$default(Landroidx/compose/runtime/ComposerImpl;ZILjava/lang/Object;)V +HSPLandroidx/compose/runtime/ComposerImpl;->realizeOperationLocation(Z)V +HSPLandroidx/compose/runtime/ComposerImpl;->realizeUps()V +HSPLandroidx/compose/runtime/ComposerImpl;->recompose$runtime_release(Landroidx/compose/runtime/collection/IdentityArrayMap;)Z +HSPLandroidx/compose/runtime/ComposerImpl;->recomposeToGroupEnd()V +HSPLandroidx/compose/runtime/ComposerImpl;->record(Lkotlin/jvm/functions/Function3;)V +HSPLandroidx/compose/runtime/ComposerImpl;->recordApplierOperation(Lkotlin/jvm/functions/Function3;)V +HSPLandroidx/compose/runtime/ComposerImpl;->recordDelete()V +HSPLandroidx/compose/runtime/ComposerImpl;->recordDown(Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/ComposerImpl;->recordEndGroup()V +HSPLandroidx/compose/runtime/ComposerImpl;->recordEndRoot()V +HSPLandroidx/compose/runtime/ComposerImpl;->recordFixup(Lkotlin/jvm/functions/Function3;)V +HSPLandroidx/compose/runtime/ComposerImpl;->recordInsert(Landroidx/compose/runtime/Anchor;)V +HSPLandroidx/compose/runtime/ComposerImpl;->recordInsertUpFixup(Lkotlin/jvm/functions/Function3;)V +HSPLandroidx/compose/runtime/ComposerImpl;->recordReaderMoving(I)V +HSPLandroidx/compose/runtime/ComposerImpl;->recordRemoveNode(II)V +HSPLandroidx/compose/runtime/ComposerImpl;->recordSideEffect(Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/runtime/ComposerImpl;->recordSlotEditing()V +HSPLandroidx/compose/runtime/ComposerImpl;->recordSlotEditingOperation(Lkotlin/jvm/functions/Function3;)V +HSPLandroidx/compose/runtime/ComposerImpl;->recordSlotTableOperation$default(Landroidx/compose/runtime/ComposerImpl;ZLkotlin/jvm/functions/Function3;ILjava/lang/Object;)V +HSPLandroidx/compose/runtime/ComposerImpl;->recordSlotTableOperation(ZLkotlin/jvm/functions/Function3;)V +HSPLandroidx/compose/runtime/ComposerImpl;->recordUp()V +HSPLandroidx/compose/runtime/ComposerImpl;->recordUpsAndDowns(III)V +HSPLandroidx/compose/runtime/ComposerImpl;->recordUsed(Landroidx/compose/runtime/RecomposeScope;)V +HSPLandroidx/compose/runtime/ComposerImpl;->registerInsertUpFixup()V +HSPLandroidx/compose/runtime/ComposerImpl;->rememberedValue()Ljava/lang/Object; +HSPLandroidx/compose/runtime/ComposerImpl;->reportAllMovableContent()V +HSPLandroidx/compose/runtime/ComposerImpl;->reportFreeMovableContent$reportGroup(Landroidx/compose/runtime/ComposerImpl;IZI)I +HSPLandroidx/compose/runtime/ComposerImpl;->reportFreeMovableContent(I)V +HSPLandroidx/compose/runtime/ComposerImpl;->skipCurrentGroup()V +HSPLandroidx/compose/runtime/ComposerImpl;->skipGroup()V +HSPLandroidx/compose/runtime/ComposerImpl;->skipReaderToGroupEnd()V +HSPLandroidx/compose/runtime/ComposerImpl;->skipToGroupEnd()V +HSPLandroidx/compose/runtime/ComposerImpl;->sourceInformation(Ljava/lang/String;)V +HSPLandroidx/compose/runtime/ComposerImpl;->sourceInformationMarkerEnd()V +HSPLandroidx/compose/runtime/ComposerImpl;->sourceInformationMarkerStart(ILjava/lang/String;)V +HSPLandroidx/compose/runtime/ComposerImpl;->start-BaiHCIY(ILjava/lang/Object;ILjava/lang/Object;)V +HSPLandroidx/compose/runtime/ComposerImpl;->startDefaults()V +HSPLandroidx/compose/runtime/ComposerImpl;->startGroup(I)V +HSPLandroidx/compose/runtime/ComposerImpl;->startGroup(ILjava/lang/Object;)V +HSPLandroidx/compose/runtime/ComposerImpl;->startMovableGroup(ILjava/lang/Object;)V +HSPLandroidx/compose/runtime/ComposerImpl;->startNode()V +HSPLandroidx/compose/runtime/ComposerImpl;->startProviders([Landroidx/compose/runtime/ProvidedValue;)V +HSPLandroidx/compose/runtime/ComposerImpl;->startReaderGroup(ZLjava/lang/Object;)V +HSPLandroidx/compose/runtime/ComposerImpl;->startReplaceableGroup(I)V +HSPLandroidx/compose/runtime/ComposerImpl;->startRestartGroup(I)Landroidx/compose/runtime/Composer; +HSPLandroidx/compose/runtime/ComposerImpl;->startReusableGroup(ILjava/lang/Object;)V +HSPLandroidx/compose/runtime/ComposerImpl;->startReusableNode()V +HSPLandroidx/compose/runtime/ComposerImpl;->startRoot()V +HSPLandroidx/compose/runtime/ComposerImpl;->tryImminentInvalidation$runtime_release(Landroidx/compose/runtime/RecomposeScopeImpl;Ljava/lang/Object;)Z +HSPLandroidx/compose/runtime/ComposerImpl;->updateCompoundKeyWhenWeEnterGroup(ILjava/lang/Object;Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/ComposerImpl;->updateCompoundKeyWhenWeEnterGroupKeyHash(I)V +HSPLandroidx/compose/runtime/ComposerImpl;->updateCompoundKeyWhenWeExitGroup(ILjava/lang/Object;Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/ComposerImpl;->updateCompoundKeyWhenWeExitGroupKeyHash(I)V +HSPLandroidx/compose/runtime/ComposerImpl;->updateNodeCount(II)V +HSPLandroidx/compose/runtime/ComposerImpl;->updateNodeCountOverrides(II)V +HSPLandroidx/compose/runtime/ComposerImpl;->updateProviderMapGroup(Landroidx/compose/runtime/PersistentCompositionLocalMap;Landroidx/compose/runtime/PersistentCompositionLocalMap;)Landroidx/compose/runtime/PersistentCompositionLocalMap; +HSPLandroidx/compose/runtime/ComposerImpl;->updateRememberedValue(Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/ComposerImpl;->updateValue(Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/ComposerImpl;->updatedNodeCount(I)I +HSPLandroidx/compose/runtime/ComposerImpl;->useNode()V +HSPLandroidx/compose/runtime/ComposerImpl;->validateNodeExpected()V +HSPLandroidx/compose/runtime/ComposerImpl;->validateNodeNotExpected()V +Landroidx/compose/runtime/ComposerImpl$CompositionContextHolder; +HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextHolder;->(Landroidx/compose/runtime/ComposerImpl$CompositionContextImpl;)V +HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextHolder;->getRef()Landroidx/compose/runtime/ComposerImpl$CompositionContextImpl; +HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextHolder;->onForgotten()V +HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextHolder;->onRemembered()V +Landroidx/compose/runtime/ComposerImpl$CompositionContextImpl; +HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->(Landroidx/compose/runtime/ComposerImpl;IZ)V +HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->composeInitial$runtime_release(Landroidx/compose/runtime/ControlledComposition;Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->dispose()V +HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->doneComposing$runtime_release()V +HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getCollectingParameterInformation$runtime_release()Z +HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getComposers()Ljava/util/Set; +HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getCompositionLocalScope$runtime_release()Landroidx/compose/runtime/PersistentCompositionLocalMap; +HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getCompositionLocalScope()Landroidx/compose/runtime/PersistentCompositionLocalMap; +HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getCompoundHashKey$runtime_release()I +HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->getEffectCoroutineContext()Lkotlin/coroutines/CoroutineContext; +HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->invalidate$runtime_release(Landroidx/compose/runtime/ControlledComposition;)V +HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->registerComposer$runtime_release(Landroidx/compose/runtime/Composer;)V +HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->setCompositionLocalScope(Landroidx/compose/runtime/PersistentCompositionLocalMap;)V +HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->startComposing$runtime_release()V +HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->unregisterComposer$runtime_release(Landroidx/compose/runtime/Composer;)V +HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->unregisterComposition$runtime_release(Landroidx/compose/runtime/ControlledComposition;)V +HSPLandroidx/compose/runtime/ComposerImpl$CompositionContextImpl;->updateCompositionLocalScope(Landroidx/compose/runtime/PersistentCompositionLocalMap;)V +Landroidx/compose/runtime/ComposerImpl$apply$operation$1; +HSPLandroidx/compose/runtime/ComposerImpl$apply$operation$1;->(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/ComposerImpl$apply$operation$1;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V +HSPLandroidx/compose/runtime/ComposerImpl$apply$operation$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/ComposerImpl$createNode$2; +HSPLandroidx/compose/runtime/ComposerImpl$createNode$2;->(Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Anchor;I)V +HSPLandroidx/compose/runtime/ComposerImpl$createNode$2;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V +HSPLandroidx/compose/runtime/ComposerImpl$createNode$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/ComposerImpl$createNode$3; +HSPLandroidx/compose/runtime/ComposerImpl$createNode$3;->(Landroidx/compose/runtime/Anchor;I)V +HSPLandroidx/compose/runtime/ComposerImpl$createNode$3;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V +HSPLandroidx/compose/runtime/ComposerImpl$createNode$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/ComposerImpl$deactivateToEndGroup$2; +HSPLandroidx/compose/runtime/ComposerImpl$deactivateToEndGroup$2;->(Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/ComposerImpl$deactivateToEndGroup$2;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V +HSPLandroidx/compose/runtime/ComposerImpl$deactivateToEndGroup$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/ComposerImpl$deactivateToEndGroup$3; +HSPLandroidx/compose/runtime/ComposerImpl$deactivateToEndGroup$3;->(Landroidx/compose/runtime/ComposerImpl;I)V +HSPLandroidx/compose/runtime/ComposerImpl$deactivateToEndGroup$3;->invoke(ILjava/lang/Object;)V +HSPLandroidx/compose/runtime/ComposerImpl$deactivateToEndGroup$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/ComposerImpl$deactivateToEndGroup$3$1; +HSPLandroidx/compose/runtime/ComposerImpl$deactivateToEndGroup$3$1;->(Ljava/lang/Object;I)V +HSPLandroidx/compose/runtime/ComposerImpl$deactivateToEndGroup$3$1;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V +HSPLandroidx/compose/runtime/ComposerImpl$deactivateToEndGroup$3$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/ComposerImpl$deactivateToEndGroup$3$2; +HSPLandroidx/compose/runtime/ComposerImpl$deactivateToEndGroup$3$2;->(Ljava/lang/Object;I)V +HSPLandroidx/compose/runtime/ComposerImpl$deactivateToEndGroup$3$2;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V +HSPLandroidx/compose/runtime/ComposerImpl$deactivateToEndGroup$3$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/ComposerImpl$derivedStateObserver$1; +HSPLandroidx/compose/runtime/ComposerImpl$derivedStateObserver$1;->(Landroidx/compose/runtime/ComposerImpl;)V +HSPLandroidx/compose/runtime/ComposerImpl$derivedStateObserver$1;->done(Landroidx/compose/runtime/DerivedState;)V +HSPLandroidx/compose/runtime/ComposerImpl$derivedStateObserver$1;->start(Landroidx/compose/runtime/DerivedState;)V +Landroidx/compose/runtime/ComposerImpl$doCompose$lambda$38$$inlined$sortBy$1; +HSPLandroidx/compose/runtime/ComposerImpl$doCompose$lambda$38$$inlined$sortBy$1;->()V +HSPLandroidx/compose/runtime/ComposerImpl$doCompose$lambda$38$$inlined$sortBy$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I +Landroidx/compose/runtime/ComposerImpl$endRestartGroup$1$1; +HSPLandroidx/compose/runtime/ComposerImpl$endRestartGroup$1$1;->(Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/ComposerImpl;)V +HSPLandroidx/compose/runtime/ComposerImpl$endRestartGroup$1$1;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V +HSPLandroidx/compose/runtime/ComposerImpl$endRestartGroup$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/ComposerImpl$realizeDowns$1; +HSPLandroidx/compose/runtime/ComposerImpl$realizeDowns$1;->([Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/ComposerImpl$realizeDowns$1;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V +HSPLandroidx/compose/runtime/ComposerImpl$realizeDowns$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/ComposerImpl$realizeMovement$1; +HSPLandroidx/compose/runtime/ComposerImpl$realizeMovement$1;->(II)V +HSPLandroidx/compose/runtime/ComposerImpl$realizeMovement$1;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V +HSPLandroidx/compose/runtime/ComposerImpl$realizeMovement$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/ComposerImpl$realizeMovement$2; +Landroidx/compose/runtime/ComposerImpl$realizeOperationLocation$2; +HSPLandroidx/compose/runtime/ComposerImpl$realizeOperationLocation$2;->(I)V +HSPLandroidx/compose/runtime/ComposerImpl$realizeOperationLocation$2;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V +HSPLandroidx/compose/runtime/ComposerImpl$realizeOperationLocation$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/ComposerImpl$realizeUps$1; +HSPLandroidx/compose/runtime/ComposerImpl$realizeUps$1;->(I)V +HSPLandroidx/compose/runtime/ComposerImpl$realizeUps$1;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V +HSPLandroidx/compose/runtime/ComposerImpl$realizeUps$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/ComposerImpl$recordInsert$1; +HSPLandroidx/compose/runtime/ComposerImpl$recordInsert$1;->(Landroidx/compose/runtime/SlotTable;Landroidx/compose/runtime/Anchor;)V +HSPLandroidx/compose/runtime/ComposerImpl$recordInsert$1;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V +HSPLandroidx/compose/runtime/ComposerImpl$recordInsert$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/ComposerImpl$recordInsert$2; +HSPLandroidx/compose/runtime/ComposerImpl$recordInsert$2;->(Landroidx/compose/runtime/SlotTable;Landroidx/compose/runtime/Anchor;Ljava/util/List;)V +HSPLandroidx/compose/runtime/ComposerImpl$recordInsert$2;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V +HSPLandroidx/compose/runtime/ComposerImpl$recordInsert$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/ComposerImpl$recordSideEffect$1; +HSPLandroidx/compose/runtime/ComposerImpl$recordSideEffect$1;->(Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/runtime/ComposerImpl$recordSideEffect$1;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V +HSPLandroidx/compose/runtime/ComposerImpl$recordSideEffect$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/ComposerImpl$recordSlotEditing$1; +HSPLandroidx/compose/runtime/ComposerImpl$recordSlotEditing$1;->(Landroidx/compose/runtime/Anchor;)V +HSPLandroidx/compose/runtime/ComposerImpl$recordSlotEditing$1;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V +HSPLandroidx/compose/runtime/ComposerImpl$recordSlotEditing$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/ComposerImpl$start$2; +HSPLandroidx/compose/runtime/ComposerImpl$start$2;->(I)V +HSPLandroidx/compose/runtime/ComposerImpl$start$2;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V +HSPLandroidx/compose/runtime/ComposerImpl$start$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/ComposerImpl$startProviders$currentProviders$1; +HSPLandroidx/compose/runtime/ComposerImpl$startProviders$currentProviders$1;->([Landroidx/compose/runtime/ProvidedValue;Landroidx/compose/runtime/PersistentCompositionLocalMap;)V +HSPLandroidx/compose/runtime/ComposerImpl$startProviders$currentProviders$1;->invoke(Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/PersistentCompositionLocalMap; +HSPLandroidx/compose/runtime/ComposerImpl$startProviders$currentProviders$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/ComposerImpl$startReaderGroup$1; +PLandroidx/compose/runtime/ComposerImpl$startReaderGroup$1;->(Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/ComposerImpl$startReaderGroup$1;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V +HSPLandroidx/compose/runtime/ComposerImpl$startReaderGroup$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/ComposerImpl$updateValue$1; +HSPLandroidx/compose/runtime/ComposerImpl$updateValue$1;->(Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/ComposerImpl$updateValue$1;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V +HSPLandroidx/compose/runtime/ComposerImpl$updateValue$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/ComposerImpl$updateValue$2; +HSPLandroidx/compose/runtime/ComposerImpl$updateValue$2;->(Ljava/lang/Object;I)V +HSPLandroidx/compose/runtime/ComposerImpl$updateValue$2;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V +HSPLandroidx/compose/runtime/ComposerImpl$updateValue$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/ComposerKt; +HSPLandroidx/compose/runtime/ComposerKt;->()V +HSPLandroidx/compose/runtime/ComposerKt;->access$asBool(I)Z +HSPLandroidx/compose/runtime/ComposerKt;->access$asInt(Z)I +HSPLandroidx/compose/runtime/ComposerKt;->access$firstInRange(Ljava/util/List;II)Landroidx/compose/runtime/Invalidation; +HSPLandroidx/compose/runtime/ComposerKt;->access$getEndGroupInstance$p()Lkotlin/jvm/functions/Function3; +HSPLandroidx/compose/runtime/ComposerKt;->access$getJoinedKey(Landroidx/compose/runtime/KeyInfo;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/ComposerKt;->access$getRemoveCurrentGroupInstance$p()Lkotlin/jvm/functions/Function3; +HSPLandroidx/compose/runtime/ComposerKt;->access$getStartRootGroup$p()Lkotlin/jvm/functions/Function3; +HSPLandroidx/compose/runtime/ComposerKt;->access$insertIfMissing(Ljava/util/List;ILandroidx/compose/runtime/RecomposeScopeImpl;Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/ComposerKt;->access$multiMap()Ljava/util/HashMap; +HSPLandroidx/compose/runtime/ComposerKt;->access$nearestCommonRootOf(Landroidx/compose/runtime/SlotReader;III)I +HSPLandroidx/compose/runtime/ComposerKt;->access$pop(Ljava/util/HashMap;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/ComposerKt;->access$put(Ljava/util/HashMap;Ljava/lang/Object;Ljava/lang/Object;)Z +HSPLandroidx/compose/runtime/ComposerKt;->access$removeLocation(Ljava/util/List;I)Landroidx/compose/runtime/Invalidation; +HSPLandroidx/compose/runtime/ComposerKt;->access$removeRange(Ljava/util/List;II)V +HSPLandroidx/compose/runtime/ComposerKt;->asBool(I)Z +HSPLandroidx/compose/runtime/ComposerKt;->asInt(Z)I +HSPLandroidx/compose/runtime/ComposerKt;->distanceFrom(Landroidx/compose/runtime/SlotReader;II)I +HSPLandroidx/compose/runtime/ComposerKt;->findInsertLocation(Ljava/util/List;I)I +HSPLandroidx/compose/runtime/ComposerKt;->findLocation(Ljava/util/List;I)I +HSPLandroidx/compose/runtime/ComposerKt;->firstInRange(Ljava/util/List;II)Landroidx/compose/runtime/Invalidation; +HSPLandroidx/compose/runtime/ComposerKt;->getCompositionLocalMap()Ljava/lang/Object; +HSPLandroidx/compose/runtime/ComposerKt;->getInvocation()Ljava/lang/Object; +HSPLandroidx/compose/runtime/ComposerKt;->getJoinedKey(Landroidx/compose/runtime/KeyInfo;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/ComposerKt;->getProvider()Ljava/lang/Object; +HSPLandroidx/compose/runtime/ComposerKt;->getProviderMaps()Ljava/lang/Object; +HSPLandroidx/compose/runtime/ComposerKt;->getProviderValues()Ljava/lang/Object; +HSPLandroidx/compose/runtime/ComposerKt;->getReference()Ljava/lang/Object; +HSPLandroidx/compose/runtime/ComposerKt;->insertIfMissing(Ljava/util/List;ILandroidx/compose/runtime/RecomposeScopeImpl;Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/ComposerKt;->isTraceInProgress()Z +HSPLandroidx/compose/runtime/ComposerKt;->multiMap()Ljava/util/HashMap; +HSPLandroidx/compose/runtime/ComposerKt;->nearestCommonRootOf(Landroidx/compose/runtime/SlotReader;III)I +HSPLandroidx/compose/runtime/ComposerKt;->pop(Ljava/util/HashMap;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/ComposerKt;->put(Ljava/util/HashMap;Ljava/lang/Object;Ljava/lang/Object;)Z +HSPLandroidx/compose/runtime/ComposerKt;->remove(Ljava/util/HashMap;Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Unit; +HSPLandroidx/compose/runtime/ComposerKt;->removeCurrentGroup(Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V +HSPLandroidx/compose/runtime/ComposerKt;->removeLocation(Ljava/util/List;I)Landroidx/compose/runtime/Invalidation; +HSPLandroidx/compose/runtime/ComposerKt;->removeRange(Ljava/util/List;II)V +HSPLandroidx/compose/runtime/ComposerKt;->runtimeCheck(Z)V +HSPLandroidx/compose/runtime/ComposerKt;->sourceInformation(Landroidx/compose/runtime/Composer;Ljava/lang/String;)V +HSPLandroidx/compose/runtime/ComposerKt;->sourceInformationMarkerEnd(Landroidx/compose/runtime/Composer;)V +HSPLandroidx/compose/runtime/ComposerKt;->sourceInformationMarkerStart(Landroidx/compose/runtime/Composer;ILjava/lang/String;)V +Landroidx/compose/runtime/ComposerKt$endGroupInstance$1; +HSPLandroidx/compose/runtime/ComposerKt$endGroupInstance$1;->()V +HSPLandroidx/compose/runtime/ComposerKt$endGroupInstance$1;->()V +HSPLandroidx/compose/runtime/ComposerKt$endGroupInstance$1;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V +HSPLandroidx/compose/runtime/ComposerKt$endGroupInstance$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/ComposerKt$removeCurrentGroupInstance$1; +HSPLandroidx/compose/runtime/ComposerKt$removeCurrentGroupInstance$1;->()V +HSPLandroidx/compose/runtime/ComposerKt$removeCurrentGroupInstance$1;->()V +HSPLandroidx/compose/runtime/ComposerKt$removeCurrentGroupInstance$1;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V +HSPLandroidx/compose/runtime/ComposerKt$removeCurrentGroupInstance$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/ComposerKt$resetSlotsInstance$1; +HSPLandroidx/compose/runtime/ComposerKt$resetSlotsInstance$1;->()V +HSPLandroidx/compose/runtime/ComposerKt$resetSlotsInstance$1;->()V +Landroidx/compose/runtime/ComposerKt$skipToGroupEndInstance$1; +HSPLandroidx/compose/runtime/ComposerKt$skipToGroupEndInstance$1;->()V +HSPLandroidx/compose/runtime/ComposerKt$skipToGroupEndInstance$1;->()V +Landroidx/compose/runtime/ComposerKt$startRootGroup$1; +HSPLandroidx/compose/runtime/ComposerKt$startRootGroup$1;->()V +HSPLandroidx/compose/runtime/ComposerKt$startRootGroup$1;->()V +HSPLandroidx/compose/runtime/ComposerKt$startRootGroup$1;->invoke(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/SlotWriter;Landroidx/compose/runtime/RememberManager;)V +HSPLandroidx/compose/runtime/ComposerKt$startRootGroup$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/Composition; +Landroidx/compose/runtime/CompositionContext; +HSPLandroidx/compose/runtime/CompositionContext;->()V +HSPLandroidx/compose/runtime/CompositionContext;->()V +HSPLandroidx/compose/runtime/CompositionContext;->doneComposing$runtime_release()V +HSPLandroidx/compose/runtime/CompositionContext;->getCompositionLocalScope$runtime_release()Landroidx/compose/runtime/PersistentCompositionLocalMap; +HSPLandroidx/compose/runtime/CompositionContext;->registerComposer$runtime_release(Landroidx/compose/runtime/Composer;)V +HSPLandroidx/compose/runtime/CompositionContext;->startComposing$runtime_release()V +Landroidx/compose/runtime/CompositionContextKt; +HSPLandroidx/compose/runtime/CompositionContextKt;->()V +HSPLandroidx/compose/runtime/CompositionContextKt;->access$getEmptyPersistentCompositionLocalMap$p()Landroidx/compose/runtime/PersistentCompositionLocalMap; +Landroidx/compose/runtime/CompositionImpl; +HSPLandroidx/compose/runtime/CompositionImpl;->(Landroidx/compose/runtime/CompositionContext;Landroidx/compose/runtime/Applier;Lkotlin/coroutines/CoroutineContext;)V +HSPLandroidx/compose/runtime/CompositionImpl;->(Landroidx/compose/runtime/CompositionContext;Landroidx/compose/runtime/Applier;Lkotlin/coroutines/CoroutineContext;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/runtime/CompositionImpl;->addPendingInvalidationsLocked(Ljava/util/HashSet;Ljava/lang/Object;Z)Ljava/util/HashSet; +HSPLandroidx/compose/runtime/CompositionImpl;->addPendingInvalidationsLocked(Ljava/util/Set;Z)V +HSPLandroidx/compose/runtime/CompositionImpl;->applyChanges()V +HSPLandroidx/compose/runtime/CompositionImpl;->applyChangesInLocked(Ljava/util/List;)V +HSPLandroidx/compose/runtime/CompositionImpl;->applyLateChanges()V +HSPLandroidx/compose/runtime/CompositionImpl;->changesApplied()V +HSPLandroidx/compose/runtime/CompositionImpl;->cleanUpDerivedStateObservations()V +HSPLandroidx/compose/runtime/CompositionImpl;->composeContent(Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/runtime/CompositionImpl;->dispose()V +HSPLandroidx/compose/runtime/CompositionImpl;->drainPendingModificationsForCompositionLocked()V +HSPLandroidx/compose/runtime/CompositionImpl;->drainPendingModificationsLocked()V +HSPLandroidx/compose/runtime/CompositionImpl;->getAreChildrenComposing()Z +HSPLandroidx/compose/runtime/CompositionImpl;->getHasInvalidations()Z +HSPLandroidx/compose/runtime/CompositionImpl;->invalidate(Landroidx/compose/runtime/RecomposeScopeImpl;Ljava/lang/Object;)Landroidx/compose/runtime/InvalidationResult; +HSPLandroidx/compose/runtime/CompositionImpl;->invalidateChecked(Landroidx/compose/runtime/RecomposeScopeImpl;Landroidx/compose/runtime/Anchor;Ljava/lang/Object;)Landroidx/compose/runtime/InvalidationResult; +HSPLandroidx/compose/runtime/CompositionImpl;->invalidateScopeOfLocked(Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/CompositionImpl;->isComposing()Z +HSPLandroidx/compose/runtime/CompositionImpl;->isDisposed()Z +HSPLandroidx/compose/runtime/CompositionImpl;->observesAnyOf(Ljava/util/Set;)Z +HSPLandroidx/compose/runtime/CompositionImpl;->prepareCompose(Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/runtime/CompositionImpl;->recompose()Z +HSPLandroidx/compose/runtime/CompositionImpl;->recomposeScopeReleased(Landroidx/compose/runtime/RecomposeScopeImpl;)V +HSPLandroidx/compose/runtime/CompositionImpl;->recordModificationsOf(Ljava/util/Set;)V +HSPLandroidx/compose/runtime/CompositionImpl;->recordReadOf(Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/CompositionImpl;->recordWriteOf(Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/CompositionImpl;->removeDerivedStateObservation$runtime_release(Landroidx/compose/runtime/DerivedState;)V +HSPLandroidx/compose/runtime/CompositionImpl;->removeObservation$runtime_release(Ljava/lang/Object;Landroidx/compose/runtime/RecomposeScopeImpl;)V +HSPLandroidx/compose/runtime/CompositionImpl;->setContent(Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/runtime/CompositionImpl;->takeInvalidations()Landroidx/compose/runtime/collection/IdentityArrayMap; +HSPLandroidx/compose/runtime/CompositionImpl;->tryImminentInvalidation(Landroidx/compose/runtime/RecomposeScopeImpl;Ljava/lang/Object;)Z +Landroidx/compose/runtime/CompositionImpl$RememberEventDispatcher; +HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->(Ljava/util/Set;)V +HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->deactivating(Landroidx/compose/runtime/ComposeNodeLifecycleCallback;)V +HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->dispatchAbandons()V +HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->dispatchRememberObservers()V +HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->dispatchSideEffects()V +HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->forgetting(Landroidx/compose/runtime/RememberObserver;)V +HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->releasing(Landroidx/compose/runtime/ComposeNodeLifecycleCallback;)V +HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->remembering(Landroidx/compose/runtime/RememberObserver;)V +HSPLandroidx/compose/runtime/CompositionImpl$RememberEventDispatcher;->sideEffect(Lkotlin/jvm/functions/Function0;)V +Landroidx/compose/runtime/CompositionKt; +HSPLandroidx/compose/runtime/CompositionKt;->()V +HSPLandroidx/compose/runtime/CompositionKt;->Composition(Landroidx/compose/runtime/Applier;Landroidx/compose/runtime/CompositionContext;)Landroidx/compose/runtime/Composition; +HSPLandroidx/compose/runtime/CompositionKt;->access$addValue(Landroidx/compose/runtime/collection/IdentityArrayMap;Ljava/lang/Object;Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/CompositionKt;->access$getPendingApplyNoModifications$p()Ljava/lang/Object; +HSPLandroidx/compose/runtime/CompositionKt;->addValue(Landroidx/compose/runtime/collection/IdentityArrayMap;Ljava/lang/Object;Ljava/lang/Object;)V +Landroidx/compose/runtime/CompositionLocal; +HSPLandroidx/compose/runtime/CompositionLocal;->()V +HSPLandroidx/compose/runtime/CompositionLocal;->(Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/runtime/CompositionLocal;->(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/runtime/CompositionLocal;->getDefaultValueHolder$runtime_release()Landroidx/compose/runtime/LazyValueHolder; +Landroidx/compose/runtime/CompositionLocalKt; +HSPLandroidx/compose/runtime/CompositionLocalKt;->CompositionLocalProvider([Landroidx/compose/runtime/ProvidedValue;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/runtime/CompositionLocalKt;->compositionLocalOf$default(Landroidx/compose/runtime/SnapshotMutationPolicy;Lkotlin/jvm/functions/Function0;ILjava/lang/Object;)Landroidx/compose/runtime/ProvidableCompositionLocal; +HSPLandroidx/compose/runtime/CompositionLocalKt;->compositionLocalOf(Landroidx/compose/runtime/SnapshotMutationPolicy;Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/ProvidableCompositionLocal; +HSPLandroidx/compose/runtime/CompositionLocalKt;->staticCompositionLocalOf(Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/ProvidableCompositionLocal; +Landroidx/compose/runtime/CompositionLocalMap; +HSPLandroidx/compose/runtime/CompositionLocalMap;->()V +Landroidx/compose/runtime/CompositionLocalMap$Companion; +HSPLandroidx/compose/runtime/CompositionLocalMap$Companion;->()V +HSPLandroidx/compose/runtime/CompositionLocalMap$Companion;->()V +HSPLandroidx/compose/runtime/CompositionLocalMap$Companion;->getEmpty()Landroidx/compose/runtime/CompositionLocalMap; +Landroidx/compose/runtime/CompositionLocalMapKt; +HSPLandroidx/compose/runtime/CompositionLocalMapKt;->compositionLocalMapOf([Landroidx/compose/runtime/ProvidedValue;Landroidx/compose/runtime/PersistentCompositionLocalMap;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/PersistentCompositionLocalMap; +HSPLandroidx/compose/runtime/CompositionLocalMapKt;->contains(Landroidx/compose/runtime/PersistentCompositionLocalMap;Landroidx/compose/runtime/CompositionLocal;)Z +HSPLandroidx/compose/runtime/CompositionLocalMapKt;->getValueOf(Landroidx/compose/runtime/PersistentCompositionLocalMap;Landroidx/compose/runtime/CompositionLocal;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/CompositionLocalMapKt;->read(Landroidx/compose/runtime/PersistentCompositionLocalMap;Landroidx/compose/runtime/CompositionLocal;)Ljava/lang/Object; +Landroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller; +HSPLandroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller;->(Lkotlinx/coroutines/CoroutineScope;)V +HSPLandroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller;->getCoroutineScope()Lkotlinx/coroutines/CoroutineScope; +HSPLandroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller;->onForgotten()V +HSPLandroidx/compose/runtime/CompositionScopedCoroutineScopeCanceller;->onRemembered()V +Landroidx/compose/runtime/CompositionTracer; +Landroidx/compose/runtime/ControlledComposition; +Landroidx/compose/runtime/DerivedSnapshotState; +HSPLandroidx/compose/runtime/DerivedSnapshotState;->(Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/SnapshotMutationPolicy;)V +HSPLandroidx/compose/runtime/DerivedSnapshotState;->current(Landroidx/compose/runtime/snapshots/Snapshot;)Landroidx/compose/runtime/snapshots/StateRecord; +HSPLandroidx/compose/runtime/DerivedSnapshotState;->currentRecord(Landroidx/compose/runtime/DerivedSnapshotState$ResultRecord;Landroidx/compose/runtime/snapshots/Snapshot;ZLkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/DerivedSnapshotState$ResultRecord; +HSPLandroidx/compose/runtime/DerivedSnapshotState;->getCurrentRecord()Landroidx/compose/runtime/DerivedState$Record; +HSPLandroidx/compose/runtime/DerivedSnapshotState;->getFirstStateRecord()Landroidx/compose/runtime/snapshots/StateRecord; +HSPLandroidx/compose/runtime/DerivedSnapshotState;->getPolicy()Landroidx/compose/runtime/SnapshotMutationPolicy; +HSPLandroidx/compose/runtime/DerivedSnapshotState;->getValue()Ljava/lang/Object; +HSPLandroidx/compose/runtime/DerivedSnapshotState;->prependStateRecord(Landroidx/compose/runtime/snapshots/StateRecord;)V +Landroidx/compose/runtime/DerivedSnapshotState$ResultRecord; +HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->()V +HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->()V +HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->access$getUnset$cp()Ljava/lang/Object; +HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->assign(Landroidx/compose/runtime/snapshots/StateRecord;)V +HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->create()Landroidx/compose/runtime/snapshots/StateRecord; +HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->getCurrentValue()Ljava/lang/Object; +HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->getDependencies()[Ljava/lang/Object; +HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->getResult()Ljava/lang/Object; +HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->get_dependencies()Landroidx/compose/runtime/collection/IdentityArrayMap; +HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->isValid(Landroidx/compose/runtime/DerivedState;Landroidx/compose/runtime/snapshots/Snapshot;)Z +HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->readableHash(Landroidx/compose/runtime/DerivedState;Landroidx/compose/runtime/snapshots/Snapshot;)I +HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->setResult(Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->setResultHash(I)V +HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->setValidSnapshotId(I)V +HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->setValidSnapshotWriteCount(I)V +HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord;->set_dependencies(Landroidx/compose/runtime/collection/IdentityArrayMap;)V +Landroidx/compose/runtime/DerivedSnapshotState$ResultRecord$Companion; +HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord$Companion;->()V +HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/runtime/DerivedSnapshotState$ResultRecord$Companion;->getUnset()Ljava/lang/Object; +Landroidx/compose/runtime/DerivedSnapshotState$currentRecord$result$1$result$1; +HSPLandroidx/compose/runtime/DerivedSnapshotState$currentRecord$result$1$result$1;->(Landroidx/compose/runtime/DerivedSnapshotState;Landroidx/compose/runtime/collection/IdentityArrayMap;I)V +HSPLandroidx/compose/runtime/DerivedSnapshotState$currentRecord$result$1$result$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/DerivedSnapshotState$currentRecord$result$1$result$1;->invoke(Ljava/lang/Object;)V +Landroidx/compose/runtime/DerivedState; +Landroidx/compose/runtime/DerivedState$Record; +Landroidx/compose/runtime/DerivedStateObserver; +Landroidx/compose/runtime/DisposableEffectImpl; +HSPLandroidx/compose/runtime/DisposableEffectImpl;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/runtime/DisposableEffectImpl;->onForgotten()V +HSPLandroidx/compose/runtime/DisposableEffectImpl;->onRemembered()V +Landroidx/compose/runtime/DisposableEffectResult; +Landroidx/compose/runtime/DisposableEffectScope; +HSPLandroidx/compose/runtime/DisposableEffectScope;->()V +HSPLandroidx/compose/runtime/DisposableEffectScope;->()V +Landroidx/compose/runtime/DynamicProvidableCompositionLocal; +HSPLandroidx/compose/runtime/DynamicProvidableCompositionLocal;->(Landroidx/compose/runtime/SnapshotMutationPolicy;Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/runtime/DynamicProvidableCompositionLocal;->access$getPolicy$p(Landroidx/compose/runtime/DynamicProvidableCompositionLocal;)Landroidx/compose/runtime/SnapshotMutationPolicy; +HSPLandroidx/compose/runtime/DynamicProvidableCompositionLocal;->provided$runtime_release(Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State; +Landroidx/compose/runtime/EffectsKt; +HSPLandroidx/compose/runtime/EffectsKt;->()V +HSPLandroidx/compose/runtime/EffectsKt;->DisposableEffect(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/runtime/EffectsKt;->DisposableEffect(Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/runtime/EffectsKt;->DisposableEffect(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/runtime/EffectsKt;->LaunchedEffect(Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/runtime/EffectsKt;->LaunchedEffect(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/runtime/EffectsKt;->LaunchedEffect([Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/runtime/EffectsKt;->SideEffect(Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/runtime/EffectsKt;->access$getInternalDisposableEffectScope$p()Landroidx/compose/runtime/DisposableEffectScope; +HSPLandroidx/compose/runtime/EffectsKt;->createCompositionCoroutineScope(Lkotlin/coroutines/CoroutineContext;Landroidx/compose/runtime/Composer;)Lkotlinx/coroutines/CoroutineScope; +Landroidx/compose/runtime/FloatState; +Landroidx/compose/runtime/GroupInfo; +HSPLandroidx/compose/runtime/GroupInfo;->(III)V +HSPLandroidx/compose/runtime/GroupInfo;->getNodeCount()I +HSPLandroidx/compose/runtime/GroupInfo;->getNodeIndex()I +HSPLandroidx/compose/runtime/GroupInfo;->getSlotIndex()I +HSPLandroidx/compose/runtime/GroupInfo;->setNodeCount(I)V +HSPLandroidx/compose/runtime/GroupInfo;->setNodeIndex(I)V +HSPLandroidx/compose/runtime/GroupInfo;->setSlotIndex(I)V +Landroidx/compose/runtime/GroupKind; +HSPLandroidx/compose/runtime/GroupKind;->()V +HSPLandroidx/compose/runtime/GroupKind;->access$getGroup$cp()I +HSPLandroidx/compose/runtime/GroupKind;->access$getNode$cp()I +HSPLandroidx/compose/runtime/GroupKind;->access$getReusableNode$cp()I +HSPLandroidx/compose/runtime/GroupKind;->constructor-impl(I)I +Landroidx/compose/runtime/GroupKind$Companion; +HSPLandroidx/compose/runtime/GroupKind$Companion;->()V +HSPLandroidx/compose/runtime/GroupKind$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/runtime/GroupKind$Companion;->getGroup-ULZAiWs()I +HSPLandroidx/compose/runtime/GroupKind$Companion;->getNode-ULZAiWs()I +HSPLandroidx/compose/runtime/GroupKind$Companion;->getReusableNode-ULZAiWs()I +Landroidx/compose/runtime/IntStack; +HSPLandroidx/compose/runtime/IntStack;->()V +HSPLandroidx/compose/runtime/IntStack;->clear()V +HSPLandroidx/compose/runtime/IntStack;->getSize()I +HSPLandroidx/compose/runtime/IntStack;->isEmpty()Z +HSPLandroidx/compose/runtime/IntStack;->peek()I +HSPLandroidx/compose/runtime/IntStack;->peekOr(I)I +HSPLandroidx/compose/runtime/IntStack;->pop()I +HSPLandroidx/compose/runtime/IntStack;->push(I)V +Landroidx/compose/runtime/IntState; +Landroidx/compose/runtime/Invalidation; +HSPLandroidx/compose/runtime/Invalidation;->(Landroidx/compose/runtime/RecomposeScopeImpl;ILandroidx/compose/runtime/collection/IdentityArraySet;)V +HSPLandroidx/compose/runtime/Invalidation;->getInstances()Landroidx/compose/runtime/collection/IdentityArraySet; +HSPLandroidx/compose/runtime/Invalidation;->getLocation()I +HSPLandroidx/compose/runtime/Invalidation;->getScope()Landroidx/compose/runtime/RecomposeScopeImpl; +HSPLandroidx/compose/runtime/Invalidation;->isInvalid()Z +HSPLandroidx/compose/runtime/Invalidation;->setInstances(Landroidx/compose/runtime/collection/IdentityArraySet;)V +Landroidx/compose/runtime/InvalidationResult; +HSPLandroidx/compose/runtime/InvalidationResult;->$values()[Landroidx/compose/runtime/InvalidationResult; +HSPLandroidx/compose/runtime/InvalidationResult;->()V +HSPLandroidx/compose/runtime/InvalidationResult;->(Ljava/lang/String;I)V +Landroidx/compose/runtime/JoinedKey; +HSPLandroidx/compose/runtime/JoinedKey;->(Ljava/lang/Object;Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/JoinedKey;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/runtime/JoinedKey;->hashCode()I +HSPLandroidx/compose/runtime/JoinedKey;->hashCodeOf(Ljava/lang/Object;)I +Landroidx/compose/runtime/KeyInfo; +HSPLandroidx/compose/runtime/KeyInfo;->(ILjava/lang/Object;III)V +HSPLandroidx/compose/runtime/KeyInfo;->getKey()I +HSPLandroidx/compose/runtime/KeyInfo;->getLocation()I +HSPLandroidx/compose/runtime/KeyInfo;->getNodes()I +HSPLandroidx/compose/runtime/KeyInfo;->getObjectKey()Ljava/lang/Object; +Landroidx/compose/runtime/Latch; +HSPLandroidx/compose/runtime/Latch;->()V +HSPLandroidx/compose/runtime/Latch;->await(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/Latch;->closeLatch()V +HSPLandroidx/compose/runtime/Latch;->isOpen()Z +HSPLandroidx/compose/runtime/Latch;->openLatch()V +Landroidx/compose/runtime/LaunchedEffectImpl; +HSPLandroidx/compose/runtime/LaunchedEffectImpl;->(Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/runtime/LaunchedEffectImpl;->onForgotten()V +HSPLandroidx/compose/runtime/LaunchedEffectImpl;->onRemembered()V +Landroidx/compose/runtime/LazyValueHolder; +HSPLandroidx/compose/runtime/LazyValueHolder;->(Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/runtime/LazyValueHolder;->getCurrent()Ljava/lang/Object; +HSPLandroidx/compose/runtime/LazyValueHolder;->getValue()Ljava/lang/Object; +Landroidx/compose/runtime/LeftCompositionCancellationException; +HSPLandroidx/compose/runtime/LeftCompositionCancellationException;->()V +HSPLandroidx/compose/runtime/LeftCompositionCancellationException;->fillInStackTrace()Ljava/lang/Throwable; +Landroidx/compose/runtime/LongState; +Landroidx/compose/runtime/MonotonicFrameClock; +HSPLandroidx/compose/runtime/MonotonicFrameClock;->()V +HSPLandroidx/compose/runtime/MonotonicFrameClock;->getKey()Lkotlin/coroutines/CoroutineContext$Key; +Landroidx/compose/runtime/MonotonicFrameClock$DefaultImpls; +HSPLandroidx/compose/runtime/MonotonicFrameClock$DefaultImpls;->fold(Landroidx/compose/runtime/MonotonicFrameClock;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/MonotonicFrameClock$DefaultImpls;->get(Landroidx/compose/runtime/MonotonicFrameClock;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; +HSPLandroidx/compose/runtime/MonotonicFrameClock$DefaultImpls;->minusKey(Landroidx/compose/runtime/MonotonicFrameClock;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext; +Landroidx/compose/runtime/MonotonicFrameClock$Key; +HSPLandroidx/compose/runtime/MonotonicFrameClock$Key;->()V +HSPLandroidx/compose/runtime/MonotonicFrameClock$Key;->()V +Landroidx/compose/runtime/MonotonicFrameClockKt; +HSPLandroidx/compose/runtime/MonotonicFrameClockKt;->getMonotonicFrameClock(Lkotlin/coroutines/CoroutineContext;)Landroidx/compose/runtime/MonotonicFrameClock; +HSPLandroidx/compose/runtime/MonotonicFrameClockKt;->withFrameNanos(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/compose/runtime/MovableContent; +Landroidx/compose/runtime/MutableFloatState; +Landroidx/compose/runtime/MutableIntState; +Landroidx/compose/runtime/MutableLongState; +Landroidx/compose/runtime/MutableState; +Landroidx/compose/runtime/NeverEqualPolicy; +HSPLandroidx/compose/runtime/NeverEqualPolicy;->()V +HSPLandroidx/compose/runtime/NeverEqualPolicy;->()V +HSPLandroidx/compose/runtime/NeverEqualPolicy;->equivalent(Ljava/lang/Object;Ljava/lang/Object;)Z +Landroidx/compose/runtime/OpaqueKey; +HSPLandroidx/compose/runtime/OpaqueKey;->(Ljava/lang/String;)V +HSPLandroidx/compose/runtime/OpaqueKey;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/runtime/OpaqueKey;->hashCode()I +Landroidx/compose/runtime/ParcelableSnapshotMutableFloatState; +HSPLandroidx/compose/runtime/ParcelableSnapshotMutableFloatState;->()V +HSPLandroidx/compose/runtime/ParcelableSnapshotMutableFloatState;->(F)V +Landroidx/compose/runtime/ParcelableSnapshotMutableFloatState$Companion; +HSPLandroidx/compose/runtime/ParcelableSnapshotMutableFloatState$Companion;->()V +HSPLandroidx/compose/runtime/ParcelableSnapshotMutableFloatState$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/runtime/ParcelableSnapshotMutableFloatState$Companion$CREATOR$1; +HSPLandroidx/compose/runtime/ParcelableSnapshotMutableFloatState$Companion$CREATOR$1;->()V +Landroidx/compose/runtime/ParcelableSnapshotMutableIntState; +HSPLandroidx/compose/runtime/ParcelableSnapshotMutableIntState;->()V +HSPLandroidx/compose/runtime/ParcelableSnapshotMutableIntState;->(I)V +Landroidx/compose/runtime/ParcelableSnapshotMutableIntState$Companion; +HSPLandroidx/compose/runtime/ParcelableSnapshotMutableIntState$Companion;->()V +HSPLandroidx/compose/runtime/ParcelableSnapshotMutableIntState$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/runtime/ParcelableSnapshotMutableIntState$Companion$CREATOR$1; +HSPLandroidx/compose/runtime/ParcelableSnapshotMutableIntState$Companion$CREATOR$1;->()V +Landroidx/compose/runtime/ParcelableSnapshotMutableLongState; +HSPLandroidx/compose/runtime/ParcelableSnapshotMutableLongState;->()V +HSPLandroidx/compose/runtime/ParcelableSnapshotMutableLongState;->(J)V +Landroidx/compose/runtime/ParcelableSnapshotMutableLongState$Companion; +HSPLandroidx/compose/runtime/ParcelableSnapshotMutableLongState$Companion;->()V +HSPLandroidx/compose/runtime/ParcelableSnapshotMutableLongState$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/runtime/ParcelableSnapshotMutableLongState$Companion$CREATOR$1; +HSPLandroidx/compose/runtime/ParcelableSnapshotMutableLongState$Companion$CREATOR$1;->()V +Landroidx/compose/runtime/ParcelableSnapshotMutableState; +HSPLandroidx/compose/runtime/ParcelableSnapshotMutableState;->()V +HSPLandroidx/compose/runtime/ParcelableSnapshotMutableState;->(Ljava/lang/Object;Landroidx/compose/runtime/SnapshotMutationPolicy;)V +Landroidx/compose/runtime/ParcelableSnapshotMutableState$Companion; +HSPLandroidx/compose/runtime/ParcelableSnapshotMutableState$Companion;->()V +HSPLandroidx/compose/runtime/ParcelableSnapshotMutableState$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/runtime/ParcelableSnapshotMutableState$Companion$CREATOR$1; +HSPLandroidx/compose/runtime/ParcelableSnapshotMutableState$Companion$CREATOR$1;->()V +Landroidx/compose/runtime/PausableMonotonicFrameClock; +HSPLandroidx/compose/runtime/PausableMonotonicFrameClock;->()V +HSPLandroidx/compose/runtime/PausableMonotonicFrameClock;->(Landroidx/compose/runtime/MonotonicFrameClock;)V +HSPLandroidx/compose/runtime/PausableMonotonicFrameClock;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/PausableMonotonicFrameClock;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; +HSPLandroidx/compose/runtime/PausableMonotonicFrameClock;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext; +HSPLandroidx/compose/runtime/PausableMonotonicFrameClock;->pause()V +HSPLandroidx/compose/runtime/PausableMonotonicFrameClock;->resume()V +HSPLandroidx/compose/runtime/PausableMonotonicFrameClock;->withFrameNanos(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/compose/runtime/PausableMonotonicFrameClock$withFrameNanos$1; +HSPLandroidx/compose/runtime/PausableMonotonicFrameClock$withFrameNanos$1;->(Landroidx/compose/runtime/PausableMonotonicFrameClock;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/runtime/PausableMonotonicFrameClock$withFrameNanos$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/Pending; +HSPLandroidx/compose/runtime/Pending;->(Ljava/util/List;I)V +HSPLandroidx/compose/runtime/Pending;->getGroupIndex()I +HSPLandroidx/compose/runtime/Pending;->getKeyInfos()Ljava/util/List; +HSPLandroidx/compose/runtime/Pending;->getKeyMap()Ljava/util/HashMap; +HSPLandroidx/compose/runtime/Pending;->getNext(ILjava/lang/Object;)Landroidx/compose/runtime/KeyInfo; +HSPLandroidx/compose/runtime/Pending;->getStartIndex()I +HSPLandroidx/compose/runtime/Pending;->getUsed()Ljava/util/List; +HSPLandroidx/compose/runtime/Pending;->nodePositionOf(Landroidx/compose/runtime/KeyInfo;)I +HSPLandroidx/compose/runtime/Pending;->recordUsed(Landroidx/compose/runtime/KeyInfo;)Z +HSPLandroidx/compose/runtime/Pending;->registerInsert(Landroidx/compose/runtime/KeyInfo;I)V +HSPLandroidx/compose/runtime/Pending;->registerMoveSlot(II)V +HSPLandroidx/compose/runtime/Pending;->setGroupIndex(I)V +HSPLandroidx/compose/runtime/Pending;->slotPositionOf(Landroidx/compose/runtime/KeyInfo;)I +HSPLandroidx/compose/runtime/Pending;->updateNodeCount(II)Z +HSPLandroidx/compose/runtime/Pending;->updatedNodeCountOf(Landroidx/compose/runtime/KeyInfo;)I +Landroidx/compose/runtime/Pending$keyMap$2; +HSPLandroidx/compose/runtime/Pending$keyMap$2;->(Landroidx/compose/runtime/Pending;)V +HSPLandroidx/compose/runtime/Pending$keyMap$2;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/runtime/Pending$keyMap$2;->invoke()Ljava/util/HashMap; +Landroidx/compose/runtime/PersistentCompositionLocalMap; +Landroidx/compose/runtime/PersistentCompositionLocalMap$Builder; +Landroidx/compose/runtime/PrimitiveSnapshotStateKt; +HSPLandroidx/compose/runtime/PrimitiveSnapshotStateKt;->mutableFloatStateOf(F)Landroidx/compose/runtime/MutableFloatState; +Landroidx/compose/runtime/PrimitiveSnapshotStateKt__SnapshotFloatStateKt; +HSPLandroidx/compose/runtime/PrimitiveSnapshotStateKt__SnapshotFloatStateKt;->mutableFloatStateOf(F)Landroidx/compose/runtime/MutableFloatState; +Landroidx/compose/runtime/PrioritySet; +HSPLandroidx/compose/runtime/PrioritySet;->(Ljava/util/List;)V +HSPLandroidx/compose/runtime/PrioritySet;->(Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/runtime/PrioritySet;->add(I)V +HSPLandroidx/compose/runtime/PrioritySet;->isNotEmpty()Z +HSPLandroidx/compose/runtime/PrioritySet;->peek()I +HSPLandroidx/compose/runtime/PrioritySet;->takeMax()I +Landroidx/compose/runtime/ProduceStateScope; +Landroidx/compose/runtime/ProduceStateScopeImpl; +HSPLandroidx/compose/runtime/ProduceStateScopeImpl;->(Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/CoroutineContext;)V +HSPLandroidx/compose/runtime/ProduceStateScopeImpl;->setValue(Ljava/lang/Object;)V +Landroidx/compose/runtime/ProvidableCompositionLocal; +HSPLandroidx/compose/runtime/ProvidableCompositionLocal;->()V +HSPLandroidx/compose/runtime/ProvidableCompositionLocal;->(Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/runtime/ProvidableCompositionLocal;->provides(Ljava/lang/Object;)Landroidx/compose/runtime/ProvidedValue; +HSPLandroidx/compose/runtime/ProvidableCompositionLocal;->providesDefault(Ljava/lang/Object;)Landroidx/compose/runtime/ProvidedValue; +Landroidx/compose/runtime/ProvidedValue; +HSPLandroidx/compose/runtime/ProvidedValue;->()V +HSPLandroidx/compose/runtime/ProvidedValue;->(Landroidx/compose/runtime/CompositionLocal;Ljava/lang/Object;Z)V +HSPLandroidx/compose/runtime/ProvidedValue;->getCanOverride()Z +HSPLandroidx/compose/runtime/ProvidedValue;->getCompositionLocal()Landroidx/compose/runtime/CompositionLocal; +HSPLandroidx/compose/runtime/ProvidedValue;->getValue()Ljava/lang/Object; +Landroidx/compose/runtime/RecomposeScope; +Landroidx/compose/runtime/RecomposeScopeImpl; +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->()V +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->(Landroidx/compose/runtime/RecomposeScopeOwner;)V +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->access$getCurrentToken$p(Landroidx/compose/runtime/RecomposeScopeImpl;)I +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->access$getTrackedDependencies$p(Landroidx/compose/runtime/RecomposeScopeImpl;)Landroidx/compose/runtime/collection/IdentityArrayMap; +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->access$getTrackedInstances$p(Landroidx/compose/runtime/RecomposeScopeImpl;)Landroidx/compose/runtime/collection/IdentityArrayIntMap; +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->access$setTrackedDependencies$p(Landroidx/compose/runtime/RecomposeScopeImpl;Landroidx/compose/runtime/collection/IdentityArrayMap;)V +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->access$setTrackedInstances$p(Landroidx/compose/runtime/RecomposeScopeImpl;Landroidx/compose/runtime/collection/IdentityArrayIntMap;)V +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->compose(Landroidx/compose/runtime/Composer;)V +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->end(I)Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->getAnchor()Landroidx/compose/runtime/Anchor; +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->getCanRecompose()Z +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->getDefaultsInScope()Z +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->getDefaultsInvalid()Z +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->getRequiresRecompose()Z +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->getRereading()Z +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->getSkipped$runtime_release()Z +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->getUsed()Z +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->getValid()Z +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->invalidate()V +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->invalidateForResult(Ljava/lang/Object;)Landroidx/compose/runtime/InvalidationResult; +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->isConditional()Z +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->isInvalidFor(Landroidx/compose/runtime/collection/IdentityArraySet;)Z +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->recordRead(Ljava/lang/Object;)Z +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->release()V +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->rereadTrackedInstances()V +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->scopeSkipped()V +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->setAnchor(Landroidx/compose/runtime/Anchor;)V +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->setDefaultsInScope(Z)V +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->setDefaultsInvalid(Z)V +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->setRequiresRecompose(Z)V +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->setRereading(Z)V +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->setSkipped(Z)V +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->setUsed(Z)V +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->start(I)V +HSPLandroidx/compose/runtime/RecomposeScopeImpl;->updateScope(Lkotlin/jvm/functions/Function2;)V +Landroidx/compose/runtime/RecomposeScopeImpl$Companion; +HSPLandroidx/compose/runtime/RecomposeScopeImpl$Companion;->()V +HSPLandroidx/compose/runtime/RecomposeScopeImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/runtime/RecomposeScopeImpl$end$1$2; +HSPLandroidx/compose/runtime/RecomposeScopeImpl$end$1$2;->(Landroidx/compose/runtime/RecomposeScopeImpl;ILandroidx/compose/runtime/collection/IdentityArrayIntMap;)V +HSPLandroidx/compose/runtime/RecomposeScopeImpl$end$1$2;->invoke(Landroidx/compose/runtime/Composition;)V +HSPLandroidx/compose/runtime/RecomposeScopeImpl$end$1$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/RecomposeScopeImplKt; +HSPLandroidx/compose/runtime/RecomposeScopeImplKt;->updateChangedFlags(I)I +Landroidx/compose/runtime/RecomposeScopeOwner; +Landroidx/compose/runtime/Recomposer; +HSPLandroidx/compose/runtime/Recomposer;->()V +HSPLandroidx/compose/runtime/Recomposer;->(Lkotlin/coroutines/CoroutineContext;)V +HSPLandroidx/compose/runtime/Recomposer;->access$awaitWorkAvailable(Landroidx/compose/runtime/Recomposer;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/Recomposer;->access$deriveStateLocked(Landroidx/compose/runtime/Recomposer;)Lkotlinx/coroutines/CancellableContinuation; +HSPLandroidx/compose/runtime/Recomposer;->access$discardUnusedValues(Landroidx/compose/runtime/Recomposer;)V +HSPLandroidx/compose/runtime/Recomposer;->access$getBroadcastFrameClock$p(Landroidx/compose/runtime/Recomposer;)Landroidx/compose/runtime/BroadcastFrameClock; +HSPLandroidx/compose/runtime/Recomposer;->access$getCompositionInvalidations$p(Landroidx/compose/runtime/Recomposer;)Ljava/util/List; +HSPLandroidx/compose/runtime/Recomposer;->access$getCompositionValuesAwaitingInsert$p(Landroidx/compose/runtime/Recomposer;)Ljava/util/List; +HSPLandroidx/compose/runtime/Recomposer;->access$getHasBroadcastFrameClockAwaiters(Landroidx/compose/runtime/Recomposer;)Z +HSPLandroidx/compose/runtime/Recomposer;->access$getHasSchedulingWork(Landroidx/compose/runtime/Recomposer;)Z +HSPLandroidx/compose/runtime/Recomposer;->access$getKnownCompositions$p(Landroidx/compose/runtime/Recomposer;)Ljava/util/List; +HSPLandroidx/compose/runtime/Recomposer;->access$getRecomposerInfo$p(Landroidx/compose/runtime/Recomposer;)Landroidx/compose/runtime/Recomposer$RecomposerInfoImpl; +HSPLandroidx/compose/runtime/Recomposer;->access$getShouldKeepRecomposing(Landroidx/compose/runtime/Recomposer;)Z +HSPLandroidx/compose/runtime/Recomposer;->access$getSnapshotInvalidations$p(Landroidx/compose/runtime/Recomposer;)Landroidx/compose/runtime/collection/IdentityArraySet; +HSPLandroidx/compose/runtime/Recomposer;->access$getStateLock$p(Landroidx/compose/runtime/Recomposer;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/Recomposer;->access$get_runningRecomposers$cp()Lkotlinx/coroutines/flow/MutableStateFlow; +HSPLandroidx/compose/runtime/Recomposer;->access$get_state$p(Landroidx/compose/runtime/Recomposer;)Lkotlinx/coroutines/flow/MutableStateFlow; +HSPLandroidx/compose/runtime/Recomposer;->access$performRecompose(Landroidx/compose/runtime/Recomposer;Landroidx/compose/runtime/ControlledComposition;Landroidx/compose/runtime/collection/IdentityArraySet;)Landroidx/compose/runtime/ControlledComposition; +HSPLandroidx/compose/runtime/Recomposer;->access$recordComposerModifications(Landroidx/compose/runtime/Recomposer;)Z +HSPLandroidx/compose/runtime/Recomposer;->access$registerRunnerJob(Landroidx/compose/runtime/Recomposer;Lkotlinx/coroutines/Job;)V +HSPLandroidx/compose/runtime/Recomposer;->access$setChangeCount$p(Landroidx/compose/runtime/Recomposer;J)V +HSPLandroidx/compose/runtime/Recomposer;->access$setCompositionsRemoved$p(Landroidx/compose/runtime/Recomposer;Ljava/util/Set;)V +HSPLandroidx/compose/runtime/Recomposer;->access$setWorkContinuation$p(Landroidx/compose/runtime/Recomposer;Lkotlinx/coroutines/CancellableContinuation;)V +HSPLandroidx/compose/runtime/Recomposer;->applyAndCheck(Landroidx/compose/runtime/snapshots/MutableSnapshot;)V +HSPLandroidx/compose/runtime/Recomposer;->awaitWorkAvailable(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/Recomposer;->composeInitial$runtime_release(Landroidx/compose/runtime/ControlledComposition;Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/runtime/Recomposer;->deriveStateLocked()Lkotlinx/coroutines/CancellableContinuation; +HSPLandroidx/compose/runtime/Recomposer;->discardUnusedValues()V +HSPLandroidx/compose/runtime/Recomposer;->getChangeCount()J +HSPLandroidx/compose/runtime/Recomposer;->getCollectingParameterInformation$runtime_release()Z +HSPLandroidx/compose/runtime/Recomposer;->getCompoundHashKey$runtime_release()I +HSPLandroidx/compose/runtime/Recomposer;->getCurrentState()Lkotlinx/coroutines/flow/StateFlow; +HSPLandroidx/compose/runtime/Recomposer;->getEffectCoroutineContext()Lkotlin/coroutines/CoroutineContext; +HSPLandroidx/compose/runtime/Recomposer;->getHasBroadcastFrameClockAwaiters()Z +HSPLandroidx/compose/runtime/Recomposer;->getHasBroadcastFrameClockAwaitersLocked()Z +HSPLandroidx/compose/runtime/Recomposer;->getHasFrameWorkLocked()Z +HSPLandroidx/compose/runtime/Recomposer;->getHasSchedulingWork()Z +HSPLandroidx/compose/runtime/Recomposer;->getShouldKeepRecomposing()Z +HSPLandroidx/compose/runtime/Recomposer;->invalidate$runtime_release(Landroidx/compose/runtime/ControlledComposition;)V +HSPLandroidx/compose/runtime/Recomposer;->join(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/Recomposer;->pauseCompositionFrameClock()V +HSPLandroidx/compose/runtime/Recomposer;->performInitialMovableContentInserts(Landroidx/compose/runtime/ControlledComposition;)V +HSPLandroidx/compose/runtime/Recomposer;->performRecompose(Landroidx/compose/runtime/ControlledComposition;Landroidx/compose/runtime/collection/IdentityArraySet;)Landroidx/compose/runtime/ControlledComposition; +HSPLandroidx/compose/runtime/Recomposer;->readObserverOf(Landroidx/compose/runtime/ControlledComposition;)Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/runtime/Recomposer;->recompositionRunner(Lkotlin/jvm/functions/Function3;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/Recomposer;->recordComposerModifications()Z +HSPLandroidx/compose/runtime/Recomposer;->registerRunnerJob(Lkotlinx/coroutines/Job;)V +HSPLandroidx/compose/runtime/Recomposer;->reportRemovedComposition$runtime_release(Landroidx/compose/runtime/ControlledComposition;)V +HSPLandroidx/compose/runtime/Recomposer;->resumeCompositionFrameClock()V +HSPLandroidx/compose/runtime/Recomposer;->runRecomposeAndApplyChanges(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/Recomposer;->unregisterComposition$runtime_release(Landroidx/compose/runtime/ControlledComposition;)V +HSPLandroidx/compose/runtime/Recomposer;->writeObserverOf(Landroidx/compose/runtime/ControlledComposition;Landroidx/compose/runtime/collection/IdentityArraySet;)Lkotlin/jvm/functions/Function1; +Landroidx/compose/runtime/Recomposer$Companion; +HSPLandroidx/compose/runtime/Recomposer$Companion;->()V +HSPLandroidx/compose/runtime/Recomposer$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/runtime/Recomposer$Companion;->access$addRunning(Landroidx/compose/runtime/Recomposer$Companion;Landroidx/compose/runtime/Recomposer$RecomposerInfoImpl;)V +HSPLandroidx/compose/runtime/Recomposer$Companion;->addRunning(Landroidx/compose/runtime/Recomposer$RecomposerInfoImpl;)V +Landroidx/compose/runtime/Recomposer$RecomposerErrorState; +Landroidx/compose/runtime/Recomposer$RecomposerInfoImpl; +HSPLandroidx/compose/runtime/Recomposer$RecomposerInfoImpl;->(Landroidx/compose/runtime/Recomposer;)V +Landroidx/compose/runtime/Recomposer$State; +HSPLandroidx/compose/runtime/Recomposer$State;->$values()[Landroidx/compose/runtime/Recomposer$State; +HSPLandroidx/compose/runtime/Recomposer$State;->()V +HSPLandroidx/compose/runtime/Recomposer$State;->(Ljava/lang/String;I)V +Landroidx/compose/runtime/Recomposer$broadcastFrameClock$1; +HSPLandroidx/compose/runtime/Recomposer$broadcastFrameClock$1;->(Landroidx/compose/runtime/Recomposer;)V +HSPLandroidx/compose/runtime/Recomposer$broadcastFrameClock$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/runtime/Recomposer$broadcastFrameClock$1;->invoke()V +Landroidx/compose/runtime/Recomposer$effectJob$1$1; +HSPLandroidx/compose/runtime/Recomposer$effectJob$1$1;->(Landroidx/compose/runtime/Recomposer;)V +Landroidx/compose/runtime/Recomposer$join$2; +HSPLandroidx/compose/runtime/Recomposer$join$2;->(Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/runtime/Recomposer$join$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/runtime/Recomposer$join$2;->invoke(Landroidx/compose/runtime/Recomposer$State;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/Recomposer$join$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/Recomposer$join$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/Recomposer$performRecompose$1$1; +HSPLandroidx/compose/runtime/Recomposer$performRecompose$1$1;->(Landroidx/compose/runtime/collection/IdentityArraySet;Landroidx/compose/runtime/ControlledComposition;)V +HSPLandroidx/compose/runtime/Recomposer$performRecompose$1$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/runtime/Recomposer$performRecompose$1$1;->invoke()V +Landroidx/compose/runtime/Recomposer$readObserverOf$1; +HSPLandroidx/compose/runtime/Recomposer$readObserverOf$1;->(Landroidx/compose/runtime/ControlledComposition;)V +HSPLandroidx/compose/runtime/Recomposer$readObserverOf$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/Recomposer$readObserverOf$1;->invoke(Ljava/lang/Object;)V +Landroidx/compose/runtime/Recomposer$recompositionRunner$2; +HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2;->(Landroidx/compose/runtime/Recomposer;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/MonotonicFrameClock;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/Recomposer$recompositionRunner$2$3; +HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$3;->(Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/MonotonicFrameClock;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$3;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/Recomposer$recompositionRunner$2$unregisterApplyObserver$1; +HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$unregisterApplyObserver$1;->(Landroidx/compose/runtime/Recomposer;)V +HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$unregisterApplyObserver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/Recomposer$recompositionRunner$2$unregisterApplyObserver$1;->invoke(Ljava/util/Set;Landroidx/compose/runtime/snapshots/Snapshot;)V +Landroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2; +HSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2;->(Landroidx/compose/runtime/Recomposer;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2;->access$invokeSuspend$fillToInsert(Ljava/util/List;Landroidx/compose/runtime/Recomposer;)V +HSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/runtime/MonotonicFrameClock;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2;->invokeSuspend$fillToInsert(Ljava/util/List;Landroidx/compose/runtime/Recomposer;)V +HSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2$1; +HSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2$1;->(Landroidx/compose/runtime/Recomposer;Ljava/util/List;Ljava/util/List;Ljava/util/Set;Ljava/util/List;Ljava/util/Set;)V +HSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2$1;->invoke(J)V +HSPLandroidx/compose/runtime/Recomposer$runRecomposeAndApplyChanges$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/Recomposer$writeObserverOf$1; +HSPLandroidx/compose/runtime/Recomposer$writeObserverOf$1;->(Landroidx/compose/runtime/ControlledComposition;Landroidx/compose/runtime/collection/IdentityArraySet;)V +HSPLandroidx/compose/runtime/Recomposer$writeObserverOf$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/Recomposer$writeObserverOf$1;->invoke(Ljava/lang/Object;)V +Landroidx/compose/runtime/RecomposerErrorInfo; +Landroidx/compose/runtime/RecomposerInfo; +Landroidx/compose/runtime/ReferentialEqualityPolicy; +HSPLandroidx/compose/runtime/ReferentialEqualityPolicy;->()V +HSPLandroidx/compose/runtime/ReferentialEqualityPolicy;->()V +HSPLandroidx/compose/runtime/ReferentialEqualityPolicy;->equivalent(Ljava/lang/Object;Ljava/lang/Object;)Z +Landroidx/compose/runtime/RememberManager; +Landroidx/compose/runtime/RememberObserver; +Landroidx/compose/runtime/ScopeUpdateScope; +Landroidx/compose/runtime/SkippableUpdater; +HSPLandroidx/compose/runtime/SkippableUpdater;->(Landroidx/compose/runtime/Composer;)V +HSPLandroidx/compose/runtime/SkippableUpdater;->box-impl(Landroidx/compose/runtime/Composer;)Landroidx/compose/runtime/SkippableUpdater; +HSPLandroidx/compose/runtime/SkippableUpdater;->constructor-impl(Landroidx/compose/runtime/Composer;)Landroidx/compose/runtime/Composer; +HSPLandroidx/compose/runtime/SkippableUpdater;->unbox-impl()Landroidx/compose/runtime/Composer; +Landroidx/compose/runtime/SlotReader; +HSPLandroidx/compose/runtime/SlotReader;->(Landroidx/compose/runtime/SlotTable;)V +HSPLandroidx/compose/runtime/SlotReader;->anchor(I)Landroidx/compose/runtime/Anchor; +HSPLandroidx/compose/runtime/SlotReader;->aux([II)Ljava/lang/Object; +HSPLandroidx/compose/runtime/SlotReader;->beginEmpty()V +HSPLandroidx/compose/runtime/SlotReader;->close()V +HSPLandroidx/compose/runtime/SlotReader;->containsMark(I)Z +HSPLandroidx/compose/runtime/SlotReader;->endEmpty()V +HSPLandroidx/compose/runtime/SlotReader;->endGroup()V +HSPLandroidx/compose/runtime/SlotReader;->extractKeys()Ljava/util/List; +HSPLandroidx/compose/runtime/SlotReader;->forEachData$runtime_release(ILkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/runtime/SlotReader;->getCurrentEnd()I +HSPLandroidx/compose/runtime/SlotReader;->getCurrentGroup()I +HSPLandroidx/compose/runtime/SlotReader;->getGroupAux()Ljava/lang/Object; +HSPLandroidx/compose/runtime/SlotReader;->getGroupEnd()I +HSPLandroidx/compose/runtime/SlotReader;->getGroupKey()I +HSPLandroidx/compose/runtime/SlotReader;->getGroupObjectKey()Ljava/lang/Object; +HSPLandroidx/compose/runtime/SlotReader;->getGroupSize()I +HSPLandroidx/compose/runtime/SlotReader;->getGroupSlotIndex()I +HSPLandroidx/compose/runtime/SlotReader;->getInEmpty()Z +HSPLandroidx/compose/runtime/SlotReader;->getParent()I +HSPLandroidx/compose/runtime/SlotReader;->getParentNodes()I +HSPLandroidx/compose/runtime/SlotReader;->getSize()I +HSPLandroidx/compose/runtime/SlotReader;->getTable$runtime_release()Landroidx/compose/runtime/SlotTable; +HSPLandroidx/compose/runtime/SlotReader;->groupAux(I)Ljava/lang/Object; +HSPLandroidx/compose/runtime/SlotReader;->groupGet(I)Ljava/lang/Object; +HSPLandroidx/compose/runtime/SlotReader;->groupGet(II)Ljava/lang/Object; +HSPLandroidx/compose/runtime/SlotReader;->groupKey(I)I +HSPLandroidx/compose/runtime/SlotReader;->groupObjectKey(I)Ljava/lang/Object; +HSPLandroidx/compose/runtime/SlotReader;->groupSize(I)I +HSPLandroidx/compose/runtime/SlotReader;->hasMark(I)Z +HSPLandroidx/compose/runtime/SlotReader;->hasObjectKey(I)Z +HSPLandroidx/compose/runtime/SlotReader;->isGroupEnd()Z +HSPLandroidx/compose/runtime/SlotReader;->isNode()Z +HSPLandroidx/compose/runtime/SlotReader;->isNode(I)Z +HSPLandroidx/compose/runtime/SlotReader;->next()Ljava/lang/Object; +HSPLandroidx/compose/runtime/SlotReader;->node(I)Ljava/lang/Object; +HSPLandroidx/compose/runtime/SlotReader;->node([II)Ljava/lang/Object; +HSPLandroidx/compose/runtime/SlotReader;->nodeCount(I)I +HSPLandroidx/compose/runtime/SlotReader;->objectKey([II)Ljava/lang/Object; +HSPLandroidx/compose/runtime/SlotReader;->parent(I)I +HSPLandroidx/compose/runtime/SlotReader;->reposition(I)V +HSPLandroidx/compose/runtime/SlotReader;->restoreParent(I)V +HSPLandroidx/compose/runtime/SlotReader;->skipGroup()I +HSPLandroidx/compose/runtime/SlotReader;->skipToGroupEnd()V +HSPLandroidx/compose/runtime/SlotReader;->startGroup()V +HSPLandroidx/compose/runtime/SlotReader;->startNode()V +Landroidx/compose/runtime/SlotTable; +HSPLandroidx/compose/runtime/SlotTable;->()V +HSPLandroidx/compose/runtime/SlotTable;->anchorIndex(Landroidx/compose/runtime/Anchor;)I +HSPLandroidx/compose/runtime/SlotTable;->close$runtime_release(Landroidx/compose/runtime/SlotReader;)V +HSPLandroidx/compose/runtime/SlotTable;->close$runtime_release(Landroidx/compose/runtime/SlotWriter;[II[Ljava/lang/Object;ILjava/util/ArrayList;)V +HSPLandroidx/compose/runtime/SlotTable;->containsMark()Z +HSPLandroidx/compose/runtime/SlotTable;->getAnchors$runtime_release()Ljava/util/ArrayList; +HSPLandroidx/compose/runtime/SlotTable;->getGroups()[I +HSPLandroidx/compose/runtime/SlotTable;->getGroupsSize()I +HSPLandroidx/compose/runtime/SlotTable;->getSlots()[Ljava/lang/Object; +HSPLandroidx/compose/runtime/SlotTable;->getSlotsSize()I +HSPLandroidx/compose/runtime/SlotTable;->isEmpty()Z +HSPLandroidx/compose/runtime/SlotTable;->openReader()Landroidx/compose/runtime/SlotReader; +HSPLandroidx/compose/runtime/SlotTable;->openWriter()Landroidx/compose/runtime/SlotWriter; +HSPLandroidx/compose/runtime/SlotTable;->ownsAnchor(Landroidx/compose/runtime/Anchor;)Z +HSPLandroidx/compose/runtime/SlotTable;->setTo$runtime_release([II[Ljava/lang/Object;ILjava/util/ArrayList;)V +Landroidx/compose/runtime/SlotTableKt; +HSPLandroidx/compose/runtime/SlotTableKt;->access$addAux([II)V +HSPLandroidx/compose/runtime/SlotTableKt;->access$auxIndex([II)I +HSPLandroidx/compose/runtime/SlotTableKt;->access$containsAnyMark([II)Z +HSPLandroidx/compose/runtime/SlotTableKt;->access$containsMark([II)Z +HSPLandroidx/compose/runtime/SlotTableKt;->access$countOneBits(I)I +HSPLandroidx/compose/runtime/SlotTableKt;->access$dataAnchor([II)I +HSPLandroidx/compose/runtime/SlotTableKt;->access$groupInfo([II)I +HSPLandroidx/compose/runtime/SlotTableKt;->access$groupSize([II)I +HSPLandroidx/compose/runtime/SlotTableKt;->access$hasAux([II)Z +HSPLandroidx/compose/runtime/SlotTableKt;->access$hasMark([II)Z +HSPLandroidx/compose/runtime/SlotTableKt;->access$hasObjectKey([II)Z +HSPLandroidx/compose/runtime/SlotTableKt;->access$initGroup([IIIZZZII)V +HSPLandroidx/compose/runtime/SlotTableKt;->access$isNode([II)Z +HSPLandroidx/compose/runtime/SlotTableKt;->access$key([II)I +HSPLandroidx/compose/runtime/SlotTableKt;->access$locationOf(Ljava/util/ArrayList;II)I +HSPLandroidx/compose/runtime/SlotTableKt;->access$nodeCount([II)I +HSPLandroidx/compose/runtime/SlotTableKt;->access$nodeIndex([II)I +HSPLandroidx/compose/runtime/SlotTableKt;->access$objectKeyIndex([II)I +HSPLandroidx/compose/runtime/SlotTableKt;->access$parentAnchor([II)I +HSPLandroidx/compose/runtime/SlotTableKt;->access$search(Ljava/util/ArrayList;II)I +HSPLandroidx/compose/runtime/SlotTableKt;->access$slotAnchor([II)I +HSPLandroidx/compose/runtime/SlotTableKt;->access$updateContainsMark([IIZ)V +HSPLandroidx/compose/runtime/SlotTableKt;->access$updateDataAnchor([III)V +HSPLandroidx/compose/runtime/SlotTableKt;->access$updateGroupSize([III)V +HSPLandroidx/compose/runtime/SlotTableKt;->access$updateMark([IIZ)V +HSPLandroidx/compose/runtime/SlotTableKt;->access$updateNodeCount([III)V +HSPLandroidx/compose/runtime/SlotTableKt;->access$updateParentAnchor([III)V +HSPLandroidx/compose/runtime/SlotTableKt;->addAux([II)V +HSPLandroidx/compose/runtime/SlotTableKt;->auxIndex([II)I +HSPLandroidx/compose/runtime/SlotTableKt;->containsAnyMark([II)Z +HSPLandroidx/compose/runtime/SlotTableKt;->containsMark([II)Z +HSPLandroidx/compose/runtime/SlotTableKt;->countOneBits(I)I +HSPLandroidx/compose/runtime/SlotTableKt;->dataAnchor([II)I +HSPLandroidx/compose/runtime/SlotTableKt;->groupInfo([II)I +HSPLandroidx/compose/runtime/SlotTableKt;->groupSize([II)I +HSPLandroidx/compose/runtime/SlotTableKt;->hasAux([II)Z +HSPLandroidx/compose/runtime/SlotTableKt;->hasMark([II)Z +HSPLandroidx/compose/runtime/SlotTableKt;->hasObjectKey([II)Z +HSPLandroidx/compose/runtime/SlotTableKt;->initGroup([IIIZZZII)V +HSPLandroidx/compose/runtime/SlotTableKt;->isNode([II)Z +HSPLandroidx/compose/runtime/SlotTableKt;->key([II)I +HSPLandroidx/compose/runtime/SlotTableKt;->locationOf(Ljava/util/ArrayList;II)I +HSPLandroidx/compose/runtime/SlotTableKt;->nodeCount([II)I +HSPLandroidx/compose/runtime/SlotTableKt;->nodeIndex([II)I +HSPLandroidx/compose/runtime/SlotTableKt;->objectKeyIndex([II)I +HSPLandroidx/compose/runtime/SlotTableKt;->parentAnchor([II)I +HSPLandroidx/compose/runtime/SlotTableKt;->search(Ljava/util/ArrayList;II)I +HSPLandroidx/compose/runtime/SlotTableKt;->slotAnchor([II)I +HSPLandroidx/compose/runtime/SlotTableKt;->updateContainsMark([IIZ)V +HSPLandroidx/compose/runtime/SlotTableKt;->updateDataAnchor([III)V +HSPLandroidx/compose/runtime/SlotTableKt;->updateGroupSize([III)V +HSPLandroidx/compose/runtime/SlotTableKt;->updateMark([IIZ)V +HSPLandroidx/compose/runtime/SlotTableKt;->updateNodeCount([III)V +HSPLandroidx/compose/runtime/SlotTableKt;->updateParentAnchor([III)V +Landroidx/compose/runtime/SlotWriter; +HSPLandroidx/compose/runtime/SlotWriter;->()V +HSPLandroidx/compose/runtime/SlotWriter;->(Landroidx/compose/runtime/SlotTable;)V +HSPLandroidx/compose/runtime/SlotWriter;->access$containsAnyGroupMarks(Landroidx/compose/runtime/SlotWriter;I)Z +HSPLandroidx/compose/runtime/SlotWriter;->access$dataIndex(Landroidx/compose/runtime/SlotWriter;I)I +HSPLandroidx/compose/runtime/SlotWriter;->access$dataIndex(Landroidx/compose/runtime/SlotWriter;[II)I +HSPLandroidx/compose/runtime/SlotWriter;->access$dataIndexToDataAddress(Landroidx/compose/runtime/SlotWriter;I)I +HSPLandroidx/compose/runtime/SlotWriter;->access$dataIndexToDataAnchor(Landroidx/compose/runtime/SlotWriter;IIII)I +HSPLandroidx/compose/runtime/SlotWriter;->access$getAnchors$p(Landroidx/compose/runtime/SlotWriter;)Ljava/util/ArrayList; +HSPLandroidx/compose/runtime/SlotWriter;->access$getCurrentSlot$p(Landroidx/compose/runtime/SlotWriter;)I +HSPLandroidx/compose/runtime/SlotWriter;->access$getGroupGapStart$p(Landroidx/compose/runtime/SlotWriter;)I +HSPLandroidx/compose/runtime/SlotWriter;->access$getGroups$p(Landroidx/compose/runtime/SlotWriter;)[I +HSPLandroidx/compose/runtime/SlotWriter;->access$getNodeCount$p(Landroidx/compose/runtime/SlotWriter;)I +HSPLandroidx/compose/runtime/SlotWriter;->access$getSlots$p(Landroidx/compose/runtime/SlotWriter;)[Ljava/lang/Object; +HSPLandroidx/compose/runtime/SlotWriter;->access$getSlotsGapLen$p(Landroidx/compose/runtime/SlotWriter;)I +HSPLandroidx/compose/runtime/SlotWriter;->access$getSlotsGapOwner$p(Landroidx/compose/runtime/SlotWriter;)I +HSPLandroidx/compose/runtime/SlotWriter;->access$getSlotsGapStart$p(Landroidx/compose/runtime/SlotWriter;)I +HSPLandroidx/compose/runtime/SlotWriter;->access$insertGroups(Landroidx/compose/runtime/SlotWriter;I)V +HSPLandroidx/compose/runtime/SlotWriter;->access$insertSlots(Landroidx/compose/runtime/SlotWriter;II)V +HSPLandroidx/compose/runtime/SlotWriter;->access$setCurrentGroup$p(Landroidx/compose/runtime/SlotWriter;I)V +HSPLandroidx/compose/runtime/SlotWriter;->access$setCurrentSlot$p(Landroidx/compose/runtime/SlotWriter;I)V +HSPLandroidx/compose/runtime/SlotWriter;->access$setNodeCount$p(Landroidx/compose/runtime/SlotWriter;I)V +HSPLandroidx/compose/runtime/SlotWriter;->access$setSlotsGapOwner$p(Landroidx/compose/runtime/SlotWriter;I)V +HSPLandroidx/compose/runtime/SlotWriter;->access$updateContainsMark(Landroidx/compose/runtime/SlotWriter;I)V +HSPLandroidx/compose/runtime/SlotWriter;->advanceBy(I)V +HSPLandroidx/compose/runtime/SlotWriter;->anchor(I)Landroidx/compose/runtime/Anchor; +HSPLandroidx/compose/runtime/SlotWriter;->anchorIndex(Landroidx/compose/runtime/Anchor;)I +HSPLandroidx/compose/runtime/SlotWriter;->auxIndex([II)I +HSPLandroidx/compose/runtime/SlotWriter;->beginInsert()V +HSPLandroidx/compose/runtime/SlotWriter;->childContainsAnyMarks(I)Z +HSPLandroidx/compose/runtime/SlotWriter;->clearSlotGap()V +HSPLandroidx/compose/runtime/SlotWriter;->close()V +HSPLandroidx/compose/runtime/SlotWriter;->containsAnyGroupMarks(I)Z +HSPLandroidx/compose/runtime/SlotWriter;->containsGroupMark(I)Z +HSPLandroidx/compose/runtime/SlotWriter;->dataAnchorToDataIndex(III)I +HSPLandroidx/compose/runtime/SlotWriter;->dataIndex(I)I +HSPLandroidx/compose/runtime/SlotWriter;->dataIndex([II)I +HSPLandroidx/compose/runtime/SlotWriter;->dataIndexToDataAddress(I)I +HSPLandroidx/compose/runtime/SlotWriter;->dataIndexToDataAnchor(IIII)I +HSPLandroidx/compose/runtime/SlotWriter;->endGroup()I +HSPLandroidx/compose/runtime/SlotWriter;->endInsert()V +HSPLandroidx/compose/runtime/SlotWriter;->ensureStarted(I)V +HSPLandroidx/compose/runtime/SlotWriter;->ensureStarted(Landroidx/compose/runtime/Anchor;)V +HSPLandroidx/compose/runtime/SlotWriter;->fixParentAnchorsFor(III)V +HSPLandroidx/compose/runtime/SlotWriter;->getCapacity()I +HSPLandroidx/compose/runtime/SlotWriter;->getClosed()Z +HSPLandroidx/compose/runtime/SlotWriter;->getCurrentGroup()I +HSPLandroidx/compose/runtime/SlotWriter;->getParent()I +HSPLandroidx/compose/runtime/SlotWriter;->getSize$runtime_release()I +HSPLandroidx/compose/runtime/SlotWriter;->getTable$runtime_release()Landroidx/compose/runtime/SlotTable; +HSPLandroidx/compose/runtime/SlotWriter;->groupAux(I)Ljava/lang/Object; +HSPLandroidx/compose/runtime/SlotWriter;->groupIndexToAddress(I)I +HSPLandroidx/compose/runtime/SlotWriter;->groupKey(I)I +HSPLandroidx/compose/runtime/SlotWriter;->groupObjectKey(I)Ljava/lang/Object; +HSPLandroidx/compose/runtime/SlotWriter;->groupSize(I)I +HSPLandroidx/compose/runtime/SlotWriter;->groupSlots()Ljava/util/Iterator; +HSPLandroidx/compose/runtime/SlotWriter;->insertAux(Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/SlotWriter;->insertGroups(I)V +HSPLandroidx/compose/runtime/SlotWriter;->insertSlots(II)V +HSPLandroidx/compose/runtime/SlotWriter;->markGroup$default(Landroidx/compose/runtime/SlotWriter;IILjava/lang/Object;)V +HSPLandroidx/compose/runtime/SlotWriter;->markGroup(I)V +HSPLandroidx/compose/runtime/SlotWriter;->moveAnchors(III)V +HSPLandroidx/compose/runtime/SlotWriter;->moveFrom(Landroidx/compose/runtime/SlotTable;IZ)Ljava/util/List; +HSPLandroidx/compose/runtime/SlotWriter;->moveGroup(I)V +HSPLandroidx/compose/runtime/SlotWriter;->moveGroupGapTo(I)V +HSPLandroidx/compose/runtime/SlotWriter;->moveSlotGapTo(II)V +HSPLandroidx/compose/runtime/SlotWriter;->node(I)Ljava/lang/Object; +HSPLandroidx/compose/runtime/SlotWriter;->node(Landroidx/compose/runtime/Anchor;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/SlotWriter;->nodeIndex([II)I +HSPLandroidx/compose/runtime/SlotWriter;->parent(I)I +HSPLandroidx/compose/runtime/SlotWriter;->parent([II)I +HSPLandroidx/compose/runtime/SlotWriter;->parentIndexToAnchor(II)I +HSPLandroidx/compose/runtime/SlotWriter;->recalculateMarks()V +HSPLandroidx/compose/runtime/SlotWriter;->removeAnchors(II)Z +HSPLandroidx/compose/runtime/SlotWriter;->removeGroup()Z +HSPLandroidx/compose/runtime/SlotWriter;->removeGroups(II)Z +HSPLandroidx/compose/runtime/SlotWriter;->removeSlots(III)V +HSPLandroidx/compose/runtime/SlotWriter;->restoreCurrentGroupEnd()I +HSPLandroidx/compose/runtime/SlotWriter;->saveCurrentGroupEnd()V +HSPLandroidx/compose/runtime/SlotWriter;->set(ILjava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/SlotWriter;->set(Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/SlotWriter;->skip()Ljava/lang/Object; +HSPLandroidx/compose/runtime/SlotWriter;->skipGroup()I +HSPLandroidx/compose/runtime/SlotWriter;->skipToGroupEnd()V +HSPLandroidx/compose/runtime/SlotWriter;->slot(II)Ljava/lang/Object; +HSPLandroidx/compose/runtime/SlotWriter;->slotIndex([II)I +HSPLandroidx/compose/runtime/SlotWriter;->startData(ILjava/lang/Object;Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/SlotWriter;->startGroup()V +HSPLandroidx/compose/runtime/SlotWriter;->startGroup(ILjava/lang/Object;)V +HSPLandroidx/compose/runtime/SlotWriter;->startGroup(ILjava/lang/Object;ZLjava/lang/Object;)V +HSPLandroidx/compose/runtime/SlotWriter;->startNode(ILjava/lang/Object;)V +HSPLandroidx/compose/runtime/SlotWriter;->update(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/SlotWriter;->updateAnchors(II)V +HSPLandroidx/compose/runtime/SlotWriter;->updateAux(Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/SlotWriter;->updateContainsMark(I)V +HSPLandroidx/compose/runtime/SlotWriter;->updateContainsMarkNow(ILandroidx/compose/runtime/PrioritySet;)V +HSPLandroidx/compose/runtime/SlotWriter;->updateDataIndex([III)V +HSPLandroidx/compose/runtime/SlotWriter;->updateNode(Landroidx/compose/runtime/Anchor;Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/SlotWriter;->updateNodeOfGroup(ILjava/lang/Object;)V +Landroidx/compose/runtime/SlotWriter$Companion; +HSPLandroidx/compose/runtime/SlotWriter$Companion;->()V +HSPLandroidx/compose/runtime/SlotWriter$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/runtime/SlotWriter$Companion;->access$moveGroup(Landroidx/compose/runtime/SlotWriter$Companion;Landroidx/compose/runtime/SlotWriter;ILandroidx/compose/runtime/SlotWriter;ZZZ)Ljava/util/List; +HSPLandroidx/compose/runtime/SlotWriter$Companion;->moveGroup(Landroidx/compose/runtime/SlotWriter;ILandroidx/compose/runtime/SlotWriter;ZZZ)Ljava/util/List; +Landroidx/compose/runtime/SlotWriter$groupSlots$1; +HSPLandroidx/compose/runtime/SlotWriter$groupSlots$1;->(IILandroidx/compose/runtime/SlotWriter;)V +HSPLandroidx/compose/runtime/SlotWriter$groupSlots$1;->hasNext()Z +HSPLandroidx/compose/runtime/SlotWriter$groupSlots$1;->next()Ljava/lang/Object; +Landroidx/compose/runtime/SnapshotIntStateKt; +HSPLandroidx/compose/runtime/SnapshotIntStateKt;->mutableIntStateOf(I)Landroidx/compose/runtime/MutableIntState; +Landroidx/compose/runtime/SnapshotIntStateKt__SnapshotIntStateKt; +HSPLandroidx/compose/runtime/SnapshotIntStateKt__SnapshotIntStateKt;->mutableIntStateOf(I)Landroidx/compose/runtime/MutableIntState; +Landroidx/compose/runtime/SnapshotLongStateKt; +HSPLandroidx/compose/runtime/SnapshotLongStateKt;->mutableLongStateOf(J)Landroidx/compose/runtime/MutableLongState; +Landroidx/compose/runtime/SnapshotLongStateKt__SnapshotLongStateKt; +HSPLandroidx/compose/runtime/SnapshotLongStateKt__SnapshotLongStateKt;->mutableLongStateOf(J)Landroidx/compose/runtime/MutableLongState; +Landroidx/compose/runtime/SnapshotMutableFloatStateImpl; +HSPLandroidx/compose/runtime/SnapshotMutableFloatStateImpl;->(F)V +HSPLandroidx/compose/runtime/SnapshotMutableFloatStateImpl;->getFirstStateRecord()Landroidx/compose/runtime/snapshots/StateRecord; +HSPLandroidx/compose/runtime/SnapshotMutableFloatStateImpl;->getFloatValue()F +HSPLandroidx/compose/runtime/SnapshotMutableFloatStateImpl;->setFloatValue(F)V +Landroidx/compose/runtime/SnapshotMutableFloatStateImpl$FloatStateStateRecord; +HSPLandroidx/compose/runtime/SnapshotMutableFloatStateImpl$FloatStateStateRecord;->(F)V +HSPLandroidx/compose/runtime/SnapshotMutableFloatStateImpl$FloatStateStateRecord;->getValue()F +Landroidx/compose/runtime/SnapshotMutableIntStateImpl; +HSPLandroidx/compose/runtime/SnapshotMutableIntStateImpl;->(I)V +HSPLandroidx/compose/runtime/SnapshotMutableIntStateImpl;->getFirstStateRecord()Landroidx/compose/runtime/snapshots/StateRecord; +HSPLandroidx/compose/runtime/SnapshotMutableIntStateImpl;->getIntValue()I +HSPLandroidx/compose/runtime/SnapshotMutableIntStateImpl;->prependStateRecord(Landroidx/compose/runtime/snapshots/StateRecord;)V +HSPLandroidx/compose/runtime/SnapshotMutableIntStateImpl;->setIntValue(I)V +Landroidx/compose/runtime/SnapshotMutableIntStateImpl$IntStateStateRecord; +HSPLandroidx/compose/runtime/SnapshotMutableIntStateImpl$IntStateStateRecord;->(I)V +HSPLandroidx/compose/runtime/SnapshotMutableIntStateImpl$IntStateStateRecord;->assign(Landroidx/compose/runtime/snapshots/StateRecord;)V +HSPLandroidx/compose/runtime/SnapshotMutableIntStateImpl$IntStateStateRecord;->create()Landroidx/compose/runtime/snapshots/StateRecord; +HSPLandroidx/compose/runtime/SnapshotMutableIntStateImpl$IntStateStateRecord;->getValue()I +HSPLandroidx/compose/runtime/SnapshotMutableIntStateImpl$IntStateStateRecord;->setValue(I)V +Landroidx/compose/runtime/SnapshotMutableLongStateImpl; +HSPLandroidx/compose/runtime/SnapshotMutableLongStateImpl;->(J)V +HSPLandroidx/compose/runtime/SnapshotMutableLongStateImpl;->getFirstStateRecord()Landroidx/compose/runtime/snapshots/StateRecord; +HSPLandroidx/compose/runtime/SnapshotMutableLongStateImpl;->getLongValue()J +HSPLandroidx/compose/runtime/SnapshotMutableLongStateImpl;->prependStateRecord(Landroidx/compose/runtime/snapshots/StateRecord;)V +HSPLandroidx/compose/runtime/SnapshotMutableLongStateImpl;->setLongValue(J)V +Landroidx/compose/runtime/SnapshotMutableLongStateImpl$LongStateStateRecord; +HSPLandroidx/compose/runtime/SnapshotMutableLongStateImpl$LongStateStateRecord;->(J)V +HSPLandroidx/compose/runtime/SnapshotMutableLongStateImpl$LongStateStateRecord;->assign(Landroidx/compose/runtime/snapshots/StateRecord;)V +HSPLandroidx/compose/runtime/SnapshotMutableLongStateImpl$LongStateStateRecord;->create()Landroidx/compose/runtime/snapshots/StateRecord; +HSPLandroidx/compose/runtime/SnapshotMutableLongStateImpl$LongStateStateRecord;->getValue()J +HSPLandroidx/compose/runtime/SnapshotMutableLongStateImpl$LongStateStateRecord;->setValue(J)V +Landroidx/compose/runtime/SnapshotMutableStateImpl; +HSPLandroidx/compose/runtime/SnapshotMutableStateImpl;->(Ljava/lang/Object;Landroidx/compose/runtime/SnapshotMutationPolicy;)V +HSPLandroidx/compose/runtime/SnapshotMutableStateImpl;->getFirstStateRecord()Landroidx/compose/runtime/snapshots/StateRecord; +HSPLandroidx/compose/runtime/SnapshotMutableStateImpl;->getPolicy()Landroidx/compose/runtime/SnapshotMutationPolicy; +HSPLandroidx/compose/runtime/SnapshotMutableStateImpl;->getValue()Ljava/lang/Object; +HSPLandroidx/compose/runtime/SnapshotMutableStateImpl;->prependStateRecord(Landroidx/compose/runtime/snapshots/StateRecord;)V +HSPLandroidx/compose/runtime/SnapshotMutableStateImpl;->setValue(Ljava/lang/Object;)V +Landroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord; +HSPLandroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;->(Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;->assign(Landroidx/compose/runtime/snapshots/StateRecord;)V +HSPLandroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;->create()Landroidx/compose/runtime/snapshots/StateRecord; +HSPLandroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;->getValue()Ljava/lang/Object; +HSPLandroidx/compose/runtime/SnapshotMutableStateImpl$StateStateRecord;->setValue(Ljava/lang/Object;)V +Landroidx/compose/runtime/SnapshotMutationPolicy; +Landroidx/compose/runtime/SnapshotStateKt; +HSPLandroidx/compose/runtime/SnapshotStateKt;->collectAsState(Lkotlinx/coroutines/flow/Flow;Ljava/lang/Object;Lkotlin/coroutines/CoroutineContext;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/State; +HSPLandroidx/compose/runtime/SnapshotStateKt;->collectAsState(Lkotlinx/coroutines/flow/StateFlow;Lkotlin/coroutines/CoroutineContext;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/State; +HSPLandroidx/compose/runtime/SnapshotStateKt;->derivedStateObservers()Landroidx/compose/runtime/collection/MutableVector; +HSPLandroidx/compose/runtime/SnapshotStateKt;->derivedStateOf(Landroidx/compose/runtime/SnapshotMutationPolicy;Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/State; +HSPLandroidx/compose/runtime/SnapshotStateKt;->derivedStateOf(Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/State; +HSPLandroidx/compose/runtime/SnapshotStateKt;->mutableStateListOf()Landroidx/compose/runtime/snapshots/SnapshotStateList; +HSPLandroidx/compose/runtime/SnapshotStateKt;->mutableStateListOf([Ljava/lang/Object;)Landroidx/compose/runtime/snapshots/SnapshotStateList; +HSPLandroidx/compose/runtime/SnapshotStateKt;->mutableStateMapOf()Landroidx/compose/runtime/snapshots/SnapshotStateMap; +HSPLandroidx/compose/runtime/SnapshotStateKt;->mutableStateOf$default(Ljava/lang/Object;Landroidx/compose/runtime/SnapshotMutationPolicy;ILjava/lang/Object;)Landroidx/compose/runtime/MutableState; +HSPLandroidx/compose/runtime/SnapshotStateKt;->mutableStateOf(Ljava/lang/Object;Landroidx/compose/runtime/SnapshotMutationPolicy;)Landroidx/compose/runtime/MutableState; +HSPLandroidx/compose/runtime/SnapshotStateKt;->neverEqualPolicy()Landroidx/compose/runtime/SnapshotMutationPolicy; +HSPLandroidx/compose/runtime/SnapshotStateKt;->produceState(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State; +HSPLandroidx/compose/runtime/SnapshotStateKt;->referentialEqualityPolicy()Landroidx/compose/runtime/SnapshotMutationPolicy; +HSPLandroidx/compose/runtime/SnapshotStateKt;->rememberUpdatedState(Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State; +HSPLandroidx/compose/runtime/SnapshotStateKt;->snapshotFlow(Lkotlin/jvm/functions/Function0;)Lkotlinx/coroutines/flow/Flow; +HSPLandroidx/compose/runtime/SnapshotStateKt;->structuralEqualityPolicy()Landroidx/compose/runtime/SnapshotMutationPolicy; +Landroidx/compose/runtime/SnapshotStateKt__DerivedStateKt; +HSPLandroidx/compose/runtime/SnapshotStateKt__DerivedStateKt;->()V +HSPLandroidx/compose/runtime/SnapshotStateKt__DerivedStateKt;->access$getCalculationBlockNestedLevel$p()Landroidx/compose/runtime/SnapshotThreadLocal; +HSPLandroidx/compose/runtime/SnapshotStateKt__DerivedStateKt;->derivedStateObservers()Landroidx/compose/runtime/collection/MutableVector; +HSPLandroidx/compose/runtime/SnapshotStateKt__DerivedStateKt;->derivedStateOf(Landroidx/compose/runtime/SnapshotMutationPolicy;Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/State; +HSPLandroidx/compose/runtime/SnapshotStateKt__DerivedStateKt;->derivedStateOf(Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/State; +Landroidx/compose/runtime/SnapshotStateKt__ProduceStateKt; +HSPLandroidx/compose/runtime/SnapshotStateKt__ProduceStateKt;->produceState(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State; +Landroidx/compose/runtime/SnapshotStateKt__ProduceStateKt$produceState$3; +HSPLandroidx/compose/runtime/SnapshotStateKt__ProduceStateKt$produceState$3;->(Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/runtime/SnapshotStateKt__ProduceStateKt$produceState$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/runtime/SnapshotStateKt__ProduceStateKt$produceState$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt; +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt;->access$intersects(Ljava/util/Set;Ljava/util/Set;)Z +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt;->collectAsState(Lkotlinx/coroutines/flow/Flow;Ljava/lang/Object;Lkotlin/coroutines/CoroutineContext;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/State; +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt;->collectAsState(Lkotlinx/coroutines/flow/StateFlow;Lkotlin/coroutines/CoroutineContext;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/State; +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt;->intersects$SnapshotStateKt__SnapshotFlowKt(Ljava/util/Set;Ljava/util/Set;)Z +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt;->snapshotFlow(Lkotlin/jvm/functions/Function0;)Lkotlinx/coroutines/flow/Flow; +Landroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1; +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1;->(Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1;->invoke(Landroidx/compose/runtime/ProduceStateScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1$1; +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1$1;->(Landroidx/compose/runtime/ProduceStateScope;)V +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$collectAsState$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1; +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1;->(Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1$readObserver$1; +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1$readObserver$1;->(Ljava/util/Set;)V +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1$readObserver$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1$readObserver$1;->invoke(Ljava/lang/Object;)V +Landroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1$unregisterApplyObserver$1; +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1$unregisterApplyObserver$1;->(Lkotlinx/coroutines/channels/Channel;)V +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1$unregisterApplyObserver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotFlowKt$snapshotFlow$1$unregisterApplyObserver$1;->invoke(Ljava/util/Set;Landroidx/compose/runtime/snapshots/Snapshot;)V +Landroidx/compose/runtime/SnapshotStateKt__SnapshotMutationPolicyKt; +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotMutationPolicyKt;->neverEqualPolicy()Landroidx/compose/runtime/SnapshotMutationPolicy; +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotMutationPolicyKt;->referentialEqualityPolicy()Landroidx/compose/runtime/SnapshotMutationPolicy; +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotMutationPolicyKt;->structuralEqualityPolicy()Landroidx/compose/runtime/SnapshotMutationPolicy; +Landroidx/compose/runtime/SnapshotStateKt__SnapshotStateKt; +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotStateKt;->mutableStateListOf()Landroidx/compose/runtime/snapshots/SnapshotStateList; +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotStateKt;->mutableStateListOf([Ljava/lang/Object;)Landroidx/compose/runtime/snapshots/SnapshotStateList; +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotStateKt;->mutableStateMapOf()Landroidx/compose/runtime/snapshots/SnapshotStateMap; +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotStateKt;->mutableStateOf$default(Ljava/lang/Object;Landroidx/compose/runtime/SnapshotMutationPolicy;ILjava/lang/Object;)Landroidx/compose/runtime/MutableState; +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotStateKt;->mutableStateOf(Ljava/lang/Object;Landroidx/compose/runtime/SnapshotMutationPolicy;)Landroidx/compose/runtime/MutableState; +HSPLandroidx/compose/runtime/SnapshotStateKt__SnapshotStateKt;->rememberUpdatedState(Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State; +Landroidx/compose/runtime/SnapshotThreadLocal; +HSPLandroidx/compose/runtime/SnapshotThreadLocal;->()V +HSPLandroidx/compose/runtime/SnapshotThreadLocal;->get()Ljava/lang/Object; +HSPLandroidx/compose/runtime/SnapshotThreadLocal;->set(Ljava/lang/Object;)V +Landroidx/compose/runtime/Stack; +HSPLandroidx/compose/runtime/Stack;->()V +HSPLandroidx/compose/runtime/Stack;->clear()V +HSPLandroidx/compose/runtime/Stack;->getSize()I +HSPLandroidx/compose/runtime/Stack;->isEmpty()Z +HSPLandroidx/compose/runtime/Stack;->isNotEmpty()Z +HSPLandroidx/compose/runtime/Stack;->peek()Ljava/lang/Object; +HSPLandroidx/compose/runtime/Stack;->peek(I)Ljava/lang/Object; +HSPLandroidx/compose/runtime/Stack;->pop()Ljava/lang/Object; +HSPLandroidx/compose/runtime/Stack;->push(Ljava/lang/Object;)Z +HSPLandroidx/compose/runtime/Stack;->toArray()[Ljava/lang/Object; +Landroidx/compose/runtime/State; +Landroidx/compose/runtime/StaticProvidableCompositionLocal; +HSPLandroidx/compose/runtime/StaticProvidableCompositionLocal;->(Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/runtime/StaticProvidableCompositionLocal;->provided$runtime_release(Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State; +Landroidx/compose/runtime/StaticValueHolder; +HSPLandroidx/compose/runtime/StaticValueHolder;->(Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/StaticValueHolder;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/runtime/StaticValueHolder;->getValue()Ljava/lang/Object; +Landroidx/compose/runtime/StructuralEqualityPolicy; +HSPLandroidx/compose/runtime/StructuralEqualityPolicy;->()V +HSPLandroidx/compose/runtime/StructuralEqualityPolicy;->()V +HSPLandroidx/compose/runtime/StructuralEqualityPolicy;->equivalent(Ljava/lang/Object;Ljava/lang/Object;)Z +Landroidx/compose/runtime/Trace; +HSPLandroidx/compose/runtime/Trace;->()V +HSPLandroidx/compose/runtime/Trace;->()V +HSPLandroidx/compose/runtime/Trace;->beginSection(Ljava/lang/String;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/Trace;->endSection(Ljava/lang/Object;)V +Landroidx/compose/runtime/Updater; +HSPLandroidx/compose/runtime/Updater;->constructor-impl(Landroidx/compose/runtime/Composer;)Landroidx/compose/runtime/Composer; +HSPLandroidx/compose/runtime/Updater;->set-impl(Landroidx/compose/runtime/Composer;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V +Landroidx/compose/runtime/WeakReference; +HSPLandroidx/compose/runtime/WeakReference;->(Ljava/lang/Object;)V +Landroidx/compose/runtime/collection/IdentityArrayIntMap; +HSPLandroidx/compose/runtime/collection/IdentityArrayIntMap;->()V +HSPLandroidx/compose/runtime/collection/IdentityArrayIntMap;->access$setSize$p(Landroidx/compose/runtime/collection/IdentityArrayIntMap;I)V +HSPLandroidx/compose/runtime/collection/IdentityArrayIntMap;->add(Ljava/lang/Object;I)I +HSPLandroidx/compose/runtime/collection/IdentityArrayIntMap;->find(Ljava/lang/Object;)I +HSPLandroidx/compose/runtime/collection/IdentityArrayIntMap;->getKeys()[Ljava/lang/Object; +HSPLandroidx/compose/runtime/collection/IdentityArrayIntMap;->getSize()I +HSPLandroidx/compose/runtime/collection/IdentityArrayIntMap;->getValues()[I +Landroidx/compose/runtime/collection/IdentityArrayMap; +HSPLandroidx/compose/runtime/collection/IdentityArrayMap;->(I)V +HSPLandroidx/compose/runtime/collection/IdentityArrayMap;->(IILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/runtime/collection/IdentityArrayMap;->access$setSize$p(Landroidx/compose/runtime/collection/IdentityArrayMap;I)V +HSPLandroidx/compose/runtime/collection/IdentityArrayMap;->contains(Ljava/lang/Object;)Z +HSPLandroidx/compose/runtime/collection/IdentityArrayMap;->find(Ljava/lang/Object;)I +HSPLandroidx/compose/runtime/collection/IdentityArrayMap;->get(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/collection/IdentityArrayMap;->getKeys()[Ljava/lang/Object; +HSPLandroidx/compose/runtime/collection/IdentityArrayMap;->getSize()I +HSPLandroidx/compose/runtime/collection/IdentityArrayMap;->getValues()[Ljava/lang/Object; +HSPLandroidx/compose/runtime/collection/IdentityArrayMap;->isNotEmpty()Z +HSPLandroidx/compose/runtime/collection/IdentityArrayMap;->remove(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/collection/IdentityArrayMap;->set(Ljava/lang/Object;Ljava/lang/Object;)V +Landroidx/compose/runtime/collection/IdentityArraySet; +HSPLandroidx/compose/runtime/collection/IdentityArraySet;->()V +HSPLandroidx/compose/runtime/collection/IdentityArraySet;->access$setSize$p(Landroidx/compose/runtime/collection/IdentityArraySet;I)V +HSPLandroidx/compose/runtime/collection/IdentityArraySet;->add(Ljava/lang/Object;)Z +HSPLandroidx/compose/runtime/collection/IdentityArraySet;->addAll(Ljava/util/Collection;)V +HSPLandroidx/compose/runtime/collection/IdentityArraySet;->clear()V +HSPLandroidx/compose/runtime/collection/IdentityArraySet;->contains(Ljava/lang/Object;)Z +HSPLandroidx/compose/runtime/collection/IdentityArraySet;->find(Ljava/lang/Object;)I +HSPLandroidx/compose/runtime/collection/IdentityArraySet;->getSize()I +HSPLandroidx/compose/runtime/collection/IdentityArraySet;->getValues()[Ljava/lang/Object; +HSPLandroidx/compose/runtime/collection/IdentityArraySet;->isEmpty()Z +HSPLandroidx/compose/runtime/collection/IdentityArraySet;->isNotEmpty()Z +HSPLandroidx/compose/runtime/collection/IdentityArraySet;->iterator()Ljava/util/Iterator; +HSPLandroidx/compose/runtime/collection/IdentityArraySet;->remove(Ljava/lang/Object;)Z +HSPLandroidx/compose/runtime/collection/IdentityArraySet;->size()I +Landroidx/compose/runtime/collection/IdentityArraySet$iterator$1; +HSPLandroidx/compose/runtime/collection/IdentityArraySet$iterator$1;->(Landroidx/compose/runtime/collection/IdentityArraySet;)V +HSPLandroidx/compose/runtime/collection/IdentityArraySet$iterator$1;->hasNext()Z +HSPLandroidx/compose/runtime/collection/IdentityArraySet$iterator$1;->next()Ljava/lang/Object; +Landroidx/compose/runtime/collection/IdentityScopeMap; +HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->()V +HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->access$find(Landroidx/compose/runtime/collection/IdentityScopeMap;Ljava/lang/Object;)I +HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->access$scopeSetAt(Landroidx/compose/runtime/collection/IdentityScopeMap;I)Landroidx/compose/runtime/collection/IdentityArraySet; +HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->add(Ljava/lang/Object;Ljava/lang/Object;)Z +HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->contains(Ljava/lang/Object;)Z +HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->find(Ljava/lang/Object;)I +HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->getOrCreateIdentitySet(Ljava/lang/Object;)Landroidx/compose/runtime/collection/IdentityArraySet; +HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->getScopeSets()[Landroidx/compose/runtime/collection/IdentityArraySet; +HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->getSize()I +HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->getValueOrder()[I +HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->getValues()[Ljava/lang/Object; +HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->remove(Ljava/lang/Object;Ljava/lang/Object;)Z +HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->removeScope(Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->scopeSetAt(I)Landroidx/compose/runtime/collection/IdentityArraySet; +HSPLandroidx/compose/runtime/collection/IdentityScopeMap;->setSize(I)V +Landroidx/compose/runtime/collection/IntMap; +HSPLandroidx/compose/runtime/collection/IntMap;->(I)V +HSPLandroidx/compose/runtime/collection/IntMap;->(IILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/runtime/collection/IntMap;->(Landroid/util/SparseArray;)V +HSPLandroidx/compose/runtime/collection/IntMap;->clear()V +HSPLandroidx/compose/runtime/collection/IntMap;->get(I)Ljava/lang/Object; +Landroidx/compose/runtime/collection/MutableVector; +HSPLandroidx/compose/runtime/collection/MutableVector;->()V +HSPLandroidx/compose/runtime/collection/MutableVector;->([Ljava/lang/Object;I)V +HSPLandroidx/compose/runtime/collection/MutableVector;->add(ILjava/lang/Object;)V +HSPLandroidx/compose/runtime/collection/MutableVector;->add(Ljava/lang/Object;)Z +HSPLandroidx/compose/runtime/collection/MutableVector;->addAll(ILandroidx/compose/runtime/collection/MutableVector;)Z +HSPLandroidx/compose/runtime/collection/MutableVector;->asMutableList()Ljava/util/List; +HSPLandroidx/compose/runtime/collection/MutableVector;->clear()V +HSPLandroidx/compose/runtime/collection/MutableVector;->contains(Ljava/lang/Object;)Z +HSPLandroidx/compose/runtime/collection/MutableVector;->ensureCapacity(I)V +HSPLandroidx/compose/runtime/collection/MutableVector;->getContent()[Ljava/lang/Object; +HSPLandroidx/compose/runtime/collection/MutableVector;->getSize()I +HSPLandroidx/compose/runtime/collection/MutableVector;->indexOf(Ljava/lang/Object;)I +HSPLandroidx/compose/runtime/collection/MutableVector;->isEmpty()Z +HSPLandroidx/compose/runtime/collection/MutableVector;->isNotEmpty()Z +HSPLandroidx/compose/runtime/collection/MutableVector;->remove(Ljava/lang/Object;)Z +HSPLandroidx/compose/runtime/collection/MutableVector;->removeAt(I)Ljava/lang/Object; +HSPLandroidx/compose/runtime/collection/MutableVector;->removeRange(II)V +HSPLandroidx/compose/runtime/collection/MutableVector;->set(ILjava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/collection/MutableVector;->sortWith(Ljava/util/Comparator;)V +Landroidx/compose/runtime/collection/MutableVector$MutableVectorList; +HSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->(Landroidx/compose/runtime/collection/MutableVector;)V +HSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->get(I)Ljava/lang/Object; +HSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->getSize()I +HSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->indexOf(Ljava/lang/Object;)I +HSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->isEmpty()Z +HSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->iterator()Ljava/util/Iterator; +HSPLandroidx/compose/runtime/collection/MutableVector$MutableVectorList;->size()I +Landroidx/compose/runtime/collection/MutableVector$VectorListIterator; +HSPLandroidx/compose/runtime/collection/MutableVector$VectorListIterator;->(Ljava/util/List;I)V +HSPLandroidx/compose/runtime/collection/MutableVector$VectorListIterator;->hasNext()Z +HSPLandroidx/compose/runtime/collection/MutableVector$VectorListIterator;->next()Ljava/lang/Object; +Landroidx/compose/runtime/collection/MutableVectorKt; +HSPLandroidx/compose/runtime/collection/MutableVectorKt;->access$checkIndex(Ljava/util/List;I)V +HSPLandroidx/compose/runtime/collection/MutableVectorKt;->checkIndex(Ljava/util/List;I)V +Landroidx/compose/runtime/external/kotlinx/collections/immutable/ExtensionsKt; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/ExtensionsKt;->persistentHashMapOf()Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/ExtensionsKt;->persistentListOf()Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/ExtensionsKt;->persistentSetOf()Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentSet; +Landroidx/compose/runtime/external/kotlinx/collections/immutable/ImmutableCollection; +Landroidx/compose/runtime/external/kotlinx/collections/immutable/ImmutableList; +Landroidx/compose/runtime/external/kotlinx/collections/immutable/ImmutableMap; +Landroidx/compose/runtime/external/kotlinx/collections/immutable/ImmutableSet; +Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentCollection; +Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentCollection$Builder; +Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList; +Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList$Builder; +Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap; +Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap$Builder; +Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentSet; +Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/AbstractListIterator; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/AbstractListIterator;->(II)V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/AbstractListIterator;->getIndex()I +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/AbstractListIterator;->hasNext()Z +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/AbstractListIterator;->setIndex(I)V +Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/AbstractPersistentList; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/AbstractPersistentList;->()V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/AbstractPersistentList;->contains(Ljava/lang/Object;)Z +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/AbstractPersistentList;->iterator()Ljava/util/Iterator; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/AbstractPersistentList;->listIterator()Ljava/util/ListIterator; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/AbstractPersistentList;->remove(Ljava/lang/Object;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList; +Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/BufferIterator; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/BufferIterator;->([Ljava/lang/Object;II)V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/BufferIterator;->next()Ljava/lang/Object; +Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->()V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->([Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->access$getEMPTY$cp()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->add(Ljava/lang/Object;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->addAll(Ljava/util/Collection;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->get(I)Ljava/lang/Object; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->getSize()I +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->indexOf(Ljava/lang/Object;)I +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->listIterator(I)Ljava/util/ListIterator; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->removeAt(I)Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->set(ILjava/lang/Object;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList; +Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector$Companion; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector$Companion;->()V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector$Companion;->getEMPTY()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector; +Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/UtilsKt; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableList/UtilsKt;->persistentVectorOf()Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList; +Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/MapEntry; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/MapEntry;->(Ljava/lang/Object;Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/MapEntry;->getKey()Ljava/lang/Object; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/MapEntry;->getValue()Ljava/lang/Object; +Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->()V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;I)V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->access$getEMPTY$cp()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->builder()Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap$Builder; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->builder()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->containsKey(Ljava/lang/Object;)Z +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->createEntries()Landroidx/compose/runtime/external/kotlinx/collections/immutable/ImmutableSet; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->get(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->getEntries()Ljava/util/Set; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->getNode$runtime_release()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->getSize()I +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap; +Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap$Companion; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap$Companion;->()V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap$Companion;->emptyOf$runtime_release()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap; +Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;->(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;[Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;)V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;->checkHasNext()V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;->ensureNextEntryIsReady()V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;->hasNext()Z +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;->moveToNextNodeWithData(I)I +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBaseIterator;->next()Ljava/lang/Object; +Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;)V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->build()Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->build()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->getModCount$runtime_release()I +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->getNode$runtime_release()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->getOwnership()Landroidx/compose/runtime/external/kotlinx/collections/immutable/internal/MutabilityOwnership; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->getSize()I +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->putAll(Ljava/util/Map;)V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->setModCount$runtime_release(I)V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->setOperationResult$runtime_release(Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->setOwnership(Landroidx/compose/runtime/external/kotlinx/collections/immutable/internal/MutabilityOwnership;)V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;->setSize(I)V +Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapEntries; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapEntries;->(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;)V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapEntries;->getSize()I +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapEntries;->iterator()Ljava/util/Iterator; +Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapEntriesIterator; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapEntriesIterator;->(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;)V +Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->()V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->(II[Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->(II[Ljava/lang/Object;Landroidx/compose/runtime/external/kotlinx/collections/immutable/internal/MutabilityOwnership;)V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->access$getEMPTY$cp()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->asInsertResult()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode$ModificationResult; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->bufferMoveEntryToNode(IIILjava/lang/Object;Ljava/lang/Object;ILandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/MutabilityOwnership;)[Ljava/lang/Object; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->containsKey(ILjava/lang/Object;I)Z +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->elementsIdentityEquals(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;)Z +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->entryCount$runtime_release()I +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->entryKeyIndex$runtime_release(I)I +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->get(ILjava/lang/Object;I)Ljava/lang/Object; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->getBuffer$runtime_release()[Ljava/lang/Object; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->hasEntryAt$runtime_release(I)Z +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->hasNodeAt(I)Z +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->insertEntryAt(ILjava/lang/Object;Ljava/lang/Object;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->keyAtIndex(I)Ljava/lang/Object; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->makeNode(ILjava/lang/Object;Ljava/lang/Object;ILjava/lang/Object;Ljava/lang/Object;ILandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/MutabilityOwnership;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->mutableInsertEntryAt(ILjava/lang/Object;Ljava/lang/Object;Landroidx/compose/runtime/external/kotlinx/collections/immutable/internal/MutabilityOwnership;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->mutableMoveEntryToNode(IIILjava/lang/Object;Ljava/lang/Object;ILandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/MutabilityOwnership;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode; +HSPLandroidx/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; +HSPLandroidx/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; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->mutablePutAllFromOtherNodeCell(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;IILandroidx/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; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->mutableUpdateValueAtIndex(ILjava/lang/Object;Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMapBuilder;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->nodeAtIndex$runtime_release(I)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->nodeIndex$runtime_release(I)I +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->put(ILjava/lang/Object;Ljava/lang/Object;I)Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode$ModificationResult; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;->valueAtKeyIndex(I)Ljava/lang/Object; +Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode$Companion; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode$Companion;->()V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode$Companion;->getEMPTY$runtime_release()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode; +Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode$ModificationResult; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode$ModificationResult;->(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;I)V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode$ModificationResult;->getNode()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode$ModificationResult;->getSizeDelta()I +Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->()V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->getBuffer()[Ljava/lang/Object; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->getIndex()I +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->hasNextKey()Z +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->hasNextNode()Z +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->reset([Ljava/lang/Object;I)V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->reset([Ljava/lang/Object;II)V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeBaseIterator;->setIndex(I)V +Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeEntriesIterator; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeEntriesIterator;->()V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeEntriesIterator;->next()Ljava/lang/Object; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeEntriesIterator;->next()Ljava/util/Map$Entry; +Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeKt; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeKt;->access$insertEntryAtIndex([Ljava/lang/Object;ILjava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeKt;->access$replaceEntryWithNode([Ljava/lang/Object;IILandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;)[Ljava/lang/Object; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeKt;->indexSegment(II)I +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeKt;->insertEntryAtIndex([Ljava/lang/Object;ILjava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNodeKt;->replaceEntryWithNode([Ljava/lang/Object;IILandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;)[Ljava/lang/Object; +Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;->()V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/Links;->(Ljava/lang/Object;Ljava/lang/Object;)V +Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;->()V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;->(Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;)V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;->access$getEMPTY$cp()Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;->add(Ljava/lang/Object;)Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentSet; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet;->getSize()I +Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet$Companion; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet$Companion;->()V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/persistentOrderedSet/PersistentOrderedSet$Companion;->emptyOf$runtime_release()Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentSet; +Landroidx/compose/runtime/external/kotlinx/collections/immutable/internal/CommonFunctionsKt; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/CommonFunctionsKt;->assert(Z)V +Landroidx/compose/runtime/external/kotlinx/collections/immutable/internal/DeltaCounter; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/DeltaCounter;->(I)V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/DeltaCounter;->(IILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/DeltaCounter;->getCount()I +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/DeltaCounter;->setCount(I)V +Landroidx/compose/runtime/external/kotlinx/collections/immutable/internal/EndOfChain; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/EndOfChain;->()V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/EndOfChain;->()V +Landroidx/compose/runtime/external/kotlinx/collections/immutable/internal/ListImplementation; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/ListImplementation;->()V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/ListImplementation;->()V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/ListImplementation;->checkElementIndex$runtime_release(II)V +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/ListImplementation;->checkPositionIndex$runtime_release(II)V +Landroidx/compose/runtime/external/kotlinx/collections/immutable/internal/MutabilityOwnership; +HSPLandroidx/compose/runtime/external/kotlinx/collections/immutable/internal/MutabilityOwnership;->()V +Landroidx/compose/runtime/internal/ComposableLambda; +Landroidx/compose/runtime/internal/ComposableLambdaImpl; +HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->(IZ)V +HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Landroidx/compose/runtime/Composer;I)Ljava/lang/Object; +HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)Ljava/lang/Object; +HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)Ljava/lang/Object; +HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Landroidx/compose/runtime/Composer;I)Ljava/lang/Object; +HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->trackRead(Landroidx/compose/runtime/Composer;)V +HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->trackWrite()V +HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl;->update(Ljava/lang/Object;)V +Landroidx/compose/runtime/internal/ComposableLambdaImpl$invoke$1; +HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl$invoke$1;->(Landroidx/compose/runtime/internal/ComposableLambdaImpl;Ljava/lang/Object;I)V +HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl$invoke$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl$invoke$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/internal/ComposableLambdaImpl$invoke$2; +HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl$invoke$2;->(Landroidx/compose/runtime/internal/ComposableLambdaImpl;Ljava/lang/Object;Ljava/lang/Object;I)V +Landroidx/compose/runtime/internal/ComposableLambdaImpl$invoke$3; +HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl$invoke$3;->(Landroidx/compose/runtime/internal/ComposableLambdaImpl;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;I)V +HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl$invoke$3;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/runtime/internal/ComposableLambdaImpl$invoke$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/internal/ComposableLambdaKt; +HSPLandroidx/compose/runtime/internal/ComposableLambdaKt;->bitsForSlot(II)I +HSPLandroidx/compose/runtime/internal/ComposableLambdaKt;->composableLambda(Landroidx/compose/runtime/Composer;IZLjava/lang/Object;)Landroidx/compose/runtime/internal/ComposableLambda; +HSPLandroidx/compose/runtime/internal/ComposableLambdaKt;->composableLambdaInstance(IZLjava/lang/Object;)Landroidx/compose/runtime/internal/ComposableLambda; +HSPLandroidx/compose/runtime/internal/ComposableLambdaKt;->differentBits(I)I +HSPLandroidx/compose/runtime/internal/ComposableLambdaKt;->replacableWith(Landroidx/compose/runtime/RecomposeScope;Landroidx/compose/runtime/RecomposeScope;)Z +HSPLandroidx/compose/runtime/internal/ComposableLambdaKt;->sameBits(I)I +Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap; +HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;->()V +HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;->(Landroidx/compose/runtime/external/kotlinx/collections/immutable/implementations/immutableMap/TrieNode;I)V +HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;->access$getEmpty$cp()Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap; +HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;->builder()Landroidx/compose/runtime/PersistentCompositionLocalMap$Builder; +HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;->builder()Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap$Builder; +HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;->containsKey(Landroidx/compose/runtime/CompositionLocal;)Z +HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;->containsKey(Ljava/lang/Object;)Z +HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;->get(Landroidx/compose/runtime/CompositionLocal;)Landroidx/compose/runtime/State; +HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;->get(Landroidx/compose/runtime/CompositionLocal;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;->get(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap$Builder; +HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap$Builder;->()V +HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap$Builder;->(Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap;)V +HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap$Builder;->build()Landroidx/compose/runtime/PersistentCompositionLocalMap; +HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap$Builder;->build()Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap; +Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap$Companion; +HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap$Companion;->()V +HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalHashMap$Companion;->getEmpty()Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap; +Landroidx/compose/runtime/internal/PersistentCompositionLocalMapKt; +HSPLandroidx/compose/runtime/internal/PersistentCompositionLocalMapKt;->persistentCompositionLocalHashMapOf()Landroidx/compose/runtime/internal/PersistentCompositionLocalHashMap; +Landroidx/compose/runtime/internal/ThreadMap; +HSPLandroidx/compose/runtime/internal/ThreadMap;->(I[J[Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/internal/ThreadMap;->find(J)I +HSPLandroidx/compose/runtime/internal/ThreadMap;->get(J)Ljava/lang/Object; +HSPLandroidx/compose/runtime/internal/ThreadMap;->newWith(JLjava/lang/Object;)Landroidx/compose/runtime/internal/ThreadMap; +HSPLandroidx/compose/runtime/internal/ThreadMap;->trySet(JLjava/lang/Object;)Z +Landroidx/compose/runtime/internal/ThreadMapKt; +HSPLandroidx/compose/runtime/internal/ThreadMapKt;->()V +HSPLandroidx/compose/runtime/internal/ThreadMapKt;->getEmptyThreadMap()Landroidx/compose/runtime/internal/ThreadMap; +Landroidx/compose/runtime/saveable/ListSaverKt; +HSPLandroidx/compose/runtime/saveable/ListSaverKt;->listSaver(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/saveable/Saver; +Landroidx/compose/runtime/saveable/ListSaverKt$listSaver$1; +HSPLandroidx/compose/runtime/saveable/ListSaverKt$listSaver$1;->(Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/runtime/saveable/ListSaverKt$listSaver$1;->invoke(Landroidx/compose/runtime/saveable/SaverScope;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/saveable/ListSaverKt$listSaver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/saveable/RememberSaveableKt; +HSPLandroidx/compose/runtime/saveable/RememberSaveableKt;->()V +HSPLandroidx/compose/runtime/saveable/RememberSaveableKt;->access$requireCanBeSaved(Landroidx/compose/runtime/saveable/SaveableStateRegistry;Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/saveable/RememberSaveableKt;->rememberSaveable([Ljava/lang/Object;Landroidx/compose/runtime/saveable/Saver;Ljava/lang/String;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;II)Ljava/lang/Object; +HSPLandroidx/compose/runtime/saveable/RememberSaveableKt;->requireCanBeSaved(Landroidx/compose/runtime/saveable/SaveableStateRegistry;Ljava/lang/Object;)V +Landroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1; +HSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1;->(Landroidx/compose/runtime/saveable/SaveableStateRegistry;Ljava/lang/String;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;)V +HSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult; +HSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$invoke$$inlined$onDispose$1; +HSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$invoke$$inlined$onDispose$1;->(Landroidx/compose/runtime/saveable/SaveableStateRegistry$Entry;)V +HSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$invoke$$inlined$onDispose$1;->dispose()V +Landroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$valueProvider$1; +HSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$valueProvider$1;->(Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/runtime/saveable/SaveableStateRegistry;)V +HSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$valueProvider$1;->invoke()Ljava/lang/Object; +Landroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$valueProvider$1$1$1; +HSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$valueProvider$1$1$1;->(Landroidx/compose/runtime/saveable/SaveableStateRegistry;)V +HSPLandroidx/compose/runtime/saveable/RememberSaveableKt$rememberSaveable$1$valueProvider$1$1$1;->canBeSaved(Ljava/lang/Object;)Z +Landroidx/compose/runtime/saveable/SaveableStateHolder; +Landroidx/compose/runtime/saveable/SaveableStateHolderImpl; +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->()V +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->(Ljava/util/Map;)V +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->(Ljava/util/Map;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->SaveableStateProvider(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->access$getRegistryHolders$p(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;)Ljava/util/Map; +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->access$getSavedStates$p(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;)Ljava/util/Map; +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->access$getSaver$cp()Landroidx/compose/runtime/saveable/Saver; +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->access$saveAll(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;)Ljava/util/Map; +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->getParentSaveableStateRegistry()Landroidx/compose/runtime/saveable/SaveableStateRegistry; +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->saveAll()Ljava/util/Map; +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl;->setParentSaveableStateRegistry(Landroidx/compose/runtime/saveable/SaveableStateRegistry;)V +Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion; +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion;->()V +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion;->getSaver()Landroidx/compose/runtime/saveable/Saver; +Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion$Saver$1; +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion$Saver$1;->()V +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion$Saver$1;->()V +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion$Saver$1;->invoke(Landroidx/compose/runtime/saveable/SaverScope;Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;)Ljava/util/Map; +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion$Saver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion$Saver$2; +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion$Saver$2;->()V +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$Companion$Saver$2;->()V +Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder; +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;->(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;->getRegistry()Landroidx/compose/runtime/saveable/SaveableStateRegistry; +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;->saveTo(Ljava/util/Map;)V +Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder$registry$1; +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder$registry$1;->(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;)V +Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1; +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1;->(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;Ljava/lang/Object;Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;)V +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult; +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1$invoke$$inlined$onDispose$1; +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1$invoke$$inlined$onDispose$1;->(Landroidx/compose/runtime/saveable/SaveableStateHolderImpl$RegistryHolder;Landroidx/compose/runtime/saveable/SaveableStateHolderImpl;Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderImpl$SaveableStateProvider$1$1$invoke$$inlined$onDispose$1;->dispose()V +Landroidx/compose/runtime/saveable/SaveableStateHolderKt; +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderKt;->rememberSaveableStateHolder(Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/saveable/SaveableStateHolder; +Landroidx/compose/runtime/saveable/SaveableStateHolderKt$rememberSaveableStateHolder$1; +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderKt$rememberSaveableStateHolder$1;->()V +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderKt$rememberSaveableStateHolder$1;->()V +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderKt$rememberSaveableStateHolder$1;->invoke()Landroidx/compose/runtime/saveable/SaveableStateHolderImpl; +HSPLandroidx/compose/runtime/saveable/SaveableStateHolderKt$rememberSaveableStateHolder$1;->invoke()Ljava/lang/Object; +Landroidx/compose/runtime/saveable/SaveableStateRegistry; +Landroidx/compose/runtime/saveable/SaveableStateRegistry$Entry; +Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl; +HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->(Ljava/util/Map;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->access$getValueProviders$p(Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl;)Ljava/util/Map; +HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->canBeSaved(Ljava/lang/Object;)Z +HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->consumeRestored(Ljava/lang/String;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->performSave()Ljava/util/Map; +HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl;->registerProvider(Ljava/lang/String;Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/saveable/SaveableStateRegistry$Entry; +Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl$registerProvider$3; +HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl$registerProvider$3;->(Landroidx/compose/runtime/saveable/SaveableStateRegistryImpl;Ljava/lang/String;Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryImpl$registerProvider$3;->unregister()V +Landroidx/compose/runtime/saveable/SaveableStateRegistryKt; +HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryKt;->()V +HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryKt;->SaveableStateRegistry(Ljava/util/Map;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/saveable/SaveableStateRegistry; +HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryKt;->getLocalSaveableStateRegistry()Landroidx/compose/runtime/ProvidableCompositionLocal; +Landroidx/compose/runtime/saveable/SaveableStateRegistryKt$LocalSaveableStateRegistry$1; +HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryKt$LocalSaveableStateRegistry$1;->()V +HSPLandroidx/compose/runtime/saveable/SaveableStateRegistryKt$LocalSaveableStateRegistry$1;->()V +Landroidx/compose/runtime/saveable/Saver; +Landroidx/compose/runtime/saveable/SaverKt; +HSPLandroidx/compose/runtime/saveable/SaverKt;->()V +HSPLandroidx/compose/runtime/saveable/SaverKt;->Saver(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/saveable/Saver; +Landroidx/compose/runtime/saveable/SaverKt$AutoSaver$1; +HSPLandroidx/compose/runtime/saveable/SaverKt$AutoSaver$1;->()V +HSPLandroidx/compose/runtime/saveable/SaverKt$AutoSaver$1;->()V +Landroidx/compose/runtime/saveable/SaverKt$AutoSaver$2; +HSPLandroidx/compose/runtime/saveable/SaverKt$AutoSaver$2;->()V +HSPLandroidx/compose/runtime/saveable/SaverKt$AutoSaver$2;->()V +Landroidx/compose/runtime/saveable/SaverKt$Saver$1; +HSPLandroidx/compose/runtime/saveable/SaverKt$Saver$1;->(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/runtime/saveable/SaverKt$Saver$1;->save(Landroidx/compose/runtime/saveable/SaverScope;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/saveable/SaverScope; +Landroidx/compose/runtime/snapshots/GlobalSnapshot; +HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot;->(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;)V +HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot;->dispose()V +HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot;->notifyObjectsInitialized$runtime_release()V +HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot;->takeNestedMutableSnapshot(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/MutableSnapshot; +HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot;->takeNestedSnapshot(Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/Snapshot; +Landroidx/compose/runtime/snapshots/GlobalSnapshot$1$1$1; +Landroidx/compose/runtime/snapshots/GlobalSnapshot$takeNestedMutableSnapshot$1; +HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot$takeNestedMutableSnapshot$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot$takeNestedMutableSnapshot$1;->invoke(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/MutableSnapshot; +HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot$takeNestedMutableSnapshot$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/snapshots/GlobalSnapshot$takeNestedSnapshot$1; +HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot$takeNestedSnapshot$1;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot$takeNestedSnapshot$1;->invoke(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/ReadonlySnapshot; +HSPLandroidx/compose/runtime/snapshots/GlobalSnapshot$takeNestedSnapshot$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/snapshots/ListUtilsKt; +HSPLandroidx/compose/runtime/snapshots/ListUtilsKt;->fastToSet(Ljava/util/List;)Ljava/util/Set; +Landroidx/compose/runtime/snapshots/MutableSnapshot; +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->()V +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->advance$runtime_release()V +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->apply()Landroidx/compose/runtime/snapshots/SnapshotApplyResult; +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->closeLocked$runtime_release()V +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->dispose()V +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getApplied$runtime_release()Z +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getModified$runtime_release()Landroidx/compose/runtime/collection/IdentityArraySet; +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getPreviousIds$runtime_release()Landroidx/compose/runtime/snapshots/SnapshotIdSet; +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getPreviousPinnedSnapshots$runtime_release()[I +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getReadObserver$runtime_release()Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getReadOnly()Z +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getWriteCount$runtime_release()I +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->getWriteObserver$runtime_release()Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->innerApplyLocked$runtime_release(ILjava/util/Map;Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/SnapshotApplyResult; +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->nestedActivated$runtime_release(Landroidx/compose/runtime/snapshots/Snapshot;)V +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->nestedDeactivated$runtime_release(Landroidx/compose/runtime/snapshots/Snapshot;)V +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->notifyObjectsInitialized$runtime_release()V +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->recordModified$runtime_release(Landroidx/compose/runtime/snapshots/StateObject;)V +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->recordPrevious$runtime_release(I)V +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->recordPreviousList$runtime_release(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)V +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->recordPreviousPinnedSnapshot$runtime_release(I)V +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->recordPreviousPinnedSnapshots$runtime_release([I)V +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->releasePinnedSnapshotsForCloseLocked$runtime_release()V +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->releasePreviouslyPinnedSnapshotsLocked()V +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->setApplied$runtime_release(Z)V +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->setModified(Landroidx/compose/runtime/collection/IdentityArraySet;)V +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->setWriteCount$runtime_release(I)V +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->takeNestedMutableSnapshot(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/MutableSnapshot; +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot;->validateNotAppliedOrPinned()V +Landroidx/compose/runtime/snapshots/MutableSnapshot$Companion; +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot$Companion;->()V +HSPLandroidx/compose/runtime/snapshots/MutableSnapshot$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/runtime/snapshots/NestedMutableSnapshot; +HSPLandroidx/compose/runtime/snapshots/NestedMutableSnapshot;->(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/snapshots/MutableSnapshot;)V +HSPLandroidx/compose/runtime/snapshots/NestedMutableSnapshot;->apply()Landroidx/compose/runtime/snapshots/SnapshotApplyResult; +HSPLandroidx/compose/runtime/snapshots/NestedMutableSnapshot;->deactivate()V +HSPLandroidx/compose/runtime/snapshots/NestedMutableSnapshot;->dispose()V +Landroidx/compose/runtime/snapshots/NestedReadonlySnapshot; +HSPLandroidx/compose/runtime/snapshots/NestedReadonlySnapshot;->(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/snapshots/Snapshot;)V +HSPLandroidx/compose/runtime/snapshots/NestedReadonlySnapshot;->dispose()V +HSPLandroidx/compose/runtime/snapshots/NestedReadonlySnapshot;->getReadObserver$runtime_release()Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/runtime/snapshots/NestedReadonlySnapshot;->takeNestedSnapshot(Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/NestedReadonlySnapshot; +HSPLandroidx/compose/runtime/snapshots/NestedReadonlySnapshot;->takeNestedSnapshot(Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/Snapshot; +Landroidx/compose/runtime/snapshots/NestedReadonlySnapshot$readObserver$1$1$1; +HSPLandroidx/compose/runtime/snapshots/NestedReadonlySnapshot$readObserver$1$1$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/runtime/snapshots/NestedReadonlySnapshot$readObserver$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/snapshots/NestedReadonlySnapshot$readObserver$1$1$1;->invoke(Ljava/lang/Object;)V +Landroidx/compose/runtime/snapshots/ObserverHandle; +Landroidx/compose/runtime/snapshots/ReadonlySnapshot; +HSPLandroidx/compose/runtime/snapshots/ReadonlySnapshot;->(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/runtime/snapshots/ReadonlySnapshot;->dispose()V +HSPLandroidx/compose/runtime/snapshots/ReadonlySnapshot;->getReadObserver$runtime_release()Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/runtime/snapshots/ReadonlySnapshot;->nestedActivated$runtime_release(Landroidx/compose/runtime/snapshots/Snapshot;)V +HSPLandroidx/compose/runtime/snapshots/ReadonlySnapshot;->nestedDeactivated$runtime_release(Landroidx/compose/runtime/snapshots/Snapshot;)V +HSPLandroidx/compose/runtime/snapshots/ReadonlySnapshot;->notifyObjectsInitialized$runtime_release()V +HSPLandroidx/compose/runtime/snapshots/ReadonlySnapshot;->takeNestedSnapshot(Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/Snapshot; +Landroidx/compose/runtime/snapshots/Snapshot; +HSPLandroidx/compose/runtime/snapshots/Snapshot;->()V +HSPLandroidx/compose/runtime/snapshots/Snapshot;->(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;)V +HSPLandroidx/compose/runtime/snapshots/Snapshot;->(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/runtime/snapshots/Snapshot;->closeAndReleasePinning$runtime_release()V +HSPLandroidx/compose/runtime/snapshots/Snapshot;->closeLocked$runtime_release()V +HSPLandroidx/compose/runtime/snapshots/Snapshot;->dispose()V +HSPLandroidx/compose/runtime/snapshots/Snapshot;->getDisposed$runtime_release()Z +HSPLandroidx/compose/runtime/snapshots/Snapshot;->getId()I +HSPLandroidx/compose/runtime/snapshots/Snapshot;->getInvalid$runtime_release()Landroidx/compose/runtime/snapshots/SnapshotIdSet; +HSPLandroidx/compose/runtime/snapshots/Snapshot;->getWriteCount$runtime_release()I +HSPLandroidx/compose/runtime/snapshots/Snapshot;->makeCurrent()Landroidx/compose/runtime/snapshots/Snapshot; +HSPLandroidx/compose/runtime/snapshots/Snapshot;->releasePinnedSnapshotLocked$runtime_release()V +HSPLandroidx/compose/runtime/snapshots/Snapshot;->releasePinnedSnapshotsForCloseLocked$runtime_release()V +HSPLandroidx/compose/runtime/snapshots/Snapshot;->restoreCurrent(Landroidx/compose/runtime/snapshots/Snapshot;)V +HSPLandroidx/compose/runtime/snapshots/Snapshot;->setDisposed$runtime_release(Z)V +HSPLandroidx/compose/runtime/snapshots/Snapshot;->setId$runtime_release(I)V +HSPLandroidx/compose/runtime/snapshots/Snapshot;->setInvalid$runtime_release(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)V +HSPLandroidx/compose/runtime/snapshots/Snapshot;->takeoverPinnedSnapshot$runtime_release()I +HSPLandroidx/compose/runtime/snapshots/Snapshot;->validateNotDisposed$runtime_release()V +Landroidx/compose/runtime/snapshots/Snapshot$Companion; +HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion;->()V +HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion;->createNonObservableSnapshot()Landroidx/compose/runtime/snapshots/Snapshot; +HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion;->getCurrent()Landroidx/compose/runtime/snapshots/Snapshot; +HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion;->notifyObjectsInitialized()V +HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion;->observe(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion;->registerApplyObserver(Lkotlin/jvm/functions/Function2;)Landroidx/compose/runtime/snapshots/ObserverHandle; +HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion;->registerGlobalWriteObserver(Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/ObserverHandle; +HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion;->sendApplyNotifications()V +HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion;->takeMutableSnapshot(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/MutableSnapshot; +HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion;->takeSnapshot(Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/Snapshot; +Landroidx/compose/runtime/snapshots/Snapshot$Companion$registerApplyObserver$2; +HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion$registerApplyObserver$2;->(Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion$registerApplyObserver$2;->dispose()V +Landroidx/compose/runtime/snapshots/Snapshot$Companion$registerGlobalWriteObserver$2; +HSPLandroidx/compose/runtime/snapshots/Snapshot$Companion$registerGlobalWriteObserver$2;->(Lkotlin/jvm/functions/Function1;)V +Landroidx/compose/runtime/snapshots/SnapshotApplyResult; +HSPLandroidx/compose/runtime/snapshots/SnapshotApplyResult;->()V +HSPLandroidx/compose/runtime/snapshots/SnapshotApplyResult;->()V +HSPLandroidx/compose/runtime/snapshots/SnapshotApplyResult;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/runtime/snapshots/SnapshotApplyResult$Failure; +Landroidx/compose/runtime/snapshots/SnapshotApplyResult$Success; +HSPLandroidx/compose/runtime/snapshots/SnapshotApplyResult$Success;->()V +HSPLandroidx/compose/runtime/snapshots/SnapshotApplyResult$Success;->()V +Landroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap; +HSPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;->()V +HSPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;->add(I)I +HSPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;->allocateHandle()I +HSPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;->ensure(I)V +HSPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;->freeHandle(I)V +HSPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;->lowestOrDefault(I)I +HSPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;->remove(I)V +HSPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;->shiftDown(I)V +HSPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;->shiftUp(I)V +HSPLandroidx/compose/runtime/snapshots/SnapshotDoubleIndexHeap;->swap(II)V +Landroidx/compose/runtime/snapshots/SnapshotIdSet; +HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->()V +HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->(JJI[I)V +HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->access$getBelowBound$p(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)[I +HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->access$getEMPTY$cp()Landroidx/compose/runtime/snapshots/SnapshotIdSet; +HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->access$getLowerBound$p(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)I +HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->access$getLowerSet$p(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)J +HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->access$getUpperSet$p(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)J +HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->andNot(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/SnapshotIdSet; +HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->clear(I)Landroidx/compose/runtime/snapshots/SnapshotIdSet; +HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->get(I)Z +HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->iterator()Ljava/util/Iterator; +HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->lowest(I)I +HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->or(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/SnapshotIdSet; +HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet;->set(I)Landroidx/compose/runtime/snapshots/SnapshotIdSet; +Landroidx/compose/runtime/snapshots/SnapshotIdSet$Companion; +HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet$Companion;->()V +HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet$Companion;->getEMPTY()Landroidx/compose/runtime/snapshots/SnapshotIdSet; +Landroidx/compose/runtime/snapshots/SnapshotIdSet$iterator$1; +HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet$iterator$1;->(Landroidx/compose/runtime/snapshots/SnapshotIdSet;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet$iterator$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/runtime/snapshots/SnapshotIdSet$iterator$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/snapshots/SnapshotIdSetKt; +HSPLandroidx/compose/runtime/snapshots/SnapshotIdSetKt;->access$lowestBitOf(J)I +HSPLandroidx/compose/runtime/snapshots/SnapshotIdSetKt;->binarySearch([II)I +HSPLandroidx/compose/runtime/snapshots/SnapshotIdSetKt;->lowestBitOf(J)I +Landroidx/compose/runtime/snapshots/SnapshotKt; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->()V +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$advanceGlobalSnapshot()V +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$advanceGlobalSnapshot(Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$checkAndOverwriteUnusedRecordsLocked()V +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$getApplyObservers$p()Ljava/util/List; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$getCurrentGlobalSnapshot$p()Ljava/util/concurrent/atomic/AtomicReference; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$getEmptyLambda$p()Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$getGlobalWriteObservers$p()Ljava/util/List; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$getNextSnapshotId$p()I +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$getOpenSnapshots$p()Landroidx/compose/runtime/snapshots/SnapshotIdSet; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$getThreadSnapshot$p()Landroidx/compose/runtime/SnapshotThreadLocal; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$mergedReadObserver(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Z)Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$mergedWriteObserver(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$optimisticMerges(Landroidx/compose/runtime/snapshots/MutableSnapshot;Landroidx/compose/runtime/snapshots/MutableSnapshot;Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Ljava/util/Map; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$processForUnusedRecordsLocked(Landroidx/compose/runtime/snapshots/StateObject;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$readable(Landroidx/compose/runtime/snapshots/StateRecord;ILandroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/StateRecord; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$setNextSnapshotId$p(I)V +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$setOpenSnapshots$p(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$takeNewGlobalSnapshot(Landroidx/compose/runtime/snapshots/Snapshot;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$takeNewSnapshot(Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/Snapshot; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->access$validateOpen(Landroidx/compose/runtime/snapshots/Snapshot;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->addRange(Landroidx/compose/runtime/snapshots/SnapshotIdSet;II)Landroidx/compose/runtime/snapshots/SnapshotIdSet; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->advanceGlobalSnapshot()V +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->advanceGlobalSnapshot(Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->checkAndOverwriteUnusedRecordsLocked()V +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->createTransparentSnapshotWithNoParentReadObserver$default(Landroidx/compose/runtime/snapshots/Snapshot;Lkotlin/jvm/functions/Function1;ZILjava/lang/Object;)Landroidx/compose/runtime/snapshots/Snapshot; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->createTransparentSnapshotWithNoParentReadObserver(Landroidx/compose/runtime/snapshots/Snapshot;Lkotlin/jvm/functions/Function1;Z)Landroidx/compose/runtime/snapshots/Snapshot; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->current(Landroidx/compose/runtime/snapshots/StateRecord;)Landroidx/compose/runtime/snapshots/StateRecord; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->current(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/Snapshot;)Landroidx/compose/runtime/snapshots/StateRecord; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->currentSnapshot()Landroidx/compose/runtime/snapshots/Snapshot; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->getLock()Ljava/lang/Object; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->getSnapshotInitializer()Landroidx/compose/runtime/snapshots/Snapshot; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->mergedReadObserver$default(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;ZILjava/lang/Object;)Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->mergedReadObserver(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Z)Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->mergedWriteObserver(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->newOverwritableRecordLocked(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/StateObject;)Landroidx/compose/runtime/snapshots/StateRecord; +HSPLandroidx/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; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->newWritableRecordLocked(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/StateObject;Landroidx/compose/runtime/snapshots/Snapshot;)Landroidx/compose/runtime/snapshots/StateRecord; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->notifyWrite(Landroidx/compose/runtime/snapshots/Snapshot;Landroidx/compose/runtime/snapshots/StateObject;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->optimisticMerges(Landroidx/compose/runtime/snapshots/MutableSnapshot;Landroidx/compose/runtime/snapshots/MutableSnapshot;Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Ljava/util/Map; +HSPLandroidx/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; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->overwriteUnusedRecordsLocked(Landroidx/compose/runtime/snapshots/StateObject;)Z +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->processForUnusedRecordsLocked(Landroidx/compose/runtime/snapshots/StateObject;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->readable(Landroidx/compose/runtime/snapshots/StateRecord;ILandroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/StateRecord; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->readable(Landroidx/compose/runtime/snapshots/StateRecord;Landroidx/compose/runtime/snapshots/StateObject;)Landroidx/compose/runtime/snapshots/StateRecord; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->releasePinningLocked(I)V +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->takeNewGlobalSnapshot(Landroidx/compose/runtime/snapshots/Snapshot;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->takeNewSnapshot(Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/Snapshot; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->trackPinning(ILandroidx/compose/runtime/snapshots/SnapshotIdSet;)I +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->usedLocked(Landroidx/compose/runtime/snapshots/StateObject;)Landroidx/compose/runtime/snapshots/StateRecord; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->valid(IILandroidx/compose/runtime/snapshots/SnapshotIdSet;)Z +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->valid(Landroidx/compose/runtime/snapshots/StateRecord;ILandroidx/compose/runtime/snapshots/SnapshotIdSet;)Z +HSPLandroidx/compose/runtime/snapshots/SnapshotKt;->validateOpen(Landroidx/compose/runtime/snapshots/Snapshot;)V +HSPLandroidx/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; +Landroidx/compose/runtime/snapshots/SnapshotKt$advanceGlobalSnapshot$3; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt$advanceGlobalSnapshot$3;->()V +HSPLandroidx/compose/runtime/snapshots/SnapshotKt$advanceGlobalSnapshot$3;->()V +HSPLandroidx/compose/runtime/snapshots/SnapshotKt$advanceGlobalSnapshot$3;->invoke(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotKt$advanceGlobalSnapshot$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/snapshots/SnapshotKt$emptyLambda$1; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt$emptyLambda$1;->()V +HSPLandroidx/compose/runtime/snapshots/SnapshotKt$emptyLambda$1;->()V +HSPLandroidx/compose/runtime/snapshots/SnapshotKt$emptyLambda$1;->invoke(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotKt$emptyLambda$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/snapshots/SnapshotKt$mergedReadObserver$1; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt$mergedReadObserver$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotKt$mergedReadObserver$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt$mergedReadObserver$1;->invoke(Ljava/lang/Object;)V +Landroidx/compose/runtime/snapshots/SnapshotKt$mergedWriteObserver$1; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt$mergedWriteObserver$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotKt$mergedWriteObserver$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt$mergedWriteObserver$1;->invoke(Ljava/lang/Object;)V +Landroidx/compose/runtime/snapshots/SnapshotKt$takeNewSnapshot$1; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt$takeNewSnapshot$1;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotKt$takeNewSnapshot$1;->invoke(Landroidx/compose/runtime/snapshots/SnapshotIdSet;)Landroidx/compose/runtime/snapshots/Snapshot; +HSPLandroidx/compose/runtime/snapshots/SnapshotKt$takeNewSnapshot$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/snapshots/SnapshotMapEntrySet; +HSPLandroidx/compose/runtime/snapshots/SnapshotMapEntrySet;->(Landroidx/compose/runtime/snapshots/SnapshotStateMap;)V +Landroidx/compose/runtime/snapshots/SnapshotMapKeySet; +HSPLandroidx/compose/runtime/snapshots/SnapshotMapKeySet;->(Landroidx/compose/runtime/snapshots/SnapshotStateMap;)V +Landroidx/compose/runtime/snapshots/SnapshotMapSet; +HSPLandroidx/compose/runtime/snapshots/SnapshotMapSet;->(Landroidx/compose/runtime/snapshots/SnapshotStateMap;)V +Landroidx/compose/runtime/snapshots/SnapshotMapValueSet; +HSPLandroidx/compose/runtime/snapshots/SnapshotMapValueSet;->(Landroidx/compose/runtime/snapshots/SnapshotStateMap;)V +Landroidx/compose/runtime/snapshots/SnapshotMutableState; +Landroidx/compose/runtime/snapshots/SnapshotStateList; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->()V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->()V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->add(Ljava/lang/Object;)Z +HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->addAll(Ljava/util/Collection;)Z +HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->contains(Ljava/lang/Object;)Z +HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->get(I)Ljava/lang/Object; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->getFirstStateRecord()Landroidx/compose/runtime/snapshots/StateRecord; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->getModification$runtime_release()I +HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->getReadable$runtime_release()Landroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->getSize()I +HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->isEmpty()Z +HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->iterator()Ljava/util/Iterator; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->listIterator()Ljava/util/ListIterator; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->prependStateRecord(Landroidx/compose/runtime/snapshots/StateRecord;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->remove(I)Ljava/lang/Object; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->remove(Ljava/lang/Object;)Z +HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->removeAt(I)Ljava/lang/Object; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->set(ILjava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateList;->size()I +Landroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;->(Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;->assign(Landroidx/compose/runtime/snapshots/StateRecord;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;->create()Landroidx/compose/runtime/snapshots/StateRecord; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;->getList$runtime_release()Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;->getModification$runtime_release()I +HSPLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;->setList$runtime_release(Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentList;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateList$StateListStateRecord;->setModification$runtime_release(I)V +Landroidx/compose/runtime/snapshots/SnapshotStateList$addAll$1; +Landroidx/compose/runtime/snapshots/SnapshotStateList$retainAll$1; +Landroidx/compose/runtime/snapshots/SnapshotStateListKt; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateListKt;->()V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateListKt;->access$getSync$p()Ljava/lang/Object; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateListKt;->access$validateRange(II)V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateListKt;->validateRange(II)V +Landroidx/compose/runtime/snapshots/SnapshotStateMap; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateMap;->()V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateMap;->()V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateMap;->get(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateMap;->getFirstStateRecord()Landroidx/compose/runtime/snapshots/StateRecord; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateMap;->getReadable$runtime_release()Landroidx/compose/runtime/snapshots/SnapshotStateMap$StateMapStateRecord; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/runtime/snapshots/SnapshotStateMap$StateMapStateRecord; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateMap$StateMapStateRecord;->(Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateMap$StateMapStateRecord;->getMap$runtime_release()Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateMap$StateMapStateRecord;->getModification$runtime_release()I +HSPLandroidx/compose/runtime/snapshots/SnapshotStateMap$StateMapStateRecord;->setMap$runtime_release(Landroidx/compose/runtime/external/kotlinx/collections/immutable/PersistentMap;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateMap$StateMapStateRecord;->setModification$runtime_release(I)V +Landroidx/compose/runtime/snapshots/SnapshotStateMapKt; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateMapKt;->()V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateMapKt;->access$getSync$p()Ljava/lang/Object; +Landroidx/compose/runtime/snapshots/SnapshotStateObserver; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->()V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$addChanges(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;Ljava/util/Set;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$drainChanges(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)Z +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$getCurrentMap$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$getObservedScopeMaps$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)Landroidx/compose/runtime/collection/MutableVector; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$getSendingNotifications$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)Z +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$isPaused$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)Z +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$sendNotifications(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->access$setSendingNotifications$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;Z)V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->addChanges(Ljava/util/Set;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->clearIf(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->drainChanges()Z +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->ensureMap(Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->observeReads(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->removeChanges()Ljava/util/Set; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->sendNotifications()V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver;->start()V +Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->access$getDeriveStateScopeCount$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;)I +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->access$setDeriveStateScopeCount$p(Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;I)V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->clearObsoleteStateReads(Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->getOnChanged()Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->notifyInvalidatedScopes()V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->observe(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->recordInvalidation(Ljava/util/Set;)Z +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->recordRead(Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->recordRead(Ljava/lang/Object;ILjava/lang/Object;Landroidx/compose/runtime/collection/IdentityArrayIntMap;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->removeObservation(Ljava/lang/Object;Ljava/lang/Object;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;->removeScopeIf(Lkotlin/jvm/functions/Function1;)V +Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap$derivedStateObserver$1; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap$derivedStateObserver$1;->(Landroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap$derivedStateObserver$1;->done(Landroidx/compose/runtime/DerivedState;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$ObservedScopeMap$derivedStateObserver$1;->start(Landroidx/compose/runtime/DerivedState;)V +Landroidx/compose/runtime/snapshots/SnapshotStateObserver$applyObserver$1; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$applyObserver$1;->(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$applyObserver$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$applyObserver$1;->invoke(Ljava/util/Set;Landroidx/compose/runtime/snapshots/Snapshot;)V +Landroidx/compose/runtime/snapshots/SnapshotStateObserver$readObserver$1; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$readObserver$1;->(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$readObserver$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$readObserver$1;->invoke(Ljava/lang/Object;)V +Landroidx/compose/runtime/snapshots/SnapshotStateObserver$sendNotifications$1; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$sendNotifications$1;->(Landroidx/compose/runtime/snapshots/SnapshotStateObserver;)V +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$sendNotifications$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/runtime/snapshots/SnapshotStateObserver$sendNotifications$1;->invoke()V +Landroidx/compose/runtime/snapshots/SnapshotWeakSet; +HSPLandroidx/compose/runtime/snapshots/SnapshotWeakSet;->()V +HSPLandroidx/compose/runtime/snapshots/SnapshotWeakSet;->add(Ljava/lang/Object;)Z +HSPLandroidx/compose/runtime/snapshots/SnapshotWeakSet;->getHashes$runtime_release()[I +HSPLandroidx/compose/runtime/snapshots/SnapshotWeakSet;->getSize$runtime_release()I +HSPLandroidx/compose/runtime/snapshots/SnapshotWeakSet;->getValues$runtime_release()[Landroidx/compose/runtime/WeakReference; +HSPLandroidx/compose/runtime/snapshots/SnapshotWeakSet;->setSize$runtime_release(I)V +Landroidx/compose/runtime/snapshots/StateListIterator; +HSPLandroidx/compose/runtime/snapshots/StateListIterator;->(Landroidx/compose/runtime/snapshots/SnapshotStateList;I)V +HSPLandroidx/compose/runtime/snapshots/StateListIterator;->hasNext()Z +HSPLandroidx/compose/runtime/snapshots/StateListIterator;->next()Ljava/lang/Object; +HSPLandroidx/compose/runtime/snapshots/StateListIterator;->remove()V +HSPLandroidx/compose/runtime/snapshots/StateListIterator;->validateModification()V +Landroidx/compose/runtime/snapshots/StateObject; +Landroidx/compose/runtime/snapshots/StateRecord; +HSPLandroidx/compose/runtime/snapshots/StateRecord;->()V +HSPLandroidx/compose/runtime/snapshots/StateRecord;->()V +HSPLandroidx/compose/runtime/snapshots/StateRecord;->getNext$runtime_release()Landroidx/compose/runtime/snapshots/StateRecord; +HSPLandroidx/compose/runtime/snapshots/StateRecord;->getSnapshotId$runtime_release()I +HSPLandroidx/compose/runtime/snapshots/StateRecord;->setNext$runtime_release(Landroidx/compose/runtime/snapshots/StateRecord;)V +HSPLandroidx/compose/runtime/snapshots/StateRecord;->setSnapshotId$runtime_release(I)V +Landroidx/compose/runtime/snapshots/SubList; +Landroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot; +HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->(Landroidx/compose/runtime/snapshots/MutableSnapshot;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;ZZ)V +HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->apply()Landroidx/compose/runtime/snapshots/SnapshotApplyResult; +HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->dispose()V +HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->getCurrentSnapshot()Landroidx/compose/runtime/snapshots/MutableSnapshot; +HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->getId()I +HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->getInvalid$runtime_release()Landroidx/compose/runtime/snapshots/SnapshotIdSet; +HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->getReadOnly()Z +HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->getWriteCount$runtime_release()I +HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->notifyObjectsInitialized$runtime_release()V +HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->recordModified$runtime_release(Landroidx/compose/runtime/snapshots/StateObject;)V +HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->setWriteCount$runtime_release(I)V +HSPLandroidx/compose/runtime/snapshots/TransparentObserverMutableSnapshot;->takeNestedMutableSnapshot(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/snapshots/MutableSnapshot; +Landroidx/compose/runtime/tooling/CompositionData; +Landroidx/compose/runtime/tooling/InspectionTablesKt; +HSPLandroidx/compose/runtime/tooling/InspectionTablesKt;->()V +HSPLandroidx/compose/runtime/tooling/InspectionTablesKt;->getLocalInspectionTables()Landroidx/compose/runtime/ProvidableCompositionLocal; +Landroidx/compose/runtime/tooling/InspectionTablesKt$LocalInspectionTables$1; +HSPLandroidx/compose/runtime/tooling/InspectionTablesKt$LocalInspectionTables$1;->()V +HSPLandroidx/compose/runtime/tooling/InspectionTablesKt$LocalInspectionTables$1;->()V +HSPLandroidx/compose/runtime/tooling/InspectionTablesKt$LocalInspectionTables$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/runtime/tooling/InspectionTablesKt$LocalInspectionTables$1;->invoke()Ljava/util/Set; +Landroidx/compose/ui/ActualKt; +HSPLandroidx/compose/ui/ActualKt;->areObjectsOfSameType(Ljava/lang/Object;Ljava/lang/Object;)Z +Landroidx/compose/ui/Alignment; +HSPLandroidx/compose/ui/Alignment;->()V +Landroidx/compose/ui/Alignment$Companion; +HSPLandroidx/compose/ui/Alignment$Companion;->()V +HSPLandroidx/compose/ui/Alignment$Companion;->()V +HSPLandroidx/compose/ui/Alignment$Companion;->getBottom()Landroidx/compose/ui/Alignment$Vertical; +HSPLandroidx/compose/ui/Alignment$Companion;->getBottomCenter()Landroidx/compose/ui/Alignment; +HSPLandroidx/compose/ui/Alignment$Companion;->getBottomEnd()Landroidx/compose/ui/Alignment; +HSPLandroidx/compose/ui/Alignment$Companion;->getCenter()Landroidx/compose/ui/Alignment; +HSPLandroidx/compose/ui/Alignment$Companion;->getCenterEnd()Landroidx/compose/ui/Alignment; +HSPLandroidx/compose/ui/Alignment$Companion;->getCenterHorizontally()Landroidx/compose/ui/Alignment$Horizontal; +HSPLandroidx/compose/ui/Alignment$Companion;->getCenterStart()Landroidx/compose/ui/Alignment; +HSPLandroidx/compose/ui/Alignment$Companion;->getCenterVertically()Landroidx/compose/ui/Alignment$Vertical; +HSPLandroidx/compose/ui/Alignment$Companion;->getEnd()Landroidx/compose/ui/Alignment$Horizontal; +HSPLandroidx/compose/ui/Alignment$Companion;->getStart()Landroidx/compose/ui/Alignment$Horizontal; +HSPLandroidx/compose/ui/Alignment$Companion;->getTop()Landroidx/compose/ui/Alignment$Vertical; +HSPLandroidx/compose/ui/Alignment$Companion;->getTopEnd()Landroidx/compose/ui/Alignment; +HSPLandroidx/compose/ui/Alignment$Companion;->getTopStart()Landroidx/compose/ui/Alignment; +Landroidx/compose/ui/Alignment$Horizontal; +Landroidx/compose/ui/Alignment$Vertical; +Landroidx/compose/ui/BiasAlignment; +HSPLandroidx/compose/ui/BiasAlignment;->()V +HSPLandroidx/compose/ui/BiasAlignment;->(FF)V +HSPLandroidx/compose/ui/BiasAlignment;->align-KFBX0sM(JJLandroidx/compose/ui/unit/LayoutDirection;)J +HSPLandroidx/compose/ui/BiasAlignment;->equals(Ljava/lang/Object;)Z +Landroidx/compose/ui/BiasAlignment$Horizontal; +HSPLandroidx/compose/ui/BiasAlignment$Horizontal;->()V +HSPLandroidx/compose/ui/BiasAlignment$Horizontal;->(F)V +HSPLandroidx/compose/ui/BiasAlignment$Horizontal;->align(IILandroidx/compose/ui/unit/LayoutDirection;)I +HSPLandroidx/compose/ui/BiasAlignment$Horizontal;->equals(Ljava/lang/Object;)Z +Landroidx/compose/ui/BiasAlignment$Vertical; +HSPLandroidx/compose/ui/BiasAlignment$Vertical;->()V +HSPLandroidx/compose/ui/BiasAlignment$Vertical;->(F)V +HSPLandroidx/compose/ui/BiasAlignment$Vertical;->align(II)I +HSPLandroidx/compose/ui/BiasAlignment$Vertical;->equals(Ljava/lang/Object;)Z +Landroidx/compose/ui/CombinedModifier; +HSPLandroidx/compose/ui/CombinedModifier;->()V +HSPLandroidx/compose/ui/CombinedModifier;->(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;)V +HSPLandroidx/compose/ui/CombinedModifier;->all(Lkotlin/jvm/functions/Function1;)Z +HSPLandroidx/compose/ui/CombinedModifier;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/CombinedModifier;->foldIn(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; +HSPLandroidx/compose/ui/CombinedModifier;->getInner$ui_release()Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/ui/CombinedModifier;->getOuter$ui_release()Landroidx/compose/ui/Modifier; +Landroidx/compose/ui/ComposedModifier; +HSPLandroidx/compose/ui/ComposedModifier;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;)V +HSPLandroidx/compose/ui/ComposedModifier;->getFactory()Lkotlin/jvm/functions/Function3; +Landroidx/compose/ui/ComposedModifierKt; +HSPLandroidx/compose/ui/ComposedModifierKt;->composed$default(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;ILjava/lang/Object;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/ui/ComposedModifierKt;->composed(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/ui/ComposedModifierKt;->materializeModifier(Landroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/ui/ComposedModifierKt;->materializeWithCompositionLocalInjectionInternal(Landroidx/compose/runtime/Composer;Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; +Landroidx/compose/ui/ComposedModifierKt$materialize$1; +HSPLandroidx/compose/ui/ComposedModifierKt$materialize$1;->()V +HSPLandroidx/compose/ui/ComposedModifierKt$materialize$1;->()V +HSPLandroidx/compose/ui/ComposedModifierKt$materialize$1;->invoke(Landroidx/compose/ui/Modifier$Element;)Ljava/lang/Boolean; +HSPLandroidx/compose/ui/ComposedModifierKt$materialize$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/ComposedModifierKt$materialize$result$1; +HSPLandroidx/compose/ui/ComposedModifierKt$materialize$result$1;->(Landroidx/compose/runtime/Composer;)V +HSPLandroidx/compose/ui/ComposedModifierKt$materialize$result$1;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier$Element;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/ui/ComposedModifierKt$materialize$result$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/CompositionLocalMapInjectionElement; +HSPLandroidx/compose/ui/CompositionLocalMapInjectionElement;->(Landroidx/compose/runtime/CompositionLocalMap;)V +HSPLandroidx/compose/ui/CompositionLocalMapInjectionElement;->create()Landroidx/compose/ui/CompositionLocalMapInjectionNode; +HSPLandroidx/compose/ui/CompositionLocalMapInjectionElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/CompositionLocalMapInjectionElement;->equals(Ljava/lang/Object;)Z +Landroidx/compose/ui/CompositionLocalMapInjectionNode; +HSPLandroidx/compose/ui/CompositionLocalMapInjectionNode;->(Landroidx/compose/runtime/CompositionLocalMap;)V +HSPLandroidx/compose/ui/CompositionLocalMapInjectionNode;->onAttach()V +Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/ui/Modifier;->()V +HSPLandroidx/compose/ui/Modifier;->then(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; +Landroidx/compose/ui/Modifier$Companion; +HSPLandroidx/compose/ui/Modifier$Companion;->()V +HSPLandroidx/compose/ui/Modifier$Companion;->()V +HSPLandroidx/compose/ui/Modifier$Companion;->all(Lkotlin/jvm/functions/Function1;)Z +HSPLandroidx/compose/ui/Modifier$Companion;->then(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; +Landroidx/compose/ui/Modifier$Element; +HSPLandroidx/compose/ui/Modifier$Element;->all(Lkotlin/jvm/functions/Function1;)Z +HSPLandroidx/compose/ui/Modifier$Element;->foldIn(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; +Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/Modifier$Node;->()V +HSPLandroidx/compose/ui/Modifier$Node;->()V +HSPLandroidx/compose/ui/Modifier$Node;->getAggregateChildKindSet$ui_release()I +HSPLandroidx/compose/ui/Modifier$Node;->getChild$ui_release()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/Modifier$Node;->getCoordinator$ui_release()Landroidx/compose/ui/node/NodeCoordinator; +HSPLandroidx/compose/ui/Modifier$Node;->getCoroutineScope()Lkotlinx/coroutines/CoroutineScope; +HSPLandroidx/compose/ui/Modifier$Node;->getInsertedNodeAwaitingAttachForInvalidation$ui_release()Z +HSPLandroidx/compose/ui/Modifier$Node;->getKindSet$ui_release()I +HSPLandroidx/compose/ui/Modifier$Node;->getNode()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/Modifier$Node;->getOwnerScope$ui_release()Landroidx/compose/ui/node/ObserverNodeOwnerScope; +HSPLandroidx/compose/ui/Modifier$Node;->getParent$ui_release()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/Modifier$Node;->getShouldAutoInvalidate()Z +HSPLandroidx/compose/ui/Modifier$Node;->getUpdatedNodeAwaitingAttachForInvalidation$ui_release()Z +HSPLandroidx/compose/ui/Modifier$Node;->isAttached()Z +HSPLandroidx/compose/ui/Modifier$Node;->markAsAttached$ui_release()V +HSPLandroidx/compose/ui/Modifier$Node;->markAsDetached$ui_release()V +HSPLandroidx/compose/ui/Modifier$Node;->onAttach()V +HSPLandroidx/compose/ui/Modifier$Node;->onDetach()V +HSPLandroidx/compose/ui/Modifier$Node;->onReset()V +HSPLandroidx/compose/ui/Modifier$Node;->reset$ui_release()V +HSPLandroidx/compose/ui/Modifier$Node;->runAttachLifecycle$ui_release()V +HSPLandroidx/compose/ui/Modifier$Node;->runDetachLifecycle$ui_release()V +HSPLandroidx/compose/ui/Modifier$Node;->setAggregateChildKindSet$ui_release(I)V +HSPLandroidx/compose/ui/Modifier$Node;->setAsDelegateTo$ui_release(Landroidx/compose/ui/Modifier$Node;)V +HSPLandroidx/compose/ui/Modifier$Node;->setChild$ui_release(Landroidx/compose/ui/Modifier$Node;)V +HSPLandroidx/compose/ui/Modifier$Node;->setInsertedNodeAwaitingAttachForInvalidation$ui_release(Z)V +HSPLandroidx/compose/ui/Modifier$Node;->setKindSet$ui_release(I)V +HSPLandroidx/compose/ui/Modifier$Node;->setOwnerScope$ui_release(Landroidx/compose/ui/node/ObserverNodeOwnerScope;)V +HSPLandroidx/compose/ui/Modifier$Node;->setParent$ui_release(Landroidx/compose/ui/Modifier$Node;)V +HSPLandroidx/compose/ui/Modifier$Node;->setUpdatedNodeAwaitingAttachForInvalidation$ui_release(Z)V +HSPLandroidx/compose/ui/Modifier$Node;->sideEffect(Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/ui/Modifier$Node;->updateCoordinator$ui_release(Landroidx/compose/ui/node/NodeCoordinator;)V +Landroidx/compose/ui/ModifierNodeDetachedCancellationException; +HSPLandroidx/compose/ui/ModifierNodeDetachedCancellationException;->()V +HSPLandroidx/compose/ui/ModifierNodeDetachedCancellationException;->fillInStackTrace()Ljava/lang/Throwable; +Landroidx/compose/ui/MotionDurationScale; +HSPLandroidx/compose/ui/MotionDurationScale;->()V +HSPLandroidx/compose/ui/MotionDurationScale;->getKey()Lkotlin/coroutines/CoroutineContext$Key; +Landroidx/compose/ui/MotionDurationScale$DefaultImpls; +HSPLandroidx/compose/ui/MotionDurationScale$DefaultImpls;->fold(Landroidx/compose/ui/MotionDurationScale;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; +HSPLandroidx/compose/ui/MotionDurationScale$DefaultImpls;->get(Landroidx/compose/ui/MotionDurationScale;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; +HSPLandroidx/compose/ui/MotionDurationScale$DefaultImpls;->minusKey(Landroidx/compose/ui/MotionDurationScale;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext; +Landroidx/compose/ui/MotionDurationScale$Key; +HSPLandroidx/compose/ui/MotionDurationScale$Key;->()V +HSPLandroidx/compose/ui/MotionDurationScale$Key;->()V +Landroidx/compose/ui/R$id; +Landroidx/compose/ui/R$string; +Landroidx/compose/ui/ZIndexElement; +HSPLandroidx/compose/ui/ZIndexElement;->(F)V +Landroidx/compose/ui/ZIndexModifierKt; +HSPLandroidx/compose/ui/ZIndexModifierKt;->zIndex(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier; +Landroidx/compose/ui/autofill/AndroidAutofill; +HSPLandroidx/compose/ui/autofill/AndroidAutofill;->(Landroid/view/View;Landroidx/compose/ui/autofill/AutofillTree;)V +HSPLandroidx/compose/ui/autofill/AndroidAutofill;->cancelAutofillForNode(Landroidx/compose/ui/autofill/AutofillNode;)V +HSPLandroidx/compose/ui/autofill/AndroidAutofill;->getAutofillManager()Landroid/view/autofill/AutofillManager; +HSPLandroidx/compose/ui/autofill/AndroidAutofill;->getAutofillTree()Landroidx/compose/ui/autofill/AutofillTree; +HSPLandroidx/compose/ui/autofill/AndroidAutofill;->getView()Landroid/view/View; +HSPLandroidx/compose/ui/autofill/AndroidAutofill;->requestAutofillForNode(Landroidx/compose/ui/autofill/AutofillNode;)V +Landroidx/compose/ui/autofill/AndroidAutofillType_androidKt; +HSPLandroidx/compose/ui/autofill/AndroidAutofillType_androidKt;->()V +HSPLandroidx/compose/ui/autofill/AndroidAutofillType_androidKt;->getAndroidType(Landroidx/compose/ui/autofill/AutofillType;)Ljava/lang/String; +Landroidx/compose/ui/autofill/AndroidAutofill_androidKt; +HSPLandroidx/compose/ui/autofill/AndroidAutofill_androidKt;->populateViewStructure(Landroidx/compose/ui/autofill/AndroidAutofill;Landroid/view/ViewStructure;)V +Landroidx/compose/ui/autofill/Autofill; +Landroidx/compose/ui/autofill/AutofillApi23Helper; +HSPLandroidx/compose/ui/autofill/AutofillApi23Helper;->()V +HSPLandroidx/compose/ui/autofill/AutofillApi23Helper;->()V +HSPLandroidx/compose/ui/autofill/AutofillApi23Helper;->addChildCount(Landroid/view/ViewStructure;I)I +HSPLandroidx/compose/ui/autofill/AutofillApi23Helper;->newChild(Landroid/view/ViewStructure;I)Landroid/view/ViewStructure; +HSPLandroidx/compose/ui/autofill/AutofillApi23Helper;->setDimens(Landroid/view/ViewStructure;IIIIII)V +HSPLandroidx/compose/ui/autofill/AutofillApi23Helper;->setId(Landroid/view/ViewStructure;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V +Landroidx/compose/ui/autofill/AutofillApi26Helper; +HSPLandroidx/compose/ui/autofill/AutofillApi26Helper;->()V +HSPLandroidx/compose/ui/autofill/AutofillApi26Helper;->()V +HSPLandroidx/compose/ui/autofill/AutofillApi26Helper;->getAutofillId(Landroid/view/ViewStructure;)Landroid/view/autofill/AutofillId; +HSPLandroidx/compose/ui/autofill/AutofillApi26Helper;->setAutofillHints(Landroid/view/ViewStructure;[Ljava/lang/String;)V +HSPLandroidx/compose/ui/autofill/AutofillApi26Helper;->setAutofillId(Landroid/view/ViewStructure;Landroid/view/autofill/AutofillId;I)V +HSPLandroidx/compose/ui/autofill/AutofillApi26Helper;->setAutofillType(Landroid/view/ViewStructure;I)V +Landroidx/compose/ui/autofill/AutofillCallback; +HSPLandroidx/compose/ui/autofill/AutofillCallback;->()V +HSPLandroidx/compose/ui/autofill/AutofillCallback;->()V +HSPLandroidx/compose/ui/autofill/AutofillCallback;->onAutofillEvent(Landroid/view/View;II)V +HSPLandroidx/compose/ui/autofill/AutofillCallback;->register(Landroidx/compose/ui/autofill/AndroidAutofill;)V +Landroidx/compose/ui/autofill/AutofillNode; +HSPLandroidx/compose/ui/autofill/AutofillNode;->()V +HSPLandroidx/compose/ui/autofill/AutofillNode;->(Ljava/util/List;Landroidx/compose/ui/geometry/Rect;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/autofill/AutofillNode;->(Ljava/util/List;Landroidx/compose/ui/geometry/Rect;Lkotlin/jvm/functions/Function1;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/autofill/AutofillNode;->access$getPreviousId$cp()I +HSPLandroidx/compose/ui/autofill/AutofillNode;->access$setPreviousId$cp(I)V +HSPLandroidx/compose/ui/autofill/AutofillNode;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/autofill/AutofillNode;->getAutofillTypes()Ljava/util/List; +HSPLandroidx/compose/ui/autofill/AutofillNode;->getBoundingBox()Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/ui/autofill/AutofillNode;->getId()I +HSPLandroidx/compose/ui/autofill/AutofillNode;->setBoundingBox(Landroidx/compose/ui/geometry/Rect;)V +Landroidx/compose/ui/autofill/AutofillNode$Companion; +HSPLandroidx/compose/ui/autofill/AutofillNode$Companion;->()V +HSPLandroidx/compose/ui/autofill/AutofillNode$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/autofill/AutofillNode$Companion;->access$generateId(Landroidx/compose/ui/autofill/AutofillNode$Companion;)I +HSPLandroidx/compose/ui/autofill/AutofillNode$Companion;->generateId()I +Landroidx/compose/ui/autofill/AutofillTree; +HSPLandroidx/compose/ui/autofill/AutofillTree;->()V +HSPLandroidx/compose/ui/autofill/AutofillTree;->()V +HSPLandroidx/compose/ui/autofill/AutofillTree;->getChildren()Ljava/util/Map; +HSPLandroidx/compose/ui/autofill/AutofillTree;->plusAssign(Landroidx/compose/ui/autofill/AutofillNode;)V +Landroidx/compose/ui/autofill/AutofillType; +HSPLandroidx/compose/ui/autofill/AutofillType;->$values()[Landroidx/compose/ui/autofill/AutofillType; +HSPLandroidx/compose/ui/autofill/AutofillType;->()V +HSPLandroidx/compose/ui/autofill/AutofillType;->(Ljava/lang/String;I)V +Landroidx/compose/ui/draw/AlphaKt; +HSPLandroidx/compose/ui/draw/AlphaKt;->alpha(Landroidx/compose/ui/Modifier;F)Landroidx/compose/ui/Modifier; +Landroidx/compose/ui/draw/BuildDrawCacheParams; +Landroidx/compose/ui/draw/CacheDrawModifierNode; +Landroidx/compose/ui/draw/CacheDrawModifierNodeImpl; +HSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->(Landroidx/compose/ui/draw/CacheDrawScope;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V +HSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->getBlock()Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->getDensity()Landroidx/compose/ui/unit/Density; +HSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection; +HSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->getOrBuildCachedDrawBlock()Landroidx/compose/ui/draw/DrawResult; +HSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->getSize-NH-jbRc()J +HSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->invalidateDrawCache()V +HSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl;->onMeasureResultChanged()V +Landroidx/compose/ui/draw/CacheDrawModifierNodeImpl$getOrBuildCachedDrawBlock$1$1; +HSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl$getOrBuildCachedDrawBlock$1$1;->(Landroidx/compose/ui/draw/CacheDrawModifierNodeImpl;Landroidx/compose/ui/draw/CacheDrawScope;)V +HSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl$getOrBuildCachedDrawBlock$1$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/ui/draw/CacheDrawModifierNodeImpl$getOrBuildCachedDrawBlock$1$1;->invoke()V +Landroidx/compose/ui/draw/CacheDrawScope; +HSPLandroidx/compose/ui/draw/CacheDrawScope;->()V +HSPLandroidx/compose/ui/draw/CacheDrawScope;->()V +HSPLandroidx/compose/ui/draw/CacheDrawScope;->getDensity()F +HSPLandroidx/compose/ui/draw/CacheDrawScope;->getDrawResult$ui_release()Landroidx/compose/ui/draw/DrawResult; +HSPLandroidx/compose/ui/draw/CacheDrawScope;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection; +HSPLandroidx/compose/ui/draw/CacheDrawScope;->getSize-NH-jbRc()J +HSPLandroidx/compose/ui/draw/CacheDrawScope;->onDrawWithContent(Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/draw/DrawResult; +HSPLandroidx/compose/ui/draw/CacheDrawScope;->setCacheParams$ui_release(Landroidx/compose/ui/draw/BuildDrawCacheParams;)V +HSPLandroidx/compose/ui/draw/CacheDrawScope;->setDrawResult$ui_release(Landroidx/compose/ui/draw/DrawResult;)V +Landroidx/compose/ui/draw/ClipKt; +HSPLandroidx/compose/ui/draw/ClipKt;->clip(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/Shape;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/ui/draw/ClipKt;->clipToBounds(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; +Landroidx/compose/ui/draw/DrawBackgroundModifier; +HSPLandroidx/compose/ui/draw/DrawBackgroundModifier;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/draw/DrawBackgroundModifier;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V +HSPLandroidx/compose/ui/draw/DrawBackgroundModifier;->setOnDraw(Lkotlin/jvm/functions/Function1;)V +Landroidx/compose/ui/draw/DrawBehindElement; +HSPLandroidx/compose/ui/draw/DrawBehindElement;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/draw/DrawBehindElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/draw/DrawBehindElement;->create()Landroidx/compose/ui/draw/DrawBackgroundModifier; +HSPLandroidx/compose/ui/draw/DrawBehindElement;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/draw/DrawBehindElement;->update(Landroidx/compose/ui/Modifier$Node;)V +HSPLandroidx/compose/ui/draw/DrawBehindElement;->update(Landroidx/compose/ui/draw/DrawBackgroundModifier;)V +Landroidx/compose/ui/draw/DrawCacheModifier; +Landroidx/compose/ui/draw/DrawModifier; +Landroidx/compose/ui/draw/DrawModifierKt; +HSPLandroidx/compose/ui/draw/DrawModifierKt;->CacheDrawModifierNode(Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/draw/CacheDrawModifierNode; +HSPLandroidx/compose/ui/draw/DrawModifierKt;->drawBehind(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/ui/draw/DrawModifierKt;->drawWithContent(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; +Landroidx/compose/ui/draw/DrawResult; +HSPLandroidx/compose/ui/draw/DrawResult;->()V +HSPLandroidx/compose/ui/draw/DrawResult;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/draw/DrawResult;->getBlock$ui_release()Lkotlin/jvm/functions/Function1; +Landroidx/compose/ui/draw/DrawWithContentElement; +HSPLandroidx/compose/ui/draw/DrawWithContentElement;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/draw/DrawWithContentElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/draw/DrawWithContentElement;->create()Landroidx/compose/ui/draw/DrawWithContentModifier; +HSPLandroidx/compose/ui/draw/DrawWithContentElement;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/draw/DrawWithContentElement;->update(Landroidx/compose/ui/Modifier$Node;)V +HSPLandroidx/compose/ui/draw/DrawWithContentElement;->update(Landroidx/compose/ui/draw/DrawWithContentModifier;)V +Landroidx/compose/ui/draw/DrawWithContentModifier; +HSPLandroidx/compose/ui/draw/DrawWithContentModifier;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/draw/DrawWithContentModifier;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V +HSPLandroidx/compose/ui/draw/DrawWithContentModifier;->setOnDraw(Lkotlin/jvm/functions/Function1;)V +Landroidx/compose/ui/draw/EmptyBuildDrawCacheParams; +HSPLandroidx/compose/ui/draw/EmptyBuildDrawCacheParams;->()V +HSPLandroidx/compose/ui/draw/EmptyBuildDrawCacheParams;->()V +Landroidx/compose/ui/draw/PainterElement; +HSPLandroidx/compose/ui/draw/PainterElement;->(Landroidx/compose/ui/graphics/painter/Painter;ZLandroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/ColorFilter;)V +HSPLandroidx/compose/ui/draw/PainterElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/draw/PainterElement;->create()Landroidx/compose/ui/draw/PainterNode; +HSPLandroidx/compose/ui/draw/PainterElement;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/draw/PainterElement;->update(Landroidx/compose/ui/Modifier$Node;)V +HSPLandroidx/compose/ui/draw/PainterElement;->update(Landroidx/compose/ui/draw/PainterNode;)V +Landroidx/compose/ui/draw/PainterModifierKt; +HSPLandroidx/compose/ui/draw/PainterModifierKt;->paint$default(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/painter/Painter;ZLandroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/ColorFilter;ILjava/lang/Object;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/ui/draw/PainterModifierKt;->paint(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/painter/Painter;ZLandroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/ColorFilter;)Landroidx/compose/ui/Modifier; +Landroidx/compose/ui/draw/PainterNode; +HSPLandroidx/compose/ui/draw/PainterNode;->(Landroidx/compose/ui/graphics/painter/Painter;ZLandroidx/compose/ui/Alignment;Landroidx/compose/ui/layout/ContentScale;FLandroidx/compose/ui/graphics/ColorFilter;)V +HSPLandroidx/compose/ui/draw/PainterNode;->calculateScaledSize-E7KxVPU(J)J +HSPLandroidx/compose/ui/draw/PainterNode;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V +HSPLandroidx/compose/ui/draw/PainterNode;->getPainter()Landroidx/compose/ui/graphics/painter/Painter; +HSPLandroidx/compose/ui/draw/PainterNode;->getShouldAutoInvalidate()Z +HSPLandroidx/compose/ui/draw/PainterNode;->getSizeToIntrinsics()Z +HSPLandroidx/compose/ui/draw/PainterNode;->getUseIntrinsicSize()Z +HSPLandroidx/compose/ui/draw/PainterNode;->hasSpecifiedAndFiniteHeight-uvyYCjk(J)Z +HSPLandroidx/compose/ui/draw/PainterNode;->hasSpecifiedAndFiniteWidth-uvyYCjk(J)Z +HSPLandroidx/compose/ui/draw/PainterNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; +HSPLandroidx/compose/ui/draw/PainterNode;->modifyConstraints-ZezNO4M(J)J +HSPLandroidx/compose/ui/draw/PainterNode;->setAlignment(Landroidx/compose/ui/Alignment;)V +HSPLandroidx/compose/ui/draw/PainterNode;->setAlpha(F)V +HSPLandroidx/compose/ui/draw/PainterNode;->setColorFilter(Landroidx/compose/ui/graphics/ColorFilter;)V +HSPLandroidx/compose/ui/draw/PainterNode;->setContentScale(Landroidx/compose/ui/layout/ContentScale;)V +HSPLandroidx/compose/ui/draw/PainterNode;->setPainter(Landroidx/compose/ui/graphics/painter/Painter;)V +HSPLandroidx/compose/ui/draw/PainterNode;->setSizeToIntrinsics(Z)V +Landroidx/compose/ui/draw/PainterNode$measure$1; +HSPLandroidx/compose/ui/draw/PainterNode$measure$1;->(Landroidx/compose/ui/layout/Placeable;)V +HSPLandroidx/compose/ui/draw/PainterNode$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/ui/draw/PainterNode$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/draw/ShadowKt; +HSPLandroidx/compose/ui/draw/ShadowKt;->shadow-s4CzXII$default(Landroidx/compose/ui/Modifier;FLandroidx/compose/ui/graphics/Shape;ZJJILjava/lang/Object;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/ui/draw/ShadowKt;->shadow-s4CzXII(Landroidx/compose/ui/Modifier;FLandroidx/compose/ui/graphics/Shape;ZJJ)Landroidx/compose/ui/Modifier; +Landroidx/compose/ui/focus/CustomDestinationResult; +HSPLandroidx/compose/ui/focus/CustomDestinationResult;->$values()[Landroidx/compose/ui/focus/CustomDestinationResult; +HSPLandroidx/compose/ui/focus/CustomDestinationResult;->()V +HSPLandroidx/compose/ui/focus/CustomDestinationResult;->(Ljava/lang/String;I)V +HSPLandroidx/compose/ui/focus/CustomDestinationResult;->values()[Landroidx/compose/ui/focus/CustomDestinationResult; +Landroidx/compose/ui/focus/FocusChangedElement; +HSPLandroidx/compose/ui/focus/FocusChangedElement;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/focus/FocusChangedElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/focus/FocusChangedElement;->create()Landroidx/compose/ui/focus/FocusChangedNode; +HSPLandroidx/compose/ui/focus/FocusChangedElement;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/focus/FocusChangedElement;->update(Landroidx/compose/ui/Modifier$Node;)V +HSPLandroidx/compose/ui/focus/FocusChangedElement;->update(Landroidx/compose/ui/focus/FocusChangedNode;)V +Landroidx/compose/ui/focus/FocusChangedModifierKt; +HSPLandroidx/compose/ui/focus/FocusChangedModifierKt;->onFocusChanged(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; +Landroidx/compose/ui/focus/FocusChangedNode; +HSPLandroidx/compose/ui/focus/FocusChangedNode;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/focus/FocusChangedNode;->onFocusEvent(Landroidx/compose/ui/focus/FocusState;)V +HSPLandroidx/compose/ui/focus/FocusChangedNode;->setOnFocusChanged(Lkotlin/jvm/functions/Function1;)V +Landroidx/compose/ui/focus/FocusDirection; +HSPLandroidx/compose/ui/focus/FocusDirection;->()V +HSPLandroidx/compose/ui/focus/FocusDirection;->(I)V +HSPLandroidx/compose/ui/focus/FocusDirection;->access$getEnter$cp()I +HSPLandroidx/compose/ui/focus/FocusDirection;->box-impl(I)Landroidx/compose/ui/focus/FocusDirection; +HSPLandroidx/compose/ui/focus/FocusDirection;->constructor-impl(I)I +HSPLandroidx/compose/ui/focus/FocusDirection;->unbox-impl()I +Landroidx/compose/ui/focus/FocusDirection$Companion; +HSPLandroidx/compose/ui/focus/FocusDirection$Companion;->()V +HSPLandroidx/compose/ui/focus/FocusDirection$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/focus/FocusDirection$Companion;->getEnter-dhqQ-8s()I +Landroidx/compose/ui/focus/FocusEventElement; +HSPLandroidx/compose/ui/focus/FocusEventElement;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/focus/FocusEventElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/focus/FocusEventElement;->create()Landroidx/compose/ui/focus/FocusEventNode; +HSPLandroidx/compose/ui/focus/FocusEventElement;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/focus/FocusEventElement;->update(Landroidx/compose/ui/Modifier$Node;)V +HSPLandroidx/compose/ui/focus/FocusEventElement;->update(Landroidx/compose/ui/focus/FocusEventNode;)V +Landroidx/compose/ui/focus/FocusEventModifier; +Landroidx/compose/ui/focus/FocusEventModifierKt; +HSPLandroidx/compose/ui/focus/FocusEventModifierKt;->onFocusEvent(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; +Landroidx/compose/ui/focus/FocusEventModifierNode; +Landroidx/compose/ui/focus/FocusEventModifierNodeKt; +HSPLandroidx/compose/ui/focus/FocusEventModifierNodeKt;->getFocusState(Landroidx/compose/ui/focus/FocusEventModifierNode;)Landroidx/compose/ui/focus/FocusState; +HSPLandroidx/compose/ui/focus/FocusEventModifierNodeKt;->invalidateFocusEvent(Landroidx/compose/ui/focus/FocusEventModifierNode;)V +HSPLandroidx/compose/ui/focus/FocusEventModifierNodeKt;->refreshFocusEventNodes(Landroidx/compose/ui/focus/FocusTargetNode;)V +Landroidx/compose/ui/focus/FocusEventModifierNodeKt$WhenMappings; +HSPLandroidx/compose/ui/focus/FocusEventModifierNodeKt$WhenMappings;->()V +Landroidx/compose/ui/focus/FocusEventNode; +HSPLandroidx/compose/ui/focus/FocusEventNode;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/focus/FocusEventNode;->onFocusEvent(Landroidx/compose/ui/focus/FocusState;)V +HSPLandroidx/compose/ui/focus/FocusEventNode;->setOnFocusEvent(Lkotlin/jvm/functions/Function1;)V +Landroidx/compose/ui/focus/FocusInvalidationManager; +HSPLandroidx/compose/ui/focus/FocusInvalidationManager;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/focus/FocusInvalidationManager;->access$getFocusEventNodes$p(Landroidx/compose/ui/focus/FocusInvalidationManager;)Ljava/util/Set; +HSPLandroidx/compose/ui/focus/FocusInvalidationManager;->access$getFocusPropertiesNodes$p(Landroidx/compose/ui/focus/FocusInvalidationManager;)Ljava/util/Set; +HSPLandroidx/compose/ui/focus/FocusInvalidationManager;->access$getFocusTargetNodes$p(Landroidx/compose/ui/focus/FocusInvalidationManager;)Ljava/util/Set; +HSPLandroidx/compose/ui/focus/FocusInvalidationManager;->scheduleInvalidation(Landroidx/compose/ui/focus/FocusEventModifierNode;)V +HSPLandroidx/compose/ui/focus/FocusInvalidationManager;->scheduleInvalidation(Landroidx/compose/ui/focus/FocusPropertiesModifierNode;)V +HSPLandroidx/compose/ui/focus/FocusInvalidationManager;->scheduleInvalidation(Landroidx/compose/ui/focus/FocusTargetNode;)V +HSPLandroidx/compose/ui/focus/FocusInvalidationManager;->scheduleInvalidation(Ljava/util/Set;Ljava/lang/Object;)V +Landroidx/compose/ui/focus/FocusInvalidationManager$invalidateNodes$1; +HSPLandroidx/compose/ui/focus/FocusInvalidationManager$invalidateNodes$1;->(Landroidx/compose/ui/focus/FocusInvalidationManager;)V +HSPLandroidx/compose/ui/focus/FocusInvalidationManager$invalidateNodes$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/ui/focus/FocusInvalidationManager$invalidateNodes$1;->invoke()V +Landroidx/compose/ui/focus/FocusManager; +Landroidx/compose/ui/focus/FocusModifierKt; +HSPLandroidx/compose/ui/focus/FocusModifierKt;->focusTarget(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; +Landroidx/compose/ui/focus/FocusOrderModifier; +Landroidx/compose/ui/focus/FocusOwner; +Landroidx/compose/ui/focus/FocusOwnerImpl; +HSPLandroidx/compose/ui/focus/FocusOwnerImpl;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/focus/FocusOwnerImpl;->clearFocus(ZZ)V +HSPLandroidx/compose/ui/focus/FocusOwnerImpl;->getModifier()Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/ui/focus/FocusOwnerImpl;->getRootFocusNode$ui_release()Landroidx/compose/ui/focus/FocusTargetNode; +HSPLandroidx/compose/ui/focus/FocusOwnerImpl;->scheduleInvalidation(Landroidx/compose/ui/focus/FocusEventModifierNode;)V +HSPLandroidx/compose/ui/focus/FocusOwnerImpl;->scheduleInvalidation(Landroidx/compose/ui/focus/FocusPropertiesModifierNode;)V +HSPLandroidx/compose/ui/focus/FocusOwnerImpl;->scheduleInvalidation(Landroidx/compose/ui/focus/FocusTargetNode;)V +HSPLandroidx/compose/ui/focus/FocusOwnerImpl;->setLayoutDirection(Landroidx/compose/ui/unit/LayoutDirection;)V +HSPLandroidx/compose/ui/focus/FocusOwnerImpl;->takeFocus()V +Landroidx/compose/ui/focus/FocusOwnerImpl$WhenMappings; +HSPLandroidx/compose/ui/focus/FocusOwnerImpl$WhenMappings;->()V +Landroidx/compose/ui/focus/FocusOwnerImpl$modifier$1; +HSPLandroidx/compose/ui/focus/FocusOwnerImpl$modifier$1;->(Landroidx/compose/ui/focus/FocusOwnerImpl;)V +HSPLandroidx/compose/ui/focus/FocusOwnerImpl$modifier$1;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/focus/FocusOwnerImpl$modifier$1;->create()Landroidx/compose/ui/focus/FocusTargetNode; +Landroidx/compose/ui/focus/FocusProperties; +Landroidx/compose/ui/focus/FocusPropertiesElement; +HSPLandroidx/compose/ui/focus/FocusPropertiesElement;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/focus/FocusPropertiesElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/focus/FocusPropertiesElement;->create()Landroidx/compose/ui/focus/FocusPropertiesNode; +HSPLandroidx/compose/ui/focus/FocusPropertiesElement;->equals(Ljava/lang/Object;)Z +Landroidx/compose/ui/focus/FocusPropertiesImpl; +HSPLandroidx/compose/ui/focus/FocusPropertiesImpl;->()V +HSPLandroidx/compose/ui/focus/FocusPropertiesImpl;->getCanFocus()Z +HSPLandroidx/compose/ui/focus/FocusPropertiesImpl;->getEnter()Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/ui/focus/FocusPropertiesImpl;->setCanFocus(Z)V +Landroidx/compose/ui/focus/FocusPropertiesImpl$enter$1; +HSPLandroidx/compose/ui/focus/FocusPropertiesImpl$enter$1;->()V +HSPLandroidx/compose/ui/focus/FocusPropertiesImpl$enter$1;->()V +HSPLandroidx/compose/ui/focus/FocusPropertiesImpl$enter$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/ui/focus/FocusPropertiesImpl$enter$1;->invoke-3ESFkO8(I)Landroidx/compose/ui/focus/FocusRequester; +Landroidx/compose/ui/focus/FocusPropertiesImpl$exit$1; +HSPLandroidx/compose/ui/focus/FocusPropertiesImpl$exit$1;->()V +HSPLandroidx/compose/ui/focus/FocusPropertiesImpl$exit$1;->()V +Landroidx/compose/ui/focus/FocusPropertiesKt; +HSPLandroidx/compose/ui/focus/FocusPropertiesKt;->focusProperties(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; +Landroidx/compose/ui/focus/FocusPropertiesModifierNode; +Landroidx/compose/ui/focus/FocusPropertiesModifierNodeKt; +HSPLandroidx/compose/ui/focus/FocusPropertiesModifierNodeKt;->invalidateFocusProperties(Landroidx/compose/ui/focus/FocusPropertiesModifierNode;)V +Landroidx/compose/ui/focus/FocusPropertiesNode; +HSPLandroidx/compose/ui/focus/FocusPropertiesNode;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/focus/FocusPropertiesNode;->applyFocusProperties(Landroidx/compose/ui/focus/FocusProperties;)V +Landroidx/compose/ui/focus/FocusRequester; +HSPLandroidx/compose/ui/focus/FocusRequester;->()V +HSPLandroidx/compose/ui/focus/FocusRequester;->()V +HSPLandroidx/compose/ui/focus/FocusRequester;->access$getCancel$cp()Landroidx/compose/ui/focus/FocusRequester; +HSPLandroidx/compose/ui/focus/FocusRequester;->access$getDefault$cp()Landroidx/compose/ui/focus/FocusRequester; +HSPLandroidx/compose/ui/focus/FocusRequester;->focus$ui_release()Z +HSPLandroidx/compose/ui/focus/FocusRequester;->getFocusRequesterNodes$ui_release()Landroidx/compose/runtime/collection/MutableVector; +HSPLandroidx/compose/ui/focus/FocusRequester;->requestFocus()V +Landroidx/compose/ui/focus/FocusRequester$Companion; +HSPLandroidx/compose/ui/focus/FocusRequester$Companion;->()V +HSPLandroidx/compose/ui/focus/FocusRequester$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/focus/FocusRequester$Companion;->getCancel()Landroidx/compose/ui/focus/FocusRequester; +HSPLandroidx/compose/ui/focus/FocusRequester$Companion;->getDefault()Landroidx/compose/ui/focus/FocusRequester; +Landroidx/compose/ui/focus/FocusRequesterElement; +HSPLandroidx/compose/ui/focus/FocusRequesterElement;->(Landroidx/compose/ui/focus/FocusRequester;)V +HSPLandroidx/compose/ui/focus/FocusRequesterElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/focus/FocusRequesterElement;->create()Landroidx/compose/ui/focus/FocusRequesterNode; +HSPLandroidx/compose/ui/focus/FocusRequesterElement;->equals(Ljava/lang/Object;)Z +Landroidx/compose/ui/focus/FocusRequesterModifier; +Landroidx/compose/ui/focus/FocusRequesterModifierKt; +HSPLandroidx/compose/ui/focus/FocusRequesterModifierKt;->focusRequester(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/focus/FocusRequester;)Landroidx/compose/ui/Modifier; +Landroidx/compose/ui/focus/FocusRequesterModifierNode; +Landroidx/compose/ui/focus/FocusRequesterNode; +HSPLandroidx/compose/ui/focus/FocusRequesterNode;->(Landroidx/compose/ui/focus/FocusRequester;)V +HSPLandroidx/compose/ui/focus/FocusRequesterNode;->onAttach()V +HSPLandroidx/compose/ui/focus/FocusRequesterNode;->onDetach()V +Landroidx/compose/ui/focus/FocusState; +Landroidx/compose/ui/focus/FocusStateImpl; +HSPLandroidx/compose/ui/focus/FocusStateImpl;->$values()[Landroidx/compose/ui/focus/FocusStateImpl; +HSPLandroidx/compose/ui/focus/FocusStateImpl;->()V +HSPLandroidx/compose/ui/focus/FocusStateImpl;->(Ljava/lang/String;I)V +HSPLandroidx/compose/ui/focus/FocusStateImpl;->getHasFocus()Z +HSPLandroidx/compose/ui/focus/FocusStateImpl;->isFocused()Z +HSPLandroidx/compose/ui/focus/FocusStateImpl;->values()[Landroidx/compose/ui/focus/FocusStateImpl; +Landroidx/compose/ui/focus/FocusStateImpl$WhenMappings; +HSPLandroidx/compose/ui/focus/FocusStateImpl$WhenMappings;->()V +Landroidx/compose/ui/focus/FocusTargetModifierNode; +Landroidx/compose/ui/focus/FocusTargetNode; +HSPLandroidx/compose/ui/focus/FocusTargetNode;->()V +HSPLandroidx/compose/ui/focus/FocusTargetNode;->access$isProcessingCustomEnter$p(Landroidx/compose/ui/focus/FocusTargetNode;)Z +HSPLandroidx/compose/ui/focus/FocusTargetNode;->access$setProcessingCustomEnter$p(Landroidx/compose/ui/focus/FocusTargetNode;Z)V +HSPLandroidx/compose/ui/focus/FocusTargetNode;->fetchFocusProperties$ui_release()Landroidx/compose/ui/focus/FocusProperties; +HSPLandroidx/compose/ui/focus/FocusTargetNode;->getFocusState()Landroidx/compose/ui/focus/FocusStateImpl; +HSPLandroidx/compose/ui/focus/FocusTargetNode;->invalidateFocus$ui_release()V +HSPLandroidx/compose/ui/focus/FocusTargetNode;->onReset()V +HSPLandroidx/compose/ui/focus/FocusTargetNode;->scheduleInvalidationForFocusEvents$ui_release()V +HSPLandroidx/compose/ui/focus/FocusTargetNode;->setFocusState(Landroidx/compose/ui/focus/FocusStateImpl;)V +Landroidx/compose/ui/focus/FocusTargetNode$FocusTargetElement; +HSPLandroidx/compose/ui/focus/FocusTargetNode$FocusTargetElement;->()V +HSPLandroidx/compose/ui/focus/FocusTargetNode$FocusTargetElement;->()V +HSPLandroidx/compose/ui/focus/FocusTargetNode$FocusTargetElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/focus/FocusTargetNode$FocusTargetElement;->create()Landroidx/compose/ui/focus/FocusTargetNode; +HSPLandroidx/compose/ui/focus/FocusTargetNode$FocusTargetElement;->equals(Ljava/lang/Object;)Z +Landroidx/compose/ui/focus/FocusTargetNode$WhenMappings; +HSPLandroidx/compose/ui/focus/FocusTargetNode$WhenMappings;->()V +Landroidx/compose/ui/focus/FocusTransactionsKt; +HSPLandroidx/compose/ui/focus/FocusTransactionsKt;->clearChildFocus(Landroidx/compose/ui/focus/FocusTargetNode;ZZ)Z +HSPLandroidx/compose/ui/focus/FocusTransactionsKt;->clearFocus(Landroidx/compose/ui/focus/FocusTargetNode;ZZ)Z +HSPLandroidx/compose/ui/focus/FocusTransactionsKt;->grantFocus(Landroidx/compose/ui/focus/FocusTargetNode;)Z +HSPLandroidx/compose/ui/focus/FocusTransactionsKt;->performCustomEnter-Mxy_nc0(Landroidx/compose/ui/focus/FocusTargetNode;I)Landroidx/compose/ui/focus/CustomDestinationResult; +HSPLandroidx/compose/ui/focus/FocusTransactionsKt;->performCustomRequestFocus-Mxy_nc0(Landroidx/compose/ui/focus/FocusTargetNode;I)Landroidx/compose/ui/focus/CustomDestinationResult; +HSPLandroidx/compose/ui/focus/FocusTransactionsKt;->performRequestFocus(Landroidx/compose/ui/focus/FocusTargetNode;)Z +HSPLandroidx/compose/ui/focus/FocusTransactionsKt;->requestFocus(Landroidx/compose/ui/focus/FocusTargetNode;)Z +HSPLandroidx/compose/ui/focus/FocusTransactionsKt;->requestFocusForChild(Landroidx/compose/ui/focus/FocusTargetNode;Landroidx/compose/ui/focus/FocusTargetNode;)Z +HSPLandroidx/compose/ui/focus/FocusTransactionsKt;->requestFocusForOwner(Landroidx/compose/ui/focus/FocusTargetNode;)Z +Landroidx/compose/ui/focus/FocusTransactionsKt$WhenMappings; +HSPLandroidx/compose/ui/focus/FocusTransactionsKt$WhenMappings;->()V +Landroidx/compose/ui/focus/FocusTransactionsKt$grantFocus$1; +HSPLandroidx/compose/ui/focus/FocusTransactionsKt$grantFocus$1;->(Landroidx/compose/ui/focus/FocusTargetNode;)V +HSPLandroidx/compose/ui/focus/FocusTransactionsKt$grantFocus$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/ui/focus/FocusTransactionsKt$grantFocus$1;->invoke()V +Landroidx/compose/ui/focus/FocusTraversalKt; +HSPLandroidx/compose/ui/focus/FocusTraversalKt;->getActiveChild(Landroidx/compose/ui/focus/FocusTargetNode;)Landroidx/compose/ui/focus/FocusTargetNode; +Landroidx/compose/ui/focus/FocusTraversalKt$WhenMappings; +HSPLandroidx/compose/ui/focus/FocusTraversalKt$WhenMappings;->()V +Landroidx/compose/ui/geometry/CornerRadius; +HSPLandroidx/compose/ui/geometry/CornerRadius;->()V +HSPLandroidx/compose/ui/geometry/CornerRadius;->access$getZero$cp()J +HSPLandroidx/compose/ui/geometry/CornerRadius;->constructor-impl(J)J +HSPLandroidx/compose/ui/geometry/CornerRadius;->getX-impl(J)F +HSPLandroidx/compose/ui/geometry/CornerRadius;->getY-impl(J)F +Landroidx/compose/ui/geometry/CornerRadius$Companion; +HSPLandroidx/compose/ui/geometry/CornerRadius$Companion;->()V +HSPLandroidx/compose/ui/geometry/CornerRadius$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/geometry/CornerRadius$Companion;->getZero-kKHJgLs()J +Landroidx/compose/ui/geometry/CornerRadiusKt; +HSPLandroidx/compose/ui/geometry/CornerRadiusKt;->CornerRadius$default(FFILjava/lang/Object;)J +HSPLandroidx/compose/ui/geometry/CornerRadiusKt;->CornerRadius(FF)J +Landroidx/compose/ui/geometry/MutableRect; +HSPLandroidx/compose/ui/geometry/MutableRect;->()V +HSPLandroidx/compose/ui/geometry/MutableRect;->(FFFF)V +HSPLandroidx/compose/ui/geometry/MutableRect;->getBottom()F +HSPLandroidx/compose/ui/geometry/MutableRect;->getLeft()F +HSPLandroidx/compose/ui/geometry/MutableRect;->getRight()F +HSPLandroidx/compose/ui/geometry/MutableRect;->getTop()F +HSPLandroidx/compose/ui/geometry/MutableRect;->intersect(FFFF)V +HSPLandroidx/compose/ui/geometry/MutableRect;->isEmpty()Z +HSPLandroidx/compose/ui/geometry/MutableRect;->setBottom(F)V +HSPLandroidx/compose/ui/geometry/MutableRect;->setLeft(F)V +HSPLandroidx/compose/ui/geometry/MutableRect;->setRight(F)V +HSPLandroidx/compose/ui/geometry/MutableRect;->setTop(F)V +Landroidx/compose/ui/geometry/MutableRectKt; +HSPLandroidx/compose/ui/geometry/MutableRectKt;->toRect(Landroidx/compose/ui/geometry/MutableRect;)Landroidx/compose/ui/geometry/Rect; +Landroidx/compose/ui/geometry/Offset; +HSPLandroidx/compose/ui/geometry/Offset;->()V +HSPLandroidx/compose/ui/geometry/Offset;->(J)V +HSPLandroidx/compose/ui/geometry/Offset;->access$getInfinite$cp()J +HSPLandroidx/compose/ui/geometry/Offset;->access$getUnspecified$cp()J +HSPLandroidx/compose/ui/geometry/Offset;->access$getZero$cp()J +HSPLandroidx/compose/ui/geometry/Offset;->box-impl(J)Landroidx/compose/ui/geometry/Offset; +HSPLandroidx/compose/ui/geometry/Offset;->component1-impl(J)F +HSPLandroidx/compose/ui/geometry/Offset;->component2-impl(J)F +HSPLandroidx/compose/ui/geometry/Offset;->constructor-impl(J)J +HSPLandroidx/compose/ui/geometry/Offset;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/geometry/Offset;->equals-impl(JLjava/lang/Object;)Z +HSPLandroidx/compose/ui/geometry/Offset;->equals-impl0(JJ)Z +HSPLandroidx/compose/ui/geometry/Offset;->getDistance-impl(J)F +HSPLandroidx/compose/ui/geometry/Offset;->getX-impl(J)F +HSPLandroidx/compose/ui/geometry/Offset;->getY-impl(J)F +HSPLandroidx/compose/ui/geometry/Offset;->minus-MK-Hz9U(JJ)J +HSPLandroidx/compose/ui/geometry/Offset;->plus-MK-Hz9U(JJ)J +HSPLandroidx/compose/ui/geometry/Offset;->unaryMinus-F1C5BW0(J)J +HSPLandroidx/compose/ui/geometry/Offset;->unbox-impl()J +Landroidx/compose/ui/geometry/Offset$Companion; +HSPLandroidx/compose/ui/geometry/Offset$Companion;->()V +HSPLandroidx/compose/ui/geometry/Offset$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/geometry/Offset$Companion;->getInfinite-F1C5BW0()J +HSPLandroidx/compose/ui/geometry/Offset$Companion;->getUnspecified-F1C5BW0()J +HSPLandroidx/compose/ui/geometry/Offset$Companion;->getZero-F1C5BW0()J +Landroidx/compose/ui/geometry/OffsetKt; +HSPLandroidx/compose/ui/geometry/OffsetKt;->Offset(FF)J +HSPLandroidx/compose/ui/geometry/OffsetKt;->isFinite-k-4lQ0M(J)Z +HSPLandroidx/compose/ui/geometry/OffsetKt;->isSpecified-k-4lQ0M(J)Z +Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/ui/geometry/Rect;->()V +HSPLandroidx/compose/ui/geometry/Rect;->(FFFF)V +HSPLandroidx/compose/ui/geometry/Rect;->access$getZero$cp()Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/ui/geometry/Rect;->copy$default(Landroidx/compose/ui/geometry/Rect;FFFFILjava/lang/Object;)Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/ui/geometry/Rect;->copy(FFFF)Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/ui/geometry/Rect;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/geometry/Rect;->getBottom()F +HSPLandroidx/compose/ui/geometry/Rect;->getCenter-F1C5BW0()J +HSPLandroidx/compose/ui/geometry/Rect;->getHeight()F +HSPLandroidx/compose/ui/geometry/Rect;->getLeft()F +HSPLandroidx/compose/ui/geometry/Rect;->getRight()F +HSPLandroidx/compose/ui/geometry/Rect;->getSize-NH-jbRc()J +HSPLandroidx/compose/ui/geometry/Rect;->getTop()F +HSPLandroidx/compose/ui/geometry/Rect;->getTopLeft-F1C5BW0()J +HSPLandroidx/compose/ui/geometry/Rect;->getWidth()F +HSPLandroidx/compose/ui/geometry/Rect;->intersect(Landroidx/compose/ui/geometry/Rect;)Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/ui/geometry/Rect;->isEmpty()Z +HSPLandroidx/compose/ui/geometry/Rect;->translate-k-4lQ0M(J)Landroidx/compose/ui/geometry/Rect; +Landroidx/compose/ui/geometry/Rect$Companion; +HSPLandroidx/compose/ui/geometry/Rect$Companion;->()V +HSPLandroidx/compose/ui/geometry/Rect$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/geometry/Rect$Companion;->getZero()Landroidx/compose/ui/geometry/Rect; +Landroidx/compose/ui/geometry/RectKt; +HSPLandroidx/compose/ui/geometry/RectKt;->Rect-tz77jQw(JJ)Landroidx/compose/ui/geometry/Rect; +Landroidx/compose/ui/geometry/RoundRect; +HSPLandroidx/compose/ui/geometry/RoundRect;->()V +HSPLandroidx/compose/ui/geometry/RoundRect;->(FFFFJJJJ)V +HSPLandroidx/compose/ui/geometry/RoundRect;->(FFFFJJJJLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/geometry/RoundRect;->getBottom()F +HSPLandroidx/compose/ui/geometry/RoundRect;->getBottomLeftCornerRadius-kKHJgLs()J +HSPLandroidx/compose/ui/geometry/RoundRect;->getBottomRightCornerRadius-kKHJgLs()J +HSPLandroidx/compose/ui/geometry/RoundRect;->getHeight()F +HSPLandroidx/compose/ui/geometry/RoundRect;->getLeft()F +HSPLandroidx/compose/ui/geometry/RoundRect;->getRight()F +HSPLandroidx/compose/ui/geometry/RoundRect;->getTop()F +HSPLandroidx/compose/ui/geometry/RoundRect;->getTopLeftCornerRadius-kKHJgLs()J +HSPLandroidx/compose/ui/geometry/RoundRect;->getTopRightCornerRadius-kKHJgLs()J +HSPLandroidx/compose/ui/geometry/RoundRect;->getWidth()F +Landroidx/compose/ui/geometry/RoundRect$Companion; +HSPLandroidx/compose/ui/geometry/RoundRect$Companion;->()V +HSPLandroidx/compose/ui/geometry/RoundRect$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/geometry/RoundRectKt; +HSPLandroidx/compose/ui/geometry/RoundRectKt;->RoundRect(FFFFFF)Landroidx/compose/ui/geometry/RoundRect; +HSPLandroidx/compose/ui/geometry/RoundRectKt;->RoundRect-ZAM2FJo(Landroidx/compose/ui/geometry/Rect;JJJJ)Landroidx/compose/ui/geometry/RoundRect; +HSPLandroidx/compose/ui/geometry/RoundRectKt;->RoundRect-gG7oq9Y(FFFFJ)Landroidx/compose/ui/geometry/RoundRect; +HSPLandroidx/compose/ui/geometry/RoundRectKt;->isSimple(Landroidx/compose/ui/geometry/RoundRect;)Z +Landroidx/compose/ui/geometry/Size; +HSPLandroidx/compose/ui/geometry/Size;->()V +HSPLandroidx/compose/ui/geometry/Size;->(J)V +HSPLandroidx/compose/ui/geometry/Size;->access$getUnspecified$cp()J +HSPLandroidx/compose/ui/geometry/Size;->access$getZero$cp()J +HSPLandroidx/compose/ui/geometry/Size;->box-impl(J)Landroidx/compose/ui/geometry/Size; +HSPLandroidx/compose/ui/geometry/Size;->constructor-impl(J)J +HSPLandroidx/compose/ui/geometry/Size;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/geometry/Size;->equals-impl(JLjava/lang/Object;)Z +HSPLandroidx/compose/ui/geometry/Size;->equals-impl0(JJ)Z +HSPLandroidx/compose/ui/geometry/Size;->getHeight-impl(J)F +HSPLandroidx/compose/ui/geometry/Size;->getMinDimension-impl(J)F +HSPLandroidx/compose/ui/geometry/Size;->getWidth-impl(J)F +HSPLandroidx/compose/ui/geometry/Size;->isEmpty-impl(J)Z +HSPLandroidx/compose/ui/geometry/Size;->unbox-impl()J +Landroidx/compose/ui/geometry/Size$Companion; +HSPLandroidx/compose/ui/geometry/Size$Companion;->()V +HSPLandroidx/compose/ui/geometry/Size$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/geometry/Size$Companion;->getUnspecified-NH-jbRc()J +HSPLandroidx/compose/ui/geometry/Size$Companion;->getZero-NH-jbRc()J +Landroidx/compose/ui/geometry/SizeKt; +HSPLandroidx/compose/ui/geometry/SizeKt;->Size(FF)J +HSPLandroidx/compose/ui/geometry/SizeKt;->toRect-uvyYCjk(J)Landroidx/compose/ui/geometry/Rect; +Landroidx/compose/ui/graphics/AndroidBlendMode_androidKt; +HSPLandroidx/compose/ui/graphics/AndroidBlendMode_androidKt;->toAndroidBlendMode-s9anfk8(I)Landroid/graphics/BlendMode; +Landroidx/compose/ui/graphics/AndroidCanvas; +HSPLandroidx/compose/ui/graphics/AndroidCanvas;->()V +HSPLandroidx/compose/ui/graphics/AndroidCanvas;->concat-58bKbWc([F)V +HSPLandroidx/compose/ui/graphics/AndroidCanvas;->drawArc(FFFFFFZLandroidx/compose/ui/graphics/Paint;)V +HSPLandroidx/compose/ui/graphics/AndroidCanvas;->drawImageRect-HPBpro0(Landroidx/compose/ui/graphics/ImageBitmap;JJJJLandroidx/compose/ui/graphics/Paint;)V +HSPLandroidx/compose/ui/graphics/AndroidCanvas;->drawLine-Wko1d7g(JJLandroidx/compose/ui/graphics/Paint;)V +HSPLandroidx/compose/ui/graphics/AndroidCanvas;->drawPath(Landroidx/compose/ui/graphics/Path;Landroidx/compose/ui/graphics/Paint;)V +HSPLandroidx/compose/ui/graphics/AndroidCanvas;->drawRect(FFFFLandroidx/compose/ui/graphics/Paint;)V +HSPLandroidx/compose/ui/graphics/AndroidCanvas;->drawRoundRect(FFFFFFLandroidx/compose/ui/graphics/Paint;)V +HSPLandroidx/compose/ui/graphics/AndroidCanvas;->getInternalCanvas()Landroid/graphics/Canvas; +HSPLandroidx/compose/ui/graphics/AndroidCanvas;->restore()V +HSPLandroidx/compose/ui/graphics/AndroidCanvas;->save()V +HSPLandroidx/compose/ui/graphics/AndroidCanvas;->saveLayer(Landroidx/compose/ui/geometry/Rect;Landroidx/compose/ui/graphics/Paint;)V +HSPLandroidx/compose/ui/graphics/AndroidCanvas;->setInternalCanvas(Landroid/graphics/Canvas;)V +HSPLandroidx/compose/ui/graphics/AndroidCanvas;->translate(FF)V +Landroidx/compose/ui/graphics/AndroidCanvas_androidKt; +HSPLandroidx/compose/ui/graphics/AndroidCanvas_androidKt;->()V +HSPLandroidx/compose/ui/graphics/AndroidCanvas_androidKt;->ActualCanvas(Landroidx/compose/ui/graphics/ImageBitmap;)Landroidx/compose/ui/graphics/Canvas; +HSPLandroidx/compose/ui/graphics/AndroidCanvas_androidKt;->access$getEmptyCanvas$p()Landroid/graphics/Canvas; +HSPLandroidx/compose/ui/graphics/AndroidCanvas_androidKt;->getNativeCanvas(Landroidx/compose/ui/graphics/Canvas;)Landroid/graphics/Canvas; +Landroidx/compose/ui/graphics/AndroidColorFilter_androidKt; +HSPLandroidx/compose/ui/graphics/AndroidColorFilter_androidKt;->actualTintColorFilter-xETnrds(JI)Landroidx/compose/ui/graphics/ColorFilter; +HSPLandroidx/compose/ui/graphics/AndroidColorFilter_androidKt;->asAndroidColorFilter(Landroidx/compose/ui/graphics/ColorFilter;)Landroid/graphics/ColorFilter; +Landroidx/compose/ui/graphics/AndroidColorSpace_androidKt; +HSPLandroidx/compose/ui/graphics/AndroidColorSpace_androidKt;->toAndroidColorSpace(Landroidx/compose/ui/graphics/colorspace/ColorSpace;)Landroid/graphics/ColorSpace; +Landroidx/compose/ui/graphics/AndroidImageBitmap; +HSPLandroidx/compose/ui/graphics/AndroidImageBitmap;->(Landroid/graphics/Bitmap;)V +HSPLandroidx/compose/ui/graphics/AndroidImageBitmap;->getBitmap$ui_graphics_release()Landroid/graphics/Bitmap; +HSPLandroidx/compose/ui/graphics/AndroidImageBitmap;->getHeight()I +HSPLandroidx/compose/ui/graphics/AndroidImageBitmap;->getWidth()I +HSPLandroidx/compose/ui/graphics/AndroidImageBitmap;->prepareToDraw()V +Landroidx/compose/ui/graphics/AndroidImageBitmap_androidKt; +HSPLandroidx/compose/ui/graphics/AndroidImageBitmap_androidKt;->ActualImageBitmap-x__-hDU(IIIZLandroidx/compose/ui/graphics/colorspace/ColorSpace;)Landroidx/compose/ui/graphics/ImageBitmap; +HSPLandroidx/compose/ui/graphics/AndroidImageBitmap_androidKt;->asAndroidBitmap(Landroidx/compose/ui/graphics/ImageBitmap;)Landroid/graphics/Bitmap; +HSPLandroidx/compose/ui/graphics/AndroidImageBitmap_androidKt;->toBitmapConfig-1JJdX4A(I)Landroid/graphics/Bitmap$Config; +Landroidx/compose/ui/graphics/AndroidMatrixConversions_androidKt; +HSPLandroidx/compose/ui/graphics/AndroidMatrixConversions_androidKt;->setFrom-EL8BTi8(Landroid/graphics/Matrix;[F)V +HSPLandroidx/compose/ui/graphics/AndroidMatrixConversions_androidKt;->setFrom-tU-YjHk([FLandroid/graphics/Matrix;)V +Landroidx/compose/ui/graphics/AndroidPaint; +HSPLandroidx/compose/ui/graphics/AndroidPaint;->()V +HSPLandroidx/compose/ui/graphics/AndroidPaint;->(Landroid/graphics/Paint;)V +HSPLandroidx/compose/ui/graphics/AndroidPaint;->asFrameworkPaint()Landroid/graphics/Paint; +HSPLandroidx/compose/ui/graphics/AndroidPaint;->getAlpha()F +HSPLandroidx/compose/ui/graphics/AndroidPaint;->getBlendMode-0nO6VwU()I +HSPLandroidx/compose/ui/graphics/AndroidPaint;->getColor-0d7_KjU()J +HSPLandroidx/compose/ui/graphics/AndroidPaint;->getColorFilter()Landroidx/compose/ui/graphics/ColorFilter; +HSPLandroidx/compose/ui/graphics/AndroidPaint;->getFilterQuality-f-v9h1I()I +HSPLandroidx/compose/ui/graphics/AndroidPaint;->getPathEffect()Landroidx/compose/ui/graphics/PathEffect; +HSPLandroidx/compose/ui/graphics/AndroidPaint;->getShader()Landroid/graphics/Shader; +HSPLandroidx/compose/ui/graphics/AndroidPaint;->getStrokeCap-KaPHkGw()I +HSPLandroidx/compose/ui/graphics/AndroidPaint;->getStrokeJoin-LxFBmk8()I +HSPLandroidx/compose/ui/graphics/AndroidPaint;->getStrokeMiterLimit()F +HSPLandroidx/compose/ui/graphics/AndroidPaint;->getStrokeWidth()F +HSPLandroidx/compose/ui/graphics/AndroidPaint;->setAlpha(F)V +HSPLandroidx/compose/ui/graphics/AndroidPaint;->setAntiAlias(Z)V +HSPLandroidx/compose/ui/graphics/AndroidPaint;->setBlendMode-s9anfk8(I)V +HSPLandroidx/compose/ui/graphics/AndroidPaint;->setColor-8_81llA(J)V +HSPLandroidx/compose/ui/graphics/AndroidPaint;->setColorFilter(Landroidx/compose/ui/graphics/ColorFilter;)V +HSPLandroidx/compose/ui/graphics/AndroidPaint;->setShader(Landroid/graphics/Shader;)V +HSPLandroidx/compose/ui/graphics/AndroidPaint;->setStrokeCap-BeK7IIE(I)V +HSPLandroidx/compose/ui/graphics/AndroidPaint;->setStrokeWidth(F)V +HSPLandroidx/compose/ui/graphics/AndroidPaint;->setStyle-k9PVt8s(I)V +Landroidx/compose/ui/graphics/AndroidPaint_androidKt; +HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt;->Paint()Landroidx/compose/ui/graphics/Paint; +HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt;->asComposePaint(Landroid/graphics/Paint;)Landroidx/compose/ui/graphics/Paint; +HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt;->getNativeAlpha(Landroid/graphics/Paint;)F +HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt;->getNativeColor(Landroid/graphics/Paint;)J +HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt;->getNativeFilterQuality(Landroid/graphics/Paint;)I +HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt;->getNativeStrokeCap(Landroid/graphics/Paint;)I +HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt;->getNativeStrokeJoin(Landroid/graphics/Paint;)I +HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt;->getNativeStrokeMiterLimit(Landroid/graphics/Paint;)F +HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt;->getNativeStrokeWidth(Landroid/graphics/Paint;)F +HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt;->makeNativePaint()Landroid/graphics/Paint; +HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt;->setNativeAlpha(Landroid/graphics/Paint;F)V +HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt;->setNativeAntiAlias(Landroid/graphics/Paint;Z)V +HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt;->setNativeBlendMode-GB0RdKg(Landroid/graphics/Paint;I)V +HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt;->setNativeColor-4WTKRHQ(Landroid/graphics/Paint;J)V +HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt;->setNativeColorFilter(Landroid/graphics/Paint;Landroidx/compose/ui/graphics/ColorFilter;)V +HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt;->setNativeShader(Landroid/graphics/Paint;Landroid/graphics/Shader;)V +HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt;->setNativeStrokeCap-CSYIeUk(Landroid/graphics/Paint;I)V +HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt;->setNativeStrokeWidth(Landroid/graphics/Paint;F)V +HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt;->setNativeStyle--5YerkU(Landroid/graphics/Paint;I)V +Landroidx/compose/ui/graphics/AndroidPaint_androidKt$WhenMappings; +HSPLandroidx/compose/ui/graphics/AndroidPaint_androidKt$WhenMappings;->()V +Landroidx/compose/ui/graphics/AndroidPath; +HSPLandroidx/compose/ui/graphics/AndroidPath;->(Landroid/graphics/Path;)V +HSPLandroidx/compose/ui/graphics/AndroidPath;->(Landroid/graphics/Path;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/AndroidPath;->addRoundRect(Landroidx/compose/ui/geometry/RoundRect;)V +HSPLandroidx/compose/ui/graphics/AndroidPath;->close()V +HSPLandroidx/compose/ui/graphics/AndroidPath;->cubicTo(FFFFFF)V +HSPLandroidx/compose/ui/graphics/AndroidPath;->getFillType-Rg-k1Os()I +HSPLandroidx/compose/ui/graphics/AndroidPath;->getInternalPath()Landroid/graphics/Path; +HSPLandroidx/compose/ui/graphics/AndroidPath;->lineTo(FF)V +HSPLandroidx/compose/ui/graphics/AndroidPath;->moveTo(FF)V +HSPLandroidx/compose/ui/graphics/AndroidPath;->relativeCubicTo(FFFFFF)V +HSPLandroidx/compose/ui/graphics/AndroidPath;->relativeLineTo(FF)V +HSPLandroidx/compose/ui/graphics/AndroidPath;->relativeMoveTo(FF)V +HSPLandroidx/compose/ui/graphics/AndroidPath;->reset()V +HSPLandroidx/compose/ui/graphics/AndroidPath;->rewind()V +HSPLandroidx/compose/ui/graphics/AndroidPath;->setFillType-oQ8Xj4U(I)V +Landroidx/compose/ui/graphics/AndroidPathMeasure; +HSPLandroidx/compose/ui/graphics/AndroidPathMeasure;->(Landroid/graphics/PathMeasure;)V +HSPLandroidx/compose/ui/graphics/AndroidPathMeasure;->getLength()F +HSPLandroidx/compose/ui/graphics/AndroidPathMeasure;->getSegment(FFLandroidx/compose/ui/graphics/Path;Z)Z +HSPLandroidx/compose/ui/graphics/AndroidPathMeasure;->setPath(Landroidx/compose/ui/graphics/Path;Z)V +Landroidx/compose/ui/graphics/AndroidPathMeasure_androidKt; +HSPLandroidx/compose/ui/graphics/AndroidPathMeasure_androidKt;->PathMeasure()Landroidx/compose/ui/graphics/PathMeasure; +Landroidx/compose/ui/graphics/AndroidPath_androidKt; +HSPLandroidx/compose/ui/graphics/AndroidPath_androidKt;->Path()Landroidx/compose/ui/graphics/Path; +Landroidx/compose/ui/graphics/AndroidShader_androidKt; +HSPLandroidx/compose/ui/graphics/AndroidShader_androidKt;->ActualLinearGradientShader-VjE6UOU(JJLjava/util/List;Ljava/util/List;I)Landroid/graphics/Shader; +HSPLandroidx/compose/ui/graphics/AndroidShader_androidKt;->countTransparentColors(Ljava/util/List;)I +HSPLandroidx/compose/ui/graphics/AndroidShader_androidKt;->makeTransparentColors(Ljava/util/List;I)[I +HSPLandroidx/compose/ui/graphics/AndroidShader_androidKt;->makeTransparentStops(Ljava/util/List;Ljava/util/List;I)[F +HSPLandroidx/compose/ui/graphics/AndroidShader_androidKt;->validateColorStops(Ljava/util/List;Ljava/util/List;)V +Landroidx/compose/ui/graphics/AndroidTileMode_androidKt; +HSPLandroidx/compose/ui/graphics/AndroidTileMode_androidKt;->toAndroidTileMode-0vamqd0(I)Landroid/graphics/Shader$TileMode; +Landroidx/compose/ui/graphics/Api26Bitmap; +HSPLandroidx/compose/ui/graphics/Api26Bitmap;->()V +HSPLandroidx/compose/ui/graphics/Api26Bitmap;->()V +HSPLandroidx/compose/ui/graphics/Api26Bitmap;->createBitmap-x__-hDU$ui_graphics_release(IIIZLandroidx/compose/ui/graphics/colorspace/ColorSpace;)Landroid/graphics/Bitmap; +Landroidx/compose/ui/graphics/BlendMode; +HSPLandroidx/compose/ui/graphics/BlendMode;->()V +HSPLandroidx/compose/ui/graphics/BlendMode;->(I)V +HSPLandroidx/compose/ui/graphics/BlendMode;->access$getClear$cp()I +HSPLandroidx/compose/ui/graphics/BlendMode;->access$getDst$cp()I +HSPLandroidx/compose/ui/graphics/BlendMode;->access$getDstIn$cp()I +HSPLandroidx/compose/ui/graphics/BlendMode;->access$getDstOver$cp()I +HSPLandroidx/compose/ui/graphics/BlendMode;->access$getSrc$cp()I +HSPLandroidx/compose/ui/graphics/BlendMode;->access$getSrcIn$cp()I +HSPLandroidx/compose/ui/graphics/BlendMode;->access$getSrcOver$cp()I +HSPLandroidx/compose/ui/graphics/BlendMode;->box-impl(I)Landroidx/compose/ui/graphics/BlendMode; +HSPLandroidx/compose/ui/graphics/BlendMode;->constructor-impl(I)I +HSPLandroidx/compose/ui/graphics/BlendMode;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/graphics/BlendMode;->equals-impl(ILjava/lang/Object;)Z +HSPLandroidx/compose/ui/graphics/BlendMode;->equals-impl0(II)Z +HSPLandroidx/compose/ui/graphics/BlendMode;->hashCode-impl(I)I +HSPLandroidx/compose/ui/graphics/BlendMode;->unbox-impl()I +Landroidx/compose/ui/graphics/BlendMode$Companion; +HSPLandroidx/compose/ui/graphics/BlendMode$Companion;->()V +HSPLandroidx/compose/ui/graphics/BlendMode$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/BlendMode$Companion;->getClear-0nO6VwU()I +HSPLandroidx/compose/ui/graphics/BlendMode$Companion;->getDst-0nO6VwU()I +HSPLandroidx/compose/ui/graphics/BlendMode$Companion;->getDstIn-0nO6VwU()I +HSPLandroidx/compose/ui/graphics/BlendMode$Companion;->getDstOver-0nO6VwU()I +HSPLandroidx/compose/ui/graphics/BlendMode$Companion;->getSrc-0nO6VwU()I +HSPLandroidx/compose/ui/graphics/BlendMode$Companion;->getSrcIn-0nO6VwU()I +HSPLandroidx/compose/ui/graphics/BlendMode$Companion;->getSrcOver-0nO6VwU()I +Landroidx/compose/ui/graphics/BlendModeColorFilterHelper; +HSPLandroidx/compose/ui/graphics/BlendModeColorFilterHelper;->()V +HSPLandroidx/compose/ui/graphics/BlendModeColorFilterHelper;->()V +HSPLandroidx/compose/ui/graphics/BlendModeColorFilterHelper;->BlendModeColorFilter-xETnrds(JI)Landroid/graphics/BlendModeColorFilter; +Landroidx/compose/ui/graphics/BlockGraphicsLayerElement; +HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerElement;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerElement;->create()Landroidx/compose/ui/graphics/BlockGraphicsLayerModifier; +HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerElement;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerElement;->update(Landroidx/compose/ui/Modifier$Node;)V +HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerElement;->update(Landroidx/compose/ui/graphics/BlockGraphicsLayerModifier;)V +Landroidx/compose/ui/graphics/BlockGraphicsLayerModifier; +HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier;->getLayerBlock()Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier;->getShouldAutoInvalidate()Z +HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier;->invalidateLayerBlock()V +HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; +HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier;->setLayerBlock(Lkotlin/jvm/functions/Function1;)V +Landroidx/compose/ui/graphics/BlockGraphicsLayerModifier$measure$1; +HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier$measure$1;->(Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/graphics/BlockGraphicsLayerModifier;)V +HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/ui/graphics/BlockGraphicsLayerModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/graphics/Brush; +HSPLandroidx/compose/ui/graphics/Brush;->()V +HSPLandroidx/compose/ui/graphics/Brush;->()V +HSPLandroidx/compose/ui/graphics/Brush;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/graphics/Brush$Companion; +HSPLandroidx/compose/ui/graphics/Brush$Companion;->()V +HSPLandroidx/compose/ui/graphics/Brush$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/graphics/Canvas; +Landroidx/compose/ui/graphics/CanvasHolder; +HSPLandroidx/compose/ui/graphics/CanvasHolder;->()V +HSPLandroidx/compose/ui/graphics/CanvasHolder;->getAndroidCanvas()Landroidx/compose/ui/graphics/AndroidCanvas; +Landroidx/compose/ui/graphics/CanvasKt; +HSPLandroidx/compose/ui/graphics/CanvasKt;->Canvas(Landroidx/compose/ui/graphics/ImageBitmap;)Landroidx/compose/ui/graphics/Canvas; +Landroidx/compose/ui/graphics/Color; +HSPLandroidx/compose/ui/graphics/Color;->()V +HSPLandroidx/compose/ui/graphics/Color;->(J)V +HSPLandroidx/compose/ui/graphics/Color;->access$getBlack$cp()J +HSPLandroidx/compose/ui/graphics/Color;->access$getBlue$cp()J +HSPLandroidx/compose/ui/graphics/Color;->access$getGray$cp()J +HSPLandroidx/compose/ui/graphics/Color;->access$getRed$cp()J +HSPLandroidx/compose/ui/graphics/Color;->access$getTransparent$cp()J +HSPLandroidx/compose/ui/graphics/Color;->access$getUnspecified$cp()J +HSPLandroidx/compose/ui/graphics/Color;->access$getWhite$cp()J +HSPLandroidx/compose/ui/graphics/Color;->box-impl(J)Landroidx/compose/ui/graphics/Color; +HSPLandroidx/compose/ui/graphics/Color;->component1-impl(J)F +HSPLandroidx/compose/ui/graphics/Color;->component2-impl(J)F +HSPLandroidx/compose/ui/graphics/Color;->component3-impl(J)F +HSPLandroidx/compose/ui/graphics/Color;->component4-impl(J)F +HSPLandroidx/compose/ui/graphics/Color;->constructor-impl(J)J +HSPLandroidx/compose/ui/graphics/Color;->convert-vNxB06k(JLandroidx/compose/ui/graphics/colorspace/ColorSpace;)J +HSPLandroidx/compose/ui/graphics/Color;->copy-wmQWz5c$default(JFFFFILjava/lang/Object;)J +HSPLandroidx/compose/ui/graphics/Color;->copy-wmQWz5c(JFFFF)J +HSPLandroidx/compose/ui/graphics/Color;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/graphics/Color;->equals-impl(JLjava/lang/Object;)Z +HSPLandroidx/compose/ui/graphics/Color;->equals-impl0(JJ)Z +HSPLandroidx/compose/ui/graphics/Color;->getAlpha-impl(J)F +HSPLandroidx/compose/ui/graphics/Color;->getBlue-impl(J)F +HSPLandroidx/compose/ui/graphics/Color;->getColorSpace-impl(J)Landroidx/compose/ui/graphics/colorspace/ColorSpace; +HSPLandroidx/compose/ui/graphics/Color;->getGreen-impl(J)F +HSPLandroidx/compose/ui/graphics/Color;->getRed-impl(J)F +HSPLandroidx/compose/ui/graphics/Color;->hashCode-impl(J)I +HSPLandroidx/compose/ui/graphics/Color;->unbox-impl()J +Landroidx/compose/ui/graphics/Color$Companion; +HSPLandroidx/compose/ui/graphics/Color$Companion;->()V +HSPLandroidx/compose/ui/graphics/Color$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/Color$Companion;->getBlack-0d7_KjU()J +HSPLandroidx/compose/ui/graphics/Color$Companion;->getBlue-0d7_KjU()J +HSPLandroidx/compose/ui/graphics/Color$Companion;->getGray-0d7_KjU()J +HSPLandroidx/compose/ui/graphics/Color$Companion;->getRed-0d7_KjU()J +HSPLandroidx/compose/ui/graphics/Color$Companion;->getTransparent-0d7_KjU()J +HSPLandroidx/compose/ui/graphics/Color$Companion;->getUnspecified-0d7_KjU()J +HSPLandroidx/compose/ui/graphics/Color$Companion;->getWhite-0d7_KjU()J +HSPLandroidx/compose/ui/graphics/Color$Companion;->hsv-JlNiLsg$default(Landroidx/compose/ui/graphics/Color$Companion;FFFFLandroidx/compose/ui/graphics/colorspace/Rgb;ILjava/lang/Object;)J +HSPLandroidx/compose/ui/graphics/Color$Companion;->hsv-JlNiLsg(FFFFLandroidx/compose/ui/graphics/colorspace/Rgb;)J +HSPLandroidx/compose/ui/graphics/Color$Companion;->hsvToRgbComponent(IFFF)F +Landroidx/compose/ui/graphics/ColorFilter; +HSPLandroidx/compose/ui/graphics/ColorFilter;->()V +HSPLandroidx/compose/ui/graphics/ColorFilter;->(Landroid/graphics/ColorFilter;)V +HSPLandroidx/compose/ui/graphics/ColorFilter;->getNativeColorFilter$ui_graphics_release()Landroid/graphics/ColorFilter; +Landroidx/compose/ui/graphics/ColorFilter$Companion; +HSPLandroidx/compose/ui/graphics/ColorFilter$Companion;->()V +HSPLandroidx/compose/ui/graphics/ColorFilter$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/ColorFilter$Companion;->tint-xETnrds$default(Landroidx/compose/ui/graphics/ColorFilter$Companion;JIILjava/lang/Object;)Landroidx/compose/ui/graphics/ColorFilter; +HSPLandroidx/compose/ui/graphics/ColorFilter$Companion;->tint-xETnrds(JI)Landroidx/compose/ui/graphics/ColorFilter; +Landroidx/compose/ui/graphics/ColorKt; +HSPLandroidx/compose/ui/graphics/ColorKt;->Color$default(FFFFLandroidx/compose/ui/graphics/colorspace/ColorSpace;ILjava/lang/Object;)J +HSPLandroidx/compose/ui/graphics/ColorKt;->Color$default(IIIIILjava/lang/Object;)J +HSPLandroidx/compose/ui/graphics/ColorKt;->Color(FFFFLandroidx/compose/ui/graphics/colorspace/ColorSpace;)J +HSPLandroidx/compose/ui/graphics/ColorKt;->Color(I)J +HSPLandroidx/compose/ui/graphics/ColorKt;->Color(IIII)J +HSPLandroidx/compose/ui/graphics/ColorKt;->Color(J)J +HSPLandroidx/compose/ui/graphics/ColorKt;->compositeOver--OWjLjI(JJ)J +HSPLandroidx/compose/ui/graphics/ColorKt;->lerp-jxsXWHM(JJF)J +HSPLandroidx/compose/ui/graphics/ColorKt;->luminance-8_81llA(J)F +HSPLandroidx/compose/ui/graphics/ColorKt;->saturate(F)F +HSPLandroidx/compose/ui/graphics/ColorKt;->toArgb-8_81llA(J)I +Landroidx/compose/ui/graphics/ColorProducer; +Landroidx/compose/ui/graphics/ColorSpaceVerificationHelper; +HSPLandroidx/compose/ui/graphics/ColorSpaceVerificationHelper;->()V +HSPLandroidx/compose/ui/graphics/ColorSpaceVerificationHelper;->()V +HSPLandroidx/compose/ui/graphics/ColorSpaceVerificationHelper;->androidColorSpace(Landroidx/compose/ui/graphics/colorspace/ColorSpace;)Landroid/graphics/ColorSpace; +Landroidx/compose/ui/graphics/CompositingStrategy; +HSPLandroidx/compose/ui/graphics/CompositingStrategy;->()V +HSPLandroidx/compose/ui/graphics/CompositingStrategy;->access$getAuto$cp()I +HSPLandroidx/compose/ui/graphics/CompositingStrategy;->access$getModulateAlpha$cp()I +HSPLandroidx/compose/ui/graphics/CompositingStrategy;->access$getOffscreen$cp()I +HSPLandroidx/compose/ui/graphics/CompositingStrategy;->constructor-impl(I)I +HSPLandroidx/compose/ui/graphics/CompositingStrategy;->equals-impl0(II)Z +Landroidx/compose/ui/graphics/CompositingStrategy$Companion; +HSPLandroidx/compose/ui/graphics/CompositingStrategy$Companion;->()V +HSPLandroidx/compose/ui/graphics/CompositingStrategy$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/CompositingStrategy$Companion;->getAuto--NrFUSI()I +HSPLandroidx/compose/ui/graphics/CompositingStrategy$Companion;->getModulateAlpha--NrFUSI()I +HSPLandroidx/compose/ui/graphics/CompositingStrategy$Companion;->getOffscreen--NrFUSI()I +Landroidx/compose/ui/graphics/FilterQuality; +HSPLandroidx/compose/ui/graphics/FilterQuality;->()V +HSPLandroidx/compose/ui/graphics/FilterQuality;->access$getLow$cp()I +HSPLandroidx/compose/ui/graphics/FilterQuality;->constructor-impl(I)I +HSPLandroidx/compose/ui/graphics/FilterQuality;->equals-impl0(II)Z +Landroidx/compose/ui/graphics/FilterQuality$Companion; +HSPLandroidx/compose/ui/graphics/FilterQuality$Companion;->()V +HSPLandroidx/compose/ui/graphics/FilterQuality$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/FilterQuality$Companion;->getLow-f-v9h1I()I +Landroidx/compose/ui/graphics/Float16; +HSPLandroidx/compose/ui/graphics/Float16;->()V +HSPLandroidx/compose/ui/graphics/Float16;->constructor-impl(F)S +HSPLandroidx/compose/ui/graphics/Float16;->constructor-impl(S)S +HSPLandroidx/compose/ui/graphics/Float16;->toFloat-impl(S)F +Landroidx/compose/ui/graphics/Float16$Companion; +HSPLandroidx/compose/ui/graphics/Float16$Companion;->()V +HSPLandroidx/compose/ui/graphics/Float16$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/Float16$Companion;->access$floatToHalf(Landroidx/compose/ui/graphics/Float16$Companion;F)S +HSPLandroidx/compose/ui/graphics/Float16$Companion;->floatToHalf(F)S +Landroidx/compose/ui/graphics/GraphicsLayerElement; +HSPLandroidx/compose/ui/graphics/GraphicsLayerElement;->(FFFFFFFFFFJLandroidx/compose/ui/graphics/Shape;ZLandroidx/compose/ui/graphics/RenderEffect;JJI)V +HSPLandroidx/compose/ui/graphics/GraphicsLayerElement;->(FFFFFFFFFFJLandroidx/compose/ui/graphics/Shape;ZLandroidx/compose/ui/graphics/RenderEffect;JJILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/GraphicsLayerElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/graphics/GraphicsLayerElement;->create()Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier; +HSPLandroidx/compose/ui/graphics/GraphicsLayerElement;->equals(Ljava/lang/Object;)Z +Landroidx/compose/ui/graphics/GraphicsLayerModifierKt; +HSPLandroidx/compose/ui/graphics/GraphicsLayerModifierKt;->graphicsLayer(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/ui/graphics/GraphicsLayerModifierKt;->graphicsLayer-Ap8cVGQ$default(Landroidx/compose/ui/Modifier;FFFFFFFFFFJLandroidx/compose/ui/graphics/Shape;ZLandroidx/compose/ui/graphics/RenderEffect;JJIILjava/lang/Object;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/ui/graphics/GraphicsLayerModifierKt;->graphicsLayer-Ap8cVGQ(Landroidx/compose/ui/Modifier;FFFFFFFFFFJLandroidx/compose/ui/graphics/Shape;ZLandroidx/compose/ui/graphics/RenderEffect;JJI)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/ui/graphics/GraphicsLayerModifierKt;->toolingGraphicsLayer(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; +Landroidx/compose/ui/graphics/GraphicsLayerScope; +Landroidx/compose/ui/graphics/GraphicsLayerScopeKt; +HSPLandroidx/compose/ui/graphics/GraphicsLayerScopeKt;->()V +HSPLandroidx/compose/ui/graphics/GraphicsLayerScopeKt;->getDefaultShadowColor()J +Landroidx/compose/ui/graphics/ImageBitmap; +Landroidx/compose/ui/graphics/ImageBitmapConfig; +HSPLandroidx/compose/ui/graphics/ImageBitmapConfig;->()V +HSPLandroidx/compose/ui/graphics/ImageBitmapConfig;->access$getArgb8888$cp()I +HSPLandroidx/compose/ui/graphics/ImageBitmapConfig;->constructor-impl(I)I +HSPLandroidx/compose/ui/graphics/ImageBitmapConfig;->equals-impl0(II)Z +Landroidx/compose/ui/graphics/ImageBitmapConfig$Companion; +HSPLandroidx/compose/ui/graphics/ImageBitmapConfig$Companion;->()V +HSPLandroidx/compose/ui/graphics/ImageBitmapConfig$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/ImageBitmapConfig$Companion;->getArgb8888-_sVssgQ()I +Landroidx/compose/ui/graphics/ImageBitmapKt; +HSPLandroidx/compose/ui/graphics/ImageBitmapKt;->ImageBitmap-x__-hDU$default(IIIZLandroidx/compose/ui/graphics/colorspace/ColorSpace;ILjava/lang/Object;)Landroidx/compose/ui/graphics/ImageBitmap; +HSPLandroidx/compose/ui/graphics/ImageBitmapKt;->ImageBitmap-x__-hDU(IIIZLandroidx/compose/ui/graphics/colorspace/ColorSpace;)Landroidx/compose/ui/graphics/ImageBitmap; +Landroidx/compose/ui/graphics/Matrix; +HSPLandroidx/compose/ui/graphics/Matrix;->()V +HSPLandroidx/compose/ui/graphics/Matrix;->([F)V +HSPLandroidx/compose/ui/graphics/Matrix;->box-impl([F)Landroidx/compose/ui/graphics/Matrix; +HSPLandroidx/compose/ui/graphics/Matrix;->constructor-impl$default([FILkotlin/jvm/internal/DefaultConstructorMarker;)[F +HSPLandroidx/compose/ui/graphics/Matrix;->constructor-impl([F)[F +HSPLandroidx/compose/ui/graphics/Matrix;->map-MK-Hz9U([FJ)J +HSPLandroidx/compose/ui/graphics/Matrix;->map-impl([FLandroidx/compose/ui/geometry/MutableRect;)V +HSPLandroidx/compose/ui/graphics/Matrix;->reset-impl([F)V +HSPLandroidx/compose/ui/graphics/Matrix;->rotateZ-impl([FF)V +HSPLandroidx/compose/ui/graphics/Matrix;->scale-impl([FFFF)V +HSPLandroidx/compose/ui/graphics/Matrix;->translate-impl$default([FFFFILjava/lang/Object;)V +HSPLandroidx/compose/ui/graphics/Matrix;->translate-impl([FFFF)V +HSPLandroidx/compose/ui/graphics/Matrix;->unbox-impl()[F +Landroidx/compose/ui/graphics/Matrix$Companion; +HSPLandroidx/compose/ui/graphics/Matrix$Companion;->()V +HSPLandroidx/compose/ui/graphics/Matrix$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/graphics/MatrixKt; +HSPLandroidx/compose/ui/graphics/MatrixKt;->isIdentity-58bKbWc([F)Z +Landroidx/compose/ui/graphics/Outline; +HSPLandroidx/compose/ui/graphics/Outline;->()V +HSPLandroidx/compose/ui/graphics/Outline;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/graphics/Outline$Generic; +Landroidx/compose/ui/graphics/Outline$Rectangle; +HSPLandroidx/compose/ui/graphics/Outline$Rectangle;->(Landroidx/compose/ui/geometry/Rect;)V +HSPLandroidx/compose/ui/graphics/Outline$Rectangle;->getRect()Landroidx/compose/ui/geometry/Rect; +Landroidx/compose/ui/graphics/Outline$Rounded; +HSPLandroidx/compose/ui/graphics/Outline$Rounded;->(Landroidx/compose/ui/geometry/RoundRect;)V +HSPLandroidx/compose/ui/graphics/Outline$Rounded;->getRoundRect()Landroidx/compose/ui/geometry/RoundRect; +HSPLandroidx/compose/ui/graphics/Outline$Rounded;->getRoundRectPath$ui_graphics_release()Landroidx/compose/ui/graphics/Path; +Landroidx/compose/ui/graphics/OutlineKt; +HSPLandroidx/compose/ui/graphics/OutlineKt;->access$hasSameCornerRadius(Landroidx/compose/ui/geometry/RoundRect;)Z +HSPLandroidx/compose/ui/graphics/OutlineKt;->drawOutline-wDX37Ww$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;Landroidx/compose/ui/graphics/Outline;JFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;IILjava/lang/Object;)V +HSPLandroidx/compose/ui/graphics/OutlineKt;->drawOutline-wDX37Ww(Landroidx/compose/ui/graphics/drawscope/DrawScope;Landroidx/compose/ui/graphics/Outline;JFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V +HSPLandroidx/compose/ui/graphics/OutlineKt;->hasSameCornerRadius(Landroidx/compose/ui/geometry/RoundRect;)Z +HSPLandroidx/compose/ui/graphics/OutlineKt;->size(Landroidx/compose/ui/geometry/RoundRect;)J +HSPLandroidx/compose/ui/graphics/OutlineKt;->topLeft(Landroidx/compose/ui/geometry/RoundRect;)J +Landroidx/compose/ui/graphics/Paint; +Landroidx/compose/ui/graphics/PaintingStyle; +HSPLandroidx/compose/ui/graphics/PaintingStyle;->()V +HSPLandroidx/compose/ui/graphics/PaintingStyle;->access$getFill$cp()I +HSPLandroidx/compose/ui/graphics/PaintingStyle;->access$getStroke$cp()I +HSPLandroidx/compose/ui/graphics/PaintingStyle;->constructor-impl(I)I +HSPLandroidx/compose/ui/graphics/PaintingStyle;->equals-impl0(II)Z +Landroidx/compose/ui/graphics/PaintingStyle$Companion; +HSPLandroidx/compose/ui/graphics/PaintingStyle$Companion;->()V +HSPLandroidx/compose/ui/graphics/PaintingStyle$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/PaintingStyle$Companion;->getFill-TiuSbCo()I +HSPLandroidx/compose/ui/graphics/PaintingStyle$Companion;->getStroke-TiuSbCo()I +Landroidx/compose/ui/graphics/Path; +HSPLandroidx/compose/ui/graphics/Path;->()V +Landroidx/compose/ui/graphics/Path$Companion; +HSPLandroidx/compose/ui/graphics/Path$Companion;->()V +HSPLandroidx/compose/ui/graphics/Path$Companion;->()V +Landroidx/compose/ui/graphics/PathEffect; +Landroidx/compose/ui/graphics/PathFillType; +HSPLandroidx/compose/ui/graphics/PathFillType;->()V +HSPLandroidx/compose/ui/graphics/PathFillType;->(I)V +HSPLandroidx/compose/ui/graphics/PathFillType;->access$getEvenOdd$cp()I +HSPLandroidx/compose/ui/graphics/PathFillType;->access$getNonZero$cp()I +HSPLandroidx/compose/ui/graphics/PathFillType;->box-impl(I)Landroidx/compose/ui/graphics/PathFillType; +HSPLandroidx/compose/ui/graphics/PathFillType;->constructor-impl(I)I +HSPLandroidx/compose/ui/graphics/PathFillType;->equals-impl0(II)Z +HSPLandroidx/compose/ui/graphics/PathFillType;->hashCode-impl(I)I +HSPLandroidx/compose/ui/graphics/PathFillType;->unbox-impl()I +Landroidx/compose/ui/graphics/PathFillType$Companion; +HSPLandroidx/compose/ui/graphics/PathFillType$Companion;->()V +HSPLandroidx/compose/ui/graphics/PathFillType$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/PathFillType$Companion;->getEvenOdd-Rg-k1Os()I +HSPLandroidx/compose/ui/graphics/PathFillType$Companion;->getNonZero-Rg-k1Os()I +Landroidx/compose/ui/graphics/PathMeasure; +Landroidx/compose/ui/graphics/RectangleShapeKt; +HSPLandroidx/compose/ui/graphics/RectangleShapeKt;->()V +HSPLandroidx/compose/ui/graphics/RectangleShapeKt;->getRectangleShape()Landroidx/compose/ui/graphics/Shape; +Landroidx/compose/ui/graphics/RectangleShapeKt$RectangleShape$1; +HSPLandroidx/compose/ui/graphics/RectangleShapeKt$RectangleShape$1;->()V +Landroidx/compose/ui/graphics/RenderEffect; +Landroidx/compose/ui/graphics/ReusableGraphicsLayerScope; +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->()V +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getAlpha()F +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getAmbientShadowColor-0d7_KjU()J +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getCameraDistance()F +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getClip()Z +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getCompositingStrategy--NrFUSI()I +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getDensity()F +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getRenderEffect()Landroidx/compose/ui/graphics/RenderEffect; +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getRotationX()F +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getRotationY()F +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getRotationZ()F +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getScaleX()F +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getScaleY()F +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getShadowElevation()F +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getShape()Landroidx/compose/ui/graphics/Shape; +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getSpotShadowColor-0d7_KjU()J +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getTransformOrigin-SzJe1aQ()J +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getTranslationX()F +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->getTranslationY()F +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->reset()V +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setAlpha(F)V +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setAmbientShadowColor-8_81llA(J)V +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setCameraDistance(F)V +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setClip(Z)V +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setCompositingStrategy-aDBOjCE(I)V +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setGraphicsDensity$ui_release(Landroidx/compose/ui/unit/Density;)V +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setRenderEffect(Landroidx/compose/ui/graphics/RenderEffect;)V +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setRotationX(F)V +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setRotationY(F)V +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setRotationZ(F)V +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setScaleX(F)V +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setScaleY(F)V +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setShadowElevation(F)V +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setShape(Landroidx/compose/ui/graphics/Shape;)V +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setSize-uvyYCjk(J)V +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setSpotShadowColor-8_81llA(J)V +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setTransformOrigin-__ExYCQ(J)V +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setTranslationX(F)V +HSPLandroidx/compose/ui/graphics/ReusableGraphicsLayerScope;->setTranslationY(F)V +Landroidx/compose/ui/graphics/ShaderBrush; +Landroidx/compose/ui/graphics/ShaderKt; +HSPLandroidx/compose/ui/graphics/ShaderKt;->LinearGradientShader-VjE6UOU$default(JJLjava/util/List;Ljava/util/List;IILjava/lang/Object;)Landroid/graphics/Shader; +HSPLandroidx/compose/ui/graphics/ShaderKt;->LinearGradientShader-VjE6UOU(JJLjava/util/List;Ljava/util/List;I)Landroid/graphics/Shader; +Landroidx/compose/ui/graphics/Shadow; +HSPLandroidx/compose/ui/graphics/Shadow;->()V +HSPLandroidx/compose/ui/graphics/Shadow;->(JJF)V +HSPLandroidx/compose/ui/graphics/Shadow;->(JJFILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/Shadow;->(JJFLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/Shadow;->access$getNone$cp()Landroidx/compose/ui/graphics/Shadow; +HSPLandroidx/compose/ui/graphics/Shadow;->equals(Ljava/lang/Object;)Z +Landroidx/compose/ui/graphics/Shadow$Companion; +HSPLandroidx/compose/ui/graphics/Shadow$Companion;->()V +HSPLandroidx/compose/ui/graphics/Shadow$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/Shadow$Companion;->getNone()Landroidx/compose/ui/graphics/Shadow; +Landroidx/compose/ui/graphics/Shape; +Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier; +HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->(FFFFFFFFFFJLandroidx/compose/ui/graphics/Shape;ZLandroidx/compose/ui/graphics/RenderEffect;JJI)V +HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->(FFFFFFFFFFJLandroidx/compose/ui/graphics/Shape;ZLandroidx/compose/ui/graphics/RenderEffect;JJILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->access$getLayerBlock$p(Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;)Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getAlpha()F +HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getAmbientShadowColor-0d7_KjU()J +HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getCameraDistance()F +HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getClip()Z +HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getCompositingStrategy--NrFUSI()I +HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getRenderEffect()Landroidx/compose/ui/graphics/RenderEffect; +HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getRotationX()F +HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getRotationY()F +HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getRotationZ()F +HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getScaleX()F +HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getScaleY()F +HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getShadowElevation()F +HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getShape()Landroidx/compose/ui/graphics/Shape; +HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getSpotShadowColor-0d7_KjU()J +HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getTransformOrigin-SzJe1aQ()J +HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getTranslationX()F +HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->getTranslationY()F +HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; +Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier$layerBlock$1; +HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier$layerBlock$1;->(Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;)V +HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier$layerBlock$1;->invoke(Landroidx/compose/ui/graphics/GraphicsLayerScope;)V +HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier$layerBlock$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier$measure$1; +HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier$measure$1;->(Landroidx/compose/ui/layout/Placeable;Landroidx/compose/ui/graphics/SimpleGraphicsLayerModifier;)V +HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier$measure$1;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/ui/graphics/SimpleGraphicsLayerModifier$measure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/graphics/SolidColor; +HSPLandroidx/compose/ui/graphics/SolidColor;->(J)V +HSPLandroidx/compose/ui/graphics/SolidColor;->(JLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/SolidColor;->applyTo-Pq9zytI(JLandroidx/compose/ui/graphics/Paint;F)V +HSPLandroidx/compose/ui/graphics/SolidColor;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/graphics/SolidColor;->getValue-0d7_KjU()J +HSPLandroidx/compose/ui/graphics/SolidColor;->hashCode()I +Landroidx/compose/ui/graphics/StrokeCap; +HSPLandroidx/compose/ui/graphics/StrokeCap;->()V +HSPLandroidx/compose/ui/graphics/StrokeCap;->(I)V +HSPLandroidx/compose/ui/graphics/StrokeCap;->access$getButt$cp()I +HSPLandroidx/compose/ui/graphics/StrokeCap;->access$getRound$cp()I +HSPLandroidx/compose/ui/graphics/StrokeCap;->access$getSquare$cp()I +HSPLandroidx/compose/ui/graphics/StrokeCap;->box-impl(I)Landroidx/compose/ui/graphics/StrokeCap; +HSPLandroidx/compose/ui/graphics/StrokeCap;->constructor-impl(I)I +HSPLandroidx/compose/ui/graphics/StrokeCap;->equals-impl0(II)Z +HSPLandroidx/compose/ui/graphics/StrokeCap;->hashCode-impl(I)I +HSPLandroidx/compose/ui/graphics/StrokeCap;->unbox-impl()I +Landroidx/compose/ui/graphics/StrokeCap$Companion; +HSPLandroidx/compose/ui/graphics/StrokeCap$Companion;->()V +HSPLandroidx/compose/ui/graphics/StrokeCap$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/StrokeCap$Companion;->getButt-KaPHkGw()I +HSPLandroidx/compose/ui/graphics/StrokeCap$Companion;->getRound-KaPHkGw()I +HSPLandroidx/compose/ui/graphics/StrokeCap$Companion;->getSquare-KaPHkGw()I +Landroidx/compose/ui/graphics/StrokeJoin; +HSPLandroidx/compose/ui/graphics/StrokeJoin;->()V +HSPLandroidx/compose/ui/graphics/StrokeJoin;->(I)V +HSPLandroidx/compose/ui/graphics/StrokeJoin;->access$getBevel$cp()I +HSPLandroidx/compose/ui/graphics/StrokeJoin;->access$getMiter$cp()I +HSPLandroidx/compose/ui/graphics/StrokeJoin;->box-impl(I)Landroidx/compose/ui/graphics/StrokeJoin; +HSPLandroidx/compose/ui/graphics/StrokeJoin;->constructor-impl(I)I +HSPLandroidx/compose/ui/graphics/StrokeJoin;->equals-impl0(II)Z +HSPLandroidx/compose/ui/graphics/StrokeJoin;->hashCode-impl(I)I +HSPLandroidx/compose/ui/graphics/StrokeJoin;->unbox-impl()I +Landroidx/compose/ui/graphics/StrokeJoin$Companion; +HSPLandroidx/compose/ui/graphics/StrokeJoin$Companion;->()V +HSPLandroidx/compose/ui/graphics/StrokeJoin$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/StrokeJoin$Companion;->getBevel-LxFBmk8()I +HSPLandroidx/compose/ui/graphics/StrokeJoin$Companion;->getMiter-LxFBmk8()I +Landroidx/compose/ui/graphics/TileMode; +HSPLandroidx/compose/ui/graphics/TileMode;->()V +HSPLandroidx/compose/ui/graphics/TileMode;->access$getClamp$cp()I +HSPLandroidx/compose/ui/graphics/TileMode;->constructor-impl(I)I +HSPLandroidx/compose/ui/graphics/TileMode;->equals-impl0(II)Z +Landroidx/compose/ui/graphics/TileMode$Companion; +HSPLandroidx/compose/ui/graphics/TileMode$Companion;->()V +HSPLandroidx/compose/ui/graphics/TileMode$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/TileMode$Companion;->getClamp-3opZhB0()I +Landroidx/compose/ui/graphics/TransformOrigin; +HSPLandroidx/compose/ui/graphics/TransformOrigin;->()V +HSPLandroidx/compose/ui/graphics/TransformOrigin;->(J)V +HSPLandroidx/compose/ui/graphics/TransformOrigin;->access$getCenter$cp()J +HSPLandroidx/compose/ui/graphics/TransformOrigin;->box-impl(J)Landroidx/compose/ui/graphics/TransformOrigin; +HSPLandroidx/compose/ui/graphics/TransformOrigin;->constructor-impl(J)J +HSPLandroidx/compose/ui/graphics/TransformOrigin;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/graphics/TransformOrigin;->equals-impl(JLjava/lang/Object;)Z +HSPLandroidx/compose/ui/graphics/TransformOrigin;->equals-impl0(JJ)Z +HSPLandroidx/compose/ui/graphics/TransformOrigin;->getPivotFractionX-impl(J)F +HSPLandroidx/compose/ui/graphics/TransformOrigin;->getPivotFractionY-impl(J)F +HSPLandroidx/compose/ui/graphics/TransformOrigin;->unbox-impl()J +Landroidx/compose/ui/graphics/TransformOrigin$Companion; +HSPLandroidx/compose/ui/graphics/TransformOrigin$Companion;->()V +HSPLandroidx/compose/ui/graphics/TransformOrigin$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/TransformOrigin$Companion;->getCenter-SzJe1aQ()J +Landroidx/compose/ui/graphics/TransformOriginKt; +HSPLandroidx/compose/ui/graphics/TransformOriginKt;->TransformOrigin(FF)J +Landroidx/compose/ui/graphics/WrapperVerificationHelperMethods; +HSPLandroidx/compose/ui/graphics/WrapperVerificationHelperMethods;->()V +HSPLandroidx/compose/ui/graphics/WrapperVerificationHelperMethods;->()V +HSPLandroidx/compose/ui/graphics/WrapperVerificationHelperMethods;->setBlendMode-GB0RdKg(Landroid/graphics/Paint;I)V +Landroidx/compose/ui/graphics/colorspace/Adaptation; +HSPLandroidx/compose/ui/graphics/colorspace/Adaptation;->()V +HSPLandroidx/compose/ui/graphics/colorspace/Adaptation;->([F)V +HSPLandroidx/compose/ui/graphics/colorspace/Adaptation;->([FLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/colorspace/Adaptation;->access$getBradford$cp()Landroidx/compose/ui/graphics/colorspace/Adaptation; +HSPLandroidx/compose/ui/graphics/colorspace/Adaptation;->getTransform$ui_graphics_release()[F +Landroidx/compose/ui/graphics/colorspace/Adaptation$Companion; +HSPLandroidx/compose/ui/graphics/colorspace/Adaptation$Companion;->()V +HSPLandroidx/compose/ui/graphics/colorspace/Adaptation$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/colorspace/Adaptation$Companion;->getBradford()Landroidx/compose/ui/graphics/colorspace/Adaptation; +Landroidx/compose/ui/graphics/colorspace/Adaptation$Companion$Bradford$1; +HSPLandroidx/compose/ui/graphics/colorspace/Adaptation$Companion$Bradford$1;->([F)V +Landroidx/compose/ui/graphics/colorspace/Adaptation$Companion$Ciecat02$1; +HSPLandroidx/compose/ui/graphics/colorspace/Adaptation$Companion$Ciecat02$1;->([F)V +Landroidx/compose/ui/graphics/colorspace/Adaptation$Companion$VonKries$1; +HSPLandroidx/compose/ui/graphics/colorspace/Adaptation$Companion$VonKries$1;->([F)V +Landroidx/compose/ui/graphics/colorspace/ColorModel; +HSPLandroidx/compose/ui/graphics/colorspace/ColorModel;->()V +HSPLandroidx/compose/ui/graphics/colorspace/ColorModel;->access$getLab$cp()J +HSPLandroidx/compose/ui/graphics/colorspace/ColorModel;->access$getRgb$cp()J +HSPLandroidx/compose/ui/graphics/colorspace/ColorModel;->access$getXyz$cp()J +HSPLandroidx/compose/ui/graphics/colorspace/ColorModel;->constructor-impl(J)J +HSPLandroidx/compose/ui/graphics/colorspace/ColorModel;->equals-impl0(JJ)Z +HSPLandroidx/compose/ui/graphics/colorspace/ColorModel;->getComponentCount-impl(J)I +Landroidx/compose/ui/graphics/colorspace/ColorModel$Companion; +HSPLandroidx/compose/ui/graphics/colorspace/ColorModel$Companion;->()V +HSPLandroidx/compose/ui/graphics/colorspace/ColorModel$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/colorspace/ColorModel$Companion;->getLab-xdoWZVw()J +HSPLandroidx/compose/ui/graphics/colorspace/ColorModel$Companion;->getRgb-xdoWZVw()J +HSPLandroidx/compose/ui/graphics/colorspace/ColorModel$Companion;->getXyz-xdoWZVw()J +Landroidx/compose/ui/graphics/colorspace/ColorSpace; +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->()V +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->(Ljava/lang/String;JI)V +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->(Ljava/lang/String;JILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->getComponentCount()I +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->getId$ui_graphics_release()I +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->getModel-xdoWZVw()J +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->getName()Ljava/lang/String; +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace;->isSrgb()Z +Landroidx/compose/ui/graphics/colorspace/ColorSpace$Companion; +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace$Companion;->()V +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpace$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/graphics/colorspace/ColorSpaceKt; +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->adapt$default(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/WhitePoint;Landroidx/compose/ui/graphics/colorspace/Adaptation;ILjava/lang/Object;)Landroidx/compose/ui/graphics/colorspace/ColorSpace; +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->adapt(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/WhitePoint;Landroidx/compose/ui/graphics/colorspace/Adaptation;)Landroidx/compose/ui/graphics/colorspace/ColorSpace; +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->chromaticAdaptation([F[F[F)[F +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->compare(Landroidx/compose/ui/graphics/colorspace/WhitePoint;Landroidx/compose/ui/graphics/colorspace/WhitePoint;)Z +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->compare([F[F)Z +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->connect-YBCOT_4$default(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;IILjava/lang/Object;)Landroidx/compose/ui/graphics/colorspace/Connector; +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->connect-YBCOT_4(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;I)Landroidx/compose/ui/graphics/colorspace/Connector; +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->inverse3x3([F)[F +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->mul3x3([F[F)[F +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->mul3x3Diag([F[F)[F +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->mul3x3Float3([F[F)[F +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->mul3x3Float3_0([FFFF)F +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->mul3x3Float3_1([FFFF)F +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->mul3x3Float3_2([FFFF)F +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->rcpResponse(DDDDDD)D +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaceKt;->response(DDDDDD)D +Landroidx/compose/ui/graphics/colorspace/ColorSpaces; +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;->()V +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;->()V +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;->getColorSpacesArray$ui_graphics_release()[Landroidx/compose/ui/graphics/colorspace/ColorSpace; +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;->getNtsc1953Primaries$ui_graphics_release()[F +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;->getOklab()Landroidx/compose/ui/graphics/colorspace/ColorSpace; +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;->getSrgb()Landroidx/compose/ui/graphics/colorspace/Rgb; +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;->getSrgbPrimaries$ui_graphics_release()[F +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces;->getUnspecified$ui_graphics_release()Landroidx/compose/ui/graphics/colorspace/Rgb; +Landroidx/compose/ui/graphics/colorspace/ColorSpaces$$ExternalSyntheticLambda0; +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces$$ExternalSyntheticLambda0;->()V +Landroidx/compose/ui/graphics/colorspace/ColorSpaces$$ExternalSyntheticLambda1; +HSPLandroidx/compose/ui/graphics/colorspace/ColorSpaces$$ExternalSyntheticLambda1;->()V +Landroidx/compose/ui/graphics/colorspace/Connector; +HSPLandroidx/compose/ui/graphics/colorspace/Connector;->()V +HSPLandroidx/compose/ui/graphics/colorspace/Connector;->(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;I)V +HSPLandroidx/compose/ui/graphics/colorspace/Connector;->(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/colorspace/Connector;->(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;I[F)V +HSPLandroidx/compose/ui/graphics/colorspace/Connector;->(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;I[FLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/colorspace/Connector;->access$getOklabToSrgbPerceptual$cp()Landroidx/compose/ui/graphics/colorspace/Connector; +HSPLandroidx/compose/ui/graphics/colorspace/Connector;->access$getSrgbToOklabPerceptual$cp()Landroidx/compose/ui/graphics/colorspace/Connector; +HSPLandroidx/compose/ui/graphics/colorspace/Connector;->transformToColor-wmQWz5c$ui_graphics_release(FFFF)J +Landroidx/compose/ui/graphics/colorspace/Connector$Companion; +HSPLandroidx/compose/ui/graphics/colorspace/Connector$Companion;->()V +HSPLandroidx/compose/ui/graphics/colorspace/Connector$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/colorspace/Connector$Companion;->access$computeTransform-YBCOT_4(Landroidx/compose/ui/graphics/colorspace/Connector$Companion;Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;I)[F +HSPLandroidx/compose/ui/graphics/colorspace/Connector$Companion;->computeTransform-YBCOT_4(Landroidx/compose/ui/graphics/colorspace/ColorSpace;Landroidx/compose/ui/graphics/colorspace/ColorSpace;I)[F +HSPLandroidx/compose/ui/graphics/colorspace/Connector$Companion;->getOklabToSrgbPerceptual$ui_graphics_release()Landroidx/compose/ui/graphics/colorspace/Connector; +HSPLandroidx/compose/ui/graphics/colorspace/Connector$Companion;->getSrgbToOklabPerceptual$ui_graphics_release()Landroidx/compose/ui/graphics/colorspace/Connector; +HSPLandroidx/compose/ui/graphics/colorspace/Connector$Companion;->identity$ui_graphics_release(Landroidx/compose/ui/graphics/colorspace/ColorSpace;)Landroidx/compose/ui/graphics/colorspace/Connector; +Landroidx/compose/ui/graphics/colorspace/Connector$Companion$identity$1; +HSPLandroidx/compose/ui/graphics/colorspace/Connector$Companion$identity$1;->(Landroidx/compose/ui/graphics/colorspace/ColorSpace;I)V +Landroidx/compose/ui/graphics/colorspace/Connector$RgbConnector; +HSPLandroidx/compose/ui/graphics/colorspace/Connector$RgbConnector;->(Landroidx/compose/ui/graphics/colorspace/Rgb;Landroidx/compose/ui/graphics/colorspace/Rgb;I)V +HSPLandroidx/compose/ui/graphics/colorspace/Connector$RgbConnector;->(Landroidx/compose/ui/graphics/colorspace/Rgb;Landroidx/compose/ui/graphics/colorspace/Rgb;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/colorspace/Connector$RgbConnector;->computeTransform-YBCOT_4(Landroidx/compose/ui/graphics/colorspace/Rgb;Landroidx/compose/ui/graphics/colorspace/Rgb;I)[F +HSPLandroidx/compose/ui/graphics/colorspace/Connector$RgbConnector;->transformToColor-wmQWz5c$ui_graphics_release(FFFF)J +Landroidx/compose/ui/graphics/colorspace/DoubleFunction; +Landroidx/compose/ui/graphics/colorspace/Illuminant; +HSPLandroidx/compose/ui/graphics/colorspace/Illuminant;->()V +HSPLandroidx/compose/ui/graphics/colorspace/Illuminant;->()V +HSPLandroidx/compose/ui/graphics/colorspace/Illuminant;->getC()Landroidx/compose/ui/graphics/colorspace/WhitePoint; +HSPLandroidx/compose/ui/graphics/colorspace/Illuminant;->getD50()Landroidx/compose/ui/graphics/colorspace/WhitePoint; +HSPLandroidx/compose/ui/graphics/colorspace/Illuminant;->getD60()Landroidx/compose/ui/graphics/colorspace/WhitePoint; +HSPLandroidx/compose/ui/graphics/colorspace/Illuminant;->getD65()Landroidx/compose/ui/graphics/colorspace/WhitePoint; +Landroidx/compose/ui/graphics/colorspace/Lab; +HSPLandroidx/compose/ui/graphics/colorspace/Lab;->()V +HSPLandroidx/compose/ui/graphics/colorspace/Lab;->(Ljava/lang/String;I)V +Landroidx/compose/ui/graphics/colorspace/Lab$Companion; +HSPLandroidx/compose/ui/graphics/colorspace/Lab$Companion;->()V +HSPLandroidx/compose/ui/graphics/colorspace/Lab$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/graphics/colorspace/Oklab; +HSPLandroidx/compose/ui/graphics/colorspace/Oklab;->()V +HSPLandroidx/compose/ui/graphics/colorspace/Oklab;->(Ljava/lang/String;I)V +HSPLandroidx/compose/ui/graphics/colorspace/Oklab;->getMaxValue(I)F +HSPLandroidx/compose/ui/graphics/colorspace/Oklab;->getMinValue(I)F +HSPLandroidx/compose/ui/graphics/colorspace/Oklab;->toXy$ui_graphics_release(FFF)J +HSPLandroidx/compose/ui/graphics/colorspace/Oklab;->toZ$ui_graphics_release(FFF)F +HSPLandroidx/compose/ui/graphics/colorspace/Oklab;->xyzaToColor-JlNiLsg$ui_graphics_release(FFFFLandroidx/compose/ui/graphics/colorspace/ColorSpace;)J +Landroidx/compose/ui/graphics/colorspace/Oklab$Companion; +HSPLandroidx/compose/ui/graphics/colorspace/Oklab$Companion;->()V +HSPLandroidx/compose/ui/graphics/colorspace/Oklab$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/graphics/colorspace/RenderIntent; +HSPLandroidx/compose/ui/graphics/colorspace/RenderIntent;->()V +HSPLandroidx/compose/ui/graphics/colorspace/RenderIntent;->access$getAbsolute$cp()I +HSPLandroidx/compose/ui/graphics/colorspace/RenderIntent;->access$getPerceptual$cp()I +HSPLandroidx/compose/ui/graphics/colorspace/RenderIntent;->access$getRelative$cp()I +HSPLandroidx/compose/ui/graphics/colorspace/RenderIntent;->constructor-impl(I)I +HSPLandroidx/compose/ui/graphics/colorspace/RenderIntent;->equals-impl0(II)Z +Landroidx/compose/ui/graphics/colorspace/RenderIntent$Companion; +HSPLandroidx/compose/ui/graphics/colorspace/RenderIntent$Companion;->()V +HSPLandroidx/compose/ui/graphics/colorspace/RenderIntent$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/colorspace/RenderIntent$Companion;->getAbsolute-uksYyKA()I +HSPLandroidx/compose/ui/graphics/colorspace/RenderIntent$Companion;->getPerceptual-uksYyKA()I +HSPLandroidx/compose/ui/graphics/colorspace/RenderIntent$Companion;->getRelative-uksYyKA()I +Landroidx/compose/ui/graphics/colorspace/Rgb; +HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->$r8$lambda$FANKyyW7TMwi4gnihl1LqxbkU6k(Landroidx/compose/ui/graphics/colorspace/Rgb;D)D +HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->$r8$lambda$G8Pyx7Z9bMrnDjgEiQ7pXGTZEzg(Landroidx/compose/ui/graphics/colorspace/TransferParameters;D)D +HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->$r8$lambda$OfmTeMXzL_nayJmS5mO6N4G4DlI(Landroidx/compose/ui/graphics/colorspace/Rgb;D)D +HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->$r8$lambda$ahWovdYS5NpJ-IThda37cTda4qg(D)D +HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->$r8$lambda$q_AtDSzDu9yw5JwgrVWJo3kmlB0(Landroidx/compose/ui/graphics/colorspace/TransferParameters;D)D +HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->()V +HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->(Landroidx/compose/ui/graphics/colorspace/Rgb;[FLandroidx/compose/ui/graphics/colorspace/WhitePoint;)V +HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->(Ljava/lang/String;[FLandroidx/compose/ui/graphics/colorspace/WhitePoint;DFFI)V +HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->(Ljava/lang/String;[FLandroidx/compose/ui/graphics/colorspace/WhitePoint;Landroidx/compose/ui/graphics/colorspace/TransferParameters;I)V +HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->(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 +HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->DoubleIdentity$lambda$12(D)D +HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->_init_$lambda$6(Landroidx/compose/ui/graphics/colorspace/TransferParameters;D)D +HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->_init_$lambda$8(Landroidx/compose/ui/graphics/colorspace/TransferParameters;D)D +HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->eotfFunc$lambda$1(Landroidx/compose/ui/graphics/colorspace/Rgb;D)D +HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->getEotfFunc$ui_graphics_release()Landroidx/compose/ui/graphics/colorspace/DoubleFunction; +HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->getEotfOrig$ui_graphics_release()Landroidx/compose/ui/graphics/colorspace/DoubleFunction; +HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->getInverseTransform$ui_graphics_release()[F +HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->getMaxValue(I)F +HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->getMinValue(I)F +HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->getOetfFunc$ui_graphics_release()Landroidx/compose/ui/graphics/colorspace/DoubleFunction; +HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->getOetfOrig$ui_graphics_release()Landroidx/compose/ui/graphics/colorspace/DoubleFunction; +HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->getTransform$ui_graphics_release()[F +HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->getWhitePoint()Landroidx/compose/ui/graphics/colorspace/WhitePoint; +HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->isSrgb()Z +HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->oetfFunc$lambda$0(Landroidx/compose/ui/graphics/colorspace/Rgb;D)D +HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->toXy$ui_graphics_release(FFF)J +HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->toZ$ui_graphics_release(FFF)F +HSPLandroidx/compose/ui/graphics/colorspace/Rgb;->xyzaToColor-JlNiLsg$ui_graphics_release(FFFFLandroidx/compose/ui/graphics/colorspace/ColorSpace;)J +Landroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda1; +HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda1;->()V +HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda1;->invoke(D)D +Landroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda11; +HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda11;->(Landroidx/compose/ui/graphics/colorspace/TransferParameters;)V +HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda11;->invoke(D)D +Landroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda2; +HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda2;->(D)V +Landroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda3; +HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda3;->(D)V +Landroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda7; +HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda7;->(Landroidx/compose/ui/graphics/colorspace/Rgb;)V +HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda7;->invoke(D)D +Landroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda8; +HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda8;->(Landroidx/compose/ui/graphics/colorspace/Rgb;)V +HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda8;->invoke(D)D +Landroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda9; +HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda9;->(Landroidx/compose/ui/graphics/colorspace/TransferParameters;)V +HSPLandroidx/compose/ui/graphics/colorspace/Rgb$$ExternalSyntheticLambda9;->invoke(D)D +Landroidx/compose/ui/graphics/colorspace/Rgb$Companion; +HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion;->()V +HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion;->access$computeXYZMatrix(Landroidx/compose/ui/graphics/colorspace/Rgb$Companion;[FLandroidx/compose/ui/graphics/colorspace/WhitePoint;)[F +HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion;->access$isSrgb(Landroidx/compose/ui/graphics/colorspace/Rgb$Companion;[FLandroidx/compose/ui/graphics/colorspace/WhitePoint;Landroidx/compose/ui/graphics/colorspace/DoubleFunction;Landroidx/compose/ui/graphics/colorspace/DoubleFunction;FFI)Z +HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion;->access$isWideGamut(Landroidx/compose/ui/graphics/colorspace/Rgb$Companion;[FFF)Z +HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion;->access$xyPrimaries(Landroidx/compose/ui/graphics/colorspace/Rgb$Companion;[F)[F +HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion;->area([F)F +HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion;->compare(DLandroidx/compose/ui/graphics/colorspace/DoubleFunction;Landroidx/compose/ui/graphics/colorspace/DoubleFunction;)Z +HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion;->computeXYZMatrix([FLandroidx/compose/ui/graphics/colorspace/WhitePoint;)[F +HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion;->contains([F[F)Z +HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion;->cross(FFFF)F +HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion;->isSrgb([FLandroidx/compose/ui/graphics/colorspace/WhitePoint;Landroidx/compose/ui/graphics/colorspace/DoubleFunction;Landroidx/compose/ui/graphics/colorspace/DoubleFunction;FFI)Z +HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion;->isWideGamut([FFF)Z +HSPLandroidx/compose/ui/graphics/colorspace/Rgb$Companion;->xyPrimaries([F)[F +Landroidx/compose/ui/graphics/colorspace/Rgb$eotf$1; +HSPLandroidx/compose/ui/graphics/colorspace/Rgb$eotf$1;->(Landroidx/compose/ui/graphics/colorspace/Rgb;)V +Landroidx/compose/ui/graphics/colorspace/Rgb$oetf$1; +HSPLandroidx/compose/ui/graphics/colorspace/Rgb$oetf$1;->(Landroidx/compose/ui/graphics/colorspace/Rgb;)V +Landroidx/compose/ui/graphics/colorspace/TransferParameters; +HSPLandroidx/compose/ui/graphics/colorspace/TransferParameters;->(DDDDDDD)V +HSPLandroidx/compose/ui/graphics/colorspace/TransferParameters;->(DDDDDDDILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/colorspace/TransferParameters;->getA()D +HSPLandroidx/compose/ui/graphics/colorspace/TransferParameters;->getB()D +HSPLandroidx/compose/ui/graphics/colorspace/TransferParameters;->getC()D +HSPLandroidx/compose/ui/graphics/colorspace/TransferParameters;->getD()D +HSPLandroidx/compose/ui/graphics/colorspace/TransferParameters;->getE()D +HSPLandroidx/compose/ui/graphics/colorspace/TransferParameters;->getF()D +HSPLandroidx/compose/ui/graphics/colorspace/TransferParameters;->getGamma()D +Landroidx/compose/ui/graphics/colorspace/WhitePoint; +HSPLandroidx/compose/ui/graphics/colorspace/WhitePoint;->(FF)V +HSPLandroidx/compose/ui/graphics/colorspace/WhitePoint;->getX()F +HSPLandroidx/compose/ui/graphics/colorspace/WhitePoint;->getY()F +HSPLandroidx/compose/ui/graphics/colorspace/WhitePoint;->toXyz$ui_graphics_release()[F +Landroidx/compose/ui/graphics/colorspace/Xyz; +HSPLandroidx/compose/ui/graphics/colorspace/Xyz;->(Ljava/lang/String;I)V +Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope; +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->()V +HSPLandroidx/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;IIILjava/lang/Object;)Landroidx/compose/ui/graphics/Paint; +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->configurePaint-2qPWKa0(JLandroidx/compose/ui/graphics/drawscope/DrawStyle;FLandroidx/compose/ui/graphics/ColorFilter;II)Landroidx/compose/ui/graphics/Paint; +HSPLandroidx/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;IIILjava/lang/Object;)Landroidx/compose/ui/graphics/Paint; +HSPLandroidx/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/Paint; +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->configureStrokePaint-ho4zsrM$default(Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope;Landroidx/compose/ui/graphics/Brush;FFIILandroidx/compose/ui/graphics/PathEffect;FLandroidx/compose/ui/graphics/ColorFilter;IIILjava/lang/Object;)Landroidx/compose/ui/graphics/Paint; +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->configureStrokePaint-ho4zsrM(Landroidx/compose/ui/graphics/Brush;FFIILandroidx/compose/ui/graphics/PathEffect;FLandroidx/compose/ui/graphics/ColorFilter;II)Landroidx/compose/ui/graphics/Paint; +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawArc-yD3GUKo(JFFZJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V +HSPLandroidx/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 +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawLine-1RTmtNc(Landroidx/compose/ui/graphics/Brush;JJFILandroidx/compose/ui/graphics/PathEffect;FLandroidx/compose/ui/graphics/ColorFilter;I)V +HSPLandroidx/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 +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawPath-LG529CI(Landroidx/compose/ui/graphics/Path;JFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawRect-n-J9OG0(JJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V +HSPLandroidx/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 +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->drawRoundRect-u-Aw5IA(JJJJLandroidx/compose/ui/graphics/drawscope/DrawStyle;FLandroidx/compose/ui/graphics/ColorFilter;I)V +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->getDensity()F +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->getDrawContext()Landroidx/compose/ui/graphics/drawscope/DrawContext; +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->getDrawParams()Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams; +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection; +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->modulate-5vOe2sY(JF)J +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->obtainFillPaint()Landroidx/compose/ui/graphics/Paint; +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->obtainStrokePaint()Landroidx/compose/ui/graphics/Paint; +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope;->selectPaint(Landroidx/compose/ui/graphics/drawscope/DrawStyle;)Landroidx/compose/ui/graphics/Paint; +Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams; +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/graphics/Canvas;J)V +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/graphics/Canvas;JILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->(Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/graphics/Canvas;JLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->component1()Landroidx/compose/ui/unit/Density; +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->component2()Landroidx/compose/ui/unit/LayoutDirection; +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->component3()Landroidx/compose/ui/graphics/Canvas; +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->component4-NH-jbRc()J +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->getCanvas()Landroidx/compose/ui/graphics/Canvas; +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->getDensity()Landroidx/compose/ui/unit/Density; +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection; +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->getSize-NH-jbRc()J +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->setCanvas(Landroidx/compose/ui/graphics/Canvas;)V +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->setDensity(Landroidx/compose/ui/unit/Density;)V +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->setLayoutDirection(Landroidx/compose/ui/unit/LayoutDirection;)V +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$DrawParams;->setSize-uvyYCjk(J)V +Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1; +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;->(Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope;)V +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;->getCanvas()Landroidx/compose/ui/graphics/Canvas; +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;->getSize-NH-jbRc()J +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;->getTransform()Landroidx/compose/ui/graphics/drawscope/DrawTransform; +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScope$drawContext$1;->setSize-uvyYCjk(J)V +Landroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt; +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt;->()V +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt;->access$asDrawTransform(Landroidx/compose/ui/graphics/drawscope/DrawContext;)Landroidx/compose/ui/graphics/drawscope/DrawTransform; +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt;->access$getDefaultDensity$p()Landroidx/compose/ui/unit/Density; +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt;->asDrawTransform(Landroidx/compose/ui/graphics/drawscope/DrawContext;)Landroidx/compose/ui/graphics/drawscope/DrawTransform; +Landroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1; +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;->(Landroidx/compose/ui/graphics/drawscope/DrawContext;)V +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;->getSize-NH-jbRc()J +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;->inset(FFFF)V +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;->transform-58bKbWc([F)V +HSPLandroidx/compose/ui/graphics/drawscope/CanvasDrawScopeKt$asDrawTransform$1;->translate(FF)V +Landroidx/compose/ui/graphics/drawscope/ContentDrawScope; +Landroidx/compose/ui/graphics/drawscope/DrawContext; +Landroidx/compose/ui/graphics/drawscope/DrawScope; +HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->()V +HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawArc-yD3GUKo$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;JFFZJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;IILjava/lang/Object;)V +HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawImage-AZ2fEMs$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;Landroidx/compose/ui/graphics/ImageBitmap;JJJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;IIILjava/lang/Object;)V +HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawLine-1RTmtNc$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;Landroidx/compose/ui/graphics/Brush;JJFILandroidx/compose/ui/graphics/PathEffect;FLandroidx/compose/ui/graphics/ColorFilter;IILjava/lang/Object;)V +HSPLandroidx/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/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;IILjava/lang/Object;)V +HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawPath-LG529CI$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;Landroidx/compose/ui/graphics/Path;JFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;IILjava/lang/Object;)V +HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawRect-n-J9OG0$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;JJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;IILjava/lang/Object;)V +HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawRoundRect-ZuiqVtQ$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;Landroidx/compose/ui/graphics/Brush;JJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;IILjava/lang/Object;)V +HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->drawRoundRect-u-Aw5IA$default(Landroidx/compose/ui/graphics/drawscope/DrawScope;JJJJLandroidx/compose/ui/graphics/drawscope/DrawStyle;FLandroidx/compose/ui/graphics/ColorFilter;IILjava/lang/Object;)V +HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->getSize-NH-jbRc()J +HSPLandroidx/compose/ui/graphics/drawscope/DrawScope;->offsetSize-PENXr5M(JJ)J +Landroidx/compose/ui/graphics/drawscope/DrawScope$Companion; +HSPLandroidx/compose/ui/graphics/drawscope/DrawScope$Companion;->()V +HSPLandroidx/compose/ui/graphics/drawscope/DrawScope$Companion;->()V +HSPLandroidx/compose/ui/graphics/drawscope/DrawScope$Companion;->getDefaultBlendMode-0nO6VwU()I +HSPLandroidx/compose/ui/graphics/drawscope/DrawScope$Companion;->getDefaultFilterQuality-f-v9h1I()I +Landroidx/compose/ui/graphics/drawscope/DrawStyle; +HSPLandroidx/compose/ui/graphics/drawscope/DrawStyle;->()V +HSPLandroidx/compose/ui/graphics/drawscope/DrawStyle;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/graphics/drawscope/DrawTransform; +Landroidx/compose/ui/graphics/drawscope/EmptyCanvas; +HSPLandroidx/compose/ui/graphics/drawscope/EmptyCanvas;->()V +Landroidx/compose/ui/graphics/drawscope/Fill; +HSPLandroidx/compose/ui/graphics/drawscope/Fill;->()V +HSPLandroidx/compose/ui/graphics/drawscope/Fill;->()V +Landroidx/compose/ui/graphics/drawscope/Stroke; +HSPLandroidx/compose/ui/graphics/drawscope/Stroke;->()V +HSPLandroidx/compose/ui/graphics/drawscope/Stroke;->(FFIILandroidx/compose/ui/graphics/PathEffect;)V +HSPLandroidx/compose/ui/graphics/drawscope/Stroke;->(FFIILandroidx/compose/ui/graphics/PathEffect;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/drawscope/Stroke;->(FFIILandroidx/compose/ui/graphics/PathEffect;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/drawscope/Stroke;->access$getDefaultCap$cp()I +HSPLandroidx/compose/ui/graphics/drawscope/Stroke;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/graphics/drawscope/Stroke;->getCap-KaPHkGw()I +HSPLandroidx/compose/ui/graphics/drawscope/Stroke;->getJoin-LxFBmk8()I +HSPLandroidx/compose/ui/graphics/drawscope/Stroke;->getMiter()F +HSPLandroidx/compose/ui/graphics/drawscope/Stroke;->getPathEffect()Landroidx/compose/ui/graphics/PathEffect; +HSPLandroidx/compose/ui/graphics/drawscope/Stroke;->getWidth()F +Landroidx/compose/ui/graphics/drawscope/Stroke$Companion; +HSPLandroidx/compose/ui/graphics/drawscope/Stroke$Companion;->()V +HSPLandroidx/compose/ui/graphics/drawscope/Stroke$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/drawscope/Stroke$Companion;->getDefaultCap-KaPHkGw()I +Landroidx/compose/ui/graphics/painter/Painter; +HSPLandroidx/compose/ui/graphics/painter/Painter;->()V +HSPLandroidx/compose/ui/graphics/painter/Painter;->configureAlpha(F)V +HSPLandroidx/compose/ui/graphics/painter/Painter;->configureColorFilter(Landroidx/compose/ui/graphics/ColorFilter;)V +HSPLandroidx/compose/ui/graphics/painter/Painter;->configureLayoutDirection(Landroidx/compose/ui/unit/LayoutDirection;)V +HSPLandroidx/compose/ui/graphics/painter/Painter;->draw-x_KDEd0(Landroidx/compose/ui/graphics/drawscope/DrawScope;JFLandroidx/compose/ui/graphics/ColorFilter;)V +Landroidx/compose/ui/graphics/painter/Painter$drawLambda$1; +HSPLandroidx/compose/ui/graphics/painter/Painter$drawLambda$1;->(Landroidx/compose/ui/graphics/painter/Painter;)V +Landroidx/compose/ui/graphics/vector/DrawCache; +HSPLandroidx/compose/ui/graphics/vector/DrawCache;->()V +HSPLandroidx/compose/ui/graphics/vector/DrawCache;->clear(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V +HSPLandroidx/compose/ui/graphics/vector/DrawCache;->drawCachedImage-CJJAR-o(JLandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/graphics/vector/DrawCache;->drawInto(Landroidx/compose/ui/graphics/drawscope/DrawScope;FLandroidx/compose/ui/graphics/ColorFilter;)V +Landroidx/compose/ui/graphics/vector/GroupComponent; +HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->()V +HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->draw(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V +HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->getInvalidateListener$ui_release()Lkotlin/jvm/functions/Function0; +HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->getNumChildren()I +HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->getWillClipPath()Z +HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->insertAt(ILandroidx/compose/ui/graphics/vector/VNode;)V +HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->remove(II)V +HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->setInvalidateListener$ui_release(Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->setName(Ljava/lang/String;)V +HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->setPivotX(F)V +HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->setPivotY(F)V +HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->setScaleX(F)V +HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->setScaleY(F)V +HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->updateClipPath()V +HSPLandroidx/compose/ui/graphics/vector/GroupComponent;->updateMatrix()V +Landroidx/compose/ui/graphics/vector/ImageVector; +HSPLandroidx/compose/ui/graphics/vector/ImageVector;->()V +HSPLandroidx/compose/ui/graphics/vector/ImageVector;->(Ljava/lang/String;FFFFLandroidx/compose/ui/graphics/vector/VectorGroup;JIZ)V +HSPLandroidx/compose/ui/graphics/vector/ImageVector;->(Ljava/lang/String;FFFFLandroidx/compose/ui/graphics/vector/VectorGroup;JIZLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/vector/ImageVector;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/graphics/vector/ImageVector;->getAutoMirror()Z +HSPLandroidx/compose/ui/graphics/vector/ImageVector;->getDefaultHeight-D9Ej5fM()F +HSPLandroidx/compose/ui/graphics/vector/ImageVector;->getDefaultWidth-D9Ej5fM()F +HSPLandroidx/compose/ui/graphics/vector/ImageVector;->getName()Ljava/lang/String; +HSPLandroidx/compose/ui/graphics/vector/ImageVector;->getRoot()Landroidx/compose/ui/graphics/vector/VectorGroup; +HSPLandroidx/compose/ui/graphics/vector/ImageVector;->getTintBlendMode-0nO6VwU()I +HSPLandroidx/compose/ui/graphics/vector/ImageVector;->getTintColor-0d7_KjU()J +HSPLandroidx/compose/ui/graphics/vector/ImageVector;->getViewportHeight()F +HSPLandroidx/compose/ui/graphics/vector/ImageVector;->getViewportWidth()F +HSPLandroidx/compose/ui/graphics/vector/ImageVector;->hashCode()I +Landroidx/compose/ui/graphics/vector/ImageVector$Builder; +HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->()V +HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->(Ljava/lang/String;FFFFJIZ)V +HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->(Ljava/lang/String;FFFFJIZILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->(Ljava/lang/String;FFFFJIZLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->addPath-oIyEayM$default(Landroidx/compose/ui/graphics/vector/ImageVector$Builder;Ljava/util/List;ILjava/lang/String;Landroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/Brush;FFIIFFFFILjava/lang/Object;)Landroidx/compose/ui/graphics/vector/ImageVector$Builder; +HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->addPath-oIyEayM(Ljava/util/List;ILjava/lang/String;Landroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/Brush;FFIIFFFF)Landroidx/compose/ui/graphics/vector/ImageVector$Builder; +HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->asVectorGroup(Landroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;)Landroidx/compose/ui/graphics/vector/VectorGroup; +HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->build()Landroidx/compose/ui/graphics/vector/ImageVector; +HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->ensureNotConsumed()V +HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder;->getCurrentGroup()Landroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams; +Landroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams; +HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->(Ljava/lang/String;FFFFFFFLjava/util/List;Ljava/util/List;)V +HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->(Ljava/lang/String;FFFFFFFLjava/util/List;Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getChildren()Ljava/util/List; +HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getClipPathData()Ljava/util/List; +HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getName()Ljava/lang/String; +HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getPivotX()F +HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getPivotY()F +HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getRotate()F +HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getScaleX()F +HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getScaleY()F +HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getTranslationX()F +HSPLandroidx/compose/ui/graphics/vector/ImageVector$Builder$GroupParams;->getTranslationY()F +Landroidx/compose/ui/graphics/vector/ImageVector$Companion; +HSPLandroidx/compose/ui/graphics/vector/ImageVector$Companion;->()V +HSPLandroidx/compose/ui/graphics/vector/ImageVector$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/graphics/vector/ImageVectorKt; +HSPLandroidx/compose/ui/graphics/vector/ImageVectorKt;->access$peek(Ljava/util/ArrayList;)Ljava/lang/Object; +HSPLandroidx/compose/ui/graphics/vector/ImageVectorKt;->access$push(Ljava/util/ArrayList;Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/graphics/vector/ImageVectorKt;->peek(Ljava/util/ArrayList;)Ljava/lang/Object; +HSPLandroidx/compose/ui/graphics/vector/ImageVectorKt;->push(Ljava/util/ArrayList;Ljava/lang/Object;)Z +Landroidx/compose/ui/graphics/vector/PathBuilder; +HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->()V +HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->addNode(Landroidx/compose/ui/graphics/vector/PathNode;)Landroidx/compose/ui/graphics/vector/PathBuilder; +HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->close()Landroidx/compose/ui/graphics/vector/PathBuilder; +HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->curveTo(FFFFFF)Landroidx/compose/ui/graphics/vector/PathBuilder; +HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->curveToRelative(FFFFFF)Landroidx/compose/ui/graphics/vector/PathBuilder; +HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->getNodes()Ljava/util/List; +HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->horizontalLineTo(F)Landroidx/compose/ui/graphics/vector/PathBuilder; +HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->horizontalLineToRelative(F)Landroidx/compose/ui/graphics/vector/PathBuilder; +HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->lineTo(FF)Landroidx/compose/ui/graphics/vector/PathBuilder; +HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->lineToRelative(FF)Landroidx/compose/ui/graphics/vector/PathBuilder; +HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->moveTo(FF)Landroidx/compose/ui/graphics/vector/PathBuilder; +HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->moveToRelative(FF)Landroidx/compose/ui/graphics/vector/PathBuilder; +HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->reflectiveCurveTo(FFFF)Landroidx/compose/ui/graphics/vector/PathBuilder; +HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->reflectiveCurveToRelative(FFFF)Landroidx/compose/ui/graphics/vector/PathBuilder; +HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->verticalLineTo(F)Landroidx/compose/ui/graphics/vector/PathBuilder; +HSPLandroidx/compose/ui/graphics/vector/PathBuilder;->verticalLineToRelative(F)Landroidx/compose/ui/graphics/vector/PathBuilder; +Landroidx/compose/ui/graphics/vector/PathComponent; +HSPLandroidx/compose/ui/graphics/vector/PathComponent;->()V +HSPLandroidx/compose/ui/graphics/vector/PathComponent;->draw(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V +HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setFill(Landroidx/compose/ui/graphics/Brush;)V +HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setFillAlpha(F)V +HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setName(Ljava/lang/String;)V +HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setPathData(Ljava/util/List;)V +HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setPathFillType-oQ8Xj4U(I)V +HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setStroke(Landroidx/compose/ui/graphics/Brush;)V +HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setStrokeAlpha(F)V +HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setStrokeLineCap-BeK7IIE(I)V +HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setStrokeLineJoin-Ww9F2mQ(I)V +HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setStrokeLineMiter(F)V +HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setStrokeLineWidth(F)V +HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setTrimPathEnd(F)V +HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setTrimPathOffset(F)V +HSPLandroidx/compose/ui/graphics/vector/PathComponent;->setTrimPathStart(F)V +HSPLandroidx/compose/ui/graphics/vector/PathComponent;->updatePath()V +HSPLandroidx/compose/ui/graphics/vector/PathComponent;->updateRenderPath()V +Landroidx/compose/ui/graphics/vector/PathComponent$pathMeasure$2; +HSPLandroidx/compose/ui/graphics/vector/PathComponent$pathMeasure$2;->()V +HSPLandroidx/compose/ui/graphics/vector/PathComponent$pathMeasure$2;->()V +Landroidx/compose/ui/graphics/vector/PathNode; +HSPLandroidx/compose/ui/graphics/vector/PathNode;->(ZZ)V +HSPLandroidx/compose/ui/graphics/vector/PathNode;->(ZZILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/vector/PathNode;->(ZZLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/vector/PathNode;->isCurve()Z +Landroidx/compose/ui/graphics/vector/PathNode$Close; +HSPLandroidx/compose/ui/graphics/vector/PathNode$Close;->()V +HSPLandroidx/compose/ui/graphics/vector/PathNode$Close;->()V +Landroidx/compose/ui/graphics/vector/PathNode$CurveTo; +HSPLandroidx/compose/ui/graphics/vector/PathNode$CurveTo;->(FFFFFF)V +HSPLandroidx/compose/ui/graphics/vector/PathNode$CurveTo;->getX1()F +HSPLandroidx/compose/ui/graphics/vector/PathNode$CurveTo;->getX2()F +HSPLandroidx/compose/ui/graphics/vector/PathNode$CurveTo;->getX3()F +HSPLandroidx/compose/ui/graphics/vector/PathNode$CurveTo;->getY1()F +HSPLandroidx/compose/ui/graphics/vector/PathNode$CurveTo;->getY2()F +HSPLandroidx/compose/ui/graphics/vector/PathNode$CurveTo;->getY3()F +HSPLandroidx/compose/ui/graphics/vector/PathNode$CurveTo;->hashCode()I +Landroidx/compose/ui/graphics/vector/PathNode$HorizontalTo; +HSPLandroidx/compose/ui/graphics/vector/PathNode$HorizontalTo;->(F)V +HSPLandroidx/compose/ui/graphics/vector/PathNode$HorizontalTo;->getX()F +Landroidx/compose/ui/graphics/vector/PathNode$LineTo; +HSPLandroidx/compose/ui/graphics/vector/PathNode$LineTo;->(FF)V +HSPLandroidx/compose/ui/graphics/vector/PathNode$LineTo;->getX()F +HSPLandroidx/compose/ui/graphics/vector/PathNode$LineTo;->getY()F +HSPLandroidx/compose/ui/graphics/vector/PathNode$LineTo;->hashCode()I +Landroidx/compose/ui/graphics/vector/PathNode$MoveTo; +HSPLandroidx/compose/ui/graphics/vector/PathNode$MoveTo;->(FF)V +HSPLandroidx/compose/ui/graphics/vector/PathNode$MoveTo;->getX()F +HSPLandroidx/compose/ui/graphics/vector/PathNode$MoveTo;->getY()F +HSPLandroidx/compose/ui/graphics/vector/PathNode$MoveTo;->hashCode()I +Landroidx/compose/ui/graphics/vector/PathNode$ReflectiveCurveTo; +HSPLandroidx/compose/ui/graphics/vector/PathNode$ReflectiveCurveTo;->(FFFF)V +HSPLandroidx/compose/ui/graphics/vector/PathNode$ReflectiveCurveTo;->getX1()F +HSPLandroidx/compose/ui/graphics/vector/PathNode$ReflectiveCurveTo;->getX2()F +HSPLandroidx/compose/ui/graphics/vector/PathNode$ReflectiveCurveTo;->getY1()F +HSPLandroidx/compose/ui/graphics/vector/PathNode$ReflectiveCurveTo;->getY2()F +Landroidx/compose/ui/graphics/vector/PathNode$RelativeCurveTo; +HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeCurveTo;->(FFFFFF)V +HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeCurveTo;->getDx1()F +HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeCurveTo;->getDx2()F +HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeCurveTo;->getDx3()F +HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeCurveTo;->getDy1()F +HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeCurveTo;->getDy2()F +HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeCurveTo;->getDy3()F +HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeCurveTo;->hashCode()I +Landroidx/compose/ui/graphics/vector/PathNode$RelativeHorizontalTo; +HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeHorizontalTo;->(F)V +HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeHorizontalTo;->getDx()F +Landroidx/compose/ui/graphics/vector/PathNode$RelativeLineTo; +HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeLineTo;->(FF)V +HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeLineTo;->getDx()F +HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeLineTo;->getDy()F +HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeLineTo;->hashCode()I +Landroidx/compose/ui/graphics/vector/PathNode$RelativeMoveTo; +HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeMoveTo;->(FF)V +HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeMoveTo;->getDx()F +HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeMoveTo;->getDy()F +Landroidx/compose/ui/graphics/vector/PathNode$RelativeReflectiveCurveTo; +HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeReflectiveCurveTo;->(FFFF)V +HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeReflectiveCurveTo;->getDx1()F +HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeReflectiveCurveTo;->getDx2()F +HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeReflectiveCurveTo;->getDy1()F +HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeReflectiveCurveTo;->getDy2()F +Landroidx/compose/ui/graphics/vector/PathNode$RelativeVerticalTo; +HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeVerticalTo;->(F)V +HSPLandroidx/compose/ui/graphics/vector/PathNode$RelativeVerticalTo;->getDy()F +Landroidx/compose/ui/graphics/vector/PathNode$VerticalTo; +HSPLandroidx/compose/ui/graphics/vector/PathNode$VerticalTo;->(F)V +HSPLandroidx/compose/ui/graphics/vector/PathNode$VerticalTo;->getY()F +Landroidx/compose/ui/graphics/vector/PathParserKt; +HSPLandroidx/compose/ui/graphics/vector/PathParserKt;->()V +HSPLandroidx/compose/ui/graphics/vector/PathParserKt;->toPath(Ljava/util/List;Landroidx/compose/ui/graphics/Path;)Landroidx/compose/ui/graphics/Path; +Landroidx/compose/ui/graphics/vector/VNode; +HSPLandroidx/compose/ui/graphics/vector/VNode;->()V +HSPLandroidx/compose/ui/graphics/vector/VNode;->()V +HSPLandroidx/compose/ui/graphics/vector/VNode;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/vector/VNode;->getInvalidateListener$ui_release()Lkotlin/jvm/functions/Function0; +HSPLandroidx/compose/ui/graphics/vector/VNode;->invalidate()V +HSPLandroidx/compose/ui/graphics/vector/VNode;->setInvalidateListener$ui_release(Lkotlin/jvm/functions/Function0;)V +Landroidx/compose/ui/graphics/vector/VectorApplier; +HSPLandroidx/compose/ui/graphics/vector/VectorApplier;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorApplier;->(Landroidx/compose/ui/graphics/vector/VNode;)V +HSPLandroidx/compose/ui/graphics/vector/VectorApplier;->asGroup(Landroidx/compose/ui/graphics/vector/VNode;)Landroidx/compose/ui/graphics/vector/GroupComponent; +HSPLandroidx/compose/ui/graphics/vector/VectorApplier;->insertBottomUp(ILandroidx/compose/ui/graphics/vector/VNode;)V +HSPLandroidx/compose/ui/graphics/vector/VectorApplier;->insertBottomUp(ILjava/lang/Object;)V +HSPLandroidx/compose/ui/graphics/vector/VectorApplier;->insertTopDown(ILandroidx/compose/ui/graphics/vector/VNode;)V +HSPLandroidx/compose/ui/graphics/vector/VectorApplier;->insertTopDown(ILjava/lang/Object;)V +HSPLandroidx/compose/ui/graphics/vector/VectorApplier;->onClear()V +Landroidx/compose/ui/graphics/vector/VectorComponent; +HSPLandroidx/compose/ui/graphics/vector/VectorComponent;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComponent;->access$doInvalidate(Landroidx/compose/ui/graphics/vector/VectorComponent;)V +HSPLandroidx/compose/ui/graphics/vector/VectorComponent;->doInvalidate()V +HSPLandroidx/compose/ui/graphics/vector/VectorComponent;->draw(Landroidx/compose/ui/graphics/drawscope/DrawScope;FLandroidx/compose/ui/graphics/ColorFilter;)V +HSPLandroidx/compose/ui/graphics/vector/VectorComponent;->getRoot()Landroidx/compose/ui/graphics/vector/GroupComponent; +HSPLandroidx/compose/ui/graphics/vector/VectorComponent;->getViewportHeight()F +HSPLandroidx/compose/ui/graphics/vector/VectorComponent;->getViewportWidth()F +HSPLandroidx/compose/ui/graphics/vector/VectorComponent;->setIntrinsicColorFilter$ui_release(Landroidx/compose/ui/graphics/ColorFilter;)V +HSPLandroidx/compose/ui/graphics/vector/VectorComponent;->setInvalidateCallback$ui_release(Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/ui/graphics/vector/VectorComponent;->setName(Ljava/lang/String;)V +HSPLandroidx/compose/ui/graphics/vector/VectorComponent;->setViewportHeight(F)V +HSPLandroidx/compose/ui/graphics/vector/VectorComponent;->setViewportWidth(F)V +Landroidx/compose/ui/graphics/vector/VectorComponent$drawVectorBlock$1; +HSPLandroidx/compose/ui/graphics/vector/VectorComponent$drawVectorBlock$1;->(Landroidx/compose/ui/graphics/vector/VectorComponent;)V +HSPLandroidx/compose/ui/graphics/vector/VectorComponent$drawVectorBlock$1;->invoke(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V +HSPLandroidx/compose/ui/graphics/vector/VectorComponent$drawVectorBlock$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/graphics/vector/VectorComponent$invalidateCallback$1; +HSPLandroidx/compose/ui/graphics/vector/VectorComponent$invalidateCallback$1;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComponent$invalidateCallback$1;->()V +Landroidx/compose/ui/graphics/vector/VectorComponent$root$1$1; +HSPLandroidx/compose/ui/graphics/vector/VectorComponent$root$1$1;->(Landroidx/compose/ui/graphics/vector/VectorComponent;)V +HSPLandroidx/compose/ui/graphics/vector/VectorComponent$root$1$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/ui/graphics/vector/VectorComponent$root$1$1;->invoke()V +Landroidx/compose/ui/graphics/vector/VectorComposeKt; +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt;->Path-9cdaXJ4(Ljava/util/List;ILjava/lang/String;Landroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/Brush;FFIIFFFFLandroidx/compose/runtime/Composer;III)V +Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$1; +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$1;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$1;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$1;->invoke()Landroidx/compose/ui/graphics/vector/PathComponent; +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$1;->invoke()Ljava/lang/Object; +Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$1; +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$1;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$1;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$1;->invoke(Landroidx/compose/ui/graphics/vector/PathComponent;Ljava/lang/String;)V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$10; +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$10;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$10;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$10;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$10;->invoke-CSYIeUk(Landroidx/compose/ui/graphics/vector/PathComponent;I)V +Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$11; +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$11;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$11;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$11;->invoke(Landroidx/compose/ui/graphics/vector/PathComponent;F)V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$11;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$12; +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$12;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$12;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$12;->invoke(Landroidx/compose/ui/graphics/vector/PathComponent;F)V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$12;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$13; +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$13;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$13;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$13;->invoke(Landroidx/compose/ui/graphics/vector/PathComponent;F)V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$13;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$14; +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$14;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$14;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$14;->invoke(Landroidx/compose/ui/graphics/vector/PathComponent;F)V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$14;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$2; +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$2;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$2;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$2;->invoke(Landroidx/compose/ui/graphics/vector/PathComponent;Ljava/util/List;)V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$3; +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$3;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$3;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$3;->invoke-pweu1eQ(Landroidx/compose/ui/graphics/vector/PathComponent;I)V +Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$4; +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$4;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$4;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$4;->invoke(Landroidx/compose/ui/graphics/vector/PathComponent;Landroidx/compose/ui/graphics/Brush;)V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$5; +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$5;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$5;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$5;->invoke(Landroidx/compose/ui/graphics/vector/PathComponent;F)V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$6; +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$6;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$6;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$6;->invoke(Landroidx/compose/ui/graphics/vector/PathComponent;Landroidx/compose/ui/graphics/Brush;)V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$6;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$7; +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$7;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$7;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$7;->invoke(Landroidx/compose/ui/graphics/vector/PathComponent;F)V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$7;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$8; +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$8;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$8;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$8;->invoke(Landroidx/compose/ui/graphics/vector/PathComponent;F)V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$8;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$9; +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$9;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$9;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$9;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path$2$9;->invoke-kLtJ_vA(Landroidx/compose/ui/graphics/vector/PathComponent;I)V +Landroidx/compose/ui/graphics/vector/VectorComposeKt$Path-9cdaXJ4$$inlined$ComposeNode$1; +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path-9cdaXJ4$$inlined$ComposeNode$1;->(Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/ui/graphics/vector/VectorComposeKt$Path-9cdaXJ4$$inlined$ComposeNode$1;->invoke()Ljava/lang/Object; +Landroidx/compose/ui/graphics/vector/VectorConfig; +HSPLandroidx/compose/ui/graphics/vector/VectorConfig;->getOrDefault(Landroidx/compose/ui/graphics/vector/VectorProperty;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/graphics/vector/VectorGroup; +HSPLandroidx/compose/ui/graphics/vector/VectorGroup;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorGroup;->(Ljava/lang/String;FFFFFFFLjava/util/List;Ljava/util/List;)V +HSPLandroidx/compose/ui/graphics/vector/VectorGroup;->access$getChildren$p(Landroidx/compose/ui/graphics/vector/VectorGroup;)Ljava/util/List; +HSPLandroidx/compose/ui/graphics/vector/VectorGroup;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/graphics/vector/VectorGroup;->hashCode()I +HSPLandroidx/compose/ui/graphics/vector/VectorGroup;->iterator()Ljava/util/Iterator; +Landroidx/compose/ui/graphics/vector/VectorGroup$iterator$1; +HSPLandroidx/compose/ui/graphics/vector/VectorGroup$iterator$1;->(Landroidx/compose/ui/graphics/vector/VectorGroup;)V +HSPLandroidx/compose/ui/graphics/vector/VectorGroup$iterator$1;->hasNext()Z +HSPLandroidx/compose/ui/graphics/vector/VectorGroup$iterator$1;->next()Landroidx/compose/ui/graphics/vector/VectorNode; +HSPLandroidx/compose/ui/graphics/vector/VectorGroup$iterator$1;->next()Ljava/lang/Object; +Landroidx/compose/ui/graphics/vector/VectorKt; +HSPLandroidx/compose/ui/graphics/vector/VectorKt;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorKt;->getDefaultFillType()I +HSPLandroidx/compose/ui/graphics/vector/VectorKt;->getDefaultStrokeLineCap()I +HSPLandroidx/compose/ui/graphics/vector/VectorKt;->getDefaultStrokeLineJoin()I +HSPLandroidx/compose/ui/graphics/vector/VectorKt;->getEmptyPath()Ljava/util/List; +Landroidx/compose/ui/graphics/vector/VectorNode; +HSPLandroidx/compose/ui/graphics/vector/VectorNode;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorNode;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorNode;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/graphics/vector/VectorPainter; +HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->RenderVector$ui_release(Ljava/lang/String;FFLkotlin/jvm/functions/Function4;Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->access$getVector$p(Landroidx/compose/ui/graphics/vector/VectorPainter;)Landroidx/compose/ui/graphics/vector/VectorComponent; +HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->access$setDirty(Landroidx/compose/ui/graphics/vector/VectorPainter;Z)V +HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->applyColorFilter(Landroidx/compose/ui/graphics/ColorFilter;)Z +HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->composeVector(Landroidx/compose/runtime/CompositionContext;Lkotlin/jvm/functions/Function4;)Landroidx/compose/runtime/Composition; +HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->getAutoMirror$ui_release()Z +HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->getIntrinsicSize-NH-jbRc()J +HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->getSize-NH-jbRc$ui_release()J +HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->isDirty()Z +HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->onDraw(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V +HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->setAutoMirror$ui_release(Z)V +HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->setDirty(Z)V +HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->setIntrinsicColorFilter$ui_release(Landroidx/compose/ui/graphics/ColorFilter;)V +HSPLandroidx/compose/ui/graphics/vector/VectorPainter;->setSize-uvyYCjk$ui_release(J)V +Landroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$2; +HSPLandroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$2;->(Landroidx/compose/runtime/Composition;)V +HSPLandroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$2;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult; +HSPLandroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$2$invoke$$inlined$onDispose$1; +HSPLandroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$2$invoke$$inlined$onDispose$1;->(Landroidx/compose/runtime/Composition;)V +HSPLandroidx/compose/ui/graphics/vector/VectorPainter$RenderVector$2$invoke$$inlined$onDispose$1;->dispose()V +Landroidx/compose/ui/graphics/vector/VectorPainter$composeVector$1; +HSPLandroidx/compose/ui/graphics/vector/VectorPainter$composeVector$1;->(Lkotlin/jvm/functions/Function4;Landroidx/compose/ui/graphics/vector/VectorPainter;)V +HSPLandroidx/compose/ui/graphics/vector/VectorPainter$composeVector$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/ui/graphics/vector/VectorPainter$composeVector$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/graphics/vector/VectorPainter$vector$1$1; +HSPLandroidx/compose/ui/graphics/vector/VectorPainter$vector$1$1;->(Landroidx/compose/ui/graphics/vector/VectorPainter;)V +HSPLandroidx/compose/ui/graphics/vector/VectorPainter$vector$1$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/ui/graphics/vector/VectorPainter$vector$1$1;->invoke()V +Landroidx/compose/ui/graphics/vector/VectorPainterKt; +HSPLandroidx/compose/ui/graphics/vector/VectorPainterKt;->RenderVectorGroup(Landroidx/compose/ui/graphics/vector/VectorGroup;Ljava/util/Map;Landroidx/compose/runtime/Composer;II)V +HSPLandroidx/compose/ui/graphics/vector/VectorPainterKt;->rememberVectorPainter(Landroidx/compose/ui/graphics/vector/ImageVector;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/graphics/vector/VectorPainter; +HSPLandroidx/compose/ui/graphics/vector/VectorPainterKt;->rememberVectorPainter-vIP8VLU(FFFFLjava/lang/String;JIZLkotlin/jvm/functions/Function4;Landroidx/compose/runtime/Composer;II)Landroidx/compose/ui/graphics/vector/VectorPainter; +Landroidx/compose/ui/graphics/vector/VectorPainterKt$RenderVectorGroup$config$1; +HSPLandroidx/compose/ui/graphics/vector/VectorPainterKt$RenderVectorGroup$config$1;->()V +Landroidx/compose/ui/graphics/vector/VectorPainterKt$rememberVectorPainter$3; +HSPLandroidx/compose/ui/graphics/vector/VectorPainterKt$rememberVectorPainter$3;->(Landroidx/compose/ui/graphics/vector/ImageVector;)V +HSPLandroidx/compose/ui/graphics/vector/VectorPainterKt$rememberVectorPainter$3;->invoke(FFLandroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/ui/graphics/vector/VectorPainterKt$rememberVectorPainter$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/graphics/vector/VectorPath; +HSPLandroidx/compose/ui/graphics/vector/VectorPath;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorPath;->(Ljava/lang/String;Ljava/util/List;ILandroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/Brush;FFIIFFFF)V +HSPLandroidx/compose/ui/graphics/vector/VectorPath;->(Ljava/lang/String;Ljava/util/List;ILandroidx/compose/ui/graphics/Brush;FLandroidx/compose/ui/graphics/Brush;FFIIFFFFLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getFill()Landroidx/compose/ui/graphics/Brush; +HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getFillAlpha()F +HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getName()Ljava/lang/String; +HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getPathData()Ljava/util/List; +HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getPathFillType-Rg-k1Os()I +HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getStroke()Landroidx/compose/ui/graphics/Brush; +HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getStrokeAlpha()F +HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getStrokeLineCap-KaPHkGw()I +HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getStrokeLineJoin-LxFBmk8()I +HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getStrokeLineMiter()F +HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getStrokeLineWidth()F +HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getTrimPathEnd()F +HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getTrimPathOffset()F +HSPLandroidx/compose/ui/graphics/vector/VectorPath;->getTrimPathStart()F +HSPLandroidx/compose/ui/graphics/vector/VectorPath;->hashCode()I +Landroidx/compose/ui/graphics/vector/VectorProperty; +HSPLandroidx/compose/ui/graphics/vector/VectorProperty;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorProperty;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorProperty;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/graphics/vector/VectorProperty$Fill; +HSPLandroidx/compose/ui/graphics/vector/VectorProperty$Fill;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorProperty$Fill;->()V +Landroidx/compose/ui/graphics/vector/VectorProperty$FillAlpha; +HSPLandroidx/compose/ui/graphics/vector/VectorProperty$FillAlpha;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorProperty$FillAlpha;->()V +Landroidx/compose/ui/graphics/vector/VectorProperty$PathData; +HSPLandroidx/compose/ui/graphics/vector/VectorProperty$PathData;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorProperty$PathData;->()V +Landroidx/compose/ui/graphics/vector/VectorProperty$Stroke; +HSPLandroidx/compose/ui/graphics/vector/VectorProperty$Stroke;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorProperty$Stroke;->()V +Landroidx/compose/ui/graphics/vector/VectorProperty$StrokeAlpha; +HSPLandroidx/compose/ui/graphics/vector/VectorProperty$StrokeAlpha;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorProperty$StrokeAlpha;->()V +Landroidx/compose/ui/graphics/vector/VectorProperty$StrokeLineWidth; +HSPLandroidx/compose/ui/graphics/vector/VectorProperty$StrokeLineWidth;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorProperty$StrokeLineWidth;->()V +Landroidx/compose/ui/graphics/vector/VectorProperty$TrimPathEnd; +HSPLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathEnd;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathEnd;->()V +Landroidx/compose/ui/graphics/vector/VectorProperty$TrimPathOffset; +HSPLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathOffset;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathOffset;->()V +Landroidx/compose/ui/graphics/vector/VectorProperty$TrimPathStart; +HSPLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathStart;->()V +HSPLandroidx/compose/ui/graphics/vector/VectorProperty$TrimPathStart;->()V +Landroidx/compose/ui/hapticfeedback/HapticFeedback; +Landroidx/compose/ui/hapticfeedback/PlatformHapticFeedback; +HSPLandroidx/compose/ui/hapticfeedback/PlatformHapticFeedback;->(Landroid/view/View;)V +Landroidx/compose/ui/input/InputMode; +HSPLandroidx/compose/ui/input/InputMode;->()V +HSPLandroidx/compose/ui/input/InputMode;->(I)V +HSPLandroidx/compose/ui/input/InputMode;->access$getKeyboard$cp()I +HSPLandroidx/compose/ui/input/InputMode;->access$getTouch$cp()I +HSPLandroidx/compose/ui/input/InputMode;->box-impl(I)Landroidx/compose/ui/input/InputMode; +HSPLandroidx/compose/ui/input/InputMode;->constructor-impl(I)I +HSPLandroidx/compose/ui/input/InputMode;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/input/InputMode;->equals-impl(ILjava/lang/Object;)Z +HSPLandroidx/compose/ui/input/InputMode;->equals-impl0(II)Z +HSPLandroidx/compose/ui/input/InputMode;->unbox-impl()I +Landroidx/compose/ui/input/InputMode$Companion; +HSPLandroidx/compose/ui/input/InputMode$Companion;->()V +HSPLandroidx/compose/ui/input/InputMode$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/input/InputMode$Companion;->getKeyboard-aOaMEAU()I +HSPLandroidx/compose/ui/input/InputMode$Companion;->getTouch-aOaMEAU()I +Landroidx/compose/ui/input/InputModeManager; +Landroidx/compose/ui/input/InputModeManagerImpl; +HSPLandroidx/compose/ui/input/InputModeManagerImpl;->(ILkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/input/InputModeManagerImpl;->(ILkotlin/jvm/functions/Function1;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/input/InputModeManagerImpl;->getInputMode-aOaMEAU()I +HSPLandroidx/compose/ui/input/InputModeManagerImpl;->setInputMode-iuPiT84(I)V +Landroidx/compose/ui/input/key/KeyInputElement; +HSPLandroidx/compose/ui/input/key/KeyInputElement;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/input/key/KeyInputElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/input/key/KeyInputElement;->create()Landroidx/compose/ui/input/key/KeyInputNode; +HSPLandroidx/compose/ui/input/key/KeyInputElement;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/input/key/KeyInputElement;->update(Landroidx/compose/ui/Modifier$Node;)V +HSPLandroidx/compose/ui/input/key/KeyInputElement;->update(Landroidx/compose/ui/input/key/KeyInputNode;)V +Landroidx/compose/ui/input/key/KeyInputModifierKt; +HSPLandroidx/compose/ui/input/key/KeyInputModifierKt;->onKeyEvent(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/ui/input/key/KeyInputModifierKt;->onPreviewKeyEvent(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; +Landroidx/compose/ui/input/key/KeyInputModifierNode; +Landroidx/compose/ui/input/key/KeyInputNode; +HSPLandroidx/compose/ui/input/key/KeyInputNode;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/input/key/KeyInputNode;->setOnEvent(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/input/key/KeyInputNode;->setOnPreEvent(Lkotlin/jvm/functions/Function1;)V +Landroidx/compose/ui/input/key/SoftKeyboardInterceptionModifierNode; +Landroidx/compose/ui/input/nestedscroll/NestedScrollConnection; +Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher; +HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;->()V +HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;->()V +HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;->getModifierLocalNode$ui_release()Landroidx/compose/ui/modifier/ModifierLocalModifierNode; +HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;->setCalculateNestedScrollScope$ui_release(Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;->setModifierLocalNode$ui_release(Landroidx/compose/ui/modifier/ModifierLocalModifierNode;)V +HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;->setScope$ui_release(Lkotlinx/coroutines/CoroutineScope;)V +Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher$calculateNestedScrollScope$1; +HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher$calculateNestedScrollScope$1;->(Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;)V +Landroidx/compose/ui/input/nestedscroll/NestedScrollElement; +HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollElement;->(Landroidx/compose/ui/input/nestedscroll/NestedScrollConnection;Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;)V +HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollElement;->create()Landroidx/compose/ui/input/nestedscroll/NestedScrollNode; +HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollElement;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollElement;->update(Landroidx/compose/ui/Modifier$Node;)V +HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollElement;->update(Landroidx/compose/ui/input/nestedscroll/NestedScrollNode;)V +Landroidx/compose/ui/input/nestedscroll/NestedScrollModifierKt; +HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollModifierKt;->nestedScroll$default(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/input/nestedscroll/NestedScrollConnection;Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;ILjava/lang/Object;)Landroidx/compose/ui/Modifier; +HSPLandroidx/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; +Landroidx/compose/ui/input/nestedscroll/NestedScrollNode; +HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollNode;->(Landroidx/compose/ui/input/nestedscroll/NestedScrollConnection;Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;)V +HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollNode;->getProvidedValues()Landroidx/compose/ui/modifier/ModifierLocalMap; +HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollNode;->onAttach()V +HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollNode;->onDetach()V +HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollNode;->resetDispatcherFields()V +HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollNode;->updateDispatcher(Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;)V +HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollNode;->updateDispatcherFields()V +HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollNode;->updateNode$ui_release(Landroidx/compose/ui/input/nestedscroll/NestedScrollConnection;Landroidx/compose/ui/input/nestedscroll/NestedScrollDispatcher;)V +Landroidx/compose/ui/input/nestedscroll/NestedScrollNode$updateDispatcherFields$1; +HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollNode$updateDispatcherFields$1;->(Landroidx/compose/ui/input/nestedscroll/NestedScrollNode;)V +Landroidx/compose/ui/input/nestedscroll/NestedScrollNodeKt; +HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollNodeKt;->()V +HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollNodeKt;->getModifierLocalNestedScroll()Landroidx/compose/ui/modifier/ProvidableModifierLocal; +Landroidx/compose/ui/input/nestedscroll/NestedScrollNodeKt$ModifierLocalNestedScroll$1; +HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollNodeKt$ModifierLocalNestedScroll$1;->()V +HSPLandroidx/compose/ui/input/nestedscroll/NestedScrollNodeKt$ModifierLocalNestedScroll$1;->()V +Landroidx/compose/ui/input/pointer/AndroidPointerIconType; +HSPLandroidx/compose/ui/input/pointer/AndroidPointerIconType;->(I)V +HSPLandroidx/compose/ui/input/pointer/AndroidPointerIconType;->equals(Ljava/lang/Object;)Z +Landroidx/compose/ui/input/pointer/AwaitPointerEventScope; +HSPLandroidx/compose/ui/input/pointer/AwaitPointerEventScope;->awaitPointerEvent$default(Landroidx/compose/ui/input/pointer/AwaitPointerEventScope;Landroidx/compose/ui/input/pointer/PointerEventPass;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/input/pointer/ConsumedData; +HSPLandroidx/compose/ui/input/pointer/ConsumedData;->()V +HSPLandroidx/compose/ui/input/pointer/ConsumedData;->(ZZ)V +HSPLandroidx/compose/ui/input/pointer/ConsumedData;->getDownChange()Z +HSPLandroidx/compose/ui/input/pointer/ConsumedData;->getPositionChange()Z +HSPLandroidx/compose/ui/input/pointer/ConsumedData;->setDownChange(Z)V +HSPLandroidx/compose/ui/input/pointer/ConsumedData;->setPositionChange(Z)V +Landroidx/compose/ui/input/pointer/HitPathTracker; +HSPLandroidx/compose/ui/input/pointer/HitPathTracker;->(Landroidx/compose/ui/layout/LayoutCoordinates;)V +HSPLandroidx/compose/ui/input/pointer/HitPathTracker;->addHitPath-KNwqfcY(JLjava/util/List;)V +HSPLandroidx/compose/ui/input/pointer/HitPathTracker;->dispatchChanges(Landroidx/compose/ui/input/pointer/InternalPointerEvent;Z)Z +HSPLandroidx/compose/ui/input/pointer/HitPathTracker;->removeDetachedPointerInputFilters()V +Landroidx/compose/ui/input/pointer/InternalPointerEvent; +HSPLandroidx/compose/ui/input/pointer/InternalPointerEvent;->(Ljava/util/Map;Landroidx/compose/ui/input/pointer/PointerInputEvent;)V +HSPLandroidx/compose/ui/input/pointer/InternalPointerEvent;->getChanges()Ljava/util/Map; +HSPLandroidx/compose/ui/input/pointer/InternalPointerEvent;->getMotionEvent()Landroid/view/MotionEvent; +HSPLandroidx/compose/ui/input/pointer/InternalPointerEvent;->getSuppressMovementConsumption()Z +HSPLandroidx/compose/ui/input/pointer/InternalPointerEvent;->issuesEnterExitEvent-0FcD4WY(J)Z +Landroidx/compose/ui/input/pointer/MotionEventAdapter; +HSPLandroidx/compose/ui/input/pointer/MotionEventAdapter;->()V +HSPLandroidx/compose/ui/input/pointer/MotionEventAdapter;->addFreshIds(Landroid/view/MotionEvent;)V +HSPLandroidx/compose/ui/input/pointer/MotionEventAdapter;->clearOnDeviceChange(Landroid/view/MotionEvent;)V +HSPLandroidx/compose/ui/input/pointer/MotionEventAdapter;->convertToPointerInputEvent$ui_release(Landroid/view/MotionEvent;Landroidx/compose/ui/input/pointer/PositionCalculator;)Landroidx/compose/ui/input/pointer/PointerInputEvent; +HSPLandroidx/compose/ui/input/pointer/MotionEventAdapter;->createPointerInputEventData(Landroidx/compose/ui/input/pointer/PositionCalculator;Landroid/view/MotionEvent;IZ)Landroidx/compose/ui/input/pointer/PointerInputEventData; +HSPLandroidx/compose/ui/input/pointer/MotionEventAdapter;->getComposePointerId-_I2yYro(I)J +HSPLandroidx/compose/ui/input/pointer/MotionEventAdapter;->removeStaleIds(Landroid/view/MotionEvent;)V +Landroidx/compose/ui/input/pointer/Node; +HSPLandroidx/compose/ui/input/pointer/Node;->(Landroidx/compose/ui/Modifier$Node;)V +HSPLandroidx/compose/ui/input/pointer/Node;->buildCache(Ljava/util/Map;Landroidx/compose/ui/layout/LayoutCoordinates;Landroidx/compose/ui/input/pointer/InternalPointerEvent;Z)Z +HSPLandroidx/compose/ui/input/pointer/Node;->cleanUpHits(Landroidx/compose/ui/input/pointer/InternalPointerEvent;)V +HSPLandroidx/compose/ui/input/pointer/Node;->clearCache()V +HSPLandroidx/compose/ui/input/pointer/Node;->dispatchFinalEventPass(Landroidx/compose/ui/input/pointer/InternalPointerEvent;)Z +HSPLandroidx/compose/ui/input/pointer/Node;->dispatchMainEventPass(Ljava/util/Map;Landroidx/compose/ui/layout/LayoutCoordinates;Landroidx/compose/ui/input/pointer/InternalPointerEvent;Z)Z +HSPLandroidx/compose/ui/input/pointer/Node;->getModifierNode()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/input/pointer/Node;->getPointerIds()Landroidx/compose/runtime/collection/MutableVector; +Landroidx/compose/ui/input/pointer/NodeParent; +HSPLandroidx/compose/ui/input/pointer/NodeParent;->()V +HSPLandroidx/compose/ui/input/pointer/NodeParent;->buildCache(Ljava/util/Map;Landroidx/compose/ui/layout/LayoutCoordinates;Landroidx/compose/ui/input/pointer/InternalPointerEvent;Z)Z +HSPLandroidx/compose/ui/input/pointer/NodeParent;->cleanUpHits(Landroidx/compose/ui/input/pointer/InternalPointerEvent;)V +HSPLandroidx/compose/ui/input/pointer/NodeParent;->dispatchFinalEventPass(Landroidx/compose/ui/input/pointer/InternalPointerEvent;)Z +HSPLandroidx/compose/ui/input/pointer/NodeParent;->dispatchMainEventPass(Ljava/util/Map;Landroidx/compose/ui/layout/LayoutCoordinates;Landroidx/compose/ui/input/pointer/InternalPointerEvent;Z)Z +HSPLandroidx/compose/ui/input/pointer/NodeParent;->getChildren()Landroidx/compose/runtime/collection/MutableVector; +HSPLandroidx/compose/ui/input/pointer/NodeParent;->removeDetachedPointerInputFilters()V +Landroidx/compose/ui/input/pointer/PointerButtons; +HSPLandroidx/compose/ui/input/pointer/PointerButtons;->constructor-impl(I)I +Landroidx/compose/ui/input/pointer/PointerEvent; +HSPLandroidx/compose/ui/input/pointer/PointerEvent;->()V +HSPLandroidx/compose/ui/input/pointer/PointerEvent;->(Ljava/util/List;)V +HSPLandroidx/compose/ui/input/pointer/PointerEvent;->(Ljava/util/List;Landroidx/compose/ui/input/pointer/InternalPointerEvent;)V +HSPLandroidx/compose/ui/input/pointer/PointerEvent;->calculatePointerEventType-7fucELk()I +HSPLandroidx/compose/ui/input/pointer/PointerEvent;->getChanges()Ljava/util/List; +HSPLandroidx/compose/ui/input/pointer/PointerEvent;->getMotionEvent$ui_release()Landroid/view/MotionEvent; +HSPLandroidx/compose/ui/input/pointer/PointerEvent;->getType-7fucELk()I +Landroidx/compose/ui/input/pointer/PointerEventKt; +HSPLandroidx/compose/ui/input/pointer/PointerEventKt;->changedToDown(Landroidx/compose/ui/input/pointer/PointerInputChange;)Z +HSPLandroidx/compose/ui/input/pointer/PointerEventKt;->changedToDownIgnoreConsumed(Landroidx/compose/ui/input/pointer/PointerInputChange;)Z +HSPLandroidx/compose/ui/input/pointer/PointerEventKt;->changedToUp(Landroidx/compose/ui/input/pointer/PointerInputChange;)Z +HSPLandroidx/compose/ui/input/pointer/PointerEventKt;->changedToUpIgnoreConsumed(Landroidx/compose/ui/input/pointer/PointerInputChange;)Z +HSPLandroidx/compose/ui/input/pointer/PointerEventKt;->positionChangeInternal(Landroidx/compose/ui/input/pointer/PointerInputChange;Z)J +HSPLandroidx/compose/ui/input/pointer/PointerEventKt;->positionChangedIgnoreConsumed(Landroidx/compose/ui/input/pointer/PointerInputChange;)Z +Landroidx/compose/ui/input/pointer/PointerEventPass; +HSPLandroidx/compose/ui/input/pointer/PointerEventPass;->$values()[Landroidx/compose/ui/input/pointer/PointerEventPass; +HSPLandroidx/compose/ui/input/pointer/PointerEventPass;->()V +HSPLandroidx/compose/ui/input/pointer/PointerEventPass;->(Ljava/lang/String;I)V +HSPLandroidx/compose/ui/input/pointer/PointerEventPass;->values()[Landroidx/compose/ui/input/pointer/PointerEventPass; +Landroidx/compose/ui/input/pointer/PointerEventTimeoutCancellationException; +Landroidx/compose/ui/input/pointer/PointerEventType; +HSPLandroidx/compose/ui/input/pointer/PointerEventType;->()V +HSPLandroidx/compose/ui/input/pointer/PointerEventType;->access$getEnter$cp()I +HSPLandroidx/compose/ui/input/pointer/PointerEventType;->access$getExit$cp()I +HSPLandroidx/compose/ui/input/pointer/PointerEventType;->access$getMove$cp()I +HSPLandroidx/compose/ui/input/pointer/PointerEventType;->access$getPress$cp()I +HSPLandroidx/compose/ui/input/pointer/PointerEventType;->access$getRelease$cp()I +HSPLandroidx/compose/ui/input/pointer/PointerEventType;->access$getScroll$cp()I +HSPLandroidx/compose/ui/input/pointer/PointerEventType;->constructor-impl(I)I +HSPLandroidx/compose/ui/input/pointer/PointerEventType;->equals-impl0(II)Z +Landroidx/compose/ui/input/pointer/PointerEventType$Companion; +HSPLandroidx/compose/ui/input/pointer/PointerEventType$Companion;->()V +HSPLandroidx/compose/ui/input/pointer/PointerEventType$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/input/pointer/PointerEventType$Companion;->getEnter-7fucELk()I +HSPLandroidx/compose/ui/input/pointer/PointerEventType$Companion;->getExit-7fucELk()I +HSPLandroidx/compose/ui/input/pointer/PointerEventType$Companion;->getMove-7fucELk()I +HSPLandroidx/compose/ui/input/pointer/PointerEventType$Companion;->getPress-7fucELk()I +HSPLandroidx/compose/ui/input/pointer/PointerEventType$Companion;->getRelease-7fucELk()I +HSPLandroidx/compose/ui/input/pointer/PointerEventType$Companion;->getScroll-7fucELk()I +Landroidx/compose/ui/input/pointer/PointerEvent_androidKt; +HSPLandroidx/compose/ui/input/pointer/PointerEvent_androidKt;->EmptyPointerKeyboardModifiers()I +Landroidx/compose/ui/input/pointer/PointerIcon; +HSPLandroidx/compose/ui/input/pointer/PointerIcon;->()V +Landroidx/compose/ui/input/pointer/PointerIcon$Companion; +HSPLandroidx/compose/ui/input/pointer/PointerIcon$Companion;->()V +HSPLandroidx/compose/ui/input/pointer/PointerIcon$Companion;->()V +HSPLandroidx/compose/ui/input/pointer/PointerIcon$Companion;->getDefault()Landroidx/compose/ui/input/pointer/PointerIcon; +Landroidx/compose/ui/input/pointer/PointerIconKt; +HSPLandroidx/compose/ui/input/pointer/PointerIconKt;->()V +HSPLandroidx/compose/ui/input/pointer/PointerIconKt;->access$getModifierLocalPointerIcon$p()Landroidx/compose/ui/modifier/ProvidableModifierLocal; +HSPLandroidx/compose/ui/input/pointer/PointerIconKt;->pointerHoverIcon$default(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/input/pointer/PointerIcon;ZILjava/lang/Object;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/ui/input/pointer/PointerIconKt;->pointerHoverIcon(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/input/pointer/PointerIcon;Z)Landroidx/compose/ui/Modifier; +Landroidx/compose/ui/input/pointer/PointerIconKt$ModifierLocalPointerIcon$1; +HSPLandroidx/compose/ui/input/pointer/PointerIconKt$ModifierLocalPointerIcon$1;->()V +HSPLandroidx/compose/ui/input/pointer/PointerIconKt$ModifierLocalPointerIcon$1;->()V +HSPLandroidx/compose/ui/input/pointer/PointerIconKt$ModifierLocalPointerIcon$1;->invoke()Landroidx/compose/ui/input/pointer/PointerIconModifierLocal; +HSPLandroidx/compose/ui/input/pointer/PointerIconKt$ModifierLocalPointerIcon$1;->invoke()Ljava/lang/Object; +Landroidx/compose/ui/input/pointer/PointerIconKt$pointerHoverIcon$2; +HSPLandroidx/compose/ui/input/pointer/PointerIconKt$pointerHoverIcon$2;->(Landroidx/compose/ui/input/pointer/PointerIcon;Z)V +HSPLandroidx/compose/ui/input/pointer/PointerIconKt$pointerHoverIcon$2;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/ui/input/pointer/PointerIconKt$pointerHoverIcon$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/input/pointer/PointerIconKt$pointerHoverIcon$2$1$1; +HSPLandroidx/compose/ui/input/pointer/PointerIconKt$pointerHoverIcon$2$1$1;->(Landroidx/compose/ui/input/pointer/PointerIconModifierLocal;Landroidx/compose/ui/input/pointer/PointerIcon;ZLkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/input/pointer/PointerIconKt$pointerHoverIcon$2$1$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/ui/input/pointer/PointerIconKt$pointerHoverIcon$2$1$1;->invoke()V +Landroidx/compose/ui/input/pointer/PointerIconKt$pointerHoverIcon$2$onSetIcon$1; +HSPLandroidx/compose/ui/input/pointer/PointerIconKt$pointerHoverIcon$2$onSetIcon$1;->(Landroidx/compose/ui/input/pointer/PointerIconService;)V +Landroidx/compose/ui/input/pointer/PointerIconKt$pointerHoverIcon$2$pointerInputModifier$1$1; +HSPLandroidx/compose/ui/input/pointer/PointerIconKt$pointerHoverIcon$2$pointerInputModifier$1$1;->(Landroidx/compose/ui/input/pointer/PointerIconModifierLocal;Lkotlin/coroutines/Continuation;)V +Landroidx/compose/ui/input/pointer/PointerIconModifierLocal; +HSPLandroidx/compose/ui/input/pointer/PointerIconModifierLocal;->(Landroidx/compose/ui/input/pointer/PointerIcon;ZLkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/input/pointer/PointerIconModifierLocal;->getKey()Landroidx/compose/ui/modifier/ProvidableModifierLocal; +HSPLandroidx/compose/ui/input/pointer/PointerIconModifierLocal;->getParentInfo()Landroidx/compose/ui/input/pointer/PointerIconModifierLocal; +HSPLandroidx/compose/ui/input/pointer/PointerIconModifierLocal;->onModifierLocalsUpdated(Landroidx/compose/ui/modifier/ModifierLocalReadScope;)V +HSPLandroidx/compose/ui/input/pointer/PointerIconModifierLocal;->setParentInfo(Landroidx/compose/ui/input/pointer/PointerIconModifierLocal;)V +HSPLandroidx/compose/ui/input/pointer/PointerIconModifierLocal;->shouldUpdatePointerIcon()Z +HSPLandroidx/compose/ui/input/pointer/PointerIconModifierLocal;->updateValues(Landroidx/compose/ui/input/pointer/PointerIcon;ZLkotlin/jvm/functions/Function1;)V +Landroidx/compose/ui/input/pointer/PointerIconService; +Landroidx/compose/ui/input/pointer/PointerIcon_androidKt; +HSPLandroidx/compose/ui/input/pointer/PointerIcon_androidKt;->()V +HSPLandroidx/compose/ui/input/pointer/PointerIcon_androidKt;->PointerIcon(I)Landroidx/compose/ui/input/pointer/PointerIcon; +HSPLandroidx/compose/ui/input/pointer/PointerIcon_androidKt;->getPointerIconCrosshair()Landroidx/compose/ui/input/pointer/PointerIcon; +HSPLandroidx/compose/ui/input/pointer/PointerIcon_androidKt;->getPointerIconDefault()Landroidx/compose/ui/input/pointer/PointerIcon; +HSPLandroidx/compose/ui/input/pointer/PointerIcon_androidKt;->getPointerIconHand()Landroidx/compose/ui/input/pointer/PointerIcon; +HSPLandroidx/compose/ui/input/pointer/PointerIcon_androidKt;->getPointerIconText()Landroidx/compose/ui/input/pointer/PointerIcon; +Landroidx/compose/ui/input/pointer/PointerId; +HSPLandroidx/compose/ui/input/pointer/PointerId;->(J)V +HSPLandroidx/compose/ui/input/pointer/PointerId;->box-impl(J)Landroidx/compose/ui/input/pointer/PointerId; +HSPLandroidx/compose/ui/input/pointer/PointerId;->constructor-impl(J)J +HSPLandroidx/compose/ui/input/pointer/PointerId;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/input/pointer/PointerId;->equals-impl(JLjava/lang/Object;)Z +HSPLandroidx/compose/ui/input/pointer/PointerId;->equals-impl0(JJ)Z +HSPLandroidx/compose/ui/input/pointer/PointerId;->hashCode()I +HSPLandroidx/compose/ui/input/pointer/PointerId;->hashCode-impl(J)I +HSPLandroidx/compose/ui/input/pointer/PointerId;->unbox-impl()J +Landroidx/compose/ui/input/pointer/PointerInputChange; +HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->()V +HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->(JJJZFJJZZIJ)V +HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->(JJJZFJJZZIJLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->(JJJZFJJZZILjava/util/List;J)V +HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->(JJJZFJJZZILjava/util/List;JLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->consume()V +HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->copy-OHpmEuE$default(Landroidx/compose/ui/input/pointer/PointerInputChange;JJJZJJZILjava/util/List;JILjava/lang/Object;)Landroidx/compose/ui/input/pointer/PointerInputChange; +HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->copy-OHpmEuE(JJJZJJZILjava/util/List;J)Landroidx/compose/ui/input/pointer/PointerInputChange; +HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->copy-wbzehF4(JJJZFJJZILjava/util/List;J)Landroidx/compose/ui/input/pointer/PointerInputChange; +HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->getHistorical()Ljava/util/List; +HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->getId-J3iCeTQ()J +HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->getPosition-F1C5BW0()J +HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->getPressed()Z +HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->getPreviousPosition-F1C5BW0()J +HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->getPreviousPressed()Z +HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->getType-T8wyACA()I +HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->getUptimeMillis()J +HSPLandroidx/compose/ui/input/pointer/PointerInputChange;->isConsumed()Z +Landroidx/compose/ui/input/pointer/PointerInputChangeEventProducer; +HSPLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer;->()V +HSPLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer;->produce(Landroidx/compose/ui/input/pointer/PointerInputEvent;Landroidx/compose/ui/input/pointer/PositionCalculator;)Landroidx/compose/ui/input/pointer/InternalPointerEvent; +Landroidx/compose/ui/input/pointer/PointerInputChangeEventProducer$PointerInputData; +HSPLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer$PointerInputData;->(JJZI)V +HSPLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer$PointerInputData;->(JJZILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer$PointerInputData;->getDown()Z +HSPLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer$PointerInputData;->getPositionOnScreen-F1C5BW0()J +HSPLandroidx/compose/ui/input/pointer/PointerInputChangeEventProducer$PointerInputData;->getUptime()J +Landroidx/compose/ui/input/pointer/PointerInputEvent; +HSPLandroidx/compose/ui/input/pointer/PointerInputEvent;->(JLjava/util/List;Landroid/view/MotionEvent;)V +HSPLandroidx/compose/ui/input/pointer/PointerInputEvent;->getMotionEvent()Landroid/view/MotionEvent; +HSPLandroidx/compose/ui/input/pointer/PointerInputEvent;->getPointers()Ljava/util/List; +Landroidx/compose/ui/input/pointer/PointerInputEventData; +HSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->(JJJJZFIZLjava/util/List;J)V +HSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->(JJJJZFIZLjava/util/List;JLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getDown()Z +HSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getHistorical()Ljava/util/List; +HSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getId-J3iCeTQ()J +HSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getIssuesEnterExit()Z +HSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getPosition-F1C5BW0()J +HSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getPositionOnScreen-F1C5BW0()J +HSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getPressure()F +HSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getScrollDelta-F1C5BW0()J +HSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getType-T8wyACA()I +HSPLandroidx/compose/ui/input/pointer/PointerInputEventData;->getUptime()J +Landroidx/compose/ui/input/pointer/PointerInputEventProcessor; +HSPLandroidx/compose/ui/input/pointer/PointerInputEventProcessor;->(Landroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/input/pointer/PointerInputEventProcessor;->process-BIzXfog(Landroidx/compose/ui/input/pointer/PointerInputEvent;Landroidx/compose/ui/input/pointer/PositionCalculator;Z)I +Landroidx/compose/ui/input/pointer/PointerInputEventProcessorKt; +HSPLandroidx/compose/ui/input/pointer/PointerInputEventProcessorKt;->ProcessResult(ZZ)I +Landroidx/compose/ui/input/pointer/PointerInputModifier; +Landroidx/compose/ui/input/pointer/PointerInputResetException; +PLandroidx/compose/ui/input/pointer/PointerInputResetException;->()V +PLandroidx/compose/ui/input/pointer/PointerInputResetException;->fillInStackTrace()Ljava/lang/Throwable; +Landroidx/compose/ui/input/pointer/PointerInputScope; +Landroidx/compose/ui/input/pointer/PointerKeyboardModifiers; +HSPLandroidx/compose/ui/input/pointer/PointerKeyboardModifiers;->(I)V +HSPLandroidx/compose/ui/input/pointer/PointerKeyboardModifiers;->box-impl(I)Landroidx/compose/ui/input/pointer/PointerKeyboardModifiers; +HSPLandroidx/compose/ui/input/pointer/PointerKeyboardModifiers;->constructor-impl(I)I +HSPLandroidx/compose/ui/input/pointer/PointerKeyboardModifiers;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/input/pointer/PointerKeyboardModifiers;->equals-impl(ILjava/lang/Object;)Z +HSPLandroidx/compose/ui/input/pointer/PointerKeyboardModifiers;->unbox-impl()I +Landroidx/compose/ui/input/pointer/PointerType; +HSPLandroidx/compose/ui/input/pointer/PointerType;->()V +HSPLandroidx/compose/ui/input/pointer/PointerType;->access$getMouse$cp()I +HSPLandroidx/compose/ui/input/pointer/PointerType;->access$getTouch$cp()I +HSPLandroidx/compose/ui/input/pointer/PointerType;->constructor-impl(I)I +HSPLandroidx/compose/ui/input/pointer/PointerType;->equals-impl0(II)Z +Landroidx/compose/ui/input/pointer/PointerType$Companion; +HSPLandroidx/compose/ui/input/pointer/PointerType$Companion;->()V +HSPLandroidx/compose/ui/input/pointer/PointerType$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/input/pointer/PointerType$Companion;->getMouse-T8wyACA()I +HSPLandroidx/compose/ui/input/pointer/PointerType$Companion;->getTouch-T8wyACA()I +Landroidx/compose/ui/input/pointer/PositionCalculator; +Landroidx/compose/ui/input/pointer/ProcessResult; +HSPLandroidx/compose/ui/input/pointer/ProcessResult;->constructor-impl(I)I +HSPLandroidx/compose/ui/input/pointer/ProcessResult;->getAnyMovementConsumed-impl(I)Z +HSPLandroidx/compose/ui/input/pointer/ProcessResult;->getDispatchedToAPointerInputModifier-impl(I)Z +Landroidx/compose/ui/input/pointer/SuspendPointerInputElement; +HSPLandroidx/compose/ui/input/pointer/SuspendPointerInputElement;->(Ljava/lang/Object;Ljava/lang/Object;[Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/ui/input/pointer/SuspendPointerInputElement;->(Ljava/lang/Object;Ljava/lang/Object;[Ljava/lang/Object;Lkotlin/jvm/functions/Function2;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/input/pointer/SuspendPointerInputElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/input/pointer/SuspendPointerInputElement;->create()Landroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl; +HSPLandroidx/compose/ui/input/pointer/SuspendPointerInputElement;->equals(Ljava/lang/Object;)Z +Landroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt; +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt;->()V +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt;->SuspendingPointerInputModifierNode(Lkotlin/jvm/functions/Function2;)Landroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNode; +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt;->access$getEmptyPointerEvent$p()Landroidx/compose/ui/input/pointer/PointerEvent; +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputFilterKt;->pointerInput(Landroidx/compose/ui/Modifier;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Landroidx/compose/ui/Modifier; +Landroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNode; +Landroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl; +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->(Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->access$getCurrentEvent$p(Landroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;)Landroidx/compose/ui/input/pointer/PointerEvent; +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->access$getPointerHandlers$p(Landroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;)Landroidx/compose/runtime/collection/MutableVector; +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->awaitPointerEventScope(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->dispatchPointerEvent(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEventPass;)V +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->getPointerInputHandler()Lkotlin/jvm/functions/Function2; +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->getSize-YbymL2g()J +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->getViewConfiguration()Landroidx/compose/ui/platform/ViewConfiguration; +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->onDetach()V +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->onPointerEvent-H0pRuoY(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEventPass;J)V +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;->resetPointerInputHandler()V +Landroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine; +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine;->(Landroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine;->access$setAwaitPass$p(Landroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine;Landroidx/compose/ui/input/pointer/PointerEventPass;)V +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine;->access$setPointerAwaiter$p(Landroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine;Lkotlinx/coroutines/CancellableContinuation;)V +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine;->awaitPointerEvent(Landroidx/compose/ui/input/pointer/PointerEventPass;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine;->cancel(Ljava/lang/Throwable;)V +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine;->getContext()Lkotlin/coroutines/CoroutineContext; +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine;->getCurrentEvent()Landroidx/compose/ui/input/pointer/PointerEvent; +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine;->getViewConfiguration()Landroidx/compose/ui/platform/ViewConfiguration; +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine;->offerPointerEvent(Landroidx/compose/ui/input/pointer/PointerEvent;Landroidx/compose/ui/input/pointer/PointerEventPass;)V +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine;->resumeWith(Ljava/lang/Object;)V +Landroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$WhenMappings; +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$WhenMappings;->()V +Landroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$awaitPointerEventScope$2$2; +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$awaitPointerEventScope$2$2;->(Landroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine;)V +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$awaitPointerEventScope$2$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$awaitPointerEventScope$2$2;->invoke(Ljava/lang/Throwable;)V +Landroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$onPointerEvent$1; +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$onPointerEvent$1;->(Landroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$onPointerEvent$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$onPointerEvent$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$onPointerEvent$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/ui/input/pointer/SuspendingPointerInputModifierNodeImpl$onPointerEvent$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/input/pointer/util/DataPointAtTime; +HSPLandroidx/compose/ui/input/pointer/util/DataPointAtTime;->(JF)V +Landroidx/compose/ui/input/pointer/util/VelocityTracker; +HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker;->()V +HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker;->()V +HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker;->addPosition-Uv8p0NA(JJ)V +HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker;->getCurrentPointerPositionAccumulator-F1C5BW0$ui_release()J +HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker;->resetTracking()V +HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker;->setCurrentPointerPositionAccumulator-k-4lQ0M$ui_release(J)V +Landroidx/compose/ui/input/pointer/util/VelocityTracker1D; +HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker1D;->()V +HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker1D;->(ZLandroidx/compose/ui/input/pointer/util/VelocityTracker1D$Strategy;)V +HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker1D;->(ZLandroidx/compose/ui/input/pointer/util/VelocityTracker1D$Strategy;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker1D;->addDataPoint(JF)V +HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker1D;->resetTracking()V +Landroidx/compose/ui/input/pointer/util/VelocityTracker1D$Strategy; +HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker1D$Strategy;->$values()[Landroidx/compose/ui/input/pointer/util/VelocityTracker1D$Strategy; +HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker1D$Strategy;->()V +HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker1D$Strategy;->(Ljava/lang/String;I)V +HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker1D$Strategy;->values()[Landroidx/compose/ui/input/pointer/util/VelocityTracker1D$Strategy; +Landroidx/compose/ui/input/pointer/util/VelocityTracker1D$WhenMappings; +HSPLandroidx/compose/ui/input/pointer/util/VelocityTracker1D$WhenMappings;->()V +Landroidx/compose/ui/input/pointer/util/VelocityTrackerKt; +HSPLandroidx/compose/ui/input/pointer/util/VelocityTrackerKt;->access$set([Landroidx/compose/ui/input/pointer/util/DataPointAtTime;IJF)V +HSPLandroidx/compose/ui/input/pointer/util/VelocityTrackerKt;->addPointerInputChange(Landroidx/compose/ui/input/pointer/util/VelocityTracker;Landroidx/compose/ui/input/pointer/PointerInputChange;)V +HSPLandroidx/compose/ui/input/pointer/util/VelocityTrackerKt;->set([Landroidx/compose/ui/input/pointer/util/DataPointAtTime;IJF)V +Landroidx/compose/ui/input/rotary/RotaryInputElement; +HSPLandroidx/compose/ui/input/rotary/RotaryInputElement;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/input/rotary/RotaryInputElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/input/rotary/RotaryInputElement;->create()Landroidx/compose/ui/input/rotary/RotaryInputNode; +Landroidx/compose/ui/input/rotary/RotaryInputModifierKt; +HSPLandroidx/compose/ui/input/rotary/RotaryInputModifierKt;->onRotaryScrollEvent(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; +Landroidx/compose/ui/input/rotary/RotaryInputModifierNode; +Landroidx/compose/ui/input/rotary/RotaryInputNode; +HSPLandroidx/compose/ui/input/rotary/RotaryInputNode;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V +Landroidx/compose/ui/layout/AlignmentLine; +HSPLandroidx/compose/ui/layout/AlignmentLine;->()V +HSPLandroidx/compose/ui/layout/AlignmentLine;->(Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/ui/layout/AlignmentLine;->(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/layout/AlignmentLine$Companion; +HSPLandroidx/compose/ui/layout/AlignmentLine$Companion;->()V +HSPLandroidx/compose/ui/layout/AlignmentLine$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/layout/AlignmentLineKt; +HSPLandroidx/compose/ui/layout/AlignmentLineKt;->()V +HSPLandroidx/compose/ui/layout/AlignmentLineKt;->getFirstBaseline()Landroidx/compose/ui/layout/HorizontalAlignmentLine; +HSPLandroidx/compose/ui/layout/AlignmentLineKt;->getLastBaseline()Landroidx/compose/ui/layout/HorizontalAlignmentLine; +Landroidx/compose/ui/layout/AlignmentLineKt$FirstBaseline$1; +HSPLandroidx/compose/ui/layout/AlignmentLineKt$FirstBaseline$1;->()V +HSPLandroidx/compose/ui/layout/AlignmentLineKt$FirstBaseline$1;->()V +Landroidx/compose/ui/layout/AlignmentLineKt$LastBaseline$1; +HSPLandroidx/compose/ui/layout/AlignmentLineKt$LastBaseline$1;->()V +HSPLandroidx/compose/ui/layout/AlignmentLineKt$LastBaseline$1;->()V +Landroidx/compose/ui/layout/BeyondBoundsLayout; +Landroidx/compose/ui/layout/BeyondBoundsLayout$BeyondBoundsScope; +Landroidx/compose/ui/layout/ComposableSingletons$SubcomposeLayoutKt; +HSPLandroidx/compose/ui/layout/ComposableSingletons$SubcomposeLayoutKt;->()V +HSPLandroidx/compose/ui/layout/ComposableSingletons$SubcomposeLayoutKt;->()V +HSPLandroidx/compose/ui/layout/ComposableSingletons$SubcomposeLayoutKt;->getLambda-1$ui_release()Lkotlin/jvm/functions/Function2; +Landroidx/compose/ui/layout/ComposableSingletons$SubcomposeLayoutKt$lambda-1$1; +HSPLandroidx/compose/ui/layout/ComposableSingletons$SubcomposeLayoutKt$lambda-1$1;->()V +HSPLandroidx/compose/ui/layout/ComposableSingletons$SubcomposeLayoutKt$lambda-1$1;->()V +Landroidx/compose/ui/layout/ContentScale; +HSPLandroidx/compose/ui/layout/ContentScale;->()V +Landroidx/compose/ui/layout/ContentScale$Companion; +HSPLandroidx/compose/ui/layout/ContentScale$Companion;->()V +HSPLandroidx/compose/ui/layout/ContentScale$Companion;->()V +HSPLandroidx/compose/ui/layout/ContentScale$Companion;->getFit()Landroidx/compose/ui/layout/ContentScale; +Landroidx/compose/ui/layout/ContentScale$Companion$Crop$1; +HSPLandroidx/compose/ui/layout/ContentScale$Companion$Crop$1;->()V +Landroidx/compose/ui/layout/ContentScale$Companion$FillBounds$1; +HSPLandroidx/compose/ui/layout/ContentScale$Companion$FillBounds$1;->()V +Landroidx/compose/ui/layout/ContentScale$Companion$FillHeight$1; +HSPLandroidx/compose/ui/layout/ContentScale$Companion$FillHeight$1;->()V +Landroidx/compose/ui/layout/ContentScale$Companion$FillWidth$1; +HSPLandroidx/compose/ui/layout/ContentScale$Companion$FillWidth$1;->()V +Landroidx/compose/ui/layout/ContentScale$Companion$Fit$1; +HSPLandroidx/compose/ui/layout/ContentScale$Companion$Fit$1;->()V +HSPLandroidx/compose/ui/layout/ContentScale$Companion$Fit$1;->computeScaleFactor-H7hwNQA(JJ)J +Landroidx/compose/ui/layout/ContentScale$Companion$Inside$1; +HSPLandroidx/compose/ui/layout/ContentScale$Companion$Inside$1;->()V +Landroidx/compose/ui/layout/ContentScaleKt; +HSPLandroidx/compose/ui/layout/ContentScaleKt;->access$computeFillMinDimension-iLBOSCw(JJ)F +HSPLandroidx/compose/ui/layout/ContentScaleKt;->computeFillHeight-iLBOSCw(JJ)F +HSPLandroidx/compose/ui/layout/ContentScaleKt;->computeFillMinDimension-iLBOSCw(JJ)F +HSPLandroidx/compose/ui/layout/ContentScaleKt;->computeFillWidth-iLBOSCw(JJ)F +Landroidx/compose/ui/layout/DefaultIntrinsicMeasurable; +HSPLandroidx/compose/ui/layout/DefaultIntrinsicMeasurable;->(Landroidx/compose/ui/layout/IntrinsicMeasurable;Landroidx/compose/ui/layout/IntrinsicMinMax;Landroidx/compose/ui/layout/IntrinsicWidthHeight;)V +HSPLandroidx/compose/ui/layout/DefaultIntrinsicMeasurable;->measure-BRTryo0(J)Landroidx/compose/ui/layout/Placeable; +Landroidx/compose/ui/layout/FixedScale; +HSPLandroidx/compose/ui/layout/FixedScale;->()V +HSPLandroidx/compose/ui/layout/FixedScale;->(F)V +Landroidx/compose/ui/layout/FixedSizeIntrinsicsPlaceable; +HSPLandroidx/compose/ui/layout/FixedSizeIntrinsicsPlaceable;->(II)V +Landroidx/compose/ui/layout/GraphicLayerInfo; +Landroidx/compose/ui/layout/HorizontalAlignmentLine; +HSPLandroidx/compose/ui/layout/HorizontalAlignmentLine;->()V +HSPLandroidx/compose/ui/layout/HorizontalAlignmentLine;->(Lkotlin/jvm/functions/Function2;)V +Landroidx/compose/ui/layout/IntermediateLayoutModifierNode; +Landroidx/compose/ui/layout/IntrinsicMeasurable; +Landroidx/compose/ui/layout/IntrinsicMeasureScope; +Landroidx/compose/ui/layout/IntrinsicMinMax; +HSPLandroidx/compose/ui/layout/IntrinsicMinMax;->$values()[Landroidx/compose/ui/layout/IntrinsicMinMax; +HSPLandroidx/compose/ui/layout/IntrinsicMinMax;->()V +HSPLandroidx/compose/ui/layout/IntrinsicMinMax;->(Ljava/lang/String;I)V +Landroidx/compose/ui/layout/IntrinsicWidthHeight; +HSPLandroidx/compose/ui/layout/IntrinsicWidthHeight;->$values()[Landroidx/compose/ui/layout/IntrinsicWidthHeight; +HSPLandroidx/compose/ui/layout/IntrinsicWidthHeight;->()V +HSPLandroidx/compose/ui/layout/IntrinsicWidthHeight;->(Ljava/lang/String;I)V +Landroidx/compose/ui/layout/IntrinsicsMeasureScope; +HSPLandroidx/compose/ui/layout/IntrinsicsMeasureScope;->(Landroidx/compose/ui/layout/IntrinsicMeasureScope;Landroidx/compose/ui/unit/LayoutDirection;)V +Landroidx/compose/ui/layout/LayoutCoordinates; +HSPLandroidx/compose/ui/layout/LayoutCoordinates;->localBoundingBoxOf$default(Landroidx/compose/ui/layout/LayoutCoordinates;Landroidx/compose/ui/layout/LayoutCoordinates;ZILjava/lang/Object;)Landroidx/compose/ui/geometry/Rect; +Landroidx/compose/ui/layout/LayoutCoordinatesKt; +HSPLandroidx/compose/ui/layout/LayoutCoordinatesKt;->boundsInRoot(Landroidx/compose/ui/layout/LayoutCoordinates;)Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/ui/layout/LayoutCoordinatesKt;->boundsInWindow(Landroidx/compose/ui/layout/LayoutCoordinates;)Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/ui/layout/LayoutCoordinatesKt;->findRootCoordinates(Landroidx/compose/ui/layout/LayoutCoordinates;)Landroidx/compose/ui/layout/LayoutCoordinates; +HSPLandroidx/compose/ui/layout/LayoutCoordinatesKt;->positionInRoot(Landroidx/compose/ui/layout/LayoutCoordinates;)J +HSPLandroidx/compose/ui/layout/LayoutCoordinatesKt;->positionInWindow(Landroidx/compose/ui/layout/LayoutCoordinates;)J +Landroidx/compose/ui/layout/LayoutElement; +HSPLandroidx/compose/ui/layout/LayoutElement;->(Lkotlin/jvm/functions/Function3;)V +HSPLandroidx/compose/ui/layout/LayoutElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/layout/LayoutElement;->create()Landroidx/compose/ui/layout/LayoutModifierImpl; +HSPLandroidx/compose/ui/layout/LayoutElement;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/layout/LayoutElement;->update(Landroidx/compose/ui/Modifier$Node;)V +HSPLandroidx/compose/ui/layout/LayoutElement;->update(Landroidx/compose/ui/layout/LayoutModifierImpl;)V +Landroidx/compose/ui/layout/LayoutIdElement; +HSPLandroidx/compose/ui/layout/LayoutIdElement;->(Ljava/lang/Object;)V +HSPLandroidx/compose/ui/layout/LayoutIdElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/layout/LayoutIdElement;->create()Landroidx/compose/ui/layout/LayoutIdModifier; +HSPLandroidx/compose/ui/layout/LayoutIdElement;->equals(Ljava/lang/Object;)Z +Landroidx/compose/ui/layout/LayoutIdKt; +HSPLandroidx/compose/ui/layout/LayoutIdKt;->getLayoutId(Landroidx/compose/ui/layout/Measurable;)Ljava/lang/Object; +HSPLandroidx/compose/ui/layout/LayoutIdKt;->layoutId(Landroidx/compose/ui/Modifier;Ljava/lang/Object;)Landroidx/compose/ui/Modifier; +Landroidx/compose/ui/layout/LayoutIdModifier; +HSPLandroidx/compose/ui/layout/LayoutIdModifier;->(Ljava/lang/Object;)V +HSPLandroidx/compose/ui/layout/LayoutIdModifier;->getLayoutId()Ljava/lang/Object; +HSPLandroidx/compose/ui/layout/LayoutIdModifier;->modifyParentData(Landroidx/compose/ui/unit/Density;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/layout/LayoutIdParentData; +Landroidx/compose/ui/layout/LayoutInfo; +Landroidx/compose/ui/layout/LayoutKt; +HSPLandroidx/compose/ui/layout/LayoutKt;->materializerOf(Landroidx/compose/ui/Modifier;)Lkotlin/jvm/functions/Function3; +HSPLandroidx/compose/ui/layout/LayoutKt;->modifierMaterializerOf(Landroidx/compose/ui/Modifier;)Lkotlin/jvm/functions/Function3; +Landroidx/compose/ui/layout/LayoutKt$materializerOf$1; +HSPLandroidx/compose/ui/layout/LayoutKt$materializerOf$1;->(Landroidx/compose/ui/Modifier;)V +HSPLandroidx/compose/ui/layout/LayoutKt$materializerOf$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/ui/layout/LayoutKt$materializerOf$1;->invoke-Deg8D_g(Landroidx/compose/runtime/Composer;Landroidx/compose/runtime/Composer;I)V +Landroidx/compose/ui/layout/LayoutKt$materializerOfWithCompositionLocalInjection$1; +HSPLandroidx/compose/ui/layout/LayoutKt$materializerOfWithCompositionLocalInjection$1;->(Landroidx/compose/ui/Modifier;)V +HSPLandroidx/compose/ui/layout/LayoutKt$materializerOfWithCompositionLocalInjection$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/ui/layout/LayoutKt$materializerOfWithCompositionLocalInjection$1;->invoke-Deg8D_g(Landroidx/compose/runtime/Composer;Landroidx/compose/runtime/Composer;I)V +Landroidx/compose/ui/layout/LayoutModifier; +Landroidx/compose/ui/layout/LayoutModifierImpl; +HSPLandroidx/compose/ui/layout/LayoutModifierImpl;->(Lkotlin/jvm/functions/Function3;)V +HSPLandroidx/compose/ui/layout/LayoutModifierImpl;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; +HSPLandroidx/compose/ui/layout/LayoutModifierImpl;->setMeasureBlock(Lkotlin/jvm/functions/Function3;)V +Landroidx/compose/ui/layout/LayoutModifierKt; +HSPLandroidx/compose/ui/layout/LayoutModifierKt;->layout(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function3;)Landroidx/compose/ui/Modifier; +Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState; +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy;)V +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->access$getCurrentIndex$p(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)I +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->access$getIntermediateMeasureScope$p(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$IntermediateMeasureScopeImpl; +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->access$getRoot$p(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)Landroidx/compose/ui/node/LayoutNode; +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->access$getScope$p(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope; +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->access$setCurrentIndex$p(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;I)V +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->createMeasurePolicy(Lkotlin/jvm/functions/Function2;)Landroidx/compose/ui/layout/MeasurePolicy; +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->createNodeAt(I)Landroidx/compose/ui/node/LayoutNode; +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->disposeOrReuseStartingFromIndex(I)V +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->forceRecomposeChildren()V +PLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->getSlotIdAtIndex(I)Ljava/lang/Object; +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->makeSureStateIsConsistent()V +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->setCompositionContext(Landroidx/compose/runtime/CompositionContext;)V +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->setIntermediateMeasurePolicy$ui_release(Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->setSlotReusePolicy(Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy;)V +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->subcompose(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;)V +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->subcompose(Landroidx/compose/ui/node/LayoutNode;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->subcompose(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/util/List; +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->subcomposeInto(Landroidx/compose/runtime/Composition;Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/runtime/CompositionContext;Lkotlin/jvm/functions/Function2;)Landroidx/compose/runtime/Composition; +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState;->takeNodeFromReusables(Ljava/lang/Object;)Landroidx/compose/ui/node/LayoutNode; +Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$IntermediateMeasureScopeImpl; +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$IntermediateMeasureScopeImpl;->(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)V +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$IntermediateMeasureScopeImpl;->setLookaheadConstraints-BRTryo0(J)V +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$IntermediateMeasureScopeImpl;->setLookaheadMeasurePolicy(Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$IntermediateMeasureScopeImpl;->setLookaheadSize-ozmzZPI(J)V +Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState; +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composition;)V +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composition;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->getActive()Z +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->getComposition()Landroidx/compose/runtime/Composition; +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->getContent()Lkotlin/jvm/functions/Function2; +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->getForceRecompose()Z +PLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->getSlotId()Ljava/lang/Object; +PLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->setActive(Z)V +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->setComposition(Landroidx/compose/runtime/Composition;)V +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->setContent(Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;->setForceRecompose(Z)V +Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope; +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)V +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->getDensity()F +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection; +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->setDensity(F)V +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->setFontScale(F)V +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->setLayoutDirection(Landroidx/compose/ui/unit/LayoutDirection;)V +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$Scope;->subcompose(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/util/List; +Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1; +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1;->(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;Lkotlin/jvm/functions/Function2;Ljava/lang/String;)V +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; +Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure$1; +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure$1;->(Landroidx/compose/ui/layout/MeasureResult;Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;I)V +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure$1;->getAlignmentLines()Ljava/util/Map; +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure$1;->getHeight()I +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure$1;->getWidth()I +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$createMeasurePolicy$1$measure$1;->placeChildren()V +Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$intermediateMeasurePolicy$1; +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$intermediateMeasurePolicy$1;->()V +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$intermediateMeasurePolicy$1;->()V +Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$subcompose$3$1$1; +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$subcompose$3$1$1;->(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState$NodeState;Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$subcompose$3$1$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/ui/layout/LayoutNodeSubcompositionsState$subcompose$3$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/layout/LookaheadLayoutCoordinates; +Landroidx/compose/ui/layout/LookaheadLayoutCoordinatesImpl; +Landroidx/compose/ui/layout/Measurable; +Landroidx/compose/ui/layout/MeasurePolicy; +HSPLandroidx/compose/ui/layout/MeasurePolicy;->maxIntrinsicWidth(Landroidx/compose/ui/layout/IntrinsicMeasureScope;Ljava/util/List;I)I +Landroidx/compose/ui/layout/MeasureResult; +Landroidx/compose/ui/layout/MeasureScope; +HSPLandroidx/compose/ui/layout/MeasureScope;->layout$default(Landroidx/compose/ui/layout/MeasureScope;IILjava/util/Map;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Landroidx/compose/ui/layout/MeasureResult; +HSPLandroidx/compose/ui/layout/MeasureScope;->layout(IILjava/util/Map;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/layout/MeasureResult; +Landroidx/compose/ui/layout/MeasureScope$layout$1; +HSPLandroidx/compose/ui/layout/MeasureScope$layout$1;->(IILjava/util/Map;Landroidx/compose/ui/layout/MeasureScope;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/layout/MeasureScope$layout$1;->getAlignmentLines()Ljava/util/Map; +HSPLandroidx/compose/ui/layout/MeasureScope$layout$1;->getHeight()I +HSPLandroidx/compose/ui/layout/MeasureScope$layout$1;->getWidth()I +HSPLandroidx/compose/ui/layout/MeasureScope$layout$1;->placeChildren()V +Landroidx/compose/ui/layout/Measured; +Landroidx/compose/ui/layout/NoOpSubcomposeSlotReusePolicy; +HSPLandroidx/compose/ui/layout/NoOpSubcomposeSlotReusePolicy;->()V +HSPLandroidx/compose/ui/layout/NoOpSubcomposeSlotReusePolicy;->()V +Landroidx/compose/ui/layout/OnGloballyPositionedElement; +HSPLandroidx/compose/ui/layout/OnGloballyPositionedElement;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/layout/OnGloballyPositionedElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/layout/OnGloballyPositionedElement;->create()Landroidx/compose/ui/layout/OnGloballyPositionedNode; +HSPLandroidx/compose/ui/layout/OnGloballyPositionedElement;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/layout/OnGloballyPositionedElement;->update(Landroidx/compose/ui/Modifier$Node;)V +HSPLandroidx/compose/ui/layout/OnGloballyPositionedElement;->update(Landroidx/compose/ui/layout/OnGloballyPositionedNode;)V +Landroidx/compose/ui/layout/OnGloballyPositionedModifier; +Landroidx/compose/ui/layout/OnGloballyPositionedModifierKt; +HSPLandroidx/compose/ui/layout/OnGloballyPositionedModifierKt;->onGloballyPositioned(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; +Landroidx/compose/ui/layout/OnGloballyPositionedNode; +HSPLandroidx/compose/ui/layout/OnGloballyPositionedNode;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/layout/OnGloballyPositionedNode;->onGloballyPositioned(Landroidx/compose/ui/layout/LayoutCoordinates;)V +HSPLandroidx/compose/ui/layout/OnGloballyPositionedNode;->setCallback(Lkotlin/jvm/functions/Function1;)V +Landroidx/compose/ui/layout/OnPlacedModifier; +Landroidx/compose/ui/layout/OnRemeasuredModifier; +Landroidx/compose/ui/layout/OnRemeasuredModifierKt; +HSPLandroidx/compose/ui/layout/OnRemeasuredModifierKt;->onSizeChanged(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; +Landroidx/compose/ui/layout/OnSizeChangedModifier; +HSPLandroidx/compose/ui/layout/OnSizeChangedModifier;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/layout/OnSizeChangedModifier;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/layout/OnSizeChangedModifier;->onRemeasured-ozmzZPI(J)V +Landroidx/compose/ui/layout/ParentDataModifier; +Landroidx/compose/ui/layout/PinnableContainer; +Landroidx/compose/ui/layout/PinnableContainer$PinnedHandle; +Landroidx/compose/ui/layout/PinnableContainerKt; +HSPLandroidx/compose/ui/layout/PinnableContainerKt;->()V +HSPLandroidx/compose/ui/layout/PinnableContainerKt;->getLocalPinnableContainer()Landroidx/compose/runtime/ProvidableCompositionLocal; +Landroidx/compose/ui/layout/PinnableContainerKt$LocalPinnableContainer$1; +HSPLandroidx/compose/ui/layout/PinnableContainerKt$LocalPinnableContainer$1;->()V +HSPLandroidx/compose/ui/layout/PinnableContainerKt$LocalPinnableContainer$1;->()V +HSPLandroidx/compose/ui/layout/PinnableContainerKt$LocalPinnableContainer$1;->invoke()Landroidx/compose/ui/layout/PinnableContainer; +HSPLandroidx/compose/ui/layout/PinnableContainerKt$LocalPinnableContainer$1;->invoke()Ljava/lang/Object; +Landroidx/compose/ui/layout/Placeable; +HSPLandroidx/compose/ui/layout/Placeable;->()V +HSPLandroidx/compose/ui/layout/Placeable;->()V +HSPLandroidx/compose/ui/layout/Placeable;->access$getApparentToRealOffset-nOcc-ac(Landroidx/compose/ui/layout/Placeable;)J +HSPLandroidx/compose/ui/layout/Placeable;->access$placeAt-f8xVGno(Landroidx/compose/ui/layout/Placeable;JFLkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/layout/Placeable;->getApparentToRealOffset-nOcc-ac()J +HSPLandroidx/compose/ui/layout/Placeable;->getHeight()I +HSPLandroidx/compose/ui/layout/Placeable;->getMeasuredHeight()I +HSPLandroidx/compose/ui/layout/Placeable;->getMeasuredSize-YbymL2g()J +HSPLandroidx/compose/ui/layout/Placeable;->getMeasuredWidth()I +HSPLandroidx/compose/ui/layout/Placeable;->getMeasurementConstraints-msEJaDk()J +HSPLandroidx/compose/ui/layout/Placeable;->getWidth()I +HSPLandroidx/compose/ui/layout/Placeable;->onMeasuredSizeChanged()V +HSPLandroidx/compose/ui/layout/Placeable;->setMeasuredSize-ozmzZPI(J)V +HSPLandroidx/compose/ui/layout/Placeable;->setMeasurementConstraints-BRTryo0(J)V +Landroidx/compose/ui/layout/Placeable$PlacementScope; +HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->()V +HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->()V +HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->access$getLayoutDelegate$cp()Landroidx/compose/ui/node/LayoutNodeLayoutDelegate; +HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->access$getParentLayoutDirection$cp()Landroidx/compose/ui/unit/LayoutDirection; +HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->access$getParentLayoutDirection(Landroidx/compose/ui/layout/Placeable$PlacementScope;)Landroidx/compose/ui/unit/LayoutDirection; +HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->access$getParentWidth$cp()I +HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->access$get_coordinates$cp()Landroidx/compose/ui/layout/LayoutCoordinates; +HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->access$setLayoutDelegate$cp(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;)V +HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->access$setParentLayoutDirection$cp(Landroidx/compose/ui/unit/LayoutDirection;)V +HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->access$setParentWidth$cp(I)V +HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->access$set_coordinates$cp(Landroidx/compose/ui/layout/LayoutCoordinates;)V +HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->place$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;IIFILjava/lang/Object;)V +HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->place(Landroidx/compose/ui/layout/Placeable;IIF)V +HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->place-70tqf50$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;JFILjava/lang/Object;)V +HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->place-70tqf50(Landroidx/compose/ui/layout/Placeable;JF)V +HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeRelative$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;IIFILjava/lang/Object;)V +HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeRelative(Landroidx/compose/ui/layout/Placeable;IIF)V +HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeRelativeWithLayer$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;IIFLkotlin/jvm/functions/Function1;ILjava/lang/Object;)V +HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeRelativeWithLayer(Landroidx/compose/ui/layout/Placeable;IIFLkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeWithLayer$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;IIFLkotlin/jvm/functions/Function1;ILjava/lang/Object;)V +HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeWithLayer(Landroidx/compose/ui/layout/Placeable;IIFLkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeWithLayer-aW-9-wM$default(Landroidx/compose/ui/layout/Placeable$PlacementScope;Landroidx/compose/ui/layout/Placeable;JFLkotlin/jvm/functions/Function1;ILjava/lang/Object;)V +HSPLandroidx/compose/ui/layout/Placeable$PlacementScope;->placeWithLayer-aW-9-wM(Landroidx/compose/ui/layout/Placeable;JFLkotlin/jvm/functions/Function1;)V +Landroidx/compose/ui/layout/Placeable$PlacementScope$Companion; +HSPLandroidx/compose/ui/layout/Placeable$PlacementScope$Companion;->()V +HSPLandroidx/compose/ui/layout/Placeable$PlacementScope$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/layout/Placeable$PlacementScope$Companion;->access$configureForPlacingForAlignment(Landroidx/compose/ui/layout/Placeable$PlacementScope$Companion;Landroidx/compose/ui/node/LookaheadCapablePlaceable;)Z +HSPLandroidx/compose/ui/layout/Placeable$PlacementScope$Companion;->access$getParentLayoutDirection(Landroidx/compose/ui/layout/Placeable$PlacementScope$Companion;)Landroidx/compose/ui/unit/LayoutDirection; +HSPLandroidx/compose/ui/layout/Placeable$PlacementScope$Companion;->access$getParentWidth(Landroidx/compose/ui/layout/Placeable$PlacementScope$Companion;)I +HSPLandroidx/compose/ui/layout/Placeable$PlacementScope$Companion;->configureForPlacingForAlignment(Landroidx/compose/ui/node/LookaheadCapablePlaceable;)Z +HSPLandroidx/compose/ui/layout/Placeable$PlacementScope$Companion;->getParentLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection; +HSPLandroidx/compose/ui/layout/Placeable$PlacementScope$Companion;->getParentWidth()I +Landroidx/compose/ui/layout/PlaceableKt; +HSPLandroidx/compose/ui/layout/PlaceableKt;->()V +HSPLandroidx/compose/ui/layout/PlaceableKt;->access$getDefaultConstraints$p()J +HSPLandroidx/compose/ui/layout/PlaceableKt;->access$getDefaultLayerBlock$p()Lkotlin/jvm/functions/Function1; +Landroidx/compose/ui/layout/PlaceableKt$DefaultLayerBlock$1; +HSPLandroidx/compose/ui/layout/PlaceableKt$DefaultLayerBlock$1;->()V +HSPLandroidx/compose/ui/layout/PlaceableKt$DefaultLayerBlock$1;->()V +HSPLandroidx/compose/ui/layout/PlaceableKt$DefaultLayerBlock$1;->invoke(Landroidx/compose/ui/graphics/GraphicsLayerScope;)V +HSPLandroidx/compose/ui/layout/PlaceableKt$DefaultLayerBlock$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/layout/Remeasurement; +Landroidx/compose/ui/layout/RemeasurementModifier; +Landroidx/compose/ui/layout/RootMeasurePolicy; +HSPLandroidx/compose/ui/layout/RootMeasurePolicy;->()V +HSPLandroidx/compose/ui/layout/RootMeasurePolicy;->()V +HSPLandroidx/compose/ui/layout/RootMeasurePolicy;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Ljava/util/List;J)Landroidx/compose/ui/layout/MeasureResult; +Landroidx/compose/ui/layout/RootMeasurePolicy$measure$2; +HSPLandroidx/compose/ui/layout/RootMeasurePolicy$measure$2;->(Landroidx/compose/ui/layout/Placeable;)V +HSPLandroidx/compose/ui/layout/RootMeasurePolicy$measure$2;->invoke(Landroidx/compose/ui/layout/Placeable$PlacementScope;)V +HSPLandroidx/compose/ui/layout/RootMeasurePolicy$measure$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/layout/ScaleFactor; +HSPLandroidx/compose/ui/layout/ScaleFactor;->()V +HSPLandroidx/compose/ui/layout/ScaleFactor;->constructor-impl(J)J +HSPLandroidx/compose/ui/layout/ScaleFactor;->getScaleX-impl(J)F +HSPLandroidx/compose/ui/layout/ScaleFactor;->getScaleY-impl(J)F +Landroidx/compose/ui/layout/ScaleFactor$Companion; +HSPLandroidx/compose/ui/layout/ScaleFactor$Companion;->()V +HSPLandroidx/compose/ui/layout/ScaleFactor$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/layout/ScaleFactorKt; +HSPLandroidx/compose/ui/layout/ScaleFactorKt;->ScaleFactor(FF)J +HSPLandroidx/compose/ui/layout/ScaleFactorKt;->times-UQTWf7w(JJ)J +Landroidx/compose/ui/layout/SubcomposeIntermediateMeasureScope; +Landroidx/compose/ui/layout/SubcomposeLayoutKt; +HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt;->SubcomposeLayout(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V +HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt;->SubcomposeLayout(Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V +HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt;->SubcomposeLayout(Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V +Landroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$$inlined$ComposeNode$1; +HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$$inlined$ComposeNode$1;->(Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$$inlined$ComposeNode$1;->invoke()Ljava/lang/Object; +Landroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$10; +HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$10;->(Landroidx/compose/ui/layout/SubcomposeLayoutState;)V +HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$10;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$10;->invoke()V +Landroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$11$1; +HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$11$1;->(Landroidx/compose/runtime/State;)V +HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$11$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult; +HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$11$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$11$1$invoke$$inlined$onDispose$1; +HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$11$1$invoke$$inlined$onDispose$1;->(Landroidx/compose/runtime/State;)V +Landroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$12; +HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$12;->(Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;II)V +Landroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$6; +HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$6;->()V +HSPLandroidx/compose/ui/layout/SubcomposeLayoutKt$SubcomposeLayout$6;->()V +Landroidx/compose/ui/layout/SubcomposeLayoutState; +HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->()V +HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->()V +HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->(Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy;)V +HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->access$getSlotReusePolicy$p(Landroidx/compose/ui/layout/SubcomposeLayoutState;)Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy; +HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->access$getState(Landroidx/compose/ui/layout/SubcomposeLayoutState;)Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState; +HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->access$set_state$p(Landroidx/compose/ui/layout/SubcomposeLayoutState;Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)V +HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->forceRecomposeChildren$ui_release()V +HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->getSetCompositionContext$ui_release()Lkotlin/jvm/functions/Function2; +HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->getSetIntermediateMeasurePolicy$ui_release()Lkotlin/jvm/functions/Function2; +HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->getSetMeasurePolicy$ui_release()Lkotlin/jvm/functions/Function2; +HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->getSetRoot$ui_release()Lkotlin/jvm/functions/Function2; +HSPLandroidx/compose/ui/layout/SubcomposeLayoutState;->getState()Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState; +Landroidx/compose/ui/layout/SubcomposeLayoutState$setCompositionContext$1; +HSPLandroidx/compose/ui/layout/SubcomposeLayoutState$setCompositionContext$1;->(Landroidx/compose/ui/layout/SubcomposeLayoutState;)V +HSPLandroidx/compose/ui/layout/SubcomposeLayoutState$setCompositionContext$1;->invoke(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/runtime/CompositionContext;)V +HSPLandroidx/compose/ui/layout/SubcomposeLayoutState$setCompositionContext$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/layout/SubcomposeLayoutState$setIntermediateMeasurePolicy$1; +HSPLandroidx/compose/ui/layout/SubcomposeLayoutState$setIntermediateMeasurePolicy$1;->(Landroidx/compose/ui/layout/SubcomposeLayoutState;)V +HSPLandroidx/compose/ui/layout/SubcomposeLayoutState$setIntermediateMeasurePolicy$1;->invoke(Landroidx/compose/ui/node/LayoutNode;Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/ui/layout/SubcomposeLayoutState$setIntermediateMeasurePolicy$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/layout/SubcomposeLayoutState$setMeasurePolicy$1; +HSPLandroidx/compose/ui/layout/SubcomposeLayoutState$setMeasurePolicy$1;->(Landroidx/compose/ui/layout/SubcomposeLayoutState;)V +HSPLandroidx/compose/ui/layout/SubcomposeLayoutState$setMeasurePolicy$1;->invoke(Landroidx/compose/ui/node/LayoutNode;Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/ui/layout/SubcomposeLayoutState$setMeasurePolicy$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/layout/SubcomposeLayoutState$setRoot$1; +HSPLandroidx/compose/ui/layout/SubcomposeLayoutState$setRoot$1;->(Landroidx/compose/ui/layout/SubcomposeLayoutState;)V +HSPLandroidx/compose/ui/layout/SubcomposeLayoutState$setRoot$1;->invoke(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/layout/SubcomposeLayoutState;)V +HSPLandroidx/compose/ui/layout/SubcomposeLayoutState$setRoot$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/layout/SubcomposeMeasureScope; +Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy; +Landroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet; +HSPLandroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;->()V +HSPLandroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;->(Ljava/util/Set;)V +HSPLandroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;->(Ljava/util/Set;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +PLandroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;->add$ui_release(Ljava/lang/Object;)Z +PLandroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;->clear()V +PLandroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;->contains(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/layout/SubcomposeSlotReusePolicy$SlotIdsSet;->iterator()Ljava/util/Iterator; +Landroidx/compose/ui/modifier/BackwardsCompatLocalMap; +HSPLandroidx/compose/ui/modifier/BackwardsCompatLocalMap;->(Landroidx/compose/ui/modifier/ModifierLocalProvider;)V +HSPLandroidx/compose/ui/modifier/BackwardsCompatLocalMap;->contains$ui_release(Landroidx/compose/ui/modifier/ModifierLocal;)Z +HSPLandroidx/compose/ui/modifier/BackwardsCompatLocalMap;->get$ui_release(Landroidx/compose/ui/modifier/ModifierLocal;)Ljava/lang/Object; +Landroidx/compose/ui/modifier/EmptyMap; +HSPLandroidx/compose/ui/modifier/EmptyMap;->()V +HSPLandroidx/compose/ui/modifier/EmptyMap;->()V +HSPLandroidx/compose/ui/modifier/EmptyMap;->contains$ui_release(Landroidx/compose/ui/modifier/ModifierLocal;)Z +Landroidx/compose/ui/modifier/ModifierLocal; +HSPLandroidx/compose/ui/modifier/ModifierLocal;->()V +HSPLandroidx/compose/ui/modifier/ModifierLocal;->(Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/ui/modifier/ModifierLocal;->(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/modifier/ModifierLocal;->getDefaultFactory$ui_release()Lkotlin/jvm/functions/Function0; +Landroidx/compose/ui/modifier/ModifierLocalConsumer; +Landroidx/compose/ui/modifier/ModifierLocalKt; +HSPLandroidx/compose/ui/modifier/ModifierLocalKt;->modifierLocalOf(Lkotlin/jvm/functions/Function0;)Landroidx/compose/ui/modifier/ProvidableModifierLocal; +Landroidx/compose/ui/modifier/ModifierLocalManager; +HSPLandroidx/compose/ui/modifier/ModifierLocalManager;->(Landroidx/compose/ui/node/Owner;)V +HSPLandroidx/compose/ui/modifier/ModifierLocalManager;->invalidate()V +HSPLandroidx/compose/ui/modifier/ModifierLocalManager;->removedProvider(Landroidx/compose/ui/node/BackwardsCompatNode;Landroidx/compose/ui/modifier/ModifierLocal;)V +HSPLandroidx/compose/ui/modifier/ModifierLocalManager;->triggerUpdates()V +Landroidx/compose/ui/modifier/ModifierLocalManager$invalidate$1; +HSPLandroidx/compose/ui/modifier/ModifierLocalManager$invalidate$1;->(Landroidx/compose/ui/modifier/ModifierLocalManager;)V +HSPLandroidx/compose/ui/modifier/ModifierLocalManager$invalidate$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/ui/modifier/ModifierLocalManager$invalidate$1;->invoke()V +Landroidx/compose/ui/modifier/ModifierLocalMap; +HSPLandroidx/compose/ui/modifier/ModifierLocalMap;->()V +HSPLandroidx/compose/ui/modifier/ModifierLocalMap;->()V +HSPLandroidx/compose/ui/modifier/ModifierLocalMap;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/modifier/ModifierLocalModifierNode; +HSPLandroidx/compose/ui/modifier/ModifierLocalModifierNode;->getCurrent(Landroidx/compose/ui/modifier/ModifierLocal;)Ljava/lang/Object; +HSPLandroidx/compose/ui/modifier/ModifierLocalModifierNode;->getProvidedValues()Landroidx/compose/ui/modifier/ModifierLocalMap; +Landroidx/compose/ui/modifier/ModifierLocalModifierNodeKt; +HSPLandroidx/compose/ui/modifier/ModifierLocalModifierNodeKt;->modifierLocalMapOf()Landroidx/compose/ui/modifier/ModifierLocalMap; +HSPLandroidx/compose/ui/modifier/ModifierLocalModifierNodeKt;->modifierLocalMapOf(Lkotlin/Pair;)Landroidx/compose/ui/modifier/ModifierLocalMap; +Landroidx/compose/ui/modifier/ModifierLocalProvider; +Landroidx/compose/ui/modifier/ModifierLocalReadScope; +Landroidx/compose/ui/modifier/ProvidableModifierLocal; +HSPLandroidx/compose/ui/modifier/ProvidableModifierLocal;->()V +HSPLandroidx/compose/ui/modifier/ProvidableModifierLocal;->(Lkotlin/jvm/functions/Function0;)V +Landroidx/compose/ui/modifier/SingleLocalMap; +HSPLandroidx/compose/ui/modifier/SingleLocalMap;->(Landroidx/compose/ui/modifier/ModifierLocal;)V +HSPLandroidx/compose/ui/modifier/SingleLocalMap;->contains$ui_release(Landroidx/compose/ui/modifier/ModifierLocal;)Z +HSPLandroidx/compose/ui/modifier/SingleLocalMap;->get$ui_release(Landroidx/compose/ui/modifier/ModifierLocal;)Ljava/lang/Object; +HSPLandroidx/compose/ui/modifier/SingleLocalMap;->getValue()Ljava/lang/Object; +HSPLandroidx/compose/ui/modifier/SingleLocalMap;->set$ui_release(Landroidx/compose/ui/modifier/ModifierLocal;Ljava/lang/Object;)V +HSPLandroidx/compose/ui/modifier/SingleLocalMap;->setValue(Ljava/lang/Object;)V +Landroidx/compose/ui/node/AlignmentLines; +HSPLandroidx/compose/ui/node/AlignmentLines;->(Landroidx/compose/ui/node/AlignmentLinesOwner;)V +HSPLandroidx/compose/ui/node/AlignmentLines;->(Landroidx/compose/ui/node/AlignmentLinesOwner;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/node/AlignmentLines;->getDirty$ui_release()Z +HSPLandroidx/compose/ui/node/AlignmentLines;->getQueried$ui_release()Z +HSPLandroidx/compose/ui/node/AlignmentLines;->getRequired$ui_release()Z +HSPLandroidx/compose/ui/node/AlignmentLines;->getUsedDuringParentLayout$ui_release()Z +HSPLandroidx/compose/ui/node/AlignmentLines;->onAlignmentsChanged()V +HSPLandroidx/compose/ui/node/AlignmentLines;->recalculateQueryOwner()V +HSPLandroidx/compose/ui/node/AlignmentLines;->reset$ui_release()V +HSPLandroidx/compose/ui/node/AlignmentLines;->setPreviousUsedDuringParentLayout$ui_release(Z)V +HSPLandroidx/compose/ui/node/AlignmentLines;->setUsedByModifierLayout$ui_release(Z)V +HSPLandroidx/compose/ui/node/AlignmentLines;->setUsedByModifierMeasurement$ui_release(Z)V +HSPLandroidx/compose/ui/node/AlignmentLines;->setUsedDuringParentLayout$ui_release(Z)V +HSPLandroidx/compose/ui/node/AlignmentLines;->setUsedDuringParentMeasurement$ui_release(Z)V +Landroidx/compose/ui/node/AlignmentLinesOwner; +Landroidx/compose/ui/node/BackwardsCompatNode; +HSPLandroidx/compose/ui/node/BackwardsCompatNode;->(Landroidx/compose/ui/Modifier$Element;)V +HSPLandroidx/compose/ui/node/BackwardsCompatNode;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V +HSPLandroidx/compose/ui/node/BackwardsCompatNode;->getCurrent(Landroidx/compose/ui/modifier/ModifierLocal;)Ljava/lang/Object; +HSPLandroidx/compose/ui/node/BackwardsCompatNode;->getElement()Landroidx/compose/ui/Modifier$Element; +HSPLandroidx/compose/ui/node/BackwardsCompatNode;->getProvidedValues()Landroidx/compose/ui/modifier/ModifierLocalMap; +HSPLandroidx/compose/ui/node/BackwardsCompatNode;->initializeModifier(Z)V +HSPLandroidx/compose/ui/node/BackwardsCompatNode;->isValidOwnerScope()Z +HSPLandroidx/compose/ui/node/BackwardsCompatNode;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; +HSPLandroidx/compose/ui/node/BackwardsCompatNode;->modifyParentData(Landroidx/compose/ui/unit/Density;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onAttach()V +HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onDetach()V +HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onGloballyPositioned(Landroidx/compose/ui/layout/LayoutCoordinates;)V +HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onMeasureResultChanged()V +HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onPlaced(Landroidx/compose/ui/layout/LayoutCoordinates;)V +HSPLandroidx/compose/ui/node/BackwardsCompatNode;->onRemeasured-ozmzZPI(J)V +HSPLandroidx/compose/ui/node/BackwardsCompatNode;->setElement(Landroidx/compose/ui/Modifier$Element;)V +HSPLandroidx/compose/ui/node/BackwardsCompatNode;->unInitializeModifier()V +HSPLandroidx/compose/ui/node/BackwardsCompatNode;->updateModifierLocalConsumer()V +HSPLandroidx/compose/ui/node/BackwardsCompatNode;->updateModifierLocalProvider(Landroidx/compose/ui/modifier/ModifierLocalProvider;)V +Landroidx/compose/ui/node/BackwardsCompatNode$initializeModifier$1; +HSPLandroidx/compose/ui/node/BackwardsCompatNode$initializeModifier$1;->(Landroidx/compose/ui/node/BackwardsCompatNode;)V +HSPLandroidx/compose/ui/node/BackwardsCompatNode$initializeModifier$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/ui/node/BackwardsCompatNode$initializeModifier$1;->invoke()V +Landroidx/compose/ui/node/BackwardsCompatNode$updateModifierLocalConsumer$1; +HSPLandroidx/compose/ui/node/BackwardsCompatNode$updateModifierLocalConsumer$1;->(Landroidx/compose/ui/node/BackwardsCompatNode;)V +HSPLandroidx/compose/ui/node/BackwardsCompatNode$updateModifierLocalConsumer$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/ui/node/BackwardsCompatNode$updateModifierLocalConsumer$1;->invoke()V +Landroidx/compose/ui/node/BackwardsCompatNodeKt; +HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt;->()V +HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt;->access$getDetachedModifierLocalReadScope$p()Landroidx/compose/ui/node/BackwardsCompatNodeKt$DetachedModifierLocalReadScope$1; +HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt;->access$getUpdateModifierLocalConsumer$p()Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt;->access$isChainUpdate(Landroidx/compose/ui/node/BackwardsCompatNode;)Z +HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt;->isChainUpdate(Landroidx/compose/ui/node/BackwardsCompatNode;)Z +Landroidx/compose/ui/node/BackwardsCompatNodeKt$DetachedModifierLocalReadScope$1; +HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$DetachedModifierLocalReadScope$1;->()V +HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$DetachedModifierLocalReadScope$1;->getCurrent(Landroidx/compose/ui/modifier/ModifierLocal;)Ljava/lang/Object; +Landroidx/compose/ui/node/BackwardsCompatNodeKt$onDrawCacheReadsChanged$1; +HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$onDrawCacheReadsChanged$1;->()V +HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$onDrawCacheReadsChanged$1;->()V +Landroidx/compose/ui/node/BackwardsCompatNodeKt$updateModifierLocalConsumer$1; +HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$updateModifierLocalConsumer$1;->()V +HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$updateModifierLocalConsumer$1;->()V +HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$updateModifierLocalConsumer$1;->invoke(Landroidx/compose/ui/node/BackwardsCompatNode;)V +HSPLandroidx/compose/ui/node/BackwardsCompatNodeKt$updateModifierLocalConsumer$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/node/CanFocusChecker; +HSPLandroidx/compose/ui/node/CanFocusChecker;->()V +HSPLandroidx/compose/ui/node/CanFocusChecker;->()V +HSPLandroidx/compose/ui/node/CanFocusChecker;->isCanFocusSet()Z +HSPLandroidx/compose/ui/node/CanFocusChecker;->reset()V +HSPLandroidx/compose/ui/node/CanFocusChecker;->setCanFocus(Z)V +Landroidx/compose/ui/node/CenteredArray; +HSPLandroidx/compose/ui/node/CenteredArray;->constructor-impl([I)[I +HSPLandroidx/compose/ui/node/CenteredArray;->get-impl([II)I +HSPLandroidx/compose/ui/node/CenteredArray;->getMid-impl([I)I +HSPLandroidx/compose/ui/node/CenteredArray;->set-impl([III)V +Landroidx/compose/ui/node/ComposeUiNode; +HSPLandroidx/compose/ui/node/ComposeUiNode;->()V +Landroidx/compose/ui/node/ComposeUiNode$Companion; +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion;->()V +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion;->()V +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion;->getConstructor()Lkotlin/jvm/functions/Function0; +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion;->getSetCompositeKeyHash()Lkotlin/jvm/functions/Function2; +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion;->getSetDensity()Lkotlin/jvm/functions/Function2; +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion;->getSetLayoutDirection()Lkotlin/jvm/functions/Function2; +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion;->getSetMeasurePolicy()Lkotlin/jvm/functions/Function2; +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion;->getSetModifier()Lkotlin/jvm/functions/Function2; +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion;->getSetResolvedCompositionLocals()Lkotlin/jvm/functions/Function2; +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion;->getSetViewConfiguration()Lkotlin/jvm/functions/Function2; +Landroidx/compose/ui/node/ComposeUiNode$Companion$SetCompositeKeyHash$1; +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetCompositeKeyHash$1;->()V +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetCompositeKeyHash$1;->()V +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetCompositeKeyHash$1;->invoke(Landroidx/compose/ui/node/ComposeUiNode;I)V +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetCompositeKeyHash$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/node/ComposeUiNode$Companion$SetDensity$1; +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetDensity$1;->()V +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetDensity$1;->()V +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetDensity$1;->invoke(Landroidx/compose/ui/node/ComposeUiNode;Landroidx/compose/ui/unit/Density;)V +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetDensity$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/node/ComposeUiNode$Companion$SetLayoutDirection$1; +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetLayoutDirection$1;->()V +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetLayoutDirection$1;->()V +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetLayoutDirection$1;->invoke(Landroidx/compose/ui/node/ComposeUiNode;Landroidx/compose/ui/unit/LayoutDirection;)V +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetLayoutDirection$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/node/ComposeUiNode$Companion$SetMeasurePolicy$1; +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetMeasurePolicy$1;->()V +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetMeasurePolicy$1;->()V +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetMeasurePolicy$1;->invoke(Landroidx/compose/ui/node/ComposeUiNode;Landroidx/compose/ui/layout/MeasurePolicy;)V +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetMeasurePolicy$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/node/ComposeUiNode$Companion$SetModifier$1; +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetModifier$1;->()V +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetModifier$1;->()V +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetModifier$1;->invoke(Landroidx/compose/ui/node/ComposeUiNode;Landroidx/compose/ui/Modifier;)V +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetModifier$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/node/ComposeUiNode$Companion$SetResolvedCompositionLocals$1; +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetResolvedCompositionLocals$1;->()V +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetResolvedCompositionLocals$1;->()V +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetResolvedCompositionLocals$1;->invoke(Landroidx/compose/ui/node/ComposeUiNode;Landroidx/compose/runtime/CompositionLocalMap;)V +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetResolvedCompositionLocals$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/node/ComposeUiNode$Companion$SetViewConfiguration$1; +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetViewConfiguration$1;->()V +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetViewConfiguration$1;->()V +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetViewConfiguration$1;->invoke(Landroidx/compose/ui/node/ComposeUiNode;Landroidx/compose/ui/platform/ViewConfiguration;)V +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$SetViewConfiguration$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/node/ComposeUiNode$Companion$VirtualConstructor$1; +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$VirtualConstructor$1;->()V +HSPLandroidx/compose/ui/node/ComposeUiNode$Companion$VirtualConstructor$1;->()V +Landroidx/compose/ui/node/CompositionLocalConsumerModifierNode; +Landroidx/compose/ui/node/CompositionLocalConsumerModifierNodeKt; +HSPLandroidx/compose/ui/node/CompositionLocalConsumerModifierNodeKt;->currentValueOf(Landroidx/compose/ui/node/CompositionLocalConsumerModifierNode;Landroidx/compose/runtime/CompositionLocal;)Ljava/lang/Object; +Landroidx/compose/ui/node/DelegatableNode; +Landroidx/compose/ui/node/DelegatableNodeKt; +HSPLandroidx/compose/ui/node/DelegatableNodeKt;->access$addLayoutNodeChildren(Landroidx/compose/runtime/collection/MutableVector;Landroidx/compose/ui/Modifier$Node;)V +HSPLandroidx/compose/ui/node/DelegatableNodeKt;->access$pop(Landroidx/compose/runtime/collection/MutableVector;)Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/node/DelegatableNodeKt;->addLayoutNodeChildren(Landroidx/compose/runtime/collection/MutableVector;Landroidx/compose/ui/Modifier$Node;)V +HSPLandroidx/compose/ui/node/DelegatableNodeKt;->asLayoutModifierNode(Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/node/LayoutModifierNode; +HSPLandroidx/compose/ui/node/DelegatableNodeKt;->has-64DMado(Landroidx/compose/ui/node/DelegatableNode;I)Z +HSPLandroidx/compose/ui/node/DelegatableNodeKt;->isDelegationRoot(Landroidx/compose/ui/node/DelegatableNode;)Z +HSPLandroidx/compose/ui/node/DelegatableNodeKt;->pop(Landroidx/compose/runtime/collection/MutableVector;)Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/node/DelegatableNodeKt;->requireCoordinator-64DMado(Landroidx/compose/ui/node/DelegatableNode;I)Landroidx/compose/ui/node/NodeCoordinator; +HSPLandroidx/compose/ui/node/DelegatableNodeKt;->requireDensity(Landroidx/compose/ui/node/DelegatableNode;)Landroidx/compose/ui/unit/Density; +HSPLandroidx/compose/ui/node/DelegatableNodeKt;->requireLayoutDirection(Landroidx/compose/ui/node/DelegatableNode;)Landroidx/compose/ui/unit/LayoutDirection; +HSPLandroidx/compose/ui/node/DelegatableNodeKt;->requireLayoutNode(Landroidx/compose/ui/node/DelegatableNode;)Landroidx/compose/ui/node/LayoutNode; +HSPLandroidx/compose/ui/node/DelegatableNodeKt;->requireOwner(Landroidx/compose/ui/node/DelegatableNode;)Landroidx/compose/ui/node/Owner; +Landroidx/compose/ui/node/DelegatingNode; +HSPLandroidx/compose/ui/node/DelegatingNode;->()V +HSPLandroidx/compose/ui/node/DelegatingNode;->()V +HSPLandroidx/compose/ui/node/DelegatingNode;->delegate(Landroidx/compose/ui/node/DelegatableNode;)Landroidx/compose/ui/node/DelegatableNode; +HSPLandroidx/compose/ui/node/DelegatingNode;->getDelegate$ui_release()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/node/DelegatingNode;->getSelfKindSet$ui_release()I +HSPLandroidx/compose/ui/node/DelegatingNode;->markAsAttached$ui_release()V +HSPLandroidx/compose/ui/node/DelegatingNode;->markAsDetached$ui_release()V +HSPLandroidx/compose/ui/node/DelegatingNode;->reset$ui_release()V +HSPLandroidx/compose/ui/node/DelegatingNode;->runAttachLifecycle$ui_release()V +HSPLandroidx/compose/ui/node/DelegatingNode;->runDetachLifecycle$ui_release()V +HSPLandroidx/compose/ui/node/DelegatingNode;->updateCoordinator$ui_release(Landroidx/compose/ui/node/NodeCoordinator;)V +HSPLandroidx/compose/ui/node/DelegatingNode;->updateNodeKindSet(IZ)V +HSPLandroidx/compose/ui/node/DelegatingNode;->validateDelegateKindSet(ILandroidx/compose/ui/Modifier$Node;)V +Landroidx/compose/ui/node/DepthSortedSet; +HSPLandroidx/compose/ui/node/DepthSortedSet;->(Z)V +HSPLandroidx/compose/ui/node/DepthSortedSet;->add(Landroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/node/DepthSortedSet;->contains(Landroidx/compose/ui/node/LayoutNode;)Z +HSPLandroidx/compose/ui/node/DepthSortedSet;->isEmpty()Z +HSPLandroidx/compose/ui/node/DepthSortedSet;->pop()Landroidx/compose/ui/node/LayoutNode; +HSPLandroidx/compose/ui/node/DepthSortedSet;->remove(Landroidx/compose/ui/node/LayoutNode;)Z +Landroidx/compose/ui/node/DepthSortedSet$DepthComparator$1; +HSPLandroidx/compose/ui/node/DepthSortedSet$DepthComparator$1;->()V +HSPLandroidx/compose/ui/node/DepthSortedSet$DepthComparator$1;->compare(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/node/LayoutNode;)I +HSPLandroidx/compose/ui/node/DepthSortedSet$DepthComparator$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I +Landroidx/compose/ui/node/DepthSortedSet$mapOfOriginalDepth$2; +HSPLandroidx/compose/ui/node/DepthSortedSet$mapOfOriginalDepth$2;->()V +HSPLandroidx/compose/ui/node/DepthSortedSet$mapOfOriginalDepth$2;->()V +Landroidx/compose/ui/node/DepthSortedSetsForDifferentPasses; +HSPLandroidx/compose/ui/node/DepthSortedSetsForDifferentPasses;->(Z)V +HSPLandroidx/compose/ui/node/DepthSortedSetsForDifferentPasses;->access$getLookaheadSet$p(Landroidx/compose/ui/node/DepthSortedSetsForDifferentPasses;)Landroidx/compose/ui/node/DepthSortedSet; +HSPLandroidx/compose/ui/node/DepthSortedSetsForDifferentPasses;->access$getSet$p(Landroidx/compose/ui/node/DepthSortedSetsForDifferentPasses;)Landroidx/compose/ui/node/DepthSortedSet; +HSPLandroidx/compose/ui/node/DepthSortedSetsForDifferentPasses;->add(Landroidx/compose/ui/node/LayoutNode;Z)V +HSPLandroidx/compose/ui/node/DepthSortedSetsForDifferentPasses;->isEmpty()Z +HSPLandroidx/compose/ui/node/DepthSortedSetsForDifferentPasses;->isNotEmpty()Z +HSPLandroidx/compose/ui/node/DepthSortedSetsForDifferentPasses;->remove(Landroidx/compose/ui/node/LayoutNode;)Z +HSPLandroidx/compose/ui/node/DepthSortedSetsForDifferentPasses;->remove(Landroidx/compose/ui/node/LayoutNode;Z)Z +Landroidx/compose/ui/node/DiffCallback; +Landroidx/compose/ui/node/DistanceAndInLayer; +HSPLandroidx/compose/ui/node/DistanceAndInLayer;->compareTo-S_HNhKs(JJ)I +HSPLandroidx/compose/ui/node/DistanceAndInLayer;->constructor-impl(J)J +HSPLandroidx/compose/ui/node/DistanceAndInLayer;->getDistance-impl(J)F +HSPLandroidx/compose/ui/node/DistanceAndInLayer;->isInLayer-impl(J)Z +Landroidx/compose/ui/node/DrawModifierNode; +HSPLandroidx/compose/ui/node/DrawModifierNode;->onMeasureResultChanged()V +Landroidx/compose/ui/node/DrawModifierNodeKt; +HSPLandroidx/compose/ui/node/DrawModifierNodeKt;->invalidateDraw(Landroidx/compose/ui/node/DrawModifierNode;)V +Landroidx/compose/ui/node/ForceUpdateElement; +HSPLandroidx/compose/ui/node/ForceUpdateElement;->(Landroidx/compose/ui/node/ModifierNodeElement;)V +Landroidx/compose/ui/node/GlobalPositionAwareModifierNode; +Landroidx/compose/ui/node/HitTestResult; +HSPLandroidx/compose/ui/node/HitTestResult;->()V +HSPLandroidx/compose/ui/node/HitTestResult;->access$getHitDepth$p(Landroidx/compose/ui/node/HitTestResult;)I +HSPLandroidx/compose/ui/node/HitTestResult;->access$setHitDepth$p(Landroidx/compose/ui/node/HitTestResult;I)V +HSPLandroidx/compose/ui/node/HitTestResult;->clear()V +HSPLandroidx/compose/ui/node/HitTestResult;->ensureContainerSize()V +HSPLandroidx/compose/ui/node/HitTestResult;->findBestHitDistance-ptXAw2c()J +HSPLandroidx/compose/ui/node/HitTestResult;->get(I)Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/node/HitTestResult;->get(I)Ljava/lang/Object; +HSPLandroidx/compose/ui/node/HitTestResult;->getSize()I +HSPLandroidx/compose/ui/node/HitTestResult;->hasHit()Z +HSPLandroidx/compose/ui/node/HitTestResult;->hit(Landroidx/compose/ui/Modifier$Node;ZLkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/ui/node/HitTestResult;->hitInMinimumTouchTarget(Landroidx/compose/ui/Modifier$Node;FZLkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/ui/node/HitTestResult;->isEmpty()Z +HSPLandroidx/compose/ui/node/HitTestResult;->resizeToHitDepth()V +HSPLandroidx/compose/ui/node/HitTestResult;->size()I +Landroidx/compose/ui/node/HitTestResultKt; +HSPLandroidx/compose/ui/node/HitTestResultKt;->DistanceAndInLayer(FZ)J +HSPLandroidx/compose/ui/node/HitTestResultKt;->access$DistanceAndInLayer(FZ)J +Landroidx/compose/ui/node/InnerNodeCoordinator; +HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->()V +HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->(Landroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->getTail()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->getTail()Landroidx/compose/ui/node/TailModifierNode; +HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->hitTestChild-YqVAtuI(Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V +HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->maxIntrinsicWidth(I)I +HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->measure-BRTryo0(J)Landroidx/compose/ui/layout/Placeable; +HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->performDraw(Landroidx/compose/ui/graphics/Canvas;)V +HSPLandroidx/compose/ui/node/InnerNodeCoordinator;->placeAt-f8xVGno(JFLkotlin/jvm/functions/Function1;)V +Landroidx/compose/ui/node/InnerNodeCoordinator$Companion; +HSPLandroidx/compose/ui/node/InnerNodeCoordinator$Companion;->()V +HSPLandroidx/compose/ui/node/InnerNodeCoordinator$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/node/IntStack; +HSPLandroidx/compose/ui/node/IntStack;->(I)V +HSPLandroidx/compose/ui/node/IntStack;->compareDiagonal(II)Z +HSPLandroidx/compose/ui/node/IntStack;->get(I)I +HSPLandroidx/compose/ui/node/IntStack;->getSize()I +HSPLandroidx/compose/ui/node/IntStack;->isNotEmpty()Z +HSPLandroidx/compose/ui/node/IntStack;->partition(III)I +HSPLandroidx/compose/ui/node/IntStack;->pop()I +HSPLandroidx/compose/ui/node/IntStack;->pushDiagonal(III)V +HSPLandroidx/compose/ui/node/IntStack;->pushRange(IIII)V +HSPLandroidx/compose/ui/node/IntStack;->quickSort(III)V +HSPLandroidx/compose/ui/node/IntStack;->sortDiagonals()V +HSPLandroidx/compose/ui/node/IntStack;->swapDiagonal(II)V +Landroidx/compose/ui/node/InteroperableComposeUiNode; +Landroidx/compose/ui/node/IntrinsicsPolicy; +HSPLandroidx/compose/ui/node/IntrinsicsPolicy;->()V +HSPLandroidx/compose/ui/node/IntrinsicsPolicy;->(Landroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/node/IntrinsicsPolicy;->getMeasurePolicyState()Landroidx/compose/ui/layout/MeasurePolicy; +HSPLandroidx/compose/ui/node/IntrinsicsPolicy;->maxIntrinsicWidth(I)I +HSPLandroidx/compose/ui/node/IntrinsicsPolicy;->measurePolicyFromState()Landroidx/compose/ui/layout/MeasurePolicy; +HSPLandroidx/compose/ui/node/IntrinsicsPolicy;->setMeasurePolicyState(Landroidx/compose/ui/layout/MeasurePolicy;)V +HSPLandroidx/compose/ui/node/IntrinsicsPolicy;->updateFrom(Landroidx/compose/ui/layout/MeasurePolicy;)V +Landroidx/compose/ui/node/IntrinsicsPolicy$Companion; +HSPLandroidx/compose/ui/node/IntrinsicsPolicy$Companion;->()V +HSPLandroidx/compose/ui/node/IntrinsicsPolicy$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/node/LayerPositionalProperties; +HSPLandroidx/compose/ui/node/LayerPositionalProperties;->()V +HSPLandroidx/compose/ui/node/LayerPositionalProperties;->copyFrom(Landroidx/compose/ui/graphics/GraphicsLayerScope;)V +HSPLandroidx/compose/ui/node/LayerPositionalProperties;->copyFrom(Landroidx/compose/ui/node/LayerPositionalProperties;)V +HSPLandroidx/compose/ui/node/LayerPositionalProperties;->hasSameValuesAs(Landroidx/compose/ui/node/LayerPositionalProperties;)Z +Landroidx/compose/ui/node/LayoutAwareModifierNode; +HSPLandroidx/compose/ui/node/LayoutAwareModifierNode;->onRemeasured-ozmzZPI(J)V +Landroidx/compose/ui/node/LayoutModifierNode; +HSPLandroidx/compose/ui/node/LayoutModifierNode;->maxIntrinsicWidth(Landroidx/compose/ui/layout/IntrinsicMeasureScope;Landroidx/compose/ui/layout/IntrinsicMeasurable;I)I +Landroidx/compose/ui/node/LayoutModifierNode$maxIntrinsicWidth$1; +HSPLandroidx/compose/ui/node/LayoutModifierNode$maxIntrinsicWidth$1;->(Landroidx/compose/ui/node/LayoutModifierNode;)V +HSPLandroidx/compose/ui/node/LayoutModifierNode$maxIntrinsicWidth$1;->measure-3p2s80s(Landroidx/compose/ui/layout/MeasureScope;Landroidx/compose/ui/layout/Measurable;J)Landroidx/compose/ui/layout/MeasureResult; +Landroidx/compose/ui/node/LayoutModifierNodeCoordinator; +HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->()V +HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/node/LayoutModifierNode;)V +HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->getLayoutModifierNode()Landroidx/compose/ui/node/LayoutModifierNode; +HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->getTail()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->getWrappedNonNull()Landroidx/compose/ui/node/NodeCoordinator; +HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->maxIntrinsicWidth(I)I +HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->measure-BRTryo0(J)Landroidx/compose/ui/layout/Placeable; +HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->performDraw(Landroidx/compose/ui/graphics/Canvas;)V +HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->placeAt-f8xVGno(JFLkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator;->setLayoutModifierNode$ui_release(Landroidx/compose/ui/node/LayoutModifierNode;)V +Landroidx/compose/ui/node/LayoutModifierNodeCoordinator$Companion; +HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator$Companion;->()V +HSPLandroidx/compose/ui/node/LayoutModifierNodeCoordinator$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/node/LayoutModifierNodeKt; +HSPLandroidx/compose/ui/node/LayoutModifierNodeKt;->invalidateLayer(Landroidx/compose/ui/node/LayoutModifierNode;)V +HSPLandroidx/compose/ui/node/LayoutModifierNodeKt;->invalidateMeasurement(Landroidx/compose/ui/node/LayoutModifierNode;)V +Landroidx/compose/ui/node/LayoutNode; +HSPLandroidx/compose/ui/node/LayoutNode;->$r8$lambda$DzqjNqe9pzqBZZ9IiiTtp-hu0n4(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/node/LayoutNode;)I +HSPLandroidx/compose/ui/node/LayoutNode;->()V +HSPLandroidx/compose/ui/node/LayoutNode;->(ZI)V +HSPLandroidx/compose/ui/node/LayoutNode;->(ZIILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/node/LayoutNode;->ZComparator$lambda$38(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/node/LayoutNode;)I +HSPLandroidx/compose/ui/node/LayoutNode;->access$getConstructor$cp()Lkotlin/jvm/functions/Function0; +HSPLandroidx/compose/ui/node/LayoutNode;->access$getZComparator$cp()Ljava/util/Comparator; +HSPLandroidx/compose/ui/node/LayoutNode;->access$setIgnoreRemeasureRequests$p(Landroidx/compose/ui/node/LayoutNode;Z)V +HSPLandroidx/compose/ui/node/LayoutNode;->attach$ui_release(Landroidx/compose/ui/node/Owner;)V +HSPLandroidx/compose/ui/node/LayoutNode;->clearSubtreeIntrinsicsUsage$ui_release()V +HSPLandroidx/compose/ui/node/LayoutNode;->clearSubtreePlacementIntrinsicsUsage()V +HSPLandroidx/compose/ui/node/LayoutNode;->detach$ui_release()V +HSPLandroidx/compose/ui/node/LayoutNode;->dispatchOnPositionedCallbacks$ui_release()V +HSPLandroidx/compose/ui/node/LayoutNode;->draw$ui_release(Landroidx/compose/ui/graphics/Canvas;)V +HSPLandroidx/compose/ui/node/LayoutNode;->forceRemeasure()V +HSPLandroidx/compose/ui/node/LayoutNode;->getCanMultiMeasure$ui_release()Z +HSPLandroidx/compose/ui/node/LayoutNode;->getChildMeasurables$ui_release()Ljava/util/List; +HSPLandroidx/compose/ui/node/LayoutNode;->getChildren$ui_release()Ljava/util/List; +HSPLandroidx/compose/ui/node/LayoutNode;->getCollapsedSemantics$ui_release()Landroidx/compose/ui/semantics/SemanticsConfiguration; +HSPLandroidx/compose/ui/node/LayoutNode;->getCompositionLocalMap()Landroidx/compose/runtime/CompositionLocalMap; +HSPLandroidx/compose/ui/node/LayoutNode;->getCoordinates()Landroidx/compose/ui/layout/LayoutCoordinates; +HSPLandroidx/compose/ui/node/LayoutNode;->getDensity()Landroidx/compose/ui/unit/Density; +HSPLandroidx/compose/ui/node/LayoutNode;->getDepth$ui_release()I +HSPLandroidx/compose/ui/node/LayoutNode;->getFoldedChildren$ui_release()Ljava/util/List; +HSPLandroidx/compose/ui/node/LayoutNode;->getHasFixedInnerContentConstraints$ui_release()Z +HSPLandroidx/compose/ui/node/LayoutNode;->getHeight()I +HSPLandroidx/compose/ui/node/LayoutNode;->getInnerCoordinator$ui_release()Landroidx/compose/ui/node/NodeCoordinator; +HSPLandroidx/compose/ui/node/LayoutNode;->getInnerLayerCoordinator()Landroidx/compose/ui/node/NodeCoordinator; +HSPLandroidx/compose/ui/node/LayoutNode;->getIntrinsicsPolicy$ui_release()Landroidx/compose/ui/node/IntrinsicsPolicy; +HSPLandroidx/compose/ui/node/LayoutNode;->getIntrinsicsUsageByParent$ui_release()Landroidx/compose/ui/node/LayoutNode$UsageByParent; +HSPLandroidx/compose/ui/node/LayoutNode;->getLayoutDelegate$ui_release()Landroidx/compose/ui/node/LayoutNodeLayoutDelegate; +HSPLandroidx/compose/ui/node/LayoutNode;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection; +HSPLandroidx/compose/ui/node/LayoutNode;->getLayoutPending$ui_release()Z +HSPLandroidx/compose/ui/node/LayoutNode;->getLayoutState$ui_release()Landroidx/compose/ui/node/LayoutNode$LayoutState; +HSPLandroidx/compose/ui/node/LayoutNode;->getLookaheadLayoutPending$ui_release()Z +HSPLandroidx/compose/ui/node/LayoutNode;->getLookaheadMeasurePending$ui_release()Z +HSPLandroidx/compose/ui/node/LayoutNode;->getLookaheadPassDelegate$ui_release()Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$LookaheadPassDelegate; +HSPLandroidx/compose/ui/node/LayoutNode;->getLookaheadRoot$ui_release()Landroidx/compose/ui/node/LayoutNode; +HSPLandroidx/compose/ui/node/LayoutNode;->getMDrawScope$ui_release()Landroidx/compose/ui/node/LayoutNodeDrawScope; +HSPLandroidx/compose/ui/node/LayoutNode;->getMeasurePassDelegate$ui_release()Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate; +HSPLandroidx/compose/ui/node/LayoutNode;->getMeasurePending$ui_release()Z +HSPLandroidx/compose/ui/node/LayoutNode;->getMeasurePolicy()Landroidx/compose/ui/layout/MeasurePolicy; +HSPLandroidx/compose/ui/node/LayoutNode;->getMeasuredByParent$ui_release()Landroidx/compose/ui/node/LayoutNode$UsageByParent; +HSPLandroidx/compose/ui/node/LayoutNode;->getNeedsOnPositionedDispatch$ui_release()Z +HSPLandroidx/compose/ui/node/LayoutNode;->getNodes$ui_release()Landroidx/compose/ui/node/NodeChain; +HSPLandroidx/compose/ui/node/LayoutNode;->getOuterCoordinator$ui_release()Landroidx/compose/ui/node/NodeCoordinator; +HSPLandroidx/compose/ui/node/LayoutNode;->getOwner$ui_release()Landroidx/compose/ui/node/Owner; +HSPLandroidx/compose/ui/node/LayoutNode;->getParent$ui_release()Landroidx/compose/ui/node/LayoutNode; +HSPLandroidx/compose/ui/node/LayoutNode;->getPlaceOrder$ui_release()I +HSPLandroidx/compose/ui/node/LayoutNode;->getSemanticsId()I +HSPLandroidx/compose/ui/node/LayoutNode;->getSubcompositionsState$ui_release()Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState; +HSPLandroidx/compose/ui/node/LayoutNode;->getViewConfiguration()Landroidx/compose/ui/platform/ViewConfiguration; +HSPLandroidx/compose/ui/node/LayoutNode;->getWidth()I +HSPLandroidx/compose/ui/node/LayoutNode;->getZIndex()F +HSPLandroidx/compose/ui/node/LayoutNode;->getZSortedChildren()Landroidx/compose/runtime/collection/MutableVector; +HSPLandroidx/compose/ui/node/LayoutNode;->get_children$ui_release()Landroidx/compose/runtime/collection/MutableVector; +HSPLandroidx/compose/ui/node/LayoutNode;->hitTest-M_7yMNQ$ui_release$default(Landroidx/compose/ui/node/LayoutNode;JLandroidx/compose/ui/node/HitTestResult;ZZILjava/lang/Object;)V +HSPLandroidx/compose/ui/node/LayoutNode;->hitTest-M_7yMNQ$ui_release(JLandroidx/compose/ui/node/HitTestResult;ZZ)V +HSPLandroidx/compose/ui/node/LayoutNode;->insertAt$ui_release(ILandroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/node/LayoutNode;->invalidateFocusOnAttach()V +HSPLandroidx/compose/ui/node/LayoutNode;->invalidateFocusOnDetach()V +HSPLandroidx/compose/ui/node/LayoutNode;->invalidateLayer$ui_release()V +HSPLandroidx/compose/ui/node/LayoutNode;->invalidateLayers$ui_release()V +HSPLandroidx/compose/ui/node/LayoutNode;->invalidateMeasurements$ui_release()V +HSPLandroidx/compose/ui/node/LayoutNode;->invalidateParentData$ui_release()V +HSPLandroidx/compose/ui/node/LayoutNode;->invalidateSemantics$ui_release()V +HSPLandroidx/compose/ui/node/LayoutNode;->invalidateUnfoldedVirtualChildren()V +HSPLandroidx/compose/ui/node/LayoutNode;->isAttached()Z +HSPLandroidx/compose/ui/node/LayoutNode;->isPlaced()Z +HSPLandroidx/compose/ui/node/LayoutNode;->isValidOwnerScope()Z +HSPLandroidx/compose/ui/node/LayoutNode;->markLayoutPending$ui_release()V +HSPLandroidx/compose/ui/node/LayoutNode;->markMeasurePending$ui_release()V +HSPLandroidx/compose/ui/node/LayoutNode;->onChildRemoved(Landroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/node/LayoutNode;->onDeactivate()V +HSPLandroidx/compose/ui/node/LayoutNode;->onDensityOrLayoutDirectionChanged()V +HSPLandroidx/compose/ui/node/LayoutNode;->onRelease()V +HSPLandroidx/compose/ui/node/LayoutNode;->onZSortedChildrenInvalidated$ui_release()V +HSPLandroidx/compose/ui/node/LayoutNode;->place$ui_release(II)V +HSPLandroidx/compose/ui/node/LayoutNode;->recreateUnfoldedChildrenIfDirty()V +HSPLandroidx/compose/ui/node/LayoutNode;->remeasure-_Sx5XlM$ui_release$default(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/unit/Constraints;ILjava/lang/Object;)Z +HSPLandroidx/compose/ui/node/LayoutNode;->remeasure-_Sx5XlM$ui_release(Landroidx/compose/ui/unit/Constraints;)Z +HSPLandroidx/compose/ui/node/LayoutNode;->removeAt$ui_release(II)V +HSPLandroidx/compose/ui/node/LayoutNode;->replace$ui_release()V +HSPLandroidx/compose/ui/node/LayoutNode;->requestRelayout$ui_release$default(Landroidx/compose/ui/node/LayoutNode;ZILjava/lang/Object;)V +HSPLandroidx/compose/ui/node/LayoutNode;->requestRelayout$ui_release(Z)V +HSPLandroidx/compose/ui/node/LayoutNode;->requestRemeasure$ui_release$default(Landroidx/compose/ui/node/LayoutNode;ZZILjava/lang/Object;)V +HSPLandroidx/compose/ui/node/LayoutNode;->requestRemeasure$ui_release(ZZ)V +HSPLandroidx/compose/ui/node/LayoutNode;->resetModifierState()V +HSPLandroidx/compose/ui/node/LayoutNode;->resetSubtreeIntrinsicsUsage$ui_release()V +HSPLandroidx/compose/ui/node/LayoutNode;->setCanMultiMeasure$ui_release(Z)V +HSPLandroidx/compose/ui/node/LayoutNode;->setCompositeKeyHash(I)V +HSPLandroidx/compose/ui/node/LayoutNode;->setCompositionLocalMap(Landroidx/compose/runtime/CompositionLocalMap;)V +HSPLandroidx/compose/ui/node/LayoutNode;->setDensity(Landroidx/compose/ui/unit/Density;)V +HSPLandroidx/compose/ui/node/LayoutNode;->setInnerLayerCoordinatorIsDirty$ui_release(Z)V +HSPLandroidx/compose/ui/node/LayoutNode;->setIntrinsicsUsageByParent$ui_release(Landroidx/compose/ui/node/LayoutNode$UsageByParent;)V +HSPLandroidx/compose/ui/node/LayoutNode;->setLayoutDirection(Landroidx/compose/ui/unit/LayoutDirection;)V +HSPLandroidx/compose/ui/node/LayoutNode;->setLookaheadRoot(Landroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/node/LayoutNode;->setMeasurePolicy(Landroidx/compose/ui/layout/MeasurePolicy;)V +HSPLandroidx/compose/ui/node/LayoutNode;->setModifier(Landroidx/compose/ui/Modifier;)V +HSPLandroidx/compose/ui/node/LayoutNode;->setNeedsOnPositionedDispatch$ui_release(Z)V +HSPLandroidx/compose/ui/node/LayoutNode;->setSubcompositionsState$ui_release(Landroidx/compose/ui/layout/LayoutNodeSubcompositionsState;)V +HSPLandroidx/compose/ui/node/LayoutNode;->setViewConfiguration(Landroidx/compose/ui/platform/ViewConfiguration;)V +HSPLandroidx/compose/ui/node/LayoutNode;->updateChildrenIfDirty$ui_release()V +Landroidx/compose/ui/node/LayoutNode$$ExternalSyntheticLambda0; +HSPLandroidx/compose/ui/node/LayoutNode$$ExternalSyntheticLambda0;->()V +HSPLandroidx/compose/ui/node/LayoutNode$$ExternalSyntheticLambda0;->compare(Ljava/lang/Object;Ljava/lang/Object;)I +Landroidx/compose/ui/node/LayoutNode$Companion; +HSPLandroidx/compose/ui/node/LayoutNode$Companion;->()V +HSPLandroidx/compose/ui/node/LayoutNode$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/node/LayoutNode$Companion;->getConstructor$ui_release()Lkotlin/jvm/functions/Function0; +HSPLandroidx/compose/ui/node/LayoutNode$Companion;->getZComparator$ui_release()Ljava/util/Comparator; +Landroidx/compose/ui/node/LayoutNode$Companion$Constructor$1; +HSPLandroidx/compose/ui/node/LayoutNode$Companion$Constructor$1;->()V +HSPLandroidx/compose/ui/node/LayoutNode$Companion$Constructor$1;->()V +HSPLandroidx/compose/ui/node/LayoutNode$Companion$Constructor$1;->invoke()Landroidx/compose/ui/node/LayoutNode; +HSPLandroidx/compose/ui/node/LayoutNode$Companion$Constructor$1;->invoke()Ljava/lang/Object; +Landroidx/compose/ui/node/LayoutNode$Companion$DummyViewConfiguration$1; +HSPLandroidx/compose/ui/node/LayoutNode$Companion$DummyViewConfiguration$1;->()V +Landroidx/compose/ui/node/LayoutNode$Companion$ErrorMeasurePolicy$1; +HSPLandroidx/compose/ui/node/LayoutNode$Companion$ErrorMeasurePolicy$1;->()V +Landroidx/compose/ui/node/LayoutNode$LayoutState; +HSPLandroidx/compose/ui/node/LayoutNode$LayoutState;->$values()[Landroidx/compose/ui/node/LayoutNode$LayoutState; +HSPLandroidx/compose/ui/node/LayoutNode$LayoutState;->()V +HSPLandroidx/compose/ui/node/LayoutNode$LayoutState;->(Ljava/lang/String;I)V +HSPLandroidx/compose/ui/node/LayoutNode$LayoutState;->values()[Landroidx/compose/ui/node/LayoutNode$LayoutState; +Landroidx/compose/ui/node/LayoutNode$NoIntrinsicsMeasurePolicy; +HSPLandroidx/compose/ui/node/LayoutNode$NoIntrinsicsMeasurePolicy;->(Ljava/lang/String;)V +Landroidx/compose/ui/node/LayoutNode$UsageByParent; +HSPLandroidx/compose/ui/node/LayoutNode$UsageByParent;->$values()[Landroidx/compose/ui/node/LayoutNode$UsageByParent; +HSPLandroidx/compose/ui/node/LayoutNode$UsageByParent;->()V +HSPLandroidx/compose/ui/node/LayoutNode$UsageByParent;->(Ljava/lang/String;I)V +HSPLandroidx/compose/ui/node/LayoutNode$UsageByParent;->values()[Landroidx/compose/ui/node/LayoutNode$UsageByParent; +Landroidx/compose/ui/node/LayoutNode$_foldedChildren$1; +HSPLandroidx/compose/ui/node/LayoutNode$_foldedChildren$1;->(Landroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/node/LayoutNode$_foldedChildren$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/ui/node/LayoutNode$_foldedChildren$1;->invoke()V +Landroidx/compose/ui/node/LayoutNode$collapsedSemantics$1; +HSPLandroidx/compose/ui/node/LayoutNode$collapsedSemantics$1;->(Landroidx/compose/ui/node/LayoutNode;Lkotlin/jvm/internal/Ref$ObjectRef;)V +HSPLandroidx/compose/ui/node/LayoutNode$collapsedSemantics$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/ui/node/LayoutNode$collapsedSemantics$1;->invoke()V +Landroidx/compose/ui/node/LayoutNodeAlignmentLines; +HSPLandroidx/compose/ui/node/LayoutNodeAlignmentLines;->(Landroidx/compose/ui/node/AlignmentLinesOwner;)V +Landroidx/compose/ui/node/LayoutNodeDrawScope; +HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->(Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope;)V +HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->(Landroidx/compose/ui/graphics/drawscope/CanvasDrawScope;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->draw-x_KDEd0$ui_release(Landroidx/compose/ui/graphics/Canvas;JLandroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/Modifier$Node;)V +HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawArc-yD3GUKo(JFFZJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V +HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawContent()V +HSPLandroidx/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 +HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawImage-AZ2fEMs(Landroidx/compose/ui/graphics/ImageBitmap;JJJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;II)V +HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawLine-1RTmtNc(Landroidx/compose/ui/graphics/Brush;JJFILandroidx/compose/ui/graphics/PathEffect;FLandroidx/compose/ui/graphics/ColorFilter;I)V +HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawPath-LG529CI(Landroidx/compose/ui/graphics/Path;JFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V +HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawRect-n-J9OG0(JJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V +HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawRoundRect-ZuiqVtQ(Landroidx/compose/ui/graphics/Brush;JJJFLandroidx/compose/ui/graphics/drawscope/DrawStyle;Landroidx/compose/ui/graphics/ColorFilter;I)V +HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->drawRoundRect-u-Aw5IA(JJJJLandroidx/compose/ui/graphics/drawscope/DrawStyle;FLandroidx/compose/ui/graphics/ColorFilter;I)V +HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->getDrawContext()Landroidx/compose/ui/graphics/drawscope/DrawContext; +HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection; +HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->getSize-NH-jbRc()J +HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->performDraw(Landroidx/compose/ui/node/DrawModifierNode;Landroidx/compose/ui/graphics/Canvas;)V +HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->roundToPx-0680j_4(F)I +HSPLandroidx/compose/ui/node/LayoutNodeDrawScope;->toPx-0680j_4(F)F +Landroidx/compose/ui/node/LayoutNodeDrawScopeKt; +HSPLandroidx/compose/ui/node/LayoutNodeDrawScopeKt;->access$nextDrawNode(Landroidx/compose/ui/node/DelegatableNode;)Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/node/LayoutNodeDrawScopeKt;->nextDrawNode(Landroidx/compose/ui/node/DelegatableNode;)Landroidx/compose/ui/Modifier$Node; +Landroidx/compose/ui/node/LayoutNodeKt; +HSPLandroidx/compose/ui/node/LayoutNodeKt;->()V +HSPLandroidx/compose/ui/node/LayoutNodeKt;->access$getDefaultDensity$p()Landroidx/compose/ui/unit/Density; +HSPLandroidx/compose/ui/node/LayoutNodeKt;->requireOwner(Landroidx/compose/ui/node/LayoutNode;)Landroidx/compose/ui/node/Owner; +Landroidx/compose/ui/node/LayoutNodeLayoutDelegate; +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->(Landroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->access$getLayoutNode$p(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;)Landroidx/compose/ui/node/LayoutNode; +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->access$getLayoutPendingForAlignment$p(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;)Z +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->access$getNextChildPlaceOrder$p(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;)I +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->access$isOutMostLookaheadRoot(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;Landroidx/compose/ui/node/LayoutNode;)Z +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->access$performMeasure-BRTryo0(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;J)V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->access$setLayoutPending$p(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;Z)V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->access$setLayoutPendingForAlignment$p(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;Z)V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->access$setLayoutState$p(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;Landroidx/compose/ui/node/LayoutNode$LayoutState;)V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->access$setNextChildPlaceOrder$p(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;I)V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getAlignmentLinesOwner$ui_release()Landroidx/compose/ui/node/AlignmentLinesOwner; +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getChildrenAccessingCoordinatesDuringPlacement()I +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getCoordinatesAccessedDuringModifierPlacement()Z +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getCoordinatesAccessedDuringPlacement()Z +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getHeight$ui_release()I +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getLastConstraints-DWUhwKw()Landroidx/compose/ui/unit/Constraints; +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getLayoutPending$ui_release()Z +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getLayoutState$ui_release()Landroidx/compose/ui/node/LayoutNode$LayoutState; +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getLookaheadLayoutPending$ui_release()Z +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getLookaheadMeasurePending$ui_release()Z +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getLookaheadPassDelegate$ui_release()Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$LookaheadPassDelegate; +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getMeasurePassDelegate$ui_release()Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate; +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getMeasurePending$ui_release()Z +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getOuterCoordinator()Landroidx/compose/ui/node/NodeCoordinator; +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->getWidth$ui_release()I +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->invalidateParentData()V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->isOutMostLookaheadRoot(Landroidx/compose/ui/node/LayoutNode;)Z +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->markChildrenDirty()V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->markLayoutPending$ui_release()V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->markMeasurePending$ui_release()V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->onCoordinatesUsed()V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->performMeasure-BRTryo0(J)V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->resetAlignmentLines()V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->setCoordinatesAccessedDuringModifierPlacement(Z)V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->setCoordinatesAccessedDuringPlacement(Z)V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate;->updateParentData()V +Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$LookaheadPassDelegate; +Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate; +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;)V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->access$checkChildrenPlaceOrderForUpdates(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;)V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->access$clearPlaceOrder(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;)V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->checkChildrenPlaceOrderForUpdates()V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->clearPlaceOrder()V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->forEachChildAlignmentLinesOwner(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getAlignmentLines()Landroidx/compose/ui/node/AlignmentLines; +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getChildDelegates$ui_release()Ljava/util/List; +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getInnerCoordinator()Landroidx/compose/ui/node/NodeCoordinator; +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getLastConstraints-DWUhwKw()Landroidx/compose/ui/unit/Constraints; +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getMeasuredByParent$ui_release()Landroidx/compose/ui/node/LayoutNode$UsageByParent; +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getMeasuredWidth()I +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getParentAlignmentLinesOwner()Landroidx/compose/ui/node/AlignmentLinesOwner; +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getParentData()Ljava/lang/Object; +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getPlaceOrder$ui_release()I +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->getZIndex$ui_release()F +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->invalidateIntrinsicsParent(Z)V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->invalidateParentData()V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->isPlaced()Z +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->layoutChildren()V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->markNodeAndSubtreeAsPlaced()V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->markSubtreeAsNotPlaced()V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->maxIntrinsicWidth(I)I +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->measure-BRTryo0(J)Landroidx/compose/ui/layout/Placeable; +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->notifyChildrenUsingCoordinatesWhilePlacing()V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->onBeforeLayoutChildren()V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->onIntrinsicsQueried()V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->onNodeDetached()V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->onNodePlaced$ui_release()V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->placeAt-f8xVGno(JFLkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->placeOuterCoordinator-f8xVGno(JFLkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->remeasure-BRTryo0(J)Z +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->replace()V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->setChildDelegatesDirty$ui_release(Z)V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->setMeasuredByParent$ui_release(Landroidx/compose/ui/node/LayoutNode$UsageByParent;)V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->setPlaced$ui_release(Z)V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->trackMeasurementByParent(Landroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;->updateParentData()Z +Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$WhenMappings; +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$WhenMappings;->()V +Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$layoutChildren$1$1; +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$layoutChildren$1$1;->(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate;Landroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$layoutChildren$1$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$layoutChildren$1$1;->invoke()V +Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$layoutChildren$1$1$1; +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$layoutChildren$1$1$1;->()V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$layoutChildren$1$1$1;->()V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$layoutChildren$1$1$1;->invoke(Landroidx/compose/ui/node/AlignmentLinesOwner;)V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$layoutChildren$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$layoutChildren$1$1$2; +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$layoutChildren$1$1$2;->()V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$layoutChildren$1$1$2;->()V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$layoutChildren$1$1$2;->invoke(Landroidx/compose/ui/node/AlignmentLinesOwner;)V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$layoutChildren$1$1$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$placeOuterCoordinator$1; +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$placeOuterCoordinator$1;->(Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;JF)V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$placeOuterCoordinator$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$placeOuterCoordinator$1;->invoke()V +Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$remeasure$1; +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$remeasure$1;->()V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$remeasure$1;->()V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$remeasure$1;->invoke(Landroidx/compose/ui/node/AlignmentLinesOwner;)V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$MeasurePassDelegate$remeasure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/node/LayoutNodeLayoutDelegate$performMeasure$2; +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$performMeasure$2;->(Landroidx/compose/ui/node/LayoutNodeLayoutDelegate;J)V +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$performMeasure$2;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/ui/node/LayoutNodeLayoutDelegate$performMeasure$2;->invoke()V +Landroidx/compose/ui/node/LayoutTreeConsistencyChecker; +Landroidx/compose/ui/node/LookaheadCapablePlaceable; +HSPLandroidx/compose/ui/node/LookaheadCapablePlaceable;->()V +HSPLandroidx/compose/ui/node/LookaheadCapablePlaceable;->invalidateAlignmentLinesFromPositionChange(Landroidx/compose/ui/node/NodeCoordinator;)V +HSPLandroidx/compose/ui/node/LookaheadCapablePlaceable;->isPlacingForAlignment$ui_release()Z +HSPLandroidx/compose/ui/node/LookaheadCapablePlaceable;->isShallowPlacing$ui_release()Z +HSPLandroidx/compose/ui/node/LookaheadCapablePlaceable;->setPlacingForAlignment$ui_release(Z)V +Landroidx/compose/ui/node/LookaheadDelegate; +Landroidx/compose/ui/node/MeasureAndLayoutDelegate; +HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->(Landroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->access$getRoot$p(Landroidx/compose/ui/node/MeasureAndLayoutDelegate;)Landroidx/compose/ui/node/LayoutNode; +HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->access$remeasureAndRelayoutIfNeeded(Landroidx/compose/ui/node/MeasureAndLayoutDelegate;Landroidx/compose/ui/node/LayoutNode;Z)Z +HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->callOnLayoutCompletedListeners()V +HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->dispatchOnPositionedCallbacks$default(Landroidx/compose/ui/node/MeasureAndLayoutDelegate;ZILjava/lang/Object;)V +HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->dispatchOnPositionedCallbacks(Z)V +HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->doLookaheadRemeasure-sdFAvZA(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/unit/Constraints;)Z +HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->doRemeasure-sdFAvZA(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/unit/Constraints;)Z +HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->forceMeasureTheSubtree(Landroidx/compose/ui/node/LayoutNode;Z)V +HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->getCanAffectParent(Landroidx/compose/ui/node/LayoutNode;)Z +HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->getHasPendingMeasureOrLayout()Z +HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->getHasPendingOnPositionedCallbacks()Z +HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->getMeasureAffectsParent(Landroidx/compose/ui/node/LayoutNode;)Z +HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->measureAndLayout(Lkotlin/jvm/functions/Function0;)Z +HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->measureAndLayout-0kLqBqw(Landroidx/compose/ui/node/LayoutNode;J)V +HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->measureOnly()V +HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->onNodeDetached(Landroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->recurseRemeasure(Landroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->remeasureAndRelayoutIfNeeded$default(Landroidx/compose/ui/node/MeasureAndLayoutDelegate;Landroidx/compose/ui/node/LayoutNode;ZILjava/lang/Object;)Z +HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->remeasureAndRelayoutIfNeeded(Landroidx/compose/ui/node/LayoutNode;Z)Z +HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->remeasureOnly(Landroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->requestOnPositionedCallback(Landroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->requestRelayout$default(Landroidx/compose/ui/node/MeasureAndLayoutDelegate;Landroidx/compose/ui/node/LayoutNode;ZILjava/lang/Object;)Z +HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->requestRelayout(Landroidx/compose/ui/node/LayoutNode;Z)Z +HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->requestRemeasure$default(Landroidx/compose/ui/node/MeasureAndLayoutDelegate;Landroidx/compose/ui/node/LayoutNode;ZILjava/lang/Object;)Z +HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->requestRemeasure(Landroidx/compose/ui/node/LayoutNode;Z)Z +HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate;->updateRootConstraints-BRTryo0(J)V +Landroidx/compose/ui/node/MeasureAndLayoutDelegate$PostponedRequest; +Landroidx/compose/ui/node/MeasureAndLayoutDelegate$WhenMappings; +HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate$WhenMappings;->()V +Landroidx/compose/ui/node/MeasureAndLayoutDelegate$forceMeasureTheSubtree$pending$1; +HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate$forceMeasureTheSubtree$pending$1;->(Z)V +HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate$forceMeasureTheSubtree$pending$1;->invoke(Landroidx/compose/ui/node/LayoutNode;)Ljava/lang/Boolean; +HSPLandroidx/compose/ui/node/MeasureAndLayoutDelegate$forceMeasureTheSubtree$pending$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/node/MeasureScopeWithLayoutNode; +Landroidx/compose/ui/node/ModifierNodeElement; +HSPLandroidx/compose/ui/node/ModifierNodeElement;->()V +HSPLandroidx/compose/ui/node/ModifierNodeElement;->()V +Landroidx/compose/ui/node/MutableVectorWithMutationTracking; +HSPLandroidx/compose/ui/node/MutableVectorWithMutationTracking;->(Landroidx/compose/runtime/collection/MutableVector;Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/ui/node/MutableVectorWithMutationTracking;->add(ILjava/lang/Object;)V +HSPLandroidx/compose/ui/node/MutableVectorWithMutationTracking;->asList()Ljava/util/List; +HSPLandroidx/compose/ui/node/MutableVectorWithMutationTracking;->getVector()Landroidx/compose/runtime/collection/MutableVector; +HSPLandroidx/compose/ui/node/MutableVectorWithMutationTracking;->removeAt(I)Ljava/lang/Object; +Landroidx/compose/ui/node/MyersDiffKt; +HSPLandroidx/compose/ui/node/MyersDiffKt;->access$swap([III)V +HSPLandroidx/compose/ui/node/MyersDiffKt;->applyDiff(Landroidx/compose/ui/node/IntStack;Landroidx/compose/ui/node/DiffCallback;)V +HSPLandroidx/compose/ui/node/MyersDiffKt;->backward-4l5_RBY(IIIILandroidx/compose/ui/node/DiffCallback;[I[II[I)Z +HSPLandroidx/compose/ui/node/MyersDiffKt;->calculateDiff(IILandroidx/compose/ui/node/DiffCallback;)Landroidx/compose/ui/node/IntStack; +HSPLandroidx/compose/ui/node/MyersDiffKt;->executeDiff(IILandroidx/compose/ui/node/DiffCallback;)V +HSPLandroidx/compose/ui/node/MyersDiffKt;->fillSnake(IIIIZ[I)V +HSPLandroidx/compose/ui/node/MyersDiffKt;->forward-4l5_RBY(IIIILandroidx/compose/ui/node/DiffCallback;[I[II[I)Z +HSPLandroidx/compose/ui/node/MyersDiffKt;->midPoint-q5eDKzI(IIIILandroidx/compose/ui/node/DiffCallback;[I[I[I)Z +HSPLandroidx/compose/ui/node/MyersDiffKt;->swap([III)V +Landroidx/compose/ui/node/NodeChain; +HSPLandroidx/compose/ui/node/NodeChain;->(Landroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/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; +HSPLandroidx/compose/ui/node/NodeChain;->access$detachAndRemoveNode(Landroidx/compose/ui/node/NodeChain;Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/node/NodeChain;->access$getAggregateChildKindSet(Landroidx/compose/ui/node/NodeChain;)I +HSPLandroidx/compose/ui/node/NodeChain;->access$getLogger$p(Landroidx/compose/ui/node/NodeChain;)Landroidx/compose/ui/node/NodeChain$Logger; +PLandroidx/compose/ui/node/NodeChain;->access$propagateCoordinator(Landroidx/compose/ui/node/NodeChain;Landroidx/compose/ui/Modifier$Node;Landroidx/compose/ui/node/NodeCoordinator;)V +HSPLandroidx/compose/ui/node/NodeChain;->access$updateNode(Landroidx/compose/ui/node/NodeChain;Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Node;)V +HSPLandroidx/compose/ui/node/NodeChain;->createAndInsertNodeAsChild(Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/node/NodeChain;->detachAndRemoveNode(Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/node/NodeChain;->getAggregateChildKindSet()I +HSPLandroidx/compose/ui/node/NodeChain;->getDiffer(Landroidx/compose/ui/Modifier$Node;ILandroidx/compose/runtime/collection/MutableVector;Landroidx/compose/runtime/collection/MutableVector;Z)Landroidx/compose/ui/node/NodeChain$Differ; +HSPLandroidx/compose/ui/node/NodeChain;->getHead$ui_release()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/node/NodeChain;->getInnerCoordinator$ui_release()Landroidx/compose/ui/node/InnerNodeCoordinator; +HSPLandroidx/compose/ui/node/NodeChain;->getOuterCoordinator$ui_release()Landroidx/compose/ui/node/NodeCoordinator; +HSPLandroidx/compose/ui/node/NodeChain;->getTail$ui_release()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/node/NodeChain;->has$ui_release(I)Z +HSPLandroidx/compose/ui/node/NodeChain;->has-H91voCI$ui_release(I)Z +HSPLandroidx/compose/ui/node/NodeChain;->insertChild(Landroidx/compose/ui/Modifier$Node;Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/node/NodeChain;->markAsAttached()V +HSPLandroidx/compose/ui/node/NodeChain;->markAsDetached$ui_release()V +HSPLandroidx/compose/ui/node/NodeChain;->padChain()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/node/NodeChain;->propagateCoordinator(Landroidx/compose/ui/Modifier$Node;Landroidx/compose/ui/node/NodeCoordinator;)V +HSPLandroidx/compose/ui/node/NodeChain;->removeNode(Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/node/NodeChain;->resetState$ui_release()V +HSPLandroidx/compose/ui/node/NodeChain;->runAttachLifecycle()V +HSPLandroidx/compose/ui/node/NodeChain;->runDetachLifecycle$ui_release()V +HSPLandroidx/compose/ui/node/NodeChain;->structuralUpdate(ILandroidx/compose/runtime/collection/MutableVector;Landroidx/compose/runtime/collection/MutableVector;Landroidx/compose/ui/Modifier$Node;Z)V +HSPLandroidx/compose/ui/node/NodeChain;->syncAggregateChildKindSet()V +HSPLandroidx/compose/ui/node/NodeChain;->syncCoordinators()V +HSPLandroidx/compose/ui/node/NodeChain;->trimChain(Landroidx/compose/ui/Modifier$Node;)Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/node/NodeChain;->updateFrom$ui_release(Landroidx/compose/ui/Modifier;)V +HSPLandroidx/compose/ui/node/NodeChain;->updateNode(Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Node;)V +Landroidx/compose/ui/node/NodeChain$Differ; +HSPLandroidx/compose/ui/node/NodeChain$Differ;->(Landroidx/compose/ui/node/NodeChain;Landroidx/compose/ui/Modifier$Node;ILandroidx/compose/runtime/collection/MutableVector;Landroidx/compose/runtime/collection/MutableVector;Z)V +HSPLandroidx/compose/ui/node/NodeChain$Differ;->areItemsTheSame(II)Z +HSPLandroidx/compose/ui/node/NodeChain$Differ;->insert(I)V +HSPLandroidx/compose/ui/node/NodeChain$Differ;->remove(II)V +HSPLandroidx/compose/ui/node/NodeChain$Differ;->same(II)V +HSPLandroidx/compose/ui/node/NodeChain$Differ;->setAfter(Landroidx/compose/runtime/collection/MutableVector;)V +HSPLandroidx/compose/ui/node/NodeChain$Differ;->setBefore(Landroidx/compose/runtime/collection/MutableVector;)V +HSPLandroidx/compose/ui/node/NodeChain$Differ;->setNode(Landroidx/compose/ui/Modifier$Node;)V +HSPLandroidx/compose/ui/node/NodeChain$Differ;->setOffset(I)V +HSPLandroidx/compose/ui/node/NodeChain$Differ;->setShouldAttachOnInsert(Z)V +Landroidx/compose/ui/node/NodeChain$Logger; +Landroidx/compose/ui/node/NodeChainKt; +HSPLandroidx/compose/ui/node/NodeChainKt;->()V +HSPLandroidx/compose/ui/node/NodeChainKt;->access$fillVector(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/collection/MutableVector;)Landroidx/compose/runtime/collection/MutableVector; +HSPLandroidx/compose/ui/node/NodeChainKt;->access$getSentinelHead$p()Landroidx/compose/ui/node/NodeChainKt$SentinelHead$1; +HSPLandroidx/compose/ui/node/NodeChainKt;->access$updateUnsafe(Landroidx/compose/ui/node/ModifierNodeElement;Landroidx/compose/ui/Modifier$Node;)V +HSPLandroidx/compose/ui/node/NodeChainKt;->actionForModifiers(Landroidx/compose/ui/Modifier$Element;Landroidx/compose/ui/Modifier$Element;)I +HSPLandroidx/compose/ui/node/NodeChainKt;->fillVector(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/collection/MutableVector;)Landroidx/compose/runtime/collection/MutableVector; +HSPLandroidx/compose/ui/node/NodeChainKt;->updateUnsafe(Landroidx/compose/ui/node/ModifierNodeElement;Landroidx/compose/ui/Modifier$Node;)V +Landroidx/compose/ui/node/NodeChainKt$SentinelHead$1; +HSPLandroidx/compose/ui/node/NodeChainKt$SentinelHead$1;->()V +Landroidx/compose/ui/node/NodeChainKt$fillVector$1; +HSPLandroidx/compose/ui/node/NodeChainKt$fillVector$1;->(Landroidx/compose/runtime/collection/MutableVector;)V +Landroidx/compose/ui/node/NodeCoordinator; +HSPLandroidx/compose/ui/node/NodeCoordinator;->()V +HSPLandroidx/compose/ui/node/NodeCoordinator;->(Landroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/node/NodeCoordinator;->access$drawContainedDrawModifiers(Landroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/graphics/Canvas;)V +HSPLandroidx/compose/ui/node/NodeCoordinator;->access$getGraphicsLayerScope$cp()Landroidx/compose/ui/graphics/ReusableGraphicsLayerScope; +HSPLandroidx/compose/ui/node/NodeCoordinator;->access$getLayerPositionalProperties$p(Landroidx/compose/ui/node/NodeCoordinator;)Landroidx/compose/ui/node/LayerPositionalProperties; +HSPLandroidx/compose/ui/node/NodeCoordinator;->access$getPointerInputSource$cp()Landroidx/compose/ui/node/NodeCoordinator$HitTestSource; +HSPLandroidx/compose/ui/node/NodeCoordinator;->access$getTmpLayerPositionalProperties$cp()Landroidx/compose/ui/node/LayerPositionalProperties; +HSPLandroidx/compose/ui/node/NodeCoordinator;->access$headNode(Landroidx/compose/ui/node/NodeCoordinator;Z)Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/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 +HSPLandroidx/compose/ui/node/NodeCoordinator;->access$setMeasurementConstraints-BRTryo0(Landroidx/compose/ui/node/NodeCoordinator;J)V +HSPLandroidx/compose/ui/node/NodeCoordinator;->ancestorToLocal(Landroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/geometry/MutableRect;Z)V +HSPLandroidx/compose/ui/node/NodeCoordinator;->ancestorToLocal-R5De75A(Landroidx/compose/ui/node/NodeCoordinator;J)J +HSPLandroidx/compose/ui/node/NodeCoordinator;->calculateMinimumTouchTargetPadding-E7KxVPU(J)J +HSPLandroidx/compose/ui/node/NodeCoordinator;->distanceInMinimumTouchTarget-tz77jQw(JJ)F +HSPLandroidx/compose/ui/node/NodeCoordinator;->draw(Landroidx/compose/ui/graphics/Canvas;)V +HSPLandroidx/compose/ui/node/NodeCoordinator;->drawContainedDrawModifiers(Landroidx/compose/ui/graphics/Canvas;)V +HSPLandroidx/compose/ui/node/NodeCoordinator;->findCommonAncestor$ui_release(Landroidx/compose/ui/node/NodeCoordinator;)Landroidx/compose/ui/node/NodeCoordinator; +HSPLandroidx/compose/ui/node/NodeCoordinator;->fromParentPosition-MK-Hz9U(J)J +HSPLandroidx/compose/ui/node/NodeCoordinator;->getAlignmentLinesOwner()Landroidx/compose/ui/node/AlignmentLinesOwner; +HSPLandroidx/compose/ui/node/NodeCoordinator;->getCoordinates()Landroidx/compose/ui/layout/LayoutCoordinates; +HSPLandroidx/compose/ui/node/NodeCoordinator;->getDensity()F +HSPLandroidx/compose/ui/node/NodeCoordinator;->getFontScale()F +HSPLandroidx/compose/ui/node/NodeCoordinator;->getLastLayerDrawingWasSkipped$ui_release()Z +HSPLandroidx/compose/ui/node/NodeCoordinator;->getLastMeasurementConstraints-msEJaDk$ui_release()J +HSPLandroidx/compose/ui/node/NodeCoordinator;->getLayer()Landroidx/compose/ui/node/OwnedLayer; +HSPLandroidx/compose/ui/node/NodeCoordinator;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection; +HSPLandroidx/compose/ui/node/NodeCoordinator;->getLayoutNode()Landroidx/compose/ui/node/LayoutNode; +HSPLandroidx/compose/ui/node/NodeCoordinator;->getMeasureResult$ui_release()Landroidx/compose/ui/layout/MeasureResult; +HSPLandroidx/compose/ui/node/NodeCoordinator;->getMinimumTouchTargetSize-NH-jbRc()J +HSPLandroidx/compose/ui/node/NodeCoordinator;->getParent()Landroidx/compose/ui/node/LookaheadCapablePlaceable; +HSPLandroidx/compose/ui/node/NodeCoordinator;->getParentData()Ljava/lang/Object; +HSPLandroidx/compose/ui/node/NodeCoordinator;->getParentLayoutCoordinates()Landroidx/compose/ui/layout/LayoutCoordinates; +HSPLandroidx/compose/ui/node/NodeCoordinator;->getPosition-nOcc-ac()J +HSPLandroidx/compose/ui/node/NodeCoordinator;->getRectCache()Landroidx/compose/ui/geometry/MutableRect; +HSPLandroidx/compose/ui/node/NodeCoordinator;->getSize-YbymL2g()J +HSPLandroidx/compose/ui/node/NodeCoordinator;->getSnapshotObserver()Landroidx/compose/ui/node/OwnerSnapshotObserver; +HSPLandroidx/compose/ui/node/NodeCoordinator;->getWrapped$ui_release()Landroidx/compose/ui/node/NodeCoordinator; +HSPLandroidx/compose/ui/node/NodeCoordinator;->getWrappedBy$ui_release()Landroidx/compose/ui/node/NodeCoordinator; +HSPLandroidx/compose/ui/node/NodeCoordinator;->getZIndex()F +HSPLandroidx/compose/ui/node/NodeCoordinator;->hasNode-H91voCI(I)Z +HSPLandroidx/compose/ui/node/NodeCoordinator;->head-H91voCI(I)Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/node/NodeCoordinator;->headNode(Z)Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/node/NodeCoordinator;->hit-1hIXUjU(Landroidx/compose/ui/Modifier$Node;Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V +HSPLandroidx/compose/ui/node/NodeCoordinator;->hitTest-YqVAtuI(Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V +HSPLandroidx/compose/ui/node/NodeCoordinator;->hitTestChild-YqVAtuI(Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V +HSPLandroidx/compose/ui/node/NodeCoordinator;->invalidateLayer()V +HSPLandroidx/compose/ui/node/NodeCoordinator;->invoke(Landroidx/compose/ui/graphics/Canvas;)V +HSPLandroidx/compose/ui/node/NodeCoordinator;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/ui/node/NodeCoordinator;->isAttached()Z +HSPLandroidx/compose/ui/node/NodeCoordinator;->isPointerInBounds-k-4lQ0M(J)Z +HSPLandroidx/compose/ui/node/NodeCoordinator;->isTransparent()Z +HSPLandroidx/compose/ui/node/NodeCoordinator;->isValidOwnerScope()Z +HSPLandroidx/compose/ui/node/NodeCoordinator;->localBoundingBoxOf(Landroidx/compose/ui/layout/LayoutCoordinates;Z)Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/ui/node/NodeCoordinator;->localPositionOf-R5De75A(Landroidx/compose/ui/layout/LayoutCoordinates;J)J +HSPLandroidx/compose/ui/node/NodeCoordinator;->localToRoot-MK-Hz9U(J)J +HSPLandroidx/compose/ui/node/NodeCoordinator;->localToWindow-MK-Hz9U(J)J +HSPLandroidx/compose/ui/node/NodeCoordinator;->offsetFromEdge-MK-Hz9U(J)J +HSPLandroidx/compose/ui/node/NodeCoordinator;->onCoordinatesUsed$ui_release()V +HSPLandroidx/compose/ui/node/NodeCoordinator;->onLayoutModifierNodeChanged()V +HSPLandroidx/compose/ui/node/NodeCoordinator;->onLayoutNodeAttach()V +HSPLandroidx/compose/ui/node/NodeCoordinator;->onMeasureResultChanged(II)V +HSPLandroidx/compose/ui/node/NodeCoordinator;->onMeasured()V +HSPLandroidx/compose/ui/node/NodeCoordinator;->onPlaced()V +HSPLandroidx/compose/ui/node/NodeCoordinator;->onRelease()V +HSPLandroidx/compose/ui/node/NodeCoordinator;->placeAt-f8xVGno(JFLkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/node/NodeCoordinator;->placeSelf-f8xVGno(JFLkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/node/NodeCoordinator;->placeSelfApparentToRealOffset-f8xVGno(JFLkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/node/NodeCoordinator;->rectInParent$ui_release$default(Landroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/geometry/MutableRect;ZZILjava/lang/Object;)V +HSPLandroidx/compose/ui/node/NodeCoordinator;->rectInParent$ui_release(Landroidx/compose/ui/geometry/MutableRect;ZZ)V +HSPLandroidx/compose/ui/node/NodeCoordinator;->setMeasureResult$ui_release(Landroidx/compose/ui/layout/MeasureResult;)V +HSPLandroidx/compose/ui/node/NodeCoordinator;->setPosition--gyyYBs(J)V +HSPLandroidx/compose/ui/node/NodeCoordinator;->setWrapped$ui_release(Landroidx/compose/ui/node/NodeCoordinator;)V +HSPLandroidx/compose/ui/node/NodeCoordinator;->setWrappedBy$ui_release(Landroidx/compose/ui/node/NodeCoordinator;)V +HSPLandroidx/compose/ui/node/NodeCoordinator;->shouldSharePointerInputWithSiblings()Z +HSPLandroidx/compose/ui/node/NodeCoordinator;->toCoordinator(Landroidx/compose/ui/layout/LayoutCoordinates;)Landroidx/compose/ui/node/NodeCoordinator; +HSPLandroidx/compose/ui/node/NodeCoordinator;->toParentPosition-MK-Hz9U(J)J +HSPLandroidx/compose/ui/node/NodeCoordinator;->touchBoundsInRoot()Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/ui/node/NodeCoordinator;->updateLayerBlock$default(Landroidx/compose/ui/node/NodeCoordinator;Lkotlin/jvm/functions/Function1;ZILjava/lang/Object;)V +HSPLandroidx/compose/ui/node/NodeCoordinator;->updateLayerBlock(Lkotlin/jvm/functions/Function1;Z)V +HSPLandroidx/compose/ui/node/NodeCoordinator;->updateLayerParameters$default(Landroidx/compose/ui/node/NodeCoordinator;ZILjava/lang/Object;)V +HSPLandroidx/compose/ui/node/NodeCoordinator;->updateLayerParameters(Z)V +HSPLandroidx/compose/ui/node/NodeCoordinator;->withinLayerBounds-k-4lQ0M(J)Z +Landroidx/compose/ui/node/NodeCoordinator$Companion; +HSPLandroidx/compose/ui/node/NodeCoordinator$Companion;->()V +HSPLandroidx/compose/ui/node/NodeCoordinator$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/node/NodeCoordinator$Companion;->getPointerInputSource()Landroidx/compose/ui/node/NodeCoordinator$HitTestSource; +Landroidx/compose/ui/node/NodeCoordinator$Companion$PointerInputSource$1; +HSPLandroidx/compose/ui/node/NodeCoordinator$Companion$PointerInputSource$1;->()V +HSPLandroidx/compose/ui/node/NodeCoordinator$Companion$PointerInputSource$1;->childHitTest-YqVAtuI(Landroidx/compose/ui/node/LayoutNode;JLandroidx/compose/ui/node/HitTestResult;ZZ)V +HSPLandroidx/compose/ui/node/NodeCoordinator$Companion$PointerInputSource$1;->entityType-OLwlOKw()I +HSPLandroidx/compose/ui/node/NodeCoordinator$Companion$PointerInputSource$1;->shouldHitTestChildren(Landroidx/compose/ui/node/LayoutNode;)Z +Landroidx/compose/ui/node/NodeCoordinator$Companion$SemanticsSource$1; +HSPLandroidx/compose/ui/node/NodeCoordinator$Companion$SemanticsSource$1;->()V +Landroidx/compose/ui/node/NodeCoordinator$Companion$onCommitAffectingLayer$1; +HSPLandroidx/compose/ui/node/NodeCoordinator$Companion$onCommitAffectingLayer$1;->()V +HSPLandroidx/compose/ui/node/NodeCoordinator$Companion$onCommitAffectingLayer$1;->()V +HSPLandroidx/compose/ui/node/NodeCoordinator$Companion$onCommitAffectingLayer$1;->invoke(Landroidx/compose/ui/node/NodeCoordinator;)V +HSPLandroidx/compose/ui/node/NodeCoordinator$Companion$onCommitAffectingLayer$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/node/NodeCoordinator$Companion$onCommitAffectingLayerParams$1; +HSPLandroidx/compose/ui/node/NodeCoordinator$Companion$onCommitAffectingLayerParams$1;->()V +HSPLandroidx/compose/ui/node/NodeCoordinator$Companion$onCommitAffectingLayerParams$1;->()V +HSPLandroidx/compose/ui/node/NodeCoordinator$Companion$onCommitAffectingLayerParams$1;->invoke(Landroidx/compose/ui/node/NodeCoordinator;)V +HSPLandroidx/compose/ui/node/NodeCoordinator$Companion$onCommitAffectingLayerParams$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/node/NodeCoordinator$HitTestSource; +Landroidx/compose/ui/node/NodeCoordinator$hit$1; +HSPLandroidx/compose/ui/node/NodeCoordinator$hit$1;->(Landroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/Modifier$Node;Landroidx/compose/ui/node/NodeCoordinator$HitTestSource;JLandroidx/compose/ui/node/HitTestResult;ZZ)V +HSPLandroidx/compose/ui/node/NodeCoordinator$hit$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/ui/node/NodeCoordinator$hit$1;->invoke()V +Landroidx/compose/ui/node/NodeCoordinator$invalidateParentLayer$1; +HSPLandroidx/compose/ui/node/NodeCoordinator$invalidateParentLayer$1;->(Landroidx/compose/ui/node/NodeCoordinator;)V +HSPLandroidx/compose/ui/node/NodeCoordinator$invalidateParentLayer$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/ui/node/NodeCoordinator$invalidateParentLayer$1;->invoke()V +Landroidx/compose/ui/node/NodeCoordinator$invoke$1; +HSPLandroidx/compose/ui/node/NodeCoordinator$invoke$1;->(Landroidx/compose/ui/node/NodeCoordinator;Landroidx/compose/ui/graphics/Canvas;)V +HSPLandroidx/compose/ui/node/NodeCoordinator$invoke$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/ui/node/NodeCoordinator$invoke$1;->invoke()V +Landroidx/compose/ui/node/NodeCoordinator$updateLayerParameters$1; +HSPLandroidx/compose/ui/node/NodeCoordinator$updateLayerParameters$1;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/node/NodeCoordinator$updateLayerParameters$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/ui/node/NodeCoordinator$updateLayerParameters$1;->invoke()V +Landroidx/compose/ui/node/NodeCoordinatorKt; +HSPLandroidx/compose/ui/node/NodeCoordinatorKt;->access$nextUntil-hw7D004(Landroidx/compose/ui/node/DelegatableNode;II)Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/node/NodeCoordinatorKt;->nextUntil-hw7D004(Landroidx/compose/ui/node/DelegatableNode;II)Landroidx/compose/ui/Modifier$Node; +Landroidx/compose/ui/node/NodeKind; +HSPLandroidx/compose/ui/node/NodeKind;->constructor-impl(I)I +Landroidx/compose/ui/node/NodeKindKt; +HSPLandroidx/compose/ui/node/NodeKindKt;->autoInvalidateInsertedNode(Landroidx/compose/ui/Modifier$Node;)V +HSPLandroidx/compose/ui/node/NodeKindKt;->autoInvalidateNodeIncludingDelegates(Landroidx/compose/ui/Modifier$Node;II)V +HSPLandroidx/compose/ui/node/NodeKindKt;->autoInvalidateNodeSelf(Landroidx/compose/ui/Modifier$Node;II)V +HSPLandroidx/compose/ui/node/NodeKindKt;->autoInvalidateRemovedNode(Landroidx/compose/ui/Modifier$Node;)V +HSPLandroidx/compose/ui/node/NodeKindKt;->autoInvalidateUpdatedNode(Landroidx/compose/ui/Modifier$Node;)V +HSPLandroidx/compose/ui/node/NodeKindKt;->calculateNodeKindSetFrom(Landroidx/compose/ui/Modifier$Element;)I +HSPLandroidx/compose/ui/node/NodeKindKt;->calculateNodeKindSetFrom(Landroidx/compose/ui/Modifier$Node;)I +HSPLandroidx/compose/ui/node/NodeKindKt;->calculateNodeKindSetFromIncludingDelegates(Landroidx/compose/ui/Modifier$Node;)I +HSPLandroidx/compose/ui/node/NodeKindKt;->getIncludeSelfInTraversal-H91voCI(I)Z +HSPLandroidx/compose/ui/node/NodeKindKt;->specifiesCanFocusProperty(Landroidx/compose/ui/focus/FocusPropertiesModifierNode;)Z +Landroidx/compose/ui/node/NodeMeasuringIntrinsics; +HSPLandroidx/compose/ui/node/NodeMeasuringIntrinsics;->()V +HSPLandroidx/compose/ui/node/NodeMeasuringIntrinsics;->()V +HSPLandroidx/compose/ui/node/NodeMeasuringIntrinsics;->maxWidth$ui_release(Landroidx/compose/ui/node/NodeMeasuringIntrinsics$MeasureBlock;Landroidx/compose/ui/layout/IntrinsicMeasureScope;Landroidx/compose/ui/layout/IntrinsicMeasurable;I)I +Landroidx/compose/ui/node/NodeMeasuringIntrinsics$DefaultIntrinsicMeasurable; +HSPLandroidx/compose/ui/node/NodeMeasuringIntrinsics$DefaultIntrinsicMeasurable;->(Landroidx/compose/ui/layout/IntrinsicMeasurable;Landroidx/compose/ui/node/NodeMeasuringIntrinsics$IntrinsicMinMax;Landroidx/compose/ui/node/NodeMeasuringIntrinsics$IntrinsicWidthHeight;)V +HSPLandroidx/compose/ui/node/NodeMeasuringIntrinsics$DefaultIntrinsicMeasurable;->measure-BRTryo0(J)Landroidx/compose/ui/layout/Placeable; +Landroidx/compose/ui/node/NodeMeasuringIntrinsics$EmptyPlaceable; +HSPLandroidx/compose/ui/node/NodeMeasuringIntrinsics$EmptyPlaceable;->(II)V +Landroidx/compose/ui/node/NodeMeasuringIntrinsics$IntrinsicMinMax; +HSPLandroidx/compose/ui/node/NodeMeasuringIntrinsics$IntrinsicMinMax;->$values()[Landroidx/compose/ui/node/NodeMeasuringIntrinsics$IntrinsicMinMax; +HSPLandroidx/compose/ui/node/NodeMeasuringIntrinsics$IntrinsicMinMax;->()V +HSPLandroidx/compose/ui/node/NodeMeasuringIntrinsics$IntrinsicMinMax;->(Ljava/lang/String;I)V +Landroidx/compose/ui/node/NodeMeasuringIntrinsics$IntrinsicWidthHeight; +HSPLandroidx/compose/ui/node/NodeMeasuringIntrinsics$IntrinsicWidthHeight;->$values()[Landroidx/compose/ui/node/NodeMeasuringIntrinsics$IntrinsicWidthHeight; +HSPLandroidx/compose/ui/node/NodeMeasuringIntrinsics$IntrinsicWidthHeight;->()V +HSPLandroidx/compose/ui/node/NodeMeasuringIntrinsics$IntrinsicWidthHeight;->(Ljava/lang/String;I)V +Landroidx/compose/ui/node/NodeMeasuringIntrinsics$MeasureBlock; +Landroidx/compose/ui/node/ObserverModifierNode; +Landroidx/compose/ui/node/ObserverModifierNodeKt; +HSPLandroidx/compose/ui/node/ObserverModifierNodeKt;->observeReads(Landroidx/compose/ui/Modifier$Node;Lkotlin/jvm/functions/Function0;)V +Landroidx/compose/ui/node/ObserverNodeOwnerScope; +HSPLandroidx/compose/ui/node/ObserverNodeOwnerScope;->()V +HSPLandroidx/compose/ui/node/ObserverNodeOwnerScope;->(Landroidx/compose/ui/node/ObserverModifierNode;)V +HSPLandroidx/compose/ui/node/ObserverNodeOwnerScope;->access$getOnObserveReadsChanged$cp()Lkotlin/jvm/functions/Function1; +Landroidx/compose/ui/node/ObserverNodeOwnerScope$Companion; +HSPLandroidx/compose/ui/node/ObserverNodeOwnerScope$Companion;->()V +HSPLandroidx/compose/ui/node/ObserverNodeOwnerScope$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/node/ObserverNodeOwnerScope$Companion;->getOnObserveReadsChanged$ui_release()Lkotlin/jvm/functions/Function1; +Landroidx/compose/ui/node/ObserverNodeOwnerScope$Companion$OnObserveReadsChanged$1; +HSPLandroidx/compose/ui/node/ObserverNodeOwnerScope$Companion$OnObserveReadsChanged$1;->()V +HSPLandroidx/compose/ui/node/ObserverNodeOwnerScope$Companion$OnObserveReadsChanged$1;->()V +Landroidx/compose/ui/node/OnPositionedDispatcher; +HSPLandroidx/compose/ui/node/OnPositionedDispatcher;->()V +HSPLandroidx/compose/ui/node/OnPositionedDispatcher;->()V +HSPLandroidx/compose/ui/node/OnPositionedDispatcher;->dispatch()V +HSPLandroidx/compose/ui/node/OnPositionedDispatcher;->dispatchHierarchy(Landroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/node/OnPositionedDispatcher;->isNotEmpty()Z +HSPLandroidx/compose/ui/node/OnPositionedDispatcher;->onNodePositioned(Landroidx/compose/ui/node/LayoutNode;)V +Landroidx/compose/ui/node/OnPositionedDispatcher$Companion; +HSPLandroidx/compose/ui/node/OnPositionedDispatcher$Companion;->()V +HSPLandroidx/compose/ui/node/OnPositionedDispatcher$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/node/OnPositionedDispatcher$Companion$DepthComparator; +HSPLandroidx/compose/ui/node/OnPositionedDispatcher$Companion$DepthComparator;->()V +HSPLandroidx/compose/ui/node/OnPositionedDispatcher$Companion$DepthComparator;->()V +HSPLandroidx/compose/ui/node/OnPositionedDispatcher$Companion$DepthComparator;->compare(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/node/LayoutNode;)I +HSPLandroidx/compose/ui/node/OnPositionedDispatcher$Companion$DepthComparator;->compare(Ljava/lang/Object;Ljava/lang/Object;)I +Landroidx/compose/ui/node/OwnedLayer; +Landroidx/compose/ui/node/Owner; +HSPLandroidx/compose/ui/node/Owner;->()V +HSPLandroidx/compose/ui/node/Owner;->forceMeasureTheSubtree$default(Landroidx/compose/ui/node/Owner;Landroidx/compose/ui/node/LayoutNode;ZILjava/lang/Object;)V +HSPLandroidx/compose/ui/node/Owner;->measureAndLayout$default(Landroidx/compose/ui/node/Owner;ZILjava/lang/Object;)V +HSPLandroidx/compose/ui/node/Owner;->onRequestMeasure$default(Landroidx/compose/ui/node/Owner;Landroidx/compose/ui/node/LayoutNode;ZZZILjava/lang/Object;)V +HSPLandroidx/compose/ui/node/Owner;->onRequestRelayout$default(Landroidx/compose/ui/node/Owner;Landroidx/compose/ui/node/LayoutNode;ZZILjava/lang/Object;)V +Landroidx/compose/ui/node/Owner$Companion; +HSPLandroidx/compose/ui/node/Owner$Companion;->()V +HSPLandroidx/compose/ui/node/Owner$Companion;->()V +HSPLandroidx/compose/ui/node/Owner$Companion;->getEnableExtraAssertions()Z +Landroidx/compose/ui/node/Owner$OnLayoutCompletedListener; +Landroidx/compose/ui/node/OwnerScope; +Landroidx/compose/ui/node/OwnerSnapshotObserver; +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver;->clearInvalidObservations$ui_release()V +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver;->observeLayoutModifierSnapshotReads$ui_release(Landroidx/compose/ui/node/LayoutNode;ZLkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver;->observeLayoutSnapshotReads$ui_release(Landroidx/compose/ui/node/LayoutNode;ZLkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver;->observeMeasureSnapshotReads$ui_release(Landroidx/compose/ui/node/LayoutNode;ZLkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver;->observeReads$ui_release(Landroidx/compose/ui/node/OwnerScope;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver;->observeSemanticsReads$ui_release(Landroidx/compose/ui/node/LayoutNode;Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver;->startObserving$ui_release()V +Landroidx/compose/ui/node/OwnerSnapshotObserver$clearInvalidObservations$1; +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$clearInvalidObservations$1;->()V +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$clearInvalidObservations$1;->()V +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$clearInvalidObservations$1;->invoke(Ljava/lang/Object;)Ljava/lang/Boolean; +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$clearInvalidObservations$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLayout$1; +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLayout$1;->()V +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLayout$1;->()V +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLayout$1;->invoke(Landroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLayout$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLayoutModifier$1; +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLayoutModifier$1;->()V +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLayoutModifier$1;->()V +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLayoutModifier$1;->invoke(Landroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLayoutModifier$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLayoutModifierInLookahead$1; +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLayoutModifierInLookahead$1;->()V +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLayoutModifierInLookahead$1;->()V +Landroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLookaheadLayout$1; +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLookaheadLayout$1;->()V +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLookaheadLayout$1;->()V +Landroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLookaheadMeasure$1; +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLookaheadMeasure$1;->()V +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingLookaheadMeasure$1;->()V +Landroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingMeasure$1; +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingMeasure$1;->()V +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingMeasure$1;->()V +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingMeasure$1;->invoke(Landroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingMeasure$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingSemantics$1; +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingSemantics$1;->()V +HSPLandroidx/compose/ui/node/OwnerSnapshotObserver$onCommitAffectingSemantics$1;->()V +Landroidx/compose/ui/node/ParentDataModifierNode; +Landroidx/compose/ui/node/ParentDataModifierNodeKt; +HSPLandroidx/compose/ui/node/ParentDataModifierNodeKt;->invalidateParentData(Landroidx/compose/ui/node/ParentDataModifierNode;)V +Landroidx/compose/ui/node/PointerInputModifierNode; +HSPLandroidx/compose/ui/node/PointerInputModifierNode;->sharePointerInputWithSiblings()Z +Landroidx/compose/ui/node/PointerInputModifierNodeKt; +HSPLandroidx/compose/ui/node/PointerInputModifierNodeKt;->getLayoutCoordinates(Landroidx/compose/ui/node/PointerInputModifierNode;)Landroidx/compose/ui/layout/LayoutCoordinates; +Landroidx/compose/ui/node/RootForTest; +Landroidx/compose/ui/node/SemanticsModifierNode; +HSPLandroidx/compose/ui/node/SemanticsModifierNode;->getShouldClearDescendantSemantics()Z +HSPLandroidx/compose/ui/node/SemanticsModifierNode;->getShouldMergeDescendantSemantics()Z +Landroidx/compose/ui/node/SemanticsModifierNodeKt; +HSPLandroidx/compose/ui/node/SemanticsModifierNodeKt;->getUseMinimumTouchTarget(Landroidx/compose/ui/semantics/SemanticsConfiguration;)Z +HSPLandroidx/compose/ui/node/SemanticsModifierNodeKt;->invalidateSemantics(Landroidx/compose/ui/node/SemanticsModifierNode;)V +HSPLandroidx/compose/ui/node/SemanticsModifierNodeKt;->touchBoundsInRoot(Landroidx/compose/ui/Modifier$Node;Z)Landroidx/compose/ui/geometry/Rect; +Landroidx/compose/ui/node/Snake; +HSPLandroidx/compose/ui/node/Snake;->addDiagonalToStack-impl([ILandroidx/compose/ui/node/IntStack;)V +HSPLandroidx/compose/ui/node/Snake;->constructor-impl([I)[I +HSPLandroidx/compose/ui/node/Snake;->getDiagonalSize-impl([I)I +HSPLandroidx/compose/ui/node/Snake;->getEndX-impl([I)I +HSPLandroidx/compose/ui/node/Snake;->getEndY-impl([I)I +HSPLandroidx/compose/ui/node/Snake;->getHasAdditionOrRemoval-impl([I)Z +HSPLandroidx/compose/ui/node/Snake;->getReverse-impl([I)Z +HSPLandroidx/compose/ui/node/Snake;->getStartX-impl([I)I +HSPLandroidx/compose/ui/node/Snake;->getStartY-impl([I)I +HSPLandroidx/compose/ui/node/Snake;->isAddition-impl([I)Z +Landroidx/compose/ui/node/TailModifierNode; +HSPLandroidx/compose/ui/node/TailModifierNode;->()V +HSPLandroidx/compose/ui/node/TailModifierNode;->getAttachHasBeenRun()Z +HSPLandroidx/compose/ui/node/TailModifierNode;->onAttach()V +HSPLandroidx/compose/ui/node/TailModifierNode;->onDetach()V +Landroidx/compose/ui/node/TreeSet; +HSPLandroidx/compose/ui/node/TreeSet;->(Ljava/util/Comparator;)V +Landroidx/compose/ui/node/UiApplier; +HSPLandroidx/compose/ui/node/UiApplier;->(Landroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/node/UiApplier;->insertBottomUp(ILandroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/node/UiApplier;->insertBottomUp(ILjava/lang/Object;)V +HSPLandroidx/compose/ui/node/UiApplier;->insertTopDown(ILandroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/node/UiApplier;->insertTopDown(ILjava/lang/Object;)V +HSPLandroidx/compose/ui/node/UiApplier;->onEndChanges()V +HSPLandroidx/compose/ui/node/UiApplier;->remove(II)V +Landroidx/compose/ui/platform/AbstractComposeView; +HSPLandroidx/compose/ui/platform/AbstractComposeView;->()V +HSPLandroidx/compose/ui/platform/AbstractComposeView;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V +HSPLandroidx/compose/ui/platform/AbstractComposeView;->addView(Landroid/view/View;ILandroid/view/ViewGroup$LayoutParams;)V +HSPLandroidx/compose/ui/platform/AbstractComposeView;->addView(Landroid/view/View;Landroid/view/ViewGroup$LayoutParams;)V +HSPLandroidx/compose/ui/platform/AbstractComposeView;->cacheIfAlive(Landroidx/compose/runtime/CompositionContext;)Landroidx/compose/runtime/CompositionContext; +HSPLandroidx/compose/ui/platform/AbstractComposeView;->checkAddView()V +HSPLandroidx/compose/ui/platform/AbstractComposeView;->ensureCompositionCreated()V +HSPLandroidx/compose/ui/platform/AbstractComposeView;->internalOnLayout$ui_release(ZIIII)V +HSPLandroidx/compose/ui/platform/AbstractComposeView;->internalOnMeasure$ui_release(II)V +HSPLandroidx/compose/ui/platform/AbstractComposeView;->isAlive(Landroidx/compose/runtime/CompositionContext;)Z +HSPLandroidx/compose/ui/platform/AbstractComposeView;->onAttachedToWindow()V +HSPLandroidx/compose/ui/platform/AbstractComposeView;->onLayout(ZIIII)V +HSPLandroidx/compose/ui/platform/AbstractComposeView;->onMeasure(II)V +HSPLandroidx/compose/ui/platform/AbstractComposeView;->onRtlPropertiesChanged(I)V +HSPLandroidx/compose/ui/platform/AbstractComposeView;->resolveParentCompositionContext()Landroidx/compose/runtime/CompositionContext; +HSPLandroidx/compose/ui/platform/AbstractComposeView;->setParentCompositionContext(Landroidx/compose/runtime/CompositionContext;)V +HSPLandroidx/compose/ui/platform/AbstractComposeView;->setParentContext(Landroidx/compose/runtime/CompositionContext;)V +HSPLandroidx/compose/ui/platform/AbstractComposeView;->setPreviousAttachedWindowToken(Landroid/os/IBinder;)V +Landroidx/compose/ui/platform/AbstractComposeView$ensureCompositionCreated$1; +HSPLandroidx/compose/ui/platform/AbstractComposeView$ensureCompositionCreated$1;->(Landroidx/compose/ui/platform/AbstractComposeView;)V +HSPLandroidx/compose/ui/platform/AbstractComposeView$ensureCompositionCreated$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/ui/platform/AbstractComposeView$ensureCompositionCreated$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/platform/AccessibilityManager; +Landroidx/compose/ui/platform/AccessibilityNodeInfoVerificationHelperMethods; +HSPLandroidx/compose/ui/platform/AccessibilityNodeInfoVerificationHelperMethods;->()V +HSPLandroidx/compose/ui/platform/AccessibilityNodeInfoVerificationHelperMethods;->()V +HSPLandroidx/compose/ui/platform/AccessibilityNodeInfoVerificationHelperMethods;->setAvailableExtraData(Landroid/view/accessibility/AccessibilityNodeInfo;Ljava/util/List;)V +Landroidx/compose/ui/platform/AndroidAccessibilityManager; +HSPLandroidx/compose/ui/platform/AndroidAccessibilityManager;->()V +HSPLandroidx/compose/ui/platform/AndroidAccessibilityManager;->(Landroid/content/Context;)V +Landroidx/compose/ui/platform/AndroidAccessibilityManager$Companion; +HSPLandroidx/compose/ui/platform/AndroidAccessibilityManager$Companion;->()V +HSPLandroidx/compose/ui/platform/AndroidAccessibilityManager$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/platform/AndroidClipboardManager; +HSPLandroidx/compose/ui/platform/AndroidClipboardManager;->(Landroid/content/ClipboardManager;)V +HSPLandroidx/compose/ui/platform/AndroidClipboardManager;->(Landroid/content/Context;)V +HSPLandroidx/compose/ui/platform/AndroidClipboardManager;->hasText()Z +Landroidx/compose/ui/platform/AndroidComposeView; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->$r8$lambda$6rnsioIDxAVR319ScBkOteeoeiE(Landroidx/compose/ui/platform/AndroidComposeView;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->$r8$lambda$TvhWqMihl4JwF42Odovn0ewO6fk(Landroidx/compose/ui/platform/AndroidComposeView;Z)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->()V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->(Landroid/content/Context;Lkotlin/coroutines/CoroutineContext;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->access$getGetBooleanMethod$cp()Ljava/lang/reflect/Method; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->access$getPreviousMotionEvent$p(Landroidx/compose/ui/platform/AndroidComposeView;)Landroid/view/MotionEvent; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->access$getSystemPropertiesClass$cp()Ljava/lang/Class; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->access$get_viewTreeOwners(Landroidx/compose/ui/platform/AndroidComposeView;)Landroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->access$setGetBooleanMethod$cp(Ljava/lang/reflect/Method;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->access$setSystemPropertiesClass$cp(Ljava/lang/Class;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->autofillSupported()Z +HSPLandroidx/compose/ui/platform/AndroidComposeView;->boundsUpdatesEventLoop(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->calculatePositionInWindow-MK-Hz9U(J)J +HSPLandroidx/compose/ui/platform/AndroidComposeView;->childSizeCanAffectParentSize(Landroidx/compose/ui/node/LayoutNode;)Z +HSPLandroidx/compose/ui/platform/AndroidComposeView;->clearChildInvalidObservations(Landroid/view/ViewGroup;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->convertMeasureSpec-I7RO_PI(I)J +HSPLandroidx/compose/ui/platform/AndroidComposeView;->createLayer(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)Landroidx/compose/ui/node/OwnedLayer; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->dispatchDraw(Landroid/graphics/Canvas;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->dispatchTouchEvent(Landroid/view/MotionEvent;)Z +HSPLandroidx/compose/ui/platform/AndroidComposeView;->forceMeasureTheSubtree(Landroidx/compose/ui/node/LayoutNode;Z)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->getAccessibilityManager()Landroidx/compose/ui/platform/AccessibilityManager; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->getAccessibilityManager()Landroidx/compose/ui/platform/AndroidAccessibilityManager; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->getAndroidViewsHandler$ui_release()Landroidx/compose/ui/platform/AndroidViewsHandler; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->getAutofill()Landroidx/compose/ui/autofill/Autofill; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->getAutofillTree()Landroidx/compose/ui/autofill/AutofillTree; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->getClipboardManager()Landroidx/compose/ui/platform/AndroidClipboardManager; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->getClipboardManager()Landroidx/compose/ui/platform/ClipboardManager; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->getDensity()Landroidx/compose/ui/unit/Density; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->getFocusOwner()Landroidx/compose/ui/focus/FocusOwner; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->getFontFamilyResolver()Landroidx/compose/ui/text/font/FontFamily$Resolver; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->getFontLoader()Landroidx/compose/ui/text/font/Font$ResourceLoader; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->getFontWeightAdjustmentCompat(Landroid/content/res/Configuration;)I +HSPLandroidx/compose/ui/platform/AndroidComposeView;->getHapticFeedBack()Landroidx/compose/ui/hapticfeedback/HapticFeedback; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->getInputModeManager()Landroidx/compose/ui/input/InputModeManager; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->getModifierLocalManager()Landroidx/compose/ui/modifier/ModifierLocalManager; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->getPlatformTextInputPluginRegistry()Landroidx/compose/ui/text/input/PlatformTextInputPluginRegistry; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->getPlatformTextInputPluginRegistry()Landroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->getPointerIconService()Landroidx/compose/ui/input/pointer/PointerIconService; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->getRoot()Landroidx/compose/ui/node/LayoutNode; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->getSemanticsOwner()Landroidx/compose/ui/semantics/SemanticsOwner; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->getSharedDrawScope()Landroidx/compose/ui/node/LayoutNodeDrawScope; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->getShowLayoutBounds()Z +HSPLandroidx/compose/ui/platform/AndroidComposeView;->getSnapshotObserver()Landroidx/compose/ui/node/OwnerSnapshotObserver; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->getTextInputService()Landroidx/compose/ui/text/input/TextInputService; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->getTextToolbar()Landroidx/compose/ui/platform/TextToolbar; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->getView()Landroid/view/View; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->getViewConfiguration()Landroidx/compose/ui/platform/ViewConfiguration; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->getViewTreeOwners()Landroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->getWindowInfo()Landroidx/compose/ui/platform/WindowInfo; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->get_viewTreeOwners()Landroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->globalLayoutListener$lambda$1(Landroidx/compose/ui/platform/AndroidComposeView;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->handleMotionEvent-8iAsVTc(Landroid/view/MotionEvent;)I +HSPLandroidx/compose/ui/platform/AndroidComposeView;->hasChangedDevices(Landroid/view/MotionEvent;Landroid/view/MotionEvent;)Z +HSPLandroidx/compose/ui/platform/AndroidComposeView;->invalidateLayers(Landroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->invalidateLayoutNodeMeasurement(Landroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->isBadMotionEvent(Landroid/view/MotionEvent;)Z +HSPLandroidx/compose/ui/platform/AndroidComposeView;->isInBounds(Landroid/view/MotionEvent;)Z +HSPLandroidx/compose/ui/platform/AndroidComposeView;->localToScreen-MK-Hz9U(J)J +HSPLandroidx/compose/ui/platform/AndroidComposeView;->measureAndLayout(Z)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->measureAndLayout-0kLqBqw(Landroidx/compose/ui/node/LayoutNode;J)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->notifyLayerIsDirty$ui_release(Landroidx/compose/ui/node/OwnedLayer;Z)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->onAttach(Landroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->onAttachedToWindow()V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->onCheckIsTextEditor()Z +HSPLandroidx/compose/ui/platform/AndroidComposeView;->onCreateInputConnection(Landroid/view/inputmethod/EditorInfo;)Landroid/view/inputmethod/InputConnection; +HSPLandroidx/compose/ui/platform/AndroidComposeView;->onDetach(Landroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->onDraw(Landroid/graphics/Canvas;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->onEndApplyChanges()V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->onFocusChanged(ZILandroid/graphics/Rect;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->onLayout(ZIIII)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->onLayoutChange(Landroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->onMeasure(II)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->onProvideAutofillVirtualStructure(Landroid/view/ViewStructure;I)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->onRequestMeasure(Landroidx/compose/ui/node/LayoutNode;ZZZ)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->onRequestRelayout(Landroidx/compose/ui/node/LayoutNode;ZZ)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->onResume(Landroidx/lifecycle/LifecycleOwner;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->onRtlPropertiesChanged(I)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->onSemanticsChange()V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->onWindowFocusChanged(Z)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->pack-ZIaKswc(II)J +HSPLandroidx/compose/ui/platform/AndroidComposeView;->recalculateWindowPosition()V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->recalculateWindowPosition(Landroid/view/MotionEvent;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->recalculateWindowViewTransforms()V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->recycle$ui_release(Landroidx/compose/ui/node/OwnedLayer;)Z +HSPLandroidx/compose/ui/platform/AndroidComposeView;->registerOnEndApplyChangesListener(Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->requestClearInvalidObservations()V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->requestOnPositionedCallback(Landroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->scheduleMeasureAndLayout$default(Landroidx/compose/ui/platform/AndroidComposeView;Landroidx/compose/ui/node/LayoutNode;ILjava/lang/Object;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->scheduleMeasureAndLayout(Landroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->screenToLocal-MK-Hz9U(J)J +HSPLandroidx/compose/ui/platform/AndroidComposeView;->sendMotionEvent-8iAsVTc(Landroid/view/MotionEvent;)I +HSPLandroidx/compose/ui/platform/AndroidComposeView;->setConfigurationChangeObserver(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->setLayoutDirection(Landroidx/compose/ui/unit/LayoutDirection;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->setOnViewTreeOwnersAvailable(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->setShowLayoutBounds(Z)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->set_viewTreeOwners(Landroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->touchModeChangeListener$lambda$3(Landroidx/compose/ui/platform/AndroidComposeView;Z)V +HSPLandroidx/compose/ui/platform/AndroidComposeView;->updatePositionCacheAndDispatch()V +Landroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda1; +HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda1;->(Landroidx/compose/ui/platform/AndroidComposeView;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda1;->onGlobalLayout()V +Landroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda2; +HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda2;->(Landroidx/compose/ui/platform/AndroidComposeView;)V +Landroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda3; +HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda3;->(Landroidx/compose/ui/platform/AndroidComposeView;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda3;->onTouchModeChanged(Z)V +Landroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda4; +HSPLandroidx/compose/ui/platform/AndroidComposeView$$ExternalSyntheticLambda4;->(Landroidx/compose/ui/platform/AndroidComposeView;)V +Landroidx/compose/ui/platform/AndroidComposeView$Companion; +HSPLandroidx/compose/ui/platform/AndroidComposeView$Companion;->()V +HSPLandroidx/compose/ui/platform/AndroidComposeView$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView$Companion;->access$getIsShowingLayoutBounds(Landroidx/compose/ui/platform/AndroidComposeView$Companion;)Z +HSPLandroidx/compose/ui/platform/AndroidComposeView$Companion;->getIsShowingLayoutBounds()Z +Landroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners; +HSPLandroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;->()V +HSPLandroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;->(Landroidx/lifecycle/LifecycleOwner;Landroidx/savedstate/SavedStateRegistryOwner;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;->getLifecycleOwner()Landroidx/lifecycle/LifecycleOwner; +HSPLandroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;->getSavedStateRegistryOwner()Landroidx/savedstate/SavedStateRegistryOwner; +Landroidx/compose/ui/platform/AndroidComposeView$_inputModeManager$1; +HSPLandroidx/compose/ui/platform/AndroidComposeView$_inputModeManager$1;->(Landroidx/compose/ui/platform/AndroidComposeView;)V +Landroidx/compose/ui/platform/AndroidComposeView$configurationChangeObserver$1; +HSPLandroidx/compose/ui/platform/AndroidComposeView$configurationChangeObserver$1;->()V +HSPLandroidx/compose/ui/platform/AndroidComposeView$configurationChangeObserver$1;->()V +Landroidx/compose/ui/platform/AndroidComposeView$focusOwner$1; +HSPLandroidx/compose/ui/platform/AndroidComposeView$focusOwner$1;->(Landroidx/compose/ui/platform/AndroidComposeView;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView$focusOwner$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/ui/platform/AndroidComposeView$focusOwner$1;->invoke(Lkotlin/jvm/functions/Function0;)V +Landroidx/compose/ui/platform/AndroidComposeView$keyInputModifier$1; +HSPLandroidx/compose/ui/platform/AndroidComposeView$keyInputModifier$1;->(Landroidx/compose/ui/platform/AndroidComposeView;)V +Landroidx/compose/ui/platform/AndroidComposeView$platformTextInputPluginRegistry$1; +HSPLandroidx/compose/ui/platform/AndroidComposeView$platformTextInputPluginRegistry$1;->(Landroidx/compose/ui/platform/AndroidComposeView;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView$platformTextInputPluginRegistry$1;->invoke(Landroidx/compose/ui/text/input/PlatformTextInputPlugin;Landroidx/compose/ui/text/input/PlatformTextInput;)Landroidx/compose/ui/text/input/PlatformTextInputAdapter; +HSPLandroidx/compose/ui/platform/AndroidComposeView$platformTextInputPluginRegistry$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/platform/AndroidComposeView$pointerIconService$1; +HSPLandroidx/compose/ui/platform/AndroidComposeView$pointerIconService$1;->(Landroidx/compose/ui/platform/AndroidComposeView;)V +Landroidx/compose/ui/platform/AndroidComposeView$resendMotionEventOnLayout$1; +HSPLandroidx/compose/ui/platform/AndroidComposeView$resendMotionEventOnLayout$1;->(Landroidx/compose/ui/platform/AndroidComposeView;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView$resendMotionEventOnLayout$1;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/ui/platform/AndroidComposeView$resendMotionEventOnLayout$1;->invoke()V +Landroidx/compose/ui/platform/AndroidComposeView$resendMotionEventRunnable$1; +HSPLandroidx/compose/ui/platform/AndroidComposeView$resendMotionEventRunnable$1;->(Landroidx/compose/ui/platform/AndroidComposeView;)V +Landroidx/compose/ui/platform/AndroidComposeView$rotaryInputModifier$1; +HSPLandroidx/compose/ui/platform/AndroidComposeView$rotaryInputModifier$1;->()V +HSPLandroidx/compose/ui/platform/AndroidComposeView$rotaryInputModifier$1;->()V +Landroidx/compose/ui/platform/AndroidComposeView$snapshotObserver$1; +HSPLandroidx/compose/ui/platform/AndroidComposeView$snapshotObserver$1;->$r8$lambda$fxmMOjfIK0OrAcx22ga9_XhotFQ(Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView$snapshotObserver$1;->(Landroidx/compose/ui/platform/AndroidComposeView;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView$snapshotObserver$1;->invoke$lambda$0(Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView$snapshotObserver$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/ui/platform/AndroidComposeView$snapshotObserver$1;->invoke(Lkotlin/jvm/functions/Function0;)V +Landroidx/compose/ui/platform/AndroidComposeView$snapshotObserver$1$$ExternalSyntheticLambda0; +HSPLandroidx/compose/ui/platform/AndroidComposeView$snapshotObserver$1$$ExternalSyntheticLambda0;->run()V +Landroidx/compose/ui/platform/AndroidComposeView$viewTreeOwners$2; +HSPLandroidx/compose/ui/platform/AndroidComposeView$viewTreeOwners$2;->(Landroidx/compose/ui/platform/AndroidComposeView;)V +HSPLandroidx/compose/ui/platform/AndroidComposeView$viewTreeOwners$2;->invoke()Landroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners; +HSPLandroidx/compose/ui/platform/AndroidComposeView$viewTreeOwners$2;->invoke()Ljava/lang/Object; +Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->()V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->(Landroidx/compose/ui/platform/AndroidComposeView;)V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->access$createNodeInfo(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;I)Landroid/view/accessibility/AccessibilityNodeInfo; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->access$getContentCaptureSessionCompat(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;Landroid/view/View;)Landroidx/compose/ui/platform/coreshims/ContentCaptureSessionCompat; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->access$performActionHelper(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;IILandroid/os/Bundle;)Z +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->addExtraDataToAccessibilityNodeInfoHelper(ILandroid/view/accessibility/AccessibilityNodeInfo;Ljava/lang/String;Landroid/os/Bundle;)V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->boundsUpdatesEventLoop(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->createNodeInfo(I)Landroid/view/accessibility/AccessibilityNodeInfo; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getAccessibilityManager$ui_release()Landroid/view/accessibility/AccessibilityManager; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getAccessibilityNodeProvider(Landroid/view/View;)Landroidx/core/view/accessibility/AccessibilityNodeProviderCompat; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getAccessibilitySelectionEnd(Landroidx/compose/ui/semantics/SemanticsNode;)I +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getAccessibilitySelectionStart(Landroidx/compose/ui/semantics/SemanticsNode;)I +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getContentCaptureSessionCompat(Landroid/view/View;)Landroidx/compose/ui/platform/coreshims/ContentCaptureSessionCompat; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getCurrentSemanticsNodes$ui_release()Ljava/util/Map; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getEnabledStateListener$ui_release()Landroid/view/accessibility/AccessibilityManager$AccessibilityStateChangeListener; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getInfoIsCheckable(Landroidx/compose/ui/semantics/SemanticsNode;)Z +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getInfoStateDescriptionOrNull(Landroidx/compose/ui/semantics/SemanticsNode;)Ljava/lang/String; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getInfoText(Landroidx/compose/ui/semantics/SemanticsNode;)Landroid/text/SpannableString; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getIterableTextForAccessibility(Landroidx/compose/ui/semantics/SemanticsNode;)Ljava/lang/String; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getTextForTextField(Landroidx/compose/ui/semantics/SemanticsConfiguration;)Landroidx/compose/ui/text/AnnotatedString; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->getTouchExplorationStateListener$ui_release()Landroid/view/accessibility/AccessibilityManager$TouchExplorationStateChangeListener; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->isEnabled$ui_release()Z +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->isEnabledForAccessibility()Z +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->isEnabledForContentCapture()Z +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->isScreenReaderFocusable(Landroidx/compose/ui/semantics/SemanticsNode;)Z +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->onLayoutChange$ui_release(Landroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->onSemanticsChange$ui_release()V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->performActionHelper(IILandroid/os/Bundle;)Z +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->populateAccessibilityNodeInfoProperties$canScrollBackward(Landroidx/compose/ui/semantics/ScrollAxisRange;)Z +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->populateAccessibilityNodeInfoProperties$canScrollForward(Landroidx/compose/ui/semantics/ScrollAxisRange;)Z +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->populateAccessibilityNodeInfoProperties(ILandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;Landroidx/compose/ui/semantics/SemanticsNode;)V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->semanticComparator(Z)Ljava/util/Comparator; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->setContentCaptureSession$ui_release(Landroidx/compose/ui/platform/coreshims/ContentCaptureSessionCompat;)V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->setContentInvalid(Landroidx/compose/ui/semantics/SemanticsNode;Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat;)V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->setIsCheckable(Landroidx/compose/ui/semantics/SemanticsNode;Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat;)V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->setStateDescription(Landroidx/compose/ui/semantics/SemanticsNode;Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat;)V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->setText(Landroidx/compose/ui/semantics/SemanticsNode;Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat;)V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->setTraversalValues()V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->sortByGeometryGroupings$placedEntryRowOverlaps(Ljava/util/List;Landroidx/compose/ui/semantics/SemanticsNode;)Z +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->sortByGeometryGroupings(ZLjava/util/List;Ljava/util/Map;)Ljava/util/List; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->subtreeSortedByGeometryGrouping$depthFirstSearch(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;Ljava/util/List;Ljava/util/Map;ZLandroidx/compose/ui/semantics/SemanticsNode;)V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->subtreeSortedByGeometryGrouping(ZLjava/util/List;)Ljava/util/List; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;->trimToSize(Ljava/lang/CharSequence;I)Ljava/lang/CharSequence; +Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda0; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda0;->(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)V +Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda1; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda1;->(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)V +Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda2; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$$ExternalSyntheticLambda2;->(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)V +Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$1; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$1;->(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$1;->onViewAttachedToWindow(Landroid/view/View;)V +Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$Api24Impl; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$Api24Impl;->()V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$Api24Impl;->()V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$Api24Impl;->addSetProgressAction(Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat;Landroidx/compose/ui/semantics/SemanticsNode;)V +Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$Api29Impl; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$Api29Impl;->()V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$Api29Impl;->()V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$Api29Impl;->addPageActions(Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat;Landroidx/compose/ui/semantics/SemanticsNode;)V +Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$Companion; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$Companion;->()V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$MyNodeProvider; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$MyNodeProvider;->(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$MyNodeProvider;->createAccessibilityNodeInfo(I)Landroid/view/accessibility/AccessibilityNodeInfo; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$MyNodeProvider;->performAction(IILandroid/os/Bundle;)Z +Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$SemanticsNodeCopy; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$SemanticsNodeCopy;->(Landroidx/compose/ui/semantics/SemanticsNode;Ljava/util/Map;)V +Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$boundsUpdatesEventLoop$1; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$boundsUpdatesEventLoop$1;->(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;Lkotlin/coroutines/Continuation;)V +Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$semanticComparator$$inlined$thenBy$1; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$semanticComparator$$inlined$thenBy$1;->(Ljava/util/Comparator;Ljava/util/Comparator;)V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$semanticComparator$$inlined$thenBy$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I +Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$semanticComparator$$inlined$thenBy$2; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$semanticComparator$$inlined$thenBy$2;->(Ljava/util/Comparator;)V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$semanticComparator$$inlined$thenBy$2;->compare(Ljava/lang/Object;Ljava/lang/Object;)I +Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$semanticComparator$comparator$1; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$semanticComparator$comparator$1;->()V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$semanticComparator$comparator$1;->()V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$semanticComparator$comparator$1;->invoke(Landroidx/compose/ui/semantics/SemanticsNode;)Ljava/lang/Comparable; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$semanticComparator$comparator$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$semanticComparator$comparator$2; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$semanticComparator$comparator$2;->()V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$semanticComparator$comparator$2;->()V +Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$semanticComparator$comparator$3; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$semanticComparator$comparator$3;->()V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$semanticComparator$comparator$3;->()V +Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$semanticComparator$comparator$4; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$semanticComparator$comparator$4;->()V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$semanticComparator$comparator$4;->()V +Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$sendScrollEventIfNeededLambda$1; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$sendScrollEventIfNeededLambda$1;->(Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat;)V +Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$sortByGeometryGroupings$$inlined$compareBy$1; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$sortByGeometryGroupings$$inlined$compareBy$1;->()V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$sortByGeometryGroupings$$inlined$compareBy$1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I +Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$sortByGeometryGroupings$1; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$sortByGeometryGroupings$1;->()V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$sortByGeometryGroupings$1;->()V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$sortByGeometryGroupings$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$sortByGeometryGroupings$1;->invoke(Lkotlin/Pair;)Ljava/lang/Comparable; +Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$sortByGeometryGroupings$2; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$sortByGeometryGroupings$2;->()V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$sortByGeometryGroupings$2;->()V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$sortByGeometryGroupings$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat$sortByGeometryGroupings$2;->invoke(Lkotlin/Pair;)Ljava/lang/Comparable; +Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->access$enabled(Landroidx/compose/ui/semantics/SemanticsNode;)Z +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->access$excludeLineAndPageGranularities(Landroidx/compose/ui/semantics/SemanticsNode;)Z +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->access$getGetTraversalIndex(Landroidx/compose/ui/semantics/SemanticsNode;)F +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->access$getInfoContentDescriptionOrNull(Landroidx/compose/ui/semantics/SemanticsNode;)Ljava/lang/String; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->access$isPassword(Landroidx/compose/ui/semantics/SemanticsNode;)Z +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->access$isRtl(Landroidx/compose/ui/semantics/SemanticsNode;)Z +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->access$isTextField(Landroidx/compose/ui/semantics/SemanticsNode;)Z +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->access$isTraversalGroup(Landroidx/compose/ui/semantics/SemanticsNode;)Ljava/lang/Boolean; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->access$isVisible(Landroidx/compose/ui/semantics/SemanticsNode;)Z +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->access$overlaps(Landroidx/compose/ui/platform/OpenEndRange;Landroidx/compose/ui/platform/OpenEndRange;)Z +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->access$toLegacyClassName-V4PA4sw(I)Ljava/lang/String; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->enabled(Landroidx/compose/ui/semantics/SemanticsNode;)Z +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->excludeLineAndPageGranularities(Landroidx/compose/ui/semantics/SemanticsNode;)Z +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->findClosestParentNode(Landroidx/compose/ui/node/LayoutNode;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/node/LayoutNode; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->getAllUncoveredSemanticsNodesToMap$findAllSemanticNodesRecursive(Landroid/graphics/Region;Landroidx/compose/ui/semantics/SemanticsNode;Ljava/util/Map;Landroidx/compose/ui/semantics/SemanticsNode;)V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->getAllUncoveredSemanticsNodesToMap(Landroidx/compose/ui/semantics/SemanticsOwner;)Ljava/util/Map; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->getGetTraversalIndex(Landroidx/compose/ui/semantics/SemanticsNode;)F +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->getInfoContentDescriptionOrNull(Landroidx/compose/ui/semantics/SemanticsNode;)Ljava/lang/String; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->isPassword(Landroidx/compose/ui/semantics/SemanticsNode;)Z +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->isRtl(Landroidx/compose/ui/semantics/SemanticsNode;)Z +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->isTextField(Landroidx/compose/ui/semantics/SemanticsNode;)Z +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->isTraversalGroup(Landroidx/compose/ui/semantics/SemanticsNode;)Ljava/lang/Boolean; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->isVisible(Landroidx/compose/ui/semantics/SemanticsNode;)Z +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->overlaps(Landroidx/compose/ui/platform/OpenEndRange;Landroidx/compose/ui/platform/OpenEndRange;)Z +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->rangeUntil(FF)Landroidx/compose/ui/platform/OpenEndRange; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->semanticsIdToView(Landroidx/compose/ui/platform/AndroidViewsHandler;I)Landroid/view/View; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt;->toLegacyClassName-V4PA4sw(I)Ljava/lang/String; +Landroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt$excludeLineAndPageGranularities$ancestor$1; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt$excludeLineAndPageGranularities$ancestor$1;->()V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt$excludeLineAndPageGranularities$ancestor$1;->()V +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt$excludeLineAndPageGranularities$ancestor$1;->invoke(Landroidx/compose/ui/node/LayoutNode;)Ljava/lang/Boolean; +HSPLandroidx/compose/ui/platform/AndroidComposeViewAccessibilityDelegateCompat_androidKt$excludeLineAndPageGranularities$ancestor$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/platform/AndroidComposeViewForceDarkModeQ; +HSPLandroidx/compose/ui/platform/AndroidComposeViewForceDarkModeQ;->()V +HSPLandroidx/compose/ui/platform/AndroidComposeViewForceDarkModeQ;->()V +HSPLandroidx/compose/ui/platform/AndroidComposeViewForceDarkModeQ;->disallowForceDark(Landroid/view/View;)V +Landroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsO; +HSPLandroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsO;->()V +HSPLandroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsO;->()V +HSPLandroidx/compose/ui/platform/AndroidComposeViewVerificationHelperMethodsO;->focusable(Landroid/view/View;IZ)V +Landroidx/compose/ui/platform/AndroidComposeView_androidKt; +HSPLandroidx/compose/ui/platform/AndroidComposeView_androidKt;->access$layoutDirectionFromInt(I)Landroidx/compose/ui/unit/LayoutDirection; +HSPLandroidx/compose/ui/platform/AndroidComposeView_androidKt;->getLocaleLayoutDirection(Landroid/content/res/Configuration;)Landroidx/compose/ui/unit/LayoutDirection; +HSPLandroidx/compose/ui/platform/AndroidComposeView_androidKt;->layoutDirectionFromInt(I)Landroidx/compose/ui/unit/LayoutDirection; +Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt; +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;->()V +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;->ProvideAndroidCompositionLocals$lambda$1(Landroidx/compose/runtime/MutableState;)Landroid/content/res/Configuration; +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;->ProvideAndroidCompositionLocals(Landroidx/compose/ui/platform/AndroidComposeView;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;->getLocalConfiguration()Landroidx/compose/runtime/ProvidableCompositionLocal; +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;->getLocalContext()Landroidx/compose/runtime/ProvidableCompositionLocal; +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;->getLocalLifecycleOwner()Landroidx/compose/runtime/ProvidableCompositionLocal; +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;->getLocalView()Landroidx/compose/runtime/ProvidableCompositionLocal; +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt;->obtainImageVectorCache(Landroid/content/Context;Landroid/content/res/Configuration;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/res/ImageVectorCache; +Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalConfiguration$1; +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalConfiguration$1;->()V +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalConfiguration$1;->()V +Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalContext$1; +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalContext$1;->()V +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalContext$1;->()V +Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalImageVectorCache$1; +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalImageVectorCache$1;->()V +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalImageVectorCache$1;->()V +Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalLifecycleOwner$1; +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalLifecycleOwner$1;->()V +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalLifecycleOwner$1;->()V +Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalSavedStateRegistryOwner$1; +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalSavedStateRegistryOwner$1;->()V +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalSavedStateRegistryOwner$1;->()V +Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalView$1; +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalView$1;->()V +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$LocalView$1;->()V +Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$1$1; +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$1$1;->(Landroidx/compose/runtime/MutableState;)V +Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$2; +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$2;->(Landroidx/compose/ui/platform/DisposableSaveableStateRegistry;)V +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$2;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult; +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$2$invoke$$inlined$onDispose$1; +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$2$invoke$$inlined$onDispose$1;->(Landroidx/compose/ui/platform/DisposableSaveableStateRegistry;)V +Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$3; +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$3;->(Landroidx/compose/ui/platform/AndroidComposeView;Landroidx/compose/ui/platform/AndroidUriHandler;Lkotlin/jvm/functions/Function2;I)V +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$3;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$4; +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$ProvideAndroidCompositionLocals$4;->(Landroidx/compose/ui/platform/AndroidComposeView;Lkotlin/jvm/functions/Function2;I)V +Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$1; +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$1;->(Landroid/content/Context;Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$callbacks$1$1;)V +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult; +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$1$invoke$$inlined$onDispose$1; +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$1$invoke$$inlined$onDispose$1;->(Landroid/content/Context;Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$callbacks$1$1;)V +Landroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$callbacks$1$1; +HSPLandroidx/compose/ui/platform/AndroidCompositionLocals_androidKt$obtainImageVectorCache$callbacks$1$1;->(Landroid/content/res/Configuration;Landroidx/compose/ui/res/ImageVectorCache;)V +Landroidx/compose/ui/platform/AndroidFontResourceLoader; +HSPLandroidx/compose/ui/platform/AndroidFontResourceLoader;->(Landroid/content/Context;)V +Landroidx/compose/ui/platform/AndroidTextToolbar; +HSPLandroidx/compose/ui/platform/AndroidTextToolbar;->(Landroid/view/View;)V +HSPLandroidx/compose/ui/platform/AndroidTextToolbar;->getStatus()Landroidx/compose/ui/platform/TextToolbarStatus; +Landroidx/compose/ui/platform/AndroidTextToolbar$textActionModeCallback$1; +HSPLandroidx/compose/ui/platform/AndroidTextToolbar$textActionModeCallback$1;->(Landroidx/compose/ui/platform/AndroidTextToolbar;)V +Landroidx/compose/ui/platform/AndroidUiDispatcher; +HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->()V +HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->(Landroid/view/Choreographer;Landroid/os/Handler;)V +HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->(Landroid/view/Choreographer;Landroid/os/Handler;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->access$getHandler$p(Landroidx/compose/ui/platform/AndroidUiDispatcher;)Landroid/os/Handler; +HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->access$getLock$p(Landroidx/compose/ui/platform/AndroidUiDispatcher;)Ljava/lang/Object; +HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->access$getMain$delegate$cp()Lkotlin/Lazy; +HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->access$getToRunOnFrame$p(Landroidx/compose/ui/platform/AndroidUiDispatcher;)Ljava/util/List; +HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->access$performFrameDispatch(Landroidx/compose/ui/platform/AndroidUiDispatcher;J)V +HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->access$performTrampolineDispatch(Landroidx/compose/ui/platform/AndroidUiDispatcher;)V +PLandroidx/compose/ui/platform/AndroidUiDispatcher;->access$setScheduledFrameDispatch$p(Landroidx/compose/ui/platform/AndroidUiDispatcher;Z)V +HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->dispatch(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V +HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->getChoreographer()Landroid/view/Choreographer; +HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->getFrameClock()Landroidx/compose/runtime/MonotonicFrameClock; +HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->nextTask()Ljava/lang/Runnable; +HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->performFrameDispatch(J)V +HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->performTrampolineDispatch()V +HSPLandroidx/compose/ui/platform/AndroidUiDispatcher;->postFrameCallback$ui_release(Landroid/view/Choreographer$FrameCallback;)V +Landroidx/compose/ui/platform/AndroidUiDispatcher$Companion; +HSPLandroidx/compose/ui/platform/AndroidUiDispatcher$Companion;->()V +HSPLandroidx/compose/ui/platform/AndroidUiDispatcher$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/platform/AndroidUiDispatcher$Companion;->getCurrentThread()Lkotlin/coroutines/CoroutineContext; +HSPLandroidx/compose/ui/platform/AndroidUiDispatcher$Companion;->getMain()Lkotlin/coroutines/CoroutineContext; +Landroidx/compose/ui/platform/AndroidUiDispatcher$Companion$Main$2; +HSPLandroidx/compose/ui/platform/AndroidUiDispatcher$Companion$Main$2;->()V +HSPLandroidx/compose/ui/platform/AndroidUiDispatcher$Companion$Main$2;->()V +HSPLandroidx/compose/ui/platform/AndroidUiDispatcher$Companion$Main$2;->invoke()Ljava/lang/Object; +HSPLandroidx/compose/ui/platform/AndroidUiDispatcher$Companion$Main$2;->invoke()Lkotlin/coroutines/CoroutineContext; +Landroidx/compose/ui/platform/AndroidUiDispatcher$Companion$currentThread$1; +HSPLandroidx/compose/ui/platform/AndroidUiDispatcher$Companion$currentThread$1;->()V +Landroidx/compose/ui/platform/AndroidUiDispatcher$dispatchCallback$1; +HSPLandroidx/compose/ui/platform/AndroidUiDispatcher$dispatchCallback$1;->(Landroidx/compose/ui/platform/AndroidUiDispatcher;)V +HSPLandroidx/compose/ui/platform/AndroidUiDispatcher$dispatchCallback$1;->doFrame(J)V +HSPLandroidx/compose/ui/platform/AndroidUiDispatcher$dispatchCallback$1;->run()V +Landroidx/compose/ui/platform/AndroidUiDispatcher_androidKt; +HSPLandroidx/compose/ui/platform/AndroidUiDispatcher_androidKt;->access$isMainThread()Z +HSPLandroidx/compose/ui/platform/AndroidUiDispatcher_androidKt;->isMainThread()Z +Landroidx/compose/ui/platform/AndroidUiFrameClock; +HSPLandroidx/compose/ui/platform/AndroidUiFrameClock;->()V +HSPLandroidx/compose/ui/platform/AndroidUiFrameClock;->(Landroid/view/Choreographer;Landroidx/compose/ui/platform/AndroidUiDispatcher;)V +HSPLandroidx/compose/ui/platform/AndroidUiFrameClock;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; +HSPLandroidx/compose/ui/platform/AndroidUiFrameClock;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; +HSPLandroidx/compose/ui/platform/AndroidUiFrameClock;->getChoreographer()Landroid/view/Choreographer; +HSPLandroidx/compose/ui/platform/AndroidUiFrameClock;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext; +HSPLandroidx/compose/ui/platform/AndroidUiFrameClock;->withFrameNanos(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/compose/ui/platform/AndroidUiFrameClock$withFrameNanos$2$1; +HSPLandroidx/compose/ui/platform/AndroidUiFrameClock$withFrameNanos$2$1;->(Landroidx/compose/ui/platform/AndroidUiDispatcher;Landroid/view/Choreographer$FrameCallback;)V +Landroidx/compose/ui/platform/AndroidUiFrameClock$withFrameNanos$2$callback$1; +HSPLandroidx/compose/ui/platform/AndroidUiFrameClock$withFrameNanos$2$callback$1;->(Lkotlinx/coroutines/CancellableContinuation;Landroidx/compose/ui/platform/AndroidUiFrameClock;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/platform/AndroidUiFrameClock$withFrameNanos$2$callback$1;->doFrame(J)V +Landroidx/compose/ui/platform/AndroidUriHandler; +HSPLandroidx/compose/ui/platform/AndroidUriHandler;->()V +HSPLandroidx/compose/ui/platform/AndroidUriHandler;->(Landroid/content/Context;)V +Landroidx/compose/ui/platform/AndroidViewConfiguration; +HSPLandroidx/compose/ui/platform/AndroidViewConfiguration;->()V +HSPLandroidx/compose/ui/platform/AndroidViewConfiguration;->(Landroid/view/ViewConfiguration;)V +HSPLandroidx/compose/ui/platform/AndroidViewConfiguration;->getTouchSlop()F +Landroidx/compose/ui/platform/AndroidViewsHandler; +HSPLandroidx/compose/ui/platform/AndroidViewsHandler;->(Landroid/content/Context;)V +HSPLandroidx/compose/ui/platform/AndroidViewsHandler;->getLayoutNodeToHolder()Ljava/util/HashMap; +HSPLandroidx/compose/ui/platform/AndroidViewsHandler;->onLayout(ZIIII)V +HSPLandroidx/compose/ui/platform/AndroidViewsHandler;->onMeasure(II)V +HSPLandroidx/compose/ui/platform/AndroidViewsHandler;->requestLayout()V +Landroidx/compose/ui/platform/CalculateMatrixToWindow; +Landroidx/compose/ui/platform/CalculateMatrixToWindowApi29; +HSPLandroidx/compose/ui/platform/CalculateMatrixToWindowApi29;->()V +HSPLandroidx/compose/ui/platform/CalculateMatrixToWindowApi29;->calculateMatrixToWindow-EL8BTi8(Landroid/view/View;[F)V +Landroidx/compose/ui/platform/ClipboardManager; +Landroidx/compose/ui/platform/ComposableSingletons$Wrapper_androidKt; +HSPLandroidx/compose/ui/platform/ComposableSingletons$Wrapper_androidKt;->()V +HSPLandroidx/compose/ui/platform/ComposableSingletons$Wrapper_androidKt;->()V +HSPLandroidx/compose/ui/platform/ComposableSingletons$Wrapper_androidKt;->getLambda-1$ui_release()Lkotlin/jvm/functions/Function2; +Landroidx/compose/ui/platform/ComposableSingletons$Wrapper_androidKt$lambda-1$1; +HSPLandroidx/compose/ui/platform/ComposableSingletons$Wrapper_androidKt$lambda-1$1;->()V +HSPLandroidx/compose/ui/platform/ComposableSingletons$Wrapper_androidKt$lambda-1$1;->()V +Landroidx/compose/ui/platform/ComposeView; +HSPLandroidx/compose/ui/platform/ComposeView;->()V +HSPLandroidx/compose/ui/platform/ComposeView;->(Landroid/content/Context;Landroid/util/AttributeSet;I)V +HSPLandroidx/compose/ui/platform/ComposeView;->(Landroid/content/Context;Landroid/util/AttributeSet;IILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/platform/ComposeView;->Content(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/ui/platform/ComposeView;->getAccessibilityClassName()Ljava/lang/CharSequence; +HSPLandroidx/compose/ui/platform/ComposeView;->getShouldCreateCompositionOnAttachedToWindow()Z +HSPLandroidx/compose/ui/platform/ComposeView;->setContent(Lkotlin/jvm/functions/Function2;)V +Landroidx/compose/ui/platform/ComposeView$Content$1; +HSPLandroidx/compose/ui/platform/ComposeView$Content$1;->(Landroidx/compose/ui/platform/ComposeView;I)V +Landroidx/compose/ui/platform/CompositionLocalsKt; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt;->()V +HSPLandroidx/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 +HSPLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalAutofill()Landroidx/compose/runtime/ProvidableCompositionLocal; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalAutofillTree()Landroidx/compose/runtime/ProvidableCompositionLocal; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalClipboardManager()Landroidx/compose/runtime/ProvidableCompositionLocal; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalDensity()Landroidx/compose/runtime/ProvidableCompositionLocal; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalFocusManager()Landroidx/compose/runtime/ProvidableCompositionLocal; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalFontFamilyResolver()Landroidx/compose/runtime/ProvidableCompositionLocal; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalHapticFeedback()Landroidx/compose/runtime/ProvidableCompositionLocal; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalInputModeManager()Landroidx/compose/runtime/ProvidableCompositionLocal; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalLayoutDirection()Landroidx/compose/runtime/ProvidableCompositionLocal; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalPointerIconService()Landroidx/compose/runtime/ProvidableCompositionLocal; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalTextInputService()Landroidx/compose/runtime/ProvidableCompositionLocal; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalTextToolbar()Landroidx/compose/runtime/ProvidableCompositionLocal; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt;->getLocalViewConfiguration()Landroidx/compose/runtime/ProvidableCompositionLocal; +Landroidx/compose/ui/platform/CompositionLocalsKt$LocalAccessibilityManager$1; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalAccessibilityManager$1;->()V +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalAccessibilityManager$1;->()V +Landroidx/compose/ui/platform/CompositionLocalsKt$LocalAutofill$1; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalAutofill$1;->()V +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalAutofill$1;->()V +Landroidx/compose/ui/platform/CompositionLocalsKt$LocalAutofillTree$1; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalAutofillTree$1;->()V +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalAutofillTree$1;->()V +Landroidx/compose/ui/platform/CompositionLocalsKt$LocalClipboardManager$1; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalClipboardManager$1;->()V +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalClipboardManager$1;->()V +Landroidx/compose/ui/platform/CompositionLocalsKt$LocalDensity$1; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalDensity$1;->()V +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalDensity$1;->()V +Landroidx/compose/ui/platform/CompositionLocalsKt$LocalFocusManager$1; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalFocusManager$1;->()V +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalFocusManager$1;->()V +Landroidx/compose/ui/platform/CompositionLocalsKt$LocalFontFamilyResolver$1; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalFontFamilyResolver$1;->()V +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalFontFamilyResolver$1;->()V +Landroidx/compose/ui/platform/CompositionLocalsKt$LocalFontLoader$1; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalFontLoader$1;->()V +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalFontLoader$1;->()V +Landroidx/compose/ui/platform/CompositionLocalsKt$LocalHapticFeedback$1; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalHapticFeedback$1;->()V +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalHapticFeedback$1;->()V +Landroidx/compose/ui/platform/CompositionLocalsKt$LocalInputModeManager$1; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalInputModeManager$1;->()V +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalInputModeManager$1;->()V +Landroidx/compose/ui/platform/CompositionLocalsKt$LocalLayoutDirection$1; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalLayoutDirection$1;->()V +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalLayoutDirection$1;->()V +Landroidx/compose/ui/platform/CompositionLocalsKt$LocalPlatformTextInputPluginRegistry$1; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalPlatformTextInputPluginRegistry$1;->()V +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalPlatformTextInputPluginRegistry$1;->()V +Landroidx/compose/ui/platform/CompositionLocalsKt$LocalPointerIconService$1; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalPointerIconService$1;->()V +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalPointerIconService$1;->()V +Landroidx/compose/ui/platform/CompositionLocalsKt$LocalTextInputService$1; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalTextInputService$1;->()V +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalTextInputService$1;->()V +Landroidx/compose/ui/platform/CompositionLocalsKt$LocalTextToolbar$1; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalTextToolbar$1;->()V +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalTextToolbar$1;->()V +Landroidx/compose/ui/platform/CompositionLocalsKt$LocalUriHandler$1; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalUriHandler$1;->()V +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalUriHandler$1;->()V +Landroidx/compose/ui/platform/CompositionLocalsKt$LocalViewConfiguration$1; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalViewConfiguration$1;->()V +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalViewConfiguration$1;->()V +Landroidx/compose/ui/platform/CompositionLocalsKt$LocalWindowInfo$1; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalWindowInfo$1;->()V +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$LocalWindowInfo$1;->()V +Landroidx/compose/ui/platform/CompositionLocalsKt$ProvideCommonCompositionLocals$1; +HSPLandroidx/compose/ui/platform/CompositionLocalsKt$ProvideCommonCompositionLocals$1;->(Landroidx/compose/ui/node/Owner;Landroidx/compose/ui/platform/UriHandler;Lkotlin/jvm/functions/Function2;I)V +Landroidx/compose/ui/platform/DelegatingSoftwareKeyboardController; +HSPLandroidx/compose/ui/platform/DelegatingSoftwareKeyboardController;->(Landroidx/compose/ui/text/input/TextInputService;)V +Landroidx/compose/ui/platform/DeviceRenderNode; +Landroidx/compose/ui/platform/DisposableSaveableStateRegistry; +HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry;->(Landroidx/compose/runtime/saveable/SaveableStateRegistry;Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry;->canBeSaved(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry;->consumeRestored(Ljava/lang/String;)Ljava/lang/Object; +HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry;->registerProvider(Ljava/lang/String;Lkotlin/jvm/functions/Function0;)Landroidx/compose/runtime/saveable/SaveableStateRegistry$Entry; +Landroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt; +HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt;->()V +HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt;->DisposableSaveableStateRegistry(Landroid/view/View;Landroidx/savedstate/SavedStateRegistryOwner;)Landroidx/compose/ui/platform/DisposableSaveableStateRegistry; +HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt;->DisposableSaveableStateRegistry(Ljava/lang/String;Landroidx/savedstate/SavedStateRegistryOwner;)Landroidx/compose/ui/platform/DisposableSaveableStateRegistry; +HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt;->access$canBeSavedToBundle(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt;->canBeSavedToBundle(Ljava/lang/Object;)Z +Landroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$1; +HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$1;->(ZLandroidx/savedstate/SavedStateRegistry;Ljava/lang/String;)V +Landroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$registered$1; +HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$registered$1;->(Landroidx/compose/runtime/saveable/SaveableStateRegistry;)V +Landroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$saveableStateRegistry$1; +HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$saveableStateRegistry$1;->()V +HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$saveableStateRegistry$1;->()V +HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$saveableStateRegistry$1;->invoke(Ljava/lang/Object;)Ljava/lang/Boolean; +HSPLandroidx/compose/ui/platform/DisposableSaveableStateRegistry_androidKt$DisposableSaveableStateRegistry$saveableStateRegistry$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/platform/GlobalSnapshotManager; +HSPLandroidx/compose/ui/platform/GlobalSnapshotManager;->()V +HSPLandroidx/compose/ui/platform/GlobalSnapshotManager;->()V +HSPLandroidx/compose/ui/platform/GlobalSnapshotManager;->ensureStarted()V +Landroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$1; +HSPLandroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$1;->(Lkotlinx/coroutines/channels/Channel;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$2; +HSPLandroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$2;->(Lkotlinx/coroutines/channels/Channel;)V +HSPLandroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/ui/platform/GlobalSnapshotManager$ensureStarted$2;->invoke(Ljava/lang/Object;)V +Landroidx/compose/ui/platform/InfiniteAnimationPolicy; +HSPLandroidx/compose/ui/platform/InfiniteAnimationPolicy;->()V +Landroidx/compose/ui/platform/InfiniteAnimationPolicy$Key; +HSPLandroidx/compose/ui/platform/InfiniteAnimationPolicy$Key;->()V +HSPLandroidx/compose/ui/platform/InfiniteAnimationPolicy$Key;->()V +Landroidx/compose/ui/platform/InspectableModifier; +HSPLandroidx/compose/ui/platform/InspectableModifier;->()V +HSPLandroidx/compose/ui/platform/InspectableModifier;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/platform/InspectableModifier;->getEnd()Landroidx/compose/ui/platform/InspectableModifier$End; +Landroidx/compose/ui/platform/InspectableModifier$End; +HSPLandroidx/compose/ui/platform/InspectableModifier$End;->(Landroidx/compose/ui/platform/InspectableModifier;)V +Landroidx/compose/ui/platform/InspectableValue; +Landroidx/compose/ui/platform/InspectableValueKt; +HSPLandroidx/compose/ui/platform/InspectableValueKt;->()V +HSPLandroidx/compose/ui/platform/InspectableValueKt;->getNoInspectorInfo()Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/ui/platform/InspectableValueKt;->inspectableWrapper(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/ui/platform/InspectableValueKt;->isDebugInspectorInfoEnabled()Z +Landroidx/compose/ui/platform/InspectableValueKt$NoInspectorInfo$1; +HSPLandroidx/compose/ui/platform/InspectableValueKt$NoInspectorInfo$1;->()V +HSPLandroidx/compose/ui/platform/InspectableValueKt$NoInspectorInfo$1;->()V +Landroidx/compose/ui/platform/InspectorValueInfo; +HSPLandroidx/compose/ui/platform/InspectorValueInfo;->()V +HSPLandroidx/compose/ui/platform/InspectorValueInfo;->(Lkotlin/jvm/functions/Function1;)V +Landroidx/compose/ui/platform/InvertMatrixKt; +HSPLandroidx/compose/ui/platform/InvertMatrixKt;->invertTo-JiSxe2E([F[F)Z +Landroidx/compose/ui/platform/LayerMatrixCache; +HSPLandroidx/compose/ui/platform/LayerMatrixCache;->(Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/ui/platform/LayerMatrixCache;->calculateInverseMatrix-bWbORWo(Ljava/lang/Object;)[F +HSPLandroidx/compose/ui/platform/LayerMatrixCache;->calculateMatrix-GrdbGEg(Ljava/lang/Object;)[F +HSPLandroidx/compose/ui/platform/LayerMatrixCache;->invalidate()V +Landroidx/compose/ui/platform/LocalSoftwareKeyboardController; +HSPLandroidx/compose/ui/platform/LocalSoftwareKeyboardController;->()V +HSPLandroidx/compose/ui/platform/LocalSoftwareKeyboardController;->()V +HSPLandroidx/compose/ui/platform/LocalSoftwareKeyboardController;->delegatingController(Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/platform/SoftwareKeyboardController; +HSPLandroidx/compose/ui/platform/LocalSoftwareKeyboardController;->getCurrent(Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/platform/SoftwareKeyboardController; +Landroidx/compose/ui/platform/LocalSoftwareKeyboardController$LocalSoftwareKeyboardController$1; +HSPLandroidx/compose/ui/platform/LocalSoftwareKeyboardController$LocalSoftwareKeyboardController$1;->()V +HSPLandroidx/compose/ui/platform/LocalSoftwareKeyboardController$LocalSoftwareKeyboardController$1;->()V +HSPLandroidx/compose/ui/platform/LocalSoftwareKeyboardController$LocalSoftwareKeyboardController$1;->invoke()Landroidx/compose/ui/platform/SoftwareKeyboardController; +HSPLandroidx/compose/ui/platform/LocalSoftwareKeyboardController$LocalSoftwareKeyboardController$1;->invoke()Ljava/lang/Object; +Landroidx/compose/ui/platform/MotionDurationScaleImpl; +HSPLandroidx/compose/ui/platform/MotionDurationScaleImpl;->()V +HSPLandroidx/compose/ui/platform/MotionDurationScaleImpl;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; +HSPLandroidx/compose/ui/platform/MotionDurationScaleImpl;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; +HSPLandroidx/compose/ui/platform/MotionDurationScaleImpl;->getScaleFactor()F +HSPLandroidx/compose/ui/platform/MotionDurationScaleImpl;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext; +HSPLandroidx/compose/ui/platform/MotionDurationScaleImpl;->setScaleFactor(F)V +Landroidx/compose/ui/platform/OpenEndFloatRange; +HSPLandroidx/compose/ui/platform/OpenEndFloatRange;->(FF)V +HSPLandroidx/compose/ui/platform/OpenEndFloatRange;->getEndExclusive()Ljava/lang/Comparable; +HSPLandroidx/compose/ui/platform/OpenEndFloatRange;->getEndExclusive()Ljava/lang/Float; +HSPLandroidx/compose/ui/platform/OpenEndFloatRange;->getStart()Ljava/lang/Comparable; +HSPLandroidx/compose/ui/platform/OpenEndFloatRange;->getStart()Ljava/lang/Float; +HSPLandroidx/compose/ui/platform/OpenEndFloatRange;->isEmpty()Z +Landroidx/compose/ui/platform/OpenEndRange; +Landroidx/compose/ui/platform/OutlineResolver; +HSPLandroidx/compose/ui/platform/OutlineResolver;->(Landroidx/compose/ui/unit/Density;)V +HSPLandroidx/compose/ui/platform/OutlineResolver;->getOutline()Landroid/graphics/Outline; +HSPLandroidx/compose/ui/platform/OutlineResolver;->getOutlineClipSupported()Z +HSPLandroidx/compose/ui/platform/OutlineResolver;->isInOutline-k-4lQ0M(J)Z +HSPLandroidx/compose/ui/platform/OutlineResolver;->update(Landroidx/compose/ui/graphics/Shape;FZFLandroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/unit/Density;)Z +HSPLandroidx/compose/ui/platform/OutlineResolver;->update-uvyYCjk(J)V +HSPLandroidx/compose/ui/platform/OutlineResolver;->updateCache()V +HSPLandroidx/compose/ui/platform/OutlineResolver;->updateCacheWithPath(Landroidx/compose/ui/graphics/Path;)V +HSPLandroidx/compose/ui/platform/OutlineResolver;->updateCacheWithRect(Landroidx/compose/ui/geometry/Rect;)V +HSPLandroidx/compose/ui/platform/OutlineResolver;->updateCacheWithRoundRect(Landroidx/compose/ui/geometry/RoundRect;)V +Landroidx/compose/ui/platform/RenderNodeApi29; +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->(Landroidx/compose/ui/platform/AndroidComposeView;)V +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->discardDisplayList()V +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->drawInto(Landroid/graphics/Canvas;)V +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getAlpha()F +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getClipToBounds()Z +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getClipToOutline()Z +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getElevation()F +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getHasDisplayList()Z +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getHeight()I +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getLeft()I +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getMatrix(Landroid/graphics/Matrix;)V +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getTop()I +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->getWidth()I +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->offsetLeftAndRight(I)V +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->offsetTopAndBottom(I)V +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->record(Landroidx/compose/ui/graphics/CanvasHolder;Landroidx/compose/ui/graphics/Path;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setAlpha(F)V +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setAmbientShadowColor(I)V +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setCameraDistance(F)V +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setClipToBounds(Z)V +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setClipToOutline(Z)V +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setCompositingStrategy-aDBOjCE(I)V +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setElevation(F)V +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setHasOverlappingRendering(Z)Z +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setOutline(Landroid/graphics/Outline;)V +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setPivotX(F)V +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setPivotY(F)V +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setPosition(IIII)Z +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setRenderEffect(Landroidx/compose/ui/graphics/RenderEffect;)V +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setRotationX(F)V +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setRotationY(F)V +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setRotationZ(F)V +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setScaleX(F)V +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setScaleY(F)V +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setSpotShadowColor(I)V +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setTranslationX(F)V +HSPLandroidx/compose/ui/platform/RenderNodeApi29;->setTranslationY(F)V +Landroidx/compose/ui/platform/RenderNodeApi29VerificationHelper; +HSPLandroidx/compose/ui/platform/RenderNodeApi29VerificationHelper;->()V +HSPLandroidx/compose/ui/platform/RenderNodeApi29VerificationHelper;->()V +HSPLandroidx/compose/ui/platform/RenderNodeApi29VerificationHelper;->setRenderEffect(Landroid/graphics/RenderNode;Landroidx/compose/ui/graphics/RenderEffect;)V +Landroidx/compose/ui/platform/RenderNodeLayer; +HSPLandroidx/compose/ui/platform/RenderNodeLayer;->()V +HSPLandroidx/compose/ui/platform/RenderNodeLayer;->(Landroidx/compose/ui/platform/AndroidComposeView;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/ui/platform/RenderNodeLayer;->destroy()V +HSPLandroidx/compose/ui/platform/RenderNodeLayer;->drawLayer(Landroidx/compose/ui/graphics/Canvas;)V +HSPLandroidx/compose/ui/platform/RenderNodeLayer;->invalidate()V +HSPLandroidx/compose/ui/platform/RenderNodeLayer;->isInLayer-k-4lQ0M(J)Z +HSPLandroidx/compose/ui/platform/RenderNodeLayer;->mapBounds(Landroidx/compose/ui/geometry/MutableRect;Z)V +HSPLandroidx/compose/ui/platform/RenderNodeLayer;->mapOffset-8S9VItk(JZ)J +HSPLandroidx/compose/ui/platform/RenderNodeLayer;->move--gyyYBs(J)V +HSPLandroidx/compose/ui/platform/RenderNodeLayer;->resize-ozmzZPI(J)V +HSPLandroidx/compose/ui/platform/RenderNodeLayer;->reuseLayer(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/ui/platform/RenderNodeLayer;->setDirty(Z)V +HSPLandroidx/compose/ui/platform/RenderNodeLayer;->triggerRepaint()V +HSPLandroidx/compose/ui/platform/RenderNodeLayer;->updateDisplayList()V +HSPLandroidx/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 +Landroidx/compose/ui/platform/RenderNodeLayer$Companion; +HSPLandroidx/compose/ui/platform/RenderNodeLayer$Companion;->()V +HSPLandroidx/compose/ui/platform/RenderNodeLayer$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/platform/RenderNodeLayer$Companion$getMatrix$1; +HSPLandroidx/compose/ui/platform/RenderNodeLayer$Companion$getMatrix$1;->()V +HSPLandroidx/compose/ui/platform/RenderNodeLayer$Companion$getMatrix$1;->()V +HSPLandroidx/compose/ui/platform/RenderNodeLayer$Companion$getMatrix$1;->invoke(Landroidx/compose/ui/platform/DeviceRenderNode;Landroid/graphics/Matrix;)V +HSPLandroidx/compose/ui/platform/RenderNodeLayer$Companion$getMatrix$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/platform/SemanticsNodeWithAdjustedBounds; +HSPLandroidx/compose/ui/platform/SemanticsNodeWithAdjustedBounds;->(Landroidx/compose/ui/semantics/SemanticsNode;Landroid/graphics/Rect;)V +HSPLandroidx/compose/ui/platform/SemanticsNodeWithAdjustedBounds;->getAdjustedBounds()Landroid/graphics/Rect; +HSPLandroidx/compose/ui/platform/SemanticsNodeWithAdjustedBounds;->getSemanticsNode()Landroidx/compose/ui/semantics/SemanticsNode; +Landroidx/compose/ui/platform/ShapeContainingUtilKt; +HSPLandroidx/compose/ui/platform/ShapeContainingUtilKt;->cornersFit(Landroidx/compose/ui/geometry/RoundRect;)Z +HSPLandroidx/compose/ui/platform/ShapeContainingUtilKt;->isInOutline(Landroidx/compose/ui/graphics/Outline;FFLandroidx/compose/ui/graphics/Path;Landroidx/compose/ui/graphics/Path;)Z +HSPLandroidx/compose/ui/platform/ShapeContainingUtilKt;->isInRectangle(Landroidx/compose/ui/geometry/Rect;FF)Z +HSPLandroidx/compose/ui/platform/ShapeContainingUtilKt;->isInRoundedRect(Landroidx/compose/ui/graphics/Outline$Rounded;FFLandroidx/compose/ui/graphics/Path;Landroidx/compose/ui/graphics/Path;)Z +Landroidx/compose/ui/platform/SoftwareKeyboardController; +Landroidx/compose/ui/platform/TestTagKt; +HSPLandroidx/compose/ui/platform/TestTagKt;->testTag(Landroidx/compose/ui/Modifier;Ljava/lang/String;)Landroidx/compose/ui/Modifier; +Landroidx/compose/ui/platform/TestTagKt$testTag$1; +HSPLandroidx/compose/ui/platform/TestTagKt$testTag$1;->(Ljava/lang/String;)V +HSPLandroidx/compose/ui/platform/TestTagKt$testTag$1;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V +HSPLandroidx/compose/ui/platform/TestTagKt$testTag$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/platform/TextToolbar; +Landroidx/compose/ui/platform/TextToolbarStatus; +HSPLandroidx/compose/ui/platform/TextToolbarStatus;->$values()[Landroidx/compose/ui/platform/TextToolbarStatus; +HSPLandroidx/compose/ui/platform/TextToolbarStatus;->()V +HSPLandroidx/compose/ui/platform/TextToolbarStatus;->(Ljava/lang/String;I)V +Landroidx/compose/ui/platform/UriHandler; +Landroidx/compose/ui/platform/ViewCompositionStrategy; +HSPLandroidx/compose/ui/platform/ViewCompositionStrategy;->()V +Landroidx/compose/ui/platform/ViewCompositionStrategy$Companion; +HSPLandroidx/compose/ui/platform/ViewCompositionStrategy$Companion;->()V +HSPLandroidx/compose/ui/platform/ViewCompositionStrategy$Companion;->()V +HSPLandroidx/compose/ui/platform/ViewCompositionStrategy$Companion;->getDefault()Landroidx/compose/ui/platform/ViewCompositionStrategy; +Landroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool; +HSPLandroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool;->()V +HSPLandroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool;->()V +HSPLandroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool;->installFor(Landroidx/compose/ui/platform/AbstractComposeView;)Lkotlin/jvm/functions/Function0; +Landroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$1; +HSPLandroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$1;->(Landroidx/compose/ui/platform/AbstractComposeView;Landroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$listener$1;Landroidx/customview/poolingcontainer/PoolingContainerListener;)V +Landroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$listener$1; +HSPLandroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$listener$1;->(Landroidx/compose/ui/platform/AbstractComposeView;)V +HSPLandroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$listener$1;->onViewAttachedToWindow(Landroid/view/View;)V +Landroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$poolingContainerListener$1; +HSPLandroidx/compose/ui/platform/ViewCompositionStrategy$DisposeOnDetachedFromWindowOrReleasedFromPool$installFor$poolingContainerListener$1;->(Landroidx/compose/ui/platform/AbstractComposeView;)V +Landroidx/compose/ui/platform/ViewConfiguration; +HSPLandroidx/compose/ui/platform/ViewConfiguration;->getMinimumTouchTargetSize-MYxV2XQ()J +Landroidx/compose/ui/platform/ViewLayer; +HSPLandroidx/compose/ui/platform/ViewLayer;->()V +HSPLandroidx/compose/ui/platform/ViewLayer;->access$getShouldUseDispatchDraw$cp()Z +Landroidx/compose/ui/platform/ViewLayer$Companion; +HSPLandroidx/compose/ui/platform/ViewLayer$Companion;->()V +HSPLandroidx/compose/ui/platform/ViewLayer$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/platform/ViewLayer$Companion;->getShouldUseDispatchDraw()Z +Landroidx/compose/ui/platform/ViewLayer$Companion$OutlineProvider$1; +HSPLandroidx/compose/ui/platform/ViewLayer$Companion$OutlineProvider$1;->()V +Landroidx/compose/ui/platform/ViewLayer$Companion$getMatrix$1; +HSPLandroidx/compose/ui/platform/ViewLayer$Companion$getMatrix$1;->()V +HSPLandroidx/compose/ui/platform/ViewLayer$Companion$getMatrix$1;->()V +Landroidx/compose/ui/platform/ViewRootForTest; +HSPLandroidx/compose/ui/platform/ViewRootForTest;->()V +Landroidx/compose/ui/platform/ViewRootForTest$Companion; +HSPLandroidx/compose/ui/platform/ViewRootForTest$Companion;->()V +HSPLandroidx/compose/ui/platform/ViewRootForTest$Companion;->()V +HSPLandroidx/compose/ui/platform/ViewRootForTest$Companion;->getOnViewCreatedCallback()Lkotlin/jvm/functions/Function1; +Landroidx/compose/ui/platform/WeakCache; +HSPLandroidx/compose/ui/platform/WeakCache;->()V +HSPLandroidx/compose/ui/platform/WeakCache;->clearWeakReferences()V +HSPLandroidx/compose/ui/platform/WeakCache;->pop()Ljava/lang/Object; +HSPLandroidx/compose/ui/platform/WeakCache;->push(Ljava/lang/Object;)V +Landroidx/compose/ui/platform/WindowInfo; +Landroidx/compose/ui/platform/WindowInfoImpl; +HSPLandroidx/compose/ui/platform/WindowInfoImpl;->()V +HSPLandroidx/compose/ui/platform/WindowInfoImpl;->()V +HSPLandroidx/compose/ui/platform/WindowInfoImpl;->setKeyboardModifiers-5xRPYO0(I)V +HSPLandroidx/compose/ui/platform/WindowInfoImpl;->setWindowFocused(Z)V +Landroidx/compose/ui/platform/WindowInfoImpl$Companion; +HSPLandroidx/compose/ui/platform/WindowInfoImpl$Companion;->()V +HSPLandroidx/compose/ui/platform/WindowInfoImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/platform/WindowRecomposerFactory; +HSPLandroidx/compose/ui/platform/WindowRecomposerFactory;->()V +Landroidx/compose/ui/platform/WindowRecomposerFactory$Companion; +HSPLandroidx/compose/ui/platform/WindowRecomposerFactory$Companion;->()V +HSPLandroidx/compose/ui/platform/WindowRecomposerFactory$Companion;->()V +HSPLandroidx/compose/ui/platform/WindowRecomposerFactory$Companion;->getLifecycleAware()Landroidx/compose/ui/platform/WindowRecomposerFactory; +Landroidx/compose/ui/platform/WindowRecomposerFactory$Companion$LifecycleAware$1; +HSPLandroidx/compose/ui/platform/WindowRecomposerFactory$Companion$LifecycleAware$1;->()V +HSPLandroidx/compose/ui/platform/WindowRecomposerFactory$Companion$LifecycleAware$1;->()V +HSPLandroidx/compose/ui/platform/WindowRecomposerFactory$Companion$LifecycleAware$1;->createRecomposer(Landroid/view/View;)Landroidx/compose/runtime/Recomposer; +Landroidx/compose/ui/platform/WindowRecomposerPolicy; +HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy;->()V +HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy;->()V +HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy;->createAndInstallWindowRecomposer$ui_release(Landroid/view/View;)Landroidx/compose/runtime/Recomposer; +Landroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$1; +HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$1;->(Lkotlinx/coroutines/Job;)V +HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$1;->onViewAttachedToWindow(Landroid/view/View;)V +Landroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$unsetJob$1; +HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$unsetJob$1;->(Landroidx/compose/runtime/Recomposer;Landroid/view/View;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$unsetJob$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/ui/platform/WindowRecomposerPolicy$createAndInstallWindowRecomposer$unsetJob$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/platform/WindowRecomposer_androidKt; +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt;->()V +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt;->access$getAnimationScaleFlowFor(Landroid/content/Context;)Lkotlinx/coroutines/flow/StateFlow; +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt;->createLifecycleAwareWindowRecomposer$default(Landroid/view/View;Lkotlin/coroutines/CoroutineContext;Landroidx/lifecycle/Lifecycle;ILjava/lang/Object;)Landroidx/compose/runtime/Recomposer; +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt;->createLifecycleAwareWindowRecomposer(Landroid/view/View;Lkotlin/coroutines/CoroutineContext;Landroidx/lifecycle/Lifecycle;)Landroidx/compose/runtime/Recomposer; +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt;->findViewTreeCompositionContext(Landroid/view/View;)Landroidx/compose/runtime/CompositionContext; +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt;->getAnimationScaleFlowFor(Landroid/content/Context;)Lkotlinx/coroutines/flow/StateFlow; +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt;->getCompositionContext(Landroid/view/View;)Landroidx/compose/runtime/CompositionContext; +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt;->getContentChild(Landroid/view/View;)Landroid/view/View; +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt;->getWindowRecomposer(Landroid/view/View;)Landroidx/compose/runtime/Recomposer; +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt;->setCompositionContext(Landroid/view/View;Landroidx/compose/runtime/CompositionContext;)V +Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$1; +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$1;->(Landroid/view/View;Landroidx/compose/runtime/Recomposer;)V +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$1;->onViewAttachedToWindow(Landroid/view/View;)V +Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2; +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2;->(Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/runtime/PausableMonotonicFrameClock;Landroidx/compose/runtime/Recomposer;Lkotlin/jvm/internal/Ref$ObjectRef;Landroid/view/View;)V +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V +Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$WhenMappings; +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$WhenMappings;->()V +Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1; +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1;->(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 +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1; +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1;->(Lkotlinx/coroutines/flow/StateFlow;Landroidx/compose/ui/platform/MotionDurationScaleImpl;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1$1; +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1$1;->(Landroidx/compose/ui/platform/MotionDurationScaleImpl;)V +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1$1;->emit(FLkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$createLifecycleAwareWindowRecomposer$2$onStateChanged$1$1$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$1; +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$1;->(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 +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$contentObserver$1; +HSPLandroidx/compose/ui/platform/WindowRecomposer_androidKt$getAnimationScaleFlowFor$1$1$contentObserver$1;->(Lkotlinx/coroutines/channels/Channel;Landroid/os/Handler;)V +Landroidx/compose/ui/platform/WrappedComposition; +HSPLandroidx/compose/ui/platform/WrappedComposition;->(Landroidx/compose/ui/platform/AndroidComposeView;Landroidx/compose/runtime/Composition;)V +HSPLandroidx/compose/ui/platform/WrappedComposition;->access$getAddedToLifecycle$p(Landroidx/compose/ui/platform/WrappedComposition;)Landroidx/lifecycle/Lifecycle; +HSPLandroidx/compose/ui/platform/WrappedComposition;->access$getDisposed$p(Landroidx/compose/ui/platform/WrappedComposition;)Z +HSPLandroidx/compose/ui/platform/WrappedComposition;->access$setAddedToLifecycle$p(Landroidx/compose/ui/platform/WrappedComposition;Landroidx/lifecycle/Lifecycle;)V +HSPLandroidx/compose/ui/platform/WrappedComposition;->access$setLastContent$p(Landroidx/compose/ui/platform/WrappedComposition;Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/ui/platform/WrappedComposition;->getOriginal()Landroidx/compose/runtime/Composition; +HSPLandroidx/compose/ui/platform/WrappedComposition;->getOwner()Landroidx/compose/ui/platform/AndroidComposeView; +HSPLandroidx/compose/ui/platform/WrappedComposition;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V +HSPLandroidx/compose/ui/platform/WrappedComposition;->setContent(Lkotlin/jvm/functions/Function2;)V +Landroidx/compose/ui/platform/WrappedComposition$setContent$1; +HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1;->(Landroidx/compose/ui/platform/WrappedComposition;Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1;->invoke(Landroidx/compose/ui/platform/AndroidComposeView$ViewTreeOwners;)V +HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/platform/WrappedComposition$setContent$1$1; +HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1;->(Landroidx/compose/ui/platform/WrappedComposition;Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/platform/WrappedComposition$setContent$1$1$1; +HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1$1;->(Landroidx/compose/ui/platform/WrappedComposition;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/platform/WrappedComposition$setContent$1$1$2; +HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1$2;->(Landroidx/compose/ui/platform/WrappedComposition;Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1$2;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLandroidx/compose/ui/platform/WrappedComposition$setContent$1$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/platform/WrapperRenderNodeLayerHelperMethods; +HSPLandroidx/compose/ui/platform/WrapperRenderNodeLayerHelperMethods;->()V +HSPLandroidx/compose/ui/platform/WrapperRenderNodeLayerHelperMethods;->()V +HSPLandroidx/compose/ui/platform/WrapperRenderNodeLayerHelperMethods;->onDescendantInvalidated(Landroidx/compose/ui/platform/AndroidComposeView;)V +Landroidx/compose/ui/platform/WrapperVerificationHelperMethods; +HSPLandroidx/compose/ui/platform/WrapperVerificationHelperMethods;->()V +HSPLandroidx/compose/ui/platform/WrapperVerificationHelperMethods;->()V +HSPLandroidx/compose/ui/platform/WrapperVerificationHelperMethods;->attributeSourceResourceMap(Landroid/view/View;)Ljava/util/Map; +Landroidx/compose/ui/platform/Wrapper_androidKt; +HSPLandroidx/compose/ui/platform/Wrapper_androidKt;->()V +HSPLandroidx/compose/ui/platform/Wrapper_androidKt;->createSubcomposition(Landroidx/compose/ui/node/LayoutNode;Landroidx/compose/runtime/CompositionContext;)Landroidx/compose/runtime/Composition; +HSPLandroidx/compose/ui/platform/Wrapper_androidKt;->doSetContent(Landroidx/compose/ui/platform/AndroidComposeView;Landroidx/compose/runtime/CompositionContext;Lkotlin/jvm/functions/Function2;)Landroidx/compose/runtime/Composition; +HSPLandroidx/compose/ui/platform/Wrapper_androidKt;->inspectionWanted(Landroidx/compose/ui/platform/AndroidComposeView;)Z +HSPLandroidx/compose/ui/platform/Wrapper_androidKt;->setContent(Landroidx/compose/ui/platform/AbstractComposeView;Landroidx/compose/runtime/CompositionContext;Lkotlin/jvm/functions/Function2;)Landroidx/compose/runtime/Composition; +Landroidx/compose/ui/platform/accessibility/CollectionInfoKt; +HSPLandroidx/compose/ui/platform/accessibility/CollectionInfoKt;->calculateIfHorizontallyStacked(Ljava/util/List;)Z +HSPLandroidx/compose/ui/platform/accessibility/CollectionInfoKt;->hasCollectionInfo(Landroidx/compose/ui/semantics/SemanticsNode;)Z +HSPLandroidx/compose/ui/platform/accessibility/CollectionInfoKt;->setCollectionInfo(Landroidx/compose/ui/semantics/SemanticsNode;Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat;)V +HSPLandroidx/compose/ui/platform/accessibility/CollectionInfoKt;->setCollectionItemInfo(Landroidx/compose/ui/semantics/SemanticsNode;Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat;)V +PLandroidx/compose/ui/platform/accessibility/CollectionInfoKt;->toAccessibilityCollectionInfo(Landroidx/compose/ui/semantics/CollectionInfo;)Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat$CollectionInfoCompat; +Landroidx/compose/ui/platform/accessibility/CollectionInfoKt$setCollectionItemInfo$itemInfo$1; +HSPLandroidx/compose/ui/platform/accessibility/CollectionInfoKt$setCollectionItemInfo$itemInfo$1;->()V +HSPLandroidx/compose/ui/platform/accessibility/CollectionInfoKt$setCollectionItemInfo$itemInfo$1;->()V +Landroidx/compose/ui/platform/actionmodecallback/TextActionModeCallback; +HSPLandroidx/compose/ui/platform/actionmodecallback/TextActionModeCallback;->(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/geometry/Rect;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/ui/platform/actionmodecallback/TextActionModeCallback;->(Lkotlin/jvm/functions/Function0;Landroidx/compose/ui/geometry/Rect;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/platform/coreshims/ContentCaptureSessionCompat; +Landroidx/compose/ui/platform/coreshims/SoftwareKeyboardControllerCompat; +HSPLandroidx/compose/ui/platform/coreshims/SoftwareKeyboardControllerCompat;->(Landroid/view/View;)V +HSPLandroidx/compose/ui/platform/coreshims/SoftwareKeyboardControllerCompat;->hide()V +HSPLandroidx/compose/ui/platform/coreshims/SoftwareKeyboardControllerCompat;->show()V +Landroidx/compose/ui/platform/coreshims/SoftwareKeyboardControllerCompat$Impl; +HSPLandroidx/compose/ui/platform/coreshims/SoftwareKeyboardControllerCompat$Impl;->()V +Landroidx/compose/ui/platform/coreshims/SoftwareKeyboardControllerCompat$Impl20; +HSPLandroidx/compose/ui/platform/coreshims/SoftwareKeyboardControllerCompat$Impl20;->(Landroid/view/View;)V +Landroidx/compose/ui/platform/coreshims/SoftwareKeyboardControllerCompat$Impl30; +HSPLandroidx/compose/ui/platform/coreshims/SoftwareKeyboardControllerCompat$Impl30;->(Landroid/view/View;)V +HSPLandroidx/compose/ui/platform/coreshims/SoftwareKeyboardControllerCompat$Impl30;->hide()V +HSPLandroidx/compose/ui/platform/coreshims/SoftwareKeyboardControllerCompat$Impl30;->lambda$hide$0(Ljava/util/concurrent/atomic/AtomicBoolean;Landroid/view/WindowInsetsController;I)V +HSPLandroidx/compose/ui/platform/coreshims/SoftwareKeyboardControllerCompat$Impl30;->show()V +Landroidx/compose/ui/platform/coreshims/SoftwareKeyboardControllerCompat$Impl30$$ExternalSyntheticLambda5; +PLandroidx/compose/ui/platform/coreshims/SoftwareKeyboardControllerCompat$Impl30$$ExternalSyntheticLambda5;->(Ljava/util/concurrent/atomic/AtomicBoolean;)V +HSPLandroidx/compose/ui/platform/coreshims/SoftwareKeyboardControllerCompat$Impl30$$ExternalSyntheticLambda5;->onControllableInsetsChanged(Landroid/view/WindowInsetsController;I)V +Landroidx/compose/ui/platform/coreshims/ViewCompatShims; +HSPLandroidx/compose/ui/platform/coreshims/ViewCompatShims;->getContentCaptureSession(Landroid/view/View;)Landroidx/compose/ui/platform/coreshims/ContentCaptureSessionCompat; +HSPLandroidx/compose/ui/platform/coreshims/ViewCompatShims;->setImportantForContentCapture(Landroid/view/View;I)V +Landroidx/compose/ui/platform/coreshims/ViewCompatShims$Api29Impl; +HSPLandroidx/compose/ui/platform/coreshims/ViewCompatShims$Api29Impl;->getContentCaptureSession(Landroid/view/View;)Landroid/view/contentcapture/ContentCaptureSession; +Landroidx/compose/ui/platform/coreshims/ViewCompatShims$Api30Impl; +HSPLandroidx/compose/ui/platform/coreshims/ViewCompatShims$Api30Impl;->setImportantForContentCapture(Landroid/view/View;I)V +Landroidx/compose/ui/res/ImageVectorCache; +HSPLandroidx/compose/ui/res/ImageVectorCache;->()V +Landroidx/compose/ui/semantics/AccessibilityAction; +HSPLandroidx/compose/ui/semantics/AccessibilityAction;->()V +HSPLandroidx/compose/ui/semantics/AccessibilityAction;->(Ljava/lang/String;Lkotlin/Function;)V +HSPLandroidx/compose/ui/semantics/AccessibilityAction;->getAction()Lkotlin/Function; +HSPLandroidx/compose/ui/semantics/AccessibilityAction;->getLabel()Ljava/lang/String; +Landroidx/compose/ui/semantics/AppendedSemanticsElement; +HSPLandroidx/compose/ui/semantics/AppendedSemanticsElement;->(ZLkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/semantics/AppendedSemanticsElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/semantics/AppendedSemanticsElement;->create()Landroidx/compose/ui/semantics/CoreSemanticsModifierNode; +HSPLandroidx/compose/ui/semantics/AppendedSemanticsElement;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/semantics/AppendedSemanticsElement;->update(Landroidx/compose/ui/Modifier$Node;)V +HSPLandroidx/compose/ui/semantics/AppendedSemanticsElement;->update(Landroidx/compose/ui/semantics/CoreSemanticsModifierNode;)V +Landroidx/compose/ui/semantics/ClearAndSetSemanticsElement; +HSPLandroidx/compose/ui/semantics/ClearAndSetSemanticsElement;->(Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/semantics/ClearAndSetSemanticsElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/semantics/ClearAndSetSemanticsElement;->create()Landroidx/compose/ui/semantics/CoreSemanticsModifierNode; +HSPLandroidx/compose/ui/semantics/ClearAndSetSemanticsElement;->equals(Ljava/lang/Object;)Z +Landroidx/compose/ui/semantics/CollectionInfo; +HSPLandroidx/compose/ui/semantics/CollectionInfo;->()V +HSPLandroidx/compose/ui/semantics/CollectionInfo;->(II)V +PLandroidx/compose/ui/semantics/CollectionInfo;->getColumnCount()I +PLandroidx/compose/ui/semantics/CollectionInfo;->getRowCount()I +Landroidx/compose/ui/semantics/CollectionItemInfo; +Landroidx/compose/ui/semantics/CoreSemanticsModifierNode; +HSPLandroidx/compose/ui/semantics/CoreSemanticsModifierNode;->(ZZLkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/semantics/CoreSemanticsModifierNode;->applySemantics(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V +HSPLandroidx/compose/ui/semantics/CoreSemanticsModifierNode;->getShouldClearDescendantSemantics()Z +HSPLandroidx/compose/ui/semantics/CoreSemanticsModifierNode;->getShouldMergeDescendantSemantics()Z +HSPLandroidx/compose/ui/semantics/CoreSemanticsModifierNode;->setMergeDescendants(Z)V +HSPLandroidx/compose/ui/semantics/CoreSemanticsModifierNode;->setProperties(Lkotlin/jvm/functions/Function1;)V +Landroidx/compose/ui/semantics/CustomAccessibilityAction; +Landroidx/compose/ui/semantics/EmptySemanticsElement; +HSPLandroidx/compose/ui/semantics/EmptySemanticsElement;->()V +HSPLandroidx/compose/ui/semantics/EmptySemanticsElement;->()V +HSPLandroidx/compose/ui/semantics/EmptySemanticsElement;->create()Landroidx/compose/ui/Modifier$Node; +HSPLandroidx/compose/ui/semantics/EmptySemanticsElement;->create()Landroidx/compose/ui/semantics/EmptySemanticsModifier; +Landroidx/compose/ui/semantics/EmptySemanticsModifier; +HSPLandroidx/compose/ui/semantics/EmptySemanticsModifier;->()V +HSPLandroidx/compose/ui/semantics/EmptySemanticsModifier;->applySemantics(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V +Landroidx/compose/ui/semantics/LiveRegionMode; +Landroidx/compose/ui/semantics/LiveRegionMode$Companion; +Landroidx/compose/ui/semantics/ProgressBarRangeInfo; +HSPLandroidx/compose/ui/semantics/ProgressBarRangeInfo;->()V +HSPLandroidx/compose/ui/semantics/ProgressBarRangeInfo;->(FLkotlin/ranges/ClosedFloatingPointRange;I)V +HSPLandroidx/compose/ui/semantics/ProgressBarRangeInfo;->(FLkotlin/ranges/ClosedFloatingPointRange;IILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/semantics/ProgressBarRangeInfo;->access$getIndeterminate$cp()Landroidx/compose/ui/semantics/ProgressBarRangeInfo; +Landroidx/compose/ui/semantics/ProgressBarRangeInfo$Companion; +HSPLandroidx/compose/ui/semantics/ProgressBarRangeInfo$Companion;->()V +HSPLandroidx/compose/ui/semantics/ProgressBarRangeInfo$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/semantics/ProgressBarRangeInfo$Companion;->getIndeterminate()Landroidx/compose/ui/semantics/ProgressBarRangeInfo; +Landroidx/compose/ui/semantics/Role; +HSPLandroidx/compose/ui/semantics/Role;->()V +HSPLandroidx/compose/ui/semantics/Role;->(I)V +HSPLandroidx/compose/ui/semantics/Role;->access$getButton$cp()I +HSPLandroidx/compose/ui/semantics/Role;->access$getCheckbox$cp()I +HSPLandroidx/compose/ui/semantics/Role;->access$getImage$cp()I +HSPLandroidx/compose/ui/semantics/Role;->access$getSwitch$cp()I +HSPLandroidx/compose/ui/semantics/Role;->access$getTab$cp()I +HSPLandroidx/compose/ui/semantics/Role;->box-impl(I)Landroidx/compose/ui/semantics/Role; +HSPLandroidx/compose/ui/semantics/Role;->constructor-impl(I)I +HSPLandroidx/compose/ui/semantics/Role;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/semantics/Role;->equals-impl(ILjava/lang/Object;)Z +HSPLandroidx/compose/ui/semantics/Role;->equals-impl0(II)Z +HSPLandroidx/compose/ui/semantics/Role;->unbox-impl()I +Landroidx/compose/ui/semantics/Role$Companion; +HSPLandroidx/compose/ui/semantics/Role$Companion;->()V +HSPLandroidx/compose/ui/semantics/Role$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/semantics/Role$Companion;->getButton-o7Vup1c()I +HSPLandroidx/compose/ui/semantics/Role$Companion;->getCheckbox-o7Vup1c()I +HSPLandroidx/compose/ui/semantics/Role$Companion;->getImage-o7Vup1c()I +HSPLandroidx/compose/ui/semantics/Role$Companion;->getSwitch-o7Vup1c()I +HSPLandroidx/compose/ui/semantics/Role$Companion;->getTab-o7Vup1c()I +Landroidx/compose/ui/semantics/ScrollAxisRange; +HSPLandroidx/compose/ui/semantics/ScrollAxisRange;->()V +HSPLandroidx/compose/ui/semantics/ScrollAxisRange;->(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Z)V +HSPLandroidx/compose/ui/semantics/ScrollAxisRange;->getMaxValue()Lkotlin/jvm/functions/Function0; +HSPLandroidx/compose/ui/semantics/ScrollAxisRange;->getValue()Lkotlin/jvm/functions/Function0; +Landroidx/compose/ui/semantics/SemanticsActions; +HSPLandroidx/compose/ui/semantics/SemanticsActions;->()V +HSPLandroidx/compose/ui/semantics/SemanticsActions;->()V +HSPLandroidx/compose/ui/semantics/SemanticsActions;->getCollapse()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsActions;->getCopyText()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsActions;->getCustomActions()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsActions;->getCutText()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsActions;->getDismiss()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsActions;->getExpand()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsActions;->getGetTextLayoutResult()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsActions;->getInsertTextAtCursor()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsActions;->getOnClick()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsActions;->getOnLongClick()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsActions;->getPageDown()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsActions;->getPageLeft()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsActions;->getPageRight()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsActions;->getPageUp()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsActions;->getPasteText()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsActions;->getPerformImeAction()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsActions;->getRequestFocus()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsActions;->getScrollBy()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsActions;->getScrollToIndex()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsActions;->getSetProgress()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsActions;->getSetSelection()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsActions;->getSetText()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +Landroidx/compose/ui/semantics/SemanticsConfiguration; +HSPLandroidx/compose/ui/semantics/SemanticsConfiguration;->()V +HSPLandroidx/compose/ui/semantics/SemanticsConfiguration;->()V +HSPLandroidx/compose/ui/semantics/SemanticsConfiguration;->contains(Landroidx/compose/ui/semantics/SemanticsPropertyKey;)Z +HSPLandroidx/compose/ui/semantics/SemanticsConfiguration;->get(Landroidx/compose/ui/semantics/SemanticsPropertyKey;)Ljava/lang/Object; +PLandroidx/compose/ui/semantics/SemanticsConfiguration;->getOrElse(Landroidx/compose/ui/semantics/SemanticsPropertyKey;Lkotlin/jvm/functions/Function0;)Ljava/lang/Object; +HSPLandroidx/compose/ui/semantics/SemanticsConfiguration;->getOrElseNullable(Landroidx/compose/ui/semantics/SemanticsPropertyKey;Lkotlin/jvm/functions/Function0;)Ljava/lang/Object; +HSPLandroidx/compose/ui/semantics/SemanticsConfiguration;->isClearingSemantics()Z +HSPLandroidx/compose/ui/semantics/SemanticsConfiguration;->isMergingSemanticsOfDescendants()Z +HSPLandroidx/compose/ui/semantics/SemanticsConfiguration;->set(Landroidx/compose/ui/semantics/SemanticsPropertyKey;Ljava/lang/Object;)V +HSPLandroidx/compose/ui/semantics/SemanticsConfiguration;->setClearingSemantics(Z)V +HSPLandroidx/compose/ui/semantics/SemanticsConfiguration;->setMergingSemanticsOfDescendants(Z)V +Landroidx/compose/ui/semantics/SemanticsConfigurationKt; +HSPLandroidx/compose/ui/semantics/SemanticsConfigurationKt;->getOrNull(Landroidx/compose/ui/semantics/SemanticsConfiguration;Landroidx/compose/ui/semantics/SemanticsPropertyKey;)Ljava/lang/Object; +Landroidx/compose/ui/semantics/SemanticsConfigurationKt$getOrNull$1; +HSPLandroidx/compose/ui/semantics/SemanticsConfigurationKt$getOrNull$1;->()V +HSPLandroidx/compose/ui/semantics/SemanticsConfigurationKt$getOrNull$1;->()V +HSPLandroidx/compose/ui/semantics/SemanticsConfigurationKt$getOrNull$1;->invoke()Ljava/lang/Object; +Landroidx/compose/ui/semantics/SemanticsModifier; +Landroidx/compose/ui/semantics/SemanticsModifierKt; +HSPLandroidx/compose/ui/semantics/SemanticsModifierKt;->()V +HSPLandroidx/compose/ui/semantics/SemanticsModifierKt;->clearAndSetSemantics(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/ui/semantics/SemanticsModifierKt;->generateSemanticsId()I +HSPLandroidx/compose/ui/semantics/SemanticsModifierKt;->semantics$default(Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function1;ILjava/lang/Object;)Landroidx/compose/ui/Modifier; +HSPLandroidx/compose/ui/semantics/SemanticsModifierKt;->semantics(Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; +Landroidx/compose/ui/semantics/SemanticsNode; +HSPLandroidx/compose/ui/semantics/SemanticsNode;->()V +HSPLandroidx/compose/ui/semantics/SemanticsNode;->(Landroidx/compose/ui/Modifier$Node;ZLandroidx/compose/ui/node/LayoutNode;Landroidx/compose/ui/semantics/SemanticsConfiguration;)V +HSPLandroidx/compose/ui/semantics/SemanticsNode;->emitFakeNodes(Ljava/util/List;)V +HSPLandroidx/compose/ui/semantics/SemanticsNode;->fakeSemanticsNode-ypyhhiA(Landroidx/compose/ui/semantics/Role;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/semantics/SemanticsNode; +HSPLandroidx/compose/ui/semantics/SemanticsNode;->fillOneLayerOfSemanticsWrappers(Landroidx/compose/ui/node/LayoutNode;Ljava/util/List;)V +HSPLandroidx/compose/ui/semantics/SemanticsNode;->findCoordinatorToGetBounds$ui_release()Landroidx/compose/ui/node/NodeCoordinator; +HSPLandroidx/compose/ui/semantics/SemanticsNode;->getBoundsInRoot()Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/ui/semantics/SemanticsNode;->getBoundsInWindow()Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/ui/semantics/SemanticsNode;->getChildren()Ljava/util/List; +HSPLandroidx/compose/ui/semantics/SemanticsNode;->getChildren(ZZ)Ljava/util/List; +HSPLandroidx/compose/ui/semantics/SemanticsNode;->getConfig()Landroidx/compose/ui/semantics/SemanticsConfiguration; +HSPLandroidx/compose/ui/semantics/SemanticsNode;->getId()I +HSPLandroidx/compose/ui/semantics/SemanticsNode;->getLayoutInfo()Landroidx/compose/ui/layout/LayoutInfo; +HSPLandroidx/compose/ui/semantics/SemanticsNode;->getLayoutNode$ui_release()Landroidx/compose/ui/node/LayoutNode; +HSPLandroidx/compose/ui/semantics/SemanticsNode;->getParent()Landroidx/compose/ui/semantics/SemanticsNode; +HSPLandroidx/compose/ui/semantics/SemanticsNode;->getReplacedChildren$ui_release()Ljava/util/List; +HSPLandroidx/compose/ui/semantics/SemanticsNode;->getTouchBoundsInRoot()Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/ui/semantics/SemanticsNode;->getUnmergedConfig$ui_release()Landroidx/compose/ui/semantics/SemanticsConfiguration; +HSPLandroidx/compose/ui/semantics/SemanticsNode;->isFake$ui_release()Z +HSPLandroidx/compose/ui/semantics/SemanticsNode;->isMergingSemanticsOfDescendants()Z +HSPLandroidx/compose/ui/semantics/SemanticsNode;->isTransparent$ui_release()Z +HSPLandroidx/compose/ui/semantics/SemanticsNode;->isUnmergedLeafNode$ui_release()Z +HSPLandroidx/compose/ui/semantics/SemanticsNode;->unmergedChildren$ui_release(Z)Ljava/util/List; +Landroidx/compose/ui/semantics/SemanticsNode$emitFakeNodes$fakeNode$1; +HSPLandroidx/compose/ui/semantics/SemanticsNode$emitFakeNodes$fakeNode$1;->(Landroidx/compose/ui/semantics/Role;)V +HSPLandroidx/compose/ui/semantics/SemanticsNode$emitFakeNodes$fakeNode$1;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V +HSPLandroidx/compose/ui/semantics/SemanticsNode$emitFakeNodes$fakeNode$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/semantics/SemanticsNode$fakeSemanticsNode$fakeNode$1; +HSPLandroidx/compose/ui/semantics/SemanticsNode$fakeSemanticsNode$fakeNode$1;->(Lkotlin/jvm/functions/Function1;)V +Landroidx/compose/ui/semantics/SemanticsNode$isUnmergedLeafNode$1; +HSPLandroidx/compose/ui/semantics/SemanticsNode$isUnmergedLeafNode$1;->()V +HSPLandroidx/compose/ui/semantics/SemanticsNode$isUnmergedLeafNode$1;->()V +HSPLandroidx/compose/ui/semantics/SemanticsNode$isUnmergedLeafNode$1;->invoke(Landroidx/compose/ui/node/LayoutNode;)Ljava/lang/Boolean; +HSPLandroidx/compose/ui/semantics/SemanticsNode$isUnmergedLeafNode$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/semantics/SemanticsNode$parent$2; +HSPLandroidx/compose/ui/semantics/SemanticsNode$parent$2;->()V +HSPLandroidx/compose/ui/semantics/SemanticsNode$parent$2;->()V +HSPLandroidx/compose/ui/semantics/SemanticsNode$parent$2;->invoke(Landroidx/compose/ui/node/LayoutNode;)Ljava/lang/Boolean; +HSPLandroidx/compose/ui/semantics/SemanticsNode$parent$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/semantics/SemanticsNodeKt; +HSPLandroidx/compose/ui/semantics/SemanticsNodeKt;->SemanticsNode(Landroidx/compose/ui/node/LayoutNode;Z)Landroidx/compose/ui/semantics/SemanticsNode; +HSPLandroidx/compose/ui/semantics/SemanticsNodeKt;->access$getRole(Landroidx/compose/ui/semantics/SemanticsNode;)Landroidx/compose/ui/semantics/Role; +HSPLandroidx/compose/ui/semantics/SemanticsNodeKt;->access$roleFakeNodeId(Landroidx/compose/ui/semantics/SemanticsNode;)I +HSPLandroidx/compose/ui/semantics/SemanticsNodeKt;->findClosestParentNode(Landroidx/compose/ui/node/LayoutNode;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/node/LayoutNode; +HSPLandroidx/compose/ui/semantics/SemanticsNodeKt;->getOuterMergingSemantics(Landroidx/compose/ui/node/LayoutNode;)Landroidx/compose/ui/node/SemanticsModifierNode; +HSPLandroidx/compose/ui/semantics/SemanticsNodeKt;->getRole(Landroidx/compose/ui/semantics/SemanticsNode;)Landroidx/compose/ui/semantics/Role; +HSPLandroidx/compose/ui/semantics/SemanticsNodeKt;->roleFakeNodeId(Landroidx/compose/ui/semantics/SemanticsNode;)I +Landroidx/compose/ui/semantics/SemanticsOwner; +HSPLandroidx/compose/ui/semantics/SemanticsOwner;->()V +HSPLandroidx/compose/ui/semantics/SemanticsOwner;->(Landroidx/compose/ui/node/LayoutNode;)V +HSPLandroidx/compose/ui/semantics/SemanticsOwner;->getUnmergedRootSemanticsNode()Landroidx/compose/ui/semantics/SemanticsNode; +Landroidx/compose/ui/semantics/SemanticsProperties; +HSPLandroidx/compose/ui/semantics/SemanticsProperties;->()V +HSPLandroidx/compose/ui/semantics/SemanticsProperties;->()V +HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getCollectionInfo()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getCollectionItemInfo()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getContentDescription()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getDisabled()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getEditableText()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getError()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getFocused()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getHeading()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getHorizontalScrollAxisRange()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getImeAction()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getIndexForKey()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getInvisibleToUser()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getIsTraversalGroup()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getLiveRegion()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getPaneTitle()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getPassword()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getProgressBarRangeInfo()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getRole()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getSelectableGroup()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getSelected()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getStateDescription()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getTestTag()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getText()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getTextSelectionRange()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getToggleableState()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getTraversalIndex()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsProperties;->getVerticalScrollAxisRange()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +Landroidx/compose/ui/semantics/SemanticsProperties$ContentDescription$1; +HSPLandroidx/compose/ui/semantics/SemanticsProperties$ContentDescription$1;->()V +HSPLandroidx/compose/ui/semantics/SemanticsProperties$ContentDescription$1;->()V +Landroidx/compose/ui/semantics/SemanticsProperties$InvisibleToUser$1; +HSPLandroidx/compose/ui/semantics/SemanticsProperties$InvisibleToUser$1;->()V +HSPLandroidx/compose/ui/semantics/SemanticsProperties$InvisibleToUser$1;->()V +Landroidx/compose/ui/semantics/SemanticsProperties$IsDialog$1; +HSPLandroidx/compose/ui/semantics/SemanticsProperties$IsDialog$1;->()V +HSPLandroidx/compose/ui/semantics/SemanticsProperties$IsDialog$1;->()V +Landroidx/compose/ui/semantics/SemanticsProperties$IsPopup$1; +HSPLandroidx/compose/ui/semantics/SemanticsProperties$IsPopup$1;->()V +HSPLandroidx/compose/ui/semantics/SemanticsProperties$IsPopup$1;->()V +Landroidx/compose/ui/semantics/SemanticsProperties$PaneTitle$1; +HSPLandroidx/compose/ui/semantics/SemanticsProperties$PaneTitle$1;->()V +HSPLandroidx/compose/ui/semantics/SemanticsProperties$PaneTitle$1;->()V +Landroidx/compose/ui/semantics/SemanticsProperties$Role$1; +HSPLandroidx/compose/ui/semantics/SemanticsProperties$Role$1;->()V +HSPLandroidx/compose/ui/semantics/SemanticsProperties$Role$1;->()V +Landroidx/compose/ui/semantics/SemanticsProperties$TestTag$1; +HSPLandroidx/compose/ui/semantics/SemanticsProperties$TestTag$1;->()V +HSPLandroidx/compose/ui/semantics/SemanticsProperties$TestTag$1;->()V +Landroidx/compose/ui/semantics/SemanticsProperties$Text$1; +HSPLandroidx/compose/ui/semantics/SemanticsProperties$Text$1;->()V +HSPLandroidx/compose/ui/semantics/SemanticsProperties$Text$1;->()V +Landroidx/compose/ui/semantics/SemanticsProperties$TraversalIndex$1; +HSPLandroidx/compose/ui/semantics/SemanticsProperties$TraversalIndex$1;->()V +HSPLandroidx/compose/ui/semantics/SemanticsProperties$TraversalIndex$1;->()V +Landroidx/compose/ui/semantics/SemanticsPropertiesAndroid; +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesAndroid;->()V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesAndroid;->()V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesAndroid;->getTestTagsAsResourceId()Landroidx/compose/ui/semantics/SemanticsPropertyKey; +Landroidx/compose/ui/semantics/SemanticsPropertiesAndroid$TestTagsAsResourceId$1; +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesAndroid$TestTagsAsResourceId$1;->()V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesAndroid$TestTagsAsResourceId$1;->()V +Landroidx/compose/ui/semantics/SemanticsPropertiesKt; +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->()V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->disabled(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->getTextLayoutResult$default(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->getTextLayoutResult(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->indexForKey(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->insertTextAtCursor$default(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->insertTextAtCursor(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->onClick$default(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function0;ILjava/lang/Object;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->onClick(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->onLongClick$default(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function0;ILjava/lang/Object;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->onLongClick(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->password(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->pasteText$default(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function0;ILjava/lang/Object;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->pasteText(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->performImeAction$default(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function0;ILjava/lang/Object;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->performImeAction(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->requestFocus$default(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function0;ILjava/lang/Object;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->requestFocus(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->scrollBy$default(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->scrollBy(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->scrollToIndex$default(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->scrollToIndex(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->selectableGroup(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setCollectionInfo(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Landroidx/compose/ui/semantics/CollectionInfo;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setContainer(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Z)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setEditableText(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Landroidx/compose/ui/text/AnnotatedString;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setFocused(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Z)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setImeAction-4L7nppU(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;I)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setProgressBarRangeInfo(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Landroidx/compose/ui/semantics/ProgressBarRangeInfo;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setRole-kuIjeqM(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;I)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setSelected(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Z)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setSelection$default(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function3;ILjava/lang/Object;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setSelection(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function3;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setTestTag(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setText$default(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setText(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Landroidx/compose/ui/text/AnnotatedString;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setText(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setTextSelectionRange-FDrldGo(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;J)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setTraversalGroup(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Z)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt;->setVerticalScrollAxisRange(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Landroidx/compose/ui/semantics/ScrollAxisRange;)V +Landroidx/compose/ui/semantics/SemanticsPropertiesKt$ActionPropertyKey$1; +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt$ActionPropertyKey$1;->()V +HSPLandroidx/compose/ui/semantics/SemanticsPropertiesKt$ActionPropertyKey$1;->()V +Landroidx/compose/ui/semantics/SemanticsProperties_androidKt; +HSPLandroidx/compose/ui/semantics/SemanticsProperties_androidKt;->()V +HSPLandroidx/compose/ui/semantics/SemanticsProperties_androidKt;->setTestTagsAsResourceId(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Z)V +Landroidx/compose/ui/semantics/SemanticsPropertyKey; +HSPLandroidx/compose/ui/semantics/SemanticsPropertyKey;->()V +HSPLandroidx/compose/ui/semantics/SemanticsPropertyKey;->(Ljava/lang/String;Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertyKey;->(Ljava/lang/String;Lkotlin/jvm/functions/Function2;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/semantics/SemanticsPropertyKey;->setValue(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;Lkotlin/reflect/KProperty;Ljava/lang/Object;)V +Landroidx/compose/ui/semantics/SemanticsPropertyKey$1; +HSPLandroidx/compose/ui/semantics/SemanticsPropertyKey$1;->()V +HSPLandroidx/compose/ui/semantics/SemanticsPropertyKey$1;->()V +Landroidx/compose/ui/semantics/SemanticsPropertyReceiver; +Landroidx/compose/ui/state/ToggleableState; +HSPLandroidx/compose/ui/state/ToggleableState;->$values()[Landroidx/compose/ui/state/ToggleableState; +HSPLandroidx/compose/ui/state/ToggleableState;->()V +HSPLandroidx/compose/ui/state/ToggleableState;->(Ljava/lang/String;I)V +HSPLandroidx/compose/ui/state/ToggleableState;->values()[Landroidx/compose/ui/state/ToggleableState; +Landroidx/compose/ui/state/ToggleableStateKt; +HSPLandroidx/compose/ui/state/ToggleableStateKt;->ToggleableState(Z)Landroidx/compose/ui/state/ToggleableState; +Landroidx/compose/ui/text/AndroidParagraph; +HSPLandroidx/compose/ui/text/AndroidParagraph;->(Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;IZJ)V +HSPLandroidx/compose/ui/text/AndroidParagraph;->(Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;IZJLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/AndroidParagraph;->constructTextLayout(IILandroid/text/TextUtils$TruncateAt;IIIII)Landroidx/compose/ui/text/android/TextLayout; +HSPLandroidx/compose/ui/text/AndroidParagraph;->getBoundingBox(I)Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/ui/text/AndroidParagraph;->getCursorRect(I)Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/ui/text/AndroidParagraph;->getDidExceedMaxLines()Z +HSPLandroidx/compose/ui/text/AndroidParagraph;->getFirstBaseline()F +HSPLandroidx/compose/ui/text/AndroidParagraph;->getHeight()F +HSPLandroidx/compose/ui/text/AndroidParagraph;->getLastBaseline()F +HSPLandroidx/compose/ui/text/AndroidParagraph;->getLineBaseline$ui_text_release(I)F +HSPLandroidx/compose/ui/text/AndroidParagraph;->getLineBottom(I)F +HSPLandroidx/compose/ui/text/AndroidParagraph;->getLineCount()I +HSPLandroidx/compose/ui/text/AndroidParagraph;->getMinIntrinsicWidth()F +HSPLandroidx/compose/ui/text/AndroidParagraph;->getPlaceholderRects()Ljava/util/List; +HSPLandroidx/compose/ui/text/AndroidParagraph;->getShaderBrushSpans(Landroidx/compose/ui/text/android/TextLayout;)[Landroidx/compose/ui/text/platform/style/ShaderBrushSpan; +HSPLandroidx/compose/ui/text/AndroidParagraph;->getTextPaint$ui_text_release()Landroidx/compose/ui/text/platform/AndroidTextPaint; +HSPLandroidx/compose/ui/text/AndroidParagraph;->getWidth()F +HSPLandroidx/compose/ui/text/AndroidParagraph;->paint(Landroidx/compose/ui/graphics/Canvas;)V +HSPLandroidx/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 +Landroidx/compose/ui/text/AndroidParagraph$wordBoundary$2; +HSPLandroidx/compose/ui/text/AndroidParagraph$wordBoundary$2;->(Landroidx/compose/ui/text/AndroidParagraph;)V +Landroidx/compose/ui/text/AndroidParagraph_androidKt; +HSPLandroidx/compose/ui/text/AndroidParagraph_androidKt;->access$shouldAttachIndentationFixSpan(Landroidx/compose/ui/text/TextStyle;Z)Z +HSPLandroidx/compose/ui/text/AndroidParagraph_androidKt;->access$toLayoutAlign-AMY3VfE(Landroidx/compose/ui/text/style/TextAlign;)I +HSPLandroidx/compose/ui/text/AndroidParagraph_androidKt;->access$toLayoutBreakStrategy-u6PBz3U(Landroidx/compose/ui/text/style/LineBreak$Strategy;)I +HSPLandroidx/compose/ui/text/AndroidParagraph_androidKt;->access$toLayoutHyphenationFrequency-0_XeFpE(Landroidx/compose/ui/text/style/Hyphens;)I +HSPLandroidx/compose/ui/text/AndroidParagraph_androidKt;->access$toLayoutLineBreakStyle-4a2g8L8(Landroidx/compose/ui/text/style/LineBreak$Strictness;)I +HSPLandroidx/compose/ui/text/AndroidParagraph_androidKt;->access$toLayoutLineBreakWordStyle-gvcdTPQ(Landroidx/compose/ui/text/style/LineBreak$WordBreak;)I +HSPLandroidx/compose/ui/text/AndroidParagraph_androidKt;->shouldAttachIndentationFixSpan(Landroidx/compose/ui/text/TextStyle;Z)Z +HSPLandroidx/compose/ui/text/AndroidParagraph_androidKt;->toLayoutAlign-AMY3VfE(Landroidx/compose/ui/text/style/TextAlign;)I +HSPLandroidx/compose/ui/text/AndroidParagraph_androidKt;->toLayoutBreakStrategy-u6PBz3U(Landroidx/compose/ui/text/style/LineBreak$Strategy;)I +HSPLandroidx/compose/ui/text/AndroidParagraph_androidKt;->toLayoutHyphenationFrequency-0_XeFpE(Landroidx/compose/ui/text/style/Hyphens;)I +HSPLandroidx/compose/ui/text/AndroidParagraph_androidKt;->toLayoutLineBreakStyle-4a2g8L8(Landroidx/compose/ui/text/style/LineBreak$Strictness;)I +HSPLandroidx/compose/ui/text/AndroidParagraph_androidKt;->toLayoutLineBreakWordStyle-gvcdTPQ(Landroidx/compose/ui/text/style/LineBreak$WordBreak;)I +Landroidx/compose/ui/text/AndroidTextStyle_androidKt; +HSPLandroidx/compose/ui/text/AndroidTextStyle_androidKt;->createPlatformTextStyle(Landroidx/compose/ui/text/PlatformSpanStyle;Landroidx/compose/ui/text/PlatformParagraphStyle;)Landroidx/compose/ui/text/PlatformTextStyle; +Landroidx/compose/ui/text/AnnotatedString; +HSPLandroidx/compose/ui/text/AnnotatedString;->()V +HSPLandroidx/compose/ui/text/AnnotatedString;->(Ljava/lang/String;Ljava/util/List;Ljava/util/List;)V +HSPLandroidx/compose/ui/text/AnnotatedString;->(Ljava/lang/String;Ljava/util/List;Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/AnnotatedString;->(Ljava/lang/String;Ljava/util/List;Ljava/util/List;Ljava/util/List;)V +HSPLandroidx/compose/ui/text/AnnotatedString;->(Ljava/lang/String;Ljava/util/List;Ljava/util/List;Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/AnnotatedString;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/text/AnnotatedString;->getLength()I +HSPLandroidx/compose/ui/text/AnnotatedString;->getParagraphStylesOrNull$ui_text_release()Ljava/util/List; +HSPLandroidx/compose/ui/text/AnnotatedString;->getSpanStyles()Ljava/util/List; +HSPLandroidx/compose/ui/text/AnnotatedString;->getSpanStylesOrNull$ui_text_release()Ljava/util/List; +HSPLandroidx/compose/ui/text/AnnotatedString;->getText()Ljava/lang/String; +HSPLandroidx/compose/ui/text/AnnotatedString;->getTtsAnnotations(II)Ljava/util/List; +HSPLandroidx/compose/ui/text/AnnotatedString;->getUrlAnnotations(II)Ljava/util/List; +HSPLandroidx/compose/ui/text/AnnotatedString;->hasStringAnnotations(Ljava/lang/String;II)Z +HSPLandroidx/compose/ui/text/AnnotatedString;->length()I +HSPLandroidx/compose/ui/text/AnnotatedString;->subSequence(II)Landroidx/compose/ui/text/AnnotatedString; +HSPLandroidx/compose/ui/text/AnnotatedString;->toString()Ljava/lang/String; +Landroidx/compose/ui/text/AnnotatedString$Builder; +HSPLandroidx/compose/ui/text/AnnotatedString$Builder;->()V +HSPLandroidx/compose/ui/text/AnnotatedString$Builder;->(I)V +HSPLandroidx/compose/ui/text/AnnotatedString$Builder;->(IILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/AnnotatedString$Builder;->append(Ljava/lang/String;)V +HSPLandroidx/compose/ui/text/AnnotatedString$Builder;->pop()V +HSPLandroidx/compose/ui/text/AnnotatedString$Builder;->pop(I)V +HSPLandroidx/compose/ui/text/AnnotatedString$Builder;->pushStyle(Landroidx/compose/ui/text/SpanStyle;)I +HSPLandroidx/compose/ui/text/AnnotatedString$Builder;->toAnnotatedString()Landroidx/compose/ui/text/AnnotatedString; +Landroidx/compose/ui/text/AnnotatedString$Builder$MutableRange; +HSPLandroidx/compose/ui/text/AnnotatedString$Builder$MutableRange;->(Ljava/lang/Object;IILjava/lang/String;)V +HSPLandroidx/compose/ui/text/AnnotatedString$Builder$MutableRange;->(Ljava/lang/Object;IILjava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/AnnotatedString$Builder$MutableRange;->setEnd(I)V +HSPLandroidx/compose/ui/text/AnnotatedString$Builder$MutableRange;->toRange(I)Landroidx/compose/ui/text/AnnotatedString$Range; +Landroidx/compose/ui/text/AnnotatedString$Range; +HSPLandroidx/compose/ui/text/AnnotatedString$Range;->()V +HSPLandroidx/compose/ui/text/AnnotatedString$Range;->(Ljava/lang/Object;II)V +HSPLandroidx/compose/ui/text/AnnotatedString$Range;->(Ljava/lang/Object;IILjava/lang/String;)V +HSPLandroidx/compose/ui/text/AnnotatedString$Range;->component1()Ljava/lang/Object; +HSPLandroidx/compose/ui/text/AnnotatedString$Range;->component2()I +HSPLandroidx/compose/ui/text/AnnotatedString$Range;->component3()I +HSPLandroidx/compose/ui/text/AnnotatedString$Range;->getEnd()I +HSPLandroidx/compose/ui/text/AnnotatedString$Range;->getItem()Ljava/lang/Object; +HSPLandroidx/compose/ui/text/AnnotatedString$Range;->getStart()I +Landroidx/compose/ui/text/AnnotatedStringKt; +HSPLandroidx/compose/ui/text/AnnotatedStringKt;->()V +HSPLandroidx/compose/ui/text/AnnotatedStringKt;->access$filterRanges(Ljava/util/List;II)Ljava/util/List; +HSPLandroidx/compose/ui/text/AnnotatedStringKt;->access$substringWithoutParagraphStyles(Landroidx/compose/ui/text/AnnotatedString;II)Landroidx/compose/ui/text/AnnotatedString; +HSPLandroidx/compose/ui/text/AnnotatedStringKt;->emptyAnnotatedString()Landroidx/compose/ui/text/AnnotatedString; +HSPLandroidx/compose/ui/text/AnnotatedStringKt;->filterRanges(Ljava/util/List;II)Ljava/util/List; +HSPLandroidx/compose/ui/text/AnnotatedStringKt;->getLocalSpanStyles(Landroidx/compose/ui/text/AnnotatedString;II)Ljava/util/List; +HSPLandroidx/compose/ui/text/AnnotatedStringKt;->normalizedParagraphStyles(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/ParagraphStyle;)Ljava/util/List; +HSPLandroidx/compose/ui/text/AnnotatedStringKt;->substringWithoutParagraphStyles(Landroidx/compose/ui/text/AnnotatedString;II)Landroidx/compose/ui/text/AnnotatedString; +Landroidx/compose/ui/text/EmojiSupportMatch; +HSPLandroidx/compose/ui/text/EmojiSupportMatch;->()V +HSPLandroidx/compose/ui/text/EmojiSupportMatch;->(I)V +HSPLandroidx/compose/ui/text/EmojiSupportMatch;->access$getDefault$cp()I +HSPLandroidx/compose/ui/text/EmojiSupportMatch;->access$getNone$cp()I +HSPLandroidx/compose/ui/text/EmojiSupportMatch;->box-impl(I)Landroidx/compose/ui/text/EmojiSupportMatch; +HSPLandroidx/compose/ui/text/EmojiSupportMatch;->constructor-impl(I)I +HSPLandroidx/compose/ui/text/EmojiSupportMatch;->equals-impl0(II)Z +HSPLandroidx/compose/ui/text/EmojiSupportMatch;->unbox-impl()I +Landroidx/compose/ui/text/EmojiSupportMatch$Companion; +HSPLandroidx/compose/ui/text/EmojiSupportMatch$Companion;->()V +HSPLandroidx/compose/ui/text/EmojiSupportMatch$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/EmojiSupportMatch$Companion;->getDefault-_3YsG6Y()I +HSPLandroidx/compose/ui/text/EmojiSupportMatch$Companion;->getNone-_3YsG6Y()I +Landroidx/compose/ui/text/MultiParagraph; +HSPLandroidx/compose/ui/text/MultiParagraph;->()V +HSPLandroidx/compose/ui/text/MultiParagraph;->(Landroidx/compose/ui/text/MultiParagraphIntrinsics;JIZ)V +HSPLandroidx/compose/ui/text/MultiParagraph;->(Landroidx/compose/ui/text/MultiParagraphIntrinsics;JIZLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/MultiParagraph;->getAnnotatedString()Landroidx/compose/ui/text/AnnotatedString; +HSPLandroidx/compose/ui/text/MultiParagraph;->getBoundingBox(I)Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/ui/text/MultiParagraph;->getCursorRect(I)Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/ui/text/MultiParagraph;->getDidExceedMaxLines()Z +HSPLandroidx/compose/ui/text/MultiParagraph;->getFirstBaseline()F +HSPLandroidx/compose/ui/text/MultiParagraph;->getHeight()F +HSPLandroidx/compose/ui/text/MultiParagraph;->getIntrinsics()Landroidx/compose/ui/text/MultiParagraphIntrinsics; +HSPLandroidx/compose/ui/text/MultiParagraph;->getLastBaseline()F +HSPLandroidx/compose/ui/text/MultiParagraph;->getLineBottom(I)F +HSPLandroidx/compose/ui/text/MultiParagraph;->getPlaceholderRects()Ljava/util/List; +HSPLandroidx/compose/ui/text/MultiParagraph;->getWidth()F +HSPLandroidx/compose/ui/text/MultiParagraph;->paint-LG529CI$default(Landroidx/compose/ui/text/MultiParagraph;Landroidx/compose/ui/graphics/Canvas;JLandroidx/compose/ui/graphics/Shadow;Landroidx/compose/ui/text/style/TextDecoration;Landroidx/compose/ui/graphics/drawscope/DrawStyle;IILjava/lang/Object;)V +HSPLandroidx/compose/ui/text/MultiParagraph;->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 +HSPLandroidx/compose/ui/text/MultiParagraph;->requireIndexInRange(I)V +HSPLandroidx/compose/ui/text/MultiParagraph;->requireIndexInRangeInclusiveEnd(I)V +HSPLandroidx/compose/ui/text/MultiParagraph;->requireLineIndexInRange(I)V +Landroidx/compose/ui/text/MultiParagraphIntrinsics; +HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics;->()V +HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics;->(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;Ljava/util/List;Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/text/font/FontFamily$Resolver;)V +HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics;->access$resolveTextDirection(Landroidx/compose/ui/text/MultiParagraphIntrinsics;Landroidx/compose/ui/text/ParagraphStyle;Landroidx/compose/ui/text/ParagraphStyle;)Landroidx/compose/ui/text/ParagraphStyle; +HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics;->getAnnotatedString()Landroidx/compose/ui/text/AnnotatedString; +HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics;->getHasStaleResolvedFonts()Z +HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics;->getInfoList$ui_text_release()Ljava/util/List; +HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics;->getMaxIntrinsicWidth()F +HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics;->getPlaceholders()Ljava/util/List; +HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics;->resolveTextDirection(Landroidx/compose/ui/text/ParagraphStyle;Landroidx/compose/ui/text/ParagraphStyle;)Landroidx/compose/ui/text/ParagraphStyle; +Landroidx/compose/ui/text/MultiParagraphIntrinsics$maxIntrinsicWidth$2; +HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics$maxIntrinsicWidth$2;->(Landroidx/compose/ui/text/MultiParagraphIntrinsics;)V +HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics$maxIntrinsicWidth$2;->invoke()Ljava/lang/Float; +HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics$maxIntrinsicWidth$2;->invoke()Ljava/lang/Object; +Landroidx/compose/ui/text/MultiParagraphIntrinsics$minIntrinsicWidth$2; +HSPLandroidx/compose/ui/text/MultiParagraphIntrinsics$minIntrinsicWidth$2;->(Landroidx/compose/ui/text/MultiParagraphIntrinsics;)V +Landroidx/compose/ui/text/MultiParagraphIntrinsicsKt; +HSPLandroidx/compose/ui/text/MultiParagraphIntrinsicsKt;->access$getLocalPlaceholders(Ljava/util/List;II)Ljava/util/List; +HSPLandroidx/compose/ui/text/MultiParagraphIntrinsicsKt;->getLocalPlaceholders(Ljava/util/List;II)Ljava/util/List; +Landroidx/compose/ui/text/MultiParagraphKt; +HSPLandroidx/compose/ui/text/MultiParagraphKt;->findParagraphByIndex(Ljava/util/List;I)I +HSPLandroidx/compose/ui/text/MultiParagraphKt;->findParagraphByLineIndex(Ljava/util/List;I)I +Landroidx/compose/ui/text/Paragraph; +Landroidx/compose/ui/text/ParagraphInfo; +HSPLandroidx/compose/ui/text/ParagraphInfo;->(Landroidx/compose/ui/text/Paragraph;IIIIFF)V +HSPLandroidx/compose/ui/text/ParagraphInfo;->getEndIndex()I +HSPLandroidx/compose/ui/text/ParagraphInfo;->getEndLineIndex()I +HSPLandroidx/compose/ui/text/ParagraphInfo;->getParagraph()Landroidx/compose/ui/text/Paragraph; +HSPLandroidx/compose/ui/text/ParagraphInfo;->getStartIndex()I +HSPLandroidx/compose/ui/text/ParagraphInfo;->getStartLineIndex()I +HSPLandroidx/compose/ui/text/ParagraphInfo;->toGlobal(Landroidx/compose/ui/geometry/Rect;)Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/ui/text/ParagraphInfo;->toGlobalYPosition(F)F +HSPLandroidx/compose/ui/text/ParagraphInfo;->toLocalIndex(I)I +HSPLandroidx/compose/ui/text/ParagraphInfo;->toLocalLineIndex(I)I +Landroidx/compose/ui/text/ParagraphIntrinsicInfo; +HSPLandroidx/compose/ui/text/ParagraphIntrinsicInfo;->(Landroidx/compose/ui/text/ParagraphIntrinsics;II)V +HSPLandroidx/compose/ui/text/ParagraphIntrinsicInfo;->getEndIndex()I +HSPLandroidx/compose/ui/text/ParagraphIntrinsicInfo;->getIntrinsics()Landroidx/compose/ui/text/ParagraphIntrinsics; +HSPLandroidx/compose/ui/text/ParagraphIntrinsicInfo;->getStartIndex()I +Landroidx/compose/ui/text/ParagraphIntrinsics; +Landroidx/compose/ui/text/ParagraphIntrinsicsKt; +HSPLandroidx/compose/ui/text/ParagraphIntrinsicsKt;->ParagraphIntrinsics(Ljava/lang/String;Landroidx/compose/ui/text/TextStyle;Ljava/util/List;Ljava/util/List;Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/text/font/FontFamily$Resolver;)Landroidx/compose/ui/text/ParagraphIntrinsics; +Landroidx/compose/ui/text/ParagraphKt; +HSPLandroidx/compose/ui/text/ParagraphKt;->Paragraph-UdtVg6A$default(Ljava/lang/String;Landroidx/compose/ui/text/TextStyle;JLandroidx/compose/ui/unit/Density;Landroidx/compose/ui/text/font/FontFamily$Resolver;Ljava/util/List;Ljava/util/List;IZILjava/lang/Object;)Landroidx/compose/ui/text/Paragraph; +HSPLandroidx/compose/ui/text/ParagraphKt;->Paragraph-UdtVg6A(Ljava/lang/String;Landroidx/compose/ui/text/TextStyle;JLandroidx/compose/ui/unit/Density;Landroidx/compose/ui/text/font/FontFamily$Resolver;Ljava/util/List;Ljava/util/List;IZ)Landroidx/compose/ui/text/Paragraph; +HSPLandroidx/compose/ui/text/ParagraphKt;->Paragraph-_EkL_-Y(Landroidx/compose/ui/text/ParagraphIntrinsics;JIZ)Landroidx/compose/ui/text/Paragraph; +HSPLandroidx/compose/ui/text/ParagraphKt;->ceilToInt(F)I +Landroidx/compose/ui/text/ParagraphStyle; +HSPLandroidx/compose/ui/text/ParagraphStyle;->()V +HSPLandroidx/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;)V +HSPLandroidx/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;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/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;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/ParagraphStyle;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/text/ParagraphStyle;->getHyphens-EaSxIns()Landroidx/compose/ui/text/style/Hyphens; +HSPLandroidx/compose/ui/text/ParagraphStyle;->getHyphensOrDefault-vmbZdU8$ui_text_release()I +HSPLandroidx/compose/ui/text/ParagraphStyle;->getLineBreak-LgCVezo()Landroidx/compose/ui/text/style/LineBreak; +HSPLandroidx/compose/ui/text/ParagraphStyle;->getLineBreakOrDefault-rAG3T2k$ui_text_release()I +HSPLandroidx/compose/ui/text/ParagraphStyle;->getLineHeight-XSAIIZE()J +HSPLandroidx/compose/ui/text/ParagraphStyle;->getLineHeightStyle()Landroidx/compose/ui/text/style/LineHeightStyle; +HSPLandroidx/compose/ui/text/ParagraphStyle;->getPlatformStyle()Landroidx/compose/ui/text/PlatformParagraphStyle; +HSPLandroidx/compose/ui/text/ParagraphStyle;->getTextAlign-buA522U()Landroidx/compose/ui/text/style/TextAlign; +HSPLandroidx/compose/ui/text/ParagraphStyle;->getTextAlignOrDefault-e0LSkKk$ui_text_release()I +HSPLandroidx/compose/ui/text/ParagraphStyle;->getTextDirection-mmuk1to()Landroidx/compose/ui/text/style/TextDirection; +HSPLandroidx/compose/ui/text/ParagraphStyle;->getTextIndent()Landroidx/compose/ui/text/style/TextIndent; +HSPLandroidx/compose/ui/text/ParagraphStyle;->getTextMotion()Landroidx/compose/ui/text/style/TextMotion; +HSPLandroidx/compose/ui/text/ParagraphStyle;->merge(Landroidx/compose/ui/text/ParagraphStyle;)Landroidx/compose/ui/text/ParagraphStyle; +Landroidx/compose/ui/text/ParagraphStyleKt; +HSPLandroidx/compose/ui/text/ParagraphStyleKt;->()V +HSPLandroidx/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; +HSPLandroidx/compose/ui/text/ParagraphStyleKt;->mergePlatformStyle(Landroidx/compose/ui/text/ParagraphStyle;Landroidx/compose/ui/text/PlatformParagraphStyle;)Landroidx/compose/ui/text/PlatformParagraphStyle; +HSPLandroidx/compose/ui/text/ParagraphStyleKt;->resolveParagraphStyleDefaults(Landroidx/compose/ui/text/ParagraphStyle;Landroidx/compose/ui/unit/LayoutDirection;)Landroidx/compose/ui/text/ParagraphStyle; +Landroidx/compose/ui/text/PlatformParagraphStyle; +HSPLandroidx/compose/ui/text/PlatformParagraphStyle;->()V +HSPLandroidx/compose/ui/text/PlatformParagraphStyle;->()V +HSPLandroidx/compose/ui/text/PlatformParagraphStyle;->(IZ)V +HSPLandroidx/compose/ui/text/PlatformParagraphStyle;->(IZLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/PlatformParagraphStyle;->(Z)V +HSPLandroidx/compose/ui/text/PlatformParagraphStyle;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/text/PlatformParagraphStyle;->getEmojiSupportMatch-_3YsG6Y()I +HSPLandroidx/compose/ui/text/PlatformParagraphStyle;->getIncludeFontPadding()Z +HSPLandroidx/compose/ui/text/PlatformParagraphStyle;->merge(Landroidx/compose/ui/text/PlatformParagraphStyle;)Landroidx/compose/ui/text/PlatformParagraphStyle; +Landroidx/compose/ui/text/PlatformParagraphStyle$Companion; +HSPLandroidx/compose/ui/text/PlatformParagraphStyle$Companion;->()V +HSPLandroidx/compose/ui/text/PlatformParagraphStyle$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/text/PlatformSpanStyle; +Landroidx/compose/ui/text/PlatformTextStyle; +HSPLandroidx/compose/ui/text/PlatformTextStyle;->()V +HSPLandroidx/compose/ui/text/PlatformTextStyle;->(Landroidx/compose/ui/text/PlatformSpanStyle;Landroidx/compose/ui/text/PlatformParagraphStyle;)V +HSPLandroidx/compose/ui/text/PlatformTextStyle;->(Z)V +HSPLandroidx/compose/ui/text/PlatformTextStyle;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/text/PlatformTextStyle;->getParagraphStyle()Landroidx/compose/ui/text/PlatformParagraphStyle; +HSPLandroidx/compose/ui/text/PlatformTextStyle;->getSpanStyle()Landroidx/compose/ui/text/PlatformSpanStyle; +Landroidx/compose/ui/text/SpanStyle; +HSPLandroidx/compose/ui/text/SpanStyle;->()V +HSPLandroidx/compose/ui/text/SpanStyle;->(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 +HSPLandroidx/compose/ui/text/SpanStyle;->(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;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/SpanStyle;->(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;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/SpanStyle;->(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 +HSPLandroidx/compose/ui/text/SpanStyle;->(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;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/SpanStyle;->copy-GSF8kmg$default(Landroidx/compose/ui/text/SpanStyle;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;ILjava/lang/Object;)Landroidx/compose/ui/text/SpanStyle; +HSPLandroidx/compose/ui/text/SpanStyle;->copy-GSF8kmg(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;)Landroidx/compose/ui/text/SpanStyle; +HSPLandroidx/compose/ui/text/SpanStyle;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/text/SpanStyle;->getAlpha()F +HSPLandroidx/compose/ui/text/SpanStyle;->getBackground-0d7_KjU()J +HSPLandroidx/compose/ui/text/SpanStyle;->getBaselineShift-5SSeXJ0()Landroidx/compose/ui/text/style/BaselineShift; +HSPLandroidx/compose/ui/text/SpanStyle;->getBrush()Landroidx/compose/ui/graphics/Brush; +HSPLandroidx/compose/ui/text/SpanStyle;->getColor-0d7_KjU()J +HSPLandroidx/compose/ui/text/SpanStyle;->getDrawStyle()Landroidx/compose/ui/graphics/drawscope/DrawStyle; +HSPLandroidx/compose/ui/text/SpanStyle;->getFontFamily()Landroidx/compose/ui/text/font/FontFamily; +HSPLandroidx/compose/ui/text/SpanStyle;->getFontFeatureSettings()Ljava/lang/String; +HSPLandroidx/compose/ui/text/SpanStyle;->getFontSize-XSAIIZE()J +HSPLandroidx/compose/ui/text/SpanStyle;->getFontStyle-4Lr2A7w()Landroidx/compose/ui/text/font/FontStyle; +HSPLandroidx/compose/ui/text/SpanStyle;->getFontSynthesis-ZQGJjVo()Landroidx/compose/ui/text/font/FontSynthesis; +HSPLandroidx/compose/ui/text/SpanStyle;->getFontWeight()Landroidx/compose/ui/text/font/FontWeight; +HSPLandroidx/compose/ui/text/SpanStyle;->getLetterSpacing-XSAIIZE()J +HSPLandroidx/compose/ui/text/SpanStyle;->getLocaleList()Landroidx/compose/ui/text/intl/LocaleList; +HSPLandroidx/compose/ui/text/SpanStyle;->getPlatformStyle()Landroidx/compose/ui/text/PlatformSpanStyle; +HSPLandroidx/compose/ui/text/SpanStyle;->getShadow()Landroidx/compose/ui/graphics/Shadow; +HSPLandroidx/compose/ui/text/SpanStyle;->getTextDecoration()Landroidx/compose/ui/text/style/TextDecoration; +HSPLandroidx/compose/ui/text/SpanStyle;->getTextForegroundStyle$ui_text_release()Landroidx/compose/ui/text/style/TextForegroundStyle; +HSPLandroidx/compose/ui/text/SpanStyle;->getTextGeometricTransform()Landroidx/compose/ui/text/style/TextGeometricTransform; +HSPLandroidx/compose/ui/text/SpanStyle;->hasSameLayoutAffectingAttributes$ui_text_release(Landroidx/compose/ui/text/SpanStyle;)Z +HSPLandroidx/compose/ui/text/SpanStyle;->hasSameNonLayoutAttributes$ui_text_release(Landroidx/compose/ui/text/SpanStyle;)Z +HSPLandroidx/compose/ui/text/SpanStyle;->merge(Landroidx/compose/ui/text/SpanStyle;)Landroidx/compose/ui/text/SpanStyle; +Landroidx/compose/ui/text/SpanStyleKt; +HSPLandroidx/compose/ui/text/SpanStyleKt;->()V +HSPLandroidx/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; +HSPLandroidx/compose/ui/text/SpanStyleKt;->mergePlatformStyle(Landroidx/compose/ui/text/SpanStyle;Landroidx/compose/ui/text/PlatformSpanStyle;)Landroidx/compose/ui/text/PlatformSpanStyle; +HSPLandroidx/compose/ui/text/SpanStyleKt;->resolveSpanStyleDefaults(Landroidx/compose/ui/text/SpanStyle;)Landroidx/compose/ui/text/SpanStyle; +Landroidx/compose/ui/text/SpanStyleKt$resolveSpanStyleDefaults$1; +HSPLandroidx/compose/ui/text/SpanStyleKt$resolveSpanStyleDefaults$1;->()V +HSPLandroidx/compose/ui/text/SpanStyleKt$resolveSpanStyleDefaults$1;->()V +Landroidx/compose/ui/text/TextLayoutInput; +HSPLandroidx/compose/ui/text/TextLayoutInput;->()V +HSPLandroidx/compose/ui/text/TextLayoutInput;->(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;Ljava/util/List;IZILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/text/font/Font$ResourceLoader;Landroidx/compose/ui/text/font/FontFamily$Resolver;J)V +HSPLandroidx/compose/ui/text/TextLayoutInput;->(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;Ljava/util/List;IZILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/text/font/FontFamily$Resolver;J)V +HSPLandroidx/compose/ui/text/TextLayoutInput;->(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/TextStyle;Ljava/util/List;IZILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/text/font/FontFamily$Resolver;JLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/TextLayoutInput;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/text/TextLayoutInput;->getConstraints-msEJaDk()J +HSPLandroidx/compose/ui/text/TextLayoutInput;->getDensity()Landroidx/compose/ui/unit/Density; +HSPLandroidx/compose/ui/text/TextLayoutInput;->getFontFamilyResolver()Landroidx/compose/ui/text/font/FontFamily$Resolver; +HSPLandroidx/compose/ui/text/TextLayoutInput;->getLayoutDirection()Landroidx/compose/ui/unit/LayoutDirection; +HSPLandroidx/compose/ui/text/TextLayoutInput;->getMaxLines()I +HSPLandroidx/compose/ui/text/TextLayoutInput;->getOverflow-gIe3tQ8()I +HSPLandroidx/compose/ui/text/TextLayoutInput;->getPlaceholders()Ljava/util/List; +HSPLandroidx/compose/ui/text/TextLayoutInput;->getSoftWrap()Z +HSPLandroidx/compose/ui/text/TextLayoutInput;->getStyle()Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/ui/text/TextLayoutInput;->getText()Landroidx/compose/ui/text/AnnotatedString; +Landroidx/compose/ui/text/TextLayoutResult; +HSPLandroidx/compose/ui/text/TextLayoutResult;->()V +HSPLandroidx/compose/ui/text/TextLayoutResult;->(Landroidx/compose/ui/text/TextLayoutInput;Landroidx/compose/ui/text/MultiParagraph;J)V +HSPLandroidx/compose/ui/text/TextLayoutResult;->(Landroidx/compose/ui/text/TextLayoutInput;Landroidx/compose/ui/text/MultiParagraph;JLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/TextLayoutResult;->copy-O0kMr_c(Landroidx/compose/ui/text/TextLayoutInput;J)Landroidx/compose/ui/text/TextLayoutResult; +HSPLandroidx/compose/ui/text/TextLayoutResult;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/text/TextLayoutResult;->getBoundingBox(I)Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/ui/text/TextLayoutResult;->getCursorRect(I)Landroidx/compose/ui/geometry/Rect; +HSPLandroidx/compose/ui/text/TextLayoutResult;->getDidOverflowHeight()Z +HSPLandroidx/compose/ui/text/TextLayoutResult;->getDidOverflowWidth()Z +HSPLandroidx/compose/ui/text/TextLayoutResult;->getFirstBaseline()F +HSPLandroidx/compose/ui/text/TextLayoutResult;->getHasVisualOverflow()Z +HSPLandroidx/compose/ui/text/TextLayoutResult;->getLastBaseline()F +HSPLandroidx/compose/ui/text/TextLayoutResult;->getLayoutInput()Landroidx/compose/ui/text/TextLayoutInput; +HSPLandroidx/compose/ui/text/TextLayoutResult;->getLineBottom(I)F +HSPLandroidx/compose/ui/text/TextLayoutResult;->getMultiParagraph()Landroidx/compose/ui/text/MultiParagraph; +HSPLandroidx/compose/ui/text/TextLayoutResult;->getSize-YbymL2g()J +Landroidx/compose/ui/text/TextPainter; +HSPLandroidx/compose/ui/text/TextPainter;->()V +HSPLandroidx/compose/ui/text/TextPainter;->()V +HSPLandroidx/compose/ui/text/TextPainter;->paint(Landroidx/compose/ui/graphics/Canvas;Landroidx/compose/ui/text/TextLayoutResult;)V +Landroidx/compose/ui/text/TextRange; +HSPLandroidx/compose/ui/text/TextRange;->()V +HSPLandroidx/compose/ui/text/TextRange;->(J)V +HSPLandroidx/compose/ui/text/TextRange;->access$getZero$cp()J +HSPLandroidx/compose/ui/text/TextRange;->box-impl(J)Landroidx/compose/ui/text/TextRange; +HSPLandroidx/compose/ui/text/TextRange;->constructor-impl(J)J +HSPLandroidx/compose/ui/text/TextRange;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/text/TextRange;->equals-impl(JLjava/lang/Object;)Z +HSPLandroidx/compose/ui/text/TextRange;->equals-impl0(JJ)Z +HSPLandroidx/compose/ui/text/TextRange;->getCollapsed-impl(J)Z +HSPLandroidx/compose/ui/text/TextRange;->getEnd-impl(J)I +HSPLandroidx/compose/ui/text/TextRange;->getMax-impl(J)I +HSPLandroidx/compose/ui/text/TextRange;->getMin-impl(J)I +HSPLandroidx/compose/ui/text/TextRange;->getStart-impl(J)I +HSPLandroidx/compose/ui/text/TextRange;->unbox-impl()J +Landroidx/compose/ui/text/TextRange$Companion; +HSPLandroidx/compose/ui/text/TextRange$Companion;->()V +HSPLandroidx/compose/ui/text/TextRange$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/TextRange$Companion;->getZero-d9O1mEE()J +Landroidx/compose/ui/text/TextRangeKt; +HSPLandroidx/compose/ui/text/TextRangeKt;->TextRange(I)J +HSPLandroidx/compose/ui/text/TextRangeKt;->TextRange(II)J +HSPLandroidx/compose/ui/text/TextRangeKt;->coerceIn-8ffj60Q(JII)J +HSPLandroidx/compose/ui/text/TextRangeKt;->packWithCheck(II)J +Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/ui/text/TextStyle;->()V +HSPLandroidx/compose/ui/text/TextStyle;->(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/graphics/drawscope/DrawStyle;Landroidx/compose/ui/text/style/TextAlign;Landroidx/compose/ui/text/style/TextDirection;JLandroidx/compose/ui/text/style/TextIndent;Landroidx/compose/ui/text/PlatformTextStyle;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 +HSPLandroidx/compose/ui/text/TextStyle;->(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/graphics/drawscope/DrawStyle;Landroidx/compose/ui/text/style/TextAlign;Landroidx/compose/ui/text/style/TextDirection;JLandroidx/compose/ui/text/style/TextIndent;Landroidx/compose/ui/text/PlatformTextStyle;Landroidx/compose/ui/text/style/LineHeightStyle;Landroidx/compose/ui/text/style/LineBreak;Landroidx/compose/ui/text/style/Hyphens;Landroidx/compose/ui/text/style/TextMotion;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/TextStyle;->(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/graphics/drawscope/DrawStyle;Landroidx/compose/ui/text/style/TextAlign;Landroidx/compose/ui/text/style/TextDirection;JLandroidx/compose/ui/text/style/TextIndent;Landroidx/compose/ui/text/PlatformTextStyle;Landroidx/compose/ui/text/style/LineHeightStyle;Landroidx/compose/ui/text/style/LineBreak;Landroidx/compose/ui/text/style/Hyphens;Landroidx/compose/ui/text/style/TextMotion;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/TextStyle;->(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/style/TextAlign;Landroidx/compose/ui/text/style/TextDirection;JLandroidx/compose/ui/text/style/TextIndent;Landroidx/compose/ui/text/PlatformTextStyle;Landroidx/compose/ui/text/style/LineHeightStyle;Landroidx/compose/ui/text/style/LineBreak;Landroidx/compose/ui/text/style/Hyphens;)V +HSPLandroidx/compose/ui/text/TextStyle;->(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/style/TextAlign;Landroidx/compose/ui/text/style/TextDirection;JLandroidx/compose/ui/text/style/TextIndent;Landroidx/compose/ui/text/PlatformTextStyle;Landroidx/compose/ui/text/style/LineHeightStyle;Landroidx/compose/ui/text/style/LineBreak;Landroidx/compose/ui/text/style/Hyphens;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/TextStyle;->(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/style/TextAlign;Landroidx/compose/ui/text/style/TextDirection;JLandroidx/compose/ui/text/style/TextIndent;Landroidx/compose/ui/text/PlatformTextStyle;Landroidx/compose/ui/text/style/LineHeightStyle;Landroidx/compose/ui/text/style/LineBreak;Landroidx/compose/ui/text/style/Hyphens;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/TextStyle;->(Landroidx/compose/ui/text/SpanStyle;Landroidx/compose/ui/text/ParagraphStyle;)V +HSPLandroidx/compose/ui/text/TextStyle;->(Landroidx/compose/ui/text/SpanStyle;Landroidx/compose/ui/text/ParagraphStyle;Landroidx/compose/ui/text/PlatformTextStyle;)V +HSPLandroidx/compose/ui/text/TextStyle;->access$getDefault$cp()Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/ui/text/TextStyle;->copy-CXVQc50$default(Landroidx/compose/ui/text/TextStyle;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/style/TextAlign;Landroidx/compose/ui/text/style/TextDirection;JLandroidx/compose/ui/text/style/TextIndent;Landroidx/compose/ui/text/PlatformTextStyle;Landroidx/compose/ui/text/style/LineHeightStyle;Landroidx/compose/ui/text/style/LineBreak;Landroidx/compose/ui/text/style/Hyphens;ILjava/lang/Object;)Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/ui/text/TextStyle;->copy-CXVQc50(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/style/TextAlign;Landroidx/compose/ui/text/style/TextDirection;JLandroidx/compose/ui/text/style/TextIndent;Landroidx/compose/ui/text/PlatformTextStyle;Landroidx/compose/ui/text/style/LineHeightStyle;Landroidx/compose/ui/text/style/LineBreak;Landroidx/compose/ui/text/style/Hyphens;)Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/ui/text/TextStyle;->copy-v2rsoow$default(Landroidx/compose/ui/text/TextStyle;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/graphics/drawscope/DrawStyle;Landroidx/compose/ui/text/style/TextAlign;Landroidx/compose/ui/text/style/TextDirection;JLandroidx/compose/ui/text/style/TextIndent;Landroidx/compose/ui/text/PlatformTextStyle;Landroidx/compose/ui/text/style/LineHeightStyle;Landroidx/compose/ui/text/style/LineBreak;Landroidx/compose/ui/text/style/Hyphens;Landroidx/compose/ui/text/style/TextMotion;ILjava/lang/Object;)Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/ui/text/TextStyle;->copy-v2rsoow(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/graphics/drawscope/DrawStyle;Landroidx/compose/ui/text/style/TextAlign;Landroidx/compose/ui/text/style/TextDirection;JLandroidx/compose/ui/text/style/TextIndent;Landroidx/compose/ui/text/PlatformTextStyle;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/TextStyle; +HSPLandroidx/compose/ui/text/TextStyle;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/text/TextStyle;->getAlpha()F +HSPLandroidx/compose/ui/text/TextStyle;->getBrush()Landroidx/compose/ui/graphics/Brush; +HSPLandroidx/compose/ui/text/TextStyle;->getColor-0d7_KjU()J +HSPLandroidx/compose/ui/text/TextStyle;->getDrawStyle()Landroidx/compose/ui/graphics/drawscope/DrawStyle; +HSPLandroidx/compose/ui/text/TextStyle;->getFontFamily()Landroidx/compose/ui/text/font/FontFamily; +HSPLandroidx/compose/ui/text/TextStyle;->getFontSize-XSAIIZE()J +HSPLandroidx/compose/ui/text/TextStyle;->getFontStyle-4Lr2A7w()Landroidx/compose/ui/text/font/FontStyle; +HSPLandroidx/compose/ui/text/TextStyle;->getFontSynthesis-ZQGJjVo()Landroidx/compose/ui/text/font/FontSynthesis; +HSPLandroidx/compose/ui/text/TextStyle;->getFontWeight()Landroidx/compose/ui/text/font/FontWeight; +HSPLandroidx/compose/ui/text/TextStyle;->getLetterSpacing-XSAIIZE()J +HSPLandroidx/compose/ui/text/TextStyle;->getLineBreak-LgCVezo()Landroidx/compose/ui/text/style/LineBreak; +HSPLandroidx/compose/ui/text/TextStyle;->getLineHeight-XSAIIZE()J +HSPLandroidx/compose/ui/text/TextStyle;->getLineHeightStyle()Landroidx/compose/ui/text/style/LineHeightStyle; +HSPLandroidx/compose/ui/text/TextStyle;->getLocaleList()Landroidx/compose/ui/text/intl/LocaleList; +HSPLandroidx/compose/ui/text/TextStyle;->getParagraphStyle$ui_text_release()Landroidx/compose/ui/text/ParagraphStyle; +HSPLandroidx/compose/ui/text/TextStyle;->getPlatformStyle()Landroidx/compose/ui/text/PlatformTextStyle; +HSPLandroidx/compose/ui/text/TextStyle;->getShadow()Landroidx/compose/ui/graphics/Shadow; +HSPLandroidx/compose/ui/text/TextStyle;->getSpanStyle$ui_text_release()Landroidx/compose/ui/text/SpanStyle; +HSPLandroidx/compose/ui/text/TextStyle;->getTextAlign-buA522U()Landroidx/compose/ui/text/style/TextAlign; +HSPLandroidx/compose/ui/text/TextStyle;->getTextDecoration()Landroidx/compose/ui/text/style/TextDecoration; +HSPLandroidx/compose/ui/text/TextStyle;->getTextDirection-mmuk1to()Landroidx/compose/ui/text/style/TextDirection; +HSPLandroidx/compose/ui/text/TextStyle;->getTextIndent()Landroidx/compose/ui/text/style/TextIndent; +HSPLandroidx/compose/ui/text/TextStyle;->getTextMotion()Landroidx/compose/ui/text/style/TextMotion; +HSPLandroidx/compose/ui/text/TextStyle;->hasSameDrawAffectingAttributes(Landroidx/compose/ui/text/TextStyle;)Z +HSPLandroidx/compose/ui/text/TextStyle;->hasSameLayoutAffectingAttributes(Landroidx/compose/ui/text/TextStyle;)Z +HSPLandroidx/compose/ui/text/TextStyle;->merge(Landroidx/compose/ui/text/ParagraphStyle;)Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/ui/text/TextStyle;->merge(Landroidx/compose/ui/text/TextStyle;)Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/ui/text/TextStyle;->toParagraphStyle()Landroidx/compose/ui/text/ParagraphStyle; +HSPLandroidx/compose/ui/text/TextStyle;->toSpanStyle()Landroidx/compose/ui/text/SpanStyle; +Landroidx/compose/ui/text/TextStyle$Companion; +HSPLandroidx/compose/ui/text/TextStyle$Companion;->()V +HSPLandroidx/compose/ui/text/TextStyle$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/TextStyle$Companion;->getDefault()Landroidx/compose/ui/text/TextStyle; +Landroidx/compose/ui/text/TextStyleKt; +HSPLandroidx/compose/ui/text/TextStyleKt;->access$createPlatformTextStyleInternal(Landroidx/compose/ui/text/PlatformSpanStyle;Landroidx/compose/ui/text/PlatformParagraphStyle;)Landroidx/compose/ui/text/PlatformTextStyle; +HSPLandroidx/compose/ui/text/TextStyleKt;->createPlatformTextStyleInternal(Landroidx/compose/ui/text/PlatformSpanStyle;Landroidx/compose/ui/text/PlatformParagraphStyle;)Landroidx/compose/ui/text/PlatformTextStyle; +HSPLandroidx/compose/ui/text/TextStyleKt;->resolveDefaults(Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/unit/LayoutDirection;)Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/ui/text/TextStyleKt;->resolveTextDirection-Yj3eThk(Landroidx/compose/ui/unit/LayoutDirection;Landroidx/compose/ui/text/style/TextDirection;)I +Landroidx/compose/ui/text/TextStyleKt$WhenMappings; +HSPLandroidx/compose/ui/text/TextStyleKt$WhenMappings;->()V +Landroidx/compose/ui/text/android/BoringLayoutFactory; +HSPLandroidx/compose/ui/text/android/BoringLayoutFactory;->()V +HSPLandroidx/compose/ui/text/android/BoringLayoutFactory;->()V +HSPLandroidx/compose/ui/text/android/BoringLayoutFactory;->create(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/BoringLayout$Metrics;Landroid/text/Layout$Alignment;ZZLandroid/text/TextUtils$TruncateAt;I)Landroid/text/BoringLayout; +HSPLandroidx/compose/ui/text/android/BoringLayoutFactory;->measure(Ljava/lang/CharSequence;Landroid/text/TextPaint;Landroid/text/TextDirectionHeuristic;)Landroid/text/BoringLayout$Metrics; +Landroidx/compose/ui/text/android/BoringLayoutFactory33; +HSPLandroidx/compose/ui/text/android/BoringLayoutFactory33;->()V +HSPLandroidx/compose/ui/text/android/BoringLayoutFactory33;->()V +HSPLandroidx/compose/ui/text/android/BoringLayoutFactory33;->create(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFLandroid/text/BoringLayout$Metrics;ZZLandroid/text/TextUtils$TruncateAt;I)Landroid/text/BoringLayout; +HSPLandroidx/compose/ui/text/android/BoringLayoutFactory33;->isBoring(Ljava/lang/CharSequence;Landroid/text/TextPaint;Landroid/text/TextDirectionHeuristic;)Landroid/text/BoringLayout$Metrics; +Landroidx/compose/ui/text/android/CharSequenceCharacterIterator; +HSPLandroidx/compose/ui/text/android/CharSequenceCharacterIterator;->(Ljava/lang/CharSequence;II)V +HSPLandroidx/compose/ui/text/android/CharSequenceCharacterIterator;->current()C +HSPLandroidx/compose/ui/text/android/CharSequenceCharacterIterator;->first()C +HSPLandroidx/compose/ui/text/android/CharSequenceCharacterIterator;->getBeginIndex()I +HSPLandroidx/compose/ui/text/android/CharSequenceCharacterIterator;->getEndIndex()I +HSPLandroidx/compose/ui/text/android/CharSequenceCharacterIterator;->getIndex()I +HSPLandroidx/compose/ui/text/android/CharSequenceCharacterIterator;->next()C +HSPLandroidx/compose/ui/text/android/CharSequenceCharacterIterator;->setIndex(I)C +Landroidx/compose/ui/text/android/LayoutCompatKt; +HSPLandroidx/compose/ui/text/android/LayoutCompatKt;->getLineForOffset(Landroid/text/Layout;IZ)I +Landroidx/compose/ui/text/android/LayoutHelper; +HSPLandroidx/compose/ui/text/android/LayoutHelper;->(Landroid/text/Layout;)V +HSPLandroidx/compose/ui/text/android/LayoutHelper;->getDownstreamHorizontal(IZ)F +HSPLandroidx/compose/ui/text/android/LayoutHelper;->getHorizontalPosition(IZZ)F +Landroidx/compose/ui/text/android/LayoutIntrinsics; +HSPLandroidx/compose/ui/text/android/LayoutIntrinsics;->(Ljava/lang/CharSequence;Landroid/text/TextPaint;I)V +HSPLandroidx/compose/ui/text/android/LayoutIntrinsics;->getBoringMetrics()Landroid/text/BoringLayout$Metrics; +HSPLandroidx/compose/ui/text/android/LayoutIntrinsics;->getMaxIntrinsicWidth()F +HSPLandroidx/compose/ui/text/android/LayoutIntrinsics;->getMinIntrinsicWidth()F +Landroidx/compose/ui/text/android/LayoutIntrinsicsKt; +HSPLandroidx/compose/ui/text/android/LayoutIntrinsicsKt;->$r8$lambda$DtXonrOPJPXM49GdHH_fq-Et3g0(Lkotlin/Pair;Lkotlin/Pair;)I +HSPLandroidx/compose/ui/text/android/LayoutIntrinsicsKt;->access$shouldIncreaseMaxIntrinsic(FLjava/lang/CharSequence;Landroid/text/TextPaint;)Z +HSPLandroidx/compose/ui/text/android/LayoutIntrinsicsKt;->minIntrinsicWidth$lambda$0(Lkotlin/Pair;Lkotlin/Pair;)I +HSPLandroidx/compose/ui/text/android/LayoutIntrinsicsKt;->minIntrinsicWidth(Ljava/lang/CharSequence;Landroid/text/TextPaint;)F +HSPLandroidx/compose/ui/text/android/LayoutIntrinsicsKt;->shouldIncreaseMaxIntrinsic(FLjava/lang/CharSequence;Landroid/text/TextPaint;)Z +Landroidx/compose/ui/text/android/LayoutIntrinsicsKt$$ExternalSyntheticLambda0; +HSPLandroidx/compose/ui/text/android/LayoutIntrinsicsKt$$ExternalSyntheticLambda0;->()V +HSPLandroidx/compose/ui/text/android/LayoutIntrinsicsKt$$ExternalSyntheticLambda0;->compare(Ljava/lang/Object;Ljava/lang/Object;)I +Landroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0; +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/RenderNode;)V +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/RenderNode;)Z +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/RenderNode;F)Z +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/RenderNode;I)Z +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/RenderNode;Landroid/graphics/Matrix;)V +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/RenderNode;Z)Z +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/graphics/text/LineBreakConfig$Builder;I)Landroid/graphics/text/LineBreakConfig$Builder; +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/view/WindowInsetsController;I)V +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/view/WindowInsetsController;Landroid/view/WindowInsetsController$OnControllableInsetsChangedListener;)V +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$10(Landroid/graphics/RenderNode;F)Z +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$11(Landroid/graphics/RenderNode;F)Z +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$2(Landroid/graphics/RenderNode;)Z +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$2(Landroid/graphics/RenderNode;F)Z +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$2(Landroid/graphics/RenderNode;I)Z +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$2(Landroid/graphics/RenderNode;Z)Z +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$3(Landroid/graphics/RenderNode;)I +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$3(Landroid/graphics/RenderNode;F)Z +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$3(Landroid/graphics/RenderNode;I)Z +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$4(Landroid/graphics/RenderNode;)I +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$4(Landroid/graphics/RenderNode;F)Z +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$5(Landroid/graphics/RenderNode;)F +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$5(Landroid/graphics/RenderNode;)I +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$5(Landroid/graphics/RenderNode;F)Z +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$6(Landroid/graphics/RenderNode;F)Z +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$7(Landroid/graphics/RenderNode;F)Z +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$8(Landroid/graphics/RenderNode;F)Z +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$9(Landroid/graphics/RenderNode;)F +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m$9(Landroid/graphics/RenderNode;F)Z +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m()I +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m()Landroid/graphics/text/LineBreakConfig$Builder; +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m()V +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(ILandroid/graphics/BlendMode;)Landroid/graphics/BlendModeColorFilter; +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/content/res/Configuration;)I +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/Canvas;Landroid/graphics/RenderNode;)V +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/Paint;Landroid/graphics/BlendMode;)V +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)I +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)Landroid/graphics/RecordingCanvas; +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)V +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;)Z +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;F)Z +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;I)Z +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;IIII)Z +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;Landroid/graphics/Outline;)Z +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;Landroid/graphics/RenderEffect;)Z +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;Z)Z +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/RenderNode;ZLandroid/graphics/Paint;)Z +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/text/LineBreakConfig$Builder;)Landroid/graphics/text/LineBreakConfig; +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/text/LineBreakConfig$Builder;I)Landroid/graphics/text/LineBreakConfig$Builder; +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/text/StaticLayout$Builder;Landroid/graphics/text/LineBreakConfig;)Landroid/text/StaticLayout$Builder; +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/text/StaticLayout$Builder;Z)Landroid/text/StaticLayout$Builder; +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;)Ljava/util/Map; +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;Landroid/graphics/Matrix;)V +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;Z)V +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/WindowInsetsController;I)V +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/WindowInsetsController;Landroid/view/WindowInsetsController$OnControllableInsetsChangedListener;)V +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Ljava/lang/CharSequence;Landroid/text/TextPaint;ILandroid/text/Layout$Alignment;FFLandroid/text/BoringLayout$Metrics;ZLandroid/text/TextUtils$TruncateAt;IZ)Landroid/text/BoringLayout; +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Ljava/lang/CharSequence;Landroid/text/TextPaint;Landroid/text/TextDirectionHeuristic;ZLandroid/text/BoringLayout$Metrics;)Landroid/text/BoringLayout$Metrics; +HSPLandroidx/compose/ui/text/android/Paint29$$ExternalSyntheticApiModelOutline0;->m(Ljava/lang/String;)Landroid/graphics/RenderNode; +Landroidx/compose/ui/text/android/SpannedExtensionsKt; +HSPLandroidx/compose/ui/text/android/SpannedExtensionsKt;->hasSpan(Landroid/text/Spanned;Ljava/lang/Class;)Z +Landroidx/compose/ui/text/android/StaticLayoutFactory; +HSPLandroidx/compose/ui/text/android/StaticLayoutFactory;->()V +HSPLandroidx/compose/ui/text/android/StaticLayoutFactory;->()V +HSPLandroidx/compose/ui/text/android/StaticLayoutFactory;->create(Ljava/lang/CharSequence;IILandroid/text/TextPaint;ILandroid/text/TextDirectionHeuristic;Landroid/text/Layout$Alignment;ILandroid/text/TextUtils$TruncateAt;IFFIZZIIII[I[I)Landroid/text/StaticLayout; +Landroidx/compose/ui/text/android/StaticLayoutFactory23; +HSPLandroidx/compose/ui/text/android/StaticLayoutFactory23;->()V +HSPLandroidx/compose/ui/text/android/StaticLayoutFactory23;->create(Landroidx/compose/ui/text/android/StaticLayoutParams;)Landroid/text/StaticLayout; +Landroidx/compose/ui/text/android/StaticLayoutFactory26; +HSPLandroidx/compose/ui/text/android/StaticLayoutFactory26;->()V +HSPLandroidx/compose/ui/text/android/StaticLayoutFactory26;->()V +HSPLandroidx/compose/ui/text/android/StaticLayoutFactory26;->setJustificationMode(Landroid/text/StaticLayout$Builder;I)V +Landroidx/compose/ui/text/android/StaticLayoutFactory28; +HSPLandroidx/compose/ui/text/android/StaticLayoutFactory28;->()V +HSPLandroidx/compose/ui/text/android/StaticLayoutFactory28;->()V +HSPLandroidx/compose/ui/text/android/StaticLayoutFactory28;->setUseLineSpacingFromFallbacks(Landroid/text/StaticLayout$Builder;Z)V +Landroidx/compose/ui/text/android/StaticLayoutFactory33; +HSPLandroidx/compose/ui/text/android/StaticLayoutFactory33;->()V +HSPLandroidx/compose/ui/text/android/StaticLayoutFactory33;->()V +HSPLandroidx/compose/ui/text/android/StaticLayoutFactory33;->setLineBreakConfig(Landroid/text/StaticLayout$Builder;II)V +Landroidx/compose/ui/text/android/StaticLayoutFactoryImpl; +Landroidx/compose/ui/text/android/StaticLayoutParams; +HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->(Ljava/lang/CharSequence;IILandroid/text/TextPaint;ILandroid/text/TextDirectionHeuristic;Landroid/text/Layout$Alignment;ILandroid/text/TextUtils$TruncateAt;IFFIZZIIII[I[I)V +HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getAlignment()Landroid/text/Layout$Alignment; +HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getBreakStrategy()I +HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getEllipsize()Landroid/text/TextUtils$TruncateAt; +HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getEllipsizedWidth()I +HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getEnd()I +HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getHyphenationFrequency()I +HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getIncludePadding()Z +HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getJustificationMode()I +HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getLeftIndents()[I +HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getLineBreakStyle()I +HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getLineBreakWordStyle()I +HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getLineSpacingExtra()F +HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getLineSpacingMultiplier()F +HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getMaxLines()I +HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getPaint()Landroid/text/TextPaint; +HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getRightIndents()[I +HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getStart()I +HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getText()Ljava/lang/CharSequence; +HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getTextDir()Landroid/text/TextDirectionHeuristic; +HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getUseFallbackLineSpacing()Z +HSPLandroidx/compose/ui/text/android/StaticLayoutParams;->getWidth()I +Landroidx/compose/ui/text/android/TextAlignmentAdapter; +HSPLandroidx/compose/ui/text/android/TextAlignmentAdapter;->()V +HSPLandroidx/compose/ui/text/android/TextAlignmentAdapter;->()V +HSPLandroidx/compose/ui/text/android/TextAlignmentAdapter;->get(I)Landroid/text/Layout$Alignment; +Landroidx/compose/ui/text/android/TextAndroidCanvas; +HSPLandroidx/compose/ui/text/android/TextAndroidCanvas;->()V +HSPLandroidx/compose/ui/text/android/TextAndroidCanvas;->drawText(Ljava/lang/String;FFLandroid/graphics/Paint;)V +HSPLandroidx/compose/ui/text/android/TextAndroidCanvas;->drawTextRun(Ljava/lang/CharSequence;IIIIFFZLandroid/graphics/Paint;)V +HSPLandroidx/compose/ui/text/android/TextAndroidCanvas;->getClipBounds(Landroid/graphics/Rect;)Z +HSPLandroidx/compose/ui/text/android/TextAndroidCanvas;->setCanvas(Landroid/graphics/Canvas;)V +Landroidx/compose/ui/text/android/TextLayout; +HSPLandroidx/compose/ui/text/android/TextLayout;->(Ljava/lang/CharSequence;FLandroid/text/TextPaint;ILandroid/text/TextUtils$TruncateAt;IFFZZIIIIII[I[ILandroidx/compose/ui/text/android/LayoutIntrinsics;)V +HSPLandroidx/compose/ui/text/android/TextLayout;->(Ljava/lang/CharSequence;FLandroid/text/TextPaint;ILandroid/text/TextUtils$TruncateAt;IFFZZIIIIII[I[ILandroidx/compose/ui/text/android/LayoutIntrinsics;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/android/TextLayout;->getBoundingBox(I)Landroid/graphics/RectF; +HSPLandroidx/compose/ui/text/android/TextLayout;->getDidExceedMaxLines()Z +HSPLandroidx/compose/ui/text/android/TextLayout;->getHeight()I +HSPLandroidx/compose/ui/text/android/TextLayout;->getHorizontalPadding(I)F +HSPLandroidx/compose/ui/text/android/TextLayout;->getIncludePadding()Z +HSPLandroidx/compose/ui/text/android/TextLayout;->getLayout()Landroid/text/Layout; +HSPLandroidx/compose/ui/text/android/TextLayout;->getLayoutHelper()Landroidx/compose/ui/text/android/LayoutHelper; +HSPLandroidx/compose/ui/text/android/TextLayout;->getLineBaseline(I)F +HSPLandroidx/compose/ui/text/android/TextLayout;->getLineBottom(I)F +HSPLandroidx/compose/ui/text/android/TextLayout;->getLineCount()I +HSPLandroidx/compose/ui/text/android/TextLayout;->getLineForOffset(I)I +HSPLandroidx/compose/ui/text/android/TextLayout;->getLineTop(I)F +HSPLandroidx/compose/ui/text/android/TextLayout;->getParagraphDirection(I)I +HSPLandroidx/compose/ui/text/android/TextLayout;->getPrimaryHorizontal$default(Landroidx/compose/ui/text/android/TextLayout;IZILjava/lang/Object;)F +HSPLandroidx/compose/ui/text/android/TextLayout;->getPrimaryHorizontal(IZ)F +HSPLandroidx/compose/ui/text/android/TextLayout;->getText()Ljava/lang/CharSequence; +HSPLandroidx/compose/ui/text/android/TextLayout;->paint(Landroid/graphics/Canvas;)V +Landroidx/compose/ui/text/android/TextLayout$layoutHelper$2; +HSPLandroidx/compose/ui/text/android/TextLayout$layoutHelper$2;->(Landroidx/compose/ui/text/android/TextLayout;)V +HSPLandroidx/compose/ui/text/android/TextLayout$layoutHelper$2;->invoke()Landroidx/compose/ui/text/android/LayoutHelper; +HSPLandroidx/compose/ui/text/android/TextLayout$layoutHelper$2;->invoke()Ljava/lang/Object; +Landroidx/compose/ui/text/android/TextLayoutKt; +HSPLandroidx/compose/ui/text/android/TextLayoutKt;->()V +HSPLandroidx/compose/ui/text/android/TextLayoutKt;->VerticalPaddings(II)J +HSPLandroidx/compose/ui/text/android/TextLayoutKt;->access$getLastLineMetrics(Landroidx/compose/ui/text/android/TextLayout;Landroid/text/TextPaint;Landroid/text/TextDirectionHeuristic;[Landroidx/compose/ui/text/android/style/LineHeightStyleSpan;)Landroid/graphics/Paint$FontMetricsInt; +HSPLandroidx/compose/ui/text/android/TextLayoutKt;->access$getLineHeightPaddings(Landroidx/compose/ui/text/android/TextLayout;[Landroidx/compose/ui/text/android/style/LineHeightStyleSpan;)J +HSPLandroidx/compose/ui/text/android/TextLayoutKt;->access$getLineHeightSpans(Landroidx/compose/ui/text/android/TextLayout;)[Landroidx/compose/ui/text/android/style/LineHeightStyleSpan; +HSPLandroidx/compose/ui/text/android/TextLayoutKt;->access$getSharedTextAndroidCanvas$p()Landroidx/compose/ui/text/android/TextAndroidCanvas; +HSPLandroidx/compose/ui/text/android/TextLayoutKt;->access$getVerticalPaddings(Landroidx/compose/ui/text/android/TextLayout;)J +HSPLandroidx/compose/ui/text/android/TextLayoutKt;->getLastLineMetrics(Landroidx/compose/ui/text/android/TextLayout;Landroid/text/TextPaint;Landroid/text/TextDirectionHeuristic;[Landroidx/compose/ui/text/android/style/LineHeightStyleSpan;)Landroid/graphics/Paint$FontMetricsInt; +HSPLandroidx/compose/ui/text/android/TextLayoutKt;->getLineHeightPaddings(Landroidx/compose/ui/text/android/TextLayout;[Landroidx/compose/ui/text/android/style/LineHeightStyleSpan;)J +HSPLandroidx/compose/ui/text/android/TextLayoutKt;->getLineHeightSpans(Landroidx/compose/ui/text/android/TextLayout;)[Landroidx/compose/ui/text/android/style/LineHeightStyleSpan; +HSPLandroidx/compose/ui/text/android/TextLayoutKt;->getTextDirectionHeuristic(I)Landroid/text/TextDirectionHeuristic; +HSPLandroidx/compose/ui/text/android/TextLayoutKt;->getVerticalPaddings(Landroidx/compose/ui/text/android/TextLayout;)J +HSPLandroidx/compose/ui/text/android/TextLayoutKt;->isLineEllipsized(Landroid/text/Layout;I)Z +Landroidx/compose/ui/text/android/VerticalPaddings; +HSPLandroidx/compose/ui/text/android/VerticalPaddings;->constructor-impl(J)J +HSPLandroidx/compose/ui/text/android/VerticalPaddings;->getBottomPadding-impl(J)I +HSPLandroidx/compose/ui/text/android/VerticalPaddings;->getTopPadding-impl(J)I +Landroidx/compose/ui/text/android/style/BaselineShiftSpan; +Landroidx/compose/ui/text/android/style/IndentationFixSpanKt; +HSPLandroidx/compose/ui/text/android/style/IndentationFixSpanKt;->getEllipsizedLeftPadding$default(Landroid/text/Layout;ILandroid/graphics/Paint;ILjava/lang/Object;)F +HSPLandroidx/compose/ui/text/android/style/IndentationFixSpanKt;->getEllipsizedLeftPadding(Landroid/text/Layout;ILandroid/graphics/Paint;)F +HSPLandroidx/compose/ui/text/android/style/IndentationFixSpanKt;->getEllipsizedRightPadding$default(Landroid/text/Layout;ILandroid/graphics/Paint;ILjava/lang/Object;)F +HSPLandroidx/compose/ui/text/android/style/IndentationFixSpanKt;->getEllipsizedRightPadding(Landroid/text/Layout;ILandroid/graphics/Paint;)F +Landroidx/compose/ui/text/android/style/LetterSpacingSpanEm; +Landroidx/compose/ui/text/android/style/LetterSpacingSpanPx; +Landroidx/compose/ui/text/android/style/LineHeightSpan; +HSPLandroidx/compose/ui/text/android/style/LineHeightSpan;->(F)V +HSPLandroidx/compose/ui/text/android/style/LineHeightSpan;->chooseHeight(Ljava/lang/CharSequence;IIIILandroid/graphics/Paint$FontMetricsInt;)V +Landroidx/compose/ui/text/android/style/LineHeightStyleSpan; +Landroidx/compose/ui/text/android/style/LineHeightStyleSpanKt; +HSPLandroidx/compose/ui/text/android/style/LineHeightStyleSpanKt;->lineHeight(Landroid/graphics/Paint$FontMetricsInt;)I +Landroidx/compose/ui/text/android/style/PlaceholderSpan; +Landroidx/compose/ui/text/android/style/TypefaceSpan; +HSPLandroidx/compose/ui/text/android/style/TypefaceSpan;->(Landroid/graphics/Typeface;)V +HSPLandroidx/compose/ui/text/android/style/TypefaceSpan;->updateDrawState(Landroid/text/TextPaint;)V +HSPLandroidx/compose/ui/text/android/style/TypefaceSpan;->updateMeasureState(Landroid/text/TextPaint;)V +HSPLandroidx/compose/ui/text/android/style/TypefaceSpan;->updateTypeface(Landroid/graphics/Paint;)V +Landroidx/compose/ui/text/caches/ContainerHelpersKt; +HSPLandroidx/compose/ui/text/caches/ContainerHelpersKt;->()V +Landroidx/compose/ui/text/caches/LruCache; +HSPLandroidx/compose/ui/text/caches/LruCache;->(I)V +HSPLandroidx/compose/ui/text/caches/LruCache;->access$getMonitor$p(Landroidx/compose/ui/text/caches/LruCache;)Landroidx/compose/ui/text/platform/SynchronizedObject; +HSPLandroidx/compose/ui/text/caches/LruCache;->create(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/ui/text/caches/LruCache;->get(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/ui/text/caches/LruCache;->put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/ui/text/caches/LruCache;->safeSizeOf(Ljava/lang/Object;Ljava/lang/Object;)I +HSPLandroidx/compose/ui/text/caches/LruCache;->size()I +HSPLandroidx/compose/ui/text/caches/LruCache;->sizeOf(Ljava/lang/Object;Ljava/lang/Object;)I +HSPLandroidx/compose/ui/text/caches/LruCache;->trimToSize(I)V +Landroidx/compose/ui/text/caches/SimpleArrayMap; +HSPLandroidx/compose/ui/text/caches/SimpleArrayMap;->(I)V +HSPLandroidx/compose/ui/text/caches/SimpleArrayMap;->(IILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/caches/SimpleArrayMap;->get(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/ui/text/caches/SimpleArrayMap;->indexOf(Ljava/lang/Object;I)I +HSPLandroidx/compose/ui/text/caches/SimpleArrayMap;->indexOfKey(Ljava/lang/Object;)I +Landroidx/compose/ui/text/font/AndroidFont; +Landroidx/compose/ui/text/font/AndroidFontLoader; +HSPLandroidx/compose/ui/text/font/AndroidFontLoader;->(Landroid/content/Context;)V +HSPLandroidx/compose/ui/text/font/AndroidFontLoader;->getCacheKey()Ljava/lang/Object; +HSPLandroidx/compose/ui/text/font/AndroidFontLoader;->loadBlocking(Landroidx/compose/ui/text/font/Font;)Landroid/graphics/Typeface; +HSPLandroidx/compose/ui/text/font/AndroidFontLoader;->loadBlocking(Landroidx/compose/ui/text/font/Font;)Ljava/lang/Object; +Landroidx/compose/ui/text/font/AndroidFontLoader_androidKt; +HSPLandroidx/compose/ui/text/font/AndroidFontLoader_androidKt;->access$load(Landroidx/compose/ui/text/font/ResourceFont;Landroid/content/Context;)Landroid/graphics/Typeface; +HSPLandroidx/compose/ui/text/font/AndroidFontLoader_androidKt;->load(Landroidx/compose/ui/text/font/ResourceFont;Landroid/content/Context;)Landroid/graphics/Typeface; +Landroidx/compose/ui/text/font/AndroidFontResolveInterceptor; +HSPLandroidx/compose/ui/text/font/AndroidFontResolveInterceptor;->(I)V +HSPLandroidx/compose/ui/text/font/AndroidFontResolveInterceptor;->interceptFontWeight(Landroidx/compose/ui/text/font/FontWeight;)Landroidx/compose/ui/text/font/FontWeight; +Landroidx/compose/ui/text/font/AndroidFontResolveInterceptor_androidKt; +HSPLandroidx/compose/ui/text/font/AndroidFontResolveInterceptor_androidKt;->AndroidFontResolveInterceptor(Landroid/content/Context;)Landroidx/compose/ui/text/font/AndroidFontResolveInterceptor; +Landroidx/compose/ui/text/font/AndroidFontUtils_androidKt; +HSPLandroidx/compose/ui/text/font/AndroidFontUtils_androidKt;->getAndroidBold(Landroidx/compose/ui/text/font/FontWeight$Companion;)Landroidx/compose/ui/text/font/FontWeight; +HSPLandroidx/compose/ui/text/font/AndroidFontUtils_androidKt;->getAndroidTypefaceStyle(ZZ)I +HSPLandroidx/compose/ui/text/font/AndroidFontUtils_androidKt;->getAndroidTypefaceStyle-FO1MlWM(Landroidx/compose/ui/text/font/FontWeight;I)I +Landroidx/compose/ui/text/font/AsyncTypefaceCache; +HSPLandroidx/compose/ui/text/font/AsyncTypefaceCache;->()V +HSPLandroidx/compose/ui/text/font/AsyncTypefaceCache;->access$getCacheLock$p(Landroidx/compose/ui/text/font/AsyncTypefaceCache;)Landroidx/compose/ui/text/platform/SynchronizedObject; +HSPLandroidx/compose/ui/text/font/AsyncTypefaceCache;->access$getPermanentCache$p(Landroidx/compose/ui/text/font/AsyncTypefaceCache;)Landroidx/compose/ui/text/caches/SimpleArrayMap; +HSPLandroidx/compose/ui/text/font/AsyncTypefaceCache;->access$getResultCache$p(Landroidx/compose/ui/text/font/AsyncTypefaceCache;)Landroidx/compose/ui/text/caches/LruCache; +HSPLandroidx/compose/ui/text/font/AsyncTypefaceCache;->put$default(Landroidx/compose/ui/text/font/AsyncTypefaceCache;Landroidx/compose/ui/text/font/Font;Landroidx/compose/ui/text/font/PlatformFontLoader;Ljava/lang/Object;ZILjava/lang/Object;)V +HSPLandroidx/compose/ui/text/font/AsyncTypefaceCache;->put(Landroidx/compose/ui/text/font/Font;Landroidx/compose/ui/text/font/PlatformFontLoader;Ljava/lang/Object;Z)V +Landroidx/compose/ui/text/font/AsyncTypefaceCache$AsyncTypefaceResult; +HSPLandroidx/compose/ui/text/font/AsyncTypefaceCache$AsyncTypefaceResult;->(Ljava/lang/Object;)V +HSPLandroidx/compose/ui/text/font/AsyncTypefaceCache$AsyncTypefaceResult;->box-impl(Ljava/lang/Object;)Landroidx/compose/ui/text/font/AsyncTypefaceCache$AsyncTypefaceResult; +HSPLandroidx/compose/ui/text/font/AsyncTypefaceCache$AsyncTypefaceResult;->constructor-impl(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/text/font/AsyncTypefaceCache$Key; +HSPLandroidx/compose/ui/text/font/AsyncTypefaceCache$Key;->(Landroidx/compose/ui/text/font/Font;Ljava/lang/Object;)V +HSPLandroidx/compose/ui/text/font/AsyncTypefaceCache$Key;->hashCode()I +Landroidx/compose/ui/text/font/DefaultFontFamily; +HSPLandroidx/compose/ui/text/font/DefaultFontFamily;->()V +Landroidx/compose/ui/text/font/FileBasedFontFamily; +HSPLandroidx/compose/ui/text/font/FileBasedFontFamily;->()V +HSPLandroidx/compose/ui/text/font/FileBasedFontFamily;->()V +HSPLandroidx/compose/ui/text/font/FileBasedFontFamily;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/text/font/Font; +HSPLandroidx/compose/ui/text/font/Font;->()V +Landroidx/compose/ui/text/font/Font$Companion; +HSPLandroidx/compose/ui/text/font/Font$Companion;->()V +HSPLandroidx/compose/ui/text/font/Font$Companion;->()V +Landroidx/compose/ui/text/font/Font$ResourceLoader; +Landroidx/compose/ui/text/font/FontFamily; +HSPLandroidx/compose/ui/text/font/FontFamily;->()V +HSPLandroidx/compose/ui/text/font/FontFamily;->(Z)V +HSPLandroidx/compose/ui/text/font/FontFamily;->(ZLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/font/FontFamily;->access$getDefault$cp()Landroidx/compose/ui/text/font/SystemFontFamily; +HSPLandroidx/compose/ui/text/font/FontFamily;->access$getSansSerif$cp()Landroidx/compose/ui/text/font/GenericFontFamily; +Landroidx/compose/ui/text/font/FontFamily$Companion; +HSPLandroidx/compose/ui/text/font/FontFamily$Companion;->()V +HSPLandroidx/compose/ui/text/font/FontFamily$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/font/FontFamily$Companion;->getDefault()Landroidx/compose/ui/text/font/SystemFontFamily; +HSPLandroidx/compose/ui/text/font/FontFamily$Companion;->getSansSerif()Landroidx/compose/ui/text/font/GenericFontFamily; +Landroidx/compose/ui/text/font/FontFamily$Resolver; +Landroidx/compose/ui/text/font/FontFamilyKt; +HSPLandroidx/compose/ui/text/font/FontFamilyKt;->FontFamily([Landroidx/compose/ui/text/font/Font;)Landroidx/compose/ui/text/font/FontFamily; +Landroidx/compose/ui/text/font/FontFamilyResolverImpl; +HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;->(Landroidx/compose/ui/text/font/PlatformFontLoader;Landroidx/compose/ui/text/font/PlatformResolveInterceptor;Landroidx/compose/ui/text/font/TypefaceRequestCache;Landroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter;Landroidx/compose/ui/text/font/PlatformFontFamilyTypefaceAdapter;)V +HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;->(Landroidx/compose/ui/text/font/PlatformFontLoader;Landroidx/compose/ui/text/font/PlatformResolveInterceptor;Landroidx/compose/ui/text/font/TypefaceRequestCache;Landroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter;Landroidx/compose/ui/text/font/PlatformFontFamilyTypefaceAdapter;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;->access$getCreateDefaultTypeface$p(Landroidx/compose/ui/text/font/FontFamilyResolverImpl;)Lkotlin/jvm/functions/Function1; +HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;->access$getFontListFontFamilyTypefaceAdapter$p(Landroidx/compose/ui/text/font/FontFamilyResolverImpl;)Landroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter; +HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;->access$getPlatformFamilyTypefaceAdapter$p(Landroidx/compose/ui/text/font/FontFamilyResolverImpl;)Landroidx/compose/ui/text/font/PlatformFontFamilyTypefaceAdapter; +HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;->getPlatformFontLoader$ui_text_release()Landroidx/compose/ui/text/font/PlatformFontLoader; +HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;->resolve(Landroidx/compose/ui/text/font/TypefaceRequest;)Landroidx/compose/runtime/State; +HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl;->resolve-DPcqOEQ(Landroidx/compose/ui/text/font/FontFamily;Landroidx/compose/ui/text/font/FontWeight;II)Landroidx/compose/runtime/State; +Landroidx/compose/ui/text/font/FontFamilyResolverImpl$createDefaultTypeface$1; +HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl$createDefaultTypeface$1;->(Landroidx/compose/ui/text/font/FontFamilyResolverImpl;)V +Landroidx/compose/ui/text/font/FontFamilyResolverImpl$resolve$result$1; +HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl$resolve$result$1;->(Landroidx/compose/ui/text/font/FontFamilyResolverImpl;Landroidx/compose/ui/text/font/TypefaceRequest;)V +HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl$resolve$result$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/ui/text/font/FontFamilyResolverImpl$resolve$result$1;->invoke(Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/text/font/TypefaceResult; +Landroidx/compose/ui/text/font/FontFamilyResolverKt; +HSPLandroidx/compose/ui/text/font/FontFamilyResolverKt;->()V +HSPLandroidx/compose/ui/text/font/FontFamilyResolverKt;->getGlobalAsyncTypefaceCache()Landroidx/compose/ui/text/font/AsyncTypefaceCache; +HSPLandroidx/compose/ui/text/font/FontFamilyResolverKt;->getGlobalTypefaceRequestCache()Landroidx/compose/ui/text/font/TypefaceRequestCache; +Landroidx/compose/ui/text/font/FontFamilyResolver_androidKt; +HSPLandroidx/compose/ui/text/font/FontFamilyResolver_androidKt;->createFontFamilyResolver(Landroid/content/Context;)Landroidx/compose/ui/text/font/FontFamily$Resolver; +Landroidx/compose/ui/text/font/FontFamilyTypefaceAdapter; +Landroidx/compose/ui/text/font/FontKt; +HSPLandroidx/compose/ui/text/font/FontKt;->Font-YpTlLL0$default(ILandroidx/compose/ui/text/font/FontWeight;IIILjava/lang/Object;)Landroidx/compose/ui/text/font/Font; +HSPLandroidx/compose/ui/text/font/FontKt;->Font-YpTlLL0(ILandroidx/compose/ui/text/font/FontWeight;II)Landroidx/compose/ui/text/font/Font; +Landroidx/compose/ui/text/font/FontListFontFamily; +HSPLandroidx/compose/ui/text/font/FontListFontFamily;->()V +HSPLandroidx/compose/ui/text/font/FontListFontFamily;->(Ljava/util/List;)V +HSPLandroidx/compose/ui/text/font/FontListFontFamily;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/text/font/FontListFontFamily;->getFonts()Ljava/util/List; +HSPLandroidx/compose/ui/text/font/FontListFontFamily;->hashCode()I +Landroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter; +HSPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter;->()V +HSPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter;->(Landroidx/compose/ui/text/font/AsyncTypefaceCache;Lkotlin/coroutines/CoroutineContext;)V +HSPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter;->(Landroidx/compose/ui/text/font/AsyncTypefaceCache;Lkotlin/coroutines/CoroutineContext;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter;->resolve(Landroidx/compose/ui/text/font/TypefaceRequest;Landroidx/compose/ui/text/font/PlatformFontLoader;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/text/font/TypefaceResult; +Landroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter$Companion; +HSPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter$Companion;->()V +HSPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter$special$$inlined$CoroutineExceptionHandler$1; +HSPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapter$special$$inlined$CoroutineExceptionHandler$1;->(Lkotlinx/coroutines/CoroutineExceptionHandler$Key;)V +Landroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapterKt; +HSPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapterKt;->access$firstImmediatelyAvailable(Ljava/util/List;Landroidx/compose/ui/text/font/TypefaceRequest;Landroidx/compose/ui/text/font/AsyncTypefaceCache;Landroidx/compose/ui/text/font/PlatformFontLoader;Lkotlin/jvm/functions/Function1;)Lkotlin/Pair; +HSPLandroidx/compose/ui/text/font/FontListFontFamilyTypefaceAdapterKt;->firstImmediatelyAvailable(Ljava/util/List;Landroidx/compose/ui/text/font/TypefaceRequest;Landroidx/compose/ui/text/font/AsyncTypefaceCache;Landroidx/compose/ui/text/font/PlatformFontLoader;Lkotlin/jvm/functions/Function1;)Lkotlin/Pair; +Landroidx/compose/ui/text/font/FontLoadingStrategy; +HSPLandroidx/compose/ui/text/font/FontLoadingStrategy;->()V +HSPLandroidx/compose/ui/text/font/FontLoadingStrategy;->access$getBlocking$cp()I +HSPLandroidx/compose/ui/text/font/FontLoadingStrategy;->constructor-impl(I)I +HSPLandroidx/compose/ui/text/font/FontLoadingStrategy;->equals-impl0(II)Z +HSPLandroidx/compose/ui/text/font/FontLoadingStrategy;->hashCode-impl(I)I +Landroidx/compose/ui/text/font/FontLoadingStrategy$Companion; +HSPLandroidx/compose/ui/text/font/FontLoadingStrategy$Companion;->()V +HSPLandroidx/compose/ui/text/font/FontLoadingStrategy$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/font/FontLoadingStrategy$Companion;->getBlocking-PKNRLFQ()I +Landroidx/compose/ui/text/font/FontMatcher; +HSPLandroidx/compose/ui/text/font/FontMatcher;->()V +HSPLandroidx/compose/ui/text/font/FontMatcher;->matchFont-RetOiIg(Ljava/util/List;Landroidx/compose/ui/text/font/FontWeight;I)Ljava/util/List; +Landroidx/compose/ui/text/font/FontStyle; +HSPLandroidx/compose/ui/text/font/FontStyle;->()V +HSPLandroidx/compose/ui/text/font/FontStyle;->(I)V +HSPLandroidx/compose/ui/text/font/FontStyle;->access$getItalic$cp()I +HSPLandroidx/compose/ui/text/font/FontStyle;->access$getNormal$cp()I +HSPLandroidx/compose/ui/text/font/FontStyle;->box-impl(I)Landroidx/compose/ui/text/font/FontStyle; +HSPLandroidx/compose/ui/text/font/FontStyle;->constructor-impl(I)I +HSPLandroidx/compose/ui/text/font/FontStyle;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/text/font/FontStyle;->equals-impl(ILjava/lang/Object;)Z +HSPLandroidx/compose/ui/text/font/FontStyle;->equals-impl0(II)Z +HSPLandroidx/compose/ui/text/font/FontStyle;->hashCode-impl(I)I +HSPLandroidx/compose/ui/text/font/FontStyle;->unbox-impl()I +Landroidx/compose/ui/text/font/FontStyle$Companion; +HSPLandroidx/compose/ui/text/font/FontStyle$Companion;->()V +HSPLandroidx/compose/ui/text/font/FontStyle$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/font/FontStyle$Companion;->getItalic-_-LCdwA()I +HSPLandroidx/compose/ui/text/font/FontStyle$Companion;->getNormal-_-LCdwA()I +Landroidx/compose/ui/text/font/FontSynthesis; +HSPLandroidx/compose/ui/text/font/FontSynthesis;->()V +HSPLandroidx/compose/ui/text/font/FontSynthesis;->(I)V +HSPLandroidx/compose/ui/text/font/FontSynthesis;->access$getAll$cp()I +HSPLandroidx/compose/ui/text/font/FontSynthesis;->box-impl(I)Landroidx/compose/ui/text/font/FontSynthesis; +HSPLandroidx/compose/ui/text/font/FontSynthesis;->constructor-impl(I)I +HSPLandroidx/compose/ui/text/font/FontSynthesis;->equals-impl0(II)Z +HSPLandroidx/compose/ui/text/font/FontSynthesis;->hashCode-impl(I)I +HSPLandroidx/compose/ui/text/font/FontSynthesis;->isStyleOn-impl$ui_text_release(I)Z +HSPLandroidx/compose/ui/text/font/FontSynthesis;->isWeightOn-impl$ui_text_release(I)Z +HSPLandroidx/compose/ui/text/font/FontSynthesis;->unbox-impl()I +Landroidx/compose/ui/text/font/FontSynthesis$Companion; +HSPLandroidx/compose/ui/text/font/FontSynthesis$Companion;->()V +HSPLandroidx/compose/ui/text/font/FontSynthesis$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/font/FontSynthesis$Companion;->getAll-GVVA2EU()I +Landroidx/compose/ui/text/font/FontSynthesis_androidKt; +HSPLandroidx/compose/ui/text/font/FontSynthesis_androidKt;->synthesizeTypeface-FxwP2eA(ILjava/lang/Object;Landroidx/compose/ui/text/font/Font;Landroidx/compose/ui/text/font/FontWeight;I)Ljava/lang/Object; +Landroidx/compose/ui/text/font/FontVariation$Setting; +Landroidx/compose/ui/text/font/FontVariation$Settings; +HSPLandroidx/compose/ui/text/font/FontVariation$Settings;->()V +HSPLandroidx/compose/ui/text/font/FontVariation$Settings;->([Landroidx/compose/ui/text/font/FontVariation$Setting;)V +HSPLandroidx/compose/ui/text/font/FontVariation$Settings;->getSettings()Ljava/util/List; +HSPLandroidx/compose/ui/text/font/FontVariation$Settings;->hashCode()I +Landroidx/compose/ui/text/font/FontWeight; +HSPLandroidx/compose/ui/text/font/FontWeight;->()V +HSPLandroidx/compose/ui/text/font/FontWeight;->(I)V +HSPLandroidx/compose/ui/text/font/FontWeight;->access$getBold$cp()Landroidx/compose/ui/text/font/FontWeight; +HSPLandroidx/compose/ui/text/font/FontWeight;->access$getLight$cp()Landroidx/compose/ui/text/font/FontWeight; +HSPLandroidx/compose/ui/text/font/FontWeight;->access$getMedium$cp()Landroidx/compose/ui/text/font/FontWeight; +HSPLandroidx/compose/ui/text/font/FontWeight;->access$getNormal$cp()Landroidx/compose/ui/text/font/FontWeight; +HSPLandroidx/compose/ui/text/font/FontWeight;->access$getW600$cp()Landroidx/compose/ui/text/font/FontWeight; +HSPLandroidx/compose/ui/text/font/FontWeight;->compareTo(Landroidx/compose/ui/text/font/FontWeight;)I +HSPLandroidx/compose/ui/text/font/FontWeight;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/text/font/FontWeight;->getWeight()I +HSPLandroidx/compose/ui/text/font/FontWeight;->hashCode()I +Landroidx/compose/ui/text/font/FontWeight$Companion; +HSPLandroidx/compose/ui/text/font/FontWeight$Companion;->()V +HSPLandroidx/compose/ui/text/font/FontWeight$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/font/FontWeight$Companion;->getBold()Landroidx/compose/ui/text/font/FontWeight; +HSPLandroidx/compose/ui/text/font/FontWeight$Companion;->getLight()Landroidx/compose/ui/text/font/FontWeight; +HSPLandroidx/compose/ui/text/font/FontWeight$Companion;->getMedium()Landroidx/compose/ui/text/font/FontWeight; +HSPLandroidx/compose/ui/text/font/FontWeight$Companion;->getNormal()Landroidx/compose/ui/text/font/FontWeight; +HSPLandroidx/compose/ui/text/font/FontWeight$Companion;->getW600()Landroidx/compose/ui/text/font/FontWeight; +Landroidx/compose/ui/text/font/GenericFontFamily; +HSPLandroidx/compose/ui/text/font/GenericFontFamily;->()V +HSPLandroidx/compose/ui/text/font/GenericFontFamily;->(Ljava/lang/String;Ljava/lang/String;)V +HSPLandroidx/compose/ui/text/font/GenericFontFamily;->getName()Ljava/lang/String; +Landroidx/compose/ui/text/font/PlatformFontFamilyTypefaceAdapter; +HSPLandroidx/compose/ui/text/font/PlatformFontFamilyTypefaceAdapter;->()V +HSPLandroidx/compose/ui/text/font/PlatformFontFamilyTypefaceAdapter;->resolve(Landroidx/compose/ui/text/font/TypefaceRequest;Landroidx/compose/ui/text/font/PlatformFontLoader;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/text/font/TypefaceResult; +Landroidx/compose/ui/text/font/PlatformFontLoader; +Landroidx/compose/ui/text/font/PlatformResolveInterceptor; +HSPLandroidx/compose/ui/text/font/PlatformResolveInterceptor;->()V +HSPLandroidx/compose/ui/text/font/PlatformResolveInterceptor;->interceptFontFamily(Landroidx/compose/ui/text/font/FontFamily;)Landroidx/compose/ui/text/font/FontFamily; +HSPLandroidx/compose/ui/text/font/PlatformResolveInterceptor;->interceptFontStyle-T2F_aPo(I)I +HSPLandroidx/compose/ui/text/font/PlatformResolveInterceptor;->interceptFontSynthesis-Mscr08Y(I)I +Landroidx/compose/ui/text/font/PlatformResolveInterceptor$Companion; +HSPLandroidx/compose/ui/text/font/PlatformResolveInterceptor$Companion;->()V +HSPLandroidx/compose/ui/text/font/PlatformResolveInterceptor$Companion;->()V +Landroidx/compose/ui/text/font/PlatformResolveInterceptor$Companion$Default$1; +HSPLandroidx/compose/ui/text/font/PlatformResolveInterceptor$Companion$Default$1;->()V +Landroidx/compose/ui/text/font/PlatformTypefaces; +Landroidx/compose/ui/text/font/PlatformTypefacesApi28; +HSPLandroidx/compose/ui/text/font/PlatformTypefacesApi28;->()V +HSPLandroidx/compose/ui/text/font/PlatformTypefacesApi28;->createAndroidTypefaceApi28-RetOiIg(Ljava/lang/String;Landroidx/compose/ui/text/font/FontWeight;I)Landroid/graphics/Typeface; +HSPLandroidx/compose/ui/text/font/PlatformTypefacesApi28;->createDefault-FO1MlWM(Landroidx/compose/ui/text/font/FontWeight;I)Landroid/graphics/Typeface; +HSPLandroidx/compose/ui/text/font/PlatformTypefacesApi28;->createNamed-RetOiIg(Landroidx/compose/ui/text/font/GenericFontFamily;Landroidx/compose/ui/text/font/FontWeight;I)Landroid/graphics/Typeface; +Landroidx/compose/ui/text/font/PlatformTypefacesKt; +HSPLandroidx/compose/ui/text/font/PlatformTypefacesKt;->PlatformTypefaces()Landroidx/compose/ui/text/font/PlatformTypefaces; +HSPLandroidx/compose/ui/text/font/PlatformTypefacesKt;->setFontVariationSettings(Landroid/graphics/Typeface;Landroidx/compose/ui/text/font/FontVariation$Settings;Landroid/content/Context;)Landroid/graphics/Typeface; +Landroidx/compose/ui/text/font/ResourceFont; +HSPLandroidx/compose/ui/text/font/ResourceFont;->()V +HSPLandroidx/compose/ui/text/font/ResourceFont;->(ILandroidx/compose/ui/text/font/FontWeight;ILandroidx/compose/ui/text/font/FontVariation$Settings;I)V +HSPLandroidx/compose/ui/text/font/ResourceFont;->(ILandroidx/compose/ui/text/font/FontWeight;ILandroidx/compose/ui/text/font/FontVariation$Settings;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/font/ResourceFont;->getLoadingStrategy-PKNRLFQ()I +HSPLandroidx/compose/ui/text/font/ResourceFont;->getResId()I +HSPLandroidx/compose/ui/text/font/ResourceFont;->getStyle-_-LCdwA()I +HSPLandroidx/compose/ui/text/font/ResourceFont;->getVariationSettings()Landroidx/compose/ui/text/font/FontVariation$Settings; +HSPLandroidx/compose/ui/text/font/ResourceFont;->getWeight()Landroidx/compose/ui/text/font/FontWeight; +HSPLandroidx/compose/ui/text/font/ResourceFont;->hashCode()I +Landroidx/compose/ui/text/font/ResourceFontHelper; +HSPLandroidx/compose/ui/text/font/ResourceFontHelper;->()V +HSPLandroidx/compose/ui/text/font/ResourceFontHelper;->()V +HSPLandroidx/compose/ui/text/font/ResourceFontHelper;->load(Landroid/content/Context;Landroidx/compose/ui/text/font/ResourceFont;)Landroid/graphics/Typeface; +Landroidx/compose/ui/text/font/SystemFontFamily; +HSPLandroidx/compose/ui/text/font/SystemFontFamily;->()V +HSPLandroidx/compose/ui/text/font/SystemFontFamily;->()V +HSPLandroidx/compose/ui/text/font/SystemFontFamily;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/text/font/TypefaceCompatApi26; +HSPLandroidx/compose/ui/text/font/TypefaceCompatApi26;->()V +HSPLandroidx/compose/ui/text/font/TypefaceCompatApi26;->()V +HSPLandroidx/compose/ui/text/font/TypefaceCompatApi26;->setFontVariationSettings(Landroid/graphics/Typeface;Landroidx/compose/ui/text/font/FontVariation$Settings;Landroid/content/Context;)Landroid/graphics/Typeface; +Landroidx/compose/ui/text/font/TypefaceRequest; +HSPLandroidx/compose/ui/text/font/TypefaceRequest;->(Landroidx/compose/ui/text/font/FontFamily;Landroidx/compose/ui/text/font/FontWeight;IILjava/lang/Object;)V +HSPLandroidx/compose/ui/text/font/TypefaceRequest;->(Landroidx/compose/ui/text/font/FontFamily;Landroidx/compose/ui/text/font/FontWeight;IILjava/lang/Object;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/font/TypefaceRequest;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/text/font/TypefaceRequest;->getFontFamily()Landroidx/compose/ui/text/font/FontFamily; +HSPLandroidx/compose/ui/text/font/TypefaceRequest;->getFontStyle-_-LCdwA()I +HSPLandroidx/compose/ui/text/font/TypefaceRequest;->getFontSynthesis-GVVA2EU()I +HSPLandroidx/compose/ui/text/font/TypefaceRequest;->getFontWeight()Landroidx/compose/ui/text/font/FontWeight; +HSPLandroidx/compose/ui/text/font/TypefaceRequest;->hashCode()I +Landroidx/compose/ui/text/font/TypefaceRequestCache; +HSPLandroidx/compose/ui/text/font/TypefaceRequestCache;->()V +HSPLandroidx/compose/ui/text/font/TypefaceRequestCache;->runCached(Landroidx/compose/ui/text/font/TypefaceRequest;Lkotlin/jvm/functions/Function1;)Landroidx/compose/runtime/State; +Landroidx/compose/ui/text/font/TypefaceRequestCache$runCached$currentTypefaceResult$1; +HSPLandroidx/compose/ui/text/font/TypefaceRequestCache$runCached$currentTypefaceResult$1;->(Landroidx/compose/ui/text/font/TypefaceRequestCache;Landroidx/compose/ui/text/font/TypefaceRequest;)V +Landroidx/compose/ui/text/font/TypefaceResult; +Landroidx/compose/ui/text/font/TypefaceResult$Immutable; +HSPLandroidx/compose/ui/text/font/TypefaceResult$Immutable;->()V +HSPLandroidx/compose/ui/text/font/TypefaceResult$Immutable;->(Ljava/lang/Object;Z)V +HSPLandroidx/compose/ui/text/font/TypefaceResult$Immutable;->(Ljava/lang/Object;ZILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/font/TypefaceResult$Immutable;->getCacheable()Z +HSPLandroidx/compose/ui/text/font/TypefaceResult$Immutable;->getValue()Ljava/lang/Object; +Landroidx/compose/ui/text/input/AndroidTextInputServicePlugin; +HSPLandroidx/compose/ui/text/input/AndroidTextInputServicePlugin;->()V +HSPLandroidx/compose/ui/text/input/AndroidTextInputServicePlugin;->()V +HSPLandroidx/compose/ui/text/input/AndroidTextInputServicePlugin;->createAdapter(Landroidx/compose/ui/text/input/PlatformTextInput;Landroid/view/View;)Landroidx/compose/ui/text/input/AndroidTextInputServicePlugin$Adapter; +HSPLandroidx/compose/ui/text/input/AndroidTextInputServicePlugin;->createAdapter(Landroidx/compose/ui/text/input/PlatformTextInput;Landroid/view/View;)Landroidx/compose/ui/text/input/PlatformTextInputAdapter; +Landroidx/compose/ui/text/input/AndroidTextInputServicePlugin$Adapter; +HSPLandroidx/compose/ui/text/input/AndroidTextInputServicePlugin$Adapter;->()V +HSPLandroidx/compose/ui/text/input/AndroidTextInputServicePlugin$Adapter;->(Landroidx/compose/ui/text/input/TextInputService;Landroidx/compose/ui/text/input/TextInputServiceAndroid;)V +HSPLandroidx/compose/ui/text/input/AndroidTextInputServicePlugin$Adapter;->createInputConnection(Landroid/view/inputmethod/EditorInfo;)Landroid/view/inputmethod/InputConnection; +HSPLandroidx/compose/ui/text/input/AndroidTextInputServicePlugin$Adapter;->getService()Landroidx/compose/ui/text/input/TextInputService; +Landroidx/compose/ui/text/input/CommitTextCommand; +HSPLandroidx/compose/ui/text/input/CommitTextCommand;->()V +HSPLandroidx/compose/ui/text/input/CommitTextCommand;->(Landroidx/compose/ui/text/AnnotatedString;I)V +HSPLandroidx/compose/ui/text/input/CommitTextCommand;->applyTo(Landroidx/compose/ui/text/input/EditingBuffer;)V +HSPLandroidx/compose/ui/text/input/CommitTextCommand;->getText()Ljava/lang/String; +Landroidx/compose/ui/text/input/DeleteAllCommand; +HSPLandroidx/compose/ui/text/input/DeleteAllCommand;->()V +HSPLandroidx/compose/ui/text/input/DeleteAllCommand;->()V +HSPLandroidx/compose/ui/text/input/DeleteAllCommand;->applyTo(Landroidx/compose/ui/text/input/EditingBuffer;)V +Landroidx/compose/ui/text/input/EditCommand; +Landroidx/compose/ui/text/input/EditProcessor; +HSPLandroidx/compose/ui/text/input/EditProcessor;->()V +HSPLandroidx/compose/ui/text/input/EditProcessor;->()V +HSPLandroidx/compose/ui/text/input/EditProcessor;->apply(Ljava/util/List;)Landroidx/compose/ui/text/input/TextFieldValue; +HSPLandroidx/compose/ui/text/input/EditProcessor;->reset(Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/ui/text/input/TextInputSession;)V +HSPLandroidx/compose/ui/text/input/EditProcessor;->toTextFieldValue()Landroidx/compose/ui/text/input/TextFieldValue; +Landroidx/compose/ui/text/input/EditingBuffer; +HSPLandroidx/compose/ui/text/input/EditingBuffer;->()V +HSPLandroidx/compose/ui/text/input/EditingBuffer;->(Landroidx/compose/ui/text/AnnotatedString;J)V +HSPLandroidx/compose/ui/text/input/EditingBuffer;->(Landroidx/compose/ui/text/AnnotatedString;JLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/input/EditingBuffer;->commitComposition$ui_text_release()V +HSPLandroidx/compose/ui/text/input/EditingBuffer;->getComposition-MzsxiRA$ui_text_release()Landroidx/compose/ui/text/TextRange; +HSPLandroidx/compose/ui/text/input/EditingBuffer;->getCursor$ui_text_release()I +HSPLandroidx/compose/ui/text/input/EditingBuffer;->getLength$ui_text_release()I +HSPLandroidx/compose/ui/text/input/EditingBuffer;->getSelection-d9O1mEE$ui_text_release()J +HSPLandroidx/compose/ui/text/input/EditingBuffer;->getSelectionEnd$ui_text_release()I +HSPLandroidx/compose/ui/text/input/EditingBuffer;->getSelectionStart$ui_text_release()I +HSPLandroidx/compose/ui/text/input/EditingBuffer;->hasComposition$ui_text_release()Z +HSPLandroidx/compose/ui/text/input/EditingBuffer;->replace$ui_text_release(IILjava/lang/String;)V +HSPLandroidx/compose/ui/text/input/EditingBuffer;->setCursor$ui_text_release(I)V +HSPLandroidx/compose/ui/text/input/EditingBuffer;->setSelection$ui_text_release(II)V +HSPLandroidx/compose/ui/text/input/EditingBuffer;->setSelectionEnd(I)V +HSPLandroidx/compose/ui/text/input/EditingBuffer;->setSelectionStart(I)V +HSPLandroidx/compose/ui/text/input/EditingBuffer;->toAnnotatedString$ui_text_release()Landroidx/compose/ui/text/AnnotatedString; +HSPLandroidx/compose/ui/text/input/EditingBuffer;->toString()Ljava/lang/String; +Landroidx/compose/ui/text/input/EditingBuffer$Companion; +HSPLandroidx/compose/ui/text/input/EditingBuffer$Companion;->()V +HSPLandroidx/compose/ui/text/input/EditingBuffer$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/text/input/GapBuffer; +HSPLandroidx/compose/ui/text/input/GapBuffer;->([CII)V +HSPLandroidx/compose/ui/text/input/GapBuffer;->append(Ljava/lang/StringBuilder;)V +HSPLandroidx/compose/ui/text/input/GapBuffer;->delete(II)V +HSPLandroidx/compose/ui/text/input/GapBuffer;->gapLength()I +HSPLandroidx/compose/ui/text/input/GapBuffer;->length()I +HSPLandroidx/compose/ui/text/input/GapBuffer;->makeSureAvailableSpace(I)V +HSPLandroidx/compose/ui/text/input/GapBuffer;->replace(IILjava/lang/String;)V +Landroidx/compose/ui/text/input/GapBufferKt; +HSPLandroidx/compose/ui/text/input/GapBufferKt;->access$toCharArray(Ljava/lang/String;[CI)V +HSPLandroidx/compose/ui/text/input/GapBufferKt;->toCharArray(Ljava/lang/String;[CI)V +Landroidx/compose/ui/text/input/GapBuffer_jvmKt; +HSPLandroidx/compose/ui/text/input/GapBuffer_jvmKt;->toCharArray(Ljava/lang/String;[CIII)V +Landroidx/compose/ui/text/input/ImeAction; +HSPLandroidx/compose/ui/text/input/ImeAction;->()V +HSPLandroidx/compose/ui/text/input/ImeAction;->(I)V +HSPLandroidx/compose/ui/text/input/ImeAction;->access$getDefault$cp()I +HSPLandroidx/compose/ui/text/input/ImeAction;->access$getDone$cp()I +HSPLandroidx/compose/ui/text/input/ImeAction;->access$getGo$cp()I +HSPLandroidx/compose/ui/text/input/ImeAction;->access$getNone$cp()I +HSPLandroidx/compose/ui/text/input/ImeAction;->box-impl(I)Landroidx/compose/ui/text/input/ImeAction; +HSPLandroidx/compose/ui/text/input/ImeAction;->constructor-impl(I)I +HSPLandroidx/compose/ui/text/input/ImeAction;->equals-impl0(II)Z +Landroidx/compose/ui/text/input/ImeAction$Companion; +HSPLandroidx/compose/ui/text/input/ImeAction$Companion;->()V +HSPLandroidx/compose/ui/text/input/ImeAction$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/input/ImeAction$Companion;->getDefault-eUduSuo()I +HSPLandroidx/compose/ui/text/input/ImeAction$Companion;->getDone-eUduSuo()I +HSPLandroidx/compose/ui/text/input/ImeAction$Companion;->getGo-eUduSuo()I +HSPLandroidx/compose/ui/text/input/ImeAction$Companion;->getNone-eUduSuo()I +Landroidx/compose/ui/text/input/ImeOptions; +HSPLandroidx/compose/ui/text/input/ImeOptions;->()V +HSPLandroidx/compose/ui/text/input/ImeOptions;->(ZIZII)V +HSPLandroidx/compose/ui/text/input/ImeOptions;->(ZIZIIILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/input/ImeOptions;->(ZIZIILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/input/ImeOptions;->access$getDefault$cp()Landroidx/compose/ui/text/input/ImeOptions; +HSPLandroidx/compose/ui/text/input/ImeOptions;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/text/input/ImeOptions;->getAutoCorrect()Z +HSPLandroidx/compose/ui/text/input/ImeOptions;->getCapitalization-IUNYP9k()I +HSPLandroidx/compose/ui/text/input/ImeOptions;->getImeAction-eUduSuo()I +HSPLandroidx/compose/ui/text/input/ImeOptions;->getKeyboardType-PjHm6EE()I +HSPLandroidx/compose/ui/text/input/ImeOptions;->getSingleLine()Z +Landroidx/compose/ui/text/input/ImeOptions$Companion; +HSPLandroidx/compose/ui/text/input/ImeOptions$Companion;->()V +HSPLandroidx/compose/ui/text/input/ImeOptions$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/input/ImeOptions$Companion;->getDefault()Landroidx/compose/ui/text/input/ImeOptions; +Landroidx/compose/ui/text/input/InputEventCallback2; +Landroidx/compose/ui/text/input/InputMethodManager; +Landroidx/compose/ui/text/input/InputMethodManagerImpl; +HSPLandroidx/compose/ui/text/input/InputMethodManagerImpl;->(Landroid/view/View;)V +HSPLandroidx/compose/ui/text/input/InputMethodManagerImpl;->access$getView$p(Landroidx/compose/ui/text/input/InputMethodManagerImpl;)Landroid/view/View; +HSPLandroidx/compose/ui/text/input/InputMethodManagerImpl;->getImm()Landroid/view/inputmethod/InputMethodManager; +HSPLandroidx/compose/ui/text/input/InputMethodManagerImpl;->hideSoftInput()V +HSPLandroidx/compose/ui/text/input/InputMethodManagerImpl;->restartInput()V +HSPLandroidx/compose/ui/text/input/InputMethodManagerImpl;->showSoftInput()V +HSPLandroidx/compose/ui/text/input/InputMethodManagerImpl;->updateSelection(IIII)V +Landroidx/compose/ui/text/input/InputMethodManagerImpl$imm$2; +HSPLandroidx/compose/ui/text/input/InputMethodManagerImpl$imm$2;->(Landroidx/compose/ui/text/input/InputMethodManagerImpl;)V +HSPLandroidx/compose/ui/text/input/InputMethodManagerImpl$imm$2;->invoke()Landroid/view/inputmethod/InputMethodManager; +HSPLandroidx/compose/ui/text/input/InputMethodManagerImpl$imm$2;->invoke()Ljava/lang/Object; +Landroidx/compose/ui/text/input/KeyboardCapitalization; +HSPLandroidx/compose/ui/text/input/KeyboardCapitalization;->()V +HSPLandroidx/compose/ui/text/input/KeyboardCapitalization;->access$getCharacters$cp()I +HSPLandroidx/compose/ui/text/input/KeyboardCapitalization;->access$getNone$cp()I +HSPLandroidx/compose/ui/text/input/KeyboardCapitalization;->access$getSentences$cp()I +HSPLandroidx/compose/ui/text/input/KeyboardCapitalization;->access$getWords$cp()I +HSPLandroidx/compose/ui/text/input/KeyboardCapitalization;->constructor-impl(I)I +HSPLandroidx/compose/ui/text/input/KeyboardCapitalization;->equals-impl0(II)Z +Landroidx/compose/ui/text/input/KeyboardCapitalization$Companion; +HSPLandroidx/compose/ui/text/input/KeyboardCapitalization$Companion;->()V +HSPLandroidx/compose/ui/text/input/KeyboardCapitalization$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/input/KeyboardCapitalization$Companion;->getCharacters-IUNYP9k()I +HSPLandroidx/compose/ui/text/input/KeyboardCapitalization$Companion;->getNone-IUNYP9k()I +HSPLandroidx/compose/ui/text/input/KeyboardCapitalization$Companion;->getSentences-IUNYP9k()I +HSPLandroidx/compose/ui/text/input/KeyboardCapitalization$Companion;->getWords-IUNYP9k()I +Landroidx/compose/ui/text/input/KeyboardType; +HSPLandroidx/compose/ui/text/input/KeyboardType;->()V +HSPLandroidx/compose/ui/text/input/KeyboardType;->access$getAscii$cp()I +HSPLandroidx/compose/ui/text/input/KeyboardType;->access$getEmail$cp()I +HSPLandroidx/compose/ui/text/input/KeyboardType;->access$getNumber$cp()I +HSPLandroidx/compose/ui/text/input/KeyboardType;->access$getPassword$cp()I +HSPLandroidx/compose/ui/text/input/KeyboardType;->access$getPhone$cp()I +HSPLandroidx/compose/ui/text/input/KeyboardType;->access$getText$cp()I +HSPLandroidx/compose/ui/text/input/KeyboardType;->access$getUri$cp()I +HSPLandroidx/compose/ui/text/input/KeyboardType;->constructor-impl(I)I +HSPLandroidx/compose/ui/text/input/KeyboardType;->equals-impl0(II)Z +Landroidx/compose/ui/text/input/KeyboardType$Companion; +HSPLandroidx/compose/ui/text/input/KeyboardType$Companion;->()V +HSPLandroidx/compose/ui/text/input/KeyboardType$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/input/KeyboardType$Companion;->getAscii-PjHm6EE()I +HSPLandroidx/compose/ui/text/input/KeyboardType$Companion;->getEmail-PjHm6EE()I +HSPLandroidx/compose/ui/text/input/KeyboardType$Companion;->getNumber-PjHm6EE()I +HSPLandroidx/compose/ui/text/input/KeyboardType$Companion;->getPassword-PjHm6EE()I +HSPLandroidx/compose/ui/text/input/KeyboardType$Companion;->getPhone-PjHm6EE()I +HSPLandroidx/compose/ui/text/input/KeyboardType$Companion;->getText-PjHm6EE()I +HSPLandroidx/compose/ui/text/input/KeyboardType$Companion;->getUri-PjHm6EE()I +Landroidx/compose/ui/text/input/OffsetMapping; +HSPLandroidx/compose/ui/text/input/OffsetMapping;->()V +Landroidx/compose/ui/text/input/OffsetMapping$Companion; +HSPLandroidx/compose/ui/text/input/OffsetMapping$Companion;->()V +HSPLandroidx/compose/ui/text/input/OffsetMapping$Companion;->()V +HSPLandroidx/compose/ui/text/input/OffsetMapping$Companion;->getIdentity()Landroidx/compose/ui/text/input/OffsetMapping; +Landroidx/compose/ui/text/input/OffsetMapping$Companion$Identity$1; +HSPLandroidx/compose/ui/text/input/OffsetMapping$Companion$Identity$1;->()V +HSPLandroidx/compose/ui/text/input/OffsetMapping$Companion$Identity$1;->originalToTransformed(I)I +Landroidx/compose/ui/text/input/PartialGapBuffer; +HSPLandroidx/compose/ui/text/input/PartialGapBuffer;->()V +HSPLandroidx/compose/ui/text/input/PartialGapBuffer;->(Ljava/lang/String;)V +HSPLandroidx/compose/ui/text/input/PartialGapBuffer;->getLength()I +HSPLandroidx/compose/ui/text/input/PartialGapBuffer;->replace(IILjava/lang/String;)V +HSPLandroidx/compose/ui/text/input/PartialGapBuffer;->toString()Ljava/lang/String; +Landroidx/compose/ui/text/input/PartialGapBuffer$Companion; +HSPLandroidx/compose/ui/text/input/PartialGapBuffer$Companion;->()V +HSPLandroidx/compose/ui/text/input/PartialGapBuffer$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/text/input/PasswordVisualTransformation; +HSPLandroidx/compose/ui/text/input/PasswordVisualTransformation;->()V +HSPLandroidx/compose/ui/text/input/PasswordVisualTransformation;->(C)V +HSPLandroidx/compose/ui/text/input/PasswordVisualTransformation;->(CILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/input/PasswordVisualTransformation;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/text/input/PasswordVisualTransformation;->filter(Landroidx/compose/ui/text/AnnotatedString;)Landroidx/compose/ui/text/input/TransformedText; +Landroidx/compose/ui/text/input/PlatformTextInput; +Landroidx/compose/ui/text/input/PlatformTextInputAdapter; +Landroidx/compose/ui/text/input/PlatformTextInputPlugin; +Landroidx/compose/ui/text/input/PlatformTextInputPluginRegistry; +Landroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl; +HSPLandroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl;->()V +HSPLandroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl;->(Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl;->access$getFocusedPlugin$p(Landroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl;)Landroidx/compose/ui/text/input/PlatformTextInputPlugin; +HSPLandroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl;->access$setFocusedPlugin$p(Landroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl;Landroidx/compose/ui/text/input/PlatformTextInputPlugin;)V +HSPLandroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl;->getFocusedAdapter()Landroidx/compose/ui/text/input/PlatformTextInputAdapter; +HSPLandroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl;->getOrCreateAdapter(Landroidx/compose/ui/text/input/PlatformTextInputPlugin;)Landroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl$AdapterHandle; +HSPLandroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl;->instantiateAdapter(Landroidx/compose/ui/text/input/PlatformTextInputPlugin;)Landroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl$AdapterWithRefCount; +Landroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl$AdapterHandle; +HSPLandroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl$AdapterHandle;->()V +HSPLandroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl$AdapterHandle;->(Landroidx/compose/ui/text/input/PlatformTextInputAdapter;Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl$AdapterHandle;->getAdapter()Landroidx/compose/ui/text/input/PlatformTextInputAdapter; +Landroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl$AdapterInput; +HSPLandroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl$AdapterInput;->(Landroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl;Landroidx/compose/ui/text/input/PlatformTextInputPlugin;)V +HSPLandroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl$AdapterInput;->releaseInputFocus()V +HSPLandroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl$AdapterInput;->requestInputFocus()V +Landroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl$AdapterWithRefCount; +HSPLandroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl$AdapterWithRefCount;->(Landroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl;Landroidx/compose/ui/text/input/PlatformTextInputAdapter;)V +HSPLandroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl$AdapterWithRefCount;->getAdapter()Landroidx/compose/ui/text/input/PlatformTextInputAdapter; +HSPLandroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl$AdapterWithRefCount;->getRefCount()I +HSPLandroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl$AdapterWithRefCount;->incrementRefCount()V +HSPLandroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl$AdapterWithRefCount;->setRefCount(I)V +Landroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl$getOrCreateAdapter$1; +HSPLandroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl$getOrCreateAdapter$1;->(Landroidx/compose/ui/text/input/PlatformTextInputPluginRegistryImpl$AdapterWithRefCount;)V +Landroidx/compose/ui/text/input/PlatformTextInputService; +Landroidx/compose/ui/text/input/RecordingInputConnection; +HSPLandroidx/compose/ui/text/input/RecordingInputConnection;->(Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/ui/text/input/InputEventCallback2;Z)V +HSPLandroidx/compose/ui/text/input/RecordingInputConnection;->closeConnection()V +HSPLandroidx/compose/ui/text/input/RecordingInputConnection;->getHandler()Landroid/os/Handler; +HSPLandroidx/compose/ui/text/input/RecordingInputConnection;->getSelectedText(I)Ljava/lang/CharSequence; +HSPLandroidx/compose/ui/text/input/RecordingInputConnection;->getTextAfterCursor(II)Ljava/lang/CharSequence; +HSPLandroidx/compose/ui/text/input/RecordingInputConnection;->getTextBeforeCursor(II)Ljava/lang/CharSequence; +HSPLandroidx/compose/ui/text/input/RecordingInputConnection;->setMTextFieldValue$ui_release(Landroidx/compose/ui/text/input/TextFieldValue;)V +HSPLandroidx/compose/ui/text/input/RecordingInputConnection;->updateInputState(Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/ui/text/input/InputMethodManager;)V +Landroidx/compose/ui/text/input/TextFieldValue; +HSPLandroidx/compose/ui/text/input/TextFieldValue;->()V +HSPLandroidx/compose/ui/text/input/TextFieldValue;->(Landroidx/compose/ui/text/AnnotatedString;JLandroidx/compose/ui/text/TextRange;)V +HSPLandroidx/compose/ui/text/input/TextFieldValue;->(Landroidx/compose/ui/text/AnnotatedString;JLandroidx/compose/ui/text/TextRange;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/input/TextFieldValue;->(Ljava/lang/String;JLandroidx/compose/ui/text/TextRange;)V +HSPLandroidx/compose/ui/text/input/TextFieldValue;->(Ljava/lang/String;JLandroidx/compose/ui/text/TextRange;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/input/TextFieldValue;->(Ljava/lang/String;JLandroidx/compose/ui/text/TextRange;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/input/TextFieldValue;->copy-3r_uNRQ$default(Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/ui/text/AnnotatedString;JLandroidx/compose/ui/text/TextRange;ILjava/lang/Object;)Landroidx/compose/ui/text/input/TextFieldValue; +HSPLandroidx/compose/ui/text/input/TextFieldValue;->copy-3r_uNRQ$default(Landroidx/compose/ui/text/input/TextFieldValue;Ljava/lang/String;JLandroidx/compose/ui/text/TextRange;ILjava/lang/Object;)Landroidx/compose/ui/text/input/TextFieldValue; +HSPLandroidx/compose/ui/text/input/TextFieldValue;->copy-3r_uNRQ(Landroidx/compose/ui/text/AnnotatedString;JLandroidx/compose/ui/text/TextRange;)Landroidx/compose/ui/text/input/TextFieldValue; +HSPLandroidx/compose/ui/text/input/TextFieldValue;->copy-3r_uNRQ(Ljava/lang/String;JLandroidx/compose/ui/text/TextRange;)Landroidx/compose/ui/text/input/TextFieldValue; +HSPLandroidx/compose/ui/text/input/TextFieldValue;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/text/input/TextFieldValue;->getAnnotatedString()Landroidx/compose/ui/text/AnnotatedString; +HSPLandroidx/compose/ui/text/input/TextFieldValue;->getComposition-MzsxiRA()Landroidx/compose/ui/text/TextRange; +HSPLandroidx/compose/ui/text/input/TextFieldValue;->getSelection-d9O1mEE()J +HSPLandroidx/compose/ui/text/input/TextFieldValue;->getText()Ljava/lang/String; +Landroidx/compose/ui/text/input/TextFieldValue$Companion; +HSPLandroidx/compose/ui/text/input/TextFieldValue$Companion;->()V +HSPLandroidx/compose/ui/text/input/TextFieldValue$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/text/input/TextFieldValue$Companion$Saver$1; +HSPLandroidx/compose/ui/text/input/TextFieldValue$Companion$Saver$1;->()V +HSPLandroidx/compose/ui/text/input/TextFieldValue$Companion$Saver$1;->()V +Landroidx/compose/ui/text/input/TextFieldValue$Companion$Saver$2; +HSPLandroidx/compose/ui/text/input/TextFieldValue$Companion$Saver$2;->()V +HSPLandroidx/compose/ui/text/input/TextFieldValue$Companion$Saver$2;->()V +Landroidx/compose/ui/text/input/TextFieldValueKt; +HSPLandroidx/compose/ui/text/input/TextFieldValueKt;->getTextAfterSelection(Landroidx/compose/ui/text/input/TextFieldValue;I)Landroidx/compose/ui/text/AnnotatedString; +HSPLandroidx/compose/ui/text/input/TextFieldValueKt;->getTextBeforeSelection(Landroidx/compose/ui/text/input/TextFieldValue;I)Landroidx/compose/ui/text/AnnotatedString; +Landroidx/compose/ui/text/input/TextInputService; +HSPLandroidx/compose/ui/text/input/TextInputService;->()V +HSPLandroidx/compose/ui/text/input/TextInputService;->(Landroidx/compose/ui/text/input/PlatformTextInputService;)V +HSPLandroidx/compose/ui/text/input/TextInputService;->getCurrentInputSession$ui_text_release()Landroidx/compose/ui/text/input/TextInputSession; +HSPLandroidx/compose/ui/text/input/TextInputService;->startInput(Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/ui/text/input/ImeOptions;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/text/input/TextInputSession; +HSPLandroidx/compose/ui/text/input/TextInputService;->stopInput(Landroidx/compose/ui/text/input/TextInputSession;)V +Landroidx/compose/ui/text/input/TextInputServiceAndroid; +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid;->$r8$lambda$tFIm8sXGny3G873nGUe23EJe7OY(Landroidx/compose/ui/text/input/TextInputServiceAndroid;)V +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid;->(Landroid/view/View;Landroidx/compose/ui/text/input/InputMethodManager;Landroidx/compose/ui/text/input/PlatformTextInput;Ljava/util/concurrent/Executor;)V +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid;->(Landroid/view/View;Landroidx/compose/ui/text/input/InputMethodManager;Landroidx/compose/ui/text/input/PlatformTextInput;Ljava/util/concurrent/Executor;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid;->(Landroid/view/View;Landroidx/compose/ui/text/input/PlatformTextInput;)V +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid;->access$getIcs$p(Landroidx/compose/ui/text/input/TextInputServiceAndroid;)Ljava/util/List; +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid;->createInputConnection(Landroid/view/inputmethod/EditorInfo;)Landroid/view/inputmethod/InputConnection; +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid;->notifyFocusedRect(Landroidx/compose/ui/geometry/Rect;)V +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid;->processInputCommands$applyToState(Landroidx/compose/ui/text/input/TextInputServiceAndroid$TextInputCommand;Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlin/jvm/internal/Ref$ObjectRef;)V +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid;->processInputCommands()V +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid;->restartInputImmediately()V +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid;->sendInputCommand$lambda$1(Landroidx/compose/ui/text/input/TextInputServiceAndroid;)V +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid;->sendInputCommand(Landroidx/compose/ui/text/input/TextInputServiceAndroid$TextInputCommand;)V +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid;->setKeyboardVisibleImmediately(Z)V +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid;->startInput(Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/ui/text/input/ImeOptions;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid;->stopInput()V +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid;->updateState(Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/ui/text/input/TextFieldValue;)V +Landroidx/compose/ui/text/input/TextInputServiceAndroid$$ExternalSyntheticLambda0; +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid$$ExternalSyntheticLambda0;->(Landroidx/compose/ui/text/input/TextInputServiceAndroid;)V +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid$$ExternalSyntheticLambda0;->run()V +Landroidx/compose/ui/text/input/TextInputServiceAndroid$TextInputCommand; +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid$TextInputCommand;->$values()[Landroidx/compose/ui/text/input/TextInputServiceAndroid$TextInputCommand; +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid$TextInputCommand;->()V +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid$TextInputCommand;->(Ljava/lang/String;I)V +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid$TextInputCommand;->values()[Landroidx/compose/ui/text/input/TextInputServiceAndroid$TextInputCommand; +Landroidx/compose/ui/text/input/TextInputServiceAndroid$WhenMappings; +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid$WhenMappings;->()V +Landroidx/compose/ui/text/input/TextInputServiceAndroid$baseInputConnection$2; +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid$baseInputConnection$2;->(Landroidx/compose/ui/text/input/TextInputServiceAndroid;)V +Landroidx/compose/ui/text/input/TextInputServiceAndroid$createInputConnection$1; +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid$createInputConnection$1;->(Landroidx/compose/ui/text/input/TextInputServiceAndroid;)V +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid$createInputConnection$1;->onConnectionClosed(Landroidx/compose/ui/text/input/RecordingInputConnection;)V +Landroidx/compose/ui/text/input/TextInputServiceAndroid$onEditCommand$1; +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid$onEditCommand$1;->()V +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid$onEditCommand$1;->()V +Landroidx/compose/ui/text/input/TextInputServiceAndroid$onImeActionPerformed$1; +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid$onImeActionPerformed$1;->()V +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid$onImeActionPerformed$1;->()V +Landroidx/compose/ui/text/input/TextInputServiceAndroid$stopInput$1; +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid$stopInput$1;->()V +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid$stopInput$1;->()V +Landroidx/compose/ui/text/input/TextInputServiceAndroid$stopInput$2; +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid$stopInput$2;->()V +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid$stopInput$2;->()V +Landroidx/compose/ui/text/input/TextInputServiceAndroid_androidKt; +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid_androidKt;->$r8$lambda$RYljF3nl5HRu6JKEM8xFRHwbGFg(Ljava/lang/Runnable;J)V +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid_androidKt;->$r8$lambda$zzP0QYZAK9fPNHI8CrYdtRFmmqA(Landroid/view/Choreographer;Ljava/lang/Runnable;)V +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid_androidKt;->access$updateWithEmojiCompat(Landroid/view/inputmethod/EditorInfo;)V +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid_androidKt;->asExecutor$lambda$1$lambda$0(Ljava/lang/Runnable;J)V +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid_androidKt;->asExecutor$lambda$1(Landroid/view/Choreographer;Ljava/lang/Runnable;)V +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid_androidKt;->asExecutor(Landroid/view/Choreographer;)Ljava/util/concurrent/Executor; +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid_androidKt;->hasFlag(II)Z +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid_androidKt;->update(Landroid/view/inputmethod/EditorInfo;Landroidx/compose/ui/text/input/ImeOptions;Landroidx/compose/ui/text/input/TextFieldValue;)V +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid_androidKt;->updateWithEmojiCompat(Landroid/view/inputmethod/EditorInfo;)V +Landroidx/compose/ui/text/input/TextInputServiceAndroid_androidKt$$ExternalSyntheticLambda0; +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid_androidKt$$ExternalSyntheticLambda0;->(Ljava/lang/Runnable;)V +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid_androidKt$$ExternalSyntheticLambda0;->doFrame(J)V +Landroidx/compose/ui/text/input/TextInputServiceAndroid_androidKt$$ExternalSyntheticLambda1; +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid_androidKt$$ExternalSyntheticLambda1;->(Landroid/view/Choreographer;)V +HSPLandroidx/compose/ui/text/input/TextInputServiceAndroid_androidKt$$ExternalSyntheticLambda1;->execute(Ljava/lang/Runnable;)V +Landroidx/compose/ui/text/input/TextInputSession; +HSPLandroidx/compose/ui/text/input/TextInputSession;->()V +HSPLandroidx/compose/ui/text/input/TextInputSession;->(Landroidx/compose/ui/text/input/TextInputService;Landroidx/compose/ui/text/input/PlatformTextInputService;)V +HSPLandroidx/compose/ui/text/input/TextInputSession;->dispose()V +HSPLandroidx/compose/ui/text/input/TextInputSession;->isOpen()Z +HSPLandroidx/compose/ui/text/input/TextInputSession;->notifyFocusedRect(Landroidx/compose/ui/geometry/Rect;)Z +HSPLandroidx/compose/ui/text/input/TextInputSession;->updateState(Landroidx/compose/ui/text/input/TextFieldValue;Landroidx/compose/ui/text/input/TextFieldValue;)Z +Landroidx/compose/ui/text/input/TransformedText; +HSPLandroidx/compose/ui/text/input/TransformedText;->()V +HSPLandroidx/compose/ui/text/input/TransformedText;->(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/text/input/OffsetMapping;)V +HSPLandroidx/compose/ui/text/input/TransformedText;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/text/input/TransformedText;->getOffsetMapping()Landroidx/compose/ui/text/input/OffsetMapping; +HSPLandroidx/compose/ui/text/input/TransformedText;->getText()Landroidx/compose/ui/text/AnnotatedString; +Landroidx/compose/ui/text/input/VisualTransformation; +HSPLandroidx/compose/ui/text/input/VisualTransformation;->()V +Landroidx/compose/ui/text/input/VisualTransformation$Companion; +HSPLandroidx/compose/ui/text/input/VisualTransformation$Companion;->()V +HSPLandroidx/compose/ui/text/input/VisualTransformation$Companion;->()V +HSPLandroidx/compose/ui/text/input/VisualTransformation$Companion;->getNone()Landroidx/compose/ui/text/input/VisualTransformation; +Landroidx/compose/ui/text/input/VisualTransformation$Companion$None$1; +HSPLandroidx/compose/ui/text/input/VisualTransformation$Companion$None$1;->()V +HSPLandroidx/compose/ui/text/input/VisualTransformation$Companion$None$1;->()V +HSPLandroidx/compose/ui/text/input/VisualTransformation$Companion$None$1;->filter(Landroidx/compose/ui/text/AnnotatedString;)Landroidx/compose/ui/text/input/TransformedText; +Landroidx/compose/ui/text/intl/AndroidLocale; +HSPLandroidx/compose/ui/text/intl/AndroidLocale;->(Ljava/util/Locale;)V +Landroidx/compose/ui/text/intl/AndroidLocaleDelegateAPI24; +HSPLandroidx/compose/ui/text/intl/AndroidLocaleDelegateAPI24;->()V +HSPLandroidx/compose/ui/text/intl/AndroidLocaleDelegateAPI24;->getCurrent()Landroidx/compose/ui/text/intl/LocaleList; +Landroidx/compose/ui/text/intl/AndroidPlatformLocale_androidKt; +HSPLandroidx/compose/ui/text/intl/AndroidPlatformLocale_androidKt;->createPlatformLocaleDelegate()Landroidx/compose/ui/text/intl/PlatformLocaleDelegate; +Landroidx/compose/ui/text/intl/Locale; +HSPLandroidx/compose/ui/text/intl/Locale;->()V +HSPLandroidx/compose/ui/text/intl/Locale;->(Landroidx/compose/ui/text/intl/PlatformLocale;)V +Landroidx/compose/ui/text/intl/Locale$Companion; +HSPLandroidx/compose/ui/text/intl/Locale$Companion;->()V +HSPLandroidx/compose/ui/text/intl/Locale$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/text/intl/LocaleList; +HSPLandroidx/compose/ui/text/intl/LocaleList;->()V +HSPLandroidx/compose/ui/text/intl/LocaleList;->(Ljava/util/List;)V +HSPLandroidx/compose/ui/text/intl/LocaleList;->equals(Ljava/lang/Object;)Z +Landroidx/compose/ui/text/intl/LocaleList$Companion; +HSPLandroidx/compose/ui/text/intl/LocaleList$Companion;->()V +HSPLandroidx/compose/ui/text/intl/LocaleList$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/intl/LocaleList$Companion;->getCurrent()Landroidx/compose/ui/text/intl/LocaleList; +Landroidx/compose/ui/text/intl/PlatformLocale; +Landroidx/compose/ui/text/intl/PlatformLocaleDelegate; +Landroidx/compose/ui/text/intl/PlatformLocaleKt; +HSPLandroidx/compose/ui/text/intl/PlatformLocaleKt;->()V +HSPLandroidx/compose/ui/text/intl/PlatformLocaleKt;->getPlatformLocaleDelegate()Landroidx/compose/ui/text/intl/PlatformLocaleDelegate; +Landroidx/compose/ui/text/platform/AndroidAccessibilitySpannableString_androidKt; +HSPLandroidx/compose/ui/text/platform/AndroidAccessibilitySpannableString_androidKt;->setSpanStyle(Landroid/text/SpannableString;Landroidx/compose/ui/text/SpanStyle;IILandroidx/compose/ui/unit/Density;Landroidx/compose/ui/text/font/FontFamily$Resolver;)V +HSPLandroidx/compose/ui/text/platform/AndroidAccessibilitySpannableString_androidKt;->toAccessibilitySpannableString(Landroidx/compose/ui/text/AnnotatedString;Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/text/font/FontFamily$Resolver;Landroidx/compose/ui/text/platform/URLSpanCache;)Landroid/text/SpannableString; +Landroidx/compose/ui/text/platform/AndroidParagraphHelper_androidKt; +HSPLandroidx/compose/ui/text/platform/AndroidParagraphHelper_androidKt;->()V +HSPLandroidx/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; +HSPLandroidx/compose/ui/text/platform/AndroidParagraphHelper_androidKt;->isIncludeFontPaddingEnabled(Landroidx/compose/ui/text/TextStyle;)Z +Landroidx/compose/ui/text/platform/AndroidParagraphHelper_androidKt$NoopSpan$1; +HSPLandroidx/compose/ui/text/platform/AndroidParagraphHelper_androidKt$NoopSpan$1;->()V +Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics; +HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->(Ljava/lang/String;Landroidx/compose/ui/text/TextStyle;Ljava/util/List;Ljava/util/List;Landroidx/compose/ui/text/font/FontFamily$Resolver;Landroidx/compose/ui/unit/Density;)V +HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getCharSequence$ui_text_release()Ljava/lang/CharSequence; +HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getFontFamilyResolver()Landroidx/compose/ui/text/font/FontFamily$Resolver; +HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getHasStaleResolvedFonts()Z +HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getLayoutIntrinsics$ui_text_release()Landroidx/compose/ui/text/android/LayoutIntrinsics; +HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getMaxIntrinsicWidth()F +HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getMinIntrinsicWidth()F +HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getStyle()Landroidx/compose/ui/text/TextStyle; +HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getTextDirectionHeuristic$ui_text_release()I +HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;->getTextPaint$ui_text_release()Landroidx/compose/ui/text/platform/AndroidTextPaint; +Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics$resolveTypeface$1; +HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics$resolveTypeface$1;->(Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics;)V +HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics$resolveTypeface$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics$resolveTypeface$1;->invoke-DPcqOEQ(Landroidx/compose/ui/text/font/FontFamily;Landroidx/compose/ui/text/font/FontWeight;II)Landroid/graphics/Typeface; +Landroidx/compose/ui/text/platform/AndroidParagraphIntrinsics_androidKt; +HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics_androidKt;->ActualParagraphIntrinsics(Ljava/lang/String;Landroidx/compose/ui/text/TextStyle;Ljava/util/List;Ljava/util/List;Landroidx/compose/ui/unit/Density;Landroidx/compose/ui/text/font/FontFamily$Resolver;)Landroidx/compose/ui/text/ParagraphIntrinsics; +HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics_androidKt;->access$getHasEmojiCompat(Landroidx/compose/ui/text/TextStyle;)Z +HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics_androidKt;->getHasEmojiCompat(Landroidx/compose/ui/text/TextStyle;)Z +HSPLandroidx/compose/ui/text/platform/AndroidParagraphIntrinsics_androidKt;->resolveTextDirectionHeuristics-9GRLPo0(Landroidx/compose/ui/text/style/TextDirection;Landroidx/compose/ui/text/intl/LocaleList;)I +Landroidx/compose/ui/text/platform/AndroidParagraph_androidKt; +HSPLandroidx/compose/ui/text/platform/AndroidParagraph_androidKt;->ActualParagraph--hBUhpc(Landroidx/compose/ui/text/ParagraphIntrinsics;IZJ)Landroidx/compose/ui/text/Paragraph; +HSPLandroidx/compose/ui/text/platform/AndroidParagraph_androidKt;->ActualParagraph-O3s9Psw(Ljava/lang/String;Landroidx/compose/ui/text/TextStyle;Ljava/util/List;Ljava/util/List;IZJLandroidx/compose/ui/unit/Density;Landroidx/compose/ui/text/font/FontFamily$Resolver;)Landroidx/compose/ui/text/Paragraph; +Landroidx/compose/ui/text/platform/AndroidTextPaint; +HSPLandroidx/compose/ui/text/platform/AndroidTextPaint;->(IF)V +HSPLandroidx/compose/ui/text/platform/AndroidTextPaint;->getBlendMode-0nO6VwU()I +HSPLandroidx/compose/ui/text/platform/AndroidTextPaint;->setBlendMode-s9anfk8(I)V +HSPLandroidx/compose/ui/text/platform/AndroidTextPaint;->setBrush-12SF9DM(Landroidx/compose/ui/graphics/Brush;JF)V +HSPLandroidx/compose/ui/text/platform/AndroidTextPaint;->setColor-8_81llA(J)V +HSPLandroidx/compose/ui/text/platform/AndroidTextPaint;->setDrawStyle(Landroidx/compose/ui/graphics/drawscope/DrawStyle;)V +HSPLandroidx/compose/ui/text/platform/AndroidTextPaint;->setShadow(Landroidx/compose/ui/graphics/Shadow;)V +HSPLandroidx/compose/ui/text/platform/AndroidTextPaint;->setTextDecoration(Landroidx/compose/ui/text/style/TextDecoration;)V +Landroidx/compose/ui/text/platform/DefaultImpl; +HSPLandroidx/compose/ui/text/platform/DefaultImpl;->()V +HSPLandroidx/compose/ui/text/platform/DefaultImpl;->access$setLoadState$p(Landroidx/compose/ui/text/platform/DefaultImpl;Landroidx/compose/runtime/State;)V +HSPLandroidx/compose/ui/text/platform/DefaultImpl;->getFontLoadState()Landroidx/compose/runtime/State; +HSPLandroidx/compose/ui/text/platform/DefaultImpl;->getFontLoaded()Landroidx/compose/runtime/State; +Landroidx/compose/ui/text/platform/DefaultImpl$getFontLoadState$initCallback$1; +HSPLandroidx/compose/ui/text/platform/DefaultImpl$getFontLoadState$initCallback$1;->(Landroidx/compose/runtime/MutableState;Landroidx/compose/ui/text/platform/DefaultImpl;)V +HSPLandroidx/compose/ui/text/platform/DefaultImpl$getFontLoadState$initCallback$1;->onInitialized()V +Landroidx/compose/ui/text/platform/EmojiCompatStatus; +HSPLandroidx/compose/ui/text/platform/EmojiCompatStatus;->()V +HSPLandroidx/compose/ui/text/platform/EmojiCompatStatus;->()V +HSPLandroidx/compose/ui/text/platform/EmojiCompatStatus;->getFontLoaded()Landroidx/compose/runtime/State; +Landroidx/compose/ui/text/platform/EmojiCompatStatusDelegate; +Landroidx/compose/ui/text/platform/ImmutableBool; +HSPLandroidx/compose/ui/text/platform/ImmutableBool;->(Z)V +HSPLandroidx/compose/ui/text/platform/ImmutableBool;->getValue()Ljava/lang/Boolean; +HSPLandroidx/compose/ui/text/platform/ImmutableBool;->getValue()Ljava/lang/Object; +Landroidx/compose/ui/text/platform/Synchronization_jvmKt; +HSPLandroidx/compose/ui/text/platform/Synchronization_jvmKt;->createSynchronizedObject()Landroidx/compose/ui/text/platform/SynchronizedObject; +Landroidx/compose/ui/text/platform/SynchronizedObject; +HSPLandroidx/compose/ui/text/platform/SynchronizedObject;->()V +Landroidx/compose/ui/text/platform/URLSpanCache; +HSPLandroidx/compose/ui/text/platform/URLSpanCache;->()V +HSPLandroidx/compose/ui/text/platform/URLSpanCache;->()V +Landroidx/compose/ui/text/platform/extensions/LocaleListHelperMethods; +Landroidx/compose/ui/text/platform/extensions/PlaceholderExtensions_androidKt; +HSPLandroidx/compose/ui/text/platform/extensions/PlaceholderExtensions_androidKt;->setPlaceholders(Landroid/text/Spannable;Ljava/util/List;Landroidx/compose/ui/unit/Density;)V +Landroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt; +HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->flattenFontStylesAndApply(Landroidx/compose/ui/text/SpanStyle;Ljava/util/List;Lkotlin/jvm/functions/Function3;)V +HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->getNeedsLetterSpacingSpan(Landroidx/compose/ui/text/SpanStyle;)Z +HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->hasFontAttributes(Landroidx/compose/ui/text/TextStyle;)Z +HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->merge(Landroidx/compose/ui/text/SpanStyle;Landroidx/compose/ui/text/SpanStyle;)Landroidx/compose/ui/text/SpanStyle; +HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->resolveLineHeightInPx-o2QH7mI(JFLandroidx/compose/ui/unit/Density;)F +HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setBackground-RPmYEkk(Landroid/text/Spannable;JII)V +HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setBaselineShift-0ocSgnM(Landroid/text/Spannable;Landroidx/compose/ui/text/style/BaselineShift;II)V +HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setBrush(Landroid/text/Spannable;Landroidx/compose/ui/graphics/Brush;FII)V +HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setColor-RPmYEkk(Landroid/text/Spannable;JII)V +HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setDrawStyle(Landroid/text/Spannable;Landroidx/compose/ui/graphics/drawscope/DrawStyle;II)V +HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setFontAttributes(Landroid/text/Spannable;Landroidx/compose/ui/text/TextStyle;Ljava/util/List;Lkotlin/jvm/functions/Function4;)V +HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setFontFeatureSettings(Landroid/text/Spannable;Ljava/lang/String;II)V +HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setFontSize-KmRG4DE(Landroid/text/Spannable;JLandroidx/compose/ui/unit/Density;II)V +HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setGeometricTransform(Landroid/text/Spannable;Landroidx/compose/ui/text/style/TextGeometricTransform;II)V +HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setLineHeight-r9BaKPg(Landroid/text/Spannable;JFLandroidx/compose/ui/unit/Density;)V +HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setLocaleList(Landroid/text/Spannable;Landroidx/compose/ui/text/intl/LocaleList;II)V +HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setShadow(Landroid/text/Spannable;Landroidx/compose/ui/graphics/Shadow;II)V +HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setSpan(Landroid/text/Spannable;Ljava/lang/Object;II)V +HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setSpanStyle(Landroid/text/Spannable;Landroidx/compose/ui/text/AnnotatedString$Range;Landroidx/compose/ui/unit/Density;)V +HSPLandroidx/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 +HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setTextDecoration(Landroid/text/Spannable;Landroidx/compose/ui/text/style/TextDecoration;II)V +HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt;->setTextIndent(Landroid/text/Spannable;Landroidx/compose/ui/text/style/TextIndent;FLandroidx/compose/ui/unit/Density;)V +Landroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt$setFontAttributes$1; +HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt$setFontAttributes$1;->(Landroid/text/Spannable;Lkotlin/jvm/functions/Function4;)V +HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt$setFontAttributes$1;->invoke(Landroidx/compose/ui/text/SpanStyle;II)V +HSPLandroidx/compose/ui/text/platform/extensions/SpannableExtensions_androidKt$setFontAttributes$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/compose/ui/text/platform/extensions/TextPaintExtensions_androidKt; +HSPLandroidx/compose/ui/text/platform/extensions/TextPaintExtensions_androidKt;->applySpanStyle(Landroidx/compose/ui/text/platform/AndroidTextPaint;Landroidx/compose/ui/text/SpanStyle;Lkotlin/jvm/functions/Function4;Landroidx/compose/ui/unit/Density;Z)Landroidx/compose/ui/text/SpanStyle; +HSPLandroidx/compose/ui/text/platform/extensions/TextPaintExtensions_androidKt;->generateFallbackSpanStyle-62GTOB8(JZJLandroidx/compose/ui/text/style/BaselineShift;)Landroidx/compose/ui/text/SpanStyle; +HSPLandroidx/compose/ui/text/platform/extensions/TextPaintExtensions_androidKt;->hasFontAttributes(Landroidx/compose/ui/text/SpanStyle;)Z +HSPLandroidx/compose/ui/text/platform/extensions/TextPaintExtensions_androidKt;->setTextMotion(Landroidx/compose/ui/text/platform/AndroidTextPaint;Landroidx/compose/ui/text/style/TextMotion;)V +Landroidx/compose/ui/text/platform/style/ShaderBrushSpan; +Landroidx/compose/ui/text/style/BaselineShift; +HSPLandroidx/compose/ui/text/style/BaselineShift;->()V +HSPLandroidx/compose/ui/text/style/BaselineShift;->(F)V +HSPLandroidx/compose/ui/text/style/BaselineShift;->access$getNone$cp()F +HSPLandroidx/compose/ui/text/style/BaselineShift;->box-impl(F)Landroidx/compose/ui/text/style/BaselineShift; +HSPLandroidx/compose/ui/text/style/BaselineShift;->constructor-impl(F)F +HSPLandroidx/compose/ui/text/style/BaselineShift;->equals-impl0(FF)Z +HSPLandroidx/compose/ui/text/style/BaselineShift;->unbox-impl()F +Landroidx/compose/ui/text/style/BaselineShift$Companion; +HSPLandroidx/compose/ui/text/style/BaselineShift$Companion;->()V +HSPLandroidx/compose/ui/text/style/BaselineShift$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/style/BaselineShift$Companion;->getNone-y9eOQZs()F +Landroidx/compose/ui/text/style/BrushStyle; +Landroidx/compose/ui/text/style/ColorStyle; +HSPLandroidx/compose/ui/text/style/ColorStyle;->(J)V +HSPLandroidx/compose/ui/text/style/ColorStyle;->(JLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/style/ColorStyle;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/text/style/ColorStyle;->getAlpha()F +HSPLandroidx/compose/ui/text/style/ColorStyle;->getBrush()Landroidx/compose/ui/graphics/Brush; +HSPLandroidx/compose/ui/text/style/ColorStyle;->getColor-0d7_KjU()J +Landroidx/compose/ui/text/style/Hyphens; +HSPLandroidx/compose/ui/text/style/Hyphens;->()V +HSPLandroidx/compose/ui/text/style/Hyphens;->(I)V +HSPLandroidx/compose/ui/text/style/Hyphens;->access$getAuto$cp()I +HSPLandroidx/compose/ui/text/style/Hyphens;->access$getNone$cp()I +HSPLandroidx/compose/ui/text/style/Hyphens;->box-impl(I)Landroidx/compose/ui/text/style/Hyphens; +HSPLandroidx/compose/ui/text/style/Hyphens;->constructor-impl(I)I +HSPLandroidx/compose/ui/text/style/Hyphens;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/text/style/Hyphens;->equals-impl(ILjava/lang/Object;)Z +HSPLandroidx/compose/ui/text/style/Hyphens;->equals-impl0(II)Z +HSPLandroidx/compose/ui/text/style/Hyphens;->unbox-impl()I +Landroidx/compose/ui/text/style/Hyphens$Companion; +HSPLandroidx/compose/ui/text/style/Hyphens$Companion;->()V +HSPLandroidx/compose/ui/text/style/Hyphens$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/style/Hyphens$Companion;->getAuto-vmbZdU8()I +HSPLandroidx/compose/ui/text/style/Hyphens$Companion;->getNone-vmbZdU8()I +Landroidx/compose/ui/text/style/LineBreak; +HSPLandroidx/compose/ui/text/style/LineBreak;->()V +HSPLandroidx/compose/ui/text/style/LineBreak;->(I)V +HSPLandroidx/compose/ui/text/style/LineBreak;->access$getSimple$cp()I +HSPLandroidx/compose/ui/text/style/LineBreak;->box-impl(I)Landroidx/compose/ui/text/style/LineBreak; +HSPLandroidx/compose/ui/text/style/LineBreak;->constructor-impl(I)I +HSPLandroidx/compose/ui/text/style/LineBreak;->constructor-impl(III)I +HSPLandroidx/compose/ui/text/style/LineBreak;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/text/style/LineBreak;->equals-impl(ILjava/lang/Object;)Z +HSPLandroidx/compose/ui/text/style/LineBreak;->getStrategy-fcGXIks(I)I +HSPLandroidx/compose/ui/text/style/LineBreak;->getStrictness-usljTpc(I)I +HSPLandroidx/compose/ui/text/style/LineBreak;->getWordBreak-jp8hJ3c(I)I +HSPLandroidx/compose/ui/text/style/LineBreak;->unbox-impl()I +Landroidx/compose/ui/text/style/LineBreak$Companion; +HSPLandroidx/compose/ui/text/style/LineBreak$Companion;->()V +HSPLandroidx/compose/ui/text/style/LineBreak$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/style/LineBreak$Companion;->getSimple-rAG3T2k()I +Landroidx/compose/ui/text/style/LineBreak$Strategy; +HSPLandroidx/compose/ui/text/style/LineBreak$Strategy;->()V +HSPLandroidx/compose/ui/text/style/LineBreak$Strategy;->(I)V +HSPLandroidx/compose/ui/text/style/LineBreak$Strategy;->access$getBalanced$cp()I +HSPLandroidx/compose/ui/text/style/LineBreak$Strategy;->access$getHighQuality$cp()I +HSPLandroidx/compose/ui/text/style/LineBreak$Strategy;->access$getSimple$cp()I +HSPLandroidx/compose/ui/text/style/LineBreak$Strategy;->box-impl(I)Landroidx/compose/ui/text/style/LineBreak$Strategy; +HSPLandroidx/compose/ui/text/style/LineBreak$Strategy;->constructor-impl(I)I +HSPLandroidx/compose/ui/text/style/LineBreak$Strategy;->equals-impl0(II)Z +HSPLandroidx/compose/ui/text/style/LineBreak$Strategy;->unbox-impl()I +Landroidx/compose/ui/text/style/LineBreak$Strategy$Companion; +HSPLandroidx/compose/ui/text/style/LineBreak$Strategy$Companion;->()V +HSPLandroidx/compose/ui/text/style/LineBreak$Strategy$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/style/LineBreak$Strategy$Companion;->getBalanced-fcGXIks()I +HSPLandroidx/compose/ui/text/style/LineBreak$Strategy$Companion;->getHighQuality-fcGXIks()I +HSPLandroidx/compose/ui/text/style/LineBreak$Strategy$Companion;->getSimple-fcGXIks()I +Landroidx/compose/ui/text/style/LineBreak$Strictness; +HSPLandroidx/compose/ui/text/style/LineBreak$Strictness;->()V +HSPLandroidx/compose/ui/text/style/LineBreak$Strictness;->(I)V +HSPLandroidx/compose/ui/text/style/LineBreak$Strictness;->access$getDefault$cp()I +HSPLandroidx/compose/ui/text/style/LineBreak$Strictness;->access$getLoose$cp()I +HSPLandroidx/compose/ui/text/style/LineBreak$Strictness;->access$getNormal$cp()I +HSPLandroidx/compose/ui/text/style/LineBreak$Strictness;->access$getStrict$cp()I +HSPLandroidx/compose/ui/text/style/LineBreak$Strictness;->box-impl(I)Landroidx/compose/ui/text/style/LineBreak$Strictness; +HSPLandroidx/compose/ui/text/style/LineBreak$Strictness;->constructor-impl(I)I +HSPLandroidx/compose/ui/text/style/LineBreak$Strictness;->equals-impl0(II)Z +HSPLandroidx/compose/ui/text/style/LineBreak$Strictness;->unbox-impl()I +Landroidx/compose/ui/text/style/LineBreak$Strictness$Companion; +HSPLandroidx/compose/ui/text/style/LineBreak$Strictness$Companion;->()V +HSPLandroidx/compose/ui/text/style/LineBreak$Strictness$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/style/LineBreak$Strictness$Companion;->getDefault-usljTpc()I +HSPLandroidx/compose/ui/text/style/LineBreak$Strictness$Companion;->getLoose-usljTpc()I +HSPLandroidx/compose/ui/text/style/LineBreak$Strictness$Companion;->getNormal-usljTpc()I +HSPLandroidx/compose/ui/text/style/LineBreak$Strictness$Companion;->getStrict-usljTpc()I +Landroidx/compose/ui/text/style/LineBreak$WordBreak; +HSPLandroidx/compose/ui/text/style/LineBreak$WordBreak;->()V +HSPLandroidx/compose/ui/text/style/LineBreak$WordBreak;->(I)V +HSPLandroidx/compose/ui/text/style/LineBreak$WordBreak;->access$getDefault$cp()I +HSPLandroidx/compose/ui/text/style/LineBreak$WordBreak;->access$getPhrase$cp()I +HSPLandroidx/compose/ui/text/style/LineBreak$WordBreak;->box-impl(I)Landroidx/compose/ui/text/style/LineBreak$WordBreak; +HSPLandroidx/compose/ui/text/style/LineBreak$WordBreak;->constructor-impl(I)I +HSPLandroidx/compose/ui/text/style/LineBreak$WordBreak;->equals-impl0(II)Z +HSPLandroidx/compose/ui/text/style/LineBreak$WordBreak;->unbox-impl()I +Landroidx/compose/ui/text/style/LineBreak$WordBreak$Companion; +HSPLandroidx/compose/ui/text/style/LineBreak$WordBreak$Companion;->()V +HSPLandroidx/compose/ui/text/style/LineBreak$WordBreak$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/style/LineBreak$WordBreak$Companion;->getDefault-jp8hJ3c()I +HSPLandroidx/compose/ui/text/style/LineBreak$WordBreak$Companion;->getPhrase-jp8hJ3c()I +Landroidx/compose/ui/text/style/LineBreak_androidKt; +HSPLandroidx/compose/ui/text/style/LineBreak_androidKt;->access$packBytes(III)I +HSPLandroidx/compose/ui/text/style/LineBreak_androidKt;->access$unpackByte1(I)I +HSPLandroidx/compose/ui/text/style/LineBreak_androidKt;->access$unpackByte2(I)I +HSPLandroidx/compose/ui/text/style/LineBreak_androidKt;->access$unpackByte3(I)I +HSPLandroidx/compose/ui/text/style/LineBreak_androidKt;->packBytes(III)I +HSPLandroidx/compose/ui/text/style/LineBreak_androidKt;->unpackByte1(I)I +HSPLandroidx/compose/ui/text/style/LineBreak_androidKt;->unpackByte2(I)I +HSPLandroidx/compose/ui/text/style/LineBreak_androidKt;->unpackByte3(I)I +Landroidx/compose/ui/text/style/LineHeightStyle; +Landroidx/compose/ui/text/style/TextAlign; +HSPLandroidx/compose/ui/text/style/TextAlign;->()V +HSPLandroidx/compose/ui/text/style/TextAlign;->(I)V +HSPLandroidx/compose/ui/text/style/TextAlign;->access$getCenter$cp()I +HSPLandroidx/compose/ui/text/style/TextAlign;->access$getEnd$cp()I +HSPLandroidx/compose/ui/text/style/TextAlign;->access$getJustify$cp()I +HSPLandroidx/compose/ui/text/style/TextAlign;->access$getLeft$cp()I +HSPLandroidx/compose/ui/text/style/TextAlign;->access$getRight$cp()I +HSPLandroidx/compose/ui/text/style/TextAlign;->access$getStart$cp()I +HSPLandroidx/compose/ui/text/style/TextAlign;->box-impl(I)Landroidx/compose/ui/text/style/TextAlign; +HSPLandroidx/compose/ui/text/style/TextAlign;->constructor-impl(I)I +HSPLandroidx/compose/ui/text/style/TextAlign;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/text/style/TextAlign;->equals-impl(ILjava/lang/Object;)Z +HSPLandroidx/compose/ui/text/style/TextAlign;->equals-impl0(II)Z +HSPLandroidx/compose/ui/text/style/TextAlign;->unbox-impl()I +Landroidx/compose/ui/text/style/TextAlign$Companion; +HSPLandroidx/compose/ui/text/style/TextAlign$Companion;->()V +HSPLandroidx/compose/ui/text/style/TextAlign$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/style/TextAlign$Companion;->getCenter-e0LSkKk()I +HSPLandroidx/compose/ui/text/style/TextAlign$Companion;->getEnd-e0LSkKk()I +HSPLandroidx/compose/ui/text/style/TextAlign$Companion;->getJustify-e0LSkKk()I +HSPLandroidx/compose/ui/text/style/TextAlign$Companion;->getLeft-e0LSkKk()I +HSPLandroidx/compose/ui/text/style/TextAlign$Companion;->getRight-e0LSkKk()I +HSPLandroidx/compose/ui/text/style/TextAlign$Companion;->getStart-e0LSkKk()I +Landroidx/compose/ui/text/style/TextDecoration; +HSPLandroidx/compose/ui/text/style/TextDecoration;->()V +HSPLandroidx/compose/ui/text/style/TextDecoration;->(I)V +HSPLandroidx/compose/ui/text/style/TextDecoration;->access$getNone$cp()Landroidx/compose/ui/text/style/TextDecoration; +HSPLandroidx/compose/ui/text/style/TextDecoration;->access$getUnderline$cp()Landroidx/compose/ui/text/style/TextDecoration; +HSPLandroidx/compose/ui/text/style/TextDecoration;->equals(Ljava/lang/Object;)Z +Landroidx/compose/ui/text/style/TextDecoration$Companion; +HSPLandroidx/compose/ui/text/style/TextDecoration$Companion;->()V +HSPLandroidx/compose/ui/text/style/TextDecoration$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/style/TextDecoration$Companion;->getNone()Landroidx/compose/ui/text/style/TextDecoration; +HSPLandroidx/compose/ui/text/style/TextDecoration$Companion;->getUnderline()Landroidx/compose/ui/text/style/TextDecoration; +Landroidx/compose/ui/text/style/TextDirection; +HSPLandroidx/compose/ui/text/style/TextDirection;->()V +HSPLandroidx/compose/ui/text/style/TextDirection;->(I)V +HSPLandroidx/compose/ui/text/style/TextDirection;->access$getContent$cp()I +HSPLandroidx/compose/ui/text/style/TextDirection;->access$getContentOrLtr$cp()I +HSPLandroidx/compose/ui/text/style/TextDirection;->access$getContentOrRtl$cp()I +HSPLandroidx/compose/ui/text/style/TextDirection;->access$getLtr$cp()I +HSPLandroidx/compose/ui/text/style/TextDirection;->access$getRtl$cp()I +HSPLandroidx/compose/ui/text/style/TextDirection;->box-impl(I)Landroidx/compose/ui/text/style/TextDirection; +HSPLandroidx/compose/ui/text/style/TextDirection;->constructor-impl(I)I +HSPLandroidx/compose/ui/text/style/TextDirection;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/text/style/TextDirection;->equals-impl(ILjava/lang/Object;)Z +HSPLandroidx/compose/ui/text/style/TextDirection;->equals-impl0(II)Z +HSPLandroidx/compose/ui/text/style/TextDirection;->unbox-impl()I +Landroidx/compose/ui/text/style/TextDirection$Companion; +HSPLandroidx/compose/ui/text/style/TextDirection$Companion;->()V +HSPLandroidx/compose/ui/text/style/TextDirection$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/style/TextDirection$Companion;->getContent-s_7X-co()I +HSPLandroidx/compose/ui/text/style/TextDirection$Companion;->getContentOrLtr-s_7X-co()I +HSPLandroidx/compose/ui/text/style/TextDirection$Companion;->getContentOrRtl-s_7X-co()I +HSPLandroidx/compose/ui/text/style/TextDirection$Companion;->getLtr-s_7X-co()I +HSPLandroidx/compose/ui/text/style/TextDirection$Companion;->getRtl-s_7X-co()I +Landroidx/compose/ui/text/style/TextForegroundStyle; +HSPLandroidx/compose/ui/text/style/TextForegroundStyle;->()V +HSPLandroidx/compose/ui/text/style/TextForegroundStyle;->merge(Landroidx/compose/ui/text/style/TextForegroundStyle;)Landroidx/compose/ui/text/style/TextForegroundStyle; +HSPLandroidx/compose/ui/text/style/TextForegroundStyle;->takeOrElse(Lkotlin/jvm/functions/Function0;)Landroidx/compose/ui/text/style/TextForegroundStyle; +Landroidx/compose/ui/text/style/TextForegroundStyle$Companion; +HSPLandroidx/compose/ui/text/style/TextForegroundStyle$Companion;->()V +HSPLandroidx/compose/ui/text/style/TextForegroundStyle$Companion;->()V +HSPLandroidx/compose/ui/text/style/TextForegroundStyle$Companion;->from-8_81llA(J)Landroidx/compose/ui/text/style/TextForegroundStyle; +Landroidx/compose/ui/text/style/TextForegroundStyle$Unspecified; +HSPLandroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;->()V +HSPLandroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;->()V +HSPLandroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;->getAlpha()F +HSPLandroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;->getBrush()Landroidx/compose/ui/graphics/Brush; +HSPLandroidx/compose/ui/text/style/TextForegroundStyle$Unspecified;->getColor-0d7_KjU()J +Landroidx/compose/ui/text/style/TextForegroundStyle$merge$2; +HSPLandroidx/compose/ui/text/style/TextForegroundStyle$merge$2;->(Landroidx/compose/ui/text/style/TextForegroundStyle;)V +HSPLandroidx/compose/ui/text/style/TextForegroundStyle$merge$2;->invoke()Landroidx/compose/ui/text/style/TextForegroundStyle; +HSPLandroidx/compose/ui/text/style/TextForegroundStyle$merge$2;->invoke()Ljava/lang/Object; +Landroidx/compose/ui/text/style/TextGeometricTransform; +HSPLandroidx/compose/ui/text/style/TextGeometricTransform;->()V +HSPLandroidx/compose/ui/text/style/TextGeometricTransform;->(FF)V +HSPLandroidx/compose/ui/text/style/TextGeometricTransform;->access$getNone$cp()Landroidx/compose/ui/text/style/TextGeometricTransform; +HSPLandroidx/compose/ui/text/style/TextGeometricTransform;->equals(Ljava/lang/Object;)Z +Landroidx/compose/ui/text/style/TextGeometricTransform$Companion; +HSPLandroidx/compose/ui/text/style/TextGeometricTransform$Companion;->()V +HSPLandroidx/compose/ui/text/style/TextGeometricTransform$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/style/TextGeometricTransform$Companion;->getNone$ui_text_release()Landroidx/compose/ui/text/style/TextGeometricTransform; +Landroidx/compose/ui/text/style/TextIndent; +HSPLandroidx/compose/ui/text/style/TextIndent;->()V +HSPLandroidx/compose/ui/text/style/TextIndent;->(JJ)V +HSPLandroidx/compose/ui/text/style/TextIndent;->(JJILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/style/TextIndent;->(JJLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/style/TextIndent;->access$getNone$cp()Landroidx/compose/ui/text/style/TextIndent; +HSPLandroidx/compose/ui/text/style/TextIndent;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/text/style/TextIndent;->getFirstLine-XSAIIZE()J +HSPLandroidx/compose/ui/text/style/TextIndent;->getRestLine-XSAIIZE()J +Landroidx/compose/ui/text/style/TextIndent$Companion; +HSPLandroidx/compose/ui/text/style/TextIndent$Companion;->()V +HSPLandroidx/compose/ui/text/style/TextIndent$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/style/TextIndent$Companion;->getNone()Landroidx/compose/ui/text/style/TextIndent; +Landroidx/compose/ui/text/style/TextMotion; +HSPLandroidx/compose/ui/text/style/TextMotion;->()V +HSPLandroidx/compose/ui/text/style/TextMotion;->(IZ)V +HSPLandroidx/compose/ui/text/style/TextMotion;->(IZLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/style/TextMotion;->access$getStatic$cp()Landroidx/compose/ui/text/style/TextMotion; +HSPLandroidx/compose/ui/text/style/TextMotion;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/text/style/TextMotion;->getLinearity-4e0Vf04$ui_text_release()I +HSPLandroidx/compose/ui/text/style/TextMotion;->getSubpixelTextPositioning$ui_text_release()Z +Landroidx/compose/ui/text/style/TextMotion$Companion; +HSPLandroidx/compose/ui/text/style/TextMotion$Companion;->()V +HSPLandroidx/compose/ui/text/style/TextMotion$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/style/TextMotion$Companion;->getStatic()Landroidx/compose/ui/text/style/TextMotion; +Landroidx/compose/ui/text/style/TextMotion$Linearity; +HSPLandroidx/compose/ui/text/style/TextMotion$Linearity;->()V +HSPLandroidx/compose/ui/text/style/TextMotion$Linearity;->access$getFontHinting$cp()I +HSPLandroidx/compose/ui/text/style/TextMotion$Linearity;->access$getLinear$cp()I +HSPLandroidx/compose/ui/text/style/TextMotion$Linearity;->constructor-impl(I)I +HSPLandroidx/compose/ui/text/style/TextMotion$Linearity;->equals-impl0(II)Z +Landroidx/compose/ui/text/style/TextMotion$Linearity$Companion; +HSPLandroidx/compose/ui/text/style/TextMotion$Linearity$Companion;->()V +HSPLandroidx/compose/ui/text/style/TextMotion$Linearity$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/style/TextMotion$Linearity$Companion;->getFontHinting-4e0Vf04()I +HSPLandroidx/compose/ui/text/style/TextMotion$Linearity$Companion;->getLinear-4e0Vf04()I +Landroidx/compose/ui/text/style/TextOverflow; +HSPLandroidx/compose/ui/text/style/TextOverflow;->()V +HSPLandroidx/compose/ui/text/style/TextOverflow;->access$getClip$cp()I +HSPLandroidx/compose/ui/text/style/TextOverflow;->access$getEllipsis$cp()I +HSPLandroidx/compose/ui/text/style/TextOverflow;->constructor-impl(I)I +HSPLandroidx/compose/ui/text/style/TextOverflow;->equals-impl0(II)Z +Landroidx/compose/ui/text/style/TextOverflow$Companion; +HSPLandroidx/compose/ui/text/style/TextOverflow$Companion;->()V +HSPLandroidx/compose/ui/text/style/TextOverflow$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/text/style/TextOverflow$Companion;->getClip-gIe3tQ8()I +HSPLandroidx/compose/ui/text/style/TextOverflow$Companion;->getEllipsis-gIe3tQ8()I +Landroidx/compose/ui/unit/AndroidDensity_androidKt; +HSPLandroidx/compose/ui/unit/AndroidDensity_androidKt;->Density(Landroid/content/Context;)Landroidx/compose/ui/unit/Density; +Landroidx/compose/ui/unit/Constraints; +HSPLandroidx/compose/ui/unit/Constraints;->()V +HSPLandroidx/compose/ui/unit/Constraints;->(J)V +HSPLandroidx/compose/ui/unit/Constraints;->access$getMinHeightOffsets$cp()[I +HSPLandroidx/compose/ui/unit/Constraints;->box-impl(J)Landroidx/compose/ui/unit/Constraints; +HSPLandroidx/compose/ui/unit/Constraints;->constructor-impl(J)J +HSPLandroidx/compose/ui/unit/Constraints;->copy-Zbe2FdA$default(JIIIIILjava/lang/Object;)J +HSPLandroidx/compose/ui/unit/Constraints;->copy-Zbe2FdA(JIIII)J +HSPLandroidx/compose/ui/unit/Constraints;->equals-impl0(JJ)Z +HSPLandroidx/compose/ui/unit/Constraints;->getFocusIndex-impl(J)I +HSPLandroidx/compose/ui/unit/Constraints;->getHasBoundedHeight-impl(J)Z +HSPLandroidx/compose/ui/unit/Constraints;->getHasBoundedWidth-impl(J)Z +HSPLandroidx/compose/ui/unit/Constraints;->getHasFixedHeight-impl(J)Z +HSPLandroidx/compose/ui/unit/Constraints;->getHasFixedWidth-impl(J)Z +HSPLandroidx/compose/ui/unit/Constraints;->getMaxHeight-impl(J)I +HSPLandroidx/compose/ui/unit/Constraints;->getMaxWidth-impl(J)I +HSPLandroidx/compose/ui/unit/Constraints;->getMinHeight-impl(J)I +HSPLandroidx/compose/ui/unit/Constraints;->getMinWidth-impl(J)I +HSPLandroidx/compose/ui/unit/Constraints;->unbox-impl()J +Landroidx/compose/ui/unit/Constraints$Companion; +HSPLandroidx/compose/ui/unit/Constraints$Companion;->()V +HSPLandroidx/compose/ui/unit/Constraints$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/unit/Constraints$Companion;->bitsNeedForSize(I)I +HSPLandroidx/compose/ui/unit/Constraints$Companion;->createConstraints-Zbe2FdA$ui_unit_release(IIII)J +HSPLandroidx/compose/ui/unit/Constraints$Companion;->fixed-JhjzzOo(II)J +Landroidx/compose/ui/unit/ConstraintsKt; +HSPLandroidx/compose/ui/unit/ConstraintsKt;->Constraints$default(IIIIILjava/lang/Object;)J +HSPLandroidx/compose/ui/unit/ConstraintsKt;->Constraints(IIII)J +HSPLandroidx/compose/ui/unit/ConstraintsKt;->addMaxWithMinimum(II)I +HSPLandroidx/compose/ui/unit/ConstraintsKt;->constrain-4WqzIAM(JJ)J +HSPLandroidx/compose/ui/unit/ConstraintsKt;->constrain-N9IONVI(JJ)J +HSPLandroidx/compose/ui/unit/ConstraintsKt;->constrainHeight-K40F9xA(JI)I +HSPLandroidx/compose/ui/unit/ConstraintsKt;->constrainWidth-K40F9xA(JI)I +HSPLandroidx/compose/ui/unit/ConstraintsKt;->offset-NN6Ew-U(JII)J +Landroidx/compose/ui/unit/Density; +HSPLandroidx/compose/ui/unit/Density;->roundToPx-0680j_4(F)I +HSPLandroidx/compose/ui/unit/Density;->toDp-GaN1DYA(J)F +HSPLandroidx/compose/ui/unit/Density;->toDp-u2uoSUM(F)F +HSPLandroidx/compose/ui/unit/Density;->toDp-u2uoSUM(I)F +HSPLandroidx/compose/ui/unit/Density;->toDpSize-k-rfVVM(J)J +HSPLandroidx/compose/ui/unit/Density;->toPx--R2X_6o(J)F +HSPLandroidx/compose/ui/unit/Density;->toPx-0680j_4(F)F +HSPLandroidx/compose/ui/unit/Density;->toSize-XkaWNTQ(J)J +Landroidx/compose/ui/unit/DensityImpl; +HSPLandroidx/compose/ui/unit/DensityImpl;->(FF)V +HSPLandroidx/compose/ui/unit/DensityImpl;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/unit/DensityImpl;->getDensity()F +HSPLandroidx/compose/ui/unit/DensityImpl;->getFontScale()F +Landroidx/compose/ui/unit/DensityKt; +HSPLandroidx/compose/ui/unit/DensityKt;->Density$default(FFILjava/lang/Object;)Landroidx/compose/ui/unit/Density; +HSPLandroidx/compose/ui/unit/DensityKt;->Density(FF)Landroidx/compose/ui/unit/Density; +Landroidx/compose/ui/unit/Dp; +HSPLandroidx/compose/ui/unit/Dp;->()V +HSPLandroidx/compose/ui/unit/Dp;->(F)V +HSPLandroidx/compose/ui/unit/Dp;->access$getHairline$cp()F +HSPLandroidx/compose/ui/unit/Dp;->access$getUnspecified$cp()F +HSPLandroidx/compose/ui/unit/Dp;->box-impl(F)Landroidx/compose/ui/unit/Dp; +HSPLandroidx/compose/ui/unit/Dp;->compareTo(Ljava/lang/Object;)I +HSPLandroidx/compose/ui/unit/Dp;->compareTo-0680j_4(F)I +HSPLandroidx/compose/ui/unit/Dp;->compareTo-0680j_4(FF)I +HSPLandroidx/compose/ui/unit/Dp;->constructor-impl(F)F +HSPLandroidx/compose/ui/unit/Dp;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/unit/Dp;->equals-impl(FLjava/lang/Object;)Z +HSPLandroidx/compose/ui/unit/Dp;->equals-impl0(FF)Z +HSPLandroidx/compose/ui/unit/Dp;->hashCode-impl(F)I +HSPLandroidx/compose/ui/unit/Dp;->unbox-impl()F +Landroidx/compose/ui/unit/Dp$Companion; +HSPLandroidx/compose/ui/unit/Dp$Companion;->()V +HSPLandroidx/compose/ui/unit/Dp$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/unit/Dp$Companion;->getHairline-D9Ej5fM()F +HSPLandroidx/compose/ui/unit/Dp$Companion;->getUnspecified-D9Ej5fM()F +Landroidx/compose/ui/unit/DpKt; +HSPLandroidx/compose/ui/unit/DpKt;->DpOffset-YgX7TsA(FF)J +HSPLandroidx/compose/ui/unit/DpKt;->DpSize-YgX7TsA(FF)J +Landroidx/compose/ui/unit/DpOffset; +HSPLandroidx/compose/ui/unit/DpOffset;->()V +HSPLandroidx/compose/ui/unit/DpOffset;->constructor-impl(J)J +Landroidx/compose/ui/unit/DpOffset$Companion; +HSPLandroidx/compose/ui/unit/DpOffset$Companion;->()V +HSPLandroidx/compose/ui/unit/DpOffset$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/compose/ui/unit/DpSize; +HSPLandroidx/compose/ui/unit/DpSize;->()V +HSPLandroidx/compose/ui/unit/DpSize;->(J)V +HSPLandroidx/compose/ui/unit/DpSize;->access$getUnspecified$cp()J +HSPLandroidx/compose/ui/unit/DpSize;->box-impl(J)Landroidx/compose/ui/unit/DpSize; +HSPLandroidx/compose/ui/unit/DpSize;->constructor-impl(J)J +HSPLandroidx/compose/ui/unit/DpSize;->equals-impl0(JJ)Z +HSPLandroidx/compose/ui/unit/DpSize;->getHeight-D9Ej5fM(J)F +HSPLandroidx/compose/ui/unit/DpSize;->getWidth-D9Ej5fM(J)F +HSPLandroidx/compose/ui/unit/DpSize;->unbox-impl()J +Landroidx/compose/ui/unit/DpSize$Companion; +HSPLandroidx/compose/ui/unit/DpSize$Companion;->()V +HSPLandroidx/compose/ui/unit/DpSize$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/unit/DpSize$Companion;->getUnspecified-MYxV2XQ()J +Landroidx/compose/ui/unit/IntOffset; +HSPLandroidx/compose/ui/unit/IntOffset;->()V +HSPLandroidx/compose/ui/unit/IntOffset;->(J)V +HSPLandroidx/compose/ui/unit/IntOffset;->access$getZero$cp()J +HSPLandroidx/compose/ui/unit/IntOffset;->box-impl(J)Landroidx/compose/ui/unit/IntOffset; +HSPLandroidx/compose/ui/unit/IntOffset;->component1-impl(J)I +HSPLandroidx/compose/ui/unit/IntOffset;->component2-impl(J)I +HSPLandroidx/compose/ui/unit/IntOffset;->constructor-impl(J)J +HSPLandroidx/compose/ui/unit/IntOffset;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/unit/IntOffset;->equals-impl(JLjava/lang/Object;)Z +HSPLandroidx/compose/ui/unit/IntOffset;->equals-impl0(JJ)Z +HSPLandroidx/compose/ui/unit/IntOffset;->getX-impl(J)I +HSPLandroidx/compose/ui/unit/IntOffset;->getY-impl(J)I +HSPLandroidx/compose/ui/unit/IntOffset;->unbox-impl()J +Landroidx/compose/ui/unit/IntOffset$Companion; +HSPLandroidx/compose/ui/unit/IntOffset$Companion;->()V +HSPLandroidx/compose/ui/unit/IntOffset$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/unit/IntOffset$Companion;->getZero-nOcc-ac()J +Landroidx/compose/ui/unit/IntOffsetKt; +HSPLandroidx/compose/ui/unit/IntOffsetKt;->IntOffset(II)J +HSPLandroidx/compose/ui/unit/IntOffsetKt;->minus-Nv-tHpc(JJ)J +HSPLandroidx/compose/ui/unit/IntOffsetKt;->plus-Nv-tHpc(JJ)J +Landroidx/compose/ui/unit/IntSize; +HSPLandroidx/compose/ui/unit/IntSize;->()V +HSPLandroidx/compose/ui/unit/IntSize;->(J)V +HSPLandroidx/compose/ui/unit/IntSize;->access$getZero$cp()J +HSPLandroidx/compose/ui/unit/IntSize;->box-impl(J)Landroidx/compose/ui/unit/IntSize; +HSPLandroidx/compose/ui/unit/IntSize;->constructor-impl(J)J +HSPLandroidx/compose/ui/unit/IntSize;->equals(Ljava/lang/Object;)Z +HSPLandroidx/compose/ui/unit/IntSize;->equals-impl(JLjava/lang/Object;)Z +HSPLandroidx/compose/ui/unit/IntSize;->equals-impl0(JJ)Z +HSPLandroidx/compose/ui/unit/IntSize;->getHeight-impl(J)I +HSPLandroidx/compose/ui/unit/IntSize;->getWidth-impl(J)I +HSPLandroidx/compose/ui/unit/IntSize;->unbox-impl()J +Landroidx/compose/ui/unit/IntSize$Companion; +HSPLandroidx/compose/ui/unit/IntSize$Companion;->()V +HSPLandroidx/compose/ui/unit/IntSize$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/unit/IntSize$Companion;->getZero-YbymL2g()J +Landroidx/compose/ui/unit/IntSizeKt; +HSPLandroidx/compose/ui/unit/IntSizeKt;->IntSize(II)J +HSPLandroidx/compose/ui/unit/IntSizeKt;->getCenter-ozmzZPI(J)J +HSPLandroidx/compose/ui/unit/IntSizeKt;->toSize-ozmzZPI(J)J +Landroidx/compose/ui/unit/LayoutDirection; +HSPLandroidx/compose/ui/unit/LayoutDirection;->$values()[Landroidx/compose/ui/unit/LayoutDirection; +HSPLandroidx/compose/ui/unit/LayoutDirection;->()V +HSPLandroidx/compose/ui/unit/LayoutDirection;->(Ljava/lang/String;I)V +HSPLandroidx/compose/ui/unit/LayoutDirection;->values()[Landroidx/compose/ui/unit/LayoutDirection; +Landroidx/compose/ui/unit/TextUnit; +HSPLandroidx/compose/ui/unit/TextUnit;->()V +HSPLandroidx/compose/ui/unit/TextUnit;->access$getUnspecified$cp()J +HSPLandroidx/compose/ui/unit/TextUnit;->constructor-impl(J)J +HSPLandroidx/compose/ui/unit/TextUnit;->equals-impl0(JJ)Z +HSPLandroidx/compose/ui/unit/TextUnit;->getRawType-impl(J)J +HSPLandroidx/compose/ui/unit/TextUnit;->getType-UIouoOA(J)J +HSPLandroidx/compose/ui/unit/TextUnit;->getValue-impl(J)F +Landroidx/compose/ui/unit/TextUnit$Companion; +HSPLandroidx/compose/ui/unit/TextUnit$Companion;->()V +HSPLandroidx/compose/ui/unit/TextUnit$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/unit/TextUnit$Companion;->getUnspecified-XSAIIZE()J +Landroidx/compose/ui/unit/TextUnitKt; +HSPLandroidx/compose/ui/unit/TextUnitKt;->checkArithmetic--R2X_6o(J)V +HSPLandroidx/compose/ui/unit/TextUnitKt;->getSp(D)J +HSPLandroidx/compose/ui/unit/TextUnitKt;->getSp(F)J +HSPLandroidx/compose/ui/unit/TextUnitKt;->getSp(I)J +HSPLandroidx/compose/ui/unit/TextUnitKt;->isUnspecified--R2X_6o(J)Z +HSPLandroidx/compose/ui/unit/TextUnitKt;->pack(JF)J +Landroidx/compose/ui/unit/TextUnitType; +HSPLandroidx/compose/ui/unit/TextUnitType;->()V +HSPLandroidx/compose/ui/unit/TextUnitType;->(J)V +HSPLandroidx/compose/ui/unit/TextUnitType;->access$getEm$cp()J +HSPLandroidx/compose/ui/unit/TextUnitType;->access$getSp$cp()J +HSPLandroidx/compose/ui/unit/TextUnitType;->access$getUnspecified$cp()J +HSPLandroidx/compose/ui/unit/TextUnitType;->box-impl(J)Landroidx/compose/ui/unit/TextUnitType; +HSPLandroidx/compose/ui/unit/TextUnitType;->constructor-impl(J)J +HSPLandroidx/compose/ui/unit/TextUnitType;->equals-impl0(JJ)Z +HSPLandroidx/compose/ui/unit/TextUnitType;->unbox-impl()J +Landroidx/compose/ui/unit/TextUnitType$Companion; +HSPLandroidx/compose/ui/unit/TextUnitType$Companion;->()V +HSPLandroidx/compose/ui/unit/TextUnitType$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/unit/TextUnitType$Companion;->getEm-UIouoOA()J +HSPLandroidx/compose/ui/unit/TextUnitType$Companion;->getSp-UIouoOA()J +HSPLandroidx/compose/ui/unit/TextUnitType$Companion;->getUnspecified-UIouoOA()J +Landroidx/compose/ui/util/MathHelpersKt; +HSPLandroidx/compose/ui/util/MathHelpersKt;->lerp(FFF)F +Landroidx/compose/ui/viewinterop/AndroidViewHolder; +Landroidx/compose/ui/window/DialogWindowProvider; +Landroidx/compose/ui/window/PopupProperties; +HSPLandroidx/compose/ui/window/PopupProperties;->()V +HSPLandroidx/compose/ui/window/PopupProperties;->(ZZZLandroidx/compose/ui/window/SecureFlagPolicy;ZZ)V +HSPLandroidx/compose/ui/window/PopupProperties;->(ZZZLandroidx/compose/ui/window/SecureFlagPolicy;ZZILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/compose/ui/window/PopupProperties;->(ZZZLandroidx/compose/ui/window/SecureFlagPolicy;ZZZ)V +Landroidx/compose/ui/window/SecureFlagPolicy; +HSPLandroidx/compose/ui/window/SecureFlagPolicy;->$values()[Landroidx/compose/ui/window/SecureFlagPolicy; +HSPLandroidx/compose/ui/window/SecureFlagPolicy;->()V +HSPLandroidx/compose/ui/window/SecureFlagPolicy;->(Ljava/lang/String;I)V +PLandroidx/concurrent/futures/AbstractResolvableFuture;->()V +PLandroidx/concurrent/futures/AbstractResolvableFuture;->()V +PLandroidx/concurrent/futures/AbstractResolvableFuture;->afterDone()V +PLandroidx/concurrent/futures/AbstractResolvableFuture;->clearListeners(Landroidx/concurrent/futures/AbstractResolvableFuture$Listener;)Landroidx/concurrent/futures/AbstractResolvableFuture$Listener; +PLandroidx/concurrent/futures/AbstractResolvableFuture;->complete(Landroidx/concurrent/futures/AbstractResolvableFuture;)V +PLandroidx/concurrent/futures/AbstractResolvableFuture;->releaseWaiters()V +PLandroidx/concurrent/futures/AbstractResolvableFuture;->set(Ljava/lang/Object;)Z +PLandroidx/concurrent/futures/AbstractResolvableFuture$AtomicHelper;->()V +PLandroidx/concurrent/futures/AbstractResolvableFuture$AtomicHelper;->(Landroidx/concurrent/futures/AbstractResolvableFuture$1;)V +PLandroidx/concurrent/futures/AbstractResolvableFuture$Listener;->()V +PLandroidx/concurrent/futures/AbstractResolvableFuture$Listener;->(Ljava/lang/Runnable;Ljava/util/concurrent/Executor;)V +PLandroidx/concurrent/futures/AbstractResolvableFuture$SafeAtomicHelper;->(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 +PLandroidx/concurrent/futures/AbstractResolvableFuture$SafeAtomicHelper;->casListeners(Landroidx/concurrent/futures/AbstractResolvableFuture;Landroidx/concurrent/futures/AbstractResolvableFuture$Listener;Landroidx/concurrent/futures/AbstractResolvableFuture$Listener;)Z +PLandroidx/concurrent/futures/AbstractResolvableFuture$SafeAtomicHelper;->casValue(Landroidx/concurrent/futures/AbstractResolvableFuture;Ljava/lang/Object;Ljava/lang/Object;)Z +PLandroidx/concurrent/futures/AbstractResolvableFuture$SafeAtomicHelper;->casWaiters(Landroidx/concurrent/futures/AbstractResolvableFuture;Landroidx/concurrent/futures/AbstractResolvableFuture$Waiter;Landroidx/concurrent/futures/AbstractResolvableFuture$Waiter;)Z +Landroidx/concurrent/futures/AbstractResolvableFuture$SafeAtomicHelper$$ExternalSyntheticBackportWithForwarding0; +HSPLandroidx/concurrent/futures/AbstractResolvableFuture$SafeAtomicHelper$$ExternalSyntheticBackportWithForwarding0;->m(Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Z +PLandroidx/concurrent/futures/AbstractResolvableFuture$Waiter;->()V +PLandroidx/concurrent/futures/AbstractResolvableFuture$Waiter;->(Z)V +PLandroidx/concurrent/futures/ResolvableFuture;->()V +PLandroidx/concurrent/futures/ResolvableFuture;->create()Landroidx/concurrent/futures/ResolvableFuture; +PLandroidx/concurrent/futures/ResolvableFuture;->set(Ljava/lang/Object;)Z +Landroidx/core/R$id; +Landroidx/core/app/ActivityCompat$OnRequestPermissionsResultCallback; +Landroidx/core/app/ActivityCompat$RequestPermissionsRequestCodeValidator; +Landroidx/core/app/AppLocalesStorageHelper; +HSPLandroidx/core/app/AppLocalesStorageHelper;->()V +HSPLandroidx/core/app/AppLocalesStorageHelper;->readLocales(Landroid/content/Context;)Ljava/lang/String; +Landroidx/core/app/ComponentActivity; +HSPLandroidx/core/app/ComponentActivity;->()V +HSPLandroidx/core/app/ComponentActivity;->onCreate(Landroid/os/Bundle;)V +Landroidx/core/app/CoreComponentFactory; +HSPLandroidx/core/app/CoreComponentFactory;->()V +HSPLandroidx/core/app/CoreComponentFactory;->checkCompatWrapper(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/core/app/CoreComponentFactory;->instantiateActivity(Ljava/lang/ClassLoader;Ljava/lang/String;Landroid/content/Intent;)Landroid/app/Activity; +HSPLandroidx/core/app/CoreComponentFactory;->instantiateApplication(Ljava/lang/ClassLoader;Ljava/lang/String;)Landroid/app/Application; +HSPLandroidx/core/app/CoreComponentFactory;->instantiateProvider(Ljava/lang/ClassLoader;Ljava/lang/String;)Landroid/content/ContentProvider; +PLandroidx/core/app/CoreComponentFactory;->instantiateReceiver(Ljava/lang/ClassLoader;Ljava/lang/String;Landroid/content/Intent;)Landroid/content/BroadcastReceiver; +HSPLandroidx/core/app/CoreComponentFactory;->instantiateService(Ljava/lang/ClassLoader;Ljava/lang/String;Landroid/content/Intent;)Landroid/app/Service; +Landroidx/core/app/CoreComponentFactory$CompatWrapped; +Landroidx/core/app/LocaleManagerCompat; +HSPLandroidx/core/app/LocaleManagerCompat;->getApplicationLocales(Landroid/content/Context;)Landroidx/core/os/LocaleListCompat; +HSPLandroidx/core/app/LocaleManagerCompat;->getLocaleManagerForApplication(Landroid/content/Context;)Ljava/lang/Object; +Landroidx/core/app/LocaleManagerCompat$Api33Impl; +HSPLandroidx/core/app/LocaleManagerCompat$Api33Impl;->localeManagerGetApplicationLocales(Ljava/lang/Object;)Landroid/os/LocaleList; +Landroidx/core/app/NavUtils; +HSPLandroidx/core/app/NavUtils;->getParentActivityName(Landroid/app/Activity;)Ljava/lang/String; +HSPLandroidx/core/app/NavUtils;->getParentActivityName(Landroid/content/Context;Landroid/content/ComponentName;)Ljava/lang/String; +Landroidx/core/app/OnMultiWindowModeChangedProvider; +Landroidx/core/app/OnNewIntentProvider; +Landroidx/core/app/OnPictureInPictureModeChangedProvider; +Landroidx/core/app/TaskStackBuilder$SupportParentable; +Landroidx/core/content/ContextCompat; +HSPLandroidx/core/content/ContextCompat;->()V +HSPLandroidx/core/content/ContextCompat;->createDeviceProtectedStorageContext(Landroid/content/Context;)Landroid/content/Context; +HSPLandroidx/core/content/ContextCompat;->getContextForLanguage(Landroid/content/Context;)Landroid/content/Context; +HSPLandroidx/core/content/ContextCompat;->getDrawable(Landroid/content/Context;I)Landroid/graphics/drawable/Drawable; +HSPLandroidx/core/content/ContextCompat;->getSystemService(Landroid/content/Context;Ljava/lang/Class;)Ljava/lang/Object; +Landroidx/core/content/ContextCompat$Api21Impl; +HSPLandroidx/core/content/ContextCompat$Api21Impl;->getDrawable(Landroid/content/Context;I)Landroid/graphics/drawable/Drawable; +Landroidx/core/content/ContextCompat$Api23Impl; +HSPLandroidx/core/content/ContextCompat$Api23Impl;->getSystemService(Landroid/content/Context;Ljava/lang/Class;)Ljava/lang/Object; +Landroidx/core/content/ContextCompat$Api24Impl; +HSPLandroidx/core/content/ContextCompat$Api24Impl;->createDeviceProtectedStorageContext(Landroid/content/Context;)Landroid/content/Context; +Landroidx/core/content/FileProvider; +HSPLandroidx/core/content/FileProvider;->()V +HSPLandroidx/core/content/FileProvider;->()V +HSPLandroidx/core/content/FileProvider;->attachInfo(Landroid/content/Context;Landroid/content/pm/ProviderInfo;)V +HSPLandroidx/core/content/FileProvider;->onCreate()Z +Landroidx/core/content/OnConfigurationChangedProvider; +Landroidx/core/content/OnTrimMemoryProvider; +Landroidx/core/graphics/Insets; +HSPLandroidx/core/graphics/Insets;->()V +HSPLandroidx/core/graphics/Insets;->(IIII)V +HSPLandroidx/core/graphics/Insets;->equals(Ljava/lang/Object;)Z +HSPLandroidx/core/graphics/Insets;->of(IIII)Landroidx/core/graphics/Insets; +HSPLandroidx/core/graphics/Insets;->toCompatInsets(Landroid/graphics/Insets;)Landroidx/core/graphics/Insets; +HSPLandroidx/core/graphics/Insets;->toPlatformInsets()Landroid/graphics/Insets; +Landroidx/core/graphics/Insets$Api29Impl; +HSPLandroidx/core/graphics/Insets$Api29Impl;->of(IIII)Landroid/graphics/Insets; +Landroidx/core/graphics/TypefaceCompat; +HSPLandroidx/core/graphics/TypefaceCompat;->()V +HSPLandroidx/core/graphics/TypefaceCompat;->createFromFontInfo(Landroid/content/Context;Landroid/os/CancellationSignal;[Landroidx/core/provider/FontsContractCompat$FontInfo;I)Landroid/graphics/Typeface; +Landroidx/core/graphics/TypefaceCompatApi29Impl; +HSPLandroidx/core/graphics/TypefaceCompatApi29Impl;->()V +HSPLandroidx/core/graphics/TypefaceCompatApi29Impl;->createFromFontInfo(Landroid/content/Context;Landroid/os/CancellationSignal;[Landroidx/core/provider/FontsContractCompat$FontInfo;I)Landroid/graphics/Typeface; +HSPLandroidx/core/graphics/TypefaceCompatApi29Impl;->findBaseFont(Landroid/graphics/fonts/FontFamily;I)Landroid/graphics/fonts/Font; +HSPLandroidx/core/graphics/TypefaceCompatApi29Impl;->getMatchScore(Landroid/graphics/fonts/FontStyle;Landroid/graphics/fonts/FontStyle;)I +Landroidx/core/graphics/TypefaceCompatBaseImpl; +HSPLandroidx/core/graphics/TypefaceCompatBaseImpl;->()V +Landroidx/core/graphics/TypefaceCompatUtil; +HSPLandroidx/core/graphics/TypefaceCompatUtil;->mmap(Landroid/content/Context;Landroid/os/CancellationSignal;Landroid/net/Uri;)Ljava/nio/ByteBuffer; +Landroidx/core/graphics/TypefaceCompatUtil$Api19Impl; +HSPLandroidx/core/graphics/TypefaceCompatUtil$Api19Impl;->openFileDescriptor(Landroid/content/ContentResolver;Landroid/net/Uri;Ljava/lang/String;Landroid/os/CancellationSignal;)Landroid/os/ParcelFileDescriptor; +Landroidx/core/graphics/drawable/TintAwareDrawable; +Landroidx/core/hardware/fingerprint/FingerprintManagerCompat; +Landroidx/core/net/ConnectivityManagerCompat; +HSPLandroidx/core/net/ConnectivityManagerCompat;->isActiveNetworkMetered(Landroid/net/ConnectivityManager;)Z +Landroidx/core/net/ConnectivityManagerCompat$Api16Impl; +HSPLandroidx/core/net/ConnectivityManagerCompat$Api16Impl;->isActiveNetworkMetered(Landroid/net/ConnectivityManager;)Z +Landroidx/core/os/BundleKt; +HSPLandroidx/core/os/BundleKt;->bundleOf([Lkotlin/Pair;)Landroid/os/Bundle; +Landroidx/core/os/HandlerCompat; +HSPLandroidx/core/os/HandlerCompat;->createAsync(Landroid/os/Looper;)Landroid/os/Handler; +Landroidx/core/os/HandlerCompat$Api28Impl; +HSPLandroidx/core/os/HandlerCompat$Api28Impl;->createAsync(Landroid/os/Looper;)Landroid/os/Handler; +Landroidx/core/os/LocaleListCompat; +HSPLandroidx/core/os/LocaleListCompat;->()V +HSPLandroidx/core/os/LocaleListCompat;->(Landroidx/core/os/LocaleListInterface;)V +HSPLandroidx/core/os/LocaleListCompat;->create([Ljava/util/Locale;)Landroidx/core/os/LocaleListCompat; +HSPLandroidx/core/os/LocaleListCompat;->forLanguageTags(Ljava/lang/String;)Landroidx/core/os/LocaleListCompat; +HSPLandroidx/core/os/LocaleListCompat;->getEmptyLocaleList()Landroidx/core/os/LocaleListCompat; +HSPLandroidx/core/os/LocaleListCompat;->isEmpty()Z +HSPLandroidx/core/os/LocaleListCompat;->wrap(Landroid/os/LocaleList;)Landroidx/core/os/LocaleListCompat; +Landroidx/core/os/LocaleListCompat$$ExternalSyntheticApiModelOutline0; +HSPLandroidx/core/os/LocaleListCompat$$ExternalSyntheticApiModelOutline0;->m$1()V +HSPLandroidx/core/os/LocaleListCompat$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/view/WindowInsetsAnimation$Bounds;)Landroid/graphics/Insets; +HSPLandroidx/core/os/LocaleListCompat$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/view/WindowInsetsAnimation;)F +HSPLandroidx/core/os/LocaleListCompat$$ExternalSyntheticApiModelOutline0;->m()Landroid/view/WindowInsets$Builder; +HSPLandroidx/core/os/LocaleListCompat$$ExternalSyntheticApiModelOutline0;->m(ILandroid/view/animation/Interpolator;J)Landroid/view/WindowInsetsAnimation; +HSPLandroidx/core/os/LocaleListCompat$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/Insets;Landroid/graphics/Insets;)Landroid/view/WindowInsetsAnimation$Bounds; +HSPLandroidx/core/os/LocaleListCompat$$ExternalSyntheticApiModelOutline0;->m(Landroid/graphics/Typeface;IZ)Landroid/graphics/Typeface; +HSPLandroidx/core/os/LocaleListCompat$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/View;Landroid/view/WindowInsetsAnimation$Callback;)V +HSPLandroidx/core/os/LocaleListCompat$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/WindowInsets$Builder;)Landroid/view/WindowInsets; +HSPLandroidx/core/os/LocaleListCompat$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/WindowInsetsAnimation$Bounds;)Landroid/graphics/Insets; +HSPLandroidx/core/os/LocaleListCompat$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/WindowInsetsAnimation;)J +HSPLandroidx/core/os/LocaleListCompat$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/WindowInsetsAnimation;F)V +HSPLandroidx/core/os/LocaleListCompat$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/WindowInsetsController;II)V +HSPLandroidx/core/os/LocaleListCompat$$ExternalSyntheticApiModelOutline0;->m(Ljava/lang/Object;)Landroid/view/WindowInsetsAnimation; +Landroidx/core/os/LocaleListCompat$Api21Impl; +HSPLandroidx/core/os/LocaleListCompat$Api21Impl;->()V +HSPLandroidx/core/os/LocaleListCompat$Api21Impl;->forLanguageTag(Ljava/lang/String;)Ljava/util/Locale; +Landroidx/core/os/LocaleListCompat$Api24Impl; +HSPLandroidx/core/os/LocaleListCompat$Api24Impl;->createLocaleList([Ljava/util/Locale;)Landroid/os/LocaleList; +Landroidx/core/os/LocaleListInterface; +Landroidx/core/os/LocaleListPlatformWrapper; +HSPLandroidx/core/os/LocaleListPlatformWrapper;->(Ljava/lang/Object;)V +HSPLandroidx/core/os/LocaleListPlatformWrapper;->isEmpty()Z +Landroidx/core/os/TraceCompat; +HSPLandroidx/core/os/TraceCompat;->()V +HSPLandroidx/core/os/TraceCompat;->beginSection(Ljava/lang/String;)V +HSPLandroidx/core/os/TraceCompat;->endSection()V +Landroidx/core/os/TraceCompat$Api18Impl; +HSPLandroidx/core/os/TraceCompat$Api18Impl;->beginSection(Ljava/lang/String;)V +HSPLandroidx/core/os/TraceCompat$Api18Impl;->endSection()V +Landroidx/core/os/UserManagerCompat; +HSPLandroidx/core/os/UserManagerCompat;->isUserUnlocked(Landroid/content/Context;)Z +Landroidx/core/os/UserManagerCompat$Api24Impl; +HSPLandroidx/core/os/UserManagerCompat$Api24Impl;->isUserUnlocked(Landroid/content/Context;)Z +Landroidx/core/provider/FontProvider; +HSPLandroidx/core/provider/FontProvider;->()V +HSPLandroidx/core/provider/FontProvider;->convertToByteArrayList([Landroid/content/pm/Signature;)Ljava/util/List; +HSPLandroidx/core/provider/FontProvider;->equalsByteArrayList(Ljava/util/List;Ljava/util/List;)Z +HSPLandroidx/core/provider/FontProvider;->getCertificates(Landroidx/core/provider/FontRequest;Landroid/content/res/Resources;)Ljava/util/List; +HSPLandroidx/core/provider/FontProvider;->getFontFamilyResult(Landroid/content/Context;Landroidx/core/provider/FontRequest;Landroid/os/CancellationSignal;)Landroidx/core/provider/FontsContractCompat$FontFamilyResult; +HSPLandroidx/core/provider/FontProvider;->getProvider(Landroid/content/pm/PackageManager;Landroidx/core/provider/FontRequest;Landroid/content/res/Resources;)Landroid/content/pm/ProviderInfo; +HSPLandroidx/core/provider/FontProvider;->query(Landroid/content/Context;Landroidx/core/provider/FontRequest;Ljava/lang/String;Landroid/os/CancellationSignal;)[Landroidx/core/provider/FontsContractCompat$FontInfo; +Landroidx/core/provider/FontProvider$$ExternalSyntheticLambda0; +HSPLandroidx/core/provider/FontProvider$$ExternalSyntheticLambda0;->()V +Landroidx/core/provider/FontProvider$Api16Impl; +HSPLandroidx/core/provider/FontProvider$Api16Impl;->query(Landroid/content/ContentResolver;Landroid/net/Uri;[Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)Landroid/database/Cursor; +Landroidx/core/provider/FontRequest; +HSPLandroidx/core/provider/FontRequest;->(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;)V +HSPLandroidx/core/provider/FontRequest;->createIdentifier(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; +HSPLandroidx/core/provider/FontRequest;->getCertificates()Ljava/util/List; +HSPLandroidx/core/provider/FontRequest;->getProviderAuthority()Ljava/lang/String; +HSPLandroidx/core/provider/FontRequest;->getProviderPackage()Ljava/lang/String; +HSPLandroidx/core/provider/FontRequest;->getQuery()Ljava/lang/String; +Landroidx/core/provider/FontsContractCompat; +HSPLandroidx/core/provider/FontsContractCompat;->buildTypeface(Landroid/content/Context;Landroid/os/CancellationSignal;[Landroidx/core/provider/FontsContractCompat$FontInfo;)Landroid/graphics/Typeface; +HSPLandroidx/core/provider/FontsContractCompat;->fetchFonts(Landroid/content/Context;Landroid/os/CancellationSignal;Landroidx/core/provider/FontRequest;)Landroidx/core/provider/FontsContractCompat$FontFamilyResult; +Landroidx/core/provider/FontsContractCompat$FontFamilyResult; +HSPLandroidx/core/provider/FontsContractCompat$FontFamilyResult;->(I[Landroidx/core/provider/FontsContractCompat$FontInfo;)V +HSPLandroidx/core/provider/FontsContractCompat$FontFamilyResult;->create(I[Landroidx/core/provider/FontsContractCompat$FontInfo;)Landroidx/core/provider/FontsContractCompat$FontFamilyResult; +HSPLandroidx/core/provider/FontsContractCompat$FontFamilyResult;->getFonts()[Landroidx/core/provider/FontsContractCompat$FontInfo; +HSPLandroidx/core/provider/FontsContractCompat$FontFamilyResult;->getStatusCode()I +Landroidx/core/provider/FontsContractCompat$FontInfo; +HSPLandroidx/core/provider/FontsContractCompat$FontInfo;->(Landroid/net/Uri;IIZI)V +HSPLandroidx/core/provider/FontsContractCompat$FontInfo;->create(Landroid/net/Uri;IIZI)Landroidx/core/provider/FontsContractCompat$FontInfo; +HSPLandroidx/core/provider/FontsContractCompat$FontInfo;->getResultCode()I +HSPLandroidx/core/provider/FontsContractCompat$FontInfo;->getTtcIndex()I +HSPLandroidx/core/provider/FontsContractCompat$FontInfo;->getUri()Landroid/net/Uri; +HSPLandroidx/core/provider/FontsContractCompat$FontInfo;->getWeight()I +HSPLandroidx/core/provider/FontsContractCompat$FontInfo;->isItalic()Z +Landroidx/core/splashscreen/R$attr; +Landroidx/core/splashscreen/SplashScreen; +HSPLandroidx/core/splashscreen/SplashScreen;->()V +HSPLandroidx/core/splashscreen/SplashScreen;->(Landroid/app/Activity;)V +HSPLandroidx/core/splashscreen/SplashScreen;->(Landroid/app/Activity;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/core/splashscreen/SplashScreen;->access$install(Landroidx/core/splashscreen/SplashScreen;)V +HSPLandroidx/core/splashscreen/SplashScreen;->install()V +Landroidx/core/splashscreen/SplashScreen$Companion; +HSPLandroidx/core/splashscreen/SplashScreen$Companion;->()V +HSPLandroidx/core/splashscreen/SplashScreen$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/core/splashscreen/SplashScreen$Companion;->installSplashScreen(Landroid/app/Activity;)Landroidx/core/splashscreen/SplashScreen; +Landroidx/core/splashscreen/SplashScreen$Impl; +HSPLandroidx/core/splashscreen/SplashScreen$Impl;->(Landroid/app/Activity;)V +HSPLandroidx/core/splashscreen/SplashScreen$Impl;->getActivity()Landroid/app/Activity; +HSPLandroidx/core/splashscreen/SplashScreen$Impl;->setPostSplashScreenTheme(Landroid/content/res/Resources$Theme;Landroid/util/TypedValue;)V +Landroidx/core/splashscreen/SplashScreen$Impl$$ExternalSyntheticLambda1; +HSPLandroidx/core/splashscreen/SplashScreen$Impl$$ExternalSyntheticLambda1;->()V +Landroidx/core/splashscreen/SplashScreen$Impl31; +HSPLandroidx/core/splashscreen/SplashScreen$Impl31;->(Landroid/app/Activity;)V +HSPLandroidx/core/splashscreen/SplashScreen$Impl31;->install()V +Landroidx/core/splashscreen/SplashScreen$Impl31$hierarchyListener$1; +HSPLandroidx/core/splashscreen/SplashScreen$Impl31$hierarchyListener$1;->(Landroidx/core/splashscreen/SplashScreen$Impl31;Landroid/app/Activity;)V +Landroidx/core/splashscreen/SplashScreen$KeepOnScreenCondition; +Landroidx/core/text/TextUtilsCompat; +HSPLandroidx/core/text/TextUtilsCompat;->()V +HSPLandroidx/core/text/TextUtilsCompat;->getLayoutDirectionFromLocale(Ljava/util/Locale;)I +Landroidx/core/text/TextUtilsCompat$Api17Impl; +HSPLandroidx/core/text/TextUtilsCompat$Api17Impl;->getLayoutDirectionFromLocale(Ljava/util/Locale;)I +Landroidx/core/util/Consumer; +Landroidx/core/util/Preconditions; +HSPLandroidx/core/util/Preconditions;->checkArgument(ZLjava/lang/Object;)V +HSPLandroidx/core/util/Preconditions;->checkArgumentNonnegative(ILjava/lang/String;)I +HSPLandroidx/core/util/Preconditions;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/core/util/Preconditions;->checkNotNull(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/core/util/Preconditions;->checkState(ZLjava/lang/String;)V +Landroidx/core/view/AccessibilityDelegateCompat; +HSPLandroidx/core/view/AccessibilityDelegateCompat;->()V +HSPLandroidx/core/view/AccessibilityDelegateCompat;->()V +HSPLandroidx/core/view/AccessibilityDelegateCompat;->(Landroid/view/View$AccessibilityDelegate;)V +HSPLandroidx/core/view/AccessibilityDelegateCompat;->dispatchPopulateAccessibilityEvent(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)Z +HSPLandroidx/core/view/AccessibilityDelegateCompat;->getBridge()Landroid/view/View$AccessibilityDelegate; +HSPLandroidx/core/view/AccessibilityDelegateCompat;->onInitializeAccessibilityEvent(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)V +HSPLandroidx/core/view/AccessibilityDelegateCompat;->onPopulateAccessibilityEvent(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)V +HSPLandroidx/core/view/AccessibilityDelegateCompat;->onRequestSendAccessibilityEvent(Landroid/view/ViewGroup;Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)Z +HSPLandroidx/core/view/AccessibilityDelegateCompat;->sendAccessibilityEvent(Landroid/view/View;I)V +HSPLandroidx/core/view/AccessibilityDelegateCompat;->sendAccessibilityEventUnchecked(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)V +Landroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter; +HSPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->(Landroidx/core/view/AccessibilityDelegateCompat;)V +HSPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->dispatchPopulateAccessibilityEvent(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)Z +HSPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->getAccessibilityNodeProvider(Landroid/view/View;)Landroid/view/accessibility/AccessibilityNodeProvider; +HSPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->onInitializeAccessibilityEvent(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)V +HSPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->onPopulateAccessibilityEvent(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)V +HSPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->onRequestSendAccessibilityEvent(Landroid/view/ViewGroup;Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)Z +HSPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->sendAccessibilityEvent(Landroid/view/View;I)V +HSPLandroidx/core/view/AccessibilityDelegateCompat$AccessibilityDelegateAdapter;->sendAccessibilityEventUnchecked(Landroid/view/View;Landroid/view/accessibility/AccessibilityEvent;)V +Landroidx/core/view/DisplayCutoutCompat; +HSPLandroidx/core/view/DisplayCutoutCompat;->(Landroid/view/DisplayCutout;)V +HSPLandroidx/core/view/DisplayCutoutCompat;->getWaterfallInsets()Landroidx/core/graphics/Insets; +HSPLandroidx/core/view/DisplayCutoutCompat;->wrap(Landroid/view/DisplayCutout;)Landroidx/core/view/DisplayCutoutCompat; +Landroidx/core/view/DisplayCutoutCompat$Api30Impl; +HSPLandroidx/core/view/DisplayCutoutCompat$Api30Impl;->getWaterfallInsets(Landroid/view/DisplayCutout;)Landroid/graphics/Insets; +Landroidx/core/view/KeyEventDispatcher$Component; +Landroidx/core/view/LayoutInflaterCompat; +HSPLandroidx/core/view/LayoutInflaterCompat;->setFactory2(Landroid/view/LayoutInflater;Landroid/view/LayoutInflater$Factory2;)V +Landroidx/core/view/MenuHost; +Landroidx/core/view/MenuHostHelper; +HSPLandroidx/core/view/MenuHostHelper;->(Ljava/lang/Runnable;)V +HSPLandroidx/core/view/MenuHostHelper;->addMenuProvider(Landroidx/core/view/MenuProvider;)V +Landroidx/core/view/MenuProvider; +Landroidx/core/view/NestedScrollingParent; +Landroidx/core/view/NestedScrollingParent2; +Landroidx/core/view/NestedScrollingParent3; +Landroidx/core/view/OnApplyWindowInsetsListener; +Landroidx/core/view/OnReceiveContentViewBehavior; +Landroidx/core/view/SoftwareKeyboardControllerCompat; +HSPLandroidx/core/view/SoftwareKeyboardControllerCompat;->(Landroid/view/View;)V +Landroidx/core/view/SoftwareKeyboardControllerCompat$Impl; +HSPLandroidx/core/view/SoftwareKeyboardControllerCompat$Impl;->()V +Landroidx/core/view/SoftwareKeyboardControllerCompat$Impl20; +HSPLandroidx/core/view/SoftwareKeyboardControllerCompat$Impl20;->(Landroid/view/View;)V +Landroidx/core/view/SoftwareKeyboardControllerCompat$Impl30; +HSPLandroidx/core/view/SoftwareKeyboardControllerCompat$Impl30;->(Landroid/view/View;)V +Landroidx/core/view/ViewCompat; +HSPLandroidx/core/view/ViewCompat;->()V +HSPLandroidx/core/view/ViewCompat;->getImportantForAccessibility(Landroid/view/View;)I +HSPLandroidx/core/view/ViewCompat;->getParentForAccessibility(Landroid/view/View;)Landroid/view/ViewParent; +HSPLandroidx/core/view/ViewCompat;->getRootWindowInsets(Landroid/view/View;)Landroidx/core/view/WindowInsetsCompat; +HSPLandroidx/core/view/ViewCompat;->isAttachedToWindow(Landroid/view/View;)Z +HSPLandroidx/core/view/ViewCompat;->isLaidOut(Landroid/view/View;)Z +HSPLandroidx/core/view/ViewCompat;->onApplyWindowInsets(Landroid/view/View;Landroidx/core/view/WindowInsetsCompat;)Landroidx/core/view/WindowInsetsCompat; +HSPLandroidx/core/view/ViewCompat;->postOnAnimation(Landroid/view/View;Ljava/lang/Runnable;)V +HSPLandroidx/core/view/ViewCompat;->setAccessibilityDelegate(Landroid/view/View;Landroidx/core/view/AccessibilityDelegateCompat;)V +HSPLandroidx/core/view/ViewCompat;->setImportantForAccessibility(Landroid/view/View;I)V +HSPLandroidx/core/view/ViewCompat;->setImportantForAccessibilityIfNeeded(Landroid/view/View;)V +HSPLandroidx/core/view/ViewCompat;->setOnApplyWindowInsetsListener(Landroid/view/View;Landroidx/core/view/OnApplyWindowInsetsListener;)V +HSPLandroidx/core/view/ViewCompat;->setWindowInsetsAnimationCallback(Landroid/view/View;Landroidx/core/view/WindowInsetsAnimationCompat$Callback;)V +Landroidx/core/view/ViewCompat$$ExternalSyntheticLambda0; +HSPLandroidx/core/view/ViewCompat$$ExternalSyntheticLambda0;->()V +Landroidx/core/view/ViewCompat$AccessibilityPaneVisibilityManager; +HSPLandroidx/core/view/ViewCompat$AccessibilityPaneVisibilityManager;->()V +Landroidx/core/view/ViewCompat$Api16Impl; +HSPLandroidx/core/view/ViewCompat$Api16Impl;->getImportantForAccessibility(Landroid/view/View;)I +HSPLandroidx/core/view/ViewCompat$Api16Impl;->getParentForAccessibility(Landroid/view/View;)Landroid/view/ViewParent; +HSPLandroidx/core/view/ViewCompat$Api16Impl;->postOnAnimation(Landroid/view/View;Ljava/lang/Runnable;)V +HSPLandroidx/core/view/ViewCompat$Api16Impl;->setImportantForAccessibility(Landroid/view/View;I)V +Landroidx/core/view/ViewCompat$Api19Impl; +HSPLandroidx/core/view/ViewCompat$Api19Impl;->isAttachedToWindow(Landroid/view/View;)Z +HSPLandroidx/core/view/ViewCompat$Api19Impl;->isLaidOut(Landroid/view/View;)Z +Landroidx/core/view/ViewCompat$Api20Impl; +HSPLandroidx/core/view/ViewCompat$Api20Impl;->onApplyWindowInsets(Landroid/view/View;Landroid/view/WindowInsets;)Landroid/view/WindowInsets; +Landroidx/core/view/ViewCompat$Api21Impl; +HSPLandroidx/core/view/ViewCompat$Api21Impl;->setOnApplyWindowInsetsListener(Landroid/view/View;Landroidx/core/view/OnApplyWindowInsetsListener;)V +Landroidx/core/view/ViewCompat$Api21Impl$1; +HSPLandroidx/core/view/ViewCompat$Api21Impl$1;->(Landroid/view/View;Landroidx/core/view/OnApplyWindowInsetsListener;)V +HSPLandroidx/core/view/ViewCompat$Api21Impl$1;->onApplyWindowInsets(Landroid/view/View;Landroid/view/WindowInsets;)Landroid/view/WindowInsets; +Landroidx/core/view/ViewCompat$Api23Impl; +HSPLandroidx/core/view/ViewCompat$Api23Impl;->getRootWindowInsets(Landroid/view/View;)Landroidx/core/view/WindowInsetsCompat; +Landroidx/core/view/ViewPropertyAnimatorCompat; +Landroidx/core/view/WindowCompat; +HSPLandroidx/core/view/WindowCompat;->getInsetsController(Landroid/view/Window;Landroid/view/View;)Landroidx/core/view/WindowInsetsControllerCompat; +HSPLandroidx/core/view/WindowCompat;->setDecorFitsSystemWindows(Landroid/view/Window;Z)V +Landroidx/core/view/WindowCompat$Api30Impl; +HSPLandroidx/core/view/WindowCompat$Api30Impl;->setDecorFitsSystemWindows(Landroid/view/Window;Z)V +Landroidx/core/view/WindowInsetsAnimationCompat; +HSPLandroidx/core/view/WindowInsetsAnimationCompat;->(ILandroid/view/animation/Interpolator;J)V +HSPLandroidx/core/view/WindowInsetsAnimationCompat;->(Landroid/view/WindowInsetsAnimation;)V +HSPLandroidx/core/view/WindowInsetsAnimationCompat;->getDurationMillis()J +HSPLandroidx/core/view/WindowInsetsAnimationCompat;->setCallback(Landroid/view/View;Landroidx/core/view/WindowInsetsAnimationCompat$Callback;)V +HSPLandroidx/core/view/WindowInsetsAnimationCompat;->setFraction(F)V +HSPLandroidx/core/view/WindowInsetsAnimationCompat;->toWindowInsetsAnimationCompat(Landroid/view/WindowInsetsAnimation;)Landroidx/core/view/WindowInsetsAnimationCompat; +Landroidx/core/view/WindowInsetsAnimationCompat$BoundsCompat; +HSPLandroidx/core/view/WindowInsetsAnimationCompat$BoundsCompat;->(Landroid/view/WindowInsetsAnimation$Bounds;)V +HSPLandroidx/core/view/WindowInsetsAnimationCompat$BoundsCompat;->getLowerBound()Landroidx/core/graphics/Insets; +HSPLandroidx/core/view/WindowInsetsAnimationCompat$BoundsCompat;->getUpperBound()Landroidx/core/graphics/Insets; +HSPLandroidx/core/view/WindowInsetsAnimationCompat$BoundsCompat;->toBounds()Landroid/view/WindowInsetsAnimation$Bounds; +HSPLandroidx/core/view/WindowInsetsAnimationCompat$BoundsCompat;->toBoundsCompat(Landroid/view/WindowInsetsAnimation$Bounds;)Landroidx/core/view/WindowInsetsAnimationCompat$BoundsCompat; +Landroidx/core/view/WindowInsetsAnimationCompat$Callback; +HSPLandroidx/core/view/WindowInsetsAnimationCompat$Callback;->(I)V +HSPLandroidx/core/view/WindowInsetsAnimationCompat$Callback;->getDispatchMode()I +HSPLandroidx/core/view/WindowInsetsAnimationCompat$Callback;->onEnd(Landroidx/core/view/WindowInsetsAnimationCompat;)V +HSPLandroidx/core/view/WindowInsetsAnimationCompat$Callback;->onPrepare(Landroidx/core/view/WindowInsetsAnimationCompat;)V +HSPLandroidx/core/view/WindowInsetsAnimationCompat$Callback;->onStart(Landroidx/core/view/WindowInsetsAnimationCompat;Landroidx/core/view/WindowInsetsAnimationCompat$BoundsCompat;)Landroidx/core/view/WindowInsetsAnimationCompat$BoundsCompat; +Landroidx/core/view/WindowInsetsAnimationCompat$Impl; +HSPLandroidx/core/view/WindowInsetsAnimationCompat$Impl;->(ILandroid/view/animation/Interpolator;J)V +Landroidx/core/view/WindowInsetsAnimationCompat$Impl30; +HSPLandroidx/core/view/WindowInsetsAnimationCompat$Impl30;->(ILandroid/view/animation/Interpolator;J)V +HSPLandroidx/core/view/WindowInsetsAnimationCompat$Impl30;->(Landroid/view/WindowInsetsAnimation;)V +HSPLandroidx/core/view/WindowInsetsAnimationCompat$Impl30;->createPlatformBounds(Landroidx/core/view/WindowInsetsAnimationCompat$BoundsCompat;)Landroid/view/WindowInsetsAnimation$Bounds; +HSPLandroidx/core/view/WindowInsetsAnimationCompat$Impl30;->getDurationMillis()J +HSPLandroidx/core/view/WindowInsetsAnimationCompat$Impl30;->getHigherBounds(Landroid/view/WindowInsetsAnimation$Bounds;)Landroidx/core/graphics/Insets; +HSPLandroidx/core/view/WindowInsetsAnimationCompat$Impl30;->getLowerBounds(Landroid/view/WindowInsetsAnimation$Bounds;)Landroidx/core/graphics/Insets; +HSPLandroidx/core/view/WindowInsetsAnimationCompat$Impl30;->setCallback(Landroid/view/View;Landroidx/core/view/WindowInsetsAnimationCompat$Callback;)V +HSPLandroidx/core/view/WindowInsetsAnimationCompat$Impl30;->setFraction(F)V +Landroidx/core/view/WindowInsetsAnimationCompat$Impl30$ProxyCallback; +HSPLandroidx/core/view/WindowInsetsAnimationCompat$Impl30$ProxyCallback;->(Landroidx/core/view/WindowInsetsAnimationCompat$Callback;)V +HSPLandroidx/core/view/WindowInsetsAnimationCompat$Impl30$ProxyCallback;->getWindowInsetsAnimationCompat(Landroid/view/WindowInsetsAnimation;)Landroidx/core/view/WindowInsetsAnimationCompat; +HSPLandroidx/core/view/WindowInsetsAnimationCompat$Impl30$ProxyCallback;->onEnd(Landroid/view/WindowInsetsAnimation;)V +HSPLandroidx/core/view/WindowInsetsAnimationCompat$Impl30$ProxyCallback;->onPrepare(Landroid/view/WindowInsetsAnimation;)V +HSPLandroidx/core/view/WindowInsetsAnimationCompat$Impl30$ProxyCallback;->onProgress(Landroid/view/WindowInsets;Ljava/util/List;)Landroid/view/WindowInsets; +HSPLandroidx/core/view/WindowInsetsAnimationCompat$Impl30$ProxyCallback;->onStart(Landroid/view/WindowInsetsAnimation;Landroid/view/WindowInsetsAnimation$Bounds;)Landroid/view/WindowInsetsAnimation$Bounds; +Landroidx/core/view/WindowInsetsCompat; +HSPLandroidx/core/view/WindowInsetsCompat;->()V +HSPLandroidx/core/view/WindowInsetsCompat;->(Landroid/view/WindowInsets;)V +HSPLandroidx/core/view/WindowInsetsCompat;->(Landroidx/core/view/WindowInsetsCompat;)V +HSPLandroidx/core/view/WindowInsetsCompat;->consumeDisplayCutout()Landroidx/core/view/WindowInsetsCompat; +HSPLandroidx/core/view/WindowInsetsCompat;->consumeStableInsets()Landroidx/core/view/WindowInsetsCompat; +HSPLandroidx/core/view/WindowInsetsCompat;->consumeSystemWindowInsets()Landroidx/core/view/WindowInsetsCompat; +HSPLandroidx/core/view/WindowInsetsCompat;->copyRootViewBounds(Landroid/view/View;)V +HSPLandroidx/core/view/WindowInsetsCompat;->getDisplayCutout()Landroidx/core/view/DisplayCutoutCompat; +HSPLandroidx/core/view/WindowInsetsCompat;->getInsets(I)Landroidx/core/graphics/Insets; +HSPLandroidx/core/view/WindowInsetsCompat;->getInsetsIgnoringVisibility(I)Landroidx/core/graphics/Insets; +HSPLandroidx/core/view/WindowInsetsCompat;->getSystemWindowInsetTop()I +HSPLandroidx/core/view/WindowInsetsCompat;->isVisible(I)Z +HSPLandroidx/core/view/WindowInsetsCompat;->setOverriddenInsets([Landroidx/core/graphics/Insets;)V +HSPLandroidx/core/view/WindowInsetsCompat;->setRootWindowInsets(Landroidx/core/view/WindowInsetsCompat;)V +HSPLandroidx/core/view/WindowInsetsCompat;->toWindowInsets()Landroid/view/WindowInsets; +HSPLandroidx/core/view/WindowInsetsCompat;->toWindowInsetsCompat(Landroid/view/WindowInsets;)Landroidx/core/view/WindowInsetsCompat; +HSPLandroidx/core/view/WindowInsetsCompat;->toWindowInsetsCompat(Landroid/view/WindowInsets;Landroid/view/View;)Landroidx/core/view/WindowInsetsCompat; +Landroidx/core/view/WindowInsetsCompat$Builder; +HSPLandroidx/core/view/WindowInsetsCompat$Builder;->()V +HSPLandroidx/core/view/WindowInsetsCompat$Builder;->build()Landroidx/core/view/WindowInsetsCompat; +Landroidx/core/view/WindowInsetsCompat$BuilderImpl; +HSPLandroidx/core/view/WindowInsetsCompat$BuilderImpl;->()V +HSPLandroidx/core/view/WindowInsetsCompat$BuilderImpl;->(Landroidx/core/view/WindowInsetsCompat;)V +HSPLandroidx/core/view/WindowInsetsCompat$BuilderImpl;->applyInsetTypes()V +Landroidx/core/view/WindowInsetsCompat$BuilderImpl29; +HSPLandroidx/core/view/WindowInsetsCompat$BuilderImpl29;->()V +HSPLandroidx/core/view/WindowInsetsCompat$BuilderImpl29;->build()Landroidx/core/view/WindowInsetsCompat; +Landroidx/core/view/WindowInsetsCompat$BuilderImpl30; +HSPLandroidx/core/view/WindowInsetsCompat$BuilderImpl30;->()V +Landroidx/core/view/WindowInsetsCompat$Impl; +HSPLandroidx/core/view/WindowInsetsCompat$Impl;->()V +HSPLandroidx/core/view/WindowInsetsCompat$Impl;->(Landroidx/core/view/WindowInsetsCompat;)V +Landroidx/core/view/WindowInsetsCompat$Impl20; +HSPLandroidx/core/view/WindowInsetsCompat$Impl20;->()V +HSPLandroidx/core/view/WindowInsetsCompat$Impl20;->(Landroidx/core/view/WindowInsetsCompat;Landroid/view/WindowInsets;)V +HSPLandroidx/core/view/WindowInsetsCompat$Impl20;->getSystemWindowInsets()Landroidx/core/graphics/Insets; +HSPLandroidx/core/view/WindowInsetsCompat$Impl20;->setOverriddenInsets([Landroidx/core/graphics/Insets;)V +HSPLandroidx/core/view/WindowInsetsCompat$Impl20;->setRootWindowInsets(Landroidx/core/view/WindowInsetsCompat;)V +Landroidx/core/view/WindowInsetsCompat$Impl21; +HSPLandroidx/core/view/WindowInsetsCompat$Impl21;->(Landroidx/core/view/WindowInsetsCompat;Landroid/view/WindowInsets;)V +HSPLandroidx/core/view/WindowInsetsCompat$Impl21;->consumeStableInsets()Landroidx/core/view/WindowInsetsCompat; +HSPLandroidx/core/view/WindowInsetsCompat$Impl21;->consumeSystemWindowInsets()Landroidx/core/view/WindowInsetsCompat; +Landroidx/core/view/WindowInsetsCompat$Impl28; +HSPLandroidx/core/view/WindowInsetsCompat$Impl28;->(Landroidx/core/view/WindowInsetsCompat;Landroid/view/WindowInsets;)V +HSPLandroidx/core/view/WindowInsetsCompat$Impl28;->consumeDisplayCutout()Landroidx/core/view/WindowInsetsCompat; +HSPLandroidx/core/view/WindowInsetsCompat$Impl28;->getDisplayCutout()Landroidx/core/view/DisplayCutoutCompat; +Landroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0; +HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0;->m$1()I +HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0;->m$1()Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction; +HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/view/WindowInsets;I)Landroid/graphics/Insets; +HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0;->m$1(Landroid/view/accessibility/AccessibilityNodeInfo;Ljava/lang/CharSequence;)V +HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0;->m$10()Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction; +HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0;->m$11()Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction; +HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0;->m$12()Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction; +HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0;->m$2()I +HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0;->m$2()Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction; +HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0;->m$2(Landroid/view/accessibility/AccessibilityNodeInfo;Z)V +HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0;->m$3()I +HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0;->m$3()Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction; +HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0;->m$4()I +HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0;->m$4()Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction; +HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0;->m$5()I +HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0;->m$5()Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction; +HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0;->m$6()I +HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0;->m$6()Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction; +HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0;->m$7()Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction; +HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0;->m$8()Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction; +HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0;->m$9()Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction; +HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0;->m()I +HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0;->m()Landroid/view/WindowInsets; +HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0;->m()Landroid/view/accessibility/AccessibilityNodeInfo$AccessibilityAction; +HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/Window;)Landroid/view/WindowInsetsController; +HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/WindowInsets;)Landroid/view/DisplayCutout; +HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/WindowInsets;)Landroid/view/WindowInsets; +HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/WindowInsets;I)Landroid/graphics/Insets; +HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/WindowInsets;I)Z +HSPLandroidx/core/view/WindowInsetsCompat$Impl28$$ExternalSyntheticApiModelOutline0;->m(Landroid/view/WindowInsetsController;)I +Landroidx/core/view/WindowInsetsCompat$Impl29; +HSPLandroidx/core/view/WindowInsetsCompat$Impl29;->(Landroidx/core/view/WindowInsetsCompat;Landroid/view/WindowInsets;)V +Landroidx/core/view/WindowInsetsCompat$Impl30; +HSPLandroidx/core/view/WindowInsetsCompat$Impl30;->()V +HSPLandroidx/core/view/WindowInsetsCompat$Impl30;->(Landroidx/core/view/WindowInsetsCompat;Landroid/view/WindowInsets;)V +HSPLandroidx/core/view/WindowInsetsCompat$Impl30;->copyRootViewBounds(Landroid/view/View;)V +HSPLandroidx/core/view/WindowInsetsCompat$Impl30;->getInsets(I)Landroidx/core/graphics/Insets; +HSPLandroidx/core/view/WindowInsetsCompat$Impl30;->getInsetsIgnoringVisibility(I)Landroidx/core/graphics/Insets; +HSPLandroidx/core/view/WindowInsetsCompat$Impl30;->isVisible(I)Z +Landroidx/core/view/WindowInsetsCompat$Type; +HSPLandroidx/core/view/WindowInsetsCompat$Type;->captionBar()I +HSPLandroidx/core/view/WindowInsetsCompat$Type;->displayCutout()I +HSPLandroidx/core/view/WindowInsetsCompat$Type;->ime()I +HSPLandroidx/core/view/WindowInsetsCompat$Type;->mandatorySystemGestures()I +HSPLandroidx/core/view/WindowInsetsCompat$Type;->navigationBars()I +HSPLandroidx/core/view/WindowInsetsCompat$Type;->statusBars()I +HSPLandroidx/core/view/WindowInsetsCompat$Type;->systemBars()I +HSPLandroidx/core/view/WindowInsetsCompat$Type;->systemGestures()I +HSPLandroidx/core/view/WindowInsetsCompat$Type;->tappableElement()I +Landroidx/core/view/WindowInsetsCompat$TypeImpl30; +HSPLandroidx/core/view/WindowInsetsCompat$TypeImpl30;->toPlatformType(I)I +Landroidx/core/view/WindowInsetsControllerCompat; +HSPLandroidx/core/view/WindowInsetsControllerCompat;->(Landroid/view/Window;Landroid/view/View;)V +HSPLandroidx/core/view/WindowInsetsControllerCompat;->isAppearanceLightNavigationBars()Z +HSPLandroidx/core/view/WindowInsetsControllerCompat;->isAppearanceLightStatusBars()Z +HSPLandroidx/core/view/WindowInsetsControllerCompat;->setAppearanceLightNavigationBars(Z)V +HSPLandroidx/core/view/WindowInsetsControllerCompat;->setAppearanceLightStatusBars(Z)V +Landroidx/core/view/WindowInsetsControllerCompat$Impl; +HSPLandroidx/core/view/WindowInsetsControllerCompat$Impl;->()V +Landroidx/core/view/WindowInsetsControllerCompat$Impl30; +HSPLandroidx/core/view/WindowInsetsControllerCompat$Impl30;->(Landroid/view/Window;Landroidx/core/view/WindowInsetsControllerCompat;Landroidx/core/view/SoftwareKeyboardControllerCompat;)V +HSPLandroidx/core/view/WindowInsetsControllerCompat$Impl30;->(Landroid/view/WindowInsetsController;Landroidx/core/view/WindowInsetsControllerCompat;Landroidx/core/view/SoftwareKeyboardControllerCompat;)V +HSPLandroidx/core/view/WindowInsetsControllerCompat$Impl30;->isAppearanceLightNavigationBars()Z +HSPLandroidx/core/view/WindowInsetsControllerCompat$Impl30;->isAppearanceLightStatusBars()Z +HSPLandroidx/core/view/WindowInsetsControllerCompat$Impl30;->setAppearanceLightNavigationBars(Z)V +HSPLandroidx/core/view/WindowInsetsControllerCompat$Impl30;->setAppearanceLightStatusBars(Z)V +HSPLandroidx/core/view/WindowInsetsControllerCompat$Impl30;->setSystemUiFlag(I)V +Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat; +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->()V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->(Landroid/view/accessibility/AccessibilityNodeInfo;)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->addAction(I)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->addAction(Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat$AccessibilityActionCompat;)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->addChild(Landroid/view/View;I)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->extrasIntList(Ljava/lang/String;)Ljava/util/List; +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->getMovementGranularities()I +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->getText()Ljava/lang/CharSequence; +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->hasSpans()Z +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->isFocusable()Z +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->isFocused()Z +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->obtain()Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat; +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setAccessibilityFocused(Z)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setBoundsInScreen(Landroid/graphics/Rect;)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setCheckable(Z)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setClassName(Ljava/lang/CharSequence;)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setClickable(Z)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setCollectionInfo(Ljava/lang/Object;)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setCollectionItemInfo(Ljava/lang/Object;)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setContentDescription(Ljava/lang/CharSequence;)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setEditable(Z)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setEnabled(Z)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setFocusable(Z)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setFocused(Z)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setImportantForAccessibility(Z)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setLongClickable(Z)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setMovementGranularities(I)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setPackageName(Ljava/lang/CharSequence;)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setPaneTitle(Ljava/lang/CharSequence;)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setParent(Landroid/view/View;)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setParent(Landroid/view/View;I)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setPassword(Z)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setRoleDescription(Ljava/lang/CharSequence;)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setScreenReaderFocusable(Z)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setSelected(Z)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setSource(Landroid/view/View;I)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setStateDescription(Ljava/lang/CharSequence;)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setText(Ljava/lang/CharSequence;)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setTextSelection(II)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setTraversalBefore(Landroid/view/View;I)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setViewIdResourceName(Ljava/lang/String;)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->setVisibleToUser(Z)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->unwrap()Landroid/view/accessibility/AccessibilityNodeInfo; +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat;->wrap(Landroid/view/accessibility/AccessibilityNodeInfo;)Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat; +Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat$AccessibilityActionCompat; +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$AccessibilityActionCompat;->()V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$AccessibilityActionCompat;->(ILjava/lang/CharSequence;)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$AccessibilityActionCompat;->(ILjava/lang/CharSequence;Ljava/lang/Class;)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$AccessibilityActionCompat;->(Ljava/lang/Object;ILjava/lang/CharSequence;Landroidx/core/view/accessibility/AccessibilityViewCommand;Ljava/lang/Class;)V +Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat$Api19Impl; +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$Api19Impl;->getExtras(Landroid/view/accessibility/AccessibilityNodeInfo;)Landroid/os/Bundle; +Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat$Api30Impl; +HSPLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$Api30Impl;->setStateDescription(Landroid/view/accessibility/AccessibilityNodeInfo;Ljava/lang/CharSequence;)V +Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat$CollectionInfoCompat; +PLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$CollectionInfoCompat;->(Ljava/lang/Object;)V +PLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$CollectionInfoCompat;->obtain(IIZI)Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat$CollectionInfoCompat; +Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat$CollectionItemInfoCompat; +PLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$CollectionItemInfoCompat;->(Ljava/lang/Object;)V +PLandroidx/core/view/accessibility/AccessibilityNodeInfoCompat$CollectionItemInfoCompat;->obtain(IIIIZZ)Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat$CollectionItemInfoCompat; +Landroidx/core/view/accessibility/AccessibilityNodeInfoCompat$RangeInfoCompat; +Landroidx/core/view/accessibility/AccessibilityNodeProviderCompat; +HSPLandroidx/core/view/accessibility/AccessibilityNodeProviderCompat;->(Ljava/lang/Object;)V +HSPLandroidx/core/view/accessibility/AccessibilityNodeProviderCompat;->getProvider()Ljava/lang/Object; +Landroidx/core/view/accessibility/AccessibilityViewCommand; +Landroidx/core/view/accessibility/AccessibilityViewCommand$CommandArguments; +Landroidx/core/view/accessibility/AccessibilityViewCommand$MoveAtGranularityArguments; +Landroidx/core/view/accessibility/AccessibilityViewCommand$MoveHtmlArguments; +Landroidx/core/view/accessibility/AccessibilityViewCommand$MoveWindowArguments; +Landroidx/core/view/accessibility/AccessibilityViewCommand$ScrollToPositionArguments; +Landroidx/core/view/accessibility/AccessibilityViewCommand$SetProgressArguments; +Landroidx/core/view/accessibility/AccessibilityViewCommand$SetSelectionArguments; +Landroidx/core/view/accessibility/AccessibilityViewCommand$SetTextArguments; +Landroidx/core/view/inputmethod/EditorInfoCompat; +HSPLandroidx/core/view/inputmethod/EditorInfoCompat;->()V +HSPLandroidx/core/view/inputmethod/EditorInfoCompat;->setInitialSurroundingText(Landroid/view/inputmethod/EditorInfo;Ljava/lang/CharSequence;)V +Landroidx/core/view/inputmethod/EditorInfoCompat$Api30Impl; +HSPLandroidx/core/view/inputmethod/EditorInfoCompat$Api30Impl;->setInitialSurroundingSubText(Landroid/view/inputmethod/EditorInfo;Ljava/lang/CharSequence;I)V +Landroidx/credentials/provider/Action$Companion$$ExternalSyntheticApiModelOutline0; +HSPLandroidx/credentials/provider/Action$Companion$$ExternalSyntheticApiModelOutline0;->m(Landroid/app/Activity;Landroid/app/Application$ActivityLifecycleCallbacks;)V +HSPLandroidx/credentials/provider/Action$Companion$$ExternalSyntheticApiModelOutline0;->m(Landroid/os/Looper;)Landroid/os/Handler; +Landroidx/customview/poolingcontainer/PoolingContainer; +HSPLandroidx/customview/poolingcontainer/PoolingContainer;->()V +HSPLandroidx/customview/poolingcontainer/PoolingContainer;->addPoolingContainerListener(Landroid/view/View;Landroidx/customview/poolingcontainer/PoolingContainerListener;)V +HSPLandroidx/customview/poolingcontainer/PoolingContainer;->getPoolingContainerListenerHolder(Landroid/view/View;)Landroidx/customview/poolingcontainer/PoolingContainerListenerHolder; +Landroidx/customview/poolingcontainer/PoolingContainerListener; +Landroidx/customview/poolingcontainer/PoolingContainerListenerHolder; +HSPLandroidx/customview/poolingcontainer/PoolingContainerListenerHolder;->()V +HSPLandroidx/customview/poolingcontainer/PoolingContainerListenerHolder;->addListener(Landroidx/customview/poolingcontainer/PoolingContainerListener;)V +Landroidx/customview/poolingcontainer/R$id; +Landroidx/datastore/DataStoreFile; +HSPLandroidx/datastore/DataStoreFile;->dataStoreFile(Landroid/content/Context;Ljava/lang/String;)Ljava/io/File; +Landroidx/datastore/core/CorruptionException; +Landroidx/datastore/core/CorruptionHandler; +Landroidx/datastore/core/Data; +HSPLandroidx/datastore/core/Data;->(Ljava/lang/Object;I)V +HSPLandroidx/datastore/core/Data;->getValue()Ljava/lang/Object; +Landroidx/datastore/core/DataMigrationInitializer; +HSPLandroidx/datastore/core/DataMigrationInitializer;->()V +Landroidx/datastore/core/DataMigrationInitializer$Companion; +HSPLandroidx/datastore/core/DataMigrationInitializer$Companion;->()V +HSPLandroidx/datastore/core/DataMigrationInitializer$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/datastore/core/DataMigrationInitializer$Companion;->access$runMigrations(Landroidx/datastore/core/DataMigrationInitializer$Companion;Ljava/util/List;Landroidx/datastore/core/InitializerApi;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/datastore/core/DataMigrationInitializer$Companion;->getInitializer(Ljava/util/List;)Lkotlin/jvm/functions/Function2; +HSPLandroidx/datastore/core/DataMigrationInitializer$Companion;->runMigrations(Ljava/util/List;Landroidx/datastore/core/InitializerApi;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/datastore/core/DataMigrationInitializer$Companion$getInitializer$1; +HSPLandroidx/datastore/core/DataMigrationInitializer$Companion$getInitializer$1;->(Ljava/util/List;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/datastore/core/DataMigrationInitializer$Companion$getInitializer$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/datastore/core/DataMigrationInitializer$Companion$getInitializer$1;->invoke(Landroidx/datastore/core/InitializerApi;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/datastore/core/DataMigrationInitializer$Companion$getInitializer$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/datastore/core/DataMigrationInitializer$Companion$getInitializer$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/datastore/core/DataMigrationInitializer$Companion$runMigrations$1; +HSPLandroidx/datastore/core/DataMigrationInitializer$Companion$runMigrations$1;->(Landroidx/datastore/core/DataMigrationInitializer$Companion;Lkotlin/coroutines/Continuation;)V +Landroidx/datastore/core/DataMigrationInitializer$Companion$runMigrations$2; +HSPLandroidx/datastore/core/DataMigrationInitializer$Companion$runMigrations$2;->(Ljava/util/List;Ljava/util/List;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/datastore/core/DataMigrationInitializer$Companion$runMigrations$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/datastore/core/DataMigrationInitializer$Companion$runMigrations$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/datastore/core/DataMigrationInitializer$Companion$runMigrations$2;->invoke(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/datastore/core/DataMigrationInitializer$Companion$runMigrations$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/datastore/core/DataStore; +Landroidx/datastore/core/DataStoreFactory; +HSPLandroidx/datastore/core/DataStoreFactory;->()V +HSPLandroidx/datastore/core/DataStoreFactory;->()V +HSPLandroidx/datastore/core/DataStoreFactory;->create(Landroidx/datastore/core/Serializer;Landroidx/datastore/core/handlers/ReplaceFileCorruptionHandler;Ljava/util/List;Lkotlinx/coroutines/CoroutineScope;Lkotlin/jvm/functions/Function0;)Landroidx/datastore/core/DataStore; +Landroidx/datastore/core/Final; +Landroidx/datastore/core/InitializerApi; +Landroidx/datastore/core/ReadException; +Landroidx/datastore/core/Serializer; +Landroidx/datastore/core/SimpleActor; +HSPLandroidx/datastore/core/SimpleActor;->(Lkotlinx/coroutines/CoroutineScope;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/datastore/core/SimpleActor;->access$getConsumeMessage$p(Landroidx/datastore/core/SimpleActor;)Lkotlin/jvm/functions/Function2; +HSPLandroidx/datastore/core/SimpleActor;->access$getMessageQueue$p(Landroidx/datastore/core/SimpleActor;)Lkotlinx/coroutines/channels/Channel; +HSPLandroidx/datastore/core/SimpleActor;->access$getRemainingMessages$p(Landroidx/datastore/core/SimpleActor;)Ljava/util/concurrent/atomic/AtomicInteger; +HSPLandroidx/datastore/core/SimpleActor;->access$getScope$p(Landroidx/datastore/core/SimpleActor;)Lkotlinx/coroutines/CoroutineScope; +HSPLandroidx/datastore/core/SimpleActor;->offer(Ljava/lang/Object;)V +Landroidx/datastore/core/SimpleActor$1; +HSPLandroidx/datastore/core/SimpleActor$1;->(Lkotlin/jvm/functions/Function1;Landroidx/datastore/core/SimpleActor;Lkotlin/jvm/functions/Function2;)V +Landroidx/datastore/core/SimpleActor$offer$2; +HSPLandroidx/datastore/core/SimpleActor$offer$2;->(Landroidx/datastore/core/SimpleActor;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/datastore/core/SimpleActor$offer$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/datastore/core/SimpleActor$offer$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/datastore/core/SingleProcessDataStore; +HSPLandroidx/datastore/core/SingleProcessDataStore;->()V +HSPLandroidx/datastore/core/SingleProcessDataStore;->(Lkotlin/jvm/functions/Function0;Landroidx/datastore/core/Serializer;Ljava/util/List;Landroidx/datastore/core/CorruptionHandler;Lkotlinx/coroutines/CoroutineScope;)V +HSPLandroidx/datastore/core/SingleProcessDataStore;->access$getActiveFiles$cp()Ljava/util/Set; +HSPLandroidx/datastore/core/SingleProcessDataStore;->access$getActiveFilesLock$cp()Ljava/lang/Object; +HSPLandroidx/datastore/core/SingleProcessDataStore;->access$getActor$p(Landroidx/datastore/core/SingleProcessDataStore;)Landroidx/datastore/core/SimpleActor; +HSPLandroidx/datastore/core/SingleProcessDataStore;->access$getDownstreamFlow$p(Landroidx/datastore/core/SingleProcessDataStore;)Lkotlinx/coroutines/flow/MutableStateFlow; +HSPLandroidx/datastore/core/SingleProcessDataStore;->access$getProduceFile$p(Landroidx/datastore/core/SingleProcessDataStore;)Lkotlin/jvm/functions/Function0; +HSPLandroidx/datastore/core/SingleProcessDataStore;->access$handleRead(Landroidx/datastore/core/SingleProcessDataStore;Landroidx/datastore/core/SingleProcessDataStore$Message$Read;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/datastore/core/SingleProcessDataStore;->getData()Lkotlinx/coroutines/flow/Flow; +HSPLandroidx/datastore/core/SingleProcessDataStore;->getFile()Ljava/io/File; +HSPLandroidx/datastore/core/SingleProcessDataStore;->handleRead(Landroidx/datastore/core/SingleProcessDataStore$Message$Read;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/datastore/core/SingleProcessDataStore;->readAndInit(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/datastore/core/SingleProcessDataStore;->readAndInitOrPropagateFailure(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/datastore/core/SingleProcessDataStore;->readData(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/datastore/core/SingleProcessDataStore;->readDataOrHandleCorruption(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/datastore/core/SingleProcessDataStore$Companion; +HSPLandroidx/datastore/core/SingleProcessDataStore$Companion;->()V +HSPLandroidx/datastore/core/SingleProcessDataStore$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/datastore/core/SingleProcessDataStore$Companion;->getActiveFiles$datastore_core()Ljava/util/Set; +HSPLandroidx/datastore/core/SingleProcessDataStore$Companion;->getActiveFilesLock$datastore_core()Ljava/lang/Object; +Landroidx/datastore/core/SingleProcessDataStore$Message; +HSPLandroidx/datastore/core/SingleProcessDataStore$Message;->()V +HSPLandroidx/datastore/core/SingleProcessDataStore$Message;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/datastore/core/SingleProcessDataStore$Message$Read; +HSPLandroidx/datastore/core/SingleProcessDataStore$Message$Read;->(Landroidx/datastore/core/State;)V +Landroidx/datastore/core/SingleProcessDataStore$actor$1; +HSPLandroidx/datastore/core/SingleProcessDataStore$actor$1;->(Landroidx/datastore/core/SingleProcessDataStore;)V +Landroidx/datastore/core/SingleProcessDataStore$actor$2; +HSPLandroidx/datastore/core/SingleProcessDataStore$actor$2;->()V +HSPLandroidx/datastore/core/SingleProcessDataStore$actor$2;->()V +Landroidx/datastore/core/SingleProcessDataStore$actor$3; +HSPLandroidx/datastore/core/SingleProcessDataStore$actor$3;->(Landroidx/datastore/core/SingleProcessDataStore;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/datastore/core/SingleProcessDataStore$actor$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/datastore/core/SingleProcessDataStore$actor$3;->invoke(Landroidx/datastore/core/SingleProcessDataStore$Message;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/datastore/core/SingleProcessDataStore$actor$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/datastore/core/SingleProcessDataStore$actor$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/datastore/core/SingleProcessDataStore$data$1; +HSPLandroidx/datastore/core/SingleProcessDataStore$data$1;->(Landroidx/datastore/core/SingleProcessDataStore;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/datastore/core/SingleProcessDataStore$data$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/datastore/core/SingleProcessDataStore$data$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/datastore/core/SingleProcessDataStore$data$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/datastore/core/SingleProcessDataStore$data$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/datastore/core/SingleProcessDataStore$data$1$1; +HSPLandroidx/datastore/core/SingleProcessDataStore$data$1$1;->(Landroidx/datastore/core/State;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/datastore/core/SingleProcessDataStore$data$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/datastore/core/SingleProcessDataStore$data$1$1;->invoke(Landroidx/datastore/core/State;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/datastore/core/SingleProcessDataStore$data$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/datastore/core/SingleProcessDataStore$data$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/datastore/core/SingleProcessDataStore$data$1$invokeSuspend$$inlined$map$1; +HSPLandroidx/datastore/core/SingleProcessDataStore$data$1$invokeSuspend$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLandroidx/datastore/core/SingleProcessDataStore$data$1$invokeSuspend$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/datastore/core/SingleProcessDataStore$data$1$invokeSuspend$$inlined$map$1$2; +HSPLandroidx/datastore/core/SingleProcessDataStore$data$1$invokeSuspend$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLandroidx/datastore/core/SingleProcessDataStore$data$1$invokeSuspend$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/datastore/core/SingleProcessDataStore$data$1$invokeSuspend$$inlined$map$1$2$1; +HSPLandroidx/datastore/core/SingleProcessDataStore$data$1$invokeSuspend$$inlined$map$1$2$1;->(Landroidx/datastore/core/SingleProcessDataStore$data$1$invokeSuspend$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Landroidx/datastore/core/SingleProcessDataStore$file$2; +HSPLandroidx/datastore/core/SingleProcessDataStore$file$2;->(Landroidx/datastore/core/SingleProcessDataStore;)V +HSPLandroidx/datastore/core/SingleProcessDataStore$file$2;->invoke()Ljava/io/File; +HSPLandroidx/datastore/core/SingleProcessDataStore$file$2;->invoke()Ljava/lang/Object; +Landroidx/datastore/core/SingleProcessDataStore$readAndInit$1; +HSPLandroidx/datastore/core/SingleProcessDataStore$readAndInit$1;->(Landroidx/datastore/core/SingleProcessDataStore;Lkotlin/coroutines/Continuation;)V +Landroidx/datastore/core/SingleProcessDataStore$readAndInit$api$1; +HSPLandroidx/datastore/core/SingleProcessDataStore$readAndInit$api$1;->(Lkotlinx/coroutines/sync/Mutex;Lkotlin/jvm/internal/Ref$BooleanRef;Lkotlin/jvm/internal/Ref$ObjectRef;Landroidx/datastore/core/SingleProcessDataStore;)V +HSPLandroidx/datastore/core/SingleProcessDataStore$readAndInit$api$1;->updateData(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/datastore/core/SingleProcessDataStore$readAndInit$api$1$updateData$1; +HSPLandroidx/datastore/core/SingleProcessDataStore$readAndInit$api$1$updateData$1;->(Landroidx/datastore/core/SingleProcessDataStore$readAndInit$api$1;Lkotlin/coroutines/Continuation;)V +Landroidx/datastore/core/SingleProcessDataStore$readAndInitOrPropagateFailure$1; +HSPLandroidx/datastore/core/SingleProcessDataStore$readAndInitOrPropagateFailure$1;->(Landroidx/datastore/core/SingleProcessDataStore;Lkotlin/coroutines/Continuation;)V +Landroidx/datastore/core/SingleProcessDataStore$readData$1; +HSPLandroidx/datastore/core/SingleProcessDataStore$readData$1;->(Landroidx/datastore/core/SingleProcessDataStore;Lkotlin/coroutines/Continuation;)V +Landroidx/datastore/core/SingleProcessDataStore$readDataOrHandleCorruption$1; +HSPLandroidx/datastore/core/SingleProcessDataStore$readDataOrHandleCorruption$1;->(Landroidx/datastore/core/SingleProcessDataStore;Lkotlin/coroutines/Continuation;)V +Landroidx/datastore/core/State; +HSPLandroidx/datastore/core/State;->()V +HSPLandroidx/datastore/core/State;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/datastore/core/UnInitialized; +HSPLandroidx/datastore/core/UnInitialized;->()V +HSPLandroidx/datastore/core/UnInitialized;->()V +Landroidx/datastore/core/handlers/NoOpCorruptionHandler; +HSPLandroidx/datastore/core/handlers/NoOpCorruptionHandler;->()V +Landroidx/datastore/core/handlers/ReplaceFileCorruptionHandler; +Landroidx/datastore/preferences/PreferenceDataStoreDelegateKt; +HSPLandroidx/datastore/preferences/PreferenceDataStoreDelegateKt;->preferencesDataStore$default(Ljava/lang/String;Landroidx/datastore/core/handlers/ReplaceFileCorruptionHandler;Lkotlin/jvm/functions/Function1;Lkotlinx/coroutines/CoroutineScope;ILjava/lang/Object;)Lkotlin/properties/ReadOnlyProperty; +HSPLandroidx/datastore/preferences/PreferenceDataStoreDelegateKt;->preferencesDataStore(Ljava/lang/String;Landroidx/datastore/core/handlers/ReplaceFileCorruptionHandler;Lkotlin/jvm/functions/Function1;Lkotlinx/coroutines/CoroutineScope;)Lkotlin/properties/ReadOnlyProperty; +Landroidx/datastore/preferences/PreferenceDataStoreDelegateKt$preferencesDataStore$1; +HSPLandroidx/datastore/preferences/PreferenceDataStoreDelegateKt$preferencesDataStore$1;->()V +HSPLandroidx/datastore/preferences/PreferenceDataStoreDelegateKt$preferencesDataStore$1;->()V +HSPLandroidx/datastore/preferences/PreferenceDataStoreDelegateKt$preferencesDataStore$1;->invoke(Landroid/content/Context;)Ljava/util/List; +HSPLandroidx/datastore/preferences/PreferenceDataStoreDelegateKt$preferencesDataStore$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/datastore/preferences/PreferenceDataStoreFile; +HSPLandroidx/datastore/preferences/PreferenceDataStoreFile;->preferencesDataStoreFile(Landroid/content/Context;Ljava/lang/String;)Ljava/io/File; +Landroidx/datastore/preferences/PreferenceDataStoreSingletonDelegate; +HSPLandroidx/datastore/preferences/PreferenceDataStoreSingletonDelegate;->(Ljava/lang/String;Landroidx/datastore/core/handlers/ReplaceFileCorruptionHandler;Lkotlin/jvm/functions/Function1;Lkotlinx/coroutines/CoroutineScope;)V +HSPLandroidx/datastore/preferences/PreferenceDataStoreSingletonDelegate;->access$getName$p(Landroidx/datastore/preferences/PreferenceDataStoreSingletonDelegate;)Ljava/lang/String; +HSPLandroidx/datastore/preferences/PreferenceDataStoreSingletonDelegate;->getValue(Landroid/content/Context;Lkotlin/reflect/KProperty;)Landroidx/datastore/core/DataStore; +HSPLandroidx/datastore/preferences/PreferenceDataStoreSingletonDelegate;->getValue(Ljava/lang/Object;Lkotlin/reflect/KProperty;)Ljava/lang/Object; +Landroidx/datastore/preferences/PreferenceDataStoreSingletonDelegate$getValue$1$1; +HSPLandroidx/datastore/preferences/PreferenceDataStoreSingletonDelegate$getValue$1$1;->(Landroid/content/Context;Landroidx/datastore/preferences/PreferenceDataStoreSingletonDelegate;)V +HSPLandroidx/datastore/preferences/PreferenceDataStoreSingletonDelegate$getValue$1$1;->invoke()Ljava/io/File; +HSPLandroidx/datastore/preferences/PreferenceDataStoreSingletonDelegate$getValue$1$1;->invoke()Ljava/lang/Object; +Landroidx/datastore/preferences/core/MutablePreferences; +HSPLandroidx/datastore/preferences/core/MutablePreferences;->(Ljava/util/Map;Z)V +HSPLandroidx/datastore/preferences/core/MutablePreferences;->(Ljava/util/Map;ZILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/datastore/preferences/core/MutablePreferences;->asMap()Ljava/util/Map; +HSPLandroidx/datastore/preferences/core/MutablePreferences;->equals(Ljava/lang/Object;)Z +HSPLandroidx/datastore/preferences/core/MutablePreferences;->get(Landroidx/datastore/preferences/core/Preferences$Key;)Ljava/lang/Object; +HSPLandroidx/datastore/preferences/core/MutablePreferences;->hashCode()I +Landroidx/datastore/preferences/core/PreferenceDataStore; +HSPLandroidx/datastore/preferences/core/PreferenceDataStore;->(Landroidx/datastore/core/DataStore;)V +HSPLandroidx/datastore/preferences/core/PreferenceDataStore;->getData()Lkotlinx/coroutines/flow/Flow; +Landroidx/datastore/preferences/core/PreferenceDataStoreFactory; +HSPLandroidx/datastore/preferences/core/PreferenceDataStoreFactory;->()V +HSPLandroidx/datastore/preferences/core/PreferenceDataStoreFactory;->()V +HSPLandroidx/datastore/preferences/core/PreferenceDataStoreFactory;->create(Landroidx/datastore/core/handlers/ReplaceFileCorruptionHandler;Ljava/util/List;Lkotlinx/coroutines/CoroutineScope;Lkotlin/jvm/functions/Function0;)Landroidx/datastore/core/DataStore; +Landroidx/datastore/preferences/core/PreferenceDataStoreFactory$create$delegate$1; +HSPLandroidx/datastore/preferences/core/PreferenceDataStoreFactory$create$delegate$1;->(Lkotlin/jvm/functions/Function0;)V +HSPLandroidx/datastore/preferences/core/PreferenceDataStoreFactory$create$delegate$1;->invoke()Ljava/io/File; +HSPLandroidx/datastore/preferences/core/PreferenceDataStoreFactory$create$delegate$1;->invoke()Ljava/lang/Object; +Landroidx/datastore/preferences/core/Preferences; +HSPLandroidx/datastore/preferences/core/Preferences;->()V +HSPLandroidx/datastore/preferences/core/Preferences;->toPreferences()Landroidx/datastore/preferences/core/Preferences; +Landroidx/datastore/preferences/core/Preferences$Key; +HSPLandroidx/datastore/preferences/core/Preferences$Key;->(Ljava/lang/String;)V +Landroidx/datastore/preferences/core/PreferencesFactory; +HSPLandroidx/datastore/preferences/core/PreferencesFactory;->createEmpty()Landroidx/datastore/preferences/core/Preferences; +Landroidx/datastore/preferences/core/PreferencesKeys; +HSPLandroidx/datastore/preferences/core/PreferencesKeys;->booleanKey(Ljava/lang/String;)Landroidx/datastore/preferences/core/Preferences$Key; +HSPLandroidx/datastore/preferences/core/PreferencesKeys;->doubleKey(Ljava/lang/String;)Landroidx/datastore/preferences/core/Preferences$Key; +HSPLandroidx/datastore/preferences/core/PreferencesKeys;->intKey(Ljava/lang/String;)Landroidx/datastore/preferences/core/Preferences$Key; +HSPLandroidx/datastore/preferences/core/PreferencesKeys;->longKey(Ljava/lang/String;)Landroidx/datastore/preferences/core/Preferences$Key; +Landroidx/datastore/preferences/core/PreferencesSerializer; +HSPLandroidx/datastore/preferences/core/PreferencesSerializer;->()V +HSPLandroidx/datastore/preferences/core/PreferencesSerializer;->()V +HSPLandroidx/datastore/preferences/core/PreferencesSerializer;->getDefaultValue()Landroidx/datastore/preferences/core/Preferences; +HSPLandroidx/datastore/preferences/core/PreferencesSerializer;->getDefaultValue()Ljava/lang/Object; +HSPLandroidx/datastore/preferences/core/PreferencesSerializer;->getFileExtension()Ljava/lang/String; +Landroidx/emoji2/text/ConcurrencyHelpers; +HSPLandroidx/emoji2/text/ConcurrencyHelpers;->createBackgroundPriorityExecutor(Ljava/lang/String;)Ljava/util/concurrent/ThreadPoolExecutor; +HSPLandroidx/emoji2/text/ConcurrencyHelpers;->lambda$createBackgroundPriorityExecutor$0(Ljava/lang/String;Ljava/lang/Runnable;)Ljava/lang/Thread; +HSPLandroidx/emoji2/text/ConcurrencyHelpers;->mainHandlerAsync()Landroid/os/Handler; +Landroidx/emoji2/text/ConcurrencyHelpers$$ExternalSyntheticLambda0; +HSPLandroidx/emoji2/text/ConcurrencyHelpers$$ExternalSyntheticLambda0;->(Ljava/lang/String;)V +HSPLandroidx/emoji2/text/ConcurrencyHelpers$$ExternalSyntheticLambda0;->newThread(Ljava/lang/Runnable;)Ljava/lang/Thread; +Landroidx/emoji2/text/ConcurrencyHelpers$Handler28Impl; +HSPLandroidx/emoji2/text/ConcurrencyHelpers$Handler28Impl;->createAsync(Landroid/os/Looper;)Landroid/os/Handler; +Landroidx/emoji2/text/DefaultEmojiCompatConfig; +HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig;->create(Landroid/content/Context;)Landroidx/emoji2/text/FontRequestEmojiCompatConfig; +Landroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigFactory; +HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigFactory;->(Landroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper;)V +HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigFactory;->configOrNull(Landroid/content/Context;Landroidx/core/provider/FontRequest;)Landroidx/emoji2/text/EmojiCompat$Config; +HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigFactory;->convertToByteArray([Landroid/content/pm/Signature;)Ljava/util/List; +HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigFactory;->create(Landroid/content/Context;)Landroidx/emoji2/text/EmojiCompat$Config; +HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigFactory;->generateFontRequestFrom(Landroid/content/pm/ProviderInfo;Landroid/content/pm/PackageManager;)Landroidx/core/provider/FontRequest; +HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigFactory;->getHelperForApi()Landroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper; +HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigFactory;->hasFlagSystem(Landroid/content/pm/ProviderInfo;)Z +HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigFactory;->queryDefaultInstalledContentProvider(Landroid/content/pm/PackageManager;)Landroid/content/pm/ProviderInfo; +HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigFactory;->queryForDefaultFontRequest(Landroid/content/Context;)Landroidx/core/provider/FontRequest; +Landroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper; +HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper;->()V +Landroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper_API19; +HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper_API19;->()V +HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper_API19;->getProviderInfo(Landroid/content/pm/ResolveInfo;)Landroid/content/pm/ProviderInfo; +HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper_API19;->queryIntentContentProviders(Landroid/content/pm/PackageManager;Landroid/content/Intent;I)Ljava/util/List; +Landroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper_API28; +HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper_API28;->()V +HSPLandroidx/emoji2/text/DefaultEmojiCompatConfig$DefaultEmojiCompatConfigHelper_API28;->getSigningSignatures(Landroid/content/pm/PackageManager;Ljava/lang/String;)[Landroid/content/pm/Signature; +Landroidx/emoji2/text/DefaultGlyphChecker; +HSPLandroidx/emoji2/text/DefaultGlyphChecker;->()V +HSPLandroidx/emoji2/text/DefaultGlyphChecker;->()V +Landroidx/emoji2/text/EmojiCompat; +HSPLandroidx/emoji2/text/EmojiCompat;->()V +HSPLandroidx/emoji2/text/EmojiCompat;->(Landroidx/emoji2/text/EmojiCompat$Config;)V +HSPLandroidx/emoji2/text/EmojiCompat;->access$000(Landroidx/emoji2/text/EmojiCompat;)Landroidx/emoji2/text/EmojiCompat$SpanFactory; +HSPLandroidx/emoji2/text/EmojiCompat;->access$100(Landroidx/emoji2/text/EmojiCompat;)Landroidx/emoji2/text/EmojiCompat$GlyphChecker; +HSPLandroidx/emoji2/text/EmojiCompat;->get()Landroidx/emoji2/text/EmojiCompat; +HSPLandroidx/emoji2/text/EmojiCompat;->getLoadState()I +HSPLandroidx/emoji2/text/EmojiCompat;->init(Landroidx/emoji2/text/EmojiCompat$Config;)Landroidx/emoji2/text/EmojiCompat; +HSPLandroidx/emoji2/text/EmojiCompat;->isConfigured()Z +HSPLandroidx/emoji2/text/EmojiCompat;->isInitialized()Z +HSPLandroidx/emoji2/text/EmojiCompat;->load()V +HSPLandroidx/emoji2/text/EmojiCompat;->loadMetadata()V +HSPLandroidx/emoji2/text/EmojiCompat;->onMetadataLoadSuccess()V +HSPLandroidx/emoji2/text/EmojiCompat;->process(Ljava/lang/CharSequence;)Ljava/lang/CharSequence; +HSPLandroidx/emoji2/text/EmojiCompat;->process(Ljava/lang/CharSequence;II)Ljava/lang/CharSequence; +HSPLandroidx/emoji2/text/EmojiCompat;->process(Ljava/lang/CharSequence;III)Ljava/lang/CharSequence; +HSPLandroidx/emoji2/text/EmojiCompat;->process(Ljava/lang/CharSequence;IIII)Ljava/lang/CharSequence; +HSPLandroidx/emoji2/text/EmojiCompat;->registerInitCallback(Landroidx/emoji2/text/EmojiCompat$InitCallback;)V +HSPLandroidx/emoji2/text/EmojiCompat;->updateEditorInfo(Landroid/view/inputmethod/EditorInfo;)V +Landroidx/emoji2/text/EmojiCompat$CompatInternal; +HSPLandroidx/emoji2/text/EmojiCompat$CompatInternal;->(Landroidx/emoji2/text/EmojiCompat;)V +Landroidx/emoji2/text/EmojiCompat$CompatInternal19; +HSPLandroidx/emoji2/text/EmojiCompat$CompatInternal19;->(Landroidx/emoji2/text/EmojiCompat;)V +HSPLandroidx/emoji2/text/EmojiCompat$CompatInternal19;->loadMetadata()V +HSPLandroidx/emoji2/text/EmojiCompat$CompatInternal19;->onMetadataLoadSuccess(Landroidx/emoji2/text/MetadataRepo;)V +HSPLandroidx/emoji2/text/EmojiCompat$CompatInternal19;->process(Ljava/lang/CharSequence;IIIZ)Ljava/lang/CharSequence; +HSPLandroidx/emoji2/text/EmojiCompat$CompatInternal19;->updateEditorInfoAttrs(Landroid/view/inputmethod/EditorInfo;)V +Landroidx/emoji2/text/EmojiCompat$CompatInternal19$1; +HSPLandroidx/emoji2/text/EmojiCompat$CompatInternal19$1;->(Landroidx/emoji2/text/EmojiCompat$CompatInternal19;)V +HSPLandroidx/emoji2/text/EmojiCompat$CompatInternal19$1;->onLoaded(Landroidx/emoji2/text/MetadataRepo;)V +Landroidx/emoji2/text/EmojiCompat$Config; +HSPLandroidx/emoji2/text/EmojiCompat$Config;->(Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoader;)V +HSPLandroidx/emoji2/text/EmojiCompat$Config;->getMetadataRepoLoader()Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoader; +HSPLandroidx/emoji2/text/EmojiCompat$Config;->setMetadataLoadStrategy(I)Landroidx/emoji2/text/EmojiCompat$Config; +Landroidx/emoji2/text/EmojiCompat$DefaultSpanFactory; +HSPLandroidx/emoji2/text/EmojiCompat$DefaultSpanFactory;->()V +Landroidx/emoji2/text/EmojiCompat$GlyphChecker; +Landroidx/emoji2/text/EmojiCompat$InitCallback; +HSPLandroidx/emoji2/text/EmojiCompat$InitCallback;->()V +Landroidx/emoji2/text/EmojiCompat$ListenerDispatcher; +HSPLandroidx/emoji2/text/EmojiCompat$ListenerDispatcher;->(Ljava/util/Collection;I)V +HSPLandroidx/emoji2/text/EmojiCompat$ListenerDispatcher;->(Ljava/util/Collection;ILjava/lang/Throwable;)V +HSPLandroidx/emoji2/text/EmojiCompat$ListenerDispatcher;->run()V +Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoader; +Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoaderCallback; +HSPLandroidx/emoji2/text/EmojiCompat$MetadataRepoLoaderCallback;->()V +Landroidx/emoji2/text/EmojiCompat$SpanFactory; +Landroidx/emoji2/text/EmojiCompatInitializer; +HSPLandroidx/emoji2/text/EmojiCompatInitializer;->()V +HSPLandroidx/emoji2/text/EmojiCompatInitializer;->create(Landroid/content/Context;)Ljava/lang/Boolean; +HSPLandroidx/emoji2/text/EmojiCompatInitializer;->create(Landroid/content/Context;)Ljava/lang/Object; +HSPLandroidx/emoji2/text/EmojiCompatInitializer;->delayUntilFirstResume(Landroid/content/Context;)V +HSPLandroidx/emoji2/text/EmojiCompatInitializer;->dependencies()Ljava/util/List; +HSPLandroidx/emoji2/text/EmojiCompatInitializer;->loadEmojiCompatAfterDelay()V +Landroidx/emoji2/text/EmojiCompatInitializer$1; +HSPLandroidx/emoji2/text/EmojiCompatInitializer$1;->(Landroidx/emoji2/text/EmojiCompatInitializer;Landroidx/lifecycle/Lifecycle;)V +HSPLandroidx/emoji2/text/EmojiCompatInitializer$1;->onResume(Landroidx/lifecycle/LifecycleOwner;)V +Landroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultConfig; +HSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultConfig;->(Landroid/content/Context;)V +Landroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader; +HSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader;->(Landroid/content/Context;)V +HSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader;->doLoad(Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoaderCallback;Ljava/util/concurrent/ThreadPoolExecutor;)V +HSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader;->lambda$load$0$androidx-emoji2-text-EmojiCompatInitializer$BackgroundDefaultLoader(Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoaderCallback;Ljava/util/concurrent/ThreadPoolExecutor;)V +HSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader;->load(Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoaderCallback;)V +Landroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$$ExternalSyntheticLambda0; +HSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$$ExternalSyntheticLambda0;->(Landroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader;Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoaderCallback;Ljava/util/concurrent/ThreadPoolExecutor;)V +HSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$$ExternalSyntheticLambda0;->run()V +Landroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$1; +HSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$1;->(Landroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader;Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoaderCallback;Ljava/util/concurrent/ThreadPoolExecutor;)V +HSPLandroidx/emoji2/text/EmojiCompatInitializer$BackgroundDefaultLoader$1;->onLoaded(Landroidx/emoji2/text/MetadataRepo;)V +Landroidx/emoji2/text/EmojiCompatInitializer$LoadEmojiCompatRunnable; +HSPLandroidx/emoji2/text/EmojiCompatInitializer$LoadEmojiCompatRunnable;->()V +HSPLandroidx/emoji2/text/EmojiCompatInitializer$LoadEmojiCompatRunnable;->run()V +Landroidx/emoji2/text/EmojiExclusions; +HSPLandroidx/emoji2/text/EmojiExclusions;->getEmojiExclusions()Ljava/util/Set; +Landroidx/emoji2/text/EmojiExclusions$EmojiExclusions_Api34; +HSPLandroidx/emoji2/text/EmojiExclusions$EmojiExclusions_Api34;->getExclusions()Ljava/util/Set; +Landroidx/emoji2/text/EmojiExclusions$EmojiExclusions_Reflections; +HSPLandroidx/emoji2/text/EmojiExclusions$EmojiExclusions_Reflections;->getExclusions()Ljava/util/Set; +Landroidx/emoji2/text/EmojiProcessor; +HSPLandroidx/emoji2/text/EmojiProcessor;->(Landroidx/emoji2/text/MetadataRepo;Landroidx/emoji2/text/EmojiCompat$SpanFactory;Landroidx/emoji2/text/EmojiCompat$GlyphChecker;Z[ILjava/util/Set;)V +HSPLandroidx/emoji2/text/EmojiProcessor;->initExclusions(Ljava/util/Set;)V +HSPLandroidx/emoji2/text/EmojiProcessor;->process(Ljava/lang/CharSequence;IIIZ)Ljava/lang/CharSequence; +HSPLandroidx/emoji2/text/EmojiProcessor;->process(Ljava/lang/CharSequence;IIIZLandroidx/emoji2/text/EmojiProcessor$EmojiProcessCallback;)Ljava/lang/Object; +Landroidx/emoji2/text/EmojiProcessor$EmojiProcessAddSpanCallback; +HSPLandroidx/emoji2/text/EmojiProcessor$EmojiProcessAddSpanCallback;->(Landroidx/emoji2/text/UnprecomputeTextOnModificationSpannable;Landroidx/emoji2/text/EmojiCompat$SpanFactory;)V +HSPLandroidx/emoji2/text/EmojiProcessor$EmojiProcessAddSpanCallback;->getResult()Landroidx/emoji2/text/UnprecomputeTextOnModificationSpannable; +HSPLandroidx/emoji2/text/EmojiProcessor$EmojiProcessAddSpanCallback;->getResult()Ljava/lang/Object; +Landroidx/emoji2/text/EmojiProcessor$EmojiProcessCallback; +Landroidx/emoji2/text/EmojiProcessor$ProcessorSm; +HSPLandroidx/emoji2/text/EmojiProcessor$ProcessorSm;->(Landroidx/emoji2/text/MetadataRepo$Node;Z[I)V +HSPLandroidx/emoji2/text/EmojiProcessor$ProcessorSm;->check(I)I +HSPLandroidx/emoji2/text/EmojiProcessor$ProcessorSm;->isInFlushableState()Z +HSPLandroidx/emoji2/text/EmojiProcessor$ProcessorSm;->reset()I +Landroidx/emoji2/text/FontRequestEmojiCompatConfig; +HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig;->()V +HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig;->(Landroid/content/Context;Landroidx/core/provider/FontRequest;)V +HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig;->setLoadingExecutor(Ljava/util/concurrent/Executor;)Landroidx/emoji2/text/FontRequestEmojiCompatConfig; +Landroidx/emoji2/text/FontRequestEmojiCompatConfig$FontProviderHelper; +HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontProviderHelper;->()V +HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontProviderHelper;->buildTypeface(Landroid/content/Context;Landroidx/core/provider/FontsContractCompat$FontInfo;)Landroid/graphics/Typeface; +HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontProviderHelper;->fetchFonts(Landroid/content/Context;Landroidx/core/provider/FontRequest;)Landroidx/core/provider/FontsContractCompat$FontFamilyResult; +Landroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader; +HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;->(Landroid/content/Context;Landroidx/core/provider/FontRequest;Landroidx/emoji2/text/FontRequestEmojiCompatConfig$FontProviderHelper;)V +HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;->cleanUp()V +HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;->createMetadata()V +HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;->load(Landroidx/emoji2/text/EmojiCompat$MetadataRepoLoaderCallback;)V +HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;->loadInternal()V +HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;->retrieveFontInfo()Landroidx/core/provider/FontsContractCompat$FontInfo; +HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;->setExecutor(Ljava/util/concurrent/Executor;)V +Landroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader$$ExternalSyntheticLambda0; +HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader$$ExternalSyntheticLambda0;->(Landroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader;)V +HSPLandroidx/emoji2/text/FontRequestEmojiCompatConfig$FontRequestMetadataLoader$$ExternalSyntheticLambda0;->run()V +Landroidx/emoji2/text/MetadataListReader; +HSPLandroidx/emoji2/text/MetadataListReader;->findOffsetInfo(Landroidx/emoji2/text/MetadataListReader$OpenTypeReader;)Landroidx/emoji2/text/MetadataListReader$OffsetInfo; +HSPLandroidx/emoji2/text/MetadataListReader;->read(Ljava/nio/ByteBuffer;)Landroidx/emoji2/text/flatbuffer/MetadataList; +HSPLandroidx/emoji2/text/MetadataListReader;->toUnsignedInt(I)J +HSPLandroidx/emoji2/text/MetadataListReader;->toUnsignedShort(S)I +Landroidx/emoji2/text/MetadataListReader$ByteBufferReader; +HSPLandroidx/emoji2/text/MetadataListReader$ByteBufferReader;->(Ljava/nio/ByteBuffer;)V +HSPLandroidx/emoji2/text/MetadataListReader$ByteBufferReader;->getPosition()J +HSPLandroidx/emoji2/text/MetadataListReader$ByteBufferReader;->readTag()I +HSPLandroidx/emoji2/text/MetadataListReader$ByteBufferReader;->readUnsignedInt()J +HSPLandroidx/emoji2/text/MetadataListReader$ByteBufferReader;->readUnsignedShort()I +HSPLandroidx/emoji2/text/MetadataListReader$ByteBufferReader;->skip(I)V +Landroidx/emoji2/text/MetadataListReader$OffsetInfo; +HSPLandroidx/emoji2/text/MetadataListReader$OffsetInfo;->(JJ)V +HSPLandroidx/emoji2/text/MetadataListReader$OffsetInfo;->getStartOffset()J +Landroidx/emoji2/text/MetadataListReader$OpenTypeReader; +Landroidx/emoji2/text/MetadataRepo; +HSPLandroidx/emoji2/text/MetadataRepo;->(Landroid/graphics/Typeface;Landroidx/emoji2/text/flatbuffer/MetadataList;)V +HSPLandroidx/emoji2/text/MetadataRepo;->constructIndex(Landroidx/emoji2/text/flatbuffer/MetadataList;)V +HSPLandroidx/emoji2/text/MetadataRepo;->create(Landroid/graphics/Typeface;Ljava/nio/ByteBuffer;)Landroidx/emoji2/text/MetadataRepo; +HPLandroidx/emoji2/text/MetadataRepo;->getMetadataList()Landroidx/emoji2/text/flatbuffer/MetadataList; +HSPLandroidx/emoji2/text/MetadataRepo;->getMetadataVersion()I +HSPLandroidx/emoji2/text/MetadataRepo;->getRootNode()Landroidx/emoji2/text/MetadataRepo$Node; +HSPLandroidx/emoji2/text/MetadataRepo;->put(Landroidx/emoji2/text/TypefaceEmojiRasterizer;)V +Landroidx/emoji2/text/MetadataRepo$Node; +HSPLandroidx/emoji2/text/MetadataRepo$Node;->()V +HSPLandroidx/emoji2/text/MetadataRepo$Node;->(I)V +HSPLandroidx/emoji2/text/MetadataRepo$Node;->get(I)Landroidx/emoji2/text/MetadataRepo$Node; +HSPLandroidx/emoji2/text/MetadataRepo$Node;->put(Landroidx/emoji2/text/TypefaceEmojiRasterizer;II)V +Landroidx/emoji2/text/SpannableBuilder; +Landroidx/emoji2/text/TypefaceEmojiRasterizer; +HSPLandroidx/emoji2/text/TypefaceEmojiRasterizer;->()V +HSPLandroidx/emoji2/text/TypefaceEmojiRasterizer;->(Landroidx/emoji2/text/MetadataRepo;I)V +HSPLandroidx/emoji2/text/TypefaceEmojiRasterizer;->getCodepointAt(I)I +HSPLandroidx/emoji2/text/TypefaceEmojiRasterizer;->getCodepointsLength()I +HSPLandroidx/emoji2/text/TypefaceEmojiRasterizer;->getId()I +Landroidx/emoji2/text/UnprecomputeTextOnModificationSpannable; +Landroidx/emoji2/text/flatbuffer/MetadataItem; +HSPLandroidx/emoji2/text/flatbuffer/MetadataItem;->()V +HSPLandroidx/emoji2/text/flatbuffer/MetadataItem;->__assign(ILjava/nio/ByteBuffer;)Landroidx/emoji2/text/flatbuffer/MetadataItem; +HSPLandroidx/emoji2/text/flatbuffer/MetadataItem;->codepoints(I)I +HSPLandroidx/emoji2/text/flatbuffer/MetadataItem;->codepointsLength()I +HSPLandroidx/emoji2/text/flatbuffer/MetadataItem;->id()I +Landroidx/emoji2/text/flatbuffer/MetadataList; +HSPLandroidx/emoji2/text/flatbuffer/MetadataList;->()V +HSPLandroidx/emoji2/text/flatbuffer/MetadataList;->__assign(ILjava/nio/ByteBuffer;)Landroidx/emoji2/text/flatbuffer/MetadataList; +HSPLandroidx/emoji2/text/flatbuffer/MetadataList;->__init(ILjava/nio/ByteBuffer;)V +HSPLandroidx/emoji2/text/flatbuffer/MetadataList;->getRootAsMetadataList(Ljava/nio/ByteBuffer;)Landroidx/emoji2/text/flatbuffer/MetadataList; +HSPLandroidx/emoji2/text/flatbuffer/MetadataList;->getRootAsMetadataList(Ljava/nio/ByteBuffer;Landroidx/emoji2/text/flatbuffer/MetadataList;)Landroidx/emoji2/text/flatbuffer/MetadataList; +HSPLandroidx/emoji2/text/flatbuffer/MetadataList;->list(Landroidx/emoji2/text/flatbuffer/MetadataItem;I)Landroidx/emoji2/text/flatbuffer/MetadataItem; +HSPLandroidx/emoji2/text/flatbuffer/MetadataList;->listLength()I +HSPLandroidx/emoji2/text/flatbuffer/MetadataList;->version()I +Landroidx/emoji2/text/flatbuffer/Table; +HSPLandroidx/emoji2/text/flatbuffer/Table;->()V +HSPLandroidx/emoji2/text/flatbuffer/Table;->__indirect(I)I +HSPLandroidx/emoji2/text/flatbuffer/Table;->__offset(I)I +HSPLandroidx/emoji2/text/flatbuffer/Table;->__reset(ILjava/nio/ByteBuffer;)V +HSPLandroidx/emoji2/text/flatbuffer/Table;->__vector(I)I +HPLandroidx/emoji2/text/flatbuffer/Table;->__vector_len(I)I +Landroidx/emoji2/text/flatbuffer/Utf8; +HSPLandroidx/emoji2/text/flatbuffer/Utf8;->()V +HSPLandroidx/emoji2/text/flatbuffer/Utf8;->getDefault()Landroidx/emoji2/text/flatbuffer/Utf8; +Landroidx/emoji2/text/flatbuffer/Utf8Safe; +HSPLandroidx/emoji2/text/flatbuffer/Utf8Safe;->()V +Landroidx/fragment/app/Fragment; +Landroidx/fragment/app/FragmentActivity; +HSPLandroidx/fragment/app/FragmentActivity;->()V +HSPLandroidx/fragment/app/FragmentActivity;->dispatchFragmentsOnCreateView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View; +HSPLandroidx/fragment/app/FragmentActivity;->init()V +HSPLandroidx/fragment/app/FragmentActivity;->lambda$init$3$androidx-fragment-app-FragmentActivity(Landroid/content/Context;)V +HSPLandroidx/fragment/app/FragmentActivity;->onCreate(Landroid/os/Bundle;)V +HSPLandroidx/fragment/app/FragmentActivity;->onCreateView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View; +HSPLandroidx/fragment/app/FragmentActivity;->onCreateView(Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View; +HSPLandroidx/fragment/app/FragmentActivity;->onPostResume()V +HSPLandroidx/fragment/app/FragmentActivity;->onResume()V +HSPLandroidx/fragment/app/FragmentActivity;->onResumeFragments()V +HSPLandroidx/fragment/app/FragmentActivity;->onStart()V +HSPLandroidx/fragment/app/FragmentActivity;->onStateNotSaved()V +Landroidx/fragment/app/FragmentActivity$$ExternalSyntheticLambda0; +HSPLandroidx/fragment/app/FragmentActivity$$ExternalSyntheticLambda0;->(Landroidx/fragment/app/FragmentActivity;)V +Landroidx/fragment/app/FragmentActivity$$ExternalSyntheticLambda1; +HSPLandroidx/fragment/app/FragmentActivity$$ExternalSyntheticLambda1;->(Landroidx/fragment/app/FragmentActivity;)V +Landroidx/fragment/app/FragmentActivity$$ExternalSyntheticLambda2; +HSPLandroidx/fragment/app/FragmentActivity$$ExternalSyntheticLambda2;->(Landroidx/fragment/app/FragmentActivity;)V +Landroidx/fragment/app/FragmentActivity$$ExternalSyntheticLambda3; +HSPLandroidx/fragment/app/FragmentActivity$$ExternalSyntheticLambda3;->(Landroidx/fragment/app/FragmentActivity;)V +HSPLandroidx/fragment/app/FragmentActivity$$ExternalSyntheticLambda3;->onContextAvailable(Landroid/content/Context;)V +Landroidx/fragment/app/FragmentActivity$HostCallbacks; +HSPLandroidx/fragment/app/FragmentActivity$HostCallbacks;->(Landroidx/fragment/app/FragmentActivity;)V +HSPLandroidx/fragment/app/FragmentActivity$HostCallbacks;->addMenuProvider(Landroidx/core/view/MenuProvider;)V +HSPLandroidx/fragment/app/FragmentActivity$HostCallbacks;->addOnConfigurationChangedListener(Landroidx/core/util/Consumer;)V +HSPLandroidx/fragment/app/FragmentActivity$HostCallbacks;->addOnMultiWindowModeChangedListener(Landroidx/core/util/Consumer;)V +HSPLandroidx/fragment/app/FragmentActivity$HostCallbacks;->addOnPictureInPictureModeChangedListener(Landroidx/core/util/Consumer;)V +HSPLandroidx/fragment/app/FragmentActivity$HostCallbacks;->addOnTrimMemoryListener(Landroidx/core/util/Consumer;)V +HSPLandroidx/fragment/app/FragmentActivity$HostCallbacks;->getActivityResultRegistry()Landroidx/activity/result/ActivityResultRegistry; +HSPLandroidx/fragment/app/FragmentActivity$HostCallbacks;->getLifecycle()Landroidx/lifecycle/Lifecycle; +HSPLandroidx/fragment/app/FragmentActivity$HostCallbacks;->getOnBackPressedDispatcher()Landroidx/activity/OnBackPressedDispatcher; +HSPLandroidx/fragment/app/FragmentActivity$HostCallbacks;->getSavedStateRegistry()Landroidx/savedstate/SavedStateRegistry; +HSPLandroidx/fragment/app/FragmentActivity$HostCallbacks;->getViewModelStore()Landroidx/lifecycle/ViewModelStore; +Landroidx/fragment/app/FragmentContainer; +HSPLandroidx/fragment/app/FragmentContainer;->()V +Landroidx/fragment/app/FragmentContainerView; +Landroidx/fragment/app/FragmentController; +HSPLandroidx/fragment/app/FragmentController;->(Landroidx/fragment/app/FragmentHostCallback;)V +HSPLandroidx/fragment/app/FragmentController;->attachHost(Landroidx/fragment/app/Fragment;)V +HSPLandroidx/fragment/app/FragmentController;->createController(Landroidx/fragment/app/FragmentHostCallback;)Landroidx/fragment/app/FragmentController; +HSPLandroidx/fragment/app/FragmentController;->dispatchActivityCreated()V +HSPLandroidx/fragment/app/FragmentController;->dispatchCreate()V +HSPLandroidx/fragment/app/FragmentController;->dispatchResume()V +HSPLandroidx/fragment/app/FragmentController;->dispatchStart()V +HSPLandroidx/fragment/app/FragmentController;->execPendingActions()Z +HSPLandroidx/fragment/app/FragmentController;->noteStateNotSaved()V +HSPLandroidx/fragment/app/FragmentController;->onCreateView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View; +Landroidx/fragment/app/FragmentFactory; +HSPLandroidx/fragment/app/FragmentFactory;->()V +HSPLandroidx/fragment/app/FragmentFactory;->()V +Landroidx/fragment/app/FragmentHostCallback; +HSPLandroidx/fragment/app/FragmentHostCallback;->(Landroid/app/Activity;Landroid/content/Context;Landroid/os/Handler;I)V +HSPLandroidx/fragment/app/FragmentHostCallback;->(Landroidx/fragment/app/FragmentActivity;)V +HSPLandroidx/fragment/app/FragmentHostCallback;->getHandler()Landroid/os/Handler; +Landroidx/fragment/app/FragmentLayoutInflaterFactory; +HSPLandroidx/fragment/app/FragmentLayoutInflaterFactory;->(Landroidx/fragment/app/FragmentManager;)V +HSPLandroidx/fragment/app/FragmentLayoutInflaterFactory;->onCreateView(Landroid/view/View;Ljava/lang/String;Landroid/content/Context;Landroid/util/AttributeSet;)Landroid/view/View; +Landroidx/fragment/app/FragmentLifecycleCallbacksDispatcher; +HSPLandroidx/fragment/app/FragmentLifecycleCallbacksDispatcher;->(Landroidx/fragment/app/FragmentManager;)V +Landroidx/fragment/app/FragmentManager; +HSPLandroidx/fragment/app/FragmentManager;->()V +HSPLandroidx/fragment/app/FragmentManager;->()V +HSPLandroidx/fragment/app/FragmentManager;->addFragmentOnAttachListener(Landroidx/fragment/app/FragmentOnAttachListener;)V +HSPLandroidx/fragment/app/FragmentManager;->attachController(Landroidx/fragment/app/FragmentHostCallback;Landroidx/fragment/app/FragmentContainer;Landroidx/fragment/app/Fragment;)V +HSPLandroidx/fragment/app/FragmentManager;->collectAllSpecialEffectsController()Ljava/util/Set; +HSPLandroidx/fragment/app/FragmentManager;->dispatchActivityCreated()V +HSPLandroidx/fragment/app/FragmentManager;->dispatchCreate()V +HSPLandroidx/fragment/app/FragmentManager;->dispatchResume()V +HSPLandroidx/fragment/app/FragmentManager;->dispatchStart()V +HSPLandroidx/fragment/app/FragmentManager;->dispatchStateChange(I)V +HSPLandroidx/fragment/app/FragmentManager;->doPendingDeferredStart()V +HSPLandroidx/fragment/app/FragmentManager;->ensureExecReady(Z)V +HSPLandroidx/fragment/app/FragmentManager;->execPendingActions(Z)Z +HSPLandroidx/fragment/app/FragmentManager;->generateOpsForPendingActions(Ljava/util/ArrayList;Ljava/util/ArrayList;)Z +HSPLandroidx/fragment/app/FragmentManager;->getBackStackEntryCount()I +HSPLandroidx/fragment/app/FragmentManager;->getLayoutInflaterFactory()Landroid/view/LayoutInflater$Factory2; +HSPLandroidx/fragment/app/FragmentManager;->isStateSaved()Z +HSPLandroidx/fragment/app/FragmentManager;->moveToState(IZ)V +HSPLandroidx/fragment/app/FragmentManager;->noteStateNotSaved()V +HSPLandroidx/fragment/app/FragmentManager;->startPendingDeferredFragments()V +HSPLandroidx/fragment/app/FragmentManager;->updateOnBackPressedCallbackEnabled()V +Landroidx/fragment/app/FragmentManager$$ExternalSyntheticLambda0; +HSPLandroidx/fragment/app/FragmentManager$$ExternalSyntheticLambda0;->(Landroidx/fragment/app/FragmentManager;)V +Landroidx/fragment/app/FragmentManager$$ExternalSyntheticLambda1; +HSPLandroidx/fragment/app/FragmentManager$$ExternalSyntheticLambda1;->(Landroidx/fragment/app/FragmentManager;)V +Landroidx/fragment/app/FragmentManager$$ExternalSyntheticLambda2; +HSPLandroidx/fragment/app/FragmentManager$$ExternalSyntheticLambda2;->(Landroidx/fragment/app/FragmentManager;)V +Landroidx/fragment/app/FragmentManager$$ExternalSyntheticLambda3; +HSPLandroidx/fragment/app/FragmentManager$$ExternalSyntheticLambda3;->(Landroidx/fragment/app/FragmentManager;)V +Landroidx/fragment/app/FragmentManager$$ExternalSyntheticLambda4; +HSPLandroidx/fragment/app/FragmentManager$$ExternalSyntheticLambda4;->(Landroidx/fragment/app/FragmentManager;)V +Landroidx/fragment/app/FragmentManager$1; +HSPLandroidx/fragment/app/FragmentManager$1;->(Landroidx/fragment/app/FragmentManager;Z)V +Landroidx/fragment/app/FragmentManager$10; +HSPLandroidx/fragment/app/FragmentManager$10;->(Landroidx/fragment/app/FragmentManager;)V +Landroidx/fragment/app/FragmentManager$2; +HSPLandroidx/fragment/app/FragmentManager$2;->(Landroidx/fragment/app/FragmentManager;)V +Landroidx/fragment/app/FragmentManager$3; +HSPLandroidx/fragment/app/FragmentManager$3;->(Landroidx/fragment/app/FragmentManager;)V +Landroidx/fragment/app/FragmentManager$4; +HSPLandroidx/fragment/app/FragmentManager$4;->(Landroidx/fragment/app/FragmentManager;)V +Landroidx/fragment/app/FragmentManager$5; +HSPLandroidx/fragment/app/FragmentManager$5;->(Landroidx/fragment/app/FragmentManager;)V +Landroidx/fragment/app/FragmentManager$8; +HSPLandroidx/fragment/app/FragmentManager$8;->(Landroidx/fragment/app/FragmentManager;)V +Landroidx/fragment/app/FragmentManager$9; +HSPLandroidx/fragment/app/FragmentManager$9;->(Landroidx/fragment/app/FragmentManager;)V +Landroidx/fragment/app/FragmentManager$FragmentIntentSenderContract; +HSPLandroidx/fragment/app/FragmentManager$FragmentIntentSenderContract;->()V +Landroidx/fragment/app/FragmentManagerImpl; +HSPLandroidx/fragment/app/FragmentManagerImpl;->()V +Landroidx/fragment/app/FragmentManagerViewModel; +HSPLandroidx/fragment/app/FragmentManagerViewModel;->()V +HSPLandroidx/fragment/app/FragmentManagerViewModel;->(Z)V +HSPLandroidx/fragment/app/FragmentManagerViewModel;->getInstance(Landroidx/lifecycle/ViewModelStore;)Landroidx/fragment/app/FragmentManagerViewModel; +HSPLandroidx/fragment/app/FragmentManagerViewModel;->setIsStateSaved(Z)V +Landroidx/fragment/app/FragmentManagerViewModel$1; +HSPLandroidx/fragment/app/FragmentManagerViewModel$1;->()V +HSPLandroidx/fragment/app/FragmentManagerViewModel$1;->create(Ljava/lang/Class;)Landroidx/lifecycle/ViewModel; +Landroidx/fragment/app/FragmentOnAttachListener; +Landroidx/fragment/app/FragmentResultOwner; +Landroidx/fragment/app/FragmentStore; +HSPLandroidx/fragment/app/FragmentStore;->()V +HSPLandroidx/fragment/app/FragmentStore;->burpActive()V +HSPLandroidx/fragment/app/FragmentStore;->dispatchStateChange(I)V +HSPLandroidx/fragment/app/FragmentStore;->getActiveFragmentStateManagers()Ljava/util/List; +HSPLandroidx/fragment/app/FragmentStore;->getFragments()Ljava/util/List; +HSPLandroidx/fragment/app/FragmentStore;->moveToExpectedState()V +HSPLandroidx/fragment/app/FragmentStore;->setNonConfig(Landroidx/fragment/app/FragmentManagerViewModel;)V +Landroidx/fragment/app/SpecialEffectsControllerFactory; +Landroidx/lifecycle/AndroidViewModel; +Landroidx/lifecycle/DefaultLifecycleObserver; +HSPLandroidx/lifecycle/DefaultLifecycleObserver;->onCreate(Landroidx/lifecycle/LifecycleOwner;)V +HSPLandroidx/lifecycle/DefaultLifecycleObserver;->onStart(Landroidx/lifecycle/LifecycleOwner;)V +Landroidx/lifecycle/DefaultLifecycleObserverAdapter; +HSPLandroidx/lifecycle/DefaultLifecycleObserverAdapter;->(Landroidx/lifecycle/DefaultLifecycleObserver;Landroidx/lifecycle/LifecycleEventObserver;)V +HSPLandroidx/lifecycle/DefaultLifecycleObserverAdapter;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V +Landroidx/lifecycle/DefaultLifecycleObserverAdapter$WhenMappings; +HSPLandroidx/lifecycle/DefaultLifecycleObserverAdapter$WhenMappings;->()V +Landroidx/lifecycle/EmptyActivityLifecycleCallbacks; +HSPLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->()V +HSPLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V +HSPLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityResumed(Landroid/app/Activity;)V +HSPLandroidx/lifecycle/EmptyActivityLifecycleCallbacks;->onActivityStarted(Landroid/app/Activity;)V +Landroidx/lifecycle/HasDefaultViewModelProviderFactory; +Landroidx/lifecycle/Lifecycle; +HSPLandroidx/lifecycle/Lifecycle;->()V +HSPLandroidx/lifecycle/Lifecycle;->getInternalScopeRef()Ljava/util/concurrent/atomic/AtomicReference; +Landroidx/lifecycle/Lifecycle$Event; +HSPLandroidx/lifecycle/Lifecycle$Event;->$values()[Landroidx/lifecycle/Lifecycle$Event; +HSPLandroidx/lifecycle/Lifecycle$Event;->()V +HSPLandroidx/lifecycle/Lifecycle$Event;->(Ljava/lang/String;I)V +HSPLandroidx/lifecycle/Lifecycle$Event;->getTargetState()Landroidx/lifecycle/Lifecycle$State; +HSPLandroidx/lifecycle/Lifecycle$Event;->values()[Landroidx/lifecycle/Lifecycle$Event; +Landroidx/lifecycle/Lifecycle$Event$Companion; +HSPLandroidx/lifecycle/Lifecycle$Event$Companion;->()V +HSPLandroidx/lifecycle/Lifecycle$Event$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/lifecycle/Lifecycle$Event$Companion;->upFrom(Landroidx/lifecycle/Lifecycle$State;)Landroidx/lifecycle/Lifecycle$Event; +Landroidx/lifecycle/Lifecycle$Event$Companion$WhenMappings; +HSPLandroidx/lifecycle/Lifecycle$Event$Companion$WhenMappings;->()V +Landroidx/lifecycle/Lifecycle$Event$WhenMappings; +HSPLandroidx/lifecycle/Lifecycle$Event$WhenMappings;->()V +Landroidx/lifecycle/Lifecycle$State; +HSPLandroidx/lifecycle/Lifecycle$State;->$values()[Landroidx/lifecycle/Lifecycle$State; +HSPLandroidx/lifecycle/Lifecycle$State;->()V +HSPLandroidx/lifecycle/Lifecycle$State;->(Ljava/lang/String;I)V +HSPLandroidx/lifecycle/Lifecycle$State;->isAtLeast(Landroidx/lifecycle/Lifecycle$State;)Z +HSPLandroidx/lifecycle/Lifecycle$State;->values()[Landroidx/lifecycle/Lifecycle$State; +Landroidx/lifecycle/LifecycleCoroutineScope; +HSPLandroidx/lifecycle/LifecycleCoroutineScope;->()V +Landroidx/lifecycle/LifecycleCoroutineScopeImpl; +HSPLandroidx/lifecycle/LifecycleCoroutineScopeImpl;->(Landroidx/lifecycle/Lifecycle;Lkotlin/coroutines/CoroutineContext;)V +HSPLandroidx/lifecycle/LifecycleCoroutineScopeImpl;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext; +HSPLandroidx/lifecycle/LifecycleCoroutineScopeImpl;->getLifecycle$lifecycle_common()Landroidx/lifecycle/Lifecycle; +HSPLandroidx/lifecycle/LifecycleCoroutineScopeImpl;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V +HSPLandroidx/lifecycle/LifecycleCoroutineScopeImpl;->register()V +Landroidx/lifecycle/LifecycleCoroutineScopeImpl$register$1; +HSPLandroidx/lifecycle/LifecycleCoroutineScopeImpl$register$1;->(Landroidx/lifecycle/LifecycleCoroutineScopeImpl;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/lifecycle/LifecycleCoroutineScopeImpl$register$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/lifecycle/LifecycleCoroutineScopeImpl$register$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/lifecycle/LifecycleDispatcher; +HSPLandroidx/lifecycle/LifecycleDispatcher;->()V +HSPLandroidx/lifecycle/LifecycleDispatcher;->()V +HSPLandroidx/lifecycle/LifecycleDispatcher;->init(Landroid/content/Context;)V +Landroidx/lifecycle/LifecycleDispatcher$DispatcherActivityCallback; +HSPLandroidx/lifecycle/LifecycleDispatcher$DispatcherActivityCallback;->()V +HSPLandroidx/lifecycle/LifecycleDispatcher$DispatcherActivityCallback;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V +Landroidx/lifecycle/LifecycleEventObserver; +Landroidx/lifecycle/LifecycleKt; +HSPLandroidx/lifecycle/LifecycleKt;->getCoroutineScope(Landroidx/lifecycle/Lifecycle;)Landroidx/lifecycle/LifecycleCoroutineScope; +Landroidx/lifecycle/LifecycleObserver; +Landroidx/lifecycle/LifecycleOwner; +Landroidx/lifecycle/LifecycleOwnerKt; +HSPLandroidx/lifecycle/LifecycleOwnerKt;->getLifecycleScope(Landroidx/lifecycle/LifecycleOwner;)Landroidx/lifecycle/LifecycleCoroutineScope; +Landroidx/lifecycle/LifecycleRegistry; +HSPLandroidx/lifecycle/LifecycleRegistry;->()V +HSPLandroidx/lifecycle/LifecycleRegistry;->(Landroidx/lifecycle/LifecycleOwner;)V +HSPLandroidx/lifecycle/LifecycleRegistry;->(Landroidx/lifecycle/LifecycleOwner;Z)V +HSPLandroidx/lifecycle/LifecycleRegistry;->addObserver(Landroidx/lifecycle/LifecycleObserver;)V +HSPLandroidx/lifecycle/LifecycleRegistry;->calculateTargetState(Landroidx/lifecycle/LifecycleObserver;)Landroidx/lifecycle/Lifecycle$State; +HSPLandroidx/lifecycle/LifecycleRegistry;->enforceMainThreadIfNeeded(Ljava/lang/String;)V +HSPLandroidx/lifecycle/LifecycleRegistry;->forwardPass(Landroidx/lifecycle/LifecycleOwner;)V +HSPLandroidx/lifecycle/LifecycleRegistry;->getCurrentState()Landroidx/lifecycle/Lifecycle$State; +HSPLandroidx/lifecycle/LifecycleRegistry;->getCurrentStateFlow()Lkotlinx/coroutines/flow/StateFlow; +HSPLandroidx/lifecycle/LifecycleRegistry;->handleLifecycleEvent(Landroidx/lifecycle/Lifecycle$Event;)V +HSPLandroidx/lifecycle/LifecycleRegistry;->isSynced()Z +HSPLandroidx/lifecycle/LifecycleRegistry;->moveToState(Landroidx/lifecycle/Lifecycle$State;)V +HSPLandroidx/lifecycle/LifecycleRegistry;->popParentState()V +HSPLandroidx/lifecycle/LifecycleRegistry;->pushParentState(Landroidx/lifecycle/Lifecycle$State;)V +HSPLandroidx/lifecycle/LifecycleRegistry;->removeObserver(Landroidx/lifecycle/LifecycleObserver;)V +HSPLandroidx/lifecycle/LifecycleRegistry;->sync()V +Landroidx/lifecycle/LifecycleRegistry$Companion; +HSPLandroidx/lifecycle/LifecycleRegistry$Companion;->()V +HSPLandroidx/lifecycle/LifecycleRegistry$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/lifecycle/LifecycleRegistry$Companion;->min$lifecycle_runtime_release(Landroidx/lifecycle/Lifecycle$State;Landroidx/lifecycle/Lifecycle$State;)Landroidx/lifecycle/Lifecycle$State; +Landroidx/lifecycle/LifecycleRegistry$ObserverWithState; +HSPLandroidx/lifecycle/LifecycleRegistry$ObserverWithState;->(Landroidx/lifecycle/LifecycleObserver;Landroidx/lifecycle/Lifecycle$State;)V +HSPLandroidx/lifecycle/LifecycleRegistry$ObserverWithState;->dispatchEvent(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V +HSPLandroidx/lifecycle/LifecycleRegistry$ObserverWithState;->getState()Landroidx/lifecycle/Lifecycle$State; +Landroidx/lifecycle/LifecycleRegistryOwner; +Landroidx/lifecycle/Lifecycling; +HSPLandroidx/lifecycle/Lifecycling;->()V +HSPLandroidx/lifecycle/Lifecycling;->()V +HSPLandroidx/lifecycle/Lifecycling;->lifecycleEventObserver(Ljava/lang/Object;)Landroidx/lifecycle/LifecycleEventObserver; +Landroidx/lifecycle/LiveData; +HSPLandroidx/lifecycle/LiveData;->()V +HSPLandroidx/lifecycle/LiveData;->()V +HSPLandroidx/lifecycle/LiveData;->assertMainThread(Ljava/lang/String;)V +HSPLandroidx/lifecycle/LiveData;->dispatchingValue(Landroidx/lifecycle/LiveData$ObserverWrapper;)V +HSPLandroidx/lifecycle/LiveData;->postValue(Ljava/lang/Object;)V +HSPLandroidx/lifecycle/LiveData;->setValue(Ljava/lang/Object;)V +Landroidx/lifecycle/LiveData$1; +HSPLandroidx/lifecycle/LiveData$1;->(Landroidx/lifecycle/LiveData;)V +HSPLandroidx/lifecycle/LiveData$1;->run()V +Landroidx/lifecycle/MutableLiveData; +HSPLandroidx/lifecycle/MutableLiveData;->()V +HSPLandroidx/lifecycle/MutableLiveData;->postValue(Ljava/lang/Object;)V +HSPLandroidx/lifecycle/MutableLiveData;->setValue(Ljava/lang/Object;)V +Landroidx/lifecycle/ProcessLifecycleInitializer; +HSPLandroidx/lifecycle/ProcessLifecycleInitializer;->()V +HSPLandroidx/lifecycle/ProcessLifecycleInitializer;->create(Landroid/content/Context;)Landroidx/lifecycle/LifecycleOwner; +HSPLandroidx/lifecycle/ProcessLifecycleInitializer;->create(Landroid/content/Context;)Ljava/lang/Object; +HSPLandroidx/lifecycle/ProcessLifecycleInitializer;->dependencies()Ljava/util/List; +Landroidx/lifecycle/ProcessLifecycleOwner; +HSPLandroidx/lifecycle/ProcessLifecycleOwner;->()V +HSPLandroidx/lifecycle/ProcessLifecycleOwner;->()V +HSPLandroidx/lifecycle/ProcessLifecycleOwner;->access$getNewInstance$cp()Landroidx/lifecycle/ProcessLifecycleOwner; +HSPLandroidx/lifecycle/ProcessLifecycleOwner;->activityResumed$lifecycle_process_release()V +HSPLandroidx/lifecycle/ProcessLifecycleOwner;->activityStarted$lifecycle_process_release()V +HSPLandroidx/lifecycle/ProcessLifecycleOwner;->attach$lifecycle_process_release(Landroid/content/Context;)V +HSPLandroidx/lifecycle/ProcessLifecycleOwner;->getLifecycle()Landroidx/lifecycle/Lifecycle; +Landroidx/lifecycle/ProcessLifecycleOwner$$ExternalSyntheticLambda0; +HSPLandroidx/lifecycle/ProcessLifecycleOwner$$ExternalSyntheticLambda0;->(Landroidx/lifecycle/ProcessLifecycleOwner;)V +Landroidx/lifecycle/ProcessLifecycleOwner$Api29Impl; +HSPLandroidx/lifecycle/ProcessLifecycleOwner$Api29Impl;->()V +HSPLandroidx/lifecycle/ProcessLifecycleOwner$Api29Impl;->()V +HSPLandroidx/lifecycle/ProcessLifecycleOwner$Api29Impl;->registerActivityLifecycleCallbacks(Landroid/app/Activity;Landroid/app/Application$ActivityLifecycleCallbacks;)V +Landroidx/lifecycle/ProcessLifecycleOwner$Companion; +HSPLandroidx/lifecycle/ProcessLifecycleOwner$Companion;->()V +HSPLandroidx/lifecycle/ProcessLifecycleOwner$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/lifecycle/ProcessLifecycleOwner$Companion;->get()Landroidx/lifecycle/LifecycleOwner; +HSPLandroidx/lifecycle/ProcessLifecycleOwner$Companion;->init$lifecycle_process_release(Landroid/content/Context;)V +Landroidx/lifecycle/ProcessLifecycleOwner$attach$1; +HSPLandroidx/lifecycle/ProcessLifecycleOwner$attach$1;->(Landroidx/lifecycle/ProcessLifecycleOwner;)V +HSPLandroidx/lifecycle/ProcessLifecycleOwner$attach$1;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V +HSPLandroidx/lifecycle/ProcessLifecycleOwner$attach$1;->onActivityPreCreated(Landroid/app/Activity;Landroid/os/Bundle;)V +Landroidx/lifecycle/ProcessLifecycleOwner$attach$1$onActivityPreCreated$1; +HSPLandroidx/lifecycle/ProcessLifecycleOwner$attach$1$onActivityPreCreated$1;->(Landroidx/lifecycle/ProcessLifecycleOwner;)V +HSPLandroidx/lifecycle/ProcessLifecycleOwner$attach$1$onActivityPreCreated$1;->onActivityPostResumed(Landroid/app/Activity;)V +HSPLandroidx/lifecycle/ProcessLifecycleOwner$attach$1$onActivityPreCreated$1;->onActivityPostStarted(Landroid/app/Activity;)V +Landroidx/lifecycle/ProcessLifecycleOwner$initializationListener$1; +HSPLandroidx/lifecycle/ProcessLifecycleOwner$initializationListener$1;->(Landroidx/lifecycle/ProcessLifecycleOwner;)V +Landroidx/lifecycle/ReportFragment; +HSPLandroidx/lifecycle/ReportFragment;->()V +HSPLandroidx/lifecycle/ReportFragment;->()V +HSPLandroidx/lifecycle/ReportFragment;->dispatch(Landroidx/lifecycle/Lifecycle$Event;)V +HSPLandroidx/lifecycle/ReportFragment;->dispatchCreate(Landroidx/lifecycle/ReportFragment$ActivityInitializationListener;)V +HSPLandroidx/lifecycle/ReportFragment;->dispatchResume(Landroidx/lifecycle/ReportFragment$ActivityInitializationListener;)V +HSPLandroidx/lifecycle/ReportFragment;->dispatchStart(Landroidx/lifecycle/ReportFragment$ActivityInitializationListener;)V +HSPLandroidx/lifecycle/ReportFragment;->injectIfNeededIn(Landroid/app/Activity;)V +HSPLandroidx/lifecycle/ReportFragment;->onActivityCreated(Landroid/os/Bundle;)V +HSPLandroidx/lifecycle/ReportFragment;->onResume()V +HSPLandroidx/lifecycle/ReportFragment;->onStart()V +Landroidx/lifecycle/ReportFragment$ActivityInitializationListener; +Landroidx/lifecycle/ReportFragment$Companion; +HSPLandroidx/lifecycle/ReportFragment$Companion;->()V +HSPLandroidx/lifecycle/ReportFragment$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/lifecycle/ReportFragment$Companion;->dispatch$lifecycle_runtime_release(Landroid/app/Activity;Landroidx/lifecycle/Lifecycle$Event;)V +HSPLandroidx/lifecycle/ReportFragment$Companion;->injectIfNeededIn(Landroid/app/Activity;)V +Landroidx/lifecycle/ReportFragment$LifecycleCallbacks; +HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->()V +HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->()V +HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V +HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPostCreated(Landroid/app/Activity;Landroid/os/Bundle;)V +HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPostResumed(Landroid/app/Activity;)V +HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityPostStarted(Landroid/app/Activity;)V +HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityResumed(Landroid/app/Activity;)V +HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks;->onActivityStarted(Landroid/app/Activity;)V +Landroidx/lifecycle/ReportFragment$LifecycleCallbacks$Companion; +HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks$Companion;->()V +HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/lifecycle/ReportFragment$LifecycleCallbacks$Companion;->registerIn(Landroid/app/Activity;)V +Landroidx/lifecycle/SavedStateHandleAttacher; +HSPLandroidx/lifecycle/SavedStateHandleAttacher;->(Landroidx/lifecycle/SavedStateHandlesProvider;)V +HSPLandroidx/lifecycle/SavedStateHandleAttacher;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V +Landroidx/lifecycle/SavedStateHandleSupport; +HSPLandroidx/lifecycle/SavedStateHandleSupport;->()V +HSPLandroidx/lifecycle/SavedStateHandleSupport;->enableSavedStateHandles(Landroidx/savedstate/SavedStateRegistryOwner;)V +HSPLandroidx/lifecycle/SavedStateHandleSupport;->getSavedStateHandlesVM(Landroidx/lifecycle/ViewModelStoreOwner;)Landroidx/lifecycle/SavedStateHandlesVM; +Landroidx/lifecycle/SavedStateHandleSupport$DEFAULT_ARGS_KEY$1; +HSPLandroidx/lifecycle/SavedStateHandleSupport$DEFAULT_ARGS_KEY$1;->()V +Landroidx/lifecycle/SavedStateHandleSupport$SAVED_STATE_REGISTRY_OWNER_KEY$1; +HSPLandroidx/lifecycle/SavedStateHandleSupport$SAVED_STATE_REGISTRY_OWNER_KEY$1;->()V +Landroidx/lifecycle/SavedStateHandleSupport$VIEW_MODEL_STORE_OWNER_KEY$1; +HSPLandroidx/lifecycle/SavedStateHandleSupport$VIEW_MODEL_STORE_OWNER_KEY$1;->()V +Landroidx/lifecycle/SavedStateHandleSupport$savedStateHandlesVM$1; +HSPLandroidx/lifecycle/SavedStateHandleSupport$savedStateHandlesVM$1;->()V +HSPLandroidx/lifecycle/SavedStateHandleSupport$savedStateHandlesVM$1;->create(Ljava/lang/Class;Landroidx/lifecycle/viewmodel/CreationExtras;)Landroidx/lifecycle/ViewModel; +Landroidx/lifecycle/SavedStateHandlesProvider; +HSPLandroidx/lifecycle/SavedStateHandlesProvider;->(Landroidx/savedstate/SavedStateRegistry;Landroidx/lifecycle/ViewModelStoreOwner;)V +HSPLandroidx/lifecycle/SavedStateHandlesProvider;->getViewModel()Landroidx/lifecycle/SavedStateHandlesVM; +HSPLandroidx/lifecycle/SavedStateHandlesProvider;->performRestore()V +Landroidx/lifecycle/SavedStateHandlesProvider$viewModel$2; +HSPLandroidx/lifecycle/SavedStateHandlesProvider$viewModel$2;->(Landroidx/lifecycle/ViewModelStoreOwner;)V +HSPLandroidx/lifecycle/SavedStateHandlesProvider$viewModel$2;->invoke()Landroidx/lifecycle/SavedStateHandlesVM; +HSPLandroidx/lifecycle/SavedStateHandlesProvider$viewModel$2;->invoke()Ljava/lang/Object; +Landroidx/lifecycle/SavedStateHandlesVM; +HSPLandroidx/lifecycle/SavedStateHandlesVM;->()V +Landroidx/lifecycle/ViewModel; +HSPLandroidx/lifecycle/ViewModel;->()V +Landroidx/lifecycle/ViewModelProvider; +HSPLandroidx/lifecycle/ViewModelProvider;->(Landroidx/lifecycle/ViewModelStore;Landroidx/lifecycle/ViewModelProvider$Factory;)V +HSPLandroidx/lifecycle/ViewModelProvider;->(Landroidx/lifecycle/ViewModelStore;Landroidx/lifecycle/ViewModelProvider$Factory;Landroidx/lifecycle/viewmodel/CreationExtras;)V +HSPLandroidx/lifecycle/ViewModelProvider;->(Landroidx/lifecycle/ViewModelStore;Landroidx/lifecycle/ViewModelProvider$Factory;Landroidx/lifecycle/viewmodel/CreationExtras;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/lifecycle/ViewModelProvider;->(Landroidx/lifecycle/ViewModelStoreOwner;Landroidx/lifecycle/ViewModelProvider$Factory;)V +HSPLandroidx/lifecycle/ViewModelProvider;->get(Ljava/lang/Class;)Landroidx/lifecycle/ViewModel; +HSPLandroidx/lifecycle/ViewModelProvider;->get(Ljava/lang/String;Ljava/lang/Class;)Landroidx/lifecycle/ViewModel; +Landroidx/lifecycle/ViewModelProvider$AndroidViewModelFactory; +HSPLandroidx/lifecycle/ViewModelProvider$AndroidViewModelFactory;->()V +Landroidx/lifecycle/ViewModelProvider$AndroidViewModelFactory$Companion; +HSPLandroidx/lifecycle/ViewModelProvider$AndroidViewModelFactory$Companion;->()V +HSPLandroidx/lifecycle/ViewModelProvider$AndroidViewModelFactory$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/lifecycle/ViewModelProvider$AndroidViewModelFactory$Companion$ApplicationKeyImpl; +HSPLandroidx/lifecycle/ViewModelProvider$AndroidViewModelFactory$Companion$ApplicationKeyImpl;->()V +HSPLandroidx/lifecycle/ViewModelProvider$AndroidViewModelFactory$Companion$ApplicationKeyImpl;->()V +Landroidx/lifecycle/ViewModelProvider$Factory; +HSPLandroidx/lifecycle/ViewModelProvider$Factory;->()V +HSPLandroidx/lifecycle/ViewModelProvider$Factory;->create(Ljava/lang/Class;Landroidx/lifecycle/viewmodel/CreationExtras;)Landroidx/lifecycle/ViewModel; +Landroidx/lifecycle/ViewModelProvider$Factory$Companion; +HSPLandroidx/lifecycle/ViewModelProvider$Factory$Companion;->()V +HSPLandroidx/lifecycle/ViewModelProvider$Factory$Companion;->()V +Landroidx/lifecycle/ViewModelProvider$NewInstanceFactory; +HSPLandroidx/lifecycle/ViewModelProvider$NewInstanceFactory;->()V +Landroidx/lifecycle/ViewModelProvider$NewInstanceFactory$Companion; +HSPLandroidx/lifecycle/ViewModelProvider$NewInstanceFactory$Companion;->()V +HSPLandroidx/lifecycle/ViewModelProvider$NewInstanceFactory$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/lifecycle/ViewModelProvider$NewInstanceFactory$Companion$ViewModelKeyImpl; +HSPLandroidx/lifecycle/ViewModelProvider$NewInstanceFactory$Companion$ViewModelKeyImpl;->()V +HSPLandroidx/lifecycle/ViewModelProvider$NewInstanceFactory$Companion$ViewModelKeyImpl;->()V +Landroidx/lifecycle/ViewModelProviderGetKt; +HSPLandroidx/lifecycle/ViewModelProviderGetKt;->defaultCreationExtras(Landroidx/lifecycle/ViewModelStoreOwner;)Landroidx/lifecycle/viewmodel/CreationExtras; +Landroidx/lifecycle/ViewModelStore; +HSPLandroidx/lifecycle/ViewModelStore;->()V +HSPLandroidx/lifecycle/ViewModelStore;->get(Ljava/lang/String;)Landroidx/lifecycle/ViewModel; +HSPLandroidx/lifecycle/ViewModelStore;->put(Ljava/lang/String;Landroidx/lifecycle/ViewModel;)V +Landroidx/lifecycle/ViewModelStoreOwner; +Landroidx/lifecycle/ViewTreeLifecycleOwner; +HSPLandroidx/lifecycle/ViewTreeLifecycleOwner;->get(Landroid/view/View;)Landroidx/lifecycle/LifecycleOwner; +HSPLandroidx/lifecycle/ViewTreeLifecycleOwner;->set(Landroid/view/View;Landroidx/lifecycle/LifecycleOwner;)V +Landroidx/lifecycle/ViewTreeLifecycleOwner$findViewTreeLifecycleOwner$1; +HSPLandroidx/lifecycle/ViewTreeLifecycleOwner$findViewTreeLifecycleOwner$1;->()V +HSPLandroidx/lifecycle/ViewTreeLifecycleOwner$findViewTreeLifecycleOwner$1;->()V +HSPLandroidx/lifecycle/ViewTreeLifecycleOwner$findViewTreeLifecycleOwner$1;->invoke(Landroid/view/View;)Landroid/view/View; +HSPLandroidx/lifecycle/ViewTreeLifecycleOwner$findViewTreeLifecycleOwner$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/lifecycle/ViewTreeLifecycleOwner$findViewTreeLifecycleOwner$2; +HSPLandroidx/lifecycle/ViewTreeLifecycleOwner$findViewTreeLifecycleOwner$2;->()V +HSPLandroidx/lifecycle/ViewTreeLifecycleOwner$findViewTreeLifecycleOwner$2;->()V +HSPLandroidx/lifecycle/ViewTreeLifecycleOwner$findViewTreeLifecycleOwner$2;->invoke(Landroid/view/View;)Landroidx/lifecycle/LifecycleOwner; +HSPLandroidx/lifecycle/ViewTreeLifecycleOwner$findViewTreeLifecycleOwner$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/lifecycle/ViewTreeViewModelStoreOwner; +HSPLandroidx/lifecycle/ViewTreeViewModelStoreOwner;->get(Landroid/view/View;)Landroidx/lifecycle/ViewModelStoreOwner; +HSPLandroidx/lifecycle/ViewTreeViewModelStoreOwner;->set(Landroid/view/View;Landroidx/lifecycle/ViewModelStoreOwner;)V +Landroidx/lifecycle/ViewTreeViewModelStoreOwner$findViewTreeViewModelStoreOwner$1; +HSPLandroidx/lifecycle/ViewTreeViewModelStoreOwner$findViewTreeViewModelStoreOwner$1;->()V +HSPLandroidx/lifecycle/ViewTreeViewModelStoreOwner$findViewTreeViewModelStoreOwner$1;->()V +HSPLandroidx/lifecycle/ViewTreeViewModelStoreOwner$findViewTreeViewModelStoreOwner$1;->invoke(Landroid/view/View;)Landroid/view/View; +HSPLandroidx/lifecycle/ViewTreeViewModelStoreOwner$findViewTreeViewModelStoreOwner$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/lifecycle/ViewTreeViewModelStoreOwner$findViewTreeViewModelStoreOwner$2; +HSPLandroidx/lifecycle/ViewTreeViewModelStoreOwner$findViewTreeViewModelStoreOwner$2;->()V +HSPLandroidx/lifecycle/ViewTreeViewModelStoreOwner$findViewTreeViewModelStoreOwner$2;->()V +HSPLandroidx/lifecycle/ViewTreeViewModelStoreOwner$findViewTreeViewModelStoreOwner$2;->invoke(Landroid/view/View;)Landroidx/lifecycle/ViewModelStoreOwner; +HSPLandroidx/lifecycle/ViewTreeViewModelStoreOwner$findViewTreeViewModelStoreOwner$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/lifecycle/runtime/R$id; +Landroidx/lifecycle/viewmodel/CreationExtras; +HSPLandroidx/lifecycle/viewmodel/CreationExtras;->()V +HSPLandroidx/lifecycle/viewmodel/CreationExtras;->getMap$lifecycle_viewmodel_release()Ljava/util/Map; +Landroidx/lifecycle/viewmodel/CreationExtras$Empty; +HSPLandroidx/lifecycle/viewmodel/CreationExtras$Empty;->()V +HSPLandroidx/lifecycle/viewmodel/CreationExtras$Empty;->()V +Landroidx/lifecycle/viewmodel/CreationExtras$Key; +Landroidx/lifecycle/viewmodel/MutableCreationExtras; +HSPLandroidx/lifecycle/viewmodel/MutableCreationExtras;->()V +HSPLandroidx/lifecycle/viewmodel/MutableCreationExtras;->(Landroidx/lifecycle/viewmodel/CreationExtras;)V +HSPLandroidx/lifecycle/viewmodel/MutableCreationExtras;->(Landroidx/lifecycle/viewmodel/CreationExtras;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/lifecycle/viewmodel/MutableCreationExtras;->set(Landroidx/lifecycle/viewmodel/CreationExtras$Key;Ljava/lang/Object;)V +Landroidx/lifecycle/viewmodel/R$id; +Landroidx/loader/content/Loader; +PLandroidx/profileinstaller/ProfileInstallReceiver;->()V +PLandroidx/profileinstaller/ProfileInstallReceiver;->onReceive(Landroid/content/Context;Landroid/content/Intent;)V +PLandroidx/profileinstaller/ProfileInstallReceiver;->saveProfile(Landroidx/profileinstaller/ProfileInstaller$DiagnosticsCallback;)V +PLandroidx/profileinstaller/ProfileInstallReceiver$ResultDiagnostics;->(Landroidx/profileinstaller/ProfileInstallReceiver;)V +PLandroidx/profileinstaller/ProfileInstallReceiver$ResultDiagnostics;->onResultReceived(ILjava/lang/Object;)V +PLandroidx/profileinstaller/ProfileInstaller;->()V +PLandroidx/profileinstaller/ProfileInstaller;->hasAlreadyWrittenProfileForThisInstall(Landroid/content/pm/PackageInfo;Ljava/io/File;Landroidx/profileinstaller/ProfileInstaller$DiagnosticsCallback;)Z +PLandroidx/profileinstaller/ProfileInstaller;->writeProfile(Landroid/content/Context;)V +PLandroidx/profileinstaller/ProfileInstaller;->writeProfile(Landroid/content/Context;Ljava/util/concurrent/Executor;Landroidx/profileinstaller/ProfileInstaller$DiagnosticsCallback;)V +PLandroidx/profileinstaller/ProfileInstaller;->writeProfile(Landroid/content/Context;Ljava/util/concurrent/Executor;Landroidx/profileinstaller/ProfileInstaller$DiagnosticsCallback;Z)V +PLandroidx/profileinstaller/ProfileInstaller$1;->()V +PLandroidx/profileinstaller/ProfileInstaller$1;->onResultReceived(ILjava/lang/Object;)V +PLandroidx/profileinstaller/ProfileInstaller$2;->()V +PLandroidx/profileinstaller/ProfileInstaller$2;->onResultReceived(ILjava/lang/Object;)V +Landroidx/profileinstaller/ProfileInstallerInitializer; +HSPLandroidx/profileinstaller/ProfileInstallerInitializer;->()V +HSPLandroidx/profileinstaller/ProfileInstallerInitializer;->create(Landroid/content/Context;)Landroidx/profileinstaller/ProfileInstallerInitializer$Result; +HSPLandroidx/profileinstaller/ProfileInstallerInitializer;->create(Landroid/content/Context;)Ljava/lang/Object; +HSPLandroidx/profileinstaller/ProfileInstallerInitializer;->delayAfterFirstFrame(Landroid/content/Context;)V +HSPLandroidx/profileinstaller/ProfileInstallerInitializer;->dependencies()Ljava/util/List; +HSPLandroidx/profileinstaller/ProfileInstallerInitializer;->installAfterDelay(Landroid/content/Context;)V +HSPLandroidx/profileinstaller/ProfileInstallerInitializer;->lambda$delayAfterFirstFrame$0$androidx-profileinstaller-ProfileInstallerInitializer(Landroid/content/Context;)V +PLandroidx/profileinstaller/ProfileInstallerInitializer;->lambda$installAfterDelay$1(Landroid/content/Context;)V +PLandroidx/profileinstaller/ProfileInstallerInitializer;->lambda$writeInBackground$2(Landroid/content/Context;)V +PLandroidx/profileinstaller/ProfileInstallerInitializer;->writeInBackground(Landroid/content/Context;)V +Landroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda0; +HSPLandroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda0;->(Landroid/content/Context;)V +PLandroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda0;->run()V +Landroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda1; +HSPLandroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda1;->(Landroidx/profileinstaller/ProfileInstallerInitializer;Landroid/content/Context;)V +HSPLandroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda1;->run()V +PLandroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda2;->(Landroid/content/Context;)V +PLandroidx/profileinstaller/ProfileInstallerInitializer$$ExternalSyntheticLambda2;->run()V +Landroidx/profileinstaller/ProfileInstallerInitializer$Choreographer16Impl; +HSPLandroidx/profileinstaller/ProfileInstallerInitializer$Choreographer16Impl;->lambda$postFrameCallback$0(Ljava/lang/Runnable;J)V +HSPLandroidx/profileinstaller/ProfileInstallerInitializer$Choreographer16Impl;->postFrameCallback(Ljava/lang/Runnable;)V +Landroidx/profileinstaller/ProfileInstallerInitializer$Choreographer16Impl$$ExternalSyntheticLambda0; +HSPLandroidx/profileinstaller/ProfileInstallerInitializer$Choreographer16Impl$$ExternalSyntheticLambda0;->(Ljava/lang/Runnable;)V +HSPLandroidx/profileinstaller/ProfileInstallerInitializer$Choreographer16Impl$$ExternalSyntheticLambda0;->doFrame(J)V +Landroidx/profileinstaller/ProfileInstallerInitializer$Handler28Impl; +HSPLandroidx/profileinstaller/ProfileInstallerInitializer$Handler28Impl;->createAsync(Landroid/os/Looper;)Landroid/os/Handler; +Landroidx/profileinstaller/ProfileInstallerInitializer$Result; +HSPLandroidx/profileinstaller/ProfileInstallerInitializer$Result;->()V +PLandroidx/profileinstaller/ProfileVerifier;->()V +PLandroidx/profileinstaller/ProfileVerifier;->getPackageLastUpdateTime(Landroid/content/Context;)J +PLandroidx/profileinstaller/ProfileVerifier;->setCompilationStatus(IZZ)Landroidx/profileinstaller/ProfileVerifier$CompilationStatus; +PLandroidx/profileinstaller/ProfileVerifier;->writeProfileVerification(Landroid/content/Context;Z)Landroidx/profileinstaller/ProfileVerifier$CompilationStatus; +PLandroidx/profileinstaller/ProfileVerifier$Api33Impl;->getPackageInfo(Landroid/content/pm/PackageManager;Landroid/content/Context;)Landroid/content/pm/PackageInfo; +PLandroidx/profileinstaller/ProfileVerifier$Cache;->(IIJJ)V +PLandroidx/profileinstaller/ProfileVerifier$Cache;->equals(Ljava/lang/Object;)Z +PLandroidx/profileinstaller/ProfileVerifier$Cache;->readFromFile(Ljava/io/File;)Landroidx/profileinstaller/ProfileVerifier$Cache; +PLandroidx/profileinstaller/ProfileVerifier$Cache;->writeOnFile(Ljava/io/File;)V +PLandroidx/profileinstaller/ProfileVerifier$CompilationStatus;->(IZZ)V +Landroidx/room/AutoClosingRoomOpenHelper; +Landroidx/room/CoroutinesRoom; +HSPLandroidx/room/CoroutinesRoom;->()V +HSPLandroidx/room/CoroutinesRoom;->createFlow(Landroidx/room/RoomDatabase;Z[Ljava/lang/String;Ljava/util/concurrent/Callable;)Lkotlinx/coroutines/flow/Flow; +HSPLandroidx/room/CoroutinesRoom;->execute(Landroidx/room/RoomDatabase;ZLjava/util/concurrent/Callable;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/room/CoroutinesRoom$Companion; +HSPLandroidx/room/CoroutinesRoom$Companion;->()V +HSPLandroidx/room/CoroutinesRoom$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/room/CoroutinesRoom$Companion;->createFlow(Landroidx/room/RoomDatabase;Z[Ljava/lang/String;Ljava/util/concurrent/Callable;)Lkotlinx/coroutines/flow/Flow; +HSPLandroidx/room/CoroutinesRoom$Companion;->execute(Landroidx/room/RoomDatabase;ZLjava/util/concurrent/Callable;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/room/CoroutinesRoom$Companion$createFlow$1; +HSPLandroidx/room/CoroutinesRoom$Companion$createFlow$1;->(ZLandroidx/room/RoomDatabase;[Ljava/lang/String;Ljava/util/concurrent/Callable;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/room/CoroutinesRoom$Companion$createFlow$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/room/CoroutinesRoom$Companion$createFlow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/room/CoroutinesRoom$Companion$createFlow$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/room/CoroutinesRoom$Companion$createFlow$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/room/CoroutinesRoom$Companion$createFlow$1$1; +HSPLandroidx/room/CoroutinesRoom$Companion$createFlow$1$1;->(ZLandroidx/room/RoomDatabase;Lkotlinx/coroutines/flow/FlowCollector;[Ljava/lang/String;Ljava/util/concurrent/Callable;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/room/CoroutinesRoom$Companion$createFlow$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/room/CoroutinesRoom$Companion$createFlow$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/room/CoroutinesRoom$Companion$createFlow$1$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/room/CoroutinesRoom$Companion$createFlow$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/room/CoroutinesRoom$Companion$createFlow$1$1$1; +HSPLandroidx/room/CoroutinesRoom$Companion$createFlow$1$1$1;->(Landroidx/room/RoomDatabase;Landroidx/room/CoroutinesRoom$Companion$createFlow$1$1$observer$1;Lkotlinx/coroutines/channels/Channel;Ljava/util/concurrent/Callable;Lkotlinx/coroutines/channels/Channel;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/room/CoroutinesRoom$Companion$createFlow$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/room/CoroutinesRoom$Companion$createFlow$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/room/CoroutinesRoom$Companion$createFlow$1$1$observer$1; +HSPLandroidx/room/CoroutinesRoom$Companion$createFlow$1$1$observer$1;->([Ljava/lang/String;Lkotlinx/coroutines/channels/Channel;)V +Landroidx/room/DatabaseConfiguration; +HSPLandroidx/room/DatabaseConfiguration;->(Landroid/content/Context;Ljava/lang/String;Landroidx/sqlite/db/SupportSQLiteOpenHelper$Factory;Landroidx/room/RoomDatabase$MigrationContainer;Ljava/util/List;ZLandroidx/room/RoomDatabase$JournalMode;Ljava/util/concurrent/Executor;Ljava/util/concurrent/Executor;Landroid/content/Intent;ZZLjava/util/Set;Ljava/lang/String;Ljava/io/File;Ljava/util/concurrent/Callable;Landroidx/room/RoomDatabase$PrepackagedDatabaseCallback;Ljava/util/List;Ljava/util/List;)V +Landroidx/room/DelegatingOpenHelper; +Landroidx/room/EntityDeletionOrUpdateAdapter; +HSPLandroidx/room/EntityDeletionOrUpdateAdapter;->(Landroidx/room/RoomDatabase;)V +Landroidx/room/EntityInsertionAdapter; +HSPLandroidx/room/EntityInsertionAdapter;->(Landroidx/room/RoomDatabase;)V +HSPLandroidx/room/EntityInsertionAdapter;->insert(Ljava/lang/Object;)V +Landroidx/room/InvalidationLiveDataContainer; +HSPLandroidx/room/InvalidationLiveDataContainer;->(Landroidx/room/RoomDatabase;)V +Landroidx/room/InvalidationTracker; +HSPLandroidx/room/InvalidationTracker;->()V +HSPLandroidx/room/InvalidationTracker;->(Landroidx/room/RoomDatabase;Ljava/util/Map;Ljava/util/Map;[Ljava/lang/String;)V +HSPLandroidx/room/InvalidationTracker;->access$getAutoCloser$p(Landroidx/room/InvalidationTracker;)Landroidx/room/AutoCloser; +HSPLandroidx/room/InvalidationTracker;->addObserver(Landroidx/room/InvalidationTracker$Observer;)V +HSPLandroidx/room/InvalidationTracker;->ensureInitialization$room_runtime_release()Z +HSPLandroidx/room/InvalidationTracker;->getDatabase$room_runtime_release()Landroidx/room/RoomDatabase; +HSPLandroidx/room/InvalidationTracker;->getPendingRefresh()Ljava/util/concurrent/atomic/AtomicBoolean; +HSPLandroidx/room/InvalidationTracker;->internalInit$room_runtime_release(Landroidx/sqlite/db/SupportSQLiteDatabase;)V +HSPLandroidx/room/InvalidationTracker;->refreshVersionsAsync()V +HSPLandroidx/room/InvalidationTracker;->removeObserver(Landroidx/room/InvalidationTracker$Observer;)V +HSPLandroidx/room/InvalidationTracker;->resolveViews([Ljava/lang/String;)[Ljava/lang/String; +HSPLandroidx/room/InvalidationTracker;->syncTriggers$room_runtime_release()V +HSPLandroidx/room/InvalidationTracker;->syncTriggers$room_runtime_release(Landroidx/sqlite/db/SupportSQLiteDatabase;)V +Landroidx/room/InvalidationTracker$Companion; +HSPLandroidx/room/InvalidationTracker$Companion;->()V +HSPLandroidx/room/InvalidationTracker$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/room/InvalidationTracker$ObservedTableTracker; +HSPLandroidx/room/InvalidationTracker$ObservedTableTracker;->()V +HSPLandroidx/room/InvalidationTracker$ObservedTableTracker;->(I)V +HSPLandroidx/room/InvalidationTracker$ObservedTableTracker;->getTablesToSync()[I +HSPLandroidx/room/InvalidationTracker$ObservedTableTracker;->onAdded([I)Z +HSPLandroidx/room/InvalidationTracker$ObservedTableTracker;->onRemoved([I)Z +Landroidx/room/InvalidationTracker$ObservedTableTracker$Companion; +HSPLandroidx/room/InvalidationTracker$ObservedTableTracker$Companion;->()V +HSPLandroidx/room/InvalidationTracker$ObservedTableTracker$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/room/InvalidationTracker$Observer; +HSPLandroidx/room/InvalidationTracker$Observer;->([Ljava/lang/String;)V +HSPLandroidx/room/InvalidationTracker$Observer;->getTables$room_runtime_release()[Ljava/lang/String; +Landroidx/room/InvalidationTracker$ObserverWrapper; +HSPLandroidx/room/InvalidationTracker$ObserverWrapper;->(Landroidx/room/InvalidationTracker$Observer;[I[Ljava/lang/String;)V +HSPLandroidx/room/InvalidationTracker$ObserverWrapper;->getTableIds$room_runtime_release()[I +Landroidx/room/InvalidationTracker$refreshRunnable$1; +HSPLandroidx/room/InvalidationTracker$refreshRunnable$1;->(Landroidx/room/InvalidationTracker;)V +HSPLandroidx/room/InvalidationTracker$refreshRunnable$1;->checkUpdatedTable()Ljava/util/Set; +HSPLandroidx/room/InvalidationTracker$refreshRunnable$1;->run()V +Landroidx/room/Room; +HSPLandroidx/room/Room;->()V +HSPLandroidx/room/Room;->()V +HSPLandroidx/room/Room;->databaseBuilder(Landroid/content/Context;Ljava/lang/Class;Ljava/lang/String;)Landroidx/room/RoomDatabase$Builder; +HSPLandroidx/room/Room;->getGeneratedImplementation(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Object; +Landroidx/room/RoomDatabase; +HSPLandroidx/room/RoomDatabase;->()V +HSPLandroidx/room/RoomDatabase;->()V +HSPLandroidx/room/RoomDatabase;->assertNotMainThread()V +HSPLandroidx/room/RoomDatabase;->assertNotSuspendingTransaction()V +HSPLandroidx/room/RoomDatabase;->beginTransaction()V +HSPLandroidx/room/RoomDatabase;->compileStatement(Ljava/lang/String;)Landroidx/sqlite/db/SupportSQLiteStatement; +HSPLandroidx/room/RoomDatabase;->endTransaction()V +HSPLandroidx/room/RoomDatabase;->getCloseLock$room_runtime_release()Ljava/util/concurrent/locks/Lock; +HSPLandroidx/room/RoomDatabase;->getInvalidationTracker()Landroidx/room/InvalidationTracker; +HSPLandroidx/room/RoomDatabase;->getOpenHelper()Landroidx/sqlite/db/SupportSQLiteOpenHelper; +HSPLandroidx/room/RoomDatabase;->getQueryExecutor()Ljava/util/concurrent/Executor; +HSPLandroidx/room/RoomDatabase;->getSuspendingTransactionId()Ljava/lang/ThreadLocal; +HSPLandroidx/room/RoomDatabase;->getTransactionExecutor()Ljava/util/concurrent/Executor; +HSPLandroidx/room/RoomDatabase;->inTransaction()Z +HSPLandroidx/room/RoomDatabase;->init(Landroidx/room/DatabaseConfiguration;)V +HSPLandroidx/room/RoomDatabase;->internalBeginTransaction()V +HSPLandroidx/room/RoomDatabase;->internalEndTransaction()V +HSPLandroidx/room/RoomDatabase;->internalInitInvalidationTracker(Landroidx/sqlite/db/SupportSQLiteDatabase;)V +HSPLandroidx/room/RoomDatabase;->isMainThread$room_runtime_release()Z +HSPLandroidx/room/RoomDatabase;->isOpenInternal()Z +HSPLandroidx/room/RoomDatabase;->query$default(Landroidx/room/RoomDatabase;Landroidx/sqlite/db/SupportSQLiteQuery;Landroid/os/CancellationSignal;ILjava/lang/Object;)Landroid/database/Cursor; +HSPLandroidx/room/RoomDatabase;->query(Landroidx/sqlite/db/SupportSQLiteQuery;Landroid/os/CancellationSignal;)Landroid/database/Cursor; +HSPLandroidx/room/RoomDatabase;->runInTransaction(Ljava/util/concurrent/Callable;)Ljava/lang/Object; +HSPLandroidx/room/RoomDatabase;->setTransactionSuccessful()V +HSPLandroidx/room/RoomDatabase;->unwrapOpenHelper(Ljava/lang/Class;Landroidx/sqlite/db/SupportSQLiteOpenHelper;)Ljava/lang/Object; +Landroidx/room/RoomDatabase$Builder; +HSPLandroidx/room/RoomDatabase$Builder;->(Landroid/content/Context;Ljava/lang/Class;Ljava/lang/String;)V +HSPLandroidx/room/RoomDatabase$Builder;->addCallback(Landroidx/room/RoomDatabase$Callback;)Landroidx/room/RoomDatabase$Builder; +HSPLandroidx/room/RoomDatabase$Builder;->addMigrations([Landroidx/room/migration/Migration;)Landroidx/room/RoomDatabase$Builder; +HSPLandroidx/room/RoomDatabase$Builder;->addTypeConverter(Ljava/lang/Object;)Landroidx/room/RoomDatabase$Builder; +HSPLandroidx/room/RoomDatabase$Builder;->build()Landroidx/room/RoomDatabase; +HSPLandroidx/room/RoomDatabase$Builder;->fallbackToDestructiveMigration()Landroidx/room/RoomDatabase$Builder; +HSPLandroidx/room/RoomDatabase$Builder;->openHelperFactory(Landroidx/sqlite/db/SupportSQLiteOpenHelper$Factory;)Landroidx/room/RoomDatabase$Builder; +HSPLandroidx/room/RoomDatabase$Builder;->setQueryExecutor(Ljava/util/concurrent/Executor;)Landroidx/room/RoomDatabase$Builder; +Landroidx/room/RoomDatabase$Callback; +HSPLandroidx/room/RoomDatabase$Callback;->()V +HSPLandroidx/room/RoomDatabase$Callback;->onOpen(Landroidx/sqlite/db/SupportSQLiteDatabase;)V +Landroidx/room/RoomDatabase$Companion; +HSPLandroidx/room/RoomDatabase$Companion;->()V +HSPLandroidx/room/RoomDatabase$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/room/RoomDatabase$JournalMode; +HSPLandroidx/room/RoomDatabase$JournalMode;->$values()[Landroidx/room/RoomDatabase$JournalMode; +HSPLandroidx/room/RoomDatabase$JournalMode;->()V +HSPLandroidx/room/RoomDatabase$JournalMode;->(Ljava/lang/String;I)V +HSPLandroidx/room/RoomDatabase$JournalMode;->isLowRamDevice(Landroid/app/ActivityManager;)Z +HSPLandroidx/room/RoomDatabase$JournalMode;->resolve$room_runtime_release(Landroid/content/Context;)Landroidx/room/RoomDatabase$JournalMode; +Landroidx/room/RoomDatabase$MigrationContainer; +HSPLandroidx/room/RoomDatabase$MigrationContainer;->()V +HSPLandroidx/room/RoomDatabase$MigrationContainer;->addMigration(Landroidx/room/migration/Migration;)V +HSPLandroidx/room/RoomDatabase$MigrationContainer;->addMigrations([Landroidx/room/migration/Migration;)V +HSPLandroidx/room/RoomDatabase$MigrationContainer;->contains(II)Z +HSPLandroidx/room/RoomDatabase$MigrationContainer;->getMigrations()Ljava/util/Map; +Landroidx/room/RoomDatabase$PrepackagedDatabaseCallback; +Landroidx/room/RoomDatabaseKt; +HSPLandroidx/room/RoomDatabaseKt;->access$createTransactionContext(Landroidx/room/RoomDatabase;Lkotlin/coroutines/ContinuationInterceptor;)Lkotlin/coroutines/CoroutineContext; +HSPLandroidx/room/RoomDatabaseKt;->createTransactionContext(Landroidx/room/RoomDatabase;Lkotlin/coroutines/ContinuationInterceptor;)Lkotlin/coroutines/CoroutineContext; +HSPLandroidx/room/RoomDatabaseKt;->startTransactionCoroutine(Landroidx/room/RoomDatabase;Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/room/RoomDatabaseKt;->withTransaction(Landroidx/room/RoomDatabase;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/room/RoomDatabaseKt$startTransactionCoroutine$2$1; +HSPLandroidx/room/RoomDatabaseKt$startTransactionCoroutine$2$1;->(Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/CancellableContinuation;Landroidx/room/RoomDatabase;Lkotlin/jvm/functions/Function2;)V +HSPLandroidx/room/RoomDatabaseKt$startTransactionCoroutine$2$1;->run()V +Landroidx/room/RoomDatabaseKt$startTransactionCoroutine$2$1$1; +HSPLandroidx/room/RoomDatabaseKt$startTransactionCoroutine$2$1$1;->(Landroidx/room/RoomDatabase;Lkotlinx/coroutines/CancellableContinuation;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/room/RoomDatabaseKt$startTransactionCoroutine$2$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/room/RoomDatabaseKt$startTransactionCoroutine$2$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/room/RoomDatabaseKt$withTransaction$transactionBlock$1; +HSPLandroidx/room/RoomDatabaseKt$withTransaction$transactionBlock$1;->(Landroidx/room/RoomDatabase;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/room/RoomDatabaseKt$withTransaction$transactionBlock$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/room/RoomDatabaseKt$withTransaction$transactionBlock$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/room/RoomDatabaseKt$withTransaction$transactionBlock$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/room/RoomDatabaseKt$withTransaction$transactionBlock$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/room/RoomMasterTable; +HSPLandroidx/room/RoomMasterTable;->()V +HSPLandroidx/room/RoomMasterTable;->()V +HSPLandroidx/room/RoomMasterTable;->createInsertQuery(Ljava/lang/String;)Ljava/lang/String; +Landroidx/room/RoomOpenHelper; +HSPLandroidx/room/RoomOpenHelper;->()V +HSPLandroidx/room/RoomOpenHelper;->(Landroidx/room/DatabaseConfiguration;Landroidx/room/RoomOpenHelper$Delegate;Ljava/lang/String;Ljava/lang/String;)V +HSPLandroidx/room/RoomOpenHelper;->checkIdentity(Landroidx/sqlite/db/SupportSQLiteDatabase;)V +HSPLandroidx/room/RoomOpenHelper;->createMasterTableIfNotExists(Landroidx/sqlite/db/SupportSQLiteDatabase;)V +HSPLandroidx/room/RoomOpenHelper;->onConfigure(Landroidx/sqlite/db/SupportSQLiteDatabase;)V +HSPLandroidx/room/RoomOpenHelper;->onCreate(Landroidx/sqlite/db/SupportSQLiteDatabase;)V +HSPLandroidx/room/RoomOpenHelper;->onOpen(Landroidx/sqlite/db/SupportSQLiteDatabase;)V +HSPLandroidx/room/RoomOpenHelper;->updateIdentity(Landroidx/sqlite/db/SupportSQLiteDatabase;)V +Landroidx/room/RoomOpenHelper$Companion; +HSPLandroidx/room/RoomOpenHelper$Companion;->()V +HSPLandroidx/room/RoomOpenHelper$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/room/RoomOpenHelper$Companion;->hasEmptySchema$room_runtime_release(Landroidx/sqlite/db/SupportSQLiteDatabase;)Z +HSPLandroidx/room/RoomOpenHelper$Companion;->hasRoomMasterTable$room_runtime_release(Landroidx/sqlite/db/SupportSQLiteDatabase;)Z +Landroidx/room/RoomOpenHelper$Delegate; +HSPLandroidx/room/RoomOpenHelper$Delegate;->(I)V +Landroidx/room/RoomSQLiteQuery; +HSPLandroidx/room/RoomSQLiteQuery;->()V +HSPLandroidx/room/RoomSQLiteQuery;->(I)V +HSPLandroidx/room/RoomSQLiteQuery;->(ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/room/RoomSQLiteQuery;->acquire(Ljava/lang/String;I)Landroidx/room/RoomSQLiteQuery; +HSPLandroidx/room/RoomSQLiteQuery;->bindLong(IJ)V +HSPLandroidx/room/RoomSQLiteQuery;->bindString(ILjava/lang/String;)V +HSPLandroidx/room/RoomSQLiteQuery;->bindTo(Landroidx/sqlite/db/SupportSQLiteProgram;)V +HSPLandroidx/room/RoomSQLiteQuery;->getArgCount()I +HSPLandroidx/room/RoomSQLiteQuery;->getSql()Ljava/lang/String; +HSPLandroidx/room/RoomSQLiteQuery;->init(Ljava/lang/String;I)V +HSPLandroidx/room/RoomSQLiteQuery;->release()V +Landroidx/room/RoomSQLiteQuery$Companion; +HSPLandroidx/room/RoomSQLiteQuery$Companion;->()V +HSPLandroidx/room/RoomSQLiteQuery$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/room/RoomSQLiteQuery$Companion;->acquire(Ljava/lang/String;I)Landroidx/room/RoomSQLiteQuery; +HSPLandroidx/room/RoomSQLiteQuery$Companion;->prunePoolLocked$room_runtime_release()V +Landroidx/room/SQLiteCopyOpenHelper; +Landroidx/room/SharedSQLiteStatement; +HSPLandroidx/room/SharedSQLiteStatement;->(Landroidx/room/RoomDatabase;)V +HSPLandroidx/room/SharedSQLiteStatement;->access$createNewStatement(Landroidx/room/SharedSQLiteStatement;)Landroidx/sqlite/db/SupportSQLiteStatement; +HSPLandroidx/room/SharedSQLiteStatement;->acquire()Landroidx/sqlite/db/SupportSQLiteStatement; +HSPLandroidx/room/SharedSQLiteStatement;->assertNotMainThread()V +HSPLandroidx/room/SharedSQLiteStatement;->createNewStatement()Landroidx/sqlite/db/SupportSQLiteStatement; +HSPLandroidx/room/SharedSQLiteStatement;->getStmt()Landroidx/sqlite/db/SupportSQLiteStatement; +HSPLandroidx/room/SharedSQLiteStatement;->getStmt(Z)Landroidx/sqlite/db/SupportSQLiteStatement; +HSPLandroidx/room/SharedSQLiteStatement;->release(Landroidx/sqlite/db/SupportSQLiteStatement;)V +Landroidx/room/SharedSQLiteStatement$stmt$2; +HSPLandroidx/room/SharedSQLiteStatement$stmt$2;->(Landroidx/room/SharedSQLiteStatement;)V +HSPLandroidx/room/SharedSQLiteStatement$stmt$2;->invoke()Landroidx/sqlite/db/SupportSQLiteStatement; +HSPLandroidx/room/SharedSQLiteStatement$stmt$2;->invoke()Ljava/lang/Object; +Landroidx/room/TransactionElement; +HSPLandroidx/room/TransactionElement;->()V +HSPLandroidx/room/TransactionElement;->(Lkotlin/coroutines/ContinuationInterceptor;)V +HSPLandroidx/room/TransactionElement;->acquire()V +HSPLandroidx/room/TransactionElement;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; +HSPLandroidx/room/TransactionElement;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; +HSPLandroidx/room/TransactionElement;->getKey()Lkotlin/coroutines/CoroutineContext$Key; +HSPLandroidx/room/TransactionElement;->getTransactionDispatcher$room_ktx_release()Lkotlin/coroutines/ContinuationInterceptor; +HSPLandroidx/room/TransactionElement;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext; +PLandroidx/room/TransactionElement;->release()V +Landroidx/room/TransactionElement$Key; +HSPLandroidx/room/TransactionElement$Key;->()V +HSPLandroidx/room/TransactionElement$Key;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/room/TransactionExecutor; +HSPLandroidx/room/TransactionExecutor;->$r8$lambda$AympDHYBb78s7_N_9gRsXF0sHiw(Ljava/lang/Runnable;Landroidx/room/TransactionExecutor;)V +HSPLandroidx/room/TransactionExecutor;->(Ljava/util/concurrent/Executor;)V +HSPLandroidx/room/TransactionExecutor;->execute$lambda$1$lambda$0(Ljava/lang/Runnable;Landroidx/room/TransactionExecutor;)V +HSPLandroidx/room/TransactionExecutor;->execute(Ljava/lang/Runnable;)V +HSPLandroidx/room/TransactionExecutor;->scheduleNext()V +Landroidx/room/TransactionExecutor$$ExternalSyntheticLambda0; +HSPLandroidx/room/TransactionExecutor$$ExternalSyntheticLambda0;->(Ljava/lang/Runnable;Landroidx/room/TransactionExecutor;)V +HSPLandroidx/room/TransactionExecutor$$ExternalSyntheticLambda0;->run()V +Landroidx/room/migration/AutoMigrationSpec; +Landroidx/room/migration/Migration; +HSPLandroidx/room/migration/Migration;->(II)V +Landroidx/room/util/CursorUtil; +HSPLandroidx/room/util/CursorUtil;->getColumnIndex(Landroid/database/Cursor;Ljava/lang/String;)I +HSPLandroidx/room/util/CursorUtil;->getColumnIndexOrThrow(Landroid/database/Cursor;Ljava/lang/String;)I +Landroidx/room/util/DBUtil; +HSPLandroidx/room/util/DBUtil;->query(Landroidx/room/RoomDatabase;Landroidx/sqlite/db/SupportSQLiteQuery;ZLandroid/os/CancellationSignal;)Landroid/database/Cursor; +Landroidx/savedstate/R$id; +Landroidx/savedstate/Recreator; +HSPLandroidx/savedstate/Recreator;->()V +HSPLandroidx/savedstate/Recreator;->(Landroidx/savedstate/SavedStateRegistryOwner;)V +HSPLandroidx/savedstate/Recreator;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V +Landroidx/savedstate/Recreator$Companion; +HSPLandroidx/savedstate/Recreator$Companion;->()V +HSPLandroidx/savedstate/Recreator$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/savedstate/SavedStateRegistry; +HSPLandroidx/savedstate/SavedStateRegistry;->$r8$lambda$AUDDdpkzZrJMhBj0r-_9pI-j6hA(Landroidx/savedstate/SavedStateRegistry;Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V +HSPLandroidx/savedstate/SavedStateRegistry;->()V +HSPLandroidx/savedstate/SavedStateRegistry;->()V +HSPLandroidx/savedstate/SavedStateRegistry;->consumeRestoredStateForKey(Ljava/lang/String;)Landroid/os/Bundle; +HSPLandroidx/savedstate/SavedStateRegistry;->getSavedStateProvider(Ljava/lang/String;)Landroidx/savedstate/SavedStateRegistry$SavedStateProvider; +HSPLandroidx/savedstate/SavedStateRegistry;->performAttach$lambda$4(Landroidx/savedstate/SavedStateRegistry;Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V +HSPLandroidx/savedstate/SavedStateRegistry;->performAttach$savedstate_release(Landroidx/lifecycle/Lifecycle;)V +HSPLandroidx/savedstate/SavedStateRegistry;->performRestore$savedstate_release(Landroid/os/Bundle;)V +HSPLandroidx/savedstate/SavedStateRegistry;->registerSavedStateProvider(Ljava/lang/String;Landroidx/savedstate/SavedStateRegistry$SavedStateProvider;)V +Landroidx/savedstate/SavedStateRegistry$$ExternalSyntheticLambda0; +HSPLandroidx/savedstate/SavedStateRegistry$$ExternalSyntheticLambda0;->(Landroidx/savedstate/SavedStateRegistry;)V +HSPLandroidx/savedstate/SavedStateRegistry$$ExternalSyntheticLambda0;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V +Landroidx/savedstate/SavedStateRegistry$Companion; +HSPLandroidx/savedstate/SavedStateRegistry$Companion;->()V +HSPLandroidx/savedstate/SavedStateRegistry$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/savedstate/SavedStateRegistry$SavedStateProvider; +Landroidx/savedstate/SavedStateRegistryController; +HSPLandroidx/savedstate/SavedStateRegistryController;->()V +HSPLandroidx/savedstate/SavedStateRegistryController;->(Landroidx/savedstate/SavedStateRegistryOwner;)V +HSPLandroidx/savedstate/SavedStateRegistryController;->(Landroidx/savedstate/SavedStateRegistryOwner;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/savedstate/SavedStateRegistryController;->create(Landroidx/savedstate/SavedStateRegistryOwner;)Landroidx/savedstate/SavedStateRegistryController; +HSPLandroidx/savedstate/SavedStateRegistryController;->getSavedStateRegistry()Landroidx/savedstate/SavedStateRegistry; +HSPLandroidx/savedstate/SavedStateRegistryController;->performAttach()V +HSPLandroidx/savedstate/SavedStateRegistryController;->performRestore(Landroid/os/Bundle;)V +Landroidx/savedstate/SavedStateRegistryController$Companion; +HSPLandroidx/savedstate/SavedStateRegistryController$Companion;->()V +HSPLandroidx/savedstate/SavedStateRegistryController$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/savedstate/SavedStateRegistryController$Companion;->create(Landroidx/savedstate/SavedStateRegistryOwner;)Landroidx/savedstate/SavedStateRegistryController; +Landroidx/savedstate/SavedStateRegistryOwner; +Landroidx/savedstate/ViewTreeSavedStateRegistryOwner; +HSPLandroidx/savedstate/ViewTreeSavedStateRegistryOwner;->get(Landroid/view/View;)Landroidx/savedstate/SavedStateRegistryOwner; +HSPLandroidx/savedstate/ViewTreeSavedStateRegistryOwner;->set(Landroid/view/View;Landroidx/savedstate/SavedStateRegistryOwner;)V +Landroidx/savedstate/ViewTreeSavedStateRegistryOwner$findViewTreeSavedStateRegistryOwner$1; +HSPLandroidx/savedstate/ViewTreeSavedStateRegistryOwner$findViewTreeSavedStateRegistryOwner$1;->()V +HSPLandroidx/savedstate/ViewTreeSavedStateRegistryOwner$findViewTreeSavedStateRegistryOwner$1;->()V +HSPLandroidx/savedstate/ViewTreeSavedStateRegistryOwner$findViewTreeSavedStateRegistryOwner$1;->invoke(Landroid/view/View;)Landroid/view/View; +HSPLandroidx/savedstate/ViewTreeSavedStateRegistryOwner$findViewTreeSavedStateRegistryOwner$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/savedstate/ViewTreeSavedStateRegistryOwner$findViewTreeSavedStateRegistryOwner$2; +HSPLandroidx/savedstate/ViewTreeSavedStateRegistryOwner$findViewTreeSavedStateRegistryOwner$2;->()V +HSPLandroidx/savedstate/ViewTreeSavedStateRegistryOwner$findViewTreeSavedStateRegistryOwner$2;->()V +HSPLandroidx/savedstate/ViewTreeSavedStateRegistryOwner$findViewTreeSavedStateRegistryOwner$2;->invoke(Landroid/view/View;)Landroidx/savedstate/SavedStateRegistryOwner; +HSPLandroidx/savedstate/ViewTreeSavedStateRegistryOwner$findViewTreeSavedStateRegistryOwner$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/security/crypto/EncryptedSharedPreferences; +HSPLandroidx/security/crypto/EncryptedSharedPreferences;->(Ljava/lang/String;Ljava/lang/String;Landroid/content/SharedPreferences;Lcom/google/crypto/tink/Aead;Lcom/google/crypto/tink/DeterministicAead;)V +HSPLandroidx/security/crypto/EncryptedSharedPreferences;->create(Landroid/content/Context;Ljava/lang/String;Landroidx/security/crypto/MasterKey;Landroidx/security/crypto/EncryptedSharedPreferences$PrefKeyEncryptionScheme;Landroidx/security/crypto/EncryptedSharedPreferences$PrefValueEncryptionScheme;)Landroid/content/SharedPreferences; +HSPLandroidx/security/crypto/EncryptedSharedPreferences;->create(Ljava/lang/String;Ljava/lang/String;Landroid/content/Context;Landroidx/security/crypto/EncryptedSharedPreferences$PrefKeyEncryptionScheme;Landroidx/security/crypto/EncryptedSharedPreferences$PrefValueEncryptionScheme;)Landroid/content/SharedPreferences; +HSPLandroidx/security/crypto/EncryptedSharedPreferences;->edit()Landroid/content/SharedPreferences$Editor; +HSPLandroidx/security/crypto/EncryptedSharedPreferences;->encryptKey(Ljava/lang/String;)Ljava/lang/String; +HSPLandroidx/security/crypto/EncryptedSharedPreferences;->encryptKeyValuePair(Ljava/lang/String;[B)Landroid/util/Pair; +HSPLandroidx/security/crypto/EncryptedSharedPreferences;->getBoolean(Ljava/lang/String;Z)Z +HSPLandroidx/security/crypto/EncryptedSharedPreferences;->getDecryptedObject(Ljava/lang/String;)Ljava/lang/Object; +HSPLandroidx/security/crypto/EncryptedSharedPreferences;->getString(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; +HSPLandroidx/security/crypto/EncryptedSharedPreferences;->isReservedKey(Ljava/lang/String;)Z +HSPLandroidx/security/crypto/EncryptedSharedPreferences;->registerOnSharedPreferenceChangeListener(Landroid/content/SharedPreferences$OnSharedPreferenceChangeListener;)V +HSPLandroidx/security/crypto/EncryptedSharedPreferences;->unregisterOnSharedPreferenceChangeListener(Landroid/content/SharedPreferences$OnSharedPreferenceChangeListener;)V +Landroidx/security/crypto/EncryptedSharedPreferences$1; +HSPLandroidx/security/crypto/EncryptedSharedPreferences$1;->()V +Landroidx/security/crypto/EncryptedSharedPreferences$Editor; +HSPLandroidx/security/crypto/EncryptedSharedPreferences$Editor;->(Landroidx/security/crypto/EncryptedSharedPreferences;Landroid/content/SharedPreferences$Editor;)V +HSPLandroidx/security/crypto/EncryptedSharedPreferences$Editor;->clearKeysIfNeeded()V +HSPLandroidx/security/crypto/EncryptedSharedPreferences$Editor;->commit()Z +HSPLandroidx/security/crypto/EncryptedSharedPreferences$Editor;->notifyListeners()V +HSPLandroidx/security/crypto/EncryptedSharedPreferences$Editor;->putBoolean(Ljava/lang/String;Z)Landroid/content/SharedPreferences$Editor; +HSPLandroidx/security/crypto/EncryptedSharedPreferences$Editor;->putEncryptedObject(Ljava/lang/String;[B)V +HSPLandroidx/security/crypto/EncryptedSharedPreferences$Editor;->putLong(Ljava/lang/String;J)Landroid/content/SharedPreferences$Editor; +HSPLandroidx/security/crypto/EncryptedSharedPreferences$Editor;->putString(Ljava/lang/String;Ljava/lang/String;)Landroid/content/SharedPreferences$Editor; +Landroidx/security/crypto/EncryptedSharedPreferences$EncryptedType; +HSPLandroidx/security/crypto/EncryptedSharedPreferences$EncryptedType;->$values()[Landroidx/security/crypto/EncryptedSharedPreferences$EncryptedType; +HSPLandroidx/security/crypto/EncryptedSharedPreferences$EncryptedType;->()V +HSPLandroidx/security/crypto/EncryptedSharedPreferences$EncryptedType;->(Ljava/lang/String;II)V +HSPLandroidx/security/crypto/EncryptedSharedPreferences$EncryptedType;->fromId(I)Landroidx/security/crypto/EncryptedSharedPreferences$EncryptedType; +HSPLandroidx/security/crypto/EncryptedSharedPreferences$EncryptedType;->getId()I +HSPLandroidx/security/crypto/EncryptedSharedPreferences$EncryptedType;->values()[Landroidx/security/crypto/EncryptedSharedPreferences$EncryptedType; +Landroidx/security/crypto/EncryptedSharedPreferences$PrefKeyEncryptionScheme; +HSPLandroidx/security/crypto/EncryptedSharedPreferences$PrefKeyEncryptionScheme;->$values()[Landroidx/security/crypto/EncryptedSharedPreferences$PrefKeyEncryptionScheme; +HSPLandroidx/security/crypto/EncryptedSharedPreferences$PrefKeyEncryptionScheme;->()V +HSPLandroidx/security/crypto/EncryptedSharedPreferences$PrefKeyEncryptionScheme;->(Ljava/lang/String;ILjava/lang/String;)V +HSPLandroidx/security/crypto/EncryptedSharedPreferences$PrefKeyEncryptionScheme;->getKeyTemplate()Lcom/google/crypto/tink/KeyTemplate; +Landroidx/security/crypto/EncryptedSharedPreferences$PrefValueEncryptionScheme; +HSPLandroidx/security/crypto/EncryptedSharedPreferences$PrefValueEncryptionScheme;->$values()[Landroidx/security/crypto/EncryptedSharedPreferences$PrefValueEncryptionScheme; +HSPLandroidx/security/crypto/EncryptedSharedPreferences$PrefValueEncryptionScheme;->()V +HSPLandroidx/security/crypto/EncryptedSharedPreferences$PrefValueEncryptionScheme;->(Ljava/lang/String;ILjava/lang/String;)V +HSPLandroidx/security/crypto/EncryptedSharedPreferences$PrefValueEncryptionScheme;->getKeyTemplate()Lcom/google/crypto/tink/KeyTemplate; +Landroidx/security/crypto/MasterKey; +HSPLandroidx/security/crypto/MasterKey;->(Ljava/lang/String;Ljava/lang/Object;)V +HSPLandroidx/security/crypto/MasterKey;->getDefaultAuthenticationValidityDurationSeconds()I +HSPLandroidx/security/crypto/MasterKey;->getKeyAlias()Ljava/lang/String; +Landroidx/security/crypto/MasterKey$1; +HSPLandroidx/security/crypto/MasterKey$1;->()V +Landroidx/security/crypto/MasterKey$Builder; +HSPLandroidx/security/crypto/MasterKey$Builder;->(Landroid/content/Context;Ljava/lang/String;)V +HSPLandroidx/security/crypto/MasterKey$Builder;->build()Landroidx/security/crypto/MasterKey; +HSPLandroidx/security/crypto/MasterKey$Builder;->setKeyScheme(Landroidx/security/crypto/MasterKey$KeyScheme;)Landroidx/security/crypto/MasterKey$Builder; +HSPLandroidx/security/crypto/MasterKey$Builder;->setRequestStrongBoxBacked(Z)Landroidx/security/crypto/MasterKey$Builder; +HSPLandroidx/security/crypto/MasterKey$Builder;->setUserAuthenticationRequired(Z)Landroidx/security/crypto/MasterKey$Builder; +HSPLandroidx/security/crypto/MasterKey$Builder;->setUserAuthenticationRequired(ZI)Landroidx/security/crypto/MasterKey$Builder; +Landroidx/security/crypto/MasterKey$Builder$Api23Impl; +HSPLandroidx/security/crypto/MasterKey$Builder$Api23Impl;->build(Landroidx/security/crypto/MasterKey$Builder;)Landroidx/security/crypto/MasterKey; +Landroidx/security/crypto/MasterKey$KeyScheme; +HSPLandroidx/security/crypto/MasterKey$KeyScheme;->$values()[Landroidx/security/crypto/MasterKey$KeyScheme; +HSPLandroidx/security/crypto/MasterKey$KeyScheme;->()V +HSPLandroidx/security/crypto/MasterKey$KeyScheme;->(Ljava/lang/String;I)V +HSPLandroidx/security/crypto/MasterKey$KeyScheme;->values()[Landroidx/security/crypto/MasterKey$KeyScheme; +Landroidx/security/crypto/MasterKeys; +HSPLandroidx/security/crypto/MasterKeys;->()V +HSPLandroidx/security/crypto/MasterKeys;->createAES256GCMKeyGenParameterSpec(Ljava/lang/String;)Landroid/security/keystore/KeyGenParameterSpec; +HSPLandroidx/security/crypto/MasterKeys;->generateKey(Landroid/security/keystore/KeyGenParameterSpec;)V +HSPLandroidx/security/crypto/MasterKeys;->getOrCreate(Landroid/security/keystore/KeyGenParameterSpec;)Ljava/lang/String; +HSPLandroidx/security/crypto/MasterKeys;->keyExists(Ljava/lang/String;)Z +HSPLandroidx/security/crypto/MasterKeys;->validate(Landroid/security/keystore/KeyGenParameterSpec;)V +Landroidx/sqlite/db/SimpleSQLiteQuery; +HSPLandroidx/sqlite/db/SimpleSQLiteQuery;->()V +HSPLandroidx/sqlite/db/SimpleSQLiteQuery;->(Ljava/lang/String;)V +HSPLandroidx/sqlite/db/SimpleSQLiteQuery;->(Ljava/lang/String;[Ljava/lang/Object;)V +HSPLandroidx/sqlite/db/SimpleSQLiteQuery;->bindTo(Landroidx/sqlite/db/SupportSQLiteProgram;)V +HSPLandroidx/sqlite/db/SimpleSQLiteQuery;->getSql()Ljava/lang/String; +Landroidx/sqlite/db/SimpleSQLiteQuery$Companion; +HSPLandroidx/sqlite/db/SimpleSQLiteQuery$Companion;->()V +HSPLandroidx/sqlite/db/SimpleSQLiteQuery$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/sqlite/db/SimpleSQLiteQuery$Companion;->bind(Landroidx/sqlite/db/SupportSQLiteProgram;[Ljava/lang/Object;)V +Landroidx/sqlite/db/SupportSQLiteCompat$Api16Impl; +HSPLandroidx/sqlite/db/SupportSQLiteCompat$Api16Impl;->()V +HSPLandroidx/sqlite/db/SupportSQLiteCompat$Api16Impl;->()V +HSPLandroidx/sqlite/db/SupportSQLiteCompat$Api16Impl;->isWriteAheadLoggingEnabled(Landroid/database/sqlite/SQLiteDatabase;)Z +HSPLandroidx/sqlite/db/SupportSQLiteCompat$Api16Impl;->setWriteAheadLoggingEnabled(Landroid/database/sqlite/SQLiteOpenHelper;Z)V +Landroidx/sqlite/db/SupportSQLiteCompat$Api19Impl; +HSPLandroidx/sqlite/db/SupportSQLiteCompat$Api19Impl;->()V +HSPLandroidx/sqlite/db/SupportSQLiteCompat$Api19Impl;->()V +HSPLandroidx/sqlite/db/SupportSQLiteCompat$Api19Impl;->isLowRamDevice(Landroid/app/ActivityManager;)Z +Landroidx/sqlite/db/SupportSQLiteCompat$Api21Impl; +HSPLandroidx/sqlite/db/SupportSQLiteCompat$Api21Impl;->()V +HSPLandroidx/sqlite/db/SupportSQLiteCompat$Api21Impl;->()V +HSPLandroidx/sqlite/db/SupportSQLiteCompat$Api21Impl;->getNoBackupFilesDir(Landroid/content/Context;)Ljava/io/File; +Landroidx/sqlite/db/SupportSQLiteDatabase; +Landroidx/sqlite/db/SupportSQLiteOpenHelper; +Landroidx/sqlite/db/SupportSQLiteOpenHelper$Callback; +HSPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;->()V +HSPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;->(I)V +HSPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;->onConfigure(Landroidx/sqlite/db/SupportSQLiteDatabase;)V +HSPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;->onOpen(Landroidx/sqlite/db/SupportSQLiteDatabase;)V +Landroidx/sqlite/db/SupportSQLiteOpenHelper$Callback$Companion; +HSPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Callback$Companion;->()V +HSPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Callback$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration; +HSPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration;->()V +HSPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration;->(Landroid/content/Context;Ljava/lang/String;Landroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;ZZ)V +HSPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration;->builder(Landroid/content/Context;)Landroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration$Builder; +Landroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration$Builder; +HSPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration$Builder;->(Landroid/content/Context;)V +HSPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration$Builder;->allowDataLossOnRecovery(Z)Landroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration$Builder; +HSPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration$Builder;->build()Landroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration; +HSPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration$Builder;->callback(Landroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;)Landroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration$Builder; +HSPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration$Builder;->name(Ljava/lang/String;)Landroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration$Builder; +HSPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration$Builder;->noBackupDirectory(Z)Landroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration$Builder; +Landroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration$Companion; +HSPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration$Companion;->()V +HSPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration$Companion;->builder(Landroid/content/Context;)Landroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration$Builder; +Landroidx/sqlite/db/SupportSQLiteOpenHelper$Factory; +Landroidx/sqlite/db/SupportSQLiteProgram; +Landroidx/sqlite/db/SupportSQLiteQuery; +Landroidx/sqlite/db/SupportSQLiteStatement; +Landroidx/sqlite/db/framework/FrameworkSQLiteDatabase; +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->$r8$lambda$xWs7VTYEzeAWyi_2-SJixQ1HyKQ(Lkotlin/jvm/functions/Function4;Landroid/database/sqlite/SQLiteDatabase;Landroid/database/sqlite/SQLiteCursorDriver;Ljava/lang/String;Landroid/database/sqlite/SQLiteQuery;)Landroid/database/Cursor; +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->()V +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->(Landroid/database/sqlite/SQLiteDatabase;)V +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->beginTransaction()V +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->beginTransactionNonExclusive()V +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->compileStatement(Ljava/lang/String;)Landroidx/sqlite/db/SupportSQLiteStatement; +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->endTransaction()V +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->execSQL(Ljava/lang/String;)V +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->inTransaction()Z +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->isDelegate(Landroid/database/sqlite/SQLiteDatabase;)Z +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->isOpen()Z +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->isWriteAheadLoggingEnabled()Z +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->query$lambda$0(Lkotlin/jvm/functions/Function4;Landroid/database/sqlite/SQLiteDatabase;Landroid/database/sqlite/SQLiteCursorDriver;Ljava/lang/String;Landroid/database/sqlite/SQLiteQuery;)Landroid/database/Cursor; +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->query(Landroidx/sqlite/db/SupportSQLiteQuery;)Landroid/database/Cursor; +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->query(Ljava/lang/String;)Landroid/database/Cursor; +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase;->setTransactionSuccessful()V +Landroidx/sqlite/db/framework/FrameworkSQLiteDatabase$$ExternalSyntheticLambda1; +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase$$ExternalSyntheticLambda1;->(Lkotlin/jvm/functions/Function4;)V +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase$$ExternalSyntheticLambda1;->newCursor(Landroid/database/sqlite/SQLiteDatabase;Landroid/database/sqlite/SQLiteCursorDriver;Ljava/lang/String;Landroid/database/sqlite/SQLiteQuery;)Landroid/database/Cursor; +Landroidx/sqlite/db/framework/FrameworkSQLiteDatabase$Companion; +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase$Companion;->()V +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/sqlite/db/framework/FrameworkSQLiteDatabase$query$cursorFactory$1; +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase$query$cursorFactory$1;->(Landroidx/sqlite/db/SupportSQLiteQuery;)V +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase$query$cursorFactory$1;->invoke(Landroid/database/sqlite/SQLiteDatabase;Landroid/database/sqlite/SQLiteCursorDriver;Ljava/lang/String;Landroid/database/sqlite/SQLiteQuery;)Landroid/database/sqlite/SQLiteCursor; +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteDatabase$query$cursorFactory$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper; +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;->()V +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;->(Landroid/content/Context;Ljava/lang/String;Landroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;ZZ)V +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;->access$getAllowDataLossOnRecovery$p(Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;)Z +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;->access$getCallback$p(Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;)Landroidx/sqlite/db/SupportSQLiteOpenHelper$Callback; +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;->access$getContext$p(Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;)Landroid/content/Context; +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;->access$getName$p(Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;)Ljava/lang/String; +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;->access$getUseNoBackupDirectory$p(Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;)Z +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;->access$getWriteAheadLoggingEnabled$p(Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;)Z +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;->getDelegate()Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper; +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;->getWritableDatabase()Landroidx/sqlite/db/SupportSQLiteDatabase; +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;->setWriteAheadLoggingEnabled(Z)V +Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$Companion; +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$Companion;->()V +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$DBRefHolder; +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$DBRefHolder;->(Landroidx/sqlite/db/framework/FrameworkSQLiteDatabase;)V +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$DBRefHolder;->getDb()Landroidx/sqlite/db/framework/FrameworkSQLiteDatabase; +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$DBRefHolder;->setDb(Landroidx/sqlite/db/framework/FrameworkSQLiteDatabase;)V +Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper; +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper;->()V +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper;->(Landroid/content/Context;Ljava/lang/String;Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$DBRefHolder;Landroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;Z)V +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper;->getSupportDatabase(Z)Landroidx/sqlite/db/SupportSQLiteDatabase; +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper;->getWrappedDb(Landroid/database/sqlite/SQLiteDatabase;)Landroidx/sqlite/db/framework/FrameworkSQLiteDatabase; +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper;->getWritableOrReadableDatabase(Z)Landroid/database/sqlite/SQLiteDatabase; +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper;->innerGetDatabase(Z)Landroid/database/sqlite/SQLiteDatabase; +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper;->onConfigure(Landroid/database/sqlite/SQLiteDatabase;)V +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper;->onOpen(Landroid/database/sqlite/SQLiteDatabase;)V +Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper$$ExternalSyntheticLambda0; +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper$$ExternalSyntheticLambda0;->(Landroidx/sqlite/db/SupportSQLiteOpenHelper$Callback;Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$DBRefHolder;)V +Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper$CallbackException; +Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper$Companion; +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper$Companion;->()V +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper$Companion;->getWrappedDb(Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$DBRefHolder;Landroid/database/sqlite/SQLiteDatabase;)Landroidx/sqlite/db/framework/FrameworkSQLiteDatabase; +Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$lazyDelegate$1; +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$lazyDelegate$1;->(Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper;)V +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$lazyDelegate$1;->invoke()Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$OpenHelper; +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelper$lazyDelegate$1;->invoke()Ljava/lang/Object; +Landroidx/sqlite/db/framework/FrameworkSQLiteOpenHelperFactory; +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelperFactory;->()V +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteOpenHelperFactory;->create(Landroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration;)Landroidx/sqlite/db/SupportSQLiteOpenHelper; +Landroidx/sqlite/db/framework/FrameworkSQLiteProgram; +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteProgram;->(Landroid/database/sqlite/SQLiteProgram;)V +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteProgram;->bindBlob(I[B)V +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteProgram;->bindLong(IJ)V +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteProgram;->bindString(ILjava/lang/String;)V +Landroidx/sqlite/db/framework/FrameworkSQLiteStatement; +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteStatement;->(Landroid/database/sqlite/SQLiteStatement;)V +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteStatement;->executeInsert()J +HSPLandroidx/sqlite/db/framework/FrameworkSQLiteStatement;->executeUpdateDelete()I +Landroidx/sqlite/util/ProcessLock; +HSPLandroidx/sqlite/util/ProcessLock;->()V +HSPLandroidx/sqlite/util/ProcessLock;->(Ljava/lang/String;Ljava/io/File;Z)V +HSPLandroidx/sqlite/util/ProcessLock;->access$getThreadLocksMap$cp()Ljava/util/Map; +HSPLandroidx/sqlite/util/ProcessLock;->lock(Z)V +HSPLandroidx/sqlite/util/ProcessLock;->unlock()V +Landroidx/sqlite/util/ProcessLock$Companion; +HSPLandroidx/sqlite/util/ProcessLock$Companion;->()V +HSPLandroidx/sqlite/util/ProcessLock$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/sqlite/util/ProcessLock$Companion;->access$getThreadLock(Landroidx/sqlite/util/ProcessLock$Companion;Ljava/lang/String;)Ljava/util/concurrent/locks/Lock; +HSPLandroidx/sqlite/util/ProcessLock$Companion;->getThreadLock(Ljava/lang/String;)Ljava/util/concurrent/locks/Lock; +Landroidx/startup/AppInitializer; +HSPLandroidx/startup/AppInitializer;->()V +HSPLandroidx/startup/AppInitializer;->(Landroid/content/Context;)V +HSPLandroidx/startup/AppInitializer;->discoverAndInitialize()V +HSPLandroidx/startup/AppInitializer;->discoverAndInitialize(Landroid/os/Bundle;)V +HSPLandroidx/startup/AppInitializer;->doInitialize(Ljava/lang/Class;)Ljava/lang/Object; +HSPLandroidx/startup/AppInitializer;->doInitialize(Ljava/lang/Class;Ljava/util/Set;)Ljava/lang/Object; +HSPLandroidx/startup/AppInitializer;->getInstance(Landroid/content/Context;)Landroidx/startup/AppInitializer; +HSPLandroidx/startup/AppInitializer;->initializeComponent(Ljava/lang/Class;)Ljava/lang/Object; +HSPLandroidx/startup/AppInitializer;->isEagerlyInitialized(Ljava/lang/Class;)Z +Landroidx/startup/InitializationProvider; +HSPLandroidx/startup/InitializationProvider;->()V +HSPLandroidx/startup/InitializationProvider;->onCreate()Z +Landroidx/startup/Initializer; +Landroidx/startup/R$string; +Landroidx/tracing/Trace; +HSPLandroidx/tracing/Trace;->beginSection(Ljava/lang/String;)V +HSPLandroidx/tracing/Trace;->endSection()V +HSPLandroidx/tracing/Trace;->isEnabled()Z +Landroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0; +HSPLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m$1()Ljava/lang/String; +HSPLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m$1()V +HSPLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m()Ljava/lang/String; +HSPLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m()V +HSPLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m()Z +HSPLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m(Landroid/app/ActivityManager;Ljava/lang/String;II)Ljava/util/List; +HSPLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m(Landroid/app/ApplicationExitInfo;)I +HSPLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m(Landroid/app/ApplicationExitInfo;)J +HSPLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m(Landroid/app/job/JobInfo$Builder;Z)Landroid/app/job/JobInfo$Builder; +HSPLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m(Landroid/content/pm/PackageInfo;)J +HSPLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m(Landroid/os/StrictMode$VmPolicy$Builder;)Landroid/os/StrictMode$VmPolicy$Builder; +HSPLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m(Ljava/lang/Object;)Landroid/app/ApplicationExitInfo; +HSPLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m(Ljava/lang/String;J)Landroid/database/CursorWindow; +HSPLandroidx/tracing/Trace$$ExternalSyntheticApiModelOutline0;->m(Ljava/lang/String;Ljava/lang/ClassLoader;)Ldalvik/system/DelegateLastClassLoader; +Landroidx/tracing/TraceApi18Impl; +HSPLandroidx/tracing/TraceApi18Impl;->beginSection(Ljava/lang/String;)V +HSPLandroidx/tracing/TraceApi18Impl;->endSection()V +Landroidx/vectordrawable/graphics/drawable/VectorDrawableCommon; +Landroidx/vectordrawable/graphics/drawable/VectorDrawableCompat; +Landroidx/work/BackoffPolicy; +HSPLandroidx/work/BackoffPolicy;->$values()[Landroidx/work/BackoffPolicy; +HSPLandroidx/work/BackoffPolicy;->()V +HSPLandroidx/work/BackoffPolicy;->(Ljava/lang/String;I)V +HSPLandroidx/work/BackoffPolicy;->values()[Landroidx/work/BackoffPolicy; +Landroidx/work/Clock; +Landroidx/work/Configuration; +HSPLandroidx/work/Configuration;->()V +HSPLandroidx/work/Configuration;->(Landroidx/work/Configuration$Builder;)V +HSPLandroidx/work/Configuration;->getClock()Landroidx/work/Clock; +HSPLandroidx/work/Configuration;->getDefaultProcessName()Ljava/lang/String; +HSPLandroidx/work/Configuration;->getExecutor()Ljava/util/concurrent/Executor; +HSPLandroidx/work/Configuration;->getInputMergerFactory()Landroidx/work/InputMergerFactory; +HSPLandroidx/work/Configuration;->getMaxJobSchedulerId()I +HSPLandroidx/work/Configuration;->getMaxSchedulerLimit()I +HSPLandroidx/work/Configuration;->getMinJobSchedulerId()I +HSPLandroidx/work/Configuration;->getMinimumLoggingLevel()I +HSPLandroidx/work/Configuration;->getRunnableScheduler()Landroidx/work/RunnableScheduler; +HSPLandroidx/work/Configuration;->getTaskExecutor()Ljava/util/concurrent/Executor; +HSPLandroidx/work/Configuration;->getWorkerFactory()Landroidx/work/WorkerFactory; +Landroidx/work/Configuration$Builder; +HSPLandroidx/work/Configuration$Builder;->()V +HSPLandroidx/work/Configuration$Builder;->build()Landroidx/work/Configuration; +HSPLandroidx/work/Configuration$Builder;->getClock$work_runtime_release()Landroidx/work/Clock; +HSPLandroidx/work/Configuration$Builder;->getContentUriTriggerWorkersLimit$work_runtime_release()I +HSPLandroidx/work/Configuration$Builder;->getDefaultProcessName$work_runtime_release()Ljava/lang/String; +HSPLandroidx/work/Configuration$Builder;->getExecutor$work_runtime_release()Ljava/util/concurrent/Executor; +HSPLandroidx/work/Configuration$Builder;->getInitializationExceptionHandler$work_runtime_release()Landroidx/core/util/Consumer; +HSPLandroidx/work/Configuration$Builder;->getInputMergerFactory$work_runtime_release()Landroidx/work/InputMergerFactory; +HSPLandroidx/work/Configuration$Builder;->getLoggingLevel$work_runtime_release()I +HSPLandroidx/work/Configuration$Builder;->getMaxJobSchedulerId$work_runtime_release()I +HSPLandroidx/work/Configuration$Builder;->getMaxSchedulerLimit$work_runtime_release()I +HSPLandroidx/work/Configuration$Builder;->getMinJobSchedulerId$work_runtime_release()I +HSPLandroidx/work/Configuration$Builder;->getRunnableScheduler$work_runtime_release()Landroidx/work/RunnableScheduler; +HSPLandroidx/work/Configuration$Builder;->getSchedulingExceptionHandler$work_runtime_release()Landroidx/core/util/Consumer; +HSPLandroidx/work/Configuration$Builder;->getTaskExecutor$work_runtime_release()Ljava/util/concurrent/Executor; +HSPLandroidx/work/Configuration$Builder;->getWorkerFactory$work_runtime_release()Landroidx/work/WorkerFactory; +Landroidx/work/Configuration$Companion; +HSPLandroidx/work/Configuration$Companion;->()V +HSPLandroidx/work/Configuration$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/work/ConfigurationKt; +HSPLandroidx/work/ConfigurationKt;->()V +HSPLandroidx/work/ConfigurationKt;->access$createDefaultExecutor(Z)Ljava/util/concurrent/Executor; +HSPLandroidx/work/ConfigurationKt;->createDefaultExecutor(Z)Ljava/util/concurrent/Executor; +HSPLandroidx/work/ConfigurationKt;->getDEFAULT_CONTENT_URI_TRIGGERS_WORKERS_LIMIT()I +Landroidx/work/ConfigurationKt$createDefaultExecutor$factory$1; +HSPLandroidx/work/ConfigurationKt$createDefaultExecutor$factory$1;->(Z)V +HSPLandroidx/work/ConfigurationKt$createDefaultExecutor$factory$1;->newThread(Ljava/lang/Runnable;)Ljava/lang/Thread; +Landroidx/work/Constraints; +HSPLandroidx/work/Constraints;->()V +HSPLandroidx/work/Constraints;->(Landroidx/work/Constraints;)V +HSPLandroidx/work/Constraints;->(Landroidx/work/NetworkType;ZZZ)V +HSPLandroidx/work/Constraints;->(Landroidx/work/NetworkType;ZZZILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/work/Constraints;->(Landroidx/work/NetworkType;ZZZZ)V +HSPLandroidx/work/Constraints;->(Landroidx/work/NetworkType;ZZZZJJLjava/util/Set;)V +HSPLandroidx/work/Constraints;->(Landroidx/work/NetworkType;ZZZZJJLjava/util/Set;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/work/Constraints;->equals(Ljava/lang/Object;)Z +HSPLandroidx/work/Constraints;->getContentTriggerMaxDelayMillis()J +HSPLandroidx/work/Constraints;->getContentTriggerUpdateDelayMillis()J +HSPLandroidx/work/Constraints;->getContentUriTriggers()Ljava/util/Set; +HSPLandroidx/work/Constraints;->getRequiredNetworkType()Landroidx/work/NetworkType; +HSPLandroidx/work/Constraints;->hasContentUriTriggers()Z +HSPLandroidx/work/Constraints;->hashCode()I +HSPLandroidx/work/Constraints;->requiresBatteryNotLow()Z +HSPLandroidx/work/Constraints;->requiresCharging()Z +HSPLandroidx/work/Constraints;->requiresDeviceIdle()Z +HSPLandroidx/work/Constraints;->requiresStorageNotLow()Z +Landroidx/work/Constraints$Builder; +HSPLandroidx/work/Constraints$Builder;->()V +HSPLandroidx/work/Constraints$Builder;->build()Landroidx/work/Constraints; +HSPLandroidx/work/Constraints$Builder;->setRequiredNetworkType(Landroidx/work/NetworkType;)Landroidx/work/Constraints$Builder; +Landroidx/work/Constraints$Companion; +HSPLandroidx/work/Constraints$Companion;->()V +HSPLandroidx/work/Constraints$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/work/CoroutineWorker; +HSPLandroidx/work/CoroutineWorker;->$r8$lambda$vS4ut6uACXh9vB8D1LtSlAShhGE(Landroidx/work/CoroutineWorker;)V +HSPLandroidx/work/CoroutineWorker;->(Landroid/content/Context;Landroidx/work/WorkerParameters;)V +HSPLandroidx/work/CoroutineWorker;->_init_$lambda$0(Landroidx/work/CoroutineWorker;)V +HSPLandroidx/work/CoroutineWorker;->getCoroutineContext()Lkotlinx/coroutines/CoroutineDispatcher; +PLandroidx/work/CoroutineWorker;->getFuture$work_runtime_release()Landroidx/work/impl/utils/futures/SettableFuture; +HSPLandroidx/work/CoroutineWorker;->startWork()Lcom/google/common/util/concurrent/ListenableFuture; +Landroidx/work/CoroutineWorker$$ExternalSyntheticLambda0; +HSPLandroidx/work/CoroutineWorker$$ExternalSyntheticLambda0;->(Landroidx/work/CoroutineWorker;)V +HSPLandroidx/work/CoroutineWorker$$ExternalSyntheticLambda0;->run()V +Landroidx/work/CoroutineWorker$startWork$1; +HSPLandroidx/work/CoroutineWorker$startWork$1;->(Landroidx/work/CoroutineWorker;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/work/CoroutineWorker$startWork$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/work/CoroutineWorker$startWork$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/work/Data; +HSPLandroidx/work/Data;->()V +HSPLandroidx/work/Data;->(Landroidx/work/Data;)V +HSPLandroidx/work/Data;->(Ljava/util/Map;)V +HSPLandroidx/work/Data;->fromByteArray([B)Landroidx/work/Data; +HSPLandroidx/work/Data;->getKeyValueMap()Ljava/util/Map; +HSPLandroidx/work/Data;->getStringArray(Ljava/lang/String;)[Ljava/lang/String; +HSPLandroidx/work/Data;->hashCode()I +HSPLandroidx/work/Data;->size()I +HSPLandroidx/work/Data;->toByteArrayInternal(Landroidx/work/Data;)[B +HSPLandroidx/work/Data;->toString()Ljava/lang/String; +Landroidx/work/Data$Builder; +HSPLandroidx/work/Data$Builder;->()V +HSPLandroidx/work/Data$Builder;->build()Landroidx/work/Data; +HSPLandroidx/work/Data$Builder;->put(Ljava/lang/String;Ljava/lang/Object;)Landroidx/work/Data$Builder; +HSPLandroidx/work/Data$Builder;->putAll(Ljava/util/Map;)Landroidx/work/Data$Builder; +HSPLandroidx/work/Data$Builder;->putStringArray(Ljava/lang/String;[Ljava/lang/String;)Landroidx/work/Data$Builder; +Landroidx/work/ExistingPeriodicWorkPolicy; +HSPLandroidx/work/ExistingPeriodicWorkPolicy;->$values()[Landroidx/work/ExistingPeriodicWorkPolicy; +HSPLandroidx/work/ExistingPeriodicWorkPolicy;->()V +HSPLandroidx/work/ExistingPeriodicWorkPolicy;->(Ljava/lang/String;I)V +Landroidx/work/ExistingWorkPolicy; +HSPLandroidx/work/ExistingWorkPolicy;->$values()[Landroidx/work/ExistingWorkPolicy; +HSPLandroidx/work/ExistingWorkPolicy;->()V +HSPLandroidx/work/ExistingWorkPolicy;->(Ljava/lang/String;I)V +Landroidx/work/ForegroundUpdater; +Landroidx/work/InputMerger; +HSPLandroidx/work/InputMerger;->()V +Landroidx/work/InputMergerFactory; +HSPLandroidx/work/InputMergerFactory;->()V +HSPLandroidx/work/InputMergerFactory;->createInputMergerWithDefaultFallback(Ljava/lang/String;)Landroidx/work/InputMerger; +Landroidx/work/InputMergerKt; +HSPLandroidx/work/InputMergerKt;->()V +HSPLandroidx/work/InputMergerKt;->fromClassName(Ljava/lang/String;)Landroidx/work/InputMerger; +Landroidx/work/ListenableWorker; +HSPLandroidx/work/ListenableWorker;->(Landroid/content/Context;Landroidx/work/WorkerParameters;)V +HSPLandroidx/work/ListenableWorker;->getApplicationContext()Landroid/content/Context; +HSPLandroidx/work/ListenableWorker;->getInputData()Landroidx/work/Data; +HSPLandroidx/work/ListenableWorker;->getTaskExecutor()Landroidx/work/impl/utils/taskexecutor/TaskExecutor; +HSPLandroidx/work/ListenableWorker;->isUsed()Z +HSPLandroidx/work/ListenableWorker;->setUsed()V +Landroidx/work/ListenableWorker$Result; +HSPLandroidx/work/ListenableWorker$Result;->()V +HSPLandroidx/work/ListenableWorker$Result;->failure()Landroidx/work/ListenableWorker$Result; +PLandroidx/work/ListenableWorker$Result;->success()Landroidx/work/ListenableWorker$Result; +Landroidx/work/ListenableWorker$Result$Failure; +HSPLandroidx/work/ListenableWorker$Result$Failure;->()V +HSPLandroidx/work/ListenableWorker$Result$Failure;->(Landroidx/work/Data;)V +Landroidx/work/ListenableWorker$Result$Success; +PLandroidx/work/ListenableWorker$Result$Success;->()V +PLandroidx/work/ListenableWorker$Result$Success;->(Landroidx/work/Data;)V +HSPLandroidx/work/ListenableWorker$Result$Success;->getOutputData()Landroidx/work/Data; +HSPLandroidx/work/ListenableWorker$Result$Success;->toString()Ljava/lang/String; +Landroidx/work/Logger; +HSPLandroidx/work/Logger;->()V +HSPLandroidx/work/Logger;->(I)V +HSPLandroidx/work/Logger;->get()Landroidx/work/Logger; +HSPLandroidx/work/Logger;->setLogger(Landroidx/work/Logger;)V +HSPLandroidx/work/Logger;->tagWithPrefix(Ljava/lang/String;)Ljava/lang/String; +Landroidx/work/Logger$LogcatLogger; +HSPLandroidx/work/Logger$LogcatLogger;->(I)V +HSPLandroidx/work/Logger$LogcatLogger;->debug(Ljava/lang/String;Ljava/lang/String;)V +HSPLandroidx/work/Logger$LogcatLogger;->info(Ljava/lang/String;Ljava/lang/String;)V +Landroidx/work/NetworkType; +HSPLandroidx/work/NetworkType;->$values()[Landroidx/work/NetworkType; +HSPLandroidx/work/NetworkType;->()V +HSPLandroidx/work/NetworkType;->(Ljava/lang/String;I)V +HSPLandroidx/work/NetworkType;->values()[Landroidx/work/NetworkType; +Landroidx/work/NoOpInputMergerFactory; +HSPLandroidx/work/NoOpInputMergerFactory;->()V +HSPLandroidx/work/NoOpInputMergerFactory;->()V +HSPLandroidx/work/NoOpInputMergerFactory;->createInputMerger(Ljava/lang/String;)Landroidx/work/InputMerger; +HSPLandroidx/work/NoOpInputMergerFactory;->createInputMerger(Ljava/lang/String;)Ljava/lang/Void; +Landroidx/work/OneTimeWorkRequest; +HSPLandroidx/work/OneTimeWorkRequest;->()V +HSPLandroidx/work/OneTimeWorkRequest;->(Landroidx/work/OneTimeWorkRequest$Builder;)V +Landroidx/work/OneTimeWorkRequest$Builder; +HSPLandroidx/work/OneTimeWorkRequest$Builder;->(Ljava/lang/Class;)V +HSPLandroidx/work/OneTimeWorkRequest$Builder;->buildInternal$work_runtime_release()Landroidx/work/OneTimeWorkRequest; +HSPLandroidx/work/OneTimeWorkRequest$Builder;->buildInternal$work_runtime_release()Landroidx/work/WorkRequest; +HSPLandroidx/work/OneTimeWorkRequest$Builder;->getThisObject$work_runtime_release()Landroidx/work/OneTimeWorkRequest$Builder; +HSPLandroidx/work/OneTimeWorkRequest$Builder;->getThisObject$work_runtime_release()Landroidx/work/WorkRequest$Builder; +Landroidx/work/OneTimeWorkRequest$Companion; +HSPLandroidx/work/OneTimeWorkRequest$Companion;->()V +HSPLandroidx/work/OneTimeWorkRequest$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/work/Operation; +HSPLandroidx/work/Operation;->()V +Landroidx/work/Operation$State; +HSPLandroidx/work/Operation$State;->()V +Landroidx/work/Operation$State$FAILURE; +Landroidx/work/Operation$State$IN_PROGRESS; +HSPLandroidx/work/Operation$State$IN_PROGRESS;->()V +HSPLandroidx/work/Operation$State$IN_PROGRESS;->(Landroidx/work/Operation$1;)V +Landroidx/work/Operation$State$SUCCESS; +HSPLandroidx/work/Operation$State$SUCCESS;->()V +HSPLandroidx/work/Operation$State$SUCCESS;->(Landroidx/work/Operation$1;)V +Landroidx/work/OutOfQuotaPolicy; +HSPLandroidx/work/OutOfQuotaPolicy;->$values()[Landroidx/work/OutOfQuotaPolicy; +HSPLandroidx/work/OutOfQuotaPolicy;->()V +HSPLandroidx/work/OutOfQuotaPolicy;->(Ljava/lang/String;I)V +HSPLandroidx/work/OutOfQuotaPolicy;->values()[Landroidx/work/OutOfQuotaPolicy; +Landroidx/work/OverwritingInputMerger; +HSPLandroidx/work/OverwritingInputMerger;->()V +HSPLandroidx/work/OverwritingInputMerger;->merge(Ljava/util/List;)Landroidx/work/Data; +Landroidx/work/PeriodicWorkRequest; +HSPLandroidx/work/PeriodicWorkRequest;->()V +HSPLandroidx/work/PeriodicWorkRequest;->(Landroidx/work/PeriodicWorkRequest$Builder;)V +Landroidx/work/PeriodicWorkRequest$Builder; +HSPLandroidx/work/PeriodicWorkRequest$Builder;->(Ljava/lang/Class;JLjava/util/concurrent/TimeUnit;JLjava/util/concurrent/TimeUnit;)V +HSPLandroidx/work/PeriodicWorkRequest$Builder;->buildInternal$work_runtime_release()Landroidx/work/PeriodicWorkRequest; +HSPLandroidx/work/PeriodicWorkRequest$Builder;->buildInternal$work_runtime_release()Landroidx/work/WorkRequest; +HSPLandroidx/work/PeriodicWorkRequest$Builder;->getThisObject$work_runtime_release()Landroidx/work/PeriodicWorkRequest$Builder; +HSPLandroidx/work/PeriodicWorkRequest$Builder;->getThisObject$work_runtime_release()Landroidx/work/WorkRequest$Builder; +Landroidx/work/PeriodicWorkRequest$Companion; +HSPLandroidx/work/PeriodicWorkRequest$Companion;->()V +HSPLandroidx/work/PeriodicWorkRequest$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/work/ProgressUpdater; +Landroidx/work/R$bool; +Landroidx/work/RunnableScheduler; +Landroidx/work/SystemClock; +HSPLandroidx/work/SystemClock;->()V +HSPLandroidx/work/SystemClock;->currentTimeMillis()J +Landroidx/work/WorkContinuation; +HSPLandroidx/work/WorkContinuation;->()V +Landroidx/work/WorkInfo$State; +HSPLandroidx/work/WorkInfo$State;->$values()[Landroidx/work/WorkInfo$State; +HSPLandroidx/work/WorkInfo$State;->()V +HSPLandroidx/work/WorkInfo$State;->(Ljava/lang/String;I)V +HSPLandroidx/work/WorkInfo$State;->values()[Landroidx/work/WorkInfo$State; +Landroidx/work/WorkManager; +HSPLandroidx/work/WorkManager;->()V +HSPLandroidx/work/WorkManager;->enqueueUniqueWork(Ljava/lang/String;Landroidx/work/ExistingWorkPolicy;Landroidx/work/OneTimeWorkRequest;)Landroidx/work/Operation; +HSPLandroidx/work/WorkManager;->getInstance(Landroid/content/Context;)Landroidx/work/WorkManager; +HSPLandroidx/work/WorkManager;->initialize(Landroid/content/Context;Landroidx/work/Configuration;)V +Landroidx/work/WorkManagerInitializer; +HSPLandroidx/work/WorkManagerInitializer;->()V +HSPLandroidx/work/WorkManagerInitializer;->()V +HSPLandroidx/work/WorkManagerInitializer;->create(Landroid/content/Context;)Landroidx/work/WorkManager; +HSPLandroidx/work/WorkManagerInitializer;->create(Landroid/content/Context;)Ljava/lang/Object; +HSPLandroidx/work/WorkManagerInitializer;->dependencies()Ljava/util/List; +Landroidx/work/WorkRequest; +HSPLandroidx/work/WorkRequest;->()V +HSPLandroidx/work/WorkRequest;->(Ljava/util/UUID;Landroidx/work/impl/model/WorkSpec;Ljava/util/Set;)V +HSPLandroidx/work/WorkRequest;->getId()Ljava/util/UUID; +HSPLandroidx/work/WorkRequest;->getStringId()Ljava/lang/String; +HSPLandroidx/work/WorkRequest;->getTags()Ljava/util/Set; +HSPLandroidx/work/WorkRequest;->getWorkSpec()Landroidx/work/impl/model/WorkSpec; +Landroidx/work/WorkRequest$Builder; +HSPLandroidx/work/WorkRequest$Builder;->(Ljava/lang/Class;)V +HSPLandroidx/work/WorkRequest$Builder;->build()Landroidx/work/WorkRequest; +HSPLandroidx/work/WorkRequest$Builder;->getBackoffCriteriaSet$work_runtime_release()Z +HSPLandroidx/work/WorkRequest$Builder;->getId$work_runtime_release()Ljava/util/UUID; +HSPLandroidx/work/WorkRequest$Builder;->getTags$work_runtime_release()Ljava/util/Set; +HSPLandroidx/work/WorkRequest$Builder;->getWorkSpec$work_runtime_release()Landroidx/work/impl/model/WorkSpec; +HSPLandroidx/work/WorkRequest$Builder;->setConstraints(Landroidx/work/Constraints;)Landroidx/work/WorkRequest$Builder; +HSPLandroidx/work/WorkRequest$Builder;->setId(Ljava/util/UUID;)Landroidx/work/WorkRequest$Builder; +HSPLandroidx/work/WorkRequest$Builder;->setInputData(Landroidx/work/Data;)Landroidx/work/WorkRequest$Builder; +Landroidx/work/WorkRequest$Companion; +HSPLandroidx/work/WorkRequest$Companion;->()V +HSPLandroidx/work/WorkRequest$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/work/WorkerFactory; +HSPLandroidx/work/WorkerFactory;->()V +HSPLandroidx/work/WorkerFactory;->()V +HSPLandroidx/work/WorkerFactory;->createWorkerWithDefaultFallback(Landroid/content/Context;Ljava/lang/String;Landroidx/work/WorkerParameters;)Landroidx/work/ListenableWorker; +HSPLandroidx/work/WorkerFactory;->getDefaultWorkerFactory()Landroidx/work/WorkerFactory; +Landroidx/work/WorkerFactory$1; +HSPLandroidx/work/WorkerFactory$1;->()V +HSPLandroidx/work/WorkerFactory$1;->createWorker(Landroid/content/Context;Ljava/lang/String;Landroidx/work/WorkerParameters;)Landroidx/work/ListenableWorker; +Landroidx/work/WorkerParameters; +HSPLandroidx/work/WorkerParameters;->(Ljava/util/UUID;Landroidx/work/Data;Ljava/util/Collection;Landroidx/work/WorkerParameters$RuntimeExtras;IILjava/util/concurrent/Executor;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;Landroidx/work/WorkerFactory;Landroidx/work/ProgressUpdater;Landroidx/work/ForegroundUpdater;)V +HSPLandroidx/work/WorkerParameters;->getForegroundUpdater()Landroidx/work/ForegroundUpdater; +HSPLandroidx/work/WorkerParameters;->getInputData()Landroidx/work/Data; +HSPLandroidx/work/WorkerParameters;->getTaskExecutor()Landroidx/work/impl/utils/taskexecutor/TaskExecutor; +Landroidx/work/WorkerParameters$RuntimeExtras; +HSPLandroidx/work/WorkerParameters$RuntimeExtras;->()V +Landroidx/work/impl/AutoMigration_14_15; +HSPLandroidx/work/impl/AutoMigration_14_15;->()V +Landroidx/work/impl/AutoMigration_19_20; +HSPLandroidx/work/impl/AutoMigration_19_20;->()V +Landroidx/work/impl/CleanupCallback; +HSPLandroidx/work/impl/CleanupCallback;->(Landroidx/work/Clock;)V +HSPLandroidx/work/impl/CleanupCallback;->getPruneDate()J +HSPLandroidx/work/impl/CleanupCallback;->getPruneSQL()Ljava/lang/String; +HSPLandroidx/work/impl/CleanupCallback;->onOpen(Landroidx/sqlite/db/SupportSQLiteDatabase;)V +Landroidx/work/impl/DefaultRunnableScheduler; +HSPLandroidx/work/impl/DefaultRunnableScheduler;->()V +HSPLandroidx/work/impl/DefaultRunnableScheduler;->cancel(Ljava/lang/Runnable;)V +HSPLandroidx/work/impl/DefaultRunnableScheduler;->scheduleWithDelay(JLjava/lang/Runnable;)V +Landroidx/work/impl/ExecutionListener; +Landroidx/work/impl/Migration_11_12; +HSPLandroidx/work/impl/Migration_11_12;->()V +HSPLandroidx/work/impl/Migration_11_12;->()V +Landroidx/work/impl/Migration_12_13; +HSPLandroidx/work/impl/Migration_12_13;->()V +HSPLandroidx/work/impl/Migration_12_13;->()V +Landroidx/work/impl/Migration_15_16; +HSPLandroidx/work/impl/Migration_15_16;->()V +HSPLandroidx/work/impl/Migration_15_16;->()V +Landroidx/work/impl/Migration_16_17; +HSPLandroidx/work/impl/Migration_16_17;->()V +HSPLandroidx/work/impl/Migration_16_17;->()V +Landroidx/work/impl/Migration_1_2; +HSPLandroidx/work/impl/Migration_1_2;->()V +HSPLandroidx/work/impl/Migration_1_2;->()V +Landroidx/work/impl/Migration_3_4; +HSPLandroidx/work/impl/Migration_3_4;->()V +HSPLandroidx/work/impl/Migration_3_4;->()V +Landroidx/work/impl/Migration_4_5; +HSPLandroidx/work/impl/Migration_4_5;->()V +HSPLandroidx/work/impl/Migration_4_5;->()V +Landroidx/work/impl/Migration_6_7; +HSPLandroidx/work/impl/Migration_6_7;->()V +HSPLandroidx/work/impl/Migration_6_7;->()V +Landroidx/work/impl/Migration_7_8; +HSPLandroidx/work/impl/Migration_7_8;->()V +HSPLandroidx/work/impl/Migration_7_8;->()V +Landroidx/work/impl/Migration_8_9; +HSPLandroidx/work/impl/Migration_8_9;->()V +HSPLandroidx/work/impl/Migration_8_9;->()V +Landroidx/work/impl/OperationImpl; +HSPLandroidx/work/impl/OperationImpl;->()V +HSPLandroidx/work/impl/OperationImpl;->markState(Landroidx/work/Operation$State;)V +Landroidx/work/impl/Processor; +HSPLandroidx/work/impl/Processor;->()V +HSPLandroidx/work/impl/Processor;->(Landroid/content/Context;Landroidx/work/Configuration;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;Landroidx/work/impl/WorkDatabase;)V +HSPLandroidx/work/impl/Processor;->addExecutionListener(Landroidx/work/impl/ExecutionListener;)V +HSPLandroidx/work/impl/Processor;->cleanUpWorkerUnsafe(Ljava/lang/String;)Landroidx/work/impl/WorkerWrapper; +HSPLandroidx/work/impl/Processor;->getWorkerWrapperUnsafe(Ljava/lang/String;)Landroidx/work/impl/WorkerWrapper; +HSPLandroidx/work/impl/Processor;->isCancelled(Ljava/lang/String;)Z +HSPLandroidx/work/impl/Processor;->isEnqueued(Ljava/lang/String;)Z +HSPLandroidx/work/impl/Processor;->lambda$startWork$0$androidx-work-impl-Processor(Ljava/util/ArrayList;Ljava/lang/String;)Landroidx/work/impl/model/WorkSpec; +HSPLandroidx/work/impl/Processor;->lambda$startWork$1$androidx-work-impl-Processor(Lcom/google/common/util/concurrent/ListenableFuture;Landroidx/work/impl/WorkerWrapper;)V +HSPLandroidx/work/impl/Processor;->onExecuted(Landroidx/work/impl/WorkerWrapper;Z)V +HSPLandroidx/work/impl/Processor;->removeExecutionListener(Landroidx/work/impl/ExecutionListener;)V +HSPLandroidx/work/impl/Processor;->startWork(Landroidx/work/impl/StartStopToken;Landroidx/work/WorkerParameters$RuntimeExtras;)Z +Landroidx/work/impl/Processor$$ExternalSyntheticLambda0; +HSPLandroidx/work/impl/Processor$$ExternalSyntheticLambda0;->(Landroidx/work/impl/Processor;Ljava/util/ArrayList;Ljava/lang/String;)V +HSPLandroidx/work/impl/Processor$$ExternalSyntheticLambda0;->call()Ljava/lang/Object; +Landroidx/work/impl/Processor$$ExternalSyntheticLambda1; +HSPLandroidx/work/impl/Processor$$ExternalSyntheticLambda1;->(Landroidx/work/impl/Processor;Lcom/google/common/util/concurrent/ListenableFuture;Landroidx/work/impl/WorkerWrapper;)V +HSPLandroidx/work/impl/Processor$$ExternalSyntheticLambda1;->run()V +Landroidx/work/impl/RescheduleMigration; +HSPLandroidx/work/impl/RescheduleMigration;->(Landroid/content/Context;II)V +Landroidx/work/impl/Scheduler; +Landroidx/work/impl/Schedulers; +HSPLandroidx/work/impl/Schedulers;->()V +HSPLandroidx/work/impl/Schedulers;->createBestAvailableBackgroundScheduler(Landroid/content/Context;Landroidx/work/impl/WorkDatabase;Landroidx/work/Configuration;)Landroidx/work/impl/Scheduler; +HSPLandroidx/work/impl/Schedulers;->lambda$registerRescheduling$0(Ljava/util/List;Landroidx/work/impl/model/WorkGenerationalId;Landroidx/work/Configuration;Landroidx/work/impl/WorkDatabase;)V +HSPLandroidx/work/impl/Schedulers;->lambda$registerRescheduling$1(Ljava/util/concurrent/Executor;Ljava/util/List;Landroidx/work/Configuration;Landroidx/work/impl/WorkDatabase;Landroidx/work/impl/model/WorkGenerationalId;Z)V +HSPLandroidx/work/impl/Schedulers;->markScheduled(Landroidx/work/impl/model/WorkSpecDao;Landroidx/work/Clock;Ljava/util/List;)V +HSPLandroidx/work/impl/Schedulers;->registerRescheduling(Ljava/util/List;Landroidx/work/impl/Processor;Ljava/util/concurrent/Executor;Landroidx/work/impl/WorkDatabase;Landroidx/work/Configuration;)V +HSPLandroidx/work/impl/Schedulers;->schedule(Landroidx/work/Configuration;Landroidx/work/impl/WorkDatabase;Ljava/util/List;)V +Landroidx/work/impl/Schedulers$$ExternalSyntheticLambda0; +HSPLandroidx/work/impl/Schedulers$$ExternalSyntheticLambda0;->(Ljava/util/List;Landroidx/work/impl/model/WorkGenerationalId;Landroidx/work/Configuration;Landroidx/work/impl/WorkDatabase;)V +HSPLandroidx/work/impl/Schedulers$$ExternalSyntheticLambda0;->run()V +Landroidx/work/impl/Schedulers$$ExternalSyntheticLambda1; +HSPLandroidx/work/impl/Schedulers$$ExternalSyntheticLambda1;->(Ljava/util/concurrent/Executor;Ljava/util/List;Landroidx/work/Configuration;Landroidx/work/impl/WorkDatabase;)V +HSPLandroidx/work/impl/Schedulers$$ExternalSyntheticLambda1;->onExecuted(Landroidx/work/impl/model/WorkGenerationalId;Z)V +Landroidx/work/impl/StartStopToken; +HSPLandroidx/work/impl/StartStopToken;->(Landroidx/work/impl/model/WorkGenerationalId;)V +HSPLandroidx/work/impl/StartStopToken;->getId()Landroidx/work/impl/model/WorkGenerationalId; +Landroidx/work/impl/StartStopTokens; +HSPLandroidx/work/impl/StartStopTokens;->()V +HSPLandroidx/work/impl/StartStopTokens;->contains(Landroidx/work/impl/model/WorkGenerationalId;)Z +HSPLandroidx/work/impl/StartStopTokens;->remove(Landroidx/work/impl/model/WorkGenerationalId;)Landroidx/work/impl/StartStopToken; +HSPLandroidx/work/impl/StartStopTokens;->remove(Ljava/lang/String;)Ljava/util/List; +HSPLandroidx/work/impl/StartStopTokens;->tokenFor(Landroidx/work/impl/model/WorkGenerationalId;)Landroidx/work/impl/StartStopToken; +Landroidx/work/impl/WorkContinuationImpl; +HSPLandroidx/work/impl/WorkContinuationImpl;->()V +HSPLandroidx/work/impl/WorkContinuationImpl;->(Landroidx/work/impl/WorkManagerImpl;Ljava/lang/String;Landroidx/work/ExistingWorkPolicy;Ljava/util/List;)V +HSPLandroidx/work/impl/WorkContinuationImpl;->(Landroidx/work/impl/WorkManagerImpl;Ljava/lang/String;Landroidx/work/ExistingWorkPolicy;Ljava/util/List;Ljava/util/List;)V +HSPLandroidx/work/impl/WorkContinuationImpl;->enqueue()Landroidx/work/Operation; +HSPLandroidx/work/impl/WorkContinuationImpl;->getExistingWorkPolicy()Landroidx/work/ExistingWorkPolicy; +HSPLandroidx/work/impl/WorkContinuationImpl;->getIds()Ljava/util/List; +HSPLandroidx/work/impl/WorkContinuationImpl;->getName()Ljava/lang/String; +HSPLandroidx/work/impl/WorkContinuationImpl;->getParents()Ljava/util/List; +HSPLandroidx/work/impl/WorkContinuationImpl;->getWork()Ljava/util/List; +HSPLandroidx/work/impl/WorkContinuationImpl;->getWorkManagerImpl()Landroidx/work/impl/WorkManagerImpl; +HSPLandroidx/work/impl/WorkContinuationImpl;->hasCycles()Z +HSPLandroidx/work/impl/WorkContinuationImpl;->hasCycles(Landroidx/work/impl/WorkContinuationImpl;Ljava/util/Set;)Z +HSPLandroidx/work/impl/WorkContinuationImpl;->markEnqueued()V +HSPLandroidx/work/impl/WorkContinuationImpl;->prerequisitesFor(Landroidx/work/impl/WorkContinuationImpl;)Ljava/util/Set; +Landroidx/work/impl/WorkDatabase; +HSPLandroidx/work/impl/WorkDatabase;->()V +HSPLandroidx/work/impl/WorkDatabase;->()V +Landroidx/work/impl/WorkDatabase$Companion; +HSPLandroidx/work/impl/WorkDatabase$Companion;->$r8$lambda$ZkS5S0p_73DOI66Tm39UHOpqbt0(Landroid/content/Context;Landroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration;)Landroidx/sqlite/db/SupportSQLiteOpenHelper; +HSPLandroidx/work/impl/WorkDatabase$Companion;->()V +HSPLandroidx/work/impl/WorkDatabase$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/work/impl/WorkDatabase$Companion;->create$lambda$0(Landroid/content/Context;Landroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration;)Landroidx/sqlite/db/SupportSQLiteOpenHelper; +HSPLandroidx/work/impl/WorkDatabase$Companion;->create(Landroid/content/Context;Ljava/util/concurrent/Executor;Landroidx/work/Clock;Z)Landroidx/work/impl/WorkDatabase; +Landroidx/work/impl/WorkDatabase$Companion$$ExternalSyntheticLambda0; +HSPLandroidx/work/impl/WorkDatabase$Companion$$ExternalSyntheticLambda0;->(Landroid/content/Context;)V +HSPLandroidx/work/impl/WorkDatabase$Companion$$ExternalSyntheticLambda0;->create(Landroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration;)Landroidx/sqlite/db/SupportSQLiteOpenHelper; +Landroidx/work/impl/WorkDatabaseKt; +HSPLandroidx/work/impl/WorkDatabaseKt;->()V +Landroidx/work/impl/WorkDatabasePathHelper; +HSPLandroidx/work/impl/WorkDatabasePathHelper;->()V +HSPLandroidx/work/impl/WorkDatabasePathHelper;->()V +HSPLandroidx/work/impl/WorkDatabasePathHelper;->getDefaultDatabasePath(Landroid/content/Context;)Ljava/io/File; +HSPLandroidx/work/impl/WorkDatabasePathHelper;->migrateDatabase(Landroid/content/Context;)V +Landroidx/work/impl/WorkDatabase_AutoMigration_13_14_Impl; +HSPLandroidx/work/impl/WorkDatabase_AutoMigration_13_14_Impl;->()V +Landroidx/work/impl/WorkDatabase_AutoMigration_14_15_Impl; +HSPLandroidx/work/impl/WorkDatabase_AutoMigration_14_15_Impl;->()V +Landroidx/work/impl/WorkDatabase_AutoMigration_16_17_Impl; +HSPLandroidx/work/impl/WorkDatabase_AutoMigration_16_17_Impl;->()V +Landroidx/work/impl/WorkDatabase_AutoMigration_17_18_Impl; +HSPLandroidx/work/impl/WorkDatabase_AutoMigration_17_18_Impl;->()V +Landroidx/work/impl/WorkDatabase_AutoMigration_18_19_Impl; +HSPLandroidx/work/impl/WorkDatabase_AutoMigration_18_19_Impl;->()V +Landroidx/work/impl/WorkDatabase_AutoMigration_19_20_Impl; +HSPLandroidx/work/impl/WorkDatabase_AutoMigration_19_20_Impl;->()V +Landroidx/work/impl/WorkDatabase_Impl; +HSPLandroidx/work/impl/WorkDatabase_Impl;->()V +HSPLandroidx/work/impl/WorkDatabase_Impl;->access$1000(Landroidx/work/impl/WorkDatabase_Impl;)Ljava/util/List; +HSPLandroidx/work/impl/WorkDatabase_Impl;->access$602(Landroidx/work/impl/WorkDatabase_Impl;Landroidx/sqlite/db/SupportSQLiteDatabase;)Landroidx/sqlite/db/SupportSQLiteDatabase; +HSPLandroidx/work/impl/WorkDatabase_Impl;->access$700(Landroidx/work/impl/WorkDatabase_Impl;Landroidx/sqlite/db/SupportSQLiteDatabase;)V +HSPLandroidx/work/impl/WorkDatabase_Impl;->access$800(Landroidx/work/impl/WorkDatabase_Impl;)Ljava/util/List; +HSPLandroidx/work/impl/WorkDatabase_Impl;->access$900(Landroidx/work/impl/WorkDatabase_Impl;)Ljava/util/List; +HSPLandroidx/work/impl/WorkDatabase_Impl;->createInvalidationTracker()Landroidx/room/InvalidationTracker; +HSPLandroidx/work/impl/WorkDatabase_Impl;->createOpenHelper(Landroidx/room/DatabaseConfiguration;)Landroidx/sqlite/db/SupportSQLiteOpenHelper; +HSPLandroidx/work/impl/WorkDatabase_Impl;->dependencyDao()Landroidx/work/impl/model/DependencyDao; +HSPLandroidx/work/impl/WorkDatabase_Impl;->getAutoMigrations(Ljava/util/Map;)Ljava/util/List; +HSPLandroidx/work/impl/WorkDatabase_Impl;->getRequiredAutoMigrationSpecs()Ljava/util/Set; +HSPLandroidx/work/impl/WorkDatabase_Impl;->getRequiredTypeConverters()Ljava/util/Map; +HSPLandroidx/work/impl/WorkDatabase_Impl;->preferenceDao()Landroidx/work/impl/model/PreferenceDao; +HSPLandroidx/work/impl/WorkDatabase_Impl;->systemIdInfoDao()Landroidx/work/impl/model/SystemIdInfoDao; +HSPLandroidx/work/impl/WorkDatabase_Impl;->workNameDao()Landroidx/work/impl/model/WorkNameDao; +HSPLandroidx/work/impl/WorkDatabase_Impl;->workProgressDao()Landroidx/work/impl/model/WorkProgressDao; +HSPLandroidx/work/impl/WorkDatabase_Impl;->workSpecDao()Landroidx/work/impl/model/WorkSpecDao; +HSPLandroidx/work/impl/WorkDatabase_Impl;->workTagDao()Landroidx/work/impl/model/WorkTagDao; +Landroidx/work/impl/WorkDatabase_Impl$1; +HSPLandroidx/work/impl/WorkDatabase_Impl$1;->(Landroidx/work/impl/WorkDatabase_Impl;I)V +HSPLandroidx/work/impl/WorkDatabase_Impl$1;->onOpen(Landroidx/sqlite/db/SupportSQLiteDatabase;)V +Landroidx/work/impl/WorkLauncher; +HSPLandroidx/work/impl/WorkLauncher;->startWork(Landroidx/work/impl/StartStopToken;)V +Landroidx/work/impl/WorkLauncherImpl; +HSPLandroidx/work/impl/WorkLauncherImpl;->(Landroidx/work/impl/Processor;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;)V +HSPLandroidx/work/impl/WorkLauncherImpl;->startWork(Landroidx/work/impl/StartStopToken;Landroidx/work/WorkerParameters$RuntimeExtras;)V +Landroidx/work/impl/WorkManagerImpl; +HSPLandroidx/work/impl/WorkManagerImpl;->()V +HSPLandroidx/work/impl/WorkManagerImpl;->(Landroid/content/Context;Landroidx/work/Configuration;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;Landroidx/work/impl/WorkDatabase;Ljava/util/List;Landroidx/work/impl/Processor;Landroidx/work/impl/constraints/trackers/Trackers;)V +HSPLandroidx/work/impl/WorkManagerImpl;->createWorkContinuationForUniquePeriodicWork(Ljava/lang/String;Landroidx/work/ExistingPeriodicWorkPolicy;Landroidx/work/PeriodicWorkRequest;)Landroidx/work/impl/WorkContinuationImpl; +HSPLandroidx/work/impl/WorkManagerImpl;->enqueueUniquePeriodicWork(Ljava/lang/String;Landroidx/work/ExistingPeriodicWorkPolicy;Landroidx/work/PeriodicWorkRequest;)Landroidx/work/Operation; +HSPLandroidx/work/impl/WorkManagerImpl;->enqueueUniqueWork(Ljava/lang/String;Landroidx/work/ExistingWorkPolicy;Ljava/util/List;)Landroidx/work/Operation; +HSPLandroidx/work/impl/WorkManagerImpl;->getApplicationContext()Landroid/content/Context; +HSPLandroidx/work/impl/WorkManagerImpl;->getConfiguration()Landroidx/work/Configuration; +HSPLandroidx/work/impl/WorkManagerImpl;->getInstance()Landroidx/work/impl/WorkManagerImpl; +HSPLandroidx/work/impl/WorkManagerImpl;->getInstance(Landroid/content/Context;)Landroidx/work/impl/WorkManagerImpl; +HSPLandroidx/work/impl/WorkManagerImpl;->getPreferenceUtils()Landroidx/work/impl/utils/PreferenceUtils; +HSPLandroidx/work/impl/WorkManagerImpl;->getProcessor()Landroidx/work/impl/Processor; +HSPLandroidx/work/impl/WorkManagerImpl;->getSchedulers()Ljava/util/List; +HSPLandroidx/work/impl/WorkManagerImpl;->getWorkDatabase()Landroidx/work/impl/WorkDatabase; +HSPLandroidx/work/impl/WorkManagerImpl;->getWorkTaskExecutor()Landroidx/work/impl/utils/taskexecutor/TaskExecutor; +HSPLandroidx/work/impl/WorkManagerImpl;->initialize(Landroid/content/Context;Landroidx/work/Configuration;)V +HSPLandroidx/work/impl/WorkManagerImpl;->onForceStopRunnableCompleted()V +HSPLandroidx/work/impl/WorkManagerImpl;->rescheduleEligibleWork()V +Landroidx/work/impl/WorkManagerImpl$Api24Impl; +HSPLandroidx/work/impl/WorkManagerImpl$Api24Impl;->isDeviceProtectedStorage(Landroid/content/Context;)Z +Landroidx/work/impl/WorkManagerImplExtKt; +HSPLandroidx/work/impl/WorkManagerImplExtKt;->access$createSchedulers(Landroid/content/Context;Landroidx/work/Configuration;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;Landroidx/work/impl/WorkDatabase;Landroidx/work/impl/constraints/trackers/Trackers;Landroidx/work/impl/Processor;)Ljava/util/List; +HSPLandroidx/work/impl/WorkManagerImplExtKt;->createSchedulers(Landroid/content/Context;Landroidx/work/Configuration;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;Landroidx/work/impl/WorkDatabase;Landroidx/work/impl/constraints/trackers/Trackers;Landroidx/work/impl/Processor;)Ljava/util/List; +HSPLandroidx/work/impl/WorkManagerImplExtKt;->createWorkManager$default(Landroid/content/Context;Landroidx/work/Configuration;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;Landroidx/work/impl/WorkDatabase;Landroidx/work/impl/constraints/trackers/Trackers;Landroidx/work/impl/Processor;Lkotlin/jvm/functions/Function6;ILjava/lang/Object;)Landroidx/work/impl/WorkManagerImpl; +HSPLandroidx/work/impl/WorkManagerImplExtKt;->createWorkManager(Landroid/content/Context;Landroidx/work/Configuration;)Landroidx/work/impl/WorkManagerImpl; +HSPLandroidx/work/impl/WorkManagerImplExtKt;->createWorkManager(Landroid/content/Context;Landroidx/work/Configuration;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;Landroidx/work/impl/WorkDatabase;Landroidx/work/impl/constraints/trackers/Trackers;Landroidx/work/impl/Processor;Lkotlin/jvm/functions/Function6;)Landroidx/work/impl/WorkManagerImpl; +Landroidx/work/impl/WorkManagerImplExtKt$WorkManagerImpl$1; +HSPLandroidx/work/impl/WorkManagerImplExtKt$WorkManagerImpl$1;->()V +HSPLandroidx/work/impl/WorkManagerImplExtKt$WorkManagerImpl$1;->()V +HSPLandroidx/work/impl/WorkManagerImplExtKt$WorkManagerImpl$1;->invoke(Landroid/content/Context;Landroidx/work/Configuration;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;Landroidx/work/impl/WorkDatabase;Landroidx/work/impl/constraints/trackers/Trackers;Landroidx/work/impl/Processor;)Ljava/util/List; +HSPLandroidx/work/impl/WorkManagerImplExtKt$WorkManagerImpl$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/work/impl/WorkMigration9To10; +HSPLandroidx/work/impl/WorkMigration9To10;->(Landroid/content/Context;)V +Landroidx/work/impl/WorkerWrapper; +HSPLandroidx/work/impl/WorkerWrapper;->()V +HSPLandroidx/work/impl/WorkerWrapper;->(Landroidx/work/impl/WorkerWrapper$Builder;)V +HSPLandroidx/work/impl/WorkerWrapper;->createWorkDescription(Ljava/util/List;)Ljava/lang/String; +HSPLandroidx/work/impl/WorkerWrapper;->getFuture()Lcom/google/common/util/concurrent/ListenableFuture; +HSPLandroidx/work/impl/WorkerWrapper;->getWorkGenerationalId()Landroidx/work/impl/model/WorkGenerationalId; +HSPLandroidx/work/impl/WorkerWrapper;->handleResult(Landroidx/work/ListenableWorker$Result;)V +HSPLandroidx/work/impl/WorkerWrapper;->lambda$runWorker$0$androidx-work-impl-WorkerWrapper(Lcom/google/common/util/concurrent/ListenableFuture;)V +HSPLandroidx/work/impl/WorkerWrapper;->onWorkFinished()V +HSPLandroidx/work/impl/WorkerWrapper;->resolve(Z)V +HSPLandroidx/work/impl/WorkerWrapper;->run()V +HSPLandroidx/work/impl/WorkerWrapper;->runWorker()V +HSPLandroidx/work/impl/WorkerWrapper;->setSucceededAndResolve()V +HSPLandroidx/work/impl/WorkerWrapper;->tryCheckForInterruptionAndResolve()Z +HSPLandroidx/work/impl/WorkerWrapper;->trySetRunning()Z +Landroidx/work/impl/WorkerWrapper$$ExternalSyntheticLambda0; +HSPLandroidx/work/impl/WorkerWrapper$$ExternalSyntheticLambda0;->(Landroidx/work/impl/WorkerWrapper;Lcom/google/common/util/concurrent/ListenableFuture;)V +HSPLandroidx/work/impl/WorkerWrapper$$ExternalSyntheticLambda0;->run()V +Landroidx/work/impl/WorkerWrapper$1; +HSPLandroidx/work/impl/WorkerWrapper$1;->(Landroidx/work/impl/WorkerWrapper;Lcom/google/common/util/concurrent/ListenableFuture;)V +HSPLandroidx/work/impl/WorkerWrapper$1;->run()V +Landroidx/work/impl/WorkerWrapper$2; +HSPLandroidx/work/impl/WorkerWrapper$2;->(Landroidx/work/impl/WorkerWrapper;Ljava/lang/String;)V +HSPLandroidx/work/impl/WorkerWrapper$2;->run()V +Landroidx/work/impl/WorkerWrapper$Builder; +HSPLandroidx/work/impl/WorkerWrapper$Builder;->(Landroid/content/Context;Landroidx/work/Configuration;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;Landroidx/work/impl/foreground/ForegroundProcessor;Landroidx/work/impl/WorkDatabase;Landroidx/work/impl/model/WorkSpec;Ljava/util/List;)V +HSPLandroidx/work/impl/WorkerWrapper$Builder;->access$000(Landroidx/work/impl/WorkerWrapper$Builder;)Ljava/util/List; +HSPLandroidx/work/impl/WorkerWrapper$Builder;->build()Landroidx/work/impl/WorkerWrapper; +HSPLandroidx/work/impl/WorkerWrapper$Builder;->withRuntimeExtras(Landroidx/work/WorkerParameters$RuntimeExtras;)Landroidx/work/impl/WorkerWrapper$Builder; +Landroidx/work/impl/background/greedy/DelayedWorkTracker; +HSPLandroidx/work/impl/background/greedy/DelayedWorkTracker;->()V +HSPLandroidx/work/impl/background/greedy/DelayedWorkTracker;->(Landroidx/work/impl/Scheduler;Landroidx/work/RunnableScheduler;Landroidx/work/Clock;)V +HSPLandroidx/work/impl/background/greedy/DelayedWorkTracker;->schedule(Landroidx/work/impl/model/WorkSpec;J)V +HSPLandroidx/work/impl/background/greedy/DelayedWorkTracker;->unschedule(Ljava/lang/String;)V +Landroidx/work/impl/background/greedy/DelayedWorkTracker$1; +HSPLandroidx/work/impl/background/greedy/DelayedWorkTracker$1;->(Landroidx/work/impl/background/greedy/DelayedWorkTracker;Landroidx/work/impl/model/WorkSpec;)V +Landroidx/work/impl/background/greedy/GreedyScheduler; +HSPLandroidx/work/impl/background/greedy/GreedyScheduler;->()V +HSPLandroidx/work/impl/background/greedy/GreedyScheduler;->(Landroid/content/Context;Landroidx/work/Configuration;Landroidx/work/impl/constraints/trackers/Trackers;Landroidx/work/impl/Processor;Landroidx/work/impl/WorkLauncher;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;)V +HSPLandroidx/work/impl/background/greedy/GreedyScheduler;->cancel(Ljava/lang/String;)V +HSPLandroidx/work/impl/background/greedy/GreedyScheduler;->checkDefaultProcess()V +HSPLandroidx/work/impl/background/greedy/GreedyScheduler;->hasLimitedSchedulingSlots()Z +HSPLandroidx/work/impl/background/greedy/GreedyScheduler;->onConstraintsStateChanged(Landroidx/work/impl/model/WorkSpec;Landroidx/work/impl/constraints/ConstraintsState;)V +HSPLandroidx/work/impl/background/greedy/GreedyScheduler;->onExecuted(Landroidx/work/impl/model/WorkGenerationalId;Z)V +HSPLandroidx/work/impl/background/greedy/GreedyScheduler;->registerExecutionListenerIfNeeded()V +HSPLandroidx/work/impl/background/greedy/GreedyScheduler;->removeConstraintTrackingFor(Landroidx/work/impl/model/WorkGenerationalId;)V +HSPLandroidx/work/impl/background/greedy/GreedyScheduler;->schedule([Landroidx/work/impl/model/WorkSpec;)V +HSPLandroidx/work/impl/background/greedy/GreedyScheduler;->throttleIfNeeded(Landroidx/work/impl/model/WorkSpec;)J +Landroidx/work/impl/background/greedy/GreedyScheduler$AttemptData; +HSPLandroidx/work/impl/background/greedy/GreedyScheduler$AttemptData;->(IJ)V +HSPLandroidx/work/impl/background/greedy/GreedyScheduler$AttemptData;->(IJLandroidx/work/impl/background/greedy/GreedyScheduler$1;)V +Landroidx/work/impl/background/greedy/TimeLimiter; +HSPLandroidx/work/impl/background/greedy/TimeLimiter;->(Landroidx/work/RunnableScheduler;Landroidx/work/impl/WorkLauncher;)V +HSPLandroidx/work/impl/background/greedy/TimeLimiter;->(Landroidx/work/RunnableScheduler;Landroidx/work/impl/WorkLauncher;J)V +HSPLandroidx/work/impl/background/greedy/TimeLimiter;->(Landroidx/work/RunnableScheduler;Landroidx/work/impl/WorkLauncher;JILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/work/impl/background/greedy/TimeLimiter;->cancel(Landroidx/work/impl/StartStopToken;)V +HSPLandroidx/work/impl/background/greedy/TimeLimiter;->track(Landroidx/work/impl/StartStopToken;)V +Landroidx/work/impl/background/greedy/TimeLimiter$$ExternalSyntheticLambda0; +HSPLandroidx/work/impl/background/greedy/TimeLimiter$$ExternalSyntheticLambda0;->(Landroidx/work/impl/background/greedy/TimeLimiter;Landroidx/work/impl/StartStopToken;)V +Landroidx/work/impl/background/systemalarm/RescheduleReceiver; +Landroidx/work/impl/background/systemjob/SystemJobInfoConverter; +HSPLandroidx/work/impl/background/systemjob/SystemJobInfoConverter;->()V +HSPLandroidx/work/impl/background/systemjob/SystemJobInfoConverter;->(Landroid/content/Context;Landroidx/work/Clock;)V +HSPLandroidx/work/impl/background/systemjob/SystemJobInfoConverter;->convert(Landroidx/work/impl/model/WorkSpec;I)Landroid/app/job/JobInfo; +HSPLandroidx/work/impl/background/systemjob/SystemJobInfoConverter;->convertNetworkType(Landroidx/work/NetworkType;)I +HSPLandroidx/work/impl/background/systemjob/SystemJobInfoConverter;->setRequiredNetwork(Landroid/app/job/JobInfo$Builder;Landroidx/work/NetworkType;)V +Landroidx/work/impl/background/systemjob/SystemJobInfoConverter$1; +HSPLandroidx/work/impl/background/systemjob/SystemJobInfoConverter$1;->()V +Landroidx/work/impl/background/systemjob/SystemJobScheduler; +HSPLandroidx/work/impl/background/systemjob/SystemJobScheduler;->()V +HSPLandroidx/work/impl/background/systemjob/SystemJobScheduler;->(Landroid/content/Context;Landroidx/work/impl/WorkDatabase;Landroidx/work/Configuration;)V +HSPLandroidx/work/impl/background/systemjob/SystemJobScheduler;->(Landroid/content/Context;Landroidx/work/impl/WorkDatabase;Landroidx/work/Configuration;Landroid/app/job/JobScheduler;Landroidx/work/impl/background/systemjob/SystemJobInfoConverter;)V +HSPLandroidx/work/impl/background/systemjob/SystemJobScheduler;->cancel(Ljava/lang/String;)V +HSPLandroidx/work/impl/background/systemjob/SystemJobScheduler;->cancelAll(Landroid/content/Context;)V +HSPLandroidx/work/impl/background/systemjob/SystemJobScheduler;->cancelJobById(Landroid/app/job/JobScheduler;I)V +HSPLandroidx/work/impl/background/systemjob/SystemJobScheduler;->getPendingJobIds(Landroid/content/Context;Landroid/app/job/JobScheduler;Ljava/lang/String;)Ljava/util/List; +HSPLandroidx/work/impl/background/systemjob/SystemJobScheduler;->getPendingJobs(Landroid/content/Context;Landroid/app/job/JobScheduler;)Ljava/util/List; +HSPLandroidx/work/impl/background/systemjob/SystemJobScheduler;->getWorkGenerationalIdFromJobInfo(Landroid/app/job/JobInfo;)Landroidx/work/impl/model/WorkGenerationalId; +HSPLandroidx/work/impl/background/systemjob/SystemJobScheduler;->hasLimitedSchedulingSlots()Z +HSPLandroidx/work/impl/background/systemjob/SystemJobScheduler;->reconcileJobs(Landroid/content/Context;Landroidx/work/impl/WorkDatabase;)Z +HSPLandroidx/work/impl/background/systemjob/SystemJobScheduler;->schedule([Landroidx/work/impl/model/WorkSpec;)V +HSPLandroidx/work/impl/background/systemjob/SystemJobScheduler;->scheduleInternal(Landroidx/work/impl/model/WorkSpec;I)V +Landroidx/work/impl/background/systemjob/SystemJobService; +HSPLandroidx/work/impl/background/systemjob/SystemJobService;->()V +HSPLandroidx/work/impl/background/systemjob/SystemJobService;->()V +HSPLandroidx/work/impl/background/systemjob/SystemJobService;->onCreate()V +HSPLandroidx/work/impl/background/systemjob/SystemJobService;->onDestroy()V +HSPLandroidx/work/impl/background/systemjob/SystemJobService;->onExecuted(Landroidx/work/impl/model/WorkGenerationalId;Z)V +HSPLandroidx/work/impl/background/systemjob/SystemJobService;->onStartJob(Landroid/app/job/JobParameters;)Z +HSPLandroidx/work/impl/background/systemjob/SystemJobService;->onStopJob(Landroid/app/job/JobParameters;)Z +HSPLandroidx/work/impl/background/systemjob/SystemJobService;->workGenerationalIdFromJobParameters(Landroid/app/job/JobParameters;)Landroidx/work/impl/model/WorkGenerationalId; +Landroidx/work/impl/background/systemjob/SystemJobService$Api24Impl; +HSPLandroidx/work/impl/background/systemjob/SystemJobService$Api24Impl;->getTriggeredContentAuthorities(Landroid/app/job/JobParameters;)[Ljava/lang/String; +HSPLandroidx/work/impl/background/systemjob/SystemJobService$Api24Impl;->getTriggeredContentUris(Landroid/app/job/JobParameters;)[Landroid/net/Uri; +Landroidx/work/impl/background/systemjob/SystemJobService$Api28Impl; +HSPLandroidx/work/impl/background/systemjob/SystemJobService$Api28Impl;->getNetwork(Landroid/app/job/JobParameters;)Landroid/net/Network; +Landroidx/work/impl/constraints/ConstraintListener; +Landroidx/work/impl/constraints/ConstraintsState; +HSPLandroidx/work/impl/constraints/ConstraintsState;->()V +HSPLandroidx/work/impl/constraints/ConstraintsState;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/work/impl/constraints/ConstraintsState$ConstraintsMet; +HSPLandroidx/work/impl/constraints/ConstraintsState$ConstraintsMet;->()V +HSPLandroidx/work/impl/constraints/ConstraintsState$ConstraintsMet;->()V +Landroidx/work/impl/constraints/NetworkState; +HSPLandroidx/work/impl/constraints/NetworkState;->(ZZZZ)V +HSPLandroidx/work/impl/constraints/NetworkState;->equals(Ljava/lang/Object;)Z +HSPLandroidx/work/impl/constraints/NetworkState;->isConnected()Z +HSPLandroidx/work/impl/constraints/NetworkState;->isValidated()Z +HSPLandroidx/work/impl/constraints/NetworkState;->toString()Ljava/lang/String; +Landroidx/work/impl/constraints/OnConstraintsStateChangedListener; +Landroidx/work/impl/constraints/WorkConstraintsTracker; +HSPLandroidx/work/impl/constraints/WorkConstraintsTracker;->(Landroidx/work/impl/constraints/trackers/Trackers;)V +HSPLandroidx/work/impl/constraints/WorkConstraintsTracker;->(Ljava/util/List;)V +HSPLandroidx/work/impl/constraints/WorkConstraintsTracker;->track(Landroidx/work/impl/model/WorkSpec;)Lkotlinx/coroutines/flow/Flow; +Landroidx/work/impl/constraints/WorkConstraintsTracker$track$$inlined$combine$1; +HSPLandroidx/work/impl/constraints/WorkConstraintsTracker$track$$inlined$combine$1;->([Lkotlinx/coroutines/flow/Flow;)V +HSPLandroidx/work/impl/constraints/WorkConstraintsTracker$track$$inlined$combine$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/work/impl/constraints/WorkConstraintsTracker$track$$inlined$combine$1$2; +HSPLandroidx/work/impl/constraints/WorkConstraintsTracker$track$$inlined$combine$1$2;->([Lkotlinx/coroutines/flow/Flow;)V +HSPLandroidx/work/impl/constraints/WorkConstraintsTracker$track$$inlined$combine$1$2;->invoke()Ljava/lang/Object; +HSPLandroidx/work/impl/constraints/WorkConstraintsTracker$track$$inlined$combine$1$2;->invoke()[Ljava/lang/Object; +Landroidx/work/impl/constraints/WorkConstraintsTracker$track$$inlined$combine$1$3; +HSPLandroidx/work/impl/constraints/WorkConstraintsTracker$track$$inlined$combine$1$3;->(Lkotlin/coroutines/Continuation;)V +HSPLandroidx/work/impl/constraints/WorkConstraintsTracker$track$$inlined$combine$1$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/work/impl/constraints/WorkConstraintsTracker$track$$inlined$combine$1$3;->invoke(Lkotlinx/coroutines/flow/FlowCollector;[Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/work/impl/constraints/WorkConstraintsTracker$track$$inlined$combine$1$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/work/impl/constraints/WorkConstraintsTrackerKt; +HSPLandroidx/work/impl/constraints/WorkConstraintsTrackerKt;->()V +HSPLandroidx/work/impl/constraints/WorkConstraintsTrackerKt;->listen(Landroidx/work/impl/constraints/WorkConstraintsTracker;Landroidx/work/impl/model/WorkSpec;Lkotlinx/coroutines/CoroutineDispatcher;Landroidx/work/impl/constraints/OnConstraintsStateChangedListener;)Lkotlinx/coroutines/Job; +Landroidx/work/impl/constraints/WorkConstraintsTrackerKt$listen$1; +HSPLandroidx/work/impl/constraints/WorkConstraintsTrackerKt$listen$1;->(Landroidx/work/impl/constraints/WorkConstraintsTracker;Landroidx/work/impl/model/WorkSpec;Landroidx/work/impl/constraints/OnConstraintsStateChangedListener;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/work/impl/constraints/WorkConstraintsTrackerKt$listen$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/work/impl/constraints/WorkConstraintsTrackerKt$listen$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/work/impl/constraints/WorkConstraintsTrackerKt$listen$1$1; +HSPLandroidx/work/impl/constraints/WorkConstraintsTrackerKt$listen$1$1;->(Landroidx/work/impl/constraints/OnConstraintsStateChangedListener;Landroidx/work/impl/model/WorkSpec;)V +HSPLandroidx/work/impl/constraints/WorkConstraintsTrackerKt$listen$1$1;->emit(Landroidx/work/impl/constraints/ConstraintsState;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/work/impl/constraints/WorkConstraintsTrackerKt$listen$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Landroidx/work/impl/constraints/controllers/BatteryChargingController; +HSPLandroidx/work/impl/constraints/controllers/BatteryChargingController;->(Landroidx/work/impl/constraints/trackers/ConstraintTracker;)V +HSPLandroidx/work/impl/constraints/controllers/BatteryChargingController;->hasConstraint(Landroidx/work/impl/model/WorkSpec;)Z +Landroidx/work/impl/constraints/controllers/BatteryNotLowController; +HSPLandroidx/work/impl/constraints/controllers/BatteryNotLowController;->(Landroidx/work/impl/constraints/trackers/BatteryNotLowTracker;)V +HSPLandroidx/work/impl/constraints/controllers/BatteryNotLowController;->hasConstraint(Landroidx/work/impl/model/WorkSpec;)Z +Landroidx/work/impl/constraints/controllers/ConstraintController; +HSPLandroidx/work/impl/constraints/controllers/ConstraintController;->(Landroidx/work/impl/constraints/trackers/ConstraintTracker;)V +HSPLandroidx/work/impl/constraints/controllers/ConstraintController;->access$getTracker$p(Landroidx/work/impl/constraints/controllers/ConstraintController;)Landroidx/work/impl/constraints/trackers/ConstraintTracker; +HSPLandroidx/work/impl/constraints/controllers/ConstraintController;->track()Lkotlinx/coroutines/flow/Flow; +Landroidx/work/impl/constraints/controllers/ConstraintController$track$1; +HSPLandroidx/work/impl/constraints/controllers/ConstraintController$track$1;->(Landroidx/work/impl/constraints/controllers/ConstraintController;Lkotlin/coroutines/Continuation;)V +HSPLandroidx/work/impl/constraints/controllers/ConstraintController$track$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLandroidx/work/impl/constraints/controllers/ConstraintController$track$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/work/impl/constraints/controllers/ConstraintController$track$1;->invoke(Lkotlinx/coroutines/channels/ProducerScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLandroidx/work/impl/constraints/controllers/ConstraintController$track$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Landroidx/work/impl/constraints/controllers/ConstraintController$track$1$1; +HSPLandroidx/work/impl/constraints/controllers/ConstraintController$track$1$1;->(Landroidx/work/impl/constraints/controllers/ConstraintController;Landroidx/work/impl/constraints/controllers/ConstraintController$track$1$listener$1;)V +HSPLandroidx/work/impl/constraints/controllers/ConstraintController$track$1$1;->invoke()Ljava/lang/Object; +HSPLandroidx/work/impl/constraints/controllers/ConstraintController$track$1$1;->invoke()V +Landroidx/work/impl/constraints/controllers/ConstraintController$track$1$listener$1; +HSPLandroidx/work/impl/constraints/controllers/ConstraintController$track$1$listener$1;->(Landroidx/work/impl/constraints/controllers/ConstraintController;Lkotlinx/coroutines/channels/ProducerScope;)V +HSPLandroidx/work/impl/constraints/controllers/ConstraintController$track$1$listener$1;->onConstraintChanged(Ljava/lang/Object;)V +Landroidx/work/impl/constraints/controllers/NetworkConnectedController; +HSPLandroidx/work/impl/constraints/controllers/NetworkConnectedController;->(Landroidx/work/impl/constraints/trackers/ConstraintTracker;)V +HSPLandroidx/work/impl/constraints/controllers/NetworkConnectedController;->hasConstraint(Landroidx/work/impl/model/WorkSpec;)Z +HSPLandroidx/work/impl/constraints/controllers/NetworkConnectedController;->isConstrained(Landroidx/work/impl/constraints/NetworkState;)Z +HSPLandroidx/work/impl/constraints/controllers/NetworkConnectedController;->isConstrained(Ljava/lang/Object;)Z +Landroidx/work/impl/constraints/controllers/NetworkMeteredController; +HSPLandroidx/work/impl/constraints/controllers/NetworkMeteredController;->()V +HSPLandroidx/work/impl/constraints/controllers/NetworkMeteredController;->(Landroidx/work/impl/constraints/trackers/ConstraintTracker;)V +HSPLandroidx/work/impl/constraints/controllers/NetworkMeteredController;->hasConstraint(Landroidx/work/impl/model/WorkSpec;)Z +Landroidx/work/impl/constraints/controllers/NetworkMeteredController$Companion; +HSPLandroidx/work/impl/constraints/controllers/NetworkMeteredController$Companion;->()V +HSPLandroidx/work/impl/constraints/controllers/NetworkMeteredController$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/work/impl/constraints/controllers/NetworkNotRoamingController; +HSPLandroidx/work/impl/constraints/controllers/NetworkNotRoamingController;->()V +HSPLandroidx/work/impl/constraints/controllers/NetworkNotRoamingController;->(Landroidx/work/impl/constraints/trackers/ConstraintTracker;)V +HSPLandroidx/work/impl/constraints/controllers/NetworkNotRoamingController;->hasConstraint(Landroidx/work/impl/model/WorkSpec;)Z +Landroidx/work/impl/constraints/controllers/NetworkNotRoamingController$Companion; +HSPLandroidx/work/impl/constraints/controllers/NetworkNotRoamingController$Companion;->()V +HSPLandroidx/work/impl/constraints/controllers/NetworkNotRoamingController$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Landroidx/work/impl/constraints/controllers/NetworkUnmeteredController; +HSPLandroidx/work/impl/constraints/controllers/NetworkUnmeteredController;->(Landroidx/work/impl/constraints/trackers/ConstraintTracker;)V +HSPLandroidx/work/impl/constraints/controllers/NetworkUnmeteredController;->hasConstraint(Landroidx/work/impl/model/WorkSpec;)Z +Landroidx/work/impl/constraints/controllers/StorageNotLowController; +HSPLandroidx/work/impl/constraints/controllers/StorageNotLowController;->(Landroidx/work/impl/constraints/trackers/ConstraintTracker;)V +HSPLandroidx/work/impl/constraints/controllers/StorageNotLowController;->hasConstraint(Landroidx/work/impl/model/WorkSpec;)Z +Landroidx/work/impl/constraints/trackers/BatteryChargingTracker; +HSPLandroidx/work/impl/constraints/trackers/BatteryChargingTracker;->(Landroid/content/Context;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;)V +Landroidx/work/impl/constraints/trackers/BatteryNotLowTracker; +HSPLandroidx/work/impl/constraints/trackers/BatteryNotLowTracker;->(Landroid/content/Context;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;)V +Landroidx/work/impl/constraints/trackers/BroadcastReceiverConstraintTracker; +HSPLandroidx/work/impl/constraints/trackers/BroadcastReceiverConstraintTracker;->(Landroid/content/Context;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;)V +Landroidx/work/impl/constraints/trackers/BroadcastReceiverConstraintTracker$broadcastReceiver$1; +HSPLandroidx/work/impl/constraints/trackers/BroadcastReceiverConstraintTracker$broadcastReceiver$1;->(Landroidx/work/impl/constraints/trackers/BroadcastReceiverConstraintTracker;)V +Landroidx/work/impl/constraints/trackers/ConstraintTracker; +HSPLandroidx/work/impl/constraints/trackers/ConstraintTracker;->(Landroid/content/Context;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;)V +HSPLandroidx/work/impl/constraints/trackers/ConstraintTracker;->addListener(Landroidx/work/impl/constraints/ConstraintListener;)V +HSPLandroidx/work/impl/constraints/trackers/ConstraintTracker;->getAppContext()Landroid/content/Context; +HSPLandroidx/work/impl/constraints/trackers/ConstraintTracker;->removeListener(Landroidx/work/impl/constraints/ConstraintListener;)V +HSPLandroidx/work/impl/constraints/trackers/ConstraintTracker;->setState(Ljava/lang/Object;)V +Landroidx/work/impl/constraints/trackers/ConstraintTrackerKt; +HSPLandroidx/work/impl/constraints/trackers/ConstraintTrackerKt;->()V +HSPLandroidx/work/impl/constraints/trackers/ConstraintTrackerKt;->access$getTAG$p()Ljava/lang/String; +Landroidx/work/impl/constraints/trackers/NetworkStateTracker24; +HSPLandroidx/work/impl/constraints/trackers/NetworkStateTracker24;->(Landroid/content/Context;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;)V +HSPLandroidx/work/impl/constraints/trackers/NetworkStateTracker24;->access$getConnectivityManager$p(Landroidx/work/impl/constraints/trackers/NetworkStateTracker24;)Landroid/net/ConnectivityManager; +HSPLandroidx/work/impl/constraints/trackers/NetworkStateTracker24;->readSystemState()Landroidx/work/impl/constraints/NetworkState; +HSPLandroidx/work/impl/constraints/trackers/NetworkStateTracker24;->readSystemState()Ljava/lang/Object; +HSPLandroidx/work/impl/constraints/trackers/NetworkStateTracker24;->startTracking()V +HSPLandroidx/work/impl/constraints/trackers/NetworkStateTracker24;->stopTracking()V +Landroidx/work/impl/constraints/trackers/NetworkStateTracker24$networkCallback$1; +HSPLandroidx/work/impl/constraints/trackers/NetworkStateTracker24$networkCallback$1;->(Landroidx/work/impl/constraints/trackers/NetworkStateTracker24;)V +HSPLandroidx/work/impl/constraints/trackers/NetworkStateTracker24$networkCallback$1;->onCapabilitiesChanged(Landroid/net/Network;Landroid/net/NetworkCapabilities;)V +Landroidx/work/impl/constraints/trackers/NetworkStateTrackerKt; +HSPLandroidx/work/impl/constraints/trackers/NetworkStateTrackerKt;->()V +HSPLandroidx/work/impl/constraints/trackers/NetworkStateTrackerKt;->NetworkStateTracker(Landroid/content/Context;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;)Landroidx/work/impl/constraints/trackers/ConstraintTracker; +HSPLandroidx/work/impl/constraints/trackers/NetworkStateTrackerKt;->access$getTAG$p()Ljava/lang/String; +HSPLandroidx/work/impl/constraints/trackers/NetworkStateTrackerKt;->getActiveNetworkState(Landroid/net/ConnectivityManager;)Landroidx/work/impl/constraints/NetworkState; +HSPLandroidx/work/impl/constraints/trackers/NetworkStateTrackerKt;->isActiveNetworkValidated(Landroid/net/ConnectivityManager;)Z +Landroidx/work/impl/constraints/trackers/StorageNotLowTracker; +HSPLandroidx/work/impl/constraints/trackers/StorageNotLowTracker;->(Landroid/content/Context;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;)V +Landroidx/work/impl/constraints/trackers/Trackers; +HSPLandroidx/work/impl/constraints/trackers/Trackers;->(Landroid/content/Context;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;Landroidx/work/impl/constraints/trackers/ConstraintTracker;Landroidx/work/impl/constraints/trackers/BatteryNotLowTracker;Landroidx/work/impl/constraints/trackers/ConstraintTracker;Landroidx/work/impl/constraints/trackers/ConstraintTracker;)V +HSPLandroidx/work/impl/constraints/trackers/Trackers;->(Landroid/content/Context;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;Landroidx/work/impl/constraints/trackers/ConstraintTracker;Landroidx/work/impl/constraints/trackers/BatteryNotLowTracker;Landroidx/work/impl/constraints/trackers/ConstraintTracker;Landroidx/work/impl/constraints/trackers/ConstraintTracker;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/work/impl/constraints/trackers/Trackers;->getBatteryChargingTracker()Landroidx/work/impl/constraints/trackers/ConstraintTracker; +HSPLandroidx/work/impl/constraints/trackers/Trackers;->getBatteryNotLowTracker()Landroidx/work/impl/constraints/trackers/BatteryNotLowTracker; +HSPLandroidx/work/impl/constraints/trackers/Trackers;->getNetworkStateTracker()Landroidx/work/impl/constraints/trackers/ConstraintTracker; +HSPLandroidx/work/impl/constraints/trackers/Trackers;->getStorageNotLowTracker()Landroidx/work/impl/constraints/trackers/ConstraintTracker; +Landroidx/work/impl/foreground/ForegroundProcessor; +Landroidx/work/impl/model/Dependency; +HSPLandroidx/work/impl/model/Dependency;->getPrerequisiteId()Ljava/lang/String; +HSPLandroidx/work/impl/model/Dependency;->getWorkSpecId()Ljava/lang/String; +Landroidx/work/impl/model/DependencyDao; +Landroidx/work/impl/model/DependencyDao_Impl; +HSPLandroidx/work/impl/model/DependencyDao_Impl;->(Landroidx/room/RoomDatabase;)V +HSPLandroidx/work/impl/model/DependencyDao_Impl;->getDependentWorkIds(Ljava/lang/String;)Ljava/util/List; +HSPLandroidx/work/impl/model/DependencyDao_Impl;->getRequiredConverters()Ljava/util/List; +HSPLandroidx/work/impl/model/DependencyDao_Impl;->hasDependents(Ljava/lang/String;)Z +HSPLandroidx/work/impl/model/DependencyDao_Impl;->insertDependency(Landroidx/work/impl/model/Dependency;)V +Landroidx/work/impl/model/DependencyDao_Impl$1; +HSPLandroidx/work/impl/model/DependencyDao_Impl$1;->(Landroidx/work/impl/model/DependencyDao_Impl;Landroidx/room/RoomDatabase;)V +HSPLandroidx/work/impl/model/DependencyDao_Impl$1;->bind(Landroidx/sqlite/db/SupportSQLiteStatement;Landroidx/work/impl/model/Dependency;)V +HSPLandroidx/work/impl/model/DependencyDao_Impl$1;->bind(Landroidx/sqlite/db/SupportSQLiteStatement;Ljava/lang/Object;)V +HSPLandroidx/work/impl/model/DependencyDao_Impl$1;->createQuery()Ljava/lang/String; +Landroidx/work/impl/model/Preference; +HSPLandroidx/work/impl/model/Preference;->(Ljava/lang/String;Ljava/lang/Long;)V +HSPLandroidx/work/impl/model/Preference;->getKey()Ljava/lang/String; +HSPLandroidx/work/impl/model/Preference;->getValue()Ljava/lang/Long; +Landroidx/work/impl/model/PreferenceDao; +Landroidx/work/impl/model/PreferenceDao_Impl; +HSPLandroidx/work/impl/model/PreferenceDao_Impl;->(Landroidx/room/RoomDatabase;)V +HSPLandroidx/work/impl/model/PreferenceDao_Impl;->getLongValue(Ljava/lang/String;)Ljava/lang/Long; +HSPLandroidx/work/impl/model/PreferenceDao_Impl;->getRequiredConverters()Ljava/util/List; +HSPLandroidx/work/impl/model/PreferenceDao_Impl;->insertPreference(Landroidx/work/impl/model/Preference;)V +Landroidx/work/impl/model/PreferenceDao_Impl$1; +HSPLandroidx/work/impl/model/PreferenceDao_Impl$1;->(Landroidx/work/impl/model/PreferenceDao_Impl;Landroidx/room/RoomDatabase;)V +HSPLandroidx/work/impl/model/PreferenceDao_Impl$1;->bind(Landroidx/sqlite/db/SupportSQLiteStatement;Landroidx/work/impl/model/Preference;)V +HSPLandroidx/work/impl/model/PreferenceDao_Impl$1;->bind(Landroidx/sqlite/db/SupportSQLiteStatement;Ljava/lang/Object;)V +HSPLandroidx/work/impl/model/PreferenceDao_Impl$1;->createQuery()Ljava/lang/String; +Landroidx/work/impl/model/RawWorkInfoDao; +Landroidx/work/impl/model/RawWorkInfoDao_Impl; +HSPLandroidx/work/impl/model/RawWorkInfoDao_Impl;->getRequiredConverters()Ljava/util/List; +Landroidx/work/impl/model/SystemIdInfo; +HSPLandroidx/work/impl/model/SystemIdInfo;->(Ljava/lang/String;II)V +HSPLandroidx/work/impl/model/SystemIdInfo;->getGeneration()I +Landroidx/work/impl/model/SystemIdInfoDao; +HSPLandroidx/work/impl/model/SystemIdInfoDao;->access$getSystemIdInfo$jd(Landroidx/work/impl/model/SystemIdInfoDao;Landroidx/work/impl/model/WorkGenerationalId;)Landroidx/work/impl/model/SystemIdInfo; +HSPLandroidx/work/impl/model/SystemIdInfoDao;->getSystemIdInfo(Landroidx/work/impl/model/WorkGenerationalId;)Landroidx/work/impl/model/SystemIdInfo; +Landroidx/work/impl/model/SystemIdInfoDao$DefaultImpls; +HSPLandroidx/work/impl/model/SystemIdInfoDao$DefaultImpls;->getSystemIdInfo(Landroidx/work/impl/model/SystemIdInfoDao;Landroidx/work/impl/model/WorkGenerationalId;)Landroidx/work/impl/model/SystemIdInfo; +Landroidx/work/impl/model/SystemIdInfoDao_Impl; +HSPLandroidx/work/impl/model/SystemIdInfoDao_Impl;->(Landroidx/room/RoomDatabase;)V +HSPLandroidx/work/impl/model/SystemIdInfoDao_Impl;->getRequiredConverters()Ljava/util/List; +HSPLandroidx/work/impl/model/SystemIdInfoDao_Impl;->getSystemIdInfo(Landroidx/work/impl/model/WorkGenerationalId;)Landroidx/work/impl/model/SystemIdInfo; +HSPLandroidx/work/impl/model/SystemIdInfoDao_Impl;->getSystemIdInfo(Ljava/lang/String;I)Landroidx/work/impl/model/SystemIdInfo; +HSPLandroidx/work/impl/model/SystemIdInfoDao_Impl;->getWorkSpecIds()Ljava/util/List; +HSPLandroidx/work/impl/model/SystemIdInfoDao_Impl;->insertSystemIdInfo(Landroidx/work/impl/model/SystemIdInfo;)V +HSPLandroidx/work/impl/model/SystemIdInfoDao_Impl;->removeSystemIdInfo(Ljava/lang/String;)V +Landroidx/work/impl/model/SystemIdInfoDao_Impl$1; +HSPLandroidx/work/impl/model/SystemIdInfoDao_Impl$1;->(Landroidx/work/impl/model/SystemIdInfoDao_Impl;Landroidx/room/RoomDatabase;)V +HSPLandroidx/work/impl/model/SystemIdInfoDao_Impl$1;->bind(Landroidx/sqlite/db/SupportSQLiteStatement;Landroidx/work/impl/model/SystemIdInfo;)V +HSPLandroidx/work/impl/model/SystemIdInfoDao_Impl$1;->bind(Landroidx/sqlite/db/SupportSQLiteStatement;Ljava/lang/Object;)V +HSPLandroidx/work/impl/model/SystemIdInfoDao_Impl$1;->createQuery()Ljava/lang/String; +Landroidx/work/impl/model/SystemIdInfoDao_Impl$2; +HSPLandroidx/work/impl/model/SystemIdInfoDao_Impl$2;->(Landroidx/work/impl/model/SystemIdInfoDao_Impl;Landroidx/room/RoomDatabase;)V +Landroidx/work/impl/model/SystemIdInfoDao_Impl$3; +HSPLandroidx/work/impl/model/SystemIdInfoDao_Impl$3;->(Landroidx/work/impl/model/SystemIdInfoDao_Impl;Landroidx/room/RoomDatabase;)V +HSPLandroidx/work/impl/model/SystemIdInfoDao_Impl$3;->createQuery()Ljava/lang/String; +Landroidx/work/impl/model/SystemIdInfoKt; +HSPLandroidx/work/impl/model/SystemIdInfoKt;->systemIdInfo(Landroidx/work/impl/model/WorkGenerationalId;I)Landroidx/work/impl/model/SystemIdInfo; +Landroidx/work/impl/model/WorkGenerationalId; +HSPLandroidx/work/impl/model/WorkGenerationalId;->(Ljava/lang/String;I)V +HSPLandroidx/work/impl/model/WorkGenerationalId;->equals(Ljava/lang/Object;)Z +HSPLandroidx/work/impl/model/WorkGenerationalId;->getGeneration()I +HSPLandroidx/work/impl/model/WorkGenerationalId;->getWorkSpecId()Ljava/lang/String; +HSPLandroidx/work/impl/model/WorkGenerationalId;->hashCode()I +HSPLandroidx/work/impl/model/WorkGenerationalId;->toString()Ljava/lang/String; +Landroidx/work/impl/model/WorkName; +HSPLandroidx/work/impl/model/WorkName;->(Ljava/lang/String;Ljava/lang/String;)V +HSPLandroidx/work/impl/model/WorkName;->getName()Ljava/lang/String; +HSPLandroidx/work/impl/model/WorkName;->getWorkSpecId()Ljava/lang/String; +Landroidx/work/impl/model/WorkNameDao; +Landroidx/work/impl/model/WorkNameDao_Impl; +HSPLandroidx/work/impl/model/WorkNameDao_Impl;->(Landroidx/room/RoomDatabase;)V +HSPLandroidx/work/impl/model/WorkNameDao_Impl;->getRequiredConverters()Ljava/util/List; +HSPLandroidx/work/impl/model/WorkNameDao_Impl;->insert(Landroidx/work/impl/model/WorkName;)V +Landroidx/work/impl/model/WorkNameDao_Impl$1; +HSPLandroidx/work/impl/model/WorkNameDao_Impl$1;->(Landroidx/work/impl/model/WorkNameDao_Impl;Landroidx/room/RoomDatabase;)V +HSPLandroidx/work/impl/model/WorkNameDao_Impl$1;->bind(Landroidx/sqlite/db/SupportSQLiteStatement;Landroidx/work/impl/model/WorkName;)V +HSPLandroidx/work/impl/model/WorkNameDao_Impl$1;->bind(Landroidx/sqlite/db/SupportSQLiteStatement;Ljava/lang/Object;)V +HSPLandroidx/work/impl/model/WorkNameDao_Impl$1;->createQuery()Ljava/lang/String; +Landroidx/work/impl/model/WorkProgressDao; +Landroidx/work/impl/model/WorkProgressDao_Impl; +HSPLandroidx/work/impl/model/WorkProgressDao_Impl;->(Landroidx/room/RoomDatabase;)V +HSPLandroidx/work/impl/model/WorkProgressDao_Impl;->delete(Ljava/lang/String;)V +HSPLandroidx/work/impl/model/WorkProgressDao_Impl;->deleteAll()V +HSPLandroidx/work/impl/model/WorkProgressDao_Impl;->getRequiredConverters()Ljava/util/List; +Landroidx/work/impl/model/WorkProgressDao_Impl$1; +HSPLandroidx/work/impl/model/WorkProgressDao_Impl$1;->(Landroidx/work/impl/model/WorkProgressDao_Impl;Landroidx/room/RoomDatabase;)V +Landroidx/work/impl/model/WorkProgressDao_Impl$2; +HSPLandroidx/work/impl/model/WorkProgressDao_Impl$2;->(Landroidx/work/impl/model/WorkProgressDao_Impl;Landroidx/room/RoomDatabase;)V +HSPLandroidx/work/impl/model/WorkProgressDao_Impl$2;->createQuery()Ljava/lang/String; +Landroidx/work/impl/model/WorkProgressDao_Impl$3; +HSPLandroidx/work/impl/model/WorkProgressDao_Impl$3;->(Landroidx/work/impl/model/WorkProgressDao_Impl;Landroidx/room/RoomDatabase;)V +HSPLandroidx/work/impl/model/WorkProgressDao_Impl$3;->createQuery()Ljava/lang/String; +Landroidx/work/impl/model/WorkSpec; +HSPLandroidx/work/impl/model/WorkSpec;->()V +HSPLandroidx/work/impl/model/WorkSpec;->(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;IIJII)V +HSPLandroidx/work/impl/model/WorkSpec;->(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;IIJIIILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/work/impl/model/WorkSpec;->(Ljava/lang/String;Landroidx/work/impl/model/WorkSpec;)V +HSPLandroidx/work/impl/model/WorkSpec;->(Ljava/lang/String;Ljava/lang/String;)V +HSPLandroidx/work/impl/model/WorkSpec;->calculateNextRunTime()J +HSPLandroidx/work/impl/model/WorkSpec;->getGeneration()I +HSPLandroidx/work/impl/model/WorkSpec;->getNextScheduleTimeOverride()J +HSPLandroidx/work/impl/model/WorkSpec;->getNextScheduleTimeOverrideGeneration()I +HSPLandroidx/work/impl/model/WorkSpec;->getPeriodCount()I +HSPLandroidx/work/impl/model/WorkSpec;->getStopReason()I +HSPLandroidx/work/impl/model/WorkSpec;->hasConstraints()Z +HSPLandroidx/work/impl/model/WorkSpec;->hashCode()I +HSPLandroidx/work/impl/model/WorkSpec;->isBackedOff()Z +HSPLandroidx/work/impl/model/WorkSpec;->isPeriodic()Z +HSPLandroidx/work/impl/model/WorkSpec;->setPeriodic(JJ)V +Landroidx/work/impl/model/WorkSpec$$ExternalSyntheticLambda0; +HSPLandroidx/work/impl/model/WorkSpec$$ExternalSyntheticLambda0;->()V +Landroidx/work/impl/model/WorkSpec$Companion; +HSPLandroidx/work/impl/model/WorkSpec$Companion;->()V +HSPLandroidx/work/impl/model/WorkSpec$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLandroidx/work/impl/model/WorkSpec$Companion;->calculateNextRunTime(ZILandroidx/work/BackoffPolicy;JJIZJJJJ)J +Landroidx/work/impl/model/WorkSpec$IdAndState; +HSPLandroidx/work/impl/model/WorkSpec$IdAndState;->(Ljava/lang/String;Landroidx/work/WorkInfo$State;)V +Landroidx/work/impl/model/WorkSpecDao; +Landroidx/work/impl/model/WorkSpecDao_Impl; +HSPLandroidx/work/impl/model/WorkSpecDao_Impl;->(Landroidx/room/RoomDatabase;)V +HSPLandroidx/work/impl/model/WorkSpecDao_Impl;->getAllEligibleWorkSpecsForScheduling(I)Ljava/util/List; +HSPLandroidx/work/impl/model/WorkSpecDao_Impl;->getEligibleWorkForScheduling(I)Ljava/util/List; +HSPLandroidx/work/impl/model/WorkSpecDao_Impl;->getEligibleWorkForSchedulingWithContentUris()Ljava/util/List; +HSPLandroidx/work/impl/model/WorkSpecDao_Impl;->getInputsFromPrerequisites(Ljava/lang/String;)Ljava/util/List; +HSPLandroidx/work/impl/model/WorkSpecDao_Impl;->getRequiredConverters()Ljava/util/List; +HSPLandroidx/work/impl/model/WorkSpecDao_Impl;->getRunningWork()Ljava/util/List; +HSPLandroidx/work/impl/model/WorkSpecDao_Impl;->getState(Ljava/lang/String;)Landroidx/work/WorkInfo$State; +HSPLandroidx/work/impl/model/WorkSpecDao_Impl;->getWorkSpec(Ljava/lang/String;)Landroidx/work/impl/model/WorkSpec; +HSPLandroidx/work/impl/model/WorkSpecDao_Impl;->getWorkSpecIdAndStatesForName(Ljava/lang/String;)Ljava/util/List; +HSPLandroidx/work/impl/model/WorkSpecDao_Impl;->hasUnfinishedWork()Z +HSPLandroidx/work/impl/model/WorkSpecDao_Impl;->incrementWorkSpecRunAttemptCount(Ljava/lang/String;)I +HSPLandroidx/work/impl/model/WorkSpecDao_Impl;->insertWorkSpec(Landroidx/work/impl/model/WorkSpec;)V +HSPLandroidx/work/impl/model/WorkSpecDao_Impl;->markWorkSpecScheduled(Ljava/lang/String;J)I +HSPLandroidx/work/impl/model/WorkSpecDao_Impl;->resetScheduledState()I +HSPLandroidx/work/impl/model/WorkSpecDao_Impl;->setOutput(Ljava/lang/String;Landroidx/work/Data;)V +HSPLandroidx/work/impl/model/WorkSpecDao_Impl;->setState(Landroidx/work/WorkInfo$State;Ljava/lang/String;)I +HSPLandroidx/work/impl/model/WorkSpecDao_Impl;->setStopReason(Ljava/lang/String;I)V +Landroidx/work/impl/model/WorkSpecDao_Impl$1; +HSPLandroidx/work/impl/model/WorkSpecDao_Impl$1;->(Landroidx/work/impl/model/WorkSpecDao_Impl;Landroidx/room/RoomDatabase;)V +HSPLandroidx/work/impl/model/WorkSpecDao_Impl$1;->bind(Landroidx/sqlite/db/SupportSQLiteStatement;Landroidx/work/impl/model/WorkSpec;)V +HSPLandroidx/work/impl/model/WorkSpecDao_Impl$1;->bind(Landroidx/sqlite/db/SupportSQLiteStatement;Ljava/lang/Object;)V +HSPLandroidx/work/impl/model/WorkSpecDao_Impl$1;->createQuery()Ljava/lang/String; +Landroidx/work/impl/model/WorkSpecDao_Impl$10; +HSPLandroidx/work/impl/model/WorkSpecDao_Impl$10;->(Landroidx/work/impl/model/WorkSpecDao_Impl;Landroidx/room/RoomDatabase;)V +Landroidx/work/impl/model/WorkSpecDao_Impl$11; +HSPLandroidx/work/impl/model/WorkSpecDao_Impl$11;->(Landroidx/work/impl/model/WorkSpecDao_Impl;Landroidx/room/RoomDatabase;)V +Landroidx/work/impl/model/WorkSpecDao_Impl$12; +HSPLandroidx/work/impl/model/WorkSpecDao_Impl$12;->(Landroidx/work/impl/model/WorkSpecDao_Impl;Landroidx/room/RoomDatabase;)V +Landroidx/work/impl/model/WorkSpecDao_Impl$13; +HSPLandroidx/work/impl/model/WorkSpecDao_Impl$13;->(Landroidx/work/impl/model/WorkSpecDao_Impl;Landroidx/room/RoomDatabase;)V +HSPLandroidx/work/impl/model/WorkSpecDao_Impl$13;->createQuery()Ljava/lang/String; +Landroidx/work/impl/model/WorkSpecDao_Impl$14; +HSPLandroidx/work/impl/model/WorkSpecDao_Impl$14;->(Landroidx/work/impl/model/WorkSpecDao_Impl;Landroidx/room/RoomDatabase;)V +HSPLandroidx/work/impl/model/WorkSpecDao_Impl$14;->createQuery()Ljava/lang/String; +Landroidx/work/impl/model/WorkSpecDao_Impl$15; +HSPLandroidx/work/impl/model/WorkSpecDao_Impl$15;->(Landroidx/work/impl/model/WorkSpecDao_Impl;Landroidx/room/RoomDatabase;)V +Landroidx/work/impl/model/WorkSpecDao_Impl$16; +HSPLandroidx/work/impl/model/WorkSpecDao_Impl$16;->(Landroidx/work/impl/model/WorkSpecDao_Impl;Landroidx/room/RoomDatabase;)V +Landroidx/work/impl/model/WorkSpecDao_Impl$17; +HSPLandroidx/work/impl/model/WorkSpecDao_Impl$17;->(Landroidx/work/impl/model/WorkSpecDao_Impl;Landroidx/room/RoomDatabase;)V +HSPLandroidx/work/impl/model/WorkSpecDao_Impl$17;->createQuery()Ljava/lang/String; +Landroidx/work/impl/model/WorkSpecDao_Impl$2; +HSPLandroidx/work/impl/model/WorkSpecDao_Impl$2;->(Landroidx/work/impl/model/WorkSpecDao_Impl;Landroidx/room/RoomDatabase;)V +Landroidx/work/impl/model/WorkSpecDao_Impl$3; +HSPLandroidx/work/impl/model/WorkSpecDao_Impl$3;->(Landroidx/work/impl/model/WorkSpecDao_Impl;Landroidx/room/RoomDatabase;)V +Landroidx/work/impl/model/WorkSpecDao_Impl$4; +HSPLandroidx/work/impl/model/WorkSpecDao_Impl$4;->(Landroidx/work/impl/model/WorkSpecDao_Impl;Landroidx/room/RoomDatabase;)V +HSPLandroidx/work/impl/model/WorkSpecDao_Impl$4;->createQuery()Ljava/lang/String; +Landroidx/work/impl/model/WorkSpecDao_Impl$5; +HSPLandroidx/work/impl/model/WorkSpecDao_Impl$5;->(Landroidx/work/impl/model/WorkSpecDao_Impl;Landroidx/room/RoomDatabase;)V +Landroidx/work/impl/model/WorkSpecDao_Impl$6; +HSPLandroidx/work/impl/model/WorkSpecDao_Impl$6;->(Landroidx/work/impl/model/WorkSpecDao_Impl;Landroidx/room/RoomDatabase;)V +Landroidx/work/impl/model/WorkSpecDao_Impl$7; +HSPLandroidx/work/impl/model/WorkSpecDao_Impl$7;->(Landroidx/work/impl/model/WorkSpecDao_Impl;Landroidx/room/RoomDatabase;)V +HSPLandroidx/work/impl/model/WorkSpecDao_Impl$7;->createQuery()Ljava/lang/String; +Landroidx/work/impl/model/WorkSpecDao_Impl$8; +HSPLandroidx/work/impl/model/WorkSpecDao_Impl$8;->(Landroidx/work/impl/model/WorkSpecDao_Impl;Landroidx/room/RoomDatabase;)V +Landroidx/work/impl/model/WorkSpecDao_Impl$9; +HSPLandroidx/work/impl/model/WorkSpecDao_Impl$9;->(Landroidx/work/impl/model/WorkSpecDao_Impl;Landroidx/room/RoomDatabase;)V +HSPLandroidx/work/impl/model/WorkSpecDao_Impl$9;->createQuery()Ljava/lang/String; +Landroidx/work/impl/model/WorkSpecKt; +HSPLandroidx/work/impl/model/WorkSpecKt;->generationalId(Landroidx/work/impl/model/WorkSpec;)Landroidx/work/impl/model/WorkGenerationalId; +Landroidx/work/impl/model/WorkTag; +HSPLandroidx/work/impl/model/WorkTag;->(Ljava/lang/String;Ljava/lang/String;)V +HSPLandroidx/work/impl/model/WorkTag;->getTag()Ljava/lang/String; +HSPLandroidx/work/impl/model/WorkTag;->getWorkSpecId()Ljava/lang/String; +Landroidx/work/impl/model/WorkTagDao; +HSPLandroidx/work/impl/model/WorkTagDao;->access$insertTags$jd(Landroidx/work/impl/model/WorkTagDao;Ljava/lang/String;Ljava/util/Set;)V +HSPLandroidx/work/impl/model/WorkTagDao;->insertTags(Ljava/lang/String;Ljava/util/Set;)V +Landroidx/work/impl/model/WorkTagDao$DefaultImpls; +HSPLandroidx/work/impl/model/WorkTagDao$DefaultImpls;->insertTags(Landroidx/work/impl/model/WorkTagDao;Ljava/lang/String;Ljava/util/Set;)V +Landroidx/work/impl/model/WorkTagDao_Impl; +HSPLandroidx/work/impl/model/WorkTagDao_Impl;->(Landroidx/room/RoomDatabase;)V +HSPLandroidx/work/impl/model/WorkTagDao_Impl;->getRequiredConverters()Ljava/util/List; +HSPLandroidx/work/impl/model/WorkTagDao_Impl;->getTagsForWorkSpecId(Ljava/lang/String;)Ljava/util/List; +HSPLandroidx/work/impl/model/WorkTagDao_Impl;->insert(Landroidx/work/impl/model/WorkTag;)V +HSPLandroidx/work/impl/model/WorkTagDao_Impl;->insertTags(Ljava/lang/String;Ljava/util/Set;)V +Landroidx/work/impl/model/WorkTagDao_Impl$1; +HSPLandroidx/work/impl/model/WorkTagDao_Impl$1;->(Landroidx/work/impl/model/WorkTagDao_Impl;Landroidx/room/RoomDatabase;)V +HSPLandroidx/work/impl/model/WorkTagDao_Impl$1;->bind(Landroidx/sqlite/db/SupportSQLiteStatement;Landroidx/work/impl/model/WorkTag;)V +HSPLandroidx/work/impl/model/WorkTagDao_Impl$1;->bind(Landroidx/sqlite/db/SupportSQLiteStatement;Ljava/lang/Object;)V +HSPLandroidx/work/impl/model/WorkTagDao_Impl$1;->createQuery()Ljava/lang/String; +Landroidx/work/impl/model/WorkTagDao_Impl$2; +HSPLandroidx/work/impl/model/WorkTagDao_Impl$2;->(Landroidx/work/impl/model/WorkTagDao_Impl;Landroidx/room/RoomDatabase;)V +Landroidx/work/impl/model/WorkTypeConverters; +HSPLandroidx/work/impl/model/WorkTypeConverters;->()V +HSPLandroidx/work/impl/model/WorkTypeConverters;->()V +HSPLandroidx/work/impl/model/WorkTypeConverters;->backoffPolicyToInt(Landroidx/work/BackoffPolicy;)I +HSPLandroidx/work/impl/model/WorkTypeConverters;->byteArrayToSetOfTriggers([B)Ljava/util/Set; +HSPLandroidx/work/impl/model/WorkTypeConverters;->intToBackoffPolicy(I)Landroidx/work/BackoffPolicy; +HSPLandroidx/work/impl/model/WorkTypeConverters;->intToNetworkType(I)Landroidx/work/NetworkType; +HSPLandroidx/work/impl/model/WorkTypeConverters;->intToOutOfQuotaPolicy(I)Landroidx/work/OutOfQuotaPolicy; +HSPLandroidx/work/impl/model/WorkTypeConverters;->intToState(I)Landroidx/work/WorkInfo$State; +HSPLandroidx/work/impl/model/WorkTypeConverters;->networkTypeToInt(Landroidx/work/NetworkType;)I +HSPLandroidx/work/impl/model/WorkTypeConverters;->outOfQuotaPolicyToInt(Landroidx/work/OutOfQuotaPolicy;)I +HSPLandroidx/work/impl/model/WorkTypeConverters;->setOfTriggersToByteArray(Ljava/util/Set;)[B +HSPLandroidx/work/impl/model/WorkTypeConverters;->stateToInt(Landroidx/work/WorkInfo$State;)I +Landroidx/work/impl/model/WorkTypeConverters$WhenMappings; +HSPLandroidx/work/impl/model/WorkTypeConverters$WhenMappings;->()V +Landroidx/work/impl/utils/Api28Impl; +HSPLandroidx/work/impl/utils/Api28Impl;->()V +HSPLandroidx/work/impl/utils/Api28Impl;->()V +HSPLandroidx/work/impl/utils/Api28Impl;->getProcessName()Ljava/lang/String; +Landroidx/work/impl/utils/EnqueueRunnable; +HSPLandroidx/work/impl/utils/EnqueueRunnable;->()V +HSPLandroidx/work/impl/utils/EnqueueRunnable;->(Landroidx/work/impl/WorkContinuationImpl;)V +HSPLandroidx/work/impl/utils/EnqueueRunnable;->(Landroidx/work/impl/WorkContinuationImpl;Landroidx/work/impl/OperationImpl;)V +HSPLandroidx/work/impl/utils/EnqueueRunnable;->addToDatabase()Z +HSPLandroidx/work/impl/utils/EnqueueRunnable;->enqueueContinuation(Landroidx/work/impl/WorkContinuationImpl;)Z +HSPLandroidx/work/impl/utils/EnqueueRunnable;->enqueueWorkWithPrerequisites(Landroidx/work/impl/WorkManagerImpl;Ljava/util/List;[Ljava/lang/String;Ljava/lang/String;Landroidx/work/ExistingWorkPolicy;)Z +HSPLandroidx/work/impl/utils/EnqueueRunnable;->getOperation()Landroidx/work/Operation; +HSPLandroidx/work/impl/utils/EnqueueRunnable;->processContinuation(Landroidx/work/impl/WorkContinuationImpl;)Z +HSPLandroidx/work/impl/utils/EnqueueRunnable;->run()V +HSPLandroidx/work/impl/utils/EnqueueRunnable;->scheduleWorkInBackground()V +Landroidx/work/impl/utils/EnqueueUtilsKt; +HSPLandroidx/work/impl/utils/EnqueueUtilsKt;->checkContentUriTriggerWorkerLimits(Landroidx/work/impl/WorkDatabase;Landroidx/work/Configuration;Landroidx/work/impl/WorkContinuationImpl;)V +HSPLandroidx/work/impl/utils/EnqueueUtilsKt;->wrapInConstraintTrackingWorkerIfNeeded(Ljava/util/List;Landroidx/work/impl/model/WorkSpec;)Landroidx/work/impl/model/WorkSpec; +Landroidx/work/impl/utils/ForceStopRunnable; +HSPLandroidx/work/impl/utils/ForceStopRunnable;->()V +HSPLandroidx/work/impl/utils/ForceStopRunnable;->(Landroid/content/Context;Landroidx/work/impl/WorkManagerImpl;)V +HSPLandroidx/work/impl/utils/ForceStopRunnable;->cleanUp()Z +HSPLandroidx/work/impl/utils/ForceStopRunnable;->forceStopRunnable()V +HSPLandroidx/work/impl/utils/ForceStopRunnable;->getIntent(Landroid/content/Context;)Landroid/content/Intent; +HSPLandroidx/work/impl/utils/ForceStopRunnable;->getPendingIntent(Landroid/content/Context;I)Landroid/app/PendingIntent; +HSPLandroidx/work/impl/utils/ForceStopRunnable;->isForceStopped()Z +HSPLandroidx/work/impl/utils/ForceStopRunnable;->multiProcessChecks()Z +HSPLandroidx/work/impl/utils/ForceStopRunnable;->run()V +HSPLandroidx/work/impl/utils/ForceStopRunnable;->shouldRescheduleWorkers()Z +Landroidx/work/impl/utils/ForceStopRunnable$BroadcastReceiver; +Landroidx/work/impl/utils/IdGenerator; +HSPLandroidx/work/impl/utils/IdGenerator;->$r8$lambda$LyUC9fmKDw6AhARQq6V7VCdkafU(Landroidx/work/impl/utils/IdGenerator;II)Ljava/lang/Integer; +HSPLandroidx/work/impl/utils/IdGenerator;->(Landroidx/work/impl/WorkDatabase;)V +HSPLandroidx/work/impl/utils/IdGenerator;->nextJobSchedulerIdWithRange$lambda$0(Landroidx/work/impl/utils/IdGenerator;II)Ljava/lang/Integer; +HSPLandroidx/work/impl/utils/IdGenerator;->nextJobSchedulerIdWithRange(II)I +Landroidx/work/impl/utils/IdGenerator$$ExternalSyntheticLambda1; +HSPLandroidx/work/impl/utils/IdGenerator$$ExternalSyntheticLambda1;->(Landroidx/work/impl/utils/IdGenerator;II)V +HSPLandroidx/work/impl/utils/IdGenerator$$ExternalSyntheticLambda1;->call()Ljava/lang/Object; +Landroidx/work/impl/utils/IdGeneratorKt; +HSPLandroidx/work/impl/utils/IdGeneratorKt;->access$nextId(Landroidx/work/impl/WorkDatabase;Ljava/lang/String;)I +HSPLandroidx/work/impl/utils/IdGeneratorKt;->nextId(Landroidx/work/impl/WorkDatabase;Ljava/lang/String;)I +HSPLandroidx/work/impl/utils/IdGeneratorKt;->updatePreference(Landroidx/work/impl/WorkDatabase;Ljava/lang/String;I)V +Landroidx/work/impl/utils/NetworkApi21; +HSPLandroidx/work/impl/utils/NetworkApi21;->getNetworkCapabilitiesCompat(Landroid/net/ConnectivityManager;Landroid/net/Network;)Landroid/net/NetworkCapabilities; +HSPLandroidx/work/impl/utils/NetworkApi21;->hasCapabilityCompat(Landroid/net/NetworkCapabilities;I)Z +HSPLandroidx/work/impl/utils/NetworkApi21;->unregisterNetworkCallbackCompat(Landroid/net/ConnectivityManager;Landroid/net/ConnectivityManager$NetworkCallback;)V +Landroidx/work/impl/utils/NetworkApi23; +HSPLandroidx/work/impl/utils/NetworkApi23;->getActiveNetworkCompat(Landroid/net/ConnectivityManager;)Landroid/net/Network; +Landroidx/work/impl/utils/NetworkApi24; +HSPLandroidx/work/impl/utils/NetworkApi24;->registerDefaultNetworkCallbackCompat(Landroid/net/ConnectivityManager;Landroid/net/ConnectivityManager$NetworkCallback;)V +Landroidx/work/impl/utils/PackageManagerHelper; +HSPLandroidx/work/impl/utils/PackageManagerHelper;->()V +HSPLandroidx/work/impl/utils/PackageManagerHelper;->getComponentEnabledSetting(Landroid/content/Context;Ljava/lang/String;)I +HSPLandroidx/work/impl/utils/PackageManagerHelper;->isComponentEnabled(IZ)Z +HSPLandroidx/work/impl/utils/PackageManagerHelper;->setComponentEnabled(Landroid/content/Context;Ljava/lang/Class;Z)V +Landroidx/work/impl/utils/PreferenceUtils; +HSPLandroidx/work/impl/utils/PreferenceUtils;->(Landroidx/work/impl/WorkDatabase;)V +HSPLandroidx/work/impl/utils/PreferenceUtils;->getLastForceStopEventMillis()J +HSPLandroidx/work/impl/utils/PreferenceUtils;->getNeedsReschedule()Z +HSPLandroidx/work/impl/utils/PreferenceUtils;->setLastForceStopEventMillis(J)V +Landroidx/work/impl/utils/ProcessUtils; +HSPLandroidx/work/impl/utils/ProcessUtils;->()V +HSPLandroidx/work/impl/utils/ProcessUtils;->getProcessName(Landroid/content/Context;)Ljava/lang/String; +HSPLandroidx/work/impl/utils/ProcessUtils;->isDefaultProcess(Landroid/content/Context;Landroidx/work/Configuration;)Z +Landroidx/work/impl/utils/SerialExecutorImpl; +HSPLandroidx/work/impl/utils/SerialExecutorImpl;->(Ljava/util/concurrent/Executor;)V +HSPLandroidx/work/impl/utils/SerialExecutorImpl;->execute(Ljava/lang/Runnable;)V +HSPLandroidx/work/impl/utils/SerialExecutorImpl;->scheduleNext()V +Landroidx/work/impl/utils/SerialExecutorImpl$Task; +HSPLandroidx/work/impl/utils/SerialExecutorImpl$Task;->(Landroidx/work/impl/utils/SerialExecutorImpl;Ljava/lang/Runnable;)V +HSPLandroidx/work/impl/utils/SerialExecutorImpl$Task;->run()V +Landroidx/work/impl/utils/StartWorkRunnable; +HSPLandroidx/work/impl/utils/StartWorkRunnable;->(Landroidx/work/impl/Processor;Landroidx/work/impl/StartStopToken;Landroidx/work/WorkerParameters$RuntimeExtras;)V +HSPLandroidx/work/impl/utils/StartWorkRunnable;->run()V +Landroidx/work/impl/utils/SynchronousExecutor; +HSPLandroidx/work/impl/utils/SynchronousExecutor;->()V +HSPLandroidx/work/impl/utils/SynchronousExecutor;->execute(Ljava/lang/Runnable;)V +Landroidx/work/impl/utils/WorkForegroundRunnable; +HSPLandroidx/work/impl/utils/WorkForegroundRunnable;->()V +HSPLandroidx/work/impl/utils/WorkForegroundRunnable;->(Landroid/content/Context;Landroidx/work/impl/model/WorkSpec;Landroidx/work/ListenableWorker;Landroidx/work/ForegroundUpdater;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;)V +HSPLandroidx/work/impl/utils/WorkForegroundRunnable;->getFuture()Lcom/google/common/util/concurrent/ListenableFuture; +HSPLandroidx/work/impl/utils/WorkForegroundRunnable;->run()V +Landroidx/work/impl/utils/WorkForegroundUpdater; +HSPLandroidx/work/impl/utils/WorkForegroundUpdater;->()V +HSPLandroidx/work/impl/utils/WorkForegroundUpdater;->(Landroidx/work/impl/WorkDatabase;Landroidx/work/impl/foreground/ForegroundProcessor;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;)V +Landroidx/work/impl/utils/WorkProgressUpdater; +HSPLandroidx/work/impl/utils/WorkProgressUpdater;->()V +HSPLandroidx/work/impl/utils/WorkProgressUpdater;->(Landroidx/work/impl/WorkDatabase;Landroidx/work/impl/utils/taskexecutor/TaskExecutor;)V +Landroidx/work/impl/utils/futures/AbstractFuture; +HSPLandroidx/work/impl/utils/futures/AbstractFuture;->()V +HSPLandroidx/work/impl/utils/futures/AbstractFuture;->()V +HSPLandroidx/work/impl/utils/futures/AbstractFuture;->addListener(Ljava/lang/Runnable;Ljava/util/concurrent/Executor;)V +HSPLandroidx/work/impl/utils/futures/AbstractFuture;->afterDone()V +HSPLandroidx/work/impl/utils/futures/AbstractFuture;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/work/impl/utils/futures/AbstractFuture;->clearListeners(Landroidx/work/impl/utils/futures/AbstractFuture$Listener;)Landroidx/work/impl/utils/futures/AbstractFuture$Listener; +HSPLandroidx/work/impl/utils/futures/AbstractFuture;->complete(Landroidx/work/impl/utils/futures/AbstractFuture;)V +HSPLandroidx/work/impl/utils/futures/AbstractFuture;->executeListener(Ljava/lang/Runnable;Ljava/util/concurrent/Executor;)V +HSPLandroidx/work/impl/utils/futures/AbstractFuture;->get()Ljava/lang/Object; +HSPLandroidx/work/impl/utils/futures/AbstractFuture;->getDoneValue(Ljava/lang/Object;)Ljava/lang/Object; +HSPLandroidx/work/impl/utils/futures/AbstractFuture;->getFutureValue(Lcom/google/common/util/concurrent/ListenableFuture;)Ljava/lang/Object; +HSPLandroidx/work/impl/utils/futures/AbstractFuture;->isCancelled()Z +HSPLandroidx/work/impl/utils/futures/AbstractFuture;->isDone()Z +HSPLandroidx/work/impl/utils/futures/AbstractFuture;->releaseWaiters()V +HSPLandroidx/work/impl/utils/futures/AbstractFuture;->set(Ljava/lang/Object;)Z +HSPLandroidx/work/impl/utils/futures/AbstractFuture;->setFuture(Lcom/google/common/util/concurrent/ListenableFuture;)Z +Landroidx/work/impl/utils/futures/AbstractFuture$AtomicHelper; +HSPLandroidx/work/impl/utils/futures/AbstractFuture$AtomicHelper;->()V +HSPLandroidx/work/impl/utils/futures/AbstractFuture$AtomicHelper;->(Landroidx/work/impl/utils/futures/AbstractFuture$1;)V +Landroidx/work/impl/utils/futures/AbstractFuture$Cancellation; +Landroidx/work/impl/utils/futures/AbstractFuture$Failure; +Landroidx/work/impl/utils/futures/AbstractFuture$Listener; +HSPLandroidx/work/impl/utils/futures/AbstractFuture$Listener;->()V +HSPLandroidx/work/impl/utils/futures/AbstractFuture$Listener;->(Ljava/lang/Runnable;Ljava/util/concurrent/Executor;)V +Landroidx/work/impl/utils/futures/AbstractFuture$SafeAtomicHelper; +HSPLandroidx/work/impl/utils/futures/AbstractFuture$SafeAtomicHelper;->(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 +HSPLandroidx/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 +HSPLandroidx/work/impl/utils/futures/AbstractFuture$SafeAtomicHelper;->casValue(Landroidx/work/impl/utils/futures/AbstractFuture;Ljava/lang/Object;Ljava/lang/Object;)Z +HSPLandroidx/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 +Landroidx/work/impl/utils/futures/AbstractFuture$SetFuture; +HSPLandroidx/work/impl/utils/futures/AbstractFuture$SetFuture;->(Landroidx/work/impl/utils/futures/AbstractFuture;Lcom/google/common/util/concurrent/ListenableFuture;)V +Landroidx/work/impl/utils/futures/AbstractFuture$Waiter; +HSPLandroidx/work/impl/utils/futures/AbstractFuture$Waiter;->()V +HSPLandroidx/work/impl/utils/futures/AbstractFuture$Waiter;->(Z)V +Landroidx/work/impl/utils/futures/DirectExecutor; +HSPLandroidx/work/impl/utils/futures/DirectExecutor;->$values()[Landroidx/work/impl/utils/futures/DirectExecutor; +HSPLandroidx/work/impl/utils/futures/DirectExecutor;->()V +HSPLandroidx/work/impl/utils/futures/DirectExecutor;->(Ljava/lang/String;I)V +Landroidx/work/impl/utils/futures/SettableFuture; +HSPLandroidx/work/impl/utils/futures/SettableFuture;->()V +HSPLandroidx/work/impl/utils/futures/SettableFuture;->create()Landroidx/work/impl/utils/futures/SettableFuture; +HSPLandroidx/work/impl/utils/futures/SettableFuture;->set(Ljava/lang/Object;)Z +HSPLandroidx/work/impl/utils/futures/SettableFuture;->setFuture(Lcom/google/common/util/concurrent/ListenableFuture;)Z +Landroidx/work/impl/utils/taskexecutor/SerialExecutor; +Landroidx/work/impl/utils/taskexecutor/TaskExecutor; +HSPLandroidx/work/impl/utils/taskexecutor/TaskExecutor;->executeOnTaskThread(Ljava/lang/Runnable;)V +Landroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor; +HSPLandroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;->(Ljava/util/concurrent/Executor;)V +HSPLandroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;->getMainThreadExecutor()Ljava/util/concurrent/Executor; +HSPLandroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;->getSerialTaskExecutor()Landroidx/work/impl/utils/SerialExecutorImpl; +HSPLandroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;->getSerialTaskExecutor()Landroidx/work/impl/utils/taskexecutor/SerialExecutor; +HSPLandroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;->getTaskCoroutineDispatcher()Lkotlinx/coroutines/CoroutineDispatcher; +Landroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor$1; +HSPLandroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor$1;->(Landroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor;)V +HSPLandroidx/work/impl/utils/taskexecutor/WorkManagerTaskExecutor$1;->execute(Ljava/lang/Runnable;)V +Lapp/cash/sqldelight/BaseTransacterImpl; +HSPLapp/cash/sqldelight/BaseTransacterImpl;->(Lapp/cash/sqldelight/db/SqlDriver;)V +HSPLapp/cash/sqldelight/BaseTransacterImpl;->getDriver()Lapp/cash/sqldelight/db/SqlDriver; +HSPLapp/cash/sqldelight/BaseTransacterImpl;->postTransactionCleanup(Lapp/cash/sqldelight/Transacter$Transaction;Lapp/cash/sqldelight/Transacter$Transaction;Ljava/lang/Throwable;Ljava/lang/Object;)Ljava/lang/Object; +Lapp/cash/sqldelight/ColumnAdapter; +Lapp/cash/sqldelight/ExecutableQuery; +HSPLapp/cash/sqldelight/ExecutableQuery;->(Lkotlin/jvm/functions/Function1;)V +HSPLapp/cash/sqldelight/ExecutableQuery;->executeAsList()Ljava/util/List; +Lapp/cash/sqldelight/ExecutableQuery$executeAsList$1; +HSPLapp/cash/sqldelight/ExecutableQuery$executeAsList$1;->(Lapp/cash/sqldelight/ExecutableQuery;)V +HSPLapp/cash/sqldelight/ExecutableQuery$executeAsList$1;->invoke(Lapp/cash/sqldelight/db/SqlCursor;)Lapp/cash/sqldelight/db/QueryResult; +HSPLapp/cash/sqldelight/ExecutableQuery$executeAsList$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lapp/cash/sqldelight/Query; +HSPLapp/cash/sqldelight/Query;->(Lkotlin/jvm/functions/Function1;)V +Lapp/cash/sqldelight/Query$Listener; +Lapp/cash/sqldelight/QueryKt; +HSPLapp/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; +Lapp/cash/sqldelight/RollbackException; +Lapp/cash/sqldelight/SimpleQuery; +HSPLapp/cash/sqldelight/SimpleQuery;->(I[Ljava/lang/String;Lapp/cash/sqldelight/db/SqlDriver;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V +HSPLapp/cash/sqldelight/SimpleQuery;->addListener(Lapp/cash/sqldelight/Query$Listener;)V +HSPLapp/cash/sqldelight/SimpleQuery;->execute(Lkotlin/jvm/functions/Function1;)Lapp/cash/sqldelight/db/QueryResult; +HSPLapp/cash/sqldelight/SimpleQuery;->removeListener(Lapp/cash/sqldelight/Query$Listener;)V +Lapp/cash/sqldelight/Transacter; +Lapp/cash/sqldelight/Transacter$DefaultImpls; +HSPLapp/cash/sqldelight/Transacter$DefaultImpls;->transaction$default(Lapp/cash/sqldelight/Transacter;ZLkotlin/jvm/functions/Function1;ILjava/lang/Object;)V +Lapp/cash/sqldelight/Transacter$Transaction; +HSPLapp/cash/sqldelight/Transacter$Transaction;->()V +HSPLapp/cash/sqldelight/Transacter$Transaction;->checkThreadConfinement$runtime()V +HSPLapp/cash/sqldelight/Transacter$Transaction;->enclosingTransaction$runtime()Lapp/cash/sqldelight/Transacter$Transaction; +HSPLapp/cash/sqldelight/Transacter$Transaction;->endTransaction$runtime()Lapp/cash/sqldelight/db/QueryResult; +HSPLapp/cash/sqldelight/Transacter$Transaction;->getChildrenSuccessful$runtime()Z +HSPLapp/cash/sqldelight/Transacter$Transaction;->getPendingTables$runtime()Ljava/util/Set; +HSPLapp/cash/sqldelight/Transacter$Transaction;->getPostCommitHooks$runtime()Ljava/util/List; +HSPLapp/cash/sqldelight/Transacter$Transaction;->getRegisteredQueries$runtime()Ljava/util/Set; +HSPLapp/cash/sqldelight/Transacter$Transaction;->getSuccessful$runtime()Z +HSPLapp/cash/sqldelight/Transacter$Transaction;->setSuccessful$runtime(Z)V +HSPLapp/cash/sqldelight/Transacter$Transaction;->setTransacter$runtime(Lapp/cash/sqldelight/TransacterBase;)V +Lapp/cash/sqldelight/TransacterBase; +Lapp/cash/sqldelight/TransacterImpl; +HSPLapp/cash/sqldelight/TransacterImpl;->(Lapp/cash/sqldelight/db/SqlDriver;)V +HSPLapp/cash/sqldelight/TransacterImpl;->transaction(ZLkotlin/jvm/functions/Function1;)V +HSPLapp/cash/sqldelight/TransacterImpl;->transactionWithWrapper(ZLkotlin/jvm/functions/Function1;)Ljava/lang/Object; +Lapp/cash/sqldelight/TransactionCallbacks; +Lapp/cash/sqldelight/TransactionWithReturn; +Lapp/cash/sqldelight/TransactionWithoutReturn; +Lapp/cash/sqldelight/TransactionWrapper; +PLapp/cash/sqldelight/TransactionWrapper;->(Lapp/cash/sqldelight/Transacter$Transaction;)V +Lapp/cash/sqldelight/async/coroutines/QueryExtensionsKt; +HSPLapp/cash/sqldelight/async/coroutines/QueryExtensionsKt;->awaitAsList(Lapp/cash/sqldelight/ExecutableQuery;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lapp/cash/sqldelight/async/coroutines/QueryExtensionsKt$awaitAsList$2; +HSPLapp/cash/sqldelight/async/coroutines/QueryExtensionsKt$awaitAsList$2;->(Lapp/cash/sqldelight/ExecutableQuery;)V +HSPLapp/cash/sqldelight/async/coroutines/QueryExtensionsKt$awaitAsList$2;->invoke(Lapp/cash/sqldelight/db/SqlCursor;)Lapp/cash/sqldelight/db/QueryResult; +HSPLapp/cash/sqldelight/async/coroutines/QueryExtensionsKt$awaitAsList$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lapp/cash/sqldelight/coroutines/FlowQuery; +HSPLapp/cash/sqldelight/coroutines/FlowQuery;->mapToList(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/flow/Flow; +HSPLapp/cash/sqldelight/coroutines/FlowQuery;->toFlow(Lapp/cash/sqldelight/Query;)Lkotlinx/coroutines/flow/Flow; +Lapp/cash/sqldelight/coroutines/FlowQuery$asFlow$1; +HSPLapp/cash/sqldelight/coroutines/FlowQuery$asFlow$1;->(Lapp/cash/sqldelight/Query;Lkotlin/coroutines/Continuation;)V +HSPLapp/cash/sqldelight/coroutines/FlowQuery$asFlow$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLapp/cash/sqldelight/coroutines/FlowQuery$asFlow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLapp/cash/sqldelight/coroutines/FlowQuery$asFlow$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLapp/cash/sqldelight/coroutines/FlowQuery$asFlow$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lapp/cash/sqldelight/coroutines/FlowQuery$asFlow$1$$ExternalSyntheticLambda0; +HSPLapp/cash/sqldelight/coroutines/FlowQuery$asFlow$1$$ExternalSyntheticLambda0;->(Lkotlinx/coroutines/channels/Channel;)V +Lapp/cash/sqldelight/coroutines/FlowQuery$mapToList$$inlined$map$1; +HSPLapp/cash/sqldelight/coroutines/FlowQuery$mapToList$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/CoroutineContext;)V +HSPLapp/cash/sqldelight/coroutines/FlowQuery$mapToList$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lapp/cash/sqldelight/coroutines/FlowQuery$mapToList$$inlined$map$1$2; +HSPLapp/cash/sqldelight/coroutines/FlowQuery$mapToList$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/CoroutineContext;)V +HSPLapp/cash/sqldelight/coroutines/FlowQuery$mapToList$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lapp/cash/sqldelight/coroutines/FlowQuery$mapToList$$inlined$map$1$2$1; +HSPLapp/cash/sqldelight/coroutines/FlowQuery$mapToList$$inlined$map$1$2$1;->(Lapp/cash/sqldelight/coroutines/FlowQuery$mapToList$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +HSPLapp/cash/sqldelight/coroutines/FlowQuery$mapToList$$inlined$map$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lapp/cash/sqldelight/coroutines/FlowQuery$mapToList$1$1; +HSPLapp/cash/sqldelight/coroutines/FlowQuery$mapToList$1$1;->(Lapp/cash/sqldelight/Query;Lkotlin/coroutines/Continuation;)V +HSPLapp/cash/sqldelight/coroutines/FlowQuery$mapToList$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLapp/cash/sqldelight/coroutines/FlowQuery$mapToList$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lapp/cash/sqldelight/db/AfterVersion; +Lapp/cash/sqldelight/db/QueryResult; +HSPLapp/cash/sqldelight/db/QueryResult;->()V +Lapp/cash/sqldelight/db/QueryResult$AsyncValue; +Lapp/cash/sqldelight/db/QueryResult$Companion; +HSPLapp/cash/sqldelight/db/QueryResult$Companion;->()V +HSPLapp/cash/sqldelight/db/QueryResult$Companion;->()V +HSPLapp/cash/sqldelight/db/QueryResult$Companion;->getUnit-mlR-ZEE()Ljava/lang/Object; +Lapp/cash/sqldelight/db/QueryResult$Value; +HSPLapp/cash/sqldelight/db/QueryResult$Value;->(Ljava/lang/Object;)V +HSPLapp/cash/sqldelight/db/QueryResult$Value;->await(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLapp/cash/sqldelight/db/QueryResult$Value;->await-impl(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLapp/cash/sqldelight/db/QueryResult$Value;->box-impl(Ljava/lang/Object;)Lapp/cash/sqldelight/db/QueryResult$Value; +HSPLapp/cash/sqldelight/db/QueryResult$Value;->constructor-impl(Ljava/lang/Object;)Ljava/lang/Object; +HSPLapp/cash/sqldelight/db/QueryResult$Value;->getValue()Ljava/lang/Object; +Lapp/cash/sqldelight/db/SqlCursor; +Lapp/cash/sqldelight/db/SqlDriver; +Lapp/cash/sqldelight/db/SqlDriver$DefaultImpls; +HSPLapp/cash/sqldelight/db/SqlDriver$DefaultImpls;->execute$default(Lapp/cash/sqldelight/db/SqlDriver;Ljava/lang/Integer;Ljava/lang/String;ILkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lapp/cash/sqldelight/db/QueryResult; +Lapp/cash/sqldelight/db/SqlPreparedStatement; +Lapp/cash/sqldelight/db/SqlSchema; +Lapp/cash/sqldelight/driver/android/AndroidCursor; +HSPLapp/cash/sqldelight/driver/android/AndroidCursor;->(Landroid/database/Cursor;Ljava/lang/Long;)V +HSPLapp/cash/sqldelight/driver/android/AndroidCursor;->next()Lapp/cash/sqldelight/db/QueryResult; +HSPLapp/cash/sqldelight/driver/android/AndroidCursor;->next-mlR-ZEE()Ljava/lang/Object; +Lapp/cash/sqldelight/driver/android/AndroidPreparedStatement; +HSPLapp/cash/sqldelight/driver/android/AndroidPreparedStatement;->(Landroidx/sqlite/db/SupportSQLiteStatement;)V +HSPLapp/cash/sqldelight/driver/android/AndroidPreparedStatement;->close()V +HSPLapp/cash/sqldelight/driver/android/AndroidPreparedStatement;->execute()J +Lapp/cash/sqldelight/driver/android/AndroidQuery; +HSPLapp/cash/sqldelight/driver/android/AndroidQuery;->(Ljava/lang/String;Landroidx/sqlite/db/SupportSQLiteDatabase;ILjava/lang/Long;)V +HSPLapp/cash/sqldelight/driver/android/AndroidQuery;->bindTo(Landroidx/sqlite/db/SupportSQLiteProgram;)V +HSPLapp/cash/sqldelight/driver/android/AndroidQuery;->close()V +HSPLapp/cash/sqldelight/driver/android/AndroidQuery;->executeQuery(Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; +HSPLapp/cash/sqldelight/driver/android/AndroidQuery;->getArgCount()I +HSPLapp/cash/sqldelight/driver/android/AndroidQuery;->getSql()Ljava/lang/String; +Lapp/cash/sqldelight/driver/android/AndroidSqliteDriver; +HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;->(Landroidx/sqlite/db/SupportSQLiteOpenHelper;)V +HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;->(Landroidx/sqlite/db/SupportSQLiteOpenHelper;Landroidx/sqlite/db/SupportSQLiteDatabase;ILjava/lang/Long;)V +HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;->(Landroidx/sqlite/db/SupportSQLiteOpenHelper;Landroidx/sqlite/db/SupportSQLiteDatabase;ILjava/lang/Long;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;->access$getDatabase(Lapp/cash/sqldelight/driver/android/AndroidSqliteDriver;)Landroidx/sqlite/db/SupportSQLiteDatabase; +HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;->access$getOpenHelper$p(Lapp/cash/sqldelight/driver/android/AndroidSqliteDriver;)Landroidx/sqlite/db/SupportSQLiteOpenHelper; +HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;->access$getTransactions$p(Lapp/cash/sqldelight/driver/android/AndroidSqliteDriver;)Ljava/lang/ThreadLocal; +HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;->access$getWindowSizeBytes$p(Lapp/cash/sqldelight/driver/android/AndroidSqliteDriver;)Ljava/lang/Long; +HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;->addListener([Ljava/lang/String;Lapp/cash/sqldelight/Query$Listener;)V +HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;->execute(Ljava/lang/Integer;Ljava/lang/String;ILkotlin/jvm/functions/Function1;)Lapp/cash/sqldelight/db/QueryResult; +HSPLapp/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; +HSPLapp/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; +HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;->executeQuery-0yMERmw(Ljava/lang/Integer;Ljava/lang/String;Lkotlin/jvm/functions/Function1;ILkotlin/jvm/functions/Function1;)Ljava/lang/Object; +HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;->getDatabase()Landroidx/sqlite/db/SupportSQLiteDatabase; +HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;->newTransaction()Lapp/cash/sqldelight/db/QueryResult; +HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver;->removeListener([Ljava/lang/String;Lapp/cash/sqldelight/Query$Listener;)V +Lapp/cash/sqldelight/driver/android/AndroidSqliteDriver$Callback; +HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$Callback;->(Lapp/cash/sqldelight/db/SqlSchema;[Lapp/cash/sqldelight/db/AfterVersion;)V +HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$Callback;->onCreate(Landroidx/sqlite/db/SupportSQLiteDatabase;)V +Lapp/cash/sqldelight/driver/android/AndroidSqliteDriver$Transaction; +HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$Transaction;->(Lapp/cash/sqldelight/driver/android/AndroidSqliteDriver;Lapp/cash/sqldelight/Transacter$Transaction;)V +HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$Transaction;->endTransaction(Z)Lapp/cash/sqldelight/db/QueryResult; +HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$Transaction;->getEnclosingTransaction()Lapp/cash/sqldelight/Transacter$Transaction; +Lapp/cash/sqldelight/driver/android/AndroidSqliteDriver$database$2; +HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$database$2;->(Lapp/cash/sqldelight/driver/android/AndroidSqliteDriver;Landroidx/sqlite/db/SupportSQLiteDatabase;)V +HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$database$2;->invoke()Landroidx/sqlite/db/SupportSQLiteDatabase; +HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$database$2;->invoke()Ljava/lang/Object; +Lapp/cash/sqldelight/driver/android/AndroidSqliteDriver$execute$1; +HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$execute$1;->(Lapp/cash/sqldelight/driver/android/AndroidSqliteDriver;Ljava/lang/String;)V +HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$execute$1;->invoke()Lapp/cash/sqldelight/driver/android/AndroidStatement; +HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$execute$1;->invoke()Ljava/lang/Object; +Lapp/cash/sqldelight/driver/android/AndroidSqliteDriver$execute$2; +HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$execute$2;->()V +HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$execute$2;->()V +HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$execute$2;->invoke(Lapp/cash/sqldelight/driver/android/AndroidStatement;)Ljava/lang/Long; +HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$execute$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lapp/cash/sqldelight/driver/android/AndroidSqliteDriver$executeQuery$1; +PLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$executeQuery$1;->(Ljava/lang/String;Lapp/cash/sqldelight/driver/android/AndroidSqliteDriver;I)V +HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$executeQuery$1;->invoke()Lapp/cash/sqldelight/driver/android/AndroidStatement; +HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$executeQuery$1;->invoke()Ljava/lang/Object; +Lapp/cash/sqldelight/driver/android/AndroidSqliteDriver$executeQuery$2; +PLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$executeQuery$2;->(Lkotlin/jvm/functions/Function1;)V +HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$executeQuery$2;->invoke(Lapp/cash/sqldelight/driver/android/AndroidStatement;)Ljava/lang/Object; +HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$executeQuery$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lapp/cash/sqldelight/driver/android/AndroidSqliteDriver$statements$1; +HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$statements$1;->(I)V +HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$statements$1;->entryRemoved(ZILapp/cash/sqldelight/driver/android/AndroidStatement;Lapp/cash/sqldelight/driver/android/AndroidStatement;)V +HSPLapp/cash/sqldelight/driver/android/AndroidSqliteDriver$statements$1;->entryRemoved(ZLjava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V +Lapp/cash/sqldelight/driver/android/AndroidStatement; +Lapp/cash/sqldelight/internal/CurrentThreadIdKt; +HSPLapp/cash/sqldelight/internal/CurrentThreadIdKt;->currentThreadId()J +Larrow/core/AndThen1; +HSPLarrow/core/AndThen1;->()V +HSPLarrow/core/AndThen1;->()V +HSPLarrow/core/AndThen1;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLarrow/core/AndThen1;->compose(Lkotlin/jvm/functions/Function1;)Larrow/core/AndThen1; +HSPLarrow/core/AndThen1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Larrow/core/AndThen1$Companion; +HSPLarrow/core/AndThen1$Companion;->()V +HSPLarrow/core/AndThen1$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLarrow/core/AndThen1$Companion;->invoke(Lkotlin/jvm/functions/Function1;)Larrow/core/AndThen1; +HSPLarrow/core/AndThen1$Companion;->loop(Larrow/core/AndThen1;Ljava/lang/Object;I)Ljava/lang/Object; +Larrow/core/AndThen1$Single; +HSPLarrow/core/AndThen1$Single;->(Lkotlin/jvm/functions/Function1;I)V +HSPLarrow/core/AndThen1$Single;->getF()Lkotlin/jvm/functions/Function1; +HSPLarrow/core/AndThen1$Single;->getIndex()I +Larrow/core/AndThen1$compose$1; +HSPLarrow/core/AndThen1$compose$1;->(Larrow/core/AndThen1;Lkotlin/jvm/functions/Function1;)V +HSPLarrow/core/AndThen1$compose$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Larrow/core/Composition; +HSPLarrow/core/Composition;->compose(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Lkotlin/jvm/functions/Function1; +Larrow/core/Either; +HSPLarrow/core/Either;->()V +HSPLarrow/core/Either;->()V +HSPLarrow/core/Either;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLarrow/core/Either;->getOrNull()Ljava/lang/Object; +Larrow/core/Either$Companion; +HSPLarrow/core/Either$Companion;->()V +HSPLarrow/core/Either$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Larrow/core/Either$Left; +Larrow/core/Either$Right; +HSPLarrow/core/Either$Right;->()V +HSPLarrow/core/Either$Right;->(Ljava/lang/Object;)V +HSPLarrow/core/Either$Right;->getValue()Ljava/lang/Object; +Larrow/core/Either$Right$Companion; +HSPLarrow/core/Either$Right$Companion;->()V +HSPLarrow/core/Either$Right$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Larrow/core/EitherKt; +HSPLarrow/core/EitherKt;->right(Ljava/lang/Object;)Larrow/core/Either; +Larrow/core/IterableKt; +HSPLarrow/core/IterableKt;->()V +HSPLarrow/core/IterableKt;->widen(Ljava/util/List;)Ljava/util/List; +Larrow/core/None; +Larrow/core/Option; +HSPLarrow/core/Option;->()V +HSPLarrow/core/Option;->()V +HSPLarrow/core/Option;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Larrow/core/Option$Companion; +HSPLarrow/core/Option$Companion;->()V +HSPLarrow/core/Option$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Larrow/core/Partials; +HSPLarrow/core/Partials;->partially1(Lkotlin/jvm/functions/Function1;Ljava/lang/Object;)Lkotlin/jvm/functions/Function0; +HSPLarrow/core/Partials;->partially1(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;)Lkotlin/jvm/functions/Function1; +HSPLarrow/core/Partials;->partially1Effect(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;)Lkotlin/jvm/functions/Function1; +Larrow/core/Partials$partially1$1; +HSPLarrow/core/Partials$partially1$1;->(Lkotlin/jvm/functions/Function1;Ljava/lang/Object;)V +HSPLarrow/core/Partials$partially1$1;->invoke()Ljava/lang/Object; +Larrow/core/Partials$partially1$2; +HSPLarrow/core/Partials$partially1$2;->(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;)V +Larrow/core/Partials$partially1$23; +HSPLarrow/core/Partials$partially1$23;->(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V +Larrow/core/PredefKt; +Larrow/core/Some; +HSPLarrow/core/Some;->()V +HSPLarrow/core/Some;->(Ljava/lang/Object;)V +HSPLarrow/core/Some;->getValue()Ljava/lang/Object; +Larrow/core/Some$Companion; +HSPLarrow/core/Some$Companion;->()V +HSPLarrow/core/Some$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Larrow/optics/Fold; +Larrow/optics/Getter; +Larrow/optics/OptionalKt; +HSPLarrow/optics/OptionalKt;->Optional(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;)Larrow/optics/POptional; +Larrow/optics/OptionalKt$Optional$1; +HSPLarrow/optics/OptionalKt$Optional$1;->(Lkotlin/jvm/functions/Function1;)V +Larrow/optics/PEvery; +Larrow/optics/PLens; +HSPLarrow/optics/PLens;->()V +Larrow/optics/PLens$Companion; +HSPLarrow/optics/PLens$Companion;->()V +HSPLarrow/optics/PLens$Companion;->()V +HSPLarrow/optics/PLens$Companion;->invoke(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;)Larrow/optics/PLens; +Larrow/optics/PLens$Companion$invoke$1; +HSPLarrow/optics/PLens$Companion$invoke$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;)V +Larrow/optics/POptional; +HSPLarrow/optics/POptional;->()V +Larrow/optics/POptional$Companion; +HSPLarrow/optics/POptional$Companion;->()V +HSPLarrow/optics/POptional$Companion;->()V +HSPLarrow/optics/POptional$Companion;->invoke(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;)Larrow/optics/POptional; +Larrow/optics/POptional$Companion$invoke$1; +HSPLarrow/optics/POptional$Companion$invoke$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;)V +Larrow/optics/POptionalGetter; +Larrow/optics/PSetter; +Larrow/optics/PTraversal; +Lch/qos/logback/classic/Level; +HSPLch/qos/logback/classic/Level;->()V +HSPLch/qos/logback/classic/Level;->(ILjava/lang/String;)V +HSPLch/qos/logback/classic/Level;->toLevel(Ljava/lang/String;)Lch/qos/logback/classic/Level; +HSPLch/qos/logback/classic/Level;->toLevel(Ljava/lang/String;Lch/qos/logback/classic/Level;)Lch/qos/logback/classic/Level; +HSPLch/qos/logback/classic/Level;->toString()Ljava/lang/String; +Lch/qos/logback/classic/Logger; +HSPLch/qos/logback/classic/Logger;->()V +HSPLch/qos/logback/classic/Logger;->(Ljava/lang/String;Lch/qos/logback/classic/Logger;Lch/qos/logback/classic/LoggerContext;)V +HSPLch/qos/logback/classic/Logger;->addAppender(Lch/qos/logback/core/Appender;)V +HSPLch/qos/logback/classic/Logger;->createChildByName(Ljava/lang/String;)Lch/qos/logback/classic/Logger; +HSPLch/qos/logback/classic/Logger;->getChildByName(Ljava/lang/String;)Lch/qos/logback/classic/Logger; +HSPLch/qos/logback/classic/Logger;->getName()Ljava/lang/String; +HSPLch/qos/logback/classic/Logger;->setLevel(Lch/qos/logback/classic/Level;)V +HSPLch/qos/logback/classic/Logger;->toString()Ljava/lang/String; +Lch/qos/logback/classic/LoggerContext; +HSPLch/qos/logback/classic/LoggerContext;->()V +HSPLch/qos/logback/classic/LoggerContext;->fireOnLevelChange(Lch/qos/logback/classic/Logger;Lch/qos/logback/classic/Level;)V +HSPLch/qos/logback/classic/LoggerContext;->fireOnStart()V +HSPLch/qos/logback/classic/LoggerContext;->getLogger(Ljava/lang/String;)Lch/qos/logback/classic/Logger; +HSPLch/qos/logback/classic/LoggerContext;->getLogger(Ljava/lang/String;)Lorg/slf4j/Logger; +HSPLch/qos/logback/classic/LoggerContext;->incSize()V +HSPLch/qos/logback/classic/LoggerContext;->initEvaluatorMap()V +HSPLch/qos/logback/classic/LoggerContext;->isPackagingDataEnabled()Z +HSPLch/qos/logback/classic/LoggerContext;->putProperty(Ljava/lang/String;Ljava/lang/String;)V +HSPLch/qos/logback/classic/LoggerContext;->setName(Ljava/lang/String;)V +HSPLch/qos/logback/classic/LoggerContext;->setPackagingDataEnabled(Z)V +HSPLch/qos/logback/classic/LoggerContext;->start()V +HSPLch/qos/logback/classic/LoggerContext;->updateLoggerContextVO()V +Lch/qos/logback/classic/PatternLayout; +HSPLch/qos/logback/classic/PatternLayout;->()V +HSPLch/qos/logback/classic/PatternLayout;->()V +HSPLch/qos/logback/classic/PatternLayout;->getDefaultConverterMap()Ljava/util/Map; +Lch/qos/logback/classic/android/LogcatAppender; +HSPLch/qos/logback/classic/android/LogcatAppender;->()V +HSPLch/qos/logback/classic/android/LogcatAppender;->setEncoder(Lch/qos/logback/classic/encoder/PatternLayoutEncoder;)V +HSPLch/qos/logback/classic/android/LogcatAppender;->setTagEncoder(Lch/qos/logback/classic/encoder/PatternLayoutEncoder;)V +HSPLch/qos/logback/classic/android/LogcatAppender;->start()V +Lch/qos/logback/classic/encoder/PatternLayoutEncoder; +HSPLch/qos/logback/classic/encoder/PatternLayoutEncoder;->()V +HSPLch/qos/logback/classic/encoder/PatternLayoutEncoder;->start()V +Lch/qos/logback/classic/joran/JoranConfigurator; +HSPLch/qos/logback/classic/joran/JoranConfigurator;->()V +HSPLch/qos/logback/classic/joran/JoranConfigurator;->addDefaultNestedComponentRegistryRules(Lch/qos/logback/core/joran/spi/DefaultNestedComponentRegistry;)V +HSPLch/qos/logback/classic/joran/JoranConfigurator;->addInstanceRules(Lch/qos/logback/core/joran/spi/RuleStore;)V +Lch/qos/logback/classic/joran/action/ConditionalIncludeAction; +HSPLch/qos/logback/classic/joran/action/ConditionalIncludeAction;->()V +Lch/qos/logback/classic/joran/action/ConfigurationAction; +HSPLch/qos/logback/classic/joran/action/ConfigurationAction;->()V +HSPLch/qos/logback/classic/joran/action/ConfigurationAction;->()V +HSPLch/qos/logback/classic/joran/action/ConfigurationAction;->begin(Lch/qos/logback/core/joran/spi/InterpretationContext;Ljava/lang/String;Lorg/xml/sax/Attributes;)V +HSPLch/qos/logback/classic/joran/action/ConfigurationAction;->end(Lch/qos/logback/core/joran/spi/InterpretationContext;Ljava/lang/String;)V +HSPLch/qos/logback/classic/joran/action/ConfigurationAction;->processScanAttrib(Lch/qos/logback/core/joran/spi/InterpretationContext;Lorg/xml/sax/Attributes;)V +Lch/qos/logback/classic/joran/action/ContextNameAction; +HSPLch/qos/logback/classic/joran/action/ContextNameAction;->()V +Lch/qos/logback/classic/joran/action/FindIncludeAction; +HSPLch/qos/logback/classic/joran/action/FindIncludeAction;->()V +Lch/qos/logback/classic/joran/action/LevelAction; +HSPLch/qos/logback/classic/joran/action/LevelAction;->()V +Lch/qos/logback/classic/joran/action/LoggerAction; +HSPLch/qos/logback/classic/joran/action/LoggerAction;->()V +Lch/qos/logback/classic/joran/action/LoggerContextListenerAction; +HSPLch/qos/logback/classic/joran/action/LoggerContextListenerAction;->()V +Lch/qos/logback/classic/joran/action/ReceiverAction; +HSPLch/qos/logback/classic/joran/action/ReceiverAction;->()V +Lch/qos/logback/classic/joran/action/RootLoggerAction; +HSPLch/qos/logback/classic/joran/action/RootLoggerAction;->()V +HSPLch/qos/logback/classic/joran/action/RootLoggerAction;->begin(Lch/qos/logback/core/joran/spi/InterpretationContext;Ljava/lang/String;Lorg/xml/sax/Attributes;)V +HSPLch/qos/logback/classic/joran/action/RootLoggerAction;->end(Lch/qos/logback/core/joran/spi/InterpretationContext;Ljava/lang/String;)V +Lch/qos/logback/classic/pattern/Abbreviator; +Lch/qos/logback/classic/pattern/CallerDataConverter; +Lch/qos/logback/classic/pattern/ClassOfCallerConverter; +Lch/qos/logback/classic/pattern/ClassicConverter; +HSPLch/qos/logback/classic/pattern/ClassicConverter;->()V +Lch/qos/logback/classic/pattern/ContextNameConverter; +Lch/qos/logback/classic/pattern/DateConverter; +Lch/qos/logback/classic/pattern/EnsureExceptionHandling; +HSPLch/qos/logback/classic/pattern/EnsureExceptionHandling;->()V +HSPLch/qos/logback/classic/pattern/EnsureExceptionHandling;->chainHandlesThrowable(Lch/qos/logback/core/pattern/Converter;)Z +HSPLch/qos/logback/classic/pattern/EnsureExceptionHandling;->process(Lch/qos/logback/core/Context;Lch/qos/logback/core/pattern/Converter;)V +Lch/qos/logback/classic/pattern/ExtendedThrowableProxyConverter; +Lch/qos/logback/classic/pattern/FileOfCallerConverter; +Lch/qos/logback/classic/pattern/LevelConverter; +Lch/qos/logback/classic/pattern/LineOfCallerConverter; +Lch/qos/logback/classic/pattern/LineSeparatorConverter; +Lch/qos/logback/classic/pattern/LocalSequenceNumberConverter; +Lch/qos/logback/classic/pattern/LoggerConverter; +HSPLch/qos/logback/classic/pattern/LoggerConverter;->()V +Lch/qos/logback/classic/pattern/MDCConverter; +Lch/qos/logback/classic/pattern/MarkerConverter; +Lch/qos/logback/classic/pattern/MessageConverter; +HSPLch/qos/logback/classic/pattern/MessageConverter;->()V +Lch/qos/logback/classic/pattern/MethodOfCallerConverter; +Lch/qos/logback/classic/pattern/NamedConverter; +HSPLch/qos/logback/classic/pattern/NamedConverter;->()V +HSPLch/qos/logback/classic/pattern/NamedConverter;->start()V +Lch/qos/logback/classic/pattern/NopThrowableInformationConverter; +HSPLch/qos/logback/classic/pattern/NopThrowableInformationConverter;->()V +Lch/qos/logback/classic/pattern/PropertyConverter; +Lch/qos/logback/classic/pattern/RelativeTimeConverter; +Lch/qos/logback/classic/pattern/RootCauseFirstThrowableProxyConverter; +Lch/qos/logback/classic/pattern/TargetLengthBasedClassNameAbbreviator; +HSPLch/qos/logback/classic/pattern/TargetLengthBasedClassNameAbbreviator;->(I)V +Lch/qos/logback/classic/pattern/ThreadConverter; +HSPLch/qos/logback/classic/pattern/ThreadConverter;->()V +Lch/qos/logback/classic/pattern/ThrowableHandlingConverter; +HSPLch/qos/logback/classic/pattern/ThrowableHandlingConverter;->()V +Lch/qos/logback/classic/pattern/ThrowableProxyConverter; +HSPLch/qos/logback/classic/pattern/ThrowableProxyConverter;->()V +HSPLch/qos/logback/classic/pattern/ThrowableProxyConverter;->start()V +Lch/qos/logback/classic/sift/SiftAction; +HSPLch/qos/logback/classic/sift/SiftAction;->()V +Lch/qos/logback/classic/spi/LoggerContextVO; +HSPLch/qos/logback/classic/spi/LoggerContextVO;->(Lch/qos/logback/classic/LoggerContext;)V +Lch/qos/logback/classic/spi/TurboFilterList; +HSPLch/qos/logback/classic/spi/TurboFilterList;->()V +Lch/qos/logback/classic/util/ContextInitializer; +HSPLch/qos/logback/classic/util/ContextInitializer;->(Lch/qos/logback/classic/LoggerContext;)V +HSPLch/qos/logback/classic/util/ContextInitializer;->autoConfig()V +HSPLch/qos/logback/classic/util/ContextInitializer;->findConfigFileFromSystemProperties(Z)Ljava/net/URL; +HSPLch/qos/logback/classic/util/ContextInitializer;->findConfigFileURLFromAssets(Z)Ljava/net/URL; +HSPLch/qos/logback/classic/util/ContextInitializer;->getResource(Ljava/lang/String;Ljava/lang/ClassLoader;Z)Ljava/net/URL; +HSPLch/qos/logback/classic/util/ContextInitializer;->statusOnResourceSearch(Ljava/lang/String;Ljava/lang/ClassLoader;Ljava/lang/String;)V +Lch/qos/logback/classic/util/DefaultNestedComponentRules; +HSPLch/qos/logback/classic/util/DefaultNestedComponentRules;->addDefaultNestedComponentRegistryRules(Lch/qos/logback/core/joran/spi/DefaultNestedComponentRegistry;)V +Lch/qos/logback/classic/util/LogbackMDCAdapter; +HSPLch/qos/logback/classic/util/LogbackMDCAdapter;->()V +Lch/qos/logback/classic/util/LoggerNameUtil; +HSPLch/qos/logback/classic/util/LoggerNameUtil;->getSeparatorIndexOf(Ljava/lang/String;I)I +Lch/qos/logback/core/Appender; +Lch/qos/logback/core/AppenderBase; +Lch/qos/logback/core/BasicStatusManager; +HSPLch/qos/logback/core/BasicStatusManager;->()V +HSPLch/qos/logback/core/BasicStatusManager;->add(Lch/qos/logback/core/status/Status;)V +HSPLch/qos/logback/core/BasicStatusManager;->fireStatusAddEvent(Lch/qos/logback/core/status/Status;)V +HSPLch/qos/logback/core/BasicStatusManager;->getCopyOfStatusList()Ljava/util/List; +HSPLch/qos/logback/core/BasicStatusManager;->getCopyOfStatusListenerList()Ljava/util/List; +Lch/qos/logback/core/Context; +Lch/qos/logback/core/ContextBase; +HSPLch/qos/logback/core/ContextBase;->()V +HSPLch/qos/logback/core/ContextBase;->getBirthTime()J +HSPLch/qos/logback/core/ContextBase;->getConfigurationLock()Ljava/lang/Object; +HSPLch/qos/logback/core/ContextBase;->getCopyOfPropertyMap()Ljava/util/Map; +HSPLch/qos/logback/core/ContextBase;->getName()Ljava/lang/String; +HSPLch/qos/logback/core/ContextBase;->getObject(Ljava/lang/String;)Ljava/lang/Object; +HSPLch/qos/logback/core/ContextBase;->getStatusManager()Lch/qos/logback/core/status/StatusManager; +HSPLch/qos/logback/core/ContextBase;->initCollisionMaps()V +HSPLch/qos/logback/core/ContextBase;->putObject(Ljava/lang/String;Ljava/lang/Object;)V +HSPLch/qos/logback/core/ContextBase;->putProperty(Ljava/lang/String;Ljava/lang/String;)V +HSPLch/qos/logback/core/ContextBase;->setName(Ljava/lang/String;)V +HSPLch/qos/logback/core/ContextBase;->start()V +Lch/qos/logback/core/CoreConstants; +HSPLch/qos/logback/core/CoreConstants;->()V +Lch/qos/logback/core/Layout; +Lch/qos/logback/core/LayoutBase; +HSPLch/qos/logback/core/LayoutBase;->()V +HSPLch/qos/logback/core/LayoutBase;->getContext()Lch/qos/logback/core/Context; +HSPLch/qos/logback/core/LayoutBase;->setContext(Lch/qos/logback/core/Context;)V +HSPLch/qos/logback/core/LayoutBase;->start()V +Lch/qos/logback/core/UnsynchronizedAppenderBase; +HSPLch/qos/logback/core/UnsynchronizedAppenderBase;->()V +HSPLch/qos/logback/core/UnsynchronizedAppenderBase;->setName(Ljava/lang/String;)V +HSPLch/qos/logback/core/UnsynchronizedAppenderBase;->start()V +Lch/qos/logback/core/android/AndroidContextUtil; +HSPLch/qos/logback/core/android/AndroidContextUtil;->containsProperties(Ljava/lang/String;)Z +Lch/qos/logback/core/android/SystemPropertiesProxy; +HSPLch/qos/logback/core/android/SystemPropertiesProxy;->()V +HSPLch/qos/logback/core/android/SystemPropertiesProxy;->(Ljava/lang/ClassLoader;)V +HSPLch/qos/logback/core/android/SystemPropertiesProxy;->get(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; +HSPLch/qos/logback/core/android/SystemPropertiesProxy;->getInstance()Lch/qos/logback/core/android/SystemPropertiesProxy; +HSPLch/qos/logback/core/android/SystemPropertiesProxy;->setClassLoader(Ljava/lang/ClassLoader;)V +Lch/qos/logback/core/boolex/EvaluationException; +Lch/qos/logback/core/encoder/Encoder; +Lch/qos/logback/core/encoder/EncoderBase; +HSPLch/qos/logback/core/encoder/EncoderBase;->()V +Lch/qos/logback/core/encoder/LayoutWrappingEncoder; +HSPLch/qos/logback/core/encoder/LayoutWrappingEncoder;->()V +HSPLch/qos/logback/core/encoder/LayoutWrappingEncoder;->getLayout()Lch/qos/logback/core/Layout; +HSPLch/qos/logback/core/encoder/LayoutWrappingEncoder;->setParent(Lch/qos/logback/core/Appender;)V +HSPLch/qos/logback/core/encoder/LayoutWrappingEncoder;->start()V +HSPLch/qos/logback/core/encoder/LayoutWrappingEncoder;->stop()V +Lch/qos/logback/core/filter/Filter; +Lch/qos/logback/core/helpers/CyclicBuffer; +HSPLch/qos/logback/core/helpers/CyclicBuffer;->(I)V +HSPLch/qos/logback/core/helpers/CyclicBuffer;->asList()Ljava/util/List; +HSPLch/qos/logback/core/helpers/CyclicBuffer;->init(I)V +HSPLch/qos/logback/core/helpers/CyclicBuffer;->length()I +Lch/qos/logback/core/joran/GenericConfigurator; +HSPLch/qos/logback/core/joran/GenericConfigurator;->()V +HSPLch/qos/logback/core/joran/GenericConfigurator;->buildInterpreter()V +HSPLch/qos/logback/core/joran/GenericConfigurator;->doConfigure(Ljava/io/InputStream;Ljava/lang/String;)V +HSPLch/qos/logback/core/joran/GenericConfigurator;->doConfigure(Ljava/net/URL;)V +HSPLch/qos/logback/core/joran/GenericConfigurator;->doConfigure(Ljava/util/List;)V +HSPLch/qos/logback/core/joran/GenericConfigurator;->doConfigure(Lorg/xml/sax/InputSource;)V +HSPLch/qos/logback/core/joran/GenericConfigurator;->informContextOfURLUsedForConfiguration(Lch/qos/logback/core/Context;Ljava/net/URL;)V +HSPLch/qos/logback/core/joran/GenericConfigurator;->initialElementPath()Lch/qos/logback/core/joran/spi/ElementPath; +HSPLch/qos/logback/core/joran/GenericConfigurator;->registerSafeConfiguration(Ljava/util/List;)V +Lch/qos/logback/core/joran/JoranConfiguratorBase; +HSPLch/qos/logback/core/joran/JoranConfiguratorBase;->()V +HSPLch/qos/logback/core/joran/JoranConfiguratorBase;->addImplicitRules(Lch/qos/logback/core/joran/spi/Interpreter;)V +HSPLch/qos/logback/core/joran/JoranConfiguratorBase;->addInstanceRules(Lch/qos/logback/core/joran/spi/RuleStore;)V +HSPLch/qos/logback/core/joran/JoranConfiguratorBase;->buildInterpreter()V +Lch/qos/logback/core/joran/action/AbstractIncludeAction; +HSPLch/qos/logback/core/joran/action/AbstractIncludeAction;->()V +Lch/qos/logback/core/joran/action/Action; +HSPLch/qos/logback/core/joran/action/Action;->()V +Lch/qos/logback/core/joran/action/AppenderAction; +HSPLch/qos/logback/core/joran/action/AppenderAction;->()V +HSPLch/qos/logback/core/joran/action/AppenderAction;->begin(Lch/qos/logback/core/joran/spi/InterpretationContext;Ljava/lang/String;Lorg/xml/sax/Attributes;)V +HSPLch/qos/logback/core/joran/action/AppenderAction;->end(Lch/qos/logback/core/joran/spi/InterpretationContext;Ljava/lang/String;)V +HSPLch/qos/logback/core/joran/action/AppenderAction;->warnDeprecated(Ljava/lang/String;)V +Lch/qos/logback/core/joran/action/AppenderRefAction; +HSPLch/qos/logback/core/joran/action/AppenderRefAction;->()V +HSPLch/qos/logback/core/joran/action/AppenderRefAction;->begin(Lch/qos/logback/core/joran/spi/InterpretationContext;Ljava/lang/String;Lorg/xml/sax/Attributes;)V +HSPLch/qos/logback/core/joran/action/AppenderRefAction;->end(Lch/qos/logback/core/joran/spi/InterpretationContext;Ljava/lang/String;)V +Lch/qos/logback/core/joran/action/ConversionRuleAction; +HSPLch/qos/logback/core/joran/action/ConversionRuleAction;->()V +Lch/qos/logback/core/joran/action/DefinePropertyAction; +HSPLch/qos/logback/core/joran/action/DefinePropertyAction;->()V +Lch/qos/logback/core/joran/action/IADataForBasicProperty; +HSPLch/qos/logback/core/joran/action/IADataForBasicProperty;->(Lch/qos/logback/core/joran/util/PropertySetter;Lch/qos/logback/core/util/AggregationType;Ljava/lang/String;)V +Lch/qos/logback/core/joran/action/IADataForComplexProperty; +HSPLch/qos/logback/core/joran/action/IADataForComplexProperty;->(Lch/qos/logback/core/joran/util/PropertySetter;Lch/qos/logback/core/util/AggregationType;Ljava/lang/String;)V +HSPLch/qos/logback/core/joran/action/IADataForComplexProperty;->getAggregationType()Lch/qos/logback/core/util/AggregationType; +HSPLch/qos/logback/core/joran/action/IADataForComplexProperty;->getComplexPropertyName()Ljava/lang/String; +HSPLch/qos/logback/core/joran/action/IADataForComplexProperty;->getNestedComplexProperty()Ljava/lang/Object; +HSPLch/qos/logback/core/joran/action/IADataForComplexProperty;->setNestedComplexProperty(Ljava/lang/Object;)V +Lch/qos/logback/core/joran/action/ImplicitAction; +HSPLch/qos/logback/core/joran/action/ImplicitAction;->()V +Lch/qos/logback/core/joran/action/IncludeAction; +HSPLch/qos/logback/core/joran/action/IncludeAction;->()V +HSPLch/qos/logback/core/joran/action/IncludeAction;->setEventOffset(I)V +Lch/qos/logback/core/joran/action/NOPAction; +HSPLch/qos/logback/core/joran/action/NOPAction;->()V +Lch/qos/logback/core/joran/action/NestedBasicPropertyIA; +HSPLch/qos/logback/core/joran/action/NestedBasicPropertyIA;->()V +HSPLch/qos/logback/core/joran/action/NestedBasicPropertyIA;->begin(Lch/qos/logback/core/joran/spi/InterpretationContext;Ljava/lang/String;Lorg/xml/sax/Attributes;)V +HSPLch/qos/logback/core/joran/action/NestedBasicPropertyIA;->body(Lch/qos/logback/core/joran/spi/InterpretationContext;Ljava/lang/String;)V +HSPLch/qos/logback/core/joran/action/NestedBasicPropertyIA;->end(Lch/qos/logback/core/joran/spi/InterpretationContext;Ljava/lang/String;)V +HSPLch/qos/logback/core/joran/action/NestedBasicPropertyIA;->isApplicable(Lch/qos/logback/core/joran/spi/ElementPath;Lorg/xml/sax/Attributes;Lch/qos/logback/core/joran/spi/InterpretationContext;)Z +Lch/qos/logback/core/joran/action/NestedBasicPropertyIA$1; +HSPLch/qos/logback/core/joran/action/NestedBasicPropertyIA$1;->()V +Lch/qos/logback/core/joran/action/NestedComplexPropertyIA; +HSPLch/qos/logback/core/joran/action/NestedComplexPropertyIA;->()V +HSPLch/qos/logback/core/joran/action/NestedComplexPropertyIA;->begin(Lch/qos/logback/core/joran/spi/InterpretationContext;Ljava/lang/String;Lorg/xml/sax/Attributes;)V +HSPLch/qos/logback/core/joran/action/NestedComplexPropertyIA;->end(Lch/qos/logback/core/joran/spi/InterpretationContext;Ljava/lang/String;)V +HSPLch/qos/logback/core/joran/action/NestedComplexPropertyIA;->isApplicable(Lch/qos/logback/core/joran/spi/ElementPath;Lorg/xml/sax/Attributes;Lch/qos/logback/core/joran/spi/InterpretationContext;)Z +Lch/qos/logback/core/joran/action/NestedComplexPropertyIA$1; +HSPLch/qos/logback/core/joran/action/NestedComplexPropertyIA$1;->()V +Lch/qos/logback/core/joran/action/NewRuleAction; +HSPLch/qos/logback/core/joran/action/NewRuleAction;->()V +Lch/qos/logback/core/joran/action/ParamAction; +HSPLch/qos/logback/core/joran/action/ParamAction;->()V +HSPLch/qos/logback/core/joran/action/ParamAction;->()V +Lch/qos/logback/core/joran/action/PropertyAction; +HSPLch/qos/logback/core/joran/action/PropertyAction;->()V +HSPLch/qos/logback/core/joran/action/PropertyAction;->()V +Lch/qos/logback/core/joran/action/ShutdownHookAction; +HSPLch/qos/logback/core/joran/action/ShutdownHookAction;->()V +Lch/qos/logback/core/joran/action/StatusListenerAction; +HSPLch/qos/logback/core/joran/action/StatusListenerAction;->()V +Lch/qos/logback/core/joran/action/TimestampAction; +HSPLch/qos/logback/core/joran/action/TimestampAction;->()V +HSPLch/qos/logback/core/joran/action/TimestampAction;->()V +Lch/qos/logback/core/joran/event/BodyEvent; +HSPLch/qos/logback/core/joran/event/BodyEvent;->(Ljava/lang/String;Lorg/xml/sax/Locator;)V +HSPLch/qos/logback/core/joran/event/BodyEvent;->getText()Ljava/lang/String; +Lch/qos/logback/core/joran/event/EndEvent; +HSPLch/qos/logback/core/joran/event/EndEvent;->(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/xml/sax/Locator;)V +Lch/qos/logback/core/joran/event/InPlayListener; +Lch/qos/logback/core/joran/event/SaxEvent; +HSPLch/qos/logback/core/joran/event/SaxEvent;->(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/xml/sax/Locator;)V +HSPLch/qos/logback/core/joran/event/SaxEvent;->getLocator()Lorg/xml/sax/Locator; +Lch/qos/logback/core/joran/event/SaxEventRecorder; +HSPLch/qos/logback/core/joran/event/SaxEventRecorder;->(Lch/qos/logback/core/Context;)V +HSPLch/qos/logback/core/joran/event/SaxEventRecorder;->buildPullParser()Lorg/xmlpull/v1/sax2/Driver; +HSPLch/qos/logback/core/joran/event/SaxEventRecorder;->characters([CII)V +HSPLch/qos/logback/core/joran/event/SaxEventRecorder;->endElement(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V +HSPLch/qos/logback/core/joran/event/SaxEventRecorder;->getLastEvent()Lch/qos/logback/core/joran/event/SaxEvent; +HSPLch/qos/logback/core/joran/event/SaxEventRecorder;->getLocator()Lorg/xml/sax/Locator; +HSPLch/qos/logback/core/joran/event/SaxEventRecorder;->getSaxEventList()Ljava/util/List; +HSPLch/qos/logback/core/joran/event/SaxEventRecorder;->getTagName(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; +HSPLch/qos/logback/core/joran/event/SaxEventRecorder;->isSpaceOnly(Ljava/lang/String;)Z +HSPLch/qos/logback/core/joran/event/SaxEventRecorder;->recordEvents(Lorg/xml/sax/InputSource;)Ljava/util/List; +HSPLch/qos/logback/core/joran/event/SaxEventRecorder;->setDocumentLocator(Lorg/xml/sax/Locator;)V +HSPLch/qos/logback/core/joran/event/SaxEventRecorder;->startDocument()V +HSPLch/qos/logback/core/joran/event/SaxEventRecorder;->startElement(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/xml/sax/Attributes;)V +Lch/qos/logback/core/joran/event/StartEvent; +HSPLch/qos/logback/core/joran/event/StartEvent;->(Lch/qos/logback/core/joran/spi/ElementPath;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/xml/sax/Attributes;Lorg/xml/sax/Locator;)V +Lch/qos/logback/core/joran/spi/ActionException; +Lch/qos/logback/core/joran/spi/CAI_WithLocatorSupport; +HSPLch/qos/logback/core/joran/spi/CAI_WithLocatorSupport;->(Lch/qos/logback/core/Context;Lch/qos/logback/core/joran/spi/Interpreter;)V +Lch/qos/logback/core/joran/spi/ConfigurationWatchList; +HSPLch/qos/logback/core/joran/spi/ConfigurationWatchList;->()V +HSPLch/qos/logback/core/joran/spi/ConfigurationWatchList;->addAsFileToWatch(Ljava/net/URL;)V +HSPLch/qos/logback/core/joran/spi/ConfigurationWatchList;->convertToFile(Ljava/net/URL;)Ljava/io/File; +HSPLch/qos/logback/core/joran/spi/ConfigurationWatchList;->setMainURL(Ljava/net/URL;)V +Lch/qos/logback/core/joran/spi/DefaultClass; +Lch/qos/logback/core/joran/spi/DefaultNestedComponentRegistry; +HSPLch/qos/logback/core/joran/spi/DefaultNestedComponentRegistry;->()V +HSPLch/qos/logback/core/joran/spi/DefaultNestedComponentRegistry;->add(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/Class;)V +HSPLch/qos/logback/core/joran/spi/DefaultNestedComponentRegistry;->findDefaultComponentType(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Class; +HSPLch/qos/logback/core/joran/spi/DefaultNestedComponentRegistry;->oneShotFind(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Class; +Lch/qos/logback/core/joran/spi/ElementPath; +HSPLch/qos/logback/core/joran/spi/ElementPath;->()V +HSPLch/qos/logback/core/joran/spi/ElementPath;->(Ljava/lang/String;)V +HSPLch/qos/logback/core/joran/spi/ElementPath;->duplicate()Lch/qos/logback/core/joran/spi/ElementPath; +HSPLch/qos/logback/core/joran/spi/ElementPath;->get(I)Ljava/lang/String; +HSPLch/qos/logback/core/joran/spi/ElementPath;->peekLast()Ljava/lang/String; +HSPLch/qos/logback/core/joran/spi/ElementPath;->pop()V +HSPLch/qos/logback/core/joran/spi/ElementPath;->push(Ljava/lang/String;)V +HSPLch/qos/logback/core/joran/spi/ElementPath;->size()I +Lch/qos/logback/core/joran/spi/ElementSelector; +HSPLch/qos/logback/core/joran/spi/ElementSelector;->(Ljava/lang/String;)V +HSPLch/qos/logback/core/joran/spi/ElementSelector;->equalityCheck(Ljava/lang/String;Ljava/lang/String;)Z +HSPLch/qos/logback/core/joran/spi/ElementSelector;->fullPathMatch(Lch/qos/logback/core/joran/spi/ElementPath;)Z +HSPLch/qos/logback/core/joran/spi/ElementSelector;->getPrefixMatchLength(Lch/qos/logback/core/joran/spi/ElementPath;)I +HSPLch/qos/logback/core/joran/spi/ElementSelector;->getTailMatchLength(Lch/qos/logback/core/joran/spi/ElementPath;)I +HSPLch/qos/logback/core/joran/spi/ElementSelector;->hashCode()I +Lch/qos/logback/core/joran/spi/EventPlayer; +HSPLch/qos/logback/core/joran/spi/EventPlayer;->(Lch/qos/logback/core/joran/spi/Interpreter;)V +HSPLch/qos/logback/core/joran/spi/EventPlayer;->play(Ljava/util/List;)V +Lch/qos/logback/core/joran/spi/HostClassAndPropertyDouble; +HSPLch/qos/logback/core/joran/spi/HostClassAndPropertyDouble;->(Ljava/lang/Class;Ljava/lang/String;)V +HSPLch/qos/logback/core/joran/spi/HostClassAndPropertyDouble;->equals(Ljava/lang/Object;)Z +HSPLch/qos/logback/core/joran/spi/HostClassAndPropertyDouble;->hashCode()I +Lch/qos/logback/core/joran/spi/InterpretationContext; +HSPLch/qos/logback/core/joran/spi/InterpretationContext;->()V +HSPLch/qos/logback/core/joran/spi/InterpretationContext;->(Lch/qos/logback/core/Context;Lch/qos/logback/core/joran/spi/Interpreter;)V +HSPLch/qos/logback/core/joran/spi/InterpretationContext;->fireInPlay(Lch/qos/logback/core/joran/event/SaxEvent;)V +HSPLch/qos/logback/core/joran/spi/InterpretationContext;->getDefaultNestedComponentRegistry()Lch/qos/logback/core/joran/spi/DefaultNestedComponentRegistry; +HSPLch/qos/logback/core/joran/spi/InterpretationContext;->getObjectMap()Ljava/util/Map; +HSPLch/qos/logback/core/joran/spi/InterpretationContext;->initAndroidContextIfValueHasSpecialVars(Ljava/lang/String;)V +HSPLch/qos/logback/core/joran/spi/InterpretationContext;->isEmpty()Z +HSPLch/qos/logback/core/joran/spi/InterpretationContext;->peekObject()Ljava/lang/Object; +HSPLch/qos/logback/core/joran/spi/InterpretationContext;->popObject()Ljava/lang/Object; +HSPLch/qos/logback/core/joran/spi/InterpretationContext;->pushObject(Ljava/lang/Object;)V +HSPLch/qos/logback/core/joran/spi/InterpretationContext;->subst(Ljava/lang/String;)Ljava/lang/String; +Lch/qos/logback/core/joran/spi/Interpreter; +HSPLch/qos/logback/core/joran/spi/Interpreter;->()V +HSPLch/qos/logback/core/joran/spi/Interpreter;->(Lch/qos/logback/core/Context;Lch/qos/logback/core/joran/spi/RuleStore;Lch/qos/logback/core/joran/spi/ElementPath;)V +HSPLch/qos/logback/core/joran/spi/Interpreter;->addImplicitAction(Lch/qos/logback/core/joran/action/ImplicitAction;)V +HSPLch/qos/logback/core/joran/spi/Interpreter;->callBeginAction(Ljava/util/List;Ljava/lang/String;Lorg/xml/sax/Attributes;)V +HSPLch/qos/logback/core/joran/spi/Interpreter;->callBodyAction(Ljava/util/List;Ljava/lang/String;)V +HSPLch/qos/logback/core/joran/spi/Interpreter;->callEndAction(Ljava/util/List;Ljava/lang/String;)V +HSPLch/qos/logback/core/joran/spi/Interpreter;->characters(Lch/qos/logback/core/joran/event/BodyEvent;)V +HSPLch/qos/logback/core/joran/spi/Interpreter;->endElement(Lch/qos/logback/core/joran/event/EndEvent;)V +HSPLch/qos/logback/core/joran/spi/Interpreter;->endElement(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V +HSPLch/qos/logback/core/joran/spi/Interpreter;->getApplicableActionList(Lch/qos/logback/core/joran/spi/ElementPath;Lorg/xml/sax/Attributes;)Ljava/util/List; +HSPLch/qos/logback/core/joran/spi/Interpreter;->getEventPlayer()Lch/qos/logback/core/joran/spi/EventPlayer; +HSPLch/qos/logback/core/joran/spi/Interpreter;->getInterpretationContext()Lch/qos/logback/core/joran/spi/InterpretationContext; +HSPLch/qos/logback/core/joran/spi/Interpreter;->getTagName(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; +HSPLch/qos/logback/core/joran/spi/Interpreter;->lookupImplicitAction(Lch/qos/logback/core/joran/spi/ElementPath;Lorg/xml/sax/Attributes;Lch/qos/logback/core/joran/spi/InterpretationContext;)Ljava/util/List; +HSPLch/qos/logback/core/joran/spi/Interpreter;->setDocumentLocator(Lorg/xml/sax/Locator;)V +HSPLch/qos/logback/core/joran/spi/Interpreter;->startElement(Lch/qos/logback/core/joran/event/StartEvent;)V +HSPLch/qos/logback/core/joran/spi/Interpreter;->startElement(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/xml/sax/Attributes;)V +Lch/qos/logback/core/joran/spi/JoranException; +Lch/qos/logback/core/joran/spi/NoAutoStart; +Lch/qos/logback/core/joran/spi/NoAutoStartUtil; +HSPLch/qos/logback/core/joran/spi/NoAutoStartUtil;->notMarkedWithNoAutoStart(Ljava/lang/Object;)Z +Lch/qos/logback/core/joran/spi/RuleStore; +Lch/qos/logback/core/joran/spi/SimpleRuleStore; +HSPLch/qos/logback/core/joran/spi/SimpleRuleStore;->()V +HSPLch/qos/logback/core/joran/spi/SimpleRuleStore;->(Lch/qos/logback/core/Context;)V +HSPLch/qos/logback/core/joran/spi/SimpleRuleStore;->addRule(Lch/qos/logback/core/joran/spi/ElementSelector;Lch/qos/logback/core/joran/action/Action;)V +HSPLch/qos/logback/core/joran/spi/SimpleRuleStore;->fullPathMatch(Lch/qos/logback/core/joran/spi/ElementPath;)Ljava/util/List; +HSPLch/qos/logback/core/joran/spi/SimpleRuleStore;->isKleeneStar(Ljava/lang/String;)Z +HSPLch/qos/logback/core/joran/spi/SimpleRuleStore;->isSuffixPattern(Lch/qos/logback/core/joran/spi/ElementSelector;)Z +HSPLch/qos/logback/core/joran/spi/SimpleRuleStore;->matchActions(Lch/qos/logback/core/joran/spi/ElementPath;)Ljava/util/List; +HSPLch/qos/logback/core/joran/spi/SimpleRuleStore;->middleMatch(Lch/qos/logback/core/joran/spi/ElementPath;)Ljava/util/List; +HSPLch/qos/logback/core/joran/spi/SimpleRuleStore;->prefixMatch(Lch/qos/logback/core/joran/spi/ElementPath;)Ljava/util/List; +HSPLch/qos/logback/core/joran/spi/SimpleRuleStore;->suffixMatch(Lch/qos/logback/core/joran/spi/ElementPath;)Ljava/util/List; +Lch/qos/logback/core/joran/util/ConfigurationWatchListUtil; +HSPLch/qos/logback/core/joran/util/ConfigurationWatchListUtil;->()V +HSPLch/qos/logback/core/joran/util/ConfigurationWatchListUtil;->()V +HSPLch/qos/logback/core/joran/util/ConfigurationWatchListUtil;->getConfigurationWatchList(Lch/qos/logback/core/Context;)Lch/qos/logback/core/joran/spi/ConfigurationWatchList; +HSPLch/qos/logback/core/joran/util/ConfigurationWatchListUtil;->setMainWatchURL(Lch/qos/logback/core/Context;Ljava/net/URL;)V +Lch/qos/logback/core/joran/util/IntrospectionException; +Lch/qos/logback/core/joran/util/Introspector; +HSPLch/qos/logback/core/joran/util/Introspector;->decapitalize(Ljava/lang/String;)Ljava/lang/String; +HSPLch/qos/logback/core/joran/util/Introspector;->getMethodDescriptors(Ljava/lang/Class;)[Lch/qos/logback/core/joran/util/MethodDescriptor; +HSPLch/qos/logback/core/joran/util/Introspector;->getPropertyDescriptors(Ljava/lang/Class;)[Lch/qos/logback/core/joran/util/PropertyDescriptor; +Lch/qos/logback/core/joran/util/MethodDescriptor; +HSPLch/qos/logback/core/joran/util/MethodDescriptor;->(Ljava/lang/String;Ljava/lang/reflect/Method;)V +HSPLch/qos/logback/core/joran/util/MethodDescriptor;->getName()Ljava/lang/String; +Lch/qos/logback/core/joran/util/PropertyDescriptor; +HSPLch/qos/logback/core/joran/util/PropertyDescriptor;->(Ljava/lang/String;)V +HSPLch/qos/logback/core/joran/util/PropertyDescriptor;->getName()Ljava/lang/String; +HSPLch/qos/logback/core/joran/util/PropertyDescriptor;->getPropertyType()Ljava/lang/Class; +HSPLch/qos/logback/core/joran/util/PropertyDescriptor;->getWriteMethod()Ljava/lang/reflect/Method; +HSPLch/qos/logback/core/joran/util/PropertyDescriptor;->setPropertyType(Ljava/lang/Class;)V +HSPLch/qos/logback/core/joran/util/PropertyDescriptor;->setReadMethod(Ljava/lang/reflect/Method;)V +HSPLch/qos/logback/core/joran/util/PropertyDescriptor;->setWriteMethod(Ljava/lang/reflect/Method;)V +Lch/qos/logback/core/joran/util/PropertySetter; +HSPLch/qos/logback/core/joran/util/PropertySetter;->(Ljava/lang/Object;)V +HSPLch/qos/logback/core/joran/util/PropertySetter;->capitalizeFirstLetter(Ljava/lang/String;)Ljava/lang/String; +HSPLch/qos/logback/core/joran/util/PropertySetter;->computeAggregationType(Ljava/lang/String;)Lch/qos/logback/core/util/AggregationType; +HSPLch/qos/logback/core/joran/util/PropertySetter;->computeRawAggregationType(Ljava/lang/reflect/Method;)Lch/qos/logback/core/util/AggregationType; +HSPLch/qos/logback/core/joran/util/PropertySetter;->findAdderMethod(Ljava/lang/String;)Ljava/lang/reflect/Method; +HSPLch/qos/logback/core/joran/util/PropertySetter;->findSetterMethod(Ljava/lang/String;)Ljava/lang/reflect/Method; +HSPLch/qos/logback/core/joran/util/PropertySetter;->getAnnotation(Ljava/lang/String;Ljava/lang/Class;Ljava/lang/reflect/Method;)Ljava/lang/annotation/Annotation; +HSPLch/qos/logback/core/joran/util/PropertySetter;->getByConcreteType(Ljava/lang/String;Ljava/lang/reflect/Method;)Ljava/lang/Class; +HSPLch/qos/logback/core/joran/util/PropertySetter;->getClassNameViaImplicitRules(Ljava/lang/String;Lch/qos/logback/core/util/AggregationType;Lch/qos/logback/core/joran/spi/DefaultNestedComponentRegistry;)Ljava/lang/Class; +HSPLch/qos/logback/core/joran/util/PropertySetter;->getDefaultClassNameByAnnonation(Ljava/lang/String;Ljava/lang/reflect/Method;)Ljava/lang/Class; +HSPLch/qos/logback/core/joran/util/PropertySetter;->getMethod(Ljava/lang/String;)Ljava/lang/reflect/Method; +HSPLch/qos/logback/core/joran/util/PropertySetter;->getObj()Ljava/lang/Object; +HSPLch/qos/logback/core/joran/util/PropertySetter;->getParameterClassForMethod(Ljava/lang/reflect/Method;)Ljava/lang/Class; +HSPLch/qos/logback/core/joran/util/PropertySetter;->getPropertyDescriptor(Ljava/lang/String;)Lch/qos/logback/core/joran/util/PropertyDescriptor; +HSPLch/qos/logback/core/joran/util/PropertySetter;->getRelevantMethod(Ljava/lang/String;Lch/qos/logback/core/util/AggregationType;)Ljava/lang/reflect/Method; +HSPLch/qos/logback/core/joran/util/PropertySetter;->introspect()V +HSPLch/qos/logback/core/joran/util/PropertySetter;->invokeMethodWithSingleParameterOnThisObject(Ljava/lang/reflect/Method;Ljava/lang/Object;)V +HSPLch/qos/logback/core/joran/util/PropertySetter;->isSanityCheckSuccessful(Ljava/lang/String;Ljava/lang/reflect/Method;[Ljava/lang/Class;Ljava/lang/Object;)Z +HSPLch/qos/logback/core/joran/util/PropertySetter;->isUnequivocallyInstantiable(Ljava/lang/Class;)Z +HSPLch/qos/logback/core/joran/util/PropertySetter;->setComplexProperty(Ljava/lang/String;Ljava/lang/Object;)V +HSPLch/qos/logback/core/joran/util/PropertySetter;->setProperty(Lch/qos/logback/core/joran/util/PropertyDescriptor;Ljava/lang/String;Ljava/lang/String;)V +HSPLch/qos/logback/core/joran/util/PropertySetter;->setProperty(Ljava/lang/String;Ljava/lang/String;)V +Lch/qos/logback/core/joran/util/StringToObjectConverter; +HSPLch/qos/logback/core/joran/util/StringToObjectConverter;->()V +HSPLch/qos/logback/core/joran/util/StringToObjectConverter;->canBeBuiltFromSimpleString(Ljava/lang/Class;)Z +HSPLch/qos/logback/core/joran/util/StringToObjectConverter;->convertArg(Lch/qos/logback/core/spi/ContextAware;Ljava/lang/String;Ljava/lang/Class;)Ljava/lang/Object; +HSPLch/qos/logback/core/joran/util/StringToObjectConverter;->followsTheValueOfConvention(Ljava/lang/Class;)Z +HSPLch/qos/logback/core/joran/util/StringToObjectConverter;->getValueOfMethod(Ljava/lang/Class;)Ljava/lang/reflect/Method; +HSPLch/qos/logback/core/joran/util/StringToObjectConverter;->isOfTypeCharset(Ljava/lang/Class;)Z +Lch/qos/logback/core/net/ssl/KeyManagerFactoryFactoryBean; +Lch/qos/logback/core/net/ssl/KeyStoreFactoryBean; +Lch/qos/logback/core/net/ssl/SSLComponent; +Lch/qos/logback/core/net/ssl/SSLConfiguration; +Lch/qos/logback/core/net/ssl/SSLContextFactoryBean; +Lch/qos/logback/core/net/ssl/SSLNestedComponentRegistryRules; +HSPLch/qos/logback/core/net/ssl/SSLNestedComponentRegistryRules;->addDefaultNestedComponentRegistryRules(Lch/qos/logback/core/joran/spi/DefaultNestedComponentRegistry;)V +Lch/qos/logback/core/net/ssl/SSLParametersConfiguration; +Lch/qos/logback/core/net/ssl/SecureRandomFactoryBean; +Lch/qos/logback/core/net/ssl/TrustManagerFactoryFactoryBean; +Lch/qos/logback/core/pattern/CompositeConverter; +Lch/qos/logback/core/pattern/Converter; +HSPLch/qos/logback/core/pattern/Converter;->()V +HSPLch/qos/logback/core/pattern/Converter;->getNext()Lch/qos/logback/core/pattern/Converter; +HSPLch/qos/logback/core/pattern/Converter;->setNext(Lch/qos/logback/core/pattern/Converter;)V +Lch/qos/logback/core/pattern/ConverterUtil; +HSPLch/qos/logback/core/pattern/ConverterUtil;->findTail(Lch/qos/logback/core/pattern/Converter;)Lch/qos/logback/core/pattern/Converter; +HSPLch/qos/logback/core/pattern/ConverterUtil;->setContextForConverters(Lch/qos/logback/core/Context;Lch/qos/logback/core/pattern/Converter;)V +HSPLch/qos/logback/core/pattern/ConverterUtil;->startConverters(Lch/qos/logback/core/pattern/Converter;)V +Lch/qos/logback/core/pattern/DynamicConverter; +HSPLch/qos/logback/core/pattern/DynamicConverter;->()V +HSPLch/qos/logback/core/pattern/DynamicConverter;->getFirstOption()Ljava/lang/String; +HSPLch/qos/logback/core/pattern/DynamicConverter;->getOptionList()Ljava/util/List; +HSPLch/qos/logback/core/pattern/DynamicConverter;->setContext(Lch/qos/logback/core/Context;)V +HSPLch/qos/logback/core/pattern/DynamicConverter;->setOptionList(Ljava/util/List;)V +HSPLch/qos/logback/core/pattern/DynamicConverter;->start()V +Lch/qos/logback/core/pattern/FormatInfo; +HSPLch/qos/logback/core/pattern/FormatInfo;->()V +HSPLch/qos/logback/core/pattern/FormatInfo;->valueOf(Ljava/lang/String;)Lch/qos/logback/core/pattern/FormatInfo; +Lch/qos/logback/core/pattern/FormattingConverter; +HSPLch/qos/logback/core/pattern/FormattingConverter;->()V +HSPLch/qos/logback/core/pattern/FormattingConverter;->setFormattingInfo(Lch/qos/logback/core/pattern/FormatInfo;)V +Lch/qos/logback/core/pattern/IdentityCompositeConverter; +Lch/qos/logback/core/pattern/LiteralConverter; +HSPLch/qos/logback/core/pattern/LiteralConverter;->(Ljava/lang/String;)V +Lch/qos/logback/core/pattern/PatternLayoutBase; +HSPLch/qos/logback/core/pattern/PatternLayoutBase;->()V +HSPLch/qos/logback/core/pattern/PatternLayoutBase;->getEffectiveConverterMap()Ljava/util/Map; +HSPLch/qos/logback/core/pattern/PatternLayoutBase;->setOutputPatternAsHeader(Z)V +HSPLch/qos/logback/core/pattern/PatternLayoutBase;->setPattern(Ljava/lang/String;)V +HSPLch/qos/logback/core/pattern/PatternLayoutBase;->setPostCompileProcessor(Lch/qos/logback/core/pattern/PostCompileProcessor;)V +HSPLch/qos/logback/core/pattern/PatternLayoutBase;->start()V +Lch/qos/logback/core/pattern/PatternLayoutEncoderBase; +HSPLch/qos/logback/core/pattern/PatternLayoutEncoderBase;->()V +HSPLch/qos/logback/core/pattern/PatternLayoutEncoderBase;->getPattern()Ljava/lang/String; +HSPLch/qos/logback/core/pattern/PatternLayoutEncoderBase;->setPattern(Ljava/lang/String;)V +Lch/qos/logback/core/pattern/PostCompileProcessor; +Lch/qos/logback/core/pattern/ReplacingCompositeConverter; +Lch/qos/logback/core/pattern/parser/Compiler; +HSPLch/qos/logback/core/pattern/parser/Compiler;->(Lch/qos/logback/core/pattern/parser/Node;Ljava/util/Map;)V +HSPLch/qos/logback/core/pattern/parser/Compiler;->addToList(Lch/qos/logback/core/pattern/Converter;)V +HSPLch/qos/logback/core/pattern/parser/Compiler;->compile()Lch/qos/logback/core/pattern/Converter; +HSPLch/qos/logback/core/pattern/parser/Compiler;->createConverter(Lch/qos/logback/core/pattern/parser/SimpleKeywordNode;)Lch/qos/logback/core/pattern/DynamicConverter; +Lch/qos/logback/core/pattern/parser/FormattingNode; +HSPLch/qos/logback/core/pattern/parser/FormattingNode;->(ILjava/lang/Object;)V +HSPLch/qos/logback/core/pattern/parser/FormattingNode;->getFormatInfo()Lch/qos/logback/core/pattern/FormatInfo; +HSPLch/qos/logback/core/pattern/parser/FormattingNode;->setFormatInfo(Lch/qos/logback/core/pattern/FormatInfo;)V +Lch/qos/logback/core/pattern/parser/Node; +HSPLch/qos/logback/core/pattern/parser/Node;->(ILjava/lang/Object;)V +HSPLch/qos/logback/core/pattern/parser/Node;->getValue()Ljava/lang/Object; +HSPLch/qos/logback/core/pattern/parser/Node;->setNext(Lch/qos/logback/core/pattern/parser/Node;)V +Lch/qos/logback/core/pattern/parser/OptionTokenizer; +HSPLch/qos/logback/core/pattern/parser/OptionTokenizer;->(Lch/qos/logback/core/pattern/parser/TokenStream;)V +HSPLch/qos/logback/core/pattern/parser/OptionTokenizer;->(Lch/qos/logback/core/pattern/parser/TokenStream;Lch/qos/logback/core/pattern/util/IEscapeUtil;)V +HSPLch/qos/logback/core/pattern/parser/OptionTokenizer;->emitOptionToken(Ljava/util/List;Ljava/util/List;)V +HSPLch/qos/logback/core/pattern/parser/OptionTokenizer;->tokenize(CLjava/util/List;)V +Lch/qos/logback/core/pattern/parser/Parser; +HSPLch/qos/logback/core/pattern/parser/Parser;->()V +HSPLch/qos/logback/core/pattern/parser/Parser;->(Ljava/lang/String;)V +HSPLch/qos/logback/core/pattern/parser/Parser;->(Ljava/lang/String;Lch/qos/logback/core/pattern/util/IEscapeUtil;)V +HSPLch/qos/logback/core/pattern/parser/Parser;->C()Lch/qos/logback/core/pattern/parser/FormattingNode; +HSPLch/qos/logback/core/pattern/parser/Parser;->E()Lch/qos/logback/core/pattern/parser/Node; +HSPLch/qos/logback/core/pattern/parser/Parser;->Eopt()Lch/qos/logback/core/pattern/parser/Node; +HSPLch/qos/logback/core/pattern/parser/Parser;->SINGLE()Lch/qos/logback/core/pattern/parser/FormattingNode; +HSPLch/qos/logback/core/pattern/parser/Parser;->T()Lch/qos/logback/core/pattern/parser/Node; +HSPLch/qos/logback/core/pattern/parser/Parser;->advanceTokenPointer()V +HSPLch/qos/logback/core/pattern/parser/Parser;->compile(Lch/qos/logback/core/pattern/parser/Node;Ljava/util/Map;)Lch/qos/logback/core/pattern/Converter; +HSPLch/qos/logback/core/pattern/parser/Parser;->expectNotNull(Lch/qos/logback/core/pattern/parser/Token;Ljava/lang/String;)V +HSPLch/qos/logback/core/pattern/parser/Parser;->getCurentToken()Lch/qos/logback/core/pattern/parser/Token; +HSPLch/qos/logback/core/pattern/parser/Parser;->getNextToken()Lch/qos/logback/core/pattern/parser/Token; +HSPLch/qos/logback/core/pattern/parser/Parser;->parse()Lch/qos/logback/core/pattern/parser/Node; +Lch/qos/logback/core/pattern/parser/SimpleKeywordNode; +HSPLch/qos/logback/core/pattern/parser/SimpleKeywordNode;->(Ljava/lang/Object;)V +HSPLch/qos/logback/core/pattern/parser/SimpleKeywordNode;->getOptions()Ljava/util/List; +HSPLch/qos/logback/core/pattern/parser/SimpleKeywordNode;->setOptions(Ljava/util/List;)V +Lch/qos/logback/core/pattern/parser/Token; +HSPLch/qos/logback/core/pattern/parser/Token;->()V +HSPLch/qos/logback/core/pattern/parser/Token;->(I)V +HSPLch/qos/logback/core/pattern/parser/Token;->(ILjava/lang/String;)V +HSPLch/qos/logback/core/pattern/parser/Token;->(ILjava/lang/String;Ljava/util/List;)V +HSPLch/qos/logback/core/pattern/parser/Token;->(ILjava/util/List;)V +HSPLch/qos/logback/core/pattern/parser/Token;->getOptionsList()Ljava/util/List; +HSPLch/qos/logback/core/pattern/parser/Token;->getType()I +HSPLch/qos/logback/core/pattern/parser/Token;->getValue()Ljava/lang/String; +Lch/qos/logback/core/pattern/parser/TokenStream; +HSPLch/qos/logback/core/pattern/parser/TokenStream;->(Ljava/lang/String;Lch/qos/logback/core/pattern/util/IEscapeUtil;)V +HSPLch/qos/logback/core/pattern/parser/TokenStream;->addValuedToken(ILjava/lang/StringBuffer;Ljava/util/List;)V +HSPLch/qos/logback/core/pattern/parser/TokenStream;->handleFormatModifierState(CLjava/util/List;Ljava/lang/StringBuffer;)V +HSPLch/qos/logback/core/pattern/parser/TokenStream;->handleKeywordState(CLjava/util/List;Ljava/lang/StringBuffer;)V +HSPLch/qos/logback/core/pattern/parser/TokenStream;->handleLiteralState(CLjava/util/List;Ljava/lang/StringBuffer;)V +HSPLch/qos/logback/core/pattern/parser/TokenStream;->processOption(CLjava/util/List;Ljava/lang/StringBuffer;)V +HSPLch/qos/logback/core/pattern/parser/TokenStream;->tokenize()Ljava/util/List; +Lch/qos/logback/core/pattern/parser/TokenStream$1; +HSPLch/qos/logback/core/pattern/parser/TokenStream$1;->()V +Lch/qos/logback/core/pattern/parser/TokenStream$TokenizerState; +HSPLch/qos/logback/core/pattern/parser/TokenStream$TokenizerState;->()V +HSPLch/qos/logback/core/pattern/parser/TokenStream$TokenizerState;->(Ljava/lang/String;I)V +HSPLch/qos/logback/core/pattern/parser/TokenStream$TokenizerState;->values()[Lch/qos/logback/core/pattern/parser/TokenStream$TokenizerState; +Lch/qos/logback/core/pattern/util/AsIsEscapeUtil; +HSPLch/qos/logback/core/pattern/util/AsIsEscapeUtil;->()V +Lch/qos/logback/core/pattern/util/IEscapeUtil; +Lch/qos/logback/core/pattern/util/RegularEscapeUtil; +HSPLch/qos/logback/core/pattern/util/RegularEscapeUtil;->()V +Lch/qos/logback/core/pattern/util/RestrictedEscapeUtil; +HSPLch/qos/logback/core/pattern/util/RestrictedEscapeUtil;->()V +Lch/qos/logback/core/spi/AppenderAttachable; +Lch/qos/logback/core/spi/AppenderAttachableImpl; +HSPLch/qos/logback/core/spi/AppenderAttachableImpl;->()V +HSPLch/qos/logback/core/spi/AppenderAttachableImpl;->()V +HSPLch/qos/logback/core/spi/AppenderAttachableImpl;->addAppender(Lch/qos/logback/core/Appender;)V +Lch/qos/logback/core/spi/ContextAware; +Lch/qos/logback/core/spi/ContextAwareBase; +HSPLch/qos/logback/core/spi/ContextAwareBase;->()V +HSPLch/qos/logback/core/spi/ContextAwareBase;->(Lch/qos/logback/core/spi/ContextAware;)V +HSPLch/qos/logback/core/spi/ContextAwareBase;->addInfo(Ljava/lang/String;)V +HSPLch/qos/logback/core/spi/ContextAwareBase;->addStatus(Lch/qos/logback/core/status/Status;)V +HSPLch/qos/logback/core/spi/ContextAwareBase;->getContext()Lch/qos/logback/core/Context; +HSPLch/qos/logback/core/spi/ContextAwareBase;->getDeclaredOrigin()Ljava/lang/Object; +HSPLch/qos/logback/core/spi/ContextAwareBase;->setContext(Lch/qos/logback/core/Context;)V +Lch/qos/logback/core/spi/ContextAwareImpl; +HSPLch/qos/logback/core/spi/ContextAwareImpl;->(Lch/qos/logback/core/Context;Ljava/lang/Object;)V +Lch/qos/logback/core/spi/FilterAttachable; +Lch/qos/logback/core/spi/FilterAttachableImpl; +HSPLch/qos/logback/core/spi/FilterAttachableImpl;->()V +Lch/qos/logback/core/spi/FilterReply; +Lch/qos/logback/core/spi/LifeCycle; +Lch/qos/logback/core/spi/LogbackLock; +HSPLch/qos/logback/core/spi/LogbackLock;->()V +Lch/qos/logback/core/spi/PropertyContainer; +Lch/qos/logback/core/spi/ScanException; +Lch/qos/logback/core/status/InfoStatus; +HSPLch/qos/logback/core/status/InfoStatus;->(Ljava/lang/String;Ljava/lang/Object;)V +Lch/qos/logback/core/status/Status; +Lch/qos/logback/core/status/StatusBase; +HSPLch/qos/logback/core/status/StatusBase;->()V +HSPLch/qos/logback/core/status/StatusBase;->(ILjava/lang/String;Ljava/lang/Object;)V +HSPLch/qos/logback/core/status/StatusBase;->(ILjava/lang/String;Ljava/lang/Object;Ljava/lang/Throwable;)V +HSPLch/qos/logback/core/status/StatusBase;->getDate()Ljava/lang/Long; +HSPLch/qos/logback/core/status/StatusBase;->getLevel()I +Lch/qos/logback/core/status/StatusListener; +Lch/qos/logback/core/status/StatusManager; +Lch/qos/logback/core/status/StatusUtil; +HSPLch/qos/logback/core/status/StatusUtil;->(Lch/qos/logback/core/Context;)V +HSPLch/qos/logback/core/status/StatusUtil;->containsMatch(JILjava/lang/String;)Z +HSPLch/qos/logback/core/status/StatusUtil;->contextHasStatusListener(Lch/qos/logback/core/Context;)Z +HSPLch/qos/logback/core/status/StatusUtil;->filterStatusListByTimeThreshold(Ljava/util/List;J)Ljava/util/List; +HSPLch/qos/logback/core/status/StatusUtil;->getHighestLevel(J)I +HSPLch/qos/logback/core/status/StatusUtil;->hasXMLParsingErrors(J)Z +HSPLch/qos/logback/core/status/StatusUtil;->noXMLParsingErrorsOccurred(J)Z +Lch/qos/logback/core/subst/Node; +HSPLch/qos/logback/core/subst/Node;->(Lch/qos/logback/core/subst/Node$Type;Ljava/lang/Object;)V +HSPLch/qos/logback/core/subst/Node;->append(Lch/qos/logback/core/subst/Node;)V +Lch/qos/logback/core/subst/Node$Type; +HSPLch/qos/logback/core/subst/Node$Type;->()V +HSPLch/qos/logback/core/subst/Node$Type;->(Ljava/lang/String;I)V +HSPLch/qos/logback/core/subst/Node$Type;->values()[Lch/qos/logback/core/subst/Node$Type; +Lch/qos/logback/core/subst/NodeToStringTransformer; +HSPLch/qos/logback/core/subst/NodeToStringTransformer;->(Lch/qos/logback/core/subst/Node;Lch/qos/logback/core/spi/PropertyContainer;Lch/qos/logback/core/spi/PropertyContainer;)V +HSPLch/qos/logback/core/subst/NodeToStringTransformer;->compileNode(Lch/qos/logback/core/subst/Node;Ljava/lang/StringBuilder;Ljava/util/Stack;)V +HSPLch/qos/logback/core/subst/NodeToStringTransformer;->handleLiteral(Lch/qos/logback/core/subst/Node;Ljava/lang/StringBuilder;)V +HSPLch/qos/logback/core/subst/NodeToStringTransformer;->substituteVariable(Ljava/lang/String;Lch/qos/logback/core/spi/PropertyContainer;Lch/qos/logback/core/spi/PropertyContainer;)Ljava/lang/String; +HSPLch/qos/logback/core/subst/NodeToStringTransformer;->tokenizeAndParseString(Ljava/lang/String;)Lch/qos/logback/core/subst/Node; +HSPLch/qos/logback/core/subst/NodeToStringTransformer;->transform()Ljava/lang/String; +Lch/qos/logback/core/subst/NodeToStringTransformer$1; +HSPLch/qos/logback/core/subst/NodeToStringTransformer$1;->()V +Lch/qos/logback/core/subst/Parser; +HSPLch/qos/logback/core/subst/Parser;->(Ljava/util/List;)V +HSPLch/qos/logback/core/subst/Parser;->C()Lch/qos/logback/core/subst/Node; +HSPLch/qos/logback/core/subst/Parser;->E()Lch/qos/logback/core/subst/Node; +HSPLch/qos/logback/core/subst/Parser;->Eopt()Lch/qos/logback/core/subst/Node; +HSPLch/qos/logback/core/subst/Parser;->T()Lch/qos/logback/core/subst/Node; +HSPLch/qos/logback/core/subst/Parser;->advanceTokenPointer()V +HSPLch/qos/logback/core/subst/Parser;->expectCurlyRight(Lch/qos/logback/core/subst/Token;)V +HSPLch/qos/logback/core/subst/Parser;->expectNotNull(Lch/qos/logback/core/subst/Token;Ljava/lang/String;)V +HSPLch/qos/logback/core/subst/Parser;->isDefaultToken(Lch/qos/logback/core/subst/Token;)Z +HSPLch/qos/logback/core/subst/Parser;->makeNewLiteralNode(Ljava/lang/String;)Lch/qos/logback/core/subst/Node; +HSPLch/qos/logback/core/subst/Parser;->parse()Lch/qos/logback/core/subst/Node; +HSPLch/qos/logback/core/subst/Parser;->peekAtCurentToken()Lch/qos/logback/core/subst/Token; +Lch/qos/logback/core/subst/Parser$1; +HSPLch/qos/logback/core/subst/Parser$1;->()V +Lch/qos/logback/core/subst/Token; +HSPLch/qos/logback/core/subst/Token;->()V +HSPLch/qos/logback/core/subst/Token;->(Lch/qos/logback/core/subst/Token$Type;Ljava/lang/String;)V +Lch/qos/logback/core/subst/Token$Type; +HSPLch/qos/logback/core/subst/Token$Type;->()V +HSPLch/qos/logback/core/subst/Token$Type;->(Ljava/lang/String;I)V +HSPLch/qos/logback/core/subst/Token$Type;->values()[Lch/qos/logback/core/subst/Token$Type; +Lch/qos/logback/core/subst/Tokenizer; +HSPLch/qos/logback/core/subst/Tokenizer;->(Ljava/lang/String;)V +HSPLch/qos/logback/core/subst/Tokenizer;->addLiteralToken(Ljava/util/List;Ljava/lang/StringBuilder;)V +HSPLch/qos/logback/core/subst/Tokenizer;->handleLiteralState(CLjava/util/List;Ljava/lang/StringBuilder;)V +HSPLch/qos/logback/core/subst/Tokenizer;->tokenize()Ljava/util/List; +Lch/qos/logback/core/subst/Tokenizer$1; +HSPLch/qos/logback/core/subst/Tokenizer$1;->()V +Lch/qos/logback/core/subst/Tokenizer$TokenizerState; +HSPLch/qos/logback/core/subst/Tokenizer$TokenizerState;->()V +HSPLch/qos/logback/core/subst/Tokenizer$TokenizerState;->(Ljava/lang/String;I)V +HSPLch/qos/logback/core/subst/Tokenizer$TokenizerState;->values()[Lch/qos/logback/core/subst/Tokenizer$TokenizerState; +Lch/qos/logback/core/util/AggregationType; +HSPLch/qos/logback/core/util/AggregationType;->()V +HSPLch/qos/logback/core/util/AggregationType;->(Ljava/lang/String;I)V +HSPLch/qos/logback/core/util/AggregationType;->values()[Lch/qos/logback/core/util/AggregationType; +Lch/qos/logback/core/util/COWArrayList; +HSPLch/qos/logback/core/util/COWArrayList;->([Ljava/lang/Object;)V +HSPLch/qos/logback/core/util/COWArrayList;->addIfAbsent(Ljava/lang/Object;)V +HSPLch/qos/logback/core/util/COWArrayList;->markAsStale()V +Lch/qos/logback/core/util/CachingDateFormatter; +HSPLch/qos/logback/core/util/CachingDateFormatter;->(Ljava/lang/String;)V +HSPLch/qos/logback/core/util/CachingDateFormatter;->(Ljava/lang/String;Ljava/util/Locale;)V +Lch/qos/logback/core/util/CloseUtil; +HSPLch/qos/logback/core/util/CloseUtil;->closeQuietly(Ljava/io/Closeable;)V +Lch/qos/logback/core/util/ContextUtil; +HSPLch/qos/logback/core/util/ContextUtil;->(Lch/qos/logback/core/Context;)V +HSPLch/qos/logback/core/util/ContextUtil;->addHostNameAsProperty()V +Lch/qos/logback/core/util/Duration; +HSPLch/qos/logback/core/util/Duration;->()V +HSPLch/qos/logback/core/util/Duration;->(J)V +HSPLch/qos/logback/core/util/Duration;->buildByMinutes(D)Lch/qos/logback/core/util/Duration; +Lch/qos/logback/core/util/EnvUtil; +HSPLch/qos/logback/core/util/EnvUtil;->()V +HSPLch/qos/logback/core/util/EnvUtil;->isJDK5()Z +HSPLch/qos/logback/core/util/EnvUtil;->isJDK_N_OrHigher(I)Z +Lch/qos/logback/core/util/IncompatibleClassException; +Lch/qos/logback/core/util/Loader; +HSPLch/qos/logback/core/util/Loader;->()V +HSPLch/qos/logback/core/util/Loader;->getClassLoaderOfClass(Ljava/lang/Class;)Ljava/lang/ClassLoader; +HSPLch/qos/logback/core/util/Loader;->getClassLoaderOfObject(Ljava/lang/Object;)Ljava/lang/ClassLoader; +Lch/qos/logback/core/util/Loader$1; +HSPLch/qos/logback/core/util/Loader$1;->()V +HSPLch/qos/logback/core/util/Loader$1;->run()Ljava/lang/Boolean; +HSPLch/qos/logback/core/util/Loader$1;->run()Ljava/lang/Object; +Lch/qos/logback/core/util/OptionHelper; +HSPLch/qos/logback/core/util/OptionHelper;->getAndroidSystemProperty(Ljava/lang/String;)Ljava/lang/String; +HSPLch/qos/logback/core/util/OptionHelper;->getSystemProperty(Ljava/lang/String;)Ljava/lang/String; +HSPLch/qos/logback/core/util/OptionHelper;->getSystemProperty(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; +HSPLch/qos/logback/core/util/OptionHelper;->instantiateByClassName(Ljava/lang/String;Ljava/lang/Class;Lch/qos/logback/core/Context;)Ljava/lang/Object; +HSPLch/qos/logback/core/util/OptionHelper;->instantiateByClassName(Ljava/lang/String;Ljava/lang/Class;Ljava/lang/ClassLoader;)Ljava/lang/Object; +HSPLch/qos/logback/core/util/OptionHelper;->instantiateByClassNameAndParameter(Ljava/lang/String;Ljava/lang/Class;Ljava/lang/ClassLoader;Ljava/lang/Class;Ljava/lang/Object;)Ljava/lang/Object; +HSPLch/qos/logback/core/util/OptionHelper;->isEmpty(Ljava/lang/String;)Z +HSPLch/qos/logback/core/util/OptionHelper;->substVars(Ljava/lang/String;Lch/qos/logback/core/spi/PropertyContainer;Lch/qos/logback/core/spi/PropertyContainer;)Ljava/lang/String; +HSPLch/qos/logback/core/util/OptionHelper;->toBoolean(Ljava/lang/String;Z)Z +Lch/qos/logback/core/util/PropertySetterException; +Lch/qos/logback/core/util/StatusListenerConfigHelper; +HSPLch/qos/logback/core/util/StatusListenerConfigHelper;->installIfAsked(Lch/qos/logback/core/Context;)V +Lch/qos/logback/core/util/StatusPrinter; +HSPLch/qos/logback/core/util/StatusPrinter;->()V +HSPLch/qos/logback/core/util/StatusPrinter;->printInCaseOfErrorsOrWarnings(Lch/qos/logback/core/Context;)V +HSPLch/qos/logback/core/util/StatusPrinter;->printInCaseOfErrorsOrWarnings(Lch/qos/logback/core/Context;J)V +Lcom/android/billingclient/api/AlternativeBillingListener; +Lcom/android/billingclient/api/BillingClient; +HSPLcom/android/billingclient/api/BillingClient;->()V +PLcom/android/billingclient/api/BillingClient;->newBuilder(Landroid/content/Context;)Lcom/android/billingclient/api/BillingClient$Builder; +Lcom/android/billingclient/api/BillingClient$Builder; +PLcom/android/billingclient/api/BillingClient$Builder;->(Landroid/content/Context;Lcom/android/billingclient/api/zzi;)V +HSPLcom/android/billingclient/api/BillingClient$Builder;->build()Lcom/android/billingclient/api/BillingClient; +PLcom/android/billingclient/api/BillingClient$Builder;->enablePendingPurchases()Lcom/android/billingclient/api/BillingClient$Builder; +PLcom/android/billingclient/api/BillingClient$Builder;->setListener(Lcom/android/billingclient/api/PurchasesUpdatedListener;)Lcom/android/billingclient/api/BillingClient$Builder; +Lcom/android/billingclient/api/BillingClientImpl; +HSPLcom/android/billingclient/api/BillingClientImpl;->(Ljava/lang/String;Lcom/android/billingclient/api/zzbx;Landroid/content/Context;Lcom/android/billingclient/api/PurchasesUpdatedListener;Lcom/android/billingclient/api/AlternativeBillingListener;Lcom/android/billingclient/api/zzbi;Ljava/util/concurrent/ExecutorService;)V +HSPLcom/android/billingclient/api/BillingClientImpl;->initialize(Landroid/content/Context;Lcom/android/billingclient/api/PurchasesUpdatedListener;Lcom/android/billingclient/api/zzbx;Lcom/android/billingclient/api/AlternativeBillingListener;Ljava/lang/String;Lcom/android/billingclient/api/zzbi;)V +HSPLcom/android/billingclient/api/BillingClientImpl;->isReady()Z +HSPLcom/android/billingclient/api/BillingClientImpl;->startConnection(Lcom/android/billingclient/api/BillingClientStateListener;)V +HSPLcom/android/billingclient/api/BillingClientImpl;->zzA(Lcom/android/billingclient/api/BillingClientImpl;Z)V +HSPLcom/android/billingclient/api/BillingClientImpl;->zzB(Lcom/android/billingclient/api/BillingClientImpl;Z)V +HSPLcom/android/billingclient/api/BillingClientImpl;->zzC(Lcom/android/billingclient/api/BillingClientImpl;Z)V +HSPLcom/android/billingclient/api/BillingClientImpl;->zzD(Lcom/android/billingclient/api/BillingClientImpl;Z)V +HSPLcom/android/billingclient/api/BillingClientImpl;->zzE(Lcom/android/billingclient/api/BillingClientImpl;Z)V +HSPLcom/android/billingclient/api/BillingClientImpl;->zzF(Lcom/android/billingclient/api/BillingClientImpl;Z)V +HSPLcom/android/billingclient/api/BillingClientImpl;->zzG(Lcom/android/billingclient/api/BillingClientImpl;Z)V +HSPLcom/android/billingclient/api/BillingClientImpl;->zzH(Lcom/android/billingclient/api/BillingClientImpl;Z)V +HSPLcom/android/billingclient/api/BillingClientImpl;->zzI(Lcom/android/billingclient/api/BillingClientImpl;Z)V +HSPLcom/android/billingclient/api/BillingClientImpl;->zzJ(Lcom/android/billingclient/api/BillingClientImpl;Lcom/google/android/gms/internal/play_billing/zzm;)V +HSPLcom/android/billingclient/api/BillingClientImpl;->zzK(Lcom/android/billingclient/api/BillingClientImpl;Z)V +HSPLcom/android/billingclient/api/BillingClientImpl;->zzL(Lcom/android/billingclient/api/BillingClientImpl;Z)V +HSPLcom/android/billingclient/api/BillingClientImpl;->zzY()Landroid/os/Handler; +HSPLcom/android/billingclient/api/BillingClientImpl;->zza(Lcom/android/billingclient/api/BillingClientImpl;)I +HSPLcom/android/billingclient/api/BillingClientImpl;->zzab()Ljava/lang/String; +HSPLcom/android/billingclient/api/BillingClientImpl;->zzac(Ljava/util/concurrent/Callable;JLjava/lang/Runnable;Landroid/os/Handler;)Ljava/util/concurrent/Future; +HSPLcom/android/billingclient/api/BillingClientImpl;->zzb(Lcom/android/billingclient/api/BillingClientImpl;)Landroid/content/Context; +HSPLcom/android/billingclient/api/BillingClientImpl;->zze(Lcom/android/billingclient/api/BillingClientImpl;)Landroid/os/Handler; +HSPLcom/android/billingclient/api/BillingClientImpl;->zzh(Lcom/android/billingclient/api/BillingClientImpl;)Lcom/android/billingclient/api/zzbi; +HSPLcom/android/billingclient/api/BillingClientImpl;->zzj(Lcom/android/billingclient/api/BillingClientImpl;)Lcom/google/android/gms/internal/play_billing/zzm; +HSPLcom/android/billingclient/api/BillingClientImpl;->zzt(Lcom/android/billingclient/api/BillingClientImpl;Ljava/util/concurrent/Callable;JLjava/lang/Runnable;Landroid/os/Handler;)Ljava/util/concurrent/Future; +HSPLcom/android/billingclient/api/BillingClientImpl;->zzu(Lcom/android/billingclient/api/BillingClientImpl;I)V +HSPLcom/android/billingclient/api/BillingClientImpl;->zzw(Lcom/android/billingclient/api/BillingClientImpl;Z)V +HSPLcom/android/billingclient/api/BillingClientImpl;->zzx(Lcom/android/billingclient/api/BillingClientImpl;Z)V +HSPLcom/android/billingclient/api/BillingClientImpl;->zzy(Lcom/android/billingclient/api/BillingClientImpl;Z)V +HSPLcom/android/billingclient/api/BillingClientImpl;->zzz(Lcom/android/billingclient/api/BillingClientImpl;Z)V +Lcom/android/billingclient/api/BillingClientStateListener; +Lcom/android/billingclient/api/BillingResult; +HSPLcom/android/billingclient/api/BillingResult;->()V +HSPLcom/android/billingclient/api/BillingResult;->getDebugMessage()Ljava/lang/String; +HSPLcom/android/billingclient/api/BillingResult;->getResponseCode()I +HSPLcom/android/billingclient/api/BillingResult;->newBuilder()Lcom/android/billingclient/api/BillingResult$Builder; +HSPLcom/android/billingclient/api/BillingResult;->zza(Lcom/android/billingclient/api/BillingResult;Ljava/lang/String;)V +HSPLcom/android/billingclient/api/BillingResult;->zzb(Lcom/android/billingclient/api/BillingResult;I)V +Lcom/android/billingclient/api/BillingResult$Builder; +HSPLcom/android/billingclient/api/BillingResult$Builder;->(Lcom/android/billingclient/api/zzbj;)V +HSPLcom/android/billingclient/api/BillingResult$Builder;->build()Lcom/android/billingclient/api/BillingResult; +HSPLcom/android/billingclient/api/BillingResult$Builder;->setDebugMessage(Ljava/lang/String;)Lcom/android/billingclient/api/BillingResult$Builder; +HSPLcom/android/billingclient/api/BillingResult$Builder;->setResponseCode(I)Lcom/android/billingclient/api/BillingResult$Builder; +Lcom/android/billingclient/api/PurchasesUpdatedListener; +Lcom/android/billingclient/api/UserChoiceBillingListener; +Lcom/android/billingclient/api/zzag; +HSPLcom/android/billingclient/api/zzag;->(Lcom/android/billingclient/api/BillingClientImpl;)V +HSPLcom/android/billingclient/api/zzag;->newThread(Ljava/lang/Runnable;)Ljava/lang/Thread; +Lcom/android/billingclient/api/zzal; +HSPLcom/android/billingclient/api/zzal;->(Lcom/android/billingclient/api/zzao;)V +HSPLcom/android/billingclient/api/zzal;->call()Ljava/lang/Object; +Lcom/android/billingclient/api/zzam; +HSPLcom/android/billingclient/api/zzam;->(Lcom/android/billingclient/api/zzao;)V +Lcom/android/billingclient/api/zzao; +HSPLcom/android/billingclient/api/zzao;->(Lcom/android/billingclient/api/BillingClientImpl;Lcom/android/billingclient/api/BillingClientStateListener;Lcom/android/billingclient/api/zzan;)V +HSPLcom/android/billingclient/api/zzao;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V +HSPLcom/android/billingclient/api/zzao;->zza()Ljava/lang/Object; +HSPLcom/android/billingclient/api/zzao;->zzd(Lcom/android/billingclient/api/BillingResult;)V +Lcom/android/billingclient/api/zzbh; +HSPLcom/android/billingclient/api/zzbh;->zza(IILcom/android/billingclient/api/BillingResult;)Lcom/google/android/gms/internal/play_billing/zzhy; +Lcom/android/billingclient/api/zzbi; +Lcom/android/billingclient/api/zzbk; +HSPLcom/android/billingclient/api/zzbk;->()V +Lcom/android/billingclient/api/zzbn; +HSPLcom/android/billingclient/api/zzbn;->(Landroid/content/Context;Lcom/google/android/gms/internal/play_billing/zzio;)V +HSPLcom/android/billingclient/api/zzbn;->zza(Lcom/google/android/gms/internal/play_billing/zzhy;)V +Lcom/android/billingclient/api/zzbo; +HSPLcom/android/billingclient/api/zzbo;->()V +HSPLcom/android/billingclient/api/zzbo;->()V +HSPLcom/android/billingclient/api/zzbo;->apply(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/android/billingclient/api/zzbp; +HSPLcom/android/billingclient/api/zzbp;->(Landroid/content/Context;)V +HSPLcom/android/billingclient/api/zzbp;->zza(Lcom/google/android/gms/internal/play_billing/zziv;)V +Lcom/android/billingclient/api/zzbq; +Lcom/android/billingclient/api/zzbv; +PLcom/android/billingclient/api/zzbv;->(Lcom/android/billingclient/api/zzbu;)V +PLcom/android/billingclient/api/zzbv;->zza()Lcom/android/billingclient/api/zzbv; +PLcom/android/billingclient/api/zzbv;->zzb()Lcom/android/billingclient/api/zzbx; +Lcom/android/billingclient/api/zzbx; +PLcom/android/billingclient/api/zzbx;->(ZZLcom/android/billingclient/api/zzbw;)V +Lcom/android/billingclient/api/zzg; +HSPLcom/android/billingclient/api/zzg;->(Lcom/android/billingclient/api/zzh;Lcom/android/billingclient/api/PurchasesUpdatedListener;Lcom/android/billingclient/api/AlternativeBillingListener;Lcom/android/billingclient/api/zzbi;Lcom/android/billingclient/api/zzf;)V +Lcom/android/billingclient/api/zzh; +HSPLcom/android/billingclient/api/zzh;->(Landroid/content/Context;Lcom/android/billingclient/api/PurchasesUpdatedListener;Lcom/android/billingclient/api/AlternativeBillingListener;Lcom/android/billingclient/api/zzbi;)V +Lcom/android/billingclient/api/zzn; +HSPLcom/android/billingclient/api/zzn;->(Ljava/util/concurrent/Future;Ljava/lang/Runnable;)V +Lcom/android/billingclient/ktx/BuildConfig; +Lcom/artemchep/bindin/BindInKt; +HSPLcom/artemchep/bindin/BindInKt;->$r8$lambda$7FZYiAZKPPHiKth_BqoIeBFpcSE(Landroidx/lifecycle/Lifecycle$State;Lkotlin/jvm/internal/Ref$BooleanRef;Lkotlin/jvm/internal/Ref$ObjectRef;Landroidx/lifecycle/LifecycleOwner;Lkotlin/jvm/functions/Function1;Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V +HSPLcom/artemchep/bindin/BindInKt;->()V +HSPLcom/artemchep/bindin/BindInKt;->bindBlock$default(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$State;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lkotlin/jvm/functions/Function0; +HSPLcom/artemchep/bindin/BindInKt;->bindBlock$lambda-2(Landroidx/lifecycle/Lifecycle$State;Lkotlin/jvm/internal/Ref$BooleanRef;Lkotlin/jvm/internal/Ref$ObjectRef;Landroidx/lifecycle/LifecycleOwner;Lkotlin/jvm/functions/Function1;Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V +HSPLcom/artemchep/bindin/BindInKt;->bindBlock(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$State;Lkotlin/jvm/functions/Function1;)Lkotlin/jvm/functions/Function0; +Lcom/artemchep/bindin/BindInKt$$ExternalSyntheticLambda0; +HSPLcom/artemchep/bindin/BindInKt$$ExternalSyntheticLambda0;->(Landroidx/lifecycle/Lifecycle$State;Lkotlin/jvm/internal/Ref$BooleanRef;Lkotlin/jvm/internal/Ref$ObjectRef;Landroidx/lifecycle/LifecycleOwner;Lkotlin/jvm/functions/Function1;)V +HSPLcom/artemchep/bindin/BindInKt$$ExternalSyntheticLambda0;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V +Lcom/artemchep/bindin/BindInKt$bindBlock$observer$1$1; +HSPLcom/artemchep/bindin/BindInKt$bindBlock$observer$1$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/bindin/BindInKt$bindBlock$observer$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/bindin/BindInKt$bindBlock$observer$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/bindin/BindInKt$bindBlock$registration$1; +HSPLcom/artemchep/bindin/BindInKt$bindBlock$registration$1;->(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/LifecycleEventObserver;Lkotlin/jvm/internal/Ref$ObjectRef;)V +Lcom/artemchep/keyguard/AppMode; +Lcom/artemchep/keyguard/AppMode$HasType; +Lcom/artemchep/keyguard/AppMode$Main; +HSPLcom/artemchep/keyguard/AppMode$Main;->()V +HSPLcom/artemchep/keyguard/AppMode$Main;->()V +Lcom/artemchep/keyguard/AppMode$Pick; +Lcom/artemchep/keyguard/AppMode$PickPasskey; +Lcom/artemchep/keyguard/AppMode$Save; +Lcom/artemchep/keyguard/AppMode$SavePasskey; +Lcom/artemchep/keyguard/AutofillActArgsKt; +HSPLcom/artemchep/keyguard/AutofillActArgsKt;->getAutofillTarget(Lcom/artemchep/keyguard/AppMode;)Lcom/artemchep/keyguard/common/model/AutofillTarget; +Lcom/artemchep/keyguard/LocalAppModeKt; +HSPLcom/artemchep/keyguard/LocalAppModeKt;->()V +HSPLcom/artemchep/keyguard/LocalAppModeKt;->getLocalAppMode()Landroidx/compose/runtime/ProvidableCompositionLocal; +Lcom/artemchep/keyguard/LocalAppModeKt$LocalAppMode$1; +HSPLcom/artemchep/keyguard/LocalAppModeKt$LocalAppMode$1;->()V +HSPLcom/artemchep/keyguard/LocalAppModeKt$LocalAppMode$1;->()V +Lcom/artemchep/keyguard/Main; +HSPLcom/artemchep/keyguard/Main;->()V +HSPLcom/artemchep/keyguard/Main;->()V +HSPLcom/artemchep/keyguard/Main;->access$onCreate$lambda$1(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetVaultSession; +HSPLcom/artemchep/keyguard/Main;->access$onCreate$lambda$11(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetVaultLockAfterScreenOff; +HSPLcom/artemchep/keyguard/Main;->access$onCreate$lambda$12(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/service/power/PowerService; +HSPLcom/artemchep/keyguard/Main;->access$onCreate$lambda$3(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetVaultPersist; +HSPLcom/artemchep/keyguard/Main;->access$onCreate$lambda$4(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/service/vault/KeyReadWriteRepository; +HSPLcom/artemchep/keyguard/Main;->access$onCreate$lambda$6(Lkotlin/Lazy;)Lcom/artemchep/keyguard/android/downloader/journal/DownloadRepository; +HSPLcom/artemchep/keyguard/Main;->access$onCreate$lambda$7(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/CleanUpAttachment; +HSPLcom/artemchep/keyguard/Main;->access$onCreate$lambda$8(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/AppWorker; +HSPLcom/artemchep/keyguard/Main;->attachBaseContext(Landroid/content/Context;)V +HSPLcom/artemchep/keyguard/Main;->getDi()Lorg/kodein/di/DI; +HSPLcom/artemchep/keyguard/Main;->getDi()Lorg/kodein/di/LazyDI; +HSPLcom/artemchep/keyguard/Main;->getDiContext()Lorg/kodein/di/DIContext; +HSPLcom/artemchep/keyguard/Main;->getDiTrigger()Lorg/kodein/di/DITrigger; +HSPLcom/artemchep/keyguard/Main;->onCreate$lambda$1(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetVaultSession; +HSPLcom/artemchep/keyguard/Main;->onCreate$lambda$11(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetVaultLockAfterScreenOff; +HSPLcom/artemchep/keyguard/Main;->onCreate$lambda$12(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/service/power/PowerService; +HSPLcom/artemchep/keyguard/Main;->onCreate$lambda$3(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetVaultPersist; +HSPLcom/artemchep/keyguard/Main;->onCreate$lambda$4(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/service/vault/KeyReadWriteRepository; +HSPLcom/artemchep/keyguard/Main;->onCreate$lambda$6(Lkotlin/Lazy;)Lcom/artemchep/keyguard/android/downloader/journal/DownloadRepository; +HSPLcom/artemchep/keyguard/Main;->onCreate$lambda$7(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/CleanUpAttachment; +HSPLcom/artemchep/keyguard/Main;->onCreate$lambda$8(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/AppWorker; +HSPLcom/artemchep/keyguard/Main;->onCreate()V +Lcom/artemchep/keyguard/Main$di$2; +HSPLcom/artemchep/keyguard/Main$di$2;->(Lcom/artemchep/keyguard/Main;)V +HSPLcom/artemchep/keyguard/Main$di$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/Main$di$2;->invoke(Lorg/kodein/di/DI$MainBuilder;)V +Lcom/artemchep/keyguard/Main$di$2$1; +HSPLcom/artemchep/keyguard/Main$di$2$1;->(Lcom/artemchep/keyguard/Main;)V +HSPLcom/artemchep/keyguard/Main$di$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/Main$di$2$1;->invoke(Lorg/kodein/di/bindings/NoArgBindingDI;)Lcom/artemchep/keyguard/billing/BillingManagerImpl; +Lcom/artemchep/keyguard/Main$di$2$invoke$$inlined$bind$default$1; +HSPLcom/artemchep/keyguard/Main$di$2$invoke$$inlined$bind$default$1;->()V +Lcom/artemchep/keyguard/Main$di$2$invoke$$inlined$singleton$default$1; +HSPLcom/artemchep/keyguard/Main$di$2$invoke$$inlined$singleton$default$1;->()V +Lcom/artemchep/keyguard/Main$onCreate$$inlined$instance$1; +HSPLcom/artemchep/keyguard/Main$onCreate$$inlined$instance$1;->()V +Lcom/artemchep/keyguard/Main$onCreate$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/Main$onCreate$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/Main$onCreate$$inlined$instance$default$10; +HSPLcom/artemchep/keyguard/Main$onCreate$$inlined$instance$default$10;->()V +Lcom/artemchep/keyguard/Main$onCreate$$inlined$instance$default$11; +HSPLcom/artemchep/keyguard/Main$onCreate$$inlined$instance$default$11;->()V +Lcom/artemchep/keyguard/Main$onCreate$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/Main$onCreate$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/Main$onCreate$$inlined$instance$default$3; +HSPLcom/artemchep/keyguard/Main$onCreate$$inlined$instance$default$3;->()V +Lcom/artemchep/keyguard/Main$onCreate$$inlined$instance$default$4; +HSPLcom/artemchep/keyguard/Main$onCreate$$inlined$instance$default$4;->()V +Lcom/artemchep/keyguard/Main$onCreate$$inlined$instance$default$5; +HSPLcom/artemchep/keyguard/Main$onCreate$$inlined$instance$default$5;->()V +Lcom/artemchep/keyguard/Main$onCreate$$inlined$instance$default$6; +HSPLcom/artemchep/keyguard/Main$onCreate$$inlined$instance$default$6;->()V +Lcom/artemchep/keyguard/Main$onCreate$$inlined$instance$default$7; +HSPLcom/artemchep/keyguard/Main$onCreate$$inlined$instance$default$7;->()V +Lcom/artemchep/keyguard/Main$onCreate$$inlined$instance$default$8; +HSPLcom/artemchep/keyguard/Main$onCreate$$inlined$instance$default$8;->()V +Lcom/artemchep/keyguard/Main$onCreate$$inlined$instance$default$9; +HSPLcom/artemchep/keyguard/Main$onCreate$$inlined$instance$default$9;->()V +Lcom/artemchep/keyguard/Main$onCreate$$inlined$map$1; +HSPLcom/artemchep/keyguard/Main$onCreate$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/Main$onCreate$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/Main$onCreate$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/Main$onCreate$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/Main$onCreate$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/Main$onCreate$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/Main$onCreate$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/Main$onCreate$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/Main$onCreate$1; +HSPLcom/artemchep/keyguard/Main$onCreate$1;->(Lkotlinx/coroutines/flow/Flow;Lkotlin/Lazy;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/Main$onCreate$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/Main$onCreate$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/Main$onCreate$2; +HSPLcom/artemchep/keyguard/Main$onCreate$2;->(Lkotlin/Lazy;Lkotlin/Lazy;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/Main$onCreate$2;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/Main$onCreate$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/Main$onCreate$2;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/Main$onCreate$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/Main$onCreate$2$1; +HSPLcom/artemchep/keyguard/Main$onCreate$2$1;->(Lkotlin/Lazy;Lkotlin/Lazy;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/Main$onCreate$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/Main$onCreate$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/Main$onCreate$2$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/Main$onCreate$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/Main$onCreate$3; +HSPLcom/artemchep/keyguard/Main$onCreate$3;->(Lkotlin/Lazy;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/Main$onCreate$3;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/Main$onCreate$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/Main$onCreate$3;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/Main$onCreate$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/Main$onCreate$3$2; +HSPLcom/artemchep/keyguard/Main$onCreate$3$2;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/Main$onCreate$3$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/Main$onCreate$3$2;->invoke(Lcom/artemchep/keyguard/common/usecase/GetAccounts;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/Main$onCreate$3$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/Main$onCreate$3$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/Main$onCreate$3$2$1; +HSPLcom/artemchep/keyguard/Main$onCreate$3$2$1;->(Lcom/artemchep/keyguard/common/usecase/GetAccounts;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/Main$onCreate$3$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/Main$onCreate$3$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/Main$onCreate$3$2$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/Main$onCreate$3$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/Main$onCreate$3$invokeSuspend$$inlined$map$1; +HSPLcom/artemchep/keyguard/Main$onCreate$3$invokeSuspend$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/Main$onCreate$3$invokeSuspend$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/Main$onCreate$3$invokeSuspend$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/Main$onCreate$3$invokeSuspend$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/Main$onCreate$3$invokeSuspend$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/Main$onCreate$3$invokeSuspend$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/Main$onCreate$3$invokeSuspend$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/Main$onCreate$3$invokeSuspend$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/Main$onCreate$3$invokeSuspend$lambda$0$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/Main$onCreate$3$invokeSuspend$lambda$0$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/Main$onCreate$4; +HSPLcom/artemchep/keyguard/Main$onCreate$4;->(Lkotlin/Lazy;Lkotlin/Lazy;Lkotlin/Lazy;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/Main$onCreate$4;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/Main$onCreate$4;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/Main$onCreate$4;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/Main$onCreate$4;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/Main$onCreate$4$1; +HSPLcom/artemchep/keyguard/Main$onCreate$4$1;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/Main$onCreate$4$1;->invoke(Lcom/artemchep/keyguard/common/model/MasterSession;ZLkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/Main$onCreate$4$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/Main$onCreate$4$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/Main$onCreate$4$2; +HSPLcom/artemchep/keyguard/Main$onCreate$4$2;->(Lkotlin/Lazy;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/Main$onCreate$4$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/Main$onCreate$4$2;->invoke(Lcom/artemchep/keyguard/common/model/MasterKey;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/Main$onCreate$4$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/Main$onCreate$4$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/Main$onCreate$5; +HSPLcom/artemchep/keyguard/Main$onCreate$5;->(Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlin/Lazy;Lcom/artemchep/keyguard/Main;Lkotlin/Lazy;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/Main$onCreate$5;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/Main$onCreate$5;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/Main$onCreate$5;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/Main$onCreate$5;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/Main$onCreate$6; +HSPLcom/artemchep/keyguard/Main$onCreate$6;->(Lkotlin/Lazy;Lkotlin/Lazy;Lkotlin/Lazy;Lkotlin/Lazy;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/Main$onCreate$6;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/Main$onCreate$6;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/Main$onCreate$6$6; +HSPLcom/artemchep/keyguard/Main$onCreate$6$6;->(Lkotlinx/coroutines/CoroutineScope;Lkotlin/Lazy;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$filter$1; +HSPLcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$filter$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$filter$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$filter$1$2; +HSPLcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$filter$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +Lcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$flatMapLatest$1; +HSPLcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$flatMapLatest$1;->(Lkotlin/coroutines/Continuation;Lkotlin/Lazy;)V +HSPLcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$flatMapLatest$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$flatMapLatest$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$flatMapLatest$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$flatMapLatest$2; +HSPLcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$flatMapLatest$2;->(Lkotlin/coroutines/Continuation;Lkotlinx/coroutines/flow/SharedFlow;)V +HSPLcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$flatMapLatest$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$flatMapLatest$2;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$flatMapLatest$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$map$1; +HSPLcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$map$2; +HSPLcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$map$2;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$map$2;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$map$2$2; +HSPLcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$map$2$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$map$2$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$map$2$2$1; +HSPLcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$map$2$2$1;->(Lcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$map$2$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$map$3; +HSPLcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$map$3;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$map$3;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$map$3$2; +HSPLcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$map$3$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$map$3$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$map$3$2$1; +HSPLcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$map$3$2$1;->(Lcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$$inlined$map$3$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$lambda$6$$inlined$mapNotNull$1; +HSPLcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$lambda$6$$inlined$mapNotNull$1;->(Lkotlinx/coroutines/flow/Flow;Lkotlinx/datetime/Instant;)V +HSPLcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$lambda$6$$inlined$mapNotNull$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$lambda$6$$inlined$mapNotNull$1$2; +HSPLcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$lambda$6$$inlined$mapNotNull$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lkotlinx/datetime/Instant;)V +HSPLcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$lambda$6$$inlined$mapNotNull$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$lambda$6$$inlined$mapNotNull$1$2$1; +HSPLcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$lambda$6$$inlined$mapNotNull$1$2$1;->(Lcom/artemchep/keyguard/Main$onCreate$6$invokeSuspend$lambda$6$$inlined$mapNotNull$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/android/BaseActivity; +HSPLcom/artemchep/keyguard/android/BaseActivity;->()V +HSPLcom/artemchep/keyguard/android/BaseActivity;->()V +HSPLcom/artemchep/keyguard/android/BaseActivity;->Navigation(Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/android/BaseActivity;->access$Navigation(Lcom/artemchep/keyguard/android/BaseActivity;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/android/BaseActivity;->access$setLastUseExternalBrowser$p(Lcom/artemchep/keyguard/android/BaseActivity;Z)V +HSPLcom/artemchep/keyguard/android/BaseActivity;->getDi()Lorg/kodein/di/DI; +HSPLcom/artemchep/keyguard/android/BaseActivity;->getDiContext()Lorg/kodein/di/DIContext; +HSPLcom/artemchep/keyguard/android/BaseActivity;->getDiTrigger()Lorg/kodein/di/DITrigger; +HSPLcom/artemchep/keyguard/android/BaseActivity;->onCreate$lambda$0(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetAllowScreenshots; +HSPLcom/artemchep/keyguard/android/BaseActivity;->onCreate$lambda$1(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetUseExternalBrowser; +HSPLcom/artemchep/keyguard/android/BaseActivity;->onCreate(Landroid/os/Bundle;)V +Lcom/artemchep/keyguard/android/BaseActivity$Navigation$1; +HSPLcom/artemchep/keyguard/android/BaseActivity$Navigation$1;->()V +HSPLcom/artemchep/keyguard/android/BaseActivity$Navigation$1;->(Lcom/artemchep/keyguard/android/BaseActivity;Lkotlin/jvm/functions/Function2;)V +HSPLcom/artemchep/keyguard/android/BaseActivity$Navigation$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/android/BaseActivity$Navigation$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/android/BaseActivity$Navigation$1$1; +HSPLcom/artemchep/keyguard/android/BaseActivity$Navigation$1$1;->(Lcom/artemchep/keyguard/android/BaseActivity;Lkotlin/Lazy;)V +Lcom/artemchep/keyguard/android/BaseActivity$Navigation$1$2; +HSPLcom/artemchep/keyguard/android/BaseActivity$Navigation$1$2;->(Lkotlin/jvm/functions/Function2;)V +HSPLcom/artemchep/keyguard/android/BaseActivity$Navigation$1$2;->invoke(Lcom/artemchep/keyguard/feature/navigation/NavigationController;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/android/BaseActivity$Navigation$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/android/BaseActivity$Navigation$1$2$1; +HSPLcom/artemchep/keyguard/android/BaseActivity$Navigation$1$2$1;->(Lcom/artemchep/keyguard/feature/navigation/BackHandler;Lcom/artemchep/keyguard/feature/navigation/NavigationController;)V +HSPLcom/artemchep/keyguard/android/BaseActivity$Navigation$1$2$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult; +HSPLcom/artemchep/keyguard/android/BaseActivity$Navigation$1$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/android/BaseActivity$Navigation$1$2$1$invoke$$inlined$onDispose$1; +HSPLcom/artemchep/keyguard/android/BaseActivity$Navigation$1$2$1$invoke$$inlined$onDispose$1;->(Lkotlin/jvm/functions/Function0;)V +Lcom/artemchep/keyguard/android/BaseActivity$Navigation$1$invoke$$inlined$rememberInstance$1; +HSPLcom/artemchep/keyguard/android/BaseActivity$Navigation$1$invoke$$inlined$rememberInstance$1;->()V +Lcom/artemchep/keyguard/android/BaseActivity$onCreate$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/android/BaseActivity$onCreate$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/android/BaseActivity$onCreate$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/android/BaseActivity$onCreate$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/android/BaseActivity$onCreate$1; +HSPLcom/artemchep/keyguard/android/BaseActivity$onCreate$1;->(Lcom/artemchep/keyguard/android/BaseActivity;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/android/BaseActivity$onCreate$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/android/BaseActivity$onCreate$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/BaseActivity$onCreate$1;->invoke(ZLkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/BaseActivity$onCreate$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/android/BaseActivity$onCreate$2; +HSPLcom/artemchep/keyguard/android/BaseActivity$onCreate$2;->(Lcom/artemchep/keyguard/android/BaseActivity;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/android/BaseActivity$onCreate$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/android/BaseActivity$onCreate$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/BaseActivity$onCreate$2;->invoke(ZLkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/BaseActivity$onCreate$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/android/BaseActivity$onCreate$3; +HSPLcom/artemchep/keyguard/android/BaseActivity$onCreate$3;->(Lcom/artemchep/keyguard/android/BaseActivity;)V +HSPLcom/artemchep/keyguard/android/BaseActivity$onCreate$3;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/android/BaseActivity$onCreate$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/android/BaseActivity$onCreate$3$1; +HSPLcom/artemchep/keyguard/android/BaseActivity$onCreate$3$1;->(Lcom/artemchep/keyguard/android/BaseActivity;)V +HSPLcom/artemchep/keyguard/android/BaseActivity$onCreate$3$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/android/BaseActivity$onCreate$3$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/android/BaseActivity$onCreate$3$1$1; +HSPLcom/artemchep/keyguard/android/BaseActivity$onCreate$3$1$1;->()V +HSPLcom/artemchep/keyguard/android/BaseActivity$onCreate$3$1$1;->()V +HSPLcom/artemchep/keyguard/android/BaseActivity$onCreate$3$1$1;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V +HSPLcom/artemchep/keyguard/android/BaseActivity$onCreate$3$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/android/BaseActivity$onCreate$3$1$2; +HSPLcom/artemchep/keyguard/android/BaseActivity$onCreate$3$1$2;->(Lcom/artemchep/keyguard/android/BaseActivity;)V +HSPLcom/artemchep/keyguard/android/BaseActivity$onCreate$3$1$2;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/android/BaseActivity$onCreate$3$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/android/BaseActivity$onCreate$3$1$2$1; +HSPLcom/artemchep/keyguard/android/BaseActivity$onCreate$3$1$2$1;->(Lcom/artemchep/keyguard/android/BaseActivity;)V +HSPLcom/artemchep/keyguard/android/BaseActivity$onCreate$3$1$2$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/android/BaseActivity$onCreate$3$1$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/android/BaseActivity$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/android/BaseActivity$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/android/BaseActivity$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/android/BaseActivity$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/android/BaseApp; +HSPLcom/artemchep/keyguard/android/BaseApp;->()V +HSPLcom/artemchep/keyguard/android/BaseApp;->()V +Lcom/artemchep/keyguard/android/ComposableSingletons$MainActivityKt; +HSPLcom/artemchep/keyguard/android/ComposableSingletons$MainActivityKt;->()V +HSPLcom/artemchep/keyguard/android/ComposableSingletons$MainActivityKt;->()V +HSPLcom/artemchep/keyguard/android/ComposableSingletons$MainActivityKt;->getLambda-1$common_playStoreRelease()Lkotlin/jvm/functions/Function2; +Lcom/artemchep/keyguard/android/ComposableSingletons$MainActivityKt$lambda-1$1; +HSPLcom/artemchep/keyguard/android/ComposableSingletons$MainActivityKt$lambda-1$1;->()V +HSPLcom/artemchep/keyguard/android/ComposableSingletons$MainActivityKt$lambda-1$1;->()V +HSPLcom/artemchep/keyguard/android/ComposableSingletons$MainActivityKt$lambda-1$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/android/ComposableSingletons$MainActivityKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/android/MainActivity; +HSPLcom/artemchep/keyguard/android/MainActivity;->()V +HSPLcom/artemchep/keyguard/android/MainActivity;->()V +HSPLcom/artemchep/keyguard/android/MainActivity;->Content(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/android/MainActivity;->onCreate(Landroid/os/Bundle;)V +HSPLcom/artemchep/keyguard/android/MainActivity;->updateDeeplinkFromIntent(Landroid/content/Intent;)V +Lcom/artemchep/keyguard/android/MainActivity$Companion; +HSPLcom/artemchep/keyguard/android/MainActivity$Companion;->()V +HSPLcom/artemchep/keyguard/android/MainActivity$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/android/MainActivity$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/android/MainActivity$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/android/PasskeyBeginGetRequest; +Lcom/artemchep/keyguard/android/PasskeyCreateRequest; +Lcom/artemchep/keyguard/android/PasskeyGenerator; +Lcom/artemchep/keyguard/android/PasskeyGeneratorBase; +Lcom/artemchep/keyguard/android/PasskeyGeneratorES256; +Lcom/artemchep/keyguard/android/PasskeyModuleKt; +HSPLcom/artemchep/keyguard/android/PasskeyModuleKt;->passkeysModule()Lorg/kodein/di/DI$Module; +Lcom/artemchep/keyguard/android/PasskeyModuleKt$passkeysModule$1; +HSPLcom/artemchep/keyguard/android/PasskeyModuleKt$passkeysModule$1;->()V +HSPLcom/artemchep/keyguard/android/PasskeyModuleKt$passkeysModule$1;->()V +HSPLcom/artemchep/keyguard/android/PasskeyModuleKt$passkeysModule$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/PasskeyModuleKt$passkeysModule$1;->invoke(Lorg/kodein/di/DI$Builder;)V +Lcom/artemchep/keyguard/android/PasskeyModuleKt$passkeysModule$1$1; +HSPLcom/artemchep/keyguard/android/PasskeyModuleKt$passkeysModule$1$1;->()V +HSPLcom/artemchep/keyguard/android/PasskeyModuleKt$passkeysModule$1$1;->()V +Lcom/artemchep/keyguard/android/PasskeyModuleKt$passkeysModule$1$2; +HSPLcom/artemchep/keyguard/android/PasskeyModuleKt$passkeysModule$1$2;->()V +HSPLcom/artemchep/keyguard/android/PasskeyModuleKt$passkeysModule$1$2;->()V +Lcom/artemchep/keyguard/android/PasskeyModuleKt$passkeysModule$1$3; +HSPLcom/artemchep/keyguard/android/PasskeyModuleKt$passkeysModule$1$3;->()V +HSPLcom/artemchep/keyguard/android/PasskeyModuleKt$passkeysModule$1$3;->()V +Lcom/artemchep/keyguard/android/PasskeyModuleKt$passkeysModule$1$4; +HSPLcom/artemchep/keyguard/android/PasskeyModuleKt$passkeysModule$1$4;->()V +HSPLcom/artemchep/keyguard/android/PasskeyModuleKt$passkeysModule$1$4;->()V +Lcom/artemchep/keyguard/android/PasskeyModuleKt$passkeysModule$1$5; +HSPLcom/artemchep/keyguard/android/PasskeyModuleKt$passkeysModule$1$5;->()V +HSPLcom/artemchep/keyguard/android/PasskeyModuleKt$passkeysModule$1$5;->()V +Lcom/artemchep/keyguard/android/PasskeyModuleKt$passkeysModule$1$invoke$$inlined$bindSingleton$default$1; +HSPLcom/artemchep/keyguard/android/PasskeyModuleKt$passkeysModule$1$invoke$$inlined$bindSingleton$default$1;->()V +Lcom/artemchep/keyguard/android/PasskeyModuleKt$passkeysModule$1$invoke$$inlined$bindSingleton$default$2; +HSPLcom/artemchep/keyguard/android/PasskeyModuleKt$passkeysModule$1$invoke$$inlined$bindSingleton$default$2;->()V +Lcom/artemchep/keyguard/android/PasskeyModuleKt$passkeysModule$1$invoke$$inlined$bindSingleton$default$3; +HSPLcom/artemchep/keyguard/android/PasskeyModuleKt$passkeysModule$1$invoke$$inlined$bindSingleton$default$3;->()V +Lcom/artemchep/keyguard/android/PasskeyModuleKt$passkeysModule$1$invoke$$inlined$bindSingleton$default$4; +HSPLcom/artemchep/keyguard/android/PasskeyModuleKt$passkeysModule$1$invoke$$inlined$bindSingleton$default$4;->()V +Lcom/artemchep/keyguard/android/PasskeyModuleKt$passkeysModule$1$invoke$$inlined$bindSingleton$default$5; +HSPLcom/artemchep/keyguard/android/PasskeyModuleKt$passkeysModule$1$invoke$$inlined$bindSingleton$default$5;->()V +Lcom/artemchep/keyguard/android/PasskeyProviderGetRequest; +Lcom/artemchep/keyguard/android/PasskeyUtils; +Lcom/artemchep/keyguard/android/downloader/DownloadClientAndroid; +Lcom/artemchep/keyguard/android/downloader/journal/CipherHistoryOpenedRepository; +Lcom/artemchep/keyguard/android/downloader/journal/CipherHistoryOpenedRepositoryImpl; +HSPLcom/artemchep/keyguard/android/downloader/journal/CipherHistoryOpenedRepositoryImpl;->()V +HSPLcom/artemchep/keyguard/android/downloader/journal/CipherHistoryOpenedRepositoryImpl;->(Lcom/artemchep/keyguard/core/store/DatabaseManager;Lkotlinx/coroutines/CoroutineDispatcher;)V +HSPLcom/artemchep/keyguard/android/downloader/journal/CipherHistoryOpenedRepositoryImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/android/downloader/journal/CipherHistoryOpenedRepositoryImpl$special$$inlined$instance$1; +HSPLcom/artemchep/keyguard/android/downloader/journal/CipherHistoryOpenedRepositoryImpl$special$$inlined$instance$1;->()V +Lcom/artemchep/keyguard/android/downloader/journal/CipherHistoryOpenedRepositoryImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/android/downloader/journal/CipherHistoryOpenedRepositoryImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/android/downloader/journal/DownloadRepository; +Lcom/artemchep/keyguard/android/downloader/journal/DownloadRepositoryImpl; +HSPLcom/artemchep/keyguard/android/downloader/journal/DownloadRepositoryImpl;->()V +HSPLcom/artemchep/keyguard/android/downloader/journal/DownloadRepositoryImpl;->(Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager;)V +HSPLcom/artemchep/keyguard/android/downloader/journal/DownloadRepositoryImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/android/downloader/journal/DownloadRepositoryImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/android/downloader/journal/DownloadRepositoryImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/android/downloader/journal/GeneratorHistoryRepository; +Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabase; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabase;->()V +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabase;->()V +Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager;->()V +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager;->(Landroid/content/Context;Ljava/lang/String;Lcom/artemchep/keyguard/common/usecase/DeviceEncryptionKeyUseCase;)V +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager;->access$getApplicationContext$p(Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager;)Landroid/content/Context; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager;->access$getDbIo$p(Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager;)Lkotlin/jvm/functions/Function1; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager;->access$getName$p(Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager;)Ljava/lang/String; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager;->migrateIfExists(Lcom/artemchep/keyguard/data/Database;)Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$migrateIfExists$$inlined$ioEffect$1; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$migrateIfExists$$inlined$ioEffect$1;->(Lkotlin/coroutines/Continuation;Lkotlin/coroutines/CoroutineContext;Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager;Lcom/artemchep/keyguard/data/Database;)V +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$migrateIfExists$$inlined$ioEffect$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$migrateIfExists$$inlined$ioEffect$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$migrateIfExists$$inlined$ioEffect$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$migrateIfExists$$inlined$ioEffect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$migrateIfExists$$inlined$ioEffect$1$1; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$migrateIfExists$$inlined$ioEffect$1$1;->(Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager;Lcom/artemchep/keyguard/data/Database;)V +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$migrateIfExists$$inlined$ioEffect$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$migrateIfExists$$inlined$ioEffect$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$migrateIfExists$1$1; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$migrateIfExists$1$1;->(Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabase;Lcom/artemchep/keyguard/data/Database;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$migrateIfExists$1$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$migrateIfExists$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$migrateIfExists$1$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$migrateIfExists$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$migrateIfExists$1$1$1; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$migrateIfExists$1$1$1;->(Ljava/util/List;Lcom/artemchep/keyguard/data/Database;)V +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$migrateIfExists$1$1$1;->invoke(Lapp/cash/sqldelight/TransactionWithoutReturn;)V +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$migrateIfExists$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$special$$inlined$effectMap$1; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$special$$inlined$effectMap$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager;)V +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$special$$inlined$effectMap$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$special$$inlined$effectMap$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$special$$inlined$effectMap$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$special$$inlined$effectMap$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$special$$inlined$effectMap$1$1; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$special$$inlined$effectMap$1$1;->(Ljava/lang/Object;Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager;)V +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$special$$inlined$effectMap$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$special$$inlined$effectMap$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$special$$inlined$retry$1; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$special$$inlined$retry$1;->(Lkotlin/coroutines/Continuation;Lkotlin/jvm/functions/Function1;Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager;)V +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$special$$inlined$retry$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$special$$inlined$retry$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$special$$inlined$retry$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager$special$$inlined$retry$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseTypeConverter; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseTypeConverter;->()V +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseTypeConverter;->()V +Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabase_AutoMigration_1_2_Impl; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabase_AutoMigration_1_2_Impl;->()V +Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabase_Impl; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabase_Impl;->()V +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabase_Impl;->access$100(Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabase_Impl;)Ljava/util/List; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabase_Impl;->access$202(Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabase_Impl;Landroidx/sqlite/db/SupportSQLiteDatabase;)Landroidx/sqlite/db/SupportSQLiteDatabase; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabase_Impl;->access$300(Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabase_Impl;Landroidx/sqlite/db/SupportSQLiteDatabase;)V +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabase_Impl;->access$400(Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabase_Impl;)Ljava/util/List; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabase_Impl;->createInvalidationTracker()Landroidx/room/InvalidationTracker; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabase_Impl;->createOpenHelper(Landroidx/room/DatabaseConfiguration;)Landroidx/sqlite/db/SupportSQLiteOpenHelper; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabase_Impl;->generatorDao()Lcom/artemchep/keyguard/android/downloader/journal/room/GeneratorDao; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabase_Impl;->getAutoMigrations(Ljava/util/Map;)Ljava/util/List; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabase_Impl;->getRequiredAutoMigrationSpecs()Ljava/util/Set; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabase_Impl;->getRequiredTypeConverters()Ljava/util/Map; +Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabase_Impl$1; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabase_Impl$1;->(Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabase_Impl;I)V +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabase_Impl$1;->createAllTables(Landroidx/sqlite/db/SupportSQLiteDatabase;)V +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabase_Impl$1;->onCreate(Landroidx/sqlite/db/SupportSQLiteDatabase;)V +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabase_Impl$1;->onOpen(Landroidx/sqlite/db/SupportSQLiteDatabase;)V +Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadInfoDao; +Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadInfoDao_Impl; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/DownloadInfoDao_Impl;->getRequiredConverters()Ljava/util/List; +Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadInfoEntity2; +Lcom/artemchep/keyguard/android/downloader/journal/room/GeneratorDao; +Lcom/artemchep/keyguard/android/downloader/journal/room/GeneratorDao_Impl; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/GeneratorDao_Impl;->-$$Nest$fget__db(Lcom/artemchep/keyguard/android/downloader/journal/room/GeneratorDao_Impl;)Landroidx/room/RoomDatabase; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/GeneratorDao_Impl;->-$$Nest$fget__preparedStmtOfRemoveAll(Lcom/artemchep/keyguard/android/downloader/journal/room/GeneratorDao_Impl;)Landroidx/room/SharedSQLiteStatement; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/GeneratorDao_Impl;->(Landroidx/room/RoomDatabase;)V +HSPLcom/artemchep/keyguard/android/downloader/journal/room/GeneratorDao_Impl;->getAll()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/GeneratorDao_Impl;->getRequiredConverters()Ljava/util/List; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/GeneratorDao_Impl;->removeAll(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/android/downloader/journal/room/GeneratorDao_Impl$1; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/GeneratorDao_Impl$1;->(Lcom/artemchep/keyguard/android/downloader/journal/room/GeneratorDao_Impl;Landroidx/room/RoomDatabase;)V +Lcom/artemchep/keyguard/android/downloader/journal/room/GeneratorDao_Impl$2; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/GeneratorDao_Impl$2;->(Lcom/artemchep/keyguard/android/downloader/journal/room/GeneratorDao_Impl;Landroidx/room/RoomDatabase;)V +HSPLcom/artemchep/keyguard/android/downloader/journal/room/GeneratorDao_Impl$2;->createQuery()Ljava/lang/String; +Lcom/artemchep/keyguard/android/downloader/journal/room/GeneratorDao_Impl$4; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/GeneratorDao_Impl$4;->(Lcom/artemchep/keyguard/android/downloader/journal/room/GeneratorDao_Impl;)V +HSPLcom/artemchep/keyguard/android/downloader/journal/room/GeneratorDao_Impl$4;->call()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/GeneratorDao_Impl$4;->call()Lkotlin/Unit; +Lcom/artemchep/keyguard/android/downloader/journal/room/GeneratorDao_Impl$5; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/GeneratorDao_Impl$5;->(Lcom/artemchep/keyguard/android/downloader/journal/room/GeneratorDao_Impl;Landroidx/room/RoomSQLiteQuery;)V +HSPLcom/artemchep/keyguard/android/downloader/journal/room/GeneratorDao_Impl$5;->call()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/downloader/journal/room/GeneratorDao_Impl$5;->call()Ljava/util/List; +PLcom/artemchep/keyguard/android/downloader/journal/room/GeneratorDao_Impl$5;->finalize()V +Lcom/artemchep/keyguard/android/downloader/worker/AttachmentDownloadAllWorker; +HSPLcom/artemchep/keyguard/android/downloader/worker/AttachmentDownloadAllWorker;->()V +Lcom/artemchep/keyguard/android/downloader/worker/AttachmentDownloadAllWorker$Companion; +HSPLcom/artemchep/keyguard/android/downloader/worker/AttachmentDownloadAllWorker$Companion;->()V +HSPLcom/artemchep/keyguard/android/downloader/worker/AttachmentDownloadAllWorker$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/android/downloader/worker/AttachmentDownloadAllWorker$Companion;->enqueue(Landroid/content/Context;)Landroidx/work/Operation; +Lcom/artemchep/keyguard/android/util/ScreenFlowKt; +HSPLcom/artemchep/keyguard/android/util/ScreenFlowKt;->access$screenState(Landroid/content/Context;)Lcom/artemchep/keyguard/common/model/Screen; +HSPLcom/artemchep/keyguard/android/util/ScreenFlowKt;->isScreenOn(Landroid/content/Context;)Z +HSPLcom/artemchep/keyguard/android/util/ScreenFlowKt;->screenFlow(Landroid/content/Context;)Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/android/util/ScreenFlowKt;->screenState(Landroid/content/Context;)Lcom/artemchep/keyguard/common/model/Screen; +Lcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$$inlined$flatMapLatest$1; +HSPLcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$$inlined$flatMapLatest$1;->(Lkotlin/coroutines/Continuation;Landroid/content/Context;)V +HSPLcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$$inlined$flatMapLatest$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$$inlined$flatMapLatest$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$$inlined$flatMapLatest$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$$inlined$observerFlow$1; +HSPLcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$$inlined$observerFlow$1;->(Lkotlin/coroutines/Continuation;Landroid/content/Context;)V +HSPLcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$$inlined$observerFlow$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$$inlined$observerFlow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$$inlined$observerFlow$1;->invoke(Lkotlinx/coroutines/channels/ProducerScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$$inlined$observerFlow$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$$inlined$observerFlow$1$1; +HSPLcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$$inlined$observerFlow$1$1;->(Lkotlinx/coroutines/channels/ProducerScope;Lkotlin/coroutines/Continuation;Landroid/content/Context;)V +HSPLcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$$inlined$observerFlow$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$$inlined$observerFlow$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$$inlined$observerFlow$1$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$$inlined$observerFlow$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$$inlined$observerFlow$1$1$1; +HSPLcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$$inlined$observerFlow$1$1$1;->(Lkotlinx/coroutines/channels/ProducerScope;)V +HSPLcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$$inlined$observerFlow$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$$inlined$observerFlow$1$1$1;->invoke-JP2dKIU(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$$inlined$observerFlow$1$2; +HSPLcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$$inlined$observerFlow$1$2;->(Lkotlinx/coroutines/CancellableContinuation;)V +Lcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$1$1; +HSPLcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$1$1;->(Landroid/content/Context;Lcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$1$broadcastReceiver$1;)V +Lcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$1$broadcastReceiver$1; +HSPLcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$1$broadcastReceiver$1;->(Lkotlin/jvm/functions/Function1;)V +Lcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$2$1; +HSPLcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$2$1;->(Lcom/artemchep/keyguard/common/model/Screen;Landroid/content/Context;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$2$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/util/ScreenFlowKt$screenFlow$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/android/worker/SyncWorker; +HSPLcom/artemchep/keyguard/android/worker/SyncWorker;->()V +HSPLcom/artemchep/keyguard/android/worker/SyncWorker;->(Landroid/content/Context;Landroidx/work/WorkerParameters;)V +HSPLcom/artemchep/keyguard/android/worker/SyncWorker;->doWork(Lorg/kodein/di/DI;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/worker/SyncWorker;->getAccountIds()Ljava/util/Set; +Lcom/artemchep/keyguard/android/worker/SyncWorker$Companion; +HSPLcom/artemchep/keyguard/android/worker/SyncWorker$Companion;->()V +HSPLcom/artemchep/keyguard/android/worker/SyncWorker$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/android/worker/SyncWorker$Companion;->enqueueOnce$default(Lcom/artemchep/keyguard/android/worker/SyncWorker$Companion;Landroid/content/Context;Ljava/util/Set;ILjava/lang/Object;)Landroidx/work/Operation; +HSPLcom/artemchep/keyguard/android/worker/SyncWorker$Companion;->enqueueOnce(Landroid/content/Context;Ljava/util/Set;)Landroidx/work/Operation; +HSPLcom/artemchep/keyguard/android/worker/SyncWorker$Companion;->getConstraints()Landroidx/work/Constraints; +Lcom/artemchep/keyguard/android/worker/SyncWorker$accountIds$2; +HSPLcom/artemchep/keyguard/android/worker/SyncWorker$accountIds$2;->(Lcom/artemchep/keyguard/android/worker/SyncWorker;)V +HSPLcom/artemchep/keyguard/android/worker/SyncWorker$accountIds$2;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/worker/SyncWorker$accountIds$2;->invoke()Ljava/util/Set; +Lcom/artemchep/keyguard/android/worker/SyncWorker$accountIds$2$1; +HSPLcom/artemchep/keyguard/android/worker/SyncWorker$accountIds$2$1;->()V +HSPLcom/artemchep/keyguard/android/worker/SyncWorker$accountIds$2$1;->()V +Lcom/artemchep/keyguard/android/worker/SyncWorker$doWork$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/android/worker/SyncWorker$doWork$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/android/worker/SyncWorker$doWork$$inlined$map$1; +HSPLcom/artemchep/keyguard/android/worker/SyncWorker$doWork$$inlined$map$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/android/worker/SyncWorker$doWork$$inlined$map$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/android/worker/SyncWorker$doWork$$inlined$map$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/worker/SyncWorker$doWork$$inlined$map$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/worker/SyncWorker$doWork$$inlined$map$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/android/worker/SyncWorker$doWork$1; +HSPLcom/artemchep/keyguard/android/worker/SyncWorker$doWork$1;->(Lcom/artemchep/keyguard/android/worker/SyncWorker;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/android/worker/SyncWorker$doWork$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/android/worker/util/SessionWorker; +HSPLcom/artemchep/keyguard/android/worker/util/SessionWorker;->()V +HSPLcom/artemchep/keyguard/android/worker/util/SessionWorker;->(Landroid/content/Context;Landroidx/work/WorkerParameters;)V +HSPLcom/artemchep/keyguard/android/worker/util/SessionWorker;->doWork$suspendImpl(Lcom/artemchep/keyguard/android/worker/util/SessionWorker;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/worker/util/SessionWorker;->doWork(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/worker/util/SessionWorker;->getDi()Lorg/kodein/di/DI; +HSPLcom/artemchep/keyguard/android/worker/util/SessionWorker;->getGetVaultSession()Lcom/artemchep/keyguard/common/usecase/GetVaultSession; +Lcom/artemchep/keyguard/android/worker/util/SessionWorker$Companion; +HSPLcom/artemchep/keyguard/android/worker/util/SessionWorker$Companion;->()V +HSPLcom/artemchep/keyguard/android/worker/util/SessionWorker$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/android/worker/util/SessionWorker$di$2; +HSPLcom/artemchep/keyguard/android/worker/util/SessionWorker$di$2;->(Lcom/artemchep/keyguard/android/worker/util/SessionWorker;)V +HSPLcom/artemchep/keyguard/android/worker/util/SessionWorker$di$2;->invoke()Landroid/content/Context; +HSPLcom/artemchep/keyguard/android/worker/util/SessionWorker$di$2;->invoke()Ljava/lang/Object; +Lcom/artemchep/keyguard/android/worker/util/SessionWorker$doWork$2$1; +HSPLcom/artemchep/keyguard/android/worker/util/SessionWorker$doWork$2$1;->(Lcom/artemchep/keyguard/android/worker/util/SessionWorker;Lcom/artemchep/keyguard/common/model/MasterSession;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/android/worker/util/SessionWorker$doWork$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/android/worker/util/SessionWorker$doWork$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/worker/util/SessionWorker$doWork$2$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/worker/util/SessionWorker$doWork$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/android/worker/util/SessionWorker$doWork$suspendImpl$$inlined$flatMapLatest$1; +HSPLcom/artemchep/keyguard/android/worker/util/SessionWorker$doWork$suspendImpl$$inlined$flatMapLatest$1;->(Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/android/worker/util/SessionWorker;)V +HSPLcom/artemchep/keyguard/android/worker/util/SessionWorker$doWork$suspendImpl$$inlined$flatMapLatest$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/worker/util/SessionWorker$doWork$suspendImpl$$inlined$flatMapLatest$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/android/worker/util/SessionWorker$doWork$suspendImpl$$inlined$flatMapLatest$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/android/worker/util/SessionWorker$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/android/worker/util/SessionWorker$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/billing/BillingClientApiException; +HSPLcom/artemchep/keyguard/billing/BillingClientApiException;->()V +HSPLcom/artemchep/keyguard/billing/BillingClientApiException;->(I)V +Lcom/artemchep/keyguard/billing/BillingConnection; +Lcom/artemchep/keyguard/billing/BillingConnectionImpl; +HSPLcom/artemchep/keyguard/billing/BillingConnectionImpl;->()V +PLcom/artemchep/keyguard/billing/BillingConnectionImpl;->(Lkotlinx/coroutines/CoroutineScope;Lcom/artemchep/keyguard/common/util/flow/EventFlow;Lkotlinx/coroutines/flow/MutableStateFlow;)V +HSPLcom/artemchep/keyguard/billing/BillingConnectionImpl;->access$getDataChangedLiveFlow$p(Lcom/artemchep/keyguard/billing/BillingConnectionImpl;)Lcom/artemchep/keyguard/common/util/flow/EventFlow; +HSPLcom/artemchep/keyguard/billing/BillingConnectionImpl;->getClientLiveFlow()Lkotlinx/coroutines/flow/MutableStateFlow; +HSPLcom/artemchep/keyguard/billing/BillingConnectionImpl;->mapClient(Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/billing/BillingConnectionImpl;->purchasesFlow(Ljava/lang/String;)Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/billing/BillingConnectionImpl$Companion; +HSPLcom/artemchep/keyguard/billing/BillingConnectionImpl$Companion;->()V +HSPLcom/artemchep/keyguard/billing/BillingConnectionImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/billing/BillingConnectionImpl$mapClient$$inlined$flatMapLatest$1; +HSPLcom/artemchep/keyguard/billing/BillingConnectionImpl$mapClient$$inlined$flatMapLatest$1;->(Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/billing/BillingConnectionImpl;Lkotlin/jvm/functions/Function2;)V +HSPLcom/artemchep/keyguard/billing/BillingConnectionImpl$mapClient$$inlined$flatMapLatest$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/billing/BillingConnectionImpl$mapClient$$inlined$flatMapLatest$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/billing/BillingConnectionImpl$mapClient$$inlined$flatMapLatest$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/billing/BillingConnectionImpl$mapClient$1$1; +HSPLcom/artemchep/keyguard/billing/BillingConnectionImpl$mapClient$1$1;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/billing/BillingConnectionImpl$mapClient$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/billing/BillingConnectionImpl$mapClient$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/billing/BillingConnectionImpl$mapClient$1$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/billing/BillingConnectionImpl$mapClient$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/billing/BillingConnectionImpl$mapClient$1$2$1; +HSPLcom/artemchep/keyguard/billing/BillingConnectionImpl$mapClient$1$2$1;->(Lcom/artemchep/keyguard/common/model/RichResult;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/billing/BillingConnectionImpl$mapClient$1$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/billing/BillingConnectionImpl$mapClient$1$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/billing/BillingConnectionImpl$mapClient$1$2$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/billing/BillingConnectionImpl$mapClient$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/billing/BillingConnectionImpl$mapClient$lambda$10$$inlined$flatMapLatest$1; +HSPLcom/artemchep/keyguard/billing/BillingConnectionImpl$mapClient$lambda$10$$inlined$flatMapLatest$1;->(Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/common/model/RichResult;Lkotlin/jvm/functions/Function2;)V +HSPLcom/artemchep/keyguard/billing/BillingConnectionImpl$mapClient$lambda$10$$inlined$flatMapLatest$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/billing/BillingConnectionImpl$mapClient$lambda$10$$inlined$flatMapLatest$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/billing/BillingConnectionImpl$mapClient$lambda$10$$inlined$flatMapLatest$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/billing/BillingConnectionImpl$purchasesFlow$1; +HSPLcom/artemchep/keyguard/billing/BillingConnectionImpl$purchasesFlow$1;->(Lcom/artemchep/keyguard/billing/BillingConnectionImpl;Ljava/lang/String;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/billing/BillingManager; +Lcom/artemchep/keyguard/billing/BillingManagerImpl; +HSPLcom/artemchep/keyguard/billing/BillingManagerImpl;->()V +HSPLcom/artemchep/keyguard/billing/BillingManagerImpl;->(Landroid/content/Context;)V +HSPLcom/artemchep/keyguard/billing/BillingManagerImpl;->access$launchIn(Lcom/artemchep/keyguard/billing/BillingManagerImpl;Lkotlinx/coroutines/CoroutineScope;)Lcom/artemchep/keyguard/billing/BillingConnection; +HSPLcom/artemchep/keyguard/billing/BillingManagerImpl;->getBillingConnectionFlow()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/billing/BillingManagerImpl;->launchIn(Lkotlinx/coroutines/CoroutineScope;)Lcom/artemchep/keyguard/billing/BillingConnection; +Lcom/artemchep/keyguard/billing/BillingManagerImpl$$ExternalSyntheticLambda0; +PLcom/artemchep/keyguard/billing/BillingManagerImpl$$ExternalSyntheticLambda0;->(Lcom/artemchep/keyguard/common/util/flow/EventFlow;)V +Lcom/artemchep/keyguard/billing/BillingManagerImpl$Companion; +HSPLcom/artemchep/keyguard/billing/BillingManagerImpl$Companion;->()V +HSPLcom/artemchep/keyguard/billing/BillingManagerImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/billing/BillingManagerImpl$billingConnectionFlow$1; +HSPLcom/artemchep/keyguard/billing/BillingManagerImpl$billingConnectionFlow$1;->(Lcom/artemchep/keyguard/billing/BillingManagerImpl;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/billing/BillingManagerImpl$billingConnectionFlow$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/billing/BillingManagerImpl$billingConnectionFlow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/billing/BillingManagerImpl$billingConnectionFlow$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/billing/BillingManagerImpl$billingConnectionFlow$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/billing/BillingManagerImpl$billingConnectionFlow$1$1; +HSPLcom/artemchep/keyguard/billing/BillingManagerImpl$billingConnectionFlow$1$1;->(Lcom/artemchep/keyguard/billing/BillingManagerImpl;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/billing/BillingManagerImpl$billingConnectionFlow$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/billing/BillingManagerImpl$billingConnectionFlow$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/billing/BillingManagerImpl$billingConnectionFlow$1$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/billing/BillingManagerImpl$billingConnectionFlow$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/billing/BillingManagerImpl$launchIn$job$1; +HSPLcom/artemchep/keyguard/billing/BillingManagerImpl$launchIn$job$1;->(Lcom/android/billingclient/api/BillingClient;Lkotlinx/coroutines/flow/MutableStateFlow;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/billing/BillingManagerImpl$launchIn$job$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/billing/BillingManagerImpl$launchIn$job$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/billing/BillingManagerImpl$launchIn$job$1$flow$1; +HSPLcom/artemchep/keyguard/billing/BillingManagerImpl$launchIn$job$1$flow$1;->(Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/billing/BillingManagerImpl$launchIn$job$1$flow$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/billing/BillingManagerImpl$launchIn$job$1$flow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/billing/BillingManagerImpl$launchIn$job$1$flow$1;->invoke(Lkotlin/Unit;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/billing/BillingManagerImpl$launchIn$job$1$flow$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/billing/BillingManagerImpl$launchIn$job$1$flow$2; +HSPLcom/artemchep/keyguard/billing/BillingManagerImpl$launchIn$job$1$flow$2;->(Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/billing/BillingManagerImpl$launchIn$job$1$flow$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/billing/BillingManagerImpl$launchIn$job$1$flow$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/billing/BillingManagerImpl$launchIn$job$1$flow$2;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/billing/BillingManagerImpl$launchIn$job$1$flow$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/billing/BillingManagerImpl$launchIn$job$1$listener$1; +HSPLcom/artemchep/keyguard/billing/BillingManagerImpl$launchIn$job$1$listener$1;->(Lcom/android/billingclient/api/BillingClient;Lkotlin/jvm/functions/Function0;Lkotlinx/coroutines/flow/MutableStateFlow;)V +HSPLcom/artemchep/keyguard/billing/BillingManagerImpl$launchIn$job$1$listener$1;->onBillingSetupFinished(Lcom/android/billingclient/api/BillingResult;)V +Lcom/artemchep/keyguard/billing/BillingManagerImpl$launchIn$job$1$requestConnect$1; +HSPLcom/artemchep/keyguard/billing/BillingManagerImpl$launchIn$job$1$requestConnect$1;->(Ljava/lang/Object;)V +HSPLcom/artemchep/keyguard/billing/BillingManagerImpl$launchIn$job$1$requestConnect$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/billing/BillingManagerImpl$launchIn$job$1$requestConnect$1;->invoke(Lkotlin/Unit;)V +Lcom/artemchep/keyguard/billing/BillingManagerImpl$launchIn$job$1$tryConnect$1; +HSPLcom/artemchep/keyguard/billing/BillingManagerImpl$launchIn$job$1$tryConnect$1;->(Lkotlinx/coroutines/flow/MutableStateFlow;Lcom/android/billingclient/api/BillingClient;Lcom/artemchep/keyguard/billing/BillingManagerImpl$launchIn$job$1$listener$1;)V +HSPLcom/artemchep/keyguard/billing/BillingManagerImpl$launchIn$job$1$tryConnect$1;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/billing/BillingManagerImpl$launchIn$job$1$tryConnect$1;->invoke()V +Lcom/artemchep/keyguard/billing/BillingResponseException; +Lcom/artemchep/keyguard/build/BuildKonfig; +HSPLcom/artemchep/keyguard/build/BuildKonfig;->()V +HSPLcom/artemchep/keyguard/build/BuildKonfig;->()V +HSPLcom/artemchep/keyguard/build/BuildKonfig;->getBuildType()Ljava/lang/String; +Lcom/artemchep/keyguard/common/AppWorker; +Lcom/artemchep/keyguard/common/AppWorker$Feature; +HSPLcom/artemchep/keyguard/common/AppWorker$Feature;->$values()[Lcom/artemchep/keyguard/common/AppWorker$Feature; +HSPLcom/artemchep/keyguard/common/AppWorker$Feature;->()V +HSPLcom/artemchep/keyguard/common/AppWorker$Feature;->(Ljava/lang/String;I)V +Lcom/artemchep/keyguard/common/AppWorkerIm; +HSPLcom/artemchep/keyguard/common/AppWorkerIm;->()V +HSPLcom/artemchep/keyguard/common/AppWorkerIm;->(Lcom/artemchep/keyguard/common/usecase/GetVaultSession;)V +HSPLcom/artemchep/keyguard/common/AppWorkerIm;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/AppWorkerIm;->access$launchSyncManagerWhenAvailable(Lcom/artemchep/keyguard/common/AppWorkerIm;Lkotlinx/coroutines/CoroutineScope;)Lkotlinx/coroutines/Job; +HSPLcom/artemchep/keyguard/common/AppWorkerIm;->launch(Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/Job; +HSPLcom/artemchep/keyguard/common/AppWorkerIm;->launchSyncManagerWhenAvailable(Lkotlinx/coroutines/CoroutineScope;)Lkotlinx/coroutines/Job; +Lcom/artemchep/keyguard/common/AppWorkerIm$launch$1; +HSPLcom/artemchep/keyguard/common/AppWorkerIm$launch$1;->(Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/common/AppWorkerIm;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/AppWorkerIm$launch$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/AppWorkerIm$launch$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/AppWorkerIm$launch$1$1; +HSPLcom/artemchep/keyguard/common/AppWorkerIm$launch$1$1;->(Lcom/artemchep/keyguard/common/AppWorkerIm;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/AppWorkerIm$launch$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/AppWorkerIm$launch$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/AppWorkerIm$launch$1$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/AppWorkerIm$launch$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/AppWorkerIm$launchSyncManagerWhenAvailable$$inlined$map$1; +HSPLcom/artemchep/keyguard/common/AppWorkerIm$launchSyncManagerWhenAvailable$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/common/AppWorkerIm$launchSyncManagerWhenAvailable$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/AppWorkerIm$launchSyncManagerWhenAvailable$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/common/AppWorkerIm$launchSyncManagerWhenAvailable$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/common/AppWorkerIm$launchSyncManagerWhenAvailable$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/AppWorkerIm$launchSyncManagerWhenAvailable$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/common/AppWorkerIm$launchSyncManagerWhenAvailable$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/common/AppWorkerIm$launchSyncManagerWhenAvailable$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/common/AppWorkerIm$launchSyncManagerWhenAvailable$2; +HSPLcom/artemchep/keyguard/common/AppWorkerIm$launchSyncManagerWhenAvailable$2;->()V +HSPLcom/artemchep/keyguard/common/AppWorkerIm$launchSyncManagerWhenAvailable$2;->()V +HSPLcom/artemchep/keyguard/common/AppWorkerIm$launchSyncManagerWhenAvailable$2;->invoke(Lcom/artemchep/keyguard/common/NotificationsWorker;Lcom/artemchep/keyguard/common/NotificationsWorker;)Ljava/lang/Boolean; +HSPLcom/artemchep/keyguard/common/AppWorkerIm$launchSyncManagerWhenAvailable$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/AppWorkerIm$launchSyncManagerWhenAvailable$3; +HSPLcom/artemchep/keyguard/common/AppWorkerIm$launchSyncManagerWhenAvailable$3;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/AppWorkerIm$launchSyncManagerWhenAvailable$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/AppWorkerIm$launchSyncManagerWhenAvailable$3;->invoke(Lcom/artemchep/keyguard/common/NotificationsWorker;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/AppWorkerIm$launchSyncManagerWhenAvailable$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/AppWorkerIm$launchSyncManagerWhenAvailable$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/AppWorkerIm$launchSyncManagerWhenAvailable$3$1; +HSPLcom/artemchep/keyguard/common/AppWorkerIm$launchSyncManagerWhenAvailable$3$1;->(Lcom/artemchep/keyguard/common/NotificationsWorker;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/AppWorkerIm$launchSyncManagerWhenAvailable$3$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/AppWorkerIm$launchSyncManagerWhenAvailable$3$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/AppWorkerIm$launchSyncManagerWhenAvailable$3$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/AppWorkerIm$launchSyncManagerWhenAvailable$3$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/AppWorkerIm$launchSyncManagerWhenAvailable$lambda$0$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/AppWorkerIm$launchSyncManagerWhenAvailable$lambda$0$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/AppWorkerIm$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/AppWorkerIm$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/NotificationsWorker; +Lcom/artemchep/keyguard/common/R$font; +Lcom/artemchep/keyguard/common/R$string; +Lcom/artemchep/keyguard/common/io/FlowThrottle; +HSPLcom/artemchep/keyguard/common/io/FlowThrottle;->()V +HSPLcom/artemchep/keyguard/common/io/FlowThrottle;->(Lkotlinx/coroutines/channels/ProducerScope;J)V +HSPLcom/artemchep/keyguard/common/io/FlowThrottle;->send(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/io/FlowThrottle$Companion; +HSPLcom/artemchep/keyguard/common/io/FlowThrottle$Companion;->()V +HSPLcom/artemchep/keyguard/common/io/FlowThrottle$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/common/io/FlowThrottle$send$2; +HSPLcom/artemchep/keyguard/common/io/FlowThrottle$send$2;->(JLcom/artemchep/keyguard/common/io/FlowThrottle;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/io/FlowThrottle$send$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/io/FlowThrottle$send$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/io/IOBindKt; +HSPLcom/artemchep/keyguard/common/io/IOBindKt;->bind(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/io/IOExceptionKt; +HSPLcom/artemchep/keyguard/common/io/IOExceptionKt;->attempt(Lkotlin/jvm/functions/Function1;)Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/common/io/IOExceptionKt$attempt$$inlined$ioEffect$1; +HSPLcom/artemchep/keyguard/common/io/IOExceptionKt$attempt$$inlined$ioEffect$1;->(Lkotlin/coroutines/Continuation;Lkotlin/jvm/functions/Function1;)V +HSPLcom/artemchep/keyguard/common/io/IOExceptionKt$attempt$$inlined$ioEffect$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/io/IOExceptionKt$attempt$$inlined$ioEffect$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/io/IOExceptionKt$attempt$$inlined$ioEffect$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/io/IOExceptionKt$attempt$$inlined$ioEffect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/io/IOFactoryKt; +HSPLcom/artemchep/keyguard/common/io/IOFactoryKt;->()V +HSPLcom/artemchep/keyguard/common/io/IOFactoryKt;->io(Ljava/lang/Object;)Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/common/io/IOFactoryKt$io$$inlined$ioEffect$1; +HSPLcom/artemchep/keyguard/common/io/IOFactoryKt$io$$inlined$ioEffect$1;->(Lkotlin/coroutines/Continuation;Ljava/lang/Object;)V +HSPLcom/artemchep/keyguard/common/io/IOFactoryKt$io$$inlined$ioEffect$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/io/IOFactoryKt$io$$inlined$ioEffect$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/io/IOFactoryKt$io$$inlined$ioEffect$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/io/IOFactoryKt$io$$inlined$ioEffect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/io/IOFlattenKt; +HSPLcom/artemchep/keyguard/common/io/IOFlattenKt;->flatten(Lkotlin/jvm/functions/Function1;)Lkotlin/jvm/functions/Function1; +HSPLcom/artemchep/keyguard/common/io/IOFlattenKt;->flattenMap(Lkotlin/jvm/functions/Function1;)Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/common/io/IOFlattenKt$flatten$$inlined$flatMap$1; +HSPLcom/artemchep/keyguard/common/io/IOFlattenKt$flatten$$inlined$flatMap$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/io/IOFlattenKt$flatten$$inlined$flatMap$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/io/IOFlattenKt$flatten$$inlined$flatMap$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/io/IOFlattenKt$flatten$$inlined$flatMap$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/io/IOFlattenKt$flatten$$inlined$flatMap$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/io/IOFlattenKt$flattenMap$$inlined$effectMap$1; +HSPLcom/artemchep/keyguard/common/io/IOFlattenKt$flattenMap$$inlined$effectMap$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/io/IOFlattenKt$flattenMap$$inlined$effectMap$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/io/IOFlattenKt$flattenMap$$inlined$effectMap$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/io/IOFlattenKt$flattenMap$$inlined$effectMap$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/io/IOFlattenKt$flattenMap$$inlined$effectMap$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/io/IOFlowKt; +HSPLcom/artemchep/keyguard/common/io/IOFlowKt;->toIO(Lkotlinx/coroutines/flow/Flow;)Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/common/io/IOFlowKt$toIO$$inlined$ioEffect$1; +HSPLcom/artemchep/keyguard/common/io/IOFlowKt$toIO$$inlined$ioEffect$1;->(Lkotlin/coroutines/Continuation;Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/common/io/IOFlowKt$toIO$$inlined$ioEffect$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/io/IOFlowKt$toIO$$inlined$ioEffect$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/io/IOFlowKt$toIO$$inlined$ioEffect$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/io/IOFlowKt$toIO$$inlined$ioEffect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/io/IOForkKt; +HSPLcom/artemchep/keyguard/common/io/IOForkKt;->dispatchOn(Lkotlin/jvm/functions/Function1;Lkotlinx/coroutines/CoroutineDispatcher;)Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/common/io/IOForkKt$dispatchOn$1; +HSPLcom/artemchep/keyguard/common/io/IOForkKt$dispatchOn$1;->(Lkotlinx/coroutines/CoroutineDispatcher;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/io/IOForkKt$dispatchOn$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/io/IOForkKt$dispatchOn$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/io/IOForkKt$dispatchOn$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/io/IOForkKt$dispatchOn$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/io/IOForkKt$dispatchOn$1$1; +HSPLcom/artemchep/keyguard/common/io/IOForkKt$dispatchOn$1$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/io/IOForkKt$dispatchOn$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/io/IOForkKt$dispatchOn$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/io/IOForkKt$dispatchOn$1$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/io/IOForkKt$dispatchOn$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/io/IOLaunchInKt; +HSPLcom/artemchep/keyguard/common/io/IOLaunchInKt;->launchIn(Lkotlin/jvm/functions/Function1;Lkotlinx/coroutines/CoroutineScope;)Lkotlinx/coroutines/Job; +Lcom/artemchep/keyguard/common/io/IOLaunchInKt$launchIn$1; +HSPLcom/artemchep/keyguard/common/io/IOLaunchInKt$launchIn$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/io/IOLaunchInKt$launchIn$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/io/IOLaunchInKt$launchIn$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/io/IOMonadKt; +PLcom/artemchep/keyguard/common/io/IOMonadKt;->parallel$default(Ljava/util/List;Lkotlin/coroutines/CoroutineContext;IILjava/lang/Object;)Lkotlin/jvm/functions/Function1; +PLcom/artemchep/keyguard/common/io/IOMonadKt;->parallel(Ljava/util/List;Lkotlin/coroutines/CoroutineContext;I)Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/common/io/IOMonadKt$flatMap$1; +HSPLcom/artemchep/keyguard/common/io/IOMonadKt$flatMap$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/io/IOMonadKt$flatMap$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/io/IOMonadKt$flatMap$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/io/IOMonadKt$flatMap$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/io/IOMonadKt$flatMap$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/io/IOMonadKt$parallel$1; +HSPLcom/artemchep/keyguard/common/io/IOMonadKt$parallel$1;->(Ljava/util/List;ILkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/io/IOMonadKt$parallel$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/io/IOMonadKt$parallel$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/io/IOMonadKt$parallel$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/io/IOMonadKt$parallel$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/io/IOMonadKt$parallel$1$1; +HSPLcom/artemchep/keyguard/common/io/IOMonadKt$parallel$1$1;->(Ljava/util/List;ILkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/io/IOMonadKt$parallel$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/io/IOMonadKt$parallel$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/io/IOMonadKt$parallel$1$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/io/IOMonadKt$parallel$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/io/IOSharedKt; +HSPLcom/artemchep/keyguard/common/io/IOSharedKt;->shared$default(Lkotlin/jvm/functions/Function1;ZILjava/lang/Object;)Lkotlin/jvm/functions/Function1; +HSPLcom/artemchep/keyguard/common/io/IOSharedKt;->shared(Lkotlin/jvm/functions/Function1;Z)Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/common/io/IOSharedKt$shared$$inlined$ioEffect$1; +HSPLcom/artemchep/keyguard/common/io/IOSharedKt$shared$$inlined$ioEffect$1;->(Lkotlin/coroutines/Continuation;Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlin/jvm/functions/Function1;ZLkotlin/jvm/internal/Ref$ObjectRef;)V +HSPLcom/artemchep/keyguard/common/io/IOSharedKt$shared$$inlined$ioEffect$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/io/IOSharedKt$shared$$inlined$ioEffect$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/io/IOSharedKt$shared$$inlined$ioEffect$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/io/IOSharedKt$shared$$inlined$ioEffect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/io/IOSharedKt$shared$1$2$1; +HSPLcom/artemchep/keyguard/common/io/IOSharedKt$shared$1$2$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/io/IOSharedKt$shared$1$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/io/IOSharedKt$shared$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/io/IOWidenKt; +HSPLcom/artemchep/keyguard/common/io/IOWidenKt;->nullable(Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/common/io/IOWidenKt$nullable$$inlined$map$1; +HSPLcom/artemchep/keyguard/common/io/IOWidenKt$nullable$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/common/io/IOWidenKt$nullable$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/io/IOWidenKt$nullable$$inlined$map$1$2; +PLcom/artemchep/keyguard/common/io/IOWidenKt$nullable$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/common/io/IOWidenKt$nullable$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/io/IOWidenKt$nullable$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/common/io/IOWidenKt$nullable$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/common/io/IOWidenKt$nullable$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/common/io/ThrottleKt; +HSPLcom/artemchep/keyguard/common/io/ThrottleKt;->throttle(Lkotlinx/coroutines/flow/Flow;JZ)Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/common/io/ThrottleKt$throttle$1; +HSPLcom/artemchep/keyguard/common/io/ThrottleKt$throttle$1;->(JLkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/io/ThrottleKt$throttle$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/io/ThrottleKt$throttle$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/io/ThrottleKt$throttle$1;->invoke(Lkotlinx/coroutines/channels/ProducerScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/io/ThrottleKt$throttle$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/io/ThrottleKt$throttle$1$1; +HSPLcom/artemchep/keyguard/common/io/ThrottleKt$throttle$1$1;->(Lcom/artemchep/keyguard/common/io/FlowThrottle;)V +HSPLcom/artemchep/keyguard/common/io/ThrottleKt$throttle$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/model/AccountId; +Lcom/artemchep/keyguard/common/model/AccountTask; +HSPLcom/artemchep/keyguard/common/model/AccountTask;->$values()[Lcom/artemchep/keyguard/common/model/AccountTask; +HSPLcom/artemchep/keyguard/common/model/AccountTask;->()V +HSPLcom/artemchep/keyguard/common/model/AccountTask;->(Ljava/lang/String;I)V +Lcom/artemchep/keyguard/common/model/AddCipherOpenedHistoryRequest; +Lcom/artemchep/keyguard/common/model/AddCipherUsedPasskeyHistoryRequest; +Lcom/artemchep/keyguard/common/model/AddPasskeyCipherRequest; +Lcom/artemchep/keyguard/common/model/AddUriCipherRequest; +Lcom/artemchep/keyguard/common/model/AnyMap; +HSPLcom/artemchep/keyguard/common/model/AnyMap;->()V +HSPLcom/artemchep/keyguard/common/model/AnyMap;->(Ljava/util/Map;)V +PLcom/artemchep/keyguard/common/model/AnyMap;->getValue()Ljava/util/Map; +Lcom/artemchep/keyguard/common/model/AppColors; +HSPLcom/artemchep/keyguard/common/model/AppColors;->$values()[Lcom/artemchep/keyguard/common/model/AppColors; +HSPLcom/artemchep/keyguard/common/model/AppColors;->()V +HSPLcom/artemchep/keyguard/common/model/AppColors;->(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;I)V +HSPLcom/artemchep/keyguard/common/model/AppColors;->getKey()Ljava/lang/String; +HSPLcom/artemchep/keyguard/common/model/AppColors;->values()[Lcom/artemchep/keyguard/common/model/AppColors; +Lcom/artemchep/keyguard/common/model/AppFont; +HSPLcom/artemchep/keyguard/common/model/AppFont;->$values()[Lcom/artemchep/keyguard/common/model/AppFont; +HSPLcom/artemchep/keyguard/common/model/AppFont;->()V +HSPLcom/artemchep/keyguard/common/model/AppFont;->(Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;)V +HSPLcom/artemchep/keyguard/common/model/AppFont;->getKey()Ljava/lang/String; +HSPLcom/artemchep/keyguard/common/model/AppFont;->values()[Lcom/artemchep/keyguard/common/model/AppFont; +Lcom/artemchep/keyguard/common/model/AppTheme; +HSPLcom/artemchep/keyguard/common/model/AppTheme;->$values()[Lcom/artemchep/keyguard/common/model/AppTheme; +HSPLcom/artemchep/keyguard/common/model/AppTheme;->()V +HSPLcom/artemchep/keyguard/common/model/AppTheme;->(Ljava/lang/String;ILjava/lang/String;)V +HSPLcom/artemchep/keyguard/common/model/AppTheme;->getKey()Ljava/lang/String; +HSPLcom/artemchep/keyguard/common/model/AppTheme;->values()[Lcom/artemchep/keyguard/common/model/AppTheme; +Lcom/artemchep/keyguard/common/model/AuthResult; +HSPLcom/artemchep/keyguard/common/model/AuthResult;->()V +HSPLcom/artemchep/keyguard/common/model/AuthResult;->(Lcom/artemchep/keyguard/common/model/MasterKey;Lcom/artemchep/keyguard/common/model/FingerprintPassword;)V +HSPLcom/artemchep/keyguard/common/model/AuthResult;->getKey()Lcom/artemchep/keyguard/common/model/MasterKey; +HSPLcom/artemchep/keyguard/common/model/AuthResult;->getToken()Lcom/artemchep/keyguard/common/model/FingerprintPassword; +Lcom/artemchep/keyguard/common/model/AutofillHint; +HSPLcom/artemchep/keyguard/common/model/AutofillHint;->$values()[Lcom/artemchep/keyguard/common/model/AutofillHint; +HSPLcom/artemchep/keyguard/common/model/AutofillHint;->()V +HSPLcom/artemchep/keyguard/common/model/AutofillHint;->(Ljava/lang/String;I)V +HSPLcom/artemchep/keyguard/common/model/AutofillHint;->values()[Lcom/artemchep/keyguard/common/model/AutofillHint; +Lcom/artemchep/keyguard/common/model/AutofillTarget; +Lcom/artemchep/keyguard/common/model/BarcodeImageRequest; +Lcom/artemchep/keyguard/common/model/BiometricStatus; +Lcom/artemchep/keyguard/common/model/BiometricStatus$Available; +Lcom/artemchep/keyguard/common/model/BiometricStatus$Unavailable; +HSPLcom/artemchep/keyguard/common/model/BiometricStatus$Unavailable;->()V +HSPLcom/artemchep/keyguard/common/model/BiometricStatus$Unavailable;->()V +Lcom/artemchep/keyguard/common/model/CheckPasswordLeakRequest; +Lcom/artemchep/keyguard/common/model/CheckPasswordSetLeakRequest; +Lcom/artemchep/keyguard/common/model/CheckUsernameLeakRequest; +Lcom/artemchep/keyguard/common/model/CipherFieldSwitchToggleRequest; +Lcom/artemchep/keyguard/common/model/CipherOpenedHistoryMode; +Lcom/artemchep/keyguard/common/model/DAccount; +Lcom/artemchep/keyguard/common/model/DAccountStatus; +HSPLcom/artemchep/keyguard/common/model/DAccountStatus;->()V +HSPLcom/artemchep/keyguard/common/model/DAccountStatus;->(Lcom/artemchep/keyguard/common/model/DAccountStatus$Error;Lcom/artemchep/keyguard/common/model/DAccountStatus$Pending;Ljava/util/List;)V +HSPLcom/artemchep/keyguard/common/model/DAccountStatus;->(Lcom/artemchep/keyguard/common/model/DAccountStatus$Error;Lcom/artemchep/keyguard/common/model/DAccountStatus$Pending;Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/common/model/DAccountStatus;->equals(Ljava/lang/Object;)Z +HSPLcom/artemchep/keyguard/common/model/DAccountStatus;->getError()Lcom/artemchep/keyguard/common/model/DAccountStatus$Error; +HSPLcom/artemchep/keyguard/common/model/DAccountStatus;->getPending()Lcom/artemchep/keyguard/common/model/DAccountStatus$Pending; +HSPLcom/artemchep/keyguard/common/model/DAccountStatus;->getPendingPermissions()Ljava/util/List; +Lcom/artemchep/keyguard/common/model/DAccountStatus$Error; +HSPLcom/artemchep/keyguard/common/model/DAccountStatus$Error;->()V +HSPLcom/artemchep/keyguard/common/model/DAccountStatus$Error;->(I)V +Lcom/artemchep/keyguard/common/model/DAccountStatus$Pending; +HSPLcom/artemchep/keyguard/common/model/DAccountStatus$Pending;->()V +HSPLcom/artemchep/keyguard/common/model/DAccountStatus$Pending;->(I)V +Lcom/artemchep/keyguard/common/model/DCipherOpenedHistory; +Lcom/artemchep/keyguard/common/model/DCollection; +Lcom/artemchep/keyguard/common/model/DFilter; +HSPLcom/artemchep/keyguard/common/model/DFilter;->()V +Lcom/artemchep/keyguard/common/model/DFilter$All; +HSPLcom/artemchep/keyguard/common/model/DFilter$All;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$All;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$All;->toString()Ljava/lang/String; +Lcom/artemchep/keyguard/common/model/DFilter$All$1; +HSPLcom/artemchep/keyguard/common/model/DFilter$All$1;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$All$1;->()V +Lcom/artemchep/keyguard/common/model/DFilter$And; +HSPLcom/artemchep/keyguard/common/model/DFilter$And;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$And;->(Ljava/util/Collection;)V +PLcom/artemchep/keyguard/common/model/DFilter$And;->getFilters()Ljava/util/Collection; +Lcom/artemchep/keyguard/common/model/DFilter$And$Companion; +HSPLcom/artemchep/keyguard/common/model/DFilter$And$Companion;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$And$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/common/model/DFilter$ByAttachments; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByAttachments;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByAttachments;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByAttachments;->getKey()Ljava/lang/String; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByAttachments;->prepare(Lorg/kodein/di/DirectDI;Ljava/util/List;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/model/DFilter$ByAttachments$1; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByAttachments$1;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByAttachments$1;->()V +Lcom/artemchep/keyguard/common/model/DFilter$ByAttachments$prepare$2; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByAttachments$prepare$2;->(Ljava/lang/Object;)V +Lcom/artemchep/keyguard/common/model/DFilter$ByDuplicateWebsites; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByDuplicateWebsites;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByDuplicateWebsites;->()V +Lcom/artemchep/keyguard/common/model/DFilter$ByDuplicateWebsites$1; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByDuplicateWebsites$1;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByDuplicateWebsites$1;->()V +Lcom/artemchep/keyguard/common/model/DFilter$ByError; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByError;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByError;->(Z)V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByError;->getKey()Ljava/lang/String; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByError;->prepare(Lorg/kodein/di/DirectDI;Ljava/util/List;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/model/DFilter$ByError$$serializer; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByError$$serializer;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByError$$serializer;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByError$$serializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +Lcom/artemchep/keyguard/common/model/DFilter$ByError$Companion; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByError$Companion;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByError$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/common/model/DFilter$ByError$prepare$2; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByError$prepare$2;->(Ljava/lang/Object;)V +Lcom/artemchep/keyguard/common/model/DFilter$ByExpiring; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByExpiring;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByExpiring;->()V +Lcom/artemchep/keyguard/common/model/DFilter$ByExpiring$1; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByExpiring$1;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByExpiring$1;->()V +Lcom/artemchep/keyguard/common/model/DFilter$ById; +HSPLcom/artemchep/keyguard/common/model/DFilter$ById;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ById;->(Ljava/lang/String;Lcom/artemchep/keyguard/common/model/DFilter$ById$What;)V +HSPLcom/artemchep/keyguard/common/model/DFilter$ById;->getId()Ljava/lang/String; +HSPLcom/artemchep/keyguard/common/model/DFilter$ById;->getKey()Ljava/lang/String; +HSPLcom/artemchep/keyguard/common/model/DFilter$ById;->getWhat()Lcom/artemchep/keyguard/common/model/DFilter$ById$What; +Lcom/artemchep/keyguard/common/model/DFilter$ById$$serializer; +HSPLcom/artemchep/keyguard/common/model/DFilter$ById$$serializer;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ById$$serializer;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ById$$serializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +Lcom/artemchep/keyguard/common/model/DFilter$ById$Companion; +HSPLcom/artemchep/keyguard/common/model/DFilter$ById$Companion;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ById$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/common/model/DFilter$ById$What; +HSPLcom/artemchep/keyguard/common/model/DFilter$ById$What;->$values()[Lcom/artemchep/keyguard/common/model/DFilter$ById$What; +HSPLcom/artemchep/keyguard/common/model/DFilter$ById$What;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ById$What;->(Ljava/lang/String;I)V +HSPLcom/artemchep/keyguard/common/model/DFilter$ById$What;->access$get$cachedSerializer$delegate$cp()Lkotlin/Lazy; +HSPLcom/artemchep/keyguard/common/model/DFilter$ById$What;->values()[Lcom/artemchep/keyguard/common/model/DFilter$ById$What; +Lcom/artemchep/keyguard/common/model/DFilter$ById$What$Companion; +HSPLcom/artemchep/keyguard/common/model/DFilter$ById$What$Companion;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ById$What$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/common/model/DFilter$ById$What$Companion;->get$cachedSerializer()Lkotlinx/serialization/KSerializer; +HSPLcom/artemchep/keyguard/common/model/DFilter$ById$What$Companion;->serializer()Lkotlinx/serialization/KSerializer; +Lcom/artemchep/keyguard/common/model/DFilter$ById$What$Companion$1; +HSPLcom/artemchep/keyguard/common/model/DFilter$ById$What$Companion$1;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ById$What$Companion$1;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ById$What$Companion$1;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/model/DFilter$ById$What$Companion$1;->invoke()Lkotlinx/serialization/KSerializer; +Lcom/artemchep/keyguard/common/model/DFilter$ByIncomplete; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByIncomplete;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByIncomplete;->()V +Lcom/artemchep/keyguard/common/model/DFilter$ByIncomplete$1; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByIncomplete$1;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByIncomplete$1;->()V +Lcom/artemchep/keyguard/common/model/DFilter$ByOtp; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByOtp;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByOtp;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByOtp;->getKey()Ljava/lang/String; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByOtp;->prepare(Lorg/kodein/di/DirectDI;Ljava/util/List;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/model/DFilter$ByOtp$1; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByOtp$1;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByOtp$1;->()V +Lcom/artemchep/keyguard/common/model/DFilter$ByOtp$prepare$2; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByOtp$prepare$2;->(Ljava/lang/Object;)V +Lcom/artemchep/keyguard/common/model/DFilter$ByPasskeyWebsites; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByPasskeyWebsites;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByPasskeyWebsites;->()V +Lcom/artemchep/keyguard/common/model/DFilter$ByPasskeyWebsites$1; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByPasskeyWebsites$1;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByPasskeyWebsites$1;->()V +Lcom/artemchep/keyguard/common/model/DFilter$ByPasskeys; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByPasskeys;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByPasskeys;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByPasskeys;->getKey()Ljava/lang/String; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByPasskeys;->prepare(Lorg/kodein/di/DirectDI;Ljava/util/List;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/model/DFilter$ByPasskeys$1; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByPasskeys$1;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByPasskeys$1;->()V +Lcom/artemchep/keyguard/common/model/DFilter$ByPasskeys$prepare$2; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByPasskeys$prepare$2;->(Ljava/lang/Object;)V +Lcom/artemchep/keyguard/common/model/DFilter$ByPasswordDuplicates; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByPasswordDuplicates;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByPasswordDuplicates;->()V +Lcom/artemchep/keyguard/common/model/DFilter$ByPasswordDuplicates$1; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByPasswordDuplicates$1;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByPasswordDuplicates$1;->()V +Lcom/artemchep/keyguard/common/model/DFilter$ByPasswordPwned; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByPasswordPwned;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByPasswordPwned;->()V +Lcom/artemchep/keyguard/common/model/DFilter$ByPasswordPwned$1; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByPasswordPwned$1;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByPasswordPwned$1;->()V +Lcom/artemchep/keyguard/common/model/DFilter$ByPasswordStrength; +Lcom/artemchep/keyguard/common/model/DFilter$ByPasswordStrength$$serializer; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByPasswordStrength$$serializer;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByPasswordStrength$$serializer;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByPasswordStrength$$serializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +Lcom/artemchep/keyguard/common/model/DFilter$ByPasswordValue; +Lcom/artemchep/keyguard/common/model/DFilter$ByPasswordValue$$serializer; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByPasswordValue$$serializer;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByPasswordValue$$serializer;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByPasswordValue$$serializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +Lcom/artemchep/keyguard/common/model/DFilter$ByReprompt; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByReprompt;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByReprompt;->(Z)V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByReprompt;->getKey()Ljava/lang/String; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByReprompt;->prepare(Lorg/kodein/di/DirectDI;Ljava/util/List;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/model/DFilter$ByReprompt$$serializer; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByReprompt$$serializer;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByReprompt$$serializer;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByReprompt$$serializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +Lcom/artemchep/keyguard/common/model/DFilter$ByReprompt$Companion; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByReprompt$Companion;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByReprompt$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/common/model/DFilter$ByReprompt$prepare$2; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByReprompt$prepare$2;->(Ljava/lang/Object;)V +Lcom/artemchep/keyguard/common/model/DFilter$BySync; +HSPLcom/artemchep/keyguard/common/model/DFilter$BySync;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$BySync;->(Z)V +HSPLcom/artemchep/keyguard/common/model/DFilter$BySync;->getKey()Ljava/lang/String; +HSPLcom/artemchep/keyguard/common/model/DFilter$BySync;->prepare(Lorg/kodein/di/DirectDI;Ljava/util/List;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/model/DFilter$BySync$$serializer; +HSPLcom/artemchep/keyguard/common/model/DFilter$BySync$$serializer;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$BySync$$serializer;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$BySync$$serializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +Lcom/artemchep/keyguard/common/model/DFilter$BySync$Companion; +HSPLcom/artemchep/keyguard/common/model/DFilter$BySync$Companion;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$BySync$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/common/model/DFilter$BySync$prepare$2; +HSPLcom/artemchep/keyguard/common/model/DFilter$BySync$prepare$2;->(Ljava/lang/Object;)V +Lcom/artemchep/keyguard/common/model/DFilter$ByTfaWebsites; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByTfaWebsites;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByTfaWebsites;->()V +Lcom/artemchep/keyguard/common/model/DFilter$ByTfaWebsites$1; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByTfaWebsites$1;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByTfaWebsites$1;->()V +Lcom/artemchep/keyguard/common/model/DFilter$ByType; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByType;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByType;->(Lcom/artemchep/keyguard/common/model/DSecret$Type;)V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByType;->getKey()Ljava/lang/String; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByType;->prepare(Lorg/kodein/di/DirectDI;Ljava/util/List;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/model/DFilter$ByType$$serializer; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByType$$serializer;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByType$$serializer;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByType$$serializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +Lcom/artemchep/keyguard/common/model/DFilter$ByType$Companion; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByType$Companion;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByType$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/common/model/DFilter$ByType$prepare$2; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByType$prepare$2;->(Ljava/lang/Object;)V +Lcom/artemchep/keyguard/common/model/DFilter$ByUnsecureWebsites; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByUnsecureWebsites;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByUnsecureWebsites;->()V +Lcom/artemchep/keyguard/common/model/DFilter$ByUnsecureWebsites$1; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByUnsecureWebsites$1;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByUnsecureWebsites$1;->()V +Lcom/artemchep/keyguard/common/model/DFilter$ByWebsitePwned; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByWebsitePwned;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByWebsitePwned;->()V +Lcom/artemchep/keyguard/common/model/DFilter$ByWebsitePwned$1; +HSPLcom/artemchep/keyguard/common/model/DFilter$ByWebsitePwned$1;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$ByWebsitePwned$1;->()V +Lcom/artemchep/keyguard/common/model/DFilter$Companion; +HSPLcom/artemchep/keyguard/common/model/DFilter$Companion;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$Companion;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$Companion;->_findOne(Lcom/artemchep/keyguard/common/model/DFilter;Ljava/lang/Class;Lkotlin/jvm/functions/Function1;)Larrow/core/Either; +HSPLcom/artemchep/keyguard/common/model/DFilter$Companion;->findOne$default(Lcom/artemchep/keyguard/common/model/DFilter$Companion;Lcom/artemchep/keyguard/common/model/DFilter;Ljava/lang/Class;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/model/DFilter$Companion;->findOne(Lcom/artemchep/keyguard/common/model/DFilter;Ljava/lang/Class;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/model/DFilter$Companion$findOne$2; +HSPLcom/artemchep/keyguard/common/model/DFilter$Companion$findOne$2;->()V +HSPLcom/artemchep/keyguard/common/model/DFilter$Companion$findOne$2;->()V +Lcom/artemchep/keyguard/common/model/DFilter$Or; +Lcom/artemchep/keyguard/common/model/DFilter$Primitive; +Lcom/artemchep/keyguard/common/model/DFolder; +Lcom/artemchep/keyguard/common/model/DFolderTree; +Lcom/artemchep/keyguard/common/model/DGeneratorEmailRelay; +Lcom/artemchep/keyguard/common/model/DGeneratorHistory; +Lcom/artemchep/keyguard/common/model/DHibpC; +Lcom/artemchep/keyguard/common/model/DMeta; +Lcom/artemchep/keyguard/common/model/DOrganization; +Lcom/artemchep/keyguard/common/model/DProfile; +Lcom/artemchep/keyguard/common/model/DSecret; +HSPLcom/artemchep/keyguard/common/model/DSecret;->()V +Lcom/artemchep/keyguard/common/model/DSecret$Companion; +HSPLcom/artemchep/keyguard/common/model/DSecret$Companion;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/common/model/DSecret$Field$LinkedId; +HSPLcom/artemchep/keyguard/common/model/DSecret$Field$LinkedId;->$values()[Lcom/artemchep/keyguard/common/model/DSecret$Field$LinkedId; +HSPLcom/artemchep/keyguard/common/model/DSecret$Field$LinkedId;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret$Field$LinkedId;->(Ljava/lang/String;ILcom/artemchep/keyguard/common/model/DSecret$Type;)V +HSPLcom/artemchep/keyguard/common/model/DSecret$Field$LinkedId;->values()[Lcom/artemchep/keyguard/common/model/DSecret$Field$LinkedId; +Lcom/artemchep/keyguard/common/model/DSecret$Identity; +HSPLcom/artemchep/keyguard/common/model/DSecret$Identity;->()V +Lcom/artemchep/keyguard/common/model/DSecret$Identity$Companion; +HSPLcom/artemchep/keyguard/common/model/DSecret$Identity$Companion;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret$Identity$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/common/model/DSecret$Login; +HSPLcom/artemchep/keyguard/common/model/DSecret$Login;->()V +Lcom/artemchep/keyguard/common/model/DSecret$Login$Companion; +HSPLcom/artemchep/keyguard/common/model/DSecret$Login$Companion;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret$Login$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/common/model/DSecret$Login$Fido2Credentials; +Lcom/artemchep/keyguard/common/model/DSecret$Type; +HSPLcom/artemchep/keyguard/common/model/DSecret$Type;->$values()[Lcom/artemchep/keyguard/common/model/DSecret$Type; +HSPLcom/artemchep/keyguard/common/model/DSecret$Type;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret$Type;->(Ljava/lang/String;I)V +HSPLcom/artemchep/keyguard/common/model/DSecret$Type;->values()[Lcom/artemchep/keyguard/common/model/DSecret$Type; +Lcom/artemchep/keyguard/common/model/DSecret$Uri; +Lcom/artemchep/keyguard/common/model/DSecret$Uri$MatchType; +HSPLcom/artemchep/keyguard/common/model/DSecret$Uri$MatchType;->$values()[Lcom/artemchep/keyguard/common/model/DSecret$Uri$MatchType; +HSPLcom/artemchep/keyguard/common/model/DSecret$Uri$MatchType;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret$Uri$MatchType;->(Ljava/lang/String;I)V +HSPLcom/artemchep/keyguard/common/model/DSecret$Uri$MatchType;->values()[Lcom/artemchep/keyguard/common/model/DSecret$Uri$MatchType; +Lcom/artemchep/keyguard/common/model/DSecret$Uri$MatchType$Companion; +HSPLcom/artemchep/keyguard/common/model/DSecret$Uri$MatchType$Companion;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret$Uri$MatchType$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/common/model/DSecretDuplicateGroup; +Lcom/artemchep/keyguard/common/model/DSecretFun; +HSPLcom/artemchep/keyguard/common/model/DSecretFun;->iconImageVector(Lcom/artemchep/keyguard/common/model/DSecret$Type;)Landroidx/compose/ui/graphics/vector/ImageVector; +HSPLcom/artemchep/keyguard/common/model/DSecretFun;->titleH(Lcom/artemchep/keyguard/common/model/DSecret$Type;)Ldev/icerock/moko/resources/StringResource; +Lcom/artemchep/keyguard/common/model/DSecretFun$WhenMappings; +HSPLcom/artemchep/keyguard/common/model/DSecretFun$WhenMappings;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$address1$1; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$address1$1;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$address1$1;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$address1$2; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$address1$2;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$address1$2;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$address2$1; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$address2$1;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$address2$1;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$address2$2; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$address2$2;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$address2$2;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$address3$1; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$address3$1;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$address3$1;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$address3$2; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$address3$2;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$address3$2;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$city$1; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$city$1;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$city$1;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$city$2; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$city$2;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$city$2;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$company$1; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$company$1;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$company$1;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$company$2; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$company$2;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$company$2;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$country$1; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$country$1;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$country$1;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$country$2; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$country$2;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$country$2;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$email$1; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$email$1;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$email$1;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$email$2; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$email$2;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$email$2;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$firstName$1; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$firstName$1;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$firstName$1;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$firstName$2; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$firstName$2;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$firstName$2;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$lastName$1; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$lastName$1;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$lastName$1;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$lastName$2; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$lastName$2;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$lastName$2;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$licenseNumber$1; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$licenseNumber$1;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$licenseNumber$1;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$licenseNumber$2; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$licenseNumber$2;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$licenseNumber$2;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$middleName$1; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$middleName$1;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$middleName$1;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$middleName$2; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$middleName$2;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$middleName$2;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$passportNumber$1; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$passportNumber$1;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$passportNumber$1;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$passportNumber$2; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$passportNumber$2;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$passportNumber$2;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$phone$1; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$phone$1;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$phone$1;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$phone$2; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$phone$2;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$phone$2;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$postalCode$1; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$postalCode$1;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$postalCode$1;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$postalCode$2; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$postalCode$2;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$postalCode$2;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$ssn$1; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$ssn$1;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$ssn$1;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$ssn$2; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$ssn$2;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$ssn$2;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$state$1; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$state$1;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$state$1;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$state$2; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$state$2;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$state$2;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$title$1; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$title$1;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$title$1;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$title$2; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$title$2;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$title$2;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$username$1; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$username$1;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$username$1;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$username$2; +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$username$2;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Identity__OpticsKt$username$2;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Login__OpticsKt$password$1; +HSPLcom/artemchep/keyguard/common/model/DSecret_Login__OpticsKt$password$1;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Login__OpticsKt$password$1;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Login__OpticsKt$password$2; +HSPLcom/artemchep/keyguard/common/model/DSecret_Login__OpticsKt$password$2;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Login__OpticsKt$password$2;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Login__OpticsKt$totp$1; +HSPLcom/artemchep/keyguard/common/model/DSecret_Login__OpticsKt$totp$1;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Login__OpticsKt$totp$1;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Login__OpticsKt$totp$2; +HSPLcom/artemchep/keyguard/common/model/DSecret_Login__OpticsKt$totp$2;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Login__OpticsKt$totp$2;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Login__OpticsKt$username$1; +HSPLcom/artemchep/keyguard/common/model/DSecret_Login__OpticsKt$username$1;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Login__OpticsKt$username$1;->()V +Lcom/artemchep/keyguard/common/model/DSecret_Login__OpticsKt$username$2; +HSPLcom/artemchep/keyguard/common/model/DSecret_Login__OpticsKt$username$2;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret_Login__OpticsKt$username$2;->()V +Lcom/artemchep/keyguard/common/model/DSecret__OpticsKt$attachments$1; +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$attachments$1;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$attachments$1;->()V +Lcom/artemchep/keyguard/common/model/DSecret__OpticsKt$attachments$2; +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$attachments$2;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$attachments$2;->()V +Lcom/artemchep/keyguard/common/model/DSecret__OpticsKt$card$1; +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$card$1;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$card$1;->()V +Lcom/artemchep/keyguard/common/model/DSecret__OpticsKt$card$2; +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$card$2;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$card$2;->()V +Lcom/artemchep/keyguard/common/model/DSecret__OpticsKt$favorite$1; +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$favorite$1;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$favorite$1;->()V +Lcom/artemchep/keyguard/common/model/DSecret__OpticsKt$favorite$2; +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$favorite$2;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$favorite$2;->()V +Lcom/artemchep/keyguard/common/model/DSecret__OpticsKt$fields$1; +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$fields$1;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$fields$1;->()V +Lcom/artemchep/keyguard/common/model/DSecret__OpticsKt$fields$2; +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$fields$2;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$fields$2;->()V +Lcom/artemchep/keyguard/common/model/DSecret__OpticsKt$identity$1; +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$identity$1;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$identity$1;->()V +Lcom/artemchep/keyguard/common/model/DSecret__OpticsKt$identity$2; +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$identity$2;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$identity$2;->()V +Lcom/artemchep/keyguard/common/model/DSecret__OpticsKt$login$1; +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$login$1;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$login$1;->()V +Lcom/artemchep/keyguard/common/model/DSecret__OpticsKt$login$2; +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$login$2;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$login$2;->()V +Lcom/artemchep/keyguard/common/model/DSecret__OpticsKt$notes$1; +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$notes$1;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$notes$1;->()V +Lcom/artemchep/keyguard/common/model/DSecret__OpticsKt$notes$2; +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$notes$2;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$notes$2;->()V +Lcom/artemchep/keyguard/common/model/DSecret__OpticsKt$reprompt$1; +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$reprompt$1;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$reprompt$1;->()V +Lcom/artemchep/keyguard/common/model/DSecret__OpticsKt$reprompt$2; +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$reprompt$2;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$reprompt$2;->()V +Lcom/artemchep/keyguard/common/model/DSecret__OpticsKt$type$1; +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$type$1;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$type$1;->()V +Lcom/artemchep/keyguard/common/model/DSecret__OpticsKt$type$2; +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$type$2;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$type$2;->()V +Lcom/artemchep/keyguard/common/model/DSecret__OpticsKt$uris$1; +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$uris$1;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$uris$1;->()V +Lcom/artemchep/keyguard/common/model/DSecret__OpticsKt$uris$2; +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$uris$2;->()V +HSPLcom/artemchep/keyguard/common/model/DSecret__OpticsKt$uris$2;->()V +Lcom/artemchep/keyguard/common/model/DSend; +Lcom/artemchep/keyguard/common/model/DownloadAttachmentRequest; +Lcom/artemchep/keyguard/common/model/Fingerprint; +HSPLcom/artemchep/keyguard/common/model/Fingerprint;->()V +HSPLcom/artemchep/keyguard/common/model/Fingerprint;->(Lcom/artemchep/keyguard/common/model/FingerprintPassword;Lcom/artemchep/keyguard/common/model/FingerprintBiometric;)V +HSPLcom/artemchep/keyguard/common/model/Fingerprint;->getBiometric()Lcom/artemchep/keyguard/common/model/FingerprintBiometric; +HSPLcom/artemchep/keyguard/common/model/Fingerprint;->getMaster()Lcom/artemchep/keyguard/common/model/FingerprintPassword; +Lcom/artemchep/keyguard/common/model/FingerprintBiometric; +Lcom/artemchep/keyguard/common/model/FingerprintPassword; +HSPLcom/artemchep/keyguard/common/model/FingerprintPassword;->()V +HSPLcom/artemchep/keyguard/common/model/FingerprintPassword;->(Lcom/artemchep/keyguard/common/model/MasterPasswordHash;Lcom/artemchep/keyguard/common/model/MasterPasswordSalt;)V +HSPLcom/artemchep/keyguard/common/model/FingerprintPassword;->getHash()Lcom/artemchep/keyguard/common/model/MasterPasswordHash; +HSPLcom/artemchep/keyguard/common/model/FingerprintPassword;->getSalt()Lcom/artemchep/keyguard/common/model/MasterPasswordSalt; +HSPLcom/artemchep/keyguard/common/model/FingerprintPassword;->hashCode()I +Lcom/artemchep/keyguard/common/model/FolderOwnership2; +Lcom/artemchep/keyguard/common/model/GeneratorContext; +Lcom/artemchep/keyguard/common/model/HasAccountId; +Lcom/artemchep/keyguard/common/model/LinkInfo; +Lcom/artemchep/keyguard/common/model/LinkInfoAndroid; +Lcom/artemchep/keyguard/common/model/LinkInfoExecute; +Lcom/artemchep/keyguard/common/model/LinkInfoLaunch; +Lcom/artemchep/keyguard/common/model/LinkInfoPlatform; +Lcom/artemchep/keyguard/common/model/LinkInfoPlatform$Android; +Lcom/artemchep/keyguard/common/model/Loadable; +Lcom/artemchep/keyguard/common/model/Loadable$Loading; +HSPLcom/artemchep/keyguard/common/model/Loadable$Loading;->()V +HSPLcom/artemchep/keyguard/common/model/Loadable$Loading;->()V +HSPLcom/artemchep/keyguard/common/model/Loadable$Loading;->equals(Ljava/lang/Object;)Z +Lcom/artemchep/keyguard/common/model/Loadable$Ok; +HSPLcom/artemchep/keyguard/common/model/Loadable$Ok;->()V +HSPLcom/artemchep/keyguard/common/model/Loadable$Ok;->(Ljava/lang/Object;)V +HSPLcom/artemchep/keyguard/common/model/Loadable$Ok;->equals(Ljava/lang/Object;)Z +HSPLcom/artemchep/keyguard/common/model/Loadable$Ok;->getValue()Ljava/lang/Object; +Lcom/artemchep/keyguard/common/model/Loadable$Ok$Companion; +HSPLcom/artemchep/keyguard/common/model/Loadable$Ok$Companion;->()V +HSPLcom/artemchep/keyguard/common/model/Loadable$Ok$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/common/model/MasterKey; +HSPLcom/artemchep/keyguard/common/model/MasterKey;->()V +HSPLcom/artemchep/keyguard/common/model/MasterKey;->([B)V +HSPLcom/artemchep/keyguard/common/model/MasterKey;->getByteArray()[B +HSPLcom/artemchep/keyguard/common/model/MasterKey;->hashCode()I +Lcom/artemchep/keyguard/common/model/MasterPassword; +HSPLcom/artemchep/keyguard/common/model/MasterPassword;->([B)V +HSPLcom/artemchep/keyguard/common/model/MasterPassword;->box-impl([B)Lcom/artemchep/keyguard/common/model/MasterPassword; +HSPLcom/artemchep/keyguard/common/model/MasterPassword;->constructor-impl([B)[B +HSPLcom/artemchep/keyguard/common/model/MasterPassword;->unbox-impl()[B +Lcom/artemchep/keyguard/common/model/MasterPasswordHash; +HSPLcom/artemchep/keyguard/common/model/MasterPasswordHash;->()V +HSPLcom/artemchep/keyguard/common/model/MasterPasswordHash;->([B)V +HSPLcom/artemchep/keyguard/common/model/MasterPasswordHash;->getByteArray()[B +HSPLcom/artemchep/keyguard/common/model/MasterPasswordHash;->hashCode()I +Lcom/artemchep/keyguard/common/model/MasterPasswordSalt; +HSPLcom/artemchep/keyguard/common/model/MasterPasswordSalt;->()V +HSPLcom/artemchep/keyguard/common/model/MasterPasswordSalt;->([B)V +HSPLcom/artemchep/keyguard/common/model/MasterPasswordSalt;->getByteArray()[B +HSPLcom/artemchep/keyguard/common/model/MasterPasswordSalt;->hashCode()I +Lcom/artemchep/keyguard/common/model/MasterSession; +Lcom/artemchep/keyguard/common/model/MasterSession$Empty; +HSPLcom/artemchep/keyguard/common/model/MasterSession$Empty;->()V +HSPLcom/artemchep/keyguard/common/model/MasterSession$Empty;->(Ljava/lang/String;)V +HSPLcom/artemchep/keyguard/common/model/MasterSession$Empty;->(Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/common/model/MasterSession$Empty;->equals(Ljava/lang/Object;)Z +HSPLcom/artemchep/keyguard/common/model/MasterSession$Empty;->getReason()Ljava/lang/String; +Lcom/artemchep/keyguard/common/model/MasterSession$Empty$Companion; +HSPLcom/artemchep/keyguard/common/model/MasterSession$Empty$Companion;->()V +HSPLcom/artemchep/keyguard/common/model/MasterSession$Empty$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/common/model/MasterSession$Key; +HSPLcom/artemchep/keyguard/common/model/MasterSession$Key;->()V +HSPLcom/artemchep/keyguard/common/model/MasterSession$Key;->(Lcom/artemchep/keyguard/common/model/MasterKey;Lorg/kodein/di/DI;Lcom/artemchep/keyguard/common/model/MasterSession$Key$Origin;Lkotlinx/datetime/Instant;)V +HSPLcom/artemchep/keyguard/common/model/MasterSession$Key;->getDi()Lorg/kodein/di/DI; +HSPLcom/artemchep/keyguard/common/model/MasterSession$Key;->getMasterKey()Lcom/artemchep/keyguard/common/model/MasterKey; +Lcom/artemchep/keyguard/common/model/MasterSession$Key$Authenticated; +HSPLcom/artemchep/keyguard/common/model/MasterSession$Key$Authenticated;->()V +HSPLcom/artemchep/keyguard/common/model/MasterSession$Key$Authenticated;->()V +Lcom/artemchep/keyguard/common/model/MasterSession$Key$Companion; +HSPLcom/artemchep/keyguard/common/model/MasterSession$Key$Companion;->()V +HSPLcom/artemchep/keyguard/common/model/MasterSession$Key$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/common/model/MasterSession$Key$Origin; +Lcom/artemchep/keyguard/common/model/NavAnimation; +HSPLcom/artemchep/keyguard/common/model/NavAnimation;->$values()[Lcom/artemchep/keyguard/common/model/NavAnimation; +HSPLcom/artemchep/keyguard/common/model/NavAnimation;->()V +HSPLcom/artemchep/keyguard/common/model/NavAnimation;->(Ljava/lang/String;ILjava/lang/String;Ldev/icerock/moko/resources/StringResource;)V +HSPLcom/artemchep/keyguard/common/model/NavAnimation;->getKey()Ljava/lang/String; +HSPLcom/artemchep/keyguard/common/model/NavAnimation;->values()[Lcom/artemchep/keyguard/common/model/NavAnimation; +Lcom/artemchep/keyguard/common/model/NavAnimation$Companion; +HSPLcom/artemchep/keyguard/common/model/NavAnimation$Companion;->()V +HSPLcom/artemchep/keyguard/common/model/NavAnimation$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/common/model/NavAnimation$Companion;->getDefault()Lcom/artemchep/keyguard/common/model/NavAnimation; +Lcom/artemchep/keyguard/common/model/PasswordGeneratorConfig; +Lcom/artemchep/keyguard/common/model/PasswordGeneratorConfig$Passphrase; +Lcom/artemchep/keyguard/common/model/PasswordPwnage; +Lcom/artemchep/keyguard/common/model/PasswordStrength; +Lcom/artemchep/keyguard/common/model/PersistedSession; +Lcom/artemchep/keyguard/common/model/Product; +Lcom/artemchep/keyguard/common/model/RemoveAttachmentRequest; +Lcom/artemchep/keyguard/common/model/RichResult; +HSPLcom/artemchep/keyguard/common/model/RichResult;->()V +HSPLcom/artemchep/keyguard/common/model/RichResult;->()V +HSPLcom/artemchep/keyguard/common/model/RichResult;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/common/model/RichResult$Companion; +HSPLcom/artemchep/keyguard/common/model/RichResult$Companion;->()V +HSPLcom/artemchep/keyguard/common/model/RichResult$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/common/model/RichResult$Failure; +HSPLcom/artemchep/keyguard/common/model/RichResult$Failure;->()V +HSPLcom/artemchep/keyguard/common/model/RichResult$Failure;->(Ljava/lang/Throwable;)V +HSPLcom/artemchep/keyguard/common/model/RichResult$Failure;->equals(Ljava/lang/Object;)Z +HSPLcom/artemchep/keyguard/common/model/RichResult$Failure;->getException()Ljava/lang/Throwable; +Lcom/artemchep/keyguard/common/model/RichResult$Loading; +HSPLcom/artemchep/keyguard/common/model/RichResult$Loading;->()V +HSPLcom/artemchep/keyguard/common/model/RichResult$Loading;->(Ljava/lang/Float;Lcom/artemchep/keyguard/common/model/RichResult;)V +HSPLcom/artemchep/keyguard/common/model/RichResult$Loading;->(Ljava/lang/Float;Lcom/artemchep/keyguard/common/model/RichResult;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/common/model/RichResult$Loading;->equals(Ljava/lang/Object;)Z +HSPLcom/artemchep/keyguard/common/model/RichResult$Loading;->getLastTerminalState()Lcom/artemchep/keyguard/common/model/RichResult; +HSPLcom/artemchep/keyguard/common/model/RichResult$Loading;->getProgress()Ljava/lang/Float; +Lcom/artemchep/keyguard/common/model/RichResult$Success; +Lcom/artemchep/keyguard/common/model/RichResultKt; +HSPLcom/artemchep/keyguard/common/model/RichResultKt;->combine(Lcom/artemchep/keyguard/common/model/RichResult;Lcom/artemchep/keyguard/common/model/RichResult;)Lcom/artemchep/keyguard/common/model/RichResult; +HSPLcom/artemchep/keyguard/common/model/RichResultKt;->fold(Lcom/artemchep/keyguard/common/model/RichResult;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/model/RichResultKt;->getTerminalState(Lcom/artemchep/keyguard/common/model/RichResult;)Lcom/artemchep/keyguard/common/model/RichResult; +HSPLcom/artemchep/keyguard/common/model/RichResultKt;->orNull(Lcom/artemchep/keyguard/common/model/RichResult;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/model/Screen; +HSPLcom/artemchep/keyguard/common/model/Screen;->()V +HSPLcom/artemchep/keyguard/common/model/Screen;->()V +HSPLcom/artemchep/keyguard/common/model/Screen;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/common/model/Screen$On; +HSPLcom/artemchep/keyguard/common/model/Screen$On;->()V +HSPLcom/artemchep/keyguard/common/model/Screen$On;->()V +HSPLcom/artemchep/keyguard/common/model/Screen$On;->equals(Ljava/lang/Object;)Z +Lcom/artemchep/keyguard/common/model/Subscription; +Lcom/artemchep/keyguard/common/model/TotpCode; +Lcom/artemchep/keyguard/common/model/TotpToken; +Lcom/artemchep/keyguard/common/model/VaultState; +Lcom/artemchep/keyguard/common/model/VaultState$Create; +HSPLcom/artemchep/keyguard/common/model/VaultState$Create;->()V +HSPLcom/artemchep/keyguard/common/model/VaultState$Create;->(Lcom/artemchep/keyguard/common/model/VaultState$Create$WithPassword;Lcom/artemchep/keyguard/common/model/VaultState$Create$WithBiometric;)V +HSPLcom/artemchep/keyguard/common/model/VaultState$Create;->getCreateWithMasterPassword()Lcom/artemchep/keyguard/common/model/VaultState$Create$WithPassword; +HSPLcom/artemchep/keyguard/common/model/VaultState$Create;->getCreateWithMasterPasswordAndBiometric()Lcom/artemchep/keyguard/common/model/VaultState$Create$WithBiometric; +Lcom/artemchep/keyguard/common/model/VaultState$Create$WithBiometric; +Lcom/artemchep/keyguard/common/model/VaultState$Create$WithPassword; +HSPLcom/artemchep/keyguard/common/model/VaultState$Create$WithPassword;->()V +HSPLcom/artemchep/keyguard/common/model/VaultState$Create$WithPassword;->(Lkotlin/jvm/functions/Function1;)V +HSPLcom/artemchep/keyguard/common/model/VaultState$Create$WithPassword;->getGetCreateIo()Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/common/model/VaultState$Loading; +HSPLcom/artemchep/keyguard/common/model/VaultState$Loading;->()V +HSPLcom/artemchep/keyguard/common/model/VaultState$Loading;->()V +HSPLcom/artemchep/keyguard/common/model/VaultState$Loading;->equals(Ljava/lang/Object;)Z +HSPLcom/artemchep/keyguard/common/model/VaultState$Loading;->hashCode()I +Lcom/artemchep/keyguard/common/model/VaultState$Main; +HSPLcom/artemchep/keyguard/common/model/VaultState$Main;->()V +HSPLcom/artemchep/keyguard/common/model/VaultState$Main;->(Lcom/artemchep/keyguard/common/model/MasterKey;Lcom/artemchep/keyguard/common/model/VaultState$Main$ChangePassword;Lorg/kodein/di/DI;)V +HSPLcom/artemchep/keyguard/common/model/VaultState$Main;->equals(Ljava/lang/Object;)Z +HSPLcom/artemchep/keyguard/common/model/VaultState$Main;->getDi()Lorg/kodein/di/DI; +HSPLcom/artemchep/keyguard/common/model/VaultState$Main;->hashCode()I +Lcom/artemchep/keyguard/common/model/VaultState$Main$ChangePassword; +HSPLcom/artemchep/keyguard/common/model/VaultState$Main$ChangePassword;->()V +HSPLcom/artemchep/keyguard/common/model/VaultState$Main$ChangePassword;->(Ljava/lang/Object;Lcom/artemchep/keyguard/common/model/VaultState$Main$ChangePassword$WithPassword;Lcom/artemchep/keyguard/common/model/VaultState$Main$ChangePassword$WithBiometric;)V +HSPLcom/artemchep/keyguard/common/model/VaultState$Main$ChangePassword;->hashCode()I +Lcom/artemchep/keyguard/common/model/VaultState$Main$ChangePassword$WithBiometric; +Lcom/artemchep/keyguard/common/model/VaultState$Main$ChangePassword$WithPassword; +HSPLcom/artemchep/keyguard/common/model/VaultState$Main$ChangePassword$WithPassword;->()V +HSPLcom/artemchep/keyguard/common/model/VaultState$Main$ChangePassword$WithPassword;->(Lkotlin/jvm/functions/Function2;)V +Lcom/artemchep/keyguard/common/model/VaultState$Unlock; +HSPLcom/artemchep/keyguard/common/model/VaultState$Unlock;->()V +HSPLcom/artemchep/keyguard/common/model/VaultState$Unlock;->(Lcom/artemchep/keyguard/common/model/VaultState$Unlock$WithPassword;Lcom/artemchep/keyguard/common/model/VaultState$Unlock$WithBiometric;Ljava/lang/String;)V +HSPLcom/artemchep/keyguard/common/model/VaultState$Unlock;->getLockReason()Ljava/lang/String; +HSPLcom/artemchep/keyguard/common/model/VaultState$Unlock;->getUnlockWithBiometric()Lcom/artemchep/keyguard/common/model/VaultState$Unlock$WithBiometric; +HSPLcom/artemchep/keyguard/common/model/VaultState$Unlock;->getUnlockWithMasterPassword()Lcom/artemchep/keyguard/common/model/VaultState$Unlock$WithPassword; +Lcom/artemchep/keyguard/common/model/VaultState$Unlock$WithBiometric; +Lcom/artemchep/keyguard/common/model/VaultState$Unlock$WithPassword; +HSPLcom/artemchep/keyguard/common/model/VaultState$Unlock$WithPassword;->()V +HSPLcom/artemchep/keyguard/common/model/VaultState$Unlock$WithPassword;->(Lkotlin/jvm/functions/Function1;)V +HSPLcom/artemchep/keyguard/common/model/VaultState$Unlock$WithPassword;->getGetCreateIo()Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/common/model/WithBiometric; +Lcom/artemchep/keyguard/common/model/create/CreateRequest; +Lcom/artemchep/keyguard/common/model/create/CreateRequest$Ownership2; +Lcom/artemchep/keyguard/common/service/Files; +HSPLcom/artemchep/keyguard/common/service/Files;->$values()[Lcom/artemchep/keyguard/common/service/Files; +HSPLcom/artemchep/keyguard/common/service/Files;->()V +HSPLcom/artemchep/keyguard/common/service/Files;->(Ljava/lang/String;ILjava/lang/String;)V +HSPLcom/artemchep/keyguard/common/service/Files;->getFilename()Ljava/lang/String; +Lcom/artemchep/keyguard/common/service/autofill/AutofillService; +Lcom/artemchep/keyguard/common/service/clipboard/ClipboardService; +Lcom/artemchep/keyguard/common/service/connectivity/ConnectivityService; +Lcom/artemchep/keyguard/common/service/crypto/CipherEncryptor; +Lcom/artemchep/keyguard/common/service/crypto/CryptoGenerator; +Lcom/artemchep/keyguard/common/service/crypto/CryptoGenerator$DefaultImpls; +HSPLcom/artemchep/keyguard/common/service/crypto/CryptoGenerator$DefaultImpls;->hkdf$default(Lcom/artemchep/keyguard/common/service/crypto/CryptoGenerator;[B[B[BIILjava/lang/Object;)[B +HSPLcom/artemchep/keyguard/common/service/crypto/CryptoGenerator$DefaultImpls;->pbkdf2$default(Lcom/artemchep/keyguard/common/service/crypto/CryptoGenerator;[B[BIIILjava/lang/Object;)[B +Lcom/artemchep/keyguard/common/service/crypto/FileEncryptor; +Lcom/artemchep/keyguard/common/service/deeplink/DeeplinkService; +Lcom/artemchep/keyguard/common/service/deeplink/impl/DeeplinkServiceImpl; +HSPLcom/artemchep/keyguard/common/service/deeplink/impl/DeeplinkServiceImpl;->()V +HSPLcom/artemchep/keyguard/common/service/deeplink/impl/DeeplinkServiceImpl;->()V +HSPLcom/artemchep/keyguard/common/service/deeplink/impl/DeeplinkServiceImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/service/deeplink/impl/DeeplinkServiceImpl;->clear(Ljava/lang/String;)V +HSPLcom/artemchep/keyguard/common/service/deeplink/impl/DeeplinkServiceImpl;->get(Ljava/lang/String;)Ljava/lang/String; +Lcom/artemchep/keyguard/common/service/download/DownloadManager; +Lcom/artemchep/keyguard/common/service/download/DownloadService; +Lcom/artemchep/keyguard/common/service/extract/LinkInfoExtractor; +Lcom/artemchep/keyguard/common/service/extract/impl/LinkInfoPlatformExtractor; +Lcom/artemchep/keyguard/common/service/gpmprivapps/PrivilegedAppsService; +Lcom/artemchep/keyguard/common/service/hibp/breaches/all/BreachesLocalDataSource; +Lcom/artemchep/keyguard/common/service/hibp/breaches/all/BreachesRemoteDataSource; +Lcom/artemchep/keyguard/common/service/hibp/breaches/all/BreachesRepository; +Lcom/artemchep/keyguard/common/service/hibp/passwords/PasswordPwnageDataSource; +Lcom/artemchep/keyguard/common/service/hibp/passwords/PasswordPwnageDataSourceLocal; +Lcom/artemchep/keyguard/common/service/hibp/passwords/PasswordPwnageDataSourceRemote; +Lcom/artemchep/keyguard/common/service/hibp/passwords/PasswordPwnageRepository; +Lcom/artemchep/keyguard/common/service/id/IdRepository; +Lcom/artemchep/keyguard/common/service/id/impl/IdRepositoryImpl; +HSPLcom/artemchep/keyguard/common/service/id/impl/IdRepositoryImpl;->()V +HSPLcom/artemchep/keyguard/common/service/id/impl/IdRepositoryImpl;->(Lcom/artemchep/keyguard/common/service/keyvalue/KeyValueStore;)V +HSPLcom/artemchep/keyguard/common/service/id/impl/IdRepositoryImpl;->get()Lkotlin/jvm/functions/Function1; +HSPLcom/artemchep/keyguard/common/service/id/impl/IdRepositoryImpl;->put(Ljava/lang/String;)Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/common/service/id/impl/IdRepositoryImpl$Companion; +HSPLcom/artemchep/keyguard/common/service/id/impl/IdRepositoryImpl$Companion;->()V +HSPLcom/artemchep/keyguard/common/service/id/impl/IdRepositoryImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/common/service/justdeleteme/JustDeleteMeService; +Lcom/artemchep/keyguard/common/service/justdeleteme/JustDeleteMeServiceInfo; +Lcom/artemchep/keyguard/common/service/justgetmydata/JustGetMyDataService; +Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference; +Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreferenceKt; +HSPLcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreferenceKt;->asDuration(Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference;)Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreferenceKt$asDuration$$inlined$map$1; +HSPLcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreferenceKt$asDuration$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +Lcom/artemchep/keyguard/common/service/keyvalue/KeyValueStore; +Lcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt; +HSPLcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt;->getObject(Lcom/artemchep/keyguard/common/service/keyvalue/KeyValueStore;Ljava/lang/String;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference; +Lcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1; +HSPLcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1;->(Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V +HSPLcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1;->setAndCommit(Ljava/lang/Object;)Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1$collect$$inlined$map$1; +HSPLcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1$collect$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function1;)V +HSPLcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1$collect$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1$collect$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1$collect$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/jvm/functions/Function1;)V +HSPLcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1$collect$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1$collect$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1$collect$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1$collect$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1$collect$$inlined$map$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1$setAndCommit$$inlined$flatMap$1; +HSPLcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1$setAndCommit$$inlined$flatMap$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference;)V +HSPLcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1$setAndCommit$$inlined$flatMap$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1$setAndCommit$$inlined$flatMap$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1$setAndCommit$$inlined$flatMap$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1$setAndCommit$$inlined$flatMap$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1$setAndCommit$$inlined$ioEffect$1; +HSPLcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1$setAndCommit$$inlined$ioEffect$1;->(Lkotlin/coroutines/Continuation;Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function1;Ljava/lang/Object;)V +HSPLcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1$setAndCommit$$inlined$ioEffect$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1$setAndCommit$$inlined$ioEffect$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1$setAndCommit$$inlined$ioEffect$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1$setAndCommit$$inlined$ioEffect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1$setAndCommit$$inlined$ioEffect$1$1; +HSPLcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1$setAndCommit$$inlined$ioEffect$1$1;->(Lkotlin/coroutines/Continuation;Lkotlin/jvm/functions/Function1;Ljava/lang/Object;)V +HSPLcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1$setAndCommit$$inlined$ioEffect$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1$setAndCommit$$inlined$ioEffect$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1$setAndCommit$$inlined$ioEffect$1$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/service/keyvalue/KeyValueStoreKt$getObject$1$setAndCommit$$inlined$ioEffect$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/service/keyvalue/SecureKeyValueStore; +Lcom/artemchep/keyguard/common/service/license/LicenseService; +Lcom/artemchep/keyguard/common/service/logging/LogLevel; +HSPLcom/artemchep/keyguard/common/service/logging/LogLevel;->$values()[Lcom/artemchep/keyguard/common/service/logging/LogLevel; +HSPLcom/artemchep/keyguard/common/service/logging/LogLevel;->()V +HSPLcom/artemchep/keyguard/common/service/logging/LogLevel;->(Ljava/lang/String;I)V +Lcom/artemchep/keyguard/common/service/logging/LogRepository; +Lcom/artemchep/keyguard/common/service/logging/LogRepository$DefaultImpls; +PLcom/artemchep/keyguard/common/service/logging/LogRepository$DefaultImpls;->post$default(Lcom/artemchep/keyguard/common/service/logging/LogRepository;Ljava/lang/String;Ljava/lang/String;Lcom/artemchep/keyguard/common/service/logging/LogLevel;ILjava/lang/Object;)V +Lcom/artemchep/keyguard/common/service/passkey/PassKeyService; +Lcom/artemchep/keyguard/common/service/permission/Permission; +HSPLcom/artemchep/keyguard/common/service/permission/Permission;->$values()[Lcom/artemchep/keyguard/common/service/permission/Permission; +HSPLcom/artemchep/keyguard/common/service/permission/Permission;->()V +HSPLcom/artemchep/keyguard/common/service/permission/Permission;->(Ljava/lang/String;ILjava/lang/String;II)V +HSPLcom/artemchep/keyguard/common/service/permission/Permission;->(Ljava/lang/String;ILjava/lang/String;IIILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/common/service/permission/Permission;->getMaxSdk()I +HSPLcom/artemchep/keyguard/common/service/permission/Permission;->getMinSdk()I +HSPLcom/artemchep/keyguard/common/service/permission/Permission;->getPermission()Ljava/lang/String; +Lcom/artemchep/keyguard/common/service/permission/PermissionService; +Lcom/artemchep/keyguard/common/service/permission/PermissionState; +Lcom/artemchep/keyguard/common/service/permission/PermissionState$Declined; +HSPLcom/artemchep/keyguard/common/service/permission/PermissionState$Declined;->()V +HSPLcom/artemchep/keyguard/common/service/permission/PermissionState$Declined;->(Lkotlin/jvm/functions/Function1;)V +Lcom/artemchep/keyguard/common/service/power/PowerService; +Lcom/artemchep/keyguard/common/service/relays/api/EmailRelay; +Lcom/artemchep/keyguard/common/service/relays/api/anonaddy/AnonAddyEmailRelay; +Lcom/artemchep/keyguard/common/service/relays/api/duckduckgo/DuckDuckGoEmailRelay; +Lcom/artemchep/keyguard/common/service/relays/api/firefoxrelay/FirefoxRelayEmailRelay; +Lcom/artemchep/keyguard/common/service/relays/api/forwardemail/ForwardEmailEmailRelay; +Lcom/artemchep/keyguard/common/service/relays/api/simplelogin/SimpleLoginEmailRelay; +Lcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt; +HSPLcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt;->emailRelayDiModule()Lorg/kodein/di/DI$Module; +Lcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt$emailRelayDiModule$1; +HSPLcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt$emailRelayDiModule$1;->()V +HSPLcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt$emailRelayDiModule$1;->()V +HSPLcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt$emailRelayDiModule$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt$emailRelayDiModule$1;->invoke(Lorg/kodein/di/DI$Builder;)V +Lcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt$emailRelayDiModule$1$1; +HSPLcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt$emailRelayDiModule$1$1;->()V +HSPLcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt$emailRelayDiModule$1$1;->()V +Lcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt$emailRelayDiModule$1$2; +HSPLcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt$emailRelayDiModule$1$2;->()V +HSPLcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt$emailRelayDiModule$1$2;->()V +Lcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt$emailRelayDiModule$1$3; +HSPLcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt$emailRelayDiModule$1$3;->()V +HSPLcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt$emailRelayDiModule$1$3;->()V +Lcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt$emailRelayDiModule$1$4; +HSPLcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt$emailRelayDiModule$1$4;->()V +HSPLcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt$emailRelayDiModule$1$4;->()V +Lcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt$emailRelayDiModule$1$5; +HSPLcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt$emailRelayDiModule$1$5;->()V +HSPLcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt$emailRelayDiModule$1$5;->()V +Lcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt$emailRelayDiModule$1$invoke$$inlined$bindSingleton$default$1; +HSPLcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt$emailRelayDiModule$1$invoke$$inlined$bindSingleton$default$1;->()V +Lcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt$emailRelayDiModule$1$invoke$$inlined$bindSingleton$default$2; +HSPLcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt$emailRelayDiModule$1$invoke$$inlined$bindSingleton$default$2;->()V +Lcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt$emailRelayDiModule$1$invoke$$inlined$bindSingleton$default$3; +HSPLcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt$emailRelayDiModule$1$invoke$$inlined$bindSingleton$default$3;->()V +Lcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt$emailRelayDiModule$1$invoke$$inlined$bindSingleton$default$4; +HSPLcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt$emailRelayDiModule$1$invoke$$inlined$bindSingleton$default$4;->()V +Lcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt$emailRelayDiModule$1$invoke$$inlined$bindSingleton$default$5; +HSPLcom/artemchep/keyguard/common/service/relays/di/EmailRelayModuleKt$emailRelayDiModule$1$invoke$$inlined$bindSingleton$default$5;->()V +Lcom/artemchep/keyguard/common/service/relays/repo/GeneratorEmailRelayRepository; +Lcom/artemchep/keyguard/common/service/review/ReviewLog; +Lcom/artemchep/keyguard/common/service/review/ReviewService; +Lcom/artemchep/keyguard/common/service/settings/SettingsReadRepository; +Lcom/artemchep/keyguard/common/service/settings/SettingsReadWriteRepository; +Lcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->()V +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->(Lcom/artemchep/keyguard/common/service/keyvalue/KeyValueStore;)V +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getAllowScreenshots()Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getAllowScreenshots()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getAllowTwoPanelLayoutInLandscape()Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getAllowTwoPanelLayoutInLandscape()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getAllowTwoPanelLayoutInPortrait()Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getAllowTwoPanelLayoutInPortrait()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getAppIcons()Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getAppIcons()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getBiometricTimeout()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getCachePremium()Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getCachePremium()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getColors()Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getColors()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getConcealFields()Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getConcealFields()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getDebugPremium()Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getDebugPremium()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getDebugScreenDelay()Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getDebugScreenDelay()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getFont()Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getFont()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getNavAnimation()Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getNavAnimation()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getNavLabel()Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getNavLabel()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getTheme()Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getTheme()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getThemeUseAmoledDark()Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getThemeUseAmoledDark()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getUseExternalBrowser()Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getUseExternalBrowser()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getVaultPersist()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getVaultScreenLock()Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getVaultScreenLock()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getWebsiteIcons()Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getWebsiteIcons()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getWriteAccess()Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->getWriteAccess()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl;->setCachePremium(Z)Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$Companion; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$Companion;->()V +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$onboardingLastVisitInstantPref$1; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$onboardingLastVisitInstantPref$1;->()V +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$onboardingLastVisitInstantPref$1;->()V +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$onboardingLastVisitInstantPref$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$onboardingLastVisitInstantPref$1;->invoke(Lkotlinx/datetime/Instant;)Ljava/lang/String; +Lcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$onboardingLastVisitInstantPref$2; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$onboardingLastVisitInstantPref$2;->()V +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$onboardingLastVisitInstantPref$2;->()V +Lcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$1; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$1;->()V +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$1;->invoke(Ljava/lang/Enum;)Ljava/lang/String; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$2; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$2;->()V +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$2;->invoke(Ljava/lang/String;)Ljava/lang/Enum; +Lcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$3; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$3;->()V +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$3;->invoke(Ljava/lang/Enum;)Ljava/lang/String; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$4; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$4;->()V +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$4;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$4;->invoke(Ljava/lang/String;)Ljava/lang/Enum; +Lcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$5; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$5;->()V +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$5;->invoke(Ljava/lang/Enum;)Ljava/lang/String; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$5;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$6; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$6;->()V +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$6;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$6;->invoke(Ljava/lang/String;)Ljava/lang/Enum; +Lcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$7; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$7;->()V +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$7;->invoke(Ljava/lang/Enum;)Ljava/lang/String; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$7;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$8; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$8;->()V +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$8;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$getEnumNullable$8;->invoke(Ljava/lang/String;)Ljava/lang/Enum; +Lcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/common/service/similarity/SimilarityService; +Lcom/artemchep/keyguard/common/service/state/StateRepository; +Lcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImpl; +HSPLcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImpl;->()V +HSPLcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImpl;->(Lcom/artemchep/keyguard/common/service/keyvalue/KeyValueStore;Lkotlinx/serialization/json/Json;)V +HSPLcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImpl;->access$getJson$p(Lcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImpl;)Lkotlinx/serialization/json/Json; +HSPLcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImpl;->createOrGetPref(Ljava/lang/String;)Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference; +HSPLcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImpl;->createPref(Ljava/lang/String;)Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference; +HSPLcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImpl;->get(Ljava/lang/String;)Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImpl;->put(Ljava/lang/String;Ljava/util/Map;)Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImpl$createPref$1; +HSPLcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImpl$createPref$1;->(Lcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImpl;)V +HSPLcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImpl$createPref$1;->invoke(Lcom/artemchep/keyguard/common/model/AnyMap;)Ljava/lang/String; +HSPLcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImpl$createPref$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImpl$createPref$2; +HSPLcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImpl$createPref$2;->(Lcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImpl;)V +HSPLcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImpl$createPref$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImpl$createPref$2;->invoke(Ljava/lang/String;)Lcom/artemchep/keyguard/common/model/AnyMap; +Lcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImpl$get$$inlined$map$1; +HSPLcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImpl$get$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImpl$get$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImpl$get$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImpl$get$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImpl$get$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImpl$get$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImpl$get$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImpl$get$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImplKt; +HSPLcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImplKt;->getExtractedContent(Lkotlinx/serialization/json/JsonElement;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImplKt;->toJson(Ljava/lang/Object;)Lkotlinx/serialization/json/JsonElement; +HSPLcom/artemchep/keyguard/common/service/state/impl/StateRepositoryImplKt;->toMap(Lkotlinx/serialization/json/JsonObject;)Ljava/util/Map; +Lcom/artemchep/keyguard/common/service/subscription/SubscriptionService; +Lcom/artemchep/keyguard/common/service/text/Base32Service; +Lcom/artemchep/keyguard/common/service/text/Base64Service; +Lcom/artemchep/keyguard/common/service/text/Base64Service$DefaultImpls; +HSPLcom/artemchep/keyguard/common/service/text/Base64Service$DefaultImpls;->decode(Lcom/artemchep/keyguard/common/service/text/Base64Service;Ljava/lang/String;)[B +Lcom/artemchep/keyguard/common/service/text/TextService; +Lcom/artemchep/keyguard/common/service/tld/TldService; +Lcom/artemchep/keyguard/common/service/tld/impl/TldServiceImpl; +HSPLcom/artemchep/keyguard/common/service/tld/impl/TldServiceImpl;->()V +HSPLcom/artemchep/keyguard/common/service/tld/impl/TldServiceImpl;->(Lcom/artemchep/keyguard/common/service/text/TextService;Lcom/artemchep/keyguard/common/service/logging/LogRepository;)V +HSPLcom/artemchep/keyguard/common/service/tld/impl/TldServiceImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/common/service/tld/impl/TldServiceImpl$Companion; +HSPLcom/artemchep/keyguard/common/service/tld/impl/TldServiceImpl$Companion;->()V +HSPLcom/artemchep/keyguard/common/service/tld/impl/TldServiceImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/common/service/tld/impl/TldServiceImpl$dataIo$1; +HSPLcom/artemchep/keyguard/common/service/tld/impl/TldServiceImpl$dataIo$1;->()V +HSPLcom/artemchep/keyguard/common/service/tld/impl/TldServiceImpl$dataIo$1;->()V +Lcom/artemchep/keyguard/common/service/tld/impl/TldServiceImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/service/tld/impl/TldServiceImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/service/tld/impl/TldServiceImpl$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/common/service/tld/impl/TldServiceImpl$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/common/service/tld/impl/TldServiceImpl$special$$inlined$measure$1; +HSPLcom/artemchep/keyguard/common/service/tld/impl/TldServiceImpl$special$$inlined$measure$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/common/service/tld/impl/TldServiceImpl;)V +Lcom/artemchep/keyguard/common/service/tld/impl/TldServiceImplKt; +Lcom/artemchep/keyguard/common/service/totp/TotpService; +Lcom/artemchep/keyguard/common/service/totp/impl/TotpServiceImpl; +HSPLcom/artemchep/keyguard/common/service/totp/impl/TotpServiceImpl;->()V +HSPLcom/artemchep/keyguard/common/service/totp/impl/TotpServiceImpl;->(Lcom/artemchep/keyguard/common/service/text/Base32Service;Lcom/artemchep/keyguard/common/service/crypto/CryptoGenerator;)V +HSPLcom/artemchep/keyguard/common/service/totp/impl/TotpServiceImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/common/service/totp/impl/TotpServiceImpl$Companion; +HSPLcom/artemchep/keyguard/common/service/totp/impl/TotpServiceImpl$Companion;->()V +HSPLcom/artemchep/keyguard/common/service/totp/impl/TotpServiceImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/common/service/totp/impl/TotpServiceImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/service/totp/impl/TotpServiceImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/service/totp/impl/TotpServiceImpl$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/common/service/totp/impl/TotpServiceImpl$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/common/service/twofa/TwoFaService; +Lcom/artemchep/keyguard/common/service/vault/FingerprintReadRepository; +Lcom/artemchep/keyguard/common/service/vault/FingerprintReadWriteRepository; +Lcom/artemchep/keyguard/common/service/vault/KeyReadRepository; +Lcom/artemchep/keyguard/common/service/vault/KeyReadWriteRepository; +Lcom/artemchep/keyguard/common/service/vault/SessionMetadataReadRepository; +Lcom/artemchep/keyguard/common/service/vault/SessionMetadataReadWriteRepository; +Lcom/artemchep/keyguard/common/service/vault/SessionReadRepository; +Lcom/artemchep/keyguard/common/service/vault/SessionReadWriteRepository; +Lcom/artemchep/keyguard/common/service/vault/impl/FingerprintRepositoryImpl; +HSPLcom/artemchep/keyguard/common/service/vault/impl/FingerprintRepositoryImpl;->()V +HSPLcom/artemchep/keyguard/common/service/vault/impl/FingerprintRepositoryImpl;->(Lcom/artemchep/keyguard/common/service/keyvalue/KeyValueStore;Lcom/artemchep/keyguard/common/service/text/Base64Service;)V +HSPLcom/artemchep/keyguard/common/service/vault/impl/FingerprintRepositoryImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/service/vault/impl/FingerprintRepositoryImpl;->access$getBase64Service$p(Lcom/artemchep/keyguard/common/service/vault/impl/FingerprintRepositoryImpl;)Lcom/artemchep/keyguard/common/service/text/Base64Service; +HSPLcom/artemchep/keyguard/common/service/vault/impl/FingerprintRepositoryImpl;->get()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/common/service/vault/impl/FingerprintRepositoryImpl;->put(Lcom/artemchep/keyguard/common/model/Fingerprint;)Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/common/service/vault/impl/FingerprintRepositoryImpl$dataPref$1; +HSPLcom/artemchep/keyguard/common/service/vault/impl/FingerprintRepositoryImpl$dataPref$1;->(Lcom/artemchep/keyguard/common/service/vault/impl/FingerprintRepositoryImpl;)V +HSPLcom/artemchep/keyguard/common/service/vault/impl/FingerprintRepositoryImpl$dataPref$1;->invoke(Lcom/artemchep/keyguard/common/model/Fingerprint;)Ljava/lang/String; +HSPLcom/artemchep/keyguard/common/service/vault/impl/FingerprintRepositoryImpl$dataPref$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/service/vault/impl/FingerprintRepositoryImpl$dataPref$1$2; +HSPLcom/artemchep/keyguard/common/service/vault/impl/FingerprintRepositoryImpl$dataPref$1$2;->()V +HSPLcom/artemchep/keyguard/common/service/vault/impl/FingerprintRepositoryImpl$dataPref$1$2;->()V +HSPLcom/artemchep/keyguard/common/service/vault/impl/FingerprintRepositoryImpl$dataPref$1$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/service/vault/impl/FingerprintRepositoryImpl$dataPref$1$2;->invoke([B)Ljava/lang/CharSequence; +Lcom/artemchep/keyguard/common/service/vault/impl/FingerprintRepositoryImpl$dataPref$2; +HSPLcom/artemchep/keyguard/common/service/vault/impl/FingerprintRepositoryImpl$dataPref$2;->(Lcom/artemchep/keyguard/common/service/vault/impl/FingerprintRepositoryImpl;)V +HSPLcom/artemchep/keyguard/common/service/vault/impl/FingerprintRepositoryImpl$dataPref$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/service/vault/impl/FingerprintRepositoryImpl$dataPref$2;->invoke(Ljava/lang/String;)Lcom/artemchep/keyguard/common/model/Fingerprint; +Lcom/artemchep/keyguard/common/service/vault/impl/FingerprintRepositoryImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/service/vault/impl/FingerprintRepositoryImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/service/vault/impl/FingerprintRepositoryImpl$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/common/service/vault/impl/FingerprintRepositoryImpl$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/common/service/vault/impl/FingerprintRepositoryImpl$special$$inlined$instance$default$3; +HSPLcom/artemchep/keyguard/common/service/vault/impl/FingerprintRepositoryImpl$special$$inlined$instance$default$3;->()V +Lcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl; +HSPLcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl;->()V +HSPLcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl;->(Lcom/artemchep/keyguard/common/service/keyvalue/KeyValueStore;Lkotlinx/serialization/json/Json;Lcom/artemchep/keyguard/common/service/text/Base64Service;)V +HSPLcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl;->access$getDataPref$p(Lcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl;)Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference; +HSPLcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl;->get()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl;->put(Lcom/artemchep/keyguard/common/model/PersistedSession;)Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl$dataPref$1; +HSPLcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl$dataPref$1;->(Lcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl;)V +HSPLcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl$dataPref$1;->invoke(Lcom/artemchep/keyguard/common/service/vault/impl/PersistedSessionEntity;)Ljava/lang/String; +HSPLcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl$dataPref$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl$dataPref$2; +HSPLcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl$dataPref$2;->(Lcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl;)V +HSPLcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl$dataPref$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl$dataPref$2;->invoke(Ljava/lang/String;)Lcom/artemchep/keyguard/common/service/vault/impl/PersistedSessionEntity; +Lcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl$get$$inlined$map$1; +HSPLcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl$get$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl;)V +HSPLcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl$get$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl$get$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl$get$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl;)V +HSPLcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl$get$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl$get$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl$get$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl$get$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl$put$$inlined$ioEffect$1; +HSPLcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl$put$$inlined$ioEffect$1;->(Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/common/model/PersistedSession;Lcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl;)V +HSPLcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl$put$$inlined$ioEffect$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl$put$$inlined$ioEffect$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl$put$$inlined$ioEffect$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl$put$$inlined$ioEffect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl$special$$inlined$instance$default$3; +HSPLcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl$special$$inlined$instance$default$3;->()V +Lcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl$special$$inlined$instance$default$4; +HSPLcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl$special$$inlined$instance$default$4;->()V +Lcom/artemchep/keyguard/common/service/vault/impl/PersistedSessionEntity; +Lcom/artemchep/keyguard/common/service/vault/impl/SessionMetadataRepositoryImpl; +HSPLcom/artemchep/keyguard/common/service/vault/impl/SessionMetadataRepositoryImpl;->()V +HSPLcom/artemchep/keyguard/common/service/vault/impl/SessionMetadataRepositoryImpl;->(Lcom/artemchep/keyguard/common/service/keyvalue/KeyValueStore;)V +HSPLcom/artemchep/keyguard/common/service/vault/impl/SessionMetadataRepositoryImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/service/vault/impl/SessionMetadataRepositoryImpl;->setAndCommit(Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference;Lkotlinx/datetime/Instant;)Lkotlin/jvm/functions/Function1; +HSPLcom/artemchep/keyguard/common/service/vault/impl/SessionMetadataRepositoryImpl;->setLastPasswordUseTimestamp(Lkotlinx/datetime/Instant;)Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/common/service/vault/impl/SessionMetadataRepositoryImpl$Companion; +HSPLcom/artemchep/keyguard/common/service/vault/impl/SessionMetadataRepositoryImpl$Companion;->()V +HSPLcom/artemchep/keyguard/common/service/vault/impl/SessionMetadataRepositoryImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/common/service/vault/impl/SessionMetadataRepositoryImpl$setAndCommit$$inlined$flatMap$1; +HSPLcom/artemchep/keyguard/common/service/vault/impl/SessionMetadataRepositoryImpl$setAndCommit$$inlined$flatMap$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference;)V +HSPLcom/artemchep/keyguard/common/service/vault/impl/SessionMetadataRepositoryImpl$setAndCommit$$inlined$flatMap$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/service/vault/impl/SessionMetadataRepositoryImpl$setAndCommit$$inlined$flatMap$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/service/vault/impl/SessionMetadataRepositoryImpl$setAndCommit$$inlined$flatMap$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/service/vault/impl/SessionMetadataRepositoryImpl$setAndCommit$$inlined$flatMap$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/service/vault/impl/SessionMetadataRepositoryImpl$setAndCommit$$inlined$map$1; +HSPLcom/artemchep/keyguard/common/service/vault/impl/SessionMetadataRepositoryImpl$setAndCommit$$inlined$map$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/service/vault/impl/SessionMetadataRepositoryImpl$setAndCommit$$inlined$map$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/service/vault/impl/SessionMetadataRepositoryImpl$setAndCommit$$inlined$map$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/service/vault/impl/SessionMetadataRepositoryImpl$setAndCommit$$inlined$map$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/service/vault/impl/SessionMetadataRepositoryImpl$setAndCommit$$inlined$map$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/service/vault/impl/SessionMetadataRepositoryImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/service/vault/impl/SessionMetadataRepositoryImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/service/vault/impl/SessionMetadataRepositoryImpl$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/common/service/vault/impl/SessionMetadataRepositoryImpl$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/common/service/vault/impl/SessionRepositoryImpl; +HSPLcom/artemchep/keyguard/common/service/vault/impl/SessionRepositoryImpl;->()V +HSPLcom/artemchep/keyguard/common/service/vault/impl/SessionRepositoryImpl;->()V +HSPLcom/artemchep/keyguard/common/service/vault/impl/SessionRepositoryImpl;->get()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/common/service/vault/impl/SessionRepositoryImpl;->put(Lcom/artemchep/keyguard/common/model/MasterSession;)V +Lcom/artemchep/keyguard/common/service/wordlist/WordlistService; +Lcom/artemchep/keyguard/common/service/wordlist/impl/WordlistServiceImpl; +HSPLcom/artemchep/keyguard/common/service/wordlist/impl/WordlistServiceImpl;->()V +HSPLcom/artemchep/keyguard/common/service/wordlist/impl/WordlistServiceImpl;->(Lcom/artemchep/keyguard/common/service/text/TextService;)V +HSPLcom/artemchep/keyguard/common/service/wordlist/impl/WordlistServiceImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/common/service/wordlist/impl/WordlistServiceImpl$special$$inlined$handleErrorTap$default$1; +HSPLcom/artemchep/keyguard/common/service/wordlist/impl/WordlistServiceImpl$special$$inlined$handleErrorTap$default$1;->(Lkotlin/coroutines/Continuation;Lkotlin/jvm/functions/Function1;)V +Lcom/artemchep/keyguard/common/service/wordlist/impl/WordlistServiceImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/service/wordlist/impl/WordlistServiceImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/service/wordlist/impl/WordlistServiceImpl$wordListIo$1; +HSPLcom/artemchep/keyguard/common/service/wordlist/impl/WordlistServiceImpl$wordListIo$1;->()V +HSPLcom/artemchep/keyguard/common/service/wordlist/impl/WordlistServiceImpl$wordListIo$1;->()V +Lcom/artemchep/keyguard/common/service/wordlist/impl/WordlistServiceImplKt; +Lcom/artemchep/keyguard/common/usecase/AddCipher; +Lcom/artemchep/keyguard/common/usecase/AddCipherOpenedHistory; +Lcom/artemchep/keyguard/common/usecase/AddCipherUsedAutofillHistory; +Lcom/artemchep/keyguard/common/usecase/AddCipherUsedPasskeyHistory; +Lcom/artemchep/keyguard/common/usecase/AddEmailRelay; +Lcom/artemchep/keyguard/common/usecase/AddFolder; +Lcom/artemchep/keyguard/common/usecase/AddGeneratorHistory; +Lcom/artemchep/keyguard/common/usecase/AddPasskeyCipher; +Lcom/artemchep/keyguard/common/usecase/AddUriCipher; +Lcom/artemchep/keyguard/common/usecase/AuthConfirmMasterKeyUseCase; +Lcom/artemchep/keyguard/common/usecase/AuthGenerateMasterKeyUseCase; +Lcom/artemchep/keyguard/common/usecase/BiometricKeyDecryptUseCase; +Lcom/artemchep/keyguard/common/usecase/BiometricKeyEncryptUseCase; +Lcom/artemchep/keyguard/common/usecase/BiometricStatusUseCase; +Lcom/artemchep/keyguard/common/usecase/ChangeCipherNameById; +Lcom/artemchep/keyguard/common/usecase/ChangeCipherPasswordById; +Lcom/artemchep/keyguard/common/usecase/CheckPasswordLeak; +Lcom/artemchep/keyguard/common/usecase/CheckPasswordSetLeak; +Lcom/artemchep/keyguard/common/usecase/CheckUsernameLeak; +Lcom/artemchep/keyguard/common/usecase/CipherBreachCheck; +Lcom/artemchep/keyguard/common/usecase/CipherDuplicatesCheck; +Lcom/artemchep/keyguard/common/usecase/CipherDuplicatesCheck$Sensitivity; +Lcom/artemchep/keyguard/common/usecase/CipherExpiringCheck; +Lcom/artemchep/keyguard/common/usecase/CipherFieldSwitchToggle; +Lcom/artemchep/keyguard/common/usecase/CipherIncompleteCheck; +Lcom/artemchep/keyguard/common/usecase/CipherMerge; +Lcom/artemchep/keyguard/common/usecase/CipherRemovePasswordHistory; +Lcom/artemchep/keyguard/common/usecase/CipherRemovePasswordHistoryById; +Lcom/artemchep/keyguard/common/usecase/CipherToolbox; +Lcom/artemchep/keyguard/common/usecase/CipherToolboxImpl; +HSPLcom/artemchep/keyguard/common/usecase/CipherToolboxImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/CipherToolboxImpl;->(Lcom/artemchep/keyguard/common/usecase/FavouriteCipherById;Lcom/artemchep/keyguard/common/usecase/RePromptCipherById;Lcom/artemchep/keyguard/common/usecase/ChangeCipherNameById;Lcom/artemchep/keyguard/common/usecase/ChangeCipherPasswordById;Lcom/artemchep/keyguard/common/usecase/CopyCipherById;Lcom/artemchep/keyguard/common/usecase/MoveCipherToFolderById;Lcom/artemchep/keyguard/common/usecase/RestoreCipherById;Lcom/artemchep/keyguard/common/usecase/TrashCipherById;Lcom/artemchep/keyguard/common/usecase/RemoveCipherById;Lcom/artemchep/keyguard/common/usecase/CipherMerge;)V +HSPLcom/artemchep/keyguard/common/usecase/CipherToolboxImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/common/usecase/CipherToolboxImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/CipherToolboxImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/CipherToolboxImpl$special$$inlined$instance$default$10; +HSPLcom/artemchep/keyguard/common/usecase/CipherToolboxImpl$special$$inlined$instance$default$10;->()V +Lcom/artemchep/keyguard/common/usecase/CipherToolboxImpl$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/common/usecase/CipherToolboxImpl$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/common/usecase/CipherToolboxImpl$special$$inlined$instance$default$3; +HSPLcom/artemchep/keyguard/common/usecase/CipherToolboxImpl$special$$inlined$instance$default$3;->()V +Lcom/artemchep/keyguard/common/usecase/CipherToolboxImpl$special$$inlined$instance$default$4; +HSPLcom/artemchep/keyguard/common/usecase/CipherToolboxImpl$special$$inlined$instance$default$4;->()V +Lcom/artemchep/keyguard/common/usecase/CipherToolboxImpl$special$$inlined$instance$default$5; +HSPLcom/artemchep/keyguard/common/usecase/CipherToolboxImpl$special$$inlined$instance$default$5;->()V +Lcom/artemchep/keyguard/common/usecase/CipherToolboxImpl$special$$inlined$instance$default$6; +HSPLcom/artemchep/keyguard/common/usecase/CipherToolboxImpl$special$$inlined$instance$default$6;->()V +Lcom/artemchep/keyguard/common/usecase/CipherToolboxImpl$special$$inlined$instance$default$7; +HSPLcom/artemchep/keyguard/common/usecase/CipherToolboxImpl$special$$inlined$instance$default$7;->()V +Lcom/artemchep/keyguard/common/usecase/CipherToolboxImpl$special$$inlined$instance$default$8; +HSPLcom/artemchep/keyguard/common/usecase/CipherToolboxImpl$special$$inlined$instance$default$8;->()V +Lcom/artemchep/keyguard/common/usecase/CipherToolboxImpl$special$$inlined$instance$default$9; +HSPLcom/artemchep/keyguard/common/usecase/CipherToolboxImpl$special$$inlined$instance$default$9;->()V +Lcom/artemchep/keyguard/common/usecase/CipherUnsecureUrlAutoFix; +Lcom/artemchep/keyguard/common/usecase/CipherUnsecureUrlCheck; +Lcom/artemchep/keyguard/common/usecase/CipherUrlCheck; +Lcom/artemchep/keyguard/common/usecase/CipherUrlDuplicateCheck; +Lcom/artemchep/keyguard/common/usecase/CleanUpAttachment; +Lcom/artemchep/keyguard/common/usecase/ClearData; +Lcom/artemchep/keyguard/common/usecase/ClearVaultSession; +Lcom/artemchep/keyguard/common/usecase/ConfirmAccessByPasswordUseCase; +Lcom/artemchep/keyguard/common/usecase/CopyCipherById; +Lcom/artemchep/keyguard/common/usecase/CopyText; +HSPLcom/artemchep/keyguard/common/usecase/CopyText;->()V +HSPLcom/artemchep/keyguard/common/usecase/CopyText;->(Lcom/artemchep/keyguard/common/service/clipboard/ClipboardService;Lkotlin/jvm/functions/Function1;)V +Lcom/artemchep/keyguard/common/usecase/DateFormatter; +Lcom/artemchep/keyguard/common/usecase/DeviceEncryptionKeyUseCase; +HSPLcom/artemchep/keyguard/common/usecase/DeviceEncryptionKeyUseCase;->()V +HSPLcom/artemchep/keyguard/common/usecase/DeviceEncryptionKeyUseCase;->(Lcom/artemchep/keyguard/common/service/crypto/CryptoGenerator;Lcom/artemchep/keyguard/common/usecase/DeviceIdUseCase;)V +HSPLcom/artemchep/keyguard/common/usecase/DeviceEncryptionKeyUseCase;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/DeviceEncryptionKeyUseCase;->access$getCryptoGenerator$p(Lcom/artemchep/keyguard/common/usecase/DeviceEncryptionKeyUseCase;)Lcom/artemchep/keyguard/common/service/crypto/CryptoGenerator; +HSPLcom/artemchep/keyguard/common/usecase/DeviceEncryptionKeyUseCase;->invoke()Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/common/usecase/DeviceEncryptionKeyUseCase$invoke$$inlined$effectMap$1; +HSPLcom/artemchep/keyguard/common/usecase/DeviceEncryptionKeyUseCase$invoke$$inlined$effectMap$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/common/usecase/DeviceEncryptionKeyUseCase;)V +HSPLcom/artemchep/keyguard/common/usecase/DeviceEncryptionKeyUseCase$invoke$$inlined$effectMap$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/usecase/DeviceEncryptionKeyUseCase$invoke$$inlined$effectMap$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/DeviceEncryptionKeyUseCase$invoke$$inlined$effectMap$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/DeviceEncryptionKeyUseCase$invoke$$inlined$effectMap$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/DeviceEncryptionKeyUseCase$invoke$$inlined$effectMap$1$1; +HSPLcom/artemchep/keyguard/common/usecase/DeviceEncryptionKeyUseCase$invoke$$inlined$effectMap$1$1;->(Ljava/lang/Object;Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/common/usecase/DeviceEncryptionKeyUseCase;)V +HSPLcom/artemchep/keyguard/common/usecase/DeviceEncryptionKeyUseCase$invoke$$inlined$effectMap$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/usecase/DeviceEncryptionKeyUseCase$invoke$$inlined$effectMap$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/DeviceEncryptionKeyUseCase$invoke$$inlined$effectMap$1$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/DeviceEncryptionKeyUseCase$invoke$$inlined$effectMap$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/DeviceEncryptionKeyUseCase$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/DeviceEncryptionKeyUseCase$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/DeviceEncryptionKeyUseCase$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/common/usecase/DeviceEncryptionKeyUseCase$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/common/usecase/DeviceIdUseCase; +HSPLcom/artemchep/keyguard/common/usecase/DeviceIdUseCase;->()V +HSPLcom/artemchep/keyguard/common/usecase/DeviceIdUseCase;->(Lcom/artemchep/keyguard/common/service/id/IdRepository;)V +HSPLcom/artemchep/keyguard/common/usecase/DeviceIdUseCase;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/DeviceIdUseCase;->access$getDeviceId$p(Lcom/artemchep/keyguard/common/usecase/DeviceIdUseCase;)Ljava/lang/String; +HSPLcom/artemchep/keyguard/common/usecase/DeviceIdUseCase;->access$getDeviceIdRepository$p(Lcom/artemchep/keyguard/common/usecase/DeviceIdUseCase;)Lcom/artemchep/keyguard/common/service/id/IdRepository; +HSPLcom/artemchep/keyguard/common/usecase/DeviceIdUseCase;->access$setDeviceId$p(Lcom/artemchep/keyguard/common/usecase/DeviceIdUseCase;Ljava/lang/String;)V +HSPLcom/artemchep/keyguard/common/usecase/DeviceIdUseCase;->getOrSet()Lkotlin/jvm/functions/Function1; +HSPLcom/artemchep/keyguard/common/usecase/DeviceIdUseCase;->invoke()Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/common/usecase/DeviceIdUseCase$getOrSet$$inlined$flatMap$1; +HSPLcom/artemchep/keyguard/common/usecase/DeviceIdUseCase$getOrSet$$inlined$flatMap$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/common/usecase/DeviceIdUseCase;)V +HSPLcom/artemchep/keyguard/common/usecase/DeviceIdUseCase$getOrSet$$inlined$flatMap$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/usecase/DeviceIdUseCase$getOrSet$$inlined$flatMap$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/DeviceIdUseCase$getOrSet$$inlined$flatMap$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/DeviceIdUseCase$getOrSet$$inlined$flatMap$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/DeviceIdUseCase$getOrSet$1$inMemoryId$1$3; +HSPLcom/artemchep/keyguard/common/usecase/DeviceIdUseCase$getOrSet$1$inMemoryId$1$3;->(Ljava/lang/Object;)V +HSPLcom/artemchep/keyguard/common/usecase/DeviceIdUseCase$getOrSet$1$inMemoryId$1$3;->set(Ljava/lang/Object;)V +Lcom/artemchep/keyguard/common/usecase/DeviceIdUseCase$getOrSet$lambda$5$lambda$4$$inlined$flatTap$1; +HSPLcom/artemchep/keyguard/common/usecase/DeviceIdUseCase$getOrSet$lambda$5$lambda$4$$inlined$flatTap$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/common/service/id/IdRepository;)V +HSPLcom/artemchep/keyguard/common/usecase/DeviceIdUseCase$getOrSet$lambda$5$lambda$4$$inlined$flatTap$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/usecase/DeviceIdUseCase$getOrSet$lambda$5$lambda$4$$inlined$flatTap$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/DeviceIdUseCase$getOrSet$lambda$5$lambda$4$$inlined$flatTap$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/DeviceIdUseCase$getOrSet$lambda$5$lambda$4$$inlined$flatTap$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/DeviceIdUseCase$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/DeviceIdUseCase$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/DeviceIdUseCaseKt; +HSPLcom/artemchep/keyguard/common/usecase/DeviceIdUseCaseKt;->access$getDeviceId()Ljava/lang/String; +HSPLcom/artemchep/keyguard/common/usecase/DeviceIdUseCaseKt;->getDeviceId()Ljava/lang/String; +Lcom/artemchep/keyguard/common/usecase/DisableBiometric; +Lcom/artemchep/keyguard/common/usecase/DownloadAttachment; +Lcom/artemchep/keyguard/common/usecase/EnableBiometric; +Lcom/artemchep/keyguard/common/usecase/FavouriteCipherById; +Lcom/artemchep/keyguard/common/usecase/GenerateMasterHashUseCase; +Lcom/artemchep/keyguard/common/usecase/GenerateMasterKeyUseCase; +Lcom/artemchep/keyguard/common/usecase/GenerateMasterSaltUseCase; +Lcom/artemchep/keyguard/common/usecase/GetAccountHasError; +Lcom/artemchep/keyguard/common/usecase/GetAccountStatus; +Lcom/artemchep/keyguard/common/usecase/GetAccounts; +Lcom/artemchep/keyguard/common/usecase/GetAccountsHasError; +Lcom/artemchep/keyguard/common/usecase/GetAllowScreenshots; +Lcom/artemchep/keyguard/common/usecase/GetAllowTwoPanelLayoutInLandscape; +Lcom/artemchep/keyguard/common/usecase/GetAllowTwoPanelLayoutInPortrait; +Lcom/artemchep/keyguard/common/usecase/GetAppBuildDate; +Lcom/artemchep/keyguard/common/usecase/GetAppBuildType; +Lcom/artemchep/keyguard/common/usecase/GetAppIcons; +Lcom/artemchep/keyguard/common/usecase/GetAppVersion; +Lcom/artemchep/keyguard/common/usecase/GetAppVersionCode; +Lcom/artemchep/keyguard/common/usecase/GetAppVersionName; +Lcom/artemchep/keyguard/common/usecase/GetAutofillCopyTotp; +Lcom/artemchep/keyguard/common/usecase/GetAutofillInlineSuggestions; +Lcom/artemchep/keyguard/common/usecase/GetAutofillManualSelection; +Lcom/artemchep/keyguard/common/usecase/GetAutofillRespectAutofillOff; +Lcom/artemchep/keyguard/common/usecase/GetAutofillSaveRequest; +Lcom/artemchep/keyguard/common/usecase/GetAutofillSaveUri; +Lcom/artemchep/keyguard/common/usecase/GetBarcodeImage; +Lcom/artemchep/keyguard/common/usecase/GetBiometricRemainingDuration; +Lcom/artemchep/keyguard/common/usecase/GetBiometricTimeout; +Lcom/artemchep/keyguard/common/usecase/GetBiometricTimeoutVariants; +Lcom/artemchep/keyguard/common/usecase/GetCachePremium; +Lcom/artemchep/keyguard/common/usecase/GetCanAddAccount; +Lcom/artemchep/keyguard/common/usecase/GetCanWrite; +Lcom/artemchep/keyguard/common/usecase/GetCheckPwnedPasswords; +Lcom/artemchep/keyguard/common/usecase/GetCheckPwnedServices; +Lcom/artemchep/keyguard/common/usecase/GetCheckTwoFA; +Lcom/artemchep/keyguard/common/usecase/GetCipherOpenedCount; +Lcom/artemchep/keyguard/common/usecase/GetCipherOpenedHistory; +Lcom/artemchep/keyguard/common/usecase/GetCiphers; +Lcom/artemchep/keyguard/common/usecase/GetClipboardAutoClear; +Lcom/artemchep/keyguard/common/usecase/GetClipboardAutoClearVariants; +Lcom/artemchep/keyguard/common/usecase/GetClipboardAutoRefresh; +Lcom/artemchep/keyguard/common/usecase/GetClipboardAutoRefreshVariants; +Lcom/artemchep/keyguard/common/usecase/GetCollections; +Lcom/artemchep/keyguard/common/usecase/GetColors; +Lcom/artemchep/keyguard/common/usecase/GetColorsVariants; +Lcom/artemchep/keyguard/common/usecase/GetConcealFields; +Lcom/artemchep/keyguard/common/usecase/GetDebugPremium; +Lcom/artemchep/keyguard/common/usecase/GetDebugScreenDelay; +Lcom/artemchep/keyguard/common/usecase/GetEmailRelays; +Lcom/artemchep/keyguard/common/usecase/GetEnvSendUrl; +Lcom/artemchep/keyguard/common/usecase/GetFingerprint; +Lcom/artemchep/keyguard/common/usecase/GetFolderTree; +Lcom/artemchep/keyguard/common/usecase/GetFolderTreeById; +Lcom/artemchep/keyguard/common/usecase/GetFolders; +Lcom/artemchep/keyguard/common/usecase/GetFont; +Lcom/artemchep/keyguard/common/usecase/GetFontVariants; +Lcom/artemchep/keyguard/common/usecase/GetGeneratorHistory; +Lcom/artemchep/keyguard/common/usecase/GetGravatarUrl; +Lcom/artemchep/keyguard/common/usecase/GetJustDeleteMeByUrl; +Lcom/artemchep/keyguard/common/usecase/GetKeepScreenOn; +Lcom/artemchep/keyguard/common/usecase/GetLocale; +Lcom/artemchep/keyguard/common/usecase/GetLocaleVariants; +Lcom/artemchep/keyguard/common/usecase/GetMarkdown; +Lcom/artemchep/keyguard/common/usecase/GetMetas; +Lcom/artemchep/keyguard/common/usecase/GetNavAnimation; +Lcom/artemchep/keyguard/common/usecase/GetNavAnimationVariants; +Lcom/artemchep/keyguard/common/usecase/GetNavLabel; +Lcom/artemchep/keyguard/common/usecase/GetOnboardingLastVisitInstant; +Lcom/artemchep/keyguard/common/usecase/GetOrganizations; +Lcom/artemchep/keyguard/common/usecase/GetPassphrase; +Lcom/artemchep/keyguard/common/usecase/GetPassword; +Lcom/artemchep/keyguard/common/usecase/GetPasswordStrength; +Lcom/artemchep/keyguard/common/usecase/GetProducts; +Lcom/artemchep/keyguard/common/usecase/GetProfiles; +Lcom/artemchep/keyguard/common/usecase/GetPurchased; +Lcom/artemchep/keyguard/common/usecase/GetScreenState; +Lcom/artemchep/keyguard/common/usecase/GetSends; +Lcom/artemchep/keyguard/common/usecase/GetShouldRequestAppReview; +Lcom/artemchep/keyguard/common/usecase/GetSubscriptions; +Lcom/artemchep/keyguard/common/usecase/GetSuggestions; +Lcom/artemchep/keyguard/common/usecase/GetTheme; +Lcom/artemchep/keyguard/common/usecase/GetThemeUseAmoledDark; +Lcom/artemchep/keyguard/common/usecase/GetThemeVariants; +Lcom/artemchep/keyguard/common/usecase/GetTotpCode; +Lcom/artemchep/keyguard/common/usecase/GetUseExternalBrowser; +Lcom/artemchep/keyguard/common/usecase/GetVaultLockAfterReboot; +Lcom/artemchep/keyguard/common/usecase/GetVaultLockAfterScreenOff; +Lcom/artemchep/keyguard/common/usecase/GetVaultLockAfterTimeout; +Lcom/artemchep/keyguard/common/usecase/GetVaultLockAfterTimeoutVariants; +Lcom/artemchep/keyguard/common/usecase/GetVaultPersist; +Lcom/artemchep/keyguard/common/usecase/GetVaultSession; +Lcom/artemchep/keyguard/common/usecase/GetWebsiteIcons; +Lcom/artemchep/keyguard/common/usecase/GetWriteAccess; +Lcom/artemchep/keyguard/common/usecase/MergeFolderById; +Lcom/artemchep/keyguard/common/usecase/MessageHub; +Lcom/artemchep/keyguard/common/usecase/MoveCipherToFolderById; +Lcom/artemchep/keyguard/common/usecase/NumberFormatter; +Lcom/artemchep/keyguard/common/usecase/PasskeyTarget; +Lcom/artemchep/keyguard/common/usecase/PasskeyTargetCheck; +Lcom/artemchep/keyguard/common/usecase/PutAccountColorById; +Lcom/artemchep/keyguard/common/usecase/PutAccountMasterPasswordHintById; +Lcom/artemchep/keyguard/common/usecase/PutAccountNameById; +Lcom/artemchep/keyguard/common/usecase/PutAllowScreenshots; +Lcom/artemchep/keyguard/common/usecase/PutAllowTwoPanelLayoutInLandscape; +Lcom/artemchep/keyguard/common/usecase/PutAllowTwoPanelLayoutInPortrait; +Lcom/artemchep/keyguard/common/usecase/PutAppIcons; +Lcom/artemchep/keyguard/common/usecase/PutAutofillCopyTotp; +Lcom/artemchep/keyguard/common/usecase/PutAutofillInlineSuggestions; +Lcom/artemchep/keyguard/common/usecase/PutAutofillManualSelection; +Lcom/artemchep/keyguard/common/usecase/PutAutofillRespectAutofillOff; +Lcom/artemchep/keyguard/common/usecase/PutAutofillSaveRequest; +Lcom/artemchep/keyguard/common/usecase/PutAutofillSaveUri; +Lcom/artemchep/keyguard/common/usecase/PutBiometricTimeout; +Lcom/artemchep/keyguard/common/usecase/PutCachePremium; +Lcom/artemchep/keyguard/common/usecase/PutCheckPwnedPasswords; +Lcom/artemchep/keyguard/common/usecase/PutCheckPwnedServices; +Lcom/artemchep/keyguard/common/usecase/PutCheckTwoFA; +Lcom/artemchep/keyguard/common/usecase/PutClipboardAutoClear; +Lcom/artemchep/keyguard/common/usecase/PutClipboardAutoRefresh; +Lcom/artemchep/keyguard/common/usecase/PutColors; +Lcom/artemchep/keyguard/common/usecase/PutConcealFields; +Lcom/artemchep/keyguard/common/usecase/PutDebugPremium; +Lcom/artemchep/keyguard/common/usecase/PutDebugScreenDelay; +Lcom/artemchep/keyguard/common/usecase/PutFont; +Lcom/artemchep/keyguard/common/usecase/PutKeepScreenOn; +Lcom/artemchep/keyguard/common/usecase/PutLocale; +Lcom/artemchep/keyguard/common/usecase/PutMarkdown; +Lcom/artemchep/keyguard/common/usecase/PutNavAnimation; +Lcom/artemchep/keyguard/common/usecase/PutNavLabel; +Lcom/artemchep/keyguard/common/usecase/PutOnboardingLastVisitInstant; +Lcom/artemchep/keyguard/common/usecase/PutScreenState; +Lcom/artemchep/keyguard/common/usecase/PutTheme; +Lcom/artemchep/keyguard/common/usecase/PutThemeUseAmoledDark; +Lcom/artemchep/keyguard/common/usecase/PutUseExternalBrowser; +Lcom/artemchep/keyguard/common/usecase/PutVaultLockAfterReboot; +Lcom/artemchep/keyguard/common/usecase/PutVaultLockAfterScreenOff; +Lcom/artemchep/keyguard/common/usecase/PutVaultLockAfterTimeout; +Lcom/artemchep/keyguard/common/usecase/PutVaultPersist; +Lcom/artemchep/keyguard/common/usecase/PutVaultSession; +Lcom/artemchep/keyguard/common/usecase/PutWebsiteIcons; +Lcom/artemchep/keyguard/common/usecase/PutWriteAccess; +Lcom/artemchep/keyguard/common/usecase/QueueSyncAll; +Lcom/artemchep/keyguard/common/usecase/QueueSyncById; +Lcom/artemchep/keyguard/common/usecase/RePromptCipherById; +Lcom/artemchep/keyguard/common/usecase/RemoveAccountById; +Lcom/artemchep/keyguard/common/usecase/RemoveAccounts; +Lcom/artemchep/keyguard/common/usecase/RemoveAttachment; +Lcom/artemchep/keyguard/common/usecase/RemoveCipherById; +Lcom/artemchep/keyguard/common/usecase/RemoveEmailRelayById; +Lcom/artemchep/keyguard/common/usecase/RemoveFolderById; +Lcom/artemchep/keyguard/common/usecase/RemoveFolderById$OnCiphersConflict; +Lcom/artemchep/keyguard/common/usecase/RemoveGeneratorHistory; +Lcom/artemchep/keyguard/common/usecase/RemoveGeneratorHistoryById; +Lcom/artemchep/keyguard/common/usecase/RenameFolderById; +Lcom/artemchep/keyguard/common/usecase/RequestAppReview; +Lcom/artemchep/keyguard/common/usecase/RestoreCipherById; +Lcom/artemchep/keyguard/common/usecase/RetryCipher; +Lcom/artemchep/keyguard/common/usecase/RotateDeviceIdUseCase; +Lcom/artemchep/keyguard/common/usecase/ShowMessage; +Lcom/artemchep/keyguard/common/usecase/SupervisorRead; +Lcom/artemchep/keyguard/common/usecase/SyncAll; +Lcom/artemchep/keyguard/common/usecase/SyncById; +Lcom/artemchep/keyguard/common/usecase/TrashCipherByFolderId; +Lcom/artemchep/keyguard/common/usecase/TrashCipherById; +Lcom/artemchep/keyguard/common/usecase/UnlockUseCase; +Lcom/artemchep/keyguard/common/usecase/Watchdog; +Lcom/artemchep/keyguard/common/usecase/WatchdogImpl; +HSPLcom/artemchep/keyguard/common/usecase/WatchdogImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/WatchdogImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/WatchdogImpl;->get()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/common/usecase/WatchdogImpl;->get(Lcom/artemchep/keyguard/common/model/AccountTask;)Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/common/usecase/WatchdogImpl$get$$inlined$map$1; +HSPLcom/artemchep/keyguard/common/usecase/WatchdogImpl$get$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/common/usecase/WatchdogImpl;)V +HSPLcom/artemchep/keyguard/common/usecase/WatchdogImpl$get$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/WatchdogImpl$get$$inlined$map$1$2; +PLcom/artemchep/keyguard/common/usecase/WatchdogImpl$get$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lcom/artemchep/keyguard/common/usecase/WatchdogImpl;)V +HSPLcom/artemchep/keyguard/common/usecase/WatchdogImpl$get$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/WatchdogImpl$get$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/common/usecase/WatchdogImpl$get$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/common/usecase/WatchdogImpl$get$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/usecase/WatchdogImpl$get$$inlined$map$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/WatchdogImpl$get$$inlined$map$2; +HSPLcom/artemchep/keyguard/common/usecase/WatchdogImpl$get$$inlined$map$2;->(Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/common/model/AccountTask;)V +HSPLcom/artemchep/keyguard/common/usecase/WatchdogImpl$get$$inlined$map$2;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/WatchdogImpl$get$$inlined$map$2$2; +PLcom/artemchep/keyguard/common/usecase/WatchdogImpl$get$$inlined$map$2$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lcom/artemchep/keyguard/common/model/AccountTask;)V +HSPLcom/artemchep/keyguard/common/usecase/WatchdogImpl$get$$inlined$map$2$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/WatchdogImpl$get$$inlined$map$2$2$1; +HSPLcom/artemchep/keyguard/common/usecase/WatchdogImpl$get$$inlined$map$2$2$1;->(Lcom/artemchep/keyguard/common/usecase/WatchdogImpl$get$$inlined$map$2$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/usecase/WatchdogImpl$get$$inlined$map$2$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/WindowCoroutineScope; +Lcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl;->(Lcom/artemchep/keyguard/common/usecase/GenerateMasterHashUseCase;Lcom/artemchep/keyguard/common/usecase/GenerateMasterKeyUseCase;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl;->access$getGenerateMasterHashUseCase$p(Lcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl;)Lcom/artemchep/keyguard/common/usecase/GenerateMasterHashUseCase; +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl;->access$getGenerateMasterKeyUseCase$p(Lcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl;)Lcom/artemchep/keyguard/common/usecase/GenerateMasterKeyUseCase; +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl;->invoke(Lcom/artemchep/keyguard/common/model/MasterPasswordSalt;Lcom/artemchep/keyguard/common/model/MasterPasswordHash;)Lkotlin/jvm/functions/Function1; +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl$invoke$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl$invoke$1;->(Lcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl;Lcom/artemchep/keyguard/common/model/MasterPasswordSalt;Lcom/artemchep/keyguard/common/model/MasterPasswordHash;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl$invoke$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl$invoke$1;->invoke-A0jvUzs([B)Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl$invoke$1$invoke-A0jvUzs$$inlined$flatMap$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl$invoke$1$invoke-A0jvUzs$$inlined$flatMap$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/common/model/MasterPasswordHash;Lcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl;[B)V +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl$invoke$1$invoke-A0jvUzs$$inlined$flatMap$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl$invoke$1$invoke-A0jvUzs$$inlined$flatMap$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl$invoke$1$invoke-A0jvUzs$$inlined$flatMap$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl$invoke$1$invoke-A0jvUzs$$inlined$flatMap$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl$invoke$1$invoke-A0jvUzs$$inlined$map$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl$invoke$1$invoke-A0jvUzs$$inlined$map$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/common/model/MasterPasswordHash;Lcom/artemchep/keyguard/common/model/MasterPasswordSalt;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl$invoke$1$invoke-A0jvUzs$$inlined$map$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl$invoke$1$invoke-A0jvUzs$$inlined$map$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl$invoke$1$invoke-A0jvUzs$$inlined$map$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl$invoke$1$invoke-A0jvUzs$$inlined$map$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl;->(Lcom/artemchep/keyguard/common/usecase/GenerateMasterHashUseCase;Lcom/artemchep/keyguard/common/usecase/GenerateMasterKeyUseCase;Lcom/artemchep/keyguard/common/usecase/GenerateMasterSaltUseCase;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl;->access$getGenerateMasterHashUseCase$p(Lcom/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl;)Lcom/artemchep/keyguard/common/usecase/GenerateMasterHashUseCase; +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl;->access$getGenerateMasterKeyUseCase$p(Lcom/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl;)Lcom/artemchep/keyguard/common/usecase/GenerateMasterKeyUseCase; +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl;->access$getGenerateMasterSaltUseCase$p(Lcom/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl;)Lcom/artemchep/keyguard/common/usecase/GenerateMasterSaltUseCase; +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl;->invoke()Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl$invoke$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl$invoke$1;->(Lcom/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl$invoke$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl$invoke$1;->invoke-A0jvUzs([B)Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl$invoke$1$invoke-A0jvUzs$$inlined$effectMap$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl$invoke$1$invoke-A0jvUzs$$inlined$effectMap$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl;[B)V +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl$invoke$1$invoke-A0jvUzs$$inlined$effectMap$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl$invoke$1$invoke-A0jvUzs$$inlined$effectMap$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl$invoke$1$invoke-A0jvUzs$$inlined$effectMap$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl$invoke$1$invoke-A0jvUzs$$inlined$effectMap$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl$special$$inlined$instance$default$3; +HSPLcom/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl$special$$inlined$instance$default$3;->()V +Lcom/artemchep/keyguard/common/usecase/impl/BiometricKeyDecryptUseCaseImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/BiometricKeyDecryptUseCaseImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/BiometricKeyDecryptUseCaseImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/BiometricKeyDecryptUseCaseImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/common/usecase/impl/BiometricKeyEncryptUseCaseImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/BiometricKeyEncryptUseCaseImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/BiometricKeyEncryptUseCaseImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/BiometricKeyEncryptUseCaseImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/common/usecase/impl/CleanUpAttachmentImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/CleanUpAttachmentImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/CleanUpAttachmentImpl;->(Landroid/content/Context;Lcom/artemchep/keyguard/common/service/logging/LogRepository;Lcom/artemchep/keyguard/android/downloader/journal/DownloadRepository;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/CleanUpAttachmentImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/common/usecase/impl/CleanUpAttachmentImpl$Companion; +HSPLcom/artemchep/keyguard/common/usecase/impl/CleanUpAttachmentImpl$Companion;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/CleanUpAttachmentImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/CleanUpAttachmentImpl$Companion;->zzz(Lkotlinx/coroutines/CoroutineScope;Lcom/artemchep/keyguard/android/downloader/journal/DownloadRepository;Lcom/artemchep/keyguard/common/usecase/CleanUpAttachment;)Lkotlinx/coroutines/Job; +Lcom/artemchep/keyguard/common/usecase/impl/CleanUpAttachmentImpl$Companion$zzz$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/CleanUpAttachmentImpl$Companion$zzz$1;->(Lcom/artemchep/keyguard/android/downloader/journal/DownloadRepository;Lkotlinx/coroutines/CoroutineScope;Lcom/artemchep/keyguard/common/usecase/CleanUpAttachment;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/CleanUpAttachmentImpl$Companion$zzz$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/usecase/impl/CleanUpAttachmentImpl$Companion$zzz$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/CleanUpAttachmentImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/CleanUpAttachmentImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/CleanUpAttachmentImpl$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/common/usecase/impl/CleanUpAttachmentImpl$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/common/usecase/impl/CleanUpAttachmentImpl$special$$inlined$instance$default$3; +HSPLcom/artemchep/keyguard/common/usecase/impl/CleanUpAttachmentImpl$special$$inlined$instance$default$3;->()V +Lcom/artemchep/keyguard/common/usecase/impl/ClearVaultSessionImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/ClearVaultSessionImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/ClearVaultSessionImpl;->(Lcom/artemchep/keyguard/common/usecase/PutVaultSession;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/ClearVaultSessionImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/common/usecase/impl/ClearVaultSessionImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/ClearVaultSessionImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/DisableBiometricImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/DisableBiometricImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/DisableBiometricImpl;->(Lcom/artemchep/keyguard/common/service/vault/FingerprintReadWriteRepository;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/DisableBiometricImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/common/usecase/impl/DisableBiometricImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/DisableBiometricImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl;->(Lcom/artemchep/keyguard/common/service/crypto/CryptoGenerator;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl;->access$encode(Lcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl;[B[B)[B +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl;->encode([B[B)[B +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl;->invoke-NTeWIBM([BLcom/artemchep/keyguard/common/model/MasterPasswordSalt;)Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl$Companion; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl$Companion;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl$invoke-NTeWIBM$$inlined$ioEffect$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl$invoke-NTeWIBM$$inlined$ioEffect$1;->(Lkotlin/coroutines/Continuation;Lkotlin/coroutines/CoroutineContext;Lcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl;[BLcom/artemchep/keyguard/common/model/MasterPasswordSalt;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl$invoke-NTeWIBM$$inlined$ioEffect$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl$invoke-NTeWIBM$$inlined$ioEffect$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl$invoke-NTeWIBM$$inlined$ioEffect$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl$invoke-NTeWIBM$$inlined$ioEffect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl$invoke-NTeWIBM$$inlined$ioEffect$1$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl$invoke-NTeWIBM$$inlined$ioEffect$1$1;->(Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl;[BLcom/artemchep/keyguard/common/model/MasterPasswordSalt;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl$invoke-NTeWIBM$$inlined$ioEffect$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl$invoke-NTeWIBM$$inlined$ioEffect$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl$invoke-NTeWIBM$$inlined$ioEffect$1$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl$invoke-NTeWIBM$$inlined$ioEffect$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl$invoke-NTeWIBM$$inlined$map$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl$invoke-NTeWIBM$$inlined$map$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl$invoke-NTeWIBM$$inlined$map$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl$invoke-NTeWIBM$$inlined$map$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl$invoke-NTeWIBM$$inlined$map$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl$invoke-NTeWIBM$$inlined$map$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl;->(Lcom/artemchep/keyguard/common/service/crypto/CryptoGenerator;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl;->access$encode(Lcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl;[B[B)[B +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl;->encode([B[B)[B +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl;->invoke-NTeWIBM([BLcom/artemchep/keyguard/common/model/MasterPasswordHash;)Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl$Companion; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl$Companion;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl$invoke-NTeWIBM$$inlined$ioEffect$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl$invoke-NTeWIBM$$inlined$ioEffect$1;->(Lkotlin/coroutines/Continuation;Lkotlin/coroutines/CoroutineContext;Lcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl;[BLcom/artemchep/keyguard/common/model/MasterPasswordHash;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl$invoke-NTeWIBM$$inlined$ioEffect$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl$invoke-NTeWIBM$$inlined$ioEffect$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl$invoke-NTeWIBM$$inlined$ioEffect$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl$invoke-NTeWIBM$$inlined$ioEffect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl$invoke-NTeWIBM$$inlined$ioEffect$1$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl$invoke-NTeWIBM$$inlined$ioEffect$1$1;->(Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl;[BLcom/artemchep/keyguard/common/model/MasterPasswordHash;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl$invoke-NTeWIBM$$inlined$ioEffect$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl$invoke-NTeWIBM$$inlined$ioEffect$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl$invoke-NTeWIBM$$inlined$ioEffect$1$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl$invoke-NTeWIBM$$inlined$ioEffect$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl$invoke-NTeWIBM$$inlined$map$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl$invoke-NTeWIBM$$inlined$map$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl$invoke-NTeWIBM$$inlined$map$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl$invoke-NTeWIBM$$inlined$map$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl$invoke-NTeWIBM$$inlined$map$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl$invoke-NTeWIBM$$inlined$map$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl;->(Lcom/artemchep/keyguard/common/service/crypto/CryptoGenerator;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl;->access$getCryptoGenerator$p(Lcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl;)Lcom/artemchep/keyguard/common/service/crypto/CryptoGenerator; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl;->invoke()Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl$Companion; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl$Companion;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl$invoke$$inlined$ioEffect$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl$invoke$$inlined$ioEffect$1;->(Lkotlin/coroutines/Continuation;Lkotlin/coroutines/CoroutineContext;Lcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl$invoke$$inlined$ioEffect$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl$invoke$$inlined$ioEffect$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl$invoke$$inlined$ioEffect$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl$invoke$$inlined$ioEffect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl$invoke$$inlined$ioEffect$1$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl$invoke$$inlined$ioEffect$1$1;->(Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl$invoke$$inlined$ioEffect$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl$invoke$$inlined$ioEffect$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl$invoke$$inlined$ioEffect$1$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl$invoke$$inlined$ioEffect$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl$invoke$$inlined$map$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl$invoke$$inlined$map$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl$invoke$$inlined$map$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl$invoke$$inlined$map$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl$invoke$$inlined$map$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl$invoke$$inlined$map$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl;->(Lcom/artemchep/keyguard/common/service/permission/PermissionService;Lcom/artemchep/keyguard/common/usecase/GetAccounts;Lcom/artemchep/keyguard/common/usecase/GetMetas;Lcom/artemchep/keyguard/common/usecase/GetCiphers;Lcom/artemchep/keyguard/common/usecase/GetFolders;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl;->invoke()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$combineToList$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$combineToList$1;->(Ljava/util/List;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$combineToList$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$combineToList$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$combineToList$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$combineToList$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$combineToList$1$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$combineToList$1$1;->(Ljava/util/List;[Ljava/lang/Object;Ljava/util/concurrent/atomic/AtomicInteger;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$combineToList$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$combineToList$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$combineToList$1$1;->invoke(Lkotlinx/coroutines/channels/ProducerScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$combineToList$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$combineToList$1$1$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$combineToList$1$1$1;->(Lkotlinx/coroutines/flow/Flow;[Ljava/lang/Object;ILjava/util/concurrent/atomic/AtomicInteger;Lkotlinx/coroutines/channels/ProducerScope;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$combineToList$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$combineToList$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$combineToList$1$1$1$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$combineToList$1$1$1$1;->([Ljava/lang/Object;ILkotlin/jvm/internal/Ref$BooleanRef;Ljava/util/concurrent/atomic/AtomicInteger;Lkotlinx/coroutines/channels/ProducerScope;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$combineToList$1$1$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$combineToList$1$2; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$combineToList$1$2;->(Ljava/util/concurrent/atomic/AtomicInteger;Lkotlinx/coroutines/flow/FlowCollector;[Ljava/lang/Object;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$combineToList$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$combineToList$1$2;->emit(Lkotlin/Unit;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$map$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$$inlined$map$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$1;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$1;->invoke(IILjava/util/List;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$hasFailureFlow$1$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$hasFailureFlow$1$1;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$hasFailureFlow$1$1;->invoke(IIILkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$hasFailureFlow$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$hasFailureFlow$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$hasPendingFlow$1$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$hasPendingFlow$1$1;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$hasPendingFlow$1$1;->invoke(IILkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$hasPendingFlow$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$hasPendingFlow$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$11$$inlined$map$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$11$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$11$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$11$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$11$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$11$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$11$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$11$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$11$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$11$$inlined$map$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$11$$inlined$map$2; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$11$$inlined$map$2;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$11$$inlined$map$2;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$11$$inlined$map$2$2; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$11$$inlined$map$2$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$11$$inlined$map$2$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$11$$inlined$map$2$2$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$11$$inlined$map$2$2$1;->(Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$11$$inlined$map$2$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$11$$inlined$map$2$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$6$$inlined$map$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$6$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$6$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$6$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$6$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$6$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$6$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$6$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$6$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$6$$inlined$map$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$6$$inlined$map$2; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$6$$inlined$map$2;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$6$$inlined$map$2;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$6$$inlined$map$2$2; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$6$$inlined$map$2$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$6$$inlined$map$2$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$6$$inlined$map$2$2$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$6$$inlined$map$2$2$1;->(Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$6$$inlined$map$2$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$6$$inlined$map$2$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$6$$inlined$map$3; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$6$$inlined$map$3;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$6$$inlined$map$3;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$6$$inlined$map$3$2; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$6$$inlined$map$3$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$6$$inlined$map$3$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$6$$inlined$map$3$2$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$6$$inlined$map$3$2$1;->(Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$6$$inlined$map$3$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$invoke$lambda$6$$inlined$map$3$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$special$$inlined$instance$default$3; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$special$$inlined$instance$default$3;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$special$$inlined$instance$default$4; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$special$$inlined$instance$default$4;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$special$$inlined$instance$default$5; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl$special$$inlined$instance$default$5;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetAllowScreenshotsImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAllowScreenshotsImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAllowScreenshotsImpl;->(Lcom/artemchep/keyguard/common/service/settings/SettingsReadRepository;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAllowScreenshotsImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAllowScreenshotsImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAllowScreenshotsImpl;->invoke()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/common/usecase/impl/GetAllowScreenshotsImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAllowScreenshotsImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetAllowTwoPanelLayoutInLandscapeImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAllowTwoPanelLayoutInLandscapeImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAllowTwoPanelLayoutInLandscapeImpl;->(Lcom/artemchep/keyguard/common/service/settings/SettingsReadRepository;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAllowTwoPanelLayoutInLandscapeImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAllowTwoPanelLayoutInLandscapeImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAllowTwoPanelLayoutInLandscapeImpl;->invoke()Lkotlinx/coroutines/flow/StateFlow; +Lcom/artemchep/keyguard/common/usecase/impl/GetAllowTwoPanelLayoutInLandscapeImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAllowTwoPanelLayoutInLandscapeImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetAllowTwoPanelLayoutInPortraitImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAllowTwoPanelLayoutInPortraitImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAllowTwoPanelLayoutInPortraitImpl;->(Lcom/artemchep/keyguard/common/service/settings/SettingsReadRepository;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAllowTwoPanelLayoutInPortraitImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAllowTwoPanelLayoutInPortraitImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAllowTwoPanelLayoutInPortraitImpl;->invoke()Lkotlinx/coroutines/flow/StateFlow; +Lcom/artemchep/keyguard/common/usecase/impl/GetAllowTwoPanelLayoutInPortraitImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAllowTwoPanelLayoutInPortraitImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetAppIconsImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAppIconsImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAppIconsImpl;->(Lcom/artemchep/keyguard/common/service/settings/SettingsReadRepository;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAppIconsImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAppIconsImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAppIconsImpl;->invoke()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/common/usecase/impl/GetAppIconsImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetAppIconsImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetBiometricRemainingDurationImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetBiometricRemainingDurationImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetBiometricRemainingDurationImpl;->(Lcom/artemchep/keyguard/common/service/vault/SessionMetadataReadRepository;Lcom/artemchep/keyguard/common/usecase/GetBiometricTimeout;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetBiometricRemainingDurationImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/common/usecase/impl/GetBiometricRemainingDurationImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetBiometricRemainingDurationImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetBiometricRemainingDurationImpl$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetBiometricRemainingDurationImpl$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetBiometricTimeoutImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetBiometricTimeoutImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetBiometricTimeoutImpl;->(Lcom/artemchep/keyguard/common/service/settings/SettingsReadRepository;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetBiometricTimeoutImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/common/usecase/impl/GetBiometricTimeoutImpl$Companion; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetBiometricTimeoutImpl$Companion;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetBiometricTimeoutImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/common/usecase/impl/GetBiometricTimeoutImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetBiometricTimeoutImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetBiometricTimeoutImpl$special$$inlined$map$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetBiometricTimeoutImpl$special$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +Lcom/artemchep/keyguard/common/usecase/impl/GetCachePremiumImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetCachePremiumImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetCachePremiumImpl;->(Lcom/artemchep/keyguard/common/service/settings/SettingsReadRepository;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetCachePremiumImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetCachePremiumImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetCachePremiumImpl;->invoke()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/common/usecase/impl/GetCachePremiumImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetCachePremiumImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetCanWriteImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetCanWriteImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetCanWriteImpl;->(Lcom/artemchep/keyguard/common/usecase/GetPurchased;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetCanWriteImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetCanWriteImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetCanWriteImpl;->invoke()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/common/usecase/impl/GetCanWriteImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetCanWriteImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetColorsImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetColorsImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetColorsImpl;->(Lcom/artemchep/keyguard/common/service/settings/SettingsReadRepository;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetColorsImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetColorsImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetColorsImpl;->invoke()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/common/usecase/impl/GetColorsImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetColorsImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetConcealFieldsImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetConcealFieldsImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetConcealFieldsImpl;->(Lcom/artemchep/keyguard/common/service/settings/SettingsReadRepository;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetConcealFieldsImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetConcealFieldsImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetConcealFieldsImpl;->invoke()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/common/usecase/impl/GetConcealFieldsImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetConcealFieldsImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetDebugPremiumImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetDebugPremiumImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetDebugPremiumImpl;->(Lcom/artemchep/keyguard/common/service/settings/SettingsReadRepository;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetDebugPremiumImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetDebugPremiumImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetDebugPremiumImpl;->invoke()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/common/usecase/impl/GetDebugPremiumImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetDebugPremiumImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetDebugScreenDelayImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetDebugScreenDelayImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetDebugScreenDelayImpl;->(Lcom/artemchep/keyguard/common/service/settings/SettingsReadRepository;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetDebugScreenDelayImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetDebugScreenDelayImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetDebugScreenDelayImpl;->invoke()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/common/usecase/impl/GetDebugScreenDelayImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetDebugScreenDelayImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetFontImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetFontImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetFontImpl;->(Lcom/artemchep/keyguard/common/service/settings/SettingsReadRepository;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetFontImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetFontImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetFontImpl;->invoke()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/common/usecase/impl/GetFontImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetFontImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetNavAnimationImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetNavAnimationImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetNavAnimationImpl;->(Lcom/artemchep/keyguard/common/service/settings/SettingsReadRepository;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetNavAnimationImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetNavAnimationImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetNavAnimationImpl;->invoke()Lkotlinx/coroutines/flow/StateFlow; +Lcom/artemchep/keyguard/common/usecase/impl/GetNavAnimationImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetNavAnimationImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetNavAnimationImpl$special$$inlined$map$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetNavAnimationImpl$special$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetNavAnimationImpl$special$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetNavAnimationImpl$special$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetNavAnimationImpl$special$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetNavAnimationImpl$special$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetNavAnimationImpl$special$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetNavAnimationImpl$special$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/common/usecase/impl/GetNavAnimationImpl$special$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/common/usecase/impl/GetNavLabelImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetNavLabelImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetNavLabelImpl;->(Lcom/artemchep/keyguard/common/service/settings/SettingsReadRepository;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetNavLabelImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetNavLabelImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetNavLabelImpl;->invoke()Lkotlinx/coroutines/flow/StateFlow; +Lcom/artemchep/keyguard/common/usecase/impl/GetNavLabelImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetNavLabelImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl;->(Landroid/content/Context;Lcom/artemchep/keyguard/common/service/subscription/SubscriptionService;Lcom/artemchep/keyguard/common/usecase/GetDebugPremium;Lcom/artemchep/keyguard/common/usecase/GetCachePremium;Lcom/artemchep/keyguard/common/usecase/PutCachePremium;Lcom/artemchep/keyguard/common/usecase/WindowCoroutineScope;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl;->access$getPutCachePremium$p(Lcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl;)Lcom/artemchep/keyguard/common/usecase/PutCachePremium; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl;->access$getWindowCoroutineScope$p(Lcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl;)Lcom/artemchep/keyguard/common/usecase/WindowCoroutineScope; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl;->hasGooglePlayServices()Z +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl;->invoke()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl;->localStatusFlow()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl;->upstreamStatusFlow()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$PremiumStatus; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$PremiumStatus;->(ZZ)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$PremiumStatus;->isPremium()Z +PLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$PremiumStatus;->isUpstream()Z +Lcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$localStatusFlow$$inlined$map$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$localStatusFlow$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$localStatusFlow$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$localStatusFlow$$inlined$map$1$2; +PLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$localStatusFlow$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$localStatusFlow$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$localStatusFlow$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$localStatusFlow$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$localStatusFlow$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$sharedFlow$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$sharedFlow$1;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$sharedFlow$1;->invoke(Lcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$PremiumStatus;Lcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$PremiumStatus;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$sharedFlow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$sharedFlow$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$sharedFlow$2; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$sharedFlow$2;->(Lcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$sharedFlow$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$sharedFlow$2;->invoke(Lcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$PremiumStatus;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$sharedFlow$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$sharedFlow$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$special$$inlined$instance$default$3; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$special$$inlined$instance$default$3;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$special$$inlined$instance$default$4; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$special$$inlined$instance$default$4;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$special$$inlined$instance$default$5; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$special$$inlined$instance$default$5;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$special$$inlined$instance$default$6; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$special$$inlined$instance$default$6;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$special$$inlined$map$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$special$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$special$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$special$$inlined$map$1$2; +PLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$special$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$special$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$special$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$special$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$special$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$upstreamStatusFlow$$inlined$map$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$upstreamStatusFlow$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$upstreamStatusFlow$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$upstreamStatusFlow$$inlined$map$1$2; +PLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$upstreamStatusFlow$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$upstreamStatusFlow$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$upstreamStatusFlow$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$upstreamStatusFlow$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$upstreamStatusFlow$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$upstreamStatusFlow$1$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$upstreamStatusFlow$1$1;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$upstreamStatusFlow$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$upstreamStatusFlow$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$upstreamStatusFlow$1$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$upstreamStatusFlow$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$upstreamStatusFlow$1$2; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$upstreamStatusFlow$1$2;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$upstreamStatusFlow$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$upstreamStatusFlow$1$2;->invoke(ZZLkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$upstreamStatusFlow$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$upstreamStatusFlow$1$isPurchased$1$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$upstreamStatusFlow$1$isPurchased$1$1;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$upstreamStatusFlow$1$isPurchased$1$1;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$upstreamStatusFlow$1$isPurchased$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$upstreamStatusFlow$1$isPurchased$1$1;->invoke(Ljava/lang/Throwable;)Ljava/lang/Boolean; +Lcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$upstreamStatusFlow$1$isPurchased$1$2; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$upstreamStatusFlow$1$isPurchased$1$2;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$upstreamStatusFlow$1$isPurchased$1$2;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$upstreamStatusFlow$1$isPurchased$1$2;->invoke(Lcom/artemchep/keyguard/common/model/RichResult;)Ljava/lang/Boolean; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$upstreamStatusFlow$1$isPurchased$1$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$upstreamStatusFlow$1$isPurchased$1$3; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$upstreamStatusFlow$1$isPurchased$1$3;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$upstreamStatusFlow$1$isPurchased$1$3;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$upstreamStatusFlow$lambda$3$$inlined$mapNotNull$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$upstreamStatusFlow$lambda$3$$inlined$mapNotNull$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$upstreamStatusFlow$lambda$3$$inlined$mapNotNull$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$upstreamStatusFlow$lambda$3$$inlined$mapNotNull$1$2; +PLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$upstreamStatusFlow$lambda$3$$inlined$mapNotNull$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$upstreamStatusFlow$lambda$3$$inlined$mapNotNull$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$upstreamStatusFlow$lambda$3$$inlined$mapNotNull$1$2$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$upstreamStatusFlow$lambda$3$$inlined$mapNotNull$1$2$1;->(Lcom/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl$upstreamStatusFlow$lambda$3$$inlined$mapNotNull$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/common/usecase/impl/GetScreenStateImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetScreenStateImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetScreenStateImpl;->(Lcom/artemchep/keyguard/common/service/state/StateRepository;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetScreenStateImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetScreenStateImpl;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetScreenStateImpl;->invoke(Ljava/lang/String;)Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/common/usecase/impl/GetScreenStateImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetScreenStateImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetSuggestionsImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetSuggestionsImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetSuggestionsImpl;->(Ljava/util/List;Lcom/artemchep/keyguard/common/usecase/CipherUrlCheck;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetSuggestionsImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/common/usecase/impl/GetSuggestionsImpl$special$$inlined$allInstances$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetSuggestionsImpl$special$$inlined$allInstances$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetSuggestionsImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetSuggestionsImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetThemeImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetThemeImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetThemeImpl;->(Lcom/artemchep/keyguard/common/service/settings/SettingsReadRepository;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetThemeImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetThemeImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetThemeImpl;->invoke()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/common/usecase/impl/GetThemeImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetThemeImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetThemeUseAmoledDarkImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetThemeUseAmoledDarkImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetThemeUseAmoledDarkImpl;->(Lcom/artemchep/keyguard/common/service/settings/SettingsReadRepository;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetThemeUseAmoledDarkImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetThemeUseAmoledDarkImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetThemeUseAmoledDarkImpl;->invoke()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/common/usecase/impl/GetThemeUseAmoledDarkImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetThemeUseAmoledDarkImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetTotpCodeImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetTotpCodeImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetTotpCodeImpl;->(Lcom/artemchep/keyguard/common/service/totp/TotpService;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetTotpCodeImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/common/usecase/impl/GetTotpCodeImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetTotpCodeImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetUseExternalBrowserImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetUseExternalBrowserImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetUseExternalBrowserImpl;->(Lcom/artemchep/keyguard/common/service/settings/SettingsReadRepository;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetUseExternalBrowserImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetUseExternalBrowserImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetUseExternalBrowserImpl;->invoke()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/common/usecase/impl/GetUseExternalBrowserImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetUseExternalBrowserImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetVaultLockAfterScreenOffImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultLockAfterScreenOffImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultLockAfterScreenOffImpl;->(Lcom/artemchep/keyguard/common/service/settings/SettingsReadRepository;Lcom/artemchep/keyguard/common/usecase/GetVaultPersist;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultLockAfterScreenOffImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultLockAfterScreenOffImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultLockAfterScreenOffImpl;->invoke()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/common/usecase/impl/GetVaultLockAfterScreenOffImpl$sharedFlow$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultLockAfterScreenOffImpl$sharedFlow$1;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultLockAfterScreenOffImpl$sharedFlow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultLockAfterScreenOffImpl$sharedFlow$1;->invoke(ZZLkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultLockAfterScreenOffImpl$sharedFlow$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetVaultLockAfterScreenOffImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultLockAfterScreenOffImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetVaultLockAfterScreenOffImpl$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultLockAfterScreenOffImpl$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetVaultPersistImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultPersistImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultPersistImpl;->(Lcom/artemchep/keyguard/common/service/settings/SettingsReadRepository;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultPersistImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultPersistImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultPersistImpl;->invoke()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/common/usecase/impl/GetVaultPersistImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultPersistImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl;->(Lorg/kodein/di/DI;Lcom/artemchep/keyguard/common/service/vault/SessionReadWriteRepository;Lcom/artemchep/keyguard/common/service/vault/KeyReadWriteRepository;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl;->access$getKeyReadWriteRepository$p(Lcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl;)Lcom/artemchep/keyguard/common/service/vault/KeyReadWriteRepository; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl;->access$getSessionReadWriteRepository$p(Lcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl;)Lcom/artemchep/keyguard/common/service/vault/SessionReadWriteRepository; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl;->invoke()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl$Companion; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl$Companion;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl$sharedFlow$1$2; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl$sharedFlow$1$2;->(Lcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl$sharedFlow$1$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl$sharedFlow$1$2;->invoke(Lcom/artemchep/keyguard/common/model/MasterSession;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl$sharedFlow$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl$sharedFlow$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl$sharedFlow$lambda$2$$inlined$map$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl$sharedFlow$lambda$2$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl$sharedFlow$lambda$2$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl$sharedFlow$lambda$2$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl$sharedFlow$lambda$2$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl$sharedFlow$lambda$2$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl$sharedFlow$lambda$2$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl$sharedFlow$lambda$2$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl$sharedFlow$lambda$2$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl$special$$inlined$flatMapLatest$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl$special$$inlined$flatMapLatest$1;->(Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl$special$$inlined$flatMapLatest$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl$special$$inlined$flatMapLatest$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl$special$$inlined$flatMapLatest$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetWebsiteIconsImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetWebsiteIconsImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetWebsiteIconsImpl;->(Lcom/artemchep/keyguard/common/service/settings/SettingsReadRepository;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetWebsiteIconsImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetWebsiteIconsImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetWebsiteIconsImpl;->invoke()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/common/usecase/impl/GetWebsiteIconsImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetWebsiteIconsImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/GetWriteAccessImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetWriteAccessImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetWriteAccessImpl;->(Lcom/artemchep/keyguard/common/service/settings/SettingsReadRepository;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/GetWriteAccessImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/common/usecase/impl/GetWriteAccessImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/GetWriteAccessImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/MessageHubImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/MessageHubImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/MessageHubImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/MessageHubImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/MessageHubImpl;->register(Ljava/lang/String;Lkotlin/jvm/functions/Function1;)Lkotlin/jvm/functions/Function0; +Lcom/artemchep/keyguard/common/usecase/impl/MessageHubImpl$Entry; +HSPLcom/artemchep/keyguard/common/usecase/impl/MessageHubImpl$Entry;->(Ljava/lang/String;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V +Lcom/artemchep/keyguard/common/usecase/impl/MessageHubImpl$register$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/MessageHubImpl$register$1;->(Lcom/artemchep/keyguard/common/usecase/impl/MessageHubImpl;Lcom/artemchep/keyguard/common/usecase/impl/MessageHubImpl$Entry;)V +Lcom/artemchep/keyguard/common/usecase/impl/PasskeyTargetCheckImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/PasskeyTargetCheckImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/PasskeyTargetCheckImpl;->(Lcom/artemchep/keyguard/common/service/tld/TldService;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/PasskeyTargetCheckImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/common/usecase/impl/PasskeyTargetCheckImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/PasskeyTargetCheckImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/PutCachePremiumImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/PutCachePremiumImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/PutCachePremiumImpl;->(Lcom/artemchep/keyguard/common/service/settings/SettingsReadWriteRepository;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/PutCachePremiumImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/PutCachePremiumImpl;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/PutCachePremiumImpl;->invoke(Z)Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/common/usecase/impl/PutCachePremiumImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/PutCachePremiumImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/PutScreenStateImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/PutScreenStateImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/PutScreenStateImpl;->(Lcom/artemchep/keyguard/common/service/state/StateRepository;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/PutScreenStateImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/PutScreenStateImpl;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/PutScreenStateImpl;->invoke(Ljava/lang/String;Ljava/util/Map;)Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/common/usecase/impl/PutScreenStateImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/PutScreenStateImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/PutVaultSessionImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/PutVaultSessionImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/PutVaultSessionImpl;->(Lcom/artemchep/keyguard/common/service/vault/SessionReadWriteRepository;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/PutVaultSessionImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/PutVaultSessionImpl;->access$getSessionReadWriteRepository$p(Lcom/artemchep/keyguard/common/usecase/impl/PutVaultSessionImpl;)Lcom/artemchep/keyguard/common/service/vault/SessionReadWriteRepository; +HSPLcom/artemchep/keyguard/common/usecase/impl/PutVaultSessionImpl;->invoke(Lcom/artemchep/keyguard/common/model/MasterSession;)Lkotlin/jvm/functions/Function1; +HSPLcom/artemchep/keyguard/common/usecase/impl/PutVaultSessionImpl;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/PutVaultSessionImpl$invoke$$inlined$ioEffect$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/PutVaultSessionImpl$invoke$$inlined$ioEffect$1;->(Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/common/usecase/impl/PutVaultSessionImpl;Lcom/artemchep/keyguard/common/model/MasterSession;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/PutVaultSessionImpl$invoke$$inlined$ioEffect$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/usecase/impl/PutVaultSessionImpl$invoke$$inlined$ioEffect$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/PutVaultSessionImpl$invoke$$inlined$ioEffect$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/PutVaultSessionImpl$invoke$$inlined$ioEffect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/PutVaultSessionImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/PutVaultSessionImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;->(Lorg/kodein/di/DI;Lcom/artemchep/keyguard/common/usecase/BiometricStatusUseCase;Lcom/artemchep/keyguard/common/usecase/GetVaultSession;Lcom/artemchep/keyguard/common/usecase/PutVaultSession;Lcom/artemchep/keyguard/common/usecase/DisableBiometric;Lcom/artemchep/keyguard/common/service/vault/FingerprintReadWriteRepository;Lcom/artemchep/keyguard/common/service/vault/SessionMetadataReadWriteRepository;Lcom/artemchep/keyguard/common/usecase/GetBiometricRemainingDuration;Lcom/artemchep/keyguard/common/usecase/BiometricKeyEncryptUseCase;Lcom/artemchep/keyguard/common/usecase/BiometricKeyDecryptUseCase;Lcom/artemchep/keyguard/common/usecase/AuthConfirmMasterKeyUseCase;Lcom/artemchep/keyguard/common/usecase/AuthGenerateMasterKeyUseCase;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;->access$create(Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;Lcom/artemchep/keyguard/common/model/AuthResult;Lcom/artemchep/keyguard/common/model/FingerprintBiometric;)Lkotlin/jvm/functions/Function1; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;->access$createCreateVaultState(Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;Lcom/artemchep/keyguard/common/model/BiometricStatus;)Lcom/artemchep/keyguard/common/model/VaultState; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;->access$createMainVaultState(Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;Lcom/artemchep/keyguard/common/model/Fingerprint;Lcom/artemchep/keyguard/common/model/BiometricStatus;Lcom/artemchep/keyguard/common/model/MasterKey;Lorg/kodein/di/DI;)Lcom/artemchep/keyguard/common/model/VaultState; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;->access$createUnlockVaultState(Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;Lcom/artemchep/keyguard/common/model/Fingerprint;Lcom/artemchep/keyguard/common/model/BiometricStatus;Ljava/lang/String;)Lcom/artemchep/keyguard/common/model/VaultState; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;->access$getDi$p(Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;)Lorg/kodein/di/DI; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;->access$getGenerateMasterKey$p(Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;)Lkotlin/jvm/functions/Function1; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;->access$unlock(Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;Lcom/artemchep/keyguard/common/model/MasterKey;)Lkotlin/jvm/functions/Function1; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;->access$writeLastPasswordUseTimestamp(Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;)Lkotlin/jvm/functions/Function1; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;->create(Lcom/artemchep/keyguard/common/model/AuthResult;Lcom/artemchep/keyguard/common/model/FingerprintBiometric;)Lkotlin/jvm/functions/Function1; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;->createCreateVaultState(Lcom/artemchep/keyguard/common/model/BiometricStatus;)Lcom/artemchep/keyguard/common/model/VaultState; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;->createMainVaultState(Lcom/artemchep/keyguard/common/model/Fingerprint;Lcom/artemchep/keyguard/common/model/BiometricStatus;Lcom/artemchep/keyguard/common/model/MasterKey;Lorg/kodein/di/DI;)Lcom/artemchep/keyguard/common/model/VaultState; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;->createUnlockVaultState(Lcom/artemchep/keyguard/common/model/Fingerprint;Lcom/artemchep/keyguard/common/model/BiometricStatus;Ljava/lang/String;)Lcom/artemchep/keyguard/common/model/VaultState; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;->getBiometricStatusFlow()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;->invoke()Lkotlinx/coroutines/flow/SharedFlow; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;->unlock(Lcom/artemchep/keyguard/common/model/MasterKey;)Lkotlin/jvm/functions/Function1; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;->writeLastPasswordUseTimestamp()Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$ComplexBiometricStatus; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$ComplexBiometricStatus;->(Lcom/artemchep/keyguard/common/model/BiometricStatus;Lcom/artemchep/keyguard/common/model/BiometricStatus;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$ComplexBiometricStatus;->getForCreate()Lcom/artemchep/keyguard/common/model/BiometricStatus; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$ComplexBiometricStatus;->getForUnlock()Lcom/artemchep/keyguard/common/model/BiometricStatus; +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$create$$inlined$flatMap$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$create$$inlined$flatMap$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;Lcom/artemchep/keyguard/common/model/AuthResult;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$create$$inlined$flatMap$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$create$$inlined$flatMap$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$create$$inlined$flatMap$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$create$$inlined$flatMap$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createCreateVaultState$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createCreateVaultState$1;->(Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createCreateVaultState$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createCreateVaultState$1;->invoke(Ljava/lang/String;)Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createCreateVaultState$1$invoke$$inlined$flatMap$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createCreateVaultState$1$invoke$$inlined$flatMap$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createCreateVaultState$1$invoke$$inlined$flatMap$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createCreateVaultState$1$invoke$$inlined$flatMap$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createCreateVaultState$1$invoke$$inlined$flatMap$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createCreateVaultState$1$invoke$$inlined$flatMap$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createCreateVaultState$1$invoke$$inlined$flatTap$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createCreateVaultState$1$invoke$$inlined$flatTap$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createCreateVaultState$1$invoke$$inlined$flatTap$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createCreateVaultState$1$invoke$$inlined$flatTap$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createCreateVaultState$1$invoke$$inlined$flatTap$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createCreateVaultState$1$invoke$$inlined$flatTap$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createMainVaultState$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createMainVaultState$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createMainVaultState$getCreateIo$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createMainVaultState$getCreateIo$1;->(Lkotlin/jvm/functions/Function1;Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;Lkotlin/Lazy;)V +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createMainVaultState$unlockMasterKey$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createMainVaultState$unlockMasterKey$1;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createMainVaultState$unlockMasterKey$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createUnlockVaultState$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createUnlockVaultState$1;->(Lkotlin/jvm/functions/Function1;Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createUnlockVaultState$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createUnlockVaultState$1;->invoke(Ljava/lang/String;)Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createUnlockVaultState$1$invoke$$inlined$flatMap$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createUnlockVaultState$1$invoke$$inlined$flatMap$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createUnlockVaultState$1$invoke$$inlined$flatMap$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createUnlockVaultState$1$invoke$$inlined$flatMap$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createUnlockVaultState$1$invoke$$inlined$flatMap$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createUnlockVaultState$1$invoke$$inlined$flatMap$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createUnlockVaultState$1$invoke$$inlined$flatTap$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createUnlockVaultState$1$invoke$$inlined$flatTap$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createUnlockVaultState$1$invoke$$inlined$flatTap$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createUnlockVaultState$1$invoke$$inlined$flatTap$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createUnlockVaultState$1$invoke$$inlined$flatTap$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createUnlockVaultState$1$invoke$$inlined$flatTap$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createUnlockVaultState$1$invoke$$inlined$map$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createUnlockVaultState$1$invoke$$inlined$map$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createUnlockVaultState$1$invoke$$inlined$map$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createUnlockVaultState$1$invoke$$inlined$map$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createUnlockVaultState$1$invoke$$inlined$map$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createUnlockVaultState$1$invoke$$inlined$map$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createUnlockVaultState$unlockMasterKey$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createUnlockVaultState$unlockMasterKey$1;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createUnlockVaultState$unlockMasterKey$1;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createUnlockVaultState$unlockMasterKey$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$createUnlockVaultState$unlockMasterKey$1;->invoke-xshU9yM(Ljava/lang/String;)[B +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$generateMasterKey$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$generateMasterKey$1;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$generateMasterKey$1;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$generateMasterKey$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$generateMasterKey$1;->invoke-xshU9yM(Ljava/lang/String;)[B +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$getBiometricStatusFlow$$inlined$flatMapLatest$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$getBiometricStatusFlow$$inlined$flatMapLatest$1;->(Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$getBiometricStatusFlow$$inlined$flatMapLatest$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$getBiometricStatusFlow$$inlined$flatMapLatest$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$getBiometricStatusFlow$$inlined$flatMapLatest$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$getBiometricStatusFlow$lambda$4$$inlined$map$3; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$getBiometricStatusFlow$lambda$4$$inlined$map$3;->(Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/common/model/BiometricStatus;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$getBiometricStatusFlow$lambda$4$$inlined$map$3;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$getBiometricStatusFlow$lambda$4$$inlined$map$3$2; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$getBiometricStatusFlow$lambda$4$$inlined$map$3$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lcom/artemchep/keyguard/common/model/BiometricStatus;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$getBiometricStatusFlow$lambda$4$$inlined$map$3$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$getBiometricStatusFlow$lambda$4$$inlined$map$3$2$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$getBiometricStatusFlow$lambda$4$$inlined$map$3$2$1;->(Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$getBiometricStatusFlow$lambda$4$$inlined$map$3$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$sharedFlow$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$sharedFlow$1;->(Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$sharedFlow$1;->invoke(Lcom/artemchep/keyguard/common/model/Fingerprint;Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$ComplexBiometricStatus;Lcom/artemchep/keyguard/common/model/MasterSession;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$sharedFlow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$sharedFlow$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$special$$inlined$instance$default$10; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$special$$inlined$instance$default$10;->()V +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$special$$inlined$instance$default$11; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$special$$inlined$instance$default$11;->()V +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$special$$inlined$instance$default$3; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$special$$inlined$instance$default$3;->()V +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$special$$inlined$instance$default$4; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$special$$inlined$instance$default$4;->()V +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$special$$inlined$instance$default$5; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$special$$inlined$instance$default$5;->()V +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$special$$inlined$instance$default$6; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$special$$inlined$instance$default$6;->()V +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$special$$inlined$instance$default$7; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$special$$inlined$instance$default$7;->()V +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$special$$inlined$instance$default$8; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$special$$inlined$instance$default$8;->()V +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$special$$inlined$instance$default$9; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$special$$inlined$instance$default$9;->()V +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$unlock$$inlined$ioEffect$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$unlock$$inlined$ioEffect$1;->(Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl;Lcom/artemchep/keyguard/common/model/MasterKey;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$unlock$$inlined$ioEffect$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$unlock$$inlined$ioEffect$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$unlock$$inlined$ioEffect$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$unlock$$inlined$ioEffect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$unlock$1$moduleDi$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$unlock$1$moduleDi$1;->(Lcom/artemchep/keyguard/common/model/MasterKey;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$unlock$1$moduleDi$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$unlock$1$moduleDi$1;->invoke(Lorg/kodein/di/DI$Builder;)V +Lcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$unlock$lambda$12$$inlined$subDI$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$unlock$lambda$12$$inlined$subDI$1;->(Lorg/kodein/di/DI;Lorg/kodein/di/Copy;Lorg/kodein/di/DI$Module;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$unlock$lambda$12$$inlined$subDI$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl$unlock$lambda$12$$inlined$subDI$1;->invoke(Lorg/kodein/di/DI$MainBuilder;)V +Lcom/artemchep/keyguard/common/usecase/impl/WindowCoroutineScopeImpl; +HSPLcom/artemchep/keyguard/common/usecase/impl/WindowCoroutineScopeImpl;->()V +HSPLcom/artemchep/keyguard/common/usecase/impl/WindowCoroutineScopeImpl;->(Lkotlinx/coroutines/CoroutineScope;Lcom/artemchep/keyguard/common/usecase/ShowMessage;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/WindowCoroutineScopeImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/common/usecase/impl/WindowCoroutineScopeImpl;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext; +Lcom/artemchep/keyguard/common/usecase/impl/WindowCoroutineScopeImpl$special$$inlined$CoroutineExceptionHandler$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/WindowCoroutineScopeImpl$special$$inlined$CoroutineExceptionHandler$1;->(Lkotlinx/coroutines/CoroutineExceptionHandler$Key;Lcom/artemchep/keyguard/common/usecase/impl/WindowCoroutineScopeImpl;)V +Lcom/artemchep/keyguard/common/usecase/impl/WindowCoroutineScopeImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/common/usecase/impl/WindowCoroutineScopeImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/common/util/flow/EventFlow; +HSPLcom/artemchep/keyguard/common/util/flow/EventFlow;->()V +HSPLcom/artemchep/keyguard/common/util/flow/EventFlow;->(Lkotlin/coroutines/CoroutineContext;)V +HSPLcom/artemchep/keyguard/common/util/flow/EventFlow;->(Lkotlin/coroutines/CoroutineContext;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/common/util/flow/EventFlow;->access$getChannels$p(Lcom/artemchep/keyguard/common/util/flow/EventFlow;)Ljava/util/Queue; +HSPLcom/artemchep/keyguard/common/util/flow/EventFlow;->asFlow()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/common/util/flow/EventFlow;->collect$suspendImpl(Lcom/artemchep/keyguard/common/util/flow/EventFlow;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/util/flow/EventFlow;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/util/flow/EventFlow;->emit(Ljava/lang/Object;)V +HSPLcom/artemchep/keyguard/common/util/flow/EventFlow;->getMonitor()Lcom/artemchep/keyguard/common/util/flow/EventFlow; +HSPLcom/artemchep/keyguard/common/util/flow/EventFlow;->onActive()V +HSPLcom/artemchep/keyguard/common/util/flow/EventFlow;->onInactive()V +Lcom/artemchep/keyguard/common/util/flow/EventFlow$asFlow$1; +HSPLcom/artemchep/keyguard/common/util/flow/EventFlow$asFlow$1;->(Lcom/artemchep/keyguard/common/util/flow/EventFlow;)V +HSPLcom/artemchep/keyguard/common/util/flow/EventFlow$asFlow$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/util/flow/EventFlow$asFlow$1;->invoke(Lkotlinx/coroutines/channels/SendChannel;)V +Lcom/artemchep/keyguard/common/util/flow/EventFlow$asFlow$2; +HSPLcom/artemchep/keyguard/common/util/flow/EventFlow$asFlow$2;->(Lcom/artemchep/keyguard/common/util/flow/EventFlow;)V +HSPLcom/artemchep/keyguard/common/util/flow/EventFlow$asFlow$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/util/flow/EventFlow$asFlow$2;->invoke(Lkotlinx/coroutines/channels/SendChannel;)V +Lcom/artemchep/keyguard/common/util/flow/EventFlow$emit$1; +HSPLcom/artemchep/keyguard/common/util/flow/EventFlow$emit$1;->(Ljava/util/List;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/util/flow/EventFlow$emit$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/util/flow/EventFlow$emit$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/util/flow/EventFlowKt; +HSPLcom/artemchep/keyguard/common/util/flow/EventFlowKt;->access$flowWithLifecycle(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/common/util/flow/EventFlowKt;->flowWithLifecycle(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/common/util/flow/EventFlowKt$flowWithLifecycle$1; +HSPLcom/artemchep/keyguard/common/util/flow/EventFlowKt$flowWithLifecycle$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/util/flow/EventFlowKt$flowWithLifecycle$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/util/flow/EventFlowKt$flowWithLifecycle$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/util/flow/EventFlowKt$flowWithLifecycle$1;->invoke(Lkotlinx/coroutines/channels/ProducerScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/util/flow/EventFlowKt$flowWithLifecycle$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/util/flow/EventFlowKt$flowWithLifecycle$1$1$1; +HSPLcom/artemchep/keyguard/common/util/flow/EventFlowKt$flowWithLifecycle$1$1$1;->(Lkotlinx/coroutines/CancellableContinuation;)V +HSPLcom/artemchep/keyguard/common/util/flow/EventFlowKt$flowWithLifecycle$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/util/flow/EventFlowKt$flowWithLifecycle$1$1$1;->invoke(Ljava/lang/Throwable;)V +Lcom/artemchep/keyguard/common/util/flow/ReadonlyStateFlow; +HSPLcom/artemchep/keyguard/common/util/flow/ReadonlyStateFlow;->(Lkotlinx/coroutines/flow/StateFlow;Lkotlinx/coroutines/Job;)V +HSPLcom/artemchep/keyguard/common/util/flow/ReadonlyStateFlow;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/util/flow/ReadonlyStateFlow;->getValue()Ljava/lang/Object; +Lcom/artemchep/keyguard/common/util/flow/StateInKt; +HSPLcom/artemchep/keyguard/common/util/flow/StateInKt;->()V +HSPLcom/artemchep/keyguard/common/util/flow/StateInKt;->launchSharing(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/MutableStateFlow;Lkotlinx/coroutines/flow/SharingStarted;)Lkotlinx/coroutines/Job; +HSPLcom/artemchep/keyguard/common/util/flow/StateInKt;->persistingStateIn(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/SharingStarted;Ljava/lang/Object;)Lkotlinx/coroutines/flow/StateFlow; +Lcom/artemchep/keyguard/common/util/flow/StateInKt$launchSharing$1; +HSPLcom/artemchep/keyguard/common/util/flow/StateInKt$launchSharing$1;->(Lkotlinx/coroutines/flow/SharingStarted;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/MutableStateFlow;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/util/flow/StateInKt$launchSharing$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/util/flow/StateInKt$launchSharing$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/util/flow/StateInKt$launchSharing$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/util/flow/StateInKt$launchSharing$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/util/flow/StateInKt$launchSharing$1$2; +HSPLcom/artemchep/keyguard/common/util/flow/StateInKt$launchSharing$1$2;->(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/MutableStateFlow;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/common/util/flow/StateInKt$launchSharing$1$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/common/util/flow/StateInKt$launchSharing$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/util/flow/StateInKt$launchSharing$1$2;->invoke(Lkotlinx/coroutines/flow/SharingCommand;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/common/util/flow/StateInKt$launchSharing$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/common/util/flow/StateInKt$launchSharing$1$2$WhenMappings; +HSPLcom/artemchep/keyguard/common/util/flow/StateInKt$launchSharing$1$2$WhenMappings;->()V +Lcom/artemchep/keyguard/copy/Base32ServiceJvm; +HSPLcom/artemchep/keyguard/copy/Base32ServiceJvm;->()V +HSPLcom/artemchep/keyguard/copy/Base32ServiceJvm;->()V +HSPLcom/artemchep/keyguard/copy/Base32ServiceJvm;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/copy/Base64ServiceJvm; +HSPLcom/artemchep/keyguard/copy/Base64ServiceJvm;->()V +HSPLcom/artemchep/keyguard/copy/Base64ServiceJvm;->()V +HSPLcom/artemchep/keyguard/copy/Base64ServiceJvm;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/copy/Base64ServiceJvm;->decode(Ljava/lang/String;)[B +HSPLcom/artemchep/keyguard/copy/Base64ServiceJvm;->decode([B)[B +HSPLcom/artemchep/keyguard/copy/Base64ServiceJvm;->encode([B)[B +Lcom/artemchep/keyguard/copy/ClearDataAndroid; +HSPLcom/artemchep/keyguard/copy/ClearDataAndroid;->()V +HSPLcom/artemchep/keyguard/copy/ClearDataAndroid;->(Landroid/app/Application;)V +HSPLcom/artemchep/keyguard/copy/ClearDataAndroid;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/copy/ClearDataAndroid$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/copy/ClearDataAndroid$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/copy/ClipboardServiceAndroid; +HSPLcom/artemchep/keyguard/copy/ClipboardServiceAndroid;->()V +HSPLcom/artemchep/keyguard/copy/ClipboardServiceAndroid;->(Landroid/app/Application;Landroid/content/ClipboardManager;)V +HSPLcom/artemchep/keyguard/copy/ClipboardServiceAndroid;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/copy/ClipboardServiceAndroid$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/copy/ClipboardServiceAndroid$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/copy/ClipboardServiceAndroid$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/copy/ClipboardServiceAndroid$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/copy/ConnectivityServiceAndroid; +HSPLcom/artemchep/keyguard/copy/ConnectivityServiceAndroid;->()V +HSPLcom/artemchep/keyguard/copy/ConnectivityServiceAndroid;->(Landroid/content/Context;)V +HSPLcom/artemchep/keyguard/copy/ConnectivityServiceAndroid;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/copy/ConnectivityServiceAndroid$availableFlow$1; +HSPLcom/artemchep/keyguard/copy/ConnectivityServiceAndroid$availableFlow$1;->(Lcom/artemchep/keyguard/copy/ConnectivityServiceAndroid;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/copy/ConnectivityServiceAndroid$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/copy/ConnectivityServiceAndroid$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/copy/DateFormatterAndroid; +HSPLcom/artemchep/keyguard/copy/DateFormatterAndroid;->()V +HSPLcom/artemchep/keyguard/copy/DateFormatterAndroid;->()V +HSPLcom/artemchep/keyguard/copy/DateFormatterAndroid;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/copy/GetPasswordStrengthJvm; +HSPLcom/artemchep/keyguard/copy/GetPasswordStrengthJvm;->()V +HSPLcom/artemchep/keyguard/copy/GetPasswordStrengthJvm;->(Lcom/artemchep/keyguard/common/service/wordlist/WordlistService;)V +HSPLcom/artemchep/keyguard/copy/GetPasswordStrengthJvm;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/copy/GetPasswordStrengthJvm$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/copy/GetPasswordStrengthJvm$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/copy/GetPasswordStrengthJvm$zxcvbn$2; +HSPLcom/artemchep/keyguard/copy/GetPasswordStrengthJvm$zxcvbn$2;->()V +HSPLcom/artemchep/keyguard/copy/GetPasswordStrengthJvm$zxcvbn$2;->()V +Lcom/artemchep/keyguard/copy/LinkInfoExtractorAndroid; +HSPLcom/artemchep/keyguard/copy/LinkInfoExtractorAndroid;->()V +HSPLcom/artemchep/keyguard/copy/LinkInfoExtractorAndroid;->(Landroid/content/pm/PackageManager;)V +Lcom/artemchep/keyguard/copy/LinkInfoExtractorExecute; +Lcom/artemchep/keyguard/copy/LinkInfoExtractorLaunch; +Lcom/artemchep/keyguard/copy/LogRepositoryAndroid; +HSPLcom/artemchep/keyguard/copy/LogRepositoryAndroid;->()V +HSPLcom/artemchep/keyguard/copy/LogRepositoryAndroid;->()V +HSPLcom/artemchep/keyguard/copy/LogRepositoryAndroid;->add(Ljava/lang/String;Ljava/lang/String;Lcom/artemchep/keyguard/common/service/logging/LogLevel;)Lkotlin/jvm/functions/Function1; +HSPLcom/artemchep/keyguard/copy/LogRepositoryAndroid;->post(Ljava/lang/String;Ljava/lang/String;Lcom/artemchep/keyguard/common/service/logging/LogLevel;)V +Lcom/artemchep/keyguard/copy/LogRepositoryAndroid$add$$inlined$ioEffect$1; +HSPLcom/artemchep/keyguard/copy/LogRepositoryAndroid$add$$inlined$ioEffect$1;->(Lkotlin/coroutines/Continuation;Ljava/lang/String;Ljava/lang/String;)V +HSPLcom/artemchep/keyguard/copy/LogRepositoryAndroid$add$$inlined$ioEffect$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/copy/LogRepositoryAndroid$add$$inlined$ioEffect$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/copy/LogRepositoryAndroid$add$$inlined$ioEffect$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/copy/LogRepositoryAndroid$add$$inlined$ioEffect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/copy/PermissionServiceAndroid; +HSPLcom/artemchep/keyguard/copy/PermissionServiceAndroid;->()V +HSPLcom/artemchep/keyguard/copy/PermissionServiceAndroid;->(Landroid/content/Context;)V +HSPLcom/artemchep/keyguard/copy/PermissionServiceAndroid;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/copy/PermissionServiceAndroid;->access$checkPermission(Lcom/artemchep/keyguard/copy/PermissionServiceAndroid;Ljava/lang/String;)Lcom/artemchep/keyguard/common/service/permission/PermissionState; +HSPLcom/artemchep/keyguard/copy/PermissionServiceAndroid;->checkPermission(Ljava/lang/String;)Lcom/artemchep/keyguard/common/service/permission/PermissionState; +HSPLcom/artemchep/keyguard/copy/PermissionServiceAndroid;->getState(Lcom/artemchep/keyguard/common/service/permission/Permission;)Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/copy/PermissionServiceAndroid$Companion; +HSPLcom/artemchep/keyguard/copy/PermissionServiceAndroid$Companion;->()V +HSPLcom/artemchep/keyguard/copy/PermissionServiceAndroid$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/copy/PermissionServiceAndroid$checkPermission$1; +HSPLcom/artemchep/keyguard/copy/PermissionServiceAndroid$checkPermission$1;->(Ljava/lang/Object;)V +Lcom/artemchep/keyguard/copy/PermissionServiceAndroid$getState$$inlined$map$1; +HSPLcom/artemchep/keyguard/copy/PermissionServiceAndroid$getState$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/copy/PermissionServiceAndroid;Lcom/artemchep/keyguard/common/service/permission/Permission;)V +HSPLcom/artemchep/keyguard/copy/PermissionServiceAndroid$getState$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/copy/PermissionServiceAndroid$getState$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/copy/PermissionServiceAndroid$getState$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lcom/artemchep/keyguard/copy/PermissionServiceAndroid;Lcom/artemchep/keyguard/common/service/permission/Permission;)V +HSPLcom/artemchep/keyguard/copy/PermissionServiceAndroid$getState$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/copy/PermissionServiceAndroid$getState$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/copy/PermissionServiceAndroid$getState$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/copy/PermissionServiceAndroid$getState$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/copy/PermissionServiceAndroid$getState$1; +HSPLcom/artemchep/keyguard/copy/PermissionServiceAndroid$getState$1;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/copy/PermissionServiceAndroid$getState$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/copy/PermissionServiceAndroid$getState$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/copy/PermissionServiceAndroid$getState$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/copy/PermissionServiceAndroid$getState$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/copy/PermissionServiceAndroid$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/copy/PermissionServiceAndroid$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/copy/PowerServiceAndroid; +HSPLcom/artemchep/keyguard/copy/PowerServiceAndroid;->()V +HSPLcom/artemchep/keyguard/copy/PowerServiceAndroid;->(Landroid/app/Application;)V +HSPLcom/artemchep/keyguard/copy/PowerServiceAndroid;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/copy/PowerServiceAndroid;->getScreenState()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/copy/PowerServiceAndroid;->getScreenState()Lkotlinx/coroutines/flow/SharedFlow; +Lcom/artemchep/keyguard/copy/PowerServiceAndroid$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/copy/PowerServiceAndroid$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/copy/QueueSyncAllAndroid; +HSPLcom/artemchep/keyguard/copy/QueueSyncAllAndroid;->()V +HSPLcom/artemchep/keyguard/copy/QueueSyncAllAndroid;->(Landroid/content/Context;)V +HSPLcom/artemchep/keyguard/copy/QueueSyncAllAndroid;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/copy/QueueSyncAllAndroid;->access$getContext$p(Lcom/artemchep/keyguard/copy/QueueSyncAllAndroid;)Landroid/content/Context; +HSPLcom/artemchep/keyguard/copy/QueueSyncAllAndroid;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/copy/QueueSyncAllAndroid;->invoke()Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/copy/QueueSyncAllAndroid$invoke$$inlined$ioEffect$1; +HSPLcom/artemchep/keyguard/copy/QueueSyncAllAndroid$invoke$$inlined$ioEffect$1;->(Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/copy/QueueSyncAllAndroid;)V +HSPLcom/artemchep/keyguard/copy/QueueSyncAllAndroid$invoke$$inlined$ioEffect$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/copy/QueueSyncAllAndroid$invoke$$inlined$ioEffect$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/copy/QueueSyncAllAndroid$invoke$$inlined$ioEffect$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/copy/QueueSyncAllAndroid$invoke$$inlined$ioEffect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/copy/QueueSyncAllAndroid$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/copy/QueueSyncAllAndroid$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/copy/QueueSyncByIdAndroid; +HSPLcom/artemchep/keyguard/copy/QueueSyncByIdAndroid;->()V +HSPLcom/artemchep/keyguard/copy/QueueSyncByIdAndroid;->(Landroid/content/Context;)V +HSPLcom/artemchep/keyguard/copy/QueueSyncByIdAndroid;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/copy/QueueSyncByIdAndroid$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/copy/QueueSyncByIdAndroid$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/copy/SharedPreferencesStoreFactory; +Lcom/artemchep/keyguard/copy/SharedPreferencesStoreFactoryDefault; +HSPLcom/artemchep/keyguard/copy/SharedPreferencesStoreFactoryDefault;->()V +HSPLcom/artemchep/keyguard/copy/SharedPreferencesStoreFactoryDefault;->()V +HSPLcom/artemchep/keyguard/copy/SharedPreferencesStoreFactoryDefault;->getStore(Lorg/kodein/di/DI;Lcom/artemchep/keyguard/common/service/Files;)Lcom/artemchep/keyguard/common/service/keyvalue/KeyValueStore; +Lcom/artemchep/keyguard/copy/SharedPreferencesStoreFactoryDefault$getStore$$inlined$instance$1; +HSPLcom/artemchep/keyguard/copy/SharedPreferencesStoreFactoryDefault$getStore$$inlined$instance$1;->()V +Lcom/artemchep/keyguard/copy/SharedPreferencesStoreFactoryDefault$getStore$$inlined$instance$2; +HSPLcom/artemchep/keyguard/copy/SharedPreferencesStoreFactoryDefault$getStore$$inlined$instance$2;->()V +Lcom/artemchep/keyguard/copy/SubscriptionServiceAndroid; +HSPLcom/artemchep/keyguard/copy/SubscriptionServiceAndroid;->()V +HSPLcom/artemchep/keyguard/copy/SubscriptionServiceAndroid;->(Lcom/artemchep/keyguard/billing/BillingManager;)V +HSPLcom/artemchep/keyguard/copy/SubscriptionServiceAndroid;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/copy/SubscriptionServiceAndroid;->access$onEachAcknowledge(Lcom/artemchep/keyguard/copy/SubscriptionServiceAndroid;Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/billing/BillingConnection;)Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/copy/SubscriptionServiceAndroid;->getReceiptFlow()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/copy/SubscriptionServiceAndroid;->onEachAcknowledge(Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/billing/BillingConnection;)Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/copy/SubscriptionServiceAndroid;->purchased()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/copy/SubscriptionServiceAndroid$Companion; +HSPLcom/artemchep/keyguard/copy/SubscriptionServiceAndroid$Companion;->()V +HSPLcom/artemchep/keyguard/copy/SubscriptionServiceAndroid$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/copy/SubscriptionServiceAndroid$getReceiptFlow$$inlined$flatMapLatest$1; +HSPLcom/artemchep/keyguard/copy/SubscriptionServiceAndroid$getReceiptFlow$$inlined$flatMapLatest$1;->(Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/copy/SubscriptionServiceAndroid;)V +HSPLcom/artemchep/keyguard/copy/SubscriptionServiceAndroid$getReceiptFlow$$inlined$flatMapLatest$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/copy/SubscriptionServiceAndroid$getReceiptFlow$$inlined$flatMapLatest$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/copy/SubscriptionServiceAndroid$getReceiptFlow$$inlined$flatMapLatest$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/copy/SubscriptionServiceAndroid$getReceiptFlow$1$1; +HSPLcom/artemchep/keyguard/copy/SubscriptionServiceAndroid$getReceiptFlow$1$1;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/copy/SubscriptionServiceAndroid$getReceiptFlow$1$1;->invoke(Lcom/artemchep/keyguard/common/model/RichResult;Lcom/artemchep/keyguard/common/model/RichResult;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/copy/SubscriptionServiceAndroid$getReceiptFlow$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/copy/SubscriptionServiceAndroid$getReceiptFlow$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/copy/SubscriptionServiceAndroid$onEachAcknowledge$1; +HSPLcom/artemchep/keyguard/copy/SubscriptionServiceAndroid$onEachAcknowledge$1;->(Lcom/artemchep/keyguard/copy/SubscriptionServiceAndroid;Lcom/artemchep/keyguard/billing/BillingConnection;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/copy/SubscriptionServiceAndroid$onEachAcknowledge$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/copy/SubscriptionServiceAndroid$onEachAcknowledge$1;->invoke(Lcom/artemchep/keyguard/common/model/RichResult;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/copy/SubscriptionServiceAndroid$onEachAcknowledge$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/copy/SubscriptionServiceAndroid$onEachAcknowledge$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/copy/SubscriptionServiceAndroid$purchased$$inlined$map$1; +HSPLcom/artemchep/keyguard/copy/SubscriptionServiceAndroid$purchased$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/copy/SubscriptionServiceAndroid$purchased$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/copy/SubscriptionServiceAndroid$purchased$$inlined$map$1$2; +PLcom/artemchep/keyguard/copy/SubscriptionServiceAndroid$purchased$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/copy/SubscriptionServiceAndroid$purchased$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/copy/SubscriptionServiceAndroid$purchased$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/copy/SubscriptionServiceAndroid$purchased$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/copy/SubscriptionServiceAndroid$purchased$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/copy/SubscriptionServiceAndroid$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/copy/SubscriptionServiceAndroid$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/copy/TextServiceAndroid; +HSPLcom/artemchep/keyguard/copy/TextServiceAndroid;->()V +HSPLcom/artemchep/keyguard/copy/TextServiceAndroid;->(Landroid/content/Context;)V +HSPLcom/artemchep/keyguard/copy/TextServiceAndroid;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/copy/TextServiceAndroid$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/copy/TextServiceAndroid$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/copy/download/DownloadClientJvm; +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt;->diFingerprintRepositoryModule()Lorg/kodein/di/DI$Module; +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1;->invoke(Lorg/kodein/di/DI$Builder;)V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$1; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$1;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$1;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$10; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$10;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$10;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$10;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$10;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetPurchased; +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$11; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$11;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$11;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$11;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$11;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/CleanUpAttachment; +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$12; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$12;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$12;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$12;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$12;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/service/clipboard/ClipboardService; +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$13; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$13;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$13;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$13;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$13;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/service/connectivity/ConnectivityService; +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$14; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$14;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$14;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$14;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$14;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/service/power/PowerService; +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$15; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$15;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$15;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$15;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$15;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/copy/PermissionServiceAndroid; +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$16; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$16;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$16;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$16;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$16;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/service/permission/PermissionService; +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$16$invoke$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$16$invoke$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$17; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$17;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$17;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$17;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$17;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/copy/LinkInfoExtractorAndroid; +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$17$invoke$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$17$invoke$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$18; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$18;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$18;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$19; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$19;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$19;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$2; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$2;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$2;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$2;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/BiometricStatusUseCase; +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$20; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$20;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$20;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$20;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$20;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/service/text/TextService; +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$21; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$21;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$21;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$22; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$22;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$22;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$22;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$22;->invoke(Lorg/kodein/di/DirectDI;)Landroid/content/pm/PackageManager; +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$22$invoke$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$22$invoke$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$23; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$23;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$23;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$24; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$24;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$24;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$25; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$25;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$25;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$25;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$25;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/android/downloader/journal/DownloadRepository; +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$26; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$26;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$26;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$27; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$27;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$27;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$27;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$27;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/service/subscription/SubscriptionService; +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$28; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$28;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$28;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$28;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$28;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/ClearData; +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$29; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$29;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$29;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$29;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$29;->invoke(Lorg/kodein/di/bindings/BindingDI;Lcom/artemchep/keyguard/common/service/Files;)Lcom/artemchep/keyguard/common/service/keyvalue/KeyValueStore; +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$29$invoke$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$29$invoke$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$3; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$3;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$3;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$30; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$30;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$30;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$30;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$30;->invoke(Lorg/kodein/di/bindings/BindingDI;Lcom/artemchep/keyguard/common/service/Files;)Ldb_key_value/crypto_prefs/SecurePrefKeyValueStore; +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$30$invoke$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$30$invoke$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$31; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$31;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$31;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$31;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$31;->invoke(Lorg/kodein/di/bindings/BindingDI;Lcom/artemchep/keyguard/common/service/Files;)Ldb_key_value/shared_prefs/SharedPrefsKeyValueStore; +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$31$invoke$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$31$invoke$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$32; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$32;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$32;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$32;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$32;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/copy/SharedPreferencesStoreFactory; +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$33; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$33;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$33;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$33;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$33;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager; +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$33$invoke$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$33$invoke$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$33$invoke$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$33$invoke$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$34; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$34;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$34;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$34;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$34;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/service/logging/LogRepository; +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$4; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$4;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$4;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$4;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$4;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetBiometricRemainingDuration; +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$5; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$5;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$5;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$5;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$5;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/DisableBiometric; +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$6; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$6;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$6;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$7; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$7;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$7;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$8; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$8;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$8;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$9; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$9;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$9;->()V +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$9;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$9;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetSuggestions; +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bind$default$1; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bind$default$1;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bind$default$2; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bind$default$2;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bind$default$3; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bind$default$3;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindProvider$default$1; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindProvider$default$1;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindProvider$default$2; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindProvider$default$2;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindProvider$default$3; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindProvider$default$3;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$1; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$1;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$10; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$10;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$11; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$11;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$12; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$12;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$13; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$13;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$14; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$14;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$15; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$15;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$16; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$16;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$17; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$17;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$18; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$18;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$19; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$19;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$2; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$2;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$20; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$20;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$21; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$21;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$22; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$22;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$23; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$23;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$24; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$24;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$25; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$25;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$26; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$26;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$27; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$27;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$28; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$28;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$3; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$3;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$4; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$4;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$5; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$5;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$6; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$6;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$7; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$7;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$8; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$8;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$9; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$bindSingleton$default$9;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$factory$1; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$factory$1;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$factory$2; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$factory$2;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$multiton$default$1; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$multiton$default$1;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$multiton$default$2; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$multiton$default$2;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$multiton$default$3; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$multiton$default$3;->()V +Lcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$multiton$default$4; +HSPLcom/artemchep/keyguard/core/session/FingerprintRepositoryModuleKt$diFingerprintRepositoryModule$1$invoke$$inlined$multiton$default$4;->()V +Lcom/artemchep/keyguard/core/session/usecase/BiometricStatusUseCaseImpl; +HSPLcom/artemchep/keyguard/core/session/usecase/BiometricStatusUseCaseImpl;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/BiometricStatusUseCaseImpl;->(Landroid/app/Application;)V +HSPLcom/artemchep/keyguard/core/session/usecase/BiometricStatusUseCaseImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/core/session/usecase/BiometricStatusUseCaseImpl;->hasStrongBiometric()Z +HSPLcom/artemchep/keyguard/core/session/usecase/BiometricStatusUseCaseImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/BiometricStatusUseCaseImpl;->invoke()Lkotlinx/coroutines/flow/MutableStateFlow; +Lcom/artemchep/keyguard/core/session/usecase/BiometricStatusUseCaseImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/core/session/usecase/BiometricStatusUseCaseImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt; +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt;->createSubDi(Lorg/kodein/di/DI$Builder;Lcom/artemchep/keyguard/common/model/MasterKey;)V +Lcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$$inlined$bindSingleton$default$1; +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$$inlined$bindSingleton$default$1;->()V +Lcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$$inlined$bindSingleton$default$2; +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$$inlined$bindSingleton$default$2;->()V +Lcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$$inlined$bindSingleton$default$3; +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$$inlined$bindSingleton$default$3;->()V +Lcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$$inlined$bindSingleton$default$4; +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$$inlined$bindSingleton$default$4;->()V +Lcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$1; +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$1;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$1;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$1;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/QueueSyncAll; +Lcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$2; +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$2;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$2;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$2;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/QueueSyncById; +Lcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$3; +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$3;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$3;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$3;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/NotificationsWorker; +Lcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$4; +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$4;->(Lcom/artemchep/keyguard/common/model/MasterKey;)V +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$4;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$4;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/core/store/DatabaseManager; +Lcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$4$invoke$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$4$invoke$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$4$invoke$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$4$invoke$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$4$invoke$$inlined$instance$default$3; +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$4$invoke$$inlined$instance$default$3;->()V +Lcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$4$invoke$$inlined$instance$default$4; +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$4$invoke$$inlined$instance$default$4;->()V +Lcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$4$invoke$$inlined$instance$default$5; +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$4$invoke$$inlined$instance$default$5;->()V +Lcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$4$invoke$$inlined$instance$default$6; +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$4$invoke$$inlined$instance$default$6;->()V +Lcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$4$sqlManager$1; +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$4$sqlManager$1;->(Lcom/artemchep/keyguard/core/store/DatabaseManagerAndroid;Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager;)V +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$4$sqlManager$1;->invoke(Lcom/artemchep/keyguard/data/Database;)Lkotlin/jvm/functions/Function1; +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$4$sqlManager$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$4$sqlManager$1$2; +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$4$sqlManager$1$2;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$4$sqlManager$1$2;->()V +Lcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$4$sqlManager$1$invoke$$inlined$flatMap$1; +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$4$sqlManager$1$invoke$$inlined$flatMap$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager;Lcom/artemchep/keyguard/data/Database;)V +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$4$sqlManager$1$invoke$$inlined$flatMap$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$4$sqlManager$1$invoke$$inlined$flatMap$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$4$sqlManager$1$invoke$$inlined$flatMap$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/CreateSubDiKt$createSubDi$4$sqlManager$1$invoke$$inlined$flatMap$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/session/usecase/SqlManagerFile2; +HSPLcom/artemchep/keyguard/core/session/usecase/SqlManagerFile2;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SqlManagerFile2;->(Landroid/content/Context;Lkotlin/jvm/functions/Function1;)V +HSPLcom/artemchep/keyguard/core/session/usecase/SqlManagerFile2;->access$getContext$p(Lcom/artemchep/keyguard/core/session/usecase/SqlManagerFile2;)Landroid/content/Context; +HSPLcom/artemchep/keyguard/core/session/usecase/SqlManagerFile2;->access$getOnCreate$p(Lcom/artemchep/keyguard/core/session/usecase/SqlManagerFile2;)Lkotlin/jvm/functions/Function1; +HSPLcom/artemchep/keyguard/core/session/usecase/SqlManagerFile2;->create(Lcom/artemchep/keyguard/common/model/MasterKey;Lkotlin/jvm/functions/Function1;)Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/core/session/usecase/SqlManagerFile2$Callback; +HSPLcom/artemchep/keyguard/core/session/usecase/SqlManagerFile2$Callback;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SqlManagerFile2$Callback;->onConfigure(Landroidx/sqlite/db/SupportSQLiteDatabase;)V +Lcom/artemchep/keyguard/core/session/usecase/SqlManagerFile2$Helper; +PLcom/artemchep/keyguard/core/session/usecase/SqlManagerFile2$Helper;->(Lapp/cash/sqldelight/db/SqlDriver;Lcom/artemchep/keyguard/data/Database;Landroidx/sqlite/db/SupportSQLiteOpenHelper;)V +HSPLcom/artemchep/keyguard/core/session/usecase/SqlManagerFile2$Helper;->getDatabase()Lcom/artemchep/keyguard/data/Database; +Lcom/artemchep/keyguard/core/session/usecase/SqlManagerFile2$create$$inlined$ioEffect$1; +HSPLcom/artemchep/keyguard/core/session/usecase/SqlManagerFile2$create$$inlined$ioEffect$1;->(Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/common/model/MasterKey;Lcom/artemchep/keyguard/core/session/usecase/SqlManagerFile2;Lkotlin/jvm/functions/Function1;)V +HSPLcom/artemchep/keyguard/core/session/usecase/SqlManagerFile2$create$$inlined$ioEffect$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/core/session/usecase/SqlManagerFile2$create$$inlined$ioEffect$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SqlManagerFile2$create$$inlined$ioEffect$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SqlManagerFile2$create$$inlined$ioEffect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt;->createSubDi2(Lorg/kodein/di/DI$Builder;Lcom/artemchep/keyguard/common/model/MasterKey;)V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$1; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$1;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$10; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$10;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$11; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$11;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$12; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$12;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$13; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$13;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$14; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$14;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$15; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$15;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$16; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$16;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$17; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$17;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$18; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$18;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$19; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$19;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$2; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$2;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$20; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$20;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$21; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$21;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$22; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$22;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$23; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$23;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$24; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$24;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$25; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$25;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$26; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$26;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$27; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$27;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$28; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$28;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$29; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$29;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$3; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$3;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$30; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$30;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$31; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$31;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$32; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$32;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$33; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$33;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$34; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$34;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$35; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$35;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$36; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$36;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$37; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$37;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$38; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$38;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$39; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$39;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$4; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$4;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$40; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$40;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$41; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$41;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$42; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$42;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$43; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$43;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$44; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$44;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$45; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$45;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$46; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$46;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$47; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$47;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$48; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$48;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$49; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$49;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$5; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$5;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$50; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$50;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$51; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$51;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$52; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$52;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$53; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$53;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$54; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$54;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$55; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$55;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$56; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$56;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$57; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$57;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$58; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$58;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$59; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$59;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$6; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$6;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$60; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$60;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$61; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$61;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$62; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$62;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$63; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$63;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$64; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$64;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$65; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$65;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$66; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$66;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$67; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$67;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$68; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$68;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$69; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$69;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$7; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$7;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$70; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$70;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$71; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$71;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$72; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$72;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$73; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$73;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$74; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$74;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$75; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$75;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$76; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$76;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$77; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$77;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$78; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$78;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$79; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$79;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$8; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$8;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$80; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$80;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$81; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$81;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$82; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$82;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$83; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$83;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$84; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$84;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$85; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$85;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$86; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$86;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$87; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$87;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$88; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$88;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$89; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$89;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$9; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$9;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$90; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$90;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$91; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$91;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$92; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$92;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$93; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$93;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$94; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$94;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$95; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$95;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$96; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$96;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$97; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$97;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$98; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$98;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$99; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$$inlined$bindSingleton$default$99;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$1; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$1;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$1;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$10; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$10;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$10;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$11; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$11;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$11;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$11;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$11;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetCiphers; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$12; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$12;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$12;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$13; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$13;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$13;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$13;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$13;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetCollections; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$14; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$14;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$14;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$14;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$14;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetOrganizations; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$15; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$15;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$15;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$16; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$16;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$16;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$16;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$16;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetFolders; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$17; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$17;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$17;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$17;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$17;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetFolderTree; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$18; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$18;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$18;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$19; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$19;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$19;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$19;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$19;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetProfiles; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$2; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$2;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$2;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$20; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$20;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$20;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$20;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$20;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetMetas; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$21; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$21;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$21;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$22; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$22;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$22;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$23; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$23;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$23;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$24; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$24;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$24;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$25; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$25;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$25;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$26; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$26;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$26;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$26;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$26;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyCipherById; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$27; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$27;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$27;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$27;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$27;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyFolderById; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$28; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$28;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$28;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$29; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$29;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$29;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$29;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$29;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyDatabase; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$3; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$3;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$3;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$30; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$30;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$30;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$30;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$30;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/TrashCipherById; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$31; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$31;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$31;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$32; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$32;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$32;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$32;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$32;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/RestoreCipherById; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$33; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$33;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$33;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$33;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$33;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/MoveCipherToFolderById; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$34; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$34;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$34;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$34;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$34;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/RemoveCipherById; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$35; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$35;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$35;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$36; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$36;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$36;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$37; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$37;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$37;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$37;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$37;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/ChangeCipherPasswordById; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$38; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$38;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$38;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$38;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$38;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/ChangeCipherNameById; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$39; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$39;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$39;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$4; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$4;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$4;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$40; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$40;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$40;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$41; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$41;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$41;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$42; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$42;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$42;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$42;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$42;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/CipherToolbox; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$43; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$43;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$43;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$44; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$44;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$44;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$45; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$45;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$45;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$45;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$45;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/CipherMerge; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$46; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$46;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$46;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$47; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$47;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$47;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$48; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$48;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$48;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$49; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$49;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$49;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$49;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$49;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/RenameFolderById; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$5; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$5;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$5;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$50; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$50;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$50;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$51; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$51;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$51;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$52; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$52;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$52;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$53; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$53;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$53;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$53;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$53;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/AddFolder; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$54; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$54;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$54;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$55; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$55;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$55;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$56; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$56;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$56;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$57; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$57;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$57;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$58; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$58;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$58;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$59; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$59;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$59;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$6; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$6;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$6;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$60; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$60;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$60;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$61; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$61;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$61;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$62; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$62;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$62;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$63; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$63;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$63;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$64; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$64;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$64;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$65; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$65;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$65;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$65;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$65;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetCipherOpenedHistory; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$66; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$66;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$66;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$67; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$67;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$67;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$68; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$68;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$68;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$68;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$68;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/android/downloader/journal/CipherHistoryOpenedRepository; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$69; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$69;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$69;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$7; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$7;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$7;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$7;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$7;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetAccounts; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$70; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$70;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$70;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$71; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$71;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$71;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$72; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$72;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$72;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$73; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$73;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$73;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$74; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$74;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$74;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$75; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$75;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$75;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$76; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$76;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$76;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$77; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$77;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$77;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$78; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$78;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$78;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$79; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$79;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$79;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$79;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$79;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/FavouriteCipherById; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$8; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$8;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$8;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$8;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$8;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetAccountStatus; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$80; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$80;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$80;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$80;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$80;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/RePromptCipherById; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$81; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$81;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$81;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$81;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$81;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/CopyCipherById; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$82; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$82;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$82;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$83; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$83;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$83;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$84; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$84;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$84;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$84;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$84;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/SyncAll; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$85; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$85;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$85;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$86; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$86;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$86;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$86;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$86;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/provider/bitwarden/usecase/internal/SyncByToken; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$87; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$87;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$87;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$87;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$87;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/WatchdogImpl; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$88; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$88;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$88;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$88;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$88;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/Watchdog; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$88$invoke$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$88$invoke$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$89; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$89;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$89;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$89;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$89;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/SupervisorRead; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$89$invoke$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$89$invoke$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$9; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$9;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$9;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$90; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$90;->(Lcom/artemchep/keyguard/common/model/MasterKey;)V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$91; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$91;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$91;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$91;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$91;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenTokenRepository; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$92; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$92;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$92;->()V +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$93; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$93;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$93;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$93;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$93;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenCipherRepository; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$94; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$94;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$94;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$94;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$94;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenCollectionRepository; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$95; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$95;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$95;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$95;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$95;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenOrganizationRepository; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$96; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$96;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$96;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$96;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$96;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenFolderRepository; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$97; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$97;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$97;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$97;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$97;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenProfileRepository; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$98; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$98;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$98;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$98;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$98;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenMetaRepository; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$99; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$99;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$99;->()V +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$99;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$99;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/core/store/DatabaseSyncer; +Lcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$99$invoke$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/core/session/usecase/SubDIKt$createSubDi2$99$invoke$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/core/store/BitwardenCipherToStringAdapter; +HSPLcom/artemchep/keyguard/core/store/BitwardenCipherToStringAdapter;->(Lkotlinx/serialization/json/Json;)V +Lcom/artemchep/keyguard/core/store/BitwardenCollectionToStringAdapter; +HSPLcom/artemchep/keyguard/core/store/BitwardenCollectionToStringAdapter;->(Lkotlinx/serialization/json/Json;)V +Lcom/artemchep/keyguard/core/store/BitwardenFolderToStringAdapter; +HSPLcom/artemchep/keyguard/core/store/BitwardenFolderToStringAdapter;->(Lkotlinx/serialization/json/Json;)V +Lcom/artemchep/keyguard/core/store/BitwardenMetaToStringAdapter; +HSPLcom/artemchep/keyguard/core/store/BitwardenMetaToStringAdapter;->(Lkotlinx/serialization/json/Json;)V +Lcom/artemchep/keyguard/core/store/BitwardenOrganizationToStringAdapter; +HSPLcom/artemchep/keyguard/core/store/BitwardenOrganizationToStringAdapter;->(Lkotlinx/serialization/json/Json;)V +Lcom/artemchep/keyguard/core/store/BitwardenProfileToStringAdapter; +HSPLcom/artemchep/keyguard/core/store/BitwardenProfileToStringAdapter;->(Lkotlinx/serialization/json/Json;)V +Lcom/artemchep/keyguard/core/store/BitwardenSendToStringAdapter; +HSPLcom/artemchep/keyguard/core/store/BitwardenSendToStringAdapter;->(Lkotlinx/serialization/json/Json;)V +Lcom/artemchep/keyguard/core/store/BitwardenTokenToStringAdapter; +HSPLcom/artemchep/keyguard/core/store/BitwardenTokenToStringAdapter;->(Lkotlinx/serialization/json/Json;)V +Lcom/artemchep/keyguard/core/store/DatabaseDispatcher; +HSPLcom/artemchep/keyguard/core/store/DatabaseDispatcher;->()V +HSPLcom/artemchep/keyguard/core/store/DatabaseDispatcher;->()V +Lcom/artemchep/keyguard/core/store/DatabaseManager; +Lcom/artemchep/keyguard/core/store/DatabaseManagerAndroid; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid;->()V +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid;->(Landroid/content/Context;Lkotlinx/serialization/json/Json;Ljava/lang/String;Lcom/artemchep/keyguard/common/model/MasterKey;)V +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid;->access$getApplicationContext$p(Lcom/artemchep/keyguard/core/store/DatabaseManagerAndroid;)Landroid/content/Context; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid;->access$getDbFileIo$p(Lcom/artemchep/keyguard/core/store/DatabaseManagerAndroid;)Lkotlin/jvm/functions/Function1; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid;->access$getDbIo$p(Lcom/artemchep/keyguard/core/store/DatabaseManagerAndroid;)Lkotlin/jvm/functions/Function1; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid;->access$getName$p(Lcom/artemchep/keyguard/core/store/DatabaseManagerAndroid;)Ljava/lang/String; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid;->migrateIfExists(Lcom/artemchep/keyguard/data/Database;)Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/core/store/DatabaseManagerAndroid$Companion; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid$Companion;->()V +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/core/store/DatabaseManagerAndroid$migrateIfExists$$inlined$ioEffect$1; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid$migrateIfExists$$inlined$ioEffect$1;->(Lkotlin/coroutines/Continuation;Lkotlin/coroutines/CoroutineContext;Lcom/artemchep/keyguard/core/store/DatabaseManagerAndroid;Lcom/artemchep/keyguard/data/Database;)V +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid$migrateIfExists$$inlined$ioEffect$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid$migrateIfExists$$inlined$ioEffect$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid$migrateIfExists$$inlined$ioEffect$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid$migrateIfExists$$inlined$ioEffect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/DatabaseManagerAndroid$migrateIfExists$$inlined$ioEffect$1$1; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid$migrateIfExists$$inlined$ioEffect$1$1;->(Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/core/store/DatabaseManagerAndroid;Lcom/artemchep/keyguard/data/Database;)V +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid$migrateIfExists$$inlined$ioEffect$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid$migrateIfExists$$inlined$ioEffect$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/DatabaseManagerAndroid$special$$inlined$effectMap$1; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid$special$$inlined$effectMap$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/core/store/DatabaseManagerAndroid;)V +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid$special$$inlined$effectMap$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid$special$$inlined$effectMap$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid$special$$inlined$effectMap$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid$special$$inlined$effectMap$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/DatabaseManagerAndroid$special$$inlined$ioEffect$1; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid$special$$inlined$ioEffect$1;->(Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/core/store/DatabaseManagerAndroid;)V +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid$special$$inlined$ioEffect$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid$special$$inlined$ioEffect$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid$special$$inlined$ioEffect$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid$special$$inlined$ioEffect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/DatabaseManagerAndroid$special$$inlined$retry$1; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid$special$$inlined$retry$1;->(Lkotlin/coroutines/Continuation;Lkotlin/jvm/functions/Function1;Lcom/artemchep/keyguard/core/store/DatabaseManagerAndroid;)V +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid$special$$inlined$retry$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid$special$$inlined$retry$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid$special$$inlined$retry$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerAndroid$special$$inlined$retry$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/DatabaseManagerImpl; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl;->()V +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl;->(Lcom/artemchep/keyguard/common/service/logging/LogRepository;Lkotlinx/serialization/json/Json;Lcom/artemchep/keyguard/core/store/SqlManager;Lcom/artemchep/keyguard/common/model/MasterKey;)V +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl;->access$getBitwardenCipherToStringAdapter$p(Lcom/artemchep/keyguard/core/store/DatabaseManagerImpl;)Lcom/artemchep/keyguard/core/store/BitwardenCipherToStringAdapter; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl;->access$getBitwardenCollectionToStringAdapter$p(Lcom/artemchep/keyguard/core/store/DatabaseManagerImpl;)Lcom/artemchep/keyguard/core/store/BitwardenCollectionToStringAdapter; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl;->access$getBitwardenFolderToStringAdapter$p(Lcom/artemchep/keyguard/core/store/DatabaseManagerImpl;)Lcom/artemchep/keyguard/core/store/BitwardenFolderToStringAdapter; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl;->access$getBitwardenMetaToStringAdapter$p(Lcom/artemchep/keyguard/core/store/DatabaseManagerImpl;)Lcom/artemchep/keyguard/core/store/BitwardenMetaToStringAdapter; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl;->access$getBitwardenOrganizationToStringAdapter$p(Lcom/artemchep/keyguard/core/store/DatabaseManagerImpl;)Lcom/artemchep/keyguard/core/store/BitwardenOrganizationToStringAdapter; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl;->access$getBitwardenProfileToStringAdapter$p(Lcom/artemchep/keyguard/core/store/DatabaseManagerImpl;)Lcom/artemchep/keyguard/core/store/BitwardenProfileToStringAdapter; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl;->access$getBitwardenSendToStringAdapter$p(Lcom/artemchep/keyguard/core/store/DatabaseManagerImpl;)Lcom/artemchep/keyguard/core/store/BitwardenSendToStringAdapter; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl;->access$getBitwardenTokenToStringAdapter$p(Lcom/artemchep/keyguard/core/store/DatabaseManagerImpl;)Lcom/artemchep/keyguard/core/store/BitwardenTokenToStringAdapter; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl;->access$getHibpAccountBreachToStringAdapter$p(Lcom/artemchep/keyguard/core/store/DatabaseManagerImpl;)Lcom/artemchep/keyguard/core/store/HibpAccountBreachToStringAdapter; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl;->access$getMutex$cp()Lkotlinx/coroutines/sync/Mutex; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl;->access$getSqlManager$p(Lcom/artemchep/keyguard/core/store/DatabaseManagerImpl;)Lcom/artemchep/keyguard/core/store/SqlManager; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl;->get()Lkotlin/jvm/functions/Function1; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl;->mutate(Lkotlin/jvm/functions/Function2;)Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/core/store/DatabaseManagerImpl$Companion; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl$Companion;->()V +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/core/store/DatabaseManagerImpl$dbIo$1$databaseFactory$1; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl$dbIo$1$databaseFactory$1;->(Lcom/artemchep/keyguard/core/store/DatabaseManagerImpl;)V +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl$dbIo$1$databaseFactory$1;->invoke(Lapp/cash/sqldelight/db/SqlDriver;)Lcom/artemchep/keyguard/data/Database; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl$dbIo$1$databaseFactory$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/DatabaseManagerImpl$get$$inlined$map$1; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl$get$$inlined$map$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl$get$$inlined$map$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl$get$$inlined$map$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl$get$$inlined$map$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl$get$$inlined$map$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/DatabaseManagerImpl$mutate$$inlined$effectMap$1; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl$mutate$$inlined$effectMap$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/Continuation;Lkotlin/jvm/functions/Function2;)V +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl$mutate$$inlined$effectMap$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl$mutate$$inlined$effectMap$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl$mutate$$inlined$effectMap$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl$mutate$$inlined$effectMap$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/DatabaseManagerImpl$mutate$$inlined$effectMap$1$1; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl$mutate$$inlined$effectMap$1$1;->(Ljava/lang/Object;Lkotlin/coroutines/Continuation;Lkotlin/jvm/functions/Function2;)V +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl$mutate$$inlined$effectMap$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl$mutate$$inlined$effectMap$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/DatabaseManagerImpl$special$$inlined$effectMap$1; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl$special$$inlined$effectMap$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/core/store/DatabaseManagerImpl;)V +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl$special$$inlined$effectMap$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl$special$$inlined$effectMap$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl$special$$inlined$effectMap$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl$special$$inlined$effectMap$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/DatabaseManagerImpl$special$$inlined$retry$1; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl$special$$inlined$retry$1;->(Lkotlin/coroutines/Continuation;Lkotlin/jvm/functions/Function1;)V +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl$special$$inlined$retry$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl$special$$inlined$retry$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl$special$$inlined$retry$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/DatabaseManagerImpl$special$$inlined$retry$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/DatabaseSyncer; +HSPLcom/artemchep/keyguard/core/store/DatabaseSyncer;->()V +HSPLcom/artemchep/keyguard/core/store/DatabaseSyncer;->(Lcom/artemchep/keyguard/common/service/crypto/CryptoGenerator;)V +Lcom/artemchep/keyguard/core/store/HibpAccountBreachToStringAdapter; +HSPLcom/artemchep/keyguard/core/store/HibpAccountBreachToStringAdapter;->(Lkotlinx/serialization/json/Json;)V +Lcom/artemchep/keyguard/core/store/InstantToLongAdapter; +HSPLcom/artemchep/keyguard/core/store/InstantToLongAdapter;->()V +HSPLcom/artemchep/keyguard/core/store/InstantToLongAdapter;->()V +Lcom/artemchep/keyguard/core/store/ObjectToStringAdapter; +HSPLcom/artemchep/keyguard/core/store/ObjectToStringAdapter;->()V +HSPLcom/artemchep/keyguard/core/store/ObjectToStringAdapter;->(Lkotlinx/serialization/KSerializer;Lkotlinx/serialization/json/Json;)V +Lcom/artemchep/keyguard/core/store/ObjectToStringAdapter$Companion; +HSPLcom/artemchep/keyguard/core/store/ObjectToStringAdapter$Companion;->()V +HSPLcom/artemchep/keyguard/core/store/ObjectToStringAdapter$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/core/store/SqlHelper; +Lcom/artemchep/keyguard/core/store/SqlManager; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$$serializer; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$$serializer;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$$serializer;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Attachment; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Attachment$Local; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Attachment$Local;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Attachment$Local$$serializer; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Attachment$Local$$serializer;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Attachment$Local$$serializer;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Attachment$Local$$serializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Attachment$Local$Companion; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Attachment$Local$Companion;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Attachment$Local$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Attachment$Local$Companion;->serializer()Lkotlinx/serialization/KSerializer; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Attachment$Remote; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Attachment$Remote;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Attachment$Remote$$serializer; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Attachment$Remote$$serializer;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Attachment$Remote$$serializer;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Attachment$Remote$$serializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Attachment$Remote$Companion; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Attachment$Remote$Companion;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Attachment$Remote$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Attachment$Remote$Companion;->serializer()Lkotlinx/serialization/KSerializer; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Companion; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Companion;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Companion;->serializer()Lkotlinx/serialization/KSerializer; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Field$$serializer; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Field$$serializer;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Field$$serializer;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Field$$serializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$RepromptType; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$RepromptType;->$values()[Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$RepromptType; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$RepromptType;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$RepromptType;->(Ljava/lang/String;I)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$RepromptType;->access$get$cachedSerializer$delegate$cp()Lkotlin/Lazy; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$RepromptType;->values()[Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$RepromptType; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$RepromptType$Companion; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$RepromptType$Companion;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$RepromptType$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$RepromptType$Companion;->get$cachedSerializer()Lkotlinx/serialization/KSerializer; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$RepromptType$Companion;->serializer()Lkotlinx/serialization/KSerializer; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$RepromptType$Companion$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$RepromptType$Companion$1;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$RepromptType$Companion$1;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$RepromptType$Companion$1;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$RepromptType$Companion$1;->invoke()Lkotlinx/serialization/KSerializer; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Type; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Type;->$values()[Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Type; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Type;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Type;->(Ljava/lang/String;I)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Type;->access$get$cachedSerializer$delegate$cp()Lkotlin/Lazy; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Type;->values()[Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Type; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Type$Companion; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Type$Companion;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Type$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Type$Companion;->get$cachedSerializer()Lkotlinx/serialization/KSerializer; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Type$Companion;->serializer()Lkotlinx/serialization/KSerializer; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Type$Companion$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Type$Companion$1;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Type$Companion$1;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Type$Companion$1;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipher$Type$Companion$1;->invoke()Lkotlinx/serialization/KSerializer; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipherRepositoryImpl; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipherRepositoryImpl;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipherRepositoryImpl;->(Lcom/artemchep/keyguard/core/store/DatabaseManager;Lkotlinx/coroutines/CoroutineDispatcher;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipherRepositoryImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipherRepositoryImpl;->access$getDispatcher$p(Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipherRepositoryImpl;)Lkotlinx/coroutines/CoroutineDispatcher; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipherRepositoryImpl;->get()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipherRepositoryImpl$get$$inlined$flatMapLatest$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipherRepositoryImpl$get$$inlined$flatMapLatest$1;->(Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipherRepositoryImpl;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipherRepositoryImpl$get$$inlined$flatMapLatest$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipherRepositoryImpl$get$$inlined$flatMapLatest$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipherRepositoryImpl$get$$inlined$flatMapLatest$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipherRepositoryImpl$get$1$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipherRepositoryImpl$get$1$1;->(Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipherRepositoryImpl$get$lambda$2$$inlined$map$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipherRepositoryImpl$get$lambda$2$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipherRepositoryImpl$get$lambda$2$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipherRepositoryImpl$get$lambda$2$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipherRepositoryImpl$get$lambda$2$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipherRepositoryImpl$get$lambda$2$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipherRepositoryImpl$get$lambda$2$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipherRepositoryImpl$get$lambda$2$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipherRepositoryImpl$get$lambda$2$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipherRepositoryImpl$special$$inlined$instance$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipherRepositoryImpl$special$$inlined$instance$1;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipherRepositoryImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCipherRepositoryImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollection; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollection;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollection$$serializer; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollection$$serializer;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollection$$serializer;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollection$Companion; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollection$Companion;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollection$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollection$Companion;->serializer()Lkotlinx/serialization/KSerializer; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollectionRepositoryImpl; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollectionRepositoryImpl;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollectionRepositoryImpl;->(Lcom/artemchep/keyguard/core/store/DatabaseManager;Lkotlinx/coroutines/CoroutineDispatcher;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollectionRepositoryImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollectionRepositoryImpl;->access$getDispatcher$p(Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollectionRepositoryImpl;)Lkotlinx/coroutines/CoroutineDispatcher; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollectionRepositoryImpl;->get()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollectionRepositoryImpl$get$$inlined$flatMapLatest$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollectionRepositoryImpl$get$$inlined$flatMapLatest$1;->(Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollectionRepositoryImpl;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollectionRepositoryImpl$get$$inlined$flatMapLatest$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollectionRepositoryImpl$get$$inlined$flatMapLatest$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollectionRepositoryImpl$get$$inlined$flatMapLatest$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollectionRepositoryImpl$get$lambda$2$$inlined$map$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollectionRepositoryImpl$get$lambda$2$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollectionRepositoryImpl$get$lambda$2$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollectionRepositoryImpl$get$lambda$2$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollectionRepositoryImpl$get$lambda$2$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollectionRepositoryImpl$get$lambda$2$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollectionRepositoryImpl$get$lambda$2$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollectionRepositoryImpl$get$lambda$2$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollectionRepositoryImpl$get$lambda$2$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollectionRepositoryImpl$special$$inlined$instance$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollectionRepositoryImpl$special$$inlined$instance$1;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollectionRepositoryImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenCollectionRepositoryImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolder; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolder;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolder$$serializer; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolder$$serializer;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolder$$serializer;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolder$Companion; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolder$Companion;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolder$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolder$Companion;->serializer()Lkotlinx/serialization/KSerializer; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolderRepositoryImpl; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolderRepositoryImpl;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolderRepositoryImpl;->(Lcom/artemchep/keyguard/core/store/DatabaseManager;Lkotlinx/coroutines/CoroutineDispatcher;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolderRepositoryImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolderRepositoryImpl;->access$getDispatcher$p(Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolderRepositoryImpl;)Lkotlinx/coroutines/CoroutineDispatcher; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolderRepositoryImpl;->get()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolderRepositoryImpl$get$$inlined$flatMapLatest$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolderRepositoryImpl$get$$inlined$flatMapLatest$1;->(Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolderRepositoryImpl;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolderRepositoryImpl$get$$inlined$flatMapLatest$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolderRepositoryImpl$get$$inlined$flatMapLatest$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolderRepositoryImpl$get$$inlined$flatMapLatest$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolderRepositoryImpl$get$lambda$2$$inlined$map$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolderRepositoryImpl$get$lambda$2$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolderRepositoryImpl$get$lambda$2$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolderRepositoryImpl$get$lambda$2$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolderRepositoryImpl$get$lambda$2$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolderRepositoryImpl$get$lambda$2$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolderRepositoryImpl$get$lambda$2$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolderRepositoryImpl$get$lambda$2$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolderRepositoryImpl$get$lambda$2$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolderRepositoryImpl$special$$inlined$instance$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolderRepositoryImpl$special$$inlined$instance$1;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolderRepositoryImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenFolderRepositoryImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenMeta; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenMeta;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenMeta$$serializer; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenMeta$$serializer;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenMeta$$serializer;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenMeta$Companion; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenMeta$Companion;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenMeta$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenMeta$Companion;->serializer()Lkotlinx/serialization/KSerializer; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenMeta$LastSyncResult; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenMeta$LastSyncResult$Failure; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenMeta$LastSyncResult$Failure$$serializer; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenMeta$LastSyncResult$Failure$$serializer;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenMeta$LastSyncResult$Failure$$serializer;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenMeta$LastSyncResult$Failure$$serializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenMeta$LastSyncResult$Success; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenMeta$LastSyncResult$Success;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenMeta$LastSyncResult$Success;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenMeta$LastSyncResult$Success$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenMeta$LastSyncResult$Success$1;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenMeta$LastSyncResult$Success$1;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenMetaRepositoryImpl; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenMetaRepositoryImpl;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenMetaRepositoryImpl;->(Lcom/artemchep/keyguard/core/store/DatabaseManager;Lkotlinx/coroutines/CoroutineDispatcher;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenMetaRepositoryImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenMetaRepositoryImpl;->access$getDispatcher$p(Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenMetaRepositoryImpl;)Lkotlinx/coroutines/CoroutineDispatcher; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenMetaRepositoryImpl;->get()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenMetaRepositoryImpl$get$$inlined$flatMapLatest$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenMetaRepositoryImpl$get$$inlined$flatMapLatest$1;->(Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenMetaRepositoryImpl;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenMetaRepositoryImpl$get$$inlined$flatMapLatest$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenMetaRepositoryImpl$get$$inlined$flatMapLatest$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenMetaRepositoryImpl$get$$inlined$flatMapLatest$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenMetaRepositoryImpl$get$lambda$2$$inlined$map$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenMetaRepositoryImpl$get$lambda$2$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenMetaRepositoryImpl$get$lambda$2$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenMetaRepositoryImpl$get$lambda$2$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenMetaRepositoryImpl$get$lambda$2$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenMetaRepositoryImpl$get$lambda$2$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenMetaRepositoryImpl$get$lambda$2$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenMetaRepositoryImpl$get$lambda$2$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenMetaRepositoryImpl$get$lambda$2$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenMetaRepositoryImpl$special$$inlined$instance$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenMetaRepositoryImpl$special$$inlined$instance$1;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenMetaRepositoryImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenMetaRepositoryImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganization; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganization;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganization$$serializer; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganization$$serializer;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganization$$serializer;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganization$Companion; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganization$Companion;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganization$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganization$Companion;->serializer()Lkotlinx/serialization/KSerializer; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganizationRepositoryImpl; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganizationRepositoryImpl;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganizationRepositoryImpl;->(Lcom/artemchep/keyguard/core/store/DatabaseManager;Lkotlinx/coroutines/CoroutineDispatcher;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganizationRepositoryImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganizationRepositoryImpl;->access$getDispatcher$p(Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganizationRepositoryImpl;)Lkotlinx/coroutines/CoroutineDispatcher; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganizationRepositoryImpl;->get()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganizationRepositoryImpl$get$$inlined$flatMapLatest$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganizationRepositoryImpl$get$$inlined$flatMapLatest$1;->(Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganizationRepositoryImpl;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganizationRepositoryImpl$get$$inlined$flatMapLatest$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganizationRepositoryImpl$get$$inlined$flatMapLatest$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganizationRepositoryImpl$get$$inlined$flatMapLatest$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganizationRepositoryImpl$get$lambda$2$$inlined$map$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganizationRepositoryImpl$get$lambda$2$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganizationRepositoryImpl$get$lambda$2$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganizationRepositoryImpl$get$lambda$2$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganizationRepositoryImpl$get$lambda$2$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganizationRepositoryImpl$get$lambda$2$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganizationRepositoryImpl$get$lambda$2$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganizationRepositoryImpl$get$lambda$2$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganizationRepositoryImpl$get$lambda$2$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganizationRepositoryImpl$special$$inlined$instance$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganizationRepositoryImpl$special$$inlined$instance$1;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganizationRepositoryImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenOrganizationRepositoryImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfile; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfile;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfile$$serializer; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfile$$serializer;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfile$$serializer;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfile$Companion; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfile$Companion;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfile$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfile$Companion;->serializer()Lkotlinx/serialization/KSerializer; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfileRepositoryImpl; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfileRepositoryImpl;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfileRepositoryImpl;->(Lcom/artemchep/keyguard/core/store/DatabaseManager;Lkotlinx/coroutines/CoroutineDispatcher;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfileRepositoryImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfileRepositoryImpl;->access$getDispatcher$p(Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfileRepositoryImpl;)Lkotlinx/coroutines/CoroutineDispatcher; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfileRepositoryImpl;->get()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfileRepositoryImpl$get$$inlined$flatMapLatest$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfileRepositoryImpl$get$$inlined$flatMapLatest$1;->(Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfileRepositoryImpl;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfileRepositoryImpl$get$$inlined$flatMapLatest$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfileRepositoryImpl$get$$inlined$flatMapLatest$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfileRepositoryImpl$get$$inlined$flatMapLatest$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfileRepositoryImpl$get$lambda$2$$inlined$map$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfileRepositoryImpl$get$lambda$2$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfileRepositoryImpl$get$lambda$2$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfileRepositoryImpl$get$lambda$2$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfileRepositoryImpl$get$lambda$2$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfileRepositoryImpl$get$lambda$2$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfileRepositoryImpl$get$lambda$2$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfileRepositoryImpl$get$lambda$2$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfileRepositoryImpl$get$lambda$2$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfileRepositoryImpl$special$$inlined$instance$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfileRepositoryImpl$special$$inlined$instance$1;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfileRepositoryImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenProfileRepositoryImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenSend; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenSend;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenSend$$serializer; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenSend$$serializer;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenSend$$serializer;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenSend$Companion; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenSend$Companion;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenSend$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenSend$Companion;->serializer()Lkotlinx/serialization/KSerializer; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenSend$Type; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenSend$Type;->$values()[Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenSend$Type; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenSend$Type;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenSend$Type;->(Ljava/lang/String;I)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenSend$Type;->access$get$cachedSerializer$delegate$cp()Lkotlin/Lazy; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenSend$Type;->values()[Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenSend$Type; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenSend$Type$Companion; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenSend$Type$Companion;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenSend$Type$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenSend$Type$Companion;->get$cachedSerializer()Lkotlinx/serialization/KSerializer; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenSend$Type$Companion;->serializer()Lkotlinx/serialization/KSerializer; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenSend$Type$Companion$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenSend$Type$Companion$1;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenSend$Type$Companion$1;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenSend$Type$Companion$1;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenSend$Type$Companion$1;->invoke()Lkotlinx/serialization/KSerializer; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenService$Has; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenToken; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenToken;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenToken$$serializer; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenToken$$serializer;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenToken$$serializer;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenToken$Companion; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenToken$Companion;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenToken$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenToken$Companion;->serializer()Lkotlinx/serialization/KSerializer; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenTokenRepositoryImpl; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenTokenRepositoryImpl;->()V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenTokenRepositoryImpl;->(Lcom/artemchep/keyguard/core/store/DatabaseManager;Lkotlinx/coroutines/CoroutineDispatcher;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenTokenRepositoryImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenTokenRepositoryImpl;->access$getDispatcher$p(Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenTokenRepositoryImpl;)Lkotlinx/coroutines/CoroutineDispatcher; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenTokenRepositoryImpl;->get()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenTokenRepositoryImpl;->getSnapshot()Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenTokenRepositoryImpl$get$$inlined$flatMapLatest$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenTokenRepositoryImpl$get$$inlined$flatMapLatest$1;->(Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenTokenRepositoryImpl;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenTokenRepositoryImpl$get$$inlined$flatMapLatest$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenTokenRepositoryImpl$get$$inlined$flatMapLatest$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenTokenRepositoryImpl$get$$inlined$flatMapLatest$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenTokenRepositoryImpl$get$lambda$2$$inlined$map$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenTokenRepositoryImpl$get$lambda$2$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenTokenRepositoryImpl$get$lambda$2$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenTokenRepositoryImpl$get$lambda$2$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenTokenRepositoryImpl$get$lambda$2$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenTokenRepositoryImpl$get$lambda$2$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenTokenRepositoryImpl$get$lambda$2$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenTokenRepositoryImpl$get$lambda$2$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenTokenRepositoryImpl$get$lambda$2$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenTokenRepositoryImpl$special$$inlined$instance$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenTokenRepositoryImpl$special$$inlined$instance$1;->()V +Lcom/artemchep/keyguard/core/store/bitwarden/BitwardenTokenRepositoryImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/core/store/bitwarden/BitwardenTokenRepositoryImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/crypto/CipherEncryptorImpl; +HSPLcom/artemchep/keyguard/crypto/CipherEncryptorImpl;->()V +HSPLcom/artemchep/keyguard/crypto/CipherEncryptorImpl;->(Lcom/artemchep/keyguard/common/service/crypto/CryptoGenerator;Lcom/artemchep/keyguard/common/service/text/Base64Service;)V +HSPLcom/artemchep/keyguard/crypto/CipherEncryptorImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/crypto/CipherEncryptorImpl$Companion; +HSPLcom/artemchep/keyguard/crypto/CipherEncryptorImpl$Companion;->()V +HSPLcom/artemchep/keyguard/crypto/CipherEncryptorImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/crypto/CipherEncryptorImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/crypto/CipherEncryptorImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/crypto/CipherEncryptorImpl$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/crypto/CipherEncryptorImpl$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/crypto/CryptoGeneratorJvm; +HSPLcom/artemchep/keyguard/crypto/CryptoGeneratorJvm;->()V +HSPLcom/artemchep/keyguard/crypto/CryptoGeneratorJvm;->()V +HSPLcom/artemchep/keyguard/crypto/CryptoGeneratorJvm;->getSecureRandom()Ljava/security/SecureRandom; +HSPLcom/artemchep/keyguard/crypto/CryptoGeneratorJvm;->hkdf([B[B[BI)[B +HSPLcom/artemchep/keyguard/crypto/CryptoGeneratorJvm;->pbkdf2([B[BII)[B +HSPLcom/artemchep/keyguard/crypto/CryptoGeneratorJvm;->seed(I)[B +Lcom/artemchep/keyguard/crypto/CryptoGeneratorJvm$Companion; +HSPLcom/artemchep/keyguard/crypto/CryptoGeneratorJvm$Companion;->()V +HSPLcom/artemchep/keyguard/crypto/CryptoGeneratorJvm$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/crypto/CryptoGeneratorJvm$secureRandom$2; +HSPLcom/artemchep/keyguard/crypto/CryptoGeneratorJvm$secureRandom$2;->()V +HSPLcom/artemchep/keyguard/crypto/CryptoGeneratorJvm$secureRandom$2;->()V +HSPLcom/artemchep/keyguard/crypto/CryptoGeneratorJvm$secureRandom$2;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/crypto/CryptoGeneratorJvm$secureRandom$2;->invoke()Ljava/security/SecureRandom; +Lcom/artemchep/keyguard/crypto/util/HkdfKt; +HSPLcom/artemchep/keyguard/crypto/util/HkdfKt;->hkdf(Lorg/bouncycastle/crypto/Digest;[B[B[BI)[B +HSPLcom/artemchep/keyguard/crypto/util/HkdfKt;->hkdfSha256([B[B[BI)[B +Lcom/artemchep/keyguard/crypto/util/Pbkdf2Kt; +HSPLcom/artemchep/keyguard/crypto/util/Pbkdf2Kt;->pbkdf2(Lorg/bouncycastle/crypto/Digest;[B[BII)[B +HSPLcom/artemchep/keyguard/crypto/util/Pbkdf2Kt;->pbkdf2Sha256([B[BII)[B +Lcom/artemchep/keyguard/data/CipherUsageHistory$Adapter; +HSPLcom/artemchep/keyguard/data/CipherUsageHistory$Adapter;->()V +HSPLcom/artemchep/keyguard/data/CipherUsageHistory$Adapter;->(Lapp/cash/sqldelight/ColumnAdapter;)V +Lcom/artemchep/keyguard/data/CipherUsageHistoryQueries; +HSPLcom/artemchep/keyguard/data/CipherUsageHistoryQueries;->()V +HSPLcom/artemchep/keyguard/data/CipherUsageHistoryQueries;->(Lapp/cash/sqldelight/db/SqlDriver;Lcom/artemchep/keyguard/data/CipherUsageHistory$Adapter;)V +Lcom/artemchep/keyguard/data/Database; +HSPLcom/artemchep/keyguard/data/Database;->()V +Lcom/artemchep/keyguard/data/Database$Companion; +HSPLcom/artemchep/keyguard/data/Database$Companion;->()V +HSPLcom/artemchep/keyguard/data/Database$Companion;->()V +HSPLcom/artemchep/keyguard/data/Database$Companion;->getSchema()Lapp/cash/sqldelight/db/SqlSchema; +HSPLcom/artemchep/keyguard/data/Database$Companion;->invoke(Lapp/cash/sqldelight/db/SqlDriver;Lcom/artemchep/keyguard/data/bitwarden/Account$Adapter;Lcom/artemchep/keyguard/data/pwnage/AccountBreach$Adapter;Lcom/artemchep/keyguard/data/bitwarden/Cipher$Adapter;Lcom/artemchep/keyguard/data/CipherUsageHistory$Adapter;Lcom/artemchep/keyguard/data/bitwarden/Collection$Adapter;Lcom/artemchep/keyguard/data/bitwarden/Folder$Adapter;Lcom/artemchep/keyguard/data/GeneratorEmailRelay$Adapter;Lcom/artemchep/keyguard/data/GeneratorHistory$Adapter;Lcom/artemchep/keyguard/data/bitwarden/Meta$Adapter;Lcom/artemchep/keyguard/data/bitwarden/Organization$Adapter;Lcom/artemchep/keyguard/data/pwnage/PasswordBreach$Adapter;Lcom/artemchep/keyguard/data/bitwarden/Profile$Adapter;Lcom/artemchep/keyguard/data/bitwarden/Send$Adapter;)Lcom/artemchep/keyguard/data/Database; +Lcom/artemchep/keyguard/data/GeneratorEmailRelay$Adapter; +HSPLcom/artemchep/keyguard/data/GeneratorEmailRelay$Adapter;->()V +HSPLcom/artemchep/keyguard/data/GeneratorEmailRelay$Adapter;->(Lapp/cash/sqldelight/ColumnAdapter;)V +Lcom/artemchep/keyguard/data/GeneratorEmailRelayQueries; +HSPLcom/artemchep/keyguard/data/GeneratorEmailRelayQueries;->()V +HSPLcom/artemchep/keyguard/data/GeneratorEmailRelayQueries;->(Lapp/cash/sqldelight/db/SqlDriver;Lcom/artemchep/keyguard/data/GeneratorEmailRelay$Adapter;)V +Lcom/artemchep/keyguard/data/GeneratorHistory$Adapter; +HSPLcom/artemchep/keyguard/data/GeneratorHistory$Adapter;->()V +HSPLcom/artemchep/keyguard/data/GeneratorHistory$Adapter;->(Lapp/cash/sqldelight/ColumnAdapter;)V +Lcom/artemchep/keyguard/data/GeneratorHistoryQueries; +HSPLcom/artemchep/keyguard/data/GeneratorHistoryQueries;->()V +HSPLcom/artemchep/keyguard/data/GeneratorHistoryQueries;->(Lapp/cash/sqldelight/db/SqlDriver;Lcom/artemchep/keyguard/data/GeneratorHistory$Adapter;)V +Lcom/artemchep/keyguard/data/bitwarden/Account$Adapter; +HSPLcom/artemchep/keyguard/data/bitwarden/Account$Adapter;->()V +HSPLcom/artemchep/keyguard/data/bitwarden/Account$Adapter;->(Lapp/cash/sqldelight/ColumnAdapter;)V +Lcom/artemchep/keyguard/data/bitwarden/AccountQueries; +HSPLcom/artemchep/keyguard/data/bitwarden/AccountQueries;->()V +HSPLcom/artemchep/keyguard/data/bitwarden/AccountQueries;->(Lapp/cash/sqldelight/db/SqlDriver;Lcom/artemchep/keyguard/data/bitwarden/Account$Adapter;)V +HSPLcom/artemchep/keyguard/data/bitwarden/AccountQueries;->get()Lapp/cash/sqldelight/Query; +HSPLcom/artemchep/keyguard/data/bitwarden/AccountQueries;->get(Lkotlin/jvm/functions/Function2;)Lapp/cash/sqldelight/Query; +Lcom/artemchep/keyguard/data/bitwarden/AccountQueries$get$1; +HSPLcom/artemchep/keyguard/data/bitwarden/AccountQueries$get$1;->(Lkotlin/jvm/functions/Function2;Lcom/artemchep/keyguard/data/bitwarden/AccountQueries;)V +Lcom/artemchep/keyguard/data/bitwarden/AccountQueries$get$2; +HSPLcom/artemchep/keyguard/data/bitwarden/AccountQueries$get$2;->()V +HSPLcom/artemchep/keyguard/data/bitwarden/AccountQueries$get$2;->()V +Lcom/artemchep/keyguard/data/bitwarden/Cipher; +Lcom/artemchep/keyguard/data/bitwarden/Cipher$Adapter; +HSPLcom/artemchep/keyguard/data/bitwarden/Cipher$Adapter;->()V +HSPLcom/artemchep/keyguard/data/bitwarden/Cipher$Adapter;->(Lapp/cash/sqldelight/ColumnAdapter;)V +Lcom/artemchep/keyguard/data/bitwarden/CipherQueries; +HSPLcom/artemchep/keyguard/data/bitwarden/CipherQueries;->()V +HSPLcom/artemchep/keyguard/data/bitwarden/CipherQueries;->(Lapp/cash/sqldelight/db/SqlDriver;Lcom/artemchep/keyguard/data/bitwarden/Cipher$Adapter;)V +HSPLcom/artemchep/keyguard/data/bitwarden/CipherQueries;->get()Lapp/cash/sqldelight/Query; +HSPLcom/artemchep/keyguard/data/bitwarden/CipherQueries;->get(Lkotlin/jvm/functions/Function4;)Lapp/cash/sqldelight/Query; +Lcom/artemchep/keyguard/data/bitwarden/CipherQueries$get$1; +HSPLcom/artemchep/keyguard/data/bitwarden/CipherQueries$get$1;->(Lkotlin/jvm/functions/Function4;Lcom/artemchep/keyguard/data/bitwarden/CipherQueries;)V +Lcom/artemchep/keyguard/data/bitwarden/CipherQueries$get$2; +HSPLcom/artemchep/keyguard/data/bitwarden/CipherQueries$get$2;->()V +HSPLcom/artemchep/keyguard/data/bitwarden/CipherQueries$get$2;->()V +Lcom/artemchep/keyguard/data/bitwarden/Collection$Adapter; +HSPLcom/artemchep/keyguard/data/bitwarden/Collection$Adapter;->()V +HSPLcom/artemchep/keyguard/data/bitwarden/Collection$Adapter;->(Lapp/cash/sqldelight/ColumnAdapter;)V +Lcom/artemchep/keyguard/data/bitwarden/CollectionQueries; +HSPLcom/artemchep/keyguard/data/bitwarden/CollectionQueries;->()V +HSPLcom/artemchep/keyguard/data/bitwarden/CollectionQueries;->(Lapp/cash/sqldelight/db/SqlDriver;Lcom/artemchep/keyguard/data/bitwarden/Collection$Adapter;)V +HSPLcom/artemchep/keyguard/data/bitwarden/CollectionQueries;->get()Lapp/cash/sqldelight/Query; +HSPLcom/artemchep/keyguard/data/bitwarden/CollectionQueries;->get(Lkotlin/jvm/functions/Function3;)Lapp/cash/sqldelight/Query; +Lcom/artemchep/keyguard/data/bitwarden/CollectionQueries$get$1; +HSPLcom/artemchep/keyguard/data/bitwarden/CollectionQueries$get$1;->(Lkotlin/jvm/functions/Function3;Lcom/artemchep/keyguard/data/bitwarden/CollectionQueries;)V +Lcom/artemchep/keyguard/data/bitwarden/CollectionQueries$get$2; +HSPLcom/artemchep/keyguard/data/bitwarden/CollectionQueries$get$2;->()V +HSPLcom/artemchep/keyguard/data/bitwarden/CollectionQueries$get$2;->()V +Lcom/artemchep/keyguard/data/bitwarden/Folder$Adapter; +HSPLcom/artemchep/keyguard/data/bitwarden/Folder$Adapter;->()V +HSPLcom/artemchep/keyguard/data/bitwarden/Folder$Adapter;->(Lapp/cash/sqldelight/ColumnAdapter;)V +Lcom/artemchep/keyguard/data/bitwarden/FolderQueries; +HSPLcom/artemchep/keyguard/data/bitwarden/FolderQueries;->()V +HSPLcom/artemchep/keyguard/data/bitwarden/FolderQueries;->(Lapp/cash/sqldelight/db/SqlDriver;Lcom/artemchep/keyguard/data/bitwarden/Folder$Adapter;)V +HSPLcom/artemchep/keyguard/data/bitwarden/FolderQueries;->get()Lapp/cash/sqldelight/Query; +HSPLcom/artemchep/keyguard/data/bitwarden/FolderQueries;->get(Lkotlin/jvm/functions/Function3;)Lapp/cash/sqldelight/Query; +Lcom/artemchep/keyguard/data/bitwarden/FolderQueries$get$1; +HSPLcom/artemchep/keyguard/data/bitwarden/FolderQueries$get$1;->(Lkotlin/jvm/functions/Function3;Lcom/artemchep/keyguard/data/bitwarden/FolderQueries;)V +Lcom/artemchep/keyguard/data/bitwarden/FolderQueries$get$2; +HSPLcom/artemchep/keyguard/data/bitwarden/FolderQueries$get$2;->()V +HSPLcom/artemchep/keyguard/data/bitwarden/FolderQueries$get$2;->()V +Lcom/artemchep/keyguard/data/bitwarden/Meta$Adapter; +HSPLcom/artemchep/keyguard/data/bitwarden/Meta$Adapter;->()V +HSPLcom/artemchep/keyguard/data/bitwarden/Meta$Adapter;->(Lapp/cash/sqldelight/ColumnAdapter;)V +Lcom/artemchep/keyguard/data/bitwarden/MetaQueries; +HSPLcom/artemchep/keyguard/data/bitwarden/MetaQueries;->()V +HSPLcom/artemchep/keyguard/data/bitwarden/MetaQueries;->(Lapp/cash/sqldelight/db/SqlDriver;Lcom/artemchep/keyguard/data/bitwarden/Meta$Adapter;)V +HSPLcom/artemchep/keyguard/data/bitwarden/MetaQueries;->get()Lapp/cash/sqldelight/Query; +HSPLcom/artemchep/keyguard/data/bitwarden/MetaQueries;->get(Lkotlin/jvm/functions/Function2;)Lapp/cash/sqldelight/Query; +Lcom/artemchep/keyguard/data/bitwarden/MetaQueries$get$1; +HSPLcom/artemchep/keyguard/data/bitwarden/MetaQueries$get$1;->(Lkotlin/jvm/functions/Function2;Lcom/artemchep/keyguard/data/bitwarden/MetaQueries;)V +Lcom/artemchep/keyguard/data/bitwarden/MetaQueries$get$2; +HSPLcom/artemchep/keyguard/data/bitwarden/MetaQueries$get$2;->()V +HSPLcom/artemchep/keyguard/data/bitwarden/MetaQueries$get$2;->()V +Lcom/artemchep/keyguard/data/bitwarden/Organization$Adapter; +HSPLcom/artemchep/keyguard/data/bitwarden/Organization$Adapter;->()V +HSPLcom/artemchep/keyguard/data/bitwarden/Organization$Adapter;->(Lapp/cash/sqldelight/ColumnAdapter;)V +Lcom/artemchep/keyguard/data/bitwarden/OrganizationQueries; +HSPLcom/artemchep/keyguard/data/bitwarden/OrganizationQueries;->()V +HSPLcom/artemchep/keyguard/data/bitwarden/OrganizationQueries;->(Lapp/cash/sqldelight/db/SqlDriver;Lcom/artemchep/keyguard/data/bitwarden/Organization$Adapter;)V +HSPLcom/artemchep/keyguard/data/bitwarden/OrganizationQueries;->get()Lapp/cash/sqldelight/Query; +HSPLcom/artemchep/keyguard/data/bitwarden/OrganizationQueries;->get(Lkotlin/jvm/functions/Function3;)Lapp/cash/sqldelight/Query; +Lcom/artemchep/keyguard/data/bitwarden/OrganizationQueries$get$1; +HSPLcom/artemchep/keyguard/data/bitwarden/OrganizationQueries$get$1;->(Lkotlin/jvm/functions/Function3;Lcom/artemchep/keyguard/data/bitwarden/OrganizationQueries;)V +Lcom/artemchep/keyguard/data/bitwarden/OrganizationQueries$get$2; +HSPLcom/artemchep/keyguard/data/bitwarden/OrganizationQueries$get$2;->()V +HSPLcom/artemchep/keyguard/data/bitwarden/OrganizationQueries$get$2;->()V +Lcom/artemchep/keyguard/data/bitwarden/Profile$Adapter; +HSPLcom/artemchep/keyguard/data/bitwarden/Profile$Adapter;->()V +HSPLcom/artemchep/keyguard/data/bitwarden/Profile$Adapter;->(Lapp/cash/sqldelight/ColumnAdapter;)V +Lcom/artemchep/keyguard/data/bitwarden/ProfileQueries; +HSPLcom/artemchep/keyguard/data/bitwarden/ProfileQueries;->()V +HSPLcom/artemchep/keyguard/data/bitwarden/ProfileQueries;->(Lapp/cash/sqldelight/db/SqlDriver;Lcom/artemchep/keyguard/data/bitwarden/Profile$Adapter;)V +HSPLcom/artemchep/keyguard/data/bitwarden/ProfileQueries;->get()Lapp/cash/sqldelight/Query; +HSPLcom/artemchep/keyguard/data/bitwarden/ProfileQueries;->get(Lkotlin/jvm/functions/Function3;)Lapp/cash/sqldelight/Query; +Lcom/artemchep/keyguard/data/bitwarden/ProfileQueries$get$1; +HSPLcom/artemchep/keyguard/data/bitwarden/ProfileQueries$get$1;->(Lkotlin/jvm/functions/Function3;Lcom/artemchep/keyguard/data/bitwarden/ProfileQueries;)V +Lcom/artemchep/keyguard/data/bitwarden/ProfileQueries$get$2; +HSPLcom/artemchep/keyguard/data/bitwarden/ProfileQueries$get$2;->()V +HSPLcom/artemchep/keyguard/data/bitwarden/ProfileQueries$get$2;->()V +Lcom/artemchep/keyguard/data/bitwarden/Send$Adapter; +HSPLcom/artemchep/keyguard/data/bitwarden/Send$Adapter;->()V +HSPLcom/artemchep/keyguard/data/bitwarden/Send$Adapter;->(Lapp/cash/sqldelight/ColumnAdapter;)V +Lcom/artemchep/keyguard/data/bitwarden/SendQueries; +HSPLcom/artemchep/keyguard/data/bitwarden/SendQueries;->()V +HSPLcom/artemchep/keyguard/data/bitwarden/SendQueries;->(Lapp/cash/sqldelight/db/SqlDriver;Lcom/artemchep/keyguard/data/bitwarden/Send$Adapter;)V +Lcom/artemchep/keyguard/data/common/DatabaseImpl; +HSPLcom/artemchep/keyguard/data/common/DatabaseImpl;->(Lapp/cash/sqldelight/db/SqlDriver;Lcom/artemchep/keyguard/data/bitwarden/Account$Adapter;Lcom/artemchep/keyguard/data/pwnage/AccountBreach$Adapter;Lcom/artemchep/keyguard/data/bitwarden/Cipher$Adapter;Lcom/artemchep/keyguard/data/CipherUsageHistory$Adapter;Lcom/artemchep/keyguard/data/bitwarden/Collection$Adapter;Lcom/artemchep/keyguard/data/bitwarden/Folder$Adapter;Lcom/artemchep/keyguard/data/GeneratorEmailRelay$Adapter;Lcom/artemchep/keyguard/data/GeneratorHistory$Adapter;Lcom/artemchep/keyguard/data/bitwarden/Meta$Adapter;Lcom/artemchep/keyguard/data/bitwarden/Organization$Adapter;Lcom/artemchep/keyguard/data/pwnage/PasswordBreach$Adapter;Lcom/artemchep/keyguard/data/bitwarden/Profile$Adapter;Lcom/artemchep/keyguard/data/bitwarden/Send$Adapter;)V +HSPLcom/artemchep/keyguard/data/common/DatabaseImpl;->getAccountQueries()Lcom/artemchep/keyguard/data/bitwarden/AccountQueries; +HSPLcom/artemchep/keyguard/data/common/DatabaseImpl;->getCipherQueries()Lcom/artemchep/keyguard/data/bitwarden/CipherQueries; +HSPLcom/artemchep/keyguard/data/common/DatabaseImpl;->getCollectionQueries()Lcom/artemchep/keyguard/data/bitwarden/CollectionQueries; +HSPLcom/artemchep/keyguard/data/common/DatabaseImpl;->getFolderQueries()Lcom/artemchep/keyguard/data/bitwarden/FolderQueries; +HSPLcom/artemchep/keyguard/data/common/DatabaseImpl;->getMetaQueries()Lcom/artemchep/keyguard/data/bitwarden/MetaQueries; +HSPLcom/artemchep/keyguard/data/common/DatabaseImpl;->getOrganizationQueries()Lcom/artemchep/keyguard/data/bitwarden/OrganizationQueries; +HSPLcom/artemchep/keyguard/data/common/DatabaseImpl;->getProfileQueries()Lcom/artemchep/keyguard/data/bitwarden/ProfileQueries; +Lcom/artemchep/keyguard/data/common/DatabaseImpl$Schema; +HSPLcom/artemchep/keyguard/data/common/DatabaseImpl$Schema;->()V +HSPLcom/artemchep/keyguard/data/common/DatabaseImpl$Schema;->()V +HSPLcom/artemchep/keyguard/data/common/DatabaseImpl$Schema;->create(Lapp/cash/sqldelight/db/SqlDriver;)Lapp/cash/sqldelight/db/QueryResult; +HSPLcom/artemchep/keyguard/data/common/DatabaseImpl$Schema;->create-0iQ1-z0(Lapp/cash/sqldelight/db/SqlDriver;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/data/common/DatabaseImpl$Schema;->getVersion()J +Lcom/artemchep/keyguard/data/common/DatabaseImplKt; +HSPLcom/artemchep/keyguard/data/common/DatabaseImplKt;->getSchema(Lkotlin/reflect/KClass;)Lapp/cash/sqldelight/db/SqlSchema; +HSPLcom/artemchep/keyguard/data/common/DatabaseImplKt;->newInstance(Lkotlin/reflect/KClass;Lapp/cash/sqldelight/db/SqlDriver;Lcom/artemchep/keyguard/data/bitwarden/Account$Adapter;Lcom/artemchep/keyguard/data/pwnage/AccountBreach$Adapter;Lcom/artemchep/keyguard/data/bitwarden/Cipher$Adapter;Lcom/artemchep/keyguard/data/CipherUsageHistory$Adapter;Lcom/artemchep/keyguard/data/bitwarden/Collection$Adapter;Lcom/artemchep/keyguard/data/bitwarden/Folder$Adapter;Lcom/artemchep/keyguard/data/GeneratorEmailRelay$Adapter;Lcom/artemchep/keyguard/data/GeneratorHistory$Adapter;Lcom/artemchep/keyguard/data/bitwarden/Meta$Adapter;Lcom/artemchep/keyguard/data/bitwarden/Organization$Adapter;Lcom/artemchep/keyguard/data/pwnage/PasswordBreach$Adapter;Lcom/artemchep/keyguard/data/bitwarden/Profile$Adapter;Lcom/artemchep/keyguard/data/bitwarden/Send$Adapter;)Lcom/artemchep/keyguard/data/Database; +Lcom/artemchep/keyguard/data/pwnage/AccountBreach$Adapter; +HSPLcom/artemchep/keyguard/data/pwnage/AccountBreach$Adapter;->()V +HSPLcom/artemchep/keyguard/data/pwnage/AccountBreach$Adapter;->(Lapp/cash/sqldelight/ColumnAdapter;Lapp/cash/sqldelight/ColumnAdapter;)V +Lcom/artemchep/keyguard/data/pwnage/AccountBreachQueries; +HSPLcom/artemchep/keyguard/data/pwnage/AccountBreachQueries;->()V +HSPLcom/artemchep/keyguard/data/pwnage/AccountBreachQueries;->(Lapp/cash/sqldelight/db/SqlDriver;Lcom/artemchep/keyguard/data/pwnage/AccountBreach$Adapter;)V +Lcom/artemchep/keyguard/data/pwnage/PasswordBreach$Adapter; +HSPLcom/artemchep/keyguard/data/pwnage/PasswordBreach$Adapter;->()V +HSPLcom/artemchep/keyguard/data/pwnage/PasswordBreach$Adapter;->(Lapp/cash/sqldelight/ColumnAdapter;)V +Lcom/artemchep/keyguard/data/pwnage/PasswordBreachQueries; +HSPLcom/artemchep/keyguard/data/pwnage/PasswordBreachQueries;->()V +HSPLcom/artemchep/keyguard/data/pwnage/PasswordBreachQueries;->(Lapp/cash/sqldelight/db/SqlDriver;Lcom/artemchep/keyguard/data/pwnage/PasswordBreach$Adapter;)V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt;->access$installFingerprintRepo(Lorg/kodein/di/DI$Builder;)V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt;->access$installKeyRepo(Lorg/kodein/di/DI$Builder;)V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt;->access$installSessionMetadataRepo(Lorg/kodein/di/DI$Builder;)V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt;->access$installSessionRepo(Lorg/kodein/di/DI$Builder;)V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt;->access$installSettingsRepo(Lorg/kodein/di/DI$Builder;)V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt;->globalModuleJvm()Lorg/kodein/di/DI$Module; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt;->installFingerprintRepo(Lorg/kodein/di/DI$Builder;)V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt;->installKeyRepo(Lorg/kodein/di/DI$Builder;)V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt;->installSessionMetadataRepo(Lorg/kodein/di/DI$Builder;)V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt;->installSessionRepo(Lorg/kodein/di/DI$Builder;)V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt;->installSettingsRepo(Lorg/kodein/di/DI$Builder;)V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1;->invoke(Lorg/kodein/di/DI$Builder;)V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$1;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$1;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$1;->invoke(Lorg/kodein/di/DirectDI;)Lkotlinx/coroutines/CoroutineDispatcher; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$10; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$10;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$10;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$100; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$100;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$100;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$101; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$101;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$101;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$102; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$102;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$102;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$103; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$103;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$103;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$104; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$104;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$104;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$105; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$105;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$105;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$106; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$106;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$106;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$107; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$107;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$107;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$107;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$107;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/AppWorker; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$108; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$108;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$108;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$108;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$108;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetVaultSession; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$109; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$109;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$109;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$109;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$109;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetVaultPersist; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$11; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$11;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$11;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$11;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$11;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/UnlockUseCase; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$110; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$110;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$110;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$111; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$111;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$111;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$112; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$112;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$112;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$113; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$113;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$113;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$113;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$113;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/MessageHub; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$113$invoke$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$113$invoke$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$114; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$114;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$114;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$114;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$114;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/ShowMessage; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$114$invoke$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$114$invoke$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$115; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$115;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$115;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$115;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$115;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/impl/MessageHubImpl; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$116; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$116;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$116;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$117; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$117;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$117;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$118; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$118;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$118;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$118;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$118;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/WindowCoroutineScope; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$119; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$119;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$119;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$119;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$119;->invoke(Lorg/kodein/di/DirectDI;)Lkotlinx/serialization/json/Json; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$119$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$119$1;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$119$1;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$119$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$119$1;->invoke(Lkotlinx/serialization/json/JsonBuilder;)V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$119$1$1$1$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$119$1$1$1$1;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$119$1$1$1$1;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$12; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$12;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$12;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$12;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$12;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/service/text/Base64Service; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$120; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$120;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$120;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$120;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$120;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/service/crypto/CipherEncryptor; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$121; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$121;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$121;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$122; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$122;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$122;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$123; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$123;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$123;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$124; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$124;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$124;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$124;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$124;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/service/deeplink/DeeplinkService; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$125; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$125;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$125;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$125;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$125;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/service/wordlist/WordlistService; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$126; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$126;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$126;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$127; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$127;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$127;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$128; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$128;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$128;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$129; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$129;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$129;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$13; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$13;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$13;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$13;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$13;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/service/text/Base32Service; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$130; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$130;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$130;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$131; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$131;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$131;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$132; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$132;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$132;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$132;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$132;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/service/tld/TldService; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$133; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$133;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$133;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$134; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$134;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$134;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$135; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$135;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$135;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$135;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$135;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/service/id/IdRepository; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$135$invoke$$inlined$instance$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$135$invoke$$inlined$instance$1;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$135$invoke$$inlined$instance$2; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$135$invoke$$inlined$instance$2;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$136; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$136;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$136;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$136;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$136;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/service/state/StateRepository; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$136$invoke$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$136$invoke$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$136$invoke$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$136$invoke$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$136$invoke$$inlined$instance$default$3; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$136$invoke$$inlined$instance$default$3;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$137; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$137;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$137;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$137;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$137;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/DeviceIdUseCase; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$138; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$138;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$138;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$138;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$138;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/DeviceEncryptionKeyUseCase; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$139; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$139;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$139;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$14; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$14;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$14;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$14;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$14;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetTotpCode; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$140; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$140;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$140;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$141; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$141;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$141;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$141;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$141;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetPasswordStrength; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$142; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$142;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$142;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$143; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$143;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$143;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$143;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$143;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/DateFormatter; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$144; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$144;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$144;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$145; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$145;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$145;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$145;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$145;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/service/crypto/CryptoGenerator; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$146; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$146;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$146;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$146;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$146;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/service/totp/TotpService; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147;->invoke(Lorg/kodein/di/DirectDI;)Lio/ktor/client/HttpClient; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1;->(Lokhttp3/OkHttpClient;Lkotlinx/serialization/json/Json;)V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1;->invoke(Lio/ktor/client/HttpClientConfig;)V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$1;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$1;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$1;->invoke(Lio/ktor/client/plugins/UserAgentConfig;)V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$2; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$2;->(Lokhttp3/OkHttpClient;)V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$2;->invoke(Lio/ktor/client/engine/okhttp/OkHttpConfig;)V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$3; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$3;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$3;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$3;->invoke(Lio/ktor/client/plugins/logging/LoggingConfig;)V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$4; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$4;->(Lkotlinx/serialization/json/Json;)V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$4;->invoke(Lio/ktor/client/plugins/contentnegotiation/ContentNegotiationConfig;)V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$4;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$5; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$5;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$5;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$5;->invoke(Lio/ktor/client/plugins/websocket/WebSockets$Config;)V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$5;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$6; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$6;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$6;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$6;->invoke(Lio/ktor/client/plugins/cache/HttpCache$Config;)V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$6;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$7; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$7;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$7;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$7;->invoke(Lio/ktor/client/plugins/HttpRequestRetryConfig;)V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$7;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$7$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$7$1;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$1$7$1;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$invoke$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$invoke$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$invoke$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$147$invoke$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$148; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$148;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$148;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$149; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$149;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$149;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$149;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$149;->invoke(Lorg/kodein/di/DirectDI;)Lokhttp3/OkHttpClient; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$149$$ExternalSyntheticLambda0; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$149$$ExternalSyntheticLambda0;->(Lcom/artemchep/keyguard/common/service/logging/LogRepository;)V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$149$invoke$lambda$2$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$149$invoke$lambda$2$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$15; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$15;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$15;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$16; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$16;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$16;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$16;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$16;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetScreenState; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$17; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$17;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$17;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$17;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$17;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetConcealFields; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$18; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$18;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$18;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$19; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$19;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$19;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$2; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$2;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$2;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$20; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$20;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$20;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$21; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$21;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$21;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$21;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$21;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetBiometricTimeout; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$22; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$22;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$22;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$23; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$23;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$23;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$24; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$24;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$24;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$25; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$25;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$25;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$26; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$26;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$26;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$27; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$27;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$27;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$28; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$28;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$28;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$29; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$29;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$29;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$3; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$3;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$3;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$3;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/AuthConfirmMasterKeyUseCase; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$30; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$30;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$30;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$31; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$31;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$31;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$32; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$32;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$32;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$33; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$33;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$33;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$34; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$34;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$34;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$35; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$35;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$35;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$36; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$36;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$36;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$37; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$37;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$37;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$37;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$37;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/PutVaultSession; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$38; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$38;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$38;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$38;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$38;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/ClearVaultSession; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$39; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$39;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$39;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$4; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$4;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$4;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$4;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$4;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/AuthGenerateMasterKeyUseCase; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$40; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$40;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$40;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$41; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$41;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$41;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$42; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$42;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$42;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$43; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$43;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$43;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$44; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$44;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$44;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$44;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$44;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/PutScreenState; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$45; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$45;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$45;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$45;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$45;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetAllowScreenshots; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$46; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$46;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$46;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$46;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$46;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetAllowTwoPanelLayoutInLandscape; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$47; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$47;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$47;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$47;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$47;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetAllowTwoPanelLayoutInPortrait; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$48; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$48;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$48;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$48;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$48;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetVaultLockAfterScreenOff; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$49; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$49;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$49;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$5; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$5;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$5;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$5;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$5;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/BiometricKeyDecryptUseCase; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$50; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$50;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$50;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$50;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$50;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/PasskeyTargetCheck; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$51; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$51;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$51;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$52; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$52;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$52;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$52;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$52;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetUseExternalBrowser; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$53; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$53;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$53;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$54; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$54;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$54;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$55; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$55;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$55;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$56; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$56;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$56;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$57; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$57;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$57;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$58; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$58;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$58;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$59; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$59;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$59;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$6; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$6;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$6;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$6;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$6;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/BiometricKeyEncryptUseCase; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$60; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$60;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$60;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$61; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$61;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$61;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$62; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$62;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$62;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$63; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$63;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$63;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$64; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$64;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$64;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$65; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$65;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$65;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$66; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$66;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$66;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$66;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$66;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetNavAnimation; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$67; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$67;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$67;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$67;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$67;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetNavLabel; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$68; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$68;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$68;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$69; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$69;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$69;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$69;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$69;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetFont; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$7; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$7;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$7;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$7;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$7;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GenerateMasterHashUseCase; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$70; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$70;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$70;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$71; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$71;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$71;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$72; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$72;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$72;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$73; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$73;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$73;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$73;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$73;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetTheme; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$74; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$74;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$74;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$74;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$74;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetThemeUseAmoledDark; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$75; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$75;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$75;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$75;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$75;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetColors; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$76; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$76;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$76;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$77; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$77;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$77;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$78; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$78;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$78;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$78;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$78;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/CipherUrlCheck; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$79; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$79;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$79;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$8; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$8;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$8;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$8;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$8;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GenerateMasterKeyUseCase; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$80; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$80;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$80;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$80;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$80;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetCanWrite; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$81; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$81;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$81;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$81;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$81;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetCachePremium; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$82; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$82;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$82;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$82;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$82;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/PutCachePremium; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$83; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$83;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$83;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$84; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$84;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$84;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$85; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$85;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$85;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$86; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$86;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$86;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$87; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$87;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$87;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$88; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$88;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$88;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$89; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$89;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$89;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$9; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$9;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$9;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$9;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$9;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GenerateMasterSaltUseCase; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$90; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$90;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$90;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$91; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$91;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$91;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$91;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$91;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetDebugPremium; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$92; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$92;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$92;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$92;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$92;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetWriteAccess; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$93; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$93;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$93;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$93;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$93;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetDebugScreenDelay; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$94; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$94;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$94;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$94;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$94;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetAppIcons; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$95; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$95;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$95;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$95;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$95;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/usecase/GetWebsiteIcons; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$96; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$96;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$96;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$97; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$97;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$97;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$98; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$98;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$98;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$99; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$99;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$99;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindProvider$default$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindProvider$default$1;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindProvider$default$2; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindProvider$default$2;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindProvider$default$3; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindProvider$default$3;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$1;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$10; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$10;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$100; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$100;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$101; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$101;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$102; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$102;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$103; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$103;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$104; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$104;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$105; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$105;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$106; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$106;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$107; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$107;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$108; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$108;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$109; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$109;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$11; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$11;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$110; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$110;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$111; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$111;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$112; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$112;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$113; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$113;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$114; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$114;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$115; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$115;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$116; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$116;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$117; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$117;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$118; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$118;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$119; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$119;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$12; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$12;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$120; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$120;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$121; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$121;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$122; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$122;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$123; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$123;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$124; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$124;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$125; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$125;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$126; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$126;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$127; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$127;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$128; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$128;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$129; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$129;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$13; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$13;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$130; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$130;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$131; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$131;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$132; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$132;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$133; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$133;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$134; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$134;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$135; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$135;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$136; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$136;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$137; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$137;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$138; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$138;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$139; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$139;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$14; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$14;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$140; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$140;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$141; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$141;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$142; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$142;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$143; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$143;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$144; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$144;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$145; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$145;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$146; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$146;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$15; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$15;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$16; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$16;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$17; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$17;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$18; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$18;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$19; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$19;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$2; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$2;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$20; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$20;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$21; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$21;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$22; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$22;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$23; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$23;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$24; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$24;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$25; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$25;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$26; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$26;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$27; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$27;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$28; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$28;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$29; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$29;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$3; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$3;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$30; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$30;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$31; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$31;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$32; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$32;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$33; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$33;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$34; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$34;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$35; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$35;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$36; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$36;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$37; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$37;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$38; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$38;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$39; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$39;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$4; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$4;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$40; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$40;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$41; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$41;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$42; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$42;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$43; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$43;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$44; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$44;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$45; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$45;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$46; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$46;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$47; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$47;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$48; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$48;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$49; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$49;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$5; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$5;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$50; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$50;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$51; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$51;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$52; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$52;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$53; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$53;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$54; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$54;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$55; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$55;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$56; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$56;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$57; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$57;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$58; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$58;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$59; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$59;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$6; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$6;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$60; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$60;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$61; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$61;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$62; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$62;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$63; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$63;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$64; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$64;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$65; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$65;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$66; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$66;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$67; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$67;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$68; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$68;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$69; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$69;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$7; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$7;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$70; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$70;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$71; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$71;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$72; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$72;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$73; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$73;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$74; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$74;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$75; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$75;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$76; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$76;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$77; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$77;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$78; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$78;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$79; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$79;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$8; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$8;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$80; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$80;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$81; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$81;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$82; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$82;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$83; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$83;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$84; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$84;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$85; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$85;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$86; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$86;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$87; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$87;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$88; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$88;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$89; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$89;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$9; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$9;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$90; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$90;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$91; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$91;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$92; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$92;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$93; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$93;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$94; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$94;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$95; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$95;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$96; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$96;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$97; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$97;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$98; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$98;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$99; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$globalModuleJvm$1$invoke$$inlined$bindSingleton$default$99;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installFingerprintRepo$$inlined$bindProvider$default$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installFingerprintRepo$$inlined$bindProvider$default$1;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installFingerprintRepo$$inlined$bindProvider$default$2; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installFingerprintRepo$$inlined$bindProvider$default$2;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installFingerprintRepo$$inlined$bindSingleton$default$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installFingerprintRepo$$inlined$bindSingleton$default$1;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installFingerprintRepo$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installFingerprintRepo$1;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installFingerprintRepo$1;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installFingerprintRepo$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installFingerprintRepo$1;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/service/vault/impl/FingerprintRepositoryImpl; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installFingerprintRepo$2; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installFingerprintRepo$2;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installFingerprintRepo$2;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installFingerprintRepo$3; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installFingerprintRepo$3;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installFingerprintRepo$3;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installFingerprintRepo$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installFingerprintRepo$3;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/service/vault/FingerprintReadWriteRepository; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installFingerprintRepo$3$invoke$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installFingerprintRepo$3$invoke$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installKeyRepo$$inlined$bindProvider$default$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installKeyRepo$$inlined$bindProvider$default$1;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installKeyRepo$$inlined$bindProvider$default$2; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installKeyRepo$$inlined$bindProvider$default$2;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installKeyRepo$$inlined$bindSingleton$default$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installKeyRepo$$inlined$bindSingleton$default$1;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installKeyRepo$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installKeyRepo$1;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installKeyRepo$1;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installKeyRepo$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installKeyRepo$1;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installKeyRepo$2; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installKeyRepo$2;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installKeyRepo$2;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installKeyRepo$3; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installKeyRepo$3;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installKeyRepo$3;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installKeyRepo$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installKeyRepo$3;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/service/vault/KeyReadWriteRepository; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installKeyRepo$3$invoke$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installKeyRepo$3$invoke$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionMetadataRepo$$inlined$bindProvider$default$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionMetadataRepo$$inlined$bindProvider$default$1;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionMetadataRepo$$inlined$bindProvider$default$2; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionMetadataRepo$$inlined$bindProvider$default$2;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionMetadataRepo$$inlined$bindSingleton$default$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionMetadataRepo$$inlined$bindSingleton$default$1;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionMetadataRepo$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionMetadataRepo$1;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionMetadataRepo$1;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionMetadataRepo$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionMetadataRepo$1;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/service/vault/impl/SessionMetadataRepositoryImpl; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionMetadataRepo$2; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionMetadataRepo$2;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionMetadataRepo$2;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionMetadataRepo$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionMetadataRepo$2;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/service/vault/SessionMetadataReadRepository; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionMetadataRepo$2$invoke$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionMetadataRepo$2$invoke$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionMetadataRepo$3; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionMetadataRepo$3;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionMetadataRepo$3;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionMetadataRepo$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionMetadataRepo$3;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/service/vault/SessionMetadataReadWriteRepository; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionMetadataRepo$3$invoke$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionMetadataRepo$3$invoke$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionRepo$$inlined$bindProvider$default$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionRepo$$inlined$bindProvider$default$1;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionRepo$$inlined$bindProvider$default$2; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionRepo$$inlined$bindProvider$default$2;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionRepo$$inlined$bindSingleton$default$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionRepo$$inlined$bindSingleton$default$1;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionRepo$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionRepo$1;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionRepo$1;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionRepo$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionRepo$1;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/service/vault/impl/SessionRepositoryImpl; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionRepo$2; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionRepo$2;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionRepo$2;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionRepo$3; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionRepo$3;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionRepo$3;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionRepo$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionRepo$3;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/service/vault/SessionReadWriteRepository; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionRepo$3$invoke$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSessionRepo$3$invoke$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSettingsRepo$$inlined$bindProvider$default$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSettingsRepo$$inlined$bindProvider$default$1;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSettingsRepo$$inlined$bindProvider$default$2; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSettingsRepo$$inlined$bindProvider$default$2;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSettingsRepo$$inlined$bindSingleton$default$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSettingsRepo$$inlined$bindSingleton$default$1;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSettingsRepo$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSettingsRepo$1;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSettingsRepo$1;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSettingsRepo$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSettingsRepo$1;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSettingsRepo$2; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSettingsRepo$2;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSettingsRepo$2;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSettingsRepo$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSettingsRepo$2;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/service/settings/SettingsReadRepository; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSettingsRepo$2$invoke$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSettingsRepo$2$invoke$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSettingsRepo$3; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSettingsRepo$3;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSettingsRepo$3;->()V +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSettingsRepo$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSettingsRepo$3;->invoke(Lorg/kodein/di/DirectDI;)Lcom/artemchep/keyguard/common/service/settings/SettingsReadWriteRepository; +Lcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSettingsRepo$3$invoke$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/di/GlobalModuleJvmKt$installSettingsRepo$3$invoke$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/feature/attachments/SelectableItemState; +HSPLcom/artemchep/keyguard/feature/attachments/SelectableItemState;->()V +HSPLcom/artemchep/keyguard/feature/attachments/SelectableItemState;->(ZZZLkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;)V +Lcom/artemchep/keyguard/feature/auth/common/AutofillKt; +HSPLcom/artemchep/keyguard/feature/auth/common/AutofillKt;->autofill(Landroidx/compose/ui/Modifier;Ljava/lang/String;Ljava/util/List;Lkotlin/jvm/functions/Function1;)Landroidx/compose/ui/Modifier; +Lcom/artemchep/keyguard/feature/auth/common/AutofillKt$autofill$1; +HSPLcom/artemchep/keyguard/feature/auth/common/AutofillKt$autofill$1;->(Ljava/util/List;Lkotlin/jvm/functions/Function1;Ljava/lang/String;)V +HSPLcom/artemchep/keyguard/feature/auth/common/AutofillKt$autofill$1;->access$invoke$lambda$1(Landroidx/compose/runtime/State;)Landroidx/compose/ui/autofill/Autofill; +HSPLcom/artemchep/keyguard/feature/auth/common/AutofillKt$autofill$1;->access$invoke$lambda$2(Landroidx/compose/runtime/State;)Landroidx/compose/ui/autofill/AutofillNode; +HSPLcom/artemchep/keyguard/feature/auth/common/AutofillKt$autofill$1;->invoke$lambda$1(Landroidx/compose/runtime/State;)Landroidx/compose/ui/autofill/Autofill; +HSPLcom/artemchep/keyguard/feature/auth/common/AutofillKt$autofill$1;->invoke$lambda$2(Landroidx/compose/runtime/State;)Landroidx/compose/ui/autofill/AutofillNode; +HSPLcom/artemchep/keyguard/feature/auth/common/AutofillKt$autofill$1;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier; +HSPLcom/artemchep/keyguard/feature/auth/common/AutofillKt$autofill$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/auth/common/AutofillKt$autofill$1$1; +HSPLcom/artemchep/keyguard/feature/auth/common/AutofillKt$autofill$1$1;->(Landroidx/compose/ui/autofill/AutofillNode;)V +HSPLcom/artemchep/keyguard/feature/auth/common/AutofillKt$autofill$1$1;->invoke(Landroidx/compose/ui/layout/LayoutCoordinates;)V +HSPLcom/artemchep/keyguard/feature/auth/common/AutofillKt$autofill$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/auth/common/AutofillKt$autofill$1$2; +HSPLcom/artemchep/keyguard/feature/auth/common/AutofillKt$autofill$1$2;->(Landroidx/compose/ui/autofill/AutofillNode;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;)V +HSPLcom/artemchep/keyguard/feature/auth/common/AutofillKt$autofill$1$2;->invoke(Landroidx/compose/ui/focus/FocusState;)V +HSPLcom/artemchep/keyguard/feature/auth/common/AutofillKt$autofill$1$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/auth/common/Autofill_androidKt; +HSPLcom/artemchep/keyguard/feature/auth/common/Autofill_androidKt;->AutofillSideEffect(Ljava/lang/String;Landroidx/compose/ui/autofill/AutofillNode;Landroidx/compose/runtime/Composer;I)V +Lcom/artemchep/keyguard/feature/auth/common/Autofill_androidKt$AutofillSideEffect$1; +HSPLcom/artemchep/keyguard/feature/auth/common/Autofill_androidKt$AutofillSideEffect$1;->(Landroidx/compose/ui/autofill/AutofillNode;Landroid/view/autofill/AutofillManager;Landroid/view/View;Ljava/lang/String;)V +HSPLcom/artemchep/keyguard/feature/auth/common/Autofill_androidKt$AutofillSideEffect$1;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/auth/common/Autofill_androidKt$AutofillSideEffect$1;->invoke()V +Lcom/artemchep/keyguard/feature/auth/common/SwitchFieldModel; +HSPLcom/artemchep/keyguard/feature/auth/common/SwitchFieldModel;->()V +HSPLcom/artemchep/keyguard/feature/auth/common/SwitchFieldModel;->(ZLkotlin/jvm/functions/Function1;)V +HSPLcom/artemchep/keyguard/feature/auth/common/SwitchFieldModel;->equals(Ljava/lang/Object;)Z +HSPLcom/artemchep/keyguard/feature/auth/common/SwitchFieldModel;->getChecked()Z +HSPLcom/artemchep/keyguard/feature/auth/common/SwitchFieldModel;->getOnChange()Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/feature/auth/common/SwitchFieldModel$Companion; +HSPLcom/artemchep/keyguard/feature/auth/common/SwitchFieldModel$Companion;->()V +HSPLcom/artemchep/keyguard/feature/auth/common/SwitchFieldModel$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/feature/auth/common/TextFieldModel2; +HSPLcom/artemchep/keyguard/feature/auth/common/TextFieldModel2;->()V +HSPLcom/artemchep/keyguard/feature/auth/common/TextFieldModel2;->(Landroidx/compose/runtime/MutableState;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/artemchep/keyguard/feature/auth/common/TextFieldModel2$Vl;Lkotlinx/collections/immutable/ImmutableList;Lkotlin/jvm/functions/Function1;)V +HSPLcom/artemchep/keyguard/feature/auth/common/TextFieldModel2;->(Landroidx/compose/runtime/MutableState;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/artemchep/keyguard/feature/auth/common/TextFieldModel2$Vl;Lkotlinx/collections/immutable/ImmutableList;Lkotlin/jvm/functions/Function1;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/feature/auth/common/TextFieldModel2;->equals(Ljava/lang/Object;)Z +HSPLcom/artemchep/keyguard/feature/auth/common/TextFieldModel2;->getAutocompleteOptions()Lkotlinx/collections/immutable/ImmutableList; +HSPLcom/artemchep/keyguard/feature/auth/common/TextFieldModel2;->getError()Ljava/lang/String; +HSPLcom/artemchep/keyguard/feature/auth/common/TextFieldModel2;->getHint()Ljava/lang/String; +HSPLcom/artemchep/keyguard/feature/auth/common/TextFieldModel2;->getOnChange()Lkotlin/jvm/functions/Function1; +HSPLcom/artemchep/keyguard/feature/auth/common/TextFieldModel2;->getState()Landroidx/compose/runtime/MutableState; +HSPLcom/artemchep/keyguard/feature/auth/common/TextFieldModel2;->getText()Ljava/lang/String; +HSPLcom/artemchep/keyguard/feature/auth/common/TextFieldModel2;->getVl()Lcom/artemchep/keyguard/feature/auth/common/TextFieldModel2$Vl; +Lcom/artemchep/keyguard/feature/auth/common/TextFieldModel2$Companion; +HSPLcom/artemchep/keyguard/feature/auth/common/TextFieldModel2$Companion;->()V +HSPLcom/artemchep/keyguard/feature/auth/common/TextFieldModel2$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/feature/auth/common/TextFieldModel2$Companion;->of$default(Lcom/artemchep/keyguard/feature/auth/common/TextFieldModel2$Companion;Landroidx/compose/runtime/MutableState;Lcom/artemchep/keyguard/feature/auth/common/Validated;Ljava/lang/String;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lcom/artemchep/keyguard/feature/auth/common/TextFieldModel2; +HSPLcom/artemchep/keyguard/feature/auth/common/TextFieldModel2$Companion;->of(Landroidx/compose/runtime/MutableState;Lcom/artemchep/keyguard/feature/auth/common/Validated;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)Lcom/artemchep/keyguard/feature/auth/common/TextFieldModel2; +Lcom/artemchep/keyguard/feature/auth/common/TextFieldModel2$Companion$of$1; +HSPLcom/artemchep/keyguard/feature/auth/common/TextFieldModel2$Companion$of$1;->(Ljava/lang/Object;)V +HSPLcom/artemchep/keyguard/feature/auth/common/TextFieldModel2$Companion$of$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/auth/common/TextFieldModel2$Companion$of$1;->invoke(Ljava/lang/String;)V +Lcom/artemchep/keyguard/feature/auth/common/TextFieldModel2$Companion$of$2; +HSPLcom/artemchep/keyguard/feature/auth/common/TextFieldModel2$Companion$of$2;->(Ljava/lang/Object;)V +HSPLcom/artemchep/keyguard/feature/auth/common/TextFieldModel2$Companion$of$2;->set(Ljava/lang/Object;)V +Lcom/artemchep/keyguard/feature/auth/common/TextFieldModel2$Vl; +Lcom/artemchep/keyguard/feature/auth/common/TextFieldModel2$Vl$Type; +HSPLcom/artemchep/keyguard/feature/auth/common/TextFieldModel2$Vl$Type;->$values()[Lcom/artemchep/keyguard/feature/auth/common/TextFieldModel2$Vl$Type; +HSPLcom/artemchep/keyguard/feature/auth/common/TextFieldModel2$Vl$Type;->()V +HSPLcom/artemchep/keyguard/feature/auth/common/TextFieldModel2$Vl$Type;->(Ljava/lang/String;I)V +HSPLcom/artemchep/keyguard/feature/auth/common/TextFieldModel2$Vl$Type;->values()[Lcom/artemchep/keyguard/feature/auth/common/TextFieldModel2$Vl$Type; +Lcom/artemchep/keyguard/feature/auth/common/Validated; +Lcom/artemchep/keyguard/feature/auth/common/Validated$Failure; +HSPLcom/artemchep/keyguard/feature/auth/common/Validated$Failure;->()V +HSPLcom/artemchep/keyguard/feature/auth/common/Validated$Failure;->(Ljava/lang/Object;Ljava/lang/String;)V +HSPLcom/artemchep/keyguard/feature/auth/common/Validated$Failure;->getError()Ljava/lang/String; +HSPLcom/artemchep/keyguard/feature/auth/common/Validated$Failure;->getModel()Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/auth/common/Validated$Success; +HSPLcom/artemchep/keyguard/feature/auth/common/Validated$Success;->()V +HSPLcom/artemchep/keyguard/feature/auth/common/Validated$Success;->(Ljava/lang/Object;)V +HSPLcom/artemchep/keyguard/feature/auth/common/Validated$Success;->getModel()Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/auth/common/VisibilityKt; +HSPLcom/artemchep/keyguard/feature/auth/common/VisibilityKt;->VisibilityToggle(Lcom/artemchep/keyguard/feature/auth/common/VisibilityState;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/auth/common/VisibilityKt;->VisibilityToggle(ZZLkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V +Lcom/artemchep/keyguard/feature/auth/common/VisibilityKt$VisibilityToggle$1$1; +HSPLcom/artemchep/keyguard/feature/auth/common/VisibilityKt$VisibilityToggle$1$1;->(Lcom/artemchep/keyguard/feature/auth/common/VisibilityState;)V +Lcom/artemchep/keyguard/feature/auth/common/VisibilityKt$VisibilityToggle$2; +HSPLcom/artemchep/keyguard/feature/auth/common/VisibilityKt$VisibilityToggle$2;->(Lcom/artemchep/keyguard/feature/auth/common/VisibilityState;I)V +Lcom/artemchep/keyguard/feature/auth/common/VisibilityKt$VisibilityToggle$3; +HSPLcom/artemchep/keyguard/feature/auth/common/VisibilityKt$VisibilityToggle$3;->(Z)V +HSPLcom/artemchep/keyguard/feature/auth/common/VisibilityKt$VisibilityToggle$3;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/auth/common/VisibilityKt$VisibilityToggle$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/auth/common/VisibilityState; +HSPLcom/artemchep/keyguard/feature/auth/common/VisibilityState;->()V +HSPLcom/artemchep/keyguard/feature/auth/common/VisibilityState;->(ZZ)V +HSPLcom/artemchep/keyguard/feature/auth/common/VisibilityState;->(ZZILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/feature/auth/common/VisibilityState;->isEnabled()Z +HSPLcom/artemchep/keyguard/feature/auth/common/VisibilityState;->isVisible()Z +Lcom/artemchep/keyguard/feature/auth/common/util/ValidationPassword; +HSPLcom/artemchep/keyguard/feature/auth/common/util/ValidationPassword;->$values()[Lcom/artemchep/keyguard/feature/auth/common/util/ValidationPassword; +HSPLcom/artemchep/keyguard/feature/auth/common/util/ValidationPassword;->()V +HSPLcom/artemchep/keyguard/feature/auth/common/util/ValidationPassword;->(Ljava/lang/String;I)V +HSPLcom/artemchep/keyguard/feature/auth/common/util/ValidationPassword;->values()[Lcom/artemchep/keyguard/feature/auth/common/util/ValidationPassword; +Lcom/artemchep/keyguard/feature/auth/common/util/ValidationTitle; +HSPLcom/artemchep/keyguard/feature/auth/common/util/ValidationTitle;->$values()[Lcom/artemchep/keyguard/feature/auth/common/util/ValidationTitle; +HSPLcom/artemchep/keyguard/feature/auth/common/util/ValidationTitle;->()V +HSPLcom/artemchep/keyguard/feature/auth/common/util/ValidationTitle;->(Ljava/lang/String;I)V +HSPLcom/artemchep/keyguard/feature/auth/common/util/ValidationTitle;->values()[Lcom/artemchep/keyguard/feature/auth/common/util/ValidationTitle; +Lcom/artemchep/keyguard/feature/auth/common/util/ValidatorPasswordKt; +HSPLcom/artemchep/keyguard/feature/auth/common/util/ValidatorPasswordKt;->format(Lcom/artemchep/keyguard/feature/auth/common/util/ValidationPassword;Lcom/artemchep/keyguard/feature/navigation/state/TranslatorScope;)Ljava/lang/String; +HSPLcom/artemchep/keyguard/feature/auth/common/util/ValidatorPasswordKt;->validatePassword(Ljava/lang/String;)Lcom/artemchep/keyguard/feature/auth/common/util/ValidationPassword; +HSPLcom/artemchep/keyguard/feature/auth/common/util/ValidatorPasswordKt;->validatedPassword(Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/feature/navigation/state/TranslatorScope;)Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/feature/auth/common/util/ValidatorPasswordKt$WhenMappings; +HSPLcom/artemchep/keyguard/feature/auth/common/util/ValidatorPasswordKt$WhenMappings;->()V +Lcom/artemchep/keyguard/feature/auth/common/util/ValidatorPasswordKt$validatedPassword$$inlined$map$1; +HSPLcom/artemchep/keyguard/feature/auth/common/util/ValidatorPasswordKt$validatedPassword$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/feature/navigation/state/TranslatorScope;)V +HSPLcom/artemchep/keyguard/feature/auth/common/util/ValidatorPasswordKt$validatedPassword$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/auth/common/util/ValidatorPasswordKt$validatedPassword$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/feature/auth/common/util/ValidatorPasswordKt$validatedPassword$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lcom/artemchep/keyguard/feature/navigation/state/TranslatorScope;)V +HSPLcom/artemchep/keyguard/feature/auth/common/util/ValidatorPasswordKt$validatedPassword$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/auth/common/util/ValidatorPasswordKt$validatedPassword$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/feature/auth/common/util/ValidatorPasswordKt$validatedPassword$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/feature/auth/common/util/ValidatorPasswordKt$validatedPassword$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/auth/common/util/ValidatorPasswordKt$validatedPassword$$inlined$map$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/auth/common/util/ValidatorTitleKt; +HSPLcom/artemchep/keyguard/feature/auth/common/util/ValidatorTitleKt;->format(Lcom/artemchep/keyguard/feature/auth/common/util/ValidationTitle;Lcom/artemchep/keyguard/feature/navigation/state/TranslatorScope;)Ljava/lang/String; +HSPLcom/artemchep/keyguard/feature/auth/common/util/ValidatorTitleKt;->validateTitle(Ljava/lang/String;)Lcom/artemchep/keyguard/feature/auth/common/util/ValidationTitle; +HSPLcom/artemchep/keyguard/feature/auth/common/util/ValidatorTitleKt;->validatedTitle(Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/feature/navigation/state/TranslatorScope;)Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/feature/auth/common/util/ValidatorTitleKt$WhenMappings; +HSPLcom/artemchep/keyguard/feature/auth/common/util/ValidatorTitleKt$WhenMappings;->()V +Lcom/artemchep/keyguard/feature/auth/common/util/ValidatorTitleKt$validatedTitle$$inlined$map$1; +HSPLcom/artemchep/keyguard/feature/auth/common/util/ValidatorTitleKt$validatedTitle$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/feature/navigation/state/TranslatorScope;)V +HSPLcom/artemchep/keyguard/feature/auth/common/util/ValidatorTitleKt$validatedTitle$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/auth/common/util/ValidatorTitleKt$validatedTitle$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/feature/auth/common/util/ValidatorTitleKt$validatedTitle$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lcom/artemchep/keyguard/feature/navigation/state/TranslatorScope;)V +HSPLcom/artemchep/keyguard/feature/auth/common/util/ValidatorTitleKt$validatedTitle$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/auth/common/util/ValidatorTitleKt$validatedTitle$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/feature/auth/common/util/ValidatorTitleKt$validatedTitle$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/feature/auth/common/util/ValidatorTitleKt$validatedTitle$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/auth/common/util/ValidatorTitleKt$validatedTitle$$inlined$map$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/biometric/BiometricPromptEffectKt; +HSPLcom/artemchep/keyguard/feature/biometric/BiometricPromptEffectKt;->BiometricPromptEffect(Lkotlinx/coroutines/flow/Flow;Landroidx/compose/runtime/Composer;I)V +Lcom/artemchep/keyguard/feature/biometric/BiometricPromptEffectKt$BiometricPromptEffect$1$1; +HSPLcom/artemchep/keyguard/feature/biometric/BiometricPromptEffectKt$BiometricPromptEffect$1$1;->(Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/feature/crashlytics/CrashlyticsMapKt; +HSPLcom/artemchep/keyguard/feature/crashlytics/CrashlyticsMapKt;->crashlyticsTap$default(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lkotlin/jvm/functions/Function1; +HSPLcom/artemchep/keyguard/feature/crashlytics/CrashlyticsMapKt;->crashlyticsTap(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/feature/crashlytics/CrashlyticsMapKt$crashlyticsTap$$inlined$handleErrorTap$default$1; +HSPLcom/artemchep/keyguard/feature/crashlytics/CrashlyticsMapKt$crashlyticsTap$$inlined$handleErrorTap$default$1;->(Lkotlin/coroutines/Continuation;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V +HSPLcom/artemchep/keyguard/feature/crashlytics/CrashlyticsMapKt$crashlyticsTap$$inlined$handleErrorTap$default$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/crashlytics/CrashlyticsMapKt$crashlyticsTap$$inlined$handleErrorTap$default$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/crashlytics/CrashlyticsMapKt$crashlyticsTap$$inlined$handleErrorTap$default$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/crashlytics/CrashlyticsMapKt$crashlyticsTap$$inlined$handleErrorTap$default$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/crashlytics/CrashlyticsMapKt$crashlyticsTap$1; +HSPLcom/artemchep/keyguard/feature/crashlytics/CrashlyticsMapKt$crashlyticsTap$1;->()V +HSPLcom/artemchep/keyguard/feature/crashlytics/CrashlyticsMapKt$crashlyticsTap$1;->()V +Lcom/artemchep/keyguard/feature/decorator/ItemDecorator; +Lcom/artemchep/keyguard/feature/decorator/ItemDecoratorNone; +HSPLcom/artemchep/keyguard/feature/decorator/ItemDecoratorNone;->()V +HSPLcom/artemchep/keyguard/feature/decorator/ItemDecoratorNone;->()V +Lcom/artemchep/keyguard/feature/duplicates/DuplicatesStateProducerKt; +HSPLcom/artemchep/keyguard/feature/duplicates/DuplicatesStateProducerKt;->createCipherSelectionFlow(Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;Lcom/artemchep/keyguard/ui/selection/SelectionHandle;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/common/usecase/CipherToolbox;)Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/feature/duplicates/DuplicatesStateProducerKt$createCipherSelectionFlow$1; +HSPLcom/artemchep/keyguard/feature/duplicates/DuplicatesStateProducerKt$createCipherSelectionFlow$1;->(Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;Lcom/artemchep/keyguard/common/usecase/CipherToolbox;Lcom/artemchep/keyguard/ui/selection/SelectionHandle;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/duplicates/DuplicatesStateProducerKt$createCipherSelectionFlow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/duplicates/DuplicatesStateProducerKt$createCipherSelectionFlow$1;->invoke(Ljava/util/List;Ljava/util/Set;Ljava/util/List;ZLkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/duplicates/DuplicatesStateProducerKt$createCipherSelectionFlow$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/favicon/Favicon; +HSPLcom/artemchep/keyguard/feature/favicon/Favicon;->()V +HSPLcom/artemchep/keyguard/feature/favicon/Favicon;->()V +HSPLcom/artemchep/keyguard/feature/favicon/Favicon;->launch(Lkotlinx/coroutines/CoroutineScope;Lcom/artemchep/keyguard/common/usecase/GetAccounts;)V +HSPLcom/artemchep/keyguard/feature/favicon/Favicon;->setServers(Ljava/util/List;)V +Lcom/artemchep/keyguard/feature/favicon/Favicon$launch$$inlined$map$1; +HSPLcom/artemchep/keyguard/feature/favicon/Favicon$launch$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/feature/favicon/Favicon$launch$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/favicon/Favicon$launch$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/feature/favicon/Favicon$launch$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/feature/favicon/Favicon$launch$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/favicon/Favicon$launch$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/feature/favicon/Favicon$launch$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/feature/favicon/Favicon$launch$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/feature/favicon/Favicon$launch$2; +HSPLcom/artemchep/keyguard/feature/favicon/Favicon$launch$2;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/favicon/Favicon$launch$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/favicon/Favicon$launch$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/favicon/Favicon$launch$2;->invoke(Ljava/util/List;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/favicon/Favicon$launch$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/favicon/GravatarUrl; +Lcom/artemchep/keyguard/feature/generator/GeneratorRoute; +HSPLcom/artemchep/keyguard/feature/generator/GeneratorRoute;->()V +HSPLcom/artemchep/keyguard/feature/generator/GeneratorRoute;->(Lcom/artemchep/keyguard/feature/generator/GeneratorRoute$Args;)V +Lcom/artemchep/keyguard/feature/generator/GeneratorRoute$Args; +HSPLcom/artemchep/keyguard/feature/generator/GeneratorRoute$Args;->()V +HSPLcom/artemchep/keyguard/feature/generator/GeneratorRoute$Args;->(ZZ)V +Lcom/artemchep/keyguard/feature/generator/history/GeneratorHistoryStateProducerKt; +HSPLcom/artemchep/keyguard/feature/generator/history/GeneratorHistoryStateProducerKt;->mapLatestScoped(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function3;)Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/feature/generator/history/GeneratorHistoryStateProducerKt$mapLatestScoped$$inlined$flatMapLatest$1; +HSPLcom/artemchep/keyguard/feature/generator/history/GeneratorHistoryStateProducerKt$mapLatestScoped$$inlined$flatMapLatest$1;->(Lkotlin/coroutines/Continuation;Lkotlin/jvm/functions/Function3;)V +HSPLcom/artemchep/keyguard/feature/generator/history/GeneratorHistoryStateProducerKt$mapLatestScoped$$inlined$flatMapLatest$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/generator/history/GeneratorHistoryStateProducerKt$mapLatestScoped$$inlined$flatMapLatest$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/generator/history/GeneratorHistoryStateProducerKt$mapLatestScoped$$inlined$flatMapLatest$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/generator/history/GeneratorHistoryStateProducerKt$mapLatestScoped$1$1; +HSPLcom/artemchep/keyguard/feature/generator/history/GeneratorHistoryStateProducerKt$mapLatestScoped$1$1;->(Lkotlin/jvm/functions/Function3;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/generator/history/GeneratorHistoryStateProducerKt$mapLatestScoped$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/generator/history/GeneratorHistoryStateProducerKt$mapLatestScoped$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/generator/history/GeneratorHistoryStateProducerKt$mapLatestScoped$1$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/generator/history/GeneratorHistoryStateProducerKt$mapLatestScoped$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/generator/history/GeneratorHistoryStateProducerKt$mapLatestScoped$1$1$1; +HSPLcom/artemchep/keyguard/feature/generator/history/GeneratorHistoryStateProducerKt$mapLatestScoped$1$1$1;->(Lkotlin/jvm/functions/Function3;Ljava/lang/Object;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/generator/history/GeneratorHistoryStateProducerKt$mapLatestScoped$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/generator/history/GeneratorHistoryStateProducerKt$mapLatestScoped$1$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/generator/history/GeneratorHistoryStateProducerKt$mapLatestScoped$1$1$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/generator/history/GeneratorHistoryStateProducerKt$mapLatestScoped$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/BannerStatusBadgeContentModel; +PLcom/artemchep/keyguard/feature/home/BannerStatusBadgeContentModel;->(ILcom/artemchep/keyguard/feature/localization/TextHolder;Lcom/artemchep/keyguard/feature/localization/TextHolder;ZLkotlin/jvm/functions/Function0;)V +HSPLcom/artemchep/keyguard/feature/home/BannerStatusBadgeContentModel;->equals(Ljava/lang/Object;)Z +HSPLcom/artemchep/keyguard/feature/home/BannerStatusBadgeContentModel;->getCount()I +HSPLcom/artemchep/keyguard/feature/home/BannerStatusBadgeContentModel;->getError()Z +HSPLcom/artemchep/keyguard/feature/home/BannerStatusBadgeContentModel;->getOnClick()Lkotlin/jvm/functions/Function0; +HSPLcom/artemchep/keyguard/feature/home/BannerStatusBadgeContentModel;->getText()Lcom/artemchep/keyguard/feature/localization/TextHolder; +HSPLcom/artemchep/keyguard/feature/home/BannerStatusBadgeContentModel;->getTitle()Lcom/artemchep/keyguard/feature/localization/TextHolder; +Lcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt; +HSPLcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt;->()V +HSPLcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt;->()V +HSPLcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt;->getLambda-1$common_playStoreRelease()Lkotlin/jvm/functions/Function3; +HSPLcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt;->getLambda-2$common_playStoreRelease()Lkotlin/jvm/functions/Function3; +HSPLcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt;->getLambda-4$common_playStoreRelease()Lkotlin/jvm/functions/Function3; +Lcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt$lambda-1$1; +HSPLcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt$lambda-1$1;->()V +HSPLcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt$lambda-1$1;->()V +Lcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt$lambda-2$1; +HSPLcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt$lambda-2$1;->()V +HSPLcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt$lambda-2$1;->()V +HSPLcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt$lambda-2$1;->invoke(Lcom/artemchep/keyguard/feature/home/BannerStatusBadgeContentModel;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt$lambda-2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt$lambda-3$1; +HSPLcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt$lambda-3$1;->()V +HSPLcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt$lambda-3$1;->()V +Lcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt$lambda-4$1; +HSPLcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt$lambda-4$1;->()V +HSPLcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt$lambda-4$1;->()V +HSPLcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt$lambda-4$1;->invoke(Lcom/artemchep/keyguard/feature/localization/TextHolder;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt$lambda-4$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt$lambda-5$1; +HSPLcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt$lambda-5$1;->()V +HSPLcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt$lambda-5$1;->()V +Lcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt$lambda-6$1; +HSPLcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt$lambda-6$1;->()V +HSPLcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt$lambda-6$1;->()V +Lcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt$lambda-7$1; +HSPLcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt$lambda-7$1;->()V +HSPLcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt$lambda-7$1;->()V +Lcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt$lambda-8$1; +HSPLcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt$lambda-8$1;->()V +HSPLcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt$lambda-8$1;->()V +Lcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt$lambda-9$1; +HSPLcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt$lambda-9$1;->()V +HSPLcom/artemchep/keyguard/feature/home/ComposableSingletons$HomeScreenKt$lambda-9$1;->()V +Lcom/artemchep/keyguard/feature/home/HomeLayout; +Lcom/artemchep/keyguard/feature/home/HomeLayout$Horizontal; +Lcom/artemchep/keyguard/feature/home/HomeLayout$Vertical; +HSPLcom/artemchep/keyguard/feature/home/HomeLayout$Vertical;->()V +HSPLcom/artemchep/keyguard/feature/home/HomeLayout$Vertical;->()V +Lcom/artemchep/keyguard/feature/home/HomeLayoutKt; +HSPLcom/artemchep/keyguard/feature/home/HomeLayoutKt;->()V +HSPLcom/artemchep/keyguard/feature/home/HomeLayoutKt;->ResponsiveLayout(Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/HomeLayoutKt;->getLocalHomeLayout()Landroidx/compose/runtime/ProvidableCompositionLocal; +Lcom/artemchep/keyguard/feature/home/HomeLayoutKt$LocalHomeLayout$1; +HSPLcom/artemchep/keyguard/feature/home/HomeLayoutKt$LocalHomeLayout$1;->()V +HSPLcom/artemchep/keyguard/feature/home/HomeLayoutKt$LocalHomeLayout$1;->()V +Lcom/artemchep/keyguard/feature/home/HomeLayoutKt$ResponsiveLayout$1; +HSPLcom/artemchep/keyguard/feature/home/HomeLayoutKt$ResponsiveLayout$1;->(Lkotlin/jvm/functions/Function2;)V +HSPLcom/artemchep/keyguard/feature/home/HomeLayoutKt$ResponsiveLayout$1;->invoke(Landroidx/compose/foundation/layout/BoxWithConstraintsScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/HomeLayoutKt$ResponsiveLayout$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/HomeLayoutKt$ResponsiveLayout$1$1; +HSPLcom/artemchep/keyguard/feature/home/HomeLayoutKt$ResponsiveLayout$1$1;->(Lkotlin/jvm/functions/Function2;)V +HSPLcom/artemchep/keyguard/feature/home/HomeLayoutKt$ResponsiveLayout$1$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/HomeLayoutKt$ResponsiveLayout$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/HomeScreenKt; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt;->()V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt;->BannerStatusBadge(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/State;Landroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt;->BannerStatusBadgeContent(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Lcom/artemchep/keyguard/feature/home/BannerStatusBadgeContentModel;Landroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt;->BottomNavigationControllerItem(Landroidx/compose/foundation/layout/RowScope;Ljava/util/List;Lcom/artemchep/keyguard/feature/navigation/Route;Landroidx/compose/ui/graphics/vector/ImageVector;Landroidx/compose/ui/graphics/vector/ImageVector;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt;->HomeEffect$lambda$0(Lkotlin/Lazy;)Lcom/artemchep/keyguard/core/store/DatabaseManager; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt;->HomeEffect(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt;->HomeScreen(Lcom/artemchep/keyguard/feature/navigation/Route;ZLandroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt;->HomeScreenContent(Lkotlinx/collections/immutable/PersistentList;Ljava/util/List;ZLandroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt;->NavigationIcon(ZLandroidx/compose/ui/graphics/vector/ImageVector;Landroidx/compose/ui/graphics/vector/ImageVector;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt;->access$BannerStatusBadge(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/State;Landroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt;->access$BannerStatusBadgeContent(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Lcom/artemchep/keyguard/feature/home/BannerStatusBadgeContentModel;Landroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt;->access$BottomNavigationControllerItem(Landroidx/compose/foundation/layout/RowScope;Ljava/util/List;Lcom/artemchep/keyguard/feature/navigation/Route;Landroidx/compose/ui/graphics/vector/ImageVector;Landroidx/compose/ui/graphics/vector/ImageVector;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt;->access$HomeEffect$lambda$0(Lkotlin/Lazy;)Lcom/artemchep/keyguard/core/store/DatabaseManager; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt;->access$NavigationIcon(ZLandroidx/compose/ui/graphics/vector/ImageVector;Landroidx/compose/ui/graphics/vector/ImageVector;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt;->access$getVaultRoute$p()Lcom/artemchep/keyguard/feature/home/vault/VaultRoute; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt;->isSelected(Ljava/util/List;Lcom/artemchep/keyguard/feature/navigation/Route;)Z +Lcom/artemchep/keyguard/feature/home/HomeScreenKt$BannerStatusBadge$1; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$BannerStatusBadge$1;->(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/State;II)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$BannerStatusBadge$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$BannerStatusBadge$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/HomeScreenKt$BannerStatusBadge$errorState$1$1; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$BannerStatusBadge$errorState$1$1;->(Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$BannerStatusBadge$errorState$1$1;->invoke()Lcom/artemchep/keyguard/feature/home/BannerStatusBadgeContentModel; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$BannerStatusBadge$errorState$1$1;->invoke()Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/HomeScreenKt$BannerStatusBadge$errorState$1$1$2; +PLcom/artemchep/keyguard/feature/home/HomeScreenKt$BannerStatusBadge$errorState$1$1$2;->(Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;)V +Lcom/artemchep/keyguard/feature/home/HomeScreenKt$BannerStatusBadgeContent$2; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$BannerStatusBadgeContent$2;->(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Lcom/artemchep/keyguard/feature/home/BannerStatusBadgeContentModel;II)V +Lcom/artemchep/keyguard/feature/home/HomeScreenKt$BottomNavigationControllerItem$1; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$BottomNavigationControllerItem$1;->(Lcom/artemchep/keyguard/feature/navigation/NavigationController;Ljava/util/List;Lcom/artemchep/keyguard/feature/navigation/Route;)V +Lcom/artemchep/keyguard/feature/home/HomeScreenKt$BottomNavigationControllerItem$2; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$BottomNavigationControllerItem$2;->(ZLandroidx/compose/ui/graphics/vector/ImageVector;Landroidx/compose/ui/graphics/vector/ImageVector;Lkotlin/jvm/functions/Function3;)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$BottomNavigationControllerItem$2;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$BottomNavigationControllerItem$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeEffect$$inlined$rememberInstance$1; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeEffect$$inlined$rememberInstance$1;->()V +Lcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeEffect$$inlined$rememberInstance$2; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeEffect$$inlined$rememberInstance$2;->()V +Lcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeEffect$1; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeEffect$1;->(Lkotlin/Lazy;Lkotlin/Lazy;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeEffect$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeEffect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeEffect$1$1; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeEffect$1$1;->(Lkotlin/Lazy;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeEffect$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeEffect$1$1;->invoke(Lcom/artemchep/keyguard/data/Database;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeEffect$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeEffect$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeEffect$1$1$1; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeEffect$1$1$1;->([Lcom/artemchep/keyguard/data/bitwarden/Cipher;Lcom/artemchep/keyguard/data/Database;)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeEffect$1$1$1;->invoke(Lapp/cash/sqldelight/TransactionWithoutReturn;)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeEffect$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeEffect$2; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeEffect$2;->(I)V +Lcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreen$1; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreen$1;->(Ljava/util/List;Z)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreen$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreen$1;->invoke(Lkotlinx/collections/immutable/PersistentList;Landroidx/compose/runtime/Composer;I)V +Lcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1;->()V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1;->(ZLjava/util/List;Lkotlinx/collections/immutable/PersistentList;)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1;->access$invoke$lambda$6$lambda$0(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetNavLabel; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1;->access$invoke$lambda$6$lambda$2(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetAccountStatus; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1;->invoke$lambda$6$lambda$0(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetNavLabel; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1;->invoke$lambda$6$lambda$2(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetAccountStatus; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1$1$1; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1$1$1;->(Ljava/util/List;Lkotlinx/collections/immutable/PersistentList;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;)V +Lcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1$1$2$1$1; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1$1$2$1$1;->(Lkotlinx/collections/immutable/PersistentList;)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1$1$2$1$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1$1$2$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1$1$2$2; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1$1$2$2;->(Landroidx/compose/runtime/State;Landroidx/compose/foundation/layout/ColumnScope;Landroidx/compose/foundation/layout/WindowInsets;Ljava/util/List;Lkotlinx/collections/immutable/PersistentList;Landroidx/compose/runtime/State;)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1$1$2$2;->invoke(Landroidx/compose/animation/AnimatedVisibilityScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1$1$2$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1$1$2$2$1; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1$1$2$2$1;->(Landroidx/compose/runtime/State;Landroidx/compose/foundation/layout/ColumnScope;Landroidx/compose/foundation/layout/WindowInsets;Ljava/util/List;Lkotlinx/collections/immutable/PersistentList;Landroidx/compose/runtime/State;)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1$1$2$2$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1$1$2$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1$1$2$2$1$1$1$1$1; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1$1$2$2$1$1$1$1$1;->(Lcom/artemchep/keyguard/feature/home/Rail;)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1$1$2$2$1$1$1$1$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1$1$2$2$1$1$1$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1$1$2$2$1$isSyncingState$1$1; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1$1$2$2$1$isSyncingState$1$1;->(Landroidx/compose/runtime/State;)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1$1$2$2$1$isSyncingState$1$1;->invoke()Ljava/lang/Boolean; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1$1$2$2$1$isSyncingState$1$1;->invoke()Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1$invoke$lambda$6$$inlined$rememberInstance$1; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1$invoke$lambda$6$$inlined$rememberInstance$1;->()V +Lcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1$invoke$lambda$6$$inlined$rememberInstance$2; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$HomeScreenContent$1$invoke$lambda$6$$inlined$rememberInstance$2;->()V +Lcom/artemchep/keyguard/feature/home/HomeScreenKt$NavigationIcon$1; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$NavigationIcon$1;->(Landroidx/compose/ui/graphics/vector/ImageVector;Landroidx/compose/ui/graphics/vector/ImageVector;)V +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$NavigationIcon$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/HomeScreenKt$NavigationIcon$1;->invoke(ZLandroidx/compose/runtime/Composer;I)V +Lcom/artemchep/keyguard/feature/home/Rail; +HSPLcom/artemchep/keyguard/feature/home/Rail;->()V +HSPLcom/artemchep/keyguard/feature/home/Rail;->(Lcom/artemchep/keyguard/feature/navigation/Route;Landroidx/compose/ui/graphics/vector/ImageVector;Landroidx/compose/ui/graphics/vector/ImageVector;Lcom/artemchep/keyguard/feature/localization/TextHolder;)V +HSPLcom/artemchep/keyguard/feature/home/Rail;->getIcon()Landroidx/compose/ui/graphics/vector/ImageVector; +HSPLcom/artemchep/keyguard/feature/home/Rail;->getIconSelected()Landroidx/compose/ui/graphics/vector/ImageVector; +HSPLcom/artemchep/keyguard/feature/home/Rail;->getLabel()Lcom/artemchep/keyguard/feature/localization/TextHolder; +HSPLcom/artemchep/keyguard/feature/home/Rail;->getRoute()Lcom/artemchep/keyguard/feature/navigation/Route; +Lcom/artemchep/keyguard/feature/home/settings/SettingsRoute; +HSPLcom/artemchep/keyguard/feature/home/settings/SettingsRoute;->()V +HSPLcom/artemchep/keyguard/feature/home/settings/SettingsRoute;->()V +Lcom/artemchep/keyguard/feature/home/vault/ComposableSingletons$VaultScreenKt; +HSPLcom/artemchep/keyguard/feature/home/vault/ComposableSingletons$VaultScreenKt;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/ComposableSingletons$VaultScreenKt;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/ComposableSingletons$VaultScreenKt;->getLambda-1$common_playStoreRelease()Lkotlin/jvm/functions/Function3; +Lcom/artemchep/keyguard/feature/home/vault/ComposableSingletons$VaultScreenKt$lambda-1$1; +HSPLcom/artemchep/keyguard/feature/home/vault/ComposableSingletons$VaultScreenKt$lambda-1$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/ComposableSingletons$VaultScreenKt$lambda-1$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/ComposableSingletons$VaultScreenKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/ComposableSingletons$VaultScreenKt$lambda-1$1;->invoke(Lkotlinx/collections/immutable/PersistentList;Landroidx/compose/runtime/Composer;I)V +Lcom/artemchep/keyguard/feature/home/vault/VaultRoute; +HSPLcom/artemchep/keyguard/feature/home/vault/VaultRoute;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/VaultRoute;->(Lcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args;)V +HSPLcom/artemchep/keyguard/feature/home/vault/VaultRoute;->(Lcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/feature/home/vault/VaultRoute;->Content(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/vault/VaultRoute;->hashCode()I +Lcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args; +HSPLcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args;->(Lcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args$AppBar;Lcom/artemchep/keyguard/common/model/DFilter;Lcom/artemchep/keyguard/feature/home/vault/search/sort/Sort;ZLcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args$SearchBy;Ljava/lang/Boolean;ZZ)V +HSPLcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args;->(Lcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args$AppBar;Lcom/artemchep/keyguard/common/model/DFilter;Lcom/artemchep/keyguard/feature/home/vault/search/sort/Sort;ZLcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args$SearchBy;Ljava/lang/Boolean;ZZILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args;->equals(Ljava/lang/Object;)Z +HSPLcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args;->getAppBar()Lcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args$AppBar; +HSPLcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args;->getCanAddSecrets()Z +HSPLcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args;->getCanAlwaysShowKeyboard()Z +HSPLcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args;->getCanQuickFilter()Z +HSPLcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args;->getFilter()Lcom/artemchep/keyguard/common/model/DFilter; +HSPLcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args;->getPreselect()Z +HSPLcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args;->getSort()Lcom/artemchep/keyguard/feature/home/vault/search/sort/Sort; +HSPLcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args;->hashCode()I +Lcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args$AppBar; +Lcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args$SearchBy; +HSPLcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args$SearchBy;->$values()[Lcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args$SearchBy; +HSPLcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args$SearchBy;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args$SearchBy;->(Ljava/lang/String;I)V +Lcom/artemchep/keyguard/feature/home/vault/VaultRoute$Companion; +HSPLcom/artemchep/keyguard/feature/home/vault/VaultRoute$Companion;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/VaultRoute$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/feature/home/vault/VaultScreenKt; +HSPLcom/artemchep/keyguard/feature/home/vault/VaultScreenKt;->VaultScreen(Lcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args;Landroidx/compose/runtime/Composer;I)V +Lcom/artemchep/keyguard/feature/home/vault/VaultScreenKt$VaultScreen$1; +HSPLcom/artemchep/keyguard/feature/home/vault/VaultScreenKt$VaultScreen$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListRoute;)V +HSPLcom/artemchep/keyguard/feature/home/vault/VaultScreenKt$VaultScreen$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/vault/VaultScreenKt$VaultScreen$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/VaultScreenKt$VaultScreen$2; +HSPLcom/artemchep/keyguard/feature/home/vault/VaultScreenKt$VaultScreen$2;->(Lcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args;I)V +Lcom/artemchep/keyguard/feature/home/vault/component/SearchTextFieldKt; +HSPLcom/artemchep/keyguard/feature/home/vault/component/SearchTextFieldKt;->SearchTextField(Landroidx/compose/ui/Modifier;Ljava/lang/String;Ljava/lang/String;ZLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/feature/home/vault/component/SearchTextFieldKt;->searchTextFieldBackground(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/ui/graphics/Shape;)Landroidx/compose/ui/Modifier; +Lcom/artemchep/keyguard/feature/home/vault/component/SearchTextFieldKt$SearchTextField$1$1$2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/component/SearchTextFieldKt$SearchTextField$1$1$2$1;->(Lkotlin/jvm/functions/Function0;)V +Lcom/artemchep/keyguard/feature/home/vault/component/SearchTextFieldKt$SearchTextField$1$1$3$1; +HSPLcom/artemchep/keyguard/feature/home/vault/component/SearchTextFieldKt$SearchTextField$1$1$3$1;->(Landroidx/compose/runtime/State;)V +Lcom/artemchep/keyguard/feature/home/vault/component/SearchTextFieldKt$SearchTextField$1$1$4; +HSPLcom/artemchep/keyguard/feature/home/vault/component/SearchTextFieldKt$SearchTextField$1$1$4;->(Ljava/lang/String;Landroidx/compose/ui/text/TextStyle;)V +HSPLcom/artemchep/keyguard/feature/home/vault/component/SearchTextFieldKt$SearchTextField$1$1$4;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/vault/component/SearchTextFieldKt$SearchTextField$1$1$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/component/SearchTextFieldKt$SearchTextField$1$1$6; +HSPLcom/artemchep/keyguard/feature/home/vault/component/SearchTextFieldKt$SearchTextField$1$1$6;->(Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/State;)V +Lcom/artemchep/keyguard/feature/home/vault/component/SearchTextFieldKt$SearchTextField$2; +HSPLcom/artemchep/keyguard/feature/home/vault/component/SearchTextFieldKt$SearchTextField$2;->(Landroidx/compose/ui/Modifier;Ljava/lang/String;Ljava/lang/String;ZLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;II)V +Lcom/artemchep/keyguard/feature/home/vault/component/SearchTextFieldKt$searchTextFieldBackground$1; +HSPLcom/artemchep/keyguard/feature/home/vault/component/SearchTextFieldKt$searchTextFieldBackground$1;->(Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/ui/graphics/Shape;)V +HSPLcom/artemchep/keyguard/feature/home/vault/component/SearchTextFieldKt$searchTextFieldBackground$1;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier; +HSPLcom/artemchep/keyguard/feature/home/vault/component/SearchTextFieldKt$searchTextFieldBackground$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/component/SearchTextFieldKt$searchTextFieldBackground$1$1$1; +HSPLcom/artemchep/keyguard/feature/home/vault/component/SearchTextFieldKt$searchTextFieldBackground$1$1$1;->(Landroidx/compose/runtime/State;)V +HSPLcom/artemchep/keyguard/feature/home/vault/component/SearchTextFieldKt$searchTextFieldBackground$1$1$1;->invoke(Landroidx/compose/ui/graphics/drawscope/DrawScope;)V +HSPLcom/artemchep/keyguard/feature/home/vault/component/SearchTextFieldKt$searchTextFieldBackground$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/component/SearchTextFieldKt$searchTextFieldBackground$1$isHighlightedState$1$1; +HSPLcom/artemchep/keyguard/feature/home/vault/component/SearchTextFieldKt$searchTextFieldBackground$1$isHighlightedState$1$1;->(Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;)V +HSPLcom/artemchep/keyguard/feature/home/vault/component/SearchTextFieldKt$searchTextFieldBackground$1$isHighlightedState$1$1;->invoke()Ljava/lang/Boolean; +HSPLcom/artemchep/keyguard/feature/home/vault/component/SearchTextFieldKt$searchTextFieldBackground$1$isHighlightedState$1$1;->invoke()Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/model/FilterItem; +Lcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Item; +HSPLcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Item;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Item;->(Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;ZZILkotlin/jvm/functions/Function2;Ljava/lang/String;Ljava/lang/String;Lkotlin/jvm/functions/Function0;)V +HSPLcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Item;->copy$default(Lcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Item;Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;ZZILkotlin/jvm/functions/Function2;Ljava/lang/String;Ljava/lang/String;Lkotlin/jvm/functions/Function0;ILjava/lang/Object;)Lcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Item; +HSPLcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Item;->copy(Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;ZZILkotlin/jvm/functions/Function2;Ljava/lang/String;Ljava/lang/String;Lkotlin/jvm/functions/Function0;)Lcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Item; +HSPLcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Item;->getChecked()Z +HSPLcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Item;->getFilterSectionId()Ljava/lang/String; +HSPLcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Item;->getFilters()Ljava/util/Set; +HSPLcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Item;->getSectionId()Ljava/lang/String; +Lcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Item$Companion; +HSPLcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Item$Companion;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Item$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Item$id$1; +HSPLcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Item$id$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Item$id$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Item$id$1;->invoke(Lcom/artemchep/keyguard/common/model/DFilter$Primitive;)Ljava/lang/CharSequence; +HSPLcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Item$id$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Section; +HSPLcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Section;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Section;->(Ljava/lang/String;Ljava/lang/String;ZLkotlin/jvm/functions/Function0;)V +HSPLcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Section;->(Ljava/lang/String;Ljava/lang/String;ZLkotlin/jvm/functions/Function0;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Section;->getSectionId()Ljava/lang/String; +Lcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Section$Companion; +HSPLcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Section$Companion;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Section$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/feature/home/vault/model/SortItem; +Lcom/artemchep/keyguard/feature/home/vault/model/SortItem$Item; +HSPLcom/artemchep/keyguard/feature/home/vault/model/SortItem$Item;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/model/SortItem$Item;->(Ljava/lang/String;Lcom/artemchep/keyguard/feature/home/vault/screen/ComparatorHolder;Landroidx/compose/ui/graphics/vector/ImageVector;Lcom/artemchep/keyguard/feature/localization/TextHolder;ZLkotlin/jvm/functions/Function0;)V +HSPLcom/artemchep/keyguard/feature/home/vault/model/SortItem$Item;->copy$default(Lcom/artemchep/keyguard/feature/home/vault/model/SortItem$Item;Ljava/lang/String;Lcom/artemchep/keyguard/feature/home/vault/screen/ComparatorHolder;Landroidx/compose/ui/graphics/vector/ImageVector;Lcom/artemchep/keyguard/feature/localization/TextHolder;ZLkotlin/jvm/functions/Function0;ILjava/lang/Object;)Lcom/artemchep/keyguard/feature/home/vault/model/SortItem$Item; +HSPLcom/artemchep/keyguard/feature/home/vault/model/SortItem$Item;->copy(Ljava/lang/String;Lcom/artemchep/keyguard/feature/home/vault/screen/ComparatorHolder;Landroidx/compose/ui/graphics/vector/ImageVector;Lcom/artemchep/keyguard/feature/localization/TextHolder;ZLkotlin/jvm/functions/Function0;)Lcom/artemchep/keyguard/feature/home/vault/model/SortItem$Item; +HSPLcom/artemchep/keyguard/feature/home/vault/model/SortItem$Item;->getConfig()Lcom/artemchep/keyguard/feature/home/vault/screen/ComparatorHolder; +Lcom/artemchep/keyguard/feature/home/vault/model/SortItem$Section; +HSPLcom/artemchep/keyguard/feature/home/vault/model/SortItem$Section;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/model/SortItem$Section;->(Ljava/lang/String;Lcom/artemchep/keyguard/feature/localization/TextHolder;)V +Lcom/artemchep/keyguard/feature/home/vault/model/SortItem$Section$Companion; +HSPLcom/artemchep/keyguard/feature/home/vault/model/SortItem$Section$Companion;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/model/SortItem$Section$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/feature/home/vault/model/VaultItem2; +Lcom/artemchep/keyguard/feature/home/vault/model/VaultItem2$Item; +Lcom/artemchep/keyguard/feature/home/vault/model/VaultItem2$Item$LocalState; +HSPLcom/artemchep/keyguard/feature/home/vault/model/VaultItem2$Item$LocalState;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/model/VaultItem2$Item$LocalState;->(Lcom/artemchep/keyguard/feature/home/vault/model/VaultItem2$Item$OpenedState;Lcom/artemchep/keyguard/feature/attachments/SelectableItemState;)V +Lcom/artemchep/keyguard/feature/home/vault/model/VaultItem2$Item$OpenedState; +HSPLcom/artemchep/keyguard/feature/home/vault/model/VaultItem2$Item$OpenedState;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/model/VaultItem2$Item$OpenedState;->(Z)V +Lcom/artemchep/keyguard/feature/home/vault/model/VaultItem2$NoItems; +HSPLcom/artemchep/keyguard/feature/home/vault/model/VaultItem2$NoItems;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/model/VaultItem2$NoItems;->()V +Lcom/artemchep/keyguard/feature/home/vault/model/VaultItem2$QuickFilters; +HSPLcom/artemchep/keyguard/feature/home/vault/model/VaultItem2$QuickFilters;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/model/VaultItem2$QuickFilters;->(Ljava/lang/String;Lkotlinx/collections/immutable/ImmutableList;)V +Lcom/artemchep/keyguard/feature/home/vault/model/VaultItem2$QuickFilters$Companion; +HSPLcom/artemchep/keyguard/feature/home/vault/model/VaultItem2$QuickFilters$Companion;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/model/VaultItem2$QuickFilters$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/ComparatorHolder; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComparatorHolder;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComparatorHolder;->(Lcom/artemchep/keyguard/feature/home/vault/search/sort/Sort;ZZ)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComparatorHolder;->(Lcom/artemchep/keyguard/feature/home/vault/search/sort/Sort;ZZILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComparatorHolder;->equals(Ljava/lang/Object;)Z +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComparatorHolder;->getComparator()Lcom/artemchep/keyguard/feature/home/vault/search/sort/Sort; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComparatorHolder;->hashCode()I +Lcom/artemchep/keyguard/feature/home/vault/screen/ComparatorHolder$Companion; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComparatorHolder$Companion;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComparatorHolder$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/ComparatorHolder$Creator; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComparatorHolder$Creator;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt;->getLambda-1$common_playStoreRelease()Lkotlin/jvm/functions/Function2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt;->getLambda-2$common_playStoreRelease()Lkotlin/jvm/functions/Function3; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt;->getLambda-3$common_playStoreRelease()Lkotlin/jvm/functions/Function3; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt;->getLambda-4$common_playStoreRelease()Lkotlin/jvm/functions/Function2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt;->getLambda-5$common_playStoreRelease()Lkotlin/jvm/functions/Function3; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt;->getLambda-6$common_playStoreRelease()Lkotlin/jvm/functions/Function3; +Lcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt$lambda-1$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt$lambda-1$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt$lambda-1$1;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt$lambda-2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt$lambda-2$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt$lambda-2$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt$lambda-2$1;->invoke(Landroidx/compose/foundation/lazy/LazyItemScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt$lambda-2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt$lambda-3$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt$lambda-3$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt$lambda-3$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt$lambda-3$1;->invoke(Landroidx/compose/foundation/lazy/LazyItemScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt$lambda-3$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt$lambda-4$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt$lambda-4$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt$lambda-4$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt$lambda-4$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt$lambda-4$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt$lambda-5$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt$lambda-5$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt$lambda-5$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt$lambda-5$1;->invoke(Landroidx/compose/foundation/layout/RowScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt$lambda-5$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt$lambda-6$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt$lambda-6$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt$lambda-6$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt$lambda-6$1;->invoke(Landroidx/compose/foundation/layout/RowScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListScreenKt$lambda-6$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListStateProducerKt; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListStateProducerKt;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListStateProducerKt;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListStateProducerKt;->getLambda-1$common_playStoreRelease()Lkotlin/jvm/functions/Function2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListStateProducerKt;->getLambda-2$common_playStoreRelease()Lkotlin/jvm/functions/Function2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListStateProducerKt;->getLambda-3$common_playStoreRelease()Lkotlin/jvm/functions/Function2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListStateProducerKt;->getLambda-4$common_playStoreRelease()Lkotlin/jvm/functions/Function2; +Lcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListStateProducerKt$lambda-1$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListStateProducerKt$lambda-1$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListStateProducerKt$lambda-1$1;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListStateProducerKt$lambda-2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListStateProducerKt$lambda-2$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListStateProducerKt$lambda-2$1;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListStateProducerKt$lambda-3$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListStateProducerKt$lambda-3$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListStateProducerKt$lambda-3$1;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListStateProducerKt$lambda-4$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListStateProducerKt$lambda-4$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListStateProducerKt$lambda-4$1;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListStateProducerKt$lambda-5$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListStateProducerKt$lambda-5$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListStateProducerKt$lambda-5$1;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListStateProducerKt$lambda-6$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListStateProducerKt$lambda-6$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListStateProducerKt$lambda-6$1;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListStateProducerKt$lambda-7$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListStateProducerKt$lambda-7$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListStateProducerKt$lambda-7$1;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListStateProducerKt$lambda-8$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListStateProducerKt$lambda-8$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/ComposableSingletons$VaultListStateProducerKt$lambda-8$1;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/CreateFilterResult; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/CreateFilterResult;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/CreateFilterResult;->(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/CreateFilterResult;->getFilterFlow()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/CreateFilterResult;->getOnClear()Lkotlin/jvm/functions/Function0; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/CreateFilterResult;->getOnToggle()Lkotlin/jvm/functions/Function2; +Lcom/artemchep/keyguard/feature/home/vault/screen/FilterParams; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/FilterParams;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/FilterParams;->(Ljava/lang/String;Lcom/artemchep/keyguard/feature/home/vault/screen/FilterParams$Section;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/FilterParams;->(Ljava/lang/String;Lcom/artemchep/keyguard/feature/home/vault/screen/FilterParams$Section;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/FilterParams;->getDeeplinkCustomFilter()Ljava/lang/String; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/FilterParams;->getSection()Lcom/artemchep/keyguard/feature/home/vault/screen/FilterParams$Section; +Lcom/artemchep/keyguard/feature/home/vault/screen/FilterParams$Section; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/FilterParams$Section;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/FilterParams$Section;->(ZZZZZZ)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/FilterParams$Section;->(ZZZZZZILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/FilterParams$Section;->getAccount()Z +HSPLcom/artemchep/keyguard/feature/home/vault/screen/FilterParams$Section;->getCollection()Z +HSPLcom/artemchep/keyguard/feature/home/vault/screen/FilterParams$Section;->getFolder()Z +HSPLcom/artemchep/keyguard/feature/home/vault/screen/FilterParams$Section;->getMisc()Z +HSPLcom/artemchep/keyguard/feature/home/vault/screen/FilterParams$Section;->getOrganization()Z +HSPLcom/artemchep/keyguard/feature/home/vault/screen/FilterParams$Section;->getType()Z +Lcom/artemchep/keyguard/feature/home/vault/screen/FilteredBoo; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/FilteredBoo;->(ILjava/util/List;Ljava/util/List;Lcom/artemchep/keyguard/feature/home/vault/screen/ComparatorHolder;Lcom/artemchep/keyguard/feature/home/vault/search/filter/FilterHolder;Lcom/artemchep/keyguard/feature/home/vault/search/IndexedText;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/FilteredBoo;->(ILjava/util/List;Ljava/util/List;Lcom/artemchep/keyguard/feature/home/vault/screen/ComparatorHolder;Lcom/artemchep/keyguard/feature/home/vault/search/filter/FilterHolder;Lcom/artemchep/keyguard/feature/home/vault/search/IndexedText;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/FilteredBoo;->copy$default(Lcom/artemchep/keyguard/feature/home/vault/screen/FilteredBoo;ILjava/util/List;Ljava/util/List;Lcom/artemchep/keyguard/feature/home/vault/screen/ComparatorHolder;Lcom/artemchep/keyguard/feature/home/vault/search/filter/FilterHolder;Lcom/artemchep/keyguard/feature/home/vault/search/IndexedText;ILjava/lang/Object;)Lcom/artemchep/keyguard/feature/home/vault/screen/FilteredBoo; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/FilteredBoo;->copy(ILjava/util/List;Ljava/util/List;Lcom/artemchep/keyguard/feature/home/vault/screen/ComparatorHolder;Lcom/artemchep/keyguard/feature/home/vault/search/filter/FilterHolder;Lcom/artemchep/keyguard/feature/home/vault/search/IndexedText;)Lcom/artemchep/keyguard/feature/home/vault/screen/FilteredBoo; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/FilteredBoo;->getCount()I +HSPLcom/artemchep/keyguard/feature/home/vault/screen/FilteredBoo;->getFilterConfig()Lcom/artemchep/keyguard/feature/home/vault/search/filter/FilterHolder; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/FilteredBoo;->getList()Ljava/util/List; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/FilteredBoo;->getOrderConfig()Lcom/artemchep/keyguard/feature/home/vault/screen/ComparatorHolder; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/FilteredBoo;->getPreferredList()Ljava/util/List; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/FilteredBoo;->getQueryConfig()Lcom/artemchep/keyguard/feature/home/vault/search/IndexedText; +Lcom/artemchep/keyguard/feature/home/vault/screen/OhOhOh; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/OhOhOh;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/OhOhOh;->(Ljava/lang/String;II)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/OhOhOh;->(Ljava/lang/String;IIILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/OhOhOh;->getRevision()I +Lcom/artemchep/keyguard/feature/home/vault/screen/OhOhOh$Creator; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/OhOhOh$Creator;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/OurFilterResult; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/OurFilterResult;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/OurFilterResult;->(ILjava/util/List;Lkotlin/jvm/functions/Function0;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/OurFilterResult;->(ILjava/util/List;Lkotlin/jvm/functions/Function0;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/OurFilterResult;->equals(Ljava/lang/Object;)Z +HSPLcom/artemchep/keyguard/feature/home/vault/screen/OurFilterResult;->getItems()Ljava/util/List; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/OurFilterResult;->getOnClear()Lkotlin/jvm/functions/Function0; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/OurFilterResult;->getRev()I +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt;->access$ah$createFolderFilterAction(Ljava/lang/String;Lcom/artemchep/keyguard/feature/home/vault/screen/CreateFilterResult;Ljava/util/Set;Ljava/lang/String;Landroidx/compose/ui/graphics/vector/ImageVector;ZI)Lcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Item; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt;->ah$aaa$default(Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/feature/home/vault/screen/CreateFilterResult;Lkotlinx/coroutines/flow/MutableStateFlow;Ljava/lang/String;Ljava/lang/String;ZILjava/lang/Object;)Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt;->ah$aaa(Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/feature/home/vault/screen/CreateFilterResult;Lkotlinx/coroutines/flow/MutableStateFlow;Ljava/lang/String;Ljava/lang/String;Z)Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt;->ah$createCollectionFilterAction$default(Ljava/lang/String;Lcom/artemchep/keyguard/feature/home/vault/screen/CreateFilterResult;Ljava/util/Set;Ljava/lang/String;Landroidx/compose/ui/graphics/vector/ImageVector;ILjava/lang/Object;)Lcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Item; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt;->ah$createCollectionFilterAction(Ljava/lang/String;Lcom/artemchep/keyguard/feature/home/vault/screen/CreateFilterResult;Ljava/util/Set;Ljava/lang/String;Landroidx/compose/ui/graphics/vector/ImageVector;)Lcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Item; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt;->ah$createFilterAction$default(Lcom/artemchep/keyguard/feature/home/vault/screen/CreateFilterResult;Ljava/lang/String;Ljava/util/Set;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/artemchep/keyguard/ui/icons/AccentColors;Landroidx/compose/ui/graphics/vector/ImageVector;ZIILjava/lang/Object;)Lcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Item; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt;->ah$createFilterAction(Lcom/artemchep/keyguard/feature/home/vault/screen/CreateFilterResult;Ljava/lang/String;Ljava/util/Set;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/artemchep/keyguard/ui/icons/AccentColors;Landroidx/compose/ui/graphics/vector/ImageVector;ZI)Lcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Item; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt;->ah$createFolderFilterAction(Ljava/lang/String;Lcom/artemchep/keyguard/feature/home/vault/screen/CreateFilterResult;Ljava/util/Set;Ljava/lang/String;Landroidx/compose/ui/graphics/vector/ImageVector;ZI)Lcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Item; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt;->ah$createOrganizationFilterAction$default(Ljava/lang/String;Lcom/artemchep/keyguard/feature/home/vault/screen/CreateFilterResult;Ljava/util/Set;Ljava/lang/String;Landroidx/compose/ui/graphics/vector/ImageVector;ILjava/lang/Object;)Lcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Item; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt;->ah$createOrganizationFilterAction(Ljava/lang/String;Lcom/artemchep/keyguard/feature/home/vault/screen/CreateFilterResult;Ljava/util/Set;Ljava/lang/String;Landroidx/compose/ui/graphics/vector/ImageVector;)Lcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Item; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt;->ah$createTypeFilterAction$default(Ljava/lang/String;Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;Lcom/artemchep/keyguard/feature/home/vault/screen/CreateFilterResult;Lcom/artemchep/keyguard/common/model/DSecret$Type;Ljava/lang/String;ILjava/lang/Object;)Lcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Item; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt;->ah$createTypeFilterAction(Ljava/lang/String;Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;Lcom/artemchep/keyguard/feature/home/vault/screen/CreateFilterResult;Lcom/artemchep/keyguard/common/model/DSecret$Type;Ljava/lang/String;)Lcom/artemchep/keyguard/feature/home/vault/model/FilterItem$Item; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt;->ah$filterSection(Lkotlinx/coroutines/flow/Flow;Z)Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt;->ah(Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;Lorg/kodein/di/DirectDI;Lkotlin/jvm/functions/Function1;Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function1;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function1;Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function1;Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function1;Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function1;Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/feature/home/vault/screen/CreateFilterResult;Lcom/artemchep/keyguard/feature/home/vault/screen/FilterParams;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt;->createFilter(Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt;->mapCiphers(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$combine$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$combine$1;->([Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$combine$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$combine$1$2; +PLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$combine$1$2;->([Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$combine$1$2;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$combine$1$2;->invoke()[Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$combine$1$3; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$combine$1$3;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$combine$1$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$combine$1$3;->invoke(Lkotlinx/coroutines/flow/FlowCollector;[Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$combine$1$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function1;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$1$2; +PLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/jvm/functions/Function1;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$2;->(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function1;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$2;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$2$2; +PLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$2$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/jvm/functions/Function1;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$2$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$2$2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$2$2$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$2$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$2$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$3; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$3;->(Lkotlinx/coroutines/flow/Flow;Ljava/lang/String;Lcom/artemchep/keyguard/feature/home/vault/screen/CreateFilterResult;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$3;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$3$2; +PLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$3$2;->(Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/String;Lcom/artemchep/keyguard/feature/home/vault/screen/CreateFilterResult;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$3$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$3$2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$3$2$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$3$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$3$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$4; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$4;->(Lkotlinx/coroutines/flow/Flow;Ljava/util/List;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$4;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$4$2; +PLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$4$2;->(Lkotlinx/coroutines/flow/FlowCollector;Ljava/util/List;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$4$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$4$2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$4$2$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$4$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$4$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$5; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$5;->(Lkotlinx/coroutines/flow/Flow;Ljava/util/Set;Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;Lkotlin/jvm/functions/Function1;Lcom/artemchep/keyguard/common/usecase/GetFolderTree;Ljava/lang/String;Lcom/artemchep/keyguard/feature/home/vault/screen/CreateFilterResult;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$5;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$5$2; +PLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$5$2;->(Lkotlinx/coroutines/flow/FlowCollector;Ljava/util/Set;Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;Lkotlin/jvm/functions/Function1;Lcom/artemchep/keyguard/common/usecase/GetFolderTree;Ljava/lang/String;Lcom/artemchep/keyguard/feature/home/vault/screen/CreateFilterResult;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$5$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$5$2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$5$2$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$5$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$5$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$6; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$6;->(Lkotlinx/coroutines/flow/Flow;Ljava/util/Set;Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;Lkotlin/jvm/functions/Function1;Ljava/lang/String;Lcom/artemchep/keyguard/feature/home/vault/screen/CreateFilterResult;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$6;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$6$2; +PLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$6$2;->(Lkotlinx/coroutines/flow/FlowCollector;Ljava/util/Set;Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;Lkotlin/jvm/functions/Function1;Ljava/lang/String;Lcom/artemchep/keyguard/feature/home/vault/screen/CreateFilterResult;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$6$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$6$2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$6$2$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$6$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$6$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$7; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$7;->(Lkotlinx/coroutines/flow/Flow;Ljava/util/Set;Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;Lkotlin/jvm/functions/Function1;Ljava/lang/String;Lcom/artemchep/keyguard/feature/home/vault/screen/CreateFilterResult;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$7;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$7$2; +PLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$7$2;->(Lkotlinx/coroutines/flow/FlowCollector;Ljava/util/Set;Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;Lkotlin/jvm/functions/Function1;Ljava/lang/String;Lcom/artemchep/keyguard/feature/home/vault/screen/CreateFilterResult;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$7$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$7$2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$7$2$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$7$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$7$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$8; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$8;->(Lkotlinx/coroutines/flow/Flow;Ljava/util/List;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$8;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$8$2; +PLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$8$2;->(Lkotlinx/coroutines/flow/FlowCollector;Ljava/util/List;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$8$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$8$2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$8$2$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$8$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$8$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$9; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$9;->(Lkotlinx/coroutines/flow/Flow;Ljava/util/List;Ljava/util/List;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$9;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$9$2; +PLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$9$2;->(Lkotlinx/coroutines/flow/FlowCollector;Ljava/util/List;Ljava/util/List;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$9$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$9$2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$9$2$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$9$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$$inlined$map$9$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$1;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$3; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$3;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$3;->invoke(Ljava/util/List;Ljava/util/List;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$4; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$4;->(Lorg/kodein/di/DirectDI;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$4;->invoke(Ljava/util/List;Ljava/util/List;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$4;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$4$checkedSectionIds$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$4$checkedSectionIds$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$4$checkedSectionIds$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$4$checkedSectionIds$1;->invoke(Lcom/artemchep/keyguard/feature/home/vault/model/FilterItem;)Ljava/lang/String; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$4$checkedSectionIds$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$5; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$5;->(Lcom/artemchep/keyguard/feature/home/vault/screen/CreateFilterResult;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$5;->invoke(Ljava/util/List;Lcom/artemchep/keyguard/feature/home/vault/search/filter/FilterHolder;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$5;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$aaa$$inlined$map$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$aaa$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;ZLjava/lang/String;Ljava/lang/String;Lkotlinx/coroutines/flow/MutableStateFlow;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$aaa$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$aaa$$inlined$map$1$2; +PLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$aaa$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;ZLjava/lang/String;Ljava/lang/String;Lkotlinx/coroutines/flow/MutableStateFlow;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$aaa$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$aaa$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$aaa$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$aaa$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$aaa$$inlined$map$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$aaa$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$aaa$1;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$aaa$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$aaa$1;->invoke(Ljava/util/List;Lcom/artemchep/keyguard/feature/home/vault/search/filter/FilterHolder;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$aaa$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$aaa$2$1$sectionItem$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$aaa$2$1$sectionItem$1;->(Ljava/lang/String;Lkotlinx/coroutines/flow/MutableStateFlow;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$collapsedSectionIdsSink$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$collapsedSectionIdsSink$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$collapsedSectionIdsSink$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$collapsedSectionIdsSink$1;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$collapsedSectionIdsSink$1;->invoke()Ljava/util/List; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$createCollectionFilterAction$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$createCollectionFilterAction$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$createCollectionFilterAction$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$createCollectionFilterAction$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$createCollectionFilterAction$1;->invoke(Ljava/lang/String;)Lcom/artemchep/keyguard/common/model/DFilter$ById; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$createFilterAction$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$createFilterAction$1;->(Landroidx/compose/ui/graphics/vector/ImageVector;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$createFolderFilterAction$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$createFolderFilterAction$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$createFolderFilterAction$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$createFolderFilterAction$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$createFolderFilterAction$1;->invoke(Ljava/lang/String;)Lcom/artemchep/keyguard/common/model/DFilter$ById; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$createOrganizationFilterAction$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$createOrganizationFilterAction$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$createOrganizationFilterAction$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$createOrganizationFilterAction$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$createOrganizationFilterAction$1;->invoke(Ljava/lang/String;)Lcom/artemchep/keyguard/common/model/DFilter$ById; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterAccountListFlow$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterAccountListFlow$2;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterAccountListFlow$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterAccountListFlow$2;->invoke(Ljava/util/List;Ljava/util/Set;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterAccountListFlow$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterAccountsWithCiphers$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterAccountsWithCiphers$1;->(Lkotlin/jvm/functions/Function1;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterCollectionListFlow$1$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterCollectionListFlow$1$2;->(Lkotlin/jvm/functions/Function1;Ljava/lang/String;Lcom/artemchep/keyguard/feature/home/vault/screen/CreateFilterResult;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterCollectionListFlow$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterCollectionListFlow$2;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterCollectionListFlow$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterCollectionListFlow$2;->invoke(Ljava/util/List;Ljava/util/Set;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterCollectionListFlow$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterCollectionsWithCiphers$1$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterCollectionsWithCiphers$1$1;->(Lkotlin/jvm/functions/Function1;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterFolderListFlow$1$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterFolderListFlow$1$2;->(Lkotlin/jvm/functions/Function1;Ljava/lang/String;Lcom/artemchep/keyguard/feature/home/vault/screen/CreateFilterResult;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterFolderListFlow$1$p$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterFolderListFlow$1$p$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterFolderListFlow$1$p$1;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterFolderListFlow$1$p$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterFolderListFlow$1$p$2;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterFolderListFlow$1$p$2;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterFolderListFlow$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterFolderListFlow$2;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterFolderListFlow$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterFolderListFlow$2;->invoke(Ljava/util/List;Ljava/util/Set;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterFolderListFlow$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterFoldersWithCiphers$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterFoldersWithCiphers$1;->(Lkotlin/jvm/functions/Function1;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterOrganizationListFlow$1$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterOrganizationListFlow$1$2;->(Lkotlin/jvm/functions/Function1;Ljava/lang/String;Lcom/artemchep/keyguard/feature/home/vault/screen/CreateFilterResult;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterOrganizationListFlow$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterOrganizationListFlow$2;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterOrganizationListFlow$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterOrganizationListFlow$2;->invoke(Ljava/util/List;Ljava/util/Set;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterOrganizationListFlow$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterOrganizationsWithCiphers$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterOrganizationsWithCiphers$1;->(Lkotlin/jvm/functions/Function1;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterTypesWithCiphers$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$filterTypesWithCiphers$1;->(Lkotlin/jvm/functions/Function1;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$lambda$17$$inlined$sortedBy$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$lambda$17$$inlined$sortedBy$1;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$lambda$20$$inlined$sortedBy$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$lambda$20$$inlined$sortedBy$1;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$lambda$23$$inlined$sortedBy$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$ah$lambda$23$$inlined$sortedBy$1;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$createFilter$filterSink$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$createFilter$filterSink$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$createFilter$filterSink$1;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$createFilter$filterSink$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$createFilter$filterSink$2;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$createFilter$filterSink$2;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$createFilter$filterSink$3; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$createFilter$filterSink$3;->(Lcom/artemchep/keyguard/feature/home/vault/search/filter/FilterHolder;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$createFilter$filterSink$3;->invoke()Lcom/artemchep/keyguard/feature/home/vault/search/filter/FilterHolder; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$createFilter$filterSink$3;->invoke()Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$createFilter$onClear$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$createFilter$onClear$1;->(Lkotlinx/coroutines/flow/MutableStateFlow;Lcom/artemchep/keyguard/feature/home/vault/search/filter/FilterHolder;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$createFilter$onToggle$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$createFilter$onToggle$1;->(Lkotlinx/coroutines/flow/MutableStateFlow;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$mapCiphers$$inlined$map$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$mapCiphers$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function1;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$mapCiphers$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$mapCiphers$$inlined$map$1$2; +PLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$mapCiphers$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/jvm/functions/Function1;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$mapCiphers$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$mapCiphers$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$mapCiphers$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$mapCiphers$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListFilterKt$mapCiphers$$inlined$map$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListRoute; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListRoute;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListRoute;->(Lcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListRoute;->Content(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListRoute;->hashCode()I +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt;->VaultHomeScreenListPane(Landroidx/compose/ui/Modifier;Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;Lcom/artemchep/keyguard/ui/focus/FocusRequester2;Ljava/lang/String;Ljava/lang/String;ZZZLandroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt;->VaultListFilterButton(Landroidx/compose/ui/Modifier;Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;Landroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt;->VaultListScreen(Lcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt;->VaultListSortButton(Landroidx/compose/ui/Modifier;Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;Landroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt;->access$VaultListFilterButton(Landroidx/compose/ui/Modifier;Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;Landroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt;->access$VaultListSortButton(Landroidx/compose/ui/Modifier;Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;Landroidx/compose/runtime/Composer;II)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$Items$Revision;Landroidx/compose/foundation/lazy/LazyListState;Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$Items;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$2;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$Items$Revision;Landroidx/compose/foundation/lazy/LazyListState;Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$Items;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$4; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$4;->(Landroidx/compose/material3/TopAppBarScrollBehavior;Ljava/lang/String;Ljava/lang/String;Lcom/artemchep/keyguard/ui/focus/FocusRequester2;Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;Z)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$4;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$4$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$4$1;->(Ljava/lang/String;Ljava/lang/String;Lcom/artemchep/keyguard/ui/focus/FocusRequester2;Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;Z)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$4$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$4$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$4$1$1$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$4$1$1$2;->(Z)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$4$1$1$2;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$4$1$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$4$1$1$3; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$4$1$1$3;->(ZZLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$4$1$1$3;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$4$1$1$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$5; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$5;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$5;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$6; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$6;->(Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/State;Landroidx/compose/runtime/MutableState;Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$6;->invoke(Lcom/artemchep/keyguard/ui/FabScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$6;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$6$1$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$6$1$1;->(Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/State;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$6$1$2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$6$1$2$1;->(Landroidx/compose/runtime/MutableState;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$6$1$3; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$6$1$3;->(Landroidx/compose/runtime/MutableState;Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$7; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$7;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;Landroidx/compose/material/pullrefresh/PullRefreshState;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$7;->invoke(Lcom/artemchep/keyguard/ui/OverlayScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$7;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$8$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$8$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;ZZ)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$8$1;->invoke(Landroidx/compose/foundation/lazy/LazyListScope;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$8$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$8$1$1; +PLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$8$1$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$8$1$1;->invoke(Landroidx/compose/foundation/lazy/LazyItemScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$8$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$8$1$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$8$1$2;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$8$1$2;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$8$1$invoke$$inlined$items$default$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$8$1$invoke$$inlined$items$default$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$8$1$invoke$$inlined$items$default$1;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$8$1$invoke$$inlined$items$default$2; +PLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$8$1$invoke$$inlined$items$default$2;->(Lkotlin/jvm/functions/Function1;Ljava/util/List;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$8$1$invoke$$inlined$items$default$3; +PLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$8$1$invoke$$inlined$items$default$3;->(Lkotlin/jvm/functions/Function1;Ljava/util/List;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$8$1$invoke$$inlined$items$default$4; +PLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$8$1$invoke$$inlined$items$default$4;->(Ljava/util/List;ZLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;Z)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$pullRefreshState$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultHomeScreenListPane$pullRefreshState$1;->(Lcom/artemchep/keyguard/ui/focus/FocusRequester2;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$1$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$1$1;->(Landroidx/compose/runtime/MutableState;Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$1$1;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$1$1;->invoke()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$2;->(Lkotlin/jvm/functions/Function1;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$2;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$2$1;->(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$2$1$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$2$1$1;->(Lkotlin/jvm/functions/Function1;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$2$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$2$1$1;->emit(Ljava/util/List;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$2$childBackStackFlow$1$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$2$childBackStackFlow$1$1;->(Lkotlinx/collections/immutable/PersistentList;Ljava/lang/String;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$2$childBackStackFlow$1$1;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$2$childBackStackFlow$1$1;->invoke()Ljava/util/List; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$3$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$3$1;->(Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$4; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$4;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$5; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$5;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;Lcom/artemchep/keyguard/ui/focus/FocusRequester2;Lcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$5;->invoke(Lcom/artemchep/keyguard/feature/twopane/TwoPaneScaffoldScope;Landroidx/compose/ui/Modifier;ZLandroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$6; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$6;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;Lcom/artemchep/keyguard/ui/focus/FocusRequester2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$6;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$6;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$7; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$7;->(Lcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args;I)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$7;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListScreenKt$VaultListScreen$7;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;->(ILcom/artemchep/keyguard/feature/auth/common/TextFieldModel2;Ljava/util/List;Ljava/util/List;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;ZLjava/util/List;Ljava/util/List;Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content;Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$SideEffects;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;->(ILcom/artemchep/keyguard/feature/auth/common/TextFieldModel2;Ljava/util/List;Ljava/util/List;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;ZLjava/util/List;Ljava/util/List;Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content;Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$SideEffects;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;->copy$default(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;ILcom/artemchep/keyguard/feature/auth/common/TextFieldModel2;Ljava/util/List;Ljava/util/List;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;ZLjava/util/List;Ljava/util/List;Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content;Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$SideEffects;ILjava/lang/Object;)Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;->copy(ILcom/artemchep/keyguard/feature/auth/common/TextFieldModel2;Ljava/util/List;Ljava/util/List;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;ZLjava/util/List;Ljava/util/List;Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content;Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$SideEffects;)Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;->equals(Ljava/lang/Object;)Z +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;->getActions()Ljava/util/List; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;->getClearFilters()Lkotlin/jvm/functions/Function0; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;->getClearSort()Lkotlin/jvm/functions/Function0; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;->getContent()Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;->getFilters()Ljava/util/List; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;->getPrimaryActions()Ljava/util/List; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;->getQuery()Lcom/artemchep/keyguard/feature/auth/common/TextFieldModel2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;->getSelectCipher()Lkotlin/jvm/functions/Function1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;->getShowKeyboard()Z +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;->getSideEffects()Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$SideEffects; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;->getSort()Ljava/util/List; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Companion; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Companion;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$AddAccount; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$AddAccount;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$AddAccount;->(Lkotlin/jvm/functions/Function0;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$AddAccount;->getOnAddAccount()Lkotlin/jvm/functions/Function0; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$AddAccount$Companion; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$AddAccount$Companion;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$AddAccount$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$Items; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$Items;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$Items;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$Items$Revision;Lcom/artemchep/keyguard/ui/Selection;Ljava/util/List;ILkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$Items;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$Items$Revision;Lcom/artemchep/keyguard/ui/Selection;Ljava/util/List;ILkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$Items$Companion; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$Items$Companion;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$Items$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$Items$Revision; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$Items$Revision;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$Items$Revision;->(ILcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$Items$Revision$Mutable;Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$Items$Revision$Mutable;Lkotlin/jvm/functions/Function2;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$Items$Revision$Companion; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$Items$Revision$Companion;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$Items$Revision$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$Items$Revision$Mutable; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$Skeleton; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$Skeleton;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$Skeleton;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$SideEffects; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$SideEffects;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$SideEffects;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$SideEffects;->(Lkotlinx/coroutines/flow/Flow;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$SideEffects;->getShowBiometricPromptFlow()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$SideEffects$Companion; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$SideEffects$Companion;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$SideEffects$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt;->access$hahah-Samhc0A(Lorg/kodein/di/DirectDI;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/common/model/AutofillTarget;Lcom/artemchep/keyguard/common/usecase/GetSuggestions;Lcom/artemchep/keyguard/common/usecase/DateFormatter;JJ)Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt;->hahah-Samhc0A(Lorg/kodein/di/DirectDI;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/common/model/AutofillTarget;Lcom/artemchep/keyguard/common/usecase/GetSuggestions;Lcom/artemchep/keyguard/common/usecase/DateFormatter;JJ)Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt;->vaultListScreenState-ML3G3h0(Lorg/kodein/di/DirectDI;Lcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args;JJLcom/artemchep/keyguard/AppMode;Lcom/artemchep/keyguard/common/service/deeplink/DeeplinkService;Lcom/artemchep/keyguard/common/usecase/GetSuggestions;Lcom/artemchep/keyguard/common/usecase/GetAccounts;Lcom/artemchep/keyguard/common/usecase/GetProfiles;Lcom/artemchep/keyguard/common/usecase/GetCanWrite;Lcom/artemchep/keyguard/common/usecase/GetCiphers;Lcom/artemchep/keyguard/common/usecase/GetFolders;Lcom/artemchep/keyguard/common/usecase/GetCollections;Lcom/artemchep/keyguard/common/usecase/GetOrganizations;Lcom/artemchep/keyguard/common/usecase/GetTotpCode;Lcom/artemchep/keyguard/common/usecase/GetConcealFields;Lcom/artemchep/keyguard/common/usecase/GetAppIcons;Lcom/artemchep/keyguard/common/usecase/GetWebsiteIcons;Lcom/artemchep/keyguard/common/usecase/GetPasswordStrength;Lcom/artemchep/keyguard/common/usecase/GetCipherOpenedHistory;Lcom/artemchep/keyguard/common/usecase/PasskeyTargetCheck;Lcom/artemchep/keyguard/common/usecase/RenameFolderById;Lcom/artemchep/keyguard/common/usecase/ClearVaultSession;Lcom/artemchep/keyguard/common/usecase/CipherToolbox;Lcom/artemchep/keyguard/common/usecase/QueueSyncAll;Lcom/artemchep/keyguard/common/usecase/SupervisorRead;Lcom/artemchep/keyguard/common/usecase/DateFormatter;Lcom/artemchep/keyguard/common/service/clipboard/ClipboardService;Landroidx/compose/runtime/Composer;III)Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt;->vaultListScreenState-RIQooxk(Lcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args;JJLcom/artemchep/keyguard/AppMode;Landroidx/compose/runtime/Composer;I)Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah$2$orderComparator$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah$2$orderComparator$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/ComparatorHolder;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah$3; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah$3;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah$3;->invoke(Lcom/artemchep/keyguard/feature/home/vault/screen/FilteredBoo;Lkotlin/Pair;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah$4; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah$4;->(Lorg/kodein/di/DirectDI;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah$4;->invoke(Lcom/artemchep/keyguard/feature/home/vault/screen/FilteredBoo;Lcom/artemchep/keyguard/feature/home/vault/search/filter/FilterHolder;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah$4;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah$5; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah$5;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah$5;->invoke(Lcom/artemchep/keyguard/feature/home/vault/screen/FilteredBoo;Lcom/artemchep/keyguard/feature/home/vault/search/IndexedText;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah$5;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah$6; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah$6;->(JJLkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah$6;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah$6;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah$6;->invoke(Lkotlin/Pair;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah$6;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah$7$items$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah$7$items$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/FilteredBoo;Lcom/artemchep/keyguard/feature/home/vault/screen/ComparatorHolder;Lcom/artemchep/keyguard/feature/decorator/ItemDecorator;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah$7$items$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah$7$items$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah-Samhc0A$$inlined$map$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah-Samhc0A$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/common/model/AutofillTarget;Lcom/artemchep/keyguard/common/usecase/GetSuggestions;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah-Samhc0A$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah-Samhc0A$$inlined$map$1$2; +PLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah-Samhc0A$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lcom/artemchep/keyguard/common/model/AutofillTarget;Lcom/artemchep/keyguard/common/usecase/GetSuggestions;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah-Samhc0A$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah-Samhc0A$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah-Samhc0A$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah-Samhc0A$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah-Samhc0A$$inlined$map$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah-Samhc0A$$inlined$map$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah-Samhc0A$$inlined$map$2;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah-Samhc0A$$inlined$map$2;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah-Samhc0A$$inlined$map$2$2; +PLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah-Samhc0A$$inlined$map$2$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah-Samhc0A$$inlined$map$2$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah-Samhc0A$$inlined$map$2$2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah-Samhc0A$$inlined$map$2$2$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah-Samhc0A$$inlined$map$2$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah-Samhc0A$$inlined$map$2$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah-Samhc0A$$inlined$map$3; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah-Samhc0A$$inlined$map$3;->(Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/common/usecase/DateFormatter;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah-Samhc0A$$inlined$map$3;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah-Samhc0A$$inlined$map$3$2; +PLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah-Samhc0A$$inlined$map$3$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lcom/artemchep/keyguard/common/usecase/DateFormatter;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah-Samhc0A$$inlined$map$3$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah-Samhc0A$$inlined$map$3$2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah-Samhc0A$$inlined$map$3$2$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$hahah-Samhc0A$$inlined$map$3$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2;->(Lcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args;Lcom/artemchep/keyguard/common/service/clipboard/ClipboardService;Lcom/artemchep/keyguard/common/usecase/GetCiphers;Lcom/artemchep/keyguard/common/usecase/SupervisorRead;Lcom/artemchep/keyguard/common/usecase/GetConcealFields;Lcom/artemchep/keyguard/common/usecase/GetAppIcons;Lcom/artemchep/keyguard/common/usecase/GetWebsiteIcons;Lcom/artemchep/keyguard/common/usecase/GetOrganizations;Lcom/artemchep/keyguard/AppMode;Lorg/kodein/di/DirectDI;Lcom/artemchep/keyguard/common/usecase/GetSuggestions;Lcom/artemchep/keyguard/common/usecase/DateFormatter;JJLcom/artemchep/keyguard/common/service/deeplink/DeeplinkService;Lcom/artemchep/keyguard/common/usecase/GetAccounts;Lcom/artemchep/keyguard/common/usecase/GetProfiles;Lcom/artemchep/keyguard/common/usecase/GetFolders;Lcom/artemchep/keyguard/common/usecase/GetCollections;Lcom/artemchep/keyguard/common/usecase/GetCanWrite;Lcom/artemchep/keyguard/common/usecase/CipherToolbox;Lcom/artemchep/keyguard/common/usecase/QueueSyncAll;Lcom/artemchep/keyguard/common/usecase/ClearVaultSession;Lcom/artemchep/keyguard/common/usecase/RenameFolderById;Lcom/artemchep/keyguard/common/usecase/PasskeyTargetCheck;Lcom/artemchep/keyguard/common/usecase/GetTotpCode;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2;->invoke(Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2;->invokeSuspend$createComparatorAction$default(Lkotlinx/coroutines/flow/MutableStateFlow;Ljava/lang/String;Ldev/icerock/moko/resources/StringResource;Landroidx/compose/ui/graphics/vector/ImageVector;Lcom/artemchep/keyguard/feature/home/vault/screen/ComparatorHolder;ILjava/lang/Object;)Lcom/artemchep/keyguard/feature/home/vault/model/SortItem$Item; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2;->invokeSuspend$createComparatorAction(Lkotlinx/coroutines/flow/MutableStateFlow;Ljava/lang/String;Ldev/icerock/moko/resources/StringResource;Landroidx/compose/ui/graphics/vector/ImageVector;Lcom/artemchep/keyguard/feature/home/vault/screen/ComparatorHolder;)Lcom/artemchep/keyguard/feature/home/vault/model/SortItem$Item; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$1;->(Lcom/artemchep/keyguard/ui/selection/SelectionHandle;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$1;->invoke(Ljava/util/List;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$2;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$2;->invoke(Ljava/util/List;Lcom/artemchep/keyguard/feature/home/vault/screen/ComparatorHolder;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$4; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$4;->(Landroidx/compose/runtime/MutableState;Lcom/artemchep/keyguard/feature/home/vault/screen/ComparatorHolder;Lcom/artemchep/keyguard/common/util/flow/EventFlow;Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;Lcom/artemchep/keyguard/AppMode;Lkotlinx/coroutines/flow/MutableStateFlow;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$4;->invoke(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState$Content$Items;Lcom/artemchep/keyguard/feature/home/vault/screen/OurFilterResult;Lkotlin/Pair;Lkotlin/Pair;ZLkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$4;->invokeSuspend$createTypeAction(Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;Lcom/artemchep/keyguard/AppMode;Ljava/lang/String;Lcom/artemchep/keyguard/common/model/DSecret$Type;)Lcom/artemchep/keyguard/ui/FlatItemAction; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$4;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$4$3; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$4$3;->(Ljava/lang/Object;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$4$content$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$4$content$1;->(Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$4$createTypeAction$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$4$createTypeAction$1;->(Lcom/artemchep/keyguard/AppMode;Ljava/lang/String;Lcom/artemchep/keyguard/common/model/DSecret$Type;Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$5; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$5;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$5;->invoke(ZLjava/util/Set;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$5;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$6; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$6;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$6;->invoke(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;ZLkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$6;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$6;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$7; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$7;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$7;->invoke(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;Lkotlinx/collections/immutable/PersistentList;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$7;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$7;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$8; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$8;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$8;->invoke(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListState;ZLkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$8;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$8;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$ConfigMapper; +PLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$ConfigMapper;->(ZZZ)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$Fuu; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$Fuu;->(Lcom/artemchep/keyguard/feature/home/vault/model/SortItem$Item;Ljava/util/List;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$Fuu;->getItem()Lcom/artemchep/keyguard/feature/home/vault/model/SortItem$Item; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$Fuu;->getSubItems()Ljava/util/List; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$Rev; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$Rev;->(ILjava/util/List;I)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$Rev;->copy$default(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$Rev;ILjava/util/List;IILjava/lang/Object;)Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$Rev; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$Rev;->copy(ILjava/util/List;I)Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$Rev; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$Rev;->getCount()I +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$Rev;->getList()Ljava/util/List; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$Rev;->getRevision()I +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$1$1$1$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$1$1$1$1;->(Lkotlinx/collections/immutable/PersistentList;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$1$1$1$1;->invoke(Lcom/artemchep/keyguard/ui/ContextItemBuilder;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$1$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$actionAlwaysShowKeyboardFlow$1$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$actionAlwaysShowKeyboardFlow$1$1;->(ZLkotlinx/coroutines/flow/MutableStateFlow;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$actionAlwaysShowKeyboardFlow$1$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$actionAlwaysShowKeyboardFlow$1$2;->(Ljava/lang/Object;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$actionAlwaysShowKeyboardFlow$1$3; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$actionAlwaysShowKeyboardFlow$1$3;->(Ljava/lang/Object;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$actionDownloadsItem$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$actionDownloadsItem$1;->(Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$actionGroup2Flow$1$1$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$actionGroup2Flow$1$1$1;->([Lcom/artemchep/keyguard/ui/FlatItemAction;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$actionGroup2Flow$1$1$1;->invoke(Lcom/artemchep/keyguard/ui/ContextItemBuilder;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$actionGroup2Flow$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$actionGroup3Flow$1$1$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$actionGroup3Flow$1$1$1;->([Lcom/artemchep/keyguard/ui/FlatItemAction;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$actionGroup3Flow$1$1$1;->invoke(Lcom/artemchep/keyguard/ui/ContextItemBuilder;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$actionGroup3Flow$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$actionGroupFlow$1$1$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$actionGroupFlow$1$1$1;->([Lcom/artemchep/keyguard/ui/FlatItemAction;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$actionGroupFlow$1$1$1;->invoke(Lcom/artemchep/keyguard/ui/ContextItemBuilder;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$actionGroupFlow$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$actionLockVaultItem$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$actionLockVaultItem$1;->(Lcom/artemchep/keyguard/common/usecase/ClearVaultSession;Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$actionSyncAccountsFlow$1$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$actionSyncAccountsFlow$1$1;->(Z)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$actionSyncAccountsFlow$1$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$actionSyncAccountsFlow$1$2;->(Lcom/artemchep/keyguard/common/usecase/QueueSyncAll;Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$actionTrashItem$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$actionsFlow$1$actionTrashItem$1;->(Lcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args;Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$ciphersFlow$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$ciphersFlow$1;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$ciphersFlow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$ciphersFlow$1;->invoke(Ljava/util/List;Ljava/util/Map;Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$ConfigMapper;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$ciphersFlow$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$ciphersFlow$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$ciphersFlow$2;->(Lcom/artemchep/keyguard/AppMode;Lcom/artemchep/keyguard/common/usecase/PasskeyTargetCheck;Lcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args;Lcom/artemchep/keyguard/ui/selection/SelectionHandle;Lkotlinx/coroutines/flow/MutableStateFlow;Lcom/artemchep/keyguard/common/usecase/CopyText;Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;Lcom/artemchep/keyguard/common/usecase/GetTotpCode;Lcom/artemchep/keyguard/common/util/flow/EventFlow;Lorg/kodein/di/DirectDI;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$ciphersFlow$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$ciphersFlow$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/Triple;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$ciphersFlow$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$configFlow$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$configFlow$1;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$configFlow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$configFlow$1;->invoke(ZZZLkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$configFlow$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$createComparatorAction$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$createComparatorAction$1;->(Lkotlinx/coroutines/flow/MutableStateFlow;Lcom/artemchep/keyguard/feature/home/vault/screen/ComparatorHolder;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$fffFolderId$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$fffFolderId$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$fffFolderId$1;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$filterListFlow$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$filterListFlow$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$filterListFlow$1;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$filterListFlow$3; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$filterListFlow$3;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$filterListFlow$3;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$filterListFlow$4; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$filterListFlow$4;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$filterListFlow$4;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$filterListFlow$5; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$filterListFlow$5;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$filterListFlow$5;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$filterListFlow$6; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$filterListFlow$6;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$filterListFlow$6;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$filterListFlow$7; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$filterListFlow$7;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$filterListFlow$7;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$1$2; +PLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$2;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$2;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$2$2; +PLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$2$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$2$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$2$2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$2$2$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$2$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$2$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$3; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$3;->(Lkotlinx/coroutines/flow/Flow;Ljava/util/Map;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$3;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$3$2; +PLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$3$2;->(Lkotlinx/coroutines/flow/FlowCollector;Ljava/util/Map;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$3$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$3$2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$3$2$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$3$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$3$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$4; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$4;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$4;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$4$2; +PLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$4$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$4$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$4$2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$4$2$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$4$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$4$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$5; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$5;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$5;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$5$2; +PLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$5$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$5$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$5$2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$5$2$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$5$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$5$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$6; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$6;->(Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/AppMode;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$6;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$6$2; +PLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$6$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lcom/artemchep/keyguard/AppMode;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$6$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$6$2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$6$2$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$6$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$7; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$7;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$7;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$7$2; +PLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$7$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$7$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$7$2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$7$2$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$7$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$7$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$8; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$8;->(Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$8;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$8$2; +PLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$8$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$8$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$8$2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$8$2$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$8$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$8$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$9; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$9;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$9;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$9$2; +PLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$9$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$9$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$9$2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$9$2$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$9$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$$inlined$map$9$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$1;->([Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$1$2; +PLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$1$2;->([Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$1$2;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$1$2;->invoke()[Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$1$3; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$1$3;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$1$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$1$3;->invoke(Lkotlinx/coroutines/flow/FlowCollector;[Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$1$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$2;->([Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$2;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$2$2; +PLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$2$2;->([Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$2$2;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$2$2;->invoke()[Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$2$3; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$2$3;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$2$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$2$3;->invoke(Lkotlinx/coroutines/flow/FlowCollector;[Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$2$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$3; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$3;->([Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$3;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$3$2; +PLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$3$2;->([Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$3$2;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$3$2;->invoke()[Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$3$3; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$3$3;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$3$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$3$3;->invoke(Lkotlinx/coroutines/flow/FlowCollector;[Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$3$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$4; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$4;->([Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$4;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$4$2; +PLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$4$2;->([Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$4$2;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$4$2;->invoke()[Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$4$3; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$4$3;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$4$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$4$3;->invoke(Lkotlinx/coroutines/flow/FlowCollector;[Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$combine$4$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;Lkotlinx/coroutines/flow/MutableStateFlow;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$1$2; +PLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;Lkotlinx/coroutines/flow/MutableStateFlow;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$2;->(Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;Lcom/artemchep/keyguard/common/usecase/QueueSyncAll;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$2;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$2$2; +PLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$2$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;Lcom/artemchep/keyguard/common/usecase/QueueSyncAll;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$2$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$2$2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$2$2$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$2$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$2$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$3; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$3;->(Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;Ljava/lang/String;Lcom/artemchep/keyguard/common/usecase/RenameFolderById;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$3;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$3$2; +PLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$3$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;Ljava/lang/String;Lcom/artemchep/keyguard/common/usecase/RenameFolderById;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$3$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$3$2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$3$2$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$3$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$3$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$4; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$4;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$4;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$4$2; +PLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$4$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$4$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$4$2$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$4$2$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$4$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$invokeSuspend$lambda$22$$inlined$map$4$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$itemSink$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$itemSink$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$itemSink$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$itemSink$1;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$itemSink$1;->invoke()Ljava/lang/String; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$itemsFlow$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$itemsFlow$2;->(Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlinx/coroutines/flow/MutableStateFlow;Lkotlinx/coroutines/flow/MutableStateFlow;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$itemsFlow$2;->invoke(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$Rev;Lcom/artemchep/keyguard/ui/Selection;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$itemsFlow$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$itemsFlow$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$itemsFlow$2$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$itemsFlow$2$2;->(Ljava/util/List;Lkotlin/jvm/internal/Ref$ObjectRef;Ljava/util/List;Lkotlinx/coroutines/flow/MutableStateFlow;Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$Rev;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$itemsFlow$2$3; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$itemsFlow$2$3;->(Lkotlinx/coroutines/flow/MutableStateFlow;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$itemsFlow$2$a$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$itemsFlow$2$a$1;->(Lkotlinx/coroutines/flow/MutableStateFlow;Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$Rev;Ljava/util/List;II)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$itemsFlow$2$b$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$itemsFlow$2$b$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$itemsFlow$2$a$1;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$itemsFlow$2$c$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$itemsFlow$2$c$1;->(Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$itemsFlow$2$a$1;)V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$querySink$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$querySink$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$querySink$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$querySink$1;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$querySink$1;->invoke()Ljava/lang/String; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$scrollPositionSink$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$scrollPositionSink$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$scrollPositionSink$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$scrollPositionSink$1;->invoke()Lcom/artemchep/keyguard/feature/home/vault/screen/OhOhOh; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$scrollPositionSink$1;->invoke()Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$showKeyboardSink$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$showKeyboardSink$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$showKeyboardSink$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$showKeyboardSink$1;->invoke()Ljava/lang/Boolean; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$showKeyboardSink$1;->invoke()Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$sortSink$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$sortSink$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$sortSink$1;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$sortSink$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$sortSink$2;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$sortSink$2;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$sortSink$3; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$sortSink$3;->(Lcom/artemchep/keyguard/feature/home/vault/VaultRoute$Args;Lcom/artemchep/keyguard/feature/home/vault/screen/ComparatorHolder;)V +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$sortSink$3;->invoke()Lcom/artemchep/keyguard/feature/home/vault/screen/ComparatorHolder; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState$2$sortSink$3;->invoke()Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$10; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$10;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$11; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$11;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$12; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$12;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$13; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$13;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$14; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$14;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$15; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$15;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$16; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$16;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$17; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$17;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$18; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$18;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$19; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$19;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$20; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$20;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$21; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$21;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$22; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$22;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$23; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$23;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$3; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$3;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$4; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$4;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$5; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$5;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$6; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$6;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$7; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$7;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$8; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$8;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$9; +HSPLcom/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducerKt$vaultListScreenState_RIQooxk$lambda$0$$inlined$instance$default$9;->()V +Lcom/artemchep/keyguard/feature/home/vault/screen/VaultViewRoute; +Lcom/artemchep/keyguard/feature/home/vault/search/IndexedText; +Lcom/artemchep/keyguard/feature/home/vault/search/filter/FilterHolder; +HSPLcom/artemchep/keyguard/feature/home/vault/search/filter/FilterHolder;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/search/filter/FilterHolder;->(Ljava/util/Map;)V +HSPLcom/artemchep/keyguard/feature/home/vault/search/filter/FilterHolder;->getFilter()Lcom/artemchep/keyguard/common/model/DFilter$And; +HSPLcom/artemchep/keyguard/feature/home/vault/search/filter/FilterHolder;->getId()I +HSPLcom/artemchep/keyguard/feature/home/vault/search/filter/FilterHolder;->getState()Ljava/util/Map; +Lcom/artemchep/keyguard/feature/home/vault/search/filter/FilterHolder$1; +HSPLcom/artemchep/keyguard/feature/home/vault/search/filter/FilterHolder$1;->(Lcom/artemchep/keyguard/feature/home/vault/search/filter/FilterHolder;)V +HSPLcom/artemchep/keyguard/feature/home/vault/search/filter/FilterHolder$1;->invoke()Lcom/artemchep/keyguard/common/model/DFilter$And; +HSPLcom/artemchep/keyguard/feature/home/vault/search/filter/FilterHolder$1;->invoke()Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/home/vault/search/filter/FilterHolder$2; +HSPLcom/artemchep/keyguard/feature/home/vault/search/filter/FilterHolder$2;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/search/filter/FilterHolder$2;->()V +Lcom/artemchep/keyguard/feature/home/vault/search/filter/FilterHolder$Companion; +HSPLcom/artemchep/keyguard/feature/home/vault/search/filter/FilterHolder$Companion;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/search/filter/FilterHolder$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/feature/home/vault/search/sort/AlphabeticalSort; +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/AlphabeticalSort;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/AlphabeticalSort;->()V +Lcom/artemchep/keyguard/feature/home/vault/search/sort/AlphabeticalSort$1; +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/AlphabeticalSort$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/AlphabeticalSort$1;->()V +Lcom/artemchep/keyguard/feature/home/vault/search/sort/AlphabeticalSort$Creator; +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/AlphabeticalSort$Creator;->()V +Lcom/artemchep/keyguard/feature/home/vault/search/sort/LastCreatedSort; +Lcom/artemchep/keyguard/feature/home/vault/search/sort/LastModifiedSort; +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/LastModifiedSort;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/LastModifiedSort;->()V +Lcom/artemchep/keyguard/feature/home/vault/search/sort/LastModifiedSort$1; +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/LastModifiedSort$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/LastModifiedSort$1;->()V +Lcom/artemchep/keyguard/feature/home/vault/search/sort/LastModifiedSort$Creator; +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/LastModifiedSort$Creator;->()V +Lcom/artemchep/keyguard/feature/home/vault/search/sort/LastModifiedSort$LastModifiedRawComparator; +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/LastModifiedSort$LastModifiedRawComparator;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/LastModifiedSort$LastModifiedRawComparator;->()V +Lcom/artemchep/keyguard/feature/home/vault/search/sort/LastModifiedSort$special$$inlined$thenBy$1; +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/LastModifiedSort$special$$inlined$thenBy$1;->(Ljava/util/Comparator;Ljava/util/Comparator;)V +Lcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordLastModifiedSort; +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordLastModifiedSort;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordLastModifiedSort;->()V +Lcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordLastModifiedSort$1; +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordLastModifiedSort$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordLastModifiedSort$1;->()V +Lcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordLastModifiedSort$Creator; +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordLastModifiedSort$Creator;->()V +Lcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordLastModifiedSort$PasswordLastModifiedRawComparator; +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordLastModifiedSort$PasswordLastModifiedRawComparator;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordLastModifiedSort$PasswordLastModifiedRawComparator;->()V +Lcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordLastModifiedSort$special$$inlined$thenBy$1; +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordLastModifiedSort$special$$inlined$thenBy$1;->(Ljava/util/Comparator;Ljava/util/Comparator;)V +Lcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordSort; +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordSort;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordSort;->()V +Lcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordSort$1; +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordSort$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordSort$1;->()V +Lcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordSort$Creator; +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordSort$Creator;->()V +Lcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordStrengthSort; +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordStrengthSort;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordStrengthSort;->()V +Lcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordStrengthSort$1; +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordStrengthSort$1;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordStrengthSort$1;->()V +Lcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordStrengthSort$Creator; +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordStrengthSort$Creator;->()V +Lcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordStrengthSort$PasswordStrengthRawComparator; +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordStrengthSort$PasswordStrengthRawComparator;->()V +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordStrengthSort$PasswordStrengthRawComparator;->()V +Lcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordStrengthSort$special$$inlined$thenBy$1; +HSPLcom/artemchep/keyguard/feature/home/vault/search/sort/PasswordStrengthSort$special$$inlined$thenBy$1;->(Ljava/util/Comparator;Ljava/util/Comparator;)V +Lcom/artemchep/keyguard/feature/home/vault/search/sort/PureSort; +Lcom/artemchep/keyguard/feature/home/vault/search/sort/Sort; +Lcom/artemchep/keyguard/feature/keyguard/AppRoute; +HSPLcom/artemchep/keyguard/feature/keyguard/AppRoute;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/AppRoute;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/AppRoute;->Content(Landroidx/compose/runtime/Composer;I)V +Lcom/artemchep/keyguard/feature/keyguard/AppScreenKt; +HSPLcom/artemchep/keyguard/feature/keyguard/AppScreenKt;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/AppScreenKt;->AppScreen(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/AppScreenKt;->ManualAppScreen$lambda$6$lambda$3(Landroidx/compose/runtime/MutableState;)Lcom/artemchep/keyguard/common/model/VaultState; +HSPLcom/artemchep/keyguard/feature/keyguard/AppScreenKt;->ManualAppScreen$lambda$6$lambda$4(Landroidx/compose/runtime/MutableState;Lcom/artemchep/keyguard/common/model/VaultState;)V +HSPLcom/artemchep/keyguard/feature/keyguard/AppScreenKt;->ManualAppScreen$lambda$6$lambda$5(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/UnlockUseCase; +HSPLcom/artemchep/keyguard/feature/keyguard/AppScreenKt;->ManualAppScreen(Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/AppScreenKt;->ManualAppScreenOnCreate(Lcom/artemchep/keyguard/common/model/VaultState$Create;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/AppScreenKt;->ManualAppScreenOnLoading(Lcom/artemchep/keyguard/common/model/VaultState$Loading;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/AppScreenKt;->ManualAppScreenOnMain(Lcom/artemchep/keyguard/common/model/VaultState$Main;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/AppScreenKt;->ManualAppScreenOnUnlock(Lcom/artemchep/keyguard/common/model/VaultState$Unlock;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/AppScreenKt;->access$ManualAppScreen$lambda$6$lambda$3(Landroidx/compose/runtime/MutableState;)Lcom/artemchep/keyguard/common/model/VaultState; +HSPLcom/artemchep/keyguard/feature/keyguard/AppScreenKt;->access$ManualAppScreen$lambda$6$lambda$4(Landroidx/compose/runtime/MutableState;Lcom/artemchep/keyguard/common/model/VaultState;)V +HSPLcom/artemchep/keyguard/feature/keyguard/AppScreenKt;->access$ManualAppScreen$lambda$6$lambda$5(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/UnlockUseCase; +Lcom/artemchep/keyguard/feature/keyguard/AppScreenKt$ManualAppScreen$1$1; +HSPLcom/artemchep/keyguard/feature/keyguard/AppScreenKt$ManualAppScreen$1$1;->(Lkotlinx/coroutines/flow/StateFlow;Lkotlin/Lazy;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/keyguard/AppScreenKt$ManualAppScreen$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/keyguard/AppScreenKt$ManualAppScreen$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/AppScreenKt$ManualAppScreen$1$1$1; +HSPLcom/artemchep/keyguard/feature/keyguard/AppScreenKt$ManualAppScreen$1$1$1;->(Landroidx/compose/runtime/MutableState;)V +HSPLcom/artemchep/keyguard/feature/keyguard/AppScreenKt$ManualAppScreen$1$1$1;->emit(Lcom/artemchep/keyguard/common/model/VaultState;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/keyguard/AppScreenKt$ManualAppScreen$1$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/AppScreenKt$ManualAppScreen$1$2; +HSPLcom/artemchep/keyguard/feature/keyguard/AppScreenKt$ManualAppScreen$1$2;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/AppScreenKt$ManualAppScreen$1$2;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/AppScreenKt$ManualAppScreen$1$2;->invoke(Lcom/artemchep/keyguard/common/model/VaultState;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/keyguard/AppScreenKt$ManualAppScreen$1$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/AppScreenKt$ManualAppScreen$1$3; +HSPLcom/artemchep/keyguard/feature/keyguard/AppScreenKt$ManualAppScreen$1$3;->(Lkotlin/jvm/functions/Function3;)V +HSPLcom/artemchep/keyguard/feature/keyguard/AppScreenKt$ManualAppScreen$1$3;->invoke(Lcom/artemchep/keyguard/common/model/VaultState;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/AppScreenKt$ManualAppScreen$1$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/AppScreenKt$ManualAppScreen$2; +HSPLcom/artemchep/keyguard/feature/keyguard/AppScreenKt$ManualAppScreen$2;->(Lkotlin/jvm/functions/Function3;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/AppScreenKt$ManualAppScreen$2;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/AppScreenKt$ManualAppScreen$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/AppScreenKt$ManualAppScreen$lambda$6$$inlined$rememberInstance$1; +HSPLcom/artemchep/keyguard/feature/keyguard/AppScreenKt$ManualAppScreen$lambda$6$$inlined$rememberInstance$1;->()V +Lcom/artemchep/keyguard/feature/keyguard/ComposableSingletons$AppScreenKt; +HSPLcom/artemchep/keyguard/feature/keyguard/ComposableSingletons$AppScreenKt;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/ComposableSingletons$AppScreenKt;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/ComposableSingletons$AppScreenKt;->getLambda-1$common_playStoreRelease()Lkotlin/jvm/functions/Function3; +HSPLcom/artemchep/keyguard/feature/keyguard/ComposableSingletons$AppScreenKt;->getLambda-2$common_playStoreRelease()Lkotlin/jvm/functions/Function2; +Lcom/artemchep/keyguard/feature/keyguard/ComposableSingletons$AppScreenKt$lambda-1$1; +HSPLcom/artemchep/keyguard/feature/keyguard/ComposableSingletons$AppScreenKt$lambda-1$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/ComposableSingletons$AppScreenKt$lambda-1$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/ComposableSingletons$AppScreenKt$lambda-1$1;->invoke(Lcom/artemchep/keyguard/common/model/VaultState;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/ComposableSingletons$AppScreenKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/ComposableSingletons$AppScreenKt$lambda-2$1; +HSPLcom/artemchep/keyguard/feature/keyguard/ComposableSingletons$AppScreenKt$lambda-2$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/ComposableSingletons$AppScreenKt$lambda-2$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/ComposableSingletons$AppScreenKt$lambda-2$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/ComposableSingletons$AppScreenKt$lambda-2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/main/MainRoute; +HSPLcom/artemchep/keyguard/feature/keyguard/main/MainRoute;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/main/MainRoute;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/main/MainRoute;->Content(Landroidx/compose/runtime/Composer;I)V +Lcom/artemchep/keyguard/feature/keyguard/main/MainScreenKt; +HSPLcom/artemchep/keyguard/feature/keyguard/main/MainScreenKt;->MainScreen(Landroidx/compose/runtime/Composer;I)V +Lcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt;->getLambda-1$common_playStoreRelease()Lkotlin/jvm/functions/Function3; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt;->getLambda-2$common_playStoreRelease()Lkotlin/jvm/functions/Function3; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt;->getLambda-3$common_playStoreRelease()Lkotlin/jvm/functions/Function3; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt;->getLambda-4$common_playStoreRelease()Lkotlin/jvm/functions/Function3; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt;->getLambda-5$common_playStoreRelease()Lkotlin/jvm/functions/Function3; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt;->getLambda-7$common_playStoreRelease()Lkotlin/jvm/functions/Function3; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt;->getLambda-8$common_playStoreRelease()Lkotlin/jvm/functions/Function3; +Lcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-1$1; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-1$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-1$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-1$1;->invoke(Landroidx/compose/foundation/layout/ColumnScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-2$1; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-2$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-2$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-2$1;->invoke(Landroidx/compose/foundation/layout/RowScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-3$1; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-3$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-3$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-3$1;->invoke(Landroidx/compose/foundation/layout/ColumnScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-3$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-4$1; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-4$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-4$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-4$1;->invoke(Landroidx/compose/foundation/layout/RowScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-4$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-5$1; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-5$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-5$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-5$1;->invoke(Landroidx/compose/foundation/layout/ColumnScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-5$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-6$1; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-6$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-6$1;->()V +Lcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-7$1; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-7$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-7$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-7$1;->invoke(Landroidx/compose/foundation/layout/ColumnScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-7$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-8$1; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-8$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-8$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-8$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/ComposableSingletons$SetupScreenKt$lambda-8$1;->invoke(ZLandroidx/compose/runtime/Composer;I)V +Lcom/artemchep/keyguard/feature/keyguard/setup/CreateVaultWithBiometric; +Lcom/artemchep/keyguard/feature/keyguard/setup/CreateVaultWithPassword; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/CreateVaultWithPassword;->(Lcom/artemchep/keyguard/feature/loading/LoadingTask;Lcom/artemchep/keyguard/common/model/VaultState$Create$WithPassword;)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/CreateVaultWithPassword;->(Lcom/artemchep/keyguard/feature/loading/LoadingTask;Lkotlin/jvm/functions/Function1;)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/CreateVaultWithPassword;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/CreateVaultWithPassword;->invoke(Ljava/lang/String;)V +Lcom/artemchep/keyguard/feature/keyguard/setup/SetupRoute; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupRoute;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupRoute;->(Lcom/artemchep/keyguard/common/model/VaultState$Create$WithPassword;Lcom/artemchep/keyguard/common/model/VaultState$Create$WithBiometric;)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupRoute;->Content(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupRoute;->hashCode()I +Lcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt;->SetupContent$lambda$7(Landroidx/compose/runtime/State;)Lcom/artemchep/keyguard/feature/auth/common/SwitchFieldModel; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt;->SetupContent$lambda$9(Landroidx/compose/runtime/State;)Lkotlin/jvm/functions/Function0; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt;->SetupContent(Landroidx/compose/foundation/layout/ColumnScope;Lcom/artemchep/keyguard/feature/keyguard/setup/SetupState;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt;->SetupScreen(Lcom/artemchep/keyguard/common/model/VaultState$Create$WithPassword;Lcom/artemchep/keyguard/common/model/VaultState$Create$WithBiometric;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt;->SetupScreen(Lcom/artemchep/keyguard/feature/keyguard/setup/SetupState;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt;->SetupScreenCreateVaultTitle(Landroidx/compose/foundation/layout/ColumnScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt;->SetupScreenSkeleton(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt;->access$SetupContent$lambda$9(Landroidx/compose/runtime/State;)Lkotlin/jvm/functions/Function0; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt;->access$SetupScreenCreateVaultTitle(Landroidx/compose/foundation/layout/ColumnScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt;->keyguardSpan()Landroidx/compose/ui/text/AnnotatedString; +Lcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupContent$1$1; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupContent$1$1;->(Landroidx/compose/ui/focus/FocusRequester;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupContent$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupContent$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupContent$2; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupContent$2;->(Lcom/artemchep/keyguard/feature/keyguard/setup/SetupState;)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupContent$2;->invoke(Landroidx/compose/foundation/layout/RowScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupContent$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupContent$5; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupContent$5;->(Lcom/artemchep/keyguard/feature/keyguard/setup/SetupState;)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupContent$5;->invoke(Landroidx/compose/foundation/layout/RowScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupContent$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupContent$6$1; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupContent$6$1;->(Landroidx/compose/runtime/State;)V +Lcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupContent$7$1; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupContent$7$1;->(Landroidx/compose/runtime/State;)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupContent$7$1;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupContent$7$1;->invoke()V +Lcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupContent$8; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupContent$8;->(Lcom/artemchep/keyguard/feature/keyguard/setup/SetupState;)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupContent$8;->invoke(Landroidx/compose/foundation/layout/RowScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupContent$8;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupContent$9; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupContent$9;->(Landroidx/compose/foundation/layout/ColumnScope;Lcom/artemchep/keyguard/feature/keyguard/setup/SetupState;I)V +Lcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupContent$keyboardOnGo$1$1; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupContent$keyboardOnGo$1$1;->(Lcom/artemchep/keyguard/feature/keyguard/setup/SetupState;)V +Lcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupScreen$3; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupScreen$3;->(Lcom/artemchep/keyguard/common/model/VaultState$Create$WithPassword;Lcom/artemchep/keyguard/common/model/VaultState$Create$WithBiometric;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupScreen$3;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupScreen$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupScreen$4; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupScreen$4;->(Lcom/artemchep/keyguard/feature/keyguard/setup/SetupState;)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupScreen$4;->invoke(Landroidx/compose/foundation/layout/ColumnScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupScreenKt$SetupScreen$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/setup/SetupState; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupState;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupState;->(Lcom/artemchep/keyguard/feature/keyguard/setup/SetupState$SideEffects;Lcom/artemchep/keyguard/feature/auth/common/TextFieldModel2;Lcom/artemchep/keyguard/feature/auth/common/SwitchFieldModel;Lcom/artemchep/keyguard/feature/keyguard/setup/SetupState$Biometric;ZLkotlin/jvm/functions/Function0;)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupState;->equals(Ljava/lang/Object;)Z +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupState;->getBiometric()Lcom/artemchep/keyguard/feature/keyguard/setup/SetupState$Biometric; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupState;->getCrashlytics()Lcom/artemchep/keyguard/feature/auth/common/SwitchFieldModel; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupState;->getOnCreateVault()Lkotlin/jvm/functions/Function0; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupState;->getPassword()Lcom/artemchep/keyguard/feature/auth/common/TextFieldModel2; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupState;->getSideEffects()Lcom/artemchep/keyguard/feature/keyguard/setup/SetupState$SideEffects; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupState;->isLoading()Z +Lcom/artemchep/keyguard/feature/keyguard/setup/SetupState$Biometric; +Lcom/artemchep/keyguard/feature/keyguard/setup/SetupState$Companion; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupState$Companion;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupState$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/feature/keyguard/setup/SetupState$SideEffects; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupState$SideEffects;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupState$SideEffects;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupState$SideEffects;->equals(Ljava/lang/Object;)Z +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupState$SideEffects;->getShowBiometricPromptFlow()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/feature/keyguard/setup/SetupState$SideEffects$Companion; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupState$SideEffects$Companion;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupState$SideEffects$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt;->access$biometricStateFlow(Lkotlinx/coroutines/flow/MutableStateFlow;Z)Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt;->biometricStateFlow(Lkotlinx/coroutines/flow/MutableStateFlow;Z)Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt;->setupScreenState(Lcom/artemchep/keyguard/common/model/VaultState$Create$WithPassword;Lcom/artemchep/keyguard/common/model/VaultState$Create$WithBiometric;Landroidx/compose/runtime/Composer;I)Lcom/artemchep/keyguard/common/model/Loadable; +Lcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt$setupScreenState$1$1; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt$setupScreenState$1$1;->(Lcom/artemchep/keyguard/common/model/VaultState$Create$WithPassword;Lcom/artemchep/keyguard/common/model/VaultState$Create$WithBiometric;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt$setupScreenState$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt$setupScreenState$1$1;->invoke(Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt$setupScreenState$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt$setupScreenState$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt$setupScreenState$1$1$1; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt$setupScreenState$1$1$1;->(Landroidx/compose/runtime/MutableState;Lkotlinx/coroutines/flow/MutableStateFlow;Lcom/artemchep/keyguard/common/util/flow/EventFlow;Lcom/artemchep/keyguard/feature/keyguard/setup/CreateVaultWithBiometric;Lcom/artemchep/keyguard/feature/keyguard/setup/CreateVaultWithPassword;Lcom/artemchep/keyguard/feature/loading/LoadingTask;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt$setupScreenState$1$1$1;->invoke(Lcom/artemchep/keyguard/feature/auth/common/Validated;ZLcom/artemchep/keyguard/feature/keyguard/setup/SetupState$Biometric;ZLkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt$setupScreenState$1$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt$setupScreenState$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt$setupScreenState$1$1$1$state$1; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt$setupScreenState$1$1$1$state$1;->(Ljava/lang/Object;)V +Lcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt$setupScreenState$1$1$1$state$2; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt$setupScreenState$1$1$1$state$2;->(Ljava/lang/Object;)V +Lcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt$setupScreenState$1$1$biometricSink$1; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt$setupScreenState$1$1$biometricSink$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt$setupScreenState$1$1$biometricSink$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt$setupScreenState$1$1$biometricSink$1;->invoke()Ljava/lang/Boolean; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt$setupScreenState$1$1$biometricSink$1;->invoke()Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt$setupScreenState$1$1$crashlyticsSink$1; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt$setupScreenState$1$1$crashlyticsSink$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt$setupScreenState$1$1$crashlyticsSink$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt$setupScreenState$1$1$crashlyticsSink$1;->invoke()Ljava/lang/Boolean; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt$setupScreenState$1$1$crashlyticsSink$1;->invoke()Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt$setupScreenState$1$1$passwordSink$1; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt$setupScreenState$1$1$passwordSink$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt$setupScreenState$1$1$passwordSink$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt$setupScreenState$1$1$passwordSink$1;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/keyguard/setup/SetupStateProducerKt$setupScreenState$1$1$passwordSink$1;->invoke()Ljava/lang/String; +Lcom/artemchep/keyguard/feature/keyguard/unlock/BiometricStatePrecomputed; +Lcom/artemchep/keyguard/feature/keyguard/unlock/ComposableSingletons$UnlockScreenKt; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/ComposableSingletons$UnlockScreenKt;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/ComposableSingletons$UnlockScreenKt;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/ComposableSingletons$UnlockScreenKt;->getLambda-1$common_playStoreRelease()Lkotlin/jvm/functions/Function3; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/ComposableSingletons$UnlockScreenKt;->getLambda-2$common_playStoreRelease()Lkotlin/jvm/functions/Function3; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/ComposableSingletons$UnlockScreenKt;->getLambda-3$common_playStoreRelease()Lkotlin/jvm/functions/Function3; +Lcom/artemchep/keyguard/feature/keyguard/unlock/ComposableSingletons$UnlockScreenKt$lambda-1$1; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/ComposableSingletons$UnlockScreenKt$lambda-1$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/ComposableSingletons$UnlockScreenKt$lambda-1$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/ComposableSingletons$UnlockScreenKt$lambda-1$1;->invoke(Landroidx/compose/foundation/layout/ColumnScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/ComposableSingletons$UnlockScreenKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/unlock/ComposableSingletons$UnlockScreenKt$lambda-2$1; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/ComposableSingletons$UnlockScreenKt$lambda-2$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/ComposableSingletons$UnlockScreenKt$lambda-2$1;->()V +Lcom/artemchep/keyguard/feature/keyguard/unlock/ComposableSingletons$UnlockScreenKt$lambda-3$1; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/ComposableSingletons$UnlockScreenKt$lambda-3$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/ComposableSingletons$UnlockScreenKt$lambda-3$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/ComposableSingletons$UnlockScreenKt$lambda-3$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/ComposableSingletons$UnlockScreenKt$lambda-3$1;->invoke(ZLandroidx/compose/runtime/Composer;I)V +Lcom/artemchep/keyguard/feature/keyguard/unlock/ComposableSingletons$UnlockScreenKt$lambda-4$1; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/ComposableSingletons$UnlockScreenKt$lambda-4$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/ComposableSingletons$UnlockScreenKt$lambda-4$1;->()V +Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockRoute; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockRoute;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockRoute;->(Lcom/artemchep/keyguard/common/model/VaultState$Unlock$WithPassword;Lcom/artemchep/keyguard/common/model/VaultState$Unlock$WithBiometric;Ljava/lang/String;)V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockRoute;->Content(Landroidx/compose/runtime/Composer;I)V +Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt;->UnlockScreen$lambda$3(Landroidx/compose/runtime/State;)Z +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt;->UnlockScreen(Lcom/artemchep/keyguard/common/model/VaultState$Unlock$WithPassword;Lcom/artemchep/keyguard/common/model/VaultState$Unlock$WithBiometric;Ljava/lang/String;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt;->UnlockScreen(Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt;->UnlockScreenSkeleton(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt;->UnlockScreenTheVaultIsLockedTitle(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt;->access$UnlockScreen$lambda$3(Landroidx/compose/runtime/State;)Z +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt;->access$UnlockScreenTheVaultIsLockedTitle(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt;->getUnlockScreenActionPadding()F +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt;->getUnlockScreenTitlePadding()F +Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$3; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$3;->(Lcom/artemchep/keyguard/common/model/VaultState$Unlock$WithPassword;Lcom/artemchep/keyguard/common/model/VaultState$Unlock$WithBiometric;Ljava/lang/String;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$3;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$4; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$4;->(Lcom/artemchep/keyguard/ui/focus/FocusRequester2;Landroidx/compose/runtime/State;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$4;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$4;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$5; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$5;->(Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState;)V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$5;->invoke(Landroidx/compose/foundation/layout/RowScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$5;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$6; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$6;->(Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState;Lcom/artemchep/keyguard/ui/focus/FocusRequester2;)V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$6;->access$invoke$lambda$6$lambda$3(Landroidx/compose/runtime/State;)Lkotlin/jvm/functions/Function0; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$6;->invoke$lambda$6$lambda$3(Landroidx/compose/runtime/State;)Lkotlin/jvm/functions/Function0; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$6;->invoke(Landroidx/compose/foundation/layout/ColumnScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$6;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$6$2$keyboardOnGo$1$1; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$6$2$keyboardOnGo$1$1;->(Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState;)V +Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$6$3$1$1; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$6$3$1$1;->(Landroidx/compose/runtime/State;)V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$6$3$1$1;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$6$3$1$1;->invoke()V +Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$6$3$2; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$6$3$2;->(Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState;)V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$6$3$2;->invoke(Landroidx/compose/foundation/layout/RowScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$6$3$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$6$3$3; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockScreenKt$UnlockScreen$6$3$3;->(Landroidx/compose/runtime/State;)V +Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState;->(Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState$SideEffects;Lcom/artemchep/keyguard/feature/auth/common/TextFieldModel2;Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState$Biometric;Ljava/lang/String;ZLkotlinx/collections/immutable/ImmutableList;Lkotlin/jvm/functions/Function0;)V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState;->equals(Ljava/lang/Object;)Z +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState;->getActions()Lkotlinx/collections/immutable/ImmutableList; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState;->getBiometric()Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState$Biometric; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState;->getLockReason()Ljava/lang/String; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState;->getPassword()Lcom/artemchep/keyguard/feature/auth/common/TextFieldModel2; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState;->getSideEffects()Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState$SideEffects; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState;->getUnlockVaultByMasterPassword()Lkotlin/jvm/functions/Function0; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState;->isLoading()Z +Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState$Biometric; +Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState$Companion; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState$Companion;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState$SideEffects; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState$SideEffects;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState$SideEffects;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState$SideEffects;->equals(Ljava/lang/Object;)Z +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState$SideEffects;->getShowBiometricPromptFlow()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState$SideEffects$Companion; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState$SideEffects$Companion;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockState$SideEffects$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockStateProducerKt; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockStateProducerKt;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockStateProducerKt;->access$getDEFAULT_PASSWORD$p()Ljava/lang/String; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockStateProducerKt;->unlockScreenState(Lcom/artemchep/keyguard/common/usecase/ClearData;Lcom/artemchep/keyguard/common/model/VaultState$Unlock$WithPassword;Lcom/artemchep/keyguard/common/model/VaultState$Unlock$WithBiometric;Ljava/lang/String;Landroidx/compose/runtime/Composer;II)Lcom/artemchep/keyguard/common/model/Loadable; +Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockStateProducerKt$unlockScreenState$1; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockStateProducerKt$unlockScreenState$1;->(Lcom/artemchep/keyguard/common/model/VaultState$Unlock$WithPassword;Lcom/artemchep/keyguard/common/model/VaultState$Unlock$WithBiometric;Lcom/artemchep/keyguard/common/usecase/ClearData;Ljava/lang/String;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockStateProducerKt$unlockScreenState$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockStateProducerKt$unlockScreenState$1;->invoke(Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockStateProducerKt$unlockScreenState$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockStateProducerKt$unlockScreenState$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockStateProducerKt$unlockScreenState$1$1; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockStateProducerKt$unlockScreenState$1$1;->(Landroidx/compose/runtime/MutableState;Lcom/artemchep/keyguard/feature/keyguard/unlock/BiometricStatePrecomputed;Lkotlinx/coroutines/flow/SharedFlow;Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockVaultWithPassword;Ljava/lang/String;Lkotlinx/collections/immutable/PersistentList;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockStateProducerKt$unlockScreenState$1$1;->invoke(Lcom/artemchep/keyguard/feature/auth/common/Validated;ZLkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockStateProducerKt$unlockScreenState$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockStateProducerKt$unlockScreenState$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockStateProducerKt$unlockScreenState$1$actions$1; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockStateProducerKt$unlockScreenState$1$actions$1;->(Lcom/artemchep/keyguard/common/usecase/ClearData;Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;)V +Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockStateProducerKt$unlockScreenState$1$biometricPromptFlow$1; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockStateProducerKt$unlockScreenState$1$biometricPromptFlow$1;->(Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockVaultWithBiometric;Lcom/artemchep/keyguard/feature/loading/LoadingTask;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockStateProducerKt$unlockScreenState$1$biometricPromptFlow$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockStateProducerKt$unlockScreenState$1$biometricPromptFlow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockStateProducerKt$unlockScreenState$1$biometricPromptFlow$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockStateProducerKt$unlockScreenState$1$biometricPromptFlow$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockStateProducerKt$unlockScreenState$1$passwordSink$1; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockStateProducerKt$unlockScreenState$1$passwordSink$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockStateProducerKt$unlockScreenState$1$passwordSink$1;->()V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockStateProducerKt$unlockScreenState$1$passwordSink$1;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockStateProducerKt$unlockScreenState$1$passwordSink$1;->invoke()Ljava/lang/String; +Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockVaultWithBiometric; +Lcom/artemchep/keyguard/feature/keyguard/unlock/UnlockVaultWithPassword; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockVaultWithPassword;->(Lcom/artemchep/keyguard/feature/loading/LoadingTask;Lcom/artemchep/keyguard/common/model/VaultState$Unlock$WithPassword;)V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockVaultWithPassword;->(Lcom/artemchep/keyguard/feature/loading/LoadingTask;Lkotlin/jvm/functions/Function1;)V +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockVaultWithPassword;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/keyguard/unlock/UnlockVaultWithPassword;->invoke(Ljava/lang/String;)V +Lcom/artemchep/keyguard/feature/loading/LoadingScreenKt; +HSPLcom/artemchep/keyguard/feature/loading/LoadingScreenKt;->LoadingScreen(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/loading/LoadingScreenKt;->LoadingScreenContent(Landroidx/compose/runtime/Composer;I)V +Lcom/artemchep/keyguard/feature/loading/LoadingTask; +HSPLcom/artemchep/keyguard/feature/loading/LoadingTask;->()V +HSPLcom/artemchep/keyguard/feature/loading/LoadingTask;->(Lcom/artemchep/keyguard/feature/navigation/state/TranslatorScope;Lkotlinx/coroutines/CoroutineScope;Lkotlin/jvm/functions/Function1;)V +HSPLcom/artemchep/keyguard/feature/loading/LoadingTask;->(Lcom/artemchep/keyguard/feature/navigation/state/TranslatorScope;Lkotlinx/coroutines/CoroutineScope;Lkotlin/jvm/functions/Function1;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/feature/loading/LoadingTask;->access$isWorkingSink$p(Lcom/artemchep/keyguard/feature/loading/LoadingTask;)Lkotlinx/coroutines/flow/MutableStateFlow; +HSPLcom/artemchep/keyguard/feature/loading/LoadingTask;->execute(Lkotlin/jvm/functions/Function1;Ljava/lang/String;)V +HSPLcom/artemchep/keyguard/feature/loading/LoadingTask;->getErrorFlow()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/feature/loading/LoadingTask;->isExecutingFlow()Lkotlinx/coroutines/flow/MutableStateFlow; +Lcom/artemchep/keyguard/feature/loading/LoadingTask$1; +HSPLcom/artemchep/keyguard/feature/loading/LoadingTask$1;->(Lcom/artemchep/keyguard/feature/navigation/state/TranslatorScope;)V +Lcom/artemchep/keyguard/feature/loading/LoadingTask$execute$1; +HSPLcom/artemchep/keyguard/feature/loading/LoadingTask$execute$1;->(Lcom/artemchep/keyguard/feature/loading/LoadingTask;Lkotlin/jvm/functions/Function1;Ljava/lang/String;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/loading/LoadingTask$execute$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/loading/LoadingTask$execute$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/loading/LoadingTask$special$$inlined$map$1; +HSPLcom/artemchep/keyguard/feature/loading/LoadingTask$special$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/feature/loading/LoadingTask$special$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/loading/LoadingTask$special$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/feature/loading/LoadingTask$special$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +Lcom/artemchep/keyguard/feature/localization/TextHolder; +Lcom/artemchep/keyguard/feature/localization/TextHolder$Res; +HSPLcom/artemchep/keyguard/feature/localization/TextHolder$Res;->()V +HSPLcom/artemchep/keyguard/feature/localization/TextHolder$Res;->(Ldev/icerock/moko/resources/StringResource;)V +HSPLcom/artemchep/keyguard/feature/localization/TextHolder$Res;->getData()Ldev/icerock/moko/resources/StringResource; +Lcom/artemchep/keyguard/feature/localization/TextHolder$Value; +HSPLcom/artemchep/keyguard/feature/localization/TextHolder$Value;->()V +PLcom/artemchep/keyguard/feature/localization/TextHolder$Value;->(Ljava/lang/String;)V +PLcom/artemchep/keyguard/feature/localization/TextHolder$Value;->getData()Ljava/lang/String; +Lcom/artemchep/keyguard/feature/localization/TextHolderKt; +HSPLcom/artemchep/keyguard/feature/localization/TextHolderKt;->textResource(Lcom/artemchep/keyguard/feature/localization/TextHolder;Landroidx/compose/runtime/Composer;I)Ljava/lang/String; +Lcom/artemchep/keyguard/feature/localization/TextResourceKt; +HSPLcom/artemchep/keyguard/feature/localization/TextResourceKt;->textResource(Ldev/icerock/moko/resources/StringResource;Lcom/artemchep/keyguard/platform/LeContext;)Ljava/lang/String; +HSPLcom/artemchep/keyguard/feature/localization/TextResourceKt;->textResource(Ldev/icerock/moko/resources/StringResource;Lcom/artemchep/keyguard/platform/LeContext;[Ljava/lang/Object;)Ljava/lang/String; +Lcom/artemchep/keyguard/feature/navigation/BackHandler; +HSPLcom/artemchep/keyguard/feature/navigation/BackHandler;->()V +HSPLcom/artemchep/keyguard/feature/navigation/BackHandler;->(Lkotlinx/coroutines/flow/MutableStateFlow;Lkotlinx/coroutines/flow/MutableStateFlow;)V +HSPLcom/artemchep/keyguard/feature/navigation/BackHandler;->(Lkotlinx/coroutines/flow/MutableStateFlow;Lkotlinx/coroutines/flow/MutableStateFlow;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/feature/navigation/BackHandler;->getEek()Lkotlinx/coroutines/flow/MutableStateFlow; +HSPLcom/artemchep/keyguard/feature/navigation/BackHandler;->register(Lcom/artemchep/keyguard/feature/navigation/NavigationController;Ljava/util/List;)Lkotlin/jvm/functions/Function0; +Lcom/artemchep/keyguard/feature/navigation/BackHandler$Entry; +HSPLcom/artemchep/keyguard/feature/navigation/BackHandler$Entry;->()V +HSPLcom/artemchep/keyguard/feature/navigation/BackHandler$Entry;->(Lcom/artemchep/keyguard/feature/navigation/NavigationController;Ljava/util/List;)V +HSPLcom/artemchep/keyguard/feature/navigation/BackHandler$Entry;->getBackStack()Ljava/util/List; +HSPLcom/artemchep/keyguard/feature/navigation/BackHandler$Entry;->getController()Lcom/artemchep/keyguard/feature/navigation/NavigationController; +Lcom/artemchep/keyguard/feature/navigation/BackHandler$register$1; +HSPLcom/artemchep/keyguard/feature/navigation/BackHandler$register$1;->(Lcom/artemchep/keyguard/feature/navigation/BackHandler;Ljava/lang/String;)V +Lcom/artemchep/keyguard/feature/navigation/ComposableSingletons$NavigationNodeKt; +HSPLcom/artemchep/keyguard/feature/navigation/ComposableSingletons$NavigationNodeKt;->()V +HSPLcom/artemchep/keyguard/feature/navigation/ComposableSingletons$NavigationNodeKt;->()V +HSPLcom/artemchep/keyguard/feature/navigation/ComposableSingletons$NavigationNodeKt;->getLambda-1$common_playStoreRelease()Lkotlin/jvm/functions/Function4; +HSPLcom/artemchep/keyguard/feature/navigation/ComposableSingletons$NavigationNodeKt;->getLambda-2$common_playStoreRelease()Lkotlin/jvm/functions/Function3; +Lcom/artemchep/keyguard/feature/navigation/ComposableSingletons$NavigationNodeKt$lambda-1$1; +HSPLcom/artemchep/keyguard/feature/navigation/ComposableSingletons$NavigationNodeKt$lambda-1$1;->()V +HSPLcom/artemchep/keyguard/feature/navigation/ComposableSingletons$NavigationNodeKt$lambda-1$1;->()V +HSPLcom/artemchep/keyguard/feature/navigation/ComposableSingletons$NavigationNodeKt$lambda-1$1;->invoke(Landroidx/compose/animation/AnimatedContentScope;Lcom/artemchep/keyguard/feature/navigation/Foo;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/navigation/ComposableSingletons$NavigationNodeKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/ComposableSingletons$NavigationNodeKt$lambda-1$1$1; +HSPLcom/artemchep/keyguard/feature/navigation/ComposableSingletons$NavigationNodeKt$lambda-1$1$1;->(Lcom/artemchep/keyguard/feature/navigation/NavigationEntry;)V +HSPLcom/artemchep/keyguard/feature/navigation/ComposableSingletons$NavigationNodeKt$lambda-1$1$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/navigation/ComposableSingletons$NavigationNodeKt$lambda-1$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/ComposableSingletons$NavigationNodeKt$lambda-2$1; +HSPLcom/artemchep/keyguard/feature/navigation/ComposableSingletons$NavigationNodeKt$lambda-2$1;->()V +HSPLcom/artemchep/keyguard/feature/navigation/ComposableSingletons$NavigationNodeKt$lambda-2$1;->()V +HSPLcom/artemchep/keyguard/feature/navigation/ComposableSingletons$NavigationNodeKt$lambda-2$1;->invoke(Lcom/artemchep/keyguard/feature/navigation/Foo;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/navigation/ComposableSingletons$NavigationNodeKt$lambda-2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/DialogRoute; +Lcom/artemchep/keyguard/feature/navigation/Foo; +HSPLcom/artemchep/keyguard/feature/navigation/Foo;->()V +HSPLcom/artemchep/keyguard/feature/navigation/Foo;->(Lkotlinx/collections/immutable/PersistentList;Lkotlinx/collections/immutable/PersistentList;Lcom/artemchep/keyguard/feature/navigation/NavigationEntry;)V +HSPLcom/artemchep/keyguard/feature/navigation/Foo;->access$getEmpty$cp()Lcom/artemchep/keyguard/feature/navigation/Foo; +HSPLcom/artemchep/keyguard/feature/navigation/Foo;->equals(Ljava/lang/Object;)Z +HSPLcom/artemchep/keyguard/feature/navigation/Foo;->getEntry()Lcom/artemchep/keyguard/feature/navigation/NavigationEntry; +HSPLcom/artemchep/keyguard/feature/navigation/Foo;->getLogicalStack()Lkotlinx/collections/immutable/PersistentList; +HSPLcom/artemchep/keyguard/feature/navigation/Foo;->getVisualStack()Lkotlinx/collections/immutable/PersistentList; +HSPLcom/artemchep/keyguard/feature/navigation/Foo;->hashCode()I +Lcom/artemchep/keyguard/feature/navigation/Foo$Companion; +HSPLcom/artemchep/keyguard/feature/navigation/Foo$Companion;->()V +HSPLcom/artemchep/keyguard/feature/navigation/Foo$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/feature/navigation/Foo$Companion;->getEmpty()Lcom/artemchep/keyguard/feature/navigation/Foo; +Lcom/artemchep/keyguard/feature/navigation/N; +HSPLcom/artemchep/keyguard/feature/navigation/N;->()V +HSPLcom/artemchep/keyguard/feature/navigation/N;->()V +HSPLcom/artemchep/keyguard/feature/navigation/N;->tag(Ljava/lang/String;)Ljava/lang/String; +Lcom/artemchep/keyguard/feature/navigation/NavigationAnimation; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationAnimation;->()V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationAnimation;->()V +Lcom/artemchep/keyguard/feature/navigation/NavigationAnimationKt; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationAnimationKt;->()V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationAnimationKt;->transform(Lcom/artemchep/keyguard/feature/navigation/NavigationAnimation;FLcom/artemchep/keyguard/common/model/NavAnimation;Lcom/artemchep/keyguard/feature/navigation/NavigationAnimationType;)Landroidx/compose/animation/ContentTransform; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationAnimationKt;->transformGoBack(Lcom/artemchep/keyguard/feature/navigation/NavigationAnimation;F)Landroidx/compose/animation/ContentTransform; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationAnimationKt;->transformSwitchContext(Lcom/artemchep/keyguard/feature/navigation/NavigationAnimation;F)Landroidx/compose/animation/ContentTransform; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationAnimationKt;->twaat(I)Landroidx/compose/animation/core/TweenSpec; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationAnimationKt;->twuut(I)Landroidx/compose/animation/core/TweenSpec; +Lcom/artemchep/keyguard/feature/navigation/NavigationAnimationKt$WhenMappings; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationAnimationKt$WhenMappings;->()V +Lcom/artemchep/keyguard/feature/navigation/NavigationAnimationKt$transformGoBack$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationAnimationKt$transformGoBack$1;->()V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationAnimationKt$transformGoBack$1;->()V +Lcom/artemchep/keyguard/feature/navigation/NavigationAnimationKt$transformGoBack$2; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationAnimationKt$transformGoBack$2;->()V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationAnimationKt$transformGoBack$2;->()V +Lcom/artemchep/keyguard/feature/navigation/NavigationAnimationType; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationAnimationType;->$values()[Lcom/artemchep/keyguard/feature/navigation/NavigationAnimationType; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationAnimationType;->()V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationAnimationType;->(Ljava/lang/String;I)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationAnimationType;->values()[Lcom/artemchep/keyguard/feature/navigation/NavigationAnimationType; +Lcom/artemchep/keyguard/feature/navigation/NavigationController; +Lcom/artemchep/keyguard/feature/navigation/NavigationControllerKt; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationControllerKt;->()V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationControllerKt;->NavigationController(Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationControllerKt;->getLocalNavigationController()Landroidx/compose/runtime/ProvidableCompositionLocal; +Lcom/artemchep/keyguard/feature/navigation/NavigationControllerKt$LocalNavigationController$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationControllerKt$LocalNavigationController$1;->()V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationControllerKt$LocalNavigationController$1;->()V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationControllerKt$LocalNavigationController$1;->invoke()Lcom/artemchep/keyguard/feature/navigation/NavigationController; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationControllerKt$LocalNavigationController$1;->invoke()Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/NavigationControllerKt$LocalNavigationController$1$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationControllerKt$LocalNavigationController$1$1;->()V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationControllerKt$LocalNavigationController$1$1;->canPop()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/feature/navigation/NavigationControllerKt$NavigationController$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationControllerKt$NavigationController$1;->(Lkotlin/jvm/functions/Function3;Lcom/artemchep/keyguard/feature/navigation/NavigationControllerKt$NavigationController$controller$1$handler$1;)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationControllerKt$NavigationController$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationControllerKt$NavigationController$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/NavigationControllerKt$NavigationController$controller$1$combinedCanPop$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationControllerKt$NavigationController$controller$1$combinedCanPop$1;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationControllerKt$NavigationController$controller$1$combinedCanPop$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationControllerKt$NavigationController$controller$1$combinedCanPop$1;->invoke(ZZLkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationControllerKt$NavigationController$controller$1$combinedCanPop$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/NavigationControllerKt$NavigationController$controller$1$handler$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationControllerKt$NavigationController$controller$1$handler$1;->(Lkotlinx/coroutines/CoroutineScope;Lcom/artemchep/keyguard/feature/navigation/NavigationController;Lkotlin/jvm/functions/Function1;Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationControllerKt$NavigationController$controller$1$handler$1;->canPop()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationControllerKt$NavigationController$controller$1$handler$1;->getScope()Lkotlinx/coroutines/CoroutineScope; +Lcom/artemchep/keyguard/feature/navigation/NavigationEntry; +Lcom/artemchep/keyguard/feature/navigation/NavigationEntryImpl; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationEntryImpl;->()V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationEntryImpl;->(Ljava/lang/String;Lkotlinx/coroutines/CoroutineScope;Ljava/lang/String;Lcom/artemchep/keyguard/feature/navigation/Route;)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationEntryImpl;->destroy()V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationEntryImpl;->getId()Ljava/lang/String; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationEntryImpl;->getRoute()Lcom/artemchep/keyguard/feature/navigation/Route; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationEntryImpl;->getScope()Lkotlinx/coroutines/CoroutineScope; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationEntryImpl;->getType()Ljava/lang/String; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationEntryImpl;->getVm()Lcom/artemchep/keyguard/feature/navigation/state/FlowHolderViewModel; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationEntryImpl;->hashCode()I +Lcom/artemchep/keyguard/feature/navigation/NavigationEntryImpl$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationEntryImpl$1;->(Lcom/artemchep/keyguard/feature/navigation/NavigationEntryImpl;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationEntryImpl$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationEntryImpl$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/NavigationEntryKt; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationEntryKt;->()V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationEntryKt;->getLocalNavigationEntry()Landroidx/compose/runtime/ProvidableCompositionLocal; +Lcom/artemchep/keyguard/feature/navigation/NavigationEntryKt$LocalNavigationEntry$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationEntryKt$LocalNavigationEntry$1;->()V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationEntryKt$LocalNavigationEntry$1;->()V +Lcom/artemchep/keyguard/feature/navigation/NavigationEntryProviderKt; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationEntryProviderKt;->NavigationNode(Ljava/lang/String;Lcom/artemchep/keyguard/feature/navigation/Route;Landroidx/compose/runtime/Composer;I)V +Lcom/artemchep/keyguard/feature/navigation/NavigationEntryProviderKt$NavigationNode$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationEntryProviderKt$NavigationNode$1;->(Lcom/artemchep/keyguard/feature/navigation/NavigationEntryImpl;)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationEntryProviderKt$NavigationNode$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationEntryProviderKt$NavigationNode$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/NavigationEntryProviderKt$NavigationNode$1$invoke$$inlined$onDispose$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationEntryProviderKt$NavigationNode$1$invoke$$inlined$onDispose$1;->(Lcom/artemchep/keyguard/feature/navigation/NavigationEntryImpl;)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationEntryProviderKt$NavigationNode$1$invoke$$inlined$onDispose$1;->dispose()V +Lcom/artemchep/keyguard/feature/navigation/NavigationKt; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationKt;->()V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationKt;->getLocalRoute()Landroidx/compose/runtime/ProvidableCompositionLocal; +Lcom/artemchep/keyguard/feature/navigation/NavigationKt$LocalBackHost$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationKt$LocalBackHost$1;->()V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationKt$LocalBackHost$1;->()V +Lcom/artemchep/keyguard/feature/navigation/NavigationKt$LocalRoute$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationKt$LocalRoute$1;->()V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationKt$LocalRoute$1;->()V +Lcom/artemchep/keyguard/feature/navigation/NavigationNodeCurrentStackKt; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeCurrentStackKt;->access$navigationNodeStack$lambda$0(Landroidx/compose/runtime/State;)Lkotlinx/collections/immutable/PersistentList; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeCurrentStackKt;->navigationNodeStack$lambda$0(Landroidx/compose/runtime/State;)Lkotlinx/collections/immutable/PersistentList; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeCurrentStackKt;->navigationNodeStack$lambda$2(Landroidx/compose/runtime/State;)Ljava/lang/String; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeCurrentStackKt;->navigationNodeStack(Landroidx/compose/runtime/Composer;I)Ljava/lang/String; +Lcom/artemchep/keyguard/feature/navigation/NavigationNodeCurrentStackKt$navigationNodeStack$value$2$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeCurrentStackKt$navigationNodeStack$value$2$1;->(Landroidx/compose/runtime/State;)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeCurrentStackKt$navigationNodeStack$value$2$1;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeCurrentStackKt$navigationNodeStack$value$2$1;->invoke()Ljava/lang/String; +Lcom/artemchep/keyguard/feature/navigation/NavigationNodeCurrentStackKt$navigationNodeStack$value$2$1$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeCurrentStackKt$navigationNodeStack$value$2$1$1;->()V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeCurrentStackKt$navigationNodeStack$value$2$1$1;->()V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeCurrentStackKt$navigationNodeStack$value$2$1$1;->invoke(Lcom/artemchep/keyguard/feature/navigation/NavigationEntry;)Ljava/lang/CharSequence; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeCurrentStackKt$navigationNodeStack$value$2$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/NavigationNodeKt; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeKt;->()V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeKt;->NavigationNode$lambda$0(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetNavAnimation; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeKt;->NavigationNode$lambda$12$lambda$9(Landroidx/compose/runtime/State;)F +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeKt;->NavigationNode(Lcom/artemchep/keyguard/feature/navigation/NavigationEntry;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeKt;->NavigationNode(Lkotlinx/collections/immutable/PersistentList;ILandroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeKt;->NavigationRoute(Lcom/artemchep/keyguard/feature/navigation/NavigationEntry;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeKt;->access$NavigationNode$lambda$0(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetNavAnimation; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeKt;->access$NavigationNode$lambda$12$lambda$9(Landroidx/compose/runtime/State;)F +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeKt;->access$NavigationRoute(Lcom/artemchep/keyguard/feature/navigation/NavigationEntry;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeKt;->getLocalNavigationNodeLogicalStack()Landroidx/compose/runtime/ProvidableCompositionLocal; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeKt;->getLocalNavigationNodeVisualStack()Landroidx/compose/runtime/ProvidableCompositionLocal; +Lcom/artemchep/keyguard/feature/navigation/NavigationNodeKt$LocalNavigationNodeLogicalStack$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeKt$LocalNavigationNodeLogicalStack$1;->()V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeKt$LocalNavigationNodeLogicalStack$1;->()V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeKt$LocalNavigationNodeLogicalStack$1;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeKt$LocalNavigationNodeLogicalStack$1;->invoke()Lkotlinx/collections/immutable/PersistentList; +Lcom/artemchep/keyguard/feature/navigation/NavigationNodeKt$LocalNavigationNodeVisualStack$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeKt$LocalNavigationNodeVisualStack$1;->()V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeKt$LocalNavigationNodeVisualStack$1;->()V +Lcom/artemchep/keyguard/feature/navigation/NavigationNodeKt$NavigationNode$$inlined$rememberInstance$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeKt$NavigationNode$$inlined$rememberInstance$1;->()V +Lcom/artemchep/keyguard/feature/navigation/NavigationNodeKt$NavigationNode$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeKt$NavigationNode$1;->(Lcom/artemchep/keyguard/feature/navigation/NavigationEntry;)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeKt$NavigationNode$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeKt$NavigationNode$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/NavigationNodeKt$NavigationNode$2; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeKt$NavigationNode$2;->(Lcom/artemchep/keyguard/feature/navigation/NavigationEntry;I)V +Lcom/artemchep/keyguard/feature/navigation/NavigationNodeKt$NavigationNode$3$2; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeKt$NavigationNode$3$2;->(Lkotlin/Lazy;Landroidx/compose/runtime/State;)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeKt$NavigationNode$3$2;->invoke(Landroidx/compose/animation/AnimatedContentTransitionScope;)Landroidx/compose/animation/ContentTransform; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeKt$NavigationNode$3$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/NavigationNodeKt$NavigationNode$4; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeKt$NavigationNode$4;->(Lkotlinx/collections/immutable/PersistentList;III)V +Lcom/artemchep/keyguard/feature/navigation/NavigationNodeKt$NavigationRoute$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeKt$NavigationRoute$1;->(Lcom/artemchep/keyguard/feature/navigation/NavigationEntry;)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeKt$NavigationRoute$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationNodeKt$NavigationRoute$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2;->NavigationRouterBackHandler(Landroidx/activity/OnBackPressedDispatcher;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V +Lcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1;->(Landroidx/activity/OnBackPressedDispatcher;)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1;->invoke(Lcom/artemchep/keyguard/feature/navigation/BackHandler;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$1;->(Landroidx/activity/OnBackPressedDispatcher;Landroidx/activity/OnBackPressedCallback;)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$1$invoke$$inlined$onDispose$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$1$invoke$$inlined$onDispose$1;->(Landroidx/activity/OnBackPressedCallback;)V +Lcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$2; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$2;->(Lcom/artemchep/keyguard/feature/navigation/BackHandler;Landroidx/activity/OnBackPressedCallback;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$2$3; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$2$3;->(Landroidx/activity/OnBackPressedCallback;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$2$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$2$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$2$3;->invoke(ZLkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$2$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$2$invokeSuspend$$inlined$flatMapLatest$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$2$invokeSuspend$$inlined$flatMapLatest$1;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$2$invokeSuspend$$inlined$flatMapLatest$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$2$invokeSuspend$$inlined$flatMapLatest$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$2$invokeSuspend$$inlined$flatMapLatest$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$2$invokeSuspend$$inlined$map$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$2$invokeSuspend$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$2$invokeSuspend$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$2$invokeSuspend$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$2$invokeSuspend$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$2$invokeSuspend$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$2$invokeSuspend$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$2$invokeSuspend$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$2$invokeSuspend$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$callback$1$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler2$NavigationRouterBackHandler$1$callback$1$1;->(Lcom/artemchep/keyguard/feature/navigation/BackHandler;)V +Lcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandlerKt; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandlerKt;->()V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandlerKt;->NavigationRouterBackHandler(Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandlerKt;->getLocalNavigationBackHandler()Landroidx/compose/runtime/ProvidableCompositionLocal; +Lcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandlerKt$LocalNavigationBackHandler$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandlerKt$LocalNavigationBackHandler$1;->()V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandlerKt$LocalNavigationBackHandler$1;->()V +Lcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandlerKt$NavigationRouterBackHandler$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandlerKt$NavigationRouterBackHandler$1;->(Lkotlin/jvm/functions/Function2;)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandlerKt$NavigationRouterBackHandler$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackHandlerKt$NavigationRouterBackHandler$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/NavigationRouterBackIconKt; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackIconKt;->NavigationIcon(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V +Lcom/artemchep/keyguard/feature/navigation/NavigationRouterBackIconKt$NavigationIcon$2; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterBackIconKt$NavigationIcon$2;->(Landroidx/compose/ui/Modifier;II)V +Lcom/artemchep/keyguard/feature/navigation/NavigationRouterKt; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterKt;->()V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterKt;->NavigationRouter(Ljava/lang/String;Lcom/artemchep/keyguard/feature/navigation/Route;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterKt;->getLocalNavigationRouter()Landroidx/compose/runtime/ProvidableCompositionLocal; +Lcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$LocalNavigationRouter$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$LocalNavigationRouter$1;->()V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$LocalNavigationRouter$1;->()V +Lcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$1;->(Lcom/artemchep/keyguard/feature/navigation/NavigationStack;Lkotlinx/coroutines/CoroutineScope;)V +Lcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$2; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$2;->(Lcom/artemchep/keyguard/feature/navigation/NavigationStack;Lkotlin/jvm/functions/Function3;)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$2;->invoke(Lcom/artemchep/keyguard/feature/navigation/NavigationController;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$2$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$2$1;->(Lcom/artemchep/keyguard/feature/navigation/BackHandler;Lcom/artemchep/keyguard/feature/navigation/NavigationController;Lkotlinx/collections/immutable/PersistentList;)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$2$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$2$1$invoke$$inlined$onDispose$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$2$1$invoke$$inlined$onDispose$1;->(Lkotlin/jvm/functions/Function0;)V +Lcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$2$2; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$2$2;->(Lkotlin/jvm/functions/Function3;Lkotlinx/collections/immutable/PersistentList;)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$2$2;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$2$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$3; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$3;->(Ljava/lang/String;Lcom/artemchep/keyguard/feature/navigation/Route;Lkotlin/jvm/functions/Function3;I)V +Lcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$canPop$1$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$canPop$1$1;->(Lcom/artemchep/keyguard/feature/navigation/NavigationStack;)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$canPop$1$1;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$canPop$1$1;->invoke()Lkotlinx/collections/immutable/PersistentList; +Lcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$lambda$2$$inlined$map$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$lambda$2$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$lambda$2$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$lambda$2$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$lambda$2$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$lambda$2$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$lambda$2$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$lambda$2$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$lambda$2$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationRouterKt$NavigationRouter$lambda$2$$inlined$map$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/NavigationStack; +HSPLcom/artemchep/keyguard/feature/navigation/NavigationStack;->()V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationStack;->(Lcom/artemchep/keyguard/feature/navigation/NavigationEntry;)V +HSPLcom/artemchep/keyguard/feature/navigation/NavigationStack;->getValue()Lkotlinx/collections/immutable/PersistentList; +Lcom/artemchep/keyguard/feature/navigation/Route; +Lcom/artemchep/keyguard/feature/navigation/state/CopyKt; +HSPLcom/artemchep/keyguard/feature/navigation/state/CopyKt;->copy(Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;Lcom/artemchep/keyguard/common/service/clipboard/ClipboardService;)Lcom/artemchep/keyguard/common/usecase/CopyText; +Lcom/artemchep/keyguard/feature/navigation/state/CopyKt$copy$1; +HSPLcom/artemchep/keyguard/feature/navigation/state/CopyKt$copy$1;->(Ljava/lang/Object;)V +Lcom/artemchep/keyguard/feature/navigation/state/DiskHandle; +Lcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl; +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl;->()V +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl;->(Lkotlinx/coroutines/CoroutineScope;Lcom/artemchep/keyguard/common/usecase/PutScreenState;Ljava/lang/String;Ljava/util/Map;)V +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl;->(Lkotlinx/coroutines/CoroutineScope;Lcom/artemchep/keyguard/common/usecase/PutScreenState;Ljava/lang/String;Ljava/util/Map;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl;->access$tryWrite(Lcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl;Ljava/util/Map;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl;->getRestoredState()Ljava/util/Map; +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl;->link(Ljava/lang/String;Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl;->tryWrite(Ljava/util/Map;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$2; +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$2;->(Lcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$2;->invoke(Ljava/util/List;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$Companion; +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$Companion;->()V +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$Companion;->read(Lkotlinx/coroutines/CoroutineScope;Lcom/artemchep/keyguard/common/usecase/GetScreenState;Lcom/artemchep/keyguard/common/usecase/PutScreenState;Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$Companion$read$1; +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$Companion$read$1;->(Lcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$Companion;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$Companion$read$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$_init_$lambda$2$$inlined$combineToList$1; +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$_init_$lambda$2$$inlined$combineToList$1;->(Ljava/util/List;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$_init_$lambda$2$$inlined$combineToList$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$_init_$lambda$2$$inlined$combineToList$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$_init_$lambda$2$$inlined$combineToList$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$_init_$lambda$2$$inlined$combineToList$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$_init_$lambda$2$$inlined$combineToList$1$1; +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$_init_$lambda$2$$inlined$combineToList$1$1;->(Ljava/util/List;[Ljava/lang/Object;Ljava/util/concurrent/atomic/AtomicInteger;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$_init_$lambda$2$$inlined$combineToList$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$_init_$lambda$2$$inlined$combineToList$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$_init_$lambda$2$$inlined$combineToList$1$1;->invoke(Lkotlinx/coroutines/channels/ProducerScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$_init_$lambda$2$$inlined$combineToList$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$_init_$lambda$2$$inlined$combineToList$1$1$1; +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$_init_$lambda$2$$inlined$combineToList$1$1$1;->(Lkotlinx/coroutines/flow/Flow;[Ljava/lang/Object;ILjava/util/concurrent/atomic/AtomicInteger;Lkotlinx/coroutines/channels/ProducerScope;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$_init_$lambda$2$$inlined$combineToList$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$_init_$lambda$2$$inlined$combineToList$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$_init_$lambda$2$$inlined$combineToList$1$1$1$1; +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$_init_$lambda$2$$inlined$combineToList$1$1$1$1;->([Ljava/lang/Object;ILkotlin/jvm/internal/Ref$BooleanRef;Ljava/util/concurrent/atomic/AtomicInteger;Lkotlinx/coroutines/channels/ProducerScope;)V +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$_init_$lambda$2$$inlined$combineToList$1$1$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$_init_$lambda$2$$inlined$combineToList$1$2; +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$_init_$lambda$2$$inlined$combineToList$1$2;->(Ljava/util/concurrent/atomic/AtomicInteger;Lkotlinx/coroutines/flow/FlowCollector;[Ljava/lang/Object;)V +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$_init_$lambda$2$$inlined$combineToList$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$_init_$lambda$2$$inlined$combineToList$1$2;->emit(Lkotlin/Unit;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$lambda$2$lambda$1$$inlined$map$1; +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$lambda$2$lambda$1$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;Ljava/lang/String;)V +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$lambda$2$lambda$1$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$lambda$2$lambda$1$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$lambda$2$lambda$1$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/String;)V +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$lambda$2$lambda$1$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$lambda$2$lambda$1$$inlined$map$1$2$1; +PLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$lambda$2$lambda$1$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$lambda$2$lambda$1$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$special$$inlined$flatMapLatest$1; +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$special$$inlined$flatMapLatest$1;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$special$$inlined$flatMapLatest$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$special$$inlined$flatMapLatest$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/navigation/state/DiskHandleImpl$special$$inlined$flatMapLatest$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/state/FlowHolderViewModel; +HSPLcom/artemchep/keyguard/feature/navigation/state/FlowHolderViewModel;->()V +HSPLcom/artemchep/keyguard/feature/navigation/state/FlowHolderViewModel;->(Ljava/lang/String;Lkotlinx/coroutines/CoroutineScope;)V +HSPLcom/artemchep/keyguard/feature/navigation/state/FlowHolderViewModel;->clear(Ljava/lang/String;)V +HSPLcom/artemchep/keyguard/feature/navigation/state/FlowHolderViewModel;->destroy()V +HSPLcom/artemchep/keyguard/feature/navigation/state/FlowHolderViewModel;->getOrPut(Ljava/lang/String;Lcom/artemchep/keyguard/feature/navigation/NavigationController;Lcom/artemchep/keyguard/common/usecase/ShowMessage;Lcom/artemchep/keyguard/common/usecase/GetScreenState;Lcom/artemchep/keyguard/common/usecase/PutScreenState;Lcom/artemchep/keyguard/common/usecase/WindowCoroutineScope;Lkotlinx/serialization/json/Json;Ljava/lang/String;Ljava/lang/String;Lcom/artemchep/keyguard/platform/LeContext;Landroidx/compose/runtime/State;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/state/FlowHolderViewModel$Entry; +HSPLcom/artemchep/keyguard/feature/navigation/state/FlowHolderViewModel$Entry;->(Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;Lkotlinx/coroutines/Job;Ljava/lang/Object;)V +HSPLcom/artemchep/keyguard/feature/navigation/state/FlowHolderViewModel$Entry;->getJob()Lkotlinx/coroutines/Job; +HSPLcom/artemchep/keyguard/feature/navigation/state/FlowHolderViewModel$Entry;->getValue()Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/state/PersistedStorage; +Lcom/artemchep/keyguard/feature/navigation/state/PersistedStorage$InDisk; +HSPLcom/artemchep/keyguard/feature/navigation/state/PersistedStorage$InDisk;->()V +HSPLcom/artemchep/keyguard/feature/navigation/state/PersistedStorage$InDisk;->(Lcom/artemchep/keyguard/feature/navigation/state/DiskHandle;)V +HSPLcom/artemchep/keyguard/feature/navigation/state/PersistedStorage$InDisk;->getDisk()Lcom/artemchep/keyguard/feature/navigation/state/DiskHandle; +Lcom/artemchep/keyguard/feature/navigation/state/PersistedStorage$InMemory; +HSPLcom/artemchep/keyguard/feature/navigation/state/PersistedStorage$InMemory;->()V +HSPLcom/artemchep/keyguard/feature/navigation/state/PersistedStorage$InMemory;->()V +Lcom/artemchep/keyguard/feature/navigation/state/ProduceScreenStateKt; +HSPLcom/artemchep/keyguard/feature/navigation/state/ProduceScreenStateKt;->produceScreenState$lambda$0(Landroidx/compose/runtime/State;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/navigation/state/ProduceScreenStateKt;->produceScreenState(Ljava/lang/String;[Ljava/lang/Object;[Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/navigation/state/ProduceScreenStateKt;->rememberScreenState(Ljava/lang/String;[Ljava/lang/Object;[Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)Landroidx/compose/runtime/State; +Lcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt;->()V +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt;->access$rememberScreenStateFlow$lambda$0(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/ShowMessage; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt;->access$rememberScreenStateFlow$lambda$1(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetScreenState; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt;->access$rememberScreenStateFlow$lambda$2(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetDebugScreenDelay; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt;->access$rememberScreenStateFlow$lambda$3(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/PutScreenState; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt;->access$rememberScreenStateFlow$lambda$4(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/WindowCoroutineScope; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt;->access$rememberScreenStateFlow$lambda$5(Lkotlin/Lazy;)Lkotlinx/serialization/json/Json; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt;->rememberScreenStateFlow$lambda$0(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/ShowMessage; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt;->rememberScreenStateFlow$lambda$1(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetScreenState; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt;->rememberScreenStateFlow$lambda$2(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetDebugScreenDelay; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt;->rememberScreenStateFlow$lambda$3(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/PutScreenState; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt;->rememberScreenStateFlow$lambda$4(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/WindowCoroutineScope; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt;->rememberScreenStateFlow$lambda$5(Lkotlin/Lazy;)Lkotlinx/serialization/json/Json; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt;->rememberScreenStateFlow(Ljava/lang/String;[Ljava/lang/Object;[Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)Lkotlinx/coroutines/flow/StateFlow; +Lcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$$inlined$rememberInstance$1; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$$inlined$rememberInstance$1;->()V +Lcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$$inlined$rememberInstance$2; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$$inlined$rememberInstance$2;->()V +Lcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$$inlined$rememberInstance$3; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$$inlined$rememberInstance$3;->()V +Lcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$$inlined$rememberInstance$4; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$$inlined$rememberInstance$4;->()V +Lcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$$inlined$rememberInstance$5; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$$inlined$rememberInstance$5;->()V +Lcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$$inlined$rememberInstance$6; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$$inlined$rememberInstance$6;->()V +Lcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$1$flow$1; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$1$flow$1;->(Ljava/lang/Object;Lkotlin/Lazy;Lkotlin/jvm/functions/Function2;)V +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$1$flow$1;->invoke(Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;)Lkotlinx/coroutines/flow/StateFlow; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$1$flow$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$1$flow$1$1; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$1$flow$1$1;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$1$flow$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$1$flow$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$1$flow$1$invoke$$inlined$map$1; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$1$flow$1$invoke$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$1$flow$1$invoke$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$1$flow$1$invoke$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$1$flow$1$invoke$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$1$flow$1$invoke$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$1$flow$1$invoke$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$1$flow$1$invoke$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$1$flow$1$invoke$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$1$flow$1$structureFlow$1; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$1$flow$1$structureFlow$1;->(Lkotlin/Lazy;Lkotlin/jvm/functions/Function2;Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$1$flow$1$structureFlow$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$1$flow$1$structureFlow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$1$flow$1$structureFlow$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$1$flow$1$structureFlow$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$1$flow$1$structureFlow$1$structure$1; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$1$flow$1$structureFlow$1$structure$1;->(Lkotlin/jvm/functions/Function2;Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$1$flow$1$structureFlow$1$structure$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$1$flow$1$structureFlow$1$structure$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$1$flow$1$structureFlow$1$structure$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlowKt$rememberScreenStateFlow$1$flow$1$structureFlow$1$structure$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope; +Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl;->()V +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl;->(Ljava/lang/String;Landroid/os/Bundle;Lcom/artemchep/keyguard/common/usecase/ShowMessage;Lcom/artemchep/keyguard/common/usecase/GetScreenState;Lcom/artemchep/keyguard/common/usecase/PutScreenState;Lcom/artemchep/keyguard/common/usecase/WindowCoroutineScope;Lcom/artemchep/keyguard/feature/navigation/NavigationController;Lkotlinx/serialization/json/Json;Lkotlinx/coroutines/CoroutineScope;Ljava/lang/String;Landroidx/compose/runtime/State;Ljava/lang/String;Lcom/artemchep/keyguard/platform/LeContext;)V +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl;->access$getJson$p(Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl;)Lkotlinx/serialization/json/Json; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl;->getAppScope()Lkotlinx/coroutines/CoroutineScope; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl;->getBundleKey(Ljava/lang/String;)Ljava/lang/String; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl;->getContext()Lcom/artemchep/keyguard/platform/LeContext; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl;->getScreenName()Ljava/lang/String; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl;->getScreenScope()Lkotlinx/coroutines/CoroutineScope; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl;->interceptBackPress(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function1;)V +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl;->loadDiskHandle(Ljava/lang/String;ZLkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl;->mutableComposeState(Lkotlinx/coroutines/flow/MutableStateFlow;)Landroidx/compose/runtime/MutableState; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl;->mutablePersistedFlow(Ljava/lang/String;Lcom/artemchep/keyguard/feature/navigation/state/PersistedStorage;Lkotlin/jvm/functions/Function0;)Lkotlinx/coroutines/flow/MutableStateFlow; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl;->mutablePersistedFlow(Ljava/lang/String;Lcom/artemchep/keyguard/feature/navigation/state/PersistedStorage;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;)Lkotlinx/coroutines/flow/MutableStateFlow; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl;->screenExecutor()Lcom/artemchep/keyguard/feature/loading/LoadingTask; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl;->translate(Ldev/icerock/moko/resources/StringResource;)Ljava/lang/String; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl;->translate(Ldev/icerock/moko/resources/StringResource;[Ljava/lang/Object;)Ljava/lang/String; +Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$Entry; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$Entry;->(Lkotlinx/coroutines/flow/MutableStateFlow;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$Entry$ComposeState;)V +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$Entry;->getSink()Lkotlinx/coroutines/flow/MutableStateFlow; +Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$Entry$ComposeState; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$Entry$ComposeState;->()V +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$Entry$ComposeState;->(Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/MutableStateFlow;)V +Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$Entry$ComposeState$collectScope$2; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$Entry$ComposeState$collectScope$2;->(Lkotlinx/coroutines/CoroutineScope;)V +Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$Entry$ComposeState$mutableState$2; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$Entry$ComposeState$mutableState$2;->(Lkotlinx/coroutines/flow/MutableStateFlow;Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$Entry$ComposeState;)V +Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$mutableComposeState$1; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$mutableComposeState$1;->(Landroidx/compose/runtime/MutableState;)V +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$mutableComposeState$1;->invoke()Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$mutableComposeState$2; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$mutableComposeState$2;->(Lkotlinx/coroutines/flow/MutableStateFlow;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$mutableComposeState$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$mutableComposeState$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$mutableComposeState$2;->invoke(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$mutableComposeState$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$mutablePersistedFlow$1; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$mutablePersistedFlow$1;->()V +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$mutablePersistedFlow$1;->()V +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$mutablePersistedFlow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$mutablePersistedFlow$1;->invoke(Lkotlinx/serialization/json/Json;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$mutablePersistedFlow$2; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$mutablePersistedFlow$2;->()V +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$mutablePersistedFlow$2;->()V +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$mutablePersistedFlow$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$mutablePersistedFlow$2;->invoke(Lkotlinx/serialization/json/Json;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$mutablePersistedFlow$lambda$4$lambda$3$$inlined$map$1; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$mutablePersistedFlow$lambda$4$lambda$3$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl;)V +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$mutablePersistedFlow$lambda$4$lambda$3$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$mutablePersistedFlow$lambda$4$lambda$3$$inlined$map$1$2; +PLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$mutablePersistedFlow$lambda$4$lambda$3$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/jvm/functions/Function2;Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl;)V +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$mutablePersistedFlow$lambda$4$lambda$3$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$mutablePersistedFlow$lambda$4$lambda$3$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$mutablePersistedFlow$lambda$4$lambda$3$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$mutablePersistedFlow$lambda$4$lambda$3$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$screenExecutor$1; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl$screenExecutor$1;->(Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeSub; +Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeSub$DefaultImpls; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeSub$DefaultImpls;->loadDiskHandle$default(Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeSub;Ljava/lang/String;ZLkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeSub$DefaultImpls;->mutablePersistedFlow$default(Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeSub;Ljava/lang/String;Lcom/artemchep/keyguard/feature/navigation/state/PersistedStorage;Lkotlin/jvm/functions/Function0;ILjava/lang/Object;)Lkotlinx/coroutines/flow/MutableStateFlow; +HSPLcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeSub$DefaultImpls;->mutablePersistedFlow$default(Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeSub;Ljava/lang/String;Lcom/artemchep/keyguard/feature/navigation/state/PersistedStorage;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;ILjava/lang/Object;)Lkotlinx/coroutines/flow/MutableStateFlow; +Lcom/artemchep/keyguard/feature/navigation/state/TranslatorScope; +Lcom/artemchep/keyguard/feature/search/component/ComposableSingletons$DropdownButtonKt; +HSPLcom/artemchep/keyguard/feature/search/component/ComposableSingletons$DropdownButtonKt;->()V +HSPLcom/artemchep/keyguard/feature/search/component/ComposableSingletons$DropdownButtonKt;->()V +HSPLcom/artemchep/keyguard/feature/search/component/ComposableSingletons$DropdownButtonKt;->getLambda-1$common_playStoreRelease()Lkotlin/jvm/functions/Function3; +Lcom/artemchep/keyguard/feature/search/component/ComposableSingletons$DropdownButtonKt$lambda-1$1; +HSPLcom/artemchep/keyguard/feature/search/component/ComposableSingletons$DropdownButtonKt$lambda-1$1;->()V +HSPLcom/artemchep/keyguard/feature/search/component/ComposableSingletons$DropdownButtonKt$lambda-1$1;->()V +Lcom/artemchep/keyguard/feature/search/component/DropdownButtonKt; +HSPLcom/artemchep/keyguard/feature/search/component/DropdownButtonKt;->DropdownButton$lambda$1(Landroidx/compose/runtime/MutableState;)Z +HSPLcom/artemchep/keyguard/feature/search/component/DropdownButtonKt;->DropdownButton(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/vector/ImageVector;Ljava/lang/String;Ljava/util/List;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/feature/search/component/DropdownButtonKt;->access$DropdownButton$lambda$1(Landroidx/compose/runtime/MutableState;)Z +Lcom/artemchep/keyguard/feature/search/component/DropdownButtonKt$DropdownButton$1; +HSPLcom/artemchep/keyguard/feature/search/component/DropdownButtonKt$DropdownButton$1;->(Ljava/util/List;Landroidx/compose/runtime/MutableState;)V +HSPLcom/artemchep/keyguard/feature/search/component/DropdownButtonKt$DropdownButton$1;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/search/component/DropdownButtonKt$DropdownButton$1;->invoke()V +Lcom/artemchep/keyguard/feature/search/component/DropdownButtonKt$DropdownButton$2$2; +HSPLcom/artemchep/keyguard/feature/search/component/DropdownButtonKt$DropdownButton$2$2;->(Ljava/util/List;Landroidx/compose/runtime/MutableState;Landroidx/compose/ui/graphics/vector/ImageVector;Lkotlin/jvm/functions/Function0;)V +HSPLcom/artemchep/keyguard/feature/search/component/DropdownButtonKt$DropdownButton$2$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/feature/search/component/DropdownButtonKt$DropdownButton$2$2;->invoke(Lkotlin/Unit;Landroidx/compose/runtime/Composer;I)V +Lcom/artemchep/keyguard/feature/search/component/DropdownButtonKt$DropdownButton$2$2$1$1; +HSPLcom/artemchep/keyguard/feature/search/component/DropdownButtonKt$DropdownButton$2$2$1$1;->(Landroidx/compose/runtime/MutableState;)V +Lcom/artemchep/keyguard/feature/search/component/DropdownButtonKt$DropdownButton$2$2$2; +HSPLcom/artemchep/keyguard/feature/search/component/DropdownButtonKt$DropdownButton$2$2$2;->(Landroidx/compose/ui/graphics/vector/ImageVector;Lkotlin/jvm/functions/Function0;)V +HSPLcom/artemchep/keyguard/feature/search/component/DropdownButtonKt$DropdownButton$2$2$2;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/search/component/DropdownButtonKt$DropdownButton$2$2$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/search/component/DropdownButtonKt$DropdownButton$2$3; +HSPLcom/artemchep/keyguard/feature/search/component/DropdownButtonKt$DropdownButton$2$3;->(Ljava/lang/String;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function3;)V +Lcom/artemchep/keyguard/feature/search/component/DropdownButtonKt$DropdownButton$2$onDismissRequest$1$1; +HSPLcom/artemchep/keyguard/feature/search/component/DropdownButtonKt$DropdownButton$2$onDismissRequest$1$1;->(Landroidx/compose/runtime/MutableState;)V +Lcom/artemchep/keyguard/feature/search/component/DropdownButtonKt$DropdownButton$3; +HSPLcom/artemchep/keyguard/feature/search/component/DropdownButtonKt$DropdownButton$3;->(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/graphics/vector/ImageVector;Ljava/lang/String;Ljava/util/List;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function3;II)V +Lcom/artemchep/keyguard/feature/search/filter/FilterButtonKt; +HSPLcom/artemchep/keyguard/feature/search/filter/FilterButtonKt;->FilterButton(Landroidx/compose/ui/Modifier;Ljava/lang/Integer;Ljava/util/List;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;II)V +Lcom/artemchep/keyguard/feature/search/filter/FilterButtonKt$FilterButton$1; +HSPLcom/artemchep/keyguard/feature/search/filter/FilterButtonKt$FilterButton$1;->(Ljava/lang/Integer;Ljava/util/List;)V +Lcom/artemchep/keyguard/feature/search/filter/component/FilterItemKt; +HSPLcom/artemchep/keyguard/feature/search/filter/component/FilterItemKt;->FilterItemLayout$lambda$0(Landroidx/compose/runtime/State;)Lkotlin/jvm/functions/Function0; +HSPLcom/artemchep/keyguard/feature/search/filter/component/FilterItemKt;->FilterItemLayout(Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;ZLandroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/feature/search/filter/component/FilterItemKt;->access$FilterItemLayout$lambda$0(Landroidx/compose/runtime/State;)Lkotlin/jvm/functions/Function0; +Lcom/artemchep/keyguard/feature/search/filter/component/FilterItemKt$FilterItemLayout$1; +HSPLcom/artemchep/keyguard/feature/search/filter/component/FilterItemKt$FilterItemLayout$1;->()V +HSPLcom/artemchep/keyguard/feature/search/filter/component/FilterItemKt$FilterItemLayout$1;->()V +HSPLcom/artemchep/keyguard/feature/search/filter/component/FilterItemKt$FilterItemLayout$1;->invoke(Landroidx/compose/ui/semantics/SemanticsPropertyReceiver;)V +HSPLcom/artemchep/keyguard/feature/search/filter/component/FilterItemKt$FilterItemLayout$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/search/filter/component/FilterItemKt$FilterItemLayout$2; +HSPLcom/artemchep/keyguard/feature/search/filter/component/FilterItemKt$FilterItemLayout$2;->(ZLandroidx/compose/runtime/State;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;)V +HSPLcom/artemchep/keyguard/feature/search/filter/component/FilterItemKt$FilterItemLayout$2;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/search/filter/component/FilterItemKt$FilterItemLayout$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/search/filter/component/FilterItemKt$FilterItemLayout$2$1; +HSPLcom/artemchep/keyguard/feature/search/filter/component/FilterItemKt$FilterItemLayout$2$1;->(Landroidx/compose/runtime/State;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;)V +HSPLcom/artemchep/keyguard/feature/search/filter/component/FilterItemKt$FilterItemLayout$2$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/search/filter/component/FilterItemKt$FilterItemLayout$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/search/filter/component/FilterItemKt$FilterItemLayout$3; +HSPLcom/artemchep/keyguard/feature/search/filter/component/FilterItemKt$FilterItemLayout$3;->(Landroidx/compose/ui/Modifier;ZLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;ZII)V +Lcom/artemchep/keyguard/feature/search/filter/model/FilterItemModel; +Lcom/artemchep/keyguard/feature/search/filter/model/FilterItemModel$Item; +Lcom/artemchep/keyguard/feature/search/filter/model/FilterItemModel$Section; +Lcom/artemchep/keyguard/feature/search/sort/SortButtonKt; +HSPLcom/artemchep/keyguard/feature/search/sort/SortButtonKt;->SortButton(Landroidx/compose/ui/Modifier;Ljava/util/List;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;II)V +Lcom/artemchep/keyguard/feature/search/sort/SortButtonKt$SortButton$1; +HSPLcom/artemchep/keyguard/feature/search/sort/SortButtonKt$SortButton$1;->(Ljava/util/List;)V +Lcom/artemchep/keyguard/feature/search/sort/model/SortItemModel; +Lcom/artemchep/keyguard/feature/search/sort/model/SortItemModel$Item; +Lcom/artemchep/keyguard/feature/search/sort/model/SortItemModel$Section; +Lcom/artemchep/keyguard/feature/send/SendRoute; +HSPLcom/artemchep/keyguard/feature/send/SendRoute;->()V +HSPLcom/artemchep/keyguard/feature/send/SendRoute;->()V +Lcom/artemchep/keyguard/feature/twopane/ComposableSingletons$TwoPaneLayoutKt; +HSPLcom/artemchep/keyguard/feature/twopane/ComposableSingletons$TwoPaneLayoutKt;->()V +HSPLcom/artemchep/keyguard/feature/twopane/ComposableSingletons$TwoPaneLayoutKt;->()V +HSPLcom/artemchep/keyguard/feature/twopane/ComposableSingletons$TwoPaneLayoutKt;->getLambda-1$common_playStoreRelease()Lkotlin/jvm/functions/Function4; +Lcom/artemchep/keyguard/feature/twopane/ComposableSingletons$TwoPaneLayoutKt$lambda-1$1; +HSPLcom/artemchep/keyguard/feature/twopane/ComposableSingletons$TwoPaneLayoutKt$lambda-1$1;->()V +HSPLcom/artemchep/keyguard/feature/twopane/ComposableSingletons$TwoPaneLayoutKt$lambda-1$1;->()V +HSPLcom/artemchep/keyguard/feature/twopane/ComposableSingletons$TwoPaneLayoutKt$lambda-1$1;->invoke(Landroidx/compose/animation/AnimatedContentScope;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/twopane/ComposableSingletons$TwoPaneLayoutKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt; +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt;->()V +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt;->PaneLayout(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt;->TwoPaneLayout$lambda$5(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetNavAnimation; +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt;->TwoPaneLayout(Lcom/artemchep/keyguard/feature/twopane/TwoPaneScaffoldScope;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt;->TwoPaneScaffold-KLGhzwk(Landroidx/compose/ui/Modifier;FFFFLkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt;->TwoPaneScaffold_KLGhzwk$lambda$0(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetAllowTwoPanelLayoutInPortrait; +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt;->TwoPaneScaffold_KLGhzwk$lambda$2(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetAllowTwoPanelLayoutInLandscape; +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt;->access$TwoPaneLayout$lambda$5(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetNavAnimation; +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt;->access$TwoPaneScaffold_KLGhzwk$lambda$0(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetAllowTwoPanelLayoutInPortrait; +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt;->access$TwoPaneScaffold_KLGhzwk$lambda$2(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetAllowTwoPanelLayoutInLandscape; +Lcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt$TwoPaneLayout$$inlined$rememberInstance$1; +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt$TwoPaneLayout$$inlined$rememberInstance$1;->()V +Lcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt$TwoPaneLayout$1$2; +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt$TwoPaneLayout$1$2;->(Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Lcom/artemchep/keyguard/feature/twopane/TwoPaneScaffoldScope;Lkotlin/Lazy;)V +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt$TwoPaneLayout$1$2;->access$invoke$lambda$1(Landroidx/compose/runtime/State;)F +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt$TwoPaneLayout$1$2;->invoke$lambda$1(Landroidx/compose/runtime/State;)F +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt$TwoPaneLayout$1$2;->invoke(Landroidx/compose/foundation/layout/BoxScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt$TwoPaneLayout$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt$TwoPaneLayout$1$2$1; +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt$TwoPaneLayout$1$2$1;->(Lkotlin/Lazy;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/State;)V +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt$TwoPaneLayout$1$2$1;->invoke(Landroidx/compose/animation/AnimatedContentTransitionScope;)Landroidx/compose/animation/ContentTransform; +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt$TwoPaneLayout$1$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt$TwoPaneLayout$2; +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt$TwoPaneLayout$2;->(Lcom/artemchep/keyguard/feature/twopane/TwoPaneScaffoldScope;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;II)V +Lcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt$TwoPaneScaffold$2; +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt$TwoPaneScaffold$2;->(FFFFLandroidx/compose/runtime/State;Landroidx/compose/runtime/State;Lkotlin/jvm/functions/Function3;)V +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt$TwoPaneScaffold$2;->invoke(Landroidx/compose/foundation/layout/BoxWithConstraintsScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt$TwoPaneScaffold$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt$TwoPaneScaffold$3; +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt$TwoPaneScaffold$3;->(Landroidx/compose/ui/Modifier;FFFFLkotlin/jvm/functions/Function3;II)V +Lcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt$TwoPaneScaffold-KLGhzwk$$inlined$rememberInstance$1; +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt$TwoPaneScaffold-KLGhzwk$$inlined$rememberInstance$1;->()V +Lcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt$TwoPaneScaffold-KLGhzwk$$inlined$rememberInstance$2; +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneLayoutKt$TwoPaneScaffold-KLGhzwk$$inlined$rememberInstance$2;->()V +Lcom/artemchep/keyguard/feature/twopane/TwoPaneNavigationKt; +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneNavigationKt;->TwoPaneNavigationContent(Lkotlinx/collections/immutable/PersistentList;Landroidx/compose/runtime/Composer;I)V +Lcom/artemchep/keyguard/feature/twopane/TwoPaneNavigationKt$TwoPaneNavigationContent$1; +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneNavigationKt$TwoPaneNavigationContent$1;->(Lkotlinx/collections/immutable/PersistentList;)V +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneNavigationKt$TwoPaneNavigationContent$1;->invoke(Lcom/artemchep/keyguard/feature/twopane/TwoPaneScaffoldScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneNavigationKt$TwoPaneNavigationContent$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/twopane/TwoPaneNavigationKt$TwoPaneNavigationContent$1$2; +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneNavigationKt$TwoPaneNavigationContent$1$2;->(Lcom/artemchep/keyguard/feature/navigation/NavigationEntry;Lcom/artemchep/keyguard/feature/navigation/NavigationEntry;Lkotlinx/collections/immutable/PersistentList;)V +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneNavigationKt$TwoPaneNavigationContent$1$2;->invoke(Landroidx/compose/foundation/layout/BoxScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneNavigationKt$TwoPaneNavigationContent$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/twopane/TwoPaneScaffoldScope; +Lcom/artemchep/keyguard/feature/twopane/TwoPaneScaffoldScopeImpl; +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneScaffoldScopeImpl;->(Landroidx/compose/foundation/layout/BoxScope;ZF)V +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneScaffoldScopeImpl;->(Landroidx/compose/foundation/layout/BoxScope;ZFLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneScaffoldScopeImpl;->equals(Ljava/lang/Object;)Z +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneScaffoldScopeImpl;->getTabletUi()Z +Lcom/artemchep/keyguard/feature/twopane/TwoPaneScreenKt; +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneScreenKt;->TwoPaneScreen(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function4;Lkotlin/jvm/functions/Function5;Landroidx/compose/runtime/Composer;II)V +Lcom/artemchep/keyguard/feature/twopane/TwoPaneScreenKt$TwoPaneScreen$1; +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneScreenKt$TwoPaneScreen$1;->(Lkotlin/jvm/functions/Function5;Lkotlin/jvm/functions/Function4;)V +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneScreenKt$TwoPaneScreen$1;->invoke(Lcom/artemchep/keyguard/feature/twopane/TwoPaneScaffoldScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/feature/twopane/TwoPaneScreenKt$TwoPaneScreen$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/feature/watchtower/WatchtowerRoute; +HSPLcom/artemchep/keyguard/feature/watchtower/WatchtowerRoute;->()V +HSPLcom/artemchep/keyguard/feature/watchtower/WatchtowerRoute;->()V +Lcom/artemchep/keyguard/platform/LeAnimationKt; +HSPLcom/artemchep/keyguard/platform/LeAnimationKt;->getLocalAnimationFactor(Landroidx/compose/runtime/Composer;I)F +Lcom/artemchep/keyguard/platform/LeBundleKt; +HSPLcom/artemchep/keyguard/platform/LeBundleKt;->contains(Landroid/os/Bundle;Ljava/lang/String;)Z +HSPLcom/artemchep/keyguard/platform/LeBundleKt;->leBundleOf([Lkotlin/Pair;)Landroid/os/Bundle; +Lcom/artemchep/keyguard/platform/LeContext; +HSPLcom/artemchep/keyguard/platform/LeContext;->()V +HSPLcom/artemchep/keyguard/platform/LeContext;->(Landroid/content/Context;)V +HSPLcom/artemchep/keyguard/platform/LeContext;->getContext()Landroid/content/Context; +Lcom/artemchep/keyguard/platform/LeContextKt; +HSPLcom/artemchep/keyguard/platform/LeContextKt;->getLocalLeContext(Landroidx/compose/runtime/Composer;I)Lcom/artemchep/keyguard/platform/LeContext; +Lcom/artemchep/keyguard/platform/LeDebugKt; +HSPLcom/artemchep/keyguard/platform/LeDebugKt;->()V +HSPLcom/artemchep/keyguard/platform/LeDebugKt;->isStandalone()Z +Lcom/artemchep/keyguard/platform/LeImeKt; +HSPLcom/artemchep/keyguard/platform/LeImeKt;->getLeDisplayCutout(Landroidx/compose/foundation/layout/WindowInsets$Companion;Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/layout/WindowInsets; +HSPLcom/artemchep/keyguard/platform/LeImeKt;->getLeIme(Landroidx/compose/foundation/layout/WindowInsets$Companion;Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/layout/WindowInsets; +HSPLcom/artemchep/keyguard/platform/LeImeKt;->getLeNavigationBars(Landroidx/compose/foundation/layout/WindowInsets$Companion;Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/layout/WindowInsets; +HSPLcom/artemchep/keyguard/platform/LeImeKt;->getLeStatusBars(Landroidx/compose/foundation/layout/WindowInsets$Companion;Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/layout/WindowInsets; +HSPLcom/artemchep/keyguard/platform/LeImeKt;->getLeSystemBars(Landroidx/compose/foundation/layout/WindowInsets$Companion;Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/layout/WindowInsets; +Lcom/artemchep/keyguard/platform/LePlatformKt; +HSPLcom/artemchep/keyguard/platform/LePlatformKt;->()V +HSPLcom/artemchep/keyguard/platform/LePlatformKt;->getCurrentPlatform()Lcom/artemchep/keyguard/platform/Platform; +HSPLcom/artemchep/keyguard/platform/LePlatformKt;->getPlatform()Lcom/artemchep/keyguard/platform/Platform$Mobile$Android; +Lcom/artemchep/keyguard/platform/LePlatformKt$platform$2; +HSPLcom/artemchep/keyguard/platform/LePlatformKt$platform$2;->()V +HSPLcom/artemchep/keyguard/platform/LePlatformKt$platform$2;->()V +HSPLcom/artemchep/keyguard/platform/LePlatformKt$platform$2;->invoke()Lcom/artemchep/keyguard/platform/Platform$Mobile$Android; +HSPLcom/artemchep/keyguard/platform/LePlatformKt$platform$2;->invoke()Ljava/lang/Object; +Lcom/artemchep/keyguard/platform/Platform; +Lcom/artemchep/keyguard/platform/Platform$Desktop; +Lcom/artemchep/keyguard/platform/Platform$Mobile; +Lcom/artemchep/keyguard/platform/Platform$Mobile$Android; +HSPLcom/artemchep/keyguard/platform/Platform$Mobile$Android;->()V +HSPLcom/artemchep/keyguard/platform/Platform$Mobile$Android;->(Z)V +Lcom/artemchep/keyguard/platform/RecordExceptionKt; +HSPLcom/artemchep/keyguard/platform/RecordExceptionKt;->crashlyticsIsEnabled()Ljava/lang/Boolean; +HSPLcom/artemchep/keyguard/platform/RecordExceptionKt;->crashlyticsSetEnabled(Ljava/lang/Boolean;)V +HSPLcom/artemchep/keyguard/platform/RecordExceptionKt;->recordLog(Ljava/lang/String;)V +Lcom/artemchep/keyguard/platform/lifecycle/LeLifecycleExtKt; +HSPLcom/artemchep/keyguard/platform/lifecycle/LeLifecycleExtKt;->flowWithLifecycle$default(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/platform/lifecycle/LeLifecycleState;ILjava/lang/Object;)Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/platform/lifecycle/LeLifecycleExtKt;->flowWithLifecycle(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/platform/lifecycle/LeLifecycleState;)Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/platform/lifecycle/LeLifecycleExtKt;->onState(Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/platform/lifecycle/LeLifecycleState;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/platform/lifecycle/LeLifecycleExtKt$flowWithLifecycle$$inlined$flatMapLatest$1; +HSPLcom/artemchep/keyguard/platform/lifecycle/LeLifecycleExtKt$flowWithLifecycle$$inlined$flatMapLatest$1;->(Lkotlin/coroutines/Continuation;Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/platform/lifecycle/LeLifecycleExtKt$flowWithLifecycle$$inlined$flatMapLatest$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/platform/lifecycle/LeLifecycleExtKt$flowWithLifecycle$$inlined$flatMapLatest$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/platform/lifecycle/LeLifecycleExtKt$flowWithLifecycle$$inlined$flatMapLatest$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/platform/lifecycle/LeLifecycleExtKt$flowWithLifecycle$$inlined$map$1; +HSPLcom/artemchep/keyguard/platform/lifecycle/LeLifecycleExtKt$flowWithLifecycle$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/platform/lifecycle/LeLifecycleState;)V +HSPLcom/artemchep/keyguard/platform/lifecycle/LeLifecycleExtKt$flowWithLifecycle$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/platform/lifecycle/LeLifecycleExtKt$flowWithLifecycle$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/platform/lifecycle/LeLifecycleExtKt$flowWithLifecycle$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lcom/artemchep/keyguard/platform/lifecycle/LeLifecycleState;)V +HSPLcom/artemchep/keyguard/platform/lifecycle/LeLifecycleExtKt$flowWithLifecycle$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/platform/lifecycle/LeLifecycleExtKt$flowWithLifecycle$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/platform/lifecycle/LeLifecycleExtKt$flowWithLifecycle$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/platform/lifecycle/LeLifecycleExtKt$flowWithLifecycle$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/platform/lifecycle/LeLifecycleExtKt$onState$1$flow$1; +HSPLcom/artemchep/keyguard/platform/lifecycle/LeLifecycleExtKt$onState$1$flow$1;->(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/platform/lifecycle/LeLifecycleExtKt$onState$1$flow$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/platform/lifecycle/LeLifecycleExtKt$onState$1$flow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/platform/lifecycle/LeLifecycleExtKt$onState$1$flow$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/platform/lifecycle/LeLifecycleExtKt$onState$1$flow$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/platform/lifecycle/LeLifecycleState; +HSPLcom/artemchep/keyguard/platform/lifecycle/LeLifecycleState;->$values()[Lcom/artemchep/keyguard/platform/lifecycle/LeLifecycleState; +HSPLcom/artemchep/keyguard/platform/lifecycle/LeLifecycleState;->()V +HSPLcom/artemchep/keyguard/platform/lifecycle/LeLifecycleState;->(Ljava/lang/String;I)V +Lcom/artemchep/keyguard/platform/lifecycle/LocalLifecycleStateFlowKt; +HSPLcom/artemchep/keyguard/platform/lifecycle/LocalLifecycleStateFlowKt;->getLocalLifecycleStateFlow(Landroidx/compose/runtime/Composer;I)Lkotlinx/coroutines/flow/StateFlow; +HSPLcom/artemchep/keyguard/platform/lifecycle/LocalLifecycleStateFlowKt;->toCommon(Landroidx/lifecycle/Lifecycle$State;)Lcom/artemchep/keyguard/platform/lifecycle/LeLifecycleState; +Lcom/artemchep/keyguard/platform/lifecycle/LocalLifecycleStateFlowKt$LocalLifecycleStateFlow$1; +HSPLcom/artemchep/keyguard/platform/lifecycle/LocalLifecycleStateFlowKt$LocalLifecycleStateFlow$1;->$r8$lambda$YdcAxOC5sem8u3fiyg-GfdyOe8c(Lkotlinx/coroutines/flow/MutableStateFlow;Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V +HSPLcom/artemchep/keyguard/platform/lifecycle/LocalLifecycleStateFlowKt$LocalLifecycleStateFlow$1;->(Landroidx/lifecycle/LifecycleOwner;Lkotlinx/coroutines/flow/MutableStateFlow;)V +HSPLcom/artemchep/keyguard/platform/lifecycle/LocalLifecycleStateFlowKt$LocalLifecycleStateFlow$1;->invoke$lambda$0(Lkotlinx/coroutines/flow/MutableStateFlow;Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V +HSPLcom/artemchep/keyguard/platform/lifecycle/LocalLifecycleStateFlowKt$LocalLifecycleStateFlow$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult; +HSPLcom/artemchep/keyguard/platform/lifecycle/LocalLifecycleStateFlowKt$LocalLifecycleStateFlow$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/platform/lifecycle/LocalLifecycleStateFlowKt$LocalLifecycleStateFlow$1$$ExternalSyntheticLambda0; +HSPLcom/artemchep/keyguard/platform/lifecycle/LocalLifecycleStateFlowKt$LocalLifecycleStateFlow$1$$ExternalSyntheticLambda0;->(Lkotlinx/coroutines/flow/MutableStateFlow;)V +HSPLcom/artemchep/keyguard/platform/lifecycle/LocalLifecycleStateFlowKt$LocalLifecycleStateFlow$1$$ExternalSyntheticLambda0;->onStateChanged(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/Lifecycle$Event;)V +Lcom/artemchep/keyguard/platform/lifecycle/LocalLifecycleStateFlowKt$LocalLifecycleStateFlow$1$invoke$$inlined$onDispose$1; +HSPLcom/artemchep/keyguard/platform/lifecycle/LocalLifecycleStateFlowKt$LocalLifecycleStateFlow$1$invoke$$inlined$onDispose$1;->(Landroidx/lifecycle/LifecycleOwner;Landroidx/lifecycle/LifecycleEventObserver;)V +Lcom/artemchep/keyguard/platform/lifecycle/LocalLifecycleStateFlowKt$WhenMappings; +HSPLcom/artemchep/keyguard/platform/lifecycle/LocalLifecycleStateFlowKt$WhenMappings;->()V +Lcom/artemchep/keyguard/platform/util/IsReleaseKt; +HSPLcom/artemchep/keyguard/platform/util/IsReleaseKt;->()V +HSPLcom/artemchep/keyguard/platform/util/IsReleaseKt;->isRelease()Z +Lcom/artemchep/keyguard/provider/bitwarden/ServerEnv; +Lcom/artemchep/keyguard/provider/bitwarden/ServerTwoFactorToken; +Lcom/artemchep/keyguard/provider/bitwarden/entity/HibpBreachGroup; +HSPLcom/artemchep/keyguard/provider/bitwarden/entity/HibpBreachGroup;->()V +Lcom/artemchep/keyguard/provider/bitwarden/entity/HibpBreachGroup$$serializer; +HSPLcom/artemchep/keyguard/provider/bitwarden/entity/HibpBreachGroup$$serializer;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/entity/HibpBreachGroup$$serializer;->()V +Lcom/artemchep/keyguard/provider/bitwarden/entity/HibpBreachGroup$Companion; +HSPLcom/artemchep/keyguard/provider/bitwarden/entity/HibpBreachGroup$Companion;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/entity/HibpBreachGroup$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/entity/HibpBreachGroup$Companion;->serializer()Lkotlinx/serialization/KSerializer; +Lcom/artemchep/keyguard/provider/bitwarden/entity/HibpBreachResponse$$serializer; +HSPLcom/artemchep/keyguard/provider/bitwarden/entity/HibpBreachResponse$$serializer;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/entity/HibpBreachResponse$$serializer;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/entity/HibpBreachResponse$$serializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +Lcom/artemchep/keyguard/provider/bitwarden/entity/HibpBreachResponse$$serializer$annotationImpl$kotlinx_serialization_json_JsonNames$0; +HSPLcom/artemchep/keyguard/provider/bitwarden/entity/HibpBreachResponse$$serializer$annotationImpl$kotlinx_serialization_json_JsonNames$0;->([Ljava/lang/String;)V +Lcom/artemchep/keyguard/provider/bitwarden/repository/BaseRepository; +Lcom/artemchep/keyguard/provider/bitwarden/repository/BaseRepository$DefaultImpls; +HSPLcom/artemchep/keyguard/provider/bitwarden/repository/BaseRepository$DefaultImpls;->getSnapshot(Lcom/artemchep/keyguard/provider/bitwarden/repository/BaseRepository;)Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenCipherRepository; +Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenCollectionRepository; +Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenFolderRepository; +Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenMetaRepository; +Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenOrganizationRepository; +Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenProfileRepository; +Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenSendRepository; +Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenTokenRepository; +Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenTokenRepository$DefaultImpls; +HSPLcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenTokenRepository$DefaultImpls;->getSnapshot(Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenTokenRepository;)Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/AddFolderImpl; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/AddFolderImpl;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/AddFolderImpl;->(Lcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyDatabase;Lcom/artemchep/keyguard/common/service/crypto/CryptoGenerator;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/AddFolderImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/AddFolderImpl$Companion; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/AddFolderImpl$Companion;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/AddFolderImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/AddFolderImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/AddFolderImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/AddFolderImpl$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/AddFolderImpl$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/ChangeCipherNameByIdImpl; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/ChangeCipherNameByIdImpl;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/ChangeCipherNameByIdImpl;->(Lcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyCipherById;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/ChangeCipherNameByIdImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/ChangeCipherNameByIdImpl$Companion; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/ChangeCipherNameByIdImpl$Companion;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/ChangeCipherNameByIdImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/ChangeCipherNameByIdImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/ChangeCipherNameByIdImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/ChangeCipherPasswordByIdImpl; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/ChangeCipherPasswordByIdImpl;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/ChangeCipherPasswordByIdImpl;->(Lcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyCipherById;Lcom/artemchep/keyguard/common/usecase/GetPasswordStrength;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/ChangeCipherPasswordByIdImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/ChangeCipherPasswordByIdImpl$Companion; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/ChangeCipherPasswordByIdImpl$Companion;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/ChangeCipherPasswordByIdImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/ChangeCipherPasswordByIdImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/ChangeCipherPasswordByIdImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/ChangeCipherPasswordByIdImpl$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/ChangeCipherPasswordByIdImpl$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$Node; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$Node$Group; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$Node$Group;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$Node$Group;->(Larrow/optics/POptional;Ljava/util/List;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$Node$Leaf; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$Node$Leaf;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$Node$Leaf;->(Larrow/optics/POptional;Lcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$PickStrategy;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$Node$Leaf;->(Larrow/optics/POptional;Lcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$PickStrategy;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$PickAttachmentStrategy; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$PickAttachmentStrategy;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$PickCardStrategy; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$PickCardStrategy;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$PickFieldStrategy; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$PickFieldStrategy;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$PickModeStrategy; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$PickModeStrategy;->(Lkotlin/jvm/functions/Function0;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$PickModeStrategy;->(Lkotlin/jvm/functions/Function0;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$PickStrategy; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$PickUriStrategy; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$PickUriStrategy;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$mergeRules$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$mergeRules$1;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$mergeRules$1;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$mergeRules$2; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$mergeRules$2;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$mergeRules$2;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$mergeRules$3; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$mergeRules$3;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$mergeRules$3;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$mergeRules$4; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$mergeRules$4;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$mergeRules$4;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$mergeRules$5; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$mergeRules$5;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CipherMergeImpl$mergeRules$5;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/CipherUrlCheckImpl; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CipherUrlCheckImpl;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CipherUrlCheckImpl;->(Lcom/artemchep/keyguard/common/service/tld/TldService;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CipherUrlCheckImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/CipherUrlCheckImpl$Companion; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CipherUrlCheckImpl$Companion;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CipherUrlCheckImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/CipherUrlCheckImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CipherUrlCheckImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/CopyCipherByIdImpl; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CopyCipherByIdImpl;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CopyCipherByIdImpl;->(Lcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyCipherById;Lcom/artemchep/keyguard/common/usecase/AddFolder;Lcom/artemchep/keyguard/common/service/crypto/CryptoGenerator;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CopyCipherByIdImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/CopyCipherByIdImpl$Companion; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CopyCipherByIdImpl$Companion;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CopyCipherByIdImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/CopyCipherByIdImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CopyCipherByIdImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/CopyCipherByIdImpl$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CopyCipherByIdImpl$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/CopyCipherByIdImpl$special$$inlined$instance$default$3; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/CopyCipherByIdImpl$special$$inlined$instance$default$3;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/FavouriteCipherByIdImpl; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/FavouriteCipherByIdImpl;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/FavouriteCipherByIdImpl;->(Lcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyCipherById;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/FavouriteCipherByIdImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/FavouriteCipherByIdImpl$Companion; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/FavouriteCipherByIdImpl$Companion;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/FavouriteCipherByIdImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/FavouriteCipherByIdImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/FavouriteCipherByIdImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetAccountsImpl; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetAccountsImpl;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetAccountsImpl;->(Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenTokenRepository;Lkotlin/coroutines/CoroutineContext;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetAccountsImpl;->(Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenTokenRepository;Lkotlin/coroutines/CoroutineContext;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetAccountsImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetAccountsImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetAccountsImpl;->invoke()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetAccountsImpl$Companion; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetAccountsImpl$Companion;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetAccountsImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetAccountsImpl$invoke$$inlined$map$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetAccountsImpl$invoke$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetAccountsImpl$invoke$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetAccountsImpl$invoke$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetAccountsImpl$invoke$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetAccountsImpl$invoke$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetAccountsImpl$invoke$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetAccountsImpl$invoke$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetAccountsImpl$invoke$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetAccountsImpl$invoke$$inlined$map$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetAccountsImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetAccountsImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetCipherOpenedHistoryImpl; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCipherOpenedHistoryImpl;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCipherOpenedHistoryImpl;->(Lcom/artemchep/keyguard/android/downloader/journal/CipherHistoryOpenedRepository;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCipherOpenedHistoryImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetCipherOpenedHistoryImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCipherOpenedHistoryImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl;->(Lcom/artemchep/keyguard/common/service/logging/LogRepository;Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenCipherRepository;Lcom/artemchep/keyguard/common/usecase/GetPasswordStrength;Lcom/artemchep/keyguard/common/usecase/WindowCoroutineScope;Lkotlin/coroutines/CoroutineContext;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl;->(Lcom/artemchep/keyguard/common/service/logging/LogRepository;Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenCipherRepository;Lcom/artemchep/keyguard/common/usecase/GetPasswordStrength;Lcom/artemchep/keyguard/common/usecase/WindowCoroutineScope;Lkotlin/coroutines/CoroutineContext;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl;->invoke()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$Companion; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$Companion;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$special$$inlined$instance$default$3; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$special$$inlined$instance$default$3;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$special$$inlined$instance$default$4; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$special$$inlined$instance$default$4;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$special$$inlined$map$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$special$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$special$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$special$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$special$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$special$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$special$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$special$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$special$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$special$$inlined$withLogTimeOfFirstEvent$default$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$special$$inlined$withLogTimeOfFirstEvent$default$1;->(Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/common/service/logging/LogRepository;Ljava/lang/String;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$special$$inlined$withLogTimeOfFirstEvent$default$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$special$$inlined$withLogTimeOfFirstEvent$default$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$special$$inlined$withLogTimeOfFirstEvent$default$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$special$$inlined$withLogTimeOfFirstEvent$default$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$special$$inlined$withLogTimeOfFirstEvent$default$1$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$special$$inlined$withLogTimeOfFirstEvent$default$1$1;->(Lkotlin/jvm/internal/Ref$BooleanRef;Lkotlinx/datetime/Instant;Lcom/artemchep/keyguard/common/service/logging/LogRepository;Ljava/lang/String;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$special$$inlined$withLogTimeOfFirstEvent$default$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$special$$inlined$withLogTimeOfFirstEvent$default$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$special$$inlined$withLogTimeOfFirstEvent$default$1$1;->invoke(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCiphersImpl$special$$inlined$withLogTimeOfFirstEvent$default$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl;->(Lcom/artemchep/keyguard/common/service/logging/LogRepository;Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenCollectionRepository;Lcom/artemchep/keyguard/common/usecase/WindowCoroutineScope;Lkotlin/coroutines/CoroutineContext;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl;->(Lcom/artemchep/keyguard/common/service/logging/LogRepository;Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenCollectionRepository;Lcom/artemchep/keyguard/common/usecase/WindowCoroutineScope;Lkotlin/coroutines/CoroutineContext;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl;->invoke()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl$Companion; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl$Companion;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl$special$$inlined$instance$default$3; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl$special$$inlined$instance$default$3;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl$special$$inlined$map$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl$special$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl$special$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl$special$$inlined$map$1$2; +PLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl$special$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl$special$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl$special$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl$special$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl$special$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl$special$$inlined$withLogTimeOfFirstEvent$default$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl$special$$inlined$withLogTimeOfFirstEvent$default$1;->(Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/common/service/logging/LogRepository;Ljava/lang/String;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl$special$$inlined$withLogTimeOfFirstEvent$default$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl$special$$inlined$withLogTimeOfFirstEvent$default$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl$special$$inlined$withLogTimeOfFirstEvent$default$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl$special$$inlined$withLogTimeOfFirstEvent$default$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl$special$$inlined$withLogTimeOfFirstEvent$default$1$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl$special$$inlined$withLogTimeOfFirstEvent$default$1$1;->(Lkotlin/jvm/internal/Ref$BooleanRef;Lkotlinx/datetime/Instant;Lcom/artemchep/keyguard/common/service/logging/LogRepository;Ljava/lang/String;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl$special$$inlined$withLogTimeOfFirstEvent$default$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl$special$$inlined$withLogTimeOfFirstEvent$default$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl$special$$inlined$withLogTimeOfFirstEvent$default$1$1;->invoke(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetCollectionsImpl$special$$inlined$withLogTimeOfFirstEvent$default$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetFolderTreeImpl; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFolderTreeImpl;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFolderTreeImpl;->(Lkotlin/coroutines/CoroutineContext;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFolderTreeImpl;->(Lkotlin/coroutines/CoroutineContext;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFolderTreeImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetFolderTreeImpl$Companion; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFolderTreeImpl$Companion;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFolderTreeImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl;->(Lcom/artemchep/keyguard/common/service/logging/LogRepository;Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenFolderRepository;Lcom/artemchep/keyguard/common/usecase/WindowCoroutineScope;Lkotlin/coroutines/CoroutineContext;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl;->(Lcom/artemchep/keyguard/common/service/logging/LogRepository;Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenFolderRepository;Lcom/artemchep/keyguard/common/usecase/WindowCoroutineScope;Lkotlin/coroutines/CoroutineContext;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl;->invoke()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl$Companion; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl$Companion;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl$special$$inlined$instance$default$3; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl$special$$inlined$instance$default$3;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl$special$$inlined$map$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl$special$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl$special$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl$special$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl$special$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl$special$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl$special$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl$special$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl$special$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl$special$$inlined$withLogTimeOfFirstEvent$default$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl$special$$inlined$withLogTimeOfFirstEvent$default$1;->(Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/common/service/logging/LogRepository;Ljava/lang/String;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl$special$$inlined$withLogTimeOfFirstEvent$default$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl$special$$inlined$withLogTimeOfFirstEvent$default$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl$special$$inlined$withLogTimeOfFirstEvent$default$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl$special$$inlined$withLogTimeOfFirstEvent$default$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl$special$$inlined$withLogTimeOfFirstEvent$default$1$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl$special$$inlined$withLogTimeOfFirstEvent$default$1$1;->(Lkotlin/jvm/internal/Ref$BooleanRef;Lkotlinx/datetime/Instant;Lcom/artemchep/keyguard/common/service/logging/LogRepository;Ljava/lang/String;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl$special$$inlined$withLogTimeOfFirstEvent$default$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl$special$$inlined$withLogTimeOfFirstEvent$default$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl$special$$inlined$withLogTimeOfFirstEvent$default$1$1;->invoke(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetFoldersImpl$special$$inlined$withLogTimeOfFirstEvent$default$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetMetasImpl; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetMetasImpl;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetMetasImpl;->(Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenMetaRepository;Lcom/artemchep/keyguard/common/usecase/WindowCoroutineScope;Lkotlin/coroutines/CoroutineContext;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetMetasImpl;->(Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenMetaRepository;Lcom/artemchep/keyguard/common/usecase/WindowCoroutineScope;Lkotlin/coroutines/CoroutineContext;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetMetasImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetMetasImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetMetasImpl;->invoke()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetMetasImpl$Companion; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetMetasImpl$Companion;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetMetasImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetMetasImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetMetasImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetMetasImpl$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetMetasImpl$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetMetasImpl$special$$inlined$map$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetMetasImpl$special$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetMetasImpl$special$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetMetasImpl$special$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetMetasImpl$special$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetMetasImpl$special$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetMetasImpl$special$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetMetasImpl$special$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetMetasImpl$special$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl;->(Lcom/artemchep/keyguard/common/service/logging/LogRepository;Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenOrganizationRepository;Lcom/artemchep/keyguard/common/usecase/WindowCoroutineScope;Lkotlin/coroutines/CoroutineContext;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl;->(Lcom/artemchep/keyguard/common/service/logging/LogRepository;Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenOrganizationRepository;Lcom/artemchep/keyguard/common/usecase/WindowCoroutineScope;Lkotlin/coroutines/CoroutineContext;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl;->invoke()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl$Companion; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl$Companion;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl$special$$inlined$instance$default$3; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl$special$$inlined$instance$default$3;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl$special$$inlined$map$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl$special$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl$special$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl$special$$inlined$map$1$2; +PLcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl$special$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl$special$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl$special$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl$special$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl$special$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl$special$$inlined$withLogTimeOfFirstEvent$default$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl$special$$inlined$withLogTimeOfFirstEvent$default$1;->(Lkotlinx/coroutines/flow/Flow;Lcom/artemchep/keyguard/common/service/logging/LogRepository;Ljava/lang/String;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl$special$$inlined$withLogTimeOfFirstEvent$default$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl$special$$inlined$withLogTimeOfFirstEvent$default$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl$special$$inlined$withLogTimeOfFirstEvent$default$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl$special$$inlined$withLogTimeOfFirstEvent$default$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl$special$$inlined$withLogTimeOfFirstEvent$default$1$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl$special$$inlined$withLogTimeOfFirstEvent$default$1$1;->(Lkotlin/jvm/internal/Ref$BooleanRef;Lkotlinx/datetime/Instant;Lcom/artemchep/keyguard/common/service/logging/LogRepository;Ljava/lang/String;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl$special$$inlined$withLogTimeOfFirstEvent$default$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl$special$$inlined$withLogTimeOfFirstEvent$default$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl$special$$inlined$withLogTimeOfFirstEvent$default$1$1;->invoke(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizationsImpl$special$$inlined$withLogTimeOfFirstEvent$default$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetProfilesImpl; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetProfilesImpl;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetProfilesImpl;->(Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenTokenRepository;Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenProfileRepository;Lcom/artemchep/keyguard/common/usecase/WindowCoroutineScope;Lkotlin/coroutines/CoroutineContext;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetProfilesImpl;->(Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenTokenRepository;Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenProfileRepository;Lcom/artemchep/keyguard/common/usecase/WindowCoroutineScope;Lkotlin/coroutines/CoroutineContext;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetProfilesImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetProfilesImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetProfilesImpl;->invoke()Lkotlinx/coroutines/flow/Flow; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetProfilesImpl$Companion; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetProfilesImpl$Companion;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetProfilesImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetProfilesImpl$sharedFlow$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetProfilesImpl$sharedFlow$1;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetProfilesImpl$sharedFlow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetProfilesImpl$sharedFlow$1;->invoke(Ljava/util/List;Ljava/util/List;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetProfilesImpl$sharedFlow$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetProfilesImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetProfilesImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetProfilesImpl$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetProfilesImpl$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/GetProfilesImpl$special$$inlined$instance$default$3; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/GetProfilesImpl$special$$inlined$instance$default$3;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/MoveCipherToFolderByIdImpl; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/MoveCipherToFolderByIdImpl;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/MoveCipherToFolderByIdImpl;->(Lcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyCipherById;Lcom/artemchep/keyguard/common/usecase/AddFolder;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/MoveCipherToFolderByIdImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/MoveCipherToFolderByIdImpl$Companion; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/MoveCipherToFolderByIdImpl$Companion;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/MoveCipherToFolderByIdImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/MoveCipherToFolderByIdImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/MoveCipherToFolderByIdImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/MoveCipherToFolderByIdImpl$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/MoveCipherToFolderByIdImpl$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl;->(Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenTokenRepository;Lcom/artemchep/keyguard/common/service/text/Base64Service;Lcom/artemchep/keyguard/common/service/connectivity/ConnectivityService;Lkotlinx/serialization/json/Json;Lio/ktor/client/HttpClient;Lcom/artemchep/keyguard/core/store/DatabaseManager;Lcom/artemchep/keyguard/common/usecase/QueueSyncById;Lcom/artemchep/keyguard/common/usecase/QueueSyncAll;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl;->(Lorg/kodein/di/DirectDI;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl;->access$getQueueSyncAll$p(Lcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl;)Lcom/artemchep/keyguard/common/usecase/QueueSyncAll; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl;->access$getTokenRepository$p(Lcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl;)Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenTokenRepository; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl;->launch(Lkotlinx/coroutines/CoroutineScope;)Lkotlinx/coroutines/Job; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl$launch$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl$launch$1;->(Lcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl$launch$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl$launch$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl$launch$1$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl$launch$1$1;->(Lkotlinx/coroutines/CoroutineScope;Lcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl$launch$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl$launch$1$1;->invoke(Lkotlinx/collections/immutable/PersistentMap;Ljava/util/List;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl$launch$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl$special$$inlined$instance$default$3; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl$special$$inlined$instance$default$3;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl$special$$inlined$instance$default$4; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl$special$$inlined$instance$default$4;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl$special$$inlined$instance$default$5; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl$special$$inlined$instance$default$5;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl$special$$inlined$instance$default$6; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl$special$$inlined$instance$default$6;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl$special$$inlined$instance$default$7; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl$special$$inlined$instance$default$7;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl$special$$inlined$instance$default$8; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/NotificationsImpl$special$$inlined$instance$default$8;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/RePromptCipherByIdImpl; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/RePromptCipherByIdImpl;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/RePromptCipherByIdImpl;->(Lcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyCipherById;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/RePromptCipherByIdImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/RePromptCipherByIdImpl$Companion; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/RePromptCipherByIdImpl$Companion;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/RePromptCipherByIdImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/RePromptCipherByIdImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/RePromptCipherByIdImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/RemoveCipherByIdImpl; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/RemoveCipherByIdImpl;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/RemoveCipherByIdImpl;->(Lcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyCipherById;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/RemoveCipherByIdImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/RemoveCipherByIdImpl$Companion; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/RemoveCipherByIdImpl$Companion;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/RemoveCipherByIdImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/RemoveCipherByIdImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/RemoveCipherByIdImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/RenameFolderByIdImpl; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/RenameFolderByIdImpl;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/RenameFolderByIdImpl;->(Lcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyFolderById;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/RenameFolderByIdImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/RenameFolderByIdImpl$Companion; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/RenameFolderByIdImpl$Companion;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/RenameFolderByIdImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/RenameFolderByIdImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/RenameFolderByIdImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/RestoreCipherByIdImpl; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/RestoreCipherByIdImpl;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/RestoreCipherByIdImpl;->(Lcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyCipherById;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/RestoreCipherByIdImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/RestoreCipherByIdImpl$Companion; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/RestoreCipherByIdImpl$Companion;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/RestoreCipherByIdImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/RestoreCipherByIdImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/RestoreCipherByIdImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/SyncAllImpl; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/SyncAllImpl;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/SyncAllImpl;->(Lcom/artemchep/keyguard/common/service/logging/LogRepository;Lcom/artemchep/keyguard/provider/bitwarden/repository/BitwardenTokenRepository;Lcom/artemchep/keyguard/provider/bitwarden/usecase/internal/SyncByToken;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/SyncAllImpl;->(Lorg/kodein/di/DirectDI;)V +PLcom/artemchep/keyguard/provider/bitwarden/usecase/SyncAllImpl;->access$getLogRepository$p(Lcom/artemchep/keyguard/provider/bitwarden/usecase/SyncAllImpl;)Lcom/artemchep/keyguard/common/service/logging/LogRepository; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/SyncAllImpl;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/SyncAllImpl;->invoke()Lkotlin/jvm/functions/Function1; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/SyncAllImpl$Companion; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/SyncAllImpl$Companion;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/SyncAllImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/SyncAllImpl$invoke$$inlined$flatMap$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/SyncAllImpl$invoke$$inlined$flatMap$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;Lcom/artemchep/keyguard/provider/bitwarden/usecase/SyncAllImpl;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/SyncAllImpl$invoke$$inlined$flatMap$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/SyncAllImpl$invoke$$inlined$flatMap$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/SyncAllImpl$invoke$$inlined$flatMap$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/SyncAllImpl$invoke$$inlined$flatMap$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/SyncAllImpl$invoke$lambda$3$$inlined$map$1; +PLcom/artemchep/keyguard/provider/bitwarden/usecase/SyncAllImpl$invoke$lambda$3$$inlined$map$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/coroutines/Continuation;)V +PLcom/artemchep/keyguard/provider/bitwarden/usecase/SyncAllImpl$invoke$lambda$3$$inlined$map$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +PLcom/artemchep/keyguard/provider/bitwarden/usecase/SyncAllImpl$invoke$lambda$3$$inlined$map$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +PLcom/artemchep/keyguard/provider/bitwarden/usecase/SyncAllImpl$invoke$lambda$3$$inlined$map$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/SyncAllImpl$invoke$lambda$3$$inlined$map$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/SyncAllImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/SyncAllImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/SyncAllImpl$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/SyncAllImpl$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/SyncAllImpl$special$$inlined$instance$default$3; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/SyncAllImpl$special$$inlined$instance$default$3;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/TrashCipherByIdImpl; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/TrashCipherByIdImpl;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/TrashCipherByIdImpl;->(Lcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyCipherById;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/TrashCipherByIdImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/TrashCipherByIdImpl$Companion; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/TrashCipherByIdImpl$Companion;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/TrashCipherByIdImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/TrashCipherByIdImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/TrashCipherByIdImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/internal/AddAccount; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/internal/RequestEmailTfa; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/internal/SyncByToken; +Lcom/artemchep/keyguard/provider/bitwarden/usecase/internal/SyncByTokenImpl; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/internal/SyncByTokenImpl;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/internal/SyncByTokenImpl;->(Lcom/artemchep/keyguard/common/service/logging/LogRepository;Lcom/artemchep/keyguard/common/service/crypto/CipherEncryptor;Lcom/artemchep/keyguard/common/service/crypto/CryptoGenerator;Lcom/artemchep/keyguard/common/service/text/Base64Service;Lkotlinx/serialization/json/Json;Lio/ktor/client/HttpClient;Lcom/artemchep/keyguard/core/store/DatabaseManager;Lcom/artemchep/keyguard/core/store/DatabaseSyncer;Lcom/artemchep/keyguard/common/usecase/Watchdog;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/internal/SyncByTokenImpl;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/internal/SyncByTokenImpl$Companion; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/internal/SyncByTokenImpl$Companion;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/internal/SyncByTokenImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/internal/SyncByTokenImpl$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/internal/SyncByTokenImpl$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/internal/SyncByTokenImpl$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/internal/SyncByTokenImpl$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/internal/SyncByTokenImpl$special$$inlined$instance$default$3; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/internal/SyncByTokenImpl$special$$inlined$instance$default$3;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/internal/SyncByTokenImpl$special$$inlined$instance$default$4; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/internal/SyncByTokenImpl$special$$inlined$instance$default$4;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/internal/SyncByTokenImpl$special$$inlined$instance$default$5; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/internal/SyncByTokenImpl$special$$inlined$instance$default$5;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/internal/SyncByTokenImpl$special$$inlined$instance$default$6; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/internal/SyncByTokenImpl$special$$inlined$instance$default$6;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/internal/SyncByTokenImpl$special$$inlined$instance$default$7; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/internal/SyncByTokenImpl$special$$inlined$instance$default$7;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/internal/SyncByTokenImpl$special$$inlined$instance$default$8; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/internal/SyncByTokenImpl$special$$inlined$instance$default$8;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/internal/SyncByTokenImpl$special$$inlined$instance$default$9; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/internal/SyncByTokenImpl$special$$inlined$instance$default$9;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyCipherById; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyCipherById;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyCipherById;->(Lcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyDatabase;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyCipherById;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyCipherById$Companion; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyCipherById$Companion;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyCipherById$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyCipherById$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyCipherById$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyDatabase; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyDatabase;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyDatabase;->(Lcom/artemchep/keyguard/core/store/DatabaseManager;Lcom/artemchep/keyguard/common/usecase/GetCanWrite;Lcom/artemchep/keyguard/common/usecase/GetWriteAccess;Lcom/artemchep/keyguard/common/usecase/QueueSyncById;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyDatabase;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyDatabase$Companion; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyDatabase$Companion;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyDatabase$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyDatabase$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyDatabase$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyDatabase$special$$inlined$instance$default$2; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyDatabase$special$$inlined$instance$default$2;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyDatabase$special$$inlined$instance$default$3; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyDatabase$special$$inlined$instance$default$3;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyDatabase$special$$inlined$instance$default$4; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyDatabase$special$$inlined$instance$default$4;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyFolderById; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyFolderById;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyFolderById;->(Lcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyDatabase;)V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyFolderById;->(Lorg/kodein/di/DirectDI;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyFolderById$Companion; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyFolderById$Companion;->()V +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyFolderById$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyFolderById$special$$inlined$instance$default$1; +HSPLcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyFolderById$special$$inlined$instance$default$1;->()V +Lcom/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyProfileById; +Lcom/artemchep/keyguard/res/Res$fonts$RobotoMono; +HSPLcom/artemchep/keyguard/res/Res$fonts$RobotoMono;->()V +HSPLcom/artemchep/keyguard/res/Res$fonts$RobotoMono;->()V +HSPLcom/artemchep/keyguard/res/Res$fonts$RobotoMono;->getRobotoMono()Ldev/icerock/moko/resources/FontResource; +Lcom/artemchep/keyguard/res/Res$strings; +HSPLcom/artemchep/keyguard/res/Res$strings;->()V +HSPLcom/artemchep/keyguard/res/Res$strings;->()V +HSPLcom/artemchep/keyguard/res/Res$strings;->getAccount()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getAccount_main_add_account_title()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getAttachments()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getCipher_type_card()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getCipher_type_identity()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getCipher_type_login()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getCipher_type_note()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getCollection()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getCollection_none()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getCustom()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getDownloads()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getError_must_have_at_least_n_symbols()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getError_must_not_be_blank()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getFilter_header_title()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getFolder()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getFolder_none()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getHome_generator_label()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getHome_send_label()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getHome_settings_label()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getHome_vault_label()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getHome_watchtower_label()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getMisc()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getNav_animation_crossfade()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getNav_animation_disabled()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getNav_animation_dynamic()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getOne_time_password()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getOptions()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getOrganization()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getOrganization_none()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getPasskeys()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getPassword()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getPref_item_erase_data_text()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getPref_item_erase_data_title()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getPull_to_search()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getSetup_button_create_vault()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getSetup_button_send_crash_reports()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getSetup_field_app_password_label()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getSetup_header_text()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getSort_header_title()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getSortby_modification_date_normal_mode()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getSortby_modification_date_reverse_mode()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getSortby_modification_date_title()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getSortby_password_modification_date_normal_mode()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getSortby_password_modification_date_reverse_mode()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getSortby_password_modification_date_title()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getSortby_password_normal_mode()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getSortby_password_reverse_mode()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getSortby_password_strength_normal_mode()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getSortby_password_strength_reverse_mode()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getSortby_password_strength_title()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getSortby_password_title()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getSortby_title_normal_mode()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getSortby_title_reverse_mode()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getSortby_title_title()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getTrash()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getType()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getUnlock_button_unlock()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getUnlock_header_text()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getVault_action_always_show_keyboard_title()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getVault_action_lock_vault_title()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getVault_action_sync_vault_title()Ldev/icerock/moko/resources/StringResource; +HSPLcom/artemchep/keyguard/res/Res$strings;->getVault_main_search_placeholder()Ldev/icerock/moko/resources/StringResource; +Lcom/artemchep/keyguard/room/AppDatabase; +Lcom/artemchep/keyguard/ui/Afh; +HSPLcom/artemchep/keyguard/ui/Afh;->(Lkotlinx/collections/immutable/ImmutableList;Lkotlinx/datetime/Instant;)V +HSPLcom/artemchep/keyguard/ui/Afh;->equals(Ljava/lang/Object;)Z +HSPLcom/artemchep/keyguard/ui/Afh;->getOptions()Lkotlinx/collections/immutable/ImmutableList; +Lcom/artemchep/keyguard/ui/AnimatedFabVisibilityKt; +HSPLcom/artemchep/keyguard/ui/AnimatedFabVisibilityKt;->rememberFabExpanded(Landroidx/compose/material3/TopAppBarScrollBehavior;Landroidx/compose/runtime/Composer;I)Landroidx/compose/runtime/State; +Lcom/artemchep/keyguard/ui/AnimatedFabVisibilityKt$rememberFabExpanded$1$1; +HSPLcom/artemchep/keyguard/ui/AnimatedFabVisibilityKt$rememberFabExpanded$1$1;->(Landroidx/compose/material3/TopAppBarScrollBehavior;)V +Lcom/artemchep/keyguard/ui/AutofillWindowKt; +HSPLcom/artemchep/keyguard/ui/AutofillWindowKt;->AutofillButton$lambda$1(Landroidx/compose/runtime/MutableState;)Z +HSPLcom/artemchep/keyguard/ui/AutofillWindowKt;->AutofillButton(Ljava/lang/String;ZZLkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;II)V +Lcom/artemchep/keyguard/ui/AutofillWindowKt$AutofillButton$1$1; +HSPLcom/artemchep/keyguard/ui/AutofillWindowKt$AutofillButton$1$1;->(Landroidx/compose/runtime/MutableState;)V +Lcom/artemchep/keyguard/ui/AutofillWindowKt$AutofillButton$2; +HSPLcom/artemchep/keyguard/ui/AutofillWindowKt$AutofillButton$2;->(Ljava/lang/String;ZZLkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function0;)V +Lcom/artemchep/keyguard/ui/AutofillWindowKt$AutofillButton$3; +HSPLcom/artemchep/keyguard/ui/AutofillWindowKt$AutofillButton$3;->(Ljava/lang/String;ZZLkotlin/jvm/functions/Function1;II)V +Lcom/artemchep/keyguard/ui/AutofillWindowKt$AutofillButton$onDismissRequest$1$1; +HSPLcom/artemchep/keyguard/ui/AutofillWindowKt$AutofillButton$onDismissRequest$1$1;->(Landroidx/compose/runtime/MutableState;)V +Lcom/artemchep/keyguard/ui/CollectedEffectKt; +HSPLcom/artemchep/keyguard/ui/CollectedEffectKt;->CollectedEffect(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V +Lcom/artemchep/keyguard/ui/CollectedEffectKt$CollectedEffect$1; +HSPLcom/artemchep/keyguard/ui/CollectedEffectKt$CollectedEffect$1;->(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/ui/CollectedEffectKt$CollectedEffect$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/ui/CollectedEffectKt$CollectedEffect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/CollectedEffectKt$CollectedEffect$1$1; +HSPLcom/artemchep/keyguard/ui/CollectedEffectKt$CollectedEffect$1$1;->(Lkotlin/jvm/functions/Function2;)V +HSPLcom/artemchep/keyguard/ui/CollectedEffectKt$CollectedEffect$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/ComposableKt; +HSPLcom/artemchep/keyguard/ui/ComposableKt;->Compose(Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V +Lcom/artemchep/keyguard/ui/ComposableSingletons$AutofillWindowKt; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$AutofillWindowKt;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$AutofillWindowKt;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$AutofillWindowKt;->getLambda-1$common_playStoreRelease()Lkotlin/jvm/functions/Function2; +Lcom/artemchep/keyguard/ui/ComposableSingletons$AutofillWindowKt$lambda-1$1; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$AutofillWindowKt$lambda-1$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$AutofillWindowKt$lambda-1$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$AutofillWindowKt$lambda-1$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$AutofillWindowKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/ComposableSingletons$AutofillWindowKt$lambda-2$1; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$AutofillWindowKt$lambda-2$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$AutofillWindowKt$lambda-2$1;->()V +Lcom/artemchep/keyguard/ui/ComposableSingletons$AutofillWindowKt$lambda-3$1; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$AutofillWindowKt$lambda-3$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$AutofillWindowKt$lambda-3$1;->()V +Lcom/artemchep/keyguard/ui/ComposableSingletons$AutofillWindowKt$lambda-4$1; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$AutofillWindowKt$lambda-4$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$AutofillWindowKt$lambda-4$1;->()V +Lcom/artemchep/keyguard/ui/ComposableSingletons$AutofillWindowKt$lambda-5$1; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$AutofillWindowKt$lambda-5$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$AutofillWindowKt$lambda-5$1;->()V +Lcom/artemchep/keyguard/ui/ComposableSingletons$AutofillWindowKt$lambda-6$1; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$AutofillWindowKt$lambda-6$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$AutofillWindowKt$lambda-6$1;->()V +Lcom/artemchep/keyguard/ui/ComposableSingletons$OptionsWindowKt; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$OptionsWindowKt;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$OptionsWindowKt;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$OptionsWindowKt;->getLambda-1$common_playStoreRelease()Lkotlin/jvm/functions/Function2; +Lcom/artemchep/keyguard/ui/ComposableSingletons$OptionsWindowKt$lambda-1$1; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$OptionsWindowKt$lambda-1$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$OptionsWindowKt$lambda-1$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$OptionsWindowKt$lambda-1$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$OptionsWindowKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt;->getLambda-12$common_playStoreRelease()Lkotlin/jvm/functions/Function3; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt;->getLambda-13$common_playStoreRelease()Lkotlin/jvm/functions/Function3; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt;->getLambda-3$common_playStoreRelease()Lkotlin/jvm/functions/Function2; +Lcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-1$1; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-1$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-1$1;->()V +Lcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-10$1; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-10$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-10$1;->()V +Lcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-11$1; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-11$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-11$1;->()V +Lcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-12$1; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-12$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-12$1;->()V +Lcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-13$1; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-13$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-13$1;->()V +Lcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-2$1; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-2$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-2$1;->()V +Lcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-3$1; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-3$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-3$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-3$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-3$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-4$1; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-4$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-4$1;->()V +Lcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-5$1; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-5$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-5$1;->()V +Lcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-6$1; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-6$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-6$1;->()V +Lcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-7$1; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-7$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-7$1;->()V +Lcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-8$1; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-8$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-8$1;->()V +Lcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-9$1; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-9$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$ScaffoldKt$lambda-9$1;->()V +Lcom/artemchep/keyguard/ui/ComposableSingletons$TextItemKt; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$TextItemKt;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$TextItemKt;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$TextItemKt;->getLambda-3$common_playStoreRelease()Lkotlin/jvm/functions/Function3; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$TextItemKt;->getLambda-4$common_playStoreRelease()Lkotlin/jvm/functions/Function3; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$TextItemKt;->getLambda-5$common_playStoreRelease()Lkotlin/jvm/functions/Function2; +Lcom/artemchep/keyguard/ui/ComposableSingletons$TextItemKt$lambda-1$1; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$TextItemKt$lambda-1$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$TextItemKt$lambda-1$1;->()V +Lcom/artemchep/keyguard/ui/ComposableSingletons$TextItemKt$lambda-2$1; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$TextItemKt$lambda-2$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$TextItemKt$lambda-2$1;->()V +Lcom/artemchep/keyguard/ui/ComposableSingletons$TextItemKt$lambda-3$1; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$TextItemKt$lambda-3$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$TextItemKt$lambda-3$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$TextItemKt$lambda-3$1;->invoke(Landroidx/compose/foundation/layout/RowScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$TextItemKt$lambda-3$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/ComposableSingletons$TextItemKt$lambda-4$1; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$TextItemKt$lambda-4$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$TextItemKt$lambda-4$1;->()V +Lcom/artemchep/keyguard/ui/ComposableSingletons$TextItemKt$lambda-5$1; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$TextItemKt$lambda-5$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$TextItemKt$lambda-5$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$TextItemKt$lambda-5$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$TextItemKt$lambda-5$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/ComposableSingletons$TextItemKt$lambda-6$1; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$TextItemKt$lambda-6$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$TextItemKt$lambda-6$1;->()V +Lcom/artemchep/keyguard/ui/ComposableSingletons$TextItemKt$lambda-7$1; +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$TextItemKt$lambda-7$1;->()V +HSPLcom/artemchep/keyguard/ui/ComposableSingletons$TextItemKt$lambda-7$1;->()V +Lcom/artemchep/keyguard/ui/ContextItem; +Lcom/artemchep/keyguard/ui/ContextItem$Section; +HSPLcom/artemchep/keyguard/ui/ContextItem$Section;->()V +HSPLcom/artemchep/keyguard/ui/ContextItem$Section;->(Ljava/lang/String;)V +HSPLcom/artemchep/keyguard/ui/ContextItem$Section;->getTitle()Ljava/lang/String; +Lcom/artemchep/keyguard/ui/ContextItemBuilder; +HSPLcom/artemchep/keyguard/ui/ContextItemBuilder;->()V +HSPLcom/artemchep/keyguard/ui/ContextItemBuilder;->([Ljava/util/List;)V +HSPLcom/artemchep/keyguard/ui/ContextItemBuilder;->access$getItems$p(Lcom/artemchep/keyguard/ui/ContextItemBuilder;)Ljava/util/List; +HSPLcom/artemchep/keyguard/ui/ContextItemBuilder;->build()Lkotlinx/collections/immutable/PersistentList; +HSPLcom/artemchep/keyguard/ui/ContextItemBuilder;->plusAssign(Lcom/artemchep/keyguard/ui/ContextItem;)V +HSPLcom/artemchep/keyguard/ui/ContextItemBuilder;->section$default(Lcom/artemchep/keyguard/ui/ContextItemBuilder;Ljava/lang/String;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V +HSPLcom/artemchep/keyguard/ui/ContextItemBuilder;->section(Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V +Lcom/artemchep/keyguard/ui/ContextItemBuilder$build$1; +HSPLcom/artemchep/keyguard/ui/ContextItemBuilder$build$1;->(Lcom/artemchep/keyguard/ui/ContextItemBuilder;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/ui/ContextItemBuilder$build$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/ui/ContextItemBuilder$build$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/DropdownKt; +HSPLcom/artemchep/keyguard/ui/DropdownKt;->()V +HSPLcom/artemchep/keyguard/ui/DropdownKt;->getDropdownMinWidth()F +Lcom/artemchep/keyguard/ui/ExpandedIfNotEmptyKt; +HSPLcom/artemchep/keyguard/ui/ExpandedIfNotEmptyKt;->ExpandedIfNotEmpty(Ljava/lang/Object;Landroidx/compose/ui/Modifier;Landroidx/compose/animation/EnterTransition;Landroidx/compose/animation/ExitTransition;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/ui/ExpandedIfNotEmptyKt;->ExpandedIfNotEmptyForRow(Ljava/lang/Object;Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V +Lcom/artemchep/keyguard/ui/ExpandedIfNotEmptyKt$ExpandedIfNotEmpty$1; +HSPLcom/artemchep/keyguard/ui/ExpandedIfNotEmptyKt$ExpandedIfNotEmpty$1;->()V +HSPLcom/artemchep/keyguard/ui/ExpandedIfNotEmptyKt$ExpandedIfNotEmpty$1;->()V +HSPLcom/artemchep/keyguard/ui/ExpandedIfNotEmptyKt$ExpandedIfNotEmpty$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/ui/ExpandedIfNotEmptyKt$ExpandedIfNotEmpty$1;->invoke-mzRDjE0(J)J +Lcom/artemchep/keyguard/ui/ExpandedIfNotEmptyKt$ExpandedIfNotEmpty$2; +HSPLcom/artemchep/keyguard/ui/ExpandedIfNotEmptyKt$ExpandedIfNotEmpty$2;->()V +HSPLcom/artemchep/keyguard/ui/ExpandedIfNotEmptyKt$ExpandedIfNotEmpty$2;->()V +HSPLcom/artemchep/keyguard/ui/ExpandedIfNotEmptyKt$ExpandedIfNotEmpty$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/ui/ExpandedIfNotEmptyKt$ExpandedIfNotEmpty$2;->invoke-mzRDjE0(J)J +Lcom/artemchep/keyguard/ui/ExpandedIfNotEmptyKt$ExpandedIfNotEmpty$3; +HSPLcom/artemchep/keyguard/ui/ExpandedIfNotEmptyKt$ExpandedIfNotEmpty$3;->(Ljava/lang/Object;Lkotlin/jvm/functions/Function3;I)V +HSPLcom/artemchep/keyguard/ui/ExpandedIfNotEmptyKt$ExpandedIfNotEmpty$3;->invoke$lambda$1(Landroidx/compose/runtime/MutableState;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/ui/ExpandedIfNotEmptyKt$ExpandedIfNotEmpty$3;->invoke$lambda$2(Landroidx/compose/runtime/MutableState;Ljava/lang/Object;)V +HSPLcom/artemchep/keyguard/ui/ExpandedIfNotEmptyKt$ExpandedIfNotEmpty$3;->invoke(Landroidx/compose/animation/AnimatedVisibilityScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/ExpandedIfNotEmptyKt$ExpandedIfNotEmpty$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/ExpandedIfNotEmptyKt$ExpandedIfNotEmptyForRow$1; +HSPLcom/artemchep/keyguard/ui/ExpandedIfNotEmptyKt$ExpandedIfNotEmptyForRow$1;->()V +HSPLcom/artemchep/keyguard/ui/ExpandedIfNotEmptyKt$ExpandedIfNotEmptyForRow$1;->()V +HSPLcom/artemchep/keyguard/ui/ExpandedIfNotEmptyKt$ExpandedIfNotEmptyForRow$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/ui/ExpandedIfNotEmptyKt$ExpandedIfNotEmptyForRow$1;->invoke-mzRDjE0(J)J +Lcom/artemchep/keyguard/ui/ExpandedIfNotEmptyKt$ExpandedIfNotEmptyForRow$2; +HSPLcom/artemchep/keyguard/ui/ExpandedIfNotEmptyKt$ExpandedIfNotEmptyForRow$2;->()V +HSPLcom/artemchep/keyguard/ui/ExpandedIfNotEmptyKt$ExpandedIfNotEmptyForRow$2;->()V +HSPLcom/artemchep/keyguard/ui/ExpandedIfNotEmptyKt$ExpandedIfNotEmptyForRow$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/ui/ExpandedIfNotEmptyKt$ExpandedIfNotEmptyForRow$2;->invoke-mzRDjE0(J)J +Lcom/artemchep/keyguard/ui/FabScope; +Lcom/artemchep/keyguard/ui/FabState; +Lcom/artemchep/keyguard/ui/FlatItemAction; +HSPLcom/artemchep/keyguard/ui/FlatItemAction;->()V +HSPLcom/artemchep/keyguard/ui/FlatItemAction;->(Ljava/lang/String;Landroidx/compose/ui/graphics/vector/ImageVector;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Ljava/lang/String;Ljava/lang/String;Lcom/artemchep/keyguard/ui/FlatItemAction$Type;Lkotlin/jvm/functions/Function0;)V +HSPLcom/artemchep/keyguard/ui/FlatItemAction;->(Ljava/lang/String;Landroidx/compose/ui/graphics/vector/ImageVector;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Ljava/lang/String;Ljava/lang/String;Lcom/artemchep/keyguard/ui/FlatItemAction$Type;Lkotlin/jvm/functions/Function0;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/ui/FlatItemAction$Companion; +HSPLcom/artemchep/keyguard/ui/FlatItemAction$Companion;->()V +HSPLcom/artemchep/keyguard/ui/FlatItemAction$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/ui/FlatItemAction$Type; +Lcom/artemchep/keyguard/ui/InputPhase; +HSPLcom/artemchep/keyguard/ui/InputPhase;->$values()[Lcom/artemchep/keyguard/ui/InputPhase; +HSPLcom/artemchep/keyguard/ui/InputPhase;->()V +HSPLcom/artemchep/keyguard/ui/InputPhase;->(Ljava/lang/String;I)V +HSPLcom/artemchep/keyguard/ui/InputPhase;->values()[Lcom/artemchep/keyguard/ui/InputPhase; +Lcom/artemchep/keyguard/ui/LeMOdelBottomSheetKt; +HSPLcom/artemchep/keyguard/ui/LeMOdelBottomSheetKt;->LeMOdelBottomSheet(ZLkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;I)V +Lcom/artemchep/keyguard/ui/LeMOdelBottomSheetKt$LeMOdelBottomSheet$3; +HSPLcom/artemchep/keyguard/ui/LeMOdelBottomSheetKt$LeMOdelBottomSheet$3;->(ZLkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function3;I)V +Lcom/artemchep/keyguard/ui/MutableFabScope; +HSPLcom/artemchep/keyguard/ui/MutableFabScope;->(Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;)V +HSPLcom/artemchep/keyguard/ui/MutableFabScope;->getState()Landroidx/compose/runtime/State; +Lcom/artemchep/keyguard/ui/MutableOverlayScope; +HSPLcom/artemchep/keyguard/ui/MutableOverlayScope;->(Landroidx/compose/runtime/State;)V +HSPLcom/artemchep/keyguard/ui/MutableOverlayScope;->getContentPadding()Landroidx/compose/runtime/State; +Lcom/artemchep/keyguard/ui/OptionsWindowKt; +HSPLcom/artemchep/keyguard/ui/OptionsWindowKt;->OptionsButton$lambda$4(Landroidx/compose/runtime/MutableState;)Z +HSPLcom/artemchep/keyguard/ui/OptionsWindowKt;->OptionsButton(Ljava/util/List;Landroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/ui/OptionsWindowKt;->OptionsButton(ZLkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V +Lcom/artemchep/keyguard/ui/OptionsWindowKt$OptionsButton$1; +PLcom/artemchep/keyguard/ui/OptionsWindowKt$OptionsButton$1;->(Ljava/util/List;)V +Lcom/artemchep/keyguard/ui/OptionsWindowKt$OptionsButton$3$1$1; +HSPLcom/artemchep/keyguard/ui/OptionsWindowKt$OptionsButton$3$1$1;->(Landroidx/compose/runtime/MutableState;)V +Lcom/artemchep/keyguard/ui/OptionsWindowKt$OptionsButton$3$2; +HSPLcom/artemchep/keyguard/ui/OptionsWindowKt$OptionsButton$3$2;->(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function3;)V +Lcom/artemchep/keyguard/ui/OptionsWindowKt$OptionsButton$3$onDismissRequest$1$1; +HSPLcom/artemchep/keyguard/ui/OptionsWindowKt$OptionsButton$3$onDismissRequest$1$1;->(Landroidx/compose/runtime/MutableState;)V +Lcom/artemchep/keyguard/ui/OptionsWindowKt$OptionsButton$4; +HSPLcom/artemchep/keyguard/ui/OptionsWindowKt$OptionsButton$4;->(ZLkotlin/jvm/functions/Function3;II)V +Lcom/artemchep/keyguard/ui/OtherScaffoldKt; +HSPLcom/artemchep/keyguard/ui/OtherScaffoldKt;->OtherScaffold(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V +Lcom/artemchep/keyguard/ui/OverlayScope; +Lcom/artemchep/keyguard/ui/PaddingKt; +HSPLcom/artemchep/keyguard/ui/PaddingKt;->minus(Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/layout/PaddingValues;)Landroidx/compose/foundation/layout/PaddingValues; +HSPLcom/artemchep/keyguard/ui/PaddingKt;->plus(Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/layout/PaddingValues;)Landroidx/compose/foundation/layout/PaddingValues; +Lcom/artemchep/keyguard/ui/PaddingKt$minus$1; +HSPLcom/artemchep/keyguard/ui/PaddingKt$minus$1;->(Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/layout/PaddingValues;)V +Lcom/artemchep/keyguard/ui/PaddingKt$plus$1; +HSPLcom/artemchep/keyguard/ui/PaddingKt$plus$1;->(Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/layout/PaddingValues;)V +HSPLcom/artemchep/keyguard/ui/PaddingKt$plus$1;->calculateBottomPadding-D9Ej5fM()F +HSPLcom/artemchep/keyguard/ui/PaddingKt$plus$1;->calculateLeftPadding-u2uoSUM(Landroidx/compose/ui/unit/LayoutDirection;)F +HSPLcom/artemchep/keyguard/ui/PaddingKt$plus$1;->calculateRightPadding-u2uoSUM(Landroidx/compose/ui/unit/LayoutDirection;)F +HSPLcom/artemchep/keyguard/ui/PaddingKt$plus$1;->calculateTopPadding-D9Ej5fM()F +Lcom/artemchep/keyguard/ui/PasswordFilterItemKt; +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt;->()V +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt;->Avatar-3IgeMak(Landroidx/compose/ui/Modifier;JLkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt;->FlatItem-ws5HyW4(Landroidx/compose/ui/Modifier;FJLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Ljava/util/List;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/layout/PaddingValues;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;ZLandroidx/compose/runtime/Composer;III)V +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt;->FlatItemLayout-uncuNKo(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/layout/PaddingValues;FJLkotlin/jvm/functions/Function3;Ljava/util/List;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;ZLandroidx/compose/runtime/Composer;III)V +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt;->FlatItemLayout_uncuNKo$lambda$11$lambda$7(Landroidx/compose/runtime/State;)F +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt;->FlatItemLayout_uncuNKo$lambda$11$lambda$9(Landroidx/compose/runtime/State;)F +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt;->FlatItemTextContent-uDo3WH8(Landroidx/compose/foundation/layout/ColumnScope;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;JZLandroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt;->getDefaultEmphasisAlpha()F +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt;->getDisabledEmphasisAlpha()F +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt;->getHighEmphasisAlpha()F +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt;->getMediumEmphasisAlpha()F +Lcom/artemchep/keyguard/ui/PasswordFilterItemKt$Avatar$3; +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt$Avatar$3;->(Landroidx/compose/ui/Modifier;JLkotlin/jvm/functions/Function3;II)V +Lcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItem$1; +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItem$1;->(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;)V +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItem$1;->invoke(Landroidx/compose/foundation/layout/ColumnScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItem$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItemLayout$1$1; +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItemLayout$1$1;->(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;ZLandroidx/compose/foundation/layout/PaddingValues;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;)V +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItemLayout$1$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItemLayout$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItemLayout$1$1$2$1; +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItemLayout$1$1$2$1;->(Landroidx/compose/runtime/State;)V +Lcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItemLayout$1$1$3$1; +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItemLayout$1$1$3$1;->(Landroidx/compose/runtime/State;)V +Lcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItemLayout$1$1$4$1$2; +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItemLayout$1$1$4$1$2;->(Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/layout/RowScope;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;)V +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItemLayout$1$1$4$1$2;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItemLayout$1$1$4$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItemLayout$1$1$4$1$2$1; +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItemLayout$1$1$4$1$2$1;->(Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/layout/RowScope;)V +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItemLayout$1$1$4$1$2$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItemLayout$1$1$4$1$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItemLayout$2; +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItemLayout$2;->(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/layout/PaddingValues;FJLkotlin/jvm/functions/Function3;Ljava/util/List;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function0;ZIII)V +Lcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItemTextContent$1; +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItemTextContent$1;->(Lkotlin/jvm/functions/Function2;)V +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItemTextContent$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItemTextContent$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItemTextContent$2; +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItemTextContent$2;->(Lkotlin/jvm/functions/Function2;)V +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItemTextContent$2;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItemTextContent$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItemTextContent$3; +HSPLcom/artemchep/keyguard/ui/PasswordFilterItemKt$FlatItemTextContent$3;->(Landroidx/compose/foundation/layout/ColumnScope;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;JZII)V +Lcom/artemchep/keyguard/ui/RightClickableKt; +HSPLcom/artemchep/keyguard/ui/RightClickableKt;->rightClickable(Landroidx/compose/ui/Modifier;Lkotlin/jvm/functions/Function0;)Landroidx/compose/ui/Modifier; +Lcom/artemchep/keyguard/ui/ScaffoldKt; +HSPLcom/artemchep/keyguard/ui/ScaffoldKt;->()V +HSPLcom/artemchep/keyguard/ui/ScaffoldKt;->DefaultFab-DTcfvLk(Lcom/artemchep/keyguard/ui/FabScope;JJLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/ui/ScaffoldKt;->DefaultProgressBar(Lcom/artemchep/keyguard/ui/OverlayScope;Landroidx/compose/ui/Modifier;ZLandroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/ui/ScaffoldKt;->DefaultSelection(Lcom/artemchep/keyguard/ui/Selection;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/ScaffoldKt;->ScaffoldLazyColumn-k0_msSU(Landroidx/compose/ui/Modifier;Landroidx/compose/material3/TopAppBarScrollBehavior;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/State;Lkotlin/jvm/functions/Function3;ILandroidx/compose/material/pullrefresh/PullRefreshState;JJLandroidx/compose/foundation/layout/WindowInsets;Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/foundation/lazy/LazyListState;Lkotlin/jvm/functions/Function1;Landroidx/compose/runtime/Composer;III)V +HSPLcom/artemchep/keyguard/ui/ScaffoldKt;->SmallFab(Lcom/artemchep/keyguard/ui/FabScope;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/ScaffoldKt;->access$calculatePaddingWithFab(Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/runtime/State;)Landroidx/compose/foundation/layout/PaddingValues; +HSPLcom/artemchep/keyguard/ui/ScaffoldKt;->access$getScreenPaddingTop$p()F +HSPLcom/artemchep/keyguard/ui/ScaffoldKt;->calculatePaddingWithFab(Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/runtime/State;)Landroidx/compose/foundation/layout/PaddingValues; +HSPLcom/artemchep/keyguard/ui/ScaffoldKt;->getScaffoldContentWindowInsets(Landroidx/compose/runtime/Composer;I)Landroidx/compose/foundation/layout/WindowInsets; +HSPLcom/artemchep/keyguard/ui/ScaffoldKt;->getScreenMaxWidth()F +Lcom/artemchep/keyguard/ui/ScaffoldKt$DefaultFab$1; +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$DefaultFab$1;->(JJLcom/artemchep/keyguard/ui/FabScope;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/State;)V +Lcom/artemchep/keyguard/ui/ScaffoldKt$DefaultFab$2; +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$DefaultFab$2;->(Lcom/artemchep/keyguard/ui/FabScope;JJLkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;II)V +Lcom/artemchep/keyguard/ui/ScaffoldKt$DefaultProgressBar$1; +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$DefaultProgressBar$1;->()V +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$DefaultProgressBar$1;->()V +Lcom/artemchep/keyguard/ui/ScaffoldKt$DefaultProgressBar$2; +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$DefaultProgressBar$2;->()V +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$DefaultProgressBar$2;->()V +Lcom/artemchep/keyguard/ui/ScaffoldKt$DefaultProgressBar$3; +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$DefaultProgressBar$3;->(Lcom/artemchep/keyguard/ui/OverlayScope;Landroidx/compose/ui/Modifier;ZII)V +Lcom/artemchep/keyguard/ui/ScaffoldKt$DefaultProgressBar$finalPadding$1$1; +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$DefaultProgressBar$finalPadding$1$1;->(Landroidx/compose/runtime/State;)V +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$DefaultProgressBar$finalPadding$1$1;->invoke()Landroidx/compose/foundation/layout/PaddingValues; +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$DefaultProgressBar$finalPadding$1$1;->invoke()Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/ScaffoldKt$ScaffoldLazyColumn$1$1; +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$ScaffoldLazyColumn$1$1;->(Landroidx/compose/foundation/layout/MutableWindowInsets;Landroidx/compose/foundation/layout/WindowInsets;)V +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$ScaffoldLazyColumn$1$1;->invoke(Landroidx/compose/foundation/layout/WindowInsets;)V +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$ScaffoldLazyColumn$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/ScaffoldKt$ScaffoldLazyColumn$2; +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$ScaffoldLazyColumn$2;->(Landroidx/compose/material3/TopAppBarScrollBehavior;Landroidx/compose/runtime/State;Lkotlin/jvm/functions/Function3;)V +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$ScaffoldLazyColumn$2;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$ScaffoldLazyColumn$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/ScaffoldKt$ScaffoldLazyColumn$3; +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$ScaffoldLazyColumn$3;->(Landroidx/compose/runtime/State;Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/foundation/lazy/LazyListState;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/State;Landroidx/compose/foundation/layout/Arrangement$Vertical;Lkotlin/jvm/functions/Function1;)V +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$ScaffoldLazyColumn$3;->invoke(Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$ScaffoldLazyColumn$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/ScaffoldKt$ScaffoldLazyColumn$3$1; +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$ScaffoldLazyColumn$3$1;->(Landroidx/compose/runtime/State;Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/foundation/layout/Arrangement$Vertical;Lkotlin/jvm/functions/Function1;)V +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$ScaffoldLazyColumn$3$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$ScaffoldLazyColumn$3$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/ScaffoldKt$ScaffoldLazyColumn$3$1$1$1; +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$ScaffoldLazyColumn$3$1$1$1;->(Landroidx/compose/runtime/State;)V +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$ScaffoldLazyColumn$3$1$1$1;->invoke(Landroidx/compose/ui/graphics/GraphicsLayerScope;)V +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$ScaffoldLazyColumn$3$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/ScaffoldKt$ScaffoldLazyColumn$3$1$2$1; +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$ScaffoldLazyColumn$3$1$2$1;->(Lkotlin/jvm/functions/Function1;)V +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$ScaffoldLazyColumn$3$1$2$1;->invoke(Landroidx/compose/foundation/lazy/LazyListScope;)V +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$ScaffoldLazyColumn$3$1$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/ScaffoldKt$ScaffoldLazyColumn$4; +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$ScaffoldLazyColumn$4;->(Landroidx/compose/ui/Modifier;Landroidx/compose/material3/TopAppBarScrollBehavior;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/State;Lkotlin/jvm/functions/Function3;ILandroidx/compose/material/pullrefresh/PullRefreshState;JJLandroidx/compose/foundation/layout/WindowInsets;Lkotlin/jvm/functions/Function3;Landroidx/compose/foundation/layout/Arrangement$Vertical;Landroidx/compose/foundation/lazy/LazyListState;Lkotlin/jvm/functions/Function1;III)V +Lcom/artemchep/keyguard/ui/ScaffoldKt$ScaffoldLazyColumn$translationYState$1$1; +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$ScaffoldLazyColumn$translationYState$1$1;->(Landroidx/compose/ui/unit/Density;Landroidx/compose/material/pullrefresh/PullRefreshState;)V +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$ScaffoldLazyColumn$translationYState$1$1;->invoke()Ljava/lang/Float; +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$ScaffoldLazyColumn$translationYState$1$1;->invoke()Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/ScaffoldKt$SmallFab$1; +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$SmallFab$1;->(Landroidx/compose/runtime/State;Lkotlin/jvm/functions/Function2;)V +Lcom/artemchep/keyguard/ui/ScaffoldKt$SmallFab$2; +HSPLcom/artemchep/keyguard/ui/ScaffoldKt$SmallFab$2;->(Lcom/artemchep/keyguard/ui/FabScope;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function0;I)V +Lcom/artemchep/keyguard/ui/Selection; +Lcom/artemchep/keyguard/ui/TextItemKt; +HSPLcom/artemchep/keyguard/ui/TextItemKt;->()V +HSPLcom/artemchep/keyguard/ui/TextItemKt;->ConcealedFlatTextField(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/artemchep/keyguard/feature/auth/common/TextFieldModel2;Landroidx/compose/foundation/text/KeyboardOptions;Landroidx/compose/foundation/text/KeyboardActions;ZILandroidx/compose/foundation/interaction/MutableInteractionSource;ZLkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;III)V +HSPLcom/artemchep/keyguard/ui/TextItemKt;->Decoration-KTwxG1Y(JLandroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/ui/TextItemKt;->FlatTextField$lambda$4(Landroidx/compose/runtime/MutableState;)Z +HSPLcom/artemchep/keyguard/ui/TextItemKt;->FlatTextField$lambda$5(Landroidx/compose/runtime/MutableState;Z)V +HSPLcom/artemchep/keyguard/ui/TextItemKt;->FlatTextField(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/artemchep/keyguard/feature/auth/common/TextFieldModel2;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/input/VisualTransformation;Landroidx/compose/foundation/text/KeyboardOptions;Landroidx/compose/foundation/text/KeyboardActions;ZILandroidx/compose/foundation/interaction/MutableInteractionSource;ZLkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;III)V +HSPLcom/artemchep/keyguard/ui/TextItemKt;->FlatTextFieldSurface$lambda$27(Landroidx/compose/runtime/State;)J +HSPLcom/artemchep/keyguard/ui/TextItemKt;->FlatTextFieldSurface(Landroidx/compose/ui/Modifier;ZZLkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/ui/TextItemKt;->PasswordFlatTextField(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/artemchep/keyguard/feature/auth/common/TextFieldModel2;Landroidx/compose/foundation/text/KeyboardOptions;Landroidx/compose/foundation/text/KeyboardActions;ZLkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Landroidx/compose/runtime/Composer;III)V +HSPLcom/artemchep/keyguard/ui/TextItemKt;->PlainTextField(Ljava/lang/String;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Ljava/lang/String;ZZLandroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function2;ZLandroidx/compose/ui/text/input/VisualTransformation;Landroidx/compose/foundation/text/KeyboardOptions;Landroidx/compose/foundation/text/KeyboardActions;ZILandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/Composer;III)V +HSPLcom/artemchep/keyguard/ui/TextItemKt;->PlainTextFieldDecorationBox$lambda$15(Landroidx/compose/runtime/State;)F +HSPLcom/artemchep/keyguard/ui/TextItemKt;->PlainTextFieldDecorationBox(Landroidx/compose/ui/Modifier;Ljava/lang/String;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/text/input/VisualTransformation;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/ui/TextItemKt;->access$Decoration-KTwxG1Y(JLandroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/ui/TextItemKt;->access$FlatTextField$lambda$4(Landroidx/compose/runtime/MutableState;)Z +HSPLcom/artemchep/keyguard/ui/TextItemKt;->access$FlatTextField$lambda$5(Landroidx/compose/runtime/MutableState;Z)V +HSPLcom/artemchep/keyguard/ui/TextItemKt;->access$FlatTextFieldSurface(Landroidx/compose/ui/Modifier;ZZLkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/ui/TextItemKt;->access$PlainTextFieldDecorationBox$lambda$15(Landroidx/compose/runtime/State;)F +HSPLcom/artemchep/keyguard/ui/TextItemKt;->access$PlainTextFieldDecorationBox(Landroidx/compose/ui/Modifier;Ljava/lang/String;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/text/input/VisualTransformation;Landroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/Composer;II)V +Lcom/artemchep/keyguard/ui/TextItemKt$ConcealedFlatTextField$2; +HSPLcom/artemchep/keyguard/ui/TextItemKt$ConcealedFlatTextField$2;->(Lcom/artemchep/keyguard/feature/auth/common/VisibilityState;Lkotlin/jvm/functions/Function3;)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$ConcealedFlatTextField$2;->invoke(Landroidx/compose/foundation/layout/RowScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$ConcealedFlatTextField$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/TextItemKt$ConcealedFlatTextField$3; +HSPLcom/artemchep/keyguard/ui/TextItemKt$ConcealedFlatTextField$3;->(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/artemchep/keyguard/feature/auth/common/TextFieldModel2;Landroidx/compose/foundation/text/KeyboardOptions;Landroidx/compose/foundation/text/KeyboardActions;ZILandroidx/compose/foundation/interaction/MutableInteractionSource;ZLkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;III)V +Lcom/artemchep/keyguard/ui/TextItemKt$Decoration$contentWithColor$1; +HSPLcom/artemchep/keyguard/ui/TextItemKt$Decoration$contentWithColor$1;->(JLkotlin/jvm/functions/Function2;)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$Decoration$contentWithColor$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$Decoration$contentWithColor$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$2$1; +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$2$1;->(Landroidx/compose/runtime/MutableState;)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$2$1;->invoke(Landroidx/compose/ui/focus/FocusState;)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3; +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3;->(Lcom/artemchep/keyguard/feature/auth/common/TextFieldModel2;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Ljava/lang/String;ZLjava/lang/String;Landroidx/compose/ui/Modifier;Lcom/artemchep/keyguard/ui/focus/FocusRequester2;Landroidx/compose/ui/Modifier;Ljava/lang/String;ZLandroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/input/VisualTransformation;Landroidx/compose/foundation/text/KeyboardOptions;Landroidx/compose/foundation/text/KeyboardActions;ZILandroidx/compose/foundation/interaction/MutableInteractionSource;Landroidx/compose/runtime/MutableState;Lkotlin/jvm/functions/Function3;Z)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3;->invoke$lambda$20$lambda$15$lambda$11$lambda$9$lambda$2(Landroidx/compose/runtime/State;)F +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3;->invoke$lambda$20$lambda$15$lambda$11$lambda$9$lambda$3(Landroidx/compose/runtime/State;)J +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3;->invoke$lambda$20$lambda$15$lambda$11$lambda$9$lambda$4(Landroidx/compose/runtime/State;)F +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3;->invoke$lambda$20$lambda$15$lambda$11$lambda$9$lambda$7(Landroidx/compose/runtime/State;)F +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3;->invoke$lambda$20$lambda$18(Landroidx/compose/runtime/State;)Lcom/artemchep/keyguard/ui/Afh; +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$1$1$1; +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$1$1$1;->(Landroidx/compose/runtime/State;)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$1$1$1;->invoke(Landroidx/compose/ui/graphics/GraphicsLayerScope;)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$1$3$1$1$1; +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$1$3$1$1$1;->(Landroidx/compose/runtime/State;)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$1$3$1$1$1;->invoke(Landroidx/compose/ui/graphics/GraphicsLayerScope;)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$1$3$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$1$3$1$3; +Lcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$1$3$1$4$1; +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$1$3$1$4$1;->(Lcom/artemchep/keyguard/feature/auth/common/TextFieldModel2;)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$1$3$1$4$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$1$3$1$4$1;->invoke(Ljava/lang/String;)V +Lcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$1$4$1; +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$1$4$1;->(Landroidx/compose/runtime/State;)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$1$4$1;->invoke(Landroidx/compose/ui/graphics/GraphicsLayerScope;)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$1$4$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$1$7; +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$1$7;->(Lcom/artemchep/keyguard/feature/auth/common/TextFieldModel2;Lcom/artemchep/keyguard/ui/focus/FocusRequester2;)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$1$7;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$1$7;->invoke(Lkotlin/Unit;Landroidx/compose/runtime/Composer;I)V +Lcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$1$7$1$1; +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$1$7$1$1;->(Lcom/artemchep/keyguard/feature/auth/common/TextFieldModel2;Lcom/artemchep/keyguard/ui/focus/FocusRequester2;)V +Lcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$3; +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$3;->(Landroidx/compose/runtime/State;Lcom/artemchep/keyguard/feature/auth/common/TextFieldModel2;)V +Lcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$options$2$1; +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$options$2$1;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$options$2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$options$2$1;->invoke(Ljava/lang/String;Lkotlinx/collections/immutable/ImmutableList;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$options$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$options$2$1$filteredOptions$1; +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$options$2$1$filteredOptions$1;->(Ljava/lang/String;)V +Lcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$options$2$optionsFlow$1; +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$options$2$optionsFlow$1;->(Landroidx/compose/runtime/State;)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$options$2$optionsFlow$1;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$options$2$optionsFlow$1;->invoke()Lkotlinx/collections/immutable/ImmutableList; +Lcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$options$2$valueFlow$1; +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$options$2$valueFlow$1;->(Landroidx/compose/runtime/State;)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$options$2$valueFlow$1;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$1$options$2$valueFlow$1;->invoke()Ljava/lang/String; +Lcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$invoke$lambda$20$lambda$17$$inlined$map$1; +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$invoke$lambda$20$lambda$17$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$invoke$lambda$20$lambda$17$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$invoke$lambda$20$lambda$17$$inlined$map$1$2; +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$invoke$lambda$20$lambda$17$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$invoke$lambda$20$lambda$17$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$invoke$lambda$20$lambda$17$$inlined$map$1$2$1; +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$invoke$lambda$20$lambda$17$$inlined$map$1$2$1;->(Lcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$3$invoke$lambda$20$lambda$17$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$4; +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$4;->(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/artemchep/keyguard/feature/auth/common/TextFieldModel2;Landroidx/compose/ui/text/TextStyle;Landroidx/compose/ui/text/input/VisualTransformation;Landroidx/compose/foundation/text/KeyboardOptions;Landroidx/compose/foundation/text/KeyboardActions;ZILandroidx/compose/foundation/interaction/MutableInteractionSource;ZLkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;III)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$4;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextField$4;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/TextItemKt$FlatTextFieldSurface$1; +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextFieldSurface$1;->(Lkotlin/jvm/functions/Function2;)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextFieldSurface$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextFieldSurface$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/TextItemKt$FlatTextFieldSurface$2; +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextFieldSurface$2;->(Landroidx/compose/ui/Modifier;ZZLkotlin/jvm/functions/Function2;II)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextFieldSurface$2;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$FlatTextFieldSurface$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/TextItemKt$PlainTextField$2; +HSPLcom/artemchep/keyguard/ui/TextItemKt$PlainTextField$2;->(Landroidx/compose/ui/Modifier;Ljava/lang/String;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/text/input/VisualTransformation;Landroidx/compose/foundation/interaction/MutableInteractionSource;)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$PlainTextField$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/ui/TextItemKt$PlainTextField$2;->invoke(Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V +Lcom/artemchep/keyguard/ui/TextItemKt$PlainTextField$3; +HSPLcom/artemchep/keyguard/ui/TextItemKt$PlainTextField$3;->(Ljava/lang/String;Lkotlin/jvm/functions/Function1;Landroidx/compose/ui/Modifier;Landroidx/compose/ui/Modifier;Ljava/lang/String;ZZLandroidx/compose/ui/text/TextStyle;Lkotlin/jvm/functions/Function2;ZLandroidx/compose/ui/text/input/VisualTransformation;Landroidx/compose/foundation/text/KeyboardOptions;Landroidx/compose/foundation/text/KeyboardActions;ZILandroidx/compose/foundation/interaction/MutableInteractionSource;III)V +Lcom/artemchep/keyguard/ui/TextItemKt$PlainTextFieldDecorationBox$3; +HSPLcom/artemchep/keyguard/ui/TextItemKt$PlainTextFieldDecorationBox$3;->(Landroidx/compose/ui/Modifier;Ljava/lang/String;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Landroidx/compose/ui/text/input/VisualTransformation;Landroidx/compose/foundation/interaction/MutableInteractionSource;II)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$PlainTextFieldDecorationBox$3;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$PlainTextFieldDecorationBox$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/TextItemKt$PlainTextFieldDecorationBox$decoratedPlaceholder$1; +HSPLcom/artemchep/keyguard/ui/TextItemKt$PlainTextFieldDecorationBox$decoratedPlaceholder$1;->(Landroidx/compose/runtime/State;Lkotlin/jvm/functions/Function2;)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$PlainTextFieldDecorationBox$decoratedPlaceholder$1;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/TextItemKt$PlainTextFieldDecorationBox$decoratedPlaceholder$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/TextItemKt$PlainTextFieldDecorationBox$placeholderOpacity$2; +HSPLcom/artemchep/keyguard/ui/TextItemKt$PlainTextFieldDecorationBox$placeholderOpacity$2;->()V +HSPLcom/artemchep/keyguard/ui/TextItemKt$PlainTextFieldDecorationBox$placeholderOpacity$2;->()V +HSPLcom/artemchep/keyguard/ui/TextItemKt$PlainTextFieldDecorationBox$placeholderOpacity$2;->invoke(Landroidx/compose/animation/core/Transition$Segment;Landroidx/compose/runtime/Composer;I)Landroidx/compose/animation/core/FiniteAnimationSpec; +HSPLcom/artemchep/keyguard/ui/TextItemKt$PlainTextFieldDecorationBox$placeholderOpacity$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/TextItemKt$WhenMappings; +HSPLcom/artemchep/keyguard/ui/TextItemKt$WhenMappings;->()V +Lcom/artemchep/keyguard/ui/ToastComposableKt; +HSPLcom/artemchep/keyguard/ui/ToastComposableKt;->()V +HSPLcom/artemchep/keyguard/ui/ToastComposableKt;->ToastMessageHost$lambda$1(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/MessageHub; +HSPLcom/artemchep/keyguard/ui/ToastComposableKt;->ToastMessageHost$lambda$2(Landroidx/compose/runtime/State;)Ljava/util/List; +HSPLcom/artemchep/keyguard/ui/ToastComposableKt;->ToastMessageHost(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/ui/ToastComposableKt;->access$ToastMessageHost$lambda$1(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/MessageHub; +Lcom/artemchep/keyguard/ui/ToastComposableKt$ToastMessageHost$$inlined$rememberInstance$1; +HSPLcom/artemchep/keyguard/ui/ToastComposableKt$ToastMessageHost$$inlined$rememberInstance$1;->()V +Lcom/artemchep/keyguard/ui/ToastComposableKt$ToastMessageHost$1; +HSPLcom/artemchep/keyguard/ui/ToastComposableKt$ToastMessageHost$1;->(Ljava/lang/String;Lkotlin/Lazy;Lkotlinx/coroutines/flow/MutableStateFlow;Lkotlinx/coroutines/CoroutineScope;)V +HSPLcom/artemchep/keyguard/ui/ToastComposableKt$ToastMessageHost$1;->invoke(Landroidx/compose/runtime/DisposableEffectScope;)Landroidx/compose/runtime/DisposableEffectResult; +HSPLcom/artemchep/keyguard/ui/ToastComposableKt$ToastMessageHost$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/ToastComposableKt$ToastMessageHost$1$invoke$$inlined$onDispose$1; +HSPLcom/artemchep/keyguard/ui/ToastComposableKt$ToastMessageHost$1$invoke$$inlined$onDispose$1;->(Lkotlin/jvm/functions/Function0;)V +Lcom/artemchep/keyguard/ui/ToastComposableKt$ToastMessageHost$1$unregister$1; +HSPLcom/artemchep/keyguard/ui/ToastComposableKt$ToastMessageHost$1$unregister$1;->(Lkotlinx/coroutines/flow/MutableStateFlow;Lkotlinx/coroutines/CoroutineScope;)V +Lcom/artemchep/keyguard/ui/ToastComposableKt$ToastMessageHost$3; +HSPLcom/artemchep/keyguard/ui/ToastComposableKt$ToastMessageHost$3;->(Landroidx/compose/ui/Modifier;II)V +Lcom/artemchep/keyguard/ui/focus/BringIntoViewKt; +HSPLcom/artemchep/keyguard/ui/focus/BringIntoViewKt;->bringIntoView(Landroidx/compose/ui/Modifier;)Landroidx/compose/ui/Modifier; +Lcom/artemchep/keyguard/ui/focus/BringIntoViewKt$bringIntoView$1; +HSPLcom/artemchep/keyguard/ui/focus/BringIntoViewKt$bringIntoView$1;->()V +HSPLcom/artemchep/keyguard/ui/focus/BringIntoViewKt$bringIntoView$1;->()V +HSPLcom/artemchep/keyguard/ui/focus/BringIntoViewKt$bringIntoView$1;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier; +HSPLcom/artemchep/keyguard/ui/focus/BringIntoViewKt$bringIntoView$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/focus/BringIntoViewKt$bringIntoView$1$1; +HSPLcom/artemchep/keyguard/ui/focus/BringIntoViewKt$bringIntoView$1$1;->(Landroidx/compose/runtime/MutableState;Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/foundation/relocation/BringIntoViewRequester;)V +HSPLcom/artemchep/keyguard/ui/focus/BringIntoViewKt$bringIntoView$1$1;->invoke(Landroidx/compose/ui/focus/FocusState;)V +HSPLcom/artemchep/keyguard/ui/focus/BringIntoViewKt$bringIntoView$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/focus/BringIntoViewKt$bringIntoView$1$1$1; +HSPLcom/artemchep/keyguard/ui/focus/BringIntoViewKt$bringIntoView$1$1$1;->(Landroidx/compose/foundation/relocation/BringIntoViewRequester;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/ui/focus/BringIntoViewKt$bringIntoView$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/ui/focus/BringIntoViewKt$bringIntoView$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/focus/FocusEvent; +HSPLcom/artemchep/keyguard/ui/focus/FocusEvent;->()V +HSPLcom/artemchep/keyguard/ui/focus/FocusEvent;->(Z)V +Lcom/artemchep/keyguard/ui/focus/FocusRequester2; +HSPLcom/artemchep/keyguard/ui/focus/FocusRequester2;->()V +HSPLcom/artemchep/keyguard/ui/focus/FocusRequester2;->()V +HSPLcom/artemchep/keyguard/ui/focus/FocusRequester2;->getOnRequestFocusFlow()Lkotlinx/coroutines/flow/Flow; +HSPLcom/artemchep/keyguard/ui/focus/FocusRequester2;->requestFocus$default(Lcom/artemchep/keyguard/ui/focus/FocusRequester2;ZILjava/lang/Object;)V +HSPLcom/artemchep/keyguard/ui/focus/FocusRequester2;->requestFocus(Z)V +Lcom/artemchep/keyguard/ui/focus/FocusRequesterKt; +HSPLcom/artemchep/keyguard/ui/focus/FocusRequesterKt;->focusRequester2(Landroidx/compose/ui/Modifier;Lcom/artemchep/keyguard/ui/focus/FocusRequester2;)Landroidx/compose/ui/Modifier; +Lcom/artemchep/keyguard/ui/focus/FocusRequesterKt$focusRequester2$1; +HSPLcom/artemchep/keyguard/ui/focus/FocusRequesterKt$focusRequester2$1;->(Lcom/artemchep/keyguard/ui/focus/FocusRequester2;)V +HSPLcom/artemchep/keyguard/ui/focus/FocusRequesterKt$focusRequester2$1;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier; +HSPLcom/artemchep/keyguard/ui/focus/FocusRequesterKt$focusRequester2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/focus/FocusRequesterKt$focusRequester2$1$1$1; +HSPLcom/artemchep/keyguard/ui/focus/FocusRequesterKt$focusRequester2$1$1$1;->(Landroidx/compose/runtime/MutableState;Landroidx/compose/ui/platform/SoftwareKeyboardController;Landroidx/compose/ui/focus/FocusRequester;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/ui/focus/FocusRequesterKt$focusRequester2$1$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/ui/focus/FocusRequesterKt$focusRequester2$1$1$1;->invoke(Lcom/artemchep/keyguard/ui/focus/FocusEvent;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/ui/focus/FocusRequesterKt$focusRequester2$1$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/ui/focus/FocusRequesterKt$focusRequester2$1$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/focus/FocusRequesterKt$focusRequester2$1$2$1; +HSPLcom/artemchep/keyguard/ui/focus/FocusRequesterKt$focusRequester2$1$2$1;->(Landroidx/compose/runtime/MutableState;)V +HSPLcom/artemchep/keyguard/ui/focus/FocusRequesterKt$focusRequester2$1$2$1;->invoke(Landroidx/compose/ui/focus/FocusState;)V +HSPLcom/artemchep/keyguard/ui/focus/FocusRequesterKt$focusRequester2$1$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/icons/ChevronIconKt; +HSPLcom/artemchep/keyguard/ui/icons/ChevronIconKt;->ChevronIcon-iJQMabo(Landroidx/compose/ui/Modifier;JLandroidx/compose/runtime/Composer;II)V +Lcom/artemchep/keyguard/ui/icons/ChevronIconKt$ChevronIcon$1; +HSPLcom/artemchep/keyguard/ui/icons/ChevronIconKt$ChevronIcon$1;->(Landroidx/compose/ui/Modifier;JII)V +Lcom/artemchep/keyguard/ui/icons/ComposableSingletons$VisibilityIconKt; +HSPLcom/artemchep/keyguard/ui/icons/ComposableSingletons$VisibilityIconKt;->()V +HSPLcom/artemchep/keyguard/ui/icons/ComposableSingletons$VisibilityIconKt;->()V +HSPLcom/artemchep/keyguard/ui/icons/ComposableSingletons$VisibilityIconKt;->getLambda-1$common_playStoreRelease()Lkotlin/jvm/functions/Function3; +Lcom/artemchep/keyguard/ui/icons/ComposableSingletons$VisibilityIconKt$lambda-1$1; +HSPLcom/artemchep/keyguard/ui/icons/ComposableSingletons$VisibilityIconKt$lambda-1$1;->()V +HSPLcom/artemchep/keyguard/ui/icons/ComposableSingletons$VisibilityIconKt$lambda-1$1;->()V +HSPLcom/artemchep/keyguard/ui/icons/ComposableSingletons$VisibilityIconKt$lambda-1$1;->invoke(Landroidx/compose/ui/graphics/vector/ImageVector;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/icons/ComposableSingletons$VisibilityIconKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/icons/IconBoxKt; +HSPLcom/artemchep/keyguard/ui/icons/IconBoxKt;->IconBox(Landroidx/compose/ui/graphics/vector/ImageVector;Landroidx/compose/ui/graphics/vector/ImageVector;Lkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V +Lcom/artemchep/keyguard/ui/icons/IconBoxKt$IconBox$1; +HSPLcom/artemchep/keyguard/ui/icons/IconBoxKt$IconBox$1;->()V +HSPLcom/artemchep/keyguard/ui/icons/IconBoxKt$IconBox$1;->()V +Lcom/artemchep/keyguard/ui/icons/IconBoxKt$IconBox$2; +HSPLcom/artemchep/keyguard/ui/icons/IconBoxKt$IconBox$2;->()V +HSPLcom/artemchep/keyguard/ui/icons/IconBoxKt$IconBox$2;->()V +Lcom/artemchep/keyguard/ui/icons/IconBoxKt$icon$1; +HSPLcom/artemchep/keyguard/ui/icons/IconBoxKt$icon$1;->(Landroidx/compose/ui/graphics/vector/ImageVector;Landroidx/compose/ui/graphics/vector/ImageVector;)V +Lcom/artemchep/keyguard/ui/icons/IconsKt; +HSPLcom/artemchep/keyguard/ui/icons/IconsKt;->()V +HSPLcom/artemchep/keyguard/ui/icons/IconsKt;->getKeyguardAttachment(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +HSPLcom/artemchep/keyguard/ui/icons/IconsKt;->getKeyguardNote(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +HSPLcom/artemchep/keyguard/ui/icons/IconsKt;->getKeyguardTwoFa(Landroidx/compose/material/icons/Icons$Outlined;)Landroidx/compose/ui/graphics/vector/ImageVector; +Lcom/artemchep/keyguard/ui/icons/VisibilityIconKt; +HSPLcom/artemchep/keyguard/ui/icons/VisibilityIconKt;->VisibilityIcon(Landroidx/compose/ui/Modifier;ZLandroidx/compose/runtime/Composer;II)V +Lcom/artemchep/keyguard/ui/pulltosearch/PullToSearchKt; +HSPLcom/artemchep/keyguard/ui/pulltosearch/PullToSearchKt;->PullToSearch$lambda$4$lambda$1(Landroidx/compose/runtime/State;)Z +HSPLcom/artemchep/keyguard/ui/pulltosearch/PullToSearchKt;->PullToSearch$lambda$4$lambda$3$lambda$2(Landroidx/compose/runtime/State;)J +HSPLcom/artemchep/keyguard/ui/pulltosearch/PullToSearchKt;->PullToSearch(Landroidx/compose/ui/Modifier;Landroidx/compose/material/pullrefresh/PullRefreshState;Landroidx/compose/runtime/Composer;II)V +Lcom/artemchep/keyguard/ui/pulltosearch/PullToSearchKt$PullToSearch$1$1; +HSPLcom/artemchep/keyguard/ui/pulltosearch/PullToSearchKt$PullToSearch$1$1;->(Landroidx/compose/material/pullrefresh/PullRefreshState;)V +HSPLcom/artemchep/keyguard/ui/pulltosearch/PullToSearchKt$PullToSearch$1$1;->invoke(Landroidx/compose/ui/graphics/GraphicsLayerScope;)V +HSPLcom/artemchep/keyguard/ui/pulltosearch/PullToSearchKt$PullToSearch$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/pulltosearch/PullToSearchKt$PullToSearch$1$willSearch$2$1; +HSPLcom/artemchep/keyguard/ui/pulltosearch/PullToSearchKt$PullToSearch$1$willSearch$2$1;->(Landroidx/compose/material/pullrefresh/PullRefreshState;)V +HSPLcom/artemchep/keyguard/ui/pulltosearch/PullToSearchKt$PullToSearch$1$willSearch$2$1;->invoke()Ljava/lang/Boolean; +HSPLcom/artemchep/keyguard/ui/pulltosearch/PullToSearchKt$PullToSearch$1$willSearch$2$1;->invoke()Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/pulltosearch/PullToSearchKt$PullToSearch$2; +HSPLcom/artemchep/keyguard/ui/pulltosearch/PullToSearchKt$PullToSearch$2;->(Landroidx/compose/ui/Modifier;Landroidx/compose/material/pullrefresh/PullRefreshState;II)V +Lcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt; +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt;->InternalLazyColumnScrollbar-pAIm_bA(Landroidx/compose/foundation/lazy/LazyListState;ZFFFJJLandroidx/compose/ui/graphics/Shape;Lcom/artemchep/keyguard/ui/scrollbar/ScrollbarSelectionMode;Lkotlin/jvm/functions/Function4;Landroidx/compose/foundation/layout/PaddingValues;Landroidx/compose/runtime/Composer;III)V +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt;->InternalLazyColumnScrollbar_pAIm_bA$fractionHiddenTop(Landroidx/compose/foundation/lazy/LazyListItemInfo;)F +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt;->InternalLazyColumnScrollbar_pAIm_bA$fractionVisibleBottom(Landroidx/compose/foundation/lazy/LazyListItemInfo;I)F +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt;->InternalLazyColumnScrollbar_pAIm_bA$lambda$11(Landroidx/compose/runtime/State;)Landroidx/compose/foundation/lazy/LazyListItemInfo; +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt;->InternalLazyColumnScrollbar_pAIm_bA$lambda$13(Landroidx/compose/runtime/State;)Z +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt;->InternalLazyColumnScrollbar_pAIm_bA$lambda$15(Landroidx/compose/runtime/State;)F +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt;->InternalLazyColumnScrollbar_pAIm_bA$lambda$17(Landroidx/compose/runtime/State;)F +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt;->InternalLazyColumnScrollbar_pAIm_bA$lambda$19(Landroidx/compose/runtime/State;)F +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt;->InternalLazyColumnScrollbar_pAIm_bA$lambda$20(Landroidx/compose/runtime/State;)F +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt;->InternalLazyColumnScrollbar_pAIm_bA$lambda$21(Landroidx/compose/runtime/State;)F +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt;->InternalLazyColumnScrollbar_pAIm_bA$lambda$3(Landroidx/compose/runtime/MutableState;)Z +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt;->InternalLazyColumnScrollbar_pAIm_bA$lambda$9(Landroidx/compose/runtime/State;)Z +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt;->InternalLazyColumnScrollbar_pAIm_bA$offsetCorrection(FLandroidx/compose/runtime/State;Landroidx/compose/runtime/State;F)F +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt;->LazyColumnScrollbar-lnVutNI(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/LazyListState;ZFFFJJLandroidx/compose/ui/graphics/Shape;Lcom/artemchep/keyguard/ui/scrollbar/ScrollbarSelectionMode;ZLkotlin/jvm/functions/Function4;Landroidx/compose/foundation/layout/PaddingValues;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;III)V +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt;->access$InternalLazyColumnScrollbar_pAIm_bA$fractionHiddenTop(Landroidx/compose/foundation/lazy/LazyListItemInfo;)F +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt;->access$InternalLazyColumnScrollbar_pAIm_bA$fractionVisibleBottom(Landroidx/compose/foundation/lazy/LazyListItemInfo;I)F +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt;->access$InternalLazyColumnScrollbar_pAIm_bA$lambda$11(Landroidx/compose/runtime/State;)Landroidx/compose/foundation/lazy/LazyListItemInfo; +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt;->access$InternalLazyColumnScrollbar_pAIm_bA$lambda$13(Landroidx/compose/runtime/State;)Z +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt;->access$InternalLazyColumnScrollbar_pAIm_bA$lambda$15(Landroidx/compose/runtime/State;)F +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt;->access$InternalLazyColumnScrollbar_pAIm_bA$lambda$17(Landroidx/compose/runtime/State;)F +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt;->access$InternalLazyColumnScrollbar_pAIm_bA$lambda$19(Landroidx/compose/runtime/State;)F +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt;->access$InternalLazyColumnScrollbar_pAIm_bA$lambda$21(Landroidx/compose/runtime/State;)F +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt;->access$InternalLazyColumnScrollbar_pAIm_bA$lambda$3(Landroidx/compose/runtime/MutableState;)Z +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt;->access$InternalLazyColumnScrollbar_pAIm_bA$offsetCorrection(FLandroidx/compose/runtime/State;Landroidx/compose/runtime/State;F)F +Lcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$1; +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$1;->(Lkotlin/jvm/functions/Function4;ZLcom/artemchep/keyguard/ui/scrollbar/ScrollbarSelectionMode;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/lazy/LazyListState;Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/runtime/State;FLandroidx/compose/runtime/State;Landroidx/compose/runtime/State;FFLandroidx/compose/ui/graphics/Shape;JJ)V +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$1;->invoke(Landroidx/compose/foundation/layout/BoxWithConstraintsScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$1$3; +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$1$3;->(Landroidx/compose/foundation/layout/BoxWithConstraintsScope;Landroidx/compose/runtime/State;Landroidx/compose/runtime/MutableState;Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/lazy/LazyListState;Lkotlinx/coroutines/CoroutineScope;Landroidx/compose/runtime/State;FLandroidx/compose/runtime/State;Landroidx/compose/runtime/State;)V +Lcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$1$4; +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$1$4;->(Landroidx/compose/foundation/layout/BoxWithConstraintsScope;Lcom/artemchep/keyguard/ui/scrollbar/ScrollbarSelectionMode;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/runtime/MutableState;Landroidx/compose/foundation/lazy/LazyListState;Lkotlinx/coroutines/CoroutineScope;FLandroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$1$5$1; +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$1$5$1;->(Landroidx/compose/runtime/MutableState;Lkotlin/coroutines/Continuation;)V +Lcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$1$7; +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$1$7;->(FFLandroidx/compose/ui/graphics/Shape;JJLandroidx/compose/runtime/State;Landroidx/compose/runtime/State;Landroidx/compose/runtime/MutableState;)V +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$1$7;->invoke$lambda$0(Landroidx/compose/runtime/State;)F +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$1$7;->invoke(Landroidx/compose/foundation/layout/BoxWithConstraintsScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$1$7;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$2; +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$2;->(Landroidx/compose/foundation/lazy/LazyListState;ZFFFJJLandroidx/compose/ui/graphics/Shape;Lcom/artemchep/keyguard/ui/scrollbar/ScrollbarSelectionMode;Lkotlin/jvm/functions/Function4;Landroidx/compose/foundation/layout/PaddingValues;III)V +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$2;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$firstVisibleItemIndex$1$1; +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$firstVisibleItemIndex$1$1;->(Landroidx/compose/foundation/lazy/LazyListState;)V +Lcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$isStickyHeaderInAction$2$1; +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$isStickyHeaderInAction$2$1;->(Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/runtime/State;)V +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$isStickyHeaderInAction$2$1;->invoke()Ljava/lang/Boolean; +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$isStickyHeaderInAction$2$1;->invoke()Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$normalizedOffsetPosition$2$1; +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$normalizedOffsetPosition$2$1;->(Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/runtime/State;FLandroidx/compose/runtime/State;Landroidx/compose/runtime/State;)V +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$normalizedOffsetPosition$2$1;->invoke()Ljava/lang/Float; +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$normalizedOffsetPosition$2$1;->invoke()Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$normalizedThumbSize$2$1; +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$normalizedThumbSize$2$1;->(FLandroidx/compose/runtime/State;)V +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$normalizedThumbSize$2$1;->invoke()Ljava/lang/Float; +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$normalizedThumbSize$2$1;->invoke()Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$normalizedThumbSizeReal$2$1; +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$normalizedThumbSizeReal$2$1;->(Landroidx/compose/foundation/lazy/LazyListState;Landroidx/compose/runtime/State;Landroidx/compose/runtime/State;)V +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$normalizedThumbSizeReal$2$1;->invoke()Ljava/lang/Float; +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$normalizedThumbSizeReal$2$1;->invoke()Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$realFirstVisibleItem$2$1; +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$realFirstVisibleItem$2$1;->(Landroidx/compose/foundation/lazy/LazyListState;)V +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$realFirstVisibleItem$2$1;->invoke()Landroidx/compose/foundation/lazy/LazyListItemInfo; +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$realFirstVisibleItem$2$1;->invoke()Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$reverseLayout$2$1; +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$reverseLayout$2$1;->(Landroidx/compose/foundation/lazy/LazyListState;)V +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$reverseLayout$2$1;->invoke()Ljava/lang/Boolean; +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$InternalLazyColumnScrollbar$reverseLayout$2$1;->invoke()Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$LazyColumnScrollbar$2; +HSPLcom/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbarKt$LazyColumnScrollbar$2;->(Landroidx/compose/ui/Modifier;Landroidx/compose/foundation/lazy/LazyListState;ZFFFJJLandroidx/compose/ui/graphics/Shape;Lcom/artemchep/keyguard/ui/scrollbar/ScrollbarSelectionMode;ZLkotlin/jvm/functions/Function4;Landroidx/compose/foundation/layout/PaddingValues;Lkotlin/jvm/functions/Function2;III)V +Lcom/artemchep/keyguard/ui/scrollbar/ScrollbarSelectionMode; +HSPLcom/artemchep/keyguard/ui/scrollbar/ScrollbarSelectionMode;->$values()[Lcom/artemchep/keyguard/ui/scrollbar/ScrollbarSelectionMode; +HSPLcom/artemchep/keyguard/ui/scrollbar/ScrollbarSelectionMode;->()V +HSPLcom/artemchep/keyguard/ui/scrollbar/ScrollbarSelectionMode;->(Ljava/lang/String;I)V +Lcom/artemchep/keyguard/ui/scrollbar/ScrollbarSelectionMode$Companion; +HSPLcom/artemchep/keyguard/ui/scrollbar/ScrollbarSelectionMode$Companion;->()V +HSPLcom/artemchep/keyguard/ui/scrollbar/ScrollbarSelectionMode$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/ui/scrollbar/ScrollbarSelectionMode$Companion;->getDefault(Landroidx/compose/runtime/Composer;I)Lcom/artemchep/keyguard/ui/scrollbar/ScrollbarSelectionMode; +Lcom/artemchep/keyguard/ui/selection/SelectionHandle; +Lcom/artemchep/keyguard/ui/selection/SelectionUtilKt; +HSPLcom/artemchep/keyguard/ui/selection/SelectionUtilKt;->selectionHandle(Lcom/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope;Ljava/lang/String;)Lcom/artemchep/keyguard/ui/selection/SelectionHandle; +Lcom/artemchep/keyguard/ui/selection/SelectionUtilKt$selectionHandle$$inlined$map$1; +HSPLcom/artemchep/keyguard/ui/selection/SelectionUtilKt$selectionHandle$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;)V +Lcom/artemchep/keyguard/ui/selection/SelectionUtilKt$selectionHandle$2; +HSPLcom/artemchep/keyguard/ui/selection/SelectionUtilKt$selectionHandle$2;->(Lkotlinx/coroutines/flow/MutableStateFlow;)V +Lcom/artemchep/keyguard/ui/selection/SelectionUtilKt$selectionHandle$3; +HSPLcom/artemchep/keyguard/ui/selection/SelectionUtilKt$selectionHandle$3;->(Lkotlinx/coroutines/flow/MutableStateFlow;)V +HSPLcom/artemchep/keyguard/ui/selection/SelectionUtilKt$selectionHandle$3;->getIdsFlow()Lkotlinx/coroutines/flow/StateFlow; +Lcom/artemchep/keyguard/ui/selection/SelectionUtilKt$selectionHandle$itemIdsSink$1; +HSPLcom/artemchep/keyguard/ui/selection/SelectionUtilKt$selectionHandle$itemIdsSink$1;->()V +HSPLcom/artemchep/keyguard/ui/selection/SelectionUtilKt$selectionHandle$itemIdsSink$1;->()V +HSPLcom/artemchep/keyguard/ui/selection/SelectionUtilKt$selectionHandle$itemIdsSink$1;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/ui/selection/SelectionUtilKt$selectionHandle$itemIdsSink$1;->invoke()Ljava/util/Set; +Lcom/artemchep/keyguard/ui/shimmer/RememberShimmerBoundsWindowKt; +HSPLcom/artemchep/keyguard/ui/shimmer/RememberShimmerBoundsWindowKt;->rememberShimmerBoundsWindow(Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/geometry/Rect; +Lcom/artemchep/keyguard/ui/shimmer/RememberShimmerEffectKt; +HSPLcom/artemchep/keyguard/ui/shimmer/RememberShimmerEffectKt;->rememberShimmerEffect(Lcom/artemchep/keyguard/ui/shimmer/ShimmerTheme;Landroidx/compose/runtime/Composer;I)Lcom/artemchep/keyguard/ui/shimmer/ShimmerEffect; +Lcom/artemchep/keyguard/ui/shimmer/RememberShimmerEffectKt$rememberShimmerEffect$1; +HSPLcom/artemchep/keyguard/ui/shimmer/RememberShimmerEffectKt$rememberShimmerEffect$1;->(Lcom/artemchep/keyguard/ui/shimmer/ShimmerEffect;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/ui/shimmer/RememberShimmerEffectKt$rememberShimmerEffect$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/ui/shimmer/RememberShimmerEffectKt$rememberShimmerEffect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/shimmer/RememberShimmerKt; +HSPLcom/artemchep/keyguard/ui/shimmer/RememberShimmerKt;->rememberShimmer(Lcom/artemchep/keyguard/ui/shimmer/ShimmerBounds;Lcom/artemchep/keyguard/ui/shimmer/ShimmerTheme;Landroidx/compose/runtime/Composer;II)Lcom/artemchep/keyguard/ui/shimmer/Shimmer; +Lcom/artemchep/keyguard/ui/shimmer/Shimmer; +HSPLcom/artemchep/keyguard/ui/shimmer/Shimmer;->()V +HSPLcom/artemchep/keyguard/ui/shimmer/Shimmer;->(Lcom/artemchep/keyguard/ui/shimmer/ShimmerTheme;Lcom/artemchep/keyguard/ui/shimmer/ShimmerEffect;Landroidx/compose/ui/geometry/Rect;)V +HSPLcom/artemchep/keyguard/ui/shimmer/Shimmer;->getBoundsFlow$common_playStoreRelease()Lkotlinx/coroutines/flow/MutableStateFlow; +HSPLcom/artemchep/keyguard/ui/shimmer/Shimmer;->getEffect$common_playStoreRelease()Lcom/artemchep/keyguard/ui/shimmer/ShimmerEffect; +HSPLcom/artemchep/keyguard/ui/shimmer/Shimmer;->getTheme$common_playStoreRelease()Lcom/artemchep/keyguard/ui/shimmer/ShimmerTheme; +Lcom/artemchep/keyguard/ui/shimmer/ShimmerArea; +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerArea;->()V +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerArea;->(FF)V +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerArea;->computeShimmerBounds()V +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerArea;->computeTranslationDistance()V +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerArea;->getPivotPoint-F1C5BW0()J +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerArea;->getShimmerBounds()Landroidx/compose/ui/geometry/Rect; +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerArea;->getTranslationDistance()F +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerArea;->getViewBounds()Landroidx/compose/ui/geometry/Rect; +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerArea;->reduceRotation(F)F +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerArea;->setViewBounds(Landroidx/compose/ui/geometry/Rect;)V +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerArea;->toRadian(F)F +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerArea;->updateBounds(Landroidx/compose/ui/geometry/Rect;)V +Lcom/artemchep/keyguard/ui/shimmer/ShimmerBounds; +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerBounds;->()V +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerBounds;->()V +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerBounds;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/artemchep/keyguard/ui/shimmer/ShimmerBounds$Custom; +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerBounds$Custom;->()V +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerBounds$Custom;->()V +Lcom/artemchep/keyguard/ui/shimmer/ShimmerBounds$View; +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerBounds$View;->()V +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerBounds$View;->()V +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerBounds$View;->equals(Ljava/lang/Object;)Z +Lcom/artemchep/keyguard/ui/shimmer/ShimmerBounds$Window; +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerBounds$Window;->()V +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerBounds$Window;->()V +Lcom/artemchep/keyguard/ui/shimmer/ShimmerBoundsKt; +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerBoundsKt;->rememberShimmerBounds(Lcom/artemchep/keyguard/ui/shimmer/ShimmerBounds;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/geometry/Rect; +Lcom/artemchep/keyguard/ui/shimmer/ShimmerEffect; +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerEffect;->()V +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerEffect;->(Landroidx/compose/animation/core/AnimationSpec;IFLjava/util/List;Ljava/util/List;F)V +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerEffect;->(Landroidx/compose/animation/core/AnimationSpec;IFLjava/util/List;Ljava/util/List;FLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerEffect;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;Lcom/artemchep/keyguard/ui/shimmer/ShimmerArea;)V +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerEffect;->startAnimation$common_playStoreRelease(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/shimmer/ShimmerKt; +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerKt;->shimmer$default(Landroidx/compose/ui/Modifier;Lcom/artemchep/keyguard/ui/shimmer/Shimmer;ILjava/lang/Object;)Landroidx/compose/ui/Modifier; +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerKt;->shimmer(Landroidx/compose/ui/Modifier;Lcom/artemchep/keyguard/ui/shimmer/Shimmer;)Landroidx/compose/ui/Modifier; +Lcom/artemchep/keyguard/ui/shimmer/ShimmerKt$shimmer$2; +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerKt$shimmer$2;->(Lcom/artemchep/keyguard/ui/shimmer/Shimmer;)V +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerKt$shimmer$2;->invoke(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/Modifier; +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerKt$shimmer$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/shimmer/ShimmerKt$shimmer$2$1; +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerKt$shimmer$2$1;->(Lcom/artemchep/keyguard/ui/shimmer/Shimmer;Lcom/artemchep/keyguard/ui/shimmer/ShimmerArea;Lkotlin/coroutines/Continuation;)V +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerKt$shimmer$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerKt$shimmer$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/shimmer/ShimmerKt$shimmer$2$1$1; +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerKt$shimmer$2$1$1;->(Lcom/artemchep/keyguard/ui/shimmer/ShimmerArea;)V +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerKt$shimmer$2$1$1;->emit(Landroidx/compose/ui/geometry/Rect;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerKt$shimmer$2$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/shimmer/ShimmerModifier; +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerModifier;->()V +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerModifier;->(Lcom/artemchep/keyguard/ui/shimmer/ShimmerArea;Lcom/artemchep/keyguard/ui/shimmer/ShimmerEffect;)V +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerModifier;->draw(Landroidx/compose/ui/graphics/drawscope/ContentDrawScope;)V +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerModifier;->onGloballyPositioned(Landroidx/compose/ui/layout/LayoutCoordinates;)V +Lcom/artemchep/keyguard/ui/shimmer/ShimmerTheme; +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerTheme;->()V +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerTheme;->(Landroidx/compose/animation/core/AnimationSpec;IFLjava/util/List;Ljava/util/List;F)V +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerTheme;->(Landroidx/compose/animation/core/AnimationSpec;IFLjava/util/List;Ljava/util/List;FLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerTheme;->getAnimationSpec()Landroidx/compose/animation/core/AnimationSpec; +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerTheme;->getBlendMode-0nO6VwU()I +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerTheme;->getRotation()F +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerTheme;->getShaderColorStops()Ljava/util/List; +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerTheme;->getShaderColors()Ljava/util/List; +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerTheme;->getShimmerWidth-D9Ej5fM()F +Lcom/artemchep/keyguard/ui/shimmer/ShimmerThemeKt; +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerThemeKt;->()V +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerThemeKt;->getDefaultShimmerTheme()Lcom/artemchep/keyguard/ui/shimmer/ShimmerTheme; +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerThemeKt;->getLocalShimmerTheme()Landroidx/compose/runtime/ProvidableCompositionLocal; +Lcom/artemchep/keyguard/ui/shimmer/ShimmerThemeKt$LocalShimmerTheme$1; +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerThemeKt$LocalShimmerTheme$1;->()V +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerThemeKt$LocalShimmerTheme$1;->()V +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerThemeKt$LocalShimmerTheme$1;->invoke()Lcom/artemchep/keyguard/ui/shimmer/ShimmerTheme; +HSPLcom/artemchep/keyguard/ui/shimmer/ShimmerThemeKt$LocalShimmerTheme$1;->invoke()Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/shimmer/UnclippedBoundsInWindowKt; +HSPLcom/artemchep/keyguard/ui/shimmer/UnclippedBoundsInWindowKt;->unclippedBoundsInWindow(Landroidx/compose/ui/layout/LayoutCoordinates;)Landroidx/compose/ui/geometry/Rect; +Lcom/artemchep/keyguard/ui/skeleton/ComposableSingletons$SkeletonFilterKt; +HSPLcom/artemchep/keyguard/ui/skeleton/ComposableSingletons$SkeletonFilterKt;->()V +HSPLcom/artemchep/keyguard/ui/skeleton/ComposableSingletons$SkeletonFilterKt;->()V +HSPLcom/artemchep/keyguard/ui/skeleton/ComposableSingletons$SkeletonFilterKt;->getLambda-1$common_playStoreRelease()Lkotlin/jvm/functions/Function2; +Lcom/artemchep/keyguard/ui/skeleton/ComposableSingletons$SkeletonFilterKt$lambda-1$1; +HSPLcom/artemchep/keyguard/ui/skeleton/ComposableSingletons$SkeletonFilterKt$lambda-1$1;->()V +HSPLcom/artemchep/keyguard/ui/skeleton/ComposableSingletons$SkeletonFilterKt$lambda-1$1;->()V +HSPLcom/artemchep/keyguard/ui/skeleton/ComposableSingletons$SkeletonFilterKt$lambda-1$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/skeleton/ComposableSingletons$SkeletonFilterKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/skeleton/ComposableSingletons$SkeletonItemKt; +HSPLcom/artemchep/keyguard/ui/skeleton/ComposableSingletons$SkeletonItemKt;->()V +HSPLcom/artemchep/keyguard/ui/skeleton/ComposableSingletons$SkeletonItemKt;->()V +HSPLcom/artemchep/keyguard/ui/skeleton/ComposableSingletons$SkeletonItemKt;->getLambda-1$common_playStoreRelease()Lkotlin/jvm/functions/Function3; +HSPLcom/artemchep/keyguard/ui/skeleton/ComposableSingletons$SkeletonItemKt;->getLambda-2$common_playStoreRelease()Lkotlin/jvm/functions/Function3; +Lcom/artemchep/keyguard/ui/skeleton/ComposableSingletons$SkeletonItemKt$lambda-1$1; +HSPLcom/artemchep/keyguard/ui/skeleton/ComposableSingletons$SkeletonItemKt$lambda-1$1;->()V +HSPLcom/artemchep/keyguard/ui/skeleton/ComposableSingletons$SkeletonItemKt$lambda-1$1;->()V +HSPLcom/artemchep/keyguard/ui/skeleton/ComposableSingletons$SkeletonItemKt$lambda-1$1;->invoke(Landroidx/compose/foundation/layout/BoxScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/skeleton/ComposableSingletons$SkeletonItemKt$lambda-1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/skeleton/ComposableSingletons$SkeletonItemKt$lambda-2$1; +HSPLcom/artemchep/keyguard/ui/skeleton/ComposableSingletons$SkeletonItemKt$lambda-2$1;->()V +HSPLcom/artemchep/keyguard/ui/skeleton/ComposableSingletons$SkeletonItemKt$lambda-2$1;->()V +HSPLcom/artemchep/keyguard/ui/skeleton/ComposableSingletons$SkeletonItemKt$lambda-2$1;->invoke(Landroidx/compose/foundation/layout/RowScope;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/skeleton/ComposableSingletons$SkeletonItemKt$lambda-2$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/skeleton/SkeletonButtonKt; +HSPLcom/artemchep/keyguard/ui/skeleton/SkeletonButtonKt;->SkeletonButton(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V +Lcom/artemchep/keyguard/ui/skeleton/SkeletonButtonKt$SkeletonButton$1; +HSPLcom/artemchep/keyguard/ui/skeleton/SkeletonButtonKt$SkeletonButton$1;->(Landroidx/compose/ui/Modifier;II)V +Lcom/artemchep/keyguard/ui/skeleton/SkeletonCheckBoxKt; +HSPLcom/artemchep/keyguard/ui/skeleton/SkeletonCheckBoxKt;->SkeletonCheckbox(Landroidx/compose/ui/Modifier;ZLandroidx/compose/runtime/Composer;II)V +Lcom/artemchep/keyguard/ui/skeleton/SkeletonCheckBoxKt$SkeletonCheckbox$2; +HSPLcom/artemchep/keyguard/ui/skeleton/SkeletonCheckBoxKt$SkeletonCheckbox$2;->(Landroidx/compose/ui/Modifier;ZII)V +Lcom/artemchep/keyguard/ui/skeleton/SkeletonFilterKt; +HSPLcom/artemchep/keyguard/ui/skeleton/SkeletonFilterKt;->SkeletonFilter(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V +Lcom/artemchep/keyguard/ui/skeleton/SkeletonItemKt; +HSPLcom/artemchep/keyguard/ui/skeleton/SkeletonItemKt;->SkeletonItem(ZFLjava/lang/Float;Landroidx/compose/runtime/Composer;II)V +Lcom/artemchep/keyguard/ui/skeleton/SkeletonItemKt$SkeletonItem$1; +HSPLcom/artemchep/keyguard/ui/skeleton/SkeletonItemKt$SkeletonItem$1;->(Ljava/lang/Float;)V +HSPLcom/artemchep/keyguard/ui/skeleton/SkeletonItemKt$SkeletonItem$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/skeleton/SkeletonItemKt$SkeletonItem$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/skeleton/SkeletonItemKt$SkeletonItem$2; +HSPLcom/artemchep/keyguard/ui/skeleton/SkeletonItemKt$SkeletonItem$2;->(F)V +HSPLcom/artemchep/keyguard/ui/skeleton/SkeletonItemKt$SkeletonItem$2;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/skeleton/SkeletonItemKt$SkeletonItem$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/skeleton/SkeletonTextFieldKt; +HSPLcom/artemchep/keyguard/ui/skeleton/SkeletonTextFieldKt;->SkeletonTextField(Landroidx/compose/ui/Modifier;Landroidx/compose/runtime/Composer;II)V +Lcom/artemchep/keyguard/ui/skeleton/SkeletonTextFieldKt$SkeletonTextField$1; +HSPLcom/artemchep/keyguard/ui/skeleton/SkeletonTextFieldKt$SkeletonTextField$1;->(Landroidx/compose/ui/Modifier;II)V +Lcom/artemchep/keyguard/ui/skeleton/SkeletonTextKt; +HSPLcom/artemchep/keyguard/ui/skeleton/SkeletonTextKt;->SkeletonText(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/text/TextStyle;FLandroidx/compose/runtime/Composer;II)V +Lcom/artemchep/keyguard/ui/skeleton/SkeletonTextKt$SkeletonText$1; +HSPLcom/artemchep/keyguard/ui/skeleton/SkeletonTextKt$SkeletonText$1;->(Landroidx/compose/ui/Modifier;Landroidx/compose/ui/text/TextStyle;FII)V +Lcom/artemchep/keyguard/ui/theme/ColorKt; +HSPLcom/artemchep/keyguard/ui/theme/ColorKt;->combineAlpha-DxMtmZc(JF)J +Lcom/artemchep/keyguard/ui/theme/Dimen; +HSPLcom/artemchep/keyguard/ui/theme/Dimen;->()V +HSPLcom/artemchep/keyguard/ui/theme/Dimen;->(FFFF)V +HSPLcom/artemchep/keyguard/ui/theme/Dimen;->(FFFFILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/ui/theme/Dimen;->(FFFFLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/ui/theme/Dimen;->getButtonIconPadding-D9Ej5fM()F +HSPLcom/artemchep/keyguard/ui/theme/Dimen;->getHorizontalPadding-D9Ej5fM()F +HSPLcom/artemchep/keyguard/ui/theme/Dimen;->getVerticalPadding-D9Ej5fM()F +Lcom/artemchep/keyguard/ui/theme/Dimen$Companion; +HSPLcom/artemchep/keyguard/ui/theme/Dimen$Companion;->()V +HSPLcom/artemchep/keyguard/ui/theme/Dimen$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/artemchep/keyguard/ui/theme/Dimen$Companion;->normal()Lcom/artemchep/keyguard/ui/theme/Dimen; +Lcom/artemchep/keyguard/ui/theme/DimenKt; +HSPLcom/artemchep/keyguard/ui/theme/DimenKt;->()V +HSPLcom/artemchep/keyguard/ui/theme/DimenKt;->getDimens(Landroidx/compose/runtime/Composer;I)Lcom/artemchep/keyguard/ui/theme/Dimen; +Lcom/artemchep/keyguard/ui/theme/DimenKt$LocalDimens$1; +HSPLcom/artemchep/keyguard/ui/theme/DimenKt$LocalDimens$1;->()V +HSPLcom/artemchep/keyguard/ui/theme/DimenKt$LocalDimens$1;->()V +HSPLcom/artemchep/keyguard/ui/theme/DimenKt$LocalDimens$1;->invoke()Lcom/artemchep/keyguard/ui/theme/Dimen; +HSPLcom/artemchep/keyguard/ui/theme/DimenKt$LocalDimens$1;->invoke()Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/theme/PlatformTheme; +HSPLcom/artemchep/keyguard/ui/theme/PlatformTheme;->SystemUiThemeEffect(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/theme/PlatformTheme;->appDynamicLightColorScheme(Landroidx/compose/runtime/Composer;I)Landroidx/compose/material3/ColorScheme; +Lcom/artemchep/keyguard/ui/theme/PlatformTheme$SystemUiThemeEffect$1$1; +HSPLcom/artemchep/keyguard/ui/theme/PlatformTheme$SystemUiThemeEffect$1$1;->(Lcom/google/accompanist/systemuicontroller/SystemUiController;Z)V +HSPLcom/artemchep/keyguard/ui/theme/PlatformTheme$SystemUiThemeEffect$1$1;->invoke()Ljava/lang/Object; +HSPLcom/artemchep/keyguard/ui/theme/PlatformTheme$SystemUiThemeEffect$1$1;->invoke()V +Lcom/artemchep/keyguard/ui/theme/PlatformTheme$SystemUiThemeEffect$2; +HSPLcom/artemchep/keyguard/ui/theme/PlatformTheme$SystemUiThemeEffect$2;->(I)V +Lcom/artemchep/keyguard/ui/theme/ThemeKt; +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt;->()V +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt;->KeyguardTheme$lambda$10(Landroidx/compose/runtime/State;)Z +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt;->KeyguardTheme$lambda$12(Landroidx/compose/runtime/State;)Lcom/artemchep/keyguard/common/model/AppColors; +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt;->KeyguardTheme$lambda$14(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetFont; +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt;->KeyguardTheme$lambda$4(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetTheme; +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt;->KeyguardTheme$lambda$5(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetThemeUseAmoledDark; +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt;->KeyguardTheme$lambda$6(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetColors; +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt;->KeyguardTheme$lambda$8(Landroidx/compose/runtime/State;)Lcom/artemchep/keyguard/common/model/AppTheme; +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt;->KeyguardTheme(Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt;->access$KeyguardTheme$lambda$14(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetFont; +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt;->access$KeyguardTheme$lambda$4(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetTheme; +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt;->access$KeyguardTheme$lambda$5(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetThemeUseAmoledDark; +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt;->access$KeyguardTheme$lambda$6(Lkotlin/Lazy;)Lcom/artemchep/keyguard/common/usecase/GetColors; +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt;->access$buildContentColor(FZ)J +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt;->appColorScheme(Lcom/artemchep/keyguard/common/model/AppColors;ZLandroidx/compose/runtime/Composer;I)Landroidx/compose/material3/ColorScheme; +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt;->buildContainerColor(Landroidx/compose/material3/ColorScheme;FLandroidx/compose/runtime/Composer;I)J +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt;->buildContentColor(FZ)J +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt;->buildContentColor(Landroidx/compose/material3/ColorScheme;FLandroidx/compose/runtime/Composer;I)J +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt;->getInfo(Landroidx/compose/material3/ColorScheme;Landroidx/compose/runtime/Composer;I)J +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt;->getInfoContainer(Landroidx/compose/material3/ColorScheme;Landroidx/compose/runtime/Composer;I)J +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt;->getMonoFontFamily(Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/text/font/FontFamily; +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt;->getRobotoMonoFontFamily(Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/text/font/FontFamily; +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt;->get_error(Landroidx/compose/material3/ColorScheme;Landroidx/compose/runtime/Composer;I)J +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt;->get_errorContainer(Landroidx/compose/material3/ColorScheme;Landroidx/compose/runtime/Composer;I)J +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt;->get_onErrorContainer(Landroidx/compose/material3/ColorScheme;Landroidx/compose/runtime/Composer;I)J +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt;->isDark(Landroidx/compose/material3/ColorScheme;)Z +Lcom/artemchep/keyguard/ui/theme/ThemeKt$KeyguardTheme$$inlined$rememberInstance$1; +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt$KeyguardTheme$$inlined$rememberInstance$1;->()V +Lcom/artemchep/keyguard/ui/theme/ThemeKt$KeyguardTheme$$inlined$rememberInstance$2; +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt$KeyguardTheme$$inlined$rememberInstance$2;->()V +Lcom/artemchep/keyguard/ui/theme/ThemeKt$KeyguardTheme$$inlined$rememberInstance$3; +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt$KeyguardTheme$$inlined$rememberInstance$3;->()V +Lcom/artemchep/keyguard/ui/theme/ThemeKt$KeyguardTheme$$inlined$rememberInstance$4; +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt$KeyguardTheme$$inlined$rememberInstance$4;->()V +Lcom/artemchep/keyguard/ui/theme/ThemeKt$KeyguardTheme$1; +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt$KeyguardTheme$1;->(ZLandroidx/compose/material3/ColorScheme;Lkotlin/jvm/functions/Function2;)V +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt$KeyguardTheme$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt$KeyguardTheme$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/theme/ThemeKt$KeyguardTheme$1$1; +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt$KeyguardTheme$1$1;->(Lkotlin/jvm/functions/Function2;)V +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt$KeyguardTheme$1$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt$KeyguardTheme$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/theme/ThemeKt$KeyguardTheme$2; +HSPLcom/artemchep/keyguard/ui/theme/ThemeKt$KeyguardTheme$2;->(Lkotlin/jvm/functions/Function2;I)V +Lcom/artemchep/keyguard/ui/toolbar/CustomToolbarKt; +HSPLcom/artemchep/keyguard/ui/toolbar/CustomToolbarKt;->CustomToolbar$lambda$0(Landroidx/compose/runtime/State;)J +HSPLcom/artemchep/keyguard/ui/toolbar/CustomToolbarKt;->CustomToolbar(Landroidx/compose/ui/Modifier;Landroidx/compose/material3/TopAppBarScrollBehavior;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;II)V +Lcom/artemchep/keyguard/ui/toolbar/CustomToolbarKt$CustomToolbar$1; +HSPLcom/artemchep/keyguard/ui/toolbar/CustomToolbarKt$CustomToolbar$1;->(Landroidx/compose/foundation/layout/WindowInsets;Landroidx/compose/material3/TopAppBarScrollBehavior;Lkotlin/jvm/functions/Function2;)V +HSPLcom/artemchep/keyguard/ui/toolbar/CustomToolbarKt$CustomToolbar$1;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/toolbar/CustomToolbarKt$CustomToolbar$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/toolbar/CustomToolbarKt$CustomToolbar$1$1$1; +HSPLcom/artemchep/keyguard/ui/toolbar/CustomToolbarKt$CustomToolbar$1$1$1;->(Landroidx/compose/material3/TopAppBarScrollBehavior;)V +HSPLcom/artemchep/keyguard/ui/toolbar/CustomToolbarKt$CustomToolbar$1$1$1;->invoke(Landroidx/compose/ui/layout/LayoutCoordinates;)V +HSPLcom/artemchep/keyguard/ui/toolbar/CustomToolbarKt$CustomToolbar$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/toolbar/CustomToolbarKt$CustomToolbar$2; +HSPLcom/artemchep/keyguard/ui/toolbar/CustomToolbarKt$CustomToolbar$2;->(Landroidx/compose/ui/Modifier;Landroidx/compose/material3/TopAppBarScrollBehavior;Lkotlin/jvm/functions/Function2;II)V +HSPLcom/artemchep/keyguard/ui/toolbar/CustomToolbarKt$CustomToolbar$2;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLcom/artemchep/keyguard/ui/toolbar/CustomToolbarKt$CustomToolbar$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/artemchep/keyguard/ui/util/DividerKt; +HSPLcom/artemchep/keyguard/ui/util/DividerKt;->Divider(Landroidx/compose/ui/Modifier;ZLandroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/ui/util/DividerKt;->VerticalDivider(Landroidx/compose/ui/Modifier;ZLandroidx/compose/runtime/Composer;II)V +HSPLcom/artemchep/keyguard/ui/util/DividerKt;->getDividerColor(Landroidx/compose/runtime/Composer;I)J +HSPLcom/artemchep/keyguard/ui/util/DividerKt;->getDividerSize()F +Lcom/artemchep/keyguard/ui/util/DividerKt$Divider$1; +HSPLcom/artemchep/keyguard/ui/util/DividerKt$Divider$1;->(Landroidx/compose/ui/Modifier;ZII)V +Lcom/fredporciuncula/flow/preferences/BasePreference; +HSPLcom/fredporciuncula/flow/preferences/BasePreference;->(Ljava/lang/String;Lkotlinx/coroutines/flow/Flow;Landroid/content/SharedPreferences;Lkotlin/coroutines/CoroutineContext;)V +HSPLcom/fredporciuncula/flow/preferences/BasePreference;->asFlow()Lkotlinx/coroutines/flow/Flow; +Lcom/fredporciuncula/flow/preferences/BasePreference$asFlow$$inlined$filter$1; +HSPLcom/fredporciuncula/flow/preferences/BasePreference$asFlow$$inlined$filter$1;->(Lkotlinx/coroutines/flow/Flow;Lcom/fredporciuncula/flow/preferences/BasePreference;)V +HSPLcom/fredporciuncula/flow/preferences/BasePreference$asFlow$$inlined$filter$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/fredporciuncula/flow/preferences/BasePreference$asFlow$$inlined$filter$1$2; +HSPLcom/fredporciuncula/flow/preferences/BasePreference$asFlow$$inlined$filter$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lcom/fredporciuncula/flow/preferences/BasePreference;)V +HSPLcom/fredporciuncula/flow/preferences/BasePreference$asFlow$$inlined$filter$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/fredporciuncula/flow/preferences/BasePreference$asFlow$$inlined$filter$1$2$1; +HSPLcom/fredporciuncula/flow/preferences/BasePreference$asFlow$$inlined$filter$1$2$1;->(Lcom/fredporciuncula/flow/preferences/BasePreference$asFlow$$inlined$filter$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/fredporciuncula/flow/preferences/BasePreference$asFlow$$inlined$map$1; +HSPLcom/fredporciuncula/flow/preferences/BasePreference$asFlow$$inlined$map$1;->(Lkotlinx/coroutines/flow/Flow;Lcom/fredporciuncula/flow/preferences/BasePreference;)V +HSPLcom/fredporciuncula/flow/preferences/BasePreference$asFlow$$inlined$map$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/fredporciuncula/flow/preferences/BasePreference$asFlow$$inlined$map$1$2; +HSPLcom/fredporciuncula/flow/preferences/BasePreference$asFlow$$inlined$map$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lcom/fredporciuncula/flow/preferences/BasePreference;)V +HSPLcom/fredporciuncula/flow/preferences/BasePreference$asFlow$$inlined$map$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/fredporciuncula/flow/preferences/BasePreference$asFlow$$inlined$map$1$2$1; +HSPLcom/fredporciuncula/flow/preferences/BasePreference$asFlow$$inlined$map$1$2$1;->(Lcom/fredporciuncula/flow/preferences/BasePreference$asFlow$$inlined$map$1$2;Lkotlin/coroutines/Continuation;)V +Lcom/fredporciuncula/flow/preferences/BasePreference$asFlow$2; +HSPLcom/fredporciuncula/flow/preferences/BasePreference$asFlow$2;->(Lkotlin/coroutines/Continuation;)V +HSPLcom/fredporciuncula/flow/preferences/BasePreference$asFlow$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/fredporciuncula/flow/preferences/BasePreference$asFlow$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/fredporciuncula/flow/preferences/BasePreference$asFlow$2;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/fredporciuncula/flow/preferences/BasePreference$asFlow$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/fredporciuncula/flow/preferences/BooleanPreference; +HSPLcom/fredporciuncula/flow/preferences/BooleanPreference;->(Ljava/lang/String;ZLkotlinx/coroutines/flow/Flow;Landroid/content/SharedPreferences;Lkotlin/coroutines/CoroutineContext;)V +HSPLcom/fredporciuncula/flow/preferences/BooleanPreference;->access$getSharedPreferences$p(Lcom/fredporciuncula/flow/preferences/BooleanPreference;)Landroid/content/SharedPreferences; +HSPLcom/fredporciuncula/flow/preferences/BooleanPreference;->get()Ljava/lang/Boolean; +HSPLcom/fredporciuncula/flow/preferences/BooleanPreference;->get()Ljava/lang/Object; +HSPLcom/fredporciuncula/flow/preferences/BooleanPreference;->getDefaultValue()Ljava/lang/Boolean; +HSPLcom/fredporciuncula/flow/preferences/BooleanPreference;->getKey()Ljava/lang/String; +HSPLcom/fredporciuncula/flow/preferences/BooleanPreference;->setAndCommit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/fredporciuncula/flow/preferences/BooleanPreference;->setAndCommit(ZLkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/fredporciuncula/flow/preferences/BooleanPreference$setAndCommit$2; +HSPLcom/fredporciuncula/flow/preferences/BooleanPreference$setAndCommit$2;->(Lcom/fredporciuncula/flow/preferences/BooleanPreference;ZLkotlin/coroutines/Continuation;)V +HSPLcom/fredporciuncula/flow/preferences/BooleanPreference$setAndCommit$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/fredporciuncula/flow/preferences/BooleanPreference$setAndCommit$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/fredporciuncula/flow/preferences/BooleanPreference$setAndCommit$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/fredporciuncula/flow/preferences/BooleanPreference$setAndCommit$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/fredporciuncula/flow/preferences/FlowSharedPreferences; +HSPLcom/fredporciuncula/flow/preferences/FlowSharedPreferences;->(Landroid/content/SharedPreferences;Lkotlin/coroutines/CoroutineContext;)V +HSPLcom/fredporciuncula/flow/preferences/FlowSharedPreferences;->(Landroid/content/SharedPreferences;Lkotlin/coroutines/CoroutineContext;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/fredporciuncula/flow/preferences/FlowSharedPreferences;->getBoolean(Ljava/lang/String;Z)Lcom/fredporciuncula/flow/preferences/Preference; +HSPLcom/fredporciuncula/flow/preferences/FlowSharedPreferences;->getLong(Ljava/lang/String;J)Lcom/fredporciuncula/flow/preferences/Preference; +HSPLcom/fredporciuncula/flow/preferences/FlowSharedPreferences;->getString(Ljava/lang/String;Ljava/lang/String;)Lcom/fredporciuncula/flow/preferences/Preference; +Lcom/fredporciuncula/flow/preferences/LongPreference; +HSPLcom/fredporciuncula/flow/preferences/LongPreference;->(Ljava/lang/String;JLkotlinx/coroutines/flow/Flow;Landroid/content/SharedPreferences;Lkotlin/coroutines/CoroutineContext;)V +HSPLcom/fredporciuncula/flow/preferences/LongPreference;->access$getSharedPreferences$p(Lcom/fredporciuncula/flow/preferences/LongPreference;)Landroid/content/SharedPreferences; +HSPLcom/fredporciuncula/flow/preferences/LongPreference;->getKey()Ljava/lang/String; +HSPLcom/fredporciuncula/flow/preferences/LongPreference;->setAndCommit(JLkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/fredporciuncula/flow/preferences/LongPreference;->setAndCommit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/fredporciuncula/flow/preferences/LongPreference$setAndCommit$2; +HSPLcom/fredporciuncula/flow/preferences/LongPreference$setAndCommit$2;->(Lcom/fredporciuncula/flow/preferences/LongPreference;JLkotlin/coroutines/Continuation;)V +HSPLcom/fredporciuncula/flow/preferences/LongPreference$setAndCommit$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/fredporciuncula/flow/preferences/LongPreference$setAndCommit$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/fredporciuncula/flow/preferences/LongPreference$setAndCommit$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/fredporciuncula/flow/preferences/LongPreference$setAndCommit$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/fredporciuncula/flow/preferences/Preference; +Lcom/fredporciuncula/flow/preferences/SharedPreferencesExtensionsKt; +HSPLcom/fredporciuncula/flow/preferences/SharedPreferencesExtensionsKt;->getKeyFlow(Landroid/content/SharedPreferences;)Lkotlinx/coroutines/flow/Flow; +Lcom/fredporciuncula/flow/preferences/SharedPreferencesExtensionsKt$keyFlow$1; +HSPLcom/fredporciuncula/flow/preferences/SharedPreferencesExtensionsKt$keyFlow$1;->$r8$lambda$ILt5lcHT_KsH_b03g0fr8T5gYPE(Lkotlinx/coroutines/channels/ProducerScope;Landroid/content/SharedPreferences;Ljava/lang/String;)V +HSPLcom/fredporciuncula/flow/preferences/SharedPreferencesExtensionsKt$keyFlow$1;->(Landroid/content/SharedPreferences;Lkotlin/coroutines/Continuation;)V +HSPLcom/fredporciuncula/flow/preferences/SharedPreferencesExtensionsKt$keyFlow$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/fredporciuncula/flow/preferences/SharedPreferencesExtensionsKt$keyFlow$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/fredporciuncula/flow/preferences/SharedPreferencesExtensionsKt$keyFlow$1;->invoke(Lkotlinx/coroutines/channels/ProducerScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/fredporciuncula/flow/preferences/SharedPreferencesExtensionsKt$keyFlow$1;->invokeSuspend$lambda$0(Lkotlinx/coroutines/channels/ProducerScope;Landroid/content/SharedPreferences;Ljava/lang/String;)V +HSPLcom/fredporciuncula/flow/preferences/SharedPreferencesExtensionsKt$keyFlow$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/fredporciuncula/flow/preferences/SharedPreferencesExtensionsKt$keyFlow$1$$ExternalSyntheticLambda0; +HSPLcom/fredporciuncula/flow/preferences/SharedPreferencesExtensionsKt$keyFlow$1$$ExternalSyntheticLambda0;->(Lkotlinx/coroutines/channels/ProducerScope;)V +HSPLcom/fredporciuncula/flow/preferences/SharedPreferencesExtensionsKt$keyFlow$1$$ExternalSyntheticLambda0;->onSharedPreferenceChanged(Landroid/content/SharedPreferences;Ljava/lang/String;)V +Lcom/fredporciuncula/flow/preferences/SharedPreferencesExtensionsKt$keyFlow$1$1; +HSPLcom/fredporciuncula/flow/preferences/SharedPreferencesExtensionsKt$keyFlow$1$1;->(Landroid/content/SharedPreferences;Landroid/content/SharedPreferences$OnSharedPreferenceChangeListener;)V +HSPLcom/fredporciuncula/flow/preferences/SharedPreferencesExtensionsKt$keyFlow$1$1;->invoke()Ljava/lang/Object; +HSPLcom/fredporciuncula/flow/preferences/SharedPreferencesExtensionsKt$keyFlow$1$1;->invoke()V +Lcom/fredporciuncula/flow/preferences/StringPreference; +HSPLcom/fredporciuncula/flow/preferences/StringPreference;->(Ljava/lang/String;Ljava/lang/String;Lkotlinx/coroutines/flow/Flow;Landroid/content/SharedPreferences;Lkotlin/coroutines/CoroutineContext;)V +HSPLcom/fredporciuncula/flow/preferences/StringPreference;->access$getSharedPreferences$p(Lcom/fredporciuncula/flow/preferences/StringPreference;)Landroid/content/SharedPreferences; +HSPLcom/fredporciuncula/flow/preferences/StringPreference;->get()Ljava/lang/Object; +HSPLcom/fredporciuncula/flow/preferences/StringPreference;->get()Ljava/lang/String; +HSPLcom/fredporciuncula/flow/preferences/StringPreference;->getDefaultValue()Ljava/lang/String; +HSPLcom/fredporciuncula/flow/preferences/StringPreference;->getKey()Ljava/lang/String; +HSPLcom/fredporciuncula/flow/preferences/StringPreference;->setAndCommit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/fredporciuncula/flow/preferences/StringPreference;->setAndCommit(Ljava/lang/String;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lcom/fredporciuncula/flow/preferences/StringPreference$setAndCommit$2; +HSPLcom/fredporciuncula/flow/preferences/StringPreference$setAndCommit$2;->(Lcom/fredporciuncula/flow/preferences/StringPreference;Ljava/lang/String;Lkotlin/coroutines/Continuation;)V +HSPLcom/fredporciuncula/flow/preferences/StringPreference$setAndCommit$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/fredporciuncula/flow/preferences/StringPreference$setAndCommit$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/fredporciuncula/flow/preferences/StringPreference$setAndCommit$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/fredporciuncula/flow/preferences/StringPreference$setAndCommit$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/google/accompanist/systemuicontroller/AndroidSystemUiController; +HSPLcom/google/accompanist/systemuicontroller/AndroidSystemUiController;->(Landroid/view/View;Landroid/view/Window;)V +HSPLcom/google/accompanist/systemuicontroller/AndroidSystemUiController;->setNavigationBarColor-Iv8Zu3U(JZZLkotlin/jvm/functions/Function1;)V +HSPLcom/google/accompanist/systemuicontroller/AndroidSystemUiController;->setNavigationBarContrastEnforced(Z)V +HSPLcom/google/accompanist/systemuicontroller/AndroidSystemUiController;->setNavigationBarDarkContentEnabled(Z)V +HSPLcom/google/accompanist/systemuicontroller/AndroidSystemUiController;->setStatusBarColor-ek8zF_U(JZLkotlin/jvm/functions/Function1;)V +HSPLcom/google/accompanist/systemuicontroller/AndroidSystemUiController;->setStatusBarDarkContentEnabled(Z)V +Lcom/google/accompanist/systemuicontroller/SystemUiController; +HSPLcom/google/accompanist/systemuicontroller/SystemUiController;->setSystemBarsColor-Iv8Zu3U$default(Lcom/google/accompanist/systemuicontroller/SystemUiController;JZZLkotlin/jvm/functions/Function1;ILjava/lang/Object;)V +HSPLcom/google/accompanist/systemuicontroller/SystemUiController;->setSystemBarsColor-Iv8Zu3U(JZZLkotlin/jvm/functions/Function1;)V +Lcom/google/accompanist/systemuicontroller/SystemUiControllerKt; +HSPLcom/google/accompanist/systemuicontroller/SystemUiControllerKt;->()V +HSPLcom/google/accompanist/systemuicontroller/SystemUiControllerKt;->access$getBlackScrimmed$p()Lkotlin/jvm/functions/Function1; +HSPLcom/google/accompanist/systemuicontroller/SystemUiControllerKt;->findWindow(Landroid/content/Context;)Landroid/view/Window; +HSPLcom/google/accompanist/systemuicontroller/SystemUiControllerKt;->findWindow(Landroidx/compose/runtime/Composer;I)Landroid/view/Window; +HSPLcom/google/accompanist/systemuicontroller/SystemUiControllerKt;->rememberSystemUiController(Landroid/view/Window;Landroidx/compose/runtime/Composer;II)Lcom/google/accompanist/systemuicontroller/SystemUiController; +Lcom/google/accompanist/systemuicontroller/SystemUiControllerKt$BlackScrimmed$1; +HSPLcom/google/accompanist/systemuicontroller/SystemUiControllerKt$BlackScrimmed$1;->()V +HSPLcom/google/accompanist/systemuicontroller/SystemUiControllerKt$BlackScrimmed$1;->()V +Lcom/google/android/datatransport/AutoValue_Event; +HSPLcom/google/android/datatransport/AutoValue_Event;->(Ljava/lang/Integer;Ljava/lang/Object;Lcom/google/android/datatransport/Priority;)V +HSPLcom/google/android/datatransport/AutoValue_Event;->getCode()Ljava/lang/Integer; +HSPLcom/google/android/datatransport/AutoValue_Event;->getPayload()Ljava/lang/Object; +HSPLcom/google/android/datatransport/AutoValue_Event;->getPriority()Lcom/google/android/datatransport/Priority; +Lcom/google/android/datatransport/Encoding; +HSPLcom/google/android/datatransport/Encoding;->(Ljava/lang/String;)V +HSPLcom/google/android/datatransport/Encoding;->equals(Ljava/lang/Object;)Z +HSPLcom/google/android/datatransport/Encoding;->getName()Ljava/lang/String; +HSPLcom/google/android/datatransport/Encoding;->hashCode()I +HSPLcom/google/android/datatransport/Encoding;->of(Ljava/lang/String;)Lcom/google/android/datatransport/Encoding; +Lcom/google/android/datatransport/Event; +HSPLcom/google/android/datatransport/Event;->()V +HSPLcom/google/android/datatransport/Event;->ofData(Ljava/lang/Object;)Lcom/google/android/datatransport/Event; +Lcom/google/android/datatransport/Priority; +HSPLcom/google/android/datatransport/Priority;->()V +HSPLcom/google/android/datatransport/Priority;->(Ljava/lang/String;I)V +HSPLcom/google/android/datatransport/Priority;->values()[Lcom/google/android/datatransport/Priority; +Lcom/google/android/datatransport/Transformer; +Lcom/google/android/datatransport/Transport; +Lcom/google/android/datatransport/TransportFactory; +Lcom/google/android/datatransport/TransportScheduleCallback; +Lcom/google/android/datatransport/cct/CCTDestination; +HSPLcom/google/android/datatransport/cct/CCTDestination;->()V +HSPLcom/google/android/datatransport/cct/CCTDestination;->(Ljava/lang/String;Ljava/lang/String;)V +HSPLcom/google/android/datatransport/cct/CCTDestination;->asByteArray()[B +HSPLcom/google/android/datatransport/cct/CCTDestination;->getExtras()[B +HSPLcom/google/android/datatransport/cct/CCTDestination;->getName()Ljava/lang/String; +HSPLcom/google/android/datatransport/cct/CCTDestination;->getSupportedEncodings()Ljava/util/Set; +Lcom/google/android/datatransport/cct/CctBackendFactory; +HSPLcom/google/android/datatransport/cct/CctBackendFactory;->()V +HSPLcom/google/android/datatransport/cct/CctBackendFactory;->create(Lcom/google/android/datatransport/runtime/backends/CreationContext;)Lcom/google/android/datatransport/runtime/backends/TransportBackend; +Lcom/google/android/datatransport/cct/CctTransportBackend; +HSPLcom/google/android/datatransport/cct/CctTransportBackend;->(Landroid/content/Context;Lcom/google/android/datatransport/runtime/time/Clock;Lcom/google/android/datatransport/runtime/time/Clock;)V +HSPLcom/google/android/datatransport/cct/CctTransportBackend;->(Landroid/content/Context;Lcom/google/android/datatransport/runtime/time/Clock;Lcom/google/android/datatransport/runtime/time/Clock;I)V +HSPLcom/google/android/datatransport/cct/CctTransportBackend;->decorate(Lcom/google/android/datatransport/runtime/EventInternal;)Lcom/google/android/datatransport/runtime/EventInternal; +HSPLcom/google/android/datatransport/cct/CctTransportBackend;->getNetSubtypeValue(Landroid/net/NetworkInfo;)I +HSPLcom/google/android/datatransport/cct/CctTransportBackend;->getNetTypeValue(Landroid/net/NetworkInfo;)I +HSPLcom/google/android/datatransport/cct/CctTransportBackend;->getPackageVersionCode(Landroid/content/Context;)I +HSPLcom/google/android/datatransport/cct/CctTransportBackend;->getTelephonyManager(Landroid/content/Context;)Landroid/telephony/TelephonyManager; +HSPLcom/google/android/datatransport/cct/CctTransportBackend;->getTzOffset()J +HSPLcom/google/android/datatransport/cct/CctTransportBackend;->parseUrlOrThrow(Ljava/lang/String;)Ljava/net/URL; +Lcom/google/android/datatransport/cct/StringMerger; +HSPLcom/google/android/datatransport/cct/StringMerger;->mergeStrings(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; +Lcom/google/android/datatransport/cct/internal/AndroidClientInfo; +Lcom/google/android/datatransport/cct/internal/AutoBatchedLogRequestEncoder; +HSPLcom/google/android/datatransport/cct/internal/AutoBatchedLogRequestEncoder;->()V +HSPLcom/google/android/datatransport/cct/internal/AutoBatchedLogRequestEncoder;->()V +HSPLcom/google/android/datatransport/cct/internal/AutoBatchedLogRequestEncoder;->configure(Lcom/google/firebase/encoders/config/EncoderConfig;)V +Lcom/google/android/datatransport/cct/internal/AutoBatchedLogRequestEncoder$AndroidClientInfoEncoder; +HSPLcom/google/android/datatransport/cct/internal/AutoBatchedLogRequestEncoder$AndroidClientInfoEncoder;->()V +HSPLcom/google/android/datatransport/cct/internal/AutoBatchedLogRequestEncoder$AndroidClientInfoEncoder;->()V +Lcom/google/android/datatransport/cct/internal/AutoBatchedLogRequestEncoder$BatchedLogRequestEncoder; +HSPLcom/google/android/datatransport/cct/internal/AutoBatchedLogRequestEncoder$BatchedLogRequestEncoder;->()V +HSPLcom/google/android/datatransport/cct/internal/AutoBatchedLogRequestEncoder$BatchedLogRequestEncoder;->()V +Lcom/google/android/datatransport/cct/internal/AutoBatchedLogRequestEncoder$ClientInfoEncoder; +HSPLcom/google/android/datatransport/cct/internal/AutoBatchedLogRequestEncoder$ClientInfoEncoder;->()V +HSPLcom/google/android/datatransport/cct/internal/AutoBatchedLogRequestEncoder$ClientInfoEncoder;->()V +Lcom/google/android/datatransport/cct/internal/AutoBatchedLogRequestEncoder$LogEventEncoder; +HSPLcom/google/android/datatransport/cct/internal/AutoBatchedLogRequestEncoder$LogEventEncoder;->()V +HSPLcom/google/android/datatransport/cct/internal/AutoBatchedLogRequestEncoder$LogEventEncoder;->()V +Lcom/google/android/datatransport/cct/internal/AutoBatchedLogRequestEncoder$LogRequestEncoder; +HSPLcom/google/android/datatransport/cct/internal/AutoBatchedLogRequestEncoder$LogRequestEncoder;->()V +HSPLcom/google/android/datatransport/cct/internal/AutoBatchedLogRequestEncoder$LogRequestEncoder;->()V +Lcom/google/android/datatransport/cct/internal/AutoBatchedLogRequestEncoder$NetworkConnectionInfoEncoder; +HSPLcom/google/android/datatransport/cct/internal/AutoBatchedLogRequestEncoder$NetworkConnectionInfoEncoder;->()V +HSPLcom/google/android/datatransport/cct/internal/AutoBatchedLogRequestEncoder$NetworkConnectionInfoEncoder;->()V +Lcom/google/android/datatransport/cct/internal/AutoValue_AndroidClientInfo; +Lcom/google/android/datatransport/cct/internal/AutoValue_BatchedLogRequest; +Lcom/google/android/datatransport/cct/internal/AutoValue_ClientInfo; +Lcom/google/android/datatransport/cct/internal/AutoValue_LogEvent; +Lcom/google/android/datatransport/cct/internal/AutoValue_LogRequest; +Lcom/google/android/datatransport/cct/internal/AutoValue_NetworkConnectionInfo; +Lcom/google/android/datatransport/cct/internal/BatchedLogRequest; +HSPLcom/google/android/datatransport/cct/internal/BatchedLogRequest;->createDataEncoder()Lcom/google/firebase/encoders/DataEncoder; +Lcom/google/android/datatransport/cct/internal/ClientInfo; +Lcom/google/android/datatransport/cct/internal/LogEvent; +Lcom/google/android/datatransport/cct/internal/LogRequest; +Lcom/google/android/datatransport/cct/internal/NetworkConnectionInfo; +Lcom/google/android/datatransport/cct/internal/NetworkConnectionInfo$MobileSubtype; +HSPLcom/google/android/datatransport/cct/internal/NetworkConnectionInfo$MobileSubtype;->()V +HSPLcom/google/android/datatransport/cct/internal/NetworkConnectionInfo$MobileSubtype;->(Ljava/lang/String;II)V +HSPLcom/google/android/datatransport/cct/internal/NetworkConnectionInfo$MobileSubtype;->getValue()I +Lcom/google/android/datatransport/runtime/AutoValue_EventInternal; +HSPLcom/google/android/datatransport/runtime/AutoValue_EventInternal;->(Ljava/lang/String;Ljava/lang/Integer;Lcom/google/android/datatransport/runtime/EncodedPayload;JJLjava/util/Map;)V +HSPLcom/google/android/datatransport/runtime/AutoValue_EventInternal;->(Ljava/lang/String;Ljava/lang/Integer;Lcom/google/android/datatransport/runtime/EncodedPayload;JJLjava/util/Map;Lcom/google/android/datatransport/runtime/AutoValue_EventInternal$1;)V +HSPLcom/google/android/datatransport/runtime/AutoValue_EventInternal;->getAutoMetadata()Ljava/util/Map; +HSPLcom/google/android/datatransport/runtime/AutoValue_EventInternal;->getCode()Ljava/lang/Integer; +HSPLcom/google/android/datatransport/runtime/AutoValue_EventInternal;->getEncodedPayload()Lcom/google/android/datatransport/runtime/EncodedPayload; +HSPLcom/google/android/datatransport/runtime/AutoValue_EventInternal;->getEventMillis()J +HSPLcom/google/android/datatransport/runtime/AutoValue_EventInternal;->getTransportName()Ljava/lang/String; +HSPLcom/google/android/datatransport/runtime/AutoValue_EventInternal;->getUptimeMillis()J +Lcom/google/android/datatransport/runtime/AutoValue_EventInternal$Builder; +HSPLcom/google/android/datatransport/runtime/AutoValue_EventInternal$Builder;->()V +HSPLcom/google/android/datatransport/runtime/AutoValue_EventInternal$Builder;->build()Lcom/google/android/datatransport/runtime/EventInternal; +HSPLcom/google/android/datatransport/runtime/AutoValue_EventInternal$Builder;->getAutoMetadata()Ljava/util/Map; +HSPLcom/google/android/datatransport/runtime/AutoValue_EventInternal$Builder;->setAutoMetadata(Ljava/util/Map;)Lcom/google/android/datatransport/runtime/EventInternal$Builder; +HSPLcom/google/android/datatransport/runtime/AutoValue_EventInternal$Builder;->setCode(Ljava/lang/Integer;)Lcom/google/android/datatransport/runtime/EventInternal$Builder; +HSPLcom/google/android/datatransport/runtime/AutoValue_EventInternal$Builder;->setEncodedPayload(Lcom/google/android/datatransport/runtime/EncodedPayload;)Lcom/google/android/datatransport/runtime/EventInternal$Builder; +HSPLcom/google/android/datatransport/runtime/AutoValue_EventInternal$Builder;->setEventMillis(J)Lcom/google/android/datatransport/runtime/EventInternal$Builder; +HSPLcom/google/android/datatransport/runtime/AutoValue_EventInternal$Builder;->setTransportName(Ljava/lang/String;)Lcom/google/android/datatransport/runtime/EventInternal$Builder; +HSPLcom/google/android/datatransport/runtime/AutoValue_EventInternal$Builder;->setUptimeMillis(J)Lcom/google/android/datatransport/runtime/EventInternal$Builder; +Lcom/google/android/datatransport/runtime/AutoValue_SendRequest; +HSPLcom/google/android/datatransport/runtime/AutoValue_SendRequest;->(Lcom/google/android/datatransport/runtime/TransportContext;Ljava/lang/String;Lcom/google/android/datatransport/Event;Lcom/google/android/datatransport/Transformer;Lcom/google/android/datatransport/Encoding;)V +HSPLcom/google/android/datatransport/runtime/AutoValue_SendRequest;->(Lcom/google/android/datatransport/runtime/TransportContext;Ljava/lang/String;Lcom/google/android/datatransport/Event;Lcom/google/android/datatransport/Transformer;Lcom/google/android/datatransport/Encoding;Lcom/google/android/datatransport/runtime/AutoValue_SendRequest$1;)V +HSPLcom/google/android/datatransport/runtime/AutoValue_SendRequest;->getEncoding()Lcom/google/android/datatransport/Encoding; +HSPLcom/google/android/datatransport/runtime/AutoValue_SendRequest;->getEvent()Lcom/google/android/datatransport/Event; +HSPLcom/google/android/datatransport/runtime/AutoValue_SendRequest;->getTransformer()Lcom/google/android/datatransport/Transformer; +HSPLcom/google/android/datatransport/runtime/AutoValue_SendRequest;->getTransportContext()Lcom/google/android/datatransport/runtime/TransportContext; +HSPLcom/google/android/datatransport/runtime/AutoValue_SendRequest;->getTransportName()Ljava/lang/String; +Lcom/google/android/datatransport/runtime/AutoValue_SendRequest$Builder; +HSPLcom/google/android/datatransport/runtime/AutoValue_SendRequest$Builder;->()V +HSPLcom/google/android/datatransport/runtime/AutoValue_SendRequest$Builder;->build()Lcom/google/android/datatransport/runtime/SendRequest; +HSPLcom/google/android/datatransport/runtime/AutoValue_SendRequest$Builder;->setEncoding(Lcom/google/android/datatransport/Encoding;)Lcom/google/android/datatransport/runtime/SendRequest$Builder; +HSPLcom/google/android/datatransport/runtime/AutoValue_SendRequest$Builder;->setEvent(Lcom/google/android/datatransport/Event;)Lcom/google/android/datatransport/runtime/SendRequest$Builder; +HSPLcom/google/android/datatransport/runtime/AutoValue_SendRequest$Builder;->setTransformer(Lcom/google/android/datatransport/Transformer;)Lcom/google/android/datatransport/runtime/SendRequest$Builder; +HSPLcom/google/android/datatransport/runtime/AutoValue_SendRequest$Builder;->setTransportContext(Lcom/google/android/datatransport/runtime/TransportContext;)Lcom/google/android/datatransport/runtime/SendRequest$Builder; +HSPLcom/google/android/datatransport/runtime/AutoValue_SendRequest$Builder;->setTransportName(Ljava/lang/String;)Lcom/google/android/datatransport/runtime/SendRequest$Builder; +Lcom/google/android/datatransport/runtime/AutoValue_TransportContext; +HSPLcom/google/android/datatransport/runtime/AutoValue_TransportContext;->(Ljava/lang/String;[BLcom/google/android/datatransport/Priority;)V +HSPLcom/google/android/datatransport/runtime/AutoValue_TransportContext;->(Ljava/lang/String;[BLcom/google/android/datatransport/Priority;Lcom/google/android/datatransport/runtime/AutoValue_TransportContext$1;)V +HSPLcom/google/android/datatransport/runtime/AutoValue_TransportContext;->getBackendName()Ljava/lang/String; +HSPLcom/google/android/datatransport/runtime/AutoValue_TransportContext;->getExtras()[B +HSPLcom/google/android/datatransport/runtime/AutoValue_TransportContext;->getPriority()Lcom/google/android/datatransport/Priority; +Lcom/google/android/datatransport/runtime/AutoValue_TransportContext$Builder; +HSPLcom/google/android/datatransport/runtime/AutoValue_TransportContext$Builder;->()V +HSPLcom/google/android/datatransport/runtime/AutoValue_TransportContext$Builder;->build()Lcom/google/android/datatransport/runtime/TransportContext; +HSPLcom/google/android/datatransport/runtime/AutoValue_TransportContext$Builder;->setBackendName(Ljava/lang/String;)Lcom/google/android/datatransport/runtime/TransportContext$Builder; +HSPLcom/google/android/datatransport/runtime/AutoValue_TransportContext$Builder;->setExtras([B)Lcom/google/android/datatransport/runtime/TransportContext$Builder; +HSPLcom/google/android/datatransport/runtime/AutoValue_TransportContext$Builder;->setPriority(Lcom/google/android/datatransport/Priority;)Lcom/google/android/datatransport/runtime/TransportContext$Builder; +Lcom/google/android/datatransport/runtime/DaggerTransportRuntimeComponent; +HSPLcom/google/android/datatransport/runtime/DaggerTransportRuntimeComponent;->(Landroid/content/Context;)V +HSPLcom/google/android/datatransport/runtime/DaggerTransportRuntimeComponent;->(Landroid/content/Context;Lcom/google/android/datatransport/runtime/DaggerTransportRuntimeComponent$1;)V +HSPLcom/google/android/datatransport/runtime/DaggerTransportRuntimeComponent;->builder()Lcom/google/android/datatransport/runtime/TransportRuntimeComponent$Builder; +HSPLcom/google/android/datatransport/runtime/DaggerTransportRuntimeComponent;->getTransportRuntime()Lcom/google/android/datatransport/runtime/TransportRuntime; +HSPLcom/google/android/datatransport/runtime/DaggerTransportRuntimeComponent;->initialize(Landroid/content/Context;)V +Lcom/google/android/datatransport/runtime/DaggerTransportRuntimeComponent$Builder; +HSPLcom/google/android/datatransport/runtime/DaggerTransportRuntimeComponent$Builder;->()V +HSPLcom/google/android/datatransport/runtime/DaggerTransportRuntimeComponent$Builder;->(Lcom/google/android/datatransport/runtime/DaggerTransportRuntimeComponent$1;)V +HSPLcom/google/android/datatransport/runtime/DaggerTransportRuntimeComponent$Builder;->build()Lcom/google/android/datatransport/runtime/TransportRuntimeComponent; +HSPLcom/google/android/datatransport/runtime/DaggerTransportRuntimeComponent$Builder;->setApplicationContext(Landroid/content/Context;)Lcom/google/android/datatransport/runtime/DaggerTransportRuntimeComponent$Builder; +HSPLcom/google/android/datatransport/runtime/DaggerTransportRuntimeComponent$Builder;->setApplicationContext(Landroid/content/Context;)Lcom/google/android/datatransport/runtime/TransportRuntimeComponent$Builder; +Lcom/google/android/datatransport/runtime/Destination; +Lcom/google/android/datatransport/runtime/EncodedDestination; +Lcom/google/android/datatransport/runtime/EncodedPayload; +HSPLcom/google/android/datatransport/runtime/EncodedPayload;->(Lcom/google/android/datatransport/Encoding;[B)V +HSPLcom/google/android/datatransport/runtime/EncodedPayload;->getBytes()[B +HSPLcom/google/android/datatransport/runtime/EncodedPayload;->getEncoding()Lcom/google/android/datatransport/Encoding; +Lcom/google/android/datatransport/runtime/EventInternal; +HSPLcom/google/android/datatransport/runtime/EventInternal;->()V +HSPLcom/google/android/datatransport/runtime/EventInternal;->builder()Lcom/google/android/datatransport/runtime/EventInternal$Builder; +HSPLcom/google/android/datatransport/runtime/EventInternal;->getMetadata()Ljava/util/Map; +HSPLcom/google/android/datatransport/runtime/EventInternal;->toBuilder()Lcom/google/android/datatransport/runtime/EventInternal$Builder; +Lcom/google/android/datatransport/runtime/EventInternal$Builder; +HSPLcom/google/android/datatransport/runtime/EventInternal$Builder;->()V +HSPLcom/google/android/datatransport/runtime/EventInternal$Builder;->addMetadata(Ljava/lang/String;I)Lcom/google/android/datatransport/runtime/EventInternal$Builder; +HSPLcom/google/android/datatransport/runtime/EventInternal$Builder;->addMetadata(Ljava/lang/String;J)Lcom/google/android/datatransport/runtime/EventInternal$Builder; +HSPLcom/google/android/datatransport/runtime/EventInternal$Builder;->addMetadata(Ljava/lang/String;Ljava/lang/String;)Lcom/google/android/datatransport/runtime/EventInternal$Builder; +Lcom/google/android/datatransport/runtime/ExecutionModule; +HSPLcom/google/android/datatransport/runtime/ExecutionModule;->executor()Ljava/util/concurrent/Executor; +Lcom/google/android/datatransport/runtime/ExecutionModule_ExecutorFactory; +HSPLcom/google/android/datatransport/runtime/ExecutionModule_ExecutorFactory;->()V +HSPLcom/google/android/datatransport/runtime/ExecutionModule_ExecutorFactory;->create()Lcom/google/android/datatransport/runtime/ExecutionModule_ExecutorFactory; +HSPLcom/google/android/datatransport/runtime/ExecutionModule_ExecutorFactory;->executor()Ljava/util/concurrent/Executor; +HSPLcom/google/android/datatransport/runtime/ExecutionModule_ExecutorFactory;->get()Ljava/lang/Object; +HSPLcom/google/android/datatransport/runtime/ExecutionModule_ExecutorFactory;->get()Ljava/util/concurrent/Executor; +Lcom/google/android/datatransport/runtime/ExecutionModule_ExecutorFactory$InstanceHolder; +HSPLcom/google/android/datatransport/runtime/ExecutionModule_ExecutorFactory$InstanceHolder;->()V +HSPLcom/google/android/datatransport/runtime/ExecutionModule_ExecutorFactory$InstanceHolder;->access$000()Lcom/google/android/datatransport/runtime/ExecutionModule_ExecutorFactory; +Lcom/google/android/datatransport/runtime/SafeLoggingExecutor; +HSPLcom/google/android/datatransport/runtime/SafeLoggingExecutor;->(Ljava/util/concurrent/Executor;)V +HSPLcom/google/android/datatransport/runtime/SafeLoggingExecutor;->execute(Ljava/lang/Runnable;)V +Lcom/google/android/datatransport/runtime/SafeLoggingExecutor$SafeLoggingRunnable; +HSPLcom/google/android/datatransport/runtime/SafeLoggingExecutor$SafeLoggingRunnable;->(Ljava/lang/Runnable;)V +HSPLcom/google/android/datatransport/runtime/SafeLoggingExecutor$SafeLoggingRunnable;->run()V +Lcom/google/android/datatransport/runtime/SendRequest; +HSPLcom/google/android/datatransport/runtime/SendRequest;->()V +HSPLcom/google/android/datatransport/runtime/SendRequest;->builder()Lcom/google/android/datatransport/runtime/SendRequest$Builder; +HSPLcom/google/android/datatransport/runtime/SendRequest;->getPayload()[B +Lcom/google/android/datatransport/runtime/SendRequest$Builder; +HSPLcom/google/android/datatransport/runtime/SendRequest$Builder;->()V +Lcom/google/android/datatransport/runtime/TransportContext; +HSPLcom/google/android/datatransport/runtime/TransportContext;->()V +HSPLcom/google/android/datatransport/runtime/TransportContext;->builder()Lcom/google/android/datatransport/runtime/TransportContext$Builder; +HSPLcom/google/android/datatransport/runtime/TransportContext;->withPriority(Lcom/google/android/datatransport/Priority;)Lcom/google/android/datatransport/runtime/TransportContext; +Lcom/google/android/datatransport/runtime/TransportContext$Builder; +HSPLcom/google/android/datatransport/runtime/TransportContext$Builder;->()V +Lcom/google/android/datatransport/runtime/TransportFactoryImpl; +HSPLcom/google/android/datatransport/runtime/TransportFactoryImpl;->(Ljava/util/Set;Lcom/google/android/datatransport/runtime/TransportContext;Lcom/google/android/datatransport/runtime/TransportInternal;)V +HSPLcom/google/android/datatransport/runtime/TransportFactoryImpl;->getTransport(Ljava/lang/String;Ljava/lang/Class;Lcom/google/android/datatransport/Encoding;Lcom/google/android/datatransport/Transformer;)Lcom/google/android/datatransport/Transport; +Lcom/google/android/datatransport/runtime/TransportImpl; +HSPLcom/google/android/datatransport/runtime/TransportImpl;->(Lcom/google/android/datatransport/runtime/TransportContext;Ljava/lang/String;Lcom/google/android/datatransport/Encoding;Lcom/google/android/datatransport/Transformer;Lcom/google/android/datatransport/runtime/TransportInternal;)V +HSPLcom/google/android/datatransport/runtime/TransportImpl;->lambda$send$0(Ljava/lang/Exception;)V +HSPLcom/google/android/datatransport/runtime/TransportImpl;->schedule(Lcom/google/android/datatransport/Event;Lcom/google/android/datatransport/TransportScheduleCallback;)V +HSPLcom/google/android/datatransport/runtime/TransportImpl;->send(Lcom/google/android/datatransport/Event;)V +Lcom/google/android/datatransport/runtime/TransportImpl$$ExternalSyntheticLambda0; +HSPLcom/google/android/datatransport/runtime/TransportImpl$$ExternalSyntheticLambda0;->()V +HSPLcom/google/android/datatransport/runtime/TransportImpl$$ExternalSyntheticLambda0;->onSchedule(Ljava/lang/Exception;)V +Lcom/google/android/datatransport/runtime/TransportInternal; +Lcom/google/android/datatransport/runtime/TransportRuntime; +HSPLcom/google/android/datatransport/runtime/TransportRuntime;->()V +HSPLcom/google/android/datatransport/runtime/TransportRuntime;->(Lcom/google/android/datatransport/runtime/time/Clock;Lcom/google/android/datatransport/runtime/time/Clock;Lcom/google/android/datatransport/runtime/scheduling/Scheduler;Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/Uploader;Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkInitializer;)V +HSPLcom/google/android/datatransport/runtime/TransportRuntime;->convert(Lcom/google/android/datatransport/runtime/SendRequest;)Lcom/google/android/datatransport/runtime/EventInternal; +HSPLcom/google/android/datatransport/runtime/TransportRuntime;->getInstance()Lcom/google/android/datatransport/runtime/TransportRuntime; +HSPLcom/google/android/datatransport/runtime/TransportRuntime;->getSupportedEncodings(Lcom/google/android/datatransport/runtime/Destination;)Ljava/util/Set; +HSPLcom/google/android/datatransport/runtime/TransportRuntime;->initialize(Landroid/content/Context;)V +HSPLcom/google/android/datatransport/runtime/TransportRuntime;->newFactory(Lcom/google/android/datatransport/runtime/Destination;)Lcom/google/android/datatransport/TransportFactory; +HSPLcom/google/android/datatransport/runtime/TransportRuntime;->send(Lcom/google/android/datatransport/runtime/SendRequest;Lcom/google/android/datatransport/TransportScheduleCallback;)V +Lcom/google/android/datatransport/runtime/TransportRuntimeComponent; +HSPLcom/google/android/datatransport/runtime/TransportRuntimeComponent;->()V +Lcom/google/android/datatransport/runtime/TransportRuntimeComponent$Builder; +Lcom/google/android/datatransport/runtime/TransportRuntime_Factory; +HSPLcom/google/android/datatransport/runtime/TransportRuntime_Factory;->(Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;)V +HSPLcom/google/android/datatransport/runtime/TransportRuntime_Factory;->create(Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;)Lcom/google/android/datatransport/runtime/TransportRuntime_Factory; +HSPLcom/google/android/datatransport/runtime/TransportRuntime_Factory;->get()Lcom/google/android/datatransport/runtime/TransportRuntime; +HSPLcom/google/android/datatransport/runtime/TransportRuntime_Factory;->get()Ljava/lang/Object; +HSPLcom/google/android/datatransport/runtime/TransportRuntime_Factory;->newInstance(Lcom/google/android/datatransport/runtime/time/Clock;Lcom/google/android/datatransport/runtime/time/Clock;Lcom/google/android/datatransport/runtime/scheduling/Scheduler;Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/Uploader;Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkInitializer;)Lcom/google/android/datatransport/runtime/TransportRuntime; +Lcom/google/android/datatransport/runtime/backends/AutoValue_CreationContext; +HSPLcom/google/android/datatransport/runtime/backends/AutoValue_CreationContext;->(Landroid/content/Context;Lcom/google/android/datatransport/runtime/time/Clock;Lcom/google/android/datatransport/runtime/time/Clock;Ljava/lang/String;)V +HSPLcom/google/android/datatransport/runtime/backends/AutoValue_CreationContext;->getApplicationContext()Landroid/content/Context; +HSPLcom/google/android/datatransport/runtime/backends/AutoValue_CreationContext;->getMonotonicClock()Lcom/google/android/datatransport/runtime/time/Clock; +HSPLcom/google/android/datatransport/runtime/backends/AutoValue_CreationContext;->getWallClock()Lcom/google/android/datatransport/runtime/time/Clock; +Lcom/google/android/datatransport/runtime/backends/BackendFactory; +Lcom/google/android/datatransport/runtime/backends/BackendRegistry; +Lcom/google/android/datatransport/runtime/backends/CreationContext; +HSPLcom/google/android/datatransport/runtime/backends/CreationContext;->()V +HSPLcom/google/android/datatransport/runtime/backends/CreationContext;->create(Landroid/content/Context;Lcom/google/android/datatransport/runtime/time/Clock;Lcom/google/android/datatransport/runtime/time/Clock;Ljava/lang/String;)Lcom/google/android/datatransport/runtime/backends/CreationContext; +Lcom/google/android/datatransport/runtime/backends/CreationContextFactory; +HSPLcom/google/android/datatransport/runtime/backends/CreationContextFactory;->(Landroid/content/Context;Lcom/google/android/datatransport/runtime/time/Clock;Lcom/google/android/datatransport/runtime/time/Clock;)V +HSPLcom/google/android/datatransport/runtime/backends/CreationContextFactory;->create(Ljava/lang/String;)Lcom/google/android/datatransport/runtime/backends/CreationContext; +Lcom/google/android/datatransport/runtime/backends/CreationContextFactory_Factory; +HSPLcom/google/android/datatransport/runtime/backends/CreationContextFactory_Factory;->(Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;)V +HSPLcom/google/android/datatransport/runtime/backends/CreationContextFactory_Factory;->create(Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;)Lcom/google/android/datatransport/runtime/backends/CreationContextFactory_Factory; +HSPLcom/google/android/datatransport/runtime/backends/CreationContextFactory_Factory;->get()Lcom/google/android/datatransport/runtime/backends/CreationContextFactory; +HSPLcom/google/android/datatransport/runtime/backends/CreationContextFactory_Factory;->get()Ljava/lang/Object; +HSPLcom/google/android/datatransport/runtime/backends/CreationContextFactory_Factory;->newInstance(Landroid/content/Context;Lcom/google/android/datatransport/runtime/time/Clock;Lcom/google/android/datatransport/runtime/time/Clock;)Lcom/google/android/datatransport/runtime/backends/CreationContextFactory; +Lcom/google/android/datatransport/runtime/backends/MetadataBackendRegistry; +HSPLcom/google/android/datatransport/runtime/backends/MetadataBackendRegistry;->(Landroid/content/Context;Lcom/google/android/datatransport/runtime/backends/CreationContextFactory;)V +HSPLcom/google/android/datatransport/runtime/backends/MetadataBackendRegistry;->(Lcom/google/android/datatransport/runtime/backends/MetadataBackendRegistry$BackendFactoryProvider;Lcom/google/android/datatransport/runtime/backends/CreationContextFactory;)V +HSPLcom/google/android/datatransport/runtime/backends/MetadataBackendRegistry;->get(Ljava/lang/String;)Lcom/google/android/datatransport/runtime/backends/TransportBackend; +Lcom/google/android/datatransport/runtime/backends/MetadataBackendRegistry$BackendFactoryProvider; +HSPLcom/google/android/datatransport/runtime/backends/MetadataBackendRegistry$BackendFactoryProvider;->(Landroid/content/Context;)V +HSPLcom/google/android/datatransport/runtime/backends/MetadataBackendRegistry$BackendFactoryProvider;->discover(Landroid/content/Context;)Ljava/util/Map; +HSPLcom/google/android/datatransport/runtime/backends/MetadataBackendRegistry$BackendFactoryProvider;->get(Ljava/lang/String;)Lcom/google/android/datatransport/runtime/backends/BackendFactory; +HSPLcom/google/android/datatransport/runtime/backends/MetadataBackendRegistry$BackendFactoryProvider;->getBackendProviders()Ljava/util/Map; +HSPLcom/google/android/datatransport/runtime/backends/MetadataBackendRegistry$BackendFactoryProvider;->getMetadata(Landroid/content/Context;)Landroid/os/Bundle; +Lcom/google/android/datatransport/runtime/backends/MetadataBackendRegistry_Factory; +HSPLcom/google/android/datatransport/runtime/backends/MetadataBackendRegistry_Factory;->(Ljavax/inject/Provider;Ljavax/inject/Provider;)V +HSPLcom/google/android/datatransport/runtime/backends/MetadataBackendRegistry_Factory;->create(Ljavax/inject/Provider;Ljavax/inject/Provider;)Lcom/google/android/datatransport/runtime/backends/MetadataBackendRegistry_Factory; +HSPLcom/google/android/datatransport/runtime/backends/MetadataBackendRegistry_Factory;->get()Lcom/google/android/datatransport/runtime/backends/MetadataBackendRegistry; +HSPLcom/google/android/datatransport/runtime/backends/MetadataBackendRegistry_Factory;->get()Ljava/lang/Object; +HSPLcom/google/android/datatransport/runtime/backends/MetadataBackendRegistry_Factory;->newInstance(Landroid/content/Context;Ljava/lang/Object;)Lcom/google/android/datatransport/runtime/backends/MetadataBackendRegistry; +Lcom/google/android/datatransport/runtime/backends/TransportBackend; +Lcom/google/android/datatransport/runtime/backends/TransportBackendDiscovery; +Lcom/google/android/datatransport/runtime/dagger/Lazy; +Lcom/google/android/datatransport/runtime/dagger/internal/DoubleCheck; +HSPLcom/google/android/datatransport/runtime/dagger/internal/DoubleCheck;->()V +HSPLcom/google/android/datatransport/runtime/dagger/internal/DoubleCheck;->(Ljavax/inject/Provider;)V +HSPLcom/google/android/datatransport/runtime/dagger/internal/DoubleCheck;->get()Ljava/lang/Object; +HSPLcom/google/android/datatransport/runtime/dagger/internal/DoubleCheck;->provider(Ljavax/inject/Provider;)Ljavax/inject/Provider; +HSPLcom/google/android/datatransport/runtime/dagger/internal/DoubleCheck;->reentrantCheck(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lcom/google/android/datatransport/runtime/dagger/internal/Factory; +Lcom/google/android/datatransport/runtime/dagger/internal/InstanceFactory; +HSPLcom/google/android/datatransport/runtime/dagger/internal/InstanceFactory;->()V +HSPLcom/google/android/datatransport/runtime/dagger/internal/InstanceFactory;->(Ljava/lang/Object;)V +HSPLcom/google/android/datatransport/runtime/dagger/internal/InstanceFactory;->create(Ljava/lang/Object;)Lcom/google/android/datatransport/runtime/dagger/internal/Factory; +HSPLcom/google/android/datatransport/runtime/dagger/internal/InstanceFactory;->get()Ljava/lang/Object; +Lcom/google/android/datatransport/runtime/dagger/internal/Preconditions; +HSPLcom/google/android/datatransport/runtime/dagger/internal/Preconditions;->checkBuilderRequirement(Ljava/lang/Object;Ljava/lang/Class;)V +HSPLcom/google/android/datatransport/runtime/dagger/internal/Preconditions;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/android/datatransport/runtime/dagger/internal/Preconditions;->checkNotNull(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object; +Lcom/google/android/datatransport/runtime/logging/Logging; +HSPLcom/google/android/datatransport/runtime/logging/Logging;->d(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)V +HSPLcom/google/android/datatransport/runtime/logging/Logging;->d(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V +HSPLcom/google/android/datatransport/runtime/logging/Logging;->getTag(Ljava/lang/String;)Ljava/lang/String; +Lcom/google/android/datatransport/runtime/scheduling/DefaultScheduler; +HSPLcom/google/android/datatransport/runtime/scheduling/DefaultScheduler;->()V +HSPLcom/google/android/datatransport/runtime/scheduling/DefaultScheduler;->(Ljava/util/concurrent/Executor;Lcom/google/android/datatransport/runtime/backends/BackendRegistry;Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkScheduler;Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStore;Lcom/google/android/datatransport/runtime/synchronization/SynchronizationGuard;)V +HSPLcom/google/android/datatransport/runtime/scheduling/DefaultScheduler;->lambda$schedule$0$com-google-android-datatransport-runtime-scheduling-DefaultScheduler(Lcom/google/android/datatransport/runtime/TransportContext;Lcom/google/android/datatransport/runtime/EventInternal;)Ljava/lang/Object; +HSPLcom/google/android/datatransport/runtime/scheduling/DefaultScheduler;->lambda$schedule$1$com-google-android-datatransport-runtime-scheduling-DefaultScheduler(Lcom/google/android/datatransport/runtime/TransportContext;Lcom/google/android/datatransport/TransportScheduleCallback;Lcom/google/android/datatransport/runtime/EventInternal;)V +HSPLcom/google/android/datatransport/runtime/scheduling/DefaultScheduler;->schedule(Lcom/google/android/datatransport/runtime/TransportContext;Lcom/google/android/datatransport/runtime/EventInternal;Lcom/google/android/datatransport/TransportScheduleCallback;)V +Lcom/google/android/datatransport/runtime/scheduling/DefaultScheduler$$ExternalSyntheticLambda0; +HSPLcom/google/android/datatransport/runtime/scheduling/DefaultScheduler$$ExternalSyntheticLambda0;->(Lcom/google/android/datatransport/runtime/scheduling/DefaultScheduler;Lcom/google/android/datatransport/runtime/TransportContext;Lcom/google/android/datatransport/runtime/EventInternal;)V +HSPLcom/google/android/datatransport/runtime/scheduling/DefaultScheduler$$ExternalSyntheticLambda0;->execute()Ljava/lang/Object; +Lcom/google/android/datatransport/runtime/scheduling/DefaultScheduler$$ExternalSyntheticLambda1; +HSPLcom/google/android/datatransport/runtime/scheduling/DefaultScheduler$$ExternalSyntheticLambda1;->(Lcom/google/android/datatransport/runtime/scheduling/DefaultScheduler;Lcom/google/android/datatransport/runtime/TransportContext;Lcom/google/android/datatransport/TransportScheduleCallback;Lcom/google/android/datatransport/runtime/EventInternal;)V +HSPLcom/google/android/datatransport/runtime/scheduling/DefaultScheduler$$ExternalSyntheticLambda1;->run()V +Lcom/google/android/datatransport/runtime/scheduling/DefaultScheduler_Factory; +HSPLcom/google/android/datatransport/runtime/scheduling/DefaultScheduler_Factory;->(Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;)V +HSPLcom/google/android/datatransport/runtime/scheduling/DefaultScheduler_Factory;->create(Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;)Lcom/google/android/datatransport/runtime/scheduling/DefaultScheduler_Factory; +HSPLcom/google/android/datatransport/runtime/scheduling/DefaultScheduler_Factory;->get()Lcom/google/android/datatransport/runtime/scheduling/DefaultScheduler; +HSPLcom/google/android/datatransport/runtime/scheduling/DefaultScheduler_Factory;->get()Ljava/lang/Object; +HSPLcom/google/android/datatransport/runtime/scheduling/DefaultScheduler_Factory;->newInstance(Ljava/util/concurrent/Executor;Lcom/google/android/datatransport/runtime/backends/BackendRegistry;Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkScheduler;Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStore;Lcom/google/android/datatransport/runtime/synchronization/SynchronizationGuard;)Lcom/google/android/datatransport/runtime/scheduling/DefaultScheduler; +Lcom/google/android/datatransport/runtime/scheduling/Scheduler; +Lcom/google/android/datatransport/runtime/scheduling/SchedulingConfigModule; +HSPLcom/google/android/datatransport/runtime/scheduling/SchedulingConfigModule;->config(Lcom/google/android/datatransport/runtime/time/Clock;)Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig; +Lcom/google/android/datatransport/runtime/scheduling/SchedulingConfigModule_ConfigFactory; +HSPLcom/google/android/datatransport/runtime/scheduling/SchedulingConfigModule_ConfigFactory;->(Ljavax/inject/Provider;)V +HSPLcom/google/android/datatransport/runtime/scheduling/SchedulingConfigModule_ConfigFactory;->config(Lcom/google/android/datatransport/runtime/time/Clock;)Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig; +HSPLcom/google/android/datatransport/runtime/scheduling/SchedulingConfigModule_ConfigFactory;->create(Ljavax/inject/Provider;)Lcom/google/android/datatransport/runtime/scheduling/SchedulingConfigModule_ConfigFactory; +HSPLcom/google/android/datatransport/runtime/scheduling/SchedulingConfigModule_ConfigFactory;->get()Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig; +HSPLcom/google/android/datatransport/runtime/scheduling/SchedulingConfigModule_ConfigFactory;->get()Ljava/lang/Object; +Lcom/google/android/datatransport/runtime/scheduling/SchedulingModule; +HSPLcom/google/android/datatransport/runtime/scheduling/SchedulingModule;->workScheduler(Landroid/content/Context;Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStore;Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig;Lcom/google/android/datatransport/runtime/time/Clock;)Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkScheduler; +Lcom/google/android/datatransport/runtime/scheduling/SchedulingModule_WorkSchedulerFactory; +HSPLcom/google/android/datatransport/runtime/scheduling/SchedulingModule_WorkSchedulerFactory;->(Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;)V +HSPLcom/google/android/datatransport/runtime/scheduling/SchedulingModule_WorkSchedulerFactory;->create(Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;)Lcom/google/android/datatransport/runtime/scheduling/SchedulingModule_WorkSchedulerFactory; +HSPLcom/google/android/datatransport/runtime/scheduling/SchedulingModule_WorkSchedulerFactory;->get()Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkScheduler; +HSPLcom/google/android/datatransport/runtime/scheduling/SchedulingModule_WorkSchedulerFactory;->get()Ljava/lang/Object; +HSPLcom/google/android/datatransport/runtime/scheduling/SchedulingModule_WorkSchedulerFactory;->workScheduler(Landroid/content/Context;Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStore;Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig;Lcom/google/android/datatransport/runtime/time/Clock;)Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkScheduler; +Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/AutoValue_SchedulerConfig; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/AutoValue_SchedulerConfig;->(Lcom/google/android/datatransport/runtime/time/Clock;Ljava/util/Map;)V +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/AutoValue_SchedulerConfig;->getClock()Lcom/google/android/datatransport/runtime/time/Clock; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/AutoValue_SchedulerConfig;->getValues()Ljava/util/Map; +Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/AutoValue_SchedulerConfig_ConfigValue; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/AutoValue_SchedulerConfig_ConfigValue;->(JJLjava/util/Set;)V +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/AutoValue_SchedulerConfig_ConfigValue;->(JJLjava/util/Set;Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/AutoValue_SchedulerConfig_ConfigValue$1;)V +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/AutoValue_SchedulerConfig_ConfigValue;->getDelta()J +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/AutoValue_SchedulerConfig_ConfigValue;->getFlags()Ljava/util/Set; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/AutoValue_SchedulerConfig_ConfigValue;->getMaxAllowedDelay()J +Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/AutoValue_SchedulerConfig_ConfigValue$Builder; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/AutoValue_SchedulerConfig_ConfigValue$Builder;->()V +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/AutoValue_SchedulerConfig_ConfigValue$Builder;->build()Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig$ConfigValue; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/AutoValue_SchedulerConfig_ConfigValue$Builder;->setDelta(J)Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig$ConfigValue$Builder; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/AutoValue_SchedulerConfig_ConfigValue$Builder;->setFlags(Ljava/util/Set;)Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig$ConfigValue$Builder; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/AutoValue_SchedulerConfig_ConfigValue$Builder;->setMaxAllowedDelay(J)Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig$ConfigValue$Builder; +Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/JobInfoScheduler; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/JobInfoScheduler;->(Landroid/content/Context;Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStore;Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig;)V +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/JobInfoScheduler;->getJobId(Lcom/google/android/datatransport/runtime/TransportContext;)I +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/JobInfoScheduler;->isJobServiceOn(Landroid/app/job/JobScheduler;II)Z +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/JobInfoScheduler;->schedule(Lcom/google/android/datatransport/runtime/TransportContext;I)V +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/JobInfoScheduler;->schedule(Lcom/google/android/datatransport/runtime/TransportContext;IZ)V +Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/JobInfoSchedulerService; +Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig;->()V +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig;->adjustedExponentialBackoff(IJ)J +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig;->builder()Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig$Builder; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig;->configureJob(Landroid/app/job/JobInfo$Builder;Lcom/google/android/datatransport/Priority;JI)Landroid/app/job/JobInfo$Builder; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig;->create(Lcom/google/android/datatransport/runtime/time/Clock;Ljava/util/Map;)Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig;->getDefault(Lcom/google/android/datatransport/runtime/time/Clock;)Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig;->getScheduleDelay(Lcom/google/android/datatransport/Priority;JI)J +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig;->immutableSetOf([Ljava/lang/Object;)Ljava/util/Set; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig;->populateFlags(Landroid/app/job/JobInfo$Builder;Ljava/util/Set;)V +Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig$Builder; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig$Builder;->()V +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig$Builder;->addConfig(Lcom/google/android/datatransport/Priority;Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig$ConfigValue;)Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig$Builder; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig$Builder;->build()Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig$Builder;->setClock(Lcom/google/android/datatransport/runtime/time/Clock;)Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig$Builder; +Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig$ConfigValue; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig$ConfigValue;->()V +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig$ConfigValue;->builder()Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig$ConfigValue$Builder; +Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig$ConfigValue$Builder; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig$ConfigValue$Builder;->()V +Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig$Flag; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig$Flag;->()V +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/SchedulerConfig$Flag;->(Ljava/lang/String;I)V +Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/Uploader; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/Uploader;->(Landroid/content/Context;Lcom/google/android/datatransport/runtime/backends/BackendRegistry;Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStore;Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkScheduler;Ljava/util/concurrent/Executor;Lcom/google/android/datatransport/runtime/synchronization/SynchronizationGuard;Lcom/google/android/datatransport/runtime/time/Clock;Lcom/google/android/datatransport/runtime/time/Clock;Lcom/google/android/datatransport/runtime/scheduling/persistence/ClientHealthMetricsStore;)V +Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/Uploader_Factory; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/Uploader_Factory;->(Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;)V +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/Uploader_Factory;->create(Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;)Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/Uploader_Factory; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/Uploader_Factory;->get()Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/Uploader; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/Uploader_Factory;->get()Ljava/lang/Object; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/Uploader_Factory;->newInstance(Landroid/content/Context;Lcom/google/android/datatransport/runtime/backends/BackendRegistry;Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStore;Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkScheduler;Ljava/util/concurrent/Executor;Lcom/google/android/datatransport/runtime/synchronization/SynchronizationGuard;Lcom/google/android/datatransport/runtime/time/Clock;Lcom/google/android/datatransport/runtime/time/Clock;Lcom/google/android/datatransport/runtime/scheduling/persistence/ClientHealthMetricsStore;)Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/Uploader; +Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkInitializer; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkInitializer;->(Ljava/util/concurrent/Executor;Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStore;Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkScheduler;Lcom/google/android/datatransport/runtime/synchronization/SynchronizationGuard;)V +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkInitializer;->ensureContextsScheduled()V +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkInitializer;->lambda$ensureContextsScheduled$0$com-google-android-datatransport-runtime-scheduling-jobscheduling-WorkInitializer()Ljava/lang/Object; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkInitializer;->lambda$ensureContextsScheduled$1$com-google-android-datatransport-runtime-scheduling-jobscheduling-WorkInitializer()V +Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkInitializer$$ExternalSyntheticLambda0; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkInitializer$$ExternalSyntheticLambda0;->(Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkInitializer;)V +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkInitializer$$ExternalSyntheticLambda0;->execute()Ljava/lang/Object; +Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkInitializer$$ExternalSyntheticLambda1; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkInitializer$$ExternalSyntheticLambda1;->(Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkInitializer;)V +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkInitializer$$ExternalSyntheticLambda1;->run()V +Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkInitializer_Factory; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkInitializer_Factory;->(Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;)V +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkInitializer_Factory;->create(Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;)Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkInitializer_Factory; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkInitializer_Factory;->get()Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkInitializer; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkInitializer_Factory;->get()Ljava/lang/Object; +HSPLcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkInitializer_Factory;->newInstance(Ljava/util/concurrent/Executor;Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStore;Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkScheduler;Lcom/google/android/datatransport/runtime/synchronization/SynchronizationGuard;)Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkInitializer; +Lcom/google/android/datatransport/runtime/scheduling/jobscheduling/WorkScheduler; +Lcom/google/android/datatransport/runtime/scheduling/persistence/AutoValue_EventStoreConfig; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/AutoValue_EventStoreConfig;->(JIIJI)V +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/AutoValue_EventStoreConfig;->(JIIJILcom/google/android/datatransport/runtime/scheduling/persistence/AutoValue_EventStoreConfig$1;)V +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/AutoValue_EventStoreConfig;->getMaxBlobByteSizePerRow()I +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/AutoValue_EventStoreConfig;->getMaxStorageSizeInBytes()J +Lcom/google/android/datatransport/runtime/scheduling/persistence/AutoValue_EventStoreConfig$Builder; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/AutoValue_EventStoreConfig$Builder;->()V +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/AutoValue_EventStoreConfig$Builder;->build()Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreConfig; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/AutoValue_EventStoreConfig$Builder;->setCriticalSectionEnterTimeoutMs(I)Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreConfig$Builder; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/AutoValue_EventStoreConfig$Builder;->setEventCleanUpAge(J)Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreConfig$Builder; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/AutoValue_EventStoreConfig$Builder;->setLoadBatchSize(I)Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreConfig$Builder; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/AutoValue_EventStoreConfig$Builder;->setMaxBlobByteSizePerRow(I)Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreConfig$Builder; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/AutoValue_EventStoreConfig$Builder;->setMaxStorageSizeInBytes(J)Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreConfig$Builder; +Lcom/google/android/datatransport/runtime/scheduling/persistence/AutoValue_PersistedEvent; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/AutoValue_PersistedEvent;->(JLcom/google/android/datatransport/runtime/TransportContext;Lcom/google/android/datatransport/runtime/EventInternal;)V +Lcom/google/android/datatransport/runtime/scheduling/persistence/ClientHealthMetricsStore; +Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStore; +Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreConfig; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreConfig;->()V +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreConfig;->()V +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreConfig;->builder()Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreConfig$Builder; +Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreConfig$Builder; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreConfig$Builder;->()V +Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule;->dbName()Ljava/lang/String; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule;->schemaVersion()I +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule;->storeConfig()Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreConfig; +Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_DbNameFactory; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_DbNameFactory;->()V +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_DbNameFactory;->create()Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_DbNameFactory; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_DbNameFactory;->dbName()Ljava/lang/String; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_DbNameFactory;->get()Ljava/lang/Object; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_DbNameFactory;->get()Ljava/lang/String; +Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_DbNameFactory$InstanceHolder; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_DbNameFactory$InstanceHolder;->()V +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_DbNameFactory$InstanceHolder;->access$000()Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_DbNameFactory; +Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_PackageNameFactory; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_PackageNameFactory;->(Ljavax/inject/Provider;)V +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_PackageNameFactory;->create(Ljavax/inject/Provider;)Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_PackageNameFactory; +Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_SchemaVersionFactory; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_SchemaVersionFactory;->()V +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_SchemaVersionFactory;->create()Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_SchemaVersionFactory; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_SchemaVersionFactory;->get()Ljava/lang/Integer; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_SchemaVersionFactory;->get()Ljava/lang/Object; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_SchemaVersionFactory;->schemaVersion()I +Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_SchemaVersionFactory$InstanceHolder; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_SchemaVersionFactory$InstanceHolder;->()V +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_SchemaVersionFactory$InstanceHolder;->access$000()Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_SchemaVersionFactory; +Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_StoreConfigFactory; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_StoreConfigFactory;->()V +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_StoreConfigFactory;->create()Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_StoreConfigFactory; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_StoreConfigFactory;->get()Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreConfig; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_StoreConfigFactory;->get()Ljava/lang/Object; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_StoreConfigFactory;->storeConfig()Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreConfig; +Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_StoreConfigFactory$InstanceHolder; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_StoreConfigFactory$InstanceHolder;->()V +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_StoreConfigFactory$InstanceHolder;->access$000()Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreModule_StoreConfigFactory; +Lcom/google/android/datatransport/runtime/scheduling/persistence/PersistedEvent; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/PersistedEvent;->()V +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/PersistedEvent;->create(JLcom/google/android/datatransport/runtime/TransportContext;Lcom/google/android/datatransport/runtime/EventInternal;)Lcom/google/android/datatransport/runtime/scheduling/persistence/PersistedEvent; +Lcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore;->()V +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore;->(Lcom/google/android/datatransport/runtime/time/Clock;Lcom/google/android/datatransport/runtime/time/Clock;Lcom/google/android/datatransport/runtime/scheduling/persistence/EventStoreConfig;Lcom/google/android/datatransport/runtime/scheduling/persistence/SchemaManager;Ljavax/inject/Provider;)V +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore;->ensureBeginTransaction(Landroid/database/sqlite/SQLiteDatabase;)V +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore;->ensureTransportContext(Landroid/database/sqlite/SQLiteDatabase;Lcom/google/android/datatransport/runtime/TransportContext;)J +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore;->getDb()Landroid/database/sqlite/SQLiteDatabase; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore;->getNextCallTime(Lcom/google/android/datatransport/runtime/TransportContext;)J +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore;->getPageCount()J +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore;->getPageSize()J +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore;->getTransportContextId(Landroid/database/sqlite/SQLiteDatabase;Lcom/google/android/datatransport/runtime/TransportContext;)Ljava/lang/Long; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore;->inTransaction(Lcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore$Function;)Ljava/lang/Object; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore;->isStorageAtLimit()Z +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore;->lambda$ensureBeginTransaction$24(Landroid/database/sqlite/SQLiteDatabase;)Ljava/lang/Object; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore;->lambda$getNextCallTime$5(Landroid/database/Cursor;)Ljava/lang/Long; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore;->lambda$getTransportContextId$2(Landroid/database/Cursor;)Ljava/lang/Long; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore;->lambda$loadActiveContexts$10(Landroid/database/sqlite/SQLiteDatabase;)Ljava/util/List; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore;->lambda$loadActiveContexts$9(Landroid/database/Cursor;)Ljava/util/List; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore;->lambda$persist$1$com-google-android-datatransport-runtime-scheduling-persistence-SQLiteEventStore(Lcom/google/android/datatransport/runtime/EventInternal;Lcom/google/android/datatransport/runtime/TransportContext;Landroid/database/sqlite/SQLiteDatabase;)Ljava/lang/Long; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore;->loadActiveContexts()Ljava/lang/Iterable; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore;->persist(Lcom/google/android/datatransport/runtime/TransportContext;Lcom/google/android/datatransport/runtime/EventInternal;)Lcom/google/android/datatransport/runtime/scheduling/persistence/PersistedEvent; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore;->retryIfDbLocked(Lcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore$Producer;Lcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore$Function;)Ljava/lang/Object; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore;->runCriticalSection(Lcom/google/android/datatransport/runtime/synchronization/SynchronizationGuard$CriticalSection;)Ljava/lang/Object; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore;->tryWithCursor(Landroid/database/Cursor;Lcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore$Function;)Ljava/lang/Object; +Lcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore$$ExternalSyntheticLambda10; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore$$ExternalSyntheticLambda10;->(Landroid/database/sqlite/SQLiteDatabase;)V +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore$$ExternalSyntheticLambda10;->produce()Ljava/lang/Object; +Lcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore$$ExternalSyntheticLambda12; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore$$ExternalSyntheticLambda12;->()V +Lcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore$$ExternalSyntheticLambda15; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore$$ExternalSyntheticLambda15;->()V +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore$$ExternalSyntheticLambda15;->apply(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore$$ExternalSyntheticLambda19; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore$$ExternalSyntheticLambda19;->()V +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore$$ExternalSyntheticLambda19;->apply(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore$$ExternalSyntheticLambda2; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore$$ExternalSyntheticLambda2;->(Lcom/google/android/datatransport/runtime/scheduling/persistence/SchemaManager;)V +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore$$ExternalSyntheticLambda2;->produce()Ljava/lang/Object; +Lcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore$$ExternalSyntheticLambda24; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore$$ExternalSyntheticLambda24;->()V +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore$$ExternalSyntheticLambda24;->apply(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore$$ExternalSyntheticLambda27; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore$$ExternalSyntheticLambda27;->(Lcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore;Lcom/google/android/datatransport/runtime/EventInternal;Lcom/google/android/datatransport/runtime/TransportContext;)V +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore$$ExternalSyntheticLambda27;->apply(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore$$ExternalSyntheticLambda3; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore$$ExternalSyntheticLambda3;->()V +Lcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore$$ExternalSyntheticLambda4; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore$$ExternalSyntheticLambda4;->()V +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore$$ExternalSyntheticLambda4;->apply(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore$Function; +Lcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore$Producer; +Lcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore_Factory; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore_Factory;->(Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;)V +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore_Factory;->create(Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;)Lcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore_Factory; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore_Factory;->get()Lcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore_Factory;->get()Ljava/lang/Object; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore_Factory;->newInstance(Lcom/google/android/datatransport/runtime/time/Clock;Lcom/google/android/datatransport/runtime/time/Clock;Ljava/lang/Object;Ljava/lang/Object;Ljavax/inject/Provider;)Lcom/google/android/datatransport/runtime/scheduling/persistence/SQLiteEventStore; +Lcom/google/android/datatransport/runtime/scheduling/persistence/SchemaManager; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SchemaManager;->()V +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SchemaManager;->(Landroid/content/Context;Ljava/lang/String;I)V +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SchemaManager;->ensureConfigured(Landroid/database/sqlite/SQLiteDatabase;)V +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SchemaManager;->onConfigure(Landroid/database/sqlite/SQLiteDatabase;)V +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SchemaManager;->onOpen(Landroid/database/sqlite/SQLiteDatabase;)V +Lcom/google/android/datatransport/runtime/scheduling/persistence/SchemaManager$$ExternalSyntheticLambda0; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SchemaManager$$ExternalSyntheticLambda0;->()V +Lcom/google/android/datatransport/runtime/scheduling/persistence/SchemaManager$$ExternalSyntheticLambda1; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SchemaManager$$ExternalSyntheticLambda1;->()V +Lcom/google/android/datatransport/runtime/scheduling/persistence/SchemaManager$$ExternalSyntheticLambda2; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SchemaManager$$ExternalSyntheticLambda2;->()V +Lcom/google/android/datatransport/runtime/scheduling/persistence/SchemaManager$$ExternalSyntheticLambda3; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SchemaManager$$ExternalSyntheticLambda3;->()V +Lcom/google/android/datatransport/runtime/scheduling/persistence/SchemaManager$$ExternalSyntheticLambda4; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SchemaManager$$ExternalSyntheticLambda4;->()V +Lcom/google/android/datatransport/runtime/scheduling/persistence/SchemaManager$Migration; +Lcom/google/android/datatransport/runtime/scheduling/persistence/SchemaManager_Factory; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SchemaManager_Factory;->(Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;)V +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SchemaManager_Factory;->create(Ljavax/inject/Provider;Ljavax/inject/Provider;Ljavax/inject/Provider;)Lcom/google/android/datatransport/runtime/scheduling/persistence/SchemaManager_Factory; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SchemaManager_Factory;->get()Lcom/google/android/datatransport/runtime/scheduling/persistence/SchemaManager; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SchemaManager_Factory;->get()Ljava/lang/Object; +HSPLcom/google/android/datatransport/runtime/scheduling/persistence/SchemaManager_Factory;->newInstance(Landroid/content/Context;Ljava/lang/String;I)Lcom/google/android/datatransport/runtime/scheduling/persistence/SchemaManager; +Lcom/google/android/datatransport/runtime/synchronization/SynchronizationException; +Lcom/google/android/datatransport/runtime/synchronization/SynchronizationGuard; +Lcom/google/android/datatransport/runtime/synchronization/SynchronizationGuard$CriticalSection; +Lcom/google/android/datatransport/runtime/time/Clock; +Lcom/google/android/datatransport/runtime/time/TimeModule; +HSPLcom/google/android/datatransport/runtime/time/TimeModule;->eventClock()Lcom/google/android/datatransport/runtime/time/Clock; +HSPLcom/google/android/datatransport/runtime/time/TimeModule;->uptimeClock()Lcom/google/android/datatransport/runtime/time/Clock; +Lcom/google/android/datatransport/runtime/time/TimeModule_EventClockFactory; +HSPLcom/google/android/datatransport/runtime/time/TimeModule_EventClockFactory;->()V +HSPLcom/google/android/datatransport/runtime/time/TimeModule_EventClockFactory;->create()Lcom/google/android/datatransport/runtime/time/TimeModule_EventClockFactory; +HSPLcom/google/android/datatransport/runtime/time/TimeModule_EventClockFactory;->eventClock()Lcom/google/android/datatransport/runtime/time/Clock; +HSPLcom/google/android/datatransport/runtime/time/TimeModule_EventClockFactory;->get()Lcom/google/android/datatransport/runtime/time/Clock; +HSPLcom/google/android/datatransport/runtime/time/TimeModule_EventClockFactory;->get()Ljava/lang/Object; +Lcom/google/android/datatransport/runtime/time/TimeModule_EventClockFactory$InstanceHolder; +HSPLcom/google/android/datatransport/runtime/time/TimeModule_EventClockFactory$InstanceHolder;->()V +HSPLcom/google/android/datatransport/runtime/time/TimeModule_EventClockFactory$InstanceHolder;->access$000()Lcom/google/android/datatransport/runtime/time/TimeModule_EventClockFactory; +Lcom/google/android/datatransport/runtime/time/TimeModule_UptimeClockFactory; +HSPLcom/google/android/datatransport/runtime/time/TimeModule_UptimeClockFactory;->()V +HSPLcom/google/android/datatransport/runtime/time/TimeModule_UptimeClockFactory;->create()Lcom/google/android/datatransport/runtime/time/TimeModule_UptimeClockFactory; +HSPLcom/google/android/datatransport/runtime/time/TimeModule_UptimeClockFactory;->get()Lcom/google/android/datatransport/runtime/time/Clock; +HSPLcom/google/android/datatransport/runtime/time/TimeModule_UptimeClockFactory;->get()Ljava/lang/Object; +HSPLcom/google/android/datatransport/runtime/time/TimeModule_UptimeClockFactory;->uptimeClock()Lcom/google/android/datatransport/runtime/time/Clock; +Lcom/google/android/datatransport/runtime/time/TimeModule_UptimeClockFactory$InstanceHolder; +HSPLcom/google/android/datatransport/runtime/time/TimeModule_UptimeClockFactory$InstanceHolder;->()V +HSPLcom/google/android/datatransport/runtime/time/TimeModule_UptimeClockFactory$InstanceHolder;->access$000()Lcom/google/android/datatransport/runtime/time/TimeModule_UptimeClockFactory; +Lcom/google/android/datatransport/runtime/time/UptimeClock; +HSPLcom/google/android/datatransport/runtime/time/UptimeClock;->()V +HSPLcom/google/android/datatransport/runtime/time/UptimeClock;->getTime()J +Lcom/google/android/datatransport/runtime/time/WallTimeClock; +HSPLcom/google/android/datatransport/runtime/time/WallTimeClock;->()V +HSPLcom/google/android/datatransport/runtime/time/WallTimeClock;->getTime()J +Lcom/google/android/datatransport/runtime/util/PriorityMapping; +HSPLcom/google/android/datatransport/runtime/util/PriorityMapping;->()V +HSPLcom/google/android/datatransport/runtime/util/PriorityMapping;->toInt(Lcom/google/android/datatransport/Priority;)I +Lcom/google/android/gms/common/ConnectionResult; +HSPLcom/google/android/gms/common/ConnectionResult;->()V +HSPLcom/google/android/gms/common/ConnectionResult;->(I)V +HSPLcom/google/android/gms/common/ConnectionResult;->(IILandroid/app/PendingIntent;Ljava/lang/String;)V +HSPLcom/google/android/gms/common/ConnectionResult;->(ILandroid/app/PendingIntent;Ljava/lang/String;)V +HSPLcom/google/android/gms/common/ConnectionResult;->isSuccess()Z +Lcom/google/android/gms/common/Feature; +HSPLcom/google/android/gms/common/Feature;->()V +Lcom/google/android/gms/common/GoogleApiAvailability; +HSPLcom/google/android/gms/common/GoogleApiAvailability;->()V +HSPLcom/google/android/gms/common/GoogleApiAvailability;->()V +HSPLcom/google/android/gms/common/GoogleApiAvailability;->getInstance()Lcom/google/android/gms/common/GoogleApiAvailability; +HSPLcom/google/android/gms/common/GoogleApiAvailability;->isGooglePlayServicesAvailable(Landroid/content/Context;)I +HSPLcom/google/android/gms/common/GoogleApiAvailability;->isGooglePlayServicesAvailable(Landroid/content/Context;I)I +Lcom/google/android/gms/common/GoogleApiAvailabilityLight; +HSPLcom/google/android/gms/common/GoogleApiAvailabilityLight;->()V +HSPLcom/google/android/gms/common/GoogleApiAvailabilityLight;->()V +HSPLcom/google/android/gms/common/GoogleApiAvailabilityLight;->getInstance()Lcom/google/android/gms/common/GoogleApiAvailabilityLight; +HSPLcom/google/android/gms/common/GoogleApiAvailabilityLight;->isGooglePlayServicesAvailable(Landroid/content/Context;)I +HSPLcom/google/android/gms/common/GoogleApiAvailabilityLight;->isGooglePlayServicesAvailable(Landroid/content/Context;I)I +Lcom/google/android/gms/common/GooglePlayServicesUtilLight; +HSPLcom/google/android/gms/common/GooglePlayServicesUtilLight;->()V +HSPLcom/google/android/gms/common/GooglePlayServicesUtilLight;->isGooglePlayServicesAvailable(Landroid/content/Context;I)I +HSPLcom/google/android/gms/common/GooglePlayServicesUtilLight;->isPlayServicesPossiblyUpdating(Landroid/content/Context;I)Z +Lcom/google/android/gms/common/GoogleSignatureVerifier; +HSPLcom/google/android/gms/common/GoogleSignatureVerifier;->(Landroid/content/Context;)V +HSPLcom/google/android/gms/common/GoogleSignatureVerifier;->getInstance(Landroid/content/Context;)Lcom/google/android/gms/common/GoogleSignatureVerifier; +HSPLcom/google/android/gms/common/GoogleSignatureVerifier;->zza(Landroid/content/pm/PackageInfo;[Lcom/google/android/gms/common/zzj;)Lcom/google/android/gms/common/zzj; +HSPLcom/google/android/gms/common/GoogleSignatureVerifier;->zzb(Landroid/content/pm/PackageInfo;Z)Z +Lcom/google/android/gms/common/R$string; +Lcom/google/android/gms/common/api/Scope; +Lcom/google/android/gms/common/api/internal/BackgroundDetector; +HSPLcom/google/android/gms/common/api/internal/BackgroundDetector;->()V +HSPLcom/google/android/gms/common/api/internal/BackgroundDetector;->()V +HSPLcom/google/android/gms/common/api/internal/BackgroundDetector;->addListener(Lcom/google/android/gms/common/api/internal/BackgroundDetector$BackgroundStateChangeListener;)V +HSPLcom/google/android/gms/common/api/internal/BackgroundDetector;->getInstance()Lcom/google/android/gms/common/api/internal/BackgroundDetector; +HSPLcom/google/android/gms/common/api/internal/BackgroundDetector;->initialize(Landroid/app/Application;)V +HSPLcom/google/android/gms/common/api/internal/BackgroundDetector;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V +HSPLcom/google/android/gms/common/api/internal/BackgroundDetector;->onActivityResumed(Landroid/app/Activity;)V +HSPLcom/google/android/gms/common/api/internal/BackgroundDetector;->onActivityStarted(Landroid/app/Activity;)V +Lcom/google/android/gms/common/api/internal/BackgroundDetector$BackgroundStateChangeListener; +Lcom/google/android/gms/common/internal/BaseGmsClient; +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->()V +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->(Landroid/content/Context;Landroid/os/Looper;ILcom/google/android/gms/common/internal/BaseGmsClient$BaseConnectionCallbacks;Lcom/google/android/gms/common/internal/BaseGmsClient$BaseOnConnectionFailedListener;Ljava/lang/String;)V +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->(Landroid/content/Context;Landroid/os/Looper;Lcom/google/android/gms/common/internal/GmsClientSupervisor;Lcom/google/android/gms/common/GoogleApiAvailabilityLight;ILcom/google/android/gms/common/internal/BaseGmsClient$BaseConnectionCallbacks;Lcom/google/android/gms/common/internal/BaseGmsClient$BaseOnConnectionFailedListener;Ljava/lang/String;)V +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->checkAvailabilityAndConnect()V +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->checkConnected()V +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->connect(Lcom/google/android/gms/common/internal/BaseGmsClient$ConnectionProgressReportCallbacks;)V +PLcom/google/android/gms/common/internal/BaseGmsClient;->disconnect()V +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->getApiFeatures()[Lcom/google/android/gms/common/Feature; +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->getBindServiceExecutor()Ljava/util/concurrent/Executor; +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->getConnectionHint()Landroid/os/Bundle; +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->getGetServiceRequestExtraArgs()Landroid/os/Bundle; +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->getRemoteService(Lcom/google/android/gms/common/internal/IAccountAccessor;Ljava/util/Set;)V +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->getScopes()Ljava/util/Set; +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->getService()Landroid/os/IInterface; +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->getStartServicePackage()Ljava/lang/String; +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->getUseDynamicLookup()Z +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->isConnected()Z +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->isConnecting()Z +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->onConnectedLocked(Landroid/os/IInterface;)V +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->onPostInitHandler(ILandroid/os/IBinder;Landroid/os/Bundle;I)V +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->requiresAccount()Z +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->requiresSignIn()Z +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->usesClientTelemetry()Z +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->zzb(Lcom/google/android/gms/common/internal/BaseGmsClient;)Lcom/google/android/gms/common/internal/BaseGmsClient$BaseConnectionCallbacks; +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->zzd(Lcom/google/android/gms/common/internal/BaseGmsClient;)Ljava/lang/Object; +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->zze()Ljava/lang/String; +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->zzf(Lcom/google/android/gms/common/internal/BaseGmsClient;)Ljava/util/ArrayList; +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->zzg(Lcom/google/android/gms/common/internal/BaseGmsClient;Lcom/google/android/gms/common/ConnectionResult;)V +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->zzh(Lcom/google/android/gms/common/internal/BaseGmsClient;Lcom/google/android/gms/common/internal/IGmsServiceBroker;)V +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->zzj(Lcom/google/android/gms/common/internal/BaseGmsClient;Lcom/google/android/gms/common/internal/zzj;)V +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->zzl(ILandroid/os/Bundle;I)V +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->zzn(Lcom/google/android/gms/common/internal/BaseGmsClient;IILandroid/os/IInterface;)Z +HSPLcom/google/android/gms/common/internal/BaseGmsClient;->zzp(ILandroid/os/IInterface;)V +Lcom/google/android/gms/common/internal/BaseGmsClient$BaseConnectionCallbacks; +Lcom/google/android/gms/common/internal/BaseGmsClient$BaseOnConnectionFailedListener; +Lcom/google/android/gms/common/internal/BaseGmsClient$ConnectionProgressReportCallbacks; +Lcom/google/android/gms/common/internal/BaseGmsClient$LegacyClientCallbackAdapter; +HSPLcom/google/android/gms/common/internal/BaseGmsClient$LegacyClientCallbackAdapter;->(Lcom/google/android/gms/common/internal/BaseGmsClient;)V +HSPLcom/google/android/gms/common/internal/BaseGmsClient$LegacyClientCallbackAdapter;->onReportServiceBinding(Lcom/google/android/gms/common/ConnectionResult;)V +Lcom/google/android/gms/common/internal/ConnectionTelemetryConfiguration; +Lcom/google/android/gms/common/internal/GetServiceRequest; +HSPLcom/google/android/gms/common/internal/GetServiceRequest;->()V +HSPLcom/google/android/gms/common/internal/GetServiceRequest;->(IIILjava/lang/String;Landroid/os/IBinder;[Lcom/google/android/gms/common/api/Scope;Landroid/os/Bundle;Landroid/accounts/Account;[Lcom/google/android/gms/common/Feature;[Lcom/google/android/gms/common/Feature;ZIZLjava/lang/String;)V +HSPLcom/google/android/gms/common/internal/GetServiceRequest;->zza()Ljava/lang/String; +Lcom/google/android/gms/common/internal/GmsClientSupervisor; +HSPLcom/google/android/gms/common/internal/GmsClientSupervisor;->()V +HSPLcom/google/android/gms/common/internal/GmsClientSupervisor;->()V +HSPLcom/google/android/gms/common/internal/GmsClientSupervisor;->getDefaultBindFlags()I +HSPLcom/google/android/gms/common/internal/GmsClientSupervisor;->getInstance(Landroid/content/Context;)Lcom/google/android/gms/common/internal/GmsClientSupervisor; +PLcom/google/android/gms/common/internal/GmsClientSupervisor;->zzb(Ljava/lang/String;Ljava/lang/String;ILandroid/content/ServiceConnection;Ljava/lang/String;Z)V +Lcom/google/android/gms/common/internal/IGmsCallbacks; +Lcom/google/android/gms/common/internal/IGmsServiceBroker; +Lcom/google/android/gms/common/internal/Objects; +HSPLcom/google/android/gms/common/internal/Objects;->equal(Ljava/lang/Object;Ljava/lang/Object;)Z +HSPLcom/google/android/gms/common/internal/Objects;->hashCode([Ljava/lang/Object;)I +Lcom/google/android/gms/common/internal/Preconditions; +HSPLcom/google/android/gms/common/internal/Preconditions;->checkArgument(Z)V +HSPLcom/google/android/gms/common/internal/Preconditions;->checkMainThread(Ljava/lang/String;)V +HSPLcom/google/android/gms/common/internal/Preconditions;->checkNotEmpty(Ljava/lang/String;)Ljava/lang/String; +HSPLcom/google/android/gms/common/internal/Preconditions;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/android/gms/common/internal/Preconditions;->checkNotNull(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/android/gms/common/internal/Preconditions;->checkState(Z)V +HSPLcom/google/android/gms/common/internal/Preconditions;->checkState(ZLjava/lang/Object;)V +Lcom/google/android/gms/common/internal/ReflectedParcelable; +Lcom/google/android/gms/common/internal/StringResourceValueReader; +HSPLcom/google/android/gms/common/internal/StringResourceValueReader;->(Landroid/content/Context;)V +HSPLcom/google/android/gms/common/internal/StringResourceValueReader;->getString(Ljava/lang/String;)Ljava/lang/String; +Lcom/google/android/gms/common/internal/safeparcel/AbstractSafeParcelable; +HSPLcom/google/android/gms/common/internal/safeparcel/AbstractSafeParcelable;->()V +Lcom/google/android/gms/common/internal/safeparcel/SafeParcelReader; +HSPLcom/google/android/gms/common/internal/safeparcel/SafeParcelReader;->createTypedArray(Landroid/os/Parcel;ILandroid/os/Parcelable$Creator;)[Ljava/lang/Object; +HSPLcom/google/android/gms/common/internal/safeparcel/SafeParcelReader;->ensureAtEnd(Landroid/os/Parcel;I)V +HSPLcom/google/android/gms/common/internal/safeparcel/SafeParcelReader;->getFieldId(I)I +HSPLcom/google/android/gms/common/internal/safeparcel/SafeParcelReader;->readHeader(Landroid/os/Parcel;)I +HSPLcom/google/android/gms/common/internal/safeparcel/SafeParcelReader;->readInt(Landroid/os/Parcel;I)I +HSPLcom/google/android/gms/common/internal/safeparcel/SafeParcelReader;->readSize(Landroid/os/Parcel;I)I +HSPLcom/google/android/gms/common/internal/safeparcel/SafeParcelReader;->validateObjectHeader(Landroid/os/Parcel;)I +HSPLcom/google/android/gms/common/internal/safeparcel/SafeParcelReader;->zzb(Landroid/os/Parcel;II)V +Lcom/google/android/gms/common/internal/safeparcel/SafeParcelReader$ParseException; +Lcom/google/android/gms/common/internal/safeparcel/SafeParcelWriter; +HSPLcom/google/android/gms/common/internal/safeparcel/SafeParcelWriter;->beginObjectHeader(Landroid/os/Parcel;)I +HSPLcom/google/android/gms/common/internal/safeparcel/SafeParcelWriter;->finishObjectHeader(Landroid/os/Parcel;I)V +HSPLcom/google/android/gms/common/internal/safeparcel/SafeParcelWriter;->writeBoolean(Landroid/os/Parcel;IZ)V +HSPLcom/google/android/gms/common/internal/safeparcel/SafeParcelWriter;->writeBooleanObject(Landroid/os/Parcel;ILjava/lang/Boolean;Z)V +HSPLcom/google/android/gms/common/internal/safeparcel/SafeParcelWriter;->writeBundle(Landroid/os/Parcel;ILandroid/os/Bundle;Z)V +HSPLcom/google/android/gms/common/internal/safeparcel/SafeParcelWriter;->writeIBinder(Landroid/os/Parcel;ILandroid/os/IBinder;Z)V +HSPLcom/google/android/gms/common/internal/safeparcel/SafeParcelWriter;->writeInt(Landroid/os/Parcel;II)V +HSPLcom/google/android/gms/common/internal/safeparcel/SafeParcelWriter;->writeLong(Landroid/os/Parcel;IJ)V +HSPLcom/google/android/gms/common/internal/safeparcel/SafeParcelWriter;->writeParcelable(Landroid/os/Parcel;ILandroid/os/Parcelable;IZ)V +HSPLcom/google/android/gms/common/internal/safeparcel/SafeParcelWriter;->writeString(Landroid/os/Parcel;ILjava/lang/String;Z)V +HSPLcom/google/android/gms/common/internal/safeparcel/SafeParcelWriter;->writeStringList(Landroid/os/Parcel;ILjava/util/List;Z)V +HSPLcom/google/android/gms/common/internal/safeparcel/SafeParcelWriter;->writeTypedArray(Landroid/os/Parcel;I[Landroid/os/Parcelable;IZ)V +HSPLcom/google/android/gms/common/internal/safeparcel/SafeParcelWriter;->zza(Landroid/os/Parcel;I)I +HSPLcom/google/android/gms/common/internal/safeparcel/SafeParcelWriter;->zzb(Landroid/os/Parcel;I)V +HSPLcom/google/android/gms/common/internal/safeparcel/SafeParcelWriter;->zzc(Landroid/os/Parcel;II)V +Lcom/google/android/gms/common/internal/safeparcel/SafeParcelable; +Lcom/google/android/gms/common/internal/zza; +HSPLcom/google/android/gms/common/internal/zza;->(Lcom/google/android/gms/common/internal/BaseGmsClient;ILandroid/os/Bundle;)V +HSPLcom/google/android/gms/common/internal/zza;->zza(Ljava/lang/Object;)V +Lcom/google/android/gms/common/internal/zzab; +HSPLcom/google/android/gms/common/internal/zzab;->()V +HSPLcom/google/android/gms/common/internal/zzab;->zza(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z +Lcom/google/android/gms/common/internal/zzac; +HSPLcom/google/android/gms/common/internal/zzac;->(Landroid/os/IBinder;)V +HSPLcom/google/android/gms/common/internal/zzac;->getService(Lcom/google/android/gms/common/internal/IGmsCallbacks;Lcom/google/android/gms/common/internal/GetServiceRequest;)V +Lcom/google/android/gms/common/internal/zzag; +HSPLcom/google/android/gms/common/internal/zzag;->()V +HSPLcom/google/android/gms/common/internal/zzag;->zza(Landroid/content/Context;)I +HSPLcom/google/android/gms/common/internal/zzag;->zzc(Landroid/content/Context;)V +Lcom/google/android/gms/common/internal/zzb; +HSPLcom/google/android/gms/common/internal/zzb;->(Lcom/google/android/gms/common/internal/BaseGmsClient;Landroid/os/Looper;)V +HSPLcom/google/android/gms/common/internal/zzb;->handleMessage(Landroid/os/Message;)V +HSPLcom/google/android/gms/common/internal/zzb;->zzb(Landroid/os/Message;)Z +Lcom/google/android/gms/common/internal/zzc; +HSPLcom/google/android/gms/common/internal/zzc;->(Lcom/google/android/gms/common/internal/BaseGmsClient;Ljava/lang/Object;)V +HSPLcom/google/android/gms/common/internal/zzc;->zze()V +HSPLcom/google/android/gms/common/internal/zzc;->zzf()V +HSPLcom/google/android/gms/common/internal/zzc;->zzg()V +Lcom/google/android/gms/common/internal/zzd; +HSPLcom/google/android/gms/common/internal/zzd;->(Lcom/google/android/gms/common/internal/BaseGmsClient;I)V +HSPLcom/google/android/gms/common/internal/zzd;->onPostInitComplete(ILandroid/os/IBinder;Landroid/os/Bundle;)V +HSPLcom/google/android/gms/common/internal/zzd;->zzc(ILandroid/os/IBinder;Lcom/google/android/gms/common/internal/zzj;)V +Lcom/google/android/gms/common/internal/zze; +HSPLcom/google/android/gms/common/internal/zze;->(Lcom/google/android/gms/common/internal/BaseGmsClient;I)V +HSPLcom/google/android/gms/common/internal/zze;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V +Lcom/google/android/gms/common/internal/zzf; +HSPLcom/google/android/gms/common/internal/zzf;->(Lcom/google/android/gms/common/internal/BaseGmsClient;ILandroid/os/IBinder;Landroid/os/Bundle;)V +HSPLcom/google/android/gms/common/internal/zzf;->zzd()Z +Lcom/google/android/gms/common/internal/zzg; +HSPLcom/google/android/gms/common/internal/zzg;->(Lcom/google/android/gms/common/internal/BaseGmsClient;ILandroid/os/Bundle;)V +HSPLcom/google/android/gms/common/internal/zzg;->zzd()Z +Lcom/google/android/gms/common/internal/zzj; +HSPLcom/google/android/gms/common/internal/zzj;->()V +HSPLcom/google/android/gms/common/internal/zzj;->(Landroid/os/Bundle;[Lcom/google/android/gms/common/Feature;ILcom/google/android/gms/common/internal/ConnectionTelemetryConfiguration;)V +Lcom/google/android/gms/common/internal/zzk; +HSPLcom/google/android/gms/common/internal/zzk;->()V +HSPLcom/google/android/gms/common/internal/zzk;->createFromParcel(Landroid/os/Parcel;)Ljava/lang/Object; +Lcom/google/android/gms/common/internal/zzm; +HSPLcom/google/android/gms/common/internal/zzm;->()V +HSPLcom/google/android/gms/common/internal/zzm;->zza(Lcom/google/android/gms/common/internal/GetServiceRequest;Landroid/os/Parcel;I)V +Lcom/google/android/gms/common/internal/zzn; +HSPLcom/google/android/gms/common/internal/zzn;->()V +HSPLcom/google/android/gms/common/internal/zzn;->(Ljava/lang/String;Ljava/lang/String;IZ)V +PLcom/google/android/gms/common/internal/zzn;->equals(Ljava/lang/Object;)Z +HSPLcom/google/android/gms/common/internal/zzn;->hashCode()I +HSPLcom/google/android/gms/common/internal/zzn;->zza()I +HSPLcom/google/android/gms/common/internal/zzn;->zzc(Landroid/content/Context;)Landroid/content/Intent; +Lcom/google/android/gms/common/internal/zzo; +HSPLcom/google/android/gms/common/internal/zzo;->(Lcom/google/android/gms/common/internal/zzr;Lcom/google/android/gms/common/internal/zzn;)V +HSPLcom/google/android/gms/common/internal/zzo;->onServiceConnected(Landroid/content/ComponentName;Landroid/os/IBinder;)V +HSPLcom/google/android/gms/common/internal/zzo;->zzd(Landroid/content/ServiceConnection;Landroid/content/ServiceConnection;Ljava/lang/String;)V +HSPLcom/google/android/gms/common/internal/zzo;->zze(Ljava/lang/String;Ljava/util/concurrent/Executor;)V +PLcom/google/android/gms/common/internal/zzo;->zzf(Landroid/content/ServiceConnection;Ljava/lang/String;)V +PLcom/google/android/gms/common/internal/zzo;->zzh(Landroid/content/ServiceConnection;)Z +PLcom/google/android/gms/common/internal/zzo;->zzi()Z +HSPLcom/google/android/gms/common/internal/zzo;->zzj()Z +Lcom/google/android/gms/common/internal/zzq; +HSPLcom/google/android/gms/common/internal/zzq;->(Lcom/google/android/gms/common/internal/zzr;Lcom/google/android/gms/common/internal/zzp;)V +Lcom/google/android/gms/common/internal/zzr; +HSPLcom/google/android/gms/common/internal/zzr;->(Landroid/content/Context;Landroid/os/Looper;)V +PLcom/google/android/gms/common/internal/zzr;->zza(Lcom/google/android/gms/common/internal/zzn;Landroid/content/ServiceConnection;Ljava/lang/String;)V +HSPLcom/google/android/gms/common/internal/zzr;->zzc(Lcom/google/android/gms/common/internal/zzn;Landroid/content/ServiceConnection;Ljava/lang/String;Ljava/util/concurrent/Executor;)Z +HSPLcom/google/android/gms/common/internal/zzr;->zzd(Lcom/google/android/gms/common/internal/zzr;)J +HSPLcom/google/android/gms/common/internal/zzr;->zze(Lcom/google/android/gms/common/internal/zzr;)Landroid/content/Context; +HSPLcom/google/android/gms/common/internal/zzr;->zzf(Lcom/google/android/gms/common/internal/zzr;)Landroid/os/Handler; +HSPLcom/google/android/gms/common/internal/zzr;->zzg(Lcom/google/android/gms/common/internal/zzr;)Lcom/google/android/gms/common/stats/ConnectionTracker; +HSPLcom/google/android/gms/common/internal/zzr;->zzh(Lcom/google/android/gms/common/internal/zzr;)Ljava/util/HashMap; +Lcom/google/android/gms/common/internal/zzs; +Lcom/google/android/gms/common/internal/zzu; +HSPLcom/google/android/gms/common/internal/zzu;->(Ljava/lang/String;Ljava/lang/String;ZIZ)V +HSPLcom/google/android/gms/common/internal/zzu;->zza()I +HSPLcom/google/android/gms/common/internal/zzu;->zzb()Ljava/lang/String; +HSPLcom/google/android/gms/common/internal/zzu;->zzc()Ljava/lang/String; +HSPLcom/google/android/gms/common/internal/zzu;->zzd()Z +Lcom/google/android/gms/common/internal/zzy; +HSPLcom/google/android/gms/common/internal/zzy;->()V +Lcom/google/android/gms/common/internal/zzz; +Lcom/google/android/gms/common/stats/ConnectionTracker; +HSPLcom/google/android/gms/common/stats/ConnectionTracker;->()V +HSPLcom/google/android/gms/common/stats/ConnectionTracker;->()V +HSPLcom/google/android/gms/common/stats/ConnectionTracker;->getInstance()Lcom/google/android/gms/common/stats/ConnectionTracker; +PLcom/google/android/gms/common/stats/ConnectionTracker;->unbindService(Landroid/content/Context;Landroid/content/ServiceConnection;)V +HSPLcom/google/android/gms/common/stats/ConnectionTracker;->zza(Landroid/content/Context;Ljava/lang/String;Landroid/content/Intent;Landroid/content/ServiceConnection;ILjava/util/concurrent/Executor;)Z +PLcom/google/android/gms/common/stats/ConnectionTracker;->zzb(Landroid/content/Context;Landroid/content/ServiceConnection;)V +HSPLcom/google/android/gms/common/stats/ConnectionTracker;->zzc(Landroid/content/Context;Ljava/lang/String;Landroid/content/Intent;Landroid/content/ServiceConnection;IZLjava/util/concurrent/Executor;)Z +HSPLcom/google/android/gms/common/stats/ConnectionTracker;->zzd(Landroid/content/ServiceConnection;)Z +HSPLcom/google/android/gms/common/stats/ConnectionTracker;->zze(Landroid/content/Context;Landroid/content/Intent;Landroid/content/ServiceConnection;ILjava/util/concurrent/Executor;)Z +Lcom/google/android/gms/common/util/Base64Utils; +HSPLcom/google/android/gms/common/util/Base64Utils;->encodeUrlSafeNoPadding([B)Ljava/lang/String; +Lcom/google/android/gms/common/util/Clock; +Lcom/google/android/gms/common/util/DefaultClock; +HSPLcom/google/android/gms/common/util/DefaultClock;->()V +HSPLcom/google/android/gms/common/util/DefaultClock;->()V +HSPLcom/google/android/gms/common/util/DefaultClock;->currentTimeMillis()J +HSPLcom/google/android/gms/common/util/DefaultClock;->elapsedRealtime()J +HSPLcom/google/android/gms/common/util/DefaultClock;->getInstance()Lcom/google/android/gms/common/util/Clock; +Lcom/google/android/gms/common/util/DeviceProperties; +HSPLcom/google/android/gms/common/util/DeviceProperties;->isWearable(Landroid/content/Context;)Z +HSPLcom/google/android/gms/common/util/DeviceProperties;->isWearableWithoutPlayStore(Landroid/content/Context;)Z +HSPLcom/google/android/gms/common/util/DeviceProperties;->zza(Landroid/content/Context;)Z +HSPLcom/google/android/gms/common/util/DeviceProperties;->zzb(Landroid/content/Context;)Z +Lcom/google/android/gms/common/util/PlatformVersion; +HSPLcom/google/android/gms/common/util/PlatformVersion;->isAtLeastIceCreamSandwich()Z +HSPLcom/google/android/gms/common/util/PlatformVersion;->isAtLeastKitKatWatch()Z +HSPLcom/google/android/gms/common/util/PlatformVersion;->isAtLeastLollipop()Z +HSPLcom/google/android/gms/common/util/PlatformVersion;->isAtLeastO()Z +HSPLcom/google/android/gms/common/util/PlatformVersion;->isAtLeastQ()Z +HSPLcom/google/android/gms/common/util/PlatformVersion;->isAtLeastS()Z +Lcom/google/android/gms/common/util/Strings; +HSPLcom/google/android/gms/common/util/Strings;->()V +HSPLcom/google/android/gms/common/util/Strings;->isEmptyOrWhitespace(Ljava/lang/String;)Z +Lcom/google/android/gms/common/util/zza; +HSPLcom/google/android/gms/common/util/zza;->zza(I)I +Lcom/google/android/gms/common/util/zzb; +HSPLcom/google/android/gms/common/util/zzb;->zza()Z +Lcom/google/android/gms/common/wrappers/InstantApps; +HSPLcom/google/android/gms/common/wrappers/InstantApps;->isInstantApp(Landroid/content/Context;)Z +Lcom/google/android/gms/common/wrappers/PackageManagerWrapper; +HSPLcom/google/android/gms/common/wrappers/PackageManagerWrapper;->(Landroid/content/Context;)V +HSPLcom/google/android/gms/common/wrappers/PackageManagerWrapper;->checkCallingOrSelfPermission(Ljava/lang/String;)I +HSPLcom/google/android/gms/common/wrappers/PackageManagerWrapper;->getApplicationInfo(Ljava/lang/String;I)Landroid/content/pm/ApplicationInfo; +HSPLcom/google/android/gms/common/wrappers/PackageManagerWrapper;->getPackageInfo(Ljava/lang/String;I)Landroid/content/pm/PackageInfo; +HSPLcom/google/android/gms/common/wrappers/PackageManagerWrapper;->isCallerInstantApp()Z +Lcom/google/android/gms/common/wrappers/Wrappers; +HSPLcom/google/android/gms/common/wrappers/Wrappers;->()V +HSPLcom/google/android/gms/common/wrappers/Wrappers;->()V +HSPLcom/google/android/gms/common/wrappers/Wrappers;->packageManager(Landroid/content/Context;)Lcom/google/android/gms/common/wrappers/PackageManagerWrapper; +HSPLcom/google/android/gms/common/wrappers/Wrappers;->zza(Landroid/content/Context;)Lcom/google/android/gms/common/wrappers/PackageManagerWrapper; +Lcom/google/android/gms/common/zzb; +HSPLcom/google/android/gms/common/zzb;->()V +Lcom/google/android/gms/common/zzc; +HSPLcom/google/android/gms/common/zzc;->()V +HSPLcom/google/android/gms/common/zzc;->newArray(I)[Ljava/lang/Object; +Lcom/google/android/gms/common/zzf; +HSPLcom/google/android/gms/common/zzf;->([B)V +Lcom/google/android/gms/common/zzg; +HSPLcom/google/android/gms/common/zzg;->([B)V +Lcom/google/android/gms/common/zzh; +HSPLcom/google/android/gms/common/zzh;->([B)V +HSPLcom/google/android/gms/common/zzh;->zzb()[B +Lcom/google/android/gms/common/zzi; +HSPLcom/google/android/gms/common/zzi;->([B)V +Lcom/google/android/gms/common/zzj; +HSPLcom/google/android/gms/common/zzj;->([B)V +HSPLcom/google/android/gms/common/zzj;->equals(Ljava/lang/Object;)Z +HSPLcom/google/android/gms/common/zzj;->zzc()I +HSPLcom/google/android/gms/common/zzj;->zzd()Lcom/google/android/gms/dynamic/IObjectWrapper; +HSPLcom/google/android/gms/common/zzj;->zze(Ljava/lang/String;)[B +Lcom/google/android/gms/common/zzk; +HSPLcom/google/android/gms/common/zzk;->([B)V +HSPLcom/google/android/gms/common/zzk;->zzf()[B +Lcom/google/android/gms/common/zzl; +HSPLcom/google/android/gms/common/zzl;->()V +HSPLcom/google/android/gms/common/zzl;->([B)V +HSPLcom/google/android/gms/common/zzl;->zzf()[B +Lcom/google/android/gms/common/zzm; +HSPLcom/google/android/gms/common/zzm;->()V +Lcom/google/android/gms/common/zzn; +HSPLcom/google/android/gms/common/zzn;->()V +HSPLcom/google/android/gms/common/zzn;->zze(Landroid/content/Context;)V +Lcom/google/android/gms/dynamic/IObjectWrapper; +Lcom/google/android/gms/dynamic/IObjectWrapper$Stub; +HSPLcom/google/android/gms/dynamic/IObjectWrapper$Stub;->()V +Lcom/google/android/gms/dynamic/ObjectWrapper; +HSPLcom/google/android/gms/dynamic/ObjectWrapper;->(Ljava/lang/Object;)V +HSPLcom/google/android/gms/dynamic/ObjectWrapper;->unwrap(Lcom/google/android/gms/dynamic/IObjectWrapper;)Ljava/lang/Object; +HSPLcom/google/android/gms/dynamic/ObjectWrapper;->wrap(Ljava/lang/Object;)Lcom/google/android/gms/dynamic/IObjectWrapper; +Lcom/google/android/gms/dynamite/DynamiteModule; +HSPLcom/google/android/gms/dynamite/DynamiteModule;->()V +HSPLcom/google/android/gms/dynamite/DynamiteModule;->(Landroid/content/Context;)V +HSPLcom/google/android/gms/dynamite/DynamiteModule;->getLocalVersion(Landroid/content/Context;Ljava/lang/String;)I +HSPLcom/google/android/gms/dynamite/DynamiteModule;->getRemoteVersion(Landroid/content/Context;Ljava/lang/String;)I +HSPLcom/google/android/gms/dynamite/DynamiteModule;->instantiate(Ljava/lang/String;)Landroid/os/IBinder; +HSPLcom/google/android/gms/dynamite/DynamiteModule;->load(Landroid/content/Context;Lcom/google/android/gms/dynamite/DynamiteModule$VersionPolicy;Ljava/lang/String;)Lcom/google/android/gms/dynamite/DynamiteModule; +HSPLcom/google/android/gms/dynamite/DynamiteModule;->zza(Landroid/content/Context;Ljava/lang/String;Z)I +HSPLcom/google/android/gms/dynamite/DynamiteModule;->zzb(Landroid/content/Context;Ljava/lang/String;ZZ)I +HSPLcom/google/android/gms/dynamite/DynamiteModule;->zzc(Landroid/content/Context;Ljava/lang/String;)Lcom/google/android/gms/dynamite/DynamiteModule; +HSPLcom/google/android/gms/dynamite/DynamiteModule;->zzd(Ljava/lang/ClassLoader;)V +HSPLcom/google/android/gms/dynamite/DynamiteModule;->zze(Landroid/database/Cursor;)Z +HSPLcom/google/android/gms/dynamite/DynamiteModule;->zzf(Landroid/content/Context;)Z +Lcom/google/android/gms/dynamite/DynamiteModule$DynamiteLoaderClassLoader; +Lcom/google/android/gms/dynamite/DynamiteModule$LoadingException; +Lcom/google/android/gms/dynamite/DynamiteModule$VersionPolicy; +Lcom/google/android/gms/dynamite/DynamiteModule$VersionPolicy$IVersions; +Lcom/google/android/gms/dynamite/DynamiteModule$VersionPolicy$SelectionResult; +HSPLcom/google/android/gms/dynamite/DynamiteModule$VersionPolicy$SelectionResult;->()V +Lcom/google/android/gms/dynamite/descriptors/com/google/android/gms/measurement/dynamite/ModuleDescriptor; +Lcom/google/android/gms/dynamite/zza; +HSPLcom/google/android/gms/dynamite/zza;->(Ljava/lang/ThreadGroup;Ljava/lang/String;)V +HSPLcom/google/android/gms/dynamite/zza;->run()V +Lcom/google/android/gms/dynamite/zzb; +HSPLcom/google/android/gms/dynamite/zzb;->()V +HSPLcom/google/android/gms/dynamite/zzb;->zza()Ljava/lang/ClassLoader; +HSPLcom/google/android/gms/dynamite/zzb;->zzb()Ljava/lang/ClassLoader; +HSPLcom/google/android/gms/dynamite/zzb;->zzc()Ljava/lang/Thread; +Lcom/google/android/gms/dynamite/zzd; +HSPLcom/google/android/gms/dynamite/zzd;->()V +HSPLcom/google/android/gms/dynamite/zzd;->initialValue()Ljava/lang/Object; +Lcom/google/android/gms/dynamite/zze; +HSPLcom/google/android/gms/dynamite/zze;->()V +HSPLcom/google/android/gms/dynamite/zze;->zza(Landroid/content/Context;Ljava/lang/String;)I +HSPLcom/google/android/gms/dynamite/zze;->zzb(Landroid/content/Context;Ljava/lang/String;Z)I +Lcom/google/android/gms/dynamite/zzf; +HSPLcom/google/android/gms/dynamite/zzf;->()V +Lcom/google/android/gms/dynamite/zzg; +HSPLcom/google/android/gms/dynamite/zzg;->()V +Lcom/google/android/gms/dynamite/zzh; +HSPLcom/google/android/gms/dynamite/zzh;->()V +Lcom/google/android/gms/dynamite/zzi; +HSPLcom/google/android/gms/dynamite/zzi;->()V +HSPLcom/google/android/gms/dynamite/zzi;->selectModule(Landroid/content/Context;Ljava/lang/String;Lcom/google/android/gms/dynamite/DynamiteModule$VersionPolicy$IVersions;)Lcom/google/android/gms/dynamite/DynamiteModule$VersionPolicy$SelectionResult; +Lcom/google/android/gms/dynamite/zzj; +HSPLcom/google/android/gms/dynamite/zzj;->()V +Lcom/google/android/gms/dynamite/zzk; +HSPLcom/google/android/gms/dynamite/zzk;->()V +Lcom/google/android/gms/dynamite/zzl; +HSPLcom/google/android/gms/dynamite/zzl;->()V +Lcom/google/android/gms/dynamite/zzn; +HSPLcom/google/android/gms/dynamite/zzn;->(Lcom/google/android/gms/dynamite/zzm;)V +Lcom/google/android/gms/dynamite/zzr; +HSPLcom/google/android/gms/dynamite/zzr;->(Landroid/os/IBinder;)V +Lcom/google/android/gms/internal/common/zza; +HSPLcom/google/android/gms/internal/common/zza;->(Landroid/os/IBinder;Ljava/lang/String;)V +Lcom/google/android/gms/internal/common/zzb; +HSPLcom/google/android/gms/internal/common/zzb;->(Ljava/lang/String;)V +HSPLcom/google/android/gms/internal/common/zzb;->asBinder()Landroid/os/IBinder; +HSPLcom/google/android/gms/internal/common/zzb;->onTransact(ILandroid/os/Parcel;Landroid/os/Parcel;I)Z +Lcom/google/android/gms/internal/common/zzc; +HSPLcom/google/android/gms/internal/common/zzc;->()V +HSPLcom/google/android/gms/internal/common/zzc;->zza(Landroid/os/Parcel;Landroid/os/Parcelable$Creator;)Landroid/os/Parcelable; +HSPLcom/google/android/gms/internal/common/zzc;->zzb(Landroid/os/Parcel;)V +Lcom/google/android/gms/internal/common/zzi; +HSPLcom/google/android/gms/internal/common/zzi;->(Landroid/os/Looper;)V +HSPLcom/google/android/gms/internal/common/zzi;->(Landroid/os/Looper;Landroid/os/Handler$Callback;)V +Lcom/google/android/gms/internal/measurement/zzbu; +HSPLcom/google/android/gms/internal/measurement/zzbu;->(Landroid/os/IBinder;Ljava/lang/String;)V +HSPLcom/google/android/gms/internal/measurement/zzbu;->a_()Landroid/os/Parcel; +HSPLcom/google/android/gms/internal/measurement/zzbu;->zza(ILandroid/os/Parcel;)Landroid/os/Parcel; +HSPLcom/google/android/gms/internal/measurement/zzbu;->zzb(ILandroid/os/Parcel;)V +Lcom/google/android/gms/internal/measurement/zzbw; +HSPLcom/google/android/gms/internal/measurement/zzbw;->()V +HSPLcom/google/android/gms/internal/measurement/zzbw;->zza(Landroid/os/Parcel;Landroid/os/Parcelable;)V +Lcom/google/android/gms/internal/measurement/zzbx; +HSPLcom/google/android/gms/internal/measurement/zzbx;->()V +HSPLcom/google/android/gms/internal/measurement/zzbx;->(Ljava/lang/String;)V +Lcom/google/android/gms/internal/measurement/zzch; +HSPLcom/google/android/gms/internal/measurement/zzch;->()V +HSPLcom/google/android/gms/internal/measurement/zzch;->zza()Lcom/google/android/gms/internal/measurement/zzci; +Lcom/google/android/gms/internal/measurement/zzci; +Lcom/google/android/gms/internal/measurement/zzck; +HSPLcom/google/android/gms/internal/measurement/zzck;->()V +HSPLcom/google/android/gms/internal/measurement/zzck;->(Lcom/google/android/gms/internal/measurement/zzcj;)V +HSPLcom/google/android/gms/internal/measurement/zzck;->zza(Ljava/util/concurrent/ThreadFactory;I)Ljava/util/concurrent/ExecutorService; +Lcom/google/android/gms/internal/measurement/zzcl; +HSPLcom/google/android/gms/internal/measurement/zzcl;->zza()Lcom/google/android/gms/internal/measurement/zzcm; +Lcom/google/android/gms/internal/measurement/zzcm; +Lcom/google/android/gms/internal/measurement/zzcn; +HSPLcom/google/android/gms/internal/measurement/zzcn;->()V +HSPLcom/google/android/gms/internal/measurement/zzcn;->zza(Ljava/lang/Runnable;)Ljava/lang/Runnable; +Lcom/google/android/gms/internal/measurement/zzco; +HSPLcom/google/android/gms/internal/measurement/zzco;->()V +HSPLcom/google/android/gms/internal/measurement/zzco;->zza()Lcom/google/android/gms/internal/measurement/zzcm; +Lcom/google/android/gms/internal/measurement/zzcp; +HSPLcom/google/android/gms/internal/measurement/zzcp;->()V +HSPLcom/google/android/gms/internal/measurement/zzcp;->(Landroid/os/Looper;)V +Lcom/google/android/gms/internal/measurement/zzcq; +HSPLcom/google/android/gms/internal/measurement/zzcq;->()V +Lcom/google/android/gms/internal/measurement/zzct; +HSPLcom/google/android/gms/internal/measurement/zzct;->()V +HSPLcom/google/android/gms/internal/measurement/zzct;->asInterface(Landroid/os/IBinder;)Lcom/google/android/gms/internal/measurement/zzcu; +Lcom/google/android/gms/internal/measurement/zzcu; +Lcom/google/android/gms/internal/measurement/zzcz; +HSPLcom/google/android/gms/internal/measurement/zzcz;->()V +Lcom/google/android/gms/internal/measurement/zzda; +Lcom/google/android/gms/internal/measurement/zzdd; +HSPLcom/google/android/gms/internal/measurement/zzdd;->()V +HSPLcom/google/android/gms/internal/measurement/zzdd;->(JJZLjava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;Ljava/lang/String;)V +Lcom/google/android/gms/internal/measurement/zzdf; +HSPLcom/google/android/gms/internal/measurement/zzdf;->(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)V +HSPLcom/google/android/gms/internal/measurement/zzdf;->zza(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Landroid/os/Bundle;)Lcom/google/android/gms/internal/measurement/zzdf; +HSPLcom/google/android/gms/internal/measurement/zzdf;->zza(Landroid/content/Context;Z)Lcom/google/android/gms/internal/measurement/zzcu; +HSPLcom/google/android/gms/internal/measurement/zzdf;->zza(Lcom/google/android/gms/internal/measurement/zzdf$zza;)V +HSPLcom/google/android/gms/internal/measurement/zzdf;->zza(Lcom/google/android/gms/internal/measurement/zzdf;)Lcom/google/android/gms/internal/measurement/zzcu; +HSPLcom/google/android/gms/internal/measurement/zzdf;->zza(Lcom/google/android/gms/internal/measurement/zzdf;Lcom/google/android/gms/internal/measurement/zzcu;)V +HSPLcom/google/android/gms/internal/measurement/zzdf;->zza(Lcom/google/android/gms/internal/measurement/zzdf;Lcom/google/android/gms/internal/measurement/zzdf$zza;)V +HSPLcom/google/android/gms/internal/measurement/zzdf;->zza(Lcom/google/android/gms/internal/measurement/zzdf;Ljava/lang/String;Ljava/lang/String;)Z +HSPLcom/google/android/gms/internal/measurement/zzdf;->zza(Lcom/google/android/gms/measurement/internal/zzil;)V +HSPLcom/google/android/gms/internal/measurement/zzdf;->zzb()Lcom/google/android/gms/measurement/api/AppMeasurementSdk; +HSPLcom/google/android/gms/internal/measurement/zzdf;->zzb(Landroid/content/Context;)Z +HSPLcom/google/android/gms/internal/measurement/zzdf;->zzc(Lcom/google/android/gms/internal/measurement/zzdf;)Z +HSPLcom/google/android/gms/internal/measurement/zzdf;->zzc(Ljava/lang/String;Ljava/lang/String;)Z +HSPLcom/google/android/gms/internal/measurement/zzdf;->zzk()Z +Lcom/google/android/gms/internal/measurement/zzdf$zza; +HSPLcom/google/android/gms/internal/measurement/zzdf$zza;->(Lcom/google/android/gms/internal/measurement/zzdf;)V +HSPLcom/google/android/gms/internal/measurement/zzdf$zza;->(Lcom/google/android/gms/internal/measurement/zzdf;Z)V +HSPLcom/google/android/gms/internal/measurement/zzdf$zza;->run()V +Lcom/google/android/gms/internal/measurement/zzdf$zzb; +HSPLcom/google/android/gms/internal/measurement/zzdf$zzb;->(Lcom/google/android/gms/measurement/internal/zzil;)V +HSPLcom/google/android/gms/internal/measurement/zzdf$zzb;->zza()I +Lcom/google/android/gms/internal/measurement/zzdf$zzd; +HSPLcom/google/android/gms/internal/measurement/zzdf$zzd;->(Lcom/google/android/gms/internal/measurement/zzdf;)V +HSPLcom/google/android/gms/internal/measurement/zzdf$zzd;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V +HSPLcom/google/android/gms/internal/measurement/zzdf$zzd;->onActivityResumed(Landroid/app/Activity;)V +HSPLcom/google/android/gms/internal/measurement/zzdf$zzd;->onActivityStarted(Landroid/app/Activity;)V +Lcom/google/android/gms/internal/measurement/zzdg; +HSPLcom/google/android/gms/internal/measurement/zzdg;->()V +Lcom/google/android/gms/internal/measurement/zzdi; +HSPLcom/google/android/gms/internal/measurement/zzdi;->(Lcom/google/android/gms/internal/measurement/zzdf;Ljava/lang/String;Ljava/lang/String;Landroid/content/Context;Landroid/os/Bundle;)V +HSPLcom/google/android/gms/internal/measurement/zzdi;->zza()V +Lcom/google/android/gms/internal/measurement/zzdr; +HSPLcom/google/android/gms/internal/measurement/zzdr;->(Lcom/google/android/gms/internal/measurement/zzdf;)V +HSPLcom/google/android/gms/internal/measurement/zzdr;->newThread(Ljava/lang/Runnable;)Ljava/lang/Thread; +Lcom/google/android/gms/internal/measurement/zzej; +HSPLcom/google/android/gms/internal/measurement/zzej;->(Lcom/google/android/gms/internal/measurement/zzdf;Lcom/google/android/gms/internal/measurement/zzdf$zzb;)V +HSPLcom/google/android/gms/internal/measurement/zzej;->zza()V +Lcom/google/android/gms/internal/measurement/zzeo; +HSPLcom/google/android/gms/internal/measurement/zzeo;->(Lcom/google/android/gms/internal/measurement/zzdf$zzd;Landroid/os/Bundle;Landroid/app/Activity;)V +HSPLcom/google/android/gms/internal/measurement/zzeo;->zza()V +Lcom/google/android/gms/internal/measurement/zzep; +HSPLcom/google/android/gms/internal/measurement/zzep;->(Lcom/google/android/gms/internal/measurement/zzdf$zzd;Landroid/app/Activity;)V +HSPLcom/google/android/gms/internal/measurement/zzep;->zza()V +Lcom/google/android/gms/internal/measurement/zzeq; +HSPLcom/google/android/gms/internal/measurement/zzeq;->(Lcom/google/android/gms/internal/measurement/zzdf$zzd;Landroid/app/Activity;)V +HSPLcom/google/android/gms/internal/measurement/zzeq;->zza()V +Lcom/google/android/gms/internal/measurement/zzfr; +HSPLcom/google/android/gms/internal/measurement/zzfr;->()V +Lcom/google/android/gms/internal/measurement/zzfr$zzb; +Lcom/google/android/gms/internal/measurement/zzfv; +HSPLcom/google/android/gms/internal/measurement/zzfv;->(Landroid/content/Context;Lcom/google/common/base/Supplier;)V +HSPLcom/google/android/gms/internal/measurement/zzfv;->zza()Landroid/content/Context; +HSPLcom/google/android/gms/internal/measurement/zzfv;->zzb()Lcom/google/common/base/Supplier; +Lcom/google/android/gms/internal/measurement/zzfx; +HSPLcom/google/android/gms/internal/measurement/zzfx;->(Lcom/google/android/gms/internal/measurement/zzfy;)V +HSPLcom/google/android/gms/internal/measurement/zzfx;->zza()Ljava/lang/Object; +Lcom/google/android/gms/internal/measurement/zzfy; +HSPLcom/google/android/gms/internal/measurement/zzfy;->()V +HSPLcom/google/android/gms/internal/measurement/zzfy;->(Landroid/content/ContentResolver;Landroid/net/Uri;Ljava/lang/Runnable;)V +HSPLcom/google/android/gms/internal/measurement/zzfy;->zza()Ljava/util/Map; +HSPLcom/google/android/gms/internal/measurement/zzfy;->zza(Landroid/content/ContentResolver;Landroid/net/Uri;Ljava/lang/Runnable;)Lcom/google/android/gms/internal/measurement/zzfy; +HSPLcom/google/android/gms/internal/measurement/zzfy;->zza(Ljava/lang/String;)Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zzfy;->zzb()Ljava/util/Map; +HSPLcom/google/android/gms/internal/measurement/zzfy;->zzc()V +HSPLcom/google/android/gms/internal/measurement/zzfy;->zzd()V +HSPLcom/google/android/gms/internal/measurement/zzfy;->zze()Ljava/util/Map; +Lcom/google/android/gms/internal/measurement/zzga; +HSPLcom/google/android/gms/internal/measurement/zzga;->(Lcom/google/android/gms/internal/measurement/zzfy;Landroid/os/Handler;)V +HSPLcom/google/android/gms/internal/measurement/zzga;->onChange(Z)V +Lcom/google/android/gms/internal/measurement/zzgb; +Lcom/google/android/gms/internal/measurement/zzgd; +Lcom/google/android/gms/internal/measurement/zzge; +HSPLcom/google/android/gms/internal/measurement/zzge;->zza(Lcom/google/android/gms/internal/measurement/zzgd;)Ljava/lang/Object; +Lcom/google/android/gms/internal/measurement/zzgg; +HSPLcom/google/android/gms/internal/measurement/zzgg;->zza()V +Lcom/google/android/gms/internal/measurement/zzgh; +Lcom/google/android/gms/internal/measurement/zzgj; +HSPLcom/google/android/gms/internal/measurement/zzgj;->()V +Lcom/google/android/gms/internal/measurement/zzgj$zza; +HSPLcom/google/android/gms/internal/measurement/zzgj$zza;->()V +HSPLcom/google/android/gms/internal/measurement/zzgj$zza;->zza(Landroid/content/Context;)Lcom/google/common/base/Optional; +Lcom/google/android/gms/internal/measurement/zzgk; +HSPLcom/google/android/gms/internal/measurement/zzgk;->()V +HSPLcom/google/android/gms/internal/measurement/zzgk;->zza(Ljava/lang/String;)Landroid/net/Uri; +Lcom/google/android/gms/internal/measurement/zzgl; +HSPLcom/google/android/gms/internal/measurement/zzgl;->()V +HSPLcom/google/android/gms/internal/measurement/zzgl;->zza(Landroid/content/Context;)Z +HSPLcom/google/android/gms/internal/measurement/zzgl;->zza(Landroid/content/Context;Landroid/net/Uri;)Z +Lcom/google/android/gms/internal/measurement/zzgm; +HSPLcom/google/android/gms/internal/measurement/zzgm;->()V +HSPLcom/google/android/gms/internal/measurement/zzgm;->()V +HSPLcom/google/android/gms/internal/measurement/zzgm;->run()V +Lcom/google/android/gms/internal/measurement/zzgn; +HSPLcom/google/android/gms/internal/measurement/zzgn;->()V +HSPLcom/google/android/gms/internal/measurement/zzgn;->(Lcom/google/android/gms/internal/measurement/zzgv;Ljava/lang/String;Ljava/lang/Object;Z)V +HSPLcom/google/android/gms/internal/measurement/zzgn;->(Lcom/google/android/gms/internal/measurement/zzgv;Ljava/lang/String;Ljava/lang/Object;ZLcom/google/android/gms/internal/measurement/zzgx;)V +HSPLcom/google/android/gms/internal/measurement/zzgn;->zza()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zzgn;->zza(Landroid/content/Context;)Lcom/google/common/base/Optional; +HSPLcom/google/android/gms/internal/measurement/zzgn;->zza(Lcom/google/android/gms/internal/measurement/zzgu;)Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zzgn;->zza(Lcom/google/android/gms/internal/measurement/zzgv;Ljava/lang/String;Ljava/lang/Boolean;Z)Lcom/google/android/gms/internal/measurement/zzgn; +HSPLcom/google/android/gms/internal/measurement/zzgn;->zza(Lcom/google/android/gms/internal/measurement/zzgv;Ljava/lang/String;Ljava/lang/Double;Z)Lcom/google/android/gms/internal/measurement/zzgn; +HSPLcom/google/android/gms/internal/measurement/zzgn;->zza(Lcom/google/android/gms/internal/measurement/zzgv;Ljava/lang/String;Ljava/lang/Long;Z)Lcom/google/android/gms/internal/measurement/zzgn; +HSPLcom/google/android/gms/internal/measurement/zzgn;->zza(Lcom/google/android/gms/internal/measurement/zzgv;Ljava/lang/String;Ljava/lang/String;Z)Lcom/google/android/gms/internal/measurement/zzgn; +HSPLcom/google/android/gms/internal/measurement/zzgn;->zza(Ljava/lang/String;)Ljava/lang/String; +HSPLcom/google/android/gms/internal/measurement/zzgn;->zzb()Ljava/lang/String; +HSPLcom/google/android/gms/internal/measurement/zzgn;->zzb(Landroid/content/Context;)V +HSPLcom/google/android/gms/internal/measurement/zzgn;->zzb(Lcom/google/android/gms/internal/measurement/zzgu;)Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zzgn;->zzc()V +HSPLcom/google/android/gms/internal/measurement/zzgn;->zzd()Z +Lcom/google/android/gms/internal/measurement/zzgo; +HSPLcom/google/android/gms/internal/measurement/zzgo;->()V +HSPLcom/google/android/gms/internal/measurement/zzgo;->()V +HSPLcom/google/android/gms/internal/measurement/zzgo;->zza()Z +Lcom/google/android/gms/internal/measurement/zzgp; +HSPLcom/google/android/gms/internal/measurement/zzgp;->(Landroid/content/Context;)V +HSPLcom/google/android/gms/internal/measurement/zzgp;->get()Ljava/lang/Object; +Lcom/google/android/gms/internal/measurement/zzgq; +HSPLcom/google/android/gms/internal/measurement/zzgq;->(Lcom/google/android/gms/internal/measurement/zzgv;Ljava/lang/String;Ljava/lang/Boolean;Z)V +HSPLcom/google/android/gms/internal/measurement/zzgq;->zza(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/google/android/gms/internal/measurement/zzgr; +HSPLcom/google/android/gms/internal/measurement/zzgr;->(Lcom/google/android/gms/internal/measurement/zzgv;Ljava/lang/String;Ljava/lang/Long;Z)V +HSPLcom/google/android/gms/internal/measurement/zzgr;->zza(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zzgr;->zzb(Ljava/lang/Object;)Ljava/lang/Long; +Lcom/google/android/gms/internal/measurement/zzgs; +HSPLcom/google/android/gms/internal/measurement/zzgs;->(Lcom/google/android/gms/internal/measurement/zzgv;Ljava/lang/String;Ljava/lang/String;Z)V +HSPLcom/google/android/gms/internal/measurement/zzgs;->zza(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/google/android/gms/internal/measurement/zzgt; +HSPLcom/google/android/gms/internal/measurement/zzgt;->(Lcom/google/android/gms/internal/measurement/zzgv;Ljava/lang/String;Ljava/lang/Double;Z)V +HSPLcom/google/android/gms/internal/measurement/zzgt;->zza(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zzgt;->zzb(Ljava/lang/Object;)Ljava/lang/Double; +Lcom/google/android/gms/internal/measurement/zzgu; +HSPLcom/google/android/gms/internal/measurement/zzgu;->()V +Lcom/google/android/gms/internal/measurement/zzgv; +HSPLcom/google/android/gms/internal/measurement/zzgv;->(Landroid/net/Uri;)V +HSPLcom/google/android/gms/internal/measurement/zzgv;->(Ljava/lang/String;Landroid/net/Uri;Ljava/lang/String;Ljava/lang/String;ZZZZLcom/google/common/base/Function;)V +HSPLcom/google/android/gms/internal/measurement/zzgv;->zza()Lcom/google/android/gms/internal/measurement/zzgv; +HSPLcom/google/android/gms/internal/measurement/zzgv;->zza(Ljava/lang/String;D)Lcom/google/android/gms/internal/measurement/zzgn; +HSPLcom/google/android/gms/internal/measurement/zzgv;->zza(Ljava/lang/String;J)Lcom/google/android/gms/internal/measurement/zzgn; +HSPLcom/google/android/gms/internal/measurement/zzgv;->zza(Ljava/lang/String;Ljava/lang/String;)Lcom/google/android/gms/internal/measurement/zzgn; +HSPLcom/google/android/gms/internal/measurement/zzgv;->zza(Ljava/lang/String;Z)Lcom/google/android/gms/internal/measurement/zzgn; +HSPLcom/google/android/gms/internal/measurement/zzgv;->zzb()Lcom/google/android/gms/internal/measurement/zzgv; +Lcom/google/android/gms/internal/measurement/zzgw; +HSPLcom/google/android/gms/internal/measurement/zzgw;->()V +HSPLcom/google/android/gms/internal/measurement/zzgw;->zza()V +Lcom/google/android/gms/internal/measurement/zzgy; +HSPLcom/google/android/gms/internal/measurement/zzgy;->(Lcom/google/android/gms/internal/measurement/zzhb;)V +Lcom/google/android/gms/internal/measurement/zzhb; +Lcom/google/android/gms/internal/measurement/zzmy; +HSPLcom/google/android/gms/internal/measurement/zzmy;->()V +HSPLcom/google/android/gms/internal/measurement/zzmy;->()V +HSPLcom/google/android/gms/internal/measurement/zzmy;->get()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zzmy;->zza()Z +Lcom/google/android/gms/internal/measurement/zzna; +HSPLcom/google/android/gms/internal/measurement/zzna;->()V +HSPLcom/google/android/gms/internal/measurement/zzna;->()V +HSPLcom/google/android/gms/internal/measurement/zzna;->zza()Z +Lcom/google/android/gms/internal/measurement/zznb; +Lcom/google/android/gms/internal/measurement/zznc; +Lcom/google/android/gms/internal/measurement/zznd; +HSPLcom/google/android/gms/internal/measurement/zznd;->()V +HSPLcom/google/android/gms/internal/measurement/zznd;->()V +HSPLcom/google/android/gms/internal/measurement/zznd;->get()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zznd;->zza()Z +Lcom/google/android/gms/internal/measurement/zzne; +HSPLcom/google/android/gms/internal/measurement/zzne;->()V +HSPLcom/google/android/gms/internal/measurement/zzne;->()V +HSPLcom/google/android/gms/internal/measurement/zzne;->get()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zzne;->zza()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzaa()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzab()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzac()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzad()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzae()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzaf()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzag()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzah()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzai()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzaj()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzak()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzal()Ljava/lang/String; +HSPLcom/google/android/gms/internal/measurement/zzne;->zzam()Ljava/lang/String; +HSPLcom/google/android/gms/internal/measurement/zzne;->zzan()Ljava/lang/String; +HSPLcom/google/android/gms/internal/measurement/zzne;->zzao()Ljava/lang/String; +HSPLcom/google/android/gms/internal/measurement/zzne;->zzap()Ljava/lang/String; +HSPLcom/google/android/gms/internal/measurement/zzne;->zzaq()Ljava/lang/String; +HSPLcom/google/android/gms/internal/measurement/zzne;->zzar()Ljava/lang/String; +HSPLcom/google/android/gms/internal/measurement/zzne;->zzas()Ljava/lang/String; +HSPLcom/google/android/gms/internal/measurement/zzne;->zzat()Ljava/lang/String; +HSPLcom/google/android/gms/internal/measurement/zzne;->zzau()Ljava/lang/String; +HSPLcom/google/android/gms/internal/measurement/zzne;->zzb()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzc()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzd()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zze()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzf()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzg()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzh()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzi()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzj()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzk()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzl()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzm()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzn()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzo()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzp()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzq()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzr()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzs()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzt()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzu()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzv()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzw()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzx()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzy()J +HSPLcom/google/android/gms/internal/measurement/zzne;->zzz()J +Lcom/google/android/gms/internal/measurement/zznf; +HSPLcom/google/android/gms/internal/measurement/zznf;->()V +HSPLcom/google/android/gms/internal/measurement/zznf;->()V +HSPLcom/google/android/gms/internal/measurement/zznf;->zza()Z +Lcom/google/android/gms/internal/measurement/zzng; +HSPLcom/google/android/gms/internal/measurement/zzng;->()V +HSPLcom/google/android/gms/internal/measurement/zzng;->()V +HSPLcom/google/android/gms/internal/measurement/zzng;->zza()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzaa()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzab()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzac()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzad()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzae()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzaf()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzag()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzah()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzai()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzaj()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzak()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzal()Ljava/lang/String; +HSPLcom/google/android/gms/internal/measurement/zzng;->zzam()Ljava/lang/String; +HSPLcom/google/android/gms/internal/measurement/zzng;->zzan()Ljava/lang/String; +HSPLcom/google/android/gms/internal/measurement/zzng;->zzao()Ljava/lang/String; +HSPLcom/google/android/gms/internal/measurement/zzng;->zzap()Ljava/lang/String; +HSPLcom/google/android/gms/internal/measurement/zzng;->zzaq()Ljava/lang/String; +HSPLcom/google/android/gms/internal/measurement/zzng;->zzar()Ljava/lang/String; +HSPLcom/google/android/gms/internal/measurement/zzng;->zzas()Ljava/lang/String; +HSPLcom/google/android/gms/internal/measurement/zzng;->zzat()Ljava/lang/String; +HSPLcom/google/android/gms/internal/measurement/zzng;->zzau()Ljava/lang/String; +HSPLcom/google/android/gms/internal/measurement/zzng;->zzb()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzc()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzd()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zze()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzf()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzg()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzh()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzi()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzj()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzk()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzl()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzm()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzn()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzo()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzp()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzq()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzr()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzs()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzt()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzu()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzv()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzw()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzx()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzy()J +HSPLcom/google/android/gms/internal/measurement/zzng;->zzz()J +Lcom/google/android/gms/internal/measurement/zznh; +Lcom/google/android/gms/internal/measurement/zzni; +Lcom/google/android/gms/internal/measurement/zznj; +HSPLcom/google/android/gms/internal/measurement/zznj;->()V +HSPLcom/google/android/gms/internal/measurement/zznj;->()V +HSPLcom/google/android/gms/internal/measurement/zznj;->get()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zznj;->zza()J +Lcom/google/android/gms/internal/measurement/zznk; +HSPLcom/google/android/gms/internal/measurement/zznk;->()V +HSPLcom/google/android/gms/internal/measurement/zznk;->()V +HSPLcom/google/android/gms/internal/measurement/zznk;->get()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zznk;->zzb()Z +Lcom/google/android/gms/internal/measurement/zznl; +HSPLcom/google/android/gms/internal/measurement/zznl;->()V +HSPLcom/google/android/gms/internal/measurement/zznl;->()V +HSPLcom/google/android/gms/internal/measurement/zznl;->zza()J +Lcom/google/android/gms/internal/measurement/zznm; +HSPLcom/google/android/gms/internal/measurement/zznm;->()V +HSPLcom/google/android/gms/internal/measurement/zznm;->()V +HSPLcom/google/android/gms/internal/measurement/zznm;->zzb()Z +Lcom/google/android/gms/internal/measurement/zznn; +Lcom/google/android/gms/internal/measurement/zzno; +Lcom/google/android/gms/internal/measurement/zznp; +HSPLcom/google/android/gms/internal/measurement/zznp;->()V +HSPLcom/google/android/gms/internal/measurement/zznp;->()V +HSPLcom/google/android/gms/internal/measurement/zznp;->get()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zznp;->zza()Z +HSPLcom/google/android/gms/internal/measurement/zznp;->zzb()Z +HSPLcom/google/android/gms/internal/measurement/zznp;->zzc()Z +HSPLcom/google/android/gms/internal/measurement/zznp;->zzd()Z +HSPLcom/google/android/gms/internal/measurement/zznp;->zze()Z +HSPLcom/google/android/gms/internal/measurement/zznp;->zzf()Z +HSPLcom/google/android/gms/internal/measurement/zznp;->zzg()Z +Lcom/google/android/gms/internal/measurement/zznq; +HSPLcom/google/android/gms/internal/measurement/zznq;->()V +HSPLcom/google/android/gms/internal/measurement/zznq;->()V +HSPLcom/google/android/gms/internal/measurement/zznq;->get()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zznq;->zzb()Z +HSPLcom/google/android/gms/internal/measurement/zznq;->zzc()Z +Lcom/google/android/gms/internal/measurement/zznr; +HSPLcom/google/android/gms/internal/measurement/zznr;->()V +HSPLcom/google/android/gms/internal/measurement/zznr;->()V +HSPLcom/google/android/gms/internal/measurement/zznr;->zza()Z +HSPLcom/google/android/gms/internal/measurement/zznr;->zzb()Z +HSPLcom/google/android/gms/internal/measurement/zznr;->zzc()Z +HSPLcom/google/android/gms/internal/measurement/zznr;->zzd()Z +HSPLcom/google/android/gms/internal/measurement/zznr;->zze()Z +HSPLcom/google/android/gms/internal/measurement/zznr;->zzf()Z +HSPLcom/google/android/gms/internal/measurement/zznr;->zzg()Z +Lcom/google/android/gms/internal/measurement/zzns; +HSPLcom/google/android/gms/internal/measurement/zzns;->()V +HSPLcom/google/android/gms/internal/measurement/zzns;->()V +HSPLcom/google/android/gms/internal/measurement/zzns;->zzb()Z +HSPLcom/google/android/gms/internal/measurement/zzns;->zzc()Z +Lcom/google/android/gms/internal/measurement/zznt; +Lcom/google/android/gms/internal/measurement/zznu; +Lcom/google/android/gms/internal/measurement/zznv; +HSPLcom/google/android/gms/internal/measurement/zznv;->()V +HSPLcom/google/android/gms/internal/measurement/zznv;->()V +HSPLcom/google/android/gms/internal/measurement/zznv;->get()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zznv;->zza()Z +HSPLcom/google/android/gms/internal/measurement/zznv;->zzb()Z +Lcom/google/android/gms/internal/measurement/zznw; +HSPLcom/google/android/gms/internal/measurement/zznw;->()V +HSPLcom/google/android/gms/internal/measurement/zznw;->()V +HSPLcom/google/android/gms/internal/measurement/zznw;->get()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zznw;->zzb()Z +Lcom/google/android/gms/internal/measurement/zznx; +HSPLcom/google/android/gms/internal/measurement/zznx;->()V +HSPLcom/google/android/gms/internal/measurement/zznx;->()V +HSPLcom/google/android/gms/internal/measurement/zznx;->zza()Z +HSPLcom/google/android/gms/internal/measurement/zznx;->zzb()Z +Lcom/google/android/gms/internal/measurement/zzny; +HSPLcom/google/android/gms/internal/measurement/zzny;->()V +HSPLcom/google/android/gms/internal/measurement/zzny;->()V +HSPLcom/google/android/gms/internal/measurement/zzny;->zzb()Z +Lcom/google/android/gms/internal/measurement/zznz; +Lcom/google/android/gms/internal/measurement/zzoa; +Lcom/google/android/gms/internal/measurement/zzob; +HSPLcom/google/android/gms/internal/measurement/zzob;->()V +HSPLcom/google/android/gms/internal/measurement/zzob;->()V +HSPLcom/google/android/gms/internal/measurement/zzob;->get()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zzob;->zzb()Z +HSPLcom/google/android/gms/internal/measurement/zzob;->zzc()Z +HSPLcom/google/android/gms/internal/measurement/zzob;->zzd()Z +Lcom/google/android/gms/internal/measurement/zzoc; +HSPLcom/google/android/gms/internal/measurement/zzoc;->()V +HSPLcom/google/android/gms/internal/measurement/zzoc;->()V +HSPLcom/google/android/gms/internal/measurement/zzoc;->get()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zzoc;->zzb()Z +Lcom/google/android/gms/internal/measurement/zzod; +HSPLcom/google/android/gms/internal/measurement/zzod;->()V +HSPLcom/google/android/gms/internal/measurement/zzod;->()V +HSPLcom/google/android/gms/internal/measurement/zzod;->zzb()Z +HSPLcom/google/android/gms/internal/measurement/zzod;->zzc()Z +HSPLcom/google/android/gms/internal/measurement/zzod;->zzd()Z +Lcom/google/android/gms/internal/measurement/zzoe; +HSPLcom/google/android/gms/internal/measurement/zzoe;->()V +HSPLcom/google/android/gms/internal/measurement/zzoe;->()V +HSPLcom/google/android/gms/internal/measurement/zzoe;->zzb()Z +Lcom/google/android/gms/internal/measurement/zzof; +Lcom/google/android/gms/internal/measurement/zzog; +Lcom/google/android/gms/internal/measurement/zzoh; +HSPLcom/google/android/gms/internal/measurement/zzoh;->()V +HSPLcom/google/android/gms/internal/measurement/zzoh;->()V +HSPLcom/google/android/gms/internal/measurement/zzoh;->get()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zzoh;->zzb()Z +Lcom/google/android/gms/internal/measurement/zzoi; +HSPLcom/google/android/gms/internal/measurement/zzoi;->()V +HSPLcom/google/android/gms/internal/measurement/zzoi;->()V +HSPLcom/google/android/gms/internal/measurement/zzoi;->get()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zzoi;->zzb()Z +HSPLcom/google/android/gms/internal/measurement/zzoi;->zzc()Z +Lcom/google/android/gms/internal/measurement/zzoj; +HSPLcom/google/android/gms/internal/measurement/zzoj;->()V +HSPLcom/google/android/gms/internal/measurement/zzoj;->()V +HSPLcom/google/android/gms/internal/measurement/zzoj;->zzb()Z +Lcom/google/android/gms/internal/measurement/zzok; +HSPLcom/google/android/gms/internal/measurement/zzok;->()V +HSPLcom/google/android/gms/internal/measurement/zzok;->()V +HSPLcom/google/android/gms/internal/measurement/zzok;->zzb()Z +HSPLcom/google/android/gms/internal/measurement/zzok;->zzc()Z +Lcom/google/android/gms/internal/measurement/zzol; +Lcom/google/android/gms/internal/measurement/zzom; +Lcom/google/android/gms/internal/measurement/zzon; +HSPLcom/google/android/gms/internal/measurement/zzon;->()V +HSPLcom/google/android/gms/internal/measurement/zzon;->()V +HSPLcom/google/android/gms/internal/measurement/zzon;->get()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zzon;->zzb()Z +Lcom/google/android/gms/internal/measurement/zzoo; +HSPLcom/google/android/gms/internal/measurement/zzoo;->()V +HSPLcom/google/android/gms/internal/measurement/zzoo;->()V +HSPLcom/google/android/gms/internal/measurement/zzoo;->get()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zzoo;->zza()Z +HSPLcom/google/android/gms/internal/measurement/zzoo;->zzb()Z +Lcom/google/android/gms/internal/measurement/zzop; +HSPLcom/google/android/gms/internal/measurement/zzop;->()V +HSPLcom/google/android/gms/internal/measurement/zzop;->()V +HSPLcom/google/android/gms/internal/measurement/zzop;->zzb()Z +Lcom/google/android/gms/internal/measurement/zzoq; +HSPLcom/google/android/gms/internal/measurement/zzoq;->()V +HSPLcom/google/android/gms/internal/measurement/zzoq;->()V +HSPLcom/google/android/gms/internal/measurement/zzoq;->zza()Z +HSPLcom/google/android/gms/internal/measurement/zzoq;->zzb()Z +Lcom/google/android/gms/internal/measurement/zzor; +Lcom/google/android/gms/internal/measurement/zzos; +Lcom/google/android/gms/internal/measurement/zzot; +HSPLcom/google/android/gms/internal/measurement/zzot;->()V +HSPLcom/google/android/gms/internal/measurement/zzot;->()V +HSPLcom/google/android/gms/internal/measurement/zzot;->get()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zzot;->zzb()Z +HSPLcom/google/android/gms/internal/measurement/zzot;->zzc()Z +Lcom/google/android/gms/internal/measurement/zzou; +HSPLcom/google/android/gms/internal/measurement/zzou;->()V +HSPLcom/google/android/gms/internal/measurement/zzou;->()V +HSPLcom/google/android/gms/internal/measurement/zzou;->get()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zzou;->zza()Z +Lcom/google/android/gms/internal/measurement/zzov; +HSPLcom/google/android/gms/internal/measurement/zzov;->()V +HSPLcom/google/android/gms/internal/measurement/zzov;->()V +HSPLcom/google/android/gms/internal/measurement/zzov;->zzb()Z +HSPLcom/google/android/gms/internal/measurement/zzov;->zzc()Z +Lcom/google/android/gms/internal/measurement/zzow; +HSPLcom/google/android/gms/internal/measurement/zzow;->()V +HSPLcom/google/android/gms/internal/measurement/zzow;->()V +HSPLcom/google/android/gms/internal/measurement/zzow;->zza()Z +Lcom/google/android/gms/internal/measurement/zzox; +Lcom/google/android/gms/internal/measurement/zzoy; +Lcom/google/android/gms/internal/measurement/zzoz; +HSPLcom/google/android/gms/internal/measurement/zzoz;->()V +HSPLcom/google/android/gms/internal/measurement/zzoz;->()V +HSPLcom/google/android/gms/internal/measurement/zzoz;->get()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zzoz;->zza()Z +Lcom/google/android/gms/internal/measurement/zzpa; +HSPLcom/google/android/gms/internal/measurement/zzpa;->()V +HSPLcom/google/android/gms/internal/measurement/zzpa;->()V +HSPLcom/google/android/gms/internal/measurement/zzpa;->get()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zzpa;->zza()D +HSPLcom/google/android/gms/internal/measurement/zzpa;->zzb()J +HSPLcom/google/android/gms/internal/measurement/zzpa;->zzc()J +HSPLcom/google/android/gms/internal/measurement/zzpa;->zzd()Ljava/lang/String; +HSPLcom/google/android/gms/internal/measurement/zzpa;->zze()Z +Lcom/google/android/gms/internal/measurement/zzpb; +HSPLcom/google/android/gms/internal/measurement/zzpb;->()V +HSPLcom/google/android/gms/internal/measurement/zzpb;->()V +HSPLcom/google/android/gms/internal/measurement/zzpb;->zza()Z +Lcom/google/android/gms/internal/measurement/zzpc; +HSPLcom/google/android/gms/internal/measurement/zzpc;->()V +HSPLcom/google/android/gms/internal/measurement/zzpc;->()V +HSPLcom/google/android/gms/internal/measurement/zzpc;->zza()D +HSPLcom/google/android/gms/internal/measurement/zzpc;->zzb()J +HSPLcom/google/android/gms/internal/measurement/zzpc;->zzc()J +HSPLcom/google/android/gms/internal/measurement/zzpc;->zzd()Ljava/lang/String; +HSPLcom/google/android/gms/internal/measurement/zzpc;->zze()Z +Lcom/google/android/gms/internal/measurement/zzpd; +Lcom/google/android/gms/internal/measurement/zzpe; +Lcom/google/android/gms/internal/measurement/zzpf; +HSPLcom/google/android/gms/internal/measurement/zzpf;->()V +HSPLcom/google/android/gms/internal/measurement/zzpf;->()V +HSPLcom/google/android/gms/internal/measurement/zzpf;->get()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zzpf;->zza()Z +Lcom/google/android/gms/internal/measurement/zzpg; +HSPLcom/google/android/gms/internal/measurement/zzpg;->()V +HSPLcom/google/android/gms/internal/measurement/zzpg;->()V +HSPLcom/google/android/gms/internal/measurement/zzpg;->get()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zzpg;->zza()Z +HSPLcom/google/android/gms/internal/measurement/zzpg;->zzb()Z +HSPLcom/google/android/gms/internal/measurement/zzpg;->zzc()Z +HSPLcom/google/android/gms/internal/measurement/zzpg;->zzd()Z +HSPLcom/google/android/gms/internal/measurement/zzpg;->zze()Z +HSPLcom/google/android/gms/internal/measurement/zzpg;->zzf()Z +Lcom/google/android/gms/internal/measurement/zzph; +HSPLcom/google/android/gms/internal/measurement/zzph;->()V +HSPLcom/google/android/gms/internal/measurement/zzph;->()V +HSPLcom/google/android/gms/internal/measurement/zzph;->zza()Z +Lcom/google/android/gms/internal/measurement/zzpi; +HSPLcom/google/android/gms/internal/measurement/zzpi;->()V +HSPLcom/google/android/gms/internal/measurement/zzpi;->()V +HSPLcom/google/android/gms/internal/measurement/zzpi;->zza()Z +HSPLcom/google/android/gms/internal/measurement/zzpi;->zzb()Z +HSPLcom/google/android/gms/internal/measurement/zzpi;->zzc()Z +HSPLcom/google/android/gms/internal/measurement/zzpi;->zzd()Z +HSPLcom/google/android/gms/internal/measurement/zzpi;->zze()Z +HSPLcom/google/android/gms/internal/measurement/zzpi;->zzf()Z +Lcom/google/android/gms/internal/measurement/zzpj; +Lcom/google/android/gms/internal/measurement/zzpk; +Lcom/google/android/gms/internal/measurement/zzpl; +HSPLcom/google/android/gms/internal/measurement/zzpl;->()V +HSPLcom/google/android/gms/internal/measurement/zzpl;->()V +HSPLcom/google/android/gms/internal/measurement/zzpl;->get()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zzpl;->zza()Z +HSPLcom/google/android/gms/internal/measurement/zzpl;->zzb()Z +Lcom/google/android/gms/internal/measurement/zzpm; +HSPLcom/google/android/gms/internal/measurement/zzpm;->()V +HSPLcom/google/android/gms/internal/measurement/zzpm;->()V +HSPLcom/google/android/gms/internal/measurement/zzpm;->get()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zzpm;->zzb()Z +Lcom/google/android/gms/internal/measurement/zzpn; +HSPLcom/google/android/gms/internal/measurement/zzpn;->()V +HSPLcom/google/android/gms/internal/measurement/zzpn;->()V +HSPLcom/google/android/gms/internal/measurement/zzpn;->zza()Z +HSPLcom/google/android/gms/internal/measurement/zzpn;->zzb()Z +Lcom/google/android/gms/internal/measurement/zzpo; +HSPLcom/google/android/gms/internal/measurement/zzpo;->()V +HSPLcom/google/android/gms/internal/measurement/zzpo;->()V +HSPLcom/google/android/gms/internal/measurement/zzpo;->zzb()Z +Lcom/google/android/gms/internal/measurement/zzpp; +Lcom/google/android/gms/internal/measurement/zzpq; +Lcom/google/android/gms/internal/measurement/zzpr; +HSPLcom/google/android/gms/internal/measurement/zzpr;->()V +HSPLcom/google/android/gms/internal/measurement/zzpr;->()V +HSPLcom/google/android/gms/internal/measurement/zzpr;->get()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zzpr;->zzb()Z +Lcom/google/android/gms/internal/measurement/zzps; +HSPLcom/google/android/gms/internal/measurement/zzps;->()V +HSPLcom/google/android/gms/internal/measurement/zzps;->()V +HSPLcom/google/android/gms/internal/measurement/zzps;->get()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zzps;->zza()Z +HSPLcom/google/android/gms/internal/measurement/zzps;->zzb()Z +HSPLcom/google/android/gms/internal/measurement/zzps;->zzc()Z +HSPLcom/google/android/gms/internal/measurement/zzps;->zzd()Z +Lcom/google/android/gms/internal/measurement/zzpt; +HSPLcom/google/android/gms/internal/measurement/zzpt;->()V +HSPLcom/google/android/gms/internal/measurement/zzpt;->()V +HSPLcom/google/android/gms/internal/measurement/zzpt;->zzb()Z +Lcom/google/android/gms/internal/measurement/zzpu; +HSPLcom/google/android/gms/internal/measurement/zzpu;->()V +HSPLcom/google/android/gms/internal/measurement/zzpu;->()V +HSPLcom/google/android/gms/internal/measurement/zzpu;->zza()Z +HSPLcom/google/android/gms/internal/measurement/zzpu;->zzb()Z +HSPLcom/google/android/gms/internal/measurement/zzpu;->zzc()Z +HSPLcom/google/android/gms/internal/measurement/zzpu;->zzd()Z +Lcom/google/android/gms/internal/measurement/zzpv; +Lcom/google/android/gms/internal/measurement/zzpw; +Lcom/google/android/gms/internal/measurement/zzpx; +HSPLcom/google/android/gms/internal/measurement/zzpx;->()V +HSPLcom/google/android/gms/internal/measurement/zzpx;->()V +HSPLcom/google/android/gms/internal/measurement/zzpx;->get()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zzpx;->zza()Z +Lcom/google/android/gms/internal/measurement/zzpy; +HSPLcom/google/android/gms/internal/measurement/zzpy;->()V +HSPLcom/google/android/gms/internal/measurement/zzpy;->()V +HSPLcom/google/android/gms/internal/measurement/zzpy;->get()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zzpy;->zzb()Z +HSPLcom/google/android/gms/internal/measurement/zzpy;->zzc()Z +Lcom/google/android/gms/internal/measurement/zzpz; +HSPLcom/google/android/gms/internal/measurement/zzpz;->()V +HSPLcom/google/android/gms/internal/measurement/zzpz;->()V +HSPLcom/google/android/gms/internal/measurement/zzpz;->zza()Z +Lcom/google/android/gms/internal/measurement/zzqa; +HSPLcom/google/android/gms/internal/measurement/zzqa;->()V +HSPLcom/google/android/gms/internal/measurement/zzqa;->()V +HSPLcom/google/android/gms/internal/measurement/zzqa;->zzb()Z +HSPLcom/google/android/gms/internal/measurement/zzqa;->zzc()Z +Lcom/google/android/gms/internal/measurement/zzqb; +Lcom/google/android/gms/internal/measurement/zzqc; +Lcom/google/android/gms/internal/measurement/zzqd; +HSPLcom/google/android/gms/internal/measurement/zzqd;->()V +HSPLcom/google/android/gms/internal/measurement/zzqd;->()V +HSPLcom/google/android/gms/internal/measurement/zzqd;->get()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zzqd;->zzb()Z +HSPLcom/google/android/gms/internal/measurement/zzqd;->zzc()Z +Lcom/google/android/gms/internal/measurement/zzqe; +HSPLcom/google/android/gms/internal/measurement/zzqe;->()V +HSPLcom/google/android/gms/internal/measurement/zzqe;->()V +HSPLcom/google/android/gms/internal/measurement/zzqe;->get()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zzqe;->zzb()Z +Lcom/google/android/gms/internal/measurement/zzqf; +HSPLcom/google/android/gms/internal/measurement/zzqf;->()V +HSPLcom/google/android/gms/internal/measurement/zzqf;->()V +HSPLcom/google/android/gms/internal/measurement/zzqf;->zzb()Z +HSPLcom/google/android/gms/internal/measurement/zzqf;->zzc()Z +Lcom/google/android/gms/internal/measurement/zzqg; +HSPLcom/google/android/gms/internal/measurement/zzqg;->()V +HSPLcom/google/android/gms/internal/measurement/zzqg;->()V +HSPLcom/google/android/gms/internal/measurement/zzqg;->zzb()Z +Lcom/google/android/gms/internal/measurement/zzqh; +Lcom/google/android/gms/internal/measurement/zzqi; +Lcom/google/android/gms/internal/measurement/zzqj; +HSPLcom/google/android/gms/internal/measurement/zzqj;->()V +HSPLcom/google/android/gms/internal/measurement/zzqj;->()V +HSPLcom/google/android/gms/internal/measurement/zzqj;->get()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zzqj;->zza()Z +Lcom/google/android/gms/internal/measurement/zzqk; +HSPLcom/google/android/gms/internal/measurement/zzqk;->()V +HSPLcom/google/android/gms/internal/measurement/zzqk;->()V +HSPLcom/google/android/gms/internal/measurement/zzqk;->get()Ljava/lang/Object; +HSPLcom/google/android/gms/internal/measurement/zzqk;->zza()Z +Lcom/google/android/gms/internal/measurement/zzql; +HSPLcom/google/android/gms/internal/measurement/zzql;->()V +HSPLcom/google/android/gms/internal/measurement/zzql;->()V +HSPLcom/google/android/gms/internal/measurement/zzql;->zza()Z +Lcom/google/android/gms/internal/measurement/zzqm; +HSPLcom/google/android/gms/internal/measurement/zzqm;->()V +HSPLcom/google/android/gms/internal/measurement/zzqm;->()V +HSPLcom/google/android/gms/internal/measurement/zzqm;->zza()Z +Lcom/google/android/gms/internal/measurement/zzqn; +Lcom/google/android/gms/internal/mlkit_common/zzaf; +HSPLcom/google/android/gms/internal/mlkit_common/zzaf;->zzb(IILjava/lang/String;)I +Lcom/google/android/gms/internal/mlkit_common/zzah; +HSPLcom/google/android/gms/internal/mlkit_common/zzah;->(II)V +Lcom/google/android/gms/internal/mlkit_common/zzaj; +Lcom/google/android/gms/internal/mlkit_common/zzan; +HSPLcom/google/android/gms/internal/mlkit_common/zzan;->()V +HSPLcom/google/android/gms/internal/mlkit_common/zzan;->()V +HSPLcom/google/android/gms/internal/mlkit_common/zzan;->toArray()[Ljava/lang/Object; +HSPLcom/google/android/gms/internal/mlkit_common/zzan;->toArray([Ljava/lang/Object;)[Ljava/lang/Object; +Lcom/google/android/gms/internal/mlkit_common/zzap; +HSPLcom/google/android/gms/internal/mlkit_common/zzap;->(Lcom/google/android/gms/internal/mlkit_common/zzar;I)V +Lcom/google/android/gms/internal/mlkit_common/zzar; +HSPLcom/google/android/gms/internal/mlkit_common/zzar;->()V +HSPLcom/google/android/gms/internal/mlkit_common/zzar;->()V +HSPLcom/google/android/gms/internal/mlkit_common/zzar;->zzg([Ljava/lang/Object;I)Lcom/google/android/gms/internal/mlkit_common/zzar; +HSPLcom/google/android/gms/internal/mlkit_common/zzar;->zzi(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Lcom/google/android/gms/internal/mlkit_common/zzar; +Lcom/google/android/gms/internal/mlkit_common/zzaw; +HSPLcom/google/android/gms/internal/mlkit_common/zzaw;->zza([Ljava/lang/Object;I)[Ljava/lang/Object; +Lcom/google/android/gms/internal/mlkit_common/zzax; +HSPLcom/google/android/gms/internal/mlkit_common/zzax;->()V +HSPLcom/google/android/gms/internal/mlkit_common/zzax;->([Ljava/lang/Object;I)V +HSPLcom/google/android/gms/internal/mlkit_common/zzax;->size()I +HSPLcom/google/android/gms/internal/mlkit_common/zzax;->zzb()I +HSPLcom/google/android/gms/internal/mlkit_common/zzax;->zzc()I +HSPLcom/google/android/gms/internal/mlkit_common/zzax;->zze()[Ljava/lang/Object; +Lcom/google/android/gms/internal/mlkit_common/zzbe; +HSPLcom/google/android/gms/internal/mlkit_common/zzbe;->()V +Lcom/google/android/gms/internal/mlkit_common/zzbf; +HSPLcom/google/android/gms/internal/mlkit_common/zzbf;->()V +Lcom/google/android/gms/internal/mlkit_common/zzbh; +Lcom/google/android/gms/internal/mlkit_vision_barcode/zzbc; +HSPLcom/google/android/gms/internal/mlkit_vision_barcode/zzbc;->zzb(IILjava/lang/String;)I +Lcom/google/android/gms/internal/mlkit_vision_barcode/zzbg; +HSPLcom/google/android/gms/internal/mlkit_vision_barcode/zzbg;->(II)V +Lcom/google/android/gms/internal/mlkit_vision_barcode/zzcq; +HSPLcom/google/android/gms/internal/mlkit_vision_barcode/zzcq;->()V +HSPLcom/google/android/gms/internal/mlkit_vision_barcode/zzcq;->()V +HSPLcom/google/android/gms/internal/mlkit_vision_barcode/zzcq;->toArray()[Ljava/lang/Object; +HSPLcom/google/android/gms/internal/mlkit_vision_barcode/zzcq;->toArray([Ljava/lang/Object;)[Ljava/lang/Object; +Lcom/google/android/gms/internal/mlkit_vision_barcode/zzct; +HSPLcom/google/android/gms/internal/mlkit_vision_barcode/zzct;->(Lcom/google/android/gms/internal/mlkit_vision_barcode/zzcv;I)V +Lcom/google/android/gms/internal/mlkit_vision_barcode/zzcv; +HSPLcom/google/android/gms/internal/mlkit_vision_barcode/zzcv;->()V +HSPLcom/google/android/gms/internal/mlkit_vision_barcode/zzcv;->()V +HSPLcom/google/android/gms/internal/mlkit_vision_barcode/zzcv;->zzg([Ljava/lang/Object;I)Lcom/google/android/gms/internal/mlkit_vision_barcode/zzcv; +HSPLcom/google/android/gms/internal/mlkit_vision_barcode/zzcv;->zzh(Ljava/lang/Object;Ljava/lang/Object;)Lcom/google/android/gms/internal/mlkit_vision_barcode/zzcv; +Lcom/google/android/gms/internal/mlkit_vision_barcode/zzdm; +HSPLcom/google/android/gms/internal/mlkit_vision_barcode/zzdm;->zza([Ljava/lang/Object;I)[Ljava/lang/Object; +Lcom/google/android/gms/internal/mlkit_vision_barcode/zzdn; +HSPLcom/google/android/gms/internal/mlkit_vision_barcode/zzdn;->()V +HSPLcom/google/android/gms/internal/mlkit_vision_barcode/zzdn;->([Ljava/lang/Object;I)V +HSPLcom/google/android/gms/internal/mlkit_vision_barcode/zzdn;->size()I +HSPLcom/google/android/gms/internal/mlkit_vision_barcode/zzdn;->zzb()I +HSPLcom/google/android/gms/internal/mlkit_vision_barcode/zzdn;->zzc()I +HSPLcom/google/android/gms/internal/mlkit_vision_barcode/zzdn;->zze()[Ljava/lang/Object; +Lcom/google/android/gms/internal/mlkit_vision_barcode/zzdx; +HSPLcom/google/android/gms/internal/mlkit_vision_barcode/zzdx;->()V +Lcom/google/android/gms/internal/mlkit_vision_barcode/zzdy; +HSPLcom/google/android/gms/internal/mlkit_vision_barcode/zzdy;->()V +Lcom/google/android/gms/internal/mlkit_vision_common/zzab; +HSPLcom/google/android/gms/internal/mlkit_vision_common/zzab;->()V +Lcom/google/android/gms/internal/mlkit_vision_common/zzac; +HSPLcom/google/android/gms/internal/mlkit_vision_common/zzac;->()V +Lcom/google/android/gms/internal/mlkit_vision_common/zzf; +HSPLcom/google/android/gms/internal/mlkit_vision_common/zzf;->zzb(IILjava/lang/String;)I +Lcom/google/android/gms/internal/mlkit_vision_common/zzh; +HSPLcom/google/android/gms/internal/mlkit_vision_common/zzh;->(II)V +Lcom/google/android/gms/internal/mlkit_vision_common/zzl; +HSPLcom/google/android/gms/internal/mlkit_vision_common/zzl;->()V +HSPLcom/google/android/gms/internal/mlkit_vision_common/zzl;->()V +HSPLcom/google/android/gms/internal/mlkit_vision_common/zzl;->toArray()[Ljava/lang/Object; +HSPLcom/google/android/gms/internal/mlkit_vision_common/zzl;->toArray([Ljava/lang/Object;)[Ljava/lang/Object; +Lcom/google/android/gms/internal/mlkit_vision_common/zzn; +HSPLcom/google/android/gms/internal/mlkit_vision_common/zzn;->(Lcom/google/android/gms/internal/mlkit_vision_common/zzp;I)V +Lcom/google/android/gms/internal/mlkit_vision_common/zzp; +HSPLcom/google/android/gms/internal/mlkit_vision_common/zzp;->()V +HSPLcom/google/android/gms/internal/mlkit_vision_common/zzp;->()V +HSPLcom/google/android/gms/internal/mlkit_vision_common/zzp;->zzh([Ljava/lang/Object;I)Lcom/google/android/gms/internal/mlkit_vision_common/zzp; +HSPLcom/google/android/gms/internal/mlkit_vision_common/zzp;->zzi(Ljava/lang/Object;)Lcom/google/android/gms/internal/mlkit_vision_common/zzp; +Lcom/google/android/gms/internal/mlkit_vision_common/zzt; +HSPLcom/google/android/gms/internal/mlkit_vision_common/zzt;->zza([Ljava/lang/Object;I)[Ljava/lang/Object; +Lcom/google/android/gms/internal/mlkit_vision_common/zzu; +HSPLcom/google/android/gms/internal/mlkit_vision_common/zzu;->()V +HSPLcom/google/android/gms/internal/mlkit_vision_common/zzu;->([Ljava/lang/Object;I)V +HSPLcom/google/android/gms/internal/mlkit_vision_common/zzu;->size()I +HSPLcom/google/android/gms/internal/mlkit_vision_common/zzu;->zzb()I +HSPLcom/google/android/gms/internal/mlkit_vision_common/zzu;->zzc()I +HSPLcom/google/android/gms/internal/mlkit_vision_common/zzu;->zze()[Ljava/lang/Object; +Lcom/google/android/gms/internal/play_billing/zzb; +HSPLcom/google/android/gms/internal/play_billing/zzb;->()V +HSPLcom/google/android/gms/internal/play_billing/zzb;->zzj(Ljava/lang/String;Ljava/lang/String;)V +HSPLcom/google/android/gms/internal/play_billing/zzb;->zzk(Ljava/lang/String;Ljava/lang/String;)V +Lcom/google/android/gms/internal/play_billing/zzdf; +HSPLcom/google/android/gms/internal/play_billing/zzdf;->()V +Lcom/google/android/gms/internal/play_billing/zzdg; +HSPLcom/google/android/gms/internal/play_billing/zzdg;->()V +HSPLcom/google/android/gms/internal/play_billing/zzdg;->zzc()[B +Lcom/google/android/gms/internal/play_billing/zzdi; +HSPLcom/google/android/gms/internal/play_billing/zzdi;->()V +Lcom/google/android/gms/internal/play_billing/zzdm; +HSPLcom/google/android/gms/internal/play_billing/zzdm;->()V +Lcom/google/android/gms/internal/play_billing/zzdo; +HSPLcom/google/android/gms/internal/play_billing/zzdo;->()V +Lcom/google/android/gms/internal/play_billing/zzds; +HSPLcom/google/android/gms/internal/play_billing/zzds;->()V +Lcom/google/android/gms/internal/play_billing/zzdt; +HSPLcom/google/android/gms/internal/play_billing/zzdt;->([B)V +Lcom/google/android/gms/internal/play_billing/zzdv; +HSPLcom/google/android/gms/internal/play_billing/zzdv;->(Lcom/google/android/gms/internal/play_billing/zzdu;)V +Lcom/google/android/gms/internal/play_billing/zzdw; +HSPLcom/google/android/gms/internal/play_billing/zzdw;->()V +HSPLcom/google/android/gms/internal/play_billing/zzdw;->()V +Lcom/google/android/gms/internal/play_billing/zzdy; +HSPLcom/google/android/gms/internal/play_billing/zzdy;->([BIIZLcom/google/android/gms/internal/play_billing/zzdx;)V +HSPLcom/google/android/gms/internal/play_billing/zzdy;->zza(I)I +Lcom/google/android/gms/internal/play_billing/zzea; +HSPLcom/google/android/gms/internal/play_billing/zzea;->()V +HSPLcom/google/android/gms/internal/play_billing/zzea;->(Lcom/google/android/gms/internal/play_billing/zzdz;)V +Lcom/google/android/gms/internal/play_billing/zzeb; +HSPLcom/google/android/gms/internal/play_billing/zzeb;->([BII)V +HSPLcom/google/android/gms/internal/play_billing/zzeb;->zza()I +HSPLcom/google/android/gms/internal/play_billing/zzeb;->zzj(II)V +HSPLcom/google/android/gms/internal/play_billing/zzeb;->zzk(I)V +HSPLcom/google/android/gms/internal/play_billing/zzeb;->zzm(ILjava/lang/String;)V +HSPLcom/google/android/gms/internal/play_billing/zzeb;->zzn(Ljava/lang/String;)V +HSPLcom/google/android/gms/internal/play_billing/zzeb;->zzq(I)V +Lcom/google/android/gms/internal/play_billing/zzee; +HSPLcom/google/android/gms/internal/play_billing/zzee;->()V +HSPLcom/google/android/gms/internal/play_billing/zzee;->(Lcom/google/android/gms/internal/play_billing/zzed;)V +HSPLcom/google/android/gms/internal/play_billing/zzee;->zzA()V +HSPLcom/google/android/gms/internal/play_billing/zzee;->zzu(I)I +HSPLcom/google/android/gms/internal/play_billing/zzee;->zzv(Lcom/google/android/gms/internal/play_billing/zzgc;Lcom/google/android/gms/internal/play_billing/zzgm;)I +HSPLcom/google/android/gms/internal/play_billing/zzee;->zzw(Ljava/lang/String;)I +HSPLcom/google/android/gms/internal/play_billing/zzee;->zzx(I)I +HSPLcom/google/android/gms/internal/play_billing/zzee;->zzz([BII)Lcom/google/android/gms/internal/play_billing/zzee; +Lcom/google/android/gms/internal/play_billing/zzef; +HSPLcom/google/android/gms/internal/play_billing/zzef;->(Lcom/google/android/gms/internal/play_billing/zzee;)V +HSPLcom/google/android/gms/internal/play_billing/zzef;->zzF(ILjava/lang/String;)V +HSPLcom/google/android/gms/internal/play_billing/zzef;->zza(Lcom/google/android/gms/internal/play_billing/zzee;)Lcom/google/android/gms/internal/play_billing/zzef; +HSPLcom/google/android/gms/internal/play_billing/zzef;->zzi(II)V +HSPLcom/google/android/gms/internal/play_billing/zzef;->zzr(II)V +HSPLcom/google/android/gms/internal/play_billing/zzef;->zzv(ILjava/lang/Object;Lcom/google/android/gms/internal/play_billing/zzgm;)V +Lcom/google/android/gms/internal/play_billing/zzek; +HSPLcom/google/android/gms/internal/play_billing/zzek;->()V +Lcom/google/android/gms/internal/play_billing/zzel; +HSPLcom/google/android/gms/internal/play_billing/zzel;->()V +HSPLcom/google/android/gms/internal/play_billing/zzel;->zzc(Lcom/google/android/gms/internal/play_billing/zzgc;)Z +Lcom/google/android/gms/internal/play_billing/zzem; +HSPLcom/google/android/gms/internal/play_billing/zzem;->()V +HSPLcom/google/android/gms/internal/play_billing/zzem;->zzb()Lcom/google/android/gms/internal/play_billing/zzek; +Lcom/google/android/gms/internal/play_billing/zzep; +HSPLcom/google/android/gms/internal/play_billing/zzep;->()V +HSPLcom/google/android/gms/internal/play_billing/zzep;->(Ljava/lang/String;IIILcom/google/android/gms/internal/play_billing/zzfg;)V +HSPLcom/google/android/gms/internal/play_billing/zzep;->values()[Lcom/google/android/gms/internal/play_billing/zzep; +HSPLcom/google/android/gms/internal/play_billing/zzep;->zza()I +Lcom/google/android/gms/internal/play_billing/zzes; +HSPLcom/google/android/gms/internal/play_billing/zzes;->()V +HSPLcom/google/android/gms/internal/play_billing/zzes;->()V +HSPLcom/google/android/gms/internal/play_billing/zzes;->zza()Lcom/google/android/gms/internal/play_billing/zzes; +HSPLcom/google/android/gms/internal/play_billing/zzes;->zzb(Ljava/lang/Class;)Lcom/google/android/gms/internal/play_billing/zzfz; +HSPLcom/google/android/gms/internal/play_billing/zzes;->zzc(Ljava/lang/Class;)Z +Lcom/google/android/gms/internal/play_billing/zzet; +HSPLcom/google/android/gms/internal/play_billing/zzet;->(Lcom/google/android/gms/internal/play_billing/zzex;)V +HSPLcom/google/android/gms/internal/play_billing/zzet;->zzc()Lcom/google/android/gms/internal/play_billing/zzex; +HSPLcom/google/android/gms/internal/play_billing/zzet;->zzd()Lcom/google/android/gms/internal/play_billing/zzex; +HSPLcom/google/android/gms/internal/play_billing/zzet;->zzg()V +Lcom/google/android/gms/internal/play_billing/zzeu; +Lcom/google/android/gms/internal/play_billing/zzex; +HSPLcom/google/android/gms/internal/play_billing/zzex;->()V +HSPLcom/google/android/gms/internal/play_billing/zzex;->()V +HSPLcom/google/android/gms/internal/play_billing/zzex;->zza(Lcom/google/android/gms/internal/play_billing/zzgm;)I +HSPLcom/google/android/gms/internal/play_billing/zzex;->zze()I +HSPLcom/google/android/gms/internal/play_billing/zzex;->zzg()Lcom/google/android/gms/internal/play_billing/zzet; +HSPLcom/google/android/gms/internal/play_billing/zzex;->zzh(Ljava/lang/Class;)Lcom/google/android/gms/internal/play_billing/zzex; +HSPLcom/google/android/gms/internal/play_billing/zzex;->zzi()Lcom/google/android/gms/internal/play_billing/zzex; +HSPLcom/google/android/gms/internal/play_billing/zzex;->zzm(Lcom/google/android/gms/internal/play_billing/zzgc;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/android/gms/internal/play_billing/zzex;->zzn()V +HSPLcom/google/android/gms/internal/play_billing/zzex;->zzo()V +HSPLcom/google/android/gms/internal/play_billing/zzex;->zzp(Ljava/lang/Class;Lcom/google/android/gms/internal/play_billing/zzex;)V +HSPLcom/google/android/gms/internal/play_billing/zzex;->zzq(I)V +HSPLcom/google/android/gms/internal/play_billing/zzex;->zzr(Lcom/google/android/gms/internal/play_billing/zzee;)V +HSPLcom/google/android/gms/internal/play_billing/zzex;->zzs()Z +HSPLcom/google/android/gms/internal/play_billing/zzex;->zzt()Z +HSPLcom/google/android/gms/internal/play_billing/zzex;->zzv(Lcom/google/android/gms/internal/play_billing/zzgm;)I +Lcom/google/android/gms/internal/play_billing/zzfb; +Lcom/google/android/gms/internal/play_billing/zzfd; +HSPLcom/google/android/gms/internal/play_billing/zzfd;->()V +HSPLcom/google/android/gms/internal/play_billing/zzfd;->zzc(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object; +Lcom/google/android/gms/internal/play_billing/zzff; +Lcom/google/android/gms/internal/play_billing/zzfg; +HSPLcom/google/android/gms/internal/play_billing/zzfg;->()V +HSPLcom/google/android/gms/internal/play_billing/zzfg;->(Ljava/lang/String;ILjava/lang/Class;Ljava/lang/Class;Ljava/lang/Object;)V +HSPLcom/google/android/gms/internal/play_billing/zzfg;->zza()Ljava/lang/Class; +Lcom/google/android/gms/internal/play_billing/zzfi; +Lcom/google/android/gms/internal/play_billing/zzfm; +HSPLcom/google/android/gms/internal/play_billing/zzfm;->()V +HSPLcom/google/android/gms/internal/play_billing/zzfm;->(Lcom/google/android/gms/internal/play_billing/zzfl;)V +Lcom/google/android/gms/internal/play_billing/zzfo; +HSPLcom/google/android/gms/internal/play_billing/zzfo;->(Lcom/google/android/gms/internal/play_billing/zzfn;)V +Lcom/google/android/gms/internal/play_billing/zzfq; +HSPLcom/google/android/gms/internal/play_billing/zzfq;->()V +HSPLcom/google/android/gms/internal/play_billing/zzfq;->(Lcom/google/android/gms/internal/play_billing/zzfp;)V +HSPLcom/google/android/gms/internal/play_billing/zzfq;->zzd()Lcom/google/android/gms/internal/play_billing/zzfq; +Lcom/google/android/gms/internal/play_billing/zzfs; +HSPLcom/google/android/gms/internal/play_billing/zzfs;->()V +Lcom/google/android/gms/internal/play_billing/zzft; +HSPLcom/google/android/gms/internal/play_billing/zzft;->([Lcom/google/android/gms/internal/play_billing/zzga;)V +HSPLcom/google/android/gms/internal/play_billing/zzft;->zzb(Ljava/lang/Class;)Lcom/google/android/gms/internal/play_billing/zzfz; +Lcom/google/android/gms/internal/play_billing/zzfu; +HSPLcom/google/android/gms/internal/play_billing/zzfu;->()V +HSPLcom/google/android/gms/internal/play_billing/zzfu;->()V +HSPLcom/google/android/gms/internal/play_billing/zzfu;->zza(Ljava/lang/Class;)Lcom/google/android/gms/internal/play_billing/zzgm; +HSPLcom/google/android/gms/internal/play_billing/zzfu;->zzb(Lcom/google/android/gms/internal/play_billing/zzfz;)Z +Lcom/google/android/gms/internal/play_billing/zzfx; +HSPLcom/google/android/gms/internal/play_billing/zzfx;->()V +Lcom/google/android/gms/internal/play_billing/zzfy; +HSPLcom/google/android/gms/internal/play_billing/zzfy;->()V +HSPLcom/google/android/gms/internal/play_billing/zzfy;->zzb()Lcom/google/android/gms/internal/play_billing/zzfx; +Lcom/google/android/gms/internal/play_billing/zzfz; +Lcom/google/android/gms/internal/play_billing/zzga; +Lcom/google/android/gms/internal/play_billing/zzgb; +Lcom/google/android/gms/internal/play_billing/zzgc; +Lcom/google/android/gms/internal/play_billing/zzgd; +Lcom/google/android/gms/internal/play_billing/zzgf; +HSPLcom/google/android/gms/internal/play_billing/zzgf;->()V +HSPLcom/google/android/gms/internal/play_billing/zzgf;->([I[Ljava/lang/Object;IILcom/google/android/gms/internal/play_billing/zzgc;IZ[IIILcom/google/android/gms/internal/play_billing/zzgh;Lcom/google/android/gms/internal/play_billing/zzfq;Lcom/google/android/gms/internal/play_billing/zzhd;Lcom/google/android/gms/internal/play_billing/zzek;Lcom/google/android/gms/internal/play_billing/zzfx;)V +HSPLcom/google/android/gms/internal/play_billing/zzgf;->zzI(Ljava/lang/Object;I)Z +HSPLcom/google/android/gms/internal/play_billing/zzgf;->zzJ(Ljava/lang/Object;IIII)Z +HSPLcom/google/android/gms/internal/play_billing/zzgf;->zzL(Ljava/lang/Object;)Z +HSPLcom/google/android/gms/internal/play_billing/zzgf;->zzM(Ljava/lang/Object;II)Z +HSPLcom/google/android/gms/internal/play_billing/zzgf;->zzO(ILjava/lang/Object;Lcom/google/android/gms/internal/play_billing/zzhv;)V +HSPLcom/google/android/gms/internal/play_billing/zzgf;->zza(Ljava/lang/Object;)I +HSPLcom/google/android/gms/internal/play_billing/zzgf;->zzf(Ljava/lang/Object;)V +HSPLcom/google/android/gms/internal/play_billing/zzgf;->zzi(Ljava/lang/Object;Lcom/google/android/gms/internal/play_billing/zzhv;)V +HSPLcom/google/android/gms/internal/play_billing/zzgf;->zzl(Ljava/lang/Class;Lcom/google/android/gms/internal/play_billing/zzfz;Lcom/google/android/gms/internal/play_billing/zzgh;Lcom/google/android/gms/internal/play_billing/zzfq;Lcom/google/android/gms/internal/play_billing/zzhd;Lcom/google/android/gms/internal/play_billing/zzek;Lcom/google/android/gms/internal/play_billing/zzfx;)Lcom/google/android/gms/internal/play_billing/zzgf; +HSPLcom/google/android/gms/internal/play_billing/zzgf;->zzp(I)I +HSPLcom/google/android/gms/internal/play_billing/zzgf;->zzr(I)I +HSPLcom/google/android/gms/internal/play_billing/zzgf;->zzs(I)I +HSPLcom/google/android/gms/internal/play_billing/zzgf;->zzv(I)Lcom/google/android/gms/internal/play_billing/zzgm; +HSPLcom/google/android/gms/internal/play_billing/zzgf;->zzz(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/reflect/Field; +Lcom/google/android/gms/internal/play_billing/zzgh; +HSPLcom/google/android/gms/internal/play_billing/zzgh;->()V +Lcom/google/android/gms/internal/play_billing/zzgi; +HSPLcom/google/android/gms/internal/play_billing/zzgi;->()V +HSPLcom/google/android/gms/internal/play_billing/zzgi;->zzb()Lcom/google/android/gms/internal/play_billing/zzgh; +Lcom/google/android/gms/internal/play_billing/zzgk; +HSPLcom/google/android/gms/internal/play_billing/zzgk;->()V +HSPLcom/google/android/gms/internal/play_billing/zzgk;->()V +HSPLcom/google/android/gms/internal/play_billing/zzgk;->zza()Lcom/google/android/gms/internal/play_billing/zzgk; +HSPLcom/google/android/gms/internal/play_billing/zzgk;->zzb(Ljava/lang/Class;)Lcom/google/android/gms/internal/play_billing/zzgm; +Lcom/google/android/gms/internal/play_billing/zzgl; +HSPLcom/google/android/gms/internal/play_billing/zzgl;->(Lcom/google/android/gms/internal/play_billing/zzgc;Ljava/lang/String;[Ljava/lang/Object;)V +HSPLcom/google/android/gms/internal/play_billing/zzgl;->zza()Lcom/google/android/gms/internal/play_billing/zzgc; +HSPLcom/google/android/gms/internal/play_billing/zzgl;->zzb()Z +HSPLcom/google/android/gms/internal/play_billing/zzgl;->zzc()I +HSPLcom/google/android/gms/internal/play_billing/zzgl;->zzd()Ljava/lang/String; +HSPLcom/google/android/gms/internal/play_billing/zzgl;->zze()[Ljava/lang/Object; +Lcom/google/android/gms/internal/play_billing/zzgm; +Lcom/google/android/gms/internal/play_billing/zzgn; +Lcom/google/android/gms/internal/play_billing/zzgo; +HSPLcom/google/android/gms/internal/play_billing/zzgo;->()V +HSPLcom/google/android/gms/internal/play_billing/zzgo;->zzh(ILjava/lang/Object;Lcom/google/android/gms/internal/play_billing/zzgm;)I +HSPLcom/google/android/gms/internal/play_billing/zzgo;->zzn()Lcom/google/android/gms/internal/play_billing/zzhd; +HSPLcom/google/android/gms/internal/play_billing/zzgo;->zzq(Ljava/lang/Class;)V +Lcom/google/android/gms/internal/play_billing/zzhc; +Lcom/google/android/gms/internal/play_billing/zzhd; +HSPLcom/google/android/gms/internal/play_billing/zzhd;->()V +Lcom/google/android/gms/internal/play_billing/zzhe; +HSPLcom/google/android/gms/internal/play_billing/zzhe;->()V +HSPLcom/google/android/gms/internal/play_billing/zzhe;->(I[I[Ljava/lang/Object;Z)V +HSPLcom/google/android/gms/internal/play_billing/zzhe;->zza()I +HSPLcom/google/android/gms/internal/play_billing/zzhe;->zzc()Lcom/google/android/gms/internal/play_billing/zzhe; +HSPLcom/google/android/gms/internal/play_billing/zzhe;->zzh()V +HSPLcom/google/android/gms/internal/play_billing/zzhe;->zzk(Lcom/google/android/gms/internal/play_billing/zzhv;)V +Lcom/google/android/gms/internal/play_billing/zzhf; +HSPLcom/google/android/gms/internal/play_billing/zzhf;->()V +HSPLcom/google/android/gms/internal/play_billing/zzhf;->zza(Ljava/lang/Object;)I +HSPLcom/google/android/gms/internal/play_billing/zzhf;->zzd(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/android/gms/internal/play_billing/zzhf;->zzg(Ljava/lang/Object;)V +HSPLcom/google/android/gms/internal/play_billing/zzhf;->zzi(Ljava/lang/Object;Lcom/google/android/gms/internal/play_billing/zzhv;)V +Lcom/google/android/gms/internal/play_billing/zzhj; +HSPLcom/google/android/gms/internal/play_billing/zzhj;->()V +HSPLcom/google/android/gms/internal/play_billing/zzhj;->run()Ljava/lang/Object; +Lcom/google/android/gms/internal/play_billing/zzhl; +HSPLcom/google/android/gms/internal/play_billing/zzhl;->(Lsun/misc/Unsafe;)V +Lcom/google/android/gms/internal/play_billing/zzhm; +HSPLcom/google/android/gms/internal/play_billing/zzhm;->(Lsun/misc/Unsafe;)V +Lcom/google/android/gms/internal/play_billing/zzhn; +HSPLcom/google/android/gms/internal/play_billing/zzhn;->()V +HSPLcom/google/android/gms/internal/play_billing/zzhn;->zzA(Ljava/lang/Class;)I +HSPLcom/google/android/gms/internal/play_billing/zzhn;->zzB()Ljava/lang/reflect/Field; +HSPLcom/google/android/gms/internal/play_billing/zzhn;->zzC(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/reflect/Field; +HSPLcom/google/android/gms/internal/play_billing/zzhn;->zzc(Ljava/lang/Object;J)I +HSPLcom/google/android/gms/internal/play_billing/zzhn;->zzg()Lsun/misc/Unsafe; +HSPLcom/google/android/gms/internal/play_billing/zzhn;->zzv(Ljava/lang/Class;)Z +HSPLcom/google/android/gms/internal/play_billing/zzhn;->zzx()Z +HSPLcom/google/android/gms/internal/play_billing/zzhn;->zzy()Z +HSPLcom/google/android/gms/internal/play_billing/zzhn;->zzz(Ljava/lang/Class;)I +Lcom/google/android/gms/internal/play_billing/zzhp; +HSPLcom/google/android/gms/internal/play_billing/zzhp;->()V +Lcom/google/android/gms/internal/play_billing/zzhq; +HSPLcom/google/android/gms/internal/play_billing/zzhq;->()V +Lcom/google/android/gms/internal/play_billing/zzhr; +Lcom/google/android/gms/internal/play_billing/zzhs; +HSPLcom/google/android/gms/internal/play_billing/zzhs;->()V +HSPLcom/google/android/gms/internal/play_billing/zzhs;->zzb(Ljava/lang/CharSequence;[BII)I +HSPLcom/google/android/gms/internal/play_billing/zzhs;->zzc(Ljava/lang/CharSequence;)I +Lcom/google/android/gms/internal/play_billing/zzhv; +Lcom/google/android/gms/internal/play_billing/zzhx; +HSPLcom/google/android/gms/internal/play_billing/zzhx;->(Lcom/google/android/gms/internal/play_billing/zzhw;)V +HSPLcom/google/android/gms/internal/play_billing/zzhx;->zzi(Lcom/google/android/gms/internal/play_billing/zzie;)Lcom/google/android/gms/internal/play_billing/zzhx; +HSPLcom/google/android/gms/internal/play_billing/zzhx;->zzk(I)Lcom/google/android/gms/internal/play_billing/zzhx; +Lcom/google/android/gms/internal/play_billing/zzhy; +HSPLcom/google/android/gms/internal/play_billing/zzhy;->()V +HSPLcom/google/android/gms/internal/play_billing/zzhy;->()V +HSPLcom/google/android/gms/internal/play_billing/zzhy;->zzA(Lcom/google/android/gms/internal/play_billing/zzhy;I)V +HSPLcom/google/android/gms/internal/play_billing/zzhy;->zzu(ILjava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/android/gms/internal/play_billing/zzhy;->zzv()Lcom/google/android/gms/internal/play_billing/zzhx; +HSPLcom/google/android/gms/internal/play_billing/zzhy;->zzw()Lcom/google/android/gms/internal/play_billing/zzhy; +HSPLcom/google/android/gms/internal/play_billing/zzhy;->zzy(Lcom/google/android/gms/internal/play_billing/zzhy;Lcom/google/android/gms/internal/play_billing/zzii;)V +Lcom/google/android/gms/internal/play_billing/zzhz; +HSPLcom/google/android/gms/internal/play_billing/zzhz;->()V +HSPLcom/google/android/gms/internal/play_billing/zzhz;->()V +Lcom/google/android/gms/internal/play_billing/zzic; +Lcom/google/android/gms/internal/play_billing/zzie; +HSPLcom/google/android/gms/internal/play_billing/zzie;->(Lcom/google/android/gms/internal/play_billing/zzid;)V +HSPLcom/google/android/gms/internal/play_billing/zzie;->zzj(Ljava/lang/String;)Lcom/google/android/gms/internal/play_billing/zzie; +HSPLcom/google/android/gms/internal/play_billing/zzie;->zzk(I)Lcom/google/android/gms/internal/play_billing/zzie; +HSPLcom/google/android/gms/internal/play_billing/zzie;->zzl(I)Lcom/google/android/gms/internal/play_billing/zzie; +Lcom/google/android/gms/internal/play_billing/zzig; +HSPLcom/google/android/gms/internal/play_billing/zzig;->()V +HSPLcom/google/android/gms/internal/play_billing/zzig;->()V +Lcom/google/android/gms/internal/play_billing/zzii; +HSPLcom/google/android/gms/internal/play_billing/zzii;->()V +HSPLcom/google/android/gms/internal/play_billing/zzii;->()V +HSPLcom/google/android/gms/internal/play_billing/zzii;->zzA(Lcom/google/android/gms/internal/play_billing/zzii;I)V +HSPLcom/google/android/gms/internal/play_billing/zzii;->zzu(ILjava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/android/gms/internal/play_billing/zzii;->zzv()Lcom/google/android/gms/internal/play_billing/zzie; +HSPLcom/google/android/gms/internal/play_billing/zzii;->zzw()Lcom/google/android/gms/internal/play_billing/zzii; +HSPLcom/google/android/gms/internal/play_billing/zzii;->zzx(Lcom/google/android/gms/internal/play_billing/zzii;I)V +HSPLcom/google/android/gms/internal/play_billing/zzii;->zzy(Lcom/google/android/gms/internal/play_billing/zzii;Ljava/lang/String;)V +Lcom/google/android/gms/internal/play_billing/zzil; +Lcom/google/android/gms/internal/play_billing/zzin; +HSPLcom/google/android/gms/internal/play_billing/zzin;->(Lcom/google/android/gms/internal/play_billing/zzim;)V +HSPLcom/google/android/gms/internal/play_billing/zzin;->zzi(Ljava/lang/String;)Lcom/google/android/gms/internal/play_billing/zzin; +HSPLcom/google/android/gms/internal/play_billing/zzin;->zzj(Ljava/lang/String;)Lcom/google/android/gms/internal/play_billing/zzin; +Lcom/google/android/gms/internal/play_billing/zzio; +HSPLcom/google/android/gms/internal/play_billing/zzio;->()V +HSPLcom/google/android/gms/internal/play_billing/zzio;->()V +HSPLcom/google/android/gms/internal/play_billing/zzio;->zzu(ILjava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/android/gms/internal/play_billing/zzio;->zzv()Lcom/google/android/gms/internal/play_billing/zzin; +HSPLcom/google/android/gms/internal/play_billing/zzio;->zzw()Lcom/google/android/gms/internal/play_billing/zzio; +HSPLcom/google/android/gms/internal/play_billing/zzio;->zzx(Lcom/google/android/gms/internal/play_billing/zzio;Ljava/lang/String;)V +HSPLcom/google/android/gms/internal/play_billing/zzio;->zzy(Lcom/google/android/gms/internal/play_billing/zzio;Ljava/lang/String;)V +Lcom/google/android/gms/internal/play_billing/zzis; +Lcom/google/android/gms/internal/play_billing/zziu; +HSPLcom/google/android/gms/internal/play_billing/zziu;->(Lcom/google/android/gms/internal/play_billing/zzit;)V +HSPLcom/google/android/gms/internal/play_billing/zziu;->zzi(Lcom/google/android/gms/internal/play_billing/zzhy;)Lcom/google/android/gms/internal/play_billing/zziu; +HSPLcom/google/android/gms/internal/play_billing/zziu;->zzk(Lcom/google/android/gms/internal/play_billing/zzio;)Lcom/google/android/gms/internal/play_billing/zziu; +Lcom/google/android/gms/internal/play_billing/zziv; +HSPLcom/google/android/gms/internal/play_billing/zziv;->()V +HSPLcom/google/android/gms/internal/play_billing/zziv;->()V +HSPLcom/google/android/gms/internal/play_billing/zziv;->zzu(ILjava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/android/gms/internal/play_billing/zziv;->zzv()Lcom/google/android/gms/internal/play_billing/zziu; +HSPLcom/google/android/gms/internal/play_billing/zziv;->zzw()Lcom/google/android/gms/internal/play_billing/zziv; +HSPLcom/google/android/gms/internal/play_billing/zziv;->zzy(Lcom/google/android/gms/internal/play_billing/zziv;Lcom/google/android/gms/internal/play_billing/zzio;)V +HSPLcom/google/android/gms/internal/play_billing/zziv;->zzz(Lcom/google/android/gms/internal/play_billing/zziv;Lcom/google/android/gms/internal/play_billing/zzhy;)V +Lcom/google/android/gms/internal/play_billing/zziz; +Lcom/google/android/gms/internal/play_billing/zzk; +HSPLcom/google/android/gms/internal/play_billing/zzk;->(Landroid/os/IBinder;)V +HSPLcom/google/android/gms/internal/play_billing/zzk;->zzv(ILjava/lang/String;Ljava/lang/String;)I +Lcom/google/android/gms/internal/play_billing/zzl; +HSPLcom/google/android/gms/internal/play_billing/zzl;->zzr(Landroid/os/IBinder;)Lcom/google/android/gms/internal/play_billing/zzm; +Lcom/google/android/gms/internal/play_billing/zzm; +Lcom/google/android/gms/internal/play_billing/zzp; +HSPLcom/google/android/gms/internal/play_billing/zzp;->(Landroid/os/IBinder;Ljava/lang/String;)V +HSPLcom/google/android/gms/internal/play_billing/zzp;->zzr()Landroid/os/Parcel; +HSPLcom/google/android/gms/internal/play_billing/zzp;->zzs(ILandroid/os/Parcel;)Landroid/os/Parcel; +Lcom/google/android/gms/internal/play_billing/zzq; +Lcom/google/android/gms/internal/tasks/zza; +HSPLcom/google/android/gms/internal/tasks/zza;->(Landroid/os/Looper;)V +Lcom/google/android/gms/measurement/api/AppMeasurementSdk; +HSPLcom/google/android/gms/measurement/api/AppMeasurementSdk;->(Lcom/google/android/gms/internal/measurement/zzdf;)V +HSPLcom/google/android/gms/measurement/api/AppMeasurementSdk;->registerOnMeasurementEventListener(Lcom/google/android/gms/measurement/api/AppMeasurementSdk$OnEventListener;)V +Lcom/google/android/gms/measurement/api/AppMeasurementSdk$OnEventListener; +Lcom/google/android/gms/measurement/internal/AppMeasurementDynamiteService; +HSPLcom/google/android/gms/measurement/internal/AppMeasurementDynamiteService;->()V +HSPLcom/google/android/gms/measurement/internal/AppMeasurementDynamiteService;->initialize(Lcom/google/android/gms/dynamic/IObjectWrapper;Lcom/google/android/gms/internal/measurement/zzdd;J)V +HSPLcom/google/android/gms/measurement/internal/AppMeasurementDynamiteService;->onActivityCreated(Lcom/google/android/gms/dynamic/IObjectWrapper;Landroid/os/Bundle;J)V +HSPLcom/google/android/gms/measurement/internal/AppMeasurementDynamiteService;->onActivityResumed(Lcom/google/android/gms/dynamic/IObjectWrapper;J)V +HSPLcom/google/android/gms/measurement/internal/AppMeasurementDynamiteService;->onActivityStarted(Lcom/google/android/gms/dynamic/IObjectWrapper;J)V +HSPLcom/google/android/gms/measurement/internal/AppMeasurementDynamiteService;->registerOnMeasurementEventListener(Lcom/google/android/gms/internal/measurement/zzda;)V +HSPLcom/google/android/gms/measurement/internal/AppMeasurementDynamiteService;->zza()V +Lcom/google/android/gms/measurement/internal/AppMeasurementDynamiteService$zzb; +HSPLcom/google/android/gms/measurement/internal/AppMeasurementDynamiteService$zzb;->(Lcom/google/android/gms/measurement/internal/AppMeasurementDynamiteService;Lcom/google/android/gms/internal/measurement/zzda;)V +Lcom/google/android/gms/measurement/internal/zzae; +HSPLcom/google/android/gms/measurement/internal/zzae;->(Landroid/content/Context;)V +HSPLcom/google/android/gms/measurement/internal/zzae;->zza()Z +Lcom/google/android/gms/measurement/internal/zzaf; +HSPLcom/google/android/gms/measurement/internal/zzaf;->(Lcom/google/android/gms/measurement/internal/zzhf;)V +HSPLcom/google/android/gms/measurement/internal/zzaf;->zza()Landroid/content/Context; +HSPLcom/google/android/gms/measurement/internal/zzaf;->zza(Lcom/google/android/gms/measurement/internal/zzfi;)Z +HSPLcom/google/android/gms/measurement/internal/zzaf;->zza(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; +HSPLcom/google/android/gms/measurement/internal/zzaf;->zzb(Ljava/lang/String;)I +HSPLcom/google/android/gms/measurement/internal/zzaf;->zze()Lcom/google/android/gms/measurement/internal/zzaf; +HSPLcom/google/android/gms/measurement/internal/zzaf;->zzf(Ljava/lang/String;Lcom/google/android/gms/measurement/internal/zzfi;)Z +HSPLcom/google/android/gms/measurement/internal/zzaf;->zzg(Ljava/lang/String;)Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzaf;->zzi(Ljava/lang/String;)Ljava/util/List; +HSPLcom/google/android/gms/measurement/internal/zzaf;->zzn()Ljava/lang/String; +HSPLcom/google/android/gms/measurement/internal/zzaf;->zzp()Z +HSPLcom/google/android/gms/measurement/internal/zzaf;->zzu()Z +HSPLcom/google/android/gms/measurement/internal/zzaf;->zzv()Z +HSPLcom/google/android/gms/measurement/internal/zzaf;->zzw()Z +HSPLcom/google/android/gms/measurement/internal/zzaf;->zzy()Landroid/os/Bundle; +Lcom/google/android/gms/measurement/internal/zzah; +Lcom/google/android/gms/measurement/internal/zzai; +HSPLcom/google/android/gms/measurement/internal/zzai;->()V +HSPLcom/google/android/gms/measurement/internal/zzai;->()V +Lcom/google/android/gms/measurement/internal/zzav; +HSPLcom/google/android/gms/measurement/internal/zzav;->(Lcom/google/android/gms/measurement/internal/zzaw;Lcom/google/android/gms/measurement/internal/zzif;)V +PLcom/google/android/gms/measurement/internal/zzav;->run()V +Lcom/google/android/gms/measurement/internal/zzaw; +HSPLcom/google/android/gms/measurement/internal/zzaw;->(Lcom/google/android/gms/measurement/internal/zzif;)V +HSPLcom/google/android/gms/measurement/internal/zzaw;->zza()V +HSPLcom/google/android/gms/measurement/internal/zzaw;->zza(J)V +PLcom/google/android/gms/measurement/internal/zzaw;->zza(Lcom/google/android/gms/measurement/internal/zzaw;J)V +PLcom/google/android/gms/measurement/internal/zzaw;->zzc()Z +HSPLcom/google/android/gms/measurement/internal/zzaw;->zzd()Landroid/os/Handler; +Lcom/google/android/gms/measurement/internal/zzb; +HSPLcom/google/android/gms/measurement/internal/zzb;->(Lcom/google/android/gms/measurement/internal/zzhf;)V +HSPLcom/google/android/gms/measurement/internal/zzb;->zza(Lcom/google/android/gms/measurement/internal/zzb;J)V +HSPLcom/google/android/gms/measurement/internal/zzb;->zzb()Lcom/google/android/gms/common/util/Clock; +HSPLcom/google/android/gms/measurement/internal/zzb;->zzb(J)V +HSPLcom/google/android/gms/measurement/internal/zzb;->zzl()Lcom/google/android/gms/measurement/internal/zzgy; +Lcom/google/android/gms/measurement/internal/zzba; +HSPLcom/google/android/gms/measurement/internal/zzba;->(Lcom/google/android/gms/measurement/internal/zzhf;)V +HSPLcom/google/android/gms/measurement/internal/zzba;->zzo()Z +Lcom/google/android/gms/measurement/internal/zzbi; +HSPLcom/google/android/gms/measurement/internal/zzbi;->()V +HSPLcom/google/android/gms/measurement/internal/zzbi;->zza()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zza(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;Lcom/google/android/gms/measurement/internal/zzfg;)Lcom/google/android/gms/measurement/internal/zzfi; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzaa()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzab()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzac()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzad()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzae()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzaf()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzag()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzah()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzai()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzaj()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzak()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzal()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzam()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzan()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzao()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzap()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzaq()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzar()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzas()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzat()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzau()Ljava/lang/Double; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzav()Ljava/lang/Integer; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzaw()Ljava/lang/Integer; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzax()Ljava/lang/Integer; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzay()Ljava/lang/Integer; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzaz()Ljava/lang/Integer; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzb()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzba()Ljava/lang/Integer; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzbb()Ljava/lang/Integer; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzbc()Ljava/lang/Integer; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzbd()Ljava/lang/Integer; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzbe()Ljava/lang/Integer; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzbf()Ljava/lang/Integer; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzbg()Ljava/lang/Integer; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzbh()Ljava/lang/Integer; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzbi()Ljava/lang/Integer; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzbj()Ljava/lang/Integer; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzbk()Ljava/lang/Integer; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzbl()Ljava/lang/Integer; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzbm()Ljava/lang/Integer; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzbn()Ljava/lang/Integer; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzbo()Ljava/lang/Integer; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzbp()Ljava/lang/Long; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzbq()Ljava/lang/Long; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzbr()Ljava/lang/Long; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzbs()Ljava/lang/Long; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzbt()Ljava/lang/Long; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzbu()Ljava/lang/Long; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzbv()Ljava/lang/Long; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzbw()Ljava/lang/Long; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzbx()Ljava/lang/Long; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzby()Ljava/lang/Long; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzbz()Ljava/lang/Long; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzc()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzca()Ljava/lang/Long; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzcb()Ljava/lang/Long; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzcc()Ljava/lang/Long; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzcd()Ljava/lang/Long; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzce()Ljava/lang/Long; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzcf()Ljava/lang/Long; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzcg()Ljava/lang/Long; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzch()Ljava/lang/Long; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzci()Ljava/lang/Long; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzcj()Ljava/lang/String; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzck()Ljava/lang/String; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzcl()Ljava/lang/String; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzcm()Ljava/lang/String; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzcn()Ljava/lang/String; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzco()Ljava/lang/String; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzcp()Ljava/lang/String; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzcq()Ljava/lang/String; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzcr()Ljava/lang/String; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzcs()Ljava/lang/String; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzct()Ljava/lang/String; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzcu()Ljava/util/List; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzd()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zze()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzf()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzg()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzh()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzi()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzj()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzk()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzl()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzm()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzn()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzo()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzp()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzq()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzr()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzs()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzt()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzu()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzv()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzw()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzx()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzy()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzbi;->zzz()Ljava/lang/Boolean; +Lcom/google/android/gms/measurement/internal/zzbj; +HSPLcom/google/android/gms/measurement/internal/zzbj;->()V +HSPLcom/google/android/gms/measurement/internal/zzbj;->()V +HSPLcom/google/android/gms/measurement/internal/zzbj;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzbk; +HSPLcom/google/android/gms/measurement/internal/zzbk;->()V +HSPLcom/google/android/gms/measurement/internal/zzbk;->()V +HSPLcom/google/android/gms/measurement/internal/zzbk;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzbl; +HSPLcom/google/android/gms/measurement/internal/zzbl;->()V +HSPLcom/google/android/gms/measurement/internal/zzbl;->()V +HSPLcom/google/android/gms/measurement/internal/zzbl;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzbm; +HSPLcom/google/android/gms/measurement/internal/zzbm;->()V +HSPLcom/google/android/gms/measurement/internal/zzbm;->()V +HSPLcom/google/android/gms/measurement/internal/zzbm;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzbn; +HSPLcom/google/android/gms/measurement/internal/zzbn;->()V +HSPLcom/google/android/gms/measurement/internal/zzbn;->()V +HSPLcom/google/android/gms/measurement/internal/zzbn;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzbo; +HSPLcom/google/android/gms/measurement/internal/zzbo;->()V +HSPLcom/google/android/gms/measurement/internal/zzbo;->()V +HSPLcom/google/android/gms/measurement/internal/zzbo;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzbp; +HSPLcom/google/android/gms/measurement/internal/zzbp;->()V +HSPLcom/google/android/gms/measurement/internal/zzbp;->()V +HSPLcom/google/android/gms/measurement/internal/zzbp;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzbq; +HSPLcom/google/android/gms/measurement/internal/zzbq;->()V +HSPLcom/google/android/gms/measurement/internal/zzbq;->()V +HSPLcom/google/android/gms/measurement/internal/zzbq;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzbr; +HSPLcom/google/android/gms/measurement/internal/zzbr;->()V +HSPLcom/google/android/gms/measurement/internal/zzbr;->()V +HSPLcom/google/android/gms/measurement/internal/zzbr;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzbs; +HSPLcom/google/android/gms/measurement/internal/zzbs;->()V +HSPLcom/google/android/gms/measurement/internal/zzbs;->()V +HSPLcom/google/android/gms/measurement/internal/zzbs;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzbt; +HSPLcom/google/android/gms/measurement/internal/zzbt;->()V +HSPLcom/google/android/gms/measurement/internal/zzbt;->()V +HSPLcom/google/android/gms/measurement/internal/zzbt;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzbu; +HSPLcom/google/android/gms/measurement/internal/zzbu;->()V +HSPLcom/google/android/gms/measurement/internal/zzbu;->()V +HSPLcom/google/android/gms/measurement/internal/zzbu;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzbv; +HSPLcom/google/android/gms/measurement/internal/zzbv;->()V +HSPLcom/google/android/gms/measurement/internal/zzbv;->()V +HSPLcom/google/android/gms/measurement/internal/zzbv;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzbw; +HSPLcom/google/android/gms/measurement/internal/zzbw;->()V +HSPLcom/google/android/gms/measurement/internal/zzbw;->()V +HSPLcom/google/android/gms/measurement/internal/zzbw;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzbx; +HSPLcom/google/android/gms/measurement/internal/zzbx;->()V +HSPLcom/google/android/gms/measurement/internal/zzbx;->()V +HSPLcom/google/android/gms/measurement/internal/zzbx;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzby; +HSPLcom/google/android/gms/measurement/internal/zzby;->()V +HSPLcom/google/android/gms/measurement/internal/zzby;->()V +HSPLcom/google/android/gms/measurement/internal/zzby;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzbz; +HSPLcom/google/android/gms/measurement/internal/zzbz;->()V +HSPLcom/google/android/gms/measurement/internal/zzbz;->()V +HSPLcom/google/android/gms/measurement/internal/zzbz;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzc; +HSPLcom/google/android/gms/measurement/internal/zzc;->(Lcom/google/android/gms/measurement/internal/zzb;J)V +HSPLcom/google/android/gms/measurement/internal/zzc;->run()V +Lcom/google/android/gms/measurement/internal/zzca; +HSPLcom/google/android/gms/measurement/internal/zzca;->()V +HSPLcom/google/android/gms/measurement/internal/zzca;->()V +HSPLcom/google/android/gms/measurement/internal/zzca;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzcb; +HSPLcom/google/android/gms/measurement/internal/zzcb;->()V +HSPLcom/google/android/gms/measurement/internal/zzcb;->()V +HSPLcom/google/android/gms/measurement/internal/zzcb;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzcc; +HSPLcom/google/android/gms/measurement/internal/zzcc;->()V +HSPLcom/google/android/gms/measurement/internal/zzcc;->()V +HSPLcom/google/android/gms/measurement/internal/zzcc;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzcd; +HSPLcom/google/android/gms/measurement/internal/zzcd;->()V +HSPLcom/google/android/gms/measurement/internal/zzcd;->()V +HSPLcom/google/android/gms/measurement/internal/zzcd;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzce; +HSPLcom/google/android/gms/measurement/internal/zzce;->()V +HSPLcom/google/android/gms/measurement/internal/zzce;->()V +HSPLcom/google/android/gms/measurement/internal/zzce;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzcf; +HSPLcom/google/android/gms/measurement/internal/zzcf;->()V +HSPLcom/google/android/gms/measurement/internal/zzcf;->()V +HSPLcom/google/android/gms/measurement/internal/zzcf;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzcg; +HSPLcom/google/android/gms/measurement/internal/zzcg;->()V +HSPLcom/google/android/gms/measurement/internal/zzcg;->()V +HSPLcom/google/android/gms/measurement/internal/zzcg;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzch; +HSPLcom/google/android/gms/measurement/internal/zzch;->()V +HSPLcom/google/android/gms/measurement/internal/zzch;->()V +HSPLcom/google/android/gms/measurement/internal/zzch;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzci; +HSPLcom/google/android/gms/measurement/internal/zzci;->()V +HSPLcom/google/android/gms/measurement/internal/zzci;->()V +HSPLcom/google/android/gms/measurement/internal/zzci;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzcj; +HSPLcom/google/android/gms/measurement/internal/zzcj;->()V +HSPLcom/google/android/gms/measurement/internal/zzcj;->()V +HSPLcom/google/android/gms/measurement/internal/zzcj;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzck; +HSPLcom/google/android/gms/measurement/internal/zzck;->()V +HSPLcom/google/android/gms/measurement/internal/zzck;->()V +HSPLcom/google/android/gms/measurement/internal/zzck;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzcl; +HSPLcom/google/android/gms/measurement/internal/zzcl;->()V +HSPLcom/google/android/gms/measurement/internal/zzcl;->()V +HSPLcom/google/android/gms/measurement/internal/zzcl;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzcm; +HSPLcom/google/android/gms/measurement/internal/zzcm;->()V +HSPLcom/google/android/gms/measurement/internal/zzcm;->()V +HSPLcom/google/android/gms/measurement/internal/zzcm;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzcn; +HSPLcom/google/android/gms/measurement/internal/zzcn;->()V +HSPLcom/google/android/gms/measurement/internal/zzcn;->()V +HSPLcom/google/android/gms/measurement/internal/zzcn;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzco; +HSPLcom/google/android/gms/measurement/internal/zzco;->()V +HSPLcom/google/android/gms/measurement/internal/zzco;->()V +HSPLcom/google/android/gms/measurement/internal/zzco;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzcp; +HSPLcom/google/android/gms/measurement/internal/zzcp;->()V +HSPLcom/google/android/gms/measurement/internal/zzcp;->()V +HSPLcom/google/android/gms/measurement/internal/zzcp;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzcq; +HSPLcom/google/android/gms/measurement/internal/zzcq;->()V +HSPLcom/google/android/gms/measurement/internal/zzcq;->()V +HSPLcom/google/android/gms/measurement/internal/zzcq;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzcr; +HSPLcom/google/android/gms/measurement/internal/zzcr;->()V +HSPLcom/google/android/gms/measurement/internal/zzcr;->()V +HSPLcom/google/android/gms/measurement/internal/zzcr;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzcs; +HSPLcom/google/android/gms/measurement/internal/zzcs;->()V +HSPLcom/google/android/gms/measurement/internal/zzcs;->()V +HSPLcom/google/android/gms/measurement/internal/zzcs;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzct; +HSPLcom/google/android/gms/measurement/internal/zzct;->()V +HSPLcom/google/android/gms/measurement/internal/zzct;->()V +HSPLcom/google/android/gms/measurement/internal/zzct;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzcu; +HSPLcom/google/android/gms/measurement/internal/zzcu;->()V +HSPLcom/google/android/gms/measurement/internal/zzcu;->()V +HSPLcom/google/android/gms/measurement/internal/zzcu;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzcv; +HSPLcom/google/android/gms/measurement/internal/zzcv;->()V +HSPLcom/google/android/gms/measurement/internal/zzcv;->()V +HSPLcom/google/android/gms/measurement/internal/zzcv;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzcw; +HSPLcom/google/android/gms/measurement/internal/zzcw;->()V +HSPLcom/google/android/gms/measurement/internal/zzcw;->()V +HSPLcom/google/android/gms/measurement/internal/zzcw;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzcx; +HSPLcom/google/android/gms/measurement/internal/zzcx;->()V +HSPLcom/google/android/gms/measurement/internal/zzcx;->()V +HSPLcom/google/android/gms/measurement/internal/zzcx;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzcy; +HSPLcom/google/android/gms/measurement/internal/zzcy;->()V +HSPLcom/google/android/gms/measurement/internal/zzcy;->()V +HSPLcom/google/android/gms/measurement/internal/zzcy;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzcz; +HSPLcom/google/android/gms/measurement/internal/zzcz;->()V +HSPLcom/google/android/gms/measurement/internal/zzcz;->()V +HSPLcom/google/android/gms/measurement/internal/zzcz;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzda; +HSPLcom/google/android/gms/measurement/internal/zzda;->()V +HSPLcom/google/android/gms/measurement/internal/zzda;->()V +HSPLcom/google/android/gms/measurement/internal/zzda;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzdb; +HSPLcom/google/android/gms/measurement/internal/zzdb;->()V +HSPLcom/google/android/gms/measurement/internal/zzdb;->()V +HSPLcom/google/android/gms/measurement/internal/zzdb;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzdc; +HSPLcom/google/android/gms/measurement/internal/zzdc;->()V +HSPLcom/google/android/gms/measurement/internal/zzdc;->()V +HSPLcom/google/android/gms/measurement/internal/zzdc;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzdd; +HSPLcom/google/android/gms/measurement/internal/zzdd;->()V +HSPLcom/google/android/gms/measurement/internal/zzdd;->()V +HSPLcom/google/android/gms/measurement/internal/zzdd;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzde; +HSPLcom/google/android/gms/measurement/internal/zzde;->()V +HSPLcom/google/android/gms/measurement/internal/zzde;->()V +HSPLcom/google/android/gms/measurement/internal/zzde;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzdf; +HSPLcom/google/android/gms/measurement/internal/zzdf;->()V +HSPLcom/google/android/gms/measurement/internal/zzdf;->()V +HSPLcom/google/android/gms/measurement/internal/zzdf;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzdg; +HSPLcom/google/android/gms/measurement/internal/zzdg;->()V +HSPLcom/google/android/gms/measurement/internal/zzdg;->()V +HSPLcom/google/android/gms/measurement/internal/zzdg;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzdh; +HSPLcom/google/android/gms/measurement/internal/zzdh;->()V +HSPLcom/google/android/gms/measurement/internal/zzdh;->()V +HSPLcom/google/android/gms/measurement/internal/zzdh;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzdi; +HSPLcom/google/android/gms/measurement/internal/zzdi;->()V +HSPLcom/google/android/gms/measurement/internal/zzdi;->()V +HSPLcom/google/android/gms/measurement/internal/zzdi;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzdj; +HSPLcom/google/android/gms/measurement/internal/zzdj;->()V +HSPLcom/google/android/gms/measurement/internal/zzdj;->()V +HSPLcom/google/android/gms/measurement/internal/zzdj;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzdk; +HSPLcom/google/android/gms/measurement/internal/zzdk;->()V +HSPLcom/google/android/gms/measurement/internal/zzdk;->()V +HSPLcom/google/android/gms/measurement/internal/zzdk;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzdl; +HSPLcom/google/android/gms/measurement/internal/zzdl;->()V +HSPLcom/google/android/gms/measurement/internal/zzdl;->()V +HSPLcom/google/android/gms/measurement/internal/zzdl;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzdm; +HSPLcom/google/android/gms/measurement/internal/zzdm;->()V +HSPLcom/google/android/gms/measurement/internal/zzdm;->()V +HSPLcom/google/android/gms/measurement/internal/zzdm;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzdn; +HSPLcom/google/android/gms/measurement/internal/zzdn;->()V +HSPLcom/google/android/gms/measurement/internal/zzdn;->()V +HSPLcom/google/android/gms/measurement/internal/zzdn;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzdo; +HSPLcom/google/android/gms/measurement/internal/zzdo;->()V +HSPLcom/google/android/gms/measurement/internal/zzdo;->()V +HSPLcom/google/android/gms/measurement/internal/zzdo;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzdp; +HSPLcom/google/android/gms/measurement/internal/zzdp;->()V +HSPLcom/google/android/gms/measurement/internal/zzdp;->()V +HSPLcom/google/android/gms/measurement/internal/zzdp;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzdq; +HSPLcom/google/android/gms/measurement/internal/zzdq;->()V +HSPLcom/google/android/gms/measurement/internal/zzdq;->()V +HSPLcom/google/android/gms/measurement/internal/zzdq;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzdr; +HSPLcom/google/android/gms/measurement/internal/zzdr;->()V +HSPLcom/google/android/gms/measurement/internal/zzdr;->()V +HSPLcom/google/android/gms/measurement/internal/zzdr;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzds; +HSPLcom/google/android/gms/measurement/internal/zzds;->()V +HSPLcom/google/android/gms/measurement/internal/zzds;->()V +HSPLcom/google/android/gms/measurement/internal/zzds;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzdt; +HSPLcom/google/android/gms/measurement/internal/zzdt;->()V +HSPLcom/google/android/gms/measurement/internal/zzdt;->()V +HSPLcom/google/android/gms/measurement/internal/zzdt;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzdu; +HSPLcom/google/android/gms/measurement/internal/zzdu;->()V +HSPLcom/google/android/gms/measurement/internal/zzdu;->()V +HSPLcom/google/android/gms/measurement/internal/zzdu;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzdv; +HSPLcom/google/android/gms/measurement/internal/zzdv;->()V +HSPLcom/google/android/gms/measurement/internal/zzdv;->()V +HSPLcom/google/android/gms/measurement/internal/zzdv;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzdw; +HSPLcom/google/android/gms/measurement/internal/zzdw;->()V +HSPLcom/google/android/gms/measurement/internal/zzdw;->()V +HSPLcom/google/android/gms/measurement/internal/zzdw;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzdx; +HSPLcom/google/android/gms/measurement/internal/zzdx;->()V +HSPLcom/google/android/gms/measurement/internal/zzdx;->()V +HSPLcom/google/android/gms/measurement/internal/zzdx;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzdy; +HSPLcom/google/android/gms/measurement/internal/zzdy;->()V +HSPLcom/google/android/gms/measurement/internal/zzdy;->()V +HSPLcom/google/android/gms/measurement/internal/zzdy;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzdz; +HSPLcom/google/android/gms/measurement/internal/zzdz;->()V +HSPLcom/google/android/gms/measurement/internal/zzdz;->()V +HSPLcom/google/android/gms/measurement/internal/zzdz;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zze; +HSPLcom/google/android/gms/measurement/internal/zze;->(Lcom/google/android/gms/measurement/internal/zzhf;)V +HSPLcom/google/android/gms/measurement/internal/zze;->zzu()V +HSPLcom/google/android/gms/measurement/internal/zze;->zzv()V +HSPLcom/google/android/gms/measurement/internal/zze;->zzw()V +HSPLcom/google/android/gms/measurement/internal/zze;->zzy()Z +Lcom/google/android/gms/measurement/internal/zzea; +HSPLcom/google/android/gms/measurement/internal/zzea;->()V +HSPLcom/google/android/gms/measurement/internal/zzea;->()V +HSPLcom/google/android/gms/measurement/internal/zzea;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzeb; +HSPLcom/google/android/gms/measurement/internal/zzeb;->()V +HSPLcom/google/android/gms/measurement/internal/zzeb;->()V +HSPLcom/google/android/gms/measurement/internal/zzeb;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzec; +HSPLcom/google/android/gms/measurement/internal/zzec;->()V +HSPLcom/google/android/gms/measurement/internal/zzec;->()V +HSPLcom/google/android/gms/measurement/internal/zzec;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzed; +HSPLcom/google/android/gms/measurement/internal/zzed;->()V +HSPLcom/google/android/gms/measurement/internal/zzed;->()V +HSPLcom/google/android/gms/measurement/internal/zzed;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzee; +HSPLcom/google/android/gms/measurement/internal/zzee;->()V +HSPLcom/google/android/gms/measurement/internal/zzee;->()V +HSPLcom/google/android/gms/measurement/internal/zzee;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzef; +HSPLcom/google/android/gms/measurement/internal/zzef;->()V +HSPLcom/google/android/gms/measurement/internal/zzef;->()V +HSPLcom/google/android/gms/measurement/internal/zzef;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzeg; +HSPLcom/google/android/gms/measurement/internal/zzeg;->()V +HSPLcom/google/android/gms/measurement/internal/zzeg;->()V +HSPLcom/google/android/gms/measurement/internal/zzeg;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzeh; +HSPLcom/google/android/gms/measurement/internal/zzeh;->()V +HSPLcom/google/android/gms/measurement/internal/zzeh;->()V +HSPLcom/google/android/gms/measurement/internal/zzeh;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzei; +HSPLcom/google/android/gms/measurement/internal/zzei;->()V +HSPLcom/google/android/gms/measurement/internal/zzei;->()V +HSPLcom/google/android/gms/measurement/internal/zzei;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzej; +HSPLcom/google/android/gms/measurement/internal/zzej;->()V +HSPLcom/google/android/gms/measurement/internal/zzej;->()V +HSPLcom/google/android/gms/measurement/internal/zzej;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzek; +HSPLcom/google/android/gms/measurement/internal/zzek;->()V +HSPLcom/google/android/gms/measurement/internal/zzek;->()V +HSPLcom/google/android/gms/measurement/internal/zzek;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzel; +HSPLcom/google/android/gms/measurement/internal/zzel;->()V +HSPLcom/google/android/gms/measurement/internal/zzel;->()V +HSPLcom/google/android/gms/measurement/internal/zzel;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzem; +HSPLcom/google/android/gms/measurement/internal/zzem;->()V +HSPLcom/google/android/gms/measurement/internal/zzem;->()V +HSPLcom/google/android/gms/measurement/internal/zzem;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzen; +HSPLcom/google/android/gms/measurement/internal/zzen;->()V +HSPLcom/google/android/gms/measurement/internal/zzen;->()V +HSPLcom/google/android/gms/measurement/internal/zzen;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzeo; +HSPLcom/google/android/gms/measurement/internal/zzeo;->()V +HSPLcom/google/android/gms/measurement/internal/zzeo;->()V +HSPLcom/google/android/gms/measurement/internal/zzeo;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzep; +HSPLcom/google/android/gms/measurement/internal/zzep;->()V +HSPLcom/google/android/gms/measurement/internal/zzep;->()V +HSPLcom/google/android/gms/measurement/internal/zzep;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzeq; +HSPLcom/google/android/gms/measurement/internal/zzeq;->()V +HSPLcom/google/android/gms/measurement/internal/zzeq;->()V +HSPLcom/google/android/gms/measurement/internal/zzeq;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzer; +HSPLcom/google/android/gms/measurement/internal/zzer;->()V +HSPLcom/google/android/gms/measurement/internal/zzer;->()V +HSPLcom/google/android/gms/measurement/internal/zzer;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzes; +HSPLcom/google/android/gms/measurement/internal/zzes;->()V +HSPLcom/google/android/gms/measurement/internal/zzes;->()V +HSPLcom/google/android/gms/measurement/internal/zzes;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzet; +HSPLcom/google/android/gms/measurement/internal/zzet;->()V +HSPLcom/google/android/gms/measurement/internal/zzet;->()V +HSPLcom/google/android/gms/measurement/internal/zzet;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzeu; +HSPLcom/google/android/gms/measurement/internal/zzeu;->()V +HSPLcom/google/android/gms/measurement/internal/zzeu;->()V +HSPLcom/google/android/gms/measurement/internal/zzeu;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzev; +HSPLcom/google/android/gms/measurement/internal/zzev;->()V +HSPLcom/google/android/gms/measurement/internal/zzev;->()V +HSPLcom/google/android/gms/measurement/internal/zzev;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzew; +HSPLcom/google/android/gms/measurement/internal/zzew;->()V +HSPLcom/google/android/gms/measurement/internal/zzew;->()V +HSPLcom/google/android/gms/measurement/internal/zzew;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzex; +HSPLcom/google/android/gms/measurement/internal/zzex;->()V +HSPLcom/google/android/gms/measurement/internal/zzex;->()V +HSPLcom/google/android/gms/measurement/internal/zzex;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzey; +HSPLcom/google/android/gms/measurement/internal/zzey;->()V +HSPLcom/google/android/gms/measurement/internal/zzey;->()V +HSPLcom/google/android/gms/measurement/internal/zzey;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzez; +HSPLcom/google/android/gms/measurement/internal/zzez;->()V +HSPLcom/google/android/gms/measurement/internal/zzez;->()V +HSPLcom/google/android/gms/measurement/internal/zzez;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzf; +HSPLcom/google/android/gms/measurement/internal/zzf;->(Lcom/google/android/gms/measurement/internal/zzhf;)V +HSPLcom/google/android/gms/measurement/internal/zzf;->zzc()Lcom/google/android/gms/measurement/internal/zzb; +HSPLcom/google/android/gms/measurement/internal/zzf;->zzg()Lcom/google/android/gms/measurement/internal/zzfl; +HSPLcom/google/android/gms/measurement/internal/zzf;->zzm()Lcom/google/android/gms/measurement/internal/zziq; +HSPLcom/google/android/gms/measurement/internal/zzf;->zzn()Lcom/google/android/gms/measurement/internal/zzkh; +HSPLcom/google/android/gms/measurement/internal/zzf;->zzo()Lcom/google/android/gms/measurement/internal/zzkp; +HSPLcom/google/android/gms/measurement/internal/zzf;->zzp()Lcom/google/android/gms/measurement/internal/zzlx; +HSPLcom/google/android/gms/measurement/internal/zzf;->zzt()V +Lcom/google/android/gms/measurement/internal/zzfa; +HSPLcom/google/android/gms/measurement/internal/zzfa;->()V +HSPLcom/google/android/gms/measurement/internal/zzfa;->()V +HSPLcom/google/android/gms/measurement/internal/zzfa;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzfb; +HSPLcom/google/android/gms/measurement/internal/zzfb;->()V +HSPLcom/google/android/gms/measurement/internal/zzfb;->()V +HSPLcom/google/android/gms/measurement/internal/zzfb;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzfc; +HSPLcom/google/android/gms/measurement/internal/zzfc;->()V +HSPLcom/google/android/gms/measurement/internal/zzfc;->()V +HSPLcom/google/android/gms/measurement/internal/zzfc;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzfd; +HSPLcom/google/android/gms/measurement/internal/zzfd;->()V +HSPLcom/google/android/gms/measurement/internal/zzfd;->()V +HSPLcom/google/android/gms/measurement/internal/zzfd;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzfe; +HSPLcom/google/android/gms/measurement/internal/zzfe;->()V +HSPLcom/google/android/gms/measurement/internal/zzfe;->()V +HSPLcom/google/android/gms/measurement/internal/zzfe;->zza()Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzff; +Lcom/google/android/gms/measurement/internal/zzfg; +Lcom/google/android/gms/measurement/internal/zzfi; +HSPLcom/google/android/gms/measurement/internal/zzfi;->()V +HSPLcom/google/android/gms/measurement/internal/zzfi;->(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;Lcom/google/android/gms/measurement/internal/zzfg;)V +HSPLcom/google/android/gms/measurement/internal/zzfi;->(Ljava/lang/String;Ljava/lang/Object;Ljava/lang/Object;Lcom/google/android/gms/measurement/internal/zzfg;Lcom/google/android/gms/measurement/internal/zzfh;)V +HSPLcom/google/android/gms/measurement/internal/zzfi;->zza(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/google/android/gms/measurement/internal/zzfk; +Lcom/google/android/gms/measurement/internal/zzfl; +HSPLcom/google/android/gms/measurement/internal/zzfl;->(Lcom/google/android/gms/measurement/internal/zzhf;J)V +HSPLcom/google/android/gms/measurement/internal/zzfl;->zza()Landroid/content/Context; +HSPLcom/google/android/gms/measurement/internal/zzfl;->zza(Ljava/lang/String;)Lcom/google/android/gms/measurement/internal/zzo; +HSPLcom/google/android/gms/measurement/internal/zzfl;->zzaa()I +HSPLcom/google/android/gms/measurement/internal/zzfl;->zzab()I +HSPLcom/google/android/gms/measurement/internal/zzfl;->zzac()Ljava/lang/String; +HSPLcom/google/android/gms/measurement/internal/zzfl;->zzad()Ljava/lang/String; +HSPLcom/google/android/gms/measurement/internal/zzfl;->zzae()Ljava/lang/String; +HSPLcom/google/android/gms/measurement/internal/zzfl;->zzag()V +HSPLcom/google/android/gms/measurement/internal/zzfl;->zzb()Lcom/google/android/gms/common/util/Clock; +HSPLcom/google/android/gms/measurement/internal/zzfl;->zze()Lcom/google/android/gms/measurement/internal/zzaf; +HSPLcom/google/android/gms/measurement/internal/zzfl;->zzj()Lcom/google/android/gms/measurement/internal/zzfr; +HSPLcom/google/android/gms/measurement/internal/zzfl;->zzk()Lcom/google/android/gms/measurement/internal/zzgd; +HSPLcom/google/android/gms/measurement/internal/zzfl;->zzq()Lcom/google/android/gms/measurement/internal/zznd; +HSPLcom/google/android/gms/measurement/internal/zzfl;->zzt()V +HSPLcom/google/android/gms/measurement/internal/zzfl;->zzx()V +HSPLcom/google/android/gms/measurement/internal/zzfl;->zzz()Z +Lcom/google/android/gms/measurement/internal/zzfm; +HSPLcom/google/android/gms/measurement/internal/zzfm;->(Landroid/os/IBinder;)V +HSPLcom/google/android/gms/measurement/internal/zzfm;->zza(JLjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V +HSPLcom/google/android/gms/measurement/internal/zzfm;->zza(Landroid/os/Bundle;Lcom/google/android/gms/measurement/internal/zzo;)V +HSPLcom/google/android/gms/measurement/internal/zzfm;->zzb(Lcom/google/android/gms/measurement/internal/zzo;)Ljava/lang/String; +Lcom/google/android/gms/measurement/internal/zzfn; +HSPLcom/google/android/gms/measurement/internal/zzfn;->(Lcom/google/android/gms/measurement/internal/zzfo;Landroid/content/Context;Ljava/lang/String;)V +Lcom/google/android/gms/measurement/internal/zzfo; +HSPLcom/google/android/gms/measurement/internal/zzfo;->(Lcom/google/android/gms/measurement/internal/zzhf;)V +HSPLcom/google/android/gms/measurement/internal/zzfo;->zza()Landroid/content/Context; +HSPLcom/google/android/gms/measurement/internal/zzfo;->zzz()Z +Lcom/google/android/gms/measurement/internal/zzfp; +Lcom/google/android/gms/measurement/internal/zzfq; +HSPLcom/google/android/gms/measurement/internal/zzfq;->()V +HSPLcom/google/android/gms/measurement/internal/zzfq;->(Lcom/google/android/gms/measurement/internal/zzfp;)V +Lcom/google/android/gms/measurement/internal/zzfr; +HSPLcom/google/android/gms/measurement/internal/zzfr;->(Lcom/google/android/gms/measurement/internal/zzhf;)V +HSPLcom/google/android/gms/measurement/internal/zzfr;->zza(I)Z +HSPLcom/google/android/gms/measurement/internal/zzfr;->zza(ILjava/lang/String;)V +HSPLcom/google/android/gms/measurement/internal/zzfr;->zza(IZZLjava/lang/String;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V +HSPLcom/google/android/gms/measurement/internal/zzfr;->zza(ZLjava/lang/Object;)Ljava/lang/String; +HSPLcom/google/android/gms/measurement/internal/zzfr;->zza(ZLjava/lang/String;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/String; +HSPLcom/google/android/gms/measurement/internal/zzfr;->zzc()Lcom/google/android/gms/measurement/internal/zzft; +HSPLcom/google/android/gms/measurement/internal/zzfr;->zzn()Lcom/google/android/gms/measurement/internal/zzft; +HSPLcom/google/android/gms/measurement/internal/zzfr;->zzo()Z +HSPLcom/google/android/gms/measurement/internal/zzfr;->zzp()Lcom/google/android/gms/measurement/internal/zzft; +HSPLcom/google/android/gms/measurement/internal/zzfr;->zzy()Ljava/lang/String; +Lcom/google/android/gms/measurement/internal/zzfs; +HSPLcom/google/android/gms/measurement/internal/zzfs;->(Landroid/content/Context;Landroid/os/Looper;Lcom/google/android/gms/common/internal/BaseGmsClient$BaseConnectionCallbacks;Lcom/google/android/gms/common/internal/BaseGmsClient$BaseOnConnectionFailedListener;)V +HSPLcom/google/android/gms/measurement/internal/zzfs;->createServiceInterface(Landroid/os/IBinder;)Landroid/os/IInterface; +HSPLcom/google/android/gms/measurement/internal/zzfs;->getMinApkVersion()I +HSPLcom/google/android/gms/measurement/internal/zzfs;->getServiceDescriptor()Ljava/lang/String; +HSPLcom/google/android/gms/measurement/internal/zzfs;->getStartServiceAction()Ljava/lang/String; +Lcom/google/android/gms/measurement/internal/zzft; +HSPLcom/google/android/gms/measurement/internal/zzft;->(Lcom/google/android/gms/measurement/internal/zzfr;IZZ)V +HSPLcom/google/android/gms/measurement/internal/zzft;->zza(Ljava/lang/String;)V +HSPLcom/google/android/gms/measurement/internal/zzft;->zza(Ljava/lang/String;Ljava/lang/Object;)V +Lcom/google/android/gms/measurement/internal/zzgd; +HSPLcom/google/android/gms/measurement/internal/zzgd;->()V +HSPLcom/google/android/gms/measurement/internal/zzgd;->(Lcom/google/android/gms/measurement/internal/zzhf;)V +HSPLcom/google/android/gms/measurement/internal/zzgd;->zza(J)Z +HSPLcom/google/android/gms/measurement/internal/zzgd;->zza(Z)V +HSPLcom/google/android/gms/measurement/internal/zzgd;->zzaa()Z +HSPLcom/google/android/gms/measurement/internal/zzgd;->zzb(Ljava/lang/String;)V +HSPLcom/google/android/gms/measurement/internal/zzgd;->zzb(Z)V +HSPLcom/google/android/gms/measurement/internal/zzgd;->zzc()Landroid/content/SharedPreferences; +HSPLcom/google/android/gms/measurement/internal/zzgd;->zzc(Ljava/lang/String;)V +HSPLcom/google/android/gms/measurement/internal/zzgd;->zzm()Lcom/google/android/gms/measurement/internal/zzih; +HSPLcom/google/android/gms/measurement/internal/zzgd;->zzn()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzgd;->zzo()Z +HSPLcom/google/android/gms/measurement/internal/zzgd;->zzu()Ljava/lang/Boolean; +HSPLcom/google/android/gms/measurement/internal/zzgd;->zzw()Ljava/lang/String; +HSPLcom/google/android/gms/measurement/internal/zzgd;->zzx()Ljava/lang/String; +HSPLcom/google/android/gms/measurement/internal/zzgd;->zzz()V +Lcom/google/android/gms/measurement/internal/zzgf; +HSPLcom/google/android/gms/measurement/internal/zzgf;->(Lcom/google/android/gms/measurement/internal/zzgd;Ljava/lang/String;Landroid/os/Bundle;)V +HSPLcom/google/android/gms/measurement/internal/zzgf;->zza()Landroid/os/Bundle; +Lcom/google/android/gms/measurement/internal/zzgg; +HSPLcom/google/android/gms/measurement/internal/zzgg;->(Lcom/google/android/gms/measurement/internal/zzgd;Ljava/lang/String;Z)V +HSPLcom/google/android/gms/measurement/internal/zzgg;->zza(Z)V +Lcom/google/android/gms/measurement/internal/zzgh; +HSPLcom/google/android/gms/measurement/internal/zzgh;->(Lcom/google/android/gms/measurement/internal/zzgd;Ljava/lang/String;J)V +HSPLcom/google/android/gms/measurement/internal/zzgh;->(Lcom/google/android/gms/measurement/internal/zzgd;Ljava/lang/String;JLcom/google/android/gms/measurement/internal/zzgk;)V +Lcom/google/android/gms/measurement/internal/zzgi; +HSPLcom/google/android/gms/measurement/internal/zzgi;->(Lcom/google/android/gms/measurement/internal/zzgd;Ljava/lang/String;J)V +HSPLcom/google/android/gms/measurement/internal/zzgi;->zza()J +HSPLcom/google/android/gms/measurement/internal/zzgi;->zza(J)V +Lcom/google/android/gms/measurement/internal/zzgj; +HSPLcom/google/android/gms/measurement/internal/zzgj;->(Lcom/google/android/gms/measurement/internal/zzgd;Ljava/lang/String;Ljava/lang/String;)V +HSPLcom/google/android/gms/measurement/internal/zzgj;->zza()Ljava/lang/String; +HSPLcom/google/android/gms/measurement/internal/zzgj;->zza(Ljava/lang/String;)V +Lcom/google/android/gms/measurement/internal/zzgy; +HSPLcom/google/android/gms/measurement/internal/zzgy;->()V +HSPLcom/google/android/gms/measurement/internal/zzgy;->(Lcom/google/android/gms/measurement/internal/zzhf;)V +HSPLcom/google/android/gms/measurement/internal/zzgy;->zza(Lcom/google/android/gms/measurement/internal/zzhd;)V +HSPLcom/google/android/gms/measurement/internal/zzgy;->zzb(Ljava/lang/Runnable;)V +HSPLcom/google/android/gms/measurement/internal/zzgy;->zzc()Ljava/util/concurrent/atomic/AtomicLong; +HSPLcom/google/android/gms/measurement/internal/zzgy;->zzc(Lcom/google/android/gms/measurement/internal/zzgy;)Ljava/lang/Object; +HSPLcom/google/android/gms/measurement/internal/zzgy;->zzd(Lcom/google/android/gms/measurement/internal/zzgy;)Ljava/util/concurrent/Semaphore; +HSPLcom/google/android/gms/measurement/internal/zzgy;->zze(Lcom/google/android/gms/measurement/internal/zzgy;)Z +HSPLcom/google/android/gms/measurement/internal/zzgy;->zzo()Z +HSPLcom/google/android/gms/measurement/internal/zzgy;->zzt()V +Lcom/google/android/gms/measurement/internal/zzgz; +HSPLcom/google/android/gms/measurement/internal/zzgz;->(Landroid/content/Context;Ljava/lang/String;)V +HSPLcom/google/android/gms/measurement/internal/zzgz;->zza(Landroid/content/Context;)Ljava/lang/String; +HSPLcom/google/android/gms/measurement/internal/zzgz;->zza(Ljava/lang/String;)Ljava/lang/String; +Lcom/google/android/gms/measurement/internal/zzha; +HSPLcom/google/android/gms/measurement/internal/zzha;->(Lcom/google/android/gms/measurement/internal/zzgy;Ljava/lang/String;)V +Lcom/google/android/gms/measurement/internal/zzhc; +HSPLcom/google/android/gms/measurement/internal/zzhc;->(Lcom/google/android/gms/measurement/internal/zzgy;Ljava/lang/String;Ljava/util/concurrent/BlockingQueue;)V +HSPLcom/google/android/gms/measurement/internal/zzhc;->run()V +HSPLcom/google/android/gms/measurement/internal/zzhc;->zza()V +Lcom/google/android/gms/measurement/internal/zzhd; +HSPLcom/google/android/gms/measurement/internal/zzhd;->(Lcom/google/android/gms/measurement/internal/zzgy;Ljava/lang/Runnable;ZLjava/lang/String;)V +HSPLcom/google/android/gms/measurement/internal/zzhd;->compareTo(Ljava/lang/Object;)I +Lcom/google/android/gms/measurement/internal/zzhf; +HSPLcom/google/android/gms/measurement/internal/zzhf;->(Lcom/google/android/gms/measurement/internal/zzio;)V +HSPLcom/google/android/gms/measurement/internal/zzhf;->zza()Landroid/content/Context; +HSPLcom/google/android/gms/measurement/internal/zzhf;->zza(Landroid/content/Context;Lcom/google/android/gms/internal/measurement/zzdd;Ljava/lang/Long;)Lcom/google/android/gms/measurement/internal/zzhf; +HSPLcom/google/android/gms/measurement/internal/zzhf;->zza(Lcom/google/android/gms/internal/measurement/zzdd;)V +HSPLcom/google/android/gms/measurement/internal/zzhf;->zza(Lcom/google/android/gms/measurement/internal/zze;)V +HSPLcom/google/android/gms/measurement/internal/zzhf;->zza(Lcom/google/android/gms/measurement/internal/zzhf;Lcom/google/android/gms/measurement/internal/zzio;)V +HSPLcom/google/android/gms/measurement/internal/zzhf;->zza(Lcom/google/android/gms/measurement/internal/zzic;)V +HSPLcom/google/android/gms/measurement/internal/zzhf;->zza(Lcom/google/android/gms/measurement/internal/zzid;)V +HSPLcom/google/android/gms/measurement/internal/zzhf;->zzaa()V +HSPLcom/google/android/gms/measurement/internal/zzhf;->zzac()Z +HSPLcom/google/android/gms/measurement/internal/zzhf;->zzad()Z +HSPLcom/google/android/gms/measurement/internal/zzhf;->zzaf()Z +HSPLcom/google/android/gms/measurement/internal/zzhf;->zzag()Z +HSPLcom/google/android/gms/measurement/internal/zzhf;->zzb()Lcom/google/android/gms/common/util/Clock; +HSPLcom/google/android/gms/measurement/internal/zzhf;->zzc()I +PLcom/google/android/gms/measurement/internal/zzhf;->zzd()Lcom/google/android/gms/measurement/internal/zzae; +HSPLcom/google/android/gms/measurement/internal/zzhf;->zze()Lcom/google/android/gms/measurement/internal/zzb; +HSPLcom/google/android/gms/measurement/internal/zzhf;->zzf()Lcom/google/android/gms/measurement/internal/zzaf; +HSPLcom/google/android/gms/measurement/internal/zzhf;->zzh()Lcom/google/android/gms/measurement/internal/zzfl; +HSPLcom/google/android/gms/measurement/internal/zzhf;->zzj()Lcom/google/android/gms/measurement/internal/zzfr; +HSPLcom/google/android/gms/measurement/internal/zzhf;->zzl()Lcom/google/android/gms/measurement/internal/zzgy; +HSPLcom/google/android/gms/measurement/internal/zzhf;->zzn()Lcom/google/android/gms/measurement/internal/zzgd; +HSPLcom/google/android/gms/measurement/internal/zzhf;->zzp()Lcom/google/android/gms/measurement/internal/zziq; +HSPLcom/google/android/gms/measurement/internal/zzhf;->zzq()Lcom/google/android/gms/measurement/internal/zzkh; +HSPLcom/google/android/gms/measurement/internal/zzhf;->zzr()Lcom/google/android/gms/measurement/internal/zzkp; +HSPLcom/google/android/gms/measurement/internal/zzhf;->zzs()Lcom/google/android/gms/measurement/internal/zzlx; +HSPLcom/google/android/gms/measurement/internal/zzhf;->zzt()Lcom/google/android/gms/measurement/internal/zznd; +HSPLcom/google/android/gms/measurement/internal/zzhf;->zzu()Ljava/lang/String; +HSPLcom/google/android/gms/measurement/internal/zzhf;->zzw()Ljava/lang/String; +HSPLcom/google/android/gms/measurement/internal/zzhf;->zzx()Ljava/lang/String; +HSPLcom/google/android/gms/measurement/internal/zzhf;->zzz()V +Lcom/google/android/gms/measurement/internal/zzhg; +HSPLcom/google/android/gms/measurement/internal/zzhg;->(Lcom/google/android/gms/measurement/internal/zzhf;Lcom/google/android/gms/measurement/internal/zzio;)V +HSPLcom/google/android/gms/measurement/internal/zzhg;->run()V +Lcom/google/android/gms/measurement/internal/zzic; +HSPLcom/google/android/gms/measurement/internal/zzic;->(Lcom/google/android/gms/measurement/internal/zzhf;)V +HSPLcom/google/android/gms/measurement/internal/zzic;->zzab()V +HSPLcom/google/android/gms/measurement/internal/zzic;->zzac()V +HSPLcom/google/android/gms/measurement/internal/zzic;->zzad()V +HSPLcom/google/android/gms/measurement/internal/zzic;->zzae()Z +Lcom/google/android/gms/measurement/internal/zzid; +HSPLcom/google/android/gms/measurement/internal/zzid;->(Lcom/google/android/gms/measurement/internal/zzhf;)V +HSPLcom/google/android/gms/measurement/internal/zzid;->zza()Landroid/content/Context; +HSPLcom/google/android/gms/measurement/internal/zzid;->zzb()Lcom/google/android/gms/common/util/Clock; +HSPLcom/google/android/gms/measurement/internal/zzid;->zze()Lcom/google/android/gms/measurement/internal/zzaf; +HSPLcom/google/android/gms/measurement/internal/zzid;->zzj()Lcom/google/android/gms/measurement/internal/zzfr; +HSPLcom/google/android/gms/measurement/internal/zzid;->zzk()Lcom/google/android/gms/measurement/internal/zzgd; +HSPLcom/google/android/gms/measurement/internal/zzid;->zzl()Lcom/google/android/gms/measurement/internal/zzgy; +HSPLcom/google/android/gms/measurement/internal/zzid;->zzq()Lcom/google/android/gms/measurement/internal/zznd; +HSPLcom/google/android/gms/measurement/internal/zzid;->zzt()V +Lcom/google/android/gms/measurement/internal/zzif; +Lcom/google/android/gms/measurement/internal/zzig; +HSPLcom/google/android/gms/measurement/internal/zzig;->()V +HSPLcom/google/android/gms/measurement/internal/zzig;->(Ljava/lang/String;I[Lcom/google/android/gms/measurement/internal/zzih$zza;)V +HSPLcom/google/android/gms/measurement/internal/zzig;->zza()[Lcom/google/android/gms/measurement/internal/zzih$zza; +Lcom/google/android/gms/measurement/internal/zzih; +HSPLcom/google/android/gms/measurement/internal/zzih;->()V +HSPLcom/google/android/gms/measurement/internal/zzih;->(Ljava/lang/Boolean;Ljava/lang/Boolean;I)V +HSPLcom/google/android/gms/measurement/internal/zzih;->(Ljava/util/EnumMap;I)V +HSPLcom/google/android/gms/measurement/internal/zzih;->zza()I +HSPLcom/google/android/gms/measurement/internal/zzih;->zza(Lcom/google/android/gms/measurement/internal/zzih$zza;)Z +HSPLcom/google/android/gms/measurement/internal/zzih;->zza(Ljava/lang/Boolean;)C +HSPLcom/google/android/gms/measurement/internal/zzih;->zza(Ljava/lang/String;I)Lcom/google/android/gms/measurement/internal/zzih; +HSPLcom/google/android/gms/measurement/internal/zzih;->zze()Ljava/lang/String; +HSPLcom/google/android/gms/measurement/internal/zzih;->zzg()Z +HSPLcom/google/android/gms/measurement/internal/zzih;->zzh()Z +Lcom/google/android/gms/measurement/internal/zzih$zza; +HSPLcom/google/android/gms/measurement/internal/zzih$zza;->()V +HSPLcom/google/android/gms/measurement/internal/zzih$zza;->(Ljava/lang/String;ILjava/lang/String;)V +HSPLcom/google/android/gms/measurement/internal/zzih$zza;->values()[Lcom/google/android/gms/measurement/internal/zzih$zza; +Lcom/google/android/gms/measurement/internal/zzij; +HSPLcom/google/android/gms/measurement/internal/zzij;->()V +Lcom/google/android/gms/measurement/internal/zzil; +Lcom/google/android/gms/measurement/internal/zzin; +HSPLcom/google/android/gms/measurement/internal/zzin;->(Lcom/google/android/gms/measurement/internal/zzio;Lcom/google/android/gms/measurement/internal/zzhf;)V +Lcom/google/android/gms/measurement/internal/zzio; +HSPLcom/google/android/gms/measurement/internal/zzio;->(Landroid/content/Context;Lcom/google/android/gms/internal/measurement/zzdd;Ljava/lang/Long;)V +Lcom/google/android/gms/measurement/internal/zziq; +HSPLcom/google/android/gms/measurement/internal/zziq;->(Lcom/google/android/gms/measurement/internal/zzhf;)V +HSPLcom/google/android/gms/measurement/internal/zziq;->zza()Landroid/content/Context; +HSPLcom/google/android/gms/measurement/internal/zziq;->zza(Lcom/google/android/gms/measurement/internal/zzih;)V +HSPLcom/google/android/gms/measurement/internal/zziq;->zza(Lcom/google/android/gms/measurement/internal/zzil;)V +HSPLcom/google/android/gms/measurement/internal/zziq;->zza(Ljava/lang/String;)V +HSPLcom/google/android/gms/measurement/internal/zziq;->zza(Ljava/lang/String;Ljava/lang/String;JLandroid/os/Bundle;)V +HSPLcom/google/android/gms/measurement/internal/zziq;->zza(Ljava/lang/String;Ljava/lang/String;JLandroid/os/Bundle;ZZZLjava/lang/String;)V +HSPLcom/google/android/gms/measurement/internal/zziq;->zzak()V +HSPLcom/google/android/gms/measurement/internal/zziq;->zzj()Lcom/google/android/gms/measurement/internal/zzfr; +HSPLcom/google/android/gms/measurement/internal/zziq;->zzn()Lcom/google/android/gms/measurement/internal/zzkh; +HSPLcom/google/android/gms/measurement/internal/zziq;->zzp()Lcom/google/android/gms/measurement/internal/zzlx; +HSPLcom/google/android/gms/measurement/internal/zziq;->zzt()V +HSPLcom/google/android/gms/measurement/internal/zziq;->zzz()Z +Lcom/google/android/gms/measurement/internal/zzjp; +HSPLcom/google/android/gms/measurement/internal/zzjp;->(Lcom/google/android/gms/measurement/internal/zziq;)V +Lcom/google/android/gms/measurement/internal/zzjx; +HSPLcom/google/android/gms/measurement/internal/zzjx;->(Lcom/google/android/gms/measurement/internal/zziq;)V +HSPLcom/google/android/gms/measurement/internal/zzjx;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V +HSPLcom/google/android/gms/measurement/internal/zzjx;->onActivityResumed(Landroid/app/Activity;)V +HSPLcom/google/android/gms/measurement/internal/zzjx;->onActivityStarted(Landroid/app/Activity;)V +Lcom/google/android/gms/measurement/internal/zzkc; +HSPLcom/google/android/gms/measurement/internal/zzkc;->(Lcom/google/android/gms/measurement/internal/zzhf;)V +HSPLcom/google/android/gms/measurement/internal/zzkc;->zzo()Z +Lcom/google/android/gms/measurement/internal/zzkh; +HSPLcom/google/android/gms/measurement/internal/zzkh;->(Lcom/google/android/gms/measurement/internal/zzhf;)V +HSPLcom/google/android/gms/measurement/internal/zzkh;->zza(Landroid/app/Activity;Landroid/os/Bundle;)V +HSPLcom/google/android/gms/measurement/internal/zzkh;->zza(Landroid/app/Activity;Lcom/google/android/gms/measurement/internal/zzki;Z)V +HSPLcom/google/android/gms/measurement/internal/zzkh;->zza(Lcom/google/android/gms/measurement/internal/zzkh;Lcom/google/android/gms/measurement/internal/zzki;)V +HSPLcom/google/android/gms/measurement/internal/zzkh;->zza(Lcom/google/android/gms/measurement/internal/zzkh;Lcom/google/android/gms/measurement/internal/zzki;Lcom/google/android/gms/measurement/internal/zzki;JZLandroid/os/Bundle;)V +HSPLcom/google/android/gms/measurement/internal/zzkh;->zza(Lcom/google/android/gms/measurement/internal/zzki;Lcom/google/android/gms/measurement/internal/zzki;JZLandroid/os/Bundle;)V +HSPLcom/google/android/gms/measurement/internal/zzkh;->zza(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/String; +HSPLcom/google/android/gms/measurement/internal/zzkh;->zzb()Lcom/google/android/gms/common/util/Clock; +HSPLcom/google/android/gms/measurement/internal/zzkh;->zzc()Lcom/google/android/gms/measurement/internal/zzb; +HSPLcom/google/android/gms/measurement/internal/zzkh;->zzc(Landroid/app/Activity;)V +HSPLcom/google/android/gms/measurement/internal/zzkh;->zzd(Landroid/app/Activity;)Lcom/google/android/gms/measurement/internal/zzki; +HSPLcom/google/android/gms/measurement/internal/zzkh;->zze()Lcom/google/android/gms/measurement/internal/zzaf; +HSPLcom/google/android/gms/measurement/internal/zzkh;->zzl()Lcom/google/android/gms/measurement/internal/zzgy; +HSPLcom/google/android/gms/measurement/internal/zzkh;->zzm()Lcom/google/android/gms/measurement/internal/zziq; +HSPLcom/google/android/gms/measurement/internal/zzkh;->zzo()Lcom/google/android/gms/measurement/internal/zzkp; +HSPLcom/google/android/gms/measurement/internal/zzkh;->zzq()Lcom/google/android/gms/measurement/internal/zznd; +HSPLcom/google/android/gms/measurement/internal/zzkh;->zzt()V +HSPLcom/google/android/gms/measurement/internal/zzkh;->zzz()Z +Lcom/google/android/gms/measurement/internal/zzki; +HSPLcom/google/android/gms/measurement/internal/zzki;->(Ljava/lang/String;Ljava/lang/String;J)V +HSPLcom/google/android/gms/measurement/internal/zzki;->(Ljava/lang/String;Ljava/lang/String;JZJ)V +Lcom/google/android/gms/measurement/internal/zzkm; +HSPLcom/google/android/gms/measurement/internal/zzkm;->(Lcom/google/android/gms/measurement/internal/zzkh;Lcom/google/android/gms/measurement/internal/zzki;Lcom/google/android/gms/measurement/internal/zzki;JZ)V +HSPLcom/google/android/gms/measurement/internal/zzkm;->run()V +Lcom/google/android/gms/measurement/internal/zzkp; +HSPLcom/google/android/gms/measurement/internal/zzkp;->(Lcom/google/android/gms/measurement/internal/zzhf;)V +HSPLcom/google/android/gms/measurement/internal/zzkp;->zza()Landroid/content/Context; +HSPLcom/google/android/gms/measurement/internal/zzkp;->zza(Landroid/os/Bundle;)V +HSPLcom/google/android/gms/measurement/internal/zzkp;->zza(Lcom/google/android/gms/measurement/internal/zzfk;)V +HSPLcom/google/android/gms/measurement/internal/zzkp;->zza(Lcom/google/android/gms/measurement/internal/zzki;)V +HSPLcom/google/android/gms/measurement/internal/zzkp;->zza(Lcom/google/android/gms/measurement/internal/zzkp;)Lcom/google/android/gms/measurement/internal/zzfk; +HSPLcom/google/android/gms/measurement/internal/zzkp;->zza(Ljava/lang/Runnable;)V +HSPLcom/google/android/gms/measurement/internal/zzkp;->zza(Ljava/util/concurrent/atomic/AtomicReference;)V +HSPLcom/google/android/gms/measurement/internal/zzkp;->zzad()V +PLcom/google/android/gms/measurement/internal/zzkp;->zzae()V +HSPLcom/google/android/gms/measurement/internal/zzkp;->zzah()Z +HSPLcom/google/android/gms/measurement/internal/zzkp;->zzak()V +HSPLcom/google/android/gms/measurement/internal/zzkp;->zzal()V +HSPLcom/google/android/gms/measurement/internal/zzkp;->zzam()Z +HSPLcom/google/android/gms/measurement/internal/zzkp;->zzb(Z)Lcom/google/android/gms/measurement/internal/zzo; +PLcom/google/android/gms/measurement/internal/zzkp;->zzd(Lcom/google/android/gms/measurement/internal/zzkp;)V +HSPLcom/google/android/gms/measurement/internal/zzkp;->zze(Lcom/google/android/gms/measurement/internal/zzkp;)V +HSPLcom/google/android/gms/measurement/internal/zzkp;->zzg()Lcom/google/android/gms/measurement/internal/zzfl; +HSPLcom/google/android/gms/measurement/internal/zzkp;->zzj()Lcom/google/android/gms/measurement/internal/zzfr; +HSPLcom/google/android/gms/measurement/internal/zzkp;->zzk()Lcom/google/android/gms/measurement/internal/zzgd; +HSPLcom/google/android/gms/measurement/internal/zzkp;->zzl()Lcom/google/android/gms/measurement/internal/zzgy; +HSPLcom/google/android/gms/measurement/internal/zzkp;->zzm()Lcom/google/android/gms/measurement/internal/zziq; +HSPLcom/google/android/gms/measurement/internal/zzkp;->zzq()Lcom/google/android/gms/measurement/internal/zznd; +HSPLcom/google/android/gms/measurement/internal/zzkp;->zzt()V +HSPLcom/google/android/gms/measurement/internal/zzkp;->zzz()Z +Lcom/google/android/gms/measurement/internal/zzkq; +HSPLcom/google/android/gms/measurement/internal/zzkq;->(Lcom/google/android/gms/measurement/internal/zzkh;)V +HSPLcom/google/android/gms/measurement/internal/zzkq;->run()V +Lcom/google/android/gms/measurement/internal/zzks; +HSPLcom/google/android/gms/measurement/internal/zzks;->(Lcom/google/android/gms/measurement/internal/zzkp;Lcom/google/android/gms/measurement/internal/zzif;)V +PLcom/google/android/gms/measurement/internal/zzks;->zzb()V +Lcom/google/android/gms/measurement/internal/zzky; +HSPLcom/google/android/gms/measurement/internal/zzky;->(Lcom/google/android/gms/measurement/internal/zzkp;Ljava/util/concurrent/atomic/AtomicReference;Lcom/google/android/gms/measurement/internal/zzo;)V +HSPLcom/google/android/gms/measurement/internal/zzky;->run()V +Lcom/google/android/gms/measurement/internal/zzkz; +HSPLcom/google/android/gms/measurement/internal/zzkz;->(Lcom/google/android/gms/measurement/internal/zzkp;Lcom/google/android/gms/measurement/internal/zzki;)V +HSPLcom/google/android/gms/measurement/internal/zzkz;->run()V +Lcom/google/android/gms/measurement/internal/zzlb; +HSPLcom/google/android/gms/measurement/internal/zzlb;->(Lcom/google/android/gms/measurement/internal/zzkp;Lcom/google/android/gms/measurement/internal/zzif;)V +Lcom/google/android/gms/measurement/internal/zzlc; +HSPLcom/google/android/gms/measurement/internal/zzlc;->(Lcom/google/android/gms/measurement/internal/zzkp;Lcom/google/android/gms/measurement/internal/zzo;Landroid/os/Bundle;)V +HSPLcom/google/android/gms/measurement/internal/zzlc;->run()V +Lcom/google/android/gms/measurement/internal/zzlm; +HSPLcom/google/android/gms/measurement/internal/zzlm;->(Lcom/google/android/gms/measurement/internal/zzkp;)V +HSPLcom/google/android/gms/measurement/internal/zzlm;->onConnected(Landroid/os/Bundle;)V +HSPLcom/google/android/gms/measurement/internal/zzlm;->zza()V +HSPLcom/google/android/gms/measurement/internal/zzlm;->zza(Lcom/google/android/gms/measurement/internal/zzlm;Z)V +PLcom/google/android/gms/measurement/internal/zzlm;->zzb()V +Lcom/google/android/gms/measurement/internal/zzln; +HSPLcom/google/android/gms/measurement/internal/zzln;->(Lcom/google/android/gms/measurement/internal/zzlm;Lcom/google/android/gms/measurement/internal/zzfk;)V +HSPLcom/google/android/gms/measurement/internal/zzln;->run()V +Lcom/google/android/gms/measurement/internal/zzlx; +HSPLcom/google/android/gms/measurement/internal/zzlx;->(Lcom/google/android/gms/measurement/internal/zzhf;)V +HSPLcom/google/android/gms/measurement/internal/zzlx;->zza(Z)V +HSPLcom/google/android/gms/measurement/internal/zzlx;->zzab()V +HSPLcom/google/android/gms/measurement/internal/zzlx;->zzb()Lcom/google/android/gms/common/util/Clock; +HSPLcom/google/android/gms/measurement/internal/zzlx;->zzb(Lcom/google/android/gms/measurement/internal/zzlx;J)V +HSPLcom/google/android/gms/measurement/internal/zzlx;->zze()Lcom/google/android/gms/measurement/internal/zzaf; +HSPLcom/google/android/gms/measurement/internal/zzlx;->zzj()Lcom/google/android/gms/measurement/internal/zzfr; +HSPLcom/google/android/gms/measurement/internal/zzlx;->zzk()Lcom/google/android/gms/measurement/internal/zzgd; +HSPLcom/google/android/gms/measurement/internal/zzlx;->zzl()Lcom/google/android/gms/measurement/internal/zzgy; +HSPLcom/google/android/gms/measurement/internal/zzlx;->zzt()V +HSPLcom/google/android/gms/measurement/internal/zzlx;->zzz()Z +Lcom/google/android/gms/measurement/internal/zzma; +HSPLcom/google/android/gms/measurement/internal/zzma;->(Lcom/google/android/gms/measurement/internal/zzlx;J)V +HSPLcom/google/android/gms/measurement/internal/zzma;->run()V +Lcom/google/android/gms/measurement/internal/zzmc; +HSPLcom/google/android/gms/measurement/internal/zzmc;->(Lcom/google/android/gms/measurement/internal/zzlx;)V +HSPLcom/google/android/gms/measurement/internal/zzmc;->zza()V +Lcom/google/android/gms/measurement/internal/zzmd; +HSPLcom/google/android/gms/measurement/internal/zzmd;->(Lcom/google/android/gms/measurement/internal/zzlx;)V +HSPLcom/google/android/gms/measurement/internal/zzmd;->zzc(J)V +Lcom/google/android/gms/measurement/internal/zzmf; +HSPLcom/google/android/gms/measurement/internal/zzmf;->(Lcom/google/android/gms/measurement/internal/zzlx;)V +HSPLcom/google/android/gms/measurement/internal/zzmf;->zza()V +HSPLcom/google/android/gms/measurement/internal/zzmf;->zzb(JZ)V +Lcom/google/android/gms/measurement/internal/zzmg; +HSPLcom/google/android/gms/measurement/internal/zzmg;->(Lcom/google/android/gms/measurement/internal/zzmd;Lcom/google/android/gms/measurement/internal/zzif;)V +Lcom/google/android/gms/measurement/internal/zzmi; +HSPLcom/google/android/gms/measurement/internal/zzmi;->(Lcom/google/android/gms/common/util/Clock;)V +HSPLcom/google/android/gms/measurement/internal/zzmi;->zzb()V +Lcom/google/android/gms/measurement/internal/zznd; +HSPLcom/google/android/gms/measurement/internal/zznd;->()V +HSPLcom/google/android/gms/measurement/internal/zznd;->(Lcom/google/android/gms/measurement/internal/zzhf;)V +HSPLcom/google/android/gms/measurement/internal/zznd;->zza()Landroid/content/Context; +HSPLcom/google/android/gms/measurement/internal/zznd;->zza(I)I +HSPLcom/google/android/gms/measurement/internal/zznd;->zza(Landroid/content/Context;)Z +HSPLcom/google/android/gms/measurement/internal/zznd;->zza(Landroid/content/Context;Ljava/lang/String;)J +HSPLcom/google/android/gms/measurement/internal/zznd;->zza(Landroid/content/Context;Z)Z +HSPLcom/google/android/gms/measurement/internal/zznd;->zza(Lcom/google/android/gms/measurement/internal/zzki;Landroid/os/Bundle;Z)V +HSPLcom/google/android/gms/measurement/internal/zznd;->zza(Ljava/lang/String;Ljava/lang/String;)Z +HSPLcom/google/android/gms/measurement/internal/zznd;->zza(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Z +HSPLcom/google/android/gms/measurement/internal/zznd;->zza([B)J +HSPLcom/google/android/gms/measurement/internal/zznd;->zzb(Landroid/content/Context;Ljava/lang/String;)Z +HSPLcom/google/android/gms/measurement/internal/zznd;->zzc(Landroid/content/Context;Ljava/lang/String;)Z +HSPLcom/google/android/gms/measurement/internal/zznd;->zzc(Ljava/lang/String;)J +HSPLcom/google/android/gms/measurement/internal/zznd;->zze()Lcom/google/android/gms/measurement/internal/zzaf; +HSPLcom/google/android/gms/measurement/internal/zznd;->zze(Ljava/lang/String;)Z +HSPLcom/google/android/gms/measurement/internal/zznd;->zzf(Ljava/lang/String;)Z +HSPLcom/google/android/gms/measurement/internal/zznd;->zzm()J +HSPLcom/google/android/gms/measurement/internal/zznd;->zzn(Ljava/lang/String;)Z +HSPLcom/google/android/gms/measurement/internal/zznd;->zzo()Z +HSPLcom/google/android/gms/measurement/internal/zznd;->zzp()Ljava/lang/String; +HSPLcom/google/android/gms/measurement/internal/zznd;->zzt()V +HSPLcom/google/android/gms/measurement/internal/zznd;->zzu()Ljava/security/MessageDigest; +HSPLcom/google/android/gms/measurement/internal/zznd;->zzv()Ljava/security/SecureRandom; +HSPLcom/google/android/gms/measurement/internal/zznd;->zzx()Z +HSPLcom/google/android/gms/measurement/internal/zznd;->zzz()V +Lcom/google/android/gms/measurement/internal/zznf; +Lcom/google/android/gms/measurement/internal/zzo; +HSPLcom/google/android/gms/measurement/internal/zzo;->()V +HSPLcom/google/android/gms/measurement/internal/zzo;->(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;JLjava/lang/String;JJLjava/lang/String;ZZLjava/lang/String;JJIZZLjava/lang/String;Ljava/lang/Boolean;JLjava/util/List;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZJILjava/lang/String;IJ)V +HSPLcom/google/android/gms/measurement/internal/zzo;->writeToParcel(Landroid/os/Parcel;I)V +Lcom/google/android/gms/measurement/internal/zzq; +HSPLcom/google/android/gms/measurement/internal/zzq;->()V +Lcom/google/android/gms/measurement/internal/zzu; +HSPLcom/google/android/gms/measurement/internal/zzu;->(Lcom/google/android/gms/measurement/internal/zzhf;)V +HSPLcom/google/android/gms/measurement/internal/zzu;->zzb()V +HSPLcom/google/android/gms/measurement/internal/zzu;->zzc()Z +Lcom/google/android/gms/tasks/Continuation; +Lcom/google/android/gms/tasks/OnCanceledListener; +Lcom/google/android/gms/tasks/OnFailureListener; +Lcom/google/android/gms/tasks/OnSuccessListener; +Lcom/google/android/gms/tasks/RuntimeExecutionException; +Lcom/google/android/gms/tasks/SuccessContinuation; +Lcom/google/android/gms/tasks/Task; +HSPLcom/google/android/gms/tasks/Task;->()V +Lcom/google/android/gms/tasks/TaskCompletionSource; +HSPLcom/google/android/gms/tasks/TaskCompletionSource;->()V +HSPLcom/google/android/gms/tasks/TaskCompletionSource;->getTask()Lcom/google/android/gms/tasks/Task; +HSPLcom/google/android/gms/tasks/TaskCompletionSource;->setResult(Ljava/lang/Object;)V +HSPLcom/google/android/gms/tasks/TaskCompletionSource;->trySetResult(Ljava/lang/Object;)Z +Lcom/google/android/gms/tasks/TaskExecutors; +HSPLcom/google/android/gms/tasks/TaskExecutors;->()V +Lcom/google/android/gms/tasks/Tasks; +HSPLcom/google/android/gms/tasks/Tasks;->call(Ljava/util/concurrent/Executor;Ljava/util/concurrent/Callable;)Lcom/google/android/gms/tasks/Task; +HSPLcom/google/android/gms/tasks/Tasks;->forResult(Ljava/lang/Object;)Lcom/google/android/gms/tasks/Task; +Lcom/google/android/gms/tasks/zzc; +HSPLcom/google/android/gms/tasks/zzc;->(Lcom/google/android/gms/tasks/zzd;Lcom/google/android/gms/tasks/Task;)V +HSPLcom/google/android/gms/tasks/zzc;->run()V +Lcom/google/android/gms/tasks/zzd; +HSPLcom/google/android/gms/tasks/zzd;->(Ljava/util/concurrent/Executor;Lcom/google/android/gms/tasks/Continuation;Lcom/google/android/gms/tasks/zzw;)V +HSPLcom/google/android/gms/tasks/zzd;->zza(Lcom/google/android/gms/tasks/zzd;)Lcom/google/android/gms/tasks/Continuation; +HSPLcom/google/android/gms/tasks/zzd;->zzb(Lcom/google/android/gms/tasks/zzd;)Lcom/google/android/gms/tasks/zzw; +HSPLcom/google/android/gms/tasks/zzd;->zzd(Lcom/google/android/gms/tasks/Task;)V +Lcom/google/android/gms/tasks/zzp; +HSPLcom/google/android/gms/tasks/zzp;->(Ljava/util/concurrent/Executor;Lcom/google/android/gms/tasks/SuccessContinuation;Lcom/google/android/gms/tasks/zzw;)V +Lcom/google/android/gms/tasks/zzq; +Lcom/google/android/gms/tasks/zzr; +HSPLcom/google/android/gms/tasks/zzr;->()V +HSPLcom/google/android/gms/tasks/zzr;->zza(Lcom/google/android/gms/tasks/zzq;)V +HSPLcom/google/android/gms/tasks/zzr;->zzb(Lcom/google/android/gms/tasks/Task;)V +Lcom/google/android/gms/tasks/zzt; +HSPLcom/google/android/gms/tasks/zzt;->()V +Lcom/google/android/gms/tasks/zzu; +HSPLcom/google/android/gms/tasks/zzu;->()V +Lcom/google/android/gms/tasks/zzw; +HSPLcom/google/android/gms/tasks/zzw;->()V +HSPLcom/google/android/gms/tasks/zzw;->continueWith(Ljava/util/concurrent/Executor;Lcom/google/android/gms/tasks/Continuation;)Lcom/google/android/gms/tasks/Task; +HSPLcom/google/android/gms/tasks/zzw;->getResult()Ljava/lang/Object; +HSPLcom/google/android/gms/tasks/zzw;->isCanceled()Z +HSPLcom/google/android/gms/tasks/zzw;->isSuccessful()Z +HSPLcom/google/android/gms/tasks/zzw;->onSuccessTask(Ljava/util/concurrent/Executor;Lcom/google/android/gms/tasks/SuccessContinuation;)Lcom/google/android/gms/tasks/Task; +HSPLcom/google/android/gms/tasks/zzw;->zzb(Ljava/lang/Object;)V +HSPLcom/google/android/gms/tasks/zzw;->zze(Ljava/lang/Object;)Z +HSPLcom/google/android/gms/tasks/zzw;->zzf()V +HSPLcom/google/android/gms/tasks/zzw;->zzg()V +HSPLcom/google/android/gms/tasks/zzw;->zzh()V +HSPLcom/google/android/gms/tasks/zzw;->zzi()V +Lcom/google/android/gms/tasks/zzz; +HSPLcom/google/android/gms/tasks/zzz;->(Lcom/google/android/gms/tasks/zzw;Ljava/util/concurrent/Callable;)V +HSPLcom/google/android/gms/tasks/zzz;->run()V +Lcom/google/common/base/Absent; +HSPLcom/google/common/base/Absent;->()V +HSPLcom/google/common/base/Absent;->()V +HSPLcom/google/common/base/Absent;->isPresent()Z +HSPLcom/google/common/base/Absent;->withType()Lcom/google/common/base/Optional; +Lcom/google/common/base/Function; +Lcom/google/common/base/NullnessCasts; +HSPLcom/google/common/base/NullnessCasts;->uncheckedCastNullableTToT(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/google/common/base/Optional; +HSPLcom/google/common/base/Optional;->()V +HSPLcom/google/common/base/Optional;->absent()Lcom/google/common/base/Optional; +HSPLcom/google/common/base/Optional;->of(Ljava/lang/Object;)Lcom/google/common/base/Optional; +Lcom/google/common/base/Preconditions; +HSPLcom/google/common/base/Preconditions;->checkArgument(ZLjava/lang/Object;)V +HSPLcom/google/common/base/Preconditions;->checkElementIndex(II)I +HSPLcom/google/common/base/Preconditions;->checkElementIndex(IILjava/lang/String;)I +HSPLcom/google/common/base/Preconditions;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/common/base/Preconditions;->checkNotNull(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/common/base/Preconditions;->checkPositionIndex(II)I +HSPLcom/google/common/base/Preconditions;->checkPositionIndex(IILjava/lang/String;)I +HSPLcom/google/common/base/Preconditions;->checkState(ZLjava/lang/Object;)V +Lcom/google/common/base/Present; +HSPLcom/google/common/base/Present;->(Ljava/lang/Object;)V +HSPLcom/google/common/base/Present;->get()Ljava/lang/Object; +HSPLcom/google/common/base/Present;->isPresent()Z +Lcom/google/common/base/Supplier; +Lcom/google/common/base/Suppliers; +HSPLcom/google/common/base/Suppliers;->memoize(Lcom/google/common/base/Supplier;)Lcom/google/common/base/Supplier; +HSPLcom/google/common/base/Suppliers;->ofInstance(Ljava/lang/Object;)Lcom/google/common/base/Supplier; +Lcom/google/common/base/Suppliers$MemoizingSupplier; +Lcom/google/common/base/Suppliers$NonSerializableMemoizingSupplier; +HSPLcom/google/common/base/Suppliers$NonSerializableMemoizingSupplier;->(Lcom/google/common/base/Supplier;)V +HSPLcom/google/common/base/Suppliers$NonSerializableMemoizingSupplier;->get()Ljava/lang/Object; +Lcom/google/common/base/Suppliers$SupplierOfInstance; +HSPLcom/google/common/base/Suppliers$SupplierOfInstance;->(Ljava/lang/Object;)V +HSPLcom/google/common/base/Suppliers$SupplierOfInstance;->get()Ljava/lang/Object; +Lcom/google/common/collect/AbstractIndexedListIterator; +HSPLcom/google/common/collect/AbstractIndexedListIterator;->(II)V +Lcom/google/common/collect/CollectPreconditions; +HSPLcom/google/common/collect/CollectPreconditions;->checkNonnegative(ILjava/lang/String;)I +Lcom/google/common/collect/Hashing; +HSPLcom/google/common/collect/Hashing;->smear(I)I +Lcom/google/common/collect/ImmutableCollection; +HSPLcom/google/common/collect/ImmutableCollection;->()V +HSPLcom/google/common/collect/ImmutableCollection;->()V +Lcom/google/common/collect/ImmutableCollection$ArrayBasedBuilder; +HSPLcom/google/common/collect/ImmutableCollection$ArrayBasedBuilder;->(I)V +HSPLcom/google/common/collect/ImmutableCollection$ArrayBasedBuilder;->add([Ljava/lang/Object;)Lcom/google/common/collect/ImmutableCollection$Builder; +HSPLcom/google/common/collect/ImmutableCollection$ArrayBasedBuilder;->addAll([Ljava/lang/Object;I)V +HSPLcom/google/common/collect/ImmutableCollection$ArrayBasedBuilder;->getReadyToExpandTo(I)V +Lcom/google/common/collect/ImmutableCollection$Builder; +HSPLcom/google/common/collect/ImmutableCollection$Builder;->()V +HSPLcom/google/common/collect/ImmutableCollection$Builder;->expandedCapacity(II)I +Lcom/google/common/collect/ImmutableList; +HSPLcom/google/common/collect/ImmutableList;->()V +HSPLcom/google/common/collect/ImmutableList;->()V +HSPLcom/google/common/collect/ImmutableList;->asImmutableList([Ljava/lang/Object;)Lcom/google/common/collect/ImmutableList; +HSPLcom/google/common/collect/ImmutableList;->asImmutableList([Ljava/lang/Object;I)Lcom/google/common/collect/ImmutableList; +HSPLcom/google/common/collect/ImmutableList;->construct([Ljava/lang/Object;)Lcom/google/common/collect/ImmutableList; +HSPLcom/google/common/collect/ImmutableList;->contains(Ljava/lang/Object;)Z +HSPLcom/google/common/collect/ImmutableList;->indexOf(Ljava/lang/Object;)I +HSPLcom/google/common/collect/ImmutableList;->of(Ljava/lang/Object;Ljava/lang/Object;)Lcom/google/common/collect/ImmutableList; +HSPLcom/google/common/collect/ImmutableList;->of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Lcom/google/common/collect/ImmutableList; +HSPLcom/google/common/collect/ImmutableList;->of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Lcom/google/common/collect/ImmutableList; +Lcom/google/common/collect/ImmutableList$Builder; +HSPLcom/google/common/collect/ImmutableList$Builder;->()V +HSPLcom/google/common/collect/ImmutableList$Builder;->(I)V +HSPLcom/google/common/collect/ImmutableList$Builder;->add([Ljava/lang/Object;)Lcom/google/common/collect/ImmutableList$Builder; +HSPLcom/google/common/collect/ImmutableList$Builder;->build()Lcom/google/common/collect/ImmutableList; +Lcom/google/common/collect/ImmutableList$Itr; +HSPLcom/google/common/collect/ImmutableList$Itr;->(Lcom/google/common/collect/ImmutableList;I)V +Lcom/google/common/collect/ImmutableSet; +HSPLcom/google/common/collect/ImmutableSet;->()V +HSPLcom/google/common/collect/ImmutableSet;->chooseTableSize(I)I +HSPLcom/google/common/collect/ImmutableSet;->construct(I[Ljava/lang/Object;)Lcom/google/common/collect/ImmutableSet; +HSPLcom/google/common/collect/ImmutableSet;->of(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;[Ljava/lang/Object;)Lcom/google/common/collect/ImmutableSet; +HSPLcom/google/common/collect/ImmutableSet;->shouldTrim(II)Z +Lcom/google/common/collect/Lists; +HSPLcom/google/common/collect/Lists;->indexOfImpl(Ljava/util/List;Ljava/lang/Object;)I +HSPLcom/google/common/collect/Lists;->indexOfRandomAccess(Ljava/util/List;Ljava/lang/Object;)I +Lcom/google/common/collect/ObjectArrays; +HSPLcom/google/common/collect/ObjectArrays;->checkElementNotNull(Ljava/lang/Object;I)Ljava/lang/Object; +HSPLcom/google/common/collect/ObjectArrays;->checkElementsNotNull([Ljava/lang/Object;)[Ljava/lang/Object; +HSPLcom/google/common/collect/ObjectArrays;->checkElementsNotNull([Ljava/lang/Object;I)[Ljava/lang/Object; +Lcom/google/common/collect/RegularImmutableList; +HSPLcom/google/common/collect/RegularImmutableList;->()V +HSPLcom/google/common/collect/RegularImmutableList;->([Ljava/lang/Object;I)V +HSPLcom/google/common/collect/RegularImmutableList;->get(I)Ljava/lang/Object; +HSPLcom/google/common/collect/RegularImmutableList;->size()I +Lcom/google/common/collect/RegularImmutableSet; +HSPLcom/google/common/collect/RegularImmutableSet;->()V +HSPLcom/google/common/collect/RegularImmutableSet;->([Ljava/lang/Object;I[Ljava/lang/Object;II)V +Lcom/google/common/collect/UnmodifiableIterator; +HSPLcom/google/common/collect/UnmodifiableIterator;->()V +Lcom/google/common/collect/UnmodifiableListIterator; +HSPLcom/google/common/collect/UnmodifiableListIterator;->()V +Lcom/google/common/util/concurrent/ListenableFuture; +Lcom/google/common/util/concurrent/Striped$SmallLazyStriped$$ExternalSyntheticBackportWithForwarding0; +HSPLcom/google/common/util/concurrent/Striped$SmallLazyStriped$$ExternalSyntheticBackportWithForwarding0;->m(Ljava/util/concurrent/atomic/AtomicReferenceArray;ILjava/lang/Object;Ljava/lang/Object;)Z +Lcom/google/crypto/tink/Aead; +Lcom/google/crypto/tink/BinaryKeysetReader; +HSPLcom/google/crypto/tink/BinaryKeysetReader;->(Ljava/io/InputStream;)V +HSPLcom/google/crypto/tink/BinaryKeysetReader;->readEncrypted()Lcom/google/crypto/tink/proto/EncryptedKeyset; +HSPLcom/google/crypto/tink/BinaryKeysetReader;->withBytes([B)Lcom/google/crypto/tink/KeysetReader; +Lcom/google/crypto/tink/CryptoFormat; +HSPLcom/google/crypto/tink/CryptoFormat;->()V +HSPLcom/google/crypto/tink/CryptoFormat;->getOutputPrefix(Lcom/google/crypto/tink/proto/Keyset$Key;)[B +Lcom/google/crypto/tink/CryptoFormat$1; +HSPLcom/google/crypto/tink/CryptoFormat$1;->()V +Lcom/google/crypto/tink/DeterministicAead; +Lcom/google/crypto/tink/InsecureSecretKeyAccess; +HSPLcom/google/crypto/tink/InsecureSecretKeyAccess;->get()Lcom/google/crypto/tink/SecretKeyAccess; +Lcom/google/crypto/tink/Key; +HSPLcom/google/crypto/tink/Key;->()V +Lcom/google/crypto/tink/KeyManager; +Lcom/google/crypto/tink/KeyManagerImpl; +HSPLcom/google/crypto/tink/KeyManagerImpl;->(Lcom/google/crypto/tink/internal/KeyTypeManager;Ljava/lang/Class;)V +HSPLcom/google/crypto/tink/KeyManagerImpl;->getKeyType()Ljava/lang/String; +HSPLcom/google/crypto/tink/KeyManagerImpl;->getPrimitive(Lcom/google/crypto/tink/shaded/protobuf/ByteString;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/KeyManagerImpl;->keyFactoryHelper()Lcom/google/crypto/tink/KeyManagerImpl$KeyFactoryHelper; +HSPLcom/google/crypto/tink/KeyManagerImpl;->newKeyData(Lcom/google/crypto/tink/shaded/protobuf/ByteString;)Lcom/google/crypto/tink/proto/KeyData; +HSPLcom/google/crypto/tink/KeyManagerImpl;->validateKeyAndGetPrimitive(Lcom/google/crypto/tink/shaded/protobuf/MessageLite;)Ljava/lang/Object; +Lcom/google/crypto/tink/KeyManagerImpl$KeyFactoryHelper; +HSPLcom/google/crypto/tink/KeyManagerImpl$KeyFactoryHelper;->(Lcom/google/crypto/tink/internal/KeyTypeManager$KeyFactory;)V +HSPLcom/google/crypto/tink/KeyManagerImpl$KeyFactoryHelper;->parseValidateCreate(Lcom/google/crypto/tink/shaded/protobuf/ByteString;)Lcom/google/crypto/tink/shaded/protobuf/MessageLite; +HSPLcom/google/crypto/tink/KeyManagerImpl$KeyFactoryHelper;->validateCreate(Lcom/google/crypto/tink/shaded/protobuf/MessageLite;)Lcom/google/crypto/tink/shaded/protobuf/MessageLite; +Lcom/google/crypto/tink/KeyManagerRegistry; +HSPLcom/google/crypto/tink/KeyManagerRegistry;->()V +HSPLcom/google/crypto/tink/KeyManagerRegistry;->()V +HSPLcom/google/crypto/tink/KeyManagerRegistry;->(Lcom/google/crypto/tink/KeyManagerRegistry;)V +HSPLcom/google/crypto/tink/KeyManagerRegistry;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/KeyManagerRegistry;->createContainerFor(Lcom/google/crypto/tink/internal/KeyTypeManager;)Lcom/google/crypto/tink/KeyManagerRegistry$KeyManagerContainer; +HSPLcom/google/crypto/tink/KeyManagerRegistry;->getKeyManager(Ljava/lang/String;Ljava/lang/Class;)Lcom/google/crypto/tink/KeyManager; +HSPLcom/google/crypto/tink/KeyManagerRegistry;->getKeyManagerContainerOrThrow(Ljava/lang/String;)Lcom/google/crypto/tink/KeyManagerRegistry$KeyManagerContainer; +HSPLcom/google/crypto/tink/KeyManagerRegistry;->getKeyManagerInternal(Ljava/lang/String;Ljava/lang/Class;)Lcom/google/crypto/tink/KeyManager; +HSPLcom/google/crypto/tink/KeyManagerRegistry;->getUntypedKeyManager(Ljava/lang/String;)Lcom/google/crypto/tink/KeyManager; +HSPLcom/google/crypto/tink/KeyManagerRegistry;->registerKeyManager(Lcom/google/crypto/tink/internal/KeyTypeManager;)V +HSPLcom/google/crypto/tink/KeyManagerRegistry;->registerKeyManagerContainer(Lcom/google/crypto/tink/KeyManagerRegistry$KeyManagerContainer;Z)V +HSPLcom/google/crypto/tink/KeyManagerRegistry;->typeUrlExists(Ljava/lang/String;)Z +Lcom/google/crypto/tink/KeyManagerRegistry$2; +HSPLcom/google/crypto/tink/KeyManagerRegistry$2;->(Lcom/google/crypto/tink/internal/KeyTypeManager;)V +HSPLcom/google/crypto/tink/KeyManagerRegistry$2;->getImplementingClass()Ljava/lang/Class; +HSPLcom/google/crypto/tink/KeyManagerRegistry$2;->getKeyManager(Ljava/lang/Class;)Lcom/google/crypto/tink/KeyManager; +HSPLcom/google/crypto/tink/KeyManagerRegistry$2;->getUntypedKeyManager()Lcom/google/crypto/tink/KeyManager; +HSPLcom/google/crypto/tink/KeyManagerRegistry$2;->supportedPrimitives()Ljava/util/Set; +Lcom/google/crypto/tink/KeyManagerRegistry$KeyManagerContainer; +Lcom/google/crypto/tink/KeyStatus; +HSPLcom/google/crypto/tink/KeyStatus;->()V +HSPLcom/google/crypto/tink/KeyStatus;->(Ljava/lang/String;)V +Lcom/google/crypto/tink/KeyTemplate; +HSPLcom/google/crypto/tink/KeyTemplate;->(Lcom/google/crypto/tink/proto/KeyTemplate;)V +HSPLcom/google/crypto/tink/KeyTemplate;->create(Ljava/lang/String;[BLcom/google/crypto/tink/KeyTemplate$OutputPrefixType;)Lcom/google/crypto/tink/KeyTemplate; +HSPLcom/google/crypto/tink/KeyTemplate;->getProto()Lcom/google/crypto/tink/proto/KeyTemplate; +HSPLcom/google/crypto/tink/KeyTemplate;->toProto(Lcom/google/crypto/tink/KeyTemplate$OutputPrefixType;)Lcom/google/crypto/tink/proto/OutputPrefixType; +Lcom/google/crypto/tink/KeyTemplate$1; +HSPLcom/google/crypto/tink/KeyTemplate$1;->()V +Lcom/google/crypto/tink/KeyTemplate$OutputPrefixType; +HSPLcom/google/crypto/tink/KeyTemplate$OutputPrefixType;->()V +HSPLcom/google/crypto/tink/KeyTemplate$OutputPrefixType;->(Ljava/lang/String;I)V +HSPLcom/google/crypto/tink/KeyTemplate$OutputPrefixType;->values()[Lcom/google/crypto/tink/KeyTemplate$OutputPrefixType; +Lcom/google/crypto/tink/KeyTemplates; +HSPLcom/google/crypto/tink/KeyTemplates;->get(Ljava/lang/String;)Lcom/google/crypto/tink/KeyTemplate; +Lcom/google/crypto/tink/KeysetHandle; +HSPLcom/google/crypto/tink/KeysetHandle;->(Lcom/google/crypto/tink/proto/Keyset;Ljava/util/List;)V +HSPLcom/google/crypto/tink/KeysetHandle;->assertEnoughEncryptedKeyMaterial(Lcom/google/crypto/tink/proto/EncryptedKeyset;)V +HSPLcom/google/crypto/tink/KeysetHandle;->assertEnoughKeyMaterial(Lcom/google/crypto/tink/proto/Keyset;)V +HSPLcom/google/crypto/tink/KeysetHandle;->decrypt(Lcom/google/crypto/tink/proto/EncryptedKeyset;Lcom/google/crypto/tink/Aead;[B)Lcom/google/crypto/tink/proto/Keyset; +HSPLcom/google/crypto/tink/KeysetHandle;->encrypt(Lcom/google/crypto/tink/proto/Keyset;Lcom/google/crypto/tink/Aead;[B)Lcom/google/crypto/tink/proto/EncryptedKeyset; +HSPLcom/google/crypto/tink/KeysetHandle;->fromKeyset(Lcom/google/crypto/tink/proto/Keyset;)Lcom/google/crypto/tink/KeysetHandle; +HSPLcom/google/crypto/tink/KeysetHandle;->getEntriesFromKeyset(Lcom/google/crypto/tink/proto/Keyset;)Ljava/util/List; +HSPLcom/google/crypto/tink/KeysetHandle;->getFullPrimitiveOrNull(Lcom/google/crypto/tink/Key;Ljava/lang/Class;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/KeysetHandle;->getKeyset()Lcom/google/crypto/tink/proto/Keyset; +HSPLcom/google/crypto/tink/KeysetHandle;->getKeysetInfo()Lcom/google/crypto/tink/proto/KeysetInfo; +HSPLcom/google/crypto/tink/KeysetHandle;->getLegacyPrimitiveOrNull(Lcom/google/crypto/tink/proto/Keyset$Key;Ljava/lang/Class;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/KeysetHandle;->getPrimitive(Ljava/lang/Class;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/KeysetHandle;->getPrimitiveWithKnownInputPrimitive(Ljava/lang/Class;Ljava/lang/Class;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/KeysetHandle;->parseStatus(Lcom/google/crypto/tink/proto/KeyStatusType;)Lcom/google/crypto/tink/KeyStatus; +HSPLcom/google/crypto/tink/KeysetHandle;->read(Lcom/google/crypto/tink/KeysetReader;Lcom/google/crypto/tink/Aead;)Lcom/google/crypto/tink/KeysetHandle; +HSPLcom/google/crypto/tink/KeysetHandle;->readWithAssociatedData(Lcom/google/crypto/tink/KeysetReader;Lcom/google/crypto/tink/Aead;[B)Lcom/google/crypto/tink/KeysetHandle; +HSPLcom/google/crypto/tink/KeysetHandle;->size()I +HSPLcom/google/crypto/tink/KeysetHandle;->toProtoKeySerialization(Lcom/google/crypto/tink/proto/Keyset$Key;)Lcom/google/crypto/tink/internal/ProtoKeySerialization; +HSPLcom/google/crypto/tink/KeysetHandle;->write(Lcom/google/crypto/tink/KeysetWriter;Lcom/google/crypto/tink/Aead;)V +HSPLcom/google/crypto/tink/KeysetHandle;->writeWithAssociatedData(Lcom/google/crypto/tink/KeysetWriter;Lcom/google/crypto/tink/Aead;[B)V +Lcom/google/crypto/tink/KeysetHandle$1; +HSPLcom/google/crypto/tink/KeysetHandle$1;->()V +Lcom/google/crypto/tink/KeysetHandle$Entry; +HSPLcom/google/crypto/tink/KeysetHandle$Entry;->(Lcom/google/crypto/tink/Key;Lcom/google/crypto/tink/KeyStatus;IZ)V +HSPLcom/google/crypto/tink/KeysetHandle$Entry;->(Lcom/google/crypto/tink/Key;Lcom/google/crypto/tink/KeyStatus;IZLcom/google/crypto/tink/KeysetHandle$1;)V +HSPLcom/google/crypto/tink/KeysetHandle$Entry;->getKey()Lcom/google/crypto/tink/Key; +Lcom/google/crypto/tink/KeysetManager; +HSPLcom/google/crypto/tink/KeysetManager;->(Lcom/google/crypto/tink/proto/Keyset$Builder;)V +HSPLcom/google/crypto/tink/KeysetManager;->add(Lcom/google/crypto/tink/KeyTemplate;)Lcom/google/crypto/tink/KeysetManager; +HSPLcom/google/crypto/tink/KeysetManager;->addNewKey(Lcom/google/crypto/tink/proto/KeyTemplate;Z)I +HSPLcom/google/crypto/tink/KeysetManager;->createKeysetKey(Lcom/google/crypto/tink/proto/KeyData;Lcom/google/crypto/tink/proto/OutputPrefixType;)Lcom/google/crypto/tink/proto/Keyset$Key; +HSPLcom/google/crypto/tink/KeysetManager;->getKeysetHandle()Lcom/google/crypto/tink/KeysetHandle; +HSPLcom/google/crypto/tink/KeysetManager;->keyIdExists(I)Z +HSPLcom/google/crypto/tink/KeysetManager;->newKey(Lcom/google/crypto/tink/proto/KeyTemplate;)Lcom/google/crypto/tink/proto/Keyset$Key; +HSPLcom/google/crypto/tink/KeysetManager;->newKeyId()I +HSPLcom/google/crypto/tink/KeysetManager;->setPrimary(I)Lcom/google/crypto/tink/KeysetManager; +HSPLcom/google/crypto/tink/KeysetManager;->withEmptyKeyset()Lcom/google/crypto/tink/KeysetManager; +HSPLcom/google/crypto/tink/KeysetManager;->withKeysetHandle(Lcom/google/crypto/tink/KeysetHandle;)Lcom/google/crypto/tink/KeysetManager; +Lcom/google/crypto/tink/KeysetReader; +Lcom/google/crypto/tink/KeysetWriter; +Lcom/google/crypto/tink/KmsClient; +Lcom/google/crypto/tink/Mac; +Lcom/google/crypto/tink/Parameters; +HSPLcom/google/crypto/tink/Parameters;->()V +Lcom/google/crypto/tink/PrimitiveSet; +HSPLcom/google/crypto/tink/PrimitiveSet;->(Ljava/util/concurrent/ConcurrentMap;Lcom/google/crypto/tink/PrimitiveSet$Entry;Lcom/google/crypto/tink/monitoring/MonitoringAnnotations;Ljava/lang/Class;)V +HSPLcom/google/crypto/tink/PrimitiveSet;->(Ljava/util/concurrent/ConcurrentMap;Lcom/google/crypto/tink/PrimitiveSet$Entry;Lcom/google/crypto/tink/monitoring/MonitoringAnnotations;Ljava/lang/Class;Lcom/google/crypto/tink/PrimitiveSet$1;)V +HSPLcom/google/crypto/tink/PrimitiveSet;->access$100(Ljava/lang/Object;Ljava/lang/Object;Lcom/google/crypto/tink/proto/Keyset$Key;Ljava/util/concurrent/ConcurrentMap;)Lcom/google/crypto/tink/PrimitiveSet$Entry; +HSPLcom/google/crypto/tink/PrimitiveSet;->addEntryToMap(Ljava/lang/Object;Ljava/lang/Object;Lcom/google/crypto/tink/proto/Keyset$Key;Ljava/util/concurrent/ConcurrentMap;)Lcom/google/crypto/tink/PrimitiveSet$Entry; +HSPLcom/google/crypto/tink/PrimitiveSet;->getPrimary()Lcom/google/crypto/tink/PrimitiveSet$Entry; +HSPLcom/google/crypto/tink/PrimitiveSet;->getPrimitive([B)Ljava/util/List; +HSPLcom/google/crypto/tink/PrimitiveSet;->getPrimitiveClass()Ljava/lang/Class; +HSPLcom/google/crypto/tink/PrimitiveSet;->hasAnnotations()Z +HSPLcom/google/crypto/tink/PrimitiveSet;->newBuilder(Ljava/lang/Class;)Lcom/google/crypto/tink/PrimitiveSet$Builder; +Lcom/google/crypto/tink/PrimitiveSet$Builder; +HSPLcom/google/crypto/tink/PrimitiveSet$Builder;->(Ljava/lang/Class;)V +HSPLcom/google/crypto/tink/PrimitiveSet$Builder;->(Ljava/lang/Class;Lcom/google/crypto/tink/PrimitiveSet$1;)V +HSPLcom/google/crypto/tink/PrimitiveSet$Builder;->addPrimaryFullPrimitiveAndOptionalPrimitive(Ljava/lang/Object;Ljava/lang/Object;Lcom/google/crypto/tink/proto/Keyset$Key;)Lcom/google/crypto/tink/PrimitiveSet$Builder; +HSPLcom/google/crypto/tink/PrimitiveSet$Builder;->addPrimitive(Ljava/lang/Object;Ljava/lang/Object;Lcom/google/crypto/tink/proto/Keyset$Key;Z)Lcom/google/crypto/tink/PrimitiveSet$Builder; +HSPLcom/google/crypto/tink/PrimitiveSet$Builder;->build()Lcom/google/crypto/tink/PrimitiveSet; +HSPLcom/google/crypto/tink/PrimitiveSet$Builder;->setAnnotations(Lcom/google/crypto/tink/monitoring/MonitoringAnnotations;)Lcom/google/crypto/tink/PrimitiveSet$Builder; +Lcom/google/crypto/tink/PrimitiveSet$Entry; +HSPLcom/google/crypto/tink/PrimitiveSet$Entry;->(Ljava/lang/Object;Ljava/lang/Object;[BLcom/google/crypto/tink/proto/KeyStatusType;Lcom/google/crypto/tink/proto/OutputPrefixType;ILjava/lang/String;Lcom/google/crypto/tink/Key;)V +HSPLcom/google/crypto/tink/PrimitiveSet$Entry;->getIdentifier()[B +HSPLcom/google/crypto/tink/PrimitiveSet$Entry;->getKeyId()I +HSPLcom/google/crypto/tink/PrimitiveSet$Entry;->getPrimitive()Ljava/lang/Object; +Lcom/google/crypto/tink/PrimitiveSet$Prefix; +HSPLcom/google/crypto/tink/PrimitiveSet$Prefix;->([B)V +HSPLcom/google/crypto/tink/PrimitiveSet$Prefix;->([BLcom/google/crypto/tink/PrimitiveSet$1;)V +HSPLcom/google/crypto/tink/PrimitiveSet$Prefix;->equals(Ljava/lang/Object;)Z +HSPLcom/google/crypto/tink/PrimitiveSet$Prefix;->hashCode()I +Lcom/google/crypto/tink/PrimitiveWrapper; +Lcom/google/crypto/tink/Registry; +HSPLcom/google/crypto/tink/Registry;->()V +HSPLcom/google/crypto/tink/Registry;->createDeriverFor(Lcom/google/crypto/tink/internal/KeyTypeManager;)Lcom/google/crypto/tink/Registry$KeyDeriverContainer; +HSPLcom/google/crypto/tink/Registry;->ensureKeyManagerInsertable(Ljava/lang/String;Ljava/util/Map;Z)V +HSPLcom/google/crypto/tink/Registry;->getFullPrimitive(Lcom/google/crypto/tink/Key;Ljava/lang/Class;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/Registry;->getInputPrimitive(Ljava/lang/Class;)Ljava/lang/Class; +HSPLcom/google/crypto/tink/Registry;->getPrimitive(Lcom/google/crypto/tink/proto/KeyData;Ljava/lang/Class;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/Registry;->getPrimitive(Ljava/lang/String;Lcom/google/crypto/tink/shaded/protobuf/ByteString;Ljava/lang/Class;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/Registry;->getUntypedKeyManager(Ljava/lang/String;)Lcom/google/crypto/tink/KeyManager; +HSPLcom/google/crypto/tink/Registry;->keyTemplateMap()Ljava/util/Map; +HSPLcom/google/crypto/tink/Registry;->newKeyData(Lcom/google/crypto/tink/proto/KeyTemplate;)Lcom/google/crypto/tink/proto/KeyData; +HSPLcom/google/crypto/tink/Registry;->registerKeyManager(Lcom/google/crypto/tink/internal/KeyTypeManager;Z)V +HSPLcom/google/crypto/tink/Registry;->registerKeyTemplates(Ljava/lang/String;Ljava/util/Map;)V +HSPLcom/google/crypto/tink/Registry;->registerPrimitiveWrapper(Lcom/google/crypto/tink/PrimitiveWrapper;)V +HSPLcom/google/crypto/tink/Registry;->wrap(Lcom/google/crypto/tink/PrimitiveSet;Ljava/lang/Class;)Ljava/lang/Object; +Lcom/google/crypto/tink/Registry$1; +HSPLcom/google/crypto/tink/Registry$1;->(Lcom/google/crypto/tink/internal/KeyTypeManager;)V +Lcom/google/crypto/tink/Registry$KeyDeriverContainer; +Lcom/google/crypto/tink/SecretKeyAccess; +HSPLcom/google/crypto/tink/SecretKeyAccess;->()V +HSPLcom/google/crypto/tink/SecretKeyAccess;->()V +HSPLcom/google/crypto/tink/SecretKeyAccess;->instance()Lcom/google/crypto/tink/SecretKeyAccess; +HSPLcom/google/crypto/tink/SecretKeyAccess;->requireAccess(Lcom/google/crypto/tink/SecretKeyAccess;)Lcom/google/crypto/tink/SecretKeyAccess; +Lcom/google/crypto/tink/Util; +HSPLcom/google/crypto/tink/Util;->()V +HSPLcom/google/crypto/tink/Util;->getKeyInfo(Lcom/google/crypto/tink/proto/Keyset$Key;)Lcom/google/crypto/tink/proto/KeysetInfo$KeyInfo; +HSPLcom/google/crypto/tink/Util;->getKeysetInfo(Lcom/google/crypto/tink/proto/Keyset;)Lcom/google/crypto/tink/proto/KeysetInfo; +HSPLcom/google/crypto/tink/Util;->validateKey(Lcom/google/crypto/tink/proto/Keyset$Key;)V +HSPLcom/google/crypto/tink/Util;->validateKeyset(Lcom/google/crypto/tink/proto/Keyset;)V +Lcom/google/crypto/tink/aead/AeadConfig; +HSPLcom/google/crypto/tink/aead/AeadConfig;->()V +HSPLcom/google/crypto/tink/aead/AeadConfig;->init()V +HSPLcom/google/crypto/tink/aead/AeadConfig;->register()V +Lcom/google/crypto/tink/aead/AeadKey; +HSPLcom/google/crypto/tink/aead/AeadKey;->()V +Lcom/google/crypto/tink/aead/AeadParameters; +HSPLcom/google/crypto/tink/aead/AeadParameters;->()V +Lcom/google/crypto/tink/aead/AeadWrapper; +HSPLcom/google/crypto/tink/aead/AeadWrapper;->()V +HSPLcom/google/crypto/tink/aead/AeadWrapper;->()V +HSPLcom/google/crypto/tink/aead/AeadWrapper;->getInputPrimitiveClass()Ljava/lang/Class; +HSPLcom/google/crypto/tink/aead/AeadWrapper;->getPrimitiveClass()Ljava/lang/Class; +HSPLcom/google/crypto/tink/aead/AeadWrapper;->register()V +HSPLcom/google/crypto/tink/aead/AeadWrapper;->wrap(Lcom/google/crypto/tink/PrimitiveSet;)Lcom/google/crypto/tink/Aead; +HSPLcom/google/crypto/tink/aead/AeadWrapper;->wrap(Lcom/google/crypto/tink/PrimitiveSet;)Ljava/lang/Object; +Lcom/google/crypto/tink/aead/AeadWrapper$WrappedAead; +HSPLcom/google/crypto/tink/aead/AeadWrapper$WrappedAead;->(Lcom/google/crypto/tink/PrimitiveSet;)V +HSPLcom/google/crypto/tink/aead/AeadWrapper$WrappedAead;->(Lcom/google/crypto/tink/PrimitiveSet;Lcom/google/crypto/tink/aead/AeadWrapper$1;)V +HSPLcom/google/crypto/tink/aead/AeadWrapper$WrappedAead;->decrypt([B[B)[B +HSPLcom/google/crypto/tink/aead/AeadWrapper$WrappedAead;->encrypt([B[B)[B +Lcom/google/crypto/tink/aead/AesCtrHmacAeadKeyManager; +HSPLcom/google/crypto/tink/aead/AesCtrHmacAeadKeyManager;->()V +HSPLcom/google/crypto/tink/aead/AesCtrHmacAeadKeyManager;->access$000(IIIILcom/google/crypto/tink/proto/HashType;Lcom/google/crypto/tink/KeyTemplate$OutputPrefixType;)Lcom/google/crypto/tink/internal/KeyTypeManager$KeyFactory$KeyFormat; +HSPLcom/google/crypto/tink/aead/AesCtrHmacAeadKeyManager;->createKeyFormat(IIIILcom/google/crypto/tink/proto/HashType;)Lcom/google/crypto/tink/proto/AesCtrHmacAeadKeyFormat; +HSPLcom/google/crypto/tink/aead/AesCtrHmacAeadKeyManager;->createKeyFormat(IIIILcom/google/crypto/tink/proto/HashType;Lcom/google/crypto/tink/KeyTemplate$OutputPrefixType;)Lcom/google/crypto/tink/internal/KeyTypeManager$KeyFactory$KeyFormat; +HSPLcom/google/crypto/tink/aead/AesCtrHmacAeadKeyManager;->fipsStatus()Lcom/google/crypto/tink/config/internal/TinkFipsUtil$AlgorithmFipsCompatibility; +HSPLcom/google/crypto/tink/aead/AesCtrHmacAeadKeyManager;->getKeyType()Ljava/lang/String; +HSPLcom/google/crypto/tink/aead/AesCtrHmacAeadKeyManager;->keyFactory()Lcom/google/crypto/tink/internal/KeyTypeManager$KeyFactory; +HSPLcom/google/crypto/tink/aead/AesCtrHmacAeadKeyManager;->register(Z)V +Lcom/google/crypto/tink/aead/AesCtrHmacAeadKeyManager$1; +HSPLcom/google/crypto/tink/aead/AesCtrHmacAeadKeyManager$1;->(Ljava/lang/Class;)V +Lcom/google/crypto/tink/aead/AesCtrHmacAeadKeyManager$2; +HSPLcom/google/crypto/tink/aead/AesCtrHmacAeadKeyManager$2;->(Lcom/google/crypto/tink/aead/AesCtrHmacAeadKeyManager;Ljava/lang/Class;)V +HSPLcom/google/crypto/tink/aead/AesCtrHmacAeadKeyManager$2;->keyFormats()Ljava/util/Map; +Lcom/google/crypto/tink/aead/AesEaxKey; +Lcom/google/crypto/tink/aead/AesEaxKeyManager; +HSPLcom/google/crypto/tink/aead/AesEaxKeyManager;->()V +HSPLcom/google/crypto/tink/aead/AesEaxKeyManager;->access$000(IILcom/google/crypto/tink/KeyTemplate$OutputPrefixType;)Lcom/google/crypto/tink/internal/KeyTypeManager$KeyFactory$KeyFormat; +HSPLcom/google/crypto/tink/aead/AesEaxKeyManager;->createKeyFormat(IILcom/google/crypto/tink/KeyTemplate$OutputPrefixType;)Lcom/google/crypto/tink/internal/KeyTypeManager$KeyFactory$KeyFormat; +HSPLcom/google/crypto/tink/aead/AesEaxKeyManager;->getKeyType()Ljava/lang/String; +HSPLcom/google/crypto/tink/aead/AesEaxKeyManager;->keyFactory()Lcom/google/crypto/tink/internal/KeyTypeManager$KeyFactory; +HSPLcom/google/crypto/tink/aead/AesEaxKeyManager;->register(Z)V +Lcom/google/crypto/tink/aead/AesEaxKeyManager$1; +HSPLcom/google/crypto/tink/aead/AesEaxKeyManager$1;->(Ljava/lang/Class;)V +Lcom/google/crypto/tink/aead/AesEaxKeyManager$2; +HSPLcom/google/crypto/tink/aead/AesEaxKeyManager$2;->(Lcom/google/crypto/tink/aead/AesEaxKeyManager;Ljava/lang/Class;)V +HSPLcom/google/crypto/tink/aead/AesEaxKeyManager$2;->keyFormats()Ljava/util/Map; +Lcom/google/crypto/tink/aead/AesEaxParameters; +Lcom/google/crypto/tink/aead/AesEaxProtoSerialization; +HSPLcom/google/crypto/tink/aead/AesEaxProtoSerialization;->()V +HSPLcom/google/crypto/tink/aead/AesEaxProtoSerialization;->register()V +HSPLcom/google/crypto/tink/aead/AesEaxProtoSerialization;->register(Lcom/google/crypto/tink/internal/MutableSerializationRegistry;)V +Lcom/google/crypto/tink/aead/AesEaxProtoSerialization$$ExternalSyntheticLambda0; +HSPLcom/google/crypto/tink/aead/AesEaxProtoSerialization$$ExternalSyntheticLambda0;->()V +Lcom/google/crypto/tink/aead/AesEaxProtoSerialization$$ExternalSyntheticLambda1; +HSPLcom/google/crypto/tink/aead/AesEaxProtoSerialization$$ExternalSyntheticLambda1;->()V +Lcom/google/crypto/tink/aead/AesEaxProtoSerialization$$ExternalSyntheticLambda2; +HSPLcom/google/crypto/tink/aead/AesEaxProtoSerialization$$ExternalSyntheticLambda2;->()V +Lcom/google/crypto/tink/aead/AesEaxProtoSerialization$$ExternalSyntheticLambda3; +HSPLcom/google/crypto/tink/aead/AesEaxProtoSerialization$$ExternalSyntheticLambda3;->()V +Lcom/google/crypto/tink/aead/AesGcmKey; +HSPLcom/google/crypto/tink/aead/AesGcmKey;->(Lcom/google/crypto/tink/aead/AesGcmParameters;Lcom/google/crypto/tink/util/SecretBytes;Lcom/google/crypto/tink/util/Bytes;Ljava/lang/Integer;)V +HSPLcom/google/crypto/tink/aead/AesGcmKey;->(Lcom/google/crypto/tink/aead/AesGcmParameters;Lcom/google/crypto/tink/util/SecretBytes;Lcom/google/crypto/tink/util/Bytes;Ljava/lang/Integer;Lcom/google/crypto/tink/aead/AesGcmKey$1;)V +HSPLcom/google/crypto/tink/aead/AesGcmKey;->builder()Lcom/google/crypto/tink/aead/AesGcmKey$Builder; +Lcom/google/crypto/tink/aead/AesGcmKey$Builder; +HSPLcom/google/crypto/tink/aead/AesGcmKey$Builder;->()V +HSPLcom/google/crypto/tink/aead/AesGcmKey$Builder;->(Lcom/google/crypto/tink/aead/AesGcmKey$1;)V +HSPLcom/google/crypto/tink/aead/AesGcmKey$Builder;->build()Lcom/google/crypto/tink/aead/AesGcmKey; +HSPLcom/google/crypto/tink/aead/AesGcmKey$Builder;->getOutputPrefix()Lcom/google/crypto/tink/util/Bytes; +HSPLcom/google/crypto/tink/aead/AesGcmKey$Builder;->setIdRequirement(Ljava/lang/Integer;)Lcom/google/crypto/tink/aead/AesGcmKey$Builder; +HSPLcom/google/crypto/tink/aead/AesGcmKey$Builder;->setKeyBytes(Lcom/google/crypto/tink/util/SecretBytes;)Lcom/google/crypto/tink/aead/AesGcmKey$Builder; +HSPLcom/google/crypto/tink/aead/AesGcmKey$Builder;->setParameters(Lcom/google/crypto/tink/aead/AesGcmParameters;)Lcom/google/crypto/tink/aead/AesGcmKey$Builder; +Lcom/google/crypto/tink/aead/AesGcmKeyManager; +HSPLcom/google/crypto/tink/aead/AesGcmKeyManager;->()V +HSPLcom/google/crypto/tink/aead/AesGcmKeyManager;->access$000(ILcom/google/crypto/tink/KeyTemplate$OutputPrefixType;)Lcom/google/crypto/tink/internal/KeyTypeManager$KeyFactory$KeyFormat; +HSPLcom/google/crypto/tink/aead/AesGcmKeyManager;->createKeyFormat(ILcom/google/crypto/tink/KeyTemplate$OutputPrefixType;)Lcom/google/crypto/tink/internal/KeyTypeManager$KeyFactory$KeyFormat; +HSPLcom/google/crypto/tink/aead/AesGcmKeyManager;->fipsStatus()Lcom/google/crypto/tink/config/internal/TinkFipsUtil$AlgorithmFipsCompatibility; +HSPLcom/google/crypto/tink/aead/AesGcmKeyManager;->getKeyType()Ljava/lang/String; +HSPLcom/google/crypto/tink/aead/AesGcmKeyManager;->getVersion()I +HSPLcom/google/crypto/tink/aead/AesGcmKeyManager;->keyFactory()Lcom/google/crypto/tink/internal/KeyTypeManager$KeyFactory; +HSPLcom/google/crypto/tink/aead/AesGcmKeyManager;->keyMaterialType()Lcom/google/crypto/tink/proto/KeyData$KeyMaterialType; +HSPLcom/google/crypto/tink/aead/AesGcmKeyManager;->parseKey(Lcom/google/crypto/tink/shaded/protobuf/ByteString;)Lcom/google/crypto/tink/proto/AesGcmKey; +HSPLcom/google/crypto/tink/aead/AesGcmKeyManager;->parseKey(Lcom/google/crypto/tink/shaded/protobuf/ByteString;)Lcom/google/crypto/tink/shaded/protobuf/MessageLite; +HSPLcom/google/crypto/tink/aead/AesGcmKeyManager;->register(Z)V +HSPLcom/google/crypto/tink/aead/AesGcmKeyManager;->validateKey(Lcom/google/crypto/tink/proto/AesGcmKey;)V +HSPLcom/google/crypto/tink/aead/AesGcmKeyManager;->validateKey(Lcom/google/crypto/tink/shaded/protobuf/MessageLite;)V +Lcom/google/crypto/tink/aead/AesGcmKeyManager$1; +HSPLcom/google/crypto/tink/aead/AesGcmKeyManager$1;->(Ljava/lang/Class;)V +HSPLcom/google/crypto/tink/aead/AesGcmKeyManager$1;->getPrimitive(Lcom/google/crypto/tink/proto/AesGcmKey;)Lcom/google/crypto/tink/Aead; +HSPLcom/google/crypto/tink/aead/AesGcmKeyManager$1;->getPrimitive(Lcom/google/crypto/tink/shaded/protobuf/MessageLite;)Ljava/lang/Object; +Lcom/google/crypto/tink/aead/AesGcmKeyManager$2; +HSPLcom/google/crypto/tink/aead/AesGcmKeyManager$2;->(Lcom/google/crypto/tink/aead/AesGcmKeyManager;Ljava/lang/Class;)V +HSPLcom/google/crypto/tink/aead/AesGcmKeyManager$2;->createKey(Lcom/google/crypto/tink/proto/AesGcmKeyFormat;)Lcom/google/crypto/tink/proto/AesGcmKey; +HSPLcom/google/crypto/tink/aead/AesGcmKeyManager$2;->createKey(Lcom/google/crypto/tink/shaded/protobuf/MessageLite;)Lcom/google/crypto/tink/shaded/protobuf/MessageLite; +HSPLcom/google/crypto/tink/aead/AesGcmKeyManager$2;->keyFormats()Ljava/util/Map; +HSPLcom/google/crypto/tink/aead/AesGcmKeyManager$2;->parseKeyFormat(Lcom/google/crypto/tink/shaded/protobuf/ByteString;)Lcom/google/crypto/tink/proto/AesGcmKeyFormat; +HSPLcom/google/crypto/tink/aead/AesGcmKeyManager$2;->parseKeyFormat(Lcom/google/crypto/tink/shaded/protobuf/ByteString;)Lcom/google/crypto/tink/shaded/protobuf/MessageLite; +HSPLcom/google/crypto/tink/aead/AesGcmKeyManager$2;->validateKeyFormat(Lcom/google/crypto/tink/proto/AesGcmKeyFormat;)V +HSPLcom/google/crypto/tink/aead/AesGcmKeyManager$2;->validateKeyFormat(Lcom/google/crypto/tink/shaded/protobuf/MessageLite;)V +Lcom/google/crypto/tink/aead/AesGcmParameters; +HSPLcom/google/crypto/tink/aead/AesGcmParameters;->(IIILcom/google/crypto/tink/aead/AesGcmParameters$Variant;)V +HSPLcom/google/crypto/tink/aead/AesGcmParameters;->(IIILcom/google/crypto/tink/aead/AesGcmParameters$Variant;Lcom/google/crypto/tink/aead/AesGcmParameters$1;)V +HSPLcom/google/crypto/tink/aead/AesGcmParameters;->builder()Lcom/google/crypto/tink/aead/AesGcmParameters$Builder; +HSPLcom/google/crypto/tink/aead/AesGcmParameters;->getKeySizeBytes()I +HSPLcom/google/crypto/tink/aead/AesGcmParameters;->getVariant()Lcom/google/crypto/tink/aead/AesGcmParameters$Variant; +HSPLcom/google/crypto/tink/aead/AesGcmParameters;->hasIdRequirement()Z +Lcom/google/crypto/tink/aead/AesGcmParameters$Builder; +HSPLcom/google/crypto/tink/aead/AesGcmParameters$Builder;->()V +HSPLcom/google/crypto/tink/aead/AesGcmParameters$Builder;->(Lcom/google/crypto/tink/aead/AesGcmParameters$1;)V +HSPLcom/google/crypto/tink/aead/AesGcmParameters$Builder;->build()Lcom/google/crypto/tink/aead/AesGcmParameters; +HSPLcom/google/crypto/tink/aead/AesGcmParameters$Builder;->setIvSizeBytes(I)Lcom/google/crypto/tink/aead/AesGcmParameters$Builder; +HSPLcom/google/crypto/tink/aead/AesGcmParameters$Builder;->setKeySizeBytes(I)Lcom/google/crypto/tink/aead/AesGcmParameters$Builder; +HSPLcom/google/crypto/tink/aead/AesGcmParameters$Builder;->setTagSizeBytes(I)Lcom/google/crypto/tink/aead/AesGcmParameters$Builder; +HSPLcom/google/crypto/tink/aead/AesGcmParameters$Builder;->setVariant(Lcom/google/crypto/tink/aead/AesGcmParameters$Variant;)Lcom/google/crypto/tink/aead/AesGcmParameters$Builder; +Lcom/google/crypto/tink/aead/AesGcmParameters$Variant; +HSPLcom/google/crypto/tink/aead/AesGcmParameters$Variant;->()V +HSPLcom/google/crypto/tink/aead/AesGcmParameters$Variant;->(Ljava/lang/String;)V +Lcom/google/crypto/tink/aead/AesGcmProtoSerialization; +HSPLcom/google/crypto/tink/aead/AesGcmProtoSerialization;->$r8$lambda$RUN6s-jYME9EdLASXNpQ12CSlHc(Lcom/google/crypto/tink/internal/ProtoKeySerialization;Lcom/google/crypto/tink/SecretKeyAccess;)Lcom/google/crypto/tink/aead/AesGcmKey; +HSPLcom/google/crypto/tink/aead/AesGcmProtoSerialization;->()V +HSPLcom/google/crypto/tink/aead/AesGcmProtoSerialization;->parseKey(Lcom/google/crypto/tink/internal/ProtoKeySerialization;Lcom/google/crypto/tink/SecretKeyAccess;)Lcom/google/crypto/tink/aead/AesGcmKey; +HSPLcom/google/crypto/tink/aead/AesGcmProtoSerialization;->register()V +HSPLcom/google/crypto/tink/aead/AesGcmProtoSerialization;->register(Lcom/google/crypto/tink/internal/MutableSerializationRegistry;)V +HSPLcom/google/crypto/tink/aead/AesGcmProtoSerialization;->toVariant(Lcom/google/crypto/tink/proto/OutputPrefixType;)Lcom/google/crypto/tink/aead/AesGcmParameters$Variant; +Lcom/google/crypto/tink/aead/AesGcmProtoSerialization$$ExternalSyntheticLambda0; +HSPLcom/google/crypto/tink/aead/AesGcmProtoSerialization$$ExternalSyntheticLambda0;->()V +Lcom/google/crypto/tink/aead/AesGcmProtoSerialization$$ExternalSyntheticLambda1; +HSPLcom/google/crypto/tink/aead/AesGcmProtoSerialization$$ExternalSyntheticLambda1;->()V +Lcom/google/crypto/tink/aead/AesGcmProtoSerialization$$ExternalSyntheticLambda2; +HSPLcom/google/crypto/tink/aead/AesGcmProtoSerialization$$ExternalSyntheticLambda2;->()V +Lcom/google/crypto/tink/aead/AesGcmProtoSerialization$$ExternalSyntheticLambda3; +HSPLcom/google/crypto/tink/aead/AesGcmProtoSerialization$$ExternalSyntheticLambda3;->()V +HSPLcom/google/crypto/tink/aead/AesGcmProtoSerialization$$ExternalSyntheticLambda3;->parseKey(Lcom/google/crypto/tink/internal/Serialization;Lcom/google/crypto/tink/SecretKeyAccess;)Lcom/google/crypto/tink/Key; +Lcom/google/crypto/tink/aead/AesGcmProtoSerialization$1; +HSPLcom/google/crypto/tink/aead/AesGcmProtoSerialization$1;->()V +Lcom/google/crypto/tink/aead/AesGcmSivKey; +Lcom/google/crypto/tink/aead/AesGcmSivKeyManager; +HSPLcom/google/crypto/tink/aead/AesGcmSivKeyManager;->()V +HSPLcom/google/crypto/tink/aead/AesGcmSivKeyManager;->access$000(ILcom/google/crypto/tink/KeyTemplate$OutputPrefixType;)Lcom/google/crypto/tink/internal/KeyTypeManager$KeyFactory$KeyFormat; +HSPLcom/google/crypto/tink/aead/AesGcmSivKeyManager;->canUseAesGcmSive()Z +HSPLcom/google/crypto/tink/aead/AesGcmSivKeyManager;->createKeyFormat(ILcom/google/crypto/tink/KeyTemplate$OutputPrefixType;)Lcom/google/crypto/tink/internal/KeyTypeManager$KeyFactory$KeyFormat; +HSPLcom/google/crypto/tink/aead/AesGcmSivKeyManager;->getKeyType()Ljava/lang/String; +HSPLcom/google/crypto/tink/aead/AesGcmSivKeyManager;->keyFactory()Lcom/google/crypto/tink/internal/KeyTypeManager$KeyFactory; +HSPLcom/google/crypto/tink/aead/AesGcmSivKeyManager;->register(Z)V +Lcom/google/crypto/tink/aead/AesGcmSivKeyManager$1; +HSPLcom/google/crypto/tink/aead/AesGcmSivKeyManager$1;->(Ljava/lang/Class;)V +Lcom/google/crypto/tink/aead/AesGcmSivKeyManager$2; +HSPLcom/google/crypto/tink/aead/AesGcmSivKeyManager$2;->(Lcom/google/crypto/tink/aead/AesGcmSivKeyManager;Ljava/lang/Class;)V +HSPLcom/google/crypto/tink/aead/AesGcmSivKeyManager$2;->keyFormats()Ljava/util/Map; +Lcom/google/crypto/tink/aead/AesGcmSivParameters; +Lcom/google/crypto/tink/aead/AesGcmSivProtoSerialization; +HSPLcom/google/crypto/tink/aead/AesGcmSivProtoSerialization;->()V +HSPLcom/google/crypto/tink/aead/AesGcmSivProtoSerialization;->register()V +HSPLcom/google/crypto/tink/aead/AesGcmSivProtoSerialization;->register(Lcom/google/crypto/tink/internal/MutableSerializationRegistry;)V +Lcom/google/crypto/tink/aead/AesGcmSivProtoSerialization$$ExternalSyntheticLambda0; +HSPLcom/google/crypto/tink/aead/AesGcmSivProtoSerialization$$ExternalSyntheticLambda0;->()V +Lcom/google/crypto/tink/aead/AesGcmSivProtoSerialization$$ExternalSyntheticLambda1; +HSPLcom/google/crypto/tink/aead/AesGcmSivProtoSerialization$$ExternalSyntheticLambda1;->()V +Lcom/google/crypto/tink/aead/AesGcmSivProtoSerialization$$ExternalSyntheticLambda2; +HSPLcom/google/crypto/tink/aead/AesGcmSivProtoSerialization$$ExternalSyntheticLambda2;->()V +Lcom/google/crypto/tink/aead/AesGcmSivProtoSerialization$$ExternalSyntheticLambda3; +HSPLcom/google/crypto/tink/aead/AesGcmSivProtoSerialization$$ExternalSyntheticLambda3;->()V +Lcom/google/crypto/tink/aead/ChaCha20Poly1305Key; +Lcom/google/crypto/tink/aead/ChaCha20Poly1305KeyManager; +HSPLcom/google/crypto/tink/aead/ChaCha20Poly1305KeyManager;->()V +HSPLcom/google/crypto/tink/aead/ChaCha20Poly1305KeyManager;->getKeyType()Ljava/lang/String; +HSPLcom/google/crypto/tink/aead/ChaCha20Poly1305KeyManager;->keyFactory()Lcom/google/crypto/tink/internal/KeyTypeManager$KeyFactory; +HSPLcom/google/crypto/tink/aead/ChaCha20Poly1305KeyManager;->register(Z)V +Lcom/google/crypto/tink/aead/ChaCha20Poly1305KeyManager$1; +HSPLcom/google/crypto/tink/aead/ChaCha20Poly1305KeyManager$1;->(Ljava/lang/Class;)V +Lcom/google/crypto/tink/aead/ChaCha20Poly1305KeyManager$2; +HSPLcom/google/crypto/tink/aead/ChaCha20Poly1305KeyManager$2;->(Lcom/google/crypto/tink/aead/ChaCha20Poly1305KeyManager;Ljava/lang/Class;)V +HSPLcom/google/crypto/tink/aead/ChaCha20Poly1305KeyManager$2;->keyFormats()Ljava/util/Map; +Lcom/google/crypto/tink/aead/ChaCha20Poly1305Parameters; +Lcom/google/crypto/tink/aead/ChaCha20Poly1305ProtoSerialization; +HSPLcom/google/crypto/tink/aead/ChaCha20Poly1305ProtoSerialization;->()V +HSPLcom/google/crypto/tink/aead/ChaCha20Poly1305ProtoSerialization;->register()V +HSPLcom/google/crypto/tink/aead/ChaCha20Poly1305ProtoSerialization;->register(Lcom/google/crypto/tink/internal/MutableSerializationRegistry;)V +Lcom/google/crypto/tink/aead/ChaCha20Poly1305ProtoSerialization$$ExternalSyntheticLambda0; +HSPLcom/google/crypto/tink/aead/ChaCha20Poly1305ProtoSerialization$$ExternalSyntheticLambda0;->()V +Lcom/google/crypto/tink/aead/ChaCha20Poly1305ProtoSerialization$$ExternalSyntheticLambda1; +HSPLcom/google/crypto/tink/aead/ChaCha20Poly1305ProtoSerialization$$ExternalSyntheticLambda1;->()V +Lcom/google/crypto/tink/aead/ChaCha20Poly1305ProtoSerialization$$ExternalSyntheticLambda2; +HSPLcom/google/crypto/tink/aead/ChaCha20Poly1305ProtoSerialization$$ExternalSyntheticLambda2;->()V +Lcom/google/crypto/tink/aead/ChaCha20Poly1305ProtoSerialization$$ExternalSyntheticLambda3; +HSPLcom/google/crypto/tink/aead/ChaCha20Poly1305ProtoSerialization$$ExternalSyntheticLambda3;->()V +Lcom/google/crypto/tink/aead/KmsAeadKeyManager; +HSPLcom/google/crypto/tink/aead/KmsAeadKeyManager;->()V +HSPLcom/google/crypto/tink/aead/KmsAeadKeyManager;->getKeyType()Ljava/lang/String; +HSPLcom/google/crypto/tink/aead/KmsAeadKeyManager;->keyFactory()Lcom/google/crypto/tink/internal/KeyTypeManager$KeyFactory; +HSPLcom/google/crypto/tink/aead/KmsAeadKeyManager;->register(Z)V +Lcom/google/crypto/tink/aead/KmsAeadKeyManager$1; +HSPLcom/google/crypto/tink/aead/KmsAeadKeyManager$1;->(Ljava/lang/Class;)V +Lcom/google/crypto/tink/aead/KmsAeadKeyManager$2; +HSPLcom/google/crypto/tink/aead/KmsAeadKeyManager$2;->(Lcom/google/crypto/tink/aead/KmsAeadKeyManager;Ljava/lang/Class;)V +Lcom/google/crypto/tink/aead/KmsEnvelopeAeadKeyManager; +HSPLcom/google/crypto/tink/aead/KmsEnvelopeAeadKeyManager;->()V +HSPLcom/google/crypto/tink/aead/KmsEnvelopeAeadKeyManager;->getKeyType()Ljava/lang/String; +HSPLcom/google/crypto/tink/aead/KmsEnvelopeAeadKeyManager;->keyFactory()Lcom/google/crypto/tink/internal/KeyTypeManager$KeyFactory; +HSPLcom/google/crypto/tink/aead/KmsEnvelopeAeadKeyManager;->register(Z)V +Lcom/google/crypto/tink/aead/KmsEnvelopeAeadKeyManager$1; +HSPLcom/google/crypto/tink/aead/KmsEnvelopeAeadKeyManager$1;->(Ljava/lang/Class;)V +Lcom/google/crypto/tink/aead/KmsEnvelopeAeadKeyManager$2; +HSPLcom/google/crypto/tink/aead/KmsEnvelopeAeadKeyManager$2;->(Lcom/google/crypto/tink/aead/KmsEnvelopeAeadKeyManager;Ljava/lang/Class;)V +Lcom/google/crypto/tink/aead/XChaCha20Poly1305Key; +Lcom/google/crypto/tink/aead/XChaCha20Poly1305KeyManager; +HSPLcom/google/crypto/tink/aead/XChaCha20Poly1305KeyManager;->()V +HSPLcom/google/crypto/tink/aead/XChaCha20Poly1305KeyManager;->getKeyType()Ljava/lang/String; +HSPLcom/google/crypto/tink/aead/XChaCha20Poly1305KeyManager;->keyFactory()Lcom/google/crypto/tink/internal/KeyTypeManager$KeyFactory; +HSPLcom/google/crypto/tink/aead/XChaCha20Poly1305KeyManager;->register(Z)V +Lcom/google/crypto/tink/aead/XChaCha20Poly1305KeyManager$1; +HSPLcom/google/crypto/tink/aead/XChaCha20Poly1305KeyManager$1;->(Ljava/lang/Class;)V +Lcom/google/crypto/tink/aead/XChaCha20Poly1305KeyManager$2; +HSPLcom/google/crypto/tink/aead/XChaCha20Poly1305KeyManager$2;->(Lcom/google/crypto/tink/aead/XChaCha20Poly1305KeyManager;Ljava/lang/Class;)V +HSPLcom/google/crypto/tink/aead/XChaCha20Poly1305KeyManager$2;->keyFormats()Ljava/util/Map; +Lcom/google/crypto/tink/aead/XChaCha20Poly1305Parameters; +Lcom/google/crypto/tink/aead/XChaCha20Poly1305ProtoSerialization; +HSPLcom/google/crypto/tink/aead/XChaCha20Poly1305ProtoSerialization;->()V +HSPLcom/google/crypto/tink/aead/XChaCha20Poly1305ProtoSerialization;->register()V +HSPLcom/google/crypto/tink/aead/XChaCha20Poly1305ProtoSerialization;->register(Lcom/google/crypto/tink/internal/MutableSerializationRegistry;)V +Lcom/google/crypto/tink/aead/XChaCha20Poly1305ProtoSerialization$$ExternalSyntheticLambda0; +HSPLcom/google/crypto/tink/aead/XChaCha20Poly1305ProtoSerialization$$ExternalSyntheticLambda0;->()V +Lcom/google/crypto/tink/aead/XChaCha20Poly1305ProtoSerialization$$ExternalSyntheticLambda1; +HSPLcom/google/crypto/tink/aead/XChaCha20Poly1305ProtoSerialization$$ExternalSyntheticLambda1;->()V +Lcom/google/crypto/tink/aead/XChaCha20Poly1305ProtoSerialization$$ExternalSyntheticLambda2; +HSPLcom/google/crypto/tink/aead/XChaCha20Poly1305ProtoSerialization$$ExternalSyntheticLambda2;->()V +Lcom/google/crypto/tink/aead/XChaCha20Poly1305ProtoSerialization$$ExternalSyntheticLambda3; +HSPLcom/google/crypto/tink/aead/XChaCha20Poly1305ProtoSerialization$$ExternalSyntheticLambda3;->()V +Lcom/google/crypto/tink/aead/internal/InsecureNonceAesGcmJce; +HSPLcom/google/crypto/tink/aead/internal/InsecureNonceAesGcmJce;->()V +HSPLcom/google/crypto/tink/aead/internal/InsecureNonceAesGcmJce;->([BZ)V +HSPLcom/google/crypto/tink/aead/internal/InsecureNonceAesGcmJce;->decrypt([B[B[B)[B +HSPLcom/google/crypto/tink/aead/internal/InsecureNonceAesGcmJce;->encrypt([B[B[B)[B +HSPLcom/google/crypto/tink/aead/internal/InsecureNonceAesGcmJce;->getParams([B)Ljava/security/spec/AlgorithmParameterSpec; +HSPLcom/google/crypto/tink/aead/internal/InsecureNonceAesGcmJce;->getParams([BII)Ljava/security/spec/AlgorithmParameterSpec; +Lcom/google/crypto/tink/aead/internal/InsecureNonceAesGcmJce$1; +HSPLcom/google/crypto/tink/aead/internal/InsecureNonceAesGcmJce$1;->()V +HSPLcom/google/crypto/tink/aead/internal/InsecureNonceAesGcmJce$1;->initialValue()Ljava/lang/Object; +HSPLcom/google/crypto/tink/aead/internal/InsecureNonceAesGcmJce$1;->initialValue()Ljavax/crypto/Cipher; +Lcom/google/crypto/tink/config/TinkFips; +HSPLcom/google/crypto/tink/config/TinkFips;->useOnlyFips()Z +Lcom/google/crypto/tink/config/internal/TinkFipsStatus; +HSPLcom/google/crypto/tink/config/internal/TinkFipsStatus;->useOnlyFips()Z +Lcom/google/crypto/tink/config/internal/TinkFipsUtil; +HSPLcom/google/crypto/tink/config/internal/TinkFipsUtil;->()V +HSPLcom/google/crypto/tink/config/internal/TinkFipsUtil;->useOnlyFips()Z +Lcom/google/crypto/tink/config/internal/TinkFipsUtil$AlgorithmFipsCompatibility; +HSPLcom/google/crypto/tink/config/internal/TinkFipsUtil$AlgorithmFipsCompatibility;->()V +HSPLcom/google/crypto/tink/config/internal/TinkFipsUtil$AlgorithmFipsCompatibility;->(Ljava/lang/String;I)V +HSPLcom/google/crypto/tink/config/internal/TinkFipsUtil$AlgorithmFipsCompatibility;->(Ljava/lang/String;ILcom/google/crypto/tink/config/internal/TinkFipsUtil$1;)V +Lcom/google/crypto/tink/config/internal/TinkFipsUtil$AlgorithmFipsCompatibility$1; +HSPLcom/google/crypto/tink/config/internal/TinkFipsUtil$AlgorithmFipsCompatibility$1;->(Ljava/lang/String;I)V +HSPLcom/google/crypto/tink/config/internal/TinkFipsUtil$AlgorithmFipsCompatibility$1;->isCompatible()Z +Lcom/google/crypto/tink/config/internal/TinkFipsUtil$AlgorithmFipsCompatibility$2; +HSPLcom/google/crypto/tink/config/internal/TinkFipsUtil$AlgorithmFipsCompatibility$2;->(Ljava/lang/String;I)V +HSPLcom/google/crypto/tink/config/internal/TinkFipsUtil$AlgorithmFipsCompatibility$2;->isCompatible()Z +Lcom/google/crypto/tink/daead/AesSivKeyManager; +HSPLcom/google/crypto/tink/daead/AesSivKeyManager;->()V +HSPLcom/google/crypto/tink/daead/AesSivKeyManager;->getKeyType()Ljava/lang/String; +HSPLcom/google/crypto/tink/daead/AesSivKeyManager;->getVersion()I +HSPLcom/google/crypto/tink/daead/AesSivKeyManager;->keyFactory()Lcom/google/crypto/tink/internal/KeyTypeManager$KeyFactory; +HSPLcom/google/crypto/tink/daead/AesSivKeyManager;->keyMaterialType()Lcom/google/crypto/tink/proto/KeyData$KeyMaterialType; +HSPLcom/google/crypto/tink/daead/AesSivKeyManager;->parseKey(Lcom/google/crypto/tink/shaded/protobuf/ByteString;)Lcom/google/crypto/tink/proto/AesSivKey; +HSPLcom/google/crypto/tink/daead/AesSivKeyManager;->parseKey(Lcom/google/crypto/tink/shaded/protobuf/ByteString;)Lcom/google/crypto/tink/shaded/protobuf/MessageLite; +HSPLcom/google/crypto/tink/daead/AesSivKeyManager;->register(Z)V +HSPLcom/google/crypto/tink/daead/AesSivKeyManager;->validateKey(Lcom/google/crypto/tink/proto/AesSivKey;)V +HSPLcom/google/crypto/tink/daead/AesSivKeyManager;->validateKey(Lcom/google/crypto/tink/shaded/protobuf/MessageLite;)V +Lcom/google/crypto/tink/daead/AesSivKeyManager$1; +HSPLcom/google/crypto/tink/daead/AesSivKeyManager$1;->(Ljava/lang/Class;)V +HSPLcom/google/crypto/tink/daead/AesSivKeyManager$1;->getPrimitive(Lcom/google/crypto/tink/proto/AesSivKey;)Lcom/google/crypto/tink/DeterministicAead; +HSPLcom/google/crypto/tink/daead/AesSivKeyManager$1;->getPrimitive(Lcom/google/crypto/tink/shaded/protobuf/MessageLite;)Ljava/lang/Object; +Lcom/google/crypto/tink/daead/AesSivKeyManager$2; +HSPLcom/google/crypto/tink/daead/AesSivKeyManager$2;->(Lcom/google/crypto/tink/daead/AesSivKeyManager;Ljava/lang/Class;)V +HSPLcom/google/crypto/tink/daead/AesSivKeyManager$2;->createKey(Lcom/google/crypto/tink/proto/AesSivKeyFormat;)Lcom/google/crypto/tink/proto/AesSivKey; +HSPLcom/google/crypto/tink/daead/AesSivKeyManager$2;->createKey(Lcom/google/crypto/tink/shaded/protobuf/MessageLite;)Lcom/google/crypto/tink/shaded/protobuf/MessageLite; +HSPLcom/google/crypto/tink/daead/AesSivKeyManager$2;->keyFormats()Ljava/util/Map; +HSPLcom/google/crypto/tink/daead/AesSivKeyManager$2;->parseKeyFormat(Lcom/google/crypto/tink/shaded/protobuf/ByteString;)Lcom/google/crypto/tink/proto/AesSivKeyFormat; +HSPLcom/google/crypto/tink/daead/AesSivKeyManager$2;->parseKeyFormat(Lcom/google/crypto/tink/shaded/protobuf/ByteString;)Lcom/google/crypto/tink/shaded/protobuf/MessageLite; +HSPLcom/google/crypto/tink/daead/AesSivKeyManager$2;->validateKeyFormat(Lcom/google/crypto/tink/proto/AesSivKeyFormat;)V +HSPLcom/google/crypto/tink/daead/AesSivKeyManager$2;->validateKeyFormat(Lcom/google/crypto/tink/shaded/protobuf/MessageLite;)V +Lcom/google/crypto/tink/daead/DeterministicAeadConfig; +HSPLcom/google/crypto/tink/daead/DeterministicAeadConfig;->()V +HSPLcom/google/crypto/tink/daead/DeterministicAeadConfig;->register()V +Lcom/google/crypto/tink/daead/DeterministicAeadWrapper; +HSPLcom/google/crypto/tink/daead/DeterministicAeadWrapper;->()V +HSPLcom/google/crypto/tink/daead/DeterministicAeadWrapper;->()V +HSPLcom/google/crypto/tink/daead/DeterministicAeadWrapper;->getInputPrimitiveClass()Ljava/lang/Class; +HSPLcom/google/crypto/tink/daead/DeterministicAeadWrapper;->getPrimitiveClass()Ljava/lang/Class; +HSPLcom/google/crypto/tink/daead/DeterministicAeadWrapper;->register()V +HSPLcom/google/crypto/tink/daead/DeterministicAeadWrapper;->wrap(Lcom/google/crypto/tink/PrimitiveSet;)Lcom/google/crypto/tink/DeterministicAead; +HSPLcom/google/crypto/tink/daead/DeterministicAeadWrapper;->wrap(Lcom/google/crypto/tink/PrimitiveSet;)Ljava/lang/Object; +Lcom/google/crypto/tink/daead/DeterministicAeadWrapper$WrappedDeterministicAead; +HSPLcom/google/crypto/tink/daead/DeterministicAeadWrapper$WrappedDeterministicAead;->(Lcom/google/crypto/tink/PrimitiveSet;)V +HSPLcom/google/crypto/tink/daead/DeterministicAeadWrapper$WrappedDeterministicAead;->encryptDeterministically([B[B)[B +Lcom/google/crypto/tink/integration/android/AndroidKeysetManager; +HSPLcom/google/crypto/tink/integration/android/AndroidKeysetManager;->()V +HSPLcom/google/crypto/tink/integration/android/AndroidKeysetManager;->(Lcom/google/crypto/tink/integration/android/AndroidKeysetManager$Builder;)V +HSPLcom/google/crypto/tink/integration/android/AndroidKeysetManager;->(Lcom/google/crypto/tink/integration/android/AndroidKeysetManager$Builder;Lcom/google/crypto/tink/integration/android/AndroidKeysetManager$1;)V +HSPLcom/google/crypto/tink/integration/android/AndroidKeysetManager;->access$600()Ljava/lang/Object; +HSPLcom/google/crypto/tink/integration/android/AndroidKeysetManager;->access$700()Z +HSPLcom/google/crypto/tink/integration/android/AndroidKeysetManager;->getKeysetHandle()Lcom/google/crypto/tink/KeysetHandle; +HSPLcom/google/crypto/tink/integration/android/AndroidKeysetManager;->isAtLeastM()Z +Lcom/google/crypto/tink/integration/android/AndroidKeysetManager$Builder; +HSPLcom/google/crypto/tink/integration/android/AndroidKeysetManager$Builder;->()V +HSPLcom/google/crypto/tink/integration/android/AndroidKeysetManager$Builder;->access$000(Lcom/google/crypto/tink/integration/android/AndroidKeysetManager$Builder;)Landroid/content/Context; +HSPLcom/google/crypto/tink/integration/android/AndroidKeysetManager$Builder;->access$100(Lcom/google/crypto/tink/integration/android/AndroidKeysetManager$Builder;)Ljava/lang/String; +HSPLcom/google/crypto/tink/integration/android/AndroidKeysetManager$Builder;->access$200(Lcom/google/crypto/tink/integration/android/AndroidKeysetManager$Builder;)Ljava/lang/String; +HSPLcom/google/crypto/tink/integration/android/AndroidKeysetManager$Builder;->access$300(Lcom/google/crypto/tink/integration/android/AndroidKeysetManager$Builder;)Lcom/google/crypto/tink/Aead; +HSPLcom/google/crypto/tink/integration/android/AndroidKeysetManager$Builder;->access$400(Lcom/google/crypto/tink/integration/android/AndroidKeysetManager$Builder;)Lcom/google/crypto/tink/KeysetManager; +HSPLcom/google/crypto/tink/integration/android/AndroidKeysetManager$Builder;->build()Lcom/google/crypto/tink/integration/android/AndroidKeysetManager; +HSPLcom/google/crypto/tink/integration/android/AndroidKeysetManager$Builder;->generateKeysetAndWriteToPrefs()Lcom/google/crypto/tink/KeysetManager; +HSPLcom/google/crypto/tink/integration/android/AndroidKeysetManager$Builder;->readKeysetFromPrefs(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;)[B +HSPLcom/google/crypto/tink/integration/android/AndroidKeysetManager$Builder;->readMasterkeyDecryptAndParseKeyset([B)Lcom/google/crypto/tink/KeysetManager; +HSPLcom/google/crypto/tink/integration/android/AndroidKeysetManager$Builder;->readOrGenerateNewMasterKey()Lcom/google/crypto/tink/Aead; +HSPLcom/google/crypto/tink/integration/android/AndroidKeysetManager$Builder;->withKeyTemplate(Lcom/google/crypto/tink/KeyTemplate;)Lcom/google/crypto/tink/integration/android/AndroidKeysetManager$Builder; +HSPLcom/google/crypto/tink/integration/android/AndroidKeysetManager$Builder;->withMasterKeyUri(Ljava/lang/String;)Lcom/google/crypto/tink/integration/android/AndroidKeysetManager$Builder; +HSPLcom/google/crypto/tink/integration/android/AndroidKeysetManager$Builder;->withSharedPref(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;)Lcom/google/crypto/tink/integration/android/AndroidKeysetManager$Builder; +Lcom/google/crypto/tink/integration/android/AndroidKeystoreAesGcm; +HSPLcom/google/crypto/tink/integration/android/AndroidKeystoreAesGcm;->()V +HSPLcom/google/crypto/tink/integration/android/AndroidKeystoreAesGcm;->(Ljava/lang/String;Ljava/security/KeyStore;)V +HSPLcom/google/crypto/tink/integration/android/AndroidKeystoreAesGcm;->decrypt([B[B)[B +HSPLcom/google/crypto/tink/integration/android/AndroidKeystoreAesGcm;->decryptInternal([B[B)[B +HSPLcom/google/crypto/tink/integration/android/AndroidKeystoreAesGcm;->encrypt([B[B)[B +HSPLcom/google/crypto/tink/integration/android/AndroidKeystoreAesGcm;->encryptInternal([B[B)[B +Lcom/google/crypto/tink/integration/android/AndroidKeystoreKmsClient; +HSPLcom/google/crypto/tink/integration/android/AndroidKeystoreKmsClient;->()V +HSPLcom/google/crypto/tink/integration/android/AndroidKeystoreKmsClient;->()V +HSPLcom/google/crypto/tink/integration/android/AndroidKeystoreKmsClient;->(Lcom/google/crypto/tink/integration/android/AndroidKeystoreKmsClient$Builder;)V +HSPLcom/google/crypto/tink/integration/android/AndroidKeystoreKmsClient;->access$000()Z +HSPLcom/google/crypto/tink/integration/android/AndroidKeystoreKmsClient;->generateKeyIfNotExist(Ljava/lang/String;)Z +HSPLcom/google/crypto/tink/integration/android/AndroidKeystoreKmsClient;->getAead(Ljava/lang/String;)Lcom/google/crypto/tink/Aead; +HSPLcom/google/crypto/tink/integration/android/AndroidKeystoreKmsClient;->hasKey(Ljava/lang/String;)Z +HSPLcom/google/crypto/tink/integration/android/AndroidKeystoreKmsClient;->isAtLeastM()Z +HSPLcom/google/crypto/tink/integration/android/AndroidKeystoreKmsClient;->validateAead(Lcom/google/crypto/tink/Aead;)Lcom/google/crypto/tink/Aead; +Lcom/google/crypto/tink/integration/android/AndroidKeystoreKmsClient$Builder; +HSPLcom/google/crypto/tink/integration/android/AndroidKeystoreKmsClient$Builder;->()V +Lcom/google/crypto/tink/integration/android/SharedPrefKeysetWriter; +HSPLcom/google/crypto/tink/integration/android/SharedPrefKeysetWriter;->(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;)V +HSPLcom/google/crypto/tink/integration/android/SharedPrefKeysetWriter;->write(Lcom/google/crypto/tink/proto/EncryptedKeyset;)V +Lcom/google/crypto/tink/internal/BuildDispatchedCode; +HSPLcom/google/crypto/tink/internal/BuildDispatchedCode;->getApiLevel()Ljava/lang/Integer; +Lcom/google/crypto/tink/internal/KeyParser; +HSPLcom/google/crypto/tink/internal/KeyParser;->(Lcom/google/crypto/tink/util/Bytes;Ljava/lang/Class;)V +HSPLcom/google/crypto/tink/internal/KeyParser;->(Lcom/google/crypto/tink/util/Bytes;Ljava/lang/Class;Lcom/google/crypto/tink/internal/KeyParser$1;)V +HSPLcom/google/crypto/tink/internal/KeyParser;->create(Lcom/google/crypto/tink/internal/KeyParser$KeyParsingFunction;Lcom/google/crypto/tink/util/Bytes;Ljava/lang/Class;)Lcom/google/crypto/tink/internal/KeyParser; +HSPLcom/google/crypto/tink/internal/KeyParser;->getObjectIdentifier()Lcom/google/crypto/tink/util/Bytes; +HSPLcom/google/crypto/tink/internal/KeyParser;->getSerializationClass()Ljava/lang/Class; +Lcom/google/crypto/tink/internal/KeyParser$1; +HSPLcom/google/crypto/tink/internal/KeyParser$1;->(Lcom/google/crypto/tink/util/Bytes;Ljava/lang/Class;Lcom/google/crypto/tink/internal/KeyParser$KeyParsingFunction;)V +HSPLcom/google/crypto/tink/internal/KeyParser$1;->parseKey(Lcom/google/crypto/tink/internal/Serialization;Lcom/google/crypto/tink/SecretKeyAccess;)Lcom/google/crypto/tink/Key; +Lcom/google/crypto/tink/internal/KeyParser$KeyParsingFunction; +Lcom/google/crypto/tink/internal/KeySerializer; +HSPLcom/google/crypto/tink/internal/KeySerializer;->(Ljava/lang/Class;Ljava/lang/Class;)V +HSPLcom/google/crypto/tink/internal/KeySerializer;->(Ljava/lang/Class;Ljava/lang/Class;Lcom/google/crypto/tink/internal/KeySerializer$1;)V +HSPLcom/google/crypto/tink/internal/KeySerializer;->create(Lcom/google/crypto/tink/internal/KeySerializer$KeySerializationFunction;Ljava/lang/Class;Ljava/lang/Class;)Lcom/google/crypto/tink/internal/KeySerializer; +HSPLcom/google/crypto/tink/internal/KeySerializer;->getKeyClass()Ljava/lang/Class; +HSPLcom/google/crypto/tink/internal/KeySerializer;->getSerializationClass()Ljava/lang/Class; +Lcom/google/crypto/tink/internal/KeySerializer$1; +HSPLcom/google/crypto/tink/internal/KeySerializer$1;->(Ljava/lang/Class;Ljava/lang/Class;Lcom/google/crypto/tink/internal/KeySerializer$KeySerializationFunction;)V +Lcom/google/crypto/tink/internal/KeySerializer$KeySerializationFunction; +Lcom/google/crypto/tink/internal/KeyTypeManager; +HSPLcom/google/crypto/tink/internal/KeyTypeManager;->(Ljava/lang/Class;[Lcom/google/crypto/tink/internal/PrimitiveFactory;)V +HSPLcom/google/crypto/tink/internal/KeyTypeManager;->fipsStatus()Lcom/google/crypto/tink/config/internal/TinkFipsUtil$AlgorithmFipsCompatibility; +HSPLcom/google/crypto/tink/internal/KeyTypeManager;->firstSupportedPrimitiveClass()Ljava/lang/Class; +HSPLcom/google/crypto/tink/internal/KeyTypeManager;->getPrimitive(Lcom/google/crypto/tink/shaded/protobuf/MessageLite;Ljava/lang/Class;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/internal/KeyTypeManager;->supportedPrimitives()Ljava/util/Set; +Lcom/google/crypto/tink/internal/KeyTypeManager$KeyFactory; +HSPLcom/google/crypto/tink/internal/KeyTypeManager$KeyFactory;->(Ljava/lang/Class;)V +HSPLcom/google/crypto/tink/internal/KeyTypeManager$KeyFactory;->keyFormats()Ljava/util/Map; +Lcom/google/crypto/tink/internal/KeyTypeManager$KeyFactory$KeyFormat; +HSPLcom/google/crypto/tink/internal/KeyTypeManager$KeyFactory$KeyFormat;->(Ljava/lang/Object;Lcom/google/crypto/tink/KeyTemplate$OutputPrefixType;)V +Lcom/google/crypto/tink/internal/LegacyProtoKey; +HSPLcom/google/crypto/tink/internal/LegacyProtoKey;->(Lcom/google/crypto/tink/internal/ProtoKeySerialization;Lcom/google/crypto/tink/SecretKeyAccess;)V +HSPLcom/google/crypto/tink/internal/LegacyProtoKey;->throwIfMissingAccess(Lcom/google/crypto/tink/internal/ProtoKeySerialization;Lcom/google/crypto/tink/SecretKeyAccess;)V +Lcom/google/crypto/tink/internal/LegacyProtoKey$1; +HSPLcom/google/crypto/tink/internal/LegacyProtoKey$1;->()V +Lcom/google/crypto/tink/internal/MonitoringUtil; +HSPLcom/google/crypto/tink/internal/MonitoringUtil;->()V +Lcom/google/crypto/tink/internal/MonitoringUtil$DoNothingLogger; +HSPLcom/google/crypto/tink/internal/MonitoringUtil$DoNothingLogger;->()V +HSPLcom/google/crypto/tink/internal/MonitoringUtil$DoNothingLogger;->(Lcom/google/crypto/tink/internal/MonitoringUtil$1;)V +HSPLcom/google/crypto/tink/internal/MonitoringUtil$DoNothingLogger;->log(IJ)V +Lcom/google/crypto/tink/internal/MutablePrimitiveRegistry; +HSPLcom/google/crypto/tink/internal/MutablePrimitiveRegistry;->()V +HSPLcom/google/crypto/tink/internal/MutablePrimitiveRegistry;->()V +HSPLcom/google/crypto/tink/internal/MutablePrimitiveRegistry;->getInputPrimitiveClass(Ljava/lang/Class;)Ljava/lang/Class; +HSPLcom/google/crypto/tink/internal/MutablePrimitiveRegistry;->getPrimitive(Lcom/google/crypto/tink/Key;Ljava/lang/Class;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/internal/MutablePrimitiveRegistry;->globalInstance()Lcom/google/crypto/tink/internal/MutablePrimitiveRegistry; +HSPLcom/google/crypto/tink/internal/MutablePrimitiveRegistry;->registerPrimitiveConstructor(Lcom/google/crypto/tink/internal/PrimitiveConstructor;)V +HSPLcom/google/crypto/tink/internal/MutablePrimitiveRegistry;->registerPrimitiveWrapper(Lcom/google/crypto/tink/PrimitiveWrapper;)V +HSPLcom/google/crypto/tink/internal/MutablePrimitiveRegistry;->wrap(Lcom/google/crypto/tink/PrimitiveSet;Ljava/lang/Class;)Ljava/lang/Object; +Lcom/google/crypto/tink/internal/MutableSerializationRegistry; +HSPLcom/google/crypto/tink/internal/MutableSerializationRegistry;->()V +HSPLcom/google/crypto/tink/internal/MutableSerializationRegistry;->()V +HSPLcom/google/crypto/tink/internal/MutableSerializationRegistry;->globalInstance()Lcom/google/crypto/tink/internal/MutableSerializationRegistry; +HSPLcom/google/crypto/tink/internal/MutableSerializationRegistry;->hasParserForKey(Lcom/google/crypto/tink/internal/Serialization;)Z +HSPLcom/google/crypto/tink/internal/MutableSerializationRegistry;->parseKey(Lcom/google/crypto/tink/internal/Serialization;Lcom/google/crypto/tink/SecretKeyAccess;)Lcom/google/crypto/tink/Key; +HSPLcom/google/crypto/tink/internal/MutableSerializationRegistry;->parseKeyWithLegacyFallback(Lcom/google/crypto/tink/internal/ProtoKeySerialization;Lcom/google/crypto/tink/SecretKeyAccess;)Lcom/google/crypto/tink/Key; +HSPLcom/google/crypto/tink/internal/MutableSerializationRegistry;->registerKeyParser(Lcom/google/crypto/tink/internal/KeyParser;)V +HSPLcom/google/crypto/tink/internal/MutableSerializationRegistry;->registerKeySerializer(Lcom/google/crypto/tink/internal/KeySerializer;)V +HSPLcom/google/crypto/tink/internal/MutableSerializationRegistry;->registerParametersParser(Lcom/google/crypto/tink/internal/ParametersParser;)V +HSPLcom/google/crypto/tink/internal/MutableSerializationRegistry;->registerParametersSerializer(Lcom/google/crypto/tink/internal/ParametersSerializer;)V +Lcom/google/crypto/tink/internal/ParametersParser; +HSPLcom/google/crypto/tink/internal/ParametersParser;->(Lcom/google/crypto/tink/util/Bytes;Ljava/lang/Class;)V +HSPLcom/google/crypto/tink/internal/ParametersParser;->(Lcom/google/crypto/tink/util/Bytes;Ljava/lang/Class;Lcom/google/crypto/tink/internal/ParametersParser$1;)V +HSPLcom/google/crypto/tink/internal/ParametersParser;->create(Lcom/google/crypto/tink/internal/ParametersParser$ParametersParsingFunction;Lcom/google/crypto/tink/util/Bytes;Ljava/lang/Class;)Lcom/google/crypto/tink/internal/ParametersParser; +HSPLcom/google/crypto/tink/internal/ParametersParser;->getObjectIdentifier()Lcom/google/crypto/tink/util/Bytes; +HSPLcom/google/crypto/tink/internal/ParametersParser;->getSerializationClass()Ljava/lang/Class; +Lcom/google/crypto/tink/internal/ParametersParser$1; +HSPLcom/google/crypto/tink/internal/ParametersParser$1;->(Lcom/google/crypto/tink/util/Bytes;Ljava/lang/Class;Lcom/google/crypto/tink/internal/ParametersParser$ParametersParsingFunction;)V +Lcom/google/crypto/tink/internal/ParametersParser$ParametersParsingFunction; +Lcom/google/crypto/tink/internal/ParametersSerializer; +HSPLcom/google/crypto/tink/internal/ParametersSerializer;->(Ljava/lang/Class;Ljava/lang/Class;)V +HSPLcom/google/crypto/tink/internal/ParametersSerializer;->(Ljava/lang/Class;Ljava/lang/Class;Lcom/google/crypto/tink/internal/ParametersSerializer$1;)V +HSPLcom/google/crypto/tink/internal/ParametersSerializer;->create(Lcom/google/crypto/tink/internal/ParametersSerializer$ParametersSerializationFunction;Ljava/lang/Class;Ljava/lang/Class;)Lcom/google/crypto/tink/internal/ParametersSerializer; +HSPLcom/google/crypto/tink/internal/ParametersSerializer;->getParametersClass()Ljava/lang/Class; +HSPLcom/google/crypto/tink/internal/ParametersSerializer;->getSerializationClass()Ljava/lang/Class; +Lcom/google/crypto/tink/internal/ParametersSerializer$1; +HSPLcom/google/crypto/tink/internal/ParametersSerializer$1;->(Ljava/lang/Class;Ljava/lang/Class;Lcom/google/crypto/tink/internal/ParametersSerializer$ParametersSerializationFunction;)V +Lcom/google/crypto/tink/internal/ParametersSerializer$ParametersSerializationFunction; +Lcom/google/crypto/tink/internal/PrimitiveConstructor; +HSPLcom/google/crypto/tink/internal/PrimitiveConstructor;->(Ljava/lang/Class;Ljava/lang/Class;)V +HSPLcom/google/crypto/tink/internal/PrimitiveConstructor;->(Ljava/lang/Class;Ljava/lang/Class;Lcom/google/crypto/tink/internal/PrimitiveConstructor$1;)V +HSPLcom/google/crypto/tink/internal/PrimitiveConstructor;->create(Lcom/google/crypto/tink/internal/PrimitiveConstructor$PrimitiveConstructionFunction;Ljava/lang/Class;Ljava/lang/Class;)Lcom/google/crypto/tink/internal/PrimitiveConstructor; +HSPLcom/google/crypto/tink/internal/PrimitiveConstructor;->getKeyClass()Ljava/lang/Class; +HSPLcom/google/crypto/tink/internal/PrimitiveConstructor;->getPrimitiveClass()Ljava/lang/Class; +Lcom/google/crypto/tink/internal/PrimitiveConstructor$1; +HSPLcom/google/crypto/tink/internal/PrimitiveConstructor$1;->(Ljava/lang/Class;Ljava/lang/Class;Lcom/google/crypto/tink/internal/PrimitiveConstructor$PrimitiveConstructionFunction;)V +Lcom/google/crypto/tink/internal/PrimitiveConstructor$PrimitiveConstructionFunction; +Lcom/google/crypto/tink/internal/PrimitiveFactory; +HSPLcom/google/crypto/tink/internal/PrimitiveFactory;->(Ljava/lang/Class;)V +HSPLcom/google/crypto/tink/internal/PrimitiveFactory;->getPrimitiveClass()Ljava/lang/Class; +Lcom/google/crypto/tink/internal/PrimitiveRegistry; +HSPLcom/google/crypto/tink/internal/PrimitiveRegistry;->(Lcom/google/crypto/tink/internal/PrimitiveRegistry$Builder;)V +HSPLcom/google/crypto/tink/internal/PrimitiveRegistry;->(Lcom/google/crypto/tink/internal/PrimitiveRegistry$Builder;Lcom/google/crypto/tink/internal/PrimitiveRegistry$1;)V +HSPLcom/google/crypto/tink/internal/PrimitiveRegistry;->access$000(Lcom/google/crypto/tink/internal/PrimitiveRegistry;)Ljava/util/Map; +HSPLcom/google/crypto/tink/internal/PrimitiveRegistry;->access$100(Lcom/google/crypto/tink/internal/PrimitiveRegistry;)Ljava/util/Map; +HSPLcom/google/crypto/tink/internal/PrimitiveRegistry;->getInputPrimitiveClass(Ljava/lang/Class;)Ljava/lang/Class; +HSPLcom/google/crypto/tink/internal/PrimitiveRegistry;->getPrimitive(Lcom/google/crypto/tink/Key;Ljava/lang/Class;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/internal/PrimitiveRegistry;->wrap(Lcom/google/crypto/tink/PrimitiveSet;Ljava/lang/Class;)Ljava/lang/Object; +Lcom/google/crypto/tink/internal/PrimitiveRegistry$Builder; +HSPLcom/google/crypto/tink/internal/PrimitiveRegistry$Builder;->()V +HSPLcom/google/crypto/tink/internal/PrimitiveRegistry$Builder;->(Lcom/google/crypto/tink/internal/PrimitiveRegistry;)V +HSPLcom/google/crypto/tink/internal/PrimitiveRegistry$Builder;->access$400(Lcom/google/crypto/tink/internal/PrimitiveRegistry$Builder;)Ljava/util/Map; +HSPLcom/google/crypto/tink/internal/PrimitiveRegistry$Builder;->access$500(Lcom/google/crypto/tink/internal/PrimitiveRegistry$Builder;)Ljava/util/Map; +HSPLcom/google/crypto/tink/internal/PrimitiveRegistry$Builder;->build()Lcom/google/crypto/tink/internal/PrimitiveRegistry; +HSPLcom/google/crypto/tink/internal/PrimitiveRegistry$Builder;->registerPrimitiveConstructor(Lcom/google/crypto/tink/internal/PrimitiveConstructor;)Lcom/google/crypto/tink/internal/PrimitiveRegistry$Builder; +HSPLcom/google/crypto/tink/internal/PrimitiveRegistry$Builder;->registerPrimitiveWrapper(Lcom/google/crypto/tink/PrimitiveWrapper;)Lcom/google/crypto/tink/internal/PrimitiveRegistry$Builder; +Lcom/google/crypto/tink/internal/PrimitiveRegistry$PrimitiveConstructorIndex; +HSPLcom/google/crypto/tink/internal/PrimitiveRegistry$PrimitiveConstructorIndex;->(Ljava/lang/Class;Ljava/lang/Class;)V +HSPLcom/google/crypto/tink/internal/PrimitiveRegistry$PrimitiveConstructorIndex;->(Ljava/lang/Class;Ljava/lang/Class;Lcom/google/crypto/tink/internal/PrimitiveRegistry$1;)V +HSPLcom/google/crypto/tink/internal/PrimitiveRegistry$PrimitiveConstructorIndex;->equals(Ljava/lang/Object;)Z +HSPLcom/google/crypto/tink/internal/PrimitiveRegistry$PrimitiveConstructorIndex;->hashCode()I +HSPLcom/google/crypto/tink/internal/PrimitiveRegistry$PrimitiveConstructorIndex;->toString()Ljava/lang/String; +Lcom/google/crypto/tink/internal/ProtoKeySerialization; +HSPLcom/google/crypto/tink/internal/ProtoKeySerialization;->(Ljava/lang/String;Lcom/google/crypto/tink/shaded/protobuf/ByteString;Lcom/google/crypto/tink/proto/KeyData$KeyMaterialType;Lcom/google/crypto/tink/proto/OutputPrefixType;Ljava/lang/Integer;)V +HSPLcom/google/crypto/tink/internal/ProtoKeySerialization;->create(Ljava/lang/String;Lcom/google/crypto/tink/shaded/protobuf/ByteString;Lcom/google/crypto/tink/proto/KeyData$KeyMaterialType;Lcom/google/crypto/tink/proto/OutputPrefixType;Ljava/lang/Integer;)Lcom/google/crypto/tink/internal/ProtoKeySerialization; +HSPLcom/google/crypto/tink/internal/ProtoKeySerialization;->getIdRequirementOrNull()Ljava/lang/Integer; +HSPLcom/google/crypto/tink/internal/ProtoKeySerialization;->getKeyMaterialType()Lcom/google/crypto/tink/proto/KeyData$KeyMaterialType; +HSPLcom/google/crypto/tink/internal/ProtoKeySerialization;->getObjectIdentifier()Lcom/google/crypto/tink/util/Bytes; +HSPLcom/google/crypto/tink/internal/ProtoKeySerialization;->getOutputPrefixType()Lcom/google/crypto/tink/proto/OutputPrefixType; +HSPLcom/google/crypto/tink/internal/ProtoKeySerialization;->getTypeUrl()Ljava/lang/String; +HSPLcom/google/crypto/tink/internal/ProtoKeySerialization;->getValue()Lcom/google/crypto/tink/shaded/protobuf/ByteString; +Lcom/google/crypto/tink/internal/ProtoParametersSerialization; +Lcom/google/crypto/tink/internal/Serialization; +Lcom/google/crypto/tink/internal/SerializationRegistry; +HSPLcom/google/crypto/tink/internal/SerializationRegistry;->(Lcom/google/crypto/tink/internal/SerializationRegistry$Builder;)V +HSPLcom/google/crypto/tink/internal/SerializationRegistry;->(Lcom/google/crypto/tink/internal/SerializationRegistry$Builder;Lcom/google/crypto/tink/internal/SerializationRegistry$1;)V +HSPLcom/google/crypto/tink/internal/SerializationRegistry;->access$000(Lcom/google/crypto/tink/internal/SerializationRegistry;)Ljava/util/Map; +HSPLcom/google/crypto/tink/internal/SerializationRegistry;->access$100(Lcom/google/crypto/tink/internal/SerializationRegistry;)Ljava/util/Map; +HSPLcom/google/crypto/tink/internal/SerializationRegistry;->access$200(Lcom/google/crypto/tink/internal/SerializationRegistry;)Ljava/util/Map; +HSPLcom/google/crypto/tink/internal/SerializationRegistry;->access$300(Lcom/google/crypto/tink/internal/SerializationRegistry;)Ljava/util/Map; +HSPLcom/google/crypto/tink/internal/SerializationRegistry;->hasParserForKey(Lcom/google/crypto/tink/internal/Serialization;)Z +HSPLcom/google/crypto/tink/internal/SerializationRegistry;->parseKey(Lcom/google/crypto/tink/internal/Serialization;Lcom/google/crypto/tink/SecretKeyAccess;)Lcom/google/crypto/tink/Key; +Lcom/google/crypto/tink/internal/SerializationRegistry$Builder; +HSPLcom/google/crypto/tink/internal/SerializationRegistry$Builder;->()V +HSPLcom/google/crypto/tink/internal/SerializationRegistry$Builder;->(Lcom/google/crypto/tink/internal/SerializationRegistry;)V +HSPLcom/google/crypto/tink/internal/SerializationRegistry$Builder;->access$1000(Lcom/google/crypto/tink/internal/SerializationRegistry$Builder;)Ljava/util/Map; +HSPLcom/google/crypto/tink/internal/SerializationRegistry$Builder;->access$700(Lcom/google/crypto/tink/internal/SerializationRegistry$Builder;)Ljava/util/Map; +HSPLcom/google/crypto/tink/internal/SerializationRegistry$Builder;->access$800(Lcom/google/crypto/tink/internal/SerializationRegistry$Builder;)Ljava/util/Map; +HSPLcom/google/crypto/tink/internal/SerializationRegistry$Builder;->access$900(Lcom/google/crypto/tink/internal/SerializationRegistry$Builder;)Ljava/util/Map; +HSPLcom/google/crypto/tink/internal/SerializationRegistry$Builder;->build()Lcom/google/crypto/tink/internal/SerializationRegistry; +HSPLcom/google/crypto/tink/internal/SerializationRegistry$Builder;->registerKeyParser(Lcom/google/crypto/tink/internal/KeyParser;)Lcom/google/crypto/tink/internal/SerializationRegistry$Builder; +HSPLcom/google/crypto/tink/internal/SerializationRegistry$Builder;->registerKeySerializer(Lcom/google/crypto/tink/internal/KeySerializer;)Lcom/google/crypto/tink/internal/SerializationRegistry$Builder; +HSPLcom/google/crypto/tink/internal/SerializationRegistry$Builder;->registerParametersParser(Lcom/google/crypto/tink/internal/ParametersParser;)Lcom/google/crypto/tink/internal/SerializationRegistry$Builder; +HSPLcom/google/crypto/tink/internal/SerializationRegistry$Builder;->registerParametersSerializer(Lcom/google/crypto/tink/internal/ParametersSerializer;)Lcom/google/crypto/tink/internal/SerializationRegistry$Builder; +Lcom/google/crypto/tink/internal/SerializationRegistry$ParserIndex; +HSPLcom/google/crypto/tink/internal/SerializationRegistry$ParserIndex;->(Ljava/lang/Class;Lcom/google/crypto/tink/util/Bytes;)V +HSPLcom/google/crypto/tink/internal/SerializationRegistry$ParserIndex;->(Ljava/lang/Class;Lcom/google/crypto/tink/util/Bytes;Lcom/google/crypto/tink/internal/SerializationRegistry$1;)V +HSPLcom/google/crypto/tink/internal/SerializationRegistry$ParserIndex;->equals(Ljava/lang/Object;)Z +HSPLcom/google/crypto/tink/internal/SerializationRegistry$ParserIndex;->hashCode()I +Lcom/google/crypto/tink/internal/SerializationRegistry$SerializerIndex; +HSPLcom/google/crypto/tink/internal/SerializationRegistry$SerializerIndex;->(Ljava/lang/Class;Ljava/lang/Class;)V +HSPLcom/google/crypto/tink/internal/SerializationRegistry$SerializerIndex;->(Ljava/lang/Class;Ljava/lang/Class;Lcom/google/crypto/tink/internal/SerializationRegistry$1;)V +HSPLcom/google/crypto/tink/internal/SerializationRegistry$SerializerIndex;->equals(Ljava/lang/Object;)Z +HSPLcom/google/crypto/tink/internal/SerializationRegistry$SerializerIndex;->hashCode()I +Lcom/google/crypto/tink/internal/Util; +HSPLcom/google/crypto/tink/internal/Util;->()V +HSPLcom/google/crypto/tink/internal/Util;->getAndroidApiLevel()Ljava/lang/Integer; +HSPLcom/google/crypto/tink/internal/Util;->isAndroid()Z +HSPLcom/google/crypto/tink/internal/Util;->randKeyId()I +HSPLcom/google/crypto/tink/internal/Util;->toByteFromPrintableAscii(C)B +HSPLcom/google/crypto/tink/internal/Util;->toBytesFromPrintableAscii(Ljava/lang/String;)Lcom/google/crypto/tink/util/Bytes; +Lcom/google/crypto/tink/mac/AesCmacKey; +Lcom/google/crypto/tink/mac/AesCmacKeyManager; +HSPLcom/google/crypto/tink/mac/AesCmacKeyManager;->()V +HSPLcom/google/crypto/tink/mac/AesCmacKeyManager;->()V +HSPLcom/google/crypto/tink/mac/AesCmacKeyManager;->getKeyType()Ljava/lang/String; +HSPLcom/google/crypto/tink/mac/AesCmacKeyManager;->keyFactory()Lcom/google/crypto/tink/internal/KeyTypeManager$KeyFactory; +HSPLcom/google/crypto/tink/mac/AesCmacKeyManager;->register(Z)V +Lcom/google/crypto/tink/mac/AesCmacKeyManager$$ExternalSyntheticLambda0; +HSPLcom/google/crypto/tink/mac/AesCmacKeyManager$$ExternalSyntheticLambda0;->()V +Lcom/google/crypto/tink/mac/AesCmacKeyManager$1; +HSPLcom/google/crypto/tink/mac/AesCmacKeyManager$1;->(Ljava/lang/Class;)V +Lcom/google/crypto/tink/mac/AesCmacKeyManager$2; +HSPLcom/google/crypto/tink/mac/AesCmacKeyManager$2;->(Lcom/google/crypto/tink/mac/AesCmacKeyManager;Ljava/lang/Class;)V +HSPLcom/google/crypto/tink/mac/AesCmacKeyManager$2;->keyFormats()Ljava/util/Map; +Lcom/google/crypto/tink/mac/AesCmacParameters; +Lcom/google/crypto/tink/mac/AesCmacProtoSerialization; +HSPLcom/google/crypto/tink/mac/AesCmacProtoSerialization;->()V +HSPLcom/google/crypto/tink/mac/AesCmacProtoSerialization;->register()V +HSPLcom/google/crypto/tink/mac/AesCmacProtoSerialization;->register(Lcom/google/crypto/tink/internal/MutableSerializationRegistry;)V +Lcom/google/crypto/tink/mac/AesCmacProtoSerialization$$ExternalSyntheticLambda0; +HSPLcom/google/crypto/tink/mac/AesCmacProtoSerialization$$ExternalSyntheticLambda0;->()V +Lcom/google/crypto/tink/mac/AesCmacProtoSerialization$$ExternalSyntheticLambda1; +HSPLcom/google/crypto/tink/mac/AesCmacProtoSerialization$$ExternalSyntheticLambda1;->()V +Lcom/google/crypto/tink/mac/AesCmacProtoSerialization$$ExternalSyntheticLambda2; +HSPLcom/google/crypto/tink/mac/AesCmacProtoSerialization$$ExternalSyntheticLambda2;->()V +Lcom/google/crypto/tink/mac/AesCmacProtoSerialization$$ExternalSyntheticLambda3; +HSPLcom/google/crypto/tink/mac/AesCmacProtoSerialization$$ExternalSyntheticLambda3;->()V +Lcom/google/crypto/tink/mac/ChunkedMac; +Lcom/google/crypto/tink/mac/ChunkedMacWrapper; +HSPLcom/google/crypto/tink/mac/ChunkedMacWrapper;->()V +HSPLcom/google/crypto/tink/mac/ChunkedMacWrapper;->()V +HSPLcom/google/crypto/tink/mac/ChunkedMacWrapper;->getPrimitiveClass()Ljava/lang/Class; +HSPLcom/google/crypto/tink/mac/ChunkedMacWrapper;->register()V +Lcom/google/crypto/tink/mac/HmacKey; +Lcom/google/crypto/tink/mac/HmacKeyManager; +HSPLcom/google/crypto/tink/mac/HmacKeyManager;->()V +HSPLcom/google/crypto/tink/mac/HmacKeyManager;->()V +HSPLcom/google/crypto/tink/mac/HmacKeyManager;->access$100(IILcom/google/crypto/tink/proto/HashType;Lcom/google/crypto/tink/KeyTemplate$OutputPrefixType;)Lcom/google/crypto/tink/internal/KeyTypeManager$KeyFactory$KeyFormat; +HSPLcom/google/crypto/tink/mac/HmacKeyManager;->createKeyFormat(IILcom/google/crypto/tink/proto/HashType;Lcom/google/crypto/tink/KeyTemplate$OutputPrefixType;)Lcom/google/crypto/tink/internal/KeyTypeManager$KeyFactory$KeyFormat; +HSPLcom/google/crypto/tink/mac/HmacKeyManager;->fipsStatus()Lcom/google/crypto/tink/config/internal/TinkFipsUtil$AlgorithmFipsCompatibility; +HSPLcom/google/crypto/tink/mac/HmacKeyManager;->getKeyType()Ljava/lang/String; +HSPLcom/google/crypto/tink/mac/HmacKeyManager;->keyFactory()Lcom/google/crypto/tink/internal/KeyTypeManager$KeyFactory; +HSPLcom/google/crypto/tink/mac/HmacKeyManager;->register(Z)V +Lcom/google/crypto/tink/mac/HmacKeyManager$$ExternalSyntheticLambda0; +HSPLcom/google/crypto/tink/mac/HmacKeyManager$$ExternalSyntheticLambda0;->()V +Lcom/google/crypto/tink/mac/HmacKeyManager$1; +HSPLcom/google/crypto/tink/mac/HmacKeyManager$1;->(Ljava/lang/Class;)V +Lcom/google/crypto/tink/mac/HmacKeyManager$2; +HSPLcom/google/crypto/tink/mac/HmacKeyManager$2;->(Lcom/google/crypto/tink/mac/HmacKeyManager;Ljava/lang/Class;)V +HSPLcom/google/crypto/tink/mac/HmacKeyManager$2;->keyFormats()Ljava/util/Map; +Lcom/google/crypto/tink/mac/HmacParameters; +Lcom/google/crypto/tink/mac/HmacProtoSerialization; +HSPLcom/google/crypto/tink/mac/HmacProtoSerialization;->()V +HSPLcom/google/crypto/tink/mac/HmacProtoSerialization;->register()V +HSPLcom/google/crypto/tink/mac/HmacProtoSerialization;->register(Lcom/google/crypto/tink/internal/MutableSerializationRegistry;)V +Lcom/google/crypto/tink/mac/HmacProtoSerialization$$ExternalSyntheticLambda0; +HSPLcom/google/crypto/tink/mac/HmacProtoSerialization$$ExternalSyntheticLambda0;->()V +Lcom/google/crypto/tink/mac/HmacProtoSerialization$$ExternalSyntheticLambda1; +HSPLcom/google/crypto/tink/mac/HmacProtoSerialization$$ExternalSyntheticLambda1;->()V +Lcom/google/crypto/tink/mac/HmacProtoSerialization$$ExternalSyntheticLambda2; +HSPLcom/google/crypto/tink/mac/HmacProtoSerialization$$ExternalSyntheticLambda2;->()V +Lcom/google/crypto/tink/mac/HmacProtoSerialization$$ExternalSyntheticLambda3; +HSPLcom/google/crypto/tink/mac/HmacProtoSerialization$$ExternalSyntheticLambda3;->()V +Lcom/google/crypto/tink/mac/MacConfig; +HSPLcom/google/crypto/tink/mac/MacConfig;->()V +HSPLcom/google/crypto/tink/mac/MacConfig;->init()V +HSPLcom/google/crypto/tink/mac/MacConfig;->register()V +Lcom/google/crypto/tink/mac/MacKey; +Lcom/google/crypto/tink/mac/MacParameters; +Lcom/google/crypto/tink/mac/MacWrapper; +HSPLcom/google/crypto/tink/mac/MacWrapper;->()V +HSPLcom/google/crypto/tink/mac/MacWrapper;->()V +HSPLcom/google/crypto/tink/mac/MacWrapper;->getPrimitiveClass()Ljava/lang/Class; +HSPLcom/google/crypto/tink/mac/MacWrapper;->register()V +Lcom/google/crypto/tink/mac/internal/AesUtil; +HSPLcom/google/crypto/tink/mac/internal/AesUtil;->cmacPad([B)[B +HSPLcom/google/crypto/tink/mac/internal/AesUtil;->dbl([B)[B +Lcom/google/crypto/tink/monitoring/MonitoringAnnotations; +HSPLcom/google/crypto/tink/monitoring/MonitoringAnnotations;->()V +HSPLcom/google/crypto/tink/monitoring/MonitoringAnnotations;->(Ljava/util/Map;)V +HSPLcom/google/crypto/tink/monitoring/MonitoringAnnotations;->(Ljava/util/Map;Lcom/google/crypto/tink/monitoring/MonitoringAnnotations$1;)V +HSPLcom/google/crypto/tink/monitoring/MonitoringAnnotations;->newBuilder()Lcom/google/crypto/tink/monitoring/MonitoringAnnotations$Builder; +HSPLcom/google/crypto/tink/monitoring/MonitoringAnnotations;->toMap()Ljava/util/Map; +Lcom/google/crypto/tink/monitoring/MonitoringAnnotations$Builder; +HSPLcom/google/crypto/tink/monitoring/MonitoringAnnotations$Builder;->()V +HSPLcom/google/crypto/tink/monitoring/MonitoringAnnotations$Builder;->build()Lcom/google/crypto/tink/monitoring/MonitoringAnnotations; +Lcom/google/crypto/tink/monitoring/MonitoringClient$Logger; +Lcom/google/crypto/tink/prf/Prf; +Lcom/google/crypto/tink/proto/AesCmacKey; +Lcom/google/crypto/tink/proto/AesCmacKeyFormat; +HSPLcom/google/crypto/tink/proto/AesCmacKeyFormat;->()V +HSPLcom/google/crypto/tink/proto/AesCmacKeyFormat;->()V +HSPLcom/google/crypto/tink/proto/AesCmacKeyFormat;->access$000()Lcom/google/crypto/tink/proto/AesCmacKeyFormat; +HSPLcom/google/crypto/tink/proto/AesCmacKeyFormat;->access$100(Lcom/google/crypto/tink/proto/AesCmacKeyFormat;I)V +HSPLcom/google/crypto/tink/proto/AesCmacKeyFormat;->access$300(Lcom/google/crypto/tink/proto/AesCmacKeyFormat;Lcom/google/crypto/tink/proto/AesCmacParams;)V +HSPLcom/google/crypto/tink/proto/AesCmacKeyFormat;->dynamicMethod(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$MethodToInvoke;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/proto/AesCmacKeyFormat;->newBuilder()Lcom/google/crypto/tink/proto/AesCmacKeyFormat$Builder; +HSPLcom/google/crypto/tink/proto/AesCmacKeyFormat;->setKeySize(I)V +HSPLcom/google/crypto/tink/proto/AesCmacKeyFormat;->setParams(Lcom/google/crypto/tink/proto/AesCmacParams;)V +Lcom/google/crypto/tink/proto/AesCmacKeyFormat$1; +HSPLcom/google/crypto/tink/proto/AesCmacKeyFormat$1;->()V +Lcom/google/crypto/tink/proto/AesCmacKeyFormat$Builder; +HSPLcom/google/crypto/tink/proto/AesCmacKeyFormat$Builder;->()V +HSPLcom/google/crypto/tink/proto/AesCmacKeyFormat$Builder;->(Lcom/google/crypto/tink/proto/AesCmacKeyFormat$1;)V +HSPLcom/google/crypto/tink/proto/AesCmacKeyFormat$Builder;->setKeySize(I)Lcom/google/crypto/tink/proto/AesCmacKeyFormat$Builder; +HSPLcom/google/crypto/tink/proto/AesCmacKeyFormat$Builder;->setParams(Lcom/google/crypto/tink/proto/AesCmacParams;)Lcom/google/crypto/tink/proto/AesCmacKeyFormat$Builder; +Lcom/google/crypto/tink/proto/AesCmacKeyFormatOrBuilder; +Lcom/google/crypto/tink/proto/AesCmacKeyOrBuilder; +Lcom/google/crypto/tink/proto/AesCmacParams; +HSPLcom/google/crypto/tink/proto/AesCmacParams;->()V +HSPLcom/google/crypto/tink/proto/AesCmacParams;->()V +HSPLcom/google/crypto/tink/proto/AesCmacParams;->access$000()Lcom/google/crypto/tink/proto/AesCmacParams; +HSPLcom/google/crypto/tink/proto/AesCmacParams;->access$100(Lcom/google/crypto/tink/proto/AesCmacParams;I)V +HSPLcom/google/crypto/tink/proto/AesCmacParams;->dynamicMethod(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$MethodToInvoke;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/proto/AesCmacParams;->newBuilder()Lcom/google/crypto/tink/proto/AesCmacParams$Builder; +HSPLcom/google/crypto/tink/proto/AesCmacParams;->setTagSize(I)V +Lcom/google/crypto/tink/proto/AesCmacParams$1; +HSPLcom/google/crypto/tink/proto/AesCmacParams$1;->()V +Lcom/google/crypto/tink/proto/AesCmacParams$Builder; +HSPLcom/google/crypto/tink/proto/AesCmacParams$Builder;->()V +HSPLcom/google/crypto/tink/proto/AesCmacParams$Builder;->(Lcom/google/crypto/tink/proto/AesCmacParams$1;)V +HSPLcom/google/crypto/tink/proto/AesCmacParams$Builder;->setTagSize(I)Lcom/google/crypto/tink/proto/AesCmacParams$Builder; +Lcom/google/crypto/tink/proto/AesCmacParamsOrBuilder; +Lcom/google/crypto/tink/proto/AesCtrHmacAeadKey; +Lcom/google/crypto/tink/proto/AesCtrHmacAeadKeyFormat; +HSPLcom/google/crypto/tink/proto/AesCtrHmacAeadKeyFormat;->()V +HSPLcom/google/crypto/tink/proto/AesCtrHmacAeadKeyFormat;->()V +HSPLcom/google/crypto/tink/proto/AesCtrHmacAeadKeyFormat;->access$000()Lcom/google/crypto/tink/proto/AesCtrHmacAeadKeyFormat; +HSPLcom/google/crypto/tink/proto/AesCtrHmacAeadKeyFormat;->access$100(Lcom/google/crypto/tink/proto/AesCtrHmacAeadKeyFormat;Lcom/google/crypto/tink/proto/AesCtrKeyFormat;)V +HSPLcom/google/crypto/tink/proto/AesCtrHmacAeadKeyFormat;->access$400(Lcom/google/crypto/tink/proto/AesCtrHmacAeadKeyFormat;Lcom/google/crypto/tink/proto/HmacKeyFormat;)V +HSPLcom/google/crypto/tink/proto/AesCtrHmacAeadKeyFormat;->dynamicMethod(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$MethodToInvoke;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/proto/AesCtrHmacAeadKeyFormat;->newBuilder()Lcom/google/crypto/tink/proto/AesCtrHmacAeadKeyFormat$Builder; +HSPLcom/google/crypto/tink/proto/AesCtrHmacAeadKeyFormat;->setAesCtrKeyFormat(Lcom/google/crypto/tink/proto/AesCtrKeyFormat;)V +HSPLcom/google/crypto/tink/proto/AesCtrHmacAeadKeyFormat;->setHmacKeyFormat(Lcom/google/crypto/tink/proto/HmacKeyFormat;)V +Lcom/google/crypto/tink/proto/AesCtrHmacAeadKeyFormat$1; +HSPLcom/google/crypto/tink/proto/AesCtrHmacAeadKeyFormat$1;->()V +Lcom/google/crypto/tink/proto/AesCtrHmacAeadKeyFormat$Builder; +HSPLcom/google/crypto/tink/proto/AesCtrHmacAeadKeyFormat$Builder;->()V +HSPLcom/google/crypto/tink/proto/AesCtrHmacAeadKeyFormat$Builder;->(Lcom/google/crypto/tink/proto/AesCtrHmacAeadKeyFormat$1;)V +HSPLcom/google/crypto/tink/proto/AesCtrHmacAeadKeyFormat$Builder;->setAesCtrKeyFormat(Lcom/google/crypto/tink/proto/AesCtrKeyFormat;)Lcom/google/crypto/tink/proto/AesCtrHmacAeadKeyFormat$Builder; +HSPLcom/google/crypto/tink/proto/AesCtrHmacAeadKeyFormat$Builder;->setHmacKeyFormat(Lcom/google/crypto/tink/proto/HmacKeyFormat;)Lcom/google/crypto/tink/proto/AesCtrHmacAeadKeyFormat$Builder; +Lcom/google/crypto/tink/proto/AesCtrHmacAeadKeyFormatOrBuilder; +Lcom/google/crypto/tink/proto/AesCtrHmacAeadKeyOrBuilder; +Lcom/google/crypto/tink/proto/AesCtrKeyFormat; +HSPLcom/google/crypto/tink/proto/AesCtrKeyFormat;->()V +HSPLcom/google/crypto/tink/proto/AesCtrKeyFormat;->()V +HSPLcom/google/crypto/tink/proto/AesCtrKeyFormat;->access$000()Lcom/google/crypto/tink/proto/AesCtrKeyFormat; +HSPLcom/google/crypto/tink/proto/AesCtrKeyFormat;->access$100(Lcom/google/crypto/tink/proto/AesCtrKeyFormat;Lcom/google/crypto/tink/proto/AesCtrParams;)V +HSPLcom/google/crypto/tink/proto/AesCtrKeyFormat;->access$400(Lcom/google/crypto/tink/proto/AesCtrKeyFormat;I)V +HSPLcom/google/crypto/tink/proto/AesCtrKeyFormat;->dynamicMethod(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$MethodToInvoke;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/proto/AesCtrKeyFormat;->newBuilder()Lcom/google/crypto/tink/proto/AesCtrKeyFormat$Builder; +HSPLcom/google/crypto/tink/proto/AesCtrKeyFormat;->setKeySize(I)V +HSPLcom/google/crypto/tink/proto/AesCtrKeyFormat;->setParams(Lcom/google/crypto/tink/proto/AesCtrParams;)V +Lcom/google/crypto/tink/proto/AesCtrKeyFormat$1; +HSPLcom/google/crypto/tink/proto/AesCtrKeyFormat$1;->()V +Lcom/google/crypto/tink/proto/AesCtrKeyFormat$Builder; +HSPLcom/google/crypto/tink/proto/AesCtrKeyFormat$Builder;->()V +HSPLcom/google/crypto/tink/proto/AesCtrKeyFormat$Builder;->(Lcom/google/crypto/tink/proto/AesCtrKeyFormat$1;)V +HSPLcom/google/crypto/tink/proto/AesCtrKeyFormat$Builder;->setKeySize(I)Lcom/google/crypto/tink/proto/AesCtrKeyFormat$Builder; +HSPLcom/google/crypto/tink/proto/AesCtrKeyFormat$Builder;->setParams(Lcom/google/crypto/tink/proto/AesCtrParams;)Lcom/google/crypto/tink/proto/AesCtrKeyFormat$Builder; +Lcom/google/crypto/tink/proto/AesCtrKeyFormatOrBuilder; +Lcom/google/crypto/tink/proto/AesCtrParams; +HSPLcom/google/crypto/tink/proto/AesCtrParams;->()V +HSPLcom/google/crypto/tink/proto/AesCtrParams;->()V +HSPLcom/google/crypto/tink/proto/AesCtrParams;->access$000()Lcom/google/crypto/tink/proto/AesCtrParams; +HSPLcom/google/crypto/tink/proto/AesCtrParams;->access$100(Lcom/google/crypto/tink/proto/AesCtrParams;I)V +HSPLcom/google/crypto/tink/proto/AesCtrParams;->dynamicMethod(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$MethodToInvoke;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/proto/AesCtrParams;->newBuilder()Lcom/google/crypto/tink/proto/AesCtrParams$Builder; +HSPLcom/google/crypto/tink/proto/AesCtrParams;->setIvSize(I)V +Lcom/google/crypto/tink/proto/AesCtrParams$1; +HSPLcom/google/crypto/tink/proto/AesCtrParams$1;->()V +Lcom/google/crypto/tink/proto/AesCtrParams$Builder; +HSPLcom/google/crypto/tink/proto/AesCtrParams$Builder;->()V +HSPLcom/google/crypto/tink/proto/AesCtrParams$Builder;->(Lcom/google/crypto/tink/proto/AesCtrParams$1;)V +HSPLcom/google/crypto/tink/proto/AesCtrParams$Builder;->setIvSize(I)Lcom/google/crypto/tink/proto/AesCtrParams$Builder; +Lcom/google/crypto/tink/proto/AesCtrParamsOrBuilder; +Lcom/google/crypto/tink/proto/AesEaxKey; +Lcom/google/crypto/tink/proto/AesEaxKeyFormat; +HSPLcom/google/crypto/tink/proto/AesEaxKeyFormat;->()V +HSPLcom/google/crypto/tink/proto/AesEaxKeyFormat;->()V +HSPLcom/google/crypto/tink/proto/AesEaxKeyFormat;->access$000()Lcom/google/crypto/tink/proto/AesEaxKeyFormat; +HSPLcom/google/crypto/tink/proto/AesEaxKeyFormat;->access$100(Lcom/google/crypto/tink/proto/AesEaxKeyFormat;Lcom/google/crypto/tink/proto/AesEaxParams;)V +HSPLcom/google/crypto/tink/proto/AesEaxKeyFormat;->access$400(Lcom/google/crypto/tink/proto/AesEaxKeyFormat;I)V +HSPLcom/google/crypto/tink/proto/AesEaxKeyFormat;->dynamicMethod(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$MethodToInvoke;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/proto/AesEaxKeyFormat;->newBuilder()Lcom/google/crypto/tink/proto/AesEaxKeyFormat$Builder; +HSPLcom/google/crypto/tink/proto/AesEaxKeyFormat;->setKeySize(I)V +HSPLcom/google/crypto/tink/proto/AesEaxKeyFormat;->setParams(Lcom/google/crypto/tink/proto/AesEaxParams;)V +Lcom/google/crypto/tink/proto/AesEaxKeyFormat$1; +HSPLcom/google/crypto/tink/proto/AesEaxKeyFormat$1;->()V +Lcom/google/crypto/tink/proto/AesEaxKeyFormat$Builder; +HSPLcom/google/crypto/tink/proto/AesEaxKeyFormat$Builder;->()V +HSPLcom/google/crypto/tink/proto/AesEaxKeyFormat$Builder;->(Lcom/google/crypto/tink/proto/AesEaxKeyFormat$1;)V +HSPLcom/google/crypto/tink/proto/AesEaxKeyFormat$Builder;->setKeySize(I)Lcom/google/crypto/tink/proto/AesEaxKeyFormat$Builder; +HSPLcom/google/crypto/tink/proto/AesEaxKeyFormat$Builder;->setParams(Lcom/google/crypto/tink/proto/AesEaxParams;)Lcom/google/crypto/tink/proto/AesEaxKeyFormat$Builder; +Lcom/google/crypto/tink/proto/AesEaxKeyFormatOrBuilder; +Lcom/google/crypto/tink/proto/AesEaxKeyOrBuilder; +Lcom/google/crypto/tink/proto/AesEaxParams; +HSPLcom/google/crypto/tink/proto/AesEaxParams;->()V +HSPLcom/google/crypto/tink/proto/AesEaxParams;->()V +HSPLcom/google/crypto/tink/proto/AesEaxParams;->access$000()Lcom/google/crypto/tink/proto/AesEaxParams; +HSPLcom/google/crypto/tink/proto/AesEaxParams;->access$100(Lcom/google/crypto/tink/proto/AesEaxParams;I)V +HSPLcom/google/crypto/tink/proto/AesEaxParams;->dynamicMethod(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$MethodToInvoke;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/proto/AesEaxParams;->newBuilder()Lcom/google/crypto/tink/proto/AesEaxParams$Builder; +HSPLcom/google/crypto/tink/proto/AesEaxParams;->setIvSize(I)V +Lcom/google/crypto/tink/proto/AesEaxParams$1; +HSPLcom/google/crypto/tink/proto/AesEaxParams$1;->()V +Lcom/google/crypto/tink/proto/AesEaxParams$Builder; +HSPLcom/google/crypto/tink/proto/AesEaxParams$Builder;->()V +HSPLcom/google/crypto/tink/proto/AesEaxParams$Builder;->(Lcom/google/crypto/tink/proto/AesEaxParams$1;)V +HSPLcom/google/crypto/tink/proto/AesEaxParams$Builder;->setIvSize(I)Lcom/google/crypto/tink/proto/AesEaxParams$Builder; +Lcom/google/crypto/tink/proto/AesEaxParamsOrBuilder; +Lcom/google/crypto/tink/proto/AesGcmKey; +HSPLcom/google/crypto/tink/proto/AesGcmKey;->()V +HSPLcom/google/crypto/tink/proto/AesGcmKey;->()V +HSPLcom/google/crypto/tink/proto/AesGcmKey;->access$000()Lcom/google/crypto/tink/proto/AesGcmKey; +HSPLcom/google/crypto/tink/proto/AesGcmKey;->access$100(Lcom/google/crypto/tink/proto/AesGcmKey;I)V +HSPLcom/google/crypto/tink/proto/AesGcmKey;->access$300(Lcom/google/crypto/tink/proto/AesGcmKey;Lcom/google/crypto/tink/shaded/protobuf/ByteString;)V +HSPLcom/google/crypto/tink/proto/AesGcmKey;->dynamicMethod(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$MethodToInvoke;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/proto/AesGcmKey;->getKeyValue()Lcom/google/crypto/tink/shaded/protobuf/ByteString; +HSPLcom/google/crypto/tink/proto/AesGcmKey;->getVersion()I +HSPLcom/google/crypto/tink/proto/AesGcmKey;->newBuilder()Lcom/google/crypto/tink/proto/AesGcmKey$Builder; +HSPLcom/google/crypto/tink/proto/AesGcmKey;->parseFrom(Lcom/google/crypto/tink/shaded/protobuf/ByteString;Lcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryLite;)Lcom/google/crypto/tink/proto/AesGcmKey; +HSPLcom/google/crypto/tink/proto/AesGcmKey;->setKeyValue(Lcom/google/crypto/tink/shaded/protobuf/ByteString;)V +HSPLcom/google/crypto/tink/proto/AesGcmKey;->setVersion(I)V +Lcom/google/crypto/tink/proto/AesGcmKey$1; +HSPLcom/google/crypto/tink/proto/AesGcmKey$1;->()V +Lcom/google/crypto/tink/proto/AesGcmKey$Builder; +HSPLcom/google/crypto/tink/proto/AesGcmKey$Builder;->()V +HSPLcom/google/crypto/tink/proto/AesGcmKey$Builder;->(Lcom/google/crypto/tink/proto/AesGcmKey$1;)V +HSPLcom/google/crypto/tink/proto/AesGcmKey$Builder;->setKeyValue(Lcom/google/crypto/tink/shaded/protobuf/ByteString;)Lcom/google/crypto/tink/proto/AesGcmKey$Builder; +HSPLcom/google/crypto/tink/proto/AesGcmKey$Builder;->setVersion(I)Lcom/google/crypto/tink/proto/AesGcmKey$Builder; +Lcom/google/crypto/tink/proto/AesGcmKeyFormat; +HSPLcom/google/crypto/tink/proto/AesGcmKeyFormat;->()V +HSPLcom/google/crypto/tink/proto/AesGcmKeyFormat;->()V +HSPLcom/google/crypto/tink/proto/AesGcmKeyFormat;->access$000()Lcom/google/crypto/tink/proto/AesGcmKeyFormat; +HSPLcom/google/crypto/tink/proto/AesGcmKeyFormat;->access$100(Lcom/google/crypto/tink/proto/AesGcmKeyFormat;I)V +HSPLcom/google/crypto/tink/proto/AesGcmKeyFormat;->dynamicMethod(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$MethodToInvoke;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/proto/AesGcmKeyFormat;->getKeySize()I +HSPLcom/google/crypto/tink/proto/AesGcmKeyFormat;->newBuilder()Lcom/google/crypto/tink/proto/AesGcmKeyFormat$Builder; +HSPLcom/google/crypto/tink/proto/AesGcmKeyFormat;->parseFrom(Lcom/google/crypto/tink/shaded/protobuf/ByteString;Lcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryLite;)Lcom/google/crypto/tink/proto/AesGcmKeyFormat; +HSPLcom/google/crypto/tink/proto/AesGcmKeyFormat;->setKeySize(I)V +Lcom/google/crypto/tink/proto/AesGcmKeyFormat$1; +HSPLcom/google/crypto/tink/proto/AesGcmKeyFormat$1;->()V +Lcom/google/crypto/tink/proto/AesGcmKeyFormat$Builder; +HSPLcom/google/crypto/tink/proto/AesGcmKeyFormat$Builder;->()V +HSPLcom/google/crypto/tink/proto/AesGcmKeyFormat$Builder;->(Lcom/google/crypto/tink/proto/AesGcmKeyFormat$1;)V +HSPLcom/google/crypto/tink/proto/AesGcmKeyFormat$Builder;->setKeySize(I)Lcom/google/crypto/tink/proto/AesGcmKeyFormat$Builder; +Lcom/google/crypto/tink/proto/AesGcmKeyFormatOrBuilder; +Lcom/google/crypto/tink/proto/AesGcmKeyOrBuilder; +Lcom/google/crypto/tink/proto/AesGcmSivKey; +Lcom/google/crypto/tink/proto/AesGcmSivKeyFormat; +HSPLcom/google/crypto/tink/proto/AesGcmSivKeyFormat;->()V +HSPLcom/google/crypto/tink/proto/AesGcmSivKeyFormat;->()V +HSPLcom/google/crypto/tink/proto/AesGcmSivKeyFormat;->access$000()Lcom/google/crypto/tink/proto/AesGcmSivKeyFormat; +HSPLcom/google/crypto/tink/proto/AesGcmSivKeyFormat;->access$100(Lcom/google/crypto/tink/proto/AesGcmSivKeyFormat;I)V +HSPLcom/google/crypto/tink/proto/AesGcmSivKeyFormat;->dynamicMethod(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$MethodToInvoke;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/proto/AesGcmSivKeyFormat;->newBuilder()Lcom/google/crypto/tink/proto/AesGcmSivKeyFormat$Builder; +HSPLcom/google/crypto/tink/proto/AesGcmSivKeyFormat;->setKeySize(I)V +Lcom/google/crypto/tink/proto/AesGcmSivKeyFormat$1; +HSPLcom/google/crypto/tink/proto/AesGcmSivKeyFormat$1;->()V +Lcom/google/crypto/tink/proto/AesGcmSivKeyFormat$Builder; +HSPLcom/google/crypto/tink/proto/AesGcmSivKeyFormat$Builder;->()V +HSPLcom/google/crypto/tink/proto/AesGcmSivKeyFormat$Builder;->(Lcom/google/crypto/tink/proto/AesGcmSivKeyFormat$1;)V +HSPLcom/google/crypto/tink/proto/AesGcmSivKeyFormat$Builder;->setKeySize(I)Lcom/google/crypto/tink/proto/AesGcmSivKeyFormat$Builder; +Lcom/google/crypto/tink/proto/AesGcmSivKeyFormatOrBuilder; +Lcom/google/crypto/tink/proto/AesGcmSivKeyOrBuilder; +Lcom/google/crypto/tink/proto/AesSivKey; +HSPLcom/google/crypto/tink/proto/AesSivKey;->()V +HSPLcom/google/crypto/tink/proto/AesSivKey;->()V +HSPLcom/google/crypto/tink/proto/AesSivKey;->access$000()Lcom/google/crypto/tink/proto/AesSivKey; +HSPLcom/google/crypto/tink/proto/AesSivKey;->access$100(Lcom/google/crypto/tink/proto/AesSivKey;I)V +HSPLcom/google/crypto/tink/proto/AesSivKey;->access$300(Lcom/google/crypto/tink/proto/AesSivKey;Lcom/google/crypto/tink/shaded/protobuf/ByteString;)V +HSPLcom/google/crypto/tink/proto/AesSivKey;->dynamicMethod(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$MethodToInvoke;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/proto/AesSivKey;->getKeyValue()Lcom/google/crypto/tink/shaded/protobuf/ByteString; +HSPLcom/google/crypto/tink/proto/AesSivKey;->getVersion()I +HSPLcom/google/crypto/tink/proto/AesSivKey;->newBuilder()Lcom/google/crypto/tink/proto/AesSivKey$Builder; +HSPLcom/google/crypto/tink/proto/AesSivKey;->parseFrom(Lcom/google/crypto/tink/shaded/protobuf/ByteString;Lcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryLite;)Lcom/google/crypto/tink/proto/AesSivKey; +HSPLcom/google/crypto/tink/proto/AesSivKey;->setKeyValue(Lcom/google/crypto/tink/shaded/protobuf/ByteString;)V +HSPLcom/google/crypto/tink/proto/AesSivKey;->setVersion(I)V +Lcom/google/crypto/tink/proto/AesSivKey$1; +HSPLcom/google/crypto/tink/proto/AesSivKey$1;->()V +Lcom/google/crypto/tink/proto/AesSivKey$Builder; +HSPLcom/google/crypto/tink/proto/AesSivKey$Builder;->()V +HSPLcom/google/crypto/tink/proto/AesSivKey$Builder;->(Lcom/google/crypto/tink/proto/AesSivKey$1;)V +HSPLcom/google/crypto/tink/proto/AesSivKey$Builder;->setKeyValue(Lcom/google/crypto/tink/shaded/protobuf/ByteString;)Lcom/google/crypto/tink/proto/AesSivKey$Builder; +HSPLcom/google/crypto/tink/proto/AesSivKey$Builder;->setVersion(I)Lcom/google/crypto/tink/proto/AesSivKey$Builder; +Lcom/google/crypto/tink/proto/AesSivKeyFormat; +HSPLcom/google/crypto/tink/proto/AesSivKeyFormat;->()V +HSPLcom/google/crypto/tink/proto/AesSivKeyFormat;->()V +HSPLcom/google/crypto/tink/proto/AesSivKeyFormat;->access$000()Lcom/google/crypto/tink/proto/AesSivKeyFormat; +HSPLcom/google/crypto/tink/proto/AesSivKeyFormat;->access$100(Lcom/google/crypto/tink/proto/AesSivKeyFormat;I)V +HSPLcom/google/crypto/tink/proto/AesSivKeyFormat;->dynamicMethod(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$MethodToInvoke;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/proto/AesSivKeyFormat;->getKeySize()I +HSPLcom/google/crypto/tink/proto/AesSivKeyFormat;->newBuilder()Lcom/google/crypto/tink/proto/AesSivKeyFormat$Builder; +HSPLcom/google/crypto/tink/proto/AesSivKeyFormat;->parseFrom(Lcom/google/crypto/tink/shaded/protobuf/ByteString;Lcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryLite;)Lcom/google/crypto/tink/proto/AesSivKeyFormat; +HSPLcom/google/crypto/tink/proto/AesSivKeyFormat;->setKeySize(I)V +Lcom/google/crypto/tink/proto/AesSivKeyFormat$1; +HSPLcom/google/crypto/tink/proto/AesSivKeyFormat$1;->()V +Lcom/google/crypto/tink/proto/AesSivKeyFormat$Builder; +HSPLcom/google/crypto/tink/proto/AesSivKeyFormat$Builder;->()V +HSPLcom/google/crypto/tink/proto/AesSivKeyFormat$Builder;->(Lcom/google/crypto/tink/proto/AesSivKeyFormat$1;)V +HSPLcom/google/crypto/tink/proto/AesSivKeyFormat$Builder;->setKeySize(I)Lcom/google/crypto/tink/proto/AesSivKeyFormat$Builder; +Lcom/google/crypto/tink/proto/AesSivKeyFormatOrBuilder; +Lcom/google/crypto/tink/proto/AesSivKeyOrBuilder; +Lcom/google/crypto/tink/proto/ChaCha20Poly1305Key; +Lcom/google/crypto/tink/proto/ChaCha20Poly1305KeyFormat; +HSPLcom/google/crypto/tink/proto/ChaCha20Poly1305KeyFormat;->()V +HSPLcom/google/crypto/tink/proto/ChaCha20Poly1305KeyFormat;->()V +HSPLcom/google/crypto/tink/proto/ChaCha20Poly1305KeyFormat;->dynamicMethod(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$MethodToInvoke;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/proto/ChaCha20Poly1305KeyFormat;->getDefaultInstance()Lcom/google/crypto/tink/proto/ChaCha20Poly1305KeyFormat; +Lcom/google/crypto/tink/proto/ChaCha20Poly1305KeyFormat$1; +HSPLcom/google/crypto/tink/proto/ChaCha20Poly1305KeyFormat$1;->()V +Lcom/google/crypto/tink/proto/ChaCha20Poly1305KeyFormatOrBuilder; +Lcom/google/crypto/tink/proto/ChaCha20Poly1305KeyOrBuilder; +Lcom/google/crypto/tink/proto/EncryptedKeyset; +HSPLcom/google/crypto/tink/proto/EncryptedKeyset;->()V +HSPLcom/google/crypto/tink/proto/EncryptedKeyset;->()V +HSPLcom/google/crypto/tink/proto/EncryptedKeyset;->access$000()Lcom/google/crypto/tink/proto/EncryptedKeyset; +HSPLcom/google/crypto/tink/proto/EncryptedKeyset;->access$100(Lcom/google/crypto/tink/proto/EncryptedKeyset;Lcom/google/crypto/tink/shaded/protobuf/ByteString;)V +HSPLcom/google/crypto/tink/proto/EncryptedKeyset;->access$300(Lcom/google/crypto/tink/proto/EncryptedKeyset;Lcom/google/crypto/tink/proto/KeysetInfo;)V +HSPLcom/google/crypto/tink/proto/EncryptedKeyset;->dynamicMethod(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$MethodToInvoke;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/proto/EncryptedKeyset;->getEncryptedKeyset()Lcom/google/crypto/tink/shaded/protobuf/ByteString; +HSPLcom/google/crypto/tink/proto/EncryptedKeyset;->newBuilder()Lcom/google/crypto/tink/proto/EncryptedKeyset$Builder; +HSPLcom/google/crypto/tink/proto/EncryptedKeyset;->parseFrom(Ljava/io/InputStream;Lcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryLite;)Lcom/google/crypto/tink/proto/EncryptedKeyset; +HSPLcom/google/crypto/tink/proto/EncryptedKeyset;->setEncryptedKeyset(Lcom/google/crypto/tink/shaded/protobuf/ByteString;)V +HSPLcom/google/crypto/tink/proto/EncryptedKeyset;->setKeysetInfo(Lcom/google/crypto/tink/proto/KeysetInfo;)V +Lcom/google/crypto/tink/proto/EncryptedKeyset$1; +HSPLcom/google/crypto/tink/proto/EncryptedKeyset$1;->()V +Lcom/google/crypto/tink/proto/EncryptedKeyset$Builder; +HSPLcom/google/crypto/tink/proto/EncryptedKeyset$Builder;->()V +HSPLcom/google/crypto/tink/proto/EncryptedKeyset$Builder;->(Lcom/google/crypto/tink/proto/EncryptedKeyset$1;)V +HSPLcom/google/crypto/tink/proto/EncryptedKeyset$Builder;->setEncryptedKeyset(Lcom/google/crypto/tink/shaded/protobuf/ByteString;)Lcom/google/crypto/tink/proto/EncryptedKeyset$Builder; +HSPLcom/google/crypto/tink/proto/EncryptedKeyset$Builder;->setKeysetInfo(Lcom/google/crypto/tink/proto/KeysetInfo;)Lcom/google/crypto/tink/proto/EncryptedKeyset$Builder; +Lcom/google/crypto/tink/proto/EncryptedKeysetOrBuilder; +Lcom/google/crypto/tink/proto/HashType; +HSPLcom/google/crypto/tink/proto/HashType;->()V +HSPLcom/google/crypto/tink/proto/HashType;->(Ljava/lang/String;II)V +HSPLcom/google/crypto/tink/proto/HashType;->getNumber()I +Lcom/google/crypto/tink/proto/HashType$1; +HSPLcom/google/crypto/tink/proto/HashType$1;->()V +Lcom/google/crypto/tink/proto/HmacKey; +Lcom/google/crypto/tink/proto/HmacKeyFormat; +HSPLcom/google/crypto/tink/proto/HmacKeyFormat;->()V +HSPLcom/google/crypto/tink/proto/HmacKeyFormat;->()V +HSPLcom/google/crypto/tink/proto/HmacKeyFormat;->access$000()Lcom/google/crypto/tink/proto/HmacKeyFormat; +HSPLcom/google/crypto/tink/proto/HmacKeyFormat;->access$100(Lcom/google/crypto/tink/proto/HmacKeyFormat;Lcom/google/crypto/tink/proto/HmacParams;)V +HSPLcom/google/crypto/tink/proto/HmacKeyFormat;->access$400(Lcom/google/crypto/tink/proto/HmacKeyFormat;I)V +HSPLcom/google/crypto/tink/proto/HmacKeyFormat;->dynamicMethod(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$MethodToInvoke;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/proto/HmacKeyFormat;->newBuilder()Lcom/google/crypto/tink/proto/HmacKeyFormat$Builder; +HSPLcom/google/crypto/tink/proto/HmacKeyFormat;->setKeySize(I)V +HSPLcom/google/crypto/tink/proto/HmacKeyFormat;->setParams(Lcom/google/crypto/tink/proto/HmacParams;)V +Lcom/google/crypto/tink/proto/HmacKeyFormat$1; +HSPLcom/google/crypto/tink/proto/HmacKeyFormat$1;->()V +Lcom/google/crypto/tink/proto/HmacKeyFormat$Builder; +HSPLcom/google/crypto/tink/proto/HmacKeyFormat$Builder;->()V +HSPLcom/google/crypto/tink/proto/HmacKeyFormat$Builder;->(Lcom/google/crypto/tink/proto/HmacKeyFormat$1;)V +HSPLcom/google/crypto/tink/proto/HmacKeyFormat$Builder;->setKeySize(I)Lcom/google/crypto/tink/proto/HmacKeyFormat$Builder; +HSPLcom/google/crypto/tink/proto/HmacKeyFormat$Builder;->setParams(Lcom/google/crypto/tink/proto/HmacParams;)Lcom/google/crypto/tink/proto/HmacKeyFormat$Builder; +Lcom/google/crypto/tink/proto/HmacKeyFormatOrBuilder; +Lcom/google/crypto/tink/proto/HmacKeyOrBuilder; +Lcom/google/crypto/tink/proto/HmacParams; +HSPLcom/google/crypto/tink/proto/HmacParams;->()V +HSPLcom/google/crypto/tink/proto/HmacParams;->()V +HSPLcom/google/crypto/tink/proto/HmacParams;->access$000()Lcom/google/crypto/tink/proto/HmacParams; +HSPLcom/google/crypto/tink/proto/HmacParams;->access$200(Lcom/google/crypto/tink/proto/HmacParams;Lcom/google/crypto/tink/proto/HashType;)V +HSPLcom/google/crypto/tink/proto/HmacParams;->access$400(Lcom/google/crypto/tink/proto/HmacParams;I)V +HSPLcom/google/crypto/tink/proto/HmacParams;->dynamicMethod(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$MethodToInvoke;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/proto/HmacParams;->newBuilder()Lcom/google/crypto/tink/proto/HmacParams$Builder; +HSPLcom/google/crypto/tink/proto/HmacParams;->setHash(Lcom/google/crypto/tink/proto/HashType;)V +HSPLcom/google/crypto/tink/proto/HmacParams;->setTagSize(I)V +Lcom/google/crypto/tink/proto/HmacParams$1; +HSPLcom/google/crypto/tink/proto/HmacParams$1;->()V +Lcom/google/crypto/tink/proto/HmacParams$Builder; +HSPLcom/google/crypto/tink/proto/HmacParams$Builder;->()V +HSPLcom/google/crypto/tink/proto/HmacParams$Builder;->(Lcom/google/crypto/tink/proto/HmacParams$1;)V +HSPLcom/google/crypto/tink/proto/HmacParams$Builder;->setHash(Lcom/google/crypto/tink/proto/HashType;)Lcom/google/crypto/tink/proto/HmacParams$Builder; +HSPLcom/google/crypto/tink/proto/HmacParams$Builder;->setTagSize(I)Lcom/google/crypto/tink/proto/HmacParams$Builder; +Lcom/google/crypto/tink/proto/HmacParamsOrBuilder; +Lcom/google/crypto/tink/proto/KeyData; +HSPLcom/google/crypto/tink/proto/KeyData;->()V +HSPLcom/google/crypto/tink/proto/KeyData;->()V +HSPLcom/google/crypto/tink/proto/KeyData;->access$000()Lcom/google/crypto/tink/proto/KeyData; +HSPLcom/google/crypto/tink/proto/KeyData;->access$100(Lcom/google/crypto/tink/proto/KeyData;Ljava/lang/String;)V +HSPLcom/google/crypto/tink/proto/KeyData;->access$400(Lcom/google/crypto/tink/proto/KeyData;Lcom/google/crypto/tink/shaded/protobuf/ByteString;)V +HSPLcom/google/crypto/tink/proto/KeyData;->access$700(Lcom/google/crypto/tink/proto/KeyData;Lcom/google/crypto/tink/proto/KeyData$KeyMaterialType;)V +HSPLcom/google/crypto/tink/proto/KeyData;->dynamicMethod(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$MethodToInvoke;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/proto/KeyData;->getKeyMaterialType()Lcom/google/crypto/tink/proto/KeyData$KeyMaterialType; +HSPLcom/google/crypto/tink/proto/KeyData;->getTypeUrl()Ljava/lang/String; +HSPLcom/google/crypto/tink/proto/KeyData;->getValue()Lcom/google/crypto/tink/shaded/protobuf/ByteString; +HSPLcom/google/crypto/tink/proto/KeyData;->newBuilder()Lcom/google/crypto/tink/proto/KeyData$Builder; +HSPLcom/google/crypto/tink/proto/KeyData;->setKeyMaterialType(Lcom/google/crypto/tink/proto/KeyData$KeyMaterialType;)V +HSPLcom/google/crypto/tink/proto/KeyData;->setTypeUrl(Ljava/lang/String;)V +HSPLcom/google/crypto/tink/proto/KeyData;->setValue(Lcom/google/crypto/tink/shaded/protobuf/ByteString;)V +Lcom/google/crypto/tink/proto/KeyData$1; +HSPLcom/google/crypto/tink/proto/KeyData$1;->()V +Lcom/google/crypto/tink/proto/KeyData$Builder; +HSPLcom/google/crypto/tink/proto/KeyData$Builder;->()V +HSPLcom/google/crypto/tink/proto/KeyData$Builder;->(Lcom/google/crypto/tink/proto/KeyData$1;)V +HSPLcom/google/crypto/tink/proto/KeyData$Builder;->setKeyMaterialType(Lcom/google/crypto/tink/proto/KeyData$KeyMaterialType;)Lcom/google/crypto/tink/proto/KeyData$Builder; +HSPLcom/google/crypto/tink/proto/KeyData$Builder;->setTypeUrl(Ljava/lang/String;)Lcom/google/crypto/tink/proto/KeyData$Builder; +HSPLcom/google/crypto/tink/proto/KeyData$Builder;->setValue(Lcom/google/crypto/tink/shaded/protobuf/ByteString;)Lcom/google/crypto/tink/proto/KeyData$Builder; +Lcom/google/crypto/tink/proto/KeyData$KeyMaterialType; +HSPLcom/google/crypto/tink/proto/KeyData$KeyMaterialType;->()V +HSPLcom/google/crypto/tink/proto/KeyData$KeyMaterialType;->(Ljava/lang/String;II)V +HSPLcom/google/crypto/tink/proto/KeyData$KeyMaterialType;->forNumber(I)Lcom/google/crypto/tink/proto/KeyData$KeyMaterialType; +HSPLcom/google/crypto/tink/proto/KeyData$KeyMaterialType;->getNumber()I +HSPLcom/google/crypto/tink/proto/KeyData$KeyMaterialType;->values()[Lcom/google/crypto/tink/proto/KeyData$KeyMaterialType; +Lcom/google/crypto/tink/proto/KeyData$KeyMaterialType$1; +HSPLcom/google/crypto/tink/proto/KeyData$KeyMaterialType$1;->()V +Lcom/google/crypto/tink/proto/KeyDataOrBuilder; +Lcom/google/crypto/tink/proto/KeyStatusType; +HSPLcom/google/crypto/tink/proto/KeyStatusType;->()V +HSPLcom/google/crypto/tink/proto/KeyStatusType;->(Ljava/lang/String;II)V +HSPLcom/google/crypto/tink/proto/KeyStatusType;->forNumber(I)Lcom/google/crypto/tink/proto/KeyStatusType; +HSPLcom/google/crypto/tink/proto/KeyStatusType;->getNumber()I +HSPLcom/google/crypto/tink/proto/KeyStatusType;->values()[Lcom/google/crypto/tink/proto/KeyStatusType; +Lcom/google/crypto/tink/proto/KeyStatusType$1; +HSPLcom/google/crypto/tink/proto/KeyStatusType$1;->()V +Lcom/google/crypto/tink/proto/KeyTemplate; +HSPLcom/google/crypto/tink/proto/KeyTemplate;->()V +HSPLcom/google/crypto/tink/proto/KeyTemplate;->()V +HSPLcom/google/crypto/tink/proto/KeyTemplate;->access$000()Lcom/google/crypto/tink/proto/KeyTemplate; +HSPLcom/google/crypto/tink/proto/KeyTemplate;->access$100(Lcom/google/crypto/tink/proto/KeyTemplate;Ljava/lang/String;)V +HSPLcom/google/crypto/tink/proto/KeyTemplate;->access$400(Lcom/google/crypto/tink/proto/KeyTemplate;Lcom/google/crypto/tink/shaded/protobuf/ByteString;)V +HSPLcom/google/crypto/tink/proto/KeyTemplate;->access$700(Lcom/google/crypto/tink/proto/KeyTemplate;Lcom/google/crypto/tink/proto/OutputPrefixType;)V +HSPLcom/google/crypto/tink/proto/KeyTemplate;->dynamicMethod(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$MethodToInvoke;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/proto/KeyTemplate;->getOutputPrefixType()Lcom/google/crypto/tink/proto/OutputPrefixType; +HSPLcom/google/crypto/tink/proto/KeyTemplate;->getTypeUrl()Ljava/lang/String; +HSPLcom/google/crypto/tink/proto/KeyTemplate;->getValue()Lcom/google/crypto/tink/shaded/protobuf/ByteString; +HSPLcom/google/crypto/tink/proto/KeyTemplate;->newBuilder()Lcom/google/crypto/tink/proto/KeyTemplate$Builder; +HSPLcom/google/crypto/tink/proto/KeyTemplate;->setOutputPrefixType(Lcom/google/crypto/tink/proto/OutputPrefixType;)V +HSPLcom/google/crypto/tink/proto/KeyTemplate;->setTypeUrl(Ljava/lang/String;)V +HSPLcom/google/crypto/tink/proto/KeyTemplate;->setValue(Lcom/google/crypto/tink/shaded/protobuf/ByteString;)V +Lcom/google/crypto/tink/proto/KeyTemplate$1; +HSPLcom/google/crypto/tink/proto/KeyTemplate$1;->()V +Lcom/google/crypto/tink/proto/KeyTemplate$Builder; +HSPLcom/google/crypto/tink/proto/KeyTemplate$Builder;->()V +HSPLcom/google/crypto/tink/proto/KeyTemplate$Builder;->(Lcom/google/crypto/tink/proto/KeyTemplate$1;)V +HSPLcom/google/crypto/tink/proto/KeyTemplate$Builder;->setOutputPrefixType(Lcom/google/crypto/tink/proto/OutputPrefixType;)Lcom/google/crypto/tink/proto/KeyTemplate$Builder; +HSPLcom/google/crypto/tink/proto/KeyTemplate$Builder;->setTypeUrl(Ljava/lang/String;)Lcom/google/crypto/tink/proto/KeyTemplate$Builder; +HSPLcom/google/crypto/tink/proto/KeyTemplate$Builder;->setValue(Lcom/google/crypto/tink/shaded/protobuf/ByteString;)Lcom/google/crypto/tink/proto/KeyTemplate$Builder; +Lcom/google/crypto/tink/proto/KeyTemplateOrBuilder; +Lcom/google/crypto/tink/proto/Keyset; +HSPLcom/google/crypto/tink/proto/Keyset;->()V +HSPLcom/google/crypto/tink/proto/Keyset;->()V +HSPLcom/google/crypto/tink/proto/Keyset;->access$1300()Lcom/google/crypto/tink/proto/Keyset; +HSPLcom/google/crypto/tink/proto/Keyset;->access$1400(Lcom/google/crypto/tink/proto/Keyset;I)V +HSPLcom/google/crypto/tink/proto/Keyset;->access$1700(Lcom/google/crypto/tink/proto/Keyset;Lcom/google/crypto/tink/proto/Keyset$Key;)V +HSPLcom/google/crypto/tink/proto/Keyset;->addKey(Lcom/google/crypto/tink/proto/Keyset$Key;)V +HSPLcom/google/crypto/tink/proto/Keyset;->dynamicMethod(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$MethodToInvoke;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/proto/Keyset;->ensureKeyIsMutable()V +HSPLcom/google/crypto/tink/proto/Keyset;->getKey(I)Lcom/google/crypto/tink/proto/Keyset$Key; +HSPLcom/google/crypto/tink/proto/Keyset;->getKeyCount()I +HSPLcom/google/crypto/tink/proto/Keyset;->getKeyList()Ljava/util/List; +HSPLcom/google/crypto/tink/proto/Keyset;->getPrimaryKeyId()I +HSPLcom/google/crypto/tink/proto/Keyset;->newBuilder()Lcom/google/crypto/tink/proto/Keyset$Builder; +HSPLcom/google/crypto/tink/proto/Keyset;->parseFrom([BLcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryLite;)Lcom/google/crypto/tink/proto/Keyset; +HSPLcom/google/crypto/tink/proto/Keyset;->setPrimaryKeyId(I)V +Lcom/google/crypto/tink/proto/Keyset$1; +HSPLcom/google/crypto/tink/proto/Keyset$1;->()V +Lcom/google/crypto/tink/proto/Keyset$Builder; +HSPLcom/google/crypto/tink/proto/Keyset$Builder;->()V +HSPLcom/google/crypto/tink/proto/Keyset$Builder;->(Lcom/google/crypto/tink/proto/Keyset$1;)V +HSPLcom/google/crypto/tink/proto/Keyset$Builder;->addKey(Lcom/google/crypto/tink/proto/Keyset$Key;)Lcom/google/crypto/tink/proto/Keyset$Builder; +HSPLcom/google/crypto/tink/proto/Keyset$Builder;->getKey(I)Lcom/google/crypto/tink/proto/Keyset$Key; +HSPLcom/google/crypto/tink/proto/Keyset$Builder;->getKeyCount()I +HSPLcom/google/crypto/tink/proto/Keyset$Builder;->getKeyList()Ljava/util/List; +HSPLcom/google/crypto/tink/proto/Keyset$Builder;->setPrimaryKeyId(I)Lcom/google/crypto/tink/proto/Keyset$Builder; +Lcom/google/crypto/tink/proto/Keyset$Key; +HSPLcom/google/crypto/tink/proto/Keyset$Key;->()V +HSPLcom/google/crypto/tink/proto/Keyset$Key;->()V +HSPLcom/google/crypto/tink/proto/Keyset$Key;->access$000()Lcom/google/crypto/tink/proto/Keyset$Key; +HSPLcom/google/crypto/tink/proto/Keyset$Key;->access$100(Lcom/google/crypto/tink/proto/Keyset$Key;Lcom/google/crypto/tink/proto/KeyData;)V +HSPLcom/google/crypto/tink/proto/Keyset$Key;->access$1000(Lcom/google/crypto/tink/proto/Keyset$Key;Lcom/google/crypto/tink/proto/OutputPrefixType;)V +HSPLcom/google/crypto/tink/proto/Keyset$Key;->access$500(Lcom/google/crypto/tink/proto/Keyset$Key;Lcom/google/crypto/tink/proto/KeyStatusType;)V +HSPLcom/google/crypto/tink/proto/Keyset$Key;->access$700(Lcom/google/crypto/tink/proto/Keyset$Key;I)V +HSPLcom/google/crypto/tink/proto/Keyset$Key;->dynamicMethod(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$MethodToInvoke;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/proto/Keyset$Key;->getKeyData()Lcom/google/crypto/tink/proto/KeyData; +HSPLcom/google/crypto/tink/proto/Keyset$Key;->getKeyId()I +HSPLcom/google/crypto/tink/proto/Keyset$Key;->getOutputPrefixType()Lcom/google/crypto/tink/proto/OutputPrefixType; +HSPLcom/google/crypto/tink/proto/Keyset$Key;->getStatus()Lcom/google/crypto/tink/proto/KeyStatusType; +HSPLcom/google/crypto/tink/proto/Keyset$Key;->hasKeyData()Z +HSPLcom/google/crypto/tink/proto/Keyset$Key;->newBuilder()Lcom/google/crypto/tink/proto/Keyset$Key$Builder; +HSPLcom/google/crypto/tink/proto/Keyset$Key;->setKeyData(Lcom/google/crypto/tink/proto/KeyData;)V +HSPLcom/google/crypto/tink/proto/Keyset$Key;->setKeyId(I)V +HSPLcom/google/crypto/tink/proto/Keyset$Key;->setOutputPrefixType(Lcom/google/crypto/tink/proto/OutputPrefixType;)V +HSPLcom/google/crypto/tink/proto/Keyset$Key;->setStatus(Lcom/google/crypto/tink/proto/KeyStatusType;)V +Lcom/google/crypto/tink/proto/Keyset$Key$Builder; +HSPLcom/google/crypto/tink/proto/Keyset$Key$Builder;->()V +HSPLcom/google/crypto/tink/proto/Keyset$Key$Builder;->(Lcom/google/crypto/tink/proto/Keyset$1;)V +HSPLcom/google/crypto/tink/proto/Keyset$Key$Builder;->setKeyData(Lcom/google/crypto/tink/proto/KeyData;)Lcom/google/crypto/tink/proto/Keyset$Key$Builder; +HSPLcom/google/crypto/tink/proto/Keyset$Key$Builder;->setKeyId(I)Lcom/google/crypto/tink/proto/Keyset$Key$Builder; +HSPLcom/google/crypto/tink/proto/Keyset$Key$Builder;->setOutputPrefixType(Lcom/google/crypto/tink/proto/OutputPrefixType;)Lcom/google/crypto/tink/proto/Keyset$Key$Builder; +HSPLcom/google/crypto/tink/proto/Keyset$Key$Builder;->setStatus(Lcom/google/crypto/tink/proto/KeyStatusType;)Lcom/google/crypto/tink/proto/Keyset$Key$Builder; +Lcom/google/crypto/tink/proto/Keyset$KeyOrBuilder; +Lcom/google/crypto/tink/proto/KeysetInfo; +HSPLcom/google/crypto/tink/proto/KeysetInfo;->()V +HSPLcom/google/crypto/tink/proto/KeysetInfo;->()V +HSPLcom/google/crypto/tink/proto/KeysetInfo;->access$1300()Lcom/google/crypto/tink/proto/KeysetInfo; +HSPLcom/google/crypto/tink/proto/KeysetInfo;->access$1400(Lcom/google/crypto/tink/proto/KeysetInfo;I)V +HSPLcom/google/crypto/tink/proto/KeysetInfo;->access$1700(Lcom/google/crypto/tink/proto/KeysetInfo;Lcom/google/crypto/tink/proto/KeysetInfo$KeyInfo;)V +HSPLcom/google/crypto/tink/proto/KeysetInfo;->addKeyInfo(Lcom/google/crypto/tink/proto/KeysetInfo$KeyInfo;)V +HSPLcom/google/crypto/tink/proto/KeysetInfo;->dynamicMethod(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$MethodToInvoke;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/proto/KeysetInfo;->ensureKeyInfoIsMutable()V +HSPLcom/google/crypto/tink/proto/KeysetInfo;->getKeyInfo(I)Lcom/google/crypto/tink/proto/KeysetInfo$KeyInfo; +HSPLcom/google/crypto/tink/proto/KeysetInfo;->newBuilder()Lcom/google/crypto/tink/proto/KeysetInfo$Builder; +HSPLcom/google/crypto/tink/proto/KeysetInfo;->setPrimaryKeyId(I)V +Lcom/google/crypto/tink/proto/KeysetInfo$1; +HSPLcom/google/crypto/tink/proto/KeysetInfo$1;->()V +Lcom/google/crypto/tink/proto/KeysetInfo$Builder; +HSPLcom/google/crypto/tink/proto/KeysetInfo$Builder;->()V +HSPLcom/google/crypto/tink/proto/KeysetInfo$Builder;->(Lcom/google/crypto/tink/proto/KeysetInfo$1;)V +HSPLcom/google/crypto/tink/proto/KeysetInfo$Builder;->addKeyInfo(Lcom/google/crypto/tink/proto/KeysetInfo$KeyInfo;)Lcom/google/crypto/tink/proto/KeysetInfo$Builder; +HSPLcom/google/crypto/tink/proto/KeysetInfo$Builder;->setPrimaryKeyId(I)Lcom/google/crypto/tink/proto/KeysetInfo$Builder; +Lcom/google/crypto/tink/proto/KeysetInfo$KeyInfo; +HSPLcom/google/crypto/tink/proto/KeysetInfo$KeyInfo;->()V +HSPLcom/google/crypto/tink/proto/KeysetInfo$KeyInfo;->()V +HSPLcom/google/crypto/tink/proto/KeysetInfo$KeyInfo;->access$000()Lcom/google/crypto/tink/proto/KeysetInfo$KeyInfo; +HSPLcom/google/crypto/tink/proto/KeysetInfo$KeyInfo;->access$100(Lcom/google/crypto/tink/proto/KeysetInfo$KeyInfo;Ljava/lang/String;)V +HSPLcom/google/crypto/tink/proto/KeysetInfo$KeyInfo;->access$1000(Lcom/google/crypto/tink/proto/KeysetInfo$KeyInfo;Lcom/google/crypto/tink/proto/OutputPrefixType;)V +HSPLcom/google/crypto/tink/proto/KeysetInfo$KeyInfo;->access$500(Lcom/google/crypto/tink/proto/KeysetInfo$KeyInfo;Lcom/google/crypto/tink/proto/KeyStatusType;)V +HSPLcom/google/crypto/tink/proto/KeysetInfo$KeyInfo;->access$700(Lcom/google/crypto/tink/proto/KeysetInfo$KeyInfo;I)V +HSPLcom/google/crypto/tink/proto/KeysetInfo$KeyInfo;->dynamicMethod(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$MethodToInvoke;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/proto/KeysetInfo$KeyInfo;->getKeyId()I +HSPLcom/google/crypto/tink/proto/KeysetInfo$KeyInfo;->newBuilder()Lcom/google/crypto/tink/proto/KeysetInfo$KeyInfo$Builder; +HSPLcom/google/crypto/tink/proto/KeysetInfo$KeyInfo;->setKeyId(I)V +HSPLcom/google/crypto/tink/proto/KeysetInfo$KeyInfo;->setOutputPrefixType(Lcom/google/crypto/tink/proto/OutputPrefixType;)V +HSPLcom/google/crypto/tink/proto/KeysetInfo$KeyInfo;->setStatus(Lcom/google/crypto/tink/proto/KeyStatusType;)V +HSPLcom/google/crypto/tink/proto/KeysetInfo$KeyInfo;->setTypeUrl(Ljava/lang/String;)V +Lcom/google/crypto/tink/proto/KeysetInfo$KeyInfo$Builder; +HSPLcom/google/crypto/tink/proto/KeysetInfo$KeyInfo$Builder;->()V +HSPLcom/google/crypto/tink/proto/KeysetInfo$KeyInfo$Builder;->(Lcom/google/crypto/tink/proto/KeysetInfo$1;)V +HSPLcom/google/crypto/tink/proto/KeysetInfo$KeyInfo$Builder;->setKeyId(I)Lcom/google/crypto/tink/proto/KeysetInfo$KeyInfo$Builder; +HSPLcom/google/crypto/tink/proto/KeysetInfo$KeyInfo$Builder;->setOutputPrefixType(Lcom/google/crypto/tink/proto/OutputPrefixType;)Lcom/google/crypto/tink/proto/KeysetInfo$KeyInfo$Builder; +HSPLcom/google/crypto/tink/proto/KeysetInfo$KeyInfo$Builder;->setStatus(Lcom/google/crypto/tink/proto/KeyStatusType;)Lcom/google/crypto/tink/proto/KeysetInfo$KeyInfo$Builder; +HSPLcom/google/crypto/tink/proto/KeysetInfo$KeyInfo$Builder;->setTypeUrl(Ljava/lang/String;)Lcom/google/crypto/tink/proto/KeysetInfo$KeyInfo$Builder; +Lcom/google/crypto/tink/proto/KeysetInfo$KeyInfoOrBuilder; +Lcom/google/crypto/tink/proto/KeysetInfoOrBuilder; +Lcom/google/crypto/tink/proto/KeysetOrBuilder; +Lcom/google/crypto/tink/proto/KmsAeadKey; +Lcom/google/crypto/tink/proto/KmsAeadKeyFormat; +Lcom/google/crypto/tink/proto/KmsAeadKeyFormatOrBuilder; +Lcom/google/crypto/tink/proto/KmsAeadKeyOrBuilder; +Lcom/google/crypto/tink/proto/KmsEnvelopeAeadKey; +Lcom/google/crypto/tink/proto/KmsEnvelopeAeadKeyFormat; +Lcom/google/crypto/tink/proto/KmsEnvelopeAeadKeyFormatOrBuilder; +Lcom/google/crypto/tink/proto/KmsEnvelopeAeadKeyOrBuilder; +Lcom/google/crypto/tink/proto/OutputPrefixType; +HSPLcom/google/crypto/tink/proto/OutputPrefixType;->()V +HSPLcom/google/crypto/tink/proto/OutputPrefixType;->(Ljava/lang/String;II)V +HSPLcom/google/crypto/tink/proto/OutputPrefixType;->forNumber(I)Lcom/google/crypto/tink/proto/OutputPrefixType; +HSPLcom/google/crypto/tink/proto/OutputPrefixType;->getNumber()I +HSPLcom/google/crypto/tink/proto/OutputPrefixType;->values()[Lcom/google/crypto/tink/proto/OutputPrefixType; +Lcom/google/crypto/tink/proto/OutputPrefixType$1; +HSPLcom/google/crypto/tink/proto/OutputPrefixType$1;->()V +Lcom/google/crypto/tink/proto/RegistryConfig; +HSPLcom/google/crypto/tink/proto/RegistryConfig;->()V +HSPLcom/google/crypto/tink/proto/RegistryConfig;->()V +HSPLcom/google/crypto/tink/proto/RegistryConfig;->getDefaultInstance()Lcom/google/crypto/tink/proto/RegistryConfig; +Lcom/google/crypto/tink/proto/RegistryConfigOrBuilder; +Lcom/google/crypto/tink/proto/XChaCha20Poly1305Key; +Lcom/google/crypto/tink/proto/XChaCha20Poly1305KeyFormat; +HSPLcom/google/crypto/tink/proto/XChaCha20Poly1305KeyFormat;->()V +HSPLcom/google/crypto/tink/proto/XChaCha20Poly1305KeyFormat;->()V +HSPLcom/google/crypto/tink/proto/XChaCha20Poly1305KeyFormat;->dynamicMethod(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$MethodToInvoke;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/proto/XChaCha20Poly1305KeyFormat;->getDefaultInstance()Lcom/google/crypto/tink/proto/XChaCha20Poly1305KeyFormat; +Lcom/google/crypto/tink/proto/XChaCha20Poly1305KeyFormat$1; +HSPLcom/google/crypto/tink/proto/XChaCha20Poly1305KeyFormat$1;->()V +Lcom/google/crypto/tink/proto/XChaCha20Poly1305KeyFormatOrBuilder; +Lcom/google/crypto/tink/proto/XChaCha20Poly1305KeyOrBuilder; +Lcom/google/crypto/tink/shaded/protobuf/AbstractMessageLite; +HSPLcom/google/crypto/tink/shaded/protobuf/AbstractMessageLite;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/AbstractMessageLite;->toByteArray()[B +HSPLcom/google/crypto/tink/shaded/protobuf/AbstractMessageLite;->toByteString()Lcom/google/crypto/tink/shaded/protobuf/ByteString; +Lcom/google/crypto/tink/shaded/protobuf/AbstractMessageLite$Builder; +HSPLcom/google/crypto/tink/shaded/protobuf/AbstractMessageLite$Builder;->()V +Lcom/google/crypto/tink/shaded/protobuf/AbstractProtobufList; +HSPLcom/google/crypto/tink/shaded/protobuf/AbstractProtobufList;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/AbstractProtobufList;->ensureIsMutable()V +HSPLcom/google/crypto/tink/shaded/protobuf/AbstractProtobufList;->equals(Ljava/lang/Object;)Z +HSPLcom/google/crypto/tink/shaded/protobuf/AbstractProtobufList;->isModifiable()Z +HSPLcom/google/crypto/tink/shaded/protobuf/AbstractProtobufList;->makeImmutable()V +Lcom/google/crypto/tink/shaded/protobuf/Android; +HSPLcom/google/crypto/tink/shaded/protobuf/Android;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/Android;->getClassForName(Ljava/lang/String;)Ljava/lang/Class; +HSPLcom/google/crypto/tink/shaded/protobuf/Android;->getMemoryClass()Ljava/lang/Class; +HSPLcom/google/crypto/tink/shaded/protobuf/Android;->isOnAndroidDevice()Z +Lcom/google/crypto/tink/shaded/protobuf/ArrayDecoders; +HSPLcom/google/crypto/tink/shaded/protobuf/ArrayDecoders;->decodeBytes([BILcom/google/crypto/tink/shaded/protobuf/ArrayDecoders$Registers;)I +HSPLcom/google/crypto/tink/shaded/protobuf/ArrayDecoders;->decodeMessageField(Lcom/google/crypto/tink/shaded/protobuf/Schema;[BIILcom/google/crypto/tink/shaded/protobuf/ArrayDecoders$Registers;)I +HSPLcom/google/crypto/tink/shaded/protobuf/ArrayDecoders;->decodeMessageList(Lcom/google/crypto/tink/shaded/protobuf/Schema;I[BIILcom/google/crypto/tink/shaded/protobuf/Internal$ProtobufList;Lcom/google/crypto/tink/shaded/protobuf/ArrayDecoders$Registers;)I +HSPLcom/google/crypto/tink/shaded/protobuf/ArrayDecoders;->decodeStringRequireUtf8([BILcom/google/crypto/tink/shaded/protobuf/ArrayDecoders$Registers;)I +HSPLcom/google/crypto/tink/shaded/protobuf/ArrayDecoders;->decodeVarint32(I[BILcom/google/crypto/tink/shaded/protobuf/ArrayDecoders$Registers;)I +HSPLcom/google/crypto/tink/shaded/protobuf/ArrayDecoders;->decodeVarint32([BILcom/google/crypto/tink/shaded/protobuf/ArrayDecoders$Registers;)I +HSPLcom/google/crypto/tink/shaded/protobuf/ArrayDecoders;->mergeMessageField(Ljava/lang/Object;Lcom/google/crypto/tink/shaded/protobuf/Schema;[BIILcom/google/crypto/tink/shaded/protobuf/ArrayDecoders$Registers;)I +Lcom/google/crypto/tink/shaded/protobuf/ArrayDecoders$Registers; +HSPLcom/google/crypto/tink/shaded/protobuf/ArrayDecoders$Registers;->(Lcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryLite;)V +Lcom/google/crypto/tink/shaded/protobuf/ByteOutput; +HSPLcom/google/crypto/tink/shaded/protobuf/ByteOutput;->()V +Lcom/google/crypto/tink/shaded/protobuf/ByteString; +HSPLcom/google/crypto/tink/shaded/protobuf/ByteString;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/ByteString;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/ByteString;->checkRange(III)I +HSPLcom/google/crypto/tink/shaded/protobuf/ByteString;->copyFrom([B)Lcom/google/crypto/tink/shaded/protobuf/ByteString; +HSPLcom/google/crypto/tink/shaded/protobuf/ByteString;->copyFrom([BII)Lcom/google/crypto/tink/shaded/protobuf/ByteString; +HSPLcom/google/crypto/tink/shaded/protobuf/ByteString;->newCodedBuilder(I)Lcom/google/crypto/tink/shaded/protobuf/ByteString$CodedBuilder; +HSPLcom/google/crypto/tink/shaded/protobuf/ByteString;->peekCachedHashCode()I +HSPLcom/google/crypto/tink/shaded/protobuf/ByteString;->toByteArray()[B +Lcom/google/crypto/tink/shaded/protobuf/ByteString$2; +HSPLcom/google/crypto/tink/shaded/protobuf/ByteString$2;->()V +Lcom/google/crypto/tink/shaded/protobuf/ByteString$ByteArrayCopier; +Lcom/google/crypto/tink/shaded/protobuf/ByteString$CodedBuilder; +HSPLcom/google/crypto/tink/shaded/protobuf/ByteString$CodedBuilder;->(I)V +HSPLcom/google/crypto/tink/shaded/protobuf/ByteString$CodedBuilder;->(ILcom/google/crypto/tink/shaded/protobuf/ByteString$1;)V +HSPLcom/google/crypto/tink/shaded/protobuf/ByteString$CodedBuilder;->build()Lcom/google/crypto/tink/shaded/protobuf/ByteString; +HSPLcom/google/crypto/tink/shaded/protobuf/ByteString$CodedBuilder;->getCodedOutput()Lcom/google/crypto/tink/shaded/protobuf/CodedOutputStream; +Lcom/google/crypto/tink/shaded/protobuf/ByteString$LeafByteString; +HSPLcom/google/crypto/tink/shaded/protobuf/ByteString$LeafByteString;->()V +Lcom/google/crypto/tink/shaded/protobuf/ByteString$LiteralByteString; +HSPLcom/google/crypto/tink/shaded/protobuf/ByteString$LiteralByteString;->([B)V +HSPLcom/google/crypto/tink/shaded/protobuf/ByteString$LiteralByteString;->copyToInternal([BIII)V +HSPLcom/google/crypto/tink/shaded/protobuf/ByteString$LiteralByteString;->equals(Ljava/lang/Object;)Z +HSPLcom/google/crypto/tink/shaded/protobuf/ByteString$LiteralByteString;->equalsRange(Lcom/google/crypto/tink/shaded/protobuf/ByteString;II)Z +HSPLcom/google/crypto/tink/shaded/protobuf/ByteString$LiteralByteString;->getOffsetIntoBytes()I +HSPLcom/google/crypto/tink/shaded/protobuf/ByteString$LiteralByteString;->newCodedInput()Lcom/google/crypto/tink/shaded/protobuf/CodedInputStream; +HSPLcom/google/crypto/tink/shaded/protobuf/ByteString$LiteralByteString;->size()I +HSPLcom/google/crypto/tink/shaded/protobuf/ByteString$LiteralByteString;->writeTo(Lcom/google/crypto/tink/shaded/protobuf/ByteOutput;)V +Lcom/google/crypto/tink/shaded/protobuf/ByteString$SystemByteArrayCopier; +HSPLcom/google/crypto/tink/shaded/protobuf/ByteString$SystemByteArrayCopier;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/ByteString$SystemByteArrayCopier;->(Lcom/google/crypto/tink/shaded/protobuf/ByteString$1;)V +HSPLcom/google/crypto/tink/shaded/protobuf/ByteString$SystemByteArrayCopier;->copyFrom([BII)[B +Lcom/google/crypto/tink/shaded/protobuf/CodedInputStream; +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream;->(Lcom/google/crypto/tink/shaded/protobuf/CodedInputStream$1;)V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream;->newInstance(Ljava/io/InputStream;)Lcom/google/crypto/tink/shaded/protobuf/CodedInputStream; +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream;->newInstance(Ljava/io/InputStream;I)Lcom/google/crypto/tink/shaded/protobuf/CodedInputStream; +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream;->newInstance([B)Lcom/google/crypto/tink/shaded/protobuf/CodedInputStream; +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream;->newInstance([BII)Lcom/google/crypto/tink/shaded/protobuf/CodedInputStream; +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream;->newInstance([BIIZ)Lcom/google/crypto/tink/shaded/protobuf/CodedInputStream; +Lcom/google/crypto/tink/shaded/protobuf/CodedInputStream$ArrayDecoder; +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream$ArrayDecoder;->([BIIZ)V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream$ArrayDecoder;->([BIIZLcom/google/crypto/tink/shaded/protobuf/CodedInputStream$1;)V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream$ArrayDecoder;->checkLastTagWas(I)V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream$ArrayDecoder;->getTotalBytesRead()I +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream$ArrayDecoder;->isAtEnd()Z +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream$ArrayDecoder;->pushLimit(I)I +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream$ArrayDecoder;->readBytes()Lcom/google/crypto/tink/shaded/protobuf/ByteString; +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream$ArrayDecoder;->readRawVarint32()I +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream$ArrayDecoder;->readTag()I +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream$ArrayDecoder;->readUInt32()I +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream$ArrayDecoder;->recomputeBufferSizeAfterLimit()V +Lcom/google/crypto/tink/shaded/protobuf/CodedInputStream$StreamDecoder; +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream$StreamDecoder;->(Ljava/io/InputStream;I)V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream$StreamDecoder;->(Ljava/io/InputStream;ILcom/google/crypto/tink/shaded/protobuf/CodedInputStream$1;)V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream$StreamDecoder;->checkLastTagWas(I)V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream$StreamDecoder;->isAtEnd()Z +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream$StreamDecoder;->popLimit(I)V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream$StreamDecoder;->pushLimit(I)I +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream$StreamDecoder;->read(Ljava/io/InputStream;[BII)I +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream$StreamDecoder;->readBytes()Lcom/google/crypto/tink/shaded/protobuf/ByteString; +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream$StreamDecoder;->readEnum()I +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream$StreamDecoder;->readRawByte()B +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream$StreamDecoder;->readRawVarint32()I +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream$StreamDecoder;->readRawVarint64SlowPath()J +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream$StreamDecoder;->readStringRequireUtf8()Ljava/lang/String; +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream$StreamDecoder;->readTag()I +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream$StreamDecoder;->readUInt32()I +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream$StreamDecoder;->recomputeBufferSizeAfterLimit()V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStream$StreamDecoder;->tryRefillBuffer(I)Z +Lcom/google/crypto/tink/shaded/protobuf/CodedInputStream$StreamDecoder$RefillCallback; +Lcom/google/crypto/tink/shaded/protobuf/CodedInputStreamReader; +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStreamReader;->(Lcom/google/crypto/tink/shaded/protobuf/CodedInputStream;)V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStreamReader;->forCodedInput(Lcom/google/crypto/tink/shaded/protobuf/CodedInputStream;)Lcom/google/crypto/tink/shaded/protobuf/CodedInputStreamReader; +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStreamReader;->getFieldNumber()I +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStreamReader;->mergeMessageField(Ljava/lang/Object;Lcom/google/crypto/tink/shaded/protobuf/Schema;Lcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryLite;)V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStreamReader;->mergeMessageFieldInternal(Ljava/lang/Object;Lcom/google/crypto/tink/shaded/protobuf/Schema;Lcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryLite;)V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStreamReader;->readBytes()Lcom/google/crypto/tink/shaded/protobuf/ByteString; +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStreamReader;->readEnum()I +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStreamReader;->readMessage(Lcom/google/crypto/tink/shaded/protobuf/Schema;Lcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryLite;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStreamReader;->readMessageList(Ljava/util/List;Lcom/google/crypto/tink/shaded/protobuf/Schema;Lcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryLite;)V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStreamReader;->readStringRequireUtf8()Ljava/lang/String; +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStreamReader;->readUInt32()I +HSPLcom/google/crypto/tink/shaded/protobuf/CodedInputStreamReader;->requireWireType(I)V +Lcom/google/crypto/tink/shaded/protobuf/CodedOutputStream; +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream;->(Lcom/google/crypto/tink/shaded/protobuf/CodedOutputStream$1;)V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream;->checkNoSpaceLeft()V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream;->computeBytesSize(ILcom/google/crypto/tink/shaded/protobuf/ByteString;)I +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream;->computeBytesSizeNoTag(Lcom/google/crypto/tink/shaded/protobuf/ByteString;)I +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream;->computeEnumSize(II)I +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream;->computeEnumSizeNoTag(I)I +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream;->computeInt32SizeNoTag(I)I +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream;->computeLengthDelimitedFieldSize(I)I +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream;->computeMessageSize(ILcom/google/crypto/tink/shaded/protobuf/MessageLite;Lcom/google/crypto/tink/shaded/protobuf/Schema;)I +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream;->computeMessageSizeNoTag(Lcom/google/crypto/tink/shaded/protobuf/MessageLite;Lcom/google/crypto/tink/shaded/protobuf/Schema;)I +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream;->computeStringSize(ILjava/lang/String;)I +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream;->computeStringSizeNoTag(Ljava/lang/String;)I +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream;->computeTagSize(I)I +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream;->computeUInt32Size(II)I +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream;->computeUInt32SizeNoTag(I)I +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream;->newInstance([B)Lcom/google/crypto/tink/shaded/protobuf/CodedOutputStream; +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream;->newInstance([BII)Lcom/google/crypto/tink/shaded/protobuf/CodedOutputStream; +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream;->writeEnum(II)V +Lcom/google/crypto/tink/shaded/protobuf/CodedOutputStream$ArrayEncoder; +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream$ArrayEncoder;->([BII)V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream$ArrayEncoder;->spaceLeft()I +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream$ArrayEncoder;->write([BII)V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream$ArrayEncoder;->writeBytes(ILcom/google/crypto/tink/shaded/protobuf/ByteString;)V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream$ArrayEncoder;->writeBytesNoTag(Lcom/google/crypto/tink/shaded/protobuf/ByteString;)V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream$ArrayEncoder;->writeInt32(II)V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream$ArrayEncoder;->writeInt32NoTag(I)V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream$ArrayEncoder;->writeLazy([BII)V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream$ArrayEncoder;->writeMessage(ILcom/google/crypto/tink/shaded/protobuf/MessageLite;Lcom/google/crypto/tink/shaded/protobuf/Schema;)V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream$ArrayEncoder;->writeString(ILjava/lang/String;)V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream$ArrayEncoder;->writeStringNoTag(Ljava/lang/String;)V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream$ArrayEncoder;->writeTag(II)V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream$ArrayEncoder;->writeUInt32(II)V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStream$ArrayEncoder;->writeUInt32NoTag(I)V +Lcom/google/crypto/tink/shaded/protobuf/CodedOutputStreamWriter; +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStreamWriter;->(Lcom/google/crypto/tink/shaded/protobuf/CodedOutputStream;)V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStreamWriter;->fieldOrder()Lcom/google/crypto/tink/shaded/protobuf/Writer$FieldOrder; +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStreamWriter;->forCodedOutput(Lcom/google/crypto/tink/shaded/protobuf/CodedOutputStream;)Lcom/google/crypto/tink/shaded/protobuf/CodedOutputStreamWriter; +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStreamWriter;->writeBytes(ILcom/google/crypto/tink/shaded/protobuf/ByteString;)V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStreamWriter;->writeEnum(II)V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStreamWriter;->writeMessage(ILjava/lang/Object;Lcom/google/crypto/tink/shaded/protobuf/Schema;)V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStreamWriter;->writeMessageList(ILjava/util/List;Lcom/google/crypto/tink/shaded/protobuf/Schema;)V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStreamWriter;->writeString(ILjava/lang/String;)V +HSPLcom/google/crypto/tink/shaded/protobuf/CodedOutputStreamWriter;->writeUInt32(II)V +Lcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryFactory; +HSPLcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryFactory;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryFactory;->createEmpty()Lcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryLite; +HSPLcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryFactory;->invokeSubclassFactory(Ljava/lang/String;)Lcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryLite; +HSPLcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryFactory;->reflectExtensionRegistry()Ljava/lang/Class; +Lcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryLite; +HSPLcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryLite;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryLite;->(Z)V +HSPLcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryLite;->getEmptyRegistry()Lcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryLite; +Lcom/google/crypto/tink/shaded/protobuf/ExtensionSchema; +Lcom/google/crypto/tink/shaded/protobuf/FieldType; +HSPLcom/google/crypto/tink/shaded/protobuf/FieldType;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/FieldType;->(Ljava/lang/String;IILcom/google/crypto/tink/shaded/protobuf/FieldType$Collection;Lcom/google/crypto/tink/shaded/protobuf/JavaType;)V +HSPLcom/google/crypto/tink/shaded/protobuf/FieldType;->id()I +HSPLcom/google/crypto/tink/shaded/protobuf/FieldType;->values()[Lcom/google/crypto/tink/shaded/protobuf/FieldType; +Lcom/google/crypto/tink/shaded/protobuf/FieldType$1; +HSPLcom/google/crypto/tink/shaded/protobuf/FieldType$1;->()V +Lcom/google/crypto/tink/shaded/protobuf/FieldType$Collection; +HSPLcom/google/crypto/tink/shaded/protobuf/FieldType$Collection;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/FieldType$Collection;->(Ljava/lang/String;IZ)V +HSPLcom/google/crypto/tink/shaded/protobuf/FieldType$Collection;->values()[Lcom/google/crypto/tink/shaded/protobuf/FieldType$Collection; +Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageInfoFactory; +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageInfoFactory;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageInfoFactory;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageInfoFactory;->getInstance()Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageInfoFactory; +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageInfoFactory;->isSupported(Ljava/lang/Class;)Z +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageInfoFactory;->messageInfoFor(Ljava/lang/Class;)Lcom/google/crypto/tink/shaded/protobuf/MessageInfo; +Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite; +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->buildMessageInfo()Ljava/lang/Object; +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->checkMessageInitialized(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;)Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite; +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->clearMemoizedHashCode()V +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->clearMemoizedSerializedSize()V +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->computeSerializedSize(Lcom/google/crypto/tink/shaded/protobuf/Schema;)I +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->createBuilder()Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$Builder; +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->dynamicMethod(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$MethodToInvoke;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->emptyProtobufList()Lcom/google/crypto/tink/shaded/protobuf/Internal$ProtobufList; +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->equals(Ljava/lang/Object;)Z +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->getDefaultInstance(Ljava/lang/Class;)Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite; +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->getMemoizedSerializedSize()I +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->getSerializedSize()I +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->getSerializedSize(Lcom/google/crypto/tink/shaded/protobuf/Schema;)I +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->isInitialized()Z +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->isInitialized(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;Z)Z +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->isMutable()Z +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->makeImmutable()V +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->markImmutable()V +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->mutableCopy(Lcom/google/crypto/tink/shaded/protobuf/Internal$ProtobufList;)Lcom/google/crypto/tink/shaded/protobuf/Internal$ProtobufList; +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->newMessageInfo(Lcom/google/crypto/tink/shaded/protobuf/MessageLite;Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->newMutableInstance()Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite; +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->parseFrom(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;Lcom/google/crypto/tink/shaded/protobuf/ByteString;Lcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryLite;)Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite; +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->parseFrom(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;Ljava/io/InputStream;Lcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryLite;)Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite; +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->parseFrom(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;[BLcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryLite;)Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite; +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->parsePartialFrom(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;Lcom/google/crypto/tink/shaded/protobuf/ByteString;Lcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryLite;)Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite; +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->parsePartialFrom(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;Lcom/google/crypto/tink/shaded/protobuf/CodedInputStream;Lcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryLite;)Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite; +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->parsePartialFrom(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;[BIILcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryLite;)Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite; +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->registerDefaultInstance(Ljava/lang/Class;Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;)V +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->setMemoizedSerializedSize(I)V +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->toBuilder()Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$Builder; +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;->writeTo(Lcom/google/crypto/tink/shaded/protobuf/CodedOutputStream;)V +Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$Builder; +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$Builder;->(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;)V +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$Builder;->build()Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite; +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$Builder;->buildPartial()Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite; +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$Builder;->copyOnWrite()V +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$Builder;->copyOnWriteInternal()V +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$Builder;->getDefaultInstanceForType()Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite; +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$Builder;->mergeFrom(Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite;)Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$Builder; +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$Builder;->mergeFromInstance(Ljava/lang/Object;Ljava/lang/Object;)V +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$Builder;->newMutableInstance()Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite; +Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$MethodToInvoke; +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$MethodToInvoke;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$MethodToInvoke;->(Ljava/lang/String;I)V +HSPLcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$MethodToInvoke;->values()[Lcom/google/crypto/tink/shaded/protobuf/GeneratedMessageLite$MethodToInvoke; +Lcom/google/crypto/tink/shaded/protobuf/Internal; +HSPLcom/google/crypto/tink/shaded/protobuf/Internal;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/Internal;->checkNotNull(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object; +Lcom/google/crypto/tink/shaded/protobuf/Internal$EnumLite; +Lcom/google/crypto/tink/shaded/protobuf/Internal$EnumLiteMap; +Lcom/google/crypto/tink/shaded/protobuf/Internal$EnumVerifier; +Lcom/google/crypto/tink/shaded/protobuf/Internal$ProtobufList; +Lcom/google/crypto/tink/shaded/protobuf/InvalidProtocolBufferException; +Lcom/google/crypto/tink/shaded/protobuf/InvalidProtocolBufferException$InvalidWireTypeException; +Lcom/google/crypto/tink/shaded/protobuf/JavaType; +HSPLcom/google/crypto/tink/shaded/protobuf/JavaType;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/JavaType;->(Ljava/lang/String;ILjava/lang/Class;Ljava/lang/Class;Ljava/lang/Object;)V +HSPLcom/google/crypto/tink/shaded/protobuf/JavaType;->getBoxedType()Ljava/lang/Class; +HSPLcom/google/crypto/tink/shaded/protobuf/JavaType;->values()[Lcom/google/crypto/tink/shaded/protobuf/JavaType; +Lcom/google/crypto/tink/shaded/protobuf/LazyFieldLite; +Lcom/google/crypto/tink/shaded/protobuf/ListFieldSchema; +HSPLcom/google/crypto/tink/shaded/protobuf/ListFieldSchema;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/ListFieldSchema;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/ListFieldSchema;->(Lcom/google/crypto/tink/shaded/protobuf/ListFieldSchema$1;)V +HSPLcom/google/crypto/tink/shaded/protobuf/ListFieldSchema;->lite()Lcom/google/crypto/tink/shaded/protobuf/ListFieldSchema; +Lcom/google/crypto/tink/shaded/protobuf/ListFieldSchema$ListFieldSchemaFull; +HSPLcom/google/crypto/tink/shaded/protobuf/ListFieldSchema$ListFieldSchemaFull;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/ListFieldSchema$ListFieldSchemaFull;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/ListFieldSchema$ListFieldSchemaFull;->(Lcom/google/crypto/tink/shaded/protobuf/ListFieldSchema$1;)V +Lcom/google/crypto/tink/shaded/protobuf/ListFieldSchema$ListFieldSchemaLite; +HSPLcom/google/crypto/tink/shaded/protobuf/ListFieldSchema$ListFieldSchemaLite;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/ListFieldSchema$ListFieldSchemaLite;->(Lcom/google/crypto/tink/shaded/protobuf/ListFieldSchema$1;)V +HSPLcom/google/crypto/tink/shaded/protobuf/ListFieldSchema$ListFieldSchemaLite;->getProtobufList(Ljava/lang/Object;J)Lcom/google/crypto/tink/shaded/protobuf/Internal$ProtobufList; +HSPLcom/google/crypto/tink/shaded/protobuf/ListFieldSchema$ListFieldSchemaLite;->makeImmutableListAt(Ljava/lang/Object;J)V +HSPLcom/google/crypto/tink/shaded/protobuf/ListFieldSchema$ListFieldSchemaLite;->mergeListsAt(Ljava/lang/Object;Ljava/lang/Object;J)V +HSPLcom/google/crypto/tink/shaded/protobuf/ListFieldSchema$ListFieldSchemaLite;->mutableListAt(Ljava/lang/Object;J)Ljava/util/List; +Lcom/google/crypto/tink/shaded/protobuf/ManifestSchemaFactory; +HSPLcom/google/crypto/tink/shaded/protobuf/ManifestSchemaFactory;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/ManifestSchemaFactory;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/ManifestSchemaFactory;->(Lcom/google/crypto/tink/shaded/protobuf/MessageInfoFactory;)V +HSPLcom/google/crypto/tink/shaded/protobuf/ManifestSchemaFactory;->createSchema(Ljava/lang/Class;)Lcom/google/crypto/tink/shaded/protobuf/Schema; +HSPLcom/google/crypto/tink/shaded/protobuf/ManifestSchemaFactory;->getDefaultMessageInfoFactory()Lcom/google/crypto/tink/shaded/protobuf/MessageInfoFactory; +HSPLcom/google/crypto/tink/shaded/protobuf/ManifestSchemaFactory;->getDescriptorMessageInfoFactory()Lcom/google/crypto/tink/shaded/protobuf/MessageInfoFactory; +HSPLcom/google/crypto/tink/shaded/protobuf/ManifestSchemaFactory;->isProto2(Lcom/google/crypto/tink/shaded/protobuf/MessageInfo;)Z +HSPLcom/google/crypto/tink/shaded/protobuf/ManifestSchemaFactory;->newSchema(Ljava/lang/Class;Lcom/google/crypto/tink/shaded/protobuf/MessageInfo;)Lcom/google/crypto/tink/shaded/protobuf/Schema; +Lcom/google/crypto/tink/shaded/protobuf/ManifestSchemaFactory$1; +HSPLcom/google/crypto/tink/shaded/protobuf/ManifestSchemaFactory$1;->()V +Lcom/google/crypto/tink/shaded/protobuf/ManifestSchemaFactory$CompositeMessageInfoFactory; +HSPLcom/google/crypto/tink/shaded/protobuf/ManifestSchemaFactory$CompositeMessageInfoFactory;->([Lcom/google/crypto/tink/shaded/protobuf/MessageInfoFactory;)V +HSPLcom/google/crypto/tink/shaded/protobuf/ManifestSchemaFactory$CompositeMessageInfoFactory;->messageInfoFor(Ljava/lang/Class;)Lcom/google/crypto/tink/shaded/protobuf/MessageInfo; +Lcom/google/crypto/tink/shaded/protobuf/MapFieldSchema; +Lcom/google/crypto/tink/shaded/protobuf/MapFieldSchemaLite; +HSPLcom/google/crypto/tink/shaded/protobuf/MapFieldSchemaLite;->()V +Lcom/google/crypto/tink/shaded/protobuf/MapFieldSchemas; +HSPLcom/google/crypto/tink/shaded/protobuf/MapFieldSchemas;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/MapFieldSchemas;->lite()Lcom/google/crypto/tink/shaded/protobuf/MapFieldSchema; +HSPLcom/google/crypto/tink/shaded/protobuf/MapFieldSchemas;->loadSchemaForFullRuntime()Lcom/google/crypto/tink/shaded/protobuf/MapFieldSchema; +Lcom/google/crypto/tink/shaded/protobuf/MessageInfo; +Lcom/google/crypto/tink/shaded/protobuf/MessageInfoFactory; +Lcom/google/crypto/tink/shaded/protobuf/MessageLite; +Lcom/google/crypto/tink/shaded/protobuf/MessageLite$Builder; +Lcom/google/crypto/tink/shaded/protobuf/MessageLiteOrBuilder; +Lcom/google/crypto/tink/shaded/protobuf/MessageSchema; +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->([I[Ljava/lang/Object;IILcom/google/crypto/tink/shaded/protobuf/MessageLite;ZZ[IIILcom/google/crypto/tink/shaded/protobuf/NewInstanceSchema;Lcom/google/crypto/tink/shaded/protobuf/ListFieldSchema;Lcom/google/crypto/tink/shaded/protobuf/UnknownFieldSchema;Lcom/google/crypto/tink/shaded/protobuf/ExtensionSchema;Lcom/google/crypto/tink/shaded/protobuf/MapFieldSchema;)V +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->arePresentForEquals(Ljava/lang/Object;Ljava/lang/Object;I)Z +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->checkMutable(Ljava/lang/Object;)V +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->equals(Ljava/lang/Object;Ljava/lang/Object;)Z +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->equals(Ljava/lang/Object;Ljava/lang/Object;I)Z +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->getEnumFieldVerifier(I)Lcom/google/crypto/tink/shaded/protobuf/Internal$EnumVerifier; +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->getMessageFieldSchema(I)Lcom/google/crypto/tink/shaded/protobuf/Schema; +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->getSerializedSize(Ljava/lang/Object;)I +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->getSerializedSizeProto3(Ljava/lang/Object;)I +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->getUnknownFieldsSerializedSize(Lcom/google/crypto/tink/shaded/protobuf/UnknownFieldSchema;Ljava/lang/Object;)I +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->intAt(Ljava/lang/Object;J)I +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->isEnforceUtf8(I)Z +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->isFieldPresent(Ljava/lang/Object;I)Z +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->isMutable(Ljava/lang/Object;)Z +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->listAt(Ljava/lang/Object;J)Ljava/util/List; +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->makeImmutable(Ljava/lang/Object;)V +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->mergeFrom(Ljava/lang/Object;Lcom/google/crypto/tink/shaded/protobuf/Reader;Lcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryLite;)V +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->mergeFrom(Ljava/lang/Object;Ljava/lang/Object;)V +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->mergeFrom(Ljava/lang/Object;[BIILcom/google/crypto/tink/shaded/protobuf/ArrayDecoders$Registers;)V +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->mergeFromHelper(Lcom/google/crypto/tink/shaded/protobuf/UnknownFieldSchema;Lcom/google/crypto/tink/shaded/protobuf/ExtensionSchema;Ljava/lang/Object;Lcom/google/crypto/tink/shaded/protobuf/Reader;Lcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryLite;)V +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->mergeSingleField(Ljava/lang/Object;Ljava/lang/Object;I)V +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->mutableMessageFieldForMerge(Ljava/lang/Object;I)Ljava/lang/Object; +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->newInstance()Ljava/lang/Object; +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->newSchema(Ljava/lang/Class;Lcom/google/crypto/tink/shaded/protobuf/MessageInfo;Lcom/google/crypto/tink/shaded/protobuf/NewInstanceSchema;Lcom/google/crypto/tink/shaded/protobuf/ListFieldSchema;Lcom/google/crypto/tink/shaded/protobuf/UnknownFieldSchema;Lcom/google/crypto/tink/shaded/protobuf/ExtensionSchema;Lcom/google/crypto/tink/shaded/protobuf/MapFieldSchema;)Lcom/google/crypto/tink/shaded/protobuf/MessageSchema; +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->newSchemaForRawMessageInfo(Lcom/google/crypto/tink/shaded/protobuf/RawMessageInfo;Lcom/google/crypto/tink/shaded/protobuf/NewInstanceSchema;Lcom/google/crypto/tink/shaded/protobuf/ListFieldSchema;Lcom/google/crypto/tink/shaded/protobuf/UnknownFieldSchema;Lcom/google/crypto/tink/shaded/protobuf/ExtensionSchema;Lcom/google/crypto/tink/shaded/protobuf/MapFieldSchema;)Lcom/google/crypto/tink/shaded/protobuf/MessageSchema; +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->numberAt(I)I +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->offset(I)J +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->parseProto3Message(Ljava/lang/Object;[BIILcom/google/crypto/tink/shaded/protobuf/ArrayDecoders$Registers;)I +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->positionForFieldNumber(I)I +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->positionForFieldNumber(II)I +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->presenceMaskAndOffsetAt(I)I +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->readMessageList(Ljava/lang/Object;ILcom/google/crypto/tink/shaded/protobuf/Reader;Lcom/google/crypto/tink/shaded/protobuf/Schema;Lcom/google/crypto/tink/shaded/protobuf/ExtensionRegistryLite;)V +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->readString(Ljava/lang/Object;ILcom/google/crypto/tink/shaded/protobuf/Reader;)V +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->reflectField(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/reflect/Field; +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->setFieldPresent(Ljava/lang/Object;I)V +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->slowPositionForFieldNumber(II)I +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->storeMessageField(Ljava/lang/Object;ILjava/lang/Object;)V +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->type(I)I +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->typeAndOffsetAt(I)I +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->writeFieldsInAscendingOrderProto3(Ljava/lang/Object;Lcom/google/crypto/tink/shaded/protobuf/Writer;)V +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->writeString(ILjava/lang/Object;Lcom/google/crypto/tink/shaded/protobuf/Writer;)V +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->writeTo(Ljava/lang/Object;Lcom/google/crypto/tink/shaded/protobuf/Writer;)V +HSPLcom/google/crypto/tink/shaded/protobuf/MessageSchema;->writeUnknownInMessageTo(Lcom/google/crypto/tink/shaded/protobuf/UnknownFieldSchema;Ljava/lang/Object;Lcom/google/crypto/tink/shaded/protobuf/Writer;)V +Lcom/google/crypto/tink/shaded/protobuf/NewInstanceSchema; +Lcom/google/crypto/tink/shaded/protobuf/NewInstanceSchemaLite; +HSPLcom/google/crypto/tink/shaded/protobuf/NewInstanceSchemaLite;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/NewInstanceSchemaLite;->newInstance(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/google/crypto/tink/shaded/protobuf/NewInstanceSchemas; +HSPLcom/google/crypto/tink/shaded/protobuf/NewInstanceSchemas;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/NewInstanceSchemas;->lite()Lcom/google/crypto/tink/shaded/protobuf/NewInstanceSchema; +HSPLcom/google/crypto/tink/shaded/protobuf/NewInstanceSchemas;->loadSchemaForFullRuntime()Lcom/google/crypto/tink/shaded/protobuf/NewInstanceSchema; +Lcom/google/crypto/tink/shaded/protobuf/ProtoSyntax; +HSPLcom/google/crypto/tink/shaded/protobuf/ProtoSyntax;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/ProtoSyntax;->(Ljava/lang/String;I)V +Lcom/google/crypto/tink/shaded/protobuf/Protobuf; +HSPLcom/google/crypto/tink/shaded/protobuf/Protobuf;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/Protobuf;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/Protobuf;->getInstance()Lcom/google/crypto/tink/shaded/protobuf/Protobuf; +HSPLcom/google/crypto/tink/shaded/protobuf/Protobuf;->registerSchema(Ljava/lang/Class;Lcom/google/crypto/tink/shaded/protobuf/Schema;)Lcom/google/crypto/tink/shaded/protobuf/Schema; +HSPLcom/google/crypto/tink/shaded/protobuf/Protobuf;->schemaFor(Ljava/lang/Class;)Lcom/google/crypto/tink/shaded/protobuf/Schema; +HSPLcom/google/crypto/tink/shaded/protobuf/Protobuf;->schemaFor(Ljava/lang/Object;)Lcom/google/crypto/tink/shaded/protobuf/Schema; +Lcom/google/crypto/tink/shaded/protobuf/ProtobufArrayList; +HSPLcom/google/crypto/tink/shaded/protobuf/ProtobufArrayList;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/ProtobufArrayList;->([Ljava/lang/Object;I)V +HSPLcom/google/crypto/tink/shaded/protobuf/ProtobufArrayList;->add(Ljava/lang/Object;)Z +HSPLcom/google/crypto/tink/shaded/protobuf/ProtobufArrayList;->emptyList()Lcom/google/crypto/tink/shaded/protobuf/ProtobufArrayList; +HSPLcom/google/crypto/tink/shaded/protobuf/ProtobufArrayList;->ensureIndexInRange(I)V +HSPLcom/google/crypto/tink/shaded/protobuf/ProtobufArrayList;->get(I)Ljava/lang/Object; +HSPLcom/google/crypto/tink/shaded/protobuf/ProtobufArrayList;->mutableCopyWithCapacity(I)Lcom/google/crypto/tink/shaded/protobuf/Internal$ProtobufList; +HSPLcom/google/crypto/tink/shaded/protobuf/ProtobufArrayList;->mutableCopyWithCapacity(I)Lcom/google/crypto/tink/shaded/protobuf/ProtobufArrayList; +HSPLcom/google/crypto/tink/shaded/protobuf/ProtobufArrayList;->size()I +Lcom/google/crypto/tink/shaded/protobuf/RawMessageInfo; +HSPLcom/google/crypto/tink/shaded/protobuf/RawMessageInfo;->(Lcom/google/crypto/tink/shaded/protobuf/MessageLite;Ljava/lang/String;[Ljava/lang/Object;)V +HSPLcom/google/crypto/tink/shaded/protobuf/RawMessageInfo;->getDefaultInstance()Lcom/google/crypto/tink/shaded/protobuf/MessageLite; +HSPLcom/google/crypto/tink/shaded/protobuf/RawMessageInfo;->getObjects()[Ljava/lang/Object; +HSPLcom/google/crypto/tink/shaded/protobuf/RawMessageInfo;->getStringInfo()Ljava/lang/String; +HSPLcom/google/crypto/tink/shaded/protobuf/RawMessageInfo;->getSyntax()Lcom/google/crypto/tink/shaded/protobuf/ProtoSyntax; +HSPLcom/google/crypto/tink/shaded/protobuf/RawMessageInfo;->isMessageSetWireFormat()Z +Lcom/google/crypto/tink/shaded/protobuf/Reader; +Lcom/google/crypto/tink/shaded/protobuf/Schema; +Lcom/google/crypto/tink/shaded/protobuf/SchemaFactory; +Lcom/google/crypto/tink/shaded/protobuf/SchemaUtil; +HSPLcom/google/crypto/tink/shaded/protobuf/SchemaUtil;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/SchemaUtil;->computeSizeMessage(ILjava/lang/Object;Lcom/google/crypto/tink/shaded/protobuf/Schema;)I +HSPLcom/google/crypto/tink/shaded/protobuf/SchemaUtil;->computeSizeMessageList(ILjava/util/List;Lcom/google/crypto/tink/shaded/protobuf/Schema;)I +HSPLcom/google/crypto/tink/shaded/protobuf/SchemaUtil;->getGeneratedMessageClass()Ljava/lang/Class; +HSPLcom/google/crypto/tink/shaded/protobuf/SchemaUtil;->getUnknownFieldSetSchema(Z)Lcom/google/crypto/tink/shaded/protobuf/UnknownFieldSchema; +HSPLcom/google/crypto/tink/shaded/protobuf/SchemaUtil;->getUnknownFieldSetSchemaClass()Ljava/lang/Class; +HSPLcom/google/crypto/tink/shaded/protobuf/SchemaUtil;->mergeUnknownFields(Lcom/google/crypto/tink/shaded/protobuf/UnknownFieldSchema;Ljava/lang/Object;Ljava/lang/Object;)V +HSPLcom/google/crypto/tink/shaded/protobuf/SchemaUtil;->requireGeneratedMessage(Ljava/lang/Class;)V +HSPLcom/google/crypto/tink/shaded/protobuf/SchemaUtil;->safeEquals(Ljava/lang/Object;Ljava/lang/Object;)Z +HSPLcom/google/crypto/tink/shaded/protobuf/SchemaUtil;->unknownFieldSetLiteSchema()Lcom/google/crypto/tink/shaded/protobuf/UnknownFieldSchema; +HSPLcom/google/crypto/tink/shaded/protobuf/SchemaUtil;->writeMessageList(ILjava/util/List;Lcom/google/crypto/tink/shaded/protobuf/Writer;Lcom/google/crypto/tink/shaded/protobuf/Schema;)V +Lcom/google/crypto/tink/shaded/protobuf/UninitializedMessageException; +Lcom/google/crypto/tink/shaded/protobuf/UnknownFieldSchema; +HSPLcom/google/crypto/tink/shaded/protobuf/UnknownFieldSchema;->()V +Lcom/google/crypto/tink/shaded/protobuf/UnknownFieldSetLite; +HSPLcom/google/crypto/tink/shaded/protobuf/UnknownFieldSetLite;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/UnknownFieldSetLite;->(I[I[Ljava/lang/Object;Z)V +HSPLcom/google/crypto/tink/shaded/protobuf/UnknownFieldSetLite;->equals(Ljava/lang/Object;)Z +HSPLcom/google/crypto/tink/shaded/protobuf/UnknownFieldSetLite;->getDefaultInstance()Lcom/google/crypto/tink/shaded/protobuf/UnknownFieldSetLite; +HSPLcom/google/crypto/tink/shaded/protobuf/UnknownFieldSetLite;->getSerializedSize()I +HSPLcom/google/crypto/tink/shaded/protobuf/UnknownFieldSetLite;->makeImmutable()V +HSPLcom/google/crypto/tink/shaded/protobuf/UnknownFieldSetLite;->writeTo(Lcom/google/crypto/tink/shaded/protobuf/Writer;)V +Lcom/google/crypto/tink/shaded/protobuf/UnknownFieldSetLiteSchema; +HSPLcom/google/crypto/tink/shaded/protobuf/UnknownFieldSetLiteSchema;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/UnknownFieldSetLiteSchema;->getFromMessage(Ljava/lang/Object;)Lcom/google/crypto/tink/shaded/protobuf/UnknownFieldSetLite; +HSPLcom/google/crypto/tink/shaded/protobuf/UnknownFieldSetLiteSchema;->getFromMessage(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/shaded/protobuf/UnknownFieldSetLiteSchema;->getSerializedSize(Lcom/google/crypto/tink/shaded/protobuf/UnknownFieldSetLite;)I +HSPLcom/google/crypto/tink/shaded/protobuf/UnknownFieldSetLiteSchema;->getSerializedSize(Ljava/lang/Object;)I +HSPLcom/google/crypto/tink/shaded/protobuf/UnknownFieldSetLiteSchema;->makeImmutable(Ljava/lang/Object;)V +HSPLcom/google/crypto/tink/shaded/protobuf/UnknownFieldSetLiteSchema;->merge(Lcom/google/crypto/tink/shaded/protobuf/UnknownFieldSetLite;Lcom/google/crypto/tink/shaded/protobuf/UnknownFieldSetLite;)Lcom/google/crypto/tink/shaded/protobuf/UnknownFieldSetLite; +HSPLcom/google/crypto/tink/shaded/protobuf/UnknownFieldSetLiteSchema;->merge(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/shaded/protobuf/UnknownFieldSetLiteSchema;->setToMessage(Ljava/lang/Object;Lcom/google/crypto/tink/shaded/protobuf/UnknownFieldSetLite;)V +HSPLcom/google/crypto/tink/shaded/protobuf/UnknownFieldSetLiteSchema;->setToMessage(Ljava/lang/Object;Ljava/lang/Object;)V +HSPLcom/google/crypto/tink/shaded/protobuf/UnknownFieldSetLiteSchema;->writeTo(Lcom/google/crypto/tink/shaded/protobuf/UnknownFieldSetLite;Lcom/google/crypto/tink/shaded/protobuf/Writer;)V +HSPLcom/google/crypto/tink/shaded/protobuf/UnknownFieldSetLiteSchema;->writeTo(Ljava/lang/Object;Lcom/google/crypto/tink/shaded/protobuf/Writer;)V +Lcom/google/crypto/tink/shaded/protobuf/UnsafeUtil; +HSPLcom/google/crypto/tink/shaded/protobuf/UnsafeUtil;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/UnsafeUtil;->arrayBaseOffset(Ljava/lang/Class;)I +HSPLcom/google/crypto/tink/shaded/protobuf/UnsafeUtil;->arrayIndexScale(Ljava/lang/Class;)I +HSPLcom/google/crypto/tink/shaded/protobuf/UnsafeUtil;->bufferAddressField()Ljava/lang/reflect/Field; +HSPLcom/google/crypto/tink/shaded/protobuf/UnsafeUtil;->determineAndroidSupportByAddressSize(Ljava/lang/Class;)Z +HSPLcom/google/crypto/tink/shaded/protobuf/UnsafeUtil;->field(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/reflect/Field; +HSPLcom/google/crypto/tink/shaded/protobuf/UnsafeUtil;->fieldOffset(Ljava/lang/reflect/Field;)J +HSPLcom/google/crypto/tink/shaded/protobuf/UnsafeUtil;->getInt(Ljava/lang/Object;J)I +HSPLcom/google/crypto/tink/shaded/protobuf/UnsafeUtil;->getMemoryAccessor()Lcom/google/crypto/tink/shaded/protobuf/UnsafeUtil$MemoryAccessor; +HSPLcom/google/crypto/tink/shaded/protobuf/UnsafeUtil;->getObject(Ljava/lang/Object;J)Ljava/lang/Object; +HSPLcom/google/crypto/tink/shaded/protobuf/UnsafeUtil;->getUnsafe()Lsun/misc/Unsafe; +HSPLcom/google/crypto/tink/shaded/protobuf/UnsafeUtil;->hasUnsafeArrayOperations()Z +HSPLcom/google/crypto/tink/shaded/protobuf/UnsafeUtil;->hasUnsafeByteBufferOperations()Z +HSPLcom/google/crypto/tink/shaded/protobuf/UnsafeUtil;->putInt(Ljava/lang/Object;JI)V +HSPLcom/google/crypto/tink/shaded/protobuf/UnsafeUtil;->putObject(Ljava/lang/Object;JLjava/lang/Object;)V +HSPLcom/google/crypto/tink/shaded/protobuf/UnsafeUtil;->supportsUnsafeArrayOperations()Z +HSPLcom/google/crypto/tink/shaded/protobuf/UnsafeUtil;->supportsUnsafeByteBufferOperations()Z +Lcom/google/crypto/tink/shaded/protobuf/UnsafeUtil$1; +HSPLcom/google/crypto/tink/shaded/protobuf/UnsafeUtil$1;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/UnsafeUtil$1;->run()Ljava/lang/Object; +HSPLcom/google/crypto/tink/shaded/protobuf/UnsafeUtil$1;->run()Lsun/misc/Unsafe; +Lcom/google/crypto/tink/shaded/protobuf/UnsafeUtil$Android64MemoryAccessor; +HSPLcom/google/crypto/tink/shaded/protobuf/UnsafeUtil$Android64MemoryAccessor;->(Lsun/misc/Unsafe;)V +HSPLcom/google/crypto/tink/shaded/protobuf/UnsafeUtil$Android64MemoryAccessor;->supportsUnsafeByteBufferOperations()Z +Lcom/google/crypto/tink/shaded/protobuf/UnsafeUtil$MemoryAccessor; +HSPLcom/google/crypto/tink/shaded/protobuf/UnsafeUtil$MemoryAccessor;->(Lsun/misc/Unsafe;)V +HSPLcom/google/crypto/tink/shaded/protobuf/UnsafeUtil$MemoryAccessor;->arrayBaseOffset(Ljava/lang/Class;)I +HSPLcom/google/crypto/tink/shaded/protobuf/UnsafeUtil$MemoryAccessor;->arrayIndexScale(Ljava/lang/Class;)I +HSPLcom/google/crypto/tink/shaded/protobuf/UnsafeUtil$MemoryAccessor;->getInt(Ljava/lang/Object;J)I +HSPLcom/google/crypto/tink/shaded/protobuf/UnsafeUtil$MemoryAccessor;->getObject(Ljava/lang/Object;J)Ljava/lang/Object; +HSPLcom/google/crypto/tink/shaded/protobuf/UnsafeUtil$MemoryAccessor;->objectFieldOffset(Ljava/lang/reflect/Field;)J +HSPLcom/google/crypto/tink/shaded/protobuf/UnsafeUtil$MemoryAccessor;->putInt(Ljava/lang/Object;JI)V +HSPLcom/google/crypto/tink/shaded/protobuf/UnsafeUtil$MemoryAccessor;->putObject(Ljava/lang/Object;JLjava/lang/Object;)V +HSPLcom/google/crypto/tink/shaded/protobuf/UnsafeUtil$MemoryAccessor;->supportsUnsafeArrayOperations()Z +Lcom/google/crypto/tink/shaded/protobuf/Utf8; +HSPLcom/google/crypto/tink/shaded/protobuf/Utf8;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/Utf8;->decodeUtf8([BII)Ljava/lang/String; +HSPLcom/google/crypto/tink/shaded/protobuf/Utf8;->encode(Ljava/lang/CharSequence;[BII)I +HSPLcom/google/crypto/tink/shaded/protobuf/Utf8;->encodedLength(Ljava/lang/CharSequence;)I +Lcom/google/crypto/tink/shaded/protobuf/Utf8$DecodeUtil; +HSPLcom/google/crypto/tink/shaded/protobuf/Utf8$DecodeUtil;->access$400(B)Z +HSPLcom/google/crypto/tink/shaded/protobuf/Utf8$DecodeUtil;->access$500(B[CI)V +HSPLcom/google/crypto/tink/shaded/protobuf/Utf8$DecodeUtil;->handleOneByte(B[CI)V +HSPLcom/google/crypto/tink/shaded/protobuf/Utf8$DecodeUtil;->isOneByte(B)Z +Lcom/google/crypto/tink/shaded/protobuf/Utf8$Processor; +HSPLcom/google/crypto/tink/shaded/protobuf/Utf8$Processor;->()V +Lcom/google/crypto/tink/shaded/protobuf/Utf8$SafeProcessor; +HSPLcom/google/crypto/tink/shaded/protobuf/Utf8$SafeProcessor;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/Utf8$SafeProcessor;->decodeUtf8([BII)Ljava/lang/String; +HSPLcom/google/crypto/tink/shaded/protobuf/Utf8$SafeProcessor;->encodeUtf8(Ljava/lang/CharSequence;[BII)I +Lcom/google/crypto/tink/shaded/protobuf/Utf8$UnpairedSurrogateException; +Lcom/google/crypto/tink/shaded/protobuf/Utf8$UnsafeProcessor; +HSPLcom/google/crypto/tink/shaded/protobuf/Utf8$UnsafeProcessor;->isAvailable()Z +Lcom/google/crypto/tink/shaded/protobuf/WireFormat; +HSPLcom/google/crypto/tink/shaded/protobuf/WireFormat;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/WireFormat;->getTagFieldNumber(I)I +HSPLcom/google/crypto/tink/shaded/protobuf/WireFormat;->getTagWireType(I)I +HSPLcom/google/crypto/tink/shaded/protobuf/WireFormat;->makeTag(II)I +Lcom/google/crypto/tink/shaded/protobuf/Writer; +Lcom/google/crypto/tink/shaded/protobuf/Writer$FieldOrder; +HSPLcom/google/crypto/tink/shaded/protobuf/Writer$FieldOrder;->()V +HSPLcom/google/crypto/tink/shaded/protobuf/Writer$FieldOrder;->(Ljava/lang/String;I)V +Lcom/google/crypto/tink/subtle/AesGcmJce; +HSPLcom/google/crypto/tink/subtle/AesGcmJce;->()V +HSPLcom/google/crypto/tink/subtle/AesGcmJce;->([B)V +HSPLcom/google/crypto/tink/subtle/AesGcmJce;->decrypt([B[B)[B +HSPLcom/google/crypto/tink/subtle/AesGcmJce;->encrypt([B[B)[B +Lcom/google/crypto/tink/subtle/AesSiv; +HSPLcom/google/crypto/tink/subtle/AesSiv;->()V +HSPLcom/google/crypto/tink/subtle/AesSiv;->([B)V +HSPLcom/google/crypto/tink/subtle/AesSiv;->encryptDeterministically([B[B)[B +HSPLcom/google/crypto/tink/subtle/AesSiv;->s2v([[B)[B +Lcom/google/crypto/tink/subtle/Base64; +HSPLcom/google/crypto/tink/subtle/Base64;->()V +HSPLcom/google/crypto/tink/subtle/Base64;->decode(Ljava/lang/String;I)[B +HSPLcom/google/crypto/tink/subtle/Base64;->decode([BI)[B +HSPLcom/google/crypto/tink/subtle/Base64;->decode([BIII)[B +HSPLcom/google/crypto/tink/subtle/Base64;->encode([B)Ljava/lang/String; +HSPLcom/google/crypto/tink/subtle/Base64;->encode([BI)[B +HSPLcom/google/crypto/tink/subtle/Base64;->encode([BIII)[B +HSPLcom/google/crypto/tink/subtle/Base64;->encodeToString([BI)Ljava/lang/String; +Lcom/google/crypto/tink/subtle/Base64$Coder; +HSPLcom/google/crypto/tink/subtle/Base64$Coder;->()V +Lcom/google/crypto/tink/subtle/Base64$Decoder; +HSPLcom/google/crypto/tink/subtle/Base64$Decoder;->()V +HSPLcom/google/crypto/tink/subtle/Base64$Decoder;->(I[B)V +HSPLcom/google/crypto/tink/subtle/Base64$Decoder;->process([BIIZ)Z +Lcom/google/crypto/tink/subtle/Base64$Encoder; +HSPLcom/google/crypto/tink/subtle/Base64$Encoder;->()V +HSPLcom/google/crypto/tink/subtle/Base64$Encoder;->(I[B)V +HSPLcom/google/crypto/tink/subtle/Base64$Encoder;->process([BIIZ)Z +Lcom/google/crypto/tink/subtle/Bytes; +HSPLcom/google/crypto/tink/subtle/Bytes;->concat([[B)[B +HSPLcom/google/crypto/tink/subtle/Bytes;->xor([BI[BII)[B +HSPLcom/google/crypto/tink/subtle/Bytes;->xor([B[B)[B +HSPLcom/google/crypto/tink/subtle/Bytes;->xorEnd([B[B)[B +Lcom/google/crypto/tink/subtle/EngineFactory; +HSPLcom/google/crypto/tink/subtle/EngineFactory;->()V +HSPLcom/google/crypto/tink/subtle/EngineFactory;->(Lcom/google/crypto/tink/subtle/EngineWrapper;)V +HSPLcom/google/crypto/tink/subtle/EngineFactory;->getInstance(Ljava/lang/String;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/subtle/EngineFactory;->toProviderList([Ljava/lang/String;)Ljava/util/List; +Lcom/google/crypto/tink/subtle/EngineFactory$AndroidPolicy; +HSPLcom/google/crypto/tink/subtle/EngineFactory$AndroidPolicy;->(Lcom/google/crypto/tink/subtle/EngineWrapper;)V +HSPLcom/google/crypto/tink/subtle/EngineFactory$AndroidPolicy;->(Lcom/google/crypto/tink/subtle/EngineWrapper;Lcom/google/crypto/tink/subtle/EngineFactory$1;)V +HSPLcom/google/crypto/tink/subtle/EngineFactory$AndroidPolicy;->getInstance(Ljava/lang/String;)Ljava/lang/Object; +Lcom/google/crypto/tink/subtle/EngineFactory$Policy; +Lcom/google/crypto/tink/subtle/EngineWrapper; +Lcom/google/crypto/tink/subtle/EngineWrapper$TCipher; +HSPLcom/google/crypto/tink/subtle/EngineWrapper$TCipher;->()V +HSPLcom/google/crypto/tink/subtle/EngineWrapper$TCipher;->getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljava/lang/Object; +HSPLcom/google/crypto/tink/subtle/EngineWrapper$TCipher;->getInstance(Ljava/lang/String;Ljava/security/Provider;)Ljavax/crypto/Cipher; +Lcom/google/crypto/tink/subtle/EngineWrapper$TKeyAgreement; +HSPLcom/google/crypto/tink/subtle/EngineWrapper$TKeyAgreement;->()V +Lcom/google/crypto/tink/subtle/EngineWrapper$TKeyFactory; +HSPLcom/google/crypto/tink/subtle/EngineWrapper$TKeyFactory;->()V +Lcom/google/crypto/tink/subtle/EngineWrapper$TKeyPairGenerator; +HSPLcom/google/crypto/tink/subtle/EngineWrapper$TKeyPairGenerator;->()V +Lcom/google/crypto/tink/subtle/EngineWrapper$TMac; +HSPLcom/google/crypto/tink/subtle/EngineWrapper$TMac;->()V +Lcom/google/crypto/tink/subtle/EngineWrapper$TMessageDigest; +HSPLcom/google/crypto/tink/subtle/EngineWrapper$TMessageDigest;->()V +Lcom/google/crypto/tink/subtle/EngineWrapper$TSignature; +HSPLcom/google/crypto/tink/subtle/EngineWrapper$TSignature;->()V +Lcom/google/crypto/tink/subtle/Hex; +HSPLcom/google/crypto/tink/subtle/Hex;->decode(Ljava/lang/String;)[B +HSPLcom/google/crypto/tink/subtle/Hex;->encode([B)Ljava/lang/String; +Lcom/google/crypto/tink/subtle/PrfAesCmac; +HSPLcom/google/crypto/tink/subtle/PrfAesCmac;->()V +HSPLcom/google/crypto/tink/subtle/PrfAesCmac;->([B)V +HSPLcom/google/crypto/tink/subtle/PrfAesCmac;->compute([BI)[B +HSPLcom/google/crypto/tink/subtle/PrfAesCmac;->generateSubKeys()V +HSPLcom/google/crypto/tink/subtle/PrfAesCmac;->instance()Ljavax/crypto/Cipher; +Lcom/google/crypto/tink/subtle/Random; +HSPLcom/google/crypto/tink/subtle/Random;->()V +HSPLcom/google/crypto/tink/subtle/Random;->access$000()Ljava/security/SecureRandom; +HSPLcom/google/crypto/tink/subtle/Random;->newDefaultSecureRandom()Ljava/security/SecureRandom; +HSPLcom/google/crypto/tink/subtle/Random;->randBytes(I)[B +Lcom/google/crypto/tink/subtle/Random$1; +HSPLcom/google/crypto/tink/subtle/Random$1;->()V +HSPLcom/google/crypto/tink/subtle/Random$1;->initialValue()Ljava/lang/Object; +HSPLcom/google/crypto/tink/subtle/Random$1;->initialValue()Ljava/security/SecureRandom; +Lcom/google/crypto/tink/subtle/SubtleUtil; +HSPLcom/google/crypto/tink/subtle/SubtleUtil;->androidApiLevel()I +HSPLcom/google/crypto/tink/subtle/SubtleUtil;->isAndroid()Z +Lcom/google/crypto/tink/subtle/Validators; +HSPLcom/google/crypto/tink/subtle/Validators;->()V +HSPLcom/google/crypto/tink/subtle/Validators;->validateAesKeySize(I)V +HSPLcom/google/crypto/tink/subtle/Validators;->validateKmsKeyUriAndRemovePrefix(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; +HSPLcom/google/crypto/tink/subtle/Validators;->validateVersion(II)V +Lcom/google/crypto/tink/util/Bytes; +HSPLcom/google/crypto/tink/util/Bytes;->([BII)V +HSPLcom/google/crypto/tink/util/Bytes;->copyFrom([B)Lcom/google/crypto/tink/util/Bytes; +HSPLcom/google/crypto/tink/util/Bytes;->copyFrom([BII)Lcom/google/crypto/tink/util/Bytes; +HSPLcom/google/crypto/tink/util/Bytes;->equals(Ljava/lang/Object;)Z +HSPLcom/google/crypto/tink/util/Bytes;->hashCode()I +HSPLcom/google/crypto/tink/util/Bytes;->size()I +Lcom/google/crypto/tink/util/SecretBytes; +HSPLcom/google/crypto/tink/util/SecretBytes;->(Lcom/google/crypto/tink/util/Bytes;)V +HSPLcom/google/crypto/tink/util/SecretBytes;->copyFrom([BLcom/google/crypto/tink/SecretKeyAccess;)Lcom/google/crypto/tink/util/SecretBytes; +HSPLcom/google/crypto/tink/util/SecretBytes;->size()I +Lcom/google/firebase/AutoValue_StartupTime; +HSPLcom/google/firebase/AutoValue_StartupTime;->(JJJ)V +Lcom/google/firebase/DataCollectionDefaultChange; +Lcom/google/firebase/FirebaseApp; +HSPLcom/google/firebase/FirebaseApp;->()V +HSPLcom/google/firebase/FirebaseApp;->(Landroid/content/Context;Ljava/lang/String;Lcom/google/firebase/FirebaseOptions;)V +HSPLcom/google/firebase/FirebaseApp;->addBackgroundStateChangeListener(Lcom/google/firebase/FirebaseApp$BackgroundStateChangeListener;)V +HSPLcom/google/firebase/FirebaseApp;->checkNotDeleted()V +HSPLcom/google/firebase/FirebaseApp;->get(Ljava/lang/Class;)Ljava/lang/Object; +HSPLcom/google/firebase/FirebaseApp;->getApplicationContext()Landroid/content/Context; +HSPLcom/google/firebase/FirebaseApp;->getInstance()Lcom/google/firebase/FirebaseApp; +HSPLcom/google/firebase/FirebaseApp;->getName()Ljava/lang/String; +HSPLcom/google/firebase/FirebaseApp;->getOptions()Lcom/google/firebase/FirebaseOptions; +HSPLcom/google/firebase/FirebaseApp;->getPersistenceKey()Ljava/lang/String; +HSPLcom/google/firebase/FirebaseApp;->initializeAllApis()V +HSPLcom/google/firebase/FirebaseApp;->initializeApp(Landroid/content/Context;)Lcom/google/firebase/FirebaseApp; +HSPLcom/google/firebase/FirebaseApp;->initializeApp(Landroid/content/Context;Lcom/google/firebase/FirebaseOptions;)Lcom/google/firebase/FirebaseApp; +HSPLcom/google/firebase/FirebaseApp;->initializeApp(Landroid/content/Context;Lcom/google/firebase/FirebaseOptions;Ljava/lang/String;)Lcom/google/firebase/FirebaseApp; +HSPLcom/google/firebase/FirebaseApp;->isDataCollectionDefaultEnabled()Z +HSPLcom/google/firebase/FirebaseApp;->isDefaultApp()Z +HSPLcom/google/firebase/FirebaseApp;->lambda$new$0$com-google-firebase-FirebaseApp(Landroid/content/Context;)Lcom/google/firebase/internal/DataCollectionConfigStorage; +HSPLcom/google/firebase/FirebaseApp;->normalize(Ljava/lang/String;)Ljava/lang/String; +Lcom/google/firebase/FirebaseApp$$ExternalSyntheticLambda0; +HSPLcom/google/firebase/FirebaseApp$$ExternalSyntheticLambda0;->(Lcom/google/firebase/FirebaseApp;Landroid/content/Context;)V +HSPLcom/google/firebase/FirebaseApp$$ExternalSyntheticLambda0;->get()Ljava/lang/Object; +Lcom/google/firebase/FirebaseApp$$ExternalSyntheticLambda1; +HSPLcom/google/firebase/FirebaseApp$$ExternalSyntheticLambda1;->(Lcom/google/firebase/FirebaseApp;)V +Lcom/google/firebase/FirebaseApp$BackgroundStateChangeListener; +Lcom/google/firebase/FirebaseApp$GlobalBackgroundStateListener; +HSPLcom/google/firebase/FirebaseApp$GlobalBackgroundStateListener;->()V +HSPLcom/google/firebase/FirebaseApp$GlobalBackgroundStateListener;->()V +HSPLcom/google/firebase/FirebaseApp$GlobalBackgroundStateListener;->access$000(Landroid/content/Context;)V +HSPLcom/google/firebase/FirebaseApp$GlobalBackgroundStateListener;->ensureBackgroundStateListenerRegistered(Landroid/content/Context;)V +Lcom/google/firebase/FirebaseCommonKtxRegistrar; +HSPLcom/google/firebase/FirebaseCommonKtxRegistrar;->()V +HSPLcom/google/firebase/FirebaseCommonKtxRegistrar;->getComponents()Ljava/util/List; +Lcom/google/firebase/FirebaseCommonKtxRegistrar$getComponents$$inlined$coroutineDispatcher$1; +HSPLcom/google/firebase/FirebaseCommonKtxRegistrar$getComponents$$inlined$coroutineDispatcher$1;->()V +HSPLcom/google/firebase/FirebaseCommonKtxRegistrar$getComponents$$inlined$coroutineDispatcher$1;->()V +HSPLcom/google/firebase/FirebaseCommonKtxRegistrar$getComponents$$inlined$coroutineDispatcher$1;->create(Lcom/google/firebase/components/ComponentContainer;)Ljava/lang/Object; +HSPLcom/google/firebase/FirebaseCommonKtxRegistrar$getComponents$$inlined$coroutineDispatcher$1;->create(Lcom/google/firebase/components/ComponentContainer;)Lkotlinx/coroutines/CoroutineDispatcher; +Lcom/google/firebase/FirebaseCommonKtxRegistrar$getComponents$$inlined$coroutineDispatcher$2; +HSPLcom/google/firebase/FirebaseCommonKtxRegistrar$getComponents$$inlined$coroutineDispatcher$2;->()V +HSPLcom/google/firebase/FirebaseCommonKtxRegistrar$getComponents$$inlined$coroutineDispatcher$2;->()V +Lcom/google/firebase/FirebaseCommonKtxRegistrar$getComponents$$inlined$coroutineDispatcher$3; +HSPLcom/google/firebase/FirebaseCommonKtxRegistrar$getComponents$$inlined$coroutineDispatcher$3;->()V +HSPLcom/google/firebase/FirebaseCommonKtxRegistrar$getComponents$$inlined$coroutineDispatcher$3;->()V +HSPLcom/google/firebase/FirebaseCommonKtxRegistrar$getComponents$$inlined$coroutineDispatcher$3;->create(Lcom/google/firebase/components/ComponentContainer;)Ljava/lang/Object; +HSPLcom/google/firebase/FirebaseCommonKtxRegistrar$getComponents$$inlined$coroutineDispatcher$3;->create(Lcom/google/firebase/components/ComponentContainer;)Lkotlinx/coroutines/CoroutineDispatcher; +Lcom/google/firebase/FirebaseCommonKtxRegistrar$getComponents$$inlined$coroutineDispatcher$4; +HSPLcom/google/firebase/FirebaseCommonKtxRegistrar$getComponents$$inlined$coroutineDispatcher$4;->()V +HSPLcom/google/firebase/FirebaseCommonKtxRegistrar$getComponents$$inlined$coroutineDispatcher$4;->()V +Lcom/google/firebase/FirebaseCommonRegistrar; +HSPLcom/google/firebase/FirebaseCommonRegistrar;->()V +HSPLcom/google/firebase/FirebaseCommonRegistrar;->getComponents()Ljava/util/List; +HSPLcom/google/firebase/FirebaseCommonRegistrar;->lambda$getComponents$0(Landroid/content/Context;)Ljava/lang/String; +HSPLcom/google/firebase/FirebaseCommonRegistrar;->lambda$getComponents$1(Landroid/content/Context;)Ljava/lang/String; +HSPLcom/google/firebase/FirebaseCommonRegistrar;->lambda$getComponents$2(Landroid/content/Context;)Ljava/lang/String; +HSPLcom/google/firebase/FirebaseCommonRegistrar;->lambda$getComponents$3(Landroid/content/Context;)Ljava/lang/String; +HSPLcom/google/firebase/FirebaseCommonRegistrar;->safeValue(Ljava/lang/String;)Ljava/lang/String; +Lcom/google/firebase/FirebaseCommonRegistrar$$ExternalSyntheticLambda0; +HSPLcom/google/firebase/FirebaseCommonRegistrar$$ExternalSyntheticLambda0;->()V +HSPLcom/google/firebase/FirebaseCommonRegistrar$$ExternalSyntheticLambda0;->extract(Ljava/lang/Object;)Ljava/lang/String; +Lcom/google/firebase/FirebaseCommonRegistrar$$ExternalSyntheticLambda1; +HSPLcom/google/firebase/FirebaseCommonRegistrar$$ExternalSyntheticLambda1;->()V +HSPLcom/google/firebase/FirebaseCommonRegistrar$$ExternalSyntheticLambda1;->extract(Ljava/lang/Object;)Ljava/lang/String; +Lcom/google/firebase/FirebaseCommonRegistrar$$ExternalSyntheticLambda2; +HSPLcom/google/firebase/FirebaseCommonRegistrar$$ExternalSyntheticLambda2;->()V +HSPLcom/google/firebase/FirebaseCommonRegistrar$$ExternalSyntheticLambda2;->extract(Ljava/lang/Object;)Ljava/lang/String; +Lcom/google/firebase/FirebaseCommonRegistrar$$ExternalSyntheticLambda3; +HSPLcom/google/firebase/FirebaseCommonRegistrar$$ExternalSyntheticLambda3;->()V +HSPLcom/google/firebase/FirebaseCommonRegistrar$$ExternalSyntheticLambda3;->extract(Ljava/lang/Object;)Ljava/lang/String; +Lcom/google/firebase/FirebaseException; +Lcom/google/firebase/FirebaseOptions; +HSPLcom/google/firebase/FirebaseOptions;->(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V +HSPLcom/google/firebase/FirebaseOptions;->fromResource(Landroid/content/Context;)Lcom/google/firebase/FirebaseOptions; +HSPLcom/google/firebase/FirebaseOptions;->getApplicationId()Ljava/lang/String; +Lcom/google/firebase/StartupTime; +HSPLcom/google/firebase/StartupTime;->()V +HSPLcom/google/firebase/StartupTime;->create(JJJ)Lcom/google/firebase/StartupTime; +HSPLcom/google/firebase/StartupTime;->now()Lcom/google/firebase/StartupTime; +Lcom/google/firebase/analytics/FirebaseAnalytics; +Lcom/google/firebase/analytics/connector/AnalyticsConnector; +Lcom/google/firebase/analytics/connector/AnalyticsConnector$AnalyticsConnectorHandle; +Lcom/google/firebase/analytics/connector/AnalyticsConnector$AnalyticsConnectorListener; +Lcom/google/firebase/analytics/connector/AnalyticsConnectorImpl; +HSPLcom/google/firebase/analytics/connector/AnalyticsConnectorImpl;->(Lcom/google/android/gms/measurement/api/AppMeasurementSdk;)V +HSPLcom/google/firebase/analytics/connector/AnalyticsConnectorImpl;->getInstance(Lcom/google/firebase/FirebaseApp;Landroid/content/Context;Lcom/google/firebase/events/Subscriber;)Lcom/google/firebase/analytics/connector/AnalyticsConnector; +HSPLcom/google/firebase/analytics/connector/AnalyticsConnectorImpl;->registerAnalyticsConnectorListener(Ljava/lang/String;Lcom/google/firebase/analytics/connector/AnalyticsConnector$AnalyticsConnectorListener;)Lcom/google/firebase/analytics/connector/AnalyticsConnector$AnalyticsConnectorHandle; +HSPLcom/google/firebase/analytics/connector/AnalyticsConnectorImpl;->zza(Ljava/lang/String;)Z +Lcom/google/firebase/analytics/connector/AnalyticsConnectorImpl$1; +HSPLcom/google/firebase/analytics/connector/AnalyticsConnectorImpl$1;->(Lcom/google/firebase/analytics/connector/AnalyticsConnectorImpl;Ljava/lang/String;)V +Lcom/google/firebase/analytics/connector/internal/AnalyticsConnectorRegistrar; +HSPLcom/google/firebase/analytics/connector/internal/AnalyticsConnectorRegistrar;->()V +HSPLcom/google/firebase/analytics/connector/internal/AnalyticsConnectorRegistrar;->getComponents()Ljava/util/List; +HSPLcom/google/firebase/analytics/connector/internal/AnalyticsConnectorRegistrar;->lambda$getComponents$0(Lcom/google/firebase/components/ComponentContainer;)Lcom/google/firebase/analytics/connector/AnalyticsConnector; +Lcom/google/firebase/analytics/connector/internal/zza; +Lcom/google/firebase/analytics/connector/internal/zzb; +HSPLcom/google/firebase/analytics/connector/internal/zzb;->()V +HSPLcom/google/firebase/analytics/connector/internal/zzb;->zzf(Ljava/lang/String;)Z +Lcom/google/firebase/analytics/connector/internal/zzc; +HSPLcom/google/firebase/analytics/connector/internal/zzc;->()V +HSPLcom/google/firebase/analytics/connector/internal/zzc;->()V +HSPLcom/google/firebase/analytics/connector/internal/zzc;->create(Lcom/google/firebase/components/ComponentContainer;)Ljava/lang/Object; +Lcom/google/firebase/analytics/connector/internal/zzf; +HSPLcom/google/firebase/analytics/connector/internal/zzf;->(Lcom/google/firebase/analytics/connector/internal/zzg;)V +Lcom/google/firebase/analytics/connector/internal/zzg; +HSPLcom/google/firebase/analytics/connector/internal/zzg;->(Lcom/google/android/gms/measurement/api/AppMeasurementSdk;Lcom/google/firebase/analytics/connector/AnalyticsConnector$AnalyticsConnectorListener;)V +Lcom/google/firebase/analytics/connector/zza; +HSPLcom/google/firebase/analytics/connector/zza;->()V +HSPLcom/google/firebase/analytics/connector/zza;->()V +Lcom/google/firebase/analytics/connector/zzb; +HSPLcom/google/firebase/analytics/connector/zzb;->()V +HSPLcom/google/firebase/analytics/connector/zzb;->()V +Lcom/google/firebase/analytics/ktx/FirebaseAnalyticsLegacyRegistrar; +HSPLcom/google/firebase/analytics/ktx/FirebaseAnalyticsLegacyRegistrar;->()V +HSPLcom/google/firebase/analytics/ktx/FirebaseAnalyticsLegacyRegistrar;->getComponents()Ljava/util/List; +Lcom/google/firebase/annotations/concurrent/Background; +Lcom/google/firebase/annotations/concurrent/Blocking; +Lcom/google/firebase/annotations/concurrent/Lightweight; +Lcom/google/firebase/annotations/concurrent/UiThread; +Lcom/google/firebase/components/Component; +HSPLcom/google/firebase/components/Component;->(Ljava/lang/String;Ljava/util/Set;Ljava/util/Set;IILcom/google/firebase/components/ComponentFactory;Ljava/util/Set;)V +HSPLcom/google/firebase/components/Component;->(Ljava/lang/String;Ljava/util/Set;Ljava/util/Set;IILcom/google/firebase/components/ComponentFactory;Ljava/util/Set;Lcom/google/firebase/components/Component$1;)V +HSPLcom/google/firebase/components/Component;->builder(Lcom/google/firebase/components/Qualified;)Lcom/google/firebase/components/Component$Builder; +HSPLcom/google/firebase/components/Component;->builder(Lcom/google/firebase/components/Qualified;[Lcom/google/firebase/components/Qualified;)Lcom/google/firebase/components/Component$Builder; +HSPLcom/google/firebase/components/Component;->builder(Ljava/lang/Class;)Lcom/google/firebase/components/Component$Builder; +HSPLcom/google/firebase/components/Component;->builder(Ljava/lang/Class;[Ljava/lang/Class;)Lcom/google/firebase/components/Component$Builder; +HSPLcom/google/firebase/components/Component;->getDependencies()Ljava/util/Set; +HSPLcom/google/firebase/components/Component;->getFactory()Lcom/google/firebase/components/ComponentFactory; +HSPLcom/google/firebase/components/Component;->getName()Ljava/lang/String; +HSPLcom/google/firebase/components/Component;->getProvidedInterfaces()Ljava/util/Set; +HSPLcom/google/firebase/components/Component;->getPublishedEvents()Ljava/util/Set; +HSPLcom/google/firebase/components/Component;->intoSet(Ljava/lang/Object;Ljava/lang/Class;)Lcom/google/firebase/components/Component; +HSPLcom/google/firebase/components/Component;->intoSetBuilder(Ljava/lang/Class;)Lcom/google/firebase/components/Component$Builder; +HSPLcom/google/firebase/components/Component;->isAlwaysEager()Z +HSPLcom/google/firebase/components/Component;->isEagerInDefaultApp()Z +HSPLcom/google/firebase/components/Component;->isValue()Z +HSPLcom/google/firebase/components/Component;->lambda$intoSet$3(Ljava/lang/Object;Lcom/google/firebase/components/ComponentContainer;)Ljava/lang/Object; +HSPLcom/google/firebase/components/Component;->lambda$of$1(Ljava/lang/Object;Lcom/google/firebase/components/ComponentContainer;)Ljava/lang/Object; +HSPLcom/google/firebase/components/Component;->of(Ljava/lang/Object;Ljava/lang/Class;[Ljava/lang/Class;)Lcom/google/firebase/components/Component; +HSPLcom/google/firebase/components/Component;->withFactory(Lcom/google/firebase/components/ComponentFactory;)Lcom/google/firebase/components/Component; +Lcom/google/firebase/components/Component$$ExternalSyntheticLambda0; +HSPLcom/google/firebase/components/Component$$ExternalSyntheticLambda0;->(Ljava/lang/Object;)V +HSPLcom/google/firebase/components/Component$$ExternalSyntheticLambda0;->create(Lcom/google/firebase/components/ComponentContainer;)Ljava/lang/Object; +Lcom/google/firebase/components/Component$$ExternalSyntheticLambda1; +HSPLcom/google/firebase/components/Component$$ExternalSyntheticLambda1;->(Ljava/lang/Object;)V +HSPLcom/google/firebase/components/Component$$ExternalSyntheticLambda1;->create(Lcom/google/firebase/components/ComponentContainer;)Ljava/lang/Object; +Lcom/google/firebase/components/Component$Builder; +HSPLcom/google/firebase/components/Component$Builder;->(Lcom/google/firebase/components/Qualified;[Lcom/google/firebase/components/Qualified;)V +HSPLcom/google/firebase/components/Component$Builder;->(Lcom/google/firebase/components/Qualified;[Lcom/google/firebase/components/Qualified;Lcom/google/firebase/components/Component$1;)V +HSPLcom/google/firebase/components/Component$Builder;->(Ljava/lang/Class;[Ljava/lang/Class;)V +HSPLcom/google/firebase/components/Component$Builder;->(Ljava/lang/Class;[Ljava/lang/Class;Lcom/google/firebase/components/Component$1;)V +HSPLcom/google/firebase/components/Component$Builder;->access$200(Lcom/google/firebase/components/Component$Builder;)Lcom/google/firebase/components/Component$Builder; +HSPLcom/google/firebase/components/Component$Builder;->add(Lcom/google/firebase/components/Dependency;)Lcom/google/firebase/components/Component$Builder; +HSPLcom/google/firebase/components/Component$Builder;->build()Lcom/google/firebase/components/Component; +HSPLcom/google/firebase/components/Component$Builder;->eagerInDefaultApp()Lcom/google/firebase/components/Component$Builder; +HSPLcom/google/firebase/components/Component$Builder;->factory(Lcom/google/firebase/components/ComponentFactory;)Lcom/google/firebase/components/Component$Builder; +HSPLcom/google/firebase/components/Component$Builder;->intoSet()Lcom/google/firebase/components/Component$Builder; +HSPLcom/google/firebase/components/Component$Builder;->name(Ljava/lang/String;)Lcom/google/firebase/components/Component$Builder; +HSPLcom/google/firebase/components/Component$Builder;->setInstantiation(I)Lcom/google/firebase/components/Component$Builder; +HSPLcom/google/firebase/components/Component$Builder;->validateInterface(Lcom/google/firebase/components/Qualified;)V +Lcom/google/firebase/components/ComponentContainer; +HSPLcom/google/firebase/components/ComponentContainer;->get(Lcom/google/firebase/components/Qualified;)Ljava/lang/Object; +HSPLcom/google/firebase/components/ComponentContainer;->get(Ljava/lang/Class;)Ljava/lang/Object; +HSPLcom/google/firebase/components/ComponentContainer;->getProvider(Ljava/lang/Class;)Lcom/google/firebase/inject/Provider; +HSPLcom/google/firebase/components/ComponentContainer;->setOf(Lcom/google/firebase/components/Qualified;)Ljava/util/Set; +HSPLcom/google/firebase/components/ComponentContainer;->setOf(Ljava/lang/Class;)Ljava/util/Set; +Lcom/google/firebase/components/ComponentDiscovery; +HSPLcom/google/firebase/components/ComponentDiscovery;->(Ljava/lang/Object;Lcom/google/firebase/components/ComponentDiscovery$RegistrarNameRetriever;)V +HSPLcom/google/firebase/components/ComponentDiscovery;->discoverLazy()Ljava/util/List; +HSPLcom/google/firebase/components/ComponentDiscovery;->forContext(Landroid/content/Context;Ljava/lang/Class;)Lcom/google/firebase/components/ComponentDiscovery; +HSPLcom/google/firebase/components/ComponentDiscovery;->instantiate(Ljava/lang/String;)Lcom/google/firebase/components/ComponentRegistrar; +HSPLcom/google/firebase/components/ComponentDiscovery;->lambda$discoverLazy$0(Ljava/lang/String;)Lcom/google/firebase/components/ComponentRegistrar; +Lcom/google/firebase/components/ComponentDiscovery$$ExternalSyntheticLambda0; +HSPLcom/google/firebase/components/ComponentDiscovery$$ExternalSyntheticLambda0;->(Ljava/lang/String;)V +HSPLcom/google/firebase/components/ComponentDiscovery$$ExternalSyntheticLambda0;->get()Ljava/lang/Object; +Lcom/google/firebase/components/ComponentDiscovery$MetadataRegistrarNameRetriever; +HSPLcom/google/firebase/components/ComponentDiscovery$MetadataRegistrarNameRetriever;->(Ljava/lang/Class;)V +HSPLcom/google/firebase/components/ComponentDiscovery$MetadataRegistrarNameRetriever;->(Ljava/lang/Class;Lcom/google/firebase/components/ComponentDiscovery$1;)V +HSPLcom/google/firebase/components/ComponentDiscovery$MetadataRegistrarNameRetriever;->getMetadata(Landroid/content/Context;)Landroid/os/Bundle; +HSPLcom/google/firebase/components/ComponentDiscovery$MetadataRegistrarNameRetriever;->retrieve(Landroid/content/Context;)Ljava/util/List; +HSPLcom/google/firebase/components/ComponentDiscovery$MetadataRegistrarNameRetriever;->retrieve(Ljava/lang/Object;)Ljava/util/List; +Lcom/google/firebase/components/ComponentDiscovery$RegistrarNameRetriever; +Lcom/google/firebase/components/ComponentDiscoveryService; +Lcom/google/firebase/components/ComponentFactory; +Lcom/google/firebase/components/ComponentRegistrar; +Lcom/google/firebase/components/ComponentRegistrarProcessor; +HSPLcom/google/firebase/components/ComponentRegistrarProcessor;->()V +Lcom/google/firebase/components/ComponentRegistrarProcessor$$ExternalSyntheticLambda0; +HSPLcom/google/firebase/components/ComponentRegistrarProcessor$$ExternalSyntheticLambda0;->()V +HSPLcom/google/firebase/components/ComponentRegistrarProcessor$$ExternalSyntheticLambda0;->processRegistrar(Lcom/google/firebase/components/ComponentRegistrar;)Ljava/util/List; +Lcom/google/firebase/components/ComponentRuntime; +HSPLcom/google/firebase/components/ComponentRuntime;->()V +HSPLcom/google/firebase/components/ComponentRuntime;->(Ljava/util/concurrent/Executor;Ljava/lang/Iterable;Ljava/util/Collection;Lcom/google/firebase/components/ComponentRegistrarProcessor;)V +HSPLcom/google/firebase/components/ComponentRuntime;->(Ljava/util/concurrent/Executor;Ljava/lang/Iterable;Ljava/util/Collection;Lcom/google/firebase/components/ComponentRegistrarProcessor;Lcom/google/firebase/components/ComponentRuntime$1;)V +HSPLcom/google/firebase/components/ComponentRuntime;->builder(Ljava/util/concurrent/Executor;)Lcom/google/firebase/components/ComponentRuntime$Builder; +HSPLcom/google/firebase/components/ComponentRuntime;->discoverComponents(Ljava/util/List;)V +HSPLcom/google/firebase/components/ComponentRuntime;->doInitializeEagerComponents(Ljava/util/Map;Z)V +HSPLcom/google/firebase/components/ComponentRuntime;->getDeferred(Lcom/google/firebase/components/Qualified;)Lcom/google/firebase/inject/Deferred; +HSPLcom/google/firebase/components/ComponentRuntime;->getProvider(Lcom/google/firebase/components/Qualified;)Lcom/google/firebase/inject/Provider; +HSPLcom/google/firebase/components/ComponentRuntime;->initializeEagerComponents(Z)V +HSPLcom/google/firebase/components/ComponentRuntime;->iterableToList(Ljava/lang/Iterable;)Ljava/util/List; +HSPLcom/google/firebase/components/ComponentRuntime;->lambda$discoverComponents$0$com-google-firebase-components-ComponentRuntime(Lcom/google/firebase/components/Component;)Ljava/lang/Object; +HSPLcom/google/firebase/components/ComponentRuntime;->maybeInitializeEagerComponents()V +HSPLcom/google/firebase/components/ComponentRuntime;->processDependencies()V +HSPLcom/google/firebase/components/ComponentRuntime;->processInstanceComponents(Ljava/util/List;)Ljava/util/List; +HSPLcom/google/firebase/components/ComponentRuntime;->processSetComponents()Ljava/util/List; +HSPLcom/google/firebase/components/ComponentRuntime;->setOfProvider(Lcom/google/firebase/components/Qualified;)Lcom/google/firebase/inject/Provider; +Lcom/google/firebase/components/ComponentRuntime$$ExternalSyntheticLambda1; +HSPLcom/google/firebase/components/ComponentRuntime$$ExternalSyntheticLambda1;->(Lcom/google/firebase/components/ComponentRuntime;Lcom/google/firebase/components/Component;)V +HSPLcom/google/firebase/components/ComponentRuntime$$ExternalSyntheticLambda1;->get()Ljava/lang/Object; +Lcom/google/firebase/components/ComponentRuntime$$ExternalSyntheticLambda4; +HSPLcom/google/firebase/components/ComponentRuntime$$ExternalSyntheticLambda4;->()V +Lcom/google/firebase/components/ComponentRuntime$Builder; +HSPLcom/google/firebase/components/ComponentRuntime$Builder;->(Ljava/util/concurrent/Executor;)V +HSPLcom/google/firebase/components/ComponentRuntime$Builder;->addComponent(Lcom/google/firebase/components/Component;)Lcom/google/firebase/components/ComponentRuntime$Builder; +HSPLcom/google/firebase/components/ComponentRuntime$Builder;->addComponentRegistrar(Lcom/google/firebase/components/ComponentRegistrar;)Lcom/google/firebase/components/ComponentRuntime$Builder; +HSPLcom/google/firebase/components/ComponentRuntime$Builder;->addLazyComponentRegistrars(Ljava/util/Collection;)Lcom/google/firebase/components/ComponentRuntime$Builder; +HSPLcom/google/firebase/components/ComponentRuntime$Builder;->build()Lcom/google/firebase/components/ComponentRuntime; +HSPLcom/google/firebase/components/ComponentRuntime$Builder;->lambda$addComponentRegistrar$0(Lcom/google/firebase/components/ComponentRegistrar;)Lcom/google/firebase/components/ComponentRegistrar; +HSPLcom/google/firebase/components/ComponentRuntime$Builder;->setProcessor(Lcom/google/firebase/components/ComponentRegistrarProcessor;)Lcom/google/firebase/components/ComponentRuntime$Builder; +Lcom/google/firebase/components/ComponentRuntime$Builder$$ExternalSyntheticLambda0; +HSPLcom/google/firebase/components/ComponentRuntime$Builder$$ExternalSyntheticLambda0;->(Lcom/google/firebase/components/ComponentRegistrar;)V +HSPLcom/google/firebase/components/ComponentRuntime$Builder$$ExternalSyntheticLambda0;->get()Ljava/lang/Object; +Lcom/google/firebase/components/CycleDetector; +HSPLcom/google/firebase/components/CycleDetector;->detect(Ljava/util/List;)V +HSPLcom/google/firebase/components/CycleDetector;->getRoots(Ljava/util/Set;)Ljava/util/Set; +HSPLcom/google/firebase/components/CycleDetector;->toGraph(Ljava/util/List;)Ljava/util/Set; +Lcom/google/firebase/components/CycleDetector$ComponentNode; +HSPLcom/google/firebase/components/CycleDetector$ComponentNode;->(Lcom/google/firebase/components/Component;)V +HSPLcom/google/firebase/components/CycleDetector$ComponentNode;->addDependency(Lcom/google/firebase/components/CycleDetector$ComponentNode;)V +HSPLcom/google/firebase/components/CycleDetector$ComponentNode;->addDependent(Lcom/google/firebase/components/CycleDetector$ComponentNode;)V +HSPLcom/google/firebase/components/CycleDetector$ComponentNode;->getComponent()Lcom/google/firebase/components/Component; +HSPLcom/google/firebase/components/CycleDetector$ComponentNode;->getDependencies()Ljava/util/Set; +HSPLcom/google/firebase/components/CycleDetector$ComponentNode;->isRoot()Z +HSPLcom/google/firebase/components/CycleDetector$ComponentNode;->removeDependent(Lcom/google/firebase/components/CycleDetector$ComponentNode;)V +Lcom/google/firebase/components/CycleDetector$Dep; +HSPLcom/google/firebase/components/CycleDetector$Dep;->(Lcom/google/firebase/components/Qualified;Z)V +HSPLcom/google/firebase/components/CycleDetector$Dep;->(Lcom/google/firebase/components/Qualified;ZLcom/google/firebase/components/CycleDetector$1;)V +HSPLcom/google/firebase/components/CycleDetector$Dep;->access$100(Lcom/google/firebase/components/CycleDetector$Dep;)Z +HSPLcom/google/firebase/components/CycleDetector$Dep;->equals(Ljava/lang/Object;)Z +HSPLcom/google/firebase/components/CycleDetector$Dep;->hashCode()I +Lcom/google/firebase/components/Dependency; +HSPLcom/google/firebase/components/Dependency;->(Lcom/google/firebase/components/Qualified;II)V +HSPLcom/google/firebase/components/Dependency;->(Ljava/lang/Class;II)V +HSPLcom/google/firebase/components/Dependency;->deferred(Ljava/lang/Class;)Lcom/google/firebase/components/Dependency; +HSPLcom/google/firebase/components/Dependency;->getInterface()Lcom/google/firebase/components/Qualified; +HSPLcom/google/firebase/components/Dependency;->hashCode()I +HSPLcom/google/firebase/components/Dependency;->isDeferred()Z +HSPLcom/google/firebase/components/Dependency;->isDirectInjection()Z +HSPLcom/google/firebase/components/Dependency;->isRequired()Z +HSPLcom/google/firebase/components/Dependency;->isSet()Z +HSPLcom/google/firebase/components/Dependency;->optionalProvider(Ljava/lang/Class;)Lcom/google/firebase/components/Dependency; +HSPLcom/google/firebase/components/Dependency;->required(Lcom/google/firebase/components/Qualified;)Lcom/google/firebase/components/Dependency; +HSPLcom/google/firebase/components/Dependency;->required(Ljava/lang/Class;)Lcom/google/firebase/components/Dependency; +HSPLcom/google/firebase/components/Dependency;->requiredProvider(Lcom/google/firebase/components/Qualified;)Lcom/google/firebase/components/Dependency; +HSPLcom/google/firebase/components/Dependency;->requiredProvider(Ljava/lang/Class;)Lcom/google/firebase/components/Dependency; +HSPLcom/google/firebase/components/Dependency;->setOf(Ljava/lang/Class;)Lcom/google/firebase/components/Dependency; +Lcom/google/firebase/components/EventBus; +HSPLcom/google/firebase/components/EventBus;->(Ljava/util/concurrent/Executor;)V +HSPLcom/google/firebase/components/EventBus;->enablePublishingAndFlushPending()V +HSPLcom/google/firebase/components/EventBus;->subscribe(Ljava/lang/Class;Ljava/util/concurrent/Executor;Lcom/google/firebase/events/EventHandler;)V +Lcom/google/firebase/components/InvalidRegistrarException; +Lcom/google/firebase/components/Lazy; +HSPLcom/google/firebase/components/Lazy;->()V +HSPLcom/google/firebase/components/Lazy;->(Lcom/google/firebase/inject/Provider;)V +HSPLcom/google/firebase/components/Lazy;->get()Ljava/lang/Object; +Lcom/google/firebase/components/LazySet; +HSPLcom/google/firebase/components/LazySet;->(Ljava/util/Collection;)V +HSPLcom/google/firebase/components/LazySet;->fromCollection(Ljava/util/Collection;)Lcom/google/firebase/components/LazySet; +HSPLcom/google/firebase/components/LazySet;->get()Ljava/lang/Object; +HSPLcom/google/firebase/components/LazySet;->get()Ljava/util/Set; +HSPLcom/google/firebase/components/LazySet;->updateSet()V +Lcom/google/firebase/components/OptionalProvider; +HSPLcom/google/firebase/components/OptionalProvider;->()V +HSPLcom/google/firebase/components/OptionalProvider;->(Lcom/google/firebase/inject/Deferred$DeferredHandler;Lcom/google/firebase/inject/Provider;)V +HSPLcom/google/firebase/components/OptionalProvider;->empty()Lcom/google/firebase/components/OptionalProvider; +HSPLcom/google/firebase/components/OptionalProvider;->of(Lcom/google/firebase/inject/Provider;)Lcom/google/firebase/components/OptionalProvider; +HSPLcom/google/firebase/components/OptionalProvider;->whenAvailable(Lcom/google/firebase/inject/Deferred$DeferredHandler;)V +Lcom/google/firebase/components/OptionalProvider$$ExternalSyntheticLambda0; +HSPLcom/google/firebase/components/OptionalProvider$$ExternalSyntheticLambda0;->()V +Lcom/google/firebase/components/OptionalProvider$$ExternalSyntheticLambda1; +HSPLcom/google/firebase/components/OptionalProvider$$ExternalSyntheticLambda1;->()V +Lcom/google/firebase/components/OptionalProvider$$ExternalSyntheticLambda2; +HSPLcom/google/firebase/components/OptionalProvider$$ExternalSyntheticLambda2;->(Lcom/google/firebase/inject/Deferred$DeferredHandler;Lcom/google/firebase/inject/Deferred$DeferredHandler;)V +Lcom/google/firebase/components/Preconditions; +HSPLcom/google/firebase/components/Preconditions;->checkArgument(ZLjava/lang/String;)V +HSPLcom/google/firebase/components/Preconditions;->checkNotNull(Ljava/lang/Object;)Ljava/lang/Object; +HSPLcom/google/firebase/components/Preconditions;->checkNotNull(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object; +HSPLcom/google/firebase/components/Preconditions;->checkState(ZLjava/lang/String;)V +Lcom/google/firebase/components/Qualified; +HSPLcom/google/firebase/components/Qualified;->(Ljava/lang/Class;Ljava/lang/Class;)V +HSPLcom/google/firebase/components/Qualified;->equals(Ljava/lang/Object;)Z +HSPLcom/google/firebase/components/Qualified;->hashCode()I +HSPLcom/google/firebase/components/Qualified;->qualified(Ljava/lang/Class;Ljava/lang/Class;)Lcom/google/firebase/components/Qualified; +HSPLcom/google/firebase/components/Qualified;->toString()Ljava/lang/String; +HSPLcom/google/firebase/components/Qualified;->unqualified(Ljava/lang/Class;)Lcom/google/firebase/components/Qualified; +Lcom/google/firebase/components/Qualified$Unqualified; +Lcom/google/firebase/components/RestrictedComponentContainer; +HSPLcom/google/firebase/components/RestrictedComponentContainer;->(Lcom/google/firebase/components/Component;Lcom/google/firebase/components/ComponentContainer;)V +HSPLcom/google/firebase/components/RestrictedComponentContainer;->get(Lcom/google/firebase/components/Qualified;)Ljava/lang/Object; +HSPLcom/google/firebase/components/RestrictedComponentContainer;->get(Ljava/lang/Class;)Ljava/lang/Object; +HSPLcom/google/firebase/components/RestrictedComponentContainer;->getDeferred(Lcom/google/firebase/components/Qualified;)Lcom/google/firebase/inject/Deferred; +HSPLcom/google/firebase/components/RestrictedComponentContainer;->getDeferred(Ljava/lang/Class;)Lcom/google/firebase/inject/Deferred; +HSPLcom/google/firebase/components/RestrictedComponentContainer;->getProvider(Lcom/google/firebase/components/Qualified;)Lcom/google/firebase/inject/Provider; +HSPLcom/google/firebase/components/RestrictedComponentContainer;->getProvider(Ljava/lang/Class;)Lcom/google/firebase/inject/Provider; +HSPLcom/google/firebase/components/RestrictedComponentContainer;->setOf(Lcom/google/firebase/components/Qualified;)Ljava/util/Set; +Lcom/google/firebase/concurrent/CustomThreadFactory; +HSPLcom/google/firebase/concurrent/CustomThreadFactory;->()V +HSPLcom/google/firebase/concurrent/CustomThreadFactory;->(Ljava/lang/String;ILandroid/os/StrictMode$ThreadPolicy;)V +HSPLcom/google/firebase/concurrent/CustomThreadFactory;->lambda$newThread$0$com-google-firebase-concurrent-CustomThreadFactory(Ljava/lang/Runnable;)V +HSPLcom/google/firebase/concurrent/CustomThreadFactory;->newThread(Ljava/lang/Runnable;)Ljava/lang/Thread; +Lcom/google/firebase/concurrent/CustomThreadFactory$$ExternalSyntheticLambda0; +HSPLcom/google/firebase/concurrent/CustomThreadFactory$$ExternalSyntheticLambda0;->(Lcom/google/firebase/concurrent/CustomThreadFactory;Ljava/lang/Runnable;)V +HSPLcom/google/firebase/concurrent/CustomThreadFactory$$ExternalSyntheticLambda0;->run()V +Lcom/google/firebase/concurrent/DelegatingScheduledExecutorService; +HSPLcom/google/firebase/concurrent/DelegatingScheduledExecutorService;->(Ljava/util/concurrent/ExecutorService;Ljava/util/concurrent/ScheduledExecutorService;)V +HSPLcom/google/firebase/concurrent/DelegatingScheduledExecutorService;->execute(Ljava/lang/Runnable;)V +Lcom/google/firebase/concurrent/ExecutorsRegistrar; +HSPLcom/google/firebase/concurrent/ExecutorsRegistrar;->()V +HSPLcom/google/firebase/concurrent/ExecutorsRegistrar;->()V +HSPLcom/google/firebase/concurrent/ExecutorsRegistrar;->bgPolicy()Landroid/os/StrictMode$ThreadPolicy; +HSPLcom/google/firebase/concurrent/ExecutorsRegistrar;->factory(Ljava/lang/String;I)Ljava/util/concurrent/ThreadFactory; +HSPLcom/google/firebase/concurrent/ExecutorsRegistrar;->factory(Ljava/lang/String;ILandroid/os/StrictMode$ThreadPolicy;)Ljava/util/concurrent/ThreadFactory; +HSPLcom/google/firebase/concurrent/ExecutorsRegistrar;->getComponents()Ljava/util/List; +HSPLcom/google/firebase/concurrent/ExecutorsRegistrar;->lambda$getComponents$4(Lcom/google/firebase/components/ComponentContainer;)Ljava/util/concurrent/ScheduledExecutorService; +HSPLcom/google/firebase/concurrent/ExecutorsRegistrar;->lambda$getComponents$5(Lcom/google/firebase/components/ComponentContainer;)Ljava/util/concurrent/ScheduledExecutorService; +HSPLcom/google/firebase/concurrent/ExecutorsRegistrar;->lambda$static$0()Ljava/util/concurrent/ScheduledExecutorService; +HSPLcom/google/firebase/concurrent/ExecutorsRegistrar;->lambda$static$2()Ljava/util/concurrent/ScheduledExecutorService; +HSPLcom/google/firebase/concurrent/ExecutorsRegistrar;->lambda$static$3()Ljava/util/concurrent/ScheduledExecutorService; +HSPLcom/google/firebase/concurrent/ExecutorsRegistrar;->scheduled(Ljava/util/concurrent/ExecutorService;)Ljava/util/concurrent/ScheduledExecutorService; +Lcom/google/firebase/concurrent/ExecutorsRegistrar$$ExternalSyntheticLambda0; +HSPLcom/google/firebase/concurrent/ExecutorsRegistrar$$ExternalSyntheticLambda0;->()V +HSPLcom/google/firebase/concurrent/ExecutorsRegistrar$$ExternalSyntheticLambda0;->create(Lcom/google/firebase/components/ComponentContainer;)Ljava/lang/Object; +Lcom/google/firebase/concurrent/ExecutorsRegistrar$$ExternalSyntheticLambda1; +HSPLcom/google/firebase/concurrent/ExecutorsRegistrar$$ExternalSyntheticLambda1;->()V +HSPLcom/google/firebase/concurrent/ExecutorsRegistrar$$ExternalSyntheticLambda1;->create(Lcom/google/firebase/components/ComponentContainer;)Ljava/lang/Object; +Lcom/google/firebase/concurrent/ExecutorsRegistrar$$ExternalSyntheticLambda2; +HSPLcom/google/firebase/concurrent/ExecutorsRegistrar$$ExternalSyntheticLambda2;->()V +Lcom/google/firebase/concurrent/ExecutorsRegistrar$$ExternalSyntheticLambda3; +HSPLcom/google/firebase/concurrent/ExecutorsRegistrar$$ExternalSyntheticLambda3;->()V +Lcom/google/firebase/concurrent/ExecutorsRegistrar$$ExternalSyntheticLambda4; +HSPLcom/google/firebase/concurrent/ExecutorsRegistrar$$ExternalSyntheticLambda4;->()V +HSPLcom/google/firebase/concurrent/ExecutorsRegistrar$$ExternalSyntheticLambda4;->get()Ljava/lang/Object; +Lcom/google/firebase/concurrent/ExecutorsRegistrar$$ExternalSyntheticLambda5; +HSPLcom/google/firebase/concurrent/ExecutorsRegistrar$$ExternalSyntheticLambda5;->()V +Lcom/google/firebase/concurrent/ExecutorsRegistrar$$ExternalSyntheticLambda6; +HSPLcom/google/firebase/concurrent/ExecutorsRegistrar$$ExternalSyntheticLambda6;->()V +HSPLcom/google/firebase/concurrent/ExecutorsRegistrar$$ExternalSyntheticLambda6;->get()Ljava/lang/Object; +Lcom/google/firebase/concurrent/ExecutorsRegistrar$$ExternalSyntheticLambda7; +HSPLcom/google/firebase/concurrent/ExecutorsRegistrar$$ExternalSyntheticLambda7;->()V +HSPLcom/google/firebase/concurrent/ExecutorsRegistrar$$ExternalSyntheticLambda7;->get()Ljava/lang/Object; +Lcom/google/firebase/concurrent/FirebaseExecutors; +HSPLcom/google/firebase/concurrent/FirebaseExecutors;->newSequentialExecutor(Ljava/util/concurrent/Executor;)Ljava/util/concurrent/Executor; +Lcom/google/firebase/concurrent/SequentialExecutor; +HSPLcom/google/firebase/concurrent/SequentialExecutor;->()V +HSPLcom/google/firebase/concurrent/SequentialExecutor;->(Ljava/util/concurrent/Executor;)V +Lcom/google/firebase/concurrent/SequentialExecutor$QueueWorker; +HSPLcom/google/firebase/concurrent/SequentialExecutor$QueueWorker;->(Lcom/google/firebase/concurrent/SequentialExecutor;)V +HSPLcom/google/firebase/concurrent/SequentialExecutor$QueueWorker;->(Lcom/google/firebase/concurrent/SequentialExecutor;Lcom/google/firebase/concurrent/SequentialExecutor$1;)V +Lcom/google/firebase/concurrent/SequentialExecutor$WorkerRunningState; +HSPLcom/google/firebase/concurrent/SequentialExecutor$WorkerRunningState;->()V +HSPLcom/google/firebase/concurrent/SequentialExecutor$WorkerRunningState;->(Ljava/lang/String;I)V +Lcom/google/firebase/concurrent/UiExecutor; +HSPLcom/google/firebase/concurrent/UiExecutor;->()V +HSPLcom/google/firebase/concurrent/UiExecutor;->(Ljava/lang/String;I)V +Lcom/google/firebase/crashlytics/AnalyticsDeferredProxy; +HSPLcom/google/firebase/crashlytics/AnalyticsDeferredProxy;->(Lcom/google/firebase/inject/Deferred;)V +HSPLcom/google/firebase/crashlytics/AnalyticsDeferredProxy;->(Lcom/google/firebase/inject/Deferred;Lcom/google/firebase/crashlytics/internal/breadcrumbs/BreadcrumbSource;Lcom/google/firebase/crashlytics/internal/analytics/AnalyticsEventLogger;)V +HSPLcom/google/firebase/crashlytics/AnalyticsDeferredProxy;->getAnalyticsEventLogger()Lcom/google/firebase/crashlytics/internal/analytics/AnalyticsEventLogger; +HSPLcom/google/firebase/crashlytics/AnalyticsDeferredProxy;->getDeferredBreadcrumbSource()Lcom/google/firebase/crashlytics/internal/breadcrumbs/BreadcrumbSource; +HSPLcom/google/firebase/crashlytics/AnalyticsDeferredProxy;->init()V +HSPLcom/google/firebase/crashlytics/AnalyticsDeferredProxy;->lambda$getDeferredBreadcrumbSource$0$com-google-firebase-crashlytics-AnalyticsDeferredProxy(Lcom/google/firebase/crashlytics/internal/breadcrumbs/BreadcrumbHandler;)V +HSPLcom/google/firebase/crashlytics/AnalyticsDeferredProxy;->lambda$init$2$com-google-firebase-crashlytics-AnalyticsDeferredProxy(Lcom/google/firebase/inject/Provider;)V +HSPLcom/google/firebase/crashlytics/AnalyticsDeferredProxy;->subscribeToAnalyticsEvents(Lcom/google/firebase/analytics/connector/AnalyticsConnector;Lcom/google/firebase/crashlytics/CrashlyticsAnalyticsListener;)Lcom/google/firebase/analytics/connector/AnalyticsConnector$AnalyticsConnectorHandle; +Lcom/google/firebase/crashlytics/AnalyticsDeferredProxy$$ExternalSyntheticLambda0; +HSPLcom/google/firebase/crashlytics/AnalyticsDeferredProxy$$ExternalSyntheticLambda0;->(Lcom/google/firebase/crashlytics/AnalyticsDeferredProxy;)V +HSPLcom/google/firebase/crashlytics/AnalyticsDeferredProxy$$ExternalSyntheticLambda0;->registerBreadcrumbHandler(Lcom/google/firebase/crashlytics/internal/breadcrumbs/BreadcrumbHandler;)V +Lcom/google/firebase/crashlytics/AnalyticsDeferredProxy$$ExternalSyntheticLambda1; +HSPLcom/google/firebase/crashlytics/AnalyticsDeferredProxy$$ExternalSyntheticLambda1;->(Lcom/google/firebase/crashlytics/AnalyticsDeferredProxy;)V +Lcom/google/firebase/crashlytics/AnalyticsDeferredProxy$$ExternalSyntheticLambda2; +HSPLcom/google/firebase/crashlytics/AnalyticsDeferredProxy$$ExternalSyntheticLambda2;->(Lcom/google/firebase/crashlytics/AnalyticsDeferredProxy;)V +HSPLcom/google/firebase/crashlytics/AnalyticsDeferredProxy$$ExternalSyntheticLambda2;->handle(Lcom/google/firebase/inject/Provider;)V +Lcom/google/firebase/crashlytics/CrashlyticsAnalyticsListener; +HSPLcom/google/firebase/crashlytics/CrashlyticsAnalyticsListener;->()V +HSPLcom/google/firebase/crashlytics/CrashlyticsAnalyticsListener;->setBreadcrumbEventReceiver(Lcom/google/firebase/crashlytics/internal/analytics/AnalyticsEventReceiver;)V +HSPLcom/google/firebase/crashlytics/CrashlyticsAnalyticsListener;->setCrashlyticsOriginEventReceiver(Lcom/google/firebase/crashlytics/internal/analytics/AnalyticsEventReceiver;)V +Lcom/google/firebase/crashlytics/CrashlyticsRegistrar; +HSPLcom/google/firebase/crashlytics/CrashlyticsRegistrar;->$r8$lambda$Pfd5XmDCFzNyAT9o9H6rDnTBQE4(Lcom/google/firebase/crashlytics/CrashlyticsRegistrar;Lcom/google/firebase/components/ComponentContainer;)Lcom/google/firebase/crashlytics/FirebaseCrashlytics; +HSPLcom/google/firebase/crashlytics/CrashlyticsRegistrar;->()V +HSPLcom/google/firebase/crashlytics/CrashlyticsRegistrar;->()V +HSPLcom/google/firebase/crashlytics/CrashlyticsRegistrar;->buildCrashlytics(Lcom/google/firebase/components/ComponentContainer;)Lcom/google/firebase/crashlytics/FirebaseCrashlytics; +HSPLcom/google/firebase/crashlytics/CrashlyticsRegistrar;->getComponents()Ljava/util/List; +Lcom/google/firebase/crashlytics/CrashlyticsRegistrar$$ExternalSyntheticLambda0; +HSPLcom/google/firebase/crashlytics/CrashlyticsRegistrar$$ExternalSyntheticLambda0;->(Lcom/google/firebase/crashlytics/CrashlyticsRegistrar;)V +HSPLcom/google/firebase/crashlytics/CrashlyticsRegistrar$$ExternalSyntheticLambda0;->create(Lcom/google/firebase/components/ComponentContainer;)Ljava/lang/Object; +Lcom/google/firebase/crashlytics/FirebaseCrashlytics; +HSPLcom/google/firebase/crashlytics/FirebaseCrashlytics;->(Lcom/google/firebase/crashlytics/internal/common/CrashlyticsCore;)V +HSPLcom/google/firebase/crashlytics/FirebaseCrashlytics;->getInstance()Lcom/google/firebase/crashlytics/FirebaseCrashlytics; +HSPLcom/google/firebase/crashlytics/FirebaseCrashlytics;->init(Lcom/google/firebase/FirebaseApp;Lcom/google/firebase/installations/FirebaseInstallationsApi;Lcom/google/firebase/inject/Deferred;Lcom/google/firebase/inject/Deferred;Lcom/google/firebase/inject/Deferred;)Lcom/google/firebase/crashlytics/FirebaseCrashlytics; +HSPLcom/google/firebase/crashlytics/FirebaseCrashlytics;->log(Ljava/lang/String;)V +HSPLcom/google/firebase/crashlytics/FirebaseCrashlytics;->setCrashlyticsCollectionEnabled(Ljava/lang/Boolean;)V +Lcom/google/firebase/crashlytics/FirebaseCrashlytics$1; +HSPLcom/google/firebase/crashlytics/FirebaseCrashlytics$1;->()V +Lcom/google/firebase/crashlytics/FirebaseCrashlytics$2; +HSPLcom/google/firebase/crashlytics/FirebaseCrashlytics$2;->(ZLcom/google/firebase/crashlytics/internal/common/CrashlyticsCore;Lcom/google/firebase/crashlytics/internal/settings/SettingsController;)V +HSPLcom/google/firebase/crashlytics/FirebaseCrashlytics$2;->call()Ljava/lang/Object; +HSPLcom/google/firebase/crashlytics/FirebaseCrashlytics$2;->call()Ljava/lang/Void; +Lcom/google/firebase/crashlytics/FirebaseCrashlyticsKtxRegistrar; +HSPLcom/google/firebase/crashlytics/FirebaseCrashlyticsKtxRegistrar;->()V +HSPLcom/google/firebase/crashlytics/FirebaseCrashlyticsKtxRegistrar;->()V +HSPLcom/google/firebase/crashlytics/FirebaseCrashlyticsKtxRegistrar;->getComponents()Ljava/util/List; +Lcom/google/firebase/crashlytics/FirebaseCrashlyticsKtxRegistrar$Companion; +HSPLcom/google/firebase/crashlytics/FirebaseCrashlyticsKtxRegistrar$Companion;->()V +HSPLcom/google/firebase/crashlytics/FirebaseCrashlyticsKtxRegistrar$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/google/firebase/crashlytics/IsEnabledKt; +HSPLcom/google/firebase/crashlytics/IsEnabledKt;->()V +HSPLcom/google/firebase/crashlytics/IsEnabledKt;->isEnabled(Lcom/google/firebase/crashlytics/FirebaseCrashlytics;)Ljava/lang/Boolean; +HSPLcom/google/firebase/crashlytics/IsEnabledKt;->setEnabled(Lcom/google/firebase/crashlytics/FirebaseCrashlytics;Ljava/lang/Boolean;)V +Lcom/google/firebase/crashlytics/internal/CrashlyticsNativeComponent; +Lcom/google/firebase/crashlytics/internal/CrashlyticsNativeComponentDeferredProxy; +HSPLcom/google/firebase/crashlytics/internal/CrashlyticsNativeComponentDeferredProxy;->()V +HSPLcom/google/firebase/crashlytics/internal/CrashlyticsNativeComponentDeferredProxy;->(Lcom/google/firebase/inject/Deferred;)V +HSPLcom/google/firebase/crashlytics/internal/CrashlyticsNativeComponentDeferredProxy;->hasCrashDataForSession(Ljava/lang/String;)Z +HSPLcom/google/firebase/crashlytics/internal/CrashlyticsNativeComponentDeferredProxy;->prepareNativeSession(Ljava/lang/String;Ljava/lang/String;JLcom/google/firebase/crashlytics/internal/model/StaticSessionData;)V +Lcom/google/firebase/crashlytics/internal/CrashlyticsNativeComponentDeferredProxy$$ExternalSyntheticLambda0; +HSPLcom/google/firebase/crashlytics/internal/CrashlyticsNativeComponentDeferredProxy$$ExternalSyntheticLambda0;->(Lcom/google/firebase/crashlytics/internal/CrashlyticsNativeComponentDeferredProxy;)V +Lcom/google/firebase/crashlytics/internal/CrashlyticsNativeComponentDeferredProxy$$ExternalSyntheticLambda1; +HSPLcom/google/firebase/crashlytics/internal/CrashlyticsNativeComponentDeferredProxy$$ExternalSyntheticLambda1;->(Ljava/lang/String;Ljava/lang/String;JLcom/google/firebase/crashlytics/internal/model/StaticSessionData;)V +Lcom/google/firebase/crashlytics/internal/CrashlyticsNativeComponentDeferredProxy$MissingNativeSessionFileProvider; +HSPLcom/google/firebase/crashlytics/internal/CrashlyticsNativeComponentDeferredProxy$MissingNativeSessionFileProvider;->()V +HSPLcom/google/firebase/crashlytics/internal/CrashlyticsNativeComponentDeferredProxy$MissingNativeSessionFileProvider;->(Lcom/google/firebase/crashlytics/internal/CrashlyticsNativeComponentDeferredProxy$1;)V +Lcom/google/firebase/crashlytics/internal/CrashlyticsRemoteConfigListener; +HSPLcom/google/firebase/crashlytics/internal/CrashlyticsRemoteConfigListener;->(Lcom/google/firebase/crashlytics/internal/metadata/UserMetadata;)V +Lcom/google/firebase/crashlytics/internal/DevelopmentPlatformProvider; +HSPLcom/google/firebase/crashlytics/internal/DevelopmentPlatformProvider;->(Landroid/content/Context;)V +HSPLcom/google/firebase/crashlytics/internal/DevelopmentPlatformProvider;->access$300(Lcom/google/firebase/crashlytics/internal/DevelopmentPlatformProvider;)Landroid/content/Context; +HSPLcom/google/firebase/crashlytics/internal/DevelopmentPlatformProvider;->access$400(Lcom/google/firebase/crashlytics/internal/DevelopmentPlatformProvider;Ljava/lang/String;)Z +HSPLcom/google/firebase/crashlytics/internal/DevelopmentPlatformProvider;->assetFileExists(Ljava/lang/String;)Z +HSPLcom/google/firebase/crashlytics/internal/DevelopmentPlatformProvider;->getDevelopmentPlatform()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/DevelopmentPlatformProvider;->getDevelopmentPlatformVersion()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/DevelopmentPlatformProvider;->initDevelopmentPlatform()Lcom/google/firebase/crashlytics/internal/DevelopmentPlatformProvider$DevelopmentPlatform; +Lcom/google/firebase/crashlytics/internal/DevelopmentPlatformProvider$DevelopmentPlatform; +HSPLcom/google/firebase/crashlytics/internal/DevelopmentPlatformProvider$DevelopmentPlatform;->(Lcom/google/firebase/crashlytics/internal/DevelopmentPlatformProvider;)V +HSPLcom/google/firebase/crashlytics/internal/DevelopmentPlatformProvider$DevelopmentPlatform;->(Lcom/google/firebase/crashlytics/internal/DevelopmentPlatformProvider;Lcom/google/firebase/crashlytics/internal/DevelopmentPlatformProvider$1;)V +HSPLcom/google/firebase/crashlytics/internal/DevelopmentPlatformProvider$DevelopmentPlatform;->access$000(Lcom/google/firebase/crashlytics/internal/DevelopmentPlatformProvider$DevelopmentPlatform;)Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/DevelopmentPlatformProvider$DevelopmentPlatform;->access$100(Lcom/google/firebase/crashlytics/internal/DevelopmentPlatformProvider$DevelopmentPlatform;)Ljava/lang/String; +Lcom/google/firebase/crashlytics/internal/Logger; +HSPLcom/google/firebase/crashlytics/internal/Logger;->()V +HSPLcom/google/firebase/crashlytics/internal/Logger;->(Ljava/lang/String;)V +HSPLcom/google/firebase/crashlytics/internal/Logger;->canLog(I)Z +HSPLcom/google/firebase/crashlytics/internal/Logger;->d(Ljava/lang/String;)V +HSPLcom/google/firebase/crashlytics/internal/Logger;->d(Ljava/lang/String;Ljava/lang/Throwable;)V +HSPLcom/google/firebase/crashlytics/internal/Logger;->getLogger()Lcom/google/firebase/crashlytics/internal/Logger; +HSPLcom/google/firebase/crashlytics/internal/Logger;->i(Ljava/lang/String;)V +HSPLcom/google/firebase/crashlytics/internal/Logger;->i(Ljava/lang/String;Ljava/lang/Throwable;)V +HSPLcom/google/firebase/crashlytics/internal/Logger;->v(Ljava/lang/String;)V +HSPLcom/google/firebase/crashlytics/internal/Logger;->v(Ljava/lang/String;Ljava/lang/Throwable;)V +Lcom/google/firebase/crashlytics/internal/NativeSessionFileProvider; +Lcom/google/firebase/crashlytics/internal/ProcessDetailsProvider; +HSPLcom/google/firebase/crashlytics/internal/ProcessDetailsProvider;->()V +HSPLcom/google/firebase/crashlytics/internal/ProcessDetailsProvider;->()V +Lcom/google/firebase/crashlytics/internal/RemoteConfigDeferredProxy; +HSPLcom/google/firebase/crashlytics/internal/RemoteConfigDeferredProxy;->(Lcom/google/firebase/inject/Deferred;)V +HSPLcom/google/firebase/crashlytics/internal/RemoteConfigDeferredProxy;->setupListener(Lcom/google/firebase/crashlytics/internal/metadata/UserMetadata;)V +Lcom/google/firebase/crashlytics/internal/RemoteConfigDeferredProxy$$ExternalSyntheticLambda0; +HSPLcom/google/firebase/crashlytics/internal/RemoteConfigDeferredProxy$$ExternalSyntheticLambda0;->(Lcom/google/firebase/crashlytics/internal/CrashlyticsRemoteConfigListener;)V +Lcom/google/firebase/crashlytics/internal/analytics/AnalyticsEventLogger; +Lcom/google/firebase/crashlytics/internal/analytics/AnalyticsEventReceiver; +Lcom/google/firebase/crashlytics/internal/analytics/BlockingAnalyticsEventLogger; +HSPLcom/google/firebase/crashlytics/internal/analytics/BlockingAnalyticsEventLogger;->(Lcom/google/firebase/crashlytics/internal/analytics/CrashlyticsOriginAnalyticsEventLogger;ILjava/util/concurrent/TimeUnit;)V +Lcom/google/firebase/crashlytics/internal/analytics/BreadcrumbAnalyticsEventReceiver; +HSPLcom/google/firebase/crashlytics/internal/analytics/BreadcrumbAnalyticsEventReceiver;->()V +HSPLcom/google/firebase/crashlytics/internal/analytics/BreadcrumbAnalyticsEventReceiver;->registerBreadcrumbHandler(Lcom/google/firebase/crashlytics/internal/breadcrumbs/BreadcrumbHandler;)V +Lcom/google/firebase/crashlytics/internal/analytics/CrashlyticsOriginAnalyticsEventLogger; +HSPLcom/google/firebase/crashlytics/internal/analytics/CrashlyticsOriginAnalyticsEventLogger;->(Lcom/google/firebase/analytics/connector/AnalyticsConnector;)V +Lcom/google/firebase/crashlytics/internal/analytics/UnavailableAnalyticsEventLogger; +HSPLcom/google/firebase/crashlytics/internal/analytics/UnavailableAnalyticsEventLogger;->()V +Lcom/google/firebase/crashlytics/internal/breadcrumbs/BreadcrumbHandler; +Lcom/google/firebase/crashlytics/internal/breadcrumbs/BreadcrumbSource; +Lcom/google/firebase/crashlytics/internal/breadcrumbs/DisabledBreadcrumbSource; +HSPLcom/google/firebase/crashlytics/internal/breadcrumbs/DisabledBreadcrumbSource;->()V +Lcom/google/firebase/crashlytics/internal/common/AppData; +HSPLcom/google/firebase/crashlytics/internal/common/AppData;->(Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/google/firebase/crashlytics/internal/DevelopmentPlatformProvider;)V +HSPLcom/google/firebase/crashlytics/internal/common/AppData;->create(Landroid/content/Context;Lcom/google/firebase/crashlytics/internal/common/IdManager;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;Lcom/google/firebase/crashlytics/internal/DevelopmentPlatformProvider;)Lcom/google/firebase/crashlytics/internal/common/AppData; +HSPLcom/google/firebase/crashlytics/internal/common/AppData;->getAppBuildVersion(Landroid/content/pm/PackageInfo;)Ljava/lang/String; +Lcom/google/firebase/crashlytics/internal/common/AutoValue_InstallIdProvider_InstallIds; +HSPLcom/google/firebase/crashlytics/internal/common/AutoValue_InstallIdProvider_InstallIds;->(Ljava/lang/String;Ljava/lang/String;)V +HSPLcom/google/firebase/crashlytics/internal/common/AutoValue_InstallIdProvider_InstallIds;->getCrashlyticsInstallId()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/common/AutoValue_InstallIdProvider_InstallIds;->getFirebaseInstallationId()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/common/AutoValue_InstallIdProvider_InstallIds;->toString()Ljava/lang/String; +Lcom/google/firebase/crashlytics/internal/common/BackgroundPriorityRunnable; +HSPLcom/google/firebase/crashlytics/internal/common/BackgroundPriorityRunnable;->()V +HSPLcom/google/firebase/crashlytics/internal/common/BackgroundPriorityRunnable;->run()V +Lcom/google/firebase/crashlytics/internal/common/CLSUUID; +HSPLcom/google/firebase/crashlytics/internal/common/CLSUUID;->()V +HSPLcom/google/firebase/crashlytics/internal/common/CLSUUID;->(Lcom/google/firebase/crashlytics/internal/common/IdManager;)V +HSPLcom/google/firebase/crashlytics/internal/common/CLSUUID;->convertLongToFourByteBuffer(J)[B +HSPLcom/google/firebase/crashlytics/internal/common/CLSUUID;->convertLongToTwoByteBuffer(J)[B +HSPLcom/google/firebase/crashlytics/internal/common/CLSUUID;->populatePID([B)V +HSPLcom/google/firebase/crashlytics/internal/common/CLSUUID;->populateSequenceNumber([B)V +HSPLcom/google/firebase/crashlytics/internal/common/CLSUUID;->populateTime([B)V +HSPLcom/google/firebase/crashlytics/internal/common/CLSUUID;->toString()Ljava/lang/String; +Lcom/google/firebase/crashlytics/internal/common/CommonUtils; +HSPLcom/google/firebase/crashlytics/internal/common/CommonUtils;->()V +HSPLcom/google/firebase/crashlytics/internal/common/CommonUtils;->calculateTotalRamInBytes(Landroid/content/Context;)J +HSPLcom/google/firebase/crashlytics/internal/common/CommonUtils;->closeOrLog(Ljava/io/Closeable;Ljava/lang/String;)V +HSPLcom/google/firebase/crashlytics/internal/common/CommonUtils;->createInstanceIdFrom([Ljava/lang/String;)Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/common/CommonUtils;->getBooleanResourceValue(Landroid/content/Context;Ljava/lang/String;Z)Z +HSPLcom/google/firebase/crashlytics/internal/common/CommonUtils;->getBuildIdInfo(Landroid/content/Context;)Ljava/util/List; +HSPLcom/google/firebase/crashlytics/internal/common/CommonUtils;->getCpuArchitectureInt()I +HSPLcom/google/firebase/crashlytics/internal/common/CommonUtils;->getDeviceState()I +HSPLcom/google/firebase/crashlytics/internal/common/CommonUtils;->getMappingFileId(Landroid/content/Context;)Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/common/CommonUtils;->getResourcePackageName(Landroid/content/Context;)Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/common/CommonUtils;->getResourcesIdentifier(Landroid/content/Context;Ljava/lang/String;Ljava/lang/String;)I +HSPLcom/google/firebase/crashlytics/internal/common/CommonUtils;->getSharedPrefs(Landroid/content/Context;)Landroid/content/SharedPreferences; +HSPLcom/google/firebase/crashlytics/internal/common/CommonUtils;->hash(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/common/CommonUtils;->hash([BLjava/lang/String;)Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/common/CommonUtils;->hexify([B)Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/common/CommonUtils;->isDebuggerAttached()Z +HSPLcom/google/firebase/crashlytics/internal/common/CommonUtils;->isEmulator()Z +HSPLcom/google/firebase/crashlytics/internal/common/CommonUtils;->isRooted()Z +HSPLcom/google/firebase/crashlytics/internal/common/CommonUtils;->sha1(Ljava/lang/String;)Ljava/lang/String; +Lcom/google/firebase/crashlytics/internal/common/CommonUtils$Architecture; +HSPLcom/google/firebase/crashlytics/internal/common/CommonUtils$Architecture;->()V +HSPLcom/google/firebase/crashlytics/internal/common/CommonUtils$Architecture;->(Ljava/lang/String;I)V +HSPLcom/google/firebase/crashlytics/internal/common/CommonUtils$Architecture;->getValue()Lcom/google/firebase/crashlytics/internal/common/CommonUtils$Architecture; +Lcom/google/firebase/crashlytics/internal/common/CrashlyticsAppQualitySessionsStore; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsAppQualitySessionsStore;->()V +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsAppQualitySessionsStore;->(Lcom/google/firebase/crashlytics/internal/persistence/FileStore;)V +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsAppQualitySessionsStore;->persist(Lcom/google/firebase/crashlytics/internal/persistence/FileStore;Ljava/lang/String;Ljava/lang/String;)V +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsAppQualitySessionsStore;->rotateSessionId(Ljava/lang/String;)V +Lcom/google/firebase/crashlytics/internal/common/CrashlyticsAppQualitySessionsStore$$ExternalSyntheticLambda0; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsAppQualitySessionsStore$$ExternalSyntheticLambda0;->()V +Lcom/google/firebase/crashlytics/internal/common/CrashlyticsAppQualitySessionsStore$$ExternalSyntheticLambda1; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsAppQualitySessionsStore$$ExternalSyntheticLambda1;->()V +Lcom/google/firebase/crashlytics/internal/common/CrashlyticsAppQualitySessionsSubscriber; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsAppQualitySessionsSubscriber;->(Lcom/google/firebase/crashlytics/internal/common/DataCollectionArbiter;Lcom/google/firebase/crashlytics/internal/persistence/FileStore;)V +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsAppQualitySessionsSubscriber;->getSessionSubscriberName()Lcom/google/firebase/sessions/api/SessionSubscriber$Name; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsAppQualitySessionsSubscriber;->isDataCollectionEnabled()Z +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsAppQualitySessionsSubscriber;->setSessionId(Ljava/lang/String;)V +Lcom/google/firebase/crashlytics/internal/common/CrashlyticsBackgroundWorker; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsBackgroundWorker;->(Ljava/util/concurrent/Executor;)V +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsBackgroundWorker;->access$000(Lcom/google/firebase/crashlytics/internal/common/CrashlyticsBackgroundWorker;)Ljava/lang/ThreadLocal; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsBackgroundWorker;->checkRunningOnThread()V +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsBackgroundWorker;->ignoreResult(Lcom/google/android/gms/tasks/Task;)Lcom/google/android/gms/tasks/Task; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsBackgroundWorker;->isRunningOnThread()Z +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsBackgroundWorker;->newContinuation(Ljava/util/concurrent/Callable;)Lcom/google/android/gms/tasks/Continuation; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsBackgroundWorker;->submit(Ljava/util/concurrent/Callable;)Lcom/google/android/gms/tasks/Task; +Lcom/google/firebase/crashlytics/internal/common/CrashlyticsBackgroundWorker$1; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsBackgroundWorker$1;->(Lcom/google/firebase/crashlytics/internal/common/CrashlyticsBackgroundWorker;)V +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsBackgroundWorker$1;->run()V +Lcom/google/firebase/crashlytics/internal/common/CrashlyticsBackgroundWorker$3; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsBackgroundWorker$3;->(Lcom/google/firebase/crashlytics/internal/common/CrashlyticsBackgroundWorker;Ljava/util/concurrent/Callable;)V +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsBackgroundWorker$3;->then(Lcom/google/android/gms/tasks/Task;)Ljava/lang/Object; +Lcom/google/firebase/crashlytics/internal/common/CrashlyticsBackgroundWorker$4; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsBackgroundWorker$4;->(Lcom/google/firebase/crashlytics/internal/common/CrashlyticsBackgroundWorker;)V +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsBackgroundWorker$4;->then(Lcom/google/android/gms/tasks/Task;)Ljava/lang/Object; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsBackgroundWorker$4;->then(Lcom/google/android/gms/tasks/Task;)Ljava/lang/Void; +Lcom/google/firebase/crashlytics/internal/common/CrashlyticsController; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsController;->()V +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsController;->(Landroid/content/Context;Lcom/google/firebase/crashlytics/internal/common/CrashlyticsBackgroundWorker;Lcom/google/firebase/crashlytics/internal/common/IdManager;Lcom/google/firebase/crashlytics/internal/common/DataCollectionArbiter;Lcom/google/firebase/crashlytics/internal/persistence/FileStore;Lcom/google/firebase/crashlytics/internal/common/CrashlyticsFileMarker;Lcom/google/firebase/crashlytics/internal/common/AppData;Lcom/google/firebase/crashlytics/internal/metadata/UserMetadata;Lcom/google/firebase/crashlytics/internal/metadata/LogFileManager;Lcom/google/firebase/crashlytics/internal/common/SessionReportingCoordinator;Lcom/google/firebase/crashlytics/internal/CrashlyticsNativeComponent;Lcom/google/firebase/crashlytics/internal/analytics/AnalyticsEventLogger;Lcom/google/firebase/crashlytics/internal/common/CrashlyticsAppQualitySessionsSubscriber;)V +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsController;->access$1100(Lcom/google/firebase/crashlytics/internal/common/CrashlyticsController;)Lcom/google/firebase/crashlytics/internal/metadata/LogFileManager; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsController;->access$600(Lcom/google/firebase/crashlytics/internal/common/CrashlyticsController;Ljava/lang/String;Ljava/lang/Boolean;)V +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsController;->createAppData(Lcom/google/firebase/crashlytics/internal/common/IdManager;Lcom/google/firebase/crashlytics/internal/common/AppData;)Lcom/google/firebase/crashlytics/internal/model/StaticSessionData$AppData; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsController;->createDeviceData(Landroid/content/Context;)Lcom/google/firebase/crashlytics/internal/model/StaticSessionData$DeviceData; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsController;->createOsData()Lcom/google/firebase/crashlytics/internal/model/StaticSessionData$OsData; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsController;->didCrashOnPreviousExecution()Z +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsController;->doCloseSessions(ZLcom/google/firebase/crashlytics/internal/settings/SettingsProvider;)V +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsController;->doOpenSession(Ljava/lang/String;Ljava/lang/Boolean;)V +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsController;->enableExceptionHandling(Ljava/lang/String;Ljava/lang/Thread$UncaughtExceptionHandler;Lcom/google/firebase/crashlytics/internal/settings/SettingsProvider;)V +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsController;->finalizeSessions(Lcom/google/firebase/crashlytics/internal/settings/SettingsProvider;)Z +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsController;->getCurrentSessionId()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsController;->getCurrentTimestampSeconds()J +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsController;->getResourceAsStream(Ljava/lang/String;)Ljava/io/InputStream; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsController;->getTimestampSeconds(J)J +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsController;->getVersionControlInfo()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsController;->isHandlingException()Z +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsController;->openSession(Ljava/lang/String;)V +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsController;->saveVersionControlInfo()V +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsController;->submitAllReports(Lcom/google/android/gms/tasks/Task;)Lcom/google/android/gms/tasks/Task; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsController;->writeToLog(JLjava/lang/String;)V +Lcom/google/firebase/crashlytics/internal/common/CrashlyticsController$$ExternalSyntheticLambda0; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsController$$ExternalSyntheticLambda0;->()V +Lcom/google/firebase/crashlytics/internal/common/CrashlyticsController$1; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsController$1;->(Lcom/google/firebase/crashlytics/internal/common/CrashlyticsController;)V +Lcom/google/firebase/crashlytics/internal/common/CrashlyticsController$5; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsController$5;->(Lcom/google/firebase/crashlytics/internal/common/CrashlyticsController;JLjava/lang/String;)V +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsController$5;->call()Ljava/lang/Object; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsController$5;->call()Ljava/lang/Void; +Lcom/google/firebase/crashlytics/internal/common/CrashlyticsController$7; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsController$7;->(Lcom/google/firebase/crashlytics/internal/common/CrashlyticsController;Ljava/lang/String;)V +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsController$7;->call()Ljava/lang/Object; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsController$7;->call()Ljava/lang/Void; +Lcom/google/firebase/crashlytics/internal/common/CrashlyticsCore; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsCore;->(Lcom/google/firebase/FirebaseApp;Lcom/google/firebase/crashlytics/internal/common/IdManager;Lcom/google/firebase/crashlytics/internal/CrashlyticsNativeComponent;Lcom/google/firebase/crashlytics/internal/common/DataCollectionArbiter;Lcom/google/firebase/crashlytics/internal/breadcrumbs/BreadcrumbSource;Lcom/google/firebase/crashlytics/internal/analytics/AnalyticsEventLogger;Lcom/google/firebase/crashlytics/internal/persistence/FileStore;Ljava/util/concurrent/ExecutorService;Lcom/google/firebase/crashlytics/internal/common/CrashlyticsAppQualitySessionsSubscriber;Lcom/google/firebase/crashlytics/internal/RemoteConfigDeferredProxy;)V +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsCore;->access$000(Lcom/google/firebase/crashlytics/internal/common/CrashlyticsCore;Lcom/google/firebase/crashlytics/internal/settings/SettingsProvider;)Lcom/google/android/gms/tasks/Task; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsCore;->access$100(Lcom/google/firebase/crashlytics/internal/common/CrashlyticsCore;)Lcom/google/firebase/crashlytics/internal/common/CrashlyticsFileMarker; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsCore;->access$200(Lcom/google/firebase/crashlytics/internal/common/CrashlyticsCore;)Lcom/google/firebase/crashlytics/internal/common/CrashlyticsController; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsCore;->checkForPreviousCrash()V +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsCore;->didPreviousInitializationFail()Z +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsCore;->doBackgroundInitialization(Lcom/google/firebase/crashlytics/internal/settings/SettingsProvider;)Lcom/google/android/gms/tasks/Task; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsCore;->doBackgroundInitializationAsync(Lcom/google/firebase/crashlytics/internal/settings/SettingsProvider;)Lcom/google/android/gms/tasks/Task; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsCore;->getVersion()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsCore;->isBuildIdValid(Ljava/lang/String;Z)Z +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsCore;->log(Ljava/lang/String;)V +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsCore;->markInitializationComplete()V +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsCore;->markInitializationStarted()V +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsCore;->onPreExecute(Lcom/google/firebase/crashlytics/internal/common/AppData;Lcom/google/firebase/crashlytics/internal/settings/SettingsProvider;)Z +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsCore;->setCrashlyticsCollectionEnabled(Ljava/lang/Boolean;)V +Lcom/google/firebase/crashlytics/internal/common/CrashlyticsCore$$ExternalSyntheticLambda0; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsCore$$ExternalSyntheticLambda0;->(Lcom/google/firebase/crashlytics/internal/common/CrashlyticsCore;)V +Lcom/google/firebase/crashlytics/internal/common/CrashlyticsCore$1; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsCore$1;->(Lcom/google/firebase/crashlytics/internal/common/CrashlyticsCore;Lcom/google/firebase/crashlytics/internal/settings/SettingsProvider;)V +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsCore$1;->call()Lcom/google/android/gms/tasks/Task; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsCore$1;->call()Ljava/lang/Object; +Lcom/google/firebase/crashlytics/internal/common/CrashlyticsCore$3; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsCore$3;->(Lcom/google/firebase/crashlytics/internal/common/CrashlyticsCore;)V +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsCore$3;->call()Ljava/lang/Boolean; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsCore$3;->call()Ljava/lang/Object; +Lcom/google/firebase/crashlytics/internal/common/CrashlyticsCore$4; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsCore$4;->(Lcom/google/firebase/crashlytics/internal/common/CrashlyticsCore;)V +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsCore$4;->call()Ljava/lang/Boolean; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsCore$4;->call()Ljava/lang/Object; +Lcom/google/firebase/crashlytics/internal/common/CrashlyticsFileMarker; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsFileMarker;->(Ljava/lang/String;Lcom/google/firebase/crashlytics/internal/persistence/FileStore;)V +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsFileMarker;->create()Z +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsFileMarker;->getMarkerFile()Ljava/io/File; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsFileMarker;->isPresent()Z +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsFileMarker;->remove()Z +Lcom/google/firebase/crashlytics/internal/common/CrashlyticsLifecycleEvents; +Lcom/google/firebase/crashlytics/internal/common/CrashlyticsReportDataCapture; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsReportDataCapture;->()V +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsReportDataCapture;->(Landroid/content/Context;Lcom/google/firebase/crashlytics/internal/common/IdManager;Lcom/google/firebase/crashlytics/internal/common/AppData;Lcom/google/firebase/crashlytics/internal/stacktrace/StackTraceTrimmingStrategy;Lcom/google/firebase/crashlytics/internal/settings/SettingsProvider;)V +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsReportDataCapture;->buildReportData()Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Builder; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsReportDataCapture;->captureReportData(Ljava/lang/String;J)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsReportDataCapture;->getDeviceArchitecture()I +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsReportDataCapture;->populateSessionApplicationData()Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Application; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsReportDataCapture;->populateSessionData(Ljava/lang/String;J)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsReportDataCapture;->populateSessionDeviceData()Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Device; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsReportDataCapture;->populateSessionOperatingSystemData()Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$OperatingSystem; +Lcom/google/firebase/crashlytics/internal/common/CrashlyticsUncaughtExceptionHandler; +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsUncaughtExceptionHandler;->(Lcom/google/firebase/crashlytics/internal/common/CrashlyticsUncaughtExceptionHandler$CrashListener;Lcom/google/firebase/crashlytics/internal/settings/SettingsProvider;Ljava/lang/Thread$UncaughtExceptionHandler;Lcom/google/firebase/crashlytics/internal/CrashlyticsNativeComponent;)V +HSPLcom/google/firebase/crashlytics/internal/common/CrashlyticsUncaughtExceptionHandler;->isHandlingException()Z +Lcom/google/firebase/crashlytics/internal/common/CrashlyticsUncaughtExceptionHandler$CrashListener; +Lcom/google/firebase/crashlytics/internal/common/CurrentTimeProvider; +Lcom/google/firebase/crashlytics/internal/common/DataCollectionArbiter; +HSPLcom/google/firebase/crashlytics/internal/common/DataCollectionArbiter;->(Lcom/google/firebase/FirebaseApp;)V +HSPLcom/google/firebase/crashlytics/internal/common/DataCollectionArbiter;->getDataCollectionValueFromManifest(Landroid/content/Context;)Ljava/lang/Boolean; +HSPLcom/google/firebase/crashlytics/internal/common/DataCollectionArbiter;->getDataCollectionValueFromSharedPreferences()Ljava/lang/Boolean; +HSPLcom/google/firebase/crashlytics/internal/common/DataCollectionArbiter;->isAutomaticDataCollectionEnabled()Z +HSPLcom/google/firebase/crashlytics/internal/common/DataCollectionArbiter;->logDataCollectionState(Z)V +HSPLcom/google/firebase/crashlytics/internal/common/DataCollectionArbiter;->readCrashlyticsDataCollectionEnabledFromManifest(Landroid/content/Context;)Ljava/lang/Boolean; +HSPLcom/google/firebase/crashlytics/internal/common/DataCollectionArbiter;->setCrashlyticsDataCollectionEnabled(Ljava/lang/Boolean;)V +HSPLcom/google/firebase/crashlytics/internal/common/DataCollectionArbiter;->storeDataCollectionValueInSharedPreferences(Landroid/content/SharedPreferences;Ljava/lang/Boolean;)V +HSPLcom/google/firebase/crashlytics/internal/common/DataCollectionArbiter;->waitForAutomaticDataCollectionEnabled()Lcom/google/android/gms/tasks/Task; +HSPLcom/google/firebase/crashlytics/internal/common/DataCollectionArbiter;->waitForDataCollectionPermission(Ljava/util/concurrent/Executor;)Lcom/google/android/gms/tasks/Task; +Lcom/google/firebase/crashlytics/internal/common/DeliveryMechanism; +HSPLcom/google/firebase/crashlytics/internal/common/DeliveryMechanism;->()V +HSPLcom/google/firebase/crashlytics/internal/common/DeliveryMechanism;->(Ljava/lang/String;II)V +HSPLcom/google/firebase/crashlytics/internal/common/DeliveryMechanism;->determineFrom(Ljava/lang/String;)Lcom/google/firebase/crashlytics/internal/common/DeliveryMechanism; +HSPLcom/google/firebase/crashlytics/internal/common/DeliveryMechanism;->getId()I +Lcom/google/firebase/crashlytics/internal/common/ExecutorUtils; +HSPLcom/google/firebase/crashlytics/internal/common/ExecutorUtils;->addDelayedShutdownHook(Ljava/lang/String;Ljava/util/concurrent/ExecutorService;)V +HSPLcom/google/firebase/crashlytics/internal/common/ExecutorUtils;->addDelayedShutdownHook(Ljava/lang/String;Ljava/util/concurrent/ExecutorService;JLjava/util/concurrent/TimeUnit;)V +HSPLcom/google/firebase/crashlytics/internal/common/ExecutorUtils;->buildSingleThreadExecutorService(Ljava/lang/String;)Ljava/util/concurrent/ExecutorService; +HSPLcom/google/firebase/crashlytics/internal/common/ExecutorUtils;->getNamedThreadFactory(Ljava/lang/String;)Ljava/util/concurrent/ThreadFactory; +HSPLcom/google/firebase/crashlytics/internal/common/ExecutorUtils;->newSingleThreadExecutor(Ljava/util/concurrent/ThreadFactory;Ljava/util/concurrent/RejectedExecutionHandler;)Ljava/util/concurrent/ExecutorService; +Lcom/google/firebase/crashlytics/internal/common/ExecutorUtils$1; +HSPLcom/google/firebase/crashlytics/internal/common/ExecutorUtils$1;->(Ljava/lang/String;Ljava/util/concurrent/atomic/AtomicLong;)V +HSPLcom/google/firebase/crashlytics/internal/common/ExecutorUtils$1;->newThread(Ljava/lang/Runnable;)Ljava/lang/Thread; +Lcom/google/firebase/crashlytics/internal/common/ExecutorUtils$1$1; +HSPLcom/google/firebase/crashlytics/internal/common/ExecutorUtils$1$1;->(Lcom/google/firebase/crashlytics/internal/common/ExecutorUtils$1;Ljava/lang/Runnable;)V +HSPLcom/google/firebase/crashlytics/internal/common/ExecutorUtils$1$1;->onRun()V +Lcom/google/firebase/crashlytics/internal/common/ExecutorUtils$2; +HSPLcom/google/firebase/crashlytics/internal/common/ExecutorUtils$2;->(Ljava/lang/String;Ljava/util/concurrent/ExecutorService;JLjava/util/concurrent/TimeUnit;)V +Lcom/google/firebase/crashlytics/internal/common/IdManager; +HSPLcom/google/firebase/crashlytics/internal/common/IdManager;->()V +HSPLcom/google/firebase/crashlytics/internal/common/IdManager;->(Landroid/content/Context;Ljava/lang/String;Lcom/google/firebase/installations/FirebaseInstallationsApi;Lcom/google/firebase/crashlytics/internal/common/DataCollectionArbiter;)V +HSPLcom/google/firebase/crashlytics/internal/common/IdManager;->getAppIdentifier()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/common/IdManager;->getInstallIds()Lcom/google/firebase/crashlytics/internal/common/InstallIdProvider$InstallIds; +HSPLcom/google/firebase/crashlytics/internal/common/IdManager;->getInstallerPackageName()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/common/IdManager;->getModelName()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/common/IdManager;->getOsBuildVersionString()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/common/IdManager;->getOsDisplayVersionString()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/common/IdManager;->isSyntheticFid(Ljava/lang/String;)Z +HSPLcom/google/firebase/crashlytics/internal/common/IdManager;->readCachedCrashlyticsInstallId(Landroid/content/SharedPreferences;)Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/common/IdManager;->removeForwardSlashesIn(Ljava/lang/String;)Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/common/IdManager;->shouldRefresh()Z +Lcom/google/firebase/crashlytics/internal/common/InstallIdProvider; +Lcom/google/firebase/crashlytics/internal/common/InstallIdProvider$InstallIds; +HSPLcom/google/firebase/crashlytics/internal/common/InstallIdProvider$InstallIds;->()V +HSPLcom/google/firebase/crashlytics/internal/common/InstallIdProvider$InstallIds;->create(Ljava/lang/String;Ljava/lang/String;)Lcom/google/firebase/crashlytics/internal/common/InstallIdProvider$InstallIds; +HSPLcom/google/firebase/crashlytics/internal/common/InstallIdProvider$InstallIds;->createWithoutFid(Ljava/lang/String;)Lcom/google/firebase/crashlytics/internal/common/InstallIdProvider$InstallIds; +Lcom/google/firebase/crashlytics/internal/common/InstallerPackageNameProvider; +HSPLcom/google/firebase/crashlytics/internal/common/InstallerPackageNameProvider;->()V +HSPLcom/google/firebase/crashlytics/internal/common/InstallerPackageNameProvider;->getInstallerPackageName(Landroid/content/Context;)Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/common/InstallerPackageNameProvider;->loadInstallerPackageName(Landroid/content/Context;)Ljava/lang/String; +Lcom/google/firebase/crashlytics/internal/common/OnDemandCounter; +HSPLcom/google/firebase/crashlytics/internal/common/OnDemandCounter;->()V +Lcom/google/firebase/crashlytics/internal/common/SessionReportingCoordinator; +HSPLcom/google/firebase/crashlytics/internal/common/SessionReportingCoordinator;->(Lcom/google/firebase/crashlytics/internal/common/CrashlyticsReportDataCapture;Lcom/google/firebase/crashlytics/internal/persistence/CrashlyticsReportPersistence;Lcom/google/firebase/crashlytics/internal/send/DataTransportCrashlyticsReportSender;Lcom/google/firebase/crashlytics/internal/metadata/LogFileManager;Lcom/google/firebase/crashlytics/internal/metadata/UserMetadata;Lcom/google/firebase/crashlytics/internal/common/IdManager;)V +HSPLcom/google/firebase/crashlytics/internal/common/SessionReportingCoordinator;->create(Landroid/content/Context;Lcom/google/firebase/crashlytics/internal/common/IdManager;Lcom/google/firebase/crashlytics/internal/persistence/FileStore;Lcom/google/firebase/crashlytics/internal/common/AppData;Lcom/google/firebase/crashlytics/internal/metadata/LogFileManager;Lcom/google/firebase/crashlytics/internal/metadata/UserMetadata;Lcom/google/firebase/crashlytics/internal/stacktrace/StackTraceTrimmingStrategy;Lcom/google/firebase/crashlytics/internal/settings/SettingsProvider;Lcom/google/firebase/crashlytics/internal/common/OnDemandCounter;Lcom/google/firebase/crashlytics/internal/common/CrashlyticsAppQualitySessionsSubscriber;)Lcom/google/firebase/crashlytics/internal/common/SessionReportingCoordinator; +HSPLcom/google/firebase/crashlytics/internal/common/SessionReportingCoordinator;->finalizeSessions(JLjava/lang/String;)V +HSPLcom/google/firebase/crashlytics/internal/common/SessionReportingCoordinator;->hasReportsToSend()Z +HSPLcom/google/firebase/crashlytics/internal/common/SessionReportingCoordinator;->listSortedOpenSessionIds()Ljava/util/SortedSet; +HSPLcom/google/firebase/crashlytics/internal/common/SessionReportingCoordinator;->onBeginSession(Ljava/lang/String;J)V +Lcom/google/firebase/crashlytics/internal/common/SystemCurrentTimeProvider; +HSPLcom/google/firebase/crashlytics/internal/common/SystemCurrentTimeProvider;->()V +HSPLcom/google/firebase/crashlytics/internal/common/SystemCurrentTimeProvider;->getCurrentTimeMillis()J +Lcom/google/firebase/crashlytics/internal/common/Utils; +HSPLcom/google/firebase/crashlytics/internal/common/Utils;->()V +HSPLcom/google/firebase/crashlytics/internal/common/Utils;->awaitEvenIfOnMainThread(Lcom/google/android/gms/tasks/Task;)Ljava/lang/Object; +HSPLcom/google/firebase/crashlytics/internal/common/Utils;->callTask(Ljava/util/concurrent/Executor;Ljava/util/concurrent/Callable;)Lcom/google/android/gms/tasks/Task; +HSPLcom/google/firebase/crashlytics/internal/common/Utils;->lambda$awaitEvenIfOnMainThread$4(Ljava/util/concurrent/CountDownLatch;Lcom/google/android/gms/tasks/Task;)Ljava/lang/Object; +HSPLcom/google/firebase/crashlytics/internal/common/Utils;->lambda$callTask$2(Lcom/google/android/gms/tasks/TaskCompletionSource;Lcom/google/android/gms/tasks/Task;)Ljava/lang/Object; +HSPLcom/google/firebase/crashlytics/internal/common/Utils;->lambda$callTask$3(Ljava/util/concurrent/Callable;Ljava/util/concurrent/Executor;Lcom/google/android/gms/tasks/TaskCompletionSource;)V +HSPLcom/google/firebase/crashlytics/internal/common/Utils;->race(Ljava/util/concurrent/Executor;Lcom/google/android/gms/tasks/Task;Lcom/google/android/gms/tasks/Task;)Lcom/google/android/gms/tasks/Task; +Lcom/google/firebase/crashlytics/internal/common/Utils$$ExternalSyntheticLambda0; +HSPLcom/google/firebase/crashlytics/internal/common/Utils$$ExternalSyntheticLambda0;->(Lcom/google/android/gms/tasks/TaskCompletionSource;)V +HSPLcom/google/firebase/crashlytics/internal/common/Utils$$ExternalSyntheticLambda0;->then(Lcom/google/android/gms/tasks/Task;)Ljava/lang/Object; +Lcom/google/firebase/crashlytics/internal/common/Utils$$ExternalSyntheticLambda2; +HSPLcom/google/firebase/crashlytics/internal/common/Utils$$ExternalSyntheticLambda2;->(Ljava/util/concurrent/CountDownLatch;)V +HSPLcom/google/firebase/crashlytics/internal/common/Utils$$ExternalSyntheticLambda2;->then(Lcom/google/android/gms/tasks/Task;)Ljava/lang/Object; +Lcom/google/firebase/crashlytics/internal/common/Utils$$ExternalSyntheticLambda3; +HSPLcom/google/firebase/crashlytics/internal/common/Utils$$ExternalSyntheticLambda3;->(Lcom/google/android/gms/tasks/TaskCompletionSource;)V +Lcom/google/firebase/crashlytics/internal/common/Utils$$ExternalSyntheticLambda4; +HSPLcom/google/firebase/crashlytics/internal/common/Utils$$ExternalSyntheticLambda4;->(Ljava/util/concurrent/Callable;Ljava/util/concurrent/Executor;Lcom/google/android/gms/tasks/TaskCompletionSource;)V +HSPLcom/google/firebase/crashlytics/internal/common/Utils$$ExternalSyntheticLambda4;->run()V +Lcom/google/firebase/crashlytics/internal/metadata/FileLogStore; +Lcom/google/firebase/crashlytics/internal/metadata/KeysMap; +HSPLcom/google/firebase/crashlytics/internal/metadata/KeysMap;->(II)V +Lcom/google/firebase/crashlytics/internal/metadata/LogFileManager; +HSPLcom/google/firebase/crashlytics/internal/metadata/LogFileManager;->()V +HSPLcom/google/firebase/crashlytics/internal/metadata/LogFileManager;->(Lcom/google/firebase/crashlytics/internal/persistence/FileStore;)V +HSPLcom/google/firebase/crashlytics/internal/metadata/LogFileManager;->getWorkingFileForSession(Ljava/lang/String;)Ljava/io/File; +HSPLcom/google/firebase/crashlytics/internal/metadata/LogFileManager;->setCurrentSession(Ljava/lang/String;)V +HSPLcom/google/firebase/crashlytics/internal/metadata/LogFileManager;->setLogFile(Ljava/io/File;I)V +HSPLcom/google/firebase/crashlytics/internal/metadata/LogFileManager;->writeToLog(JLjava/lang/String;)V +Lcom/google/firebase/crashlytics/internal/metadata/LogFileManager$NoopLogStore; +HSPLcom/google/firebase/crashlytics/internal/metadata/LogFileManager$NoopLogStore;->()V +HSPLcom/google/firebase/crashlytics/internal/metadata/LogFileManager$NoopLogStore;->(Lcom/google/firebase/crashlytics/internal/metadata/LogFileManager$1;)V +HSPLcom/google/firebase/crashlytics/internal/metadata/LogFileManager$NoopLogStore;->closeLogFile()V +Lcom/google/firebase/crashlytics/internal/metadata/MetaDataStore; +HSPLcom/google/firebase/crashlytics/internal/metadata/MetaDataStore;->()V +HSPLcom/google/firebase/crashlytics/internal/metadata/MetaDataStore;->(Lcom/google/firebase/crashlytics/internal/persistence/FileStore;)V +Lcom/google/firebase/crashlytics/internal/metadata/QueueFile; +HSPLcom/google/firebase/crashlytics/internal/metadata/QueueFile;->()V +HSPLcom/google/firebase/crashlytics/internal/metadata/QueueFile;->(Ljava/io/File;)V +HSPLcom/google/firebase/crashlytics/internal/metadata/QueueFile;->add([B)V +HSPLcom/google/firebase/crashlytics/internal/metadata/QueueFile;->add([BII)V +HSPLcom/google/firebase/crashlytics/internal/metadata/QueueFile;->expandIfNecessary(I)V +HSPLcom/google/firebase/crashlytics/internal/metadata/QueueFile;->initialize(Ljava/io/File;)V +HSPLcom/google/firebase/crashlytics/internal/metadata/QueueFile;->isEmpty()Z +HSPLcom/google/firebase/crashlytics/internal/metadata/QueueFile;->nonNull(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object; +HSPLcom/google/firebase/crashlytics/internal/metadata/QueueFile;->open(Ljava/io/File;)Ljava/io/RandomAccessFile; +HSPLcom/google/firebase/crashlytics/internal/metadata/QueueFile;->readElement(I)Lcom/google/firebase/crashlytics/internal/metadata/QueueFile$Element; +HSPLcom/google/firebase/crashlytics/internal/metadata/QueueFile;->readHeader()V +HSPLcom/google/firebase/crashlytics/internal/metadata/QueueFile;->readInt([BI)I +HSPLcom/google/firebase/crashlytics/internal/metadata/QueueFile;->remainingBytes()I +HSPLcom/google/firebase/crashlytics/internal/metadata/QueueFile;->ringWrite(I[BII)V +HSPLcom/google/firebase/crashlytics/internal/metadata/QueueFile;->usedBytes()I +HSPLcom/google/firebase/crashlytics/internal/metadata/QueueFile;->wrapPosition(I)I +HSPLcom/google/firebase/crashlytics/internal/metadata/QueueFile;->writeHeader(IIII)V +HSPLcom/google/firebase/crashlytics/internal/metadata/QueueFile;->writeInt([BII)V +HSPLcom/google/firebase/crashlytics/internal/metadata/QueueFile;->writeInts([B[I)V +Lcom/google/firebase/crashlytics/internal/metadata/QueueFile$Element; +HSPLcom/google/firebase/crashlytics/internal/metadata/QueueFile$Element;->()V +HSPLcom/google/firebase/crashlytics/internal/metadata/QueueFile$Element;->(II)V +Lcom/google/firebase/crashlytics/internal/metadata/QueueFileLogStore; +HSPLcom/google/firebase/crashlytics/internal/metadata/QueueFileLogStore;->()V +HSPLcom/google/firebase/crashlytics/internal/metadata/QueueFileLogStore;->(Ljava/io/File;I)V +HSPLcom/google/firebase/crashlytics/internal/metadata/QueueFileLogStore;->doWriteToLog(JLjava/lang/String;)V +HSPLcom/google/firebase/crashlytics/internal/metadata/QueueFileLogStore;->openLogFile()V +HSPLcom/google/firebase/crashlytics/internal/metadata/QueueFileLogStore;->writeToLog(JLjava/lang/String;)V +Lcom/google/firebase/crashlytics/internal/metadata/RolloutAssignmentList; +HSPLcom/google/firebase/crashlytics/internal/metadata/RolloutAssignmentList;->(I)V +Lcom/google/firebase/crashlytics/internal/metadata/UserMetadata; +HSPLcom/google/firebase/crashlytics/internal/metadata/UserMetadata;->(Ljava/lang/String;Lcom/google/firebase/crashlytics/internal/persistence/FileStore;Lcom/google/firebase/crashlytics/internal/common/CrashlyticsBackgroundWorker;)V +Lcom/google/firebase/crashlytics/internal/metadata/UserMetadata$SerializeableKeysMap; +HSPLcom/google/firebase/crashlytics/internal/metadata/UserMetadata$SerializeableKeysMap;->(Lcom/google/firebase/crashlytics/internal/metadata/UserMetadata;Z)V +Lcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder;->configure(Lcom/google/firebase/encoders/config/EncoderConfig;)V +Lcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportApplicationExitInfoBuildIdMappingForArchEncoder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportApplicationExitInfoBuildIdMappingForArchEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportApplicationExitInfoBuildIdMappingForArchEncoder;->()V +Lcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportApplicationExitInfoEncoder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportApplicationExitInfoEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportApplicationExitInfoEncoder;->()V +Lcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportCustomAttributeEncoder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportCustomAttributeEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportCustomAttributeEncoder;->()V +Lcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportEncoder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportEncoder;->encode(Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport;Lcom/google/firebase/encoders/ObjectEncoderContext;)V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportEncoder;->encode(Ljava/lang/Object;Ljava/lang/Object;)V +Lcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportFilesPayloadEncoder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportFilesPayloadEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportFilesPayloadEncoder;->()V +Lcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportFilesPayloadFileEncoder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportFilesPayloadFileEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportFilesPayloadFileEncoder;->()V +Lcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionApplicationEncoder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionApplicationEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionApplicationEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionApplicationEncoder;->encode(Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Application;Lcom/google/firebase/encoders/ObjectEncoderContext;)V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionApplicationEncoder;->encode(Ljava/lang/Object;Ljava/lang/Object;)V +Lcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionApplicationOrganizationEncoder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionApplicationOrganizationEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionApplicationOrganizationEncoder;->()V +Lcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionDeviceEncoder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionDeviceEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionDeviceEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionDeviceEncoder;->encode(Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Device;Lcom/google/firebase/encoders/ObjectEncoderContext;)V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionDeviceEncoder;->encode(Ljava/lang/Object;Ljava/lang/Object;)V +Lcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEncoder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEncoder;->encode(Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session;Lcom/google/firebase/encoders/ObjectEncoderContext;)V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEncoder;->encode(Ljava/lang/Object;Ljava/lang/Object;)V +Lcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventApplicationEncoder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventApplicationEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventApplicationEncoder;->()V +Lcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventApplicationExecutionBinaryImageEncoder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventApplicationExecutionBinaryImageEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventApplicationExecutionBinaryImageEncoder;->()V +Lcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventApplicationExecutionEncoder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventApplicationExecutionEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventApplicationExecutionEncoder;->()V +Lcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventApplicationExecutionExceptionEncoder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventApplicationExecutionExceptionEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventApplicationExecutionExceptionEncoder;->()V +Lcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventApplicationExecutionSignalEncoder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventApplicationExecutionSignalEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventApplicationExecutionSignalEncoder;->()V +Lcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventApplicationExecutionThreadEncoder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventApplicationExecutionThreadEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventApplicationExecutionThreadEncoder;->()V +Lcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventApplicationExecutionThreadFrameEncoder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventApplicationExecutionThreadFrameEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventApplicationExecutionThreadFrameEncoder;->()V +Lcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventApplicationProcessDetailsEncoder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventApplicationProcessDetailsEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventApplicationProcessDetailsEncoder;->()V +Lcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventDeviceEncoder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventDeviceEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventDeviceEncoder;->()V +Lcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventEncoder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventEncoder;->()V +Lcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventLogEncoder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventLogEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventLogEncoder;->()V +Lcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventRolloutAssignmentEncoder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventRolloutAssignmentEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventRolloutAssignmentEncoder;->()V +Lcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventRolloutAssignmentRolloutVariantEncoder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventRolloutAssignmentRolloutVariantEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventRolloutAssignmentRolloutVariantEncoder;->()V +Lcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventRolloutsStateEncoder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventRolloutsStateEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionEventRolloutsStateEncoder;->()V +Lcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionOperatingSystemEncoder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionOperatingSystemEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionOperatingSystemEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionOperatingSystemEncoder;->encode(Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$OperatingSystem;Lcom/google/firebase/encoders/ObjectEncoderContext;)V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionOperatingSystemEncoder;->encode(Ljava/lang/Object;Ljava/lang/Object;)V +Lcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionUserEncoder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionUserEncoder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoCrashlyticsReportEncoder$CrashlyticsReportSessionUserEncoder;->()V +Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport;->(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session;Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$FilesPayload;Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$ApplicationExitInfo;)V +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport;->(Ljava/lang/String;Ljava/lang/String;ILjava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session;Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$FilesPayload;Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$ApplicationExitInfo;Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport$1;)V +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport;->getAppExitInfo()Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$ApplicationExitInfo; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport;->getAppQualitySessionId()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport;->getBuildVersion()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport;->getDisplayVersion()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport;->getFirebaseInstallationId()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport;->getGmpAppId()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport;->getInstallationUuid()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport;->getNdkPayload()Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$FilesPayload; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport;->getPlatform()I +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport;->getSdkVersion()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport;->getSession()Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session; +Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport$Builder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport$Builder;->build()Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport$Builder;->setBuildVersion(Ljava/lang/String;)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport$Builder;->setDisplayVersion(Ljava/lang/String;)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport$Builder;->setFirebaseInstallationId(Ljava/lang/String;)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport$Builder;->setGmpAppId(Ljava/lang/String;)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport$Builder;->setInstallationUuid(Ljava/lang/String;)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport$Builder;->setPlatform(I)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport$Builder;->setSdkVersion(Ljava/lang/String;)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport$Builder;->setSession(Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session;)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Builder; +Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_ApplicationExitInfo; +Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_ApplicationExitInfo_BuildIdMappingForArch; +Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_CustomAttribute; +Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_FilesPayload; +Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_FilesPayload_File; +Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session;->(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;JLjava/lang/Long;ZLcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Application;Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$User;Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$OperatingSystem;Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Device;Ljava/util/List;I)V +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session;->(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;JLjava/lang/Long;ZLcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Application;Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$User;Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$OperatingSystem;Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Device;Ljava/util/List;ILcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session$1;)V +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session;->getApp()Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Application; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session;->getAppQualitySessionId()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session;->getDevice()Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Device; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session;->getEndedAt()Ljava/lang/Long; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session;->getEvents()Ljava/util/List; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session;->getGenerator()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session;->getGeneratorType()I +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session;->getIdentifier()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session;->getOs()Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$OperatingSystem; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session;->getStartedAt()J +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session;->getUser()Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$User; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session;->isCrashed()Z +Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session$Builder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session$Builder;->build()Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session$Builder;->setApp(Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Application;)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session$Builder;->setCrashed(Z)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session$Builder;->setDevice(Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Device;)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session$Builder;->setGenerator(Ljava/lang/String;)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session$Builder;->setGeneratorType(I)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session$Builder;->setIdentifier(Ljava/lang/String;)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session$Builder;->setOs(Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$OperatingSystem;)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session$Builder;->setStartedAt(J)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Builder; +Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Application; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Application;->(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Application$Organization;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Application;->(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Application$Organization;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Application$1;)V +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Application;->getDevelopmentPlatform()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Application;->getDevelopmentPlatformVersion()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Application;->getDisplayVersion()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Application;->getIdentifier()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Application;->getInstallationUuid()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Application;->getOrganization()Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Application$Organization; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Application;->getVersion()Ljava/lang/String; +Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Application$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Application$Builder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Application$Builder;->build()Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Application; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Application$Builder;->setDevelopmentPlatform(Ljava/lang/String;)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Application$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Application$Builder;->setDevelopmentPlatformVersion(Ljava/lang/String;)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Application$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Application$Builder;->setDisplayVersion(Ljava/lang/String;)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Application$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Application$Builder;->setIdentifier(Ljava/lang/String;)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Application$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Application$Builder;->setInstallationUuid(Ljava/lang/String;)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Application$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Application$Builder;->setVersion(Ljava/lang/String;)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Application$Builder; +Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Application_Organization; +Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Device; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Device;->(ILjava/lang/String;IJJZILjava/lang/String;Ljava/lang/String;)V +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Device;->(ILjava/lang/String;IJJZILjava/lang/String;Ljava/lang/String;Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Device$1;)V +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Device;->getArch()I +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Device;->getCores()I +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Device;->getDiskSpace()J +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Device;->getManufacturer()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Device;->getModel()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Device;->getModelClass()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Device;->getRam()J +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Device;->getState()I +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Device;->isSimulator()Z +Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Device$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Device$Builder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Device$Builder;->build()Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Device; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Device$Builder;->setArch(I)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Device$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Device$Builder;->setCores(I)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Device$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Device$Builder;->setDiskSpace(J)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Device$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Device$Builder;->setManufacturer(Ljava/lang/String;)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Device$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Device$Builder;->setModel(Ljava/lang/String;)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Device$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Device$Builder;->setModelClass(Ljava/lang/String;)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Device$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Device$Builder;->setRam(J)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Device$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Device$Builder;->setSimulator(Z)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Device$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Device$Builder;->setState(I)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Device$Builder; +Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Event; +Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Event_Application; +Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Event_Application_Execution; +Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Event_Application_Execution_BinaryImage; +Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Event_Application_Execution_Exception; +Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Event_Application_Execution_Signal; +Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Event_Application_Execution_Thread; +Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Event_Application_Execution_Thread_Frame; +Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Event_Application_ProcessDetails; +Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Event_Device; +Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Event_Log; +Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Event_RolloutAssignment; +Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Event_RolloutAssignment_RolloutVariant; +Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_Event_RolloutsState; +Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_OperatingSystem; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_OperatingSystem;->(ILjava/lang/String;Ljava/lang/String;Z)V +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_OperatingSystem;->(ILjava/lang/String;Ljava/lang/String;ZLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_OperatingSystem$1;)V +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_OperatingSystem;->getBuildVersion()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_OperatingSystem;->getPlatform()I +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_OperatingSystem;->getVersion()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_OperatingSystem;->isJailbroken()Z +Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_OperatingSystem$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_OperatingSystem$Builder;->()V +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_OperatingSystem$Builder;->build()Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$OperatingSystem; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_OperatingSystem$Builder;->setBuildVersion(Ljava/lang/String;)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$OperatingSystem$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_OperatingSystem$Builder;->setJailbroken(Z)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$OperatingSystem$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_OperatingSystem$Builder;->setPlatform(I)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$OperatingSystem$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_OperatingSystem$Builder;->setVersion(Ljava/lang/String;)Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$OperatingSystem$Builder; +Lcom/google/firebase/crashlytics/internal/model/AutoValue_CrashlyticsReport_Session_User; +Lcom/google/firebase/crashlytics/internal/model/AutoValue_StaticSessionData; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_StaticSessionData;->(Lcom/google/firebase/crashlytics/internal/model/StaticSessionData$AppData;Lcom/google/firebase/crashlytics/internal/model/StaticSessionData$OsData;Lcom/google/firebase/crashlytics/internal/model/StaticSessionData$DeviceData;)V +Lcom/google/firebase/crashlytics/internal/model/AutoValue_StaticSessionData_AppData; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_StaticSessionData_AppData;->(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILcom/google/firebase/crashlytics/internal/DevelopmentPlatformProvider;)V +Lcom/google/firebase/crashlytics/internal/model/AutoValue_StaticSessionData_DeviceData; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_StaticSessionData_DeviceData;->(ILjava/lang/String;IJJZILjava/lang/String;Ljava/lang/String;)V +Lcom/google/firebase/crashlytics/internal/model/AutoValue_StaticSessionData_OsData; +HSPLcom/google/firebase/crashlytics/internal/model/AutoValue_StaticSessionData_OsData;->(Ljava/lang/String;Ljava/lang/String;Z)V +Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport; +HSPLcom/google/firebase/crashlytics/internal/model/CrashlyticsReport;->()V +HSPLcom/google/firebase/crashlytics/internal/model/CrashlyticsReport;->()V +HSPLcom/google/firebase/crashlytics/internal/model/CrashlyticsReport;->access$000()Ljava/nio/charset/Charset; +HSPLcom/google/firebase/crashlytics/internal/model/CrashlyticsReport;->builder()Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Builder; +Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$ApplicationExitInfo; +Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$ApplicationExitInfo$BuildIdMappingForArch; +Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Builder;->()V +Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$CustomAttribute; +Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$FilesPayload; +Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$FilesPayload$File; +Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session; +HSPLcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session;->()V +HSPLcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session;->builder()Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session;->getIdentifierUtf8Bytes()[B +Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Application; +HSPLcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Application;->()V +HSPLcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Application;->builder()Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Application$Builder; +Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Application$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Application$Builder;->()V +Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Application$Organization; +Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Builder;->()V +Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Device; +HSPLcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Device;->()V +HSPLcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Device;->builder()Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Device$Builder; +Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Device$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Device$Builder;->()V +Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Event; +Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Event$Application; +Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Event$Application$Execution; +Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Event$Application$Execution$BinaryImage; +Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Event$Application$Execution$Exception; +Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Event$Application$Execution$Signal; +Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Event$Application$Execution$Thread; +Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Event$Application$Execution$Thread$Frame; +Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Event$Application$ProcessDetails; +Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Event$Device; +Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Event$Log; +Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Event$RolloutAssignment; +Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Event$RolloutAssignment$RolloutVariant; +Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$Event$RolloutsState; +Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$OperatingSystem; +HSPLcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$OperatingSystem;->()V +HSPLcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$OperatingSystem;->builder()Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$OperatingSystem$Builder; +Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$OperatingSystem$Builder; +HSPLcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$OperatingSystem$Builder;->()V +Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport$Session$User; +Lcom/google/firebase/crashlytics/internal/model/StaticSessionData; +HSPLcom/google/firebase/crashlytics/internal/model/StaticSessionData;->()V +HSPLcom/google/firebase/crashlytics/internal/model/StaticSessionData;->create(Lcom/google/firebase/crashlytics/internal/model/StaticSessionData$AppData;Lcom/google/firebase/crashlytics/internal/model/StaticSessionData$OsData;Lcom/google/firebase/crashlytics/internal/model/StaticSessionData$DeviceData;)Lcom/google/firebase/crashlytics/internal/model/StaticSessionData; +Lcom/google/firebase/crashlytics/internal/model/StaticSessionData$AppData; +HSPLcom/google/firebase/crashlytics/internal/model/StaticSessionData$AppData;->()V +HSPLcom/google/firebase/crashlytics/internal/model/StaticSessionData$AppData;->create(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ILcom/google/firebase/crashlytics/internal/DevelopmentPlatformProvider;)Lcom/google/firebase/crashlytics/internal/model/StaticSessionData$AppData; +Lcom/google/firebase/crashlytics/internal/model/StaticSessionData$DeviceData; +HSPLcom/google/firebase/crashlytics/internal/model/StaticSessionData$DeviceData;->()V +HSPLcom/google/firebase/crashlytics/internal/model/StaticSessionData$DeviceData;->create(ILjava/lang/String;IJJZILjava/lang/String;Ljava/lang/String;)Lcom/google/firebase/crashlytics/internal/model/StaticSessionData$DeviceData; +Lcom/google/firebase/crashlytics/internal/model/StaticSessionData$OsData; +HSPLcom/google/firebase/crashlytics/internal/model/StaticSessionData$OsData;->()V +HSPLcom/google/firebase/crashlytics/internal/model/StaticSessionData$OsData;->create(Ljava/lang/String;Ljava/lang/String;Z)Lcom/google/firebase/crashlytics/internal/model/StaticSessionData$OsData; +Lcom/google/firebase/crashlytics/internal/model/serialization/CrashlyticsReportJsonTransform; +HSPLcom/google/firebase/crashlytics/internal/model/serialization/CrashlyticsReportJsonTransform;->()V +HSPLcom/google/firebase/crashlytics/internal/model/serialization/CrashlyticsReportJsonTransform;->()V +HSPLcom/google/firebase/crashlytics/internal/model/serialization/CrashlyticsReportJsonTransform;->reportToJson(Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport;)Ljava/lang/String; +Lcom/google/firebase/crashlytics/internal/network/HttpRequestFactory; +HSPLcom/google/firebase/crashlytics/internal/network/HttpRequestFactory;->()V +Lcom/google/firebase/crashlytics/internal/persistence/CrashlyticsReportPersistence; +HSPLcom/google/firebase/crashlytics/internal/persistence/CrashlyticsReportPersistence;->()V +HSPLcom/google/firebase/crashlytics/internal/persistence/CrashlyticsReportPersistence;->(Lcom/google/firebase/crashlytics/internal/persistence/FileStore;Lcom/google/firebase/crashlytics/internal/settings/SettingsProvider;Lcom/google/firebase/crashlytics/internal/common/CrashlyticsAppQualitySessionsSubscriber;)V +HSPLcom/google/firebase/crashlytics/internal/persistence/CrashlyticsReportPersistence;->capAndGetOpenSessions(Ljava/lang/String;)Ljava/util/SortedSet; +HSPLcom/google/firebase/crashlytics/internal/persistence/CrashlyticsReportPersistence;->capFinalizedReports()V +HSPLcom/google/firebase/crashlytics/internal/persistence/CrashlyticsReportPersistence;->convertTimestampFromSecondsToMs(J)J +HSPLcom/google/firebase/crashlytics/internal/persistence/CrashlyticsReportPersistence;->finalizeReports(Ljava/lang/String;J)V +HSPLcom/google/firebase/crashlytics/internal/persistence/CrashlyticsReportPersistence;->getAllFinalizedReportFiles()Ljava/util/List; +HSPLcom/google/firebase/crashlytics/internal/persistence/CrashlyticsReportPersistence;->getOpenSessionIds()Ljava/util/SortedSet; +HSPLcom/google/firebase/crashlytics/internal/persistence/CrashlyticsReportPersistence;->hasFinalizedReports()Z +HSPLcom/google/firebase/crashlytics/internal/persistence/CrashlyticsReportPersistence;->lambda$static$1(Ljava/io/File;Ljava/lang/String;)Z +HSPLcom/google/firebase/crashlytics/internal/persistence/CrashlyticsReportPersistence;->persistReport(Lcom/google/firebase/crashlytics/internal/model/CrashlyticsReport;)V +HSPLcom/google/firebase/crashlytics/internal/persistence/CrashlyticsReportPersistence;->synthesizeReport(Ljava/lang/String;J)V +HSPLcom/google/firebase/crashlytics/internal/persistence/CrashlyticsReportPersistence;->writeTextFile(Ljava/io/File;Ljava/lang/String;)V +HSPLcom/google/firebase/crashlytics/internal/persistence/CrashlyticsReportPersistence;->writeTextFile(Ljava/io/File;Ljava/lang/String;J)V +Lcom/google/firebase/crashlytics/internal/persistence/CrashlyticsReportPersistence$$ExternalSyntheticLambda2; +HSPLcom/google/firebase/crashlytics/internal/persistence/CrashlyticsReportPersistence$$ExternalSyntheticLambda2;->()V +Lcom/google/firebase/crashlytics/internal/persistence/CrashlyticsReportPersistence$$ExternalSyntheticLambda3; +HSPLcom/google/firebase/crashlytics/internal/persistence/CrashlyticsReportPersistence$$ExternalSyntheticLambda3;->()V +HSPLcom/google/firebase/crashlytics/internal/persistence/CrashlyticsReportPersistence$$ExternalSyntheticLambda3;->accept(Ljava/io/File;Ljava/lang/String;)Z +Lcom/google/firebase/crashlytics/internal/persistence/FileStore; +HSPLcom/google/firebase/crashlytics/internal/persistence/FileStore;->(Landroid/content/Context;)V +HSPLcom/google/firebase/crashlytics/internal/persistence/FileStore;->cleanupDir(Ljava/io/File;)V +HSPLcom/google/firebase/crashlytics/internal/persistence/FileStore;->cleanupPreviousFileSystems()V +HSPLcom/google/firebase/crashlytics/internal/persistence/FileStore;->deleteSessionFiles(Ljava/lang/String;)Z +HSPLcom/google/firebase/crashlytics/internal/persistence/FileStore;->getAllOpenSessionIds()Ljava/util/List; +HSPLcom/google/firebase/crashlytics/internal/persistence/FileStore;->getCommonFile(Ljava/lang/String;)Ljava/io/File; +HSPLcom/google/firebase/crashlytics/internal/persistence/FileStore;->getNativeReports()Ljava/util/List; +HSPLcom/google/firebase/crashlytics/internal/persistence/FileStore;->getPriorityReports()Ljava/util/List; +HSPLcom/google/firebase/crashlytics/internal/persistence/FileStore;->getReports()Ljava/util/List; +HSPLcom/google/firebase/crashlytics/internal/persistence/FileStore;->getSessionDir(Ljava/lang/String;)Ljava/io/File; +HSPLcom/google/firebase/crashlytics/internal/persistence/FileStore;->getSessionFile(Ljava/lang/String;Ljava/lang/String;)Ljava/io/File; +HSPLcom/google/firebase/crashlytics/internal/persistence/FileStore;->getSessionFiles(Ljava/lang/String;Ljava/io/FilenameFilter;)Ljava/util/List; +HSPLcom/google/firebase/crashlytics/internal/persistence/FileStore;->prepareBaseDir(Ljava/io/File;)Ljava/io/File; +HSPLcom/google/firebase/crashlytics/internal/persistence/FileStore;->prepareDir(Ljava/io/File;)Ljava/io/File; +HSPLcom/google/firebase/crashlytics/internal/persistence/FileStore;->recursiveDelete(Ljava/io/File;)Z +HSPLcom/google/firebase/crashlytics/internal/persistence/FileStore;->safeArrayToList([Ljava/lang/Object;)Ljava/util/List; +HSPLcom/google/firebase/crashlytics/internal/persistence/FileStore;->sanitizeName(Ljava/lang/String;)Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/persistence/FileStore;->useV2FileSystem()Z +Lcom/google/firebase/crashlytics/internal/send/DataTransportCrashlyticsReportSender; +HSPLcom/google/firebase/crashlytics/internal/send/DataTransportCrashlyticsReportSender;->()V +HSPLcom/google/firebase/crashlytics/internal/send/DataTransportCrashlyticsReportSender;->(Lcom/google/firebase/crashlytics/internal/send/ReportQueue;Lcom/google/android/datatransport/Transformer;)V +HSPLcom/google/firebase/crashlytics/internal/send/DataTransportCrashlyticsReportSender;->create(Landroid/content/Context;Lcom/google/firebase/crashlytics/internal/settings/SettingsProvider;Lcom/google/firebase/crashlytics/internal/common/OnDemandCounter;)Lcom/google/firebase/crashlytics/internal/send/DataTransportCrashlyticsReportSender; +HSPLcom/google/firebase/crashlytics/internal/send/DataTransportCrashlyticsReportSender;->mergeStrings(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; +Lcom/google/firebase/crashlytics/internal/send/DataTransportCrashlyticsReportSender$$ExternalSyntheticLambda0; +HSPLcom/google/firebase/crashlytics/internal/send/DataTransportCrashlyticsReportSender$$ExternalSyntheticLambda0;->()V +Lcom/google/firebase/crashlytics/internal/send/ReportQueue; +HSPLcom/google/firebase/crashlytics/internal/send/ReportQueue;->(DDJLcom/google/android/datatransport/Transport;Lcom/google/firebase/crashlytics/internal/common/OnDemandCounter;)V +HSPLcom/google/firebase/crashlytics/internal/send/ReportQueue;->(Lcom/google/android/datatransport/Transport;Lcom/google/firebase/crashlytics/internal/settings/Settings;Lcom/google/firebase/crashlytics/internal/common/OnDemandCounter;)V +Lcom/google/firebase/crashlytics/internal/settings/CachedSettingsIo; +HSPLcom/google/firebase/crashlytics/internal/settings/CachedSettingsIo;->(Lcom/google/firebase/crashlytics/internal/persistence/FileStore;)V +HSPLcom/google/firebase/crashlytics/internal/settings/CachedSettingsIo;->getSettingsFile()Ljava/io/File; +HSPLcom/google/firebase/crashlytics/internal/settings/CachedSettingsIo;->readCachedSettings()Lorg/json/JSONObject; +Lcom/google/firebase/crashlytics/internal/settings/DefaultSettingsJsonTransform; +HSPLcom/google/firebase/crashlytics/internal/settings/DefaultSettingsJsonTransform;->defaultSettings(Lcom/google/firebase/crashlytics/internal/common/CurrentTimeProvider;)Lcom/google/firebase/crashlytics/internal/settings/Settings; +Lcom/google/firebase/crashlytics/internal/settings/DefaultSettingsSpiCall; +HSPLcom/google/firebase/crashlytics/internal/settings/DefaultSettingsSpiCall;->(Ljava/lang/String;Lcom/google/firebase/crashlytics/internal/network/HttpRequestFactory;)V +HSPLcom/google/firebase/crashlytics/internal/settings/DefaultSettingsSpiCall;->(Ljava/lang/String;Lcom/google/firebase/crashlytics/internal/network/HttpRequestFactory;Lcom/google/firebase/crashlytics/internal/Logger;)V +Lcom/google/firebase/crashlytics/internal/settings/Settings; +HSPLcom/google/firebase/crashlytics/internal/settings/Settings;->(JLcom/google/firebase/crashlytics/internal/settings/Settings$SessionData;Lcom/google/firebase/crashlytics/internal/settings/Settings$FeatureFlagData;IIDDI)V +Lcom/google/firebase/crashlytics/internal/settings/Settings$FeatureFlagData; +HSPLcom/google/firebase/crashlytics/internal/settings/Settings$FeatureFlagData;->(ZZZ)V +Lcom/google/firebase/crashlytics/internal/settings/Settings$SessionData; +HSPLcom/google/firebase/crashlytics/internal/settings/Settings$SessionData;->(II)V +Lcom/google/firebase/crashlytics/internal/settings/SettingsCacheBehavior; +HSPLcom/google/firebase/crashlytics/internal/settings/SettingsCacheBehavior;->()V +HSPLcom/google/firebase/crashlytics/internal/settings/SettingsCacheBehavior;->(Ljava/lang/String;I)V +Lcom/google/firebase/crashlytics/internal/settings/SettingsController; +HSPLcom/google/firebase/crashlytics/internal/settings/SettingsController;->(Landroid/content/Context;Lcom/google/firebase/crashlytics/internal/settings/SettingsRequest;Lcom/google/firebase/crashlytics/internal/common/CurrentTimeProvider;Lcom/google/firebase/crashlytics/internal/settings/SettingsJsonParser;Lcom/google/firebase/crashlytics/internal/settings/CachedSettingsIo;Lcom/google/firebase/crashlytics/internal/settings/SettingsSpiCall;Lcom/google/firebase/crashlytics/internal/common/DataCollectionArbiter;)V +HSPLcom/google/firebase/crashlytics/internal/settings/SettingsController;->buildInstanceIdentifierChanged()Z +HSPLcom/google/firebase/crashlytics/internal/settings/SettingsController;->create(Landroid/content/Context;Ljava/lang/String;Lcom/google/firebase/crashlytics/internal/common/IdManager;Lcom/google/firebase/crashlytics/internal/network/HttpRequestFactory;Ljava/lang/String;Ljava/lang/String;Lcom/google/firebase/crashlytics/internal/persistence/FileStore;Lcom/google/firebase/crashlytics/internal/common/DataCollectionArbiter;)Lcom/google/firebase/crashlytics/internal/settings/SettingsController; +HSPLcom/google/firebase/crashlytics/internal/settings/SettingsController;->getCachedSettingsData(Lcom/google/firebase/crashlytics/internal/settings/SettingsCacheBehavior;)Lcom/google/firebase/crashlytics/internal/settings/Settings; +HSPLcom/google/firebase/crashlytics/internal/settings/SettingsController;->getSettingsAsync()Lcom/google/android/gms/tasks/Task; +HSPLcom/google/firebase/crashlytics/internal/settings/SettingsController;->getSettingsSync()Lcom/google/firebase/crashlytics/internal/settings/Settings; +HSPLcom/google/firebase/crashlytics/internal/settings/SettingsController;->getStoredBuildInstanceIdentifier()Ljava/lang/String; +HSPLcom/google/firebase/crashlytics/internal/settings/SettingsController;->loadSettingsData(Lcom/google/firebase/crashlytics/internal/settings/SettingsCacheBehavior;Ljava/util/concurrent/Executor;)Lcom/google/android/gms/tasks/Task; +HSPLcom/google/firebase/crashlytics/internal/settings/SettingsController;->loadSettingsData(Ljava/util/concurrent/Executor;)Lcom/google/android/gms/tasks/Task; +Lcom/google/firebase/crashlytics/internal/settings/SettingsController$1; +HSPLcom/google/firebase/crashlytics/internal/settings/SettingsController$1;->(Lcom/google/firebase/crashlytics/internal/settings/SettingsController;)V +Lcom/google/firebase/crashlytics/internal/settings/SettingsJsonParser; +HSPLcom/google/firebase/crashlytics/internal/settings/SettingsJsonParser;->(Lcom/google/firebase/crashlytics/internal/common/CurrentTimeProvider;)V +Lcom/google/firebase/crashlytics/internal/settings/SettingsJsonTransform; +Lcom/google/firebase/crashlytics/internal/settings/SettingsProvider; +Lcom/google/firebase/crashlytics/internal/settings/SettingsRequest; +HSPLcom/google/firebase/crashlytics/internal/settings/SettingsRequest;->(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/google/firebase/crashlytics/internal/common/InstallIdProvider;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;I)V +Lcom/google/firebase/crashlytics/internal/settings/SettingsSpiCall; +Lcom/google/firebase/crashlytics/internal/stacktrace/MiddleOutFallbackStrategy; +HSPLcom/google/firebase/crashlytics/internal/stacktrace/MiddleOutFallbackStrategy;->(I[Lcom/google/firebase/crashlytics/internal/stacktrace/StackTraceTrimmingStrategy;)V +Lcom/google/firebase/crashlytics/internal/stacktrace/MiddleOutStrategy; +HSPLcom/google/firebase/crashlytics/internal/stacktrace/MiddleOutStrategy;->(I)V +Lcom/google/firebase/crashlytics/internal/stacktrace/RemoveRepeatsStrategy; +HSPLcom/google/firebase/crashlytics/internal/stacktrace/RemoveRepeatsStrategy;->(I)V +Lcom/google/firebase/crashlytics/internal/stacktrace/StackTraceTrimmingStrategy; +Lcom/google/firebase/crashlytics/ktx/FirebaseCrashlyticsKt; +HSPLcom/google/firebase/crashlytics/ktx/FirebaseCrashlyticsKt;->getCrashlytics(Lcom/google/firebase/ktx/Firebase;)Lcom/google/firebase/crashlytics/FirebaseCrashlytics; +Lcom/google/firebase/crashlytics/ktx/FirebaseCrashlyticsKtxRegistrar; +HSPLcom/google/firebase/crashlytics/ktx/FirebaseCrashlyticsKtxRegistrar;->()V +HSPLcom/google/firebase/crashlytics/ktx/FirebaseCrashlyticsKtxRegistrar;->()V +HSPLcom/google/firebase/crashlytics/ktx/FirebaseCrashlyticsKtxRegistrar;->getComponents()Ljava/util/List; +Lcom/google/firebase/crashlytics/ktx/FirebaseCrashlyticsKtxRegistrar$Companion; +HSPLcom/google/firebase/crashlytics/ktx/FirebaseCrashlyticsKtxRegistrar$Companion;->()V +HSPLcom/google/firebase/crashlytics/ktx/FirebaseCrashlyticsKtxRegistrar$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/google/firebase/datatransport/TransportRegistrar; +HSPLcom/google/firebase/datatransport/TransportRegistrar;->()V +HSPLcom/google/firebase/datatransport/TransportRegistrar;->getComponents()Ljava/util/List; +Lcom/google/firebase/datatransport/TransportRegistrar$$ExternalSyntheticLambda0; +HSPLcom/google/firebase/datatransport/TransportRegistrar$$ExternalSyntheticLambda0;->()V +Lcom/google/firebase/dynamicloading/ComponentLoader; +Lcom/google/firebase/encoders/DataEncoder; +Lcom/google/firebase/encoders/Encoder; +Lcom/google/firebase/encoders/EncodingException; +Lcom/google/firebase/encoders/FieldDescriptor; +HSPLcom/google/firebase/encoders/FieldDescriptor;->(Ljava/lang/String;Ljava/util/Map;)V +HSPLcom/google/firebase/encoders/FieldDescriptor;->getName()Ljava/lang/String; +HSPLcom/google/firebase/encoders/FieldDescriptor;->of(Ljava/lang/String;)Lcom/google/firebase/encoders/FieldDescriptor; +Lcom/google/firebase/encoders/ObjectEncoder; +Lcom/google/firebase/encoders/ObjectEncoderContext; +Lcom/google/firebase/encoders/ValueEncoder; +Lcom/google/firebase/encoders/ValueEncoderContext; +Lcom/google/firebase/encoders/config/Configurator; +Lcom/google/firebase/encoders/config/EncoderConfig; +Lcom/google/firebase/encoders/json/JsonDataEncoderBuilder; +HSPLcom/google/firebase/encoders/json/JsonDataEncoderBuilder;->()V +HSPLcom/google/firebase/encoders/json/JsonDataEncoderBuilder;->()V +HSPLcom/google/firebase/encoders/json/JsonDataEncoderBuilder;->access$100(Lcom/google/firebase/encoders/json/JsonDataEncoderBuilder;)Ljava/util/Map; +HSPLcom/google/firebase/encoders/json/JsonDataEncoderBuilder;->access$200(Lcom/google/firebase/encoders/json/JsonDataEncoderBuilder;)Ljava/util/Map; +HSPLcom/google/firebase/encoders/json/JsonDataEncoderBuilder;->access$300(Lcom/google/firebase/encoders/json/JsonDataEncoderBuilder;)Lcom/google/firebase/encoders/ObjectEncoder; +HSPLcom/google/firebase/encoders/json/JsonDataEncoderBuilder;->access$400(Lcom/google/firebase/encoders/json/JsonDataEncoderBuilder;)Z +HSPLcom/google/firebase/encoders/json/JsonDataEncoderBuilder;->build()Lcom/google/firebase/encoders/DataEncoder; +HSPLcom/google/firebase/encoders/json/JsonDataEncoderBuilder;->configureWith(Lcom/google/firebase/encoders/config/Configurator;)Lcom/google/firebase/encoders/json/JsonDataEncoderBuilder; +HSPLcom/google/firebase/encoders/json/JsonDataEncoderBuilder;->ignoreNullValues(Z)Lcom/google/firebase/encoders/json/JsonDataEncoderBuilder; +HSPLcom/google/firebase/encoders/json/JsonDataEncoderBuilder;->lambda$static$1(Ljava/lang/String;Lcom/google/firebase/encoders/ValueEncoderContext;)V +HSPLcom/google/firebase/encoders/json/JsonDataEncoderBuilder;->registerEncoder(Ljava/lang/Class;Lcom/google/firebase/encoders/ObjectEncoder;)Lcom/google/firebase/encoders/config/EncoderConfig; +HSPLcom/google/firebase/encoders/json/JsonDataEncoderBuilder;->registerEncoder(Ljava/lang/Class;Lcom/google/firebase/encoders/ObjectEncoder;)Lcom/google/firebase/encoders/json/JsonDataEncoderBuilder; +HSPLcom/google/firebase/encoders/json/JsonDataEncoderBuilder;->registerEncoder(Ljava/lang/Class;Lcom/google/firebase/encoders/ValueEncoder;)Lcom/google/firebase/encoders/json/JsonDataEncoderBuilder; +Lcom/google/firebase/encoders/json/JsonDataEncoderBuilder$$ExternalSyntheticLambda0; +HSPLcom/google/firebase/encoders/json/JsonDataEncoderBuilder$$ExternalSyntheticLambda0;->()V +Lcom/google/firebase/encoders/json/JsonDataEncoderBuilder$$ExternalSyntheticLambda1; +HSPLcom/google/firebase/encoders/json/JsonDataEncoderBuilder$$ExternalSyntheticLambda1;->()V +HSPLcom/google/firebase/encoders/json/JsonDataEncoderBuilder$$ExternalSyntheticLambda1;->encode(Ljava/lang/Object;Ljava/lang/Object;)V +Lcom/google/firebase/encoders/json/JsonDataEncoderBuilder$$ExternalSyntheticLambda2; +HSPLcom/google/firebase/encoders/json/JsonDataEncoderBuilder$$ExternalSyntheticLambda2;->()V +Lcom/google/firebase/encoders/json/JsonDataEncoderBuilder$1; +HSPLcom/google/firebase/encoders/json/JsonDataEncoderBuilder$1;->(Lcom/google/firebase/encoders/json/JsonDataEncoderBuilder;)V +HSPLcom/google/firebase/encoders/json/JsonDataEncoderBuilder$1;->encode(Ljava/lang/Object;)Ljava/lang/String; +HSPLcom/google/firebase/encoders/json/JsonDataEncoderBuilder$1;->encode(Ljava/lang/Object;Ljava/io/Writer;)V +Lcom/google/firebase/encoders/json/JsonDataEncoderBuilder$TimestampEncoder; +HSPLcom/google/firebase/encoders/json/JsonDataEncoderBuilder$TimestampEncoder;->()V +HSPLcom/google/firebase/encoders/json/JsonDataEncoderBuilder$TimestampEncoder;->()V +HSPLcom/google/firebase/encoders/json/JsonDataEncoderBuilder$TimestampEncoder;->(Lcom/google/firebase/encoders/json/JsonDataEncoderBuilder$1;)V +Lcom/google/firebase/encoders/json/JsonValueObjectEncoderContext; +HSPLcom/google/firebase/encoders/json/JsonValueObjectEncoderContext;->(Ljava/io/Writer;Ljava/util/Map;Ljava/util/Map;Lcom/google/firebase/encoders/ObjectEncoder;Z)V +HSPLcom/google/firebase/encoders/json/JsonValueObjectEncoderContext;->add(I)Lcom/google/firebase/encoders/json/JsonValueObjectEncoderContext; +HSPLcom/google/firebase/encoders/json/JsonValueObjectEncoderContext;->add(J)Lcom/google/firebase/encoders/json/JsonValueObjectEncoderContext; +HSPLcom/google/firebase/encoders/json/JsonValueObjectEncoderContext;->add(Lcom/google/firebase/encoders/FieldDescriptor;I)Lcom/google/firebase/encoders/ObjectEncoderContext; +HSPLcom/google/firebase/encoders/json/JsonValueObjectEncoderContext;->add(Lcom/google/firebase/encoders/FieldDescriptor;J)Lcom/google/firebase/encoders/ObjectEncoderContext; +HSPLcom/google/firebase/encoders/json/JsonValueObjectEncoderContext;->add(Lcom/google/firebase/encoders/FieldDescriptor;Ljava/lang/Object;)Lcom/google/firebase/encoders/ObjectEncoderContext; +HSPLcom/google/firebase/encoders/json/JsonValueObjectEncoderContext;->add(Lcom/google/firebase/encoders/FieldDescriptor;Z)Lcom/google/firebase/encoders/ObjectEncoderContext; +HSPLcom/google/firebase/encoders/json/JsonValueObjectEncoderContext;->add(Ljava/lang/Object;Z)Lcom/google/firebase/encoders/json/JsonValueObjectEncoderContext; +HSPLcom/google/firebase/encoders/json/JsonValueObjectEncoderContext;->add(Ljava/lang/String;)Lcom/google/firebase/encoders/ValueEncoderContext; +HSPLcom/google/firebase/encoders/json/JsonValueObjectEncoderContext;->add(Ljava/lang/String;)Lcom/google/firebase/encoders/json/JsonValueObjectEncoderContext; +HSPLcom/google/firebase/encoders/json/JsonValueObjectEncoderContext;->add(Ljava/lang/String;I)Lcom/google/firebase/encoders/json/JsonValueObjectEncoderContext; +HSPLcom/google/firebase/encoders/json/JsonValueObjectEncoderContext;->add(Ljava/lang/String;J)Lcom/google/firebase/encoders/json/JsonValueObjectEncoderContext; +HSPLcom/google/firebase/encoders/json/JsonValueObjectEncoderContext;->add(Ljava/lang/String;Ljava/lang/Object;)Lcom/google/firebase/encoders/json/JsonValueObjectEncoderContext; +HSPLcom/google/firebase/encoders/json/JsonValueObjectEncoderContext;->add(Ljava/lang/String;Z)Lcom/google/firebase/encoders/json/JsonValueObjectEncoderContext; +HSPLcom/google/firebase/encoders/json/JsonValueObjectEncoderContext;->add(Z)Lcom/google/firebase/encoders/json/JsonValueObjectEncoderContext; +HSPLcom/google/firebase/encoders/json/JsonValueObjectEncoderContext;->add([B)Lcom/google/firebase/encoders/json/JsonValueObjectEncoderContext; +HSPLcom/google/firebase/encoders/json/JsonValueObjectEncoderContext;->close()V +HSPLcom/google/firebase/encoders/json/JsonValueObjectEncoderContext;->doEncode(Lcom/google/firebase/encoders/ObjectEncoder;Ljava/lang/Object;Z)Lcom/google/firebase/encoders/json/JsonValueObjectEncoderContext; +HSPLcom/google/firebase/encoders/json/JsonValueObjectEncoderContext;->internalAddIgnoreNullValues(Ljava/lang/String;Ljava/lang/Object;)Lcom/google/firebase/encoders/json/JsonValueObjectEncoderContext; +HSPLcom/google/firebase/encoders/json/JsonValueObjectEncoderContext;->maybeUnNest()V +Lcom/google/firebase/encoders/json/NumberedEnum; +Lcom/google/firebase/events/EventHandler; +Lcom/google/firebase/events/Publisher; +Lcom/google/firebase/events/Subscriber; +Lcom/google/firebase/heartbeatinfo/DefaultHeartBeatController; +HSPLcom/google/firebase/heartbeatinfo/DefaultHeartBeatController;->(Landroid/content/Context;Ljava/lang/String;Ljava/util/Set;Lcom/google/firebase/inject/Provider;Ljava/util/concurrent/Executor;)V +HSPLcom/google/firebase/heartbeatinfo/DefaultHeartBeatController;->(Lcom/google/firebase/inject/Provider;Ljava/util/Set;Ljava/util/concurrent/Executor;Lcom/google/firebase/inject/Provider;Landroid/content/Context;)V +HSPLcom/google/firebase/heartbeatinfo/DefaultHeartBeatController;->component()Lcom/google/firebase/components/Component; +HSPLcom/google/firebase/heartbeatinfo/DefaultHeartBeatController;->lambda$component$3(Lcom/google/firebase/components/Qualified;Lcom/google/firebase/components/ComponentContainer;)Lcom/google/firebase/heartbeatinfo/DefaultHeartBeatController; +HSPLcom/google/firebase/heartbeatinfo/DefaultHeartBeatController;->lambda$new$2(Landroid/content/Context;Ljava/lang/String;)Lcom/google/firebase/heartbeatinfo/HeartBeatInfoStorage; +HSPLcom/google/firebase/heartbeatinfo/DefaultHeartBeatController;->lambda$registerHeartBeat$0$com-google-firebase-heartbeatinfo-DefaultHeartBeatController()Ljava/lang/Void; +HSPLcom/google/firebase/heartbeatinfo/DefaultHeartBeatController;->registerHeartBeat()Lcom/google/android/gms/tasks/Task; +Lcom/google/firebase/heartbeatinfo/DefaultHeartBeatController$$ExternalSyntheticLambda1; +HSPLcom/google/firebase/heartbeatinfo/DefaultHeartBeatController$$ExternalSyntheticLambda1;->(Lcom/google/firebase/heartbeatinfo/DefaultHeartBeatController;)V +HSPLcom/google/firebase/heartbeatinfo/DefaultHeartBeatController$$ExternalSyntheticLambda1;->call()Ljava/lang/Object; +Lcom/google/firebase/heartbeatinfo/DefaultHeartBeatController$$ExternalSyntheticLambda2; +HSPLcom/google/firebase/heartbeatinfo/DefaultHeartBeatController$$ExternalSyntheticLambda2;->(Lcom/google/firebase/components/Qualified;)V +HSPLcom/google/firebase/heartbeatinfo/DefaultHeartBeatController$$ExternalSyntheticLambda2;->create(Lcom/google/firebase/components/ComponentContainer;)Ljava/lang/Object; +Lcom/google/firebase/heartbeatinfo/DefaultHeartBeatController$$ExternalSyntheticLambda3; +HSPLcom/google/firebase/heartbeatinfo/DefaultHeartBeatController$$ExternalSyntheticLambda3;->(Landroid/content/Context;Ljava/lang/String;)V +HSPLcom/google/firebase/heartbeatinfo/DefaultHeartBeatController$$ExternalSyntheticLambda3;->get()Ljava/lang/Object; +Lcom/google/firebase/heartbeatinfo/HeartBeatConsumer; +Lcom/google/firebase/heartbeatinfo/HeartBeatConsumerComponent; +HSPLcom/google/firebase/heartbeatinfo/HeartBeatConsumerComponent;->create()Lcom/google/firebase/components/Component; +Lcom/google/firebase/heartbeatinfo/HeartBeatConsumerComponent$1; +HSPLcom/google/firebase/heartbeatinfo/HeartBeatConsumerComponent$1;->()V +Lcom/google/firebase/heartbeatinfo/HeartBeatController; +Lcom/google/firebase/heartbeatinfo/HeartBeatInfo; +Lcom/google/firebase/heartbeatinfo/HeartBeatInfoStorage; +HSPLcom/google/firebase/heartbeatinfo/HeartBeatInfoStorage;->()V +HSPLcom/google/firebase/heartbeatinfo/HeartBeatInfoStorage;->(Landroid/content/Context;Ljava/lang/String;)V +HSPLcom/google/firebase/heartbeatinfo/HeartBeatInfoStorage;->getFormattedDate(J)Ljava/lang/String; +HSPLcom/google/firebase/heartbeatinfo/HeartBeatInfoStorage;->getStoredUserAgentString(Ljava/lang/String;)Ljava/lang/String; +HSPLcom/google/firebase/heartbeatinfo/HeartBeatInfoStorage;->storeHeartBeat(JLjava/lang/String;)V +Lcom/google/firebase/inject/Deferred; +Lcom/google/firebase/inject/Deferred$DeferredHandler; +Lcom/google/firebase/inject/Provider; +Lcom/google/firebase/installations/FirebaseInstallations; +HSPLcom/google/firebase/installations/FirebaseInstallations;->()V +HSPLcom/google/firebase/installations/FirebaseInstallations;->(Lcom/google/firebase/FirebaseApp;Lcom/google/firebase/inject/Provider;Ljava/util/concurrent/ExecutorService;Ljava/util/concurrent/Executor;)V +HSPLcom/google/firebase/installations/FirebaseInstallations;->(Ljava/util/concurrent/ExecutorService;Ljava/util/concurrent/Executor;Lcom/google/firebase/FirebaseApp;Lcom/google/firebase/installations/remote/FirebaseInstallationServiceClient;Lcom/google/firebase/installations/local/PersistedInstallation;Lcom/google/firebase/installations/Utils;Lcom/google/firebase/components/Lazy;Lcom/google/firebase/installations/RandomFidGenerator;)V +Lcom/google/firebase/installations/FirebaseInstallations$$ExternalSyntheticLambda4; +HSPLcom/google/firebase/installations/FirebaseInstallations$$ExternalSyntheticLambda4;->(Lcom/google/firebase/FirebaseApp;)V +Lcom/google/firebase/installations/FirebaseInstallations$1; +HSPLcom/google/firebase/installations/FirebaseInstallations$1;->()V +Lcom/google/firebase/installations/FirebaseInstallationsApi; +Lcom/google/firebase/installations/FirebaseInstallationsException; +Lcom/google/firebase/installations/FirebaseInstallationsKtxRegistrar; +HSPLcom/google/firebase/installations/FirebaseInstallationsKtxRegistrar;->()V +HSPLcom/google/firebase/installations/FirebaseInstallationsKtxRegistrar;->getComponents()Ljava/util/List; +Lcom/google/firebase/installations/FirebaseInstallationsRegistrar; +HSPLcom/google/firebase/installations/FirebaseInstallationsRegistrar;->()V +HSPLcom/google/firebase/installations/FirebaseInstallationsRegistrar;->getComponents()Ljava/util/List; +HSPLcom/google/firebase/installations/FirebaseInstallationsRegistrar;->lambda$getComponents$0(Lcom/google/firebase/components/ComponentContainer;)Lcom/google/firebase/installations/FirebaseInstallationsApi; +Lcom/google/firebase/installations/FirebaseInstallationsRegistrar$$ExternalSyntheticLambda0; +HSPLcom/google/firebase/installations/FirebaseInstallationsRegistrar$$ExternalSyntheticLambda0;->()V +HSPLcom/google/firebase/installations/FirebaseInstallationsRegistrar$$ExternalSyntheticLambda0;->create(Lcom/google/firebase/components/ComponentContainer;)Ljava/lang/Object; +Lcom/google/firebase/installations/RandomFidGenerator; +HSPLcom/google/firebase/installations/RandomFidGenerator;->()V +HSPLcom/google/firebase/installations/RandomFidGenerator;->()V +Lcom/google/firebase/installations/Utils; +HSPLcom/google/firebase/installations/Utils;->()V +HSPLcom/google/firebase/installations/Utils;->(Lcom/google/firebase/installations/time/Clock;)V +HSPLcom/google/firebase/installations/Utils;->getInstance()Lcom/google/firebase/installations/Utils; +HSPLcom/google/firebase/installations/Utils;->getInstance(Lcom/google/firebase/installations/time/Clock;)Lcom/google/firebase/installations/Utils; +Lcom/google/firebase/installations/local/PersistedInstallation; +HSPLcom/google/firebase/installations/local/PersistedInstallation;->(Lcom/google/firebase/FirebaseApp;)V +Lcom/google/firebase/installations/remote/FirebaseInstallationServiceClient; +HSPLcom/google/firebase/installations/remote/FirebaseInstallationServiceClient;->()V +HSPLcom/google/firebase/installations/remote/FirebaseInstallationServiceClient;->(Landroid/content/Context;Lcom/google/firebase/inject/Provider;)V +Lcom/google/firebase/installations/remote/RequestLimiter; +HSPLcom/google/firebase/installations/remote/RequestLimiter;->()V +HSPLcom/google/firebase/installations/remote/RequestLimiter;->()V +Lcom/google/firebase/installations/time/Clock; +Lcom/google/firebase/installations/time/SystemClock; +HSPLcom/google/firebase/installations/time/SystemClock;->()V +HSPLcom/google/firebase/installations/time/SystemClock;->getInstance()Lcom/google/firebase/installations/time/SystemClock; +Lcom/google/firebase/internal/DataCollectionConfigStorage; +HSPLcom/google/firebase/internal/DataCollectionConfigStorage;->(Landroid/content/Context;Ljava/lang/String;Lcom/google/firebase/events/Publisher;)V +HSPLcom/google/firebase/internal/DataCollectionConfigStorage;->directBootSafe(Landroid/content/Context;)Landroid/content/Context; +HSPLcom/google/firebase/internal/DataCollectionConfigStorage;->isEnabled()Z +HSPLcom/google/firebase/internal/DataCollectionConfigStorage;->readAutoDataCollectionEnabled()Z +HSPLcom/google/firebase/internal/DataCollectionConfigStorage;->readManifestDataCollectionEnabled()Z +Lcom/google/firebase/ktx/Firebase; +HSPLcom/google/firebase/ktx/Firebase;->()V +HSPLcom/google/firebase/ktx/Firebase;->()V +Lcom/google/firebase/ktx/FirebaseCommonLegacyRegistrar; +HSPLcom/google/firebase/ktx/FirebaseCommonLegacyRegistrar;->()V +HSPLcom/google/firebase/ktx/FirebaseCommonLegacyRegistrar;->getComponents()Ljava/util/List; +Lcom/google/firebase/platforminfo/AutoValue_LibraryVersion; +HSPLcom/google/firebase/platforminfo/AutoValue_LibraryVersion;->(Ljava/lang/String;Ljava/lang/String;)V +HSPLcom/google/firebase/platforminfo/AutoValue_LibraryVersion;->getLibraryName()Ljava/lang/String; +HSPLcom/google/firebase/platforminfo/AutoValue_LibraryVersion;->getVersion()Ljava/lang/String; +HSPLcom/google/firebase/platforminfo/AutoValue_LibraryVersion;->hashCode()I +Lcom/google/firebase/platforminfo/DefaultUserAgentPublisher; +HSPLcom/google/firebase/platforminfo/DefaultUserAgentPublisher;->(Ljava/util/Set;Lcom/google/firebase/platforminfo/GlobalLibraryVersionRegistrar;)V +HSPLcom/google/firebase/platforminfo/DefaultUserAgentPublisher;->component()Lcom/google/firebase/components/Component; +HSPLcom/google/firebase/platforminfo/DefaultUserAgentPublisher;->getUserAgent()Ljava/lang/String; +HSPLcom/google/firebase/platforminfo/DefaultUserAgentPublisher;->lambda$component$0(Lcom/google/firebase/components/ComponentContainer;)Lcom/google/firebase/platforminfo/UserAgentPublisher; +HSPLcom/google/firebase/platforminfo/DefaultUserAgentPublisher;->toUserAgent(Ljava/util/Set;)Ljava/lang/String; +Lcom/google/firebase/platforminfo/DefaultUserAgentPublisher$$ExternalSyntheticLambda0; +HSPLcom/google/firebase/platforminfo/DefaultUserAgentPublisher$$ExternalSyntheticLambda0;->()V +HSPLcom/google/firebase/platforminfo/DefaultUserAgentPublisher$$ExternalSyntheticLambda0;->create(Lcom/google/firebase/components/ComponentContainer;)Ljava/lang/Object; +Lcom/google/firebase/platforminfo/GlobalLibraryVersionRegistrar; +HSPLcom/google/firebase/platforminfo/GlobalLibraryVersionRegistrar;->()V +HSPLcom/google/firebase/platforminfo/GlobalLibraryVersionRegistrar;->getInstance()Lcom/google/firebase/platforminfo/GlobalLibraryVersionRegistrar; +HSPLcom/google/firebase/platforminfo/GlobalLibraryVersionRegistrar;->getRegisteredVersions()Ljava/util/Set; +Lcom/google/firebase/platforminfo/KotlinDetector; +HSPLcom/google/firebase/platforminfo/KotlinDetector;->detectVersion()Ljava/lang/String; +Lcom/google/firebase/platforminfo/LibraryVersion; +HSPLcom/google/firebase/platforminfo/LibraryVersion;->()V +HSPLcom/google/firebase/platforminfo/LibraryVersion;->create(Ljava/lang/String;Ljava/lang/String;)Lcom/google/firebase/platforminfo/LibraryVersion; +Lcom/google/firebase/platforminfo/LibraryVersionComponent; +HSPLcom/google/firebase/platforminfo/LibraryVersionComponent;->create(Ljava/lang/String;Ljava/lang/String;)Lcom/google/firebase/components/Component; +HSPLcom/google/firebase/platforminfo/LibraryVersionComponent;->fromContext(Ljava/lang/String;Lcom/google/firebase/platforminfo/LibraryVersionComponent$VersionExtractor;)Lcom/google/firebase/components/Component; +HSPLcom/google/firebase/platforminfo/LibraryVersionComponent;->lambda$fromContext$0(Ljava/lang/String;Lcom/google/firebase/platforminfo/LibraryVersionComponent$VersionExtractor;Lcom/google/firebase/components/ComponentContainer;)Lcom/google/firebase/platforminfo/LibraryVersion; +Lcom/google/firebase/platforminfo/LibraryVersionComponent$$ExternalSyntheticLambda0; +HSPLcom/google/firebase/platforminfo/LibraryVersionComponent$$ExternalSyntheticLambda0;->(Ljava/lang/String;Lcom/google/firebase/platforminfo/LibraryVersionComponent$VersionExtractor;)V +HSPLcom/google/firebase/platforminfo/LibraryVersionComponent$$ExternalSyntheticLambda0;->create(Lcom/google/firebase/components/ComponentContainer;)Ljava/lang/Object; +Lcom/google/firebase/platforminfo/LibraryVersionComponent$VersionExtractor; +Lcom/google/firebase/platforminfo/UserAgentPublisher; +Lcom/google/firebase/provider/FirebaseInitProvider; +HSPLcom/google/firebase/provider/FirebaseInitProvider;->()V +HSPLcom/google/firebase/provider/FirebaseInitProvider;->()V +HSPLcom/google/firebase/provider/FirebaseInitProvider;->attachInfo(Landroid/content/Context;Landroid/content/pm/ProviderInfo;)V +HSPLcom/google/firebase/provider/FirebaseInitProvider;->checkContentProviderAuthority(Landroid/content/pm/ProviderInfo;)V +HSPLcom/google/firebase/provider/FirebaseInitProvider;->getStartupTime()Lcom/google/firebase/StartupTime; +HSPLcom/google/firebase/provider/FirebaseInitProvider;->isCurrentlyInitializing()Z +HSPLcom/google/firebase/provider/FirebaseInitProvider;->onCreate()Z +Lcom/google/firebase/remoteconfig/interop/FirebaseRemoteConfigInterop; +Lcom/google/firebase/remoteconfig/interop/rollouts/RolloutsStateSubscriber; +Lcom/google/firebase/sessions/AndroidApplicationInfo; +HSPLcom/google/firebase/sessions/AndroidApplicationInfo;->(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/google/firebase/sessions/ProcessDetails;Ljava/util/List;)V +Lcom/google/firebase/sessions/ApplicationInfo; +HSPLcom/google/firebase/sessions/ApplicationInfo;->(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lcom/google/firebase/sessions/LogEnvironment;Lcom/google/firebase/sessions/AndroidApplicationInfo;)V +Lcom/google/firebase/sessions/AutoSessionEventEncoder; +HSPLcom/google/firebase/sessions/AutoSessionEventEncoder;->()V +HSPLcom/google/firebase/sessions/AutoSessionEventEncoder;->()V +HSPLcom/google/firebase/sessions/AutoSessionEventEncoder;->configure(Lcom/google/firebase/encoders/config/EncoderConfig;)V +Lcom/google/firebase/sessions/AutoSessionEventEncoder$AndroidApplicationInfoEncoder; +HSPLcom/google/firebase/sessions/AutoSessionEventEncoder$AndroidApplicationInfoEncoder;->()V +HSPLcom/google/firebase/sessions/AutoSessionEventEncoder$AndroidApplicationInfoEncoder;->()V +Lcom/google/firebase/sessions/AutoSessionEventEncoder$ApplicationInfoEncoder; +HSPLcom/google/firebase/sessions/AutoSessionEventEncoder$ApplicationInfoEncoder;->()V +HSPLcom/google/firebase/sessions/AutoSessionEventEncoder$ApplicationInfoEncoder;->()V +Lcom/google/firebase/sessions/AutoSessionEventEncoder$DataCollectionStatusEncoder; +HSPLcom/google/firebase/sessions/AutoSessionEventEncoder$DataCollectionStatusEncoder;->()V +HSPLcom/google/firebase/sessions/AutoSessionEventEncoder$DataCollectionStatusEncoder;->()V +Lcom/google/firebase/sessions/AutoSessionEventEncoder$ProcessDetailsEncoder; +HSPLcom/google/firebase/sessions/AutoSessionEventEncoder$ProcessDetailsEncoder;->()V +HSPLcom/google/firebase/sessions/AutoSessionEventEncoder$ProcessDetailsEncoder;->()V +Lcom/google/firebase/sessions/AutoSessionEventEncoder$SessionEventEncoder; +HSPLcom/google/firebase/sessions/AutoSessionEventEncoder$SessionEventEncoder;->()V +HSPLcom/google/firebase/sessions/AutoSessionEventEncoder$SessionEventEncoder;->()V +Lcom/google/firebase/sessions/AutoSessionEventEncoder$SessionInfoEncoder; +HSPLcom/google/firebase/sessions/AutoSessionEventEncoder$SessionInfoEncoder;->()V +HSPLcom/google/firebase/sessions/AutoSessionEventEncoder$SessionInfoEncoder;->()V +Lcom/google/firebase/sessions/DataCollectionStatus; +Lcom/google/firebase/sessions/FirebaseSessions; +HSPLcom/google/firebase/sessions/FirebaseSessions;->()V +HSPLcom/google/firebase/sessions/FirebaseSessions;->(Lcom/google/firebase/FirebaseApp;Lcom/google/firebase/sessions/settings/SessionsSettings;Lkotlin/coroutines/CoroutineContext;)V +Lcom/google/firebase/sessions/FirebaseSessions$1; +HSPLcom/google/firebase/sessions/FirebaseSessions$1;->(Lcom/google/firebase/sessions/FirebaseSessions;Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/Continuation;)V +HSPLcom/google/firebase/sessions/FirebaseSessions$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/google/firebase/sessions/FirebaseSessions$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/google/firebase/sessions/FirebaseSessions$Companion; +HSPLcom/google/firebase/sessions/FirebaseSessions$Companion;->()V +HSPLcom/google/firebase/sessions/FirebaseSessions$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/google/firebase/sessions/FirebaseSessionsRegistrar; +HSPLcom/google/firebase/sessions/FirebaseSessionsRegistrar;->$r8$lambda$JITndpZCWeA0w9BDlkcI3l22oGY(Lcom/google/firebase/components/ComponentContainer;)Lcom/google/firebase/sessions/FirebaseSessions; +HSPLcom/google/firebase/sessions/FirebaseSessionsRegistrar;->$r8$lambda$lQmicvH5m7EC8I4trkeatnIrMEc(Lcom/google/firebase/components/ComponentContainer;)Lcom/google/firebase/sessions/settings/SessionsSettings; +HSPLcom/google/firebase/sessions/FirebaseSessionsRegistrar;->()V +HSPLcom/google/firebase/sessions/FirebaseSessionsRegistrar;->()V +HSPLcom/google/firebase/sessions/FirebaseSessionsRegistrar;->getComponents$lambda-0(Lcom/google/firebase/components/ComponentContainer;)Lcom/google/firebase/sessions/FirebaseSessions; +HSPLcom/google/firebase/sessions/FirebaseSessionsRegistrar;->getComponents$lambda-3(Lcom/google/firebase/components/ComponentContainer;)Lcom/google/firebase/sessions/settings/SessionsSettings; +HSPLcom/google/firebase/sessions/FirebaseSessionsRegistrar;->getComponents()Ljava/util/List; +Lcom/google/firebase/sessions/FirebaseSessionsRegistrar$$ExternalSyntheticLambda0; +HSPLcom/google/firebase/sessions/FirebaseSessionsRegistrar$$ExternalSyntheticLambda0;->()V +HSPLcom/google/firebase/sessions/FirebaseSessionsRegistrar$$ExternalSyntheticLambda0;->create(Lcom/google/firebase/components/ComponentContainer;)Ljava/lang/Object; +Lcom/google/firebase/sessions/FirebaseSessionsRegistrar$$ExternalSyntheticLambda1; +HSPLcom/google/firebase/sessions/FirebaseSessionsRegistrar$$ExternalSyntheticLambda1;->()V +Lcom/google/firebase/sessions/FirebaseSessionsRegistrar$$ExternalSyntheticLambda2; +HSPLcom/google/firebase/sessions/FirebaseSessionsRegistrar$$ExternalSyntheticLambda2;->()V +Lcom/google/firebase/sessions/FirebaseSessionsRegistrar$$ExternalSyntheticLambda3; +HSPLcom/google/firebase/sessions/FirebaseSessionsRegistrar$$ExternalSyntheticLambda3;->()V +HSPLcom/google/firebase/sessions/FirebaseSessionsRegistrar$$ExternalSyntheticLambda3;->create(Lcom/google/firebase/components/ComponentContainer;)Ljava/lang/Object; +Lcom/google/firebase/sessions/FirebaseSessionsRegistrar$$ExternalSyntheticLambda4; +HSPLcom/google/firebase/sessions/FirebaseSessionsRegistrar$$ExternalSyntheticLambda4;->()V +Lcom/google/firebase/sessions/FirebaseSessionsRegistrar$$ExternalSyntheticLambda5; +HSPLcom/google/firebase/sessions/FirebaseSessionsRegistrar$$ExternalSyntheticLambda5;->()V +Lcom/google/firebase/sessions/FirebaseSessionsRegistrar$Companion; +HSPLcom/google/firebase/sessions/FirebaseSessionsRegistrar$Companion;->()V +HSPLcom/google/firebase/sessions/FirebaseSessionsRegistrar$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/google/firebase/sessions/LogEnvironment; +HSPLcom/google/firebase/sessions/LogEnvironment;->$values()[Lcom/google/firebase/sessions/LogEnvironment; +HSPLcom/google/firebase/sessions/LogEnvironment;->()V +HSPLcom/google/firebase/sessions/LogEnvironment;->(Ljava/lang/String;II)V +Lcom/google/firebase/sessions/ProcessDetails; +HSPLcom/google/firebase/sessions/ProcessDetails;->(Ljava/lang/String;IIZ)V +HSPLcom/google/firebase/sessions/ProcessDetails;->getPid()I +Lcom/google/firebase/sessions/ProcessDetailsProvider; +HSPLcom/google/firebase/sessions/ProcessDetailsProvider;->()V +HSPLcom/google/firebase/sessions/ProcessDetailsProvider;->()V +HSPLcom/google/firebase/sessions/ProcessDetailsProvider;->getAppProcessDetails(Landroid/content/Context;)Ljava/util/List; +HSPLcom/google/firebase/sessions/ProcessDetailsProvider;->getCurrentProcessDetails(Landroid/content/Context;)Lcom/google/firebase/sessions/ProcessDetails; +HSPLcom/google/firebase/sessions/ProcessDetailsProvider;->getProcessName$com_google_firebase_firebase_sessions()Ljava/lang/String; +Lcom/google/firebase/sessions/SessionDataStoreConfigs; +HSPLcom/google/firebase/sessions/SessionDataStoreConfigs;->()V +HSPLcom/google/firebase/sessions/SessionDataStoreConfigs;->()V +HSPLcom/google/firebase/sessions/SessionDataStoreConfigs;->getSETTINGS_CONFIG_NAME()Ljava/lang/String; +Lcom/google/firebase/sessions/SessionDatastore; +Lcom/google/firebase/sessions/SessionEvent; +Lcom/google/firebase/sessions/SessionEvents; +HSPLcom/google/firebase/sessions/SessionEvents;->()V +HSPLcom/google/firebase/sessions/SessionEvents;->()V +HSPLcom/google/firebase/sessions/SessionEvents;->getApplicationInfo(Lcom/google/firebase/FirebaseApp;)Lcom/google/firebase/sessions/ApplicationInfo; +Lcom/google/firebase/sessions/SessionFirelogPublisher; +Lcom/google/firebase/sessions/SessionGenerator; +Lcom/google/firebase/sessions/SessionInfo; +Lcom/google/firebase/sessions/SessionLifecycleServiceBinder; +Lcom/google/firebase/sessions/SessionsActivityLifecycleCallbacks; +HSPLcom/google/firebase/sessions/SessionsActivityLifecycleCallbacks;->()V +HSPLcom/google/firebase/sessions/SessionsActivityLifecycleCallbacks;->()V +HSPLcom/google/firebase/sessions/SessionsActivityLifecycleCallbacks;->onActivityCreated(Landroid/app/Activity;Landroid/os/Bundle;)V +HSPLcom/google/firebase/sessions/SessionsActivityLifecycleCallbacks;->onActivityResumed(Landroid/app/Activity;)V +HSPLcom/google/firebase/sessions/SessionsActivityLifecycleCallbacks;->onActivityStarted(Landroid/app/Activity;)V +Lcom/google/firebase/sessions/api/FirebaseSessionsDependencies; +HSPLcom/google/firebase/sessions/api/FirebaseSessionsDependencies;->()V +HSPLcom/google/firebase/sessions/api/FirebaseSessionsDependencies;->()V +HSPLcom/google/firebase/sessions/api/FirebaseSessionsDependencies;->addDependency(Lcom/google/firebase/sessions/api/SessionSubscriber$Name;)V +HSPLcom/google/firebase/sessions/api/FirebaseSessionsDependencies;->getDependency(Lcom/google/firebase/sessions/api/SessionSubscriber$Name;)Lcom/google/firebase/sessions/api/FirebaseSessionsDependencies$Dependency; +HSPLcom/google/firebase/sessions/api/FirebaseSessionsDependencies;->getRegisteredSubscribers$com_google_firebase_firebase_sessions(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLcom/google/firebase/sessions/api/FirebaseSessionsDependencies;->getSubscriber$com_google_firebase_firebase_sessions(Lcom/google/firebase/sessions/api/SessionSubscriber$Name;)Lcom/google/firebase/sessions/api/SessionSubscriber; +HSPLcom/google/firebase/sessions/api/FirebaseSessionsDependencies;->register(Lcom/google/firebase/sessions/api/SessionSubscriber;)V +Lcom/google/firebase/sessions/api/FirebaseSessionsDependencies$Dependency; +HSPLcom/google/firebase/sessions/api/FirebaseSessionsDependencies$Dependency;->(Lkotlinx/coroutines/sync/Mutex;Lcom/google/firebase/sessions/api/SessionSubscriber;)V +HSPLcom/google/firebase/sessions/api/FirebaseSessionsDependencies$Dependency;->(Lkotlinx/coroutines/sync/Mutex;Lcom/google/firebase/sessions/api/SessionSubscriber;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/google/firebase/sessions/api/FirebaseSessionsDependencies$Dependency;->getMutex()Lkotlinx/coroutines/sync/Mutex; +HSPLcom/google/firebase/sessions/api/FirebaseSessionsDependencies$Dependency;->getSubscriber()Lcom/google/firebase/sessions/api/SessionSubscriber; +HSPLcom/google/firebase/sessions/api/FirebaseSessionsDependencies$Dependency;->setSubscriber(Lcom/google/firebase/sessions/api/SessionSubscriber;)V +Lcom/google/firebase/sessions/api/FirebaseSessionsDependencies$getRegisteredSubscribers$1; +HSPLcom/google/firebase/sessions/api/FirebaseSessionsDependencies$getRegisteredSubscribers$1;->(Lcom/google/firebase/sessions/api/FirebaseSessionsDependencies;Lkotlin/coroutines/Continuation;)V +Lcom/google/firebase/sessions/api/SessionSubscriber; +Lcom/google/firebase/sessions/api/SessionSubscriber$Name; +HSPLcom/google/firebase/sessions/api/SessionSubscriber$Name;->$values()[Lcom/google/firebase/sessions/api/SessionSubscriber$Name; +HSPLcom/google/firebase/sessions/api/SessionSubscriber$Name;->()V +HSPLcom/google/firebase/sessions/api/SessionSubscriber$Name;->(Ljava/lang/String;I)V +Lcom/google/firebase/sessions/settings/CrashlyticsSettingsFetcher; +Lcom/google/firebase/sessions/settings/LocalOverrideSettings; +HSPLcom/google/firebase/sessions/settings/LocalOverrideSettings;->()V +HSPLcom/google/firebase/sessions/settings/LocalOverrideSettings;->(Landroid/content/Context;)V +Lcom/google/firebase/sessions/settings/LocalOverrideSettings$Companion; +HSPLcom/google/firebase/sessions/settings/LocalOverrideSettings$Companion;->()V +HSPLcom/google/firebase/sessions/settings/LocalOverrideSettings$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/google/firebase/sessions/settings/RemoteSettings; +HSPLcom/google/firebase/sessions/settings/RemoteSettings;->()V +HSPLcom/google/firebase/sessions/settings/RemoteSettings;->(Lkotlin/coroutines/CoroutineContext;Lcom/google/firebase/installations/FirebaseInstallationsApi;Lcom/google/firebase/sessions/ApplicationInfo;Lcom/google/firebase/sessions/settings/CrashlyticsSettingsFetcher;Landroidx/datastore/core/DataStore;)V +Lcom/google/firebase/sessions/settings/RemoteSettings$Companion; +HSPLcom/google/firebase/sessions/settings/RemoteSettings$Companion;->()V +HSPLcom/google/firebase/sessions/settings/RemoteSettings$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/google/firebase/sessions/settings/RemoteSettingsFetcher; +HSPLcom/google/firebase/sessions/settings/RemoteSettingsFetcher;->()V +HSPLcom/google/firebase/sessions/settings/RemoteSettingsFetcher;->(Lcom/google/firebase/sessions/ApplicationInfo;Lkotlin/coroutines/CoroutineContext;Ljava/lang/String;)V +HSPLcom/google/firebase/sessions/settings/RemoteSettingsFetcher;->(Lcom/google/firebase/sessions/ApplicationInfo;Lkotlin/coroutines/CoroutineContext;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/google/firebase/sessions/settings/RemoteSettingsFetcher$Companion; +HSPLcom/google/firebase/sessions/settings/RemoteSettingsFetcher$Companion;->()V +HSPLcom/google/firebase/sessions/settings/RemoteSettingsFetcher$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/google/firebase/sessions/settings/SessionConfigs; +HSPLcom/google/firebase/sessions/settings/SessionConfigs;->(Ljava/lang/Boolean;Ljava/lang/Double;Ljava/lang/Integer;Ljava/lang/Integer;Ljava/lang/Long;)V +Lcom/google/firebase/sessions/settings/SessionsSettings; +HSPLcom/google/firebase/sessions/settings/SessionsSettings;->()V +HSPLcom/google/firebase/sessions/settings/SessionsSettings;->(Landroid/content/Context;Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/CoroutineContext;Lcom/google/firebase/installations/FirebaseInstallationsApi;Lcom/google/firebase/sessions/ApplicationInfo;)V +HSPLcom/google/firebase/sessions/settings/SessionsSettings;->(Lcom/google/firebase/FirebaseApp;Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/CoroutineContext;Lcom/google/firebase/installations/FirebaseInstallationsApi;)V +HSPLcom/google/firebase/sessions/settings/SessionsSettings;->(Lcom/google/firebase/sessions/settings/SettingsProvider;Lcom/google/firebase/sessions/settings/SettingsProvider;)V +HSPLcom/google/firebase/sessions/settings/SessionsSettings;->access$getDataStore$delegate$cp()Lkotlin/properties/ReadOnlyProperty; +Lcom/google/firebase/sessions/settings/SessionsSettings$Companion; +HSPLcom/google/firebase/sessions/settings/SessionsSettings$Companion;->()V +HSPLcom/google/firebase/sessions/settings/SessionsSettings$Companion;->()V +HSPLcom/google/firebase/sessions/settings/SessionsSettings$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLcom/google/firebase/sessions/settings/SessionsSettings$Companion;->access$getDataStore(Lcom/google/firebase/sessions/settings/SessionsSettings$Companion;Landroid/content/Context;)Landroidx/datastore/core/DataStore; +HSPLcom/google/firebase/sessions/settings/SessionsSettings$Companion;->getDataStore(Landroid/content/Context;)Landroidx/datastore/core/DataStore; +Lcom/google/firebase/sessions/settings/SettingsCache; +HSPLcom/google/firebase/sessions/settings/SettingsCache;->()V +HSPLcom/google/firebase/sessions/settings/SettingsCache;->(Landroidx/datastore/core/DataStore;)V +HSPLcom/google/firebase/sessions/settings/SettingsCache;->access$getDataStore$p(Lcom/google/firebase/sessions/settings/SettingsCache;)Landroidx/datastore/core/DataStore; +HSPLcom/google/firebase/sessions/settings/SettingsCache;->access$updateSessionConfigs(Lcom/google/firebase/sessions/settings/SettingsCache;Landroidx/datastore/preferences/core/Preferences;)V +HSPLcom/google/firebase/sessions/settings/SettingsCache;->updateSessionConfigs(Landroidx/datastore/preferences/core/Preferences;)V +Lcom/google/firebase/sessions/settings/SettingsCache$1; +HSPLcom/google/firebase/sessions/settings/SettingsCache$1;->(Lcom/google/firebase/sessions/settings/SettingsCache;Lkotlin/coroutines/Continuation;)V +HSPLcom/google/firebase/sessions/settings/SettingsCache$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLcom/google/firebase/sessions/settings/SettingsCache$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lcom/google/firebase/sessions/settings/SettingsCache$Companion; +HSPLcom/google/firebase/sessions/settings/SettingsCache$Companion;->()V +HSPLcom/google/firebase/sessions/settings/SettingsCache$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lcom/google/firebase/sessions/settings/SettingsProvider; +Lcom/google/firebase/tracing/ComponentMonitor; +HSPLcom/google/firebase/tracing/ComponentMonitor;->()V +HSPLcom/google/firebase/tracing/ComponentMonitor;->lambda$processRegistrar$0(Ljava/lang/String;Lcom/google/firebase/components/Component;Lcom/google/firebase/components/ComponentContainer;)Ljava/lang/Object; +HSPLcom/google/firebase/tracing/ComponentMonitor;->processRegistrar(Lcom/google/firebase/components/ComponentRegistrar;)Ljava/util/List; +Lcom/google/firebase/tracing/ComponentMonitor$$ExternalSyntheticLambda0; +HSPLcom/google/firebase/tracing/ComponentMonitor$$ExternalSyntheticLambda0;->(Ljava/lang/String;Lcom/google/firebase/components/Component;)V +HSPLcom/google/firebase/tracing/ComponentMonitor$$ExternalSyntheticLambda0;->create(Lcom/google/firebase/components/ComponentContainer;)Ljava/lang/Object; +Lcom/google/firebase/tracing/FirebaseTrace; +HSPLcom/google/firebase/tracing/FirebaseTrace;->popTrace()V +HSPLcom/google/firebase/tracing/FirebaseTrace;->pushTrace(Ljava/lang/String;)V +Lcom/google/mlkit/common/internal/CommonComponentRegistrar; +HSPLcom/google/mlkit/common/internal/CommonComponentRegistrar;->()V +HSPLcom/google/mlkit/common/internal/CommonComponentRegistrar;->getComponents()Ljava/util/List; +Lcom/google/mlkit/common/internal/MlKitComponentDiscoveryService; +Lcom/google/mlkit/common/internal/MlKitInitProvider; +HSPLcom/google/mlkit/common/internal/MlKitInitProvider;->()V +HSPLcom/google/mlkit/common/internal/MlKitInitProvider;->attachInfo(Landroid/content/Context;Landroid/content/pm/ProviderInfo;)V +HSPLcom/google/mlkit/common/internal/MlKitInitProvider;->onCreate()Z +Lcom/google/mlkit/common/internal/model/zzg; +Lcom/google/mlkit/common/internal/zza; +HSPLcom/google/mlkit/common/internal/zza;->()V +HSPLcom/google/mlkit/common/internal/zza;->()V +Lcom/google/mlkit/common/internal/zzb; +HSPLcom/google/mlkit/common/internal/zzb;->()V +HSPLcom/google/mlkit/common/internal/zzb;->()V +Lcom/google/mlkit/common/internal/zzc; +HSPLcom/google/mlkit/common/internal/zzc;->()V +HSPLcom/google/mlkit/common/internal/zzc;->()V +Lcom/google/mlkit/common/internal/zzd; +HSPLcom/google/mlkit/common/internal/zzd;->()V +HSPLcom/google/mlkit/common/internal/zzd;->()V +Lcom/google/mlkit/common/internal/zze; +HSPLcom/google/mlkit/common/internal/zze;->()V +HSPLcom/google/mlkit/common/internal/zze;->()V +Lcom/google/mlkit/common/internal/zzf; +HSPLcom/google/mlkit/common/internal/zzf;->()V +HSPLcom/google/mlkit/common/internal/zzf;->()V +Lcom/google/mlkit/common/internal/zzg; +HSPLcom/google/mlkit/common/internal/zzg;->()V +HSPLcom/google/mlkit/common/internal/zzg;->()V +Lcom/google/mlkit/common/internal/zzh; +HSPLcom/google/mlkit/common/internal/zzh;->()V +HSPLcom/google/mlkit/common/internal/zzh;->()V +Lcom/google/mlkit/common/model/RemoteModelManager; +Lcom/google/mlkit/common/model/RemoteModelManager$RemoteModelManagerRegistration; +Lcom/google/mlkit/common/sdkinternal/Cleaner; +Lcom/google/mlkit/common/sdkinternal/CloseGuard$Factory; +Lcom/google/mlkit/common/sdkinternal/ExecutorSelector; +Lcom/google/mlkit/common/sdkinternal/LazyInstanceMap; +Lcom/google/mlkit/common/sdkinternal/MlKitContext; +HSPLcom/google/mlkit/common/sdkinternal/MlKitContext;->()V +HSPLcom/google/mlkit/common/sdkinternal/MlKitContext;->()V +HSPLcom/google/mlkit/common/sdkinternal/MlKitContext;->zza(Landroid/content/Context;)Lcom/google/mlkit/common/sdkinternal/MlKitContext; +HSPLcom/google/mlkit/common/sdkinternal/MlKitContext;->zzb(Landroid/content/Context;)Landroid/content/Context; +Lcom/google/mlkit/common/sdkinternal/MlKitThreadPool; +Lcom/google/mlkit/common/sdkinternal/SharedPrefManager; +HSPLcom/google/mlkit/common/sdkinternal/SharedPrefManager;->()V +Lcom/google/mlkit/common/sdkinternal/model/ModelFileHelper; +Lcom/google/mlkit/common/sdkinternal/model/RemoteModelManagerInterface; +Lcom/google/mlkit/common/sdkinternal/zzs; +HSPLcom/google/mlkit/common/sdkinternal/zzs;->()V +HSPLcom/google/mlkit/common/sdkinternal/zzs;->()V +Lcom/google/mlkit/vision/barcode/internal/BarcodeRegistrar; +HSPLcom/google/mlkit/vision/barcode/internal/BarcodeRegistrar;->()V +HSPLcom/google/mlkit/vision/barcode/internal/BarcodeRegistrar;->getComponents()Ljava/util/List; +Lcom/google/mlkit/vision/barcode/internal/zzc; +HSPLcom/google/mlkit/vision/barcode/internal/zzc;->()V +HSPLcom/google/mlkit/vision/barcode/internal/zzc;->()V +Lcom/google/mlkit/vision/barcode/internal/zzd; +HSPLcom/google/mlkit/vision/barcode/internal/zzd;->()V +HSPLcom/google/mlkit/vision/barcode/internal/zzd;->()V +Lcom/google/mlkit/vision/barcode/internal/zzg; +Lcom/google/mlkit/vision/barcode/internal/zzh; +Lcom/google/mlkit/vision/common/internal/MultiFlavorDetectorCreator; +Lcom/google/mlkit/vision/common/internal/MultiFlavorDetectorCreator$Registration; +Lcom/google/mlkit/vision/common/internal/VisionCommonRegistrar; +HSPLcom/google/mlkit/vision/common/internal/VisionCommonRegistrar;->()V +HSPLcom/google/mlkit/vision/common/internal/VisionCommonRegistrar;->getComponents()Ljava/util/List; +Lcom/google/mlkit/vision/common/internal/zzf; +HSPLcom/google/mlkit/vision/common/internal/zzf;->()V +HSPLcom/google/mlkit/vision/common/internal/zzf;->()V +Ldb_key_value/crypto_prefs/SecurePrefKeyValueStore; +HSPLdb_key_value/crypto_prefs/SecurePrefKeyValueStore;->()V +HSPLdb_key_value/crypto_prefs/SecurePrefKeyValueStore;->(Landroid/content/Context;Ljava/lang/String;)V +HSPLdb_key_value/crypto_prefs/SecurePrefKeyValueStore;->getBoolean(Ljava/lang/String;Z)Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference; +HSPLdb_key_value/crypto_prefs/SecurePrefKeyValueStore;->getLong(Ljava/lang/String;J)Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference; +HSPLdb_key_value/crypto_prefs/SecurePrefKeyValueStore;->getString(Ljava/lang/String;Ljava/lang/String;)Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference; +Ldb_key_value/crypto_prefs/SecurePrefKeyValueStore$1; +HSPLdb_key_value/crypto_prefs/SecurePrefKeyValueStore$1;->(Landroid/content/Context;Ljava/lang/String;Lkotlin/coroutines/Continuation;)V +HSPLdb_key_value/crypto_prefs/SecurePrefKeyValueStore$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLdb_key_value/crypto_prefs/SecurePrefKeyValueStore$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLdb_key_value/crypto_prefs/SecurePrefKeyValueStore$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLdb_key_value/crypto_prefs/SecurePrefKeyValueStore$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Ldb_key_value/crypto_prefs/SecurePrefKeyValueStoreKt; +HSPLdb_key_value/crypto_prefs/SecurePrefKeyValueStoreKt;->access$getEncryptedSharedPrefsOrRecreate(Landroid/content/Context;Ljava/lang/String;)Landroid/content/SharedPreferences; +HSPLdb_key_value/crypto_prefs/SecurePrefKeyValueStoreKt;->getEncryptedSharedPrefs(Landroid/content/Context;Ljava/lang/String;)Landroid/content/SharedPreferences; +HSPLdb_key_value/crypto_prefs/SecurePrefKeyValueStoreKt;->getEncryptedSharedPrefsOrRecreate(Landroid/content/Context;Ljava/lang/String;)Landroid/content/SharedPreferences; +HSPLdb_key_value/crypto_prefs/SecurePrefKeyValueStoreKt;->getMasterKeyAlias(Landroid/content/Context;Ljava/lang/String;Lkotlin/jvm/functions/Function0;)Landroidx/security/crypto/MasterKey; +Ldb_key_value/crypto_prefs/SecurePrefKeyValueStoreKt$getEncryptedSharedPrefs$1$masterKeyAlias$1; +HSPLdb_key_value/crypto_prefs/SecurePrefKeyValueStoreKt$getEncryptedSharedPrefs$1$masterKeyAlias$1;->(Landroid/content/Context;Ljava/lang/String;)V +Ldb_key_value/shared_prefs/SharedPrefsKeyValuePreference; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValuePreference;->()V +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValuePreference;->(Lkotlin/jvm/functions/Function1;)V +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValuePreference;->access$getPref(Ldb_key_value/shared_prefs/SharedPrefsKeyValuePreference;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValuePreference;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValuePreference;->flowOfPref()Lkotlinx/coroutines/flow/Flow; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValuePreference;->getPref(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValuePreference;->setAndCommit(Ljava/lang/Object;)Lkotlin/jvm/functions/Function1; +Ldb_key_value/shared_prefs/SharedPrefsKeyValuePreference$flowOfPref$1; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValuePreference$flowOfPref$1;->(Ldb_key_value/shared_prefs/SharedPrefsKeyValuePreference;Lkotlin/coroutines/Continuation;)V +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValuePreference$flowOfPref$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValuePreference$flowOfPref$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValuePreference$flowOfPref$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValuePreference$flowOfPref$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Ldb_key_value/shared_prefs/SharedPrefsKeyValuePreference$flowOfPref$1$1; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValuePreference$flowOfPref$1$1;->(Ldb_key_value/shared_prefs/SharedPrefsKeyValuePreference;Lkotlin/coroutines/Continuation;)V +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValuePreference$flowOfPref$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValuePreference$flowOfPref$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Ldb_key_value/shared_prefs/SharedPrefsKeyValuePreference$flowOfPref$1$2; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValuePreference$flowOfPref$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValuePreference$flowOfPref$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Ldb_key_value/shared_prefs/SharedPrefsKeyValuePreference$getPref$1; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValuePreference$getPref$1;->(Ldb_key_value/shared_prefs/SharedPrefsKeyValuePreference;Lkotlin/coroutines/Continuation;)V +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValuePreference$getPref$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Ldb_key_value/shared_prefs/SharedPrefsKeyValuePreference$setAndCommit$$inlined$ioEffect$1; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValuePreference$setAndCommit$$inlined$ioEffect$1;->(Lkotlin/coroutines/Continuation;Lkotlin/coroutines/CoroutineContext;Ldb_key_value/shared_prefs/SharedPrefsKeyValuePreference;Ljava/lang/Object;)V +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValuePreference$setAndCommit$$inlined$ioEffect$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValuePreference$setAndCommit$$inlined$ioEffect$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValuePreference$setAndCommit$$inlined$ioEffect$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValuePreference$setAndCommit$$inlined$ioEffect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Ldb_key_value/shared_prefs/SharedPrefsKeyValuePreference$setAndCommit$$inlined$ioEffect$1$1; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValuePreference$setAndCommit$$inlined$ioEffect$1$1;->(Lkotlin/coroutines/Continuation;Ldb_key_value/shared_prefs/SharedPrefsKeyValuePreference;Ljava/lang/Object;)V +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValuePreference$setAndCommit$$inlined$ioEffect$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValuePreference$setAndCommit$$inlined$ioEffect$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Ldb_key_value/shared_prefs/SharedPrefsKeyValueStore; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValueStore;->()V +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValueStore;->(Landroid/content/Context;Ljava/lang/String;)V +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValueStore;->(Lkotlin/jvm/functions/Function1;)V +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValueStore;->access$getFlowPrefs(Ldb_key_value/shared_prefs/SharedPrefsKeyValueStore;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValueStore;->getBoolean(Ljava/lang/String;Z)Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValueStore;->getFlowPrefs(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValueStore;->getLong(Ljava/lang/String;J)Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValueStore;->getString(Ljava/lang/String;Ljava/lang/String;)Lcom/artemchep/keyguard/common/service/keyvalue/KeyValuePreference; +Ldb_key_value/shared_prefs/SharedPrefsKeyValueStore$1; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValueStore$1;->(Landroid/content/Context;Ljava/lang/String;Lkotlin/coroutines/Continuation;)V +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValueStore$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValueStore$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValueStore$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValueStore$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Ldb_key_value/shared_prefs/SharedPrefsKeyValueStore$getBoolean$1; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValueStore$getBoolean$1;->(Ldb_key_value/shared_prefs/SharedPrefsKeyValueStore;Ljava/lang/String;ZLkotlin/coroutines/Continuation;)V +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValueStore$getBoolean$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValueStore$getBoolean$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValueStore$getBoolean$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValueStore$getBoolean$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Ldb_key_value/shared_prefs/SharedPrefsKeyValueStore$getFlowPrefs$1; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValueStore$getFlowPrefs$1;->(Ldb_key_value/shared_prefs/SharedPrefsKeyValueStore;Lkotlin/coroutines/Continuation;)V +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValueStore$getFlowPrefs$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Ldb_key_value/shared_prefs/SharedPrefsKeyValueStore$getLong$1; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValueStore$getLong$1;->(Ldb_key_value/shared_prefs/SharedPrefsKeyValueStore;Ljava/lang/String;JLkotlin/coroutines/Continuation;)V +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValueStore$getLong$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValueStore$getLong$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValueStore$getLong$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValueStore$getLong$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Ldb_key_value/shared_prefs/SharedPrefsKeyValueStore$getString$1; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValueStore$getString$1;->(Ldb_key_value/shared_prefs/SharedPrefsKeyValueStore;Ljava/lang/String;Ljava/lang/String;Lkotlin/coroutines/Continuation;)V +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValueStore$getString$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValueStore$getString$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValueStore$getString$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLdb_key_value/shared_prefs/SharedPrefsKeyValueStore$getString$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Ldev/icerock/moko/resources/FontResource; +HSPLdev/icerock/moko/resources/FontResource;->()V +HSPLdev/icerock/moko/resources/FontResource;->(I)V +HSPLdev/icerock/moko/resources/FontResource;->getFontResourceId()I +Ldev/icerock/moko/resources/FontResource$Creator; +HSPLdev/icerock/moko/resources/FontResource$Creator;->()V +Ldev/icerock/moko/resources/ResourceContainer; +Ldev/icerock/moko/resources/StringResource; +HSPLdev/icerock/moko/resources/StringResource;->()V +HSPLdev/icerock/moko/resources/StringResource;->(I)V +HSPLdev/icerock/moko/resources/StringResource;->getResourceId()I +Ldev/icerock/moko/resources/StringResource$Creator; +HSPLdev/icerock/moko/resources/StringResource$Creator;->()V +Ldev/icerock/moko/resources/compose/FontResource_androidKt; +HSPLdev/icerock/moko/resources/compose/FontResource_androidKt;->asFont-DnXFreY(Ldev/icerock/moko/resources/FontResource;Landroidx/compose/ui/text/font/FontWeight;ILandroidx/compose/runtime/Composer;II)Landroidx/compose/ui/text/font/Font; +Ldev/icerock/moko/resources/compose/FontResource_commonKt; +HSPLdev/icerock/moko/resources/compose/FontResource_commonKt;->fontFamilyResource(Ldev/icerock/moko/resources/FontResource;Landroidx/compose/runtime/Composer;I)Landroidx/compose/ui/text/font/FontFamily; +Ldev/icerock/moko/resources/compose/StringResourceKt; +HSPLdev/icerock/moko/resources/compose/StringResourceKt;->stringResource(Ldev/icerock/moko/resources/StringResource;Landroidx/compose/runtime/Composer;I)Ljava/lang/String; +Ldev/icerock/moko/resources/desc/ResourceFormattedStringDesc; +HSPLdev/icerock/moko/resources/desc/ResourceFormattedStringDesc;->(Ldev/icerock/moko/resources/StringResource;Ljava/util/List;)V +HSPLdev/icerock/moko/resources/desc/ResourceFormattedStringDesc;->toString(Landroid/content/Context;)Ljava/lang/String; +Ldev/icerock/moko/resources/desc/ResourceFormattedStringDescKt; +HSPLdev/icerock/moko/resources/desc/ResourceFormattedStringDescKt;->ResourceFormatted(Ldev/icerock/moko/resources/desc/StringDesc$Companion;Ldev/icerock/moko/resources/StringResource;[Ljava/lang/Object;)Ldev/icerock/moko/resources/desc/ResourceFormattedStringDesc; +Ldev/icerock/moko/resources/desc/ResourceStringDesc; +HSPLdev/icerock/moko/resources/desc/ResourceStringDesc;->()V +HSPLdev/icerock/moko/resources/desc/ResourceStringDesc;->(Ldev/icerock/moko/resources/StringResource;)V +HSPLdev/icerock/moko/resources/desc/ResourceStringDesc;->toString(Landroid/content/Context;)Ljava/lang/String; +Ldev/icerock/moko/resources/desc/ResourceStringDesc$Creator; +HSPLdev/icerock/moko/resources/desc/ResourceStringDesc$Creator;->()V +Ldev/icerock/moko/resources/desc/ResourceStringDescKt; +HSPLdev/icerock/moko/resources/desc/ResourceStringDescKt;->Resource(Ldev/icerock/moko/resources/desc/StringDesc$Companion;Ldev/icerock/moko/resources/StringResource;)Ldev/icerock/moko/resources/desc/ResourceStringDesc; +Ldev/icerock/moko/resources/desc/StringDesc; +HSPLdev/icerock/moko/resources/desc/StringDesc;->()V +Ldev/icerock/moko/resources/desc/StringDesc$Companion; +HSPLdev/icerock/moko/resources/desc/StringDesc$Companion;->()V +HSPLdev/icerock/moko/resources/desc/StringDesc$Companion;->()V +HSPLdev/icerock/moko/resources/desc/StringDesc$Companion;->getLocaleType()Ldev/icerock/moko/resources/desc/StringDesc$LocaleType; +Ldev/icerock/moko/resources/desc/StringDesc$LocaleType; +HSPLdev/icerock/moko/resources/desc/StringDesc$LocaleType;->()V +HSPLdev/icerock/moko/resources/desc/StringDesc$LocaleType;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Ldev/icerock/moko/resources/desc/StringDesc$LocaleType$System; +HSPLdev/icerock/moko/resources/desc/StringDesc$LocaleType$System;->()V +HSPLdev/icerock/moko/resources/desc/StringDesc$LocaleType$System;->()V +HSPLdev/icerock/moko/resources/desc/StringDesc$LocaleType$System;->getSystemLocale()Ljava/util/Locale; +Ldev/icerock/moko/resources/desc/Utils; +HSPLdev/icerock/moko/resources/desc/Utils;->()V +HSPLdev/icerock/moko/resources/desc/Utils;->()V +HSPLdev/icerock/moko/resources/desc/Utils;->localizedContext(Landroid/content/Context;)Landroid/content/Context; +HSPLdev/icerock/moko/resources/desc/Utils;->processArgs(Ljava/util/List;Landroid/content/Context;)[Ljava/lang/Object; +HSPLdev/icerock/moko/resources/desc/Utils;->resourcesForContext(Landroid/content/Context;)Landroid/content/res/Resources; +Lio/ktor/client/HttpClient; +HSPLio/ktor/client/HttpClient;->()V +HSPLio/ktor/client/HttpClient;->(Lio/ktor/client/engine/HttpClientEngine;Lio/ktor/client/HttpClientConfig;)V +HSPLio/ktor/client/HttpClient;->(Lio/ktor/client/engine/HttpClientEngine;Lio/ktor/client/HttpClientConfig;Z)V +HSPLio/ktor/client/HttpClient;->getAttributes()Lio/ktor/util/Attributes; +HSPLio/ktor/client/HttpClient;->getConfig$ktor_client_core()Lio/ktor/client/HttpClientConfig; +HSPLio/ktor/client/HttpClient;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext; +HSPLio/ktor/client/HttpClient;->getEngine()Lio/ktor/client/engine/HttpClientEngine; +HSPLio/ktor/client/HttpClient;->getReceivePipeline()Lio/ktor/client/statement/HttpReceivePipeline; +HSPLio/ktor/client/HttpClient;->getRequestPipeline()Lio/ktor/client/request/HttpRequestPipeline; +HSPLio/ktor/client/HttpClient;->getResponsePipeline()Lio/ktor/client/statement/HttpResponsePipeline; +HSPLio/ktor/client/HttpClient;->getSendPipeline()Lio/ktor/client/request/HttpSendPipeline; +Lio/ktor/client/HttpClient$2; +HSPLio/ktor/client/HttpClient$2;->(Lio/ktor/client/HttpClient;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/HttpClient$3$1; +HSPLio/ktor/client/HttpClient$3$1;->()V +HSPLio/ktor/client/HttpClient$3$1;->()V +HSPLio/ktor/client/HttpClient$3$1;->invoke(Lio/ktor/client/HttpClient;)V +HSPLio/ktor/client/HttpClient$3$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lio/ktor/client/HttpClient$4; +HSPLio/ktor/client/HttpClient$4;->(Lio/ktor/client/HttpClient;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/HttpClientConfig; +HSPLio/ktor/client/HttpClientConfig;->()V +HSPLio/ktor/client/HttpClientConfig;->access$getPluginConfigurations$p(Lio/ktor/client/HttpClientConfig;)Ljava/util/Map; +HSPLio/ktor/client/HttpClientConfig;->engine(Lkotlin/jvm/functions/Function1;)V +HSPLio/ktor/client/HttpClientConfig;->getDevelopmentMode()Z +HSPLio/ktor/client/HttpClientConfig;->getEngineConfig$ktor_client_core()Lkotlin/jvm/functions/Function1; +HSPLio/ktor/client/HttpClientConfig;->getExpectSuccess()Z +HSPLio/ktor/client/HttpClientConfig;->getFollowRedirects()Z +HSPLio/ktor/client/HttpClientConfig;->getUseDefaultTransformers()Z +HSPLio/ktor/client/HttpClientConfig;->install$default(Lio/ktor/client/HttpClientConfig;Lio/ktor/client/plugins/HttpClientPlugin;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V +HSPLio/ktor/client/HttpClientConfig;->install(Lio/ktor/client/HttpClient;)V +HSPLio/ktor/client/HttpClientConfig;->install(Lio/ktor/client/plugins/HttpClientPlugin;Lkotlin/jvm/functions/Function1;)V +HSPLio/ktor/client/HttpClientConfig;->install(Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V +HSPLio/ktor/client/HttpClientConfig;->plusAssign(Lio/ktor/client/HttpClientConfig;)V +Lio/ktor/client/HttpClientConfig$engine$1; +HSPLio/ktor/client/HttpClientConfig$engine$1;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V +HSPLio/ktor/client/HttpClientConfig$engine$1;->invoke(Lio/ktor/client/engine/HttpClientEngineConfig;)V +HSPLio/ktor/client/HttpClientConfig$engine$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lio/ktor/client/HttpClientConfig$engineConfig$1; +HSPLio/ktor/client/HttpClientConfig$engineConfig$1;->()V +HSPLio/ktor/client/HttpClientConfig$engineConfig$1;->()V +HSPLio/ktor/client/HttpClientConfig$engineConfig$1;->invoke(Lio/ktor/client/engine/HttpClientEngineConfig;)V +HSPLio/ktor/client/HttpClientConfig$engineConfig$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lio/ktor/client/HttpClientConfig$install$1; +HSPLio/ktor/client/HttpClientConfig$install$1;->()V +HSPLio/ktor/client/HttpClientConfig$install$1;->()V +HSPLio/ktor/client/HttpClientConfig$install$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLio/ktor/client/HttpClientConfig$install$1;->invoke(Ljava/lang/Object;)V +Lio/ktor/client/HttpClientConfig$install$2; +HSPLio/ktor/client/HttpClientConfig$install$2;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V +HSPLio/ktor/client/HttpClientConfig$install$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLio/ktor/client/HttpClientConfig$install$2;->invoke(Ljava/lang/Object;)V +Lio/ktor/client/HttpClientConfig$install$3; +HSPLio/ktor/client/HttpClientConfig$install$3;->(Lio/ktor/client/plugins/HttpClientPlugin;)V +HSPLio/ktor/client/HttpClientConfig$install$3;->invoke(Lio/ktor/client/HttpClient;)V +HSPLio/ktor/client/HttpClientConfig$install$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lio/ktor/client/HttpClientConfig$install$3$attributes$1; +HSPLio/ktor/client/HttpClientConfig$install$3$attributes$1;->()V +HSPLio/ktor/client/HttpClientConfig$install$3$attributes$1;->()V +HSPLio/ktor/client/HttpClientConfig$install$3$attributes$1;->invoke()Lio/ktor/util/Attributes; +HSPLio/ktor/client/HttpClientConfig$install$3$attributes$1;->invoke()Ljava/lang/Object; +Lio/ktor/client/HttpClientKt; +HSPLio/ktor/client/HttpClientKt;->HttpClient(Lio/ktor/client/engine/HttpClientEngineFactory;Lkotlin/jvm/functions/Function1;)Lio/ktor/client/HttpClient; +Lio/ktor/client/HttpClientKt$HttpClient$2; +HSPLio/ktor/client/HttpClientKt$HttpClient$2;->(Lio/ktor/client/engine/HttpClientEngine;)V +Lio/ktor/client/content/ProgressListener; +Lio/ktor/client/engine/HttpClientEngine; +Lio/ktor/client/engine/HttpClientEngine$DefaultImpls; +HSPLio/ktor/client/engine/HttpClientEngine$DefaultImpls;->install(Lio/ktor/client/engine/HttpClientEngine;Lio/ktor/client/HttpClient;)V +Lio/ktor/client/engine/HttpClientEngine$install$1; +HSPLio/ktor/client/engine/HttpClientEngine$install$1;->(Lio/ktor/client/HttpClient;Lio/ktor/client/engine/HttpClientEngine;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/engine/HttpClientEngineBase; +HSPLio/ktor/client/engine/HttpClientEngineBase;->()V +HSPLio/ktor/client/engine/HttpClientEngineBase;->(Ljava/lang/String;)V +HSPLio/ktor/client/engine/HttpClientEngineBase;->access$getEngineName$p(Lio/ktor/client/engine/HttpClientEngineBase;)Ljava/lang/String; +HSPLio/ktor/client/engine/HttpClientEngineBase;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext; +HSPLio/ktor/client/engine/HttpClientEngineBase;->getDispatcher()Lkotlinx/coroutines/CoroutineDispatcher; +HSPLio/ktor/client/engine/HttpClientEngineBase;->install(Lio/ktor/client/HttpClient;)V +Lio/ktor/client/engine/HttpClientEngineBase$coroutineContext$2; +HSPLio/ktor/client/engine/HttpClientEngineBase$coroutineContext$2;->(Lio/ktor/client/engine/HttpClientEngineBase;)V +HSPLio/ktor/client/engine/HttpClientEngineBase$coroutineContext$2;->invoke()Ljava/lang/Object; +HSPLio/ktor/client/engine/HttpClientEngineBase$coroutineContext$2;->invoke()Lkotlin/coroutines/CoroutineContext; +Lio/ktor/client/engine/HttpClientEngineBase_jvmKt; +HSPLio/ktor/client/engine/HttpClientEngineBase_jvmKt;->ioDispatcher()Lkotlinx/coroutines/CoroutineDispatcher; +Lio/ktor/client/engine/HttpClientEngineCapability; +Lio/ktor/client/engine/HttpClientEngineConfig; +HSPLio/ktor/client/engine/HttpClientEngineConfig;->()V +Lio/ktor/client/engine/HttpClientEngineFactory; +Lio/ktor/client/engine/okhttp/OkHttp; +HSPLio/ktor/client/engine/okhttp/OkHttp;->()V +HSPLio/ktor/client/engine/okhttp/OkHttp;->()V +HSPLio/ktor/client/engine/okhttp/OkHttp;->create(Lkotlin/jvm/functions/Function1;)Lio/ktor/client/engine/HttpClientEngine; +Lio/ktor/client/engine/okhttp/OkHttpConfig; +HSPLio/ktor/client/engine/okhttp/OkHttpConfig;->()V +HSPLio/ktor/client/engine/okhttp/OkHttpConfig;->getClientCacheSize()I +HSPLio/ktor/client/engine/okhttp/OkHttpConfig;->setPreconfigured(Lokhttp3/OkHttpClient;)V +Lio/ktor/client/engine/okhttp/OkHttpConfig$config$1; +HSPLio/ktor/client/engine/okhttp/OkHttpConfig$config$1;->()V +HSPLio/ktor/client/engine/okhttp/OkHttpConfig$config$1;->()V +Lio/ktor/client/engine/okhttp/OkHttpEngine; +HSPLio/ktor/client/engine/okhttp/OkHttpEngine;->()V +HSPLio/ktor/client/engine/okhttp/OkHttpEngine;->(Lio/ktor/client/engine/okhttp/OkHttpConfig;)V +HSPLio/ktor/client/engine/okhttp/OkHttpEngine;->access$getRequestsJob$p(Lio/ktor/client/engine/okhttp/OkHttpEngine;)Lkotlin/coroutines/CoroutineContext; +HSPLio/ktor/client/engine/okhttp/OkHttpEngine;->getConfig()Lio/ktor/client/engine/HttpClientEngineConfig; +HSPLio/ktor/client/engine/okhttp/OkHttpEngine;->getConfig()Lio/ktor/client/engine/okhttp/OkHttpConfig; +HSPLio/ktor/client/engine/okhttp/OkHttpEngine;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext; +HSPLio/ktor/client/engine/okhttp/OkHttpEngine;->getSupportedCapabilities()Ljava/util/Set; +Lio/ktor/client/engine/okhttp/OkHttpEngine$1; +HSPLio/ktor/client/engine/okhttp/OkHttpEngine$1;->(Lio/ktor/client/engine/okhttp/OkHttpEngine;Lkotlin/coroutines/Continuation;)V +HSPLio/ktor/client/engine/okhttp/OkHttpEngine$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLio/ktor/client/engine/okhttp/OkHttpEngine$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lio/ktor/client/engine/okhttp/OkHttpEngine$Companion; +HSPLio/ktor/client/engine/okhttp/OkHttpEngine$Companion;->()V +HSPLio/ktor/client/engine/okhttp/OkHttpEngine$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lio/ktor/client/engine/okhttp/OkHttpEngine$Companion$okHttpClientPrototype$2; +HSPLio/ktor/client/engine/okhttp/OkHttpEngine$Companion$okHttpClientPrototype$2;->()V +HSPLio/ktor/client/engine/okhttp/OkHttpEngine$Companion$okHttpClientPrototype$2;->()V +Lio/ktor/client/engine/okhttp/OkHttpEngine$clientCache$1; +HSPLio/ktor/client/engine/okhttp/OkHttpEngine$clientCache$1;->(Ljava/lang/Object;)V +Lio/ktor/client/engine/okhttp/OkHttpEngine$clientCache$2; +HSPLio/ktor/client/engine/okhttp/OkHttpEngine$clientCache$2;->()V +HSPLio/ktor/client/engine/okhttp/OkHttpEngine$clientCache$2;->()V +Lio/ktor/client/plugins/AfterReceiveHook; +HSPLio/ktor/client/plugins/AfterReceiveHook;->()V +HSPLio/ktor/client/plugins/AfterReceiveHook;->()V +HSPLio/ktor/client/plugins/AfterReceiveHook;->install(Lio/ktor/client/HttpClient;Ljava/lang/Object;)V +HSPLio/ktor/client/plugins/AfterReceiveHook;->install(Lio/ktor/client/HttpClient;Lkotlin/jvm/functions/Function2;)V +Lio/ktor/client/plugins/AfterReceiveHook$install$1; +HSPLio/ktor/client/plugins/AfterReceiveHook$install$1;->(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/AfterRenderHook; +HSPLio/ktor/client/plugins/AfterRenderHook;->()V +HSPLio/ktor/client/plugins/AfterRenderHook;->()V +HSPLio/ktor/client/plugins/AfterRenderHook;->install(Lio/ktor/client/HttpClient;Ljava/lang/Object;)V +HSPLio/ktor/client/plugins/AfterRenderHook;->install(Lio/ktor/client/HttpClient;Lkotlin/jvm/functions/Function3;)V +Lio/ktor/client/plugins/AfterRenderHook$install$1; +HSPLio/ktor/client/plugins/AfterRenderHook$install$1;->(Lkotlin/jvm/functions/Function3;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/BodyProgressKt; +HSPLio/ktor/client/plugins/BodyProgressKt;->()V +HSPLio/ktor/client/plugins/BodyProgressKt;->getBodyProgress()Lio/ktor/client/plugins/api/ClientPlugin; +Lio/ktor/client/plugins/BodyProgressKt$BodyProgress$1; +HSPLio/ktor/client/plugins/BodyProgressKt$BodyProgress$1;->()V +HSPLio/ktor/client/plugins/BodyProgressKt$BodyProgress$1;->()V +HSPLio/ktor/client/plugins/BodyProgressKt$BodyProgress$1;->invoke(Lio/ktor/client/plugins/api/ClientPluginBuilder;)V +HSPLio/ktor/client/plugins/BodyProgressKt$BodyProgress$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lio/ktor/client/plugins/BodyProgressKt$BodyProgress$1$1; +HSPLio/ktor/client/plugins/BodyProgressKt$BodyProgress$1$1;->(Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/BodyProgressKt$BodyProgress$1$2; +HSPLio/ktor/client/plugins/BodyProgressKt$BodyProgress$1$2;->(Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/DefaultResponseValidationKt; +HSPLio/ktor/client/plugins/DefaultResponseValidationKt;->()V +HSPLio/ktor/client/plugins/DefaultResponseValidationKt;->addDefaultResponseValidation(Lio/ktor/client/HttpClientConfig;)V +Lio/ktor/client/plugins/DefaultResponseValidationKt$addDefaultResponseValidation$1; +HSPLio/ktor/client/plugins/DefaultResponseValidationKt$addDefaultResponseValidation$1;->(Lio/ktor/client/HttpClientConfig;)V +HSPLio/ktor/client/plugins/DefaultResponseValidationKt$addDefaultResponseValidation$1;->invoke(Lio/ktor/client/plugins/HttpCalValidatorConfig;)V +HSPLio/ktor/client/plugins/DefaultResponseValidationKt$addDefaultResponseValidation$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lio/ktor/client/plugins/DefaultResponseValidationKt$addDefaultResponseValidation$1$1; +HSPLio/ktor/client/plugins/DefaultResponseValidationKt$addDefaultResponseValidation$1$1;->(Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/DefaultTransformKt; +HSPLio/ktor/client/plugins/DefaultTransformKt;->()V +HSPLio/ktor/client/plugins/DefaultTransformKt;->defaultTransformers(Lio/ktor/client/HttpClient;)V +Lio/ktor/client/plugins/DefaultTransformKt$defaultTransformers$1; +HSPLio/ktor/client/plugins/DefaultTransformKt$defaultTransformers$1;->(Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/DefaultTransformKt$defaultTransformers$2; +HSPLio/ktor/client/plugins/DefaultTransformKt$defaultTransformers$2;->(Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/DefaultTransformersJvmKt; +HSPLio/ktor/client/plugins/DefaultTransformersJvmKt;->platformResponseDefaultTransformers(Lio/ktor/client/HttpClient;)V +Lio/ktor/client/plugins/DefaultTransformersJvmKt$platformResponseDefaultTransformers$1; +HSPLio/ktor/client/plugins/DefaultTransformersJvmKt$platformResponseDefaultTransformers$1;->(Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/DoubleReceivePluginKt; +HSPLio/ktor/client/plugins/DoubleReceivePluginKt;->()V +HSPLio/ktor/client/plugins/DoubleReceivePluginKt;->getSaveBodyPlugin()Lio/ktor/client/plugins/api/ClientPlugin; +Lio/ktor/client/plugins/DoubleReceivePluginKt$SaveBodyPlugin$1; +HSPLio/ktor/client/plugins/DoubleReceivePluginKt$SaveBodyPlugin$1;->()V +HSPLio/ktor/client/plugins/DoubleReceivePluginKt$SaveBodyPlugin$1;->()V +HSPLio/ktor/client/plugins/DoubleReceivePluginKt$SaveBodyPlugin$1;->invoke()Lio/ktor/client/plugins/SaveBodyPluginConfig; +HSPLio/ktor/client/plugins/DoubleReceivePluginKt$SaveBodyPlugin$1;->invoke()Ljava/lang/Object; +Lio/ktor/client/plugins/DoubleReceivePluginKt$SaveBodyPlugin$2; +HSPLio/ktor/client/plugins/DoubleReceivePluginKt$SaveBodyPlugin$2;->()V +HSPLio/ktor/client/plugins/DoubleReceivePluginKt$SaveBodyPlugin$2;->()V +HSPLio/ktor/client/plugins/DoubleReceivePluginKt$SaveBodyPlugin$2;->invoke(Lio/ktor/client/plugins/api/ClientPluginBuilder;)V +HSPLio/ktor/client/plugins/DoubleReceivePluginKt$SaveBodyPlugin$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lio/ktor/client/plugins/DoubleReceivePluginKt$SaveBodyPlugin$2$1; +HSPLio/ktor/client/plugins/DoubleReceivePluginKt$SaveBodyPlugin$2$1;->(ZLkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/HttpCalValidatorConfig; +HSPLio/ktor/client/plugins/HttpCalValidatorConfig;->()V +HSPLio/ktor/client/plugins/HttpCalValidatorConfig;->getExpectSuccess()Z +HSPLio/ktor/client/plugins/HttpCalValidatorConfig;->getResponseExceptionHandlers$ktor_client_core()Ljava/util/List; +HSPLio/ktor/client/plugins/HttpCalValidatorConfig;->getResponseValidators$ktor_client_core()Ljava/util/List; +HSPLio/ktor/client/plugins/HttpCalValidatorConfig;->setExpectSuccess(Z)V +HSPLio/ktor/client/plugins/HttpCalValidatorConfig;->validateResponse(Lkotlin/jvm/functions/Function2;)V +Lio/ktor/client/plugins/HttpCallValidatorKt; +HSPLio/ktor/client/plugins/HttpCallValidatorKt;->()V +HSPLio/ktor/client/plugins/HttpCallValidatorKt;->HttpResponseValidator(Lio/ktor/client/HttpClientConfig;Lkotlin/jvm/functions/Function1;)V +HSPLio/ktor/client/plugins/HttpCallValidatorKt;->getHttpCallValidator()Lio/ktor/client/plugins/api/ClientPlugin; +Lio/ktor/client/plugins/HttpCallValidatorKt$HttpCallValidator$1; +HSPLio/ktor/client/plugins/HttpCallValidatorKt$HttpCallValidator$1;->()V +HSPLio/ktor/client/plugins/HttpCallValidatorKt$HttpCallValidator$1;->()V +HSPLio/ktor/client/plugins/HttpCallValidatorKt$HttpCallValidator$1;->invoke()Lio/ktor/client/plugins/HttpCalValidatorConfig; +HSPLio/ktor/client/plugins/HttpCallValidatorKt$HttpCallValidator$1;->invoke()Ljava/lang/Object; +Lio/ktor/client/plugins/HttpCallValidatorKt$HttpCallValidator$2; +HSPLio/ktor/client/plugins/HttpCallValidatorKt$HttpCallValidator$2;->()V +HSPLio/ktor/client/plugins/HttpCallValidatorKt$HttpCallValidator$2;->()V +HSPLio/ktor/client/plugins/HttpCallValidatorKt$HttpCallValidator$2;->invoke(Lio/ktor/client/plugins/api/ClientPluginBuilder;)V +HSPLio/ktor/client/plugins/HttpCallValidatorKt$HttpCallValidator$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lio/ktor/client/plugins/HttpCallValidatorKt$HttpCallValidator$2$1; +HSPLio/ktor/client/plugins/HttpCallValidatorKt$HttpCallValidator$2$1;->(ZLkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/HttpCallValidatorKt$HttpCallValidator$2$2; +HSPLio/ktor/client/plugins/HttpCallValidatorKt$HttpCallValidator$2$2;->(Ljava/util/List;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/HttpCallValidatorKt$HttpCallValidator$2$3; +HSPLio/ktor/client/plugins/HttpCallValidatorKt$HttpCallValidator$2$3;->(Ljava/util/List;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/HttpCallValidatorKt$HttpCallValidator$2$4; +HSPLio/ktor/client/plugins/HttpCallValidatorKt$HttpCallValidator$2$4;->(Ljava/util/List;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/HttpClientPlugin; +Lio/ktor/client/plugins/HttpClientPluginKt; +HSPLio/ktor/client/plugins/HttpClientPluginKt;->()V +HSPLio/ktor/client/plugins/HttpClientPluginKt;->getPLUGIN_INSTALLED_LIST()Lio/ktor/util/AttributeKey; +HSPLio/ktor/client/plugins/HttpClientPluginKt;->plugin(Lio/ktor/client/HttpClient;Lio/ktor/client/plugins/HttpClientPlugin;)Ljava/lang/Object; +HSPLio/ktor/client/plugins/HttpClientPluginKt;->pluginOrNull(Lio/ktor/client/HttpClient;Lio/ktor/client/plugins/HttpClientPlugin;)Ljava/lang/Object; +Lio/ktor/client/plugins/HttpPlainTextConfig; +HSPLio/ktor/client/plugins/HttpPlainTextConfig;->()V +HSPLio/ktor/client/plugins/HttpPlainTextConfig;->getCharsetQuality$ktor_client_core()Ljava/util/Map; +HSPLio/ktor/client/plugins/HttpPlainTextConfig;->getCharsets$ktor_client_core()Ljava/util/Set; +HSPLio/ktor/client/plugins/HttpPlainTextConfig;->getResponseCharsetFallback()Ljava/nio/charset/Charset; +HSPLio/ktor/client/plugins/HttpPlainTextConfig;->getSendCharset()Ljava/nio/charset/Charset; +Lio/ktor/client/plugins/HttpPlainTextKt; +HSPLio/ktor/client/plugins/HttpPlainTextKt;->()V +HSPLio/ktor/client/plugins/HttpPlainTextKt;->getHttpPlainText()Lio/ktor/client/plugins/api/ClientPlugin; +Lio/ktor/client/plugins/HttpPlainTextKt$HttpPlainText$1; +HSPLio/ktor/client/plugins/HttpPlainTextKt$HttpPlainText$1;->()V +HSPLio/ktor/client/plugins/HttpPlainTextKt$HttpPlainText$1;->()V +HSPLio/ktor/client/plugins/HttpPlainTextKt$HttpPlainText$1;->invoke()Lio/ktor/client/plugins/HttpPlainTextConfig; +HSPLio/ktor/client/plugins/HttpPlainTextKt$HttpPlainText$1;->invoke()Ljava/lang/Object; +Lio/ktor/client/plugins/HttpPlainTextKt$HttpPlainText$2; +HSPLio/ktor/client/plugins/HttpPlainTextKt$HttpPlainText$2;->()V +HSPLio/ktor/client/plugins/HttpPlainTextKt$HttpPlainText$2;->()V +HSPLio/ktor/client/plugins/HttpPlainTextKt$HttpPlainText$2;->invoke(Lio/ktor/client/plugins/api/ClientPluginBuilder;)V +HSPLio/ktor/client/plugins/HttpPlainTextKt$HttpPlainText$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lio/ktor/client/plugins/HttpPlainTextKt$HttpPlainText$2$1; +HSPLio/ktor/client/plugins/HttpPlainTextKt$HttpPlainText$2$1;->(Ljava/lang/String;Ljava/nio/charset/Charset;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/HttpPlainTextKt$HttpPlainText$2$2; +HSPLio/ktor/client/plugins/HttpPlainTextKt$HttpPlainText$2$2;->(Ljava/nio/charset/Charset;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/HttpPlainTextKt$HttpPlainText$2$invoke$$inlined$sortedBy$1; +HSPLio/ktor/client/plugins/HttpPlainTextKt$HttpPlainText$2$invoke$$inlined$sortedBy$1;->()V +Lio/ktor/client/plugins/HttpPlainTextKt$HttpPlainText$2$invoke$$inlined$sortedByDescending$1; +HSPLio/ktor/client/plugins/HttpPlainTextKt$HttpPlainText$2$invoke$$inlined$sortedByDescending$1;->()V +Lio/ktor/client/plugins/HttpRedirectConfig; +HSPLio/ktor/client/plugins/HttpRedirectConfig;->()V +HSPLio/ktor/client/plugins/HttpRedirectConfig;->getAllowHttpsDowngrade()Z +HSPLio/ktor/client/plugins/HttpRedirectConfig;->getCheckHttpMethod()Z +Lio/ktor/client/plugins/HttpRedirectKt; +HSPLio/ktor/client/plugins/HttpRedirectKt;->()V +HSPLio/ktor/client/plugins/HttpRedirectKt;->getHttpRedirect()Lio/ktor/client/plugins/api/ClientPlugin; +Lio/ktor/client/plugins/HttpRedirectKt$HttpRedirect$1; +HSPLio/ktor/client/plugins/HttpRedirectKt$HttpRedirect$1;->()V +HSPLio/ktor/client/plugins/HttpRedirectKt$HttpRedirect$1;->()V +HSPLio/ktor/client/plugins/HttpRedirectKt$HttpRedirect$1;->invoke()Lio/ktor/client/plugins/HttpRedirectConfig; +HSPLio/ktor/client/plugins/HttpRedirectKt$HttpRedirect$1;->invoke()Ljava/lang/Object; +Lio/ktor/client/plugins/HttpRedirectKt$HttpRedirect$2; +HSPLio/ktor/client/plugins/HttpRedirectKt$HttpRedirect$2;->()V +HSPLio/ktor/client/plugins/HttpRedirectKt$HttpRedirect$2;->()V +HSPLio/ktor/client/plugins/HttpRedirectKt$HttpRedirect$2;->invoke(Lio/ktor/client/plugins/api/ClientPluginBuilder;)V +HSPLio/ktor/client/plugins/HttpRedirectKt$HttpRedirect$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lio/ktor/client/plugins/HttpRedirectKt$HttpRedirect$2$1; +HSPLio/ktor/client/plugins/HttpRedirectKt$HttpRedirect$2$1;->(ZZLio/ktor/client/plugins/api/ClientPluginBuilder;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/HttpRequestLifecycleKt; +HSPLio/ktor/client/plugins/HttpRequestLifecycleKt;->()V +HSPLio/ktor/client/plugins/HttpRequestLifecycleKt;->getHttpRequestLifecycle()Lio/ktor/client/plugins/api/ClientPlugin; +Lio/ktor/client/plugins/HttpRequestLifecycleKt$HttpRequestLifecycle$1; +HSPLio/ktor/client/plugins/HttpRequestLifecycleKt$HttpRequestLifecycle$1;->()V +HSPLio/ktor/client/plugins/HttpRequestLifecycleKt$HttpRequestLifecycle$1;->()V +HSPLio/ktor/client/plugins/HttpRequestLifecycleKt$HttpRequestLifecycle$1;->invoke(Lio/ktor/client/plugins/api/ClientPluginBuilder;)V +HSPLio/ktor/client/plugins/HttpRequestLifecycleKt$HttpRequestLifecycle$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lio/ktor/client/plugins/HttpRequestLifecycleKt$HttpRequestLifecycle$1$1; +HSPLio/ktor/client/plugins/HttpRequestLifecycleKt$HttpRequestLifecycle$1$1;->(Lio/ktor/client/plugins/api/ClientPluginBuilder;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/HttpRequestRetryConfig; +HSPLio/ktor/client/plugins/HttpRequestRetryConfig;->()V +HSPLio/ktor/client/plugins/HttpRequestRetryConfig;->constantDelay$default(Lio/ktor/client/plugins/HttpRequestRetryConfig;JJZILjava/lang/Object;)V +HSPLio/ktor/client/plugins/HttpRequestRetryConfig;->constantDelay(JJZ)V +HSPLio/ktor/client/plugins/HttpRequestRetryConfig;->delayMillis(ZLkotlin/jvm/functions/Function2;)V +HSPLio/ktor/client/plugins/HttpRequestRetryConfig;->exponentialDelay$default(Lio/ktor/client/plugins/HttpRequestRetryConfig;DJJZILjava/lang/Object;)V +HSPLio/ktor/client/plugins/HttpRequestRetryConfig;->exponentialDelay(DJJZ)V +HSPLio/ktor/client/plugins/HttpRequestRetryConfig;->getDelay$ktor_client_core()Lkotlin/jvm/functions/Function2; +HSPLio/ktor/client/plugins/HttpRequestRetryConfig;->getDelayMillis$ktor_client_core()Lkotlin/jvm/functions/Function2; +HSPLio/ktor/client/plugins/HttpRequestRetryConfig;->getMaxRetries()I +HSPLio/ktor/client/plugins/HttpRequestRetryConfig;->getModifyRequest$ktor_client_core()Lkotlin/jvm/functions/Function2; +HSPLio/ktor/client/plugins/HttpRequestRetryConfig;->getShouldRetry$ktor_client_core()Lkotlin/jvm/functions/Function3; +HSPLio/ktor/client/plugins/HttpRequestRetryConfig;->getShouldRetryOnException$ktor_client_core()Lkotlin/jvm/functions/Function3; +HSPLio/ktor/client/plugins/HttpRequestRetryConfig;->retryIf$default(Lio/ktor/client/plugins/HttpRequestRetryConfig;ILkotlin/jvm/functions/Function3;ILjava/lang/Object;)V +HSPLio/ktor/client/plugins/HttpRequestRetryConfig;->retryIf(ILkotlin/jvm/functions/Function3;)V +HSPLio/ktor/client/plugins/HttpRequestRetryConfig;->retryOnException$default(Lio/ktor/client/plugins/HttpRequestRetryConfig;IZILjava/lang/Object;)V +HSPLio/ktor/client/plugins/HttpRequestRetryConfig;->retryOnException(IZ)V +HSPLio/ktor/client/plugins/HttpRequestRetryConfig;->retryOnExceptionIf(ILkotlin/jvm/functions/Function3;)V +HSPLio/ktor/client/plugins/HttpRequestRetryConfig;->retryOnExceptionOrServerErrors(I)V +HSPLio/ktor/client/plugins/HttpRequestRetryConfig;->retryOnServerErrors(I)V +HSPLio/ktor/client/plugins/HttpRequestRetryConfig;->setDelayMillis$ktor_client_core(Lkotlin/jvm/functions/Function2;)V +HSPLio/ktor/client/plugins/HttpRequestRetryConfig;->setMaxRetries(I)V +HSPLio/ktor/client/plugins/HttpRequestRetryConfig;->setShouldRetry$ktor_client_core(Lkotlin/jvm/functions/Function3;)V +HSPLio/ktor/client/plugins/HttpRequestRetryConfig;->setShouldRetryOnException$ktor_client_core(Lkotlin/jvm/functions/Function3;)V +Lio/ktor/client/plugins/HttpRequestRetryConfig$constantDelay$1; +HSPLio/ktor/client/plugins/HttpRequestRetryConfig$constantDelay$1;->(JLio/ktor/client/plugins/HttpRequestRetryConfig;J)V +Lio/ktor/client/plugins/HttpRequestRetryConfig$delay$1; +HSPLio/ktor/client/plugins/HttpRequestRetryConfig$delay$1;->(Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/HttpRequestRetryConfig$delayMillis$1; +HSPLio/ktor/client/plugins/HttpRequestRetryConfig$delayMillis$1;->(ZLkotlin/jvm/functions/Function2;)V +Lio/ktor/client/plugins/HttpRequestRetryConfig$exponentialDelay$1; +HSPLio/ktor/client/plugins/HttpRequestRetryConfig$exponentialDelay$1;->(DJLio/ktor/client/plugins/HttpRequestRetryConfig;J)V +Lio/ktor/client/plugins/HttpRequestRetryConfig$modifyRequest$1; +HSPLio/ktor/client/plugins/HttpRequestRetryConfig$modifyRequest$1;->()V +HSPLio/ktor/client/plugins/HttpRequestRetryConfig$modifyRequest$1;->()V +Lio/ktor/client/plugins/HttpRequestRetryConfig$retryOnException$1; +HSPLio/ktor/client/plugins/HttpRequestRetryConfig$retryOnException$1;->(Z)V +Lio/ktor/client/plugins/HttpRequestRetryConfig$retryOnServerErrors$1; +HSPLio/ktor/client/plugins/HttpRequestRetryConfig$retryOnServerErrors$1;->()V +HSPLio/ktor/client/plugins/HttpRequestRetryConfig$retryOnServerErrors$1;->()V +Lio/ktor/client/plugins/HttpRequestRetryKt; +HSPLio/ktor/client/plugins/HttpRequestRetryKt;->()V +HSPLio/ktor/client/plugins/HttpRequestRetryKt;->getHttpRequestRetry()Lio/ktor/client/plugins/api/ClientPlugin; +Lio/ktor/client/plugins/HttpRequestRetryKt$HttpRequestRetry$1; +HSPLio/ktor/client/plugins/HttpRequestRetryKt$HttpRequestRetry$1;->()V +HSPLio/ktor/client/plugins/HttpRequestRetryKt$HttpRequestRetry$1;->()V +HSPLio/ktor/client/plugins/HttpRequestRetryKt$HttpRequestRetry$1;->invoke()Lio/ktor/client/plugins/HttpRequestRetryConfig; +HSPLio/ktor/client/plugins/HttpRequestRetryKt$HttpRequestRetry$1;->invoke()Ljava/lang/Object; +Lio/ktor/client/plugins/HttpRequestRetryKt$HttpRequestRetry$2; +HSPLio/ktor/client/plugins/HttpRequestRetryKt$HttpRequestRetry$2;->()V +HSPLio/ktor/client/plugins/HttpRequestRetryKt$HttpRequestRetry$2;->()V +HSPLio/ktor/client/plugins/HttpRequestRetryKt$HttpRequestRetry$2;->invoke(Lio/ktor/client/plugins/api/ClientPluginBuilder;)V +HSPLio/ktor/client/plugins/HttpRequestRetryKt$HttpRequestRetry$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lio/ktor/client/plugins/HttpRequestRetryKt$HttpRequestRetry$2$1; +HSPLio/ktor/client/plugins/HttpRequestRetryKt$HttpRequestRetry$2$1;->(Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;ILkotlin/jvm/functions/Function2;Lkotlin/jvm/functions/Function2;Lio/ktor/client/plugins/api/ClientPluginBuilder;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/HttpSend; +HSPLio/ktor/client/plugins/HttpSend;->()V +HSPLio/ktor/client/plugins/HttpSend;->(I)V +HSPLio/ktor/client/plugins/HttpSend;->(ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLio/ktor/client/plugins/HttpSend;->access$getKey$cp()Lio/ktor/util/AttributeKey; +HSPLio/ktor/client/plugins/HttpSend;->intercept(Lkotlin/jvm/functions/Function3;)V +Lio/ktor/client/plugins/HttpSend$Config; +HSPLio/ktor/client/plugins/HttpSend$Config;->()V +HSPLio/ktor/client/plugins/HttpSend$Config;->getMaxSendCount()I +Lio/ktor/client/plugins/HttpSend$Plugin; +HSPLio/ktor/client/plugins/HttpSend$Plugin;->()V +HSPLio/ktor/client/plugins/HttpSend$Plugin;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLio/ktor/client/plugins/HttpSend$Plugin;->getKey()Lio/ktor/util/AttributeKey; +HSPLio/ktor/client/plugins/HttpSend$Plugin;->install(Lio/ktor/client/plugins/HttpSend;Lio/ktor/client/HttpClient;)V +HSPLio/ktor/client/plugins/HttpSend$Plugin;->install(Ljava/lang/Object;Lio/ktor/client/HttpClient;)V +HSPLio/ktor/client/plugins/HttpSend$Plugin;->prepare(Lkotlin/jvm/functions/Function1;)Lio/ktor/client/plugins/HttpSend; +HSPLio/ktor/client/plugins/HttpSend$Plugin;->prepare(Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; +Lio/ktor/client/plugins/HttpSend$Plugin$install$1; +HSPLio/ktor/client/plugins/HttpSend$Plugin$install$1;->(Lio/ktor/client/plugins/HttpSend;Lio/ktor/client/HttpClient;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/HttpTimeoutCapability; +HSPLio/ktor/client/plugins/HttpTimeoutCapability;->()V +HSPLio/ktor/client/plugins/HttpTimeoutCapability;->()V +Lio/ktor/client/plugins/ReceiveError; +HSPLio/ktor/client/plugins/ReceiveError;->()V +HSPLio/ktor/client/plugins/ReceiveError;->()V +HSPLio/ktor/client/plugins/ReceiveError;->install(Lio/ktor/client/HttpClient;Ljava/lang/Object;)V +HSPLio/ktor/client/plugins/ReceiveError;->install(Lio/ktor/client/HttpClient;Lkotlin/jvm/functions/Function3;)V +Lio/ktor/client/plugins/ReceiveError$install$1; +HSPLio/ktor/client/plugins/ReceiveError$install$1;->(Lkotlin/jvm/functions/Function3;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/RenderRequestHook; +HSPLio/ktor/client/plugins/RenderRequestHook;->()V +HSPLio/ktor/client/plugins/RenderRequestHook;->()V +HSPLio/ktor/client/plugins/RenderRequestHook;->install(Lio/ktor/client/HttpClient;Ljava/lang/Object;)V +HSPLio/ktor/client/plugins/RenderRequestHook;->install(Lio/ktor/client/HttpClient;Lkotlin/jvm/functions/Function3;)V +Lio/ktor/client/plugins/RenderRequestHook$install$1; +HSPLio/ktor/client/plugins/RenderRequestHook$install$1;->(Lkotlin/jvm/functions/Function3;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/RequestError; +HSPLio/ktor/client/plugins/RequestError;->()V +HSPLio/ktor/client/plugins/RequestError;->()V +HSPLio/ktor/client/plugins/RequestError;->install(Lio/ktor/client/HttpClient;Ljava/lang/Object;)V +HSPLio/ktor/client/plugins/RequestError;->install(Lio/ktor/client/HttpClient;Lkotlin/jvm/functions/Function3;)V +Lio/ktor/client/plugins/RequestError$install$1; +HSPLio/ktor/client/plugins/RequestError$install$1;->(Lkotlin/jvm/functions/Function3;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/SaveBodyPluginConfig; +HSPLio/ktor/client/plugins/SaveBodyPluginConfig;->()V +HSPLio/ktor/client/plugins/SaveBodyPluginConfig;->getDisabled()Z +Lio/ktor/client/plugins/SetupRequestContext; +HSPLio/ktor/client/plugins/SetupRequestContext;->()V +HSPLio/ktor/client/plugins/SetupRequestContext;->()V +HSPLio/ktor/client/plugins/SetupRequestContext;->install(Lio/ktor/client/HttpClient;Ljava/lang/Object;)V +HSPLio/ktor/client/plugins/SetupRequestContext;->install(Lio/ktor/client/HttpClient;Lkotlin/jvm/functions/Function3;)V +Lio/ktor/client/plugins/SetupRequestContext$install$1; +HSPLio/ktor/client/plugins/SetupRequestContext$install$1;->(Lkotlin/jvm/functions/Function3;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/UserAgentConfig; +HSPLio/ktor/client/plugins/UserAgentConfig;->(Ljava/lang/String;)V +HSPLio/ktor/client/plugins/UserAgentConfig;->(Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLio/ktor/client/plugins/UserAgentConfig;->getAgent()Ljava/lang/String; +HSPLio/ktor/client/plugins/UserAgentConfig;->setAgent(Ljava/lang/String;)V +Lio/ktor/client/plugins/UserAgentKt; +HSPLio/ktor/client/plugins/UserAgentKt;->()V +HSPLio/ktor/client/plugins/UserAgentKt;->getUserAgent()Lio/ktor/client/plugins/api/ClientPlugin; +Lio/ktor/client/plugins/UserAgentKt$UserAgent$1; +HSPLio/ktor/client/plugins/UserAgentKt$UserAgent$1;->()V +HSPLio/ktor/client/plugins/UserAgentKt$UserAgent$1;->()V +HSPLio/ktor/client/plugins/UserAgentKt$UserAgent$1;->invoke()Lio/ktor/client/plugins/UserAgentConfig; +HSPLio/ktor/client/plugins/UserAgentKt$UserAgent$1;->invoke()Ljava/lang/Object; +Lio/ktor/client/plugins/UserAgentKt$UserAgent$2; +HSPLio/ktor/client/plugins/UserAgentKt$UserAgent$2;->()V +HSPLio/ktor/client/plugins/UserAgentKt$UserAgent$2;->()V +HSPLio/ktor/client/plugins/UserAgentKt$UserAgent$2;->invoke(Lio/ktor/client/plugins/api/ClientPluginBuilder;)V +HSPLio/ktor/client/plugins/UserAgentKt$UserAgent$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lio/ktor/client/plugins/UserAgentKt$UserAgent$2$1; +HSPLio/ktor/client/plugins/UserAgentKt$UserAgent$2$1;->(Ljava/lang/String;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/api/ClientHook; +Lio/ktor/client/plugins/api/ClientPlugin; +Lio/ktor/client/plugins/api/ClientPluginBuilder; +HSPLio/ktor/client/plugins/api/ClientPluginBuilder;->(Lio/ktor/util/AttributeKey;Lio/ktor/client/HttpClient;Ljava/lang/Object;)V +HSPLio/ktor/client/plugins/api/ClientPluginBuilder;->getClient()Lio/ktor/client/HttpClient; +HSPLio/ktor/client/plugins/api/ClientPluginBuilder;->getHooks$ktor_client_core()Ljava/util/List; +HSPLio/ktor/client/plugins/api/ClientPluginBuilder;->getOnClose$ktor_client_core()Lkotlin/jvm/functions/Function0; +HSPLio/ktor/client/plugins/api/ClientPluginBuilder;->getPluginConfig()Ljava/lang/Object; +HSPLio/ktor/client/plugins/api/ClientPluginBuilder;->on(Lio/ktor/client/plugins/api/ClientHook;Ljava/lang/Object;)V +HSPLio/ktor/client/plugins/api/ClientPluginBuilder;->onRequest(Lkotlin/jvm/functions/Function4;)V +HSPLio/ktor/client/plugins/api/ClientPluginBuilder;->transformRequestBody(Lkotlin/jvm/functions/Function5;)V +HSPLio/ktor/client/plugins/api/ClientPluginBuilder;->transformResponseBody(Lkotlin/jvm/functions/Function5;)V +Lio/ktor/client/plugins/api/ClientPluginBuilder$onClose$1; +HSPLio/ktor/client/plugins/api/ClientPluginBuilder$onClose$1;->()V +HSPLio/ktor/client/plugins/api/ClientPluginBuilder$onClose$1;->()V +Lio/ktor/client/plugins/api/ClientPluginInstance; +HSPLio/ktor/client/plugins/api/ClientPluginInstance;->(Ljava/lang/Object;Ljava/lang/String;Lkotlin/jvm/functions/Function1;)V +HSPLio/ktor/client/plugins/api/ClientPluginInstance;->install(Lio/ktor/client/HttpClient;)V +Lio/ktor/client/plugins/api/ClientPluginInstance$onClose$1; +HSPLio/ktor/client/plugins/api/ClientPluginInstance$onClose$1;->()V +HSPLio/ktor/client/plugins/api/ClientPluginInstance$onClose$1;->()V +Lio/ktor/client/plugins/api/CreatePluginUtilsKt; +HSPLio/ktor/client/plugins/api/CreatePluginUtilsKt;->createClientPlugin(Ljava/lang/String;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;)Lio/ktor/client/plugins/api/ClientPlugin; +HSPLio/ktor/client/plugins/api/CreatePluginUtilsKt;->createClientPlugin(Ljava/lang/String;Lkotlin/jvm/functions/Function1;)Lio/ktor/client/plugins/api/ClientPlugin; +Lio/ktor/client/plugins/api/CreatePluginUtilsKt$createClientPlugin$1; +HSPLio/ktor/client/plugins/api/CreatePluginUtilsKt$createClientPlugin$1;->(Ljava/lang/String;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;)V +HSPLio/ktor/client/plugins/api/CreatePluginUtilsKt$createClientPlugin$1;->getKey()Lio/ktor/util/AttributeKey; +HSPLio/ktor/client/plugins/api/CreatePluginUtilsKt$createClientPlugin$1;->install(Lio/ktor/client/plugins/api/ClientPluginInstance;Lio/ktor/client/HttpClient;)V +HSPLio/ktor/client/plugins/api/CreatePluginUtilsKt$createClientPlugin$1;->install(Ljava/lang/Object;Lio/ktor/client/HttpClient;)V +HSPLio/ktor/client/plugins/api/CreatePluginUtilsKt$createClientPlugin$1;->prepare(Lkotlin/jvm/functions/Function1;)Lio/ktor/client/plugins/api/ClientPluginInstance; +HSPLio/ktor/client/plugins/api/CreatePluginUtilsKt$createClientPlugin$1;->prepare(Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; +Lio/ktor/client/plugins/api/CreatePluginUtilsKt$createClientPlugin$2; +HSPLio/ktor/client/plugins/api/CreatePluginUtilsKt$createClientPlugin$2;->()V +HSPLio/ktor/client/plugins/api/CreatePluginUtilsKt$createClientPlugin$2;->()V +HSPLio/ktor/client/plugins/api/CreatePluginUtilsKt$createClientPlugin$2;->invoke()Ljava/lang/Object; +HSPLio/ktor/client/plugins/api/CreatePluginUtilsKt$createClientPlugin$2;->invoke()V +Lio/ktor/client/plugins/api/HookHandler; +HSPLio/ktor/client/plugins/api/HookHandler;->(Lio/ktor/client/plugins/api/ClientHook;Ljava/lang/Object;)V +HSPLio/ktor/client/plugins/api/HookHandler;->install(Lio/ktor/client/HttpClient;)V +Lio/ktor/client/plugins/api/RequestHook; +HSPLio/ktor/client/plugins/api/RequestHook;->()V +HSPLio/ktor/client/plugins/api/RequestHook;->()V +HSPLio/ktor/client/plugins/api/RequestHook;->install(Lio/ktor/client/HttpClient;Ljava/lang/Object;)V +HSPLio/ktor/client/plugins/api/RequestHook;->install(Lio/ktor/client/HttpClient;Lkotlin/jvm/functions/Function4;)V +Lio/ktor/client/plugins/api/RequestHook$install$1; +HSPLio/ktor/client/plugins/api/RequestHook$install$1;->(Lkotlin/jvm/functions/Function4;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/api/Send; +HSPLio/ktor/client/plugins/api/Send;->()V +HSPLio/ktor/client/plugins/api/Send;->()V +HSPLio/ktor/client/plugins/api/Send;->install(Lio/ktor/client/HttpClient;Ljava/lang/Object;)V +HSPLio/ktor/client/plugins/api/Send;->install(Lio/ktor/client/HttpClient;Lkotlin/jvm/functions/Function3;)V +Lio/ktor/client/plugins/api/Send$install$1; +HSPLio/ktor/client/plugins/api/Send$install$1;->(Lkotlin/jvm/functions/Function3;Lio/ktor/client/HttpClient;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/api/SetupRequest; +HSPLio/ktor/client/plugins/api/SetupRequest;->()V +HSPLio/ktor/client/plugins/api/SetupRequest;->()V +HSPLio/ktor/client/plugins/api/SetupRequest;->install(Lio/ktor/client/HttpClient;Ljava/lang/Object;)V +HSPLio/ktor/client/plugins/api/SetupRequest;->install(Lio/ktor/client/HttpClient;Lkotlin/jvm/functions/Function2;)V +Lio/ktor/client/plugins/api/SetupRequest$install$1; +HSPLio/ktor/client/plugins/api/SetupRequest$install$1;->(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/api/TransformRequestBodyHook; +HSPLio/ktor/client/plugins/api/TransformRequestBodyHook;->()V +HSPLio/ktor/client/plugins/api/TransformRequestBodyHook;->()V +HSPLio/ktor/client/plugins/api/TransformRequestBodyHook;->install(Lio/ktor/client/HttpClient;Ljava/lang/Object;)V +HSPLio/ktor/client/plugins/api/TransformRequestBodyHook;->install(Lio/ktor/client/HttpClient;Lkotlin/jvm/functions/Function5;)V +Lio/ktor/client/plugins/api/TransformRequestBodyHook$install$1; +HSPLio/ktor/client/plugins/api/TransformRequestBodyHook$install$1;->(Lkotlin/jvm/functions/Function5;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/api/TransformResponseBodyHook; +HSPLio/ktor/client/plugins/api/TransformResponseBodyHook;->()V +HSPLio/ktor/client/plugins/api/TransformResponseBodyHook;->()V +HSPLio/ktor/client/plugins/api/TransformResponseBodyHook;->install(Lio/ktor/client/HttpClient;Ljava/lang/Object;)V +HSPLio/ktor/client/plugins/api/TransformResponseBodyHook;->install(Lio/ktor/client/HttpClient;Lkotlin/jvm/functions/Function5;)V +Lio/ktor/client/plugins/api/TransformResponseBodyHook$install$1; +HSPLio/ktor/client/plugins/api/TransformResponseBodyHook$install$1;->(Lkotlin/jvm/functions/Function5;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/cache/HttpCache; +HSPLio/ktor/client/plugins/cache/HttpCache;->()V +HSPLio/ktor/client/plugins/cache/HttpCache;->(Lio/ktor/client/plugins/cache/storage/HttpCacheStorage;Lio/ktor/client/plugins/cache/storage/HttpCacheStorage;Lio/ktor/client/plugins/cache/storage/CacheStorage;Lio/ktor/client/plugins/cache/storage/CacheStorage;ZZ)V +HSPLio/ktor/client/plugins/cache/HttpCache;->(Lio/ktor/client/plugins/cache/storage/HttpCacheStorage;Lio/ktor/client/plugins/cache/storage/HttpCacheStorage;Lio/ktor/client/plugins/cache/storage/CacheStorage;Lio/ktor/client/plugins/cache/storage/CacheStorage;ZZLkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLio/ktor/client/plugins/cache/HttpCache;->access$getKey$cp()Lio/ktor/util/AttributeKey; +Lio/ktor/client/plugins/cache/HttpCache$Companion; +HSPLio/ktor/client/plugins/cache/HttpCache$Companion;->()V +HSPLio/ktor/client/plugins/cache/HttpCache$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLio/ktor/client/plugins/cache/HttpCache$Companion;->getKey()Lio/ktor/util/AttributeKey; +HSPLio/ktor/client/plugins/cache/HttpCache$Companion;->install(Lio/ktor/client/plugins/cache/HttpCache;Lio/ktor/client/HttpClient;)V +HSPLio/ktor/client/plugins/cache/HttpCache$Companion;->install(Ljava/lang/Object;Lio/ktor/client/HttpClient;)V +HSPLio/ktor/client/plugins/cache/HttpCache$Companion;->prepare(Lkotlin/jvm/functions/Function1;)Lio/ktor/client/plugins/cache/HttpCache; +HSPLio/ktor/client/plugins/cache/HttpCache$Companion;->prepare(Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; +Lio/ktor/client/plugins/cache/HttpCache$Companion$install$1; +HSPLio/ktor/client/plugins/cache/HttpCache$Companion$install$1;->(Lio/ktor/client/plugins/cache/HttpCache;Lio/ktor/client/HttpClient;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/cache/HttpCache$Companion$install$2; +HSPLio/ktor/client/plugins/cache/HttpCache$Companion$install$2;->(Lio/ktor/client/plugins/cache/HttpCache;Lio/ktor/client/HttpClient;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/cache/HttpCache$Config; +HSPLio/ktor/client/plugins/cache/HttpCache$Config;->()V +HSPLio/ktor/client/plugins/cache/HttpCache$Config;->getPrivateStorage()Lio/ktor/client/plugins/cache/storage/HttpCacheStorage; +HSPLio/ktor/client/plugins/cache/HttpCache$Config;->getPrivateStorageNew$ktor_client_core()Lio/ktor/client/plugins/cache/storage/CacheStorage; +HSPLio/ktor/client/plugins/cache/HttpCache$Config;->getPublicStorage()Lio/ktor/client/plugins/cache/storage/HttpCacheStorage; +HSPLio/ktor/client/plugins/cache/HttpCache$Config;->getPublicStorageNew$ktor_client_core()Lio/ktor/client/plugins/cache/storage/CacheStorage; +HSPLio/ktor/client/plugins/cache/HttpCache$Config;->getUseOldStorage$ktor_client_core()Z +HSPLio/ktor/client/plugins/cache/HttpCache$Config;->isShared()Z +Lio/ktor/client/plugins/cache/storage/CacheStorage; +HSPLio/ktor/client/plugins/cache/storage/CacheStorage;->()V +Lio/ktor/client/plugins/cache/storage/CacheStorage$Companion; +HSPLio/ktor/client/plugins/cache/storage/CacheStorage$Companion;->()V +HSPLio/ktor/client/plugins/cache/storage/CacheStorage$Companion;->()V +HSPLio/ktor/client/plugins/cache/storage/CacheStorage$Companion;->getUnlimited()Lkotlin/jvm/functions/Function0; +Lio/ktor/client/plugins/cache/storage/CacheStorage$Companion$Unlimited$1; +HSPLio/ktor/client/plugins/cache/storage/CacheStorage$Companion$Unlimited$1;->()V +HSPLio/ktor/client/plugins/cache/storage/CacheStorage$Companion$Unlimited$1;->()V +HSPLio/ktor/client/plugins/cache/storage/CacheStorage$Companion$Unlimited$1;->invoke()Lio/ktor/client/plugins/cache/storage/UnlimitedStorage; +HSPLio/ktor/client/plugins/cache/storage/CacheStorage$Companion$Unlimited$1;->invoke()Ljava/lang/Object; +Lio/ktor/client/plugins/cache/storage/DisabledCacheStorage; +HSPLio/ktor/client/plugins/cache/storage/DisabledCacheStorage;->()V +HSPLio/ktor/client/plugins/cache/storage/DisabledCacheStorage;->()V +Lio/ktor/client/plugins/cache/storage/DisabledStorage; +HSPLio/ktor/client/plugins/cache/storage/DisabledStorage;->()V +HSPLio/ktor/client/plugins/cache/storage/DisabledStorage;->()V +Lio/ktor/client/plugins/cache/storage/HttpCacheStorage; +HSPLio/ktor/client/plugins/cache/storage/HttpCacheStorage;->()V +HSPLio/ktor/client/plugins/cache/storage/HttpCacheStorage;->()V +HSPLio/ktor/client/plugins/cache/storage/HttpCacheStorage;->access$getUnlimited$cp()Lkotlin/jvm/functions/Function0; +Lio/ktor/client/plugins/cache/storage/HttpCacheStorage$Companion; +HSPLio/ktor/client/plugins/cache/storage/HttpCacheStorage$Companion;->()V +HSPLio/ktor/client/plugins/cache/storage/HttpCacheStorage$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLio/ktor/client/plugins/cache/storage/HttpCacheStorage$Companion;->getUnlimited()Lkotlin/jvm/functions/Function0; +Lio/ktor/client/plugins/cache/storage/HttpCacheStorage$Companion$Unlimited$1; +HSPLio/ktor/client/plugins/cache/storage/HttpCacheStorage$Companion$Unlimited$1;->()V +HSPLio/ktor/client/plugins/cache/storage/HttpCacheStorage$Companion$Unlimited$1;->()V +HSPLio/ktor/client/plugins/cache/storage/HttpCacheStorage$Companion$Unlimited$1;->invoke()Lio/ktor/client/plugins/cache/storage/UnlimitedCacheStorage; +HSPLio/ktor/client/plugins/cache/storage/HttpCacheStorage$Companion$Unlimited$1;->invoke()Ljava/lang/Object; +Lio/ktor/client/plugins/cache/storage/UnlimitedCacheStorage; +HSPLio/ktor/client/plugins/cache/storage/UnlimitedCacheStorage;->()V +Lio/ktor/client/plugins/cache/storage/UnlimitedStorage; +HSPLio/ktor/client/plugins/cache/storage/UnlimitedStorage;->()V +Lio/ktor/client/plugins/contentnegotiation/ContentNegotiationConfig; +HSPLio/ktor/client/plugins/contentnegotiation/ContentNegotiationConfig;->()V +HSPLio/ktor/client/plugins/contentnegotiation/ContentNegotiationConfig;->getIgnoredTypes$ktor_client_content_negotiation()Ljava/util/Set; +HSPLio/ktor/client/plugins/contentnegotiation/ContentNegotiationConfig;->getRegistrations$ktor_client_content_negotiation()Ljava/util/List; +HSPLio/ktor/client/plugins/contentnegotiation/ContentNegotiationConfig;->register(Lio/ktor/http/ContentType;Lio/ktor/serialization/ContentConverter;Lio/ktor/http/ContentTypeMatcher;Lkotlin/jvm/functions/Function1;)V +HSPLio/ktor/client/plugins/contentnegotiation/ContentNegotiationConfig;->register(Lio/ktor/http/ContentType;Lio/ktor/serialization/ContentConverter;Lkotlin/jvm/functions/Function1;)V +Lio/ktor/client/plugins/contentnegotiation/ContentNegotiationConfig$ConverterRegistration; +HSPLio/ktor/client/plugins/contentnegotiation/ContentNegotiationConfig$ConverterRegistration;->(Lio/ktor/serialization/ContentConverter;Lio/ktor/http/ContentType;Lio/ktor/http/ContentTypeMatcher;)V +Lio/ktor/client/plugins/contentnegotiation/ContentNegotiationKt; +HSPLio/ktor/client/plugins/contentnegotiation/ContentNegotiationKt;->()V +HSPLio/ktor/client/plugins/contentnegotiation/ContentNegotiationKt;->getContentNegotiation()Lio/ktor/client/plugins/api/ClientPlugin; +HSPLio/ktor/client/plugins/contentnegotiation/ContentNegotiationKt;->getDefaultCommonIgnoredTypes()Ljava/util/Set; +Lio/ktor/client/plugins/contentnegotiation/ContentNegotiationKt$ContentNegotiation$1; +HSPLio/ktor/client/plugins/contentnegotiation/ContentNegotiationKt$ContentNegotiation$1;->()V +HSPLio/ktor/client/plugins/contentnegotiation/ContentNegotiationKt$ContentNegotiation$1;->()V +HSPLio/ktor/client/plugins/contentnegotiation/ContentNegotiationKt$ContentNegotiation$1;->invoke()Lio/ktor/client/plugins/contentnegotiation/ContentNegotiationConfig; +HSPLio/ktor/client/plugins/contentnegotiation/ContentNegotiationKt$ContentNegotiation$1;->invoke()Ljava/lang/Object; +Lio/ktor/client/plugins/contentnegotiation/ContentNegotiationKt$ContentNegotiation$2; +HSPLio/ktor/client/plugins/contentnegotiation/ContentNegotiationKt$ContentNegotiation$2;->()V +HSPLio/ktor/client/plugins/contentnegotiation/ContentNegotiationKt$ContentNegotiation$2;->()V +HSPLio/ktor/client/plugins/contentnegotiation/ContentNegotiationKt$ContentNegotiation$2;->invoke(Lio/ktor/client/plugins/api/ClientPluginBuilder;)V +HSPLio/ktor/client/plugins/contentnegotiation/ContentNegotiationKt$ContentNegotiation$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lio/ktor/client/plugins/contentnegotiation/ContentNegotiationKt$ContentNegotiation$2$1; +HSPLio/ktor/client/plugins/contentnegotiation/ContentNegotiationKt$ContentNegotiation$2$1;->(Ljava/util/List;Ljava/util/Set;Lio/ktor/client/plugins/api/ClientPluginBuilder;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/contentnegotiation/ContentNegotiationKt$ContentNegotiation$2$2; +HSPLio/ktor/client/plugins/contentnegotiation/ContentNegotiationKt$ContentNegotiation$2$2;->(Ljava/util/Set;Ljava/util/List;Lio/ktor/client/plugins/api/ClientPluginBuilder;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/contentnegotiation/DefaultIgnoredTypesJvmKt; +HSPLio/ktor/client/plugins/contentnegotiation/DefaultIgnoredTypesJvmKt;->()V +HSPLio/ktor/client/plugins/contentnegotiation/DefaultIgnoredTypesJvmKt;->getDefaultIgnoredTypes()Ljava/util/Set; +Lio/ktor/client/plugins/contentnegotiation/JsonContentTypeMatcher; +HSPLio/ktor/client/plugins/contentnegotiation/JsonContentTypeMatcher;->()V +HSPLio/ktor/client/plugins/contentnegotiation/JsonContentTypeMatcher;->()V +Lio/ktor/client/plugins/logging/HttpClientCallLogger; +Lio/ktor/client/plugins/logging/LogLevel; +HSPLio/ktor/client/plugins/logging/LogLevel;->$values()[Lio/ktor/client/plugins/logging/LogLevel; +HSPLio/ktor/client/plugins/logging/LogLevel;->()V +HSPLio/ktor/client/plugins/logging/LogLevel;->(Ljava/lang/String;IZZZ)V +HSPLio/ktor/client/plugins/logging/LogLevel;->getBody()Z +Lio/ktor/client/plugins/logging/Logger; +HSPLio/ktor/client/plugins/logging/Logger;->()V +Lio/ktor/client/plugins/logging/Logger$Companion; +HSPLio/ktor/client/plugins/logging/Logger$Companion;->()V +HSPLio/ktor/client/plugins/logging/Logger$Companion;->()V +Lio/ktor/client/plugins/logging/LoggerJvmKt; +HSPLio/ktor/client/plugins/logging/LoggerJvmKt;->getDEFAULT(Lio/ktor/client/plugins/logging/Logger$Companion;)Lio/ktor/client/plugins/logging/Logger; +Lio/ktor/client/plugins/logging/LoggerJvmKt$DEFAULT$1; +HSPLio/ktor/client/plugins/logging/LoggerJvmKt$DEFAULT$1;->()V +Lio/ktor/client/plugins/logging/LoggingConfig; +HSPLio/ktor/client/plugins/logging/LoggingConfig;->()V +HSPLio/ktor/client/plugins/logging/LoggingConfig;->getFilters$ktor_client_logging()Ljava/util/List; +HSPLio/ktor/client/plugins/logging/LoggingConfig;->getLevel()Lio/ktor/client/plugins/logging/LogLevel; +HSPLio/ktor/client/plugins/logging/LoggingConfig;->getLogger()Lio/ktor/client/plugins/logging/Logger; +HSPLio/ktor/client/plugins/logging/LoggingConfig;->getSanitizedHeaders$ktor_client_logging()Ljava/util/List; +HSPLio/ktor/client/plugins/logging/LoggingConfig;->setLevel(Lio/ktor/client/plugins/logging/LogLevel;)V +Lio/ktor/client/plugins/logging/LoggingKt; +HSPLio/ktor/client/plugins/logging/LoggingKt;->()V +HSPLio/ktor/client/plugins/logging/LoggingKt;->getLogging()Lio/ktor/client/plugins/api/ClientPlugin; +Lio/ktor/client/plugins/logging/LoggingKt$Logging$1; +HSPLio/ktor/client/plugins/logging/LoggingKt$Logging$1;->()V +HSPLio/ktor/client/plugins/logging/LoggingKt$Logging$1;->()V +HSPLio/ktor/client/plugins/logging/LoggingKt$Logging$1;->invoke()Lio/ktor/client/plugins/logging/LoggingConfig; +HSPLio/ktor/client/plugins/logging/LoggingKt$Logging$1;->invoke()Ljava/lang/Object; +Lio/ktor/client/plugins/logging/LoggingKt$Logging$2; +HSPLio/ktor/client/plugins/logging/LoggingKt$Logging$2;->()V +HSPLio/ktor/client/plugins/logging/LoggingKt$Logging$2;->()V +HSPLio/ktor/client/plugins/logging/LoggingKt$Logging$2;->invoke(Lio/ktor/client/plugins/api/ClientPluginBuilder;)V +HSPLio/ktor/client/plugins/logging/LoggingKt$Logging$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lio/ktor/client/plugins/logging/LoggingKt$Logging$2$1; +HSPLio/ktor/client/plugins/logging/LoggingKt$Logging$2$1;->(Ljava/util/List;Lio/ktor/client/plugins/logging/Logger;Lio/ktor/client/plugins/logging/LogLevel;Ljava/util/List;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/logging/LoggingKt$Logging$2$2; +HSPLio/ktor/client/plugins/logging/LoggingKt$Logging$2$2;->(Lio/ktor/client/plugins/logging/LogLevel;Ljava/util/List;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/logging/LoggingKt$Logging$2$3; +HSPLio/ktor/client/plugins/logging/LoggingKt$Logging$2$3;->(Lio/ktor/client/plugins/logging/LogLevel;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/logging/LoggingKt$Logging$2$4; +HSPLio/ktor/client/plugins/logging/LoggingKt$Logging$2$4;->(Lkotlin/jvm/functions/Function2;)V +HSPLio/ktor/client/plugins/logging/LoggingKt$Logging$2$4;->invoke(Lio/ktor/client/plugins/observer/ResponseObserverConfig;)V +HSPLio/ktor/client/plugins/logging/LoggingKt$Logging$2$4;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lio/ktor/client/plugins/logging/LoggingKt$Logging$2$observer$1; +HSPLio/ktor/client/plugins/logging/LoggingKt$Logging$2$observer$1;->(Lio/ktor/client/plugins/logging/LogLevel;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/logging/ReceiveHook; +HSPLio/ktor/client/plugins/logging/ReceiveHook;->()V +HSPLio/ktor/client/plugins/logging/ReceiveHook;->()V +HSPLio/ktor/client/plugins/logging/ReceiveHook;->install(Lio/ktor/client/HttpClient;Ljava/lang/Object;)V +HSPLio/ktor/client/plugins/logging/ReceiveHook;->install(Lio/ktor/client/HttpClient;Lkotlin/jvm/functions/Function3;)V +Lio/ktor/client/plugins/logging/ReceiveHook$install$1; +HSPLio/ktor/client/plugins/logging/ReceiveHook$install$1;->(Lkotlin/jvm/functions/Function3;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/logging/ResponseHook; +HSPLio/ktor/client/plugins/logging/ResponseHook;->()V +HSPLio/ktor/client/plugins/logging/ResponseHook;->()V +HSPLio/ktor/client/plugins/logging/ResponseHook;->install(Lio/ktor/client/HttpClient;Ljava/lang/Object;)V +HSPLio/ktor/client/plugins/logging/ResponseHook;->install(Lio/ktor/client/HttpClient;Lkotlin/jvm/functions/Function3;)V +Lio/ktor/client/plugins/logging/ResponseHook$install$1; +HSPLio/ktor/client/plugins/logging/ResponseHook$install$1;->(Lkotlin/jvm/functions/Function3;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/logging/SendHook; +HSPLio/ktor/client/plugins/logging/SendHook;->()V +HSPLio/ktor/client/plugins/logging/SendHook;->()V +HSPLio/ktor/client/plugins/logging/SendHook;->install(Lio/ktor/client/HttpClient;Ljava/lang/Object;)V +HSPLio/ktor/client/plugins/logging/SendHook;->install(Lio/ktor/client/HttpClient;Lkotlin/jvm/functions/Function3;)V +Lio/ktor/client/plugins/logging/SendHook$install$1; +HSPLio/ktor/client/plugins/logging/SendHook$install$1;->(Lkotlin/jvm/functions/Function3;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/observer/AfterReceiveHook; +HSPLio/ktor/client/plugins/observer/AfterReceiveHook;->()V +HSPLio/ktor/client/plugins/observer/AfterReceiveHook;->()V +HSPLio/ktor/client/plugins/observer/AfterReceiveHook;->install(Lio/ktor/client/HttpClient;Ljava/lang/Object;)V +HSPLio/ktor/client/plugins/observer/AfterReceiveHook;->install(Lio/ktor/client/HttpClient;Lkotlin/jvm/functions/Function3;)V +Lio/ktor/client/plugins/observer/AfterReceiveHook$install$1; +HSPLio/ktor/client/plugins/observer/AfterReceiveHook$install$1;->(Lkotlin/jvm/functions/Function3;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/observer/ResponseObserverConfig; +HSPLio/ktor/client/plugins/observer/ResponseObserverConfig;->()V +HSPLio/ktor/client/plugins/observer/ResponseObserverConfig;->getFilter$ktor_client_core()Lkotlin/jvm/functions/Function1; +HSPLio/ktor/client/plugins/observer/ResponseObserverConfig;->getResponseHandler$ktor_client_core()Lkotlin/jvm/functions/Function2; +HSPLio/ktor/client/plugins/observer/ResponseObserverConfig;->onResponse(Lkotlin/jvm/functions/Function2;)V +Lio/ktor/client/plugins/observer/ResponseObserverConfig$responseHandler$1; +HSPLio/ktor/client/plugins/observer/ResponseObserverConfig$responseHandler$1;->(Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/observer/ResponseObserverKt; +HSPLio/ktor/client/plugins/observer/ResponseObserverKt;->()V +HSPLio/ktor/client/plugins/observer/ResponseObserverKt;->getResponseObserver()Lio/ktor/client/plugins/api/ClientPlugin; +Lio/ktor/client/plugins/observer/ResponseObserverKt$ResponseObserver$1; +HSPLio/ktor/client/plugins/observer/ResponseObserverKt$ResponseObserver$1;->()V +HSPLio/ktor/client/plugins/observer/ResponseObserverKt$ResponseObserver$1;->()V +HSPLio/ktor/client/plugins/observer/ResponseObserverKt$ResponseObserver$1;->invoke()Lio/ktor/client/plugins/observer/ResponseObserverConfig; +HSPLio/ktor/client/plugins/observer/ResponseObserverKt$ResponseObserver$1;->invoke()Ljava/lang/Object; +Lio/ktor/client/plugins/observer/ResponseObserverKt$ResponseObserver$2; +HSPLio/ktor/client/plugins/observer/ResponseObserverKt$ResponseObserver$2;->()V +HSPLio/ktor/client/plugins/observer/ResponseObserverKt$ResponseObserver$2;->()V +HSPLio/ktor/client/plugins/observer/ResponseObserverKt$ResponseObserver$2;->invoke(Lio/ktor/client/plugins/api/ClientPluginBuilder;)V +HSPLio/ktor/client/plugins/observer/ResponseObserverKt$ResponseObserver$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lio/ktor/client/plugins/observer/ResponseObserverKt$ResponseObserver$2$1; +HSPLio/ktor/client/plugins/observer/ResponseObserverKt$ResponseObserver$2$1;->(Lkotlin/jvm/functions/Function1;Lio/ktor/client/plugins/api/ClientPluginBuilder;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/sse/SSECapability; +HSPLio/ktor/client/plugins/sse/SSECapability;->()V +HSPLio/ktor/client/plugins/sse/SSECapability;->()V +Lio/ktor/client/plugins/websocket/WebSocketCapability; +HSPLio/ktor/client/plugins/websocket/WebSocketCapability;->()V +HSPLio/ktor/client/plugins/websocket/WebSocketCapability;->()V +Lio/ktor/client/plugins/websocket/WebSocketExtensionsCapability; +HSPLio/ktor/client/plugins/websocket/WebSocketExtensionsCapability;->()V +HSPLio/ktor/client/plugins/websocket/WebSocketExtensionsCapability;->()V +Lio/ktor/client/plugins/websocket/WebSockets; +HSPLio/ktor/client/plugins/websocket/WebSockets;->()V +HSPLio/ktor/client/plugins/websocket/WebSockets;->(JJLio/ktor/websocket/WebSocketExtensionsConfig;Lio/ktor/serialization/WebsocketContentConverter;)V +HSPLio/ktor/client/plugins/websocket/WebSockets;->access$getKey$cp()Lio/ktor/util/AttributeKey; +Lio/ktor/client/plugins/websocket/WebSockets$Config; +HSPLio/ktor/client/plugins/websocket/WebSockets$Config;->()V +HSPLio/ktor/client/plugins/websocket/WebSockets$Config;->getContentConverter()Lio/ktor/serialization/WebsocketContentConverter; +HSPLio/ktor/client/plugins/websocket/WebSockets$Config;->getExtensionsConfig$ktor_client_core()Lio/ktor/websocket/WebSocketExtensionsConfig; +HSPLio/ktor/client/plugins/websocket/WebSockets$Config;->getMaxFrameSize()J +HSPLio/ktor/client/plugins/websocket/WebSockets$Config;->getPingInterval()J +HSPLio/ktor/client/plugins/websocket/WebSockets$Config;->setPingInterval(J)V +Lio/ktor/client/plugins/websocket/WebSockets$Plugin; +HSPLio/ktor/client/plugins/websocket/WebSockets$Plugin;->()V +HSPLio/ktor/client/plugins/websocket/WebSockets$Plugin;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLio/ktor/client/plugins/websocket/WebSockets$Plugin;->getKey()Lio/ktor/util/AttributeKey; +HSPLio/ktor/client/plugins/websocket/WebSockets$Plugin;->install(Lio/ktor/client/plugins/websocket/WebSockets;Lio/ktor/client/HttpClient;)V +HSPLio/ktor/client/plugins/websocket/WebSockets$Plugin;->install(Ljava/lang/Object;Lio/ktor/client/HttpClient;)V +HSPLio/ktor/client/plugins/websocket/WebSockets$Plugin;->prepare(Lkotlin/jvm/functions/Function1;)Lio/ktor/client/plugins/websocket/WebSockets; +HSPLio/ktor/client/plugins/websocket/WebSockets$Plugin;->prepare(Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; +Lio/ktor/client/plugins/websocket/WebSockets$Plugin$install$1; +HSPLio/ktor/client/plugins/websocket/WebSockets$Plugin$install$1;->(ZLio/ktor/client/plugins/websocket/WebSockets;Lkotlin/coroutines/Continuation;)V +Lio/ktor/client/plugins/websocket/WebSockets$Plugin$install$2; +HSPLio/ktor/client/plugins/websocket/WebSockets$Plugin$install$2;->(Lio/ktor/client/plugins/websocket/WebSockets;ZLkotlin/coroutines/Continuation;)V +Lio/ktor/client/request/HttpRequestPipeline; +HSPLio/ktor/client/request/HttpRequestPipeline;->()V +HSPLio/ktor/client/request/HttpRequestPipeline;->(Z)V +HSPLio/ktor/client/request/HttpRequestPipeline;->access$getBefore$cp()Lio/ktor/util/pipeline/PipelinePhase; +HSPLio/ktor/client/request/HttpRequestPipeline;->access$getRender$cp()Lio/ktor/util/pipeline/PipelinePhase; +HSPLio/ktor/client/request/HttpRequestPipeline;->access$getSend$cp()Lio/ktor/util/pipeline/PipelinePhase; +HSPLio/ktor/client/request/HttpRequestPipeline;->access$getState$cp()Lio/ktor/util/pipeline/PipelinePhase; +HSPLio/ktor/client/request/HttpRequestPipeline;->access$getTransform$cp()Lio/ktor/util/pipeline/PipelinePhase; +Lio/ktor/client/request/HttpRequestPipeline$Phases; +HSPLio/ktor/client/request/HttpRequestPipeline$Phases;->()V +HSPLio/ktor/client/request/HttpRequestPipeline$Phases;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLio/ktor/client/request/HttpRequestPipeline$Phases;->getBefore()Lio/ktor/util/pipeline/PipelinePhase; +HSPLio/ktor/client/request/HttpRequestPipeline$Phases;->getRender()Lio/ktor/util/pipeline/PipelinePhase; +HSPLio/ktor/client/request/HttpRequestPipeline$Phases;->getSend()Lio/ktor/util/pipeline/PipelinePhase; +HSPLio/ktor/client/request/HttpRequestPipeline$Phases;->getState()Lio/ktor/util/pipeline/PipelinePhase; +HSPLio/ktor/client/request/HttpRequestPipeline$Phases;->getTransform()Lio/ktor/util/pipeline/PipelinePhase; +Lio/ktor/client/request/HttpSendPipeline; +HSPLio/ktor/client/request/HttpSendPipeline;->()V +HSPLio/ktor/client/request/HttpSendPipeline;->(Z)V +HSPLio/ktor/client/request/HttpSendPipeline;->access$getEngine$cp()Lio/ktor/util/pipeline/PipelinePhase; +HSPLio/ktor/client/request/HttpSendPipeline;->access$getMonitoring$cp()Lio/ktor/util/pipeline/PipelinePhase; +HSPLio/ktor/client/request/HttpSendPipeline;->access$getReceive$cp()Lio/ktor/util/pipeline/PipelinePhase; +HSPLio/ktor/client/request/HttpSendPipeline;->access$getState$cp()Lio/ktor/util/pipeline/PipelinePhase; +Lio/ktor/client/request/HttpSendPipeline$Phases; +HSPLio/ktor/client/request/HttpSendPipeline$Phases;->()V +HSPLio/ktor/client/request/HttpSendPipeline$Phases;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLio/ktor/client/request/HttpSendPipeline$Phases;->getEngine()Lio/ktor/util/pipeline/PipelinePhase; +HSPLio/ktor/client/request/HttpSendPipeline$Phases;->getMonitoring()Lio/ktor/util/pipeline/PipelinePhase; +HSPLio/ktor/client/request/HttpSendPipeline$Phases;->getReceive()Lio/ktor/util/pipeline/PipelinePhase; +HSPLio/ktor/client/request/HttpSendPipeline$Phases;->getState()Lio/ktor/util/pipeline/PipelinePhase; +Lio/ktor/client/statement/HttpReceivePipeline; +HSPLio/ktor/client/statement/HttpReceivePipeline;->()V +HSPLio/ktor/client/statement/HttpReceivePipeline;->(Z)V +HSPLio/ktor/client/statement/HttpReceivePipeline;->access$getAfter$cp()Lio/ktor/util/pipeline/PipelinePhase; +HSPLio/ktor/client/statement/HttpReceivePipeline;->access$getBefore$cp()Lio/ktor/util/pipeline/PipelinePhase; +HSPLio/ktor/client/statement/HttpReceivePipeline;->access$getState$cp()Lio/ktor/util/pipeline/PipelinePhase; +Lio/ktor/client/statement/HttpReceivePipeline$Phases; +HSPLio/ktor/client/statement/HttpReceivePipeline$Phases;->()V +HSPLio/ktor/client/statement/HttpReceivePipeline$Phases;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLio/ktor/client/statement/HttpReceivePipeline$Phases;->getAfter()Lio/ktor/util/pipeline/PipelinePhase; +HSPLio/ktor/client/statement/HttpReceivePipeline$Phases;->getBefore()Lio/ktor/util/pipeline/PipelinePhase; +HSPLio/ktor/client/statement/HttpReceivePipeline$Phases;->getState()Lio/ktor/util/pipeline/PipelinePhase; +Lio/ktor/client/statement/HttpResponsePipeline; +HSPLio/ktor/client/statement/HttpResponsePipeline;->()V +HSPLio/ktor/client/statement/HttpResponsePipeline;->(Z)V +HSPLio/ktor/client/statement/HttpResponsePipeline;->access$getParse$cp()Lio/ktor/util/pipeline/PipelinePhase; +HSPLio/ktor/client/statement/HttpResponsePipeline;->access$getReceive$cp()Lio/ktor/util/pipeline/PipelinePhase; +HSPLio/ktor/client/statement/HttpResponsePipeline;->access$getTransform$cp()Lio/ktor/util/pipeline/PipelinePhase; +Lio/ktor/client/statement/HttpResponsePipeline$Phases; +HSPLio/ktor/client/statement/HttpResponsePipeline$Phases;->()V +HSPLio/ktor/client/statement/HttpResponsePipeline$Phases;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLio/ktor/client/statement/HttpResponsePipeline$Phases;->getParse()Lio/ktor/util/pipeline/PipelinePhase; +HSPLio/ktor/client/statement/HttpResponsePipeline$Phases;->getReceive()Lio/ktor/util/pipeline/PipelinePhase; +HSPLio/ktor/client/statement/HttpResponsePipeline$Phases;->getTransform()Lio/ktor/util/pipeline/PipelinePhase; +Lio/ktor/events/EventDefinition; +HSPLio/ktor/events/EventDefinition;->()V +Lio/ktor/events/Events; +HSPLio/ktor/events/Events;->()V +Lio/ktor/http/ContentType; +HSPLio/ktor/http/ContentType;->()V +HSPLio/ktor/http/ContentType;->(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/util/List;)V +HSPLio/ktor/http/ContentType;->(Ljava/lang/String;Ljava/lang/String;Ljava/util/List;)V +HSPLio/ktor/http/ContentType;->(Ljava/lang/String;Ljava/lang/String;Ljava/util/List;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLio/ktor/http/ContentType;->equals(Ljava/lang/Object;)Z +Lio/ktor/http/ContentType$Application; +HSPLio/ktor/http/ContentType$Application;->()V +HSPLio/ktor/http/ContentType$Application;->()V +HSPLio/ktor/http/ContentType$Application;->getJson()Lio/ktor/http/ContentType; +Lio/ktor/http/ContentType$Companion; +HSPLio/ktor/http/ContentType$Companion;->()V +HSPLio/ktor/http/ContentType$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lio/ktor/http/ContentTypeMatcher; +Lio/ktor/http/HeaderValueWithParameters; +HSPLio/ktor/http/HeaderValueWithParameters;->()V +HSPLio/ktor/http/HeaderValueWithParameters;->(Ljava/lang/String;Ljava/util/List;)V +HSPLio/ktor/http/HeaderValueWithParameters;->getParameters()Ljava/util/List; +Lio/ktor/http/HeaderValueWithParameters$Companion; +HSPLio/ktor/http/HeaderValueWithParameters$Companion;->()V +HSPLio/ktor/http/HeaderValueWithParameters$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lio/ktor/http/HttpMethod; +HSPLio/ktor/http/HttpMethod;->()V +HSPLio/ktor/http/HttpMethod;->(Ljava/lang/String;)V +HSPLio/ktor/http/HttpMethod;->access$getGet$cp()Lio/ktor/http/HttpMethod; +HSPLio/ktor/http/HttpMethod;->access$getHead$cp()Lio/ktor/http/HttpMethod; +HSPLio/ktor/http/HttpMethod;->hashCode()I +Lio/ktor/http/HttpMethod$Companion; +HSPLio/ktor/http/HttpMethod$Companion;->()V +HSPLio/ktor/http/HttpMethod$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLio/ktor/http/HttpMethod$Companion;->getGet()Lio/ktor/http/HttpMethod; +HSPLio/ktor/http/HttpMethod$Companion;->getHead()Lio/ktor/http/HttpMethod; +Lio/ktor/http/HttpStatusCode; +Lio/ktor/http/content/OutgoingContent; +Lio/ktor/serialization/Configuration; +Lio/ktor/serialization/Configuration$DefaultImpls; +HSPLio/ktor/serialization/Configuration$DefaultImpls;->register$default(Lio/ktor/serialization/Configuration;Lio/ktor/http/ContentType;Lio/ktor/serialization/ContentConverter;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V +Lio/ktor/serialization/Configuration$register$1; +HSPLio/ktor/serialization/Configuration$register$1;->()V +HSPLio/ktor/serialization/Configuration$register$1;->()V +HSPLio/ktor/serialization/Configuration$register$1;->invoke(Lio/ktor/serialization/ContentConverter;)V +HSPLio/ktor/serialization/Configuration$register$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lio/ktor/serialization/ContentConverter; +Lio/ktor/serialization/WebsocketContentConverter; +Lio/ktor/serialization/kotlinx/ExtensionsJvmKt; +HSPLio/ktor/serialization/kotlinx/ExtensionsJvmKt;->()V +HSPLio/ktor/serialization/kotlinx/ExtensionsJvmKt;->getProviders()Ljava/util/List; +Lio/ktor/serialization/kotlinx/ExtensionsKt; +HSPLio/ktor/serialization/kotlinx/ExtensionsKt;->extensions(Lkotlinx/serialization/SerialFormat;)Ljava/util/List; +Lio/ktor/serialization/kotlinx/KotlinxSerializationConverter; +HSPLio/ktor/serialization/kotlinx/KotlinxSerializationConverter;->(Lkotlinx/serialization/SerialFormat;)V +Lio/ktor/serialization/kotlinx/KotlinxSerializationExtensionProvider; +Lio/ktor/util/AttributeKey; +HSPLio/ktor/util/AttributeKey;->(Ljava/lang/String;Ljava/lang/String;)V +HSPLio/ktor/util/AttributeKey;->hashCode()I +Lio/ktor/util/Attributes; +Lio/ktor/util/AttributesJvmBase; +HSPLio/ktor/util/AttributesJvmBase;->()V +HSPLio/ktor/util/AttributesJvmBase;->getOrNull(Lio/ktor/util/AttributeKey;)Ljava/lang/Object; +HSPLio/ktor/util/AttributesJvmBase;->put(Lio/ktor/util/AttributeKey;Ljava/lang/Object;)V +Lio/ktor/util/AttributesJvmKt; +HSPLio/ktor/util/AttributesJvmKt;->Attributes(Z)Lio/ktor/util/Attributes; +Lio/ktor/util/CacheKt; +HSPLio/ktor/util/CacheKt;->createLRUCache(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;I)Ljava/util/Map; +Lio/ktor/util/ConcurrentSafeAttributes; +HSPLio/ktor/util/ConcurrentSafeAttributes;->()V +HSPLio/ktor/util/ConcurrentSafeAttributes;->computeIfAbsent(Lio/ktor/util/AttributeKey;Lkotlin/jvm/functions/Function0;)Ljava/lang/Object; +HSPLio/ktor/util/ConcurrentSafeAttributes;->getMap()Ljava/util/Map; +HSPLio/ktor/util/ConcurrentSafeAttributes;->getMap()Ljava/util/concurrent/ConcurrentHashMap; +Lio/ktor/util/CoroutinesUtilsKt; +HSPLio/ktor/util/CoroutinesUtilsKt;->SilentSupervisor$default(Lkotlinx/coroutines/Job;ILjava/lang/Object;)Lkotlin/coroutines/CoroutineContext; +HSPLio/ktor/util/CoroutinesUtilsKt;->SilentSupervisor(Lkotlinx/coroutines/Job;)Lkotlin/coroutines/CoroutineContext; +Lio/ktor/util/CoroutinesUtilsKt$SilentSupervisor$$inlined$CoroutineExceptionHandler$1; +HSPLio/ktor/util/CoroutinesUtilsKt$SilentSupervisor$$inlined$CoroutineExceptionHandler$1;->(Lkotlinx/coroutines/CoroutineExceptionHandler$Key;)V +Lio/ktor/util/LRUCache; +HSPLio/ktor/util/LRUCache;->(Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;I)V +Lio/ktor/util/Platform; +HSPLio/ktor/util/Platform;->$values()[Lio/ktor/util/Platform; +HSPLio/ktor/util/Platform;->()V +HSPLio/ktor/util/Platform;->(Ljava/lang/String;I)V +Lio/ktor/util/PlatformUtils; +HSPLio/ktor/util/PlatformUtils;->()V +HSPLio/ktor/util/PlatformUtils;->()V +HSPLio/ktor/util/PlatformUtils;->getIS_DEVELOPMENT_MODE()Z +Lio/ktor/util/PlatformUtilsJvmKt; +HSPLio/ktor/util/PlatformUtilsJvmKt;->getPlatform(Lio/ktor/util/PlatformUtils;)Lio/ktor/util/Platform; +HSPLio/ktor/util/PlatformUtilsJvmKt;->isDevelopmentMode(Lio/ktor/util/PlatformUtils;)Z +HSPLio/ktor/util/PlatformUtilsJvmKt;->isNewMemoryModel(Lio/ktor/util/PlatformUtils;)Z +Lio/ktor/util/collections/ConcurrentMap; +HSPLio/ktor/util/collections/ConcurrentMap;->(I)V +HSPLio/ktor/util/collections/ConcurrentMap;->(IILkotlin/jvm/internal/DefaultConstructorMarker;)V +Lio/ktor/util/collections/CopyOnWriteHashMap; +HSPLio/ktor/util/collections/CopyOnWriteHashMap;->()V +HSPLio/ktor/util/collections/CopyOnWriteHashMap;->()V +Lio/ktor/util/logging/KtorSimpleLoggerJvmKt; +HSPLio/ktor/util/logging/KtorSimpleLoggerJvmKt;->KtorSimpleLogger(Ljava/lang/String;)Lorg/slf4j/Logger; +Lio/ktor/util/pipeline/PhaseContent; +HSPLio/ktor/util/pipeline/PhaseContent;->()V +HSPLio/ktor/util/pipeline/PhaseContent;->(Lio/ktor/util/pipeline/PipelinePhase;Lio/ktor/util/pipeline/PipelinePhaseRelation;)V +HSPLio/ktor/util/pipeline/PhaseContent;->(Lio/ktor/util/pipeline/PipelinePhase;Lio/ktor/util/pipeline/PipelinePhaseRelation;Ljava/util/List;)V +HSPLio/ktor/util/pipeline/PhaseContent;->addInterceptor(Lkotlin/jvm/functions/Function3;)V +HSPLio/ktor/util/pipeline/PhaseContent;->copiedInterceptors()Ljava/util/List; +HSPLio/ktor/util/pipeline/PhaseContent;->copyInterceptors()V +HSPLio/ktor/util/pipeline/PhaseContent;->getPhase()Lio/ktor/util/pipeline/PipelinePhase; +HSPLio/ktor/util/pipeline/PhaseContent;->getRelation()Lio/ktor/util/pipeline/PipelinePhaseRelation; +Lio/ktor/util/pipeline/PhaseContent$Companion; +HSPLio/ktor/util/pipeline/PhaseContent$Companion;->()V +HSPLio/ktor/util/pipeline/PhaseContent$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lio/ktor/util/pipeline/Pipeline; +HSPLio/ktor/util/pipeline/Pipeline;->([Lio/ktor/util/pipeline/PipelinePhase;)V +HSPLio/ktor/util/pipeline/Pipeline;->afterIntercepted()V +HSPLio/ktor/util/pipeline/Pipeline;->findPhase(Lio/ktor/util/pipeline/PipelinePhase;)Lio/ktor/util/pipeline/PhaseContent; +HSPLio/ktor/util/pipeline/Pipeline;->findPhaseIndex(Lio/ktor/util/pipeline/PipelinePhase;)I +HSPLio/ktor/util/pipeline/Pipeline;->getInterceptors()Ljava/util/List; +HSPLio/ktor/util/pipeline/Pipeline;->hasPhase(Lio/ktor/util/pipeline/PipelinePhase;)Z +HSPLio/ktor/util/pipeline/Pipeline;->insertPhaseAfter(Lio/ktor/util/pipeline/PipelinePhase;Lio/ktor/util/pipeline/PipelinePhase;)V +HSPLio/ktor/util/pipeline/Pipeline;->insertPhaseBefore(Lio/ktor/util/pipeline/PipelinePhase;Lio/ktor/util/pipeline/PipelinePhase;)V +HSPLio/ktor/util/pipeline/Pipeline;->intercept(Lio/ktor/util/pipeline/PipelinePhase;Lkotlin/jvm/functions/Function3;)V +HSPLio/ktor/util/pipeline/Pipeline;->resetInterceptorsList()V +HSPLio/ktor/util/pipeline/Pipeline;->setInterceptors(Ljava/util/List;)V +HSPLio/ktor/util/pipeline/Pipeline;->tryAddToPhaseFastPath(Lio/ktor/util/pipeline/PipelinePhase;Lkotlin/jvm/functions/Function3;)Z +Lio/ktor/util/pipeline/PipelinePhase; +HSPLio/ktor/util/pipeline/PipelinePhase;->(Ljava/lang/String;)V +Lio/ktor/util/pipeline/PipelinePhaseRelation; +HSPLio/ktor/util/pipeline/PipelinePhaseRelation;->()V +HSPLio/ktor/util/pipeline/PipelinePhaseRelation;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lio/ktor/util/pipeline/PipelinePhaseRelation$After; +HSPLio/ktor/util/pipeline/PipelinePhaseRelation$After;->(Lio/ktor/util/pipeline/PipelinePhase;)V +Lio/ktor/util/pipeline/PipelinePhaseRelation$Before; +HSPLio/ktor/util/pipeline/PipelinePhaseRelation$Before;->(Lio/ktor/util/pipeline/PipelinePhase;)V +Lio/ktor/util/pipeline/PipelinePhaseRelation$Last; +HSPLio/ktor/util/pipeline/PipelinePhaseRelation$Last;->()V +HSPLio/ktor/util/pipeline/PipelinePhaseRelation$Last;->()V +Lio/ktor/utils/io/ByteReadChannel; +Lio/ktor/utils/io/charsets/CharsetJVMKt; +HSPLio/ktor/utils/io/charsets/CharsetJVMKt;->()V +HSPLio/ktor/utils/io/charsets/CharsetJVMKt;->getName(Ljava/nio/charset/Charset;)Ljava/lang/String; +Lio/ktor/utils/io/charsets/MalformedInputException; +Lio/ktor/websocket/WebSocketExtensionsConfig; +HSPLio/ktor/websocket/WebSocketExtensionsConfig;->()V +Ljavax/inject/Provider; +Lkotlin/Function; +Lkotlin/KotlinNothingValueException; +Lkotlin/KotlinVersion; +HSPLkotlin/KotlinVersion;->()V +HSPLkotlin/KotlinVersion;->(III)V +HSPLkotlin/KotlinVersion;->toString()Ljava/lang/String; +HSPLkotlin/KotlinVersion;->versionOf(III)I +Lkotlin/KotlinVersion$Companion; +HSPLkotlin/KotlinVersion$Companion;->()V +HSPLkotlin/KotlinVersion$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlin/KotlinVersionCurrentValue; +HSPLkotlin/KotlinVersionCurrentValue;->()V +HSPLkotlin/KotlinVersionCurrentValue;->()V +HSPLkotlin/KotlinVersionCurrentValue;->get()Lkotlin/KotlinVersion; +Lkotlin/Lazy; +Lkotlin/LazyKt; +Lkotlin/LazyKt__LazyJVMKt; +HSPLkotlin/LazyKt__LazyJVMKt;->lazy(Lkotlin/LazyThreadSafetyMode;Lkotlin/jvm/functions/Function0;)Lkotlin/Lazy; +HSPLkotlin/LazyKt__LazyJVMKt;->lazy(Lkotlin/jvm/functions/Function0;)Lkotlin/Lazy; +Lkotlin/LazyKt__LazyJVMKt$WhenMappings; +HSPLkotlin/LazyKt__LazyJVMKt$WhenMappings;->()V +Lkotlin/LazyKt__LazyKt; +Lkotlin/LazyThreadSafetyMode; +HSPLkotlin/LazyThreadSafetyMode;->$values()[Lkotlin/LazyThreadSafetyMode; +HSPLkotlin/LazyThreadSafetyMode;->()V +HSPLkotlin/LazyThreadSafetyMode;->(Ljava/lang/String;I)V +HSPLkotlin/LazyThreadSafetyMode;->values()[Lkotlin/LazyThreadSafetyMode; +Lkotlin/NoWhenBranchMatchedException; +Lkotlin/Pair; +HSPLkotlin/Pair;->(Ljava/lang/Object;Ljava/lang/Object;)V +HSPLkotlin/Pair;->component1()Ljava/lang/Object; +HSPLkotlin/Pair;->component2()Ljava/lang/Object; +HSPLkotlin/Pair;->getFirst()Ljava/lang/Object; +HSPLkotlin/Pair;->getSecond()Ljava/lang/Object; +Lkotlin/Result; +HSPLkotlin/Result;->()V +HSPLkotlin/Result;->constructor-impl(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlin/Result;->exceptionOrNull-impl(Ljava/lang/Object;)Ljava/lang/Throwable; +HSPLkotlin/Result;->isFailure-impl(Ljava/lang/Object;)Z +HSPLkotlin/Result;->isSuccess-impl(Ljava/lang/Object;)Z +Lkotlin/Result$Companion; +HSPLkotlin/Result$Companion;->()V +HSPLkotlin/Result$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlin/Result$Failure; +HSPLkotlin/Result$Failure;->(Ljava/lang/Throwable;)V +Lkotlin/ResultKt; +HSPLkotlin/ResultKt;->createFailure(Ljava/lang/Throwable;)Ljava/lang/Object; +HSPLkotlin/ResultKt;->throwOnFailure(Ljava/lang/Object;)V +Lkotlin/SafePublicationLazyImpl; +HSPLkotlin/SafePublicationLazyImpl;->()V +HSPLkotlin/SafePublicationLazyImpl;->(Lkotlin/jvm/functions/Function0;)V +HSPLkotlin/SafePublicationLazyImpl;->getValue()Ljava/lang/Object; +Lkotlin/SafePublicationLazyImpl$Companion; +HSPLkotlin/SafePublicationLazyImpl$Companion;->()V +HSPLkotlin/SafePublicationLazyImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlin/SynchronizedLazyImpl; +HSPLkotlin/SynchronizedLazyImpl;->(Lkotlin/jvm/functions/Function0;Ljava/lang/Object;)V +HSPLkotlin/SynchronizedLazyImpl;->(Lkotlin/jvm/functions/Function0;Ljava/lang/Object;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlin/SynchronizedLazyImpl;->getValue()Ljava/lang/Object; +HSPLkotlin/SynchronizedLazyImpl;->isInitialized()Z +Lkotlin/Triple; +HSPLkotlin/Triple;->(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V +HSPLkotlin/Triple;->component1()Ljava/lang/Object; +HSPLkotlin/Triple;->component2()Ljava/lang/Object; +HSPLkotlin/Triple;->component3()Ljava/lang/Object; +HSPLkotlin/Triple;->copy$default(Lkotlin/Triple;Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;ILjava/lang/Object;)Lkotlin/Triple; +HSPLkotlin/Triple;->copy(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Triple; +HSPLkotlin/Triple;->getSecond()Ljava/lang/Object; +Lkotlin/TuplesKt; +HSPLkotlin/TuplesKt;->to(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair; +Lkotlin/UByte; +HSPLkotlin/UByte;->()V +Lkotlin/UByte$Companion; +HSPLkotlin/UByte$Companion;->()V +HSPLkotlin/UByte$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlin/UByteArray; +Lkotlin/UInt; +HSPLkotlin/UInt;->()V +Lkotlin/UInt$Companion; +HSPLkotlin/UInt$Companion;->()V +HSPLkotlin/UInt$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlin/UIntArray; +Lkotlin/ULong; +HSPLkotlin/ULong;->()V +HSPLkotlin/ULong;->constructor-impl(J)J +HSPLkotlin/ULong;->equals-impl0(JJ)Z +HSPLkotlin/ULong;->hashCode-impl(J)I +Lkotlin/ULong$Companion; +HSPLkotlin/ULong$Companion;->()V +HSPLkotlin/ULong$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlin/ULongArray; +Lkotlin/UNINITIALIZED_VALUE; +HSPLkotlin/UNINITIALIZED_VALUE;->()V +HSPLkotlin/UNINITIALIZED_VALUE;->()V +Lkotlin/UShort; +HSPLkotlin/UShort;->()V +Lkotlin/UShort$Companion; +HSPLkotlin/UShort$Companion;->()V +HSPLkotlin/UShort$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlin/UShortArray; +Lkotlin/Unit; +HSPLkotlin/Unit;->()V +HSPLkotlin/Unit;->()V +Lkotlin/UnsafeLazyImpl; +HSPLkotlin/UnsafeLazyImpl;->(Lkotlin/jvm/functions/Function0;)V +HSPLkotlin/UnsafeLazyImpl;->getValue()Ljava/lang/Object; +Lkotlin/UnsignedKt; +HSPLkotlin/UnsignedKt;->ulongToDouble(J)D +Lkotlin/collections/AbstractCollection; +HSPLkotlin/collections/AbstractCollection;->()V +HSPLkotlin/collections/AbstractCollection;->isEmpty()Z +HSPLkotlin/collections/AbstractCollection;->size()I +HSPLkotlin/collections/AbstractCollection;->toArray()[Ljava/lang/Object; +Lkotlin/collections/AbstractList; +HSPLkotlin/collections/AbstractList;->()V +HSPLkotlin/collections/AbstractList;->()V +HSPLkotlin/collections/AbstractList;->equals(Ljava/lang/Object;)Z +HSPLkotlin/collections/AbstractList;->hashCode()I +HSPLkotlin/collections/AbstractList;->iterator()Ljava/util/Iterator; +HSPLkotlin/collections/AbstractList;->listIterator(I)Ljava/util/ListIterator; +Lkotlin/collections/AbstractList$Companion; +HSPLkotlin/collections/AbstractList$Companion;->()V +HSPLkotlin/collections/AbstractList$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlin/collections/AbstractList$Companion;->checkElementIndex$kotlin_stdlib(II)V +HSPLkotlin/collections/AbstractList$Companion;->checkPositionIndex$kotlin_stdlib(II)V +HSPLkotlin/collections/AbstractList$Companion;->newCapacity$kotlin_stdlib(II)I +HSPLkotlin/collections/AbstractList$Companion;->orderedEquals$kotlin_stdlib(Ljava/util/Collection;Ljava/util/Collection;)Z +HSPLkotlin/collections/AbstractList$Companion;->orderedHashCode$kotlin_stdlib(Ljava/util/Collection;)I +Lkotlin/collections/AbstractList$IteratorImpl; +HSPLkotlin/collections/AbstractList$IteratorImpl;->(Lkotlin/collections/AbstractList;)V +HSPLkotlin/collections/AbstractList$IteratorImpl;->getIndex()I +HSPLkotlin/collections/AbstractList$IteratorImpl;->hasNext()Z +HSPLkotlin/collections/AbstractList$IteratorImpl;->next()Ljava/lang/Object; +HSPLkotlin/collections/AbstractList$IteratorImpl;->setIndex(I)V +Lkotlin/collections/AbstractList$ListIteratorImpl; +HSPLkotlin/collections/AbstractList$ListIteratorImpl;->(Lkotlin/collections/AbstractList;I)V +HSPLkotlin/collections/AbstractList$ListIteratorImpl;->hasPrevious()Z +HSPLkotlin/collections/AbstractList$ListIteratorImpl;->nextIndex()I +HSPLkotlin/collections/AbstractList$ListIteratorImpl;->previous()Ljava/lang/Object; +Lkotlin/collections/AbstractMap; +HSPLkotlin/collections/AbstractMap;->()V +HSPLkotlin/collections/AbstractMap;->()V +HSPLkotlin/collections/AbstractMap;->containsEntry$kotlin_stdlib(Ljava/util/Map$Entry;)Z +HSPLkotlin/collections/AbstractMap;->entrySet()Ljava/util/Set; +HSPLkotlin/collections/AbstractMap;->equals(Ljava/lang/Object;)Z +HSPLkotlin/collections/AbstractMap;->isEmpty()Z +HSPLkotlin/collections/AbstractMap;->size()I +HSPLkotlin/collections/AbstractMap;->values()Ljava/util/Collection; +Lkotlin/collections/AbstractMap$Companion; +HSPLkotlin/collections/AbstractMap$Companion;->()V +HSPLkotlin/collections/AbstractMap$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlin/collections/AbstractMutableList; +HSPLkotlin/collections/AbstractMutableList;->()V +HSPLkotlin/collections/AbstractMutableList;->size()I +Lkotlin/collections/AbstractMutableMap; +HSPLkotlin/collections/AbstractMutableMap;->()V +HSPLkotlin/collections/AbstractMutableMap;->size()I +Lkotlin/collections/AbstractMutableSet; +HSPLkotlin/collections/AbstractMutableSet;->()V +HSPLkotlin/collections/AbstractMutableSet;->size()I +Lkotlin/collections/AbstractSet; +HSPLkotlin/collections/AbstractSet;->()V +HSPLkotlin/collections/AbstractSet;->()V +HSPLkotlin/collections/AbstractSet;->equals(Ljava/lang/Object;)Z +Lkotlin/collections/AbstractSet$Companion; +HSPLkotlin/collections/AbstractSet$Companion;->()V +HSPLkotlin/collections/AbstractSet$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlin/collections/AbstractSet$Companion;->setEquals$kotlin_stdlib(Ljava/util/Set;Ljava/util/Set;)Z +Lkotlin/collections/ArrayAsCollection; +HSPLkotlin/collections/ArrayAsCollection;->([Ljava/lang/Object;Z)V +HSPLkotlin/collections/ArrayAsCollection;->toArray()[Ljava/lang/Object; +Lkotlin/collections/ArrayDeque; +HSPLkotlin/collections/ArrayDeque;->()V +HSPLkotlin/collections/ArrayDeque;->()V +HSPLkotlin/collections/ArrayDeque;->add(Ljava/lang/Object;)Z +HSPLkotlin/collections/ArrayDeque;->addLast(Ljava/lang/Object;)V +HSPLkotlin/collections/ArrayDeque;->copyElements(I)V +HSPLkotlin/collections/ArrayDeque;->ensureCapacity(I)V +HSPLkotlin/collections/ArrayDeque;->first()Ljava/lang/Object; +HSPLkotlin/collections/ArrayDeque;->get(I)Ljava/lang/Object; +HSPLkotlin/collections/ArrayDeque;->getSize()I +HSPLkotlin/collections/ArrayDeque;->incremented(I)I +HSPLkotlin/collections/ArrayDeque;->isEmpty()Z +HSPLkotlin/collections/ArrayDeque;->positiveMod(I)I +HSPLkotlin/collections/ArrayDeque;->removeFirst()Ljava/lang/Object; +HSPLkotlin/collections/ArrayDeque;->removeFirstOrNull()Ljava/lang/Object; +HSPLkotlin/collections/ArrayDeque;->removeLast()Ljava/lang/Object; +HSPLkotlin/collections/ArrayDeque;->removeLastOrNull()Ljava/lang/Object; +Lkotlin/collections/ArrayDeque$Companion; +HSPLkotlin/collections/ArrayDeque$Companion;->()V +HSPLkotlin/collections/ArrayDeque$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlin/collections/ArraysKt; +Lkotlin/collections/ArraysKt__ArraysJVMKt; +Lkotlin/collections/ArraysKt__ArraysKt; +Lkotlin/collections/ArraysKt___ArraysJvmKt; +HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->asList([Ljava/lang/Object;)Ljava/util/List; +HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto$default([F[FIIIILjava/lang/Object;)[F +HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto$default([I[IIIIILjava/lang/Object;)[I +HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto$default([Ljava/lang/Object;[Ljava/lang/Object;IIIILjava/lang/Object;)[Ljava/lang/Object; +HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto([B[BIII)[B +HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto([C[CIII)[C +HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto([F[FIII)[F +HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto([I[IIII)[I +HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->copyInto([Ljava/lang/Object;[Ljava/lang/Object;III)[Ljava/lang/Object; +HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->fill$default([IIIIILjava/lang/Object;)V +HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->fill$default([Ljava/lang/Object;Ljava/lang/Object;IIILjava/lang/Object;)V +HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->fill([IIII)V +HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->fill([Ljava/lang/Object;Ljava/lang/Object;II)V +HSPLkotlin/collections/ArraysKt___ArraysJvmKt;->sortWith([Ljava/lang/Object;Ljava/util/Comparator;II)V +Lkotlin/collections/ArraysKt___ArraysKt; +HSPLkotlin/collections/ArraysKt___ArraysKt;->asIterable([Ljava/lang/Object;)Ljava/lang/Iterable; +HSPLkotlin/collections/ArraysKt___ArraysKt;->asSequence([Ljava/lang/Object;)Lkotlin/sequences/Sequence; +HSPLkotlin/collections/ArraysKt___ArraysKt;->filterNotNull([Ljava/lang/Object;)Ljava/util/List; +HSPLkotlin/collections/ArraysKt___ArraysKt;->filterNotNullTo([Ljava/lang/Object;Ljava/util/Collection;)Ljava/util/Collection; +HSPLkotlin/collections/ArraysKt___ArraysKt;->getIndices([I)Lkotlin/ranges/IntRange; +HSPLkotlin/collections/ArraysKt___ArraysKt;->getIndices([Ljava/lang/Object;)Lkotlin/ranges/IntRange; +HSPLkotlin/collections/ArraysKt___ArraysKt;->getLastIndex([I)I +HSPLkotlin/collections/ArraysKt___ArraysKt;->getLastIndex([Ljava/lang/Object;)I +HSPLkotlin/collections/ArraysKt___ArraysKt;->getOrNull([Ljava/lang/Object;I)Ljava/lang/Object; +HSPLkotlin/collections/ArraysKt___ArraysKt;->indexOf([Ljava/lang/Object;Ljava/lang/Object;)I +HSPLkotlin/collections/ArraysKt___ArraysKt;->toCollection([Ljava/lang/Object;Ljava/util/Collection;)Ljava/util/Collection; +HSPLkotlin/collections/ArraysKt___ArraysKt;->toList([Ljava/lang/Object;)Ljava/util/List; +HSPLkotlin/collections/ArraysKt___ArraysKt;->toMutableList([Ljava/lang/Object;)Ljava/util/List; +HSPLkotlin/collections/ArraysKt___ArraysKt;->toSet([Ljava/lang/Object;)Ljava/util/Set; +HSPLkotlin/collections/ArraysKt___ArraysKt;->withIndex([Ljava/lang/Object;)Ljava/lang/Iterable; +HSPLkotlin/collections/ArraysKt___ArraysKt;->zip([Ljava/lang/Object;[Ljava/lang/Object;)Ljava/util/List; +Lkotlin/collections/ArraysKt___ArraysKt$asIterable$$inlined$Iterable$1; +HSPLkotlin/collections/ArraysKt___ArraysKt$asIterable$$inlined$Iterable$1;->([Ljava/lang/Object;)V +HSPLkotlin/collections/ArraysKt___ArraysKt$asIterable$$inlined$Iterable$1;->iterator()Ljava/util/Iterator; +Lkotlin/collections/ArraysKt___ArraysKt$withIndex$1; +HSPLkotlin/collections/ArraysKt___ArraysKt$withIndex$1;->([Ljava/lang/Object;)V +HSPLkotlin/collections/ArraysKt___ArraysKt$withIndex$1;->invoke()Ljava/lang/Object; +HSPLkotlin/collections/ArraysKt___ArraysKt$withIndex$1;->invoke()Ljava/util/Iterator; +Lkotlin/collections/ArraysUtilJVM; +HSPLkotlin/collections/ArraysUtilJVM;->asList([Ljava/lang/Object;)Ljava/util/List; +Lkotlin/collections/CollectionsKt; +Lkotlin/collections/CollectionsKt__CollectionsJVMKt; +HSPLkotlin/collections/CollectionsKt__CollectionsJVMKt;->build(Ljava/util/List;)Ljava/util/List; +HSPLkotlin/collections/CollectionsKt__CollectionsJVMKt;->copyToArrayOfAny([Ljava/lang/Object;Z)[Ljava/lang/Object; +HSPLkotlin/collections/CollectionsKt__CollectionsJVMKt;->createListBuilder()Ljava/util/List; +HSPLkotlin/collections/CollectionsKt__CollectionsJVMKt;->listOf(Ljava/lang/Object;)Ljava/util/List; +HSPLkotlin/collections/CollectionsKt__CollectionsJVMKt;->terminateCollectionToArray(I[Ljava/lang/Object;)[Ljava/lang/Object; +Lkotlin/collections/CollectionsKt__CollectionsKt; +HSPLkotlin/collections/CollectionsKt__CollectionsKt;->asCollection([Ljava/lang/Object;)Ljava/util/Collection; +HSPLkotlin/collections/CollectionsKt__CollectionsKt;->binarySearch$default(Ljava/util/List;Ljava/lang/Comparable;IIILjava/lang/Object;)I +HSPLkotlin/collections/CollectionsKt__CollectionsKt;->binarySearch(Ljava/util/List;Ljava/lang/Comparable;II)I +HSPLkotlin/collections/CollectionsKt__CollectionsKt;->emptyList()Ljava/util/List; +HSPLkotlin/collections/CollectionsKt__CollectionsKt;->getLastIndex(Ljava/util/List;)I +HSPLkotlin/collections/CollectionsKt__CollectionsKt;->listOf([Ljava/lang/Object;)Ljava/util/List; +HSPLkotlin/collections/CollectionsKt__CollectionsKt;->listOfNotNull([Ljava/lang/Object;)Ljava/util/List; +HSPLkotlin/collections/CollectionsKt__CollectionsKt;->mutableListOf([Ljava/lang/Object;)Ljava/util/List; +HSPLkotlin/collections/CollectionsKt__CollectionsKt;->optimizeReadOnlyList(Ljava/util/List;)Ljava/util/List; +HSPLkotlin/collections/CollectionsKt__CollectionsKt;->rangeCheck$CollectionsKt__CollectionsKt(III)V +Lkotlin/collections/CollectionsKt__IterablesKt; +HSPLkotlin/collections/CollectionsKt__IterablesKt;->collectionSizeOrDefault(Ljava/lang/Iterable;I)I +HSPLkotlin/collections/CollectionsKt__IterablesKt;->collectionSizeOrNull(Ljava/lang/Iterable;)Ljava/lang/Integer; +Lkotlin/collections/CollectionsKt__IteratorsJVMKt; +Lkotlin/collections/CollectionsKt__IteratorsKt; +Lkotlin/collections/CollectionsKt__MutableCollectionsJVMKt; +HSPLkotlin/collections/CollectionsKt__MutableCollectionsJVMKt;->sort(Ljava/util/List;)V +HSPLkotlin/collections/CollectionsKt__MutableCollectionsJVMKt;->sortWith(Ljava/util/List;Ljava/util/Comparator;)V +Lkotlin/collections/CollectionsKt__MutableCollectionsKt; +HSPLkotlin/collections/CollectionsKt__MutableCollectionsKt;->addAll(Ljava/util/Collection;Ljava/lang/Iterable;)Z +HSPLkotlin/collections/CollectionsKt__MutableCollectionsKt;->addAll(Ljava/util/Collection;Lkotlin/sequences/Sequence;)Z +HSPLkotlin/collections/CollectionsKt__MutableCollectionsKt;->filterInPlace$CollectionsKt__MutableCollectionsKt(Ljava/lang/Iterable;Lkotlin/jvm/functions/Function1;Z)Z +HSPLkotlin/collections/CollectionsKt__MutableCollectionsKt;->filterInPlace$CollectionsKt__MutableCollectionsKt(Ljava/util/List;Lkotlin/jvm/functions/Function1;Z)Z +HSPLkotlin/collections/CollectionsKt__MutableCollectionsKt;->removeAll(Ljava/util/List;Lkotlin/jvm/functions/Function1;)Z +HSPLkotlin/collections/CollectionsKt__MutableCollectionsKt;->removeFirstOrNull(Ljava/util/List;)Ljava/lang/Object; +HSPLkotlin/collections/CollectionsKt__MutableCollectionsKt;->removeLast(Ljava/util/List;)Ljava/lang/Object; +Lkotlin/collections/CollectionsKt__ReversedViewsKt; +Lkotlin/collections/CollectionsKt___CollectionsJvmKt; +Lkotlin/collections/CollectionsKt___CollectionsKt; +HSPLkotlin/collections/CollectionsKt___CollectionsKt;->asSequence(Ljava/lang/Iterable;)Lkotlin/sequences/Sequence; +HSPLkotlin/collections/CollectionsKt___CollectionsKt;->filterNotNull(Ljava/lang/Iterable;)Ljava/util/List; +HSPLkotlin/collections/CollectionsKt___CollectionsKt;->filterNotNullTo(Ljava/lang/Iterable;Ljava/util/Collection;)Ljava/util/Collection; +HSPLkotlin/collections/CollectionsKt___CollectionsKt;->first(Ljava/util/List;)Ljava/lang/Object; +HSPLkotlin/collections/CollectionsKt___CollectionsKt;->firstOrNull(Ljava/lang/Iterable;)Ljava/lang/Object; +HSPLkotlin/collections/CollectionsKt___CollectionsKt;->firstOrNull(Ljava/util/List;)Ljava/lang/Object; +HSPLkotlin/collections/CollectionsKt___CollectionsKt;->getOrNull(Ljava/util/List;I)Ljava/lang/Object; +HSPLkotlin/collections/CollectionsKt___CollectionsKt;->joinTo(Ljava/lang/Iterable;Ljava/lang/Appendable;Ljava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/CharSequence;ILjava/lang/CharSequence;Lkotlin/jvm/functions/Function1;)Ljava/lang/Appendable; +HSPLkotlin/collections/CollectionsKt___CollectionsKt;->joinToString$default(Ljava/lang/Iterable;Ljava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/CharSequence;ILjava/lang/CharSequence;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ljava/lang/String; +HSPLkotlin/collections/CollectionsKt___CollectionsKt;->joinToString(Ljava/lang/Iterable;Ljava/lang/CharSequence;Ljava/lang/CharSequence;Ljava/lang/CharSequence;ILjava/lang/CharSequence;Lkotlin/jvm/functions/Function1;)Ljava/lang/String; +HSPLkotlin/collections/CollectionsKt___CollectionsKt;->last(Ljava/util/List;)Ljava/lang/Object; +HSPLkotlin/collections/CollectionsKt___CollectionsKt;->lastOrNull(Ljava/util/List;)Ljava/lang/Object; +HSPLkotlin/collections/CollectionsKt___CollectionsKt;->plus(Ljava/util/Collection;Ljava/lang/Iterable;)Ljava/util/List; +HSPLkotlin/collections/CollectionsKt___CollectionsKt;->plus(Ljava/util/Collection;Ljava/lang/Object;)Ljava/util/List; +HSPLkotlin/collections/CollectionsKt___CollectionsKt;->reversed(Ljava/lang/Iterable;)Ljava/util/List; +HSPLkotlin/collections/CollectionsKt___CollectionsKt;->singleOrNull(Ljava/util/List;)Ljava/lang/Object; +HSPLkotlin/collections/CollectionsKt___CollectionsKt;->sorted(Ljava/lang/Iterable;)Ljava/util/List; +HSPLkotlin/collections/CollectionsKt___CollectionsKt;->sortedWith(Ljava/lang/Iterable;Ljava/util/Comparator;)Ljava/util/List; +HSPLkotlin/collections/CollectionsKt___CollectionsKt;->toBooleanArray(Ljava/util/Collection;)[Z +HSPLkotlin/collections/CollectionsKt___CollectionsKt;->toCollection(Ljava/lang/Iterable;Ljava/util/Collection;)Ljava/util/Collection; +HSPLkotlin/collections/CollectionsKt___CollectionsKt;->toFloatArray(Ljava/util/Collection;)[F +HSPLkotlin/collections/CollectionsKt___CollectionsKt;->toHashSet(Ljava/lang/Iterable;)Ljava/util/HashSet; +HSPLkotlin/collections/CollectionsKt___CollectionsKt;->toIntArray(Ljava/util/Collection;)[I +HSPLkotlin/collections/CollectionsKt___CollectionsKt;->toList(Ljava/lang/Iterable;)Ljava/util/List; +HSPLkotlin/collections/CollectionsKt___CollectionsKt;->toMutableList(Ljava/lang/Iterable;)Ljava/util/List; +HSPLkotlin/collections/CollectionsKt___CollectionsKt;->toMutableList(Ljava/util/Collection;)Ljava/util/List; +HSPLkotlin/collections/CollectionsKt___CollectionsKt;->toMutableSet(Ljava/lang/Iterable;)Ljava/util/Set; +HSPLkotlin/collections/CollectionsKt___CollectionsKt;->toSet(Ljava/lang/Iterable;)Ljava/util/Set; +HSPLkotlin/collections/CollectionsKt___CollectionsKt;->windowed(Ljava/lang/Iterable;IIZ)Ljava/util/List; +Lkotlin/collections/CollectionsKt___CollectionsKt$asSequence$$inlined$Sequence$1; +HSPLkotlin/collections/CollectionsKt___CollectionsKt$asSequence$$inlined$Sequence$1;->(Ljava/lang/Iterable;)V +HSPLkotlin/collections/CollectionsKt___CollectionsKt$asSequence$$inlined$Sequence$1;->iterator()Ljava/util/Iterator; +Lkotlin/collections/EmptyIterator; +HSPLkotlin/collections/EmptyIterator;->()V +HSPLkotlin/collections/EmptyIterator;->()V +HSPLkotlin/collections/EmptyIterator;->hasNext()Z +Lkotlin/collections/EmptyList; +HSPLkotlin/collections/EmptyList;->()V +HSPLkotlin/collections/EmptyList;->()V +PLkotlin/collections/EmptyList;->contains(Ljava/lang/Object;)Z +HSPLkotlin/collections/EmptyList;->equals(Ljava/lang/Object;)Z +HSPLkotlin/collections/EmptyList;->getSize()I +HSPLkotlin/collections/EmptyList;->hashCode()I +HSPLkotlin/collections/EmptyList;->isEmpty()Z +HSPLkotlin/collections/EmptyList;->iterator()Ljava/util/Iterator; +HSPLkotlin/collections/EmptyList;->size()I +HSPLkotlin/collections/EmptyList;->toArray()[Ljava/lang/Object; +Lkotlin/collections/EmptyMap; +HSPLkotlin/collections/EmptyMap;->()V +HSPLkotlin/collections/EmptyMap;->()V +HSPLkotlin/collections/EmptyMap;->containsKey(Ljava/lang/Object;)Z +HSPLkotlin/collections/EmptyMap;->entrySet()Ljava/util/Set; +HSPLkotlin/collections/EmptyMap;->get(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlin/collections/EmptyMap;->get(Ljava/lang/Object;)Ljava/lang/Void; +HSPLkotlin/collections/EmptyMap;->getEntries()Ljava/util/Set; +HSPLkotlin/collections/EmptyMap;->getSize()I +HSPLkotlin/collections/EmptyMap;->isEmpty()Z +HSPLkotlin/collections/EmptyMap;->size()I +Lkotlin/collections/EmptySet; +HSPLkotlin/collections/EmptySet;->()V +HSPLkotlin/collections/EmptySet;->()V +HSPLkotlin/collections/EmptySet;->contains(Ljava/lang/Object;)Z +HSPLkotlin/collections/EmptySet;->getSize()I +HSPLkotlin/collections/EmptySet;->isEmpty()Z +HSPLkotlin/collections/EmptySet;->iterator()Ljava/util/Iterator; +HSPLkotlin/collections/EmptySet;->size()I +Lkotlin/collections/Grouping; +Lkotlin/collections/IndexedValue; +HSPLkotlin/collections/IndexedValue;->(ILjava/lang/Object;)V +HSPLkotlin/collections/IndexedValue;->getIndex()I +HSPLkotlin/collections/IndexedValue;->getValue()Ljava/lang/Object; +Lkotlin/collections/IndexingIterable; +HSPLkotlin/collections/IndexingIterable;->(Lkotlin/jvm/functions/Function0;)V +HSPLkotlin/collections/IndexingIterable;->iterator()Ljava/util/Iterator; +Lkotlin/collections/IndexingIterator; +HSPLkotlin/collections/IndexingIterator;->(Ljava/util/Iterator;)V +HSPLkotlin/collections/IndexingIterator;->hasNext()Z +HSPLkotlin/collections/IndexingIterator;->next()Ljava/lang/Object; +HSPLkotlin/collections/IndexingIterator;->next()Lkotlin/collections/IndexedValue; +Lkotlin/collections/IntIterator; +HSPLkotlin/collections/IntIterator;->()V +Lkotlin/collections/MapWithDefault; +Lkotlin/collections/MapsKt; +Lkotlin/collections/MapsKt__MapWithDefaultKt; +HSPLkotlin/collections/MapsKt__MapWithDefaultKt;->getOrImplicitDefaultNullable(Ljava/util/Map;Ljava/lang/Object;)Ljava/lang/Object; +Lkotlin/collections/MapsKt__MapsJVMKt; +HSPLkotlin/collections/MapsKt__MapsJVMKt;->mapCapacity(I)I +HSPLkotlin/collections/MapsKt__MapsJVMKt;->mapOf(Lkotlin/Pair;)Ljava/util/Map; +Lkotlin/collections/MapsKt__MapsKt; +HSPLkotlin/collections/MapsKt__MapsKt;->emptyMap()Ljava/util/Map; +HSPLkotlin/collections/MapsKt__MapsKt;->getValue(Ljava/util/Map;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlin/collections/MapsKt__MapsKt;->hashMapOf([Lkotlin/Pair;)Ljava/util/HashMap; +HSPLkotlin/collections/MapsKt__MapsKt;->mapOf([Lkotlin/Pair;)Ljava/util/Map; +HSPLkotlin/collections/MapsKt__MapsKt;->putAll(Ljava/util/Map;Ljava/lang/Iterable;)V +HSPLkotlin/collections/MapsKt__MapsKt;->putAll(Ljava/util/Map;[Lkotlin/Pair;)V +HSPLkotlin/collections/MapsKt__MapsKt;->toMap(Ljava/lang/Iterable;)Ljava/util/Map; +HSPLkotlin/collections/MapsKt__MapsKt;->toMap(Ljava/lang/Iterable;Ljava/util/Map;)Ljava/util/Map; +HSPLkotlin/collections/MapsKt__MapsKt;->toMap(Ljava/util/Map;)Ljava/util/Map; +HSPLkotlin/collections/MapsKt__MapsKt;->toMap([Lkotlin/Pair;Ljava/util/Map;)Ljava/util/Map; +HSPLkotlin/collections/MapsKt__MapsKt;->toMutableMap(Ljava/util/Map;)Ljava/util/Map; +Lkotlin/collections/MapsKt___MapsJvmKt; +Lkotlin/collections/MapsKt___MapsKt; +HSPLkotlin/collections/MapsKt___MapsKt;->asSequence(Ljava/util/Map;)Lkotlin/sequences/Sequence; +HSPLkotlin/collections/MapsKt___MapsKt;->toList(Ljava/util/Map;)Ljava/util/List; +Lkotlin/collections/SetsKt; +Lkotlin/collections/SetsKt__SetsJVMKt; +HSPLkotlin/collections/SetsKt__SetsJVMKt;->build(Ljava/util/Set;)Ljava/util/Set; +HSPLkotlin/collections/SetsKt__SetsJVMKt;->createSetBuilder()Ljava/util/Set; +HSPLkotlin/collections/SetsKt__SetsJVMKt;->setOf(Ljava/lang/Object;)Ljava/util/Set; +Lkotlin/collections/SetsKt__SetsKt; +HSPLkotlin/collections/SetsKt__SetsKt;->emptySet()Ljava/util/Set; +HSPLkotlin/collections/SetsKt__SetsKt;->mutableSetOf([Ljava/lang/Object;)Ljava/util/Set; +HSPLkotlin/collections/SetsKt__SetsKt;->setOf([Ljava/lang/Object;)Ljava/util/Set; +Lkotlin/collections/SetsKt___SetsKt; +HSPLkotlin/collections/SetsKt___SetsKt;->plus(Ljava/util/Set;Ljava/lang/Iterable;)Ljava/util/Set; +HSPLkotlin/collections/SetsKt___SetsKt;->plus(Ljava/util/Set;Ljava/lang/Object;)Ljava/util/Set; +Lkotlin/collections/SlidingWindowKt; +HSPLkotlin/collections/SlidingWindowKt;->checkWindowSizeStep(II)V +Lkotlin/collections/builders/ListBuilder; +HSPLkotlin/collections/builders/ListBuilder;->()V +HSPLkotlin/collections/builders/ListBuilder;->()V +HSPLkotlin/collections/builders/ListBuilder;->(I)V +HSPLkotlin/collections/builders/ListBuilder;->([Ljava/lang/Object;IIZLkotlin/collections/builders/ListBuilder;Lkotlin/collections/builders/ListBuilder;)V +HSPLkotlin/collections/builders/ListBuilder;->add(Ljava/lang/Object;)Z +HSPLkotlin/collections/builders/ListBuilder;->addAtInternal(ILjava/lang/Object;)V +HSPLkotlin/collections/builders/ListBuilder;->build()Ljava/util/List; +HSPLkotlin/collections/builders/ListBuilder;->checkForComodification()V +HSPLkotlin/collections/builders/ListBuilder;->checkIsMutable()V +HSPLkotlin/collections/builders/ListBuilder;->ensureCapacityInternal(I)V +HSPLkotlin/collections/builders/ListBuilder;->ensureExtraCapacity(I)V +HSPLkotlin/collections/builders/ListBuilder;->insertAtInternal(II)V +HSPLkotlin/collections/builders/ListBuilder;->isEffectivelyReadOnly()Z +HSPLkotlin/collections/builders/ListBuilder;->registerModification()V +HSPLkotlin/collections/builders/ListBuilder;->toArray([Ljava/lang/Object;)[Ljava/lang/Object; +Lkotlin/collections/builders/ListBuilder$Companion; +HSPLkotlin/collections/builders/ListBuilder$Companion;->()V +HSPLkotlin/collections/builders/ListBuilder$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlin/collections/builders/ListBuilderKt; +HSPLkotlin/collections/builders/ListBuilderKt;->arrayOfUninitializedElements(I)[Ljava/lang/Object; +Lkotlin/collections/builders/MapBuilder; +HSPLkotlin/collections/builders/MapBuilder;->()V +HSPLkotlin/collections/builders/MapBuilder;->()V +HSPLkotlin/collections/builders/MapBuilder;->(I)V +HSPLkotlin/collections/builders/MapBuilder;->([Ljava/lang/Object;[Ljava/lang/Object;[I[III)V +HSPLkotlin/collections/builders/MapBuilder;->access$getEmpty$cp()Lkotlin/collections/builders/MapBuilder; +HSPLkotlin/collections/builders/MapBuilder;->access$getKeysArray$p(Lkotlin/collections/builders/MapBuilder;)[Ljava/lang/Object; +HSPLkotlin/collections/builders/MapBuilder;->access$getLength$p(Lkotlin/collections/builders/MapBuilder;)I +HSPLkotlin/collections/builders/MapBuilder;->access$getModCount$p(Lkotlin/collections/builders/MapBuilder;)I +HSPLkotlin/collections/builders/MapBuilder;->access$getPresenceArray$p(Lkotlin/collections/builders/MapBuilder;)[I +HSPLkotlin/collections/builders/MapBuilder;->addKey$kotlin_stdlib(Ljava/lang/Object;)I +HSPLkotlin/collections/builders/MapBuilder;->build()Ljava/util/Map; +HSPLkotlin/collections/builders/MapBuilder;->checkIsMutable$kotlin_stdlib()V +HSPLkotlin/collections/builders/MapBuilder;->getCapacity$kotlin_stdlib()I +HSPLkotlin/collections/builders/MapBuilder;->getHashSize()I +HSPLkotlin/collections/builders/MapBuilder;->getSize()I +HSPLkotlin/collections/builders/MapBuilder;->hash(Ljava/lang/Object;)I +HSPLkotlin/collections/builders/MapBuilder;->isEmpty()Z +HSPLkotlin/collections/builders/MapBuilder;->keysIterator$kotlin_stdlib()Lkotlin/collections/builders/MapBuilder$KeysItr; +HSPLkotlin/collections/builders/MapBuilder;->registerModification()V +HSPLkotlin/collections/builders/MapBuilder;->size()I +Lkotlin/collections/builders/MapBuilder$Companion; +HSPLkotlin/collections/builders/MapBuilder$Companion;->()V +HSPLkotlin/collections/builders/MapBuilder$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlin/collections/builders/MapBuilder$Companion;->access$computeHashSize(Lkotlin/collections/builders/MapBuilder$Companion;I)I +HSPLkotlin/collections/builders/MapBuilder$Companion;->access$computeShift(Lkotlin/collections/builders/MapBuilder$Companion;I)I +HSPLkotlin/collections/builders/MapBuilder$Companion;->computeHashSize(I)I +HSPLkotlin/collections/builders/MapBuilder$Companion;->computeShift(I)I +HSPLkotlin/collections/builders/MapBuilder$Companion;->getEmpty$kotlin_stdlib()Lkotlin/collections/builders/MapBuilder; +Lkotlin/collections/builders/MapBuilder$Itr; +HSPLkotlin/collections/builders/MapBuilder$Itr;->(Lkotlin/collections/builders/MapBuilder;)V +HSPLkotlin/collections/builders/MapBuilder$Itr;->checkForComodification$kotlin_stdlib()V +HSPLkotlin/collections/builders/MapBuilder$Itr;->getIndex$kotlin_stdlib()I +HSPLkotlin/collections/builders/MapBuilder$Itr;->getLastIndex$kotlin_stdlib()I +HSPLkotlin/collections/builders/MapBuilder$Itr;->getMap$kotlin_stdlib()Lkotlin/collections/builders/MapBuilder; +HSPLkotlin/collections/builders/MapBuilder$Itr;->hasNext()Z +HSPLkotlin/collections/builders/MapBuilder$Itr;->initNext$kotlin_stdlib()V +HSPLkotlin/collections/builders/MapBuilder$Itr;->setIndex$kotlin_stdlib(I)V +HSPLkotlin/collections/builders/MapBuilder$Itr;->setLastIndex$kotlin_stdlib(I)V +Lkotlin/collections/builders/MapBuilder$KeysItr; +HSPLkotlin/collections/builders/MapBuilder$KeysItr;->(Lkotlin/collections/builders/MapBuilder;)V +HSPLkotlin/collections/builders/MapBuilder$KeysItr;->next()Ljava/lang/Object; +Lkotlin/collections/builders/SetBuilder; +HSPLkotlin/collections/builders/SetBuilder;->()V +HSPLkotlin/collections/builders/SetBuilder;->()V +HSPLkotlin/collections/builders/SetBuilder;->(Lkotlin/collections/builders/MapBuilder;)V +HSPLkotlin/collections/builders/SetBuilder;->add(Ljava/lang/Object;)Z +HSPLkotlin/collections/builders/SetBuilder;->build()Ljava/util/Set; +HSPLkotlin/collections/builders/SetBuilder;->getSize()I +HSPLkotlin/collections/builders/SetBuilder;->isEmpty()Z +HSPLkotlin/collections/builders/SetBuilder;->iterator()Ljava/util/Iterator; +Lkotlin/collections/builders/SetBuilder$Companion; +HSPLkotlin/collections/builders/SetBuilder$Companion;->()V +HSPLkotlin/collections/builders/SetBuilder$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlin/comparisons/ComparisonsKt; +Lkotlin/comparisons/ComparisonsKt__ComparisonsKt; +HSPLkotlin/comparisons/ComparisonsKt__ComparisonsKt;->$r8$lambda$nq8UCGW90ISdL04-oV8sJ24EEKI([Lkotlin/jvm/functions/Function1;Ljava/lang/Object;Ljava/lang/Object;)I +HSPLkotlin/comparisons/ComparisonsKt__ComparisonsKt;->compareBy$lambda$0$ComparisonsKt__ComparisonsKt([Lkotlin/jvm/functions/Function1;Ljava/lang/Object;Ljava/lang/Object;)I +HSPLkotlin/comparisons/ComparisonsKt__ComparisonsKt;->compareBy([Lkotlin/jvm/functions/Function1;)Ljava/util/Comparator; +HSPLkotlin/comparisons/ComparisonsKt__ComparisonsKt;->compareValues(Ljava/lang/Comparable;Ljava/lang/Comparable;)I +HSPLkotlin/comparisons/ComparisonsKt__ComparisonsKt;->compareValuesByImpl$ComparisonsKt__ComparisonsKt(Ljava/lang/Object;Ljava/lang/Object;[Lkotlin/jvm/functions/Function1;)I +Lkotlin/comparisons/ComparisonsKt__ComparisonsKt$$ExternalSyntheticLambda1; +HSPLkotlin/comparisons/ComparisonsKt__ComparisonsKt$$ExternalSyntheticLambda1;->([Lkotlin/jvm/functions/Function1;)V +HSPLkotlin/comparisons/ComparisonsKt__ComparisonsKt$$ExternalSyntheticLambda1;->compare(Ljava/lang/Object;Ljava/lang/Object;)I +Lkotlin/comparisons/ComparisonsKt___ComparisonsJvmKt; +HSPLkotlin/comparisons/ComparisonsKt___ComparisonsJvmKt;->maxOf(F[F)F +HSPLkotlin/comparisons/ComparisonsKt___ComparisonsJvmKt;->minOf(F[F)F +Lkotlin/comparisons/ComparisonsKt___ComparisonsKt; +Lkotlin/coroutines/AbstractCoroutineContextElement; +HSPLkotlin/coroutines/AbstractCoroutineContextElement;->(Lkotlin/coroutines/CoroutineContext$Key;)V +HSPLkotlin/coroutines/AbstractCoroutineContextElement;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; +HSPLkotlin/coroutines/AbstractCoroutineContextElement;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; +HSPLkotlin/coroutines/AbstractCoroutineContextElement;->getKey()Lkotlin/coroutines/CoroutineContext$Key; +HSPLkotlin/coroutines/AbstractCoroutineContextElement;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext; +HSPLkotlin/coroutines/AbstractCoroutineContextElement;->plus(Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext; +Lkotlin/coroutines/AbstractCoroutineContextKey; +HSPLkotlin/coroutines/AbstractCoroutineContextKey;->(Lkotlin/coroutines/CoroutineContext$Key;Lkotlin/jvm/functions/Function1;)V +Lkotlin/coroutines/CombinedContext; +HSPLkotlin/coroutines/CombinedContext;->(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/CoroutineContext$Element;)V +HSPLkotlin/coroutines/CombinedContext;->contains(Lkotlin/coroutines/CoroutineContext$Element;)Z +HSPLkotlin/coroutines/CombinedContext;->containsAll(Lkotlin/coroutines/CombinedContext;)Z +HSPLkotlin/coroutines/CombinedContext;->equals(Ljava/lang/Object;)Z +HSPLkotlin/coroutines/CombinedContext;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; +HSPLkotlin/coroutines/CombinedContext;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; +HSPLkotlin/coroutines/CombinedContext;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext; +HSPLkotlin/coroutines/CombinedContext;->plus(Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext; +HSPLkotlin/coroutines/CombinedContext;->size()I +Lkotlin/coroutines/Continuation; +Lkotlin/coroutines/ContinuationInterceptor; +HSPLkotlin/coroutines/ContinuationInterceptor;->()V +Lkotlin/coroutines/ContinuationInterceptor$DefaultImpls; +HSPLkotlin/coroutines/ContinuationInterceptor$DefaultImpls;->get(Lkotlin/coroutines/ContinuationInterceptor;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; +HSPLkotlin/coroutines/ContinuationInterceptor$DefaultImpls;->minusKey(Lkotlin/coroutines/ContinuationInterceptor;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext; +Lkotlin/coroutines/ContinuationInterceptor$Key; +HSPLkotlin/coroutines/ContinuationInterceptor$Key;->()V +HSPLkotlin/coroutines/ContinuationInterceptor$Key;->()V +Lkotlin/coroutines/ContinuationKt; +HSPLkotlin/coroutines/ContinuationKt;->createCoroutine(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLkotlin/coroutines/ContinuationKt;->startCoroutine(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V +Lkotlin/coroutines/CoroutineContext; +Lkotlin/coroutines/CoroutineContext$DefaultImpls; +HSPLkotlin/coroutines/CoroutineContext$DefaultImpls;->plus(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext; +Lkotlin/coroutines/CoroutineContext$Element; +Lkotlin/coroutines/CoroutineContext$Element$DefaultImpls; +HSPLkotlin/coroutines/CoroutineContext$Element$DefaultImpls;->fold(Lkotlin/coroutines/CoroutineContext$Element;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; +HSPLkotlin/coroutines/CoroutineContext$Element$DefaultImpls;->get(Lkotlin/coroutines/CoroutineContext$Element;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; +HSPLkotlin/coroutines/CoroutineContext$Element$DefaultImpls;->minusKey(Lkotlin/coroutines/CoroutineContext$Element;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext; +HSPLkotlin/coroutines/CoroutineContext$Element$DefaultImpls;->plus(Lkotlin/coroutines/CoroutineContext$Element;Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext; +Lkotlin/coroutines/CoroutineContext$Key; +Lkotlin/coroutines/CoroutineContext$plus$1; +HSPLkotlin/coroutines/CoroutineContext$plus$1;->()V +HSPLkotlin/coroutines/CoroutineContext$plus$1;->()V +HSPLkotlin/coroutines/CoroutineContext$plus$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlin/coroutines/CoroutineContext$plus$1;->invoke(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/CoroutineContext$Element;)Lkotlin/coroutines/CoroutineContext; +Lkotlin/coroutines/EmptyCoroutineContext; +HSPLkotlin/coroutines/EmptyCoroutineContext;->()V +HSPLkotlin/coroutines/EmptyCoroutineContext;->()V +HSPLkotlin/coroutines/EmptyCoroutineContext;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; +HSPLkotlin/coroutines/EmptyCoroutineContext;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; +HSPLkotlin/coroutines/EmptyCoroutineContext;->plus(Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext; +Lkotlin/coroutines/SafeContinuation; +HSPLkotlin/coroutines/SafeContinuation;->()V +HSPLkotlin/coroutines/SafeContinuation;->(Lkotlin/coroutines/Continuation;Ljava/lang/Object;)V +HSPLkotlin/coroutines/SafeContinuation;->resumeWith(Ljava/lang/Object;)V +Lkotlin/coroutines/SafeContinuation$Companion; +HSPLkotlin/coroutines/SafeContinuation$Companion;->()V +HSPLkotlin/coroutines/SafeContinuation$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlin/coroutines/intrinsics/CoroutineSingletons; +HSPLkotlin/coroutines/intrinsics/CoroutineSingletons;->$values()[Lkotlin/coroutines/intrinsics/CoroutineSingletons; +HSPLkotlin/coroutines/intrinsics/CoroutineSingletons;->()V +HSPLkotlin/coroutines/intrinsics/CoroutineSingletons;->(Ljava/lang/String;I)V +Lkotlin/coroutines/intrinsics/IntrinsicsKt; +Lkotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsJvmKt; +HSPLkotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsJvmKt;->createCoroutineUnintercepted(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLkotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsJvmKt;->intercepted(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +Lkotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsKt; +HSPLkotlin/coroutines/intrinsics/IntrinsicsKt__IntrinsicsKt;->getCOROUTINE_SUSPENDED()Ljava/lang/Object; +Lkotlin/coroutines/jvm/internal/BaseContinuationImpl; +HSPLkotlin/coroutines/jvm/internal/BaseContinuationImpl;->(Lkotlin/coroutines/Continuation;)V +HSPLkotlin/coroutines/jvm/internal/BaseContinuationImpl;->getCallerFrame()Lkotlin/coroutines/jvm/internal/CoroutineStackFrame; +HSPLkotlin/coroutines/jvm/internal/BaseContinuationImpl;->releaseIntercepted()V +HSPLkotlin/coroutines/jvm/internal/BaseContinuationImpl;->resumeWith(Ljava/lang/Object;)V +Lkotlin/coroutines/jvm/internal/Boxing; +HSPLkotlin/coroutines/jvm/internal/Boxing;->boxBoolean(Z)Ljava/lang/Boolean; +HSPLkotlin/coroutines/jvm/internal/Boxing;->boxFloat(F)Ljava/lang/Float; +HSPLkotlin/coroutines/jvm/internal/Boxing;->boxInt(I)Ljava/lang/Integer; +HSPLkotlin/coroutines/jvm/internal/Boxing;->boxLong(J)Ljava/lang/Long; +Lkotlin/coroutines/jvm/internal/CompletedContinuation; +HSPLkotlin/coroutines/jvm/internal/CompletedContinuation;->()V +HSPLkotlin/coroutines/jvm/internal/CompletedContinuation;->()V +Lkotlin/coroutines/jvm/internal/ContinuationImpl; +HSPLkotlin/coroutines/jvm/internal/ContinuationImpl;->(Lkotlin/coroutines/Continuation;)V +HSPLkotlin/coroutines/jvm/internal/ContinuationImpl;->(Lkotlin/coroutines/Continuation;Lkotlin/coroutines/CoroutineContext;)V +HSPLkotlin/coroutines/jvm/internal/ContinuationImpl;->getContext()Lkotlin/coroutines/CoroutineContext; +HSPLkotlin/coroutines/jvm/internal/ContinuationImpl;->intercepted()Lkotlin/coroutines/Continuation; +HSPLkotlin/coroutines/jvm/internal/ContinuationImpl;->releaseIntercepted()V +Lkotlin/coroutines/jvm/internal/CoroutineStackFrame; +Lkotlin/coroutines/jvm/internal/DebugProbesKt; +HSPLkotlin/coroutines/jvm/internal/DebugProbesKt;->probeCoroutineCreated(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLkotlin/coroutines/jvm/internal/DebugProbesKt;->probeCoroutineResumed(Lkotlin/coroutines/Continuation;)V +HSPLkotlin/coroutines/jvm/internal/DebugProbesKt;->probeCoroutineSuspended(Lkotlin/coroutines/Continuation;)V +Lkotlin/coroutines/jvm/internal/RestrictedContinuationImpl; +HSPLkotlin/coroutines/jvm/internal/RestrictedContinuationImpl;->(Lkotlin/coroutines/Continuation;)V +HSPLkotlin/coroutines/jvm/internal/RestrictedContinuationImpl;->getContext()Lkotlin/coroutines/CoroutineContext; +Lkotlin/coroutines/jvm/internal/RestrictedSuspendLambda; +HSPLkotlin/coroutines/jvm/internal/RestrictedSuspendLambda;->(ILkotlin/coroutines/Continuation;)V +Lkotlin/coroutines/jvm/internal/SuspendFunction; +Lkotlin/coroutines/jvm/internal/SuspendLambda; +HSPLkotlin/coroutines/jvm/internal/SuspendLambda;->(ILkotlin/coroutines/Continuation;)V +HSPLkotlin/coroutines/jvm/internal/SuspendLambda;->getArity()I +Lkotlin/enums/EnumEntries; +Lkotlin/enums/EnumEntriesKt; +HSPLkotlin/enums/EnumEntriesKt;->enumEntries([Ljava/lang/Enum;)Lkotlin/enums/EnumEntries; +Lkotlin/enums/EnumEntriesList; +HSPLkotlin/enums/EnumEntriesList;->([Ljava/lang/Enum;)V +HSPLkotlin/enums/EnumEntriesList;->getSize()I +Lkotlin/internal/PlatformImplementations; +HSPLkotlin/internal/PlatformImplementations;->()V +Lkotlin/internal/PlatformImplementationsKt; +HSPLkotlin/internal/PlatformImplementationsKt;->()V +Lkotlin/internal/ProgressionUtilKt; +HSPLkotlin/internal/ProgressionUtilKt;->differenceModulo(III)I +HSPLkotlin/internal/ProgressionUtilKt;->differenceModulo(JJJ)J +HSPLkotlin/internal/ProgressionUtilKt;->getProgressionLastElement(III)I +HSPLkotlin/internal/ProgressionUtilKt;->getProgressionLastElement(JJJ)J +HSPLkotlin/internal/ProgressionUtilKt;->mod(II)I +HSPLkotlin/internal/ProgressionUtilKt;->mod(JJ)J +Lkotlin/internal/jdk7/JDK7PlatformImplementations; +HSPLkotlin/internal/jdk7/JDK7PlatformImplementations;->()V +Lkotlin/internal/jdk8/JDK8PlatformImplementations; +HSPLkotlin/internal/jdk8/JDK8PlatformImplementations;->()V +HSPLkotlin/internal/jdk8/JDK8PlatformImplementations;->defaultPlatformRandom()Lkotlin/random/Random; +HSPLkotlin/internal/jdk8/JDK8PlatformImplementations;->sdkIsNullOrAtLeast(I)Z +Lkotlin/internal/jdk8/JDK8PlatformImplementations$ReflectSdkVersion; +HSPLkotlin/internal/jdk8/JDK8PlatformImplementations$ReflectSdkVersion;->()V +HSPLkotlin/internal/jdk8/JDK8PlatformImplementations$ReflectSdkVersion;->()V +Lkotlin/io/CloseableKt; +HSPLkotlin/io/CloseableKt;->closeFinally(Ljava/io/Closeable;Ljava/lang/Throwable;)V +Lkotlin/io/FileSystemException; +Lkotlin/io/FilesKt; +Lkotlin/io/FilesKt__FilePathComponentsKt; +Lkotlin/io/FilesKt__FileReadWriteKt; +Lkotlin/io/FilesKt__FileTreeWalkKt; +Lkotlin/io/FilesKt__UtilsKt; +HSPLkotlin/io/FilesKt__UtilsKt;->getExtension(Ljava/io/File;)Ljava/lang/String; +Lkotlin/io/TerminateException; +Lkotlin/jvm/JvmClassMappingKt; +HSPLkotlin/jvm/JvmClassMappingKt;->getJavaClass(Lkotlin/reflect/KClass;)Ljava/lang/Class; +HSPLkotlin/jvm/JvmClassMappingKt;->getJavaObjectType(Lkotlin/reflect/KClass;)Ljava/lang/Class; +HSPLkotlin/jvm/JvmClassMappingKt;->getJavaPrimitiveType(Lkotlin/reflect/KClass;)Ljava/lang/Class; +Lkotlin/jvm/functions/Function0; +Lkotlin/jvm/functions/Function1; +Lkotlin/jvm/functions/Function10; +Lkotlin/jvm/functions/Function11; +Lkotlin/jvm/functions/Function12; +Lkotlin/jvm/functions/Function13; +Lkotlin/jvm/functions/Function14; +Lkotlin/jvm/functions/Function15; +Lkotlin/jvm/functions/Function16; +Lkotlin/jvm/functions/Function17; +Lkotlin/jvm/functions/Function18; +Lkotlin/jvm/functions/Function19; +Lkotlin/jvm/functions/Function2; +Lkotlin/jvm/functions/Function20; +Lkotlin/jvm/functions/Function21; +Lkotlin/jvm/functions/Function22; +Lkotlin/jvm/functions/Function3; +Lkotlin/jvm/functions/Function4; +Lkotlin/jvm/functions/Function5; +Lkotlin/jvm/functions/Function6; +Lkotlin/jvm/functions/Function7; +Lkotlin/jvm/functions/Function8; +Lkotlin/jvm/functions/Function9; +Lkotlin/jvm/internal/AdaptedFunctionReference; +HSPLkotlin/jvm/internal/AdaptedFunctionReference;->(ILjava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V +HSPLkotlin/jvm/internal/AdaptedFunctionReference;->(ILjava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V +Lkotlin/jvm/internal/ArrayIterator; +HSPLkotlin/jvm/internal/ArrayIterator;->([Ljava/lang/Object;)V +HSPLkotlin/jvm/internal/ArrayIterator;->hasNext()Z +HSPLkotlin/jvm/internal/ArrayIterator;->next()Ljava/lang/Object; +Lkotlin/jvm/internal/ArrayIteratorKt; +HSPLkotlin/jvm/internal/ArrayIteratorKt;->iterator([Ljava/lang/Object;)Ljava/util/Iterator; +Lkotlin/jvm/internal/BooleanCompanionObject; +HSPLkotlin/jvm/internal/BooleanCompanionObject;->()V +HSPLkotlin/jvm/internal/BooleanCompanionObject;->()V +Lkotlin/jvm/internal/ByteCompanionObject; +HSPLkotlin/jvm/internal/ByteCompanionObject;->()V +HSPLkotlin/jvm/internal/ByteCompanionObject;->()V +Lkotlin/jvm/internal/CallableReference; +HSPLkotlin/jvm/internal/CallableReference;->()V +HSPLkotlin/jvm/internal/CallableReference;->(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;Z)V +HSPLkotlin/jvm/internal/CallableReference;->getBoundReceiver()Ljava/lang/Object; +HSPLkotlin/jvm/internal/CallableReference;->getName()Ljava/lang/String; +HSPLkotlin/jvm/internal/CallableReference;->getOwner()Lkotlin/reflect/KDeclarationContainer; +HSPLkotlin/jvm/internal/CallableReference;->getSignature()Ljava/lang/String; +Lkotlin/jvm/internal/CallableReference$NoReceiver; +HSPLkotlin/jvm/internal/CallableReference$NoReceiver;->()V +HSPLkotlin/jvm/internal/CallableReference$NoReceiver;->()V +HSPLkotlin/jvm/internal/CallableReference$NoReceiver;->access$000()Lkotlin/jvm/internal/CallableReference$NoReceiver; +Lkotlin/jvm/internal/CharCompanionObject; +HSPLkotlin/jvm/internal/CharCompanionObject;->()V +HSPLkotlin/jvm/internal/CharCompanionObject;->()V +Lkotlin/jvm/internal/ClassBasedDeclarationContainer; +Lkotlin/jvm/internal/CollectionToArray; +HSPLkotlin/jvm/internal/CollectionToArray;->()V +HSPLkotlin/jvm/internal/CollectionToArray;->toArray(Ljava/util/Collection;)[Ljava/lang/Object; +Lkotlin/jvm/internal/DefaultConstructorMarker; +Lkotlin/jvm/internal/DoubleCompanionObject; +HSPLkotlin/jvm/internal/DoubleCompanionObject;->()V +HSPLkotlin/jvm/internal/DoubleCompanionObject;->()V +Lkotlin/jvm/internal/FloatCompanionObject; +HSPLkotlin/jvm/internal/FloatCompanionObject;->()V +HSPLkotlin/jvm/internal/FloatCompanionObject;->()V +Lkotlin/jvm/internal/FunctionBase; +Lkotlin/jvm/internal/FunctionReference; +HSPLkotlin/jvm/internal/FunctionReference;->(ILjava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V +HSPLkotlin/jvm/internal/FunctionReference;->equals(Ljava/lang/Object;)Z +HSPLkotlin/jvm/internal/FunctionReference;->getArity()I +Lkotlin/jvm/internal/FunctionReferenceImpl; +HSPLkotlin/jvm/internal/FunctionReferenceImpl;->(ILjava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V +HSPLkotlin/jvm/internal/FunctionReferenceImpl;->(ILjava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V +Lkotlin/jvm/internal/InlineMarker; +HSPLkotlin/jvm/internal/InlineMarker;->mark(I)V +Lkotlin/jvm/internal/IntCompanionObject; +HSPLkotlin/jvm/internal/IntCompanionObject;->()V +HSPLkotlin/jvm/internal/IntCompanionObject;->()V +Lkotlin/jvm/internal/Intrinsics; +HSPLkotlin/jvm/internal/Intrinsics;->areEqual(Ljava/lang/Float;F)Z +HSPLkotlin/jvm/internal/Intrinsics;->checkNotNull(Ljava/lang/Object;)V +HSPLkotlin/jvm/internal/Intrinsics;->checkNotNull(Ljava/lang/Object;Ljava/lang/String;)V +HSPLkotlin/jvm/internal/Intrinsics;->checkNotNullExpressionValue(Ljava/lang/Object;Ljava/lang/String;)V +HSPLkotlin/jvm/internal/Intrinsics;->checkNotNullParameter(Ljava/lang/Object;Ljava/lang/String;)V +HSPLkotlin/jvm/internal/Intrinsics;->compare(II)I +HSPLkotlin/jvm/internal/Intrinsics;->sanitizeStackTrace(Ljava/lang/Throwable;)Ljava/lang/Throwable; +HSPLkotlin/jvm/internal/Intrinsics;->sanitizeStackTrace(Ljava/lang/Throwable;Ljava/lang/String;)Ljava/lang/Throwable; +HSPLkotlin/jvm/internal/Intrinsics;->stringPlus(Ljava/lang/String;Ljava/lang/Object;)Ljava/lang/String; +Lkotlin/jvm/internal/Intrinsics$Kotlin; +Lkotlin/jvm/internal/Lambda; +HSPLkotlin/jvm/internal/Lambda;->(I)V +HSPLkotlin/jvm/internal/Lambda;->getArity()I +Lkotlin/jvm/internal/LongCompanionObject; +HSPLkotlin/jvm/internal/LongCompanionObject;->()V +HSPLkotlin/jvm/internal/LongCompanionObject;->()V +Lkotlin/jvm/internal/MutablePropertyReference; +HSPLkotlin/jvm/internal/MutablePropertyReference;->(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V +Lkotlin/jvm/internal/MutablePropertyReference0; +HSPLkotlin/jvm/internal/MutablePropertyReference0;->(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V +Lkotlin/jvm/internal/MutablePropertyReference0Impl; +HSPLkotlin/jvm/internal/MutablePropertyReference0Impl;->(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V +Lkotlin/jvm/internal/MutablePropertyReference1; +HSPLkotlin/jvm/internal/MutablePropertyReference1;->(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V +Lkotlin/jvm/internal/MutablePropertyReference1Impl; +HSPLkotlin/jvm/internal/MutablePropertyReference1Impl;->(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V +Lkotlin/jvm/internal/PropertyReference; +HSPLkotlin/jvm/internal/PropertyReference;->(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V +HSPLkotlin/jvm/internal/PropertyReference;->equals(Ljava/lang/Object;)Z +Lkotlin/jvm/internal/PropertyReference0; +HSPLkotlin/jvm/internal/PropertyReference0;->(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V +HSPLkotlin/jvm/internal/PropertyReference0;->invoke()Ljava/lang/Object; +Lkotlin/jvm/internal/PropertyReference0Impl; +HSPLkotlin/jvm/internal/PropertyReference0Impl;->(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V +HSPLkotlin/jvm/internal/PropertyReference0Impl;->(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V +Lkotlin/jvm/internal/PropertyReference1; +HSPLkotlin/jvm/internal/PropertyReference1;->(Ljava/lang/Object;Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V +Lkotlin/jvm/internal/PropertyReference1Impl; +HSPLkotlin/jvm/internal/PropertyReference1Impl;->(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V +HSPLkotlin/jvm/internal/PropertyReference1Impl;->(Lkotlin/reflect/KDeclarationContainer;Ljava/lang/String;Ljava/lang/String;)V +Lkotlin/jvm/internal/PropertyReference2; +HSPLkotlin/jvm/internal/PropertyReference2;->(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V +Lkotlin/jvm/internal/PropertyReference2Impl; +HSPLkotlin/jvm/internal/PropertyReference2Impl;->(Ljava/lang/Class;Ljava/lang/String;Ljava/lang/String;I)V +Lkotlin/jvm/internal/Ref$BooleanRef; +HSPLkotlin/jvm/internal/Ref$BooleanRef;->()V +Lkotlin/jvm/internal/Ref$FloatRef; +HSPLkotlin/jvm/internal/Ref$FloatRef;->()V +Lkotlin/jvm/internal/Ref$IntRef; +HSPLkotlin/jvm/internal/Ref$IntRef;->()V +Lkotlin/jvm/internal/Ref$LongRef; +HSPLkotlin/jvm/internal/Ref$LongRef;->()V +Lkotlin/jvm/internal/Ref$ObjectRef; +HSPLkotlin/jvm/internal/Ref$ObjectRef;->()V +Lkotlin/jvm/internal/Reflection; +HSPLkotlin/jvm/internal/Reflection;->()V +HSPLkotlin/jvm/internal/Reflection;->getOrCreateKotlinClass(Ljava/lang/Class;)Lkotlin/reflect/KClass; +HSPLkotlin/jvm/internal/Reflection;->getOrCreateKotlinPackage(Ljava/lang/Class;)Lkotlin/reflect/KDeclarationContainer; +HSPLkotlin/jvm/internal/Reflection;->mutableProperty1(Lkotlin/jvm/internal/MutablePropertyReference1;)Lkotlin/reflect/KMutableProperty1; +HSPLkotlin/jvm/internal/Reflection;->property0(Lkotlin/jvm/internal/PropertyReference0;)Lkotlin/reflect/KProperty0; +HSPLkotlin/jvm/internal/Reflection;->property1(Lkotlin/jvm/internal/PropertyReference1;)Lkotlin/reflect/KProperty1; +HSPLkotlin/jvm/internal/Reflection;->property2(Lkotlin/jvm/internal/PropertyReference2;)Lkotlin/reflect/KProperty2; +Lkotlin/jvm/internal/ReflectionFactory; +HSPLkotlin/jvm/internal/ReflectionFactory;->()V +Lkotlin/jvm/internal/ShortCompanionObject; +HSPLkotlin/jvm/internal/ShortCompanionObject;->()V +HSPLkotlin/jvm/internal/ShortCompanionObject;->()V +Lkotlin/jvm/internal/SpreadBuilder; +HSPLkotlin/jvm/internal/SpreadBuilder;->(I)V +HSPLkotlin/jvm/internal/SpreadBuilder;->add(Ljava/lang/Object;)V +HSPLkotlin/jvm/internal/SpreadBuilder;->addSpread(Ljava/lang/Object;)V +HSPLkotlin/jvm/internal/SpreadBuilder;->size()I +HSPLkotlin/jvm/internal/SpreadBuilder;->toArray([Ljava/lang/Object;)[Ljava/lang/Object; +Lkotlin/jvm/internal/StringCompanionObject; +HSPLkotlin/jvm/internal/StringCompanionObject;->()V +HSPLkotlin/jvm/internal/StringCompanionObject;->()V +Lkotlin/jvm/internal/TypeIntrinsics; +HSPLkotlin/jvm/internal/TypeIntrinsics;->asMutableCollection(Ljava/lang/Object;)Ljava/util/Collection; +HSPLkotlin/jvm/internal/TypeIntrinsics;->asMutableIterable(Ljava/lang/Object;)Ljava/lang/Iterable; +HSPLkotlin/jvm/internal/TypeIntrinsics;->asMutableList(Ljava/lang/Object;)Ljava/util/List; +HSPLkotlin/jvm/internal/TypeIntrinsics;->beforeCheckcastToFunctionOfArity(Ljava/lang/Object;I)Ljava/lang/Object; +HSPLkotlin/jvm/internal/TypeIntrinsics;->castToCollection(Ljava/lang/Object;)Ljava/util/Collection; +HSPLkotlin/jvm/internal/TypeIntrinsics;->castToIterable(Ljava/lang/Object;)Ljava/lang/Iterable; +HSPLkotlin/jvm/internal/TypeIntrinsics;->castToList(Ljava/lang/Object;)Ljava/util/List; +HSPLkotlin/jvm/internal/TypeIntrinsics;->getFunctionArity(Ljava/lang/Object;)I +HSPLkotlin/jvm/internal/TypeIntrinsics;->isFunctionOfArity(Ljava/lang/Object;I)Z +HSPLkotlin/jvm/internal/TypeIntrinsics;->isMutableSet(Ljava/lang/Object;)Z +Lkotlin/jvm/internal/markers/KMappedMarker; +Lkotlin/jvm/internal/markers/KMutableCollection; +Lkotlin/jvm/internal/markers/KMutableIterable; +Lkotlin/jvm/internal/markers/KMutableIterator; +Lkotlin/jvm/internal/markers/KMutableList; +Lkotlin/jvm/internal/markers/KMutableListIterator; +Lkotlin/jvm/internal/markers/KMutableMap; +Lkotlin/jvm/internal/markers/KMutableSet; +Lkotlin/math/MathKt; +Lkotlin/math/MathKt__MathHKt; +Lkotlin/math/MathKt__MathJVMKt; +HSPLkotlin/math/MathKt__MathJVMKt;->getSign(I)I +HSPLkotlin/math/MathKt__MathJVMKt;->getSign(J)I +HSPLkotlin/math/MathKt__MathJVMKt;->roundToInt(F)I +Lkotlin/properties/ReadOnlyProperty; +Lkotlin/random/AbstractPlatformRandom; +HSPLkotlin/random/AbstractPlatformRandom;->()V +HSPLkotlin/random/AbstractPlatformRandom;->nextInt()I +HSPLkotlin/random/AbstractPlatformRandom;->nextInt(I)I +Lkotlin/random/Random; +HSPLkotlin/random/Random;->()V +HSPLkotlin/random/Random;->()V +HSPLkotlin/random/Random;->access$getDefaultRandom$cp()Lkotlin/random/Random; +Lkotlin/random/Random$Default; +HSPLkotlin/random/Random$Default;->()V +HSPLkotlin/random/Random$Default;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlin/random/Random$Default;->nextInt()I +HSPLkotlin/random/Random$Default;->nextInt(I)I +Lkotlin/random/jdk8/PlatformThreadLocalRandom; +HSPLkotlin/random/jdk8/PlatformThreadLocalRandom;->()V +HSPLkotlin/random/jdk8/PlatformThreadLocalRandom;->getImpl()Ljava/util/Random; +Lkotlin/ranges/ClosedFloatRange; +HSPLkotlin/ranges/ClosedFloatRange;->(FF)V +HSPLkotlin/ranges/ClosedFloatRange;->getEndInclusive()Ljava/lang/Comparable; +HSPLkotlin/ranges/ClosedFloatRange;->getEndInclusive()Ljava/lang/Float; +HSPLkotlin/ranges/ClosedFloatRange;->getStart()Ljava/lang/Comparable; +HSPLkotlin/ranges/ClosedFloatRange;->getStart()Ljava/lang/Float; +HSPLkotlin/ranges/ClosedFloatRange;->isEmpty()Z +HSPLkotlin/ranges/ClosedFloatRange;->lessThanOrEquals(FF)Z +HSPLkotlin/ranges/ClosedFloatRange;->lessThanOrEquals(Ljava/lang/Comparable;Ljava/lang/Comparable;)Z +Lkotlin/ranges/ClosedFloatingPointRange; +Lkotlin/ranges/ClosedRange; +Lkotlin/ranges/IntProgression; +HSPLkotlin/ranges/IntProgression;->()V +HSPLkotlin/ranges/IntProgression;->(III)V +HSPLkotlin/ranges/IntProgression;->getFirst()I +HSPLkotlin/ranges/IntProgression;->getLast()I +HSPLkotlin/ranges/IntProgression;->getStep()I +HSPLkotlin/ranges/IntProgression;->iterator()Ljava/util/Iterator; +HSPLkotlin/ranges/IntProgression;->iterator()Lkotlin/collections/IntIterator; +Lkotlin/ranges/IntProgression$Companion; +HSPLkotlin/ranges/IntProgression$Companion;->()V +HSPLkotlin/ranges/IntProgression$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlin/ranges/IntProgressionIterator; +HSPLkotlin/ranges/IntProgressionIterator;->(III)V +HSPLkotlin/ranges/IntProgressionIterator;->hasNext()Z +HSPLkotlin/ranges/IntProgressionIterator;->nextInt()I +Lkotlin/ranges/IntRange; +HSPLkotlin/ranges/IntRange;->()V +HSPLkotlin/ranges/IntRange;->(II)V +HSPLkotlin/ranges/IntRange;->contains(I)Z +Lkotlin/ranges/IntRange$Companion; +HSPLkotlin/ranges/IntRange$Companion;->()V +HSPLkotlin/ranges/IntRange$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlin/ranges/LongProgression; +HSPLkotlin/ranges/LongProgression;->()V +HSPLkotlin/ranges/LongProgression;->(JJJ)V +HSPLkotlin/ranges/LongProgression;->getFirst()J +HSPLkotlin/ranges/LongProgression;->getLast()J +Lkotlin/ranges/LongProgression$Companion; +HSPLkotlin/ranges/LongProgression$Companion;->()V +HSPLkotlin/ranges/LongProgression$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlin/ranges/LongRange; +HSPLkotlin/ranges/LongRange;->()V +HSPLkotlin/ranges/LongRange;->(JJ)V +HSPLkotlin/ranges/LongRange;->contains(J)Z +Lkotlin/ranges/LongRange$Companion; +HSPLkotlin/ranges/LongRange$Companion;->()V +HSPLkotlin/ranges/LongRange$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlin/ranges/OpenEndRange; +Lkotlin/ranges/RangesKt; +Lkotlin/ranges/RangesKt__RangesKt; +HSPLkotlin/ranges/RangesKt__RangesKt;->rangeTo(FF)Lkotlin/ranges/ClosedFloatingPointRange; +Lkotlin/ranges/RangesKt___RangesKt; +HSPLkotlin/ranges/RangesKt___RangesKt;->coerceAtLeast(FF)F +HSPLkotlin/ranges/RangesKt___RangesKt;->coerceAtLeast(II)I +HSPLkotlin/ranges/RangesKt___RangesKt;->coerceAtLeast(JJ)J +HSPLkotlin/ranges/RangesKt___RangesKt;->coerceAtLeast(Ljava/lang/Comparable;Ljava/lang/Comparable;)Ljava/lang/Comparable; +HSPLkotlin/ranges/RangesKt___RangesKt;->coerceAtMost(FF)F +HSPLkotlin/ranges/RangesKt___RangesKt;->coerceAtMost(II)I +HSPLkotlin/ranges/RangesKt___RangesKt;->coerceAtMost(JJ)J +HSPLkotlin/ranges/RangesKt___RangesKt;->coerceIn(DDD)D +HSPLkotlin/ranges/RangesKt___RangesKt;->coerceIn(FFF)F +HSPLkotlin/ranges/RangesKt___RangesKt;->coerceIn(III)I +HSPLkotlin/ranges/RangesKt___RangesKt;->coerceIn(JJJ)J +HSPLkotlin/ranges/RangesKt___RangesKt;->coerceIn(Ljava/lang/Comparable;Lkotlin/ranges/ClosedFloatingPointRange;)Ljava/lang/Comparable; +HSPLkotlin/ranges/RangesKt___RangesKt;->until(II)Lkotlin/ranges/IntRange; +Lkotlin/reflect/KAnnotatedElement; +Lkotlin/reflect/KCallable; +Lkotlin/reflect/KClass; +Lkotlin/reflect/KClassifier; +Lkotlin/reflect/KDeclarationContainer; +Lkotlin/reflect/KFunction; +Lkotlin/reflect/KMutableProperty; +Lkotlin/reflect/KMutableProperty0; +Lkotlin/reflect/KMutableProperty1; +Lkotlin/reflect/KProperty; +Lkotlin/reflect/KProperty0; +Lkotlin/reflect/KProperty1; +Lkotlin/reflect/KProperty2; +Lkotlin/reflect/jvm/internal/CacheByClass; +HSPLkotlin/reflect/jvm/internal/CacheByClass;->()V +Lkotlin/reflect/jvm/internal/CacheByClassKt; +HSPLkotlin/reflect/jvm/internal/CacheByClassKt;->()V +HSPLkotlin/reflect/jvm/internal/CacheByClassKt;->createCache(Lkotlin/jvm/functions/Function1;)Lkotlin/reflect/jvm/internal/CacheByClass; +Lkotlin/reflect/jvm/internal/CachesKt; +HSPLkotlin/reflect/jvm/internal/CachesKt;->()V +HSPLkotlin/reflect/jvm/internal/CachesKt;->getOrCreateKotlinClass(Ljava/lang/Class;)Lkotlin/reflect/jvm/internal/KClassImpl; +HSPLkotlin/reflect/jvm/internal/CachesKt;->getOrCreateKotlinPackage(Ljava/lang/Class;)Lkotlin/reflect/KDeclarationContainer; +Lkotlin/reflect/jvm/internal/CachesKt$CACHE_FOR_BASE_CLASSIFIERS$1; +HSPLkotlin/reflect/jvm/internal/CachesKt$CACHE_FOR_BASE_CLASSIFIERS$1;->()V +HSPLkotlin/reflect/jvm/internal/CachesKt$CACHE_FOR_BASE_CLASSIFIERS$1;->()V +Lkotlin/reflect/jvm/internal/CachesKt$CACHE_FOR_GENERIC_CLASSIFIERS$1; +HSPLkotlin/reflect/jvm/internal/CachesKt$CACHE_FOR_GENERIC_CLASSIFIERS$1;->()V +HSPLkotlin/reflect/jvm/internal/CachesKt$CACHE_FOR_GENERIC_CLASSIFIERS$1;->()V +Lkotlin/reflect/jvm/internal/CachesKt$CACHE_FOR_NULLABLE_BASE_CLASSIFIERS$1; +HSPLkotlin/reflect/jvm/internal/CachesKt$CACHE_FOR_NULLABLE_BASE_CLASSIFIERS$1;->()V +HSPLkotlin/reflect/jvm/internal/CachesKt$CACHE_FOR_NULLABLE_BASE_CLASSIFIERS$1;->()V +Lkotlin/reflect/jvm/internal/CachesKt$K_CLASS_CACHE$1; +HSPLkotlin/reflect/jvm/internal/CachesKt$K_CLASS_CACHE$1;->()V +HSPLkotlin/reflect/jvm/internal/CachesKt$K_CLASS_CACHE$1;->()V +HSPLkotlin/reflect/jvm/internal/CachesKt$K_CLASS_CACHE$1;->invoke(Ljava/lang/Class;)Lkotlin/reflect/jvm/internal/KClassImpl; +HSPLkotlin/reflect/jvm/internal/CachesKt$K_CLASS_CACHE$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlin/reflect/jvm/internal/CachesKt$K_PACKAGE_CACHE$1; +HSPLkotlin/reflect/jvm/internal/CachesKt$K_PACKAGE_CACHE$1;->()V +HSPLkotlin/reflect/jvm/internal/CachesKt$K_PACKAGE_CACHE$1;->()V +HSPLkotlin/reflect/jvm/internal/CachesKt$K_PACKAGE_CACHE$1;->invoke(Ljava/lang/Class;)Lkotlin/reflect/jvm/internal/KPackageImpl; +HSPLkotlin/reflect/jvm/internal/CachesKt$K_PACKAGE_CACHE$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlin/reflect/jvm/internal/ClassValueCache; +HSPLkotlin/reflect/jvm/internal/ClassValueCache;->(Lkotlin/jvm/functions/Function1;)V +HSPLkotlin/reflect/jvm/internal/ClassValueCache;->get(Ljava/lang/Class;)Ljava/lang/Object; +Lkotlin/reflect/jvm/internal/ClassValueCache$$ExternalSyntheticApiModelOutline0; +HSPLkotlin/reflect/jvm/internal/ClassValueCache$$ExternalSyntheticApiModelOutline0;->m(Lkotlin/reflect/jvm/internal/ComputableClassValue;Ljava/lang/Class;)Ljava/lang/Object; +Lkotlin/reflect/jvm/internal/ComputableClassValue; +HSPLkotlin/reflect/jvm/internal/ComputableClassValue;->(Lkotlin/jvm/functions/Function1;)V +HSPLkotlin/reflect/jvm/internal/ComputableClassValue;->computeValue(Ljava/lang/Class;)Ljava/lang/Object; +HSPLkotlin/reflect/jvm/internal/ComputableClassValue;->computeValue(Ljava/lang/Class;)Ljava/lang/ref/SoftReference; +Lkotlin/reflect/jvm/internal/KCallableImpl; +HSPLkotlin/reflect/jvm/internal/KCallableImpl;->()V +Lkotlin/reflect/jvm/internal/KCallableImpl$_absentArguments$1; +HSPLkotlin/reflect/jvm/internal/KCallableImpl$_absentArguments$1;->(Lkotlin/reflect/jvm/internal/KCallableImpl;)V +Lkotlin/reflect/jvm/internal/KCallableImpl$_annotations$1; +HSPLkotlin/reflect/jvm/internal/KCallableImpl$_annotations$1;->(Lkotlin/reflect/jvm/internal/KCallableImpl;)V +Lkotlin/reflect/jvm/internal/KCallableImpl$_parameters$1; +HSPLkotlin/reflect/jvm/internal/KCallableImpl$_parameters$1;->(Lkotlin/reflect/jvm/internal/KCallableImpl;)V +Lkotlin/reflect/jvm/internal/KCallableImpl$_returnType$1; +HSPLkotlin/reflect/jvm/internal/KCallableImpl$_returnType$1;->(Lkotlin/reflect/jvm/internal/KCallableImpl;)V +Lkotlin/reflect/jvm/internal/KCallableImpl$_typeParameters$1; +HSPLkotlin/reflect/jvm/internal/KCallableImpl$_typeParameters$1;->(Lkotlin/reflect/jvm/internal/KCallableImpl;)V +Lkotlin/reflect/jvm/internal/KCallableImpl$parametersNeedMFVCFlattening$1; +HSPLkotlin/reflect/jvm/internal/KCallableImpl$parametersNeedMFVCFlattening$1;->(Lkotlin/reflect/jvm/internal/KCallableImpl;)V +Lkotlin/reflect/jvm/internal/KClassImpl; +HSPLkotlin/reflect/jvm/internal/KClassImpl;->(Ljava/lang/Class;)V +HSPLkotlin/reflect/jvm/internal/KClassImpl;->access$getClassId(Lkotlin/reflect/jvm/internal/KClassImpl;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; +HSPLkotlin/reflect/jvm/internal/KClassImpl;->equals(Ljava/lang/Object;)Z +HSPLkotlin/reflect/jvm/internal/KClassImpl;->getClassId()Lkotlin/reflect/jvm/internal/impl/name/ClassId; +HSPLkotlin/reflect/jvm/internal/KClassImpl;->getJClass()Ljava/lang/Class; +HSPLkotlin/reflect/jvm/internal/KClassImpl;->getSimpleName()Ljava/lang/String; +HSPLkotlin/reflect/jvm/internal/KClassImpl;->hashCode()I +HSPLkotlin/reflect/jvm/internal/KClassImpl;->toString()Ljava/lang/String; +Lkotlin/reflect/jvm/internal/KClassImpl$Data; +HSPLkotlin/reflect/jvm/internal/KClassImpl$Data;->()V +HSPLkotlin/reflect/jvm/internal/KClassImpl$Data;->(Lkotlin/reflect/jvm/internal/KClassImpl;)V +HSPLkotlin/reflect/jvm/internal/KClassImpl$Data;->getSimpleName()Ljava/lang/String; +Lkotlin/reflect/jvm/internal/KClassImpl$Data$allMembers$2; +HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$allMembers$2;->(Lkotlin/reflect/jvm/internal/KClassImpl$Data;)V +Lkotlin/reflect/jvm/internal/KClassImpl$Data$allNonStaticMembers$2; +HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$allNonStaticMembers$2;->(Lkotlin/reflect/jvm/internal/KClassImpl$Data;)V +Lkotlin/reflect/jvm/internal/KClassImpl$Data$allStaticMembers$2; +HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$allStaticMembers$2;->(Lkotlin/reflect/jvm/internal/KClassImpl$Data;)V +Lkotlin/reflect/jvm/internal/KClassImpl$Data$annotations$2; +HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$annotations$2;->(Lkotlin/reflect/jvm/internal/KClassImpl$Data;)V +Lkotlin/reflect/jvm/internal/KClassImpl$Data$constructors$2; +HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$constructors$2;->(Lkotlin/reflect/jvm/internal/KClassImpl;)V +Lkotlin/reflect/jvm/internal/KClassImpl$Data$declaredMembers$2; +HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$declaredMembers$2;->(Lkotlin/reflect/jvm/internal/KClassImpl$Data;)V +Lkotlin/reflect/jvm/internal/KClassImpl$Data$declaredNonStaticMembers$2; +HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$declaredNonStaticMembers$2;->(Lkotlin/reflect/jvm/internal/KClassImpl;)V +Lkotlin/reflect/jvm/internal/KClassImpl$Data$declaredStaticMembers$2; +HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$declaredStaticMembers$2;->(Lkotlin/reflect/jvm/internal/KClassImpl;)V +Lkotlin/reflect/jvm/internal/KClassImpl$Data$descriptor$2; +HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$descriptor$2;->(Lkotlin/reflect/jvm/internal/KClassImpl;)V +Lkotlin/reflect/jvm/internal/KClassImpl$Data$inheritedNonStaticMembers$2; +HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$inheritedNonStaticMembers$2;->(Lkotlin/reflect/jvm/internal/KClassImpl;)V +Lkotlin/reflect/jvm/internal/KClassImpl$Data$inheritedStaticMembers$2; +HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$inheritedStaticMembers$2;->(Lkotlin/reflect/jvm/internal/KClassImpl;)V +Lkotlin/reflect/jvm/internal/KClassImpl$Data$nestedClasses$2; +HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$nestedClasses$2;->(Lkotlin/reflect/jvm/internal/KClassImpl$Data;)V +Lkotlin/reflect/jvm/internal/KClassImpl$Data$objectInstance$2; +HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$objectInstance$2;->(Lkotlin/reflect/jvm/internal/KClassImpl$Data;Lkotlin/reflect/jvm/internal/KClassImpl;)V +Lkotlin/reflect/jvm/internal/KClassImpl$Data$qualifiedName$2; +HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$qualifiedName$2;->(Lkotlin/reflect/jvm/internal/KClassImpl;)V +Lkotlin/reflect/jvm/internal/KClassImpl$Data$sealedSubclasses$2; +HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$sealedSubclasses$2;->(Lkotlin/reflect/jvm/internal/KClassImpl$Data;)V +Lkotlin/reflect/jvm/internal/KClassImpl$Data$simpleName$2; +HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$simpleName$2;->(Lkotlin/reflect/jvm/internal/KClassImpl;Lkotlin/reflect/jvm/internal/KClassImpl$Data;)V +HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$simpleName$2;->invoke()Ljava/lang/Object; +HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$simpleName$2;->invoke()Ljava/lang/String; +Lkotlin/reflect/jvm/internal/KClassImpl$Data$supertypes$2; +HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$supertypes$2;->(Lkotlin/reflect/jvm/internal/KClassImpl$Data;Lkotlin/reflect/jvm/internal/KClassImpl;)V +Lkotlin/reflect/jvm/internal/KClassImpl$Data$typeParameters$2; +HSPLkotlin/reflect/jvm/internal/KClassImpl$Data$typeParameters$2;->(Lkotlin/reflect/jvm/internal/KClassImpl$Data;Lkotlin/reflect/jvm/internal/KClassImpl;)V +Lkotlin/reflect/jvm/internal/KClassImpl$data$1; +HSPLkotlin/reflect/jvm/internal/KClassImpl$data$1;->(Lkotlin/reflect/jvm/internal/KClassImpl;)V +HSPLkotlin/reflect/jvm/internal/KClassImpl$data$1;->invoke()Ljava/lang/Object; +HSPLkotlin/reflect/jvm/internal/KClassImpl$data$1;->invoke()Lkotlin/reflect/jvm/internal/KClassImpl$Data; +Lkotlin/reflect/jvm/internal/KClassifierImpl; +Lkotlin/reflect/jvm/internal/KDeclarationContainerImpl; +HSPLkotlin/reflect/jvm/internal/KDeclarationContainerImpl;->()V +HSPLkotlin/reflect/jvm/internal/KDeclarationContainerImpl;->()V +Lkotlin/reflect/jvm/internal/KDeclarationContainerImpl$Companion; +HSPLkotlin/reflect/jvm/internal/KDeclarationContainerImpl$Companion;->()V +HSPLkotlin/reflect/jvm/internal/KDeclarationContainerImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlin/reflect/jvm/internal/KDeclarationContainerImpl$Data; +HSPLkotlin/reflect/jvm/internal/KDeclarationContainerImpl$Data;->()V +HSPLkotlin/reflect/jvm/internal/KDeclarationContainerImpl$Data;->(Lkotlin/reflect/jvm/internal/KDeclarationContainerImpl;)V +Lkotlin/reflect/jvm/internal/KDeclarationContainerImpl$Data$moduleData$2; +HSPLkotlin/reflect/jvm/internal/KDeclarationContainerImpl$Data$moduleData$2;->(Lkotlin/reflect/jvm/internal/KDeclarationContainerImpl;)V +Lkotlin/reflect/jvm/internal/KMutableProperty1Impl; +HSPLkotlin/reflect/jvm/internal/KMutableProperty1Impl;->(Lkotlin/reflect/jvm/internal/KDeclarationContainerImpl;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)V +Lkotlin/reflect/jvm/internal/KMutableProperty1Impl$_setter$1; +HSPLkotlin/reflect/jvm/internal/KMutableProperty1Impl$_setter$1;->(Lkotlin/reflect/jvm/internal/KMutableProperty1Impl;)V +Lkotlin/reflect/jvm/internal/KPackageImpl; +HSPLkotlin/reflect/jvm/internal/KPackageImpl;->(Ljava/lang/Class;)V +Lkotlin/reflect/jvm/internal/KPackageImpl$data$1; +HSPLkotlin/reflect/jvm/internal/KPackageImpl$data$1;->(Lkotlin/reflect/jvm/internal/KPackageImpl;)V +Lkotlin/reflect/jvm/internal/KProperty0Impl; +HSPLkotlin/reflect/jvm/internal/KProperty0Impl;->(Lkotlin/reflect/jvm/internal/KDeclarationContainerImpl;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)V +Lkotlin/reflect/jvm/internal/KProperty0Impl$_getter$1; +HSPLkotlin/reflect/jvm/internal/KProperty0Impl$_getter$1;->(Lkotlin/reflect/jvm/internal/KProperty0Impl;)V +Lkotlin/reflect/jvm/internal/KProperty0Impl$delegateValue$1; +HSPLkotlin/reflect/jvm/internal/KProperty0Impl$delegateValue$1;->(Lkotlin/reflect/jvm/internal/KProperty0Impl;)V +Lkotlin/reflect/jvm/internal/KProperty1Impl; +HSPLkotlin/reflect/jvm/internal/KProperty1Impl;->(Lkotlin/reflect/jvm/internal/KDeclarationContainerImpl;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)V +Lkotlin/reflect/jvm/internal/KProperty1Impl$_getter$1; +HSPLkotlin/reflect/jvm/internal/KProperty1Impl$_getter$1;->(Lkotlin/reflect/jvm/internal/KProperty1Impl;)V +Lkotlin/reflect/jvm/internal/KProperty1Impl$delegateSource$1; +HSPLkotlin/reflect/jvm/internal/KProperty1Impl$delegateSource$1;->(Lkotlin/reflect/jvm/internal/KProperty1Impl;)V +Lkotlin/reflect/jvm/internal/KProperty2Impl; +HSPLkotlin/reflect/jvm/internal/KProperty2Impl;->(Lkotlin/reflect/jvm/internal/KDeclarationContainerImpl;Ljava/lang/String;Ljava/lang/String;)V +Lkotlin/reflect/jvm/internal/KProperty2Impl$_getter$1; +HSPLkotlin/reflect/jvm/internal/KProperty2Impl$_getter$1;->(Lkotlin/reflect/jvm/internal/KProperty2Impl;)V +Lkotlin/reflect/jvm/internal/KProperty2Impl$delegateSource$1; +HSPLkotlin/reflect/jvm/internal/KProperty2Impl$delegateSource$1;->(Lkotlin/reflect/jvm/internal/KProperty2Impl;)V +Lkotlin/reflect/jvm/internal/KPropertyImpl; +HSPLkotlin/reflect/jvm/internal/KPropertyImpl;->()V +HSPLkotlin/reflect/jvm/internal/KPropertyImpl;->(Lkotlin/reflect/jvm/internal/KDeclarationContainerImpl;Ljava/lang/String;Ljava/lang/String;Ljava/lang/Object;)V +HSPLkotlin/reflect/jvm/internal/KPropertyImpl;->(Lkotlin/reflect/jvm/internal/KDeclarationContainerImpl;Ljava/lang/String;Ljava/lang/String;Lkotlin/reflect/jvm/internal/impl/descriptors/PropertyDescriptor;Ljava/lang/Object;)V +HSPLkotlin/reflect/jvm/internal/KPropertyImpl;->getName()Ljava/lang/String; +Lkotlin/reflect/jvm/internal/KPropertyImpl$Companion; +HSPLkotlin/reflect/jvm/internal/KPropertyImpl$Companion;->()V +HSPLkotlin/reflect/jvm/internal/KPropertyImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlin/reflect/jvm/internal/KPropertyImpl$_descriptor$1; +HSPLkotlin/reflect/jvm/internal/KPropertyImpl$_descriptor$1;->(Lkotlin/reflect/jvm/internal/KPropertyImpl;)V +Lkotlin/reflect/jvm/internal/KPropertyImpl$_javaField$1; +HSPLkotlin/reflect/jvm/internal/KPropertyImpl$_javaField$1;->(Lkotlin/reflect/jvm/internal/KPropertyImpl;)V +Lkotlin/reflect/jvm/internal/KTypeParameterOwnerImpl; +Lkotlin/reflect/jvm/internal/ReflectProperties; +HSPLkotlin/reflect/jvm/internal/ReflectProperties;->lazy(Lkotlin/jvm/functions/Function0;)Lkotlin/reflect/jvm/internal/ReflectProperties$LazyVal; +HSPLkotlin/reflect/jvm/internal/ReflectProperties;->lazySoft(Ljava/lang/Object;Lkotlin/jvm/functions/Function0;)Lkotlin/reflect/jvm/internal/ReflectProperties$LazySoftVal; +HSPLkotlin/reflect/jvm/internal/ReflectProperties;->lazySoft(Lkotlin/jvm/functions/Function0;)Lkotlin/reflect/jvm/internal/ReflectProperties$LazySoftVal; +Lkotlin/reflect/jvm/internal/ReflectProperties$LazySoftVal; +HSPLkotlin/reflect/jvm/internal/ReflectProperties$LazySoftVal;->(Ljava/lang/Object;Lkotlin/jvm/functions/Function0;)V +HSPLkotlin/reflect/jvm/internal/ReflectProperties$LazySoftVal;->invoke()Ljava/lang/Object; +Lkotlin/reflect/jvm/internal/ReflectProperties$LazyVal; +HSPLkotlin/reflect/jvm/internal/ReflectProperties$LazyVal;->(Lkotlin/jvm/functions/Function0;)V +HSPLkotlin/reflect/jvm/internal/ReflectProperties$LazyVal;->invoke()Ljava/lang/Object; +Lkotlin/reflect/jvm/internal/ReflectProperties$Val; +HSPLkotlin/reflect/jvm/internal/ReflectProperties$Val;->()V +HSPLkotlin/reflect/jvm/internal/ReflectProperties$Val;->()V +HSPLkotlin/reflect/jvm/internal/ReflectProperties$Val;->escape(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlin/reflect/jvm/internal/ReflectProperties$Val;->getValue(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lkotlin/reflect/jvm/internal/ReflectProperties$Val$1; +HSPLkotlin/reflect/jvm/internal/ReflectProperties$Val$1;->()V +Lkotlin/reflect/jvm/internal/ReflectionFactoryImpl; +HSPLkotlin/reflect/jvm/internal/ReflectionFactoryImpl;->()V +HSPLkotlin/reflect/jvm/internal/ReflectionFactoryImpl;->getOrCreateKotlinClass(Ljava/lang/Class;)Lkotlin/reflect/KClass; +HSPLkotlin/reflect/jvm/internal/ReflectionFactoryImpl;->getOrCreateKotlinPackage(Ljava/lang/Class;Ljava/lang/String;)Lkotlin/reflect/KDeclarationContainer; +HSPLkotlin/reflect/jvm/internal/ReflectionFactoryImpl;->getOwner(Lkotlin/jvm/internal/CallableReference;)Lkotlin/reflect/jvm/internal/KDeclarationContainerImpl; +HSPLkotlin/reflect/jvm/internal/ReflectionFactoryImpl;->mutableProperty1(Lkotlin/jvm/internal/MutablePropertyReference1;)Lkotlin/reflect/KMutableProperty1; +HSPLkotlin/reflect/jvm/internal/ReflectionFactoryImpl;->property0(Lkotlin/jvm/internal/PropertyReference0;)Lkotlin/reflect/KProperty0; +HSPLkotlin/reflect/jvm/internal/ReflectionFactoryImpl;->property1(Lkotlin/jvm/internal/PropertyReference1;)Lkotlin/reflect/KProperty1; +HSPLkotlin/reflect/jvm/internal/ReflectionFactoryImpl;->property2(Lkotlin/jvm/internal/PropertyReference2;)Lkotlin/reflect/KProperty2; +Lkotlin/reflect/jvm/internal/RuntimeTypeMapper; +HSPLkotlin/reflect/jvm/internal/RuntimeTypeMapper;->()V +HSPLkotlin/reflect/jvm/internal/RuntimeTypeMapper;->()V +HSPLkotlin/reflect/jvm/internal/RuntimeTypeMapper;->getPrimitiveType(Ljava/lang/Class;)Lkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType; +HSPLkotlin/reflect/jvm/internal/RuntimeTypeMapper;->mapJvmClassToKotlinClassId(Ljava/lang/Class;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; +Lkotlin/reflect/jvm/internal/impl/builtins/CompanionObjectMapping; +HSPLkotlin/reflect/jvm/internal/impl/builtins/CompanionObjectMapping;->()V +HSPLkotlin/reflect/jvm/internal/impl/builtins/CompanionObjectMapping;->()V +HSPLkotlin/reflect/jvm/internal/impl/builtins/CompanionObjectMapping;->allClassesWithIntrinsicCompanions()Ljava/util/Set; +Lkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType; +HSPLkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType;->$values()[Lkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType; +HSPLkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType;->()V +HSPLkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType;->(Ljava/lang/String;ILjava/lang/String;)V +HSPLkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType;->getArrayTypeName()Lkotlin/reflect/jvm/internal/impl/name/Name; +HSPLkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType;->getTypeName()Lkotlin/reflect/jvm/internal/impl/name/Name; +HSPLkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType;->values()[Lkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType; +Lkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType$Companion; +HSPLkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType$Companion;->()V +HSPLkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType$arrayTypeFqName$2; +HSPLkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType$arrayTypeFqName$2;->(Lkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType;)V +Lkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType$typeFqName$2; +HSPLkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType$typeFqName$2;->(Lkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType;)V +Lkotlin/reflect/jvm/internal/impl/builtins/StandardNames; +HSPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames;->()V +HSPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames;->()V +HSPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames;->getFunctionClassId(I)Lkotlin/reflect/jvm/internal/impl/name/ClassId; +HSPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames;->getFunctionName(I)Ljava/lang/String; +HSPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames;->getPrimitiveFqName(Lkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType;)Lkotlin/reflect/jvm/internal/impl/name/FqName; +Lkotlin/reflect/jvm/internal/impl/builtins/StandardNames$FqNames; +HSPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames$FqNames;->()V +HSPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames$FqNames;->()V +HSPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames$FqNames;->annotationName(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/FqName; +HSPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames$FqNames;->collectionsFqName(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/FqName; +HSPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames$FqNames;->fqName(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/FqName; +HSPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames$FqNames;->fqNameUnsafe(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe; +HSPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames$FqNames;->internalName(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/FqName; +HSPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames$FqNames;->rangesFqName(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe; +HSPLkotlin/reflect/jvm/internal/impl/builtins/StandardNames$FqNames;->reflect(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe; +Lkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind; +HSPLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind;->(Lkotlin/reflect/jvm/internal/impl/name/FqName;Ljava/lang/String;ZLkotlin/reflect/jvm/internal/impl/name/ClassId;)V +HSPLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind;->getClassNamePrefix()Ljava/lang/String; +HSPLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind;->getPackageFqName()Lkotlin/reflect/jvm/internal/impl/name/FqName; +Lkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$Function; +HSPLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$Function;->()V +HSPLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$Function;->()V +Lkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$KFunction; +HSPLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$KFunction;->()V +HSPLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$KFunction;->()V +Lkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$KSuspendFunction; +HSPLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$KSuspendFunction;->()V +HSPLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$KSuspendFunction;->()V +Lkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$SuspendFunction; +HSPLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$SuspendFunction;->()V +HSPLkotlin/reflect/jvm/internal/impl/builtins/functions/FunctionTypeKind$SuspendFunction;->()V +Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap; +HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap;->()V +HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap;->()V +HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap;->add(Lkotlin/reflect/jvm/internal/impl/name/ClassId;Lkotlin/reflect/jvm/internal/impl/name/ClassId;)V +HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap;->addJavaToKotlin(Lkotlin/reflect/jvm/internal/impl/name/ClassId;Lkotlin/reflect/jvm/internal/impl/name/ClassId;)V +HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap;->addKotlinToJava(Lkotlin/reflect/jvm/internal/impl/name/FqName;Lkotlin/reflect/jvm/internal/impl/name/ClassId;)V +HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap;->addMapping(Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap$PlatformMutabilityMapping;)V +HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap;->addTopLevel(Ljava/lang/Class;Lkotlin/reflect/jvm/internal/impl/name/FqName;)V +HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap;->addTopLevel(Ljava/lang/Class;Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;)V +HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap;->classId(Ljava/lang/Class;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; +HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap;->mapJavaToKotlin(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; +Lkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap$PlatformMutabilityMapping; +HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap$PlatformMutabilityMapping;->(Lkotlin/reflect/jvm/internal/impl/name/ClassId;Lkotlin/reflect/jvm/internal/impl/name/ClassId;Lkotlin/reflect/jvm/internal/impl/name/ClassId;)V +HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap$PlatformMutabilityMapping;->component1()Lkotlin/reflect/jvm/internal/impl/name/ClassId; +HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap$PlatformMutabilityMapping;->component2()Lkotlin/reflect/jvm/internal/impl/name/ClassId; +HSPLkotlin/reflect/jvm/internal/impl/builtins/jvm/JavaToKotlinClassMap$PlatformMutabilityMapping;->component3()Lkotlin/reflect/jvm/internal/impl/name/ClassId; +Lkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectClassUtilKt; +HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectClassUtilKt;->()V +HSPLkotlin/reflect/jvm/internal/impl/descriptors/runtime/structure/ReflectClassUtilKt;->getClassId(Ljava/lang/Class;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; +Lkotlin/reflect/jvm/internal/impl/name/ClassId; +HSPLkotlin/reflect/jvm/internal/impl/name/ClassId;->()V +HSPLkotlin/reflect/jvm/internal/impl/name/ClassId;->(Lkotlin/reflect/jvm/internal/impl/name/FqName;Lkotlin/reflect/jvm/internal/impl/name/FqName;Z)V +HSPLkotlin/reflect/jvm/internal/impl/name/ClassId;->(Lkotlin/reflect/jvm/internal/impl/name/FqName;Lkotlin/reflect/jvm/internal/impl/name/Name;)V +HSPLkotlin/reflect/jvm/internal/impl/name/ClassId;->asSingleFqName()Lkotlin/reflect/jvm/internal/impl/name/FqName; +HSPLkotlin/reflect/jvm/internal/impl/name/ClassId;->createNestedClassId(Lkotlin/reflect/jvm/internal/impl/name/Name;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; +HSPLkotlin/reflect/jvm/internal/impl/name/ClassId;->getPackageFqName()Lkotlin/reflect/jvm/internal/impl/name/FqName; +HSPLkotlin/reflect/jvm/internal/impl/name/ClassId;->getRelativeClassName()Lkotlin/reflect/jvm/internal/impl/name/FqName; +HSPLkotlin/reflect/jvm/internal/impl/name/ClassId;->getShortClassName()Lkotlin/reflect/jvm/internal/impl/name/Name; +HSPLkotlin/reflect/jvm/internal/impl/name/ClassId;->hashCode()I +HSPLkotlin/reflect/jvm/internal/impl/name/ClassId;->isLocal()Z +HSPLkotlin/reflect/jvm/internal/impl/name/ClassId;->topLevel(Lkotlin/reflect/jvm/internal/impl/name/FqName;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; +Lkotlin/reflect/jvm/internal/impl/name/FqName; +HSPLkotlin/reflect/jvm/internal/impl/name/FqName;->()V +HSPLkotlin/reflect/jvm/internal/impl/name/FqName;->(Ljava/lang/String;)V +HSPLkotlin/reflect/jvm/internal/impl/name/FqName;->(Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;)V +HSPLkotlin/reflect/jvm/internal/impl/name/FqName;->(Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;Lkotlin/reflect/jvm/internal/impl/name/FqName;)V +HSPLkotlin/reflect/jvm/internal/impl/name/FqName;->asString()Ljava/lang/String; +HSPLkotlin/reflect/jvm/internal/impl/name/FqName;->child(Lkotlin/reflect/jvm/internal/impl/name/Name;)Lkotlin/reflect/jvm/internal/impl/name/FqName; +HSPLkotlin/reflect/jvm/internal/impl/name/FqName;->equals(Ljava/lang/Object;)Z +HSPLkotlin/reflect/jvm/internal/impl/name/FqName;->hashCode()I +HSPLkotlin/reflect/jvm/internal/impl/name/FqName;->isRoot()Z +HSPLkotlin/reflect/jvm/internal/impl/name/FqName;->parent()Lkotlin/reflect/jvm/internal/impl/name/FqName; +HSPLkotlin/reflect/jvm/internal/impl/name/FqName;->shortName()Lkotlin/reflect/jvm/internal/impl/name/Name; +HSPLkotlin/reflect/jvm/internal/impl/name/FqName;->toString()Ljava/lang/String; +HSPLkotlin/reflect/jvm/internal/impl/name/FqName;->toUnsafe()Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe; +HSPLkotlin/reflect/jvm/internal/impl/name/FqName;->topLevel(Lkotlin/reflect/jvm/internal/impl/name/Name;)Lkotlin/reflect/jvm/internal/impl/name/FqName; +Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe; +HSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->()V +HSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->(Ljava/lang/String;)V +HSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->(Ljava/lang/String;Lkotlin/reflect/jvm/internal/impl/name/FqName;)V +HSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->(Ljava/lang/String;Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;Lkotlin/reflect/jvm/internal/impl/name/Name;)V +HSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->asString()Ljava/lang/String; +HSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->child(Lkotlin/reflect/jvm/internal/impl/name/Name;)Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe; +HSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->compute()V +HSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->equals(Ljava/lang/Object;)Z +HSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->hashCode()I +HSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->isRoot()Z +HSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->parent()Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe; +HSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->shortName()Lkotlin/reflect/jvm/internal/impl/name/Name; +HSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->toSafe()Lkotlin/reflect/jvm/internal/impl/name/FqName; +HSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->toString()Ljava/lang/String; +HSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe;->topLevel(Lkotlin/reflect/jvm/internal/impl/name/Name;)Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe; +Lkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe$1; +HSPLkotlin/reflect/jvm/internal/impl/name/FqNameUnsafe$1;->()V +Lkotlin/reflect/jvm/internal/impl/name/FqNamesUtilKt; +HSPLkotlin/reflect/jvm/internal/impl/name/FqNamesUtilKt;->isSubpackageOf(Ljava/lang/String;Ljava/lang/String;)Z +HSPLkotlin/reflect/jvm/internal/impl/name/FqNamesUtilKt;->isSubpackageOf(Lkotlin/reflect/jvm/internal/impl/name/FqName;Lkotlin/reflect/jvm/internal/impl/name/FqName;)Z +HSPLkotlin/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; +Lkotlin/reflect/jvm/internal/impl/name/Name; +HSPLkotlin/reflect/jvm/internal/impl/name/Name;->(Ljava/lang/String;Z)V +HSPLkotlin/reflect/jvm/internal/impl/name/Name;->asString()Ljava/lang/String; +HSPLkotlin/reflect/jvm/internal/impl/name/Name;->getIdentifier()Ljava/lang/String; +HSPLkotlin/reflect/jvm/internal/impl/name/Name;->guessByFirstCharacter(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/Name; +HSPLkotlin/reflect/jvm/internal/impl/name/Name;->hashCode()I +HSPLkotlin/reflect/jvm/internal/impl/name/Name;->identifier(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/Name; +HSPLkotlin/reflect/jvm/internal/impl/name/Name;->special(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/Name; +Lkotlin/reflect/jvm/internal/impl/name/SpecialNames; +HSPLkotlin/reflect/jvm/internal/impl/name/SpecialNames;->()V +HSPLkotlin/reflect/jvm/internal/impl/name/SpecialNames;->()V +Lkotlin/reflect/jvm/internal/impl/name/StandardClassIds; +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->()V +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->()V +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->getArray()Lkotlin/reflect/jvm/internal/impl/name/ClassId; +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->getBASE_ANNOTATION_PACKAGE()Lkotlin/reflect/jvm/internal/impl/name/FqName; +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->getBASE_COLLECTIONS_PACKAGE()Lkotlin/reflect/jvm/internal/impl/name/FqName; +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->getBASE_COROUTINES_PACKAGE()Lkotlin/reflect/jvm/internal/impl/name/FqName; +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->getBASE_ENUMS_PACKAGE()Lkotlin/reflect/jvm/internal/impl/name/FqName; +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->getBASE_KOTLIN_PACKAGE()Lkotlin/reflect/jvm/internal/impl/name/FqName; +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->getBASE_RANGES_PACKAGE()Lkotlin/reflect/jvm/internal/impl/name/FqName; +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->getBASE_REFLECT_PACKAGE()Lkotlin/reflect/jvm/internal/impl/name/FqName; +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->getKClass()Lkotlin/reflect/jvm/internal/impl/name/ClassId; +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIds;->getKFunction()Lkotlin/reflect/jvm/internal/impl/name/ClassId; +Lkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt; +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->()V +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->access$annotationId(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->access$baseId(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->access$collectionsId(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->access$coroutinesId(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->access$enumsId(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->access$inverseMap(Ljava/util/Map;)Ljava/util/Map; +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->access$primitiveArrayId(Lkotlin/reflect/jvm/internal/impl/name/Name;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->access$rangesId(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->access$reflectId(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->access$unsignedId(Lkotlin/reflect/jvm/internal/impl/name/ClassId;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->annotationId(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->baseId(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->collectionsId(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->coroutinesId(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->enumsId(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->inverseMap(Ljava/util/Map;)Ljava/util/Map; +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->primitiveArrayId(Lkotlin/reflect/jvm/internal/impl/name/Name;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->rangesId(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->reflectId(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; +HSPLkotlin/reflect/jvm/internal/impl/name/StandardClassIdsKt;->unsignedId(Lkotlin/reflect/jvm/internal/impl/name/ClassId;)Lkotlin/reflect/jvm/internal/impl/name/ClassId; +Lkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType; +HSPLkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType;->()V +HSPLkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType;->(Ljava/lang/String;ILkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V +HSPLkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType;->get(Ljava/lang/String;)Lkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType; +HSPLkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType;->getDesc()Ljava/lang/String; +HSPLkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType;->getJavaKeywordName()Ljava/lang/String; +HSPLkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType;->getPrimitiveType()Lkotlin/reflect/jvm/internal/impl/builtins/PrimitiveType; +HSPLkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType;->getWrapperFqName()Lkotlin/reflect/jvm/internal/impl/name/FqName; +HSPLkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType;->values()[Lkotlin/reflect/jvm/internal/impl/resolve/jvm/JvmPrimitiveType; +Lkotlin/reflect/jvm/internal/impl/utils/CollectionsKt; +HSPLkotlin/reflect/jvm/internal/impl/utils/CollectionsKt;->capacity(I)I +HSPLkotlin/reflect/jvm/internal/impl/utils/CollectionsKt;->newHashMapWithExpectedSize(I)Ljava/util/HashMap; +HSPLkotlin/reflect/jvm/internal/impl/utils/CollectionsKt;->newHashSetWithExpectedSize(I)Ljava/util/HashSet; +Lkotlin/sequences/DropTakeSequence; +Lkotlin/sequences/EmptySequence; +HSPLkotlin/sequences/EmptySequence;->()V +HSPLkotlin/sequences/EmptySequence;->()V +HSPLkotlin/sequences/EmptySequence;->iterator()Ljava/util/Iterator; +Lkotlin/sequences/FilteringSequence; +HSPLkotlin/sequences/FilteringSequence;->(Lkotlin/sequences/Sequence;ZLkotlin/jvm/functions/Function1;)V +HSPLkotlin/sequences/FilteringSequence;->access$getPredicate$p(Lkotlin/sequences/FilteringSequence;)Lkotlin/jvm/functions/Function1; +HSPLkotlin/sequences/FilteringSequence;->access$getSendWhen$p(Lkotlin/sequences/FilteringSequence;)Z +HSPLkotlin/sequences/FilteringSequence;->access$getSequence$p(Lkotlin/sequences/FilteringSequence;)Lkotlin/sequences/Sequence; +HSPLkotlin/sequences/FilteringSequence;->iterator()Ljava/util/Iterator; +Lkotlin/sequences/FilteringSequence$iterator$1; +HSPLkotlin/sequences/FilteringSequence$iterator$1;->(Lkotlin/sequences/FilteringSequence;)V +HSPLkotlin/sequences/FilteringSequence$iterator$1;->calcNext()V +HSPLkotlin/sequences/FilteringSequence$iterator$1;->hasNext()Z +HSPLkotlin/sequences/FilteringSequence$iterator$1;->next()Ljava/lang/Object; +Lkotlin/sequences/FlatteningSequence; +HSPLkotlin/sequences/FlatteningSequence;->(Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function1;)V +HSPLkotlin/sequences/FlatteningSequence;->access$getIterator$p(Lkotlin/sequences/FlatteningSequence;)Lkotlin/jvm/functions/Function1; +HSPLkotlin/sequences/FlatteningSequence;->access$getSequence$p(Lkotlin/sequences/FlatteningSequence;)Lkotlin/sequences/Sequence; +HSPLkotlin/sequences/FlatteningSequence;->access$getTransformer$p(Lkotlin/sequences/FlatteningSequence;)Lkotlin/jvm/functions/Function1; +HSPLkotlin/sequences/FlatteningSequence;->iterator()Ljava/util/Iterator; +Lkotlin/sequences/FlatteningSequence$iterator$1; +HSPLkotlin/sequences/FlatteningSequence$iterator$1;->(Lkotlin/sequences/FlatteningSequence;)V +HSPLkotlin/sequences/FlatteningSequence$iterator$1;->ensureItemIterator()Z +HSPLkotlin/sequences/FlatteningSequence$iterator$1;->hasNext()Z +HSPLkotlin/sequences/FlatteningSequence$iterator$1;->next()Ljava/lang/Object; +Lkotlin/sequences/GeneratorSequence; +HSPLkotlin/sequences/GeneratorSequence;->(Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function1;)V +HSPLkotlin/sequences/GeneratorSequence;->access$getGetInitialValue$p(Lkotlin/sequences/GeneratorSequence;)Lkotlin/jvm/functions/Function0; +HSPLkotlin/sequences/GeneratorSequence;->access$getGetNextValue$p(Lkotlin/sequences/GeneratorSequence;)Lkotlin/jvm/functions/Function1; +HSPLkotlin/sequences/GeneratorSequence;->iterator()Ljava/util/Iterator; +Lkotlin/sequences/GeneratorSequence$iterator$1; +HSPLkotlin/sequences/GeneratorSequence$iterator$1;->(Lkotlin/sequences/GeneratorSequence;)V +HSPLkotlin/sequences/GeneratorSequence$iterator$1;->calcNext()V +HSPLkotlin/sequences/GeneratorSequence$iterator$1;->hasNext()Z +HSPLkotlin/sequences/GeneratorSequence$iterator$1;->next()Ljava/lang/Object; +Lkotlin/sequences/Sequence; +Lkotlin/sequences/SequenceBuilderIterator; +HSPLkotlin/sequences/SequenceBuilderIterator;->()V +HSPLkotlin/sequences/SequenceBuilderIterator;->getContext()Lkotlin/coroutines/CoroutineContext; +HSPLkotlin/sequences/SequenceBuilderIterator;->hasNext()Z +HSPLkotlin/sequences/SequenceBuilderIterator;->next()Ljava/lang/Object; +HSPLkotlin/sequences/SequenceBuilderIterator;->resumeWith(Ljava/lang/Object;)V +HSPLkotlin/sequences/SequenceBuilderIterator;->setNextStep(Lkotlin/coroutines/Continuation;)V +HSPLkotlin/sequences/SequenceBuilderIterator;->yield(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlin/sequences/SequenceScope; +HSPLkotlin/sequences/SequenceScope;->()V +Lkotlin/sequences/SequencesKt; +Lkotlin/sequences/SequencesKt__SequenceBuilderKt; +HSPLkotlin/sequences/SequencesKt__SequenceBuilderKt;->iterator(Lkotlin/jvm/functions/Function2;)Ljava/util/Iterator; +HSPLkotlin/sequences/SequencesKt__SequenceBuilderKt;->sequence(Lkotlin/jvm/functions/Function2;)Lkotlin/sequences/Sequence; +Lkotlin/sequences/SequencesKt__SequenceBuilderKt$sequence$$inlined$Sequence$1; +HSPLkotlin/sequences/SequencesKt__SequenceBuilderKt$sequence$$inlined$Sequence$1;->(Lkotlin/jvm/functions/Function2;)V +HSPLkotlin/sequences/SequencesKt__SequenceBuilderKt$sequence$$inlined$Sequence$1;->iterator()Ljava/util/Iterator; +Lkotlin/sequences/SequencesKt__SequencesJVMKt; +Lkotlin/sequences/SequencesKt__SequencesKt; +HSPLkotlin/sequences/SequencesKt__SequencesKt;->emptySequence()Lkotlin/sequences/Sequence; +HSPLkotlin/sequences/SequencesKt__SequencesKt;->generateSequence(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence; +Lkotlin/sequences/SequencesKt__SequencesKt$generateSequence$2; +HSPLkotlin/sequences/SequencesKt__SequencesKt$generateSequence$2;->(Ljava/lang/Object;)V +HSPLkotlin/sequences/SequencesKt__SequencesKt$generateSequence$2;->invoke()Ljava/lang/Object; +Lkotlin/sequences/SequencesKt___SequencesJvmKt; +Lkotlin/sequences/SequencesKt___SequencesKt; +HSPLkotlin/sequences/SequencesKt___SequencesKt;->filter(Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence; +HSPLkotlin/sequences/SequencesKt___SequencesKt;->filterNot(Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence; +HSPLkotlin/sequences/SequencesKt___SequencesKt;->filterNotNull(Lkotlin/sequences/Sequence;)Lkotlin/sequences/Sequence; +HSPLkotlin/sequences/SequencesKt___SequencesKt;->firstOrNull(Lkotlin/sequences/Sequence;)Ljava/lang/Object; +HSPLkotlin/sequences/SequencesKt___SequencesKt;->flatMap(Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence; +HSPLkotlin/sequences/SequencesKt___SequencesKt;->flatMapIterable(Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence; +HSPLkotlin/sequences/SequencesKt___SequencesKt;->map(Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence; +HSPLkotlin/sequences/SequencesKt___SequencesKt;->mapNotNull(Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function1;)Lkotlin/sequences/Sequence; +HSPLkotlin/sequences/SequencesKt___SequencesKt;->sortedWith(Lkotlin/sequences/Sequence;Ljava/util/Comparator;)Lkotlin/sequences/Sequence; +HSPLkotlin/sequences/SequencesKt___SequencesKt;->take(Lkotlin/sequences/Sequence;I)Lkotlin/sequences/Sequence; +HSPLkotlin/sequences/SequencesKt___SequencesKt;->toCollection(Lkotlin/sequences/Sequence;Ljava/util/Collection;)Ljava/util/Collection; +HSPLkotlin/sequences/SequencesKt___SequencesKt;->toList(Lkotlin/sequences/Sequence;)Ljava/util/List; +HSPLkotlin/sequences/SequencesKt___SequencesKt;->toMutableList(Lkotlin/sequences/Sequence;)Ljava/util/List; +HSPLkotlin/sequences/SequencesKt___SequencesKt;->toSet(Lkotlin/sequences/Sequence;)Ljava/util/Set; +Lkotlin/sequences/SequencesKt___SequencesKt$filterNotNull$1; +HSPLkotlin/sequences/SequencesKt___SequencesKt$filterNotNull$1;->()V +HSPLkotlin/sequences/SequencesKt___SequencesKt$filterNotNull$1;->()V +HSPLkotlin/sequences/SequencesKt___SequencesKt$filterNotNull$1;->invoke(Ljava/lang/Object;)Ljava/lang/Boolean; +HSPLkotlin/sequences/SequencesKt___SequencesKt$filterNotNull$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlin/sequences/SequencesKt___SequencesKt$flatMap$1; +HSPLkotlin/sequences/SequencesKt___SequencesKt$flatMap$1;->()V +HSPLkotlin/sequences/SequencesKt___SequencesKt$flatMap$1;->()V +Lkotlin/sequences/SequencesKt___SequencesKt$flatMap$2; +HSPLkotlin/sequences/SequencesKt___SequencesKt$flatMap$2;->()V +HSPLkotlin/sequences/SequencesKt___SequencesKt$flatMap$2;->()V +HSPLkotlin/sequences/SequencesKt___SequencesKt$flatMap$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlin/sequences/SequencesKt___SequencesKt$flatMap$2;->invoke(Lkotlin/sequences/Sequence;)Ljava/util/Iterator; +Lkotlin/sequences/SequencesKt___SequencesKt$sortedWith$1; +HSPLkotlin/sequences/SequencesKt___SequencesKt$sortedWith$1;->(Lkotlin/sequences/Sequence;Ljava/util/Comparator;)V +HSPLkotlin/sequences/SequencesKt___SequencesKt$sortedWith$1;->iterator()Ljava/util/Iterator; +Lkotlin/sequences/TakeSequence; +HSPLkotlin/sequences/TakeSequence;->(Lkotlin/sequences/Sequence;I)V +HSPLkotlin/sequences/TakeSequence;->access$getCount$p(Lkotlin/sequences/TakeSequence;)I +HSPLkotlin/sequences/TakeSequence;->access$getSequence$p(Lkotlin/sequences/TakeSequence;)Lkotlin/sequences/Sequence; +HSPLkotlin/sequences/TakeSequence;->iterator()Ljava/util/Iterator; +Lkotlin/sequences/TakeSequence$iterator$1; +HSPLkotlin/sequences/TakeSequence$iterator$1;->(Lkotlin/sequences/TakeSequence;)V +HSPLkotlin/sequences/TakeSequence$iterator$1;->hasNext()Z +Lkotlin/sequences/TransformingSequence; +HSPLkotlin/sequences/TransformingSequence;->(Lkotlin/sequences/Sequence;Lkotlin/jvm/functions/Function1;)V +HSPLkotlin/sequences/TransformingSequence;->access$getSequence$p(Lkotlin/sequences/TransformingSequence;)Lkotlin/sequences/Sequence; +HSPLkotlin/sequences/TransformingSequence;->access$getTransformer$p(Lkotlin/sequences/TransformingSequence;)Lkotlin/jvm/functions/Function1; +HSPLkotlin/sequences/TransformingSequence;->iterator()Ljava/util/Iterator; +Lkotlin/sequences/TransformingSequence$iterator$1; +HSPLkotlin/sequences/TransformingSequence$iterator$1;->(Lkotlin/sequences/TransformingSequence;)V +HSPLkotlin/sequences/TransformingSequence$iterator$1;->hasNext()Z +HSPLkotlin/sequences/TransformingSequence$iterator$1;->next()Ljava/lang/Object; +Lkotlin/text/CharsKt; +Lkotlin/text/CharsKt__CharJVMKt; +HSPLkotlin/text/CharsKt__CharJVMKt;->checkRadix(I)I +HSPLkotlin/text/CharsKt__CharJVMKt;->digitOf(CI)I +HSPLkotlin/text/CharsKt__CharJVMKt;->isWhitespace(C)Z +Lkotlin/text/CharsKt__CharKt; +HSPLkotlin/text/CharsKt__CharKt;->equals(CCZ)Z +Lkotlin/text/Charsets; +HSPLkotlin/text/Charsets;->()V +HSPLkotlin/text/Charsets;->()V +Lkotlin/text/Regex; +HSPLkotlin/text/Regex;->()V +HSPLkotlin/text/Regex;->(Ljava/lang/String;)V +HSPLkotlin/text/Regex;->(Ljava/util/regex/Pattern;)V +HSPLkotlin/text/Regex;->matches(Ljava/lang/CharSequence;)Z +Lkotlin/text/Regex$Companion; +HSPLkotlin/text/Regex$Companion;->()V +HSPLkotlin/text/Regex$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlin/text/ScreenFloatValueRegEx; +HSPLkotlin/text/ScreenFloatValueRegEx;->()V +HSPLkotlin/text/ScreenFloatValueRegEx;->()V +Lkotlin/text/StringsKt; +Lkotlin/text/StringsKt__AppendableKt; +HSPLkotlin/text/StringsKt__AppendableKt;->appendElement(Ljava/lang/Appendable;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)V +Lkotlin/text/StringsKt__IndentKt; +Lkotlin/text/StringsKt__RegexExtensionsJVMKt; +Lkotlin/text/StringsKt__RegexExtensionsKt; +Lkotlin/text/StringsKt__StringBuilderJVMKt; +Lkotlin/text/StringsKt__StringBuilderKt; +Lkotlin/text/StringsKt__StringNumberConversionsJVMKt; +HSPLkotlin/text/StringsKt__StringNumberConversionsJVMKt;->toDoubleOrNull(Ljava/lang/String;)Ljava/lang/Double; +Lkotlin/text/StringsKt__StringNumberConversionsKt; +HSPLkotlin/text/StringsKt__StringNumberConversionsKt;->toLongOrNull(Ljava/lang/String;)Ljava/lang/Long; +HSPLkotlin/text/StringsKt__StringNumberConversionsKt;->toLongOrNull(Ljava/lang/String;I)Ljava/lang/Long; +Lkotlin/text/StringsKt__StringsJVMKt; +HSPLkotlin/text/StringsKt__StringsJVMKt;->encodeToByteArray(Ljava/lang/String;)[B +HSPLkotlin/text/StringsKt__StringsJVMKt;->endsWith$default(Ljava/lang/String;Ljava/lang/String;ZILjava/lang/Object;)Z +HSPLkotlin/text/StringsKt__StringsJVMKt;->endsWith(Ljava/lang/String;Ljava/lang/String;Z)Z +HSPLkotlin/text/StringsKt__StringsJVMKt;->equals(Ljava/lang/String;Ljava/lang/String;Z)Z +HSPLkotlin/text/StringsKt__StringsJVMKt;->isBlank(Ljava/lang/CharSequence;)Z +HSPLkotlin/text/StringsKt__StringsJVMKt;->repeat(Ljava/lang/CharSequence;I)Ljava/lang/String; +HSPLkotlin/text/StringsKt__StringsJVMKt;->replace$default(Ljava/lang/String;CCZILjava/lang/Object;)Ljava/lang/String; +HSPLkotlin/text/StringsKt__StringsJVMKt;->replace(Ljava/lang/String;CCZ)Ljava/lang/String; +HSPLkotlin/text/StringsKt__StringsJVMKt;->startsWith$default(Ljava/lang/String;Ljava/lang/String;ZILjava/lang/Object;)Z +HSPLkotlin/text/StringsKt__StringsJVMKt;->startsWith(Ljava/lang/String;Ljava/lang/String;Z)Z +Lkotlin/text/StringsKt__StringsKt; +HSPLkotlin/text/StringsKt__StringsKt;->contains$default(Ljava/lang/CharSequence;CZILjava/lang/Object;)Z +HSPLkotlin/text/StringsKt__StringsKt;->contains(Ljava/lang/CharSequence;CZ)Z +HSPLkotlin/text/StringsKt__StringsKt;->endsWith$default(Ljava/lang/CharSequence;Ljava/lang/CharSequence;ZILjava/lang/Object;)Z +HSPLkotlin/text/StringsKt__StringsKt;->endsWith(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Z)Z +HSPLkotlin/text/StringsKt__StringsKt;->getIndices(Ljava/lang/CharSequence;)Lkotlin/ranges/IntRange; +HSPLkotlin/text/StringsKt__StringsKt;->getLastIndex(Ljava/lang/CharSequence;)I +HSPLkotlin/text/StringsKt__StringsKt;->indexOf$default(Ljava/lang/CharSequence;CIZILjava/lang/Object;)I +HSPLkotlin/text/StringsKt__StringsKt;->indexOf(Ljava/lang/CharSequence;CIZ)I +HSPLkotlin/text/StringsKt__StringsKt;->indexOf(Ljava/lang/CharSequence;Ljava/lang/String;IZ)I +HSPLkotlin/text/StringsKt__StringsKt;->indexOfAny(Ljava/lang/CharSequence;[CIZ)I +HSPLkotlin/text/StringsKt__StringsKt;->lastIndexOf$default(Ljava/lang/CharSequence;CIZILjava/lang/Object;)I +HSPLkotlin/text/StringsKt__StringsKt;->lastIndexOf(Ljava/lang/CharSequence;CIZ)I +HSPLkotlin/text/StringsKt__StringsKt;->padStart(Ljava/lang/CharSequence;IC)Ljava/lang/CharSequence; +HSPLkotlin/text/StringsKt__StringsKt;->padStart(Ljava/lang/String;IC)Ljava/lang/String; +HSPLkotlin/text/StringsKt__StringsKt;->removePrefix(Ljava/lang/String;Ljava/lang/CharSequence;)Ljava/lang/String; +HSPLkotlin/text/StringsKt__StringsKt;->removeSuffix(Ljava/lang/String;Ljava/lang/CharSequence;)Ljava/lang/String; +HSPLkotlin/text/StringsKt__StringsKt;->requireNonNegativeLimit(I)V +HSPLkotlin/text/StringsKt__StringsKt;->split$StringsKt__StringsKt(Ljava/lang/CharSequence;Ljava/lang/String;ZI)Ljava/util/List; +HSPLkotlin/text/StringsKt__StringsKt;->split$default(Ljava/lang/CharSequence;[Ljava/lang/String;ZIILjava/lang/Object;)Ljava/util/List; +HSPLkotlin/text/StringsKt__StringsKt;->split(Ljava/lang/CharSequence;[Ljava/lang/String;ZI)Ljava/util/List; +HSPLkotlin/text/StringsKt__StringsKt;->startsWith$default(Ljava/lang/CharSequence;Ljava/lang/CharSequence;ZILjava/lang/Object;)Z +HSPLkotlin/text/StringsKt__StringsKt;->startsWith(Ljava/lang/CharSequence;Ljava/lang/CharSequence;Z)Z +HSPLkotlin/text/StringsKt__StringsKt;->substringAfterLast(Ljava/lang/String;CLjava/lang/String;)Ljava/lang/String; +HSPLkotlin/text/StringsKt__StringsKt;->toBooleanStrictOrNull(Ljava/lang/String;)Ljava/lang/Boolean; +HSPLkotlin/text/StringsKt__StringsKt;->trim(Ljava/lang/CharSequence;)Ljava/lang/CharSequence; +Lkotlin/text/StringsKt___StringsJvmKt; +Lkotlin/text/StringsKt___StringsKt; +Lkotlin/text/UStringsKt; +HSPLkotlin/text/UStringsKt;->toULongOrNull(Ljava/lang/String;)Lkotlin/ULong; +HSPLkotlin/text/UStringsKt;->toULongOrNull(Ljava/lang/String;I)Lkotlin/ULong; +Lkotlin/time/Duration; +HSPLkotlin/time/Duration;->()V +HSPLkotlin/time/Duration;->appendFractional-impl(JLjava/lang/StringBuilder;IIILjava/lang/String;Z)V +HSPLkotlin/time/Duration;->constructor-impl(J)J +HSPLkotlin/time/Duration;->getAbsoluteValue-UwyO8pc(J)J +HSPLkotlin/time/Duration;->getHoursComponent-impl(J)I +HSPLkotlin/time/Duration;->getInWholeDays-impl(J)J +HSPLkotlin/time/Duration;->getInWholeHours-impl(J)J +HSPLkotlin/time/Duration;->getInWholeMilliseconds-impl(J)J +HSPLkotlin/time/Duration;->getInWholeMinutes-impl(J)J +HSPLkotlin/time/Duration;->getInWholeSeconds-impl(J)J +HSPLkotlin/time/Duration;->getMinutesComponent-impl(J)I +HSPLkotlin/time/Duration;->getNanosecondsComponent-impl(J)I +HSPLkotlin/time/Duration;->getSecondsComponent-impl(J)I +HSPLkotlin/time/Duration;->getStorageUnit-impl(J)Lkotlin/time/DurationUnit; +HSPLkotlin/time/Duration;->getValue-impl(J)J +HSPLkotlin/time/Duration;->isInMillis-impl(J)Z +HSPLkotlin/time/Duration;->isInNanos-impl(J)Z +HSPLkotlin/time/Duration;->isInfinite-impl(J)Z +HSPLkotlin/time/Duration;->isNegative-impl(J)Z +HSPLkotlin/time/Duration;->isPositive-impl(J)Z +HSPLkotlin/time/Duration;->plus-LRDsOJo(JJ)J +HSPLkotlin/time/Duration;->toLong-impl(JLkotlin/time/DurationUnit;)J +HSPLkotlin/time/Duration;->toString-impl(J)Ljava/lang/String; +Lkotlin/time/Duration$Companion; +HSPLkotlin/time/Duration$Companion;->()V +HSPLkotlin/time/Duration$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlin/time/DurationJvmKt; +HSPLkotlin/time/DurationJvmKt;->()V +HSPLkotlin/time/DurationJvmKt;->getDurationAssertionsEnabled()Z +Lkotlin/time/DurationKt; +HSPLkotlin/time/DurationKt;->access$durationOfMillis(J)J +HSPLkotlin/time/DurationKt;->access$durationOfNanosNormalized(J)J +HSPLkotlin/time/DurationKt;->durationOfMillis(J)J +HSPLkotlin/time/DurationKt;->durationOfNanos(J)J +HSPLkotlin/time/DurationKt;->durationOfNanosNormalized(J)J +HSPLkotlin/time/DurationKt;->toDuration(ILkotlin/time/DurationUnit;)J +HSPLkotlin/time/DurationKt;->toDuration(JLkotlin/time/DurationUnit;)J +Lkotlin/time/DurationUnit; +HSPLkotlin/time/DurationUnit;->$values()[Lkotlin/time/DurationUnit; +HSPLkotlin/time/DurationUnit;->()V +HSPLkotlin/time/DurationUnit;->(Ljava/lang/String;ILjava/util/concurrent/TimeUnit;)V +HSPLkotlin/time/DurationUnit;->getTimeUnit$kotlin_stdlib()Ljava/util/concurrent/TimeUnit; +Lkotlin/time/DurationUnitKt; +Lkotlin/time/DurationUnitKt__DurationUnitJvmKt; +HSPLkotlin/time/DurationUnitKt__DurationUnitJvmKt;->convertDurationUnit(JLkotlin/time/DurationUnit;Lkotlin/time/DurationUnit;)J +HSPLkotlin/time/DurationUnitKt__DurationUnitJvmKt;->convertDurationUnitOverflow(JLkotlin/time/DurationUnit;Lkotlin/time/DurationUnit;)J +Lkotlin/time/DurationUnitKt__DurationUnitKt; +Lkotlinx/collections/immutable/ExtensionsKt; +HSPLkotlinx/collections/immutable/ExtensionsKt;->persistentListOf()Lkotlinx/collections/immutable/PersistentList; +HSPLkotlinx/collections/immutable/ExtensionsKt;->persistentListOf([Ljava/lang/Object;)Lkotlinx/collections/immutable/PersistentList; +HSPLkotlinx/collections/immutable/ExtensionsKt;->persistentMapOf()Lkotlinx/collections/immutable/PersistentMap; +HSPLkotlinx/collections/immutable/ExtensionsKt;->plus(Lkotlinx/collections/immutable/PersistentList;Lkotlin/sequences/Sequence;)Lkotlinx/collections/immutable/PersistentList; +HSPLkotlinx/collections/immutable/ExtensionsKt;->toImmutableList(Lkotlin/sequences/Sequence;)Lkotlinx/collections/immutable/ImmutableList; +HSPLkotlinx/collections/immutable/ExtensionsKt;->toPersistentList(Lkotlin/sequences/Sequence;)Lkotlinx/collections/immutable/PersistentList; +Lkotlinx/collections/immutable/ImmutableCollection; +Lkotlinx/collections/immutable/ImmutableList; +Lkotlinx/collections/immutable/ImmutableList$DefaultImpls; +HSPLkotlinx/collections/immutable/ImmutableList$DefaultImpls;->subList(Lkotlinx/collections/immutable/ImmutableList;II)Lkotlinx/collections/immutable/ImmutableList; +Lkotlinx/collections/immutable/ImmutableList$SubList; +HSPLkotlinx/collections/immutable/ImmutableList$SubList;->(Lkotlinx/collections/immutable/ImmutableList;II)V +HSPLkotlinx/collections/immutable/ImmutableList$SubList;->get(I)Ljava/lang/Object; +HSPLkotlinx/collections/immutable/ImmutableList$SubList;->getSize()I +HSPLkotlinx/collections/immutable/ImmutableList$SubList;->subList(II)Lkotlinx/collections/immutable/ImmutableList; +Lkotlinx/collections/immutable/ImmutableMap; +Lkotlinx/collections/immutable/ImmutableSet; +Lkotlinx/collections/immutable/PersistentCollection; +Lkotlinx/collections/immutable/PersistentCollection$Builder; +Lkotlinx/collections/immutable/PersistentList; +Lkotlinx/collections/immutable/PersistentList$Builder; +Lkotlinx/collections/immutable/PersistentList$DefaultImpls; +HSPLkotlinx/collections/immutable/PersistentList$DefaultImpls;->subList(Lkotlinx/collections/immutable/PersistentList;II)Lkotlinx/collections/immutable/ImmutableList; +Lkotlinx/collections/immutable/PersistentMap; +Lkotlinx/collections/immutable/implementations/immutableList/AbstractListIterator; +HSPLkotlinx/collections/immutable/implementations/immutableList/AbstractListIterator;->(II)V +HSPLkotlinx/collections/immutable/implementations/immutableList/AbstractListIterator;->getIndex()I +HSPLkotlinx/collections/immutable/implementations/immutableList/AbstractListIterator;->hasNext()Z +HSPLkotlinx/collections/immutable/implementations/immutableList/AbstractListIterator;->setIndex(I)V +Lkotlinx/collections/immutable/implementations/immutableList/AbstractPersistentList; +HSPLkotlinx/collections/immutable/implementations/immutableList/AbstractPersistentList;->()V +HSPLkotlinx/collections/immutable/implementations/immutableList/AbstractPersistentList;->iterator()Ljava/util/Iterator; +HSPLkotlinx/collections/immutable/implementations/immutableList/AbstractPersistentList;->listIterator()Ljava/util/ListIterator; +HSPLkotlinx/collections/immutable/implementations/immutableList/AbstractPersistentList;->subList(II)Lkotlinx/collections/immutable/ImmutableList; +Lkotlinx/collections/immutable/implementations/immutableList/BufferIterator; +HSPLkotlinx/collections/immutable/implementations/immutableList/BufferIterator;->([Ljava/lang/Object;II)V +HSPLkotlinx/collections/immutable/implementations/immutableList/BufferIterator;->next()Ljava/lang/Object; +Lkotlinx/collections/immutable/implementations/immutableList/PersistentVectorBuilder; +HSPLkotlinx/collections/immutable/implementations/immutableList/PersistentVectorBuilder;->(Lkotlinx/collections/immutable/PersistentList;[Ljava/lang/Object;[Ljava/lang/Object;I)V +HSPLkotlinx/collections/immutable/implementations/immutableList/PersistentVectorBuilder;->add(Ljava/lang/Object;)Z +HSPLkotlinx/collections/immutable/implementations/immutableList/PersistentVectorBuilder;->build()Lkotlinx/collections/immutable/PersistentList; +HSPLkotlinx/collections/immutable/implementations/immutableList/PersistentVectorBuilder;->getSize()I +HSPLkotlinx/collections/immutable/implementations/immutableList/PersistentVectorBuilder;->isMutable([Ljava/lang/Object;)Z +HSPLkotlinx/collections/immutable/implementations/immutableList/PersistentVectorBuilder;->makeMutable([Ljava/lang/Object;)[Ljava/lang/Object; +HSPLkotlinx/collections/immutable/implementations/immutableList/PersistentVectorBuilder;->mutableBuffer()[Ljava/lang/Object; +HSPLkotlinx/collections/immutable/implementations/immutableList/PersistentVectorBuilder;->tailSize()I +HSPLkotlinx/collections/immutable/implementations/immutableList/PersistentVectorBuilder;->tailSize(I)I +Lkotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector; +HSPLkotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->()V +HSPLkotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->([Ljava/lang/Object;)V +HSPLkotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->access$getEMPTY$cp()Lkotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector; +HSPLkotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->add(Ljava/lang/Object;)Lkotlinx/collections/immutable/PersistentList; +HSPLkotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->addAll(Ljava/util/Collection;)Lkotlinx/collections/immutable/PersistentList; +HSPLkotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->builder()Lkotlinx/collections/immutable/PersistentList$Builder; +HSPLkotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->get(I)Ljava/lang/Object; +HSPLkotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->getSize()I +HSPLkotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->listIterator(I)Ljava/util/ListIterator; +HSPLkotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector;->removeAt(I)Lkotlinx/collections/immutable/PersistentList; +Lkotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector$Companion; +HSPLkotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector$Companion;->()V +HSPLkotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector$Companion;->getEMPTY()Lkotlinx/collections/immutable/implementations/immutableList/SmallPersistentVector; +Lkotlinx/collections/immutable/implementations/immutableList/UtilsKt; +HSPLkotlinx/collections/immutable/implementations/immutableList/UtilsKt;->persistentVectorOf()Lkotlinx/collections/immutable/PersistentList; +Lkotlinx/collections/immutable/implementations/immutableMap/MapEntry; +HSPLkotlinx/collections/immutable/implementations/immutableMap/MapEntry;->(Ljava/lang/Object;Ljava/lang/Object;)V +HSPLkotlinx/collections/immutable/implementations/immutableMap/MapEntry;->getKey()Ljava/lang/Object; +HSPLkotlinx/collections/immutable/implementations/immutableMap/MapEntry;->getValue()Ljava/lang/Object; +Lkotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap; +HSPLkotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->()V +HSPLkotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->(Lkotlinx/collections/immutable/implementations/immutableMap/TrieNode;I)V +HSPLkotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->access$getEMPTY$cp()Lkotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap; +HSPLkotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->get(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->getSize()I +HSPLkotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Lkotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap; +Lkotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap$Companion; +HSPLkotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap$Companion;->()V +HSPLkotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap$Companion;->emptyOf$kotlinx_collections_immutable()Lkotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap; +Lkotlinx/collections/immutable/implementations/immutableMap/TrieNode; +HSPLkotlinx/collections/immutable/implementations/immutableMap/TrieNode;->()V +HSPLkotlinx/collections/immutable/implementations/immutableMap/TrieNode;->(II[Ljava/lang/Object;)V +HSPLkotlinx/collections/immutable/implementations/immutableMap/TrieNode;->(II[Ljava/lang/Object;Lkotlinx/collections/immutable/internal/MutabilityOwnership;)V +HSPLkotlinx/collections/immutable/implementations/immutableMap/TrieNode;->access$getEMPTY$cp()Lkotlinx/collections/immutable/implementations/immutableMap/TrieNode; +HSPLkotlinx/collections/immutable/implementations/immutableMap/TrieNode;->asInsertResult()Lkotlinx/collections/immutable/implementations/immutableMap/TrieNode$ModificationResult; +HSPLkotlinx/collections/immutable/implementations/immutableMap/TrieNode;->asUpdateResult()Lkotlinx/collections/immutable/implementations/immutableMap/TrieNode$ModificationResult; +HSPLkotlinx/collections/immutable/implementations/immutableMap/TrieNode;->entryKeyIndex$kotlinx_collections_immutable(I)I +HSPLkotlinx/collections/immutable/implementations/immutableMap/TrieNode;->get(ILjava/lang/Object;I)Ljava/lang/Object; +HSPLkotlinx/collections/immutable/implementations/immutableMap/TrieNode;->hasEntryAt$kotlinx_collections_immutable(I)Z +HSPLkotlinx/collections/immutable/implementations/immutableMap/TrieNode;->hasNodeAt(I)Z +HSPLkotlinx/collections/immutable/implementations/immutableMap/TrieNode;->insertEntryAt(ILjava/lang/Object;Ljava/lang/Object;)Lkotlinx/collections/immutable/implementations/immutableMap/TrieNode; +HSPLkotlinx/collections/immutable/implementations/immutableMap/TrieNode;->keyAtIndex(I)Ljava/lang/Object; +HSPLkotlinx/collections/immutable/implementations/immutableMap/TrieNode;->put(ILjava/lang/Object;Ljava/lang/Object;I)Lkotlinx/collections/immutable/implementations/immutableMap/TrieNode$ModificationResult; +HSPLkotlinx/collections/immutable/implementations/immutableMap/TrieNode;->updateValueAtIndex(ILjava/lang/Object;)Lkotlinx/collections/immutable/implementations/immutableMap/TrieNode; +HSPLkotlinx/collections/immutable/implementations/immutableMap/TrieNode;->valueAtKeyIndex(I)Ljava/lang/Object; +Lkotlinx/collections/immutable/implementations/immutableMap/TrieNode$Companion; +HSPLkotlinx/collections/immutable/implementations/immutableMap/TrieNode$Companion;->()V +HSPLkotlinx/collections/immutable/implementations/immutableMap/TrieNode$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlinx/collections/immutable/implementations/immutableMap/TrieNode$Companion;->getEMPTY$kotlinx_collections_immutable()Lkotlinx/collections/immutable/implementations/immutableMap/TrieNode; +Lkotlinx/collections/immutable/implementations/immutableMap/TrieNode$ModificationResult; +HSPLkotlinx/collections/immutable/implementations/immutableMap/TrieNode$ModificationResult;->(Lkotlinx/collections/immutable/implementations/immutableMap/TrieNode;I)V +HSPLkotlinx/collections/immutable/implementations/immutableMap/TrieNode$ModificationResult;->getNode()Lkotlinx/collections/immutable/implementations/immutableMap/TrieNode; +HSPLkotlinx/collections/immutable/implementations/immutableMap/TrieNode$ModificationResult;->getSizeDelta()I +Lkotlinx/collections/immutable/implementations/immutableMap/TrieNodeKt; +HSPLkotlinx/collections/immutable/implementations/immutableMap/TrieNodeKt;->access$insertEntryAtIndex([Ljava/lang/Object;ILjava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object; +HSPLkotlinx/collections/immutable/implementations/immutableMap/TrieNodeKt;->indexSegment(II)I +HSPLkotlinx/collections/immutable/implementations/immutableMap/TrieNodeKt;->insertEntryAtIndex([Ljava/lang/Object;ILjava/lang/Object;Ljava/lang/Object;)[Ljava/lang/Object; +Lkotlinx/collections/immutable/implementations/persistentOrderedMap/LinkedValue; +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/LinkedValue;->(Ljava/lang/Object;)V +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/LinkedValue;->(Ljava/lang/Object;Ljava/lang/Object;)V +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/LinkedValue;->(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/LinkedValue;->getNext()Ljava/lang/Object; +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/LinkedValue;->getValue()Ljava/lang/Object; +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/LinkedValue;->withNext(Ljava/lang/Object;)Lkotlinx/collections/immutable/implementations/persistentOrderedMap/LinkedValue; +Lkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMap; +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMap;->()V +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMap;->(Ljava/lang/Object;Ljava/lang/Object;Lkotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap;)V +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMap;->access$getEMPTY$cp()Lkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMap; +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMap;->createEntries()Lkotlinx/collections/immutable/ImmutableSet; +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMap;->equals(Ljava/lang/Object;)Z +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMap;->get(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMap;->getEntries()Ljava/util/Set; +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMap;->getFirstKey$kotlinx_collections_immutable()Ljava/lang/Object; +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMap;->getHashMap$kotlinx_collections_immutable()Lkotlinx/collections/immutable/implementations/immutableMap/PersistentHashMap; +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMap;->getSize()I +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMap;->getValues()Ljava/util/Collection; +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMap;->getValues()Lkotlinx/collections/immutable/ImmutableCollection; +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Lkotlinx/collections/immutable/PersistentMap; +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMap;->put(Ljava/lang/Object;Ljava/lang/Object;)Lkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMap; +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMap;->remove(Ljava/lang/Object;)Lkotlinx/collections/immutable/PersistentMap; +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMap;->remove(Ljava/lang/Object;)Lkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMap; +Lkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMap$Companion; +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMap$Companion;->()V +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMap$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMap$Companion;->emptyOf$kotlinx_collections_immutable()Lkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMap; +Lkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMapEntries; +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMapEntries;->(Lkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMap;)V +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMapEntries;->getSize()I +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMapEntries;->iterator()Ljava/util/Iterator; +Lkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMapEntriesIterator; +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMapEntriesIterator;->(Lkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMap;)V +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMapEntriesIterator;->hasNext()Z +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMapEntriesIterator;->next()Ljava/lang/Object; +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMapEntriesIterator;->next()Ljava/util/Map$Entry; +Lkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMapLinksIterator; +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMapLinksIterator;->(Ljava/lang/Object;Ljava/util/Map;)V +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMapLinksIterator;->getNextKey$kotlinx_collections_immutable()Ljava/lang/Object; +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMapLinksIterator;->hasNext()Z +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMapLinksIterator;->next()Lkotlinx/collections/immutable/implementations/persistentOrderedMap/LinkedValue; +Lkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMapValues; +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMapValues;->(Lkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMap;)V +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMapValues;->iterator()Ljava/util/Iterator; +Lkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMapValuesIterator; +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMapValuesIterator;->(Lkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMap;)V +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMapValuesIterator;->hasNext()Z +HSPLkotlinx/collections/immutable/implementations/persistentOrderedMap/PersistentOrderedMapValuesIterator;->next()Ljava/lang/Object; +Lkotlinx/collections/immutable/internal/CommonFunctionsKt; +HSPLkotlinx/collections/immutable/internal/CommonFunctionsKt;->assert(Z)V +Lkotlinx/collections/immutable/internal/EndOfChain; +HSPLkotlinx/collections/immutable/internal/EndOfChain;->()V +HSPLkotlinx/collections/immutable/internal/EndOfChain;->()V +Lkotlinx/collections/immutable/internal/ListImplementation; +HSPLkotlinx/collections/immutable/internal/ListImplementation;->()V +HSPLkotlinx/collections/immutable/internal/ListImplementation;->()V +HSPLkotlinx/collections/immutable/internal/ListImplementation;->checkElementIndex$kotlinx_collections_immutable(II)V +HSPLkotlinx/collections/immutable/internal/ListImplementation;->checkPositionIndex$kotlinx_collections_immutable(II)V +HSPLkotlinx/collections/immutable/internal/ListImplementation;->checkRangeIndexes$kotlinx_collections_immutable(III)V +Lkotlinx/collections/immutable/internal/MutabilityOwnership; +HSPLkotlinx/collections/immutable/internal/MutabilityOwnership;->()V +Lkotlinx/coroutines/AbstractCoroutine; +HSPLkotlinx/coroutines/AbstractCoroutine;->(Lkotlin/coroutines/CoroutineContext;ZZ)V +HSPLkotlinx/coroutines/AbstractCoroutine;->afterResume(Ljava/lang/Object;)V +HSPLkotlinx/coroutines/AbstractCoroutine;->cancellationExceptionMessage()Ljava/lang/String; +HSPLkotlinx/coroutines/AbstractCoroutine;->getContext()Lkotlin/coroutines/CoroutineContext; +HSPLkotlinx/coroutines/AbstractCoroutine;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext; +HSPLkotlinx/coroutines/AbstractCoroutine;->isActive()Z +HSPLkotlinx/coroutines/AbstractCoroutine;->onCancelled(Ljava/lang/Throwable;Z)V +HSPLkotlinx/coroutines/AbstractCoroutine;->onCompleted(Ljava/lang/Object;)V +HSPLkotlinx/coroutines/AbstractCoroutine;->onCompletionInternal(Ljava/lang/Object;)V +HSPLkotlinx/coroutines/AbstractCoroutine;->resumeWith(Ljava/lang/Object;)V +HSPLkotlinx/coroutines/AbstractCoroutine;->start(Lkotlinx/coroutines/CoroutineStart;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)V +Lkotlinx/coroutines/AbstractTimeSource; +Lkotlinx/coroutines/AbstractTimeSourceKt; +HSPLkotlinx/coroutines/AbstractTimeSourceKt;->()V +HSPLkotlinx/coroutines/AbstractTimeSourceKt;->getTimeSource()Lkotlinx/coroutines/AbstractTimeSource; +Lkotlinx/coroutines/Active; +HSPLkotlinx/coroutines/Active;->()V +HSPLkotlinx/coroutines/Active;->()V +Lkotlinx/coroutines/BlockingCoroutine; +HSPLkotlinx/coroutines/BlockingCoroutine;->(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Thread;Lkotlinx/coroutines/EventLoop;)V +HSPLkotlinx/coroutines/BlockingCoroutine;->afterCompletion(Ljava/lang/Object;)V +HSPLkotlinx/coroutines/BlockingCoroutine;->joinBlocking()Ljava/lang/Object; +Lkotlinx/coroutines/BlockingEventLoop; +HSPLkotlinx/coroutines/BlockingEventLoop;->(Ljava/lang/Thread;)V +HSPLkotlinx/coroutines/BlockingEventLoop;->getThread()Ljava/lang/Thread; +Lkotlinx/coroutines/BuildersKt; +HSPLkotlinx/coroutines/BuildersKt;->async$default(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/CoroutineStart;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/Deferred; +HSPLkotlinx/coroutines/BuildersKt;->async(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/CoroutineStart;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/Deferred; +HSPLkotlinx/coroutines/BuildersKt;->launch$default(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/CoroutineStart;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/Job; +HSPLkotlinx/coroutines/BuildersKt;->launch(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/CoroutineStart;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/Job; +HSPLkotlinx/coroutines/BuildersKt;->runBlocking$default(Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/BuildersKt;->runBlocking(Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; +HSPLkotlinx/coroutines/BuildersKt;->withContext(Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/BuildersKt__BuildersKt; +HSPLkotlinx/coroutines/BuildersKt__BuildersKt;->runBlocking$default(Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;ILjava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/BuildersKt__BuildersKt;->runBlocking(Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; +Lkotlinx/coroutines/BuildersKt__Builders_commonKt; +HSPLkotlinx/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; +HSPLkotlinx/coroutines/BuildersKt__Builders_commonKt;->async(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/CoroutineStart;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/Deferred; +HSPLkotlinx/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; +HSPLkotlinx/coroutines/BuildersKt__Builders_commonKt;->launch(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/CoroutineStart;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/Job; +HSPLkotlinx/coroutines/BuildersKt__Builders_commonKt;->withContext(Lkotlin/coroutines/CoroutineContext;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/CancelHandler; +HSPLkotlinx/coroutines/CancelHandler;->()V +Lkotlinx/coroutines/CancelHandlerBase; +HSPLkotlinx/coroutines/CancelHandlerBase;->()V +Lkotlinx/coroutines/CancellableContinuation; +Lkotlinx/coroutines/CancellableContinuation$DefaultImpls; +Lkotlinx/coroutines/CancellableContinuationImpl; +HSPLkotlinx/coroutines/CancellableContinuationImpl;->()V +HSPLkotlinx/coroutines/CancellableContinuationImpl;->(Lkotlin/coroutines/Continuation;I)V +HSPLkotlinx/coroutines/CancellableContinuationImpl;->callCancelHandler(Lkotlinx/coroutines/CancelHandler;Ljava/lang/Throwable;)V +HSPLkotlinx/coroutines/CancellableContinuationImpl;->callSegmentOnCancellation(Lkotlinx/coroutines/internal/Segment;Ljava/lang/Throwable;)V +HSPLkotlinx/coroutines/CancellableContinuationImpl;->cancel(Ljava/lang/Throwable;)Z +HSPLkotlinx/coroutines/CancellableContinuationImpl;->cancelCompletedResult$kotlinx_coroutines_core(Ljava/lang/Object;Ljava/lang/Throwable;)V +HSPLkotlinx/coroutines/CancellableContinuationImpl;->cancelLater(Ljava/lang/Throwable;)Z +HSPLkotlinx/coroutines/CancellableContinuationImpl;->completeResume(Ljava/lang/Object;)V +HSPLkotlinx/coroutines/CancellableContinuationImpl;->detachChild$kotlinx_coroutines_core()V +HSPLkotlinx/coroutines/CancellableContinuationImpl;->detachChildIfNonResuable()V +HSPLkotlinx/coroutines/CancellableContinuationImpl;->dispatchResume(I)V +HSPLkotlinx/coroutines/CancellableContinuationImpl;->getContext()Lkotlin/coroutines/CoroutineContext; +HSPLkotlinx/coroutines/CancellableContinuationImpl;->getContinuationCancellationCause(Lkotlinx/coroutines/Job;)Ljava/lang/Throwable; +HSPLkotlinx/coroutines/CancellableContinuationImpl;->getDelegate$kotlinx_coroutines_core()Lkotlin/coroutines/Continuation; +HSPLkotlinx/coroutines/CancellableContinuationImpl;->getExceptionalResult$kotlinx_coroutines_core(Ljava/lang/Object;)Ljava/lang/Throwable; +HSPLkotlinx/coroutines/CancellableContinuationImpl;->getParentHandle()Lkotlinx/coroutines/DisposableHandle; +HSPLkotlinx/coroutines/CancellableContinuationImpl;->getResult()Ljava/lang/Object; +HSPLkotlinx/coroutines/CancellableContinuationImpl;->getState$kotlinx_coroutines_core()Ljava/lang/Object; +HSPLkotlinx/coroutines/CancellableContinuationImpl;->getSuccessfulResult$kotlinx_coroutines_core(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/CancellableContinuationImpl;->get_decisionAndIndex$volatile$FU()Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater; +HSPLkotlinx/coroutines/CancellableContinuationImpl;->get_parentHandle$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/CancellableContinuationImpl;->get_state$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/CancellableContinuationImpl;->initCancellability()V +HSPLkotlinx/coroutines/CancellableContinuationImpl;->installParentHandle()Lkotlinx/coroutines/DisposableHandle; +HSPLkotlinx/coroutines/CancellableContinuationImpl;->invokeOnCancellation(Lkotlin/jvm/functions/Function1;)V +HSPLkotlinx/coroutines/CancellableContinuationImpl;->invokeOnCancellation(Lkotlinx/coroutines/internal/Segment;I)V +HSPLkotlinx/coroutines/CancellableContinuationImpl;->invokeOnCancellationImpl(Ljava/lang/Object;)V +HSPLkotlinx/coroutines/CancellableContinuationImpl;->isCompleted()Z +HSPLkotlinx/coroutines/CancellableContinuationImpl;->isReusable()Z +HSPLkotlinx/coroutines/CancellableContinuationImpl;->makeCancelHandler(Lkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/CancelHandler; +HSPLkotlinx/coroutines/CancellableContinuationImpl;->parentCancelled$kotlinx_coroutines_core(Ljava/lang/Throwable;)V +HSPLkotlinx/coroutines/CancellableContinuationImpl;->releaseClaimedReusableContinuation$kotlinx_coroutines_core()V +HSPLkotlinx/coroutines/CancellableContinuationImpl;->resetStateReusable()Z +HSPLkotlinx/coroutines/CancellableContinuationImpl;->resume(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)V +HSPLkotlinx/coroutines/CancellableContinuationImpl;->resumeImpl$default(Lkotlinx/coroutines/CancellableContinuationImpl;Ljava/lang/Object;ILkotlin/jvm/functions/Function1;ILjava/lang/Object;)V +HSPLkotlinx/coroutines/CancellableContinuationImpl;->resumeImpl(Ljava/lang/Object;ILkotlin/jvm/functions/Function1;)V +HSPLkotlinx/coroutines/CancellableContinuationImpl;->resumeUndispatched(Lkotlinx/coroutines/CoroutineDispatcher;Ljava/lang/Object;)V +HSPLkotlinx/coroutines/CancellableContinuationImpl;->resumeWith(Ljava/lang/Object;)V +HSPLkotlinx/coroutines/CancellableContinuationImpl;->resumedState(Lkotlinx/coroutines/NotCompleted;Ljava/lang/Object;ILkotlin/jvm/functions/Function1;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/CancellableContinuationImpl;->takeState$kotlinx_coroutines_core()Ljava/lang/Object; +HSPLkotlinx/coroutines/CancellableContinuationImpl;->tryResume()Z +HSPLkotlinx/coroutines/CancellableContinuationImpl;->tryResume(Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; +HSPLkotlinx/coroutines/CancellableContinuationImpl;->tryResumeImpl(Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/CancellableContinuationImpl;->trySuspend()Z +Lkotlinx/coroutines/CancellableContinuationImplKt; +HSPLkotlinx/coroutines/CancellableContinuationImplKt;->()V +Lkotlinx/coroutines/CancellableContinuationKt; +HSPLkotlinx/coroutines/CancellableContinuationKt;->disposeOnCancellation(Lkotlinx/coroutines/CancellableContinuation;Lkotlinx/coroutines/DisposableHandle;)V +HSPLkotlinx/coroutines/CancellableContinuationKt;->getOrCreateCancellableContinuation(Lkotlin/coroutines/Continuation;)Lkotlinx/coroutines/CancellableContinuationImpl; +Lkotlinx/coroutines/CancelledContinuation; +HSPLkotlinx/coroutines/CancelledContinuation;->()V +HSPLkotlinx/coroutines/CancelledContinuation;->(Lkotlin/coroutines/Continuation;Ljava/lang/Throwable;Z)V +HSPLkotlinx/coroutines/CancelledContinuation;->get_resumed$volatile$FU()Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater; +HSPLkotlinx/coroutines/CancelledContinuation;->makeResumed()Z +Lkotlinx/coroutines/ChildContinuation; +HSPLkotlinx/coroutines/ChildContinuation;->(Lkotlinx/coroutines/CancellableContinuationImpl;)V +HSPLkotlinx/coroutines/ChildContinuation;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/ChildContinuation;->invoke(Ljava/lang/Throwable;)V +Lkotlinx/coroutines/ChildHandle; +Lkotlinx/coroutines/ChildHandleNode; +HSPLkotlinx/coroutines/ChildHandleNode;->(Lkotlinx/coroutines/ChildJob;)V +HSPLkotlinx/coroutines/ChildHandleNode;->childCancelled(Ljava/lang/Throwable;)Z +HSPLkotlinx/coroutines/ChildHandleNode;->getParent()Lkotlinx/coroutines/Job; +HSPLkotlinx/coroutines/ChildHandleNode;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/ChildHandleNode;->invoke(Ljava/lang/Throwable;)V +Lkotlinx/coroutines/ChildJob; +Lkotlinx/coroutines/CompletableJob; +Lkotlinx/coroutines/CompletedContinuation; +HSPLkotlinx/coroutines/CompletedContinuation;->(Ljava/lang/Object;Lkotlinx/coroutines/CancelHandler;Lkotlin/jvm/functions/Function1;Ljava/lang/Object;Ljava/lang/Throwable;)V +HSPLkotlinx/coroutines/CompletedContinuation;->(Ljava/lang/Object;Lkotlinx/coroutines/CancelHandler;Lkotlin/jvm/functions/Function1;Ljava/lang/Object;Ljava/lang/Throwable;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlinx/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; +HSPLkotlinx/coroutines/CompletedContinuation;->copy(Ljava/lang/Object;Lkotlinx/coroutines/CancelHandler;Lkotlin/jvm/functions/Function1;Ljava/lang/Object;Ljava/lang/Throwable;)Lkotlinx/coroutines/CompletedContinuation; +HSPLkotlinx/coroutines/CompletedContinuation;->getCancelled()Z +HSPLkotlinx/coroutines/CompletedContinuation;->invokeHandlers(Lkotlinx/coroutines/CancellableContinuationImpl;Ljava/lang/Throwable;)V +Lkotlinx/coroutines/CompletedExceptionally; +HSPLkotlinx/coroutines/CompletedExceptionally;->()V +HSPLkotlinx/coroutines/CompletedExceptionally;->(Ljava/lang/Throwable;Z)V +HSPLkotlinx/coroutines/CompletedExceptionally;->(Ljava/lang/Throwable;ZILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlinx/coroutines/CompletedExceptionally;->getHandled()Z +HSPLkotlinx/coroutines/CompletedExceptionally;->get_handled$volatile$FU()Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater; +HSPLkotlinx/coroutines/CompletedExceptionally;->makeHandled()Z +Lkotlinx/coroutines/CompletionHandlerBase; +HSPLkotlinx/coroutines/CompletionHandlerBase;->()V +Lkotlinx/coroutines/CompletionStateKt; +HSPLkotlinx/coroutines/CompletionStateKt;->recoverResult(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/CompletionStateKt;->toState$default(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/CompletionStateKt;->toState(Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; +HSPLkotlinx/coroutines/CompletionStateKt;->toState(Ljava/lang/Object;Lkotlinx/coroutines/CancellableContinuation;)Ljava/lang/Object; +Lkotlinx/coroutines/CopyableThreadContextElement; +Lkotlinx/coroutines/CopyableThrowable; +Lkotlinx/coroutines/CoroutineContextKt; +HSPLkotlinx/coroutines/CoroutineContextKt;->foldCopies(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/CoroutineContext;Z)Lkotlin/coroutines/CoroutineContext; +HSPLkotlinx/coroutines/CoroutineContextKt;->hasCopyableElements(Lkotlin/coroutines/CoroutineContext;)Z +HSPLkotlinx/coroutines/CoroutineContextKt;->newCoroutineContext(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext; +HSPLkotlinx/coroutines/CoroutineContextKt;->newCoroutineContext(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext; +HSPLkotlinx/coroutines/CoroutineContextKt;->undispatchedCompletion(Lkotlin/coroutines/jvm/internal/CoroutineStackFrame;)Lkotlinx/coroutines/UndispatchedCoroutine; +HSPLkotlinx/coroutines/CoroutineContextKt;->updateUndispatchedCompletion(Lkotlin/coroutines/Continuation;Lkotlin/coroutines/CoroutineContext;Ljava/lang/Object;)Lkotlinx/coroutines/UndispatchedCoroutine; +Lkotlinx/coroutines/CoroutineContextKt$hasCopyableElements$1; +HSPLkotlinx/coroutines/CoroutineContextKt$hasCopyableElements$1;->()V +HSPLkotlinx/coroutines/CoroutineContextKt$hasCopyableElements$1;->()V +HSPLkotlinx/coroutines/CoroutineContextKt$hasCopyableElements$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/CoroutineContextKt$hasCopyableElements$1;->invoke(ZLkotlin/coroutines/CoroutineContext$Element;)Ljava/lang/Boolean; +Lkotlinx/coroutines/CoroutineDispatcher; +HSPLkotlinx/coroutines/CoroutineDispatcher;->()V +HSPLkotlinx/coroutines/CoroutineDispatcher;->()V +HSPLkotlinx/coroutines/CoroutineDispatcher;->dispatchYield(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V +HSPLkotlinx/coroutines/CoroutineDispatcher;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; +HSPLkotlinx/coroutines/CoroutineDispatcher;->interceptContinuation(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLkotlinx/coroutines/CoroutineDispatcher;->isDispatchNeeded(Lkotlin/coroutines/CoroutineContext;)Z +HSPLkotlinx/coroutines/CoroutineDispatcher;->limitedParallelism(I)Lkotlinx/coroutines/CoroutineDispatcher; +HSPLkotlinx/coroutines/CoroutineDispatcher;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext; +HSPLkotlinx/coroutines/CoroutineDispatcher;->releaseInterceptedContinuation(Lkotlin/coroutines/Continuation;)V +Lkotlinx/coroutines/CoroutineDispatcher$Key; +HSPLkotlinx/coroutines/CoroutineDispatcher$Key;->()V +HSPLkotlinx/coroutines/CoroutineDispatcher$Key;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlinx/coroutines/CoroutineDispatcher$Key$1; +HSPLkotlinx/coroutines/CoroutineDispatcher$Key$1;->()V +HSPLkotlinx/coroutines/CoroutineDispatcher$Key$1;->()V +Lkotlinx/coroutines/CoroutineExceptionHandler; +HSPLkotlinx/coroutines/CoroutineExceptionHandler;->()V +Lkotlinx/coroutines/CoroutineExceptionHandler$Key; +HSPLkotlinx/coroutines/CoroutineExceptionHandler$Key;->()V +HSPLkotlinx/coroutines/CoroutineExceptionHandler$Key;->()V +Lkotlinx/coroutines/CoroutineId; +Lkotlinx/coroutines/CoroutineName; +HSPLkotlinx/coroutines/CoroutineName;->()V +HSPLkotlinx/coroutines/CoroutineName;->(Ljava/lang/String;)V +Lkotlinx/coroutines/CoroutineName$Key; +HSPLkotlinx/coroutines/CoroutineName$Key;->()V +HSPLkotlinx/coroutines/CoroutineName$Key;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlinx/coroutines/CoroutineScope; +Lkotlinx/coroutines/CoroutineScopeKt; +HSPLkotlinx/coroutines/CoroutineScopeKt;->CoroutineScope(Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/CoroutineScope; +HSPLkotlinx/coroutines/CoroutineScopeKt;->MainScope()Lkotlinx/coroutines/CoroutineScope; +HSPLkotlinx/coroutines/CoroutineScopeKt;->cancel(Lkotlinx/coroutines/CoroutineScope;Ljava/util/concurrent/CancellationException;)V +HSPLkotlinx/coroutines/CoroutineScopeKt;->coroutineScope(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/CoroutineScopeKt;->ensureActive(Lkotlinx/coroutines/CoroutineScope;)V +HSPLkotlinx/coroutines/CoroutineScopeKt;->isActive(Lkotlinx/coroutines/CoroutineScope;)Z +HSPLkotlinx/coroutines/CoroutineScopeKt;->plus(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/CoroutineScope; +Lkotlinx/coroutines/CoroutineStart; +HSPLkotlinx/coroutines/CoroutineStart;->$values()[Lkotlinx/coroutines/CoroutineStart; +HSPLkotlinx/coroutines/CoroutineStart;->()V +HSPLkotlinx/coroutines/CoroutineStart;->(Ljava/lang/String;I)V +HSPLkotlinx/coroutines/CoroutineStart;->invoke(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/CoroutineStart;->isLazy()Z +HSPLkotlinx/coroutines/CoroutineStart;->values()[Lkotlinx/coroutines/CoroutineStart; +Lkotlinx/coroutines/CoroutineStart$WhenMappings; +HSPLkotlinx/coroutines/CoroutineStart$WhenMappings;->()V +Lkotlinx/coroutines/DebugKt; +HSPLkotlinx/coroutines/DebugKt;->()V +HSPLkotlinx/coroutines/DebugKt;->getASSERTIONS_ENABLED()Z +HSPLkotlinx/coroutines/DebugKt;->getDEBUG()Z +HSPLkotlinx/coroutines/DebugKt;->getRECOVER_STACK_TRACES()Z +Lkotlinx/coroutines/DebugStringsKt; +HSPLkotlinx/coroutines/DebugStringsKt;->getClassSimpleName(Ljava/lang/Object;)Ljava/lang/String; +Lkotlinx/coroutines/DefaultExecutor; +HSPLkotlinx/coroutines/DefaultExecutor;->()V +HSPLkotlinx/coroutines/DefaultExecutor;->()V +HSPLkotlinx/coroutines/DefaultExecutor;->acknowledgeShutdownIfNeeded()V +HSPLkotlinx/coroutines/DefaultExecutor;->createThreadSync()Ljava/lang/Thread; +HSPLkotlinx/coroutines/DefaultExecutor;->getThread()Ljava/lang/Thread; +HSPLkotlinx/coroutines/DefaultExecutor;->invokeOnTimeout(JLjava/lang/Runnable;Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/DisposableHandle; +HSPLkotlinx/coroutines/DefaultExecutor;->isShutdownRequested()Z +HSPLkotlinx/coroutines/DefaultExecutor;->notifyStartup()Z +HSPLkotlinx/coroutines/DefaultExecutor;->run()V +Lkotlinx/coroutines/DefaultExecutorKt; +HSPLkotlinx/coroutines/DefaultExecutorKt;->()V +HSPLkotlinx/coroutines/DefaultExecutorKt;->getDefaultDelay()Lkotlinx/coroutines/Delay; +HSPLkotlinx/coroutines/DefaultExecutorKt;->initializeDefaultDelay()Lkotlinx/coroutines/Delay; +Lkotlinx/coroutines/Deferred; +Lkotlinx/coroutines/DeferredCoroutine; +HSPLkotlinx/coroutines/DeferredCoroutine;->(Lkotlin/coroutines/CoroutineContext;Z)V +HSPLkotlinx/coroutines/DeferredCoroutine;->await$suspendImpl(Lkotlinx/coroutines/DeferredCoroutine;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/DeferredCoroutine;->await(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/Delay; +Lkotlinx/coroutines/DelayKt; +HSPLkotlinx/coroutines/DelayKt;->awaitCancellation(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/DelayKt;->delay(JLkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/DelayKt;->delay-VtjQ1oo(JLkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/DelayKt;->getDelay(Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/Delay; +HSPLkotlinx/coroutines/DelayKt;->toDelayMillis-LRDsOJo(J)J +Lkotlinx/coroutines/DelayKt$awaitCancellation$1; +HSPLkotlinx/coroutines/DelayKt$awaitCancellation$1;->(Lkotlin/coroutines/Continuation;)V +Lkotlinx/coroutines/DispatchedCoroutine; +HSPLkotlinx/coroutines/DispatchedCoroutine;->()V +HSPLkotlinx/coroutines/DispatchedCoroutine;->(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/DispatchedCoroutine;->afterCompletion(Ljava/lang/Object;)V +HSPLkotlinx/coroutines/DispatchedCoroutine;->afterResume(Ljava/lang/Object;)V +HSPLkotlinx/coroutines/DispatchedCoroutine;->getResult$kotlinx_coroutines_core()Ljava/lang/Object; +HSPLkotlinx/coroutines/DispatchedCoroutine;->get_decision$volatile$FU$kotlinx_coroutines_core()Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater; +HSPLkotlinx/coroutines/DispatchedCoroutine;->tryResume()Z +HSPLkotlinx/coroutines/DispatchedCoroutine;->trySuspend()Z +Lkotlinx/coroutines/DispatchedTask; +HSPLkotlinx/coroutines/DispatchedTask;->(I)V +HSPLkotlinx/coroutines/DispatchedTask;->getExceptionalResult$kotlinx_coroutines_core(Ljava/lang/Object;)Ljava/lang/Throwable; +HSPLkotlinx/coroutines/DispatchedTask;->getSuccessfulResult$kotlinx_coroutines_core(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/DispatchedTask;->handleFatalException$kotlinx_coroutines_core(Ljava/lang/Throwable;Ljava/lang/Throwable;)V +HSPLkotlinx/coroutines/DispatchedTask;->run()V +Lkotlinx/coroutines/DispatchedTaskKt; +HSPLkotlinx/coroutines/DispatchedTaskKt;->dispatch(Lkotlinx/coroutines/DispatchedTask;I)V +HSPLkotlinx/coroutines/DispatchedTaskKt;->isCancellableMode(I)Z +HSPLkotlinx/coroutines/DispatchedTaskKt;->isReusableMode(I)Z +HSPLkotlinx/coroutines/DispatchedTaskKt;->resume(Lkotlinx/coroutines/DispatchedTask;Lkotlin/coroutines/Continuation;Z)V +HSPLkotlinx/coroutines/DispatchedTaskKt;->resumeUnconfined(Lkotlinx/coroutines/DispatchedTask;)V +Lkotlinx/coroutines/DispatcherExecutor; +Lkotlinx/coroutines/Dispatchers; +HSPLkotlinx/coroutines/Dispatchers;->()V +HSPLkotlinx/coroutines/Dispatchers;->()V +HSPLkotlinx/coroutines/Dispatchers;->getDefault()Lkotlinx/coroutines/CoroutineDispatcher; +HSPLkotlinx/coroutines/Dispatchers;->getIO()Lkotlinx/coroutines/CoroutineDispatcher; +HSPLkotlinx/coroutines/Dispatchers;->getMain()Lkotlinx/coroutines/MainCoroutineDispatcher; +Lkotlinx/coroutines/DisposableHandle; +Lkotlinx/coroutines/DisposeOnCancel; +HSPLkotlinx/coroutines/DisposeOnCancel;->(Lkotlinx/coroutines/DisposableHandle;)V +HSPLkotlinx/coroutines/DisposeOnCancel;->invoke(Ljava/lang/Throwable;)V +Lkotlinx/coroutines/Empty; +HSPLkotlinx/coroutines/Empty;->(Z)V +HSPLkotlinx/coroutines/Empty;->getList()Lkotlinx/coroutines/NodeList; +HSPLkotlinx/coroutines/Empty;->isActive()Z +Lkotlinx/coroutines/EventLoop; +HSPLkotlinx/coroutines/EventLoop;->()V +HSPLkotlinx/coroutines/EventLoop;->decrementUseCount$default(Lkotlinx/coroutines/EventLoop;ZILjava/lang/Object;)V +HSPLkotlinx/coroutines/EventLoop;->decrementUseCount(Z)V +HSPLkotlinx/coroutines/EventLoop;->delta(Z)J +HSPLkotlinx/coroutines/EventLoop;->dispatchUnconfined(Lkotlinx/coroutines/DispatchedTask;)V +HSPLkotlinx/coroutines/EventLoop;->getNextTime()J +HSPLkotlinx/coroutines/EventLoop;->incrementUseCount$default(Lkotlinx/coroutines/EventLoop;ZILjava/lang/Object;)V +HSPLkotlinx/coroutines/EventLoop;->incrementUseCount(Z)V +HSPLkotlinx/coroutines/EventLoop;->isUnconfinedLoopActive()Z +HSPLkotlinx/coroutines/EventLoop;->isUnconfinedQueueEmpty()Z +HSPLkotlinx/coroutines/EventLoop;->processUnconfinedEvent()Z +Lkotlinx/coroutines/EventLoopImplBase; +HSPLkotlinx/coroutines/EventLoopImplBase;->()V +HSPLkotlinx/coroutines/EventLoopImplBase;->()V +HSPLkotlinx/coroutines/EventLoopImplBase;->access$isCompleted(Lkotlinx/coroutines/EventLoopImplBase;)Z +HSPLkotlinx/coroutines/EventLoopImplBase;->closeQueue()V +HSPLkotlinx/coroutines/EventLoopImplBase;->dequeue()Ljava/lang/Runnable; +HSPLkotlinx/coroutines/EventLoopImplBase;->dispatch(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V +HSPLkotlinx/coroutines/EventLoopImplBase;->enqueue(Ljava/lang/Runnable;)V +HSPLkotlinx/coroutines/EventLoopImplBase;->enqueueImpl(Ljava/lang/Runnable;)Z +HSPLkotlinx/coroutines/EventLoopImplBase;->getNextTime()J +HSPLkotlinx/coroutines/EventLoopImplBase;->get_delayed$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/EventLoopImplBase;->get_isCompleted$volatile$FU()Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater; +HSPLkotlinx/coroutines/EventLoopImplBase;->get_queue$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/EventLoopImplBase;->isCompleted()Z +HSPLkotlinx/coroutines/EventLoopImplBase;->isEmpty()Z +HSPLkotlinx/coroutines/EventLoopImplBase;->processNextEvent()J +HSPLkotlinx/coroutines/EventLoopImplBase;->rescheduleAllDelayed()V +HSPLkotlinx/coroutines/EventLoopImplBase;->schedule(JLkotlinx/coroutines/EventLoopImplBase$DelayedTask;)V +HSPLkotlinx/coroutines/EventLoopImplBase;->scheduleImpl(JLkotlinx/coroutines/EventLoopImplBase$DelayedTask;)I +HSPLkotlinx/coroutines/EventLoopImplBase;->scheduleInvokeOnTimeout(JLjava/lang/Runnable;)Lkotlinx/coroutines/DisposableHandle; +HSPLkotlinx/coroutines/EventLoopImplBase;->scheduleResumeAfterDelay(JLkotlinx/coroutines/CancellableContinuation;)V +HSPLkotlinx/coroutines/EventLoopImplBase;->setCompleted(Z)V +HSPLkotlinx/coroutines/EventLoopImplBase;->shouldUnpark(Lkotlinx/coroutines/EventLoopImplBase$DelayedTask;)Z +HSPLkotlinx/coroutines/EventLoopImplBase;->shutdown()V +Lkotlinx/coroutines/EventLoopImplBase$DelayedResumeTask; +HSPLkotlinx/coroutines/EventLoopImplBase$DelayedResumeTask;->(Lkotlinx/coroutines/EventLoopImplBase;JLkotlinx/coroutines/CancellableContinuation;)V +HSPLkotlinx/coroutines/EventLoopImplBase$DelayedResumeTask;->run()V +Lkotlinx/coroutines/EventLoopImplBase$DelayedRunnableTask; +HSPLkotlinx/coroutines/EventLoopImplBase$DelayedRunnableTask;->(JLjava/lang/Runnable;)V +HSPLkotlinx/coroutines/EventLoopImplBase$DelayedRunnableTask;->run()V +Lkotlinx/coroutines/EventLoopImplBase$DelayedTask; +HSPLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->(J)V +HSPLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->compareTo(Ljava/lang/Object;)I +HSPLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->compareTo(Lkotlinx/coroutines/EventLoopImplBase$DelayedTask;)I +HSPLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->dispose()V +HSPLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->getHeap()Lkotlinx/coroutines/internal/ThreadSafeHeap; +HSPLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->getIndex()I +HSPLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->scheduleTask(JLkotlinx/coroutines/EventLoopImplBase$DelayedTaskQueue;Lkotlinx/coroutines/EventLoopImplBase;)I +HSPLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->setHeap(Lkotlinx/coroutines/internal/ThreadSafeHeap;)V +HSPLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->setIndex(I)V +HSPLkotlinx/coroutines/EventLoopImplBase$DelayedTask;->timeToExecute(J)Z +Lkotlinx/coroutines/EventLoopImplBase$DelayedTaskQueue; +HSPLkotlinx/coroutines/EventLoopImplBase$DelayedTaskQueue;->(J)V +Lkotlinx/coroutines/EventLoopImplPlatform; +HSPLkotlinx/coroutines/EventLoopImplPlatform;->()V +HSPLkotlinx/coroutines/EventLoopImplPlatform;->unpark()V +Lkotlinx/coroutines/EventLoopKt; +HSPLkotlinx/coroutines/EventLoopKt;->createEventLoop()Lkotlinx/coroutines/EventLoop; +Lkotlinx/coroutines/EventLoop_commonKt; +HSPLkotlinx/coroutines/EventLoop_commonKt;->()V +HSPLkotlinx/coroutines/EventLoop_commonKt;->access$getCLOSED_EMPTY$p()Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/EventLoop_commonKt;->access$getDISPOSED_TASK$p()Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/EventLoop_commonKt;->delayToNanos(J)J +Lkotlinx/coroutines/ExecutorCoroutineDispatcher; +HSPLkotlinx/coroutines/ExecutorCoroutineDispatcher;->()V +HSPLkotlinx/coroutines/ExecutorCoroutineDispatcher;->()V +Lkotlinx/coroutines/ExecutorCoroutineDispatcher$Key; +HSPLkotlinx/coroutines/ExecutorCoroutineDispatcher$Key;->()V +HSPLkotlinx/coroutines/ExecutorCoroutineDispatcher$Key;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlinx/coroutines/ExecutorCoroutineDispatcher$Key$1; +HSPLkotlinx/coroutines/ExecutorCoroutineDispatcher$Key$1;->()V +HSPLkotlinx/coroutines/ExecutorCoroutineDispatcher$Key$1;->()V +Lkotlinx/coroutines/ExecutorCoroutineDispatcherImpl; +HSPLkotlinx/coroutines/ExecutorCoroutineDispatcherImpl;->(Ljava/util/concurrent/Executor;)V +HSPLkotlinx/coroutines/ExecutorCoroutineDispatcherImpl;->dispatch(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V +HSPLkotlinx/coroutines/ExecutorCoroutineDispatcherImpl;->getExecutor()Ljava/util/concurrent/Executor; +Lkotlinx/coroutines/ExecutorsKt; +HSPLkotlinx/coroutines/ExecutorsKt;->from(Ljava/util/concurrent/Executor;)Lkotlinx/coroutines/CoroutineDispatcher; +Lkotlinx/coroutines/GlobalScope; +HSPLkotlinx/coroutines/GlobalScope;->()V +HSPLkotlinx/coroutines/GlobalScope;->()V +HSPLkotlinx/coroutines/GlobalScope;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext; +Lkotlinx/coroutines/InactiveNodeList; +Lkotlinx/coroutines/Incomplete; +Lkotlinx/coroutines/IncompleteStateBox; +Lkotlinx/coroutines/InvokeOnCancel; +HSPLkotlinx/coroutines/InvokeOnCancel;->(Lkotlin/jvm/functions/Function1;)V +HSPLkotlinx/coroutines/InvokeOnCancel;->invoke(Ljava/lang/Throwable;)V +Lkotlinx/coroutines/InvokeOnCancelling; +Lkotlinx/coroutines/InvokeOnCompletion; +HSPLkotlinx/coroutines/InvokeOnCompletion;->(Lkotlin/jvm/functions/Function1;)V +Lkotlinx/coroutines/Job; +HSPLkotlinx/coroutines/Job;->()V +Lkotlinx/coroutines/Job$DefaultImpls; +HSPLkotlinx/coroutines/Job$DefaultImpls;->cancel$default(Lkotlinx/coroutines/Job;Ljava/util/concurrent/CancellationException;ILjava/lang/Object;)V +HSPLkotlinx/coroutines/Job$DefaultImpls;->fold(Lkotlinx/coroutines/Job;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; +HSPLkotlinx/coroutines/Job$DefaultImpls;->get(Lkotlinx/coroutines/Job;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; +HSPLkotlinx/coroutines/Job$DefaultImpls;->invokeOnCompletion$default(Lkotlinx/coroutines/Job;ZZLkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lkotlinx/coroutines/DisposableHandle; +HSPLkotlinx/coroutines/Job$DefaultImpls;->minusKey(Lkotlinx/coroutines/Job;Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext; +HSPLkotlinx/coroutines/Job$DefaultImpls;->plus(Lkotlinx/coroutines/Job;Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext; +Lkotlinx/coroutines/Job$Key; +HSPLkotlinx/coroutines/Job$Key;->()V +HSPLkotlinx/coroutines/Job$Key;->()V +Lkotlinx/coroutines/JobCancellationException; +HSPLkotlinx/coroutines/JobCancellationException;->(Ljava/lang/String;Ljava/lang/Throwable;Lkotlinx/coroutines/Job;)V +HSPLkotlinx/coroutines/JobCancellationException;->equals(Ljava/lang/Object;)Z +HSPLkotlinx/coroutines/JobCancellationException;->fillInStackTrace()Ljava/lang/Throwable; +Lkotlinx/coroutines/JobCancellingNode; +HSPLkotlinx/coroutines/JobCancellingNode;->()V +Lkotlinx/coroutines/JobImpl; +HSPLkotlinx/coroutines/JobImpl;->(Lkotlinx/coroutines/Job;)V +HSPLkotlinx/coroutines/JobImpl;->getHandlesException$kotlinx_coroutines_core()Z +HSPLkotlinx/coroutines/JobImpl;->getOnCancelComplete$kotlinx_coroutines_core()Z +HSPLkotlinx/coroutines/JobImpl;->handlesException()Z +Lkotlinx/coroutines/JobKt; +HSPLkotlinx/coroutines/JobKt;->Job$default(Lkotlinx/coroutines/Job;ILjava/lang/Object;)Lkotlinx/coroutines/CompletableJob; +HSPLkotlinx/coroutines/JobKt;->Job(Lkotlinx/coroutines/Job;)Lkotlinx/coroutines/CompletableJob; +HSPLkotlinx/coroutines/JobKt;->cancelAndJoin(Lkotlinx/coroutines/Job;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/JobKt;->ensureActive(Lkotlin/coroutines/CoroutineContext;)V +HSPLkotlinx/coroutines/JobKt;->ensureActive(Lkotlinx/coroutines/Job;)V +HSPLkotlinx/coroutines/JobKt;->getJob(Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/Job; +HSPLkotlinx/coroutines/JobKt;->isActive(Lkotlin/coroutines/CoroutineContext;)Z +Lkotlinx/coroutines/JobKt__JobKt; +HSPLkotlinx/coroutines/JobKt__JobKt;->Job$default(Lkotlinx/coroutines/Job;ILjava/lang/Object;)Lkotlinx/coroutines/CompletableJob; +HSPLkotlinx/coroutines/JobKt__JobKt;->Job(Lkotlinx/coroutines/Job;)Lkotlinx/coroutines/CompletableJob; +HSPLkotlinx/coroutines/JobKt__JobKt;->cancelAndJoin(Lkotlinx/coroutines/Job;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/JobKt__JobKt;->ensureActive(Lkotlin/coroutines/CoroutineContext;)V +HSPLkotlinx/coroutines/JobKt__JobKt;->ensureActive(Lkotlinx/coroutines/Job;)V +HSPLkotlinx/coroutines/JobKt__JobKt;->getJob(Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/Job; +HSPLkotlinx/coroutines/JobKt__JobKt;->isActive(Lkotlin/coroutines/CoroutineContext;)Z +Lkotlinx/coroutines/JobNode; +HSPLkotlinx/coroutines/JobNode;->()V +HSPLkotlinx/coroutines/JobNode;->dispose()V +HSPLkotlinx/coroutines/JobNode;->getJob()Lkotlinx/coroutines/JobSupport; +HSPLkotlinx/coroutines/JobNode;->getList()Lkotlinx/coroutines/NodeList; +HSPLkotlinx/coroutines/JobNode;->isActive()Z +HSPLkotlinx/coroutines/JobNode;->setJob(Lkotlinx/coroutines/JobSupport;)V +Lkotlinx/coroutines/JobSupport; +HSPLkotlinx/coroutines/JobSupport;->()V +HSPLkotlinx/coroutines/JobSupport;->(Z)V +HSPLkotlinx/coroutines/JobSupport;->access$cancellationExceptionMessage(Lkotlinx/coroutines/JobSupport;)Ljava/lang/String; +HSPLkotlinx/coroutines/JobSupport;->access$continueCompleting(Lkotlinx/coroutines/JobSupport;Lkotlinx/coroutines/JobSupport$Finishing;Lkotlinx/coroutines/ChildHandleNode;Ljava/lang/Object;)V +HSPLkotlinx/coroutines/JobSupport;->addLastAtomic(Ljava/lang/Object;Lkotlinx/coroutines/NodeList;Lkotlinx/coroutines/JobNode;)Z +HSPLkotlinx/coroutines/JobSupport;->addSuppressedExceptions(Ljava/lang/Throwable;Ljava/util/List;)V +HSPLkotlinx/coroutines/JobSupport;->afterCompletion(Ljava/lang/Object;)V +HSPLkotlinx/coroutines/JobSupport;->attachChild(Lkotlinx/coroutines/ChildJob;)Lkotlinx/coroutines/ChildHandle; +HSPLkotlinx/coroutines/JobSupport;->awaitInternal(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/JobSupport;->awaitSuspend(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/JobSupport;->cancel(Ljava/util/concurrent/CancellationException;)V +HSPLkotlinx/coroutines/JobSupport;->cancelCoroutine(Ljava/lang/Throwable;)Z +HSPLkotlinx/coroutines/JobSupport;->cancelImpl$kotlinx_coroutines_core(Ljava/lang/Object;)Z +HSPLkotlinx/coroutines/JobSupport;->cancelInternal(Ljava/lang/Throwable;)V +HSPLkotlinx/coroutines/JobSupport;->cancelMakeCompleting(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/JobSupport;->cancelParent(Ljava/lang/Throwable;)Z +HSPLkotlinx/coroutines/JobSupport;->cancellationExceptionMessage()Ljava/lang/String; +HSPLkotlinx/coroutines/JobSupport;->childCancelled(Ljava/lang/Throwable;)Z +HSPLkotlinx/coroutines/JobSupport;->completeStateFinalization(Lkotlinx/coroutines/Incomplete;Ljava/lang/Object;)V +HSPLkotlinx/coroutines/JobSupport;->continueCompleting(Lkotlinx/coroutines/JobSupport$Finishing;Lkotlinx/coroutines/ChildHandleNode;Ljava/lang/Object;)V +HSPLkotlinx/coroutines/JobSupport;->createCauseException(Ljava/lang/Object;)Ljava/lang/Throwable; +HSPLkotlinx/coroutines/JobSupport;->finalizeFinishingState(Lkotlinx/coroutines/JobSupport$Finishing;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/JobSupport;->firstChild(Lkotlinx/coroutines/Incomplete;)Lkotlinx/coroutines/ChildHandleNode; +HSPLkotlinx/coroutines/JobSupport;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; +HSPLkotlinx/coroutines/JobSupport;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; +HSPLkotlinx/coroutines/JobSupport;->getCancellationException()Ljava/util/concurrent/CancellationException; +HSPLkotlinx/coroutines/JobSupport;->getChildJobCancellationCause()Ljava/util/concurrent/CancellationException; +HSPLkotlinx/coroutines/JobSupport;->getFinalRootCause(Lkotlinx/coroutines/JobSupport$Finishing;Ljava/util/List;)Ljava/lang/Throwable; +HSPLkotlinx/coroutines/JobSupport;->getKey()Lkotlin/coroutines/CoroutineContext$Key; +HSPLkotlinx/coroutines/JobSupport;->getOnCancelComplete$kotlinx_coroutines_core()Z +HSPLkotlinx/coroutines/JobSupport;->getOrPromoteCancellingList(Lkotlinx/coroutines/Incomplete;)Lkotlinx/coroutines/NodeList; +HSPLkotlinx/coroutines/JobSupport;->getParent()Lkotlinx/coroutines/Job; +HSPLkotlinx/coroutines/JobSupport;->getParentHandle$kotlinx_coroutines_core()Lkotlinx/coroutines/ChildHandle; +HSPLkotlinx/coroutines/JobSupport;->getState$kotlinx_coroutines_core()Ljava/lang/Object; +HSPLkotlinx/coroutines/JobSupport;->get_parentHandle$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/JobSupport;->get_state$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/JobSupport;->initParentJob(Lkotlinx/coroutines/Job;)V +HSPLkotlinx/coroutines/JobSupport;->invokeOnCompletion(Lkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/DisposableHandle; +HSPLkotlinx/coroutines/JobSupport;->invokeOnCompletion(ZZLkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/DisposableHandle; +HSPLkotlinx/coroutines/JobSupport;->isActive()Z +HSPLkotlinx/coroutines/JobSupport;->isCancelled()Z +HSPLkotlinx/coroutines/JobSupport;->isCompleted()Z +HSPLkotlinx/coroutines/JobSupport;->isScopedCoroutine()Z +HSPLkotlinx/coroutines/JobSupport;->join(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/JobSupport;->joinInternal()Z +HSPLkotlinx/coroutines/JobSupport;->joinSuspend(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/JobSupport;->makeCancelling(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/JobSupport;->makeCompletingOnce$kotlinx_coroutines_core(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/JobSupport;->makeNode(Lkotlin/jvm/functions/Function1;Z)Lkotlinx/coroutines/JobNode; +HSPLkotlinx/coroutines/JobSupport;->minusKey(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext; +HSPLkotlinx/coroutines/JobSupport;->nextChild(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)Lkotlinx/coroutines/ChildHandleNode; +HSPLkotlinx/coroutines/JobSupport;->notifyCancelling(Lkotlinx/coroutines/NodeList;Ljava/lang/Throwable;)V +HSPLkotlinx/coroutines/JobSupport;->notifyCompletion(Lkotlinx/coroutines/NodeList;Ljava/lang/Throwable;)V +HSPLkotlinx/coroutines/JobSupport;->onCancelling(Ljava/lang/Throwable;)V +HSPLkotlinx/coroutines/JobSupport;->onCompletionInternal(Ljava/lang/Object;)V +HSPLkotlinx/coroutines/JobSupport;->parentCancelled(Lkotlinx/coroutines/ParentJob;)V +HSPLkotlinx/coroutines/JobSupport;->plus(Lkotlin/coroutines/CoroutineContext;)Lkotlin/coroutines/CoroutineContext; +HSPLkotlinx/coroutines/JobSupport;->promoteSingleToNodeList(Lkotlinx/coroutines/JobNode;)V +HSPLkotlinx/coroutines/JobSupport;->removeNode$kotlinx_coroutines_core(Lkotlinx/coroutines/JobNode;)V +HSPLkotlinx/coroutines/JobSupport;->setParentHandle$kotlinx_coroutines_core(Lkotlinx/coroutines/ChildHandle;)V +HSPLkotlinx/coroutines/JobSupport;->start()Z +HSPLkotlinx/coroutines/JobSupport;->startInternal(Ljava/lang/Object;)I +HSPLkotlinx/coroutines/JobSupport;->toCancellationException$default(Lkotlinx/coroutines/JobSupport;Ljava/lang/Throwable;Ljava/lang/String;ILjava/lang/Object;)Ljava/util/concurrent/CancellationException; +HSPLkotlinx/coroutines/JobSupport;->toCancellationException(Ljava/lang/Throwable;Ljava/lang/String;)Ljava/util/concurrent/CancellationException; +HSPLkotlinx/coroutines/JobSupport;->tryFinalizeSimpleState(Lkotlinx/coroutines/Incomplete;Ljava/lang/Object;)Z +HSPLkotlinx/coroutines/JobSupport;->tryMakeCancelling(Lkotlinx/coroutines/Incomplete;Ljava/lang/Throwable;)Z +HSPLkotlinx/coroutines/JobSupport;->tryMakeCompleting(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/JobSupport;->tryMakeCompletingSlowPath(Lkotlinx/coroutines/Incomplete;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/JobSupport;->tryWaitForChild(Lkotlinx/coroutines/JobSupport$Finishing;Lkotlinx/coroutines/ChildHandleNode;Ljava/lang/Object;)Z +Lkotlinx/coroutines/JobSupport$AwaitContinuation; +HSPLkotlinx/coroutines/JobSupport$AwaitContinuation;->(Lkotlin/coroutines/Continuation;Lkotlinx/coroutines/JobSupport;)V +Lkotlinx/coroutines/JobSupport$ChildCompletion; +HSPLkotlinx/coroutines/JobSupport$ChildCompletion;->(Lkotlinx/coroutines/JobSupport;Lkotlinx/coroutines/JobSupport$Finishing;Lkotlinx/coroutines/ChildHandleNode;Ljava/lang/Object;)V +HSPLkotlinx/coroutines/JobSupport$ChildCompletion;->invoke(Ljava/lang/Throwable;)V +Lkotlinx/coroutines/JobSupport$Finishing; +HSPLkotlinx/coroutines/JobSupport$Finishing;->()V +HSPLkotlinx/coroutines/JobSupport$Finishing;->(Lkotlinx/coroutines/NodeList;ZLjava/lang/Throwable;)V +HSPLkotlinx/coroutines/JobSupport$Finishing;->addExceptionLocked(Ljava/lang/Throwable;)V +HSPLkotlinx/coroutines/JobSupport$Finishing;->allocateList()Ljava/util/ArrayList; +HSPLkotlinx/coroutines/JobSupport$Finishing;->getExceptionsHolder()Ljava/lang/Object; +HSPLkotlinx/coroutines/JobSupport$Finishing;->getList()Lkotlinx/coroutines/NodeList; +HSPLkotlinx/coroutines/JobSupport$Finishing;->getRootCause()Ljava/lang/Throwable; +HSPLkotlinx/coroutines/JobSupport$Finishing;->get_exceptionsHolder$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/JobSupport$Finishing;->get_isCompleting$volatile$FU()Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater; +HSPLkotlinx/coroutines/JobSupport$Finishing;->get_rootCause$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/JobSupport$Finishing;->isActive()Z +HSPLkotlinx/coroutines/JobSupport$Finishing;->isCancelling()Z +HSPLkotlinx/coroutines/JobSupport$Finishing;->isCompleting()Z +HSPLkotlinx/coroutines/JobSupport$Finishing;->isSealed()Z +HSPLkotlinx/coroutines/JobSupport$Finishing;->sealLocked(Ljava/lang/Throwable;)Ljava/util/List; +HSPLkotlinx/coroutines/JobSupport$Finishing;->setCompleting(Z)V +HSPLkotlinx/coroutines/JobSupport$Finishing;->setExceptionsHolder(Ljava/lang/Object;)V +HSPLkotlinx/coroutines/JobSupport$Finishing;->setRootCause(Ljava/lang/Throwable;)V +Lkotlinx/coroutines/JobSupport$addLastAtomic$$inlined$addLastIf$1; +HSPLkotlinx/coroutines/JobSupport$addLastAtomic$$inlined$addLastIf$1;->(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;Lkotlinx/coroutines/JobSupport;Ljava/lang/Object;)V +HSPLkotlinx/coroutines/JobSupport$addLastAtomic$$inlined$addLastIf$1;->prepare(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/JobSupport$addLastAtomic$$inlined$addLastIf$1;->prepare(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)Ljava/lang/Object; +Lkotlinx/coroutines/JobSupportKt; +HSPLkotlinx/coroutines/JobSupportKt;->()V +HSPLkotlinx/coroutines/JobSupportKt;->access$getCOMPLETING_ALREADY$p()Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/JobSupportKt;->access$getCOMPLETING_RETRY$p()Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/JobSupportKt;->access$getEMPTY_ACTIVE$p()Lkotlinx/coroutines/Empty; +HSPLkotlinx/coroutines/JobSupportKt;->access$getSEALED$p()Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/JobSupportKt;->access$getTOO_LATE_TO_CANCEL$p()Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/JobSupportKt;->boxIncomplete(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/JobSupportKt;->unboxState(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/MainCoroutineDispatcher; +HSPLkotlinx/coroutines/MainCoroutineDispatcher;->()V +Lkotlinx/coroutines/NodeList; +HSPLkotlinx/coroutines/NodeList;->()V +HSPLkotlinx/coroutines/NodeList;->getList()Lkotlinx/coroutines/NodeList; +HSPLkotlinx/coroutines/NodeList;->isActive()Z +Lkotlinx/coroutines/NonDisposableHandle; +HSPLkotlinx/coroutines/NonDisposableHandle;->()V +HSPLkotlinx/coroutines/NonDisposableHandle;->()V +HSPLkotlinx/coroutines/NonDisposableHandle;->dispose()V +Lkotlinx/coroutines/NotCompleted; +Lkotlinx/coroutines/ParentJob; +Lkotlinx/coroutines/ResumeAwaitOnCompletion; +HSPLkotlinx/coroutines/ResumeAwaitOnCompletion;->(Lkotlinx/coroutines/CancellableContinuationImpl;)V +HSPLkotlinx/coroutines/ResumeAwaitOnCompletion;->invoke(Ljava/lang/Throwable;)V +Lkotlinx/coroutines/ResumeOnCompletion; +HSPLkotlinx/coroutines/ResumeOnCompletion;->(Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/ResumeOnCompletion;->invoke(Ljava/lang/Throwable;)V +Lkotlinx/coroutines/StandaloneCoroutine; +HSPLkotlinx/coroutines/StandaloneCoroutine;->(Lkotlin/coroutines/CoroutineContext;Z)V +Lkotlinx/coroutines/SupervisorJobImpl; +HSPLkotlinx/coroutines/SupervisorJobImpl;->(Lkotlinx/coroutines/Job;)V +Lkotlinx/coroutines/SupervisorKt; +HSPLkotlinx/coroutines/SupervisorKt;->SupervisorJob$default(Lkotlinx/coroutines/Job;ILjava/lang/Object;)Lkotlinx/coroutines/CompletableJob; +HSPLkotlinx/coroutines/SupervisorKt;->SupervisorJob(Lkotlinx/coroutines/Job;)Lkotlinx/coroutines/CompletableJob; +Lkotlinx/coroutines/ThreadContextElement; +Lkotlinx/coroutines/ThreadContextElement$DefaultImpls; +HSPLkotlinx/coroutines/ThreadContextElement$DefaultImpls;->fold(Lkotlinx/coroutines/ThreadContextElement;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; +Lkotlinx/coroutines/ThreadContextElementKt; +HSPLkotlinx/coroutines/ThreadContextElementKt;->asContextElement(Ljava/lang/ThreadLocal;Ljava/lang/Object;)Lkotlinx/coroutines/ThreadContextElement; +Lkotlinx/coroutines/ThreadLocalEventLoop; +HSPLkotlinx/coroutines/ThreadLocalEventLoop;->()V +HSPLkotlinx/coroutines/ThreadLocalEventLoop;->()V +HSPLkotlinx/coroutines/ThreadLocalEventLoop;->getEventLoop$kotlinx_coroutines_core()Lkotlinx/coroutines/EventLoop; +HSPLkotlinx/coroutines/ThreadLocalEventLoop;->resetEventLoop$kotlinx_coroutines_core()V +HSPLkotlinx/coroutines/ThreadLocalEventLoop;->setEventLoop$kotlinx_coroutines_core(Lkotlinx/coroutines/EventLoop;)V +Lkotlinx/coroutines/TimeoutCancellationException; +Lkotlinx/coroutines/Unconfined; +HSPLkotlinx/coroutines/Unconfined;->()V +HSPLkotlinx/coroutines/Unconfined;->()V +Lkotlinx/coroutines/UndispatchedCoroutine; +HSPLkotlinx/coroutines/UndispatchedCoroutine;->(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/UndispatchedCoroutine;->afterResume(Ljava/lang/Object;)V +HSPLkotlinx/coroutines/UndispatchedCoroutine;->clearThreadContext()Z +HSPLkotlinx/coroutines/UndispatchedCoroutine;->saveThreadContext(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Object;)V +Lkotlinx/coroutines/UndispatchedMarker; +HSPLkotlinx/coroutines/UndispatchedMarker;->()V +HSPLkotlinx/coroutines/UndispatchedMarker;->()V +HSPLkotlinx/coroutines/UndispatchedMarker;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; +HSPLkotlinx/coroutines/UndispatchedMarker;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; +HSPLkotlinx/coroutines/UndispatchedMarker;->getKey()Lkotlin/coroutines/CoroutineContext$Key; +Lkotlinx/coroutines/Waiter; +Lkotlinx/coroutines/YieldContext; +HSPLkotlinx/coroutines/YieldContext;->()V +HSPLkotlinx/coroutines/YieldContext;->()V +Lkotlinx/coroutines/YieldContext$Key; +HSPLkotlinx/coroutines/YieldContext$Key;->()V +HSPLkotlinx/coroutines/YieldContext$Key;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlinx/coroutines/YieldKt; +HSPLkotlinx/coroutines/YieldKt;->yield(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/android/AndroidDispatcherFactory; +HSPLkotlinx/coroutines/android/AndroidDispatcherFactory;->()V +HSPLkotlinx/coroutines/android/AndroidDispatcherFactory;->createDispatcher(Ljava/util/List;)Lkotlinx/coroutines/MainCoroutineDispatcher; +Lkotlinx/coroutines/android/HandlerContext; +HSPLkotlinx/coroutines/android/HandlerContext;->(Landroid/os/Handler;Ljava/lang/String;)V +HSPLkotlinx/coroutines/android/HandlerContext;->(Landroid/os/Handler;Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlinx/coroutines/android/HandlerContext;->(Landroid/os/Handler;Ljava/lang/String;Z)V +HSPLkotlinx/coroutines/android/HandlerContext;->dispatch(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V +HSPLkotlinx/coroutines/android/HandlerContext;->equals(Ljava/lang/Object;)Z +HSPLkotlinx/coroutines/android/HandlerContext;->getImmediate()Lkotlinx/coroutines/MainCoroutineDispatcher; +HSPLkotlinx/coroutines/android/HandlerContext;->getImmediate()Lkotlinx/coroutines/android/HandlerContext; +HSPLkotlinx/coroutines/android/HandlerContext;->getImmediate()Lkotlinx/coroutines/android/HandlerDispatcher; +HSPLkotlinx/coroutines/android/HandlerContext;->isDispatchNeeded(Lkotlin/coroutines/CoroutineContext;)Z +HSPLkotlinx/coroutines/android/HandlerContext;->scheduleResumeAfterDelay(JLkotlinx/coroutines/CancellableContinuation;)V +Lkotlinx/coroutines/android/HandlerContext$scheduleResumeAfterDelay$$inlined$Runnable$1; +HSPLkotlinx/coroutines/android/HandlerContext$scheduleResumeAfterDelay$$inlined$Runnable$1;->(Lkotlinx/coroutines/CancellableContinuation;Lkotlinx/coroutines/android/HandlerContext;)V +HSPLkotlinx/coroutines/android/HandlerContext$scheduleResumeAfterDelay$$inlined$Runnable$1;->run()V +Lkotlinx/coroutines/android/HandlerContext$scheduleResumeAfterDelay$1; +HSPLkotlinx/coroutines/android/HandlerContext$scheduleResumeAfterDelay$1;->(Lkotlinx/coroutines/android/HandlerContext;Ljava/lang/Runnable;)V +Lkotlinx/coroutines/android/HandlerDispatcher; +HSPLkotlinx/coroutines/android/HandlerDispatcher;->()V +HSPLkotlinx/coroutines/android/HandlerDispatcher;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlinx/coroutines/android/HandlerDispatcherKt; +HSPLkotlinx/coroutines/android/HandlerDispatcherKt;->()V +HSPLkotlinx/coroutines/android/HandlerDispatcherKt;->asHandler(Landroid/os/Looper;Z)Landroid/os/Handler; +HSPLkotlinx/coroutines/android/HandlerDispatcherKt;->from(Landroid/os/Handler;Ljava/lang/String;)Lkotlinx/coroutines/android/HandlerDispatcher; +Lkotlinx/coroutines/channels/BufferOverflow; +HSPLkotlinx/coroutines/channels/BufferOverflow;->$values()[Lkotlinx/coroutines/channels/BufferOverflow; +HSPLkotlinx/coroutines/channels/BufferOverflow;->()V +HSPLkotlinx/coroutines/channels/BufferOverflow;->(Ljava/lang/String;I)V +Lkotlinx/coroutines/channels/BufferedChannel; +HSPLkotlinx/coroutines/channels/BufferedChannel;->()V +HSPLkotlinx/coroutines/channels/BufferedChannel;->(ILkotlin/jvm/functions/Function1;)V +HSPLkotlinx/coroutines/channels/BufferedChannel;->access$findSegmentReceive(Lkotlinx/coroutines/channels/BufferedChannel;JLkotlinx/coroutines/channels/ChannelSegment;)Lkotlinx/coroutines/channels/ChannelSegment; +HSPLkotlinx/coroutines/channels/BufferedChannel;->access$findSegmentSend(Lkotlinx/coroutines/channels/BufferedChannel;JLkotlinx/coroutines/channels/ChannelSegment;)Lkotlinx/coroutines/channels/ChannelSegment; +HSPLkotlinx/coroutines/channels/BufferedChannel;->access$getReceiveSegment$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/channels/BufferedChannel;->access$getReceivers$volatile$FU()Ljava/util/concurrent/atomic/AtomicLongFieldUpdater; +HSPLkotlinx/coroutines/channels/BufferedChannel;->access$getSendSegment$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/channels/BufferedChannel;->access$getSendersAndCloseStatus$volatile$FU()Ljava/util/concurrent/atomic/AtomicLongFieldUpdater; +HSPLkotlinx/coroutines/channels/BufferedChannel;->access$isClosedForSend0(Lkotlinx/coroutines/channels/BufferedChannel;J)Z +HSPLkotlinx/coroutines/channels/BufferedChannel;->access$prepareReceiverForSuspension(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/Waiter;Lkotlinx/coroutines/channels/ChannelSegment;I)V +HSPLkotlinx/coroutines/channels/BufferedChannel;->access$prepareSenderForSuspension(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/Waiter;Lkotlinx/coroutines/channels/ChannelSegment;I)V +HSPLkotlinx/coroutines/channels/BufferedChannel;->access$processResultSelectReceiveCatching(Lkotlinx/coroutines/channels/BufferedChannel;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/BufferedChannel;->access$receiveCatchingOnNoWaiterSuspend-GKJJFZk(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/channels/ChannelSegment;IJLkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/BufferedChannel;->access$registerSelectForReceive(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/selects/SelectInstance;Ljava/lang/Object;)V +HSPLkotlinx/coroutines/channels/BufferedChannel;->access$updateCellReceive(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/channels/ChannelSegment;IJLjava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/BufferedChannel;->access$updateCellSend(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/channels/ChannelSegment;ILjava/lang/Object;JLjava/lang/Object;Z)I +HSPLkotlinx/coroutines/channels/BufferedChannel;->bufferOrRendezvousSend(J)Z +HSPLkotlinx/coroutines/channels/BufferedChannel;->cancel(Ljava/util/concurrent/CancellationException;)V +HSPLkotlinx/coroutines/channels/BufferedChannel;->cancelImpl$kotlinx_coroutines_core(Ljava/lang/Throwable;)Z +HSPLkotlinx/coroutines/channels/BufferedChannel;->cancelSuspendedReceiveRequests(Lkotlinx/coroutines/channels/ChannelSegment;J)V +HSPLkotlinx/coroutines/channels/BufferedChannel;->close(Ljava/lang/Throwable;)Z +HSPLkotlinx/coroutines/channels/BufferedChannel;->closeLinkedList()Lkotlinx/coroutines/channels/ChannelSegment; +HSPLkotlinx/coroutines/channels/BufferedChannel;->closeOrCancelImpl(Ljava/lang/Throwable;Z)Z +HSPLkotlinx/coroutines/channels/BufferedChannel;->completeCancel(J)V +HSPLkotlinx/coroutines/channels/BufferedChannel;->completeClose(J)Lkotlinx/coroutines/channels/ChannelSegment; +HSPLkotlinx/coroutines/channels/BufferedChannel;->completeCloseOrCancel()V +HSPLkotlinx/coroutines/channels/BufferedChannel;->dropFirstElementUntilTheSpecifiedCellIsInTheBuffer(J)V +HSPLkotlinx/coroutines/channels/BufferedChannel;->expandBuffer()V +HSPLkotlinx/coroutines/channels/BufferedChannel;->findSegmentBufferEnd(JLkotlinx/coroutines/channels/ChannelSegment;J)Lkotlinx/coroutines/channels/ChannelSegment; +HSPLkotlinx/coroutines/channels/BufferedChannel;->findSegmentReceive(JLkotlinx/coroutines/channels/ChannelSegment;)Lkotlinx/coroutines/channels/ChannelSegment; +HSPLkotlinx/coroutines/channels/BufferedChannel;->findSegmentSend(JLkotlinx/coroutines/channels/ChannelSegment;)Lkotlinx/coroutines/channels/ChannelSegment; +HSPLkotlinx/coroutines/channels/BufferedChannel;->getBufferEnd$volatile$FU()Ljava/util/concurrent/atomic/AtomicLongFieldUpdater; +HSPLkotlinx/coroutines/channels/BufferedChannel;->getBufferEndCounter()J +HSPLkotlinx/coroutines/channels/BufferedChannel;->getBufferEndSegment$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/channels/BufferedChannel;->getCloseCause()Ljava/lang/Throwable; +HSPLkotlinx/coroutines/channels/BufferedChannel;->getCloseHandler$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/channels/BufferedChannel;->getCompletedExpandBuffersAndPauseFlag$volatile$FU()Ljava/util/concurrent/atomic/AtomicLongFieldUpdater; +HSPLkotlinx/coroutines/channels/BufferedChannel;->getOnReceiveCatching()Lkotlinx/coroutines/selects/SelectClause1; +HSPLkotlinx/coroutines/channels/BufferedChannel;->getReceiveSegment$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/channels/BufferedChannel;->getReceivers$volatile$FU()Ljava/util/concurrent/atomic/AtomicLongFieldUpdater; +HSPLkotlinx/coroutines/channels/BufferedChannel;->getReceiversCounter$kotlinx_coroutines_core()J +HSPLkotlinx/coroutines/channels/BufferedChannel;->getSendSegment$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/channels/BufferedChannel;->getSendersAndCloseStatus$volatile$FU()Ljava/util/concurrent/atomic/AtomicLongFieldUpdater; +HSPLkotlinx/coroutines/channels/BufferedChannel;->getSendersCounter$kotlinx_coroutines_core()J +HSPLkotlinx/coroutines/channels/BufferedChannel;->get_closeCause$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/channels/BufferedChannel;->hasElements$kotlinx_coroutines_core()Z +HSPLkotlinx/coroutines/channels/BufferedChannel;->incCompletedExpandBufferAttempts$default(Lkotlinx/coroutines/channels/BufferedChannel;JILjava/lang/Object;)V +HSPLkotlinx/coroutines/channels/BufferedChannel;->incCompletedExpandBufferAttempts(J)V +HSPLkotlinx/coroutines/channels/BufferedChannel;->invokeCloseHandler()V +HSPLkotlinx/coroutines/channels/BufferedChannel;->invokeOnClose(Lkotlin/jvm/functions/Function1;)V +HSPLkotlinx/coroutines/channels/BufferedChannel;->isClosed(JZ)Z +HSPLkotlinx/coroutines/channels/BufferedChannel;->isClosedForReceive()Z +HSPLkotlinx/coroutines/channels/BufferedChannel;->isClosedForReceive0(J)Z +HSPLkotlinx/coroutines/channels/BufferedChannel;->isClosedForSend()Z +HSPLkotlinx/coroutines/channels/BufferedChannel;->isClosedForSend0(J)Z +HSPLkotlinx/coroutines/channels/BufferedChannel;->isConflatedDropOldest()Z +HSPLkotlinx/coroutines/channels/BufferedChannel;->isRendezvousOrUnlimited()Z +HSPLkotlinx/coroutines/channels/BufferedChannel;->iterator()Lkotlinx/coroutines/channels/ChannelIterator; +HSPLkotlinx/coroutines/channels/BufferedChannel;->markAllEmptyCellsAsClosed(Lkotlinx/coroutines/channels/ChannelSegment;)J +HSPLkotlinx/coroutines/channels/BufferedChannel;->markCancellationStarted()V +HSPLkotlinx/coroutines/channels/BufferedChannel;->markCancelled()V +HSPLkotlinx/coroutines/channels/BufferedChannel;->markClosed()V +HSPLkotlinx/coroutines/channels/BufferedChannel;->onClosedIdempotent()V +HSPLkotlinx/coroutines/channels/BufferedChannel;->onReceiveDequeued()V +HSPLkotlinx/coroutines/channels/BufferedChannel;->onReceiveEnqueued()V +HSPLkotlinx/coroutines/channels/BufferedChannel;->prepareReceiverForSuspension(Lkotlinx/coroutines/Waiter;Lkotlinx/coroutines/channels/ChannelSegment;I)V +HSPLkotlinx/coroutines/channels/BufferedChannel;->prepareSenderForSuspension(Lkotlinx/coroutines/Waiter;Lkotlinx/coroutines/channels/ChannelSegment;I)V +HSPLkotlinx/coroutines/channels/BufferedChannel;->processResultSelectReceiveCatching(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/BufferedChannel;->receive$suspendImpl(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/BufferedChannel;->receive(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/BufferedChannel;->receiveCatching-JP2dKIU$suspendImpl(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/BufferedChannel;->receiveCatching-JP2dKIU(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/BufferedChannel;->receiveCatchingOnNoWaiterSuspend-GKJJFZk(Lkotlinx/coroutines/channels/ChannelSegment;IJLkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/BufferedChannel;->receiveOnNoWaiterSuspend(Lkotlinx/coroutines/channels/ChannelSegment;IJLkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/BufferedChannel;->registerSelectForReceive(Lkotlinx/coroutines/selects/SelectInstance;Ljava/lang/Object;)V +HSPLkotlinx/coroutines/channels/BufferedChannel;->removeUnprocessedElements(Lkotlinx/coroutines/channels/ChannelSegment;)V +HSPLkotlinx/coroutines/channels/BufferedChannel;->resumeReceiverOnClosedChannel(Lkotlinx/coroutines/Waiter;)V +HSPLkotlinx/coroutines/channels/BufferedChannel;->resumeWaiterOnClosedChannel(Lkotlinx/coroutines/Waiter;Z)V +HSPLkotlinx/coroutines/channels/BufferedChannel;->send$suspendImpl(Lkotlinx/coroutines/channels/BufferedChannel;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/BufferedChannel;->send(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/BufferedChannel;->sendOnNoWaiterSuspend(Lkotlinx/coroutines/channels/ChannelSegment;ILjava/lang/Object;JLkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/BufferedChannel;->shouldSendSuspend(J)Z +HSPLkotlinx/coroutines/channels/BufferedChannel;->tryReceive-PtdJZtk()Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/BufferedChannel;->tryResumeReceiver(Ljava/lang/Object;Ljava/lang/Object;)Z +HSPLkotlinx/coroutines/channels/BufferedChannel;->tryResumeSender(Ljava/lang/Object;Lkotlinx/coroutines/channels/ChannelSegment;I)Z +HSPLkotlinx/coroutines/channels/BufferedChannel;->trySend-JP2dKIU(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/BufferedChannel;->updateCellExpandBuffer(Lkotlinx/coroutines/channels/ChannelSegment;IJ)Z +HSPLkotlinx/coroutines/channels/BufferedChannel;->updateCellExpandBufferSlow(Lkotlinx/coroutines/channels/ChannelSegment;IJ)Z +HSPLkotlinx/coroutines/channels/BufferedChannel;->updateCellReceive(Lkotlinx/coroutines/channels/ChannelSegment;IJLjava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/BufferedChannel;->updateCellReceiveSlow(Lkotlinx/coroutines/channels/ChannelSegment;IJLjava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/BufferedChannel;->updateCellSend(Lkotlinx/coroutines/channels/ChannelSegment;ILjava/lang/Object;JLjava/lang/Object;Z)I +HSPLkotlinx/coroutines/channels/BufferedChannel;->updateCellSendSlow(Lkotlinx/coroutines/channels/ChannelSegment;ILjava/lang/Object;JLjava/lang/Object;Z)I +HSPLkotlinx/coroutines/channels/BufferedChannel;->waitExpandBufferCompletion$kotlinx_coroutines_core(J)V +Lkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator; +HSPLkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;->(Lkotlinx/coroutines/channels/BufferedChannel;)V +HSPLkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;->access$setContinuation$p(Lkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;Lkotlinx/coroutines/CancellableContinuationImpl;)V +HSPLkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;->hasNext(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;->hasNextOnNoWaiterSuspend(Lkotlinx/coroutines/channels/ChannelSegment;IJLkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;->invokeOnCancellation(Lkotlinx/coroutines/internal/Segment;I)V +HSPLkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;->next()Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;->tryResumeHasNext(Ljava/lang/Object;)Z +HSPLkotlinx/coroutines/channels/BufferedChannel$BufferedChannelIterator;->tryResumeHasNextOnClosedChannel()V +Lkotlinx/coroutines/channels/BufferedChannel$SendBroadcast; +Lkotlinx/coroutines/channels/BufferedChannel$onReceiveCatching$1; +HSPLkotlinx/coroutines/channels/BufferedChannel$onReceiveCatching$1;->()V +HSPLkotlinx/coroutines/channels/BufferedChannel$onReceiveCatching$1;->()V +HSPLkotlinx/coroutines/channels/BufferedChannel$onReceiveCatching$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/BufferedChannel$onReceiveCatching$1;->invoke(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlinx/coroutines/selects/SelectInstance;Ljava/lang/Object;)V +Lkotlinx/coroutines/channels/BufferedChannel$onReceiveCatching$2; +HSPLkotlinx/coroutines/channels/BufferedChannel$onReceiveCatching$2;->()V +HSPLkotlinx/coroutines/channels/BufferedChannel$onReceiveCatching$2;->()V +HSPLkotlinx/coroutines/channels/BufferedChannel$onReceiveCatching$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/BufferedChannel$onReceiveCatching$2;->invoke(Lkotlinx/coroutines/channels/BufferedChannel;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/channels/BufferedChannel$receiveCatching$1; +HSPLkotlinx/coroutines/channels/BufferedChannel$receiveCatching$1;->(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/channels/BufferedChannel$receiveCatching$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/channels/BufferedChannel$receiveCatchingOnNoWaiterSuspend$1; +HSPLkotlinx/coroutines/channels/BufferedChannel$receiveCatchingOnNoWaiterSuspend$1;->(Lkotlinx/coroutines/channels/BufferedChannel;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/channels/BufferedChannel$receiveCatchingOnNoWaiterSuspend$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/channels/BufferedChannelKt; +HSPLkotlinx/coroutines/channels/BufferedChannelKt;->()V +HSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$constructSendersAndCloseStatus(JI)J +HSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$createSegment(JLkotlinx/coroutines/channels/ChannelSegment;)Lkotlinx/coroutines/channels/ChannelSegment; +HSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getCLOSE_HANDLER_CLOSED$p()Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getCLOSE_HANDLER_INVOKED$p()Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getDONE_RCV$p()Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getEXPAND_BUFFER_COMPLETION_WAIT_ITERATIONS$p()I +HSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getFAILED$p()Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getINTERRUPTED_RCV$p()Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getINTERRUPTED_SEND$p()Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getIN_BUFFER$p()Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getNO_CLOSE_CAUSE$p()Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getNO_RECEIVE_RESULT$p()Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getNULL_SEGMENT$p()Lkotlinx/coroutines/channels/ChannelSegment; +HSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getRESUMING_BY_EB$p()Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getRESUMING_BY_RCV$p()Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getSUSPEND$p()Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$getSUSPEND_NO_WAITER$p()Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$initialBufferEnd(I)J +HSPLkotlinx/coroutines/channels/BufferedChannelKt;->access$tryResume0(Lkotlinx/coroutines/CancellableContinuation;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Z +HSPLkotlinx/coroutines/channels/BufferedChannelKt;->constructSendersAndCloseStatus(JI)J +HSPLkotlinx/coroutines/channels/BufferedChannelKt;->createSegment(JLkotlinx/coroutines/channels/ChannelSegment;)Lkotlinx/coroutines/channels/ChannelSegment; +HSPLkotlinx/coroutines/channels/BufferedChannelKt;->createSegmentFunction()Lkotlin/reflect/KFunction; +HSPLkotlinx/coroutines/channels/BufferedChannelKt;->getCHANNEL_CLOSED()Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/channels/BufferedChannelKt;->initialBufferEnd(I)J +HSPLkotlinx/coroutines/channels/BufferedChannelKt;->tryResume0$default(Lkotlinx/coroutines/CancellableContinuation;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Z +HSPLkotlinx/coroutines/channels/BufferedChannelKt;->tryResume0(Lkotlinx/coroutines/CancellableContinuation;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Z +Lkotlinx/coroutines/channels/BufferedChannelKt$createSegmentFunction$1; +HSPLkotlinx/coroutines/channels/BufferedChannelKt$createSegmentFunction$1;->()V +HSPLkotlinx/coroutines/channels/BufferedChannelKt$createSegmentFunction$1;->()V +HSPLkotlinx/coroutines/channels/BufferedChannelKt$createSegmentFunction$1;->invoke(JLkotlinx/coroutines/channels/ChannelSegment;)Lkotlinx/coroutines/channels/ChannelSegment; +HSPLkotlinx/coroutines/channels/BufferedChannelKt$createSegmentFunction$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/channels/Channel; +HSPLkotlinx/coroutines/channels/Channel;->()V +Lkotlinx/coroutines/channels/Channel$Factory; +HSPLkotlinx/coroutines/channels/Channel$Factory;->()V +HSPLkotlinx/coroutines/channels/Channel$Factory;->()V +HSPLkotlinx/coroutines/channels/Channel$Factory;->getCHANNEL_DEFAULT_CAPACITY$kotlinx_coroutines_core()I +Lkotlinx/coroutines/channels/ChannelCoroutine; +HSPLkotlinx/coroutines/channels/ChannelCoroutine;->(Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/channels/Channel;ZZ)V +HSPLkotlinx/coroutines/channels/ChannelCoroutine;->cancel(Ljava/util/concurrent/CancellationException;)V +HSPLkotlinx/coroutines/channels/ChannelCoroutine;->cancelInternal(Ljava/lang/Throwable;)V +HSPLkotlinx/coroutines/channels/ChannelCoroutine;->getChannel()Lkotlinx/coroutines/channels/Channel; +HSPLkotlinx/coroutines/channels/ChannelCoroutine;->getOnReceiveCatching()Lkotlinx/coroutines/selects/SelectClause1; +HSPLkotlinx/coroutines/channels/ChannelCoroutine;->get_channel()Lkotlinx/coroutines/channels/Channel; +HSPLkotlinx/coroutines/channels/ChannelCoroutine;->invokeOnClose(Lkotlin/jvm/functions/Function1;)V +HSPLkotlinx/coroutines/channels/ChannelCoroutine;->iterator()Lkotlinx/coroutines/channels/ChannelIterator; +HSPLkotlinx/coroutines/channels/ChannelCoroutine;->send(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/ChannelCoroutine;->trySend-JP2dKIU(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/channels/ChannelIterator; +Lkotlinx/coroutines/channels/ChannelKt; +HSPLkotlinx/coroutines/channels/ChannelKt;->Channel$default(ILkotlinx/coroutines/channels/BufferOverflow;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lkotlinx/coroutines/channels/Channel; +HSPLkotlinx/coroutines/channels/ChannelKt;->Channel(ILkotlinx/coroutines/channels/BufferOverflow;Lkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/channels/Channel; +Lkotlinx/coroutines/channels/ChannelResult; +HSPLkotlinx/coroutines/channels/ChannelResult;->()V +HSPLkotlinx/coroutines/channels/ChannelResult;->(Ljava/lang/Object;)V +HSPLkotlinx/coroutines/channels/ChannelResult;->access$getFailed$cp()Lkotlinx/coroutines/channels/ChannelResult$Failed; +HSPLkotlinx/coroutines/channels/ChannelResult;->box-impl(Ljava/lang/Object;)Lkotlinx/coroutines/channels/ChannelResult; +HSPLkotlinx/coroutines/channels/ChannelResult;->constructor-impl(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/ChannelResult;->getOrNull-impl(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/ChannelResult;->isSuccess-impl(Ljava/lang/Object;)Z +HSPLkotlinx/coroutines/channels/ChannelResult;->unbox-impl()Ljava/lang/Object; +Lkotlinx/coroutines/channels/ChannelResult$Closed; +HSPLkotlinx/coroutines/channels/ChannelResult$Closed;->(Ljava/lang/Throwable;)V +Lkotlinx/coroutines/channels/ChannelResult$Companion; +HSPLkotlinx/coroutines/channels/ChannelResult$Companion;->()V +HSPLkotlinx/coroutines/channels/ChannelResult$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlinx/coroutines/channels/ChannelResult$Companion;->closed-JP2dKIU(Ljava/lang/Throwable;)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/ChannelResult$Companion;->failure-PtdJZtk()Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/ChannelResult$Companion;->success-JP2dKIU(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/channels/ChannelResult$Failed; +HSPLkotlinx/coroutines/channels/ChannelResult$Failed;->()V +Lkotlinx/coroutines/channels/ChannelSegment; +HSPLkotlinx/coroutines/channels/ChannelSegment;->(JLkotlinx/coroutines/channels/ChannelSegment;Lkotlinx/coroutines/channels/BufferedChannel;I)V +HSPLkotlinx/coroutines/channels/ChannelSegment;->casState$kotlinx_coroutines_core(ILjava/lang/Object;Ljava/lang/Object;)Z +HSPLkotlinx/coroutines/channels/ChannelSegment;->cleanElement$kotlinx_coroutines_core(I)V +HSPLkotlinx/coroutines/channels/ChannelSegment;->getChannel()Lkotlinx/coroutines/channels/BufferedChannel; +HSPLkotlinx/coroutines/channels/ChannelSegment;->getData()Ljava/util/concurrent/atomic/AtomicReferenceArray; +HSPLkotlinx/coroutines/channels/ChannelSegment;->getElement$kotlinx_coroutines_core(I)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/ChannelSegment;->getNumberOfSlots()I +HSPLkotlinx/coroutines/channels/ChannelSegment;->getState$kotlinx_coroutines_core(I)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/ChannelSegment;->onCancellation(ILjava/lang/Throwable;Lkotlin/coroutines/CoroutineContext;)V +HSPLkotlinx/coroutines/channels/ChannelSegment;->onCancelledRequest(IZ)V +HSPLkotlinx/coroutines/channels/ChannelSegment;->retrieveElement$kotlinx_coroutines_core(I)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/ChannelSegment;->setElementLazy(ILjava/lang/Object;)V +HSPLkotlinx/coroutines/channels/ChannelSegment;->setState$kotlinx_coroutines_core(ILjava/lang/Object;)V +HSPLkotlinx/coroutines/channels/ChannelSegment;->storeElement$kotlinx_coroutines_core(ILjava/lang/Object;)V +Lkotlinx/coroutines/channels/ChannelsKt; +HSPLkotlinx/coroutines/channels/ChannelsKt;->cancelConsumed(Lkotlinx/coroutines/channels/ReceiveChannel;Ljava/lang/Throwable;)V +Lkotlinx/coroutines/channels/ChannelsKt__Channels_commonKt; +HSPLkotlinx/coroutines/channels/ChannelsKt__Channels_commonKt;->cancelConsumed(Lkotlinx/coroutines/channels/ReceiveChannel;Ljava/lang/Throwable;)V +Lkotlinx/coroutines/channels/ConflatedBufferedChannel; +HSPLkotlinx/coroutines/channels/ConflatedBufferedChannel;->(ILkotlinx/coroutines/channels/BufferOverflow;Lkotlin/jvm/functions/Function1;)V +HSPLkotlinx/coroutines/channels/ConflatedBufferedChannel;->isConflatedDropOldest()Z +HSPLkotlinx/coroutines/channels/ConflatedBufferedChannel;->send$suspendImpl(Lkotlinx/coroutines/channels/ConflatedBufferedChannel;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/ConflatedBufferedChannel;->send(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/ConflatedBufferedChannel;->trySend-JP2dKIU(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/ConflatedBufferedChannel;->trySendDropOldest-JP2dKIU(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/ConflatedBufferedChannel;->trySendImpl-Mj0NB7M(Ljava/lang/Object;Z)Ljava/lang/Object; +Lkotlinx/coroutines/channels/ProduceKt; +HSPLkotlinx/coroutines/channels/ProduceKt;->awaitClose$default(Lkotlinx/coroutines/channels/ProducerScope;Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/ProduceKt;->awaitClose(Lkotlinx/coroutines/channels/ProducerScope;Lkotlin/jvm/functions/Function0;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/ProduceKt;->produce$default(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;ILkotlin/jvm/functions/Function2;ILjava/lang/Object;)Lkotlinx/coroutines/channels/ReceiveChannel; +HSPLkotlinx/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; +HSPLkotlinx/coroutines/channels/ProduceKt;->produce(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/CoroutineContext;ILkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/channels/ReceiveChannel; +HSPLkotlinx/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; +Lkotlinx/coroutines/channels/ProduceKt$awaitClose$1; +HSPLkotlinx/coroutines/channels/ProduceKt$awaitClose$1;->(Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/channels/ProduceKt$awaitClose$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/channels/ProduceKt$awaitClose$2; +HSPLkotlinx/coroutines/channels/ProduceKt$awaitClose$2;->()V +HSPLkotlinx/coroutines/channels/ProduceKt$awaitClose$2;->()V +Lkotlinx/coroutines/channels/ProduceKt$awaitClose$4$1; +HSPLkotlinx/coroutines/channels/ProduceKt$awaitClose$4$1;->(Lkotlinx/coroutines/CancellableContinuation;)V +HSPLkotlinx/coroutines/channels/ProduceKt$awaitClose$4$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/channels/ProduceKt$awaitClose$4$1;->invoke(Ljava/lang/Throwable;)V +Lkotlinx/coroutines/channels/ProducerCoroutine; +HSPLkotlinx/coroutines/channels/ProducerCoroutine;->(Lkotlin/coroutines/CoroutineContext;Lkotlinx/coroutines/channels/Channel;)V +HSPLkotlinx/coroutines/channels/ProducerCoroutine;->getChannel()Lkotlinx/coroutines/channels/SendChannel; +HSPLkotlinx/coroutines/channels/ProducerCoroutine;->isActive()Z +HSPLkotlinx/coroutines/channels/ProducerCoroutine;->onCancelled(Ljava/lang/Throwable;Z)V +Lkotlinx/coroutines/channels/ProducerScope; +Lkotlinx/coroutines/channels/ReceiveCatching; +HSPLkotlinx/coroutines/channels/ReceiveCatching;->(Lkotlinx/coroutines/CancellableContinuationImpl;)V +HSPLkotlinx/coroutines/channels/ReceiveCatching;->invokeOnCancellation(Lkotlinx/coroutines/internal/Segment;I)V +Lkotlinx/coroutines/channels/ReceiveChannel; +Lkotlinx/coroutines/channels/SendChannel; +Lkotlinx/coroutines/channels/SendChannel$DefaultImpls; +HSPLkotlinx/coroutines/channels/SendChannel$DefaultImpls;->close$default(Lkotlinx/coroutines/channels/SendChannel;Ljava/lang/Throwable;ILjava/lang/Object;)Z +Lkotlinx/coroutines/channels/WaiterEB; +Lkotlinx/coroutines/flow/AbstractFlow; +HSPLkotlinx/coroutines/flow/AbstractFlow;->()V +HSPLkotlinx/coroutines/flow/AbstractFlow;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/AbstractFlow$collect$1; +HSPLkotlinx/coroutines/flow/AbstractFlow$collect$1;->(Lkotlinx/coroutines/flow/AbstractFlow;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/AbstractFlow$collect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/CallbackFlowBuilder; +HSPLkotlinx/coroutines/flow/CallbackFlowBuilder;->(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)V +HSPLkotlinx/coroutines/flow/CallbackFlowBuilder;->(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlinx/coroutines/flow/CallbackFlowBuilder;->collectTo(Lkotlinx/coroutines/channels/ProducerScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/CallbackFlowBuilder$collectTo$1; +HSPLkotlinx/coroutines/flow/CallbackFlowBuilder$collectTo$1;->(Lkotlinx/coroutines/flow/CallbackFlowBuilder;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/CallbackFlowBuilder$collectTo$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/CancellableFlow; +Lkotlinx/coroutines/flow/ChannelFlowBuilder; +HSPLkotlinx/coroutines/flow/ChannelFlowBuilder;->(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)V +HSPLkotlinx/coroutines/flow/ChannelFlowBuilder;->(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlinx/coroutines/flow/ChannelFlowBuilder;->collectTo$suspendImpl(Lkotlinx/coroutines/flow/ChannelFlowBuilder;Lkotlinx/coroutines/channels/ProducerScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/ChannelFlowBuilder;->collectTo(Lkotlinx/coroutines/channels/ProducerScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/DistinctFlowImpl; +HSPLkotlinx/coroutines/flow/DistinctFlowImpl;->(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;)V +HSPLkotlinx/coroutines/flow/DistinctFlowImpl;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/DistinctFlowImpl$collect$2; +HSPLkotlinx/coroutines/flow/DistinctFlowImpl$collect$2;->(Lkotlinx/coroutines/flow/DistinctFlowImpl;Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLkotlinx/coroutines/flow/DistinctFlowImpl$collect$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/DistinctFlowImpl$collect$2$emit$1; +HSPLkotlinx/coroutines/flow/DistinctFlowImpl$collect$2$emit$1;->(Lkotlinx/coroutines/flow/DistinctFlowImpl$collect$2;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/DistinctFlowImpl$collect$2$emit$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/EmptyFlow; +HSPLkotlinx/coroutines/flow/EmptyFlow;->()V +HSPLkotlinx/coroutines/flow/EmptyFlow;->()V +HSPLkotlinx/coroutines/flow/EmptyFlow;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/Flow; +Lkotlinx/coroutines/flow/FlowCollector; +Lkotlinx/coroutines/flow/FlowKt; +HSPLkotlinx/coroutines/flow/FlowKt;->asFlow(Lkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt;->asStateFlow(Lkotlinx/coroutines/flow/MutableStateFlow;)Lkotlinx/coroutines/flow/StateFlow; +HSPLkotlinx/coroutines/flow/FlowKt;->buffer$default(Lkotlinx/coroutines/flow/Flow;ILkotlinx/coroutines/channels/BufferOverflow;ILjava/lang/Object;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt;->buffer(Lkotlinx/coroutines/flow/Flow;ILkotlinx/coroutines/channels/BufferOverflow;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt;->callbackFlow(Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt;->catch(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function3;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt;->catchImpl(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt;->channelFlow(Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt;->collect(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt;->collectLatest(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt;->combine(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function3;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt;->combine(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function4;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt;->combine(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function5;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/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; +HSPLkotlinx/coroutines/flow/FlowKt;->conflate(Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt;->debounce(Lkotlinx/coroutines/flow/Flow;J)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt;->distinctUntilChanged(Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt;->distinctUntilChanged(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt;->dropWhile(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt;->emitAll(Lkotlinx/coroutines/flow/FlowCollector;Lkotlinx/coroutines/channels/ReceiveChannel;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt;->emitAll(Lkotlinx/coroutines/flow/FlowCollector;Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt;->emptyFlow()Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt;->ensureActive(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLkotlinx/coroutines/flow/FlowKt;->first(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt;->first(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt;->firstOrNull(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt;->flattenConcat(Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt;->flow(Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt;->flowCombine(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function3;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt;->flowOf(Ljava/lang/Object;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt;->flowOn(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt;->launchIn(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineScope;)Lkotlinx/coroutines/Job; +HSPLkotlinx/coroutines/flow/FlowKt;->mapLatest(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt;->merge(Ljava/lang/Iterable;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt;->merge([Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt;->onEach(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt;->onStart(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt;->runningFold(Lkotlinx/coroutines/flow/Flow;Ljava/lang/Object;Lkotlin/jvm/functions/Function3;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt;->runningReduce(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function3;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt;->scan(Lkotlinx/coroutines/flow/Flow;Ljava/lang/Object;Lkotlin/jvm/functions/Function3;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt;->shareIn$default(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/SharingStarted;IILjava/lang/Object;)Lkotlinx/coroutines/flow/SharedFlow; +HSPLkotlinx/coroutines/flow/FlowKt;->shareIn(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/SharingStarted;I)Lkotlinx/coroutines/flow/SharedFlow; +HSPLkotlinx/coroutines/flow/FlowKt;->stateIn(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/SharingStarted;Ljava/lang/Object;)Lkotlinx/coroutines/flow/StateFlow; +HSPLkotlinx/coroutines/flow/FlowKt;->transformLatest(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function3;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt;->withIndex(Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow; +Lkotlinx/coroutines/flow/FlowKt__BuildersKt; +HSPLkotlinx/coroutines/flow/FlowKt__BuildersKt;->asFlow(Lkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt__BuildersKt;->callbackFlow(Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt__BuildersKt;->channelFlow(Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt__BuildersKt;->emptyFlow()Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt__BuildersKt;->flow(Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt__BuildersKt;->flowOf(Ljava/lang/Object;)Lkotlinx/coroutines/flow/Flow; +Lkotlinx/coroutines/flow/FlowKt__BuildersKt$asFlow$$inlined$unsafeFlow$2; +HSPLkotlinx/coroutines/flow/FlowKt__BuildersKt$asFlow$$inlined$unsafeFlow$2;->(Lkotlin/jvm/functions/Function1;)V +HSPLkotlinx/coroutines/flow/FlowKt__BuildersKt$asFlow$$inlined$unsafeFlow$2;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__BuildersKt$asFlow$$inlined$unsafeFlow$2$1; +HSPLkotlinx/coroutines/flow/FlowKt__BuildersKt$asFlow$$inlined$unsafeFlow$2$1;->(Lkotlinx/coroutines/flow/FlowKt__BuildersKt$asFlow$$inlined$unsafeFlow$2;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/FlowKt__BuildersKt$asFlow$$inlined$unsafeFlow$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__BuildersKt$flowOf$$inlined$unsafeFlow$2; +HSPLkotlinx/coroutines/flow/FlowKt__BuildersKt$flowOf$$inlined$unsafeFlow$2;->(Ljava/lang/Object;)V +HSPLkotlinx/coroutines/flow/FlowKt__BuildersKt$flowOf$$inlined$unsafeFlow$2;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__ChannelsKt; +HSPLkotlinx/coroutines/flow/FlowKt__ChannelsKt;->access$emitAllImpl$FlowKt__ChannelsKt(Lkotlinx/coroutines/flow/FlowCollector;Lkotlinx/coroutines/channels/ReceiveChannel;ZLkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt__ChannelsKt;->emitAll(Lkotlinx/coroutines/flow/FlowCollector;Lkotlinx/coroutines/channels/ReceiveChannel;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt__ChannelsKt;->emitAllImpl$FlowKt__ChannelsKt(Lkotlinx/coroutines/flow/FlowCollector;Lkotlinx/coroutines/channels/ReceiveChannel;ZLkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__ChannelsKt$emitAllImpl$1; +HSPLkotlinx/coroutines/flow/FlowKt__ChannelsKt$emitAllImpl$1;->(Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/FlowKt__ChannelsKt$emitAllImpl$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__CollectKt; +HSPLkotlinx/coroutines/flow/FlowKt__CollectKt;->collect(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt__CollectKt;->collectLatest(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt__CollectKt;->emitAll(Lkotlinx/coroutines/flow/FlowCollector;Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt__CollectKt;->launchIn(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineScope;)Lkotlinx/coroutines/Job; +Lkotlinx/coroutines/flow/FlowKt__CollectKt$launchIn$1; +HSPLkotlinx/coroutines/flow/FlowKt__CollectKt$launchIn$1;->(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/FlowKt__CollectKt$launchIn$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLkotlinx/coroutines/flow/FlowKt__CollectKt$launchIn$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__ContextKt; +HSPLkotlinx/coroutines/flow/FlowKt__ContextKt;->buffer$default(Lkotlinx/coroutines/flow/Flow;ILkotlinx/coroutines/channels/BufferOverflow;ILjava/lang/Object;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt__ContextKt;->buffer(Lkotlinx/coroutines/flow/Flow;ILkotlinx/coroutines/channels/BufferOverflow;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt__ContextKt;->checkFlowContext$FlowKt__ContextKt(Lkotlin/coroutines/CoroutineContext;)V +HSPLkotlinx/coroutines/flow/FlowKt__ContextKt;->conflate(Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt__ContextKt;->flowOn(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/CoroutineContext;)Lkotlinx/coroutines/flow/Flow; +Lkotlinx/coroutines/flow/FlowKt__DelayKt; +HSPLkotlinx/coroutines/flow/FlowKt__DelayKt;->debounce(Lkotlinx/coroutines/flow/Flow;J)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt__DelayKt;->debounceInternal$FlowKt__DelayKt(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function1;)Lkotlinx/coroutines/flow/Flow; +Lkotlinx/coroutines/flow/FlowKt__DelayKt$debounce$2; +HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounce$2;->(J)V +HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounce$2;->invoke(Ljava/lang/Object;)Ljava/lang/Long; +HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounce$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1; +HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1;->(Lkotlin/jvm/functions/Function1;Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$1; +HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$1;->(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$1;->create(Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$1;->invoke(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$2; +HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$2;->(Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$2;->invoke-WpGqRn0(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$3$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$values$1; +HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$values$1;->(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$values$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$values$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$values$1$1; +HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$values$1$1;->(Lkotlinx/coroutines/channels/ProducerScope;)V +HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$values$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$values$1$1$emit$1; +HSPLkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$values$1$1$emit$1;->(Lkotlinx/coroutines/flow/FlowKt__DelayKt$debounceInternal$1$values$1$1;Lkotlin/coroutines/Continuation;)V +Lkotlinx/coroutines/flow/FlowKt__DistinctKt; +HSPLkotlinx/coroutines/flow/FlowKt__DistinctKt;->()V +HSPLkotlinx/coroutines/flow/FlowKt__DistinctKt;->distinctUntilChanged(Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt__DistinctKt;->distinctUntilChanged(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt__DistinctKt;->distinctUntilChangedBy$FlowKt__DistinctKt(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function1;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow; +Lkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultAreEquivalent$1; +HSPLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultAreEquivalent$1;->()V +HSPLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultAreEquivalent$1;->()V +HSPLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultAreEquivalent$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Boolean; +HSPLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultAreEquivalent$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultKeySelector$1; +HSPLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultKeySelector$1;->()V +HSPLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultKeySelector$1;->()V +HSPLkotlinx/coroutines/flow/FlowKt__DistinctKt$defaultKeySelector$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__EmittersKt; +HSPLkotlinx/coroutines/flow/FlowKt__EmittersKt;->ensureActive(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLkotlinx/coroutines/flow/FlowKt__EmittersKt;->onStart(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow; +Lkotlinx/coroutines/flow/FlowKt__EmittersKt$onStart$$inlined$unsafeFlow$1; +HSPLkotlinx/coroutines/flow/FlowKt__EmittersKt$onStart$$inlined$unsafeFlow$1;->(Lkotlin/jvm/functions/Function2;Lkotlinx/coroutines/flow/Flow;)V +HSPLkotlinx/coroutines/flow/FlowKt__EmittersKt$onStart$$inlined$unsafeFlow$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__EmittersKt$onStart$$inlined$unsafeFlow$1$1; +HSPLkotlinx/coroutines/flow/FlowKt__EmittersKt$onStart$$inlined$unsafeFlow$1$1;->(Lkotlinx/coroutines/flow/FlowKt__EmittersKt$onStart$$inlined$unsafeFlow$1;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/FlowKt__EmittersKt$onStart$$inlined$unsafeFlow$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__ErrorsKt; +HSPLkotlinx/coroutines/flow/FlowKt__ErrorsKt;->catch(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function3;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt__ErrorsKt;->catchImpl(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__ErrorsKt$catch$$inlined$unsafeFlow$1; +HSPLkotlinx/coroutines/flow/FlowKt__ErrorsKt$catch$$inlined$unsafeFlow$1;->(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function3;)V +HSPLkotlinx/coroutines/flow/FlowKt__ErrorsKt$catch$$inlined$unsafeFlow$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__ErrorsKt$catch$$inlined$unsafeFlow$1$1; +HSPLkotlinx/coroutines/flow/FlowKt__ErrorsKt$catch$$inlined$unsafeFlow$1$1;->(Lkotlinx/coroutines/flow/FlowKt__ErrorsKt$catch$$inlined$unsafeFlow$1;Lkotlin/coroutines/Continuation;)V +Lkotlinx/coroutines/flow/FlowKt__ErrorsKt$catchImpl$1; +HSPLkotlinx/coroutines/flow/FlowKt__ErrorsKt$catchImpl$1;->(Lkotlin/coroutines/Continuation;)V +Lkotlinx/coroutines/flow/FlowKt__ErrorsKt$catchImpl$2; +HSPLkotlinx/coroutines/flow/FlowKt__ErrorsKt$catchImpl$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/jvm/internal/Ref$ObjectRef;)V +HSPLkotlinx/coroutines/flow/FlowKt__ErrorsKt$catchImpl$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__ErrorsKt$catchImpl$2$emit$1; +HSPLkotlinx/coroutines/flow/FlowKt__ErrorsKt$catchImpl$2$emit$1;->(Lkotlinx/coroutines/flow/FlowKt__ErrorsKt$catchImpl$2;Lkotlin/coroutines/Continuation;)V +Lkotlinx/coroutines/flow/FlowKt__LimitKt; +HSPLkotlinx/coroutines/flow/FlowKt__LimitKt;->dropWhile(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow; +Lkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$$inlined$unsafeFlow$1; +HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$$inlined$unsafeFlow$1;->(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;)V +HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$$inlined$unsafeFlow$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1; +HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1;->(Lkotlin/jvm/internal/Ref$BooleanRef;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/jvm/functions/Function2;)V +HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1$emit$1; +HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1$emit$1;->(Lkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/FlowKt__LimitKt$dropWhile$1$1$emit$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__MergeKt; +HSPLkotlinx/coroutines/flow/FlowKt__MergeKt;->()V +HSPLkotlinx/coroutines/flow/FlowKt__MergeKt;->flattenConcat(Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt__MergeKt;->mapLatest(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt__MergeKt;->merge(Ljava/lang/Iterable;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt__MergeKt;->merge([Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt__MergeKt;->transformLatest(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function3;)Lkotlinx/coroutines/flow/Flow; +Lkotlinx/coroutines/flow/FlowKt__MergeKt$flattenConcat$$inlined$unsafeFlow$1; +HSPLkotlinx/coroutines/flow/FlowKt__MergeKt$flattenConcat$$inlined$unsafeFlow$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLkotlinx/coroutines/flow/FlowKt__MergeKt$flattenConcat$$inlined$unsafeFlow$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__MergeKt$flattenConcat$1$1; +HSPLkotlinx/coroutines/flow/FlowKt__MergeKt$flattenConcat$1$1;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLkotlinx/coroutines/flow/FlowKt__MergeKt$flattenConcat$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt__MergeKt$flattenConcat$1$1;->emit(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__MergeKt$flattenConcat$1$1$emit$1; +HSPLkotlinx/coroutines/flow/FlowKt__MergeKt$flattenConcat$1$1$emit$1;->(Lkotlinx/coroutines/flow/FlowKt__MergeKt$flattenConcat$1$1;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/FlowKt__MergeKt$flattenConcat$1$1$emit$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__MergeKt$mapLatest$1; +HSPLkotlinx/coroutines/flow/FlowKt__MergeKt$mapLatest$1;->(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/FlowKt__MergeKt$mapLatest$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt__MergeKt$mapLatest$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt__MergeKt$mapLatest$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__ReduceKt; +HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt;->first(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt;->first(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt;->firstOrNull(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$1; +HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$1;->(Lkotlin/jvm/internal/Ref$ObjectRef;)V +HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2; +HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2;->(Lkotlin/jvm/functions/Function2;Lkotlin/jvm/internal/Ref$ObjectRef;)V +HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2$1; +HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2$1;->(Lkotlinx/coroutines/flow/FlowKt__ReduceKt$first$$inlined$collectWhile$2;Lkotlin/coroutines/Continuation;)V +Lkotlinx/coroutines/flow/FlowKt__ReduceKt$first$1; +HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$1;->(Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__ReduceKt$first$3; +HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$3;->(Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$first$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__ReduceKt$firstOrNull$$inlined$collectWhile$1; +HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$firstOrNull$$inlined$collectWhile$1;->(Lkotlin/jvm/internal/Ref$ObjectRef;)V +HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$firstOrNull$$inlined$collectWhile$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__ReduceKt$firstOrNull$1; +HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$firstOrNull$1;->(Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/FlowKt__ReduceKt$firstOrNull$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__ShareKt; +HSPLkotlinx/coroutines/flow/FlowKt__ShareKt;->asStateFlow(Lkotlinx/coroutines/flow/MutableStateFlow;)Lkotlinx/coroutines/flow/StateFlow; +HSPLkotlinx/coroutines/flow/FlowKt__ShareKt;->configureSharing$FlowKt__ShareKt(Lkotlinx/coroutines/flow/Flow;I)Lkotlinx/coroutines/flow/SharingConfig; +HSPLkotlinx/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; +HSPLkotlinx/coroutines/flow/FlowKt__ShareKt;->shareIn$default(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/SharingStarted;IILjava/lang/Object;)Lkotlinx/coroutines/flow/SharedFlow; +HSPLkotlinx/coroutines/flow/FlowKt__ShareKt;->shareIn(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/SharingStarted;I)Lkotlinx/coroutines/flow/SharedFlow; +HSPLkotlinx/coroutines/flow/FlowKt__ShareKt;->stateIn(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/SharingStarted;Ljava/lang/Object;)Lkotlinx/coroutines/flow/StateFlow; +Lkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1; +HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1;->(Lkotlinx/coroutines/flow/SharingStarted;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/MutableSharedFlow;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$1; +HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$1;->(Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$1;->invoke(ILkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2; +HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2;->(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/MutableSharedFlow;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2;->invoke(Lkotlinx/coroutines/flow/SharingCommand;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2$WhenMappings; +HSPLkotlinx/coroutines/flow/FlowKt__ShareKt$launchSharing$1$2$WhenMappings;->()V +Lkotlinx/coroutines/flow/FlowKt__TransformKt; +HSPLkotlinx/coroutines/flow/FlowKt__TransformKt;->onEach(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt__TransformKt;->runningFold(Lkotlinx/coroutines/flow/Flow;Ljava/lang/Object;Lkotlin/jvm/functions/Function3;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt__TransformKt;->runningReduce(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function3;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt__TransformKt;->scan(Lkotlinx/coroutines/flow/Flow;Ljava/lang/Object;Lkotlin/jvm/functions/Function3;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt__TransformKt;->withIndex(Lkotlinx/coroutines/flow/Flow;)Lkotlinx/coroutines/flow/Flow; +Lkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1; +HSPLkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1;->(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function2;)V +HSPLkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1$2; +HSPLkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/jvm/functions/Function2;)V +HSPLkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1$2;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1$2$1; +HSPLkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1$2$1;->(Lkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1$2;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/FlowKt__TransformKt$onEach$$inlined$unsafeTransform$1$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__TransformKt$runningFold$$inlined$unsafeFlow$1; +HSPLkotlinx/coroutines/flow/FlowKt__TransformKt$runningFold$$inlined$unsafeFlow$1;->(Ljava/lang/Object;Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function3;)V +HSPLkotlinx/coroutines/flow/FlowKt__TransformKt$runningFold$$inlined$unsafeFlow$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__TransformKt$runningFold$$inlined$unsafeFlow$1$1; +HSPLkotlinx/coroutines/flow/FlowKt__TransformKt$runningFold$$inlined$unsafeFlow$1$1;->(Lkotlinx/coroutines/flow/FlowKt__TransformKt$runningFold$$inlined$unsafeFlow$1;Lkotlin/coroutines/Continuation;)V +Lkotlinx/coroutines/flow/FlowKt__TransformKt$runningFold$1$1; +HSPLkotlinx/coroutines/flow/FlowKt__TransformKt$runningFold$1$1;->(Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlin/jvm/functions/Function3;Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLkotlinx/coroutines/flow/FlowKt__TransformKt$runningFold$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__TransformKt$runningFold$1$1$emit$1; +HSPLkotlinx/coroutines/flow/FlowKt__TransformKt$runningFold$1$1$emit$1;->(Lkotlinx/coroutines/flow/FlowKt__TransformKt$runningFold$1$1;Lkotlin/coroutines/Continuation;)V +Lkotlinx/coroutines/flow/FlowKt__TransformKt$runningReduce$$inlined$unsafeFlow$1; +HSPLkotlinx/coroutines/flow/FlowKt__TransformKt$runningReduce$$inlined$unsafeFlow$1;->(Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function3;)V +HSPLkotlinx/coroutines/flow/FlowKt__TransformKt$runningReduce$$inlined$unsafeFlow$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__TransformKt$runningReduce$1$1; +PLkotlinx/coroutines/flow/FlowKt__TransformKt$runningReduce$1$1;->(Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlin/jvm/functions/Function3;Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLkotlinx/coroutines/flow/FlowKt__TransformKt$runningReduce$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__TransformKt$runningReduce$1$1$emit$1; +HSPLkotlinx/coroutines/flow/FlowKt__TransformKt$runningReduce$1$1$emit$1;->(Lkotlinx/coroutines/flow/FlowKt__TransformKt$runningReduce$1$1;Lkotlin/coroutines/Continuation;)V +Lkotlinx/coroutines/flow/FlowKt__TransformKt$withIndex$$inlined$unsafeFlow$1; +HSPLkotlinx/coroutines/flow/FlowKt__TransformKt$withIndex$$inlined$unsafeFlow$1;->(Lkotlinx/coroutines/flow/Flow;)V +HSPLkotlinx/coroutines/flow/FlowKt__TransformKt$withIndex$$inlined$unsafeFlow$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__TransformKt$withIndex$1$1; +HSPLkotlinx/coroutines/flow/FlowKt__TransformKt$withIndex$1$1;->(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/jvm/internal/Ref$IntRef;)V +HSPLkotlinx/coroutines/flow/FlowKt__TransformKt$withIndex$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__TransformKt$withIndex$1$1$emit$1; +HSPLkotlinx/coroutines/flow/FlowKt__TransformKt$withIndex$1$1$emit$1;->(Lkotlinx/coroutines/flow/FlowKt__TransformKt$withIndex$1$1;Lkotlin/coroutines/Continuation;)V +Lkotlinx/coroutines/flow/FlowKt__ZipKt; +HSPLkotlinx/coroutines/flow/FlowKt__ZipKt;->access$nullArrayFactory()Lkotlin/jvm/functions/Function0; +HSPLkotlinx/coroutines/flow/FlowKt__ZipKt;->combine(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function3;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/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; +HSPLkotlinx/coroutines/flow/FlowKt__ZipKt;->combine(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function5;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/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; +HSPLkotlinx/coroutines/flow/FlowKt__ZipKt;->flowCombine(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function3;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/FlowKt__ZipKt;->nullArrayFactory$FlowKt__ZipKt()Lkotlin/jvm/functions/Function0; +Lkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$1; +HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$1;->([Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function4;)V +HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$1$2; +HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$1$2;->(Lkotlin/coroutines/Continuation;Lkotlin/jvm/functions/Function4;)V +HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/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; +HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$2; +HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$2;->([Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function5;)V +HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$2;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$2$2; +HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$2$2;->(Lkotlin/coroutines/Continuation;Lkotlin/jvm/functions/Function5;)V +HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$2$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$2$2;->invoke(Lkotlinx/coroutines/flow/FlowCollector;[Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$2$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$3; +HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$3;->([Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function6;)V +HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$3;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$3$2; +HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$3$2;->(Lkotlin/coroutines/Continuation;Lkotlin/jvm/functions/Function6;)V +HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$3$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/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; +HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$combineUnsafe$FlowKt__ZipKt$3$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$unsafeFlow$1; +HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$unsafeFlow$1;->(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function3;)V +HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$$inlined$unsafeFlow$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__ZipKt$combine$1$1; +HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$1$1;->(Lkotlin/jvm/functions/Function3;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$1$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;[Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$combine$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/FlowKt__ZipKt$nullArrayFactory$1; +HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$nullArrayFactory$1;->()V +HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$nullArrayFactory$1;->()V +HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$nullArrayFactory$1;->invoke()Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/FlowKt__ZipKt$nullArrayFactory$1;->invoke()Ljava/lang/Void; +Lkotlinx/coroutines/flow/MutableSharedFlow; +Lkotlinx/coroutines/flow/MutableStateFlow; +Lkotlinx/coroutines/flow/ReadonlySharedFlow; +HSPLkotlinx/coroutines/flow/ReadonlySharedFlow;->(Lkotlinx/coroutines/flow/SharedFlow;Lkotlinx/coroutines/Job;)V +HSPLkotlinx/coroutines/flow/ReadonlySharedFlow;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/ReadonlyStateFlow; +HSPLkotlinx/coroutines/flow/ReadonlyStateFlow;->(Lkotlinx/coroutines/flow/StateFlow;Lkotlinx/coroutines/Job;)V +HSPLkotlinx/coroutines/flow/ReadonlyStateFlow;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/ReadonlyStateFlow;->getValue()Ljava/lang/Object; +Lkotlinx/coroutines/flow/SafeFlow; +HSPLkotlinx/coroutines/flow/SafeFlow;->(Lkotlin/jvm/functions/Function2;)V +HSPLkotlinx/coroutines/flow/SafeFlow;->collectSafely(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/SharedFlow; +Lkotlinx/coroutines/flow/SharedFlowImpl; +HSPLkotlinx/coroutines/flow/SharedFlowImpl;->(IILkotlinx/coroutines/channels/BufferOverflow;)V +HSPLkotlinx/coroutines/flow/SharedFlowImpl;->access$tryPeekLocked(Lkotlinx/coroutines/flow/SharedFlowImpl;Lkotlinx/coroutines/flow/SharedFlowSlot;)J +HSPLkotlinx/coroutines/flow/SharedFlowImpl;->awaitValue(Lkotlinx/coroutines/flow/SharedFlowSlot;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/SharedFlowImpl;->cleanupTailLocked()V +HSPLkotlinx/coroutines/flow/SharedFlowImpl;->collect$suspendImpl(Lkotlinx/coroutines/flow/SharedFlowImpl;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/SharedFlowImpl;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/SharedFlowImpl;->createSlot()Lkotlinx/coroutines/flow/SharedFlowSlot; +HSPLkotlinx/coroutines/flow/SharedFlowImpl;->createSlot()Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot; +HSPLkotlinx/coroutines/flow/SharedFlowImpl;->createSlotArray(I)[Lkotlinx/coroutines/flow/SharedFlowSlot; +HSPLkotlinx/coroutines/flow/SharedFlowImpl;->createSlotArray(I)[Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot; +HSPLkotlinx/coroutines/flow/SharedFlowImpl;->dropOldestLocked()V +HSPLkotlinx/coroutines/flow/SharedFlowImpl;->emit$suspendImpl(Lkotlinx/coroutines/flow/SharedFlowImpl;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/SharedFlowImpl;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/SharedFlowImpl;->enqueueLocked(Ljava/lang/Object;)V +HSPLkotlinx/coroutines/flow/SharedFlowImpl;->findSlotsToResumeLocked([Lkotlin/coroutines/Continuation;)[Lkotlin/coroutines/Continuation; +HSPLkotlinx/coroutines/flow/SharedFlowImpl;->getBufferEndIndex()J +HSPLkotlinx/coroutines/flow/SharedFlowImpl;->getHead()J +HSPLkotlinx/coroutines/flow/SharedFlowImpl;->getLastReplayedLocked()Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/SharedFlowImpl;->getPeekedValueLockedAt(J)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/SharedFlowImpl;->getQueueEndIndex()J +HSPLkotlinx/coroutines/flow/SharedFlowImpl;->getReplaySize()I +HSPLkotlinx/coroutines/flow/SharedFlowImpl;->getTotalSize()I +HSPLkotlinx/coroutines/flow/SharedFlowImpl;->growBuffer([Ljava/lang/Object;II)[Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/SharedFlowImpl;->tryEmit(Ljava/lang/Object;)Z +HSPLkotlinx/coroutines/flow/SharedFlowImpl;->tryEmitLocked(Ljava/lang/Object;)Z +HSPLkotlinx/coroutines/flow/SharedFlowImpl;->tryEmitNoCollectorsLocked(Ljava/lang/Object;)Z +HSPLkotlinx/coroutines/flow/SharedFlowImpl;->tryPeekLocked(Lkotlinx/coroutines/flow/SharedFlowSlot;)J +HSPLkotlinx/coroutines/flow/SharedFlowImpl;->tryTakeValue(Lkotlinx/coroutines/flow/SharedFlowSlot;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/SharedFlowImpl;->updateBufferLocked(JJJJ)V +HSPLkotlinx/coroutines/flow/SharedFlowImpl;->updateCollectorIndexLocked$kotlinx_coroutines_core(J)[Lkotlin/coroutines/Continuation; +HSPLkotlinx/coroutines/flow/SharedFlowImpl;->updateNewCollectorIndexLocked$kotlinx_coroutines_core()J +Lkotlinx/coroutines/flow/SharedFlowImpl$Emitter; +Lkotlinx/coroutines/flow/SharedFlowImpl$collect$1; +HSPLkotlinx/coroutines/flow/SharedFlowImpl$collect$1;->(Lkotlinx/coroutines/flow/SharedFlowImpl;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/SharedFlowImpl$collect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/SharedFlowKt; +HSPLkotlinx/coroutines/flow/SharedFlowKt;->()V +HSPLkotlinx/coroutines/flow/SharedFlowKt;->MutableSharedFlow$default(IILkotlinx/coroutines/channels/BufferOverflow;ILjava/lang/Object;)Lkotlinx/coroutines/flow/MutableSharedFlow; +HSPLkotlinx/coroutines/flow/SharedFlowKt;->MutableSharedFlow(IILkotlinx/coroutines/channels/BufferOverflow;)Lkotlinx/coroutines/flow/MutableSharedFlow; +HSPLkotlinx/coroutines/flow/SharedFlowKt;->access$getBufferAt([Ljava/lang/Object;J)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/SharedFlowKt;->access$setBufferAt([Ljava/lang/Object;JLjava/lang/Object;)V +HSPLkotlinx/coroutines/flow/SharedFlowKt;->getBufferAt([Ljava/lang/Object;J)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/SharedFlowKt;->setBufferAt([Ljava/lang/Object;JLjava/lang/Object;)V +Lkotlinx/coroutines/flow/SharedFlowSlot; +HSPLkotlinx/coroutines/flow/SharedFlowSlot;->()V +HSPLkotlinx/coroutines/flow/SharedFlowSlot;->allocateLocked(Ljava/lang/Object;)Z +HSPLkotlinx/coroutines/flow/SharedFlowSlot;->allocateLocked(Lkotlinx/coroutines/flow/SharedFlowImpl;)Z +HSPLkotlinx/coroutines/flow/SharedFlowSlot;->freeLocked(Ljava/lang/Object;)[Lkotlin/coroutines/Continuation; +HSPLkotlinx/coroutines/flow/SharedFlowSlot;->freeLocked(Lkotlinx/coroutines/flow/SharedFlowImpl;)[Lkotlin/coroutines/Continuation; +Lkotlinx/coroutines/flow/SharingCommand; +HSPLkotlinx/coroutines/flow/SharingCommand;->$values()[Lkotlinx/coroutines/flow/SharingCommand; +HSPLkotlinx/coroutines/flow/SharingCommand;->()V +HSPLkotlinx/coroutines/flow/SharingCommand;->(Ljava/lang/String;I)V +HSPLkotlinx/coroutines/flow/SharingCommand;->values()[Lkotlinx/coroutines/flow/SharingCommand; +Lkotlinx/coroutines/flow/SharingConfig; +HSPLkotlinx/coroutines/flow/SharingConfig;->(Lkotlinx/coroutines/flow/Flow;ILkotlinx/coroutines/channels/BufferOverflow;Lkotlin/coroutines/CoroutineContext;)V +Lkotlinx/coroutines/flow/SharingStarted; +HSPLkotlinx/coroutines/flow/SharingStarted;->()V +Lkotlinx/coroutines/flow/SharingStarted$Companion; +HSPLkotlinx/coroutines/flow/SharingStarted$Companion;->()V +HSPLkotlinx/coroutines/flow/SharingStarted$Companion;->()V +HSPLkotlinx/coroutines/flow/SharingStarted$Companion;->WhileSubscribed$default(Lkotlinx/coroutines/flow/SharingStarted$Companion;JJILjava/lang/Object;)Lkotlinx/coroutines/flow/SharingStarted; +HSPLkotlinx/coroutines/flow/SharingStarted$Companion;->WhileSubscribed(JJ)Lkotlinx/coroutines/flow/SharingStarted; +HSPLkotlinx/coroutines/flow/SharingStarted$Companion;->getEagerly()Lkotlinx/coroutines/flow/SharingStarted; +HSPLkotlinx/coroutines/flow/SharingStarted$Companion;->getLazily()Lkotlinx/coroutines/flow/SharingStarted; +Lkotlinx/coroutines/flow/StartedEagerly; +HSPLkotlinx/coroutines/flow/StartedEagerly;->()V +Lkotlinx/coroutines/flow/StartedLazily; +HSPLkotlinx/coroutines/flow/StartedLazily;->()V +Lkotlinx/coroutines/flow/StartedWhileSubscribed; +HSPLkotlinx/coroutines/flow/StartedWhileSubscribed;->(JJ)V +HSPLkotlinx/coroutines/flow/StartedWhileSubscribed;->access$getReplayExpiration$p(Lkotlinx/coroutines/flow/StartedWhileSubscribed;)J +HSPLkotlinx/coroutines/flow/StartedWhileSubscribed;->access$getStopTimeout$p(Lkotlinx/coroutines/flow/StartedWhileSubscribed;)J +HSPLkotlinx/coroutines/flow/StartedWhileSubscribed;->command(Lkotlinx/coroutines/flow/StateFlow;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/StartedWhileSubscribed;->equals(Ljava/lang/Object;)Z +Lkotlinx/coroutines/flow/StartedWhileSubscribed$command$1; +HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$1;->(Lkotlinx/coroutines/flow/StartedWhileSubscribed;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;ILkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/StartedWhileSubscribed$command$2; +HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;->(Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;->invoke(Lkotlinx/coroutines/flow/SharingCommand;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/StartedWhileSubscribed$command$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/StateFlow; +Lkotlinx/coroutines/flow/StateFlowImpl; +HSPLkotlinx/coroutines/flow/StateFlowImpl;->()V +HSPLkotlinx/coroutines/flow/StateFlowImpl;->(Ljava/lang/Object;)V +HSPLkotlinx/coroutines/flow/StateFlowImpl;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/StateFlowImpl;->compareAndSet(Ljava/lang/Object;Ljava/lang/Object;)Z +HSPLkotlinx/coroutines/flow/StateFlowImpl;->createSlot()Lkotlinx/coroutines/flow/StateFlowSlot; +HSPLkotlinx/coroutines/flow/StateFlowImpl;->createSlot()Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot; +HSPLkotlinx/coroutines/flow/StateFlowImpl;->createSlotArray(I)[Lkotlinx/coroutines/flow/StateFlowSlot; +HSPLkotlinx/coroutines/flow/StateFlowImpl;->createSlotArray(I)[Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot; +HSPLkotlinx/coroutines/flow/StateFlowImpl;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/StateFlowImpl;->getValue()Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/StateFlowImpl;->get_state$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/flow/StateFlowImpl;->setValue(Ljava/lang/Object;)V +HSPLkotlinx/coroutines/flow/StateFlowImpl;->updateState(Ljava/lang/Object;Ljava/lang/Object;)Z +Lkotlinx/coroutines/flow/StateFlowImpl$collect$1; +HSPLkotlinx/coroutines/flow/StateFlowImpl$collect$1;->(Lkotlinx/coroutines/flow/StateFlowImpl;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/StateFlowImpl$collect$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/StateFlowKt; +HSPLkotlinx/coroutines/flow/StateFlowKt;->()V +HSPLkotlinx/coroutines/flow/StateFlowKt;->MutableStateFlow(Ljava/lang/Object;)Lkotlinx/coroutines/flow/MutableStateFlow; +HSPLkotlinx/coroutines/flow/StateFlowKt;->access$getNONE$p()Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/flow/StateFlowKt;->access$getPENDING$p()Lkotlinx/coroutines/internal/Symbol; +Lkotlinx/coroutines/flow/StateFlowSlot; +HSPLkotlinx/coroutines/flow/StateFlowSlot;->()V +HSPLkotlinx/coroutines/flow/StateFlowSlot;->()V +HSPLkotlinx/coroutines/flow/StateFlowSlot;->access$get_state$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/flow/StateFlowSlot;->allocateLocked(Ljava/lang/Object;)Z +HSPLkotlinx/coroutines/flow/StateFlowSlot;->allocateLocked(Lkotlinx/coroutines/flow/StateFlowImpl;)Z +HSPLkotlinx/coroutines/flow/StateFlowSlot;->awaitPending(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/StateFlowSlot;->freeLocked(Ljava/lang/Object;)[Lkotlin/coroutines/Continuation; +HSPLkotlinx/coroutines/flow/StateFlowSlot;->freeLocked(Lkotlinx/coroutines/flow/StateFlowImpl;)[Lkotlin/coroutines/Continuation; +HSPLkotlinx/coroutines/flow/StateFlowSlot;->get_state$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/flow/StateFlowSlot;->makePending()V +HSPLkotlinx/coroutines/flow/StateFlowSlot;->takePending()Z +Lkotlinx/coroutines/flow/SubscribedFlowCollector; +Lkotlinx/coroutines/flow/ThrowingCollector; +Lkotlinx/coroutines/flow/internal/AbortFlowException; +HSPLkotlinx/coroutines/flow/internal/AbortFlowException;->(Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLkotlinx/coroutines/flow/internal/AbortFlowException;->fillInStackTrace()Ljava/lang/Throwable; +Lkotlinx/coroutines/flow/internal/AbstractSharedFlow; +HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->()V +HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->access$getNCollectors(Lkotlinx/coroutines/flow/internal/AbstractSharedFlow;)I +HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->access$getSlots(Lkotlinx/coroutines/flow/internal/AbstractSharedFlow;)[Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot; +HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->allocateSlot()Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot; +HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->freeSlot(Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;)V +HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->getNCollectors()I +HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->getSlots()[Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot; +HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlow;->getSubscriptionCount()Lkotlinx/coroutines/flow/StateFlow; +Lkotlinx/coroutines/flow/internal/AbstractSharedFlowKt; +HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlowKt;->()V +Lkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot; +HSPLkotlinx/coroutines/flow/internal/AbstractSharedFlowSlot;->()V +Lkotlinx/coroutines/flow/internal/ChannelFlow; +HSPLkotlinx/coroutines/flow/internal/ChannelFlow;->(Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)V +HSPLkotlinx/coroutines/flow/internal/ChannelFlow;->collect$suspendImpl(Lkotlinx/coroutines/flow/internal/ChannelFlow;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/internal/ChannelFlow;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/internal/ChannelFlow;->dropChannelOperators()Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/internal/ChannelFlow;->fuse(Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/internal/ChannelFlow;->getCollectToFun$kotlinx_coroutines_core()Lkotlin/jvm/functions/Function2; +HSPLkotlinx/coroutines/flow/internal/ChannelFlow;->getProduceCapacity$kotlinx_coroutines_core()I +HSPLkotlinx/coroutines/flow/internal/ChannelFlow;->produceImpl(Lkotlinx/coroutines/CoroutineScope;)Lkotlinx/coroutines/channels/ReceiveChannel; +Lkotlinx/coroutines/flow/internal/ChannelFlow$collect$2; +HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collect$2;->(Lkotlinx/coroutines/flow/FlowCollector;Lkotlinx/coroutines/flow/internal/ChannelFlow;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collect$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collect$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collect$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collect$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/internal/ChannelFlow$collectToFun$1; +HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collectToFun$1;->(Lkotlinx/coroutines/flow/internal/ChannelFlow;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collectToFun$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLkotlinx/coroutines/flow/internal/ChannelFlow$collectToFun$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/internal/ChannelFlowOperator; +HSPLkotlinx/coroutines/flow/internal/ChannelFlowOperator;->(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)V +HSPLkotlinx/coroutines/flow/internal/ChannelFlowOperator;->collect$suspendImpl(Lkotlinx/coroutines/flow/internal/ChannelFlowOperator;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/internal/ChannelFlowOperator;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/internal/ChannelFlowOperator;->collectTo$suspendImpl(Lkotlinx/coroutines/flow/internal/ChannelFlowOperator;Lkotlinx/coroutines/channels/ProducerScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/internal/ChannelFlowOperator;->collectTo(Lkotlinx/coroutines/channels/ProducerScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/internal/ChannelFlowOperatorImpl; +HSPLkotlinx/coroutines/flow/internal/ChannelFlowOperatorImpl;->(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)V +HSPLkotlinx/coroutines/flow/internal/ChannelFlowOperatorImpl;->(Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlinx/coroutines/flow/internal/ChannelFlowOperatorImpl;->dropChannelOperators()Lkotlinx/coroutines/flow/Flow; +HSPLkotlinx/coroutines/flow/internal/ChannelFlowOperatorImpl;->flowCollect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest; +HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;->(Lkotlin/jvm/functions/Function3;Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)V +HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;->(Lkotlin/jvm/functions/Function3;Lkotlinx/coroutines/flow/Flow;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;->access$getTransform$p(Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;)Lkotlin/jvm/functions/Function3; +HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;->create(Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)Lkotlinx/coroutines/flow/internal/ChannelFlow; +HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;->flowCollect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3; +HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3;->(Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1; +HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1;->(Lkotlin/jvm/internal/Ref$ObjectRef;Lkotlinx/coroutines/CoroutineScope;Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;Lkotlinx/coroutines/flow/FlowCollector;)V +HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2; +HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;->(Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest;Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$emit$1; +HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$emit$1;->(Lkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/internal/ChannelFlowTransformLatest$flowCollect$3$1$emit$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/internal/ChannelLimitedFlowMerge; +HSPLkotlinx/coroutines/flow/internal/ChannelLimitedFlowMerge;->(Ljava/lang/Iterable;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;)V +HSPLkotlinx/coroutines/flow/internal/ChannelLimitedFlowMerge;->(Ljava/lang/Iterable;Lkotlin/coroutines/CoroutineContext;ILkotlinx/coroutines/channels/BufferOverflow;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlinx/coroutines/flow/internal/ChannelLimitedFlowMerge;->collectTo(Lkotlinx/coroutines/channels/ProducerScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/internal/ChannelLimitedFlowMerge;->produceImpl(Lkotlinx/coroutines/CoroutineScope;)Lkotlinx/coroutines/channels/ReceiveChannel; +Lkotlinx/coroutines/flow/internal/ChannelLimitedFlowMerge$collectTo$2$1; +HSPLkotlinx/coroutines/flow/internal/ChannelLimitedFlowMerge$collectTo$2$1;->(Lkotlinx/coroutines/flow/Flow;Lkotlinx/coroutines/flow/internal/SendingCollector;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/internal/ChannelLimitedFlowMerge$collectTo$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLkotlinx/coroutines/flow/internal/ChannelLimitedFlowMerge$collectTo$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/internal/ChildCancelledException; +HSPLkotlinx/coroutines/flow/internal/ChildCancelledException;->()V +HSPLkotlinx/coroutines/flow/internal/ChildCancelledException;->fillInStackTrace()Ljava/lang/Throwable; +Lkotlinx/coroutines/flow/internal/CombineKt; +HSPLkotlinx/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; +Lkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2; +HSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2;->([Lkotlinx/coroutines/flow/Flow;Lkotlin/jvm/functions/Function0;Lkotlin/jvm/functions/Function3;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1; +HSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1;->([Lkotlinx/coroutines/flow/Flow;ILjava/util/concurrent/atomic/AtomicInteger;Lkotlinx/coroutines/channels/Channel;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1$1; +HSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1$1;->(Lkotlinx/coroutines/channels/Channel;I)V +HSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1$1;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1$1$emit$1; +HSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1$1$emit$1;->(Lkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1$1;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/internal/CombineKt$combineInternal$2$1$1$emit$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/internal/DownstreamExceptionContext; +HSPLkotlinx/coroutines/flow/internal/DownstreamExceptionContext;->(Ljava/lang/Throwable;Lkotlin/coroutines/CoroutineContext;)V +Lkotlinx/coroutines/flow/internal/FlowCoroutine; +HSPLkotlinx/coroutines/flow/internal/FlowCoroutine;->(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/internal/FlowCoroutine;->childCancelled(Ljava/lang/Throwable;)Z +Lkotlinx/coroutines/flow/internal/FlowCoroutineKt; +HSPLkotlinx/coroutines/flow/internal/FlowCoroutineKt;->flowScope(Lkotlin/jvm/functions/Function2;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/internal/FlowCoroutineKt;->scopedFlow(Lkotlin/jvm/functions/Function3;)Lkotlinx/coroutines/flow/Flow; +Lkotlinx/coroutines/flow/internal/FlowCoroutineKt$scopedFlow$$inlined$unsafeFlow$1; +HSPLkotlinx/coroutines/flow/internal/FlowCoroutineKt$scopedFlow$$inlined$unsafeFlow$1;->(Lkotlin/jvm/functions/Function3;)V +HSPLkotlinx/coroutines/flow/internal/FlowCoroutineKt$scopedFlow$$inlined$unsafeFlow$1;->collect(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/internal/FlowCoroutineKt$scopedFlow$1$1; +HSPLkotlinx/coroutines/flow/internal/FlowCoroutineKt$scopedFlow$1$1;->(Lkotlin/jvm/functions/Function3;Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/flow/internal/FlowCoroutineKt$scopedFlow$1$1;->create(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Lkotlin/coroutines/Continuation; +HSPLkotlinx/coroutines/flow/internal/FlowCoroutineKt$scopedFlow$1$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/internal/FlowCoroutineKt$scopedFlow$1$1;->invoke(Lkotlinx/coroutines/CoroutineScope;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/internal/FlowCoroutineKt$scopedFlow$1$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/internal/FlowExceptions_commonKt; +HSPLkotlinx/coroutines/flow/internal/FlowExceptions_commonKt;->checkOwnership(Lkotlinx/coroutines/flow/internal/AbortFlowException;Lkotlinx/coroutines/flow/FlowCollector;)V +Lkotlinx/coroutines/flow/internal/FusibleFlow; +Lkotlinx/coroutines/flow/internal/FusibleFlow$DefaultImpls; +HSPLkotlinx/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; +Lkotlinx/coroutines/flow/internal/NoOpContinuation; +HSPLkotlinx/coroutines/flow/internal/NoOpContinuation;->()V +HSPLkotlinx/coroutines/flow/internal/NoOpContinuation;->()V +Lkotlinx/coroutines/flow/internal/NopCollector; +HSPLkotlinx/coroutines/flow/internal/NopCollector;->()V +HSPLkotlinx/coroutines/flow/internal/NopCollector;->()V +HSPLkotlinx/coroutines/flow/internal/NopCollector;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/internal/NullSurrogateKt; +HSPLkotlinx/coroutines/flow/internal/NullSurrogateKt;->()V +Lkotlinx/coroutines/flow/internal/SafeCollector; +HSPLkotlinx/coroutines/flow/internal/SafeCollector;->(Lkotlinx/coroutines/flow/FlowCollector;Lkotlin/coroutines/CoroutineContext;)V +HSPLkotlinx/coroutines/flow/internal/SafeCollector;->checkContext(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/CoroutineContext;Ljava/lang/Object;)V +HSPLkotlinx/coroutines/flow/internal/SafeCollector;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/internal/SafeCollector;->emit(Lkotlin/coroutines/Continuation;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/internal/SafeCollector;->getContext()Lkotlin/coroutines/CoroutineContext; +HSPLkotlinx/coroutines/flow/internal/SafeCollector;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/internal/SafeCollector;->releaseIntercepted()V +Lkotlinx/coroutines/flow/internal/SafeCollector$collectContextSize$1; +HSPLkotlinx/coroutines/flow/internal/SafeCollector$collectContextSize$1;->()V +HSPLkotlinx/coroutines/flow/internal/SafeCollector$collectContextSize$1;->()V +HSPLkotlinx/coroutines/flow/internal/SafeCollector$collectContextSize$1;->invoke(ILkotlin/coroutines/CoroutineContext$Element;)Ljava/lang/Integer; +HSPLkotlinx/coroutines/flow/internal/SafeCollector$collectContextSize$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/internal/SafeCollectorKt; +HSPLkotlinx/coroutines/flow/internal/SafeCollectorKt;->()V +HSPLkotlinx/coroutines/flow/internal/SafeCollectorKt;->access$getEmitFun$p()Lkotlin/jvm/functions/Function3; +Lkotlinx/coroutines/flow/internal/SafeCollectorKt$emitFun$1; +HSPLkotlinx/coroutines/flow/internal/SafeCollectorKt$emitFun$1;->()V +HSPLkotlinx/coroutines/flow/internal/SafeCollectorKt$emitFun$1;->()V +HSPLkotlinx/coroutines/flow/internal/SafeCollectorKt$emitFun$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/flow/internal/SafeCollectorKt$emitFun$1;->invoke(Lkotlinx/coroutines/flow/FlowCollector;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/internal/SafeCollector_commonKt; +HSPLkotlinx/coroutines/flow/internal/SafeCollector_commonKt;->checkContext(Lkotlinx/coroutines/flow/internal/SafeCollector;Lkotlin/coroutines/CoroutineContext;)V +HSPLkotlinx/coroutines/flow/internal/SafeCollector_commonKt;->transitiveCoroutineParent(Lkotlinx/coroutines/Job;Lkotlinx/coroutines/Job;)Lkotlinx/coroutines/Job; +Lkotlinx/coroutines/flow/internal/SafeCollector_commonKt$checkContext$result$1; +HSPLkotlinx/coroutines/flow/internal/SafeCollector_commonKt$checkContext$result$1;->(Lkotlinx/coroutines/flow/internal/SafeCollector;)V +HSPLkotlinx/coroutines/flow/internal/SafeCollector_commonKt$checkContext$result$1;->invoke(ILkotlin/coroutines/CoroutineContext$Element;)Ljava/lang/Integer; +HSPLkotlinx/coroutines/flow/internal/SafeCollector_commonKt$checkContext$result$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/internal/SendingCollector; +HSPLkotlinx/coroutines/flow/internal/SendingCollector;->(Lkotlinx/coroutines/channels/SendChannel;)V +HSPLkotlinx/coroutines/flow/internal/SendingCollector;->emit(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/flow/internal/SubscriptionCountStateFlow; +HSPLkotlinx/coroutines/flow/internal/SubscriptionCountStateFlow;->(I)V +HSPLkotlinx/coroutines/flow/internal/SubscriptionCountStateFlow;->increment(I)Z +Lkotlinx/coroutines/internal/AtomicKt; +HSPLkotlinx/coroutines/internal/AtomicKt;->()V +Lkotlinx/coroutines/internal/AtomicOp; +HSPLkotlinx/coroutines/internal/AtomicOp;->()V +HSPLkotlinx/coroutines/internal/AtomicOp;->()V +HSPLkotlinx/coroutines/internal/AtomicOp;->decide(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/internal/AtomicOp;->get_consensus$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/internal/AtomicOp;->perform(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/internal/ConcurrentKt; +HSPLkotlinx/coroutines/internal/ConcurrentKt;->()V +HSPLkotlinx/coroutines/internal/ConcurrentKt;->removeFutureOnCancel(Ljava/util/concurrent/Executor;)Z +Lkotlinx/coroutines/internal/ConcurrentLinkedListKt; +HSPLkotlinx/coroutines/internal/ConcurrentLinkedListKt;->()V +HSPLkotlinx/coroutines/internal/ConcurrentLinkedListKt;->access$getCLOSED$p()Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/internal/ConcurrentLinkedListKt;->close(Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;)Lkotlinx/coroutines/internal/ConcurrentLinkedListNode; +HSPLkotlinx/coroutines/internal/ConcurrentLinkedListKt;->findSegmentInternal(Lkotlinx/coroutines/internal/Segment;JLkotlin/jvm/functions/Function2;)Ljava/lang/Object; +Lkotlinx/coroutines/internal/ConcurrentLinkedListNode; +HSPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;->()V +HSPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;->(Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;)V +HSPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;->access$getNextOrClosed(Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;)Ljava/lang/Object; +HSPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;->cleanPrev()V +HSPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;->getNext()Lkotlinx/coroutines/internal/ConcurrentLinkedListNode; +HSPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;->getNextOrClosed()Ljava/lang/Object; +HSPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;->getPrev()Lkotlinx/coroutines/internal/ConcurrentLinkedListNode; +HSPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;->get_next$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;->get_prev$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;->markAsClosed()Z +HSPLkotlinx/coroutines/internal/ConcurrentLinkedListNode;->trySetNext(Lkotlinx/coroutines/internal/ConcurrentLinkedListNode;)Z +Lkotlinx/coroutines/internal/ContextScope; +HSPLkotlinx/coroutines/internal/ContextScope;->(Lkotlin/coroutines/CoroutineContext;)V +HSPLkotlinx/coroutines/internal/ContextScope;->getCoroutineContext()Lkotlin/coroutines/CoroutineContext; +Lkotlinx/coroutines/internal/DispatchedContinuation; +HSPLkotlinx/coroutines/internal/DispatchedContinuation;->()V +HSPLkotlinx/coroutines/internal/DispatchedContinuation;->(Lkotlinx/coroutines/CoroutineDispatcher;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/internal/DispatchedContinuation;->awaitReusability$kotlinx_coroutines_core()V +HSPLkotlinx/coroutines/internal/DispatchedContinuation;->claimReusableCancellableContinuation$kotlinx_coroutines_core()Lkotlinx/coroutines/CancellableContinuationImpl; +HSPLkotlinx/coroutines/internal/DispatchedContinuation;->dispatchYield$kotlinx_coroutines_core(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Object;)V +HSPLkotlinx/coroutines/internal/DispatchedContinuation;->getContext()Lkotlin/coroutines/CoroutineContext; +HSPLkotlinx/coroutines/internal/DispatchedContinuation;->getDelegate$kotlinx_coroutines_core()Lkotlin/coroutines/Continuation; +HSPLkotlinx/coroutines/internal/DispatchedContinuation;->getReusableCancellableContinuation()Lkotlinx/coroutines/CancellableContinuationImpl; +HSPLkotlinx/coroutines/internal/DispatchedContinuation;->get_reusableCancellableContinuation$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/internal/DispatchedContinuation;->isReusable$kotlinx_coroutines_core()Z +HSPLkotlinx/coroutines/internal/DispatchedContinuation;->postponeCancellation$kotlinx_coroutines_core(Ljava/lang/Throwable;)Z +HSPLkotlinx/coroutines/internal/DispatchedContinuation;->release$kotlinx_coroutines_core()V +HSPLkotlinx/coroutines/internal/DispatchedContinuation;->resumeWith(Ljava/lang/Object;)V +HSPLkotlinx/coroutines/internal/DispatchedContinuation;->takeState$kotlinx_coroutines_core()Ljava/lang/Object; +HSPLkotlinx/coroutines/internal/DispatchedContinuation;->tryReleaseClaimedContinuation$kotlinx_coroutines_core(Lkotlinx/coroutines/CancellableContinuation;)Ljava/lang/Throwable; +Lkotlinx/coroutines/internal/DispatchedContinuationKt; +HSPLkotlinx/coroutines/internal/DispatchedContinuationKt;->()V +HSPLkotlinx/coroutines/internal/DispatchedContinuationKt;->access$getUNDEFINED$p()Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/internal/DispatchedContinuationKt;->resumeCancellableWith$default(Lkotlin/coroutines/Continuation;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V +HSPLkotlinx/coroutines/internal/DispatchedContinuationKt;->resumeCancellableWith(Lkotlin/coroutines/Continuation;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)V +Lkotlinx/coroutines/internal/FastServiceLoader; +HSPLkotlinx/coroutines/internal/FastServiceLoader;->()V +HSPLkotlinx/coroutines/internal/FastServiceLoader;->()V +HSPLkotlinx/coroutines/internal/FastServiceLoader;->loadMainDispatcherFactory$kotlinx_coroutines_core()Ljava/util/List; +Lkotlinx/coroutines/internal/FastServiceLoaderKt; +HSPLkotlinx/coroutines/internal/FastServiceLoaderKt;->()V +HSPLkotlinx/coroutines/internal/FastServiceLoaderKt;->getANDROID_DETECTED()Z +Lkotlinx/coroutines/internal/InlineList; +HSPLkotlinx/coroutines/internal/InlineList;->constructor-impl$default(Ljava/lang/Object;ILkotlin/jvm/internal/DefaultConstructorMarker;)Ljava/lang/Object; +HSPLkotlinx/coroutines/internal/InlineList;->constructor-impl(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/internal/InlineList;->plus-FjFbRPM(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/internal/LimitedDispatcher; +HSPLkotlinx/coroutines/internal/LimitedDispatcher;->()V +HSPLkotlinx/coroutines/internal/LimitedDispatcher;->(Lkotlinx/coroutines/CoroutineDispatcher;I)V +HSPLkotlinx/coroutines/internal/LimitedDispatcher;->access$obtainTaskOrDeallocateWorker(Lkotlinx/coroutines/internal/LimitedDispatcher;)Ljava/lang/Runnable; +HSPLkotlinx/coroutines/internal/LimitedDispatcher;->dispatch(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V +HSPLkotlinx/coroutines/internal/LimitedDispatcher;->getRunningWorkers$volatile$FU()Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater; +HSPLkotlinx/coroutines/internal/LimitedDispatcher;->obtainTaskOrDeallocateWorker()Ljava/lang/Runnable; +HSPLkotlinx/coroutines/internal/LimitedDispatcher;->tryAllocateWorker()Z +Lkotlinx/coroutines/internal/LimitedDispatcher$Worker; +HSPLkotlinx/coroutines/internal/LimitedDispatcher$Worker;->(Lkotlinx/coroutines/internal/LimitedDispatcher;Ljava/lang/Runnable;)V +HSPLkotlinx/coroutines/internal/LimitedDispatcher$Worker;->run()V +Lkotlinx/coroutines/internal/LimitedDispatcherKt; +HSPLkotlinx/coroutines/internal/LimitedDispatcherKt;->checkParallelism(I)V +Lkotlinx/coroutines/internal/LockFreeLinkedListHead; +HSPLkotlinx/coroutines/internal/LockFreeLinkedListHead;->()V +HSPLkotlinx/coroutines/internal/LockFreeLinkedListHead;->isRemoved()Z +Lkotlinx/coroutines/internal/LockFreeLinkedListNode; +HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->()V +HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->()V +HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->access$finishAdd(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)V +HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->access$get_next$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->addOneIfEmpty(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)Z +HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->correctPrev(Lkotlinx/coroutines/internal/OpDescriptor;)Lkotlinx/coroutines/internal/LockFreeLinkedListNode; +HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->findPrevNonRemoved(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)Lkotlinx/coroutines/internal/LockFreeLinkedListNode; +HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->finishAdd(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)V +HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->getNext()Ljava/lang/Object; +HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->getNextNode()Lkotlinx/coroutines/internal/LockFreeLinkedListNode; +HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->getPrevNode()Lkotlinx/coroutines/internal/LockFreeLinkedListNode; +HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->get_next$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->get_prev$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->get_removedRef$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->isRemoved()Z +HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->remove()Z +HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->removeOrNext()Lkotlinx/coroutines/internal/LockFreeLinkedListNode; +HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->removed()Lkotlinx/coroutines/internal/Removed; +HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode;->tryCondAddNext(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;Lkotlinx/coroutines/internal/LockFreeLinkedListNode;Lkotlinx/coroutines/internal/LockFreeLinkedListNode$CondAddOp;)I +Lkotlinx/coroutines/internal/LockFreeLinkedListNode$CondAddOp; +HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode$CondAddOp;->(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)V +HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode$CondAddOp;->complete(Ljava/lang/Object;Ljava/lang/Object;)V +HSPLkotlinx/coroutines/internal/LockFreeLinkedListNode$CondAddOp;->complete(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;Ljava/lang/Object;)V +Lkotlinx/coroutines/internal/LockFreeTaskQueue; +HSPLkotlinx/coroutines/internal/LockFreeTaskQueue;->()V +HSPLkotlinx/coroutines/internal/LockFreeTaskQueue;->(Z)V +HSPLkotlinx/coroutines/internal/LockFreeTaskQueue;->addLast(Ljava/lang/Object;)Z +HSPLkotlinx/coroutines/internal/LockFreeTaskQueue;->getSize()I +HSPLkotlinx/coroutines/internal/LockFreeTaskQueue;->get_cur$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/internal/LockFreeTaskQueue;->removeFirstOrNull()Ljava/lang/Object; +Lkotlinx/coroutines/internal/LockFreeTaskQueueCore; +HSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore;->()V +HSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore;->(IZ)V +HSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore;->addLast(Ljava/lang/Object;)I +HSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore;->allocateNextCopy(J)Lkotlinx/coroutines/internal/LockFreeTaskQueueCore; +HSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore;->allocateOrGetNextCopy(J)Lkotlinx/coroutines/internal/LockFreeTaskQueueCore; +HSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore;->getArray()Ljava/util/concurrent/atomic/AtomicReferenceArray; +HSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore;->getSize()I +HSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore;->get_next$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore;->get_state$volatile$FU()Ljava/util/concurrent/atomic/AtomicLongFieldUpdater; +HSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore;->isEmpty()Z +HSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore;->markFrozen()J +HSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore;->next()Lkotlinx/coroutines/internal/LockFreeTaskQueueCore; +HSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore;->removeFirstOrNull()Ljava/lang/Object; +Lkotlinx/coroutines/internal/LockFreeTaskQueueCore$Companion; +HSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore$Companion;->()V +HSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore$Companion;->updateHead(JI)J +HSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore$Companion;->updateTail(JI)J +HSPLkotlinx/coroutines/internal/LockFreeTaskQueueCore$Companion;->wo(JJ)J +Lkotlinx/coroutines/internal/LockFreeTaskQueueCore$Placeholder; +Lkotlinx/coroutines/internal/MainDispatcherFactory; +Lkotlinx/coroutines/internal/MainDispatcherLoader; +HSPLkotlinx/coroutines/internal/MainDispatcherLoader;->()V +HSPLkotlinx/coroutines/internal/MainDispatcherLoader;->()V +HSPLkotlinx/coroutines/internal/MainDispatcherLoader;->loadMainDispatcher()Lkotlinx/coroutines/MainCoroutineDispatcher; +Lkotlinx/coroutines/internal/MainDispatchersKt; +HSPLkotlinx/coroutines/internal/MainDispatchersKt;->()V +HSPLkotlinx/coroutines/internal/MainDispatchersKt;->tryCreateDispatcher(Lkotlinx/coroutines/internal/MainDispatcherFactory;Ljava/util/List;)Lkotlinx/coroutines/MainCoroutineDispatcher; +Lkotlinx/coroutines/internal/OnUndeliveredElementKt; +Lkotlinx/coroutines/internal/OpDescriptor; +HSPLkotlinx/coroutines/internal/OpDescriptor;->()V +Lkotlinx/coroutines/internal/Removed; +HSPLkotlinx/coroutines/internal/Removed;->(Lkotlinx/coroutines/internal/LockFreeLinkedListNode;)V +Lkotlinx/coroutines/internal/ResizableAtomicArray; +HSPLkotlinx/coroutines/internal/ResizableAtomicArray;->(I)V +HSPLkotlinx/coroutines/internal/ResizableAtomicArray;->get(I)Ljava/lang/Object; +HSPLkotlinx/coroutines/internal/ResizableAtomicArray;->setSynchronized(ILjava/lang/Object;)V +Lkotlinx/coroutines/internal/ScopeCoroutine; +HSPLkotlinx/coroutines/internal/ScopeCoroutine;->(Lkotlin/coroutines/CoroutineContext;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/internal/ScopeCoroutine;->afterCompletion(Ljava/lang/Object;)V +HSPLkotlinx/coroutines/internal/ScopeCoroutine;->afterResume(Ljava/lang/Object;)V +HSPLkotlinx/coroutines/internal/ScopeCoroutine;->getCallerFrame()Lkotlin/coroutines/jvm/internal/CoroutineStackFrame; +HSPLkotlinx/coroutines/internal/ScopeCoroutine;->isScopedCoroutine()Z +Lkotlinx/coroutines/internal/Segment; +HSPLkotlinx/coroutines/internal/Segment;->()V +HSPLkotlinx/coroutines/internal/Segment;->(JLkotlinx/coroutines/internal/Segment;I)V +HSPLkotlinx/coroutines/internal/Segment;->decPointers$kotlinx_coroutines_core()Z +HSPLkotlinx/coroutines/internal/Segment;->getCleanedAndPointers$volatile$FU()Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater; +HSPLkotlinx/coroutines/internal/Segment;->isRemoved()Z +HSPLkotlinx/coroutines/internal/Segment;->onSlotCleaned()V +HSPLkotlinx/coroutines/internal/Segment;->tryIncPointers$kotlinx_coroutines_core()Z +Lkotlinx/coroutines/internal/SegmentOrClosed; +HSPLkotlinx/coroutines/internal/SegmentOrClosed;->constructor-impl(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/internal/SegmentOrClosed;->getSegment-impl(Ljava/lang/Object;)Lkotlinx/coroutines/internal/Segment; +HSPLkotlinx/coroutines/internal/SegmentOrClosed;->isClosed-impl(Ljava/lang/Object;)Z +Lkotlinx/coroutines/internal/StackTraceRecoveryKt; +HSPLkotlinx/coroutines/internal/StackTraceRecoveryKt;->()V +HSPLkotlinx/coroutines/internal/StackTraceRecoveryKt;->recoverStackTrace(Ljava/lang/Throwable;)Ljava/lang/Throwable; +Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/internal/Symbol;->(Ljava/lang/String;)V +Lkotlinx/coroutines/internal/SystemPropsKt; +HSPLkotlinx/coroutines/internal/SystemPropsKt;->getAVAILABLE_PROCESSORS()I +HSPLkotlinx/coroutines/internal/SystemPropsKt;->systemProp$default(Ljava/lang/String;IIIILjava/lang/Object;)I +HSPLkotlinx/coroutines/internal/SystemPropsKt;->systemProp$default(Ljava/lang/String;JJJILjava/lang/Object;)J +HSPLkotlinx/coroutines/internal/SystemPropsKt;->systemProp(Ljava/lang/String;)Ljava/lang/String; +HSPLkotlinx/coroutines/internal/SystemPropsKt;->systemProp(Ljava/lang/String;III)I +HSPLkotlinx/coroutines/internal/SystemPropsKt;->systemProp(Ljava/lang/String;JJJ)J +HSPLkotlinx/coroutines/internal/SystemPropsKt;->systemProp(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; +HSPLkotlinx/coroutines/internal/SystemPropsKt;->systemProp(Ljava/lang/String;Z)Z +Lkotlinx/coroutines/internal/SystemPropsKt__SystemPropsKt; +HSPLkotlinx/coroutines/internal/SystemPropsKt__SystemPropsKt;->()V +HSPLkotlinx/coroutines/internal/SystemPropsKt__SystemPropsKt;->getAVAILABLE_PROCESSORS()I +HSPLkotlinx/coroutines/internal/SystemPropsKt__SystemPropsKt;->systemProp(Ljava/lang/String;)Ljava/lang/String; +Lkotlinx/coroutines/internal/SystemPropsKt__SystemProps_commonKt; +HSPLkotlinx/coroutines/internal/SystemPropsKt__SystemProps_commonKt;->systemProp$default(Ljava/lang/String;IIIILjava/lang/Object;)I +HSPLkotlinx/coroutines/internal/SystemPropsKt__SystemProps_commonKt;->systemProp$default(Ljava/lang/String;JJJILjava/lang/Object;)J +HSPLkotlinx/coroutines/internal/SystemPropsKt__SystemProps_commonKt;->systemProp(Ljava/lang/String;III)I +HSPLkotlinx/coroutines/internal/SystemPropsKt__SystemProps_commonKt;->systemProp(Ljava/lang/String;JJJ)J +HSPLkotlinx/coroutines/internal/SystemPropsKt__SystemProps_commonKt;->systemProp(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String; +HSPLkotlinx/coroutines/internal/SystemPropsKt__SystemProps_commonKt;->systemProp(Ljava/lang/String;Z)Z +Lkotlinx/coroutines/internal/ThreadContextKt; +HSPLkotlinx/coroutines/internal/ThreadContextKt;->()V +HSPLkotlinx/coroutines/internal/ThreadContextKt;->restoreThreadContext(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Object;)V +HSPLkotlinx/coroutines/internal/ThreadContextKt;->threadContextElements(Lkotlin/coroutines/CoroutineContext;)Ljava/lang/Object; +HSPLkotlinx/coroutines/internal/ThreadContextKt;->updateThreadContext(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/internal/ThreadContextKt$countAll$1; +HSPLkotlinx/coroutines/internal/ThreadContextKt$countAll$1;->()V +HSPLkotlinx/coroutines/internal/ThreadContextKt$countAll$1;->()V +HSPLkotlinx/coroutines/internal/ThreadContextKt$countAll$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/internal/ThreadContextKt$countAll$1;->invoke(Ljava/lang/Object;Lkotlin/coroutines/CoroutineContext$Element;)Ljava/lang/Object; +Lkotlinx/coroutines/internal/ThreadContextKt$findOne$1; +HSPLkotlinx/coroutines/internal/ThreadContextKt$findOne$1;->()V +HSPLkotlinx/coroutines/internal/ThreadContextKt$findOne$1;->()V +HSPLkotlinx/coroutines/internal/ThreadContextKt$findOne$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/internal/ThreadContextKt$findOne$1;->invoke(Lkotlinx/coroutines/ThreadContextElement;Lkotlin/coroutines/CoroutineContext$Element;)Lkotlinx/coroutines/ThreadContextElement; +Lkotlinx/coroutines/internal/ThreadContextKt$updateState$1; +HSPLkotlinx/coroutines/internal/ThreadContextKt$updateState$1;->()V +HSPLkotlinx/coroutines/internal/ThreadContextKt$updateState$1;->()V +Lkotlinx/coroutines/internal/ThreadLocalElement; +HSPLkotlinx/coroutines/internal/ThreadLocalElement;->(Ljava/lang/Object;Ljava/lang/ThreadLocal;)V +HSPLkotlinx/coroutines/internal/ThreadLocalElement;->fold(Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; +HSPLkotlinx/coroutines/internal/ThreadLocalElement;->get(Lkotlin/coroutines/CoroutineContext$Key;)Lkotlin/coroutines/CoroutineContext$Element; +HSPLkotlinx/coroutines/internal/ThreadLocalElement;->getKey()Lkotlin/coroutines/CoroutineContext$Key; +HSPLkotlinx/coroutines/internal/ThreadLocalElement;->restoreThreadContext(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Object;)V +HSPLkotlinx/coroutines/internal/ThreadLocalElement;->updateThreadContext(Lkotlin/coroutines/CoroutineContext;)Ljava/lang/Object; +Lkotlinx/coroutines/internal/ThreadLocalKey; +HSPLkotlinx/coroutines/internal/ThreadLocalKey;->(Ljava/lang/ThreadLocal;)V +HSPLkotlinx/coroutines/internal/ThreadLocalKey;->equals(Ljava/lang/Object;)Z +Lkotlinx/coroutines/internal/ThreadLocalKt; +HSPLkotlinx/coroutines/internal/ThreadLocalKt;->commonThreadLocal(Lkotlinx/coroutines/internal/Symbol;)Ljava/lang/ThreadLocal; +Lkotlinx/coroutines/internal/ThreadSafeHeap; +HSPLkotlinx/coroutines/internal/ThreadSafeHeap;->()V +HSPLkotlinx/coroutines/internal/ThreadSafeHeap;->()V +HSPLkotlinx/coroutines/internal/ThreadSafeHeap;->addImpl(Lkotlinx/coroutines/internal/ThreadSafeHeapNode;)V +HSPLkotlinx/coroutines/internal/ThreadSafeHeap;->firstImpl()Lkotlinx/coroutines/internal/ThreadSafeHeapNode; +HSPLkotlinx/coroutines/internal/ThreadSafeHeap;->getSize()I +HSPLkotlinx/coroutines/internal/ThreadSafeHeap;->get_size$volatile$FU()Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater; +HSPLkotlinx/coroutines/internal/ThreadSafeHeap;->isEmpty()Z +HSPLkotlinx/coroutines/internal/ThreadSafeHeap;->peek()Lkotlinx/coroutines/internal/ThreadSafeHeapNode; +HSPLkotlinx/coroutines/internal/ThreadSafeHeap;->realloc()[Lkotlinx/coroutines/internal/ThreadSafeHeapNode; +HSPLkotlinx/coroutines/internal/ThreadSafeHeap;->remove(Lkotlinx/coroutines/internal/ThreadSafeHeapNode;)Z +HSPLkotlinx/coroutines/internal/ThreadSafeHeap;->removeAtImpl(I)Lkotlinx/coroutines/internal/ThreadSafeHeapNode; +HSPLkotlinx/coroutines/internal/ThreadSafeHeap;->setSize(I)V +HSPLkotlinx/coroutines/internal/ThreadSafeHeap;->siftDownFrom(I)V +HSPLkotlinx/coroutines/internal/ThreadSafeHeap;->siftUpFrom(I)V +HSPLkotlinx/coroutines/internal/ThreadSafeHeap;->swap(II)V +Lkotlinx/coroutines/internal/ThreadSafeHeapNode; +Lkotlinx/coroutines/internal/ThreadState; +Lkotlinx/coroutines/intrinsics/CancellableKt; +HSPLkotlinx/coroutines/intrinsics/CancellableKt;->startCoroutineCancellable$default(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/Continuation;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)V +HSPLkotlinx/coroutines/intrinsics/CancellableKt;->startCoroutineCancellable(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/Continuation;Lkotlin/jvm/functions/Function1;)V +Lkotlinx/coroutines/intrinsics/UndispatchedKt; +HSPLkotlinx/coroutines/intrinsics/UndispatchedKt;->startCoroutineUndispatched(Lkotlin/jvm/functions/Function2;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/intrinsics/UndispatchedKt;->startUndispatchedOrReturn(Lkotlinx/coroutines/internal/ScopeCoroutine;Ljava/lang/Object;Lkotlin/jvm/functions/Function2;)Ljava/lang/Object; +Lkotlinx/coroutines/scheduling/CoroutineScheduler; +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->()V +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->(IIJLjava/lang/String;)V +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->access$getControlState$volatile$FU()Ljava/util/concurrent/atomic/AtomicLongFieldUpdater; +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->addToGlobalQueue(Lkotlinx/coroutines/scheduling/Task;)Z +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->createNewWorker()I +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->createTask(Ljava/lang/Runnable;Lkotlinx/coroutines/scheduling/TaskContext;)Lkotlinx/coroutines/scheduling/Task; +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->currentWorker()Lkotlinx/coroutines/scheduling/CoroutineScheduler$Worker; +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->dispatch$default(Lkotlinx/coroutines/scheduling/CoroutineScheduler;Ljava/lang/Runnable;Lkotlinx/coroutines/scheduling/TaskContext;ZILjava/lang/Object;)V +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->dispatch(Ljava/lang/Runnable;Lkotlinx/coroutines/scheduling/TaskContext;Z)V +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->getControlState$volatile$FU()Ljava/util/concurrent/atomic/AtomicLongFieldUpdater; +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->getParkedWorkersStack$volatile$FU()Ljava/util/concurrent/atomic/AtomicLongFieldUpdater; +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->get_isTerminated$volatile$FU()Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater; +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->isTerminated()Z +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->parkedWorkersStackNextIndex(Lkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;)I +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->parkedWorkersStackPop()Lkotlinx/coroutines/scheduling/CoroutineScheduler$Worker; +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->parkedWorkersStackPush(Lkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;)Z +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->runSafely(Lkotlinx/coroutines/scheduling/Task;)V +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->signalBlockingWork(JZ)V +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->signalCpuWork()V +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->submitToLocalQueue(Lkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;Lkotlinx/coroutines/scheduling/Task;Z)Lkotlinx/coroutines/scheduling/Task; +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->tryCreateWorker$default(Lkotlinx/coroutines/scheduling/CoroutineScheduler;JILjava/lang/Object;)Z +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->tryCreateWorker(J)Z +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler;->tryUnpark()Z +Lkotlinx/coroutines/scheduling/CoroutineScheduler$Companion; +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Companion;->()V +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlinx/coroutines/scheduling/CoroutineScheduler$Worker; +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->()V +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->(Lkotlinx/coroutines/scheduling/CoroutineScheduler;)V +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->(Lkotlinx/coroutines/scheduling/CoroutineScheduler;I)V +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->access$getThis$0$p(Lkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;)Lkotlinx/coroutines/scheduling/CoroutineScheduler; +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->afterTask(I)V +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->beforeTask(I)V +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->executeTask(Lkotlinx/coroutines/scheduling/Task;)V +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->findAnyTask(Z)Lkotlinx/coroutines/scheduling/Task; +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->findBlockingTask()Lkotlinx/coroutines/scheduling/Task; +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->findTask(Z)Lkotlinx/coroutines/scheduling/Task; +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->getIndexInArray()I +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->getNextParkedWorker()Ljava/lang/Object; +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->getWorkerCtl$volatile$FU$kotlinx_coroutines_core()Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater; +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->idleReset(I)V +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->inStack()Z +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->nextInt(I)I +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->park()V +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->pollGlobalQueues()Lkotlinx/coroutines/scheduling/Task; +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->run()V +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->runWorker()V +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->setIndexInArray(I)V +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->setNextParkedWorker(Ljava/lang/Object;)V +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->tryAcquireCpuPermit()Z +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->tryPark()V +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->tryReleaseCpu(Lkotlinx/coroutines/scheduling/CoroutineScheduler$WorkerState;)Z +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$Worker;->trySteal(I)Lkotlinx/coroutines/scheduling/Task; +Lkotlinx/coroutines/scheduling/CoroutineScheduler$WorkerState; +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$WorkerState;->$values()[Lkotlinx/coroutines/scheduling/CoroutineScheduler$WorkerState; +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$WorkerState;->()V +HSPLkotlinx/coroutines/scheduling/CoroutineScheduler$WorkerState;->(Ljava/lang/String;I)V +Lkotlinx/coroutines/scheduling/DefaultIoScheduler; +HSPLkotlinx/coroutines/scheduling/DefaultIoScheduler;->()V +HSPLkotlinx/coroutines/scheduling/DefaultIoScheduler;->()V +HSPLkotlinx/coroutines/scheduling/DefaultIoScheduler;->dispatch(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V +Lkotlinx/coroutines/scheduling/DefaultScheduler; +HSPLkotlinx/coroutines/scheduling/DefaultScheduler;->()V +HSPLkotlinx/coroutines/scheduling/DefaultScheduler;->()V +Lkotlinx/coroutines/scheduling/GlobalQueue; +HSPLkotlinx/coroutines/scheduling/GlobalQueue;->()V +Lkotlinx/coroutines/scheduling/NanoTimeSource; +HSPLkotlinx/coroutines/scheduling/NanoTimeSource;->()V +HSPLkotlinx/coroutines/scheduling/NanoTimeSource;->()V +HSPLkotlinx/coroutines/scheduling/NanoTimeSource;->nanoTime()J +Lkotlinx/coroutines/scheduling/SchedulerCoroutineDispatcher; +HSPLkotlinx/coroutines/scheduling/SchedulerCoroutineDispatcher;->(IIJLjava/lang/String;)V +HSPLkotlinx/coroutines/scheduling/SchedulerCoroutineDispatcher;->createScheduler()Lkotlinx/coroutines/scheduling/CoroutineScheduler; +HSPLkotlinx/coroutines/scheduling/SchedulerCoroutineDispatcher;->dispatch(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V +HSPLkotlinx/coroutines/scheduling/SchedulerCoroutineDispatcher;->dispatchWithContext$kotlinx_coroutines_core(Ljava/lang/Runnable;Lkotlinx/coroutines/scheduling/TaskContext;Z)V +HSPLkotlinx/coroutines/scheduling/SchedulerCoroutineDispatcher;->dispatchYield(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V +Lkotlinx/coroutines/scheduling/SchedulerTimeSource; +HSPLkotlinx/coroutines/scheduling/SchedulerTimeSource;->()V +Lkotlinx/coroutines/scheduling/Task; +HSPLkotlinx/coroutines/scheduling/Task;->()V +HSPLkotlinx/coroutines/scheduling/Task;->(JLkotlinx/coroutines/scheduling/TaskContext;)V +Lkotlinx/coroutines/scheduling/TaskContext; +Lkotlinx/coroutines/scheduling/TaskContextImpl; +HSPLkotlinx/coroutines/scheduling/TaskContextImpl;->(I)V +HSPLkotlinx/coroutines/scheduling/TaskContextImpl;->afterTask()V +HSPLkotlinx/coroutines/scheduling/TaskContextImpl;->getTaskMode()I +Lkotlinx/coroutines/scheduling/TaskImpl; +HSPLkotlinx/coroutines/scheduling/TaskImpl;->(Ljava/lang/Runnable;JLkotlinx/coroutines/scheduling/TaskContext;)V +HSPLkotlinx/coroutines/scheduling/TaskImpl;->run()V +Lkotlinx/coroutines/scheduling/TasksKt; +HSPLkotlinx/coroutines/scheduling/TasksKt;->()V +Lkotlinx/coroutines/scheduling/UnlimitedIoScheduler; +HSPLkotlinx/coroutines/scheduling/UnlimitedIoScheduler;->()V +HSPLkotlinx/coroutines/scheduling/UnlimitedIoScheduler;->()V +HSPLkotlinx/coroutines/scheduling/UnlimitedIoScheduler;->dispatch(Lkotlin/coroutines/CoroutineContext;Ljava/lang/Runnable;)V +HSPLkotlinx/coroutines/scheduling/UnlimitedIoScheduler;->limitedParallelism(I)Lkotlinx/coroutines/CoroutineDispatcher; +Lkotlinx/coroutines/scheduling/WorkQueue; +HSPLkotlinx/coroutines/scheduling/WorkQueue;->()V +HSPLkotlinx/coroutines/scheduling/WorkQueue;->()V +HSPLkotlinx/coroutines/scheduling/WorkQueue;->add(Lkotlinx/coroutines/scheduling/Task;Z)Lkotlinx/coroutines/scheduling/Task; +HSPLkotlinx/coroutines/scheduling/WorkQueue;->addLast(Lkotlinx/coroutines/scheduling/Task;)Lkotlinx/coroutines/scheduling/Task; +HSPLkotlinx/coroutines/scheduling/WorkQueue;->decrementIfBlocking(Lkotlinx/coroutines/scheduling/Task;)V +HSPLkotlinx/coroutines/scheduling/WorkQueue;->getBlockingTasksInBuffer$volatile$FU()Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater; +HSPLkotlinx/coroutines/scheduling/WorkQueue;->getBufferSize()I +HSPLkotlinx/coroutines/scheduling/WorkQueue;->getConsumerIndex$volatile$FU()Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater; +HSPLkotlinx/coroutines/scheduling/WorkQueue;->getLastScheduledTask$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/scheduling/WorkQueue;->getProducerIndex$volatile$FU()Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater; +HSPLkotlinx/coroutines/scheduling/WorkQueue;->poll()Lkotlinx/coroutines/scheduling/Task; +HSPLkotlinx/coroutines/scheduling/WorkQueue;->pollBlocking()Lkotlinx/coroutines/scheduling/Task; +HSPLkotlinx/coroutines/scheduling/WorkQueue;->pollBuffer()Lkotlinx/coroutines/scheduling/Task; +HSPLkotlinx/coroutines/scheduling/WorkQueue;->pollWithExclusiveMode(Z)Lkotlinx/coroutines/scheduling/Task; +HSPLkotlinx/coroutines/scheduling/WorkQueue;->stealWithExclusiveMode(I)Lkotlinx/coroutines/scheduling/Task; +HSPLkotlinx/coroutines/scheduling/WorkQueue;->tryExtractFromTheMiddle(IZ)Lkotlinx/coroutines/scheduling/Task; +HSPLkotlinx/coroutines/scheduling/WorkQueue;->trySteal(ILkotlin/jvm/internal/Ref$ObjectRef;)J +HSPLkotlinx/coroutines/scheduling/WorkQueue;->tryStealLastScheduled(ILkotlin/jvm/internal/Ref$ObjectRef;)J +Lkotlinx/coroutines/selects/OnTimeout; +HSPLkotlinx/coroutines/selects/OnTimeout;->(J)V +HSPLkotlinx/coroutines/selects/OnTimeout;->access$register(Lkotlinx/coroutines/selects/OnTimeout;Lkotlinx/coroutines/selects/SelectInstance;Ljava/lang/Object;)V +HSPLkotlinx/coroutines/selects/OnTimeout;->getSelectClause()Lkotlinx/coroutines/selects/SelectClause0; +HSPLkotlinx/coroutines/selects/OnTimeout;->register(Lkotlinx/coroutines/selects/SelectInstance;Ljava/lang/Object;)V +Lkotlinx/coroutines/selects/OnTimeout$register$$inlined$Runnable$1; +HSPLkotlinx/coroutines/selects/OnTimeout$register$$inlined$Runnable$1;->(Lkotlinx/coroutines/selects/SelectInstance;Lkotlinx/coroutines/selects/OnTimeout;)V +HSPLkotlinx/coroutines/selects/OnTimeout$register$$inlined$Runnable$1;->run()V +Lkotlinx/coroutines/selects/OnTimeout$selectClause$1; +HSPLkotlinx/coroutines/selects/OnTimeout$selectClause$1;->()V +HSPLkotlinx/coroutines/selects/OnTimeout$selectClause$1;->()V +HSPLkotlinx/coroutines/selects/OnTimeout$selectClause$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/selects/OnTimeout$selectClause$1;->invoke(Lkotlinx/coroutines/selects/OnTimeout;Lkotlinx/coroutines/selects/SelectInstance;Ljava/lang/Object;)V +Lkotlinx/coroutines/selects/OnTimeoutKt; +HSPLkotlinx/coroutines/selects/OnTimeoutKt;->onTimeout(Lkotlinx/coroutines/selects/SelectBuilder;JLkotlin/jvm/functions/Function1;)V +Lkotlinx/coroutines/selects/SelectBuilder; +Lkotlinx/coroutines/selects/SelectClause; +Lkotlinx/coroutines/selects/SelectClause0; +Lkotlinx/coroutines/selects/SelectClause0Impl; +HSPLkotlinx/coroutines/selects/SelectClause0Impl;->(Ljava/lang/Object;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;)V +HSPLkotlinx/coroutines/selects/SelectClause0Impl;->(Ljava/lang/Object;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlinx/coroutines/selects/SelectClause0Impl;->getClauseObject()Ljava/lang/Object; +HSPLkotlinx/coroutines/selects/SelectClause0Impl;->getOnCancellationConstructor()Lkotlin/jvm/functions/Function3; +HSPLkotlinx/coroutines/selects/SelectClause0Impl;->getProcessResFunc()Lkotlin/jvm/functions/Function3; +HSPLkotlinx/coroutines/selects/SelectClause0Impl;->getRegFunc()Lkotlin/jvm/functions/Function3; +Lkotlinx/coroutines/selects/SelectClause1; +Lkotlinx/coroutines/selects/SelectClause1Impl; +HSPLkotlinx/coroutines/selects/SelectClause1Impl;->(Ljava/lang/Object;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;Lkotlin/jvm/functions/Function3;)V +HSPLkotlinx/coroutines/selects/SelectClause1Impl;->getClauseObject()Ljava/lang/Object; +HSPLkotlinx/coroutines/selects/SelectClause1Impl;->getOnCancellationConstructor()Lkotlin/jvm/functions/Function3; +HSPLkotlinx/coroutines/selects/SelectClause1Impl;->getProcessResFunc()Lkotlin/jvm/functions/Function3; +HSPLkotlinx/coroutines/selects/SelectClause1Impl;->getRegFunc()Lkotlin/jvm/functions/Function3; +Lkotlinx/coroutines/selects/SelectImplementation; +HSPLkotlinx/coroutines/selects/SelectImplementation;->()V +HSPLkotlinx/coroutines/selects/SelectImplementation;->(Lkotlin/coroutines/CoroutineContext;)V +HSPLkotlinx/coroutines/selects/SelectImplementation;->access$doSelectSuspend(Lkotlinx/coroutines/selects/SelectImplementation;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/selects/SelectImplementation;->access$getInternalResult$p(Lkotlinx/coroutines/selects/SelectImplementation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/selects/SelectImplementation;->access$getState$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/selects/SelectImplementation;->checkClauseObject(Ljava/lang/Object;)V +HSPLkotlinx/coroutines/selects/SelectImplementation;->cleanup(Lkotlinx/coroutines/selects/SelectImplementation$ClauseData;)V +HSPLkotlinx/coroutines/selects/SelectImplementation;->complete(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/selects/SelectImplementation;->disposeOnCompletion(Lkotlinx/coroutines/DisposableHandle;)V +HSPLkotlinx/coroutines/selects/SelectImplementation;->doSelect$suspendImpl(Lkotlinx/coroutines/selects/SelectImplementation;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/selects/SelectImplementation;->doSelect(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/selects/SelectImplementation;->doSelectSuspend(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/selects/SelectImplementation;->findClause(Ljava/lang/Object;)Lkotlinx/coroutines/selects/SelectImplementation$ClauseData; +HSPLkotlinx/coroutines/selects/SelectImplementation;->getContext()Lkotlin/coroutines/CoroutineContext; +HSPLkotlinx/coroutines/selects/SelectImplementation;->getState$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/selects/SelectImplementation;->invoke(Ljava/lang/Throwable;)V +HSPLkotlinx/coroutines/selects/SelectImplementation;->invoke(Lkotlinx/coroutines/selects/SelectClause0;Lkotlin/jvm/functions/Function1;)V +HSPLkotlinx/coroutines/selects/SelectImplementation;->invoke(Lkotlinx/coroutines/selects/SelectClause1;Lkotlin/jvm/functions/Function2;)V +HSPLkotlinx/coroutines/selects/SelectImplementation;->invokeOnCancellation(Lkotlinx/coroutines/internal/Segment;I)V +HSPLkotlinx/coroutines/selects/SelectImplementation;->isSelected()Z +HSPLkotlinx/coroutines/selects/SelectImplementation;->register$default(Lkotlinx/coroutines/selects/SelectImplementation;Lkotlinx/coroutines/selects/SelectImplementation$ClauseData;ZILjava/lang/Object;)V +HSPLkotlinx/coroutines/selects/SelectImplementation;->register(Lkotlinx/coroutines/selects/SelectImplementation$ClauseData;Z)V +HSPLkotlinx/coroutines/selects/SelectImplementation;->trySelect(Ljava/lang/Object;Ljava/lang/Object;)Z +HSPLkotlinx/coroutines/selects/SelectImplementation;->trySelectInternal(Ljava/lang/Object;Ljava/lang/Object;)I +HSPLkotlinx/coroutines/selects/SelectImplementation;->waitUntilSelected(Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +Lkotlinx/coroutines/selects/SelectImplementation$ClauseData; +HSPLkotlinx/coroutines/selects/SelectImplementation$ClauseData;->(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 +HSPLkotlinx/coroutines/selects/SelectImplementation$ClauseData;->createOnCancellationAction(Lkotlinx/coroutines/selects/SelectInstance;Ljava/lang/Object;)Lkotlin/jvm/functions/Function1; +HSPLkotlinx/coroutines/selects/SelectImplementation$ClauseData;->dispose()V +HSPLkotlinx/coroutines/selects/SelectImplementation$ClauseData;->invokeBlock(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/selects/SelectImplementation$ClauseData;->processResult(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/selects/SelectImplementation$ClauseData;->tryRegisterAsWaiter(Lkotlinx/coroutines/selects/SelectImplementation;)Z +Lkotlinx/coroutines/selects/SelectImplementation$doSelectSuspend$1; +HSPLkotlinx/coroutines/selects/SelectImplementation$doSelectSuspend$1;->(Lkotlinx/coroutines/selects/SelectImplementation;Lkotlin/coroutines/Continuation;)V +HSPLkotlinx/coroutines/selects/SelectImplementation$doSelectSuspend$1;->invokeSuspend(Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/selects/SelectInstance; +Lkotlinx/coroutines/selects/SelectInstanceInternal; +Lkotlinx/coroutines/selects/SelectKt; +HSPLkotlinx/coroutines/selects/SelectKt;->()V +HSPLkotlinx/coroutines/selects/SelectKt;->access$getDUMMY_PROCESS_RESULT_FUNCTION$p()Lkotlin/jvm/functions/Function3; +HSPLkotlinx/coroutines/selects/SelectKt;->access$getNO_RESULT$p()Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/selects/SelectKt;->access$getSTATE_CANCELLED$p()Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/selects/SelectKt;->access$getSTATE_COMPLETED$p()Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/selects/SelectKt;->access$getSTATE_REG$p()Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/selects/SelectKt;->access$tryResume(Lkotlinx/coroutines/CancellableContinuation;Lkotlin/jvm/functions/Function1;)Z +HSPLkotlinx/coroutines/selects/SelectKt;->getPARAM_CLAUSE_0()Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/selects/SelectKt;->tryResume(Lkotlinx/coroutines/CancellableContinuation;Lkotlin/jvm/functions/Function1;)Z +Lkotlinx/coroutines/selects/SelectKt$DUMMY_PROCESS_RESULT_FUNCTION$1; +HSPLkotlinx/coroutines/selects/SelectKt$DUMMY_PROCESS_RESULT_FUNCTION$1;->()V +HSPLkotlinx/coroutines/selects/SelectKt$DUMMY_PROCESS_RESULT_FUNCTION$1;->()V +HSPLkotlinx/coroutines/selects/SelectKt$DUMMY_PROCESS_RESULT_FUNCTION$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/selects/SelectKt$DUMMY_PROCESS_RESULT_FUNCTION$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Void; +Lkotlinx/coroutines/sync/Mutex; +Lkotlinx/coroutines/sync/Mutex$DefaultImpls; +HSPLkotlinx/coroutines/sync/Mutex$DefaultImpls;->lock$default(Lkotlinx/coroutines/sync/Mutex;Ljava/lang/Object;Lkotlin/coroutines/Continuation;ILjava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/coroutines/sync/Mutex$DefaultImpls;->unlock$default(Lkotlinx/coroutines/sync/Mutex;Ljava/lang/Object;ILjava/lang/Object;)V +Lkotlinx/coroutines/sync/MutexImpl; +HSPLkotlinx/coroutines/sync/MutexImpl;->()V +HSPLkotlinx/coroutines/sync/MutexImpl;->(Z)V +HSPLkotlinx/coroutines/sync/MutexImpl;->access$getOwner$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/sync/MutexImpl;->getOwner$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/sync/MutexImpl;->isLocked()Z +HSPLkotlinx/coroutines/sync/MutexImpl;->lock$suspendImpl(Lkotlinx/coroutines/sync/MutexImpl;Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/sync/MutexImpl;->lock(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/sync/MutexImpl;->lockSuspend(Ljava/lang/Object;Lkotlin/coroutines/Continuation;)Ljava/lang/Object; +HSPLkotlinx/coroutines/sync/MutexImpl;->tryLock(Ljava/lang/Object;)Z +HSPLkotlinx/coroutines/sync/MutexImpl;->tryLockImpl(Ljava/lang/Object;)I +HSPLkotlinx/coroutines/sync/MutexImpl;->unlock(Ljava/lang/Object;)V +Lkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner; +HSPLkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner;->(Lkotlinx/coroutines/sync/MutexImpl;Lkotlinx/coroutines/CancellableContinuationImpl;Ljava/lang/Object;)V +HSPLkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner;->completeResume(Ljava/lang/Object;)V +HSPLkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner;->invokeOnCancellation(Lkotlinx/coroutines/internal/Segment;I)V +HSPLkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner;->tryResume(Ljava/lang/Object;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; +HSPLkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner;->tryResume(Lkotlin/Unit;Ljava/lang/Object;Lkotlin/jvm/functions/Function1;)Ljava/lang/Object; +Lkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner$tryResume$token$1; +HSPLkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner$tryResume$token$1;->(Lkotlinx/coroutines/sync/MutexImpl;Lkotlinx/coroutines/sync/MutexImpl$CancellableContinuationWithOwner;)V +Lkotlinx/coroutines/sync/MutexImpl$onSelectCancellationUnlockConstructor$1; +HSPLkotlinx/coroutines/sync/MutexImpl$onSelectCancellationUnlockConstructor$1;->(Lkotlinx/coroutines/sync/MutexImpl;)V +Lkotlinx/coroutines/sync/MutexKt; +HSPLkotlinx/coroutines/sync/MutexKt;->()V +HSPLkotlinx/coroutines/sync/MutexKt;->Mutex$default(ZILjava/lang/Object;)Lkotlinx/coroutines/sync/Mutex; +HSPLkotlinx/coroutines/sync/MutexKt;->Mutex(Z)Lkotlinx/coroutines/sync/Mutex; +HSPLkotlinx/coroutines/sync/MutexKt;->access$getNO_OWNER$p()Lkotlinx/coroutines/internal/Symbol; +Lkotlinx/coroutines/sync/Semaphore; +Lkotlinx/coroutines/sync/SemaphoreImpl; +HSPLkotlinx/coroutines/sync/SemaphoreImpl;->()V +HSPLkotlinx/coroutines/sync/SemaphoreImpl;->(II)V +HSPLkotlinx/coroutines/sync/SemaphoreImpl;->acquire(Lkotlinx/coroutines/CancellableContinuation;)V +HSPLkotlinx/coroutines/sync/SemaphoreImpl;->addAcquireToQueue(Lkotlinx/coroutines/Waiter;)Z +HSPLkotlinx/coroutines/sync/SemaphoreImpl;->decPermits()I +HSPLkotlinx/coroutines/sync/SemaphoreImpl;->getAvailablePermits()I +HSPLkotlinx/coroutines/sync/SemaphoreImpl;->getDeqIdx$volatile$FU()Ljava/util/concurrent/atomic/AtomicLongFieldUpdater; +HSPLkotlinx/coroutines/sync/SemaphoreImpl;->getEnqIdx$volatile$FU()Ljava/util/concurrent/atomic/AtomicLongFieldUpdater; +HSPLkotlinx/coroutines/sync/SemaphoreImpl;->getHead$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/sync/SemaphoreImpl;->getTail$volatile$FU()Ljava/util/concurrent/atomic/AtomicReferenceFieldUpdater; +HSPLkotlinx/coroutines/sync/SemaphoreImpl;->get_availablePermits$volatile$FU()Ljava/util/concurrent/atomic/AtomicIntegerFieldUpdater; +HSPLkotlinx/coroutines/sync/SemaphoreImpl;->release()V +HSPLkotlinx/coroutines/sync/SemaphoreImpl;->tryAcquire()Z +HSPLkotlinx/coroutines/sync/SemaphoreImpl;->tryResumeAcquire(Ljava/lang/Object;)Z +HSPLkotlinx/coroutines/sync/SemaphoreImpl;->tryResumeNextFromQueue()Z +Lkotlinx/coroutines/sync/SemaphoreImpl$addAcquireToQueue$createNewSegment$1; +HSPLkotlinx/coroutines/sync/SemaphoreImpl$addAcquireToQueue$createNewSegment$1;->()V +HSPLkotlinx/coroutines/sync/SemaphoreImpl$addAcquireToQueue$createNewSegment$1;->()V +HSPLkotlinx/coroutines/sync/SemaphoreImpl$addAcquireToQueue$createNewSegment$1;->invoke(JLkotlinx/coroutines/sync/SemaphoreSegment;)Lkotlinx/coroutines/sync/SemaphoreSegment; +HSPLkotlinx/coroutines/sync/SemaphoreImpl$addAcquireToQueue$createNewSegment$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/coroutines/sync/SemaphoreImpl$onCancellationRelease$1; +HSPLkotlinx/coroutines/sync/SemaphoreImpl$onCancellationRelease$1;->(Lkotlinx/coroutines/sync/SemaphoreImpl;)V +Lkotlinx/coroutines/sync/SemaphoreImpl$tryResumeNextFromQueue$createNewSegment$1; +HSPLkotlinx/coroutines/sync/SemaphoreImpl$tryResumeNextFromQueue$createNewSegment$1;->()V +HSPLkotlinx/coroutines/sync/SemaphoreImpl$tryResumeNextFromQueue$createNewSegment$1;->()V +Lkotlinx/coroutines/sync/SemaphoreKt; +HSPLkotlinx/coroutines/sync/SemaphoreKt;->()V +HSPLkotlinx/coroutines/sync/SemaphoreKt;->access$createSegment(JLkotlinx/coroutines/sync/SemaphoreSegment;)Lkotlinx/coroutines/sync/SemaphoreSegment; +HSPLkotlinx/coroutines/sync/SemaphoreKt;->access$getCANCELLED$p()Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/sync/SemaphoreKt;->access$getPERMIT$p()Lkotlinx/coroutines/internal/Symbol; +HSPLkotlinx/coroutines/sync/SemaphoreKt;->access$getSEGMENT_SIZE$p()I +HSPLkotlinx/coroutines/sync/SemaphoreKt;->createSegment(JLkotlinx/coroutines/sync/SemaphoreSegment;)Lkotlinx/coroutines/sync/SemaphoreSegment; +Lkotlinx/coroutines/sync/SemaphoreSegment; +HSPLkotlinx/coroutines/sync/SemaphoreSegment;->(JLkotlinx/coroutines/sync/SemaphoreSegment;I)V +HSPLkotlinx/coroutines/sync/SemaphoreSegment;->getAcquirers()Ljava/util/concurrent/atomic/AtomicReferenceArray; +HSPLkotlinx/coroutines/sync/SemaphoreSegment;->getNumberOfSlots()I +Lkotlinx/datetime/Clock; +Lkotlinx/datetime/Clock$System; +HSPLkotlinx/datetime/Clock$System;->()V +HSPLkotlinx/datetime/Clock$System;->()V +HSPLkotlinx/datetime/Clock$System;->now()Lkotlinx/datetime/Instant; +Lkotlinx/datetime/Instant; +HSPLkotlinx/datetime/Instant;->()V +HSPLkotlinx/datetime/Instant;->(Ljava/time/Instant;)V +HSPLkotlinx/datetime/Instant;->compareTo(Lkotlinx/datetime/Instant;)I +HSPLkotlinx/datetime/Instant;->equals(Ljava/lang/Object;)Z +HSPLkotlinx/datetime/Instant;->minus-5sfh64U(Lkotlinx/datetime/Instant;)J +HSPLkotlinx/datetime/Instant;->toEpochMilliseconds()J +Lkotlinx/datetime/Instant$Companion; +HSPLkotlinx/datetime/Instant$Companion;->()V +HSPLkotlinx/datetime/Instant$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlinx/datetime/Instant$Companion;->now()Lkotlinx/datetime/Instant; +Lkotlinx/serialization/BinaryFormat; +Lkotlinx/serialization/DeserializationStrategy; +Lkotlinx/serialization/KSerializer; +Lkotlinx/serialization/MissingFieldException; +Lkotlinx/serialization/PolymorphicSerializer; +HSPLkotlinx/serialization/PolymorphicSerializer;->(Lkotlin/reflect/KClass;)V +HSPLkotlinx/serialization/PolymorphicSerializer;->(Lkotlin/reflect/KClass;[Ljava/lang/annotation/Annotation;)V +Lkotlinx/serialization/PolymorphicSerializer$descriptor$2; +HSPLkotlinx/serialization/PolymorphicSerializer$descriptor$2;->(Lkotlinx/serialization/PolymorphicSerializer;)V +Lkotlinx/serialization/SealedClassSerializer; +HSPLkotlinx/serialization/SealedClassSerializer;->(Ljava/lang/String;Lkotlin/reflect/KClass;[Lkotlin/reflect/KClass;[Lkotlinx/serialization/KSerializer;)V +HSPLkotlinx/serialization/SealedClassSerializer;->(Ljava/lang/String;Lkotlin/reflect/KClass;[Lkotlin/reflect/KClass;[Lkotlinx/serialization/KSerializer;[Ljava/lang/annotation/Annotation;)V +HSPLkotlinx/serialization/SealedClassSerializer;->access$getSerialName2Serializer$p(Lkotlinx/serialization/SealedClassSerializer;)Ljava/util/Map; +HSPLkotlinx/serialization/SealedClassSerializer;->access$get_annotations$p(Lkotlinx/serialization/SealedClassSerializer;)Ljava/util/List; +HSPLkotlinx/serialization/SealedClassSerializer;->getBaseClass()Lkotlin/reflect/KClass; +HSPLkotlinx/serialization/SealedClassSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +Lkotlinx/serialization/SealedClassSerializer$descriptor$2; +HSPLkotlinx/serialization/SealedClassSerializer$descriptor$2;->(Ljava/lang/String;Lkotlinx/serialization/SealedClassSerializer;)V +HSPLkotlinx/serialization/SealedClassSerializer$descriptor$2;->invoke()Ljava/lang/Object; +HSPLkotlinx/serialization/SealedClassSerializer$descriptor$2;->invoke()Lkotlinx/serialization/descriptors/SerialDescriptor; +Lkotlinx/serialization/SealedClassSerializer$descriptor$2$1; +HSPLkotlinx/serialization/SealedClassSerializer$descriptor$2$1;->(Lkotlinx/serialization/SealedClassSerializer;)V +HSPLkotlinx/serialization/SealedClassSerializer$descriptor$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/serialization/SealedClassSerializer$descriptor$2$1;->invoke(Lkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;)V +Lkotlinx/serialization/SealedClassSerializer$descriptor$2$1$elementDescriptor$1; +HSPLkotlinx/serialization/SealedClassSerializer$descriptor$2$1$elementDescriptor$1;->(Lkotlinx/serialization/SealedClassSerializer;)V +HSPLkotlinx/serialization/SealedClassSerializer$descriptor$2$1$elementDescriptor$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/serialization/SealedClassSerializer$descriptor$2$1$elementDescriptor$1;->invoke(Lkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;)V +Lkotlinx/serialization/SealedClassSerializer$special$$inlined$groupingBy$1; +HSPLkotlinx/serialization/SealedClassSerializer$special$$inlined$groupingBy$1;->(Ljava/lang/Iterable;)V +HSPLkotlinx/serialization/SealedClassSerializer$special$$inlined$groupingBy$1;->keyOf(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/serialization/SealedClassSerializer$special$$inlined$groupingBy$1;->sourceIterator()Ljava/util/Iterator; +Lkotlinx/serialization/SerialFormat; +Lkotlinx/serialization/SerializationException; +HSPLkotlinx/serialization/SerializationException;->(Ljava/lang/String;)V +Lkotlinx/serialization/SerializationStrategy; +Lkotlinx/serialization/SerializersKt; +HSPLkotlinx/serialization/SerializersKt;->serializer(Lkotlin/reflect/KClass;)Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/SerializersKt;->serializerOrNull(Lkotlin/reflect/KClass;)Lkotlinx/serialization/KSerializer; +Lkotlinx/serialization/SerializersKt__SerializersKt; +HSPLkotlinx/serialization/SerializersKt__SerializersKt;->serializer(Lkotlin/reflect/KClass;)Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/SerializersKt__SerializersKt;->serializerOrNull(Lkotlin/reflect/KClass;)Lkotlinx/serialization/KSerializer; +Lkotlinx/serialization/StringFormat; +Lkotlinx/serialization/builtins/BuiltinSerializersKt; +HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->BooleanArraySerializer()Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->ByteArraySerializer()Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->CharArraySerializer()Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->DoubleArraySerializer()Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->FloatArraySerializer()Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->IntArraySerializer()Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->ListSerializer(Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->LongArraySerializer()Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->MapSerializer(Lkotlinx/serialization/KSerializer;Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->NothingSerializer()Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->ShortArraySerializer()Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->UByteArraySerializer()Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->UIntArraySerializer()Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->ULongArraySerializer()Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->UShortArraySerializer()Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/UByte$Companion;)Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/UInt$Companion;)Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/ULong$Companion;)Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/UShort$Companion;)Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/Unit;)Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/jvm/internal/BooleanCompanionObject;)Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/jvm/internal/ByteCompanionObject;)Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/jvm/internal/CharCompanionObject;)Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/jvm/internal/DoubleCompanionObject;)Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/jvm/internal/FloatCompanionObject;)Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/jvm/internal/IntCompanionObject;)Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/jvm/internal/LongCompanionObject;)Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/jvm/internal/ShortCompanionObject;)Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/jvm/internal/StringCompanionObject;)Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/builtins/BuiltinSerializersKt;->serializer(Lkotlin/time/Duration$Companion;)Lkotlinx/serialization/KSerializer; +Lkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder; +HSPLkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;->(Ljava/lang/String;)V +HSPLkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;->element$default(Lkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;Ljava/lang/String;Lkotlinx/serialization/descriptors/SerialDescriptor;Ljava/util/List;ZILjava/lang/Object;)V +HSPLkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;->element(Ljava/lang/String;Lkotlinx/serialization/descriptors/SerialDescriptor;Ljava/util/List;Z)V +HSPLkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;->getAnnotations()Ljava/util/List; +HSPLkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;->getElementAnnotations$kotlinx_serialization_core()Ljava/util/List; +HSPLkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;->getElementDescriptors$kotlinx_serialization_core()Ljava/util/List; +HSPLkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;->getElementNames$kotlinx_serialization_core()Ljava/util/List; +HSPLkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;->getElementOptionality$kotlinx_serialization_core()Ljava/util/List; +HSPLkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;->setAnnotations(Ljava/util/List;)V +Lkotlinx/serialization/descriptors/PolymorphicKind; +HSPLkotlinx/serialization/descriptors/PolymorphicKind;->()V +HSPLkotlinx/serialization/descriptors/PolymorphicKind;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlinx/serialization/descriptors/PolymorphicKind$SEALED; +HSPLkotlinx/serialization/descriptors/PolymorphicKind$SEALED;->()V +HSPLkotlinx/serialization/descriptors/PolymorphicKind$SEALED;->()V +Lkotlinx/serialization/descriptors/PrimitiveKind; +HSPLkotlinx/serialization/descriptors/PrimitiveKind;->()V +HSPLkotlinx/serialization/descriptors/PrimitiveKind;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlinx/serialization/descriptors/PrimitiveKind$BOOLEAN; +HSPLkotlinx/serialization/descriptors/PrimitiveKind$BOOLEAN;->()V +HSPLkotlinx/serialization/descriptors/PrimitiveKind$BOOLEAN;->()V +Lkotlinx/serialization/descriptors/PrimitiveKind$BYTE; +HSPLkotlinx/serialization/descriptors/PrimitiveKind$BYTE;->()V +HSPLkotlinx/serialization/descriptors/PrimitiveKind$BYTE;->()V +Lkotlinx/serialization/descriptors/PrimitiveKind$CHAR; +HSPLkotlinx/serialization/descriptors/PrimitiveKind$CHAR;->()V +HSPLkotlinx/serialization/descriptors/PrimitiveKind$CHAR;->()V +Lkotlinx/serialization/descriptors/PrimitiveKind$DOUBLE; +HSPLkotlinx/serialization/descriptors/PrimitiveKind$DOUBLE;->()V +HSPLkotlinx/serialization/descriptors/PrimitiveKind$DOUBLE;->()V +Lkotlinx/serialization/descriptors/PrimitiveKind$FLOAT; +HSPLkotlinx/serialization/descriptors/PrimitiveKind$FLOAT;->()V +HSPLkotlinx/serialization/descriptors/PrimitiveKind$FLOAT;->()V +Lkotlinx/serialization/descriptors/PrimitiveKind$INT; +HSPLkotlinx/serialization/descriptors/PrimitiveKind$INT;->()V +HSPLkotlinx/serialization/descriptors/PrimitiveKind$INT;->()V +Lkotlinx/serialization/descriptors/PrimitiveKind$LONG; +HSPLkotlinx/serialization/descriptors/PrimitiveKind$LONG;->()V +HSPLkotlinx/serialization/descriptors/PrimitiveKind$LONG;->()V +Lkotlinx/serialization/descriptors/PrimitiveKind$SHORT; +HSPLkotlinx/serialization/descriptors/PrimitiveKind$SHORT;->()V +HSPLkotlinx/serialization/descriptors/PrimitiveKind$SHORT;->()V +Lkotlinx/serialization/descriptors/PrimitiveKind$STRING; +HSPLkotlinx/serialization/descriptors/PrimitiveKind$STRING;->()V +HSPLkotlinx/serialization/descriptors/PrimitiveKind$STRING;->()V +Lkotlinx/serialization/descriptors/SerialDescriptor; +Lkotlinx/serialization/descriptors/SerialDescriptor$DefaultImpls; +HSPLkotlinx/serialization/descriptors/SerialDescriptor$DefaultImpls;->isInline(Lkotlinx/serialization/descriptors/SerialDescriptor;)Z +Lkotlinx/serialization/descriptors/SerialDescriptorImpl; +HSPLkotlinx/serialization/descriptors/SerialDescriptorImpl;->(Ljava/lang/String;Lkotlinx/serialization/descriptors/SerialKind;ILjava/util/List;Lkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;)V +HSPLkotlinx/serialization/descriptors/SerialDescriptorImpl;->getSerialName()Ljava/lang/String; +Lkotlinx/serialization/descriptors/SerialDescriptorImpl$_hashCode$2; +HSPLkotlinx/serialization/descriptors/SerialDescriptorImpl$_hashCode$2;->(Lkotlinx/serialization/descriptors/SerialDescriptorImpl;)V +Lkotlinx/serialization/descriptors/SerialDescriptorsKt; +HSPLkotlinx/serialization/descriptors/SerialDescriptorsKt;->PrimitiveSerialDescriptor(Ljava/lang/String;Lkotlinx/serialization/descriptors/PrimitiveKind;)Lkotlinx/serialization/descriptors/SerialDescriptor; +HSPLkotlinx/serialization/descriptors/SerialDescriptorsKt;->buildSerialDescriptor$default(Ljava/lang/String;Lkotlinx/serialization/descriptors/SerialKind;[Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lkotlinx/serialization/descriptors/SerialDescriptor; +HSPLkotlinx/serialization/descriptors/SerialDescriptorsKt;->buildSerialDescriptor(Ljava/lang/String;Lkotlinx/serialization/descriptors/SerialKind;[Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlin/jvm/functions/Function1;)Lkotlinx/serialization/descriptors/SerialDescriptor; +Lkotlinx/serialization/descriptors/SerialDescriptorsKt$buildSerialDescriptor$1; +HSPLkotlinx/serialization/descriptors/SerialDescriptorsKt$buildSerialDescriptor$1;->()V +HSPLkotlinx/serialization/descriptors/SerialDescriptorsKt$buildSerialDescriptor$1;->()V +HSPLkotlinx/serialization/descriptors/SerialDescriptorsKt$buildSerialDescriptor$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/serialization/descriptors/SerialDescriptorsKt$buildSerialDescriptor$1;->invoke(Lkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;)V +Lkotlinx/serialization/descriptors/SerialKind; +HSPLkotlinx/serialization/descriptors/SerialKind;->()V +HSPLkotlinx/serialization/descriptors/SerialKind;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlinx/serialization/descriptors/SerialKind$CONTEXTUAL; +HSPLkotlinx/serialization/descriptors/SerialKind$CONTEXTUAL;->()V +HSPLkotlinx/serialization/descriptors/SerialKind$CONTEXTUAL;->()V +Lkotlinx/serialization/descriptors/SerialKind$ENUM; +HSPLkotlinx/serialization/descriptors/SerialKind$ENUM;->()V +HSPLkotlinx/serialization/descriptors/SerialKind$ENUM;->()V +Lkotlinx/serialization/descriptors/StructureKind; +HSPLkotlinx/serialization/descriptors/StructureKind;->()V +HSPLkotlinx/serialization/descriptors/StructureKind;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlinx/serialization/descriptors/StructureKind$CLASS; +HSPLkotlinx/serialization/descriptors/StructureKind$CLASS;->()V +HSPLkotlinx/serialization/descriptors/StructureKind$CLASS;->()V +Lkotlinx/serialization/descriptors/StructureKind$LIST; +HSPLkotlinx/serialization/descriptors/StructureKind$LIST;->()V +HSPLkotlinx/serialization/descriptors/StructureKind$LIST;->()V +Lkotlinx/serialization/descriptors/StructureKind$MAP; +HSPLkotlinx/serialization/descriptors/StructureKind$MAP;->()V +HSPLkotlinx/serialization/descriptors/StructureKind$MAP;->()V +Lkotlinx/serialization/descriptors/StructureKind$OBJECT; +HSPLkotlinx/serialization/descriptors/StructureKind$OBJECT;->()V +HSPLkotlinx/serialization/descriptors/StructureKind$OBJECT;->()V +Lkotlinx/serialization/encoding/AbstractDecoder; +HSPLkotlinx/serialization/encoding/AbstractDecoder;->()V +HSPLkotlinx/serialization/encoding/AbstractDecoder;->decodeSequentially()Z +HSPLkotlinx/serialization/encoding/AbstractDecoder;->decodeSerializableElement(Lkotlinx/serialization/descriptors/SerialDescriptor;ILkotlinx/serialization/DeserializationStrategy;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/serialization/encoding/AbstractDecoder;->decodeSerializableValue(Lkotlinx/serialization/DeserializationStrategy;Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/serialization/encoding/AbstractEncoder; +HSPLkotlinx/serialization/encoding/AbstractEncoder;->()V +HSPLkotlinx/serialization/encoding/AbstractEncoder;->beginCollection(Lkotlinx/serialization/descriptors/SerialDescriptor;I)Lkotlinx/serialization/encoding/CompositeEncoder; +HSPLkotlinx/serialization/encoding/AbstractEncoder;->encodeSerializableElement(Lkotlinx/serialization/descriptors/SerialDescriptor;ILkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)V +Lkotlinx/serialization/encoding/ChunkedDecoder; +Lkotlinx/serialization/encoding/CompositeDecoder; +Lkotlinx/serialization/encoding/CompositeDecoder$DefaultImpls; +HSPLkotlinx/serialization/encoding/CompositeDecoder$DefaultImpls;->decodeSequentially(Lkotlinx/serialization/encoding/CompositeDecoder;)Z +HSPLkotlinx/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; +Lkotlinx/serialization/encoding/CompositeEncoder; +Lkotlinx/serialization/encoding/Decoder; +Lkotlinx/serialization/encoding/Encoder; +Lkotlinx/serialization/encoding/Encoder$DefaultImpls; +PLkotlinx/serialization/encoding/Encoder$DefaultImpls;->beginCollection(Lkotlinx/serialization/encoding/Encoder;Lkotlinx/serialization/descriptors/SerialDescriptor;I)Lkotlinx/serialization/encoding/CompositeEncoder; +Lkotlinx/serialization/internal/AbstractCollectionSerializer; +HSPLkotlinx/serialization/internal/AbstractCollectionSerializer;->()V +HSPLkotlinx/serialization/internal/AbstractCollectionSerializer;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlinx/serialization/internal/AbstractCollectionSerializer;->deserialize(Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; +HSPLkotlinx/serialization/internal/AbstractCollectionSerializer;->merge(Lkotlinx/serialization/encoding/Decoder;Ljava/lang/Object;)Ljava/lang/Object; +Lkotlinx/serialization/internal/AbstractPolymorphicSerializer; +HSPLkotlinx/serialization/internal/AbstractPolymorphicSerializer;->()V +Lkotlinx/serialization/internal/ArrayListClassDesc; +HSPLkotlinx/serialization/internal/ArrayListClassDesc;->(Lkotlinx/serialization/descriptors/SerialDescriptor;)V +Lkotlinx/serialization/internal/ArrayListSerializer; +HSPLkotlinx/serialization/internal/ArrayListSerializer;->(Lkotlinx/serialization/KSerializer;)V +HSPLkotlinx/serialization/internal/ArrayListSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +Lkotlinx/serialization/internal/BooleanArraySerializer; +HSPLkotlinx/serialization/internal/BooleanArraySerializer;->()V +HSPLkotlinx/serialization/internal/BooleanArraySerializer;->()V +Lkotlinx/serialization/internal/BooleanSerializer; +HSPLkotlinx/serialization/internal/BooleanSerializer;->()V +HSPLkotlinx/serialization/internal/BooleanSerializer;->()V +HSPLkotlinx/serialization/internal/BooleanSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +Lkotlinx/serialization/internal/ByteArraySerializer; +HSPLkotlinx/serialization/internal/ByteArraySerializer;->()V +HSPLkotlinx/serialization/internal/ByteArraySerializer;->()V +Lkotlinx/serialization/internal/ByteSerializer; +HSPLkotlinx/serialization/internal/ByteSerializer;->()V +HSPLkotlinx/serialization/internal/ByteSerializer;->()V +HSPLkotlinx/serialization/internal/ByteSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +Lkotlinx/serialization/internal/CachedNames; +Lkotlinx/serialization/internal/CharArraySerializer; +HSPLkotlinx/serialization/internal/CharArraySerializer;->()V +HSPLkotlinx/serialization/internal/CharArraySerializer;->()V +Lkotlinx/serialization/internal/CharSerializer; +HSPLkotlinx/serialization/internal/CharSerializer;->()V +HSPLkotlinx/serialization/internal/CharSerializer;->()V +HSPLkotlinx/serialization/internal/CharSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +Lkotlinx/serialization/internal/CollectionLikeSerializer; +HSPLkotlinx/serialization/internal/CollectionLikeSerializer;->(Lkotlinx/serialization/KSerializer;)V +HSPLkotlinx/serialization/internal/CollectionLikeSerializer;->(Lkotlinx/serialization/KSerializer;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlinx/serialization/internal/CollectionLikeSerializer;->serialize(Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V +Lkotlinx/serialization/internal/CollectionSerializer; +HSPLkotlinx/serialization/internal/CollectionSerializer;->(Lkotlinx/serialization/KSerializer;)V +HSPLkotlinx/serialization/internal/CollectionSerializer;->collectionIterator(Ljava/lang/Object;)Ljava/util/Iterator; +HSPLkotlinx/serialization/internal/CollectionSerializer;->collectionIterator(Ljava/util/Collection;)Ljava/util/Iterator; +HSPLkotlinx/serialization/internal/CollectionSerializer;->collectionSize(Ljava/lang/Object;)I +HSPLkotlinx/serialization/internal/CollectionSerializer;->collectionSize(Ljava/util/Collection;)I +Lkotlinx/serialization/internal/DoubleArraySerializer; +HSPLkotlinx/serialization/internal/DoubleArraySerializer;->()V +HSPLkotlinx/serialization/internal/DoubleArraySerializer;->()V +Lkotlinx/serialization/internal/DoubleSerializer; +HSPLkotlinx/serialization/internal/DoubleSerializer;->()V +HSPLkotlinx/serialization/internal/DoubleSerializer;->()V +HSPLkotlinx/serialization/internal/DoubleSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +Lkotlinx/serialization/internal/DurationSerializer; +HSPLkotlinx/serialization/internal/DurationSerializer;->()V +HSPLkotlinx/serialization/internal/DurationSerializer;->()V +Lkotlinx/serialization/internal/EnumDescriptor; +HSPLkotlinx/serialization/internal/EnumDescriptor;->(Ljava/lang/String;I)V +Lkotlinx/serialization/internal/EnumDescriptor$elementDescriptors$2; +HSPLkotlinx/serialization/internal/EnumDescriptor$elementDescriptors$2;->(ILjava/lang/String;Lkotlinx/serialization/internal/EnumDescriptor;)V +Lkotlinx/serialization/internal/EnumSerializer; +HSPLkotlinx/serialization/internal/EnumSerializer;->(Ljava/lang/String;[Ljava/lang/Enum;)V +HSPLkotlinx/serialization/internal/EnumSerializer;->(Ljava/lang/String;[Ljava/lang/Enum;Lkotlinx/serialization/descriptors/SerialDescriptor;)V +Lkotlinx/serialization/internal/EnumSerializer$descriptor$2; +HSPLkotlinx/serialization/internal/EnumSerializer$descriptor$2;->(Lkotlinx/serialization/internal/EnumSerializer;Ljava/lang/String;)V +Lkotlinx/serialization/internal/EnumsKt; +HSPLkotlinx/serialization/internal/EnumsKt;->createAnnotatedEnumSerializer(Ljava/lang/String;[Ljava/lang/Enum;[Ljava/lang/String;[[Ljava/lang/annotation/Annotation;[Ljava/lang/annotation/Annotation;)Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/internal/EnumsKt;->createSimpleEnumSerializer(Ljava/lang/String;[Ljava/lang/Enum;)Lkotlinx/serialization/KSerializer; +Lkotlinx/serialization/internal/FloatArraySerializer; +HSPLkotlinx/serialization/internal/FloatArraySerializer;->()V +HSPLkotlinx/serialization/internal/FloatArraySerializer;->()V +Lkotlinx/serialization/internal/FloatSerializer; +HSPLkotlinx/serialization/internal/FloatSerializer;->()V +HSPLkotlinx/serialization/internal/FloatSerializer;->()V +HSPLkotlinx/serialization/internal/FloatSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +Lkotlinx/serialization/internal/GeneratedSerializer; +Lkotlinx/serialization/internal/InlineClassDescriptor; +HSPLkotlinx/serialization/internal/InlineClassDescriptor;->(Ljava/lang/String;Lkotlinx/serialization/internal/GeneratedSerializer;)V +Lkotlinx/serialization/internal/InlineClassDescriptorKt; +HSPLkotlinx/serialization/internal/InlineClassDescriptorKt;->InlinePrimitiveDescriptor(Ljava/lang/String;Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/descriptors/SerialDescriptor; +Lkotlinx/serialization/internal/InlineClassDescriptorKt$InlinePrimitiveDescriptor$1; +HSPLkotlinx/serialization/internal/InlineClassDescriptorKt$InlinePrimitiveDescriptor$1;->(Lkotlinx/serialization/KSerializer;)V +Lkotlinx/serialization/internal/IntArraySerializer; +HSPLkotlinx/serialization/internal/IntArraySerializer;->()V +HSPLkotlinx/serialization/internal/IntArraySerializer;->()V +Lkotlinx/serialization/internal/IntSerializer; +HSPLkotlinx/serialization/internal/IntSerializer;->()V +HSPLkotlinx/serialization/internal/IntSerializer;->()V +HSPLkotlinx/serialization/internal/IntSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +Lkotlinx/serialization/internal/LinkedHashMapClassDesc; +HSPLkotlinx/serialization/internal/LinkedHashMapClassDesc;->(Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlinx/serialization/descriptors/SerialDescriptor;)V +Lkotlinx/serialization/internal/LinkedHashMapSerializer; +HSPLkotlinx/serialization/internal/LinkedHashMapSerializer;->(Lkotlinx/serialization/KSerializer;Lkotlinx/serialization/KSerializer;)V +HSPLkotlinx/serialization/internal/LinkedHashMapSerializer;->builder()Ljava/lang/Object; +HSPLkotlinx/serialization/internal/LinkedHashMapSerializer;->builder()Ljava/util/LinkedHashMap; +HSPLkotlinx/serialization/internal/LinkedHashMapSerializer;->builderSize(Ljava/lang/Object;)I +HSPLkotlinx/serialization/internal/LinkedHashMapSerializer;->builderSize(Ljava/util/LinkedHashMap;)I +HSPLkotlinx/serialization/internal/LinkedHashMapSerializer;->collectionIterator(Ljava/lang/Object;)Ljava/util/Iterator; +HSPLkotlinx/serialization/internal/LinkedHashMapSerializer;->collectionIterator(Ljava/util/Map;)Ljava/util/Iterator; +HSPLkotlinx/serialization/internal/LinkedHashMapSerializer;->collectionSize(Ljava/lang/Object;)I +HSPLkotlinx/serialization/internal/LinkedHashMapSerializer;->collectionSize(Ljava/util/Map;)I +HSPLkotlinx/serialization/internal/LinkedHashMapSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +HSPLkotlinx/serialization/internal/LinkedHashMapSerializer;->toResult(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/serialization/internal/LinkedHashMapSerializer;->toResult(Ljava/util/LinkedHashMap;)Ljava/util/Map; +Lkotlinx/serialization/internal/LinkedHashSetClassDesc; +HSPLkotlinx/serialization/internal/LinkedHashSetClassDesc;->(Lkotlinx/serialization/descriptors/SerialDescriptor;)V +Lkotlinx/serialization/internal/LinkedHashSetSerializer; +HSPLkotlinx/serialization/internal/LinkedHashSetSerializer;->(Lkotlinx/serialization/KSerializer;)V +HSPLkotlinx/serialization/internal/LinkedHashSetSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +Lkotlinx/serialization/internal/ListLikeDescriptor; +HSPLkotlinx/serialization/internal/ListLikeDescriptor;->(Lkotlinx/serialization/descriptors/SerialDescriptor;)V +HSPLkotlinx/serialization/internal/ListLikeDescriptor;->(Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlinx/serialization/internal/ListLikeDescriptor;->getKind()Lkotlinx/serialization/descriptors/SerialKind; +Lkotlinx/serialization/internal/LongArraySerializer; +HSPLkotlinx/serialization/internal/LongArraySerializer;->()V +HSPLkotlinx/serialization/internal/LongArraySerializer;->()V +Lkotlinx/serialization/internal/LongSerializer; +HSPLkotlinx/serialization/internal/LongSerializer;->()V +HSPLkotlinx/serialization/internal/LongSerializer;->()V +HSPLkotlinx/serialization/internal/LongSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +Lkotlinx/serialization/internal/MapLikeDescriptor; +HSPLkotlinx/serialization/internal/MapLikeDescriptor;->(Ljava/lang/String;Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlinx/serialization/descriptors/SerialDescriptor;)V +HSPLkotlinx/serialization/internal/MapLikeDescriptor;->(Ljava/lang/String;Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlinx/serialization/internal/MapLikeDescriptor;->getElementDescriptor(I)Lkotlinx/serialization/descriptors/SerialDescriptor; +HSPLkotlinx/serialization/internal/MapLikeDescriptor;->getElementsCount()I +HSPLkotlinx/serialization/internal/MapLikeDescriptor;->getKind()Lkotlinx/serialization/descriptors/SerialKind; +Lkotlinx/serialization/internal/MapLikeSerializer; +HSPLkotlinx/serialization/internal/MapLikeSerializer;->(Lkotlinx/serialization/KSerializer;Lkotlinx/serialization/KSerializer;)V +HSPLkotlinx/serialization/internal/MapLikeSerializer;->(Lkotlinx/serialization/KSerializer;Lkotlinx/serialization/KSerializer;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlinx/serialization/internal/MapLikeSerializer;->getKeySerializer()Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/internal/MapLikeSerializer;->getValueSerializer()Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/internal/MapLikeSerializer;->readElement(Lkotlinx/serialization/encoding/CompositeDecoder;ILjava/lang/Object;Z)V +HSPLkotlinx/serialization/internal/MapLikeSerializer;->readElement(Lkotlinx/serialization/encoding/CompositeDecoder;ILjava/util/Map;Z)V +HSPLkotlinx/serialization/internal/MapLikeSerializer;->serialize(Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V +Lkotlinx/serialization/internal/NothingSerialDescriptor; +HSPLkotlinx/serialization/internal/NothingSerialDescriptor;->()V +HSPLkotlinx/serialization/internal/NothingSerialDescriptor;->()V +Lkotlinx/serialization/internal/NothingSerializer; +HSPLkotlinx/serialization/internal/NothingSerializer;->()V +HSPLkotlinx/serialization/internal/NothingSerializer;->()V +Lkotlinx/serialization/internal/ObjectSerializer; +HSPLkotlinx/serialization/internal/ObjectSerializer;->(Ljava/lang/String;Ljava/lang/Object;)V +HSPLkotlinx/serialization/internal/ObjectSerializer;->(Ljava/lang/String;Ljava/lang/Object;[Ljava/lang/annotation/Annotation;)V +HSPLkotlinx/serialization/internal/ObjectSerializer;->access$get_annotations$p(Lkotlinx/serialization/internal/ObjectSerializer;)Ljava/util/List; +HSPLkotlinx/serialization/internal/ObjectSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +Lkotlinx/serialization/internal/ObjectSerializer$descriptor$2; +HSPLkotlinx/serialization/internal/ObjectSerializer$descriptor$2;->(Ljava/lang/String;Lkotlinx/serialization/internal/ObjectSerializer;)V +HSPLkotlinx/serialization/internal/ObjectSerializer$descriptor$2;->invoke()Ljava/lang/Object; +HSPLkotlinx/serialization/internal/ObjectSerializer$descriptor$2;->invoke()Lkotlinx/serialization/descriptors/SerialDescriptor; +Lkotlinx/serialization/internal/ObjectSerializer$descriptor$2$1; +HSPLkotlinx/serialization/internal/ObjectSerializer$descriptor$2$1;->(Lkotlinx/serialization/internal/ObjectSerializer;)V +HSPLkotlinx/serialization/internal/ObjectSerializer$descriptor$2$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/serialization/internal/ObjectSerializer$descriptor$2$1;->invoke(Lkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;)V +Lkotlinx/serialization/internal/PlatformKt; +HSPLkotlinx/serialization/internal/PlatformKt;->companionOrNull(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Object; +HSPLkotlinx/serialization/internal/PlatformKt;->compiledSerializerImpl(Lkotlin/reflect/KClass;)Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/internal/PlatformKt;->constructSerializerForGivenTypeArgs(Ljava/lang/Class;[Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/internal/PlatformKt;->constructSerializerForGivenTypeArgs(Lkotlin/reflect/KClass;[Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/internal/PlatformKt;->invokeSerializerOnCompanion(Ljava/lang/Object;[Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer; +HSPLkotlinx/serialization/internal/PlatformKt;->invokeSerializerOnDefaultCompanion(Ljava/lang/Class;[Lkotlinx/serialization/KSerializer;)Lkotlinx/serialization/KSerializer; +Lkotlinx/serialization/internal/Platform_commonKt; +HSPLkotlinx/serialization/internal/Platform_commonKt;->()V +HSPLkotlinx/serialization/internal/Platform_commonKt;->compactArray(Ljava/util/List;)[Lkotlinx/serialization/descriptors/SerialDescriptor; +Lkotlinx/serialization/internal/PluginGeneratedSerialDescriptor; +HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->(Ljava/lang/String;Lkotlinx/serialization/internal/GeneratedSerializer;I)V +HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->(Ljava/lang/String;Lkotlinx/serialization/internal/GeneratedSerializer;IILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->addElement$default(Lkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;Ljava/lang/String;ZILjava/lang/Object;)V +HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->addElement(Ljava/lang/String;Z)V +HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->buildIndices()Ljava/util/Map; +HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->getElementName(I)Ljava/lang/String; +HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->getElementsCount()I +HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->getKind()Lkotlinx/serialization/descriptors/SerialKind; +HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->getSerialName()Ljava/lang/String; +HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;->pushAnnotation(Ljava/lang/annotation/Annotation;)V +Lkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$_hashCode$2; +HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$_hashCode$2;->(Lkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;)V +Lkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$childSerializers$2; +HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$childSerializers$2;->(Lkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;)V +Lkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$typeParameterDescriptors$2; +HSPLkotlinx/serialization/internal/PluginGeneratedSerialDescriptor$typeParameterDescriptors$2;->(Lkotlinx/serialization/internal/PluginGeneratedSerialDescriptor;)V +Lkotlinx/serialization/internal/PrimitiveArrayDescriptor; +HSPLkotlinx/serialization/internal/PrimitiveArrayDescriptor;->(Lkotlinx/serialization/descriptors/SerialDescriptor;)V +Lkotlinx/serialization/internal/PrimitiveArraySerializer; +HSPLkotlinx/serialization/internal/PrimitiveArraySerializer;->(Lkotlinx/serialization/KSerializer;)V +Lkotlinx/serialization/internal/PrimitiveSerialDescriptor; +HSPLkotlinx/serialization/internal/PrimitiveSerialDescriptor;->(Ljava/lang/String;Lkotlinx/serialization/descriptors/PrimitiveKind;)V +HSPLkotlinx/serialization/internal/PrimitiveSerialDescriptor;->getKind()Lkotlinx/serialization/descriptors/PrimitiveKind; +HSPLkotlinx/serialization/internal/PrimitiveSerialDescriptor;->getKind()Lkotlinx/serialization/descriptors/SerialKind; +HSPLkotlinx/serialization/internal/PrimitiveSerialDescriptor;->getSerialName()Ljava/lang/String; +HSPLkotlinx/serialization/internal/PrimitiveSerialDescriptor;->isInline()Z +Lkotlinx/serialization/internal/PrimitivesKt; +HSPLkotlinx/serialization/internal/PrimitivesKt;->()V +PLkotlinx/serialization/internal/PrimitivesKt;->PrimitiveDescriptorSafe(Ljava/lang/String;Lkotlinx/serialization/descriptors/PrimitiveKind;)Lkotlinx/serialization/descriptors/SerialDescriptor; +HSPLkotlinx/serialization/internal/PrimitivesKt;->capitalize(Ljava/lang/String;)Ljava/lang/String; +HSPLkotlinx/serialization/internal/PrimitivesKt;->checkName(Ljava/lang/String;)V +Lkotlinx/serialization/internal/ShortArraySerializer; +HSPLkotlinx/serialization/internal/ShortArraySerializer;->()V +HSPLkotlinx/serialization/internal/ShortArraySerializer;->()V +Lkotlinx/serialization/internal/ShortSerializer; +HSPLkotlinx/serialization/internal/ShortSerializer;->()V +HSPLkotlinx/serialization/internal/ShortSerializer;->()V +HSPLkotlinx/serialization/internal/ShortSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +Lkotlinx/serialization/internal/StringSerializer; +HSPLkotlinx/serialization/internal/StringSerializer;->()V +HSPLkotlinx/serialization/internal/StringSerializer;->()V +HSPLkotlinx/serialization/internal/StringSerializer;->deserialize(Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; +HSPLkotlinx/serialization/internal/StringSerializer;->deserialize(Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/String; +HSPLkotlinx/serialization/internal/StringSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +HSPLkotlinx/serialization/internal/StringSerializer;->serialize(Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V +HSPLkotlinx/serialization/internal/StringSerializer;->serialize(Lkotlinx/serialization/encoding/Encoder;Ljava/lang/String;)V +Lkotlinx/serialization/internal/UByteArraySerializer; +HSPLkotlinx/serialization/internal/UByteArraySerializer;->()V +HSPLkotlinx/serialization/internal/UByteArraySerializer;->()V +Lkotlinx/serialization/internal/UByteSerializer; +HSPLkotlinx/serialization/internal/UByteSerializer;->()V +HSPLkotlinx/serialization/internal/UByteSerializer;->()V +HSPLkotlinx/serialization/internal/UByteSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +Lkotlinx/serialization/internal/UIntArraySerializer; +HSPLkotlinx/serialization/internal/UIntArraySerializer;->()V +HSPLkotlinx/serialization/internal/UIntArraySerializer;->()V +Lkotlinx/serialization/internal/UIntSerializer; +HSPLkotlinx/serialization/internal/UIntSerializer;->()V +HSPLkotlinx/serialization/internal/UIntSerializer;->()V +HSPLkotlinx/serialization/internal/UIntSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +Lkotlinx/serialization/internal/ULongArraySerializer; +HSPLkotlinx/serialization/internal/ULongArraySerializer;->()V +HSPLkotlinx/serialization/internal/ULongArraySerializer;->()V +Lkotlinx/serialization/internal/ULongSerializer; +HSPLkotlinx/serialization/internal/ULongSerializer;->()V +HSPLkotlinx/serialization/internal/ULongSerializer;->()V +HSPLkotlinx/serialization/internal/ULongSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +Lkotlinx/serialization/internal/UShortArraySerializer; +HSPLkotlinx/serialization/internal/UShortArraySerializer;->()V +HSPLkotlinx/serialization/internal/UShortArraySerializer;->()V +Lkotlinx/serialization/internal/UShortSerializer; +HSPLkotlinx/serialization/internal/UShortSerializer;->()V +HSPLkotlinx/serialization/internal/UShortSerializer;->()V +HSPLkotlinx/serialization/internal/UShortSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +Lkotlinx/serialization/internal/UnitSerializer; +HSPLkotlinx/serialization/internal/UnitSerializer;->()V +HSPLkotlinx/serialization/internal/UnitSerializer;->()V +Lkotlinx/serialization/json/Json; +HSPLkotlinx/serialization/json/Json;->()V +HSPLkotlinx/serialization/json/Json;->(Lkotlinx/serialization/json/JsonConfiguration;Lkotlinx/serialization/modules/SerializersModule;)V +HSPLkotlinx/serialization/json/Json;->(Lkotlinx/serialization/json/JsonConfiguration;Lkotlinx/serialization/modules/SerializersModule;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlinx/serialization/json/Json;->decodeFromString(Lkotlinx/serialization/DeserializationStrategy;Ljava/lang/String;)Ljava/lang/Object; +HSPLkotlinx/serialization/json/Json;->encodeToString(Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)Ljava/lang/String; +HSPLkotlinx/serialization/json/Json;->getConfiguration()Lkotlinx/serialization/json/JsonConfiguration; +HSPLkotlinx/serialization/json/Json;->getSerializersModule()Lkotlinx/serialization/modules/SerializersModule; +Lkotlinx/serialization/json/Json$Default; +HSPLkotlinx/serialization/json/Json$Default;->()V +HSPLkotlinx/serialization/json/Json$Default;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlinx/serialization/json/JsonArray; +HSPLkotlinx/serialization/json/JsonArray;->()V +HSPLkotlinx/serialization/json/JsonArray;->(Ljava/util/List;)V +HSPLkotlinx/serialization/json/JsonArray;->getSize()I +HSPLkotlinx/serialization/json/JsonArray;->iterator()Ljava/util/Iterator; +HSPLkotlinx/serialization/json/JsonArray;->size()I +Lkotlinx/serialization/json/JsonArray$Companion; +HSPLkotlinx/serialization/json/JsonArray$Companion;->()V +HSPLkotlinx/serialization/json/JsonArray$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlinx/serialization/json/JsonArraySerializer; +HSPLkotlinx/serialization/json/JsonArraySerializer;->()V +HSPLkotlinx/serialization/json/JsonArraySerializer;->()V +HSPLkotlinx/serialization/json/JsonArraySerializer;->serialize(Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V +HSPLkotlinx/serialization/json/JsonArraySerializer;->serialize(Lkotlinx/serialization/encoding/Encoder;Lkotlinx/serialization/json/JsonArray;)V +Lkotlinx/serialization/json/JsonArraySerializer$JsonArrayDescriptor; +HSPLkotlinx/serialization/json/JsonArraySerializer$JsonArrayDescriptor;->()V +HSPLkotlinx/serialization/json/JsonArraySerializer$JsonArrayDescriptor;->()V +Lkotlinx/serialization/json/JsonBuilder; +HSPLkotlinx/serialization/json/JsonBuilder;->(Lkotlinx/serialization/json/Json;)V +HSPLkotlinx/serialization/json/JsonBuilder;->build$kotlinx_serialization_json()Lkotlinx/serialization/json/JsonConfiguration; +HSPLkotlinx/serialization/json/JsonBuilder;->getSerializersModule()Lkotlinx/serialization/modules/SerializersModule; +HSPLkotlinx/serialization/json/JsonBuilder;->setCoerceInputValues(Z)V +HSPLkotlinx/serialization/json/JsonBuilder;->setIgnoreUnknownKeys(Z)V +HSPLkotlinx/serialization/json/JsonBuilder;->setLenient(Z)V +HSPLkotlinx/serialization/json/JsonBuilder;->setPrettyPrint(Z)V +HSPLkotlinx/serialization/json/JsonBuilder;->setSerializersModule(Lkotlinx/serialization/modules/SerializersModule;)V +Lkotlinx/serialization/json/JsonConfiguration; +HSPLkotlinx/serialization/json/JsonConfiguration;->(ZZZZZZLjava/lang/String;ZZLjava/lang/String;ZZLkotlinx/serialization/json/JsonNamingStrategy;ZZ)V +HSPLkotlinx/serialization/json/JsonConfiguration;->(ZZZZZZLjava/lang/String;ZZLjava/lang/String;ZZLkotlinx/serialization/json/JsonNamingStrategy;ZZILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlinx/serialization/json/JsonConfiguration;->getAllowSpecialFloatingPointValues()Z +HSPLkotlinx/serialization/json/JsonConfiguration;->getAllowStructuredMapKeys()Z +HSPLkotlinx/serialization/json/JsonConfiguration;->getAllowTrailingComma()Z +HSPLkotlinx/serialization/json/JsonConfiguration;->getClassDiscriminator()Ljava/lang/String; +HSPLkotlinx/serialization/json/JsonConfiguration;->getCoerceInputValues()Z +HSPLkotlinx/serialization/json/JsonConfiguration;->getDecodeEnumsCaseInsensitive()Z +HSPLkotlinx/serialization/json/JsonConfiguration;->getEncodeDefaults()Z +HSPLkotlinx/serialization/json/JsonConfiguration;->getExplicitNulls()Z +HSPLkotlinx/serialization/json/JsonConfiguration;->getIgnoreUnknownKeys()Z +HSPLkotlinx/serialization/json/JsonConfiguration;->getNamingStrategy()Lkotlinx/serialization/json/JsonNamingStrategy; +HSPLkotlinx/serialization/json/JsonConfiguration;->getPrettyPrint()Z +HSPLkotlinx/serialization/json/JsonConfiguration;->getPrettyPrintIndent()Ljava/lang/String; +HSPLkotlinx/serialization/json/JsonConfiguration;->getUseAlternativeNames()Z +HSPLkotlinx/serialization/json/JsonConfiguration;->getUseArrayPolymorphism()Z +HSPLkotlinx/serialization/json/JsonConfiguration;->isLenient()Z +Lkotlinx/serialization/json/JsonDecoder; +Lkotlinx/serialization/json/JsonElement; +HSPLkotlinx/serialization/json/JsonElement;->()V +HSPLkotlinx/serialization/json/JsonElement;->()V +HSPLkotlinx/serialization/json/JsonElement;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlinx/serialization/json/JsonElement$Companion; +HSPLkotlinx/serialization/json/JsonElement$Companion;->()V +HSPLkotlinx/serialization/json/JsonElement$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlinx/serialization/json/JsonElement$Companion;->serializer()Lkotlinx/serialization/KSerializer; +Lkotlinx/serialization/json/JsonElementKt; +HSPLkotlinx/serialization/json/JsonElementKt;->()V +PLkotlinx/serialization/json/JsonElementKt;->JsonPrimitive(Ljava/lang/Boolean;)Lkotlinx/serialization/json/JsonPrimitive; +HSPLkotlinx/serialization/json/JsonElementKt;->getBooleanOrNull(Lkotlinx/serialization/json/JsonPrimitive;)Ljava/lang/Boolean; +HSPLkotlinx/serialization/json/JsonElementKt;->getJsonArray(Lkotlinx/serialization/json/JsonElement;)Lkotlinx/serialization/json/JsonArray; +HSPLkotlinx/serialization/json/JsonElementKt;->getJsonPrimitive(Lkotlinx/serialization/json/JsonElement;)Lkotlinx/serialization/json/JsonPrimitive; +Lkotlinx/serialization/json/JsonElementSerializer; +HSPLkotlinx/serialization/json/JsonElementSerializer;->()V +HSPLkotlinx/serialization/json/JsonElementSerializer;->()V +HSPLkotlinx/serialization/json/JsonElementSerializer;->deserialize(Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; +HSPLkotlinx/serialization/json/JsonElementSerializer;->deserialize(Lkotlinx/serialization/encoding/Decoder;)Lkotlinx/serialization/json/JsonElement; +HSPLkotlinx/serialization/json/JsonElementSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +HSPLkotlinx/serialization/json/JsonElementSerializer;->serialize(Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V +HSPLkotlinx/serialization/json/JsonElementSerializer;->serialize(Lkotlinx/serialization/encoding/Encoder;Lkotlinx/serialization/json/JsonElement;)V +Lkotlinx/serialization/json/JsonElementSerializer$descriptor$1; +HSPLkotlinx/serialization/json/JsonElementSerializer$descriptor$1;->()V +HSPLkotlinx/serialization/json/JsonElementSerializer$descriptor$1;->()V +HSPLkotlinx/serialization/json/JsonElementSerializer$descriptor$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/serialization/json/JsonElementSerializer$descriptor$1;->invoke(Lkotlinx/serialization/descriptors/ClassSerialDescriptorBuilder;)V +Lkotlinx/serialization/json/JsonElementSerializer$descriptor$1$1; +HSPLkotlinx/serialization/json/JsonElementSerializer$descriptor$1$1;->()V +HSPLkotlinx/serialization/json/JsonElementSerializer$descriptor$1$1;->()V +Lkotlinx/serialization/json/JsonElementSerializer$descriptor$1$2; +HSPLkotlinx/serialization/json/JsonElementSerializer$descriptor$1$2;->()V +HSPLkotlinx/serialization/json/JsonElementSerializer$descriptor$1$2;->()V +Lkotlinx/serialization/json/JsonElementSerializer$descriptor$1$3; +HSPLkotlinx/serialization/json/JsonElementSerializer$descriptor$1$3;->()V +HSPLkotlinx/serialization/json/JsonElementSerializer$descriptor$1$3;->()V +Lkotlinx/serialization/json/JsonElementSerializer$descriptor$1$4; +HSPLkotlinx/serialization/json/JsonElementSerializer$descriptor$1$4;->()V +HSPLkotlinx/serialization/json/JsonElementSerializer$descriptor$1$4;->()V +Lkotlinx/serialization/json/JsonElementSerializer$descriptor$1$5; +HSPLkotlinx/serialization/json/JsonElementSerializer$descriptor$1$5;->()V +HSPLkotlinx/serialization/json/JsonElementSerializer$descriptor$1$5;->()V +Lkotlinx/serialization/json/JsonElementSerializersKt; +HSPLkotlinx/serialization/json/JsonElementSerializersKt;->access$defer(Lkotlin/jvm/functions/Function0;)Lkotlinx/serialization/descriptors/SerialDescriptor; +HSPLkotlinx/serialization/json/JsonElementSerializersKt;->access$verify(Lkotlinx/serialization/encoding/Decoder;)V +HSPLkotlinx/serialization/json/JsonElementSerializersKt;->access$verify(Lkotlinx/serialization/encoding/Encoder;)V +HSPLkotlinx/serialization/json/JsonElementSerializersKt;->asJsonDecoder(Lkotlinx/serialization/encoding/Decoder;)Lkotlinx/serialization/json/JsonDecoder; +HSPLkotlinx/serialization/json/JsonElementSerializersKt;->asJsonEncoder(Lkotlinx/serialization/encoding/Encoder;)Lkotlinx/serialization/json/JsonEncoder; +HSPLkotlinx/serialization/json/JsonElementSerializersKt;->defer(Lkotlin/jvm/functions/Function0;)Lkotlinx/serialization/descriptors/SerialDescriptor; +HSPLkotlinx/serialization/json/JsonElementSerializersKt;->verify(Lkotlinx/serialization/encoding/Decoder;)V +HSPLkotlinx/serialization/json/JsonElementSerializersKt;->verify(Lkotlinx/serialization/encoding/Encoder;)V +Lkotlinx/serialization/json/JsonElementSerializersKt$defer$1; +HSPLkotlinx/serialization/json/JsonElementSerializersKt$defer$1;->(Lkotlin/jvm/functions/Function0;)V +Lkotlinx/serialization/json/JsonEncoder; +Lkotlinx/serialization/json/JsonImpl; +HSPLkotlinx/serialization/json/JsonImpl;->(Lkotlinx/serialization/json/JsonConfiguration;Lkotlinx/serialization/modules/SerializersModule;)V +HSPLkotlinx/serialization/json/JsonImpl;->validateConfiguration()V +Lkotlinx/serialization/json/JsonKt; +HSPLkotlinx/serialization/json/JsonKt;->Json$default(Lkotlinx/serialization/json/Json;Lkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lkotlinx/serialization/json/Json; +HSPLkotlinx/serialization/json/JsonKt;->Json(Lkotlinx/serialization/json/Json;Lkotlin/jvm/functions/Function1;)Lkotlinx/serialization/json/Json; +Lkotlinx/serialization/json/JsonLiteral; +HSPLkotlinx/serialization/json/JsonLiteral;->(Ljava/lang/Object;ZLkotlinx/serialization/descriptors/SerialDescriptor;)V +HSPLkotlinx/serialization/json/JsonLiteral;->(Ljava/lang/Object;ZLkotlinx/serialization/descriptors/SerialDescriptor;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlinx/serialization/json/JsonLiteral;->getCoerceToInlineType$kotlinx_serialization_json()Lkotlinx/serialization/descriptors/SerialDescriptor; +HSPLkotlinx/serialization/json/JsonLiteral;->getContent()Ljava/lang/String; +HSPLkotlinx/serialization/json/JsonLiteral;->isString()Z +Lkotlinx/serialization/json/JsonLiteralSerializer; +HSPLkotlinx/serialization/json/JsonLiteralSerializer;->()V +HSPLkotlinx/serialization/json/JsonLiteralSerializer;->()V +HSPLkotlinx/serialization/json/JsonLiteralSerializer;->serialize(Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V +HSPLkotlinx/serialization/json/JsonLiteralSerializer;->serialize(Lkotlinx/serialization/encoding/Encoder;Lkotlinx/serialization/json/JsonLiteral;)V +Lkotlinx/serialization/json/JsonNames; +Lkotlinx/serialization/json/JsonNamingStrategy; +Lkotlinx/serialization/json/JsonNull; +HSPLkotlinx/serialization/json/JsonNull;->()V +HSPLkotlinx/serialization/json/JsonNull;->()V +Lkotlinx/serialization/json/JsonNull$1; +HSPLkotlinx/serialization/json/JsonNull$1;->()V +HSPLkotlinx/serialization/json/JsonNull$1;->()V +Lkotlinx/serialization/json/JsonNullSerializer; +HSPLkotlinx/serialization/json/JsonNullSerializer;->()V +HSPLkotlinx/serialization/json/JsonNullSerializer;->()V +HSPLkotlinx/serialization/json/JsonNullSerializer;->serialize(Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V +HSPLkotlinx/serialization/json/JsonNullSerializer;->serialize(Lkotlinx/serialization/encoding/Encoder;Lkotlinx/serialization/json/JsonNull;)V +Lkotlinx/serialization/json/JsonObject; +HSPLkotlinx/serialization/json/JsonObject;->()V +HSPLkotlinx/serialization/json/JsonObject;->(Ljava/util/Map;)V +HSPLkotlinx/serialization/json/JsonObject;->entrySet()Ljava/util/Set; +HSPLkotlinx/serialization/json/JsonObject;->getEntries()Ljava/util/Set; +HSPLkotlinx/serialization/json/JsonObject;->getSize()I +HSPLkotlinx/serialization/json/JsonObject;->size()I +Lkotlinx/serialization/json/JsonObject$Companion; +HSPLkotlinx/serialization/json/JsonObject$Companion;->()V +HSPLkotlinx/serialization/json/JsonObject$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLkotlinx/serialization/json/JsonObject$Companion;->serializer()Lkotlinx/serialization/KSerializer; +Lkotlinx/serialization/json/JsonObjectSerializer; +HSPLkotlinx/serialization/json/JsonObjectSerializer;->()V +HSPLkotlinx/serialization/json/JsonObjectSerializer;->()V +HSPLkotlinx/serialization/json/JsonObjectSerializer;->deserialize(Lkotlinx/serialization/encoding/Decoder;)Ljava/lang/Object; +HSPLkotlinx/serialization/json/JsonObjectSerializer;->deserialize(Lkotlinx/serialization/encoding/Decoder;)Lkotlinx/serialization/json/JsonObject; +HSPLkotlinx/serialization/json/JsonObjectSerializer;->getDescriptor()Lkotlinx/serialization/descriptors/SerialDescriptor; +HSPLkotlinx/serialization/json/JsonObjectSerializer;->serialize(Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V +HSPLkotlinx/serialization/json/JsonObjectSerializer;->serialize(Lkotlinx/serialization/encoding/Encoder;Lkotlinx/serialization/json/JsonObject;)V +Lkotlinx/serialization/json/JsonObjectSerializer$JsonObjectDescriptor; +HSPLkotlinx/serialization/json/JsonObjectSerializer$JsonObjectDescriptor;->()V +HSPLkotlinx/serialization/json/JsonObjectSerializer$JsonObjectDescriptor;->()V +Lkotlinx/serialization/json/JsonPrimitive; +HSPLkotlinx/serialization/json/JsonPrimitive;->()V +HSPLkotlinx/serialization/json/JsonPrimitive;->()V +HSPLkotlinx/serialization/json/JsonPrimitive;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlinx/serialization/json/JsonPrimitive$Companion; +HSPLkotlinx/serialization/json/JsonPrimitive$Companion;->()V +HSPLkotlinx/serialization/json/JsonPrimitive$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlinx/serialization/json/JsonPrimitiveSerializer; +HSPLkotlinx/serialization/json/JsonPrimitiveSerializer;->()V +HSPLkotlinx/serialization/json/JsonPrimitiveSerializer;->()V +HSPLkotlinx/serialization/json/JsonPrimitiveSerializer;->serialize(Lkotlinx/serialization/encoding/Encoder;Ljava/lang/Object;)V +HSPLkotlinx/serialization/json/JsonPrimitiveSerializer;->serialize(Lkotlinx/serialization/encoding/Encoder;Lkotlinx/serialization/json/JsonPrimitive;)V +Lkotlinx/serialization/json/internal/AbstractJsonLexer; +HSPLkotlinx/serialization/json/internal/AbstractJsonLexer;->()V +HSPLkotlinx/serialization/json/internal/AbstractJsonLexer;->consumeNextToken(B)B +HSPLkotlinx/serialization/json/internal/AbstractJsonLexer;->consumeString()Ljava/lang/String; +HSPLkotlinx/serialization/json/internal/AbstractJsonLexer;->consumeStringLenient()Ljava/lang/String; +HSPLkotlinx/serialization/json/internal/AbstractJsonLexer;->consumeStringLenientNotNull()Ljava/lang/String; +HSPLkotlinx/serialization/json/internal/AbstractJsonLexer;->expectEof()V +HSPLkotlinx/serialization/json/internal/AbstractJsonLexer;->fail$default(Lkotlinx/serialization/json/internal/AbstractJsonLexer;Ljava/lang/String;ILjava/lang/String;ILjava/lang/Object;)Ljava/lang/Void; +HSPLkotlinx/serialization/json/internal/AbstractJsonLexer;->fail$kotlinx_serialization_json$default(Lkotlinx/serialization/json/internal/AbstractJsonLexer;BZILjava/lang/Object;)Ljava/lang/Void; +HSPLkotlinx/serialization/json/internal/AbstractJsonLexer;->fail$kotlinx_serialization_json(BZ)Ljava/lang/Void; +HSPLkotlinx/serialization/json/internal/AbstractJsonLexer;->fail(Ljava/lang/String;ILjava/lang/String;)Ljava/lang/Void; +HSPLkotlinx/serialization/json/internal/AbstractJsonLexer;->isValidValueStart(C)Z +HSPLkotlinx/serialization/json/internal/AbstractJsonLexer;->peekNextToken()B +HSPLkotlinx/serialization/json/internal/AbstractJsonLexer;->substring(II)Ljava/lang/String; +HSPLkotlinx/serialization/json/internal/AbstractJsonLexer;->unexpectedToken(C)V +Lkotlinx/serialization/json/internal/AbstractJsonLexerKt; +HSPLkotlinx/serialization/json/internal/AbstractJsonLexerKt;->charToTokenClass(C)B +HSPLkotlinx/serialization/json/internal/AbstractJsonLexerKt;->tokenDescription(B)Ljava/lang/String; +Lkotlinx/serialization/json/internal/ArrayPoolsKt; +HSPLkotlinx/serialization/json/internal/ArrayPoolsKt;->()V +HSPLkotlinx/serialization/json/internal/ArrayPoolsKt;->access$getMAX_CHARS_IN_POOL$p()I +Lkotlinx/serialization/json/internal/CharArrayPool; +HSPLkotlinx/serialization/json/internal/CharArrayPool;->()V +HSPLkotlinx/serialization/json/internal/CharArrayPool;->()V +HSPLkotlinx/serialization/json/internal/CharArrayPool;->release([C)V +HSPLkotlinx/serialization/json/internal/CharArrayPool;->take()[C +Lkotlinx/serialization/json/internal/CharArrayPoolBase; +HSPLkotlinx/serialization/json/internal/CharArrayPoolBase;->()V +HSPLkotlinx/serialization/json/internal/CharArrayPoolBase;->releaseImpl([C)V +HSPLkotlinx/serialization/json/internal/CharArrayPoolBase;->take(I)[C +Lkotlinx/serialization/json/internal/CharMappings; +HSPLkotlinx/serialization/json/internal/CharMappings;->()V +HSPLkotlinx/serialization/json/internal/CharMappings;->()V +HSPLkotlinx/serialization/json/internal/CharMappings;->initC2ESC(CC)V +HSPLkotlinx/serialization/json/internal/CharMappings;->initC2ESC(IC)V +HSPLkotlinx/serialization/json/internal/CharMappings;->initC2TC(CB)V +HSPLkotlinx/serialization/json/internal/CharMappings;->initC2TC(IB)V +HSPLkotlinx/serialization/json/internal/CharMappings;->initCharToToken()V +HSPLkotlinx/serialization/json/internal/CharMappings;->initEscape()V +Lkotlinx/serialization/json/internal/Composer; +HSPLkotlinx/serialization/json/internal/Composer;->(Lkotlinx/serialization/json/internal/InternalJsonWriter;)V +HSPLkotlinx/serialization/json/internal/Composer;->getWritingFirst()Z +HSPLkotlinx/serialization/json/internal/Composer;->indent()V +HSPLkotlinx/serialization/json/internal/Composer;->nextItem()V +HSPLkotlinx/serialization/json/internal/Composer;->print(C)V +HSPLkotlinx/serialization/json/internal/Composer;->print(Ljava/lang/String;)V +HSPLkotlinx/serialization/json/internal/Composer;->print(Z)V +HSPLkotlinx/serialization/json/internal/Composer;->printQuoted(Ljava/lang/String;)V +HSPLkotlinx/serialization/json/internal/Composer;->space()V +HSPLkotlinx/serialization/json/internal/Composer;->unIndent()V +Lkotlinx/serialization/json/internal/ComposersKt; +HSPLkotlinx/serialization/json/internal/ComposersKt;->Composer(Lkotlinx/serialization/json/internal/InternalJsonWriter;Lkotlinx/serialization/json/Json;)Lkotlinx/serialization/json/internal/Composer; +Lkotlinx/serialization/json/internal/CreateMapForCacheKt; +HSPLkotlinx/serialization/json/internal/CreateMapForCacheKt;->createMapForCache(I)Ljava/util/Map; +Lkotlinx/serialization/json/internal/DescriptorSchemaCache; +HSPLkotlinx/serialization/json/internal/DescriptorSchemaCache;->()V +Lkotlinx/serialization/json/internal/InternalJsonWriter; +Lkotlinx/serialization/json/internal/JsonDecodingException; +HSPLkotlinx/serialization/json/internal/JsonDecodingException;->(Ljava/lang/String;)V +Lkotlinx/serialization/json/internal/JsonElementMarker; +Lkotlinx/serialization/json/internal/JsonException; +HSPLkotlinx/serialization/json/internal/JsonException;->(Ljava/lang/String;)V +Lkotlinx/serialization/json/internal/JsonExceptionsKt; +HSPLkotlinx/serialization/json/internal/JsonExceptionsKt;->JsonDecodingException(ILjava/lang/String;)Lkotlinx/serialization/json/internal/JsonDecodingException; +HSPLkotlinx/serialization/json/internal/JsonExceptionsKt;->JsonDecodingException(ILjava/lang/String;Ljava/lang/CharSequence;)Lkotlinx/serialization/json/internal/JsonDecodingException; +HSPLkotlinx/serialization/json/internal/JsonExceptionsKt;->minify(Ljava/lang/CharSequence;I)Ljava/lang/CharSequence; +Lkotlinx/serialization/json/internal/JsonPath; +HSPLkotlinx/serialization/json/internal/JsonPath;->()V +HSPLkotlinx/serialization/json/internal/JsonPath;->getPath()Ljava/lang/String; +HSPLkotlinx/serialization/json/internal/JsonPath;->popDescriptor()V +HSPLkotlinx/serialization/json/internal/JsonPath;->pushDescriptor(Lkotlinx/serialization/descriptors/SerialDescriptor;)V +HSPLkotlinx/serialization/json/internal/JsonPath;->resetCurrentMapKey()V +HSPLkotlinx/serialization/json/internal/JsonPath;->updateCurrentMapKey(Ljava/lang/Object;)V +Lkotlinx/serialization/json/internal/JsonStreamsKt; +HSPLkotlinx/serialization/json/internal/JsonStreamsKt;->encodeByWriter(Lkotlinx/serialization/json/Json;Lkotlinx/serialization/json/internal/InternalJsonWriter;Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)V +Lkotlinx/serialization/json/internal/JsonToStringWriter; +HSPLkotlinx/serialization/json/internal/JsonToStringWriter;->()V +HSPLkotlinx/serialization/json/internal/JsonToStringWriter;->ensureAdditionalCapacity(I)V +HSPLkotlinx/serialization/json/internal/JsonToStringWriter;->ensureTotalCapacity(II)I +HSPLkotlinx/serialization/json/internal/JsonToStringWriter;->release()V +HSPLkotlinx/serialization/json/internal/JsonToStringWriter;->toString()Ljava/lang/String; +HSPLkotlinx/serialization/json/internal/JsonToStringWriter;->write(Ljava/lang/String;)V +HSPLkotlinx/serialization/json/internal/JsonToStringWriter;->writeChar(C)V +HSPLkotlinx/serialization/json/internal/JsonToStringWriter;->writeQuoted(Ljava/lang/String;)V +Lkotlinx/serialization/json/internal/JsonTreeReader; +HSPLkotlinx/serialization/json/internal/JsonTreeReader;->(Lkotlinx/serialization/json/JsonConfiguration;Lkotlinx/serialization/json/internal/AbstractJsonLexer;)V +HSPLkotlinx/serialization/json/internal/JsonTreeReader;->read()Lkotlinx/serialization/json/JsonElement; +HSPLkotlinx/serialization/json/internal/JsonTreeReader;->readArray()Lkotlinx/serialization/json/JsonElement; +HSPLkotlinx/serialization/json/internal/JsonTreeReader;->readValue(Z)Lkotlinx/serialization/json/JsonPrimitive; +Lkotlinx/serialization/json/internal/PolymorphismValidator; +HSPLkotlinx/serialization/json/internal/PolymorphismValidator;->(ZLjava/lang/String;)V +HSPLkotlinx/serialization/json/internal/PolymorphismValidator;->checkDiscriminatorCollisions(Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlin/reflect/KClass;)V +HSPLkotlinx/serialization/json/internal/PolymorphismValidator;->checkKind(Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlin/reflect/KClass;)V +HSPLkotlinx/serialization/json/internal/PolymorphismValidator;->polymorphic(Lkotlin/reflect/KClass;Lkotlin/reflect/KClass;Lkotlinx/serialization/KSerializer;)V +HSPLkotlinx/serialization/json/internal/PolymorphismValidator;->polymorphicDefaultDeserializer(Lkotlin/reflect/KClass;Lkotlin/jvm/functions/Function1;)V +Lkotlinx/serialization/json/internal/StreamingJsonDecoder; +HSPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->(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 +HSPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->beginStructure(Lkotlinx/serialization/descriptors/SerialDescriptor;)Lkotlinx/serialization/encoding/CompositeDecoder; +HSPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->decodeElementIndex(Lkotlinx/serialization/descriptors/SerialDescriptor;)I +HSPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->decodeJsonElement()Lkotlinx/serialization/json/JsonElement; +HSPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->decodeMapIndex()I +HSPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->decodeSerializableElement(Lkotlinx/serialization/descriptors/SerialDescriptor;ILkotlinx/serialization/DeserializationStrategy;Ljava/lang/Object;)Ljava/lang/Object; +HSPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->decodeSerializableValue(Lkotlinx/serialization/DeserializationStrategy;)Ljava/lang/Object; +HSPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->decodeString()Ljava/lang/String; +HSPLkotlinx/serialization/json/internal/StreamingJsonDecoder;->endStructure(Lkotlinx/serialization/descriptors/SerialDescriptor;)V +Lkotlinx/serialization/json/internal/StreamingJsonDecoder$DiscriminatorHolder; +Lkotlinx/serialization/json/internal/StreamingJsonDecoder$WhenMappings; +HSPLkotlinx/serialization/json/internal/StreamingJsonDecoder$WhenMappings;->()V +Lkotlinx/serialization/json/internal/StreamingJsonEncoder; +HSPLkotlinx/serialization/json/internal/StreamingJsonEncoder;->(Lkotlinx/serialization/json/internal/Composer;Lkotlinx/serialization/json/Json;Lkotlinx/serialization/json/internal/WriteMode;[Lkotlinx/serialization/json/JsonEncoder;)V +HSPLkotlinx/serialization/json/internal/StreamingJsonEncoder;->(Lkotlinx/serialization/json/internal/InternalJsonWriter;Lkotlinx/serialization/json/Json;Lkotlinx/serialization/json/internal/WriteMode;[Lkotlinx/serialization/json/JsonEncoder;)V +HSPLkotlinx/serialization/json/internal/StreamingJsonEncoder;->beginStructure(Lkotlinx/serialization/descriptors/SerialDescriptor;)Lkotlinx/serialization/encoding/CompositeEncoder; +HSPLkotlinx/serialization/json/internal/StreamingJsonEncoder;->encodeBoolean(Z)V +HSPLkotlinx/serialization/json/internal/StreamingJsonEncoder;->encodeElement(Lkotlinx/serialization/descriptors/SerialDescriptor;I)Z +HSPLkotlinx/serialization/json/internal/StreamingJsonEncoder;->encodeNull()V +HSPLkotlinx/serialization/json/internal/StreamingJsonEncoder;->encodeSerializableValue(Lkotlinx/serialization/SerializationStrategy;Ljava/lang/Object;)V +HSPLkotlinx/serialization/json/internal/StreamingJsonEncoder;->encodeString(Ljava/lang/String;)V +HSPLkotlinx/serialization/json/internal/StreamingJsonEncoder;->endStructure(Lkotlinx/serialization/descriptors/SerialDescriptor;)V +HSPLkotlinx/serialization/json/internal/StreamingJsonEncoder;->getJson()Lkotlinx/serialization/json/Json; +Lkotlinx/serialization/json/internal/StreamingJsonEncoder$WhenMappings; +HSPLkotlinx/serialization/json/internal/StreamingJsonEncoder$WhenMappings;->()V +Lkotlinx/serialization/json/internal/StringJsonLexer; +HSPLkotlinx/serialization/json/internal/StringJsonLexer;->(Ljava/lang/String;)V +HSPLkotlinx/serialization/json/internal/StringJsonLexer;->canConsumeValue()Z +HSPLkotlinx/serialization/json/internal/StringJsonLexer;->consumeKeyString()Ljava/lang/String; +HSPLkotlinx/serialization/json/internal/StringJsonLexer;->consumeNextToken()B +HSPLkotlinx/serialization/json/internal/StringJsonLexer;->consumeNextToken(C)V +HSPLkotlinx/serialization/json/internal/StringJsonLexer;->getSource()Ljava/lang/CharSequence; +HSPLkotlinx/serialization/json/internal/StringJsonLexer;->getSource()Ljava/lang/String; +HSPLkotlinx/serialization/json/internal/StringJsonLexer;->prefetchOrEof(I)I +HSPLkotlinx/serialization/json/internal/StringJsonLexer;->skipWhitespaces()I +HSPLkotlinx/serialization/json/internal/StringJsonLexer;->tryConsumeComma()Z +Lkotlinx/serialization/json/internal/StringOpsKt; +HSPLkotlinx/serialization/json/internal/StringOpsKt;->()V +PLkotlinx/serialization/json/internal/StringOpsKt;->getESCAPE_MARKERS()[B +HSPLkotlinx/serialization/json/internal/StringOpsKt;->toBooleanStrictOrNull(Ljava/lang/String;)Ljava/lang/Boolean; +HSPLkotlinx/serialization/json/internal/StringOpsKt;->toHexChar(I)C +Lkotlinx/serialization/json/internal/WriteMode; +HSPLkotlinx/serialization/json/internal/WriteMode;->$values()[Lkotlinx/serialization/json/internal/WriteMode; +HSPLkotlinx/serialization/json/internal/WriteMode;->()V +HSPLkotlinx/serialization/json/internal/WriteMode;->(Ljava/lang/String;ICC)V +HSPLkotlinx/serialization/json/internal/WriteMode;->getEntries()Lkotlin/enums/EnumEntries; +HSPLkotlinx/serialization/json/internal/WriteMode;->values()[Lkotlinx/serialization/json/internal/WriteMode; +Lkotlinx/serialization/json/internal/WriteModeKt; +HSPLkotlinx/serialization/json/internal/WriteModeKt;->carrierDescriptor(Lkotlinx/serialization/descriptors/SerialDescriptor;Lkotlinx/serialization/modules/SerializersModule;)Lkotlinx/serialization/descriptors/SerialDescriptor; +HSPLkotlinx/serialization/json/internal/WriteModeKt;->switchMode(Lkotlinx/serialization/json/Json;Lkotlinx/serialization/descriptors/SerialDescriptor;)Lkotlinx/serialization/json/internal/WriteMode; +Lkotlinx/serialization/modules/PolymorphicModuleBuilder; +HSPLkotlinx/serialization/modules/PolymorphicModuleBuilder;->(Lkotlin/reflect/KClass;Lkotlinx/serialization/KSerializer;)V +HSPLkotlinx/serialization/modules/PolymorphicModuleBuilder;->buildTo(Lkotlinx/serialization/modules/SerializersModuleBuilder;)V +HSPLkotlinx/serialization/modules/PolymorphicModuleBuilder;->defaultDeserializer(Lkotlin/jvm/functions/Function1;)V +HSPLkotlinx/serialization/modules/PolymorphicModuleBuilder;->subclass(Lkotlin/reflect/KClass;Lkotlinx/serialization/KSerializer;)V +Lkotlinx/serialization/modules/SerialModuleImpl; +HSPLkotlinx/serialization/modules/SerialModuleImpl;->(Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;Ljava/util/Map;)V +HSPLkotlinx/serialization/modules/SerialModuleImpl;->dumpTo(Lkotlinx/serialization/modules/SerializersModuleCollector;)V +Lkotlinx/serialization/modules/SerializersModule; +HSPLkotlinx/serialization/modules/SerializersModule;->()V +HSPLkotlinx/serialization/modules/SerializersModule;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lkotlinx/serialization/modules/SerializersModuleBuilder; +HSPLkotlinx/serialization/modules/SerializersModuleBuilder;->()V +HSPLkotlinx/serialization/modules/SerializersModuleBuilder;->build()Lkotlinx/serialization/modules/SerializersModule; +HSPLkotlinx/serialization/modules/SerializersModuleBuilder;->registerDefaultPolymorphicDeserializer(Lkotlin/reflect/KClass;Lkotlin/jvm/functions/Function1;Z)V +HSPLkotlinx/serialization/modules/SerializersModuleBuilder;->registerPolymorphicSerializer$default(Lkotlinx/serialization/modules/SerializersModuleBuilder;Lkotlin/reflect/KClass;Lkotlin/reflect/KClass;Lkotlinx/serialization/KSerializer;ZILjava/lang/Object;)V +HSPLkotlinx/serialization/modules/SerializersModuleBuilder;->registerPolymorphicSerializer(Lkotlin/reflect/KClass;Lkotlin/reflect/KClass;Lkotlinx/serialization/KSerializer;Z)V +Lkotlinx/serialization/modules/SerializersModuleBuildersKt; +HSPLkotlinx/serialization/modules/SerializersModuleBuildersKt;->EmptySerializersModule()Lkotlinx/serialization/modules/SerializersModule; +Lkotlinx/serialization/modules/SerializersModuleCollector; +Lkotlinx/serialization/modules/SerializersModuleKt; +HSPLkotlinx/serialization/modules/SerializersModuleKt;->()V +HSPLkotlinx/serialization/modules/SerializersModuleKt;->getEmptySerializersModule()Lkotlinx/serialization/modules/SerializersModule; +Lnet/zetetic/database/DatabaseErrorHandler; +Lnet/zetetic/database/DatabaseUtils; +HSPLnet/zetetic/database/DatabaseUtils;->()V +HSPLnet/zetetic/database/DatabaseUtils;->cursorPickFillWindowStartPosition(II)I +HSPLnet/zetetic/database/DatabaseUtils;->getSqlStatementType(Ljava/lang/String;)I +HSPLnet/zetetic/database/DatabaseUtils;->longForQuery(Lnet/zetetic/database/sqlcipher/SQLiteDatabase;Ljava/lang/String;[Ljava/lang/String;)J +HSPLnet/zetetic/database/DatabaseUtils;->longForQuery(Lnet/zetetic/database/sqlcipher/SQLiteStatement;[Ljava/lang/String;)J +Lnet/zetetic/database/DefaultDatabaseErrorHandler; +HSPLnet/zetetic/database/DefaultDatabaseErrorHandler;->()V +Lnet/zetetic/database/sqlcipher/CloseGuard; +HSPLnet/zetetic/database/sqlcipher/CloseGuard;->()V +HSPLnet/zetetic/database/sqlcipher/CloseGuard;->()V +HSPLnet/zetetic/database/sqlcipher/CloseGuard;->get()Lnet/zetetic/database/sqlcipher/CloseGuard; +HSPLnet/zetetic/database/sqlcipher/CloseGuard;->open(Ljava/lang/String;)V +Lnet/zetetic/database/sqlcipher/CloseGuard$DefaultReporter; +HSPLnet/zetetic/database/sqlcipher/CloseGuard$DefaultReporter;->()V +HSPLnet/zetetic/database/sqlcipher/CloseGuard$DefaultReporter;->(Lnet/zetetic/database/sqlcipher/CloseGuard$1;)V +Lnet/zetetic/database/sqlcipher/CloseGuard$Reporter; +Lnet/zetetic/database/sqlcipher/SQLiteClosable; +HSPLnet/zetetic/database/sqlcipher/SQLiteClosable;->()V +HSPLnet/zetetic/database/sqlcipher/SQLiteClosable;->acquireReference()V +HSPLnet/zetetic/database/sqlcipher/SQLiteClosable;->close()V +HSPLnet/zetetic/database/sqlcipher/SQLiteClosable;->releaseReference()V +Lnet/zetetic/database/sqlcipher/SQLiteConnection; +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->()V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->(Lnet/zetetic/database/sqlcipher/SQLiteConnectionPool;Lnet/zetetic/database/sqlcipher/SQLiteDatabaseConfiguration;IZ)V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->acquirePreparedStatement(Ljava/lang/String;)Lnet/zetetic/database/sqlcipher/SQLiteConnection$PreparedStatement; +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->applyBlockGuardPolicy(Lnet/zetetic/database/sqlcipher/SQLiteConnection$PreparedStatement;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->attachCancellationSignal(Landroid/os/CancellationSignal;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->bindArguments(Lnet/zetetic/database/sqlcipher/SQLiteConnection$PreparedStatement;[Ljava/lang/Object;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->canonicalizeSyncMode(Ljava/lang/String;)Ljava/lang/String; +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->detachCancellationSignal(Landroid/os/CancellationSignal;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->execute(Ljava/lang/String;[Ljava/lang/Object;Landroid/os/CancellationSignal;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->executeForChangedRowCount(Ljava/lang/String;[Ljava/lang/Object;Landroid/os/CancellationSignal;)I +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->executeForCursorWindow(Ljava/lang/String;[Ljava/lang/Object;Landroid/database/CursorWindow;IIZLandroid/os/CancellationSignal;)I +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->executeForLong(Ljava/lang/String;[Ljava/lang/Object;Landroid/os/CancellationSignal;)J +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->executeForString(Ljava/lang/String;[Ljava/lang/Object;Landroid/os/CancellationSignal;)Ljava/lang/String; +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->finalizePreparedStatement(Lnet/zetetic/database/sqlcipher/SQLiteConnection$PreparedStatement;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->hasCodec()Z +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->isCacheable(I)Z +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->isPrimaryConnection()Z +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->obtainPreparedStatement(Ljava/lang/String;JIIZ)Lnet/zetetic/database/sqlcipher/SQLiteConnection$PreparedStatement; +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->open()V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->open(Lnet/zetetic/database/sqlcipher/SQLiteConnectionPool;Lnet/zetetic/database/sqlcipher/SQLiteDatabaseConfiguration;IZ)Lnet/zetetic/database/sqlcipher/SQLiteConnection; +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->prepare(Ljava/lang/String;Lnet/zetetic/database/sqlcipher/SQLiteStatementInfo;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->reconfigure(Lnet/zetetic/database/sqlcipher/SQLiteDatabaseConfiguration;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->recyclePreparedStatement(Lnet/zetetic/database/sqlcipher/SQLiteConnection$PreparedStatement;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->releasePreparedStatement(Lnet/zetetic/database/sqlcipher/SQLiteConnection$PreparedStatement;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->setAutoCheckpointInterval()V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->setForeignKeyModeFromConfiguration()V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->setJournalMode(Ljava/lang/String;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->setJournalSizeLimit()V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->setOnlyAllowReadOnlyOperations(Z)V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->setPageSize()V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->setSyncMode(Ljava/lang/String;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->setWalModeFromConfiguration()V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection;->throwIfStatementForbidden(Lnet/zetetic/database/sqlcipher/SQLiteConnection$PreparedStatement;)V +Lnet/zetetic/database/sqlcipher/SQLiteConnection$Operation; +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection$Operation;->()V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection$Operation;->(Lnet/zetetic/database/sqlcipher/SQLiteConnection$1;)V +Lnet/zetetic/database/sqlcipher/SQLiteConnection$OperationLog; +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection$OperationLog;->()V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection$OperationLog;->(Lnet/zetetic/database/sqlcipher/SQLiteConnection$1;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection$OperationLog;->beginOperation(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)I +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection$OperationLog;->endOperation(I)V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection$OperationLog;->endOperationDeferLog(I)Z +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection$OperationLog;->endOperationDeferLogLocked(I)Z +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection$OperationLog;->getOperationLocked(I)Lnet/zetetic/database/sqlcipher/SQLiteConnection$Operation; +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection$OperationLog;->newOperationCookieLocked(I)I +Lnet/zetetic/database/sqlcipher/SQLiteConnection$PreparedStatement; +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection$PreparedStatement;->()V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection$PreparedStatement;->(Lnet/zetetic/database/sqlcipher/SQLiteConnection$1;)V +Lnet/zetetic/database/sqlcipher/SQLiteConnection$PreparedStatementCache; +HSPLnet/zetetic/database/sqlcipher/SQLiteConnection$PreparedStatementCache;->(Lnet/zetetic/database/sqlcipher/SQLiteConnection;I)V +Lnet/zetetic/database/sqlcipher/SQLiteConnectionPool; +HSPLnet/zetetic/database/sqlcipher/SQLiteConnectionPool;->()V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnectionPool;->(Lnet/zetetic/database/sqlcipher/SQLiteDatabaseConfiguration;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnectionPool;->acquireConnection(Ljava/lang/String;ILandroid/os/CancellationSignal;)Lnet/zetetic/database/sqlcipher/SQLiteConnection; +HSPLnet/zetetic/database/sqlcipher/SQLiteConnectionPool;->closeExcessConnectionsAndLogExceptionsLocked()V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnectionPool;->finishAcquireConnectionLocked(Lnet/zetetic/database/sqlcipher/SQLiteConnection;I)V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnectionPool;->markAcquiredConnectionsLocked(Lnet/zetetic/database/sqlcipher/SQLiteConnectionPool$AcquiredConnectionStatus;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnectionPool;->open()V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnectionPool;->open(Lnet/zetetic/database/sqlcipher/SQLiteDatabaseConfiguration;)Lnet/zetetic/database/sqlcipher/SQLiteConnectionPool; +HSPLnet/zetetic/database/sqlcipher/SQLiteConnectionPool;->openConnectionLocked(Lnet/zetetic/database/sqlcipher/SQLiteDatabaseConfiguration;Z)Lnet/zetetic/database/sqlcipher/SQLiteConnection; +HSPLnet/zetetic/database/sqlcipher/SQLiteConnectionPool;->reconfigure(Lnet/zetetic/database/sqlcipher/SQLiteDatabaseConfiguration;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnectionPool;->reconfigureAllConnectionsLocked()V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnectionPool;->recycleConnectionLocked(Lnet/zetetic/database/sqlcipher/SQLiteConnection;Lnet/zetetic/database/sqlcipher/SQLiteConnectionPool$AcquiredConnectionStatus;)Z +HSPLnet/zetetic/database/sqlcipher/SQLiteConnectionPool;->releaseConnection(Lnet/zetetic/database/sqlcipher/SQLiteConnection;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnectionPool;->setMaxConnectionPoolSizeLocked()V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnectionPool;->throwIfClosedLocked()V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnectionPool;->tryAcquireNonPrimaryConnectionLocked(Ljava/lang/String;I)Lnet/zetetic/database/sqlcipher/SQLiteConnection; +HSPLnet/zetetic/database/sqlcipher/SQLiteConnectionPool;->tryAcquirePrimaryConnectionLocked(I)Lnet/zetetic/database/sqlcipher/SQLiteConnection; +HSPLnet/zetetic/database/sqlcipher/SQLiteConnectionPool;->waitForConnection(Ljava/lang/String;ILandroid/os/CancellationSignal;)Lnet/zetetic/database/sqlcipher/SQLiteConnection; +HSPLnet/zetetic/database/sqlcipher/SQLiteConnectionPool;->wakeConnectionWaitersLocked()V +Lnet/zetetic/database/sqlcipher/SQLiteConnectionPool$AcquiredConnectionStatus; +HSPLnet/zetetic/database/sqlcipher/SQLiteConnectionPool$AcquiredConnectionStatus;->$values()[Lnet/zetetic/database/sqlcipher/SQLiteConnectionPool$AcquiredConnectionStatus; +HSPLnet/zetetic/database/sqlcipher/SQLiteConnectionPool$AcquiredConnectionStatus;->()V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnectionPool$AcquiredConnectionStatus;->(Ljava/lang/String;I)V +Lnet/zetetic/database/sqlcipher/SQLiteConnectionPool$ConnectionWaiter; +HSPLnet/zetetic/database/sqlcipher/SQLiteConnectionPool$ConnectionWaiter;->()V +HSPLnet/zetetic/database/sqlcipher/SQLiteConnectionPool$ConnectionWaiter;->(Lnet/zetetic/database/sqlcipher/SQLiteConnectionPool$1;)V +Lnet/zetetic/database/sqlcipher/SQLiteCursor; +HSPLnet/zetetic/database/sqlcipher/SQLiteCursor;->()V +HSPLnet/zetetic/database/sqlcipher/SQLiteCursor;->(Lnet/zetetic/database/sqlcipher/SQLiteCursorDriver;Ljava/lang/String;Lnet/zetetic/database/sqlcipher/SQLiteQuery;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteCursor;->awc_clearOrCreateWindow(Ljava/lang/String;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteCursor;->close()V +HSPLnet/zetetic/database/sqlcipher/SQLiteCursor;->fillWindow(I)V +PLnet/zetetic/database/sqlcipher/SQLiteCursor;->finalize()V +HSPLnet/zetetic/database/sqlcipher/SQLiteCursor;->getColumnIndex(Ljava/lang/String;)I +HSPLnet/zetetic/database/sqlcipher/SQLiteCursor;->getCount()I +HSPLnet/zetetic/database/sqlcipher/SQLiteCursor;->getDatabase()Lnet/zetetic/database/sqlcipher/SQLiteDatabase; +HSPLnet/zetetic/database/sqlcipher/SQLiteCursor;->onMove(II)Z +HSPLnet/zetetic/database/sqlcipher/SQLiteCursor;->setWindow(Landroid/database/CursorWindow;)V +Lnet/zetetic/database/sqlcipher/SQLiteCursorDriver; +Lnet/zetetic/database/sqlcipher/SQLiteCustomFunction; +Lnet/zetetic/database/sqlcipher/SQLiteDatabase; +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->()V +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->(Ljava/lang/String;[BILnet/zetetic/database/sqlcipher/SQLiteDatabase$CursorFactory;Lnet/zetetic/database/DatabaseErrorHandler;Lnet/zetetic/database/sqlcipher/SQLiteDatabaseHook;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->beginTransaction()V +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->beginTransaction(Lnet/zetetic/database/sqlcipher/SQLiteTransactionListener;Z)V +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->beginTransactionNonExclusive()V +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->compileStatement(Ljava/lang/String;)Landroidx/sqlite/db/SupportSQLiteStatement; +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->compileStatement(Ljava/lang/String;)Lnet/zetetic/database/sqlcipher/SQLiteStatement; +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->createSession()Lnet/zetetic/database/sqlcipher/SQLiteSession; +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->endTransaction()V +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->execSQL(Ljava/lang/String;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->executeSql(Ljava/lang/String;[Ljava/lang/Object;)I +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->getPath()Ljava/lang/String; +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->getThreadDefaultConnectionFlags(Z)I +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->getThreadSession()Lnet/zetetic/database/sqlcipher/SQLiteSession; +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->getVersion()I +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->hasCodec()Z +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->inTransaction()Z +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->isMainThread()Z +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->isOpen()Z +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->isReadOnly()Z +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->isReadOnlyLocked()Z +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->isWriteAheadLoggingEnabled()Z +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->open()V +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->openDatabase(Ljava/lang/String;[BLnet/zetetic/database/sqlcipher/SQLiteDatabase$CursorFactory;ILnet/zetetic/database/DatabaseErrorHandler;Lnet/zetetic/database/sqlcipher/SQLiteDatabaseHook;)Lnet/zetetic/database/sqlcipher/SQLiteDatabase; +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->openInner()V +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->query(Landroidx/sqlite/db/SupportSQLiteQuery;)Landroid/database/Cursor; +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->query(Landroidx/sqlite/db/SupportSQLiteQuery;Landroid/os/CancellationSignal;)Landroid/database/Cursor; +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->query(Ljava/lang/String;)Landroid/database/Cursor; +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->rawQuery(Ljava/lang/String;[Ljava/lang/Object;)Landroid/database/Cursor; +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->setForeignKeyConstraintsEnabled(Z)V +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->setTransactionSuccessful()V +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->setVersion(I)V +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase;->throwIfNotOpenLocked()V +Lnet/zetetic/database/sqlcipher/SQLiteDatabase$1; +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase$1;->(Lnet/zetetic/database/sqlcipher/SQLiteDatabase;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase$1;->initialValue()Ljava/lang/Object; +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabase$1;->initialValue()Lnet/zetetic/database/sqlcipher/SQLiteSession; +Lnet/zetetic/database/sqlcipher/SQLiteDatabase$CursorFactory; +Lnet/zetetic/database/sqlcipher/SQLiteDatabaseConfiguration; +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabaseConfiguration;->()V +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabaseConfiguration;->(Ljava/lang/String;I[BLnet/zetetic/database/sqlcipher/SQLiteDatabaseHook;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabaseConfiguration;->(Lnet/zetetic/database/sqlcipher/SQLiteDatabaseConfiguration;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabaseConfiguration;->isInMemoryDb()Z +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabaseConfiguration;->stripPathForLogs(Ljava/lang/String;)Ljava/lang/String; +HSPLnet/zetetic/database/sqlcipher/SQLiteDatabaseConfiguration;->updateParametersFrom(Lnet/zetetic/database/sqlcipher/SQLiteDatabaseConfiguration;)V +Lnet/zetetic/database/sqlcipher/SQLiteDatabaseHook; +Lnet/zetetic/database/sqlcipher/SQLiteDebug; +HSPLnet/zetetic/database/sqlcipher/SQLiteDebug;->()V +Lnet/zetetic/database/sqlcipher/SQLiteDebug$PagerStats; +Lnet/zetetic/database/sqlcipher/SQLiteDirectCursorDriver; +HSPLnet/zetetic/database/sqlcipher/SQLiteDirectCursorDriver;->(Lnet/zetetic/database/sqlcipher/SQLiteDatabase;Ljava/lang/String;Ljava/lang/String;Landroid/os/CancellationSignal;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteDirectCursorDriver;->cursorClosed()V +HSPLnet/zetetic/database/sqlcipher/SQLiteDirectCursorDriver;->query(Lnet/zetetic/database/sqlcipher/SQLiteDatabase$CursorFactory;[Ljava/lang/Object;)Landroid/database/Cursor; +Lnet/zetetic/database/sqlcipher/SQLiteGlobal; +HSPLnet/zetetic/database/sqlcipher/SQLiteGlobal;->()V +HSPLnet/zetetic/database/sqlcipher/SQLiteGlobal;->getDefaultJournalMode()Ljava/lang/String; +HSPLnet/zetetic/database/sqlcipher/SQLiteGlobal;->getDefaultSyncMode()Ljava/lang/String; +HSPLnet/zetetic/database/sqlcipher/SQLiteGlobal;->getJournalSizeLimit()I +HSPLnet/zetetic/database/sqlcipher/SQLiteGlobal;->getWALAutoCheckpoint()I +HSPLnet/zetetic/database/sqlcipher/SQLiteGlobal;->getWALConnectionPoolSize()I +HSPLnet/zetetic/database/sqlcipher/SQLiteGlobal;->getWALSyncMode()Ljava/lang/String; +Lnet/zetetic/database/sqlcipher/SQLiteOpenHelper; +HSPLnet/zetetic/database/sqlcipher/SQLiteOpenHelper;->()V +HSPLnet/zetetic/database/sqlcipher/SQLiteOpenHelper;->(Landroid/content/Context;Ljava/lang/String;[BLnet/zetetic/database/sqlcipher/SQLiteDatabase$CursorFactory;IILnet/zetetic/database/DatabaseErrorHandler;Lnet/zetetic/database/sqlcipher/SQLiteDatabaseHook;Z)V +HSPLnet/zetetic/database/sqlcipher/SQLiteOpenHelper;->getDatabaseLocked(Z)Lnet/zetetic/database/sqlcipher/SQLiteDatabase; +HSPLnet/zetetic/database/sqlcipher/SQLiteOpenHelper;->getWritableDatabase()Lnet/zetetic/database/sqlcipher/SQLiteDatabase; +HSPLnet/zetetic/database/sqlcipher/SQLiteOpenHelper;->setWriteAheadLoggingEnabled(Z)V +Lnet/zetetic/database/sqlcipher/SQLiteProgram; +HSPLnet/zetetic/database/sqlcipher/SQLiteProgram;->()V +HSPLnet/zetetic/database/sqlcipher/SQLiteProgram;->(Lnet/zetetic/database/sqlcipher/SQLiteDatabase;Ljava/lang/String;[Ljava/lang/Object;Landroid/os/CancellationSignal;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteProgram;->bindAllArgs([Ljava/lang/Object;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteProgram;->bindAllArgsAsStrings([Ljava/lang/String;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteProgram;->clearBindings()V +HSPLnet/zetetic/database/sqlcipher/SQLiteProgram;->getBindArgs()[Ljava/lang/Object; +HSPLnet/zetetic/database/sqlcipher/SQLiteProgram;->getColumnNames()[Ljava/lang/String; +HSPLnet/zetetic/database/sqlcipher/SQLiteProgram;->getConnectionFlags()I +HSPLnet/zetetic/database/sqlcipher/SQLiteProgram;->getDatabase()Lnet/zetetic/database/sqlcipher/SQLiteDatabase; +HSPLnet/zetetic/database/sqlcipher/SQLiteProgram;->getSession()Lnet/zetetic/database/sqlcipher/SQLiteSession; +HSPLnet/zetetic/database/sqlcipher/SQLiteProgram;->getSql()Ljava/lang/String; +HSPLnet/zetetic/database/sqlcipher/SQLiteProgram;->onAllReferencesReleased()V +Lnet/zetetic/database/sqlcipher/SQLiteQuery; +HSPLnet/zetetic/database/sqlcipher/SQLiteQuery;->(Lnet/zetetic/database/sqlcipher/SQLiteDatabase;Ljava/lang/String;Landroid/os/CancellationSignal;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteQuery;->fillWindow(Landroid/database/CursorWindow;IIZ)I +Lnet/zetetic/database/sqlcipher/SQLiteSession; +HSPLnet/zetetic/database/sqlcipher/SQLiteSession;->()V +HSPLnet/zetetic/database/sqlcipher/SQLiteSession;->(Lnet/zetetic/database/sqlcipher/SQLiteConnectionPool;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteSession;->acquireConnection(Ljava/lang/String;ILandroid/os/CancellationSignal;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteSession;->beginTransaction(ILnet/zetetic/database/sqlcipher/SQLiteTransactionListener;ILandroid/os/CancellationSignal;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteSession;->beginTransactionUnchecked(ILnet/zetetic/database/sqlcipher/SQLiteTransactionListener;ILandroid/os/CancellationSignal;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteSession;->endTransaction(Landroid/os/CancellationSignal;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteSession;->endTransactionUnchecked(Landroid/os/CancellationSignal;Z)V +HSPLnet/zetetic/database/sqlcipher/SQLiteSession;->executeForChangedRowCount(Ljava/lang/String;[Ljava/lang/Object;ILandroid/os/CancellationSignal;)I +HSPLnet/zetetic/database/sqlcipher/SQLiteSession;->executeForCursorWindow(Ljava/lang/String;[Ljava/lang/Object;Landroid/database/CursorWindow;IIZILandroid/os/CancellationSignal;)I +HSPLnet/zetetic/database/sqlcipher/SQLiteSession;->executeForLong(Ljava/lang/String;[Ljava/lang/Object;ILandroid/os/CancellationSignal;)J +HSPLnet/zetetic/database/sqlcipher/SQLiteSession;->executeSpecial(Ljava/lang/String;[Ljava/lang/Object;ILandroid/os/CancellationSignal;)Z +HSPLnet/zetetic/database/sqlcipher/SQLiteSession;->hasTransaction()Z +HSPLnet/zetetic/database/sqlcipher/SQLiteSession;->obtainTransaction(ILnet/zetetic/database/sqlcipher/SQLiteTransactionListener;)Lnet/zetetic/database/sqlcipher/SQLiteSession$Transaction; +HSPLnet/zetetic/database/sqlcipher/SQLiteSession;->prepare(Ljava/lang/String;ILandroid/os/CancellationSignal;Lnet/zetetic/database/sqlcipher/SQLiteStatementInfo;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteSession;->recycleTransaction(Lnet/zetetic/database/sqlcipher/SQLiteSession$Transaction;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteSession;->releaseConnection()V +HSPLnet/zetetic/database/sqlcipher/SQLiteSession;->setTransactionSuccessful()V +HSPLnet/zetetic/database/sqlcipher/SQLiteSession;->throwIfNoTransaction()V +HSPLnet/zetetic/database/sqlcipher/SQLiteSession;->throwIfTransactionMarkedSuccessful()V +Lnet/zetetic/database/sqlcipher/SQLiteSession$Transaction; +HSPLnet/zetetic/database/sqlcipher/SQLiteSession$Transaction;->()V +HSPLnet/zetetic/database/sqlcipher/SQLiteSession$Transaction;->(Lnet/zetetic/database/sqlcipher/SQLiteSession$1;)V +Lnet/zetetic/database/sqlcipher/SQLiteStatement; +HSPLnet/zetetic/database/sqlcipher/SQLiteStatement;->(Lnet/zetetic/database/sqlcipher/SQLiteDatabase;Ljava/lang/String;[Ljava/lang/Object;)V +HSPLnet/zetetic/database/sqlcipher/SQLiteStatement;->executeUpdateDelete()I +HSPLnet/zetetic/database/sqlcipher/SQLiteStatement;->simpleQueryForLong()J +Lnet/zetetic/database/sqlcipher/SQLiteStatementInfo; +HSPLnet/zetetic/database/sqlcipher/SQLiteStatementInfo;->()V +Lnet/zetetic/database/sqlcipher/SQLiteTransactionListener; +Lnet/zetetic/database/sqlcipher/SupportHelper; +HSPLnet/zetetic/database/sqlcipher/SupportHelper;->(Landroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration;[BLnet/zetetic/database/sqlcipher/SQLiteDatabaseHook;Z)V +HSPLnet/zetetic/database/sqlcipher/SupportHelper;->(Landroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration;[BLnet/zetetic/database/sqlcipher/SQLiteDatabaseHook;ZI)V +HSPLnet/zetetic/database/sqlcipher/SupportHelper;->getWritableDatabase()Landroidx/sqlite/db/SupportSQLiteDatabase; +HSPLnet/zetetic/database/sqlcipher/SupportHelper;->setWriteAheadLoggingEnabled(Z)V +Lnet/zetetic/database/sqlcipher/SupportHelper$1; +HSPLnet/zetetic/database/sqlcipher/SupportHelper$1;->(Lnet/zetetic/database/sqlcipher/SupportHelper;Landroid/content/Context;Ljava/lang/String;[BLnet/zetetic/database/sqlcipher/SQLiteDatabase$CursorFactory;IILnet/zetetic/database/DatabaseErrorHandler;Lnet/zetetic/database/sqlcipher/SQLiteDatabaseHook;ZLandroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration;)V +HSPLnet/zetetic/database/sqlcipher/SupportHelper$1;->onConfigure(Lnet/zetetic/database/sqlcipher/SQLiteDatabase;)V +HSPLnet/zetetic/database/sqlcipher/SupportHelper$1;->onCreate(Lnet/zetetic/database/sqlcipher/SQLiteDatabase;)V +HSPLnet/zetetic/database/sqlcipher/SupportHelper$1;->onOpen(Lnet/zetetic/database/sqlcipher/SQLiteDatabase;)V +Lnet/zetetic/database/sqlcipher/SupportOpenHelperFactory; +HSPLnet/zetetic/database/sqlcipher/SupportOpenHelperFactory;->([BLnet/zetetic/database/sqlcipher/SQLiteDatabaseHook;Z)V +HSPLnet/zetetic/database/sqlcipher/SupportOpenHelperFactory;->([BLnet/zetetic/database/sqlcipher/SQLiteDatabaseHook;ZI)V +HSPLnet/zetetic/database/sqlcipher/SupportOpenHelperFactory;->create(Landroidx/sqlite/db/SupportSQLiteOpenHelper$Configuration;)Landroidx/sqlite/db/SupportSQLiteOpenHelper; +Lokhttp3/Authenticator; +HSPLokhttp3/Authenticator;->()V +Lokhttp3/Authenticator$Companion; +HSPLokhttp3/Authenticator$Companion;->()V +HSPLokhttp3/Authenticator$Companion;->()V +Lokhttp3/Authenticator$Companion$AuthenticatorNone; +HSPLokhttp3/Authenticator$Companion$AuthenticatorNone;->()V +Lokhttp3/Cache; +Lokhttp3/Call$Factory; +Lokhttp3/CertificatePinner; +HSPLokhttp3/CertificatePinner;->()V +HSPLokhttp3/CertificatePinner;->(Ljava/util/Set;Lokhttp3/internal/tls/CertificateChainCleaner;)V +HSPLokhttp3/CertificatePinner;->(Ljava/util/Set;Lokhttp3/internal/tls/CertificateChainCleaner;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLokhttp3/CertificatePinner;->withCertificateChainCleaner$okhttp(Lokhttp3/internal/tls/CertificateChainCleaner;)Lokhttp3/CertificatePinner; +Lokhttp3/CertificatePinner$Builder; +HSPLokhttp3/CertificatePinner$Builder;->()V +HSPLokhttp3/CertificatePinner$Builder;->build()Lokhttp3/CertificatePinner; +Lokhttp3/CertificatePinner$Companion; +HSPLokhttp3/CertificatePinner$Companion;->()V +HSPLokhttp3/CertificatePinner$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lokhttp3/CipherSuite; +HSPLokhttp3/CipherSuite;->()V +HSPLokhttp3/CipherSuite;->(Ljava/lang/String;)V +HSPLokhttp3/CipherSuite;->(Ljava/lang/String;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLokhttp3/CipherSuite;->access$getINSTANCES$cp()Ljava/util/Map; +HSPLokhttp3/CipherSuite;->javaName()Ljava/lang/String; +Lokhttp3/CipherSuite$Companion; +HSPLokhttp3/CipherSuite$Companion;->()V +HSPLokhttp3/CipherSuite$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLokhttp3/CipherSuite$Companion;->access$init(Lokhttp3/CipherSuite$Companion;Ljava/lang/String;I)Lokhttp3/CipherSuite; +HSPLokhttp3/CipherSuite$Companion;->init(Ljava/lang/String;I)Lokhttp3/CipherSuite; +Lokhttp3/CipherSuite$Companion$ORDER_BY_NAME$1; +HSPLokhttp3/CipherSuite$Companion$ORDER_BY_NAME$1;->()V +Lokhttp3/ConnectionPool; +HSPLokhttp3/ConnectionPool;->()V +HSPLokhttp3/ConnectionPool;->(IJLjava/util/concurrent/TimeUnit;)V +HSPLokhttp3/ConnectionPool;->(Lokhttp3/internal/connection/RealConnectionPool;)V +Lokhttp3/ConnectionSpec; +HSPLokhttp3/ConnectionSpec;->()V +HSPLokhttp3/ConnectionSpec;->(ZZ[Ljava/lang/String;[Ljava/lang/String;)V +HSPLokhttp3/ConnectionSpec;->isTls()Z +Lokhttp3/ConnectionSpec$Builder; +HSPLokhttp3/ConnectionSpec$Builder;->(Z)V +HSPLokhttp3/ConnectionSpec$Builder;->build()Lokhttp3/ConnectionSpec; +HSPLokhttp3/ConnectionSpec$Builder;->cipherSuites([Ljava/lang/String;)Lokhttp3/ConnectionSpec$Builder; +HSPLokhttp3/ConnectionSpec$Builder;->cipherSuites([Lokhttp3/CipherSuite;)Lokhttp3/ConnectionSpec$Builder; +HSPLokhttp3/ConnectionSpec$Builder;->supportsTlsExtensions(Z)Lokhttp3/ConnectionSpec$Builder; +HSPLokhttp3/ConnectionSpec$Builder;->tlsVersions([Ljava/lang/String;)Lokhttp3/ConnectionSpec$Builder; +HSPLokhttp3/ConnectionSpec$Builder;->tlsVersions([Lokhttp3/TlsVersion;)Lokhttp3/ConnectionSpec$Builder; +Lokhttp3/ConnectionSpec$Companion; +HSPLokhttp3/ConnectionSpec$Companion;->()V +HSPLokhttp3/ConnectionSpec$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lokhttp3/CookieJar; +HSPLokhttp3/CookieJar;->()V +Lokhttp3/CookieJar$Companion; +HSPLokhttp3/CookieJar$Companion;->()V +HSPLokhttp3/CookieJar$Companion;->()V +Lokhttp3/CookieJar$Companion$NoCookies; +HSPLokhttp3/CookieJar$Companion$NoCookies;->()V +Lokhttp3/Dispatcher; +HSPLokhttp3/Dispatcher;->()V +Lokhttp3/Dns; +HSPLokhttp3/Dns;->()V +Lokhttp3/Dns$Companion; +HSPLokhttp3/Dns$Companion;->()V +HSPLokhttp3/Dns$Companion;->()V +Lokhttp3/Dns$Companion$DnsSystem; +HSPLokhttp3/Dns$Companion$DnsSystem;->()V +Lokhttp3/EventListener; +HSPLokhttp3/EventListener;->()V +HSPLokhttp3/EventListener;->()V +Lokhttp3/EventListener$Companion; +HSPLokhttp3/EventListener$Companion;->()V +HSPLokhttp3/EventListener$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lokhttp3/EventListener$Companion$NONE$1; +HSPLokhttp3/EventListener$Companion$NONE$1;->()V +Lokhttp3/EventListener$Factory; +Lokhttp3/Headers; +HSPLokhttp3/Headers;->()V +HSPLokhttp3/Headers;->([Ljava/lang/String;)V +HSPLokhttp3/Headers;->([Ljava/lang/String;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lokhttp3/Headers$Companion; +HSPLokhttp3/Headers$Companion;->()V +HSPLokhttp3/Headers$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLokhttp3/Headers$Companion;->of([Ljava/lang/String;)Lokhttp3/Headers; +Lokhttp3/Interceptor; +Lokhttp3/MediaType; +Lokhttp3/OkHttpClient; +HSPLokhttp3/OkHttpClient;->()V +HSPLokhttp3/OkHttpClient;->(Lokhttp3/OkHttpClient$Builder;)V +HSPLokhttp3/OkHttpClient;->access$getDEFAULT_CONNECTION_SPECS$cp()Ljava/util/List; +HSPLokhttp3/OkHttpClient;->access$getDEFAULT_PROTOCOLS$cp()Ljava/util/List; +HSPLokhttp3/OkHttpClient;->verifyClientState()V +Lokhttp3/OkHttpClient$Builder; +HSPLokhttp3/OkHttpClient$Builder;->()V +HSPLokhttp3/OkHttpClient$Builder;->addInterceptor(Lokhttp3/Interceptor;)Lokhttp3/OkHttpClient$Builder; +HSPLokhttp3/OkHttpClient$Builder;->build()Lokhttp3/OkHttpClient; +HSPLokhttp3/OkHttpClient$Builder;->getAuthenticator$okhttp()Lokhttp3/Authenticator; +HSPLokhttp3/OkHttpClient$Builder;->getCache$okhttp()Lokhttp3/Cache; +HSPLokhttp3/OkHttpClient$Builder;->getCallTimeout$okhttp()I +HSPLokhttp3/OkHttpClient$Builder;->getCertificatePinner$okhttp()Lokhttp3/CertificatePinner; +HSPLokhttp3/OkHttpClient$Builder;->getConnectTimeout$okhttp()I +HSPLokhttp3/OkHttpClient$Builder;->getConnectionPool$okhttp()Lokhttp3/ConnectionPool; +HSPLokhttp3/OkHttpClient$Builder;->getConnectionSpecs$okhttp()Ljava/util/List; +HSPLokhttp3/OkHttpClient$Builder;->getCookieJar$okhttp()Lokhttp3/CookieJar; +HSPLokhttp3/OkHttpClient$Builder;->getDispatcher$okhttp()Lokhttp3/Dispatcher; +HSPLokhttp3/OkHttpClient$Builder;->getDns$okhttp()Lokhttp3/Dns; +HSPLokhttp3/OkHttpClient$Builder;->getEventListenerFactory$okhttp()Lokhttp3/EventListener$Factory; +HSPLokhttp3/OkHttpClient$Builder;->getFollowRedirects$okhttp()Z +HSPLokhttp3/OkHttpClient$Builder;->getFollowSslRedirects$okhttp()Z +HSPLokhttp3/OkHttpClient$Builder;->getHostnameVerifier$okhttp()Ljavax/net/ssl/HostnameVerifier; +HSPLokhttp3/OkHttpClient$Builder;->getInterceptors$okhttp()Ljava/util/List; +HSPLokhttp3/OkHttpClient$Builder;->getMinWebSocketMessageToCompress$okhttp()J +HSPLokhttp3/OkHttpClient$Builder;->getNetworkInterceptors$okhttp()Ljava/util/List; +HSPLokhttp3/OkHttpClient$Builder;->getPingInterval$okhttp()I +HSPLokhttp3/OkHttpClient$Builder;->getProtocols$okhttp()Ljava/util/List; +HSPLokhttp3/OkHttpClient$Builder;->getProxy$okhttp()Ljava/net/Proxy; +HSPLokhttp3/OkHttpClient$Builder;->getProxyAuthenticator$okhttp()Lokhttp3/Authenticator; +HSPLokhttp3/OkHttpClient$Builder;->getProxySelector$okhttp()Ljava/net/ProxySelector; +HSPLokhttp3/OkHttpClient$Builder;->getReadTimeout$okhttp()I +HSPLokhttp3/OkHttpClient$Builder;->getRetryOnConnectionFailure$okhttp()Z +HSPLokhttp3/OkHttpClient$Builder;->getRouteDatabase$okhttp()Lokhttp3/internal/connection/RouteDatabase; +HSPLokhttp3/OkHttpClient$Builder;->getSocketFactory$okhttp()Ljavax/net/SocketFactory; +HSPLokhttp3/OkHttpClient$Builder;->getSslSocketFactoryOrNull$okhttp()Ljavax/net/ssl/SSLSocketFactory; +HSPLokhttp3/OkHttpClient$Builder;->getWriteTimeout$okhttp()I +Lokhttp3/OkHttpClient$Companion; +HSPLokhttp3/OkHttpClient$Companion;->()V +HSPLokhttp3/OkHttpClient$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLokhttp3/OkHttpClient$Companion;->getDEFAULT_CONNECTION_SPECS$okhttp()Ljava/util/List; +HSPLokhttp3/OkHttpClient$Companion;->getDEFAULT_PROTOCOLS$okhttp()Ljava/util/List; +Lokhttp3/Protocol; +HSPLokhttp3/Protocol;->$values()[Lokhttp3/Protocol; +HSPLokhttp3/Protocol;->()V +HSPLokhttp3/Protocol;->(Ljava/lang/String;ILjava/lang/String;)V +Lokhttp3/Protocol$Companion; +HSPLokhttp3/Protocol$Companion;->()V +HSPLokhttp3/Protocol$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lokhttp3/RequestBody; +HSPLokhttp3/RequestBody;->()V +HSPLokhttp3/RequestBody;->()V +Lokhttp3/RequestBody$Companion; +HSPLokhttp3/RequestBody$Companion;->()V +HSPLokhttp3/RequestBody$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLokhttp3/RequestBody$Companion;->create$default(Lokhttp3/RequestBody$Companion;[BLokhttp3/MediaType;IIILjava/lang/Object;)Lokhttp3/RequestBody; +HSPLokhttp3/RequestBody$Companion;->create([BLokhttp3/MediaType;II)Lokhttp3/RequestBody; +Lokhttp3/RequestBody$Companion$toRequestBody$2; +HSPLokhttp3/RequestBody$Companion$toRequestBody$2;->(Lokhttp3/MediaType;I[BI)V +Lokhttp3/ResponseBody; +HSPLokhttp3/ResponseBody;->()V +HSPLokhttp3/ResponseBody;->()V +Lokhttp3/ResponseBody$Companion; +HSPLokhttp3/ResponseBody$Companion;->()V +HSPLokhttp3/ResponseBody$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLokhttp3/ResponseBody$Companion;->create$default(Lokhttp3/ResponseBody$Companion;[BLokhttp3/MediaType;ILjava/lang/Object;)Lokhttp3/ResponseBody; +HSPLokhttp3/ResponseBody$Companion;->create(Lokio/BufferedSource;Lokhttp3/MediaType;J)Lokhttp3/ResponseBody; +HSPLokhttp3/ResponseBody$Companion;->create([BLokhttp3/MediaType;)Lokhttp3/ResponseBody; +Lokhttp3/ResponseBody$Companion$asResponseBody$1; +HSPLokhttp3/ResponseBody$Companion$asResponseBody$1;->(Lokhttp3/MediaType;JLokio/BufferedSource;)V +Lokhttp3/TlsVersion; +HSPLokhttp3/TlsVersion;->$values()[Lokhttp3/TlsVersion; +HSPLokhttp3/TlsVersion;->()V +HSPLokhttp3/TlsVersion;->(Ljava/lang/String;ILjava/lang/String;)V +HSPLokhttp3/TlsVersion;->javaName()Ljava/lang/String; +Lokhttp3/TlsVersion$Companion; +HSPLokhttp3/TlsVersion$Companion;->()V +HSPLokhttp3/TlsVersion$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lokhttp3/WebSocket$Factory; +Lokhttp3/internal/Util; +HSPLokhttp3/internal/Util;->()V +HSPLokhttp3/internal/Util;->asFactory(Lokhttp3/EventListener;)Lokhttp3/EventListener$Factory; +HSPLokhttp3/internal/Util;->checkOffsetAndCount(JJJ)V +HSPLokhttp3/internal/Util;->immutableListOf([Ljava/lang/Object;)Ljava/util/List; +HSPLokhttp3/internal/Util;->threadFactory(Ljava/lang/String;Z)Ljava/util/concurrent/ThreadFactory; +HSPLokhttp3/internal/Util;->toImmutableList(Ljava/util/List;)Ljava/util/List; +Lokhttp3/internal/Util$$ExternalSyntheticLambda0; +HSPLokhttp3/internal/Util$$ExternalSyntheticLambda0;->(Ljava/lang/String;Z)V +Lokhttp3/internal/Util$$ExternalSyntheticLambda1; +HSPLokhttp3/internal/Util$$ExternalSyntheticLambda1;->(Lokhttp3/EventListener;)V +Lokhttp3/internal/authenticator/JavaNetAuthenticator; +HSPLokhttp3/internal/authenticator/JavaNetAuthenticator;->(Lokhttp3/Dns;)V +HSPLokhttp3/internal/authenticator/JavaNetAuthenticator;->(Lokhttp3/Dns;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +Lokhttp3/internal/concurrent/Task; +HSPLokhttp3/internal/concurrent/Task;->(Ljava/lang/String;Z)V +HSPLokhttp3/internal/concurrent/Task;->(Ljava/lang/String;ZILkotlin/jvm/internal/DefaultConstructorMarker;)V +Lokhttp3/internal/concurrent/TaskQueue; +HSPLokhttp3/internal/concurrent/TaskQueue;->(Lokhttp3/internal/concurrent/TaskRunner;Ljava/lang/String;)V +Lokhttp3/internal/concurrent/TaskRunner; +HSPLokhttp3/internal/concurrent/TaskRunner;->()V +HSPLokhttp3/internal/concurrent/TaskRunner;->(Lokhttp3/internal/concurrent/TaskRunner$Backend;)V +HSPLokhttp3/internal/concurrent/TaskRunner;->newQueue()Lokhttp3/internal/concurrent/TaskQueue; +Lokhttp3/internal/concurrent/TaskRunner$Backend; +Lokhttp3/internal/concurrent/TaskRunner$Companion; +HSPLokhttp3/internal/concurrent/TaskRunner$Companion;->()V +HSPLokhttp3/internal/concurrent/TaskRunner$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lokhttp3/internal/concurrent/TaskRunner$RealBackend; +HSPLokhttp3/internal/concurrent/TaskRunner$RealBackend;->(Ljava/util/concurrent/ThreadFactory;)V +Lokhttp3/internal/concurrent/TaskRunner$runnable$1; +HSPLokhttp3/internal/concurrent/TaskRunner$runnable$1;->(Lokhttp3/internal/concurrent/TaskRunner;)V +Lokhttp3/internal/connection/RealConnectionPool; +HSPLokhttp3/internal/connection/RealConnectionPool;->()V +HSPLokhttp3/internal/connection/RealConnectionPool;->(Lokhttp3/internal/concurrent/TaskRunner;IJLjava/util/concurrent/TimeUnit;)V +Lokhttp3/internal/connection/RealConnectionPool$Companion; +HSPLokhttp3/internal/connection/RealConnectionPool$Companion;->()V +HSPLokhttp3/internal/connection/RealConnectionPool$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lokhttp3/internal/connection/RealConnectionPool$cleanupTask$1; +HSPLokhttp3/internal/connection/RealConnectionPool$cleanupTask$1;->(Lokhttp3/internal/connection/RealConnectionPool;Ljava/lang/String;)V +Lokhttp3/internal/connection/RouteDatabase; +HSPLokhttp3/internal/connection/RouteDatabase;->()V +Lokhttp3/internal/http2/Http2; +Lokhttp3/internal/platform/Android10Platform; +HSPLokhttp3/internal/platform/Android10Platform;->()V +HSPLokhttp3/internal/platform/Android10Platform;->()V +HSPLokhttp3/internal/platform/Android10Platform;->access$isSupported$cp()Z +HSPLokhttp3/internal/platform/Android10Platform;->buildCertificateChainCleaner(Ljavax/net/ssl/X509TrustManager;)Lokhttp3/internal/tls/CertificateChainCleaner; +Lokhttp3/internal/platform/Android10Platform$Companion; +HSPLokhttp3/internal/platform/Android10Platform$Companion;->()V +HSPLokhttp3/internal/platform/Android10Platform$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLokhttp3/internal/platform/Android10Platform$Companion;->buildIfSupported()Lokhttp3/internal/platform/Platform; +HSPLokhttp3/internal/platform/Android10Platform$Companion;->isSupported()Z +Lokhttp3/internal/platform/Platform; +HSPLokhttp3/internal/platform/Platform;->()V +HSPLokhttp3/internal/platform/Platform;->()V +HSPLokhttp3/internal/platform/Platform;->access$getPlatform$cp()Lokhttp3/internal/platform/Platform; +HSPLokhttp3/internal/platform/Platform;->newSSLContext()Ljavax/net/ssl/SSLContext; +HSPLokhttp3/internal/platform/Platform;->newSslSocketFactory(Ljavax/net/ssl/X509TrustManager;)Ljavax/net/ssl/SSLSocketFactory; +HSPLokhttp3/internal/platform/Platform;->platformTrustManager()Ljavax/net/ssl/X509TrustManager; +Lokhttp3/internal/platform/Platform$Companion; +HSPLokhttp3/internal/platform/Platform$Companion;->()V +HSPLokhttp3/internal/platform/Platform$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLokhttp3/internal/platform/Platform$Companion;->access$findPlatform(Lokhttp3/internal/platform/Platform$Companion;)Lokhttp3/internal/platform/Platform; +HSPLokhttp3/internal/platform/Platform$Companion;->findAndroidPlatform()Lokhttp3/internal/platform/Platform; +HSPLokhttp3/internal/platform/Platform$Companion;->findPlatform()Lokhttp3/internal/platform/Platform; +HSPLokhttp3/internal/platform/Platform$Companion;->get()Lokhttp3/internal/platform/Platform; +HSPLokhttp3/internal/platform/Platform$Companion;->isAndroid()Z +Lokhttp3/internal/platform/android/Android10SocketAdapter; +HSPLokhttp3/internal/platform/android/Android10SocketAdapter;->()V +HSPLokhttp3/internal/platform/android/Android10SocketAdapter;->()V +HSPLokhttp3/internal/platform/android/Android10SocketAdapter;->isSupported()Z +Lokhttp3/internal/platform/android/Android10SocketAdapter$Companion; +HSPLokhttp3/internal/platform/android/Android10SocketAdapter$Companion;->()V +HSPLokhttp3/internal/platform/android/Android10SocketAdapter$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLokhttp3/internal/platform/android/Android10SocketAdapter$Companion;->buildIfSupported()Lokhttp3/internal/platform/android/SocketAdapter; +HSPLokhttp3/internal/platform/android/Android10SocketAdapter$Companion;->isSupported()Z +Lokhttp3/internal/platform/android/AndroidCertificateChainCleaner; +HSPLokhttp3/internal/platform/android/AndroidCertificateChainCleaner;->()V +HSPLokhttp3/internal/platform/android/AndroidCertificateChainCleaner;->(Ljavax/net/ssl/X509TrustManager;Landroid/net/http/X509TrustManagerExtensions;)V +Lokhttp3/internal/platform/android/AndroidCertificateChainCleaner$Companion; +HSPLokhttp3/internal/platform/android/AndroidCertificateChainCleaner$Companion;->()V +HSPLokhttp3/internal/platform/android/AndroidCertificateChainCleaner$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLokhttp3/internal/platform/android/AndroidCertificateChainCleaner$Companion;->buildIfSupported(Ljavax/net/ssl/X509TrustManager;)Lokhttp3/internal/platform/android/AndroidCertificateChainCleaner; +Lokhttp3/internal/platform/android/AndroidLog; +HSPLokhttp3/internal/platform/android/AndroidLog;->()V +HSPLokhttp3/internal/platform/android/AndroidLog;->()V +HSPLokhttp3/internal/platform/android/AndroidLog;->enable()V +HSPLokhttp3/internal/platform/android/AndroidLog;->enableLogging(Ljava/lang/String;Ljava/lang/String;)V +Lokhttp3/internal/platform/android/AndroidLogHandler; +HSPLokhttp3/internal/platform/android/AndroidLogHandler;->()V +HSPLokhttp3/internal/platform/android/AndroidLogHandler;->()V +Lokhttp3/internal/platform/android/AndroidSocketAdapter; +HSPLokhttp3/internal/platform/android/AndroidSocketAdapter;->()V +HSPLokhttp3/internal/platform/android/AndroidSocketAdapter;->access$getPlayProviderFactory$cp()Lokhttp3/internal/platform/android/DeferredSocketAdapter$Factory; +Lokhttp3/internal/platform/android/AndroidSocketAdapter$Companion; +HSPLokhttp3/internal/platform/android/AndroidSocketAdapter$Companion;->()V +HSPLokhttp3/internal/platform/android/AndroidSocketAdapter$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLokhttp3/internal/platform/android/AndroidSocketAdapter$Companion;->factory(Ljava/lang/String;)Lokhttp3/internal/platform/android/DeferredSocketAdapter$Factory; +HSPLokhttp3/internal/platform/android/AndroidSocketAdapter$Companion;->getPlayProviderFactory()Lokhttp3/internal/platform/android/DeferredSocketAdapter$Factory; +Lokhttp3/internal/platform/android/AndroidSocketAdapter$Companion$factory$1; +HSPLokhttp3/internal/platform/android/AndroidSocketAdapter$Companion$factory$1;->(Ljava/lang/String;)V +Lokhttp3/internal/platform/android/BouncyCastleSocketAdapter; +HSPLokhttp3/internal/platform/android/BouncyCastleSocketAdapter;->()V +HSPLokhttp3/internal/platform/android/BouncyCastleSocketAdapter;->access$getFactory$cp()Lokhttp3/internal/platform/android/DeferredSocketAdapter$Factory; +Lokhttp3/internal/platform/android/BouncyCastleSocketAdapter$Companion; +HSPLokhttp3/internal/platform/android/BouncyCastleSocketAdapter$Companion;->()V +HSPLokhttp3/internal/platform/android/BouncyCastleSocketAdapter$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLokhttp3/internal/platform/android/BouncyCastleSocketAdapter$Companion;->getFactory()Lokhttp3/internal/platform/android/DeferredSocketAdapter$Factory; +Lokhttp3/internal/platform/android/BouncyCastleSocketAdapter$Companion$factory$1; +HSPLokhttp3/internal/platform/android/BouncyCastleSocketAdapter$Companion$factory$1;->()V +Lokhttp3/internal/platform/android/ConscryptSocketAdapter; +HSPLokhttp3/internal/platform/android/ConscryptSocketAdapter;->()V +HSPLokhttp3/internal/platform/android/ConscryptSocketAdapter;->access$getFactory$cp()Lokhttp3/internal/platform/android/DeferredSocketAdapter$Factory; +Lokhttp3/internal/platform/android/ConscryptSocketAdapter$Companion; +HSPLokhttp3/internal/platform/android/ConscryptSocketAdapter$Companion;->()V +HSPLokhttp3/internal/platform/android/ConscryptSocketAdapter$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLokhttp3/internal/platform/android/ConscryptSocketAdapter$Companion;->getFactory()Lokhttp3/internal/platform/android/DeferredSocketAdapter$Factory; +Lokhttp3/internal/platform/android/ConscryptSocketAdapter$Companion$factory$1; +HSPLokhttp3/internal/platform/android/ConscryptSocketAdapter$Companion$factory$1;->()V +Lokhttp3/internal/platform/android/DeferredSocketAdapter; +HSPLokhttp3/internal/platform/android/DeferredSocketAdapter;->(Lokhttp3/internal/platform/android/DeferredSocketAdapter$Factory;)V +HSPLokhttp3/internal/platform/android/DeferredSocketAdapter;->isSupported()Z +Lokhttp3/internal/platform/android/DeferredSocketAdapter$Factory; +Lokhttp3/internal/platform/android/SocketAdapter; +Lokhttp3/internal/tls/CertificateChainCleaner; +HSPLokhttp3/internal/tls/CertificateChainCleaner;->()V +HSPLokhttp3/internal/tls/CertificateChainCleaner;->()V +Lokhttp3/internal/tls/CertificateChainCleaner$Companion; +HSPLokhttp3/internal/tls/CertificateChainCleaner$Companion;->()V +HSPLokhttp3/internal/tls/CertificateChainCleaner$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLokhttp3/internal/tls/CertificateChainCleaner$Companion;->get(Ljavax/net/ssl/X509TrustManager;)Lokhttp3/internal/tls/CertificateChainCleaner; +Lokhttp3/internal/tls/OkHostnameVerifier; +HSPLokhttp3/internal/tls/OkHostnameVerifier;->()V +HSPLokhttp3/internal/tls/OkHostnameVerifier;->()V +Lokhttp3/logging/HttpLoggingInterceptor; +HSPLokhttp3/logging/HttpLoggingInterceptor;->(Lokhttp3/logging/HttpLoggingInterceptor$Logger;)V +HSPLokhttp3/logging/HttpLoggingInterceptor;->level(Lokhttp3/logging/HttpLoggingInterceptor$Level;)V +Lokhttp3/logging/HttpLoggingInterceptor$Level; +HSPLokhttp3/logging/HttpLoggingInterceptor$Level;->$values()[Lokhttp3/logging/HttpLoggingInterceptor$Level; +HSPLokhttp3/logging/HttpLoggingInterceptor$Level;->()V +HSPLokhttp3/logging/HttpLoggingInterceptor$Level;->(Ljava/lang/String;I)V +Lokhttp3/logging/HttpLoggingInterceptor$Logger; +Lokio/-SegmentedByteString; +HSPLokio/-SegmentedByteString;->()V +HSPLokio/-SegmentedByteString;->arrayRangeEquals([BI[BII)Z +HSPLokio/-SegmentedByteString;->checkOffsetAndCount(JJJ)V +Lokio/Buffer; +HSPLokio/Buffer;->()V +HSPLokio/Buffer;->exhausted()Z +HSPLokio/Buffer;->read(Lokio/Buffer;J)J +HSPLokio/Buffer;->readInt()I +HSPLokio/Buffer;->setSize$okio(J)V +HSPLokio/Buffer;->size()J +HSPLokio/Buffer;->writableSegment$okio(I)Lokio/Segment; +HSPLokio/Buffer;->write(Lokio/Buffer;J)V +HSPLokio/Buffer;->write([B)Lokio/Buffer; +HSPLokio/Buffer;->write([BII)Lokio/Buffer; +HSPLokio/Buffer;->writeAll(Lokio/Source;)J +HSPLokio/Buffer;->writeInt(I)Lokio/Buffer; +Lokio/Buffer$UnsafeCursor; +HSPLokio/Buffer$UnsafeCursor;->()V +Lokio/BufferedSink; +Lokio/BufferedSource; +Lokio/ByteString; +HSPLokio/ByteString;->()V +HSPLokio/ByteString;->([B)V +HSPLokio/ByteString;->compareTo(Ljava/lang/Object;)I +HSPLokio/ByteString;->compareTo(Lokio/ByteString;)I +HSPLokio/ByteString;->getByte(I)B +HSPLokio/ByteString;->getData$okio()[B +HSPLokio/ByteString;->getSize$okio()I +HSPLokio/ByteString;->internalGet$okio(I)B +HSPLokio/ByteString;->rangeEquals(ILokio/ByteString;II)Z +HSPLokio/ByteString;->rangeEquals(I[BII)Z +HSPLokio/ByteString;->size()I +HSPLokio/ByteString;->startsWith(Lokio/ByteString;)Z +Lokio/ByteString$Companion; +HSPLokio/ByteString$Companion;->()V +HSPLokio/ByteString$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLokio/ByteString$Companion;->decodeHex(Ljava/lang/String;)Lokio/ByteString; +Lokio/Options; +HSPLokio/Options;->()V +HSPLokio/Options;->([Lokio/ByteString;[I)V +HSPLokio/Options;->([Lokio/ByteString;[ILkotlin/jvm/internal/DefaultConstructorMarker;)V +Lokio/Options$Companion; +HSPLokio/Options$Companion;->()V +HSPLokio/Options$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLokio/Options$Companion;->buildTrieRecursive$default(Lokio/Options$Companion;JLokio/Buffer;ILjava/util/List;IILjava/util/List;ILjava/lang/Object;)V +HSPLokio/Options$Companion;->buildTrieRecursive(JLokio/Buffer;ILjava/util/List;IILjava/util/List;)V +HSPLokio/Options$Companion;->getIntCount(Lokio/Buffer;)J +HSPLokio/Options$Companion;->of([Lokio/ByteString;)Lokio/Options; +Lokio/Segment; +HSPLokio/Segment;->()V +HSPLokio/Segment;->()V +HSPLokio/Segment;->([BIIZZ)V +HSPLokio/Segment;->compact()V +HSPLokio/Segment;->pop()Lokio/Segment; +HSPLokio/Segment;->push(Lokio/Segment;)Lokio/Segment; +HSPLokio/Segment;->writeTo(Lokio/Segment;I)V +Lokio/Segment$Companion; +HSPLokio/Segment$Companion;->()V +HSPLokio/Segment$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lokio/SegmentPool; +HSPLokio/SegmentPool;->()V +HSPLokio/SegmentPool;->()V +HSPLokio/SegmentPool;->firstRef()Ljava/util/concurrent/atomic/AtomicReference; +HSPLokio/SegmentPool;->recycle(Lokio/Segment;)V +HSPLokio/SegmentPool;->take()Lokio/Segment; +Lokio/Sink; +Lokio/Source; +Lokio/internal/-ByteString; +HSPLokio/internal/-ByteString;->()V +HSPLokio/internal/-ByteString;->access$decodeHexDigit(C)I +HSPLokio/internal/-ByteString;->decodeHexDigit(C)I +Lorg/apache/commons/codec/BinaryDecoder; +Lorg/apache/commons/codec/BinaryEncoder; +Lorg/apache/commons/codec/CodecPolicy; +HSPLorg/apache/commons/codec/CodecPolicy;->()V +HSPLorg/apache/commons/codec/CodecPolicy;->(Ljava/lang/String;I)V +Lorg/apache/commons/codec/Decoder; +Lorg/apache/commons/codec/Encoder; +Lorg/apache/commons/codec/binary/Base32; +HSPLorg/apache/commons/codec/binary/Base32;->()V +HSPLorg/apache/commons/codec/binary/Base32;->()V +HSPLorg/apache/commons/codec/binary/Base32;->(I[BZB)V +HSPLorg/apache/commons/codec/binary/Base32;->(I[BZBLorg/apache/commons/codec/CodecPolicy;)V +HSPLorg/apache/commons/codec/binary/Base32;->(Z)V +HSPLorg/apache/commons/codec/binary/Base32;->isInAlphabet(B)Z +Lorg/apache/commons/codec/binary/Base64; +HSPLorg/apache/commons/codec/binary/Base64;->()V +HSPLorg/apache/commons/codec/binary/Base64;->()V +HSPLorg/apache/commons/codec/binary/Base64;->(I)V +HSPLorg/apache/commons/codec/binary/Base64;->(I[B)V +HSPLorg/apache/commons/codec/binary/Base64;->(I[BZ)V +HSPLorg/apache/commons/codec/binary/Base64;->(I[BZLorg/apache/commons/codec/CodecPolicy;)V +HSPLorg/apache/commons/codec/binary/Base64;->decode([BIILorg/apache/commons/codec/binary/BaseNCodec$Context;)V +HSPLorg/apache/commons/codec/binary/Base64;->encode([BIILorg/apache/commons/codec/binary/BaseNCodec$Context;)V +HSPLorg/apache/commons/codec/binary/Base64;->isInAlphabet(B)Z +HSPLorg/apache/commons/codec/binary/Base64;->validateCharacter(ILorg/apache/commons/codec/binary/BaseNCodec$Context;)V +Lorg/apache/commons/codec/binary/BaseNCodec; +HSPLorg/apache/commons/codec/binary/BaseNCodec;->()V +HSPLorg/apache/commons/codec/binary/BaseNCodec;->(IIIIBLorg/apache/commons/codec/CodecPolicy;)V +HSPLorg/apache/commons/codec/binary/BaseNCodec;->available(Lorg/apache/commons/codec/binary/BaseNCodec$Context;)I +HSPLorg/apache/commons/codec/binary/BaseNCodec;->containsAlphabetOrPad([B)Z +HSPLorg/apache/commons/codec/binary/BaseNCodec;->decode([B)[B +HSPLorg/apache/commons/codec/binary/BaseNCodec;->encode([B)[B +HSPLorg/apache/commons/codec/binary/BaseNCodec;->encode([BII)[B +HSPLorg/apache/commons/codec/binary/BaseNCodec;->ensureBufferSize(ILorg/apache/commons/codec/binary/BaseNCodec$Context;)[B +HSPLorg/apache/commons/codec/binary/BaseNCodec;->getDefaultBufferSize()I +HSPLorg/apache/commons/codec/binary/BaseNCodec;->hasData(Lorg/apache/commons/codec/binary/BaseNCodec$Context;)Z +HSPLorg/apache/commons/codec/binary/BaseNCodec;->isStrictDecoding()Z +HSPLorg/apache/commons/codec/binary/BaseNCodec;->readResults([BIILorg/apache/commons/codec/binary/BaseNCodec$Context;)I +Lorg/apache/commons/codec/binary/BaseNCodec$Context; +HSPLorg/apache/commons/codec/binary/BaseNCodec$Context;->()V +Lorg/apache/commons/codec/binary/BinaryCodec; +HSPLorg/apache/commons/codec/binary/BinaryCodec;->()V +HSPLorg/apache/commons/codec/binary/BinaryCodec;->isEmpty([B)Z +Lorg/bouncycastle/asn1/ASN1Encodable; +Lorg/bouncycastle/asn1/ASN1Object; +HSPLorg/bouncycastle/asn1/ASN1Object;->()V +Lorg/bouncycastle/asn1/ASN1ObjectIdentifier; +HSPLorg/bouncycastle/asn1/ASN1ObjectIdentifier;->()V +HSPLorg/bouncycastle/asn1/ASN1ObjectIdentifier;->(Ljava/lang/String;)V +HSPLorg/bouncycastle/asn1/ASN1ObjectIdentifier;->(Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;Ljava/lang/String;)V +HSPLorg/bouncycastle/asn1/ASN1ObjectIdentifier;->branch(Ljava/lang/String;)Lorg/bouncycastle/asn1/ASN1ObjectIdentifier; +HSPLorg/bouncycastle/asn1/ASN1ObjectIdentifier;->doOutput(Ljava/io/ByteArrayOutputStream;)V +HSPLorg/bouncycastle/asn1/ASN1ObjectIdentifier;->getContents()[B +HSPLorg/bouncycastle/asn1/ASN1ObjectIdentifier;->getId()Ljava/lang/String; +HSPLorg/bouncycastle/asn1/ASN1ObjectIdentifier;->hashCode()I +HSPLorg/bouncycastle/asn1/ASN1ObjectIdentifier;->intern()Lorg/bouncycastle/asn1/ASN1ObjectIdentifier; +HSPLorg/bouncycastle/asn1/ASN1ObjectIdentifier;->isValidIdentifier(Ljava/lang/String;)Z +HSPLorg/bouncycastle/asn1/ASN1ObjectIdentifier;->toString()Ljava/lang/String; +Lorg/bouncycastle/asn1/ASN1ObjectIdentifier$1; +HSPLorg/bouncycastle/asn1/ASN1ObjectIdentifier$1;->(Ljava/lang/Class;I)V +Lorg/bouncycastle/asn1/ASN1ObjectIdentifier$OidHandle; +HSPLorg/bouncycastle/asn1/ASN1ObjectIdentifier$OidHandle;->([B)V +HSPLorg/bouncycastle/asn1/ASN1ObjectIdentifier$OidHandle;->hashCode()I +Lorg/bouncycastle/asn1/ASN1Primitive; +HSPLorg/bouncycastle/asn1/ASN1Primitive;->()V +Lorg/bouncycastle/asn1/ASN1RelativeOID; +HSPLorg/bouncycastle/asn1/ASN1RelativeOID;->()V +HSPLorg/bouncycastle/asn1/ASN1RelativeOID;->isValidIdentifier(Ljava/lang/String;I)Z +HSPLorg/bouncycastle/asn1/ASN1RelativeOID;->writeField(Ljava/io/ByteArrayOutputStream;J)V +Lorg/bouncycastle/asn1/ASN1RelativeOID$1; +HSPLorg/bouncycastle/asn1/ASN1RelativeOID$1;->(Ljava/lang/Class;I)V +Lorg/bouncycastle/asn1/ASN1Tag; +HSPLorg/bouncycastle/asn1/ASN1Tag;->(II)V +HSPLorg/bouncycastle/asn1/ASN1Tag;->create(II)Lorg/bouncycastle/asn1/ASN1Tag; +Lorg/bouncycastle/asn1/ASN1Type; +HSPLorg/bouncycastle/asn1/ASN1Type;->(Ljava/lang/Class;)V +Lorg/bouncycastle/asn1/ASN1UniversalType; +HSPLorg/bouncycastle/asn1/ASN1UniversalType;->(Ljava/lang/Class;I)V +Lorg/bouncycastle/asn1/OIDTokenizer; +HSPLorg/bouncycastle/asn1/OIDTokenizer;->(Ljava/lang/String;)V +HSPLorg/bouncycastle/asn1/OIDTokenizer;->hasMoreTokens()Z +HSPLorg/bouncycastle/asn1/OIDTokenizer;->nextToken()Ljava/lang/String; +Lorg/bouncycastle/asn1/bc/BCObjectIdentifiers; +HSPLorg/bouncycastle/asn1/bc/BCObjectIdentifiers;->()V +Lorg/bouncycastle/asn1/cryptopro/CryptoProObjectIdentifiers; +HSPLorg/bouncycastle/asn1/cryptopro/CryptoProObjectIdentifiers;->()V +Lorg/bouncycastle/asn1/edec/EdECObjectIdentifiers; +HSPLorg/bouncycastle/asn1/edec/EdECObjectIdentifiers;->()V +Lorg/bouncycastle/asn1/gm/GMObjectIdentifiers; +HSPLorg/bouncycastle/asn1/gm/GMObjectIdentifiers;->()V +Lorg/bouncycastle/asn1/gnu/GNUObjectIdentifiers; +HSPLorg/bouncycastle/asn1/gnu/GNUObjectIdentifiers;->()V +Lorg/bouncycastle/asn1/iana/IANAObjectIdentifiers; +HSPLorg/bouncycastle/asn1/iana/IANAObjectIdentifiers;->()V +Lorg/bouncycastle/asn1/isara/IsaraObjectIdentifiers; +HSPLorg/bouncycastle/asn1/isara/IsaraObjectIdentifiers;->()V +Lorg/bouncycastle/asn1/iso/ISOIECObjectIdentifiers; +HSPLorg/bouncycastle/asn1/iso/ISOIECObjectIdentifiers;->()V +Lorg/bouncycastle/asn1/kisa/KISAObjectIdentifiers; +HSPLorg/bouncycastle/asn1/kisa/KISAObjectIdentifiers;->()V +Lorg/bouncycastle/asn1/misc/MiscObjectIdentifiers; +HSPLorg/bouncycastle/asn1/misc/MiscObjectIdentifiers;->()V +Lorg/bouncycastle/asn1/nist/NISTObjectIdentifiers; +HSPLorg/bouncycastle/asn1/nist/NISTObjectIdentifiers;->()V +Lorg/bouncycastle/asn1/nsri/NSRIObjectIdentifiers; +HSPLorg/bouncycastle/asn1/nsri/NSRIObjectIdentifiers;->()V +Lorg/bouncycastle/asn1/ntt/NTTObjectIdentifiers; +HSPLorg/bouncycastle/asn1/ntt/NTTObjectIdentifiers;->()V +Lorg/bouncycastle/asn1/oiw/OIWObjectIdentifiers; +HSPLorg/bouncycastle/asn1/oiw/OIWObjectIdentifiers;->()V +Lorg/bouncycastle/asn1/pkcs/PKCSObjectIdentifiers; +HSPLorg/bouncycastle/asn1/pkcs/PKCSObjectIdentifiers;->()V +Lorg/bouncycastle/asn1/rosstandart/RosstandartObjectIdentifiers; +HSPLorg/bouncycastle/asn1/rosstandart/RosstandartObjectIdentifiers;->()V +Lorg/bouncycastle/asn1/sec/SECObjectIdentifiers; +HSPLorg/bouncycastle/asn1/sec/SECObjectIdentifiers;->()V +Lorg/bouncycastle/asn1/teletrust/TeleTrusTObjectIdentifiers; +HSPLorg/bouncycastle/asn1/teletrust/TeleTrusTObjectIdentifiers;->()V +Lorg/bouncycastle/asn1/ua/UAObjectIdentifiers; +HSPLorg/bouncycastle/asn1/ua/UAObjectIdentifiers;->()V +Lorg/bouncycastle/asn1/x509/X509ObjectIdentifiers; +HSPLorg/bouncycastle/asn1/x509/X509ObjectIdentifiers;->()V +Lorg/bouncycastle/asn1/x9/X9ECParameters; +Lorg/bouncycastle/asn1/x9/X9ObjectIdentifiers; +HSPLorg/bouncycastle/asn1/x9/X9ObjectIdentifiers;->()V +Lorg/bouncycastle/crypto/CipherParameters; +Lorg/bouncycastle/crypto/CryptoServiceConstraintsException; +Lorg/bouncycastle/crypto/CryptoServiceProperties; +Lorg/bouncycastle/crypto/CryptoServicePurpose; +HSPLorg/bouncycastle/crypto/CryptoServicePurpose;->()V +HSPLorg/bouncycastle/crypto/CryptoServicePurpose;->(Ljava/lang/String;I)V +Lorg/bouncycastle/crypto/CryptoServicesConstraints; +Lorg/bouncycastle/crypto/CryptoServicesPermission; +HSPLorg/bouncycastle/crypto/CryptoServicesPermission;->(Ljava/lang/String;)V +Lorg/bouncycastle/crypto/CryptoServicesRegistrar; +HSPLorg/bouncycastle/crypto/CryptoServicesRegistrar;->()V +HSPLorg/bouncycastle/crypto/CryptoServicesRegistrar;->checkConstraints(Lorg/bouncycastle/crypto/CryptoServiceProperties;)V +HSPLorg/bouncycastle/crypto/CryptoServicesRegistrar;->chooseLowerBound(I)I +HSPLorg/bouncycastle/crypto/CryptoServicesRegistrar;->getDefaultConstraints()Lorg/bouncycastle/crypto/CryptoServicesConstraints; +HSPLorg/bouncycastle/crypto/CryptoServicesRegistrar;->localSetGlobalProperty(Lorg/bouncycastle/crypto/CryptoServicesRegistrar$Property;[Ljava/lang/Object;)V +HSPLorg/bouncycastle/crypto/CryptoServicesRegistrar;->localSetThread(Lorg/bouncycastle/crypto/CryptoServicesRegistrar$Property;[Ljava/lang/Object;)V +HSPLorg/bouncycastle/crypto/CryptoServicesRegistrar;->toDH(Lorg/bouncycastle/crypto/params/DSAParameters;)Lorg/bouncycastle/crypto/params/DHParameters; +Lorg/bouncycastle/crypto/CryptoServicesRegistrar$1; +HSPLorg/bouncycastle/crypto/CryptoServicesRegistrar$1;->()V +HSPLorg/bouncycastle/crypto/CryptoServicesRegistrar$1;->check(Lorg/bouncycastle/crypto/CryptoServiceProperties;)V +Lorg/bouncycastle/crypto/CryptoServicesRegistrar$Property; +HSPLorg/bouncycastle/crypto/CryptoServicesRegistrar$Property;->()V +HSPLorg/bouncycastle/crypto/CryptoServicesRegistrar$Property;->(Ljava/lang/String;Ljava/lang/Class;)V +HSPLorg/bouncycastle/crypto/CryptoServicesRegistrar$Property;->access$100(Lorg/bouncycastle/crypto/CryptoServicesRegistrar$Property;)Ljava/lang/String; +HSPLorg/bouncycastle/crypto/CryptoServicesRegistrar$Property;->access$200(Lorg/bouncycastle/crypto/CryptoServicesRegistrar$Property;)Ljava/lang/Class; +Lorg/bouncycastle/crypto/CryptoServicesRegistrar$ThreadLocalSecureRandomProvider; +HSPLorg/bouncycastle/crypto/CryptoServicesRegistrar$ThreadLocalSecureRandomProvider;->()V +HSPLorg/bouncycastle/crypto/CryptoServicesRegistrar$ThreadLocalSecureRandomProvider;->(Lorg/bouncycastle/crypto/CryptoServicesRegistrar$1;)V +Lorg/bouncycastle/crypto/DerivationFunction; +Lorg/bouncycastle/crypto/DerivationParameters; +Lorg/bouncycastle/crypto/Digest; +Lorg/bouncycastle/crypto/ExtendedDigest; +Lorg/bouncycastle/crypto/Mac; +Lorg/bouncycastle/crypto/PBEParametersGenerator; +HSPLorg/bouncycastle/crypto/PBEParametersGenerator;->()V +HSPLorg/bouncycastle/crypto/PBEParametersGenerator;->init([B[BI)V +Lorg/bouncycastle/crypto/SavableDigest; +Lorg/bouncycastle/crypto/SecureRandomProvider; +Lorg/bouncycastle/crypto/digests/EncodableDigest; +Lorg/bouncycastle/crypto/digests/GeneralDigest; +HSPLorg/bouncycastle/crypto/digests/GeneralDigest;->(Lorg/bouncycastle/crypto/CryptoServicePurpose;)V +HSPLorg/bouncycastle/crypto/digests/GeneralDigest;->(Lorg/bouncycastle/crypto/digests/GeneralDigest;)V +HSPLorg/bouncycastle/crypto/digests/GeneralDigest;->copyIn(Lorg/bouncycastle/crypto/digests/GeneralDigest;)V +HSPLorg/bouncycastle/crypto/digests/GeneralDigest;->getByteLength()I +HSPLorg/bouncycastle/crypto/digests/GeneralDigest;->reset()V +Lorg/bouncycastle/crypto/digests/SHA256Digest; +HSPLorg/bouncycastle/crypto/digests/SHA256Digest;->()V +HSPLorg/bouncycastle/crypto/digests/SHA256Digest;->()V +HSPLorg/bouncycastle/crypto/digests/SHA256Digest;->(Lorg/bouncycastle/crypto/CryptoServicePurpose;)V +HSPLorg/bouncycastle/crypto/digests/SHA256Digest;->(Lorg/bouncycastle/crypto/digests/SHA256Digest;)V +HSPLorg/bouncycastle/crypto/digests/SHA256Digest;->Ch(III)I +HSPLorg/bouncycastle/crypto/digests/SHA256Digest;->Maj(III)I +HSPLorg/bouncycastle/crypto/digests/SHA256Digest;->Sum0(I)I +HSPLorg/bouncycastle/crypto/digests/SHA256Digest;->Sum1(I)I +HSPLorg/bouncycastle/crypto/digests/SHA256Digest;->Theta0(I)I +HSPLorg/bouncycastle/crypto/digests/SHA256Digest;->Theta1(I)I +HSPLorg/bouncycastle/crypto/digests/SHA256Digest;->copy()Lorg/bouncycastle/util/Memoable; +HSPLorg/bouncycastle/crypto/digests/SHA256Digest;->copyIn(Lorg/bouncycastle/crypto/digests/SHA256Digest;)V +HSPLorg/bouncycastle/crypto/digests/SHA256Digest;->cryptoServiceProperties()Lorg/bouncycastle/crypto/CryptoServiceProperties; +HSPLorg/bouncycastle/crypto/digests/SHA256Digest;->getAlgorithmName()Ljava/lang/String; +HSPLorg/bouncycastle/crypto/digests/SHA256Digest;->getDigestSize()I +HSPLorg/bouncycastle/crypto/digests/SHA256Digest;->processBlock()V +HSPLorg/bouncycastle/crypto/digests/SHA256Digest;->processLength(J)V +HSPLorg/bouncycastle/crypto/digests/SHA256Digest;->processWord([BI)V +HSPLorg/bouncycastle/crypto/digests/SHA256Digest;->reset()V +HSPLorg/bouncycastle/crypto/digests/SHA256Digest;->reset(Lorg/bouncycastle/util/Memoable;)V +Lorg/bouncycastle/crypto/digests/Utils; +HSPLorg/bouncycastle/crypto/digests/Utils;->getDefaultProperties(Lorg/bouncycastle/crypto/Digest;ILorg/bouncycastle/crypto/CryptoServicePurpose;)Lorg/bouncycastle/crypto/CryptoServiceProperties; +Lorg/bouncycastle/crypto/digests/Utils$DefaultPropertiesWithPRF; +HSPLorg/bouncycastle/crypto/digests/Utils$DefaultPropertiesWithPRF;->(IILjava/lang/String;Lorg/bouncycastle/crypto/CryptoServicePurpose;)V +Lorg/bouncycastle/crypto/generators/HKDFBytesGenerator; +HSPLorg/bouncycastle/crypto/generators/HKDFBytesGenerator;->(Lorg/bouncycastle/crypto/Digest;)V +HSPLorg/bouncycastle/crypto/generators/HKDFBytesGenerator;->expandNext()V +HSPLorg/bouncycastle/crypto/generators/HKDFBytesGenerator;->generateBytes([BII)I +HSPLorg/bouncycastle/crypto/generators/HKDFBytesGenerator;->init(Lorg/bouncycastle/crypto/DerivationParameters;)V +Lorg/bouncycastle/crypto/generators/PKCS5S2ParametersGenerator; +HSPLorg/bouncycastle/crypto/generators/PKCS5S2ParametersGenerator;->(Lorg/bouncycastle/crypto/Digest;)V +HSPLorg/bouncycastle/crypto/generators/PKCS5S2ParametersGenerator;->F([BI[B[BI)V +HSPLorg/bouncycastle/crypto/generators/PKCS5S2ParametersGenerator;->generateDerivedKey(I)[B +HSPLorg/bouncycastle/crypto/generators/PKCS5S2ParametersGenerator;->generateDerivedMacParameters(I)Lorg/bouncycastle/crypto/CipherParameters; +HSPLorg/bouncycastle/crypto/generators/PKCS5S2ParametersGenerator;->generateDerivedParameters(I)Lorg/bouncycastle/crypto/CipherParameters; +Lorg/bouncycastle/crypto/macs/HMac; +HSPLorg/bouncycastle/crypto/macs/HMac;->()V +HSPLorg/bouncycastle/crypto/macs/HMac;->(Lorg/bouncycastle/crypto/Digest;)V +HSPLorg/bouncycastle/crypto/macs/HMac;->(Lorg/bouncycastle/crypto/Digest;I)V +HSPLorg/bouncycastle/crypto/macs/HMac;->getByteLength(Lorg/bouncycastle/crypto/Digest;)I +HSPLorg/bouncycastle/crypto/macs/HMac;->getMacSize()I +HSPLorg/bouncycastle/crypto/macs/HMac;->init(Lorg/bouncycastle/crypto/CipherParameters;)V +HSPLorg/bouncycastle/crypto/macs/HMac;->update(B)V +HSPLorg/bouncycastle/crypto/macs/HMac;->update([BII)V +HSPLorg/bouncycastle/crypto/macs/HMac;->xorPad([BIB)V +Lorg/bouncycastle/crypto/params/DHParameters; +HSPLorg/bouncycastle/crypto/params/DHParameters;->(Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;IILjava/math/BigInteger;Lorg/bouncycastle/crypto/params/DHValidationParameters;)V +Lorg/bouncycastle/crypto/params/DHValidationParameters; +HSPLorg/bouncycastle/crypto/params/DHValidationParameters;->([BI)V +Lorg/bouncycastle/crypto/params/DSAParameters; +HSPLorg/bouncycastle/crypto/params/DSAParameters;->(Ljava/math/BigInteger;Ljava/math/BigInteger;Ljava/math/BigInteger;Lorg/bouncycastle/crypto/params/DSAValidationParameters;)V +HSPLorg/bouncycastle/crypto/params/DSAParameters;->getG()Ljava/math/BigInteger; +HSPLorg/bouncycastle/crypto/params/DSAParameters;->getP()Ljava/math/BigInteger; +HSPLorg/bouncycastle/crypto/params/DSAParameters;->getQ()Ljava/math/BigInteger; +HSPLorg/bouncycastle/crypto/params/DSAParameters;->getValidationParameters()Lorg/bouncycastle/crypto/params/DSAValidationParameters; +Lorg/bouncycastle/crypto/params/DSAValidationParameters; +HSPLorg/bouncycastle/crypto/params/DSAValidationParameters;->([BI)V +HSPLorg/bouncycastle/crypto/params/DSAValidationParameters;->([BII)V +HSPLorg/bouncycastle/crypto/params/DSAValidationParameters;->getCounter()I +HSPLorg/bouncycastle/crypto/params/DSAValidationParameters;->getSeed()[B +Lorg/bouncycastle/crypto/params/HKDFParameters; +HSPLorg/bouncycastle/crypto/params/HKDFParameters;->([BZ[B[B)V +HSPLorg/bouncycastle/crypto/params/HKDFParameters;->getIKM()[B +HSPLorg/bouncycastle/crypto/params/HKDFParameters;->getInfo()[B +HSPLorg/bouncycastle/crypto/params/HKDFParameters;->skipExtract()Z +HSPLorg/bouncycastle/crypto/params/HKDFParameters;->skipExtractParameters([B[B)Lorg/bouncycastle/crypto/params/HKDFParameters; +Lorg/bouncycastle/crypto/params/KeyParameter; +HSPLorg/bouncycastle/crypto/params/KeyParameter;->(I)V +HSPLorg/bouncycastle/crypto/params/KeyParameter;->([B)V +HSPLorg/bouncycastle/crypto/params/KeyParameter;->([BII)V +HSPLorg/bouncycastle/crypto/params/KeyParameter;->getKey()[B +Lorg/bouncycastle/internal/asn1/bsi/BSIObjectIdentifiers; +HSPLorg/bouncycastle/internal/asn1/bsi/BSIObjectIdentifiers;->()V +Lorg/bouncycastle/internal/asn1/cms/CMSObjectIdentifiers; +HSPLorg/bouncycastle/internal/asn1/cms/CMSObjectIdentifiers;->()V +Lorg/bouncycastle/internal/asn1/eac/EACObjectIdentifiers; +HSPLorg/bouncycastle/internal/asn1/eac/EACObjectIdentifiers;->()V +Lorg/bouncycastle/jcajce/provider/asymmetric/COMPOSITE; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/COMPOSITE;->()V +HSPLorg/bouncycastle/jcajce/provider/asymmetric/COMPOSITE;->access$000()Lorg/bouncycastle/jcajce/provider/util/AsymmetricKeyInfoConverter; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/COMPOSITE;->access$002(Lorg/bouncycastle/jcajce/provider/util/AsymmetricKeyInfoConverter;)Lorg/bouncycastle/jcajce/provider/util/AsymmetricKeyInfoConverter; +Lorg/bouncycastle/jcajce/provider/asymmetric/COMPOSITE$CompositeKeyInfoConverter; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/COMPOSITE$CompositeKeyInfoConverter;->(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/asymmetric/COMPOSITE$Mappings; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/COMPOSITE$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/asymmetric/COMPOSITE$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/asymmetric/DH; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/DH;->()V +HSPLorg/bouncycastle/jcajce/provider/asymmetric/DH;->access$000()Ljava/util/Map; +Lorg/bouncycastle/jcajce/provider/asymmetric/DH$Mappings; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/DH$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/asymmetric/DH$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/asymmetric/DSA$Mappings; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/DSA$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/asymmetric/DSA$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/asymmetric/DSTU4145$Mappings; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/DSTU4145$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/asymmetric/DSTU4145$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/asymmetric/Dilithium$Mappings; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/Dilithium$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/asymmetric/Dilithium$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/asymmetric/EC; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/EC;->()V +HSPLorg/bouncycastle/jcajce/provider/asymmetric/EC;->access$000()Ljava/util/Map; +Lorg/bouncycastle/jcajce/provider/asymmetric/EC$Mappings; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/EC$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/asymmetric/EC$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/asymmetric/ECGOST$Mappings; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/ECGOST$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/asymmetric/ECGOST$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/asymmetric/EXTERNAL; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/EXTERNAL;->()V +HSPLorg/bouncycastle/jcajce/provider/asymmetric/EXTERNAL;->access$000()Lorg/bouncycastle/jcajce/provider/util/AsymmetricKeyInfoConverter; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/EXTERNAL;->access$002(Lorg/bouncycastle/jcajce/provider/util/AsymmetricKeyInfoConverter;)Lorg/bouncycastle/jcajce/provider/util/AsymmetricKeyInfoConverter; +Lorg/bouncycastle/jcajce/provider/asymmetric/EXTERNAL$ExternalKeyInfoConverter; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/EXTERNAL$ExternalKeyInfoConverter;->(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/asymmetric/EXTERNAL$Mappings; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/EXTERNAL$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/asymmetric/EXTERNAL$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/asymmetric/EdEC$Mappings; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/EdEC$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/asymmetric/EdEC$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/asymmetric/ElGamal$Mappings; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/ElGamal$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/asymmetric/ElGamal$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/asymmetric/Falcon$Mappings; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/Falcon$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/asymmetric/Falcon$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/asymmetric/GM$Mappings; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/GM$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/asymmetric/GM$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/asymmetric/GOST$Mappings; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/GOST$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/asymmetric/GOST$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/asymmetric/IES$Mappings; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/IES$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/asymmetric/IES$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/asymmetric/LMS$Mappings; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/LMS$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/asymmetric/LMS$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/asymmetric/NTRU$Mappings; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/NTRU$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/asymmetric/NTRU$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/asymmetric/RSA; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/RSA;->()V +HSPLorg/bouncycastle/jcajce/provider/asymmetric/RSA;->access$000()Ljava/util/Map; +Lorg/bouncycastle/jcajce/provider/asymmetric/RSA$Mappings; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/RSA$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/asymmetric/RSA$Mappings;->addDigestSignature(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;Ljava/lang/String;Ljava/lang/String;Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;)V +HSPLorg/bouncycastle/jcajce/provider/asymmetric/RSA$Mappings;->addISO9796Signature(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;Ljava/lang/String;Ljava/lang/String;)V +HSPLorg/bouncycastle/jcajce/provider/asymmetric/RSA$Mappings;->addPSSSignature(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V +HSPLorg/bouncycastle/jcajce/provider/asymmetric/RSA$Mappings;->addPSSSignature(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;Ljava/lang/String;Ljava/lang/String;Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;)V +HSPLorg/bouncycastle/jcajce/provider/asymmetric/RSA$Mappings;->addX931Signature(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;Ljava/lang/String;Ljava/lang/String;)V +HSPLorg/bouncycastle/jcajce/provider/asymmetric/RSA$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/asymmetric/SPHINCSPlus$Mappings; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/SPHINCSPlus$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/asymmetric/SPHINCSPlus$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/asymmetric/X509$Mappings; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/X509$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/asymmetric/X509$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/asymmetric/dh/KeyFactorySpi; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/dh/KeyFactorySpi;->()V +Lorg/bouncycastle/jcajce/provider/asymmetric/dsa/DSAUtil; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/dsa/DSAUtil;->()V +Lorg/bouncycastle/jcajce/provider/asymmetric/dsa/KeyFactorySpi; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/dsa/KeyFactorySpi;->()V +Lorg/bouncycastle/jcajce/provider/asymmetric/dstu/KeyFactorySpi; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/dstu/KeyFactorySpi;->()V +Lorg/bouncycastle/jcajce/provider/asymmetric/ec/KeyFactorySpi; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/ec/KeyFactorySpi;->(Ljava/lang/String;Lorg/bouncycastle/jcajce/provider/config/ProviderConfiguration;)V +Lorg/bouncycastle/jcajce/provider/asymmetric/ec/KeyFactorySpi$EC; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/ec/KeyFactorySpi$EC;->()V +Lorg/bouncycastle/jcajce/provider/asymmetric/ec/KeyFactorySpi$ECMQV; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/ec/KeyFactorySpi$ECMQV;->()V +Lorg/bouncycastle/jcajce/provider/asymmetric/ecgost/KeyFactorySpi; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/ecgost/KeyFactorySpi;->()V +Lorg/bouncycastle/jcajce/provider/asymmetric/ecgost12/KeyFactorySpi; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/ecgost12/KeyFactorySpi;->()V +Lorg/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi;->()V +HSPLorg/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi;->(Ljava/lang/String;ZI)V +Lorg/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi$Ed25519; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi$Ed25519;->()V +Lorg/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi$Ed448; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi$Ed448;->()V +Lorg/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi$X25519; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi$X25519;->()V +Lorg/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi$X448; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/edec/KeyFactorySpi$X448;->()V +Lorg/bouncycastle/jcajce/provider/asymmetric/elgamal/KeyFactorySpi; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/elgamal/KeyFactorySpi;->()V +Lorg/bouncycastle/jcajce/provider/asymmetric/gost/KeyFactorySpi; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/gost/KeyFactorySpi;->()V +Lorg/bouncycastle/jcajce/provider/asymmetric/rsa/KeyFactorySpi; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/rsa/KeyFactorySpi;->()V +Lorg/bouncycastle/jcajce/provider/asymmetric/util/BaseKeyFactorySpi; +HSPLorg/bouncycastle/jcajce/provider/asymmetric/util/BaseKeyFactorySpi;->()V +Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider; +Lorg/bouncycastle/jcajce/provider/config/ProviderConfiguration; +Lorg/bouncycastle/jcajce/provider/config/ProviderConfigurationPermission; +HSPLorg/bouncycastle/jcajce/provider/config/ProviderConfigurationPermission;->(Ljava/lang/String;Ljava/lang/String;)V +HSPLorg/bouncycastle/jcajce/provider/config/ProviderConfigurationPermission;->calculateMask(Ljava/lang/String;)I +Lorg/bouncycastle/jcajce/provider/digest/Blake2b; +Lorg/bouncycastle/jcajce/provider/digest/Blake2b$Mappings; +HSPLorg/bouncycastle/jcajce/provider/digest/Blake2b$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/Blake2b$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/Blake2b$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/digest/Blake2s; +Lorg/bouncycastle/jcajce/provider/digest/Blake2s$Mappings; +HSPLorg/bouncycastle/jcajce/provider/digest/Blake2s$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/Blake2s$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/Blake2s$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/digest/Blake3; +Lorg/bouncycastle/jcajce/provider/digest/Blake3$Mappings; +HSPLorg/bouncycastle/jcajce/provider/digest/Blake3$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/Blake3$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/Blake3$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/digest/DSTU7564; +Lorg/bouncycastle/jcajce/provider/digest/DSTU7564$Mappings; +HSPLorg/bouncycastle/jcajce/provider/digest/DSTU7564$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/DSTU7564$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/DSTU7564$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/digest/DigestAlgorithmProvider; +HSPLorg/bouncycastle/jcajce/provider/digest/DigestAlgorithmProvider;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/DigestAlgorithmProvider;->addHMACAlgorithm(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V +HSPLorg/bouncycastle/jcajce/provider/digest/DigestAlgorithmProvider;->addHMACAlias(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;Ljava/lang/String;Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;)V +HSPLorg/bouncycastle/jcajce/provider/digest/DigestAlgorithmProvider;->addKMACAlgorithm(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V +Lorg/bouncycastle/jcajce/provider/digest/GOST3411; +Lorg/bouncycastle/jcajce/provider/digest/GOST3411$Mappings; +HSPLorg/bouncycastle/jcajce/provider/digest/GOST3411$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/GOST3411$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/GOST3411$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/digest/Haraka; +Lorg/bouncycastle/jcajce/provider/digest/Haraka$Mappings; +HSPLorg/bouncycastle/jcajce/provider/digest/Haraka$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/Haraka$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/Haraka$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/digest/Keccak; +Lorg/bouncycastle/jcajce/provider/digest/Keccak$Mappings; +HSPLorg/bouncycastle/jcajce/provider/digest/Keccak$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/Keccak$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/Keccak$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/digest/MD2; +Lorg/bouncycastle/jcajce/provider/digest/MD2$Mappings; +HSPLorg/bouncycastle/jcajce/provider/digest/MD2$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/MD2$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/MD2$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/digest/MD4; +Lorg/bouncycastle/jcajce/provider/digest/MD4$Mappings; +HSPLorg/bouncycastle/jcajce/provider/digest/MD4$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/MD4$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/MD4$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/digest/MD5; +Lorg/bouncycastle/jcajce/provider/digest/MD5$Mappings; +HSPLorg/bouncycastle/jcajce/provider/digest/MD5$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/MD5$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/MD5$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/digest/RIPEMD128; +Lorg/bouncycastle/jcajce/provider/digest/RIPEMD128$Mappings; +HSPLorg/bouncycastle/jcajce/provider/digest/RIPEMD128$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/RIPEMD128$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/RIPEMD128$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/digest/RIPEMD160; +Lorg/bouncycastle/jcajce/provider/digest/RIPEMD160$Mappings; +HSPLorg/bouncycastle/jcajce/provider/digest/RIPEMD160$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/RIPEMD160$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/RIPEMD160$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/digest/RIPEMD256; +Lorg/bouncycastle/jcajce/provider/digest/RIPEMD256$Mappings; +HSPLorg/bouncycastle/jcajce/provider/digest/RIPEMD256$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/RIPEMD256$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/RIPEMD256$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/digest/RIPEMD320; +Lorg/bouncycastle/jcajce/provider/digest/RIPEMD320$Mappings; +HSPLorg/bouncycastle/jcajce/provider/digest/RIPEMD320$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/RIPEMD320$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/RIPEMD320$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/digest/SHA1; +Lorg/bouncycastle/jcajce/provider/digest/SHA1$Mappings; +HSPLorg/bouncycastle/jcajce/provider/digest/SHA1$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/SHA1$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/SHA1$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/digest/SHA224; +Lorg/bouncycastle/jcajce/provider/digest/SHA224$Mappings; +HSPLorg/bouncycastle/jcajce/provider/digest/SHA224$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/SHA224$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/SHA224$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/digest/SHA256; +Lorg/bouncycastle/jcajce/provider/digest/SHA256$Mappings; +HSPLorg/bouncycastle/jcajce/provider/digest/SHA256$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/SHA256$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/SHA256$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/digest/SHA3; +Lorg/bouncycastle/jcajce/provider/digest/SHA3$Mappings; +HSPLorg/bouncycastle/jcajce/provider/digest/SHA3$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/SHA3$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/SHA3$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/digest/SHA384; +Lorg/bouncycastle/jcajce/provider/digest/SHA384$Mappings; +HSPLorg/bouncycastle/jcajce/provider/digest/SHA384$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/SHA384$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/SHA384$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/digest/SHA512; +Lorg/bouncycastle/jcajce/provider/digest/SHA512$Mappings; +HSPLorg/bouncycastle/jcajce/provider/digest/SHA512$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/SHA512$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/SHA512$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/digest/SM3; +Lorg/bouncycastle/jcajce/provider/digest/SM3$Mappings; +HSPLorg/bouncycastle/jcajce/provider/digest/SM3$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/SM3$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/SM3$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/digest/Skein; +Lorg/bouncycastle/jcajce/provider/digest/Skein$Mappings; +HSPLorg/bouncycastle/jcajce/provider/digest/Skein$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/Skein$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/Skein$Mappings;->addSkeinMacAlgorithm(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;II)V +HSPLorg/bouncycastle/jcajce/provider/digest/Skein$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/digest/Tiger; +Lorg/bouncycastle/jcajce/provider/digest/Tiger$Mappings; +HSPLorg/bouncycastle/jcajce/provider/digest/Tiger$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/Tiger$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/Tiger$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/digest/Whirlpool; +Lorg/bouncycastle/jcajce/provider/digest/Whirlpool$Mappings; +HSPLorg/bouncycastle/jcajce/provider/digest/Whirlpool$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/Whirlpool$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/digest/Whirlpool$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/drbg/DRBG; +HSPLorg/bouncycastle/jcajce/provider/drbg/DRBG;->()V +HSPLorg/bouncycastle/jcajce/provider/drbg/DRBG;->access$000()Ljava/lang/String; +Lorg/bouncycastle/jcajce/provider/drbg/DRBG$Mappings; +HSPLorg/bouncycastle/jcajce/provider/drbg/DRBG$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/drbg/DRBG$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/drbg/EntropyDaemon; +HSPLorg/bouncycastle/jcajce/provider/drbg/EntropyDaemon;->()V +HSPLorg/bouncycastle/jcajce/provider/drbg/EntropyDaemon;->()V +Lorg/bouncycastle/jcajce/provider/keystore/BC$Mappings; +HSPLorg/bouncycastle/jcajce/provider/keystore/BC$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/keystore/BC$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/keystore/BCFKS$Mappings; +HSPLorg/bouncycastle/jcajce/provider/keystore/BCFKS$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/keystore/BCFKS$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/keystore/PKCS12$Mappings; +HSPLorg/bouncycastle/jcajce/provider/keystore/PKCS12$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/keystore/PKCS12$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/AES; +HSPLorg/bouncycastle/jcajce/provider/symmetric/AES;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/AES;->access$100()Ljava/util/Map; +Lorg/bouncycastle/jcajce/provider/symmetric/AES$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/AES$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/AES$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/AES$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/ARC4; +Lorg/bouncycastle/jcajce/provider/symmetric/ARC4$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/ARC4$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/ARC4$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/ARC4$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/ARIA; +Lorg/bouncycastle/jcajce/provider/symmetric/ARIA$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/ARIA$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/ARIA$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/ARIA$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/Blowfish; +Lorg/bouncycastle/jcajce/provider/symmetric/Blowfish$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/Blowfish$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/Blowfish$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/Blowfish$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/CAST5; +Lorg/bouncycastle/jcajce/provider/symmetric/CAST5$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/CAST5$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/CAST5$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/CAST5$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/CAST6; +Lorg/bouncycastle/jcajce/provider/symmetric/CAST6$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/CAST6$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/CAST6$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/CAST6$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/Camellia; +Lorg/bouncycastle/jcajce/provider/symmetric/Camellia$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/Camellia$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/Camellia$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/Camellia$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/ChaCha; +Lorg/bouncycastle/jcajce/provider/symmetric/ChaCha$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/ChaCha$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/ChaCha$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/ChaCha$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/DES; +Lorg/bouncycastle/jcajce/provider/symmetric/DES$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/DES$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/DES$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/DES$Mappings;->addAlias(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;Ljava/lang/String;)V +HSPLorg/bouncycastle/jcajce/provider/symmetric/DES$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/DESede; +Lorg/bouncycastle/jcajce/provider/symmetric/DESede$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/DESede$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/DESede$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/DESede$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/DSTU7624; +Lorg/bouncycastle/jcajce/provider/symmetric/DSTU7624$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/DSTU7624$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/DSTU7624$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/DSTU7624$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/GOST28147; +Lorg/bouncycastle/jcajce/provider/symmetric/GOST28147$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/GOST28147$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/GOST28147$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/GOST28147$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/GOST3412_2015; +Lorg/bouncycastle/jcajce/provider/symmetric/GOST3412_2015$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/GOST3412_2015$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/GOST3412_2015$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/GOST3412_2015$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/Grain128; +Lorg/bouncycastle/jcajce/provider/symmetric/Grain128$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/Grain128$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/Grain128$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/Grain128$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/Grainv1; +Lorg/bouncycastle/jcajce/provider/symmetric/Grainv1$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/Grainv1$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/Grainv1$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/Grainv1$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/HC128; +Lorg/bouncycastle/jcajce/provider/symmetric/HC128$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/HC128$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/HC128$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/HC128$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/HC256; +Lorg/bouncycastle/jcajce/provider/symmetric/HC256$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/HC256$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/HC256$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/HC256$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/IDEA; +Lorg/bouncycastle/jcajce/provider/symmetric/IDEA$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/IDEA$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/IDEA$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/IDEA$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/Noekeon; +Lorg/bouncycastle/jcajce/provider/symmetric/Noekeon$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/Noekeon$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/Noekeon$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/Noekeon$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/OpenSSLPBKDF; +Lorg/bouncycastle/jcajce/provider/symmetric/OpenSSLPBKDF$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/OpenSSLPBKDF$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/OpenSSLPBKDF$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/OpenSSLPBKDF$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/PBEPBKDF1; +Lorg/bouncycastle/jcajce/provider/symmetric/PBEPBKDF1$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/PBEPBKDF1$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/PBEPBKDF1$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/PBEPBKDF1$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/PBEPBKDF2; +Lorg/bouncycastle/jcajce/provider/symmetric/PBEPBKDF2$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/PBEPBKDF2$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/PBEPBKDF2$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/PBEPBKDF2$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/PBEPKCS12; +Lorg/bouncycastle/jcajce/provider/symmetric/PBEPKCS12$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/PBEPKCS12$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/PBEPKCS12$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/PBEPKCS12$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/Poly1305; +Lorg/bouncycastle/jcajce/provider/symmetric/Poly1305$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/Poly1305$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/Poly1305$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/Poly1305$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/RC2; +Lorg/bouncycastle/jcajce/provider/symmetric/RC2$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/RC2$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/RC2$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/RC2$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/RC5; +Lorg/bouncycastle/jcajce/provider/symmetric/RC5$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/RC5$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/RC5$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/RC5$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/RC6; +Lorg/bouncycastle/jcajce/provider/symmetric/RC6$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/RC6$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/RC6$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/RC6$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/Rijndael; +Lorg/bouncycastle/jcajce/provider/symmetric/Rijndael$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/Rijndael$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/Rijndael$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/Rijndael$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/SCRYPT; +Lorg/bouncycastle/jcajce/provider/symmetric/SCRYPT$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/SCRYPT$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/SCRYPT$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/SCRYPT$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/SEED; +Lorg/bouncycastle/jcajce/provider/symmetric/SEED$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/SEED$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/SEED$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/SEED$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/SM4; +Lorg/bouncycastle/jcajce/provider/symmetric/SM4$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/SM4$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/SM4$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/SM4$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/Salsa20; +Lorg/bouncycastle/jcajce/provider/symmetric/Salsa20$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/Salsa20$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/Salsa20$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/Salsa20$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/Serpent; +Lorg/bouncycastle/jcajce/provider/symmetric/Serpent$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/Serpent$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/Serpent$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/Serpent$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/Shacal2; +Lorg/bouncycastle/jcajce/provider/symmetric/Shacal2$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/Shacal2$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/Shacal2$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/Shacal2$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/SipHash; +Lorg/bouncycastle/jcajce/provider/symmetric/SipHash$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/SipHash$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/SipHash$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/SipHash$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/SipHash128; +Lorg/bouncycastle/jcajce/provider/symmetric/SipHash128$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/SipHash128$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/SipHash128$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/SipHash128$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/Skipjack; +Lorg/bouncycastle/jcajce/provider/symmetric/Skipjack$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/Skipjack$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/Skipjack$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/Skipjack$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/SymmetricAlgorithmProvider; +HSPLorg/bouncycastle/jcajce/provider/symmetric/SymmetricAlgorithmProvider;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/SymmetricAlgorithmProvider;->addCMacAlgorithm(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V +HSPLorg/bouncycastle/jcajce/provider/symmetric/SymmetricAlgorithmProvider;->addGMacAlgorithm(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V +HSPLorg/bouncycastle/jcajce/provider/symmetric/SymmetricAlgorithmProvider;->addPoly1305Algorithm(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V +Lorg/bouncycastle/jcajce/provider/symmetric/TEA; +Lorg/bouncycastle/jcajce/provider/symmetric/TEA$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/TEA$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/TEA$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/TEA$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/TLSKDF; +Lorg/bouncycastle/jcajce/provider/symmetric/TLSKDF$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/TLSKDF$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/TLSKDF$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/TLSKDF$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/Threefish; +Lorg/bouncycastle/jcajce/provider/symmetric/Threefish$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/Threefish$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/Threefish$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/Threefish$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/Twofish; +Lorg/bouncycastle/jcajce/provider/symmetric/Twofish$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/Twofish$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/Twofish$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/Twofish$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/VMPC; +Lorg/bouncycastle/jcajce/provider/symmetric/VMPC$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/VMPC$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/VMPC$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/VMPC$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/VMPCKSA3; +Lorg/bouncycastle/jcajce/provider/symmetric/VMPCKSA3$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/VMPCKSA3$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/VMPCKSA3$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/VMPCKSA3$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/XSalsa20; +Lorg/bouncycastle/jcajce/provider/symmetric/XSalsa20$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/XSalsa20$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/XSalsa20$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/XSalsa20$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/XTEA; +Lorg/bouncycastle/jcajce/provider/symmetric/XTEA$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/XTEA$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/XTEA$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/XTEA$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/Zuc; +Lorg/bouncycastle/jcajce/provider/symmetric/Zuc$Mappings; +HSPLorg/bouncycastle/jcajce/provider/symmetric/Zuc$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/Zuc$Mappings;->()V +HSPLorg/bouncycastle/jcajce/provider/symmetric/Zuc$Mappings;->configure(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;)V +Lorg/bouncycastle/jcajce/provider/symmetric/util/ClassUtil; +HSPLorg/bouncycastle/jcajce/provider/symmetric/util/ClassUtil;->loadClass(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Class; +Lorg/bouncycastle/jcajce/provider/util/AlgorithmProvider; +HSPLorg/bouncycastle/jcajce/provider/util/AlgorithmProvider;->()V +Lorg/bouncycastle/jcajce/provider/util/AsymmetricAlgorithmProvider; +HSPLorg/bouncycastle/jcajce/provider/util/AsymmetricAlgorithmProvider;->()V +HSPLorg/bouncycastle/jcajce/provider/util/AsymmetricAlgorithmProvider;->addKeyFactoryAlgorithm(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;Ljava/lang/String;Ljava/lang/String;Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;Lorg/bouncycastle/jcajce/provider/util/AsymmetricKeyInfoConverter;)V +HSPLorg/bouncycastle/jcajce/provider/util/AsymmetricAlgorithmProvider;->addKeyPairGeneratorAlgorithm(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;Ljava/lang/String;Ljava/lang/String;Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;)V +HSPLorg/bouncycastle/jcajce/provider/util/AsymmetricAlgorithmProvider;->addSignatureAlgorithm(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V +HSPLorg/bouncycastle/jcajce/provider/util/AsymmetricAlgorithmProvider;->addSignatureAlgorithm(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;)V +HSPLorg/bouncycastle/jcajce/provider/util/AsymmetricAlgorithmProvider;->addSignatureAlgorithm(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;Ljava/util/Map;)V +HSPLorg/bouncycastle/jcajce/provider/util/AsymmetricAlgorithmProvider;->addSignatureAlgorithm(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;Ljava/lang/String;Ljava/lang/String;Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;)V +HSPLorg/bouncycastle/jcajce/provider/util/AsymmetricAlgorithmProvider;->registerKeyFactoryOid(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;Ljava/lang/String;Lorg/bouncycastle/jcajce/provider/util/AsymmetricKeyInfoConverter;)V +HSPLorg/bouncycastle/jcajce/provider/util/AsymmetricAlgorithmProvider;->registerOid(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;Ljava/lang/String;Lorg/bouncycastle/jcajce/provider/util/AsymmetricKeyInfoConverter;)V +HSPLorg/bouncycastle/jcajce/provider/util/AsymmetricAlgorithmProvider;->registerOidAlgorithmParameterGenerator(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;Ljava/lang/String;)V +HSPLorg/bouncycastle/jcajce/provider/util/AsymmetricAlgorithmProvider;->registerOidAlgorithmParameters(Lorg/bouncycastle/jcajce/provider/config/ConfigurableProvider;Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;Ljava/lang/String;)V +Lorg/bouncycastle/jcajce/provider/util/AsymmetricKeyInfoConverter; +Lorg/bouncycastle/jce/provider/BouncyCastleProvider; +HSPLorg/bouncycastle/jce/provider/BouncyCastleProvider;->()V +HSPLorg/bouncycastle/jce/provider/BouncyCastleProvider;->()V +HSPLorg/bouncycastle/jce/provider/BouncyCastleProvider;->access$000(Lorg/bouncycastle/jce/provider/BouncyCastleProvider;)V +HSPLorg/bouncycastle/jce/provider/BouncyCastleProvider;->access$101(Lorg/bouncycastle/jce/provider/BouncyCastleProvider;Ljava/lang/String;Ljava/lang/String;)Ljava/security/Provider$Service; +HSPLorg/bouncycastle/jce/provider/BouncyCastleProvider;->access$200(Lorg/bouncycastle/jce/provider/BouncyCastleProvider;)Ljava/util/Map; +HSPLorg/bouncycastle/jce/provider/BouncyCastleProvider;->access$301(Lorg/bouncycastle/jce/provider/BouncyCastleProvider;Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/bouncycastle/jce/provider/BouncyCastleProvider;->access$401(Lorg/bouncycastle/jce/provider/BouncyCastleProvider;Ljava/security/Provider$Service;)V +HSPLorg/bouncycastle/jce/provider/BouncyCastleProvider;->addAlgorithm(Ljava/lang/String;Ljava/lang/String;)V +HSPLorg/bouncycastle/jce/provider/BouncyCastleProvider;->addAlgorithm(Ljava/lang/String;Ljava/lang/String;Ljava/util/Map;)V +HSPLorg/bouncycastle/jce/provider/BouncyCastleProvider;->addAlgorithm(Ljava/lang/String;Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;Ljava/lang/String;)V +HSPLorg/bouncycastle/jce/provider/BouncyCastleProvider;->addAlgorithm(Ljava/lang/String;Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;Ljava/lang/String;Ljava/util/Map;)V +HSPLorg/bouncycastle/jce/provider/BouncyCastleProvider;->addAttributes(Ljava/lang/String;Ljava/util/Map;)V +HSPLorg/bouncycastle/jce/provider/BouncyCastleProvider;->addKeyInfoConverter(Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;Lorg/bouncycastle/jcajce/provider/util/AsymmetricKeyInfoConverter;)V +HSPLorg/bouncycastle/jce/provider/BouncyCastleProvider;->getService(Ljava/lang/String;Ljava/lang/String;)Ljava/security/Provider$Service; +HSPLorg/bouncycastle/jce/provider/BouncyCastleProvider;->hasAlgorithm(Ljava/lang/String;Ljava/lang/String;)Z +HSPLorg/bouncycastle/jce/provider/BouncyCastleProvider;->loadAlgorithms(Ljava/lang/String;[Ljava/lang/String;)V +HSPLorg/bouncycastle/jce/provider/BouncyCastleProvider;->loadAlgorithms(Ljava/lang/String;[Lorg/bouncycastle/crypto/CryptoServiceProperties;)V +HSPLorg/bouncycastle/jce/provider/BouncyCastleProvider;->loadPQCKeys()V +HSPLorg/bouncycastle/jce/provider/BouncyCastleProvider;->loadServiceClass(Ljava/lang/String;Ljava/lang/String;)V +HSPLorg/bouncycastle/jce/provider/BouncyCastleProvider;->service(Ljava/lang/String;I)Lorg/bouncycastle/crypto/CryptoServiceProperties; +HSPLorg/bouncycastle/jce/provider/BouncyCastleProvider;->setup()V +Lorg/bouncycastle/jce/provider/BouncyCastleProvider$1; +HSPLorg/bouncycastle/jce/provider/BouncyCastleProvider$1;->(Lorg/bouncycastle/jce/provider/BouncyCastleProvider;)V +HSPLorg/bouncycastle/jce/provider/BouncyCastleProvider$1;->run()Ljava/lang/Object; +Lorg/bouncycastle/jce/provider/BouncyCastleProvider$2; +HSPLorg/bouncycastle/jce/provider/BouncyCastleProvider$2;->(Lorg/bouncycastle/jce/provider/BouncyCastleProvider;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V +HSPLorg/bouncycastle/jce/provider/BouncyCastleProvider$2;->run()Ljava/lang/Object; +HSPLorg/bouncycastle/jce/provider/BouncyCastleProvider$2;->run()Ljava/security/Provider$Service; +Lorg/bouncycastle/jce/provider/BouncyCastleProvider$JcaCryptoService; +HSPLorg/bouncycastle/jce/provider/BouncyCastleProvider$JcaCryptoService;->(Ljava/lang/String;I)V +HSPLorg/bouncycastle/jce/provider/BouncyCastleProvider$JcaCryptoService;->getServiceName()Ljava/lang/String; +Lorg/bouncycastle/jce/provider/BouncyCastleProviderConfiguration; +HSPLorg/bouncycastle/jce/provider/BouncyCastleProviderConfiguration;->()V +HSPLorg/bouncycastle/jce/provider/BouncyCastleProviderConfiguration;->()V +Lorg/bouncycastle/pqc/asn1/PQCObjectIdentifiers; +HSPLorg/bouncycastle/pqc/asn1/PQCObjectIdentifiers;->()V +Lorg/bouncycastle/pqc/jcajce/provider/bike/BIKEKeyFactorySpi; +HSPLorg/bouncycastle/pqc/jcajce/provider/bike/BIKEKeyFactorySpi;->()V +Lorg/bouncycastle/pqc/jcajce/provider/cmce/CMCEKeyFactorySpi; +HSPLorg/bouncycastle/pqc/jcajce/provider/cmce/CMCEKeyFactorySpi;->()V +Lorg/bouncycastle/pqc/jcajce/provider/dilithium/DilithiumKeyFactorySpi; +HSPLorg/bouncycastle/pqc/jcajce/provider/dilithium/DilithiumKeyFactorySpi;->()V +HSPLorg/bouncycastle/pqc/jcajce/provider/dilithium/DilithiumKeyFactorySpi;->()V +HSPLorg/bouncycastle/pqc/jcajce/provider/dilithium/DilithiumKeyFactorySpi;->(Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;)V +Lorg/bouncycastle/pqc/jcajce/provider/dilithium/DilithiumKeyFactorySpi$Base2; +HSPLorg/bouncycastle/pqc/jcajce/provider/dilithium/DilithiumKeyFactorySpi$Base2;->()V +Lorg/bouncycastle/pqc/jcajce/provider/dilithium/DilithiumKeyFactorySpi$Base3; +HSPLorg/bouncycastle/pqc/jcajce/provider/dilithium/DilithiumKeyFactorySpi$Base3;->()V +Lorg/bouncycastle/pqc/jcajce/provider/dilithium/DilithiumKeyFactorySpi$Base5; +HSPLorg/bouncycastle/pqc/jcajce/provider/dilithium/DilithiumKeyFactorySpi$Base5;->()V +Lorg/bouncycastle/pqc/jcajce/provider/falcon/FalconKeyFactorySpi; +HSPLorg/bouncycastle/pqc/jcajce/provider/falcon/FalconKeyFactorySpi;->()V +HSPLorg/bouncycastle/pqc/jcajce/provider/falcon/FalconKeyFactorySpi;->()V +HSPLorg/bouncycastle/pqc/jcajce/provider/falcon/FalconKeyFactorySpi;->(Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;)V +Lorg/bouncycastle/pqc/jcajce/provider/falcon/FalconKeyFactorySpi$Falcon1024; +HSPLorg/bouncycastle/pqc/jcajce/provider/falcon/FalconKeyFactorySpi$Falcon1024;->()V +Lorg/bouncycastle/pqc/jcajce/provider/falcon/FalconKeyFactorySpi$Falcon512; +HSPLorg/bouncycastle/pqc/jcajce/provider/falcon/FalconKeyFactorySpi$Falcon512;->()V +Lorg/bouncycastle/pqc/jcajce/provider/hqc/HQCKeyFactorySpi; +HSPLorg/bouncycastle/pqc/jcajce/provider/hqc/HQCKeyFactorySpi;->()V +Lorg/bouncycastle/pqc/jcajce/provider/kyber/KyberKeyFactorySpi; +HSPLorg/bouncycastle/pqc/jcajce/provider/kyber/KyberKeyFactorySpi;->()V +HSPLorg/bouncycastle/pqc/jcajce/provider/kyber/KyberKeyFactorySpi;->()V +Lorg/bouncycastle/pqc/jcajce/provider/lms/LMSKeyFactorySpi; +HSPLorg/bouncycastle/pqc/jcajce/provider/lms/LMSKeyFactorySpi;->()V +Lorg/bouncycastle/pqc/jcajce/provider/newhope/NHKeyFactorySpi; +HSPLorg/bouncycastle/pqc/jcajce/provider/newhope/NHKeyFactorySpi;->()V +Lorg/bouncycastle/pqc/jcajce/provider/ntru/NTRUKeyFactorySpi; +HSPLorg/bouncycastle/pqc/jcajce/provider/ntru/NTRUKeyFactorySpi;->()V +Lorg/bouncycastle/pqc/jcajce/provider/picnic/PicnicKeyFactorySpi; +HSPLorg/bouncycastle/pqc/jcajce/provider/picnic/PicnicKeyFactorySpi;->()V +Lorg/bouncycastle/pqc/jcajce/provider/sphincs/Sphincs256KeyFactorySpi; +HSPLorg/bouncycastle/pqc/jcajce/provider/sphincs/Sphincs256KeyFactorySpi;->()V +Lorg/bouncycastle/pqc/jcajce/provider/sphincsplus/SPHINCSPlusKeyFactorySpi; +HSPLorg/bouncycastle/pqc/jcajce/provider/sphincsplus/SPHINCSPlusKeyFactorySpi;->()V +Lorg/bouncycastle/pqc/jcajce/provider/util/BaseKeyFactorySpi; +HSPLorg/bouncycastle/pqc/jcajce/provider/util/BaseKeyFactorySpi;->(Ljava/util/Set;)V +HSPLorg/bouncycastle/pqc/jcajce/provider/util/BaseKeyFactorySpi;->(Lorg/bouncycastle/asn1/ASN1ObjectIdentifier;)V +Lorg/bouncycastle/pqc/jcajce/provider/xmss/XMSSKeyFactorySpi; +HSPLorg/bouncycastle/pqc/jcajce/provider/xmss/XMSSKeyFactorySpi;->()V +Lorg/bouncycastle/pqc/jcajce/provider/xmss/XMSSMTKeyFactorySpi; +HSPLorg/bouncycastle/pqc/jcajce/provider/xmss/XMSSMTKeyFactorySpi;->()V +Lorg/bouncycastle/util/Arrays; +HSPLorg/bouncycastle/util/Arrays;->clone([B)[B +HSPLorg/bouncycastle/util/Arrays;->hashCode([B)I +Lorg/bouncycastle/util/Encodable; +Lorg/bouncycastle/util/Integers; +HSPLorg/bouncycastle/util/Integers;->valueOf(I)Ljava/lang/Integer; +Lorg/bouncycastle/util/Memoable; +Lorg/bouncycastle/util/Pack; +HSPLorg/bouncycastle/util/Pack;->bigEndianToInt([BI)I +HSPLorg/bouncycastle/util/Pack;->intToBigEndian(I[BI)V +Lorg/bouncycastle/util/Properties; +HSPLorg/bouncycastle/util/Properties;->()V +HSPLorg/bouncycastle/util/Properties;->getPropertyValue(Ljava/lang/String;)Ljava/lang/String; +HSPLorg/bouncycastle/util/Properties;->isOverrideSet(Ljava/lang/String;)Z +HSPLorg/bouncycastle/util/Properties;->isSetTrue(Ljava/lang/String;)Z +Lorg/bouncycastle/util/Properties$1; +HSPLorg/bouncycastle/util/Properties$1;->(Ljava/lang/String;)V +HSPLorg/bouncycastle/util/Properties$1;->run()Ljava/lang/Object; +Lorg/bouncycastle/util/Properties$2; +HSPLorg/bouncycastle/util/Properties$2;->(Ljava/lang/String;)V +HSPLorg/bouncycastle/util/Properties$2;->run()Ljava/lang/Object; +Lorg/bouncycastle/util/Strings; +HSPLorg/bouncycastle/util/Strings;->()V +HSPLorg/bouncycastle/util/Strings;->toLowerCase(Ljava/lang/String;)Ljava/lang/String; +HSPLorg/bouncycastle/util/Strings;->toUpperCase(Ljava/lang/String;)Ljava/lang/String; +Lorg/bouncycastle/util/Strings$1; +HSPLorg/bouncycastle/util/Strings$1;->()V +HSPLorg/bouncycastle/util/Strings$1;->run()Ljava/lang/Object; +HSPLorg/bouncycastle/util/Strings$1;->run()Ljava/lang/String; +Lorg/bouncycastle/util/encoders/Encoder; +Lorg/bouncycastle/util/encoders/Hex; +HSPLorg/bouncycastle/util/encoders/Hex;->()V +HSPLorg/bouncycastle/util/encoders/Hex;->decode(Ljava/lang/String;)[B +HSPLorg/bouncycastle/util/encoders/Hex;->decodeStrict(Ljava/lang/String;)[B +Lorg/bouncycastle/util/encoders/HexEncoder; +HSPLorg/bouncycastle/util/encoders/HexEncoder;->()V +HSPLorg/bouncycastle/util/encoders/HexEncoder;->decode(Ljava/lang/String;Ljava/io/OutputStream;)I +HSPLorg/bouncycastle/util/encoders/HexEncoder;->decodeStrict(Ljava/lang/String;II)[B +HSPLorg/bouncycastle/util/encoders/HexEncoder;->ignore(C)Z +HSPLorg/bouncycastle/util/encoders/HexEncoder;->initialiseDecodingTable()V +Lorg/kodein/di/Contexes; +HSPLorg/kodein/di/Contexes;->()V +HSPLorg/kodein/di/Contexes;->()V +HSPLorg/kodein/di/Contexes;->getAnyDIContext()Lorg/kodein/di/DIContext; +Lorg/kodein/di/Copy; +Lorg/kodein/di/Copy$None; +HSPLorg/kodein/di/Copy$None;->()V +HSPLorg/kodein/di/Copy$None;->()V +HSPLorg/kodein/di/Copy$None;->keySet(Lorg/kodein/di/DITree;)Ljava/util/Set; +Lorg/kodein/di/DI; +HSPLorg/kodein/di/DI;->()V +Lorg/kodein/di/DI$BindBuilder; +Lorg/kodein/di/DI$BindBuilder$WithScope; +Lorg/kodein/di/DI$Builder; +Lorg/kodein/di/DI$Builder$DefaultImpls; +HSPLorg/kodein/di/DI$Builder$DefaultImpls;->import$default(Lorg/kodein/di/DI$Builder;Lorg/kodein/di/DI$Module;ZILjava/lang/Object;)V +HSPLorg/kodein/di/DI$Builder$DefaultImpls;->importOnce$default(Lorg/kodein/di/DI$Builder;Lorg/kodein/di/DI$Module;ZILjava/lang/Object;)V +Lorg/kodein/di/DI$Builder$TypeBinder; +Lorg/kodein/di/DI$Companion; +HSPLorg/kodein/di/DI$Companion;->()V +HSPLorg/kodein/di/DI$Companion;->()V +HSPLorg/kodein/di/DI$Companion;->getDefaultFullContainerTreeOnError()Z +HSPLorg/kodein/di/DI$Companion;->getDefaultFullDescriptionOnError()Z +HSPLorg/kodein/di/DI$Companion;->lazy$default(Lorg/kodein/di/DI$Companion;ZLkotlin/jvm/functions/Function1;ILjava/lang/Object;)Lorg/kodein/di/LazyDI; +HSPLorg/kodein/di/DI$Companion;->lazy(ZLkotlin/jvm/functions/Function1;)Lorg/kodein/di/LazyDI; +Lorg/kodein/di/DI$Companion$lazy$1; +HSPLorg/kodein/di/DI$Companion$lazy$1;->(ZLkotlin/jvm/functions/Function1;)V +HSPLorg/kodein/di/DI$Companion$lazy$1;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/DI$Companion$lazy$1;->invoke()Lorg/kodein/di/DI; +Lorg/kodein/di/DI$DefaultImpls; +HSPLorg/kodein/di/DI$DefaultImpls;->getDi(Lorg/kodein/di/DI;)Lorg/kodein/di/DI; +HSPLorg/kodein/di/DI$DefaultImpls;->getDiContext(Lorg/kodein/di/DI;)Lorg/kodein/di/DIContext; +HSPLorg/kodein/di/DI$DefaultImpls;->getDiTrigger(Lorg/kodein/di/DI;)Lorg/kodein/di/DITrigger; +Lorg/kodein/di/DI$Key; +HSPLorg/kodein/di/DI$Key;->(Lorg/kodein/type/TypeToken;Lorg/kodein/type/TypeToken;Lorg/kodein/type/TypeToken;Ljava/lang/Object;)V +HSPLorg/kodein/di/DI$Key;->copy$default(Lorg/kodein/di/DI$Key;Lorg/kodein/type/TypeToken;Lorg/kodein/type/TypeToken;Lorg/kodein/type/TypeToken;Ljava/lang/Object;ILjava/lang/Object;)Lorg/kodein/di/DI$Key; +HSPLorg/kodein/di/DI$Key;->copy(Lorg/kodein/type/TypeToken;Lorg/kodein/type/TypeToken;Lorg/kodein/type/TypeToken;Ljava/lang/Object;)Lorg/kodein/di/DI$Key; +HSPLorg/kodein/di/DI$Key;->equals(Ljava/lang/Object;)Z +HSPLorg/kodein/di/DI$Key;->getArgType()Lorg/kodein/type/TypeToken; +HSPLorg/kodein/di/DI$Key;->getContextType()Lorg/kodein/type/TypeToken; +HSPLorg/kodein/di/DI$Key;->getTag()Ljava/lang/Object; +HSPLorg/kodein/di/DI$Key;->getType()Lorg/kodein/type/TypeToken; +HSPLorg/kodein/di/DI$Key;->hashCode()I +Lorg/kodein/di/DI$MainBuilder; +Lorg/kodein/di/DI$MainBuilder$DefaultImpls; +HSPLorg/kodein/di/DI$MainBuilder$DefaultImpls;->extend$default(Lorg/kodein/di/DI$MainBuilder;Lorg/kodein/di/DI;ZLorg/kodein/di/Copy;ILjava/lang/Object;)V +Lorg/kodein/di/DI$Module; +HSPLorg/kodein/di/DI$Module;->(Ljava/lang/String;ZLjava/lang/String;Lkotlin/jvm/functions/Function1;)V +HSPLorg/kodein/di/DI$Module;->(Ljava/lang/String;ZLjava/lang/String;Lkotlin/jvm/functions/Function1;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLorg/kodein/di/DI$Module;->(ZLjava/lang/String;Lkotlin/jvm/functions/Function1;)V +HSPLorg/kodein/di/DI$Module;->getAllowSilentOverride()Z +HSPLorg/kodein/di/DI$Module;->getInit()Lkotlin/jvm/functions/Function1; +HSPLorg/kodein/di/DI$Module;->getName()Ljava/lang/String; +HSPLorg/kodein/di/DI$Module;->getPrefix()Ljava/lang/String; +Lorg/kodein/di/DI$NotFoundException; +Lorg/kodein/di/DIAware; +Lorg/kodein/di/DIAware$DefaultImpls; +HSPLorg/kodein/di/DIAware$DefaultImpls;->getDiContext(Lorg/kodein/di/DIAware;)Lorg/kodein/di/DIContext; +HSPLorg/kodein/di/DIAware$DefaultImpls;->getDiTrigger(Lorg/kodein/di/DIAware;)Lorg/kodein/di/DITrigger; +Lorg/kodein/di/DIAwareKt; +HSPLorg/kodein/di/DIAwareKt;->Instance(Lorg/kodein/di/DIAware;Lorg/kodein/type/TypeToken;Ljava/lang/Object;)Lorg/kodein/di/LazyDelegate; +HSPLorg/kodein/di/DIAwareKt;->On$default(Lorg/kodein/di/DIAware;Lorg/kodein/di/DIContext;Lorg/kodein/di/DITrigger;ILjava/lang/Object;)Lorg/kodein/di/DI; +HSPLorg/kodein/di/DIAwareKt;->On(Lorg/kodein/di/DIAware;Lorg/kodein/di/DIContext;Lorg/kodein/di/DITrigger;)Lorg/kodein/di/DI; +HSPLorg/kodein/di/DIAwareKt;->getAnyDIContext()Lorg/kodein/di/DIContext; +HSPLorg/kodein/di/DIAwareKt;->getDirect(Lorg/kodein/di/DIAware;)Lorg/kodein/di/DirectDI; +Lorg/kodein/di/DIAwareKt$Instance$1; +HSPLorg/kodein/di/DIAwareKt$Instance$1;->(Lorg/kodein/di/DIAware;Lorg/kodein/type/TypeToken;Ljava/lang/Object;)V +HSPLorg/kodein/di/DIAwareKt$Instance$1;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/kodein/di/DIAwareKt$Instance$1;->invoke(Lorg/kodein/di/DIContext;Ljava/lang/String;)Ljava/lang/Object; +Lorg/kodein/di/DIContainer; +Lorg/kodein/di/DIContainer$Builder; +Lorg/kodein/di/DIContainer$DefaultImpls; +HSPLorg/kodein/di/DIContainer$DefaultImpls;->allFactories$default(Lorg/kodein/di/DIContainer;Lorg/kodein/di/DI$Key;Ljava/lang/Object;IILjava/lang/Object;)Ljava/util/List; +HSPLorg/kodein/di/DIContainer$DefaultImpls;->allProviders$default(Lorg/kodein/di/DIContainer;Lorg/kodein/di/DI$Key;Ljava/lang/Object;IILjava/lang/Object;)Ljava/util/List; +HSPLorg/kodein/di/DIContainer$DefaultImpls;->allProviders(Lorg/kodein/di/DIContainer;Lorg/kodein/di/DI$Key;Ljava/lang/Object;I)Ljava/util/List; +HSPLorg/kodein/di/DIContainer$DefaultImpls;->factory$default(Lorg/kodein/di/DIContainer;Lorg/kodein/di/DI$Key;Ljava/lang/Object;IILjava/lang/Object;)Lkotlin/jvm/functions/Function1; +HSPLorg/kodein/di/DIContainer$DefaultImpls;->provider$default(Lorg/kodein/di/DIContainer;Lorg/kodein/di/DI$Key;Ljava/lang/Object;IILjava/lang/Object;)Lkotlin/jvm/functions/Function0; +HSPLorg/kodein/di/DIContainer$DefaultImpls;->provider(Lorg/kodein/di/DIContainer;Lorg/kodein/di/DI$Key;Ljava/lang/Object;I)Lkotlin/jvm/functions/Function0; +Lorg/kodein/di/DIContainer$DefaultImpls$allProviders$lambda$3$$inlined$toProvider$1; +HSPLorg/kodein/di/DIContainer$DefaultImpls$allProviders$lambda$3$$inlined$toProvider$1;->(Lkotlin/jvm/functions/Function1;)V +HSPLorg/kodein/di/DIContainer$DefaultImpls$allProviders$lambda$3$$inlined$toProvider$1;->invoke()Ljava/lang/Object; +Lorg/kodein/di/DIContainer$DefaultImpls$provider$$inlined$toProvider$1; +HSPLorg/kodein/di/DIContainer$DefaultImpls$provider$$inlined$toProvider$1;->(Lkotlin/jvm/functions/Function1;)V +HSPLorg/kodein/di/DIContainer$DefaultImpls$provider$$inlined$toProvider$1;->invoke()Ljava/lang/Object; +Lorg/kodein/di/DIContext; +HSPLorg/kodein/di/DIContext;->()V +Lorg/kodein/di/DIContext$Companion; +HSPLorg/kodein/di/DIContext$Companion;->()V +HSPLorg/kodein/di/DIContext$Companion;->()V +HSPLorg/kodein/di/DIContext$Companion;->invoke(Lorg/kodein/type/TypeToken;Ljava/lang/Object;)Lorg/kodein/di/DIContext; +Lorg/kodein/di/DIContext$Value; +HSPLorg/kodein/di/DIContext$Value;->(Lorg/kodein/type/TypeToken;Ljava/lang/Object;)V +HSPLorg/kodein/di/DIContext$Value;->getType()Lorg/kodein/type/TypeToken; +HSPLorg/kodein/di/DIContext$Value;->getValue()Ljava/lang/Object; +Lorg/kodein/di/DIDefining; +HSPLorg/kodein/di/DIDefining;->(Lorg/kodein/di/bindings/DIBinding;Ljava/lang/String;)V +HSPLorg/kodein/di/DIDefining;->getBinding()Lorg/kodein/di/bindings/DIBinding; +HSPLorg/kodein/di/DIDefining;->getFromModule()Ljava/lang/String; +Lorg/kodein/di/DIDefinition; +HSPLorg/kodein/di/DIDefinition;->(Lorg/kodein/di/bindings/DIBinding;Ljava/lang/String;Lorg/kodein/di/DITree;)V +HSPLorg/kodein/di/DIDefinition;->getTree()Lorg/kodein/di/DITree; +Lorg/kodein/di/DIProperty; +HSPLorg/kodein/di/DIProperty;->(Lorg/kodein/di/DITrigger;Lorg/kodein/di/DIContext;Lkotlin/jvm/functions/Function2;)V +HSPLorg/kodein/di/DIProperty;->access$getGet$p(Lorg/kodein/di/DIProperty;)Lkotlin/jvm/functions/Function2; +HSPLorg/kodein/di/DIProperty;->getOriginalContext()Lorg/kodein/di/DIContext; +HSPLorg/kodein/di/DIProperty;->provideDelegate(Ljava/lang/Object;Lkotlin/reflect/KProperty;)Lkotlin/Lazy; +Lorg/kodein/di/DIProperty$provideDelegate$1; +HSPLorg/kodein/di/DIProperty$provideDelegate$1;->(Ljava/lang/Object;Lorg/kodein/di/DIProperty;Lkotlin/reflect/KProperty;)V +HSPLorg/kodein/di/DIProperty$provideDelegate$1;->invoke()Ljava/lang/Object; +Lorg/kodein/di/DITree; +Lorg/kodein/di/DITree$DefaultImpls; +HSPLorg/kodein/di/DITree$DefaultImpls;->find$default(Lorg/kodein/di/DITree;Lorg/kodein/di/DI$Key;IZILjava/lang/Object;)Ljava/util/List; +Lorg/kodein/di/DITrigger; +Lorg/kodein/di/DIWrapper; +HSPLorg/kodein/di/DIWrapper;->(Lorg/kodein/di/DI;Lorg/kodein/di/DIContext;Lorg/kodein/di/DITrigger;)V +HSPLorg/kodein/di/DIWrapper;->(Lorg/kodein/di/DIAware;Lorg/kodein/di/DIContext;Lorg/kodein/di/DITrigger;)V +HSPLorg/kodein/di/DIWrapper;->getContainer()Lorg/kodein/di/DIContainer; +HSPLorg/kodein/di/DIWrapper;->getDi()Lorg/kodein/di/DI; +HSPLorg/kodein/di/DIWrapper;->getDiContext()Lorg/kodein/di/DIContext; +Lorg/kodein/di/DirectDI; +Lorg/kodein/di/DirectDI$DefaultImpls; +HSPLorg/kodein/di/DirectDI$DefaultImpls;->getDi(Lorg/kodein/di/DirectDI;)Lorg/kodein/di/DI; +Lorg/kodein/di/DirectDIAware; +Lorg/kodein/di/DirectDIBase; +Lorg/kodein/di/DirectDIBase$DefaultImpls; +HSPLorg/kodein/di/DirectDIBase$DefaultImpls;->getDi(Lorg/kodein/di/DirectDIBase;)Lorg/kodein/di/DI; +Lorg/kodein/di/LazyDI; +HSPLorg/kodein/di/LazyDI;->(Lkotlin/jvm/functions/Function0;)V +HSPLorg/kodein/di/LazyDI;->getBaseDI()Lorg/kodein/di/DI; +HSPLorg/kodein/di/LazyDI;->getContainer()Lorg/kodein/di/DIContainer; +HSPLorg/kodein/di/LazyDI;->getDi()Lorg/kodein/di/DI; +HSPLorg/kodein/di/LazyDI;->getDiContext()Lorg/kodein/di/DIContext; +HSPLorg/kodein/di/LazyDI;->getDiTrigger()Lorg/kodein/di/DITrigger; +HSPLorg/kodein/di/LazyDI;->getValue(Ljava/lang/Object;Lkotlin/reflect/KProperty;)Lorg/kodein/di/LazyDI; +Lorg/kodein/di/LazyDelegate; +Lorg/kodein/di/SearchSpecs; +HSPLorg/kodein/di/SearchSpecs;->(Lorg/kodein/type/TypeToken;Lorg/kodein/type/TypeToken;Lorg/kodein/type/TypeToken;Ljava/lang/Object;)V +HSPLorg/kodein/di/SearchSpecs;->getArgType()Lorg/kodein/type/TypeToken; +HSPLorg/kodein/di/SearchSpecs;->getContextType()Lorg/kodein/type/TypeToken; +HSPLorg/kodein/di/SearchSpecs;->getTag()Ljava/lang/Object; +HSPLorg/kodein/di/SearchSpecs;->getType()Lorg/kodein/type/TypeToken; +Lorg/kodein/di/SearchSpecs$NoDefinedTag; +HSPLorg/kodein/di/SearchSpecs$NoDefinedTag;->()V +HSPLorg/kodein/di/SearchSpecs$NoDefinedTag;->()V +Lorg/kodein/di/android/ClosestKt; +HSPLorg/kodein/di/android/ClosestKt;->access$closestDI(Ljava/lang/Object;Landroid/content/Context;)Lorg/kodein/di/DI; +HSPLorg/kodein/di/android/ClosestKt;->closestDI()Lorg/kodein/di/android/DIPropertyDelegateProvider; +HSPLorg/kodein/di/android/ClosestKt;->closestDI(Ljava/lang/Object;Landroid/content/Context;)Lorg/kodein/di/DI; +HSPLorg/kodein/di/android/ClosestKt;->closestDI(Lkotlin/jvm/functions/Function0;)Lorg/kodein/di/android/DIPropertyDelegateProvider; +Lorg/kodein/di/android/ContextDIPropertyDelegateProvider; +HSPLorg/kodein/di/android/ContextDIPropertyDelegateProvider;->()V +HSPLorg/kodein/di/android/ContextDIPropertyDelegateProvider;->provideDelegate(Landroid/content/Context;Lkotlin/reflect/KProperty;)Lkotlin/Lazy; +HSPLorg/kodein/di/android/ContextDIPropertyDelegateProvider;->provideDelegate(Ljava/lang/Object;Lkotlin/reflect/KProperty;)Lkotlin/Lazy; +Lorg/kodein/di/android/ContextDIPropertyDelegateProvider$provideDelegate$1; +HSPLorg/kodein/di/android/ContextDIPropertyDelegateProvider$provideDelegate$1;->(Landroid/content/Context;)V +HSPLorg/kodein/di/android/ContextDIPropertyDelegateProvider$provideDelegate$1;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ContextDIPropertyDelegateProvider$provideDelegate$1;->invoke()Lorg/kodein/di/DI; +Lorg/kodein/di/android/DIPropertyDelegateProvider; +Lorg/kodein/di/android/LazyContextDIPropertyDelegateProvider; +HSPLorg/kodein/di/android/LazyContextDIPropertyDelegateProvider;->(Lkotlin/jvm/functions/Function0;)V +HSPLorg/kodein/di/android/LazyContextDIPropertyDelegateProvider;->access$getGetContext$p(Lorg/kodein/di/android/LazyContextDIPropertyDelegateProvider;)Lkotlin/jvm/functions/Function0; +HSPLorg/kodein/di/android/LazyContextDIPropertyDelegateProvider;->provideDelegate(Ljava/lang/Object;Lkotlin/reflect/KProperty;)Lkotlin/Lazy; +Lorg/kodein/di/android/LazyContextDIPropertyDelegateProvider$provideDelegate$1; +HSPLorg/kodein/di/android/LazyContextDIPropertyDelegateProvider$provideDelegate$1;->(Ljava/lang/Object;Lorg/kodein/di/android/LazyContextDIPropertyDelegateProvider;)V +HSPLorg/kodein/di/android/LazyContextDIPropertyDelegateProvider$provideDelegate$1;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/LazyContextDIPropertyDelegateProvider$provideDelegate$1;->invoke()Lorg/kodein/di/DI; +Lorg/kodein/di/android/ModuleKt; +HSPLorg/kodein/di/android/ModuleKt;->()V +HSPLorg/kodein/di/android/ModuleKt;->androidCoreModule(Landroid/app/Application;)Lorg/kodein/di/DI$Module; +HSPLorg/kodein/di/android/ModuleKt;->getAndroidCoreContextTranslators()Lorg/kodein/di/DI$Module; +Lorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1;->invoke(Lorg/kodein/di/DI$Builder;)V +Lorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$2; +HSPLorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$2;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$2;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$3; +HSPLorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$3;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$3;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$4; +HSPLorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$4;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$4;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$5; +HSPLorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$5;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$5;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$invoke$$inlined$generic$10; +HSPLorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$invoke$$inlined$generic$10;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$invoke$$inlined$generic$2; +HSPLorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$invoke$$inlined$generic$2;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$invoke$$inlined$generic$3; +HSPLorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$invoke$$inlined$generic$3;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$invoke$$inlined$generic$4; +HSPLorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$invoke$$inlined$generic$4;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$invoke$$inlined$generic$5; +HSPLorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$invoke$$inlined$generic$5;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$invoke$$inlined$generic$6; +HSPLorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$invoke$$inlined$generic$6;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$invoke$$inlined$generic$7; +HSPLorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$invoke$$inlined$generic$7;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$invoke$$inlined$generic$8; +HSPLorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$invoke$$inlined$generic$8;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$invoke$$inlined$generic$9; +HSPLorg/kodein/di/android/ModuleKt$androidCoreContextTranslators$1$invoke$$inlined$generic$9;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1;->(Landroid/app/Application;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1;->invoke(Lorg/kodein/di/DI$Builder;)V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$1;->(Landroid/app/Application;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$1;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$1;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$1$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$1$1;->(Landroid/app/Application;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$1$1;->invoke(Lorg/kodein/di/bindings/NoArgBindingDI;)Landroid/app/Application; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$1$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$1$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$10; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$10;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$10;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$10;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$10$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$10$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$10$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$10$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$10$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$10$invoke$$inlined$generic$2; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$10$invoke$$inlined$generic$2;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$11; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$11;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$11;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$11;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$11$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$11$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$11$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$11$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$11$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$12; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$12;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$12;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$12;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$12$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$12$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$12$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$12$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$12$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$13; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$13;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$13;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$13;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$13$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$13$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$13$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$13$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$13$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$14; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$14;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$14;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$14;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$14$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$14$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$14$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$14$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$14$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$15; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$15;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$15;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$15;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$15$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$15$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$15$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$15$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$15$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$16; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$16;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$16;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$16;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$16$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$16$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$16$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$16$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$16$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$17; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$17;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$17;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$17;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$17$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$17$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$17$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$17$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$17$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$18; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$18;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$18;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$18;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$18$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$18$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$18$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$18$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$18$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$19; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$19;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$19;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$19;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$19$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$19$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$19$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$19$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$19$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$2; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$2;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$2;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$2;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$2$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$2$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$2$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$2$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$2$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$20; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$20;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$20;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$20;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$20$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$20$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$20$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$20$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$20$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$21; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$21;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$21;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$21;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$21$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$21$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$21$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$21$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$21$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$22; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$22;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$22;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$22;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$22$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$22$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$22$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$22$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$22$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$23; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$23;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$23;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$23;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$23$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$23$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$23$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$23$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$23$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$24; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$24;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$24;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$24;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$24$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$24$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$24$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$24$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$24$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$25; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$25;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$25;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$25;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$25$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$25$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$25$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$25$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$25$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$26; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$26;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$26;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$26;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$26$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$26$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$26$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$26$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$26$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$27; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$27;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$27;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$27;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$27$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$27$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$27$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$27$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$27$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$28; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$28;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$28;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$28;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$28$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$28$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$28$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$28$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$28$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$29; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$29;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$29;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$29;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$29$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$29$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$29$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$29$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$29$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$3; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$3;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$3;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$3;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$3$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$3$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$3$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$3$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$3$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$30; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$30;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$30;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$30;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$30$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$30$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$30$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$30$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$30$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$31; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$31;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$31;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$31;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$31$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$31$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$31$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$31$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$31$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$32; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$32;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$32;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$32;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$32$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$32$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$32$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$32$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$32$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$33; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$33;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$33;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$33;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$33$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$33$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$33$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$33$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$33$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$34; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$34;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$34;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$34;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$34$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$34$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$34$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$34$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$34$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$35; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$35;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$35;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$35;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$35$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$35$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$35$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$35$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$35$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$36; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$36;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$36;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$36;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$36$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$36$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$36$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$36$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$36$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$37; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$37;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$37;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$37;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$37$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$37$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$37$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$37$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$37$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$38; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$38;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$38;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$38;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$38$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$38$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$38$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$38$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$38$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$39; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$39;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$39;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$39;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$39$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$39$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$39$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$39$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$39$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$4; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$4;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$4;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$4;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$4$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$4$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$4$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$4$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$4$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$40; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$40;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$40;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$40;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$40$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$40$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$40$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$40$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$40$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$41; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$41;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$41;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$41;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$41$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$41$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$41$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$41$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$41$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$42; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$42;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$42;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$42;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$42$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$42$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$42$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$42$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$42$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$43; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$43;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$43;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$43;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$43$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$43$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$43$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$43$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$43$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$44; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$44;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$44;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$44;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$44$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$44$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$44$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$44$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$44$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$45; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$45;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$45;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$45;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$45$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$45$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$45$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$45$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$45$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$46; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$46;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$46;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$46;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$46$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$46$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$46$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$46$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$46$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$47; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$47;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$47;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$47;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$47$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$47$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$47$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$47$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$47$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$48; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$48;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$48;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$48;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$48$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$48$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$48$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$48$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$48$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$49; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$49;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$49;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$49;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$49$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$49$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$49$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$49$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$49$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$5; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$5;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$5;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$5;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$5$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$5$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$5$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$5$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$5$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$50; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$50;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$50;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$50;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$50$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$50$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$50$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$50$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$50$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$51; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$51;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$51;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$51;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$51$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$51$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$51$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$51$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$51$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$52; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$52;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$52;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$52;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$52$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$52$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$52$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$52$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$52$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$53; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$53;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$53;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$53;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$53$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$53$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$53$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$53$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$53$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$54; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$54;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$54;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$54;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$54$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$54$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$54$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$54$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$54$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$55; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$55;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$55;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$55;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$55$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$55$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$55$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$55$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$55$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$56; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$56;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$56;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$56;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$56$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$56$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$56$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$56$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$56$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$57; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$57;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$57;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$57;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$57$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$57$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$57$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$57$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$57$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$58; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$58;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$58;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$58;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$58$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$58$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$58$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$58$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$58$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$59; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$59;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$59;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$59;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$59$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$59$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$59$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$59$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$59$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$6; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$6;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$6;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$6;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$6$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$6$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$6$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$6$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$6$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$60; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$60;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$60;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$60;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$60$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$60$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$60$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$60$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$60$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$61; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$61;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$61;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$61;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$61$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$61$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$61$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$61$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$61$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$62; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$62;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$62;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$62;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$62$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$62$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$62$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$62$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$62$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$63; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$63;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$63;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$63;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$63$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$63$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$63$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$63$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$63$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$64; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$64;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$64;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$64;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$64$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$64$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$64$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$64$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$64$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$7; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$7;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$7;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$7;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$7$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$7$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$7$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$7$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$7$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$8; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$8;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$8;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$8;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$8$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$8$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$8$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$8$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$8$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$9; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$9;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$9;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$9;->invoke()Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$9$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$9$1;->()V +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$9$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$9$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$9$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/ModuleKt$androidCoreModule$1$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/ModuleKt$androidCoreModule$1$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/x/ModuleKt; +HSPLorg/kodein/di/android/x/ModuleKt;->()V +HSPLorg/kodein/di/android/x/ModuleKt;->androidXModule(Landroid/app/Application;)Lorg/kodein/di/DI$Module; +HSPLorg/kodein/di/android/x/ModuleKt;->getAndroidXContextTranslators()Lorg/kodein/di/DI$Module; +Lorg/kodein/di/android/x/ModuleKt$androidXContextTranslators$1; +HSPLorg/kodein/di/android/x/ModuleKt$androidXContextTranslators$1;->()V +HSPLorg/kodein/di/android/x/ModuleKt$androidXContextTranslators$1;->()V +HSPLorg/kodein/di/android/x/ModuleKt$androidXContextTranslators$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/kodein/di/android/x/ModuleKt$androidXContextTranslators$1;->invoke(Lorg/kodein/di/DI$Builder;)V +Lorg/kodein/di/android/x/ModuleKt$androidXContextTranslators$1$1; +HSPLorg/kodein/di/android/x/ModuleKt$androidXContextTranslators$1$1;->()V +HSPLorg/kodein/di/android/x/ModuleKt$androidXContextTranslators$1$1;->()V +Lorg/kodein/di/android/x/ModuleKt$androidXContextTranslators$1$2; +HSPLorg/kodein/di/android/x/ModuleKt$androidXContextTranslators$1$2;->()V +HSPLorg/kodein/di/android/x/ModuleKt$androidXContextTranslators$1$2;->()V +Lorg/kodein/di/android/x/ModuleKt$androidXContextTranslators$1$3; +HSPLorg/kodein/di/android/x/ModuleKt$androidXContextTranslators$1$3;->()V +HSPLorg/kodein/di/android/x/ModuleKt$androidXContextTranslators$1$3;->()V +Lorg/kodein/di/android/x/ModuleKt$androidXContextTranslators$1$invoke$$inlined$generic$1; +HSPLorg/kodein/di/android/x/ModuleKt$androidXContextTranslators$1$invoke$$inlined$generic$1;->()V +Lorg/kodein/di/android/x/ModuleKt$androidXContextTranslators$1$invoke$$inlined$generic$2; +HSPLorg/kodein/di/android/x/ModuleKt$androidXContextTranslators$1$invoke$$inlined$generic$2;->()V +Lorg/kodein/di/android/x/ModuleKt$androidXContextTranslators$1$invoke$$inlined$generic$3; +HSPLorg/kodein/di/android/x/ModuleKt$androidXContextTranslators$1$invoke$$inlined$generic$3;->()V +Lorg/kodein/di/android/x/ModuleKt$androidXContextTranslators$1$invoke$$inlined$generic$4; +HSPLorg/kodein/di/android/x/ModuleKt$androidXContextTranslators$1$invoke$$inlined$generic$4;->()V +Lorg/kodein/di/android/x/ModuleKt$androidXContextTranslators$1$invoke$$inlined$generic$5; +HSPLorg/kodein/di/android/x/ModuleKt$androidXContextTranslators$1$invoke$$inlined$generic$5;->()V +Lorg/kodein/di/android/x/ModuleKt$androidXContextTranslators$1$invoke$$inlined$generic$6; +HSPLorg/kodein/di/android/x/ModuleKt$androidXContextTranslators$1$invoke$$inlined$generic$6;->()V +Lorg/kodein/di/android/x/ModuleKt$androidXModule$1; +HSPLorg/kodein/di/android/x/ModuleKt$androidXModule$1;->(Landroid/app/Application;)V +HSPLorg/kodein/di/android/x/ModuleKt$androidXModule$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/kodein/di/android/x/ModuleKt$androidXModule$1;->invoke(Lorg/kodein/di/DI$Builder;)V +Lorg/kodein/di/bindings/Binding; +Lorg/kodein/di/bindings/BindingDI; +Lorg/kodein/di/bindings/CompositeContextTranslator; +Lorg/kodein/di/bindings/ContextTranslator; +Lorg/kodein/di/bindings/DIBinding; +Lorg/kodein/di/bindings/DIBinding$Copier; +HSPLorg/kodein/di/bindings/DIBinding$Copier;->()V +Lorg/kodein/di/bindings/DIBinding$Copier$Companion; +HSPLorg/kodein/di/bindings/DIBinding$Copier$Companion;->()V +HSPLorg/kodein/di/bindings/DIBinding$Copier$Companion;->()V +HSPLorg/kodein/di/bindings/DIBinding$Copier$Companion;->invoke(Lkotlin/jvm/functions/Function1;)Lorg/kodein/di/bindings/DIBinding$Copier; +Lorg/kodein/di/bindings/DIBinding$Copier$Companion$invoke$1; +HSPLorg/kodein/di/bindings/DIBinding$Copier$Companion$invoke$1;->(Lkotlin/jvm/functions/Function1;)V +Lorg/kodein/di/bindings/DIBinding$DefaultImpls; +HSPLorg/kodein/di/bindings/DIBinding$DefaultImpls;->getSupportSubTypes(Lorg/kodein/di/bindings/DIBinding;)Z +Lorg/kodein/di/bindings/ErasedContext; +HSPLorg/kodein/di/bindings/ErasedContext;->()V +HSPLorg/kodein/di/bindings/ErasedContext;->()V +HSPLorg/kodein/di/bindings/ErasedContext;->getType()Lorg/kodein/type/TypeToken; +HSPLorg/kodein/di/bindings/ErasedContext;->getValue()Ljava/lang/Object; +HSPLorg/kodein/di/bindings/ErasedContext;->getValue()Lorg/kodein/di/bindings/ErasedContext; +Lorg/kodein/di/bindings/ExternalSource; +Lorg/kodein/di/bindings/Factory; +HSPLorg/kodein/di/bindings/Factory;->(Lorg/kodein/type/TypeToken;Lorg/kodein/type/TypeToken;Lorg/kodein/type/TypeToken;Lkotlin/jvm/functions/Function2;)V +HSPLorg/kodein/di/bindings/Factory;->access$getCreator$p(Lorg/kodein/di/bindings/Factory;)Lkotlin/jvm/functions/Function2; +HSPLorg/kodein/di/bindings/Factory;->getArgType()Lorg/kodein/type/TypeToken; +HSPLorg/kodein/di/bindings/Factory;->getContextType()Lorg/kodein/type/TypeToken; +HSPLorg/kodein/di/bindings/Factory;->getCreatedType()Lorg/kodein/type/TypeToken; +HSPLorg/kodein/di/bindings/Factory;->getFactory(Lorg/kodein/di/DI$Key;Lorg/kodein/di/bindings/BindingDI;)Lkotlin/jvm/functions/Function1; +HSPLorg/kodein/di/bindings/Factory;->getSupportSubTypes()Z +Lorg/kodein/di/bindings/Factory$getFactory$1; +HSPLorg/kodein/di/bindings/Factory$getFactory$1;->(Lorg/kodein/di/bindings/Factory;Lorg/kodein/di/bindings/BindingDI;)V +HSPLorg/kodein/di/bindings/Factory$getFactory$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lorg/kodein/di/bindings/Multiton; +HSPLorg/kodein/di/bindings/Multiton;->(Lorg/kodein/di/bindings/Scope;Lorg/kodein/type/TypeToken;ZLorg/kodein/type/TypeToken;Lorg/kodein/type/TypeToken;Lorg/kodein/di/bindings/RefMaker;ZLkotlin/jvm/functions/Function2;)V +HSPLorg/kodein/di/bindings/Multiton;->access$getCreator$p(Lorg/kodein/di/bindings/Multiton;)Lkotlin/jvm/functions/Function2; +HSPLorg/kodein/di/bindings/Multiton;->access$get_refMaker$p(Lorg/kodein/di/bindings/Multiton;)Lorg/kodein/di/bindings/RefMaker; +HSPLorg/kodein/di/bindings/Multiton;->access$get_scopeId$p(Lorg/kodein/di/bindings/Multiton;)Ljava/lang/Object; +HSPLorg/kodein/di/bindings/Multiton;->getArgType()Lorg/kodein/type/TypeToken; +HSPLorg/kodein/di/bindings/Multiton;->getContextType()Lorg/kodein/type/TypeToken; +HSPLorg/kodein/di/bindings/Multiton;->getFactory(Lorg/kodein/di/DI$Key;Lorg/kodein/di/bindings/BindingDI;)Lkotlin/jvm/functions/Function1; +HSPLorg/kodein/di/bindings/Multiton;->getScope()Lorg/kodein/di/bindings/Scope; +HSPLorg/kodein/di/bindings/Multiton;->getSupportSubTypes()Z +HSPLorg/kodein/di/bindings/Multiton;->getSync()Z +Lorg/kodein/di/bindings/Multiton$copier$1; +HSPLorg/kodein/di/bindings/Multiton$copier$1;->(Lorg/kodein/di/bindings/Multiton;)V +Lorg/kodein/di/bindings/Multiton$getFactory$1; +HSPLorg/kodein/di/bindings/Multiton$getFactory$1;->(Lkotlin/jvm/internal/Ref$ObjectRef;Lorg/kodein/di/bindings/Multiton;Lorg/kodein/di/bindings/BindingDI;)V +HSPLorg/kodein/di/bindings/Multiton$getFactory$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +Lorg/kodein/di/bindings/Multiton$getFactory$1$1; +HSPLorg/kodein/di/bindings/Multiton$getFactory$1$1;->(Lorg/kodein/di/bindings/Multiton;Lorg/kodein/di/bindings/BindingDI;Ljava/lang/Object;)V +HSPLorg/kodein/di/bindings/Multiton$getFactory$1$1;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/bindings/Multiton$getFactory$1$1;->invoke()Lorg/kodein/di/bindings/Reference; +Lorg/kodein/di/bindings/Multiton$getFactory$1$1$1; +HSPLorg/kodein/di/bindings/Multiton$getFactory$1$1$1;->(Lorg/kodein/di/bindings/Multiton;Lorg/kodein/di/bindings/BindingDI;Ljava/lang/Object;)V +HSPLorg/kodein/di/bindings/Multiton$getFactory$1$1$1;->invoke()Ljava/lang/Object; +Lorg/kodein/di/bindings/NoArgBindingDI; +Lorg/kodein/di/bindings/NoArgBindingDIWrap; +HSPLorg/kodein/di/bindings/NoArgBindingDIWrap;->(Lorg/kodein/di/bindings/BindingDI;)V +HSPLorg/kodein/di/bindings/NoArgBindingDIWrap;->getDi()Lorg/kodein/di/DI; +HSPLorg/kodein/di/bindings/NoArgBindingDIWrap;->getDirectDI()Lorg/kodein/di/DirectDI; +Lorg/kodein/di/bindings/NoArgDIBinding; +Lorg/kodein/di/bindings/NoArgDIBinding$DefaultImpls; +HSPLorg/kodein/di/bindings/NoArgDIBinding$DefaultImpls;->getArgType(Lorg/kodein/di/bindings/NoArgDIBinding;)Lorg/kodein/type/TypeToken; +HSPLorg/kodein/di/bindings/NoArgDIBinding$DefaultImpls;->getSupportSubTypes(Lorg/kodein/di/bindings/NoArgDIBinding;)Z +Lorg/kodein/di/bindings/NoScope; +HSPLorg/kodein/di/bindings/NoScope;->()V +HSPLorg/kodein/di/bindings/NoScope;->getRegistry(Ljava/lang/Object;)Lorg/kodein/di/bindings/ScopeRegistry; +HSPLorg/kodein/di/bindings/NoScope;->getRegistry(Ljava/lang/Object;)Lorg/kodein/di/bindings/StandardScopeRegistry; +Lorg/kodein/di/bindings/Provider; +HSPLorg/kodein/di/bindings/Provider;->(Lorg/kodein/type/TypeToken;Lorg/kodein/type/TypeToken;Lkotlin/jvm/functions/Function1;)V +HSPLorg/kodein/di/bindings/Provider;->getArgType()Lorg/kodein/type/TypeToken; +HSPLorg/kodein/di/bindings/Provider;->getContextType()Lorg/kodein/type/TypeToken; +HSPLorg/kodein/di/bindings/Provider;->getCreatedType()Lorg/kodein/type/TypeToken; +HSPLorg/kodein/di/bindings/Provider;->getCreator()Lkotlin/jvm/functions/Function1; +HSPLorg/kodein/di/bindings/Provider;->getFactory(Lorg/kodein/di/DI$Key;Lorg/kodein/di/bindings/BindingDI;)Lkotlin/jvm/functions/Function1; +HSPLorg/kodein/di/bindings/Provider;->getSupportSubTypes()Z +Lorg/kodein/di/bindings/Provider$getFactory$1; +HSPLorg/kodein/di/bindings/Provider$getFactory$1;->(Lorg/kodein/di/bindings/Provider;Lorg/kodein/di/bindings/BindingDI;)V +HSPLorg/kodein/di/bindings/Provider$getFactory$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/kodein/di/bindings/Provider$getFactory$1;->invoke(Lkotlin/Unit;)Ljava/lang/Object; +Lorg/kodein/di/bindings/RefMaker; +Lorg/kodein/di/bindings/Reference; +HSPLorg/kodein/di/bindings/Reference;->(Ljava/lang/Object;Lkotlin/jvm/functions/Function0;)V +HSPLorg/kodein/di/bindings/Reference;->component1()Ljava/lang/Object; +HSPLorg/kodein/di/bindings/Reference;->component2()Lkotlin/jvm/functions/Function0; +Lorg/kodein/di/bindings/Scope; +Lorg/kodein/di/bindings/ScopeCloseable; +Lorg/kodein/di/bindings/ScopeKey; +HSPLorg/kodein/di/bindings/ScopeKey;->(Ljava/lang/Object;Ljava/lang/Object;)V +HSPLorg/kodein/di/bindings/ScopeKey;->hashCode()I +Lorg/kodein/di/bindings/ScopeRegistry; +HSPLorg/kodein/di/bindings/ScopeRegistry;->()V +HSPLorg/kodein/di/bindings/ScopeRegistry;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lorg/kodein/di/bindings/ScopesKt; +Lorg/kodein/di/bindings/SimpleContextTranslator; +HSPLorg/kodein/di/bindings/SimpleContextTranslator;->(Lorg/kodein/type/TypeToken;Lorg/kodein/type/TypeToken;Lkotlin/jvm/functions/Function2;)V +HSPLorg/kodein/di/bindings/SimpleContextTranslator;->getContextType()Lorg/kodein/type/TypeToken; +HSPLorg/kodein/di/bindings/SimpleContextTranslator;->getScopeType()Lorg/kodein/type/TypeToken; +Lorg/kodein/di/bindings/Singleton; +HSPLorg/kodein/di/bindings/Singleton;->access$get_refMaker$p(Lorg/kodein/di/bindings/Singleton;)Lorg/kodein/di/bindings/RefMaker; +HSPLorg/kodein/di/bindings/Singleton;->access$get_scopeKey$p(Lorg/kodein/di/bindings/Singleton;)Lorg/kodein/di/bindings/ScopeKey; +HSPLorg/kodein/di/bindings/Singleton;->getArgType()Lorg/kodein/type/TypeToken; +HSPLorg/kodein/di/bindings/Singleton;->getContextType()Lorg/kodein/type/TypeToken; +HSPLorg/kodein/di/bindings/Singleton;->getCreatedType()Lorg/kodein/type/TypeToken; +HSPLorg/kodein/di/bindings/Singleton;->getCreator()Lkotlin/jvm/functions/Function1; +HSPLorg/kodein/di/bindings/Singleton;->getFactory(Lorg/kodein/di/DI$Key;Lorg/kodein/di/bindings/BindingDI;)Lkotlin/jvm/functions/Function1; +HSPLorg/kodein/di/bindings/Singleton;->getScope()Lorg/kodein/di/bindings/Scope; +HSPLorg/kodein/di/bindings/Singleton;->getSupportSubTypes()Z +HSPLorg/kodein/di/bindings/Singleton;->getSync()Z +Lorg/kodein/di/bindings/Singleton$copier$1; +HSPLorg/kodein/di/bindings/Singleton$copier$1;->(Lorg/kodein/di/bindings/Singleton;)V +Lorg/kodein/di/bindings/Singleton$getFactory$1; +HSPLorg/kodein/di/bindings/Singleton$getFactory$1;->(Lkotlin/jvm/internal/Ref$ObjectRef;Lorg/kodein/di/bindings/Singleton;Lorg/kodein/di/bindings/BindingDI;)V +HSPLorg/kodein/di/bindings/Singleton$getFactory$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/kodein/di/bindings/Singleton$getFactory$1;->invoke(Lkotlin/Unit;)Ljava/lang/Object; +Lorg/kodein/di/bindings/Singleton$getFactory$1$1; +HSPLorg/kodein/di/bindings/Singleton$getFactory$1$1;->(Lorg/kodein/di/bindings/Singleton;Lorg/kodein/di/bindings/BindingDI;)V +HSPLorg/kodein/di/bindings/Singleton$getFactory$1$1;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/bindings/Singleton$getFactory$1$1;->invoke()Lorg/kodein/di/bindings/Reference; +Lorg/kodein/di/bindings/Singleton$getFactory$1$1$1; +HSPLorg/kodein/di/bindings/Singleton$getFactory$1$1$1;->(Lorg/kodein/di/bindings/Singleton;Lorg/kodein/di/bindings/BindingDI;)V +HSPLorg/kodein/di/bindings/Singleton$getFactory$1$1$1;->invoke()Ljava/lang/Object; +Lorg/kodein/di/bindings/SingletonReference; +HSPLorg/kodein/di/bindings/SingletonReference;->()V +HSPLorg/kodein/di/bindings/SingletonReference;->()V +HSPLorg/kodein/di/bindings/SingletonReference;->make(Lkotlin/jvm/functions/Function0;)Lorg/kodein/di/bindings/Reference; +Lorg/kodein/di/bindings/SingletonReference$make$1; +HSPLorg/kodein/di/bindings/SingletonReference$make$1;->(Ljava/lang/Object;)V +HSPLorg/kodein/di/bindings/SingletonReference$make$1;->invoke()Ljava/lang/Object; +Lorg/kodein/di/bindings/StandardScopeRegistry; +HSPLorg/kodein/di/bindings/StandardScopeRegistry;->()V +HSPLorg/kodein/di/bindings/StandardScopeRegistry;->getOrCreate(Ljava/lang/Object;ZLkotlin/jvm/functions/Function0;)Ljava/lang/Object; +Lorg/kodein/di/bindings/WithContext; +Lorg/kodein/di/compose/AndroidContextKt; +HSPLorg/kodein/di/compose/AndroidContextKt;->()V +HSPLorg/kodein/di/compose/AndroidContextKt;->access$androidContextDI$lambda$0(Lkotlin/Lazy;)Lorg/kodein/di/DI; +HSPLorg/kodein/di/compose/AndroidContextKt;->androidContextDI$lambda$0(Lkotlin/Lazy;)Lorg/kodein/di/DI; +HSPLorg/kodein/di/compose/AndroidContextKt;->androidContextDI(Landroidx/compose/runtime/Composer;I)Lorg/kodein/di/DI; +HSPLorg/kodein/di/compose/AndroidContextKt;->diFromAppContext(Landroidx/compose/runtime/Composer;I)Lorg/kodein/di/DI; +Lorg/kodein/di/compose/AndroidContextKt$androidContextDI$di$2; +HSPLorg/kodein/di/compose/AndroidContextKt$androidContextDI$di$2;->(Landroid/content/Context;)V +HSPLorg/kodein/di/compose/AndroidContextKt$androidContextDI$di$2;->invoke()Landroid/content/Context; +HSPLorg/kodein/di/compose/AndroidContextKt$androidContextDI$di$2;->invoke()Ljava/lang/Object; +Lorg/kodein/di/compose/ComposableDILazyDelegate; +HSPLorg/kodein/di/compose/ComposableDILazyDelegate;->()V +HSPLorg/kodein/di/compose/ComposableDILazyDelegate;->(Lorg/kodein/di/LazyDelegate;)V +HSPLorg/kodein/di/compose/ComposableDILazyDelegate;->provideDelegate(Ljava/lang/Object;Lkotlin/reflect/KProperty;)Lkotlin/Lazy; +Lorg/kodein/di/compose/CompositionLocalKt; +HSPLorg/kodein/di/compose/CompositionLocalKt;->()V +HSPLorg/kodein/di/compose/CompositionLocalKt;->getLocalDI()Landroidx/compose/runtime/ProvidableCompositionLocal; +HSPLorg/kodein/di/compose/CompositionLocalKt;->localDI(Landroidx/compose/runtime/Composer;I)Lorg/kodein/di/DI; +Lorg/kodein/di/compose/CompositionLocalKt$LocalDI$1; +HSPLorg/kodein/di/compose/CompositionLocalKt$LocalDI$1;->()V +HSPLorg/kodein/di/compose/CompositionLocalKt$LocalDI$1;->()V +HSPLorg/kodein/di/compose/CompositionLocalKt$LocalDI$1;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/compose/CompositionLocalKt$LocalDI$1;->invoke()Lorg/kodein/di/DI; +Lorg/kodein/di/compose/WithDIKt; +HSPLorg/kodein/di/compose/WithDIKt;->withDI(Lorg/kodein/di/DI;Lkotlin/jvm/functions/Function2;Landroidx/compose/runtime/Composer;I)V +Lorg/kodein/di/compose/WithDIKt$withDI$7; +HSPLorg/kodein/di/compose/WithDIKt$withDI$7;->(Lkotlin/jvm/functions/Function2;)V +HSPLorg/kodein/di/compose/WithDIKt$withDI$7;->invoke(Landroidx/compose/runtime/Composer;I)V +HSPLorg/kodein/di/compose/WithDIKt$withDI$7;->invoke(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +Lorg/kodein/di/internal/BindingDIImpl; +HSPLorg/kodein/di/internal/BindingDIImpl;->(Lorg/kodein/di/DirectDI;Lorg/kodein/di/DI$Key;I)V +HSPLorg/kodein/di/internal/BindingDIImpl;->getContext()Ljava/lang/Object; +HSPLorg/kodein/di/internal/BindingDIImpl;->getDi()Lorg/kodein/di/DI; +HSPLorg/kodein/di/internal/BindingDIImpl;->getDirectDI()Lorg/kodein/di/DirectDI; +HSPLorg/kodein/di/internal/BindingDIImpl;->onErasedContext()Lorg/kodein/di/bindings/BindingDI; +Lorg/kodein/di/internal/DIBuilderImpl; +HSPLorg/kodein/di/internal/DIBuilderImpl;->(Ljava/lang/String;Ljava/lang/String;Ljava/util/Set;Lorg/kodein/di/internal/DIContainerBuilderImpl;)V +HSPLorg/kodein/di/internal/DIBuilderImpl;->Bind(Ljava/lang/Object;Ljava/lang/Boolean;Lorg/kodein/di/bindings/DIBinding;)V +HSPLorg/kodein/di/internal/DIBuilderImpl;->Bind(Lorg/kodein/type/TypeToken;Ljava/lang/Object;Ljava/lang/Boolean;)Lorg/kodein/di/DI$Builder$TypeBinder; +HSPLorg/kodein/di/internal/DIBuilderImpl;->Bind(Lorg/kodein/type/TypeToken;Ljava/lang/Object;Ljava/lang/Boolean;)Lorg/kodein/di/internal/DIBuilderImpl$TypeBinder; +HSPLorg/kodein/di/internal/DIBuilderImpl;->RegisterContextTranslator(Lorg/kodein/di/bindings/ContextTranslator;)V +HSPLorg/kodein/di/internal/DIBuilderImpl;->access$getModuleName$p(Lorg/kodein/di/internal/DIBuilderImpl;)Ljava/lang/String; +HSPLorg/kodein/di/internal/DIBuilderImpl;->getContainerBuilder()Lorg/kodein/di/internal/DIContainerBuilderImpl; +HSPLorg/kodein/di/internal/DIBuilderImpl;->getContextType()Lorg/kodein/type/TypeToken; +HSPLorg/kodein/di/internal/DIBuilderImpl;->getExplicitContext()Z +HSPLorg/kodein/di/internal/DIBuilderImpl;->getImportedModules$kodein_di()Ljava/util/Set; +HSPLorg/kodein/di/internal/DIBuilderImpl;->getScope()Lorg/kodein/di/bindings/Scope; +HSPLorg/kodein/di/internal/DIBuilderImpl;->import(Lorg/kodein/di/DI$Module;Z)V +HSPLorg/kodein/di/internal/DIBuilderImpl;->importOnce(Lorg/kodein/di/DI$Module;Z)V +Lorg/kodein/di/internal/DIBuilderImpl$TypeBinder; +HSPLorg/kodein/di/internal/DIBuilderImpl$TypeBinder;->(Lorg/kodein/di/internal/DIBuilderImpl;Lorg/kodein/type/TypeToken;Ljava/lang/Object;Ljava/lang/Boolean;)V +HSPLorg/kodein/di/internal/DIBuilderImpl$TypeBinder;->getContainerBuilder$kodein_di()Lorg/kodein/di/internal/DIContainerBuilderImpl; +HSPLorg/kodein/di/internal/DIBuilderImpl$TypeBinder;->with(Lorg/kodein/di/bindings/DIBinding;)V +Lorg/kodein/di/internal/DIContainerBuilderImpl; +HSPLorg/kodein/di/internal/DIContainerBuilderImpl;->(ZZLjava/util/Map;Ljava/util/List;Ljava/util/List;)V +HSPLorg/kodein/di/internal/DIContainerBuilderImpl;->bind(Lorg/kodein/di/DI$Key;Lorg/kodein/di/bindings/DIBinding;Ljava/lang/String;Ljava/lang/Boolean;)V +HSPLorg/kodein/di/internal/DIContainerBuilderImpl;->checkMatch(Z)V +HSPLorg/kodein/di/internal/DIContainerBuilderImpl;->checkOverrides(Lorg/kodein/di/DI$Key;Ljava/lang/Boolean;)V +HSPLorg/kodein/di/internal/DIContainerBuilderImpl;->extend(Lorg/kodein/di/DIContainer;ZLjava/util/Set;)V +HSPLorg/kodein/di/internal/DIContainerBuilderImpl;->getBindingsMap$kodein_di()Ljava/util/Map; +HSPLorg/kodein/di/internal/DIContainerBuilderImpl;->getCallbacks$kodein_di()Ljava/util/List; +HSPLorg/kodein/di/internal/DIContainerBuilderImpl;->getTranslators$kodein_di()Ljava/util/List; +HSPLorg/kodein/di/internal/DIContainerBuilderImpl;->registerContextTranslator(Lorg/kodein/di/bindings/ContextTranslator;)V +HSPLorg/kodein/di/internal/DIContainerBuilderImpl;->subBuilder(ZZ)Lorg/kodein/di/internal/DIContainerBuilderImpl; +Lorg/kodein/di/internal/DIContainerBuilderImpl$OverrideMode; +HSPLorg/kodein/di/internal/DIContainerBuilderImpl$OverrideMode;->$values()[Lorg/kodein/di/internal/DIContainerBuilderImpl$OverrideMode; +HSPLorg/kodein/di/internal/DIContainerBuilderImpl$OverrideMode;->()V +HSPLorg/kodein/di/internal/DIContainerBuilderImpl$OverrideMode;->(Ljava/lang/String;I)V +HSPLorg/kodein/di/internal/DIContainerBuilderImpl$OverrideMode;->(Ljava/lang/String;ILkotlin/jvm/internal/DefaultConstructorMarker;)V +Lorg/kodein/di/internal/DIContainerBuilderImpl$OverrideMode$ALLOW_EXPLICIT; +HSPLorg/kodein/di/internal/DIContainerBuilderImpl$OverrideMode$ALLOW_EXPLICIT;->(Ljava/lang/String;I)V +HSPLorg/kodein/di/internal/DIContainerBuilderImpl$OverrideMode$ALLOW_EXPLICIT;->isAllowed()Z +HSPLorg/kodein/di/internal/DIContainerBuilderImpl$OverrideMode$ALLOW_EXPLICIT;->must(Ljava/lang/Boolean;)Ljava/lang/Boolean; +Lorg/kodein/di/internal/DIContainerBuilderImpl$OverrideMode$ALLOW_SILENT; +HSPLorg/kodein/di/internal/DIContainerBuilderImpl$OverrideMode$ALLOW_SILENT;->(Ljava/lang/String;I)V +Lorg/kodein/di/internal/DIContainerBuilderImpl$OverrideMode$Companion; +HSPLorg/kodein/di/internal/DIContainerBuilderImpl$OverrideMode$Companion;->()V +HSPLorg/kodein/di/internal/DIContainerBuilderImpl$OverrideMode$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLorg/kodein/di/internal/DIContainerBuilderImpl$OverrideMode$Companion;->get(ZZ)Lorg/kodein/di/internal/DIContainerBuilderImpl$OverrideMode; +Lorg/kodein/di/internal/DIContainerBuilderImpl$OverrideMode$FORBID; +HSPLorg/kodein/di/internal/DIContainerBuilderImpl$OverrideMode$FORBID;->(Ljava/lang/String;I)V +HSPLorg/kodein/di/internal/DIContainerBuilderImpl$OverrideMode$FORBID;->isAllowed()Z +HSPLorg/kodein/di/internal/DIContainerBuilderImpl$OverrideMode$FORBID;->must(Ljava/lang/Boolean;)Ljava/lang/Boolean; +Lorg/kodein/di/internal/DIContainerImpl; +HSPLorg/kodein/di/internal/DIContainerImpl;->(Lorg/kodein/di/DITree;Lorg/kodein/di/internal/DIContainerImpl$Node;ZZ)V +HSPLorg/kodein/di/internal/DIContainerImpl;->(Lorg/kodein/di/internal/DIContainerBuilderImpl;Ljava/util/List;ZZZ)V +HSPLorg/kodein/di/internal/DIContainerImpl;->allFactories(Lorg/kodein/di/DI$Key;Ljava/lang/Object;I)Ljava/util/List; +HSPLorg/kodein/di/internal/DIContainerImpl;->allProviders(Lorg/kodein/di/DI$Key;Ljava/lang/Object;I)Ljava/util/List; +HSPLorg/kodein/di/internal/DIContainerImpl;->bindingDI(Lorg/kodein/di/DI$Key;Lorg/kodein/di/DIContext;Lorg/kodein/di/DITree;I)Lorg/kodein/di/bindings/BindingDI; +HSPLorg/kodein/di/internal/DIContainerImpl;->factory(Lorg/kodein/di/DI$Key;Ljava/lang/Object;I)Lkotlin/jvm/functions/Function1; +HSPLorg/kodein/di/internal/DIContainerImpl;->getInitCallbacks()Lkotlin/jvm/functions/Function0; +HSPLorg/kodein/di/internal/DIContainerImpl;->getTree()Lorg/kodein/di/DITree; +HSPLorg/kodein/di/internal/DIContainerImpl;->provider(Lorg/kodein/di/DI$Key;Ljava/lang/Object;I)Lkotlin/jvm/functions/Function0; +Lorg/kodein/di/internal/DIContainerImpl$Node; +HSPLorg/kodein/di/internal/DIContainerImpl$Node;->(Lorg/kodein/di/DI$Key;ILorg/kodein/di/internal/DIContainerImpl$Node;Z)V +HSPLorg/kodein/di/internal/DIContainerImpl$Node;->check$kodein_di(Lorg/kodein/di/DI$Key;I)V +HSPLorg/kodein/di/internal/DIContainerImpl$Node;->recursiveCheck(Lorg/kodein/di/internal/DIContainerImpl$Node;Lorg/kodein/di/DI$Key;I)Z +Lorg/kodein/di/internal/DIContainerImpl$factory$descFun$1; +Lorg/kodein/di/internal/DIContainerImpl$factory$descFun$2; +Lorg/kodein/di/internal/DIContainerImpl$factory$descProp$1; +Lorg/kodein/di/internal/DIContainerImpl$factory$descProp$2; +Lorg/kodein/di/internal/DIContainerImpl$init$1; +HSPLorg/kodein/di/internal/DIContainerImpl$init$1;->(Lorg/kodein/di/internal/DIContainerImpl;Lorg/kodein/di/internal/DIContainerBuilderImpl;)V +HSPLorg/kodein/di/internal/DIContainerImpl$init$1;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/internal/DIContainerImpl$init$1;->invoke()V +Lorg/kodein/di/internal/DIImpl; +HSPLorg/kodein/di/internal/DIImpl;->()V +HSPLorg/kodein/di/internal/DIImpl;->(Lorg/kodein/di/internal/DIContainerImpl;)V +HSPLorg/kodein/di/internal/DIImpl;->(Lorg/kodein/di/internal/DIMainBuilderImpl;Z)V +HSPLorg/kodein/di/internal/DIImpl;->(ZLkotlin/jvm/functions/Function1;)V +HSPLorg/kodein/di/internal/DIImpl;->access$get_container$p(Lorg/kodein/di/internal/DIImpl;)Lorg/kodein/di/internal/DIContainerImpl; +HSPLorg/kodein/di/internal/DIImpl;->getContainer()Lorg/kodein/di/DIContainer; +HSPLorg/kodein/di/internal/DIImpl;->getDi()Lorg/kodein/di/DI; +HSPLorg/kodein/di/internal/DIImpl;->getDiTrigger()Lorg/kodein/di/DITrigger; +Lorg/kodein/di/internal/DIImpl$Companion; +HSPLorg/kodein/di/internal/DIImpl$Companion;->()V +HSPLorg/kodein/di/internal/DIImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLorg/kodein/di/internal/DIImpl$Companion;->access$newBuilder(Lorg/kodein/di/internal/DIImpl$Companion;ZLkotlin/jvm/functions/Function1;)Lorg/kodein/di/internal/DIMainBuilderImpl; +HSPLorg/kodein/di/internal/DIImpl$Companion;->newBuilder(ZLkotlin/jvm/functions/Function1;)Lorg/kodein/di/internal/DIMainBuilderImpl; +Lorg/kodein/di/internal/DIImpl$container$2; +HSPLorg/kodein/di/internal/DIImpl$container$2;->(Lorg/kodein/di/internal/DIImpl;)V +HSPLorg/kodein/di/internal/DIImpl$container$2;->invoke()Ljava/lang/Object; +HSPLorg/kodein/di/internal/DIImpl$container$2;->invoke()Lorg/kodein/di/internal/DIContainerImpl; +Lorg/kodein/di/internal/DIMainBuilderImpl; +HSPLorg/kodein/di/internal/DIMainBuilderImpl;->(Z)V +HSPLorg/kodein/di/internal/DIMainBuilderImpl;->extend(Lorg/kodein/di/DI;ZLorg/kodein/di/Copy;)V +HSPLorg/kodein/di/internal/DIMainBuilderImpl;->getExternalSources()Ljava/util/List; +HSPLorg/kodein/di/internal/DIMainBuilderImpl;->getFullContainerTreeOnError()Z +HSPLorg/kodein/di/internal/DIMainBuilderImpl;->getFullDescriptionOnError()Z +Lorg/kodein/di/internal/DITreeImpl; +HSPLorg/kodein/di/internal/DITreeImpl;->(Ljava/util/Map;Ljava/util/List;Ljava/util/List;)V +HSPLorg/kodein/di/internal/DITreeImpl;->find(Lorg/kodein/di/DI$Key;IZ)Ljava/util/List; +HSPLorg/kodein/di/internal/DITreeImpl;->findBySpecs(Lorg/kodein/di/SearchSpecs;)Ljava/util/List; +HSPLorg/kodein/di/internal/DITreeImpl;->getBindings()Ljava/util/Map; +HSPLorg/kodein/di/internal/DITreeImpl;->getExternalSources()Ljava/util/List; +HSPLorg/kodein/di/internal/DITreeImpl;->getRegisteredTranslators()Ljava/util/List; +Lorg/kodein/di/internal/DITreeImpl$findBySpecs$1; +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$1;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$1;->invoke(Ljava/util/Map$Entry;)Ljava/lang/Boolean; +Lorg/kodein/di/internal/DITreeImpl$findBySpecs$2; +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$2;->(Lorg/kodein/type/TypeToken;Lorg/kodein/di/internal/DITreeImpl;)V +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$2;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$2;->invoke(Lkotlin/Triple;)Lkotlin/Triple; +Lorg/kodein/di/internal/DITreeImpl$findBySpecs$3; +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$3;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$3;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$3;->invoke(Lkotlin/Triple;)Ljava/lang/Boolean; +Lorg/kodein/di/internal/DITreeImpl$findBySpecs$4; +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$4;->(Ljava/lang/Object;)V +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$4;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$4;->invoke(Lkotlin/Triple;)Ljava/lang/Boolean; +Lorg/kodein/di/internal/DITreeImpl$findBySpecs$argSeq$1; +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$argSeq$1;->()V +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$argSeq$1;->()V +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$argSeq$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$argSeq$1;->invoke(Lkotlin/Triple;)Lkotlin/sequences/Sequence; +Lorg/kodein/di/internal/DITreeImpl$findBySpecs$argSeq$1$1; +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$argSeq$1$1;->(Lorg/kodein/di/bindings/ContextTranslator;)V +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$argSeq$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$argSeq$1$1;->invoke(Ljava/util/Map$Entry;)Lkotlin/Triple; +Lorg/kodein/di/internal/DITreeImpl$findBySpecs$contextSeq$1; +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$contextSeq$1;->()V +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$contextSeq$1;->()V +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$contextSeq$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$contextSeq$1;->invoke(Ljava/util/Map$Entry;)Lkotlin/sequences/Sequence; +Lorg/kodein/di/internal/DITreeImpl$findBySpecs$contextSeq$1$1; +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$contextSeq$1$1;->()V +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$contextSeq$1$1;->()V +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$contextSeq$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$contextSeq$1$1;->invoke(Ljava/util/Map$Entry;)Lkotlin/Triple; +Lorg/kodein/di/internal/DITreeImpl$findBySpecs$resultSeq$1; +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$resultSeq$1;->()V +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$resultSeq$1;->()V +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$resultSeq$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$resultSeq$1;->invoke(Lkotlin/Triple;)Lkotlin/Pair; +Lorg/kodein/di/internal/DITreeImpl$findBySpecs$tagSeq$1; +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$tagSeq$1;->()V +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$tagSeq$1;->()V +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$tagSeq$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$tagSeq$1;->invoke(Lkotlin/Triple;)Lkotlin/sequences/Sequence; +Lorg/kodein/di/internal/DITreeImpl$findBySpecs$tagSeq$1$1; +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$tagSeq$1$1;->(Lorg/kodein/di/bindings/ContextTranslator;)V +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$tagSeq$1$1;->invoke(Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/kodein/di/internal/DITreeImpl$findBySpecs$tagSeq$1$1;->invoke(Ljava/util/Map$Entry;)Lkotlin/Triple; +Lorg/kodein/di/internal/DirectDIBaseImpl; +HSPLorg/kodein/di/internal/DirectDIBaseImpl;->(Lorg/kodein/di/DIContainer;Lorg/kodein/di/DIContext;)V +HSPLorg/kodein/di/internal/DirectDIBaseImpl;->Instance(Lorg/kodein/type/TypeToken;Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/kodein/di/internal/DirectDIBaseImpl;->Instance(Lorg/kodein/type/TypeToken;Lorg/kodein/type/TypeToken;Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object; +HSPLorg/kodein/di/internal/DirectDIBaseImpl;->On(Lorg/kodein/di/DIContext;)Lorg/kodein/di/DirectDI; +HSPLorg/kodein/di/internal/DirectDIBaseImpl;->getContainer()Lorg/kodein/di/DIContainer; +HSPLorg/kodein/di/internal/DirectDIBaseImpl;->getContext()Lorg/kodein/di/DIContext; +HSPLorg/kodein/di/internal/DirectDIBaseImpl;->getDi()Lorg/kodein/di/DI; +HSPLorg/kodein/di/internal/DirectDIBaseImpl;->getDirectDI()Lorg/kodein/di/DirectDI; +HSPLorg/kodein/di/internal/DirectDIBaseImpl;->getLazy()Lorg/kodein/di/DI; +Lorg/kodein/di/internal/DirectDIImpl; +HSPLorg/kodein/di/internal/DirectDIImpl;->(Lorg/kodein/di/DIContainer;Lorg/kodein/di/DIContext;)V +HSPLorg/kodein/di/internal/DirectDIImpl;->AllInstances(Lorg/kodein/type/TypeToken;Ljava/lang/Object;)Ljava/util/List; +Lorg/kodein/di/internal/DirectDIJVMImplKt; +HSPLorg/kodein/di/internal/DirectDIJVMImplKt;->access$getAnyType(Lorg/kodein/di/DIContext;)Lorg/kodein/type/TypeToken; +HSPLorg/kodein/di/internal/DirectDIJVMImplKt;->getAnyType(Lorg/kodein/di/DIContext;)Lorg/kodein/type/TypeToken; +Lorg/kodein/di/internal/LangKt; +HSPLorg/kodein/di/internal/LangKt;->newConcurrentMap()Ljava/util/Map; +HSPLorg/kodein/di/internal/LangKt;->newLinkedList()Ljava/util/List; +HSPLorg/kodein/di/internal/LangKt;->newLinkedList(Ljava/util/Collection;)Ljava/util/List; +Lorg/kodein/di/internal/TypeChecker; +HSPLorg/kodein/di/internal/TypeChecker;->()V +HSPLorg/kodein/di/internal/TypeChecker;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lorg/kodein/di/internal/TypeChecker$Down; +HSPLorg/kodein/di/internal/TypeChecker$Down;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/internal/TypeChecker$Down;->check(Lorg/kodein/type/TypeToken;)Z +HSPLorg/kodein/di/internal/TypeChecker$Down;->equals(Ljava/lang/Object;)Z +HSPLorg/kodein/di/internal/TypeChecker$Down;->getType()Lorg/kodein/type/TypeToken; +HSPLorg/kodein/di/internal/TypeChecker$Down;->hashCode()I +Lorg/kodein/di/internal/TypeChecker$Up; +HSPLorg/kodein/di/internal/TypeChecker$Up;->(Lorg/kodein/type/TypeToken;)V +HSPLorg/kodein/di/internal/TypeChecker$Up;->check(Lorg/kodein/type/TypeToken;)Z +HSPLorg/kodein/di/internal/TypeChecker$Up;->equals(Ljava/lang/Object;)Z +HSPLorg/kodein/di/internal/TypeChecker$Up;->getType()Lorg/kodein/type/TypeToken; +HSPLorg/kodein/di/internal/TypeChecker$Up;->hashCode()I +Lorg/kodein/type/AbstractTypeToken; +HSPLorg/kodein/type/AbstractTypeToken;->()V +HSPLorg/kodein/type/AbstractTypeToken;->()V +HSPLorg/kodein/type/AbstractTypeToken;->equals(Ljava/lang/Object;)Z +HSPLorg/kodein/type/AbstractTypeToken;->hashCode()I +HSPLorg/kodein/type/AbstractTypeToken;->isAssignableFrom(Lorg/kodein/type/TypeToken;)Z +Lorg/kodein/type/AbstractTypeToken$Companion; +HSPLorg/kodein/type/AbstractTypeToken$Companion;->()V +HSPLorg/kodein/type/AbstractTypeToken$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +Lorg/kodein/type/GenericArrayTypeImpl; +HSPLorg/kodein/type/GenericArrayTypeImpl;->()V +HSPLorg/kodein/type/GenericArrayTypeImpl;->(Ljava/lang/reflect/Type;)V +HSPLorg/kodein/type/GenericArrayTypeImpl;->(Ljava/lang/reflect/Type;Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLorg/kodein/type/GenericArrayTypeImpl;->getGenericComponentType()Ljava/lang/reflect/Type; +Lorg/kodein/type/GenericArrayTypeImpl$Companion; +HSPLorg/kodein/type/GenericArrayTypeImpl$Companion;->()V +HSPLorg/kodein/type/GenericArrayTypeImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLorg/kodein/type/GenericArrayTypeImpl$Companion;->invoke(Ljava/lang/reflect/Type;)Lorg/kodein/type/GenericArrayTypeImpl; +Lorg/kodein/type/GenericJVMTypeTokenDelegate; +HSPLorg/kodein/type/GenericJVMTypeTokenDelegate;->(Lorg/kodein/type/JVMTypeToken;Ljava/lang/Class;)V +HSPLorg/kodein/type/GenericJVMTypeTokenDelegate;->equals(Ljava/lang/Object;)Z +HSPLorg/kodein/type/GenericJVMTypeTokenDelegate;->getRaw()Lorg/kodein/type/TypeToken; +HSPLorg/kodein/type/GenericJVMTypeTokenDelegate;->getSuper()Ljava/util/List; +HSPLorg/kodein/type/GenericJVMTypeTokenDelegate;->hashCode()I +HSPLorg/kodein/type/GenericJVMTypeTokenDelegate;->isAssignableFrom(Lorg/kodein/type/TypeToken;)Z +HSPLorg/kodein/type/GenericJVMTypeTokenDelegate;->isWildcard()Z +Lorg/kodein/type/JVMAbstractTypeToken; +HSPLorg/kodein/type/JVMAbstractTypeToken;->()V +HSPLorg/kodein/type/JVMAbstractTypeToken;->()V +HSPLorg/kodein/type/JVMAbstractTypeToken;->access$getNeedGATWorkaround$delegate$cp()Lkotlin/Lazy; +HSPLorg/kodein/type/JVMAbstractTypeToken;->access$getNeedPTWorkaround$delegate$cp()Lkotlin/Lazy; +HSPLorg/kodein/type/JVMAbstractTypeToken;->typeEquals$kaverit_release(Lorg/kodein/type/TypeToken;)Z +HSPLorg/kodein/type/JVMAbstractTypeToken;->typeHashCode$kaverit_release()I +Lorg/kodein/type/JVMAbstractTypeToken$Companion; +HSPLorg/kodein/type/JVMAbstractTypeToken$Companion;->()V +HSPLorg/kodein/type/JVMAbstractTypeToken$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLorg/kodein/type/JVMAbstractTypeToken$Companion;->Equals(Ljava/lang/reflect/Type;Ljava/lang/reflect/Type;)Z +HSPLorg/kodein/type/JVMAbstractTypeToken$Companion;->HashCode(Ljava/lang/reflect/Type;)I +HSPLorg/kodein/type/JVMAbstractTypeToken$Companion;->getNeedGATWorkaround()Z +HSPLorg/kodein/type/JVMAbstractTypeToken$Companion;->getNeedPTWorkaround()Z +Lorg/kodein/type/JVMAbstractTypeToken$Companion$WrappingTest; +HSPLorg/kodein/type/JVMAbstractTypeToken$Companion$WrappingTest;->()V +HSPLorg/kodein/type/JVMAbstractTypeToken$Companion$WrappingTest;->getType()Ljava/lang/reflect/Type; +Lorg/kodein/type/JVMAbstractTypeToken$Companion$needGATWorkaround$2; +HSPLorg/kodein/type/JVMAbstractTypeToken$Companion$needGATWorkaround$2;->()V +HSPLorg/kodein/type/JVMAbstractTypeToken$Companion$needGATWorkaround$2;->()V +HSPLorg/kodein/type/JVMAbstractTypeToken$Companion$needGATWorkaround$2;->invoke()Ljava/lang/Boolean; +HSPLorg/kodein/type/JVMAbstractTypeToken$Companion$needGATWorkaround$2;->invoke()Ljava/lang/Object; +Lorg/kodein/type/JVMAbstractTypeToken$Companion$needGATWorkaround$2$t1$1; +HSPLorg/kodein/type/JVMAbstractTypeToken$Companion$needGATWorkaround$2$t1$1;->()V +Lorg/kodein/type/JVMAbstractTypeToken$Companion$needGATWorkaround$2$t2$1; +HSPLorg/kodein/type/JVMAbstractTypeToken$Companion$needGATWorkaround$2$t2$1;->()V +Lorg/kodein/type/JVMAbstractTypeToken$Companion$needPTWorkaround$2; +HSPLorg/kodein/type/JVMAbstractTypeToken$Companion$needPTWorkaround$2;->()V +HSPLorg/kodein/type/JVMAbstractTypeToken$Companion$needPTWorkaround$2;->()V +HSPLorg/kodein/type/JVMAbstractTypeToken$Companion$needPTWorkaround$2;->invoke()Ljava/lang/Boolean; +HSPLorg/kodein/type/JVMAbstractTypeToken$Companion$needPTWorkaround$2;->invoke()Ljava/lang/Object; +Lorg/kodein/type/JVMAbstractTypeToken$Companion$needPTWorkaround$2$t1$1; +HSPLorg/kodein/type/JVMAbstractTypeToken$Companion$needPTWorkaround$2$t1$1;->()V +Lorg/kodein/type/JVMAbstractTypeToken$Companion$needPTWorkaround$2$t2$1; +HSPLorg/kodein/type/JVMAbstractTypeToken$Companion$needPTWorkaround$2$t2$1;->()V +Lorg/kodein/type/JVMClassTypeToken; +HSPLorg/kodein/type/JVMClassTypeToken;->(Ljava/lang/Class;)V +HSPLorg/kodein/type/JVMClassTypeToken;->getJvmType()Ljava/lang/Class; +HSPLorg/kodein/type/JVMClassTypeToken;->getJvmType()Ljava/lang/reflect/Type; +HSPLorg/kodein/type/JVMClassTypeToken;->getRaw()Lorg/kodein/type/JVMClassTypeToken; +HSPLorg/kodein/type/JVMClassTypeToken;->getRaw()Lorg/kodein/type/TypeToken; +HSPLorg/kodein/type/JVMClassTypeToken;->getSuper()Ljava/util/List; +HSPLorg/kodein/type/JVMClassTypeToken;->isAssignableFrom(Lorg/kodein/type/TypeToken;)Z +HSPLorg/kodein/type/JVMClassTypeToken;->isWildcard()Z +Lorg/kodein/type/JVMGenericArrayTypeToken; +Lorg/kodein/type/JVMParameterizedTypeToken; +HSPLorg/kodein/type/JVMParameterizedTypeToken;->(Ljava/lang/reflect/ParameterizedType;)V +HSPLorg/kodein/type/JVMParameterizedTypeToken;->getGenericParameters()[Lorg/kodein/type/TypeToken; +HSPLorg/kodein/type/JVMParameterizedTypeToken;->getJvmType()Ljava/lang/reflect/ParameterizedType; +HSPLorg/kodein/type/JVMParameterizedTypeToken;->getJvmType()Ljava/lang/reflect/Type; +HSPLorg/kodein/type/JVMParameterizedTypeToken;->getRaw()Lorg/kodein/type/TypeToken; +HSPLorg/kodein/type/JVMParameterizedTypeToken;->getSuper()Ljava/util/List; +HSPLorg/kodein/type/JVMParameterizedTypeToken;->isWildcard()Z +Lorg/kodein/type/JVMTypeToken; +Lorg/kodein/type/JVMUtilsKt; +HSPLorg/kodein/type/JVMUtilsKt;->allTypeEquals([Ljava/lang/reflect/Type;[Ljava/lang/reflect/Type;)Z +HSPLorg/kodein/type/JVMUtilsKt;->boundedTypeArguments(Ljava/lang/reflect/ParameterizedType;)[Ljava/lang/reflect/Type; +HSPLorg/kodein/type/JVMUtilsKt;->getBoundedGenericSuperClass(Ljava/lang/Class;)Ljava/lang/reflect/Type; +HSPLorg/kodein/type/JVMUtilsKt;->getRawClass(Ljava/lang/reflect/ParameterizedType;)Ljava/lang/Class; +HSPLorg/kodein/type/JVMUtilsKt;->kodein(Ljava/lang/reflect/Type;)Ljava/lang/reflect/Type; +HSPLorg/kodein/type/JVMUtilsKt;->reify$default(Ljava/lang/reflect/ParameterizedType;Ljava/lang/reflect/Type;Ljava/lang/reflect/ParameterizedType;[Ljava/lang/reflect/Type;ILjava/lang/Object;)Ljava/lang/reflect/Type; +HSPLorg/kodein/type/JVMUtilsKt;->reify(Ljava/lang/reflect/ParameterizedType;Ljava/lang/reflect/Type;Ljava/lang/reflect/ParameterizedType;[Ljava/lang/reflect/Type;)Ljava/lang/reflect/Type; +HSPLorg/kodein/type/JVMUtilsKt;->removeVariables(Ljava/lang/reflect/Type;)Ljava/lang/reflect/Type; +HSPLorg/kodein/type/JVMUtilsKt;->typeEquals(Ljava/lang/reflect/Type;Ljava/lang/reflect/Type;)Z +HSPLorg/kodein/type/JVMUtilsKt;->typeHashCode(Ljava/lang/reflect/Type;)I +Lorg/kodein/type/ParameterizedTypeImpl; +HSPLorg/kodein/type/ParameterizedTypeImpl;->()V +HSPLorg/kodein/type/ParameterizedTypeImpl;->(Ljava/lang/Class;[Ljava/lang/reflect/Type;Ljava/lang/reflect/Type;)V +HSPLorg/kodein/type/ParameterizedTypeImpl;->equals(Ljava/lang/Object;)Z +HSPLorg/kodein/type/ParameterizedTypeImpl;->getActualTypeArguments()[Ljava/lang/reflect/Type; +HSPLorg/kodein/type/ParameterizedTypeImpl;->getRawType()Ljava/lang/Class; +HSPLorg/kodein/type/ParameterizedTypeImpl;->getRawType()Ljava/lang/reflect/Type; +HSPLorg/kodein/type/ParameterizedTypeImpl;->hashCode()I +Lorg/kodein/type/ParameterizedTypeImpl$Companion; +HSPLorg/kodein/type/ParameterizedTypeImpl$Companion;->()V +HSPLorg/kodein/type/ParameterizedTypeImpl$Companion;->(Lkotlin/jvm/internal/DefaultConstructorMarker;)V +HSPLorg/kodein/type/ParameterizedTypeImpl$Companion;->invoke(Ljava/lang/reflect/ParameterizedType;)Lorg/kodein/type/ParameterizedTypeImpl; +Lorg/kodein/type/TypeReference; +HSPLorg/kodein/type/TypeReference;->()V +HSPLorg/kodein/type/TypeReference;->getSuperType()Ljava/lang/reflect/Type; +Lorg/kodein/type/TypeToken; +HSPLorg/kodein/type/TypeToken;->()V +Lorg/kodein/type/TypeToken$Companion; +HSPLorg/kodein/type/TypeToken$Companion;->()V +HSPLorg/kodein/type/TypeToken$Companion;->()V +HSPLorg/kodein/type/TypeToken$Companion;->getAny()Lorg/kodein/type/TypeToken; +HSPLorg/kodein/type/TypeToken$Companion;->getUnit()Lorg/kodein/type/TypeToken; +Lorg/kodein/type/TypeTokensJVMKt; +HSPLorg/kodein/type/TypeTokensJVMKt;->()V +HSPLorg/kodein/type/TypeTokensJVMKt;->erased(Lkotlin/reflect/KClass;)Lorg/kodein/type/TypeToken; +HSPLorg/kodein/type/TypeTokensJVMKt;->erasedOf(Ljava/lang/Object;)Lorg/kodein/type/TypeToken; +HSPLorg/kodein/type/TypeTokensJVMKt;->isReified(Ljava/lang/reflect/Type;)Z +HSPLorg/kodein/type/TypeTokensJVMKt;->typeToken(Ljava/lang/reflect/Type;)Lorg/kodein/type/JVMTypeToken; +Lorg/slf4j/ILoggerFactory; +Lorg/slf4j/IMarkerFactory; +Lorg/slf4j/Logger; +Lorg/slf4j/LoggerFactory; +HSPLorg/slf4j/LoggerFactory;->()V +HSPLorg/slf4j/LoggerFactory;->bind()V +HSPLorg/slf4j/LoggerFactory;->findServiceProviders()Ljava/util/List; +HSPLorg/slf4j/LoggerFactory;->fixSubstituteLoggers()V +HSPLorg/slf4j/LoggerFactory;->getILoggerFactory()Lorg/slf4j/ILoggerFactory; +HSPLorg/slf4j/LoggerFactory;->getLogger(Ljava/lang/Class;)Lorg/slf4j/Logger; +HSPLorg/slf4j/LoggerFactory;->getLogger(Ljava/lang/String;)Lorg/slf4j/Logger; +HSPLorg/slf4j/LoggerFactory;->getProvider()Lorg/slf4j/spi/SLF4JServiceProvider; +HSPLorg/slf4j/LoggerFactory;->getServiceLoader(Ljava/lang/ClassLoader;)Ljava/util/ServiceLoader; +HSPLorg/slf4j/LoggerFactory;->isAmbiguousProviderList(Ljava/util/List;)Z +HSPLorg/slf4j/LoggerFactory;->loadExplicitlySpecified(Ljava/lang/ClassLoader;)Lorg/slf4j/spi/SLF4JServiceProvider; +HSPLorg/slf4j/LoggerFactory;->performInitialization()V +HSPLorg/slf4j/LoggerFactory;->postBindCleanUp()V +HSPLorg/slf4j/LoggerFactory;->replayEvents()V +HSPLorg/slf4j/LoggerFactory;->reportActualBinding(Ljava/util/List;)V +HSPLorg/slf4j/LoggerFactory;->reportMultipleBindingAmbiguity(Ljava/util/List;)V +HSPLorg/slf4j/LoggerFactory;->safelyInstantiate(Ljava/util/List;Ljava/util/Iterator;)V +HSPLorg/slf4j/LoggerFactory;->versionSanityCheck()V +Lorg/slf4j/helpers/BasicMDCAdapter; +HSPLorg/slf4j/helpers/BasicMDCAdapter;->()V +Lorg/slf4j/helpers/BasicMDCAdapter$1; +HSPLorg/slf4j/helpers/BasicMDCAdapter$1;->(Lorg/slf4j/helpers/BasicMDCAdapter;)V +Lorg/slf4j/helpers/BasicMarkerFactory; +HSPLorg/slf4j/helpers/BasicMarkerFactory;->()V +Lorg/slf4j/helpers/NOPLoggerFactory; +HSPLorg/slf4j/helpers/NOPLoggerFactory;->()V +Lorg/slf4j/helpers/NOPMDCAdapter; +HSPLorg/slf4j/helpers/NOPMDCAdapter;->()V +Lorg/slf4j/helpers/NOP_FallbackServiceProvider; +HSPLorg/slf4j/helpers/NOP_FallbackServiceProvider;->()V +HSPLorg/slf4j/helpers/NOP_FallbackServiceProvider;->()V +Lorg/slf4j/helpers/SubstituteLoggerFactory; +HSPLorg/slf4j/helpers/SubstituteLoggerFactory;->()V +HSPLorg/slf4j/helpers/SubstituteLoggerFactory;->clear()V +HSPLorg/slf4j/helpers/SubstituteLoggerFactory;->getEventQueue()Ljava/util/concurrent/LinkedBlockingQueue; +HSPLorg/slf4j/helpers/SubstituteLoggerFactory;->getLoggers()Ljava/util/List; +HSPLorg/slf4j/helpers/SubstituteLoggerFactory;->postInitialization()V +Lorg/slf4j/helpers/SubstituteServiceProvider; +HSPLorg/slf4j/helpers/SubstituteServiceProvider;->()V +HSPLorg/slf4j/helpers/SubstituteServiceProvider;->getSubstituteLoggerFactory()Lorg/slf4j/helpers/SubstituteLoggerFactory; +Lorg/slf4j/helpers/ThreadLocalMapOfStacks; +HSPLorg/slf4j/helpers/ThreadLocalMapOfStacks;->()V +Lorg/slf4j/helpers/Util; +HSPLorg/slf4j/helpers/Util;->()V +HSPLorg/slf4j/helpers/Util;->safeGetBooleanSystemProperty(Ljava/lang/String;)Z +HSPLorg/slf4j/helpers/Util;->safeGetSystemProperty(Ljava/lang/String;)Ljava/lang/String; +Lorg/slf4j/impl/LoggerServiceProvider; +HSPLorg/slf4j/impl/LoggerServiceProvider;->()V +HSPLorg/slf4j/impl/LoggerServiceProvider;->()V +HSPLorg/slf4j/impl/LoggerServiceProvider;->getLoggerFactory()Lorg/slf4j/ILoggerFactory; +HSPLorg/slf4j/impl/LoggerServiceProvider;->getRequestedApiVersion()Ljava/lang/String; +HSPLorg/slf4j/impl/LoggerServiceProvider;->initialize()V +HSPLorg/slf4j/impl/LoggerServiceProvider;->initializeLoggerContext()V +Lorg/slf4j/spi/LocationAwareLogger; +Lorg/slf4j/spi/MDCAdapter; +Lorg/slf4j/spi/SLF4JServiceProvider; \ No newline at end of file diff --git a/androidApp/src/test/java/com/artemchep/keyguard/ExampleUnitTest.kt b/androidApp/src/test/java/com/artemchep/keyguard/ExampleUnitTest.kt new file mode 100644 index 00000000..6ef88b5d --- /dev/null +++ b/androidApp/src/test/java/com/artemchep/keyguard/ExampleUnitTest.kt @@ -0,0 +1,15 @@ +package com.artemchep.keyguard + +import kotlinx.coroutines.runBlocking +import org.junit.Test + +/** + * Example local unit test, which will execute on the development machine (host). + * + * See [testing documentation](http://d.android.com/tools/testing). + */ +class ExampleUnitTest { + @Test + fun addition_isCorrect() = runBlocking { + } +} diff --git a/androidBenchmark/build.gradle.kts b/androidBenchmark/build.gradle.kts new file mode 100644 index 00000000..e7828531 --- /dev/null +++ b/androidBenchmark/build.gradle.kts @@ -0,0 +1,80 @@ +import com.android.build.api.dsl.ManagedVirtualDevice + +plugins { + alias(libs.plugins.android.test) + alias(libs.plugins.kotlin.android) + alias(libs.plugins.baseline.profile) +} + +android { + compileSdk = libs.versions.androidCompileSdk.get().toInt() + namespace = "com.artemchep.macrobenchmark" + + defaultConfig { + minSdk = libs.versions.androidMinSdk.get().toInt() + targetSdk = libs.versions.androidTargetSdk.get().toInt() + + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + } + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } + kotlinOptions { + jvmTarget = "11" + } + testOptions.managedDevices.devices { + maybeCreate("pixel6api34").apply { + device = "Pixel 6" + apiLevel = 34 + systemImageSource = "google_apis_playstore" + } + } + + targetProjectPath = ":androidApp" + // Enable the benchmark to run separately from the app process + experimentalProperties["android.experimental.self-instrumenting"] = true + + buildTypes { + // declare a build type to match the target app"s build type + create("benchmark") { + isDebuggable = true + signingConfig = signingConfigs.getByName("debug") + // Selects release buildType if the 'benchmark' + // buildType not available in other modules. + matchingFallbacks.add("release") + } + } + + buildFeatures { + buildConfig = true + } + + val accountManagementDimension = "accountManagement" + flavorDimensions += accountManagementDimension + productFlavors { + maybeCreate("playStore").apply { + dimension = accountManagementDimension + } + maybeCreate("none").apply { + dimension = accountManagementDimension + } + } +} + +baselineProfile { + managedDevices += "pixel6api34" + + // This enables using connected devices to generate profiles. The default is true. + // When using connected devices, they must be rooted or API 33 and higher. + useConnectedDevices = false +} + +dependencies { + implementation(libs.androidx.benchmark.macro.junit4) + implementation(libs.androidx.espresso.core) + implementation(libs.androidx.junit) + implementation(libs.androidx.uiautomator) + implementation(libs.androidx.profileinstaller) +} diff --git a/androidBenchmark/src/main/AndroidManifest.xml b/androidBenchmark/src/main/AndroidManifest.xml new file mode 100644 index 00000000..602ac04b --- /dev/null +++ b/androidBenchmark/src/main/AndroidManifest.xml @@ -0,0 +1,11 @@ + + + + + + + + + + + diff --git a/androidBenchmark/src/main/java/com/artemchep/macrobenchmark/Utils.kt b/androidBenchmark/src/main/java/com/artemchep/macrobenchmark/Utils.kt new file mode 100644 index 00000000..d1183bda --- /dev/null +++ b/androidBenchmark/src/main/java/com/artemchep/macrobenchmark/Utils.kt @@ -0,0 +1,15 @@ +package com.artemchep.macrobenchmark + +/** + * Convenience parameter to use proper package name + * with regards to build type and build flavor. + */ +val PACKAGE_NAME = StringBuilder("com.artemchep.keyguard").apply { + val hasSuffix = when (BuildConfig.BUILD_TYPE) { + "debug" -> true + else -> false + } + if (hasSuffix) { + append(".${BuildConfig.BUILD_TYPE}") + } +}.toString() diff --git a/androidBenchmark/src/main/java/com/artemchep/macrobenchmark/baselineprofile/BaselineProfileGenerator.kt b/androidBenchmark/src/main/java/com/artemchep/macrobenchmark/baselineprofile/BaselineProfileGenerator.kt new file mode 100644 index 00000000..3ea7844b --- /dev/null +++ b/androidBenchmark/src/main/java/com/artemchep/macrobenchmark/baselineprofile/BaselineProfileGenerator.kt @@ -0,0 +1,33 @@ +package com.artemchep.macrobenchmark.baselineprofile + +import android.os.Build +import androidx.annotation.RequiresApi +import androidx.benchmark.macro.junit4.BaselineProfileRule +import com.artemchep.macrobenchmark.PACKAGE_NAME +import com.artemchep.macrobenchmark.ui.keyguard.createVaultAndWait +import org.junit.Rule +import org.junit.Test + +/** + * Generates a baseline profile which + * can be copied to `app/src/main/baseline-prof.txt`. + */ +@RequiresApi(Build.VERSION_CODES.P) +class BaselineProfileGenerator { + @get:Rule + val baselineProfileRule = BaselineProfileRule() + + @Test + fun generate() = baselineProfileRule.collect( + packageName = PACKAGE_NAME, + ) { + // This block defines the app's critical user journey. Here we are interested in + // optimizing for app startup. But you can also navigate and scroll + // through your most important UI. + + pressHome() + startActivityAndWait() + + createVaultAndWait() + } +} diff --git a/androidBenchmark/src/main/java/com/artemchep/macrobenchmark/ui/keyguard/interestsWaitForTopics.kt b/androidBenchmark/src/main/java/com/artemchep/macrobenchmark/ui/keyguard/interestsWaitForTopics.kt new file mode 100644 index 00000000..c6d9a224 --- /dev/null +++ b/androidBenchmark/src/main/java/com/artemchep/macrobenchmark/ui/keyguard/interestsWaitForTopics.kt @@ -0,0 +1,36 @@ +package com.artemchep.macrobenchmark.ui.keyguard + +import androidx.benchmark.macro.MacrobenchmarkScope +import androidx.test.uiautomator.By +import androidx.test.uiautomator.Until +import java.util.regex.Pattern + +fun MacrobenchmarkScope.waitForMainScreen() = kotlin.run { + val search = kotlin.run { + val pattern = Pattern.compile("nav:(setup|unlock|main)") + val selector = By.res(pattern) + Until.findObject(selector) + } + device.wait(search, 30_000) +} + +fun MacrobenchmarkScope.createVaultAndWait() = kotlin.run { + val screen = waitForMainScreen() + when (screen.resourceName) { + "nav:setup", + "nav:unlock", + -> { + // Create or unlock existing vault + val password = screen + .findObject(By.res("field:password")) + password.text = "111111" + val btn = screen + .findObject(By.res("btn:go")) + btn.wait(Until.clickable(true), 1000L) + btn.click() + // wait till main screen is loaded + device.wait(Until.findObject(By.res("nav:main")), 30_000) + } + else -> screen + } +} diff --git a/artwork/android-adaptive-icon.sketch b/artwork/android-adaptive-icon.sketch new file mode 100644 index 00000000..1c514c5e Binary files /dev/null and b/artwork/android-adaptive-icon.sketch differ diff --git a/artwork/ic_launcher_web.png b/artwork/ic_launcher_web.png new file mode 100644 index 00000000..c5cd3d73 Binary files /dev/null and b/artwork/ic_launcher_web.png differ diff --git a/artwork/promote.kra b/artwork/promote.kra new file mode 100644 index 00000000..1b9ff214 Binary files /dev/null and b/artwork/promote.kra differ diff --git a/artwork/promote.png b/artwork/promote.png new file mode 100644 index 00000000..fe2b7055 Binary files /dev/null and b/artwork/promote.png differ diff --git a/artwork/thumbnail.png b/artwork/thumbnail.png new file mode 100644 index 00000000..77ffa8e0 Binary files /dev/null and b/artwork/thumbnail.png differ diff --git a/artwork/vector.svg b/artwork/vector.svg new file mode 100644 index 00000000..55912e3e --- /dev/null +++ b/artwork/vector.svg @@ -0,0 +1,42 @@ + + + don't-edit-combined-layers + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts new file mode 100644 index 00000000..4f335f5c --- /dev/null +++ b/build.gradle.kts @@ -0,0 +1,133 @@ +// Top-level build file where you can add configuration options common +// to all sub-projects/modules. +buildscript { + repositories { + google() + mavenCentral() + } +} + +// This is necessary to avoid the plugins to be loaded multiple times +// in each subproject's classloader. +plugins { + alias(libs.plugins.android.application) apply false + alias(libs.plugins.android.library) apply false + alias(libs.plugins.android.test) apply false + alias(libs.plugins.baseline.profile) apply false + alias(libs.plugins.kotlin.dsl) apply false + alias(libs.plugins.kotlin.multiplatform) apply false + alias(libs.plugins.kotlin.android) apply false + alias(libs.plugins.kotlin.jvm) apply false + alias(libs.plugins.kotlin.kapt) apply false + alias(libs.plugins.kotlin.plugin.parcelize) apply false + alias(libs.plugins.kotlin.plugin.serialization) apply false + alias(libs.plugins.compose) apply false + alias(libs.plugins.ktlint) apply false + alias(libs.plugins.ksp) apply false + alias(libs.plugins.google.services) apply false + alias(libs.plugins.crashlytics) apply false + alias(libs.plugins.sqldelight) apply false + alias(libs.plugins.buildkonfig) apply false + alias(libs.plugins.moko) apply false + alias(libs.plugins.license.check) apply false + alias(libs.plugins.versions) apply true + alias(libs.plugins.version.catalog.update) apply true +} + +subprojects { + if ( + name == "androidApp" || + name == "desktopApp" + ) { + apply(plugin = rootProject.libs.plugins.license.check.get().pluginId) + + configure { + allow("Apache-2.0") + allow("MIT") + allow("EPL-1.0") + allow("CC0-1.0") + allow("BSD-2-Clause") + + // + // Android + // + + allowUrl("https://developer.android.com/studio/terms.html") { + because("Android Developers") + } + allowUrl("https://developer.android.com/guide/playcore/license") { + because("Android Developers") + } + allowUrl("https://developers.google.com/ml-kit/terms") { + because("Google Developers") + } + + // + // Self-hosted + // + + allowUrl("https://github.com/devsrsouza/compose-icons/blob/master/LICENSE") { + because("MIT License, but self-hosted copy of the license") + } + allowUrl("https://www.bouncycastle.org/licence.html") { + because("MIT License, but self-hosted copy of the license") + } + allowUrl("https://spdx.org/licenses/MIT.txt") { + because("MIT License, but self-hosted copy of the license") + } + allowUrl("https://opensource.org/licenses/mit-license.php") { + because("MIT License, but self-hosted copy of the license") + } + allowUrl("https://github.com/icerockdev/moko-resources/blob/master/LICENSE.md") { + because("Apache License-2.0, but self-hosted copy of the license") + } + allowUrl("https://github.com/icerockdev/moko-graphics/blob/master/LICENSE.md") { + because("Apache License-2.0, but self-hosted copy of the license") + } + allowUrl("https://github.com/icerockdev/moko-parcelize/blob/master/LICENSE.md") { + because("Apache License-2.0, but self-hosted copy of the license") + } + allowUrl("https://github.com/WonderzGmbH/nativefiledialog-java/blob/master/LICENSE") { + because("zlib License, but self-hosted copy of the license") + } + allowDependency("com.github.AChep", "bindin", "1.4.0") { + because("MIT License, but self-hosted copy of the license") + } + allowDependency("com.mayakapps.compose", "window-styler", "0.3.2") { + because("MIT License, but self-hosted copy of the license") + } + allowDependency("com.mayakapps.compose", "window-styler-jvm", "0.3.2") { + because("MIT License, but self-hosted copy of the license") + } + allowDependency("commons-logging", "commons-logging", "1.0.4") { + because("Apache License-2.0, but self-hosted copy of the license") + } + allowDependency("com.github.jai-imageio", "jai-imageio-core", "1.4.0") { + // https://github.com/jai-imageio/jai-imageio-core/blob/master/LICENSE.txt + because("Sun Microsystems, Inc") + } + allowDependency("com.ibm.icu", "icu4j", "73.1") { + because("UNICODE LICENSE V3") + } + + // + // Other + // + + allowUrl("https://www.zetetic.net/sqlcipher/license/") { + because("BDS-like License") + } + allowUrl("http://www.bouncycastle.org/licence.html") { + because("MIT-like License") + } + } + } +} + +allprojects { + apply(plugin = rootProject.libs.plugins.ktlint.get().pluginId) + + configure { + version.set(rootProject.libs.versions.ktlint.get()) + } +} diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts new file mode 100644 index 00000000..1ef563e3 --- /dev/null +++ b/buildSrc/build.gradle.kts @@ -0,0 +1,4 @@ +plugins { + alias(libs.plugins.kotlin.dsl) +} + diff --git a/buildSrc/settings.gradle.kts b/buildSrc/settings.gradle.kts new file mode 100644 index 00000000..22f07148 --- /dev/null +++ b/buildSrc/settings.gradle.kts @@ -0,0 +1,14 @@ +dependencyResolutionManagement { + repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) + repositories { + google() + mavenCentral() + maven(url = "https://jitpack.io") + maven(url = "https://maven.pkg.jetbrains.space/public/p/compose/dev") + } + versionCatalogs { + create("libs") { + from(files("../gradle/libs.versions.toml")) + } + } +} diff --git a/buildSrc/src/main/kotlin/VersionCode.kt b/buildSrc/src/main/kotlin/VersionCode.kt new file mode 100644 index 00000000..63f5fd9c --- /dev/null +++ b/buildSrc/src/main/kotlin/VersionCode.kt @@ -0,0 +1,38 @@ +import org.gradle.api.Project +import java.text.SimpleDateFormat +import java.util.Calendar +import java.util.Date +import java.util.TimeZone + +data class VersionInfo( + val marketingVersion: String, + val logicalVersion: Int, + val buildDate: String, +) + +fun Project.createVersionInfo( + marketingVersion: String, + logicalVersion: Int, // max 9999 +): VersionInfo { + val dateFormat = SimpleDateFormat("yyyyMMdd") + val calendar = Calendar.getInstance().apply { + timeZone = TimeZone.getTimeZone("UTC") + time = project.properties["versionDate"] + ?.let { it as? String } + ?.let { date -> + dateFormat.timeZone = TimeZone.getTimeZone("UTC") + dateFormat.parse(date) + } + ?: Date() // fallback to 'now' + } + // Max date: + // (999 * 500 + 356) * 10000 + 9999 + val codeVersion = + ((calendar.get(Calendar.YEAR) % 1000) * 500 + calendar.get(Calendar.DAY_OF_YEAR)) * 10000 + logicalVersion + val buildDate = dateFormat.format(calendar.time) + return VersionInfo( + marketingVersion = marketingVersion, + logicalVersion = codeVersion, + buildDate = buildDate, + ) +} diff --git a/common/build.gradle.kts b/common/build.gradle.kts new file mode 100644 index 00000000..8c79af0f --- /dev/null +++ b/common/build.gradle.kts @@ -0,0 +1,287 @@ +import com.codingfeline.buildkonfig.compiler.FieldSpec.Type.INT +import com.codingfeline.buildkonfig.compiler.FieldSpec.Type.STRING +import java.text.SimpleDateFormat +import java.util.* + +plugins { + alias(libs.plugins.kotlin.multiplatform) + alias(libs.plugins.android.library) + alias(libs.plugins.kotlin.plugin.parcelize) + alias(libs.plugins.kotlin.plugin.serialization) + alias(libs.plugins.ksp) + alias(libs.plugins.ktlint) + alias(libs.plugins.buildkonfig) + alias(libs.plugins.moko) + alias(libs.plugins.sqldelight) + alias(libs.plugins.compose) +} + +// +// Obtain the build configuration +// + +val versionInfo = createVersionInfo( + marketingVersion = libs.versions.appVersionName.get(), + logicalVersion = libs.versions.appVersionCode.get().toInt(), +) + +kotlin { + androidTarget() + jvm("desktop") + + sourceSets { + all { + languageSettings.optIn("kotlin.ExperimentalStdlibApi") + languageSettings.optIn("kotlin.time.ExperimentalTime") + languageSettings.optIn("androidx.compose.animation.ExperimentalAnimationApi") + languageSettings.optIn("androidx.compose.material.ExperimentalMaterialApi") + languageSettings.optIn("androidx.compose.foundation.ExperimentalFoundationApi") + languageSettings.optIn("androidx.compose.foundation.layout.ExperimentalLayoutApi") + languageSettings.optIn("androidx.compose.material3.ExperimentalMaterial3Api") + } + } + + sourceSets { + val commonMain by getting { + dependencies { + implementation(compose.runtime) + implementation(compose.foundation) + implementation(compose.material) + implementation(compose.material3) + implementation(compose.materialIconsExtended) + @OptIn(org.jetbrains.compose.ExperimentalComposeLibrary::class) + implementation(compose.components.resources) + + api(libs.kdrag0n.colorkt) + api(libs.kotlinx.coroutines.core) + api(libs.kotlinx.collections.immutable) + api(libs.kotlinx.datetime) + api(libs.kotlinx.serialization.json) + api(libs.kotlinx.serialization.cbor) + api(libs.arrow.arrow.core) + api(libs.arrow.arrow.optics) + api(libs.kodein.kodein.di) + api(libs.kodein.kodein.di.framework.compose) + api(libs.ktor.ktor.client.core) + api(libs.ktor.ktor.client.logging) + api(libs.ktor.ktor.client.content.negotiation) + api(libs.ktor.ktor.client.websockets) + api(libs.ktor.ktor.serialization.kotlinx) + api(libs.cash.sqldelight.coroutines.extensions) + api(libs.halilibo.richtext.ui.material3) + api(libs.halilibo.richtext.commonmark) + api(libs.devsrsouza.feather) + } + } + + // Share jvm code between different JVM platforms, see: + // https://youtrack.jetbrains.com/issue/KT-28194 + // for a proper implementation. + val jvmMain by creating { + dependsOn(commonMain) + dependencies { + implementation(libs.nulabinc.zxcvbn) + implementation(libs.commons.codec) + implementation(libs.bouncycastle.bcpkix) + implementation(libs.bouncycastle.bcprov) + implementation(libs.ricecode.string.similarity) + implementation(libs.google.zxing.core) + // SignalR + implementation(libs.microsoft.signalr) + implementation(libs.microsoft.signalr.messagepack) + // ...implicitly added by SignalR, so we might as well opt-in + // for the latest and 'best-est' version. + implementation(libs.squareup.okhttp) + implementation(libs.squareup.logging.interceptor) + api(libs.ktor.ktor.client.okhttp) + } + } + + val desktopMain by getting { + dependsOn(jvmMain) + dependencies { + implementation(compose.desktop.currentOs) + implementation(libs.kotlinx.coroutines.swing) + implementation(libs.google.zxing.javase) + implementation(libs.harawata.appdirs) + implementation(libs.commons.lang3) + api(libs.cash.sqldelight.sqlite.driver) + api(libs.kamel.image) + api(libs.mayakapps.window.styler) + api(libs.wunderbox.nativefiledialog) + api(libs.willena.sqlite.jdbc) + } + } + val androidMain by getting { + dependsOn(jvmMain) + dependencies { + api(platform(libs.firebase.bom.get())) + api(libs.firebase.analytics.ktx) + api(libs.firebase.crashlytics.ktx) + api(libs.achep.bindin) + api(libs.androidx.activity.compose) + api(libs.androidx.appcompat) + api(libs.androidx.autofill) + api(libs.androidx.biometric.ktx) + api(libs.androidx.browser) + api(libs.androidx.core.ktx) + api(libs.androidx.core.splashscreen) + api(libs.androidx.credentials) + api(libs.androidx.datastore) + api(libs.androidx.lifecycle.livedata.ktx) + api(libs.androidx.lifecycle.process) + api(libs.androidx.lifecycle.runtime.ktx) + api(libs.androidx.lifecycle.viewmodel.ktx) + api(libs.androidx.room.ktx) + api(libs.androidx.room.runtime) + api(libs.androidx.security.crypto.ktx) + api(libs.androidx.camera.core) + api(libs.androidx.camera.camera2) + api(libs.androidx.camera.lifecycle) + api(libs.androidx.camera.view) + api(libs.androidx.camera.extensions) + api(libs.androidx.work.runtime) + api(libs.androidx.work.runtime.ktx) + api(libs.androidx.profileinstaller) + api(libs.android.billing.ktx) + api(libs.android.billing) + api(libs.glide.annotations) + api(libs.glide.glide) + api(libs.landscapist.glide) + api(libs.landscapist.placeholder) + api(libs.tony19.logback.android) + api(libs.google.accompanist.drawablepainter) + api(libs.google.accompanist.navigation.material) + api(libs.google.accompanist.systemuicontroller) + api(libs.google.accompanist.permissions) + api(libs.google.play.review.ktx) + api(libs.google.play.services.base) + api(libs.google.play.services.mlkit.barcode.scanning) + api(libs.squareup.okhttp) + api(libs.squareup.logging.interceptor) + api(libs.ktor.ktor.client.okhttp) + api(libs.mm2d.touchicon.http.okhttp) + api(libs.mm2d.touchicon) + api(libs.sqlcipher.android) + api(libs.kotlinx.coroutines.android) + api(libs.kodein.kodein.di.framework.android.x.viewmodel.savedstate) + api(libs.slf4j.api) + api(libs.html.text) + api(libs.yubico.yubikit.android) + api(libs.cash.sqldelight.android.driver) + api(libs.fredporciuncula.flow.preferences) + } + } + } +} + +android { + compileSdk = libs.versions.androidCompileSdk.get().toInt() + namespace = "com.artemchep.keyguard.common" + + defaultConfig { + minSdk = libs.versions.androidMinSdk.get().toInt() + } + + compileOptions { + isCoreLibraryDesugaringEnabled = true + } + + ksp { + arg("room.schemaLocation", "$projectDir/schemas") + } + + buildFeatures { + buildConfig = true + } + + sourceSets["main"].manifest.srcFile("src/androidMain/AndroidManifest.xml") + sourceSets["main"].res.srcDirs("src/androidMain/res") + + val accountManagementDimension = "accountManagement" + flavorDimensions += accountManagementDimension + productFlavors { + maybeCreate("playStore").apply { + dimension = accountManagementDimension + buildConfigField("boolean", "ANALYTICS", "false") + } + maybeCreate("none").apply { + dimension = accountManagementDimension + buildConfigField("boolean", "ANALYTICS", "false") + } + } +} + +kotlin { + jvmToolchain(libs.versions.jdk.get().toInt()) +} + +// Generate KSP code for the common code: +// https://github.com/google/ksp/issues/567 +tasks.withType>().all { + if (name != "kspCommonMainKotlinMetadata") { + dependsOn("kspCommonMainKotlinMetadata") + } +} +kotlin.sourceSets.commonMain { + kotlin.srcDir("build/generated/ksp/metadata/commonMain/kotlin") +} + +// TODO: Fix a problem with Moko+KtLint: +// https://github.com/icerockdev/moko-resources/issues/421 + +// See: +// https://kotlinlang.org/docs/ksp-multiplatform.html#compilation-and-processing +dependencies { + // Adds KSP generated code to the common module, therefore + // to each of the platform. + add("kspCommonMainMetadata", libs.arrow.arrow.optics.ksp.plugin) + + add("kspAndroid", libs.androidx.room.compiler) + add("kspAndroid", libs.glide.ksp) + add("coreLibraryDesugaring", libs.android.desugarjdklibs) + + commonMainApi(libs.moko.resources) + commonMainApi(libs.moko.resources.compose) + commonTestImplementation(libs.moko.resources.test) +} + +multiplatformResources { + multiplatformResourcesPackage = "com.artemchep.keyguard.res" + multiplatformResourcesClassName = "Res" // optional, default MR +} + +enum class BuildType { + DEV, + RELEASE, +} + +buildkonfig { + packageName = "com.artemchep.keyguard.build" + + defaultConfigs { + buildConfigField(STRING, "buildType", BuildType.DEV.name) + buildConfigField(STRING, "buildDate", versionInfo.buildDate) + buildConfigField(STRING, "versionName", versionInfo.marketingVersion.toString()) + buildConfigField(INT, "versionCode", versionInfo.logicalVersion.toString()) + } + defaultConfigs("release") { + buildConfigField(STRING, "buildType", BuildType.RELEASE.name) + } +} + +sqldelight { + databases { + create("Database") { + packageName.set("com.artemchep.keyguard.data") + } + } + linkSqlite.set(false) +} + +// Reason: Task ':common:generateNoneReleaseLintVitalModel' uses this output of +// task ':common:copyFontsToAndroidAssets' without declaring an explicit or +// implicit dependency. This can lead to incorrect results being produced, +// depending on what order the tasks are executed. +tasks.findByName("generateNoneReleaseLintVitalModel")?.dependsOn("copyFontsToAndroidAssets") +tasks.findByName("generatePlayStoreReleaseLintVitalModel")?.dependsOn("copyFontsToAndroidAssets") diff --git a/common/schemas/com.artemchep.keyguard.android.downloader.journal.room.DownloadDatabase/1.json b/common/schemas/com.artemchep.keyguard.android.downloader.journal.room.DownloadDatabase/1.json new file mode 100644 index 00000000..c2d537ab --- /dev/null +++ b/common/schemas/com.artemchep.keyguard.android.downloader.journal.room.DownloadDatabase/1.json @@ -0,0 +1,106 @@ +{ + "formatVersion": 1, + "database": { + "version": 1, + "identityHash": "53d643f378ffabb9bd62c9aa47546bc6", + "entities": [ + { + "tableName": "DownloadInfoEntity", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `localCipherId` TEXT NOT NULL, `remoteCipherId` TEXT, `attachmentId` TEXT NOT NULL, `url` TEXT NOT NULL, `urlIsOneTime` INTEGER NOT NULL, `name` TEXT NOT NULL, `createdDate` INTEGER NOT NULL, `revisionDate` INTEGER NOT NULL, `encryptionKeyBase64` TEXT, `code` INTEGER, `attempt` INTEGER, `message` TEXT, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "localCipherId", + "columnName": "localCipherId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "remoteCipherId", + "columnName": "remoteCipherId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "attachmentId", + "columnName": "attachmentId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "url", + "columnName": "url", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "urlIsOneTime", + "columnName": "urlIsOneTime", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "createdDate", + "columnName": "createdDate", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "revisionDate", + "columnName": "revisionDate", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "encryptionKeyBase64", + "columnName": "encryptionKeyBase64", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "error.code", + "columnName": "code", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "error.attempt", + "columnName": "attempt", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "error.message", + "columnName": "message", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + } + ], + "views": [], + "setupQueries": [ + "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '53d643f378ffabb9bd62c9aa47546bc6')" + ] + } +} \ No newline at end of file diff --git a/common/schemas/com.artemchep.keyguard.android.downloader.journal.room.DownloadDatabase/2.json b/common/schemas/com.artemchep.keyguard.android.downloader.journal.room.DownloadDatabase/2.json new file mode 100644 index 00000000..02f31583 --- /dev/null +++ b/common/schemas/com.artemchep.keyguard.android.downloader.journal.room.DownloadDatabase/2.json @@ -0,0 +1,150 @@ +{ + "formatVersion": 1, + "database": { + "version": 2, + "identityHash": "c99763929d85fc7c3d7bb7800cb4f019", + "entities": [ + { + "tableName": "DownloadInfoEntity", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `localCipherId` TEXT NOT NULL, `remoteCipherId` TEXT, `attachmentId` TEXT NOT NULL, `url` TEXT NOT NULL, `urlIsOneTime` INTEGER NOT NULL, `name` TEXT NOT NULL, `createdDate` INTEGER NOT NULL, `revisionDate` INTEGER NOT NULL, `encryptionKeyBase64` TEXT, `code` INTEGER, `attempt` INTEGER, `message` TEXT, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "localCipherId", + "columnName": "localCipherId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "remoteCipherId", + "columnName": "remoteCipherId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "attachmentId", + "columnName": "attachmentId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "url", + "columnName": "url", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "urlIsOneTime", + "columnName": "urlIsOneTime", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "name", + "columnName": "name", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "createdDate", + "columnName": "createdDate", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "revisionDate", + "columnName": "revisionDate", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "encryptionKeyBase64", + "columnName": "encryptionKeyBase64", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "error.code", + "columnName": "code", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "error.attempt", + "columnName": "attempt", + "affinity": "INTEGER", + "notNull": false + }, + { + "fieldPath": "error.message", + "columnName": "message", + "affinity": "TEXT", + "notNull": false + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "GeneratorEntity", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` TEXT NOT NULL, `value` TEXT NOT NULL, `createdDate` INTEGER NOT NULL, `isPassword` INTEGER NOT NULL, `isUsername` INTEGER NOT NULL, PRIMARY KEY(`id`))", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "value", + "columnName": "value", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "createdDate", + "columnName": "createdDate", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "isPassword", + "columnName": "isPassword", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "isUsername", + "columnName": "isUsername", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [] + } + ], + "views": [], + "setupQueries": [ + "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'c99763929d85fc7c3d7bb7800cb4f019')" + ] + } +} \ No newline at end of file diff --git a/common/schemas/com.artemchep.keyguard.room.AppDatabase/1.json b/common/schemas/com.artemchep.keyguard.room.AppDatabase/1.json new file mode 100644 index 00000000..c04df786 --- /dev/null +++ b/common/schemas/com.artemchep.keyguard.room.AppDatabase/1.json @@ -0,0 +1,134 @@ +{ + "formatVersion": 1, + "database": { + "version": 1, + "identityHash": "d09ce5b46e6f63f4a372c20327ce9641", + "entities": [ + { + "tableName": "RoomBitwardenCipher", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`itemId` TEXT NOT NULL, `accountId` TEXT NOT NULL, `folderId` TEXT, `content` TEXT NOT NULL, PRIMARY KEY(`itemId`), FOREIGN KEY(`accountId`) REFERENCES `RoomBitwardenToken`(`accountId`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "itemId", + "columnName": "itemId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "accountId", + "columnName": "accountId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "folderId", + "columnName": "folderId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "content", + "columnName": "content", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "itemId" + ], + "autoGenerate": false + }, + "indices": [], + "foreignKeys": [ + { + "table": "RoomBitwardenToken", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "accountId" + ], + "referencedColumns": [ + "accountId" + ] + } + ] + }, + { + "tableName": "RoomBitwardenFolder", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`folderId` TEXT NOT NULL, `accountId` TEXT NOT NULL, `content` TEXT NOT NULL, PRIMARY KEY(`folderId`), FOREIGN KEY(`accountId`) REFERENCES `RoomBitwardenToken`(`accountId`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "folderId", + "columnName": "folderId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "accountId", + "columnName": "accountId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "content", + "columnName": "content", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "folderId" + ], + "autoGenerate": false + }, + "indices": [], + "foreignKeys": [ + { + "table": "RoomBitwardenToken", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "accountId" + ], + "referencedColumns": [ + "accountId" + ] + } + ] + }, + { + "tableName": "RoomBitwardenToken", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`accountId` TEXT NOT NULL, `content` TEXT NOT NULL, PRIMARY KEY(`accountId`))", + "fields": [ + { + "fieldPath": "accountId", + "columnName": "accountId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "content", + "columnName": "content", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "accountId" + ], + "autoGenerate": false + }, + "indices": [], + "foreignKeys": [] + } + ], + "views": [], + "setupQueries": [ + "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'd09ce5b46e6f63f4a372c20327ce9641')" + ] + } +} \ No newline at end of file diff --git a/common/schemas/com.artemchep.keyguard.room.AppDatabase/2.json b/common/schemas/com.artemchep.keyguard.room.AppDatabase/2.json new file mode 100644 index 00000000..0b771e65 --- /dev/null +++ b/common/schemas/com.artemchep.keyguard.room.AppDatabase/2.json @@ -0,0 +1,178 @@ +{ + "formatVersion": 1, + "database": { + "version": 2, + "identityHash": "80b67e4111717c76261cda0ba3f808b1", + "entities": [ + { + "tableName": "RoomBitwardenCipher", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`itemId` TEXT NOT NULL, `accountId` TEXT NOT NULL, `folderId` TEXT, `content` TEXT NOT NULL, PRIMARY KEY(`itemId`), FOREIGN KEY(`accountId`) REFERENCES `RoomBitwardenToken`(`accountId`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "itemId", + "columnName": "itemId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "accountId", + "columnName": "accountId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "folderId", + "columnName": "folderId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "content", + "columnName": "content", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "itemId" + ], + "autoGenerate": false + }, + "indices": [], + "foreignKeys": [ + { + "table": "RoomBitwardenToken", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "accountId" + ], + "referencedColumns": [ + "accountId" + ] + } + ] + }, + { + "tableName": "RoomBitwardenFolder", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`folderId` TEXT NOT NULL, `accountId` TEXT NOT NULL, `content` TEXT NOT NULL, PRIMARY KEY(`folderId`), FOREIGN KEY(`accountId`) REFERENCES `RoomBitwardenToken`(`accountId`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "folderId", + "columnName": "folderId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "accountId", + "columnName": "accountId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "content", + "columnName": "content", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "folderId" + ], + "autoGenerate": false + }, + "indices": [], + "foreignKeys": [ + { + "table": "RoomBitwardenToken", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "accountId" + ], + "referencedColumns": [ + "accountId" + ] + } + ] + }, + { + "tableName": "RoomBitwardenProfile", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`profileId` TEXT NOT NULL, `accountId` TEXT NOT NULL, `content` TEXT NOT NULL, PRIMARY KEY(`profileId`), FOREIGN KEY(`accountId`) REFERENCES `RoomBitwardenToken`(`accountId`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "profileId", + "columnName": "profileId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "accountId", + "columnName": "accountId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "content", + "columnName": "content", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "profileId" + ], + "autoGenerate": false + }, + "indices": [], + "foreignKeys": [ + { + "table": "RoomBitwardenToken", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "accountId" + ], + "referencedColumns": [ + "accountId" + ] + } + ] + }, + { + "tableName": "RoomBitwardenToken", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`accountId` TEXT NOT NULL, `content` TEXT NOT NULL, PRIMARY KEY(`accountId`))", + "fields": [ + { + "fieldPath": "accountId", + "columnName": "accountId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "content", + "columnName": "content", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "accountId" + ], + "autoGenerate": false + }, + "indices": [], + "foreignKeys": [] + } + ], + "views": [], + "setupQueries": [ + "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '80b67e4111717c76261cda0ba3f808b1')" + ] + } +} \ No newline at end of file diff --git a/common/schemas/com.artemchep.keyguard.room.AppDatabase/3.json b/common/schemas/com.artemchep.keyguard.room.AppDatabase/3.json new file mode 100644 index 00000000..03703a1a --- /dev/null +++ b/common/schemas/com.artemchep.keyguard.room.AppDatabase/3.json @@ -0,0 +1,216 @@ +{ + "formatVersion": 1, + "database": { + "version": 3, + "identityHash": "e852ea9f03a252a7474115e971772d79", + "entities": [ + { + "tableName": "RoomBitwardenCipher", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`itemId` TEXT NOT NULL, `accountId` TEXT NOT NULL, `folderId` TEXT, `content` TEXT NOT NULL, PRIMARY KEY(`itemId`), FOREIGN KEY(`accountId`) REFERENCES `RoomBitwardenToken`(`accountId`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "itemId", + "columnName": "itemId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "accountId", + "columnName": "accountId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "folderId", + "columnName": "folderId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "content", + "columnName": "content", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "itemId" + ], + "autoGenerate": false + }, + "indices": [], + "foreignKeys": [ + { + "table": "RoomBitwardenToken", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "accountId" + ], + "referencedColumns": [ + "accountId" + ] + } + ] + }, + { + "tableName": "RoomBitwardenFolder", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`folderId` TEXT NOT NULL, `accountId` TEXT NOT NULL, `content` TEXT NOT NULL, PRIMARY KEY(`folderId`), FOREIGN KEY(`accountId`) REFERENCES `RoomBitwardenToken`(`accountId`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "folderId", + "columnName": "folderId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "accountId", + "columnName": "accountId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "content", + "columnName": "content", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "folderId" + ], + "autoGenerate": false + }, + "indices": [], + "foreignKeys": [ + { + "table": "RoomBitwardenToken", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "accountId" + ], + "referencedColumns": [ + "accountId" + ] + } + ] + }, + { + "tableName": "RoomBitwardenProfile", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`profileId` TEXT NOT NULL, `accountId` TEXT NOT NULL, `content` TEXT NOT NULL, PRIMARY KEY(`profileId`), FOREIGN KEY(`accountId`) REFERENCES `RoomBitwardenToken`(`accountId`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "profileId", + "columnName": "profileId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "accountId", + "columnName": "accountId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "content", + "columnName": "content", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "profileId" + ], + "autoGenerate": false + }, + "indices": [], + "foreignKeys": [ + { + "table": "RoomBitwardenToken", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "accountId" + ], + "referencedColumns": [ + "accountId" + ] + } + ] + }, + { + "tableName": "RoomBitwardenMeta", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`accountId` TEXT NOT NULL, `content` TEXT NOT NULL, PRIMARY KEY(`accountId`), FOREIGN KEY(`accountId`) REFERENCES `RoomBitwardenToken`(`accountId`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "accountId", + "columnName": "accountId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "content", + "columnName": "content", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "accountId" + ], + "autoGenerate": false + }, + "indices": [], + "foreignKeys": [ + { + "table": "RoomBitwardenToken", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "accountId" + ], + "referencedColumns": [ + "accountId" + ] + } + ] + }, + { + "tableName": "RoomBitwardenToken", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`accountId` TEXT NOT NULL, `content` TEXT NOT NULL, PRIMARY KEY(`accountId`))", + "fields": [ + { + "fieldPath": "accountId", + "columnName": "accountId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "content", + "columnName": "content", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "columnNames": [ + "accountId" + ], + "autoGenerate": false + }, + "indices": [], + "foreignKeys": [] + } + ], + "views": [], + "setupQueries": [ + "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'e852ea9f03a252a7474115e971772d79')" + ] + } +} \ No newline at end of file diff --git a/common/schemas/com.artemchep.keyguard.room.AppDatabase/4.json b/common/schemas/com.artemchep.keyguard.room.AppDatabase/4.json new file mode 100644 index 00000000..5cd0b17f --- /dev/null +++ b/common/schemas/com.artemchep.keyguard.room.AppDatabase/4.json @@ -0,0 +1,338 @@ +{ + "formatVersion": 1, + "database": { + "version": 4, + "identityHash": "3b5b7bb2a221337ef9d029ac86cd78a5", + "entities": [ + { + "tableName": "RoomBitwardenCipher", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`itemId` TEXT NOT NULL, `accountId` TEXT NOT NULL, `folderId` TEXT, `content` TEXT NOT NULL, PRIMARY KEY(`itemId`), FOREIGN KEY(`accountId`) REFERENCES `RoomBitwardenToken`(`accountId`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "itemId", + "columnName": "itemId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "accountId", + "columnName": "accountId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "folderId", + "columnName": "folderId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "content", + "columnName": "content", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "itemId" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "RoomBitwardenToken", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "accountId" + ], + "referencedColumns": [ + "accountId" + ] + } + ] + }, + { + "tableName": "RoomBitwardenFolder", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`folderId` TEXT NOT NULL, `accountId` TEXT NOT NULL, `content` TEXT NOT NULL, PRIMARY KEY(`folderId`), FOREIGN KEY(`accountId`) REFERENCES `RoomBitwardenToken`(`accountId`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "folderId", + "columnName": "folderId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "accountId", + "columnName": "accountId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "content", + "columnName": "content", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "folderId" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "RoomBitwardenToken", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "accountId" + ], + "referencedColumns": [ + "accountId" + ] + } + ] + }, + { + "tableName": "RoomBitwardenProfile", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`profileId` TEXT NOT NULL, `accountId` TEXT NOT NULL, `content` TEXT NOT NULL, PRIMARY KEY(`profileId`), FOREIGN KEY(`accountId`) REFERENCES `RoomBitwardenToken`(`accountId`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "profileId", + "columnName": "profileId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "accountId", + "columnName": "accountId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "content", + "columnName": "content", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "profileId" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "RoomBitwardenToken", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "accountId" + ], + "referencedColumns": [ + "accountId" + ] + } + ] + }, + { + "tableName": "RoomBitwardenMeta", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`accountId` TEXT NOT NULL, `content` TEXT NOT NULL, PRIMARY KEY(`accountId`), FOREIGN KEY(`accountId`) REFERENCES `RoomBitwardenToken`(`accountId`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "accountId", + "columnName": "accountId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "content", + "columnName": "content", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "accountId" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "RoomBitwardenToken", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "accountId" + ], + "referencedColumns": [ + "accountId" + ] + } + ] + }, + { + "tableName": "RoomBitwardenToken", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`accountId` TEXT NOT NULL, `content` TEXT NOT NULL, PRIMARY KEY(`accountId`))", + "fields": [ + { + "fieldPath": "accountId", + "columnName": "accountId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "content", + "columnName": "content", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "accountId" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "RoomOpenCipherHistory", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `itemId` TEXT NOT NULL, `accountId` TEXT NOT NULL, `timestamp` INTEGER NOT NULL, FOREIGN KEY(`accountId`) REFERENCES `RoomBitwardenToken`(`accountId`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`itemId`) REFERENCES `RoomBitwardenCipher`(`itemId`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "itemId", + "columnName": "itemId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "accountId", + "columnName": "accountId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "RoomBitwardenToken", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "accountId" + ], + "referencedColumns": [ + "accountId" + ] + }, + { + "table": "RoomBitwardenCipher", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "itemId" + ], + "referencedColumns": [ + "itemId" + ] + } + ] + }, + { + "tableName": "RoomFillCipherHistory", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `itemId` TEXT NOT NULL, `accountId` TEXT NOT NULL, `timestamp` INTEGER NOT NULL, FOREIGN KEY(`accountId`) REFERENCES `RoomBitwardenToken`(`accountId`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`itemId`) REFERENCES `RoomBitwardenCipher`(`itemId`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "itemId", + "columnName": "itemId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "accountId", + "columnName": "accountId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "RoomBitwardenToken", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "accountId" + ], + "referencedColumns": [ + "accountId" + ] + }, + { + "table": "RoomBitwardenCipher", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "itemId" + ], + "referencedColumns": [ + "itemId" + ] + } + ] + } + ], + "views": [], + "setupQueries": [ + "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '3b5b7bb2a221337ef9d029ac86cd78a5')" + ] + } +} \ No newline at end of file diff --git a/common/schemas/com.artemchep.keyguard.room.AppDatabase/5.json b/common/schemas/com.artemchep.keyguard.room.AppDatabase/5.json new file mode 100644 index 00000000..90c43a83 --- /dev/null +++ b/common/schemas/com.artemchep.keyguard.room.AppDatabase/5.json @@ -0,0 +1,382 @@ +{ + "formatVersion": 1, + "database": { + "version": 5, + "identityHash": "6c449d38d70cafefc154296d5459a2a1", + "entities": [ + { + "tableName": "RoomBitwardenCipher", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`itemId` TEXT NOT NULL, `accountId` TEXT NOT NULL, `folderId` TEXT, `content` TEXT NOT NULL, PRIMARY KEY(`itemId`), FOREIGN KEY(`accountId`) REFERENCES `RoomBitwardenToken`(`accountId`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "itemId", + "columnName": "itemId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "accountId", + "columnName": "accountId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "folderId", + "columnName": "folderId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "content", + "columnName": "content", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "itemId" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "RoomBitwardenToken", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "accountId" + ], + "referencedColumns": [ + "accountId" + ] + } + ] + }, + { + "tableName": "RoomBitwardenCollection", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`collectionId` TEXT NOT NULL, `accountId` TEXT NOT NULL, `content` TEXT NOT NULL, PRIMARY KEY(`collectionId`), FOREIGN KEY(`accountId`) REFERENCES `RoomBitwardenToken`(`accountId`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "collectionId", + "columnName": "collectionId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "accountId", + "columnName": "accountId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "content", + "columnName": "content", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "collectionId" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "RoomBitwardenToken", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "accountId" + ], + "referencedColumns": [ + "accountId" + ] + } + ] + }, + { + "tableName": "RoomBitwardenFolder", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`folderId` TEXT NOT NULL, `accountId` TEXT NOT NULL, `content` TEXT NOT NULL, PRIMARY KEY(`folderId`), FOREIGN KEY(`accountId`) REFERENCES `RoomBitwardenToken`(`accountId`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "folderId", + "columnName": "folderId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "accountId", + "columnName": "accountId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "content", + "columnName": "content", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "folderId" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "RoomBitwardenToken", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "accountId" + ], + "referencedColumns": [ + "accountId" + ] + } + ] + }, + { + "tableName": "RoomBitwardenProfile", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`profileId` TEXT NOT NULL, `accountId` TEXT NOT NULL, `content` TEXT NOT NULL, PRIMARY KEY(`profileId`), FOREIGN KEY(`accountId`) REFERENCES `RoomBitwardenToken`(`accountId`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "profileId", + "columnName": "profileId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "accountId", + "columnName": "accountId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "content", + "columnName": "content", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "profileId" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "RoomBitwardenToken", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "accountId" + ], + "referencedColumns": [ + "accountId" + ] + } + ] + }, + { + "tableName": "RoomBitwardenMeta", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`accountId` TEXT NOT NULL, `content` TEXT NOT NULL, PRIMARY KEY(`accountId`), FOREIGN KEY(`accountId`) REFERENCES `RoomBitwardenToken`(`accountId`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "accountId", + "columnName": "accountId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "content", + "columnName": "content", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "accountId" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "RoomBitwardenToken", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "accountId" + ], + "referencedColumns": [ + "accountId" + ] + } + ] + }, + { + "tableName": "RoomBitwardenToken", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`accountId` TEXT NOT NULL, `content` TEXT NOT NULL, PRIMARY KEY(`accountId`))", + "fields": [ + { + "fieldPath": "accountId", + "columnName": "accountId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "content", + "columnName": "content", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "accountId" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "RoomOpenCipherHistory", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `itemId` TEXT NOT NULL, `accountId` TEXT NOT NULL, `timestamp` INTEGER NOT NULL, FOREIGN KEY(`accountId`) REFERENCES `RoomBitwardenToken`(`accountId`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`itemId`) REFERENCES `RoomBitwardenCipher`(`itemId`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "itemId", + "columnName": "itemId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "accountId", + "columnName": "accountId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "RoomBitwardenToken", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "accountId" + ], + "referencedColumns": [ + "accountId" + ] + }, + { + "table": "RoomBitwardenCipher", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "itemId" + ], + "referencedColumns": [ + "itemId" + ] + } + ] + }, + { + "tableName": "RoomFillCipherHistory", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `itemId` TEXT NOT NULL, `accountId` TEXT NOT NULL, `timestamp` INTEGER NOT NULL, FOREIGN KEY(`accountId`) REFERENCES `RoomBitwardenToken`(`accountId`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`itemId`) REFERENCES `RoomBitwardenCipher`(`itemId`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "itemId", + "columnName": "itemId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "accountId", + "columnName": "accountId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "RoomBitwardenToken", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "accountId" + ], + "referencedColumns": [ + "accountId" + ] + }, + { + "table": "RoomBitwardenCipher", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "itemId" + ], + "referencedColumns": [ + "itemId" + ] + } + ] + } + ], + "views": [], + "setupQueries": [ + "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '6c449d38d70cafefc154296d5459a2a1')" + ] + } +} \ No newline at end of file diff --git a/common/schemas/com.artemchep.keyguard.room.AppDatabase/6.json b/common/schemas/com.artemchep.keyguard.room.AppDatabase/6.json new file mode 100644 index 00000000..e58c4844 --- /dev/null +++ b/common/schemas/com.artemchep.keyguard.room.AppDatabase/6.json @@ -0,0 +1,426 @@ +{ + "formatVersion": 1, + "database": { + "version": 6, + "identityHash": "39a9aea08d46cef5a7696aa996c73682", + "entities": [ + { + "tableName": "RoomBitwardenCipher", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`itemId` TEXT NOT NULL, `accountId` TEXT NOT NULL, `folderId` TEXT, `content` TEXT NOT NULL, PRIMARY KEY(`itemId`), FOREIGN KEY(`accountId`) REFERENCES `RoomBitwardenToken`(`accountId`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "itemId", + "columnName": "itemId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "accountId", + "columnName": "accountId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "folderId", + "columnName": "folderId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "content", + "columnName": "content", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "itemId" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "RoomBitwardenToken", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "accountId" + ], + "referencedColumns": [ + "accountId" + ] + } + ] + }, + { + "tableName": "RoomBitwardenCollection", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`collectionId` TEXT NOT NULL, `accountId` TEXT NOT NULL, `content` TEXT NOT NULL, PRIMARY KEY(`collectionId`), FOREIGN KEY(`accountId`) REFERENCES `RoomBitwardenToken`(`accountId`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "collectionId", + "columnName": "collectionId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "accountId", + "columnName": "accountId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "content", + "columnName": "content", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "collectionId" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "RoomBitwardenToken", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "accountId" + ], + "referencedColumns": [ + "accountId" + ] + } + ] + }, + { + "tableName": "RoomBitwardenOrganization", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`organizationId` TEXT NOT NULL, `accountId` TEXT NOT NULL, `content` TEXT NOT NULL, PRIMARY KEY(`organizationId`), FOREIGN KEY(`accountId`) REFERENCES `RoomBitwardenToken`(`accountId`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "organizationId", + "columnName": "organizationId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "accountId", + "columnName": "accountId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "content", + "columnName": "content", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "organizationId" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "RoomBitwardenToken", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "accountId" + ], + "referencedColumns": [ + "accountId" + ] + } + ] + }, + { + "tableName": "RoomBitwardenFolder", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`folderId` TEXT NOT NULL, `accountId` TEXT NOT NULL, `content` TEXT NOT NULL, PRIMARY KEY(`folderId`), FOREIGN KEY(`accountId`) REFERENCES `RoomBitwardenToken`(`accountId`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "folderId", + "columnName": "folderId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "accountId", + "columnName": "accountId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "content", + "columnName": "content", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "folderId" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "RoomBitwardenToken", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "accountId" + ], + "referencedColumns": [ + "accountId" + ] + } + ] + }, + { + "tableName": "RoomBitwardenProfile", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`profileId` TEXT NOT NULL, `accountId` TEXT NOT NULL, `content` TEXT NOT NULL, PRIMARY KEY(`profileId`), FOREIGN KEY(`accountId`) REFERENCES `RoomBitwardenToken`(`accountId`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "profileId", + "columnName": "profileId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "accountId", + "columnName": "accountId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "content", + "columnName": "content", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "profileId" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "RoomBitwardenToken", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "accountId" + ], + "referencedColumns": [ + "accountId" + ] + } + ] + }, + { + "tableName": "RoomBitwardenMeta", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`accountId` TEXT NOT NULL, `content` TEXT NOT NULL, PRIMARY KEY(`accountId`), FOREIGN KEY(`accountId`) REFERENCES `RoomBitwardenToken`(`accountId`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "accountId", + "columnName": "accountId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "content", + "columnName": "content", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "accountId" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "RoomBitwardenToken", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "accountId" + ], + "referencedColumns": [ + "accountId" + ] + } + ] + }, + { + "tableName": "RoomBitwardenToken", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`accountId` TEXT NOT NULL, `content` TEXT NOT NULL, PRIMARY KEY(`accountId`))", + "fields": [ + { + "fieldPath": "accountId", + "columnName": "accountId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "content", + "columnName": "content", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "accountId" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "RoomOpenCipherHistory", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `itemId` TEXT NOT NULL, `accountId` TEXT NOT NULL, `timestamp` INTEGER NOT NULL, FOREIGN KEY(`accountId`) REFERENCES `RoomBitwardenToken`(`accountId`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`itemId`) REFERENCES `RoomBitwardenCipher`(`itemId`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "itemId", + "columnName": "itemId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "accountId", + "columnName": "accountId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "RoomBitwardenToken", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "accountId" + ], + "referencedColumns": [ + "accountId" + ] + }, + { + "table": "RoomBitwardenCipher", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "itemId" + ], + "referencedColumns": [ + "itemId" + ] + } + ] + }, + { + "tableName": "RoomFillCipherHistory", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `itemId` TEXT NOT NULL, `accountId` TEXT NOT NULL, `timestamp` INTEGER NOT NULL, FOREIGN KEY(`accountId`) REFERENCES `RoomBitwardenToken`(`accountId`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`itemId`) REFERENCES `RoomBitwardenCipher`(`itemId`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "itemId", + "columnName": "itemId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "accountId", + "columnName": "accountId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "RoomBitwardenToken", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "accountId" + ], + "referencedColumns": [ + "accountId" + ] + }, + { + "table": "RoomBitwardenCipher", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "itemId" + ], + "referencedColumns": [ + "itemId" + ] + } + ] + } + ], + "views": [], + "setupQueries": [ + "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, '39a9aea08d46cef5a7696aa996c73682')" + ] + } +} \ No newline at end of file diff --git a/common/schemas/com.artemchep.keyguard.room.AppDatabase/7.json b/common/schemas/com.artemchep.keyguard.room.AppDatabase/7.json new file mode 100644 index 00000000..e75faa06 --- /dev/null +++ b/common/schemas/com.artemchep.keyguard.room.AppDatabase/7.json @@ -0,0 +1,429 @@ +{ + "formatVersion": 1, + "database": { + "version": 7, + "identityHash": "f1e09fbf3d6219a63100a2a48e2e8187", + "entities": [ + { + "tableName": "RoomBitwardenCipher", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`itemId` TEXT NOT NULL, `accountId` TEXT NOT NULL, `folderId` TEXT, `content` TEXT NOT NULL, PRIMARY KEY(`itemId`), FOREIGN KEY(`accountId`) REFERENCES `RoomBitwardenToken`(`accountId`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "itemId", + "columnName": "itemId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "accountId", + "columnName": "accountId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "folderId", + "columnName": "folderId", + "affinity": "TEXT", + "notNull": false + }, + { + "fieldPath": "content", + "columnName": "content", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "itemId" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "RoomBitwardenToken", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "accountId" + ], + "referencedColumns": [ + "accountId" + ] + } + ] + }, + { + "tableName": "RoomBitwardenCollection", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`collectionId` TEXT NOT NULL, `accountId` TEXT NOT NULL, `content` TEXT NOT NULL, PRIMARY KEY(`collectionId`, `accountId`), FOREIGN KEY(`accountId`) REFERENCES `RoomBitwardenToken`(`accountId`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "collectionId", + "columnName": "collectionId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "accountId", + "columnName": "accountId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "content", + "columnName": "content", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "collectionId", + "accountId" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "RoomBitwardenToken", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "accountId" + ], + "referencedColumns": [ + "accountId" + ] + } + ] + }, + { + "tableName": "RoomBitwardenOrganization", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`organizationId` TEXT NOT NULL, `accountId` TEXT NOT NULL, `content` TEXT NOT NULL, PRIMARY KEY(`organizationId`, `accountId`), FOREIGN KEY(`accountId`) REFERENCES `RoomBitwardenToken`(`accountId`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "organizationId", + "columnName": "organizationId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "accountId", + "columnName": "accountId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "content", + "columnName": "content", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "organizationId", + "accountId" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "RoomBitwardenToken", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "accountId" + ], + "referencedColumns": [ + "accountId" + ] + } + ] + }, + { + "tableName": "RoomBitwardenFolder", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`folderId` TEXT NOT NULL, `accountId` TEXT NOT NULL, `content` TEXT NOT NULL, PRIMARY KEY(`folderId`), FOREIGN KEY(`accountId`) REFERENCES `RoomBitwardenToken`(`accountId`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "folderId", + "columnName": "folderId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "accountId", + "columnName": "accountId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "content", + "columnName": "content", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "folderId" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "RoomBitwardenToken", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "accountId" + ], + "referencedColumns": [ + "accountId" + ] + } + ] + }, + { + "tableName": "RoomBitwardenProfile", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`profileId` TEXT NOT NULL, `accountId` TEXT NOT NULL, `content` TEXT NOT NULL, PRIMARY KEY(`profileId`, `accountId`), FOREIGN KEY(`accountId`) REFERENCES `RoomBitwardenToken`(`accountId`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "profileId", + "columnName": "profileId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "accountId", + "columnName": "accountId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "content", + "columnName": "content", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "profileId", + "accountId" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "RoomBitwardenToken", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "accountId" + ], + "referencedColumns": [ + "accountId" + ] + } + ] + }, + { + "tableName": "RoomBitwardenMeta", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`accountId` TEXT NOT NULL, `content` TEXT NOT NULL, PRIMARY KEY(`accountId`), FOREIGN KEY(`accountId`) REFERENCES `RoomBitwardenToken`(`accountId`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "accountId", + "columnName": "accountId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "content", + "columnName": "content", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "accountId" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "RoomBitwardenToken", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "accountId" + ], + "referencedColumns": [ + "accountId" + ] + } + ] + }, + { + "tableName": "RoomBitwardenToken", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`accountId` TEXT NOT NULL, `content` TEXT NOT NULL, PRIMARY KEY(`accountId`))", + "fields": [ + { + "fieldPath": "accountId", + "columnName": "accountId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "content", + "columnName": "content", + "affinity": "TEXT", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": false, + "columnNames": [ + "accountId" + ] + }, + "indices": [], + "foreignKeys": [] + }, + { + "tableName": "RoomOpenCipherHistory", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `itemId` TEXT NOT NULL, `accountId` TEXT NOT NULL, `timestamp` INTEGER NOT NULL, FOREIGN KEY(`accountId`) REFERENCES `RoomBitwardenToken`(`accountId`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`itemId`) REFERENCES `RoomBitwardenCipher`(`itemId`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "itemId", + "columnName": "itemId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "accountId", + "columnName": "accountId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "RoomBitwardenToken", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "accountId" + ], + "referencedColumns": [ + "accountId" + ] + }, + { + "table": "RoomBitwardenCipher", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "itemId" + ], + "referencedColumns": [ + "itemId" + ] + } + ] + }, + { + "tableName": "RoomFillCipherHistory", + "createSql": "CREATE TABLE IF NOT EXISTS `${TABLE_NAME}` (`id` INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, `itemId` TEXT NOT NULL, `accountId` TEXT NOT NULL, `timestamp` INTEGER NOT NULL, FOREIGN KEY(`accountId`) REFERENCES `RoomBitwardenToken`(`accountId`) ON UPDATE NO ACTION ON DELETE CASCADE , FOREIGN KEY(`itemId`) REFERENCES `RoomBitwardenCipher`(`itemId`) ON UPDATE NO ACTION ON DELETE CASCADE )", + "fields": [ + { + "fieldPath": "id", + "columnName": "id", + "affinity": "INTEGER", + "notNull": true + }, + { + "fieldPath": "itemId", + "columnName": "itemId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "accountId", + "columnName": "accountId", + "affinity": "TEXT", + "notNull": true + }, + { + "fieldPath": "timestamp", + "columnName": "timestamp", + "affinity": "INTEGER", + "notNull": true + } + ], + "primaryKey": { + "autoGenerate": true, + "columnNames": [ + "id" + ] + }, + "indices": [], + "foreignKeys": [ + { + "table": "RoomBitwardenToken", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "accountId" + ], + "referencedColumns": [ + "accountId" + ] + }, + { + "table": "RoomBitwardenCipher", + "onDelete": "CASCADE", + "onUpdate": "NO ACTION", + "columns": [ + "itemId" + ], + "referencedColumns": [ + "itemId" + ] + } + ] + } + ], + "views": [], + "setupQueries": [ + "CREATE TABLE IF NOT EXISTS room_master_table (id INTEGER PRIMARY KEY,identity_hash TEXT)", + "INSERT OR REPLACE INTO room_master_table (id,identity_hash) VALUES(42, 'f1e09fbf3d6219a63100a2a48e2e8187')" + ] + } +} \ No newline at end of file diff --git a/common/src/androidMain/AndroidManifest.xml b/common/src/androidMain/AndroidManifest.xml new file mode 100644 index 00000000..1de2b791 --- /dev/null +++ b/common/src/androidMain/AndroidManifest.xml @@ -0,0 +1,248 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/AutofillActArgs.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/AutofillActArgs.kt new file mode 100644 index 00000000..d3a7ed15 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/AutofillActArgs.kt @@ -0,0 +1,133 @@ +package com.artemchep.keyguard + +import com.artemchep.keyguard.android.AutofillActivity +import com.artemchep.keyguard.android.AutofillSaveActivity +import com.artemchep.keyguard.common.model.AutofillHint +import com.artemchep.keyguard.common.model.AutofillTarget +import com.artemchep.keyguard.common.model.GeneratorContext +import com.artemchep.keyguard.common.model.LinkInfoPlatform +import com.artemchep.keyguard.feature.home.vault.add.AddRoute +import com.artemchep.keyguard.feature.home.vault.add.of +import io.ktor.http.Url + +actual typealias AutofillActArgs = AutofillActivity.Args + +actual typealias AutofillSaveActArgs = AutofillSaveActivity.Args + +actual val AppMode.autofillTarget: AutofillTarget? + get() = when (this) { + is AppMode.Pick -> + AutofillTarget( + links = listOfNotNull( + // application id + args.applicationId?.let { + LinkInfoPlatform.Android( + packageName = it, + ) + }, + // website + args.webDomain?.let { + val url = Url("https://$it") + LinkInfoPlatform.Web( + url = url, + frontPageUrl = url, + ) + }, + ), + hints = args.autofillStructure2?.items?.map { it.hint }.orEmpty(), + ) + + is AppMode.Save -> + AutofillTarget( + links = listOfNotNull( + // application id + args.applicationId?.let { + LinkInfoPlatform.Android( + packageName = it, + ) + }, + // website + args.webDomain?.let { + val url = Url("https://$it") + LinkInfoPlatform.Web( + url = url, + frontPageUrl = url, + ) + }, + ), + hints = args.autofillStructure2?.items?.map { it.hint }.orEmpty(), + ) + + is AppMode.Main -> + null + + is AppMode.PickPasskey -> + null + + is AppMode.SavePasskey -> { + val rpId = rpId + if (rpId != null) { + AutofillTarget( + links = listOfNotNull( + // origin + run { + val url = Url(rpId.removePrefix("https://").let { "https://$it" }) + LinkInfoPlatform.Web( + url = url, + frontPageUrl = url, + ) + }, + ), + hints = listOf( + AutofillHint.EMAIL_ADDRESS, + ), + ) + } else { + null + } + } + } + +actual val AppMode.generatorTarget: GeneratorContext + get() = when (this) { + is AppMode.Pick -> { + val host = args.webDomain + GeneratorContext( + host = host, + ) + } + + is AppMode.Save -> { + val host = args.webDomain + GeneratorContext( + host = host, + ) + } + + is AppMode.Main -> { + GeneratorContext( + host = null, + ) + } + + is AppMode.PickPasskey -> { + GeneratorContext( + host = null, + ) + } + + is AppMode.SavePasskey -> { + val host = rpId + GeneratorContext( + host = host, + ) + } + } + +actual fun AddRoute.Args.Autofill.Companion.leof( + source: AutofillActArgs, +): AddRoute.Args.Autofill = of(source) + +actual fun AddRoute.Args.Autofill.Companion.leof( + source: AutofillSaveActArgs, +): AddRoute.Args.Autofill = of(source) diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/android/AutofillActivity.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/AutofillActivity.kt new file mode 100644 index 00000000..6032dbf8 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/AutofillActivity.kt @@ -0,0 +1,273 @@ +package com.artemchep.keyguard.android + +import android.app.PendingIntent +import android.content.Context +import android.content.Intent +import android.os.Bundle +import android.os.Parcelable +import android.service.autofill.Dataset +import android.view.View +import android.view.autofill.AutofillId +import android.view.autofill.AutofillManager +import android.view.autofill.AutofillValue +import android.widget.RemoteViews +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Close +import androidx.compose.material3.Icon +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.AppMode +import com.artemchep.keyguard.LocalAppMode +import com.artemchep.keyguard.android.autofill.AutofillStructure2 +import com.artemchep.keyguard.common.R +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.model.AutofillHint +import com.artemchep.keyguard.common.model.DSecret +import com.artemchep.keyguard.common.model.gett +import com.artemchep.keyguard.common.usecase.GetTotpCode +import com.artemchep.keyguard.pick +import com.artemchep.keyguard.platform.recordLog +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.theme.Dimens +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.runBlocking +import kotlinx.parcelize.Parcelize +import org.kodein.di.DIAware +import org.kodein.di.direct +import org.kodein.di.instance + +class AutofillActivity : BaseActivity(), DIAware { + companion object { + private const val KEY_ARGUMENTS = "arguments" + + fun getIntent( + context: Context, + args: Args, + ): Intent = Intent(context, AutofillActivity::class.java).apply { + putExtra(KEY_ARGUMENTS, args) + } + } + + @Parcelize + data class Args( + val autofillStructure2: AutofillStructure2? = null, + val applicationId: String? = null, + val webDomain: String? = null, + val webScheme: String? = null, + ) : Parcelable + + private val getTotpCode: GetTotpCode by lazy { + di.direct.instance() + } + + private val args by lazy { + intent.extras?.getParcelable(KEY_ARGUMENTS) + ?: Args( + applicationId = packageName, + ) + } + + private fun tryBuildDataset( + index: Int, + context: Context, + secret: DSecret, + struct: AutofillStructure2, + onComplete: (Dataset.Builder.() -> Unit)? = null, + ): Dataset? { + val views = RemoteViews(context.packageName, R.layout.item_autofill_entry).apply { + setTextViewText(R.id.autofill_entry_name, secret.name) + val username = kotlin.run { + secret.login?.username?.also { return@run it } + secret.card?.number?.also { return@run it } + secret.uris.firstOrNull() + ?.uri + ?.also { return@run it } + null + } + if (username != null) { + setTextViewText(R.id.autofill_entry_username, username) + } else { + setViewVisibility(R.id.autofill_entry_username, View.GONE) + } + } + + fun createDatasetBuilder(): Dataset.Builder { + val builder = Dataset.Builder(views) + builder.setId(secret.id) + val fields = runBlocking { + val hints = struct.items + .asSequence() + .map { it.hint } + .toSet() + secret.gett( + hints = hints, + getTotpCode = getTotpCode, + ).bind() + } + struct.items.forEach { structItem -> + val value = fields[structItem.hint] + builder.trySetValue( + id = structItem.id, + value = value, + ) + } + return builder + } + + val builder = createDatasetBuilder() + try { + val dataset = createDatasetBuilder().build() + val intent = AutofillFakeAuthActivity.getIntent( + this, + dataset = dataset, + cipher = secret, + structure = struct, + ) + val pi = PendingIntent.getActivity( + this, + 1500 + index, + intent, + PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_CANCEL_CURRENT, + ) + + builder.setAuthentication(pi.intentSender) + } catch (e: Exception) { + // Ignored + } + + onComplete?.invoke(builder) + + return try { + builder.build() + } catch (e: Exception) { + null // not a single value set + } + } + + private fun Dataset.Builder.trySetValue( + id: AutofillId?, + value: String?, + ) { + if (id != null && value != null) { + setValue(id, AutofillValue.forText(value)) + } + } + + private fun autofill(secret: DSecret) { + val struct = args.autofillStructure2 + ?: return + val dataset = tryBuildDataset( + index = 555, + context = this, + secret = secret, + struct = struct, + ) + if (dataset != null) { + val intent = Intent().apply { + putExtra(AutofillManager.EXTRA_AUTHENTICATION_RESULT, dataset) + } + setResult(RESULT_OK, intent) + finish() + } else { + // TODO: Show a message or something + } + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + recordLog("Opened autofill pick activity") + } + + @Composable + override fun Content() { + CompositionLocalProvider( + LocalAppMode provides AppMode.Pick( + type = kotlin.run { + val loginSearch = args.autofillStructure2?.items?.any { + it.hint == AutofillHint.PASSWORD || + it.hint == AutofillHint.PHONE_NUMBER || + it.hint == AutofillHint.EMAIL_ADDRESS || + it.hint == AutofillHint.USERNAME + } == true + val cardSearch = args.autofillStructure2?.items?.any { + it.hint == AutofillHint.CREDIT_CARD_NUMBER || + it.hint == AutofillHint.CREDIT_CARD_SECURITY_CODE || + it.hint == AutofillHint.CREDIT_CARD_EXPIRATION_DATE || + it.hint == AutofillHint.CREDIT_CARD_EXPIRATION_DAY || + it.hint == AutofillHint.CREDIT_CARD_EXPIRATION_YEAR || + it.hint == AutofillHint.CREDIT_CARD_EXPIRATION_MONTH + } == true + if (loginSearch && cardSearch) { + null + } else if (loginSearch) { + DSecret.Type.Login + } else if (cardSearch) { + DSecret.Type.Card + } else { + null + } + }, + args = args, + onAutofill = ::autofill, + ), + ) { + AutofillScaffold( + topBar = { + Column { + Row( + modifier = Modifier + .padding( + vertical = 8.dp, + horizontal = Dimens.horizontalPadding, + ), + verticalAlignment = Alignment.CenterVertically, + ) { + Column( + modifier = Modifier + .weight(1f), + ) { + val args = AppMode.pick.getOrNull(LocalAppMode.current)?.args + AppInfo( + packageName = args?.applicationId, + webDomain = args?.webDomain, + webScheme = args?.webScheme, + ) + } + Spacer(modifier = Modifier.width(16.dp)) + val context by rememberUpdatedState(newValue = LocalContext.current) + TextButton( + onClick = { + context.closestActivityOrNull?.finish() + }, + ) { + Icon(Icons.Outlined.Close, null) + Spacer( + modifier = Modifier + .width(Dimens.buttonIconPadding), + ) + Text( + text = stringResource(Res.strings.cancel), + textAlign = TextAlign.Center, + ) + } + } + } + }, + ) + } + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/android/AutofillCompose.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/AutofillCompose.kt new file mode 100644 index 00000000..7d2db6be --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/AutofillCompose.kt @@ -0,0 +1,302 @@ +package com.artemchep.keyguard.android + +import androidx.compose.foundation.Image +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.BoxScope +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.WindowInsetsSides +import androidx.compose.foundation.layout.displayCutout +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.navigationBars +import androidx.compose.foundation.layout.only +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.statusBars +import androidx.compose.foundation.layout.systemBars +import androidx.compose.foundation.layout.union +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.layout.windowInsetsPadding +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.foundation.shape.CornerSize +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.common.io.attempt +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.model.LinkInfoAndroid +import com.artemchep.keyguard.common.model.LinkInfoPlatform +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.service.extract.LinkInfoExtractor +import com.artemchep.keyguard.feature.favicon.FaviconImage +import com.artemchep.keyguard.feature.favicon.FaviconUrl +import com.artemchep.keyguard.feature.keyguard.AppRoute +import com.artemchep.keyguard.feature.navigation.NavigationNode +import com.artemchep.keyguard.ui.ExpandedIfNotEmptyForRow +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.composable +import com.artemchep.keyguard.ui.theme.combineAlpha +import org.kodein.di.allInstances +import org.kodein.di.compose.rememberDI + +@Composable +fun AutofillScaffold( + topBar: @Composable () -> Unit, +) { + ExtensionScaffold( + header = { + topBar() + }, + ) { + NavigationNode( + id = "App:Autofill", + route = AppRoute, + ) + } +} + +@Composable +fun PasskeyScaffold( + topBar: @Composable () -> Unit, +) { + ExtensionScaffold( + header = { + topBar() + }, + ) { + NavigationNode( + id = "App:Passkey", + route = AppRoute, + ) + } +} + +@Composable +fun ExtensionScaffold( + header: @Composable BoxScope.() -> Unit, + content: @Composable BoxScope.() -> Unit, +) { + val topInsets = WindowInsets.systemBars + .only(WindowInsetsSides.Top) + Column( + modifier = Modifier + .background(MaterialTheme.colorScheme.surfaceVariant) + .windowInsetsPadding(topInsets), + ) { + val horizontalInsets = WindowInsets.statusBars + .union(WindowInsets.navigationBars) + .union(WindowInsets.displayCutout) + .only(WindowInsetsSides.Horizontal) + Box( + modifier = Modifier + .windowInsetsPadding(horizontalInsets), + ) { + header() + } + + val shape = MaterialTheme.shapes.extraLarge + .copy( + bottomStart = CornerSize(0.dp), + bottomEnd = CornerSize(0.dp), + ) + Box( + modifier = Modifier + .clip(shape) + .background(MaterialTheme.colorScheme.background) + .fillMaxSize(), + ) { + content() + } + } +} + +@Composable +fun AppInfo( + packageName: String?, + webDomain: String?, + webScheme: String?, +) { + when { + webDomain != null && webScheme != null -> { + AppInfoWeb( + webDomain = webDomain, + webScheme = webScheme, + ) + } + + packageName != null -> { + AppInfoAndroid( + packageName = packageName, + ) + } + + else -> { + Text( + text = "Autofill with Keyguard", + style = MaterialTheme.typography.titleMedium, + overflow = TextOverflow.Ellipsis, + maxLines = 1, + ) + } + } +} + +@Composable +private fun AppInfoWeb( + webDomain: String, + webScheme: String, +) { + var state by remember(webDomain) { + mutableStateOf>(Loadable.Loading) + } + + LaunchedEffect(webDomain) { + val data = AppInfoData( + label = webDomain, + icon = { + FaviconImage( + modifier = Modifier + .clip(CircleShape), + imageModel = { + FaviconUrl( + url = "$webScheme://$webDomain", + ) + }, + ) + }, + ) + state = Loadable.Ok(data) + } + + AppInfo( + state = state, + ) +} + +@Composable +private fun AppInfoAndroid( + packageName: String, +) { + val linkInfoExtractors: List> by rememberDI { + allInstances() + } + + var state by remember(packageName) { + mutableStateOf>(Loadable.Loading) + } + + LaunchedEffect(packageName) { + val linkInfo = LinkInfoPlatform.Android(packageName) + val linkInfoData = linkInfoExtractors + .filter { it.from == LinkInfoPlatform.Android::class && it.handles(linkInfo) } + .firstNotNullOfOrNull { extractor -> + val model = extractor + .extractInfo(linkInfo) + .attempt() + .bind() + .getOrNull() + when (model) { + is LinkInfoAndroid.Installed -> + AppInfoData( + label = model.label, + icon = { + Image( + modifier = Modifier + .clip(CircleShape), + painter = model.icon, + contentDescription = null, + ) + }, + ) + + else -> null + } + } + ?: AppInfoData(label = packageName) + state = Loadable.Ok(linkInfoData) + } + + AppInfo( + state = state, + ) +} + +@Composable +private fun AppInfo( + state: Loadable, +) { + Row( + verticalAlignment = Alignment.CenterVertically, + ) { + val icon = remember(state) { + when (state) { + is Loadable.Loading -> + composable { + CircularProgressIndicator( + color = LocalContentColor.current, + ) + } + + is Loadable.Ok -> if (state.value.icon != null) { + composable { + state.value.icon.invoke() + } + } else { + // do not show an icon + null + } + } + } + ExpandedIfNotEmptyForRow(valueOrNull = icon) { content -> + Row { + Box( + modifier = Modifier + .size(24.dp), + ) { + content() + } + Spacer( + modifier = Modifier + .width(16.dp), + ) + } + } + Column { + Text( + text = "Autofill for", + style = MaterialTheme.typography.labelSmall, + color = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + overflow = TextOverflow.Ellipsis, + maxLines = 1, + ) + if (state is Loadable.Ok) { + Text( + text = state.value.label, + style = MaterialTheme.typography.titleMedium, + overflow = TextOverflow.Ellipsis, + maxLines = 1, + ) + } + } + } +} + +private class AppInfoData( + val label: String, + val icon: (@Composable () -> Unit)? = null, +) diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/android/AutofillFakeAuthActivity.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/AutofillFakeAuthActivity.kt new file mode 100644 index 00000000..37fa1bc6 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/AutofillFakeAuthActivity.kt @@ -0,0 +1,167 @@ +package com.artemchep.keyguard.android + +import android.content.Context +import android.content.Intent +import android.os.Bundle +import android.os.Parcelable +import android.service.autofill.Dataset +import android.view.autofill.AutofillManager +import androidx.appcompat.app.AppCompatActivity +import arrow.core.flatMap +import arrow.core.toOption +import com.artemchep.keyguard.android.autofill.AutofillStructure2 +import com.artemchep.keyguard.android.clipboard.KeyguardClipboardService +import com.artemchep.keyguard.common.io.effectMap +import com.artemchep.keyguard.common.io.flatten +import com.artemchep.keyguard.common.io.handleErrorWith +import com.artemchep.keyguard.common.io.ioUnit +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.io.toIO +import com.artemchep.keyguard.common.model.AddCipherOpenedHistoryRequest +import com.artemchep.keyguard.common.model.AddUriCipherRequest +import com.artemchep.keyguard.common.model.DSecret +import com.artemchep.keyguard.common.model.MasterSession +import com.artemchep.keyguard.common.model.TotpToken +import com.artemchep.keyguard.common.usecase.AddCipherUsedAutofillHistory +import com.artemchep.keyguard.common.usecase.AddUriCipher +import com.artemchep.keyguard.common.usecase.GetVaultSession +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.platform.recordLog +import kotlinx.coroutines.Dispatchers +import kotlinx.parcelize.Parcelize +import org.kodein.di.DI +import org.kodein.di.DIAware +import org.kodein.di.android.closestDI +import org.kodein.di.instance + +class AutofillFakeAuthActivity : AppCompatActivity(), DIAware { + companion object { + private const val KEY_ARGS = "argsv2" + + fun getIntent( + context: Context, + dataset: Dataset, + cipher: DSecret, + structure: AutofillStructure2? = null, + ): Intent = Intent(context, AutofillFakeAuthActivity::class.java).apply { + val args = Args( + dataset = dataset, + accountId = cipher.accountId, + cipherId = cipher.id, + cipherName = cipher.name, + cipherTotpRaw = cipher.login?.totp?.token?.raw, + structure = structure, + ) + putExtra(KEY_ARGS, args) + setExtrasClassLoader(Args::class.java.getClassLoader()) + } + } + + @Parcelize + data class Args( + val dataset: Dataset, + val accountId: String, + val cipherId: String, + val cipherName: String, + val cipherTotpRaw: String?, + val structure: AutofillStructure2? = null, + ) : Parcelable + + override val di: DI by closestDI { this } + + private val args by lazy { + val extras = intent.extras + extras?.classLoader = Args::class.java.getClassLoader() + extras?.getParcelable(KEY_ARGS) + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + recordLog("Opened autofill fake auth activity") + + val result = args?.dataset + if (result != null) { + // We want to copy to OTP code when you autofill an + // entry, so launch a totp service. + launchCopyTotpService() + launchEditService() + launchHistoryService() + + val intent = Intent().apply { + putExtra(AutofillManager.EXTRA_AUTHENTICATION_RESULT, result) + } + setResult(RESULT_OK, intent) + } else { + setResult(RESULT_CANCELED) + } + finish() + } + + private fun launchCopyTotpService() { + val windowCoroutineScope: WindowCoroutineScope by instance() + args?.cipherTotpRaw + .toOption() + .toEither { + NullPointerException() + } + .flatMap { url -> + TotpToken.parse(url) + } + .toIO() + .effectMap(Dispatchers.Main) { + val intent = KeyguardClipboardService.getIntent(this, args?.cipherName, it) + startForegroundService(intent) + } + .handleErrorWith { + ioUnit() + } + .launchIn(windowCoroutineScope) + } + + private fun launchEditService() { + val windowCoroutineScope: WindowCoroutineScope by instance() + val getVaultSession: GetVaultSession by instance() + + getVaultSession() + .toIO() + .effectMap { session -> + val a = session as? MasterSession.Key + ?: return@effectMap ioUnit() + + val addUriCipher: AddUriCipher by a.di.instance() + val request = AddUriCipherRequest( + cipherId = args!!.cipherId, + applicationId = args?.structure?.applicationId, + webDomain = args?.structure?.webDomain, + webScheme = args?.structure?.webScheme, + webView = args?.structure?.webView, + ) + addUriCipher + .invoke(request) + } + .flatten() + .launchIn(windowCoroutineScope) + } + + private fun launchHistoryService() { + val windowCoroutineScope: WindowCoroutineScope by instance() + val getVaultSession: GetVaultSession by instance() + + getVaultSession() + .toIO() + .effectMap { session -> + val a = session as? MasterSession.Key + ?: return@effectMap ioUnit() + + val addCipherUsedAutofillHistory: AddCipherUsedAutofillHistory by a.di.instance() + val request = AddCipherOpenedHistoryRequest( + accountId = args!!.accountId, + cipherId = args!!.cipherId, + ) + addCipherUsedAutofillHistory + .invoke(request) + } + .flatten() + .launchIn(windowCoroutineScope) + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/android/AutofillSaveActivity.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/AutofillSaveActivity.kt new file mode 100644 index 00000000..99357743 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/AutofillSaveActivity.kt @@ -0,0 +1,290 @@ +package com.artemchep.keyguard.android + +import android.content.Context +import android.content.Intent +import android.os.Bundle +import android.os.Parcelable +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.layout.widthIn +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Close +import androidx.compose.material3.Icon +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.ProvideTextStyle +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.getValue +import androidx.compose.runtime.key +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.text.AnnotatedString +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.AppMode +import com.artemchep.keyguard.LocalAppMode +import com.artemchep.keyguard.android.autofill.AutofillStructure2 +import com.artemchep.keyguard.common.model.DSecret +import com.artemchep.keyguard.feature.home.vault.add.AddRoute +import com.artemchep.keyguard.feature.home.vault.add.of +import com.artemchep.keyguard.platform.recordLog +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.colorizePassword +import com.artemchep.keyguard.ui.theme.Dimens +import com.artemchep.keyguard.ui.theme.combineAlpha +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.parcelize.Parcelize +import org.kodein.di.DIAware + +class AutofillSaveActivity : BaseActivity(), DIAware { + companion object { + private const val KEY_ARGUMENTS = "arguments" + + fun getIntent( + context: Context, + args: Args, + ): Intent = Intent(context, AutofillSaveActivity::class.java).apply { + putExtra(KEY_ARGUMENTS, args) + } + } + + @Parcelize + data class Args( + val autofillStructure2: AutofillStructure2? = null, + val applicationId: String? = null, + val webDomain: String? = null, + val webScheme: String? = null, + ) : Parcelable + + private val args by lazy { + intent.extras?.getParcelable(KEY_ARGUMENTS) + ?: Args( + applicationId = packageName, + ) + } + + private val af by lazy { + AddRoute.Args.Autofill.of(args) + } + + private fun autofill(secret: DSecret) { + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + recordLog("Opened autofill save activity") + } + + @Composable + override fun Content() { + CompositionLocalProvider( + LocalAppMode provides AppMode.Save( + type = DSecret.Type.Login, + args = args, + onAutofill = ::autofill, + ), + ) { + args.autofillStructure2?.items?.forEach { + it.hint + } + AutofillScaffold( + topBar = { + Column { + Row( + modifier = Modifier + .padding( + vertical = 8.dp, + horizontal = Dimens.horizontalPadding, + ), + verticalAlignment = Alignment.CenterVertically, + ) { + Text( + modifier = Modifier + .weight(1f), + text = "Save form data", + style = MaterialTheme.typography.titleLarge, + ) + val context by rememberUpdatedState(newValue = LocalContext.current) + TextButton( + modifier = Modifier + .padding(start = Dimens.horizontalPadding), + onClick = { + context.closestActivityOrNull?.finish() + }, + ) { + Icon(Icons.Outlined.Close, null) + Spacer( + modifier = Modifier + .width(Dimens.buttonIconPadding), + ) + Text( + text = stringResource(Res.strings.close), + textAlign = TextAlign.Center, + ) + } + } + Column( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding), + ) { + // Login + val username = af.username + if (username != null) { + key("username") { + TwoColumnRow( + title = stringResource(Res.strings.username), + value = username, + ) + } + } + val password = af.password + if (password != null) { + key("password") { + val colorizedPassword = colorizePassword( + password = password, + contentColor = LocalContentColor.current, + ) + TwoColumnRow( + title = stringResource(Res.strings.password), + value = colorizedPassword, + ) + } + } + + // Identity + val email = af.email + if (email != null) { + key("email") { + TwoColumnRow( + title = stringResource(Res.strings.email), + value = email, + ) + } + } + val phone = af.phone + if (phone != null) { + key("phone") { + TwoColumnRow( + title = stringResource(Res.strings.phone_number), + value = phone, + ) + } + } + val personName = af.personName + if (personName != null) { + key("personName") { + TwoColumnRow( + title = "Person name", + value = personName, + ) + } + } + + // Url + val applicationId = af.applicationId + val webDomain = af.webDomain + if ( + applicationId != null || + webDomain != null + ) { + Spacer( + modifier = Modifier + .height(8.dp), + ) + val textStyle = MaterialTheme.typography.bodySmall + .copy( + color = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + ) + if (applicationId != null) { + key("app") { + ProvideTextStyle( + value = textStyle, + ) { + TwoColumnRow( + title = "App", + value = applicationId, + ) + } + } + } + if (webDomain != null) { + key("webDomain") { + ProvideTextStyle( + value = textStyle, + ) { + TwoColumnRow( + title = "Website", + value = webDomain, + ) + } + } + } + } + } + Spacer( + modifier = Modifier + .height(8.dp), + ) + } + }, + ) + } + } +} + +@Composable +private fun TwoColumnRow( + modifier: Modifier = Modifier, + title: String, + value: CharSequence, +) { + Row( + modifier = modifier, + verticalAlignment = Alignment.Top, + ) { + Text( + modifier = Modifier + .weight(2f) + .widthIn(max = 120.dp), + text = title, + fontWeight = FontWeight.Medium, + ) + Spacer( + modifier = Modifier + .width(16.dp), + ) + + val valueModifier = Modifier + .weight(3f) + .widthIn(max = 120.dp) + when (value) { + is String -> { + Text( + modifier = valueModifier, + text = value, + ) + } + + is AnnotatedString -> { + Text( + modifier = valueModifier, + text = value, + ) + } + + else -> error("Unsupported value type!") + } + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/android/BaseActivity.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/BaseActivity.kt new file mode 100644 index 00000000..0957e62d --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/BaseActivity.kt @@ -0,0 +1,488 @@ +package com.artemchep.keyguard.android + +import android.content.ActivityNotFoundException +import android.content.Intent +import android.net.Uri +import android.os.Bundle +import android.view.WindowManager +import android.webkit.MimeTypeMap +import androidx.activity.compose.setContent +import androidx.appcompat.app.AppCompatActivity +import androidx.browser.customtabs.CustomTabsIntent +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Surface +import androidx.compose.material3.contentColorFor +import androidx.compose.runtime.Composable +import androidx.compose.runtime.DisposableEffect +import androidx.compose.ui.ExperimentalComposeUiApi +import androidx.compose.ui.Modifier +import androidx.compose.ui.semantics.semantics +import androidx.compose.ui.semantics.testTagsAsResourceId +import androidx.core.content.FileProvider +import androidx.core.net.toFile +import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen +import androidx.core.view.WindowCompat +import androidx.lifecycle.lifecycleScope +import com.artemchep.keyguard.common.io.effectTap +import com.artemchep.keyguard.common.io.flatMap +import com.artemchep.keyguard.common.io.ioUnit +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.io.toIO +import com.artemchep.keyguard.common.model.MasterSession +import com.artemchep.keyguard.common.model.ToastMessage +import com.artemchep.keyguard.common.service.logging.LogLevel +import com.artemchep.keyguard.common.service.logging.LogRepository +import com.artemchep.keyguard.common.service.logging.postDebug +import com.artemchep.keyguard.common.usecase.ClearVaultSession +import com.artemchep.keyguard.common.usecase.GetAllowScreenshots +import com.artemchep.keyguard.common.usecase.GetUseExternalBrowser +import com.artemchep.keyguard.common.usecase.GetVaultSession +import com.artemchep.keyguard.common.usecase.ShowMessage +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.copy.PermissionServiceAndroid +import com.artemchep.keyguard.feature.navigation.LocalNavigationBackHandler +import com.artemchep.keyguard.feature.navigation.N +import com.artemchep.keyguard.feature.navigation.NavigationController +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.feature.navigation.NavigationRouterBackHandler +import com.artemchep.keyguard.ui.theme.KeyguardTheme +import com.google.firebase.crashlytics.ktx.crashlytics +import com.google.firebase.ktx.Firebase +import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.onEach +import org.kodein.di.DIAware +import org.kodein.di.android.closestDI +import org.kodein.di.compose.rememberInstance +import org.kodein.di.instance + +abstract class BaseActivity : AppCompatActivity(), DIAware { + override val di by closestDI() + + private val logRepository: LogRepository by instance() + + private val permissionService: PermissionServiceAndroid by instance() + + private val navTag = N.tag("BaseActivity") + + /** + * `true` if we should open links in the external browser app, + * `false` if we should use the chrome tab. + */ + private var lastUseExternalBrowser: Boolean = false + + @OptIn(ExperimentalComposeUiApi::class) + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + installSplashScreen() + + val getAllowScreenshots by instance() + getAllowScreenshots() + .onEach { allowScreenshots -> + if (allowScreenshots) { + window?.clearFlags(WindowManager.LayoutParams.FLAG_SECURE) + } else { + window?.addFlags(WindowManager.LayoutParams.FLAG_SECURE) + } + } + .launchIn(lifecycleScope) + + val getUseExternalBrowser: GetUseExternalBrowser by instance() + getUseExternalBrowser() + .onEach { useExternalBrowser -> + lastUseExternalBrowser = useExternalBrowser + } + .launchIn(lifecycleScope) + + WindowCompat.setDecorFitsSystemWindows(window, false) + setContent { + KeyguardTheme { + val containerColor = MaterialTheme.colorScheme.background + val contentColor = contentColorFor(containerColor) + Surface( + modifier = Modifier.semantics { + // Allows to use testTag() for UiAutomator's resource-id. + // It can be enabled high in the compose hierarchy, + // so that it's enabled for the whole subtree + testTagsAsResourceId = true + }, + color = containerColor, + contentColor = contentColor, + ) { + Navigation { + Content() + } + } + } + } + } + + @Composable + private fun Navigation( + block: @Composable () -> Unit, + ) = NavigationRouterBackHandler( + onBackPressedDispatcher = onBackPressedDispatcher, + ) { + val showMessage by rememberInstance() + NavigationController( + scope = lifecycleScope, + canPop = flowOf(false), + handle = { intent -> + handleNavigationIntent( + intent = intent, + showMessage = showMessage, + ) + }, + ) { controller -> + val backHandler = LocalNavigationBackHandler.current + + DisposableEffect( + controller, + backHandler, + ) { + val registration = backHandler.register(controller, emptyList()) + onDispose { + registration() + } + } + + block() + } + } + + private fun handleNavigationIntent( + intent: NavigationIntent, + showMessage: ShowMessage, + ) = kotlin.run { + when (intent) { + is NavigationIntent.NavigateToPreview -> handleNavigationIntent(intent, showMessage) + is NavigationIntent.NavigateToPreviewInFileManager -> handleNavigationIntent(intent, showMessage) + is NavigationIntent.NavigateToSend -> handleNavigationIntent(intent, showMessage) + is NavigationIntent.NavigateToLargeType -> handleNavigationIntent(intent, showMessage) + is NavigationIntent.NavigateToShare -> handleNavigationIntent(intent, showMessage) + is NavigationIntent.NavigateToApp -> handleNavigationIntent(intent, showMessage) + is NavigationIntent.NavigateToPhone -> handleNavigationIntent(intent, showMessage) + is NavigationIntent.NavigateToSms -> handleNavigationIntent(intent, showMessage) + is NavigationIntent.NavigateToEmail -> handleNavigationIntent(intent, showMessage) + is NavigationIntent.NavigateToBrowser -> + if (lastUseExternalBrowser) { + handleNavigationIntentExternalBrowser(intent, showMessage) + } else { + handleNavigationIntentInAppBrowser(intent, showMessage) + } + // Should never be called, because we should disable + // custom back button handling if we have nothing to + // handle. + is NavigationIntent.Pop -> { + val msg = "Called Activity.finish() manually. We should have stopped " + + "intercepting back button presses." + logRepository.post(navTag, msg, level = LogLevel.WARNING) + supportFinishAfterTransition() + } + + else -> return@run intent + } + null // handled + } + + private fun handleNavigationIntent( + intent: NavigationIntent.NavigateToPreview, + showMessage: ShowMessage, + ) { + logRepository.postDebug(navTag) { + "Navigating to preview '${intent.uri}' with a file name set to " + + "'${intent.fileName}'" + } + kotlin.runCatching { + val launchIntent = Intent(Intent.ACTION_VIEW).apply { + populateFileData( + uri = intent.uri, + fileName = intent.fileName, + ) + } + launchIntent.let(::startActivity) + }.onFailure { e -> + showMessage.internalShowNavigationErrorMessage(e) + } + } + + private fun handleNavigationIntent( + intent: NavigationIntent.NavigateToPreviewInFileManager, + showMessage: ShowMessage, + ) { + logRepository.postDebug(navTag) { + "Navigating to preview in file manager '${intent.uri}' with a file name set to " + + "'${intent.fileName}'" + } + kotlin.runCatching { + // TODO: + }.onFailure { e -> + showMessage.internalShowNavigationErrorMessage(e) + } + } + + private fun handleNavigationIntent( + intent: NavigationIntent.NavigateToSend, + showMessage: ShowMessage, + ) { + logRepository.postDebug(navTag) { + "Navigating to send '${intent.uri}' with a file name set to " + + "'${intent.fileName}'" + } + kotlin.runCatching { + val launchIntent = Intent(Intent.ACTION_SEND).apply { + populateFileData( + uri = intent.uri, + fileName = intent.fileName, + ) + } + launchIntent.let(::startActivity) + }.onFailure { e -> + showMessage.internalShowNavigationErrorMessage(e) + } + } + + private fun handleNavigationIntent( + intent: NavigationIntent.NavigateToLargeType, + showMessage: ShowMessage, + ) { + logRepository.postDebug(navTag) { + "Navigating to large type." + } + + val launchIntent = LargeTypeActivity.getIntent( + context = this, + args = LargeTypeActivity.Args( + text = intent.text, + colorize = intent.colorize, + ), + ) + kotlin.runCatching { + startActivity(launchIntent) + + // If everything is fine, obtain the session + // and lock the vault + val windowCoroutineScope by instance() + val getVaultSession by instance() + getVaultSession() + .toIO() + .effectTap { + // Introduce a little delay, so we lock the vault after + // the navigation animation is complete. + delay(300L) + } + .flatMap { session -> + when (session) { + is MasterSession.Key -> { + val lockVault by session.di.instance() + lockVault() + } + + is MasterSession.Empty -> ioUnit() + } + } + .launchIn(windowCoroutineScope) + }.onFailure { e -> + showMessage.internalShowNavigationErrorMessage(e) + } + } + + private fun handleNavigationIntent( + intent: NavigationIntent.NavigateToShare, + showMessage: ShowMessage, + ) { + logRepository.postDebug(navTag) { + "Navigating to share." + } + + kotlin.runCatching { + val launchIntent = Intent(Intent.ACTION_SEND).apply { + type = "text/plain" + putExtra(Intent.EXTRA_TEXT, intent.text) + } + val chooserIntent = Intent.createChooser(launchIntent, "Share") + startActivity(chooserIntent) + }.onFailure { e -> + showMessage.internalShowNavigationErrorMessage(e) + } + } + + private fun Intent.populateFileData( + uri: String, + fileName: String?, + ) { + val file = Uri.parse(uri).toFile() + val type = fileName?.substringAfterLast('.') + ?.lowercase() + ?.let { ext -> + MimeTypeMap.getSingleton().getMimeTypeFromExtension(ext) + } + ?: "*/*" + + val contentUri = kotlin.run { + val context = this@BaseActivity + val authority = "$packageName.fileProvider" + // if possible specify desired file name + if (fileName != null) { + FileProvider.getUriForFile(context, authority, file, fileName) + } else { + FileProvider.getUriForFile(context, authority, file) + } + } + putExtra(Intent.EXTRA_STREAM, contentUri) + setDataAndType(contentUri, type) + addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION) + + if (fileName != null) { + putExtra(Intent.EXTRA_SUBJECT, fileName) + } + } + + private fun handleNavigationIntent( + intent: NavigationIntent.NavigateToApp, + showMessage: ShowMessage, + ) { + logRepository.postDebug(navTag) { + "Navigating to app '${intent.packageName}'" + } + kotlin.runCatching { + val launchIntent = packageManager + .getLaunchIntentForPackage(intent.packageName) + launchIntent?.let(::startActivity) + }.onFailure { e -> + showMessage.internalShowNavigationErrorMessage(e) + } + } + + private fun handleNavigationIntent( + intent: NavigationIntent.NavigateToPhone, + showMessage: ShowMessage, + ) { + logRepository.postDebug(navTag) { + "Navigating to call '${intent.phoneNumber}'" + } + kotlin.runCatching { + val launchIntent = Intent(Intent.ACTION_DIAL).apply { + data = Uri.parse("tel:${intent.phoneNumber}") + } + startActivity(launchIntent) + }.onFailure { e -> + showMessage.internalShowNavigationErrorMessage(e) + } + } + + private fun handleNavigationIntent( + intent: NavigationIntent.NavigateToSms, + showMessage: ShowMessage, + ) { + logRepository.postDebug(navTag) { + "Navigating to message '${intent.phoneNumber}'" + } + kotlin.runCatching { + val launchIntent = Intent(Intent.ACTION_VIEW).apply { + data = Uri.parse("sms:${intent.phoneNumber}") + } + startActivity(launchIntent) + }.onFailure { e -> + showMessage.internalShowNavigationErrorMessage(e) + } + } + + private fun handleNavigationIntent( + intent: NavigationIntent.NavigateToEmail, + showMessage: ShowMessage, + ) { + logRepository.postDebug(navTag) { + "Navigating to email '${intent.email}'" + } + kotlin.runCatching { + val launchIntent = Intent(Intent.ACTION_SEND).apply { + putExtra(Intent.EXTRA_EMAIL, arrayOf(intent.email)) + intent.subject?.let { + putExtra(Intent.EXTRA_SUBJECT, it) + } + intent.body?.let { + putExtra(Intent.EXTRA_TEXT, it) + } + // Show only email clients in the list! + selector = kotlin.run { + Intent(Intent.ACTION_SENDTO).apply { + data = Uri.parse("mailto:") + } + } + } + startActivity(launchIntent) + }.onFailure { e -> + showMessage.internalShowNavigationErrorMessage(e) + } + } + + private fun handleNavigationIntentInAppBrowser( + intent: NavigationIntent.NavigateToBrowser, + showMessage: ShowMessage, + ) { + logRepository.postDebug(navTag) { + "Navigating to browser '${intent.url}'" + } + kotlin.runCatching { + val parsedUrl = Uri.parse(intent.url) + try { + val customTabs = CustomTabsIntent.Builder() + .build() + customTabs.launchUrl(this, parsedUrl) + } catch (e: ActivityNotFoundException) { + Intent(Intent.ACTION_VIEW, parsedUrl) + // launch activity + .let(::startActivity) + } + }.onFailure { e -> + showMessage.internalShowNavigationErrorMessage(e) + } + } + + private fun handleNavigationIntentExternalBrowser( + intent: NavigationIntent.NavigateToBrowser, + showMessage: ShowMessage, + ) { + logRepository.postDebug(navTag) { + "Navigating to browser '${intent.url}'" + } + kotlin.runCatching { + val parsedUrl = Uri.parse(intent.url) + Intent(Intent.ACTION_VIEW, parsedUrl) + // launch activity + .let(::startActivity) + }.onFailure { e -> + showMessage.internalShowNavigationErrorMessage(e) + } + } + + private fun ShowMessage.internalShowNavigationErrorMessage(e: Throwable) { + Firebase.crashlytics.recordException(e) + + e.printStackTrace() + + val model = ToastMessage( + type = ToastMessage.Type.ERROR, + title = when (e) { + is ActivityNotFoundException -> "No installed app can handle this request." + else -> "Something went wrong" + }, + ) + copy(model) + } + + @Composable + protected abstract fun Content() + + override fun onRequestPermissionsResult( + requestCode: Int, + permissions: Array, + grantResults: IntArray, + ) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults) + permissionService.refresh() + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/android/BaseApp.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/BaseApp.kt new file mode 100644 index 00000000..190cce11 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/BaseApp.kt @@ -0,0 +1,12 @@ +package com.artemchep.keyguard.android + +import android.app.Application +import org.bouncycastle.jce.provider.BouncyCastleProvider +import java.security.Security + +abstract class BaseApp : Application() { + init { + val bcProvider = BouncyCastleProvider() + Security.addProvider(bcProvider) + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/android/LargeTypeActivity.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/LargeTypeActivity.kt new file mode 100644 index 00000000..db9963c2 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/LargeTypeActivity.kt @@ -0,0 +1,148 @@ +package com.artemchep.keyguard.android + +import android.content.Context +import android.content.Intent +import android.os.Bundle +import android.os.Parcelable +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Close +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.Modifier +import androidx.compose.ui.input.nestedscroll.nestedScroll +import androidx.core.os.BundleCompat +import com.artemchep.keyguard.common.model.getOrNull +import com.artemchep.keyguard.feature.largetype.LargeTypeContent +import com.artemchep.keyguard.feature.largetype.produceLargeTypeScreenState +import com.artemchep.keyguard.feature.navigation.LocalNavigationController +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.feature.navigation.NavigationNode +import com.artemchep.keyguard.feature.navigation.Route +import com.artemchep.keyguard.platform.recordLog +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.KeepScreenOnEffect +import com.artemchep.keyguard.ui.ScaffoldColumn +import com.artemchep.keyguard.ui.toolbar.LargeToolbar +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.parcelize.Parcelize + +/** + * A screen that does show the provided text in a Large type + * style, even if the vault is locked. + */ +class LargeTypeActivity : BaseActivity() { + companion object { + private const val KEY_ARGUMENTS = "arguments" + + fun getIntent( + context: Context, + args: Args, + ): Intent = Intent(context, LargeTypeActivity::class.java).apply { + putExtra(KEY_ARGUMENTS, args) + } + } + + @Parcelize + data class Args( + val text: String, + val colorize: Boolean, + ) : Parcelable + + private val args by lazy { + val extras = intent.extras!! + val model = BundleCompat + .getParcelable(extras, KEY_ARGUMENTS, Args::class.java) + requireNotNull(model) { + "Large type Activity must be called with arguments provided!" + } + } + + private val route by lazy { + LargeTypeRoute( + text = args.text, + colorize = args.colorize, + ) + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + recordLog("Opened large type activity") + } + + @Composable + override fun Content() { + NavigationNode( + id = "LargeType:Main", + route = route, + ) + } +} + +private class LargeTypeRoute( + val text: String, + val colorize: Boolean, +) : Route { + @Composable + override fun Content() { + LargeTypeScreen( + text = text, + colorize = colorize, + ) + } +} + +@Composable +private fun LargeTypeScreen( + text: String, + colorize: Boolean, +) { + val loadableState = produceLargeTypeScreenState( + com.artemchep.keyguard.feature.largetype.LargeTypeRoute.Args( + text = text, + colorize = colorize, + ), + ) + + KeepScreenOnEffect() + + val navigationController by rememberUpdatedState(LocalNavigationController.current) + val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior() + ScaffoldColumn( + modifier = Modifier + .nestedScroll(scrollBehavior.nestedScrollConnection), + topAppBarScrollBehavior = scrollBehavior, + topBar = { + LargeToolbar( + title = { + Text(stringResource(Res.strings.largetype_title)) + }, + navigationIcon = { + IconButton( + onClick = { + val intent = NavigationIntent.Pop + navigationController.queue(intent) + }, + ) { + Icon( + imageVector = Icons.Outlined.Close, + contentDescription = null, + ) + } + }, + scrollBehavior = scrollBehavior, + ) + }, + ) { + val state = loadableState.getOrNull() + if (state != null) { + LargeTypeContent( + state = state, + ) + } + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/android/MainActivity.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/MainActivity.kt new file mode 100644 index 00000000..5815aa12 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/MainActivity.kt @@ -0,0 +1,69 @@ +package com.artemchep.keyguard.android + +import android.content.Context +import android.content.Intent +import android.os.Bundle +import androidx.compose.foundation.layout.Column +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import com.artemchep.keyguard.AppMode +import com.artemchep.keyguard.LocalAppMode +import com.artemchep.keyguard.common.service.deeplink.DeeplinkService +import com.artemchep.keyguard.feature.keyguard.AppRoute +import com.artemchep.keyguard.feature.navigation.NavigationNode +import com.artemchep.keyguard.platform.recordLog +import org.kodein.di.instance + +class MainActivity : BaseActivity() { + companion object { + fun getIntent( + context: Context, + ): Intent = Intent(context, MainActivity::class.java) + } + + private val deeplinkService by instance() + + @Composable + override fun Content() { + Column { + CompositionLocalProvider( + LocalAppMode provides AppMode.Main, + ) { + NavigationNode( + id = "App:Main", + route = AppRoute, + ) + } + } + } + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + recordLog("Opened main activity") + updateDeeplinkFromIntent(intent) + } + + override fun onNewIntent(intent: Intent) { + super.onNewIntent(intent) + updateDeeplinkFromIntent(intent) + } + + private fun updateDeeplinkFromIntent(intent: Intent) { + val customFilter = intent.getStringExtra("customFilter") + if (customFilter != null) { + deeplinkService.put("customFilter", customFilter) + } + + val dta = intent.data + if (dta != null) { + val url = dta.toString() + when { + url.startsWith("bitwarden://webauthn-callback") || + url.startsWith("keyguard://webauthn-callback") -> { + val data = dta.getQueryParameter("data") + deeplinkService.put("webauthn-callback", data) + } + } + } + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/android/Notifications.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/Notifications.kt new file mode 100644 index 00000000..d465f863 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/Notifications.kt @@ -0,0 +1,12 @@ +package com.artemchep.keyguard.android + +import com.artemchep.keyguard.android.downloader.NotificationIdPool + +object Notifications { + val downloads = NotificationIdPool.sequential( + start = 10000, + endExclusive = 20000, + ) + val uploads = NotificationIdPool.sequential(20000) + val totp = NotificationIdPool.sequential(30000) +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/android/PasskeyBase64.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/PasskeyBase64.kt new file mode 100644 index 00000000..d8b7faf8 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/PasskeyBase64.kt @@ -0,0 +1,19 @@ +package com.artemchep.keyguard.android + +import android.util.Base64 + +object PasskeyBase64 { + private const val flags = Base64.NO_PADDING or Base64.NO_WRAP or Base64.URL_SAFE + + fun encodeToString( + data: ByteArray, + ) = Base64.encodeToString(data, flags) + + fun encodeToStringPadding( + data: ByteArray, + ) = Base64.encodeToString(data, Base64.NO_WRAP or Base64.URL_SAFE) + + fun decode( + data: String, + ) = Base64.decode(data, flags) +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/android/PasskeyBeginGetRequest.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/PasskeyBeginGetRequest.kt new file mode 100644 index 00000000..2fe1cafe --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/PasskeyBeginGetRequest.kt @@ -0,0 +1,272 @@ +package com.artemchep.keyguard.android + +import android.annotation.SuppressLint +import android.app.Application +import android.app.PendingIntent +import android.content.Context +import android.os.Build +import android.util.Log +import androidx.annotation.RequiresApi +import androidx.credentials.provider.BeginGetCredentialRequest +import androidx.credentials.provider.BeginGetCredentialResponse +import androidx.credentials.provider.BeginGetPasswordOption +import androidx.credentials.provider.BeginGetPublicKeyCredentialOption +import androidx.credentials.provider.CallingAppInfo +import androidx.credentials.provider.CredentialEntry +import androidx.credentials.provider.PublicKeyCredentialEntry +import com.artemchep.keyguard.android.downloader.journal.CipherHistoryOpenedRepository +import com.artemchep.keyguard.common.io.attempt +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.io.toIO +import com.artemchep.keyguard.common.model.DSecret +import com.artemchep.keyguard.common.usecase.PasskeyTarget +import com.artemchep.keyguard.common.usecase.PasskeyTargetCheck +import com.artemchep.keyguard.feature.auth.common.util.REGEX_IPV4 +import kotlinx.datetime.Instant +import kotlinx.datetime.toJavaInstant +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import kotlinx.serialization.json.Json +import org.kodein.di.DirectDI +import org.kodein.di.instance + +@SuppressLint("RestrictedApi") +@RequiresApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE) +class PasskeyBeginGetRequest( + private val context: Context, + private val json: Json, + private val passkeyTargetCheck: PasskeyTargetCheck, +) { + // https://www.w3.org/TR/webauthn-2/#dictionary-assertion-options + @Serializable + private data class PublicKeyCredentialRequestOptions( + val allowCredentials: List = emptyList(), + @SerialName("challenge") + val challengeBase64: String, + val rpId: String, + val userVerification: UserVerification? = UserVerification.PREFERRED, + // https://www.w3.org/TR/webauthn-2/#enum-attestation-convey + val attestation: String? = "none", + ) { + // https://www.w3.org/TR/webauthn-2/#enum-userVerificationRequirement + enum class UserVerification { + @SerialName("required") + REQUIRED, + + @SerialName("preferred") + PREFERRED, + + @SerialName("discouraged") + DISCOURAGED, + } + + // https://www.w3.org/TR/webauthn-2/#dictionary-credential-descriptor + @Serializable + data class PublicKeyCredentialDescriptor( + val type: String, + @SerialName("id") + val idBase64: String, + // https://www.w3.org/TR/webauthn-2/#enum-transport + val transports: List = emptyList(), + ) + } + + constructor( + directDI: DirectDI, + ) : this( + context = directDI.instance(), + json = directDI.instance(), + passkeyTargetCheck = directDI.instance(), + ) + + suspend fun processGetCredentialsRequest( + cipherHistoryOpenedRepository: CipherHistoryOpenedRepository, + request: BeginGetCredentialRequest, + ciphers: List, + userVerified: Boolean = false, + ): BeginGetCredentialResponse { + val credentialEntries = request + .beginGetCredentialOptions + .flatMap { option -> + when (option) { + is BeginGetPasswordOption -> populatePasswordData( + callingAppInfo = request.callingAppInfo, + option = option, + ciphers = ciphers, + userVerified = userVerified, + ) + + is BeginGetPublicKeyCredentialOption -> populatePasskeyData( + cipherHistoryOpenedRepository = cipherHistoryOpenedRepository, + callingAppInfo = request.callingAppInfo, + option = option, + ciphers = ciphers, + userVerified = userVerified, + ) + + else -> { + emptyList() + } + } + } + return BeginGetCredentialResponse(credentialEntries) + } + + private suspend fun populatePasswordData( + callingAppInfo: CallingAppInfo?, + option: BeginGetPasswordOption, + ciphers: List, + userVerified: Boolean, + ): List { + return emptyList() + } + + private suspend fun populatePasskeyData( + cipherHistoryOpenedRepository: CipherHistoryOpenedRepository, + callingAppInfo: CallingAppInfo?, + option: BeginGetPublicKeyCredentialOption, + ciphers: List, + userVerified: Boolean, + ): List { + val requestOptions: PublicKeyCredentialRequestOptions = + json.decodeFromString(option.requestJson) + // Ignore not allowed relying party IDs. + if (!validateRpId(requestOptions.rpId)) { + return emptyList() + } + val target = kotlin.run { + val allowCredentials = requestOptions.allowCredentials + .map { credentialDescriptor -> + val credentialId = kotlin.run { + val data = PasskeyBase64.decode(credentialDescriptor.idBase64) + PasskeyCredentialId.decode(data) + } + PasskeyTarget.AllowedCredential( + credentialId = credentialId, + ) + } + PasskeyTarget( + allowedCredentials = allowCredentials + .takeIf { it.isNotEmpty() }, + rpId = requestOptions.rpId, + ) + } + return ciphers + .flatMap { cipher -> + if (cipher.deleted) { + return@flatMap emptyList() + } + + val credentials = cipher.login?.fido2Credentials.orEmpty() + credentials + .mapNotNull { credential -> + val valid = passkeyTargetCheck( + credential, + target, + ).attempt().bind().isRight { it } + if (!valid) { + return@mapNotNull null + } + // At this moment we support a small set of credentials, + // for example we only support one algorithm + curve pair. + val supported = credential.keyAlgorithm == "ECDSA" && + credential.keyCurve == "P-256" && + credential.keyType == "public-key" + if (!supported) { + return@mapNotNull null + } + + // Load last used time, this time might be used to sort the items + // on the system user interface. + val lastUsedTime = getCredentialLastUsedTimeOrNull( + cipherHistoryOpenedRepository = cipherHistoryOpenedRepository, + cipherId = cipher.id, + credentialId = credential.credentialId, + ) + val requiresUserVerification = cipher.reprompt || + requestOptions.userVerification == PublicKeyCredentialRequestOptions.UserVerification.REQUIRED + + val username = credential.userDisplayName + // Normally the username should never be empty, + // be i've seen coinbase do that. + ?: "Unknown username" + PublicKeyCredentialEntry.Builder( + context = context, + username = username, + pendingIntent = createGetPasskeyPendingIntent( + accountId = cipher.accountId, + cipherId = cipher.id, + credId = credential.credentialId, + cipherName = cipher.name, + credRpId = credential.rpId, + credUserDisplayName = username, + requiresUserVerification = requiresUserVerification, + userVerified = userVerified, + ), + beginGetPublicKeyCredentialOption = option, + ) + .setLastUsedTime(lastUsedTime?.toJavaInstant()) + .setAutoSelectAllowed(lastUsedTime != null) + .setDisplayName(cipher.name) + .build() + } + } + } + + private suspend fun getCredentialLastUsedTimeOrNull( + cipherHistoryOpenedRepository: CipherHistoryOpenedRepository, + cipherId: String, + credentialId: String, + ): Instant? = cipherHistoryOpenedRepository + .getCredentialLastUsed( + cipherId = cipherId, + credentialId = credentialId, + ) + .toIO() + .attempt() + .bind() + .getOrNull() + + // See: + // https://webauthn-doc.spomky-labs.com/prerequisites/the-relying-party#relying-party-id + private suspend fun validateRpId( + rpId: String, + ): Boolean = '/' !in rpId && + ':' !in rpId && + '@' !in rpId && + !REGEX_IPV4.matches(rpId) + + // + // Pending intent + // + + private fun createGetPasskeyPendingIntent( + accountId: String, + cipherId: String, + credId: String, + cipherName: String, + credRpId: String, + credUserDisplayName: String, + requiresUserVerification: Boolean, + userVerified: Boolean, + ): PendingIntent { + val intent = PasskeyGetActivity.getIntent( + context = context, + args = PasskeyGetActivity.Args( + accountId = accountId, + cipherId = cipherId, + credId = credId, + cipherName = cipherName, + credRpId = credRpId, + credUserDisplayName = credUserDisplayName, + requiresUserVerification = requiresUserVerification, + userVerified = userVerified, + ), + ) + val flags = PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_MUTABLE + val rc = getNextPendingIntentRequestCode() + return PendingIntent.getActivity(context, rc, intent, flags) + } + + private fun getNextPendingIntentRequestCode() = PendingIntents.credential.obtainId() +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/android/PasskeyCompose.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/PasskeyCompose.kt new file mode 100644 index 00000000..92b22d29 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/PasskeyCompose.kt @@ -0,0 +1,91 @@ +package com.artemchep.keyguard.android + +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.width +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Close +import androidx.compose.material.icons.outlined.ErrorOutline +import androidx.compose.material3.Button +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.OtherScaffold +import com.artemchep.keyguard.ui.theme.Dimens +import dev.icerock.moko.resources.compose.stringResource + +@Composable +fun PasskeyError( + modifier: Modifier = Modifier, + title: String?, + message: String, + onFinish: () -> Unit, +) { + OtherScaffold( + modifier = modifier, + ) { + Icon( + modifier = Modifier + .align(Alignment.Start), + imageVector = Icons.Outlined.ErrorOutline, + contentDescription = null, + tint = MaterialTheme.colorScheme.error, + ) + if (title != null) { + Spacer( + modifier = Modifier + .height(8.dp), + ) + Text( + modifier = Modifier + .fillMaxWidth(), + text = title, + color = MaterialTheme.colorScheme.error, + style = MaterialTheme.typography.titleMedium, + ) + } + Spacer( + modifier = Modifier + .height(24.dp), + ) + Text( + modifier = Modifier + .fillMaxWidth(), + text = message, + style = MaterialTheme.typography.bodyMedium, + ) + Spacer( + modifier = Modifier + .height(16.dp), + ) + val updatedOnFinish by rememberUpdatedState(onFinish) + Button( + modifier = Modifier + .fillMaxWidth(), + onClick = { + updatedOnFinish() + }, + ) { + Icon( + imageVector = Icons.Outlined.Close, + contentDescription = null, + ) + Spacer( + modifier = Modifier + .width(Dimens.buttonIconPadding), + ) + Text( + text = stringResource(Res.strings.close), + ) + } + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/android/PasskeyCreateActivity.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/PasskeyCreateActivity.kt new file mode 100644 index 00000000..645eaf7b --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/PasskeyCreateActivity.kt @@ -0,0 +1,363 @@ +package com.artemchep.keyguard.android + +import android.annotation.SuppressLint +import android.app.Activity +import android.content.Context +import android.content.Intent +import android.os.Build +import android.os.Bundle +import androidx.annotation.RequiresApi +import androidx.compose.animation.Crossfade +import androidx.compose.foundation.layout.* +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Add +import androidx.compose.material.icons.outlined.Close +import androidx.compose.material.icons.outlined.ErrorOutline +import androidx.compose.material3.* +import androidx.compose.runtime.* +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.unit.dp +import androidx.credentials.CreatePublicKeyCredentialRequest +import androidx.credentials.CreatePublicKeyCredentialResponse +import androidx.credentials.exceptions.CreateCredentialException +import androidx.credentials.exceptions.CreateCredentialUnknownException +import androidx.credentials.provider.PendingIntentHandler +import androidx.lifecycle.lifecycleScope +import com.artemchep.keyguard.AppMode +import com.artemchep.keyguard.LocalAppMode +import com.artemchep.keyguard.common.io.attempt +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.model.AddPasskeyCipherRequest +import com.artemchep.keyguard.common.model.DSecret +import com.artemchep.keyguard.common.model.MasterSession +import com.artemchep.keyguard.common.model.VaultState +import com.artemchep.keyguard.common.usecase.AddPasskeyCipher +import com.artemchep.keyguard.common.usecase.GetVaultSession +import com.artemchep.keyguard.feature.keyguard.ManualAppScreen +import com.artemchep.keyguard.feature.keyguard.ManualAppScreenOnCreate +import com.artemchep.keyguard.feature.keyguard.ManualAppScreenOnLoading +import com.artemchep.keyguard.feature.keyguard.ManualAppScreenOnMain +import com.artemchep.keyguard.feature.keyguard.ManualAppScreenOnUnlock +import com.artemchep.keyguard.platform.crashlyticsIsEnabled +import com.artemchep.keyguard.platform.recordException +import com.artemchep.keyguard.platform.recordLog +import com.artemchep.keyguard.provider.bitwarden.CreatePasskey +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.OtherScaffold +import com.artemchep.keyguard.ui.theme.Dimens +import com.artemchep.keyguard.ui.theme.combineAlpha +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.async +import kotlinx.coroutines.coroutineScope +import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.filterNotNull +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.flow.mapNotNull +import kotlinx.coroutines.launch +import kotlinx.datetime.Clock +import kotlinx.serialization.json.Json +import org.kodein.di.* + +@RequiresApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE) +class PasskeyCreateActivity : BaseActivity(), DIAware { + companion object { + fun getIntent( + context: Context, + ): Intent = Intent(context, PasskeyCreateActivity::class.java) + } + + private val getVaultSession by instance() + + private val json by instance() + + private val passkeyBeginGetRequest by instance() + + private val sdfsdff by lazy { + val request = PendingIntentHandler.retrieveProviderCreateCredentialRequest(intent) + requireNotNull(request) { + "Create request from framework is empty." + } + } + + private val createPasskeyData by lazy { + kotlin.runCatching { + val r = sdfsdff.callingRequest as CreatePublicKeyCredentialRequest + val data = json.decodeFromString(r.requestJson) + data + }.getOrNull() + } + + private val eheheState = mutableStateOf(Ahhehe.Loading) + + private sealed interface Ahhehe { + data object Loading : Ahhehe + + /** + * A screen that asks a user to + * authenticate himself. + */ + class PickCipher( + val onComplete: (DSecret) -> Unit, + ) : Ahhehe + + /** + * A screen that shows an error to a user and + * offers a button to close the app. + */ + class Error( + val title: String? = null, + val message: String, + val onFinish: () -> Unit, + ) : Ahhehe + } + + @SuppressLint("RestrictedApi") + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + val startedAt = Clock.System.now() + recordLog("Opened passkey create activity") + + // Observe the vault session to detect when a user + // unlocks the vault. + lifecycleScope.launch { + val session = getVaultSession() + .mapNotNull { it as? MasterSession.Key } + .first() + + val cipherState = MutableStateFlow(null) + eheheState.value = Ahhehe.PickCipher { + cipherState.value = it + } + // Wait till the user picks a cipher to + // save the passkey to. + val cipher = cipherState + .filterNotNull() + .first() + eheheState.value = Ahhehe.Loading + + val (response, local) = runCatching { + PasskeyUtils.withProcessingMinTime { + processUnlockedVault( + session = session, + userVerified = true, + ) + } + }.getOrElse { + recordException(it) + + val intent = Intent().apply { + val e = it as? CreateCredentialException + ?: CreateCredentialUnknownException() + PendingIntentHandler.setCreateCredentialException( + intent = this, + exception = e, + ) + } + setResult(Activity.RESULT_OK, intent) + + // Show the error to a user + val uiState = Ahhehe.Error( + title = Res.strings.error_failed_create_passkey + .getString(this@PasskeyCreateActivity), + message = it.localizedMessage + ?: it.message + ?: "Something went wrong", + onFinish = { + finish() + }, + ) + eheheState.value = uiState + return@launch // end + } + + val request = AddPasskeyCipherRequest( + cipherId = cipher.id, + data = local, + ) + val addpasskey = session.di.direct.instance() + val addpasskeyResult = addpasskey(request) + .attempt() + .bind() + addpasskeyResult.fold( + ifLeft = { + val intent = Intent().apply { + val e = it as? CreateCredentialException + ?: CreateCredentialUnknownException("Failed to add the passkey to the vault.") + PendingIntentHandler.setCreateCredentialException( + intent = this, + exception = e, + ) + } + setResult(Activity.RESULT_OK, intent) + + // Show the error to a user + val uiState = Ahhehe.Error( + title = Res.strings.error_failed_create_passkey + .getString(this@PasskeyCreateActivity), + message = it.localizedMessage + ?: it.message + ?: "Something went wrong", + onFinish = { + finish() + }, + ) + eheheState.value = uiState + }, + ifRight = { + val intent = Intent().apply { + PendingIntentHandler.setCreateCredentialResponse( + intent = this, + response = response, + ) + } + setResult(Activity.RESULT_OK, intent) + finish() + }, + ) + } + } + + @Composable + override fun Content() { + ExtensionScaffold( + header = { + Row( + modifier = Modifier + .padding( + start = Dimens.horizontalPadding, + end = 8.dp, + top = 8.dp, + bottom = 8.dp, + ), + verticalAlignment = Alignment.CenterVertically, + ) { + Column( + modifier = Modifier + .weight(1f) + .align(Alignment.CenterVertically), + ) { + Text( + text = stringResource(Res.strings.passkey_create_header), + style = MaterialTheme.typography.labelSmall, + color = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + overflow = TextOverflow.Ellipsis, + maxLines = 1, + ) + val data = createPasskeyData + if (data != null) { + Row { + Text( + text = data.user.displayName, + style = MaterialTheme.typography.titleSmall, + overflow = TextOverflow.Ellipsis, + maxLines = 1, + ) + Text( + modifier = Modifier + .weight(1f, fill = false), + text = "@" + data.rp.id, + style = MaterialTheme.typography.titleSmall, + color = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + overflow = TextOverflow.Ellipsis, + maxLines = 1, + ) + } + } else { + Text( + text = "Failed to parse a create request data", + style = MaterialTheme.typography.titleMedium, + overflow = TextOverflow.Ellipsis, + maxLines = 2, + ) + } + } + + val context by rememberUpdatedState(newValue = LocalContext.current) + TextButton( + onClick = { + context.closestActivityOrNull?.finish() + }, + ) { + Icon(Icons.Outlined.Close, null) + Spacer( + modifier = Modifier + .width(Dimens.buttonIconPadding), + ) + Text( + text = stringResource(Res.strings.cancel), + textAlign = TextAlign.Center, + ) + } + } + }, + ) { + // Instead of showing a vault to a user, we continue showing the + // loading screen until we automatically form a response and close + // the activity. + ManualAppScreen { vaultState -> + when (vaultState) { + is VaultState.Create -> ManualAppScreenOnCreate(vaultState) + is VaultState.Unlock -> ManualAppScreenOnUnlock(vaultState) + is VaultState.Loading -> ManualAppScreenOnLoading(vaultState) + is VaultState.Main -> { + val state = eheheState.value + when (state) { + is Ahhehe.Loading -> { + val fakeLoadingState = VaultState.Loading + ManualAppScreenOnLoading(fakeLoadingState) + } + + is Ahhehe.Error -> { + PasskeyError( + title = state.title, + message = state.message, + onFinish = state.onFinish, + ) + } + + is Ahhehe.PickCipher -> { + val updatedOnAuthenticated by rememberUpdatedState(state.onComplete) + val appMode = remember { + AppMode.SavePasskey( + rpId = createPasskeyData?.rp?.id, + onComplete = { cipher -> + updatedOnAuthenticated.invoke(cipher) + }, + ) + } + CompositionLocalProvider( + LocalAppMode provides appMode, + ) { + ManualAppScreenOnMain(vaultState) + } + } + } + } + } + } + } + } + + private suspend fun processUnlockedVault( + session: MasterSession.Key, + userVerified: Boolean, + ): Pair { + val request = PendingIntentHandler.retrieveProviderCreateCredentialRequest(intent) + requireNotNull(request) { + "Create request from framework is empty." + } + + return passkeyBeginGetRequest.processGetCredentialsRequest( + request = request, + userVerified = userVerified, + ) + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/android/PasskeyCreateRequest.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/PasskeyCreateRequest.kt new file mode 100644 index 00000000..06e513de --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/PasskeyCreateRequest.kt @@ -0,0 +1,207 @@ +package com.artemchep.keyguard.android + +import android.annotation.SuppressLint +import android.app.Application +import android.content.Context +import android.os.Build +import androidx.annotation.RequiresApi +import androidx.credentials.CreatePublicKeyCredentialRequest +import androidx.credentials.CreatePublicKeyCredentialResponse +import androidx.credentials.provider.ProviderCreateCredentialRequest +import androidx.credentials.webauthn.Cbor +import com.artemchep.keyguard.common.model.AddPasskeyCipherRequest +import com.artemchep.keyguard.common.service.text.Base64Service +import com.artemchep.keyguard.provider.bitwarden.CreatePasskey +import kotlinx.serialization.encodeToString +import kotlinx.serialization.json.Json +import kotlinx.serialization.json.JsonObjectBuilder +import kotlinx.serialization.json.add +import kotlinx.serialization.json.buildJsonArray +import kotlinx.serialization.json.buildJsonObject +import kotlinx.serialization.json.put +import org.kodein.di.DirectDI +import org.kodein.di.allInstances +import org.kodein.di.instance +import java.math.BigInteger +import java.security.KeyPair +import java.security.interfaces.ECPublicKey +import java.security.spec.ECPoint + +@SuppressLint("RestrictedApi") +@RequiresApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE) +class PasskeyCreateRequest( + private val context: Context, + private val json: Json, + private val base64Service: Base64Service, + private val passkeyUtils: PasskeyUtils, + private val passkeyGenerators: List, +) { + constructor( + directDI: DirectDI, + ) : this( + context = directDI.instance(), + json = directDI.instance(), + base64Service = directDI.instance(), + passkeyUtils = directDI.instance(), + passkeyGenerators = directDI.allInstances(), + ) + + suspend fun processGetCredentialsRequest( + request: ProviderCreateCredentialRequest, + userVerified: Boolean, + ): Pair { + val request2 = request.callingRequest as CreatePublicKeyCredentialRequest + + val data = json.decodeFromString(request2.requestJson) + val gen = passkeyGenerators.firstOrNull { generator -> + val matchingCredentials = data.pubKeyCredParams + .firstOrNull(generator::handles) + matchingCredentials != null + } + requireNotNull(gen) { + "None of the allowed public key parameters are supported by the app." + } + + // Generate a key pair, this pair will be used to sign this and all + // future authentication requests. + val keyPair = gen.keyPair() + + val publicKeyCborBytes = getPublicKeyFromEcKeyPair(keyPair) + val publicKeyAlgorithm = -7 + val publicKeyBytes = keyPair.public.encoded + + val challenge = data.challenge + val rpId = data.rp.id!! + val rpName = data.rp.name + val origin = passkeyUtils.callingAppOrigin(request.callingAppInfo) + val packageName = request.callingAppInfo.packageName + passkeyUtils.requireRpMatchesOrigin( + rpId = rpId, + origin = origin, + packageName = packageName, + ) + + val credentialId = passkeyUtils + .generateCredentialId() + val credentialIdBytes = PasskeyCredentialId.encode(credentialId) + + val clientData = buildJsonObject { + put("type", "webauthn.create") + put("challenge", challenge) + put("origin", origin) + put("androidPackageName", packageName) + } + val clientDataJson = json.encodeToString(clientData) + val clientDataBytes = clientDataJson.toByteArray() + + val authData = passkeyUtils.authData( + rpId = rpId, + counter = 0, + credentialId = credentialIdBytes, + credentialPublicKey = publicKeyCborBytes, + attestation = data.attestation, + userVerification = userVerified, + userPresence = true, + ) + val attestationObjectBytes = defaultAttestationObject( + authData = authData, + ) + + val keyValue = base64Service.encodeToString(keyPair.private.encoded) + val discoverable = data.authenticatorSelection.requireResidentKey || + data.authenticatorSelection.residentKey == "required" || + data.authenticatorSelection.residentKey == "preferred" + val local = AddPasskeyCipherRequest.Data( + credentialId = credentialId, + keyType = "public-key", + keyAlgorithm = "ECDSA", + keyCurve = "P-256", + keyValue = keyValue, + rpId = rpId, + rpName = rpName, + counter = 0, + userHandle = data.user.id, + userName = data.user.name, + userDisplayName = data.user.displayName, + discoverable = discoverable, + ) + + val registrationResponse = buildJsonObject { + put("id", credentialIdBytes) + put("rawId", credentialIdBytes) + put("type", "public-key") + put("authenticatorAttachment", "cross-platform") + put( + "response", + buildJsonObject { + put("clientDataJSON", clientDataBytes) + put("attestationObject", attestationObjectBytes) + put( + "transports", + if (rpId == "google.com") { + buildJsonArray { + add("internal") + add("usb") + } + } else { + buildJsonArray { + add("internal") + } + }, + ) + put("publicKeyAlgorithm", publicKeyAlgorithm) + put("publicKey", publicKeyBytes) + put("authenticatorData", authData) + }, + ) + put("clientExtensionResults", buildJsonObject { }) + } + val registrationResponseJson = json.encodeToString(registrationResponse) + return CreatePublicKeyCredentialResponse(registrationResponseJson) to local + } + + @SuppressLint("RestrictedApi") + private fun defaultAttestationObject( + authData: ByteArray, + ): ByteArray { + val ao = mutableMapOf() + ao["fmt"] = "none" + ao["attStmt"] = emptyMap() + ao["authData"] = authData + return Cbor().encode(ao) + } + + private fun getPublicKeyFromEcKeyPair(keyPair: KeyPair): ByteArray { + val ecPubKey = keyPair.public as ECPublicKey + val ecPoint: ECPoint = ecPubKey.w + + // for now, only covers ES256 + if (ecPoint.affineX.bitLength() > 256 || ecPoint.affineY.bitLength() > 256) return ByteArray( + 0, + ) + + val byteX = bigIntToByteArray32(ecPoint.affineX) + val byteY = bigIntToByteArray32(ecPoint.affineY) + + // refer to RFC9052 Section 7 for details + return "A5010203262001215820".chunked(2).map { it.toInt(16).toByte() }.toByteArray() + + byteX + + "225820".chunked(2).map { it.toInt(16).toByte() }.toByteArray() + + byteY + } + + private fun bigIntToByteArray32(bigInteger: BigInteger): ByteArray { + var ba = bigInteger.toByteArray() + + if (ba.size < 32) { + // append zeros in front + ba = ByteArray(32) + ba + } + // get the last 32 bytes as bigint conversion sometimes put extra zeros at front + return ba.copyOfRange(ba.size - 32, ba.size) + } + + private fun JsonObjectBuilder.put(key: String, data: ByteArray) { + put(key, PasskeyBase64.encodeToString(data)) + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/android/PasskeyCredentialId.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/PasskeyCredentialId.kt new file mode 100644 index 00000000..49b5662d --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/PasskeyCredentialId.kt @@ -0,0 +1,40 @@ +package com.artemchep.keyguard.android + +import java.nio.ByteBuffer +import java.util.UUID + +object PasskeyCredentialId { + private const val UUID_SIZE_BYTES = Long.SIZE_BYTES * 2 + + fun encode( + credentialId: String, + ): ByteArray { + val uuid = kotlin + .runCatching { + UUID.fromString(credentialId) + } + // The credential id is not conforming to UUID rules, + // this is fine for us (although should not happen), we + // just return data as if it was encoded with base64. + .getOrElse { + return PasskeyBase64.decode(credentialId) + } + return ByteBuffer.allocate(UUID_SIZE_BYTES) + .putLong(uuid.mostSignificantBits) + .putLong(uuid.leastSignificantBits) + .array() + } + + fun decode( + data: ByteArray, + ): String { + if (data.size == UUID_SIZE_BYTES) { + val bb = ByteBuffer.wrap(data) + return UUID( + bb.getLong(), + bb.getLong(), + ).toString() + } + return PasskeyBase64.encodeToString(data) + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/android/PasskeyGenerator.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/PasskeyGenerator.kt new file mode 100644 index 00000000..63d40c01 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/PasskeyGenerator.kt @@ -0,0 +1,62 @@ +package com.artemchep.keyguard.android + +import com.artemchep.keyguard.provider.bitwarden.CreatePasskeyPubKeyCredParams +import java.security.KeyPair +import java.security.KeyPairGenerator +import java.security.PrivateKey +import java.security.Signature +import java.security.spec.ECGenParameterSpec + +abstract class PasskeyGeneratorBase : PasskeyGenerator { + // https://www.iana.org/assignments/cose/cose.xhtml#algorithms + abstract val type: Int + + /** + * Returns `true` if the generator can handle given + * crypto parameters, `false` otherwise. + */ + override fun handles( + params: CreatePasskeyPubKeyCredParams, + ): Boolean = params.alg == type +} + +interface PasskeyGenerator { + /** + * Returns `true` if the generator can handle given + * crypto parameters, `false` otherwise. + */ + fun handles( + params: CreatePasskeyPubKeyCredParams, + ): Boolean + + fun keyPair(): KeyPair + + fun sign( + key: PrivateKey, + data: ByteArray, + ): ByteArray +} + +class PasskeyGeneratorES256 : PasskeyGeneratorBase() { + /** ECDSA w/ SHA-256 **/ + override val type: Int = -7 + + override fun keyPair(): KeyPair { + val generator = KeyPairGenerator.getInstance("EC").apply { + val spec = ECGenParameterSpec("secp256r1") + initialize(spec) + } + val key = generator.genKeyPair() + return key + } + + override fun sign( + key: PrivateKey, + data: ByteArray, + ): ByteArray { + val sig = Signature.getInstance("SHA256withECDSA") + sig.initSign(key) + sig.update(data) + return sig.sign() + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/android/PasskeyGetActivity.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/PasskeyGetActivity.kt new file mode 100644 index 00000000..6cf7b75b --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/PasskeyGetActivity.kt @@ -0,0 +1,679 @@ +package com.artemchep.keyguard.android + +import android.annotation.SuppressLint +import android.app.Activity +import android.content.Context +import android.content.Intent +import android.os.Build +import android.os.Bundle +import android.os.Parcelable +import androidx.annotation.RequiresApi +import androidx.compose.foundation.layout.* +import androidx.compose.foundation.text.KeyboardActionScope +import androidx.compose.foundation.text.KeyboardActions +import androidx.compose.foundation.text.KeyboardOptions +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Close +import androidx.compose.material.icons.outlined.Fingerprint +import androidx.compose.material3.* +import androidx.compose.runtime.* +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.platform.testTag +import androidx.compose.ui.text.input.ImeAction +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.unit.dp +import androidx.credentials.GetCredentialResponse +import androidx.credentials.exceptions.GetCredentialException +import androidx.credentials.exceptions.GetCredentialUnknownException +import androidx.credentials.provider.PendingIntentHandler +import androidx.lifecycle.lifecycleScope +import arrow.optics.optics +import com.artemchep.keyguard.common.io.attempt +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.io.effectTap +import com.artemchep.keyguard.common.io.ioRaise +import com.artemchep.keyguard.common.io.toIO +import com.artemchep.keyguard.common.model.AddCipherUsedPasskeyHistoryRequest +import com.artemchep.keyguard.common.model.BiometricAuthException +import com.artemchep.keyguard.common.model.BiometricAuthPrompt +import com.artemchep.keyguard.common.model.BiometricAuthPromptSimple +import com.artemchep.keyguard.common.model.BiometricStatus +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.model.MasterSession +import com.artemchep.keyguard.common.model.PureBiometricAuthPrompt +import com.artemchep.keyguard.common.model.ToastMessage +import com.artemchep.keyguard.common.model.VaultState +import com.artemchep.keyguard.common.model.getOrNull +import com.artemchep.keyguard.common.usecase.AddCipherUsedPasskeyHistory +import com.artemchep.keyguard.common.usecase.BiometricStatusUseCase +import com.artemchep.keyguard.common.usecase.ConfirmAccessByPasswordUseCase +import com.artemchep.keyguard.common.usecase.GetCiphers +import com.artemchep.keyguard.common.usecase.GetVaultSession +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.common.util.flow.EventFlow +import com.artemchep.keyguard.feature.auth.common.TextFieldModel2 +import com.artemchep.keyguard.feature.auth.common.Validated +import com.artemchep.keyguard.feature.auth.common.util.validatedPassword +import com.artemchep.keyguard.feature.biometric.BiometricPromptEffect +import com.artemchep.keyguard.feature.keyguard.ManualAppScreen +import com.artemchep.keyguard.feature.keyguard.ManualAppScreenOnCreate +import com.artemchep.keyguard.feature.keyguard.ManualAppScreenOnLoading +import com.artemchep.keyguard.feature.keyguard.ManualAppScreenOnUnlock +import com.artemchep.keyguard.feature.keyguard.unlock.UnlockScreenContainer +import com.artemchep.keyguard.feature.keyguard.unlock.UnlockState +import com.artemchep.keyguard.feature.loading.LoadingTask +import com.artemchep.keyguard.feature.localization.TextHolder +import com.artemchep.keyguard.feature.navigation.NavigationNode +import com.artemchep.keyguard.feature.navigation.Route +import com.artemchep.keyguard.feature.navigation.state.produceScreenState +import com.artemchep.keyguard.platform.recordException +import com.artemchep.keyguard.platform.recordLog +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.ExpandedIfNotEmpty +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.OtherScaffold +import com.artemchep.keyguard.ui.PasswordFlatTextField +import com.artemchep.keyguard.ui.theme.Dimens +import com.artemchep.keyguard.ui.theme.combineAlpha +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.async +import kotlinx.coroutines.coroutineScope +import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.flow.mapNotNull +import kotlinx.coroutines.flow.onStart +import kotlinx.coroutines.flow.shareIn +import kotlinx.coroutines.launch +import kotlinx.datetime.Clock +import kotlinx.parcelize.Parcelize +import org.kodein.di.* +import org.kodein.di.compose.localDI + +@RequiresApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE) +class PasskeyGetActivity : BaseActivity(), DIAware { + companion object { + private const val KEY_ARGUMENTS = "arguments" + + fun getIntent( + context: Context, + args: Args, + ): Intent = Intent(context, PasskeyGetActivity::class.java).apply { + putExtra(KEY_ARGUMENTS, args) + } + } + + @Parcelize + data class Args( + val accountId: String, + val cipherId: String, + val credId: String, + val cipherName: String, + val credRpId: String, + val credUserDisplayName: String, + val requiresUserVerification: Boolean, + val userVerified: Boolean, + ) : Parcelable + + private val _args by lazy { + intent.extras?.getParcelable(KEY_ARGUMENTS) + } + + private val args: Args get() = requireNotNull(_args) + + private val getVaultSession by instance() + + private val passkeyBeginGetRequest by instance() + + private val eheheState = mutableStateOf(Ahhehe.Loading) + + private sealed interface Ahhehe { + data object Loading : Ahhehe + + /** + * A screen that asks a user to + * authenticate himself. + */ + class RequiresAuthentication( + val onAuthenticated: () -> Unit, + ) : Ahhehe + + /** + * A screen that shows an error to a user and + * offers a button to close the app. + */ + class Error( + val title: String? = null, + val message: String, + val onFinish: () -> Unit, + ) : Ahhehe + } + + @SuppressLint("RestrictedApi") + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + recordLog("Opened passkey get activity") + // Arguments should never be null, we can not proceed + // immediately exit the screen. + if (_args == null) { + finish() + return + } + + val startedAt = Clock.System.now() + // Observe the vault session to detect when a user + // unlocks the vault. + lifecycleScope.launch { + val session = getVaultSession() + .mapNotNull { it as? MasterSession.Key } + .first() + + val userVerifiedState = kotlin.run { + val initialValue = args.userVerified || + session.createdAt > startedAt && + session.origin is MasterSession.Key.Authenticated + MutableStateFlow(initialValue) + } + if (!userVerifiedState.value && args.requiresUserVerification) { + eheheState.value = Ahhehe.RequiresAuthentication { + userVerifiedState.value = true + } + // Wait till the user passes verification process. + userVerifiedState.first { it } + } + eheheState.value = Ahhehe.Loading + + val response = runCatching { + PasskeyUtils.withProcessingMinTime { + val userVerified = userVerifiedState.value + processUnlockedVault( + session = session, + userVerified = userVerified, + ) + } + }.getOrElse { + recordException(it) + + // Something went wrong, finish with the + // exception. + val intent = Intent().apply { + val e = it as? GetCredentialException + ?: GetCredentialUnknownException() + PendingIntentHandler.setGetCredentialException( + intent = this, + exception = e, + ) + } + setResult(Activity.RESULT_OK, intent) + + // Show the error to a user + val uiState = Ahhehe.Error( + title = Res.strings.error_failed_use_passkey + .getString(this@PasskeyGetActivity), + message = it.localizedMessage + ?: it.message + ?: "Something went wrong", + onFinish = { + finish() + }, + ) + eheheState.value = uiState + return@launch // end + } + + // Log that a used has used the passkey. We only do + // it after a successful attempt. + val addCipherUsedPasskey = session.di.direct.instance() + val addCipherUsedPasskeyRequest = AddCipherUsedPasskeyHistoryRequest( + accountId = args.accountId, + cipherId = args.cipherId, + credentialId = args.credId, + ) + addCipherUsedPasskey(addCipherUsedPasskeyRequest) + .attempt() + .bind() + + val intent = Intent().apply { + PendingIntentHandler.setGetCredentialResponse( + intent = this, + response = response, + ) + } + setResult(Activity.RESULT_OK, intent) + finish() + } + } + + @Composable + override fun Content() { + ExtensionScaffold( + header = { + Row( + modifier = Modifier + .padding( + start = Dimens.horizontalPadding, + end = 8.dp, + top = 8.dp, + bottom = 8.dp, + ), + verticalAlignment = Alignment.CenterVertically, + ) { + Column( + modifier = Modifier + .weight(1f) + .align(Alignment.CenterVertically), + ) { + Text( + text = stringResource(Res.strings.passkey_auth_via_header), + style = MaterialTheme.typography.labelSmall, + color = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + overflow = TextOverflow.Ellipsis, + maxLines = 1, + ) + Row { + Text( + text = args.credUserDisplayName, + style = MaterialTheme.typography.titleSmall, + overflow = TextOverflow.Ellipsis, + maxLines = 1, + ) + Text( + modifier = Modifier + .weight(1f, fill = false), + text = "@" + args.credRpId, + style = MaterialTheme.typography.titleSmall, + color = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + overflow = TextOverflow.Ellipsis, + maxLines = 1, + ) + } + } + + val context by rememberUpdatedState(newValue = LocalContext.current) + TextButton( + onClick = { + context.closestActivityOrNull?.finish() + }, + ) { + Icon(Icons.Outlined.Close, null) + Spacer( + modifier = Modifier + .width(Dimens.buttonIconPadding), + ) + Text( + text = stringResource(Res.strings.cancel), + textAlign = TextAlign.Center, + ) + } + } + }, + ) { + // Instead of showing a vault to a user, we continue showing the + // loading screen until we automatically form a response and close + // the activity. + ManualAppScreen { vaultState -> + when (vaultState) { + is VaultState.Create -> ManualAppScreenOnCreate(vaultState) + is VaultState.Unlock -> ManualAppScreenOnUnlock(vaultState) + is VaultState.Loading -> ManualAppScreenOnLoading(vaultState) + is VaultState.Main -> { + val state = eheheState.value + when (state) { + is Ahhehe.Loading -> { + val fakeLoadingState = VaultState.Loading + ManualAppScreenOnLoading(fakeLoadingState) + } + + is Ahhehe.Error -> { + PasskeyError( + title = state.title, + message = state.message, + onFinish = state.onFinish, + ) + } + + is Ahhehe.RequiresAuthentication -> { + val updatedOnAuthenticated by rememberUpdatedState(state.onAuthenticated) + val route = remember { + UserVerificationRoute( + onAuthenticated = { + updatedOnAuthenticated.invoke() + }, + ) + } + NavigationNode( + id = "user_verification", + route = route, + ) + } + } + } + } + } + } + } + + private suspend fun processUnlockedVault( + session: MasterSession.Key, + userVerified: Boolean, + ): GetCredentialResponse { + val request = PendingIntentHandler.retrieveProviderGetCredentialRequest(intent) + requireNotNull(request) { + "Provider get request from framework is empty." + } + val ciphers = kotlin.run { + val getCiphers = session.di.direct.instance() + getCiphers() + .first() + } + val credential = ciphers + .firstNotNullOfOrNull { cipher -> + if ( + args.accountId != cipher.accountId && + args.cipherId != cipher.id + ) { + return@firstNotNullOfOrNull null + } + + cipher.login?.fido2Credentials + ?.firstOrNull { credential -> + args.credId == credential.credentialId + } + } + requireNotNull(credential) + return passkeyBeginGetRequest.processGetCredentialsRequest( + request = request, + credential = credential, + userVerified = userVerified, + ) + } +} + +class UserVerificationRoute( + private val onAuthenticated: () -> Unit, +) : Route { + @Composable + override fun Content( + ) { + UserVerificationScreen( + onAuthenticated = onAuthenticated, + ) + } +} + +@Composable +fun UserVerificationScreen( + onAuthenticated: () -> Unit, +) { + val state = produceUserVerificationState( + onAuthenticated = onAuthenticated, + ) + val content = state.content.getOrNull() + ?: return + + BiometricPromptEffect(content.sideEffects.showBiometricPromptFlow) + OtherScaffold { + UnlockScreenContainer( + top = { + Text( + textAlign = TextAlign.Center, + text = stringResource(Res.strings.userverification_header_text), + style = MaterialTheme.typography.bodyLarge, + ) + }, + center = { + val keyboardOnGo: (KeyboardActionScope.() -> Unit)? = + if (content.onVerify != null) { + // lambda + { + content.onVerify.invoke() + } + } else { + null + } + PasswordFlatTextField( + modifier = Modifier, + testTag = "field:password", + value = content.password, + keyboardOptions = KeyboardOptions( + imeAction = when { + keyboardOnGo != null -> ImeAction.Go + else -> ImeAction.Default + }, + ), + keyboardActions = KeyboardActions( + onGo = keyboardOnGo, + ), + ) + }, + bottom = { + val onUnlockButtonClick by rememberUpdatedState( + content.onVerify, + ) + Button( + modifier = Modifier + .testTag("btn:go") + .fillMaxWidth(), + enabled = content.onVerify != null, + onClick = { + onUnlockButtonClick?.invoke() + }, + ) { + Text( + text = stringResource(Res.strings.userverification_button_go), + ) + } + val onBiometricButtonClick by rememberUpdatedState( + content.biometric?.onClick, + ) + ExpandedIfNotEmpty( + valueOrNull = content.biometric, + ) { b -> + ElevatedButton( + modifier = Modifier + .padding(top = 32.dp), + enabled = b.onClick != null, + onClick = { + onBiometricButtonClick?.invoke() + }, + contentPadding = PaddingValues(16.dp), + ) { + Icon( + imageVector = Icons.Outlined.Fingerprint, + contentDescription = null, + ) + } + } + }, + ) + } +} + +@Immutable +data class UserVerificationState( + val content: Loadable = Loadable.Loading, +) { + @Immutable + data class Content( + val sideEffects: UnlockState.SideEffects, + val password: TextFieldModel2, + val biometric: Biometric? = null, + val isLoading: Boolean = false, + val onVerify: (() -> Unit)? = null, + ) + + @Immutable + @optics + data class Biometric( + val onClick: (() -> Unit)? = null, + ) { + companion object + } + + @Immutable + @optics + data class SideEffects( + val showBiometricPromptFlow: Flow, + ) { + companion object + } +} + +private const val DEFAULT_PASSWORD = "" + +@Composable +fun produceUserVerificationState( + onAuthenticated: () -> Unit, +): UserVerificationState = with(localDI().direct) { + produceUserVerificationState( + onAuthenticated = onAuthenticated, + biometricStatusUseCase = instance(), + confirmAccessByPasswordUseCase = instance(), + windowCoroutineScope = instance(), + ) +} + +@Composable +fun produceUserVerificationState( + onAuthenticated: () -> Unit, + biometricStatusUseCase: BiometricStatusUseCase, + confirmAccessByPasswordUseCase: ConfirmAccessByPasswordUseCase, + windowCoroutineScope: WindowCoroutineScope, +): UserVerificationState = produceScreenState( + key = "user_verification", + initial = UserVerificationState(), + args = arrayOf( + windowCoroutineScope, + ), +) { + val executor = screenExecutor() + + val passwordSink = mutablePersistedFlow("password") { DEFAULT_PASSWORD } + val passwordState = mutableComposeState(passwordSink) + + val biometricPrompt = kotlin.run { + val biometricStatus = biometricStatusUseCase() + .toIO() + .attempt() + .bind() + .getOrNull() + when (biometricStatus) { + is BiometricStatus.Available -> { + createPromptOrNull( + executor = executor, + fn = { + onAuthenticated() + }, + ) + } + + else -> null + } + } + + val biometricPromptSink = EventFlow() + val biometricPromptFlow = biometricPromptSink + // Automatically emit the prompt on first show + // of the user interface. + .onStart { + if (biometricPrompt != null) { + emit(biometricPrompt) + } + } + .shareIn(screenScope, SharingStarted.WhileSubscribed(5000L)) + val biometricStateEnabled = biometricPrompt?.let { prompt -> + UserVerificationState.Biometric( + onClick = { + biometricPromptSink.emit(prompt) + }, + ) + } + val biometricStateDisabled = biometricPrompt?.let { prompt -> + UserVerificationState.Biometric( + onClick = null, + ) + } + + combine( + passwordSink + .validatedPassword(this), + executor.isExecutingFlow, + ) { validatedPassword, taskExecuting -> + val error = (validatedPassword as? Validated.Failure)?.error + val canCreateVault = error == null && !taskExecuting + val content = UserVerificationState.Content( + biometric = if (taskExecuting) { + biometricStateDisabled + } else { + biometricStateEnabled + }, + sideEffects = UnlockState.SideEffects( + showBiometricPromptFlow = biometricPromptFlow, + ), + password = TextFieldModel2.of( + state = passwordState, + validated = validatedPassword, + ), + isLoading = taskExecuting, + onVerify = if (canCreateVault) { + // lambda + { + val io = confirmAccessByPasswordUseCase(validatedPassword.model) + .effectTap { success -> + if (success) { + onAuthenticated() + } else { + val message = ToastMessage( + title = translate(Res.strings.error_incorrect_password), + type = ToastMessage.Type.ERROR, + ) + message(message) + } + } + executor.execute(io) + } + } else { + null + }, + ) + UserVerificationState( + content = Loadable.Ok(content), + ) + } +} + +private fun createPromptOrNull( + executor: LoadingTask, + fn: () -> Unit, +): PureBiometricAuthPrompt = run { + BiometricAuthPromptSimple( + title = TextHolder.Res(Res.strings.elevatedaccess_biometric_auth_confirm_title), + text = TextHolder.Res(Res.strings.elevatedaccess_biometric_auth_confirm_text), + onComplete = { result -> + result.fold( + ifLeft = { exception -> + when (exception.code) { + BiometricAuthException.ERROR_CANCELED, + BiometricAuthException.ERROR_USER_CANCELED, + BiometricAuthException.ERROR_NEGATIVE_BUTTON, + -> return@fold + } + + val io = ioRaise(exception) + executor.execute(io) + }, + ifRight = { + fn.invoke() + }, + ) + }, + ) +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/android/PasskeyGetUnlockActivity.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/PasskeyGetUnlockActivity.kt new file mode 100644 index 00000000..6c377be6 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/PasskeyGetUnlockActivity.kt @@ -0,0 +1,193 @@ +package com.artemchep.keyguard.android + +import android.annotation.SuppressLint +import android.app.Activity +import android.content.Context +import android.content.Intent +import android.os.Build +import android.os.Bundle +import androidx.annotation.RequiresApi +import androidx.compose.foundation.layout.* +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Close +import androidx.compose.material3.* +import androidx.compose.runtime.* +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.unit.dp +import androidx.credentials.exceptions.GetCredentialException +import androidx.credentials.exceptions.GetCredentialUnknownException +import androidx.credentials.provider.BeginGetCredentialResponse +import androidx.credentials.provider.PendingIntentHandler +import androidx.lifecycle.lifecycleScope +import com.artemchep.keyguard.common.model.MasterSession +import com.artemchep.keyguard.common.model.VaultState +import com.artemchep.keyguard.common.usecase.GetCiphers +import com.artemchep.keyguard.common.usecase.GetVaultSession +import com.artemchep.keyguard.feature.keyguard.ManualAppScreen +import com.artemchep.keyguard.feature.keyguard.ManualAppScreenOnCreate +import com.artemchep.keyguard.feature.keyguard.ManualAppScreenOnLoading +import com.artemchep.keyguard.feature.keyguard.ManualAppScreenOnUnlock +import com.artemchep.keyguard.platform.recordException +import com.artemchep.keyguard.platform.recordLog +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.theme.Dimens +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.flow.mapNotNull +import kotlinx.coroutines.launch +import kotlinx.datetime.Clock +import org.kodein.di.* + +@RequiresApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE) +class PasskeyGetUnlockActivity : BaseActivity(), DIAware { + companion object { + fun getIntent( + context: Context, + ): Intent = Intent(context, PasskeyGetUnlockActivity::class.java) + } + + private val getVaultSession by instance() + + private val passkeyBeginGetRequest by instance() + + @SuppressLint("RestrictedApi") + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + recordLog("Opened passkey get-unlock activity") + val startedAt = Clock.System.now() + + // Observe the vault session to detect when a user + // unlocks the vault. + lifecycleScope.launch { + val session = getVaultSession() + .mapNotNull { it as? MasterSession.Key } + .first() + val userVerified = session.createdAt > startedAt && + session.origin is MasterSession.Key.Authenticated + val response = runCatching { + processUnlockedVault( + session = session, + userVerified = userVerified, + ) + }.getOrElse { + recordException(it) + + // Something went wrong, finish with the + // exception. + val intent = Intent().apply { + val e = it as? GetCredentialException + ?: GetCredentialUnknownException() + PendingIntentHandler.setGetCredentialException( + intent = this, + exception = e, + ) + } + setResult(Activity.RESULT_OK, intent) + finish() + return@launch // end + } + // If the provider does not have a credential, or an exception to return, + // provider must call android.app.Activity.setResult with the result code + // as android.app.Activity.RESULT_CANCELED. + val status = if (response.credentialEntries.isEmpty()) { + Activity.RESULT_CANCELED + } else { + Activity.RESULT_OK + } + val intent = Intent().apply { + PendingIntentHandler.setBeginGetCredentialResponse( + intent = this, + response = response, + ) + } + setResult(status, intent) + finish() + } + } + + @Composable + override fun Content() { + ExtensionScaffold( + header = { + Row( + modifier = Modifier + .padding( + start = Dimens.horizontalPadding, + end = 8.dp, + top = 8.dp, + bottom = 8.dp, + ), + verticalAlignment = Alignment.CenterVertically, + ) { + Text( + modifier = Modifier + .weight(1f) + .align(Alignment.CenterVertically), + text = stringResource(Res.strings.autofill_unlock_keyguard), + style = MaterialTheme.typography.titleMedium, + overflow = TextOverflow.Ellipsis, + maxLines = 1, + ) + + val context by rememberUpdatedState(newValue = LocalContext.current) + TextButton( + onClick = { + context.closestActivityOrNull?.finish() + }, + ) { + Icon(Icons.Outlined.Close, null) + Spacer( + modifier = Modifier + .width(Dimens.buttonIconPadding), + ) + Text( + text = stringResource(Res.strings.cancel), + textAlign = TextAlign.Center, + ) + } + } + }, + ) { + // Instead of showing a vault to a user, we continue showing the + // loading screen until we automatically form a response and close + // the activity. + ManualAppScreen { vaultState -> + when (vaultState) { + is VaultState.Create -> ManualAppScreenOnCreate(vaultState) + is VaultState.Unlock -> ManualAppScreenOnUnlock(vaultState) + is VaultState.Loading -> ManualAppScreenOnLoading(vaultState) + is VaultState.Main -> { + val fakeLoadingState = VaultState.Loading + ManualAppScreenOnLoading(fakeLoadingState) + } + } + } + } + } + + private suspend fun processUnlockedVault( + session: MasterSession.Key, + userVerified: Boolean, + ): BeginGetCredentialResponse { + val request = PendingIntentHandler.retrieveBeginGetCredentialRequest(intent) + requireNotNull(request) { + "Begin get request from framework is empty." + } + val ciphers = kotlin.run { + val getCiphers = session.di.direct.instance() + getCiphers() + .first() + } + + return passkeyBeginGetRequest.processGetCredentialsRequest( + cipherHistoryOpenedRepository = session.di.direct.instance(), + request = request, + ciphers = ciphers, + userVerified = userVerified, + ) + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/android/PasskeyModule.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/PasskeyModule.kt new file mode 100644 index 00000000..32718d96 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/PasskeyModule.kt @@ -0,0 +1,30 @@ +package com.artemchep.keyguard.android + +import android.os.Build +import androidx.annotation.RequiresApi +import org.kodein.di.DI +import org.kodein.di.bindSingleton + +@RequiresApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE) +fun passkeysModule() = DI.Module( + name = "passkeys", +) { + bindSingleton { + PasskeyCreateRequest(this) + } + bindSingleton { + PasskeyBeginGetRequest(this) + } + bindSingleton { + PasskeyProviderGetRequest(this) + } + bindSingleton { + PasskeyUtils(this) + } + // + // Generators + // + bindSingleton { + PasskeyGeneratorES256() + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/android/PasskeyProviderGetRequest.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/PasskeyProviderGetRequest.kt new file mode 100644 index 00000000..edb7f246 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/PasskeyProviderGetRequest.kt @@ -0,0 +1,158 @@ +package com.artemchep.keyguard.android + +import android.annotation.SuppressLint +import android.app.Application +import android.content.Context +import android.os.Build +import androidx.annotation.RequiresApi +import androidx.credentials.GetCredentialResponse +import androidx.credentials.GetPublicKeyCredentialOption +import androidx.credentials.PublicKeyCredential +import androidx.credentials.exceptions.GetCredentialUnknownException +import androidx.credentials.provider.ProviderGetCredentialRequest +import androidx.credentials.webauthn.PublicKeyCredentialRequestOptions +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.model.DSecret +import com.artemchep.keyguard.common.service.crypto.CryptoGenerator +import com.artemchep.keyguard.common.service.gpmprivapps.PrivilegedAppsService +import com.artemchep.keyguard.common.service.text.Base64Service +import kotlinx.serialization.encodeToString +import kotlinx.serialization.json.Json +import kotlinx.serialization.json.JsonObjectBuilder +import kotlinx.serialization.json.buildJsonObject +import kotlinx.serialization.json.put +import org.kodein.di.DirectDI +import org.kodein.di.instance +import java.security.KeyFactory +import java.security.Signature +import java.security.spec.PKCS8EncodedKeySpec + +class PasskeyProviderGetRequest( + private val context: Context, + private val json: Json, + private val base64Service: Base64Service, + private val cryptoService: CryptoGenerator, + private val passkeyUtils: PasskeyUtils, +) { + private class ClientData( + val bytes: ByteArray? = null, + val hash: ByteArray, + ) + + constructor( + directDI: DirectDI, + ) : this( + context = directDI.instance(), + json = directDI.instance(), + base64Service = directDI.instance(), + cryptoService = directDI.instance(), + passkeyUtils = directDI.instance(), + ) + + @SuppressLint("RestrictedApi") + @RequiresApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE) + suspend fun processGetCredentialsRequest( + request: ProviderGetCredentialRequest, + credential: DSecret.Login.Fido2Credentials, + userVerified: Boolean, + ): GetCredentialResponse { + val opt = request.credentialOptions.first() as GetPublicKeyCredentialOption + val js = PublicKeyCredentialRequestOptions(opt.requestJson) + + val challenge = PasskeyBase64.encodeToString(js.challenge) + val rpId = js.rpId + val origin = passkeyUtils.callingAppOrigin(request.callingAppInfo) + val packageName = request.callingAppInfo.packageName + passkeyUtils.requireRpMatchesOrigin( + rpId = rpId, + origin = origin, + packageName = packageName, + ) + + val credentialIdBytes = PasskeyCredentialId.encode(credential.credentialId) + + val factory: KeyFactory = KeyFactory.getInstance("EC") + val privateKey = run { + val privateKeyData = base64Service.decode(credential.keyValue) + val privateKeySpec = PKCS8EncodedKeySpec(privateKeyData) + factory.generatePrivate(privateKeySpec) + } + + val counter = kotlin.run { + val tmp = credential.counter ?: 0 + if (tmp > 0) { + // TODO: When Bitwarden is ready, switch it to be a + // UNIX timestamp. + tmp + } else { + 0 + } + } + val defaultAuthenticatorData = passkeyUtils.authData( + rpId = rpId, + counter = counter, + credentialId = credentialIdBytes, + credentialPublicKey = null, + // True, if we asked a user to enter the password of + // biometrics and he has passed the check. + userVerification = userVerified, + userPresence = true, + ) + + val clientData = opt.clientDataHash + ?.let { hash -> + ClientData( + hash = hash, + ) + } + ?: run { + val jsonObject = buildJsonObject { + put("type", "webauthn.get") + put("challenge", challenge) + put("origin", origin) + put("androidPackageName", packageName) + } + val jsonString = json.encodeToString(jsonObject) + val bytes = jsonString.toByteArray() + val hash = cryptoService.hashSha256(bytes) + ClientData( + bytes = bytes, + hash = hash, + ) + } + + val signature = kotlin.run { + val dataToSign = defaultAuthenticatorData + clientData.hash + val sig = Signature.getInstance("SHA256withECDSA") + sig.initSign(privateKey) + sig.update(dataToSign) + sig.sign() + } + + val r = buildJsonObject { + val clientDataBytes = clientData.bytes + if (clientDataBytes != null) { + put("clientDataJSON", clientDataBytes) + } + + put("authenticatorData", defaultAuthenticatorData) + put("signature", PasskeyBase64.encodeToString(signature)) + put("userHandle", credential.userHandle) + } + val authenticationResponse = buildJsonObject { + put("id", PasskeyBase64.encodeToString(credentialIdBytes)) + put("rawId", credentialIdBytes) + put("type", "public-key") + put("authenticatorAttachment", "cross-platform") + put("response", r) + put("clientExtensionResults", buildJsonObject { }) + } + val authenticationResponseJson = json.encodeToString(authenticationResponse) + val passkeyCredential = PublicKeyCredential(authenticationResponseJson) + return GetCredentialResponse(passkeyCredential) + } + + private fun JsonObjectBuilder.put(key: String, data: ByteArray) { + put(key, PasskeyBase64.encodeToString(data)) + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/android/PasskeyUtils.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/PasskeyUtils.kt new file mode 100644 index 00000000..98268c46 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/PasskeyUtils.kt @@ -0,0 +1,413 @@ +package com.artemchep.keyguard.android + +import android.os.Build +import androidx.annotation.RequiresApi +import androidx.credentials.provider.CallingAppInfo +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.service.crypto.CryptoGenerator +import com.artemchep.keyguard.common.service.gpmprivapps.PrivilegedAppsService +import com.artemchep.keyguard.common.usecase.impl.isSubdomain +import com.artemchep.keyguard.provider.bitwarden.CreatePasskeyAttestation +import io.ktor.client.HttpClient +import io.ktor.client.call.body +import io.ktor.client.request.get +import io.ktor.http.Url +import io.ktor.http.isSuccess +import kotlinx.coroutines.async +import kotlinx.coroutines.coroutineScope +import kotlinx.coroutines.delay +import kotlinx.serialization.json.JsonArray +import kotlinx.serialization.json.JsonElement +import kotlinx.serialization.json.JsonObject +import kotlinx.serialization.json.jsonPrimitive +import org.kodein.di.DirectDI +import org.kodein.di.instance +import java.nio.ByteBuffer +import java.security.cert.CertificateFactory +import java.security.cert.X509Certificate +import java.util.Locale +import kotlin.experimental.or + +class PasskeyUtils( + private val cryptoService: CryptoGenerator, + private val privilegedAppsService: PrivilegedAppsService, + private val httpClient: HttpClient, +) { + companion object { + /** + * The minimum time the 'passkey is doing work' screen should + * be shown. This is needed just to make to user interface less + * junky. + */ + private const val PASSKEY_PROCESSING_MIN_TIME_MS = 800L + + suspend fun withProcessingMinTime( + block: suspend () -> T, + ): T = coroutineScope { + val artificialDelayDeferred = async { + delay(PASSKEY_PROCESSING_MIN_TIME_MS) + } + val result = block() + artificialDelayDeferred.await() + result + } + } + + // We use the same AAGUID as Bitwarden does: + // d548826e-79b4-db40-a3d8-11116f7e8349 + private val bitwardenAaguid = byteArrayOf( + 0xd5.toByte(), + 0x48.toByte(), + 0x82.toByte(), + 0x6e.toByte(), + 0x79.toByte(), + 0xb4.toByte(), + 0xdb.toByte(), + 0x40.toByte(), + 0xa3.toByte(), + 0xd8.toByte(), + 0x11.toByte(), + 0x11.toByte(), + 0x6f.toByte(), + 0x7e.toByte(), + 0x83.toByte(), + 0x49.toByte(), + ) + + data class CallingAppCertificate( + val data: ByteArray, + ) { + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + + other as CallingAppCertificate + + return data.contentEquals(other.data) + } + + override fun hashCode(): Int { + return data.contentHashCode() + } + + /** + * Creates an origin from the app signing certificate. + */ + fun toOrigin( + cryptoService: CryptoGenerator, + ): String { + // FIXME: The documentation also states that the apk-key-hash must be in + // the SHA1 format instead, which is fucking great as in reality it + // should be in SHA256. + val certHash = cryptoService.hashSha256(data) + val certB64 = PasskeyBase64.encodeToString(certHash) + return "android:apk-key-hash:$certB64" + } + } + + sealed interface RpValidation { + data object Valid : RpValidation + data object Invalid : RpValidation + } + + constructor( + directDI: DirectDI, + ) : this( + cryptoService = directDI.instance(), + privilegedAppsService = directDI.instance(), + httpClient = directDI.instance(tag = "curl"), + ) + + @RequiresApi(Build.VERSION_CODES.P) + suspend fun callingAppOrigin( + appInfo: CallingAppInfo, + ): String { + val privilegedAllowList = privilegedAppsService + .get() + .bind() + val origin = appInfo.getOrigin(privilegedAllowList) + ?: kotlin.run { + val cert = callingAppCertificate(appInfo) + cert.toOrigin(cryptoService) + } + return origin + } + + @RequiresApi(Build.VERSION_CODES.P) + private fun callingAppCertificate( + appInfo: CallingAppInfo, + ): CallingAppCertificate { + val signatureBytes = appInfo.signingInfo.apkContentsSigners[0].toByteArray() + + val certFactory = CertificateFactory.getInstance("X509") + val cert = signatureBytes + .inputStream() + .use { + certFactory.generateCertificate(it) as X509Certificate + } + + val certBytes = cert.encoded + return CallingAppCertificate(certBytes) + } + + /** + * Validates that the origin is known to the relaying party and + * we can give a response to this request. + */ + suspend fun requireRpMatchesOrigin( + rpId: String, + origin: String, + packageName: String, + ): Unit = runCatching { + when { + origin.startsWith("https:") -> + requireRpMatchesOriginViaHttps(rpId, origin) + + origin.startsWith("android:") -> + requireRpMatchesOriginViaAndroid(rpId, origin, packageName) + + else -> throw IllegalStateException("Request origin has an unknown scheme.") + } + }.getOrElse { + val detailMessage = it.localizedMessage + ?: it.message + val fullMessage = + "Failed to verify the relation with the Relaying Party. $detailMessage" + throw IllegalStateException(fullMessage) + } + + private suspend fun requireRpMatchesOriginViaHttps( + rpId: String, + origin: String, + ) { + val originUrl = Url(origin) + val valid = isSubdomain( + domain = rpId, + request = originUrl.host, + ) + require(valid) { + "Request origin '${originUrl.host}' is not associated with the relying party!" + } + } + + private suspend fun requireRpMatchesOriginViaAndroid( + rpId: String, + origin: String, + packageName: String, + ) { + // The origin should be in the format: + // android:apk-key-hash:$certB64 + val certB64 = origin.substringAfter("android:apk-key-hash:") + require(certB64 != origin) { + "Request origin has unknown android format." + } + + val certBytes = PasskeyBase64.decode(certB64) + + // Download certificates from the website and compare it with + // the certificate we have locally. + val targets = obtainAllowedAndroidAppTargets(rpId = rpId) + val target = targets[AndroidAppPackageName(packageName)] + requireNotNull(target) { + "App package name is not associated with the " + + "relying party!" + } + + val valid = target.fingerprints.any { + it.contentEquals(certBytes) + } + require(valid) { + "App signature is not associated with the " + + "relying party!" + } + } + + @JvmInline + private value class AndroidAppPackageName( + val packageName: String, + ) + + private class AndroidAppTarget( + val fingerprints: List, + ) + + @OptIn(ExperimentalStdlibApi::class) + private suspend fun obtainAllowedAndroidAppTargets( + rpId: String, + ): Map { + val url = "https://$rpId/.well-known/assetlinks.json" + val response = httpClient.get(url) + require(response.status.isSuccess()) { + "Failed to get asset links from relying party, " + + "error code ${response.status.value}." + } + val result = response + .body() + + // Collect all the android app targets that + // allow a user to login with. + val collector = mutableMapOf>() + val list = result as JsonArray + list.forEach { + // Ignore the errors, continue to the + // next item. I have no idea what the exact + // schema of the 'assetlinks.json' and how + // it changes in the future. + runCatching { + val node = it as JsonObject + val relation = node["relation"] as JsonArray + val target = node["target"] as JsonObject + + // We are only checking allowed android apps, + // so check for the namespace first. + val namespace = target["namespace"]?.jsonPrimitive?.content + if (namespace != "android_app") { + return@forEach + } + // Check if the common.get_login_creds is in the + // relation list. + val loginRelation = relation + .any { el -> + val elContent = runCatching { + el.jsonPrimitive.content + }.getOrNull() + elContent == "delegate_permission/common.get_login_creds" + } + if (!loginRelation) { + return@forEach + } + + val packageName = target["package_name"]?.jsonPrimitive?.content + requireNotNull(packageName) + val fingerprints = kotlin.run { + val arr = target["sha256_cert_fingerprints"] as JsonArray + arr.map { el -> el.jsonPrimitive.content } + } + + // Save the fingerprints. + val out = collector.getOrPut(packageName) { mutableSetOf() } + out.addAll(fingerprints) + } + } + return collector + .entries + .associate { (packageName, fingerprints) -> + val androidAppPackageName = AndroidAppPackageName(packageName) + val androidAppTarget = AndroidAppTarget( + fingerprints = fingerprints + .map { fingerprintHex -> + val rawFingerprintHex = fingerprintHex + .lowercase(Locale.ENGLISH) + .replace(":", "") + rawFingerprintHex.hexToByteArray() + }, + ) + androidAppPackageName to androidAppTarget + } + } + + fun generateCredentialId() = cryptoService.uuid() + + fun authData( + rpId: String, + counter: Int, + credentialId: ByteArray, + credentialPublicKey: ByteArray?, + attestation: CreatePasskeyAttestation? = null, + userVerification: Boolean, + userPresence: Boolean, + ): ByteArray { + val out = mutableListOf() + + // 1. Replay party ID hash. + val rpIdHash = run { + val data = rpId.toByteArray() + cryptoService.hashSha256(data) + } + out += rpIdHash + + // 2. Auth data flags. + out += authDataFlags( + extensionData = false, + attestationData = credentialPublicKey != null, + userVerification = userVerification, + userPresence = userPresence, + ).let { + byteArrayOf(it) + } + + // 3. Counter. We have 4 bytes allocated + // to it. + out += ByteBuffer.allocate(Int.SIZE_BYTES) + .putInt(counter) + .array() + + // 4. Attestation data: + // a) aaguid (16) + // b) credential id length (2) + // c) credential id + // d) credential public key + if (credentialPublicKey != null) { + val aaguid = when (attestation) { + // Convey the authenticator's AAGUID and attestation statement, + // unaltered, to the Relying Party. + CreatePasskeyAttestation.DIRECT, + CreatePasskeyAttestation.ENTERPRISE, + -> bitwardenAaguid + // The client MAY replace the AAGUID and attestation statement with a more + // privacy-friendly and/or more easily verifiable version of the same data + // (for example, by employing an Anonymization CA). + CreatePasskeyAttestation.INDIRECT -> { + val data = bitwardenAaguid + credentialId + val hash = cryptoService.hashMd5(data) + if (hash.size == 16) hash else hash.sliceArray(0..15) + } + // Replace the AAGUID in the attested + // credential data with 16 zero bytes. + null, + CreatePasskeyAttestation.NONE, + -> ByteArray(16) + } + out += aaguid + + val credIdLen = byteArrayOf( + (credentialId.size shr 8).toByte(), + credentialId.size.toByte(), + ) + out += credIdLen + out += credentialId + out += credentialPublicKey + } + + return out.fold( + initial = run { + val size = out.sumOf { it.size } + ByteBuffer.allocate(size) + }, + ) { buffer, array -> + buffer.put(array) + }.array() + } + + private fun authDataFlags( + extensionData: Boolean, + attestationData: Boolean, + userVerification: Boolean, + userPresence: Boolean, + ): Byte { + var flags: Byte = 0 + if (extensionData) { + flags = flags or 0b1000000 + } + if (attestationData) { + flags = flags or 0b01000000 + } + if (userVerification) { + flags = flags or 0b00000100 + } + if (userPresence) { + flags = flags or 0b00000001 + } + return flags + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/android/PendingIntents.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/PendingIntents.kt new file mode 100644 index 00000000..29002710 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/PendingIntents.kt @@ -0,0 +1,11 @@ +package com.artemchep.keyguard.android + +import com.artemchep.keyguard.android.downloader.NotificationIdPool + +object PendingIntents { + val autofill = NotificationIdPool.sequential(0) + val credential = NotificationIdPool.sequential( + start = 100000, + endExclusive = 200000, + ) +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/android/autofill/AutofillStructure.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/autofill/AutofillStructure.kt new file mode 100644 index 00000000..0c1fe84e --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/autofill/AutofillStructure.kt @@ -0,0 +1,22 @@ +package com.artemchep.keyguard.android.autofill + +import android.os.Parcelable +import android.view.autofill.AutofillId +import com.artemchep.keyguard.common.model.AutofillHint +import kotlinx.parcelize.Parcelize + +@Parcelize +data class AutofillStructure2( + val applicationId: String? = null, + val webScheme: String? = null, + val webDomain: String? = null, + val webView: Boolean? = null, + val items: List, +) : Parcelable { + @Parcelize + data class Item( + val id: AutofillId, + val hint: AutofillHint, + val value: String? = null, + ) : Parcelable +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/android/autofill/AutofillStructureParser.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/autofill/AutofillStructureParser.kt new file mode 100644 index 00000000..fd521c13 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/autofill/AutofillStructureParser.kt @@ -0,0 +1,971 @@ +package com.artemchep.keyguard.android.autofill + +import android.app.assist.AssistStructure +import android.os.Build +import android.text.InputType +import android.util.Log +import android.view.View +import android.view.autofill.AutofillId +import androidx.autofill.HintConstants +import com.artemchep.keyguard.android.autofill.AutofillStructureParser.AutofillStructure +import com.artemchep.keyguard.common.model.AutofillHint +import java.util.Locale + +/** + * Parse AssistStructure into more usable + * [AutofillStructure]. + */ +class AutofillStructureParser { + data class AutofillStructure( + val applicationId: String? = null, + val webScheme: String? = null, + val webDomain: String? = null, + val webView: Boolean = false, + val items: List, + ) + + data class AutofillStructureItem( + val accuracy: Accuracy, + val id: AutofillId, + val hint: AutofillHint, + val value: String? = null, + val reason: String? = null, + ) { + enum class Accuracy( + val value: Float, + ) { + LOWEST(0.3f), + LOW(0.7f), + MEDIUM(1.5f), + HIGH(4f), + HIGHEST(10f), + } + } + + data class AutofillStructureItemBuilder( + val accuracy: AutofillStructureItem.Accuracy, + val hint: AutofillHint, + val value: String? = null, + val reason: String? = null, + ) + + class AutofillHintMatcher( + val hint: AutofillHint, + val target: String, + val partly: Boolean = false, + ) { + val accuracy = + if (partly) AutofillStructureItem.Accuracy.MEDIUM else AutofillStructureItem.Accuracy.HIGH + + fun matches(value: String) = if (partly) { + value.contains(target, ignoreCase = true) + } else { + value.equals(target, ignoreCase = true) + } + } + + private val autofillLabelPasswordTranslations = listOf( + "password", + "парол", + "parol", + "passwort", + "passe", + // https://github.com/AChep/keyguard-app/issues/15#issuecomment-1740598689 + "密码", + "密碼", + ) + + private val autofillLabelEmailTranslations = listOf( + "email", + "e-mail", + "почта", + "пошта", + "мейл", + "мэйл", + "майл", + // https://github.com/AChep/keyguard-app/issues/15#issuecomment-1740598689 + "电子邮箱", + "電子郵箱", + ) + + private val autofillLabelUsernameTranslations = listOf( + "nickname", + "username", + "utilisateur", + "login", + "логин", + "логін", + "користувач", + "пользовател", + // https://github.com/AChep/keyguard-app/issues/15#issuecomment-1740598689 + "用户名", + "用戶名", + ) + + private val autofillLabelCreditCardNumberTranslations = listOf( + ".*(credit|debit|card)+.*number.*".toRegex(), + ) + + private val autofillHintMatchers = listOf( + AutofillHintMatcher( + hint = AutofillHint.EMAIL_ADDRESS, + target = HintConstants.AUTOFILL_HINT_EMAIL_ADDRESS, + ), + AutofillHintMatcher( + hint = AutofillHint.EMAIL_ADDRESS, + target = "email", + partly = true, + ), + AutofillHintMatcher( + hint = AutofillHint.USERNAME, + target = HintConstants.AUTOFILL_HINT_USERNAME, + ), + AutofillHintMatcher( + hint = AutofillHint.USERNAME, + target = "nickname", + ), + AutofillHintMatcher( + hint = AutofillHint.PASSWORD, + target = HintConstants.AUTOFILL_HINT_PASSWORD, + ), + AutofillHintMatcher( + hint = AutofillHint.PASSWORD, + target = "password", + partly = true, + ), + AutofillHintMatcher( + hint = AutofillHint.WIFI_PASSWORD, + target = HintConstants.AUTOFILL_HINT_WIFI_PASSWORD, + ), + AutofillHintMatcher( + hint = AutofillHint.POSTAL_ADDRESS, + target = HintConstants.AUTOFILL_HINT_POSTAL_ADDRESS, + ), + AutofillHintMatcher( + hint = AutofillHint.POSTAL_CODE, + target = HintConstants.AUTOFILL_HINT_POSTAL_CODE, + ), + AutofillHintMatcher( + hint = AutofillHint.CREDIT_CARD_NUMBER, + target = HintConstants.AUTOFILL_HINT_CREDIT_CARD_NUMBER, + ), + AutofillHintMatcher( + hint = AutofillHint.CREDIT_CARD_NUMBER, + target = "cc-number", + ), + AutofillHintMatcher( + hint = AutofillHint.CREDIT_CARD_NUMBER, + target = "credit_card_number", + ), + AutofillHintMatcher( + hint = AutofillHint.CREDIT_CARD_SECURITY_CODE, + target = HintConstants.AUTOFILL_HINT_CREDIT_CARD_SECURITY_CODE, + ), + AutofillHintMatcher( + hint = AutofillHint.CREDIT_CARD_SECURITY_CODE, + target = "cc-csc", + ), + AutofillHintMatcher( + hint = AutofillHint.CREDIT_CARD_NUMBER, + target = "credit_card_csv", + ), + AutofillHintMatcher( + hint = AutofillHint.CREDIT_CARD_EXPIRATION_DATE, + target = HintConstants.AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_DATE, + ), + AutofillHintMatcher( + hint = AutofillHint.CREDIT_CARD_EXPIRATION_DATE, + target = "cc-exp", + ), + AutofillHintMatcher( + hint = AutofillHint.CREDIT_CARD_EXPIRATION_MONTH, + target = HintConstants.AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_MONTH, + ), + AutofillHintMatcher( + hint = AutofillHint.CREDIT_CARD_EXPIRATION_MONTH, + target = "cc-exp-month", + ), + AutofillHintMatcher( + hint = AutofillHint.CREDIT_CARD_EXPIRATION_YEAR, + target = HintConstants.AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_YEAR, + ), + AutofillHintMatcher( + hint = AutofillHint.CREDIT_CARD_EXPIRATION_YEAR, + target = "cc-exp-year", + ), + AutofillHintMatcher( + hint = AutofillHint.CREDIT_CARD_EXPIRATION_DAY, + target = HintConstants.AUTOFILL_HINT_CREDIT_CARD_EXPIRATION_DAY, + ), + AutofillHintMatcher( + hint = AutofillHint.POSTAL_ADDRESS_COUNTRY, + target = HintConstants.AUTOFILL_HINT_POSTAL_ADDRESS_COUNTRY, + ), + AutofillHintMatcher( + hint = AutofillHint.POSTAL_ADDRESS_REGION, + target = HintConstants.AUTOFILL_HINT_POSTAL_ADDRESS_REGION, + ), + AutofillHintMatcher( + hint = AutofillHint.POSTAL_ADDRESS_LOCALITY, + target = HintConstants.AUTOFILL_HINT_POSTAL_ADDRESS_LOCALITY, + ), + AutofillHintMatcher( + hint = AutofillHint.POSTAL_ADDRESS_STREET_ADDRESS, + target = HintConstants.AUTOFILL_HINT_POSTAL_ADDRESS_STREET_ADDRESS, + ), + AutofillHintMatcher( + hint = AutofillHint.POSTAL_ADDRESS_EXTENDED_ADDRESS, + target = HintConstants.AUTOFILL_HINT_POSTAL_ADDRESS_EXTENDED_ADDRESS, + ), + AutofillHintMatcher( + hint = AutofillHint.POSTAL_ADDRESS_EXTENDED_POSTAL_CODE, + target = HintConstants.AUTOFILL_HINT_POSTAL_ADDRESS_EXTENDED_POSTAL_CODE, + ), + AutofillHintMatcher( + hint = AutofillHint.POSTAL_ADDRESS_APT_NUMBER, + target = HintConstants.AUTOFILL_HINT_POSTAL_ADDRESS_APT_NUMBER, + ), + AutofillHintMatcher( + hint = AutofillHint.POSTAL_ADDRESS_DEPENDENT_LOCALITY, + target = HintConstants.AUTOFILL_HINT_POSTAL_ADDRESS_DEPENDENT_LOCALITY, + ), + AutofillHintMatcher( + hint = AutofillHint.PERSON_NAME, + target = HintConstants.AUTOFILL_HINT_PERSON_NAME, + ), + AutofillHintMatcher( + hint = AutofillHint.PERSON_NAME_GIVEN, + target = HintConstants.AUTOFILL_HINT_PERSON_NAME_GIVEN, + ), + AutofillHintMatcher( + hint = AutofillHint.PERSON_NAME_FAMILY, + target = HintConstants.AUTOFILL_HINT_PERSON_NAME_FAMILY, + ), + AutofillHintMatcher( + hint = AutofillHint.PERSON_NAME_MIDDLE, + target = HintConstants.AUTOFILL_HINT_PERSON_NAME_MIDDLE, + ), + AutofillHintMatcher( + hint = AutofillHint.PERSON_NAME_MIDDLE_INITIAL, + target = HintConstants.AUTOFILL_HINT_PERSON_NAME_MIDDLE_INITIAL, + ), + AutofillHintMatcher( + hint = AutofillHint.PERSON_NAME_PREFIX, + target = HintConstants.AUTOFILL_HINT_PERSON_NAME_PREFIX, + ), + AutofillHintMatcher( + hint = AutofillHint.PERSON_NAME_SUFFIX, + target = HintConstants.AUTOFILL_HINT_PERSON_NAME_SUFFIX, + ), + AutofillHintMatcher( + hint = AutofillHint.PHONE_NUMBER, + target = HintConstants.AUTOFILL_HINT_PHONE_NUMBER, + ), + AutofillHintMatcher( + hint = AutofillHint.PHONE_NUMBER_DEVICE, + target = HintConstants.AUTOFILL_HINT_PHONE_NUMBER_DEVICE, + ), + AutofillHintMatcher( + hint = AutofillHint.PHONE_COUNTRY_CODE, + target = HintConstants.AUTOFILL_HINT_PHONE_COUNTRY_CODE, + ), + AutofillHintMatcher( + hint = AutofillHint.PHONE_NATIONAL, + target = HintConstants.AUTOFILL_HINT_PHONE_NATIONAL, + ), + AutofillHintMatcher( + hint = AutofillHint.PHONE_NUMBER, + target = "phone", + ), + AutofillHintMatcher( + hint = AutofillHint.NEW_USERNAME, + target = HintConstants.AUTOFILL_HINT_NEW_USERNAME, + ), + AutofillHintMatcher( + hint = AutofillHint.NEW_USERNAME, + target = "new-username", + ), + AutofillHintMatcher( + hint = AutofillHint.NEW_PASSWORD, + target = HintConstants.AUTOFILL_HINT_NEW_PASSWORD, + ), + AutofillHintMatcher( + hint = AutofillHint.NEW_PASSWORD, + target = "new-password", + ), + AutofillHintMatcher( + hint = AutofillHint.GENDER, + target = HintConstants.AUTOFILL_HINT_GENDER, + ), + AutofillHintMatcher( + hint = AutofillHint.BIRTH_DATE_FULL, + target = HintConstants.AUTOFILL_HINT_BIRTH_DATE_FULL, + ), + AutofillHintMatcher( + hint = AutofillHint.BIRTH_DATE_DAY, + target = HintConstants.AUTOFILL_HINT_BIRTH_DATE_DAY, + ), + AutofillHintMatcher( + hint = AutofillHint.BIRTH_DATE_MONTH, + target = HintConstants.AUTOFILL_HINT_BIRTH_DATE_MONTH, + ), + AutofillHintMatcher( + hint = AutofillHint.BIRTH_DATE_YEAR, + target = HintConstants.AUTOFILL_HINT_BIRTH_DATE_YEAR, + ), + AutofillHintMatcher( + hint = AutofillHint.SMS_OTP, + target = HintConstants.AUTOFILL_HINT_SMS_OTP, + ), + AutofillHintMatcher( + hint = AutofillHint.EMAIL_OTP, + target = HintConstants.AUTOFILL_HINT_EMAIL_OTP, + ), + AutofillHintMatcher( + hint = AutofillHint.APP_OTP, + target = HintConstants.AUTOFILL_HINT_2FA_APP_OTP, + ), + AutofillHintMatcher( + hint = AutofillHint.APP_OTP, + target = "one-time-code", + ), + AutofillHintMatcher( + hint = AutofillHint.NOT_APPLICABLE, + target = HintConstants.AUTOFILL_HINT_NOT_APPLICABLE, + ), + AutofillHintMatcher( + hint = AutofillHint.PROMO_CODE, + target = HintConstants.AUTOFILL_HINT_PROMO_CODE, + ), + AutofillHintMatcher( + hint = AutofillHint.UPI_VPA, + target = HintConstants.AUTOFILL_HINT_UPI_VPA, + ), + // off + AutofillHintMatcher( + hint = AutofillHint.OFF, + target = "chrome-off", + ), + AutofillHintMatcher( + hint = AutofillHint.OFF, + target = "off", + ), + AutofillHintMatcher( + hint = AutofillHint.OFF, + target = "no", + ), + AutofillHintMatcher( + hint = AutofillHint.OFF, + target = "nope", + ), + ) + + fun parse( + assistStructure: AssistStructure, + respectAutofillOff: Boolean, + ): AutofillStructure2 { + var applicationId: String? = null + var autofillStructure: AutofillStructure? = null + + for (i in 0 until assistStructure.windowNodeCount) { + val windowNode = assistStructure.getWindowNodeAt(i) + val appIdCandidate = windowNode.title.toString().split("/").first() + if (appIdCandidate.contains(":")) { + continue + } + + applicationId = appIdCandidate + // Parse view node + val nodeAutofillStructure = parseViewNode(windowNode.rootViewNode) + val nodeAutofillStructureHasItems = nodeAutofillStructure.items + .any { it.hint != AutofillHint.OFF } + if (nodeAutofillStructureHasItems) { + autofillStructure = nodeAutofillStructure + break + } + } + + class TempItem( + val score: Float, + val hint: AutofillHint, + val value: String?, + ) + + val items = mutableListOf() + autofillStructure?.items.orEmpty() + .let { list -> + // We are solving the problem that the app actually detect message fields in + // Slack/Signal/other apps as username fields. If the accuracy is low and we + // do not have a password, then this is most likely a mistake. + val onlyLowAccuracy = list.all { + it.accuracy <= AutofillStructureItem.Accuracy.LOW || + it.hint == AutofillHint.OFF + } + if (onlyLowAccuracy) { + val hasUsernameAndPassword = + list.any { + val username = it.hint == AutofillHint.USERNAME || + it.hint == AutofillHint.EMAIL_ADDRESS || + it.hint == AutofillHint.PHONE_NUMBER + username && it.accuracy > AutofillStructureItem.Accuracy.LOWEST + } && list.any { + val password = it.hint == AutofillHint.PASSWORD + password && it.accuracy > AutofillStructureItem.Accuracy.LOWEST + } + if (!hasUsernameAndPassword) { + return@let emptyList() + } + } + list + } + .groupBy { it.id } + .forEach { + // If the autofill-off flag is marked with a highest + // accuracy then we always respect it. + val forceAutofillOff = it.value.any { + it.hint == AutofillHint.OFF && + it.accuracy == AutofillStructureItem.Accuracy.HIGHEST + } + var structureItems = if (forceAutofillOff) { + return@forEach + } else if (respectAutofillOff) { + // Ignore the field if it has explicitly disabled + // autofill support. + if (it.value.any { it.hint == AutofillHint.OFF }) { + return@forEach + } + it.value + } else { + it.value + .filter { it.hint != AutofillHint.OFF } + } + + // Password type is often used on the fields that have other + // types too, for the reason that a password field masks the input. + // In that case, wipe out the password hints: + val derivesOfPassword = structureItems + .any { + it.hint == AutofillHint.CREDIT_CARD_SECURITY_CODE || + it.hint == AutofillHint.SMS_OTP || + it.hint == AutofillHint.EMAIL_OTP || + it.hint == AutofillHint.APP_OTP + } + if (derivesOfPassword) { + structureItems = structureItems + .filter { it.hint != AutofillHint.PASSWORD } + } + val derivesOfUsername = structureItems + .any { + it.hint == AutofillHint.CREDIT_CARD_NUMBER || + it.hint == AutofillHint.CREDIT_CARD_EXPIRATION_DATE || + it.hint == AutofillHint.CREDIT_CARD_EXPIRATION_MONTH || + it.hint == AutofillHint.CREDIT_CARD_EXPIRATION_YEAR || + it.hint == AutofillHint.CREDIT_CARD_EXPIRATION_DAY + } + if (derivesOfUsername) { + structureItems = structureItems + .filter { it.hint != AutofillHint.USERNAME } + } + + val selectedItem = structureItems + .groupBy { it.hint } + .map { + val score = it.value.fold(0f) { y, x -> y + x.accuracy.value } + val value = it.value + .sortedByDescending { it.accuracy.value } + .asSequence() + .mapNotNull { it.value } + .firstOrNull() + TempItem( + score = score, + value = value, + hint = it.key, + ) + } + .maxByOrNull { it.score } + ?: return@forEach + if (selectedItem.score <= AutofillStructureItem.Accuracy.LOWEST.value + 0.1f) { + // If there's an item with the same hint but higher score, then + // skip this node. + val shouldSkip = autofillStructure?.items.orEmpty().any { + it.hint == selectedItem.hint && + it.accuracy > AutofillStructureItem.Accuracy.LOWEST + } + if (shouldSkip) { + // For now, do not do a skip, it seems to work + // just fine. + return@forEach + } + } + + val item = AutofillStructure2.Item( + id = it.key, + hint = selectedItem.hint, + value = selectedItem.value, + ) + items += item + } + return AutofillStructure2( + applicationId = applicationId, + webDomain = autofillStructure?.webDomain, + webScheme = autofillStructure?.webScheme, + webView = autofillStructure?.webView, + items = items, + ) + } + + private fun parseViewNode( + node: AssistStructure.ViewNode, + ): AutofillStructure { + var webView = node.className == "android.webkit.WebView" + var webDomain: String? = node.webDomain?.takeIf { it.isNotEmpty() } + var webScheme: String? = + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { + node.webScheme?.takeIf { it.isNotEmpty() } + } else { + null + } + + val out = mutableListOf() + // Only parse visible nodes + if (node.visibility == View.VISIBLE) { + if (node.autofillId != null) { + val outBuilders = mutableListOf() + // Parse methods + val hints = node.autofillHints + if (hints != null && hints.isNotEmpty()) { + val hintOut = parseNodeByAutofillHint(node) + outBuilders += hintOut + } + + val htmlOut = parseNodeByHtmlAttributes(node) + outBuilders += htmlOut + + val inputOut = parseNodeByAndroidInput(node) + val hintOut = parseNodeByLabel(node) + outBuilders += inputOut + hintOut + + out += outBuilders.map { + AutofillStructureItem( + id = node.autofillId!!, + accuracy = it.accuracy, + hint = it.hint, + value = it.value + ?: node.autofillValue?.takeIf { it.isText }?.textValue?.toString(), + reason = it.reason, + ) + } + } + // Recursive method to process each node + for (i in 0 until node.childCount) { + val childStructure = parseViewNode(node.getChildAt(i)) + if (childStructure.webView) { + webView = childStructure.webView + } + + webDomain = webDomain ?: childStructure.webDomain + webScheme = webScheme ?: childStructure.webScheme + + out += childStructure.items + } + } + return AutofillStructure( + webScheme = webScheme, + webDomain = webDomain, + webView = webView, + items = out, + ) + } + + private fun parseNodeByAutofillHint( + node: AssistStructure.ViewNode, + ): List = kotlin.run { + val out = mutableListOf() + node.autofillHints?.forEach { value -> + val matchers = autofillHintMatchers + .filter { matcher -> matcher.matches(value) } + matchers.forEach { matcher -> + val item = AutofillStructureItemBuilder( + accuracy = matcher.accuracy, + hint = matcher.hint, + reason = "autofill-hint", + ) + out += item + } + } + out + } + + private fun parseNodeByHtmlAttributes( + node: AssistStructure.ViewNode, + ): List = kotlin.run { + val out = mutableListOf() + val nodHtml = node.htmlInfo + when (nodHtml?.tag?.lowercase(Locale.ENGLISH)) { + "input" -> { + val attributes = kotlin.run { + nodHtml.attributes + ?.map { it.first to it.second } + ?.takeUnless { it.isEmpty() } + // For some reason some browsers do not provide the + // list of attributes, although I see that there's + // mValues and mNames in there that do contain them! + ?: kotlin.runCatching { + val values = nodHtml.javaClass.getDeclaredField("mValues") + .apply { isAccessible = true } + .get(nodHtml) + val names = nodHtml.javaClass.getDeclaredField("mNames") + .apply { isAccessible = true } + .get(nodHtml) + if (values is Array<*> && names is Array<*>) { + values + .mapIndexed { i, v -> v.toString() to names[i].toString() } + } else if (values is Collection<*> && names is Collection<*>) { + val namesList = names.toList() + values + .mapIndexed { i, v -> v.toString() to namesList[i].toString() } + } else { + null + } + }.getOrNull() + } + attributes?.forEach { pairAttribute -> + when (val key = pairAttribute.first.lowercase(Locale.ENGLISH)) { + "autocomplete", + "ua-autofill-hints", + -> { + // https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete + val value = pairAttribute.second + ?.lowercase(Locale.ENGLISH) + .orEmpty() + val matchers = autofillHintMatchers + .filter { matcher -> matcher.matches(value) } + matchers.forEach { matcher -> + val item = AutofillStructureItemBuilder( + accuracy = matcher.accuracy, + hint = matcher.hint, + reason = key, + ) + out += item + } + } + + "type" -> { + val type = pairAttribute.second.orEmpty() + extractOfType(type).let(out::addAll) + } + + // Sometimes we can extract useful info from + // the name of the input. Although it is kinda random because + // it's only used in the site's JavaScript. + "name" -> { + val type = pairAttribute.second.orEmpty() + extractOfId(type).let(out::addAll) + } + + "id" -> { + val type = pairAttribute.second.orEmpty() + extractOfId(type).let(out::addAll) + } + + "label" -> { + val label = pairAttribute.second.orEmpty() + extractOfLabel(label).let(out::addAll) + } + } + } + } + } + out + } + + private fun parseNodeByLabel( + node: AssistStructure.ViewNode, + ): List { + val hint = node.hint + ?: return emptyList() + return extractOfLabel(hint) + } + + private fun extractOfType( + value: String, + ): List = when (value.lowercase(Locale.ENGLISH)) { + "tel" -> AutofillStructureItemBuilder( + accuracy = AutofillStructureItem.Accuracy.MEDIUM, + hint = AutofillHint.PHONE_NUMBER, + reason = "type", + ) + + "email" -> AutofillStructureItemBuilder( + accuracy = AutofillStructureItem.Accuracy.MEDIUM, + hint = AutofillHint.EMAIL_ADDRESS, + reason = "type", + ) + + "username" -> AutofillStructureItemBuilder( + accuracy = AutofillStructureItem.Accuracy.MEDIUM, + hint = AutofillHint.USERNAME, + reason = "type", + ) + + "text" -> AutofillStructureItemBuilder( + accuracy = AutofillStructureItem.Accuracy.LOWEST, + hint = AutofillHint.USERNAME, + reason = "type", + ) + + "password" -> AutofillStructureItemBuilder( + accuracy = AutofillStructureItem.Accuracy.HIGH, + hint = AutofillHint.PASSWORD, + reason = "type", + ) + + // custom + + "expdate" -> AutofillStructureItemBuilder( + accuracy = AutofillStructureItem.Accuracy.HIGH, + hint = AutofillHint.CREDIT_CARD_EXPIRATION_DATE, + reason = "type", + ) + + else -> null + }.let { listOfNotNull(it) } + + private fun extractOfId( + value: String, + ): List = kotlin.run { + val id = value.lowercase(Locale.ENGLISH) + when { + "email" in id -> AutofillStructureItemBuilder( + accuracy = AutofillStructureItem.Accuracy.MEDIUM, + hint = AutofillHint.EMAIL_ADDRESS, + reason = "id", + ) + + "username" in id -> AutofillStructureItemBuilder( + accuracy = AutofillStructureItem.Accuracy.MEDIUM, + hint = AutofillHint.USERNAME, + reason = "id", + ) + + "password" in id -> AutofillStructureItemBuilder( + accuracy = AutofillStructureItem.Accuracy.HIGH, + hint = AutofillHint.PASSWORD, + reason = "type", + ) + + else -> null + }.let { listOfNotNull(it) } + } + + private fun extractOfLabel( + value: String, + ): List { + val hint = value + .lowercase(Locale.ENGLISH) + .trim() + if (hint.isBlank()) { + return emptyList() + } + val out = when { + autofillLabelEmailTranslations.any { it in hint } -> + AutofillStructureItemBuilder( + accuracy = AutofillStructureItem.Accuracy.MEDIUM, + hint = AutofillHint.EMAIL_ADDRESS, + reason = "label:$hint", + ) + + autofillLabelUsernameTranslations.any { it in hint } -> + AutofillStructureItemBuilder( + accuracy = AutofillStructureItem.Accuracy.MEDIUM, + hint = AutofillHint.USERNAME, + reason = "label:$hint", + ) + + autofillLabelPasswordTranslations.any { it in hint } -> + AutofillStructureItemBuilder( + accuracy = AutofillStructureItem.Accuracy.MEDIUM, + hint = AutofillHint.PASSWORD, + reason = "label:$hint", + ) + + autofillLabelCreditCardNumberTranslations.any { it.matches(hint) } -> + AutofillStructureItemBuilder( + accuracy = AutofillStructureItem.Accuracy.MEDIUM, + hint = AutofillHint.CREDIT_CARD_NUMBER, + reason = "label:$hint", + ) + + else -> null + } + return listOfNotNull(out) + } + + private fun parseNodeByAndroidInput( + node: AssistStructure.ViewNode, + ): List { + val out = mutableListOf() + + // For some reason the URL bar is not marked as not important for + // autofill. To prevent it we explicitly check for the 'url' in the + // node's entry id. + // + // See: + // https://github.com/AChep/keyguard-app/issues/31 + if ( + node.idEntry.orEmpty().contains("url", ignoreCase = true) && + node.idType.orEmpty().equals("id", ignoreCase = true) + ) { + out += AutofillStructureItemBuilder( + accuracy = AutofillStructureItem.Accuracy.HIGHEST, + hint = AutofillHint.OFF, + ) + return out + } + + val importance = if (Build.VERSION.SDK_INT >= 28) { + node.importantForAutofill + } else { + View.IMPORTANT_FOR_AUTOFILL_AUTO + } + if (importance == View.IMPORTANT_FOR_AUTOFILL_NO) { + out += AutofillStructureItemBuilder( + accuracy = AutofillStructureItem.Accuracy.HIGHEST, + hint = AutofillHint.OFF, + ) + return out + } + + val inputType = node.inputType + when (inputType and InputType.TYPE_MASK_CLASS) { + InputType.TYPE_CLASS_TEXT -> { + when { + inputIsVariationType( + inputType, + InputType.TYPE_TEXT_VARIATION_EMAIL_ADDRESS, + InputType.TYPE_TEXT_VARIATION_WEB_EMAIL_ADDRESS, + ) -> { + out += AutofillStructureItemBuilder( + accuracy = AutofillStructureItem.Accuracy.HIGH, + hint = AutofillHint.EMAIL_ADDRESS, + ) + } + + inputIsVariationType( + inputType, + InputType.TYPE_TEXT_VARIATION_PERSON_NAME, + ) -> { + out += AutofillStructureItemBuilder( + accuracy = AutofillStructureItem.Accuracy.LOW, + hint = AutofillHint.PERSON_NAME, + ) + } + + inputIsVariationType( + inputType, + InputType.TYPE_TEXT_VARIATION_NORMAL, + InputType.TYPE_TEXT_VARIATION_PERSON_NAME, + InputType.TYPE_TEXT_VARIATION_WEB_EDIT_TEXT, + ) -> { + out += AutofillStructureItemBuilder( + accuracy = AutofillStructureItem.Accuracy.LOWEST, + hint = AutofillHint.USERNAME, + ) + } + + inputIsVariationType( + inputType, + InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD, + ) -> { + // Some forms use visible password as username, which is + // unfortunate. + val hasUsername = out.any { + it.hint == AutofillHint.USERNAME || + it.hint == AutofillHint.EMAIL_ADDRESS || + it.hint == AutofillHint.PHONE_NUMBER + } + if (hasUsername) { + out += AutofillStructureItemBuilder( + accuracy = AutofillStructureItem.Accuracy.LOWEST, + hint = AutofillHint.PASSWORD, + ) + } else { + out += AutofillStructureItemBuilder( + accuracy = AutofillStructureItem.Accuracy.LOWEST, + hint = AutofillHint.USERNAME, + ) + } + } + + inputIsVariationType( + inputType, + InputType.TYPE_TEXT_VARIATION_PASSWORD, + InputType.TYPE_TEXT_VARIATION_WEB_PASSWORD, + ) -> { + out += AutofillStructureItemBuilder( + accuracy = AutofillStructureItem.Accuracy.HIGH, + hint = AutofillHint.PASSWORD, + ) + } + + inputIsVariationType( + inputType, + InputType.TYPE_TEXT_VARIATION_EMAIL_SUBJECT, + InputType.TYPE_TEXT_VARIATION_FILTER, + InputType.TYPE_TEXT_VARIATION_LONG_MESSAGE, + InputType.TYPE_TEXT_VARIATION_PHONETIC, + InputType.TYPE_TEXT_VARIATION_POSTAL_ADDRESS, + InputType.TYPE_TEXT_VARIATION_SHORT_MESSAGE, + InputType.TYPE_TEXT_VARIATION_URI, + ) -> { + // Type not used + } + + else -> { + } + } + } + + InputType.TYPE_CLASS_NUMBER -> { + when { + inputIsVariationType( + inputType, + InputType.TYPE_NUMBER_VARIATION_NORMAL, + ) -> { + out += AutofillStructureItemBuilder( + accuracy = if (importance == View.IMPORTANT_FOR_AUTOFILL_YES) { + AutofillStructureItem.Accuracy.MEDIUM + } else { + AutofillStructureItem.Accuracy.LOW + }, + hint = AutofillHint.USERNAME, + ) + } + + inputIsVariationType( + inputType, + InputType.TYPE_NUMBER_VARIATION_PASSWORD, + ) -> { + out += AutofillStructureItemBuilder( + accuracy = AutofillStructureItem.Accuracy.LOW, + hint = AutofillHint.PASSWORD, + ) + } + + else -> { + } + } + } + } + return out + } + + private fun inputIsVariationType(inputType: Int, vararg type: Int): Boolean { + type.forEach { + if (inputType and InputType.TYPE_MASK_VARIATION == it) { + return true + } + } + return false + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/android/autofill/AutofillViews.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/autofill/AutofillViews.kt new file mode 100644 index 00000000..8d835822 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/autofill/AutofillViews.kt @@ -0,0 +1,79 @@ +package com.artemchep.keyguard.android.autofill + +import android.content.Context +import android.view.View +import android.widget.RemoteViews +import com.artemchep.keyguard.common.R + +object AutofillViews { + fun buildPopupEntry( + context: Context, + title: String, + text: String? = null, + ) = RemoteViews(context.packageName, R.layout.item_autofill_entry).apply { + setTextViewText(R.id.autofill_entry_name, title) + if (text.isNullOrEmpty()) { + setViewVisibility(R.id.autofill_entry_username, View.GONE) + } else { + setTextViewText(R.id.autofill_entry_username, text) + } + } + + fun buildPopupEntryManual( + context: Context, + ) = RemoteViews(context.packageName, R.layout.item_autofill_select_entry) + + fun buildPopupKeyguardUnlock( + context: Context, + webDomain: String? = null, + appId: String? = null, + ) = kotlin.run { + if (!webDomain.isNullOrEmpty()) { + RemoteViews( + context.packageName, + R.layout.item_autofill_unlock_web_domain, + ).apply { + setTextViewText( + R.id.autofill_web_domain_text, + webDomain, + ) + } + } else if (!appId.isNullOrEmpty()) { + RemoteViews(context.packageName, R.layout.item_autofill_unlock_app_id).apply { + setTextViewText( + R.id.autofill_app_id_text, + appId, + ) + } + } else { + RemoteViews(context.packageName, R.layout.item_autofill_unlock) + } + } + + fun buildPopupKeyguardOpen( + context: Context, + webDomain: String? = null, + appId: String? = null, + ) = kotlin.run { + if (!webDomain.isNullOrEmpty()) { + RemoteViews( + context.packageName, + R.layout.item_autofill_select_entry_web_domain, + ).apply { + setTextViewText( + R.id.autofill_web_domain_text, + webDomain, + ) + } + } else if (!appId.isNullOrEmpty()) { + RemoteViews(context.packageName, R.layout.item_autofill_select_entry_app_id).apply { + setTextViewText( + R.id.autofill_app_id_text, + appId, + ) + } + } else { + RemoteViews(context.packageName, R.layout.item_autofill_select_entry) + } + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/android/autofill/KeyguardAutofillService.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/autofill/KeyguardAutofillService.kt new file mode 100644 index 00000000..dca4109e --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/autofill/KeyguardAutofillService.kt @@ -0,0 +1,749 @@ +package com.artemchep.keyguard.android.autofill + +import android.annotation.SuppressLint +import android.app.PendingIntent +import android.content.Context +import android.content.Intent +import android.content.IntentSender +import android.graphics.BlendMode +import android.graphics.drawable.Icon +import android.os.Build +import android.os.CancellationSignal +import android.service.autofill.* +import android.util.Log +import android.view.autofill.AutofillId +import android.view.autofill.AutofillValue +import android.widget.RemoteViews +import androidx.annotation.RequiresApi +import androidx.autofill.inline.UiVersions +import androidx.autofill.inline.v1.InlineSuggestionUi +import androidx.autofill.inline.v1.InlineSuggestionUi.Content +import arrow.core.* +import arrow.optics.Getter +import com.artemchep.keyguard.android.AutofillActivity +import com.artemchep.keyguard.android.AutofillFakeAuthActivity +import com.artemchep.keyguard.android.AutofillSaveActivity +import com.artemchep.keyguard.android.MainActivity +import com.artemchep.keyguard.common.R +import com.artemchep.keyguard.common.io.* +import com.artemchep.keyguard.common.model.* +import com.artemchep.keyguard.common.usecase.* +import com.artemchep.keyguard.feature.home.vault.component.FormatCardGroupLength +import io.ktor.http.* +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.Job +import kotlinx.coroutines.flow.* +import kotlinx.coroutines.runBlocking +import org.kodein.di.DIAware +import org.kodein.di.android.closestDI +import org.kodein.di.direct +import org.kodein.di.instance +import kotlin.coroutines.CoroutineContext + +class KeyguardAutofillService : AutofillService(), DIAware { + companion object { + private const val TAG = "AFService" + + const val KEEP_CIPHERS_IN_MEMORY_FOR = 10_000L + } + + private val job = Job() + + private val scope = object : CoroutineScope { + override val coroutineContext: CoroutineContext + get() = Dispatchers.Main + job + } + + override val di by closestDI { this } + + private val ciphersFlow by lazy { + val model: GetVaultSession by di.instance() + model() + .distinctUntilChanged() + .flatMapLatest { session -> + when (session) { + is MasterSession.Key -> { + val getCiphers = session.di.direct.instance() + getCiphers() + .map { ciphers -> + ciphers + .filter { it.deletedDate == null } + .right() + } + } + + is MasterSession.Empty -> { + val m = Unit.left() + flowOf(m) + } + } + } + .flowOn(Dispatchers.Default) + .shareIn(scope, SharingStarted.WhileSubscribed(KEEP_CIPHERS_IN_MEMORY_FOR), replay = 1) + } + + private val getTotpCode: GetTotpCode by lazy { + di.direct.instance() + } + + private val getSuggestions by lazy { + val model: GetSuggestions by di.instance() + model + } + + private val prefInlineSuggestionsFlow by lazy { + val model: GetAutofillInlineSuggestions by di.instance() + model() + } + + private val prefManualSelectionFlow by lazy { + val model: GetAutofillManualSelection by di.instance() + model() + } + + private val prefRespectAutofillOffFlow by lazy { + val model: GetAutofillRespectAutofillOff by di.instance() + model() + } + + private val prefSaveRequestFlow by lazy { + val model: GetAutofillSaveRequest by di.instance() + model() + } + + private val prefSaveUriFlow by lazy { + val model: GetAutofillSaveUri by di.instance() + model() + } + + private val autofillStructureParser = AutofillStructureParser() + + @SuppressLint("NewApi") + override fun onFillRequest( + request: FillRequest, + cancellationSignal: CancellationSignal, + callback: FillCallback, + ) { + val autofillStructure = kotlin.runCatching { + val structureLatest = request.fillContexts + .map { it.structure } + .lastOrNull() + // If the structure is missing, then abort auto-filling + // process. + ?: throw IllegalStateException("No structures to fill.") + + val respectAutofillOff = prefRespectAutofillOffFlow.toIO().bindBlocking() + autofillStructureParser.parse( + structureLatest, + respectAutofillOff, + ) + } +// .flatMap { +// val targetApplicationId = it.applicationId +// val keyguardApplicationId = packageName +// if (targetApplicationId == keyguardApplicationId) { +// val response = FillResponse.Builder() +// .disableAutofill(1000L) +// .build() +// callback.onSuccess(response) +// return +// } else { +// Result.success(it) +// } +// } + .fold( + onSuccess = ::identity, + onFailure = { + callback.onFailure("Failed to parse structures: ${it.message}") + return + }, + ) + if (autofillStructure.items.isEmpty()) { + callback.onFailure("Nothing to autofill.") + return + } + + val job = ciphersFlow + .onStart { + Log.e("LOL", "on start v2") + } + .toIO() + .effectMap(Dispatchers.Default) { state -> + state.map { secrets -> + val autofillTarget = AutofillTarget( + links = listOfNotNull( + // application id + autofillStructure.applicationId?.let { + LinkInfoPlatform.Android( + packageName = it, + ) + }, + // website + autofillStructure.webDomain?.let { + val url = Url("https://$it") + LinkInfoPlatform.Web( + url = url, + frontPageUrl = url, + ) + }, + ), + hints = autofillStructure.items.map { it.hint }, + ) + getSuggestions( + secrets, + Getter { it as DSecret }, + autofillTarget, + ).bind() + .take(10) as List + } + } + .biEffectTap( + ifException = { + // If the request is canceled, then it does not expect any + // feedback. + if (!cancellationSignal.isCanceled) { + callback.onFailure("Failed to get the secrets from the database!") + } + }, + ifSuccess = { r -> + val canInlineSuggestions = Build.VERSION.SDK_INT >= Build.VERSION_CODES.R && + prefInlineSuggestionsFlow.toIO() + .attempt().bind().exists { it } + + val forceHideManualSelection = kotlin.run { + val targetApplicationId = autofillStructure.applicationId + val keyguardApplicationId = packageName + targetApplicationId == keyguardApplicationId + } + + // build a response + val responseBuilder = FillResponse.Builder() + when (r) { + is Either.Left -> { + if (forceHideManualSelection) { + callback.onFailure("Can not autofill own app password.") + return@biEffectTap + } + // Database is locked, create a generic + // sign in with option. + responseBuilder.buildAuthentication( + type = FooBar.UNLOCK, + result2 = autofillStructure, + request = request, + canInlineSuggestions = canInlineSuggestions, + ) + } + + is Either.Right -> if (r.value.isEmpty()) { + if (forceHideManualSelection) { + callback.onFailure("No match found.") + return@biEffectTap + } + // No match found, create a generic option. + responseBuilder.buildAuthentication( + type = FooBar.SELECT, + result2 = autofillStructure, + request = request, + canInlineSuggestions = canInlineSuggestions, + ) + } else { + val manualSelection = prefManualSelectionFlow.toIO().bind() && + !forceHideManualSelection + + val totalInlineSuggestionsMaxCount = if ( + Build.VERSION.SDK_INT >= Build.VERSION_CODES.R && + canInlineSuggestions + ) { + request.inlineSuggestionsRequest?.maxSuggestionCount + ?: 0 // no suggestions allowed + } else { + 0 + } + val secretInlineSuggestionsMaxCount = + if (manualSelection) totalInlineSuggestionsMaxCount - 1 else totalInlineSuggestionsMaxCount + + var index = 0 + r.value.forEach { secret -> + var f = false + val dataset = + tryBuildDataset(index, this, secret, autofillStructure) { + if (index < secretInlineSuggestionsMaxCount) { + val inline = + tryBuildSecretInlinePresentation( + request, + index, + secret, + ) + if (inline != null) { + setInlinePresentation(inline) + f = true + } + } + } + if (dataset != null && (!canInlineSuggestions || f)) { + responseBuilder.addDataset(dataset) + index += 1 + } + } + if (manualSelection) { + val intent = AutofillActivity.getIntent( + context = this@KeyguardAutofillService, + args = AutofillActivity.Args( + applicationId = autofillStructure.applicationId, + webDomain = autofillStructure.webDomain, + webScheme = autofillStructure.webScheme, + autofillStructure2 = autofillStructure, + ), + ) + + val flags = + PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE + val pi = PendingIntent.getActivity(this, 1010, intent, flags) + + val manualSelectionView = AutofillViews + .buildPopupEntryManual(this) + + autofillStructure.items.forEach { + val autofillId = it.id + Log.e("SuggestionsTest", "autofill_id=$autofillId") + val builder = Dataset.Builder(manualSelectionView) + + if (totalInlineSuggestionsMaxCount > 0 && canInlineSuggestions && Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + val inlinePresentation = + tryBuildManualSelectionInlinePresentation( + request, + index, + intent = intent, + ) + inlinePresentation?.let { + builder.setInlinePresentation(it) + } + Log.e( + "SuggestionsTest", + "adding inline=$inlinePresentation", + ) + } + builder.setValue(autofillId, null) + builder.setAuthentication(pi.intentSender) + responseBuilder.addDataset(builder.build()) + } + } + } + } + val shouldSaveRequest = prefSaveRequestFlow.first() && + !forceHideManualSelection + if (shouldSaveRequest) { + class SaveItem( + val flag: Int, + val item: AutofillStructure2.Item, + ) + + val items = mutableListOf() + autofillStructure.items + .distinctBy { it.hint } + .forEach { item -> + val flag = when (item.hint) { + AutofillHint.PASSWORD -> SaveInfo.SAVE_DATA_TYPE_PASSWORD + AutofillHint.EMAIL_ADDRESS -> SaveInfo.SAVE_DATA_TYPE_EMAIL_ADDRESS + AutofillHint.USERNAME -> SaveInfo.SAVE_DATA_TYPE_USERNAME + else -> return@forEach + } + items += SaveItem( + flag = flag, + item = item, + ) + } + + val hints = autofillStructure + .items + .asSequence() + .map { it.hint } + .toSet() + val hintsIncludeUsername = AutofillHint.USERNAME in hints || + AutofillHint.NEW_USERNAME in hints || + AutofillHint.PHONE_NUMBER in hints || + AutofillHint.EMAIL_ADDRESS in hints + val hintsIncludePassword = AutofillHint.PASSWORD in hints || + AutofillHint.NEW_PASSWORD in hints + if ( + hintsIncludeUsername && + hintsIncludePassword && + items.isNotEmpty() + ) { + val saveInfoBuilder = SaveInfo.Builder( + items.fold(0) { y, x -> y or x.flag }, + items + .map { it.item.id } + .toTypedArray(), + ) + val saveInfo = saveInfoBuilder.build() + responseBuilder.setSaveInfo(saveInfo) + } + } + try { + val response = responseBuilder + .build() + callback.onSuccess(response) + } catch (e: Exception) { + callback.onFailure("Failed to build response ${e.localizedMessage}") + } + }, + ) + .dispatchOn(Dispatchers.Main) + .launchIn(scope) + cancellationSignal.setOnCancelListener { + job.cancel() + } + } + + private enum class FooBar { + UNLOCK, + SELECT, + } + + private fun FillResponse.Builder.buildAuthentication( + type: FooBar, + result2: AutofillStructure2, + request: FillRequest, + canInlineSuggestions: Boolean, + ) { + val remoteViewsUnlock: RemoteViews = when (type) { + FooBar.UNLOCK -> AutofillViews.buildPopupKeyguardUnlock( + this@KeyguardAutofillService, + result2.webDomain, + result2.applicationId, + ) + + FooBar.SELECT -> AutofillViews.buildPopupKeyguardOpen( + this@KeyguardAutofillService, + result2.webDomain, + result2.applicationId, + ) + } + + result2.items.forEach { + val autofillId = it.id + val authIntent = AutofillActivity.getIntent( + context = this@KeyguardAutofillService, + args = AutofillActivity.Args( + applicationId = result2.applicationId, + webDomain = result2.webDomain, + webScheme = result2.webScheme, + autofillStructure2 = result2, + ), + ) + val intentSender: IntentSender = PendingIntent.getActivity( + this@KeyguardAutofillService, + 1001, + authIntent, + PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE, + ).intentSender + + val builder = Dataset.Builder(remoteViewsUnlock) + if (canInlineSuggestions && Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + val inlinePresentation = + tryCreateAuthenticationInlinePresentation( + type, + request, + 0, + intent = authIntent, + ) + inlinePresentation?.let { + builder.setInlinePresentation(it) + } + Log.e( + "SuggestionsTest", + "adding inline=$inlinePresentation", + ) + } + builder.setValue(autofillId, null) + builder.setAuthentication(intentSender) + addDataset(builder.build()) + } + } + + private fun tryBuildDataset( + index: Int, + context: Context, + secret: DSecret, + struct: AutofillStructure2, + onComplete: (Dataset.Builder.() -> Unit)? = null, + ): Dataset? { + val title = secret.name + val text = kotlin.run { + secret.login?.username?.also { return@run it } + secret.card?.number?.also { return@run it } + secret.uris.firstOrNull() + ?.uri + ?.also { return@run it } + null + } + val views = AutofillViews.buildPopupEntry( + context = this, + title = title, + text = text, + ) + + fun createDatasetBuilder(): Dataset.Builder { + val builder = Dataset.Builder(views) + builder.setId(secret.id) + val fields = runBlocking { + val hints = struct.items + .asSequence() + .map { it.hint } + .toSet() + secret.gett( + hints = hints, + getTotpCode = getTotpCode, + ).bind() + } + struct.items.forEach { structItem -> + val value = fields[structItem.hint] + builder.trySetValue( + id = structItem.id, + value = value, + ) + } + return builder + } + + val builder = createDatasetBuilder() + try { + val dataset = createDatasetBuilder().build() + val intent = AutofillFakeAuthActivity.getIntent( + this, + dataset = dataset, + cipher = secret, + structure = struct, + ) + val pi = PendingIntent.getActivity( + this, + 10031 + index, + intent, + PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_CANCEL_CURRENT, + ) + + builder.setAuthentication(pi.intentSender) + } catch (e: Exception) { + // Ignored + } + + onComplete?.invoke(builder) + + return try { + builder.build() + } catch (e: Exception) { + null // not a single value set + } + } + + private fun Dataset.Builder.trySetValue( + id: AutofillId?, + value: String?, + ) { + if (id != null && value != null) { + setValue(id, AutofillValue.forText(value)) + } + } + + @RequiresApi(Build.VERSION_CODES.R) + @SuppressLint("RestrictedApi") + private fun tryBuildSecretInlinePresentation( + request: FillRequest, + index: Int, + secret: DSecret, + ) = tryCreateInlinePresentation( + request = request, + index = index, + createPendingIntent = { + val intent = MainActivity.getIntent( + context = this, + ) + + val flags = PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE + PendingIntent.getActivity(this, 1010, intent, flags) + }, + content = { + setContentDescription(secret.name) + setTitle(secret.name) + val username = kotlin.run { + secret.login?.username?.also { return@run it } + secret.card?.number + // Take the last group of the + // card, otherwise it does not fit in. + ?.let { cardNumber -> + val cardNumberGroups = cardNumber + .windowed( + size = FormatCardGroupLength, + step = FormatCardGroupLength, + partialWindows = true, + ) + if (cardNumberGroups.size < 4) { + return@let cardNumber + } + + val cardNumberSuffix = cardNumberGroups.drop(3) + .joinToString(separator = " ") + "*$cardNumberSuffix" + } + ?.also { return@run it } + secret.uris.firstOrNull() + ?.uri + ?.also { return@run it } + null + } + username?.also(::setSubtitle) + }, + ) + + @RequiresApi(Build.VERSION_CODES.R) + @SuppressLint("RestrictedApi") + private fun tryBuildManualSelectionInlinePresentation( + request: FillRequest, + index: Int, + intent: Intent, + ) = tryCreateInlinePresentation( + request = request, + index = index, + createPendingIntent = { + val flags = PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE + PendingIntent.getActivity(this, 1010, intent, flags) + }, + content = { + val title = getString(R.string.autofill_open_keyguard) + setContentDescription(title) + setTitle(title) + setStartIcon(createAppIcon()) + }, + ) + + @SuppressLint("RestrictedApi") + @RequiresApi(Build.VERSION_CODES.R) + private fun tryCreateAuthenticationInlinePresentation( + type: FooBar, + request: FillRequest, + index: Int, + intent: Intent, + ) = tryCreateInlinePresentation( + request = request, + index = index, + createPendingIntent = { + val flags = PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE + PendingIntent.getActivity(this, 1002, intent, flags) + }, + content = { + val text = when (type) { + FooBar.UNLOCK -> getString(R.string.autofill_unlock_keyguard) + FooBar.SELECT -> getString(R.string.autofill_open_keyguard) + } + setContentDescription(text) + setTitle(text) + setStartIcon(createAppIcon()) + }, + ) + + @SuppressLint("RestrictedApi") + @RequiresApi(Build.VERSION_CODES.R) + private inline fun tryCreateInlinePresentation( + request: FillRequest, + index: Int, + createPendingIntent: () -> PendingIntent, + content: Content.Builder.() -> Unit, + ): InlinePresentation? { + val spec = request.inlineSuggestionsRequest + ?.inlinePresentationSpecs + ?.getOrNull(index) + ?: return null + val imeStyle = spec.style + if (UiVersions.getVersions(imeStyle).contains(UiVersions.INLINE_UI_VERSION_1)) { + val pi = createPendingIntent() + return InlinePresentation( + InlineSuggestionUi + .newContentBuilder(pi) + .apply(content) + .build().slice, + spec, + false, + ) + } + return null + } + + @RequiresApi(Build.VERSION_CODES.Q) + private fun createAppIcon() = Icon + .createWithResource(this@KeyguardAutofillService, R.mipmap.ic_launcher) + .apply { + setTintBlendMode(BlendMode.DST) + } + + override fun onSaveRequest(request: SaveRequest, callback: SaveCallback) { + val autofillStructure = kotlin.runCatching { + val structureLatest = request.fillContexts + .map { it.structure } + .lastOrNull() + // If the structure is missing, then abort auto-filling + // process. + ?: throw IllegalStateException("No structures to fill.") + + val respectAutofillOff = prefRespectAutofillOffFlow.toIO().bindBlocking() + autofillStructureParser.parse( + structureLatest, + respectAutofillOff, + ) + }.fold( + onSuccess = ::identity, + onFailure = { + callback.onFailure("Failed to parse structures: ${it.message}") + return + }, + ) + val hints = autofillStructure + .items + .asSequence() + .map { it.hint } + .toSet() + val hintsIncludeUsername = AutofillHint.USERNAME in hints || + AutofillHint.NEW_USERNAME in hints || + AutofillHint.PHONE_NUMBER in hints || + AutofillHint.EMAIL_ADDRESS in hints + val hintsIncludePassword = AutofillHint.PASSWORD in hints || + AutofillHint.NEW_PASSWORD in hints + if ( + !hintsIncludeUsername || + !hintsIncludePassword + ) { + callback.onFailure("Can only save login data.") + return + } + + val intent = AutofillSaveActivity.getIntent( + context = this@KeyguardAutofillService, + args = AutofillSaveActivity.Args( + applicationId = autofillStructure.applicationId, + webDomain = autofillStructure.webDomain, + webScheme = autofillStructure.webScheme, + autofillStructure2 = autofillStructure, + ), + ) + if (Build.VERSION.SDK_INT >= 28) { + val flags = + PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_CANCEL_CURRENT + val pi = PendingIntent.getActivity(this, 10120, intent, flags) + callback.onSuccess(pi.intentSender) + } else { + try { + startActivity(intent) + } catch (e: Exception) { + callback.onFailure(e.message) + return + } + callback.onSuccess() + } + } + + override fun onDestroy() { + super.onDestroy() + job.cancel() + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/android/autofill/KeyguardCredentialService.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/autofill/KeyguardCredentialService.kt new file mode 100644 index 00000000..45c26885 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/autofill/KeyguardCredentialService.kt @@ -0,0 +1,254 @@ +package com.artemchep.keyguard.android.autofill + +import android.app.PendingIntent +import android.content.Intent +import android.os.CancellationSignal +import android.os.OutcomeReceiver +import androidx.annotation.RequiresApi +import androidx.credentials.exceptions.ClearCredentialException +import androidx.credentials.exceptions.ClearCredentialUnknownException +import androidx.credentials.exceptions.CreateCredentialException +import androidx.credentials.exceptions.CreateCredentialUnknownException +import androidx.credentials.exceptions.GetCredentialException +import androidx.credentials.exceptions.GetCredentialUnknownException +import androidx.credentials.provider.AuthenticationAction +import androidx.credentials.provider.BeginCreateCredentialRequest +import androidx.credentials.provider.BeginCreateCredentialResponse +import androidx.credentials.provider.BeginCreatePasswordCredentialRequest +import androidx.credentials.provider.BeginCreatePublicKeyCredentialRequest +import androidx.credentials.provider.BeginGetCredentialRequest +import androidx.credentials.provider.BeginGetCredentialResponse +import androidx.credentials.provider.CreateEntry +import androidx.credentials.provider.CredentialProviderService +import androidx.credentials.provider.ProviderClearCredentialStateRequest +import com.artemchep.keyguard.android.PasskeyBeginGetRequest +import com.artemchep.keyguard.android.PasskeyCreateActivity +import com.artemchep.keyguard.android.PasskeyGetUnlockActivity +import com.artemchep.keyguard.android.PendingIntents +import com.artemchep.keyguard.android.downloader.journal.CipherHistoryOpenedRepository +import com.artemchep.keyguard.common.R +import com.artemchep.keyguard.common.io.attempt +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.io.handleErrorTap +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.model.MasterSession +import com.artemchep.keyguard.common.usecase.GetCanWrite +import com.artemchep.keyguard.common.usecase.GetCiphers +import com.artemchep.keyguard.common.usecase.GetVaultSession +import com.artemchep.keyguard.feature.crashlytics.crashlyticsTap +import com.artemchep.keyguard.platform.recordLog +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.Job +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.shareIn +import org.kodein.di.DIAware +import org.kodein.di.android.closestDI +import org.kodein.di.direct +import org.kodein.di.instance +import kotlin.coroutines.CoroutineContext + +@RequiresApi(34) +class KeyguardCredentialService : CredentialProviderService(), DIAware { + private val job = Job() + + private val scope = object : CoroutineScope { + override val coroutineContext: CoroutineContext + get() = Dispatchers.Main + job + } + + override val di by closestDI { this } + + private val getCanWrite by instance() + + private val sessionFlow by lazy { + val getVaultSession: GetVaultSession by di.instance() + getVaultSession() + .distinctUntilChanged() + .shareIn( + scope, + SharingStarted.WhileSubscribed(KeyguardAutofillService.KEEP_CIPHERS_IN_MEMORY_FOR), + replay = 1, + ) + } + + private val passkeyBeginGetRequest by instance() + + override fun onBeginCreateCredentialRequest( + request: BeginCreateCredentialRequest, + cancellationSignal: CancellationSignal, + callback: OutcomeReceiver, + ) { + ioEffect { + recordLog("Got begin create credential request") + // Check if you can modify items in the vault, if + // no then ignore the passkeys request. + val canWrite = getCanWrite() + .first() + if (!canWrite) { + val e = CreateCredentialUnknownException() + throw e + } + + val response = ioEffect { processCreateCredentialsRequest(request) } + .crashlyticsTap { e -> + e.takeIf { it !is CreateCredentialException } + } + .bind() + callback.onResult(response) + } + // Something went wrong, report back the + // status to the credentials manager. + .handleErrorTap { + val e = it as? CreateCredentialException + ?: CreateCredentialUnknownException() + callback.onError(e) + } + .attempt() + .launchIn(scope) + } + + private suspend fun processCreateCredentialsRequest( + request: BeginCreateCredentialRequest, + ): BeginCreateCredentialResponse { + return when (request) { + is BeginCreatePublicKeyCredentialRequest -> { + val title = getString(R.string.app_name) + val pi = createCreatePasskeyPendingIntent() + val entries = listOf( + CreateEntry( + accountName = title, + pendingIntent = pi, + ), + ) + BeginCreateCredentialResponse( + createEntries = entries, + ) + } + + is BeginCreatePasswordCredentialRequest -> { + // TODO: Add a support for storing the passwords. This + // requires implementing: + // https://github.com/AChep/keyguard-app/issues/5 + throw CreateCredentialUnknownException() + } + + else -> { + throw CreateCredentialUnknownException() + } + } + } + + override fun onBeginGetCredentialRequest( + request: BeginGetCredentialRequest, + cancellationSignal: CancellationSignal, + callback: OutcomeReceiver, + ) { + ioEffect { + recordLog("Got begin get credential request") + + when (val session = sessionFlow.first()) { + is MasterSession.Key -> { + val cipherHistoryOpenedRepository = + session.di.direct.instance() + val getCiphers = session.di.direct.instance() + + val ciphers = getCiphers() + .map { ciphers -> + ciphers + .filter { it.deletedDate == null } + } + .first() + val response = ioEffect { + passkeyBeginGetRequest.processGetCredentialsRequest( + cipherHistoryOpenedRepository = cipherHistoryOpenedRepository, + request = request, + ciphers = ciphers, + ) + } + .crashlyticsTap { e -> + e.takeIf { it !is GetCredentialException } + } + .bind() + callback.onResult(response) + } + + // Need to authenticate a user to unlock + // the database first. + is MasterSession.Empty -> { + val title = getString(R.string.autofill_open_keyguard) + val pi = createGetUnlockPasskeyPendingIntent() + val actions = listOf( + AuthenticationAction( + title = title, + pendingIntent = pi, + ), + ) + callback.onResult( + BeginGetCredentialResponse( + authenticationActions = actions, + ), + ) + } + } + } + // Something went wrong, report back the + // status to the credentials manager. + .handleErrorTap { + val e = it as? GetCredentialException + ?: GetCredentialUnknownException() + callback.onError(e) + } + .attempt() + .launchIn(scope) + } + + override fun onClearCredentialStateRequest( + request: ProviderClearCredentialStateRequest, + cancellationSignal: CancellationSignal, + callback: OutcomeReceiver, + ) { + recordLog("Got clear credential state request") + callback.onError(ClearCredentialUnknownException()) + } + + override fun onDestroy() { + super.onDestroy() + job.cancel() + } + + // + // Intents + // + + private fun createGetUnlockPasskeyPendingIntent( + ): PendingIntent { + val intent = PasskeyGetUnlockActivity.getIntent( + context = this, + ) + return createPendingIntent(intent) + } + + private fun createCreatePasskeyPendingIntent( + ): PendingIntent { + val intent = PasskeyCreateActivity.getIntent( + context = this, + ) + return createPendingIntent(intent) + } + + private fun createPendingIntent( + intent: Intent, + ): PendingIntent { + val flags = PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_MUTABLE + val rc = getNextPendingIntentRequestCode() + return PendingIntent.getActivity(this, rc, intent, flags) + } + + private fun getNextPendingIntentRequestCode() = PendingIntents.credential.obtainId() + +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/android/clipboard/KeyguardClipboardService.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/clipboard/KeyguardClipboardService.kt new file mode 100644 index 00000000..9d166dae --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/clipboard/KeyguardClipboardService.kt @@ -0,0 +1,454 @@ +package com.artemchep.keyguard.android.clipboard + +import android.app.Notification +import android.app.NotificationChannel +import android.app.NotificationManager +import android.app.PendingIntent +import android.app.Service +import android.content.ContentResolver +import android.content.Context +import android.content.Intent +import android.media.AudioAttributes +import android.net.Uri +import android.os.IBinder +import android.os.Parcelable +import android.util.Log +import androidx.core.app.NotificationCompat +import androidx.core.content.getSystemService +import com.artemchep.keyguard.android.Notifications +import com.artemchep.keyguard.android.downloader.receiver.CopyActionReceiver +import com.artemchep.keyguard.common.R +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.model.TotpCode +import com.artemchep.keyguard.common.model.TotpToken +import com.artemchep.keyguard.common.service.clipboard.ClipboardService +import com.artemchep.keyguard.common.usecase.GetClipboardAutoRefresh +import com.artemchep.keyguard.common.usecase.GetTotpCode +import com.artemchep.keyguard.ui.totp.formatCodeStr +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.Job +import kotlinx.coroutines.TimeoutCancellationException +import kotlinx.coroutines.cancel +import kotlinx.coroutines.cancelAndJoin +import kotlinx.coroutines.channels.actor +import kotlinx.coroutines.channels.consumeEach +import kotlinx.coroutines.coroutineScope +import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.channelFlow +import kotlinx.coroutines.flow.collect +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.flow.lastOrNull +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.mapLatest +import kotlinx.coroutines.flow.onEach +import kotlinx.coroutines.flow.shareIn +import kotlinx.coroutines.flow.take +import kotlinx.coroutines.launch +import kotlinx.coroutines.withTimeout +import kotlinx.coroutines.yield +import kotlinx.datetime.Clock +import kotlinx.datetime.Instant +import kotlinx.parcelize.Parcelize +import org.kodein.di.DIAware +import org.kodein.di.android.closestDI +import org.kodein.di.instance +import kotlin.coroutines.CoroutineContext +import kotlin.time.Duration + +class KeyguardClipboardService : Service(), DIAware { + companion object { + private const val KEY_ARGUMENTS = "arguments" + + fun getIntent( + context: Context, + cipherName: String?, + totpToken: TotpToken, + ) = kotlin.run { + val args = Args.CopyTotpCode( + cipherName = cipherName, + token = totpToken.raw, + ) + getIntent(context, args) + } + + fun getIntent( + context: Context, + cipherName: String?, + value: String, + concealed: Boolean, + ) = kotlin.run { + val args = Args.CopyValue(cipherName, value, concealed) + getIntent(context, args) + } + + fun getIntent( + context: Context, + args: Args, + ) = Intent(context, KeyguardClipboardService::class.java).apply { + putExtra(KEY_ARGUMENTS, args) + } + } + + sealed interface Args : Parcelable { + @Parcelize + data class CopyValue( + val cipherName: String?, + val value: String, + val concealed: Boolean, + ) : Args + + @Parcelize + data class CopyTotpCode( + val cipherName: String?, + val token: String, + ) : Args + + @Parcelize + object Cancel : Args + } + + private data class CopyValueEvent( + val type: Type, + val cipherName: String?, + val value: String, + val text: String = value, + val concealed: Boolean, + val expiration: Instant? = null, + ) { + enum class Type { + VALUE, + TOTP, + } + } + + private val scope: CoroutineScope = object : CoroutineScope { + override val coroutineContext: CoroutineContext = Dispatchers.Main + Job() + } + + override val di by closestDI { this } + + private val clipboardService: ClipboardService by instance() + + private val clipboardAutoRefreshFlow by lazy { + val getClipboardAutoRefresh: GetClipboardAutoRefresh by instance() + getClipboardAutoRefresh() + .shareIn(scope, SharingStarted.Eagerly, replay = 1) + } + + private val notificationManager by lazy { + getSystemService()!! + } + + private val notificationIdPool = Notifications.totp + + private var notificationId: Int = 0 + + override fun onCreate() { + super.onCreate() + notificationId = notificationIdPool.obtainId() + } + + private val actor = scope.actor(capacity = 16) { + var previousJob: Job? = null + consumeEach { + if (it is Args.Cancel) { + stopSelf() + return@consumeEach + } + + val flow = execute(it) + if (flow != null) { + previousJob?.cancel() + previousJob = executeFlow2(flow) + .launchIn(scope) + } + } + } + + private fun execute(args: Args) = when (args) { + is Args.CopyValue -> execute(args) + is Args.CopyTotpCode -> execute(args) + is Args.Cancel -> null + } + + private fun execute(args: Args.CopyValue): Flow { + val event = CopyValueEvent( + type = CopyValueEvent.Type.VALUE, + cipherName = args.cipherName, + value = args.value, + concealed = args.concealed, + ) + return flowOf(event) + } + + private fun execute(args: Args.CopyTotpCode): Flow? { + val token = TotpToken.parse(args.token).getOrNull() + // The token should always be valid, because we + // verified it before creating a service. + ?: return null + val getTotpCode: GetTotpCode by instance() + return getTotpCode(token) + .map { + val expiration = when (val counter = it.counter) { + is TotpCode.TimeBasedCounter -> counter.expiration + is TotpCode.IncrementBasedCounter -> null + } + CopyValueEvent( + type = CopyValueEvent.Type.TOTP, + cipherName = args.cipherName, + value = it.code, + text = it.formatCodeStr(), + concealed = false, + expiration = expiration, + ) + } + } + + private fun executeFlow2(flow: Flow): IO = ioEffect { + val autoRefreshDuration = clipboardAutoRefreshFlow.first() + + flow + .run { + @Suppress("UnnecessaryVariable") + val d = autoRefreshDuration + if (d.isPositive()) { + takeFor(duration = d) + } else { + take(1) + } + } + .mapLatest { event -> + performCopyToClipboard(event) + notify( + notificationId = notificationId, + event = event, + ) + + event + } + .lastOrNull() + + yield() + stopSelf() + } + + private suspend fun notify( + notificationId: Int, + event: CopyValueEvent, + ) { + val expiration = event.expiration + if (expiration != null) { + var lastSeconds = 0L + var alertOnlyOnce = false + do { + val now = Clock.System.now() + val newSeconds = (expiration - now).inWholeSeconds + if (newSeconds != lastSeconds && newSeconds != 0L) { + val notification = createNotification( + type = event.type, + name = event.cipherName, + text = event.text, + value = event.value, + expiration = expiration - now, + alertOnlyOnce = alertOnlyOnce, + ) + startForeground(notificationId, notification) + } + + lastSeconds = newSeconds + alertOnlyOnce = true // do not notify about status updates + delay(500L) + } while (lastSeconds > 0) + } else { + val notification = createNotification( + type = event.type, + name = event.cipherName, + text = event.text, + value = event.value, + expiration = null, + alertOnlyOnce = false, + ) + startForeground(notificationId, notification) + } + } + + private fun Flow.takeFor( + duration: Duration, + ): Flow = channelFlow { + coroutineScope { + val consumeJob = launch { + onEach { + send(it) + }.collect() + } + + try { + withTimeout(duration) { + consumeJob.join() + } + } catch (e: TimeoutCancellationException) { + Log.e("totp", "cancel event") + // Stop observing for more events. + consumeJob.cancelAndJoin() + } + } + } + + private fun performCopyToClipboard(event: CopyValueEvent) = + clipboardService.setPrimaryClip( + value = event.value, + concealed = event.concealed, + ) + + override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { + val args = intent?.extras?.getParcelable(KEY_ARGUMENTS) + if (args != null) { + actor.trySend(args) + } + + return START_NOT_STICKY + } + + override fun onBind(intent: Intent?): IBinder? = null + + override fun onDestroy() { + val notificationId = notificationId + .also { + // we can not post with this ID anymore + notificationId = 0 + } + if (notificationId != 0) { + notificationIdPool.releaseId(notificationId) + notificationManager.cancel(notificationId) + } + + super.onDestroy() + scope.cancel() + } + + // + // Notifications + // + + private fun createNotification( + type: CopyValueEvent.Type, + name: String?, + text: String, + value: String, + expiration: Duration?, + alertOnlyOnce: Boolean, + ongoing: Boolean = true, + ): Notification { + val icon = when (expiration?.inWholeSeconds) { + null -> R.drawable.ic_lock_outline + 0L -> R.drawable.ic_number_0 + 1L -> R.drawable.ic_number_1 + 2L -> R.drawable.ic_number_2 + 3L -> R.drawable.ic_number_3 + 4L -> R.drawable.ic_number_4 + 5L -> R.drawable.ic_number_5 + 6L -> R.drawable.ic_number_6 + 7L -> R.drawable.ic_number_7 + 8L -> R.drawable.ic_number_8 + 9L -> R.drawable.ic_number_9 + else -> R.drawable.ic_number_9_plus + } + + val contentTitle = when (type) { + CopyValueEvent.Type.TOTP -> "Copied a one-time password" + CopyValueEvent.Type.VALUE -> "Copied a value" + } + val contentText = kotlin.run { + val suffix = expiration + ?.let { duration -> + val seconds = duration.inWholeSeconds + " ($seconds)" + } + .orEmpty() + "$text$suffix" + } + + // Action + val copyAction = kotlin.run { + val copyAction = kotlin.run { + val intent = CopyActionReceiver.cancel( + context = applicationContext, + value = value, + ) + PendingIntent.getBroadcast( + applicationContext, + notificationId, + intent, + PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT, + ) + } + val copyTitle = "Copy" + NotificationCompat.Action.Builder(R.drawable.ic_copy, copyTitle, copyAction) + .build() + } + val cancelAction = kotlin.run { + val cancelAction = kotlin.run { + val intent = getIntent( + context = applicationContext, + args = Args.Cancel, + ) + PendingIntent.getForegroundService( + applicationContext, + notificationId + 1, + intent, + PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT, + ) + } + val cancelTitle = "Cancel" + NotificationCompat.Action.Builder(R.drawable.ic_cancel, cancelTitle, cancelAction) + .build() + } + + val channelId = createNotificationChannel() + val audioUri = getAudioUri() + return NotificationCompat.Builder(this, channelId) + .setForegroundServiceBehavior(NotificationCompat.FOREGROUND_SERVICE_IMMEDIATE) + .setContentTitle(contentTitle) + .setContentText(contentText) + .setSubText(name) + .addAction(copyAction) + .addAction(cancelAction) + .setSmallIcon(icon) + .setSound(audioUri) + .setOnlyAlertOnce(alertOnlyOnce) + .setOngoing(ongoing) + .build() + } + + private fun createNotificationChannel(): String { + val channelImportance = if (clipboardService.hasCopyNotification()) { + NotificationManager.IMPORTANCE_DEFAULT + } else { + NotificationManager.IMPORTANCE_HIGH + } + val channel = kotlin.run { + val id = getString(R.string.notification_clipboard_channel_id) + val name = getString(R.string.notification_clipboard_channel_name) + NotificationChannel(id, name, channelImportance) + } + channel.enableVibration(false) + val audioUri = getAudioUri() + val audioAttributes = AudioAttributes.Builder() + .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION) + .setUsage(AudioAttributes.USAGE_NOTIFICATION) + .build() + channel.setSound(audioUri, audioAttributes) + val nm = getSystemService()!! + nm.createNotificationChannel(channel) + return channel.id + } + + private fun getAudioUri() = + Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE + "://" + applicationContext.packageName + "/" + R.raw.silence) +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/android/closestActivityOrNull.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/closestActivityOrNull.kt new file mode 100644 index 00000000..54f951cd --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/closestActivityOrNull.kt @@ -0,0 +1,12 @@ +package com.artemchep.keyguard.android + +import android.app.Activity +import android.content.Context +import android.content.ContextWrapper + +val Context.closestActivityOrNull: Activity? + get() = when (this) { + is Activity -> this + is ContextWrapper -> baseContext.closestActivityOrNull + else -> null + } diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/android/downloader/AttachmentDownloadTag.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/downloader/AttachmentDownloadTag.kt new file mode 100644 index 00000000..3de171d6 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/downloader/AttachmentDownloadTag.kt @@ -0,0 +1,35 @@ +package com.artemchep.keyguard.android.downloader + +import arrow.core.left +import arrow.core.right + +private const val SEPARATOR = "|" + +class AttachmentDownloadTag( + val localCipherId: String, // to be able to find the right account for the item + val remoteCipherId: String, + val attachmentId: String, +) { + companion object +} + +fun AttachmentDownloadTag.Companion.deserialize(tag: String) = kotlin.run { + val ids = tag.split(SEPARATOR) + if (ids.size >= 3) { + val model = AttachmentDownloadTag( + localCipherId = ids[0], + remoteCipherId = ids[1], + attachmentId = ids[2], + ) + model.right() + } else { + IllegalArgumentException("Attachment downloading tag must consist of 3 IDs!").left() + } +} + +fun AttachmentDownloadTag.serialize() = + listOf( + localCipherId, + remoteCipherId, + attachmentId, + ).joinToString(separator = SEPARATOR) diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/android/downloader/DownloadClientAndroid.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/downloader/DownloadClientAndroid.kt new file mode 100644 index 00000000..1f2f1a52 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/downloader/DownloadClientAndroid.kt @@ -0,0 +1,33 @@ +package com.artemchep.keyguard.android.downloader + +import android.app.Application +import android.content.Context +import com.artemchep.keyguard.common.service.crypto.FileEncryptor +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.copy.download.DownloadClientJvm +import okhttp3.OkHttpClient +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class DownloadClientAndroid( + private val context: Context, + windowCoroutineScope: WindowCoroutineScope, + okHttpClient: OkHttpClient, + fileEncryptor: FileEncryptor, +) : DownloadClientJvm( + cacheDirProvider = { + context.cacheDir + }, + windowCoroutineScope = windowCoroutineScope, + okHttpClient = okHttpClient, + fileEncryptor = fileEncryptor, +) { + constructor( + directDI: DirectDI, + ) : this( + context = directDI.instance(), + windowCoroutineScope = directDI.instance(), + okHttpClient = directDI.instance(), + fileEncryptor = directDI.instance(), + ) +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/android/downloader/DownloadManagerImpl.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/downloader/DownloadManagerImpl.kt new file mode 100644 index 00000000..9b21a4b9 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/downloader/DownloadManagerImpl.kt @@ -0,0 +1,401 @@ +package com.artemchep.keyguard.android.downloader + +import android.app.Application +import android.content.Context +import android.util.Log +import arrow.core.left +import arrow.core.right +import com.artemchep.keyguard.android.downloader.journal.DownloadRepository +import com.artemchep.keyguard.android.downloader.journal.room.DownloadInfoEntity2 +import com.artemchep.keyguard.android.downloader.worker.AttachmentDownloadWorker +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.service.crypto.CryptoGenerator +import com.artemchep.keyguard.common.service.download.DownloadManager +import com.artemchep.keyguard.common.service.download.DownloadProgress +import com.artemchep.keyguard.common.service.text.Base64Service +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.ui.CodeException +import com.artemchep.keyguard.ui.getHttpCode +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.FlowPreview +import kotlinx.coroutines.Job +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.flatMapLatest +import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.flow.last +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.mapNotNull +import kotlinx.coroutines.flow.onEach +import kotlinx.coroutines.launch +import kotlinx.coroutines.sync.Mutex +import kotlinx.coroutines.sync.withLock +import kotlinx.datetime.Clock +import org.kodein.di.DirectDI +import org.kodein.di.instance +import java.io.File + +class DownloadManagerImpl( + private val context: Context, + private val windowCoroutineScope: WindowCoroutineScope, + private val downloadClient: DownloadClientAndroid, + private val downloadRepository: DownloadRepository, + private val base64Service: Base64Service, + private val cryptoGenerator: CryptoGenerator, +) : DownloadManager { + companion object { + // Since the extension of the files is unknown it's safe + // to say that they are just binaries. + private const val CACHE_FILE_EXT = ".bin" + + fun getDir(context: Context) = context.filesDir.resolve("downloads/") + + fun getFile( + dir: File, + downloadId: String, + ) = dir.resolve("$downloadId$CACHE_FILE_EXT") + } + + private val mutex = Mutex() + + private val map = mutableMapOf() + + constructor( + directDI: DirectDI, + ) : this( + context = directDI.instance(), + windowCoroutineScope = directDI.instance(), + downloadClient = directDI.instance(), + downloadRepository = directDI.instance(), + base64Service = directDI.instance(), + cryptoGenerator = directDI.instance(), + ) + +// fun statusByAttachmentId( +// accountId: String, +// cipherId: String, +// attachmentId: String, +// ) = AttachmentDownloadTag( +// accountId = accountId, +// remoteCipherId = cipherId, +// attachmentId = attachmentId, +// ).serialize().let(::statusByTag) + + override fun statusByDownloadId2(downloadId: String): Flow = downloadClient + .fileStatusByDownloadId(downloadId) + + override fun statusByTag(tag: DownloadInfoEntity2.AttachmentDownloadTag): Flow = + downloadClient + .fileStatusByTag(tag) + .flatMapLatest { event -> + when (event) { + is DownloadProgress.None -> { + downloadRepository + .get() + .map { + it + .asSequence() + .map { + DownloadInfoEntity2.AttachmentDownloadTag( + localCipherId = it.localCipherId, + remoteCipherId = it.remoteCipherId, + attachmentId = it.attachmentId, + ) + } + .toSet() + } + .map { tags -> tag.takeIf { it in tags } } + .map { tagOrNull -> + tagOrNull?.let { peekDownloadInfoByTag(it) } + } + .distinctUntilChanged() + .map { downloadInfo -> + downloadInfo + ?: return@map DownloadProgress.None + val file = getFilePath(downloadId = downloadInfo.id) + + when { + file.exists() -> { + val result = file.right() + DownloadProgress.Complete(result) + } + + downloadInfo.error != null -> { + // TODO: Fix meee!! + val exception = CodeException( + code = downloadInfo.error!!.code, + description = downloadInfo.error!!.message, + ) + val result = exception.left() + DownloadProgress.Complete(result) + } + + else -> { + DownloadProgress.Loading() + } + } + } + } + + else -> flowOf(event) + } + } + + @OptIn(FlowPreview::class) + override suspend fun queue( + downloadInfo: DownloadInfoEntity2, + ): DownloadManager.QueueResult = queue( + url = downloadInfo.url, + urlIsOneTime = downloadInfo.urlIsOneTime, + name = downloadInfo.name, + tag = DownloadInfoEntity2.AttachmentDownloadTag( + localCipherId = downloadInfo.localCipherId, + remoteCipherId = downloadInfo.remoteCipherId, + attachmentId = downloadInfo.attachmentId, + ), + attempt = downloadInfo.error?.attempt ?: 0, + key = downloadInfo.encryptionKeyBase64?.let { base64Service.decode(it) }, + ) + + @OptIn(FlowPreview::class) + override suspend fun queue( + tag: DownloadInfoEntity2.AttachmentDownloadTag, + url: String, + urlIsOneTime: Boolean, + name: String, + key: ByteArray?, + attempt: Int, + worker: Boolean, + ): DownloadManager.QueueResult = kotlin.run { + val downloadInfo = getOrPutDownloadFileEntity( + url = url, + urlIsOneTime = urlIsOneTime, + name = name, + tag = tag, + encryptionKey = key, + error = null, // clears error field if existed + ) + val file = getFilePath(downloadInfo.id) + + val downloadCancelFlow = downloadRepository + .getByIdFlow(id = downloadInfo.id) + .mapNotNull { model -> + Unit.takeIf { model == null } + } + val downloadFlow = downloadClient.fileLoader( + downloadId = downloadInfo.id, + url = url, + tag = tag, + file = file, + fileKey = key, + cancelFlow = downloadCancelFlow, + ) + + // Launch downloading job on + // the app scope. + listenToError( + scope = windowCoroutineScope, + attempt = attempt, + downloadId = downloadInfo.id, + downloadFlow = downloadFlow, + ) + + if (worker) { + val args = AttachmentDownloadWorker.Args( + downloadId = downloadInfo.id, + ) + AttachmentDownloadWorker.enqueueOnce( + context = context, + args = args, + ) + } + + DownloadManager.QueueResult( + info = downloadInfo, + flow = downloadFlow, + ) + } + + private fun getFilePath(downloadId: String) = + getFile( + dir = getDir(context), + downloadId = downloadId, + ) + + private fun listenToError( + scope: CoroutineScope, + attempt: Int, + downloadId: String, + downloadFlow: Flow, + ) { + synchronized(map) { + // Find out if current download job exists and still + // valid. Create a new one otherwise. + val existingJob = map[downloadId] + if ( + existingJob != null && + !existingJob.isCancelled && + !existingJob.isCompleted + ) { + return@synchronized + } + + val job = scope.launch { + val downloadResult = downloadFlow + .onEach { downloadStatus -> + Log.e("download", "progress $downloadStatus") + } + .last() + if (downloadResult is DownloadProgress.Complete) { + downloadResult.result.fold( + ifLeft = { e -> + val error = DownloadInfoEntity2.Error( + code = e.getHttpCode(), + message = e.message, + attempt = attempt + 1, + ) + replaceDownloadFileEntity( + id = downloadId, + error = error, + ) + Log.e("download", "im sorry, mate") + }, + ifRight = {}, + ) + } + } + job.invokeOnCompletion { + synchronized(map) { + val latestJob = map[downloadId] + if (latestJob === job) map.remove(downloadId) + } + } + map[downloadId] = job + } + } + + override suspend fun removeByDownloadId( + downloadId: String, + ) = removeDownloadInfoByDownloadId(id = downloadId) + + override suspend fun removeByTag( + tag: DownloadInfoEntity2.AttachmentDownloadTag, + ) = removeDownloadInfoByTag(tag = tag) + + // + // Download Info Repository + // + + private suspend fun removeDownloadInfoByDownloadId( + id: String, + ) = mutex + .withLock { + downloadRepository.removeById(id = id) + .bind() + } + + private suspend fun removeDownloadInfoByTag( + tag: DownloadInfoEntity2.AttachmentDownloadTag, + ) = mutex + .withLock { + downloadRepository.removeByTag(tag = tag) + .bind() + } + + private suspend fun peekDownloadInfoByTag( + tag: DownloadInfoEntity2.AttachmentDownloadTag, + ) = mutex + .withLock { + downloadRepository.getByTag(tag = tag) + .bind() + } + + private suspend fun getOrPutDownloadFileEntity( + url: String, + urlIsOneTime: Boolean, + name: String, + tag: DownloadInfoEntity2.AttachmentDownloadTag, + encryptionKey: ByteArray?, + error: DownloadInfoEntity2.Error?, + ) = kotlin.run { + val encryptionKeyBase64 = encryptionKey?.let(base64Service::encodeToString) + mutex + .withLock { + val now = Clock.System.now() + + val existingEntry = downloadRepository.getByTag(tag = tag) + .bind() + if (existingEntry != null) { + if ( + existingEntry.name != name || + existingEntry.url != url || + existingEntry.encryptionKeyBase64 != encryptionKeyBase64 || + existingEntry.error != error + ) { + val newEntry = existingEntry.copy( + revisionDate = now, + // update fields + name = name, + url = url, + encryptionKeyBase64 = encryptionKeyBase64, + error = error, + ) + downloadRepository + .put(newEntry) + .bind() + return@withLock newEntry + } + return@withLock existingEntry + } + + val id = cryptoGenerator.uuid() + + val newEntry = DownloadInfoEntity2( + id = id, + url = url, + urlIsOneTime = urlIsOneTime, + name = name, + localCipherId = tag.localCipherId, + remoteCipherId = tag.remoteCipherId, + attachmentId = tag.attachmentId, + createdDate = now, + encryptionKeyBase64 = encryptionKeyBase64, + ) + downloadRepository + .put(newEntry) + .bind() + newEntry + } + } + + private suspend fun replaceDownloadFileEntity( + id: String, + error: DownloadInfoEntity2.Error?, + ) = kotlin.run { + mutex + .withLock { + val now = Clock.System.now() + + val existingEntry = downloadRepository.getById(id = id) + .bind() + if (existingEntry != null) { + if ( + existingEntry.error != error + ) { + val newEntry = existingEntry.copy( + revisionDate = now, + // update fields + error = error, + ) + downloadRepository + .put(newEntry) + .bind() + return@withLock newEntry + } + return@withLock existingEntry + } + + existingEntry + } + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/android/downloader/NotificationIdPool.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/downloader/NotificationIdPool.kt new file mode 100644 index 00000000..d4a26b3e --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/downloader/NotificationIdPool.kt @@ -0,0 +1,88 @@ +package com.artemchep.keyguard.android.downloader + +interface NotificationIdPool { + companion object { + fun sequential( + start: Int, + ): NotificationIdPool = NotificationIdPoolImpl( + offset = start, + ) + + fun sequential( + start: Int, + endExclusive: Int, + ): NotificationIdPool = NotificationIdPoolSimple( + start = start, + endExclusive = endExclusive, + ) + } + + fun obtainId(): Int + + fun releaseId(id: Int) +} + +inline fun NotificationIdPool.withId( + block: (Int) -> T, +) = kotlin.run { + val id = obtainId() + try { + block(id) + } finally { + releaseId(id) + } +} + +private class NotificationIdPoolSimple( + private val start: Int, + private val endExclusive: Int, +) : NotificationIdPool { + private var value = start + + override fun obtainId(): Int = synchronized(this) { + val newValue = value + 1 + // Loop around in case of integer + // overflow. + value = if (newValue >= endExclusive) start else newValue + value + } + + override fun releaseId(id: Int) { + // Do nothing. + } +} + +private class NotificationIdPoolImpl( + private val offset: Int, +) : NotificationIdPool { + private val pool = mutableListOf() + + override fun obtainId(): Int = pool.obtainId(offset = offset) + + override fun releaseId(id: Int) = pool.releaseId(id = id) +} + +private fun MutableList.obtainId( + offset: Int, +): Int = synchronized(this) { + val ids = generateSequence(offset) { it + 1 }.iterator() + var index = 0 + while (true) { + val id = ids.next() + val idFromPool = this.getOrNull(index) + if (idFromPool != id) { + this.add(index, id) + return@synchronized id + } + index++ + } + @Suppress("UNREACHABLE_CODE") + error("Unreachable statement!") +} + +private fun MutableList.releaseId( + id: Int, +) = synchronized(this) { + val removed = this.remove(id) + require(removed) +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/android/downloader/journal/DownloadRepositoryImpl.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/downloader/journal/DownloadRepositoryImpl.kt new file mode 100644 index 00000000..7f6281df --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/downloader/journal/DownloadRepositoryImpl.kt @@ -0,0 +1,89 @@ +package com.artemchep.keyguard.android.downloader.journal + +import com.artemchep.keyguard.android.downloader.journal.room.DownloadDatabaseManager +import com.artemchep.keyguard.android.downloader.journal.room.DownloadInfoDao +import com.artemchep.keyguard.android.downloader.journal.room.DownloadInfoEntity2 +import com.artemchep.keyguard.android.downloader.journal.room.toDomain +import com.artemchep.keyguard.android.downloader.journal.room.toEntity +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.effectMap +import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.FlowPreview +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.asFlow +import kotlinx.coroutines.flow.flatMapLatest +import kotlinx.coroutines.flow.map +import org.kodein.di.DirectDI +import org.kodein.di.instance + +@OptIn(ExperimentalCoroutinesApi::class, FlowPreview::class) +class DownloadRepositoryImpl( + private val databaseManager: DownloadDatabaseManager, +) : DownloadRepository { + constructor( + directDI: DirectDI, + ) : this( + databaseManager = directDI.instance(), + ) + + override fun getById(id: String): IO = + daoEffect { dao -> + dao.getById(id = id) + ?.toDomain() + } + + override fun getByIdFlow(id: String): Flow = + daoEffect { dao -> + dao.getByIdFlow(id = id) + .map { entities -> + entities.firstOrNull() + ?.toDomain() + } + }.asFlow().flatMapLatest { it } + + override fun getByTag( + tag: DownloadInfoEntity2.AttachmentDownloadTag, + ): IO = daoEffect { dao -> + dao.getByTag( + localCipherId = tag.localCipherId, + remoteCipherId = tag.remoteCipherId, + attachmentId = tag.attachmentId, + )?.toDomain() + } + + override fun removeById(id: String): IO = daoEffect { dao -> + dao.removeById(id = id) + } + + override fun removeByTag( + tag: DownloadInfoEntity2.AttachmentDownloadTag, + ): IO = daoEffect { dao -> + dao.removeByTag( + localCipherId = tag.localCipherId, + remoteCipherId = tag.remoteCipherId, + attachmentId = tag.attachmentId, + ) + } + + override fun get(): Flow> = + daoEffect { dao -> + dao.getAll() + .map { entities -> + entities.map { it.toDomain() } + } + }.asFlow().flatMapLatest { it } + + override fun put(model: DownloadInfoEntity2): IO = + daoEffect { dao -> + dao.insertAll(model.toEntity()) + } + + private inline fun daoEffect( + crossinline block: suspend (DownloadInfoDao) -> T, + ): IO = databaseManager + .get() + .effectMap { db -> + val dao = db.downloadInfoDao() + block(dao) + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/android/downloader/journal/room/DownloadDatabase.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/downloader/journal/room/DownloadDatabase.kt new file mode 100644 index 00000000..b1b36203 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/downloader/journal/room/DownloadDatabase.kt @@ -0,0 +1,23 @@ +package com.artemchep.keyguard.android.downloader.journal.room + +import androidx.room.AutoMigration +import androidx.room.Database +import androidx.room.RoomDatabase +import androidx.room.TypeConverters + +@Database( + entities = [ + DownloadInfoEntity::class, + GeneratorEntity::class, + ], + autoMigrations = [ + AutoMigration(from = 1, to = 2), + ], + version = 2, + exportSchema = true, +) +@TypeConverters(DownloadDatabaseTypeConverter::class) +abstract class DownloadDatabase : RoomDatabase() { + abstract fun downloadInfoDao(): DownloadInfoDao + abstract fun generatorDao(): GeneratorDao +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager.kt new file mode 100644 index 00000000..c8df886b --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseManager.kt @@ -0,0 +1,96 @@ +package com.artemchep.keyguard.android.downloader.journal.room + +import android.content.Context +import android.database.SQLException +import androidx.room.Room +import androidx.room.withTransaction +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.io.effectMap +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.io.retry +import com.artemchep.keyguard.common.io.shared +import com.artemchep.keyguard.common.usecase.DeviceEncryptionKeyUseCase +import com.artemchep.keyguard.data.Database +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.sync.Mutex +import kotlinx.coroutines.sync.withLock +import net.zetetic.database.sqlcipher.SupportOpenHelperFactory + +class DownloadDatabaseManager( + private val applicationContext: Context, + private val name: String, + deviceEncryptionKeyUseCase: DeviceEncryptionKeyUseCase, +) { + init { + System.loadLibrary("sqlcipher") + } + + private val dbMutex = Mutex() + + private val dbIo = deviceEncryptionKeyUseCase() + .effectMap(Dispatchers.IO) { deviceKey -> + val factory = SupportOpenHelperFactory(deviceKey, null, false) + Room + .databaseBuilder( + applicationContext, + DownloadDatabase::class.java, + name, + ) + .openHelperFactory(factory) + .addTypeConverter(DownloadDatabaseTypeConverter()) + .build() + // Try to open the database, so, if we have any + // major problems, it fails immediately. + .also { db -> + db.openHelper.writableDatabase + } + } + .retry { e, attempt -> + // TODO: Would be nice to log this exception. + val fatalException = e is IllegalStateException || + e is SQLException + if (fatalException && attempt == 0) { + applicationContext.deleteDatabase(name) + return@retry true + } + + false + } + .shared() + + fun get() = dbIo + + fun mutate( + block: suspend (DownloadDatabase) -> T, + ) = dbIo + .effectMap(Dispatchers.IO) { db -> + dbMutex.withLock { + block(db) + } + } + + fun migrateIfExists( + sqld: Database, + ): IO = ioEffect(Dispatchers.IO) { + val room = dbIo.bind() + // Nothing to migrate. + ?: return@ioEffect + room.withTransaction { + val generatorHistory = room.generatorDao().getAll().first() + sqld.transaction { + generatorHistory.forEach { item -> + sqld.generatorHistoryQueries.insert( + value_ = item.value, + createdAt = item.createdDate, + isPassword = item.isPassword, + isUsername = item.isUsername, + isEmailRelay = false, + ) + } + } + room.generatorDao().removeAll() + } + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseTypeConverter.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseTypeConverter.kt new file mode 100644 index 00000000..e230da5f --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/downloader/journal/room/DownloadDatabaseTypeConverter.kt @@ -0,0 +1,14 @@ +package com.artemchep.keyguard.android.downloader.journal.room + +import androidx.room.ProvidedTypeConverter +import androidx.room.TypeConverter +import kotlinx.datetime.Instant + +@ProvidedTypeConverter +class DownloadDatabaseTypeConverter { + @TypeConverter + fun instantToLong(instant: Instant) = instant.toEpochMilliseconds() + + @TypeConverter + fun longToInstant(epochMilliseconds: Long) = Instant.fromEpochMilliseconds(epochMilliseconds) +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/android/downloader/journal/room/DownloadInfoDao.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/downloader/journal/room/DownloadInfoDao.kt new file mode 100644 index 00000000..680e86d9 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/downloader/journal/room/DownloadInfoDao.kt @@ -0,0 +1,53 @@ +package com.artemchep.keyguard.android.downloader.journal.room + +import androidx.room.Dao +import androidx.room.Insert +import androidx.room.OnConflictStrategy +import androidx.room.Query +import kotlinx.coroutines.flow.Flow + +@Dao +interface DownloadInfoDao { + @Insert(onConflict = OnConflictStrategy.REPLACE) + suspend fun insertAll(vararg info: DownloadInfoEntity) + + @Query("SELECT * FROM DownloadInfoEntity WHERE id = :id") + suspend fun getById(id: String): DownloadInfoEntity? + + @Query("SELECT * FROM DownloadInfoEntity WHERE id = :id") + fun getByIdFlow(id: String): Flow> + + @Query( + """ + SELECT * FROM DownloadInfoEntity WHERE + localCipherId = :localCipherId AND + remoteCipherId = :remoteCipherId AND + attachmentId = :attachmentId + """, + ) + suspend fun getByTag( + localCipherId: String, + remoteCipherId: String?, + attachmentId: String, + ): DownloadInfoEntity? + + @Query("SELECT * FROM DownloadInfoEntity") + fun getAll(): Flow> + + @Query("DELETE FROM DownloadInfoEntity WHERE id = :id") + suspend fun removeById(id: String) + + @Query( + """ + DELETE FROM DownloadInfoEntity WHERE + localCipherId = :localCipherId AND + remoteCipherId = :remoteCipherId AND + attachmentId = :attachmentId + """, + ) + suspend fun removeByTag( + localCipherId: String, + remoteCipherId: String?, + attachmentId: String, + ) +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/android/downloader/journal/room/DownloadInfoEntity.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/downloader/journal/room/DownloadInfoEntity.kt new file mode 100644 index 00000000..db3a86a8 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/downloader/journal/room/DownloadInfoEntity.kt @@ -0,0 +1,90 @@ +package com.artemchep.keyguard.android.downloader.journal.room + +import androidx.room.Embedded +import androidx.room.Entity +import com.artemchep.keyguard.ui.canRetry +import kotlinx.datetime.Instant + +@Entity( + primaryKeys = [ + "id", + ], +) +data class DownloadInfoEntity( + val id: String, + val localCipherId: String, + val remoteCipherId: String?, + val attachmentId: String, + val url: String, + val urlIsOneTime: Boolean, + val name: String, + val createdDate: Instant, + val revisionDate: Instant = createdDate, + /** + * Encryption key used to decrypt the source + * url after downloading. + */ + val encryptionKeyBase64: String? = null, + /** + * Last downloading / decryption error, you can use it + * to find out if you can retry the downloading or if + * it should be done manually. + */ + @Embedded + val error: Error? = null, +) { + // must be data class + data class AttachmentDownloadTag( + val localCipherId: String, // to be able to find the right account for the item + val remoteCipherId: String?, + val attachmentId: String, + ) + + data class Error( + val code: Int, + val attempt: Int = 1, + val message: String? = null, + ) { + fun canRetry() = code.canRetry() && attempt <= 3 + } +} + +fun DownloadInfoEntity2.toEntity() = DownloadInfoEntity( + id = id, + localCipherId = localCipherId, + remoteCipherId = remoteCipherId, + attachmentId = attachmentId, + url = url, + urlIsOneTime = urlIsOneTime, + name = name, + createdDate = createdDate, + revisionDate = revisionDate, + encryptionKeyBase64 = encryptionKeyBase64, + error = error?.toEntity(), +) + +fun DownloadInfoEntity2.Error.toEntity() = DownloadInfoEntity.Error( + code = code, + attempt = attempt, + message = message, +) + +fun DownloadInfoEntity.toDomain() = DownloadInfoEntity2( + id = id, + localCipherId = localCipherId, + remoteCipherId = remoteCipherId, + attachmentId = attachmentId, + url = url, + urlIsOneTime = urlIsOneTime, + name = name, + createdDate = createdDate, + revisionDate = revisionDate, + encryptionKeyBase64 = encryptionKeyBase64, + error = error?.toDomain(), +) + +fun DownloadInfoEntity.Error.toDomain() = DownloadInfoEntity2.Error( + code = code, + attempt = attempt, + message = message, +) diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/android/downloader/journal/room/GeneratorDao.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/downloader/journal/room/GeneratorDao.kt new file mode 100644 index 00000000..435f6c75 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/downloader/journal/room/GeneratorDao.kt @@ -0,0 +1,24 @@ +package com.artemchep.keyguard.android.downloader.journal.room + +import androidx.room.Dao +import androidx.room.Insert +import androidx.room.OnConflictStrategy +import androidx.room.Query +import kotlinx.coroutines.flow.Flow + +private const val HISTORY_FETCH_LIMIT = 10_000 + +@Dao +interface GeneratorDao { + @Insert(onConflict = OnConflictStrategy.REPLACE) + suspend fun insertAll(vararg info: GeneratorEntity) + + @Query("SELECT * FROM GeneratorEntity ORDER BY createdDate DESC LIMIT $HISTORY_FETCH_LIMIT") + fun getAll(): Flow> + + @Query("DELETE FROM GeneratorEntity") + suspend fun removeAll() + + @Query("DELETE FROM GeneratorEntity WHERE id IN (:ids)") + suspend fun removeByIds(ids: Set) +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/android/downloader/journal/room/GeneratorEntity.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/downloader/journal/room/GeneratorEntity.kt new file mode 100644 index 00000000..9e0f8e3a --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/downloader/journal/room/GeneratorEntity.kt @@ -0,0 +1,17 @@ +package com.artemchep.keyguard.android.downloader.journal.room + +import androidx.room.Entity +import kotlinx.datetime.Instant + +@Entity( + primaryKeys = [ + "id", + ], +) +data class GeneratorEntity( + val id: String, + val value: String, + val createdDate: Instant, + val isPassword: Boolean, + val isUsername: Boolean, +) diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/android/downloader/receiver/AttachmentDownloadActionReceiver.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/downloader/receiver/AttachmentDownloadActionReceiver.kt new file mode 100644 index 00000000..dd2b598f --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/downloader/receiver/AttachmentDownloadActionReceiver.kt @@ -0,0 +1,66 @@ +package com.artemchep.keyguard.android.downloader.receiver + +import android.content.BroadcastReceiver +import android.content.ComponentName +import android.content.Context +import android.content.Intent +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.model.RemoveAttachmentRequest +import com.artemchep.keyguard.common.usecase.RemoveAttachment +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import org.kodein.di.android.closestDI +import org.kodein.di.instance + +class AttachmentDownloadActionReceiver : BroadcastReceiver() { + companion object { + const val ACTION_ATTACHMENT_DOWNLOAD_CANCEL = ".ACTION_ATTACHMENT_DOWNLOAD_CANCEL" + + const val KEY_DOWNLOAD_ID = "download_id" + + fun cancel( + context: Context, + downloadId: String, + ): Intent = intent( + context = context, + suffix = ACTION_ATTACHMENT_DOWNLOAD_CANCEL, + ) { + putExtra(KEY_DOWNLOAD_ID, downloadId) + } + + fun intent( + context: Context, + suffix: String, + builder: Intent.() -> Unit = {}, + ): Intent { + val action = kotlin.run { + val packageName = context.packageName + "$packageName$suffix" + } + return Intent(action).apply { + component = ComponentName(context, AttachmentDownloadActionReceiver::class.java) + builder() + } + } + } + + override fun onReceive(context: Context, intent: Intent) { + val action = intent.action + ?: return + val di by closestDI { context } + when { + action.endsWith(ACTION_ATTACHMENT_DOWNLOAD_CANCEL) -> { + val downloadId = intent.extras?.getString(KEY_DOWNLOAD_ID) + ?: return + val windowCoroutineScope: WindowCoroutineScope by di.instance() + val removeIo = kotlin.run { + val request = RemoveAttachmentRequest.ByDownloadId( + downloadId = downloadId, + ) + val removeAttachment: RemoveAttachment by di.instance() + removeAttachment(listOf(request)) + } + removeIo.launchIn(windowCoroutineScope) + } + } + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/android/downloader/receiver/CopyActionReceiver.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/downloader/receiver/CopyActionReceiver.kt new file mode 100644 index 00000000..588efbff --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/downloader/receiver/CopyActionReceiver.kt @@ -0,0 +1,58 @@ +package com.artemchep.keyguard.android.downloader.receiver + +import android.content.BroadcastReceiver +import android.content.ComponentName +import android.content.Context +import android.content.Intent +import com.artemchep.keyguard.common.service.clipboard.ClipboardService +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import org.kodein.di.android.closestDI +import org.kodein.di.instance + +class CopyActionReceiver : BroadcastReceiver() { + companion object { + const val ACTION_ATTACHMENT_DOWNLOAD_CANCEL = ".ACTION_COPY" + + const val KEY_DOWNLOAD_ID = "download_id" + + fun cancel( + context: Context, + value: String, + ): Intent = intent( + context = context, + suffix = ACTION_ATTACHMENT_DOWNLOAD_CANCEL, + ) { + putExtra(KEY_DOWNLOAD_ID, value) + } + + fun intent( + context: Context, + suffix: String, + builder: Intent.() -> Unit = {}, + ): Intent { + val action = kotlin.run { + val packageName = context.packageName + "$packageName$suffix" + } + return Intent(action).apply { + component = ComponentName(context, CopyActionReceiver::class.java) + builder() + } + } + } + + override fun onReceive(context: Context, intent: Intent) { + val action = intent.action + ?: return + val di by closestDI { context } + when { + action.endsWith(ACTION_ATTACHMENT_DOWNLOAD_CANCEL) -> { + val value = intent.extras?.getString(KEY_DOWNLOAD_ID) + ?: return + val windowCoroutineScope: WindowCoroutineScope by di.instance() + val clipboardService: ClipboardService by di.instance() + clipboardService.setPrimaryClip(value, false) + } + } + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/android/downloader/worker/AttachmentDownloadAllWorker.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/downloader/worker/AttachmentDownloadAllWorker.kt new file mode 100644 index 00000000..28a3c6a6 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/downloader/worker/AttachmentDownloadAllWorker.kt @@ -0,0 +1,68 @@ +package com.artemchep.keyguard.android.downloader.worker + +import android.content.Context +import androidx.work.Constraints +import androidx.work.CoroutineWorker +import androidx.work.ExistingPeriodicWorkPolicy +import androidx.work.NetworkType +import androidx.work.Operation +import androidx.work.PeriodicWorkRequestBuilder +import androidx.work.WorkManager +import androidx.work.WorkerParameters +import com.artemchep.keyguard.android.downloader.journal.DownloadRepository +import kotlinx.coroutines.flow.first +import org.kodein.di.DIAware +import org.kodein.di.android.closestDI +import org.kodein.di.instance +import java.util.concurrent.TimeUnit + +class AttachmentDownloadAllWorker( + context: Context, + params: WorkerParameters, +) : CoroutineWorker(context, params), DIAware { + companion object { + private const val WORK_ID = "AttachmentDownloadAllWorker" + + fun enqueue( + context: Context, + ): Operation { + val request = PeriodicWorkRequestBuilder( + repeatInterval = 8, + repeatIntervalTimeUnit = TimeUnit.HOURS, + flexTimeInterval = 1, + flexTimeIntervalUnit = TimeUnit.HOURS, + ) + .setConstraints( + Constraints.Builder() + .setRequiredNetworkType(NetworkType.CONNECTED) + .build(), + ) + .build() + return WorkManager + .getInstance(context) + .enqueueUniquePeriodicWork(WORK_ID, ExistingPeriodicWorkPolicy.KEEP, request) + } + } + + override val di by closestDI { applicationContext } + + override suspend fun doWork(): Result { + val downloadRepository: DownloadRepository by instance() + // Check what downloads we currently have and + // start the unfinished ones again. + val downloadList = downloadRepository.get().first() + downloadList.forEach { downloadInfo -> + val context = applicationContext + val args = AttachmentDownloadWorker.Args( + downloadId = downloadInfo.id, + ) + AttachmentDownloadWorker.enqueueOnce( + context = context, + args = args, + ) + } + return Result.success() + } + + override suspend fun getForegroundInfo() = TODO() +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/android/downloader/worker/AttachmentDownloadWorker.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/downloader/worker/AttachmentDownloadWorker.kt new file mode 100644 index 00000000..06557401 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/downloader/worker/AttachmentDownloadWorker.kt @@ -0,0 +1,332 @@ +package com.artemchep.keyguard.android.downloader.worker + +import android.app.NotificationChannel +import android.app.NotificationManager +import android.app.PendingIntent +import android.content.Context +import android.content.pm.ServiceInfo +import android.os.Build +import android.util.Log +import androidx.core.app.NotificationCompat +import androidx.core.content.getSystemService +import androidx.work.BackoffPolicy +import androidx.work.Constraints +import androidx.work.CoroutineWorker +import androidx.work.Data +import androidx.work.ExistingWorkPolicy +import androidx.work.ForegroundInfo +import androidx.work.NetworkType +import androidx.work.OneTimeWorkRequestBuilder +import androidx.work.Operation +import androidx.work.OutOfQuotaPolicy +import androidx.work.WorkManager +import androidx.work.WorkerParameters +import com.artemchep.keyguard.android.Notifications +import com.artemchep.keyguard.android.downloader.journal.DownloadRepository +import com.artemchep.keyguard.android.downloader.receiver.AttachmentDownloadActionReceiver +import com.artemchep.keyguard.android.downloader.withId +import com.artemchep.keyguard.common.R +import com.artemchep.keyguard.common.io.attempt +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.io.timeout +import com.artemchep.keyguard.common.io.toIO +import com.artemchep.keyguard.common.service.download.DownloadManager +import com.artemchep.keyguard.common.service.download.DownloadProgress +import com.artemchep.keyguard.feature.filepicker.humanReadableByteCountSI +import com.artemchep.keyguard.ui.canRetry +import com.artemchep.keyguard.ui.getHttpCode +import kotlinx.coroutines.flow.filter +import kotlinx.coroutines.flow.last +import kotlinx.coroutines.flow.onEach +import kotlinx.coroutines.flow.onStart +import kotlinx.coroutines.flow.transformWhile +import org.kodein.di.DIAware +import org.kodein.di.android.closestDI +import org.kodein.di.instance +import java.util.concurrent.TimeUnit +import kotlin.math.roundToInt + +class AttachmentDownloadWorker( + context: Context, + params: WorkerParameters, +) : CoroutineWorker(context, params), DIAware { + companion object { + private const val WORK_ID = "AttachmentDownloadWorker" + + private const val PROGRESS_MAX = 100 + + fun enqueueOnce( + context: Context, + args: Args, + ): Operation { + val data = Data.Builder() + .apply { + args.populate(this) + } + .build() + val request = OneTimeWorkRequestBuilder() + .setConstraints( + Constraints.Builder() + .setRequiredNetworkType(NetworkType.CONNECTED) + .build(), + ) + .setInputData(data) + .setBackoffCriteria(BackoffPolicy.EXPONENTIAL, 1, TimeUnit.MINUTES) + .build() + val workId = buildWorkKey(args.downloadId) + return WorkManager + .getInstance(context) + .enqueueUniqueWork(workId, ExistingWorkPolicy.KEEP, request) + } + + private fun buildWorkKey(id: String) = "$WORK_ID:$id" + } + + data class Args( + val downloadId: String, + ) { + companion object { + private const val KEY_DOWNLOAD_ID = "download_id" + + fun of(data: Data) = Args( + downloadId = data.getString(KEY_DOWNLOAD_ID)!!, + ) + } + + fun populate(builder: Data.Builder) { + builder.putString(KEY_DOWNLOAD_ID, downloadId) + } + } + + override val di by closestDI { applicationContext } + + private val notificationManager = context.getSystemService()!! + + private var notificationId = Notifications.downloads.obtainId() + + override suspend fun doWork(): Result = run { + val args = Args.of(inputData) + internalDoWork( + notificationId = notificationId, + args = args, + ) + } + + private suspend fun internalDoWork( + notificationId: Int, + args: Args, + ): Result { + val downloadManager: DownloadManager by instance() + val downloadRepository: DownloadRepository by instance() + + val downloadInfo = downloadRepository.getById(id = args.downloadId) + .bind() + // Failed to start the downloading. This happens mostly if you cancel the + // downloading immediately after clicking download. + ?: return Result.failure() + // Check if we are allowed to start downloading. + + val downloadStatusFlow = kotlin.run { + val downloadIsOneTime = downloadInfo.urlIsOneTime + val downloadFailed = downloadInfo.error != null && !downloadInfo.error.canRetry() + if (downloadIsOneTime || downloadFailed) { + // We can not restart the download, but we + // can check if it's already there. + val downloadStatusFlow = downloadManager + .statusByDownloadId2(downloadId = downloadInfo.id) + // ...check if the status is other then None. + val result = downloadStatusFlow + .filter { it !is DownloadProgress.None } + .toIO() + .timeout(500L) + .attempt() + .bind() + if (result.isLeft()) { + return Result.failure() + } + downloadStatusFlow + } else { + // Start downloading. + downloadManager + .queue(downloadInfo = downloadInfo) + .flow + } + } + + val result = downloadStatusFlow + .onStart { + val foregroundInfo = createForegroundInfo( + id = notificationId, + downloadId = downloadInfo.id, + name = downloadInfo.name, + progress = null, + ) + setForeground(foregroundInfo) + } + .onEach { progress -> + when (progress) { + is DownloadProgress.None -> { + val foregroundInfo = createForegroundInfo( + id = notificationId, + downloadId = downloadInfo.id, + name = downloadInfo.name, + progress = null, + ) + setForeground(foregroundInfo) + } + + is DownloadProgress.Loading -> { + val downloadedFormatted = progress.downloaded + ?.let(::humanReadableByteCountSI) + val totalFormatted = progress.total + ?.let(::humanReadableByteCountSI) + + val p = progress.percentage + val foregroundInfo = createForegroundInfo( + id = notificationId, + downloadId = downloadInfo.id, + name = downloadInfo.name, + progress = p, + downloaded = downloadedFormatted, + total = totalFormatted, + ) + setForeground(foregroundInfo) + } + + is DownloadProgress.Complete -> { + // Do nothing + return@onEach + } + } + } + // complete once we finish the download + .transformWhile { progress -> + emit(progress) // always emit progress + progress !is DownloadProgress.Complete + } + .last() + require(result is DownloadProgress.Complete) + return result.result + .fold( + ifLeft = { e -> + val canRetry = e.getHttpCode().canRetry() + if (canRetry) { + Result.retry() + } else { + Result.failure() + } + }, + ifRight = { + Result.success() + }, + ) + } + + override suspend fun getForegroundInfo() = createForegroundInfo(notificationId) + + // + // Notification + // + + // Creates an instance of ForegroundInfo which can be used to update the + // ongoing notification. + private fun createForegroundInfo( + id: Int, + downloadId: String, + name: String, + progress: Float? = null, + downloaded: String? = null, + total: String? = null, + ): ForegroundInfo { + val notification = kotlin.run { + val channelId = createAttachmentDownloadChannel() + + // Progress + val progressMax = PROGRESS_MAX + val progressCurrent = progress?.times(progressMax)?.roundToInt() + ?: progressMax + val progressIndeterminate = progress == null + + // Action + val cancelAction = kotlin.run { + val cancelAction = kotlin.run { + val intent = AttachmentDownloadActionReceiver.cancel( + context = applicationContext, + downloadId = downloadId, + ) + PendingIntent.getBroadcast( + applicationContext, + id, + intent, + PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT, + ) + } + val cancelTitle = "Cancel" + NotificationCompat.Action.Builder(R.drawable.ic_cancel, cancelTitle, cancelAction) + .build() + } + + NotificationCompat.Builder(applicationContext, channelId) + .setForegroundServiceBehavior(NotificationCompat.FOREGROUND_SERVICE_DEFERRED) + .addAction(cancelAction) + .setContentTitle(name) + .setGroup(WORK_ID) + .setTicker(name) + .run { + if (downloaded != null || total != null) { + val downloadedOrEmpty = downloaded ?: "--" + val totalOrEmpty = total ?: "--" + val info = "$downloadedOrEmpty / $totalOrEmpty" + setContentText(info) + } else { + this + } + } + .setProgress(progressMax, progressCurrent, progressIndeterminate) + .setSmallIcon(android.R.drawable.stat_sys_download) + .setOnlyAlertOnce(true) + .setOngoing(true) + .build() + } + return ForegroundInfo( + id, + notification, + ServiceInfo.FOREGROUND_SERVICE_TYPE_DATA_SYNC, + ) + } + + private fun createForegroundInfo( + id: Int, + ): ForegroundInfo { + val notification = kotlin.run { + val title = applicationContext.getString(R.string.notification_attachment_download_title) + val channelId = createAttachmentDownloadChannel() + NotificationCompat.Builder(applicationContext, channelId) + .setForegroundServiceBehavior(NotificationCompat.FOREGROUND_SERVICE_DEFERRED) + .setContentTitle(title) + .setGroup(WORK_ID) + .setSmallIcon(android.R.drawable.stat_sys_download) + .setOnlyAlertOnce(true) + .setOngoing(true) + .build() + } + return ForegroundInfo( + id, + notification, + ServiceInfo.FOREGROUND_SERVICE_TYPE_DATA_SYNC, + ) + } + + private fun createAttachmentDownloadChannel(): String { + val channel = kotlin.run { + val id = + applicationContext.getString(R.string.notification_attachment_download_channel_id) + val name = + applicationContext.getString(R.string.notification_attachment_download_channel_name) + NotificationChannel(id, name, NotificationManager.IMPORTANCE_LOW) + } + channel.enableVibration(false) + notificationManager.createNotificationChannel(channel) + return channel.id + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/android/glide/KeyguardGlideModule.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/glide/KeyguardGlideModule.kt new file mode 100644 index 00000000..dbaa9b09 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/glide/KeyguardGlideModule.kt @@ -0,0 +1,44 @@ +package com.artemchep.keyguard.android.glide + +import android.content.Context +import android.graphics.Bitmap +import android.graphics.drawable.Drawable +import com.artemchep.keyguard.android.glide.app.AppIconLoader +import com.artemchep.keyguard.android.glide.gravatar.GravatarLoader +import com.artemchep.keyguard.android.glide.qr.QrLoader +import com.artemchep.keyguard.android.glide.website.FaviconLoader +import com.artemchep.keyguard.common.model.BarcodeImageRequest +import com.artemchep.keyguard.feature.favicon.AppIconUrl +import com.artemchep.keyguard.feature.favicon.FaviconUrl +import com.artemchep.keyguard.feature.favicon.GravatarUrl +import com.bumptech.glide.Glide +import com.bumptech.glide.Registry +import com.bumptech.glide.annotation.GlideModule +import com.bumptech.glide.module.AppGlideModule +import org.kodein.di.android.closestDI +import org.kodein.di.direct +import org.kodein.di.instance +import java.io.InputStream + +@GlideModule +class KeyguardGlideModule : AppGlideModule() { + override fun registerComponents(context: Context, glide: Glide, registry: Registry) { + val di by closestDI { context } + + registry.prepend( + AppIconUrl::class.java, + Bitmap::class.java, + AppIconLoader.Factory(context.packageManager), + ) + registry.prepend( + BarcodeImageRequest::class.java, + Drawable::class.java, + QrLoader.Factory( + context = context, + getBarcodeImage = di.direct.instance(), + ), + ) + registry.prepend(FaviconUrl::class.java, InputStream::class.java, FaviconLoader.Factory()) + registry.prepend(GravatarUrl::class.java, InputStream::class.java, GravatarLoader.Factory()) + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/android/glide/app/AppIconLoader.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/glide/app/AppIconLoader.kt new file mode 100644 index 00000000..48f210b8 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/glide/app/AppIconLoader.kt @@ -0,0 +1,99 @@ +package com.artemchep.keyguard.android.glide.app + +import android.content.pm.PackageManager +import android.graphics.Bitmap +import android.graphics.Canvas +import android.graphics.drawable.Drawable +import com.artemchep.keyguard.feature.favicon.AppIconUrl +import com.bumptech.glide.Priority +import com.bumptech.glide.load.DataSource +import com.bumptech.glide.load.Options +import com.bumptech.glide.load.data.DataFetcher +import com.bumptech.glide.load.model.ModelLoader +import com.bumptech.glide.load.model.ModelLoaderFactory +import com.bumptech.glide.load.model.MultiModelLoaderFactory +import com.bumptech.glide.signature.ObjectKey + +class AppIconLoader( + private val packageManager: PackageManager, +) : ModelLoader { + class Factory( + private val packageManager: PackageManager, + ) : ModelLoaderFactory { + override fun build( + multiFactory: MultiModelLoaderFactory, + ): ModelLoader = AppIconLoader( + packageManager = packageManager, + ) + + override fun teardown() { + } + } + + override fun buildLoadData( + model: AppIconUrl, + width: Int, + height: Int, + options: Options, + ): ModelLoader.LoadData { + val packageName = model.packageName + return ModelLoader.LoadData( + ObjectKey(model.packageName), + Fetcher( + packageManager = packageManager, + packageName = packageName, + ), + ) + } + + class Fetcher( + private val packageManager: PackageManager, + private val packageName: String, + ) : DataFetcher { + override fun loadData( + priority: Priority, + callback: DataFetcher.DataCallback, + ) { + val icon = getApplicationIcon(packageName) + if (icon != null) { + val bitmap = Bitmap.createBitmap( + icon.intrinsicWidth, + icon.intrinsicHeight, + Bitmap.Config.ARGB_8888, + ) + val canvas = Canvas(bitmap) + icon.setBounds(0, 0, icon.intrinsicWidth, icon.intrinsicHeight) + icon.draw(canvas) + callback.onDataReady(bitmap) + } else { + callback.onLoadFailed(RuntimeException()) + } + } + + private fun getApplicationIcon(packageName: String): Drawable? { + if (packageName.isEmpty()) { + // no need to check if empty package is installed + return null + } + val appIcon = try { + packageManager.getApplicationIcon(packageName) + } catch (e: PackageManager.NameNotFoundException) { + return null + } + + return appIcon + } + + override fun cleanup() { + } + + override fun cancel() { + } + + override fun getDataClass(): Class = Bitmap::class.java + + override fun getDataSource(): DataSource = DataSource.LOCAL + } + + override fun handles(model: AppIconUrl): Boolean = true +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/android/glide/gravatar/GravatarLoader.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/glide/gravatar/GravatarLoader.kt new file mode 100644 index 00000000..34767d2f --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/glide/gravatar/GravatarLoader.kt @@ -0,0 +1,86 @@ +package com.artemchep.keyguard.android.glide.gravatar + +import android.net.Uri +import com.artemchep.keyguard.android.glide.util.combineModelLoaders +import com.artemchep.keyguard.feature.favicon.GravatarUrl +import com.bumptech.glide.Priority +import com.bumptech.glide.load.DataSource +import com.bumptech.glide.load.Options +import com.bumptech.glide.load.data.DataFetcher +import com.bumptech.glide.load.model.ModelLoader +import com.bumptech.glide.load.model.ModelLoaderFactory +import com.bumptech.glide.load.model.MultiModelLoaderFactory +import com.bumptech.glide.signature.ObjectKey +import java.io.InputStream + +class GravatarLoader : ModelLoader { + class Factory : ModelLoaderFactory { + override fun build(multiFactory: MultiModelLoaderFactory) = kotlin.run { + val aModelLoader = GravatarLoader() + val bModelLoader = multiFactory.build(Uri::class.java, InputStream::class.java) + combineModelLoaders( + aModelLoader, + bModelLoader, + ) + } + + override fun teardown() { + // Do nothing. + } + } + + override fun buildLoadData( + model: GravatarUrl, + width: Int, + height: Int, + options: Options, + ): ModelLoader.LoadData? { + return ModelLoader.LoadData( + ObjectKey(model.url), + Fetcher( + model = model, + ), + ) + } + + override fun handles(model: GravatarUrl): Boolean = true + + class Fetcher( + private val model: GravatarUrl, + ) : DataFetcher { + override fun loadData( + priority: Priority, + callback: DataFetcher.DataCallback, + ) { + kotlin.runCatching { + val finalUrl = model.url + finalUrl.let { Uri.parse(it) } + }.fold( + onFailure = { e -> + if (e is Exception) { + callback.onLoadFailed(e) + } else { + callback.onLoadFailed(IllegalStateException(e)) + } + }, + onSuccess = { imageUrl -> + if (imageUrl != null) { + callback.onDataReady(imageUrl) + } else { + callback.onLoadFailed(NullPointerException()) + } + }, + ) + } + + override fun cleanup() { + } + + override fun cancel() { + } + + override fun getDataClass(): Class = Uri::class.java + + override fun getDataSource(): DataSource = DataSource.REMOTE + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/android/glide/qr/QrLoader.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/glide/qr/QrLoader.kt new file mode 100644 index 00000000..2307a8d6 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/glide/qr/QrLoader.kt @@ -0,0 +1,96 @@ +package com.artemchep.keyguard.android.glide.qr + +import android.content.Context +import android.graphics.drawable.BitmapDrawable +import android.graphics.drawable.Drawable +import androidx.compose.ui.graphics.asAndroidBitmap +import com.artemchep.keyguard.common.io.attempt +import com.artemchep.keyguard.common.io.bindBlocking +import com.artemchep.keyguard.common.model.BarcodeImageRequest +import com.artemchep.keyguard.common.usecase.GetBarcodeImage +import com.bumptech.glide.Priority +import com.bumptech.glide.load.DataSource +import com.bumptech.glide.load.Options +import com.bumptech.glide.load.data.DataFetcher +import com.bumptech.glide.load.model.ModelLoader +import com.bumptech.glide.load.model.ModelLoaderFactory +import com.bumptech.glide.load.model.MultiModelLoaderFactory +import com.bumptech.glide.signature.ObjectKey + +class QrLoader( + private val context: Context, + private val getBarcodeImage: GetBarcodeImage, +) : ModelLoader { + class Factory( + private val context: Context, + private val getBarcodeImage: GetBarcodeImage, + ) : ModelLoaderFactory { + override fun build( + multiFactory: MultiModelLoaderFactory, + ): ModelLoader = QrLoader( + context = context, + getBarcodeImage = getBarcodeImage, + ) + + override fun teardown() { + } + } + + override fun buildLoadData( + model: BarcodeImageRequest, + width: Int, + height: Int, + options: Options, + ): ModelLoader.LoadData { + val newSize = model.size ?: BarcodeImageRequest.Size( + width = width, + height = height, + ) + val newModel = model.copy(size = newSize) + return ModelLoader.LoadData( + ObjectKey(model), + Fetcher( + context = context, + getBarcodeImage = getBarcodeImage, + model = newModel, + ), + ) + } + + class Fetcher( + private val context: Context, + private val getBarcodeImage: GetBarcodeImage, + private val model: BarcodeImageRequest, + ) : DataFetcher { + override fun loadData( + priority: Priority, + callback: DataFetcher.DataCallback, + ) { + getBarcodeImage(model) + .attempt() + .bindBlocking() + .fold( + ifLeft = { + val e = it as? Exception ?: RuntimeException(it) + callback.onLoadFailed(e) + }, + ifRight = { bitmap -> + val drawable = BitmapDrawable(context.resources, bitmap.asAndroidBitmap()) + callback.onDataReady(drawable) + }, + ) + } + + override fun cleanup() { + } + + override fun cancel() { + } + + override fun getDataClass(): Class = Drawable::class.java + + override fun getDataSource(): DataSource = DataSource.MEMORY_CACHE + } + + override fun handles(model: BarcodeImageRequest): Boolean = true +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/android/glide/util/Util.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/glide/util/Util.kt new file mode 100644 index 00000000..2429bf9f --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/glide/util/Util.kt @@ -0,0 +1,67 @@ +package com.artemchep.keyguard.android.glide.util + +import com.bumptech.glide.Priority +import com.bumptech.glide.load.DataSource +import com.bumptech.glide.load.Options +import com.bumptech.glide.load.data.DataFetcher +import com.bumptech.glide.load.model.ModelLoader + +inline fun combineModelLoaders( + a: ModelLoader, + b: ModelLoader, +): ModelLoader = object : ModelLoader { + override fun buildLoadData( + model: In, + width: Int, + height: Int, + options: Options, + ): ModelLoader.LoadData? { + val aFetcher = a.buildLoadData(model, width, height, options) + ?: return null + val bFetcher = object : DataFetcher { + private var z: DataFetcher? = null + + override fun loadData( + priority: Priority, + callback: DataFetcher.DataCallback, + ) { + aFetcher.fetcher.loadData( + priority, + object : DataFetcher.DataCallback { + override fun onDataReady(data: T?) { + val f = b.buildLoadData(data!!, width, height, options) + if (f != null) { + z = f.fetcher + f.fetcher.loadData(priority, callback) + } else { + callback.onLoadFailed(IllegalStateException()) + } + } + + override fun onLoadFailed(e: Exception) { + callback.onLoadFailed(e) + } + }, + ) + } + + override fun cleanup() { + z?.cleanup() + } + + override fun cancel() { + z?.cancel() + } + + override fun getDataClass(): Class = Out::class.java + + override fun getDataSource(): DataSource = aFetcher.fetcher.dataSource + } + return ModelLoader.LoadData( + aFetcher.sourceKey, + bFetcher, + ) + } + + override fun handles(model: In): Boolean = a.handles(model) +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/android/glide/website/FaviconLoader.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/glide/website/FaviconLoader.kt new file mode 100644 index 00000000..3b750f4c --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/glide/website/FaviconLoader.kt @@ -0,0 +1,105 @@ +package com.artemchep.keyguard.android.glide.website + +import android.net.Uri +import com.artemchep.keyguard.android.glide.util.combineModelLoaders +import com.artemchep.keyguard.feature.favicon.Favicon +import com.artemchep.keyguard.feature.favicon.FaviconUrl +import com.bumptech.glide.Priority +import com.bumptech.glide.load.DataSource +import com.bumptech.glide.load.Options +import com.bumptech.glide.load.data.DataFetcher +import com.bumptech.glide.load.model.ModelLoader +import com.bumptech.glide.load.model.ModelLoaderFactory +import com.bumptech.glide.load.model.MultiModelLoaderFactory +import com.bumptech.glide.signature.ObjectKey +import net.mm2d.touchicon.IconComparator +import net.mm2d.touchicon.TouchIconExtractor +import java.io.InputStream + +class FaviconLoader : ModelLoader { + class Factory : ModelLoaderFactory { + override fun build(multiFactory: MultiModelLoaderFactory) = kotlin.run { + val aModelLoader = FaviconLoader() + val bModelLoader = multiFactory.build(Uri::class.java, InputStream::class.java) + combineModelLoaders( + aModelLoader, + bModelLoader, + ) + } + + override fun teardown() { + // Do nothing. + } + } + + private val extractor = TouchIconExtractor() + + override fun buildLoadData( + model: FaviconUrl, + width: Int, + height: Int, + options: Options, + ): ModelLoader.LoadData? { + return ModelLoader.LoadData( + ObjectKey(model.url), + Fetcher( + model = model, + extractor = extractor, + ), + ) + } + + override fun handles(model: FaviconUrl): Boolean = true + + class Fetcher( + private val model: FaviconUrl, + private val extractor: TouchIconExtractor, + ) : DataFetcher { + override fun loadData( + priority: Priority, + callback: DataFetcher.DataCallback, + ) { + kotlin.runCatching { + val siteUrl = model.url + val finalUrl = kotlin.run { + val server = Favicon.getServerOrNull(model.serverId) + ?: Favicon.servers.firstOrNull() + ?: return@run extractor + .fromPage( + siteUrl = siteUrl, + withManifest = true, + ) + .maxOfWithOrNull(IconComparator.SIZE) { it } + ?.url + server.transform(siteUrl) + } + finalUrl?.let { Uri.parse(it) } + }.fold( + onFailure = { e -> + if (e is Exception) { + callback.onLoadFailed(e) + } else { + callback.onLoadFailed(IllegalStateException(e)) + } + }, + onSuccess = { imageUrl -> + if (imageUrl != null) { + callback.onDataReady(imageUrl) + } else { + callback.onLoadFailed(NullPointerException()) + } + }, + ) + } + + override fun cleanup() { + } + + override fun cancel() { + } + + override fun getDataClass(): Class = Uri::class.java + + override fun getDataSource(): DataSource = DataSource.REMOTE + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/android/shortcut/ShortcutTileService.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/shortcut/ShortcutTileService.kt new file mode 100644 index 00000000..a6db2039 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/shortcut/ShortcutTileService.kt @@ -0,0 +1,43 @@ +package com.artemchep.keyguard.android.shortcut + +import android.annotation.SuppressLint +import android.app.PendingIntent +import android.content.Intent +import android.os.Build +import android.service.quicksettings.TileService +import com.artemchep.keyguard.android.MainActivity + +class ShortcutTileService : TileService() { + override fun onClick() { + super.onClick() + if (isSecure) { + // Even tho the keyguard is gonna ask for a password, it's better + // if we force the device to be unlocked first. + unlockAndRun { + startMainActivity() + } + } else { + startMainActivity() + } + } + + @SuppressLint("StartActivityAndCollapseDeprecated") + private fun startMainActivity() { + val intent = Intent(this, MainActivity::class.java).apply { + addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) { + val flags = + PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE + val pi = PendingIntent.getActivity( + this, + 13213, + intent, + flags, + ) + startActivityAndCollapse(pi) + } else { + startActivityAndCollapse(intent) + } + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/android/util/broadcastFlow.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/util/broadcastFlow.kt new file mode 100644 index 00000000..7f6ef8eb --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/util/broadcastFlow.kt @@ -0,0 +1,51 @@ +package com.artemchep.keyguard.android.util + +import android.annotation.SuppressLint +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.content.IntentFilter +import android.os.Build +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.NonCancellable +import kotlinx.coroutines.channels.awaitClose +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.callbackFlow +import kotlinx.coroutines.flow.flowOn +import kotlinx.coroutines.withContext + +@SuppressLint("UnspecifiedRegisterReceiverFlag") +fun broadcastFlow( + context: Context, + intentFilter: IntentFilter, + /** + * If `false`, only the app itself or the system can send + * those broadcast events. + */ + exported: Boolean = false, +): Flow = callbackFlow { + val receiver = object : BroadcastReceiver() { + override fun onReceive(context: Context, intent: Intent) { + trySend(intent) + } + } + try { + if (Build.VERSION.SDK_INT >= 34) { + val flag = if (exported) { + Context.RECEIVER_EXPORTED + } else { + Context.RECEIVER_NOT_EXPORTED + } + context.registerReceiver(receiver, intentFilter, flag) + } else { + context.registerReceiver(receiver, intentFilter) + } + awaitClose() + } finally { + withContext( + context = NonCancellable + Dispatchers.Main, + ) { + context.unregisterReceiver(receiver) + } + } +}.flowOn(Dispatchers.Main) diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/android/util/screenFlow.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/util/screenFlow.kt new file mode 100644 index 00000000..db00187a --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/util/screenFlow.kt @@ -0,0 +1,117 @@ +package com.artemchep.keyguard.android.util + +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.content.IntentFilter +import android.hardware.display.DisplayManager +import android.os.PowerManager +import android.view.Display +import androidx.core.content.getSystemService +import com.artemchep.keyguard.common.model.Screen +import com.artemchep.keyguard.common.util.flow.observerFlow +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.flatMapLatest +import kotlinx.coroutines.flow.flow +import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.flow.flowOn + +private const val SCREEN_ON_CHECK_INTERVAL = 2000L + +fun screenFlow( + context: Context, +): Flow = observerFlow { callback -> + val broadcastReceiver = object : BroadcastReceiver() { + override fun onReceive(context: Context, intent: Intent) { + val screen = context.screenState() + callback(screen) + } + } + val intentFilter = IntentFilter() + .apply { + addAction(Intent.ACTION_SCREEN_OFF) + addAction(Intent.ACTION_SCREEN_ON) + } + context.registerReceiver(broadcastReceiver, intentFilter) + + val screen = context.screenState() + callback(screen) + return@observerFlow { + context.unregisterReceiver(broadcastReceiver) + } +} + .flatMapLatest { screen -> + when (screen) { + is Screen.On -> flow { + emit(screen) + + // While the screen is on, send the update every + // few seconds. This is needed because of the + // Always On mode which may not send the 'screen is off' + // broadcast. + while (true) { + delay(SCREEN_ON_CHECK_INTERVAL) + val newScreen = context.screenState() + emit(newScreen) + } + } + + else -> flowOf(screen) + } + } + .flowOn(Dispatchers.Main) + .distinctUntilChanged() + +/** + * It does not store the screen state, it + * retrieves it every time. + */ +private fun Context.screenState(): Screen = + when (isScreenOn()) { + true -> Screen.On + false -> Screen.Off + } + +/** + * Returns `true` if the screen is turned on, + * `false` otherwise. + */ +private fun Context.isScreenOn(): Boolean { + run { + val dm = getSystemService() + val displays = dm?.getDisplays(null)?.takeIf { it.isNotEmpty() } ?: return@run + + var display: Display? = null + for (d in displays) { + val virtual = d.flags.and(Display.FLAG_PRESENTATION) != 0 + if (d.isValid && !virtual) { + display = d + + val type: Int + try { + val method = Display::class.java.getDeclaredMethod("getType") + method.isAccessible = true + type = method.invoke(d) as Int + } catch (e: Exception) { + continue + } + + if (type == 1 /* built-in display */) { + break + } + } + } + + if (display == null) { + return false + } + + return display.state == Display.STATE_ON + } + + val pm = getSystemService() + return pm?.isInteractive ?: false +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/android/worker/AttachmentUploadWorker.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/worker/AttachmentUploadWorker.kt new file mode 100644 index 00000000..fcf6e1da --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/worker/AttachmentUploadWorker.kt @@ -0,0 +1,223 @@ +package com.artemchep.keyguard.android.worker + +import android.app.NotificationChannel +import android.app.NotificationManager +import android.content.Context +import android.content.pm.ServiceInfo +import android.util.Log +import androidx.core.app.NotificationCompat +import androidx.core.content.getSystemService +import androidx.work.Constraints +import androidx.work.ExistingWorkPolicy +import androidx.work.ForegroundInfo +import androidx.work.NetworkType +import androidx.work.OneTimeWorkRequestBuilder +import androidx.work.Operation +import androidx.work.WorkManager +import androidx.work.WorkerParameters +import com.artemchep.keyguard.android.worker.util.SessionWorker +import com.artemchep.keyguard.common.R +import com.artemchep.keyguard.common.model.DSecret +import com.artemchep.keyguard.common.usecase.GetCiphers +import kotlinx.collections.immutable.persistentMapOf +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Job +import kotlinx.coroutines.coroutineScope +import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.collect +import kotlinx.coroutines.flow.drop +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.scan +import kotlinx.coroutines.flow.takeWhile +import kotlinx.coroutines.launch +import kotlinx.coroutines.sync.Semaphore +import kotlinx.coroutines.sync.withPermit +import org.kodein.di.DI +import org.kodein.di.DIAware +import org.kodein.di.direct +import org.kodein.di.instance + +class AttachmentUploadWorker( + context: Context, + params: WorkerParameters, +) : SessionWorker(context, params), DIAware { + companion object { + private const val WORK_ID = "AttachmentUploadWorker" + + val constraints + get() = Constraints.Builder() + .setRequiredNetworkType(NetworkType.CONNECTED) + .build() + + fun enqueueOnce(context: Context): Operation { + val uploadWorkRequest = OneTimeWorkRequestBuilder() + .setConstraints(constraints) + .build() + return WorkManager + .getInstance(context) + .enqueueUniqueWork(WORK_ID, ExistingWorkPolicy.APPEND_OR_REPLACE, uploadWorkRequest) + } + } + + private val notificationManager = context.getSystemService()!! + + override suspend fun doWork(): Result { + val foregroundInfo = createForegroundInfo("TODO") + setForeground(foregroundInfo) + return super.doWork() + } + + private data class UploadAttachmentRequest( + val key: CompositeKey, + val attachment: DSecret.Attachment.Local, + ) { + data class CompositeKey( + val accountId: String, + val cipherId: String, + val organizationId: String?, + val attachmentId: String, + ) + } + + private data class UploadAttachmentJob( + val url: String, + val job: Job, + ) + + private class UploadManager( + private val scope: CoroutineScope, + ) { + fun queue(requests: List) { + } + } + + private sealed interface UploadAttachmentIntent { + data class Put( + val requests: List, + ) : UploadAttachmentIntent + + data class Complete( + val requests: UploadAttachmentRequest, + ) : UploadAttachmentIntent + } + + override suspend fun DI.doWork(): Result { + val semaphore = Semaphore(2) + coroutineScope { + createUploadAttachmentRequestsFlow() + .scan( + initial = persistentMapOf(), + ) { state, requests -> + val builder = state.builder() + + requests.forEach { request -> + val existingValue = builder[request.key] + @Suppress("UnnecessaryVariable") + if (existingValue != null) { + val shouldKeep = existingValue.url == request.attachment.url + if (shouldKeep) return@forEach + + // Stop the current upload job and replace it + // with a new one. + existingValue.job.cancel() + } + + val newValue = UploadAttachmentJob( + url = request.attachment.url, + job = launch { + semaphore.withPermit { + dow(request) + } + }, + ) + builder[request.key] = newValue + } + + builder.build() + } + .drop(1) // initial + // We want to stop the coroutine after there's no + // more requests to take on. + .takeWhile { + it.values + .any { !it.job.isCompleted } + } + .collect() + } + Log.e("attachment", "complete!") + return Result.success() + } + + private fun DI.createUploadAttachmentRequestsFlow() = direct.instance() + .invoke() // flow of list of ciphers + .map { ciphers -> + val pendingRequests = ciphers + .asSequence() + .flatMap { cipher -> + cipher + .attachments + .asSequence() + .mapNotNull { it as? DSecret.Attachment.Local } + .map { attachment -> + val key = UploadAttachmentRequest.CompositeKey( + accountId = cipher.accountId, + cipherId = cipher.id, + organizationId = cipher.organizationId, + attachmentId = attachment.id, + ) + UploadAttachmentRequest( + key = key, + attachment = attachment, + ) + } + } + .toList() + pendingRequests + } + + private suspend fun dow(request: UploadAttachmentRequest) { + request + delay(5000L) + } + + // + // Notification + // + + // Creates an instance of ForegroundInfo which can be used to update the + // ongoing notification. + private fun createForegroundInfo(progress: String): ForegroundInfo { + val notification = kotlin.run { + val title = applicationContext.getString(R.string.notification_attachment_upload_title) + val channelId = createAttachmentUploadChannel() + NotificationCompat.Builder(applicationContext, channelId) + .setContentTitle(title) + .setTicker(title) + .setContentText(progress) + .setProgress(1, 1, true) + .setSmallIcon(R.drawable.ic_upload) + .setOngoing(true) + .build() + } + val id = + applicationContext.resources.getInteger(R.integer.notification_attachment_upload_id) + return ForegroundInfo( + id, + notification, + ServiceInfo.FOREGROUND_SERVICE_TYPE_DATA_SYNC, + ) + } + + private fun createAttachmentUploadChannel(): String { + val channel = kotlin.run { + val id = + applicationContext.getString(R.string.notification_attachment_upload_channel_id) + val name = + applicationContext.getString(R.string.notification_attachment_upload_channel_name) + NotificationChannel(id, name, NotificationManager.IMPORTANCE_LOW) + } + channel.enableVibration(false) + notificationManager.createNotificationChannel(channel) + return channel.id + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/android/worker/SyncWorker.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/worker/SyncWorker.kt new file mode 100644 index 00000000..85b350fe --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/worker/SyncWorker.kt @@ -0,0 +1,149 @@ +package com.artemchep.keyguard.android.worker + +import android.app.NotificationChannel +import android.app.NotificationManager +import android.content.Context +import android.content.pm.ServiceInfo +import androidx.core.app.NotificationCompat +import androidx.core.content.getSystemService +import androidx.work.Constraints +import androidx.work.Data +import androidx.work.ExistingWorkPolicy +import androidx.work.ForegroundInfo +import androidx.work.NetworkType +import androidx.work.OneTimeWorkRequestBuilder +import androidx.work.Operation +import androidx.work.WorkManager +import androidx.work.WorkerParameters +import com.artemchep.keyguard.android.worker.util.SessionWorker +import com.artemchep.keyguard.common.R +import com.artemchep.keyguard.common.io.attempt +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.io.map +import com.artemchep.keyguard.common.io.parallel +import com.artemchep.keyguard.common.model.AccountId +import com.artemchep.keyguard.common.usecase.SyncAll +import com.artemchep.keyguard.common.usecase.SyncById +import org.kodein.di.DI +import org.kodein.di.DIAware +import org.kodein.di.direct +import org.kodein.di.instance + +class SyncWorker( + context: Context, + params: WorkerParameters, +) : SessionWorker(context, params), DIAware { + companion object { + private const val WORK_ID = "AttachmentUploadWorker" + + private const val KEY_ACCOUNT_IDS = "account_ids" + + val constraints + get() = Constraints.Builder() + .setRequiredNetworkType(NetworkType.CONNECTED) + .build() + + fun enqueueOnce( + context: Context, + accounts: Set = emptySet(), + ): Operation { + val accountIdsArray = accounts + .map { it.id } + .toTypedArray() + val uploadWorkRequest = OneTimeWorkRequestBuilder() + .setConstraints(constraints) + .setInputData( + Data.Builder() + .putStringArray(KEY_ACCOUNT_IDS, accountIdsArray) + .build(), + ) + .build() + return WorkManager + .getInstance(context) + .enqueueUniqueWork(WORK_ID, ExistingWorkPolicy.APPEND_OR_REPLACE, uploadWorkRequest) + } + } + + private val notificationManager = context.getSystemService()!! + + /** + * Set of accounts to update. When empty, we should + * update all existing accounts. + */ + private val accountIds by lazy { + inputData.getStringArray(KEY_ACCOUNT_IDS) + ?.asSequence() + ?.map { AccountId(it) } + ?.toSet().orEmpty() + } + + override suspend fun DI.doWork(): Result { +// if (BuildConfig.DEBUG) { +// AttachmentUploadWorker.enqueueOnce(applicationContext) +// } + + val io = if (accountIds.isEmpty()) { + val syncAll = direct.instance() + syncAll() + .map { Unit } + } else { + val syncById = direct.instance() + accountIds + .map(syncById) + .parallel() + .map { Unit } + } + return io + .attempt() + .bind() + .fold( + ifLeft = { + Result.failure() + }, + ifRight = { + Result.success() + }, + ) + } + + override suspend fun getForegroundInfo() = createForegroundInfo() + + // + // Notification + // + + // Creates an instance of ForegroundInfo which can be used to update the + // ongoing notification. + private fun createForegroundInfo(): ForegroundInfo { + val notification = kotlin.run { + val title = applicationContext.getString(R.string.notification_sync_vault_title) + val channelId = createSyncVaultChannel() + NotificationCompat.Builder(applicationContext, channelId) + .setContentTitle(title) + .setTicker(title) + .setSmallIcon(R.drawable.ic_sync) + .setOngoing(true) + .build() + } + val id = + applicationContext.resources.getInteger(R.integer.notification_sync_vault_id) + return ForegroundInfo( + id, + notification, + ServiceInfo.FOREGROUND_SERVICE_TYPE_DATA_SYNC, + ) + } + + private fun createSyncVaultChannel(): String { + val channel = kotlin.run { + val id = + applicationContext.getString(R.string.notification_sync_vault_channel_id) + val name = + applicationContext.getString(R.string.notification_sync_vault_channel_name) + NotificationChannel(id, name, NotificationManager.IMPORTANCE_LOW) + } + channel.enableVibration(false) + notificationManager.createNotificationChannel(channel) + return channel.id + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/android/worker/util/SessionWorker.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/worker/util/SessionWorker.kt new file mode 100644 index 00000000..b4fc4189 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/android/worker/util/SessionWorker.kt @@ -0,0 +1,51 @@ +package com.artemchep.keyguard.android.worker.util + +import android.content.Context +import androidx.work.CoroutineWorker +import androidx.work.WorkerParameters +import com.artemchep.keyguard.common.model.MasterSession +import com.artemchep.keyguard.common.usecase.GetVaultSession +import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.flow.flatMapLatest +import kotlinx.coroutines.flow.flow +import org.kodein.di.DI +import org.kodein.di.DIAware +import org.kodein.di.android.closestDI +import org.kodein.di.instance + +abstract class SessionWorker( + context: Context, + params: WorkerParameters, +) : CoroutineWorker(context, params), DIAware { + companion object { + private const val SESSION_TIMEOUT_MS = 1000L + } + + final override val di by closestDI { applicationContext } + + private val getVaultSession: GetVaultSession by di.instance() + + @OptIn(ExperimentalCoroutinesApi::class) + override suspend fun doWork(): Result = getVaultSession() + .distinctUntilChanged() + .flatMapLatest { session -> + when (session) { + is MasterSession.Key -> flow { + val result = session.di.doWork() + emit(result) + } + + is MasterSession.Empty -> flow { + delay(SESSION_TIMEOUT_MS) + val result = Result.failure() + emit(result) + } + } + } + .first() + + abstract suspend fun DI.doWork(): Result +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/billing/BillingClientApiException.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/billing/BillingClientApiException.kt new file mode 100644 index 00000000..1f979e76 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/billing/BillingClientApiException.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.billing + +class BillingClientApiException( + val reason: Int, +) : RuntimeException() diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/billing/BillingClientDisconnectedException.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/billing/BillingClientDisconnectedException.kt new file mode 100644 index 00000000..a62a9150 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/billing/BillingClientDisconnectedException.kt @@ -0,0 +1,3 @@ +package com.artemchep.keyguard.billing + +class BillingClientDisconnectedException : RuntimeException() diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/billing/BillingConnection.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/billing/BillingConnection.kt new file mode 100644 index 00000000..d4eba703 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/billing/BillingConnection.kt @@ -0,0 +1,40 @@ +package com.artemchep.keyguard.billing + +import android.app.Activity +import com.android.billingclient.api.AcknowledgePurchaseParams +import com.android.billingclient.api.BillingClient +import com.android.billingclient.api.BillingFlowParams +import com.android.billingclient.api.Purchase +import com.android.billingclient.api.SkuDetails +import com.android.billingclient.api.SkuDetailsParams +import com.artemchep.keyguard.common.model.RichResult +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.MutableStateFlow + +/** + * @author Artem Chepurnyi + */ +interface BillingConnection { + val clientLiveFlow: MutableStateFlow> + + /** + * Perform a network query to get SKU details and + * return the result asynchronously. + */ + fun skuDetailsFlow(skuDetailsParams: SkuDetailsParams): Flow>> + + /** + * Get purchases details for all the items bought within your app. + * This method uses a cache of Google Play Store app without initiating a network request. + * + * Note: It's recommended for security purposes to go through purchases verification + * on your backend (if you have one) by calling one of the following APIs: + * https://developers.google.com/android-publisher/api-ref/purchases/products/get + * https://developers.google.com/android-publisher/api-ref/purchases/subscriptions/get + */ + fun purchasesFlow(skuType: String): Flow>> + + fun launchBillingFlow(activity: Activity, billingFlowParams: BillingFlowParams) + + fun acknowledgePurchase(acknowledgePurchaseParams: AcknowledgePurchaseParams) +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/billing/BillingConnectionImpl.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/billing/BillingConnectionImpl.kt new file mode 100644 index 00000000..07811356 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/billing/BillingConnectionImpl.kt @@ -0,0 +1,196 @@ +package com.artemchep.keyguard.billing + +import android.app.Activity +import arrow.core.Either +import arrow.core.left +import arrow.core.right +import com.android.billingclient.api.AcknowledgePurchaseParams +import com.android.billingclient.api.BillingClient +import com.android.billingclient.api.BillingFlowParams +import com.android.billingclient.api.BillingResult +import com.android.billingclient.api.Purchase +import com.android.billingclient.api.SkuDetails +import com.android.billingclient.api.SkuDetailsParams +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.attempt +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.io.flatMap +import com.artemchep.keyguard.common.io.flattenMap +import com.artemchep.keyguard.common.io.io +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.io.ioRaise +import com.artemchep.keyguard.common.io.retry +import com.artemchep.keyguard.common.io.timeout +import com.artemchep.keyguard.common.model.RichResult +import com.artemchep.keyguard.common.model.flatMap +import com.artemchep.keyguard.common.model.orNull +import com.artemchep.keyguard.common.util.flow.EventFlow +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.firstOrNull +import kotlinx.coroutines.flow.flatMapLatest +import kotlinx.coroutines.flow.flow +import kotlinx.coroutines.flow.mapNotNull +import kotlinx.coroutines.flow.onStart +import kotlinx.coroutines.launch +import kotlinx.coroutines.suspendCancellableCoroutine +import kotlin.coroutines.resume + +private const val RETRY_DELAY = 1000L * 60L // 60s + +/** + * @author Artem Chepurnyi + */ +class BillingConnectionImpl( + /** + * The scope of the connection, it will be terminated after the scope + * ends. + */ + private val coroutineScope: CoroutineScope, + private val dataChangedLiveFlow: EventFlow, + override val clientLiveFlow: MutableStateFlow>, +) : BillingConnection { + companion object { + private const val TAG = "BillingConnection" + + private const val TIMEOUT_LAUNCH_BILLING_FLOW = 1000L + } + + override fun skuDetailsFlow(skuDetailsParams: SkuDetailsParams): Flow>> = + mapClient { client -> + client.mapToSkuDetails(skuDetailsParams) + } + + private suspend fun BillingClient.mapToSkuDetails(skuDetailsParams: SkuDetailsParams) = + ioEffect(Dispatchers.IO) { + querySkuDetailsSuspending(skuDetailsParams) + } + .flattenMap() + .flatMap { skuDetailsList -> + skuDetailsList + ?.takeUnless { it.isEmpty() } + ?.let { io(it) } + ?: kotlin.run { + val exception = + IllegalArgumentException("Sku details list must not be null!") + ioRaise>(exception) + } + } + .retryIfNetworkIssue() + .attempt().bind().let { RichResult.invoke(it) } + + override fun purchasesFlow(skuType: String): Flow>> = + mapClient { client -> + ioEffect(Dispatchers.IO) { + client.queryPurchasesSuspending(skuType) + } + .flattenMap() + .flatMap { purchasesList -> + purchasesList + ?.let { io(it) } + ?: kotlin.run { + val exception = + IllegalArgumentException("Purchase details list must not be null!") + ioRaise>(exception) + } + } + .retryIfNetworkIssue() + .attempt().bind().let { RichResult.invoke(it) } + } + + private fun IO.retryIfNetworkIssue() = this + .retry { e, count -> + if (e is BillingResponseException && e.isNetworkIssue()) { + delay(RETRY_DELAY) + true + } else { + false + } + } + + override fun launchBillingFlow( + activity: Activity, + billingFlowParams: BillingFlowParams, + ) { + coroutineScope.launch(Dispatchers.Main) { + val client = getClient(TIMEOUT_LAUNCH_BILLING_FLOW) ?: return@launch + client.launchBillingFlow(activity, billingFlowParams) + } + } + + override fun acknowledgePurchase(acknowledgePurchaseParams: AcknowledgePurchaseParams) { + coroutineScope.launch(Dispatchers.IO) { + val client = getClient(TIMEOUT_LAUNCH_BILLING_FLOW) ?: return@launch + client.acknowledgePurchase( + acknowledgePurchaseParams, + ) { result -> + // TODO: Do we want to verify the response? + notifyDataChanged() + } + } + } + + /** Returns a client within a timeout or returns null */ + private suspend fun getClient(timeout: Long) = + ioEffect { + clientLiveFlow + .mapNotNull { it.orNull() } + .firstOrNull() + } + .timeout(timeout) + .attempt() + .bind() + .getOrNull() + + private fun notifyDataChanged() { + dataChangedLiveFlow.emit(Unit) + } + + private fun mapClient(transform: suspend (BillingClient) -> RichResult): Flow> = + clientLiveFlow + .flatMapLatest { clientResult -> + dataChangedLiveFlow + .onStart { + emit(Unit) + } + .flatMapLatest { + flow { + emit(RichResult.Loading()) + val result = clientResult + .flatMap { + transform(it) + } + emit(result) + } + } + } +} + +private suspend fun BillingClient.querySkuDetailsSuspending(skuDetailsParams: SkuDetailsParams) = + suspendCancellableCoroutine?>> { continuation -> + querySkuDetailsAsync(skuDetailsParams) { billingResult, skuDetailsList -> + kotlin.runCatching { + val r = getBillingResultOrException(billingResult, skuDetailsList) + continuation.resume(r) + } + } + } + +private suspend fun BillingClient.queryPurchasesSuspending(skuType: String) = + suspendCancellableCoroutine?>> { continuation -> + queryPurchasesAsync(skuType) { billingResult, purchases -> + kotlin.runCatching { + val r = getBillingResultOrException(billingResult, purchases) + continuation.resume(r) + } + } + } + +private fun getBillingResultOrException(billingResult: BillingResult, model: T) = + when (val code = billingResult.responseCode) { + BillingClient.BillingResponseCode.OK -> model.right() + else -> BillingResponseException(code).left() + } diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/billing/BillingManager.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/billing/BillingManager.kt new file mode 100644 index 00000000..114ed8b4 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/billing/BillingManager.kt @@ -0,0 +1,10 @@ +package com.artemchep.keyguard.billing + +import kotlinx.coroutines.flow.Flow + +/** + * @author Artem Chepurnyi + */ +interface BillingManager { + val billingConnectionFlow: Flow +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/billing/BillingManagerImpl.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/billing/BillingManagerImpl.kt new file mode 100644 index 00000000..01bd1136 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/billing/BillingManagerImpl.kt @@ -0,0 +1,126 @@ +package com.artemchep.keyguard.billing + +import android.content.Context +import arrow.core.partially1 +import com.android.billingclient.api.BillingClient +import com.android.billingclient.api.BillingClientStateListener +import com.android.billingclient.api.BillingResult +import com.artemchep.keyguard.common.io.throttle +import com.artemchep.keyguard.common.model.RichResult +import com.artemchep.keyguard.common.util.flow.EventFlow +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.NonCancellable +import kotlinx.coroutines.coroutineScope +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.collect +import kotlinx.coroutines.flow.flow +import kotlinx.coroutines.flow.onEach +import kotlinx.coroutines.flow.onStart +import kotlinx.coroutines.flow.shareIn +import kotlinx.coroutines.launch +import kotlinx.coroutines.plus +import kotlinx.coroutines.withContext + +private const val RECONNECT_DELAY = 1000L * 10L // 10s + +/** + * @author Artem Chepurnyi + */ +class BillingManagerImpl( + private val context: Context, +) : BillingManager { + companion object { + private const val TAG = "BillingManager" + + private const val SHARING_TIMEOUT_MS = 5000L + } + + override val billingConnectionFlow: Flow = flow { + coroutineScope { + val connection = launchIn(this) + emit(connection) + } + }.shareIn(GlobalScope, SharingStarted.WhileSubscribed(SHARING_TIMEOUT_MS), replay = 1) + + private fun launchIn(scope: CoroutineScope): BillingConnection { + val dataChangedEventFlow = EventFlow() + val billingClient = BillingClient + .newBuilder(context) + .enablePendingPurchases() + .setListener { _, _ -> + dataChangedEventFlow.emit(Unit) + } + .build() + val liveFlow = MutableStateFlow>(RichResult.Loading()) + + val job = scope.launch(Dispatchers.Main.immediate) { + val requestConnectSink = EventFlow() + val requestConnect = requestConnectSink::emit + .partially1(Unit) + + val listener = object : BillingClientStateListener { + override fun onBillingSetupFinished(billingResult: BillingResult) { + val event: RichResult = + when (val code = billingResult.responseCode) { + BillingClient.BillingResponseCode.OK -> { + RichResult.Success(billingClient) + } + + BillingClient.BillingResponseCode.SERVICE_TIMEOUT, + BillingClient.BillingResponseCode.SERVICE_UNAVAILABLE, + BillingClient.BillingResponseCode.BILLING_UNAVAILABLE, + BillingClient.BillingResponseCode.DEVELOPER_ERROR, + BillingClient.BillingResponseCode.ERROR, + -> { + when (code) { + BillingClient.BillingResponseCode.SERVICE_TIMEOUT, + BillingClient.BillingResponseCode.SERVICE_UNAVAILABLE, + BillingClient.BillingResponseCode.BILLING_UNAVAILABLE, + -> requestConnect() + } + RichResult.Failure(BillingClientApiException(code)) + } + + else -> return + } + liveFlow.value = event + } + + override fun onBillingServiceDisconnected() { + liveFlow.value = RichResult.Failure(BillingClientDisconnectedException()) + requestConnect() + } + } + + val tryConnect = { + // We're trying to connect, notify the user + // about it... + liveFlow.value = RichResult.Loading() + // ... and try to connect. + billingClient.startConnection(listener) + } + + val flow = requestConnectSink + .throttle(RECONNECT_DELAY, sendLastEvent = true) + .onEach { tryConnect() } + .onStart { tryConnect() } + try { + flow.collect() + } finally { + withContext(NonCancellable + Dispatchers.Main) { + billingClient.endConnection() + } + } + } + + return BillingConnectionImpl( + coroutineScope = scope + job, + dataChangedLiveFlow = dataChangedEventFlow, + clientLiveFlow = liveFlow, + ) + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/billing/BillingResponseException.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/billing/BillingResponseException.kt new file mode 100644 index 00000000..e3e91b70 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/billing/BillingResponseException.kt @@ -0,0 +1,39 @@ +package com.artemchep.keyguard.billing + +import com.android.billingclient.api.BillingClient + +class BillingResponseException( + val code: Int, +) : RuntimeException() + +fun BillingResponseException.isNetworkIssue() = + when (code) { + BillingClient.BillingResponseCode.SERVICE_TIMEOUT, + BillingClient.BillingResponseCode.SERVICE_UNAVAILABLE, + -> true + + else -> false + } + +/** + * The requested feature is not supported by + * the Play Store on the current device. + */ +fun BillingResponseException.isNotSupported() = + when (code) { + BillingClient.BillingResponseCode.FEATURE_NOT_SUPPORTED, + -> true + + else -> false + } + +/** + * Fatal error during the API action. + */ +fun BillingResponseException.isFatalError() = + when (code) { + BillingClient.BillingResponseCode.ERROR, + -> true + + else -> false + } diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/common/service/permission/Permission.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/common/service/permission/Permission.kt new file mode 100644 index 00000000..6419381c --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/common/service/permission/Permission.kt @@ -0,0 +1,13 @@ +package com.artemchep.keyguard.common.service.permission + +import android.Manifest +import android.annotation.SuppressLint + +@SuppressLint("InlinedApi") +actual enum class Permission( + val permission: String, + val minSdk: Int = 0, + val maxSdk: Int = Int.MAX_VALUE, +) { + POST_NOTIFICATIONS(Manifest.permission.POST_NOTIFICATIONS, minSdk = 33), +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/common/usecase/impl/CleanUpAttachmentImpl.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/common/usecase/impl/CleanUpAttachmentImpl.kt new file mode 100644 index 00000000..6e853bbf --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/common/usecase/impl/CleanUpAttachmentImpl.kt @@ -0,0 +1,147 @@ +package com.artemchep.keyguard.common.usecase.impl + +import android.app.Application +import android.content.Context +import com.artemchep.keyguard.android.downloader.DownloadManagerImpl +import com.artemchep.keyguard.android.downloader.journal.DownloadRepository +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.attempt +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.io.measure +import com.artemchep.keyguard.common.service.logging.LogLevel +import com.artemchep.keyguard.common.service.logging.LogRepository +import com.artemchep.keyguard.common.usecase.CleanUpAttachment +import com.artemchep.keyguard.common.usecase.GetCiphers +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.Job +import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.debounce +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.onEach +import kotlinx.coroutines.launch +import org.kodein.di.DirectDI +import org.kodein.di.instance +import kotlin.time.Duration + +/** + * @author Artem Chepurnyi + */ +class CleanUpDownloadImpl( + private val downloadRepository: DownloadRepository, + private val getCiphers: GetCiphers, +) { + constructor(directDI: DirectDI) : this( + downloadRepository = directDI.instance(), + getCiphers = directDI.instance(), + ) + + fun invoke(): IO = ioEffect { + val urls = getCiphers() + .first() + .asSequence() + .flatMap { + it.attachments + .asSequence() + .map { it.url } + } + .toSet() + val kkk = downloadRepository.get() + .map { downloadInfoList -> + downloadInfoList + .asSequence() + .map { it.url } + .toSet() + } + .first() + kkk.subtract(urls).forEach { url -> + // TODO + // downloadRepository.removeByUrl(url) + } + } +} + +/** + * @author Artem Chepurnyi + */ +class CleanUpAttachmentImpl( + private val context: Context, + private val logRepository: LogRepository, + private val downloadRepository: DownloadRepository, +) : CleanUpAttachment { + companion object { + private const val TAG = "CleanUpAttachment" + + fun zzz( + scope: CoroutineScope, + downloadRepository: DownloadRepository, + cleanUpAttachment: CleanUpAttachment, + ): Job = scope.launch { + // We want to avoid launching a ton of jobs + // immediately on the start. + val delay = with(Duration) { 30L.seconds } + delay(delay) + + // Each time file journal changes we check for the unused files. + downloadRepository.get() + .debounce(1000L) + .onEach { + cleanUpAttachment() + .attempt() + .bind() + } + .launchIn(scope) + + // Each time ciphers change we check for the removed urls. +// getCiphers() +// .debounce(1000L) +// .onEach { +// cleanUpDownload.invoke() +// .attempt() +// .bind() +// } +// .launchIn(scope) + } + } + + constructor(directDI: DirectDI) : this( + context = directDI.instance(), + logRepository = directDI.instance(), + downloadRepository = directDI.instance(), + ) + + override fun invoke(): IO = ioEffect(Dispatchers.IO) { + val dir = DownloadManagerImpl.getDir(context) + + val actualFiles = dir + .listFiles() + .orEmpty() + val possibleFiles = kotlin.run { + val journal = downloadRepository.get().first() + journal + .asSequence() + .map { downloadInfo -> + val fileId = downloadInfo.id + DownloadManagerImpl.getFile( + dir = dir, + downloadId = fileId, + ) + } + .toSet() + } + + val filesToDelete = actualFiles + .filter { it !in possibleFiles } + // Delete files + filesToDelete.forEach { file -> + file.delete() + } + filesToDelete.size + }.measure { duration, deletedFiles -> + val message = "Deleted $deletedFiles files in $duration" + logRepository.post(TAG, message, LogLevel.INFO) + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/common/usecase/impl/DisableBiometricImpl.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/common/usecase/impl/DisableBiometricImpl.kt new file mode 100644 index 00000000..c20502d2 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/common/usecase/impl/DisableBiometricImpl.kt @@ -0,0 +1,29 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.io.flatMap +import com.artemchep.keyguard.common.io.ioUnit +import com.artemchep.keyguard.common.io.toIO +import com.artemchep.keyguard.common.service.vault.FingerprintReadWriteRepository +import com.artemchep.keyguard.common.usecase.DisableBiometric +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class DisableBiometricImpl( + private val keyReadWriteRepository: FingerprintReadWriteRepository, +) : DisableBiometric { + constructor(directDI: DirectDI) : this( + keyReadWriteRepository = directDI.instance(), + ) + + override fun invoke() = keyReadWriteRepository.get() + .toIO() + .flatMap { tokens -> + val newTokens = tokens?.copy(biometric = null) + if (newTokens != tokens) { + return@flatMap keyReadWriteRepository + .put(newTokens) + } + + ioUnit() + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/common/usecase/impl/EnableBiometricImpl.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/common/usecase/impl/EnableBiometricImpl.kt new file mode 100644 index 00000000..be19d3e6 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/common/usecase/impl/EnableBiometricImpl.kt @@ -0,0 +1,94 @@ +package com.artemchep.keyguard.common.usecase.impl + +import arrow.core.memoize +import arrow.core.partially1 +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.io.flatMap +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.io.toIO +import com.artemchep.keyguard.common.model.BiometricPurpose +import com.artemchep.keyguard.common.model.BiometricStatus +import com.artemchep.keyguard.common.model.FingerprintBiometric +import com.artemchep.keyguard.common.model.MasterSession +import com.artemchep.keyguard.common.model.WithBiometric +import com.artemchep.keyguard.common.service.vault.FingerprintReadWriteRepository +import com.artemchep.keyguard.common.usecase.BiometricKeyEncryptUseCase +import com.artemchep.keyguard.common.usecase.BiometricStatusUseCase +import com.artemchep.keyguard.common.usecase.EnableBiometric +import com.artemchep.keyguard.common.usecase.GetVaultSession +import org.kodein.di.DirectDI +import org.kodein.di.instance +import java.security.KeyException + +class EnableBiometricImpl( + private val keyReadWriteRepository: FingerprintReadWriteRepository, + private val getVaultSession: GetVaultSession, + private val biometricStatusUseCase: BiometricStatusUseCase, + private val biometricKeyEncryptUseCase: BiometricKeyEncryptUseCase, +) : EnableBiometric { + constructor(directDI: DirectDI) : this( + keyReadWriteRepository = directDI.instance(), + getVaultSession = directDI.instance(), + biometricStatusUseCase = directDI.instance(), + biometricKeyEncryptUseCase = directDI.instance(), + ) + + override fun invoke( + masterSession: MasterSession.Key?, + ) = ioEffect { + val session = getVaultSession().toIO().bind() + val tokens = keyReadWriteRepository.get().toIO().bind() + require(tokens != null) { + "Can not enable biometrics without a live session." + } + require(session is MasterSession.Key) { + "Can not enable biometrics without a live session." + } + + val biometric = biometricStatusUseCase().toIO().bind() + require(biometric is BiometricStatus.Available) { + "Can not enable biometrics on an unsupported device." + } + + val getOrRecreateCipherForEncryption = biometric + .createCipher + .partially1(BiometricPurpose.Encrypt) + // Flat map + .let { createCipher -> + // Lambda + { + try { + createCipher() + } catch (e: KeyException) { + // try to clear the cipher key... + biometric.deleteCipher() + // ...and recreate it. + createCipher() + } + } + } + // Save the cipher for further use by + // the code in the block. This allows us to not + // return the cipher from the action. + .memoize() + WithBiometric( + getCipher = getOrRecreateCipherForEncryption, + getCreateIo = { + val masterKey = session.masterKey + val cipherIo = ioEffect { getOrRecreateCipherForEncryption() } + biometricKeyEncryptUseCase(cipherIo, masterKey) + .flatMap { encryptedMasterKey -> + val cipher = getOrRecreateCipherForEncryption() + + // Save new tokens to the repository. + val biometricTokens = FingerprintBiometric( + iv = cipher.iv, + encryptedMasterKey = encryptedMasterKey, + ) + val newTokens = tokens.copy(biometric = biometricTokens) + keyReadWriteRepository.put(newTokens) + } + }, + ) + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetBiometricRemainingDurationImpl.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetBiometricRemainingDurationImpl.kt new file mode 100644 index 00000000..d9dc49c1 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetBiometricRemainingDurationImpl.kt @@ -0,0 +1,44 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.service.vault.SessionMetadataReadRepository +import com.artemchep.keyguard.common.usecase.GetBiometricRemainingDuration +import com.artemchep.keyguard.common.usecase.GetBiometricTimeout +import com.artemchep.keyguard.common.util.flowOfTime +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.combine +import kotlinx.datetime.Instant +import org.kodein.di.DirectDI +import org.kodein.di.instance +import kotlin.time.Duration +import kotlin.time.DurationUnit + +class GetBiometricRemainingDurationImpl( + private val sessionMetadataReadRepository: SessionMetadataReadRepository, + private val getBiometricTimeout: GetBiometricTimeout, +) : GetBiometricRemainingDuration { + constructor(directDI: DirectDI) : this( + sessionMetadataReadRepository = directDI.instance(), + getBiometricTimeout = directDI.instance(), + ) + + override fun invoke(): Flow = combine( + getExpiryTimeFlow(), + flowOfTime(DurationUnit.MINUTES), + ) { expiryTimeOrNull, currentTime -> + val expiryTime = expiryTimeOrNull ?: return@combine Duration.ZERO + (expiryTime - currentTime) + .coerceAtLeast(Duration.ZERO) + } + + private fun getExpiryTimeFlow() = combine( + sessionMetadataReadRepository.getLastPasswordUseTimestamp(), + getBiometricTimeout(), + ) { lastPasswordUseInstant, timeout -> + when (timeout) { + Duration.INFINITE -> return@combine Instant.DISTANT_FUTURE + Duration.ZERO -> return@combine Instant.DISTANT_PAST + } + + lastPasswordUseInstant?.plus(timeout) + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl.kt new file mode 100644 index 00000000..77e9c494 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetPurchasedImpl.kt @@ -0,0 +1,147 @@ +package com.artemchep.keyguard.common.usecase.impl + +import android.content.Context +import arrow.core.identity +import com.artemchep.keyguard.billing.BillingResponseException +import com.artemchep.keyguard.billing.isFatalError +import com.artemchep.keyguard.billing.isNotSupported +import com.artemchep.keyguard.common.io.attempt +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.model.fold +import com.artemchep.keyguard.common.service.subscription.SubscriptionService +import com.artemchep.keyguard.common.usecase.GetCachePremium +import com.artemchep.keyguard.common.usecase.GetDebugPremium +import com.artemchep.keyguard.common.usecase.GetPurchased +import com.artemchep.keyguard.common.usecase.PutCachePremium +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.platform.isStandalone +import com.artemchep.keyguard.platform.util.isRelease +import com.google.android.gms.common.ConnectionResult +import com.google.android.gms.common.GoogleApiAvailability +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.mapNotNull +import kotlinx.coroutines.flow.merge +import kotlinx.coroutines.flow.onEach +import kotlinx.coroutines.flow.onStart +import kotlinx.coroutines.flow.runningReduce +import kotlinx.coroutines.flow.shareIn +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class GetPurchasedImpl( + private val context: Context, + private val subscriptionService: SubscriptionService, + private val getDebugPremium: GetDebugPremium, + private val getCachePremium: GetCachePremium, + private val putCachePremium: PutCachePremium, + private val windowCoroutineScope: WindowCoroutineScope, +) : GetPurchased { + constructor(directDI: DirectDI) : this( + context = directDI.instance(), + subscriptionService = directDI.instance(), + getDebugPremium = directDI.instance(), + getCachePremium = directDI.instance(), + putCachePremium = directDI.instance(), + windowCoroutineScope = directDI.instance(), + ) + + private val sharedFlow = merge( + upstreamStatusFlow(), + localStatusFlow(), + ) + .runningReduce { y, x -> + x.takeIf { it.isUpstream } + ?: y.takeIf { it.isUpstream } + ?: x + } + .onEach { status -> + // Cache the latest upstream value, so next time we + // open the app and billing refuses to work, we still + // have valid license. + if (status.isUpstream) { + putCachePremium(status.isPremium) + .attempt() // do not notify a user about the error + .launchIn(windowCoroutineScope) + } + } + .map { it.isPremium } + .distinctUntilChanged() + .shareIn(windowCoroutineScope, SharingStarted.WhileSubscribed(), replay = 1) + + override fun invoke() = if (!isStandalone) sharedFlow else flowOf(true) + + private fun localStatusFlow() = getCachePremium() + .map { isPremium -> + PremiumStatus( + isPremium = isPremium, + isUpstream = false, + ) + } + + private fun upstreamStatusFlow() = kotlin.run { + val hasGooglePlayServices = hasGooglePlayServices() + if (!hasGooglePlayServices) { + // If a device doesn't have Google Play Services, then we + // just give a user premium status. + return@run flowOf(true) + } + + val isPurchased = subscriptionService + .purchased() + .mapNotNull { result -> + result.fold( + ifFailure = { e -> + if (e is BillingResponseException) { + val isGappsIssue = e.isFatalError() || + e.isNotSupported() + isGappsIssue.takeIf { it } + } else { + // Something went wrong, so we + // have no idea. + null + } + }, + ifLoading = { null }, + ifSuccess = ::identity, + ) + } + if (!isRelease) { + combine( + isPurchased + // We want to emit something here, so + // we can use the test flow. + .onStart { + emit(false) + }, + getDebugPremium(), + ) { a, b -> a || b } + } else { + isPurchased + } + }.map { isPremium -> + PremiumStatus( + isPremium = isPremium, + isUpstream = true, + ) + } + + private data class PremiumStatus( + val isUpstream: Boolean, + val isPremium: Boolean, + ) + + /** + * Returns `true` if a device has Google play services, + * `false` otherwise. + */ + private fun hasGooglePlayServices(): Boolean { + val apiAvailability = GoogleApiAvailability.getInstance() + val status = apiAvailability.isGooglePlayServicesAvailable(context) + return status == ConnectionResult.SUCCESS || + apiAvailability.isUserResolvableError(status) + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetSuggestionsImpl.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetSuggestionsImpl.kt new file mode 100644 index 00000000..4dca4667 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetSuggestionsImpl.kt @@ -0,0 +1,404 @@ +package com.artemchep.keyguard.common.usecase.impl + +import android.util.Log +import arrow.core.getOrElse +import arrow.optics.Getter +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.attempt +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.io.measure +import com.artemchep.keyguard.common.io.parallelSearch +import com.artemchep.keyguard.common.model.AutofillHint +import com.artemchep.keyguard.common.model.AutofillTarget +import com.artemchep.keyguard.common.model.DSecret +import com.artemchep.keyguard.common.model.LinkInfoAndroid +import com.artemchep.keyguard.common.model.LinkInfoPlatform +import com.artemchep.keyguard.common.model.contains +import com.artemchep.keyguard.common.service.extract.LinkInfoExtractor +import com.artemchep.keyguard.common.usecase.CipherUrlCheck +import com.artemchep.keyguard.common.usecase.GetSuggestions +import com.artemchep.keyguard.feature.home.vault.search.findAlike +import io.ktor.http.Url +import kotlinx.coroutines.Dispatchers +import org.kodein.di.DirectDI +import org.kodein.di.allInstances +import org.kodein.di.instance + +private const val ignoreLength = 3 + +private val ignoreWords = setOf( + "www", + // popular domains + "com", + "tk", + "cn", + "de", + "net", + "uk", + "org", + "nl", + "icu", + "ru", + "eu", + // rising domains + "icu", + "top", + "xyz", + "site", + "online", + "club", + "wang", + "vip", + "shop", + "work", + // common words used in domain names + "login", + "signin", + "auth", + "dev", + "debug", + "release", + // top 100 english words that are > ignoreLength + "there", + "some", + "than", + "this", + "would", + "first", + "have", + "each", + "make", + "water", + "from", + "which", + "like", + "been", + "call", + "into", + "time", + "that", + "their", + "word", + "look", + "now", + "will", + "find", + "more", + "long", + "what", + "other", + "write", + "down", + "about", + "were", + "many", + "number", + "with", + "when", + "then", + "come", + "your", + "them", + "made", + "they", + "these", + "could", + "said", + "people", + "part", +) + +private const val scoreThreshold = 0.1f + +class GetSuggestionsImpl( + private val androidExtractors: List>, + private val cipherUrlCheck: CipherUrlCheck, +) : GetSuggestions { + constructor(directDI: DirectDI) : this( + androidExtractors = directDI.allInstances(), + cipherUrlCheck = directDI.instance(), + ) + + data class AutofillTargetAndroid( + val appId: String, + // It's preferable if we have the name, but we + // can still operate without it. + val appName: String?, + ) { + val appIdTokens = appId + .lowercase() + .split(".", "_") + + val appNameTokens = appName + ?.lowercase() + ?.split(" ") + } + + data class AutofillTargetWeb( + val webUrl: Url, + ) { + val webUrlTokens = webUrl.host + .lowercase() + .split(".", "_") + } + + override fun invoke( + ciphers: List, + getter: Getter, + target: AutofillTarget, + ): IO> = ioEffect(Dispatchers.Default) { + // Android app target + val autofillTargetAndroid = kotlin.run { + val link = target.links.firstNotNullOfOrNull { it as? LinkInfoPlatform.Android } + ?: return@run null + val appId = link.packageName + val appInfo = androidExtractors + .firstNotNullOfOrNull { extractor -> + if (extractor.from == LinkInfoPlatform.Android::class && extractor.handles(link)) { + extractor.extractInfo(link) + .attempt() + .bind() + .getOrNull() + } else { + null + } + } as? LinkInfoAndroid.Installed + AutofillTargetAndroid( + appId = appId, + appName = appInfo?.label, + ) + } + + // Web target + val autofillTargetWeb = kotlin.run { + val link = target.links.firstNotNullOfOrNull { it as? LinkInfoPlatform.Web } + ?: return@run null + AutofillTargetWeb( + webUrl = link.url, + ) + } + + val c = ciphers + .parallelSearch { wrapper -> + val cipher = getter.get(wrapper) + val tokens = cipher.tokenize() + val score = if ( + AutofillHint.EMAIL_ADDRESS in target.hints || + AutofillHint.PHONE_NUMBER in target.hints || + AutofillHint.USERNAME in target.hints || + AutofillHint.PASSWORD in target.hints + ) { + run { + val scoreByWebDomainRaw = + autofillTargetWeb?.findByWebDomain(cipher, tokens, cipherUrlCheck) + val scoreByWebDomain = scoreByWebDomainRaw + ?: 0f + if (scoreByWebDomain > scoreThreshold) { + // If we already have a score using the web info, + // then do not mix the browser application into it. + return@run scoreByWebDomain + } + + val scoreByAppId = autofillTargetAndroid?.findByApp(cipher, tokens) + ?: 0f + + val scaledScoreByWebDomain = scoreByWebDomain + val scaledScoreByAppId = if (scoreByWebDomainRaw != null) { + scoreByAppId / 30f + } else { + scoreByAppId + } + scaledScoreByWebDomain + scaledScoreByAppId + } + } else if ( + AutofillHint.CREDIT_CARD_NUMBER in target.hints || + AutofillHint.CREDIT_CARD_EXPIRATION_DATE in target.hints || + AutofillHint.CREDIT_CARD_SECURITY_CODE in target.hints + ) { + 1f + } else { + 0f + } +// if (score <= scoreThreshold) { +// return@parallelSearch null +// } + val correctingScore = if (target.hints.isNotEmpty()) { + val matchingCount = target.hints + .count { + cipher.contains(it) + } + (matchingCount.toFloat() / target.hints.size.toFloat()) + .coerceAtLeast(0.4f) + } else { + 1f + } + (score * correctingScore) to wrapper + } + var avgSize = 0 + var avgScore = 0f + val maxScore = c.maxByOrNull { it.first }?.first ?: 0f + c.forEach { (score, _) -> + if (score > scoreThreshold) { + avgSize += 1 + avgScore += score + } + } + avgScore /= avgSize.coerceAtLeast(1) + val threshold = + if (maxScore >= 10f) maxScore.div(3f).coerceAtLeast(10f) else avgScore / 1.5f + Log.e("SuggestionsTest", "threshold $threshold") + c + .filter { (score, _) -> score >= threshold && score > scoreThreshold } + .sortedByDescending { it.first } + .also { list -> + Log.e("SuggestionsTest", "-----") + Log.e( + "SuggestionsTest", + "checked ${ciphers.size} ciphers, ${target.hints.size} hints", + ) + Log.e("SuggestionsTest", "android=$autofillTargetAndroid") + Log.e("SuggestionsTest", "web=$autofillTargetWeb") + list.forEach { (score, model) -> + val cipher = getter.get(model) + Log.e( + "SuggestionsTest", + "[$score] ${cipher.name} | ${cipher.tokenize().joinToString { it }}", + ) + } + } + .map { it.second } + }.measure { duration, anies -> + Log.e("SuggestionsTest", "complete in $duration") + } + + private val garbageRegex = "[.,!_:;&()\\[\\]]".toRegex() + + private fun DSecret.tokenize(): Set { + val out = mutableSetOf() + + fun tryAdd(token: String) { + if (token.length <= ignoreLength) { + return + } + + val processedToken = token.lowercase() + if (processedToken in ignoreWords) { + return + } + + out += processedToken + } + + // Split the name into tokens + name.replace(garbageRegex, " ") + .split(' ') + .forEach(::tryAdd) + // Extract domain name from the username + // if that looks like an email. + if (login?.username != null) { + val tokens = login.username.split("@") + if (tokens.size == 2) { // this is an email + val domain = tokens[1] + domain + .split('.') + .forEach(::tryAdd) + // an email might contain extra info separated by the + sign + val username = tokens[0] + val extras = username.split('+') + if (extras.size == 2) { + val extrasInfo = extras[1] + extrasInfo + .split('.') + .forEach(::tryAdd) + } + } + } + return out + } +} + +private fun GetSuggestionsImpl.AutofillTargetAndroid.findByApp( + secret: DSecret, + tokens: Set, +): Float = run { + // In case the host matches one of the URLs defined in + // the cipher, then we give it maximum priority. + val scoreByUri = secret.uris + .any { uri -> + uri.uri.startsWith("androidapp://") && + uri.uri.trim().endsWith(appId) && + uri.match != DSecret.Uri.MatchType.Never + } + .let { directMatch -> + if (directMatch) 30f else 0f + } + val scoreByName = appNameTokens?.let { + findAlike( + tokens, + it, + ) + } ?: 0f + val scoreById = findAlike( + tokens, + appIdTokens, + ) + scoreById * 0.5f + scoreByName * 1.2f + scoreByUri +} + +// If the URI matches something then the output score will be +// more or equal to 10, otherwise if the URI matches the content of the +// cipher the score it ~5 at max. +private suspend fun GetSuggestionsImpl.AutofillTargetWeb.findByWebDomain( + secret: DSecret, + tokens: Set, + cipherUrlCheck: CipherUrlCheck, +): Float = run { + val webHost = webUrl.host + val webUrl = webUrl.toString() + // In case the host matches one of the URLs defined in + // the cipher, then we give it maximum priority. + val scoreByUri = secret.uris + .map { uri -> + val match = cipherUrlCheck.invoke(uri, webUrl) + .attempt() + .bind() + .getOrElse { false } + if (match) { + @Suppress("MoveVariableDeclarationIntoWhen") + val matchType = uri.match ?: DSecret.Uri.MatchType.default + when (matchType) { + DSecret.Uri.MatchType.Domain -> 10f + DSecret.Uri.MatchType.Host -> 20f + DSecret.Uri.MatchType.StartsWith -> 25f + DSecret.Uri.MatchType.Exact -> 25f + DSecret.Uri.MatchType.RegularExpression -> 30f + DSecret.Uri.MatchType.Never -> 0f + } + } else { + 0f + } + } + .maxByOrNull { it } + ?: 0f + val scoreByRpId = secret.login?.fido2Credentials.orEmpty() + .map { credential -> + val match = isSubdomain( + domain = credential.rpId, + request = webHost, + ) + if (match) { + 20f + } else { + 0f + } + } + .maxByOrNull { it } + ?: 0f + + val scoreByHost = findAlike( + tokens, + webUrlTokens, + ) + scoreByHost * 2f + scoreByUri + scoreByRpId +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/copy/AutofillServiceAndroid.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/copy/AutofillServiceAndroid.kt new file mode 100644 index 00000000..762e6472 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/copy/AutofillServiceAndroid.kt @@ -0,0 +1,83 @@ +package com.artemchep.keyguard.copy + +import android.app.Application +import android.content.Intent +import android.net.Uri +import android.provider.Settings +import android.view.autofill.AutofillManager +import androidx.core.content.getSystemService +import androidx.credentials.CredentialManager +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.ProcessLifecycleOwner +import androidx.lifecycle.repeatOnLifecycle +import com.artemchep.keyguard.common.service.autofill.AutofillService +import com.artemchep.keyguard.common.service.autofill.AutofillServiceStatus +import com.artemchep.keyguard.common.util.flow.EventFlow +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.channelFlow +import kotlinx.coroutines.flow.debounce +import kotlinx.coroutines.flow.flowOn +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.merge +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class AutofillServiceAndroid( + private val application: Application, +) : AutofillService { + private val autofillChangedSink = EventFlow() + + private val autofillChangedFlow = channelFlow { + send(Unit) + + val lifecycle = ProcessLifecycleOwner.get() + lifecycle.repeatOnLifecycle(Lifecycle.State.RESUMED) { + send(Unit) + } + } + + constructor( + directDI: DirectDI, + ) : this( + application = directDI.instance(), + ) + + override fun status(): Flow = merge( + autofillChangedSink, + autofillChangedFlow, + ) + .debounce(100L) + .map { + val am = application.getSystemService() + ?: return@map AutofillServiceStatus.Disabled( + onEnable = null, + ) + val cm = CredentialManager.create(application) + //.createSettingsPendingIntent() + + val enabled = am.hasEnabledAutofillServices() + if (enabled) { + AutofillServiceStatus.Enabled( + onDisable = { + am.disableAutofillServices() + // Refresh a status of the autofill services + // after we disabled ourselves. + autofillChangedSink.emit(Unit) + }, + ) + } else { + Settings.Secure.ENABLED_ACCESSIBILITY_SERVICES + AutofillServiceStatus.Disabled( + onEnable = { activity -> + val intent = Intent(Settings.ACTION_REQUEST_SET_AUTOFILL_SERVICE).apply { + val packageName = application.packageName + data = Uri.parse("package:$packageName") + } + activity.startActivity(intent) + }, + ) + } + } + .flowOn(Dispatchers.Main) +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/copy/ClearDataAndroid.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/copy/ClearDataAndroid.kt new file mode 100644 index 00000000..b1b53933 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/copy/ClearDataAndroid.kt @@ -0,0 +1,26 @@ +package com.artemchep.keyguard.copy + +import android.app.ActivityManager +import android.app.Application +import androidx.core.content.getSystemService +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.usecase.ClearData +import kotlinx.coroutines.Dispatchers +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class ClearDataAndroid( + private val application: Application, +) : ClearData { + constructor( + directDI: DirectDI, + ) : this( + application = directDI.instance(), + ) + + override fun invoke(): IO = ioEffect(Dispatchers.Main) { + application.getSystemService() + ?.clearApplicationUserData() + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/copy/ClipboardServiceAndroid.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/copy/ClipboardServiceAndroid.kt new file mode 100644 index 00000000..e3ad89bf --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/copy/ClipboardServiceAndroid.kt @@ -0,0 +1,52 @@ +package com.artemchep.keyguard.copy + +import android.app.Application +import android.content.ClipData +import android.content.ClipDescription +import android.content.ClipboardManager +import android.os.Build +import android.os.PersistableBundle +import androidx.core.content.getSystemService +import com.artemchep.keyguard.common.service.clipboard.ClipboardService +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class ClipboardServiceAndroid( + private val application: Application, + private val clipboardManager: ClipboardManager, +) : ClipboardService { + constructor( + directDI: DirectDI, + ) : this( + application = directDI.instance(), + clipboardManager = directDI.instance().getSystemService()!!, + ) + + override fun setPrimaryClip(value: String, concealed: Boolean) { + val clip = + ClipData.newPlainText(null, value) // When your app targets API level 33 or higher + clip.apply { + description.extras = PersistableBundle().apply { + // Do not show the plain value if it + // should be concealed. + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + putBoolean(ClipDescription.EXTRA_IS_SENSITIVE, concealed) + } + } + } + clipboardManager.setPrimaryClip(clip) + } + + override fun clearPrimaryClip() { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + clipboardManager.clearPrimaryClip() + return + } + + val clip = + ClipData.newPlainText(null, "") + clipboardManager.setPrimaryClip(clip) + } + + override fun hasCopyNotification() = Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/copy/ConnectivityServiceAndroid.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/copy/ConnectivityServiceAndroid.kt new file mode 100644 index 00000000..d15e38b6 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/copy/ConnectivityServiceAndroid.kt @@ -0,0 +1,64 @@ +package com.artemchep.keyguard.copy + +import android.app.Application +import android.content.Context +import android.net.ConnectivityManager +import android.net.Network +import android.net.NetworkCapabilities +import android.net.NetworkRequest +import androidx.core.content.getSystemService +import com.artemchep.keyguard.common.service.connectivity.ConnectivityService +import kotlinx.coroutines.channels.awaitClose +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.channelFlow +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class ConnectivityServiceAndroid( + private val context: Context, +) : ConnectivityService { + constructor( + directDI: DirectDI, + ) : this( + context = directDI.instance(), + ) + + override val availableFlow: Flow = channelFlow { + // Return the callback immediately if the internet is + // available. + if (isInternetAvailable()) { + send(Unit) + } + + val networkCallback = object : ConnectivityManager.NetworkCallback() { + override fun onAvailable(network: Network) { + trySend(Unit) + } + } + val networkRequest: NetworkRequest = NetworkRequest.Builder() + .addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR) + .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) + .build() + val connectivityManager = context.getSystemService() + connectivityManager?.registerNetworkCallback(networkRequest, networkCallback) + + awaitClose { + connectivityManager?.unregisterNetworkCallback(networkCallback) + } + } + + override fun isInternetAvailable(): Boolean { + val connectivityManager = context.getSystemService() + ?: return false + val networkCapabilities = connectivityManager.activeNetwork + ?: return false + val actNw = connectivityManager.getNetworkCapabilities(networkCapabilities) + ?: return false + return when { + actNw.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) -> true + actNw.hasTransport(NetworkCapabilities.TRANSPORT_CELLULAR) -> true + actNw.hasTransport(NetworkCapabilities.TRANSPORT_ETHERNET) -> true + else -> false + } + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/copy/GetBarcodeImageJvm.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/copy/GetBarcodeImageJvm.kt new file mode 100644 index 00000000..0c219d25 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/copy/GetBarcodeImageJvm.kt @@ -0,0 +1,45 @@ +package com.artemchep.keyguard.copy + +import android.graphics.Bitmap +import androidx.compose.ui.graphics.ImageBitmap +import androidx.compose.ui.graphics.asImageBitmap +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.model.BarcodeImageRequest +import com.artemchep.keyguard.common.usecase.GetBarcodeImage +import com.artemchep.keyguard.util.encode +import kotlinx.coroutines.Dispatchers +import org.kodein.di.DirectDI +import kotlin.coroutines.CoroutineContext + +/** + * @author Artem Chepurnyi + */ +class GetBarcodeImageJvm( + private val dispatcher: CoroutineContext = Dispatchers.Default, +) : GetBarcodeImage { + constructor(directDI: DirectDI) : this() + + override fun invoke( + request: BarcodeImageRequest, + ): IO = ioEffect(dispatcher) { + val bitMatrix = request.encode() + val width = bitMatrix.width + val height = bitMatrix.height + val pixels = IntArray(width * height) + for (y in 0 until height) { + for (x in 0 until width) { + val color = if (bitMatrix.get(x, y)) { + -0x1000000 + } else { + -0x1 + } + pixels[y * width + x] = color + } + } + val bitmap = Bitmap + .createBitmap(width, height, Bitmap.Config.ARGB_8888) + bitmap.setPixels(pixels, 0, width, 0, 0, width, height) + bitmap.asImageBitmap() + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/copy/LinkInfoExtractorAndroid.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/copy/LinkInfoExtractorAndroid.kt new file mode 100644 index 00000000..ba223397 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/copy/LinkInfoExtractorAndroid.kt @@ -0,0 +1,66 @@ +package com.artemchep.keyguard.copy + +import android.content.pm.PackageManager +import androidx.collection.LruCache +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.model.LinkInfoAndroid +import com.artemchep.keyguard.common.model.LinkInfoPlatform +import com.artemchep.keyguard.common.service.extract.LinkInfoExtractor +import com.google.accompanist.drawablepainter.DrawablePainter +import kotlin.reflect.KClass + +class LinkInfoExtractorAndroid( + private val packageManager: PackageManager, +) : LinkInfoExtractor { + private val lruCache = LruCache(2) + + override val from: KClass get() = LinkInfoPlatform.Android::class + + override val to: KClass get() = LinkInfoAndroid::class + + override fun extractInfo( + uri: LinkInfoPlatform.Android, + ): IO = ioEffect { + synchronized(lruCache) { + val cached = lruCache.get(uri.packageName) + if (cached != null) { + return@ioEffect cached + } + + val result = obtainInfo( + uri = uri, + ) + lruCache.put(uri.packageName, result) + result + } + } + + private fun obtainInfo( + uri: LinkInfoPlatform.Android, + ) = kotlin.run { + val appInfoNotInstalled = LinkInfoAndroid.NotInstalled( + platform = uri, + ) + val appInfo = try { + val packageName = uri.packageName + if (packageName.isEmpty()) { + // no need to check if empty package is installed + return@run appInfoNotInstalled + } + packageManager.getApplicationInfo(packageName, 0) + } catch (e: PackageManager.NameNotFoundException) { + return@run appInfoNotInstalled + } + + val label = packageManager.getApplicationLabel(appInfo) + val icon = packageManager.getApplicationIcon(appInfo) + LinkInfoAndroid.Installed( + label = label.toString(), + icon = DrawablePainter(icon), + platform = uri, + ) + } + + override fun handles(uri: LinkInfoPlatform.Android): Boolean = true +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/copy/LinkInfoExtractorExecute.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/copy/LinkInfoExtractorExecute.kt new file mode 100644 index 00000000..e5c287e0 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/copy/LinkInfoExtractorExecute.kt @@ -0,0 +1,21 @@ +package com.artemchep.keyguard.copy + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.io +import com.artemchep.keyguard.common.model.DSecret +import com.artemchep.keyguard.common.model.LinkInfoExecute +import com.artemchep.keyguard.common.service.extract.LinkInfoExtractor +import kotlin.reflect.KClass + +class LinkInfoExtractorExecute( +) : LinkInfoExtractor { + override val from: KClass get() = DSecret.Uri::class + + override val to: KClass get() = LinkInfoExecute::class + + override fun extractInfo( + uri: DSecret.Uri, + ): IO = io(LinkInfoExecute.Deny) + + override fun handles(uri: DSecret.Uri): Boolean = true +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/copy/LinkInfoExtractorLaunch.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/copy/LinkInfoExtractorLaunch.kt new file mode 100644 index 00000000..bde3e859 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/copy/LinkInfoExtractorLaunch.kt @@ -0,0 +1,65 @@ +package com.artemchep.keyguard.copy + +import android.content.Intent +import android.content.pm.PackageManager +import android.net.Uri +import androidx.collection.LruCache +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.model.DSecret +import com.artemchep.keyguard.common.model.LinkInfoLaunch +import com.artemchep.keyguard.common.service.extract.LinkInfoExtractor +import com.google.accompanist.drawablepainter.DrawablePainter +import kotlin.reflect.KClass + +class LinkInfoExtractorLaunch( + private val packageManager: PackageManager, +) : LinkInfoExtractor { + private val lruCache = LruCache(2) + + override val from: KClass get() = DSecret.Uri::class + + override val to: KClass get() = LinkInfoLaunch::class + + override fun extractInfo( + uri: DSecret.Uri, + ): IO = ioEffect { + synchronized(lruCache) { + val cached = lruCache.get(uri.uri) + if (cached != null) { + return@ioEffect cached + } + + val result = obtainInfo( + uri = uri.uri, + ) + lruCache.put(uri.uri, result) + result + } + } + + private fun obtainInfo( + uri: String, + ): LinkInfoLaunch = kotlin.run { + val intent = Intent(Intent.ACTION_VIEW).apply { + data = Uri.parse(uri) + } + val apps = packageManager + .queryIntentActivities(intent, 0) + .map { resolveInfo -> + val label = resolveInfo.loadLabel(packageManager) + .toString() + val icon = resolveInfo.loadIcon(packageManager) + LinkInfoLaunch.Allow.AppInfo( + label = label, + icon = DrawablePainter(icon), + ) + } + when { + apps.isEmpty() -> LinkInfoLaunch.Deny + else -> LinkInfoLaunch.Allow(apps) + } + } + + override fun handles(uri: DSecret.Uri): Boolean = true +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/copy/LogRepositoryAndroid.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/copy/LogRepositoryAndroid.kt new file mode 100644 index 00000000..516375fc --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/copy/LogRepositoryAndroid.kt @@ -0,0 +1,27 @@ +package com.artemchep.keyguard.copy + +import android.util.Log +import com.artemchep.keyguard.common.io.attempt +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.service.logging.LogLevel +import com.artemchep.keyguard.common.service.logging.LogRepository +import kotlinx.coroutines.GlobalScope + +class LogRepositoryAndroid() : LogRepository { + override fun post( + tag: String, + message: String, + level: LogLevel, + ) { + add(tag, message, level).attempt().launchIn(GlobalScope) + } + + override fun add( + tag: String, + message: String, + level: LogLevel, + ) = ioEffect { + Log.d(tag, message) + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/copy/PermissionServiceAndroid.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/copy/PermissionServiceAndroid.kt new file mode 100644 index 00000000..a5aa55b7 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/copy/PermissionServiceAndroid.kt @@ -0,0 +1,86 @@ +package com.artemchep.keyguard.copy + +import android.app.Application +import android.content.Context +import android.content.pm.PackageManager +import android.os.Build +import arrow.core.partially1 +import com.artemchep.keyguard.android.closestActivityOrNull +import com.artemchep.keyguard.common.service.permission.Permission +import com.artemchep.keyguard.common.service.permission.PermissionService +import com.artemchep.keyguard.common.service.permission.PermissionState +import com.artemchep.keyguard.common.util.flow.EventFlow +import com.artemchep.keyguard.platform.LeContext +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.onStart +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class PermissionServiceAndroid( + private val context: Context, +) : PermissionService { + companion object { + const val REQUEST_CODE = 12341 + } + + private val refreshSink = EventFlow() + + constructor( + directDI: DirectDI, + ) : this( + context = directDI.instance(), + ) + + override fun getState( + permission: Permission, + ): Flow { + val sdk = Build.VERSION.SDK_INT + if ( + sdk < permission.minSdk || + sdk > permission.maxSdk + ) { + val result = PermissionState.Granted + return MutableStateFlow(result) + } + + return refreshSink + .onStart { emit(Unit) } + .map { + // Check the status of the permission. + checkPermission(permission.permission) + } + } + + private fun checkPermission(permission: String): PermissionState { + val isGranted = context.checkSelfPermission(permission) == + PackageManager.PERMISSION_GRANTED + return if (isGranted) { + PermissionState.Granted + } else { + PermissionState.Declined( + ask = ::askPermission + .partially1(permission), + ) + } + } + + private fun askPermission( + permission: String, + context: LeContext, + ) { + val activity = context.context.closestActivityOrNull + ?: return + activity.requestPermissions( + arrayOf(permission), + REQUEST_CODE, + ) + } + + // Android + + fun refresh() { + refreshSink.emit(Unit) + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/copy/PowerServiceAndroid.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/copy/PowerServiceAndroid.kt new file mode 100644 index 00000000..7cc928c7 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/copy/PowerServiceAndroid.kt @@ -0,0 +1,25 @@ +package com.artemchep.keyguard.copy + +import android.app.Application +import com.artemchep.keyguard.android.util.screenFlow +import com.artemchep.keyguard.common.service.power.PowerService +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.shareIn +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class PowerServiceAndroid( + private val application: Application, +) : PowerService { + private val sharedFlow = screenFlow(application) + .shareIn(GlobalScope, SharingStarted.WhileSubscribed(5000L), replay = 1) + + constructor( + directDI: DirectDI, + ) : this( + application = directDI.instance(), + ) + + override fun getScreenState() = sharedFlow +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/copy/QueueSyncAll.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/copy/QueueSyncAll.kt new file mode 100644 index 00000000..a12102a5 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/copy/QueueSyncAll.kt @@ -0,0 +1,27 @@ +package com.artemchep.keyguard.copy + +import android.app.Application +import android.content.Context +import com.artemchep.keyguard.android.worker.SyncWorker +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.usecase.QueueSyncAll +import org.kodein.di.DirectDI +import org.kodein.di.instance + +/** + * @author Artem Chepurnyi + */ +class QueueSyncAllAndroid( + private val context: Context, +) : QueueSyncAll { + constructor(directDI: DirectDI) : this( + context = directDI.instance(), + ) + + override fun invoke(): IO = ioEffect { + SyncWorker.enqueueOnce( + context = context, + ) + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/copy/QueueSyncById.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/copy/QueueSyncById.kt new file mode 100644 index 00000000..8b72eb6a --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/copy/QueueSyncById.kt @@ -0,0 +1,32 @@ +package com.artemchep.keyguard.copy + +import android.content.Context +import com.artemchep.keyguard.android.worker.SyncWorker +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.model.AccountId +import com.artemchep.keyguard.common.usecase.QueueSyncById +import org.kodein.di.DirectDI +import org.kodein.di.instance + +/** + * @author Artem Chepurnyi + */ +class QueueSyncByIdAndroid( + private val context: Context, +) : QueueSyncById { + constructor(directDI: DirectDI) : this( + context = directDI.instance(), + ) + + override fun invoke( + accountId: AccountId, + ): IO = ioEffect { + SyncWorker.enqueueOnce( + context = context, + accounts = setOf( + accountId, + ), + ) + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/copy/ReviewServiceAndroid.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/copy/ReviewServiceAndroid.kt new file mode 100644 index 00000000..9dcfb3f2 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/copy/ReviewServiceAndroid.kt @@ -0,0 +1,55 @@ +package com.artemchep.keyguard.copy + +import android.app.Application +import android.content.Context +import com.artemchep.keyguard.android.closestActivityOrNull +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.service.review.ReviewService +import com.artemchep.keyguard.platform.LeContext +import com.google.android.gms.tasks.Task +import com.google.android.play.core.review.ReviewManagerFactory +import kotlinx.coroutines.Dispatchers +import org.kodein.di.DirectDI +import org.kodein.di.instance +import kotlin.coroutines.resume +import kotlin.coroutines.resumeWithException +import kotlin.coroutines.suspendCoroutine + +class ReviewServiceAndroid( + private val context: Context, +) : ReviewService { + private val reviewManager = ReviewManagerFactory.create(context.applicationContext) + + constructor( + directDI: DirectDI, + ) : this( + context = directDI.instance(), + ) + + override fun request( + context: LeContext, + ): IO = ioEffect(Dispatchers.Main) { + val activity = context.context.closestActivityOrNull + requireNotNull(activity) { + "Failed to find activity for App review." + } + + val reviewInfo = reviewManager + .requestReviewFlow() + .await() + reviewManager + .launchReviewFlow(activity, reviewInfo) + .await() + } +} + +private suspend fun Task.await() = suspendCoroutine { continuation -> + addOnCompleteListener { task -> + if (task.isSuccessful) { + continuation.resume(task.result as T) + } else { + continuation.resumeWithException(task.exception!!) + } + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/copy/SharedPreferencesStoreFactory.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/copy/SharedPreferencesStoreFactory.kt new file mode 100644 index 00000000..462d3678 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/copy/SharedPreferencesStoreFactory.kt @@ -0,0 +1,12 @@ +package com.artemchep.keyguard.copy + +import com.artemchep.keyguard.common.service.Files +import com.artemchep.keyguard.common.service.keyvalue.KeyValueStore +import org.kodein.di.DI + +/** + * @author Artem Chepurnyi + */ +interface SharedPreferencesStoreFactory { + fun getStore(di: DI, key: Files): KeyValueStore +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/copy/SharedPreferencesStoreFactoryDefault.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/copy/SharedPreferencesStoreFactoryDefault.kt new file mode 100644 index 00000000..524b0577 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/copy/SharedPreferencesStoreFactoryDefault.kt @@ -0,0 +1,18 @@ +package com.artemchep.keyguard.copy + +import com.artemchep.keyguard.common.service.Files +import com.artemchep.keyguard.common.service.keyvalue.KeyValueStore +import org.kodein.di.DI +import org.kodein.di.direct +import org.kodein.di.instance + +/** + * @author Artem Chepurnyi + */ +class SharedPreferencesStoreFactoryDefault : SharedPreferencesStoreFactory { + override fun getStore(di: DI, key: Files): KeyValueStore = + di.direct.instance( + tag = "proto", // default to secure preferences + arg = key, + ) +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/copy/SubscriptionServiceAndroid.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/copy/SubscriptionServiceAndroid.kt new file mode 100644 index 00000000..65d0c090 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/copy/SubscriptionServiceAndroid.kt @@ -0,0 +1,231 @@ +package com.artemchep.keyguard.copy + +import android.app.Activity +import com.android.billingclient.api.AcknowledgePurchaseParams +import com.android.billingclient.api.BillingClient.SkuType +import com.android.billingclient.api.BillingFlowParams +import com.android.billingclient.api.Purchase +import com.android.billingclient.api.SkuDetailsParams +import com.artemchep.keyguard.android.closestActivityOrNull +import com.artemchep.keyguard.billing.BillingConnection +import com.artemchep.keyguard.billing.BillingManager +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.attempt +import com.artemchep.keyguard.common.io.effectMap +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.io.timeout +import com.artemchep.keyguard.common.io.toIO +import com.artemchep.keyguard.common.model.Product +import com.artemchep.keyguard.common.model.RichResult +import com.artemchep.keyguard.common.model.Subscription +import com.artemchep.keyguard.common.model.combine +import com.artemchep.keyguard.common.model.map +import com.artemchep.keyguard.common.model.orNull +import com.artemchep.keyguard.common.service.subscription.SubscriptionService +import com.artemchep.keyguard.feature.crashlytics.crashlyticsTap +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.filter +import kotlinx.coroutines.flow.flatMapLatest +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.mapNotNull +import kotlinx.coroutines.flow.onEach +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class SubscriptionServiceAndroid( + private val billingManager: BillingManager, +) : SubscriptionService { + companion object { + private val SkuListSubscription = listOf( + "premium", + "premium_3m", + ) + + private val SkuListProduct = listOf( + "premium_lifetime", + ) + } + + constructor( + directDI: DirectDI, + ) : this( + billingManager = directDI.instance(), + ) + + override fun purchased(): Flow> = getReceiptFlow() + .map { receiptsResult -> + receiptsResult.map { receipts -> + receipts.any { + val isSubscription = it.skus.intersect(SkuListSubscription).isNotEmpty() + val isProduct = it.skus.intersect(SkuListProduct).isNotEmpty() + isSubscription || isProduct + } + } + } + + override fun subscriptions(): Flow?> = combine( + getReceiptFlow() + .filter { it !is RichResult.Loading }, + getSkuDetailsFlow(SkuType.SUBS) + .filter { it !is RichResult.Loading }, + ) { receiptsResult, skuDetailsResult -> + val receipts = receiptsResult.orNull() + val skuDetails = skuDetailsResult.orNull() + + skuDetails?.map { + val status = kotlin.run { + val skuReceipt = receipts?.firstOrNull { purchase -> it.sku in purchase.skus } + ?: return@run Subscription.Status.Inactive + Subscription.Status.Active( + willRenew = skuReceipt.isAutoRenewing, + ) + } + Subscription( + id = it.sku, + title = it.title, + description = it.description, + price = it.price, + status = status, + purchase = { context -> + val activity = context.context.closestActivityOrNull + ?: return@Subscription + val params = BillingFlowParams.newBuilder() + .run { + val existingPurchase = receipts + ?.firstOrNull { + SkuListSubscription.intersect(it.skus) + .isNotEmpty() + } + if (existingPurchase != null && it.sku !in existingPurchase.skus) { + val params = BillingFlowParams.SubscriptionUpdateParams + .newBuilder() + .setOldSkuPurchaseToken(existingPurchase.purchaseToken) + .build() + setSubscriptionUpdateParams(params) + } else { + this + } + } + .setSkuDetails(it) + .build() + purchase(activity, params) + .crashlyticsTap() + .attempt() + .launchIn(GlobalScope) + }, + ) + } + } + + override fun products(): Flow?> = combine( + getReceiptFlow() + .filter { it !is RichResult.Loading }, + getSkuDetailsFlow(SkuType.INAPP) + .filter { it !is RichResult.Loading }, + ) { receiptsResult, skuDetailsResult -> + val receipts = receiptsResult.orNull() + val skuDetails = skuDetailsResult.orNull() + + skuDetails?.map { + val status = kotlin.run { + receipts?.firstOrNull { purchase -> it.sku in purchase.skus } + ?: return@run Product.Status.Inactive + Product.Status.Active + } + Product( + id = it.sku, + title = it.title, + description = it.description, + price = it.price, + status = status, + purchase = { context -> + val activity = context.context.closestActivityOrNull + ?: return@Product + val params = BillingFlowParams.newBuilder() + .setSkuDetails(it) + .build() + purchase(activity, params) + .crashlyticsTap() + .attempt() + .launchIn(GlobalScope) + }, + ) + } + } + + private fun purchase( + activity: Activity, + params: BillingFlowParams, + ): IO = billingManager + .billingConnectionFlow + .flatMapLatest { connection -> + connection + .clientLiveFlow + .mapNotNull { result -> + result.orNull() + } + } + .toIO() + .timeout(1000L) + // Launch the purchase dialog using + // obtained billing client. + .effectMap(Dispatchers.Main) { client -> + client.launchBillingFlow(activity, params) + } + + private fun getReceiptFlow() = billingManager + .billingConnectionFlow + .flatMapLatest { connection -> + val subscriptionsFlow = connection + .purchasesFlow(SkuType.SUBS) + .onEachAcknowledge(connection) + val productsFlow = connection + .purchasesFlow(SkuType.INAPP) + .onEachAcknowledge(connection) + combine( + subscriptionsFlow, + productsFlow, + ) { subscriptions, products -> + subscriptions.combine(products) + } + } + + private fun Flow>>.onEachAcknowledge( + connection: BillingConnection, + ) = this + .onEach { + val purchases = it.orNull() + ?: return@onEach + purchases.acknowledge(connection) + } + + private fun List.acknowledge( + connection: BillingConnection, + ) = this + .filter { !it.isAcknowledged } + .forEach { purchase -> + val acknowledgePurchaseParams = AcknowledgePurchaseParams.newBuilder() + .setPurchaseToken(purchase.purchaseToken) + .build() + connection.acknowledgePurchase(acknowledgePurchaseParams) + } + + private fun getSkuDetailsFlow(skuType: String) = billingManager + .billingConnectionFlow + .flatMapLatest { connection -> + val skusList = when (skuType) { + SkuType.SUBS -> SkuListSubscription + SkuType.INAPP -> SkuListProduct + else -> error("Unknown SKU type!") + } + + val skuDetailsParams = SkuDetailsParams.newBuilder() + .setType(skuType) + .setSkusList(skusList) + .build() + connection.skuDetailsFlow(skuDetailsParams) + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/copy/TextServiceAndroid.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/copy/TextServiceAndroid.kt new file mode 100644 index 00000000..99a7c5d6 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/copy/TextServiceAndroid.kt @@ -0,0 +1,26 @@ +package com.artemchep.keyguard.copy + +import android.app.Application +import android.content.Context +import com.artemchep.keyguard.common.service.text.TextService +import dev.icerock.moko.resources.FileResource +import org.kodein.di.DirectDI +import org.kodein.di.instance +import java.io.InputStream + +class TextServiceAndroid( + private val context: Context, +) : TextService { + constructor( + directDI: DirectDI, + ) : this( + context = directDI.instance(), + ) + + override fun readFromResources( + fileResource: FileResource, + ): InputStream = fileResource.inputStream() + + private fun FileResource.inputStream() = context.resources + .openRawResource(rawResId) +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/core/session/FingerprintRepositoryModule.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/core/session/FingerprintRepositoryModule.kt new file mode 100644 index 00000000..e113767e --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/core/session/FingerprintRepositoryModule.kt @@ -0,0 +1,257 @@ +package com.artemchep.keyguard.core.session + +import android.app.Application +import android.content.Context +import android.content.pm.PackageManager +import android.util.Log +import com.artemchep.keyguard.android.downloader.DownloadClientAndroid +import com.artemchep.keyguard.android.downloader.DownloadManagerImpl +import com.artemchep.keyguard.android.downloader.journal.DownloadRepository +import com.artemchep.keyguard.android.downloader.journal.DownloadRepositoryImpl +import com.artemchep.keyguard.android.downloader.journal.room.DownloadDatabaseManager +import com.artemchep.keyguard.common.service.Files +import com.artemchep.keyguard.common.service.autofill.AutofillService +import com.artemchep.keyguard.common.service.clipboard.ClipboardService +import com.artemchep.keyguard.common.service.connectivity.ConnectivityService +import com.artemchep.keyguard.common.service.download.DownloadManager +import com.artemchep.keyguard.common.service.keyvalue.KeyValueStore +import com.artemchep.keyguard.common.service.logging.LogRepository +import com.artemchep.keyguard.common.service.permission.PermissionService +import com.artemchep.keyguard.common.service.power.PowerService +import com.artemchep.keyguard.common.service.review.ReviewService +import com.artemchep.keyguard.common.service.subscription.SubscriptionService +import com.artemchep.keyguard.common.service.text.TextService +import com.artemchep.keyguard.common.usecase.BiometricStatusUseCase +import com.artemchep.keyguard.common.usecase.CleanUpAttachment +import com.artemchep.keyguard.common.usecase.ClearData +import com.artemchep.keyguard.common.usecase.DisableBiometric +import com.artemchep.keyguard.common.usecase.EnableBiometric +import com.artemchep.keyguard.common.usecase.GetBarcodeImage +import com.artemchep.keyguard.common.usecase.GetBiometricRemainingDuration +import com.artemchep.keyguard.common.usecase.GetLocale +import com.artemchep.keyguard.common.usecase.GetPurchased +import com.artemchep.keyguard.common.usecase.GetSuggestions +import com.artemchep.keyguard.common.usecase.PutLocale +import com.artemchep.keyguard.common.usecase.impl.CleanUpAttachmentImpl +import com.artemchep.keyguard.common.usecase.impl.DisableBiometricImpl +import com.artemchep.keyguard.common.usecase.impl.EnableBiometricImpl +import com.artemchep.keyguard.common.usecase.impl.GetBiometricRemainingDurationImpl +import com.artemchep.keyguard.common.usecase.impl.GetPurchasedImpl +import com.artemchep.keyguard.common.usecase.impl.GetSuggestionsImpl +import com.artemchep.keyguard.copy.AutofillServiceAndroid +import com.artemchep.keyguard.copy.ClearDataAndroid +import com.artemchep.keyguard.copy.ClipboardServiceAndroid +import com.artemchep.keyguard.copy.ConnectivityServiceAndroid +import com.artemchep.keyguard.copy.GetBarcodeImageJvm +import com.artemchep.keyguard.copy.LinkInfoExtractorAndroid +import com.artemchep.keyguard.copy.LinkInfoExtractorExecute +import com.artemchep.keyguard.copy.LinkInfoExtractorLaunch +import com.artemchep.keyguard.copy.LogRepositoryAndroid +import com.artemchep.keyguard.copy.PermissionServiceAndroid +import com.artemchep.keyguard.copy.PowerServiceAndroid +import com.artemchep.keyguard.copy.ReviewServiceAndroid +import com.artemchep.keyguard.copy.SharedPreferencesStoreFactory +import com.artemchep.keyguard.copy.SharedPreferencesStoreFactoryDefault +import com.artemchep.keyguard.copy.SubscriptionServiceAndroid +import com.artemchep.keyguard.copy.TextServiceAndroid +import com.artemchep.keyguard.core.session.usecase.BiometricStatusUseCaseImpl +import com.artemchep.keyguard.core.session.usecase.GetLocaleAndroid +import com.artemchep.keyguard.core.session.usecase.PutLocaleAndroid +import com.artemchep.keyguard.di.globalModuleJvm +import com.artemchep.keyguard.platform.LeContext +import com.artemchep.keyguard.platform.util.isRelease +import db_key_value.crypto_prefs.SecurePrefKeyValueStore +import db_key_value.shared_prefs.SharedPrefsKeyValueStore +import io.ktor.client.HttpClient +import io.ktor.client.engine.okhttp.OkHttp +import io.ktor.client.plugins.HttpRequestRetry +import io.ktor.client.plugins.UserAgent +import io.ktor.client.plugins.cache.HttpCache +import io.ktor.client.plugins.contentnegotiation.ContentNegotiation +import io.ktor.client.plugins.logging.LogLevel +import io.ktor.client.plugins.logging.Logging +import io.ktor.client.plugins.websocket.WebSockets +import io.ktor.http.ContentType +import io.ktor.http.HttpStatusCode +import io.ktor.serialization.kotlinx.KotlinxSerializationConverter +import kotlinx.serialization.json.Json +import okhttp3.OkHttpClient +import okhttp3.logging.HttpLoggingInterceptor +import org.kodein.di.DI +import org.kodein.di.bind +import org.kodein.di.bindProvider +import org.kodein.di.bindSingleton +import org.kodein.di.factory +import org.kodein.di.instance +import org.kodein.di.multiton + +fun diFingerprintRepositoryModule() = DI.Module( + name = "com.artemchep.keyguard.core.session.repository::FingerprintRepository", +) { + import(globalModuleJvm()) + + bindProvider() { + val context: Context = instance() + LeContext(context) + } + bindSingleton { + BiometricStatusUseCaseImpl( + directDI = this, + ) + } + bindSingleton { + GetBarcodeImageJvm( + directDI = this, + ) + } + + bindSingleton { + GetBiometricRemainingDurationImpl( + directDI = this, + ) + } + bindSingleton { + DisableBiometricImpl( + directDI = this, + ) + } + bindSingleton { + EnableBiometricImpl( + directDI = this, + ) + } + + + bindSingleton { + GetLocaleAndroid( + directDI = this, + ) + } + bindSingleton { + PutLocaleAndroid( + directDI = this, + ) + } + bindSingleton> { + GetSuggestionsImpl( + directDI = this, + ) + } + bindSingleton { + GetPurchasedImpl( + directDI = this, + ) + } + + + bindSingleton { + CleanUpAttachmentImpl( + directDI = this, + ) + } +// bindSingleton { +// CleanUpDownloadImpl( +// directDI = this, +// ) +// } + bindSingleton { + ClipboardServiceAndroid(this) + } + bindSingleton { + ConnectivityServiceAndroid(this) + } + bindSingleton { + PowerServiceAndroid(this) + } + bindSingleton { + PermissionServiceAndroid(this) + } + bindProvider { + instance() + } + bindSingleton { + LinkInfoExtractorAndroid( + packageManager = instance(), + ) + } + bindSingleton { + LinkInfoExtractorLaunch( + packageManager = instance(), + ) + } + bindSingleton { + LinkInfoExtractorExecute() + } + bindSingleton { + TextServiceAndroid( + directDI = this, + ) + } + bindSingleton { + ReviewServiceAndroid( + directDI = this, + ) + } + bindProvider { + instance().packageManager + } + bindSingleton { + DownloadClientAndroid( + directDI = this, + ) + } + bindSingleton { + DownloadManagerImpl( + directDI = this, + ) + } + bindSingleton { + DownloadRepositoryImpl( + directDI = this, + ) + } + bindSingleton { + AutofillServiceAndroid( + directDI = this, + ) + } + bindSingleton { + SubscriptionServiceAndroid( + directDI = this, + ) + } + bindSingleton { + ClearDataAndroid( + directDI = this, + ) + } + bind() with factory { key: Files -> + val factory = instance() + factory.getStore(di, key) + } + bind("proto") with multiton { file: Files -> + SecurePrefKeyValueStore( + context = instance(), + file = file.filename, + ) + } + bind("shared") with multiton { file: Files -> + SharedPrefsKeyValueStore( + context = instance(), + file = file.filename, + ) + } + bindSingleton { + SharedPreferencesStoreFactoryDefault() + } + bindSingleton { + DownloadDatabaseManager( + applicationContext = instance(), + name = "download", + deviceEncryptionKeyUseCase = instance(), + ) + } + bindSingleton { + LogRepositoryAndroid() + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/core/session/usecase/GetLocaleImpl.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/core/session/usecase/GetLocaleImpl.kt new file mode 100644 index 00000000..cd280fb8 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/core/session/usecase/GetLocaleImpl.kt @@ -0,0 +1,29 @@ +package com.artemchep.keyguard.core.session.usecase + +import androidx.appcompat.app.AppCompatDelegate +import com.artemchep.keyguard.common.service.settings.SettingsReadRepository +import com.artemchep.keyguard.common.usecase.GetLocale +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.flow +import kotlinx.coroutines.flow.flowOn +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class GetLocaleAndroid( + settingsReadRepository: SettingsReadRepository, +) : GetLocale { + constructor(directDI: DirectDI) : this( + settingsReadRepository = directDI.instance(), + ) + + override fun invoke(): Flow = flow { + val localeList = AppCompatDelegate.getApplicationLocales() + val l = (0 until localeList.size()) + .map { localeList[it] } + .firstOrNull() + ?.language + emit(l) + } + .flowOn(Dispatchers.Main) +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/core/session/usecase/GetLocaleVariantsImpl.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/core/session/usecase/GetLocaleVariantsImpl.kt new file mode 100644 index 00000000..e2502284 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/core/session/usecase/GetLocaleVariantsImpl.kt @@ -0,0 +1,40 @@ +package com.artemchep.keyguard.core.session.usecase + +import androidx.appcompat.app.AppCompatDelegate +import androidx.core.os.LocaleListCompat +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.io.shared +import com.artemchep.keyguard.common.usecase.GetLocaleVariants +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.asFlow +import org.kodein.di.DirectDI + +class GetLocaleVariantsAndroid() : GetLocaleVariants { + constructor(directDI: DirectDI) : this() + + private val sharedFlow = ioEffect(Dispatchers.Main) { + val locales = mutableListOf() + locales += null + locales += "test" + locales += getLocales() + locales + } + .shared() + .asFlow() + + override fun invoke(): Flow> = sharedFlow + + private fun getLocales(): List { + val locales = kotlin.run { + val method = AppCompatDelegate::class.java.getDeclaredMethod( + "getStoredAppLocales", + ) + method.isAccessible = true + method.invoke(null) as LocaleListCompat + } + return (0 until locales.size()) + .mapNotNull { index -> locales[index] } + .map { it.language } + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/core/session/usecase/KEY_ALIAS.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/core/session/usecase/KEY_ALIAS.kt new file mode 100644 index 00000000..c98420ec --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/core/session/usecase/KEY_ALIAS.kt @@ -0,0 +1,105 @@ +package com.artemchep.keyguard.core.session.usecase + +import android.app.Application +import android.security.keystore.KeyGenParameterSpec +import android.security.keystore.KeyProperties +import androidx.biometric.BiometricManager +import androidx.biometric.BiometricManager.Authenticators.BIOMETRIC_STRONG +import com.artemchep.keyguard.common.model.BiometricPurpose +import com.artemchep.keyguard.common.model.BiometricStatus +import com.artemchep.keyguard.common.usecase.BiometricStatusUseCase +import kotlinx.coroutines.flow.MutableStateFlow +import org.kodein.di.DirectDI +import org.kodein.di.instance +import java.security.KeyStore +import javax.crypto.Cipher +import javax.crypto.KeyGenerator +import javax.crypto.SecretKey +import javax.crypto.spec.IvParameterSpec + +private const val KEY_ALIAS = "biometrics" + +class BiometricStatusUseCaseImpl( + private val application: Application, +) : BiometricStatusUseCase { + constructor(directDI: DirectDI) : this( + application = directDI.instance(), + ) + + override fun invoke() = kotlin.run { + val state = kotlin.run { + val hasStrongBiometric = hasStrongBiometric() + if (hasStrongBiometric) { + BiometricStatus.Available( + createCipher = ::createCipher, + deleteCipher = ::deleteCipher, + ) + } else { + BiometricStatus.Unavailable + } + } + MutableStateFlow(state) + } + + private fun hasStrongBiometric(): Boolean { + val biometricManager = BiometricManager.from(application) + return biometricManager.canAuthenticate(BIOMETRIC_STRONG) == BiometricManager.BIOMETRIC_SUCCESS + } +} + +private fun getSecretKeyStore(): KeyStore { + val keyStore = KeyStore.getInstance("AndroidKeyStore") + // Before the keystore can be accessed, + // it must be loaded... + keyStore.load(null) + return keyStore +} + +private fun getSecretKey(): SecretKey { + val keyStore = getSecretKeyStore() + // ...if the key already exists, then there's no need + // to regenerate that. + val existingKey = keyStore.getKey(KEY_ALIAS, null) + if (existingKey != null) { + return existingKey as SecretKey + } + + val keyPurpose = KeyProperties.PURPOSE_ENCRYPT or KeyProperties.PURPOSE_DECRYPT + val keySpec = KeyGenParameterSpec.Builder(KEY_ALIAS, keyPurpose) + .setBlockModes(KeyProperties.BLOCK_MODE_CBC) + .setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_NONE) + .setUserAuthenticationRequired(true) + .build() + + val keyGenerator = KeyGenerator + .getInstance(KeyProperties.KEY_ALGORITHM_AES, "AndroidKeyStore") + keyGenerator.init(keySpec) + return keyGenerator.generateKey() as SecretKey +} + +private fun deleteCipher() { + val keyStore = getSecretKeyStore() + keyStore.deleteEntry(KEY_ALIAS) +} + +private fun createCipher( + biometricPurpose: BiometricPurpose, +): Cipher = createEmptyCipher().apply { + val key = getSecretKey() + when (biometricPurpose) { + // Init cipher in encrypt mode with random iv + // seed. The user should persist iv for future use. + is BiometricPurpose.Encrypt -> init(Cipher.ENCRYPT_MODE, key) + is BiometricPurpose.Decrypt -> { + val spec = IvParameterSpec(biometricPurpose.iv.byteArray) + init(Cipher.DECRYPT_MODE, key, spec) + } + } +} + +private fun createEmptyCipher(): Cipher = Cipher + .getInstance( + KeyProperties.KEY_ALGORITHM_AES + "/" + + KeyProperties.BLOCK_MODE_CBC + "/" + + KeyProperties.ENCRYPTION_PADDING_NONE, + ) diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/core/session/usecase/PutLocaleImpl.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/core/session/usecase/PutLocaleImpl.kt new file mode 100644 index 00000000..4c339261 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/core/session/usecase/PutLocaleImpl.kt @@ -0,0 +1,28 @@ +package com.artemchep.keyguard.core.session.usecase + +import androidx.appcompat.app.AppCompatDelegate +import androidx.core.os.LocaleListCompat +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.service.settings.SettingsReadWriteRepository +import com.artemchep.keyguard.common.usecase.PutLocale +import kotlinx.coroutines.Dispatchers +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class PutLocaleAndroid( + private val settingsReadWriteRepository: SettingsReadWriteRepository, +) : PutLocale { + constructor(directDI: DirectDI) : this( + settingsReadWriteRepository = directDI.instance(), + ) + + override fun invoke(locale: String?): IO = ioEffect(Dispatchers.Main) { + val locales = if (locale != null) { + LocaleListCompat.forLanguageTags(locale) + } else { + LocaleListCompat.create() + } + AppCompatDelegate.setApplicationLocales(locales) + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/core/session/usecase/createSubDi.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/core/session/usecase/createSubDi.kt new file mode 100644 index 00000000..5e5b6258 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/core/session/usecase/createSubDi.kt @@ -0,0 +1,129 @@ +package com.artemchep.keyguard.core.session.usecase + +import android.app.Application +import android.content.Context +import androidx.sqlite.db.SupportSQLiteDatabase +import androidx.sqlite.db.SupportSQLiteOpenHelper +import app.cash.sqldelight.db.SqlDriver +import app.cash.sqldelight.driver.android.AndroidSqliteDriver +import com.artemchep.keyguard.android.downloader.journal.room.DownloadDatabaseManager +import com.artemchep.keyguard.common.NotificationsWorker +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.io.flatMap +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.model.MasterKey +import com.artemchep.keyguard.common.usecase.QueueSyncAll +import com.artemchep.keyguard.common.usecase.QueueSyncById +import com.artemchep.keyguard.copy.QueueSyncAllAndroid +import com.artemchep.keyguard.copy.QueueSyncByIdAndroid +import com.artemchep.keyguard.core.store.DatabaseManager +import com.artemchep.keyguard.core.store.DatabaseManagerAndroid +import com.artemchep.keyguard.core.store.DatabaseManagerImpl +import com.artemchep.keyguard.core.store.SqlHelper +import com.artemchep.keyguard.core.store.SqlManager +import com.artemchep.keyguard.data.Database +import com.artemchep.keyguard.feature.crashlytics.crashlyticsTap +import com.artemchep.keyguard.provider.bitwarden.usecase.NotificationsImpl +import com.artemchep.keyguard.room.RoomMigrationException +import net.zetetic.database.sqlcipher.SQLiteDatabase +import net.zetetic.database.sqlcipher.SupportOpenHelperFactory +import org.kodein.di.DI +import org.kodein.di.bindSingleton +import org.kodein.di.instance + +actual fun DI.Builder.createSubDi( + masterKey: MasterKey, +) { + createSubDi2(masterKey) + + bindSingleton { + QueueSyncAllAndroid(this) + } + bindSingleton { + QueueSyncByIdAndroid(this) + } + + bindSingleton { + NotificationsImpl(this) + } + bindSingleton { + val downloadDb = instance() + val roomDb = DatabaseManagerAndroid( + applicationContext = instance(), + json = instance(), + name = "database", + masterKey = masterKey, + ) + val sqlManager: SqlManager = SqlManagerFile2( + context = instance(), + onCreate = { database -> + roomDb + .migrateIfExists(database) + .flatMap { + downloadDb.migrateIfExists(database) + } + // Log this exception, it's important to see how the migration + // process goes. It's okay if it fails, but not great. + .crashlyticsTap { e -> + RoomMigrationException(e) + } + }, + ) + + DatabaseManagerImpl( + logRepository = instance(), + json = instance(), + masterKey = masterKey, + sqlManager = sqlManager, + ) + } +} + +class SqlManagerFile2( + private val context: Context, + private val onCreate: (Database) -> IO, +) : SqlManager { + override fun create( + masterKey: MasterKey, + databaseFactory: (SqlDriver) -> Database, + ): IO = ioEffect { + // Create encrypted database using the provided master key. If the + // key is incorrect, trying to open the database would lead to a crash. + val factory = SupportOpenHelperFactory(masterKey.byteArray, null, false) + val openHelper = factory.create( + SupportSQLiteOpenHelper.Configuration.builder(context) + .callback(Callback()) + .name("database_v2") + .noBackupDirectory(true) + .build(), + ) + val driver: SqlDriver = AndroidSqliteDriver(openHelper) + val database = databaseFactory(driver) + onCreate(database) + .bind() + Helper( + driver = driver, + database = database, + sqliteOpenHelper = openHelper, + ) + } + + private class Callback : AndroidSqliteDriver.Callback(Database.Schema) { + override fun onConfigure(db: SupportSQLiteDatabase) { + super.onConfigure(db) + db.setForeignKeyConstraintsEnabled(true) + } + } + + private class Helper( + override val driver: SqlDriver, + override val database: Database, + private val sqliteOpenHelper: SupportSQLiteOpenHelper, + ) : SqlHelper { + override fun changePassword(newMasterKey: MasterKey): IO = ioEffect { + val cipherDb = sqliteOpenHelper.writableDatabase as SQLiteDatabase + cipherDb.changePassword(newMasterKey.byteArray) + } + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/core/store/DatabaseManager.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/core/store/DatabaseManager.kt new file mode 100644 index 00000000..9310a74b --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/core/store/DatabaseManager.kt @@ -0,0 +1,311 @@ +package com.artemchep.keyguard.core.store + +import android.content.Context +import android.database.SQLException +import android.util.Log +import androidx.room.Room +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.io.effectMap +import com.artemchep.keyguard.common.io.io +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.io.retry +import com.artemchep.keyguard.common.io.shared +import com.artemchep.keyguard.common.model.CipherHistoryType +import com.artemchep.keyguard.common.model.MasterKey +import com.artemchep.keyguard.data.Database +import com.artemchep.keyguard.room.AppDatabase +import com.artemchep.keyguard.room.RoomSecretConverter +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.sync.Mutex +import kotlinx.datetime.Clock +import kotlinx.datetime.Instant +import kotlinx.serialization.json.Json +import net.zetetic.database.sqlcipher.SupportOpenHelperFactory + +class DatabaseManagerAndroid( + private val applicationContext: Context, + private val json: Json, + private val name: String, + masterKey: MasterKey, +) { + companion object { + private const val TAG = "DatabaseManager" + + private val mutex = Mutex() + } + + private val dbFileIo = ioEffect { applicationContext.getDatabasePath(name) } + .shared() + + private val dbIo = io(masterKey) + .effectMap { masterKey -> + val databaseFile = dbFileIo + .bind() + if (!databaseFile.exists()) { + return@effectMap null + } + // Create encrypted database using the provided master key. If the + // key is incorrect, trying to open the database would lead to a crash. + val factory = SupportOpenHelperFactory(masterKey.byteArray, null, false) + Room + .databaseBuilder( + applicationContext, + AppDatabase::class.java, + name, + ) + .openHelperFactory(factory) + .addTypeConverter(RoomSecretConverter(json)) + .build() + } + .retry { e, attempt -> + e.printStackTrace() + if (e is SQLException && attempt == 0) { + applicationContext.deleteDatabase(name) + return@retry true + } + + false + } + .shared() + + fun migrateIfExists( + sqld: Database, + ): IO = ioEffect(Dispatchers.IO) { + val room = dbIo.bind() + // Nothing to migrate. + ?: return@ioEffect + + // account + MigrationLogger.log("Account") { + val accounts = room.accountDao().getAll().first() + sqld.transaction { + val accountIds = sqld.accountQueries + .getIds() + .executeAsList() + .toSet() + accounts.forEach { account -> + if (account.accountId in accountIds) { + ignored() + return@forEach + } + sqld.accountQueries.insert( + accountId = account.accountId, + data = account.content, + ) + changed() + } + } + } + // profile + MigrationLogger.log("Profile") { + val profiles = room.profileDao().getAll().first() + sqld.transaction { + val profileIds = sqld.profileQueries + .getIds() + .executeAsList() + .toSet() + profiles.forEach { profile -> + if (profile.profileId in profileIds) { + ignored() + return@forEach + } + sqld.profileQueries.insert( + profileId = profile.profileId, + accountId = profile.accountId, + data = profile.content, + ) + changed() + } + } + } + // meta + MigrationLogger.log("Meta") { + val metas = room.metaDao().getAll().first() + sqld.transaction { + val accountIds = sqld.metaQueries + .getIds() + .executeAsList() + .toSet() + metas.forEach { meta -> + if (meta.accountId in accountIds) { + ignored() + return@forEach + } + sqld.metaQueries.insert( + accountId = meta.accountId, + data = meta.content, + ) + changed() + } + } + } + // folder + MigrationLogger.log("Folder") { + val folders = room.folderDao().getAll().first() + sqld.transaction { + val folderIds = sqld.folderQueries + .getIds() + .executeAsList() + .toSet() + folders.forEach { folder -> + if (folder.folderId in folderIds) { + ignored() + return@forEach + } + sqld.folderQueries.insert( + folderId = folder.folderId, + accountId = folder.accountId, + data = folder.content, + ) + changed() + } + } + } + // org + MigrationLogger.log("Organization") { + val orgs = room.organizationDao().getAll().first() + sqld.transaction { + val organizationIds = sqld.organizationQueries + .getIds() + .executeAsList() + .toSet() + orgs.forEach { org -> + if (org.organizationId in organizationIds) { + ignored() + return@forEach + } + sqld.organizationQueries.insert( + organizationId = org.organizationId, + accountId = org.accountId, + data = org.content, + ) + changed() + } + } + } + // collection + MigrationLogger.log("Collection") { + val collections = room.collectionDao().getAll().first() + sqld.transaction { + val collectionIds = sqld.collectionQueries + .getIds() + .executeAsList() + .toSet() + collections.forEach { collection -> + if (collection.collectionId in collectionIds) { + ignored() + return@forEach + } + sqld.collectionQueries.insert( + collectionId = collection.collectionId, + accountId = collection.accountId, + data = collection.content, + ) + changed() + } + } + } + // cipher + MigrationLogger.log("Cipher") { + val ciphers = room.cipherDao().getAll().first() + sqld.transaction { + val cipherIds = sqld.cipherQueries + .getIds() + .executeAsList() + .toSet() + ciphers.forEach { cipher -> + if (cipher.itemId in cipherIds) { + ignored() + return@forEach + } + sqld.cipherQueries.insert( + cipherId = cipher.itemId, + accountId = cipher.accountId, + folderId = cipher.folderId, + data = cipher.content, + ) + changed() + } + } + } + // history + MigrationLogger.log("History") { + val openCiphers = room.openCipherHistoryDao().getAll().first() + val fillCiphers = room.fillCipherHistoryDao().getAll().first() + sqld.transaction { + val hasExistingHistory = sqld.cipherUsageHistoryQueries + .get(1) + .executeAsList() + .isNotEmpty() + if (hasExistingHistory) { + return@transaction + } + + openCiphers.forEach { openCipher -> + sqld.cipherUsageHistoryQueries.insert( + cipherId = openCipher.itemId, + credentialId = null, + createdAt = openCipher.timestamp + .let(Instant::fromEpochMilliseconds), + type = CipherHistoryType.OPENED, + ) + changed() + } + fillCiphers.forEach { fillCipher -> + sqld.cipherUsageHistoryQueries.insert( + cipherId = fillCipher.itemId, + credentialId = null, + createdAt = fillCipher.timestamp + .let(Instant::fromEpochMilliseconds), + type = CipherHistoryType.USED_AUTOFILL, + ) + changed() + } + } + } + + val dbFile = dbFileIo.bind() + dbFile.delete() + } + + private class MigrationLogger( + private val tag: String, + ) : MigrationLoggerScope { + companion object { + suspend fun log( + tag: String, + block: suspend MigrationLoggerScope.() -> Unit, + ) { + val logger = MigrationLogger(tag) + block(logger) + logger.flush() + } + } + + private val now = Clock.System.now() + + var changed = 0 + var ignored = 0 + + override fun changed() { + changed += 1 + } + + override fun ignored() { + ignored += 1 + } + + fun flush() { + val dt = Clock.System.now() - now + Log.i("MigrationLogger", "$tag: Changed $changed, ignored $ignored! It took $dt.") + } + } + + interface MigrationLoggerScope { + fun changed() + + fun ignored() + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/apppicker/AppPickerRoute.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/apppicker/AppPickerRoute.kt new file mode 100644 index 00000000..4df3a9a5 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/apppicker/AppPickerRoute.kt @@ -0,0 +1,16 @@ +package com.artemchep.keyguard.feature.apppicker + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.navigation.RouteForResult +import com.artemchep.keyguard.feature.navigation.RouteResultTransmitter + +actual object AppPickerRoute : RouteForResult { + @Composable + override fun Content( + transmitter: RouteResultTransmitter, + ) { + AppPickerScreen( + transmitter = transmitter, + ) + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/apppicker/AppPickerScreen.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/apppicker/AppPickerScreen.kt new file mode 100644 index 00000000..880e2d12 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/apppicker/AppPickerScreen.kt @@ -0,0 +1,280 @@ +package com.artemchep.keyguard.feature.apppicker + +import androidx.compose.foundation.ExperimentalFoundationApi +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.lazy.LazyListState +import androidx.compose.foundation.lazy.items +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material.pullrefresh.pullRefresh +import androidx.compose.material.pullrefresh.rememberPullRefreshState +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.LocalAbsoluteTonalElevation +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.remember +import androidx.compose.runtime.snapshotFlow +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.input.nestedscroll.nestedScroll +import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.model.flatMap +import com.artemchep.keyguard.common.model.getOrNull +import com.artemchep.keyguard.feature.EmptySearchView +import com.artemchep.keyguard.feature.ErrorView +import com.artemchep.keyguard.feature.favicon.FaviconImage +import com.artemchep.keyguard.feature.home.vault.component.SearchTextField +import com.artemchep.keyguard.feature.home.vault.component.surfaceColorAtElevation +import com.artemchep.keyguard.feature.navigation.NavigationIcon +import com.artemchep.keyguard.feature.navigation.RouteResultTransmitter +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.DefaultProgressBar +import com.artemchep.keyguard.ui.FlatItem +import com.artemchep.keyguard.ui.ScaffoldLazyColumn +import com.artemchep.keyguard.ui.focus.FocusRequester2 +import com.artemchep.keyguard.ui.focus.focusRequester2 +import com.artemchep.keyguard.ui.pulltosearch.PullToSearch +import com.artemchep.keyguard.ui.skeleton.SkeletonItem +import com.artemchep.keyguard.ui.toolbar.CustomToolbar +import com.artemchep.keyguard.ui.toolbar.content.CustomToolbarContent +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.filter +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.flow.withIndex + +@Composable +fun AppPickerScreen( + transmitter: RouteResultTransmitter, +) { + val loadableState = produceAppPickerState( + transmitter = transmitter, + ) + ChangePasswordScreen( + loadableState = loadableState, + ) +} + +@OptIn(ExperimentalMaterial3Api::class, ExperimentalFoundationApi::class) +@Composable +fun ChangePasswordScreen( + loadableState: Loadable, +) { + val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior() + val filterState = run { + val filterFlow = loadableState.getOrNull()?.filter + remember(filterFlow) { + filterFlow ?: MutableStateFlow(null) + }.collectAsState() + } + + val listRevision = + loadableState.getOrNull()?.content?.getOrNull()?.getOrNull()?.revision + val listState = remember { + LazyListState( + firstVisibleItemIndex = 0, + firstVisibleItemScrollOffset = 0, + ) + } + + LaunchedEffect(listRevision) { + // TODO: How do you wait till the layout state start to represent + // the actual data? + val listSize = + loadableState.getOrNull()?.content?.getOrNull()?.getOrNull()?.items?.size + snapshotFlow { listState.layoutInfo.totalItemsCount } + .withIndex() + .filter { + it.index > 0 || it.value == listSize + } + .first() + + listState.scrollToItem(0, 0) + } + + val focusRequester = remember { FocusRequester2() } + // Auto focus the text field + // on launch. + LaunchedEffect( + focusRequester, + filterState, + ) { + snapshotFlow { filterState.value } + .first { it?.query?.onChange != null } + delay(100L) + focusRequester.requestFocus() + } + + val pullRefreshState = rememberPullRefreshState( + refreshing = false, + onRefresh = { + focusRequester.requestFocus() + }, + ) + ScaffoldLazyColumn( + modifier = Modifier + .pullRefresh(pullRefreshState) + .nestedScroll(scrollBehavior.nestedScrollConnection), + topAppBarScrollBehavior = scrollBehavior, + topBar = { + CustomToolbar( + scrollBehavior = scrollBehavior, + ) { + Column { + CustomToolbarContent( + title = stringResource(Res.strings.apppicker_header_title), + icon = { + NavigationIcon() + }, + ) + + val query = filterState.value?.query + val queryText = query?.state?.value.orEmpty() + SearchTextField( + modifier = Modifier + .focusRequester2(focusRequester), + text = queryText, + placeholder = stringResource(Res.strings.apppicker_search_placeholder), + searchIcon = false, + leading = {}, + trailing = {}, + onTextChange = query?.onChange, + onGoClick = null, + ) + } + } + }, + pullRefreshState = pullRefreshState, + overlay = { + val filterRevision = filterState.value?.revision + DefaultProgressBar( + visible = listRevision != null && filterRevision != null && + listRevision != filterRevision, + ) + + PullToSearch( + modifier = Modifier + .padding(contentPadding.value), + pullRefreshState = pullRefreshState, + ) + }, + listState = listState, + ) { + val contentState = loadableState + .flatMap { it.content } + when (contentState) { + is Loadable.Loading -> { + for (i in 1..3) { + item("skeleton.$i") { + SkeletonItem() + } + } + } + + is Loadable.Ok -> { + contentState.value.fold( + ifLeft = { e -> + item("error") { + ErrorView( + text = { + Text(text = "Failed to load app list!") + }, + exception = e, + ) + } + }, + ifRight = { content -> + val items = content.items + if (items.isEmpty()) { + item("empty") { + NoItemsPlaceholder() + } + } + + items( + items = items, + key = { it.key }, + ) { item -> + AppItem( + modifier = Modifier + .animateItemPlacement(), + item = item, + ) + } + }, + ) + } + } + } +} + +@Composable +private fun NoItemsPlaceholder( + modifier: Modifier = Modifier, +) { + EmptySearchView( + modifier = modifier, + text = { + Text( + text = stringResource(Res.strings.apppicker_empty_label), + ) + }, + ) +} + +@Composable +private fun AppItem( + modifier: Modifier, + item: AppPickerState.Item, +) { + FlatItem( + modifier = modifier, + leading = { + FaviconImage( + modifier = Modifier + .size(24.dp) + .clip(CircleShape), + imageModel = { + item.icon + }, + ) + }, + title = { + Text(item.name) + }, + text = { + Text(item.text) + }, + trailing = { + if (item.system) { + val elevation = LocalAbsoluteTonalElevation.current + Text( + modifier = Modifier + .background( + MaterialTheme.colorScheme + .surfaceColorAtElevation(elevation + 2.dp), + MaterialTheme.shapes.small, + ) + .padding( + horizontal = 6.dp, + vertical = 2.dp, + ), + text = stringResource(Res.strings.apppicker_system_app_label), + maxLines = 1, + overflow = TextOverflow.Ellipsis, + style = MaterialTheme.typography.labelMedium, + ) + } + }, + onClick = item.onClick, + ) +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/apppicker/AppPickerState.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/apppicker/AppPickerState.kt new file mode 100644 index 00000000..1a5a7da5 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/apppicker/AppPickerState.kt @@ -0,0 +1,45 @@ +package com.artemchep.keyguard.feature.apppicker + +import androidx.compose.runtime.Immutable +import androidx.compose.ui.text.AnnotatedString +import arrow.core.Either +import arrow.optics.optics +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.feature.auth.common.TextFieldModel2 +import com.artemchep.keyguard.feature.favicon.AppIconUrl +import kotlinx.coroutines.flow.StateFlow + +data class AppPickerState( + val filter: StateFlow, + val content: Loadable>, +) { + @Immutable + data class Filter( + val revision: Int, + val query: TextFieldModel2, + ) { + companion object + } + + @Immutable + @optics + data class Content( + val revision: Int, + val items: List, + ) { + companion object + } + + @Immutable + @optics + data class Item( + val key: String, + val icon: AppIconUrl, + val name: AnnotatedString, + val text: String, + val system: Boolean, + val onClick: (() -> Unit)? = null, + ) { + companion object + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/apppicker/AppPickerStateProducer.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/apppicker/AppPickerStateProducer.kt new file mode 100644 index 00000000..f12afdf5 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/apppicker/AppPickerStateProducer.kt @@ -0,0 +1,200 @@ +package com.artemchep.keyguard.feature.apppicker + +import android.content.Context +import android.content.Intent +import android.content.IntentFilter +import android.content.pm.ApplicationInfo +import androidx.compose.runtime.Composable +import androidx.compose.ui.text.AnnotatedString +import arrow.core.partially1 +import com.artemchep.keyguard.android.util.broadcastFlow +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.usecase.UnlockUseCase +import com.artemchep.keyguard.feature.crashlytics.crashlyticsAttempt +import com.artemchep.keyguard.feature.favicon.AppIconUrl +import com.artemchep.keyguard.feature.home.vault.search.IndexedText +import com.artemchep.keyguard.feature.navigation.RouteResultTransmitter +import com.artemchep.keyguard.feature.navigation.state.navigatePopSelf +import com.artemchep.keyguard.feature.navigation.state.produceScreenState +import com.artemchep.keyguard.feature.search.search.IndexedModel +import com.artemchep.keyguard.feature.search.search.mapSearch +import com.artemchep.keyguard.feature.search.search.searchFilter +import com.artemchep.keyguard.feature.search.search.searchQueryHandle +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.flowOn +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.onStart +import org.kodein.di.compose.localDI +import org.kodein.di.direct +import org.kodein.di.instance + +private class AppPickerUiException( + msg: String, + cause: Throwable, +) : RuntimeException(msg, cause) + +@Composable +fun produceAppPickerState( + transmitter: RouteResultTransmitter, +) = with(localDI().direct) { + produceAppPickerState( + transmitter = transmitter, + unlockUseCase = instance(), + ) +} + +@Composable +fun produceAppPickerState( + transmitter: RouteResultTransmitter, + unlockUseCase: UnlockUseCase, +): Loadable = produceScreenState( + key = "app_picker", + initial = Loadable.Loading, + args = arrayOf( + unlockUseCase, + ), +) { + val queryHandle = searchQueryHandle("query") + val queryFlow = searchFilter(queryHandle) { model, revision -> + AppPickerState.Filter( + revision = revision, + query = model, + ) + } + + val appsComparator = Comparator { a: AppInfo, b: AppInfo -> + a.label.compareTo(b.label, ignoreCase = true) + } + + fun onClick(appInfo: AppInfo) { + val uri = "androidapp://${appInfo.packageName}" + val result = AppPickerResult.Confirm(uri) + transmitter(result) + navigatePopSelf() + } + + fun List.toItems(): List { + val packageNameCollisions = mutableMapOf() + return this + .sortedWith(appsComparator) + .map { appInfo -> + val key = kotlin.run { + val newPackageNameCollisionCounter = packageNameCollisions + .getOrDefault(appInfo.packageName, 0) + 1 + packageNameCollisions[appInfo.packageName] = + newPackageNameCollisionCounter + appInfo.packageName + ":" + newPackageNameCollisionCounter + } + AppPickerState.Item( + key = key, + icon = AppIconUrl( + packageName = appInfo.packageName, + ), + name = AnnotatedString(appInfo.label), + text = appInfo.packageName, + system = appInfo.system, + onClick = ::onClick + .partially1(appInfo), + ) + } + } + + val itemsFlow = getAppsFlow(context.context) + .map { apps -> + apps + .toItems() + // Index for the search. + .map { item -> + IndexedModel( + model = item, + indexedText = IndexedText.invoke(item.name.text), + ) + } + } + .mapSearch( + handle = queryHandle, + ) { item, result -> + // Replace the origin text with the one with + // search decor applied to it. + item.copy(name = result.highlightedText) + } + val contentFlow = itemsFlow + .crashlyticsAttempt { e -> + val msg = "Failed to get the app list!" + AppPickerUiException( + msg = msg, + cause = e, + ) + } + .map { result -> + val contentOrException = result + .map { (items, revision) -> + AppPickerState.Content( + revision = revision, + items = items, + ) + } + Loadable.Ok(contentOrException) + } + contentFlow + .map { content -> + val state = AppPickerState( + filter = queryFlow, + content = content, + ) + Loadable.Ok(state) + } +} + +private fun getAppsFlow( + context: Context, +) = broadcastFlow( + context = context, + intentFilter = IntentFilter().apply { + addAction(Intent.ACTION_PACKAGE_ADDED) + addAction(Intent.ACTION_PACKAGE_REPLACED) + addAction(Intent.ACTION_PACKAGE_REMOVED) + }, + // Only system can sent those events. + exported = false, +) + .map { Unit } // do not care about the intent + .onStart { + val initialValue = Unit + emit(initialValue) + } + .map { + getApps(context) + } + .flowOn(Dispatchers.Default) + +private fun getApps( + context: Context, +) = run { + val intent = Intent(Intent.ACTION_MAIN).apply { + addCategory(Intent.CATEGORY_LAUNCHER) + } + val pm = context.packageManager + val apps = pm.queryIntentActivities(intent, 0) + apps + .map { info -> + val system = run { + val ai = pm.getApplicationInfo(info.activityInfo.packageName, 0) + val mask = + ApplicationInfo.FLAG_SYSTEM or ApplicationInfo.FLAG_UPDATED_SYSTEM_APP + ai.flags.and(mask) != 0 + } + val label = info.loadLabel(pm)?.toString().orEmpty() + AppInfo( + packageName = info.activityInfo.packageName, + label = label, + system = system, + ) + } +} + +data class AppInfo( + val packageName: String, + val label: String, + val system: Boolean, +) diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/auth/common/Autofill.android.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/auth/common/Autofill.android.kt new file mode 100644 index 00000000..4937cba6 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/auth/common/Autofill.android.kt @@ -0,0 +1,25 @@ +package com.artemchep.keyguard.feature.auth.common + +import android.view.autofill.AutofillManager +import android.view.autofill.AutofillValue +import androidx.compose.runtime.Composable +import androidx.compose.runtime.SideEffect +import androidx.compose.ui.ExperimentalComposeUiApi +import androidx.compose.ui.autofill.AutofillNode +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.platform.LocalView +import androidx.core.content.getSystemService + +@OptIn(ExperimentalComposeUiApi::class) +@Composable +actual fun AutofillSideEffect( + value: String, + node: AutofillNode, +) { + val view = LocalView.current + val autofillManager = LocalContext.current.getSystemService() + SideEffect { + val autofillId = node.id + autofillManager?.notifyValueChanged(view, autofillId, AutofillValue.forText(value)) + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/auth/login/otp/LoginOtpScreen.android.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/auth/login/otp/LoginOtpScreen.android.kt new file mode 100644 index 00000000..1ccef540 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/auth/login/otp/LoginOtpScreen.android.kt @@ -0,0 +1,242 @@ +package com.artemchep.keyguard.feature.auth.login.otp + +import android.annotation.SuppressLint +import android.net.Uri +import android.view.ViewGroup +import android.webkit.JavascriptInterface +import android.webkit.WebResourceRequest +import android.webkit.WebView +import android.webkit.WebViewClient +import androidx.annotation.Keep +import androidx.compose.foundation.border +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ColumnScope +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Button +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.dp +import androidx.compose.ui.viewinterop.AndroidView +import arrow.core.left +import arrow.core.right +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.ExpandedIfNotEmpty +import com.artemchep.keyguard.ui.theme.Dimens +import com.artemchep.keyguard.ui.util.DividerColor +import dev.icerock.moko.resources.compose.stringResource + +@SuppressLint("SetJavaScriptEnabled") +@Composable +actual fun ColumnScope.LoginOtpScreenContentFido2WebAuthnWebView( + screenScope: LoginOtpScreenScope, + state: LoginTwofaState.Fido2WebAuthn, +) { + val updatedCallbackUrls by rememberUpdatedState(state.callbackUrls) + val updatedOnComplete by rememberUpdatedState(state.onComplete) + + BaseWebView( + modifier = Modifier, + factory = { + layoutParams = ViewGroup.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT, + ) + webViewClient = object : WebViewClient() { + override fun shouldOverrideUrlLoading( + view: WebView?, + request: WebResourceRequest?, + ): Boolean { + val handled = run { + val url = request?.url + ?: return@run false + overrideRequest(url) + } + return handled || super.shouldOverrideUrlLoading(view, request) + } + + private fun overrideRequest(uri: Uri): Boolean { + val shouldBeHandled = kotlin.run { + val uriString = uri.toString() + updatedCallbackUrls + .any { callbackUrl -> uriString.startsWith(callbackUrl) } + } + if (shouldBeHandled) run { + val callback = updatedOnComplete + ?: return@run + val data = uri.getQueryParameter("data") + if (data != null) { + val result = data.right() + callback(result) + } + + val error = uri.getQueryParameter("error") + ?: "Something went wrong" + val result = RuntimeException(error).left() + callback(result) + } + return shouldBeHandled + } + } + }, + url = state.authUrl, + ) +} + +@Composable +actual fun ColumnScope.LoginOtpScreenContentFido2WebAuthnBrowser( + screenScope: LoginOtpScreenScope, + state: LoginTwofaState.Fido2WebAuthn, +) { + val updatedOnClick by rememberUpdatedState(state.onBrowser) + Button( + modifier = Modifier + .padding(horizontal = 16.dp), + enabled = updatedOnClick != null, + onClick = { + updatedOnClick?.invoke() + }, + ) { + Text(stringResource(Res.strings.fido2webauthn_action_go_title)) + } + ExpandedIfNotEmpty(state.error) { error -> + Column { + Spacer( + modifier = Modifier + .height(16.dp), + ) + Text( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding), + text = error, + color = MaterialTheme.colorScheme.error, + ) + } + } + // TODO: Should we show the warning? +// Spacer( +// modifier = Modifier +// .height(32.dp), +// ) +// Icon( +// modifier = Modifier +// .padding(horizontal = Dimens.horizontalPadding), +// imageVector = Icons.Outlined.Info, +// contentDescription = null, +// tint = LocalContentColor.current.combineAlpha(alpha = MediumEmphasisAlpha), +// ) +// Spacer( +// modifier = Modifier +// .height(16.dp), +// ) +// Text( +// modifier = Modifier +// .padding(horizontal = Dimens.horizontalPadding), +// text = stringResource( +// Res.strings.fido2webauthn_bitwarden_web_vault_version_warning_note, +// "2023.7.1", +// ), +// style = MaterialTheme.typography.bodyMedium, +// color = LocalContentColor.current.combineAlpha(alpha = MediumEmphasisAlpha), +// ) +} + +@SuppressLint("SetJavaScriptEnabled") +@Composable +actual fun ColumnScope.LoginOtpScreenContentDuoWebView( + screenScope: LoginOtpScreenScope, + state: LoginTwofaState.Duo, +) { + val updatedOnComplete by rememberUpdatedState(state.onComplete) + BaseWebView( + modifier = Modifier + .fillMaxWidth() + .height(400.dp), + factory = { + fun createJsInjector(js: String) = + """javascript:(function () { $js })()""" + + val jsBridgeTag = "keyguardAndroidBridge" + val jsBridge = JsWebViewDuoBridge { data -> + val result = data.right() + updatedOnComplete?.invoke(result) + } + + val jsCode = """ + window.invokeCSharpAction = function (data) { + $jsBridgeTag.onSuccess("" + data); + }; + """.trimIndent() + val jsInjector = createJsInjector(jsCode) + + addJavascriptInterface(jsBridge, jsBridgeTag) + + layoutParams = ViewGroup.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT, + ) + webViewClient = object : WebViewClient() { + override fun onPageCommitVisible(view: WebView?, url: String?) { + view?.loadUrl(jsInjector) + super.onPageCommitVisible(view, url) + } + + override fun onPageFinished(view: WebView?, url: String?) { + view?.loadUrl(jsInjector) + super.onPageFinished(view, url) + } + } + }, + url = state.authUrl, + ) +} + +@Keep +private class JsWebViewDuoBridge( + private val onSuccess: (String) -> Unit, +) { + // Called by the JavaScript of the + // Duo page connector. + @JavascriptInterface + fun onSuccess(data: String) = onSuccess.invoke(data) +} + +@Composable +private fun BaseWebView( + modifier: Modifier = Modifier, + url: String, + factory: WebView.() -> Unit, +) { + val shape = MaterialTheme.shapes.extraLarge + AndroidView( + modifier = modifier + .padding(8.dp) + .clip(shape) + .border(Dp.Hairline, DividerColor, shape), + factory = { context -> + WebView(context).apply { + settings.apply { + javaScriptEnabled = true + } + + factory(this) + loadUrl(url) + tag = url + } + }, + update = { webView -> + val prevUrl = webView.tag + if (prevUrl != url) { + webView.loadUrl(url) + } + }, + ) +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/biometric/BiometricPromptEffect.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/biometric/BiometricPromptEffect.kt new file mode 100644 index 00000000..92ee54b3 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/biometric/BiometricPromptEffect.kt @@ -0,0 +1,135 @@ +package com.artemchep.keyguard.feature.biometric + +import androidx.biometric.BiometricPrompt +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.platform.LocalLifecycleOwner +import androidx.fragment.app.FragmentActivity +import androidx.lifecycle.withResumed +import arrow.core.left +import arrow.core.right +import com.artemchep.keyguard.android.closestActivityOrNull +import com.artemchep.keyguard.common.model.BiometricAuthException +import com.artemchep.keyguard.common.model.BiometricAuthPrompt +import com.artemchep.keyguard.common.model.BiometricAuthPromptSimple +import com.artemchep.keyguard.common.model.PureBiometricAuthPrompt +import com.artemchep.keyguard.feature.localization.textResource +import com.artemchep.keyguard.ui.CollectedEffect +import kotlinx.coroutines.flow.Flow + +@Composable +actual fun BiometricPromptEffect( + flow: Flow, +) { + val context by rememberUpdatedState(LocalContext.current) + val lifecycle by rememberUpdatedState(LocalLifecycleOwner.current) + CollectedEffect(flow) { event -> + // We want the screen to be visible and on front, when the biometric + // prompt is popping up. + lifecycle.lifecycle.withResumed { + val activity = context.closestActivityOrNull as FragmentActivity + when (event) { + is BiometricAuthPrompt -> activity.launchPrompt(event) + is BiometricAuthPromptSimple -> activity.launchPrompt(event) + } + } + } +} + +private fun FragmentActivity.launchPrompt( + event: BiometricAuthPrompt, +) { + val promptTitle = textResource(event.title, this) + val promptInfo = BiometricPrompt.PromptInfo.Builder() + .setTitle(promptTitle) + .apply { + event.text + ?.let { textResource(it, this@launchPrompt) } + // apply to the prompt + ?.also(::setDescription) + } + .setNegativeButtonText(getString(android.R.string.cancel)) + .build() + val prompt = BiometricPrompt( + this, + object : BiometricPrompt.AuthenticationCallback() { + override fun onAuthenticationError(errorCode: Int, errString: CharSequence) { + super.onAuthenticationError(errorCode, errString) + val result = BiometricAuthException( + code = mapBiometricPromptErrorCode(errorCode), + message = errString.toString(), + ).left() + event.onComplete(result) + } + + override fun onAuthenticationSucceeded(result: BiometricPrompt.AuthenticationResult) { + super.onAuthenticationSucceeded(result) + val cipher = result.cryptoObject?.cipher + ?: return + event.onComplete(cipher.right()) + } + }, + ) + val crypto = BiometricPrompt.CryptoObject(event.cipher) + prompt.authenticate(promptInfo, crypto) +} + +private fun FragmentActivity.launchPrompt( + event: BiometricAuthPromptSimple, +) { + val promptTitle = textResource(event.title, this) + val promptInfo = BiometricPrompt.PromptInfo.Builder() + .setTitle(promptTitle) + .apply { + event.text + ?.let { textResource(it, this@launchPrompt) } + // apply to the prompt + ?.also(::setDescription) + } + .setNegativeButtonText(getString(android.R.string.cancel)) + .build() + val prompt = BiometricPrompt( + this, + object : BiometricPrompt.AuthenticationCallback() { + override fun onAuthenticationError(errorCode: Int, errString: CharSequence) { + super.onAuthenticationError(errorCode, errString) + val result = BiometricAuthException( + code = mapBiometricPromptErrorCode(errorCode), + message = errString.toString(), + ).left() + event.onComplete(result) + } + + override fun onAuthenticationSucceeded(result: BiometricPrompt.AuthenticationResult) { + super.onAuthenticationSucceeded(result) + event.onComplete(Unit.right()) + } + }, + ) + prompt.authenticate(promptInfo) +} + +private fun mapBiometricPromptErrorCode( + errorCode: Int, +) = when (errorCode) { + // There is no error, and the user can + // successfully authenticate. + 0 -> BiometricAuthException.BIOMETRIC_SUCCESS + BiometricPrompt.ERROR_HW_UNAVAILABLE -> BiometricAuthException.ERROR_HW_UNAVAILABLE + BiometricPrompt.ERROR_UNABLE_TO_PROCESS -> BiometricAuthException.ERROR_UNABLE_TO_PROCESS + BiometricPrompt.ERROR_TIMEOUT -> BiometricAuthException.ERROR_TIMEOUT + BiometricPrompt.ERROR_NO_SPACE -> BiometricAuthException.ERROR_NO_SPACE + BiometricPrompt.ERROR_CANCELED -> BiometricAuthException.ERROR_CANCELED + BiometricPrompt.ERROR_LOCKOUT -> BiometricAuthException.ERROR_LOCKOUT + BiometricPrompt.ERROR_VENDOR -> BiometricAuthException.ERROR_VENDOR + BiometricPrompt.ERROR_LOCKOUT_PERMANENT -> BiometricAuthException.ERROR_LOCKOUT_PERMANENT + BiometricPrompt.ERROR_USER_CANCELED -> BiometricAuthException.ERROR_USER_CANCELED + BiometricPrompt.ERROR_NO_BIOMETRICS -> BiometricAuthException.ERROR_NO_BIOMETRICS + BiometricPrompt.ERROR_HW_NOT_PRESENT -> BiometricAuthException.ERROR_HW_NOT_PRESENT + BiometricPrompt.ERROR_NEGATIVE_BUTTON -> BiometricAuthException.ERROR_NEGATIVE_BUTTON + BiometricPrompt.ERROR_NO_DEVICE_CREDENTIAL -> BiometricAuthException.ERROR_NO_DEVICE_CREDENTIAL + BiometricPrompt.ERROR_SECURITY_UPDATE_REQUIRED -> BiometricAuthException.ERROR_SECURITY_UPDATE_REQUIRED + else -> BiometricAuthException.ERROR_UNKNOWN +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/crashlytics/IsEnabled.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/crashlytics/IsEnabled.kt new file mode 100644 index 00000000..e8ce0b86 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/crashlytics/IsEnabled.kt @@ -0,0 +1,42 @@ +@file:Suppress("PackageDirectoryMismatch") + +package com.google.firebase.crashlytics + +import com.artemchep.keyguard.common.util.flow.EventFlow +import com.google.firebase.crashlytics.internal.common.CrashlyticsCore +import com.google.firebase.crashlytics.internal.common.DataCollectionArbiter +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.onStart + +private val refreshSink = EventFlow() + +fun FirebaseCrashlytics.setEnabled(enabled: Boolean?) { + setCrashlyticsCollectionEnabled(enabled) + // Ask firebase analytics flow + // to refresh itself. + refreshSink.emit(Unit) +} + +fun FirebaseCrashlytics.isEnabled(): Boolean? { + val arbiter = kotlin.runCatching { + CrashlyticsCore::class.java.getDeclaredField("dataCollectionArbiter") + .apply { + isAccessible = true + } + .get(core) as DataCollectionArbiter + }.getOrElse { + // We have failed to obtain a data collection arbiter, something + // must have changed in the internal structure. + recordException(it) + return null + } + return arbiter.isAutomaticDataCollectionEnabled +} + +fun FirebaseCrashlytics.isEnabledFlow() = refreshSink + .onStart { + emit(Unit) + } + .map { isEnabled() } + .distinctUntilChanged() diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/favicon/FaviconImage.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/favicon/FaviconImage.kt new file mode 100644 index 00000000..251cff74 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/favicon/FaviconImage.kt @@ -0,0 +1,55 @@ +package com.artemchep.keyguard.feature.favicon + +import androidx.compose.material.Icon +import androidx.compose.material.icons.Icons +import androidx.compose.material3.LocalAbsoluteTonalElevation +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.surfaceColorAtElevation +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.compositeOver +import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.icons.KeyguardWebsite +import com.artemchep.keyguard.ui.theme.combineAlpha +import com.skydoves.landscapist.ImageOptions +import com.skydoves.landscapist.components.rememberImageComponent +import com.skydoves.landscapist.glide.GlideImage +import com.skydoves.landscapist.placeholder.shimmer.ShimmerPlugin + +@Composable +actual fun FaviconImage( + imageModel: () -> Any?, + modifier: Modifier, +) { + val surfaceColor = MaterialTheme.colorScheme + .surfaceColorAtElevation(LocalAbsoluteTonalElevation.current + 16.dp) + val contentColor = LocalContentColor.current + val highlightColor = contentColor + .combineAlpha(MediumEmphasisAlpha) + .compositeOver(surfaceColor) + GlideImage( + modifier = modifier, + imageModel = imageModel, + imageOptions = ImageOptions(contentScale = ContentScale.Crop), + component = rememberImageComponent { + // Shows a shimmering effect when loading an image + +ShimmerPlugin( + baseColor = surfaceColor, + highlightColor = highlightColor, + ) + }, + failure = { + Icon( + modifier = Modifier + .align(Alignment.Center), + imageVector = Icons.Outlined.KeyguardWebsite, + contentDescription = null, + tint = contentColor, + ) + }, + ) +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/feedback/FeedbackUtils.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/feedback/FeedbackUtils.kt new file mode 100644 index 00000000..558a57d9 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/feedback/FeedbackUtils.kt @@ -0,0 +1,10 @@ +package com.artemchep.keyguard.feature.feedback + +import android.os.Build +import com.artemchep.keyguard.build.BuildKonfig + +actual fun getFeedbackSubject(): String = kotlin.run { + val date = BuildKonfig.buildDate + val sdk = Build.VERSION.SDK_INT + "Feedback Android/$date/$sdk" +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/filepicker/FilePickerEffect.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/filepicker/FilePickerEffect.kt new file mode 100644 index 00000000..9c2c343f --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/filepicker/FilePickerEffect.kt @@ -0,0 +1,110 @@ +package com.artemchep.keyguard.feature.filepicker + +import android.content.Context +import android.net.Uri +import android.provider.OpenableColumns +import androidx.activity.compose.rememberLauncherForActivityResult +import androidx.activity.result.contract.ActivityResultContracts +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.platform.LocalContext +import com.artemchep.keyguard.common.model.ToastMessage +import com.artemchep.keyguard.common.usecase.ShowMessage +import com.artemchep.keyguard.ui.CollectedEffect +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.MutableStateFlow +import org.kodein.di.compose.rememberInstance + +@Composable +actual fun FilePickerEffect( + flow: Flow>, +) { + val state = remember { + MutableStateFlow?>(null) + } + + val context by rememberUpdatedState(LocalContext.current) + + val showMessage: ShowMessage by rememberInstance() + val openDocumentLauncher = run { + val contract = remember { + ActivityResultContracts.OpenDocument() + } + rememberLauncherForActivityResult(contract = contract) { uri -> + val intent = state.value as? FilePickerIntent.OpenDocument + ?: run { + val message = ToastMessage( + title = "Failed to select a file", + text = "App does not have an active observer to handle the result correctly.", + ) + showMessage.copy(message) + return@rememberLauncherForActivityResult + } + + val info = uri?.let { + FilePickerIntent.OpenDocument.Ifo( + uri = it, + name = getFileName(context, it), + size = getFileSize(context, it), + ) + } + intent.onResult(info) + } + } + + CollectedEffect(flow) { intent -> + state.value = intent + + when (intent) { + is FilePickerIntent.OpenDocument -> { + val mimeTypes = intent.mimeTypes + openDocumentLauncher.launch(mimeTypes) + } + } + } +} + +private fun getFileName(context: Context, uri: Uri): String? { + var result: String? = null + if (uri.scheme == "content") { + val cursor = context + .contentResolver + .query(uri, null, null, null, null) + cursor?.use { x -> + if (x.moveToFirst()) { + val index = x.getColumnIndex(OpenableColumns.DISPLAY_NAME) + if (index >= 0) { + result = x.getString(index) + } + } + } + } + if (result == null) { + val r = uri.path.orEmpty() + val cut = r.lastIndexOf('/') + if (cut != -1) { + result = r.substring(cut + 1) + } + } + return result +} + +private fun getFileSize(context: Context, uri: Uri): Long? { + var result: Long? = null + if (uri.scheme == "content") { + val cursor = context + .contentResolver + .query(uri, null, null, null, null) + cursor?.use { x -> + if (x.moveToFirst()) { + val index = x.getColumnIndex(OpenableColumns.SIZE) + if (index >= 0) { + result = x.getLong(index) + } + } + } + } + return result +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingAutofill.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingAutofill.kt new file mode 100644 index 00000000..62389d59 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingAutofill.kt @@ -0,0 +1,96 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.foundation.layout.RowScope +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.AutoAwesome +import androidx.compose.material3.Switch +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.platform.LocalContext +import arrow.core.partially1 +import com.artemchep.keyguard.android.closestActivityOrNull +import com.artemchep.keyguard.common.service.autofill.AutofillService +import com.artemchep.keyguard.common.service.autofill.AutofillServiceStatus +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItem +import com.artemchep.keyguard.ui.icons.icon +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.flow.map +import org.kodein.di.DirectDI +import org.kodein.di.instance + +actual fun settingAutofillProvider( + directDI: DirectDI, +): SettingComponent = settingAutofillProvider( + autofillService = directDI.instance(), +) + +fun settingAutofillProvider( + autofillService: AutofillService, +): SettingComponent = autofillService + .status() + .map { status -> + // composable + SettingIi( + search = SettingIi.Search( + group = "autofill", + tokens = listOf( + "autofill", + ), + ), + ) { + val disabled = status is AutofillServiceStatus.Disabled && status.onEnable == null || + status is AutofillServiceStatus.Enabled && status.onDisable == null + val enabled = status is AutofillServiceStatus.Enabled + val context by rememberUpdatedState(LocalContext.current) + SettingAutofill( + checked = enabled, + onCheckedChange = if (!disabled) { + // lambda + lambda@{ shouldBeEnabled -> + val activity = context.closestActivityOrNull + ?: return@lambda + when { + shouldBeEnabled && status is AutofillServiceStatus.Disabled -> + status.onEnable?.invoke(activity) + + !shouldBeEnabled && status is AutofillServiceStatus.Enabled -> + status.onDisable?.invoke() + } + } + } else { + null + }, + ) + } + } + +@Composable +private fun SettingAutofill( + checked: Boolean, + onCheckedChange: ((Boolean) -> Unit)?, +) { + FlatItem( + leading = icon(Icons.Outlined.AutoAwesome), + trailing = { + Switch( + checked = checked, + enabled = onCheckedChange != null, + onCheckedChange = onCheckedChange, + ) + }, + title = { + Text( + text = stringResource(Res.strings.pref_item_autofill_service_title), + ) + }, + text = { + Text( + text = stringResource(Res.strings.pref_item_autofill_service_text), + ) + }, + onClick = onCheckedChange?.partially1(!checked), + ) +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingCredentialProvider.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingCredentialProvider.kt new file mode 100644 index 00000000..76a92fa2 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingCredentialProvider.kt @@ -0,0 +1,92 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import android.os.Build +import androidx.annotation.RequiresApi +import androidx.compose.foundation.layout.RowScope +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Key +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import androidx.compose.ui.platform.LocalContext +import androidx.credentials.CredentialManager +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItem +import com.artemchep.keyguard.ui.icons.ChevronIcon +import com.artemchep.keyguard.ui.icons.icon +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.flowOf +import org.kodein.di.DirectDI +import org.kodein.di.instance + +actual fun settingCredentialProviderProvider( + directDI: DirectDI, +): SettingComponent = if (Build.VERSION.SDK_INT >= 34) { + settingCredentialProviderProvider( + windowCoroutineScope = directDI.instance(), + ) +} else { + // Credential provider is not available on the + // older platform versions. + flowOf(null) +} + +@RequiresApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE) +fun settingCredentialProviderProvider( + windowCoroutineScope: WindowCoroutineScope, +): SettingComponent = kotlin.run { + val item = SettingIi( + search = SettingIi.Search( + group = "autofill", + tokens = listOf( + "credential", + "passkey", + "fido", + "provider", + "password", + ), + ), + ) { + val context = LocalContext.current + val pi = remember(context) { + CredentialManager + .create(context) + .createSettingsPendingIntent() + } + SettingCredentialProvider( + onClick = { + ioEffect(Dispatchers.Main.immediate) { + pi.send() + }.launchIn(windowCoroutineScope) + }, + ) + } + flowOf(item) +} + +@Composable +private fun SettingCredentialProvider( + onClick: (() -> Unit)?, +) { + FlatItem( + leading = icon(Icons.Outlined.Key), + trailing = { + ChevronIcon() + }, + title = { + Text( + text = stringResource(Res.strings.pref_item_credential_provider_title), + ) + }, + text = { + Text( + text = stringResource(Res.strings.pref_item_credential_provider_text), + ) + }, + onClick = onClick, + ) +} \ No newline at end of file diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingPermission.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingPermission.kt new file mode 100644 index 00000000..6ca3bc5d --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingPermission.kt @@ -0,0 +1,154 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import android.content.Context +import android.content.Intent +import android.net.Uri +import android.os.Build +import android.provider.Settings +import androidx.compose.foundation.layout.RowScope +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.DeveloperMode +import androidx.compose.material3.Switch +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.platform.LocalContext +import arrow.core.partially1 +import com.artemchep.keyguard.feature.home.settings.permissions.PermissionsSettingsRoute +import com.artemchep.keyguard.feature.navigation.LocalNavigationController +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItem +import com.artemchep.keyguard.ui.icons.ChevronIcon +import com.artemchep.keyguard.ui.icons.icon +import com.google.accompanist.permissions.ExperimentalPermissionsApi +import com.google.accompanist.permissions.isGranted +import com.google.accompanist.permissions.rememberPermissionState +import dev.icerock.moko.resources.StringResource +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.flow.flowOf +import org.kodein.di.DirectDI + +actual fun settingPermissionDetailsProvider( + directDI: DirectDI, +): SettingComponent = settingPermissionDetailsProvider() + +fun settingPermissionDetailsProvider(): SettingComponent = kotlin.run { + val item = SettingIi { + val navigationController by rememberUpdatedState(LocalNavigationController.current) + SettingPermissionDetails( + onClick = { + val intent = NavigationIntent.NavigateToRoute( + route = PermissionsSettingsRoute, + ) + navigationController.queue(intent) + }, + ) + } + flowOf(item) +} + +@Composable +private fun SettingPermissionDetails( + onClick: (() -> Unit)?, +) { + FlatItem( + leading = icon(Icons.Outlined.DeveloperMode), + trailing = { + ChevronIcon() + }, + title = { + Text( + text = stringResource(Res.strings.pref_item_permissions_title), + ) + }, + onClick = onClick, + ) +} + +@OptIn(ExperimentalPermissionsApi::class) +fun settingPermissionProvider( + leading: @Composable RowScope.() -> Unit, + title: StringResource, + text: StringResource, + minSdk: Int, + permissionProvider: () -> String, +): SettingComponent = kotlin.run { + if (Build.VERSION.SDK_INT >= minSdk) { + kotlin.run { + val item = SettingIi { + val permissionState = rememberPermissionState(permissionProvider()) + + val updatedContext by rememberUpdatedState(newValue = LocalContext.current) + val updatedStatus by rememberUpdatedState(newValue = permissionState.status) + SettingPermission( + leading = leading, + title = stringResource(title), + text = stringResource(text), + checked = updatedStatus.isGranted, + onCheckedChange = { shouldBeChecked -> + val isChecked = updatedStatus.isGranted + if (isChecked != shouldBeChecked) { + if (shouldBeChecked) { + permissionState.launchPermissionRequest() + } else { + updatedContext.launchAppDetailsSettings() + } + } + }, + ) + } + flowOf(item) + } + } else { + kotlin.run { + val item = SettingIi { + SettingPermission( + leading = leading, + title = stringResource(title), + text = stringResource(text), + checked = true, + onCheckedChange = null, + ) + } + flowOf(item) + } + } +} + +fun Context.launchAppDetailsSettings() { + val intent = Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS).apply { + data = Uri.fromParts("package", packageName, null) + } + kotlin.runCatching { + startActivity(intent) + } +} + +@Composable +private fun SettingPermission( + leading: @Composable RowScope.() -> Unit, + title: String, + text: String, + checked: Boolean, + onCheckedChange: ((Boolean) -> Unit)?, +) { + FlatItem( + leading = leading, + trailing = { + Switch( + checked = checked, + enabled = onCheckedChange != null, + onCheckedChange = onCheckedChange, + ) + }, + title = { + Text(title) + }, + text = { + Text(text) + }, + onClick = onCheckedChange?.partially1(!checked), + ) +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingPermissionCamera.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingPermissionCamera.kt new file mode 100644 index 00000000..a6dfb449 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingPermissionCamera.kt @@ -0,0 +1,26 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import android.Manifest +import android.os.Build +import androidx.compose.foundation.layout.RowScope +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.CameraAlt +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.icons.icon +import com.google.accompanist.permissions.ExperimentalPermissionsApi +import org.kodein.di.DirectDI + +actual fun settingPermissionCameraProvider( + directDI: DirectDI, +): SettingComponent = settingPermissionCameraProvider2() + +@OptIn(ExperimentalPermissionsApi::class) +fun settingPermissionCameraProvider2(): SettingComponent = settingPermissionProvider( + leading = icon(Icons.Outlined.CameraAlt), + title = Res.strings.pref_item_permission_camera_title, + text = Res.strings.pref_item_permission_camera_text, + minSdk = Build.VERSION_CODES.M, + permissionProvider = { + Manifest.permission.CAMERA + }, +) diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingPermissionOther.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingPermissionOther.kt new file mode 100644 index 00000000..e0e0f3d2 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingPermissionOther.kt @@ -0,0 +1,146 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import android.content.Context +import android.content.pm.PackageManager +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.Immutable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.key +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.skeleton.SkeletonItem +import com.artemchep.keyguard.ui.theme.Dimens +import com.artemchep.keyguard.ui.theme.combineAlpha +import com.artemchep.keyguard.ui.util.HorizontalDivider +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.withContext +import org.kodein.di.DirectDI + +actual fun settingPermissionOtherProvider( + directDI: DirectDI, +): SettingComponent = settingPermissionOtherProvider() + +fun settingPermissionOtherProvider(): SettingComponent = kotlin.run { + val item = SettingIi { + SettingPermissionOther() + } + flowOf(item) +} + +@Composable +private fun SettingPermissionOther() { + val context = LocalContext.current + val permissionsState = remember { + mutableStateOf>>(emptyList()) + } + + LaunchedEffect(context, permissionsState) { + val result = withContext(Dispatchers.Default) { + getPermissionItems(context) + } + permissionsState.value = result + } + + Column( + modifier = Modifier, + verticalArrangement = Arrangement.spacedBy(8.dp), + ) { + val permissions = permissionsState.value + if (permissions.isEmpty()) { + // We assume that our app must have at least one permission, + // therefore we are still loading the list. + SkeletonItem() + } + + permissions.forEachIndexed { index, items -> + if (index > 0) { + HorizontalDivider() + } + items.forEach { item -> + key(item.permission) { + Column( + modifier = Modifier + .padding( + vertical = 4.dp, + horizontal = Dimens.horizontalPadding, + ), + ) { + Text( + text = item.permission, + style = MaterialTheme.typography.bodySmall, + maxLines = 4, + ) + if (item.description != null) { + Text( + text = item.description, + style = MaterialTheme.typography.bodySmall, + color = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + maxLines = 10, + ) + } + } + } + } + } + } +} + +@Immutable +private data class PermissionItem( + val permission: String, + val group: String? = null, + val description: String? = null, +) + +private fun getPermissionItems(context: Context) = kotlin.run { + val pm = context.packageManager + val info = + pm.getPackageInfo( + context.packageName, + PackageManager.GET_PERMISSIONS, + ) + + val result = info + .requestedPermissions + .mapNotNull { permission -> + kotlin.runCatching { + val permissionInfo = pm.getPermissionInfo(permission, 0) + val permissionDescription = permissionInfo.loadDescription(pm) + ?.toString() + ?.let { + // Some of the descriptions do have the dot in the + // end, but some of them do. I like when they do. + it.removeSuffix(".") + "." + } + PermissionItem( + permission = permission, + group = permissionInfo.group, + description = permissionDescription, + ) + }.getOrElse { + PermissionItem( + permission = permission, + ) + } + } + .sortedBy { it.permission } + .groupBy { item -> + item.group + } + .map { (group, items) -> + items + } + result +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingPermissionPostNotifications.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingPermissionPostNotifications.kt new file mode 100644 index 00000000..9a1b63af --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingPermissionPostNotifications.kt @@ -0,0 +1,26 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import android.Manifest +import android.os.Build +import androidx.compose.foundation.layout.RowScope +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Notifications +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.icons.icon +import com.google.accompanist.permissions.ExperimentalPermissionsApi +import org.kodein.di.DirectDI + +actual fun settingPermissionPostNotificationsProvider( + directDI: DirectDI, +): SettingComponent = settingPermissionPostNotificationsProvider2() + +@OptIn(ExperimentalPermissionsApi::class) +fun settingPermissionPostNotificationsProvider2(): SettingComponent = settingPermissionProvider( + leading = icon(Icons.Outlined.Notifications), + title = Res.strings.pref_item_permission_post_notifications_title, + text = Res.strings.pref_item_permission_post_notifications_text, + minSdk = Build.VERSION_CODES.TIRAMISU, + permissionProvider = { + Manifest.permission.POST_NOTIFICATIONS + }, +) diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingSubscriptionsPlayStore.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingSubscriptionsPlayStore.kt new file mode 100644 index 00000000..67d8902c --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingSubscriptionsPlayStore.kt @@ -0,0 +1,58 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.foundation.layout.RowScope +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Settings +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.platform.LocalContext +import com.artemchep.keyguard.feature.navigation.LocalNavigationController +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItem +import com.artemchep.keyguard.ui.icons.ChevronIcon +import com.artemchep.keyguard.ui.icons.icon +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.flow.flowOf +import org.kodein.di.DirectDI + +actual fun settingSubscriptionsPlayStoreProvider( + directDI: DirectDI, +): SettingComponent = settingSubscriptionsPlayStoreProvider() + +fun settingSubscriptionsPlayStoreProvider(): SettingComponent = kotlin.run { + val item = SettingIi { + SettingSubscriptionsPlayStore() + } + flowOf(item) +} + +@Composable +private fun SettingSubscriptionsPlayStore() { + val context by rememberUpdatedState(LocalContext.current) + val controller by rememberUpdatedState(LocalNavigationController.current) + FlatItem( + leading = icon(Icons.Outlined.Settings), + title = { + Text( + text = stringResource( + Res.strings.pref_item_premium_manage_subscription_on_play_store_title, + ), + ) + }, + trailing = { + ChevronIcon() + }, + onClick = { + val intent = run { + val packageName = context.packageName + val url = + "https://play.google.com/store/account/subscriptions?package=$packageName" + NavigationIntent.NavigateToBrowser(url) + } + controller.queue(intent) + }, + ) +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/home/vault/add/LeAddRoute.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/home/vault/add/LeAddRoute.kt new file mode 100644 index 00000000..20c363c5 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/home/vault/add/LeAddRoute.kt @@ -0,0 +1,88 @@ +package com.artemchep.keyguard.feature.home.vault.add + +import com.artemchep.keyguard.android.AutofillActivity +import com.artemchep.keyguard.android.AutofillSaveActivity +import com.artemchep.keyguard.android.autofill.AutofillStructure2 +import com.artemchep.keyguard.common.model.AutofillHint +import com.artemchep.keyguard.common.util.Browsers + +fun AddRoute.Args.Autofill.Companion.of( + source: AutofillActivity.Args, +) = ofAutofillStructure( + struct = source.autofillStructure2, + applicationId = source.applicationId, + webDomain = source.webDomain, + webScheme = source.webScheme, +) + +fun AddRoute.Args.Autofill.Companion.of( + source: AutofillSaveActivity.Args, +) = ofAutofillStructure( + struct = source.autofillStructure2, + applicationId = source.applicationId, + webDomain = source.webDomain, + webScheme = source.webScheme, +) + +private fun ofAutofillStructure( + struct: AutofillStructure2?, + applicationId: String? = null, + webDomain: String? = null, + webScheme: String? = null, +): AddRoute.Args.Autofill { + val items = struct?.items.orEmpty() + val email = items + .firstOrNull { it.hint == AutofillHint.EMAIL_ADDRESS } + ?.value + ?.takeIf { it.isNotBlank() } + val username = items + .firstOrNull { it.hint == AutofillHint.NEW_USERNAME } + ?.value + ?.takeIf { it.isNotBlank() } + ?: items + .firstOrNull { it.hint == AutofillHint.USERNAME } + ?.value + ?.takeIf { it.isNotBlank() } + ?: email + val password = items + .firstOrNull { it.hint == AutofillHint.NEW_PASSWORD } + ?.value + ?.takeIf { it.isNotBlank() } + ?: items + .firstOrNull { it.hint == AutofillHint.PASSWORD } + ?.value + ?.takeIf { it.isNotBlank() } + ?: items + .firstOrNull { it.hint == AutofillHint.WIFI_PASSWORD } + ?.value + ?.takeIf { it.isNotBlank() } + val phone = items + .firstOrNull { it.hint == AutofillHint.PHONE_NUMBER } + ?.value + ?.takeIf { it.isNotBlank() } + val personName = items + .firstOrNull { it.hint == AutofillHint.PERSON_NAME } + ?.value + ?.takeIf { it.isNotBlank() } + return AddRoute.Args.Autofill( + webDomain = webDomain, + webScheme = webScheme, + // we do not want to add browsers to + // list of uris + applicationId = applicationId + ?.takeIf { + it !in Browsers + } + ?.takeIf { + webDomain == null || + struct?.webView == true + }, + // Login + username = username, + password = password, + // Identity + email = email, + phone = phone, + personName = personName, + ) +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/localization/TextResource.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/localization/TextResource.kt new file mode 100644 index 00000000..360d1b5d --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/localization/TextResource.kt @@ -0,0 +1,24 @@ +package com.artemchep.keyguard.feature.localization + +import android.content.Context +import com.artemchep.keyguard.platform.LeContext +import dev.icerock.moko.resources.StringResource +import dev.icerock.moko.resources.desc.Resource +import dev.icerock.moko.resources.desc.ResourceFormatted +import dev.icerock.moko.resources.desc.StringDesc +import dev.icerock.moko.resources.desc.desc + +fun textResource(text: TextHolder, context: Context): String = when (text) { + is TextHolder.Value -> text.data.desc() + is TextHolder.Res -> text.data.desc() +}.toString(context) + +actual fun textResource(res: StringResource, context: LeContext): String = + StringDesc.Resource(res).toString(context.context) + +actual fun textResource( + res: StringResource, + context: LeContext, + vararg args: Any, +): String = + StringDesc.ResourceFormatted(res, *args).toString(context.context) diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler.kt new file mode 100644 index 00000000..0714466c --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler.kt @@ -0,0 +1,60 @@ +@file:JvmName("NavigationRouterBackHandler2") + +package com.artemchep.keyguard.feature.navigation + +import androidx.activity.OnBackPressedCallback +import androidx.activity.OnBackPressedDispatcher +import androidx.compose.runtime.Composable +import androidx.compose.runtime.DisposableEffect +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.remember +import kotlinx.coroutines.flow.collect +import kotlinx.coroutines.flow.flatMapLatest +import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.onEach + +/** + * A definition of the distinct application component that + * makes sense when rendered in a separate window. + */ +@Composable +fun NavigationRouterBackHandler( + onBackPressedDispatcher: OnBackPressedDispatcher, + content: @Composable () -> Unit, +) { + NavigationRouterBackHandler( + sideEffect = { handler -> + val callback: OnBackPressedCallback = remember { + object : OnBackPressedCallback(false) { + override fun handleOnBackPressed() { + val targetEntry = handler.eek.value.values.maxByOrNull { it.backStack.size } + ?: return@handleOnBackPressed + targetEntry.controller.queue(NavigationIntent.Pop) + } + } + } + + DisposableEffect(onBackPressedDispatcher, callback) { + onBackPressedDispatcher.addCallback(callback) + onDispose { + callback.remove() + } + } + LaunchedEffect(callback, handler) { + handler.eek + .map { map -> + map.values.maxByOrNull { it.backStack.size } + ?.controller + ?.canPop() ?: flowOf(false) + } + .flatMapLatest { it } + .onEach { + callback.isEnabled = it + } + .collect() + } + }, + content = content, + ) +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/qr/ScanQrRoute.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/qr/ScanQrRoute.kt new file mode 100644 index 00000000..80878f71 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/qr/ScanQrRoute.kt @@ -0,0 +1,16 @@ +package com.artemchep.keyguard.feature.qr + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.navigation.RouteForResult +import com.artemchep.keyguard.feature.navigation.RouteResultTransmitter + +actual object ScanQrRoute : RouteForResult { + @Composable + override fun Content( + transmitter: RouteResultTransmitter, + ) { + ScanQrScreen( + transmitter = transmitter, + ) + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/qr/ScanQrScreen.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/qr/ScanQrScreen.kt new file mode 100644 index 00000000..9e724fcb --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/qr/ScanQrScreen.kt @@ -0,0 +1,223 @@ +package com.artemchep.keyguard.feature.qr + +import android.Manifest +import android.annotation.SuppressLint +import androidx.camera.core.CameraSelector +import androidx.camera.core.ImageAnalysis +import androidx.camera.core.ImageProxy +import androidx.camera.core.Preview +import androidx.camera.lifecycle.ProcessCameraProvider +import androidx.camera.view.PreviewView +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.aspectRatio +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.statusBarsPadding +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.Button +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.runtime.* +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.input.nestedscroll.nestedScroll +import androidx.compose.ui.platform.LocalLifecycleOwner +import androidx.compose.ui.unit.dp +import androidx.compose.ui.viewinterop.AndroidView +import androidx.core.content.ContextCompat +import com.artemchep.keyguard.feature.navigation.NavigationIcon +import com.artemchep.keyguard.feature.navigation.RouteResultTransmitter +import com.artemchep.keyguard.ui.CollectedEffect +import com.artemchep.keyguard.ui.ScaffoldColumn +import com.artemchep.keyguard.ui.theme.Dimens +import com.artemchep.keyguard.ui.toolbar.SmallToolbar +import com.google.accompanist.permissions.ExperimentalPermissionsApi +import com.google.accompanist.permissions.PermissionStatus +import com.google.accompanist.permissions.rememberPermissionState +import com.google.mlkit.vision.barcode.BarcodeScanning +import com.google.mlkit.vision.barcode.common.Barcode +import com.google.mlkit.vision.common.InputImage +import java.util.concurrent.Executors + +@Composable +fun ScanQrScreen( + transmitter: RouteResultTransmitter, +) { + val state = scanQrScreenState() + + CollectedEffect(state.effects.onSuccessFlow) { rawValue -> + // Notify that we have successfully logged in, and that + // the caller can now decide what to do. + transmitter.invoke(rawValue) + } + + ScanQrScreen( + state = state, + ) +} + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun ScanQrScreen( + state: ScanQrState, +) { + val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior() + ScaffoldColumn( + modifier = Modifier + .nestedScroll(scrollBehavior.nestedScrollConnection), + topAppBarScrollBehavior = scrollBehavior, + topBar = { + SmallToolbar( + modifier = Modifier + .statusBarsPadding(), + title = { + Text("Scan QR code") + }, + navigationIcon = { + NavigationIcon() + }, + scrollBehavior = scrollBehavior, + ) + }, + ) { + ScanQrCamera2( + state = state, + ) + } +} + +@OptIn(ExperimentalPermissionsApi::class) +@Composable +private fun ScanQrCamera2( + state: ScanQrState, +) { + val cameraPermissionState = rememberPermissionState(Manifest.permission.CAMERA) + when (val status = cameraPermissionState.status) { + // If the camera permission is granted, then show screen with the feature enabled + PermissionStatus.Granted -> { + ScanQrCamera( + modifier = Modifier + .padding(16.dp) + .clip(RoundedCornerShape(16.dp)) + .aspectRatio(1f), + state = state, + ) + } + + is PermissionStatus.Denied -> { + Column( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding), + ) { + val textToShow = if (status.shouldShowRationale) { + // If the user has denied the permission but the rationale can be shown, + // then gently explain why the app requires this permission + "The camera is important for this app. Please grant the permission." + } else { + // If it's the first time the user lands on this feature, or the user + // doesn't want to be asked again for this permission, explain that the + // permission is required + "Camera permission required for this feature to be available. " + + "Please grant the permission" + } + Text(textToShow) + Button( + onClick = { + cameraPermissionState.launchPermissionRequest() + }, + ) { + Text("Request permission") + } + } + } + } +} + +@OptIn(ExperimentalPermissionsApi::class) +@Composable +private fun ScanQrCamera( + modifier: Modifier = Modifier, + state: ScanQrState, +) { + val onScan by rememberUpdatedState(state.onScan) + val analyzer = remember { + QrImageAnalyzer { barcodes -> + onScan?.invoke(barcodes) + } + } + val analyserExecutor = remember { + Executors.newSingleThreadExecutor() + } + DisposableEffect(analyserExecutor) { + onDispose { + analyserExecutor.shutdown() + } + } + + // TODO: Local lifecycle owner is a wrong guy!!! + val lifecycleOwner by rememberUpdatedState(LocalLifecycleOwner.current) + AndroidView( + modifier = modifier, + factory = { context -> + val previewView = PreviewView(context) + + val cameraExecutor = ContextCompat.getMainExecutor(context) + val cameraProviderFuture = ProcessCameraProvider.getInstance(context) + cameraProviderFuture.addListener( + { + val cameraProvider: ProcessCameraProvider = cameraProviderFuture.get() + val preview = Preview.Builder() + .build() + .also { + it.setSurfaceProvider(previewView.surfaceProvider) + } + val imageAnalysis = ImageAnalysis.Builder() + .setBackpressureStrategy(ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST) + .build() + imageAnalysis.setAnalyzer(cameraExecutor, analyzer) + val cameraSelector = CameraSelector.DEFAULT_BACK_CAMERA + try { + cameraProvider.unbindAll() + cameraProvider.bindToLifecycle( + lifecycleOwner, + cameraSelector, + imageAnalysis, + preview, + ) + } catch (_: Exception) { + // Do nothing. + } + }, + cameraExecutor, + ) + + previewView + }, + update = { previewView -> + }, + ) +} + +private class QrImageAnalyzer( + private val onReadBarcode: (barcodes: List) -> Unit, +) : ImageAnalysis.Analyzer { + override fun analyze(imageProxy: ImageProxy) { + scanBarcode(imageProxy) + } + + @SuppressLint("UnsafeExperimentalUsageError") + private fun scanBarcode(imageProxy: ImageProxy) { + imageProxy.image?.let { image -> + val inputImage = InputImage.fromMediaImage(image, imageProxy.imageInfo.rotationDegrees) + val scanner = BarcodeScanning.getClient() + scanner + .process(inputImage) + .addOnCompleteListener { + imageProxy.close() + + // Send the barcodes. + if (it.isSuccessful) onReadBarcode(it.result as List) + } + } + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/qr/ScanQrState.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/qr/ScanQrState.kt new file mode 100644 index 00000000..a9a6ae8b --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/qr/ScanQrState.kt @@ -0,0 +1,20 @@ +package com.artemchep.keyguard.feature.qr + +import androidx.compose.runtime.Immutable +import arrow.optics.optics +import com.google.mlkit.vision.barcode.common.Barcode +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.emptyFlow + +data class ScanQrState( + val effects: SideEffect = SideEffect(), + val onScan: ((List) -> Unit)? = null, +) { + @Immutable + @optics + data class SideEffect( + val onSuccessFlow: Flow = emptyFlow(), + ) { + companion object + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/qr/ScanQrStateProducer.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/qr/ScanQrStateProducer.kt new file mode 100644 index 00000000..ab2860a1 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/qr/ScanQrStateProducer.kt @@ -0,0 +1,41 @@ +package com.artemchep.keyguard.feature.qr + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.common.util.flow.EventFlow +import com.artemchep.keyguard.feature.navigation.state.produceScreenState +import com.google.mlkit.vision.barcode.common.Barcode +import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.mapNotNull +import kotlinx.coroutines.flow.onEach +import kotlinx.coroutines.flow.take + +@Composable +fun scanQrScreenState(): ScanQrState = produceScreenState( + key = "scan_qr", + initial = ScanQrState(), +) { + val successEventSink = EventFlow() + val successBarcodeSink = EventFlow() + successBarcodeSink + .mapNotNull { it.rawValue } + .take(1) + .onEach { rawValue -> + successEventSink.emit(rawValue) + } + .launchIn(this) + + val onScan = { barcodes: List -> + barcodes.forEach { barcode -> + successBarcodeSink.emit(barcode) + } + } + + val state = ScanQrState( + effects = ScanQrState.SideEffect( + onSuccessFlow = successEventSink, + ), + onScan = onScan, + ) + flowOf(state) +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/yubikey/Yubi.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/yubikey/Yubi.kt new file mode 100644 index 00000000..069997e8 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/feature/yubikey/Yubi.kt @@ -0,0 +1,235 @@ +package com.artemchep.keyguard.feature.yubikey + +import android.content.Context +import androidx.compose.foundation.focusable +import androidx.compose.foundation.layout.Spacer +import androidx.compose.runtime.Composable +import androidx.compose.runtime.DisposableEffect +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.State +import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.Modifier +import androidx.compose.ui.focus.FocusRequester +import androidx.compose.ui.focus.focusRequester +import androidx.compose.ui.hapticfeedback.HapticFeedbackType +import androidx.compose.ui.input.key.onKeyEvent +import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.platform.LocalHapticFeedback +import arrow.core.left +import arrow.core.right +import com.artemchep.keyguard.android.closestActivityOrNull +import com.artemchep.keyguard.common.model.Loadable +import com.yubico.yubikit.android.YubiKitManager +import com.yubico.yubikit.android.transport.nfc.NfcConfiguration +import com.yubico.yubikit.android.transport.nfc.NfcNotAvailable +import com.yubico.yubikit.android.transport.nfc.NfcYubiKeyDevice +import com.yubico.yubikit.android.transport.usb.UsbConfiguration +import com.yubico.yubikit.android.transport.usb.UsbYubiKeyDevice +import com.yubico.yubikit.android.ui.OtpKeyListener +import com.yubico.yubikit.android.ui.OtpKeyListener.OtpListener +import com.yubico.yubikit.core.UsbPid +import com.yubico.yubikit.core.util.Callback +import com.yubico.yubikit.core.util.NdefUtils +import kotlinx.collections.immutable.PersistentMap +import kotlinx.collections.immutable.persistentMapOf +import kotlinx.collections.immutable.toImmutableSet +import java.io.IOException +import java.util.UUID + +@Composable +actual fun rememberYubiKey( + send: OnYubiKeyListener?, +): YubiKeyState { + val context = LocalContext.current + val kit = remember(context) { + YubiKitManager(context) + } + + val usbState = kit.rememberYubiKeyUsbState( + context = context, + send = send, + ) + val nfcState = kit.rememberYubiKeyNfcState( + context = context, + send = send, + ) + + return remember(usbState, nfcState) { + YubiKeyState( + usbState = usbState, + nfcState = nfcState, + ) + } +} + +@Composable +private fun YubiKitManager.rememberYubiKeyUsbState( + context: Context, + send: OnYubiKeyListener?, +): State> { + data class ActiveDevice( + val id: String, + val pid: UsbPid, + ) + + val devicesState = remember { + mutableStateOf>(persistentMapOf()) + } + val loadedState = remember { + mutableStateOf(false) + } + val enabledState = remember { + mutableStateOf(false) + } + val capturingState = remember { + mutableStateOf(false) + } + + val updatedHaptic = rememberUpdatedState(newValue = LocalHapticFeedback.current) + val updatedSend = rememberUpdatedState(newValue = send) + val otpKeyListener = remember { + OtpKeyListener( + object : OtpListener { + override fun onCaptureStarted() { + capturingState.value = true + } + + override fun onCaptureComplete(credentials: String) { + val event = credentials.right() + updatedSend.value?.invoke(event) + + capturingState.value = false + // Notify user that something had happened, it kinda + // makes him fill that it worked. + updatedHaptic.value.performHapticFeedback(HapticFeedbackType.LongPress) + } + }, + ) + } + val requester = remember { + FocusRequester() + } + Spacer( + modifier = Modifier + .onKeyEvent { event -> + otpKeyListener.onKeyEvent(event.nativeKeyEvent) + } + .focusRequester(requester) + .focusable(), + ) + LaunchedEffect(requester) { + requester.requestFocus() + } + + DisposableEffect(context, this) { + val callback = Callback { device: UsbYubiKeyDevice -> + val info = ActiveDevice( + id = UUID.randomUUID().toString(), + pid = device.pid, + ) + + // Add device to the state. + kotlin.run { + val newState = devicesState.value.builder().apply { + put(info.id, info) + }.build() + devicesState.value = newState + } + device.setOnClosed { + // Remove device from the state. + val newState = devicesState.value.builder().apply { + remove(info.id) + }.build() + devicesState.value = newState + } + } + try { + val config = UsbConfiguration() + startUsbDiscovery(config, callback) + } catch (e: Exception) { + // Since we did not start USB discovery, we do not + // want to stop it either. + loadedState.value = true + enabledState.value = false + return@DisposableEffect onDispose { + // Do nothing. + } + } + loadedState.value = true + enabledState.value = true + onDispose { + stopUsbDiscovery() + } + } + + return remember( + loadedState, + enabledState, + capturingState, + devicesState, + ) { + derivedStateOf { + val loaded = loadedState.value + if (!loaded) return@derivedStateOf Loadable.Loading + + val enabled = enabledState.value + val capturing = capturingState.value + val devices = devicesState.value + .values + .asSequence() + .map { it.pid } + .toImmutableSet() + val state = YubiKeyUsbState( + enabled = enabled, + capturing = capturing, + devices = devices, + ) + Loadable.Ok(state) + } + } +} + +@Composable +private fun YubiKitManager.rememberYubiKeyNfcState( + context: Context, + send: OnYubiKeyListener?, +): State> { + val state = remember { + mutableStateOf>(Loadable.Loading) + } + + val updatedSend = rememberUpdatedState(newValue = send) + DisposableEffect(context, this) { + val activity = requireNotNull(context.closestActivityOrNull) + val callback = Callback { device: NfcYubiKeyDevice -> + val event = try { + val credential = NdefUtils.getNdefPayload(device.readNdef()) + credential.right() + } catch (e: IOException) { + // Failed to read the credentials. + e.left() + } + updatedSend.value?.invoke(event) + } + try { + val config = NfcConfiguration() + startNfcDiscovery(config, activity, callback) + } catch (e: NfcNotAvailable) { + // Since we did not start NFC discovery, we do not + // want to stop it either. + state.value = Loadable.Ok(YubiKeyNfcState(enabled = false)) + return@DisposableEffect onDispose { + // Do nothing. + } + } + state.value = Loadable.Ok(YubiKeyNfcState(enabled = true)) + onDispose { + stopNfcDiscovery(activity) + } + } + + return state +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/platform/LeActivity.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/platform/LeActivity.kt new file mode 100644 index 00000000..8bf2fd6f --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/platform/LeActivity.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.platform + +import android.app.Activity + +actual typealias LeActivity = Activity diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/platform/LeAnimation.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/platform/LeAnimation.kt new file mode 100644 index 00000000..976d81e9 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/platform/LeAnimation.kt @@ -0,0 +1,23 @@ +package com.artemchep.keyguard.platform + +import android.provider.Settings +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import androidx.compose.ui.platform.LocalContext + +actual val LocalAnimationFactor: Float + @Composable + get() { + val context = LocalContext.current + val scale = remember(context) { + try { + Settings.Global.getFloat( + context.contentResolver, + Settings.Global.TRANSITION_ANIMATION_SCALE, + ) + } catch (e: Settings.SettingNotFoundException) { + 1f + } + } + return scale + } diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/platform/LeBundle.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/platform/LeBundle.kt new file mode 100644 index 00000000..dac836e9 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/platform/LeBundle.kt @@ -0,0 +1,14 @@ +package com.artemchep.keyguard.platform + +import android.os.Bundle +import androidx.core.os.bundleOf + +actual typealias LeBundle = Bundle + +actual operator fun LeBundle.contains(key: String) = containsKey(key) + +actual operator fun LeBundle.get(key: String) = get(key) + +actual fun leBundleOf( + vararg map: Pair, +): LeBundle = bundleOf(*map) diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/platform/LeContext.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/platform/LeContext.kt new file mode 100644 index 00000000..34274598 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/platform/LeContext.kt @@ -0,0 +1,16 @@ +package com.artemchep.keyguard.platform + +import android.content.Context +import androidx.compose.runtime.Composable +import androidx.compose.ui.platform.LocalContext + +actual class LeContext( + val context: Context, +) + +actual val LocalLeContext: LeContext + @Composable + get() { + val context = LocalContext.current + return LeContext(context) + } diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/platform/LeDebug.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/platform/LeDebug.kt new file mode 100644 index 00000000..3b64fbb5 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/platform/LeDebug.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.platform + + import com.artemchep.keyguard.common.BuildConfig + +actual val isStandalone: Boolean = BuildConfig.FLAVOR == "none" diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/platform/LePlatform.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/platform/LePlatform.kt new file mode 100644 index 00000000..317b7575 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/platform/LePlatform.kt @@ -0,0 +1,14 @@ +package com.artemchep.keyguard.platform + +import android.os.Build + +private val platform by lazy { + val isChromebook = Build.DEVICE.orEmpty() + .matches(".+_cheets|cheets_.+".toRegex()) + Platform.Mobile.Android( + isChromebook = isChromebook, + ) +} + +actual val CurrentPlatform: Platform + get() = platform diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/platform/LeUri.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/platform/LeUri.kt new file mode 100644 index 00000000..5b8833ee --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/platform/LeUri.kt @@ -0,0 +1,11 @@ +package com.artemchep.keyguard.platform + +import android.net.Uri +import androidx.core.net.toUri +import java.io.File + +actual typealias LeUri = Uri + +actual fun leParseUri(uri: String): LeUri = Uri.parse(uri) + +actual fun leParseUri(file: File): LeUri = file.toUri() diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/platform/LeUsbPid.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/platform/LeUsbPid.kt new file mode 100644 index 00000000..c9568885 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/platform/LeUsbPid.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.platform + +import com.yubico.yubikit.core.UsbPid + +actual typealias LeUsbPid = UsbPid diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/platform/leIme.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/platform/leIme.kt new file mode 100644 index 00000000..af029b59 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/platform/leIme.kt @@ -0,0 +1,35 @@ +package com.artemchep.keyguard.platform + +import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.displayCutout +import androidx.compose.foundation.layout.ime +import androidx.compose.foundation.layout.navigationBars +import androidx.compose.foundation.layout.statusBars +import androidx.compose.foundation.layout.systemBars +import androidx.compose.runtime.Composable +import androidx.compose.runtime.NonRestartableComposable + +actual val WindowInsets.Companion.leIme: WindowInsets + @Composable + @NonRestartableComposable + get() = ime + +actual val WindowInsets.Companion.leNavigationBars: WindowInsets + @Composable + @NonRestartableComposable + get() = navigationBars + +actual val WindowInsets.Companion.leStatusBars: WindowInsets + @Composable + @NonRestartableComposable + get() = statusBars + +actual val WindowInsets.Companion.leSystemBars: WindowInsets + @Composable + @NonRestartableComposable + get() = systemBars + +actual val WindowInsets.Companion.leDisplayCutout: WindowInsets + @Composable + @NonRestartableComposable + get() = displayCutout diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/platform/lifecycle/LocalLifecycleStateFlow.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/platform/lifecycle/LocalLifecycleStateFlow.kt new file mode 100644 index 00000000..dbe6fe87 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/platform/lifecycle/LocalLifecycleStateFlow.kt @@ -0,0 +1,39 @@ +package com.artemchep.keyguard.platform.lifecycle + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.DisposableEffect +import androidx.compose.runtime.remember +import androidx.compose.ui.platform.LocalLifecycleOwner +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.LifecycleEventObserver +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow + +actual val LocalLifecycleStateFlow: StateFlow + @Composable + get() { + val lifecycleOwner = LocalLifecycleOwner.current + val sink = remember(lifecycleOwner) { + val initialState = lifecycleOwner.lifecycle.currentState + MutableStateFlow(initialState.toCommon()) + } + DisposableEffect(lifecycleOwner, sink) { + val observer = LifecycleEventObserver { _, event -> + val newState = event.targetState + sink.value = newState.toCommon() + } + lifecycleOwner.lifecycle.addObserver(observer) + onDispose { + lifecycleOwner.lifecycle.removeObserver(observer) + } + } + return sink + } + +fun Lifecycle.State.toCommon() = when (this) { + Lifecycle.State.DESTROYED -> LeLifecycleState.DESTROYED + Lifecycle.State.INITIALIZED -> LeLifecycleState.INITIALIZED + Lifecycle.State.CREATED -> LeLifecycleState.CREATED + Lifecycle.State.STARTED -> LeLifecycleState.STARTED + Lifecycle.State.RESUMED -> LeLifecycleState.RESUMED +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/platform/parcelize/LeIgnoredOnParcel.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/platform/parcelize/LeIgnoredOnParcel.kt new file mode 100644 index 00000000..116ba113 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/platform/parcelize/LeIgnoredOnParcel.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.platform.parcelize + +import kotlinx.parcelize.IgnoredOnParcel + +actual typealias LeIgnoredOnParcel = IgnoredOnParcel diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/platform/parcelize/LeParcelable.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/platform/parcelize/LeParcelable.kt new file mode 100644 index 00000000..e5f37c02 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/platform/parcelize/LeParcelable.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.platform.parcelize + +import android.os.Parcelable + +actual typealias LeParcelable = Parcelable diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/platform/parcelize/LeParcelize.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/platform/parcelize/LeParcelize.kt new file mode 100644 index 00000000..abba6905 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/platform/parcelize/LeParcelize.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.platform.parcelize + +import kotlinx.parcelize.Parcelize + +actual typealias LeParcelize = Parcelize diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/platform/recordException.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/platform/recordException.kt new file mode 100644 index 00000000..e55ca147 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/platform/recordException.kt @@ -0,0 +1,35 @@ +package com.artemchep.keyguard.platform + +import com.artemchep.keyguard.platform.util.isRelease +import com.google.firebase.crashlytics.isEnabled +import com.google.firebase.crashlytics.isEnabledFlow +import com.google.firebase.crashlytics.ktx.crashlytics +import com.google.firebase.crashlytics.setEnabled +import com.google.firebase.ktx.Firebase +import kotlinx.coroutines.flow.Flow +import java.net.UnknownHostException + +actual fun recordException(e: Throwable) { + if ( + e is UnknownHostException + ) { + return + } + Firebase.crashlytics.recordException(e) + if (!isRelease) { + e.printStackTrace() + } +} + +actual fun recordLog(message: String) { + Firebase.crashlytics.log(message) +} + +actual fun crashlyticsIsEnabled(): Boolean? = + Firebase.crashlytics.isEnabled() + +actual fun crashlyticsIsEnabledFlow(): Flow = + Firebase.crashlytics.isEnabledFlow() + +actual fun crashlyticsSetEnabled(enabled: Boolean?) = + Firebase.crashlytics.setEnabled(enabled) diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/room/AppDatabase.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/room/AppDatabase.kt new file mode 100644 index 00000000..c34cbcf9 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/room/AppDatabase.kt @@ -0,0 +1,52 @@ +package com.artemchep.keyguard.room + +import androidx.room.AutoMigration +import androidx.room.Database +import androidx.room.RoomDatabase +import androidx.room.TypeConverters +import com.artemchep.keyguard.room.dao.AccountDao +import com.artemchep.keyguard.room.dao.CipherDao +import com.artemchep.keyguard.room.dao.CollectionDao +import com.artemchep.keyguard.room.dao.FillCipherHistoryDao +import com.artemchep.keyguard.room.dao.FolderDao +import com.artemchep.keyguard.room.dao.MetaDao +import com.artemchep.keyguard.room.dao.OpenCipherHistoryDao +import com.artemchep.keyguard.room.dao.OrganizationDao +import com.artemchep.keyguard.room.dao.ProfileDao + +@Database( + entities = [ + RoomBitwardenCipher::class, + RoomBitwardenCollection::class, + RoomBitwardenOrganization::class, + RoomBitwardenFolder::class, + RoomBitwardenProfile::class, + RoomBitwardenMeta::class, + RoomBitwardenToken::class, + // history + RoomOpenCipherHistory::class, + RoomFillCipherHistory::class, + ], + autoMigrations = [ + AutoMigration(from = 1, to = 2), + AutoMigration(from = 2, to = 3), + AutoMigration(from = 3, to = 4), + AutoMigration(from = 4, to = 5), + AutoMigration(from = 5, to = 6), + AutoMigration(from = 6, to = 7), + ], + version = 7, + exportSchema = true, +) +@TypeConverters(RoomSecretConverter::class) +abstract class AppDatabase : RoomDatabase() { + abstract fun cipherDao(): CipherDao + abstract fun collectionDao(): CollectionDao + abstract fun organizationDao(): OrganizationDao + abstract fun metaDao(): MetaDao + abstract fun folderDao(): FolderDao + abstract fun profileDao(): ProfileDao + abstract fun accountDao(): AccountDao + abstract fun fillCipherHistoryDao(): FillCipherHistoryDao + abstract fun openCipherHistoryDao(): OpenCipherHistoryDao +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/room/RoomBitwardenCipher.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/room/RoomBitwardenCipher.kt new file mode 100644 index 00000000..e69f95f8 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/room/RoomBitwardenCipher.kt @@ -0,0 +1,26 @@ +package com.artemchep.keyguard.room + +import androidx.room.Entity +import androidx.room.ForeignKey +import com.artemchep.keyguard.core.store.bitwarden.BitwardenCipher + +@Entity( + tableName = "RoomBitwardenCipher", + primaryKeys = [ + "itemId", + ], + foreignKeys = [ + ForeignKey( + entity = RoomBitwardenToken::class, + parentColumns = arrayOf("accountId"), + childColumns = arrayOf("accountId"), + onDelete = ForeignKey.CASCADE, + ), + ], +) +data class RoomBitwardenCipher( + val itemId: String, + val accountId: String, + val folderId: String?, + val content: BitwardenCipher, +) diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/room/RoomBitwardenCollection.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/room/RoomBitwardenCollection.kt new file mode 100644 index 00000000..7ab8c70e --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/room/RoomBitwardenCollection.kt @@ -0,0 +1,26 @@ +package com.artemchep.keyguard.room + +import androidx.room.Entity +import androidx.room.ForeignKey +import com.artemchep.keyguard.core.store.bitwarden.BitwardenCollection + +@Entity( + tableName = "RoomBitwardenCollection", + primaryKeys = [ + "collectionId", + "accountId", + ], + foreignKeys = [ + ForeignKey( + entity = RoomBitwardenToken::class, + parentColumns = arrayOf("accountId"), + childColumns = arrayOf("accountId"), + onDelete = ForeignKey.CASCADE, + ), + ], +) +data class RoomBitwardenCollection( + val collectionId: String, + val accountId: String, + val content: BitwardenCollection, +) diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/room/RoomBitwardenFolder.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/room/RoomBitwardenFolder.kt new file mode 100644 index 00000000..f5cc93d7 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/room/RoomBitwardenFolder.kt @@ -0,0 +1,25 @@ +package com.artemchep.keyguard.room + +import androidx.room.Entity +import androidx.room.ForeignKey +import com.artemchep.keyguard.core.store.bitwarden.BitwardenFolder + +@Entity( + tableName = "RoomBitwardenFolder", + primaryKeys = [ + "folderId", + ], + foreignKeys = [ + ForeignKey( + entity = RoomBitwardenToken::class, + parentColumns = arrayOf("accountId"), + childColumns = arrayOf("accountId"), + onDelete = ForeignKey.CASCADE, + ), + ], +) +data class RoomBitwardenFolder( + val folderId: String, + val accountId: String, + val content: BitwardenFolder, +) diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/room/RoomBitwardenMeta.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/room/RoomBitwardenMeta.kt new file mode 100644 index 00000000..b5c724ed --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/room/RoomBitwardenMeta.kt @@ -0,0 +1,24 @@ +package com.artemchep.keyguard.room + +import androidx.room.Entity +import androidx.room.ForeignKey +import com.artemchep.keyguard.core.store.bitwarden.BitwardenMeta + +@Entity( + tableName = "RoomBitwardenMeta", + primaryKeys = [ + "accountId", + ], + foreignKeys = [ + ForeignKey( + entity = RoomBitwardenToken::class, + parentColumns = arrayOf("accountId"), + childColumns = arrayOf("accountId"), + onDelete = ForeignKey.CASCADE, + ), + ], +) +data class RoomBitwardenMeta( + val accountId: String, + val content: BitwardenMeta, +) diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/room/RoomBitwardenOrganization.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/room/RoomBitwardenOrganization.kt new file mode 100644 index 00000000..96d5db87 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/room/RoomBitwardenOrganization.kt @@ -0,0 +1,26 @@ +package com.artemchep.keyguard.room + +import androidx.room.Entity +import androidx.room.ForeignKey +import com.artemchep.keyguard.core.store.bitwarden.BitwardenOrganization + +@Entity( + tableName = "RoomBitwardenOrganization", + primaryKeys = [ + "organizationId", + "accountId", + ], + foreignKeys = [ + ForeignKey( + entity = RoomBitwardenToken::class, + parentColumns = arrayOf("accountId"), + childColumns = arrayOf("accountId"), + onDelete = ForeignKey.CASCADE, + ), + ], +) +data class RoomBitwardenOrganization( + val organizationId: String, + val accountId: String, + val content: BitwardenOrganization, +) diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/room/RoomBitwardenProfile.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/room/RoomBitwardenProfile.kt new file mode 100644 index 00000000..b6d21135 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/room/RoomBitwardenProfile.kt @@ -0,0 +1,26 @@ +package com.artemchep.keyguard.room + +import androidx.room.Entity +import androidx.room.ForeignKey +import com.artemchep.keyguard.core.store.bitwarden.BitwardenProfile + +@Entity( + tableName = "RoomBitwardenProfile", + primaryKeys = [ + "profileId", + "accountId", + ], + foreignKeys = [ + ForeignKey( + entity = RoomBitwardenToken::class, + parentColumns = arrayOf("accountId"), + childColumns = arrayOf("accountId"), + onDelete = ForeignKey.CASCADE, + ), + ], +) +data class RoomBitwardenProfile( + val profileId: String, + val accountId: String, + val content: BitwardenProfile, +) diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/room/RoomBitwardenToken.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/room/RoomBitwardenToken.kt new file mode 100644 index 00000000..9468371e --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/room/RoomBitwardenToken.kt @@ -0,0 +1,15 @@ +package com.artemchep.keyguard.room + +import androidx.room.Entity +import com.artemchep.keyguard.core.store.bitwarden.BitwardenToken + +@Entity( + tableName = "RoomBitwardenToken", + primaryKeys = [ + "accountId", + ], +) +data class RoomBitwardenToken( + val accountId: String, + val content: BitwardenToken, +) diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/room/RoomFillCipherHistory.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/room/RoomFillCipherHistory.kt new file mode 100644 index 00000000..cb76caf1 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/room/RoomFillCipherHistory.kt @@ -0,0 +1,30 @@ +package com.artemchep.keyguard.room + +import androidx.room.Entity +import androidx.room.ForeignKey +import androidx.room.PrimaryKey + +@Entity( + tableName = "RoomFillCipherHistory", + foreignKeys = [ + ForeignKey( + entity = RoomBitwardenToken::class, + parentColumns = arrayOf("accountId"), + childColumns = arrayOf("accountId"), + onDelete = ForeignKey.CASCADE, + ), + ForeignKey( + entity = RoomBitwardenCipher::class, + parentColumns = arrayOf("itemId"), + childColumns = arrayOf("itemId"), + onDelete = ForeignKey.CASCADE, + ), + ], +) +data class RoomFillCipherHistory( + @PrimaryKey(autoGenerate = true) + val id: Int = 0, + val itemId: String, + val accountId: String, + val timestamp: Long, +) diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/room/RoomMigrationException.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/room/RoomMigrationException.kt new file mode 100644 index 00000000..850fada9 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/room/RoomMigrationException.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.room + +class RoomMigrationException( + e: Throwable, +) : RuntimeException(e) diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/room/RoomOpenCipherHistory.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/room/RoomOpenCipherHistory.kt new file mode 100644 index 00000000..5507a353 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/room/RoomOpenCipherHistory.kt @@ -0,0 +1,30 @@ +package com.artemchep.keyguard.room + +import androidx.room.Entity +import androidx.room.ForeignKey +import androidx.room.PrimaryKey + +@Entity( + tableName = "RoomOpenCipherHistory", + foreignKeys = [ + ForeignKey( + entity = RoomBitwardenToken::class, + parentColumns = arrayOf("accountId"), + childColumns = arrayOf("accountId"), + onDelete = ForeignKey.CASCADE, + ), + ForeignKey( + entity = RoomBitwardenCipher::class, + parentColumns = arrayOf("itemId"), + childColumns = arrayOf("itemId"), + onDelete = ForeignKey.CASCADE, + ), + ], +) +data class RoomOpenCipherHistory( + @PrimaryKey(autoGenerate = true) + val id: Int = 0, + val itemId: String, + val accountId: String, + val timestamp: Long, +) diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/room/RoomSecret.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/room/RoomSecret.kt new file mode 100644 index 00000000..b1ce6571 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/room/RoomSecret.kt @@ -0,0 +1,80 @@ +package com.artemchep.keyguard.room + +import androidx.room.ProvidedTypeConverter +import androidx.room.TypeConverter +import com.artemchep.keyguard.core.store.bitwarden.BitwardenCipher +import com.artemchep.keyguard.core.store.bitwarden.BitwardenCollection +import com.artemchep.keyguard.core.store.bitwarden.BitwardenFolder +import com.artemchep.keyguard.core.store.bitwarden.BitwardenMeta +import com.artemchep.keyguard.core.store.bitwarden.BitwardenOrganization +import com.artemchep.keyguard.core.store.bitwarden.BitwardenProfile +import com.artemchep.keyguard.core.store.bitwarden.BitwardenToken +import kotlinx.serialization.encodeToString +import kotlinx.serialization.json.Json + +@ProvidedTypeConverter +class RoomSecretConverter( + private val json: Json, +) { + @TypeConverter + fun encodeToken(model: BitwardenToken?) = encode(model) + + @TypeConverter + fun encodeCipher(model: BitwardenCipher?) = encode(model) + + @TypeConverter + fun encodeCollection(model: BitwardenCollection?) = encode(model) + + @TypeConverter + fun encodeFolder(model: BitwardenFolder?) = encode(model) + + @TypeConverter + fun encodeMeta(model: BitwardenMeta?) = encode(model) + + @TypeConverter + fun encodeProfile(model: BitwardenProfile?) = encode(model) + + @TypeConverter + fun encodeOrganization(model: BitwardenOrganization?) = encode(model) + + private inline fun encode(model: T?): String? { + if (model == null) { + // We can not serialize null models, so just + // write them as null. + return null + } + + return json.encodeToString(model) + } + + @TypeConverter + fun decodeToken(text: String?): BitwardenToken? = decode(text) + + @TypeConverter + fun decodeCipher(text: String?): BitwardenCipher? = decode(text) + + @TypeConverter + fun decodeCollection(text: String?): BitwardenCollection? = decode(text) + + @TypeConverter + fun decodeFolder(text: String?): BitwardenFolder? = decode(text) + + @TypeConverter + fun decodeMeta(text: String?): BitwardenMeta? = decode(text) + + @TypeConverter + fun decodeProfile(text: String?): BitwardenProfile? = decode(text) + + @TypeConverter + fun decodeOrganization(text: String?): BitwardenOrganization? = decode(text) + + private inline fun decode(text: String?): T? { + if (text == null) { + // We can not serialize null models, so just + // write them as null. + return null + } + + return json.decodeFromString(text) + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/room/dao/AccountDao.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/room/dao/AccountDao.kt new file mode 100644 index 00000000..ed6ab782 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/room/dao/AccountDao.kt @@ -0,0 +1,12 @@ +package com.artemchep.keyguard.room.dao + +import androidx.room.Dao +import androidx.room.Query +import com.artemchep.keyguard.room.RoomBitwardenToken +import kotlinx.coroutines.flow.Flow + +@Dao +interface AccountDao { + @Query("SELECT * FROM RoomBitwardenToken") + fun getAll(): Flow> +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/room/dao/CipherDao.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/room/dao/CipherDao.kt new file mode 100644 index 00000000..eb5d6e93 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/room/dao/CipherDao.kt @@ -0,0 +1,12 @@ +package com.artemchep.keyguard.room.dao + +import androidx.room.Dao +import androidx.room.Query +import com.artemchep.keyguard.room.RoomBitwardenCipher +import kotlinx.coroutines.flow.Flow + +@Dao +interface CipherDao { + @Query("SELECT * FROM RoomBitwardenCipher") + fun getAll(): Flow> +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/room/dao/CollectionDao.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/room/dao/CollectionDao.kt new file mode 100644 index 00000000..3d38a279 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/room/dao/CollectionDao.kt @@ -0,0 +1,12 @@ +package com.artemchep.keyguard.room.dao + +import androidx.room.Dao +import androidx.room.Query +import com.artemchep.keyguard.room.RoomBitwardenCollection +import kotlinx.coroutines.flow.Flow + +@Dao +interface CollectionDao { + @Query("SELECT * FROM RoomBitwardenCollection") + fun getAll(): Flow> +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/room/dao/FillCipherHistoryDao.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/room/dao/FillCipherHistoryDao.kt new file mode 100644 index 00000000..9eba0d00 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/room/dao/FillCipherHistoryDao.kt @@ -0,0 +1,12 @@ +package com.artemchep.keyguard.room.dao + +import androidx.room.Dao +import androidx.room.Query +import com.artemchep.keyguard.room.RoomFillCipherHistory +import kotlinx.coroutines.flow.Flow + +@Dao +interface FillCipherHistoryDao { + @Query("SELECT * FROM RoomFillCipherHistory") + fun getAll(): Flow> +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/room/dao/FolderDao.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/room/dao/FolderDao.kt new file mode 100644 index 00000000..c962e706 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/room/dao/FolderDao.kt @@ -0,0 +1,12 @@ +package com.artemchep.keyguard.room.dao + +import androidx.room.Dao +import androidx.room.Query +import com.artemchep.keyguard.room.RoomBitwardenFolder +import kotlinx.coroutines.flow.Flow + +@Dao +interface FolderDao { + @Query("SELECT * FROM RoomBitwardenFolder") + fun getAll(): Flow> +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/room/dao/MetaDao.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/room/dao/MetaDao.kt new file mode 100644 index 00000000..4df419a6 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/room/dao/MetaDao.kt @@ -0,0 +1,12 @@ +package com.artemchep.keyguard.room.dao + +import androidx.room.Dao +import androidx.room.Query +import com.artemchep.keyguard.room.RoomBitwardenMeta +import kotlinx.coroutines.flow.Flow + +@Dao +interface MetaDao { + @Query("SELECT * FROM RoomBitwardenMeta") + fun getAll(): Flow> +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/room/dao/OpenCipherHistoryDao.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/room/dao/OpenCipherHistoryDao.kt new file mode 100644 index 00000000..5b70abb8 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/room/dao/OpenCipherHistoryDao.kt @@ -0,0 +1,12 @@ +package com.artemchep.keyguard.room.dao + +import androidx.room.Dao +import androidx.room.Query +import com.artemchep.keyguard.room.RoomOpenCipherHistory +import kotlinx.coroutines.flow.Flow + +@Dao +interface OpenCipherHistoryDao { + @Query("SELECT * FROM RoomOpenCipherHistory ORDER BY timestamp DESC") + fun getAll(): Flow> +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/room/dao/OrganizationDao.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/room/dao/OrganizationDao.kt new file mode 100644 index 00000000..74d6ec94 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/room/dao/OrganizationDao.kt @@ -0,0 +1,12 @@ +package com.artemchep.keyguard.room.dao + +import androidx.room.Dao +import androidx.room.Query +import com.artemchep.keyguard.room.RoomBitwardenOrganization +import kotlinx.coroutines.flow.Flow + +@Dao +interface OrganizationDao { + @Query("SELECT * FROM RoomBitwardenOrganization") + fun getAll(): Flow> +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/room/dao/ProfileDao.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/room/dao/ProfileDao.kt new file mode 100644 index 00000000..541993c0 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/room/dao/ProfileDao.kt @@ -0,0 +1,12 @@ +package com.artemchep.keyguard.room.dao + +import androidx.room.Dao +import androidx.room.Query +import com.artemchep.keyguard.room.RoomBitwardenProfile +import kotlinx.coroutines.flow.Flow + +@Dao +interface ProfileDao { + @Query("SELECT * FROM RoomBitwardenProfile") + fun getAll(): Flow> +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/ui/Html.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/ui/Html.kt new file mode 100644 index 00000000..eee8ee96 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/ui/Html.kt @@ -0,0 +1,22 @@ +package com.artemchep.keyguard.ui + +import androidx.compose.material.MaterialTheme +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.text.SpanStyle +import androidx.compose.ui.text.style.TextDecoration + +@Composable +actual fun HtmlText( + modifier: Modifier, + html: String, +) { + de.charlex.compose.material3.HtmlText( + modifier = modifier, + urlSpanStyle = SpanStyle( + color = MaterialTheme.colors.primary, + textDecoration = TextDecoration.Underline, + ), + text = html, + ) +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/ui/KeepScreenOnEffect.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/ui/KeepScreenOnEffect.kt new file mode 100644 index 00000000..7ca296dc --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/ui/KeepScreenOnEffect.kt @@ -0,0 +1,26 @@ +package com.artemchep.keyguard.ui + +import android.view.WindowManager +import androidx.compose.runtime.Composable +import androidx.compose.runtime.DisposableEffect +import androidx.compose.runtime.remember +import androidx.compose.ui.platform.LocalContext +import com.artemchep.keyguard.android.closestActivityOrNull + +@Composable +actual fun KeepScreenOnEffect() { + val context = LocalContext.current + val window = remember(context) { + val activity = context.closestActivityOrNull + activity?.window + } + + DisposableEffect(window) { + val windowFlag = WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON + window?.addFlags(windowFlag) + + onDispose { + window?.clearFlags(windowFlag) + } + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/ui/LeMOdelBottomSheet.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/ui/LeMOdelBottomSheet.kt new file mode 100644 index 00000000..fefebbb6 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/ui/LeMOdelBottomSheet.kt @@ -0,0 +1,56 @@ +package com.artemchep.keyguard.ui + +import android.content.res.Configuration +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.WindowInsetsSides +import androidx.compose.foundation.layout.asPaddingValues +import androidx.compose.foundation.layout.only +import androidx.compose.foundation.layout.systemBars +import androidx.compose.material3.ModalBottomSheet +import androidx.compose.material3.rememberModalBottomSheetState +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.LocalConfiguration +import androidx.compose.ui.unit.dp + +@Composable +actual fun LeMOdelBottomSheet( + visible: Boolean, + onDismissRequest: () -> Unit, + content: @Composable (PaddingValues) -> Unit, +) { + val isLandscape = run { + val configuration = LocalConfiguration.current + configuration.orientation == Configuration.ORIENTATION_LANDSCAPE + } + if (isLandscape) { + WunderPopup( + expanded = visible, + onDismissRequest = onDismissRequest, + modifier = Modifier, + ) { + val contentPadding = PaddingValues(0.dp) + content(contentPadding) + } + } else { + val bottomSheetState = rememberModalBottomSheetState( + skipPartiallyExpanded = false, + ) + if (visible) { + val contentInsets = WindowInsets.systemBars + .only(WindowInsetsSides.Bottom) + val contentPadding = contentInsets + .asPaddingValues() + ModalBottomSheet( + onDismissRequest = onDismissRequest, + sheetState = bottomSheetState, + windowInsets = WindowInsets.systemBars + .only(WindowInsetsSides.Top), + content = { + content(contentPadding) + }, + ) + } + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/ui/icons/AttachmentIconImpl.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/ui/icons/AttachmentIconImpl.kt new file mode 100644 index 00000000..242e4ab0 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/ui/icons/AttachmentIconImpl.kt @@ -0,0 +1,32 @@ +package com.artemchep.keyguard.ui.icons + +import androidx.compose.material.icons.Icons +import androidx.compose.material3.LocalContentColor +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.layout.ContentScale +import com.artemchep.keyguard.ui.rememberVectorPainterCustom +import com.skydoves.landscapist.ImageOptions +import com.skydoves.landscapist.components.rememberImageComponent +import com.skydoves.landscapist.glide.GlideImage +import com.skydoves.landscapist.placeholder.placeholder.PlaceholderPlugin + +@Composable +actual fun AttachmentIconImpl( + uri: String?, + modifier: Modifier, +) { + // We can display a preview of a file. + val fp = rememberVectorPainterCustom( + Icons.Outlined.KeyguardAttachment, + tintColor = LocalContentColor.current, + ) + GlideImage( + modifier = modifier, + imageModel = { uri }, + imageOptions = ImageOptions(contentScale = ContentScale.Crop), + component = rememberImageComponent { + +PlaceholderPlugin.Failure(fp) + }, + ) +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/ui/icons/EmailIcon.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/ui/icons/EmailIcon.kt new file mode 100644 index 00000000..1a8d9e32 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/ui/icons/EmailIcon.kt @@ -0,0 +1,56 @@ +package com.artemchep.keyguard.ui.icons + +import androidx.compose.material.Icon +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Email +import androidx.compose.material3.LocalAbsoluteTonalElevation +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.surfaceColorAtElevation +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.compositeOver +import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.feature.favicon.GravatarUrl +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.theme.combineAlpha +import com.skydoves.landscapist.ImageOptions +import com.skydoves.landscapist.components.rememberImageComponent +import com.skydoves.landscapist.glide.GlideImage +import com.skydoves.landscapist.placeholder.shimmer.ShimmerPlugin + +@Composable +actual fun EmailIcon( + modifier: Modifier, + gravatarUrl: GravatarUrl?, +) { + val surfaceColor = MaterialTheme.colorScheme + .surfaceColorAtElevation(LocalAbsoluteTonalElevation.current + 16.dp) + val contentColor = LocalContentColor.current + val highlightColor = contentColor + .combineAlpha(MediumEmphasisAlpha) + .compositeOver(surfaceColor) + GlideImage( + modifier = modifier, + imageModel = { gravatarUrl }, + imageOptions = ImageOptions(contentScale = ContentScale.Crop), + component = rememberImageComponent { + // Shows a shimmering effect when loading an image + +ShimmerPlugin( + baseColor = surfaceColor, + highlightColor = highlightColor, + ) + }, + failure = { + Icon( + modifier = Modifier + .align(Alignment.Center), + imageVector = Icons.Outlined.Email, + contentDescription = null, + tint = contentColor, + ) + }, + ) +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/ui/rightClickable.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/ui/rightClickable.kt new file mode 100644 index 00000000..13f72932 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/ui/rightClickable.kt @@ -0,0 +1,9 @@ +package com.artemchep.keyguard.ui + +import androidx.compose.ui.ExperimentalComposeUiApi +import androidx.compose.ui.Modifier + +@OptIn(ExperimentalComposeUiApi::class) +actual fun Modifier.rightClickable( + onClick: (() -> Unit)?, +) = this diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/ui/shimmer/rememberShimmerBoundsWindow.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/ui/shimmer/rememberShimmerBoundsWindow.kt new file mode 100644 index 00000000..e24cfd92 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/ui/shimmer/rememberShimmerBoundsWindow.kt @@ -0,0 +1,19 @@ +package com.artemchep.keyguard.ui.shimmer + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import androidx.compose.ui.geometry.Rect +import androidx.compose.ui.platform.LocalContext + +@Composable +actual fun rememberShimmerBoundsWindow(): Rect { + val displayMetrics = LocalContext.current.resources.displayMetrics + return remember(displayMetrics) { + Rect( + 0f, + 0f, + displayMetrics.widthPixels.toFloat(), + displayMetrics.heightPixels.toFloat(), + ) + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/ui/theme/Theme.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/ui/theme/Theme.kt new file mode 100644 index 00000000..558a9e59 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/ui/theme/Theme.kt @@ -0,0 +1,48 @@ +@file:JvmName("PlatformTheme") + +package com.artemchep.keyguard.ui.theme + +import android.os.Build +import androidx.compose.material3.ColorScheme +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.darkColorScheme +import androidx.compose.material3.dynamicDarkColorScheme +import androidx.compose.material3.dynamicLightColorScheme +import androidx.compose.material3.lightColorScheme +import androidx.compose.runtime.Composable +import androidx.compose.runtime.SideEffect +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.platform.LocalContext +import com.google.accompanist.systemuicontroller.rememberSystemUiController + +@Composable +actual fun appDynamicDarkColorScheme(): ColorScheme = + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + val context = LocalContext.current + dynamicDarkColorScheme(context) + } else { + // Use whatever default Google has to offer. + darkColorScheme() + } + +@Composable +actual fun appDynamicLightColorScheme(): ColorScheme = + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + val context = LocalContext.current + dynamicLightColorScheme(context) + } else { + // Use whatever default Google has to offer. + lightColorScheme() + } + +@Composable +actual fun SystemUiThemeEffect() { + val systemUiController = rememberSystemUiController() + val useDarkIcons = !MaterialTheme.colorScheme.isDark + SideEffect { + systemUiController.setSystemBarsColor( + color = Color.Transparent, + darkIcons = useDarkIcons, + ) + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/uploader/UploadAttachmentManager.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/uploader/UploadAttachmentManager.kt new file mode 100644 index 00000000..b26428d2 --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/uploader/UploadAttachmentManager.kt @@ -0,0 +1,33 @@ +package com.artemchep.keyguard.android.uploader + +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.SupervisorJob +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.launch +import kotlinx.coroutines.plus +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class UploadAttachmentManager( + private val uploadAttachmentRepository: UploadAttachmentRepository, +) { + constructor( + directDI: DirectDI, + ) : this( + uploadAttachmentRepository = directDI.instance(), + ) + + private val scope = GlobalScope + SupervisorJob() + + init { + scope.launch { + uploadAttachmentRepository + .getAll() + .map { requests -> + } + } + } + + private fun UploadAttachmentRequest.Attachment.handle() { + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/uploader/UploadAttachmentRepository.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/uploader/UploadAttachmentRepository.kt new file mode 100644 index 00000000..45e2780c --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/uploader/UploadAttachmentRepository.kt @@ -0,0 +1,12 @@ +package com.artemchep.keyguard.android.uploader + +import kotlinx.collections.immutable.ImmutableList +import kotlinx.coroutines.flow.Flow + +interface UploadAttachmentRepository { + suspend fun add(request: UploadAttachmentRequest) + + suspend fun remove(requestId: String) + + fun getAll(): Flow> +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/uploader/UploadAttachmentRepositoryInMemory.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/uploader/UploadAttachmentRepositoryInMemory.kt new file mode 100644 index 00000000..d2c3388f --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/uploader/UploadAttachmentRepositoryInMemory.kt @@ -0,0 +1,48 @@ +package com.artemchep.keyguard.android.uploader + +import kotlinx.collections.immutable.ImmutableList +import kotlinx.collections.immutable.PersistentMap +import kotlinx.collections.immutable.persistentMapOf +import kotlinx.collections.immutable.toImmutableList +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.update +import kotlinx.coroutines.sync.Mutex +import kotlinx.coroutines.sync.withLock +import org.kodein.di.DirectDI + +private typealias State = PersistentMap + +class UploadAttachmentRepositoryInMemory() : UploadAttachmentRepository { + private val mutex = Mutex() + + private val sink: MutableStateFlow = MutableStateFlow(persistentMapOf()) + + constructor( + directDI: DirectDI, + ) : this() + + override suspend fun add( + request: UploadAttachmentRequest, + ) = modify { state -> + state.put(request.requestId, request) + } + + override suspend fun remove( + requestId: String, + ) = modify { state -> + state.remove(requestId) + } + + private suspend fun modify( + block: (State) -> State, + ) = mutex.withLock { + sink.update(block) + } + + override fun getAll(): Flow> = sink + .map { state -> + state.values.toImmutableList() + } +} diff --git a/common/src/androidMain/kotlin/com/artemchep/keyguard/uploader/UploadAttachmentRequest.kt b/common/src/androidMain/kotlin/com/artemchep/keyguard/uploader/UploadAttachmentRequest.kt new file mode 100644 index 00000000..0fa3bcab --- /dev/null +++ b/common/src/androidMain/kotlin/com/artemchep/keyguard/uploader/UploadAttachmentRequest.kt @@ -0,0 +1,34 @@ +package com.artemchep.keyguard.android.uploader + +import kotlinx.datetime.Instant +import kotlinx.serialization.Serializable + +@Serializable +data class UploadAttachmentRequest( + val requestId: String, + /** A cipher we want to append this attachment to */ + val cipherId: String, + val createdDate: Instant, + val revisionDate: Instant, + val attachment: Attachment, +) { + @Serializable + data class Attachment( + val name: String, + val ref: Ref, + ) { + @Serializable + sealed interface Ref { + @Serializable + data class FromFile( + val path: String, + ) : Ref + + @Serializable + data class FromAttachment( + val cipherId: String, + val attachmentId: String, + ) : Ref + } + } +} diff --git a/common/src/androidMain/kotlin/db_key_value/crypto_prefs/SecurePrefKeyValueStore.kt b/common/src/androidMain/kotlin/db_key_value/crypto_prefs/SecurePrefKeyValueStore.kt new file mode 100644 index 00000000..19f16789 --- /dev/null +++ b/common/src/androidMain/kotlin/db_key_value/crypto_prefs/SecurePrefKeyValueStore.kt @@ -0,0 +1,138 @@ +package db_key_value.crypto_prefs + +import android.annotation.SuppressLint +import android.content.Context +import androidx.security.crypto.EncryptedSharedPreferences +import androidx.security.crypto.MasterKey +import com.artemchep.keyguard.common.service.keyvalue.KeyValueStore +import com.artemchep.keyguard.common.service.keyvalue.SecureKeyValueStore +import com.artemchep.keyguard.platform.recordLog +import db_key_value.shared_prefs.SharedPrefsKeyValueStore +import java.io.IOException +import java.security.GeneralSecurityException +import java.security.KeyStore + +class SecurePrefKeyValueStore( + context: Context, + file: String, +) : SecureKeyValueStore, + KeyValueStore by SharedPrefsKeyValueStore( + createPrefs = { + getEncryptedSharedPrefsOrRecreate( + context = context, + file = file, + ) + }, + ) + +@SuppressLint("ApplySharedPref") +private fun getEncryptedSharedPrefsOrRecreate( + context: Context, + file: String, +) = run { + lateinit var exception: Throwable + + val retryCount = 3 + for (i in 0 until retryCount) { + try { + return@run getEncryptedSharedPrefs(context, file) + } catch (e: Exception) { + if ( + e is IOException || + e is GeneralSecurityException || + // For some reason once in a while I get a device that + // crashes here. Maybe for some the exception is not the + // default one. + "KeyStore" in e.message.orEmpty() + ) { + exception = e + clearSharedPreferences( + context = context, + file = file, + ) + clearKeystore(alias = file) + } else { + recordLog("Failed to read the shared preferences!") + throw e + } + } + } + + throw exception +} + +@Synchronized +private fun getEncryptedSharedPrefs( + context: Context, + file: String, +) = run { + val masterKeyAlias = getMasterKeyAlias( + context = context, + alias = file, + onError = { + clearSharedPreferences( + context = context, + file = file, + ) + clearKeystore(alias = file) + }, + ) + EncryptedSharedPreferences.create( + context, + file, + masterKeyAlias, + EncryptedSharedPreferences.PrefKeyEncryptionScheme.AES256_SIV, + EncryptedSharedPreferences.PrefValueEncryptionScheme.AES256_GCM, + ) +} + +@Synchronized +private fun getMasterKeyAlias( + context: Context, + alias: String, + onError: () -> Unit, +): MasterKey { + lateinit var exception: Throwable + + val retryCount = 3 + for (i in 0 until retryCount) { + try { + return MasterKey.Builder(context, alias) + .setKeyScheme(MasterKey.KeyScheme.AES256_GCM) + .setRequestStrongBoxBacked(true) + .setUserAuthenticationRequired(false) + .build() + } catch (e: Exception) { + if (e is GeneralSecurityException) { + exception = e + onError() + } else { + throw e + } + } + } + + throw exception +} + +@SuppressLint("ApplySharedPref") +private fun clearSharedPreferences( + context: Context, + file: String, +) { + // Clear the shared preferences + context.getSharedPreferences(file, Context.MODE_PRIVATE) + .edit() + .clear() + .commit() +} + +private fun clearKeystore( + alias: String, +) { + // clear the master key + // https://issuetracker.google.com/issues/176215143 + val keyStore = KeyStore.getInstance("AndroidKeyStore") + keyStore.load(null) + keyStore.deleteEntry(alias) +} diff --git a/common/src/androidMain/kotlin/db_key_value/shared_prefs/SharedPrefsKeyValuePreference.kt b/common/src/androidMain/kotlin/db_key_value/shared_prefs/SharedPrefsKeyValuePreference.kt new file mode 100644 index 00000000..426ad51c --- /dev/null +++ b/common/src/androidMain/kotlin/db_key_value/shared_prefs/SharedPrefsKeyValuePreference.kt @@ -0,0 +1,54 @@ +package db_key_value.shared_prefs + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.service.keyvalue.KeyValuePreference +import com.fredporciuncula.flow.preferences.Preference +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.FlowCollector +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.flow +import kotlinx.coroutines.sync.Mutex +import kotlinx.coroutines.sync.withLock +import kotlinx.coroutines.withContext + +class SharedPrefsKeyValuePreference( + private val prefFactory: suspend () -> Preference, +) : KeyValuePreference { + private var pref: Preference? = null + + private val prefMutex = Mutex() + + private suspend fun getPref(): Preference = + pref ?: prefMutex.withLock { + pref ?: prefFactory().also { pref = it } + } + + override fun setAndCommit(value: T): IO = ioEffect(Dispatchers.IO) { + getPref().setAndCommit(value) + } + + override fun deleteAndCommit(): IO = ioEffect(Dispatchers.IO) { + getPref().deleteAndCommit() + } + + override suspend fun collect(collector: FlowCollector) { + flowOfPref() + .distinctUntilChanged() + .collect(collector) + } + + private fun flowOfPref() = + pref?.asFlow() + // The version that calls delegate on the + // IO dispatcher. + ?: flow { + withContext(Dispatchers.IO) { + getPref() + } + .asFlow() + .collect { + emit(it) + } + } +} diff --git a/common/src/androidMain/kotlin/db_key_value/shared_prefs/SharedPrefsKeyValueStore.kt b/common/src/androidMain/kotlin/db_key_value/shared_prefs/SharedPrefsKeyValueStore.kt new file mode 100644 index 00000000..79b92c19 --- /dev/null +++ b/common/src/androidMain/kotlin/db_key_value/shared_prefs/SharedPrefsKeyValueStore.kt @@ -0,0 +1,69 @@ +package db_key_value.shared_prefs + +import android.content.Context +import android.content.SharedPreferences +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.map +import com.artemchep.keyguard.common.service.keyvalue.KeyValuePreference +import com.artemchep.keyguard.common.service.keyvalue.KeyValueStore +import com.fredporciuncula.flow.preferences.FlowSharedPreferences +import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.sync.Mutex +import kotlinx.coroutines.sync.withLock + +@OptIn(ExperimentalCoroutinesApi::class) +class SharedPrefsKeyValueStore( + private val createPrefs: suspend () -> SharedPreferences, +) : KeyValueStore { + constructor ( + context: Context, + file: String, + ) : this( + createPrefs = { + context.applicationContext.getSharedPreferences(file, Context.MODE_PRIVATE) + }, + ) + + private var flowPrefs: FlowSharedPreferences? = null + + private val flowPrefsMutex = Mutex() + + private suspend fun getFlowPrefs(): FlowSharedPreferences = + flowPrefs ?: flowPrefsMutex.withLock { + flowPrefs + // create a new instance of the preferences + ?: FlowSharedPreferences(createPrefs()).also { flowPrefs = it } + } + + override fun getAll(): IO> = { + getFlowPrefs().sharedPreferences.all + } + + override fun getKeys(): IO> = getAll() + .map { it.keys } + + override fun getInt(key: String, defaultValue: Int): KeyValuePreference = + SharedPrefsKeyValuePreference { + getFlowPrefs().getInt(key, defaultValue) + } + + override fun getFloat(key: String, defaultValue: Float): KeyValuePreference = + SharedPrefsKeyValuePreference { + getFlowPrefs().getFloat(key, defaultValue) + } + + override fun getBoolean(key: String, defaultValue: Boolean): KeyValuePreference = + SharedPrefsKeyValuePreference { + getFlowPrefs().getBoolean(key, defaultValue) + } + + override fun getLong(key: String, defaultValue: Long): KeyValuePreference = + SharedPrefsKeyValuePreference { + getFlowPrefs().getLong(key, defaultValue) + } + + override fun getString(key: String, defaultValue: String): KeyValuePreference = + SharedPrefsKeyValuePreference { + getFlowPrefs().getString(key, defaultValue) + } +} diff --git a/common/src/androidMain/res/drawable/ic_apps.xml b/common/src/androidMain/res/drawable/ic_apps.xml new file mode 100644 index 00000000..5dadac3a --- /dev/null +++ b/common/src/androidMain/res/drawable/ic_apps.xml @@ -0,0 +1,10 @@ + + + + \ No newline at end of file diff --git a/common/src/androidMain/res/drawable/ic_cancel.xml b/common/src/androidMain/res/drawable/ic_cancel.xml new file mode 100644 index 00000000..9a3cc8ee --- /dev/null +++ b/common/src/androidMain/res/drawable/ic_cancel.xml @@ -0,0 +1,9 @@ + + + diff --git a/common/src/androidMain/res/drawable/ic_copy.xml b/common/src/androidMain/res/drawable/ic_copy.xml new file mode 100644 index 00000000..5544073a --- /dev/null +++ b/common/src/androidMain/res/drawable/ic_copy.xml @@ -0,0 +1,9 @@ + + + diff --git a/common/src/androidMain/res/drawable/ic_download.xml b/common/src/androidMain/res/drawable/ic_download.xml new file mode 100644 index 00000000..6dff20c0 --- /dev/null +++ b/common/src/androidMain/res/drawable/ic_download.xml @@ -0,0 +1,9 @@ + + + diff --git a/common/src/androidMain/res/drawable/ic_launcher_background.xml b/common/src/androidMain/res/drawable/ic_launcher_background.xml new file mode 100644 index 00000000..04b8f8b3 --- /dev/null +++ b/common/src/androidMain/res/drawable/ic_launcher_background.xml @@ -0,0 +1,3 @@ + + + diff --git a/common/src/androidMain/res/drawable/ic_launcher_foreground.xml b/common/src/androidMain/res/drawable/ic_launcher_foreground.xml new file mode 100644 index 00000000..95f20348 --- /dev/null +++ b/common/src/androidMain/res/drawable/ic_launcher_foreground.xml @@ -0,0 +1,38 @@ + + + + + + + + + diff --git a/common/src/androidMain/res/drawable/ic_launcher_monochrome.xml b/common/src/androidMain/res/drawable/ic_launcher_monochrome.xml new file mode 100644 index 00000000..6a6bca8f --- /dev/null +++ b/common/src/androidMain/res/drawable/ic_launcher_monochrome.xml @@ -0,0 +1,18 @@ + + + + diff --git a/common/src/androidMain/res/drawable/ic_lock_open_outline.xml b/common/src/androidMain/res/drawable/ic_lock_open_outline.xml new file mode 100644 index 00000000..11b0736c --- /dev/null +++ b/common/src/androidMain/res/drawable/ic_lock_open_outline.xml @@ -0,0 +1,10 @@ + + + + \ No newline at end of file diff --git a/common/src/androidMain/res/drawable/ic_lock_outline.xml b/common/src/androidMain/res/drawable/ic_lock_outline.xml new file mode 100644 index 00000000..82e002d1 --- /dev/null +++ b/common/src/androidMain/res/drawable/ic_lock_outline.xml @@ -0,0 +1,10 @@ + + + + \ No newline at end of file diff --git a/common/src/androidMain/res/drawable/ic_login.xml b/common/src/androidMain/res/drawable/ic_login.xml new file mode 100644 index 00000000..01fa78a3 --- /dev/null +++ b/common/src/androidMain/res/drawable/ic_login.xml @@ -0,0 +1,9 @@ + + + diff --git a/common/src/androidMain/res/drawable/ic_logo_bitwarden.png b/common/src/androidMain/res/drawable/ic_logo_bitwarden.png new file mode 100644 index 00000000..7fb0a2a7 Binary files /dev/null and b/common/src/androidMain/res/drawable/ic_logo_bitwarden.png differ diff --git a/common/src/androidMain/res/drawable/ic_number_0.xml b/common/src/androidMain/res/drawable/ic_number_0.xml new file mode 100644 index 00000000..79eb773a --- /dev/null +++ b/common/src/androidMain/res/drawable/ic_number_0.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/common/src/androidMain/res/drawable/ic_number_1.xml b/common/src/androidMain/res/drawable/ic_number_1.xml new file mode 100644 index 00000000..91a44346 --- /dev/null +++ b/common/src/androidMain/res/drawable/ic_number_1.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/common/src/androidMain/res/drawable/ic_number_2.xml b/common/src/androidMain/res/drawable/ic_number_2.xml new file mode 100644 index 00000000..523b12bb --- /dev/null +++ b/common/src/androidMain/res/drawable/ic_number_2.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/common/src/androidMain/res/drawable/ic_number_3.xml b/common/src/androidMain/res/drawable/ic_number_3.xml new file mode 100644 index 00000000..b59c2d73 --- /dev/null +++ b/common/src/androidMain/res/drawable/ic_number_3.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/common/src/androidMain/res/drawable/ic_number_4.xml b/common/src/androidMain/res/drawable/ic_number_4.xml new file mode 100644 index 00000000..94454c17 --- /dev/null +++ b/common/src/androidMain/res/drawable/ic_number_4.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/common/src/androidMain/res/drawable/ic_number_5.xml b/common/src/androidMain/res/drawable/ic_number_5.xml new file mode 100644 index 00000000..d28d290c --- /dev/null +++ b/common/src/androidMain/res/drawable/ic_number_5.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/common/src/androidMain/res/drawable/ic_number_6.xml b/common/src/androidMain/res/drawable/ic_number_6.xml new file mode 100644 index 00000000..06a4d76a --- /dev/null +++ b/common/src/androidMain/res/drawable/ic_number_6.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/common/src/androidMain/res/drawable/ic_number_7.xml b/common/src/androidMain/res/drawable/ic_number_7.xml new file mode 100644 index 00000000..c996e693 --- /dev/null +++ b/common/src/androidMain/res/drawable/ic_number_7.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/common/src/androidMain/res/drawable/ic_number_8.xml b/common/src/androidMain/res/drawable/ic_number_8.xml new file mode 100644 index 00000000..28fa35e6 --- /dev/null +++ b/common/src/androidMain/res/drawable/ic_number_8.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/common/src/androidMain/res/drawable/ic_number_9.xml b/common/src/androidMain/res/drawable/ic_number_9.xml new file mode 100644 index 00000000..280d5ca6 --- /dev/null +++ b/common/src/androidMain/res/drawable/ic_number_9.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/common/src/androidMain/res/drawable/ic_number_9_plus.xml b/common/src/androidMain/res/drawable/ic_number_9_plus.xml new file mode 100644 index 00000000..cb47e3d5 --- /dev/null +++ b/common/src/androidMain/res/drawable/ic_number_9_plus.xml @@ -0,0 +1,9 @@ + + + \ No newline at end of file diff --git a/common/src/androidMain/res/drawable/ic_shortcut_2fa.xml b/common/src/androidMain/res/drawable/ic_shortcut_2fa.xml new file mode 100644 index 00000000..5601d12d --- /dev/null +++ b/common/src/androidMain/res/drawable/ic_shortcut_2fa.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + diff --git a/common/src/androidMain/res/drawable/ic_splash.xml b/common/src/androidMain/res/drawable/ic_splash.xml new file mode 100644 index 00000000..424fa203 --- /dev/null +++ b/common/src/androidMain/res/drawable/ic_splash.xml @@ -0,0 +1,4 @@ + + + + diff --git a/common/src/androidMain/res/drawable/ic_sync.xml b/common/src/androidMain/res/drawable/ic_sync.xml new file mode 100644 index 00000000..5fe0f1bb --- /dev/null +++ b/common/src/androidMain/res/drawable/ic_sync.xml @@ -0,0 +1,10 @@ + + + + diff --git a/common/src/androidMain/res/drawable/ic_tag.xml b/common/src/androidMain/res/drawable/ic_tag.xml new file mode 100644 index 00000000..7f7c27d2 --- /dev/null +++ b/common/src/androidMain/res/drawable/ic_tag.xml @@ -0,0 +1,10 @@ + + + + \ No newline at end of file diff --git a/common/src/androidMain/res/drawable/ic_tfa.xml b/common/src/androidMain/res/drawable/ic_tfa.xml new file mode 100644 index 00000000..fed2894b --- /dev/null +++ b/common/src/androidMain/res/drawable/ic_tfa.xml @@ -0,0 +1,9 @@ + + + diff --git a/common/src/androidMain/res/drawable/ic_upload.xml b/common/src/androidMain/res/drawable/ic_upload.xml new file mode 100644 index 00000000..4c908388 --- /dev/null +++ b/common/src/androidMain/res/drawable/ic_upload.xml @@ -0,0 +1,9 @@ + + + diff --git a/common/src/androidMain/res/drawable/ic_web.xml b/common/src/androidMain/res/drawable/ic_web.xml new file mode 100644 index 00000000..4ddb3590 --- /dev/null +++ b/common/src/androidMain/res/drawable/ic_web.xml @@ -0,0 +1,10 @@ + + + + \ No newline at end of file diff --git a/common/src/androidMain/res/layout/activity_webview.xml b/common/src/androidMain/res/layout/activity_webview.xml new file mode 100644 index 00000000..e94feb1a --- /dev/null +++ b/common/src/androidMain/res/layout/activity_webview.xml @@ -0,0 +1,11 @@ + + + + + \ No newline at end of file diff --git a/common/src/androidMain/res/layout/item_autofill.xml b/common/src/androidMain/res/layout/item_autofill.xml new file mode 100644 index 00000000..70a5950f --- /dev/null +++ b/common/src/androidMain/res/layout/item_autofill.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + diff --git a/common/src/androidMain/res/layout/item_autofill_app_id.xml b/common/src/androidMain/res/layout/item_autofill_app_id.xml new file mode 100644 index 00000000..e8154611 --- /dev/null +++ b/common/src/androidMain/res/layout/item_autofill_app_id.xml @@ -0,0 +1,35 @@ + + + + + + + \ No newline at end of file diff --git a/common/src/androidMain/res/layout/item_autofill_entry.xml b/common/src/androidMain/res/layout/item_autofill_entry.xml new file mode 100644 index 00000000..46ea0788 --- /dev/null +++ b/common/src/androidMain/res/layout/item_autofill_entry.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/common/src/androidMain/res/layout/item_autofill_select_entry.xml b/common/src/androidMain/res/layout/item_autofill_select_entry.xml new file mode 100644 index 00000000..b885eec4 --- /dev/null +++ b/common/src/androidMain/res/layout/item_autofill_select_entry.xml @@ -0,0 +1,29 @@ + + + + + + + \ No newline at end of file diff --git a/common/src/androidMain/res/layout/item_autofill_select_entry_app_id.xml b/common/src/androidMain/res/layout/item_autofill_select_entry_app_id.xml new file mode 100644 index 00000000..804763dd --- /dev/null +++ b/common/src/androidMain/res/layout/item_autofill_select_entry_app_id.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/common/src/androidMain/res/layout/item_autofill_select_entry_web_domain.xml b/common/src/androidMain/res/layout/item_autofill_select_entry_web_domain.xml new file mode 100644 index 00000000..9e800e61 --- /dev/null +++ b/common/src/androidMain/res/layout/item_autofill_select_entry_web_domain.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/common/src/androidMain/res/layout/item_autofill_unlock.xml b/common/src/androidMain/res/layout/item_autofill_unlock.xml new file mode 100644 index 00000000..dc8c9769 --- /dev/null +++ b/common/src/androidMain/res/layout/item_autofill_unlock.xml @@ -0,0 +1,29 @@ + + + + + + + \ No newline at end of file diff --git a/common/src/androidMain/res/layout/item_autofill_unlock_app_id.xml b/common/src/androidMain/res/layout/item_autofill_unlock_app_id.xml new file mode 100644 index 00000000..7840ded0 --- /dev/null +++ b/common/src/androidMain/res/layout/item_autofill_unlock_app_id.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/common/src/androidMain/res/layout/item_autofill_unlock_web_domain.xml b/common/src/androidMain/res/layout/item_autofill_unlock_web_domain.xml new file mode 100644 index 00000000..478cabe0 --- /dev/null +++ b/common/src/androidMain/res/layout/item_autofill_unlock_web_domain.xml @@ -0,0 +1,10 @@ + + + + + + + \ No newline at end of file diff --git a/common/src/androidMain/res/layout/item_autofill_web_domain.xml b/common/src/androidMain/res/layout/item_autofill_web_domain.xml new file mode 100644 index 00000000..46e25e10 --- /dev/null +++ b/common/src/androidMain/res/layout/item_autofill_web_domain.xml @@ -0,0 +1,35 @@ + + + + + + + \ No newline at end of file diff --git a/common/src/androidMain/res/mipmap-anydpi-v26/ic_launcher.xml b/common/src/androidMain/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 00000000..8fde4563 --- /dev/null +++ b/common/src/androidMain/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/common/src/androidMain/res/mipmap-hdpi/ic_launcher.png b/common/src/androidMain/res/mipmap-hdpi/ic_launcher.png new file mode 100644 index 00000000..61700e24 Binary files /dev/null and b/common/src/androidMain/res/mipmap-hdpi/ic_launcher.png differ diff --git a/common/src/androidMain/res/mipmap-mdpi/ic_launcher.png b/common/src/androidMain/res/mipmap-mdpi/ic_launcher.png new file mode 100644 index 00000000..1c68e800 Binary files /dev/null and b/common/src/androidMain/res/mipmap-mdpi/ic_launcher.png differ diff --git a/common/src/androidMain/res/mipmap-xhdpi/ic_launcher.png b/common/src/androidMain/res/mipmap-xhdpi/ic_launcher.png new file mode 100644 index 00000000..8f23a2b5 Binary files /dev/null and b/common/src/androidMain/res/mipmap-xhdpi/ic_launcher.png differ diff --git a/common/src/androidMain/res/mipmap-xxhdpi/ic_launcher.png b/common/src/androidMain/res/mipmap-xxhdpi/ic_launcher.png new file mode 100644 index 00000000..6af08f8d Binary files /dev/null and b/common/src/androidMain/res/mipmap-xxhdpi/ic_launcher.png differ diff --git a/common/src/androidMain/res/mipmap-xxxhdpi/ic_launcher.png b/common/src/androidMain/res/mipmap-xxxhdpi/ic_launcher.png new file mode 100644 index 00000000..34d241de Binary files /dev/null and b/common/src/androidMain/res/mipmap-xxxhdpi/ic_launcher.png differ diff --git a/common/src/androidMain/res/raw/silence b/common/src/androidMain/res/raw/silence new file mode 100644 index 00000000..ec45eed4 Binary files /dev/null and b/common/src/androidMain/res/raw/silence differ diff --git a/common/src/androidMain/res/values-v31/colors.xml b/common/src/androidMain/res/values-v31/colors.xml new file mode 100644 index 00000000..70355507 --- /dev/null +++ b/common/src/androidMain/res/values-v31/colors.xml @@ -0,0 +1,8 @@ + + + @android:color/system_accent1_400 + @android:color/system_neutral1_900 + @android:color/system_accent1_100 + @android:color/system_accent2_50 + @android:color/system_accent2_50 + \ No newline at end of file diff --git a/common/src/androidMain/res/values/colors.xml b/common/src/androidMain/res/values/colors.xml new file mode 100644 index 00000000..e495e993 --- /dev/null +++ b/common/src/androidMain/res/values/colors.xml @@ -0,0 +1,22 @@ + + + #FF219BCC + #FF191C1E + #FFC1E8FF + #FFE0F3FF + #FFE0F3FF + + #FFBB86FC + #FF6200EE + #FF3700B3 + #FF03DAC5 + #FF018786 + #FF000000 + #FFFFFFFF + #43a047 + + + #333333 + #738182 + #efeff4 + \ No newline at end of file diff --git a/common/src/androidMain/res/values/ids.xml b/common/src/androidMain/res/values/ids.xml new file mode 100644 index 00000000..a4337b8f --- /dev/null +++ b/common/src/androidMain/res/values/ids.xml @@ -0,0 +1,5 @@ + + 1100 + 1200 + 1300 + \ No newline at end of file diff --git a/common/src/androidMain/res/values/integers.xml b/common/src/androidMain/res/values/integers.xml new file mode 100644 index 00000000..ab26ee61 --- /dev/null +++ b/common/src/androidMain/res/values/integers.xml @@ -0,0 +1,3 @@ + + 10000000000 + \ No newline at end of file diff --git a/common/src/androidMain/res/values/strings.xml b/common/src/androidMain/res/values/strings.xml new file mode 100644 index 00000000..0dfb9ae0 --- /dev/null +++ b/common/src/androidMain/res/values/strings.xml @@ -0,0 +1,27 @@ + + Keyguard + + com.artemchep.keyguard.UPLOAD_ATTACHMENTS + Uploading attachments + Uploading attachments + Uploading attachments + + com.artemchep.keyguard.DOWNLOAD_ATTACHMENTS + Download attachments + Downloading attachments + + com.artemchep.keyguard.CLIPBOARD + Clipboard + + com.artemchep.keyguard.SYNC_VAULT + Sync vault + Syncing vault + + About + Keyguard form autofilling + Unlock Keyguard + Enable autofilling to quickly fill out forms in other apps + Open Keyguard + Set default autofill service + Autofill settings + \ No newline at end of file diff --git a/common/src/androidMain/res/values/themes.xml b/common/src/androidMain/res/values/themes.xml new file mode 100644 index 00000000..8c5bb04a --- /dev/null +++ b/common/src/androidMain/res/values/themes.xml @@ -0,0 +1,15 @@ + + + + + + + \ No newline at end of file diff --git a/common/src/androidMain/res/xml/backup_data_extraction_rules.xml b/common/src/androidMain/res/xml/backup_data_extraction_rules.xml new file mode 100644 index 00000000..cc7fa1e6 --- /dev/null +++ b/common/src/androidMain/res/xml/backup_data_extraction_rules.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/common/src/androidMain/res/xml/backup_full_backup_content.xml b/common/src/androidMain/res/xml/backup_full_backup_content.xml new file mode 100644 index 00000000..80b98060 --- /dev/null +++ b/common/src/androidMain/res/xml/backup_full_backup_content.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/common/src/androidMain/res/xml/config_autofill_service.xml b/common/src/androidMain/res/xml/config_autofill_service.xml new file mode 100644 index 00000000..389579ba --- /dev/null +++ b/common/src/androidMain/res/xml/config_autofill_service.xml @@ -0,0 +1,235 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/common/src/androidMain/res/xml/config_credential_service.xml b/common/src/androidMain/res/xml/config_credential_service.xml new file mode 100644 index 00000000..13f432e3 --- /dev/null +++ b/common/src/androidMain/res/xml/config_credential_service.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/common/src/androidMain/res/xml/network_configuration.xml b/common/src/androidMain/res/xml/network_configuration.xml new file mode 100644 index 00000000..03fd745d --- /dev/null +++ b/common/src/androidMain/res/xml/network_configuration.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + bitwarden.com + bitwarden.eu + + + + + \ No newline at end of file diff --git a/common/src/androidMain/res/xml/provider_paths.xml b/common/src/androidMain/res/xml/provider_paths.xml new file mode 100644 index 00000000..c2271212 --- /dev/null +++ b/common/src/androidMain/res/xml/provider_paths.xml @@ -0,0 +1,6 @@ + + + + diff --git a/common/src/androidMain/res/xml/shortcuts.xml b/common/src/androidMain/res/xml/shortcuts.xml new file mode 100644 index 00000000..364daafb --- /dev/null +++ b/common/src/androidMain/res/xml/shortcuts.xml @@ -0,0 +1,20 @@ + + + + + + + + + diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/AppMode.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/AppMode.kt new file mode 100644 index 00000000..5c4e244d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/AppMode.kt @@ -0,0 +1,77 @@ +package com.artemchep.keyguard + +import arrow.optics.optics +import com.artemchep.keyguard.common.model.AutofillTarget +import com.artemchep.keyguard.common.model.DSecret +import com.artemchep.keyguard.common.model.GeneratorContext +import com.artemchep.keyguard.common.usecase.PasskeyTarget +import com.artemchep.keyguard.feature.home.vault.add.AddRoute + +@optics +sealed interface AppMode { + companion object; + + interface HasType { + val type: DSecret.Type? + } + + data object Main : AppMode + + @optics + data class Pick( + override val type: DSecret.Type? = null, + val args: AutofillActArgs, + val onAutofill: (DSecret) -> Unit, + ) : AppMode, HasType { + companion object + } + + @optics + data class Save( + override val type: DSecret.Type? = null, + val args: AutofillSaveActArgs, + val onAutofill: (DSecret) -> Unit, + ) : AppMode, HasType { + companion object + } + + @optics + data class PickPasskey( + val target: PasskeyTarget, + val onComplete: (DSecret.Login.Fido2Credentials) -> Unit, + ) : AppMode, HasType { + companion object; + + // When in the passkeys mode only allow + // a user to see and create logins. + override val type: DSecret.Type get() = DSecret.Type.Login + } + + @optics + data class SavePasskey( + val rpId: String?, + val onComplete: (DSecret) -> Unit, + ) : AppMode, HasType { + companion object; + + // When in the passkeys mode only allow + // a user to see and create logins. + override val type: DSecret.Type get() = DSecret.Type.Login + } +} + +expect fun AddRoute.Args.Autofill.Companion.leof( + source: AutofillActArgs, +): AddRoute.Args.Autofill + +expect fun AddRoute.Args.Autofill.Companion.leof( + source: AutofillSaveActArgs, +): AddRoute.Args.Autofill + +expect val AppMode.autofillTarget: AutofillTarget? + +expect val AppMode.generatorTarget: GeneratorContext + +expect class AutofillActArgs + +expect class AutofillSaveActArgs diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/LocalAppMode.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/LocalAppMode.kt new file mode 100644 index 00000000..fee7310f --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/LocalAppMode.kt @@ -0,0 +1,7 @@ +package com.artemchep.keyguard + +import androidx.compose.runtime.staticCompositionLocalOf + +val LocalAppMode = staticCompositionLocalOf { + AppMode.Main +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/android/downloader/journal/CipherHistoryOpenedRepository.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/android/downloader/journal/CipherHistoryOpenedRepository.kt new file mode 100644 index 00000000..3f79072d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/android/downloader/journal/CipherHistoryOpenedRepository.kt @@ -0,0 +1,22 @@ +package com.artemchep.keyguard.android.downloader.journal + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.DCipherOpenedHistory +import com.artemchep.keyguard.provider.bitwarden.repository.BaseRepository +import kotlinx.coroutines.flow.Flow +import kotlinx.datetime.Instant + +interface CipherHistoryOpenedRepository : BaseRepository { + fun getCount(): Flow + + fun getPopular(): Flow> + + fun getRecent(): Flow> + + fun getCredentialLastUsed( + cipherId: String, + credentialId: String, + ): Flow + + fun removeAll(): IO +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/android/downloader/journal/CipherHistoryOpenedRepositoryImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/android/downloader/journal/CipherHistoryOpenedRepositoryImpl.kt new file mode 100644 index 00000000..f198685e --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/android/downloader/journal/CipherHistoryOpenedRepositoryImpl.kt @@ -0,0 +1,113 @@ +package com.artemchep.keyguard.android.downloader.journal + +import app.cash.sqldelight.coroutines.asFlow +import app.cash.sqldelight.coroutines.mapToOne +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.effectMap +import com.artemchep.keyguard.common.model.DCipherOpenedHistory +import com.artemchep.keyguard.common.util.sqldelight.flatMapQueryToList +import com.artemchep.keyguard.core.store.DatabaseDispatcher +import com.artemchep.keyguard.core.store.DatabaseManager +import com.artemchep.keyguard.data.CipherUsageHistoryQueries +import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.asFlow +import kotlinx.coroutines.flow.flatMapLatest +import kotlinx.coroutines.flow.map +import kotlinx.datetime.Instant +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class CipherHistoryOpenedRepositoryImpl( + private val databaseManager: DatabaseManager, + private val dispatcher: CoroutineDispatcher, +) : CipherHistoryOpenedRepository { + constructor( + directDI: DirectDI, + ) : this( + databaseManager = directDI.instance(), + dispatcher = directDI.instance(tag = DatabaseDispatcher), + ) + + override fun getCount(): Flow = + daoEffect { dao -> + dao.getCount() + } + .asFlow() + .flatMapLatest { query -> + query + .asFlow() + .mapToOne(dispatcher) + } + + override fun get(): Flow> = getRecent() + + override fun getRecent(): Flow> = + daoEffect { dao -> + dao.getDistinctRecent(100) + } + .flatMapQueryToList(dispatcher) + .map { entities -> + entities + .mapNotNull { entity -> + val instant = entity.createdAt + // should never happen + ?: return@mapNotNull null + DCipherOpenedHistory( + cipherId = entity.cipherId, + instant = instant, + ) + } + } + + override fun getPopular(): Flow> = + daoEffect { dao -> + dao.getDistinctPopular(100) + } + .flatMapQueryToList(dispatcher) + .map { entities -> + entities + .map { entity -> + DCipherOpenedHistory( + cipherId = entity.cipherId, + instant = entity.createdAt, + ) + } + } + + override fun getCredentialLastUsed( + cipherId: String, + credentialId: String, + ): Flow = + daoEffect { dao -> + dao.getUsedPasskeyById( + cipherId = cipherId, + credentialId = credentialId, + limit = 1L, + ) + } + .flatMapQueryToList(dispatcher) + .map { entities -> + val entity = entities.firstOrNull() + entity?.createdAt + } + + override fun put(model: DCipherOpenedHistory): IO = + daoEffect { dao -> + TODO() + } + + override fun removeAll(): IO = + daoEffect { dao -> + dao.deleteAll() + } + + private inline fun daoEffect( + crossinline block: suspend (CipherUsageHistoryQueries) -> T, + ): IO = databaseManager + .get() + .effectMap(dispatcher) { db -> + val dao = db.cipherUsageHistoryQueries + block(dao) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/android/downloader/journal/DownloadRepository.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/android/downloader/journal/DownloadRepository.kt new file mode 100644 index 00000000..2d1a537a --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/android/downloader/journal/DownloadRepository.kt @@ -0,0 +1,28 @@ +package com.artemchep.keyguard.android.downloader.journal + +import com.artemchep.keyguard.android.downloader.journal.room.DownloadInfoEntity2 +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.provider.bitwarden.repository.BaseRepository +import kotlinx.coroutines.flow.Flow + +interface DownloadRepository : BaseRepository { + fun getById( + id: String, + ): IO + + fun getByIdFlow( + id: String, + ): Flow + + fun getByTag( + tag: DownloadInfoEntity2.AttachmentDownloadTag, + ): IO + + fun removeById( + id: String, + ): IO + + fun removeByTag( + tag: DownloadInfoEntity2.AttachmentDownloadTag, + ): IO +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/android/downloader/journal/GeneratorHistoryRepository.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/android/downloader/journal/GeneratorHistoryRepository.kt new file mode 100644 index 00000000..74e92a37 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/android/downloader/journal/GeneratorHistoryRepository.kt @@ -0,0 +1,13 @@ +package com.artemchep.keyguard.android.downloader.journal + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.DGeneratorHistory +import com.artemchep.keyguard.provider.bitwarden.repository.BaseRepository + +interface GeneratorHistoryRepository : BaseRepository { + fun removeAll(): IO + + fun removeByIds( + ids: Set, + ): IO +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/android/downloader/journal/GeneratorHistoryRepositoryImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/android/downloader/journal/GeneratorHistoryRepositoryImpl.kt new file mode 100644 index 00000000..8a68bf80 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/android/downloader/journal/GeneratorHistoryRepositoryImpl.kt @@ -0,0 +1,81 @@ +package com.artemchep.keyguard.android.downloader.journal + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.effectMap +import com.artemchep.keyguard.common.model.DGeneratorHistory +import com.artemchep.keyguard.common.util.sqldelight.flatMapQueryToList +import com.artemchep.keyguard.core.store.DatabaseDispatcher +import com.artemchep.keyguard.core.store.DatabaseManager +import com.artemchep.keyguard.data.GeneratorHistoryQueries +import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.map +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class GeneratorHistoryRepositoryImpl( + private val databaseManager: DatabaseManager, + private val dispatcher: CoroutineDispatcher, +) : GeneratorHistoryRepository { + constructor( + directDI: DirectDI, + ) : this( + databaseManager = directDI.instance(), + dispatcher = directDI.instance(tag = DatabaseDispatcher), + ) + + override fun get(): Flow> = + daoEffect { dao -> + dao.get(1000) + } + .flatMapQueryToList(dispatcher) + .map { entities -> + entities + .map { entity -> + DGeneratorHistory( + id = entity.id.toString(), + value = entity.value_, + createdDate = entity.createdAt, + isPassword = entity.isPassword, + isUsername = entity.isUsername, + isEmailRelay = entity.isEmailRelay == true, + ) + } + } + + override fun put(model: DGeneratorHistory): IO = + daoEffect { dao -> + dao.insert( + value_ = model.value, + createdAt = model.createdDate, + isPassword = model.isPassword, + isUsername = model.isUsername, + isEmailRelay = model.isEmailRelay, + ) + } + + override fun removeAll(): IO = + daoEffect { dao -> + dao.deleteAll() + } + + override fun removeByIds(ids: Set): IO = + daoEffect { dao -> + dao.transaction { + ids.forEach { + val id = it.toLongOrNull() + ?: return@forEach + dao.deleteByIds(id) + } + } + } + + private inline fun daoEffect( + crossinline block: suspend (GeneratorHistoryQueries) -> T, + ): IO = databaseManager + .get() + .effectMap(dispatcher) { db -> + val dao = db.generatorHistoryQueries + block(dao) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/android/downloader/journal/room/DownloadInfoEntity2.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/android/downloader/journal/room/DownloadInfoEntity2.kt new file mode 100644 index 00000000..7cd79a87 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/android/downloader/journal/room/DownloadInfoEntity2.kt @@ -0,0 +1,43 @@ +package com.artemchep.keyguard.android.downloader.journal.room + +import com.artemchep.keyguard.ui.canRetry +import kotlinx.datetime.Instant + +data class DownloadInfoEntity2( + val id: String, + val localCipherId: String, + val remoteCipherId: String?, + val attachmentId: String, + val url: String, + val urlIsOneTime: Boolean, + val name: String, + val hash: String? = null, + val createdDate: Instant, + val revisionDate: Instant = createdDate, + /** + * Encryption key used to decrypt the source + * url after downloading. + */ + val encryptionKeyBase64: String? = null, + /** + * Last downloading / decryption error, you can use it + * to find out if you can retry the downloading or if + * it should be done manually. + */ + val error: Error? = null, +) { + // must be data class + data class AttachmentDownloadTag( + val localCipherId: String, // to be able to find the right account for the item + val remoteCipherId: String?, + val attachmentId: String, + ) + + data class Error( + val code: Int, + val attempt: Int = 1, + val message: String? = null, + ) { + fun canRetry() = code.canRetry() && attempt <= 3 + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/AppWorker.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/AppWorker.kt new file mode 100644 index 00000000..24171326 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/AppWorker.kt @@ -0,0 +1,70 @@ +package com.artemchep.keyguard.common + +import com.artemchep.keyguard.common.model.MasterSession +import com.artemchep.keyguard.common.usecase.GetVaultSession +import com.artemchep.keyguard.platform.lifecycle.LeLifecycleState +import com.artemchep.keyguard.platform.lifecycle.onState +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Job +import kotlinx.coroutines.coroutineScope +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.collect +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.mapLatest +import kotlinx.coroutines.launch +import org.kodein.di.DirectDI +import org.kodein.di.direct +import org.kodein.di.instance + +class AppWorkerIm( + private val getVaultSession: GetVaultSession, +) : AppWorker { + constructor(directDI: DirectDI) : this( + getVaultSession = directDI.instance(), + ) + + override fun launch( + scope: CoroutineScope, + flow: Flow, + ): Job = scope.launch { + // The app should maintain the sync status + // while it is visible to a user. + flow + .onState(LeLifecycleState.STARTED) { + launchSyncManagerWhenAvailable(this) + } + .collect() + } + + private fun launchSyncManagerWhenAvailable(scope: CoroutineScope) = getVaultSession() + .map { session -> + val key = session as? MasterSession.Key + key?.di?.direct?.instance() + } + .distinctUntilChanged { old, new -> old === new } + .mapLatest { syncManager -> + if (syncManager == null) { + return@mapLatest + } + + // Launch the sync manager forever until the + // sync manager changes. + coroutineScope { + syncManager.launch(this) + } + } + .launchIn(scope) +} + +interface AppWorker { + enum class Feature { + SYNC, + } + + fun launch( + scope: CoroutineScope, + flow: Flow, + ): Job +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/NotificationsWorker.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/NotificationsWorker.kt new file mode 100644 index 00000000..5b266048 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/NotificationsWorker.kt @@ -0,0 +1,8 @@ +package com.artemchep.keyguard.common + +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Job + +interface NotificationsWorker { + fun launch(scope: CoroutineScope): Job +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/exception/ApiException.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/exception/ApiException.kt new file mode 100644 index 00000000..eeee7028 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/exception/ApiException.kt @@ -0,0 +1,22 @@ +package com.artemchep.keyguard.common.exception + +import com.artemchep.keyguard.provider.bitwarden.model.TwoFactorProviderArgument +import io.ktor.http.HttpStatusCode + +class ApiException( + val exception: Exception, + val code: HttpStatusCode, + val error: String, + val type: Type?, + message: String?, +) : HttpException(code, message, exception) { + sealed interface Type { + data class CaptchaRequired( + val siteKey: String, + ) : Type + + data class TwoFaRequired( + val providers: List, + ) : Type + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/exception/DecodeException.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/exception/DecodeException.kt new file mode 100644 index 00000000..48d94701 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/exception/DecodeException.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.exception + +class DecodeException( + message: String, + exception: Throwable, +) : RuntimeException(message, exception) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/exception/HttpException.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/exception/HttpException.kt new file mode 100644 index 00000000..d8589aca --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/exception/HttpException.kt @@ -0,0 +1,9 @@ +package com.artemchep.keyguard.common.exception + +import io.ktor.http.HttpStatusCode + +open class HttpException( + val statusCode: HttpStatusCode, + m: String?, + e: Throwable?, +) : Exception(m, e) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/exception/PasswordMismatchException.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/exception/PasswordMismatchException.kt new file mode 100644 index 00000000..7e38c958 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/exception/PasswordMismatchException.kt @@ -0,0 +1,13 @@ +package com.artemchep.keyguard.common.exception + +import com.artemchep.keyguard.common.model.NoAnalytics +import com.artemchep.keyguard.res.Res +import dev.icerock.moko.resources.StringResource + +class PasswordMismatchException( +) : RuntimeException("Invalid password"), + Readable, + NoAnalytics { + override val title: StringResource + get() = Res.strings.error_incorrect_password +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/exception/PremiumException.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/exception/PremiumException.kt new file mode 100644 index 00000000..8dc3e2f4 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/exception/PremiumException.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.exception + +import com.artemchep.keyguard.common.model.NoAnalytics + +class PremiumException : RuntimeException("The call requires Premium subscription."), NoAnalytics diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/exception/Readable.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/exception/Readable.kt new file mode 100644 index 00000000..0ed24aed --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/exception/Readable.kt @@ -0,0 +1,7 @@ +package com.artemchep.keyguard.common.exception + +import dev.icerock.moko.resources.StringResource + +interface Readable { + val title: StringResource +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/exception/SyncException.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/exception/SyncException.kt new file mode 100644 index 00000000..e89c7e0e --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/exception/SyncException.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.exception + +data class SyncException( + val a: Int, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/io/IO.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/io/IO.kt new file mode 100644 index 00000000..a2174842 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/io/IO.kt @@ -0,0 +1,11 @@ +package com.artemchep.keyguard.common.io + +import arrow.core.partially1 + +typealias IO = suspend () -> T + +fun (suspend (A) -> T).lift(block: (IO) -> IO): suspend (A) -> R = { + partially1(it) + .let(block) + .bind() +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/io/IOApplicative.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/io/IOApplicative.kt new file mode 100644 index 00000000..7398d553 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/io/IOApplicative.kt @@ -0,0 +1,59 @@ +package com.artemchep.keyguard.common.io + +import kotlinx.coroutines.withContext +import kotlin.coroutines.CoroutineContext +import kotlin.coroutines.EmptyCoroutineContext + +inline fun IO.map( + crossinline block: (T) -> R, +): IO = { + block(invoke()) +} + +inline fun IO.effectMap( + crossinline block: suspend (T) -> R, +): IO = { + block(invoke()) +} + +@Suppress("FunctionName") +suspend inline fun IO._effectMap( + crossinline block: suspend (T) -> R, +): R = block(invoke()) + +inline fun IO.effectMap( + context: CoroutineContext, + crossinline block: suspend (T) -> R, +): IO = suspend { + val value = invoke() // run previous IO + withContext(context) { + block(value) + } +} + +inline fun IO.effectTap( + context: CoroutineContext = EmptyCoroutineContext, + crossinline block: suspend (T) -> Unit, +): IO = suspend { + val value = invoke() + try { + withContext(context) { + block(value) + } + } catch (e: Throwable) { + e.throwIfFatalOrCancellation() + } + value +} + +inline fun IO.biEffectTap( + crossinline ifException: suspend (Throwable) -> Unit, + crossinline ifSuccess: suspend (T) -> Unit, +): IO = biFlatTap( + ifException = { e -> + ioEffect { ifException(e) } + }, + ifSuccess = { value -> + ioEffect { ifSuccess(value) } + }, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/io/IOBind.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/io/IOBind.kt new file mode 100644 index 00000000..bdc70fd0 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/io/IOBind.kt @@ -0,0 +1,21 @@ +package com.artemchep.keyguard.common.io + +import kotlinx.coroutines.async +import kotlinx.coroutines.coroutineScope +import kotlinx.coroutines.runBlocking +import kotlin.coroutines.CoroutineContext +import kotlin.coroutines.EmptyCoroutineContext + +fun IO.bindBlocking(): T = runBlocking { bind() } + +suspend fun IO.bind(): T = invoke() + +suspend fun List>.bind(context: CoroutineContext = EmptyCoroutineContext): List = + coroutineScope { + map { io -> + // Run all the tasks in parallel. + async(context) { + io.bind() + } + }.map { it.await() } + } diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/io/IOCombine.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/io/IOCombine.kt new file mode 100644 index 00000000..1e74e255 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/io/IOCombine.kt @@ -0,0 +1,44 @@ +package com.artemchep.keyguard.common.io + +import kotlinx.coroutines.async +import kotlinx.coroutines.coroutineScope +import kotlin.coroutines.CoroutineContext +import kotlin.coroutines.EmptyCoroutineContext + +fun List>.combine( + bucket: Int, + context: CoroutineContext = EmptyCoroutineContext, +): IO> = ioEffect { + if (size >= bucket * 2) { + coroutineScope { + val bucketSize = size / + (size / bucket) + .coerceAtLeast(1) + this@combine + .windowed( + size = bucketSize, + step = bucketSize, + partialWindows = true, + ) + .map { window -> + async(context) { + sequentialCombine(window) + } + } + .flatMap { it.await() } + } + } else { + sequentialCombine(this) + } +} + +fun List>.combineSeq( + context: CoroutineContext = EmptyCoroutineContext, +): IO> = ioEffect(context = context) { + sequentialCombine(this) +} + +private suspend fun sequentialCombine( + list: List>, +): List = list + .map { io -> io.bind() } diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/io/IOException.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/io/IOException.kt new file mode 100644 index 00000000..2aa88e30 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/io/IOException.kt @@ -0,0 +1,148 @@ +package com.artemchep.keyguard.common.io + +import arrow.core.Either +import arrow.core.left +import arrow.core.right +import kotlinx.coroutines.CancellationException +import kotlinx.coroutines.NonCancellable +import kotlinx.coroutines.withContext + +/** + * Wraps the [IO] into a virtual try catch block that guarantees that + * executing it will not result in a crash. + */ +fun IO.attempt(): IO> = ioEffect { + try { + invoke().right() + } catch (e: Throwable) { + e.throwIfFatalOrCancellation() + e.left() + } +} + +inline fun IO.retry(crossinline retry: suspend (Throwable, Int) -> Boolean): IO = + ioEffect { + var counter = 0 + while (true) { + try { + return@ioEffect invoke() + } catch (e: Throwable) { + e.throwIfFatalOrCancellation() + + // Ask the host whether we should + // retry or not. + val shouldExit = !retry(e, counter) + if (shouldExit) { + throw e + } + + counter += 1 + } + } + + @Suppress("ThrowableNotThrown", "UNREACHABLE_CODE") + throw IllegalStateException() + } + +fun Either.toIO(): IO = + fold( + ifLeft = ::ioRaise, + ifRight = ::io, + ) + +inline fun IO.finally( + crossinline block: () -> Unit, +): IO = ioEffect { + try { + invoke() + } finally { + block() + } +} + +inline fun IO.handleErrorWith( + crossinline predicate: (Throwable) -> Boolean = { true }, + crossinline block: (Throwable) -> IO, +): IO = ioEffect { + try { + invoke() + } catch (e: Throwable) { + e.throwIfFatalOrCancellation() + // run back-up plan + if (predicate(e)) { + val io = block(e) + io() + } else { + throw e + } + } +} + +inline fun IO.handleError( + crossinline predicate: (Throwable) -> Boolean = { true }, + crossinline block: (Throwable) -> T, +): IO = ioEffect { + try { + invoke() + } catch (e: Throwable) { + e.throwIfFatalOrCancellation() + // run back-up plan + if (predicate(e)) { + block(e) + } else { + throw e + } + } +} + +inline fun IO.handleErrorTap( + crossinline predicate: (Throwable) -> Boolean = { true }, + crossinline block: suspend (Throwable) -> Unit, +): IO = ioEffect { + try { + invoke() + } catch (e: Throwable) { + e.throwIfFatalOrCancellation() + // run back-up plan + if (predicate(e)) { + try { + block(e) + } catch (e: Throwable) { + e.throwIfFatalOrCancellation() + } + } + // throw + throw e + } +} + +fun Throwable.throwIfFatalOrCancellation() { + if (this is CancellationException) { + throw this + } + nonFatalOrThrow() +} + +private fun Throwable.nonFatalOrThrow(): Throwable = + if (this !is Error) this else throw this + +inline fun IO.bracket( + crossinline release: (T) -> IO, + crossinline use: (T) -> IO, +): IO = ioEffect { + val nothing = Any() + var resource: Any? = nothing + try { + val r = bind().also { resource = it } + use(r)() + } finally { + val res = resource + if (res !== nothing) { + // Always run the release IO + withContext(NonCancellable) { + val io = release(res as T) + io.bind() + } + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/io/IOFactory.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/io/IOFactory.kt new file mode 100644 index 00000000..cb2dd3e9 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/io/IOFactory.kt @@ -0,0 +1,38 @@ +package com.artemchep.keyguard.common.io + +import kotlinx.coroutines.withContext +import kotlin.coroutines.CoroutineContext + +/** + * Creates an [IO] that returns given + * value. + */ +fun io(value: T): IO = ioEffect { + value +} + +fun ioRaise(throwable: Throwable): IO = ioEffect { + throw throwable +} + +private val ioUnit = io(Unit) + +/** + * Creates an [IO] that returns [Unit]. + */ +fun ioUnit(): IO = ioUnit + +inline fun ioEffect( + crossinline block: suspend () -> T, +): IO = suspend { + block() +} + +inline fun ioEffect( + context: CoroutineContext, + crossinline block: suspend () -> T, +): IO = ioEffect { + withContext(context) { + block() + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/io/IOFlatten.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/io/IOFlatten.kt new file mode 100644 index 00000000..8b810234 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/io/IOFlatten.kt @@ -0,0 +1,14 @@ +package com.artemchep.keyguard.common.io + +import arrow.core.Either +import arrow.core.getOrElse + +fun IO>.flattenMap(): IO = + effectMap { + it.getOrElse { throw it } + } + +fun IO>.flatten(): IO = + flatMap { + it + } diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/io/IOFlow.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/io/IOFlow.kt new file mode 100644 index 00000000..25965bc4 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/io/IOFlow.kt @@ -0,0 +1,18 @@ +package com.artemchep.keyguard.common.io + +import arrow.core.Either +import arrow.core.left +import arrow.core.right +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.catch +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.flow.map + +fun Flow.toIO(): IO = ioEffect { first() } + +fun Flow.attempt(): Flow> = this + .map> { it.right() } + .catch { + val value = it.left() + emit(value) + } diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/io/IOFold.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/io/IOFold.kt new file mode 100644 index 00000000..f113d42d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/io/IOFold.kt @@ -0,0 +1,11 @@ +package com.artemchep.keyguard.common.io + +suspend inline fun IO.fold( + ifLeft: (Throwable) -> R, + ifRight: (T) -> R, +): R = try { + bind().let(ifRight) +} catch (e: Throwable) { + e.throwIfFatalOrCancellation() + ifLeft(e) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/io/IOFork.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/io/IOFork.kt new file mode 100644 index 00000000..d87f7249 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/io/IOFork.kt @@ -0,0 +1,18 @@ +package com.artemchep.keyguard.common.io + +import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.sync.Mutex +import kotlinx.coroutines.sync.withLock +import kotlinx.coroutines.withContext + +fun IO.dispatchOn(dispatcher: CoroutineDispatcher): IO = { + withContext(dispatcher) { + bind() + } +} + +fun IO.mutex(mutex: Mutex): IO = { + mutex.withLock { + bind() + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/io/IOLaunchIn.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/io/IOLaunchIn.kt new file mode 100644 index 00000000..20b4dc6d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/io/IOLaunchIn.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.io + +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.launch + +fun IO.launchIn(scope: CoroutineScope) = scope.launch { bind() } diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/io/IOMeasure.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/io/IOMeasure.kt new file mode 100644 index 00000000..016a9419 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/io/IOMeasure.kt @@ -0,0 +1,13 @@ +package com.artemchep.keyguard.common.io + +import kotlin.time.Duration +import kotlin.time.ExperimentalTime +import kotlin.time.measureTimedValue + +inline fun IO.measure(crossinline block: suspend (Duration, T) -> Unit): IO = { + val r = measureTimedValue { + invoke() + } + block(r.duration, r.value) + r.value +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/io/IOMonad.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/io/IOMonad.kt new file mode 100644 index 00000000..4a82d123 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/io/IOMonad.kt @@ -0,0 +1,67 @@ +package com.artemchep.keyguard.common.io + +import kotlinx.coroutines.async +import kotlinx.coroutines.coroutineScope +import kotlin.coroutines.CoroutineContext +import kotlin.coroutines.EmptyCoroutineContext + +fun List>.parallel( + context: CoroutineContext = EmptyCoroutineContext, + parallelism: Int = 4, +): IO> = { + val window = size.div(parallelism).coerceAtLeast(1) + coroutineScope { + this@parallel + .windowed( + size = window, + step = window, + partialWindows = true, + ) + .map { list -> + async(context) { + list.map { io -> io.bind() } + } + } + .flatMap { it.await() } + } +} + +inline fun IO.flatMap( + crossinline block: (T) -> IO, +): IO = suspend { + val io = block(invoke()) + io() +} + +inline fun IO.flatTap( + crossinline block: (T) -> IO, +): IO = { + val value = invoke() + val io = block(value) + try { + io() + } catch (e: Throwable) { + e.throwIfFatalOrCancellation() + } + value +} + +inline fun IO.biFlatTap( + crossinline ifException: (Throwable) -> IO, + crossinline ifSuccess: (T) -> IO, +): IO = suspend { + val (identity, io) = try { + val v = invoke() + io(v) to ifSuccess(v) + } catch (e: Throwable) { + e.throwIfFatalOrCancellation() + ioRaise(e) to ifException(e) + } + // execute the "tap" io + try { + io() + } catch (e: Throwable) { + e.throwIfFatalOrCancellation() + } + identity +}.flatten() diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/io/IOShared.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/io/IOShared.kt new file mode 100644 index 00000000..1890d20c --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/io/IOShared.kt @@ -0,0 +1,53 @@ +package com.artemchep.keyguard.common.io + +import arrow.core.Either +import kotlinx.coroutines.Deferred +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.async + +/** + * Returns an IO that computes the resulting value once + * and only once. + */ +fun IO.shared( + ifFailedRetryOnNextBind: Boolean = false, +): IO { + var result: Either? = null + var future: Deferred>? = null + return ioEffect { + // Fast path out when the resource is already + // loaded. + result?.also { + if (it is Either.Left && ifFailedRetryOnNextBind) { + // Reset the value, so next time we try to fetch it. + synchronized(this) { + result = null + future = null + } + return@also + } + return@ioEffect it + } + + synchronized(this) { + // Start retrieving the value of the original + // io, that will be shared across all IOs. + future ?: GlobalScope + .async { + val value = attempt().bind() + // Save the result + result = value + future = null + + value + } + .also { + // Theoretically it may NOT happen if the `async` + // completes before `also`. + if (result == null) { + future = it + } + } + }.await() + }.flattenMap() +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/io/IOTimeout.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/io/IOTimeout.kt new file mode 100644 index 00000000..675b9dda --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/io/IOTimeout.kt @@ -0,0 +1,19 @@ +package com.artemchep.keyguard.common.io + +import kotlinx.coroutines.TimeoutCancellationException +import kotlinx.coroutines.withTimeout +import java.util.concurrent.TimeoutException + +/** + * Raises the exception in IO, if the execution takes + * more than [millis]. + */ +fun IO.timeout(millis: Long): IO = { + try { + withTimeout(millis) { + invoke() + } + } catch (e: TimeoutCancellationException) { + throw TimeoutException() + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/io/IOWiden.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/io/IOWiden.kt new file mode 100644 index 00000000..6bc55ff2 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/io/IOWiden.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.io + +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.map + +fun Flow.nullable(): Flow = map { it } diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/io/search.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/io/search.kt new file mode 100644 index 00000000..b0c71cc6 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/io/search.kt @@ -0,0 +1,45 @@ +package com.artemchep.keyguard.common.io + +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.async +import kotlinx.coroutines.coroutineScope + +/** + * A number of queries to search though per + * coroutine. + */ +private const val PARALLEL_SEARCH_BUCKET_SIZE = 5000 + +suspend fun List.sequentialSearch( + block: suspend (T) -> R?, +) = this.mapNotNull { + block(it) +} + +suspend fun List.parallelSearch( + block: suspend (T) -> R?, +) = +// We don't want to parallelize the work unless there are +// more than 1 full bucket available. + if (size >= PARALLEL_SEARCH_BUCKET_SIZE * 2) { + coroutineScope { + val bucketSize = size / + (size / PARALLEL_SEARCH_BUCKET_SIZE) + .coerceAtLeast(1) + .coerceAtMost(6) // usually there's less than 6 threads + this@parallelSearch + .windowed( + size = bucketSize, + step = bucketSize, + partialWindows = true, + ) + .map { window -> + async(Dispatchers.Default) { + window.sequentialSearch(block) + } + } + .flatMap { it.await() } + } + } else { + sequentialSearch(block) + } diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/io/throttle.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/io/throttle.kt new file mode 100644 index 00000000..59e235d4 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/io/throttle.kt @@ -0,0 +1,79 @@ +package com.artemchep.keyguard.common.io + +import kotlinx.coroutines.Job +import kotlinx.coroutines.channels.ProducerScope +import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.channelFlow +import kotlinx.coroutines.flow.flow +import kotlinx.coroutines.launch + +fun Flow.throttle(timeoutMillis: Long, sendLastEvent: Boolean = true): Flow = + if (sendLastEvent) { + channelFlow { + val throttler = FlowThrottle(this, timeoutMillis) + collect { + throttler.send(it) + } + } + } else { + flow { + var lastTime = 0L + collect { value -> + val now = System.currentTimeMillis() + if (lastTime + timeoutMillis > now) { + return@collect + } + + lastTime = now + emit(value) + } + } + } + +private class FlowThrottle( + private val producer: ProducerScope, + private val timeoutMillis: Long, +) { + companion object { + private val NOTHING = Any() + } + + private var tickerJob: Job? = null + + /** + * The value that is waiting to be sent, [NOTHING] means that + * no value is waiting to be sent + */ + private var unsentValue: Any? = NOTHING + + private var lastTime = 0L + + suspend fun send(value: T) { + val now = System.currentTimeMillis() + val dt = lastTime + timeoutMillis - now + if (dt > 0L) { + // We can not send this value, so remember it and maybe send + // it next time. + unsentValue = value + // Schedule a send job. + if (tickerJob?.isActive != true) { + tickerJob = producer.launch { + delay(dt) + + val nextValue = unsentValue + if (nextValue !== NOTHING) { + send(nextValue as T) + } + } + } + return + } + + lastTime = System.currentTimeMillis() + unsentValue = NOTHING + tickerJob?.cancel() + + producer.trySend(value) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/AccountId.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/AccountId.kt new file mode 100644 index 00000000..b7da19b9 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/AccountId.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.model + +data class AccountId( + val id: String, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/AccountLastSyncStatus.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/AccountLastSyncStatus.kt new file mode 100644 index 00000000..9b1d2310 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/AccountLastSyncStatus.kt @@ -0,0 +1,8 @@ +package com.artemchep.keyguard.common.model + +import kotlinx.datetime.Instant + +data class AccountLastSyncStatus( + val date: Instant, + val error: AccountSyncError?, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/AccountSyncError.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/AccountSyncError.kt new file mode 100644 index 00000000..411d4230 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/AccountSyncError.kt @@ -0,0 +1,14 @@ +package com.artemchep.keyguard.common.model + +sealed interface AccountSyncError { + data object Unauthorized : AccountSyncError + data object Forbidden : AccountSyncError + + /** + * Something wrong that should be fixable + * by trying to sync again. + */ + data class Unknown( + val message: String? = null, + ) : AccountSyncError +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/AccountTask.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/AccountTask.kt new file mode 100644 index 00000000..27cba5e8 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/AccountTask.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.model + +enum class AccountTask { + SYNC, + REMOVE, +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/AddCipherOpenedHistoryRequest.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/AddCipherOpenedHistoryRequest.kt new file mode 100644 index 00000000..813405a3 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/AddCipherOpenedHistoryRequest.kt @@ -0,0 +1,10 @@ +package com.artemchep.keyguard.common.model + +import kotlinx.datetime.Clock +import kotlinx.datetime.Instant + +data class AddCipherOpenedHistoryRequest( + val accountId: String, + val cipherId: String, + val instant: Instant = Clock.System.now(), +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/AddCipherUsedPasskeyHistoryRequest.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/AddCipherUsedPasskeyHistoryRequest.kt new file mode 100644 index 00000000..fe9da3f9 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/AddCipherUsedPasskeyHistoryRequest.kt @@ -0,0 +1,11 @@ +package com.artemchep.keyguard.common.model + +import kotlinx.datetime.Clock +import kotlinx.datetime.Instant + +data class AddCipherUsedPasskeyHistoryRequest( + val accountId: String, + val cipherId: String, + val credentialId: String, + val instant: Instant = Clock.System.now(), +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/AddPasskeyCipherRequest.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/AddPasskeyCipherRequest.kt new file mode 100644 index 00000000..4c2fed2c --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/AddPasskeyCipherRequest.kt @@ -0,0 +1,21 @@ +package com.artemchep.keyguard.common.model + +data class AddPasskeyCipherRequest( + val cipherId: String, + val data: Data, +) { + data class Data( + val credentialId: String?, + val keyType: String, // public-key + val keyAlgorithm: String, // ECDSA + val keyCurve: String, // P-256 + val keyValue: String, + val rpId: String, + val rpName: String, + val counter: Int?, + val userHandle: String, + val userName: String?, + val userDisplayName: String?, + val discoverable: Boolean, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/AddUriCipherRequest.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/AddUriCipherRequest.kt new file mode 100644 index 00000000..dcb8361e --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/AddUriCipherRequest.kt @@ -0,0 +1,10 @@ +package com.artemchep.keyguard.common.model + +data class AddUriCipherRequest( + val cipherId: String, + // autofill + val applicationId: String? = null, + val webDomain: String? = null, + val webScheme: String? = null, + val webView: Boolean? = null, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/AnyMap.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/AnyMap.kt new file mode 100644 index 00000000..8d8f0c52 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/AnyMap.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.model + +data class AnyMap( + val value: Map, +) : Map by value diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/AppColors.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/AppColors.kt new file mode 100644 index 00000000..b277328a --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/AppColors.kt @@ -0,0 +1,28 @@ +package com.artemchep.keyguard.common.model + +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.toArgb + +enum class AppColors( + val title: String, + val key: String, + val color: Int, +) { + RED("Red", "red", -0xbbcca), + PINK("Pink", "pink", -0x16e19d), + PURPLE("Purple", "purple", -0x63d850), + DEEP_PURPLE("Deep purple", "deep_purple", -0x98c549), + INDIGO("Indigo", "indigo", -0xc0ae4b), + BLUE("Blue", "blue", -0xde690d), + CYAN("Cyan", "cyan", -0xff6859), + TEAL("Teal", "teal", -0xff6978), + GREEN("Green", "green", -0xbc5fb9), + LIGHT_GREEN("Light green", "light_green", -0x743cb6), + LIME("Lime", "lime", -0x3223c7), + YELLOW("Yellow", "yellow", -0x14c5), + AMBER("Amber", "amber", -0x3ef9), + ORANGE("Orange", "orange", -0x6800), + DEEP_ORANGE("Deep orange", "deep_orange", -0xa8de), + BROWN("Brown", "brown", -0x86aab8), + GRAY("Gray", "gray", Color.Gray.toArgb()), +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/AppFont.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/AppFont.kt new file mode 100644 index 00000000..7580672e --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/AppFont.kt @@ -0,0 +1,10 @@ +package com.artemchep.keyguard.common.model + +enum class AppFont( + val title: String, + val key: String, +) { + ROBOTO("Roboto", "roboto"), + NOTO("Noto", "noto"), + ATKINSON_HYPERLEGIBLE("Atkinson Hyperlegible", "atkinson_hyperlegible"), +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/AppTheme.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/AppTheme.kt new file mode 100644 index 00000000..e7f19bd5 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/AppTheme.kt @@ -0,0 +1,8 @@ +package com.artemchep.keyguard.common.model + +enum class AppTheme( + val key: String, +) { + LIGHT("light"), + DARK("dark"), +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/Argon2Mode.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/Argon2Mode.kt new file mode 100644 index 00000000..e11addd8 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/Argon2Mode.kt @@ -0,0 +1,27 @@ +package com.artemchep.keyguard.common.model + +/** + * The different Argon2 modes that differ regarding side-channel-and-memory-tradeoffs. + * Please refer to the documentation of the Argon2 project for details. + */ +enum class Argon2Mode(val identifier: Int) { + + /** + * Argon2d chooses memory depending on the password and salt. + * Not suitable for environments with potential side-channel attacks. + */ + ARGON2_D(0), + + /** + * Argon2i chooses memory independent of the password and salt + * reducing the risk from side-channels. However, the + * memory trade-off is weaker. + */ + ARGON2_I(1), + + /** + * Argon2id combines the Argon2d and Argon2i providing + * a reasonable trade-off between memory dependence and side-channels. + */ + ARGON2_ID(2), +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/AttachmentId.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/AttachmentId.kt new file mode 100644 index 00000000..79ac09ff --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/AttachmentId.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.model + +data class AttachmentId( + val id: String, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/AuthResult.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/AuthResult.kt new file mode 100644 index 00000000..f3707eba --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/AuthResult.kt @@ -0,0 +1,10 @@ +package com.artemchep.keyguard.common.model + +data class AuthResult( + /** + * The key used to encrypt all of the + * vaults' data. + */ + val key: MasterKey, + val token: FingerprintPassword, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/AutofillHint.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/AutofillHint.kt new file mode 100644 index 00000000..1958a829 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/AutofillHint.kt @@ -0,0 +1,89 @@ +package com.artemchep.keyguard.common.model + +import com.artemchep.keyguard.feature.auth.common.util.REGEX_EMAIL +import com.artemchep.keyguard.feature.auth.common.util.REGEX_PHONE_NUMBER + +enum class AutofillHint { + EMAIL_ADDRESS, + USERNAME, + PASSWORD, + WIFI_PASSWORD, + POSTAL_ADDRESS, + POSTAL_CODE, + CREDIT_CARD_NUMBER, + CREDIT_CARD_SECURITY_CODE, + CREDIT_CARD_EXPIRATION_DATE, + CREDIT_CARD_EXPIRATION_MONTH, + CREDIT_CARD_EXPIRATION_YEAR, + CREDIT_CARD_EXPIRATION_DAY, + + // extended + POSTAL_ADDRESS_COUNTRY, + POSTAL_ADDRESS_REGION, + POSTAL_ADDRESS_LOCALITY, + POSTAL_ADDRESS_STREET_ADDRESS, + POSTAL_ADDRESS_EXTENDED_ADDRESS, + POSTAL_ADDRESS_EXTENDED_POSTAL_CODE, + POSTAL_ADDRESS_APT_NUMBER, + POSTAL_ADDRESS_DEPENDENT_LOCALITY, + PERSON_NAME, + PERSON_NAME_GIVEN, + PERSON_NAME_FAMILY, + PERSON_NAME_MIDDLE, + PERSON_NAME_MIDDLE_INITIAL, + PERSON_NAME_PREFIX, + PERSON_NAME_SUFFIX, + PHONE_NUMBER, + PHONE_NUMBER_DEVICE, + PHONE_COUNTRY_CODE, + PHONE_NATIONAL, + NEW_USERNAME, + NEW_PASSWORD, + GENDER, + BIRTH_DATE_FULL, + BIRTH_DATE_DAY, + BIRTH_DATE_MONTH, + BIRTH_DATE_YEAR, + SMS_OTP, + EMAIL_OTP, + APP_OTP, + NOT_APPLICABLE, + PROMO_CODE, + UPI_VPA, + + // custom + OFF, +} + +data class AutofillMatcher( + val hint: AutofillHint, + val regex: Regex? = null, +) + +val zzMap = mapOf>( + AutofillHint.USERNAME to listOf( + // Username might be your email field. + AutofillMatcher( + hint = AutofillHint.EMAIL_ADDRESS, + regex = REGEX_EMAIL, + ), + ), + AutofillHint.PASSWORD to listOf( + // Password might be your WiFi password. + AutofillMatcher( + hint = AutofillHint.WIFI_PASSWORD, + ), + ), + AutofillHint.WIFI_PASSWORD to listOf( + // WiFi password might be your regular password. + AutofillMatcher( + hint = AutofillHint.PASSWORD, + ), + ), + AutofillHint.PHONE_NUMBER to listOf( + AutofillMatcher( + hint = AutofillHint.USERNAME, + regex = REGEX_PHONE_NUMBER, + ), + ), +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/AutofillTarget.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/AutofillTarget.kt new file mode 100644 index 00000000..a1364e04 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/AutofillTarget.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.model + +data class AutofillTarget( + val links: List, + val hints: List, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/BarcodeImageFormat.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/BarcodeImageFormat.kt new file mode 100644 index 00000000..840bf542 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/BarcodeImageFormat.kt @@ -0,0 +1,58 @@ +package com.artemchep.keyguard.common.model + +/** + * Enumerates barcode formats known to this package. + * Please keep alphabetized. + */ +enum class BarcodeImageFormat { + /** Aztec 2D barcode format. */ + AZTEC, + + /** CODABAR 1D format. */ + CODABAR, + + /** Code 39 1D format. */ + CODE_39, + + /** Code 93 1D format. */ + CODE_93, + + /** Code 128 1D format. */ + CODE_128, + + /** Data Matrix 2D barcode format. */ + DATA_MATRIX, + + /** EAN-8 1D format. */ + EAN_8, + + /** EAN-13 1D format. */ + EAN_13, + + /** ITF (Interleaved Two of Five) 1D format. */ + ITF, + + /** MaxiCode 2D barcode format. */ + MAXICODE, + + /** PDF417 format. */ + PDF_417, + + /** QR Code 2D barcode format. */ + QR_CODE, + + /** RSS 14 */ + RSS_14, + + /** RSS EXPANDED */ + RSS_EXPANDED, + + /** UPC-A 1D format. */ + UPC_A, + + /** UPC-E 1D format. */ + UPC_E, + + /** UPC/EAN extension format. Not a stand-alone format. */ + UPC_EAN_EXTENSION, +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/BarcodeImageRequest.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/BarcodeImageRequest.kt new file mode 100644 index 00000000..62bd9886 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/BarcodeImageRequest.kt @@ -0,0 +1,12 @@ +package com.artemchep.keyguard.common.model + +data class BarcodeImageRequest( + val format: BarcodeImageFormat, + val size: Size? = null, + val data: String, +) { + data class Size( + val width: Int, + val height: Int, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/BiometricAuthException.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/BiometricAuthException.kt new file mode 100644 index 00000000..3c6c5a83 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/BiometricAuthException.kt @@ -0,0 +1,110 @@ +package com.artemchep.keyguard.common.model + +class BiometricAuthException( + val code: Int, + message: String, +) : RuntimeException(message) { + companion object { + /** + * There is no error, and the user can successfully authenticate. + */ + const val BIOMETRIC_SUCCESS = 0 + + const val ERROR_UNKNOWN = 999_999 + + /** + * The hardware is unavailable. Try again later. + */ + const val ERROR_HW_UNAVAILABLE = 1 + + /** + * The sensor was unable to process the current image. + */ + const val ERROR_UNABLE_TO_PROCESS = 2 + + /** + * The current operation has been running too long and has timed out. + * + * + * This is intended to prevent programs from waiting for the biometric sensor indefinitely. + * The timeout is platform and sensor-specific, but is generally on the order of ~30 seconds. + */ + const val ERROR_TIMEOUT = 3 + + /** + * The operation can't be completed because there is not enough device storage remaining. + */ + const val ERROR_NO_SPACE = 4 + + /** + * The operation was canceled because the biometric sensor is unavailable. This may happen when + * the user is switched, the device is locked, or another pending operation prevents it. + */ + const val ERROR_CANCELED = 5 + + /** + * The operation was canceled because the API is locked out due to too many attempts. This + * occurs after 5 failed attempts, and lasts for 30 seconds. + */ + const val ERROR_LOCKOUT = 7 + + /** + * The operation failed due to a vendor-specific error. + * + * + * This error code may be used by hardware vendors to extend this list to cover errors that + * don't fall under one of the other predefined categories. Vendors are responsible for + * providing the strings for these errors. + * + * + * These messages are typically reserved for internal operations such as enrollment but may + * be used to express any error that is not otherwise covered. In this case, applications are + * expected to show the error message, but they are advised not to rely on the message ID, since + * this may vary by vendor and device. + */ + const val ERROR_VENDOR = 8 + + /** + * The operation was canceled because [.ERROR_LOCKOUT] occurred too many times. Biometric + * authentication is disabled until the user unlocks with their device credential (i.e. PIN, + * pattern, or password). + */ + const val ERROR_LOCKOUT_PERMANENT = 9 + + /** + * The user canceled the operation. + * + * + * Upon receiving this, applications should use alternate authentication, such as a password. + * The application should also provide the user a way of returning to biometric authentication, + * such as a button. + */ + const val ERROR_USER_CANCELED = 10 + + /** + * The user does not have any biometrics enrolled. + */ + const val ERROR_NO_BIOMETRICS = 11 + + /** + * The device does not have the required authentication hardware. + */ + const val ERROR_HW_NOT_PRESENT = 12 + + /** + * The user pressed the negative button. + */ + const val ERROR_NEGATIVE_BUTTON = 13 + + /** + * The device does not have pin, pattern, or password set up. + */ + const val ERROR_NO_DEVICE_CREDENTIAL = 14 + + /** + * A security vulnerability has been discovered with one or more hardware sensors. The + * affected sensor(s) are unavailable until a security update has addressed the issue. + */ + const val ERROR_SECURITY_UPDATE_REQUIRED = 15 + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/BiometricAuthPrompt.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/BiometricAuthPrompt.kt new file mode 100644 index 00000000..5222225d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/BiometricAuthPrompt.kt @@ -0,0 +1,32 @@ +package com.artemchep.keyguard.common.model + +import arrow.core.Either +import com.artemchep.keyguard.feature.localization.TextHolder +import com.artemchep.keyguard.platform.LeCipher + +sealed interface PureBiometricAuthPrompt + +class BiometricAuthPrompt( + val title: TextHolder, + val text: TextHolder? = null, + val cipher: LeCipher, + /** + * Called when the user either failed the authentication or + * successfully passed it. + */ + val onComplete: ( + result: Either, + ) -> Unit, +) : PureBiometricAuthPrompt + +class BiometricAuthPromptSimple( + val title: TextHolder, + val text: TextHolder? = null, + /** + * Called when the user either failed the authentication or + * successfully passed it. + */ + val onComplete: ( + result: Either, + ) -> Unit, +) : PureBiometricAuthPrompt diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/BiometricPurpose.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/BiometricPurpose.kt new file mode 100644 index 00000000..7eef99fc --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/BiometricPurpose.kt @@ -0,0 +1,9 @@ +package com.artemchep.keyguard.common.model + +sealed interface BiometricPurpose { + data object Encrypt : BiometricPurpose + + data class Decrypt( + val iv: DKey, + ) : BiometricPurpose +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/BiometricStatus.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/BiometricStatus.kt new file mode 100644 index 00000000..acc9a825 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/BiometricStatus.kt @@ -0,0 +1,16 @@ +package com.artemchep.keyguard.common.model + +import com.artemchep.keyguard.platform.LeCipher + +sealed interface BiometricStatus { + class Available( + /** + * Creates a cipher to use with a biometric + * prompt. + */ + val createCipher: (BiometricPurpose) -> LeCipher, + val deleteCipher: () -> Unit, + ) : BiometricStatus + + data object Unavailable : BiometricStatus +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/CheckPasswordLeakRequest.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/CheckPasswordLeakRequest.kt new file mode 100644 index 00000000..1cfb0dc5 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/CheckPasswordLeakRequest.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.model + +data class CheckPasswordLeakRequest( + val password: String, + val cache: Boolean = true, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/CheckPasswordSetLeakRequest.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/CheckPasswordSetLeakRequest.kt new file mode 100644 index 00000000..93a6e863 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/CheckPasswordSetLeakRequest.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.model + +data class CheckPasswordSetLeakRequest( + val passwords: Set, + val cache: Boolean = true, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/CheckUsernameLeakRequest.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/CheckUsernameLeakRequest.kt new file mode 100644 index 00000000..2c57d616 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/CheckUsernameLeakRequest.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.model + +data class CheckUsernameLeakRequest( + val accountId: AccountId, + val username: String, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/CipherFieldSwitchToggleRequest.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/CipherFieldSwitchToggleRequest.kt new file mode 100644 index 00000000..0cc0c213 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/CipherFieldSwitchToggleRequest.kt @@ -0,0 +1,7 @@ +package com.artemchep.keyguard.common.model + +data class CipherFieldSwitchToggleRequest( + val fieldIndex: Int, + val fieldName: String?, + val value: Boolean, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/CipherHistoryType.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/CipherHistoryType.kt new file mode 100644 index 00000000..10aafdc2 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/CipherHistoryType.kt @@ -0,0 +1,7 @@ +package com.artemchep.keyguard.common.model + +object CipherHistoryType { + const val OPENED = 0L + const val USED_AUTOFILL = 1L + const val USED_PASSKEY = 2L +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/CipherId.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/CipherId.kt new file mode 100644 index 00000000..f4a63bfc --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/CipherId.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.model + +data class CipherId( + val id: String, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/CipherOpenedHistoryMode.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/CipherOpenedHistoryMode.kt new file mode 100644 index 00000000..5d585513 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/CipherOpenedHistoryMode.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.model + +sealed interface CipherOpenedHistoryMode { + data object Recent : CipherOpenedHistoryMode + data object Popular : CipherOpenedHistoryMode +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/CreditCardType.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/CreditCardType.kt new file mode 100644 index 00000000..8fcf080b --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/CreditCardType.kt @@ -0,0 +1,223 @@ +// The MIT License (MIT) +// +// Copyright (c) 2015 Ben Drucker +// +// Permission is hereby granted, free of charge, to any person obtaining a copy +// of this software and associated documentation files (the "Software"), to deal +// in the Software without restriction, including without limitation the rights +// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +// copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all +// copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +// SOFTWARE. + +package com.artemchep.keyguard.common.model + +import com.artemchep.keyguard.res.Res +import dev.icerock.moko.resources.ImageResource +import kotlinx.collections.immutable.persistentListOf + +// Thanks to +// https://github.com/bendrucker/creditcards-types/ +// for providing these beautiful regex patterns. +// +// Currently based on +// https://github.com/bendrucker/creditcards-types/commit/d3d1d11ea33afd97f56f3862c84adae4000ca032 +// +// Images of cards +// https://github.com/aaronfagan/svg-credit-card-payment-icons + +data class CreditCardType( + val name: String, + val icon: ImageResource? = null, + val digits: IntRange = 16..16, + val csc: IntRange = 3..3, + /** + * `true` if the credit card number uses the Luhn algorithm, + * `false` otherwise. + * + * See: https://en.wikipedia.org/wiki/Luhn_algorithm + */ + val luhn: Boolean = true, + /** A regular expression for validating a full card number */ + val pattern: Regex, + /** A regular expression for guessing the card type from a partial number */ + val eagerPattern: Regex, + /** + * A regular expression for separating the card number into groups. Can be + * used for formatting purposes. + */ + val groupPattern: Regex? = null, +) + +val creditCardVisa = CreditCardType( + name = "Visa", + icon = Res.images.ic_card_visa, + digits = 13..19, + pattern = "^4\\d{12}(\\d{3}|\\d{6})?\$".toRegex(), + eagerPattern = "^4".toRegex(), + groupPattern = "(\\d{1,4})(\\d{1,4})?(\\d{1,4})?(\\d{1,4})?(\\d{1,3})?".toRegex(), +) + +val creditCardAmericanExpress = CreditCardType( + name = "American Express", + icon = Res.images.ic_card_amex, + digits = 15..15, + csc = 4..4, + pattern = "^3[47]\\d{13}\$".toRegex(), + eagerPattern = "^3[47]".toRegex(), + groupPattern = "(\\d{1,4})(\\d{1,6})?(\\d{1,5})?".toRegex(), +) + +val creditCardDankort = CreditCardType( + name = "Dankort", + pattern = "^5019\\d{12}\$".toRegex(), + eagerPattern = "^5019".toRegex(), +) + +val creditCardDinersClub = CreditCardType( + name = "Diners Club", + icon = Res.images.ic_card_diners, + digits = 14..19, + pattern = "^3(0[0-5]|[68]\\d)\\d{11,16}\$".toRegex(), + eagerPattern = "^3(0|[68])".toRegex(), + groupPattern = "(\\d{1,4})?(\\d{1,6})?(\\d{1,9})?".toRegex(), +) + +val creditCardDiscover = CreditCardType( + name = "Discover", + icon = Res.images.ic_card_discover, + pattern = "^6(011(0[0-9]|[2-4]\\d|74|7[7-9]|8[6-9]|9[0-9])|4[4-9]\\d{3}|5\\d{4})\\d{10}\$".toRegex(), + eagerPattern = "^6(011(0[0-9]|[2-4]|74|7[7-9]|8[6-9]|9[0-9])|4[4-9]|5)".toRegex(), +) + +val creditCardElo = CreditCardType( + name = "Elo", + icon = Res.images.ic_card_elo, + pattern = "^(4[035]|5[0]|6[235])(6[7263]|9[90]|1[2416]|7[736]|8[9]|0[04579]|5[0])([0-9])([0-9])\\d{10}\$".toRegex(), + eagerPattern = "^(4[035]|5[0]|6[235])(6[7263]|9[90]|1[2416]|7[736]|8[9]|0[04579]|5[0])([0-9])([0-9])".toRegex(), + groupPattern = "(\\d{1,4})(\\d{1,4})?(\\d{1,4})?(\\d{1,4})?(\\d{1,3})?".toRegex(), +) + +val creditCardForbrugsforeningen = CreditCardType( + name = "Forbrugsforeningen", + pattern = "^600722\\d{10}\$".toRegex(), + eagerPattern = "^600".toRegex(), +) + +val creditCardJCB = CreditCardType( + name = "JCB", + icon = Res.images.ic_card_jcb, + pattern = "^35\\d{14}\$".toRegex(), + eagerPattern = "^35".toRegex(), +) + +val creditCardMada = CreditCardType( + name = "Mada", + digits = 16..16, + pattern = "^(4(0(0861|1757|3024|6136|6996|7(197|395)|9201)|1(2565|0621|0685|7633|9593)|2(0132|1141|281(7|8|9)|689700|8(331|67(1|2|3)))|3(1361|2328|4107|9954)|4(0(533|647|795)|5564|6(393|404|672))|5(5(036|708)|7865|7997|8456)|6(2220|854(0|1|2|3))|7(4491)|8(301(0|1|2)|4783|609(4|5|6)|931(7|8|9))|93428)|5(0(4300|6968|8160)|13213|2(0058|1076|4(130|514)|9(415|741))|3(0(060|906)|1(095|196)|2013|5(825|989)|6023|7767|9931)|4(3(085|357)|9760)|5(4180|7606|8563|8848)|8(5265|8(8(4(5|6|7|8|9)|5(0|1))|98(2|3))|9(005|206)))|6(0(4906|5141)|36120)|9682(0(1|2|3|4|5|6|7|8|9)|1(0|1)))\\d{10}\$".toRegex(), + eagerPattern = "^(4(0(0861|1757|3024|6136|6996|7(197|395)|9201)|1(2565|0621|0685|7633|9593)|2(0132|1141|281(7|8|9)|689700|8(331|67(1|2|3)))|3(1361|2328|4107|9954)|4(0(533|647|795)|5564|6(393|404|672))|5(5(036|708)|7865|7997|8456)|6(2220|854(0|1|2|3))|7(4491)|8(301(0|1|2)|4783|609(4|5|6)|931(7|8|9))|93428)|5(0(4300|6968|8160)|13213|2(0058|1076|4(130|514)|9(415|741))|3(0(060|906)|1(095|196)|2013|5(825|989)|6023|7767|9931)|4(3(085|357)|9760)|5(4180|7606|8563|8848)|8(5265|8(8(4(5|6|7|8|9)|5(0|1))|98(2|3))|9(005|206)))|6(0(4906|5141)|36120)|9682(0(1|2|3|4|5|6|7|8|9)|1(0|1)))".toRegex(), +) + +val creditCardMaestro = CreditCardType( + name = "Maestro", + icon = Res.images.ic_card_maestro, + digits = 12..19, + pattern = "^(?:5[06789]\\d\\d|(?!6011[0234])(?!60117[4789])(?!60118[6789])(?!60119)(?!64[456789])(?!65)6\\d{3})\\d{8,15}\$".toRegex(), + eagerPattern = "^(5(018|0[23]|[68])|6[37]|60111|60115|60117([56]|7[56])|60118[0-5]|64[0-3]|66)".toRegex(), + groupPattern = "(\\d{1,4})(\\d{1,4})?(\\d{1,4})?(\\d{1,4})?(\\d{1,3})?".toRegex(), +) + +val creditCardMastercard = CreditCardType( + name = "Mastercard", + icon = Res.images.ic_card_mastercard, + pattern = "^(5[1-5][0-9]{2}|222[1-9]|22[3-9][0-9]|2[3-6][0-9]{2}|27[01][0-9]|2720)\\d{12}\$".toRegex(), + eagerPattern = "^(2[3-7]|22[2-9]|5[1-5])".toRegex(), +) + +val creditCardMeeza = CreditCardType( + name = "Meeza", + digits = 16..16, + pattern = "^5078(03|09|10|11)\\d{10}\$".toRegex(), + eagerPattern = "^5078(03|09|10|11)".toRegex(), +) + +val creditCardMir = CreditCardType( + name = "Mir", + icon = Res.images.ic_card_mir, + pattern = "^220[0-4]\\d{12}\$".toRegex(), + eagerPattern = "^220[0-4]".toRegex(), + groupPattern = "(\\d{1,4})(\\d{1,4})?(\\d{1,4})?(\\d{1,4})?(\\d{1,3})?".toRegex(), +) + +val creditCardTroy = CreditCardType( + name = "Troy", + pattern = "^9792\\d{12}\$".toRegex(), + eagerPattern = "^9792".toRegex(), +) + +val creditCardUATP = CreditCardType( + name = "UATP", + digits = 15..15, + pattern = "^1\\d{14}\$".toRegex(), + eagerPattern = "^1".toRegex(), + groupPattern = "(\\d{1,4})(\\d{1,5})?(\\d{1,6})?".toRegex(), +) + +val creditCardUnionPay = CreditCardType( + name = "UnionPay", + icon = Res.images.ic_card_unionpay, + luhn = false, + pattern = "^62[0-5]\\d{13,16}\$".toRegex(), + eagerPattern = "^62".toRegex(), + groupPattern = "(\\d{1,4})(\\d{1,4})?(\\d{1,4})?(\\d{1,4})?(\\d{1,3})?".toRegex(), +) + +// Sorted by popularity +val creditCards = persistentListOf( + creditCardVisa, + creditCardMastercard, + creditCardAmericanExpress, + creditCardDinersClub, + creditCardDiscover, + creditCardJCB, + creditCardUnionPay, + creditCardMaestro, + creditCardForbrugsforeningen, + creditCardDankort, + creditCardTroy, + creditCardElo, + creditCardMir, + creditCardUATP, + creditCardMada, + creditCardMeeza, +) + +fun List.firstOrNullByBrand( + brand: String, +) = this + .firstOrNull { + it.name.equals(brand, ignoreCase = true) + } + +fun List.firstOrNullByNumber( + number: String, +) = kotlin.run { + val digitOnlyNumber = number.replace( + regex = "\\D".toRegex(), + replacement = "", + ) + this + .firstOrNull { + it.pattern.matches(digitOnlyNumber) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/CryptoHashAlgorithm.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/CryptoHashAlgorithm.kt new file mode 100644 index 00000000..23d637f8 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/CryptoHashAlgorithm.kt @@ -0,0 +1,7 @@ +package com.artemchep.keyguard.common.model + +enum class CryptoHashAlgorithm { + SHA_1, + SHA_256, + SHA_512, +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/DAccount.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/DAccount.kt new file mode 100644 index 00000000..a499eb8a --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/DAccount.kt @@ -0,0 +1,20 @@ +package com.artemchep.keyguard.common.model + +data class DAccount( + val id: AccountId, + val username: String, + val host: String, + val url: String, + val faviconServer: (String) -> String, +) : HasAccountId, Comparable { + private val comparator = compareBy( + { host }, + { username }, + { url }, + { id.id }, + ) + + override fun compareTo(other: DAccount): Int = comparator.compare(this, other) + + override fun accountId(): String = id.id +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/DAccountStatus.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/DAccountStatus.kt new file mode 100644 index 00000000..0163aebf --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/DAccountStatus.kt @@ -0,0 +1,17 @@ +package com.artemchep.keyguard.common.model + +import com.artemchep.keyguard.common.service.permission.PermissionState + +data class DAccountStatus( + val error: Error? = null, + val pending: Pending? = null, + val pendingPermissions: List = emptyList(), +) { + data class Error( + val count: Int, + ) + + data class Pending( + val count: Int, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/DCipherOpenedHistory.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/DCipherOpenedHistory.kt new file mode 100644 index 00000000..8bd11fdd --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/DCipherOpenedHistory.kt @@ -0,0 +1,9 @@ +package com.artemchep.keyguard.common.model + +import kotlinx.datetime.Clock +import kotlinx.datetime.Instant + +data class DCipherOpenedHistory( + val cipherId: String, + val instant: Instant = Clock.System.now(), +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/DCollection.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/DCollection.kt new file mode 100644 index 00000000..015b30cb --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/DCollection.kt @@ -0,0 +1,20 @@ +package com.artemchep.keyguard.common.model + +import kotlinx.datetime.Instant + +data class DCollection( + val id: String, + val organizationId: String?, + val accountId: String, + val revisionDate: Instant, + val name: String, + val readOnly: Boolean, + val hidePasswords: Boolean, +) : HasAccountId, Comparable { + companion object; + + override fun accountId(): String = accountId + + override fun compareTo(other: DCollection): Int = + name.compareTo(other.name, ignoreCase = true) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/DFilter.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/DFilter.kt new file mode 100644 index 00000000..4b1f87b0 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/DFilter.kt @@ -0,0 +1,994 @@ +package com.artemchep.keyguard.common.model + +import arrow.core.Either +import arrow.core.getOrElse +import arrow.core.partially1 +import com.artemchep.keyguard.common.io.attempt +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.io.handleError +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.io.map +import com.artemchep.keyguard.common.io.measure +import com.artemchep.keyguard.common.service.hibp.breaches.all.BreachesRepository +import com.artemchep.keyguard.common.service.passkey.PassKeyService +import com.artemchep.keyguard.common.service.passkey.PassKeyServiceInfo +import com.artemchep.keyguard.common.service.twofa.TwoFaService +import com.artemchep.keyguard.common.service.twofa.TwoFaServiceInfo +import com.artemchep.keyguard.common.usecase.CheckPasswordSetLeak +import com.artemchep.keyguard.common.usecase.CipherBreachCheck +import com.artemchep.keyguard.common.usecase.CipherExpiringCheck +import com.artemchep.keyguard.common.usecase.CipherIncompleteCheck +import com.artemchep.keyguard.common.usecase.CipherUnsecureUrlCheck +import com.artemchep.keyguard.common.usecase.CipherUrlDuplicateCheck +import com.artemchep.keyguard.core.store.bitwarden.exists +import com.artemchep.keyguard.feature.crashlytics.crashlyticsTap +import com.artemchep.keyguard.provider.bitwarden.entity.HibpBreachGroup +import io.ktor.http.Url +import kotlinx.datetime.Clock +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import org.kodein.di.DirectDI +import org.kodein.di.instance +import kotlin.collections.Collection +import kotlin.collections.List +import kotlin.collections.Map +import kotlin.collections.Set +import kotlin.collections.all +import kotlin.collections.any +import kotlin.collections.asSequence +import kotlin.collections.contains +import kotlin.collections.count +import kotlin.collections.emptyList +import kotlin.collections.emptyMap +import kotlin.collections.filter +import kotlin.collections.first +import kotlin.collections.firstOrNull +import kotlin.collections.forEach +import kotlin.collections.getOrElse +import kotlin.collections.indices +import kotlin.collections.isNotEmpty +import kotlin.collections.isNullOrEmpty +import kotlin.collections.map +import kotlin.collections.mapNotNull +import kotlin.collections.mapValues +import kotlin.collections.mutableMapOf +import kotlin.collections.orEmpty +import kotlin.collections.set +import kotlin.collections.toSet + +@Serializable +sealed interface DFilter { + companion object { + inline fun findOne( + filter: DFilter, + noinline predicate: (T) -> Boolean = { true }, + ): T? = findOne( + filter = filter, + target = T::class.java, + predicate = predicate, + ) + + fun findOne( + filter: DFilter, + target: Class, + predicate: (T) -> Boolean = { true }, + ): T? = _findOne( + filter = filter, + target = target, + predicate = predicate, + ).getOrNull() + + private fun _findOne( + filter: DFilter, + target: Class, + predicate: (T) -> Boolean = { true }, + ): Either = when (filter) { + is Or<*> -> { + when (filter.filters.size) { + 0 -> Either.Right(null) + 1 -> { + val f = filter.filters.first() + _findOne(f, target, predicate) + } + + else -> Either.Left(Unit) + } + } + + is And<*> -> { + val results = filter + .filters + .map { f -> + _findOne(f, target, predicate) + } + // If any of the variants has returned that + // we must abort the search then abort the search. + if (results.any { it.isLeft() }) { + // Propagate the error down the pipe. + Either.Left(Unit) + } else { + val fs = results.mapNotNull { it.getOrNull() } + when (fs.size) { + 0 -> Either.Right(null) + 1 -> Either.Right(fs.first()) + else -> Either.Left(Unit) + } + } + } + + else -> { + if (filter.javaClass == target) { + val f = filter as T + val v = predicate(f) + if (v) { + Either.Right(f) + } else { + Either.Right(null) + } + } else { + Either.Right(null) + } + } + } + } + + suspend fun prepare( + directDI: DirectDI, + ciphers: List, + ): (DSecret) -> Boolean + + suspend fun prepareFolders( + directDI: DirectDI, + folders: List, + ): (DFolder) -> Boolean = All.prepareFolders(directDI, folders) + + @Serializable + sealed interface Primitive : DFilter { + val key: String + } + + @Serializable + @SerialName("or") + data class Or( + val filters: Collection, + ) : DFilter { + override suspend fun prepare( + directDI: DirectDI, + ciphers: List, + ) = kotlin.run { + val list = filters + .map { it.prepare(directDI, ciphers) } + return@run { cipher: DSecret -> + list.isEmpty() || list.any { predicate -> predicate(cipher) } + } + } + + override suspend fun prepareFolders( + directDI: DirectDI, + folders: List, + ) = kotlin.run { + val list = filters + .map { it.prepareFolders(directDI, folders) } + return@run { folder: DFolder -> + list.isEmpty() || list.any { predicate -> predicate(folder) } + } + } + } + + @Serializable + @SerialName("and") + data class And( + val filters: Collection, + ) : DFilter { + override suspend fun prepare( + directDI: DirectDI, + ciphers: List, + ) = kotlin.run { + val list = filters + .map { it.prepare(directDI, ciphers) } + return@run { cipher: DSecret -> + list.isEmpty() || list.all { predicate -> predicate(cipher) } + } + } + + override suspend fun prepareFolders( + directDI: DirectDI, + folders: List, + ) = kotlin.run { + val list = filters + .map { it.prepareFolders(directDI, folders) } + return@run { folder: DFolder -> + list.isEmpty() || list.all { predicate -> predicate(folder) } + } + } + } + + @Serializable + @SerialName("all") + data object All : DFilter { + override suspend fun prepare( + directDI: DirectDI, + ciphers: List, + ) = ::predicateCipher + + override suspend fun prepareFolders( + directDI: DirectDI, + folders: List, + ) = ::predicateFolder + + private fun predicateCipher(cipher: DSecret) = true + + private fun predicateFolder(folder: DFolder) = true + } + + // Primitives + + @Serializable + @SerialName("by_id") + data class ById( + val id: String?, + val what: What, + ) : Primitive { + override val key: String = "$id|$what" + + @Serializable + enum class What { + @SerialName("account") + ACCOUNT, + + @SerialName("folder") + FOLDER, + + @SerialName("collection") + COLLECTION, + + @SerialName("organization") + ORGANIZATION, + } + + override suspend fun prepare( + directDI: DirectDI, + ciphers: List, + ) = ::predicateCipher + + override suspend fun prepareFolders( + directDI: DirectDI, + folders: List, + ) = ::predicateFolder + + private fun predicateCipher( + cipher: DSecret, + ) = kotlin.run { + when (what) { + What.COLLECTION -> { + // Special case: check in the set of + // collections. + return@run id in cipher.collectionIds + } + + What.ACCOUNT -> cipher.accountId + What.FOLDER -> cipher.folderId + What.ORGANIZATION -> cipher.organizationId + } == id + } + + private fun predicateFolder( + folder: DFolder, + ) = kotlin.run { + when (what) { + What.FOLDER -> folder.id + What.ACCOUNT -> folder.accountId + What.COLLECTION, + What.ORGANIZATION, + -> { + return@run true + } + } == id + } + } + + @Serializable + @SerialName("by_type") + data class ByType( + val type: DSecret.Type, + ) : Primitive { + override val key: String = "$type" + + override suspend fun prepare( + directDI: DirectDI, + ciphers: List, + ) = ::predicate + + private fun predicate( + cipher: DSecret, + ) = cipher.type == type + } + + @Serializable + @SerialName("by_otp") + data object ByOtp : Primitive { + override val key: String = "otp" + + override suspend fun prepare( + directDI: DirectDI, + ciphers: List, + ) = ::predicate + + private fun predicate( + cipher: DSecret, + ) = cipher.login?.totp != null + } + + @Serializable + @SerialName("by_attachments") + data object ByAttachments : Primitive { + override val key: String = "attachments" + + override suspend fun prepare( + directDI: DirectDI, + ciphers: List, + ) = ::predicate + + private fun predicate( + cipher: DSecret, + ) = cipher.attachments.isNotEmpty() + } + + @Serializable + @SerialName("by_passkeys") + data object ByPasskeys : Primitive { + override val key: String = "passkeys" + + override suspend fun prepare( + directDI: DirectDI, + ciphers: List, + ) = ::predicate + + private fun predicate( + cipher: DSecret, + ) = !cipher.login?.fido2Credentials.isNullOrEmpty() + } + + @Serializable + @SerialName("by_pwd_value") + data class ByPasswordValue( + val value: String?, + ) : Primitive { + override val key: String = "pwd_value|$value" + + override suspend fun prepare( + directDI: DirectDI, + ciphers: List, + ) = ::predicate + + private fun predicate( + cipher: DSecret, + ) = cipher.login?.password == value + } + + @Serializable + @SerialName("by_pwd_strength") + data class ByPasswordStrength( + val score: PasswordStrength.Score, + ) : Primitive { + override val key: String = "$score" + + override suspend fun prepare( + directDI: DirectDI, + ciphers: List, + ) = ::predicate + + private fun predicate( + cipher: DSecret, + ) = cipher.login?.passwordStrength?.score == score + } + + @Serializable + @SerialName("by_pwd_duplicates") + data object ByPasswordDuplicates : Primitive { + override val key: String = "pwd_duplicates" + + override suspend fun prepare( + directDI: DirectDI, + ciphers: List, + ) = kotlin.run { + val set = buildDuplicatesState(ciphers = ciphers) + .asSequence() + .mapNotNull { entry -> + entry.key.takeIf { entry.value > 1 } + } + .toSet() + ::predicate.partially1(set) + } + + /** Counts a number of ciphers with duplicate password */ + fun count( + directDI: DirectDI, + ciphers: List, + ) = buildDuplicatesState(ciphers = ciphers) + .asSequence() + .sumOf { entry -> + entry.value + .takeIf { it > 1 } + ?: 0 + } + + private fun buildDuplicatesState( + ciphers: List, + ): Map { + val map = mutableMapOf() + ciphers.forEach { cipher -> + val password = cipher.login?.password + if (password != null) { + val oldValue = map.getOrElse(password) { 0 } + map[password] = oldValue + 1 + } + } + return map + } + + private fun predicate( + passwords: Set, + cipher: DSecret, + ) = cipher.login?.password in passwords + } + + @Serializable + @SerialName("by_pwd_pwned") + data object ByPasswordPwned : Primitive { + override val key: String = "pwd_pwned" + + override suspend fun prepare( + directDI: DirectDI, + ciphers: List, + ) = kotlin.run { + val set = buildPwnedPasswordsState(directDI = directDI, ciphers = ciphers) + .asSequence() + .mapNotNull { entry -> + entry.key.takeIf { entry.value > 1 } + } + .toSet() + ::predicate.partially1(set) + } + + /** Counts a number of ciphers with pwned password */ + suspend fun count( + directDI: DirectDI, + ciphers: List, + ) = buildPwnedPasswordsState(directDI = directDI, ciphers = ciphers) + .asSequence() + .count { entry -> + entry.value > 1 + } + + private suspend fun buildPwnedPasswordsState( + directDI: DirectDI, + ciphers: List, + ): Map = ioEffect { + val checkPasswordSetLeak: CheckPasswordSetLeak = directDI.instance() + val passwords = ciphers + .asSequence() + .mapNotNull { cipher -> + cipher.login?.password + } + .toSet() + return@ioEffect checkPasswordSetLeak(CheckPasswordSetLeakRequest(passwords)) + .map { + it.mapValues { it.value?.occurrences ?: 0 } + } + .attempt() + .bind() + .getOrElse { emptyMap() } + } + .measure { duration, mutableMap -> + println("pwned calculated in $duration") + } + .bind() + + private fun predicate( + passwords: Set, + cipher: DSecret, + ) = cipher.login?.password in passwords + } + + @Serializable + @SerialName("by_website_pwned") + data object ByWebsitePwned : Primitive { + override val key: String = "website_pwned" + + override suspend fun prepare( + directDI: DirectDI, + ciphers: List, + ) = kotlin.run { + val set = buildDuplicatesState(directDI = directDI, ciphers = ciphers) + ::predicate.partially1(set) + } + + /** Counts a number of ciphers with pwned password */ + suspend fun count( + directDI: DirectDI, + ciphers: List, + ) = buildDuplicatesState(directDI = directDI, ciphers = ciphers) + .size + + private suspend fun buildDuplicatesState( + directDI: DirectDI, + ciphers: List, + ): Set = ioEffect { + val check: CipherBreachCheck = directDI.instance() + val repo: BreachesRepository = directDI.instance() + + val breaches = repo.get() + .handleError { + HibpBreachGroup(emptyList()) + } + .bind() + + ciphers + .filter { + check(it, breaches) + .handleError { false } + .bind() + } + .map { + it.id + } + .toSet() + } + .measure { duration, mutableMap -> + println("pwned accounts calculated in $duration") + } + .bind() + + private fun predicate( + cipherIds: Set, + cipher: DSecret, + ) = cipher.id in cipherIds + } + + @Serializable + @SerialName("by_incomplete") + data object ByIncomplete : Primitive { + override val key: String = "incomplete" + + override suspend fun prepare( + directDI: DirectDI, + ciphers: List, + ) = kotlin.run { + val ids = filterIncomplete(directDI, ciphers) + .map { it.id } + .toSet() + ::predicate.partially1(ids) + } + + private fun predicate( + ids: Set, + cipher: DSecret, + ) = cipher.id in ids + + /** Counts a number of ciphers that might be incomplete */ + fun count( + directDI: DirectDI, + ciphers: List, + ) = filterIncomplete(directDI, ciphers).count() + + private fun filterIncomplete( + directDI: DirectDI, + ciphers: List, + ) = kotlin.run { + val cipherIncompleteCheck = directDI.instance() + ciphers + .asSequence() + .filter { cipher -> + val isIncomplete = cipherIncompleteCheck(cipher) + isIncomplete + } + } + } + + @Serializable + @SerialName("by_expiring") + data object ByExpiring : Primitive { + override val key: String = "expiring" + + override suspend fun prepare( + directDI: DirectDI, + ciphers: List, + ) = kotlin.run { + val ids = filterExpiring(directDI, ciphers) + .map { it.id } + .toSet() + ::predicate.partially1(ids) + } + + private fun predicate( + ids: Set, + cipher: DSecret, + ) = cipher.id in ids + + /** Counts a number of ciphers that might be incomplete */ + fun count( + directDI: DirectDI, + ciphers: List, + ) = filterExpiring(directDI, ciphers).count() + + private fun filterExpiring( + directDI: DirectDI, + ciphers: List, + ) = kotlin.run { + val now = Clock.System.now() + val cipherExpiringCheck = directDI.instance() + ciphers + .asSequence() + .filter { cipher -> + val isExpiring = cipherExpiringCheck(cipher, now) != null + isExpiring + } + } + } + + @Serializable + @SerialName("by_unsecure_websites") + data object ByUnsecureWebsites : Primitive { + override val key: String = "unsecure_websites" + + override suspend fun prepare( + directDI: DirectDI, + ciphers: List, + ) = kotlin.run { + val ids = filterUnsecure(directDI, ciphers) + .map { it.id } + .toSet() + ::predicate.partially1(ids) + } + + private fun predicate( + ids: Set, + cipher: DSecret, + ) = cipher.id in ids + + /** Counts a number of ciphers that contain unsecure websites */ + fun count( + directDI: DirectDI, + ciphers: List, + ) = filterUnsecure(directDI, ciphers).count() + + private fun filterUnsecure( + directDI: DirectDI, + ciphers: List, + ) = kotlin.run { + val cipherUnsecureUrlCheck = directDI.instance() + ciphers + .asSequence() + .filter { cipher -> + val isUnsecure = cipher + .uris + .any { uri -> cipherUnsecureUrlCheck(uri.uri) } + isUnsecure + } + } + } + + @Serializable + @SerialName("by_tfa_websites") + data object ByTfaWebsites : Primitive { + override val key: String = "tfa_websites" + + override suspend fun prepare( + directDI: DirectDI, + ciphers: List, + ) = kotlin.run { + val ids = filterTfa( + directDI = directDI, + ciphers = ciphers, + ) + .map { it.id } + .toSet() + ::predicate.partially1(ids) + } + + private fun predicate( + ids: Set, + cipher: DSecret, + ) = cipher.id in ids + + /** Counts a number of ciphers that contain unsecure websites */ + suspend fun count( + directDI: DirectDI, + ciphers: List, + ) = filterTfa(directDI, ciphers).count() + + private suspend fun filterTfa( + directDI: DirectDI, + ciphers: List, + ) = kotlin.run { + val tfaService = directDI.instance() + val tfa = tfaService.get() + .crashlyticsTap() + .attempt() + .bind() + .getOrNull() + .orEmpty() + ciphers + .asSequence() + .filter { cipher -> + if ( + cipher.login?.totp != null || + !cipher.login?.fido2Credentials.isNullOrEmpty() && + cipher.login?.password.isNullOrEmpty() + ) { + return@filter false + } + + val isUnsecure = match(cipher, tfa).any() + isUnsecure + } + } + + fun match(cipher: DSecret, tfa: List) = cipher + .uris + .asSequence() + .mapNotNull { uri -> + val host = parseHost(uri) + ?: return@mapNotNull null + val result = tfa + .firstOrNull { host in it.domains } + result?.takeIf { "totp" in it.tfa } + } + + private fun parseHost(uri: DSecret.Uri) = if ( + uri.uri.startsWith("http://") || + uri.uri.startsWith("https://") + ) { + val parsedUri = kotlin.runCatching { + Url(uri.uri) + }.getOrElse { + // can not get the domain + null + } + parsedUri + ?.host + // The "www" subdomain is ignored in the database, however + // it's only "www". Other subdomains, such as "photos", + // should be respected. + ?.removePrefix("www.") + } else { + // can not get the domain + null + } + } + + @Serializable + @SerialName("by_passkey_websites") + data object ByPasskeyWebsites : Primitive { + override val key: String = "passkey_websites" + + override suspend fun prepare( + directDI: DirectDI, + ciphers: List, + ) = kotlin.run { + val ids = filterTfa( + directDI = directDI, + ciphers = ciphers, + ) + .map { it.id } + .toSet() + ::predicate.partially1(ids) + } + + private fun predicate( + ids: Set, + cipher: DSecret, + ) = cipher.id in ids + + /** Counts a number of ciphers that contain unsecure websites */ + suspend fun count( + directDI: DirectDI, + ciphers: List, + ) = filterTfa(directDI, ciphers).count() + + private suspend fun filterTfa( + directDI: DirectDI, + ciphers: List, + ) = kotlin.run { + val passkeyService = directDI.instance() + val tfa = passkeyService.get() + .crashlyticsTap() + .attempt() + .bind() + .getOrNull() + .orEmpty() + ciphers + .asSequence() + .filter { cipher -> + if (!cipher.login?.fido2Credentials.isNullOrEmpty()) { + return@filter false + } + + val isUnsecure = match(cipher, tfa).any() + isUnsecure + } + } + + fun match(cipher: DSecret, tfa: List) = cipher + .uris + .asSequence() + .mapNotNull { uri -> + val host = parseHost(uri) + ?: return@mapNotNull null + val result = tfa + .firstOrNull { + host in it.domains || it.domains + .any { domain -> + val endsWith = host.endsWith(domain) + if (!endsWith) { + return@any false + } + + val i = host.length - domain.length + if (i > 0) { + val leadingChar = host[i - 1] + leadingChar == '.' + } else { + false + } + } + } + result?.takeIf { "signin" in it.features } + } + + private fun parseHost(uri: DSecret.Uri) = if ( + uri.uri.startsWith("http://") || + uri.uri.startsWith("https://") + ) { + val parsedUri = kotlin.runCatching { + Url(uri.uri) + }.getOrElse { + // can not get the domain + null + } + parsedUri + ?.host + // The "www" subdomain is ignored in the database, however + // it's only "www". Other subdomains, such as "photos", + // should be respected. + ?.removePrefix("www.") + } else { + // can not get the domain + null + } + } + + @Serializable + @SerialName("by_duplicate_websites") + data object ByDuplicateWebsites : Primitive { + override val key: String = "duplicate_websites" + + override suspend fun prepare( + directDI: DirectDI, + ciphers: List, + ) = kotlin.run { + val ids = filterDuplicateWebsites( + directDI = directDI, + ciphers = ciphers, + ) + .map { it.id } + .toSet() + ::predicate.partially1(ids) + } + + private fun predicate( + ids: Set, + cipher: DSecret, + ) = cipher.id in ids + + /** Counts a number of ciphers that contain unsecure websites */ + suspend fun count( + directDI: DirectDI, + ciphers: List, + ) = filterDuplicateWebsites(directDI, ciphers).count() + + private suspend fun filterDuplicateWebsites( + directDI: DirectDI, + ciphers: List, + ) = kotlin.run { + val cipherUrlDuplicateCheck = directDI.instance() + ciphers + .filter { cipher -> + val uris = cipher.uris + if (uris.isEmpty()) { + return@filter false + } + + for (i in uris.indices) { + for (j in uris.indices) { + if (i == j) { + continue + } + + val a = uris[i] + val b = uris[j] + val duplicate = cipherUrlDuplicateCheck(a, b) + .attempt() + .bind() + .isRight { it != null } + if (duplicate) { + return@filter true + } + } + } + + false + } + } + } + + @Serializable + @SerialName("by_sync") + data class BySync( + val synced: Boolean, + ) : Primitive { + override val key: String = "$synced" + + override suspend fun prepare( + directDI: DirectDI, + ciphers: List, + ) = ::predicateCipher + + override suspend fun prepareFolders( + directDI: DirectDI, + folders: List, + ) = ::predicateFolder + + private fun predicateCipher( + cipher: DSecret, + ) = cipher.synced == synced + + private fun predicateFolder( + folder: DFolder, + ) = folder.synced == synced + } + + @Serializable + @SerialName("by_repromt") + data class ByReprompt( + val reprompt: Boolean, + ) : Primitive { + override val key: String = "$reprompt" + + override suspend fun prepare( + directDI: DirectDI, + ciphers: List, + ) = ::predicateCipher + + private fun predicateCipher( + cipher: DSecret, + ) = cipher.reprompt == reprompt + } + + @Serializable + @SerialName("by_error") + data class ByError( + val error: Boolean, + ) : Primitive { + override val key: String = "$error" + + override suspend fun prepare( + directDI: DirectDI, + ciphers: List, + ) = ::predicateCipher + + override suspend fun prepareFolders( + directDI: DirectDI, + folders: List, + ) = ::predicateFolder + + private fun predicateCipher( + cipher: DSecret, + ) = cipher.service.error.exists(cipher.revisionDate) == error + + private fun predicateFolder( + folder: DFolder, + ) = folder.service.error.exists(folder.revisionDate) == error + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/DFolder.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/DFolder.kt new file mode 100644 index 00000000..70b59f61 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/DFolder.kt @@ -0,0 +1,21 @@ +package com.artemchep.keyguard.common.model + +import com.artemchep.keyguard.core.store.bitwarden.BitwardenService +import com.artemchep.keyguard.core.store.bitwarden.exists +import kotlinx.datetime.Instant + +data class DFolder( + val id: String, + val accountId: String, + val revisionDate: Instant, + val service: BitwardenService, + val deleted: Boolean, + val synced: Boolean, + val name: String, +) : HasAccountId { + companion object; + + val hasError = service.error.exists(revisionDate) + + override fun accountId(): String = accountId +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/DFolderTree.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/DFolderTree.kt new file mode 100644 index 00000000..9f7c71da --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/DFolderTree.kt @@ -0,0 +1,21 @@ +package com.artemchep.keyguard.common.model + +data class DFolderTree( + val folder: DFolder, + val hierarchy: List, +) { + data class Node( + val name: String, + val folder: DFolder, + ) +} + +data class DFolderTree2( + val folder: T, + val hierarchy: List>, +) { + data class Node( + val name: String, + val folder: T, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/DGeneratorEmailRelay.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/DGeneratorEmailRelay.kt new file mode 100644 index 00000000..8b98fd3c --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/DGeneratorEmailRelay.kt @@ -0,0 +1,22 @@ +package com.artemchep.keyguard.common.model + +import com.artemchep.keyguard.ui.icons.generateAccentColors +import kotlinx.collections.immutable.ImmutableMap +import kotlinx.datetime.Instant + +data class DGeneratorEmailRelay( + val id: String? = null, + val name: String, + val type: String, + val data: ImmutableMap, + val createdDate: Instant, +) : Comparable { + val accentColor = run { + val colors = generateAccentColors(name) + colors + } + + override fun compareTo(other: DGeneratorEmailRelay): Int { + return name.compareTo(other.name, ignoreCase = true) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/DGeneratorHistory.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/DGeneratorHistory.kt new file mode 100644 index 00000000..52153a5d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/DGeneratorHistory.kt @@ -0,0 +1,12 @@ +package com.artemchep.keyguard.common.model + +import kotlinx.datetime.Instant + +data class DGeneratorHistory( + val id: String? = null, + val value: String, + val createdDate: Instant, + val isPassword: Boolean, + val isUsername: Boolean, + val isEmailRelay: Boolean, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/DHibp.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/DHibp.kt new file mode 100644 index 00000000..b00f041b --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/DHibp.kt @@ -0,0 +1,19 @@ +package com.artemchep.keyguard.common.model + +import kotlinx.datetime.Instant + +data class DHibpC( + val leaks: List, +) + +data class DHibp( + val title: String, + val name: String, + val website: String, + val icon: String, + val description: String, + val count: Int?, + val occurredAt: Instant?, + val reportedAt: Instant?, + val dataClasses: List, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/DKey.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/DKey.kt new file mode 100644 index 00000000..cb0155b0 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/DKey.kt @@ -0,0 +1,27 @@ +package com.artemchep.keyguard.common.model + +data class DKey( + val byteArray: ByteArray, +) { + // /** +// * Lazily encoded byte array into a +// * form of base 64 symbols. +// */ +// val base64 by lazy { +// Base64.encode(byteArray).let(::String) +// } + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (other == null || this::class != other::class) return false + + other as DKey + + if (!byteArray.contentEquals(other.byteArray)) return false + + return true + } + + override fun hashCode(): Int { + return byteArray.contentHashCode() + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/DMeta.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/DMeta.kt new file mode 100644 index 00000000..4a244823 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/DMeta.kt @@ -0,0 +1,25 @@ +package com.artemchep.keyguard.common.model + +import kotlinx.datetime.Instant + +data class DMeta( + val accountId: AccountId, + val lastSyncTimestamp: Instant? = null, + val lastSyncResult: LastSyncResult? = null, +) : HasAccountId { + override fun accountId(): String = accountId.id + + sealed interface LastSyncResult { + data object Success : LastSyncResult + + data class Failure( + val timestamp: Instant, + val reason: String? = null, + /** + * `true` if you should ask user to authenticate to use + * this account, `false` otherwise. + */ + val requiresAuthentication: Boolean = false, + ) : LastSyncResult + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/DOrganization.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/DOrganization.kt new file mode 100644 index 00000000..a494ceda --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/DOrganization.kt @@ -0,0 +1,21 @@ +package com.artemchep.keyguard.common.model + +import com.artemchep.keyguard.ui.icons.AccentColors +import kotlinx.datetime.Instant + +data class DOrganization( + val id: String, + val accountId: String, + val revisionDate: Instant, + val keyBase64: String, + val name: String, + val accentColor: AccentColors, + val selfHost: Boolean, +) : HasAccountId, Comparable { + companion object; + + override fun accountId(): String = accountId + + override fun compareTo(other: DOrganization): Int = + name.compareTo(other.name, ignoreCase = true) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/DProfile.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/DProfile.kt new file mode 100644 index 00000000..261c5f8c --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/DProfile.kt @@ -0,0 +1,30 @@ +package com.artemchep.keyguard.common.model + +import com.artemchep.keyguard.ui.icons.AccentColors + +data class DProfile( + val accountId: String, + val profileId: String, + val keyBase64: String, + val privateKeyBase64: String, + val accountHost: String, + val accountUrl: String, + val email: String, + val emailVerified: Boolean, + val accentColor: AccentColors, + val name: String, + val premium: Boolean, + val securityStamp: String?, + val twoFactorEnabled: Boolean, + val masterPasswordHint: String?, + val unofficialServer: Boolean, +) : HasAccountId, Comparable { + private val comparator = compareBy( + { name }, + { email }, + ) + + override fun compareTo(other: DProfile): Int = comparator.compare(this, other) + + override fun accountId(): String = accountId +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/DSecret.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/DSecret.kt new file mode 100644 index 00000000..7f8fec10 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/DSecret.kt @@ -0,0 +1,602 @@ +@file:JvmName("DSecretFun") + +package com.artemchep.keyguard.common.model + +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.CreditCard +import androidx.compose.material.icons.outlined.Password +import androidx.compose.material.icons.outlined.PermIdentity +import androidx.compose.ui.graphics.Color +import arrow.optics.optics +import com.artemchep.keyguard.common.io.attempt +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.io.toIO +import com.artemchep.keyguard.common.usecase.GetTotpCode +import com.artemchep.keyguard.core.store.bitwarden.BitwardenService +import com.artemchep.keyguard.core.store.bitwarden.exists +import com.artemchep.keyguard.feature.auth.common.util.REGEX_EMAIL +import com.artemchep.keyguard.feature.auth.common.util.REGEX_PHONE_NUMBER +import com.artemchep.keyguard.feature.favicon.FaviconUrl +import com.artemchep.keyguard.provider.bitwarden.usecase.util.canDelete +import com.artemchep.keyguard.provider.bitwarden.usecase.util.canEdit +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.icons.KeyguardNote +import com.artemchep.keyguard.ui.icons.Stub +import com.artemchep.keyguard.ui.icons.generateAccentColors +import kotlinx.coroutines.flow.map +import kotlinx.datetime.Instant + +@optics +data class DSecret( + val id: String, + val accountId: String, + val folderId: String?, + val organizationId: String?, + val collectionIds: Set, + val revisionDate: Instant, + val createdDate: Instant?, + val deletedDate: Instant?, + val service: BitwardenService, + // common + val name: String, + val notes: String, + val favorite: Boolean, + val reprompt: Boolean, + val synced: Boolean, + val uris: List = emptyList(), + val fields: List = emptyList(), + val attachments: List = emptyList(), + // types + val type: Type, + val login: Login? = null, + val card: Card? = null, + val identity: Identity? = null, +) : HasAccountId { + companion object { + private const val ignoreLength = 3 + + private val ignoreWords = setOf( + // popular domains + "com", + "tk", + "cn", + "de", + "net", + "uk", + "org", + "nl", + "icu", + "ru", + "eu", + // rising domains + "icu", + "top", + "xyz", + "site", + "online", + "club", + "wang", + "vip", + "shop", + "work", + ) + } + + val hasError = service.error.exists(revisionDate) + + val deleted: Boolean get() = deletedDate != null + + val accentLight: Color + val accentDark: Color + + init { + val colors = generateAccentColors(service.remote?.id ?: id) + accentLight = colors.light + accentDark = colors.dark + } + + val favicon: FaviconUrl? = kotlin.run { + val siteUrl = uris + .firstOrNull { uri -> + uri.uri.startsWith("http://") || + uri.uri.startsWith("https://") + } + ?.uri + siteUrl?.let { + FaviconUrl( + serverId = accountId, + url = it, + ) + } + } + + data class SearchToken( + val priority: Float, + val value: String, + ) + + val tokens = kotlin.run { + val out = mutableListOf() + // Split the name into tokens + name.lowercase().replace("[\\.\\,\\[\\]\\!]".toRegex(), " ") + .split(' ') + .forEach { + if (it.length <= ignoreLength || it in ignoreWords) { + return@forEach + } + out += SearchToken( + priority = 0.8f, + value = it, + ) + } + // Extract domain name from the username + // if that looks like an email. + if (login?.username != null) { + val tokens = login.username.split("@") + if (tokens.size == 2) { // this is an email + val domain = tokens[1] + domain + .lowercase() + .split('.') + .forEach { + if (it.length <= ignoreLength || it in ignoreWords) { + return@forEach + } + out += SearchToken( + priority = 1f, + value = it, + ) + } + // an email might contain extra info separated by the + sign + val username = tokens[0] + val extras = username.split('+') + if (extras.size == 2) { + val extrasInfo = extras[1] + extrasInfo + .lowercase() + .split('.') + .forEach { + if (it.length <= ignoreLength || it in ignoreWords) { + return@forEach + } + out += SearchToken( + priority = 0.8f, + value = it, + ) + } + } + } + } + out + } + + override fun accountId(): String = accountId + + enum class Type { + None, + Login, + SecureNote, + Card, + Identity, + } + + sealed interface Attachment { + val id: String + val url: String? + + data class Remote( + override val id: String, + override val url: String?, + val remoteCipherId: String, + val fileName: String, + val keyBase64: String?, + val size: Long, + ) : Attachment { + companion object + } + + data class Local( + override val id: String, + override val url: String, + val fileName: String, + val size: Long? = null, + ) : Attachment { + companion object + } + } + + @optics + data class Field( + val name: String? = null, + val value: String? = null, + val linkedId: LinkedId? = null, + val type: Type, + ) { + companion object; + + enum class Type { + Text, + Hidden, + Boolean, + Linked, + } + + enum class LinkedId( + val type: DSecret.Type, + ) { + Login_Username(type = DSecret.Type.Login), + Login_Password(type = DSecret.Type.Login), + + // card + Card_CardholderName(type = DSecret.Type.Card), + Card_ExpMonth(type = DSecret.Type.Card), + Card_ExpYear(type = DSecret.Type.Card), + Card_Code(type = DSecret.Type.Card), + Card_Brand(type = DSecret.Type.Card), + Card_Number(type = DSecret.Type.Card), + + // identity + Identity_Title(type = DSecret.Type.Identity), + Identity_MiddleName(type = DSecret.Type.Identity), + Identity_Address1(type = DSecret.Type.Identity), + Identity_Address2(type = DSecret.Type.Identity), + Identity_Address3(type = DSecret.Type.Identity), + Identity_City(type = DSecret.Type.Identity), + Identity_State(type = DSecret.Type.Identity), + Identity_PostalCode(type = DSecret.Type.Identity), + Identity_Country(type = DSecret.Type.Identity), + Identity_Company(type = DSecret.Type.Identity), + Identity_Email(type = DSecret.Type.Identity), + Identity_Phone(type = DSecret.Type.Identity), + Identity_Ssn(type = DSecret.Type.Identity), + Identity_Username(type = DSecret.Type.Identity), + Identity_PassportNumber(type = DSecret.Type.Identity), + Identity_LicenseNumber(type = DSecret.Type.Identity), + Identity_FirstName(type = DSecret.Type.Identity), + Identity_LastName(type = DSecret.Type.Identity), + Identity_FullName(type = DSecret.Type.Identity), + } + } + + @optics + data class Uri( + val uri: String, + val match: MatchType? = null, + ) : LinkInfo { + companion object; + + enum class MatchType { + Domain, + Host, + StartsWith, + Exact, + RegularExpression, + Never, + ; + + companion object { + val default = Domain + } + } + } + + // + // Types + // + + @optics + data class Login( + val username: String? = null, + val password: String? = null, + val passwordStrength: PasswordStrength? = null, + val passwordRevisionDate: Instant? = null, + val passwordHistory: List = emptyList(), + val fido2Credentials: List = emptyList(), + val totp: Totp? = null, + ) { + companion object; + + @optics + data class PasswordHistory( + val password: String, + val lastUsedDate: Instant, + ) { + companion object; + + val id = "$password|timestamp=$lastUsedDate" + } + + @optics + data class Totp( + val raw: String, + val token: TotpToken, + ) { + companion object + } + + data class Fido2Credentials( + val credentialId: String, + val keyType: String, // public-key + val keyAlgorithm: String, // ECDSA + val keyCurve: String, // P-256 + val keyValue: String, + val rpId: String, + val rpName: String, + val counter: Int?, + val userHandle: String, + val userName: String?, + val userDisplayName: String?, + val discoverable: Boolean, + val creationDate: Instant, + ) + } + + @optics + data class Card( + val cardholderName: String? = null, + val brand: String? = null, + val number: String? = null, + val fromMonth: String? = null, + val fromYear: String? = null, + val expMonth: String? = null, + val expYear: String? = null, + val code: String? = null, + ) { + companion object; + + val creditCardType = brand?.let(creditCards::firstOrNullByBrand) + ?: number?.let(creditCards::firstOrNullByNumber) + } + + @optics + data class Identity( + val title: String? = null, + val firstName: String? = null, + val middleName: String? = null, + val lastName: String? = null, + val address1: String? = null, + val address2: String? = null, + val address3: String? = null, + val city: String? = null, + val state: String? = null, + val postalCode: String? = null, + val country: String? = null, + val company: String? = null, + val email: String? = null, + val phone: String? = null, + val ssn: String? = null, + val username: String? = null, + val passportNumber: String? = null, + val licenseNumber: String? = null, + ) { + companion object + } +} + +fun DSecret.canDelete() = service.canDelete() + +fun DSecret.canEdit() = service.canEdit() + +fun DSecret.Attachment.fileName() = when (this) { + is DSecret.Attachment.Local -> fileName + is DSecret.Attachment.Remote -> fileName +} + +fun DSecret.Attachment.fileSize() = when (this) { + is DSecret.Attachment.Local -> size + is DSecret.Attachment.Remote -> size +} + +fun DSecret.Type.iconImageVector() = when (this) { + DSecret.Type.Login -> Icons.Outlined.Password + DSecret.Type.Card -> Icons.Outlined.CreditCard + DSecret.Type.Identity -> Icons.Outlined.PermIdentity + DSecret.Type.SecureNote -> Icons.Outlined.KeyguardNote + DSecret.Type.None -> Icons.Stub +} + +fun DSecret.Type.titleH() = when (this) { + DSecret.Type.Login -> Res.strings.cipher_type_login + DSecret.Type.Card -> Res.strings.cipher_type_card + DSecret.Type.Identity -> Res.strings.cipher_type_identity + DSecret.Type.SecureNote -> Res.strings.cipher_type_note + DSecret.Type.None -> Res.strings.cipher_type_unknown +} + +fun DSecret.Uri.MatchType.titleH() = when (this) { + DSecret.Uri.MatchType.Domain -> Res.strings.uri_match_detection_domain_title + DSecret.Uri.MatchType.Host -> Res.strings.uri_match_detection_host_title + DSecret.Uri.MatchType.StartsWith -> Res.strings.uri_match_detection_startswith_title + DSecret.Uri.MatchType.Exact -> Res.strings.uri_match_detection_exact_title + DSecret.Uri.MatchType.RegularExpression -> Res.strings.uri_match_detection_regex_title + DSecret.Uri.MatchType.Never -> Res.strings.uri_match_detection_never_title +} + +fun DSecret.Field.LinkedId.titleH() = when (this) { + DSecret.Field.LinkedId.Login_Username -> Res.strings.username + DSecret.Field.LinkedId.Login_Password -> Res.strings.password + DSecret.Field.LinkedId.Card_CardholderName -> Res.strings.cardholder_name + DSecret.Field.LinkedId.Card_ExpMonth -> Res.strings.card_expiry_month + DSecret.Field.LinkedId.Card_ExpYear -> Res.strings.card_expiry_year + DSecret.Field.LinkedId.Card_Code -> Res.strings.card_cvv + DSecret.Field.LinkedId.Card_Brand -> Res.strings.card_type + DSecret.Field.LinkedId.Card_Number -> Res.strings.card_number + DSecret.Field.LinkedId.Identity_Title -> Res.strings.identity_first_name + DSecret.Field.LinkedId.Identity_MiddleName -> Res.strings.identity_middle_name + DSecret.Field.LinkedId.Identity_Address1 -> Res.strings.address1 + DSecret.Field.LinkedId.Identity_Address2 -> Res.strings.address2 + DSecret.Field.LinkedId.Identity_Address3 -> Res.strings.address3 + DSecret.Field.LinkedId.Identity_City -> Res.strings.city + DSecret.Field.LinkedId.Identity_State -> Res.strings.state + DSecret.Field.LinkedId.Identity_PostalCode -> Res.strings.postal_code + DSecret.Field.LinkedId.Identity_Country -> Res.strings.country + DSecret.Field.LinkedId.Identity_Company -> Res.strings.company + DSecret.Field.LinkedId.Identity_Email -> Res.strings.email + DSecret.Field.LinkedId.Identity_Phone -> Res.strings.phone_number + DSecret.Field.LinkedId.Identity_Ssn -> Res.strings.ssn + DSecret.Field.LinkedId.Identity_Username -> Res.strings.username + DSecret.Field.LinkedId.Identity_PassportNumber -> Res.strings.passport_number + DSecret.Field.LinkedId.Identity_LicenseNumber -> Res.strings.license_number + DSecret.Field.LinkedId.Identity_FirstName -> Res.strings.identity_first_name + DSecret.Field.LinkedId.Identity_LastName -> Res.strings.identity_last_name + DSecret.Field.LinkedId.Identity_FullName -> Res.strings.identity_full_name +} + +fun DSecret.contains(hint: AutofillHint) = when (hint) { + AutofillHint.EMAIL_ADDRESS -> login?.username != null && login.username.matches(REGEX_EMAIL) + AutofillHint.USERNAME -> login?.username != null + AutofillHint.PASSWORD -> login?.password != null + AutofillHint.WIFI_PASSWORD -> false // not supported + AutofillHint.POSTAL_ADDRESS -> + identity?.address1 != null || + identity?.address2 != null || + identity?.address3 != null + + AutofillHint.POSTAL_CODE -> identity?.postalCode != null + AutofillHint.CREDIT_CARD_NUMBER -> card?.number != null + AutofillHint.CREDIT_CARD_SECURITY_CODE -> card?.code != null + AutofillHint.CREDIT_CARD_EXPIRATION_DATE -> + card?.expYear != null || + card?.expMonth != null + + AutofillHint.CREDIT_CARD_EXPIRATION_MONTH -> card?.expMonth != null + AutofillHint.CREDIT_CARD_EXPIRATION_YEAR -> card?.expYear != null + AutofillHint.CREDIT_CARD_EXPIRATION_DAY -> false // not supported + AutofillHint.POSTAL_ADDRESS_COUNTRY -> identity?.country != null + AutofillHint.POSTAL_ADDRESS_REGION -> false // not supported + AutofillHint.POSTAL_ADDRESS_LOCALITY -> false // not supported + AutofillHint.POSTAL_ADDRESS_STREET_ADDRESS -> identity?.address2 != null + AutofillHint.POSTAL_ADDRESS_EXTENDED_ADDRESS -> false // not supported + AutofillHint.POSTAL_ADDRESS_EXTENDED_POSTAL_CODE -> false // not supported + AutofillHint.POSTAL_ADDRESS_APT_NUMBER -> identity?.address1 != null + AutofillHint.POSTAL_ADDRESS_DEPENDENT_LOCALITY -> false // not supported + AutofillHint.PERSON_NAME -> identity?.firstName != null + AutofillHint.PERSON_NAME_GIVEN -> false // not supported + AutofillHint.PERSON_NAME_FAMILY -> identity?.lastName != null + AutofillHint.PERSON_NAME_MIDDLE -> identity?.middleName != null + AutofillHint.PERSON_NAME_MIDDLE_INITIAL -> identity?.middleName != null + AutofillHint.PERSON_NAME_PREFIX -> false // not supported + AutofillHint.PERSON_NAME_SUFFIX -> false // not supported + AutofillHint.PHONE_NUMBER -> identity?.phone != null + AutofillHint.PHONE_NUMBER_DEVICE -> false // not supported + AutofillHint.PHONE_COUNTRY_CODE -> identity?.phone != null // TODO: Extract country code + AutofillHint.PHONE_NATIONAL -> false // not supported + AutofillHint.NEW_USERNAME -> false // not supported + AutofillHint.NEW_PASSWORD -> false // not supported + AutofillHint.GENDER -> false // not supported + AutofillHint.BIRTH_DATE_FULL -> false // not supported + AutofillHint.BIRTH_DATE_DAY -> false // not supported + AutofillHint.BIRTH_DATE_MONTH -> false // not supported + AutofillHint.BIRTH_DATE_YEAR -> false // not supported + AutofillHint.SMS_OTP -> false // not supported + AutofillHint.EMAIL_OTP -> false // not supported + AutofillHint.APP_OTP -> login?.totp != null + AutofillHint.NOT_APPLICABLE -> false // not supported + AutofillHint.PROMO_CODE -> false // not supported + AutofillHint.UPI_VPA -> false // not supported + AutofillHint.OFF -> false +} + +fun DSecret.get( + hint: AutofillHint, + getTotpCode: GetTotpCode, +) = ioEffect { + when (hint) { + AutofillHint.EMAIL_ADDRESS -> login?.username + AutofillHint.USERNAME -> login?.username + AutofillHint.PASSWORD -> login?.password + AutofillHint.WIFI_PASSWORD -> null + AutofillHint.POSTAL_ADDRESS -> null + AutofillHint.POSTAL_CODE -> identity?.postalCode + AutofillHint.CREDIT_CARD_NUMBER -> card?.number + AutofillHint.CREDIT_CARD_SECURITY_CODE -> card?.code + AutofillHint.CREDIT_CARD_EXPIRATION_DATE -> null + AutofillHint.CREDIT_CARD_EXPIRATION_MONTH -> card?.expMonth + AutofillHint.CREDIT_CARD_EXPIRATION_YEAR -> card?.expYear + AutofillHint.CREDIT_CARD_EXPIRATION_DAY -> null + AutofillHint.POSTAL_ADDRESS_COUNTRY -> identity?.country + AutofillHint.POSTAL_ADDRESS_REGION -> null + AutofillHint.POSTAL_ADDRESS_LOCALITY -> null + AutofillHint.POSTAL_ADDRESS_STREET_ADDRESS -> identity?.address2 + AutofillHint.POSTAL_ADDRESS_EXTENDED_ADDRESS -> null + AutofillHint.POSTAL_ADDRESS_EXTENDED_POSTAL_CODE -> null + AutofillHint.POSTAL_ADDRESS_APT_NUMBER -> identity?.address1 + AutofillHint.POSTAL_ADDRESS_DEPENDENT_LOCALITY -> null + AutofillHint.PERSON_NAME -> identity?.firstName + AutofillHint.PERSON_NAME_GIVEN -> null + AutofillHint.PERSON_NAME_FAMILY -> identity?.lastName + AutofillHint.PERSON_NAME_MIDDLE -> identity?.middleName + AutofillHint.PERSON_NAME_MIDDLE_INITIAL -> identity?.middleName + AutofillHint.PERSON_NAME_PREFIX -> null + AutofillHint.PERSON_NAME_SUFFIX -> null + AutofillHint.PHONE_NUMBER -> identity?.phone + ?: login?.username?.takeIf { REGEX_PHONE_NUMBER.matches(it) } + + AutofillHint.PHONE_NUMBER_DEVICE -> null + AutofillHint.PHONE_COUNTRY_CODE -> identity?.phone // TODO: Extract country code + AutofillHint.PHONE_NATIONAL -> null + AutofillHint.NEW_USERNAME -> null + AutofillHint.NEW_PASSWORD -> null + AutofillHint.GENDER -> null + AutofillHint.BIRTH_DATE_FULL -> null + AutofillHint.BIRTH_DATE_DAY -> null + AutofillHint.BIRTH_DATE_MONTH -> null + AutofillHint.BIRTH_DATE_YEAR -> null + AutofillHint.SMS_OTP -> null + AutofillHint.EMAIL_OTP -> null + AutofillHint.APP_OTP -> login?.totp?.token?.let { + getTotpCode(it) + .map { it.code } + .toIO() + .bind() + } + + AutofillHint.NOT_APPLICABLE -> null + AutofillHint.PROMO_CODE -> null + AutofillHint.UPI_VPA -> null + AutofillHint.OFF -> null + } +} + +fun DSecret.gett( + hints: Set, + getTotpCode: GetTotpCode, +) = ioEffect { + val hintsWithDepth = hints + .map { hint -> + val variants = zzMap[hint].orEmpty() + .toMutableList() + .apply { + val self = AutofillMatcher( + hint = hint, + ) + add(0, self) + } + hint to variants + } + + val out = mutableMapOf() + do { + var shouldLoop = false + hintsWithDepth.forEach { (hint, variants) -> + if (variants.isEmpty()) { + return@forEach + } + + val variant = variants.removeFirst() + val value = get( + hint = variant.hint, + getTotpCode = getTotpCode, + ).attempt().bind().getOrNull() + if (value.isNullOrEmpty()) { + shouldLoop = shouldLoop || variants.isNotEmpty() + return@forEach + } + + out[hint] = value + variants.clear() + } + } while (shouldLoop) + out +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/DSecretDuplicateGroup.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/DSecretDuplicateGroup.kt new file mode 100644 index 00000000..5ddb05dd --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/DSecretDuplicateGroup.kt @@ -0,0 +1,7 @@ +package com.artemchep.keyguard.common.model + +data class DSecretDuplicateGroup( + val id: String, + val accuracy: Float, + val ciphers: List, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/DSend.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/DSend.kt new file mode 100644 index 00000000..a4124c0b --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/DSend.kt @@ -0,0 +1,106 @@ +@file:JvmName("DSendFun") + +package com.artemchep.keyguard.common.model + +import androidx.compose.material.icons.Icons +import androidx.compose.ui.graphics.Color +import arrow.optics.optics +import com.artemchep.keyguard.common.util.flowOfTime +import com.artemchep.keyguard.core.store.bitwarden.BitwardenService +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.icons.KeyguardAttachment +import com.artemchep.keyguard.ui.icons.KeyguardNote +import com.artemchep.keyguard.ui.icons.Stub +import com.artemchep.keyguard.ui.icons.generateAccentColors +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.stateIn +import kotlinx.datetime.Clock +import kotlinx.datetime.Instant + +@optics +data class DSend( + val id: String, + val accountId: String, + val accessId: String, + val keyBase64: String?, + val revisionDate: Instant, + val createdDate: Instant?, + val deletedDate: Instant?, + val expirationDate: Instant?, + val service: BitwardenService, + // common + val name: String, + val notes: String, + val accessCount: Int, + val maxAccessCount: Int? = null, + val password: String? = null, + val disabled: Boolean, + val hideEmail: Boolean, + val type: Type, + val text: Text?, + val file: File?, +) : HasAccountId { + companion object { + } + + val accentLight: Color + val accentDark: Color + + init { + val colors = generateAccentColors(service.remote?.id ?: id) + accentLight = colors.light + accentDark = colors.dark + } + + enum class Type { + None, + File, + Text, + } + + data class File( + val id: String, + val fileName: String, + val keyBase64: String?, + val size: Long? = null, + ) { + companion object; + } + + data class Text( + val text: String? = null, + val hidden: Boolean? = null, + ) { + companion object; + } + + override fun accountId(): String = accountId +} + +val DSend.expiredFlow: StateFlow + get() = flowOfTime() + .map { expired } + .stateIn( + scope = GlobalScope, + started = SharingStarted.WhileSubscribed(1000L), + initialValue = expired, + ) + +val DSend.expired: Boolean + get() = expirationDate != null && + expirationDate <= Clock.System.now() + +fun DSend.Type.iconImageVector() = when (this) { + DSend.Type.Text -> Icons.Outlined.KeyguardNote + DSend.Type.File -> Icons.Outlined.KeyguardAttachment + DSend.Type.None -> Icons.Stub +} + +fun DSend.Type.titleH() = when (this) { + DSend.Type.Text -> Res.strings.send_type_text + DSend.Type.File -> Res.strings.send_type_file + DSend.Type.None -> Res.strings.send_type_unknown +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/DSendFilter.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/DSendFilter.kt new file mode 100644 index 00000000..c862c74d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/DSendFilter.kt @@ -0,0 +1,185 @@ +package com.artemchep.keyguard.common.model + +import arrow.core.Either +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import org.kodein.di.DirectDI + +@Serializable +sealed interface DSendFilter { + companion object { + inline fun findOne( + filter: DSendFilter, + noinline predicate: (T) -> Boolean = { true }, + ): T? = findOne( + filter = filter, + target = T::class.java, + predicate = predicate, + ) + + fun findOne( + filter: DSendFilter, + target: Class, + predicate: (T) -> Boolean = { true }, + ): T? = _findOne( + filter = filter, + target = target, + predicate = predicate, + ).getOrNull() + + private fun _findOne( + filter: DSendFilter, + target: Class, + predicate: (T) -> Boolean = { true }, + ): Either = when (filter) { + is Or<*> -> { + when (filter.filters.size) { + 0 -> Either.Right(null) + 1 -> { + val f = filter.filters.first() + _findOne(f, target, predicate) + } + + else -> Either.Left(Unit) + } + } + + is And<*> -> { + val results = filter + .filters + .map { f -> + _findOne(f, target) + } + // If any of the variants has returned that + // we must abort the search then abort the search. + if (results.any { it.isLeft() }) { + // Propagate the error down the pipe. + Either.Left(Unit) + } else { + val fs = results.mapNotNull { it.getOrNull() } + when (fs.size) { + 0 -> Either.Right(null) + 1 -> Either.Right(fs.first()) + else -> Either.Left(Unit) + } + } + } + + else -> { + if (filter.javaClass == target) { + val f = filter as T + val v = predicate(f) + if (v) { + Either.Right(f) + } else { + Either.Right(null) + } + } else { + Either.Right(null) + } + } + } + } + + suspend fun prepare( + directDI: DirectDI, + ciphers: List, + ): (DSend) -> Boolean + + @Serializable + sealed interface Primitive : DSendFilter { + val key: String + } + + @Serializable + @SerialName("or") + data class Or( + val filters: Collection, + ) : DSendFilter { + override suspend fun prepare( + directDI: DirectDI, + ciphers: List, + ) = kotlin.run { + val list = filters + .map { it.prepare(directDI, ciphers) } + return@run { cipher: DSend -> + list.isEmpty() || list.any { predicate -> predicate(cipher) } + } + } + } + + @Serializable + @SerialName("and") + data class And( + val filters: Collection, + ) : DSendFilter { + override suspend fun prepare( + directDI: DirectDI, + ciphers: List, + ) = kotlin.run { + val list = filters + .map { it.prepare(directDI, ciphers) } + return@run { cipher: DSend -> + list.isEmpty() || list.all { predicate -> predicate(cipher) } + } + } + } + + @Serializable + @SerialName("all") + data object All : DSendFilter { + override suspend fun prepare( + directDI: DirectDI, + ciphers: List, + ) = ::predicateCipher + + private fun predicateCipher(cipher: DSend) = true + } + + // Primitives + + @Serializable + @SerialName("by_id") + data class ById( + val id: String?, + val what: What, + ) : Primitive { + override val key: String = "$id|$what" + + @Serializable + enum class What { + @SerialName("account") + ACCOUNT, + } + + override suspend fun prepare( + directDI: DirectDI, + ciphers: List, + ) = ::predicateCipher + + private fun predicateCipher( + cipher: DSend, + ) = kotlin.run { + when (what) { + What.ACCOUNT -> cipher.accountId + } == id + } + } + + @Serializable + @SerialName("by_type") + data class ByType( + val type: DSend.Type, + ) : Primitive { + override val key: String = "$type" + + override suspend fun prepare( + directDI: DirectDI, + ciphers: List, + ) = ::predicate + + private fun predicate( + cipher: DSend, + ) = cipher.type == type + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/DownloadAttachmentRequest.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/DownloadAttachmentRequest.kt new file mode 100644 index 00000000..d5ea3dca --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/DownloadAttachmentRequest.kt @@ -0,0 +1,18 @@ +package com.artemchep.keyguard.common.model + +sealed interface DownloadAttachmentRequest { + data class ByLocalCipherAttachment( + val localCipherId: String, + val remoteCipherId: String?, + val attachmentId: String, + ) : DownloadAttachmentRequest { + constructor( + cipher: DSecret, + attachment: DSecret.Attachment.Remote, + ) : this( + localCipherId = cipher.id, + remoteCipherId = cipher.service.remote?.id, + attachmentId = attachment.id, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/DownloadAttachmentRequestData.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/DownloadAttachmentRequestData.kt new file mode 100644 index 00000000..a91b1d75 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/DownloadAttachmentRequestData.kt @@ -0,0 +1,39 @@ +package com.artemchep.keyguard.common.model + +data class DownloadAttachmentRequestData( + // ids + val localCipherId: String, + val remoteCipherId: String?, + val attachmentId: String, + // file info + val url: String, + val urlIsOneTime: Boolean, + val name: String, + val encryptionKey: ByteArray, +) { + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + + other as DownloadAttachmentRequestData + + if (localCipherId != other.localCipherId) return false + if (remoteCipherId != other.remoteCipherId) return false + if (attachmentId != other.attachmentId) return false + if (url != other.url) return false + if (urlIsOneTime != other.urlIsOneTime) return false + if (!encryptionKey.contentEquals(other.encryptionKey)) return false + + return true + } + + override fun hashCode(): Int { + var result = localCipherId.hashCode() + result = 31 * result + (remoteCipherId?.hashCode() ?: 0) + result = 31 * result + attachmentId.hashCode() + result = 31 * result + url.hashCode() + result = 31 * result + urlIsOneTime.hashCode() + result = 31 * result + encryptionKey.contentHashCode() + return result + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/Fingerprint.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/Fingerprint.kt new file mode 100644 index 00000000..0a8a036a --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/Fingerprint.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.model + +data class Fingerprint( + val master: FingerprintPassword, + val biometric: FingerprintBiometric?, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/FingerprintBiometric.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/FingerprintBiometric.kt new file mode 100644 index 00000000..90544bcc --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/FingerprintBiometric.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.model + +class FingerprintBiometric( + val iv: ByteArray, + val encryptedMasterKey: ByteArray, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/FingerprintPassword.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/FingerprintPassword.kt new file mode 100644 index 00000000..1c266697 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/FingerprintPassword.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.model + +data class FingerprintPassword( + val hash: MasterPasswordHash, + val salt: MasterPasswordSalt, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/FolderOwnership2.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/FolderOwnership2.kt new file mode 100644 index 00000000..94ecc42b --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/FolderOwnership2.kt @@ -0,0 +1,12 @@ +package com.artemchep.keyguard.common.model + +import arrow.optics.optics +import com.artemchep.keyguard.feature.confirmation.organization.FolderInfo + +@optics +data class FolderOwnership2( + val accountId: String, + val folder: FolderInfo, +) { + companion object; +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/HasAccountId.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/HasAccountId.kt new file mode 100644 index 00000000..5806cde7 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/HasAccountId.kt @@ -0,0 +1,8 @@ +package com.artemchep.keyguard.common.model + +interface HasAccountId { + fun accountId(): String +} + +fun List.firstOrNull(accountId: AccountId) = this + .firstOrNull { it.accountId() == accountId.id } diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/LinkInfo.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/LinkInfo.kt new file mode 100644 index 00000000..4b887aa1 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/LinkInfo.kt @@ -0,0 +1,3 @@ +package com.artemchep.keyguard.common.model + +interface LinkInfo diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/LinkInfoAndroid.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/LinkInfoAndroid.kt new file mode 100644 index 00000000..19388cf7 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/LinkInfoAndroid.kt @@ -0,0 +1,17 @@ +package com.artemchep.keyguard.common.model + +import androidx.compose.ui.graphics.painter.Painter + +sealed interface LinkInfoAndroid : LinkInfo { + val platform: LinkInfoPlatform.Android + + data class Installed( + val label: String, + val icon: Painter, + override val platform: LinkInfoPlatform.Android, + ) : LinkInfoAndroid + + data class NotInstalled( + override val platform: LinkInfoPlatform.Android, + ) : LinkInfoAndroid +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/LinkInfoExecute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/LinkInfoExecute.kt new file mode 100644 index 00000000..58e92b68 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/LinkInfoExecute.kt @@ -0,0 +1,12 @@ +package com.artemchep.keyguard.common.model + +/** + * @author Artem Chepurnyi + */ +sealed interface LinkInfoExecute : LinkInfo { + data class Allow( + val command: String, + ) : LinkInfoExecute + + data object Deny : LinkInfoExecute +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/LinkInfoLaunch.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/LinkInfoLaunch.kt new file mode 100644 index 00000000..054739ac --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/LinkInfoLaunch.kt @@ -0,0 +1,19 @@ +package com.artemchep.keyguard.common.model + +import androidx.compose.ui.graphics.painter.Painter + +/** + * @author Artem Chepurnyi + */ +sealed interface LinkInfoLaunch : LinkInfo { + data class Allow( + val apps: List, + ) : LinkInfoLaunch { + data class AppInfo( + val label: String, + val icon: Painter? = null, + ) + } + + data object Deny : LinkInfoLaunch +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/LinkInfoPlatform.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/LinkInfoPlatform.kt new file mode 100644 index 00000000..6dba6445 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/LinkInfoPlatform.kt @@ -0,0 +1,32 @@ +package com.artemchep.keyguard.common.model + +import io.ktor.http.Url + +/** + * Provides info about the platform of the resource that + * the URI doe refer. + * + * @author Artem Chepurnyi + */ +sealed interface LinkInfoPlatform : LinkInfo { + data class Android( + val packageName: String, + ) : LinkInfoPlatform { + /** + * A url to the app's content page on the Play Store formed by appending + * the package name to a base Play Store url. + */ + val playStoreUrl = "https://play.google.com/store/apps/details?id=$packageName" + } + + data class IOS( + val packageName: String, + ) : LinkInfoPlatform + + data class Web( + val url: Url, + val frontPageUrl: Url, + ) : LinkInfoPlatform + + data object Other : LinkInfoPlatform +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/Loadable.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/Loadable.kt new file mode 100644 index 00000000..6a8b6371 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/Loadable.kt @@ -0,0 +1,44 @@ +package com.artemchep.keyguard.common.model + +import androidx.compose.runtime.Immutable + +@Immutable +sealed interface Loadable { + companion object; + + @Immutable + data object Loading : Loadable + + @Immutable + data class Ok( + val value: T, + ) : Loadable { + companion object + } +} + +fun Loadable.getOrNull(): T? = fold( + ifLoading = { null }, + ifOk = { it }, +) + +fun Loadable.map( + transform: (T) -> R, +) = flatMap { + Loadable.Ok(transform(it)) +} + +inline fun Loadable.flatMap( + transform: (T) -> Loadable, +) = fold( + ifLoading = { Loadable.Loading }, + ifOk = transform, +) + +inline fun Loadable.fold( + ifLoading: () -> R, + ifOk: (T) -> R, +): R = when (this) { + is Loadable.Loading -> ifLoading() + is Loadable.Ok -> ifOk(value) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/MasterKey.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/MasterKey.kt new file mode 100644 index 00000000..005bc6e7 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/MasterKey.kt @@ -0,0 +1,20 @@ +package com.artemchep.keyguard.common.model + +data class MasterKey( + val byteArray: ByteArray, +) { + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + + other as MasterKey + + if (!byteArray.contentEquals(other.byteArray)) return false + + return true + } + + override fun hashCode(): Int { + return byteArray.contentHashCode() + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/MasterPassword.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/MasterPassword.kt new file mode 100644 index 00000000..536105b8 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/MasterPassword.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.model + +@JvmInline +value class MasterPassword( + val byteArray: ByteArray, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/MasterPasswordHash.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/MasterPasswordHash.kt new file mode 100644 index 00000000..d2b55cec --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/MasterPasswordHash.kt @@ -0,0 +1,20 @@ +package com.artemchep.keyguard.common.model + +data class MasterPasswordHash( + val byteArray: ByteArray, +) { + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + + other as MasterPasswordHash + + if (!byteArray.contentEquals(other.byteArray)) return false + + return true + } + + override fun hashCode(): Int { + return byteArray.contentHashCode() + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/MasterPasswordSalt.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/MasterPasswordSalt.kt new file mode 100644 index 00000000..e02854dd --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/MasterPasswordSalt.kt @@ -0,0 +1,20 @@ +package com.artemchep.keyguard.common.model + +data class MasterPasswordSalt( + val byteArray: ByteArray, +) { + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + + other as MasterPasswordSalt + + if (!byteArray.contentEquals(other.byteArray)) return false + + return true + } + + override fun hashCode(): Int { + return byteArray.contentHashCode() + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/MasterSession.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/MasterSession.kt new file mode 100644 index 00000000..6df905e5 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/MasterSession.kt @@ -0,0 +1,41 @@ +package com.artemchep.keyguard.common.model + +import arrow.optics.optics +import kotlinx.datetime.Instant +import org.kodein.di.DI + +@optics +sealed interface MasterSession { + companion object; + + @optics + data class Key( + val masterKey: MasterKey, + val di: DI, + val origin: Origin, + val createdAt: Instant, + ) : MasterSession { + companion object; + + sealed interface Origin + + /** + * The key was loaded from the file system. You can not + * assume that the user is authenticated. + */ + data object Persisted : Origin + + /** + * The key was typed by a user. You can assume that the + * user is authenticated. + */ + data object Authenticated : Origin + } + + @optics + data class Empty( + val reason: String? = null, + ) : MasterSession { + companion object + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/NavAnimation.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/NavAnimation.kt new file mode 100644 index 00000000..b2464d42 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/NavAnimation.kt @@ -0,0 +1,27 @@ +package com.artemchep.keyguard.common.model + +import com.artemchep.keyguard.res.Res +import dev.icerock.moko.resources.StringResource + +enum class NavAnimation( + val key: String, + val title: StringResource, +) { + DISABLED( + key = "disabled", + title = Res.strings.nav_animation_disabled, + ), + CROSSFADE( + key = "crossfade", + title = Res.strings.nav_animation_crossfade, + ), + DYNAMIC( + key = "dynamic", + title = Res.strings.nav_animation_dynamic, + ), + ; + + companion object { + val default get() = DYNAMIC + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/NoAnalytics.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/NoAnalytics.kt new file mode 100644 index 00000000..6d888682 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/NoAnalytics.kt @@ -0,0 +1,3 @@ +package com.artemchep.keyguard.common.model + +interface NoAnalytics diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/PasswordGeneratorConfig.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/PasswordGeneratorConfig.kt new file mode 100644 index 00000000..cb5c9359 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/PasswordGeneratorConfig.kt @@ -0,0 +1,42 @@ +package com.artemchep.keyguard.common.model + +sealed interface PasswordGeneratorConfig { + data class Passphrase( + val length: Int, + val delimiter: String, + val capitalize: Boolean, + val includeNumber: Boolean, + val customWord: String? = null, + ) : PasswordGeneratorConfig + + data class Password( + val length: Int, + val uppercaseChars: List, + val lowercaseChars: List, + val numberChars: List, + val symbolChars: List, + val uppercaseMin: Long, + val lowercaseMin: Long, + val numbersMin: Long, + val symbolsMin: Long, + ) : PasswordGeneratorConfig { + val allChars: List = uppercaseChars + lowercaseChars + numberChars + symbolChars + } + + data class EmailRelay( + val emailRelay: com.artemchep.keyguard.common.service.relays.api.EmailRelay, + val config: DGeneratorEmailRelay, + ) : PasswordGeneratorConfig + + data class Composite( + val config: PasswordGeneratorConfig, + val transform: (String) -> String?, + ) : PasswordGeneratorConfig +} + +fun PasswordGeneratorConfig.isExpensive(): Boolean = when (this) { + is PasswordGeneratorConfig.Passphrase -> false + is PasswordGeneratorConfig.Password -> false + is PasswordGeneratorConfig.EmailRelay -> true + is PasswordGeneratorConfig.Composite -> config.isExpensive() +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/PasswordGeneratorConfigBuilder.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/PasswordGeneratorConfigBuilder.kt new file mode 100644 index 00000000..6067adee --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/PasswordGeneratorConfigBuilder.kt @@ -0,0 +1,230 @@ +package com.artemchep.keyguard.common.model + +import com.artemchep.keyguard.feature.auth.common.util.REGEX_DOMAIN +import com.artemchep.keyguard.feature.auth.common.util.REGEX_EMAIL + +sealed interface PasswordGeneratorConfigBuilder2 { + data class Passphrase( + val length: Int, + val delimiter: String, + val capitalize: Boolean, + val includeNumber: Boolean, + val customWord: String, + ) : PasswordGeneratorConfigBuilder2 + + data class Username( + val length: Int, + val delimiter: String, + val capitalize: Boolean, + val includeNumber: Boolean, + val customWord: String, + ) : PasswordGeneratorConfigBuilder2 + + data class Password( + val length: Int, + val includeUppercaseCharacters: Boolean = true, + val includeUppercaseCharactersMin: Long = 1L, + val includeLowercaseCharacters: Boolean = true, + val includeLowercaseCharactersMin: Long = 1L, + val includeNumbers: Boolean = true, + val includeNumbersMin: Long = 1L, + val includeSymbols: Boolean = true, + val includeSymbolsMin: Long = 1L, + val excludeSimilarCharacters: Boolean = true, + val excludeAmbiguousCharacters: Boolean = true, + ) : PasswordGeneratorConfigBuilder2 + + data class EmailCatchAll( + val length: Int, + val domain: String, + ) : PasswordGeneratorConfigBuilder2 + + data class EmailPlusAddressing( + val length: Int, + val email: String, + ) : PasswordGeneratorConfigBuilder2 + + data class EmailSubdomainAddressing( + val length: Int, + val email: String, + ) : PasswordGeneratorConfigBuilder2 + + data class EmailRelay( + val emailRelay: com.artemchep.keyguard.common.service.relays.api.EmailRelay, + val config: DGeneratorEmailRelay, + ) : PasswordGeneratorConfigBuilder2 +} + +fun PasswordGeneratorConfigBuilder2.build(): PasswordGeneratorConfig = when (this) { + is PasswordGeneratorConfigBuilder2.Password -> build() + is PasswordGeneratorConfigBuilder2.Passphrase -> build() + is PasswordGeneratorConfigBuilder2.Username -> build() + is PasswordGeneratorConfigBuilder2.EmailCatchAll -> build() + is PasswordGeneratorConfigBuilder2.EmailPlusAddressing -> build() + is PasswordGeneratorConfigBuilder2.EmailSubdomainAddressing -> build() + is PasswordGeneratorConfigBuilder2.EmailRelay -> build() +} + +fun PasswordGeneratorConfigBuilder2.Password.build(): PasswordGeneratorConfig { + val uppercaseChars = mutableListOf() + val lowercaseChars = mutableListOf() + val numberChars = mutableListOf() + val symbolChars = mutableListOf() + + if (includeUppercaseCharacters) { + uppercaseChars += 'A'..'Z' + } + if (includeLowercaseCharacters) { + lowercaseChars += 'a'..'z' + } + if (includeNumbers) { + numberChars += '0'..'9' + } + if (includeSymbols) { + symbolChars += """!"#$%&'()*+-./:;<=>?@[\]^_`{|}~""" + .toCharArray() + .toList() + } + if (excludeSimilarCharacters) { + // uppercase + uppercaseChars -= 'L' + uppercaseChars -= 'O' + // lowercase + lowercaseChars -= 'i' + lowercaseChars -= 'l' + lowercaseChars -= 'o' + // numbers + numberChars -= '1' + numberChars -= '0' + } + if (excludeAmbiguousCharacters) { + symbolChars -= """{}[]()/\'"`~,;:.<>""" + .toCharArray() + .toSet() + } + return PasswordGeneratorConfig.Password( + length = length, + // chars + uppercaseChars = uppercaseChars, + lowercaseChars = lowercaseChars, + numberChars = numberChars, + symbolChars = symbolChars, + // config + uppercaseMin = includeUppercaseCharactersMin, + lowercaseMin = includeLowercaseCharactersMin, + numbersMin = includeNumbersMin, + symbolsMin = includeSymbolsMin, + ) +} + +fun PasswordGeneratorConfigBuilder2.Passphrase.build() = + PasswordGeneratorConfig.Passphrase( + length = length, + delimiter = delimiter, + capitalize = capitalize, + includeNumber = includeNumber, + customWord = customWord.trim().takeUnless { it.isEmpty() }, + ) + +fun PasswordGeneratorConfigBuilder2.Username.build() = + PasswordGeneratorConfig.Passphrase( + length = length, + delimiter = delimiter, + capitalize = capitalize, + includeNumber = includeNumber, + customWord = customWord.trim().takeUnless { it.isEmpty() }, + ) + +fun PasswordGeneratorConfigBuilder2.EmailCatchAll.build(): PasswordGeneratorConfig { + val config = buildEmailFriendlyGeneratorConfig( + length = length, + ) + val domain = domain + .takeIf { REGEX_DOMAIN.matches(it) } + return PasswordGeneratorConfig.Composite( + config = config, + transform = { pwd -> + if (domain != null) { + "$pwd@$domain" + } else { + null + } + }, + ) +} + +fun PasswordGeneratorConfigBuilder2.EmailPlusAddressing.build(): PasswordGeneratorConfig { + val config = buildEmailFriendlyGeneratorConfig( + length = length, + ) + val email = email + .takeIf { REGEX_EMAIL.matches(it) } + ?.let(::parseEmail) + return PasswordGeneratorConfig.Composite( + config = config, + transform = { pwd -> + if (email != null) { + "${email.username}+$pwd@${email.domain}" + } else { + null + } + }, + ) +} + +fun PasswordGeneratorConfigBuilder2.EmailSubdomainAddressing.build(): PasswordGeneratorConfig { + val config = buildEmailFriendlyGeneratorConfig( + length = length, + ) + val email = email + .takeIf { REGEX_EMAIL.matches(it) } + ?.let(::parseEmail) + return PasswordGeneratorConfig.Composite( + config = config, + transform = { pwd -> + if (email != null) { + "${email.username}@$pwd.${email.domain}" + } else { + null + } + }, + ) +} + +fun PasswordGeneratorConfigBuilder2.EmailRelay.build(): PasswordGeneratorConfig { + return PasswordGeneratorConfig.EmailRelay( + emailRelay = emailRelay, + config = config, + ) +} + +private fun buildEmailFriendlyGeneratorConfig( + length: Int, +) = PasswordGeneratorConfigBuilder2.Password( + length = length, + includeUppercaseCharacters = false, + includeLowercaseCharacters = true, + includeNumbers = true, + includeSymbols = false, + excludeSimilarCharacters = true, + excludeAmbiguousCharacters = true, +).build() + +private fun parseEmail(email: String): ParsedEmail? { + val index = email.indexOf("@") + if (index != -1) { + val username = email.substring(startIndex = 0, endIndex = index) + val domain = email.substring(startIndex = index + 1) + return ParsedEmail( + username = username, + domain = domain, + ) + } + + return null +} + +private data class ParsedEmail( + val username: String, + val domain: String, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/PasswordGeneratorContext.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/PasswordGeneratorContext.kt new file mode 100644 index 00000000..cb374697 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/PasswordGeneratorContext.kt @@ -0,0 +1,9 @@ +package com.artemchep.keyguard.common.model + +data class GeneratorContext( + /** + * Hostname of the web service we are currently + * generating email for. + */ + val host: String?, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/PasswordPwnage.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/PasswordPwnage.kt new file mode 100644 index 00000000..b4312be0 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/PasswordPwnage.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.model + +@JvmInline +value class PasswordPwnage( + val occurrences: Int, +) \ No newline at end of file diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/PasswordStrength.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/PasswordStrength.kt new file mode 100644 index 00000000..b59b68c5 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/PasswordStrength.kt @@ -0,0 +1,58 @@ +@file:JvmName("PasswordStrengthJvm") + +package com.artemchep.keyguard.common.model + +import androidx.compose.runtime.Composable +import arrow.optics.optics +import com.artemchep.keyguard.res.Res +import dev.icerock.moko.resources.compose.stringResource + +@optics +data class PasswordStrength( + val crackTimeSeconds: Long, + val score: Score = when { + crackTimeSeconds <= 1000L -> Score.Weak + crackTimeSeconds <= 100000L -> Score.Fair + crackTimeSeconds <= 100000000L -> Score.Good + crackTimeSeconds <= 100000000000L -> Score.Strong + else -> Score.VeryStrong + }, + val version: Long, +) { + companion object; + + enum class Score { + Weak, + Fair, + Good, + Strong, + VeryStrong, + } +} + +fun PasswordStrength.Score.alertScore() = when (this) { + PasswordStrength.Score.Weak -> 0f + PasswordStrength.Score.Fair -> 0.2f + PasswordStrength.Score.Good -> 0.5f + PasswordStrength.Score.Strong -> 0.9f + PasswordStrength.Score.VeryStrong -> 1f +} + +fun PasswordStrength.Score.formatH2() = when (this) { + PasswordStrength.Score.Weak -> Res.strings.passwords_weak_label + PasswordStrength.Score.Fair -> Res.strings.passwords_fair_label + PasswordStrength.Score.Good -> Res.strings.passwords_good_label + PasswordStrength.Score.Strong -> Res.strings.passwords_strong_label + PasswordStrength.Score.VeryStrong -> Res.strings.passwords_very_strong_label +} + +fun PasswordStrength.Score.formatH() = when (this) { + PasswordStrength.Score.Weak -> Res.strings.password_strength_weak_label + PasswordStrength.Score.Fair -> Res.strings.password_strength_fair_label + PasswordStrength.Score.Good -> Res.strings.password_strength_good_label + PasswordStrength.Score.Strong -> Res.strings.password_strength_strong_label + PasswordStrength.Score.VeryStrong -> Res.strings.password_strength_very_strong_label +} + +@Composable +fun PasswordStrength.Score.formatLocalized() = stringResource(formatH()) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/PersistedSession.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/PersistedSession.kt new file mode 100644 index 00000000..9ce42fdd --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/PersistedSession.kt @@ -0,0 +1,9 @@ +package com.artemchep.keyguard.common.model + +import kotlinx.datetime.Instant + +data class PersistedSession( + val masterKey: MasterKey, + val createdAt: Instant, + val persistedAt: Instant, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/Product.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/Product.kt new file mode 100644 index 00000000..4be35c7e --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/Product.kt @@ -0,0 +1,18 @@ +package com.artemchep.keyguard.common.model + +import com.artemchep.keyguard.platform.LeContext + +data class Product( + val id: String, + val title: String, + val description: String?, + val price: String, + val status: Status, + val purchase: (LeContext) -> Unit, +) { + sealed interface Status { + data object Inactive : Status + + data object Active : Status + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/RemoveAttachmentRequest.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/RemoveAttachmentRequest.kt new file mode 100644 index 00000000..67572aab --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/RemoveAttachmentRequest.kt @@ -0,0 +1,22 @@ +package com.artemchep.keyguard.common.model + +sealed interface RemoveAttachmentRequest { + data class ByDownloadId( + val downloadId: String, + ) : RemoveAttachmentRequest + + data class ByLocalCipherAttachment( + val localCipherId: String, + val remoteCipherId: String? = null, + val attachmentId: String, + ) : RemoveAttachmentRequest { + constructor( + cipher: DSecret, + attachment: DSecret.Attachment.Remote, + ) : this( + localCipherId = cipher.id, + remoteCipherId = cipher.service.remote?.id, + attachmentId = attachment.id, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/RichResult.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/RichResult.kt new file mode 100644 index 00000000..e910c517 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/RichResult.kt @@ -0,0 +1,164 @@ +package com.artemchep.keyguard.common.model + +import arrow.core.Either +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.filterNotNull +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.scan + +/** + * @author Artem Chepurnyi + */ +sealed class RichResult { + companion object { + operator fun invoke(either: Either): RichResult = + either.fold( + ifLeft = { Failure(it) }, + ifRight = { Success(it) }, + ) + } + + data class Failure( + val exception: Throwable, + ) : RichResult() { + override fun equals(other: Any?): Boolean = + other is Failure<*> && exception == other.exception + + override fun hashCode(): Int = exception.hashCode() + } + + data class Loading( + /** + * A progress or `null` if the progress is + * not supported. + */ + val progress: Float? = null, + val lastTerminalState: RichResult? = null, + ) : RichResult() + + data class Success( + val data: T, + ) : RichResult() +} + +fun RichResult.getTerminalState() = + when (this) { + is RichResult.Loading -> lastTerminalState + else -> this + } + +fun RichResult.preferTerminalState() = + when (this) { + is RichResult.Loading -> lastTerminalState ?: this + else -> this + } + +fun RichResult.orNull() = + when (this) { + is RichResult.Success -> data + else -> null + } + +fun RichResult>.combine(other: RichResult>): RichResult> = + when { + this is RichResult.Success && other is RichResult.Success -> + RichResult.Success( + data = this.data + other.data, + ) + + this is RichResult.Loading || other is RichResult.Loading -> { + val tts = this.getTerminalState() + val ots = other.getTerminalState() + + val lastTerminalState = + if (tts != null && ots != null) { + tts.combine(ots) + } else { + tts ?: ots + } + RichResult.Loading( + lastTerminalState = lastTerminalState, + ) + } + + this is RichResult.Failure -> other + else -> this + } + +fun RichResult.fold( + ifFailure: (Throwable) -> R, + ifLoading: (RichResult?) -> R, + ifSuccess: (T) -> R, +) = when (this) { + is RichResult.Failure -> ifFailure(exception) + is RichResult.Loading -> ifLoading(lastTerminalState) + is RichResult.Success -> ifSuccess(data) +} + +fun RichResult.ap(ff: RichResult<(T) -> R>) = + flatMap { t -> + ff.map { it(t) } + } + +inline fun RichResult.map(transform: (T) -> R) = + flatMap { + RichResult.Success(transform(it)) + } + +inline fun RichResult.flatMap(transform: (T) -> RichResult) = + when (this) { + is RichResult.Failure -> RichResult.Failure(exception) + is RichResult.Loading -> RichResult.Loading(progress) + is RichResult.Success -> transform(data) + } + +inline fun RichResult.handleError(transform: (Throwable) -> T) = + handleErrorWith { + RichResult.Success(transform(it)) + } + +inline fun RichResult.handleErrorWith(transform: (Throwable) -> RichResult) = + when (this) { + is RichResult.Failure -> transform(exception) + is RichResult.Loading -> this + is RichResult.Success -> this + } + +inline fun Flow>.richMap(crossinline block: suspend (T) -> R) = this + .map { result -> + result.map { + block(it) + } + } + +inline fun Flow>.richFlatMap(crossinline block: suspend (T) -> RichResult) = + this + .map { result -> + result.flatMap { + block(it) + } + } + +fun Flow>.withTerminalStateInLoading() = this + .scan(null as RichResult?) { old, new -> + when (new) { + is RichResult.Loading -> { + val lastTerminalState = when (old) { + null, + is RichResult.Failure, + is RichResult.Success, + -> old + + is RichResult.Loading -> old.lastTerminalState + } + if (lastTerminalState !== new.lastTerminalState) { + new.copy(lastTerminalState = lastTerminalState) + } else { + new + } + } + + else -> new + } + } + .filterNotNull() diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/Screen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/Screen.kt new file mode 100644 index 00000000..bb43fe71 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/Screen.kt @@ -0,0 +1,9 @@ +package com.artemchep.keyguard.common.model + +/** + * @author Artem Chepurnyi + */ +sealed class Screen { + data object On : Screen() + data object Off : Screen() +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/Subscription.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/Subscription.kt new file mode 100644 index 00000000..4fb460f8 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/Subscription.kt @@ -0,0 +1,20 @@ +package com.artemchep.keyguard.common.model + +import com.artemchep.keyguard.platform.LeContext + +data class Subscription( + val id: String, + val title: String, + val description: String?, + val price: String, + val status: Status, + val purchase: (LeContext) -> Unit, +) { + sealed interface Status { + data object Inactive : Status + + data class Active( + val willRenew: Boolean, + ) : Status + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/ToastMessage.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/ToastMessage.kt new file mode 100644 index 00000000..410faba9 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/ToastMessage.kt @@ -0,0 +1,16 @@ +package com.artemchep.keyguard.common.model + +import java.util.UUID + +data class ToastMessage( + val id: String = UUID.randomUUID().toString(), + val type: Type? = null, + val title: String, + val text: String? = null, +) { + enum class Type { + INFO, + ERROR, + SUCCESS, + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/TotpCode.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/TotpCode.kt new file mode 100644 index 00000000..c5266c6f --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/TotpCode.kt @@ -0,0 +1,21 @@ +package com.artemchep.keyguard.common.model + +import kotlinx.datetime.Instant +import kotlin.time.Duration + +data class TotpCode( + val code: String, + val counter: Counter, +) { + sealed interface Counter + + data class TimeBasedCounter( + val timestamp: Instant, + val expiration: Instant, + val duration: Duration, + ) : Counter + + data class IncrementBasedCounter( + val counter: Long, + ) : Counter +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/TotpToken.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/TotpToken.kt new file mode 100644 index 00000000..53d8349d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/TotpToken.kt @@ -0,0 +1,279 @@ +package com.artemchep.keyguard.common.model + +import arrow.core.Either +import arrow.core.flatten +import arrow.core.right +import io.ktor.http.Url + +private const val PREFIX_OTP_AUTH = "otpauth://" +private const val PREFIX_OTP_STEAM = "steam://" +private const val PREFIX_OTP_MOBILE = "motp://" + +sealed interface TotpToken { + companion object { + fun parse( + url: String, + ): Either = Either.catchAndFlatten { + when { + url.startsWith(PREFIX_OTP_AUTH) -> parseOtpAuth(url) + url.startsWith(PREFIX_OTP_STEAM) -> parseOtpSteam(url) + url.startsWith(PREFIX_OTP_MOBILE) -> parseOtpMobile(url) + else -> { + // By default we think that the url is a key and the token + // type is otp-auth. + TotpAuth.Builder() + .build( + keyBase32 = url, + raw = url, + ) + .right() + } + } + } + } + + val raw: String + val digits: Int + + data class TotpAuth( + val algorithm: CryptoHashAlgorithm, + val keyBase32: String, + override val raw: String, + override val digits: Int, + val period: Long, + ) : TotpToken { + internal class Builder( + var algorithm: CryptoHashAlgorithm = CryptoHashAlgorithm.SHA_1, + var digits: Int = 6, + var period: Long = 30L, + ) { + fun build( + raw: String, + keyBase32: String, + ) = TotpAuth( + algorithm = algorithm, + digits = digits, + period = period, + keyBase32 = keyBase32, + raw = raw, + ) + } + } + + data class HotpAuth( + val algorithm: CryptoHashAlgorithm, + val keyBase32: String, + override val raw: String, + override val digits: Int, + val counter: Long, + ) : TotpToken { + internal class Builder( + var algorithm: CryptoHashAlgorithm = CryptoHashAlgorithm.SHA_1, + var digits: Int = 6, + var counter: Long = 0L, + ) { + fun build( + raw: String, + keyBase32: String, + ) = HotpAuth( + algorithm = algorithm, + digits = digits, + counter = counter, + keyBase32 = keyBase32, + raw = raw, + ) + } + } + + data class SteamAuth( + val algorithm: CryptoHashAlgorithm, + val keyBase32: String, + override val raw: String, + ) : TotpToken { + companion object { + const val PERIOD = 30L + const val DIGITS = 5 + } + + override val digits: Int get() = DIGITS + + val period: Long get() = PERIOD + } + + data class MobileAuth( + val issuer: String?, + val username: String?, + val secret: String, + val pin: String?, + override val raw: String, + ) : TotpToken { + companion object { + const val PERIOD = 30L + const val DIGITS = 6 + } + + override val digits: Int get() = DIGITS + + val period: Long get() = PERIOD + } +} + +private fun parseOtpAuth( + url: String, +): Either = Either.catch { + val parsedUrl = Url(url) + when (parsedUrl.host) { + "hotp" -> parseHotpAuth(url, parsedUrl) + // totp + else -> parseTotpAuth(url, parsedUrl) + } +}.flatten() + +private fun parseTotpAuth( + raw: String, + url: Url, +): Either = Either.catch { + val builder = TotpToken.TotpAuth.Builder() + var keyBase32 = "" + + // Parse the parameters of the otp auth + val params = url.parameters + params["digits"]?.also { digitsParam -> + val n = digitsParam.toIntOrNull() + ?: return@also + if (n in 1..10) { + builder.digits = n + } + } + params["period"]?.also { periodParam -> + val n = periodParam.toLongOrNull() + ?: return@also + if (n > 0L) { + builder.period = n + } + } + params["secret"]?.also { secretParam -> + keyBase32 = secretParam + } + params["algorithm"]?.also { algorithmParam -> + val alg = when (algorithmParam.lowercase()) { + "sha1" -> CryptoHashAlgorithm.SHA_1 + "sha256" -> CryptoHashAlgorithm.SHA_256 + "sha512" -> CryptoHashAlgorithm.SHA_512 + else -> return@also + } + builder.algorithm = alg + } + + if (keyBase32.isBlank()) { + throw IllegalArgumentException("One time password key must not be empty.") + } + + builder.build( + keyBase32 = keyBase32, + raw = raw, + ) +} + +private fun parseHotpAuth( + raw: String, + url: Url, +): Either = Either.catch { + val builder = TotpToken.HotpAuth.Builder() + var keyBase32 = "" + + // Parse the parameters of the otp auth + val params = url.parameters + params["digits"]?.also { digitsParam -> + val n = digitsParam.toIntOrNull() + ?: return@also + if (n in 1..10) { + builder.digits = n + } + } + params["counter"]?.also { counterParam -> + val n = counterParam.toLongOrNull() + ?: return@also + builder.counter = n + } + params["secret"]?.also { secretParam -> + keyBase32 = secretParam + } + params["algorithm"]?.also { algorithmParam -> + val alg = when (algorithmParam.lowercase()) { + "sha1" -> CryptoHashAlgorithm.SHA_1 + "sha256" -> CryptoHashAlgorithm.SHA_256 + "sha512" -> CryptoHashAlgorithm.SHA_512 + else -> return@also + } + builder.algorithm = alg + } + + if (keyBase32.isBlank()) { + throw IllegalArgumentException("One time password key must not be empty.") + } + + builder.build( + keyBase32 = keyBase32, + raw = raw, + ) +} + +private fun parseOtpSteam( + url: String, +): Either = Either.catch { + val keyBase32 = url.substring(PREFIX_OTP_STEAM.length) + TotpToken.SteamAuth( + algorithm = CryptoHashAlgorithm.SHA_1, + keyBase32 = keyBase32, + raw = url, + ) +} + +// See: +// https://motp.sourceforge.net/#1.1 +// +// Example of the modified mOTP URI: +// motp://Google:artemchep?secret=haha&pin=1234 +private fun parseOtpMobile( + url: String, +): Either = Either.catch { + val data = url.substring(PREFIX_OTP_MOBILE.length) + val (issuer, username, params) = kotlin.run { + val parts = data.split('?') + if (parts.size != 2) { + throw IllegalArgumentException("URI is not a valid mOTP") + } + + val host = parts[0].split(':') + // First part is the issuer, second part of the host is the + // username. Both of these can be empty. + val issuer = host[0] + .takeIf { it.isNotEmpty() } + val username = host.getOrNull(1) + ?.takeIf { it.isNotEmpty() } + + val params = kotlin.run { + val fakeUrlString = "https://google.com?" + parts[1] + val fakeUrl = Url(fakeUrlString) + fakeUrl.parameters + } + Triple( + issuer, + username, + params, + ) + } + + val secret = requireNotNull(params["secret"]) { + "URI must include the mOTP secret" + } + val pin = params["pin"] + TotpToken.MobileAuth( + issuer = issuer, + username = username, + secret = secret, + pin = pin, + raw = url, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/UsernamePwnage.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/UsernamePwnage.kt new file mode 100644 index 00000000..1ee46d01 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/UsernamePwnage.kt @@ -0,0 +1,3 @@ +package com.artemchep.keyguard.common.model + +typealias UsernamePwnage = DHibpC diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/UsernameVariation.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/UsernameVariation.kt new file mode 100644 index 00000000..39713f71 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/UsernameVariation.kt @@ -0,0 +1,32 @@ +package com.artemchep.keyguard.common.model + +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.AlternateEmail +import androidx.compose.material.icons.outlined.Call +import androidx.compose.material.icons.outlined.Email +import com.artemchep.keyguard.feature.auth.common.util.REGEX_EMAIL +import com.artemchep.keyguard.feature.auth.common.util.REGEX_PHONE_NUMBER + +enum class UsernameVariation { + USERNAME, + EMAIL, + PHONE, + ; + + companion object { + val default get() = USERNAME + + fun of(username: String) = when { + REGEX_EMAIL.matches(username) -> EMAIL + REGEX_PHONE_NUMBER.matches(username) -> PHONE + else -> default + } + } +} + +val UsernameVariation.icon + get() = when (this) { + UsernameVariation.EMAIL -> Icons.Outlined.Email + UsernameVariation.PHONE -> Icons.Outlined.Call + UsernameVariation.USERNAME -> Icons.Outlined.AlternateEmail + } diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/UsernameVariation2.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/UsernameVariation2.kt new file mode 100644 index 00000000..5ebff4d5 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/UsernameVariation2.kt @@ -0,0 +1,80 @@ +package com.artemchep.keyguard.common.model + +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.AlternateEmail +import androidx.compose.material.icons.outlined.Call +import androidx.compose.material.icons.outlined.Email +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.common.io.attempt +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.usecase.GetGravatarUrl +import com.artemchep.keyguard.feature.favicon.GravatarUrl +import com.artemchep.keyguard.ui.icons.EmailIcon +import com.artemchep.keyguard.ui.icons.IconBox + +sealed interface UsernameVariation2 { + data class Email( + val gravatarUrl: GravatarUrl? = null, + ) : UsernameVariation2 + + data object Username : UsernameVariation2 + + data object Phone : UsernameVariation2 + + companion object { + val default get() = Username + + suspend fun of( + getGravatarUrl: GetGravatarUrl, + username: String, + ) = when (UsernameVariation.of(username)) { + UsernameVariation.EMAIL -> { + val gravatarUrl = getGravatarUrl(username) + .attempt() + .bind() + .getOrNull() + Email( + gravatarUrl = gravatarUrl, + ) + } + + UsernameVariation.PHONE -> Phone + UsernameVariation.USERNAME -> Username + else -> default + } + } +} + +val UsernameVariation2.icon + get() = when (this) { + is UsernameVariation2.Email -> Icons.Outlined.Email + is UsernameVariation2.Phone -> Icons.Outlined.Call + is UsernameVariation2.Username -> Icons.Outlined.AlternateEmail + } + +@Composable +fun UsernameVariationIcon( + modifier: Modifier = Modifier, + usernameVariation: UsernameVariation2, +) { + when (usernameVariation) { + is UsernameVariation2.Email -> { + EmailIcon( + modifier = modifier + .size(24.dp) + .clip(CircleShape), + gravatarUrl = usernameVariation.gravatarUrl, + ) + } + + else -> { + val icon = usernameVariation.icon + IconBox(main = icon) + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/VaultState.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/VaultState.kt new file mode 100644 index 00000000..83c3d93c --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/VaultState.kt @@ -0,0 +1,93 @@ +package com.artemchep.keyguard.common.model + +import arrow.core.Either +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.platform.LeCipher +import org.kodein.di.DI + +sealed interface VaultState { + class Create( + val createWithMasterPassword: WithPassword, + val createWithMasterPasswordAndBiometric: WithBiometric?, + ) : VaultState { + class WithPassword( + val getCreateIo: (String) -> IO, + ) + + class WithBiometric( + val getCipher: () -> Either, + val getCreateIo: (String) -> IO, + ) + } + + class Unlock( + val unlockWithMasterPassword: WithPassword, + val unlockWithBiometric: WithBiometric?, + val lockReason: String?, + ) : VaultState { + class WithPassword( + val getCreateIo: (String) -> IO, + ) + + class WithBiometric( + val getCipher: () -> Either, + val getCreateIo: () -> IO, + ) + } + + class Main( + val masterKey: MasterKey, + val changePassword: ChangePassword, + val di: DI, + ) : VaultState { + class ChangePassword( + private val key: Any, + val withMasterPassword: WithPassword, + val withMasterPasswordAndBiometric: WithBiometric?, + ) { + class WithPassword( + val getCreateIo: (String, String) -> IO, + ) + + class WithBiometric( + val getCipher: () -> Either, + val getCreateIo: (String, String) -> IO, + ) + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + + other as ChangePassword + + if (key != other.key) return false + + return true + } + + override fun hashCode(): Int { + return key.hashCode() + } + } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + + other as Main + + if (masterKey != other.masterKey) return false + if (changePassword != other.changePassword) return false + + return true + } + + override fun hashCode(): Int { + var result = masterKey.hashCode() + result = 31 * result + changePassword.hashCode() + return result + } + } + + data object Loading : VaultState +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/WithBiometric.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/WithBiometric.kt new file mode 100644 index 00000000..2bf6abfd --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/WithBiometric.kt @@ -0,0 +1,9 @@ +package com.artemchep.keyguard.common.model + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.platform.LeCipher + +class WithBiometric( + val getCipher: () -> LeCipher, + val getCreateIo: () -> IO, +) \ No newline at end of file diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/create/CreateRequest.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/create/CreateRequest.kt new file mode 100644 index 00000000..ded8add7 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/model/create/CreateRequest.kt @@ -0,0 +1,124 @@ +package com.artemchep.keyguard.common.model.create + +import arrow.optics.optics +import com.artemchep.keyguard.common.model.DSecret +import com.artemchep.keyguard.feature.confirmation.organization.FolderInfo +import com.artemchep.keyguard.platform.LeUri +import kotlinx.collections.immutable.PersistentList +import kotlinx.collections.immutable.persistentListOf +import kotlinx.datetime.Instant + +@optics +data class CreateRequest( + val ownership: Ownership? = null, + val ownership2: Ownership2? = null, + val title: String? = null, + val note: String? = null, + val favorite: Boolean? = null, + val reprompt: Boolean? = null, + val uris: PersistentList = persistentListOf(), + val fido2Credentials: PersistentList = persistentListOf(), + val fields: PersistentList = persistentListOf(), + val attachments: PersistentList = persistentListOf(), + // types + val type: DSecret.Type? = null, + val login: Login = Login(), + val card: Card = Card(), + val identity: Identity = Identity(), + // other + val now: Instant, +) { + companion object; + + @optics + data class Ownership( + val accountId: String?, + val folderId: String?, + val organizationId: String?, + val collectionIds: Set, + ) { + companion object; + } + + @optics + data class Ownership2( + val accountId: String?, + val folder: FolderInfo, + val organizationId: String?, + val collectionIds: Set, + ) { + companion object; + } + + @optics + sealed interface Attachment { + companion object; + + val id: String + + @optics + data class Remote( + override val id: String, + val name: String, + ) : Attachment { + companion object + } + + @optics + data class Local( + override val id: String, + val uri: LeUri, + val name: String, + val size: Long? = null, + ) : Attachment { + companion object + } + } + + @optics + data class Login( + val username: String? = null, + val password: String? = null, + val totp: String? = null, + ) { + companion object; + } + + @optics + data class Card( + val cardholderName: String? = null, + val brand: String? = null, + val number: String? = null, + val fromMonth: String? = null, + val fromYear: String? = null, + val expMonth: String? = null, + val expYear: String? = null, + val code: String? = null, + ) { + companion object; + } + + @optics + data class Identity( + val title: String? = null, + val firstName: String? = null, + val middleName: String? = null, + val lastName: String? = null, + val address1: String? = null, + val address2: String? = null, + val address3: String? = null, + val city: String? = null, + val state: String? = null, + val postalCode: String? = null, + val country: String? = null, + val company: String? = null, + val email: String? = null, + val phone: String? = null, + val ssn: String? = null, + val username: String? = null, + val passportNumber: String? = null, + val licenseNumber: String? = null, + ) { + companion object; + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/Files.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/Files.kt new file mode 100644 index 00000000..1f89c634 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/Files.kt @@ -0,0 +1,14 @@ +package com.artemchep.keyguard.common.service + +enum class Files( + val filename: String, +) { + KEY("master_key"), + FINGERPRINT("fingerprint"), + DEVICE_ID("device_id"), + UI_STATE("ui_state"), + SESSION_METADATA("session_metadata"), + SETTINGS("settings"), + BREACHES("breaches"), + REVIEW("review"), +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/autofill/AutofillService.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/autofill/AutofillService.kt new file mode 100644 index 00000000..836529fb --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/autofill/AutofillService.kt @@ -0,0 +1,7 @@ +package com.artemchep.keyguard.common.service.autofill + +import kotlinx.coroutines.flow.Flow + +interface AutofillService { + fun status(): Flow +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/autofill/AutofillServiceStatus.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/autofill/AutofillServiceStatus.kt new file mode 100644 index 00000000..4c649ccf --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/autofill/AutofillServiceStatus.kt @@ -0,0 +1,13 @@ +package com.artemchep.keyguard.common.service.autofill + +import com.artemchep.keyguard.platform.LeActivity + +sealed interface AutofillServiceStatus { + data class Enabled( + val onDisable: (() -> Unit)?, + ) : AutofillServiceStatus + + data class Disabled( + val onEnable: ((LeActivity) -> Unit)?, + ) : AutofillServiceStatus +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/clipboard/ClipboardService.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/clipboard/ClipboardService.kt new file mode 100644 index 00000000..54247530 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/clipboard/ClipboardService.kt @@ -0,0 +1,12 @@ +package com.artemchep.keyguard.common.service.clipboard + +interface ClipboardService { + fun setPrimaryClip( + value: String, + concealed: Boolean, + ) + + fun clearPrimaryClip() + + fun hasCopyNotification(): Boolean +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/connectivity/ConnectivityService.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/connectivity/ConnectivityService.kt new file mode 100644 index 00000000..64554d4a --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/connectivity/ConnectivityService.kt @@ -0,0 +1,16 @@ +package com.artemchep.keyguard.common.service.connectivity + +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.first + +interface ConnectivityService { + val availableFlow: Flow + + suspend fun awaitAvailable(): Unit = availableFlow.first() + + /** + * Returns `true` if the device has active internet connection, + * `false` otherwise. + */ + fun isInternetAvailable(): Boolean +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/crypto/CipherEncryptor.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/crypto/CipherEncryptor.kt new file mode 100644 index 00000000..59d55a65 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/crypto/CipherEncryptor.kt @@ -0,0 +1,34 @@ +package com.artemchep.keyguard.common.service.crypto + +import com.artemchep.keyguard.provider.bitwarden.crypto.AsymmetricCryptoKey +import com.artemchep.keyguard.provider.bitwarden.crypto.DecodeResult +import com.artemchep.keyguard.provider.bitwarden.crypto.SymmetricCryptoKey2 + +interface CipherEncryptor { + @Suppress("EnumEntryName") + enum class Type( + val byte: Byte, + val type: String = byte.toString(), + ) { + AesCbc256_B64(byte = 0), + AesCbc128_HmacSha256_B64(byte = 1), + AesCbc256_HmacSha256_B64(byte = 2), + Rsa2048_OaepSha256_B64(byte = 3), + Rsa2048_OaepSha1_B64(byte = 4), + Rsa2048_OaepSha256_HmacSha256_B64(byte = 5), + Rsa2048_OaepSha1_HmacSha256_B64(byte = 6), + } + + fun decode2( + cipher: String, + symmetricCryptoKey: SymmetricCryptoKey2? = null, + asymmetricCryptoKey: AsymmetricCryptoKey? = null, + ): DecodeResult + + fun encode2( + cipherType: Type, + plainText: ByteArray, + symmetricCryptoKey: SymmetricCryptoKey2? = null, + asymmetricCryptoKey: AsymmetricCryptoKey? = null, + ): String +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/crypto/CryptoGenerator.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/crypto/CryptoGenerator.kt new file mode 100644 index 00000000..d2114d7b --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/crypto/CryptoGenerator.kt @@ -0,0 +1,49 @@ +package com.artemchep.keyguard.common.service.crypto + +import com.artemchep.keyguard.common.model.Argon2Mode + +interface CryptoGenerator { + fun hkdf( + seed: ByteArray, + salt: ByteArray? = null, + info: ByteArray? = null, + length: Int = 32, + ): ByteArray + + fun pbkdf2( + seed: ByteArray, + salt: ByteArray, + iterations: Int = 1, + length: Int = 32, + ): ByteArray + + fun argon2( + mode: Argon2Mode, + seed: ByteArray, + salt: ByteArray, + iterations: Int, + memoryKb: Int, + parallelism: Int, + ): ByteArray + + fun seed( + length: Int = 32, + ): ByteArray + + fun hmacSha256( + key: ByteArray, + data: ByteArray, + ): ByteArray + + fun hashSha1(data: ByteArray): ByteArray + + fun hashSha256(data: ByteArray): ByteArray + + fun hashMd5(data: ByteArray): ByteArray + + fun uuid(): String + + fun random(): Int + + fun random(range: IntRange): Int +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/crypto/FileEncryptor.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/crypto/FileEncryptor.kt new file mode 100644 index 00000000..46f9c9a3 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/crypto/FileEncryptor.kt @@ -0,0 +1,25 @@ +package com.artemchep.keyguard.common.service.crypto + +import java.io.ByteArrayInputStream +import java.io.InputStream + +interface FileEncryptor { + fun decode( + input: ByteArray, + key: ByteArray, + ): ByteArray + + fun decode( + input: InputStream, + key: ByteArray, + ): InputStream { + val data = input.readBytes() + val out = decode(data, key) + return ByteArrayInputStream(out) + } + + fun encode( + data: ByteArray, + key: ByteArray, + ): ByteArray +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/deeplink/DeeplinkService.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/deeplink/DeeplinkService.kt new file mode 100644 index 00000000..42bf588d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/deeplink/DeeplinkService.kt @@ -0,0 +1,13 @@ +package com.artemchep.keyguard.common.service.deeplink + +import kotlinx.coroutines.flow.Flow + +interface DeeplinkService { + fun get(key: String): String? + + fun getFlow(key: String): Flow + + fun put(key: String, value: String?) + + fun clear(key: String) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/deeplink/impl/DeeplinkServiceImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/deeplink/impl/DeeplinkServiceImpl.kt new file mode 100644 index 00000000..ce9654fc --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/deeplink/impl/DeeplinkServiceImpl.kt @@ -0,0 +1,36 @@ +package com.artemchep.keyguard.common.service.deeplink.impl + +import com.artemchep.keyguard.common.service.deeplink.DeeplinkService +import kotlinx.collections.immutable.persistentMapOf +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.update +import org.kodein.di.DirectDI + +class DeeplinkServiceImpl( +) : DeeplinkService { + constructor(directDI: DirectDI) : this( + ) + + private val sink = MutableStateFlow(persistentMapOf()) + + override fun get(key: String): String? = sink.value[key] + + override fun getFlow(key: String): Flow = sink + .map { state -> + state[key] + } + + override fun put(key: String, value: String?) { + sink.update { state -> + state.put(key, value) + } + } + + override fun clear(key: String) { + sink.update { state -> + state.remove(key) + } + } +} \ No newline at end of file diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/download/DownloadManager.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/download/DownloadManager.kt new file mode 100644 index 00000000..e1c4e613 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/download/DownloadManager.kt @@ -0,0 +1,37 @@ +package com.artemchep.keyguard.common.service.download + +import com.artemchep.keyguard.android.downloader.journal.room.DownloadInfoEntity2 +import kotlinx.coroutines.flow.Flow + +interface DownloadManager { + fun statusByDownloadId2(downloadId: String): Flow + + fun statusByTag(tag: DownloadInfoEntity2.AttachmentDownloadTag): Flow + + class QueueResult( + val info: DownloadInfoEntity2, + val flow: Flow, + ) + + suspend fun queue( + downloadInfo: DownloadInfoEntity2, + ): QueueResult + + suspend fun queue( + tag: DownloadInfoEntity2.AttachmentDownloadTag, + url: String, + urlIsOneTime: Boolean, + name: String, + key: ByteArray? = null, + attempt: Int = 0, + worker: Boolean = false, + ): QueueResult + + suspend fun removeByDownloadId( + downloadId: String, + ) + + suspend fun removeByTag( + tag: DownloadInfoEntity2.AttachmentDownloadTag, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/download/DownloadProgress.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/download/DownloadProgress.kt new file mode 100644 index 00000000..0fb069ed --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/download/DownloadProgress.kt @@ -0,0 +1,25 @@ +package com.artemchep.keyguard.common.service.download + +import arrow.core.Either +import java.io.File + +sealed interface DownloadProgress { + data object None : DownloadProgress + + data class Loading( + val downloaded: Long? = null, + val total: Long? = null, + ) : DownloadProgress { + val percentage: Float? = + if (downloaded != null && total != null) { + val p = downloaded.toDouble() / total.toDouble() + p.toFloat().coerceIn(0f..1f) + } else { + null + } + } + + data class Complete( + val result: Either, + ) : DownloadProgress +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/download/DownloadService.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/download/DownloadService.kt new file mode 100644 index 00000000..70424be4 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/download/DownloadService.kt @@ -0,0 +1,15 @@ +package com.artemchep.keyguard.common.service.download + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.DownloadAttachmentRequestData +import com.artemchep.keyguard.common.model.RemoveAttachmentRequest + +interface DownloadService { + fun download( + request: DownloadAttachmentRequestData, + ): IO + + fun remove( + request: RemoveAttachmentRequest, + ): IO +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/download/DownloadServiceImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/download/DownloadServiceImpl.kt new file mode 100644 index 00000000..a9ee6197 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/download/DownloadServiceImpl.kt @@ -0,0 +1,59 @@ +package com.artemchep.keyguard.common.service.download + +import com.artemchep.keyguard.android.downloader.journal.room.DownloadInfoEntity2 +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.model.DownloadAttachmentRequestData +import com.artemchep.keyguard.common.model.RemoveAttachmentRequest +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class DownloadServiceImpl( + private val downloadManager: DownloadManager, +) : DownloadService { + constructor( + directDI: DirectDI, + ) : this( + downloadManager = directDI.instance(), + ) + + override fun download( + request: DownloadAttachmentRequestData, + ): IO = ioEffect { + val tag = DownloadInfoEntity2.AttachmentDownloadTag( + localCipherId = request.localCipherId, + remoteCipherId = request.remoteCipherId, + attachmentId = request.attachmentId, + ) + downloadManager.queue( + tag = tag, + url = request.url, + urlIsOneTime = request.urlIsOneTime, + name = request.name, + key = request.encryptionKey, + worker = true, + ) + } + + override fun remove( + request: RemoveAttachmentRequest, + ): IO = ioEffect { + when (request) { + is RemoveAttachmentRequest.ByDownloadId -> request.handle() + is RemoveAttachmentRequest.ByLocalCipherAttachment -> request.handle() + } + } + + private suspend fun RemoveAttachmentRequest.ByDownloadId.handle() { + downloadManager.removeByDownloadId(downloadId) + } + + private suspend fun RemoveAttachmentRequest.ByLocalCipherAttachment.handle() { + val ref = DownloadInfoEntity2.AttachmentDownloadTag( + localCipherId = localCipherId, + remoteCipherId = remoteCipherId, + attachmentId = attachmentId, + ) + downloadManager.removeByTag(tag = ref) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/extract/LinkInfoExtractor.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/extract/LinkInfoExtractor.kt new file mode 100644 index 00000000..02c77f8a --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/extract/LinkInfoExtractor.kt @@ -0,0 +1,16 @@ +package com.artemchep.keyguard.common.service.extract + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.LinkInfo +import kotlin.reflect.KClass + +interface LinkInfoExtractor where From : LinkInfo, To : LinkInfo { + val from: KClass + val to: KClass + + fun extractInfo( + uri: From, + ): IO + + fun handles(uri: From): Boolean +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/extract/LinkInfoRegistry.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/extract/LinkInfoRegistry.kt new file mode 100644 index 00000000..7f647614 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/extract/LinkInfoRegistry.kt @@ -0,0 +1,42 @@ +package com.artemchep.keyguard.common.service.extract + +import com.artemchep.keyguard.common.io.attempt +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.model.DSecret +import com.artemchep.keyguard.common.model.LinkInfo + +class LinkInfoRegistry( + private val extractors: List>, +) { + suspend fun process(uri: DSecret.Uri): List { + val allArtifacts = mutableListOf() + var newArtifacts = listOf( + uri, + ) + do { + allArtifacts.addAll(newArtifacts) + + // Generate new list of artifacts from + // the old one. + newArtifacts = newArtifacts + .flatMap { linkInfo -> + extractors + .mapNotNull { extractor -> + val inputMatches = + extractor.from.java.isAssignableFrom(linkInfo.javaClass) && + extractor.handles(linkInfo) + if (inputMatches) { + extractor.extractInfo(linkInfo) + .attempt() + .bind() + // just ignore the ones that failed + .getOrNull() + } else { + null + } + } + } + } while (newArtifacts.isNotEmpty()) + return allArtifacts + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/extract/impl/LinkInfoPlatformExtractor.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/extract/impl/LinkInfoPlatformExtractor.kt new file mode 100644 index 00000000..96f25297 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/extract/impl/LinkInfoPlatformExtractor.kt @@ -0,0 +1,81 @@ +package com.artemchep.keyguard.common.service.extract.impl + +import arrow.core.Either +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.model.DSecret +import com.artemchep.keyguard.common.model.LinkInfoPlatform +import com.artemchep.keyguard.common.service.extract.LinkInfoExtractor +import io.ktor.http.URLBuilder +import io.ktor.http.Url +import io.ktor.http.encodedPath +import kotlin.reflect.KClass + +class LinkInfoPlatformExtractor : LinkInfoExtractor { + companion object { + private const val ANDROID_SCHEME_PREFIX = "androidapp://" + private const val IOS_SCHEME_PREFIX = "iosapp://" + + private const val HTTP_SCHEME_PREFIX = "http://" + private const val HTTPS_SCHEME_PREFIX = "https://" + } + + override val from: KClass get() = DSecret.Uri::class + + override val to: KClass get() = LinkInfoPlatform::class + + override fun extractInfo(uri: DSecret.Uri): IO = ioEffect { + val url = uri.uri + when { + url.startsWith(ANDROID_SCHEME_PREFIX, ignoreCase = true) -> + createAndroidPlatform(uri) + + url.startsWith(IOS_SCHEME_PREFIX, ignoreCase = true) -> + createIOSPlatform(uri) + + url.startsWith(HTTP_SCHEME_PREFIX, ignoreCase = true) || + url.startsWith(HTTPS_SCHEME_PREFIX, ignoreCase = true) -> + createWebPlatform(uri) + + else -> LinkInfoPlatform.Other + } + } + + private fun createAndroidPlatform(uri: DSecret.Uri): LinkInfoPlatform { + val packageName = uri.uri + .substring(ANDROID_SCHEME_PREFIX.length) + return LinkInfoPlatform.Android( + packageName = packageName, + ) + } + + private fun createIOSPlatform(uri: DSecret.Uri): LinkInfoPlatform { + val packageName = uri.uri + .substring(IOS_SCHEME_PREFIX.length) + return LinkInfoPlatform.IOS( + packageName = packageName, + ) + } + + private fun createWebPlatform(uri: DSecret.Uri): LinkInfoPlatform { + val parsedUri = Either + .catch { + Url(uri.uri) + } + .getOrNull() + // failed to parse the url, probably we can not open it + ?: return LinkInfoPlatform.Other + + val frontPageUrl = URLBuilder(parsedUri).apply { + parameters.clear() + fragment = "" + encodedPath = "" + }.build() + return LinkInfoPlatform.Web( + url = parsedUri, + frontPageUrl = frontPageUrl, + ) + } + + override fun handles(uri: DSecret.Uri): Boolean = true +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/gpmprivapps/PrivilegedAppsService.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/gpmprivapps/PrivilegedAppsService.kt new file mode 100644 index 00000000..55cb0559 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/gpmprivapps/PrivilegedAppsService.kt @@ -0,0 +1,7 @@ +package com.artemchep.keyguard.common.service.gpmprivapps + +import com.artemchep.keyguard.common.io.IO + +interface PrivilegedAppsService { + fun get(): IO +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/gpmprivapps/impl/PrivilegedAppsServiceImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/gpmprivapps/impl/PrivilegedAppsServiceImpl.kt new file mode 100644 index 00000000..f2be4ae1 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/gpmprivapps/impl/PrivilegedAppsServiceImpl.kt @@ -0,0 +1,28 @@ +package com.artemchep.keyguard.common.service.gpmprivapps.impl + +import arrow.core.partially1 +import com.artemchep.keyguard.common.service.gpmprivapps.PrivilegedAppsService +import com.artemchep.keyguard.common.service.text.TextService +import com.artemchep.keyguard.common.service.text.readFromResourcesAsText +import com.artemchep.keyguard.res.Res +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class PrivilegedAppsServiceImpl( + private val textService: TextService, +) : PrivilegedAppsService { + private val jsonIo = ::loadJustDeleteMeRawData + .partially1(textService) + + constructor( + directDI: DirectDI, + ) : this( + textService = directDI.instance(), + ) + + override fun get() = jsonIo +} + +private suspend fun loadJustDeleteMeRawData( + textService: TextService, +) = textService.readFromResourcesAsText(Res.files.gpm_passkeys_privileged_apps) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/breaches/all/BreachesLocalDataSource.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/breaches/all/BreachesLocalDataSource.kt new file mode 100644 index 00000000..bad8732a --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/breaches/all/BreachesLocalDataSource.kt @@ -0,0 +1,15 @@ +package com.artemchep.keyguard.common.service.hibp.breaches.all + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.service.hibp.breaches.all.model.LocalBreachesEntity +import kotlinx.coroutines.flow.Flow + +interface BreachesLocalDataSource { + fun put( + entity: LocalBreachesEntity?, + ): IO + + fun get(): Flow + + fun clear(): IO +} \ No newline at end of file diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/breaches/all/BreachesRemoteDataSource.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/breaches/all/BreachesRemoteDataSource.kt new file mode 100644 index 00000000..ae86810e --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/breaches/all/BreachesRemoteDataSource.kt @@ -0,0 +1,8 @@ +package com.artemchep.keyguard.common.service.hibp.breaches.all + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.provider.bitwarden.entity.HibpBreachGroup + +interface BreachesRemoteDataSource { + fun get(): IO +} \ No newline at end of file diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/breaches/all/BreachesRepository.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/breaches/all/BreachesRepository.kt new file mode 100644 index 00000000..3fe64df3 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/breaches/all/BreachesRepository.kt @@ -0,0 +1,8 @@ +package com.artemchep.keyguard.common.service.hibp.breaches.all + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.provider.bitwarden.entity.HibpBreachGroup + +interface BreachesRepository { + fun get(): IO +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/breaches/all/impl/BreachesLocalDataSourceImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/breaches/all/impl/BreachesLocalDataSourceImpl.kt new file mode 100644 index 00000000..96dca7b3 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/breaches/all/impl/BreachesLocalDataSourceImpl.kt @@ -0,0 +1,60 @@ +package com.artemchep.keyguard.common.service.hibp.breaches.all.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.service.Files +import com.artemchep.keyguard.common.service.hibp.breaches.all.BreachesLocalDataSource +import com.artemchep.keyguard.common.service.hibp.breaches.all.model.LocalBreachesEntity +import com.artemchep.keyguard.common.service.keyvalue.KeyValueStore +import com.artemchep.keyguard.common.service.keyvalue.getObject +import kotlinx.coroutines.flow.Flow +import kotlinx.serialization.encodeToString +import kotlinx.serialization.json.Json +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class BreachesLocalDataSourceImpl( + private val store: KeyValueStore, + private val json: Json, +) : BreachesLocalDataSource { + companion object { + private const val KEY_LAST_BREACHES = "last_breaches" + } + + private val lastBreachesPref = store + .getObject( + key = KEY_LAST_BREACHES, + defaultValue = null, + serialize = { key -> + if (key == null) { + return@getObject "" + } + + json.encodeToString(key) + }, + deserialize = { data -> + if (data.isBlank()) { + return@getObject null + } + // If any exception happens, we just assume that the data + // is not present at all. Note: this implicitly clears + // the local data of the user. + kotlin.runCatching { + json.decodeFromString(data) + }.getOrNull() + }, + ) + + constructor(directDI: DirectDI) : this( + store = directDI.instance(arg = Files.BREACHES), + json = directDI.instance(), + ) + + override fun put( + entity: LocalBreachesEntity?, + ): IO = lastBreachesPref + .setAndCommit(entity) + + override fun get(): Flow = lastBreachesPref + + override fun clear(): IO = put(null) +} \ No newline at end of file diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/breaches/all/impl/BreachesRemoteDataSourceImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/breaches/all/impl/BreachesRemoteDataSourceImpl.kt new file mode 100644 index 00000000..bfb5fabf --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/breaches/all/impl/BreachesRemoteDataSourceImpl.kt @@ -0,0 +1,41 @@ +package com.artemchep.keyguard.common.service.hibp.breaches.all.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.io.map +import com.artemchep.keyguard.common.service.hibp.breaches.all.BreachesRemoteDataSource +import com.artemchep.keyguard.provider.bitwarden.api.builder.bodyOrApiException +import com.artemchep.keyguard.provider.bitwarden.entity.HibpBreachGroup +import com.artemchep.keyguard.provider.bitwarden.entity.HibpBreachResponse +import io.ktor.client.HttpClient +import io.ktor.client.request.get +import io.ktor.http.userAgent +import kotlinx.coroutines.Dispatchers +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class BreachesRemoteDataSourceImpl( + private val httpClient: HttpClient, +) : BreachesRemoteDataSource { + constructor(directDI: DirectDI) : this( + httpClient = directDI.instance(), + ) + + override fun get(): IO = breachesRequestIo() + .map { + HibpBreachGroup(it) + } + + private fun breachesRequestIo( + ): IO> = ioEffect(Dispatchers.IO) { + // https://haveibeenpwned.com/API/v3#AllBreaches + val url = "https://haveibeenpwned.com/api/v3/breaches" + val breaches = httpClient + .get(url) { + // https://haveibeenpwned.com/API/v3#UserAgent + userAgent("Keyguard") + } + .bodyOrApiException>() + breaches + } +} \ No newline at end of file diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/breaches/all/impl/BreachesRepositoryImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/breaches/all/impl/BreachesRepositoryImpl.kt new file mode 100644 index 00000000..714e362e --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/breaches/all/impl/BreachesRepositoryImpl.kt @@ -0,0 +1,89 @@ +package com.artemchep.keyguard.common.service.hibp.breaches.all.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.flatMap +import com.artemchep.keyguard.common.io.flatTap +import com.artemchep.keyguard.common.io.handleError +import com.artemchep.keyguard.common.io.handleErrorTap +import com.artemchep.keyguard.common.io.io +import com.artemchep.keyguard.common.io.measure +import com.artemchep.keyguard.common.io.toIO +import com.artemchep.keyguard.common.service.hibp.breaches.all.BreachesLocalDataSource +import com.artemchep.keyguard.common.service.hibp.breaches.all.BreachesRemoteDataSource +import com.artemchep.keyguard.common.service.hibp.breaches.all.BreachesRepository +import com.artemchep.keyguard.common.service.hibp.breaches.all.model.LocalBreachesEntity +import com.artemchep.keyguard.common.service.logging.LogRepository +import com.artemchep.keyguard.common.service.logging.postDebug +import com.artemchep.keyguard.provider.bitwarden.entity.HibpBreachGroup +import kotlinx.datetime.Clock +import org.kodein.di.DirectDI +import org.kodein.di.instance +import kotlin.random.Random +import kotlin.time.Duration + +class BreachesRepositoryImpl( + private val logRepository: LogRepository, + private val localDataSource: BreachesLocalDataSource, + private val remoteDataSource: BreachesRemoteDataSource, +) : BreachesRepository { + companion object { + private const val TAG = "BreachesRepository" + + /** + * After this duration, the app will try + * to fetch the items again. + */ + private val CACHE_DURATION = with(Duration) { 7.days } + } + + constructor(directDI: DirectDI) : this( + logRepository = directDI.instance(), + localDataSource = directDI.instance(), + remoteDataSource = directDI.instance(), + ) + + override fun get(): IO = localDataSource.get().toIO() + .flatMap { localEntity -> + logRepository.postDebug(TAG) { + "Got breaches from local." + } + if (localEntity != null) { + return@flatMap if (localEntity.hasExpired()) { + getRemoteAndSave() + .handleError { localEntity.model } + } else { + io(localEntity.model) + } + } + + getRemoteAndSave() + } + + /** + * We are making it fluctuate a bit so when the time comes a + * user doesn't have to query 100% of the passwords at the same + * time. + */ + private fun LocalBreachesEntity.hasExpired() = kotlin.run { + val age = Clock.System.now() - updatedAt + age > CACHE_DURATION.times(0.7 + Random.nextDouble(0.3)) + } + + private fun getRemoteAndSave( + ) = remoteDataSource.get() + .flatTap { remoteEntity -> + val newLocalEntity = LocalBreachesEntity( + updatedAt = Clock.System.now(), + model = remoteEntity, + ) + localDataSource.put(newLocalEntity) + .handleErrorTap { + it.printStackTrace() + } + } + .measure { duration, _ -> + logRepository.postDebug(TAG) { + "Got breaches from HIBP in $duration." + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/breaches/all/model/LocalBreachesEntity.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/breaches/all/model/LocalBreachesEntity.kt new file mode 100644 index 00000000..baf42274 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/breaches/all/model/LocalBreachesEntity.kt @@ -0,0 +1,11 @@ +package com.artemchep.keyguard.common.service.hibp.breaches.all.model + +import com.artemchep.keyguard.provider.bitwarden.entity.HibpBreachGroup +import kotlinx.datetime.Instant +import kotlinx.serialization.Serializable + +@Serializable +data class LocalBreachesEntity( + val updatedAt: Instant, + val model: HibpBreachGroup, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/breaches/find/AccountPwnageDataSource.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/breaches/find/AccountPwnageDataSource.kt new file mode 100644 index 00000000..eeb6fbd9 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/breaches/find/AccountPwnageDataSource.kt @@ -0,0 +1,3 @@ +package com.artemchep.keyguard.common.service.hibp.breaches.find + +interface AccountPwnageDataSource diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/breaches/find/AccountPwnageDataSourceLocal.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/breaches/find/AccountPwnageDataSourceLocal.kt new file mode 100644 index 00000000..027bbfed --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/breaches/find/AccountPwnageDataSourceLocal.kt @@ -0,0 +1,20 @@ +package com.artemchep.keyguard.common.service.hibp.breaches.find + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.data.pwnage.AccountBreach + +interface AccountPwnageDataSourceLocal : AccountPwnageDataSource { + fun put( + entity: AccountBreach, + ): IO + + fun getOne( + username: String, + ): IO + + fun getMany( + usernames: Collection, + ): IO> + + fun clear(): IO +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/breaches/find/AccountPwnageDataSourceRemote.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/breaches/find/AccountPwnageDataSourceRemote.kt new file mode 100644 index 00000000..8cf805ac --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/breaches/find/AccountPwnageDataSourceRemote.kt @@ -0,0 +1,12 @@ +package com.artemchep.keyguard.common.service.hibp.breaches.find + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.AccountId +import com.artemchep.keyguard.common.model.UsernamePwnage + +interface AccountPwnageDataSourceRemote : AccountPwnageDataSource { + fun check( + accountId: AccountId, + username: String, + ): IO +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/breaches/find/AccountPwnageRepository.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/breaches/find/AccountPwnageRepository.kt new file mode 100644 index 00000000..08fbe7cd --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/breaches/find/AccountPwnageRepository.kt @@ -0,0 +1,19 @@ +package com.artemchep.keyguard.common.service.hibp.breaches.find + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.AccountId +import com.artemchep.keyguard.common.model.UsernamePwnage + +interface AccountPwnageRepository { + fun checkOne( + accountId: AccountId, + username: String, + cache: Boolean, + ): IO + + fun checkMany( + accountId: AccountId, + usernames: Set, + cache: Boolean, + ): IO> +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/breaches/find/impl/AccountPwnageDataSourceLocalImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/breaches/find/impl/AccountPwnageDataSourceLocalImpl.kt new file mode 100644 index 00000000..102ac75f --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/breaches/find/impl/AccountPwnageDataSourceLocalImpl.kt @@ -0,0 +1,68 @@ +package com.artemchep.keyguard.common.service.hibp.breaches.find.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.effectMap +import com.artemchep.keyguard.common.service.hibp.breaches.find.AccountPwnageDataSourceLocal +import com.artemchep.keyguard.core.store.DatabaseDispatcher +import com.artemchep.keyguard.core.store.DatabaseManager +import com.artemchep.keyguard.data.Database +import com.artemchep.keyguard.data.pwnage.AccountBreach +import kotlinx.coroutines.CoroutineDispatcher +import org.kodein.di.DirectDI +import org.kodein.di.instance + +/** + * @author Artem Chepurnyi + */ +class AccountPwnageDataSourceLocalImpl( + private val databaseManager: DatabaseManager, + private val dispatcher: CoroutineDispatcher, +) : AccountPwnageDataSourceLocal { + constructor(directDI: DirectDI) : this( + databaseManager = directDI.instance(), + dispatcher = directDI.instance(tag = DatabaseDispatcher), + ) + + override fun put( + entity: AccountBreach, + ): IO = dbEffect { db -> + db.accountBreachQueries.insert( + count = entity.count, + updatedAt = entity.updatedAt, + data = entity.data_, + username = entity.username, + ) + } + + override fun getOne( + username: String, + ): IO = dbEffect { db -> + val model = db.accountBreachQueries + .getByUsername(username) + .executeAsOneOrNull() + model + } + + override fun getMany( + usernames: Collection, + ): IO> = dbEffect { db -> + val list = db.accountBreachQueries + .getByUsernames(usernames) + .executeAsList() + usernames + .asSequence() + .map { username -> + val entity = list.firstOrNull { it.username == username } + username to entity + } + .toMap() + } + + override fun clear(): IO = dbEffect { db -> + db.accountBreachQueries.deleteAll() + } + + private fun dbEffect(block: suspend (Database) -> T) = databaseManager + .get() + .effectMap(dispatcher, block) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/breaches/find/impl/AccountPwnageDataSourceRemoteImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/breaches/find/impl/AccountPwnageDataSourceRemoteImpl.kt new file mode 100644 index 00000000..d17bd49f --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/breaches/find/impl/AccountPwnageDataSourceRemoteImpl.kt @@ -0,0 +1,96 @@ +package com.artemchep.keyguard.common.service.hibp.breaches.find.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.io.mutex +import com.artemchep.keyguard.common.model.AccountId +import com.artemchep.keyguard.common.model.DHibp +import com.artemchep.keyguard.common.model.DHibpC +import com.artemchep.keyguard.common.model.UsernamePwnage +import com.artemchep.keyguard.common.service.hibp.breaches.find.AccountPwnageDataSourceRemote +import com.artemchep.keyguard.common.service.text.Base64Service +import com.artemchep.keyguard.core.store.DatabaseManager +import com.artemchep.keyguard.provider.bitwarden.api.builder.api +import com.artemchep.keyguard.provider.bitwarden.api.builder.breach +import com.artemchep.keyguard.provider.bitwarden.repository.BitwardenTokenRepository +import com.artemchep.keyguard.provider.bitwarden.usecase.util.withRefreshableAccessToken +import io.ktor.client.HttpClient +import kotlinx.coroutines.sync.Mutex +import kotlinx.datetime.TimeZone +import kotlinx.datetime.atStartOfDayIn +import kotlinx.serialization.json.Json +import org.kodein.di.DirectDI +import org.kodein.di.instance + +/** + * @author Artem Chepurnyi + */ +class AccountPwnageDataSourceRemoteImpl( + private val tokenRepository: BitwardenTokenRepository, + private val base64Service: Base64Service, + private val json: Json, + private val httpClient: HttpClient, + private val db: DatabaseManager, +) : AccountPwnageDataSourceRemote { + companion object { + private const val DEFAULT_RETRY_AFTER_MS = 1000L + } + + private val mutex = Mutex() + + constructor(directDI: DirectDI) : this( + tokenRepository = directDI.instance(), + base64Service = directDI.instance(), + json = directDI.instance(), + httpClient = directDI.instance(), + db = directDI.instance(), + ) + + override fun check( + accountId: AccountId, + username: String, + ): IO = ioEffect { + val user = tokenRepository.getById(accountId) + .bind() + requireNotNull(user) { + "Failed to find a token!" + } + + val breaches = withRefreshableAccessToken( + base64Service = base64Service, + httpClient = httpClient, + json = json, + db = db, + user = user, + ) { latestUser -> + val serverEnv = latestUser.env.back() + val accessToken = requireNotNull(latestUser.token).accessToken + serverEnv.api.hibp.breach( + httpClient = httpClient, + env = serverEnv, + token = accessToken, + username = username, + ) + } + + val f = breaches + .map { + DHibp( + title = it.title.orEmpty(), + name = it.name.orEmpty(), + description = it.description + .orEmpty() + .replace("^(
|\\s)+".toRegex(), "") + .replace("(
|\\s)+$".toRegex(), ""), + website = it.domain.orEmpty(), + icon = it.logoPath.orEmpty(), + count = it.pwnCount, + occurredAt = it.breachDate?.atStartOfDayIn(TimeZone.UTC), + reportedAt = it.addedDate?.atStartOfDayIn(TimeZone.UTC), + dataClasses = it.dataClasses, + ) + } + DHibpC(f) + }.mutex(mutex) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/breaches/find/impl/AccountPwnageRepositoryImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/breaches/find/impl/AccountPwnageRepositoryImpl.kt new file mode 100644 index 00000000..e63a3dbf --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/breaches/find/impl/AccountPwnageRepositoryImpl.kt @@ -0,0 +1,205 @@ +package com.artemchep.keyguard.common.service.hibp.breaches.find.impl + +import arrow.core.Either +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.attempt +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.io.effectTap +import com.artemchep.keyguard.common.io.flatMap +import com.artemchep.keyguard.common.io.handleError +import com.artemchep.keyguard.common.io.handleErrorWith +import com.artemchep.keyguard.common.io.io +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.io.map +import com.artemchep.keyguard.common.io.measure +import com.artemchep.keyguard.common.io.parallel +import com.artemchep.keyguard.common.model.AccountId +import com.artemchep.keyguard.common.model.UsernamePwnage +import com.artemchep.keyguard.common.service.hibp.breaches.find.AccountPwnageDataSourceLocal +import com.artemchep.keyguard.common.service.hibp.breaches.find.AccountPwnageDataSourceRemote +import com.artemchep.keyguard.common.service.hibp.breaches.find.AccountPwnageRepository +import com.artemchep.keyguard.common.service.logging.LogRepository +import com.artemchep.keyguard.data.pwnage.AccountBreach +import kotlinx.coroutines.Dispatchers +import kotlinx.datetime.Clock +import org.kodein.di.DirectDI +import org.kodein.di.instance +import kotlin.random.Random +import kotlin.time.Duration + +class AccountPwnageRepositoryImpl( + private val logRepository: LogRepository, + private val localDataSource: AccountPwnageDataSourceLocal, + private val remoteDataSource: AccountPwnageDataSourceRemote, +) : AccountPwnageRepository { + companion object { + private const val TAG = "AccountPwnage" + + /** + * After this duration, the app will try + * to fetch the items again. + */ + private val CACHE_DURATION = with(Duration) { 21.days } + } + + constructor(directDI: DirectDI) : this( + logRepository = directDI.instance(), + localDataSource = directDI.instance(), + remoteDataSource = directDI.instance(), + ) + + override fun checkOne( + accountId: AccountId, + username: String, + cache: Boolean, + ): IO = localDataSource + .getOne(username) + .handleError { null } + .flatMap { localPwnage -> + localPwnage?.let { entity -> + val localIo = io(entity) + .effectTap { pwnage -> + val msg = kotlin.run { + val passwordPrefix = username.take(2) + val passwordOccurrences = pwnage.count + "Obtained local pwnage report for '$passwordPrefix****', $passwordOccurrences occurrences." + } + logRepository.post(TAG, msg) + } + .map { + UsernamePwnage( + leaks = emptyList(), + ) + } + + if (entity.hasExpired()) { + checkRemote(accountId, username, cache = cache) + .handleErrorWith { + localIo + } + } else { + localIo + } + } + // Otherwise check the remote data source and + // store the result in the local one. + ?: checkRemote(accountId, username, cache = cache) + } + + override fun checkMany( + accountId: AccountId, + usernames: Set, + cache: Boolean, + ): IO> = ioEffect { + // According to + // https://stackoverflow.com/a/49960506/1408535 + // maximum number of query parameters is usually + // 999 per query. We do want to be safe, so we use a + // lower value. + val bucketSize = 100 + val entities = usernames + .windowed( + size = bucketSize, + step = bucketSize, + partialWindows = true, + ) + .flatMap { accountsWindow -> + localDataSource + .getMany(accountsWindow) + // On an error, fake a response with + // no data returned. + .handleError { + accountsWindow + .associateWith { null } + } + .bind() + .toList() + } + .toMap() + + val out = mutableMapOf() + val pending = mutableListOf>>>() + entities.entries.forEach { (password, entity) -> + if (entity != null) { + // TODO: dfsdf + val localPwnage = UsernamePwnage( + leaks = emptyList(), + ) +// val localPwnage = PasswordPwnage( +// occurrences = entity.count.toInt(), +// ) + + if (entity.hasExpired()) { + pending += checkRemote(accountId, password, cache = cache) + .handleError { + localPwnage + } + .attempt() + .map { password to it } + } else { + // No need to do any requests, just reuse the + // cached report. + out[password] = localPwnage + } + } else { + pending += checkRemote(accountId, password, cache = cache) + .attempt() + .map { password to it } + } + } + + val q = out.size + val s = pending.size + + val z = pending + .parallel( + context = Dispatchers.IO, + parallelism = 8, + ) + .bind() + z.forEach { (password, result) -> + val pwnage = result.getOrNull() + out[password] = pwnage + } + + out + } + + /** + * We are making it fluctuate a bit so when the time comes a + * user doesn't have to query 100% of the passwords at the same + * time. + */ + private fun AccountBreach.hasExpired() = kotlin.run { + val age = Clock.System.now() - updatedAt + age > CACHE_DURATION.times(0.7 + Random.nextDouble(0.3)) + } + + private fun checkRemote( + accountId: AccountId, + password: String, + cache: Boolean = true, + ) = remoteDataSource + .check(accountId, password) + .effectTap { remotePwnage -> +// if (cache) { +// val now = Clock.System.now() +// val count = remotePwnage.occurrences.toLong() +// val entity = AccountBreach( +// password = password, +// count = count, +// updatedAt = now, +// ) +// localDataSource +// .put(entity) +// .bind() +// } + } + .measure { duration, remotePwnage -> +// logRepository.postDebug(TAG) { +// val prefix = password.take(4) +// val count = remotePwnage.occurrences +// "Obtained remote pwnage report for '$prefix****': $count occurrences, took $duration." +// } + } +} \ No newline at end of file diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/passwords/PasswordPwnageDataSource.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/passwords/PasswordPwnageDataSource.kt new file mode 100644 index 00000000..93b4aa78 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/passwords/PasswordPwnageDataSource.kt @@ -0,0 +1,3 @@ +package com.artemchep.keyguard.common.service.hibp.passwords + +interface PasswordPwnageDataSource diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/passwords/PasswordPwnageDataSourceLocal.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/passwords/PasswordPwnageDataSourceLocal.kt new file mode 100644 index 00000000..4d065db2 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/passwords/PasswordPwnageDataSourceLocal.kt @@ -0,0 +1,20 @@ +package com.artemchep.keyguard.common.service.hibp.passwords + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.data.pwnage.PasswordBreach + +interface PasswordPwnageDataSourceLocal : PasswordPwnageDataSource { + fun put( + entity: PasswordBreach, + ): IO + + fun getOne( + password: String, + ): IO + + fun getMany( + passwords: Collection, + ): IO> + + fun clear(): IO +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/passwords/PasswordPwnageDataSourceRemote.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/passwords/PasswordPwnageDataSourceRemote.kt new file mode 100644 index 00000000..6c6e3df1 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/passwords/PasswordPwnageDataSourceRemote.kt @@ -0,0 +1,10 @@ +package com.artemchep.keyguard.common.service.hibp.passwords + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.PasswordPwnage + +interface PasswordPwnageDataSourceRemote : PasswordPwnageDataSource { + fun check( + password: String, + ): IO +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/passwords/PasswordPwnageRepository.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/passwords/PasswordPwnageRepository.kt new file mode 100644 index 00000000..0197ba4c --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/passwords/PasswordPwnageRepository.kt @@ -0,0 +1,16 @@ +package com.artemchep.keyguard.common.service.hibp.passwords + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.PasswordPwnage + +interface PasswordPwnageRepository { + fun checkOne( + password: String, + cache: Boolean, + ): IO + + fun checkMany( + passwords: Set, + cache: Boolean, + ): IO> +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/passwords/impl/PasswordPwnageDataSourceLocalImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/passwords/impl/PasswordPwnageDataSourceLocalImpl.kt new file mode 100644 index 00000000..319e609d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/passwords/impl/PasswordPwnageDataSourceLocalImpl.kt @@ -0,0 +1,67 @@ +package com.artemchep.keyguard.common.service.hibp.passwords.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.effectMap +import com.artemchep.keyguard.common.service.hibp.passwords.PasswordPwnageDataSourceLocal +import com.artemchep.keyguard.core.store.DatabaseDispatcher +import com.artemchep.keyguard.core.store.DatabaseManager +import com.artemchep.keyguard.data.Database +import com.artemchep.keyguard.data.pwnage.PasswordBreach +import kotlinx.coroutines.CoroutineDispatcher +import org.kodein.di.DirectDI +import org.kodein.di.instance + +/** + * @author Artem Chepurnyi + */ +class PasswordPwnageDataSourceLocalImpl( + private val databaseManager: DatabaseManager, + private val dispatcher: CoroutineDispatcher, +) : PasswordPwnageDataSourceLocal { + constructor(directDI: DirectDI) : this( + databaseManager = directDI.instance(), + dispatcher = directDI.instance(tag = DatabaseDispatcher), + ) + + override fun put( + entity: PasswordBreach, + ): IO = dbEffect { db -> + db.passwordBreachQueries.insert( + password = entity.password, + count = entity.count, + updatedAt = entity.updatedAt, + ) + } + + override fun getOne( + password: String, + ): IO = dbEffect { db -> + val model = db.passwordBreachQueries + .getByPassword(password) + .executeAsOneOrNull() + model + } + + override fun getMany( + passwords: Collection, + ): IO> = dbEffect { db -> + val list = db.passwordBreachQueries + .getByPasswords(passwords) + .executeAsList() + passwords + .asSequence() + .map { password -> + val entity = list.firstOrNull { it.password == password } + password to entity + } + .toMap() + } + + override fun clear(): IO = dbEffect { db -> + db.passwordBreachQueries.deleteAll() + } + + private fun dbEffect(block: suspend (Database) -> T) = databaseManager + .get() + .effectMap(dispatcher, block) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/passwords/impl/PasswordPwnageDataSourceRemoteImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/passwords/impl/PasswordPwnageDataSourceRemoteImpl.kt new file mode 100644 index 00000000..86b3f4ab --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/passwords/impl/PasswordPwnageDataSourceRemoteImpl.kt @@ -0,0 +1,81 @@ +package com.artemchep.keyguard.common.service.hibp.passwords.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.flatMap +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.io.map +import com.artemchep.keyguard.common.model.PasswordPwnage +import com.artemchep.keyguard.common.service.crypto.CryptoGenerator +import com.artemchep.keyguard.common.service.hibp.passwords.PasswordPwnageDataSourceRemote +import io.ktor.client.HttpClient +import io.ktor.client.request.get +import io.ktor.client.statement.bodyAsChannel +import io.ktor.http.userAgent +import io.ktor.util.hex +import io.ktor.utils.io.cancel +import io.ktor.utils.io.readUTF8Line +import kotlinx.coroutines.Dispatchers +import org.kodein.di.DirectDI +import org.kodein.di.instance +import java.util.Locale + +/** + * @author Artem Chepurnyi + */ +class PasswordPwnageDataSourceRemoteImpl( + private val cryptoGenerator: CryptoGenerator, + private val httpClient: HttpClient, +) : PasswordPwnageDataSourceRemote { + constructor(directDI: DirectDI) : this( + cryptoGenerator = directDI.instance(), + httpClient = directDI.instance(), + ) + + override fun check( + password: String, + ): IO = ioEffect(Dispatchers.Default) { + val hash = cryptoGenerator.hashSha1(password.toByteArray()) + .let(::hex) + .uppercase(Locale.ENGLISH) + hash + } + .flatMap(::pwnedPasswordsRequestIo) + .map { occurrences -> + PasswordPwnage( + occurrences = occurrences, + ) + } + + private fun pwnedPasswordsRequestIo( + passwordSha1Hash: String, + ): IO = ioEffect(Dispatchers.IO) { + val prefix = passwordSha1Hash.take(5) + val suffix = passwordSha1Hash.drop(5) + + // https://haveibeenpwned.com/API/v3 + val url = "https://api.pwnedpasswords.com/range/$prefix" + val response = httpClient + .get(url) { + // https://haveibeenpwned.com/API/v3#UserAgent + userAgent("Keyguard") + } + val channel = response + .bodyAsChannel() + try { + while (!channel.isClosedForRead) { + val line = channel.readUTF8Line() + if (line != null && line.startsWith(suffix)) { + val count = line + .substringAfter(':') + .toInt() + return@ioEffect count + } + } + } finally { + if (!channel.isClosedForRead) + channel.cancel() + } + + return@ioEffect 0 + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/passwords/impl/PasswordPwnageRepositoryImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/passwords/impl/PasswordPwnageRepositoryImpl.kt new file mode 100644 index 00000000..e7975d47 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/hibp/passwords/impl/PasswordPwnageRepositoryImpl.kt @@ -0,0 +1,198 @@ +package com.artemchep.keyguard.common.service.hibp.passwords.impl + +import arrow.core.Either +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.attempt +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.io.effectTap +import com.artemchep.keyguard.common.io.flatMap +import com.artemchep.keyguard.common.io.handleError +import com.artemchep.keyguard.common.io.handleErrorWith +import com.artemchep.keyguard.common.io.io +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.io.map +import com.artemchep.keyguard.common.io.measure +import com.artemchep.keyguard.common.io.parallel +import com.artemchep.keyguard.common.model.PasswordPwnage +import com.artemchep.keyguard.common.service.hibp.passwords.PasswordPwnageDataSourceLocal +import com.artemchep.keyguard.common.service.hibp.passwords.PasswordPwnageDataSourceRemote +import com.artemchep.keyguard.common.service.hibp.passwords.PasswordPwnageRepository +import com.artemchep.keyguard.common.service.logging.LogRepository +import com.artemchep.keyguard.common.service.logging.postDebug +import com.artemchep.keyguard.data.pwnage.PasswordBreach +import kotlinx.coroutines.Dispatchers +import kotlinx.datetime.Clock +import org.kodein.di.DirectDI +import org.kodein.di.instance +import kotlin.random.Random +import kotlin.time.Duration + +class PasswordPwnageRepositoryImpl( + private val logRepository: LogRepository, + private val localDataSource: PasswordPwnageDataSourceLocal, + private val remoteDataSource: PasswordPwnageDataSourceRemote, +) : PasswordPwnageRepository { + companion object { + private const val TAG = "PasswordPwnage" + + /** + * After this duration, the app will try + * to fetch the items again. + */ + private val CACHE_DURATION = with(Duration) { 21.days } + } + + constructor(directDI: DirectDI) : this( + logRepository = directDI.instance(), + localDataSource = directDI.instance(), + remoteDataSource = directDI.instance(), + ) + + override fun checkOne( + password: String, + cache: Boolean, + ): IO = localDataSource + .getOne(password) + .handleError { null } + .flatMap { localPwnage -> + localPwnage?.let { entity -> + val localIo = io(entity) + .effectTap { pwnage -> + val msg = kotlin.run { + val passwordPrefix = password.take(2) + val passwordOccurrences = pwnage.count + "Obtained local pwnage report for '$passwordPrefix****', $passwordOccurrences occurrences." + } + logRepository.post(TAG, msg) + } + .map { + PasswordPwnage( + occurrences = it.count.toInt(), + ) + } + + if (entity.hasExpired()) { + checkRemote(password, cache = cache) + .handleErrorWith { + localIo + } + } else { + localIo + } + } + // Otherwise check the remote data source and + // store the result in the local one. + ?: checkRemote(password, cache = cache) + } + + override fun checkMany( + passwords: Set, + cache: Boolean, + ): IO> = ioEffect { + // According to + // https://stackoverflow.com/a/49960506/1408535 + // maximum number of query parameters is usually + // 999 per query. We do want to be safe, so we use a + // lower value. + val bucketSize = 100 + val entities = passwords + .windowed( + size = bucketSize, + step = bucketSize, + partialWindows = true, + ) + .flatMap { passwordsWindow -> + localDataSource + .getMany(passwordsWindow) + // On an error, fake a response with + // no data returned. + .handleError { + passwordsWindow + .associateWith { null } + } + .bind() + .toList() + } + .toMap() + + val out = mutableMapOf() + val pending = mutableListOf>>>() + entities.entries.forEach { (password, entity) -> + if (entity != null) { + val localPwnage = PasswordPwnage( + occurrences = entity.count.toInt(), + ) + + if (entity.hasExpired()) { + pending += checkRemote(password, cache = cache) + .handleError { + localPwnage + } + .attempt() + .map { password to it } + } else { + // No need to do any requests, just reuse the + // cached report. + out[password] = localPwnage + } + } else { + pending += checkRemote(password, cache = cache) + .attempt() + .map { password to it } + } + } + + val q = out.size + val s = pending.size + + val z = pending + .parallel( + context = Dispatchers.IO, + parallelism = 8, + ) + .bind() + z.forEach { (password, result) -> + val pwnage = result.getOrNull() + out[password] = pwnage + } + + out + } + + /** + * We are making it fluctuate a bit so when the time comes a + * user doesn't have to query 100% of the passwords at the same + * time. + */ + private fun PasswordBreach.hasExpired() = kotlin.run { + val age = Clock.System.now() - updatedAt + age > CACHE_DURATION.times(0.7 + Random.nextDouble(0.3)) + } + + private fun checkRemote( + password: String, + cache: Boolean = true, + ) = remoteDataSource + .check(password) + .effectTap { remotePwnage -> + if (cache) { + val now = Clock.System.now() + val count = remotePwnage.occurrences.toLong() + val entity = PasswordBreach( + password = password, + count = count, + updatedAt = now, + ) + localDataSource + .put(entity) + .bind() + } + } + .measure { duration, remotePwnage -> + logRepository.postDebug(TAG) { + val prefix = password.take(4) + val count = remotePwnage.occurrences + "Obtained remote pwnage report for '$prefix****': $count occurrences, took $duration." + } + } +} \ No newline at end of file diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/id/IdRepository.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/id/IdRepository.kt new file mode 100644 index 00000000..5450620b --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/id/IdRepository.kt @@ -0,0 +1,9 @@ +package com.artemchep.keyguard.common.service.id + +import com.artemchep.keyguard.common.io.IO + +interface IdRepository { + fun put(id: String): IO + + fun get(): IO +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/id/impl/IdRepositoryImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/id/impl/IdRepositoryImpl.kt new file mode 100644 index 00000000..d9ce10d1 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/id/impl/IdRepositoryImpl.kt @@ -0,0 +1,26 @@ +package com.artemchep.keyguard.common.service.id.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.toIO +import com.artemchep.keyguard.common.service.id.IdRepository +import com.artemchep.keyguard.common.service.keyvalue.KeyValuePreference +import com.artemchep.keyguard.common.service.keyvalue.KeyValueStore + +class IdRepositoryImpl( + store: KeyValueStore, +) : IdRepository { + companion object { + private const val KEY = "device_id" + } + + private val deviceIdPref: KeyValuePreference = + store.getString( + key = KEY, + defaultValue = "", + ) + + override fun put(id: String): IO = deviceIdPref + .setAndCommit(id) + + override fun get(): IO = deviceIdPref.toIO() +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/justdeleteme/JustDeleteMeService.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/justdeleteme/JustDeleteMeService.kt new file mode 100644 index 00000000..a99a3f7a --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/justdeleteme/JustDeleteMeService.kt @@ -0,0 +1,7 @@ +package com.artemchep.keyguard.common.service.justdeleteme + +import com.artemchep.keyguard.common.io.IO + +interface JustDeleteMeService { + fun get(): IO> +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/justdeleteme/JustDeleteMeServiceInfo.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/justdeleteme/JustDeleteMeServiceInfo.kt new file mode 100644 index 00000000..75af2c0c --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/justdeleteme/JustDeleteMeServiceInfo.kt @@ -0,0 +1,12 @@ +package com.artemchep.keyguard.common.service.justdeleteme + +data class JustDeleteMeServiceInfo( + val name: String, + val domains: Set = emptySet(), + val url: String? = null, + val difficulty: String? = null, + val notes: String? = null, + val email: String? = null, + val emailSubject: String? = null, + val emailBody: String? = null, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/justdeleteme/impl/JustDeleteMeServiceImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/justdeleteme/impl/JustDeleteMeServiceImpl.kt new file mode 100644 index 00000000..ec24e2e1 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/justdeleteme/impl/JustDeleteMeServiceImpl.kt @@ -0,0 +1,70 @@ +package com.artemchep.keyguard.common.service.justdeleteme.impl + +import arrow.core.partially1 +import com.artemchep.keyguard.common.io.effectMap +import com.artemchep.keyguard.common.io.shared +import com.artemchep.keyguard.common.service.justdeleteme.JustDeleteMeService +import com.artemchep.keyguard.common.service.justdeleteme.JustDeleteMeServiceInfo +import com.artemchep.keyguard.common.service.text.TextService +import com.artemchep.keyguard.common.service.text.readFromResourcesAsText +import com.artemchep.keyguard.res.Res +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import kotlinx.serialization.json.Json +import org.kodein.di.DirectDI +import org.kodein.di.instance + +@Serializable +data class JustDeleteMeEntity( + val name: String, + @SerialName("domains") + val domains: Set = emptySet(), + val url: String? = null, + val difficulty: String? = null, + val notes: String? = null, + val email: String? = null, + @SerialName("email_subject") + val emailSubject: String? = null, + @SerialName("email_body") + val emailBody: String? = null, +) + +fun JustDeleteMeEntity.toDomain() = kotlin.run { + JustDeleteMeServiceInfo( + name = name, + domains = domains, + url = url, + difficulty = difficulty, + notes = notes, + email = email, + emailSubject = emailSubject, + emailBody = emailBody, + ) +} + +class JustDeleteMeServiceImpl( + private val textService: TextService, + private val json: Json, +) : JustDeleteMeService { + private val listIo = ::loadJustDeleteMeRawData + .partially1(textService) + .effectMap { jsonString -> + val entities = json.decodeFromString>(jsonString) + val models = entities.map(JustDeleteMeEntity::toDomain) + models + } + .shared() + + constructor( + directDI: DirectDI, + ) : this( + textService = directDI.instance(), + json = directDI.instance(), + ) + + override fun get() = listIo +} + +private suspend fun loadJustDeleteMeRawData( + textService: TextService, +) = textService.readFromResourcesAsText(Res.files.justdeleteme) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/justgetmydata/JustGetMyDataService.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/justgetmydata/JustGetMyDataService.kt new file mode 100644 index 00000000..1f01efbb --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/justgetmydata/JustGetMyDataService.kt @@ -0,0 +1,7 @@ +package com.artemchep.keyguard.common.service.justgetmydata + +import com.artemchep.keyguard.common.io.IO + +interface JustGetMyDataService { + fun get(): IO> +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/justgetmydata/JustGetMyDataServiceInfo.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/justgetmydata/JustGetMyDataServiceInfo.kt new file mode 100644 index 00000000..8d2bcc11 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/justgetmydata/JustGetMyDataServiceInfo.kt @@ -0,0 +1,12 @@ +package com.artemchep.keyguard.common.service.justgetmydata + +data class JustGetMyDataServiceInfo( + val name: String, + val domains: Set = emptySet(), + val url: String? = null, + val difficulty: String? = null, + val notes: String? = null, + val email: String? = null, + val emailSubject: String? = null, + val emailBody: String? = null, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/justgetmydata/impl/JustGetMyDataServiceImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/justgetmydata/impl/JustGetMyDataServiceImpl.kt new file mode 100644 index 00000000..d057de37 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/justgetmydata/impl/JustGetMyDataServiceImpl.kt @@ -0,0 +1,70 @@ +package com.artemchep.keyguard.common.service.justgetmydata.impl + +import arrow.core.partially1 +import com.artemchep.keyguard.common.io.effectMap +import com.artemchep.keyguard.common.io.shared +import com.artemchep.keyguard.common.service.justgetmydata.JustGetMyDataService +import com.artemchep.keyguard.common.service.justgetmydata.JustGetMyDataServiceInfo +import com.artemchep.keyguard.common.service.text.TextService +import com.artemchep.keyguard.common.service.text.readFromResourcesAsText +import com.artemchep.keyguard.res.Res +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import kotlinx.serialization.json.Json +import org.kodein.di.DirectDI +import org.kodein.di.instance + +@Serializable +data class JustGetMyDataEntity( + val name: String, + @SerialName("domains") + val domains: Set = emptySet(), + val url: String? = null, + val difficulty: String? = null, + val notes: String? = null, + val email: String? = null, + @SerialName("email_subject") + val emailSubject: String? = null, + @SerialName("email_body") + val emailBody: String? = null, +) + +fun JustGetMyDataEntity.toDomain() = kotlin.run { + JustGetMyDataServiceInfo( + name = name, + domains = domains, + url = url, + difficulty = difficulty, + notes = notes, + email = email, + emailSubject = emailSubject, + emailBody = emailBody, + ) +} + +class JustGetMyDataServiceImpl( + private val textService: TextService, + private val json: Json, +) : JustGetMyDataService { + private val listIo = ::loadJustGetMyDataRawData + .partially1(textService) + .effectMap { jsonString -> + val entities = json.decodeFromString>(jsonString) + val models = entities.map(JustGetMyDataEntity::toDomain) + models + } + .shared() + + constructor( + directDI: DirectDI, + ) : this( + textService = directDI.instance(), + json = directDI.instance(), + ) + + override fun get() = listIo +} + +private suspend fun loadJustGetMyDataRawData( + textService: TextService, +) = textService.readFromResourcesAsText(Res.files.justgetmydata) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/keyvalue/KeyValuePreference.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/keyvalue/KeyValuePreference.kt new file mode 100644 index 00000000..c0a459b6 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/keyvalue/KeyValuePreference.kt @@ -0,0 +1,52 @@ +package com.artemchep.keyguard.common.service.keyvalue + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.flatMap +import com.artemchep.keyguard.common.io.io +import com.artemchep.keyguard.common.io.map +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.map +import kotlinx.datetime.Instant +import kotlin.time.Duration + +private const val NONE_INSTANT = -1L + +private const val NONE_DURATION = -1L + +interface KeyValuePreference : Flow { + fun setAndCommit(value: T): IO + + fun deleteAndCommit(): IO +} + +// Instant + +fun KeyValuePreference.setAndCommit(instant: Instant?) = io(instant) + .map { inst -> + inst?.toEpochMilliseconds() + ?: NONE_INSTANT + } + .flatMap(this::setAndCommit) + +fun KeyValuePreference.asInstant() = this + .map { millis -> + millis.takeUnless { it == NONE_INSTANT } + ?.let(Instant::fromEpochMilliseconds) + } + +// Duration + +fun KeyValuePreference.setAndCommit(duration: Duration?) = io(duration) + .map { dur -> + dur?.inWholeMilliseconds + ?: NONE_DURATION + } + .flatMap(this::setAndCommit) + +fun KeyValuePreference.asDuration() = this + .map { millis -> + with(Duration) { + millis.takeUnless { it == NONE_DURATION } + ?.milliseconds + } + } diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/keyvalue/KeyValueStore.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/keyvalue/KeyValueStore.kt new file mode 100644 index 00000000..9ee8f78d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/keyvalue/KeyValueStore.kt @@ -0,0 +1,79 @@ +package com.artemchep.keyguard.common.service.keyvalue + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.flatMap +import com.artemchep.keyguard.common.io.ioEffect +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.InternalCoroutinesApi +import kotlinx.coroutines.flow.FlowCollector +import kotlinx.coroutines.flow.flowOn +import kotlinx.coroutines.flow.map + +interface KeyValueStore { + companion object { + /** + * Flag that marks that the migration from X to this + * key value store has been completed. + */ + const val HAS_MIGRATED = "__has_migrated" + } + + fun getAll(): IO> + + fun getKeys(): IO> + + fun getInt(key: String, defaultValue: Int): KeyValuePreference + + fun getFloat(key: String, defaultValue: Float): KeyValuePreference + + fun getBoolean(key: String, defaultValue: Boolean): KeyValuePreference + + fun getLong(key: String, defaultValue: Long): KeyValuePreference + + fun getString(key: String, defaultValue: String): KeyValuePreference +} + +interface SecureKeyValueStore : KeyValueStore + +fun KeyValueStore.getObject( + key: String, + defaultValue: T, + serialize: (T) -> String, + deserialize: (String) -> T, +): KeyValuePreference { + val stringPref = getString(key, serialize(defaultValue)) + return object : KeyValuePreference { + override fun setAndCommit(value: T): IO = ioEffect(Dispatchers.Default) { + serialize(value) + } + .flatMap(stringPref::setAndCommit) + + override fun deleteAndCommit(): IO = stringPref.deleteAndCommit() + + override suspend fun collect(collector: FlowCollector) = stringPref + .map { + deserialize(it) + } + .flowOn(Dispatchers.Default) + .collect(collector) + } +} + +inline fun > KeyValueStore.getEnumNullable( + key: String, + crossinline lens: (T) -> String, +): KeyValuePreference = getObject( + key, + defaultValue = null, + serialize = { value -> + value?.let(lens) + .orEmpty() + }, + deserialize = { serializedKey -> + T::class.java + .enumConstants + .firstOrNull { + lens(it) == serializedKey + } + }, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/keyvalue/impl/JsonKeyValueStore.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/keyvalue/impl/JsonKeyValueStore.kt new file mode 100644 index 00000000..83a3c307 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/keyvalue/impl/JsonKeyValueStore.kt @@ -0,0 +1,185 @@ +package com.artemchep.keyguard.common.service.keyvalue.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.io.dispatchOn +import com.artemchep.keyguard.common.io.effectMap +import com.artemchep.keyguard.common.io.handleError +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.io.ioRaise +import com.artemchep.keyguard.common.io.ioUnit +import com.artemchep.keyguard.common.io.map +import com.artemchep.keyguard.common.service.keyvalue.KeyValuePreference +import com.artemchep.keyguard.common.service.keyvalue.KeyValueStore +import com.artemchep.keyguard.common.service.keyvalue.SecureKeyValueStore +import com.artemchep.keyguard.common.service.state.impl.toJson +import com.artemchep.keyguard.common.service.state.impl.toMap +import kotlinx.collections.immutable.PersistentMap +import kotlinx.collections.immutable.persistentMapOf +import kotlinx.collections.immutable.toPersistentMap +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.FlowCollector +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.flow +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.updateAndGet +import kotlinx.coroutines.sync.Mutex +import kotlinx.coroutines.sync.withLock +import kotlinx.serialization.encodeToString +import kotlinx.serialization.json.Json +import kotlinx.serialization.json.JsonObject +import java.io.File + +class DefaultJsonKeyValueStoreStore : JsonKeyValueStoreStore { + override fun read(): IO> = + ioEffect { + persistentMapOf() + } + + override fun write(state: PersistentMap): IO = ioUnit() +} + +class FileJsonKeyValueStoreStore( + private val fileIo: IO, + private val json: Json, +) : JsonKeyValueStoreStore { + override fun read(): IO> = fileIo + .effectMap { it.readText() } + .map { text -> + val el = json.decodeFromString(text) + el.toMap().toPersistentMap() + } + .dispatchOn(Dispatchers.IO) + + override fun write(state: PersistentMap): IO = fileIo + .effectMap { file -> + val text = json.encodeToString(state.toJson()) + // Make sure the directory exists + file.parentFile.mkdirs() + // Overwrite the content of a file + file.writeText(text) + } + .dispatchOn(Dispatchers.IO) +} + +interface JsonKeyValueStoreStore { + fun read(): IO> + + fun write(state: PersistentMap): IO +} + +class JsonKeyValueStore( + private val str: JsonKeyValueStoreStore = DefaultJsonKeyValueStoreStore(), +) : KeyValueStore, SecureKeyValueStore { + class SharedPrefsKeyValuePreference( + private val key: String, + private val default: T, + private val update: suspend ((PersistentMap) -> PersistentMap) -> Unit, + private val flow: Flow>, + ) : KeyValuePreference { + override fun setAndCommit(value: T): IO = ioEffect { + update { state -> + state.put(key, value) + } + } + + override fun deleteAndCommit(): IO = ioEffect { + update { state -> + state.remove(key) + } + } + + override suspend fun collect(collector: FlowCollector) { + flow + .map { + val value = it[key] as? T + value ?: default + } + .distinctUntilChanged() + .collect(collector) + } + } + + private val mutex = Mutex() + + private val sink = MutableStateFlow(persistentMapOf()) + + private val flow: Flow> = flow { + ensureInit() + sink.collect(this) + } + + private var init = false + + private suspend fun ensureInit(): PersistentMap { + // Initialize the sink with data from the external + // database. + if (!init) { + mutex.withLock { + if (!init) { + val data = str.read() + .handleError { + persistentMapOf() + } + .bind() + sink.value = data + } + init = true + } + } + + return sink.value + } + + private fun getFlowPrefs( + key: String, + defaultValue: T, + ) = SharedPrefsKeyValuePreference( + key = key, + default = defaultValue, + update = { + ensureInit() + + val newValue = sink.updateAndGet(it) + str.write(newValue).bind() + }, + flow = flow, + ) + + override fun getAll(): IO> = ioRaise(RuntimeException()) + + override fun getKeys(): IO> = getAll() + .map { it.keys } + + override fun getInt(key: String, defaultValue: Int): KeyValuePreference = + getFlowPrefs( + key = key, + defaultValue = defaultValue, + ) + + override fun getFloat(key: String, defaultValue: Float): KeyValuePreference = + getFlowPrefs( + key = key, + defaultValue = defaultValue, + ) + + override fun getBoolean(key: String, defaultValue: Boolean): KeyValuePreference = + getFlowPrefs( + key = key, + defaultValue = defaultValue, + ) + + override fun getLong(key: String, defaultValue: Long): KeyValuePreference = + getFlowPrefs( + key = key, + defaultValue = defaultValue, + ) + + override fun getString(key: String, defaultValue: String): KeyValuePreference = + getFlowPrefs( + key = key, + defaultValue = defaultValue, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/license/LicenseService.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/license/LicenseService.kt new file mode 100644 index 00000000..4c70c1cb --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/license/LicenseService.kt @@ -0,0 +1,8 @@ +package com.artemchep.keyguard.common.service.license + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.service.license.model.License + +interface LicenseService { + fun get(): IO> +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/license/impl/LicenseServiceImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/license/impl/LicenseServiceImpl.kt new file mode 100644 index 00000000..c6f14586 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/license/impl/LicenseServiceImpl.kt @@ -0,0 +1,79 @@ +package com.artemchep.keyguard.common.service.license.impl + +import arrow.core.partially1 +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.effectMap +import com.artemchep.keyguard.common.service.license.LicenseService +import com.artemchep.keyguard.common.service.license.model.License +import com.artemchep.keyguard.common.service.text.TextService +import com.artemchep.keyguard.common.service.text.readFromResourcesAsText +import com.artemchep.keyguard.res.Res +import kotlinx.serialization.Serializable +import kotlinx.serialization.json.Json +import org.kodein.di.DirectDI +import org.kodein.di.instance + +@Serializable +data class LicenseEntity( + val groupId: String, + val artifactId: String, + val version: String, + val name: String? = null, + val spdxLicenses: List = emptyList(), + val scm: Scm? = null, +) { + @Serializable + data class SpdxLicense( + val identifier: String, + val name: String, + val url: String? = null, + ) + + @Serializable + data class Scm( + val url: String? = null, + ) +} + +private fun LicenseEntity.toDomain(): License = License( + groupId = groupId, + artifactId = artifactId, + version = version, + name = name, + spdxLicenses = spdxLicenses.map(LicenseEntity.SpdxLicense::toDomain), + scm = scm?.let(LicenseEntity.Scm::toDomain), +) + +private fun LicenseEntity.SpdxLicense.toDomain(): License.SpdxLicense = License.SpdxLicense( + identifier = identifier, + name = name, + url = url, +) + +private fun LicenseEntity.Scm.toDomain(): License.Scm = License.Scm( + url = url, +) + +class LicenseServiceImpl( + private val textService: TextService, + private val json: Json, +) : LicenseService { + constructor( + directDI: DirectDI, + ) : this( + textService = directDI.instance(), + json = directDI.instance(), + ) + + override fun get(): IO> = ::loadLicensesRawData + .partially1(textService) + .effectMap { jsonString -> + val entities = json.decodeFromString>(jsonString) + val models = entities.map(LicenseEntity::toDomain) + models + } +} + +private suspend fun loadLicensesRawData( + textService: TextService, +) = textService.readFromResourcesAsText(Res.files.licenses) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/license/model/License.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/license/model/License.kt new file mode 100644 index 00000000..09b22266 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/license/model/License.kt @@ -0,0 +1,20 @@ +package com.artemchep.keyguard.common.service.license.model + +data class License( + val name: String?, + val groupId: String, + val artifactId: String, + val version: String, + val spdxLicenses: List, + val scm: Scm? = null, +) { + data class SpdxLicense( + val identifier: String, + val name: String, + val url: String? = null, + ) + + data class Scm( + val url: String? = null, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/logging/LogLevel.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/logging/LogLevel.kt new file mode 100644 index 00000000..aeccfe53 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/logging/LogLevel.kt @@ -0,0 +1,8 @@ +package com.artemchep.keyguard.common.service.logging + +enum class LogLevel { + DEBUG, + INFO, + WARNING, + ERROR, +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/logging/LogRepository.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/logging/LogRepository.kt new file mode 100644 index 00000000..9adfea87 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/logging/LogRepository.kt @@ -0,0 +1,32 @@ +package com.artemchep.keyguard.common.service.logging + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.platform.util.isRelease + +interface LogRepository { + fun post( + tag: String, + message: String, + level: LogLevel = LogLevel.DEBUG, + ) + + fun add( + tag: String, + message: String, + level: LogLevel = LogLevel.DEBUG, + ): IO +} + +/** + * A version that only exists in debug and gets completely + * stripped in release builds. + */ +inline fun LogRepository.postDebug( + tag: String, + provideMassage: () -> String, +) { + if (!isRelease) { + val msg = provideMassage() + post(tag, msg, level = LogLevel.DEBUG) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/logging/kotlin/LogRepositoryKotlin.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/logging/kotlin/LogRepositoryKotlin.kt new file mode 100644 index 00000000..49c11f0d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/logging/kotlin/LogRepositoryKotlin.kt @@ -0,0 +1,26 @@ +package com.artemchep.keyguard.common.service.logging.kotlin + +import com.artemchep.keyguard.common.io.attempt +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.service.logging.LogLevel +import com.artemchep.keyguard.common.service.logging.LogRepository +import kotlinx.coroutines.GlobalScope + +class LogRepositoryKotlin : LogRepository { + override fun post( + tag: String, + message: String, + level: LogLevel, + ) { + add(tag, message, level).attempt().launchIn(GlobalScope) + } + + override fun add( + tag: String, + message: String, + level: LogLevel, + ) = ioEffect { + println("$tag: $message") + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/passkey/PassKeyService.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/passkey/PassKeyService.kt new file mode 100644 index 00000000..a0557e4d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/passkey/PassKeyService.kt @@ -0,0 +1,7 @@ +package com.artemchep.keyguard.common.service.passkey + +import com.artemchep.keyguard.common.io.IO + +interface PassKeyService { + fun get(): IO> +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/passkey/PassKeyServiceInfo.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/passkey/PassKeyServiceInfo.kt new file mode 100644 index 00000000..953a853d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/passkey/PassKeyServiceInfo.kt @@ -0,0 +1,11 @@ +package com.artemchep.keyguard.common.service.passkey + +data class PassKeyServiceInfo( + val name: String, + val domain: String, + val domains: Set = emptySet(), + val setup: String? = null, + val documentation: String? = null, + val notes: String? = null, + val features: Set = emptySet(), +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/passkey/impl/PassKeyServiceImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/passkey/impl/PassKeyServiceImpl.kt new file mode 100644 index 00000000..61217bb5 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/passkey/impl/PassKeyServiceImpl.kt @@ -0,0 +1,66 @@ +package com.artemchep.keyguard.common.service.passkey.impl + +import arrow.core.partially1 +import com.artemchep.keyguard.common.io.effectMap +import com.artemchep.keyguard.common.io.shared +import com.artemchep.keyguard.common.service.passkey.PassKeyService +import com.artemchep.keyguard.common.service.passkey.PassKeyServiceInfo +import com.artemchep.keyguard.common.service.text.TextService +import com.artemchep.keyguard.common.service.text.readFromResourcesAsText +import com.artemchep.keyguard.res.Res +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import kotlinx.serialization.json.Json +import org.kodein.di.DirectDI +import org.kodein.di.instance + +@Serializable +data class PassKeyEntity( + val name: String, + val domain: String, + @SerialName("additional-domains") + val domains: Set = emptySet(), + val setup: String? = null, + val documentation: String? = null, + val notes: String? = null, + val features: Set = emptySet(), +) + +fun PassKeyEntity.toDomain() = kotlin.run { + PassKeyServiceInfo( + name = name, + domain = domain, + domains = domains + domain, + setup = setup, + documentation = documentation, + notes = notes, + features = features, + ) +} + +class PassKeyServiceImpl( + private val textService: TextService, + private val json: Json, +) : PassKeyService { + private val listIo = ::loadPassKeyRawData + .partially1(textService) + .effectMap { jsonString -> + val entities = json.decodeFromString>(jsonString) + val models = entities.map(PassKeyEntity::toDomain) + models + } + .shared() + + constructor( + directDI: DirectDI, + ) : this( + textService = directDI.instance(), + json = directDI.instance(), + ) + + override fun get() = listIo +} + +private suspend fun loadPassKeyRawData( + textService: TextService, +) = textService.readFromResourcesAsText(Res.files.passkeys) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/permission/Permission.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/permission/Permission.kt new file mode 100644 index 00000000..69ac7006 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/permission/Permission.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.service.permission + +expect enum class Permission { + POST_NOTIFICATIONS, +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/permission/PermissionService.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/permission/PermissionService.kt new file mode 100644 index 00000000..62b66caa --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/permission/PermissionService.kt @@ -0,0 +1,13 @@ +package com.artemchep.keyguard.common.service.permission + +import kotlinx.coroutines.flow.Flow + +interface PermissionService { + /** + * Returns a state of target permission; changes if a user + * allows it in a runtime. + */ + fun getState( + permission: Permission, + ): Flow +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/permission/PermissionState.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/permission/PermissionState.kt new file mode 100644 index 00000000..82a25189 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/permission/PermissionState.kt @@ -0,0 +1,11 @@ +package com.artemchep.keyguard.common.service.permission + +import com.artemchep.keyguard.platform.LeContext + +sealed interface PermissionState { + data object Granted : PermissionState + + data class Declined( + val ask: (LeContext) -> Unit, + ) : PermissionState +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/power/PowerService.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/power/PowerService.kt new file mode 100644 index 00000000..e5f6cb48 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/power/PowerService.kt @@ -0,0 +1,8 @@ +package com.artemchep.keyguard.common.service.power + +import com.artemchep.keyguard.common.model.Screen +import kotlinx.coroutines.flow.Flow + +interface PowerService { + fun getScreenState(): Flow +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/relays/api/EmailRelay.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/relays/api/EmailRelay.kt new file mode 100644 index 00000000..cbbd182f --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/relays/api/EmailRelay.kt @@ -0,0 +1,27 @@ +package com.artemchep.keyguard.common.service.relays.api + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.GeneratorContext +import kotlinx.collections.immutable.ImmutableMap +import kotlinx.collections.immutable.persistentMapOf + +interface EmailRelay { + val type: String + + /** + * Human-readable name of the email relay, will + * be shown directly to a user. + */ + val name: String + + val docUrl: String? + get() = null + + val schema: ImmutableMap + get() = persistentMapOf() + + fun generate( + context: GeneratorContext, + config: ImmutableMap, + ): IO +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/relays/api/EmailRelaySchema.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/relays/api/EmailRelaySchema.kt new file mode 100644 index 00000000..5d599001 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/relays/api/EmailRelaySchema.kt @@ -0,0 +1,20 @@ +package com.artemchep.keyguard.common.service.relays.api + +import com.artemchep.keyguard.feature.confirmation.ConfirmationRoute +import com.artemchep.keyguard.feature.localization.TextHolder + +/** + * Schema defines the data that a user must fill + * for sending a request. All the UI is drawn automatically + * basing on the schema. + */ +data class EmailRelaySchema( + val title: TextHolder, + val hint: TextHolder? = null, + val type: ConfirmationRoute.Args.Item.StringItem.Type = ConfirmationRoute.Args.Item.StringItem.Type.Text, + /** + * `true` if the empty value is a valid + * value, `false` otherwise. + */ + val canBeEmpty: Boolean = true, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/relays/api/anonaddy/AnonAddyEmailRelay.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/relays/api/anonaddy/AnonAddyEmailRelay.kt new file mode 100644 index 00000000..2148cd00 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/relays/api/anonaddy/AnonAddyEmailRelay.kt @@ -0,0 +1,113 @@ +package com.artemchep.keyguard.common.service.relays.api.anonaddy + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.model.GeneratorContext +import com.artemchep.keyguard.common.service.relays.api.EmailRelay +import com.artemchep.keyguard.common.service.relays.api.EmailRelaySchema +import com.artemchep.keyguard.feature.confirmation.ConfirmationRoute +import com.artemchep.keyguard.feature.localization.TextHolder +import com.artemchep.keyguard.res.Res +import io.ktor.client.HttpClient +import io.ktor.client.call.body +import io.ktor.client.request.header +import io.ktor.client.request.post +import io.ktor.client.request.setBody +import io.ktor.http.ContentType +import io.ktor.http.HttpStatusCode +import io.ktor.http.contentType +import io.ktor.http.isSuccess +import kotlinx.collections.immutable.ImmutableMap +import kotlinx.collections.immutable.persistentMapOf +import kotlinx.serialization.Serializable +import kotlinx.serialization.json.JsonObject +import kotlinx.serialization.json.jsonObject +import kotlinx.serialization.json.jsonPrimitive +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class AnonAddyEmailRelay( + private val httpClient: HttpClient, +) : EmailRelay { + companion object { + private const val ENDPOINT = "https://app.addy.io/api/v1/aliases" + + private const val KEY_API_KEY = "apiKey" + private const val HINT_API_KEY = "TODO" + private const val KEY_DOMAIN = "domain" + private const val HINT_DOMAIN = "TODO" + } + + override val type = "AnonAddy" + + override val name = "AnonAddy" + + override val docUrl = "https://bitwarden.com/help/generator/#tab-addy.io-3Uj911RtQsJD9OAhUuoKrz" + + override val schema = persistentMapOf( + KEY_API_KEY to EmailRelaySchema( + title = TextHolder.Res(Res.strings.api_key), + hint = TextHolder.Value(HINT_API_KEY), + type = ConfirmationRoute.Args.Item.StringItem.Type.Token, + canBeEmpty = false, + ), + KEY_DOMAIN to EmailRelaySchema( + title = TextHolder.Res(Res.strings.domain), + hint = TextHolder.Value(HINT_DOMAIN), + canBeEmpty = false, + ), + ) + + constructor(directDI: DirectDI) : this( + httpClient = directDI.instance(), + ) + + override fun generate( + context: GeneratorContext, + config: ImmutableMap, + ): IO = ioEffect { + val apiKey = requireNotNull(config[KEY_API_KEY]) { + "API key is required for creating an email alias." + } + val domain = requireNotNull(config[KEY_DOMAIN]) { + "Domain is required for creating an email alias." + } + // https://app.anonaddy.com/docs/#aliases-POSTapi-v1-aliases + val response = httpClient + .post(ENDPOINT) { + header("Authorization", "Bearer $apiKey") + + val body = AnonAddyRequest( + domain = domain, + description = context.host, + ) + contentType(ContentType.Application.Json) + setBody(body) + } + require(response.status.isSuccess()) { + // Example of an error: + // {"message":"Unauthenticated."} + val message = runCatching { + val result = response + .body() + result["message"]?.jsonPrimitive?.content + }.getOrNull() + message ?: HttpStatusCode.fromValue(response.status.value).description + } + val result = response + .body() + val alias = runCatching { + result["data"]?.jsonObject?.get("email")?.jsonPrimitive?.content + }.getOrNull() + requireNotNull(alias) { + "Email alias is missing from the response. " + + "Please report this to the developer." + } + } + + @Serializable + private data class AnonAddyRequest( + val domain: String, + val description: String?, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/relays/api/duckduckgo/DuckDuckGoEmailRelay.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/relays/api/duckduckgo/DuckDuckGoEmailRelay.kt new file mode 100644 index 00000000..cda7f56f --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/relays/api/duckduckgo/DuckDuckGoEmailRelay.kt @@ -0,0 +1,79 @@ +package com.artemchep.keyguard.common.service.relays.api.duckduckgo + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.model.GeneratorContext +import com.artemchep.keyguard.common.service.relays.api.EmailRelay +import com.artemchep.keyguard.common.service.relays.api.EmailRelaySchema +import com.artemchep.keyguard.feature.confirmation.ConfirmationRoute +import com.artemchep.keyguard.feature.localization.TextHolder +import com.artemchep.keyguard.res.Res +import io.ktor.client.HttpClient +import io.ktor.client.call.body +import io.ktor.client.request.header +import io.ktor.client.request.post +import io.ktor.http.HttpStatusCode +import io.ktor.http.isSuccess +import kotlinx.collections.immutable.ImmutableMap +import kotlinx.collections.immutable.persistentMapOf +import kotlinx.serialization.json.JsonObject +import kotlinx.serialization.json.jsonPrimitive +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class DuckDuckGoEmailRelay( + private val httpClient: HttpClient, +) : EmailRelay { + companion object { + private const val ENDPOINT = "https://quack.duckduckgo.com/api/email/addresses" + + private const val KEY_API_KEY = "apiKey" + private const val HINT_API_KEY = + "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + } + + override val type = "DuckDuckGo" + + override val name = "DuckDuckGo" + + override val docUrl = + "https://bitwarden.com/help/generator/#tab-duckduckgo-3Uj911RtQsJD9OAhUuoKrz" + + override val schema = persistentMapOf( + KEY_API_KEY to EmailRelaySchema( + title = TextHolder.Res(Res.strings.api_key), + hint = TextHolder.Value(HINT_API_KEY), + type = ConfirmationRoute.Args.Item.StringItem.Type.Token, + canBeEmpty = false, + ), + ) + + constructor(directDI: DirectDI) : this( + httpClient = directDI.instance(), + ) + + override fun generate( + context: GeneratorContext, + config: ImmutableMap, + ): IO = ioEffect { + val apiKey = requireNotNull(config[KEY_API_KEY]) { + "API key is required for creating an email alias." + } + // https://duckduckgo.com/email/ + val response = httpClient + .post(ENDPOINT) { + header("Authorization", "Bearer $apiKey") + } + require(response.status.isSuccess()) { + HttpStatusCode.fromValue(response.status.value).description + } + val result = response + .body() + val aliasPrefix = result["address"]?.jsonPrimitive?.content + requireNotNull(aliasPrefix) { + "Email alias is missing from the response. " + + "Please report this to the developer." + } + "$aliasPrefix@duck.com" + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/relays/api/fastmail/FastmailEmailRelay.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/relays/api/fastmail/FastmailEmailRelay.kt new file mode 100644 index 00000000..5ac3bdfe --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/relays/api/fastmail/FastmailEmailRelay.kt @@ -0,0 +1,58 @@ +package com.artemchep.keyguard.common.service.relays.api.fastmail + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.model.GeneratorContext +import com.artemchep.keyguard.common.service.relays.api.EmailRelay +import com.artemchep.keyguard.common.service.relays.api.EmailRelaySchema +import com.artemchep.keyguard.feature.confirmation.ConfirmationRoute +import com.artemchep.keyguard.feature.localization.TextHolder +import com.artemchep.keyguard.res.Res +import io.ktor.client.HttpClient +import kotlinx.collections.immutable.ImmutableMap +import kotlinx.collections.immutable.persistentMapOf +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class FastmailEmailRelay( + private val httpClient: HttpClient, +) : EmailRelay { + companion object { + private const val ENDPOINT = "https://api.fastmail.com/jmap/api/" + + private const val KEY_API_KEY = "apiKey" + private const val HINT_API_KEY = + "xxxx-xxxxxxxx-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx-x-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + } + + override val type = "Fastmail" + + override val name = "Fastmail" + + override val docUrl = + "https://bitwarden.com/help/generator/#tab-fastmail-3Uj911RtQsJD9OAhUuoKrz" + + override val schema = persistentMapOf( + KEY_API_KEY to EmailRelaySchema( + title = TextHolder.Res(Res.strings.api_key), + hint = TextHolder.Value(HINT_API_KEY), + type = ConfirmationRoute.Args.Item.StringItem.Type.Token, + canBeEmpty = false, + ), + ) + + constructor(directDI: DirectDI) : this( + httpClient = directDI.instance(), + ) + + override fun generate( + context: GeneratorContext, + config: ImmutableMap, + ): IO = ioEffect { + val apiKey = requireNotNull(config[KEY_API_KEY]) { + "API key is required for creating an email alias." + } + // TODO: Add Fastmail integration + throw RuntimeException("Not implemented") + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/relays/api/firefoxrelay/FirefoxRelayEmailRelay.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/relays/api/firefoxrelay/FirefoxRelayEmailRelay.kt new file mode 100644 index 00000000..5d36e896 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/relays/api/firefoxrelay/FirefoxRelayEmailRelay.kt @@ -0,0 +1,101 @@ +package com.artemchep.keyguard.common.service.relays.api.firefoxrelay + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.model.GeneratorContext +import com.artemchep.keyguard.common.service.relays.api.EmailRelay +import com.artemchep.keyguard.common.service.relays.api.EmailRelaySchema +import com.artemchep.keyguard.feature.confirmation.ConfirmationRoute +import com.artemchep.keyguard.feature.localization.TextHolder +import com.artemchep.keyguard.res.Res +import io.ktor.client.HttpClient +import io.ktor.client.call.body +import io.ktor.client.request.header +import io.ktor.client.request.post +import io.ktor.client.request.setBody +import io.ktor.http.ContentType +import io.ktor.http.HttpStatusCode +import io.ktor.http.contentType +import io.ktor.http.isSuccess +import kotlinx.collections.immutable.ImmutableMap +import kotlinx.collections.immutable.persistentMapOf +import kotlinx.serialization.Serializable +import kotlinx.serialization.json.JsonObject +import kotlinx.serialization.json.jsonPrimitive +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class FirefoxRelayEmailRelay( + private val httpClient: HttpClient, +) : EmailRelay { + companion object { + private const val ENDPOINT = "https://relay.firefox.com/api/v1/relayaddresses/" + + private const val KEY_API_KEY = "apiKey" + private const val HINT_API_KEY = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" + } + + override val type = "FirefoxRelay" + + override val name = "Firefox Relay" + + override val docUrl = + "https://bitwarden.com/help/generator/#tab-firefox-relay-3Uj911RtQsJD9OAhUuoKrz" + + override val schema = persistentMapOf( + KEY_API_KEY to EmailRelaySchema( + title = TextHolder.Res(Res.strings.api_key), + hint = TextHolder.Value(HINT_API_KEY), + type = ConfirmationRoute.Args.Item.StringItem.Type.Token, + canBeEmpty = false, + ), + ) + + constructor(directDI: DirectDI) : this( + httpClient = directDI.instance(), + ) + + override fun generate( + context: GeneratorContext, + config: ImmutableMap, + ): IO = ioEffect { + val apiKey = requireNotNull(config[KEY_API_KEY]) { + "API key is required for creating an email alias." + } + // https://relay.firefox.com/ + val response = httpClient + .post(ENDPOINT) { + header("Authorization", "Token $apiKey") + + val body = FirefoxRelayRequest( + enabled = true, + description = "Generated by Keyguard.", + ) + contentType(ContentType.Application.Json) + setBody(body) + } + require(response.status.isSuccess()) { + // Example of an error: + // {"detail":"Invalid token."} + val message = runCatching { + val result = response + .body() + result["detail"]?.jsonPrimitive?.content + }.getOrNull() + message ?: HttpStatusCode.fromValue(response.status.value).description + } + val result = response + .body() + val alias = result["full_address"]?.jsonPrimitive?.content + requireNotNull(alias) { + "Email alias is missing from the response. " + + "Please report this to the developer." + } + } + + @Serializable + private data class FirefoxRelayRequest( + val enabled: Boolean, + val description: String, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/relays/api/forwardemail/ForwardEmailEmailRelay.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/relays/api/forwardemail/ForwardEmailEmailRelay.kt new file mode 100644 index 00000000..3feb84e0 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/relays/api/forwardemail/ForwardEmailEmailRelay.kt @@ -0,0 +1,123 @@ +package com.artemchep.keyguard.common.service.relays.api.forwardemail + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.model.GeneratorContext +import com.artemchep.keyguard.common.service.relays.api.EmailRelay +import com.artemchep.keyguard.common.service.relays.api.EmailRelaySchema +import com.artemchep.keyguard.common.service.text.Base64Service +import com.artemchep.keyguard.feature.confirmation.ConfirmationRoute +import com.artemchep.keyguard.feature.localization.TextHolder +import com.artemchep.keyguard.res.Res +import io.ktor.client.HttpClient +import io.ktor.client.call.body +import io.ktor.client.request.header +import io.ktor.client.request.post +import io.ktor.client.request.setBody +import io.ktor.http.ContentType +import io.ktor.http.HttpStatusCode +import io.ktor.http.contentType +import io.ktor.http.isSuccess +import kotlinx.collections.immutable.ImmutableMap +import kotlinx.collections.immutable.persistentMapOf +import kotlinx.serialization.Serializable +import kotlinx.serialization.json.JsonObject +import kotlinx.serialization.json.jsonObject +import kotlinx.serialization.json.jsonPrimitive +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class ForwardEmailEmailRelay( + private val base64Service: Base64Service, + private val httpClient: HttpClient, +) : EmailRelay { + companion object { + private const val KEY_API_KEY = "apiKey" + private const val HINT_API_KEY = "XXXX" + private const val KEY_DOMAIN = "domain" + private const val HINT_DOMAIN = "mailsire.com" + } + + override val type = "ForwardEmail" + + override val name = "Forward Email" + + override val docUrl = + "https://bitwarden.com/help/generator/#tab-forward-email-3Uj911RtQsJD9OAhUuoKrz" + + override val schema = persistentMapOf( + KEY_API_KEY to EmailRelaySchema( + title = TextHolder.Res(Res.strings.api_key), + hint = TextHolder.Value(HINT_API_KEY), + type = ConfirmationRoute.Args.Item.StringItem.Type.Token, + canBeEmpty = false, + ), + KEY_DOMAIN to EmailRelaySchema( + title = TextHolder.Res(Res.strings.domain), + hint = TextHolder.Value(HINT_DOMAIN), + canBeEmpty = false, + ), + ) + + constructor(directDI: DirectDI) : this( + base64Service = directDI.instance(), + httpClient = directDI.instance(), + ) + + override fun generate( + context: GeneratorContext, + config: ImmutableMap, + ): IO = ioEffect { + val apiKey = requireNotNull(config[KEY_API_KEY]) { + "API key is required for creating an email alias." + } + val domain = requireNotNull(config[KEY_DOMAIN]) { + "Domain is required for creating an email alias." + } + + val endpoint = "https://api.forwardemail.net/v1/domains/$domain/aliases" + val response = httpClient + .post(endpoint) { + val token = base64Service.encodeToString("$apiKey:") + header("Authorization", "Basic $token") + + val body = ForwardEmailRequest( + description = context.host + ?: "Generated by Keyguard", + ) + contentType(ContentType.Application.Json) + setBody(body) + } + require(response.status.isSuccess()) { + // Example of an error: + // { + // "statusCode": 401, + // "error": "Unauthorized", + // "message": "Invalid API token." + // } + val message = runCatching { + val result = response + .body() + result["message"]?.jsonPrimitive?.content + ?: result["error"]?.jsonPrimitive?.content + }.getOrNull() + message ?: HttpStatusCode.fromValue(response.status.value).description + } + val result = response + .body() + val aliasName = result["name"]?.jsonPrimitive?.content + val aliasDomain = runCatching { + result["domain"]?.jsonObject?.get("name")?.jsonPrimitive?.content + }.getOrNull() ?: domain + requireNotNull(aliasName) { + "Email alias is missing from the response. " + + "Please report this to the developer." + } + "$aliasName@$aliasDomain" + } + + @Serializable + private data class ForwardEmailRequest( + val description: String, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/relays/api/simplelogin/SimpleLoginEmailRelay.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/relays/api/simplelogin/SimpleLoginEmailRelay.kt new file mode 100644 index 00000000..0632e329 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/relays/api/simplelogin/SimpleLoginEmailRelay.kt @@ -0,0 +1,106 @@ +package com.artemchep.keyguard.common.service.relays.api.simplelogin + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.model.GeneratorContext +import com.artemchep.keyguard.common.service.relays.api.EmailRelay +import com.artemchep.keyguard.common.service.relays.api.EmailRelaySchema +import com.artemchep.keyguard.feature.confirmation.ConfirmationRoute +import com.artemchep.keyguard.feature.localization.TextHolder +import com.artemchep.keyguard.res.Res +import io.ktor.client.HttpClient +import io.ktor.client.call.body +import io.ktor.client.request.header +import io.ktor.client.request.parameter +import io.ktor.client.request.post +import io.ktor.http.HttpStatusCode +import io.ktor.http.isSuccess +import kotlinx.collections.immutable.ImmutableMap +import kotlinx.collections.immutable.persistentMapOf +import kotlinx.serialization.json.JsonObject +import kotlinx.serialization.json.jsonPrimitive +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class SimpleLoginEmailRelay( + private val httpClient: HttpClient, +) : EmailRelay { + companion object { + private const val ENDPOINT = "https://app.simplelogin.io/api/alias/random/new" + + private const val KEY_API_KEY = "apiKey" + private const val HINT_API_KEY = + "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" + private const val KEY_MODE = "mode" + } + + override val type = "SimpleLogin" + + override val name = "SimpleLogin" + + override val docUrl = + "https://bitwarden.com/help/generator/#tab-simplelogin-3Uj911RtQsJD9OAhUuoKrz" + + override val schema = persistentMapOf( + KEY_API_KEY to EmailRelaySchema( + title = TextHolder.Res(Res.strings.api_key), + hint = TextHolder.Value(HINT_API_KEY), + type = ConfirmationRoute.Args.Item.StringItem.Type.Token, + canBeEmpty = false, + ), + ) + + constructor(directDI: DirectDI) : this( + httpClient = directDI.instance(), + ) + + override fun generate( + context: GeneratorContext, + config: ImmutableMap, + ): IO = ioEffect { + val apiKey = requireNotNull(config[KEY_API_KEY]) { + "API key is required for creating an email alias." + } + // Create a new random alias. + // + // - Authentication header that contains the api key + // - (Optional, query) "hostname" + // - (Optional, query) "mode": either 'uuid' or 'word'. By default, use the user setting when creating new random alias. + // + // Request Message Body in json (Content-Type is application/json) + // - (Optional) note: alias note + // + // https://github.com/simple-login/app/blob/master/docs/api.md#post-apialiasrandomnew + val response = httpClient + .post(ENDPOINT) { + header("Authentication", apiKey) + + // Optional parameters. + val hostname = context.host + if (hostname != null) { + parameter("hostname", hostname) + } + val mode = config[KEY_MODE] + if (mode != null) { + parameter("mode", mode) + } + } + require(response.status.isSuccess()) { + // Example of an error: + // {"error":"Wrong api key"} + val message = runCatching { + val result = response + .body() + result["error"]?.jsonPrimitive?.content + }.getOrNull() + message ?: HttpStatusCode.fromValue(response.status.value).description + } + val result = response + .body() + val alias = result["alias"]?.jsonPrimitive?.content + requireNotNull(alias) { + "Email alias is missing from the response. " + + "Please report this to the developer." + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/relays/di/EmailRelayModule.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/relays/di/EmailRelayModule.kt new file mode 100644 index 00000000..e897fa72 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/relays/di/EmailRelayModule.kt @@ -0,0 +1,38 @@ +package com.artemchep.keyguard.common.service.relays.di + +import com.artemchep.keyguard.common.service.relays.api.anonaddy.AnonAddyEmailRelay +import com.artemchep.keyguard.common.service.relays.api.duckduckgo.DuckDuckGoEmailRelay +import com.artemchep.keyguard.common.service.relays.api.firefoxrelay.FirefoxRelayEmailRelay +import com.artemchep.keyguard.common.service.relays.api.forwardemail.ForwardEmailEmailRelay +import com.artemchep.keyguard.common.service.relays.api.simplelogin.SimpleLoginEmailRelay +import org.kodein.di.DI +import org.kodein.di.bindSingleton + +fun emailRelayDiModule() = DI.Module("emailRelay") { + // + // Email relays + // + bindSingleton { + AnonAddyEmailRelay(this) + } + bindSingleton { + DuckDuckGoEmailRelay(this) + } +// bindSingleton { +// FastmailEmailRelay(this) +// } + bindSingleton { + FirefoxRelayEmailRelay(this) + } + bindSingleton { + ForwardEmailEmailRelay(this) + } + bindSingleton { + SimpleLoginEmailRelay(this) + } + + // + // Common + // + +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/relays/repo/GeneratorEmailRelayRepository.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/relays/repo/GeneratorEmailRelayRepository.kt new file mode 100644 index 00000000..f225fea3 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/relays/repo/GeneratorEmailRelayRepository.kt @@ -0,0 +1,13 @@ +package com.artemchep.keyguard.common.service.relays.repo + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.DGeneratorEmailRelay +import com.artemchep.keyguard.provider.bitwarden.repository.BaseRepository + +interface GeneratorEmailRelayRepository : BaseRepository { + fun removeAll(): IO + + fun removeByIds( + ids: Set, + ): IO +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/relays/repo/GeneratorEmailRelayRepositoryImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/relays/repo/GeneratorEmailRelayRepositoryImpl.kt new file mode 100644 index 00000000..24c1bdb9 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/relays/repo/GeneratorEmailRelayRepositoryImpl.kt @@ -0,0 +1,112 @@ +package com.artemchep.keyguard.common.service.relays.repo + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.effectMap +import com.artemchep.keyguard.common.model.DGeneratorEmailRelay +import com.artemchep.keyguard.common.service.state.impl.toJson +import com.artemchep.keyguard.common.service.state.impl.toMap +import com.artemchep.keyguard.common.util.sqldelight.flatMapQueryToList +import com.artemchep.keyguard.core.store.DatabaseDispatcher +import com.artemchep.keyguard.core.store.DatabaseManager +import com.artemchep.keyguard.data.GeneratorEmailRelayQueries +import kotlinx.collections.immutable.toPersistentMap +import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.map +import kotlinx.serialization.encodeToString +import kotlinx.serialization.json.Json +import kotlinx.serialization.json.jsonObject +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class GeneratorEmailRelayRepositoryImpl( + private val databaseManager: DatabaseManager, + private val json: Json, + private val dispatcher: CoroutineDispatcher, +) : GeneratorEmailRelayRepository { + constructor( + directDI: DirectDI, + ) : this( + databaseManager = directDI.instance(), + json = directDI.instance(), + dispatcher = directDI.instance(tag = DatabaseDispatcher), + ) + + override fun get(): Flow> = + daoEffect { dao -> + dao.get(1000) + } + .flatMapQueryToList(dispatcher) + .map { entities -> + entities + .map { entity -> + val data = kotlin + .runCatching { + val el = json.parseToJsonElement(entity.data_) + el.jsonObject + .toMap() + .mapValues { entry -> + entry.value.toString() + } + } + .getOrElse { + emptyMap() + } + .toPersistentMap() + DGeneratorEmailRelay( + id = entity.id.toString(), + name = entity.name, + type = entity.type, + data = data, + createdDate = entity.createdAt, + ) + } + } + + override fun put(model: DGeneratorEmailRelay): IO = + daoEffect { dao -> + val data = json.encodeToString(model.data.toJson()) + val id = model.id?.toLongOrNull() + if (id != null) { + dao.update( + id = id, + name = model.name, + type = model.type, + data = data, + createdAt = model.createdDate, + ) + } else { + dao.insert( + name = model.name, + type = model.type, + data = data, + createdAt = model.createdDate, + ) + } + } + + override fun removeAll(): IO = + daoEffect { dao -> + dao.deleteAll() + } + + override fun removeByIds(ids: Set): IO = + daoEffect { dao -> + dao.transaction { + ids.forEach { + val id = it.toLongOrNull() + ?: return@forEach + dao.deleteByIds(id) + } + } + } + + private inline fun daoEffect( + crossinline block: suspend (GeneratorEmailRelayQueries) -> T, + ): IO = databaseManager + .get() + .effectMap(dispatcher) { db -> + val dao = db.generatorEmailRelayQueries + block(dao) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/review/ReviewLog.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/review/ReviewLog.kt new file mode 100644 index 00000000..f9d26806 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/review/ReviewLog.kt @@ -0,0 +1,13 @@ +package com.artemchep.keyguard.common.service.review + +import com.artemchep.keyguard.common.io.IO +import kotlinx.coroutines.flow.Flow +import kotlinx.datetime.Instant + +interface ReviewLog { + fun setLastRequestedAt( + requestedAt: Instant, + ): IO + + fun getLastRequestedAt(): Flow +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/review/ReviewService.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/review/ReviewService.kt new file mode 100644 index 00000000..92d47023 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/review/ReviewService.kt @@ -0,0 +1,10 @@ +package com.artemchep.keyguard.common.service.review + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.platform.LeContext + +interface ReviewService { + fun request( + context: LeContext, + ): IO +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/review/impl/ReviewLogImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/review/impl/ReviewLogImpl.kt new file mode 100644 index 00000000..05a06d63 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/review/impl/ReviewLogImpl.kt @@ -0,0 +1,37 @@ +package com.artemchep.keyguard.common.service.review.impl + +import com.artemchep.keyguard.common.service.Files +import com.artemchep.keyguard.common.service.keyvalue.KeyValueStore +import com.artemchep.keyguard.common.service.keyvalue.asInstant +import com.artemchep.keyguard.common.service.keyvalue.setAndCommit +import com.artemchep.keyguard.common.service.review.ReviewLog +import kotlinx.datetime.Instant +import org.kodein.di.DirectDI +import org.kodein.di.instance + +/** + * @author Artem Chepurnyi + */ +class ReviewLogImpl( + private val store: KeyValueStore, +) : ReviewLog { + companion object { + private const val KEY_LAST_REQUESTED_AT = "last_requested_at" + + private const val NONE_INSTANT = -1L + } + + private val lastRequestedAtPref = + store.getLong(KEY_LAST_REQUESTED_AT, NONE_INSTANT) + + constructor(directDI: DirectDI) : this( + store = directDI.instance(arg = Files.REVIEW), + ) + + override fun setLastRequestedAt( + requestedAt: Instant, + ) = lastRequestedAtPref + .setAndCommit(requestedAt) + + override fun getLastRequestedAt() = lastRequestedAtPref.asInstant() +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/settings/SettingsReadRepository.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/settings/SettingsReadRepository.kt new file mode 100644 index 00000000..387fc095 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/settings/SettingsReadRepository.kt @@ -0,0 +1,88 @@ +package com.artemchep.keyguard.common.service.settings + +import com.artemchep.keyguard.common.model.AppColors +import com.artemchep.keyguard.common.model.AppFont +import com.artemchep.keyguard.common.model.AppTheme +import com.artemchep.keyguard.common.model.NavAnimation +import kotlinx.coroutines.flow.Flow +import kotlinx.datetime.Instant +import kotlin.time.Duration + +/** + * @author Artem Chepurnyi + */ +interface SettingsReadRepository { + fun getAutofillInlineSuggestions(): Flow + + fun getAutofillManualSelection(): Flow + + fun getAutofillRespectAutofillOff(): Flow + + fun getAutofillSaveRequest(): Flow + + fun getAutofillSaveUri(): Flow + + fun getAutofillCopyTotp(): Flow + + fun getVaultPersist(): Flow + + fun getVaultLockAfterReboot(): Flow + + fun getVaultTimeout(): Flow + + fun getVaultScreenLock(): Flow + + fun getBiometricTimeout(): Flow + + fun getClipboardClearDelay(): Flow + + fun getClipboardUpdateDuration(): Flow + + fun getConcealFields(): Flow + + fun getAllowScreenshots(): Flow + + fun getOnboardingLastVisitInstant(): Flow + + fun getCheckPwnedPasswords(): Flow + + fun getCheckPwnedServices(): Flow + + fun getCheckTwoFA(): Flow + + fun getWriteAccess(): Flow + + fun getDebugPremium(): Flow + + fun getDebugScreenDelay(): Flow + + fun getCachePremium(): Flow + + fun getAppIcons(): Flow + + fun getWebsiteIcons(): Flow + + fun getMarkdown(): Flow + + fun getNavAnimation(): Flow + + fun getNavLabel(): Flow + + fun getFont(): Flow + + fun getTheme(): Flow + + fun getThemeUseAmoledDark(): Flow + + fun getKeepScreenOn(): Flow + + fun getAllowTwoPanelLayoutInPortrait(): Flow + + fun getAllowTwoPanelLayoutInLandscape(): Flow + + fun getUseExternalBrowser(): Flow + + fun getColors(): Flow + + fun getLocale(): Flow +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/settings/SettingsReadWriteRepository.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/settings/SettingsReadWriteRepository.kt new file mode 100644 index 00000000..6c7ad0d0 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/settings/SettingsReadWriteRepository.kt @@ -0,0 +1,162 @@ +package com.artemchep.keyguard.common.service.settings + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.AppColors +import com.artemchep.keyguard.common.model.AppFont +import com.artemchep.keyguard.common.model.AppTheme +import com.artemchep.keyguard.common.model.NavAnimation +import kotlinx.datetime.Instant +import kotlin.time.Duration + +/** + * @author Artem Chepurnyi + */ +interface SettingsReadWriteRepository : SettingsReadRepository { + fun setAutofillInlineSuggestions( + inlineSuggestions: Boolean, + ): IO + + fun setAutofillManualSelection( + manualSelection: Boolean, + ): IO + + fun setAutofillRespectAutofillOff( + respectAutofillOff: Boolean, + ): IO + + fun setAutofillSaveRequest( + saveRequest: Boolean, + ): IO + + fun setAutofillSaveUri( + saveUri: Boolean, + ): IO + + fun setAutofillCopyTotp( + copyTotp: Boolean, + ): IO + + fun setVaultPersist( + enabled: Boolean, + ): IO + + fun setVaultLockAfterReboot( + enabled: Boolean, + ): IO + + fun setVaultTimeout( + duration: Duration?, + ): IO + + fun setVaultScreenLock( + screenLock: Boolean, + ): IO + + fun setBiometricTimeout( + duration: Duration?, + ): IO + + fun setClipboardClearDelay( + duration: Duration?, + ): IO + + fun setClipboardUpdateDuration( + duration: Duration?, + ): IO + + fun setConcealFields( + concealFields: Boolean, + ): IO + + fun setAllowScreenshots( + allowScreenshots: Boolean, + ): IO + + fun setCheckPwnedPasswords( + checkPwnedPasswords: Boolean, + ): IO + + fun setCheckPwnedServices( + checkPwnedServices: Boolean, + ): IO + + fun setCheckTwoFA( + checkTwoFA: Boolean, + ): IO + + fun setWriteAccess( + writeAccess: Boolean, + ): IO + + fun setDebugPremium( + premium: Boolean, + ): IO + + fun setDebugScreenDelay( + screenDelay: Boolean, + ): IO + + fun setCachePremium( + premium: Boolean, + ): IO + + fun setAppIcons( + appIcons: Boolean, + ): IO + + fun setWebsiteIcons( + websiteIcons: Boolean, + ): IO + + fun setMarkdown( + markdown: Boolean, + ): IO + + fun setOnboardingLastVisitInstant( + instant: Instant, + ): IO + + fun setNavAnimation( + navAnimation: NavAnimation?, + ): IO + + fun setNavLabel( + visible: Boolean, + ): IO + + fun setFont( + font: AppFont?, + ): IO + + fun setTheme( + theme: AppTheme?, + ): IO + + fun setThemeUseAmoledDark( + useAmoledDark: Boolean, + ): IO + + fun setKeepScreenOn( + keepScreenOn: Boolean, + ): IO + + fun setAllowTwoPanelLayoutInPortrait( + allow: Boolean, + ): IO + + fun setAllowTwoPanelLayoutInLandscape( + allow: Boolean, + ): IO + + fun setUseExternalBrowser( + useExternalBrowser: Boolean, + ): IO + + fun setColors( + colors: AppColors?, + ): IO + + fun setLocale( + locale: String?, + ): IO +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl.kt new file mode 100644 index 00000000..49b7d0b3 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/settings/impl/SettingsRepositoryImpl.kt @@ -0,0 +1,388 @@ +package com.artemchep.keyguard.common.service.settings.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.AppColors +import com.artemchep.keyguard.common.model.AppFont +import com.artemchep.keyguard.common.model.AppTheme +import com.artemchep.keyguard.common.model.NavAnimation +import com.artemchep.keyguard.common.service.Files +import com.artemchep.keyguard.common.service.keyvalue.KeyValueStore +import com.artemchep.keyguard.common.service.keyvalue.asDuration +import com.artemchep.keyguard.common.service.keyvalue.getEnumNullable +import com.artemchep.keyguard.common.service.keyvalue.getObject +import com.artemchep.keyguard.common.service.keyvalue.setAndCommit +import com.artemchep.keyguard.common.service.settings.SettingsReadWriteRepository +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.map +import kotlinx.datetime.Instant +import org.kodein.di.DirectDI +import org.kodein.di.instance +import kotlin.time.Duration + +/** + * @author Artem Chepurnyi + */ +class SettingsRepositoryImpl( + private val store: KeyValueStore, +) : SettingsReadWriteRepository { + companion object { + private const val KEY_AUTOFILL_INLINE_SUGGESTIONS = "autofill.inline_suggestions" + private const val KEY_AUTOFILL_MANUAL_SELECTION = "autofill.manual_selection" + private const val KEY_AUTOFILL_RESPECT_AUTOFILL_OFF = "autofill.respect_autofill_off" + private const val KEY_AUTOFILL_SAVE_REQUEST = "autofill.save_request" + private const val KEY_AUTOFILL_SAVE_URI = "autofill.save_uri" + private const val KEY_AUTOFILL_COPY_TOTP = "autofill.copy_totp" + private const val KEY_VAULT_PERSIST = "vault_persist" + private const val KEY_VAULT_REBOOT = "vault_reboot" + private const val KEY_VAULT_TIMEOUT = "vault_timeout" + private const val KEY_VAULT_SCREEN_LOCK = "vault_screen_lock" + private const val KEY_BIOMETRIC_TIMEOUT = "biometric_timeout" + private const val KEY_CLIPBOARD_CLEAR_DELAY = "clipboard_clear_delay" + private const val KEY_CLIPBOARD_UPDATE_DURATION = "clipboard_update_duration" + private const val KEY_CONCEAL_FIELDS = "conceal_fields" + private const val KEY_ALLOW_SCREENSHOTS = "allow_screenshots" + private const val KEY_CHECK_PWNED_PASSWORDS = "check_pwned_passwords" + private const val KEY_CHECK_PWNED_SERVICES = "check_pwned_services" + private const val KEY_CHECK_TWO_FA = "check_two_fa" + private const val KEY_WRITE_ACCESS = "exp.22.write_access" + private const val KEY_DEBUG_PREMIUM = "debug_premium" + private const val KEY_DEBUG_SCREEN_DELAY = "debug_screen_delay" + private const val KEY_CACHE_PREMIUM = "cache_premium" + private const val KEY_APP_ICONS = "app_icons" + private const val KEY_WEBSITE_ICONS = "website_icons" + private const val KEY_MARKDOWN = "markdown" + private const val KEY_NAV_ANIMATION = "nav_animation" + private const val KEY_NAV_LABEL = "nav_label" + private const val KEY_TWO_PANEL_LAYOUT_LANDSCAPE = "two_panel_layout_landscape" + private const val KEY_TWO_PANEL_LAYOUT_PORTRAIT = "two_panel_layout_portrait" + private const val KEY_USE_EXTERNAL_BROWSER = "use_external_browser" + private const val KEY_FONT = "font" + private const val KEY_THEME = "theme" + private const val KEY_THEME_USE_AMOLED_DARK = "theme_use_amoled_dark" + private const val KEY_ONBOARDING_LAST_VISIT = "onboarding_last_visit" + private const val KEY_KEEP_SCREEN_ON = "keep_screen_on" + private const val KEY_COLORS = "colors" + private const val KEY_LOCALE = "locale" + + private const val NONE_DURATION = -1L + } + + private val autofillInlineSuggestionsPref = + store.getBoolean(KEY_AUTOFILL_INLINE_SUGGESTIONS, true) + + private val autofillManualSelectionPref = + store.getBoolean(KEY_AUTOFILL_MANUAL_SELECTION, true) + + private val autofillRespectAutofillOffPref = + store.getBoolean(KEY_AUTOFILL_RESPECT_AUTOFILL_OFF, false) + + private val autofillSaveRequestPref = + store.getBoolean(KEY_AUTOFILL_SAVE_REQUEST, true) + + private val autofillSaveUriPref = + store.getBoolean(KEY_AUTOFILL_SAVE_URI, false) + + private val autofillCopyTotpPref = + store.getBoolean(KEY_AUTOFILL_COPY_TOTP, true) + + private val vaultPersistPref = store.getBoolean(KEY_VAULT_PERSIST, false) + + private val vaultLockAfterRebootPref = store.getBoolean(KEY_VAULT_REBOOT, false) + + private val vaultTimeoutPref = store.getLong(KEY_VAULT_TIMEOUT, NONE_DURATION) + + private val vaultScreenLockPref = store.getBoolean(KEY_VAULT_SCREEN_LOCK, true) + + private val biometricTimeoutPref = store.getLong(KEY_BIOMETRIC_TIMEOUT, NONE_DURATION) + + private val clipboardClearDelayPref = + store.getLong(KEY_CLIPBOARD_CLEAR_DELAY, NONE_DURATION) + + private val clipboardUpdateDurationPref = + store.getLong(KEY_CLIPBOARD_UPDATE_DURATION, NONE_DURATION) + + private val concealFieldsPref = + store.getBoolean(KEY_CONCEAL_FIELDS, true) + + private val allowScreenshotsPref = + store.getBoolean(KEY_ALLOW_SCREENSHOTS, false) + + private val checkPwnedPasswordsPref = + store.getBoolean(KEY_CHECK_PWNED_PASSWORDS, false) + + private val checkPwnedServicesPref = + store.getBoolean(KEY_CHECK_PWNED_SERVICES, false) + + private val checkTwoFAPref = + store.getBoolean(KEY_CHECK_TWO_FA, false) + + private val writeAccessPref = + store.getBoolean(KEY_WRITE_ACCESS, true) + + private val debugPremiumPref = + store.getBoolean(KEY_DEBUG_PREMIUM, false) + + private val debugScreenDelayPref = + store.getBoolean(KEY_DEBUG_SCREEN_DELAY, false) + + private val cachePremiumPref = + store.getBoolean(KEY_CACHE_PREMIUM, false) + + private val appIconsPref = + store.getBoolean(KEY_APP_ICONS, true) + + private val websiteIconsPref = + store.getBoolean(KEY_WEBSITE_ICONS, true) + + private val markdownPref = + store.getBoolean(KEY_MARKDOWN, true) + + private val themeUseAmoledDarkPref = + store.getBoolean(KEY_THEME_USE_AMOLED_DARK, false) + + private val keepScreenOnPref = + store.getBoolean(KEY_KEEP_SCREEN_ON, true) + + private val navLabelPref = + store.getBoolean(KEY_NAV_LABEL, true) + + private val allowTwoPanelLayoutInLandscapePref = + store.getBoolean(KEY_TWO_PANEL_LAYOUT_LANDSCAPE, true) + + private val allowTwoPanelLayoutInPortraitPref = + store.getBoolean(KEY_TWO_PANEL_LAYOUT_PORTRAIT, true) + + private val useExternalBrowserPref = + store.getBoolean(KEY_USE_EXTERNAL_BROWSER, false) + + private val navAnimationPref = + store.getEnumNullable(KEY_NAV_ANIMATION, lens = NavAnimation::key) + + private val fontPref = + store.getEnumNullable(KEY_FONT, lens = AppFont::key) + + private val themePref = + store.getEnumNullable(KEY_THEME, lens = AppTheme::key) + + private val colorsPref = + store.getEnumNullable(KEY_COLORS, lens = AppColors::key) + + private val localePref = + store.getString(KEY_LOCALE, "") + + private val onboardingLastVisitInstantPref = + store.getObject( + KEY_ONBOARDING_LAST_VISIT, + defaultValue = null, + serialize = { instant -> + val millis = instant?.toEpochMilliseconds() + millis?.toString().orEmpty() + }, + deserialize = { millis -> + millis + .toLongOrNull() + ?.let(Instant::fromEpochMilliseconds) + }, + ) + + constructor(directDI: DirectDI) : this( + store = directDI.instance(arg = Files.SETTINGS), + ) + + override fun setAutofillInlineSuggestions(inlineSuggestions: Boolean) = + autofillInlineSuggestionsPref + .setAndCommit(inlineSuggestions) + + override fun getAutofillInlineSuggestions() = autofillInlineSuggestionsPref + + override fun setAutofillManualSelection(manualSelection: Boolean) = autofillManualSelectionPref + .setAndCommit(manualSelection) + + override fun getAutofillManualSelection() = autofillManualSelectionPref + + override fun setAutofillRespectAutofillOff(respectAutofillOff: Boolean) = + autofillRespectAutofillOffPref + .setAndCommit(respectAutofillOff) + + override fun getAutofillRespectAutofillOff() = autofillRespectAutofillOffPref + + override fun setAutofillSaveRequest(saveRequest: Boolean) = autofillSaveRequestPref + .setAndCommit(saveRequest) + + override fun getAutofillSaveRequest() = autofillSaveRequestPref + + override fun setAutofillSaveUri(saveUri: Boolean) = autofillSaveUriPref + .setAndCommit(saveUri) + + override fun getAutofillSaveUri() = autofillSaveUriPref + + override fun setOnboardingLastVisitInstant(instant: Instant): IO = + onboardingLastVisitInstantPref + .setAndCommit(instant) + + override fun getOnboardingLastVisitInstant(): Flow = onboardingLastVisitInstantPref + + override fun setAutofillCopyTotp(copyTotp: Boolean) = autofillCopyTotpPref + .setAndCommit(copyTotp) + + override fun getAutofillCopyTotp() = autofillCopyTotpPref + + override fun setVaultPersist(enabled: Boolean): IO = vaultPersistPref + .setAndCommit(enabled) + + override fun getVaultPersist(): Flow = vaultPersistPref + + override fun setVaultLockAfterReboot(enabled: Boolean): IO = vaultLockAfterRebootPref + .setAndCommit(enabled) + + override fun getVaultLockAfterReboot(): Flow = vaultLockAfterRebootPref + + override fun setVaultTimeout(duration: Duration?) = vaultTimeoutPref + .setAndCommit(duration) + + override fun getVaultTimeout(): Flow = vaultTimeoutPref + .asDuration() + + override fun setVaultScreenLock(screenLock: Boolean) = vaultScreenLockPref + .setAndCommit(screenLock) + + override fun getVaultScreenLock() = vaultScreenLockPref + + override fun setBiometricTimeout(duration: Duration?) = biometricTimeoutPref + .setAndCommit(duration) + + override fun getBiometricTimeout() = biometricTimeoutPref + .asDuration() + + override fun setClipboardClearDelay(duration: Duration?) = clipboardClearDelayPref + .setAndCommit(duration) + + override fun getClipboardClearDelay() = clipboardClearDelayPref + .asDuration() + + override fun setClipboardUpdateDuration(duration: Duration?) = clipboardUpdateDurationPref + .setAndCommit(duration) + + override fun getClipboardUpdateDuration() = clipboardUpdateDurationPref + .asDuration() + + override fun setConcealFields(concealFields: Boolean) = concealFieldsPref + .setAndCommit(concealFields) + + override fun getConcealFields() = concealFieldsPref + + override fun setAllowScreenshots(allowScreenshots: Boolean) = allowScreenshotsPref + .setAndCommit(allowScreenshots) + + override fun getAllowScreenshots() = allowScreenshotsPref + + override fun setCheckPwnedPasswords(checkPwnedPasswords: Boolean) = checkPwnedPasswordsPref + .setAndCommit(checkPwnedPasswords) + + override fun getCheckPwnedPasswords() = checkPwnedPasswordsPref + + override fun setCheckPwnedServices(checkPwnedServices: Boolean) = checkPwnedServicesPref + .setAndCommit(checkPwnedServices) + + override fun getCheckPwnedServices() = checkPwnedServicesPref + + override fun setCheckTwoFA(checkTwoFA: Boolean) = checkTwoFAPref + .setAndCommit(checkTwoFA) + + override fun getCheckTwoFA() = checkTwoFAPref + + override fun setDebugPremium(premium: Boolean) = debugPremiumPref + .setAndCommit(premium) + + override fun getDebugPremium() = debugPremiumPref + + override fun setWriteAccess(writeAccess: Boolean) = writeAccessPref + .setAndCommit(writeAccess) + + override fun getWriteAccess() = writeAccessPref + + override fun setDebugScreenDelay(screenDelay: Boolean) = debugScreenDelayPref + .setAndCommit(screenDelay) + + override fun getDebugScreenDelay() = debugScreenDelayPref + + override fun setCachePremium(premium: Boolean) = cachePremiumPref + .setAndCommit(premium) + + override fun getCachePremium() = cachePremiumPref + + override fun setAppIcons(appIcons: Boolean) = appIconsPref + .setAndCommit(appIcons) + + override fun getAppIcons() = appIconsPref + + override fun setWebsiteIcons(websiteIcons: Boolean) = websiteIconsPref + .setAndCommit(websiteIcons) + + override fun getWebsiteIcons() = websiteIconsPref + + override fun setMarkdown(markdown: Boolean) = markdownPref + .setAndCommit(markdown) + + override fun getMarkdown() = markdownPref + + override fun setNavAnimation(navAnimation: NavAnimation?) = navAnimationPref + .setAndCommit(navAnimation) + + override fun getNavAnimation() = navAnimationPref + + override fun setNavLabel(visible: Boolean) = navLabelPref + .setAndCommit(visible) + + override fun getNavLabel() = navLabelPref + + override fun setFont(font: AppFont?) = fontPref + .setAndCommit(font) + + override fun getFont() = fontPref + + override fun setTheme(theme: AppTheme?) = themePref + .setAndCommit(theme) + + override fun getTheme() = themePref + + override fun setThemeUseAmoledDark(useAmoledDark: Boolean) = themeUseAmoledDarkPref + .setAndCommit(useAmoledDark) + + override fun getThemeUseAmoledDark() = themeUseAmoledDarkPref + + override fun setKeepScreenOn(keepScreenOn: Boolean) = keepScreenOnPref + .setAndCommit(keepScreenOn) + + override fun getKeepScreenOn() = keepScreenOnPref + + override fun setAllowTwoPanelLayoutInLandscape(allow: Boolean) = + allowTwoPanelLayoutInLandscapePref + .setAndCommit(allow) + + override fun getAllowTwoPanelLayoutInLandscape() = allowTwoPanelLayoutInLandscapePref + + override fun setAllowTwoPanelLayoutInPortrait(allow: Boolean) = + allowTwoPanelLayoutInPortraitPref + .setAndCommit(allow) + + override fun getAllowTwoPanelLayoutInPortrait() = allowTwoPanelLayoutInPortraitPref + + override fun getUseExternalBrowser() = useExternalBrowserPref + + override fun setUseExternalBrowser(useExternalBrowser: Boolean) = useExternalBrowserPref + .setAndCommit(useExternalBrowser) + + override fun setColors(colors: AppColors?) = colorsPref + .setAndCommit(colors) + + override fun getColors() = colorsPref + + override fun setLocale(locale: String?) = localePref + .setAndCommit(locale.orEmpty()) + + override fun getLocale() = localePref + .map { locale -> + locale.takeUnless { it.isEmpty() } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/similarity/SimilarityService.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/similarity/SimilarityService.kt new file mode 100644 index 00000000..e8531db7 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/similarity/SimilarityService.kt @@ -0,0 +1,8 @@ +package com.artemchep.keyguard.common.service.similarity + +interface SimilarityService { + fun score( + a: String, + b: String, + ): Float +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/state/StateRepository.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/state/StateRepository.kt new file mode 100644 index 00000000..83e09eb8 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/state/StateRepository.kt @@ -0,0 +1,13 @@ +package com.artemchep.keyguard.common.service.state + +import com.artemchep.keyguard.common.io.IO +import kotlinx.coroutines.flow.Flow + +interface StateRepository { + fun put( + key: String, + model: Map, + ): IO + + fun get(key: String): Flow> +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/state/impl/StateRepositoryImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/state/impl/StateRepositoryImpl.kt new file mode 100644 index 00000000..9abe20a1 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/state/impl/StateRepositoryImpl.kt @@ -0,0 +1,117 @@ +package com.artemchep.keyguard.common.service.state.impl + +import com.artemchep.keyguard.common.model.AnyMap +import com.artemchep.keyguard.common.service.keyvalue.KeyValuePreference +import com.artemchep.keyguard.common.service.keyvalue.KeyValueStore +import com.artemchep.keyguard.common.service.keyvalue.getObject +import com.artemchep.keyguard.common.service.state.StateRepository +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.map +import kotlinx.serialization.encodeToString +import kotlinx.serialization.json.Json +import kotlinx.serialization.json.JsonArray +import kotlinx.serialization.json.JsonElement +import kotlinx.serialization.json.JsonNull +import kotlinx.serialization.json.JsonObject +import kotlinx.serialization.json.JsonPrimitive +import kotlinx.serialization.json.booleanOrNull +import kotlinx.serialization.json.contentOrNull +import kotlinx.serialization.json.doubleOrNull +import kotlinx.serialization.json.jsonArray +import kotlinx.serialization.json.jsonObject +import kotlinx.serialization.json.jsonPrimitive +import kotlinx.serialization.json.longOrNull + +class StateRepositoryImpl( + private val store: KeyValueStore, + private val json: Json, +) : StateRepository { + private val registry = mutableMapOf>() + + private fun createOrGetPref( + key: String, + ): KeyValuePreference = synchronized(this) { + registry.getOrPut(key) { + createPref(key) + } + } + + private fun createPref( + key: String, + ): KeyValuePreference = store.getObject( + key = key, + defaultValue = null, + serialize = { entity -> + val obj = entity?.value.toJson() + obj.let(json::encodeToString) + }, + deserialize = { text -> + kotlin.runCatching { + val obj = json.decodeFromString(text) + val map = obj.toMap() + AnyMap(map) + }.getOrNull() + }, + ) + + override fun put(key: String, model: Map) = kotlin.run { + val anyMap = AnyMap( + value = model, + ) + createOrGetPref(key) + .setAndCommit(anyMap) + } + + override fun get(key: String): Flow> = createOrGetPref(key) + .map { + it?.value.orEmpty() + } +} + +fun JsonObject.toMap(): Map = this + .mapValues { (_, element) -> + element.extractedContent + } + +fun Any?.toJson(): JsonElement = when (this) { + null -> JsonNull + is String -> JsonPrimitive(this) + is Number -> JsonPrimitive(this) + is Boolean -> JsonPrimitive(this) + is Map<*, *> -> { + val content = map { (k, v) -> k.toString() to v.toJson() } + JsonObject(content.toMap()) + } + + is List<*> -> { + val content = map { it.toJson() } + JsonArray(content) + } + + is JsonElement -> this + else -> throw IllegalArgumentException("Unable to encode $this") +} + +val JsonElement.extractedContent: Any? + get() { + if (this is JsonPrimitive) { + if (this.jsonPrimitive.isString) { + return this.jsonPrimitive.content + } + return this.jsonPrimitive.booleanOrNull + ?: this.jsonPrimitive.longOrNull + ?: this.jsonPrimitive.doubleOrNull + ?: this.jsonPrimitive.contentOrNull + } + if (this is JsonArray) { + return this.jsonArray.map { + it.extractedContent + } + } + if (this is JsonObject) { + return this.jsonObject.entries.associate { + it.key to it.value.extractedContent + } + } + return null + } diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/subscription/SubscriptionService.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/subscription/SubscriptionService.kt new file mode 100644 index 00000000..1ac9ea02 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/subscription/SubscriptionService.kt @@ -0,0 +1,14 @@ +package com.artemchep.keyguard.common.service.subscription + +import com.artemchep.keyguard.common.model.Product +import com.artemchep.keyguard.common.model.RichResult +import com.artemchep.keyguard.common.model.Subscription +import kotlinx.coroutines.flow.Flow + +interface SubscriptionService { + fun purchased(): Flow> + + fun subscriptions(): Flow?> + + fun products(): Flow?> +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/text/Base32Service.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/text/Base32Service.kt new file mode 100644 index 00000000..068d778a --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/text/Base32Service.kt @@ -0,0 +1,43 @@ +package com.artemchep.keyguard.common.service.text + +interface Base32Service { + // + // Encoders + // + + fun encode( + text: String, + ): ByteArray = encode(text.toByteArray()) + + fun encodeToString( + text: String, + ): String = encode(text).let(::String) + + fun encode( + bytes: ByteArray, + ): ByteArray + + fun encodeToString( + bytes: ByteArray, + ): String = encode(bytes).let(::String) + + // + // Decoders + // + + fun decode( + text: String, + ): ByteArray = decode(text.toByteArray()) + + fun decodeToString( + text: String, + ): String = decode(text).let(::String) + + fun decode( + bytes: ByteArray, + ): ByteArray + + fun decodeToString( + bytes: ByteArray, + ): String = decode(bytes).let(::String) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/text/Base64Service.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/text/Base64Service.kt new file mode 100644 index 00000000..6b946688 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/text/Base64Service.kt @@ -0,0 +1,48 @@ +package com.artemchep.keyguard.common.service.text + +interface Base64Service { + // + // Encoders + // + + fun encode( + text: String, + ): ByteArray = encode(text.toByteArray()) + + fun encodeToString( + text: String, + ): String = encode(text).let(::String) + + fun encode( + bytes: ByteArray, + ): ByteArray + + fun encodeToString( + bytes: ByteArray, + ): String = encode(bytes).let(::String) + + // + // Decoders + // + + fun decode( + text: String, + ): ByteArray = decode(text.toByteArray()) + + fun decodeToString( + text: String, + ): String = decode(text).let(::String) + + fun decode( + bytes: ByteArray, + ): ByteArray + + fun decodeToString( + bytes: ByteArray, + ): String = decode(bytes).let(::String) +} + +fun Base64Service.url(base64: String): String = base64 + .replace('+', '-') + .replace('/', '_') + .replace("=", "") diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/text/TextService.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/text/TextService.kt new file mode 100644 index 00000000..3f2ab93e --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/text/TextService.kt @@ -0,0 +1,22 @@ +package com.artemchep.keyguard.common.service.text + +import dev.icerock.moko.resources.FileResource +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext +import java.io.InputStream + +interface TextService { + fun readFromResources( + fileResource: FileResource, + ): InputStream +} + +suspend fun TextService.readFromResourcesAsText( + fileResource: FileResource, +) = withContext(Dispatchers.IO) { + readFromResources(fileResource).use { inputStream -> + inputStream + .bufferedReader() + .readText() + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/tld/TldService.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/tld/TldService.kt new file mode 100644 index 00000000..705d2fda --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/tld/TldService.kt @@ -0,0 +1,7 @@ +package com.artemchep.keyguard.common.service.tld + +import com.artemchep.keyguard.common.io.IO + +interface TldService { + fun getDomainName(host: String): IO +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/tld/impl/TldServiceImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/tld/impl/TldServiceImpl.kt new file mode 100644 index 00000000..9811e764 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/tld/impl/TldServiceImpl.kt @@ -0,0 +1,127 @@ +package com.artemchep.keyguard.common.service.tld.impl + +import arrow.core.partially1 +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.effectMap +import com.artemchep.keyguard.common.io.measure +import com.artemchep.keyguard.common.io.shared +import com.artemchep.keyguard.common.service.logging.LogRepository +import com.artemchep.keyguard.common.service.logging.postDebug +import com.artemchep.keyguard.common.service.text.TextService +import com.artemchep.keyguard.common.service.tld.TldService +import com.artemchep.keyguard.res.Res +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class TldServiceImpl( + private val textService: TextService, + private val logRepository: LogRepository, +) : TldService { + companion object { + private const val TAG = "TldService.android" + } + + private val dataIo = ::loadTld + .partially1(textService) + .measure { duration, node -> + logRepository.postDebug(TAG) { + val totalCount = node.count() + "Loaded TLD tree in $duration, and it has $totalCount leaves." + } + } + .shared() + + constructor( + directDI: DirectDI, + ) : this( + textService = directDI.instance(), + logRepository = directDI.instance(), + ) + + override fun getDomainName( + host: String, + ): IO = dataIo + .effectMap { node -> + val parts = host.trim().split(".").asReversed() + val length = node.match(parts) + parts + // Take N parts of TLD and then one + // custom domain. + .take(length + 1) + .asReversed() + .joinToString(separator = ".") + } + .measure { duration, result -> + logRepository.postDebug(TAG) { + "Found '$result' from the host '$host' in $duration" + } + } + + private fun Node.count(): Int = children.values + .fold(children.values.size) { y, x -> y + x.count() } +} + +private data class Node( + val children: MutableMap = mutableMapOf(), +) + +/** + * Loads a TLD list from a local resource file into a + * hash-tree for more compact footprint & faster search. + */ +private suspend fun loadTld( + textService: TextService, +) = withContext(Dispatchers.IO) { + textService + .readFromResources(Res.files.public_suffix_list).use { + it + .bufferedReader() + .useLines { lines -> + val root = Node() + lines + // Check + // https://publicsuffix.org/list/ + // for formatting rules. + .filter { it.isNotEmpty() && !it.startsWith("//") } + .forEach { line -> + val parts = line.trim().split(".").asReversed() + root.append(parts) + } + root + } + } +} + +private fun Node.match(parts: List): Int = + _match( + parts = parts, + offset = 0, + ) + +private tailrec fun Node._match( + parts: List, + offset: Int, +): Int { + if (offset >= parts.size) { + return offset + } + val key = parts[offset] + val next = children[key] + ?: children["*"] + ?: return offset + return next._match(parts, offset + 1) +} + +private tailrec fun Node.append(parts: List) { + if (parts.isEmpty()) { + return + } + val key = parts.first() + val next = getOrPut(key) + next.append(parts = parts.subList(1, parts.size)) +} + +private fun Node.getOrPut(key: String): Node = children + .getOrPut(key) { Node() } diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/totp/TotpService.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/totp/TotpService.kt new file mode 100644 index 00000000..0bb7768a --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/totp/TotpService.kt @@ -0,0 +1,12 @@ +package com.artemchep.keyguard.common.service.totp + +import com.artemchep.keyguard.common.model.TotpCode +import com.artemchep.keyguard.common.model.TotpToken +import kotlinx.datetime.Instant + +interface TotpService { + fun generate( + token: TotpToken, + timestamp: Instant, + ): TotpCode +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/totp/impl/TotpServiceImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/totp/impl/TotpServiceImpl.kt new file mode 100644 index 00000000..ec027ac0 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/totp/impl/TotpServiceImpl.kt @@ -0,0 +1,264 @@ +package com.artemchep.keyguard.common.service.totp.impl + +import com.artemchep.keyguard.common.model.CryptoHashAlgorithm +import com.artemchep.keyguard.common.model.TotpCode +import com.artemchep.keyguard.common.model.TotpToken +import com.artemchep.keyguard.common.service.crypto.CryptoGenerator +import com.artemchep.keyguard.common.service.text.Base32Service +import com.artemchep.keyguard.common.service.totp.TotpService +import com.artemchep.keyguard.common.util.int +import com.artemchep.keyguard.common.util.millis +import kotlinx.datetime.Instant +import org.kodein.di.DirectDI +import org.kodein.di.instance +import java.util.Locale +import javax.crypto.Mac +import javax.crypto.spec.SecretKeySpec +import kotlin.experimental.and +import kotlin.math.pow +import kotlin.math.roundToLong +import kotlin.time.Duration + + +// Code largely based on the +// https://github.com/marcelkliemannel/kotlin-onetimepassword +class TotpServiceImpl( + private val base32Service: Base32Service, + private val cryptoGenerator: CryptoGenerator, +) : TotpService { + companion object { + private const val STEAM_ALLOWED_CHARS = "23456789BCDFGHJKMNPQRTVWXY" + } + + constructor( + directDI: DirectDI, + ) : this( + base32Service = directDI.instance(), + cryptoGenerator = directDI.instance(), + ) + + override fun generate( + token: TotpToken, + timestamp: Instant, + ): TotpCode = when (token) { + is TotpToken.TotpAuth -> generateTotpAuthCode( + token = token, + timestamp = timestamp, + ) + + is TotpToken.HotpAuth -> generateHotpAuthCode( + token = token, + ) + + is TotpToken.SteamAuth -> generateSteamAuthCode( + token = token, + timestamp = timestamp, + ) + + is TotpToken.MobileAuth -> generateMobileAuthCode( + token = token, + timestamp = timestamp, + ) + } + + private fun roundToPeriodInSeconds( + timestamp: Instant, + period: Long, + ): Long { + // Instead of `epochSeconds` round the current second. This is + // to fix problems that occur if you request an update a few millis + // before the next period. + val seconds = (timestamp.millis.toDouble() / 1000.0).roundToLong() + return seconds / period + } + + /** + * Generator for the RFC 4226 "HOTP: An HMAC-Based One-Time Password Algorithm" + * (https://tools.ietf.org/html/rfc4226). TOTP is an extension on top of the HOTP + * algorithm where the counter is bound to the current time. + */ + private fun generateTotpAuthCode( + token: TotpToken.TotpAuth, + timestamp: Instant, + ): TotpCode { + val key = base32Service.decode(token.keyBase32) + val period = token.period + val time = roundToPeriodInSeconds(timestamp, period) + // The resulting integer value of the code must have at most the required code + // digits. Therefore the binary value is reduced by calculating the modulo + // 10 ^ codeDigits. + val codeInt = genHotpBinaryInt( + key = key, + counter = time, + algorithm = token.algorithm, + ).rem(10.0.pow(token.digits).toInt()) + // The integer code variable may contain a value with fewer digits than the + // required code digits. Therefore the final code value is filled with zeros + // on the left, till the code digits requirement is fulfilled. + val code = codeInt.toString().padStart(token.digits, '0') + return TotpCode( + code = code, + counter = TotpCode.TimeBasedCounter( + timestamp = timestamp, + expiration = kotlin.run { + // Get the beginning of the next period as an + // expiration date. + val exp = (time + 1L) * period + Instant.fromEpochSeconds(exp) + }, + duration = with(Duration) { period.seconds }, + ), + ) + } + + /** + * Generator for the RFC 4226 "HOTP: An HMAC-Based One-Time Password Algorithm" + * (https://tools.ietf.org/html/rfc4226) + */ + private fun generateHotpAuthCode( + token: TotpToken.HotpAuth, + ): TotpCode { + val key = base32Service.decode(token.keyBase32) + val counter = token.counter + // The resulting integer value of the code must have at most the required code + // digits. Therefore the binary value is reduced by calculating the modulo + // 10 ^ codeDigits. + val codeInt = genHotpBinaryInt( + key = key, + counter = counter, + algorithm = token.algorithm, + ).rem(10.0.pow(token.digits).toInt()) + // The integer code variable may contain a value with fewer digits than the + // required code digits. Therefore the final code value is filled with zeros + // on the left, till the code digits requirement is fulfilled. + val code = codeInt.toString().padStart(token.digits, '0') + return TotpCode( + code = code, + counter = TotpCode.IncrementBasedCounter( + counter = counter, + ), + ) + } + + /** + * Generator for the Steam one-time-password schema. Yes, Steam the + * app by Valve. + */ + private fun generateSteamAuthCode( + token: TotpToken.SteamAuth, + timestamp: Instant, + ): TotpCode { + val key = base32Service.decode(token.keyBase32) + val period = token.period + val time = roundToPeriodInSeconds(timestamp, period) + + val binaryInt = genHotpBinaryInt( + key = key, + counter = time, + algorithm = token.algorithm, + ) + val code = buildString { + var tmp = binaryInt + for (i in 0 until token.digits) { + val char = STEAM_ALLOWED_CHARS[tmp % STEAM_ALLOWED_CHARS.length] + append(char) + tmp /= STEAM_ALLOWED_CHARS.length + } + } + return TotpCode( + code = code, + counter = TotpCode.TimeBasedCounter( + timestamp = timestamp, + expiration = kotlin.run { + // Get the beginning of the next period as an + // expiration date. + val exp = (time + 1L) * period + Instant.fromEpochSeconds(exp) + }, + duration = with(Duration) { period.seconds }, + ), + ) + } + + private fun genHotpBinaryInt( + key: ByteArray, + counter: Long, + algorithm: CryptoHashAlgorithm, + ): Int { + // The counter value is the input parameter 'message' to the HMAC algorithm. + // It must be represented by a byte array with the length of a long (8 bytes). + val messageSize = 8 + val message = ByteArray(messageSize) { i -> + val shift = (messageSize - i - 1).times(8) + val byte = counter and (0xFF.toLong() shl shift) shr shift + byte.toByte() + } + val algorithmName = when (algorithm) { + CryptoHashAlgorithm.SHA_1 -> "HmacSHA1" + CryptoHashAlgorithm.SHA_256 -> "HmacSHA256" + CryptoHashAlgorithm.SHA_512 -> "HmacSHA512" + } + val hash = Mac.getInstance(algorithmName).run { + init(SecretKeySpec(key, "RAW")) // The hard-coded value 'RAW' is specified in the RFC + doFinal(message) + } + + // The value of the offset is the lower 4 bits of the last byte of the hash + // (0x0F = 0000 1111). + val offset = hash.last().and(0x0F).toInt() + // The first step for extracting the binary value is to collect the next four + // bytes from the hash, starting at the index of the offset. + val binary = ByteArray(4) { i -> + hash[i + offset] + } + // The second step is to drop the most significant bit (MSB) from the first + // step binary value (0x7F = 0111 1111). + binary[0] = binary[0].and(0x7F) + // The resulting integer value of the code must have at most the required code + // digits. Therefore the binary value is reduced by calculating the modulo + // 10 ^ codeDigits. + return binary.int + } + + @OptIn(ExperimentalStdlibApi::class) + private fun generateMobileAuthCode( + token: TotpToken.MobileAuth, + timestamp: Instant, + ): TotpCode { + val period = token.period + // As per the spec, the mOTP code should be generated each 10 seconds and + // valid for the next 3 minutes. This sucks for the users tho, as he does not know + // the latter. + val actualPeriod = 10L + val multiplier = period / actualPeriod // must be recoverable + val time = roundToPeriodInSeconds(timestamp, period) * multiplier + + // Generate a hash from the data. + val data = buildString { + append(time) + append(token.secret) + if (token.pin != null) { + append(token.pin) + } + } + val hash = cryptoGenerator.hashMd5(data.toByteArray()) + + val code = hash + .toHexString() + .lowercase(Locale.ENGLISH) + .take(token.digits) + return TotpCode( + code = code, + counter = TotpCode.TimeBasedCounter( + timestamp = timestamp, + expiration = kotlin.run { + // Get the beginning of the next period as an + // expiration date. + val exp = (time / multiplier + 1L) * period + Instant.fromEpochSeconds(exp) + }, + duration = with(Duration) { period.seconds }, + ), + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/twofa/TwoFaService.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/twofa/TwoFaService.kt new file mode 100644 index 00000000..620bbc2b --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/twofa/TwoFaService.kt @@ -0,0 +1,7 @@ +package com.artemchep.keyguard.common.service.twofa + +import com.artemchep.keyguard.common.io.IO + +interface TwoFaService { + fun get(): IO> +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/twofa/TwoFaServiceInfo.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/twofa/TwoFaServiceInfo.kt new file mode 100644 index 00000000..97678e88 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/twofa/TwoFaServiceInfo.kt @@ -0,0 +1,11 @@ +package com.artemchep.keyguard.common.service.twofa + +data class TwoFaServiceInfo( + val name: String, + val domain: String, + val domains: Set = emptySet(), + val url: String? = null, + val documentation: String? = null, + val notes: String? = null, + val tfa: Set = emptySet(), +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/twofa/impl/TwoFaServiceImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/twofa/impl/TwoFaServiceImpl.kt new file mode 100644 index 00000000..bde2f308 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/twofa/impl/TwoFaServiceImpl.kt @@ -0,0 +1,66 @@ +package com.artemchep.keyguard.common.service.twofa.impl + +import arrow.core.partially1 +import com.artemchep.keyguard.common.io.effectMap +import com.artemchep.keyguard.common.io.shared +import com.artemchep.keyguard.common.service.text.TextService +import com.artemchep.keyguard.common.service.text.readFromResourcesAsText +import com.artemchep.keyguard.common.service.twofa.TwoFaService +import com.artemchep.keyguard.common.service.twofa.TwoFaServiceInfo +import com.artemchep.keyguard.res.Res +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import kotlinx.serialization.json.Json +import org.kodein.di.DirectDI +import org.kodein.di.instance + +@Serializable +data class TfaEntity( + val name: String, + val domain: String, + @SerialName("additional-domains") + val domains: Set = emptySet(), + val url: String? = null, + val documentation: String? = null, + val notes: String? = null, + val tfa: Set = emptySet(), +) + +fun TfaEntity.toDomain() = kotlin.run { + TwoFaServiceInfo( + name = name, + domain = domain, + domains = domains + domain, + url = url, + documentation = documentation, + notes = notes, + tfa = tfa, + ) +} + +class TwoFaServiceImpl( + private val textService: TextService, + private val json: Json, +) : TwoFaService { + private val listIo = ::loadTfaRawData + .partially1(textService) + .effectMap { jsonString -> + val entities = json.decodeFromString>(jsonString) + val models = entities.map(TfaEntity::toDomain) + models + } + .shared() + + constructor( + directDI: DirectDI, + ) : this( + textService = directDI.instance(), + json = directDI.instance(), + ) + + override fun get() = listIo +} + +private suspend fun loadTfaRawData( + textService: TextService, +) = textService.readFromResourcesAsText(Res.files.tfa) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/vault/FingerprintReadRepository.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/vault/FingerprintReadRepository.kt new file mode 100644 index 00000000..96d26c25 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/vault/FingerprintReadRepository.kt @@ -0,0 +1,15 @@ +package com.artemchep.keyguard.common.service.vault + +import com.artemchep.keyguard.common.model.Fingerprint +import kotlinx.coroutines.flow.Flow + +/** + * @author Artem Chepurnyi + */ +interface FingerprintReadRepository { + /** + * Returns a flow of tokens to help to identify the password and + * generate a master key. + */ + fun get(): Flow +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/vault/FingerprintReadWriteRepository.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/vault/FingerprintReadWriteRepository.kt new file mode 100644 index 00000000..2f6fc4b0 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/vault/FingerprintReadWriteRepository.kt @@ -0,0 +1,11 @@ +package com.artemchep.keyguard.common.service.vault + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.Fingerprint + +/** + * @author Artem Chepurnyi + */ +interface FingerprintReadWriteRepository : FingerprintReadRepository { + fun put(key: Fingerprint?): IO +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/vault/KeyReadRepository.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/vault/KeyReadRepository.kt new file mode 100644 index 00000000..9a454bfb --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/vault/KeyReadRepository.kt @@ -0,0 +1,14 @@ +package com.artemchep.keyguard.common.service.vault + +import com.artemchep.keyguard.common.model.PersistedSession +import kotlinx.coroutines.flow.Flow + +/** + * @author Artem Chepurnyi + */ +interface KeyReadRepository { + /** + * Returns a flow of master key. + */ + fun get(): Flow +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/vault/KeyReadWriteRepository.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/vault/KeyReadWriteRepository.kt new file mode 100644 index 00000000..0a0af714 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/vault/KeyReadWriteRepository.kt @@ -0,0 +1,11 @@ +package com.artemchep.keyguard.common.service.vault + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.PersistedSession + +/** + * @author Artem Chepurnyi + */ +interface KeyReadWriteRepository : KeyReadRepository { + fun put(session: PersistedSession?): IO +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/vault/SessionMetadataReadRepository.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/vault/SessionMetadataReadRepository.kt new file mode 100644 index 00000000..ae2b0d51 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/vault/SessionMetadataReadRepository.kt @@ -0,0 +1,11 @@ +package com.artemchep.keyguard.common.service.vault + +import kotlinx.coroutines.flow.Flow +import kotlinx.datetime.Instant + +/** + * @author Artem Chepurnyi + */ +interface SessionMetadataReadRepository { + fun getLastPasswordUseTimestamp(): Flow +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/vault/SessionMetadataReadWriteRepository.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/vault/SessionMetadataReadWriteRepository.kt new file mode 100644 index 00000000..c253578d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/vault/SessionMetadataReadWriteRepository.kt @@ -0,0 +1,13 @@ +package com.artemchep.keyguard.common.service.vault + +import com.artemchep.keyguard.common.io.IO +import kotlinx.datetime.Instant + +/** + * @author Artem Chepurnyi + */ +interface SessionMetadataReadWriteRepository : SessionMetadataReadRepository { + fun setLastPasswordUseTimestamp( + instant: Instant?, + ): IO +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/vault/SessionReadRepository.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/vault/SessionReadRepository.kt new file mode 100644 index 00000000..74707385 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/vault/SessionReadRepository.kt @@ -0,0 +1,11 @@ +package com.artemchep.keyguard.common.service.vault + +import com.artemchep.keyguard.common.model.MasterSession +import kotlinx.coroutines.flow.Flow + +/** + * @author Artem Chepurnyi + */ +interface SessionReadRepository { + fun get(): Flow +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/vault/SessionReadWriteRepository.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/vault/SessionReadWriteRepository.kt new file mode 100644 index 00000000..4061fcdb --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/vault/SessionReadWriteRepository.kt @@ -0,0 +1,10 @@ +package com.artemchep.keyguard.common.service.vault + +import com.artemchep.keyguard.common.model.MasterSession + +/** + * @author Artem Chepurnyi + */ +interface SessionReadWriteRepository : SessionReadRepository { + fun put(key: MasterSession) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/vault/impl/FingerprintRepositoryImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/vault/impl/FingerprintRepositoryImpl.kt new file mode 100644 index 00000000..760ee256 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/vault/impl/FingerprintRepositoryImpl.kt @@ -0,0 +1,96 @@ +package com.artemchep.keyguard.common.service.vault.impl + +import com.artemchep.keyguard.common.model.Fingerprint +import com.artemchep.keyguard.common.model.FingerprintBiometric +import com.artemchep.keyguard.common.model.FingerprintPassword +import com.artemchep.keyguard.common.model.MasterPasswordHash +import com.artemchep.keyguard.common.model.MasterPasswordSalt +import com.artemchep.keyguard.common.service.Files +import com.artemchep.keyguard.common.service.keyvalue.KeyValueStore +import com.artemchep.keyguard.common.service.keyvalue.SecureKeyValueStore +import com.artemchep.keyguard.common.service.keyvalue.getObject +import com.artemchep.keyguard.common.service.text.Base64Service +import com.artemchep.keyguard.common.service.vault.FingerprintReadWriteRepository +import kotlinx.coroutines.flow.Flow +import org.kodein.di.DirectDI +import org.kodein.di.instance + +/** + * @author Artem Chepurnyi + */ +class FingerprintRepositoryImpl( + private val store: KeyValueStore, + private val base64Service: Base64Service, +) : FingerprintReadWriteRepository { + private val dataPref = store.getObject( + key = "data", + defaultValue = null, + serialize = { tokens -> + if (tokens == null) { + return@getObject "" + } + + listOfNotNull( + tokens.master.hash.byteArray, + tokens.master.salt.byteArray, + // The biometric token might be null, if the + // user did not enable biometric login. + tokens.biometric?.encryptedMasterKey, + tokens.biometric?.iv, + ) + .map(base64Service::encode) + .joinToString(separator = "|") { String(it) } + }, + deserialize = { data -> + // If any exception happens, we just assume that the data + // is not present at all. Note: this implicitly clears all of + // the local data of the user. + kotlin.runCatching { + val list = data + .split("|") + .map(base64Service::decode) + if (list.size != 2 && list.size != 4) { + return@runCatching null + } + + val masterHash = list[0] + val masterSalt = list[1] + val biometric = if (list.size == 4) { + val biometricEncryptedMasterKey = list[2] + val biometricIv = list[3] + FingerprintBiometric( + iv = biometricIv, + encryptedMasterKey = biometricEncryptedMasterKey, + ) + } else { + null + } + Fingerprint( + master = FingerprintPassword( + hash = MasterPasswordHash(masterHash), + salt = MasterPasswordSalt(masterSalt), + ), + biometric = biometric, + ) + }.getOrNull() + }, + ) + + init { + // Double check that we store the + // fingerprint in the secure store. + require(store is SecureKeyValueStore) { + "Fingerprint repository should be using a secure store. " + + "Current use of ${store::class.simpleName} is probably a mistake." + } + } + + constructor(directDI: DirectDI) : this( + store = directDI.instance(arg = Files.FINGERPRINT), + base64Service = directDI.instance(), + ) + + override fun put(key: Fingerprint?) = dataPref.setAndCommit(key) + + override fun get(): Flow = dataPref +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl.kt new file mode 100644 index 00000000..5b5c0e1e --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/vault/impl/KeyRepositoryImpl.kt @@ -0,0 +1,102 @@ +package com.artemchep.keyguard.common.service.vault.impl + +import com.artemchep.keyguard.common.io.flatten +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.model.MasterKey +import com.artemchep.keyguard.common.model.PersistedSession +import com.artemchep.keyguard.common.service.Files +import com.artemchep.keyguard.common.service.keyvalue.KeyValueStore +import com.artemchep.keyguard.common.service.keyvalue.SecureKeyValueStore +import com.artemchep.keyguard.common.service.keyvalue.getObject +import com.artemchep.keyguard.common.service.text.Base64Service +import com.artemchep.keyguard.common.service.vault.KeyReadWriteRepository +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.map +import kotlinx.datetime.Instant +import kotlinx.serialization.Serializable +import kotlinx.serialization.encodeToString +import kotlinx.serialization.json.Json +import org.kodein.di.DirectDI +import org.kodein.di.instance + +/** + * @author Artem Chepurnyi + */ +class KeyRepositoryImpl( + private val store: KeyValueStore, + private val json: Json, + private val base64Service: Base64Service, +) : KeyReadWriteRepository { + private val dataPref = store.getObject( + key = "data2", + defaultValue = null, + serialize = { key -> + if (key == null) { + return@getObject "" + } + + json.encodeToString(key) + }, + deserialize = { data -> + if (data.isBlank()) { + return@getObject null + } + // If any exception happens, we just assume that the data + // is not present at all. Note: this implicitly clears + // the local data of the user. + kotlin.runCatching { + json.decodeFromString(data) + }.getOrNull() + }, + ) + + init { + // Double check that we store the + // fingerprint in the secure store. + require(store is SecureKeyValueStore) { + "Master key repository should be using a secure store. " + + "Current use of ${store::class.simpleName} is probably a mistake." + } + } + + constructor(directDI: DirectDI) : this( + store = directDI.instance(arg = Files.KEY), + json = directDI.instance(), + base64Service = directDI.instance(), + ) + + override fun put(session: PersistedSession?) = ioEffect { + val entity = if (session != null) { + val masterKeyBase64 = base64Service.encodeToString(session.masterKey.byteArray) + PersistedSessionEntity( + masterKeyBase64 = masterKeyBase64, + createdAt = session.createdAt, + persistedAt = session.persistedAt, + ) + } else { + null + } + dataPref.setAndCommit(entity) + }.flatten() + + override fun get(): Flow = dataPref + .map { entity -> + if (entity != null) { + val masterKey = base64Service.decode(entity.masterKeyBase64) + PersistedSession( + masterKey = MasterKey(masterKey), + createdAt = entity.createdAt, + persistedAt = entity.persistedAt, + ) + } else { + null + } + } +} + +@Serializable +data class PersistedSessionEntity( + val masterKeyBase64: String, + val createdAt: Instant, + val persistedAt: Instant, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/vault/impl/SessionMetadataRepositoryImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/vault/impl/SessionMetadataRepositoryImpl.kt new file mode 100644 index 00000000..8ef6fe78 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/vault/impl/SessionMetadataRepositoryImpl.kt @@ -0,0 +1,52 @@ +package com.artemchep.keyguard.common.service.vault.impl + +import com.artemchep.keyguard.common.io.flatMap +import com.artemchep.keyguard.common.io.io +import com.artemchep.keyguard.common.io.map +import com.artemchep.keyguard.common.service.Files +import com.artemchep.keyguard.common.service.keyvalue.KeyValuePreference +import com.artemchep.keyguard.common.service.keyvalue.KeyValueStore +import com.artemchep.keyguard.common.service.vault.SessionMetadataReadWriteRepository +import kotlinx.coroutines.flow.map +import kotlinx.datetime.Instant +import org.kodein.di.DirectDI +import org.kodein.di.instance + +/** + * @author Artem Chepurnyi + */ +class SessionMetadataRepositoryImpl( + private val store: KeyValueStore, +) : SessionMetadataReadWriteRepository { + companion object { + private const val KEY_LAST_PASSWORD_USE_TIMESTAMP = "last_password_use_timestamp" + + private const val NONE_INSTANT = -1L + } + + private val lastPasswordUseTimestamp = + store.getLong(KEY_LAST_PASSWORD_USE_TIMESTAMP, NONE_INSTANT) + + constructor(directDI: DirectDI) : this( + store = directDI.instance(arg = Files.SESSION_METADATA), + ) + + override fun setLastPasswordUseTimestamp(instant: Instant?) = lastPasswordUseTimestamp + .setAndCommit(instant) + + override fun getLastPasswordUseTimestamp() = lastPasswordUseTimestamp + .asInstant() + + private fun KeyValuePreference.setAndCommit(instant: Instant?) = io(instant) + .map { instant -> + instant?.toEpochMilliseconds() + ?: NONE_INSTANT + } + .flatMap(this::setAndCommit) + + private fun KeyValuePreference.asInstant() = this + .map { millis -> + millis.takeUnless { it == NONE_INSTANT } + ?.let(Instant::fromEpochMilliseconds) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/vault/impl/SessionRepositoryImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/vault/impl/SessionRepositoryImpl.kt new file mode 100644 index 00000000..74da54d4 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/vault/impl/SessionRepositoryImpl.kt @@ -0,0 +1,20 @@ +package com.artemchep.keyguard.common.service.vault.impl + +import com.artemchep.keyguard.common.model.MasterSession +import com.artemchep.keyguard.common.service.vault.SessionReadWriteRepository +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.MutableStateFlow + +/** + * @author Artem Chepurnyi + */ +class SessionRepositoryImpl( +) : SessionReadWriteRepository { + private val inMemoryStore = MutableStateFlow(null) + + override fun put(key: MasterSession) { + inMemoryStore.value = key + } + + override fun get(): Flow = inMemoryStore +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/wordlist/WordlistService.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/wordlist/WordlistService.kt new file mode 100644 index 00000000..6bc9da44 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/wordlist/WordlistService.kt @@ -0,0 +1,7 @@ +package com.artemchep.keyguard.common.service.wordlist + +import com.artemchep.keyguard.common.io.IO + +interface WordlistService { + fun get(): IO> +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/wordlist/impl/WordlistServiceImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/wordlist/impl/WordlistServiceImpl.kt new file mode 100644 index 00000000..1fa92864 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/service/wordlist/impl/WordlistServiceImpl.kt @@ -0,0 +1,44 @@ +package com.artemchep.keyguard.common.service.wordlist.impl + +import arrow.core.partially1 +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.handleErrorTap +import com.artemchep.keyguard.common.io.shared +import com.artemchep.keyguard.common.service.text.TextService +import com.artemchep.keyguard.common.service.wordlist.WordlistService +import com.artemchep.keyguard.res.Res +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class WordlistServiceImpl( + private val textService: TextService, +) : WordlistService { + private val wordListIo = ::loadWordlist + .partially1(textService) + .handleErrorTap { + it.printStackTrace() + } + .shared() + + constructor( + directDI: DirectDI, + ) : this( + textService = directDI.instance(), + ) + + override fun get(): IO> = wordListIo +} + +private suspend fun loadWordlist( + textService: TextService, +) = withContext(Dispatchers.IO) { + textService.readFromResources(Res.files.wordlist_en_eff).use { + it + .bufferedReader() + .lineSequence() + .filter { line -> line.isNotEmpty() } + .toList() + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/AddCipher.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/AddCipher.kt new file mode 100644 index 00000000..30a2d8b1 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/AddCipher.kt @@ -0,0 +1,8 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.create.CreateRequest + +interface AddCipher : ( + Map, +) -> IO> diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/AddCipherOpenedHistory.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/AddCipherOpenedHistory.kt new file mode 100644 index 00000000..9366f863 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/AddCipherOpenedHistory.kt @@ -0,0 +1,8 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.AddCipherOpenedHistoryRequest + +interface AddCipherOpenedHistory : ( + AddCipherOpenedHistoryRequest, +) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/AddCipherUsedAutofillHistory.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/AddCipherUsedAutofillHistory.kt new file mode 100644 index 00000000..ee232bbd --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/AddCipherUsedAutofillHistory.kt @@ -0,0 +1,8 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.AddCipherOpenedHistoryRequest + +interface AddCipherUsedAutofillHistory : ( + AddCipherOpenedHistoryRequest, +) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/AddCipherUsedPasskeyHistory.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/AddCipherUsedPasskeyHistory.kt new file mode 100644 index 00000000..6f83c361 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/AddCipherUsedPasskeyHistory.kt @@ -0,0 +1,8 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.AddCipherUsedPasskeyHistoryRequest + +interface AddCipherUsedPasskeyHistory : ( + AddCipherUsedPasskeyHistoryRequest, +) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/AddEmailRelay.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/AddEmailRelay.kt new file mode 100644 index 00000000..105639d7 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/AddEmailRelay.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.DGeneratorEmailRelay + +interface AddEmailRelay : (DGeneratorEmailRelay) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/AddFolder.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/AddFolder.kt new file mode 100644 index 00000000..639f137f --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/AddFolder.kt @@ -0,0 +1,8 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.AccountId + +interface AddFolder : ( + Map, +) -> IO> diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/AddGeneratorHistory.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/AddGeneratorHistory.kt new file mode 100644 index 00000000..27298e19 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/AddGeneratorHistory.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.DGeneratorHistory + +interface AddGeneratorHistory : (DGeneratorHistory) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/AddPasskeyCipher.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/AddPasskeyCipher.kt new file mode 100644 index 00000000..a15629f2 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/AddPasskeyCipher.kt @@ -0,0 +1,8 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.AddPasskeyCipherRequest + +interface AddPasskeyCipher : ( + AddPasskeyCipherRequest, +) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/AddUriCipher.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/AddUriCipher.kt new file mode 100644 index 00000000..61994fc0 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/AddUriCipher.kt @@ -0,0 +1,13 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.AddUriCipherRequest + +fun AddUriCipherRequest.isEmpty() = + applicationId == null && + webDomain == null && + webScheme == null + +interface AddUriCipher : ( + AddUriCipherRequest, +) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/AuthConfirmMasterKeyUseCase.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/AuthConfirmMasterKeyUseCase.kt new file mode 100644 index 00000000..a2f8c30e --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/AuthConfirmMasterKeyUseCase.kt @@ -0,0 +1,11 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.model.MasterPasswordHash +import com.artemchep.keyguard.common.model.MasterPasswordSalt +import com.artemchep.keyguard.core.session.usecase.AuthMasterKeyUseCase + +interface AuthConfirmMasterKeyUseCase : ( + MasterPasswordSalt, + MasterPasswordHash, +) -> AuthMasterKeyUseCase + diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/AuthGenerateMasterKeyUseCase.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/AuthGenerateMasterKeyUseCase.kt new file mode 100644 index 00000000..285dd43f --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/AuthGenerateMasterKeyUseCase.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.core.session.usecase.AuthMasterKeyUseCase + +interface AuthGenerateMasterKeyUseCase : () -> AuthMasterKeyUseCase + diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/BiometricKeyDecryptUseCase.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/BiometricKeyDecryptUseCase.kt new file mode 100644 index 00000000..0ea5bb0d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/BiometricKeyDecryptUseCase.kt @@ -0,0 +1,10 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.MasterKey +import com.artemchep.keyguard.platform.LeCipher + +interface BiometricKeyDecryptUseCase : ( + IO, + ByteArray, +) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/BiometricKeyEncryptUseCase.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/BiometricKeyEncryptUseCase.kt new file mode 100644 index 00000000..8973ff8d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/BiometricKeyEncryptUseCase.kt @@ -0,0 +1,10 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.MasterKey +import com.artemchep.keyguard.platform.LeCipher + +interface BiometricKeyEncryptUseCase : ( + IO, + MasterKey, +) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/BiometricStatusUseCase.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/BiometricStatusUseCase.kt new file mode 100644 index 00000000..494ef0cd --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/BiometricStatusUseCase.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.model.BiometricStatus +import kotlinx.coroutines.flow.Flow + +interface BiometricStatusUseCase : () -> Flow diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/ChangeCipherNameById.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/ChangeCipherNameById.kt new file mode 100644 index 00000000..0e283443 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/ChangeCipherNameById.kt @@ -0,0 +1,7 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO + +interface ChangeCipherNameById : ( + Map, +) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/ChangeCipherPasswordById.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/ChangeCipherPasswordById.kt new file mode 100644 index 00000000..d3caa1e2 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/ChangeCipherPasswordById.kt @@ -0,0 +1,7 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO + +interface ChangeCipherPasswordById : ( + Map, +) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/CheckPasswordLeak.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/CheckPasswordLeak.kt new file mode 100644 index 00000000..3b151241 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/CheckPasswordLeak.kt @@ -0,0 +1,8 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.CheckPasswordLeakRequest + +interface CheckPasswordLeak : ( + CheckPasswordLeakRequest, +) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/CheckPasswordSetLeak.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/CheckPasswordSetLeak.kt new file mode 100644 index 00000000..141094ae --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/CheckPasswordSetLeak.kt @@ -0,0 +1,9 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.CheckPasswordSetLeakRequest +import com.artemchep.keyguard.common.model.PasswordPwnage + +interface CheckPasswordSetLeak : ( + CheckPasswordSetLeakRequest, +) -> IO> diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/CheckUsernameLeak.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/CheckUsernameLeak.kt new file mode 100644 index 00000000..5063c6fe --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/CheckUsernameLeak.kt @@ -0,0 +1,9 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.CheckUsernameLeakRequest +import com.artemchep.keyguard.common.model.DHibpC + +interface CheckUsernameLeak : ( + CheckUsernameLeakRequest, +) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/CipherBreachCheck.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/CipherBreachCheck.kt new file mode 100644 index 00000000..36373fd6 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/CipherBreachCheck.kt @@ -0,0 +1,7 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.DSecret +import com.artemchep.keyguard.provider.bitwarden.entity.HibpBreachGroup + +interface CipherBreachCheck : (DSecret, HibpBreachGroup) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/CipherDuplicatesCheck.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/CipherDuplicatesCheck.kt new file mode 100644 index 00000000..a03aecee --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/CipherDuplicatesCheck.kt @@ -0,0 +1,19 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.model.DSecret +import com.artemchep.keyguard.common.model.DSecretDuplicateGroup +import kotlinx.serialization.Serializable + +interface CipherDuplicatesCheck : + (List, CipherDuplicatesCheck.Sensitivity) -> List { + @Serializable + enum class Sensitivity( + val threshold: Float, + ) { + MAX(0.3f), + HIGH(0.15f), + NORMAL(0f), + LOW(-0.1f), + MIN(-0.15f), + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/CipherExpiringCheck.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/CipherExpiringCheck.kt new file mode 100644 index 00000000..482c7b78 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/CipherExpiringCheck.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.model.DSecret +import kotlinx.datetime.Instant + +interface CipherExpiringCheck : (DSecret, Instant) -> Instant? diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/CipherFieldSwitchToggle.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/CipherFieldSwitchToggle.kt new file mode 100644 index 00000000..827eecb2 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/CipherFieldSwitchToggle.kt @@ -0,0 +1,8 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.CipherFieldSwitchToggleRequest + +interface CipherFieldSwitchToggle : ( + Map>, +) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/CipherIncompleteCheck.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/CipherIncompleteCheck.kt new file mode 100644 index 00000000..c36edf63 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/CipherIncompleteCheck.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.model.DSecret + +interface CipherIncompleteCheck : (DSecret) -> Boolean diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/CipherMerge.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/CipherMerge.kt new file mode 100644 index 00000000..2147fbc5 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/CipherMerge.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.model.DSecret + +interface CipherMerge : (List) -> DSecret diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/CipherRemovePasswordHistory.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/CipherRemovePasswordHistory.kt new file mode 100644 index 00000000..5363f6f8 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/CipherRemovePasswordHistory.kt @@ -0,0 +1,7 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO + +interface CipherRemovePasswordHistory : ( + String, +) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/CipherRemovePasswordHistoryById.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/CipherRemovePasswordHistoryById.kt new file mode 100644 index 00000000..107ee742 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/CipherRemovePasswordHistoryById.kt @@ -0,0 +1,8 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO + +interface CipherRemovePasswordHistoryById : ( + String, + List, +) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/CipherToolbox.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/CipherToolbox.kt new file mode 100644 index 00000000..ef7eb92a --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/CipherToolbox.kt @@ -0,0 +1,43 @@ +package com.artemchep.keyguard.common.usecase + +import org.kodein.di.DirectDI +import org.kodein.di.instance + +interface CipherToolbox { + val favouriteCipherById: FavouriteCipherById + val rePromptCipherById: RePromptCipherById + val changeCipherNameById: ChangeCipherNameById + val changeCipherPasswordById: ChangeCipherPasswordById + val copyCipherById: CopyCipherById + val moveCipherToFolderById: MoveCipherToFolderById + val restoreCipherById: RestoreCipherById + val trashCipherById: TrashCipherById + val removeCipherById: RemoveCipherById + val cipherMerge: CipherMerge +} + +class CipherToolboxImpl( + override val favouriteCipherById: FavouriteCipherById, + override val rePromptCipherById: RePromptCipherById, + override val changeCipherNameById: ChangeCipherNameById, + override val changeCipherPasswordById: ChangeCipherPasswordById, + override val copyCipherById: CopyCipherById, + override val moveCipherToFolderById: MoveCipherToFolderById, + override val restoreCipherById: RestoreCipherById, + override val trashCipherById: TrashCipherById, + override val removeCipherById: RemoveCipherById, + override val cipherMerge: CipherMerge, +) : CipherToolbox { + constructor(directDI: DirectDI) : this( + favouriteCipherById = directDI.instance(), + rePromptCipherById = directDI.instance(), + changeCipherNameById = directDI.instance(), + changeCipherPasswordById = directDI.instance(), + copyCipherById = directDI.instance(), + moveCipherToFolderById = directDI.instance(), + restoreCipherById = directDI.instance(), + trashCipherById = directDI.instance(), + removeCipherById = directDI.instance(), + cipherMerge = directDI.instance(), + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/CipherUnsecureUrlAutoFix.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/CipherUnsecureUrlAutoFix.kt new file mode 100644 index 00000000..78a2257d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/CipherUnsecureUrlAutoFix.kt @@ -0,0 +1,7 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO + +interface CipherUnsecureUrlAutoFix : ( + Map>, +) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/CipherUnsecureUrlCheck.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/CipherUnsecureUrlCheck.kt new file mode 100644 index 00000000..57f643ee --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/CipherUnsecureUrlCheck.kt @@ -0,0 +1,3 @@ +package com.artemchep.keyguard.common.usecase + +interface CipherUnsecureUrlCheck : (String) -> Boolean diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/CipherUrlCheck.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/CipherUrlCheck.kt new file mode 100644 index 00000000..b49c2ad2 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/CipherUrlCheck.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.DSecret + +interface CipherUrlCheck : (DSecret.Uri, String) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/CipherUrlDuplicateCheck.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/CipherUrlDuplicateCheck.kt new file mode 100644 index 00000000..ef418bfd --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/CipherUrlDuplicateCheck.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.DSecret + +interface CipherUrlDuplicateCheck : (DSecret.Uri, DSecret.Uri) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/CleanUpAttachment.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/CleanUpAttachment.kt new file mode 100644 index 00000000..ef794f7f --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/CleanUpAttachment.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO + +interface CleanUpAttachment : () -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/ClearData.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/ClearData.kt new file mode 100644 index 00000000..03386cf0 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/ClearData.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO + +interface ClearData : () -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/ClearVaultSession.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/ClearVaultSession.kt new file mode 100644 index 00000000..ca46b3c8 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/ClearVaultSession.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO + +interface ClearVaultSession : () -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/ConfirmAccessByPasswordUseCase.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/ConfirmAccessByPasswordUseCase.kt new file mode 100644 index 00000000..b2fd72e1 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/ConfirmAccessByPasswordUseCase.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO + +interface ConfirmAccessByPasswordUseCase : (String) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/CopyCipherById.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/CopyCipherById.kt new file mode 100644 index 00000000..5577fa5d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/CopyCipherById.kt @@ -0,0 +1,8 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.create.CreateRequest + +interface CopyCipherById : ( + Map, +) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/CopyText.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/CopyText.kt new file mode 100644 index 00000000..81ff1460 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/CopyText.kt @@ -0,0 +1,26 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.model.ToastMessage +import com.artemchep.keyguard.common.service.clipboard.ClipboardService + +/** + * @author Artem Chepurnyi + */ +class CopyText( + private val clipboardService: ClipboardService, + private val onMessage: (ToastMessage) -> Unit, +) { + fun copy( + text: String, + hidden: Boolean, + ) { + clipboardService.setPrimaryClip(text, concealed = hidden) + if (!clipboardService.hasCopyNotification()) { + val message = ToastMessage( + title = "Copied a value", + text = text.takeUnless { hidden }, + ) + onMessage(message) + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/DateFormatter.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/DateFormatter.kt new file mode 100644 index 00000000..4950593b --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/DateFormatter.kt @@ -0,0 +1,17 @@ +package com.artemchep.keyguard.common.usecase + +import kotlinx.datetime.Instant + +interface DateFormatter { + fun formatDateTime( + instant: Instant, + ): String + + fun formatDate( + instant: Instant, + ): String + + fun formatDateShort( + instant: Instant, + ): String +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/DeviceEncryptionKeyUseCase.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/DeviceEncryptionKeyUseCase.kt new file mode 100644 index 00000000..88edb1e4 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/DeviceEncryptionKeyUseCase.kt @@ -0,0 +1,24 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.effectMap +import com.artemchep.keyguard.common.service.crypto.CryptoGenerator +import kotlinx.coroutines.Dispatchers +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class DeviceEncryptionKeyUseCase( + private val cryptoGenerator: CryptoGenerator, + private val deviceIdUseCase: DeviceIdUseCase, +) : () -> IO { + constructor(directDI: DirectDI) : this( + cryptoGenerator = directDI.instance(), + deviceIdUseCase = directDI.instance(), + ) + + override fun invoke() = deviceIdUseCase() + .effectMap(Dispatchers.Default) { deviceId -> + val seed = deviceId.toByteArray() + cryptoGenerator.hkdf(seed = seed) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/DeviceIdUseCase.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/DeviceIdUseCase.kt new file mode 100644 index 00000000..ec56eb9b --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/DeviceIdUseCase.kt @@ -0,0 +1,48 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.flatMap +import com.artemchep.keyguard.common.io.flatTap +import com.artemchep.keyguard.common.io.io +import com.artemchep.keyguard.common.service.id.IdRepository +import org.kodein.di.DirectDI +import org.kodein.di.instance +import java.util.UUID + +class DeviceIdUseCase( + private val deviceIdRepository: IdRepository, +) : () -> IO { + @Volatile + private var deviceId: String? = null + + constructor(directDI: DirectDI) : this( + deviceIdRepository = directDI.instance(), + ) + + // Return a device ID from the memory, or try to load it from the + // file system. + override fun invoke(): IO = deviceId?.let(::io) ?: getOrSet() + + private fun getOrSet() = deviceIdRepository + .get() + .flatMap { storedDeviceId -> + val inMemoryId = synchronized(this@DeviceIdUseCase) { + deviceId + ?: storedDeviceId + .takeUnless { it.isBlank() } + ?: getDeviceId() + .also(::deviceId::set) + } + + io(inMemoryId) + .run { + if (inMemoryId != storedDeviceId) { + flatTap(deviceIdRepository::put) + } else { + this + } + } + } +} + +private fun getDeviceId() = UUID.randomUUID().toString() diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/DisableBiometric.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/DisableBiometric.kt new file mode 100644 index 00000000..3b29bfd3 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/DisableBiometric.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO + +interface DisableBiometric : () -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/DownloadAttachment.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/DownloadAttachment.kt new file mode 100644 index 00000000..79617895 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/DownloadAttachment.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.DownloadAttachmentRequest + +interface DownloadAttachment : (List) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/EnableBiometric.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/EnableBiometric.kt new file mode 100644 index 00000000..4e457cce --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/EnableBiometric.kt @@ -0,0 +1,9 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.MasterSession +import com.artemchep.keyguard.common.model.WithBiometric + +interface EnableBiometric : ( + MasterSession.Key?, +) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/FavouriteCipherById.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/FavouriteCipherById.kt new file mode 100644 index 00000000..872facf4 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/FavouriteCipherById.kt @@ -0,0 +1,8 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO + +interface FavouriteCipherById : ( + Set, + Boolean, +) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GenerateMasterHashUseCase.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GenerateMasterHashUseCase.kt new file mode 100644 index 00000000..05171b04 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GenerateMasterHashUseCase.kt @@ -0,0 +1,11 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.MasterPassword +import com.artemchep.keyguard.common.model.MasterPasswordHash +import com.artemchep.keyguard.common.model.MasterPasswordSalt + +interface GenerateMasterHashUseCase : ( + MasterPassword, + MasterPasswordSalt, +) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GenerateMasterKeyUseCase.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GenerateMasterKeyUseCase.kt new file mode 100644 index 00000000..55c991dd --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GenerateMasterKeyUseCase.kt @@ -0,0 +1,11 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.MasterKey +import com.artemchep.keyguard.common.model.MasterPassword +import com.artemchep.keyguard.common.model.MasterPasswordHash + +interface GenerateMasterKeyUseCase : ( + MasterPassword, + MasterPasswordHash, +) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GenerateMasterSaltUseCase.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GenerateMasterSaltUseCase.kt new file mode 100644 index 00000000..2b692071 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GenerateMasterSaltUseCase.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.MasterPasswordSalt + +interface GenerateMasterSaltUseCase : () -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetAccountHasError.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetAccountHasError.kt new file mode 100644 index 00000000..7ef7b007 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetAccountHasError.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.model.AccountId +import kotlinx.coroutines.flow.Flow + +interface GetAccountHasError : (AccountId) -> Flow diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetAccountStatus.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetAccountStatus.kt new file mode 100644 index 00000000..55106903 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetAccountStatus.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.model.DAccountStatus +import kotlinx.coroutines.flow.Flow + +interface GetAccountStatus : () -> Flow diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetAccounts.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetAccounts.kt new file mode 100644 index 00000000..90d06ab5 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetAccounts.kt @@ -0,0 +1,10 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.model.DAccount +import kotlinx.coroutines.flow.Flow + +/** + * Provides a list of all available on the + * device accounts. + */ +interface GetAccounts : () -> Flow> diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetAccountsHasError.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetAccountsHasError.kt new file mode 100644 index 00000000..4b28a64c --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetAccountsHasError.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import kotlinx.coroutines.flow.Flow + +interface GetAccountsHasError : () -> Flow diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetAllowScreenshots.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetAllowScreenshots.kt new file mode 100644 index 00000000..cd77fc1b --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetAllowScreenshots.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import kotlinx.coroutines.flow.Flow + +interface GetAllowScreenshots : () -> Flow diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetAllowTwoPanelLayoutInLandscape.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetAllowTwoPanelLayoutInLandscape.kt new file mode 100644 index 00000000..2bb07504 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetAllowTwoPanelLayoutInLandscape.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import kotlinx.coroutines.flow.StateFlow + +interface GetAllowTwoPanelLayoutInLandscape : () -> StateFlow diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetAllowTwoPanelLayoutInPortrait.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetAllowTwoPanelLayoutInPortrait.kt new file mode 100644 index 00000000..e86a293f --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetAllowTwoPanelLayoutInPortrait.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import kotlinx.coroutines.flow.StateFlow + +interface GetAllowTwoPanelLayoutInPortrait : () -> StateFlow diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetAppBuildDate.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetAppBuildDate.kt new file mode 100644 index 00000000..7066742d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetAppBuildDate.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import kotlinx.coroutines.flow.Flow + +interface GetAppBuildDate : () -> Flow diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetAppBuildType.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetAppBuildType.kt new file mode 100644 index 00000000..9067dc17 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetAppBuildType.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import kotlinx.coroutines.flow.Flow + +interface GetAppBuildType : () -> Flow diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetAppIcons.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetAppIcons.kt new file mode 100644 index 00000000..2a15b230 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetAppIcons.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import kotlinx.coroutines.flow.Flow + +interface GetAppIcons : () -> Flow diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetAppVersion.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetAppVersion.kt new file mode 100644 index 00000000..36c5aca9 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetAppVersion.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import kotlinx.coroutines.flow.Flow + +interface GetAppVersion : () -> Flow diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetAppVersionCode.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetAppVersionCode.kt new file mode 100644 index 00000000..2294aaa2 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetAppVersionCode.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import kotlinx.coroutines.flow.Flow + +interface GetAppVersionCode : () -> Flow diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetAppVersionName.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetAppVersionName.kt new file mode 100644 index 00000000..1500fc34 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetAppVersionName.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import kotlinx.coroutines.flow.Flow + +interface GetAppVersionName : () -> Flow diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetAutofillCopyTotp.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetAutofillCopyTotp.kt new file mode 100644 index 00000000..afb002cd --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetAutofillCopyTotp.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import kotlinx.coroutines.flow.Flow + +interface GetAutofillCopyTotp : () -> Flow diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetAutofillInlineSuggestions.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetAutofillInlineSuggestions.kt new file mode 100644 index 00000000..00222688 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetAutofillInlineSuggestions.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import kotlinx.coroutines.flow.Flow + +interface GetAutofillInlineSuggestions : () -> Flow diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetAutofillManualSelection.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetAutofillManualSelection.kt new file mode 100644 index 00000000..5b0a8b91 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetAutofillManualSelection.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import kotlinx.coroutines.flow.Flow + +interface GetAutofillManualSelection : () -> Flow diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetAutofillRespectAutofillOff.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetAutofillRespectAutofillOff.kt new file mode 100644 index 00000000..102d452c --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetAutofillRespectAutofillOff.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import kotlinx.coroutines.flow.Flow + +interface GetAutofillRespectAutofillOff : () -> Flow diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetAutofillSaveRequest.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetAutofillSaveRequest.kt new file mode 100644 index 00000000..6d1652e4 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetAutofillSaveRequest.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import kotlinx.coroutines.flow.Flow + +interface GetAutofillSaveRequest : () -> Flow diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetAutofillSaveUri.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetAutofillSaveUri.kt new file mode 100644 index 00000000..2976b98c --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetAutofillSaveUri.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import kotlinx.coroutines.flow.Flow + +interface GetAutofillSaveUri : () -> Flow diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetBarcodeImage.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetBarcodeImage.kt new file mode 100644 index 00000000..14c0fa3d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetBarcodeImage.kt @@ -0,0 +1,7 @@ +package com.artemchep.keyguard.common.usecase + +import androidx.compose.ui.graphics.ImageBitmap +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.BarcodeImageRequest + +interface GetBarcodeImage : (BarcodeImageRequest) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetBiometricRemainingDuration.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetBiometricRemainingDuration.kt new file mode 100644 index 00000000..ba8eb43b --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetBiometricRemainingDuration.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.usecase + +import kotlinx.coroutines.flow.Flow +import kotlin.time.Duration + +interface GetBiometricRemainingDuration : () -> Flow diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetBiometricTimeout.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetBiometricTimeout.kt new file mode 100644 index 00000000..0b0ffa68 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetBiometricTimeout.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.usecase + +import kotlinx.coroutines.flow.Flow +import kotlin.time.Duration + +interface GetBiometricTimeout : () -> Flow diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetBiometricTimeoutVariants.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetBiometricTimeoutVariants.kt new file mode 100644 index 00000000..78c99c0b --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetBiometricTimeoutVariants.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.usecase + +import kotlinx.coroutines.flow.Flow +import kotlin.time.Duration + +interface GetBiometricTimeoutVariants : () -> Flow> diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetCachePremium.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetCachePremium.kt new file mode 100644 index 00000000..e7a87c8c --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetCachePremium.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import kotlinx.coroutines.flow.Flow + +interface GetCachePremium : () -> Flow diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetCanAddAccount.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetCanAddAccount.kt new file mode 100644 index 00000000..fc2bb2d1 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetCanAddAccount.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import kotlinx.coroutines.flow.Flow + +interface GetCanAddAccount : () -> Flow diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetCanAddSecret.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetCanAddSecret.kt new file mode 100644 index 00000000..e5904f3c --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetCanAddSecret.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import kotlinx.coroutines.flow.Flow + +interface GetCanAddSecret : () -> Flow diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetCanWrite.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetCanWrite.kt new file mode 100644 index 00000000..14745aab --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetCanWrite.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import kotlinx.coroutines.flow.Flow + +interface GetCanWrite : () -> Flow diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetCheckPwnedPasswords.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetCheckPwnedPasswords.kt new file mode 100644 index 00000000..d9e13f92 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetCheckPwnedPasswords.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import kotlinx.coroutines.flow.Flow + +interface GetCheckPwnedPasswords : () -> Flow diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetCheckPwnedServices.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetCheckPwnedServices.kt new file mode 100644 index 00000000..825cbf4b --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetCheckPwnedServices.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import kotlinx.coroutines.flow.Flow + +interface GetCheckPwnedServices : () -> Flow diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetCheckTwoFA.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetCheckTwoFA.kt new file mode 100644 index 00000000..449ae80a --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetCheckTwoFA.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import kotlinx.coroutines.flow.Flow + +interface GetCheckTwoFA : () -> Flow diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetCipherOpenedCount.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetCipherOpenedCount.kt new file mode 100644 index 00000000..017bace7 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetCipherOpenedCount.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import kotlinx.coroutines.flow.Flow + +interface GetCipherOpenedCount : () -> Flow diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetCipherOpenedHistory.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetCipherOpenedHistory.kt new file mode 100644 index 00000000..8a8f8faa --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetCipherOpenedHistory.kt @@ -0,0 +1,7 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.model.CipherOpenedHistoryMode +import com.artemchep.keyguard.common.model.DCipherOpenedHistory +import kotlinx.coroutines.flow.Flow + +interface GetCipherOpenedHistory : (CipherOpenedHistoryMode) -> Flow> diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetCiphers.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetCiphers.kt new file mode 100644 index 00000000..4658aa25 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetCiphers.kt @@ -0,0 +1,10 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.model.DSecret +import kotlinx.coroutines.flow.Flow + +/** + * Provides a list of all available on the + * device accounts. + */ +interface GetCiphers : () -> Flow> diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetClipboardAutoClear.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetClipboardAutoClear.kt new file mode 100644 index 00000000..520cde5e --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetClipboardAutoClear.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.usecase + +import kotlinx.coroutines.flow.Flow +import kotlin.time.Duration + +interface GetClipboardAutoClear : () -> Flow diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetClipboardAutoClearVariants.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetClipboardAutoClearVariants.kt new file mode 100644 index 00000000..cef5b68e --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetClipboardAutoClearVariants.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.usecase + +import kotlinx.coroutines.flow.Flow +import kotlin.time.Duration + +interface GetClipboardAutoClearVariants : () -> Flow> diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetClipboardAutoRefresh.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetClipboardAutoRefresh.kt new file mode 100644 index 00000000..19ba23b6 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetClipboardAutoRefresh.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.usecase + +import kotlinx.coroutines.flow.Flow +import kotlin.time.Duration + +interface GetClipboardAutoRefresh : () -> Flow diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetClipboardAutoRefreshVariants.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetClipboardAutoRefreshVariants.kt new file mode 100644 index 00000000..9fb42043 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetClipboardAutoRefreshVariants.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.usecase + +import kotlinx.coroutines.flow.Flow +import kotlin.time.Duration + +interface GetClipboardAutoRefreshVariants : () -> Flow> diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetCollections.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetCollections.kt new file mode 100644 index 00000000..1a3cf12e --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetCollections.kt @@ -0,0 +1,10 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.model.DCollection +import kotlinx.coroutines.flow.Flow + +/** + * Provides a list of all available on the + * device collections. + */ +interface GetCollections : () -> Flow> diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetColors.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetColors.kt new file mode 100644 index 00000000..c765c639 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetColors.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.model.AppColors +import kotlinx.coroutines.flow.Flow + +interface GetColors : () -> Flow diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetColorsVariants.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetColorsVariants.kt new file mode 100644 index 00000000..0247c4d8 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetColorsVariants.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.model.AppColors +import kotlinx.coroutines.flow.Flow + +interface GetColorsVariants : () -> Flow> diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetConcealFields.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetConcealFields.kt new file mode 100644 index 00000000..dedb6ed7 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetConcealFields.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import kotlinx.coroutines.flow.Flow + +interface GetConcealFields : () -> Flow diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetDebugPremium.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetDebugPremium.kt new file mode 100644 index 00000000..3b04b75a --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetDebugPremium.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import kotlinx.coroutines.flow.Flow + +interface GetDebugPremium : () -> Flow diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetDebugScreenDelay.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetDebugScreenDelay.kt new file mode 100644 index 00000000..d71fb459 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetDebugScreenDelay.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import kotlinx.coroutines.flow.Flow + +interface GetDebugScreenDelay : () -> Flow diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetEmailRelays.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetEmailRelays.kt new file mode 100644 index 00000000..3eb69cc5 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetEmailRelays.kt @@ -0,0 +1,10 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.model.DGeneratorEmailRelay +import kotlinx.coroutines.flow.Flow + +/** + * Provides a list of all available email + * relays. + */ +interface GetEmailRelays : () -> Flow> diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetEnvSendUrl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetEnvSendUrl.kt new file mode 100644 index 00000000..b158ef9f --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetEnvSendUrl.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.DSend + +interface GetEnvSendUrl : (DSend) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetFingerprint.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetFingerprint.kt new file mode 100644 index 00000000..574d6597 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetFingerprint.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.model.AccountId +import kotlinx.coroutines.flow.Flow + +interface GetFingerprint : (AccountId) -> Flow diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetFolderTree.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetFolderTree.kt new file mode 100644 index 00000000..4167678e --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetFolderTree.kt @@ -0,0 +1,11 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.model.DFolderTree2 + +interface GetFolderTree { + fun invoke( + lens: (T) -> String, + allFolders: Collection, + folder: T, + ): DFolderTree2 +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetFolderTreeById.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetFolderTreeById.kt new file mode 100644 index 00000000..7edce4cd --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetFolderTreeById.kt @@ -0,0 +1,8 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.model.DFolderTree +import kotlinx.coroutines.flow.Flow + +interface GetFolderTreeById : ( + String, +) -> Flow diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetFolders.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetFolders.kt new file mode 100644 index 00000000..92a36966 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetFolders.kt @@ -0,0 +1,10 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.model.DFolder +import kotlinx.coroutines.flow.Flow + +/** + * Provides a list of all available on the + * device accounts. + */ +interface GetFolders : () -> Flow> diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetFont.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetFont.kt new file mode 100644 index 00000000..304d59bd --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetFont.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.model.AppFont +import kotlinx.coroutines.flow.Flow + +interface GetFont : () -> Flow diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetFontVariants.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetFontVariants.kt new file mode 100644 index 00000000..09c928e5 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetFontVariants.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.model.AppFont +import kotlinx.coroutines.flow.Flow + +interface GetFontVariants : () -> Flow> diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetGeneratorHistory.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetGeneratorHistory.kt new file mode 100644 index 00000000..3528d486 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetGeneratorHistory.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.model.DGeneratorHistory +import kotlinx.coroutines.flow.Flow + +interface GetGeneratorHistory : () -> Flow> diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetGravatarUrl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetGravatarUrl.kt new file mode 100644 index 00000000..17b20d69 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetGravatarUrl.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.feature.favicon.GravatarUrl + +interface GetGravatarUrl : (String) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetJustDeleteMeByUrl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetJustDeleteMeByUrl.kt new file mode 100644 index 00000000..f5f0e1cb --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetJustDeleteMeByUrl.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.service.justdeleteme.JustDeleteMeServiceInfo + +interface GetJustDeleteMeByUrl : (String) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetKeepScreenOn.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetKeepScreenOn.kt new file mode 100644 index 00000000..a3911994 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetKeepScreenOn.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import kotlinx.coroutines.flow.Flow + +interface GetKeepScreenOn : () -> Flow diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetLocale.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetLocale.kt new file mode 100644 index 00000000..371f5f7d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetLocale.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import kotlinx.coroutines.flow.Flow + +interface GetLocale : () -> Flow diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetLocaleVariants.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetLocaleVariants.kt new file mode 100644 index 00000000..f19b80a0 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetLocaleVariants.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import kotlinx.coroutines.flow.Flow + +interface GetLocaleVariants : () -> Flow> diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetMarkdown.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetMarkdown.kt new file mode 100644 index 00000000..df84f96e --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetMarkdown.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import kotlinx.coroutines.flow.Flow + +interface GetMarkdown : () -> Flow diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetMetas.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetMetas.kt new file mode 100644 index 00000000..83cfdd26 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetMetas.kt @@ -0,0 +1,10 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.model.DMeta +import kotlinx.coroutines.flow.Flow + +/** + * Provides a list of all available on the + * device metadata. + */ +interface GetMetas : () -> Flow> diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetNavAnimation.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetNavAnimation.kt new file mode 100644 index 00000000..dc152b64 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetNavAnimation.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.model.NavAnimation +import kotlinx.coroutines.flow.StateFlow + +interface GetNavAnimation : () -> StateFlow diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetNavAnimationVariants.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetNavAnimationVariants.kt new file mode 100644 index 00000000..d50be790 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetNavAnimationVariants.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.model.NavAnimation +import kotlinx.coroutines.flow.Flow + +interface GetNavAnimationVariants : () -> Flow> diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetNavLabel.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetNavLabel.kt new file mode 100644 index 00000000..a4390251 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetNavLabel.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import kotlinx.coroutines.flow.StateFlow + +interface GetNavLabel : () -> StateFlow diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetOnboardingLastVisitInstant.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetOnboardingLastVisitInstant.kt new file mode 100644 index 00000000..60a9efcd --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetOnboardingLastVisitInstant.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.usecase + +import kotlinx.coroutines.flow.Flow +import kotlinx.datetime.Instant + +interface GetOnboardingLastVisitInstant : () -> Flow diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetOrganizations.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetOrganizations.kt new file mode 100644 index 00000000..f4f505e3 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetOrganizations.kt @@ -0,0 +1,10 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.model.DOrganization +import kotlinx.coroutines.flow.Flow + +/** + * Provides a list of all available on the + * device organizations. + */ +interface GetOrganizations : () -> Flow> diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetPassphrase.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetPassphrase.kt new file mode 100644 index 00000000..2b49f262 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetPassphrase.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.PasswordGeneratorConfig + +interface GetPassphrase : (PasswordGeneratorConfig.Passphrase) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetPassword.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetPassword.kt new file mode 100644 index 00000000..0fd4bc76 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetPassword.kt @@ -0,0 +1,10 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.GeneratorContext +import com.artemchep.keyguard.common.model.PasswordGeneratorConfig + +interface GetPassword : ( + GeneratorContext, + PasswordGeneratorConfig, +) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetPasswordStrength.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetPasswordStrength.kt new file mode 100644 index 00000000..fc965423 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetPasswordStrength.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.PasswordStrength + +interface GetPasswordStrength : (String) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetProducts.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetProducts.kt new file mode 100644 index 00000000..54d2e269 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetProducts.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.model.Product +import kotlinx.coroutines.flow.Flow + +interface GetProducts : () -> Flow?> diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetProfiles.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetProfiles.kt new file mode 100644 index 00000000..7050ef2d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetProfiles.kt @@ -0,0 +1,10 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.model.DProfile +import kotlinx.coroutines.flow.Flow + +/** + * Provides a list of all available on the + * device profiles. + */ +interface GetProfiles : () -> Flow> diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetPurchased.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetPurchased.kt new file mode 100644 index 00000000..1b50087e --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetPurchased.kt @@ -0,0 +1,41 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.exception.PremiumException +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.io.handleErrorTap +import com.artemchep.keyguard.common.io.io +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.io.map +import com.artemchep.keyguard.common.io.toIO +import com.artemchep.keyguard.platform.recordException +import kotlinx.coroutines.flow.Flow + +interface GetPurchased : () -> Flow + +fun IO.premium( + getPurchased: () -> Flow, + predicate: IO = io(true), +): IO = ioEffect { + val isPremium = getPurchased() + .toIO() + .handleErrorTap { e -> + val newException = RuntimeException( + "Failed to obtain the Purchase status.", + e, + ) + recordException(newException) + } + .bind() + if (!isPremium) { + val needsPremium = predicate + .bind() + if (needsPremium) { + throw PremiumException() + } + } + + bind() +} + +fun IO.unit() = map { Unit } diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetScreenState.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetScreenState.kt new file mode 100644 index 00000000..42d14e50 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetScreenState.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import kotlinx.coroutines.flow.Flow + +interface GetScreenState : (String) -> Flow> diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetSends.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetSends.kt new file mode 100644 index 00000000..974b13ee --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetSends.kt @@ -0,0 +1,8 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.model.DSend +import kotlinx.coroutines.flow.Flow + +/** + */ +interface GetSends : () -> Flow> diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetShouldRequestAppReview.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetShouldRequestAppReview.kt new file mode 100644 index 00000000..d35bd502 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetShouldRequestAppReview.kt @@ -0,0 +1,8 @@ +package com.artemchep.keyguard.common.usecase + +import kotlinx.coroutines.flow.Flow + +/** + * @author Artem Chepurnyi + */ +interface GetShouldRequestAppReview : () -> Flow diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetSubscriptions.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetSubscriptions.kt new file mode 100644 index 00000000..93a48f3f --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetSubscriptions.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.model.Subscription +import kotlinx.coroutines.flow.Flow + +interface GetSubscriptions : () -> Flow?> diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetSuggestions.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetSuggestions.kt new file mode 100644 index 00000000..d94f49c1 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetSuggestions.kt @@ -0,0 +1,12 @@ +package com.artemchep.keyguard.common.usecase + +import arrow.optics.Getter +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.AutofillTarget +import com.artemchep.keyguard.common.model.DSecret + +interface GetSuggestions : ( + List, + Getter, + AutofillTarget, +) -> IO> diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetTheme.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetTheme.kt new file mode 100644 index 00000000..e5392017 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetTheme.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.model.AppTheme +import kotlinx.coroutines.flow.Flow + +interface GetTheme : () -> Flow diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetThemeUseAmoledDark.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetThemeUseAmoledDark.kt new file mode 100644 index 00000000..dde4d241 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetThemeUseAmoledDark.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import kotlinx.coroutines.flow.Flow + +interface GetThemeUseAmoledDark : () -> Flow diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetThemeVariants.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetThemeVariants.kt new file mode 100644 index 00000000..3970463c --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetThemeVariants.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.model.AppTheme +import kotlinx.coroutines.flow.Flow + +interface GetThemeVariants : () -> Flow> diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetTotpCode.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetTotpCode.kt new file mode 100644 index 00000000..79abc6be --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetTotpCode.kt @@ -0,0 +1,7 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.model.TotpCode +import com.artemchep.keyguard.common.model.TotpToken +import kotlinx.coroutines.flow.Flow + +interface GetTotpCode : (TotpToken) -> Flow diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetUseExternalBrowser.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetUseExternalBrowser.kt new file mode 100644 index 00000000..05ef5daa --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetUseExternalBrowser.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import kotlinx.coroutines.flow.Flow + +interface GetUseExternalBrowser : () -> Flow diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetVaultLockAfterReboot.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetVaultLockAfterReboot.kt new file mode 100644 index 00000000..b847ed44 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetVaultLockAfterReboot.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import kotlinx.coroutines.flow.Flow + +interface GetVaultLockAfterReboot : () -> Flow diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetVaultLockAfterScreenOff.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetVaultLockAfterScreenOff.kt new file mode 100644 index 00000000..2ee456ea --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetVaultLockAfterScreenOff.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import kotlinx.coroutines.flow.Flow + +interface GetVaultLockAfterScreenOff : () -> Flow diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetVaultLockAfterTimeout.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetVaultLockAfterTimeout.kt new file mode 100644 index 00000000..c08416a9 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetVaultLockAfterTimeout.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.usecase + +import kotlinx.coroutines.flow.Flow +import kotlin.time.Duration + +interface GetVaultLockAfterTimeout : () -> Flow diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetVaultLockAfterTimeoutVariants.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetVaultLockAfterTimeoutVariants.kt new file mode 100644 index 00000000..acc6bf0e --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetVaultLockAfterTimeoutVariants.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.usecase + +import kotlinx.coroutines.flow.Flow +import kotlin.time.Duration + +interface GetVaultLockAfterTimeoutVariants : () -> Flow> diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetVaultPersist.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetVaultPersist.kt new file mode 100644 index 00000000..2d7a9439 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetVaultPersist.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import kotlinx.coroutines.flow.Flow + +interface GetVaultPersist : () -> Flow diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetVaultSession.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetVaultSession.kt new file mode 100644 index 00000000..c1fb77c6 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetVaultSession.kt @@ -0,0 +1,12 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.model.MasterSession +import kotlinx.coroutines.flow.Flow + +interface GetVaultSession : () -> Flow { + /** + * Returns latest value of the session or `null` if no-one + * is currently subscribed to the session. + */ + val valueOrNull: MasterSession? +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetWebsiteIcons.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetWebsiteIcons.kt new file mode 100644 index 00000000..8c7b33da --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetWebsiteIcons.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import kotlinx.coroutines.flow.Flow + +interface GetWebsiteIcons : () -> Flow diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetWriteAccess.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetWriteAccess.kt new file mode 100644 index 00000000..f43a292d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/GetWriteAccess.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import kotlinx.coroutines.flow.Flow + +interface GetWriteAccess : () -> Flow diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/MergeFolderById.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/MergeFolderById.kt new file mode 100644 index 00000000..29320aff --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/MergeFolderById.kt @@ -0,0 +1,8 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO + +interface MergeFolderById : ( + Set, + String, +) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/MessageHub.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/MessageHub.kt new file mode 100644 index 00000000..be073a7c --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/MessageHub.kt @@ -0,0 +1,7 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.model.ToastMessage + +interface MessageHub { + fun register(key: String, onMessage: (ToastMessage) -> Unit): () -> Unit +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/MoveCipherToFolderById.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/MoveCipherToFolderById.kt new file mode 100644 index 00000000..ac62a27c --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/MoveCipherToFolderById.kt @@ -0,0 +1,9 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.FolderOwnership2 + +interface MoveCipherToFolderById : ( + Set, + FolderOwnership2, +) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/NumberFormatter.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/NumberFormatter.kt new file mode 100644 index 00000000..39c28fb7 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/NumberFormatter.kt @@ -0,0 +1,7 @@ +package com.artemchep.keyguard.common.usecase + +interface NumberFormatter { + fun formatNumber( + number: Int, + ): String +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PasskeyTargetCheck.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PasskeyTargetCheck.kt new file mode 100644 index 00000000..77b8a3ac --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PasskeyTargetCheck.kt @@ -0,0 +1,15 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.DSecret + +data class PasskeyTarget( + val allowedCredentials: List? = null, + val rpId: String?, +) { + data class AllowedCredential( + val credentialId: String, + ) +} + +interface PasskeyTargetCheck : (DSecret.Login.Fido2Credentials, PasskeyTarget) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutAccountColorById.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutAccountColorById.kt new file mode 100644 index 00000000..20f21938 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutAccountColorById.kt @@ -0,0 +1,9 @@ +package com.artemchep.keyguard.common.usecase + +import androidx.compose.ui.graphics.Color +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.AccountId + +interface PutAccountColorById : ( + Map, +) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutAccountMasterPasswordHintById.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutAccountMasterPasswordHintById.kt new file mode 100644 index 00000000..19d4e7de --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutAccountMasterPasswordHintById.kt @@ -0,0 +1,8 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.AccountId + +interface PutAccountMasterPasswordHintById : ( + Map, +) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutAccountNameById.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutAccountNameById.kt new file mode 100644 index 00000000..15654b0a --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutAccountNameById.kt @@ -0,0 +1,8 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.AccountId + +interface PutAccountNameById : ( + Map, +) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutAllowScreenshots.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutAllowScreenshots.kt new file mode 100644 index 00000000..51535a6b --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutAllowScreenshots.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO + +interface PutAllowScreenshots : (Boolean) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutAllowTwoPanelLayoutInLandscape.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutAllowTwoPanelLayoutInLandscape.kt new file mode 100644 index 00000000..1cafe918 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutAllowTwoPanelLayoutInLandscape.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO + +interface PutAllowTwoPanelLayoutInLandscape : (Boolean) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutAllowTwoPanelLayoutInPortrait.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutAllowTwoPanelLayoutInPortrait.kt new file mode 100644 index 00000000..011be707 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutAllowTwoPanelLayoutInPortrait.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO + +interface PutAllowTwoPanelLayoutInPortrait : (Boolean) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutAppIcons.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutAppIcons.kt new file mode 100644 index 00000000..c98fdf4d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutAppIcons.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO + +interface PutAppIcons : (Boolean) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutAutofillCopyTotp.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutAutofillCopyTotp.kt new file mode 100644 index 00000000..7b553a01 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutAutofillCopyTotp.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO + +interface PutAutofillCopyTotp : (Boolean) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutAutofillInlineSuggestions.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutAutofillInlineSuggestions.kt new file mode 100644 index 00000000..7b77e511 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutAutofillInlineSuggestions.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO + +interface PutAutofillInlineSuggestions : (Boolean) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutAutofillManualSelection.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutAutofillManualSelection.kt new file mode 100644 index 00000000..08cb543e --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutAutofillManualSelection.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO + +interface PutAutofillManualSelection : (Boolean) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutAutofillRespectAutofillOff.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutAutofillRespectAutofillOff.kt new file mode 100644 index 00000000..e9d786cd --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutAutofillRespectAutofillOff.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO + +interface PutAutofillRespectAutofillOff : (Boolean) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutAutofillSaveRequest.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutAutofillSaveRequest.kt new file mode 100644 index 00000000..9fe59454 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutAutofillSaveRequest.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO + +interface PutAutofillSaveRequest : (Boolean) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutAutofillSaveUri.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutAutofillSaveUri.kt new file mode 100644 index 00000000..5300a9d8 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutAutofillSaveUri.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO + +interface PutAutofillSaveUri : (Boolean) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutBiometricTimeout.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutBiometricTimeout.kt new file mode 100644 index 00000000..d19eeb49 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutBiometricTimeout.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO +import kotlin.time.Duration + +interface PutBiometricTimeout : (Duration?) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutCachePremium.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutCachePremium.kt new file mode 100644 index 00000000..c51d452c --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutCachePremium.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO + +interface PutCachePremium : (Boolean) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutCheckPwnedPasswords.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutCheckPwnedPasswords.kt new file mode 100644 index 00000000..eb3a6b53 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutCheckPwnedPasswords.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO + +interface PutCheckPwnedPasswords : (Boolean) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutCheckPwnedServices.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutCheckPwnedServices.kt new file mode 100644 index 00000000..611e1330 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutCheckPwnedServices.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO + +interface PutCheckPwnedServices : (Boolean) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutCheckTwoFA.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutCheckTwoFA.kt new file mode 100644 index 00000000..99853abc --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutCheckTwoFA.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO + +interface PutCheckTwoFA : (Boolean) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutClipboardAutoClear.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutClipboardAutoClear.kt new file mode 100644 index 00000000..d4520301 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutClipboardAutoClear.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO +import kotlin.time.Duration + +interface PutClipboardAutoClear : (Duration?) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutClipboardAutoRefresh.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutClipboardAutoRefresh.kt new file mode 100644 index 00000000..a147aea6 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutClipboardAutoRefresh.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO +import kotlin.time.Duration + +interface PutClipboardAutoRefresh : (Duration?) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutColors.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutColors.kt new file mode 100644 index 00000000..7b8942ee --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutColors.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.AppColors + +interface PutColors : (AppColors?) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutConcealFields.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutConcealFields.kt new file mode 100644 index 00000000..a8dd4d40 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutConcealFields.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO + +interface PutConcealFields : (Boolean) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutDebugPremium.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutDebugPremium.kt new file mode 100644 index 00000000..04d27c94 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutDebugPremium.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO + +interface PutDebugPremium : (Boolean) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutDebugScreenDelay.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutDebugScreenDelay.kt new file mode 100644 index 00000000..73eba699 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutDebugScreenDelay.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO + +interface PutDebugScreenDelay : (Boolean) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutFont.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutFont.kt new file mode 100644 index 00000000..ebfd0a5f --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutFont.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.AppFont + +interface PutFont : (AppFont?) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutKeepScreenOn.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutKeepScreenOn.kt new file mode 100644 index 00000000..2f77f04e --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutKeepScreenOn.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO + +interface PutKeepScreenOn : (Boolean) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutLocale.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutLocale.kt new file mode 100644 index 00000000..051a4917 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutLocale.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO + +interface PutLocale : (String?) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutMarkdown.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutMarkdown.kt new file mode 100644 index 00000000..653b6d42 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutMarkdown.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO + +interface PutMarkdown : (Boolean) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutNavAnimation.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutNavAnimation.kt new file mode 100644 index 00000000..4916b37c --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutNavAnimation.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.NavAnimation + +interface PutNavAnimation : (NavAnimation?) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutNavLabel.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutNavLabel.kt new file mode 100644 index 00000000..b5a60243 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutNavLabel.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO + +interface PutNavLabel : (Boolean) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutOnboardingLastVisitInstant.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutOnboardingLastVisitInstant.kt new file mode 100644 index 00000000..f0cb7133 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutOnboardingLastVisitInstant.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO +import kotlinx.datetime.Instant + +interface PutOnboardingLastVisitInstant : (Instant) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutScreenState.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutScreenState.kt new file mode 100644 index 00000000..42fa79d3 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutScreenState.kt @@ -0,0 +1,8 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO + +interface PutScreenState : ( + String, + Map, +) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutTheme.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutTheme.kt new file mode 100644 index 00000000..c79581ed --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutTheme.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.AppTheme + +interface PutTheme : (AppTheme?) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutThemeUseAmoledDark.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutThemeUseAmoledDark.kt new file mode 100644 index 00000000..d76fe84a --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutThemeUseAmoledDark.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO + +interface PutThemeUseAmoledDark : (Boolean) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutUseExternalBrowser.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutUseExternalBrowser.kt new file mode 100644 index 00000000..833aa3b2 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutUseExternalBrowser.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO + +interface PutUseExternalBrowser : (Boolean) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutVaultLockAfterReboot.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutVaultLockAfterReboot.kt new file mode 100644 index 00000000..1dbabde7 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutVaultLockAfterReboot.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO + +interface PutVaultLockAfterReboot : (Boolean) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutVaultLockAfterScreenOff.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutVaultLockAfterScreenOff.kt new file mode 100644 index 00000000..1575817f --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutVaultLockAfterScreenOff.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO + +interface PutVaultLockAfterScreenOff : (Boolean) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutVaultLockAfterTimeout.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutVaultLockAfterTimeout.kt new file mode 100644 index 00000000..064e16db --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutVaultLockAfterTimeout.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO +import kotlin.time.Duration + +interface PutVaultLockAfterTimeout : (Duration?) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutVaultPersist.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutVaultPersist.kt new file mode 100644 index 00000000..e8e5a01a --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutVaultPersist.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO + +interface PutVaultPersist : (Boolean) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutVaultSession.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutVaultSession.kt new file mode 100644 index 00000000..0446e499 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutVaultSession.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.MasterSession + +interface PutVaultSession : (MasterSession) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutWebsiteIcons.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutWebsiteIcons.kt new file mode 100644 index 00000000..152704ac --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutWebsiteIcons.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO + +interface PutWebsiteIcons : (Boolean) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutWriteAccess.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutWriteAccess.kt new file mode 100644 index 00000000..cd27bd74 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/PutWriteAccess.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO + +interface PutWriteAccess : (Boolean) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/QueueSyncAll.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/QueueSyncAll.kt new file mode 100644 index 00000000..0faf45e7 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/QueueSyncAll.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO + +interface QueueSyncAll : () -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/QueueSyncById.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/QueueSyncById.kt new file mode 100644 index 00000000..9dc0f1e9 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/QueueSyncById.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.AccountId + +interface QueueSyncById : (AccountId) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/RePromptCipherById.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/RePromptCipherById.kt new file mode 100644 index 00000000..3c51941d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/RePromptCipherById.kt @@ -0,0 +1,8 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO + +interface RePromptCipherById : ( + Set, + Boolean, +) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/RemoveAccountById.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/RemoveAccountById.kt new file mode 100644 index 00000000..8184e0aa --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/RemoveAccountById.kt @@ -0,0 +1,8 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.AccountId + +interface RemoveAccountById : ( + Set, +) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/RemoveAccounts.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/RemoveAccounts.kt new file mode 100644 index 00000000..777cc9e2 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/RemoveAccounts.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO + +interface RemoveAccounts : () -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/RemoveAttachment.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/RemoveAttachment.kt new file mode 100644 index 00000000..b95a0e36 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/RemoveAttachment.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.RemoveAttachmentRequest + +interface RemoveAttachment : (List) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/RemoveCipherById.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/RemoveCipherById.kt new file mode 100644 index 00000000..b70ba599 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/RemoveCipherById.kt @@ -0,0 +1,7 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO + +interface RemoveCipherById : ( + Set, +) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/RemoveEmailRelayById.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/RemoveEmailRelayById.kt new file mode 100644 index 00000000..55ba0b30 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/RemoveEmailRelayById.kt @@ -0,0 +1,7 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO + +interface RemoveEmailRelayById : ( + Set, +) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/RemoveFolderById.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/RemoveFolderById.kt new file mode 100644 index 00000000..3b591709 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/RemoveFolderById.kt @@ -0,0 +1,13 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO + +interface RemoveFolderById : ( + Set, + RemoveFolderById.OnCiphersConflict, +) -> IO { + enum class OnCiphersConflict { + IGNORE, + TRASH, + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/RemoveGeneratorHistory.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/RemoveGeneratorHistory.kt new file mode 100644 index 00000000..1ce5792a --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/RemoveGeneratorHistory.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO + +interface RemoveGeneratorHistory : () -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/RemoveGeneratorHistoryById.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/RemoveGeneratorHistoryById.kt new file mode 100644 index 00000000..1019aeb8 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/RemoveGeneratorHistoryById.kt @@ -0,0 +1,7 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO + +interface RemoveGeneratorHistoryById : ( + Set, +) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/RenameFolderById.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/RenameFolderById.kt new file mode 100644 index 00000000..ce65f0ce --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/RenameFolderById.kt @@ -0,0 +1,7 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO + +interface RenameFolderById : ( + Map, +) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/RequestAppReview.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/RequestAppReview.kt new file mode 100644 index 00000000..1d09e389 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/RequestAppReview.kt @@ -0,0 +1,9 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.platform.LeContext + +/** + * @author Artem Chepurnyi + */ +interface RequestAppReview : (LeContext) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/ResolvePlaceholders.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/ResolvePlaceholders.kt new file mode 100644 index 00000000..addd4895 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/ResolvePlaceholders.kt @@ -0,0 +1,7 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO + +interface ResolvePlaceholders : ( + String, +) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/RestoreCipherById.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/RestoreCipherById.kt new file mode 100644 index 00000000..2bf79b4a --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/RestoreCipherById.kt @@ -0,0 +1,7 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO + +interface RestoreCipherById : ( + Set, +) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/RetryCipher.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/RetryCipher.kt new file mode 100644 index 00000000..9d51e9cf --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/RetryCipher.kt @@ -0,0 +1,7 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO + +interface RetryCipher : ( + Set, +) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/RotateDeviceIdUseCase.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/RotateDeviceIdUseCase.kt new file mode 100644 index 00000000..86486ce4 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/RotateDeviceIdUseCase.kt @@ -0,0 +1,25 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.flatTap +import com.artemchep.keyguard.common.service.id.IdRepository +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class RotateDeviceIdUseCase( + private val deviceIdRepository: IdRepository, + private val removeAccounts: RemoveAccounts, +) : () -> IO { + constructor(directDI: DirectDI) : this( + deviceIdRepository = directDI.instance(), + removeAccounts = directDI.instance(), + ) + + override fun invoke() = deviceIdRepository + .put("") + // Using an old token with a new device identifiers upon next + // request is suspicious. + .flatTap { + removeAccounts() + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/ShowMessage.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/ShowMessage.kt new file mode 100644 index 00000000..b4f57aa6 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/ShowMessage.kt @@ -0,0 +1,10 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.model.ToastMessage + +interface ShowMessage { + fun copy( + value: ToastMessage, + target: String? = null, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/SyncAll.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/SyncAll.kt new file mode 100644 index 00000000..b81eb596 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/SyncAll.kt @@ -0,0 +1,7 @@ +package com.artemchep.keyguard.common.usecase + +import arrow.core.Either +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.AccountId + +interface SyncAll : () -> IO>> diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/SyncById.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/SyncById.kt new file mode 100644 index 00000000..cf6469a0 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/SyncById.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.AccountId + +interface SyncById : (AccountId) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/TrashCipherByFolderId.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/TrashCipherByFolderId.kt new file mode 100644 index 00000000..ca518df9 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/TrashCipherByFolderId.kt @@ -0,0 +1,7 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO + +interface TrashCipherByFolderId : ( + Set, +) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/TrashCipherById.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/TrashCipherById.kt new file mode 100644 index 00000000..fa5e6568 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/TrashCipherById.kt @@ -0,0 +1,7 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO + +interface TrashCipherById : ( + Set, +) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/UnlockUseCase.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/UnlockUseCase.kt new file mode 100644 index 00000000..474777d0 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/UnlockUseCase.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.model.VaultState +import kotlinx.coroutines.flow.Flow + +interface UnlockUseCase : () -> Flow diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/Watchdog.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/Watchdog.kt new file mode 100644 index 00000000..cf3bd4a3 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/Watchdog.kt @@ -0,0 +1,96 @@ +package com.artemchep.keyguard.common.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.model.AccountId +import com.artemchep.keyguard.common.model.AccountTask +import kotlinx.collections.immutable.PersistentMap +import kotlinx.collections.immutable.persistentMapOf +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.update + +interface Watchdog { + fun track( + accountId: AccountId, + accountTask: AccountTask, + io: IO, + ) = track( + accountIdSet = setOf(accountId), + accountTask = accountTask, + io = io, + ) + + fun track( + accountIdSet: Set, + accountTask: AccountTask, + io: IO, + ): IO +} + +interface SupervisorRead { + fun get(): Flow>> + + fun get(accountTask: AccountTask): Flow> +} + +class WatchdogImpl() : Watchdog, SupervisorRead { + private val sink = MutableStateFlow( + value = persistentMapOf>(), + ) + + override fun track( + accountIdSet: Set, + accountTask: AccountTask, + io: IO, + ): IO = ioEffect { + try { + updateState(accountIdSet, accountTask, Int::inc) + io.bind() + } finally { + updateState(accountIdSet, accountTask, Int::dec) + } + } + + private fun updateState( + keys: Set, + section: AccountTask, + block: (Int) -> Int, + ) = sink.update { map -> + val initialSection = map.getOrElse(section) { persistentMapOf() } + val newSection = keys.fold(initialSection) { y, key -> + val v = y + .getOrElse(key) { 0 } + .let(block) + if (v > 0) { + y.put(key, v) + } else { + y.remove(key) + } + } + map.put(section, newSection) + } + + override fun get(): Flow>> = sink + .map { store -> + store.mapValues { it.value.convertToSet() } + } + .distinctUntilChanged() + + private fun Map.convertToSet() = this + .asSequence() + .mapNotNull { it.takeKeyIfExists() } + .toSet() + + private fun Map.Entry.takeKeyIfExists() = takeIf { it.value > 0 }?.key + + override fun get(accountTask: AccountTask): Flow> = get() + .map { all -> + // Get the specific section of the data. + all[accountTask].orEmpty() + } + .distinctUntilChanged() +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/WindowCoroutineScope.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/WindowCoroutineScope.kt new file mode 100644 index 00000000..ee660cfe --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/WindowCoroutineScope.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.usecase + +import kotlinx.coroutines.CoroutineScope + +interface WindowCoroutineScope : CoroutineScope diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/AddEmailRelayImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/AddEmailRelayImpl.kt new file mode 100644 index 00000000..52a9de15 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/AddEmailRelayImpl.kt @@ -0,0 +1,18 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.model.DGeneratorEmailRelay +import com.artemchep.keyguard.common.service.relays.repo.GeneratorEmailRelayRepository +import com.artemchep.keyguard.common.usecase.AddEmailRelay +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class AddEmailRelayImpl( + private val generatorEmailRelayRepository: GeneratorEmailRelayRepository, +) : AddEmailRelay { + constructor(directDI: DirectDI) : this( + generatorEmailRelayRepository = directDI.instance(), + ) + + override fun invoke(model: DGeneratorEmailRelay) = generatorEmailRelayRepository + .put(model) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/AddGeneratorHistoryImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/AddGeneratorHistoryImpl.kt new file mode 100644 index 00000000..7c4bbb9a --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/AddGeneratorHistoryImpl.kt @@ -0,0 +1,18 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.android.downloader.journal.GeneratorHistoryRepository +import com.artemchep.keyguard.common.model.DGeneratorHistory +import com.artemchep.keyguard.common.usecase.AddGeneratorHistory +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class AddGeneratorHistoryImpl( + private val generatorHistoryRepository: GeneratorHistoryRepository, +) : AddGeneratorHistory { + constructor(directDI: DirectDI) : this( + generatorHistoryRepository = directDI.instance(), + ) + + override fun invoke(model: DGeneratorHistory) = generatorHistoryRepository + .put(model) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl.kt new file mode 100644 index 00000000..c31b7280 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/AuthConfirmMasterKeyUseCaseImpl.kt @@ -0,0 +1,52 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.exception.PasswordMismatchException +import com.artemchep.keyguard.common.io.flatMap +import com.artemchep.keyguard.common.io.ioRaise +import com.artemchep.keyguard.common.io.map +import com.artemchep.keyguard.common.model.AuthResult +import com.artemchep.keyguard.common.model.FingerprintPassword +import com.artemchep.keyguard.common.model.MasterPassword +import com.artemchep.keyguard.common.model.MasterPasswordHash +import com.artemchep.keyguard.common.model.MasterPasswordSalt +import com.artemchep.keyguard.common.usecase.AuthConfirmMasterKeyUseCase +import com.artemchep.keyguard.common.usecase.GenerateMasterHashUseCase +import com.artemchep.keyguard.common.usecase.GenerateMasterKeyUseCase +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class AuthConfirmMasterKeyUseCaseImpl( + private val generateMasterHashUseCase: GenerateMasterHashUseCase, + private val generateMasterKeyUseCase: GenerateMasterKeyUseCase, +) : AuthConfirmMasterKeyUseCase { + constructor(directDI: DirectDI) : this( + generateMasterHashUseCase = directDI.instance(), + generateMasterKeyUseCase = directDI.instance(), + ) + + override fun invoke( + salt: MasterPasswordSalt, + hash: MasterPasswordHash, + ) = { password: MasterPassword -> + // Generate a hash from the given password and known + // salt, to identify if the password is valid. + generateMasterHashUseCase(password, salt) + .flatMap { h -> + if (!h.byteArray.contentEquals(hash.byteArray)) { + val e = PasswordMismatchException() + return@flatMap ioRaise(e) + } + + generateMasterKeyUseCase(password, hash) + } + .map { key -> + AuthResult( + key = key, + token = FingerprintPassword( + hash = hash, + salt = salt, + ), + ) + } + } +} \ No newline at end of file diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl.kt new file mode 100644 index 00000000..9bceef06 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/AuthGenerateMasterKeyUseCaseImpl.kt @@ -0,0 +1,42 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.io.effectMap +import com.artemchep.keyguard.common.model.AuthResult +import com.artemchep.keyguard.common.model.FingerprintPassword +import com.artemchep.keyguard.common.model.MasterPassword +import com.artemchep.keyguard.common.usecase.AuthGenerateMasterKeyUseCase +import com.artemchep.keyguard.common.usecase.GenerateMasterHashUseCase +import com.artemchep.keyguard.common.usecase.GenerateMasterKeyUseCase +import com.artemchep.keyguard.common.usecase.GenerateMasterSaltUseCase +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class AuthGenerateMasterKeyUseCaseImpl( + private val generateMasterHashUseCase: GenerateMasterHashUseCase, + private val generateMasterKeyUseCase: GenerateMasterKeyUseCase, + private val generateMasterSaltUseCase: GenerateMasterSaltUseCase, +) : AuthGenerateMasterKeyUseCase { + constructor(directDI: DirectDI) : this( + generateMasterHashUseCase = directDI.instance(), + generateMasterKeyUseCase = directDI.instance(), + generateMasterSaltUseCase = directDI.instance(), + ) + + override fun invoke() = { password: MasterPassword -> + // Generate a hash from the given password and known + // salt, to identify if the password is valid. + generateMasterSaltUseCase() + .effectMap { salt -> + val hash = generateMasterHashUseCase(password, salt).bind() + val key = generateMasterKeyUseCase(password, hash).bind() + AuthResult( + key = key, + token = FingerprintPassword( + hash = hash, + salt = salt, + ), + ) + } + } +} \ No newline at end of file diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/BiometricKeyDecryptUseCaseImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/BiometricKeyDecryptUseCaseImpl.kt new file mode 100644 index 00000000..d8db7e72 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/BiometricKeyDecryptUseCaseImpl.kt @@ -0,0 +1,20 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.map +import com.artemchep.keyguard.common.model.MasterKey +import com.artemchep.keyguard.common.usecase.BiometricKeyDecryptUseCase +import com.artemchep.keyguard.core.session.util.encode +import com.artemchep.keyguard.platform.LeCipher +import org.kodein.di.DirectDI + +class BiometricKeyDecryptUseCaseImpl() : BiometricKeyDecryptUseCase { + constructor(directDI: DirectDI) : this() + + override fun invoke( + cipher: IO, + encryptedMasterKey: ByteArray, + ): IO = encryptedMasterKey + .encode(cipher) + .map(::MasterKey) +} \ No newline at end of file diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/BiometricKeyEncryptUseCaseImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/BiometricKeyEncryptUseCaseImpl.kt new file mode 100644 index 00000000..953716e8 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/BiometricKeyEncryptUseCaseImpl.kt @@ -0,0 +1,18 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.MasterKey +import com.artemchep.keyguard.common.usecase.BiometricKeyEncryptUseCase +import com.artemchep.keyguard.core.session.util.encode +import com.artemchep.keyguard.platform.LeCipher +import org.kodein.di.DirectDI + +class BiometricKeyEncryptUseCaseImpl() : BiometricKeyEncryptUseCase { + constructor(directDI: DirectDI) : this() + + override fun invoke( + cipher: IO, + masterKey: MasterKey, + ): IO = masterKey.byteArray + .encode(cipher) +} \ No newline at end of file diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/ClearVaultSessionImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/ClearVaultSessionImpl.kt new file mode 100644 index 00000000..448383bc --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/ClearVaultSessionImpl.kt @@ -0,0 +1,18 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.MasterSession +import com.artemchep.keyguard.common.usecase.ClearVaultSession +import com.artemchep.keyguard.common.usecase.PutVaultSession +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class ClearVaultSessionImpl( + private val putVaultSession: PutVaultSession, +) : ClearVaultSession { + constructor(directDI: DirectDI) : this( + putVaultSession = directDI.instance(), + ) + + override fun invoke(): IO = putVaultSession(MasterSession.Empty()) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/ConfirmAccessByPasswordUseCaseImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/ConfirmAccessByPasswordUseCaseImpl.kt new file mode 100644 index 00000000..b4b526e7 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/ConfirmAccessByPasswordUseCaseImpl.kt @@ -0,0 +1,45 @@ +package com.artemchep.keyguard.common.usecase.impl + +import arrow.core.compose +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.effectMap +import com.artemchep.keyguard.common.io.fold +import com.artemchep.keyguard.common.io.toIO +import com.artemchep.keyguard.common.model.MasterPassword +import com.artemchep.keyguard.common.service.vault.FingerprintReadWriteRepository +import com.artemchep.keyguard.common.usecase.AuthConfirmMasterKeyUseCase +import com.artemchep.keyguard.common.usecase.ConfirmAccessByPasswordUseCase +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class ConfirmAccessByPasswordUseCaseImpl( + private val keyReadWriteRepository: FingerprintReadWriteRepository, + private val authConfirmMasterKeyUseCase: AuthConfirmMasterKeyUseCase, +) : ConfirmAccessByPasswordUseCase { + constructor(directDI: DirectDI) : this( + keyReadWriteRepository = directDI.instance(), + authConfirmMasterKeyUseCase = directDI.instance(), + ) + + override fun invoke( + password: String, + ): IO = keyReadWriteRepository + .get().toIO() + .effectMap { fingerprint -> + requireNotNull(fingerprint) { + "Identity fingerprint must not be null!" + } + val salt = fingerprint.master.salt + val hash = fingerprint.master.hash + authConfirmMasterKeyUseCase(salt, hash) + .compose { password: String -> + val data = password.toByteArray() + MasterPassword(data) + } + .invoke(password) + .fold( + ifLeft = { false }, + ifRight = { true }, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/DownloadAttachmentImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/DownloadAttachmentImpl.kt new file mode 100644 index 00000000..eac2dd6c --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/DownloadAttachmentImpl.kt @@ -0,0 +1,218 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.io.combine +import com.artemchep.keyguard.common.io.flatMap +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.io.map +import com.artemchep.keyguard.common.io.toIO +import com.artemchep.keyguard.common.model.AccountId +import com.artemchep.keyguard.common.model.DownloadAttachmentRequest +import com.artemchep.keyguard.common.model.DownloadAttachmentRequestData +import com.artemchep.keyguard.common.service.crypto.CipherEncryptor +import com.artemchep.keyguard.common.service.crypto.CryptoGenerator +import com.artemchep.keyguard.common.service.download.DownloadService +import com.artemchep.keyguard.common.service.text.Base64Service +import com.artemchep.keyguard.common.usecase.DownloadAttachment +import com.artemchep.keyguard.core.store.DatabaseManager +import com.artemchep.keyguard.core.store.bitwarden.BitwardenCipher +import com.artemchep.keyguard.provider.bitwarden.api.builder.api +import com.artemchep.keyguard.provider.bitwarden.api.builder.get +import com.artemchep.keyguard.provider.bitwarden.crypto.BitwardenCrCta +import com.artemchep.keyguard.provider.bitwarden.crypto.BitwardenCrImpl +import com.artemchep.keyguard.provider.bitwarden.crypto.BitwardenCrKey +import com.artemchep.keyguard.provider.bitwarden.crypto.appendOrganizationToken2 +import com.artemchep.keyguard.provider.bitwarden.crypto.appendProfileToken2 +import com.artemchep.keyguard.provider.bitwarden.crypto.appendUserToken +import com.artemchep.keyguard.provider.bitwarden.crypto.encrypted +import com.artemchep.keyguard.provider.bitwarden.crypto.transform +import com.artemchep.keyguard.provider.bitwarden.repository.BitwardenCipherRepository +import com.artemchep.keyguard.provider.bitwarden.repository.BitwardenOrganizationRepository +import com.artemchep.keyguard.provider.bitwarden.repository.BitwardenProfileRepository +import com.artemchep.keyguard.provider.bitwarden.repository.BitwardenTokenRepository +import com.artemchep.keyguard.provider.bitwarden.usecase.util.withRefreshableAccessToken +import io.ktor.client.HttpClient +import kotlinx.serialization.json.Json +import org.kodein.di.DirectDI +import org.kodein.di.instance + +/** + * @author Artem Chepurnyi + */ +class DownloadAttachmentImpl2( + private val tokenRepository: BitwardenTokenRepository, + private val cipherRepository: BitwardenCipherRepository, + private val profileRepository: BitwardenProfileRepository, + private val organizationRepository: BitwardenOrganizationRepository, + private val downloadService: DownloadService, + private val databaseManager: DatabaseManager, + private val cipherEncryptor: CipherEncryptor, + private val cryptoGenerator: CryptoGenerator, + private val base64Service: Base64Service, + private val json: Json, + private val httpClient: HttpClient, +) : DownloadAttachment { + companion object { + private const val THREAD_BUCKET_SIZE = 10 + } + + constructor(directDI: DirectDI) : this( + tokenRepository = directDI.instance(), + cipherRepository = directDI.instance(), + profileRepository = directDI.instance(), + organizationRepository = directDI.instance(), + downloadService = directDI.instance(), + databaseManager = directDI.instance(), + cipherEncryptor = directDI.instance(), + cryptoGenerator = directDI.instance(), + base64Service = directDI.instance(), + json = directDI.instance(), + httpClient = directDI.instance(), + ) + + override fun invoke( + requests: List, + ): IO = requests + .map { request -> + request + .foo() + .flatMap(downloadService::download) + } + .combine(bucket = THREAD_BUCKET_SIZE) + .map { Unit } + + private fun DownloadAttachmentRequest.foo(): IO = when (this) { + is DownloadAttachmentRequest.ByLocalCipherAttachment -> foo() + } + + private fun DownloadAttachmentRequest.ByLocalCipherAttachment.foo() = getLatestAttachmentData( + localCipherId = localCipherId, + remoteCipherId = remoteCipherId, + attachmentId = attachmentId, + ) + .map { data -> + DownloadAttachmentRequestData( + localCipherId = localCipherId, + remoteCipherId = remoteCipherId, + attachmentId = attachmentId, + // data + url = data.url, + urlIsOneTime = data.urlIsOneTime, + name = data.name, + encryptionKey = data.encryptionKey, + ) + } + + private class AttachmentData( + val url: String, + val urlIsOneTime: Boolean, + val name: String, + val encryptionKey: ByteArray, + ) + + private fun getLatestAttachmentData( + localCipherId: String, + remoteCipherId: String?, + attachmentId: String, + ): IO = ioEffect { + val cipher = cipherRepository.getById(id = localCipherId).bind() + requireNotNull(cipher) + requireNotNull(remoteCipherId) // can only get attachment info from remote cipher + // Check if actual remote cipher ID matches given + // remote cipher ID. + require(cipher.service.remote?.id == remoteCipherId) + + val attachment = cipher.attachments + .asSequence() + .mapNotNull { it as? BitwardenCipher.Attachment.Remote } + .firstOrNull { it.id == attachmentId } + requireNotNull(attachment) + + val accountId = AccountId(cipher.accountId) + val token = tokenRepository.getById(id = accountId).bind() + requireNotNull(token) + val profile = profileRepository.getById(id = accountId).toIO().bind() + requireNotNull(profile) + val organizations = organizationRepository.getByAccountId(id = accountId).bind() + + // Build cryptography model. + val builder = BitwardenCrImpl( + cipherEncryptor = cipherEncryptor, + cryptoGenerator = cryptoGenerator, + base64Service = base64Service, + ).apply { + // We need user keys to decrypt the + // profile key. + appendUserToken( + encKey = base64Service.decode(token.key.encryptionKeyBase64), + macKey = base64Service.decode(token.key.macKeyBase64), + ) + appendProfileToken2( + keyData = base64Service.decode(profile.keyBase64), + privateKey = base64Service.decode(profile.privateKeyBase64), + ) + + organizations.forEach { organization -> + appendOrganizationToken2( + id = organization.organizationId, + keyData = base64Service.decode(organization.keyBase64), + ) + } + } + val cr = builder.build() + val envEncryptionType = CipherEncryptor.Type.AesCbc256_HmacSha256_B64 + val organizationId: String? = cipher.organizationId + val env = if (organizationId != null) { + val key = BitwardenCrKey.OrganizationToken(organizationId) + BitwardenCrCta.BitwardenCrCtaEnv( + key = key, + encryptionType = envEncryptionType, + ) + } else { + val key = BitwardenCrKey.UserToken + BitwardenCrCta.BitwardenCrCtaEnv( + key = key, + encryptionType = envEncryptionType, + ) + } + val cta = cr.cta(env, BitwardenCrCta.Mode.DECRYPT) + + // + kotlin.runCatching { + val entity = withRefreshableAccessToken( + base64Service = base64Service, + httpClient = httpClient, + json = json, + db = databaseManager, + user = token, + ) { latestUser -> + val accessToken = requireNotNull(latestUser.token?.accessToken) + latestUser.env.back().api + .ciphers.focus(id = remoteCipherId) + .attachments.focus(id = attachmentId) + .get( + httpClient = httpClient, + env = latestUser.env.back(), + token = accessToken, + ) + } + val model = BitwardenCipher.Attachment + .encrypted(attachment = entity) + .transform(crypto = cta) + AttachmentData( + url = requireNotNull(model.url), + urlIsOneTime = true, + name = model.fileName, + encryptionKey = base64Service.decode(model.keyBase64!!), + ) + }.getOrElse { + AttachmentData( + url = requireNotNull(attachment.url), + urlIsOneTime = false, + name = attachment.fileName, + encryptionKey = base64Service.decode(attachment.keyBase64!!), + ) + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl.kt new file mode 100644 index 00000000..fdf54433 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GenerateMasterHashUseCaseImpl.kt @@ -0,0 +1,46 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.io.map +import com.artemchep.keyguard.common.model.MasterPassword +import com.artemchep.keyguard.common.model.MasterPasswordHash +import com.artemchep.keyguard.common.model.MasterPasswordSalt +import com.artemchep.keyguard.common.service.crypto.CryptoGenerator +import com.artemchep.keyguard.common.usecase.GenerateMasterHashUseCase +import kotlinx.coroutines.Dispatchers +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class GenerateMasterHashUseCaseImpl( + private val cryptoGenerator: CryptoGenerator, +) : GenerateMasterHashUseCase { + companion object { + // Should be minimum 10k, as per + // https://pages.nist.gov/800-63-3/sp800-63b.html#sec5 + private const val HASH_ITERATIONS = 100000 + } + + constructor(directDI: DirectDI) : this( + cryptoGenerator = directDI.instance(), + ) + + override fun invoke( + password: MasterPassword, + salt: MasterPasswordSalt, + ): IO = ioEffect(Dispatchers.Default) { + encode( + password = password.byteArray, + salt = salt.byteArray, + ) + }.map(::MasterPasswordHash) + + private fun encode( + password: ByteArray, + salt: ByteArray, + ) = cryptoGenerator.pbkdf2( + seed = password, + salt = salt, + iterations = HASH_ITERATIONS, + ) +} \ No newline at end of file diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl.kt new file mode 100644 index 00000000..8aa3a2ef --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GenerateMasterKeyUseCaseImpl.kt @@ -0,0 +1,46 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.io.map +import com.artemchep.keyguard.common.model.MasterKey +import com.artemchep.keyguard.common.model.MasterPassword +import com.artemchep.keyguard.common.model.MasterPasswordHash +import com.artemchep.keyguard.common.service.crypto.CryptoGenerator +import com.artemchep.keyguard.common.usecase.GenerateMasterKeyUseCase +import kotlinx.coroutines.Dispatchers +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class GenerateMasterKeyUseCaseImpl( + private val cryptoGenerator: CryptoGenerator, +) : GenerateMasterKeyUseCase { + companion object { + // Should be minimum 10k, as per + // https://pages.nist.gov/800-63-3/sp800-63b.html#sec5 + private const val HASH_ITERATIONS = 10000 + } + + constructor(directDI: DirectDI) : this( + cryptoGenerator = directDI.instance(), + ) + + override fun invoke( + password: MasterPassword, + salt: MasterPasswordHash, + ): IO = ioEffect(Dispatchers.Default) { + encode( + password = password.byteArray, + salt = salt.byteArray, + ) + }.map(::MasterKey) + + private fun encode( + password: ByteArray, + salt: ByteArray, + ) = cryptoGenerator.pbkdf2( + seed = password, + salt = salt, + iterations = HASH_ITERATIONS, + ) +} \ No newline at end of file diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl.kt new file mode 100644 index 00000000..02b87272 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GenerateMasterSaltUseCaseImpl.kt @@ -0,0 +1,28 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.io.map +import com.artemchep.keyguard.common.model.MasterPasswordSalt +import com.artemchep.keyguard.common.service.crypto.CryptoGenerator +import com.artemchep.keyguard.common.usecase.GenerateMasterSaltUseCase +import kotlinx.coroutines.Dispatchers +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class GenerateMasterSaltUseCaseImpl( + private val cryptoGenerator: CryptoGenerator, +) : GenerateMasterSaltUseCase { + companion object { + private const val SALT_SIZE_BYTES = 64 + } + + constructor(directDI: DirectDI) : this( + cryptoGenerator = directDI.instance(), + ) + + override fun invoke(): IO = ioEffect(Dispatchers.Default) { + cryptoGenerator + .seed(length = SALT_SIZE_BYTES) + }.map(::MasterPasswordSalt) +} \ No newline at end of file diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl.kt new file mode 100644 index 00000000..b393589b --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetAccountStatusImpl.kt @@ -0,0 +1,95 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.model.DAccountStatus +import com.artemchep.keyguard.common.model.DMeta +import com.artemchep.keyguard.common.service.permission.Permission +import com.artemchep.keyguard.common.service.permission.PermissionService +import com.artemchep.keyguard.common.service.permission.PermissionState +import com.artemchep.keyguard.common.usecase.GetAccountStatus +import com.artemchep.keyguard.common.usecase.GetAccounts +import com.artemchep.keyguard.common.usecase.GetCiphers +import com.artemchep.keyguard.common.usecase.GetFolders +import com.artemchep.keyguard.common.usecase.GetMetas +import com.artemchep.keyguard.common.util.flow.combineToList +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.map +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class GetAccountStatusImpl( + private val permissionService: PermissionService, + private val getAccounts: GetAccounts, + private val getMetas: GetMetas, + private val getCiphers: GetCiphers, + private val getFolders: GetFolders, +) : GetAccountStatus { + private val importantPermissions = listOf( + Permission.POST_NOTIFICATIONS, + ) + + constructor(directDI: DirectDI) : this( + permissionService = directDI.instance(), + getAccounts = directDI.instance(), + getMetas = directDI.instance(), + getCiphers = directDI.instance(), + getFolders = directDI.instance(), + ) + + override fun invoke(): Flow { + val hasFailureFlow = kotlin.run { + val m = getMetas() + .map { metas -> + // If any of the account has failed to sync, then we report + // it as an error. + metas.count { it.lastSyncResult is DMeta.LastSyncResult.Failure } + } + .distinctUntilChanged() + val c = getCiphers() + .map { + it.count { it.hasError } + } + val f = getFolders() + .map { + it.count { it.hasError } + } + combine(c, f, m) { a, b, c -> a + b + c } + } + val hasPendingFlow = kotlin.run { + val c = getCiphers() + .map { + it.count { !it.synced } + } + val f = getFolders() + .map { + it.count { !it.synced } + } + combine(c, f) { a, b -> a + b } + } + + val pendingPermissionsFlow = importantPermissions + .map { permission -> + permissionService + .getState(permission) + } + .combineToList() + .map { permissionStates -> + permissionStates + .filterIsInstance() + } + return combine( + hasFailureFlow, + hasPendingFlow, + pendingPermissionsFlow, + ) { errorCount, pendingCount, pendingPermissions -> + DAccountStatus( + error = DAccountStatus.Error(errorCount) + .takeIf { errorCount > 0 }, + pending = DAccountStatus.Pending(pendingCount) + .takeIf { pendingCount > 0 }, + pendingPermissions = pendingPermissions, + ) + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetAllowScreenshotsImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetAllowScreenshotsImpl.kt new file mode 100644 index 00000000..14dd42f7 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetAllowScreenshotsImpl.kt @@ -0,0 +1,20 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.service.settings.SettingsReadRepository +import com.artemchep.keyguard.common.usecase.GetAllowScreenshots +import kotlinx.coroutines.flow.distinctUntilChanged +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class GetAllowScreenshotsImpl( + settingsReadRepository: SettingsReadRepository, +) : GetAllowScreenshots { + private val sharedFlow = settingsReadRepository.getAllowScreenshots() + .distinctUntilChanged() + + constructor(directDI: DirectDI) : this( + settingsReadRepository = directDI.instance(), + ) + + override fun invoke() = sharedFlow +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetAllowTwoPanelLayoutInLandscapeImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetAllowTwoPanelLayoutInLandscapeImpl.kt new file mode 100644 index 00000000..4443e7f3 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetAllowTwoPanelLayoutInLandscapeImpl.kt @@ -0,0 +1,26 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.service.settings.SettingsReadRepository +import com.artemchep.keyguard.common.usecase.GetAllowTwoPanelLayoutInLandscape +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.stateIn +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class GetAllowTwoPanelLayoutInLandscapeImpl( + settingsReadRepository: SettingsReadRepository, +) : GetAllowTwoPanelLayoutInLandscape { + private val sharedFlow = settingsReadRepository.getAllowTwoPanelLayoutInLandscape() + .stateIn( + scope = GlobalScope, + started = SharingStarted.Eagerly, + initialValue = true, + ) + + constructor(directDI: DirectDI) : this( + settingsReadRepository = directDI.instance(), + ) + + override fun invoke() = sharedFlow +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetAllowTwoPanelLayoutInPortraitImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetAllowTwoPanelLayoutInPortraitImpl.kt new file mode 100644 index 00000000..7f09e25f --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetAllowTwoPanelLayoutInPortraitImpl.kt @@ -0,0 +1,26 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.service.settings.SettingsReadRepository +import com.artemchep.keyguard.common.usecase.GetAllowTwoPanelLayoutInPortrait +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.stateIn +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class GetAllowTwoPanelLayoutInPortraitImpl( + settingsReadRepository: SettingsReadRepository, +) : GetAllowTwoPanelLayoutInPortrait { + private val sharedFlow = settingsReadRepository.getAllowTwoPanelLayoutInPortrait() + .stateIn( + scope = GlobalScope, + started = SharingStarted.Eagerly, + initialValue = true, + ) + + constructor(directDI: DirectDI) : this( + settingsReadRepository = directDI.instance(), + ) + + override fun invoke() = sharedFlow +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetAppBuildTypeImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetAppBuildTypeImpl.kt new file mode 100644 index 00000000..da971d43 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetAppBuildTypeImpl.kt @@ -0,0 +1,15 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.build.BuildKonfig +import com.artemchep.keyguard.common.usecase.GetAppBuildType +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.flowOf +import org.kodein.di.DirectDI + +class GetAppBuildTypeImpl( +) : GetAppBuildType { + constructor(directDI: DirectDI) : this( + ) + + override fun invoke(): Flow = flowOf(BuildKonfig.buildType.lowercase()) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetAppIconsImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetAppIconsImpl.kt new file mode 100644 index 00000000..d9fd0864 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetAppIconsImpl.kt @@ -0,0 +1,20 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.service.settings.SettingsReadRepository +import com.artemchep.keyguard.common.usecase.GetAppIcons +import kotlinx.coroutines.flow.distinctUntilChanged +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class GetAppIconsImpl( + settingsReadRepository: SettingsReadRepository, +) : GetAppIcons { + private val sharedFlow = settingsReadRepository.getAppIcons() + .distinctUntilChanged() + + constructor(directDI: DirectDI) : this( + settingsReadRepository = directDI.instance(), + ) + + override fun invoke() = sharedFlow +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetAppVersionCode.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetAppVersionCode.kt new file mode 100644 index 00000000..a238690c --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetAppVersionCode.kt @@ -0,0 +1,13 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.build.BuildKonfig +import com.artemchep.keyguard.common.usecase.GetAppVersionCode +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.flowOf +import org.kodein.di.DirectDI + +class GetAppVersionCodeImpl() : GetAppVersionCode { + constructor(directDI: DirectDI) : this() + + override fun invoke(): Flow = flowOf(BuildKonfig.versionCode) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetAppVersionImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetAppVersionImpl.kt new file mode 100644 index 00000000..99d7d1b6 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetAppVersionImpl.kt @@ -0,0 +1,30 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.usecase.GetAppBuildType +import com.artemchep.keyguard.common.usecase.GetAppVersion +import com.artemchep.keyguard.common.usecase.GetAppVersionCode +import com.artemchep.keyguard.common.usecase.GetAppVersionName +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.combine +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class GetAppVersionImpl( + private val getAppBuildType: GetAppBuildType, + private val getAppVersionCode: GetAppVersionCode, + private val getAppVersionName: GetAppVersionName, +) : GetAppVersion { + constructor(directDI: DirectDI) : this( + getAppBuildType = directDI.instance(), + getAppVersionCode = directDI.instance(), + getAppVersionName = directDI.instance(), + ) + + override fun invoke(): Flow = combine( + getAppBuildType(), + getAppVersionCode(), + getAppVersionName(), + ) { buildType, versionCode, versionName -> + "$versionName-$versionCode.$buildType" + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetAppVersionName.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetAppVersionName.kt new file mode 100644 index 00000000..423a6b88 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetAppVersionName.kt @@ -0,0 +1,13 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.build.BuildKonfig +import com.artemchep.keyguard.common.usecase.GetAppVersionName +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.flowOf +import org.kodein.di.DirectDI + +class GetAppVersionNameImpl() : GetAppVersionName { + constructor(directDI: DirectDI) : this() + + override fun invoke(): Flow = flowOf(BuildKonfig.versionName) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetAutofillCopyTotpImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetAutofillCopyTotpImpl.kt new file mode 100644 index 00000000..56bf114f --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetAutofillCopyTotpImpl.kt @@ -0,0 +1,20 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.service.settings.SettingsReadRepository +import com.artemchep.keyguard.common.usecase.GetAutofillCopyTotp +import kotlinx.coroutines.flow.distinctUntilChanged +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class GetAutofillCopyTotpImpl( + settingsReadRepository: SettingsReadRepository, +) : GetAutofillCopyTotp { + private val sharedFlow = settingsReadRepository.getAutofillCopyTotp() + .distinctUntilChanged() + + constructor(directDI: DirectDI) : this( + settingsReadRepository = directDI.instance(), + ) + + override fun invoke() = sharedFlow +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetAutofillInlineSuggestionsImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetAutofillInlineSuggestionsImpl.kt new file mode 100644 index 00000000..23a16535 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetAutofillInlineSuggestionsImpl.kt @@ -0,0 +1,20 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.service.settings.SettingsReadRepository +import com.artemchep.keyguard.common.usecase.GetAutofillInlineSuggestions +import kotlinx.coroutines.flow.distinctUntilChanged +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class GetAutofillInlineSuggestionsImpl( + settingsReadRepository: SettingsReadRepository, +) : GetAutofillInlineSuggestions { + private val sharedFlow = settingsReadRepository.getAutofillInlineSuggestions() + .distinctUntilChanged() + + constructor(directDI: DirectDI) : this( + settingsReadRepository = directDI.instance(), + ) + + override fun invoke() = sharedFlow +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetAutofillManualSelectionImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetAutofillManualSelectionImpl.kt new file mode 100644 index 00000000..e7faa1f8 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetAutofillManualSelectionImpl.kt @@ -0,0 +1,20 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.service.settings.SettingsReadRepository +import com.artemchep.keyguard.common.usecase.GetAutofillManualSelection +import kotlinx.coroutines.flow.distinctUntilChanged +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class GetAutofillManualSelectionImpl( + settingsReadRepository: SettingsReadRepository, +) : GetAutofillManualSelection { + private val sharedFlow = settingsReadRepository.getAutofillManualSelection() + .distinctUntilChanged() + + constructor(directDI: DirectDI) : this( + settingsReadRepository = directDI.instance(), + ) + + override fun invoke() = sharedFlow +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetAutofillRespectAutofillOffImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetAutofillRespectAutofillOffImpl.kt new file mode 100644 index 00000000..402265f7 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetAutofillRespectAutofillOffImpl.kt @@ -0,0 +1,20 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.service.settings.SettingsReadRepository +import com.artemchep.keyguard.common.usecase.GetAutofillRespectAutofillOff +import kotlinx.coroutines.flow.distinctUntilChanged +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class GetAutofillRespectAutofillOffImpl( + settingsReadRepository: SettingsReadRepository, +) : GetAutofillRespectAutofillOff { + private val sharedFlow = settingsReadRepository.getAutofillRespectAutofillOff() + .distinctUntilChanged() + + constructor(directDI: DirectDI) : this( + settingsReadRepository = directDI.instance(), + ) + + override fun invoke() = sharedFlow +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetAutofillSaveRequestImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetAutofillSaveRequestImpl.kt new file mode 100644 index 00000000..dca29c16 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetAutofillSaveRequestImpl.kt @@ -0,0 +1,29 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.service.settings.SettingsReadRepository +import com.artemchep.keyguard.common.usecase.GetAutofillSaveRequest +import com.artemchep.keyguard.common.usecase.GetCanWrite +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.distinctUntilChanged +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class GetAutofillSaveRequestImpl( + settingsReadRepository: SettingsReadRepository, + private val getCanWrite: GetCanWrite, +) : GetAutofillSaveRequest { + private val sharedFlow = settingsReadRepository.getAutofillSaveRequest() + .distinctUntilChanged() + + constructor(directDI: DirectDI) : this( + settingsReadRepository = directDI.instance(), + getCanWrite = directDI.instance(), + ) + + override fun invoke() = combine( + sharedFlow, + getCanWrite(), + ) { saveRequest, canWrite -> + saveRequest && canWrite + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetAutofillSaveUriImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetAutofillSaveUriImpl.kt new file mode 100644 index 00000000..8fa61161 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetAutofillSaveUriImpl.kt @@ -0,0 +1,29 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.service.settings.SettingsReadRepository +import com.artemchep.keyguard.common.usecase.GetAutofillSaveUri +import com.artemchep.keyguard.common.usecase.GetCanWrite +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.distinctUntilChanged +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class GetAutofillSaveUriImpl( + settingsReadRepository: SettingsReadRepository, + private val getCanWrite: GetCanWrite, +) : GetAutofillSaveUri { + private val sharedFlow = settingsReadRepository.getAutofillSaveUri() + .distinctUntilChanged() + + constructor(directDI: DirectDI) : this( + settingsReadRepository = directDI.instance(), + getCanWrite = directDI.instance(), + ) + + override fun invoke() = combine( + sharedFlow, + getCanWrite(), + ) { saveRequest, canWrite -> + saveRequest && canWrite + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetBiometricTimeoutImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetBiometricTimeoutImpl.kt new file mode 100644 index 00000000..7bcf6430 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetBiometricTimeoutImpl.kt @@ -0,0 +1,30 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.service.settings.SettingsReadRepository +import com.artemchep.keyguard.common.usecase.GetBiometricTimeout +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.map +import org.kodein.di.DirectDI +import org.kodein.di.instance +import kotlin.time.Duration + +class GetBiometricTimeoutImpl( + settingsReadRepository: SettingsReadRepository, +) : GetBiometricTimeout { + companion object { + private val DEFAULT_DURATION = with(Duration) { 14L.days } + } + + private val sharedFlow = settingsReadRepository.getBiometricTimeout() + .map { duration -> + duration ?: DEFAULT_DURATION + } + .distinctUntilChanged() + + constructor(directDI: DirectDI) : this( + settingsReadRepository = directDI.instance(), + ) + + override fun invoke(): Flow = sharedFlow +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetBiometricTimeoutVariantsImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetBiometricTimeoutVariantsImpl.kt new file mode 100644 index 00000000..da195d89 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetBiometricTimeoutVariantsImpl.kt @@ -0,0 +1,27 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.usecase.GetBiometricTimeoutVariants +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.flowOf +import org.kodein.di.DirectDI +import kotlin.time.Duration + +class GetBiometricTimeoutVariantsImpl() : GetBiometricTimeoutVariants { + companion object { + private val DEFAULT_DURATION_VARIANTS + get() = with(Duration) { + listOf( + ZERO, + 8L.hours, + 1L.days, + 7L.days, + 14L.days, + INFINITE, + ) + } + } + + constructor(directDI: DirectDI) : this() + + override fun invoke(): Flow> = flowOf(DEFAULT_DURATION_VARIANTS) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetCachePremiumImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetCachePremiumImpl.kt new file mode 100644 index 00000000..c8b03782 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetCachePremiumImpl.kt @@ -0,0 +1,21 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.service.settings.SettingsReadRepository +import com.artemchep.keyguard.common.usecase.GetCachePremium +import kotlinx.coroutines.flow.distinctUntilChanged +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class GetCachePremiumImpl( + settingsReadRepository: SettingsReadRepository, +) : GetCachePremium { + private val sharedFlow = settingsReadRepository + .getCachePremium() + .distinctUntilChanged() + + constructor(directDI: DirectDI) : this( + settingsReadRepository = directDI.instance(), + ) + + override fun invoke() = sharedFlow +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetCanAddAccountImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetCanAddAccountImpl.kt new file mode 100644 index 00000000..4c2a7167 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetCanAddAccountImpl.kt @@ -0,0 +1,29 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.usecase.GetAccounts +import com.artemchep.keyguard.common.usecase.GetCanAddAccount +import com.artemchep.keyguard.common.usecase.GetPurchased +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.map +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class GetCanAddAccountImpl( + private val getPurchased: GetPurchased, + private val getAccounts: GetAccounts, +) : GetCanAddAccount { + constructor(directDI: DirectDI) : this( + getPurchased = directDI.instance(), + getAccounts = directDI.instance(), + ) + + override fun invoke() = combine( + getPurchased(), + getAccounts() + .map { it.isNotEmpty() } + .distinctUntilChanged(), + ) { isPremium, hasAccount -> + isPremium || !hasAccount + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetCanWriteImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetCanWriteImpl.kt new file mode 100644 index 00000000..bb8c6bda --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetCanWriteImpl.kt @@ -0,0 +1,16 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.usecase.GetCanWrite +import com.artemchep.keyguard.common.usecase.GetPurchased +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class GetCanWriteImpl( + private val getPurchased: GetPurchased, +) : GetCanWrite { + constructor(directDI: DirectDI) : this( + getPurchased = directDI.instance(), + ) + + override fun invoke() = getPurchased() +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetCanWriteStub.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetCanWriteStub.kt new file mode 100644 index 00000000..92fb22f9 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetCanWriteStub.kt @@ -0,0 +1,11 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.usecase.GetCanWrite +import kotlinx.coroutines.flow.flowOf +import org.kodein.di.DirectDI + +class GetCanWriteStub() : GetCanWrite { + constructor(directDI: DirectDI) : this() + + override fun invoke() = flowOf(false) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetCheckPwnedPasswordsImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetCheckPwnedPasswordsImpl.kt new file mode 100644 index 00000000..066258f7 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetCheckPwnedPasswordsImpl.kt @@ -0,0 +1,20 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.service.settings.SettingsReadRepository +import com.artemchep.keyguard.common.usecase.GetCheckPwnedPasswords +import kotlinx.coroutines.flow.distinctUntilChanged +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class GetCheckPwnedPasswordsImpl( + settingsReadRepository: SettingsReadRepository, +) : GetCheckPwnedPasswords { + private val sharedFlow = settingsReadRepository.getCheckPwnedPasswords() + .distinctUntilChanged() + + constructor(directDI: DirectDI) : this( + settingsReadRepository = directDI.instance(), + ) + + override fun invoke() = sharedFlow +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetCheckPwnedServicesImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetCheckPwnedServicesImpl.kt new file mode 100644 index 00000000..60d6e6ee --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetCheckPwnedServicesImpl.kt @@ -0,0 +1,20 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.service.settings.SettingsReadRepository +import com.artemchep.keyguard.common.usecase.GetCheckPwnedServices +import kotlinx.coroutines.flow.distinctUntilChanged +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class GetCheckPwnedServicesImpl( + settingsReadRepository: SettingsReadRepository, +) : GetCheckPwnedServices { + private val sharedFlow = settingsReadRepository.getCheckPwnedServices() + .distinctUntilChanged() + + constructor(directDI: DirectDI) : this( + settingsReadRepository = directDI.instance(), + ) + + override fun invoke() = sharedFlow +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetCheckTwoFAImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetCheckTwoFAImpl.kt new file mode 100644 index 00000000..48ee2388 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetCheckTwoFAImpl.kt @@ -0,0 +1,20 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.service.settings.SettingsReadRepository +import com.artemchep.keyguard.common.usecase.GetCheckTwoFA +import kotlinx.coroutines.flow.distinctUntilChanged +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class GetCheckTwoFAImpl( + settingsReadRepository: SettingsReadRepository, +) : GetCheckTwoFA { + private val sharedFlow = settingsReadRepository.getCheckTwoFA() + .distinctUntilChanged() + + constructor(directDI: DirectDI) : this( + settingsReadRepository = directDI.instance(), + ) + + override fun invoke() = sharedFlow +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetClipboardAutoClearImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetClipboardAutoClearImpl.kt new file mode 100644 index 00000000..ad7799ab --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetClipboardAutoClearImpl.kt @@ -0,0 +1,30 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.service.settings.SettingsReadRepository +import com.artemchep.keyguard.common.usecase.GetClipboardAutoClear +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.map +import org.kodein.di.DirectDI +import org.kodein.di.instance +import kotlin.time.Duration + +class GetClipboardAutoClearImpl( + settingsReadRepository: SettingsReadRepository, +) : GetClipboardAutoClear { + companion object { + private val DEFAULT_DURATION = with(Duration) { 1L.minutes } + } + + private val sharedFlow = settingsReadRepository.getClipboardClearDelay() + .map { duration -> + duration ?: DEFAULT_DURATION + } + .distinctUntilChanged() + + constructor(directDI: DirectDI) : this( + settingsReadRepository = directDI.instance(), + ) + + override fun invoke(): Flow = sharedFlow +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetClipboardAutoClearVariantsImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetClipboardAutoClearVariantsImpl.kt new file mode 100644 index 00000000..d9fe4958 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetClipboardAutoClearVariantsImpl.kt @@ -0,0 +1,23 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.usecase.GetClipboardAutoClearVariants +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.flowOf +import org.kodein.di.DirectDI +import kotlin.time.Duration + +class GetClipboardAutoClearVariantsImpl() : GetClipboardAutoClearVariants { + companion object { + private val DEFAULT_DURATION_VARIANTS + get() = with(Duration) { + listOf( + 5L.minutes, + INFINITE, + ) + } + } + + constructor(directDI: DirectDI) : this() + + override fun invoke(): Flow> = flowOf(DEFAULT_DURATION_VARIANTS) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetClipboardAutoRefreshImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetClipboardAutoRefreshImpl.kt new file mode 100644 index 00000000..64144c84 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetClipboardAutoRefreshImpl.kt @@ -0,0 +1,30 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.service.settings.SettingsReadRepository +import com.artemchep.keyguard.common.usecase.GetClipboardAutoRefresh +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.map +import org.kodein.di.DirectDI +import org.kodein.di.instance +import kotlin.time.Duration + +class GetClipboardAutoRefreshImpl( + settingsReadRepository: SettingsReadRepository, +) : GetClipboardAutoRefresh { + companion object { + private val DEFAULT_DURATION = with(Duration) { 30L.seconds } + } + + private val sharedFlow = settingsReadRepository.getClipboardUpdateDuration() + .map { duration -> + duration ?: DEFAULT_DURATION + } + .distinctUntilChanged() + + constructor(directDI: DirectDI) : this( + settingsReadRepository = directDI.instance(), + ) + + override fun invoke(): Flow = sharedFlow +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetClipboardAutoRefreshVariantsImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetClipboardAutoRefreshVariantsImpl.kt new file mode 100644 index 00000000..4f12ed22 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetClipboardAutoRefreshVariantsImpl.kt @@ -0,0 +1,25 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.usecase.GetClipboardAutoRefreshVariants +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.flowOf +import org.kodein.di.DirectDI +import kotlin.time.Duration + +class GetClipboardAutoRefreshVariantsImpl() : GetClipboardAutoRefreshVariants { + companion object { + private val DEFAULT_DURATION_VARIANTS + get() = with(Duration) { + listOf( + ZERO, + 30L.seconds, + 1L.minutes, + 2L.minutes, + ) + } + } + + constructor(directDI: DirectDI) : this() + + override fun invoke(): Flow> = flowOf(DEFAULT_DURATION_VARIANTS) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetColorsImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetColorsImpl.kt new file mode 100644 index 00000000..b05f1e32 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetColorsImpl.kt @@ -0,0 +1,22 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.model.AppColors +import com.artemchep.keyguard.common.service.settings.SettingsReadRepository +import com.artemchep.keyguard.common.usecase.GetColors +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.distinctUntilChanged +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class GetColorsImpl( + settingsReadRepository: SettingsReadRepository, +) : GetColors { + private val sharedFlow = settingsReadRepository.getColors() + .distinctUntilChanged() + + constructor(directDI: DirectDI) : this( + settingsReadRepository = directDI.instance(), + ) + + override fun invoke(): Flow = sharedFlow +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetColorsVariantsImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetColorsVariantsImpl.kt new file mode 100644 index 00000000..57707673 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetColorsVariantsImpl.kt @@ -0,0 +1,18 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.model.AppColors +import com.artemchep.keyguard.common.usecase.GetColorsVariants +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.flowOf +import org.kodein.di.DirectDI + +class GetColorsVariantsImpl() : GetColorsVariants { + constructor(directDI: DirectDI) : this() + + private val variants = mutableListOf().apply { + this += null + this += AppColors.entries + } + + override fun invoke(): Flow> = flowOf(variants) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetConcealFieldsImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetConcealFieldsImpl.kt new file mode 100644 index 00000000..dfe52533 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetConcealFieldsImpl.kt @@ -0,0 +1,20 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.service.settings.SettingsReadRepository +import com.artemchep.keyguard.common.usecase.GetConcealFields +import kotlinx.coroutines.flow.distinctUntilChanged +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class GetConcealFieldsImpl( + settingsReadRepository: SettingsReadRepository, +) : GetConcealFields { + private val sharedFlow = settingsReadRepository.getConcealFields() + .distinctUntilChanged() + + constructor(directDI: DirectDI) : this( + settingsReadRepository = directDI.instance(), + ) + + override fun invoke() = sharedFlow +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetDebugPremiumImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetDebugPremiumImpl.kt new file mode 100644 index 00000000..d46fb53e --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetDebugPremiumImpl.kt @@ -0,0 +1,20 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.service.settings.SettingsReadRepository +import com.artemchep.keyguard.common.usecase.GetDebugPremium +import kotlinx.coroutines.flow.distinctUntilChanged +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class GetDebugPremiumImpl( + settingsReadRepository: SettingsReadRepository, +) : GetDebugPremium { + private val sharedFlow = settingsReadRepository.getDebugPremium() + .distinctUntilChanged() + + constructor(directDI: DirectDI) : this( + settingsReadRepository = directDI.instance(), + ) + + override fun invoke() = sharedFlow +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetDebugScreenDelayImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetDebugScreenDelayImpl.kt new file mode 100644 index 00000000..17bd8fb5 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetDebugScreenDelayImpl.kt @@ -0,0 +1,20 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.service.settings.SettingsReadRepository +import com.artemchep.keyguard.common.usecase.GetDebugScreenDelay +import kotlinx.coroutines.flow.distinctUntilChanged +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class GetDebugScreenDelayImpl( + settingsReadRepository: SettingsReadRepository, +) : GetDebugScreenDelay { + private val sharedFlow = settingsReadRepository.getDebugScreenDelay() + .distinctUntilChanged() + + constructor(directDI: DirectDI) : this( + settingsReadRepository = directDI.instance(), + ) + + override fun invoke() = sharedFlow +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetEnvSendUrlImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetEnvSendUrlImpl.kt new file mode 100644 index 00000000..1bd557a7 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetEnvSendUrlImpl.kt @@ -0,0 +1,45 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.effectMap +import com.artemchep.keyguard.common.model.AccountId +import com.artemchep.keyguard.common.model.DSend +import com.artemchep.keyguard.common.service.text.Base64Service +import com.artemchep.keyguard.common.service.text.url +import com.artemchep.keyguard.common.usecase.GetEnvSendUrl +import com.artemchep.keyguard.provider.bitwarden.api.builder.buildSendUrl +import com.artemchep.keyguard.provider.bitwarden.repository.BitwardenTokenRepository +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class GetEnvSendUrlImpl( + private val tokenRepository: BitwardenTokenRepository, + private val base64Service: Base64Service, +) : GetEnvSendUrl { + constructor(directDI: DirectDI) : this( + tokenRepository = directDI.instance(), + base64Service = directDI.instance(), + ) + + override fun invoke( + send: DSend, + ): IO = tokenRepository + .getById(AccountId(send.accountId)) + .effectMap { token -> + val sendBaseUrl = token?.env?.back()?.buildSendUrl() + requireNotNull(sendBaseUrl) { "Failed to get base send url." } + + val sendUrl = buildString { + append(sendBaseUrl) + append(send.accessId) + append('/') + + val key = send.keyBase64 + ?.let(base64Service::url) + if (key != null) { + append(key) + } + } + sendUrl + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetFontImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetFontImpl.kt new file mode 100644 index 00000000..552cd677 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetFontImpl.kt @@ -0,0 +1,22 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.model.AppFont +import com.artemchep.keyguard.common.service.settings.SettingsReadRepository +import com.artemchep.keyguard.common.usecase.GetFont +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.distinctUntilChanged +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class GetFontImpl( + settingsReadRepository: SettingsReadRepository, +) : GetFont { + private val sharedFlow = settingsReadRepository.getFont() + .distinctUntilChanged() + + constructor(directDI: DirectDI) : this( + settingsReadRepository = directDI.instance(), + ) + + override fun invoke(): Flow = sharedFlow +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetFontVariantsImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetFontVariantsImpl.kt new file mode 100644 index 00000000..1900d415 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetFontVariantsImpl.kt @@ -0,0 +1,18 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.model.AppFont +import com.artemchep.keyguard.common.usecase.GetFontVariants +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.flowOf +import org.kodein.di.DirectDI + +class GetFontVariantsImpl() : GetFontVariants { + constructor(directDI: DirectDI) : this() + + private val variants = mutableListOf().apply { + this += null + this += AppFont.entries + } + + override fun invoke(): Flow> = flowOf(variants) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetGeneratorHistoryImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetGeneratorHistoryImpl.kt new file mode 100644 index 00000000..c27c3bbc --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetGeneratorHistoryImpl.kt @@ -0,0 +1,18 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.android.downloader.journal.GeneratorHistoryRepository +import com.artemchep.keyguard.common.usecase.GetGeneratorHistory +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class GetGeneratorHistoryImpl( + generatorHistoryRepository: GeneratorHistoryRepository, +) : GetGeneratorHistory { + private val sharedFlow = generatorHistoryRepository.get() + + constructor(directDI: DirectDI) : this( + generatorHistoryRepository = directDI.instance(), + ) + + override fun invoke() = sharedFlow +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetGravatarUrlImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetGravatarUrlImpl.kt new file mode 100644 index 00000000..dda38af7 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetGravatarUrlImpl.kt @@ -0,0 +1,42 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.service.crypto.CryptoGenerator +import com.artemchep.keyguard.common.usecase.GetGravatarUrl +import com.artemchep.keyguard.feature.favicon.GravatarUrl +import io.ktor.util.hex +import kotlinx.coroutines.Dispatchers +import org.kodein.di.DirectDI +import org.kodein.di.instance +import java.util.Locale + +class GetGravatarUrlImpl( + private val cryptoGenerator: CryptoGenerator, +) : GetGravatarUrl { + private val emailPlusAddressingRegex = "\\+.+(?=@)".toRegex() + + constructor(directDI: DirectDI) : this( + cryptoGenerator = directDI.instance(), + ) + + override fun invoke( + email: String, + ): IO = ioEffect(Dispatchers.Default) { + val emailHash = run { + // https://en.gravatar.com/site/implement/hash/ + val sanitizedEmail = transformEmail(email) + val sanitizedEmailBytes = sanitizedEmail.toByteArray() + cryptoGenerator.hashMd5(sanitizedEmailBytes) + .let(::hex) + } + val gravatarUrl = "https://www.gravatar.com/avatar/$emailHash?s=200&r=pg&d=404" + GravatarUrl(gravatarUrl) + } + + private fun transformEmail(email: String): String = email + .trim() + .replace(emailPlusAddressingRegex, "") + .lowercase(Locale.ENGLISH) + +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetJustDeleteMeByUrlImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetJustDeleteMeByUrlImpl.kt new file mode 100644 index 00000000..596b0cdb --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetJustDeleteMeByUrlImpl.kt @@ -0,0 +1,54 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.effectMap +import com.artemchep.keyguard.common.service.justdeleteme.JustDeleteMeService +import com.artemchep.keyguard.common.service.justdeleteme.JustDeleteMeServiceInfo +import com.artemchep.keyguard.common.usecase.GetJustDeleteMeByUrl +import io.ktor.http.Url +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class GetJustDeleteMeByUrlImpl( + private val justDeleteMeService: JustDeleteMeService, +) : GetJustDeleteMeByUrl { + constructor(directDI: DirectDI) : this( + justDeleteMeService = directDI.instance(), + ) + + override fun invoke( + url: String, + ): IO = justDeleteMeService.get() + .effectMap { list -> + match(url, list) + } + + fun match(url: String, list: List) = kotlin.run { + val host = parseHost(url) + ?: return@run null + val result = list + .firstOrNull { host in it.domains } + result + } + + private fun parseHost(url: String) = if ( + url.startsWith("http://") || + url.startsWith("https://") + ) { + val parsedUri = kotlin.runCatching { + Url(url) + }.getOrElse { + // can not get the domain + null + } + parsedUri + ?.host + // The "www" subdomain is ignored in the database, however + // it's only "www". Other subdomains, such as "photos", + // should be respected. + ?.removePrefix("www.") + } else { + // can not get the domain + null + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetKeepScreenOnImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetKeepScreenOnImpl.kt new file mode 100644 index 00000000..72fc2469 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetKeepScreenOnImpl.kt @@ -0,0 +1,20 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.service.settings.SettingsReadRepository +import com.artemchep.keyguard.common.usecase.GetKeepScreenOn +import kotlinx.coroutines.flow.distinctUntilChanged +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class GetKeepScreenOnImpl( + settingsReadRepository: SettingsReadRepository, +) : GetKeepScreenOn { + private val sharedFlow = settingsReadRepository.getKeepScreenOn() + .distinctUntilChanged() + + constructor(directDI: DirectDI) : this( + settingsReadRepository = directDI.instance(), + ) + + override fun invoke() = sharedFlow +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetLocaleImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetLocaleImpl.kt new file mode 100644 index 00000000..95a87487 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetLocaleImpl.kt @@ -0,0 +1,18 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.service.settings.SettingsReadRepository +import com.artemchep.keyguard.common.usecase.GetLocale +import kotlinx.coroutines.flow.Flow +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class GetLocaleImpl( + private val settingsReadRepository: SettingsReadRepository, +) : GetLocale { + constructor(directDI: DirectDI) : this( + settingsReadRepository = directDI.instance(), + ) + + override fun invoke(): Flow = settingsReadRepository + .getLocale() +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetLocaleVariantsImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetLocaleVariantsImpl.kt new file mode 100644 index 00000000..a4363a04 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetLocaleVariantsImpl.kt @@ -0,0 +1,47 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.usecase.GetLocaleVariants +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.flowOf +import org.kodein.di.DirectDI + +class GetLocaleVariantsImpl() : GetLocaleVariants { + constructor(directDI: DirectDI) : this() + + private val variants = listOf( + null, + "af-ZA", + "ca-ES", + "de-DE", + "es-ES", + "ja-JP", + "no-NO", + "pt-PT", + "sr-SP", + "uk-UA", + "zh-TW", + "ar-SA", + "cs-CZ", + "el-GR", + "fr-FR", + "it-IT", + "ko-KR", + "pl-PL", + "ro-RO", + "sv-SE", + "vi-VN", + "da-DK", + "en-US", + "en-GB", + "fi-FI", + "hu-HU", + "iw-IL", + "nl-NL", + "pt-BR", + "ru-RU", + "tr-TR", + "zh-CN", + ) + + override fun invoke(): Flow> = flowOf(variants) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetMarkdownImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetMarkdownImpl.kt new file mode 100644 index 00000000..58ee3576 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetMarkdownImpl.kt @@ -0,0 +1,20 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.service.settings.SettingsReadRepository +import com.artemchep.keyguard.common.usecase.GetMarkdown +import kotlinx.coroutines.flow.distinctUntilChanged +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class GetMarkdownImpl( + settingsReadRepository: SettingsReadRepository, +) : GetMarkdown { + private val sharedFlow = settingsReadRepository.getMarkdown() + .distinctUntilChanged() + + constructor(directDI: DirectDI) : this( + settingsReadRepository = directDI.instance(), + ) + + override fun invoke() = sharedFlow +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetNavAnimationImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetNavAnimationImpl.kt new file mode 100644 index 00000000..8970f45c --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetNavAnimationImpl.kt @@ -0,0 +1,31 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.model.NavAnimation +import com.artemchep.keyguard.common.service.settings.SettingsReadRepository +import com.artemchep.keyguard.common.usecase.GetNavAnimation +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.stateIn +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class GetNavAnimationImpl( + settingsReadRepository: SettingsReadRepository, +) : GetNavAnimation { + private val sharedFlow = settingsReadRepository.getNavAnimation() + .map { it ?: NavAnimation.default } + .distinctUntilChanged() + .stateIn( + scope = GlobalScope, + started = SharingStarted.Eagerly, + initialValue = NavAnimation.default, + ) + + constructor(directDI: DirectDI) : this( + settingsReadRepository = directDI.instance(), + ) + + override fun invoke() = sharedFlow +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetNavAnimationVariantsImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetNavAnimationVariantsImpl.kt new file mode 100644 index 00000000..f5bf5efb --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetNavAnimationVariantsImpl.kt @@ -0,0 +1,15 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.model.NavAnimation +import com.artemchep.keyguard.common.usecase.GetNavAnimationVariants +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.flowOf +import org.kodein.di.DirectDI + +class GetNavAnimationVariantsImpl() : GetNavAnimationVariants { + constructor(directDI: DirectDI) : this() + + private val variants = NavAnimation.entries + + override fun invoke(): Flow> = flowOf(variants) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetNavLabelImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetNavLabelImpl.kt new file mode 100644 index 00000000..2e8bbb0c --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetNavLabelImpl.kt @@ -0,0 +1,26 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.service.settings.SettingsReadRepository +import com.artemchep.keyguard.common.usecase.GetNavLabel +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.stateIn +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class GetNavLabelImpl( + settingsReadRepository: SettingsReadRepository, +) : GetNavLabel { + private val sharedFlow = settingsReadRepository.getNavLabel() + .stateIn( + scope = GlobalScope, + started = SharingStarted.Eagerly, + initialValue = true, + ) + + constructor(directDI: DirectDI) : this( + settingsReadRepository = directDI.instance(), + ) + + override fun invoke() = sharedFlow +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetOnboardingLastVisitInstantImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetOnboardingLastVisitInstantImpl.kt new file mode 100644 index 00000000..ea9e2700 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetOnboardingLastVisitInstantImpl.kt @@ -0,0 +1,20 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.service.settings.SettingsReadRepository +import com.artemchep.keyguard.common.usecase.GetOnboardingLastVisitInstant +import kotlinx.coroutines.flow.distinctUntilChanged +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class GetOnboardingLastVisitInstantImpl( + settingsReadRepository: SettingsReadRepository, +) : GetOnboardingLastVisitInstant { + private val sharedFlow = settingsReadRepository.getOnboardingLastVisitInstant() + .distinctUntilChanged() + + constructor(directDI: DirectDI) : this( + settingsReadRepository = directDI.instance(), + ) + + override fun invoke() = sharedFlow +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetPasswordImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetPasswordImpl.kt new file mode 100644 index 00000000..4c56843e --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetPasswordImpl.kt @@ -0,0 +1,115 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.io.map +import com.artemchep.keyguard.common.model.GeneratorContext +import com.artemchep.keyguard.common.model.PasswordGeneratorConfig +import com.artemchep.keyguard.common.service.crypto.CryptoGenerator +import com.artemchep.keyguard.common.usecase.GetPassphrase +import com.artemchep.keyguard.common.usecase.GetPassword +import kotlinx.coroutines.Dispatchers +import org.kodein.di.DirectDI +import org.kodein.di.instance +import java.security.SecureRandom +import kotlin.math.absoluteValue + +class GetPasswordImpl( + private val cryptoGenerator: CryptoGenerator, + private val getPassphrase: GetPassphrase, +) : GetPassword { + private val secureRandom by lazy { + SecureRandom() + } + + constructor(directDI: DirectDI) : this( + cryptoGenerator = directDI.instance(), + getPassphrase = directDI.instance(), + ) + + override fun invoke( + context: GeneratorContext, + config: PasswordGeneratorConfig, + ): IO = when (config) { + is PasswordGeneratorConfig.Password -> ioEffect(Dispatchers.Default) { + if ( + config.length < 1 || + config.allChars.isEmpty() + ) { + null + } else { + val output = mutableListOf() + + var curUppercaseMin = 0L + var curLowercaseMin = 0L + var curNumbersMin = 0L + var curSymbolsMin = 0L + do { + var should = false + // uppercase + if (curUppercaseMin < config.uppercaseMin) { + curUppercaseMin++ + should = true + // If possible, then add the symbol. + if (config.uppercaseChars.isNotEmpty()) { + output += config.uppercaseChars.random() + } + } + // lowercase + if (curLowercaseMin < config.lowercaseMin) { + curLowercaseMin++ + should = true + // If possible, then add the symbol. + if (config.lowercaseChars.isNotEmpty()) { + output += config.lowercaseChars.random() + } + } + // numbers + if (curNumbersMin < config.numbersMin) { + curNumbersMin++ + should = true + // If possible, then add the symbol. + if (config.numberChars.isNotEmpty()) { + output += config.numberChars.random() + } + } + // symbols + if (curSymbolsMin < config.symbolsMin) { + curSymbolsMin++ + should = true + // If possible, then add the symbol. + if (config.symbolChars.isNotEmpty()) { + output += config.symbolChars.random() + } + } + } while (should) + + repeat(config.length - output.size) { + output += config.allChars.random() + } + + val r = output + .take(config.length) + .shuffled(secureRandom) + .toCharArray() + String(r) + } + } + + is PasswordGeneratorConfig.Passphrase -> getPassphrase(config) + is PasswordGeneratorConfig.EmailRelay -> { + val cfg = config.config.data + config.emailRelay.generate(context, cfg) + } + + is PasswordGeneratorConfig.Composite -> invoke(context, config.config) + .map { raw -> + raw?.let { config.transform(it) } + } + } + + private fun List.random() = kotlin.run { + val r = cryptoGenerator.random().absoluteValue + this[r.rem(this.size)] + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetProductsImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetProductsImpl.kt new file mode 100644 index 00000000..791a6b82 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetProductsImpl.kt @@ -0,0 +1,16 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.service.subscription.SubscriptionService +import com.artemchep.keyguard.common.usecase.GetProducts +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class GetProductsImpl( + private val subscriptionService: SubscriptionService, +) : GetProducts { + constructor(directDI: DirectDI) : this( + subscriptionService = directDI.instance(), + ) + + override fun invoke() = subscriptionService.products() +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetScreenStateImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetScreenStateImpl.kt new file mode 100644 index 00000000..937778b8 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetScreenStateImpl.kt @@ -0,0 +1,16 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.service.state.StateRepository +import com.artemchep.keyguard.common.usecase.GetScreenState +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class GetScreenStateImpl( + private val stateRepository: StateRepository, +) : GetScreenState { + constructor(directDI: DirectDI) : this( + stateRepository = directDI.instance(), + ) + + override fun invoke(key: String) = stateRepository.get(key) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetShouldRequestAppReviewImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetShouldRequestAppReviewImpl.kt new file mode 100644 index 00000000..c30fa7f5 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetShouldRequestAppReviewImpl.kt @@ -0,0 +1,22 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.usecase.GetCipherOpenedCount +import com.artemchep.keyguard.common.usecase.GetShouldRequestAppReview +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.map +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class GetShouldRequestAppReviewImpl( + private val getCipherOpenedCount: GetCipherOpenedCount, +) : GetShouldRequestAppReview { + constructor(directDI: DirectDI) : this( + getCipherOpenedCount = directDI.instance(), + ) + + // We should ask for the app review after a user opens or fills + // a lot of the ciphers. Such a user is familiar enough with the + // app to give it a full (and hopefully nice) review. + override fun invoke(): Flow = getCipherOpenedCount() + .map { it > 100 } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetSubscriptionsImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetSubscriptionsImpl.kt new file mode 100644 index 00000000..895db476 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetSubscriptionsImpl.kt @@ -0,0 +1,16 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.service.subscription.SubscriptionService +import com.artemchep.keyguard.common.usecase.GetSubscriptions +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class GetSubscriptionsImpl( + private val subscriptionService: SubscriptionService, +) : GetSubscriptions { + constructor(directDI: DirectDI) : this( + subscriptionService = directDI.instance(), + ) + + override fun invoke() = subscriptionService.subscriptions() +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetThemeImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetThemeImpl.kt new file mode 100644 index 00000000..513659ef --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetThemeImpl.kt @@ -0,0 +1,22 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.model.AppTheme +import com.artemchep.keyguard.common.service.settings.SettingsReadRepository +import com.artemchep.keyguard.common.usecase.GetTheme +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.distinctUntilChanged +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class GetThemeImpl( + settingsReadRepository: SettingsReadRepository, +) : GetTheme { + private val sharedFlow = settingsReadRepository.getTheme() + .distinctUntilChanged() + + constructor(directDI: DirectDI) : this( + settingsReadRepository = directDI.instance(), + ) + + override fun invoke(): Flow = sharedFlow +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetThemeUseAmoledDarkImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetThemeUseAmoledDarkImpl.kt new file mode 100644 index 00000000..a49c9621 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetThemeUseAmoledDarkImpl.kt @@ -0,0 +1,21 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.service.settings.SettingsReadRepository +import com.artemchep.keyguard.common.usecase.GetThemeUseAmoledDark +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.distinctUntilChanged +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class GetThemeUseAmoledDarkImpl( + settingsReadRepository: SettingsReadRepository, +) : GetThemeUseAmoledDark { + private val sharedFlow = settingsReadRepository.getThemeUseAmoledDark() + .distinctUntilChanged() + + constructor(directDI: DirectDI) : this( + settingsReadRepository = directDI.instance(), + ) + + override fun invoke(): Flow = sharedFlow +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetThemeVariantsImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetThemeVariantsImpl.kt new file mode 100644 index 00000000..966827d6 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetThemeVariantsImpl.kt @@ -0,0 +1,18 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.model.AppTheme +import com.artemchep.keyguard.common.usecase.GetThemeVariants +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.flowOf +import org.kodein.di.DirectDI + +class GetThemeVariantsImpl() : GetThemeVariants { + constructor(directDI: DirectDI) : this() + + private val variants = mutableListOf().apply { + this += null + this += AppTheme.entries + } + + override fun invoke(): Flow> = flowOf(variants) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetTotpCodeImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetTotpCodeImpl.kt new file mode 100644 index 00000000..9cf4605b --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetTotpCodeImpl.kt @@ -0,0 +1,46 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.model.TotpCode +import com.artemchep.keyguard.common.model.TotpToken +import com.artemchep.keyguard.common.service.totp.TotpService +import com.artemchep.keyguard.common.usecase.GetTotpCode +import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.flow +import kotlinx.datetime.Clock +import org.kodein.di.DirectDI +import org.kodein.di.instance +import kotlin.time.ExperimentalTime + +class GetTotpCodeImpl( + private val totpService: TotpService, +) : GetTotpCode { + constructor(directDI: DirectDI) : this( + totpService = directDI.instance(), + ) + + override fun invoke( + token: TotpToken, + ): Flow = flow { + while (true) { + val now = Clock.System.now() + val code = totpService.generate( + token = token, + timestamp = now, + ) + emit(code) + when (val counter = code.counter) { + is TotpCode.TimeBasedCounter -> { + // Wait for the code to expire, and then + // regenerate it. + val dt = counter.expiration - Clock.System.now() + delay(dt) + } + + is TotpCode.IncrementBasedCounter -> { + break + } + } + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetUseExternalBrowserImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetUseExternalBrowserImpl.kt new file mode 100644 index 00000000..ef6e948a --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetUseExternalBrowserImpl.kt @@ -0,0 +1,20 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.service.settings.SettingsReadRepository +import com.artemchep.keyguard.common.usecase.GetUseExternalBrowser +import kotlinx.coroutines.flow.distinctUntilChanged +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class GetUseExternalBrowserImpl( + settingsReadRepository: SettingsReadRepository, +) : GetUseExternalBrowser { + private val sharedFlow = settingsReadRepository.getUseExternalBrowser() + .distinctUntilChanged() + + constructor(directDI: DirectDI) : this( + settingsReadRepository = directDI.instance(), + ) + + override fun invoke() = sharedFlow +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetVaultLockAfterRebootImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetVaultLockAfterRebootImpl.kt new file mode 100644 index 00000000..fa324e99 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetVaultLockAfterRebootImpl.kt @@ -0,0 +1,30 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.service.settings.SettingsReadRepository +import com.artemchep.keyguard.common.usecase.GetVaultLockAfterReboot +import com.artemchep.keyguard.common.usecase.GetVaultPersist +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.distinctUntilChanged +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class GetVaultLockAfterRebootImpl( + settingsReadRepository: SettingsReadRepository, + getVaultPersist: GetVaultPersist, +) : GetVaultLockAfterReboot { + private val sharedFlow = combine( + getVaultPersist(), + settingsReadRepository.getVaultLockAfterReboot(), + ) { persist, lockAfterReboot -> + lockAfterReboot || !persist + } + .distinctUntilChanged() + + constructor(directDI: DirectDI) : this( + settingsReadRepository = directDI.instance(), + getVaultPersist = directDI.instance(), + ) + + override fun invoke(): Flow = sharedFlow +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetVaultLockAfterScreenOffImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetVaultLockAfterScreenOffImpl.kt new file mode 100644 index 00000000..3820a557 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetVaultLockAfterScreenOffImpl.kt @@ -0,0 +1,29 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.service.settings.SettingsReadRepository +import com.artemchep.keyguard.common.usecase.GetVaultLockAfterScreenOff +import com.artemchep.keyguard.common.usecase.GetVaultPersist +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.distinctUntilChanged +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class GetVaultLockAfterScreenOffImpl( + settingsReadRepository: SettingsReadRepository, + getVaultPersist: GetVaultPersist, +) : GetVaultLockAfterScreenOff { + private val sharedFlow = combine( + getVaultPersist(), + settingsReadRepository.getVaultScreenLock(), + ) { persist, lockAfterScreenOff -> + lockAfterScreenOff && !persist + } + .distinctUntilChanged() + + constructor(directDI: DirectDI) : this( + settingsReadRepository = directDI.instance(), + getVaultPersist = directDI.instance(), + ) + + override fun invoke() = sharedFlow +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetVaultLockAfterTimeoutImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetVaultLockAfterTimeoutImpl.kt new file mode 100644 index 00000000..da92b0e7 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetVaultLockAfterTimeoutImpl.kt @@ -0,0 +1,30 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.service.settings.SettingsReadRepository +import com.artemchep.keyguard.common.usecase.GetVaultLockAfterTimeout +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.map +import org.kodein.di.DirectDI +import org.kodein.di.instance +import kotlin.time.Duration + +class GetVaultLockAfterTimeoutImpl( + settingsReadRepository: SettingsReadRepository, +) : GetVaultLockAfterTimeout { + companion object { + private val DEFAULT_DURATION = with(Duration) { 5L.minutes } + } + + private val sharedFlow = settingsReadRepository.getVaultTimeout() + .map { duration -> + duration ?: DEFAULT_DURATION + } + .distinctUntilChanged() + + constructor(directDI: DirectDI) : this( + settingsReadRepository = directDI.instance(), + ) + + override fun invoke(): Flow = sharedFlow +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetVaultLockAfterTimeoutVariantsImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetVaultLockAfterTimeoutVariantsImpl.kt new file mode 100644 index 00000000..cb2f1f55 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetVaultLockAfterTimeoutVariantsImpl.kt @@ -0,0 +1,29 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.usecase.GetVaultLockAfterTimeoutVariants +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.flowOf +import org.kodein.di.DirectDI +import kotlin.time.Duration + +class GetVaultLockAfterTimeoutVariantsImpl() : GetVaultLockAfterTimeoutVariants { + companion object { + private val DEFAULT_DURATION_VARIANTS + get() = with(Duration) { + listOf( + ZERO, + 1L.minutes, + 5L.minutes, + 15L.minutes, + 30L.minutes, + 1L.hours, + 4L.hours, + INFINITE, + ) + } + } + + constructor(directDI: DirectDI) : this() + + override fun invoke(): Flow> = flowOf(DEFAULT_DURATION_VARIANTS) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetVaultPersistImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetVaultPersistImpl.kt new file mode 100644 index 00000000..3ff294fe --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetVaultPersistImpl.kt @@ -0,0 +1,20 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.service.settings.SettingsReadRepository +import com.artemchep.keyguard.common.usecase.GetVaultPersist +import kotlinx.coroutines.flow.Flow +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class GetVaultPersistImpl( + settingsReadRepository: SettingsReadRepository, +) : GetVaultPersist { + private val sharedFlow = settingsReadRepository + .getVaultPersist() + + constructor(directDI: DirectDI) : this( + settingsReadRepository = directDI.instance(), + ) + + override fun invoke(): Flow = sharedFlow +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl.kt new file mode 100644 index 00000000..59ea43a3 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetVaultSessionImpl.kt @@ -0,0 +1,79 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.model.MasterSession +import com.artemchep.keyguard.common.service.vault.KeyReadWriteRepository +import com.artemchep.keyguard.common.service.vault.SessionReadWriteRepository +import com.artemchep.keyguard.common.usecase.GetVaultSession +import com.artemchep.keyguard.core.session.usecase.createSubDi +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.flatMapLatest +import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.onEach +import kotlinx.coroutines.flow.shareIn +import kotlinx.datetime.Clock +import org.kodein.di.Copy +import org.kodein.di.DI +import org.kodein.di.DirectDI +import org.kodein.di.instance +import org.kodein.di.subDI + +class GetVaultSessionImpl( + private val di: DI, + private val sessionReadWriteRepository: SessionReadWriteRepository, + private val keyReadWriteRepository: KeyReadWriteRepository, +) : GetVaultSession { + companion object { + private const val TAG = "GetVaultSession" + } + + constructor(directDI: DirectDI) : this( + di = directDI.di, + sessionReadWriteRepository = directDI.instance(), + keyReadWriteRepository = directDI.instance(), + ) + + private val sharedFlow = sessionReadWriteRepository.get() + .flatMapLatest { currentSession -> + if (currentSession != null) { + flowOf(currentSession) + } else { + keyReadWriteRepository.get() + .map { persistedSession -> + val newSession = if (persistedSession != null) { + val masterKey = persistedSession.masterKey + val moduleDi = + DI.Module("lalala") { + createSubDi( + masterKey = masterKey, + ) + } + val subDi = + subDI(di, false, Copy.None) { + import(moduleDi) + } + MasterSession.Key( + masterKey = masterKey, + di = subDi, + origin = MasterSession.Key.Persisted, + createdAt = Clock.System.now(), + ) + } else { + MasterSession.Empty() + } + newSession + } + .onEach { + sessionReadWriteRepository.put(it) + } + } + } + .shareIn(GlobalScope, SharingStarted.WhileSubscribed(), replay = 1) + + override val valueOrNull: MasterSession? + get() = sharedFlow.replayCache.firstOrNull() + + override fun invoke(): Flow = sharedFlow +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetWebsiteIconsImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetWebsiteIconsImpl.kt new file mode 100644 index 00000000..01b6f176 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetWebsiteIconsImpl.kt @@ -0,0 +1,20 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.service.settings.SettingsReadRepository +import com.artemchep.keyguard.common.usecase.GetWebsiteIcons +import kotlinx.coroutines.flow.distinctUntilChanged +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class GetWebsiteIconsImpl( + settingsReadRepository: SettingsReadRepository, +) : GetWebsiteIcons { + private val sharedFlow = settingsReadRepository.getWebsiteIcons() + .distinctUntilChanged() + + constructor(directDI: DirectDI) : this( + settingsReadRepository = directDI.instance(), + ) + + override fun invoke() = sharedFlow +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetWriteAccessImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetWriteAccessImpl.kt new file mode 100644 index 00000000..b34a7c3f --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/GetWriteAccessImpl.kt @@ -0,0 +1,20 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.service.settings.SettingsReadRepository +import com.artemchep.keyguard.common.usecase.GetWriteAccess +import kotlinx.coroutines.flow.distinctUntilChanged +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class GetWriteAccessImpl( + settingsReadRepository: SettingsReadRepository, +) : GetWriteAccess { + private val sharedFlow = settingsReadRepository.getWriteAccess() + .distinctUntilChanged() + + constructor(directDI: DirectDI) : this( + settingsReadRepository = directDI.instance(), + ) + + override fun invoke() = sharedFlow +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/MessageHub.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/MessageHub.kt new file mode 100644 index 00000000..24e067dc --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/MessageHub.kt @@ -0,0 +1,52 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.model.ToastMessage +import com.artemchep.keyguard.common.usecase.MessageHub +import com.artemchep.keyguard.common.usecase.ShowMessage +import org.kodein.di.DirectDI +import java.util.UUID + +class MessageHubImpl() : MessageHub, ShowMessage { + constructor(directDI: DirectDI) : this() + + private val state = mutableListOf() + + private class Entry( + val id: String, + val key: String, + val onMessage: (ToastMessage) -> Unit, + ) + + override fun register( + key: String, + onMessage: (ToastMessage) -> Unit, + ): () -> Unit { + val id = UUID.randomUUID().toString() + val entry = Entry( + id = id, + key = key, + onMessage = onMessage, + ) + + state += entry + return { + state -= entry + } + } + + override fun copy( + value: ToastMessage, + target: String?, + ) { + val handler = kotlin.run { + if (target != null) { + return@run state + .maxByOrNull { + it.key.commonPrefixWith(target).length + } + } + null + } ?: state.firstOrNull() + handler?.onMessage?.invoke(value) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PasskeyTargetCheck.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PasskeyTargetCheck.kt new file mode 100644 index 00000000..204788d5 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PasskeyTargetCheck.kt @@ -0,0 +1,97 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.model.DSecret +import com.artemchep.keyguard.common.service.tld.TldService +import com.artemchep.keyguard.common.usecase.PasskeyTarget +import com.artemchep.keyguard.common.usecase.PasskeyTargetCheck +import org.kodein.di.DirectDI +import org.kodein.di.instance + +/** + * @author Artem Chepurnyi + */ +class PasskeyTargetCheckImpl( + private val tldService: TldService, +) : PasskeyTargetCheck { + constructor(directDI: DirectDI) : this( + tldService = directDI.instance(), + ) + + override fun invoke( + credential: DSecret.Login.Fido2Credentials, + target: PasskeyTarget, + ): IO = ioEffect { + // Check that the credential is mentioned in the request. + // + // If relying party does not provide us a list of credentials to choose + // from, then the credential must be marked as 'discoverable'. + // + // See: + // https://www.w3.org/TR/webauthn-2/#discoverable-credential + if (target.allowedCredentials != null) { + val matchesAllowedCredentials = target.allowedCredentials + .any { it.credentialId == credential.credentialId } + if (!matchesAllowedCredentials) { + return@ioEffect false + } + } else if (!credential.discoverable) { + return@ioEffect false + } + + val passkeyRpId = credential.rpId + val requestRpId = target.rpId + validatePasskeyRpId( + passkeyRpId = passkeyRpId, + requestRpId = requestRpId, + ) + } + + // See: + // https://webauthn-doc.spomky-labs.com/prerequisites/the-relying-party#how-to-determine-the-relying-party-id + private suspend fun validatePasskeyRpId( + passkeyRpId: String?, + requestRpId: String?, + ): Boolean { + // Fast path: + // if the relying party is the exact match or if + // relying party is not specified on both the passkey and the + // request. + if (passkeyRpId == requestRpId) { + return true + } + if (passkeyRpId == null || requestRpId == null) { + return false + } + // Relaying party ID must point for a + // valid domain. + val canMatchSubdomain = true + if (canMatchSubdomain) { + return isSubdomain( + domain = passkeyRpId, + request = requestRpId, + ) + } + return false + } +} + +fun isSubdomain( + domain: String, + request: String, +): Boolean { + val domainParts = domain.split('.') + val requestParts = request.split('.') + + val offset = requestParts.size - domainParts.size + if (offset < 0) { + return false + } + + return domainParts.withIndex().all { (passkeyRpIdIndex, passkeyRpIdPart) -> + val requestRpIdIndex = passkeyRpIdIndex + offset + val requestRpIdPart = requestParts[requestRpIdIndex] + requestRpIdPart == passkeyRpIdPart + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutAllowScreenshotsImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutAllowScreenshotsImpl.kt new file mode 100644 index 00000000..b05ec0a8 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutAllowScreenshotsImpl.kt @@ -0,0 +1,18 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.service.settings.SettingsReadWriteRepository +import com.artemchep.keyguard.common.usecase.PutAllowScreenshots +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class PutAllowScreenshotsImpl( + private val settingsReadWriteRepository: SettingsReadWriteRepository, +) : PutAllowScreenshots { + constructor(directDI: DirectDI) : this( + settingsReadWriteRepository = directDI.instance(), + ) + + override fun invoke(concealFields: Boolean): IO = settingsReadWriteRepository + .setAllowScreenshots(concealFields) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutAllowTwoPanelLayoutInLandscapeImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutAllowTwoPanelLayoutInLandscapeImpl.kt new file mode 100644 index 00000000..e9d206e7 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutAllowTwoPanelLayoutInLandscapeImpl.kt @@ -0,0 +1,18 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.service.settings.SettingsReadWriteRepository +import com.artemchep.keyguard.common.usecase.PutAllowTwoPanelLayoutInLandscape +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class PutAllowTwoPanelLayoutInLandscapeImpl( + private val settingsReadWriteRepository: SettingsReadWriteRepository, +) : PutAllowTwoPanelLayoutInLandscape { + constructor(directDI: DirectDI) : this( + settingsReadWriteRepository = directDI.instance(), + ) + + override fun invoke(allow: Boolean): IO = settingsReadWriteRepository + .setAllowTwoPanelLayoutInLandscape(allow) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutAllowTwoPanelLayoutInPortraitImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutAllowTwoPanelLayoutInPortraitImpl.kt new file mode 100644 index 00000000..9b1aab06 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutAllowTwoPanelLayoutInPortraitImpl.kt @@ -0,0 +1,18 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.service.settings.SettingsReadWriteRepository +import com.artemchep.keyguard.common.usecase.PutAllowTwoPanelLayoutInPortrait +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class PutAllowTwoPanelLayoutInPortraitImpl( + private val settingsReadWriteRepository: SettingsReadWriteRepository, +) : PutAllowTwoPanelLayoutInPortrait { + constructor(directDI: DirectDI) : this( + settingsReadWriteRepository = directDI.instance(), + ) + + override fun invoke(allow: Boolean): IO = settingsReadWriteRepository + .setAllowTwoPanelLayoutInPortrait(allow) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutAppIconsImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutAppIconsImpl.kt new file mode 100644 index 00000000..1aa42c1b --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutAppIconsImpl.kt @@ -0,0 +1,18 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.service.settings.SettingsReadWriteRepository +import com.artemchep.keyguard.common.usecase.PutAppIcons +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class PutAppIconsImpl( + private val settingsReadWriteRepository: SettingsReadWriteRepository, +) : PutAppIcons { + constructor(directDI: DirectDI) : this( + settingsReadWriteRepository = directDI.instance(), + ) + + override fun invoke(appIcons: Boolean): IO = settingsReadWriteRepository + .setAppIcons(appIcons) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutAutofillCopyTotpImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutAutofillCopyTotpImpl.kt new file mode 100644 index 00000000..b7b36b4d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutAutofillCopyTotpImpl.kt @@ -0,0 +1,18 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.service.settings.SettingsReadWriteRepository +import com.artemchep.keyguard.common.usecase.PutAutofillCopyTotp +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class PutAutofillCopyTotpImpl( + private val settingsReadWriteRepository: SettingsReadWriteRepository, +) : PutAutofillCopyTotp { + constructor(directDI: DirectDI) : this( + settingsReadWriteRepository = directDI.instance(), + ) + + override fun invoke(copyTotp: Boolean): IO = settingsReadWriteRepository + .setAutofillCopyTotp(copyTotp) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutAutofillInlineSuggestionsImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutAutofillInlineSuggestionsImpl.kt new file mode 100644 index 00000000..68038ff1 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutAutofillInlineSuggestionsImpl.kt @@ -0,0 +1,17 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.service.settings.SettingsReadWriteRepository +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class PutAutofillInlineSuggestionsImpl( + private val settingsReadWriteRepository: SettingsReadWriteRepository, +) : com.artemchep.keyguard.common.usecase.PutAutofillInlineSuggestions { + constructor(directDI: DirectDI) : this( + settingsReadWriteRepository = directDI.instance(), + ) + + override fun invoke(inlineSuggestions: Boolean): IO = settingsReadWriteRepository + .setAutofillInlineSuggestions(inlineSuggestions) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutAutofillManualSelectionImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutAutofillManualSelectionImpl.kt new file mode 100644 index 00000000..ee880d4c --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutAutofillManualSelectionImpl.kt @@ -0,0 +1,18 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.service.settings.SettingsReadWriteRepository +import com.artemchep.keyguard.common.usecase.PutAutofillManualSelection +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class PutAutofillManualSelectionImpl( + private val settingsReadWriteRepository: SettingsReadWriteRepository, +) : PutAutofillManualSelection { + constructor(directDI: DirectDI) : this( + settingsReadWriteRepository = directDI.instance(), + ) + + override fun invoke(manualSelection: Boolean): IO = settingsReadWriteRepository + .setAutofillManualSelection(manualSelection) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutAutofillRespectAutofillOffImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutAutofillRespectAutofillOffImpl.kt new file mode 100644 index 00000000..4a3917f4 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutAutofillRespectAutofillOffImpl.kt @@ -0,0 +1,18 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.service.settings.SettingsReadWriteRepository +import com.artemchep.keyguard.common.usecase.PutAutofillRespectAutofillOff +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class PutAutofillRespectAutofillOffImpl( + private val settingsReadWriteRepository: SettingsReadWriteRepository, +) : PutAutofillRespectAutofillOff { + constructor(directDI: DirectDI) : this( + settingsReadWriteRepository = directDI.instance(), + ) + + override fun invoke(respectAutofillOff: Boolean): IO = settingsReadWriteRepository + .setAutofillRespectAutofillOff(respectAutofillOff) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutAutofillSaveRequestImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutAutofillSaveRequestImpl.kt new file mode 100644 index 00000000..d36589db --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutAutofillSaveRequestImpl.kt @@ -0,0 +1,30 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.service.settings.SettingsReadWriteRepository +import com.artemchep.keyguard.common.usecase.GetCanWrite +import com.artemchep.keyguard.common.usecase.PutAutofillSaveRequest +import com.artemchep.keyguard.common.usecase.premium +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class PutAutofillSaveRequestImpl( + private val settingsReadWriteRepository: SettingsReadWriteRepository, + private val getCanWrite: GetCanWrite, +) : PutAutofillSaveRequest { + constructor(directDI: DirectDI) : this( + settingsReadWriteRepository = directDI.instance(), + getCanWrite = directDI.instance(), + ) + + override fun invoke(saveRequest: Boolean): IO = settingsReadWriteRepository + .setAutofillSaveRequest(saveRequest) + .premium( + getPurchased = getCanWrite, + ) { + // Enabling a save request feature requires write access. + @Suppress("UnnecessaryVariable") + val needsPremium = saveRequest + needsPremium + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutAutofillSaveUriImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutAutofillSaveUriImpl.kt new file mode 100644 index 00000000..de087d93 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutAutofillSaveUriImpl.kt @@ -0,0 +1,30 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.service.settings.SettingsReadWriteRepository +import com.artemchep.keyguard.common.usecase.GetCanWrite +import com.artemchep.keyguard.common.usecase.PutAutofillSaveUri +import com.artemchep.keyguard.common.usecase.premium +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class PutAutofillSaveUriImpl( + private val settingsReadWriteRepository: SettingsReadWriteRepository, + private val getCanWrite: GetCanWrite, +) : PutAutofillSaveUri { + constructor(directDI: DirectDI) : this( + settingsReadWriteRepository = directDI.instance(), + getCanWrite = directDI.instance(), + ) + + override fun invoke(saveUri: Boolean): IO = settingsReadWriteRepository + .setAutofillSaveUri(saveUri) + .premium( + getPurchased = getCanWrite, + ) { + // Enabling a save request feature requires write access. + @Suppress("UnnecessaryVariable") + val needsPremium = saveUri + needsPremium + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutBiometricTimeoutImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutBiometricTimeoutImpl.kt new file mode 100644 index 00000000..9ab80176 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutBiometricTimeoutImpl.kt @@ -0,0 +1,19 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.service.settings.SettingsReadWriteRepository +import com.artemchep.keyguard.common.usecase.PutBiometricTimeout +import org.kodein.di.DirectDI +import org.kodein.di.instance +import kotlin.time.Duration + +class PutBiometricTimeoutImpl( + private val settingsReadWriteRepository: SettingsReadWriteRepository, +) : PutBiometricTimeout { + constructor(directDI: DirectDI) : this( + settingsReadWriteRepository = directDI.instance(), + ) + + override fun invoke(duration: Duration?): IO = settingsReadWriteRepository + .setBiometricTimeout(duration) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutCachePremiumImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutCachePremiumImpl.kt new file mode 100644 index 00000000..7daa5458 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutCachePremiumImpl.kt @@ -0,0 +1,18 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.service.settings.SettingsReadWriteRepository +import com.artemchep.keyguard.common.usecase.PutCachePremium +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class PutCachePremiumImpl( + private val settingsReadWriteRepository: SettingsReadWriteRepository, +) : PutCachePremium { + constructor(directDI: DirectDI) : this( + settingsReadWriteRepository = directDI.instance(), + ) + + override fun invoke(premium: Boolean): IO = settingsReadWriteRepository + .setCachePremium(premium) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutCheckPwnedPasswordsImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutCheckPwnedPasswordsImpl.kt new file mode 100644 index 00000000..869c9dbb --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutCheckPwnedPasswordsImpl.kt @@ -0,0 +1,18 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.service.settings.SettingsReadWriteRepository +import com.artemchep.keyguard.common.usecase.PutCheckPwnedPasswords +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class PutCheckPwnedPasswordsImpl( + private val settingsReadWriteRepository: SettingsReadWriteRepository, +) : PutCheckPwnedPasswords { + constructor(directDI: DirectDI) : this( + settingsReadWriteRepository = directDI.instance(), + ) + + override fun invoke(checkPwnedPasswords: Boolean): IO = settingsReadWriteRepository + .setCheckPwnedPasswords(checkPwnedPasswords) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutCheckPwnedServicesImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutCheckPwnedServicesImpl.kt new file mode 100644 index 00000000..8de0a87b --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutCheckPwnedServicesImpl.kt @@ -0,0 +1,18 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.service.settings.SettingsReadWriteRepository +import com.artemchep.keyguard.common.usecase.PutCheckPwnedServices +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class PutCheckPwnedServicesImpl( + private val settingsReadWriteRepository: SettingsReadWriteRepository, +) : PutCheckPwnedServices { + constructor(directDI: DirectDI) : this( + settingsReadWriteRepository = directDI.instance(), + ) + + override fun invoke(checkPwnedServices: Boolean): IO = settingsReadWriteRepository + .setCheckPwnedServices(checkPwnedServices) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutCheckTwoFAImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutCheckTwoFAImpl.kt new file mode 100644 index 00000000..84dfbd7a --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutCheckTwoFAImpl.kt @@ -0,0 +1,18 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.service.settings.SettingsReadWriteRepository +import com.artemchep.keyguard.common.usecase.PutCheckTwoFA +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class PutCheckTwoFAImpl( + private val settingsReadWriteRepository: SettingsReadWriteRepository, +) : PutCheckTwoFA { + constructor(directDI: DirectDI) : this( + settingsReadWriteRepository = directDI.instance(), + ) + + override fun invoke(checkTwoFA: Boolean): IO = settingsReadWriteRepository + .setCheckTwoFA(checkTwoFA) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutClipboardAutoClearImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutClipboardAutoClearImpl.kt new file mode 100644 index 00000000..346d80f6 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutClipboardAutoClearImpl.kt @@ -0,0 +1,19 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.service.settings.SettingsReadWriteRepository +import com.artemchep.keyguard.common.usecase.PutClipboardAutoClear +import org.kodein.di.DirectDI +import org.kodein.di.instance +import kotlin.time.Duration + +class PutClipboardAutoClearImpl( + private val settingsReadWriteRepository: SettingsReadWriteRepository, +) : PutClipboardAutoClear { + constructor(directDI: DirectDI) : this( + settingsReadWriteRepository = directDI.instance(), + ) + + override fun invoke(duration: Duration?): IO = settingsReadWriteRepository + .setClipboardClearDelay(duration) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutClipboardAutoRefreshImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutClipboardAutoRefreshImpl.kt new file mode 100644 index 00000000..676afb08 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutClipboardAutoRefreshImpl.kt @@ -0,0 +1,19 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.service.settings.SettingsReadWriteRepository +import com.artemchep.keyguard.common.usecase.PutClipboardAutoRefresh +import org.kodein.di.DirectDI +import org.kodein.di.instance +import kotlin.time.Duration + +class PutClipboardAutoRefreshImpl( + private val settingsReadWriteRepository: SettingsReadWriteRepository, +) : PutClipboardAutoRefresh { + constructor(directDI: DirectDI) : this( + settingsReadWriteRepository = directDI.instance(), + ) + + override fun invoke(duration: Duration?): IO = settingsReadWriteRepository + .setClipboardUpdateDuration(duration) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutColorsImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutColorsImpl.kt new file mode 100644 index 00000000..8c858e77 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutColorsImpl.kt @@ -0,0 +1,19 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.AppColors +import com.artemchep.keyguard.common.service.settings.SettingsReadWriteRepository +import com.artemchep.keyguard.common.usecase.PutColors +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class PutColorsImpl( + private val settingsReadWriteRepository: SettingsReadWriteRepository, +) : PutColors { + constructor(directDI: DirectDI) : this( + settingsReadWriteRepository = directDI.instance(), + ) + + override fun invoke(colors: AppColors?): IO = settingsReadWriteRepository + .setColors(colors) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutConcealFieldsImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutConcealFieldsImpl.kt new file mode 100644 index 00000000..dcf27224 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutConcealFieldsImpl.kt @@ -0,0 +1,18 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.service.settings.SettingsReadWriteRepository +import com.artemchep.keyguard.common.usecase.PutConcealFields +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class PutConcealFieldsImpl( + private val settingsReadWriteRepository: SettingsReadWriteRepository, +) : PutConcealFields { + constructor(directDI: DirectDI) : this( + settingsReadWriteRepository = directDI.instance(), + ) + + override fun invoke(concealFields: Boolean): IO = settingsReadWriteRepository + .setConcealFields(concealFields) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutDebugPremiumImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutDebugPremiumImpl.kt new file mode 100644 index 00000000..06fc9bc2 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutDebugPremiumImpl.kt @@ -0,0 +1,18 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.service.settings.SettingsReadWriteRepository +import com.artemchep.keyguard.common.usecase.PutDebugPremium +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class PutDebugPremiumImpl( + private val settingsReadWriteRepository: SettingsReadWriteRepository, +) : PutDebugPremium { + constructor(directDI: DirectDI) : this( + settingsReadWriteRepository = directDI.instance(), + ) + + override fun invoke(premium: Boolean): IO = settingsReadWriteRepository + .setDebugPremium(premium) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutDebugScreenDelayImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutDebugScreenDelayImpl.kt new file mode 100644 index 00000000..0a0a87a7 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutDebugScreenDelayImpl.kt @@ -0,0 +1,18 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.service.settings.SettingsReadWriteRepository +import com.artemchep.keyguard.common.usecase.PutDebugScreenDelay +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class PutDebugScreenDelayImpl( + private val settingsReadWriteRepository: SettingsReadWriteRepository, +) : PutDebugScreenDelay { + constructor(directDI: DirectDI) : this( + settingsReadWriteRepository = directDI.instance(), + ) + + override fun invoke(screenDelay: Boolean): IO = settingsReadWriteRepository + .setDebugScreenDelay(screenDelay) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutFontImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutFontImpl.kt new file mode 100644 index 00000000..f735d2fe --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutFontImpl.kt @@ -0,0 +1,19 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.AppFont +import com.artemchep.keyguard.common.service.settings.SettingsReadWriteRepository +import com.artemchep.keyguard.common.usecase.PutFont +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class PutFontImpl( + private val settingsReadWriteRepository: SettingsReadWriteRepository, +) : PutFont { + constructor(directDI: DirectDI) : this( + settingsReadWriteRepository = directDI.instance(), + ) + + override fun invoke(font: AppFont?): IO = settingsReadWriteRepository + .setFont(font) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutKeepScreenOnImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutKeepScreenOnImpl.kt new file mode 100644 index 00000000..c4878bd7 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutKeepScreenOnImpl.kt @@ -0,0 +1,18 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.service.settings.SettingsReadWriteRepository +import com.artemchep.keyguard.common.usecase.PutKeepScreenOn +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class PutKeepScreenOnImpl( + private val settingsReadWriteRepository: SettingsReadWriteRepository, +) : PutKeepScreenOn { + constructor(directDI: DirectDI) : this( + settingsReadWriteRepository = directDI.instance(), + ) + + override fun invoke(keepScreenOn: Boolean): IO = settingsReadWriteRepository + .setKeepScreenOn(keepScreenOn) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutLocaleImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutLocaleImpl.kt new file mode 100644 index 00000000..90bd3e87 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutLocaleImpl.kt @@ -0,0 +1,18 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.service.settings.SettingsReadWriteRepository +import com.artemchep.keyguard.common.usecase.PutLocale +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class PutLocaleImpl( + private val settingsReadWriteRepository: SettingsReadWriteRepository, +) : PutLocale { + constructor(directDI: DirectDI) : this( + settingsReadWriteRepository = directDI.instance(), + ) + + override fun invoke(locale: String?): IO = settingsReadWriteRepository + .setLocale(locale) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutMarkdownImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutMarkdownImpl.kt new file mode 100644 index 00000000..ffebb8fa --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutMarkdownImpl.kt @@ -0,0 +1,18 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.service.settings.SettingsReadWriteRepository +import com.artemchep.keyguard.common.usecase.PutMarkdown +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class PutMarkdownImpl( + private val settingsReadWriteRepository: SettingsReadWriteRepository, +) : PutMarkdown { + constructor(directDI: DirectDI) : this( + settingsReadWriteRepository = directDI.instance(), + ) + + override fun invoke(markdown: Boolean): IO = settingsReadWriteRepository + .setMarkdown(markdown) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutNavAnimationImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutNavAnimationImpl.kt new file mode 100644 index 00000000..436747c3 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutNavAnimationImpl.kt @@ -0,0 +1,19 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.NavAnimation +import com.artemchep.keyguard.common.service.settings.SettingsReadWriteRepository +import com.artemchep.keyguard.common.usecase.PutNavAnimation +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class PutNavAnimationImpl( + private val settingsReadWriteRepository: SettingsReadWriteRepository, +) : PutNavAnimation { + constructor(directDI: DirectDI) : this( + settingsReadWriteRepository = directDI.instance(), + ) + + override fun invoke(navAnimation: NavAnimation?): IO = settingsReadWriteRepository + .setNavAnimation(navAnimation) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutNavLabelImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutNavLabelImpl.kt new file mode 100644 index 00000000..1262d8d7 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutNavLabelImpl.kt @@ -0,0 +1,18 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.service.settings.SettingsReadWriteRepository +import com.artemchep.keyguard.common.usecase.PutNavLabel +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class PutNavLabelImpl( + private val settingsReadWriteRepository: SettingsReadWriteRepository, +) : PutNavLabel { + constructor(directDI: DirectDI) : this( + settingsReadWriteRepository = directDI.instance(), + ) + + override fun invoke(visible: Boolean): IO = settingsReadWriteRepository + .setNavLabel(visible) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutOnboardingLastVisitInstantImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutOnboardingLastVisitInstantImpl.kt new file mode 100644 index 00000000..0335c2cd --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutOnboardingLastVisitInstantImpl.kt @@ -0,0 +1,19 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.service.settings.SettingsReadWriteRepository +import com.artemchep.keyguard.common.usecase.PutOnboardingLastVisitInstant +import kotlinx.datetime.Instant +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class PutOnboardingLastVisitInstantImpl( + private val settingsReadWriteRepository: SettingsReadWriteRepository, +) : PutOnboardingLastVisitInstant { + constructor(directDI: DirectDI) : this( + settingsReadWriteRepository = directDI.instance(), + ) + + override fun invoke(instant: Instant): IO = settingsReadWriteRepository + .setOnboardingLastVisitInstant(instant) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutScreenStateImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutScreenStateImpl.kt new file mode 100644 index 00000000..18709a09 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutScreenStateImpl.kt @@ -0,0 +1,18 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.service.state.StateRepository +import com.artemchep.keyguard.common.usecase.PutScreenState +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class PutScreenStateImpl( + private val stateRepository: StateRepository, +) : PutScreenState { + constructor(directDI: DirectDI) : this( + stateRepository = directDI.instance(), + ) + + override fun invoke(key: String, state: Map): IO = stateRepository + .put(key, state) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutThemeImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutThemeImpl.kt new file mode 100644 index 00000000..d725a3d8 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutThemeImpl.kt @@ -0,0 +1,19 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.AppTheme +import com.artemchep.keyguard.common.service.settings.SettingsReadWriteRepository +import com.artemchep.keyguard.common.usecase.PutTheme +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class PutThemeImpl( + private val settingsReadWriteRepository: SettingsReadWriteRepository, +) : PutTheme { + constructor(directDI: DirectDI) : this( + settingsReadWriteRepository = directDI.instance(), + ) + + override fun invoke(theme: AppTheme?): IO = settingsReadWriteRepository + .setTheme(theme) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutThemeUseAmoledDarkImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutThemeUseAmoledDarkImpl.kt new file mode 100644 index 00000000..0797ad81 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutThemeUseAmoledDarkImpl.kt @@ -0,0 +1,18 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.service.settings.SettingsReadWriteRepository +import com.artemchep.keyguard.common.usecase.PutThemeUseAmoledDark +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class PutThemeUseAmoledDarkImpl( + private val settingsReadWriteRepository: SettingsReadWriteRepository, +) : PutThemeUseAmoledDark { + constructor(directDI: DirectDI) : this( + settingsReadWriteRepository = directDI.instance(), + ) + + override fun invoke(useAmoledDark: Boolean): IO = settingsReadWriteRepository + .setThemeUseAmoledDark(useAmoledDark) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutUserExternalBrowserImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutUserExternalBrowserImpl.kt new file mode 100644 index 00000000..280e6476 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutUserExternalBrowserImpl.kt @@ -0,0 +1,18 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.service.settings.SettingsReadWriteRepository +import com.artemchep.keyguard.common.usecase.PutUseExternalBrowser +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class PutUserExternalBrowserImpl( + private val settingsReadWriteRepository: SettingsReadWriteRepository, +) : PutUseExternalBrowser { + constructor(directDI: DirectDI) : this( + settingsReadWriteRepository = directDI.instance(), + ) + + override fun invoke(useExternalBrowser: Boolean): IO = settingsReadWriteRepository + .setUseExternalBrowser(useExternalBrowser) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutVaultLockAfterRebootImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutVaultLockAfterRebootImpl.kt new file mode 100644 index 00000000..ed68981b --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutVaultLockAfterRebootImpl.kt @@ -0,0 +1,18 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.service.settings.SettingsReadWriteRepository +import com.artemchep.keyguard.common.usecase.PutVaultLockAfterReboot +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class PutVaultLockAfterRebootImpl( + private val settingsReadWriteRepository: SettingsReadWriteRepository, +) : PutVaultLockAfterReboot { + constructor(directDI: DirectDI) : this( + settingsReadWriteRepository = directDI.instance(), + ) + + override fun invoke(enabled: Boolean): IO = settingsReadWriteRepository + .setVaultLockAfterReboot(enabled) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutVaultLockAfterScreenOffImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutVaultLockAfterScreenOffImpl.kt new file mode 100644 index 00000000..3929528d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutVaultLockAfterScreenOffImpl.kt @@ -0,0 +1,18 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.service.settings.SettingsReadWriteRepository +import com.artemchep.keyguard.common.usecase.PutVaultLockAfterScreenOff +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class PutVaultLockAfterScreenOffImpl( + private val settingsReadWriteRepository: SettingsReadWriteRepository, +) : PutVaultLockAfterScreenOff { + constructor(directDI: DirectDI) : this( + settingsReadWriteRepository = directDI.instance(), + ) + + override fun invoke(screenLock: Boolean): IO = settingsReadWriteRepository + .setVaultScreenLock(screenLock) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutVaultLockAfterTimeoutImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutVaultLockAfterTimeoutImpl.kt new file mode 100644 index 00000000..94df2cb4 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutVaultLockAfterTimeoutImpl.kt @@ -0,0 +1,19 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.service.settings.SettingsReadWriteRepository +import com.artemchep.keyguard.common.usecase.PutVaultLockAfterTimeout +import org.kodein.di.DirectDI +import org.kodein.di.instance +import kotlin.time.Duration + +class PutVaultLockAfterTimeoutImpl( + private val settingsReadWriteRepository: SettingsReadWriteRepository, +) : PutVaultLockAfterTimeout { + constructor(directDI: DirectDI) : this( + settingsReadWriteRepository = directDI.instance(), + ) + + override fun invoke(duration: Duration?): IO = settingsReadWriteRepository + .setVaultTimeout(duration) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutVaultPersistImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutVaultPersistImpl.kt new file mode 100644 index 00000000..0c8199ce --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutVaultPersistImpl.kt @@ -0,0 +1,18 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.service.settings.SettingsReadWriteRepository +import com.artemchep.keyguard.common.usecase.PutVaultPersist +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class PutVaultPersistImpl( + private val settingsReadWriteRepository: SettingsReadWriteRepository, +) : PutVaultPersist { + constructor(directDI: DirectDI) : this( + settingsReadWriteRepository = directDI.instance(), + ) + + override fun invoke(enable: Boolean): IO = settingsReadWriteRepository + .setVaultPersist(enable) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutVaultSessionImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutVaultSessionImpl.kt new file mode 100644 index 00000000..f300d122 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutVaultSessionImpl.kt @@ -0,0 +1,21 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.model.MasterSession +import com.artemchep.keyguard.common.service.vault.SessionReadWriteRepository +import com.artemchep.keyguard.common.usecase.PutVaultSession +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class PutVaultSessionImpl( + private val sessionReadWriteRepository: SessionReadWriteRepository, +) : PutVaultSession { + constructor(directDI: DirectDI) : this( + sessionReadWriteRepository = directDI.instance(), + ) + + override fun invoke(session: MasterSession): IO = ioEffect { + sessionReadWriteRepository.put(session) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutWebsiteIconsImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutWebsiteIconsImpl.kt new file mode 100644 index 00000000..b339d139 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutWebsiteIconsImpl.kt @@ -0,0 +1,18 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.service.settings.SettingsReadWriteRepository +import com.artemchep.keyguard.common.usecase.PutWebsiteIcons +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class PutWebsiteIconsImpl( + private val settingsReadWriteRepository: SettingsReadWriteRepository, +) : PutWebsiteIcons { + constructor(directDI: DirectDI) : this( + settingsReadWriteRepository = directDI.instance(), + ) + + override fun invoke(websiteIcons: Boolean): IO = settingsReadWriteRepository + .setWebsiteIcons(websiteIcons) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutWriteAccessImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutWriteAccessImpl.kt new file mode 100644 index 00000000..64c3f297 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/PutWriteAccessImpl.kt @@ -0,0 +1,18 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.service.settings.SettingsReadWriteRepository +import com.artemchep.keyguard.common.usecase.PutWriteAccess +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class PutWriteAccessImpl( + private val settingsReadWriteRepository: SettingsReadWriteRepository, +) : PutWriteAccess { + constructor(directDI: DirectDI) : this( + settingsReadWriteRepository = directDI.instance(), + ) + + override fun invoke(writeAccess: Boolean): IO = settingsReadWriteRepository + .setWriteAccess(writeAccess) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/RemoveAttachmentImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/RemoveAttachmentImpl.kt new file mode 100644 index 00000000..695783b9 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/RemoveAttachmentImpl.kt @@ -0,0 +1,34 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.combine +import com.artemchep.keyguard.common.io.map +import com.artemchep.keyguard.common.model.RemoveAttachmentRequest +import com.artemchep.keyguard.common.service.download.DownloadService +import com.artemchep.keyguard.common.usecase.RemoveAttachment +import org.kodein.di.DirectDI +import org.kodein.di.instance + +/** + * @author Artem Chepurnyi + */ +class RemoveAttachmentImpl( + private val downloadService: DownloadService, +) : RemoveAttachment { + companion object { + private const val THREAD_BUCKET_SIZE = 10 + } + + constructor(directDI: DirectDI) : this( + downloadService = directDI.instance(), + ) + + override fun invoke( + requests: List, + ): IO = requests + .map { request -> + downloadService.remove(request) + } + .combine(bucket = THREAD_BUCKET_SIZE) + .map { Unit } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/RemoveGeneratorHistoryByIdImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/RemoveGeneratorHistoryByIdImpl.kt new file mode 100644 index 00000000..a1738895 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/RemoveGeneratorHistoryByIdImpl.kt @@ -0,0 +1,17 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.android.downloader.journal.GeneratorHistoryRepository +import com.artemchep.keyguard.common.usecase.RemoveGeneratorHistoryById +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class RemoveGeneratorHistoryByIdImpl( + private val generatorHistoryRepository: GeneratorHistoryRepository, +) : RemoveGeneratorHistoryById { + constructor(directDI: DirectDI) : this( + generatorHistoryRepository = directDI.instance(), + ) + + override fun invoke(ids: Set) = generatorHistoryRepository + .removeByIds(ids) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/RemoveGeneratorHistoryImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/RemoveGeneratorHistoryImpl.kt new file mode 100644 index 00000000..52452c45 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/RemoveGeneratorHistoryImpl.kt @@ -0,0 +1,18 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.android.downloader.journal.GeneratorHistoryRepository +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.usecase.RemoveGeneratorHistory +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class RemoveGeneratorHistoryImpl( + private val generatorHistoryRepository: GeneratorHistoryRepository, +) : RemoveGeneratorHistory { + constructor(directDI: DirectDI) : this( + generatorHistoryRepository = directDI.instance(), + ) + + override fun invoke(): IO = generatorHistoryRepository + .removeAll() +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/RequestAppReviewImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/RequestAppReviewImpl.kt new file mode 100644 index 00000000..3162928d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/RequestAppReviewImpl.kt @@ -0,0 +1,77 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.effectTap +import com.artemchep.keyguard.common.io.flatMap +import com.artemchep.keyguard.common.io.flatTap +import com.artemchep.keyguard.common.io.ioUnit +import com.artemchep.keyguard.common.io.toIO +import com.artemchep.keyguard.common.service.logging.LogRepository +import com.artemchep.keyguard.common.service.logging.postDebug +import com.artemchep.keyguard.common.service.review.ReviewLog +import com.artemchep.keyguard.common.service.review.ReviewService +import com.artemchep.keyguard.common.usecase.RequestAppReview +import com.artemchep.keyguard.feature.crashlytics.crashlyticsTap +import com.artemchep.keyguard.platform.LeContext +import kotlinx.datetime.Clock +import org.kodein.di.DirectDI +import org.kodein.di.instance +import kotlin.time.Duration + +class RequestAppReviewImpl( + private val logRepository: LogRepository, + private val reviewLog: ReviewLog, + private val reviewService: ReviewService, +) : RequestAppReview { + companion object { + private const val TAG = "RequestAppReview" + + /** + * After this period, the app will try + * to request a user to review the app. + */ + private val PERIOD = with(Duration) { 28.days } + } + + constructor(directDI: DirectDI) : this( + logRepository = directDI.instance(), + reviewLog = directDI.instance(), + reviewService = directDI.instance(), + ) + + override fun invoke( + context: LeContext, + ): IO = reviewLog + .getLastRequestedAt() + .toIO() + .flatMap { lastRequestedAt -> + val canRequest = kotlin.run { + lastRequestedAt + ?: return@run true + val age = Clock.System.now() - lastRequestedAt + age > PERIOD + } + if (canRequest) { + reviewService + .request(context) + .flatTap { + val now = Clock.System.now() + reviewLog.setLastRequestedAt(now) + } + .effectTap { + logRepository.postDebug(TAG) { + "Sent app review request." + } + } + } else { + ioUnit() + .effectTap { + logRepository.postDebug(TAG) { + "Ignored app review request: " + + "too little time has passed since the last request." + } + } + } + } + .crashlyticsTap() +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/ResolvePlaceholdersImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/ResolvePlaceholdersImpl.kt new file mode 100644 index 00000000..0f107f6b --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/ResolvePlaceholdersImpl.kt @@ -0,0 +1,18 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.usecase.ResolvePlaceholders +import org.kodein.di.DirectDI + +// Here's Keepass docs for inspiration: +// https://keepass.info/help/base/placeholders.html +class ResolvePlaceholdersImpl( +) : ResolvePlaceholders { + constructor(directDI: DirectDI) : this() + + override fun invoke( + source: String, + ): IO { + TODO("Not yet implemented") + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl.kt new file mode 100644 index 00000000..34ed6f01 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/UnlockUseCaseImpl.kt @@ -0,0 +1,487 @@ +package com.artemchep.keyguard.common.usecase.impl + +import arrow.core.Either +import arrow.core.compose +import arrow.core.getOrElse +import arrow.core.memoize +import arrow.core.partially1 +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.attempt +import com.artemchep.keyguard.common.io.dispatchOn +import com.artemchep.keyguard.common.io.flatMap +import com.artemchep.keyguard.common.io.flatTap +import com.artemchep.keyguard.common.io.handleErrorTap +import com.artemchep.keyguard.common.io.handleErrorWith +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.io.ioRaise +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.io.map +import com.artemchep.keyguard.common.model.AuthResult +import com.artemchep.keyguard.common.model.BiometricPurpose +import com.artemchep.keyguard.common.model.BiometricStatus +import com.artemchep.keyguard.common.model.DKey +import com.artemchep.keyguard.common.model.Fingerprint +import com.artemchep.keyguard.common.model.FingerprintBiometric +import com.artemchep.keyguard.common.model.MasterKey +import com.artemchep.keyguard.common.model.MasterPassword +import com.artemchep.keyguard.common.model.MasterSession +import com.artemchep.keyguard.common.model.VaultState +import com.artemchep.keyguard.common.service.vault.FingerprintReadWriteRepository +import com.artemchep.keyguard.common.service.vault.SessionMetadataReadWriteRepository +import com.artemchep.keyguard.common.usecase.AuthConfirmMasterKeyUseCase +import com.artemchep.keyguard.common.usecase.AuthGenerateMasterKeyUseCase +import com.artemchep.keyguard.common.usecase.BiometricKeyDecryptUseCase +import com.artemchep.keyguard.common.usecase.BiometricKeyEncryptUseCase +import com.artemchep.keyguard.common.usecase.BiometricStatusUseCase +import com.artemchep.keyguard.common.usecase.DisableBiometric +import com.artemchep.keyguard.common.usecase.GetBiometricRemainingDuration +import com.artemchep.keyguard.common.usecase.GetVaultSession +import com.artemchep.keyguard.common.usecase.PutVaultSession +import com.artemchep.keyguard.common.usecase.UnlockUseCase +import com.artemchep.keyguard.core.session.usecase.createSubDi +import com.artemchep.keyguard.core.store.DatabaseManager +import com.artemchep.keyguard.feature.crashlytics.crashlyticsTap +import com.artemchep.keyguard.platform.LeCipher +import com.artemchep.keyguard.platform.leIv +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.flatMapLatest +import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.shareIn +import kotlinx.coroutines.flow.take +import kotlinx.datetime.Clock +import org.kodein.di.Copy +import org.kodein.di.DI +import org.kodein.di.DirectDI +import org.kodein.di.instance +import org.kodein.di.subDI +import java.security.KeyException + +class UnlockUseCaseImpl( + private val di: DI, + private val biometricStatusUseCase: BiometricStatusUseCase, + private val getVaultSession: GetVaultSession, + private val putVaultSession: PutVaultSession, + private val disableBiometric: DisableBiometric, + private val keyReadWriteRepository: FingerprintReadWriteRepository, + private val sessionMetadataReadWriteRepository: SessionMetadataReadWriteRepository, + private val getBiometricRemainingDuration: GetBiometricRemainingDuration, + private val biometricKeyEncryptUseCase: BiometricKeyEncryptUseCase, + private val decryptBiometricKeyUseCase: BiometricKeyDecryptUseCase, + private val authConfirmMasterKeyUseCase: AuthConfirmMasterKeyUseCase, + private val authGenerateMasterKeyUseCase: AuthGenerateMasterKeyUseCase, +) : UnlockUseCase { + private val generateMasterKey = authGenerateMasterKeyUseCase() + .compose { password: String -> + val data = password.toByteArray() + MasterPassword(data) + } + + private val sharedFlow = combine( + keyReadWriteRepository.get(), + getBiometricStatusFlow(), + getVaultSession(), + ) { persistableUserTokens, biometric, session -> + when { + persistableUserTokens == null && session is MasterSession.Empty -> + createCreateVaultState( + biometric = biometric.forCreate, + ) + + persistableUserTokens == null && session is MasterSession.Key -> { + // FIXME: If you get stuck in this state, + // then you can consider it a critical error that + // is not recoverable. + VaultState.Loading + } + + persistableUserTokens != null && session is MasterSession.Empty -> + createUnlockVaultState( + tokens = persistableUserTokens, + biometric = biometric.forUnlock, + lockReason = session.reason, + ) + + persistableUserTokens != null && session is MasterSession.Key -> + createMainVaultState( + tokens = persistableUserTokens, + biometric = biometric.forCreate, + masterKey = session.masterKey, + di = session.di, + ) + + else -> error("Unreachable statement") + } + } + .distinctUntilChanged() + .shareIn(GlobalScope, SharingStarted.WhileSubscribed(10000L), replay = 1) + + constructor(directDI: DirectDI) : this( + di = directDI.di, + biometricStatusUseCase = directDI.instance(), + getVaultSession = directDI.instance(), + putVaultSession = directDI.instance(), + disableBiometric = directDI.instance(), + keyReadWriteRepository = directDI.instance(), + sessionMetadataReadWriteRepository = directDI.instance(), + getBiometricRemainingDuration = directDI.instance(), + biometricKeyEncryptUseCase = directDI.instance(), + decryptBiometricKeyUseCase = directDI.instance(), + authConfirmMasterKeyUseCase = directDI.instance(), + authGenerateMasterKeyUseCase = directDI.instance(), + ) + + override fun invoke() = sharedFlow + + private class ComplexBiometricStatus( + val forUnlock: BiometricStatus, + val forCreate: BiometricStatus, + ) + + private fun getBiometricStatusFlow() = biometricStatusUseCase() + .flatMapLatest { biometric -> + val forUnlockFlow = when (biometric) { + is BiometricStatus.Available -> + getBiometricRemainingDuration() + .map { it.isPositive() } + .take(1) // We don't want the option to suddenly disappear + .map { valid -> + biometric.takeIf { valid } ?: BiometricStatus.Unavailable + } + + is BiometricStatus.Unavailable -> flowOf(biometric) + } + forUnlockFlow + .map { forUnlock -> + ComplexBiometricStatus( + forUnlock = forUnlock, + forCreate = biometric, + ) + } + } + + private fun createCreateVaultState( + biometric: BiometricStatus, + ): VaultState { + return VaultState.Create( + createWithMasterPassword = VaultState.Create.WithPassword( + getCreateIo = { password -> + generateMasterKey(password) + .flatMap { result -> + create( + result = result, + biometricTokens = null, + ) + } + .flatTap { + writeLastPasswordUseTimestamp() + } + .dispatchOn(Dispatchers.Default) + }, + ), + createWithMasterPasswordAndBiometric = if (biometric is BiometricStatus.Available) { + val getCipherForEncryption = biometric + .createCipher + .partially1(BiometricPurpose.Encrypt) + .let { block -> + // lambda + { Either.catch(block) } + } + // Save the cipher for further use by + // the code in the block. This allows us to not + // return the cipher from the action. + .memoize() + VaultState.Create.WithBiometric( + getCipher = getCipherForEncryption, + getCreateIo = { password -> + generateMasterKey(password) + .flatMap { result -> + val masterKey = result.key + val cipherIo = ioEffect { + getCipherForEncryption() + .getOrElse { e -> + throw e + } + } + biometricKeyEncryptUseCase(cipherIo, masterKey) + .handleErrorWith { e -> + val newMessage = "Failed to encrypt the biometric key!" + val newException = IllegalStateException(newMessage, e) + ioRaise(newException) + } + .flatMap { encryptedMasterKey -> + val cipher = getCipherForEncryption() + .getOrElse { e -> + throw e + } + create( + result = result, + biometricTokens = FingerprintBiometric( + iv = cipher.leIv, + encryptedMasterKey = encryptedMasterKey, + ), + ) + } + } + .flatTap { + writeLastPasswordUseTimestamp() + } + .dispatchOn(Dispatchers.Default) + }, + ) + } else { + null + }, + ) + } + + private fun createUnlockVaultState( + tokens: Fingerprint, + biometric: BiometricStatus, + lockReason: String?, + ): VaultState { + val unlockMasterKey = authConfirmMasterKeyUseCase(tokens.master.salt, tokens.master.hash) + .compose { password: String -> + val data = password.toByteArray() + MasterPassword(data) + } + return VaultState.Unlock( + unlockWithMasterPassword = VaultState.Unlock.WithPassword( + getCreateIo = { password -> + unlockMasterKey(password) + // Try to unlock the vault using generated + // master key. + .map { it.key } + .flatMap(::unlock) + .flatTap { + writeLastPasswordUseTimestamp() + } + .dispatchOn(Dispatchers.Default) + }, + ), + unlockWithBiometric = if (biometric is BiometricStatus.Available && tokens.biometric != null) { + val getCipherForDecryption = biometric + .createCipher + .partially1(BiometricPurpose.Decrypt(DKey(tokens.biometric.iv))) + // Handle key invalidation + .createCipherOrDisableBiometrics() + .let { block -> + // lambda + { Either.catch(block) } + } + // Save the cipher for further use by + // the code in the block. This allows us to not + // return the cipher from the action. + .memoize() + VaultState.Unlock.WithBiometric( + getCipher = getCipherForDecryption, + getCreateIo = { + val encryptedMasterKey = tokens.biometric.encryptedMasterKey + val cipherIo = ioEffect { + getCipherForDecryption() + .getOrElse { e -> + throw e + } + } + decryptBiometricKeyUseCase(cipherIo, encryptedMasterKey) + .handleErrorWith { e -> + val newMessage = "Failed to decrypt the biometric key!" + val newException = IllegalStateException(newMessage, e) + ioRaise(newException) + } + // Try to unlock the vault using decrypted + // master key. + .flatMap(::unlock) + .dispatchOn(Dispatchers.Default) + }, + ) + } else { + null + }, + lockReason = lockReason, + ) + } + + private fun createMainVaultState( + tokens: Fingerprint, + biometric: BiometricStatus, + masterKey: MasterKey, + di: DI, + ): VaultState { + val databaseManager by di.instance() + val unlockMasterKey = authConfirmMasterKeyUseCase(tokens.master.salt, tokens.master.hash) + .compose { password: String -> + val data = password.toByteArray() + MasterPassword(data) + } + val getCreateIo: (String, String) -> IO = { currentPassword, newPassword -> + unlockMasterKey(currentPassword) // verify current password is valid + .flatMap { + generateMasterKey(newPassword) + } + .flatMap { result -> + val newMasterKey = result.key + databaseManager + .changePassword(newMasterKey) + .map { + result + } + } + .flatMap { result -> + create( + result = result, + biometricTokens = null, + ) + } + .flatTap { + writeLastPasswordUseTimestamp() + } + .handleErrorTap { + it.printStackTrace() + } + .dispatchOn(Dispatchers.Default) + } + val changePassword = VaultState.Main.ChangePassword( + key = tokens.master, + withMasterPassword = VaultState.Main.ChangePassword.WithPassword( + getCreateIo = getCreateIo, + ), + withMasterPasswordAndBiometric = if (biometric is BiometricStatus.Available) { + val getCipherForEncryption = biometric + .createCipher + .partially1(BiometricPurpose.Encrypt) + // Handle key invalidation + .createCipherOrDisableBiometrics() + .let { block -> + // lambda + { Either.catch(block) } + } + // Save the cipher for further use by + // the code in the block. This allows us to not + // return the cipher from the action. + .memoize() + VaultState.Main.ChangePassword.WithBiometric( + getCipher = getCipherForEncryption, + getCreateIo = { currentPassword, newPassword -> + unlockMasterKey(currentPassword) // verify current password is valid + .flatMap { + generateMasterKey(newPassword) + } + .flatMap { result -> + val newMasterKey = result.key + databaseManager + .changePassword(newMasterKey) + .map { + result + } + } + .flatMap { result -> + val newMasterKey = result.key + val cipherIo = ioEffect { + getCipherForEncryption() + .getOrElse { e -> + throw e + } + } + biometricKeyEncryptUseCase(cipherIo, newMasterKey) + .handleErrorWith { e -> + val newMessage = "Failed to encrypt the biometric key!" + val newException = IllegalStateException(newMessage, e) + ioRaise(newException) + } + .flatMap { encryptedNewMasterKey -> + val cipher = getCipherForEncryption() + .getOrElse { e -> + throw e + } + create( + result = result, + biometricTokens = FingerprintBiometric( + iv = cipher.leIv, + encryptedMasterKey = encryptedNewMasterKey, + ), + ) + } + } + .flatTap { + writeLastPasswordUseTimestamp() + } + .dispatchOn(Dispatchers.Default) + }, + ) + } else { + null + }, + ) + return VaultState.Main( + masterKey = masterKey, + changePassword = changePassword, + di = di, + ) + } + + private fun (() -> LeCipher).createCipherOrDisableBiometrics() = this + .let { createCipher -> + // Lambda. + { + try { + createCipher() + } catch (e: KeyException) { + // If the key is not valid, then we want to disable the + // biometrics for now. + disableBiometric() + .crashlyticsTap() + .attempt() + .launchIn(GlobalScope) + throw e + } + } + } + + /** + * Save the current vault tokens to the persistent + * storage. + */ + private fun create( + result: AuthResult, + biometricTokens: FingerprintBiometric? = null, + ): IO { + val token = Fingerprint( + master = result.token, + biometric = biometricTokens, + ) + return keyReadWriteRepository.put(token) + .flatMap { + unlock( + masterKey = result.key, + ) + } + } + + private fun unlock( + masterKey: MasterKey, + ): IO = ioEffect { + val moduleDi = DI.Module("lalala") { + createSubDi( + masterKey = masterKey, + ) + } + val subDi = + subDI(di, false, Copy.None) { + import(moduleDi) + } + MasterSession.Key( + masterKey = masterKey, + di = subDi, + origin = MasterSession.Key.Authenticated, + createdAt = Clock.System.now(), + ) + }.flatMap(putVaultSession) + + private fun writeLastPasswordUseTimestamp(): IO = sessionMetadataReadWriteRepository + .setLastPasswordUseTimestamp(instant = Clock.System.now()) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/WindowCoroutineScopeImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/WindowCoroutineScopeImpl.kt new file mode 100644 index 00000000..0a88ec8f --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/usecase/impl/WindowCoroutineScopeImpl.kt @@ -0,0 +1,54 @@ +package com.artemchep.keyguard.common.usecase.impl + +import com.artemchep.keyguard.common.model.NoAnalytics +import com.artemchep.keyguard.common.model.ToastMessage +import com.artemchep.keyguard.common.usecase.ShowMessage +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.platform.recordException +import kotlinx.coroutines.CoroutineExceptionHandler +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.SupervisorJob +import kotlinx.coroutines.plus +import org.kodein.di.DirectDI +import org.kodein.di.instance +import java.io.IOException +import kotlin.coroutines.CoroutineContext +import kotlin.coroutines.cancellation.CancellationException + +class WindowCoroutineScopeImpl( + private val scope: CoroutineScope, + private val showMessage: ShowMessage, +) : WindowCoroutineScope { + constructor(directDI: DirectDI) : this( + scope = GlobalScope, + showMessage = directDI.instance(), + ) + + private val handler = CoroutineExceptionHandler { _, exception -> + if (exception is CancellationException) { + return@CoroutineExceptionHandler + } + if ( + exception !is IOException && + exception !is NoAnalytics + ) { + recordException(exception) + } + + exception.printStackTrace() + + val title = exception.localizedMessage + ?: exception.message + ?: exception.javaClass.simpleName + val msg = ToastMessage( + title = title, + ) + showMessage.copy(msg) + } + + private val internalScope = scope + SupervisorJob() + handler + + override val coroutineContext: CoroutineContext + get() = internalScope.coroutineContext +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/util/Boolean.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/util/Boolean.kt new file mode 100644 index 00000000..316f7729 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/util/Boolean.kt @@ -0,0 +1,3 @@ +package com.artemchep.keyguard.common.util + +val Boolean.int: Int get() = if (this) 1 else 0 diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/util/Browsers.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/util/Browsers.kt new file mode 100644 index 00000000..c8f65820 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/util/Browsers.kt @@ -0,0 +1,81 @@ +package com.artemchep.keyguard.common.util + +val Browsers = setOf( + "alook.browser", + "com.amazon.cloud9", + "com.android.browser", + "com.android.chrome", + "com.android.htmlviewer", + "com.avast.android.secure.browser", + "com.avg.android.secure.browser", + "com.brave.browser", + "com.brave.browser_beta", + "com.brave.browser_default", + "com.brave.browser_dev", + "com.brave.browser_nightly", + "com.chrome.beta", + "com.chrome.canary", + "com.chrome.dev", + "com.cookiegames.smartcookie", + "com.cookiejarapps.android.smartcookieweb", + "com.ecosia.android", + "com.google.android.apps.chrome", + "com.google.android.apps.chrome_dev", + "com.jamal2367.styx", + "com.kiwibrowser.browser", + "com.microsoft.emmx", + "com.microsoft.emmx.beta", + "com.microsoft.emmx.canary", + "com.microsoft.emmx.dev", + "com.mmbox.browser", + "com.mmbox.xbrowser", + "com.mycompany.app.soulbrowser", + "com.naver.whale", + "com.opera.browser", + "com.opera.browser.beta", + "com.opera.mini.native", + "com.opera.mini.native.beta", + "com.opera.touch", + "com.qwant.liberty", + "com.sec.android.app.sbrowser", + "com.sec.android.app.sbrowser.beta", + "com.stoutner.privacybrowser.free", + "com.stoutner.privacybrowser.standard", + "com.vivaldi.browser", + "com.vivaldi.browser.snapshot", + "com.vivaldi.browser.sopranos", + "com.yandex.browser", + "com.z28j.feel", + "idm.internet.download.manager", + "idm.internet.download.manager.adm.lite", + "idm.internet.download.manager.plus", + "io.github.forkmaintainers.iceraven", + "mark.via", + "mark.via.gp", + "net.slions.fulguris.full.download", + "net.slions.fulguris.full.download.debug", + "net.slions.fulguris.full.playstore", + "net.slions.fulguris.full.playstore.debug", + "org.adblockplus.browser", + "org.adblockplus.browser.beta", + "org.bromite.bromite", + "org.bromite.chromium", + "org.bromite.dev", + "org.chromium.chrome", + "org.codeaurora.swe.browser", + "org.gnu.icecat", + "org.mozilla.fenix", + "org.mozilla.fenix.nightly", + "org.mozilla.fennec_aurora", + "org.mozilla.fennec_fdroid", + "org.mozilla.firefox", + "org.mozilla.firefox_beta", + "org.mozilla.reference.browser", + "org.mozilla.rocket", + "org.torproject.torbrowser", + "org.torproject.torbrowser_alpha", + "org.ungoogled.chromium.extensions.stable", + "org.ungoogled.chromium.stable", + "us.spotco.fennec_dos", + "site.mises.browser", +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/util/ByteArray.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/util/ByteArray.kt new file mode 100644 index 00000000..4a9f19fb --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/util/ByteArray.kt @@ -0,0 +1,15 @@ +package com.artemchep.keyguard.common.util + +val ByteArray.int: Int + get() { + require(size == 4) + return this + .foldIndexed(0.toUInt()) { index, y, x -> + // We need to convert byte to unsigned byte first, otherwise + // the sign bit will plague the rest of the integer. + val xUInt = x.toUByte().toUInt() + val yUIntPatch = xUInt shl (size - index - 1).times(8) + y or yUIntPatch + } + .toInt() + } diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/util/Instant.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/util/Instant.kt new file mode 100644 index 00000000..bdffd9c6 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/util/Instant.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.util + +import kotlinx.datetime.Instant + +val Instant.millis get() = toEpochMilliseconds() diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/util/Int.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/util/Int.kt new file mode 100644 index 00000000..13f39b5e --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/util/Int.kt @@ -0,0 +1,3 @@ +package com.artemchep.keyguard.common.util + +operator fun Int.contains(other: Int) = (other and this) == other diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/util/Luhn.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/util/Luhn.kt new file mode 100644 index 00000000..f957c0c2 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/util/Luhn.kt @@ -0,0 +1,22 @@ +package com.artemchep.keyguard.common.util + +// https://en.wikipedia.org/wiki/Luhn_algorithm +fun validLuhn(number: String): Boolean { + if (number.isEmpty()) { + return true + } + + val parity = number.length.rem(2) + val checksum = number + .foldIndexed(0) { index, y, x -> + val n = charToDigit(x) + y + when { + index.rem(2) != parity -> n + n > 4 -> 2 * n - 9 + else -> 2 * n + } + } + return checksum.rem(10) == 0 +} + +private fun charToDigit(char: Char) = char - '0' diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/util/MainThread.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/util/MainThread.kt new file mode 100644 index 00000000..58055bce --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/util/MainThread.kt @@ -0,0 +1,4 @@ +package com.artemchep.keyguard.common.util + +fun assertNotMainThread() { +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/util/RegexColorize.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/util/RegexColorize.kt new file mode 100644 index 00000000..69b74e71 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/util/RegexColorize.kt @@ -0,0 +1,31 @@ +package com.artemchep.keyguard.common.util + +// A rewrite of +// https://github.com/geongeorge/regex-colorizer/ +// using Kotlin. + + +private val myclass = "regex" +private val regexToken = + """\[\^?]?(?:[^\\\]]+|\\[\S\s]?)*]?|\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9][0-9]*|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|c[A-Za-z]|[\S\s]?)|\((?:\?[:=!]?)?|(?:[?*+]|\{[0-9]+(?:,[0-9]*)?\})\??|[^.?*+^${"$"}{[()|\\]+|.""" +private val charClassToken = + """/[^\\-]+|-|\\(?:[0-3][0-7]{0,2}|[4-7][0-7]?|x[0-9A-Fa-f]{2}|u[0-9A-Fa-f]{4}|c[A-Za-z]|[\S\s]?)""" +private val charClassParts = """^(\[\^?)(]?(?:[^\\\]]+|\\[\S\s]?)*)(]?)$""" +private val quantifier = """^(?:[?*+]|\{[0-9]+(?:,[0-9]*)?\})\??$""" +private val type_NONE = 0 +private val type_RANGE_HYPHEN = 1 +private val type_SHORT_CLASS = 2 +private val type_ALTERNATOR = 3 +private val error_UNCLOSED_CLASS = "Unclosed character class" +private val error_INCOMPLETE_TOKEN = "Incomplete regex token" +private val error_INVALID_RANGE = "Reversed or invalid range" +private val error_INVALID_GROUP_TYPE = "Invalid or unsupported group type" +private val error_UNBALANCED_LEFT_PAREN = "Unclosed grouping" +private val error_UNBALANCED_RIGHT_PAREN = "No matching opening parenthesis" +private val error_INTERVAL_OVERFLOW = "Interval quantifier cannot use value over 65,535" +private val error_INTERVAL_REVERSED = "Interval quantifier range is reversed" +private val error_UNQUANTIFIABLE = "Quantifiers must be preceded by a token that can be repeated" +private val error_IMPROPER_EMPTY_ALTERNATIVE = + "Empty alternative effectively truncates the regex here" + + diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/util/flow/EventFlow.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/util/flow/EventFlow.kt new file mode 100644 index 00000000..476f9737 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/util/flow/EventFlow.kt @@ -0,0 +1,95 @@ +package com.artemchep.keyguard.common.util.flow + +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.InternalCoroutinesApi +import kotlinx.coroutines.channels.SendChannel +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.FlowCollector +import kotlinx.coroutines.flow.channelFlow +import kotlinx.coroutines.launch +import kotlinx.coroutines.suspendCancellableCoroutine +import java.util.LinkedList +import java.util.Queue +import kotlin.coroutines.CoroutineContext +import kotlin.coroutines.EmptyCoroutineContext +import kotlin.coroutines.resume + +/** + * @author Artem Chepurnyi + */ +open class EventFlow( + private val context: CoroutineContext = EmptyCoroutineContext, +) : Flow { + /** + * Returns `true` if the live flow has any active observers, + * `false` otherwise. + */ + val isActive: Boolean + get() = channels.isNotEmpty() + + val monitor get() = this + + private val channels: Queue> = LinkedList() + + fun emit(value: T) { + // Copy the list of events to try + // to send the event to. + val channels = synchronized(monitor) { + channels.toList() + } + + GlobalScope.launch(context) { + channels.forEach { channel -> + channel.trySend(value) + } + } + } + + open fun onActive() { + // By default does nothing. + } + + open fun onInactive() { + // By default does nothing. + } + + fun asFlow(): Flow = flowWithLifecycle( + onActive = { channel -> + // Add a channel to the list of + // consumers. + synchronized(monitor) { + channels += channel + if (channels.size == 1) onActive() + } + }, + onInactive = { channel -> + // Remove a channel from the list of + // consumers. + synchronized(monitor) { + channels -= channel + if (channels.size == 0) onInactive() + } + }, + ) + + override suspend fun collect(collector: FlowCollector) = asFlow().collect(collector) +} + +private fun flowWithLifecycle( + onActive: (SendChannel) -> Unit, + onInactive: (SendChannel) -> Unit, +): Flow = channelFlow { + try { + onActive(this) + + // Suspend the flow until manually + // canceled. + suspendCancellableCoroutine { cont -> + invokeOnClose { + cont.resume(Unit) + } + } + } finally { + onInactive(this) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/util/flow/combine.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/util/flow/combine.kt new file mode 100644 index 00000000..51095f53 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/util/flow/combine.kt @@ -0,0 +1,58 @@ +package com.artemchep.keyguard.common.util.flow + +import kotlinx.coroutines.channels.awaitClose +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.channelFlow +import kotlinx.coroutines.flow.flow +import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.launch +import java.util.concurrent.atomic.AtomicInteger + +inline fun List>.combineToList(): Flow> = if (isEmpty()) { + flowOf(emptyList()) +} else { + flow { + val remaining = AtomicInteger(size) + val list = Array(size) { index -> + null + } + + if (remaining.get() == 0) { + emit(list.toList() as List) + return@flow + } + + // Combines the flow of models with its position in the + // list. This is needed to ensure that all of the flows a consumed with + // the same dispatcher. + channelFlow { + forEachIndexed { index, flow -> + launch { + var isFirst = true + + flow.collect { model -> + list[index] = model + + if (isFirst) { + isFirst = false + remaining.getAndAdd(-1) + } + + // Indicate the update of the list, we don't care if some of the elements + // are going to be lost, because we don't pass the data, we pass the update + // request. + if (remaining.get() == 0) { + trySend(Unit) + } + } + } + } + + awaitClose() + }.collect { + if (remaining.get() == 0) { + emit(list.toList() as List) + } + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/util/flow/foldAsList.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/util/flow/foldAsList.kt new file mode 100644 index 00000000..621cf98d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/util/flow/foldAsList.kt @@ -0,0 +1,12 @@ +package com.artemchep.keyguard.common.util.flow + +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.flowOf + +inline fun List>.foldAsList(): Flow> = + if (isEmpty()) { + flowOf(emptyList()) + } else { + combine(this) { array -> array.toList() } + } diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/util/flow/observeFlow.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/util/flow/observeFlow.kt new file mode 100644 index 00000000..013add79 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/util/flow/observeFlow.kt @@ -0,0 +1,34 @@ +package com.artemchep.keyguard.common.util.flow + +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.NonCancellable +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.channelFlow +import kotlinx.coroutines.suspendCancellableCoroutine +import kotlinx.coroutines.withContext +import kotlin.coroutines.resume + +inline fun observerFlow( + crossinline register: ((T) -> Unit) -> () -> Unit, +): Flow = channelFlow { + var unregister: (() -> Unit)? = null + try { + unregister = withContext(Dispatchers.Main) { + val setter = { value: T -> + trySend(value) + } + register(setter) + } + suspendCancellableCoroutine { cont -> + invokeOnClose { + cont.resume(Unit) + } + } + } finally { + withContext(Dispatchers.Main + NonCancellable) { + // Unregister the broadcast receiver that we have + // previously registered. + unregister?.invoke() + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/util/flow/stateIn.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/util/flow/stateIn.kt new file mode 100644 index 00000000..1bfda09c --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/util/flow/stateIn.kt @@ -0,0 +1,98 @@ +package com.artemchep.keyguard.common.util.flow + +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.CoroutineStart +import kotlinx.coroutines.Job +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.SharingCommand +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.collectLatest +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.launch +import kotlin.coroutines.CoroutineContext +import kotlin.coroutines.EmptyCoroutineContext + +private val None = Any() + +fun Flow.persistingStateIn( + scope: CoroutineScope, + started: SharingStarted, + initialValue: T, +): StateFlow { + val state = MutableStateFlow(initialValue) + val job = scope.launchSharing(EmptyCoroutineContext, this, state, started) + return ReadonlyStateFlow(state, job) +} + +suspend fun Flow.persistingStateIn( + scope: CoroutineScope, + started: SharingStarted, +): StateFlow { + val state = MutableStateFlow(None) + val job = scope.launchSharing(EmptyCoroutineContext, this, state, started) + + // Wait till the flow gets + // its first value. + state.first { it !== None } + + // We are safe to cast it back. + return ReadonlyStateFlow(state as StateFlow, job) +} + +// Launches sharing coroutine +private fun CoroutineScope.launchSharing( + context: CoroutineContext, + upstream: Flow, + shared: MutableStateFlow, + started: SharingStarted, +): Job { + /* + * Conditional start: in the case when sharing and subscribing happens in the same dispatcher, we want to + * have the following invariants preserved: + * * Delayed sharing strategies have a chance to immediately observe consecutive subscriptions. + * E.g. in the cases like `flow.shareIn(...); flow.take(1)` we want sharing strategy to see the initial subscription + * * Eager sharing does not start immediately, so the subscribers have actual chance to subscribe _prior_ to sharing. + */ + val start = + if (started == SharingStarted.Eagerly) CoroutineStart.DEFAULT else CoroutineStart.UNDISPATCHED + return launch(context, start = start) { // the single coroutine to rule the sharing + // Optimize common built-in started strategies + when { + started === SharingStarted.Eagerly -> { + // collect immediately & forever + upstream.collect(shared) + } + + started === SharingStarted.Lazily -> { + // start collecting on the first subscriber - wait for it first + shared.subscriptionCount.first { it > 0 } + upstream.collect(shared) + } + + else -> { + // other & custom strategies + started.command(shared.subscriptionCount) + .distinctUntilChanged() // only changes in command have effect + .collectLatest { // cancels block on new emission + when (it) { + SharingCommand.START -> upstream.collect(shared) + SharingCommand.STOP -> { /* just cancel and do nothing else */ + } + + SharingCommand.STOP_AND_RESET_REPLAY_CACHE -> { /* just cancel and do nothing else */ + } + } + } + } + } + } +} + +private class ReadonlyStateFlow( + flow: StateFlow, + @Suppress("unused") + private val job: Job?, // keeps a strong reference to the job (if present) +) : StateFlow by flow diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/util/flow/widen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/util/flow/widen.kt new file mode 100644 index 00000000..bffa0c4e --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/util/flow/widen.kt @@ -0,0 +1 @@ +package com.artemchep.keyguard.common.util.flow diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/util/flowOfTime.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/util/flowOfTime.kt new file mode 100644 index 00000000..4f8fff87 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/util/flowOfTime.kt @@ -0,0 +1,20 @@ +package com.artemchep.keyguard.common.util + +import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.flow +import kotlinx.datetime.Clock +import kotlin.time.DurationUnit +import kotlin.time.ExperimentalTime +import kotlin.time.toTimeUnit + +fun flowOfTime( + unit: DurationUnit = DurationUnit.SECONDS, + duration: Long = 1L, +) = flow { + val delayMs = unit.toTimeUnit().toMillis(duration) + while (true) { + val time = Clock.System.now() + emit(time) + delay(delayMs) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/util/hash/FNV.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/util/hash/FNV.kt new file mode 100644 index 00000000..dc696c08 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/util/hash/FNV.kt @@ -0,0 +1,25 @@ +package com.artemchep.keyguard.common.util.hash + +object FNV { + private const val init32 = 0x811c9dc5L + private const val prime32 = 0x01000193L + private const val mod32 = 1L shl 32 + + fun fnv1_32(data: String): Long { + var hash = init32 + for (b in data) { + hash = hash.times(prime32).mod(mod32) + hash = hash.xor(b.code.toLong()) + } + return hash + } + + fun fnv1_32(data: ByteArray): Long { + var hash = init32 + for (b in data) { + hash = hash.times(prime32).mod(mod32) + hash = hash.xor(b.toLong()) + } + return hash + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/util/sqldelight/collectors.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/util/sqldelight/collectors.kt new file mode 100644 index 00000000..57096e68 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/util/sqldelight/collectors.kt @@ -0,0 +1,27 @@ +package com.artemchep.keyguard.common.util.sqldelight + +import app.cash.sqldelight.Query +import app.cash.sqldelight.coroutines.asFlow +import app.cash.sqldelight.coroutines.mapToList +import com.artemchep.keyguard.common.io.IO +import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.asFlow +import kotlinx.coroutines.flow.flatMapLatest +import kotlin.coroutines.CoroutineContext + +fun IO>.flatMapQueryToList( + context: CoroutineContext, +) = this + .asFlow() + .flatMapQueryToList(context) + +@OptIn(ExperimentalCoroutinesApi::class) +fun Flow>.flatMapQueryToList( + context: CoroutineContext, +) = this + .flatMapLatest { query -> + query + .asFlow() + .mapToList(context) + } diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/util/toColorInt.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/util/toColorInt.kt new file mode 100644 index 00000000..9b1280ea --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/util/toColorInt.kt @@ -0,0 +1,93 @@ +package com.artemchep.keyguard.common.util + +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.toArgb +import kotlin.math.abs +import kotlin.math.max +import kotlin.math.min + +fun Color.toHex(): String { + val argb = toArgb() + val red = argb.shr(16).and(0xFF) + val green = argb.shr(8).and(0xFF) + val blue = argb.and(0xFF) + return buildString { + append('#') + append(red.toHex()) + append(green.toHex()) + append(blue.toHex()) + } +} + +private fun Int.toHex() = toString(16).uppercase().padStart(2, '0') + +fun String.toColorInt() = this + .trimStart('#') + // Add the alpha component of the + // color + .padStart(8, 'F') + .toLong(16) + .toInt() + +fun Color.hue(): Float { + val hsl = FloatArray(3) + RGBToHSL( + rf = red, + gf = green, + bf = blue, + outHsl = hsl, + ) + return hsl[0] +} + +/** + * Convert RGB components to HSL (hue-saturation-lightness). + * * outHsl[0] is Hue [0, 360) + * * outHsl[1] is Saturation [0, 1] + * * outHsl[2] is Lightness [0, 1] + * + * @param rf red component value [0, 1] + * @param gf green component value [0, 1] + * @param bf blue component value [0, 1] + * @param outHsl 3-element array which holds the resulting HSL components + */ +fun RGBToHSL( + rf: Float, + gf: Float, + bf: Float, + outHsl: FloatArray, +) { + val max = + max(rf.toDouble(), max(gf.toDouble(), bf.toDouble())).toFloat() + val min = + min(rf.toDouble(), min(gf.toDouble(), bf.toDouble())).toFloat() + val deltaMaxMin = max - min + var h: Float + val s: Float + val l = (max + min) / 2f + if (max == min) { + // Monochromatic + s = 0f + h = s + } else { + h = if (max == rf) { + (gf - bf) / deltaMaxMin % 6f + } else if (max == gf) { + (bf - rf) / deltaMaxMin + 2f + } else { + (rf - gf) / deltaMaxMin + 4f + } + s = (deltaMaxMin / (1f - abs((2f * l - 1f).toDouble()))).toFloat() + } + h = h * 60f % 360f + if (h < 0) { + h += 360f + } + outHsl[0] = constrain(h, 0f, 360f) + outHsl[1] = constrain(s, 0f, 1f) + outHsl[2] = constrain(l, 0f, 1f) +} + +private fun constrain(amount: Float, low: Float, high: Float): Float { + return if (amount < low) low else min(amount.toDouble(), high.toDouble()).toFloat() +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/util/withLogTimeOfFirstEvent.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/util/withLogTimeOfFirstEvent.kt new file mode 100644 index 00000000..5c7c14f3 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/util/withLogTimeOfFirstEvent.kt @@ -0,0 +1,36 @@ +package com.artemchep.keyguard.common.util + +import com.artemchep.keyguard.common.service.logging.LogRepository +import com.artemchep.keyguard.common.service.logging.postDebug +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.emitAll +import kotlinx.coroutines.flow.flow +import kotlinx.coroutines.flow.onEach +import kotlinx.datetime.Clock + +inline fun Flow.withLogTimeOfFirstEvent( + logRepository: LogRepository, + tag: String, + crossinline predicate: (T) -> Boolean = { true }, +): Flow = flow { + var hasCompleted = false + val startTime = Clock.System.now() + emitAll( + this@withLogTimeOfFirstEvent.onEach { model -> + if (predicate(model) && !hasCompleted) { + hasCompleted = true + val now = Clock.System.now() + val dt = now - startTime + logRepository.postDebug(tag) { + val suffix = if (model is Collection<*>) { + val size = model.size + "Loaded $size models." + } else { + "" + } + "It took ${dt}ms. to load first portion of data. $suffix" + } + } + }, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/worker/Wrker.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/worker/Wrker.kt new file mode 100644 index 00000000..69729588 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/worker/Wrker.kt @@ -0,0 +1,12 @@ +package com.artemchep.keyguard.common.worker + +import com.artemchep.keyguard.platform.lifecycle.LeLifecycleState +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.flow.Flow + +interface Wrker { + fun start( + scope: CoroutineScope, + flow: Flow, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/common/worker/impl/WrkerImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/worker/impl/WrkerImpl.kt new file mode 100644 index 00000000..cbc71f7d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/common/worker/impl/WrkerImpl.kt @@ -0,0 +1,142 @@ +package com.artemchep.keyguard.common.worker.impl + +import com.artemchep.keyguard.android.downloader.journal.DownloadRepository +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.model.MasterSession +import com.artemchep.keyguard.common.model.PersistedSession +import com.artemchep.keyguard.common.service.logging.LogRepository +import com.artemchep.keyguard.common.service.vault.KeyReadWriteRepository +import com.artemchep.keyguard.common.usecase.CleanUpAttachment +import com.artemchep.keyguard.common.usecase.ClearVaultSession +import com.artemchep.keyguard.common.usecase.GetAccounts +import com.artemchep.keyguard.common.usecase.GetVaultPersist +import com.artemchep.keyguard.common.usecase.GetVaultSession +import com.artemchep.keyguard.common.usecase.PutVaultSession +import com.artemchep.keyguard.common.worker.Wrker +import com.artemchep.keyguard.feature.favicon.Favicon +import com.artemchep.keyguard.platform.lifecycle.LeLifecycleState +import com.artemchep.keyguard.platform.lifecycle.onState +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.coroutineScope +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.collect +import kotlinx.coroutines.flow.collectLatest +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.onEach +import kotlinx.datetime.Clock +import org.kodein.di.DirectDI +import org.kodein.di.direct +import org.kodein.di.instance + +class WrkerImpl( + private val logRepository: LogRepository, + private val getVaultSession: GetVaultSession, + private val putVaultSession: PutVaultSession, + private val getVaultPersist: GetVaultPersist, + private val keyReadWriteRepository: KeyReadWriteRepository, + private val clearVaultSession: ClearVaultSession, + private val downloadRepository: DownloadRepository, + private val cleanUpAttachment: CleanUpAttachment, +) : Wrker { + constructor(directDI: DirectDI) : this( + logRepository = directDI.instance(), + getVaultSession = directDI.instance(), + putVaultSession = directDI.instance(), + getVaultPersist = directDI.instance(), + keyReadWriteRepository = directDI.instance(), + clearVaultSession = directDI.instance(), + downloadRepository = directDI.instance(), + cleanUpAttachment = directDI.instance(), + ) + + override fun start( + scope: CoroutineScope, + flow: Flow, + ) { + flow + .onState { + getVaultSession() + .map { session -> + val key = session as? MasterSession.Key + key?.di?.direct?.instance() + } + .collectLatest { getAccounts -> + if (getAccounts != null) { + coroutineScope { + Favicon.launch(this, getAccounts) + } + } + } + } + flow + .onState { + combine( + getVaultSession(), + getVaultPersist(), + ) { session, persist -> + val persistedMasterKey = if (persist && session is MasterSession.Key) { + session.masterKey + } else { + null + } + persistedMasterKey + } + .onEach { masterKey -> + val persistedSession = if (masterKey != null) { + PersistedSession( + masterKey = masterKey, + createdAt = Clock.System.now(), + persistedAt = Clock.System.now(), + ) + } else { + null + } + keyReadWriteRepository.put(persistedSession).bind() + } + .collect() + } + flow + .onState { + combine( + getVaultSession(), + getVaultPersist(), + ) { session, persist -> + val persistedMasterKey = if (persist && session is MasterSession.Key) { + session.masterKey + } else { + null + } + persistedMasterKey + } + .onEach { masterKey -> + val persistedSession = if (masterKey != null) { + PersistedSession( + masterKey = masterKey, + createdAt = Clock.System.now(), + persistedAt = Clock.System.now(), + ) + } else { + null + } + keyReadWriteRepository.put(persistedSession).bind() + } + .collect() + } + // notifications +// ProcessLifecycleOwner.get().bindBlock { +// getVaultSession() +// .map { session -> +// val key = session as? MasterSession.Key +// key?.di?.direct?.instance() +// } +// .collectLatest { notifications -> +// if (notifications != null) { +// coroutineScope { +// notifications.invoke(this) +// } +// } +// } +// } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/core/session/usecase/AuthTypealias.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/core/session/usecase/AuthTypealias.kt new file mode 100644 index 00000000..12e8d005 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/core/session/usecase/AuthTypealias.kt @@ -0,0 +1,7 @@ +package com.artemchep.keyguard.core.session.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.AuthResult +import com.artemchep.keyguard.common.model.MasterPassword + +typealias AuthMasterKeyUseCase = (MasterPassword) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/core/session/usecase/SubDI.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/core/session/usecase/SubDI.kt new file mode 100644 index 00000000..3c88d323 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/core/session/usecase/SubDI.kt @@ -0,0 +1,510 @@ +package com.artemchep.keyguard.core.session.usecase + +import com.artemchep.keyguard.android.downloader.journal.CipherHistoryOpenedRepository +import com.artemchep.keyguard.android.downloader.journal.CipherHistoryOpenedRepositoryImpl +import com.artemchep.keyguard.android.downloader.journal.GeneratorHistoryRepository +import com.artemchep.keyguard.android.downloader.journal.GeneratorHistoryRepositoryImpl +import com.artemchep.keyguard.common.model.MasterKey +import com.artemchep.keyguard.common.service.hibp.breaches.all.BreachesLocalDataSource +import com.artemchep.keyguard.common.service.hibp.breaches.all.BreachesRemoteDataSource +import com.artemchep.keyguard.common.service.hibp.breaches.all.BreachesRepository +import com.artemchep.keyguard.common.service.hibp.breaches.all.impl.BreachesLocalDataSourceImpl +import com.artemchep.keyguard.common.service.hibp.breaches.all.impl.BreachesRemoteDataSourceImpl +import com.artemchep.keyguard.common.service.hibp.breaches.all.impl.BreachesRepositoryImpl +import com.artemchep.keyguard.common.service.hibp.passwords.PasswordPwnageDataSourceLocal +import com.artemchep.keyguard.common.service.hibp.passwords.PasswordPwnageDataSourceRemote +import com.artemchep.keyguard.common.service.hibp.passwords.PasswordPwnageRepository +import com.artemchep.keyguard.common.service.hibp.passwords.impl.PasswordPwnageDataSourceLocalImpl +import com.artemchep.keyguard.common.service.hibp.passwords.impl.PasswordPwnageDataSourceRemoteImpl +import com.artemchep.keyguard.common.service.hibp.passwords.impl.PasswordPwnageRepositoryImpl +import com.artemchep.keyguard.common.service.relays.repo.GeneratorEmailRelayRepository +import com.artemchep.keyguard.common.service.relays.repo.GeneratorEmailRelayRepositoryImpl +import com.artemchep.keyguard.common.usecase.AddCipher +import com.artemchep.keyguard.common.usecase.AddCipherOpenedHistory +import com.artemchep.keyguard.common.usecase.AddCipherUsedAutofillHistory +import com.artemchep.keyguard.common.usecase.AddCipherUsedPasskeyHistory +import com.artemchep.keyguard.common.usecase.AddEmailRelay +import com.artemchep.keyguard.common.usecase.AddFolder +import com.artemchep.keyguard.common.usecase.AddGeneratorHistory +import com.artemchep.keyguard.common.usecase.AddPasskeyCipher +import com.artemchep.keyguard.common.usecase.AddUriCipher +import com.artemchep.keyguard.common.usecase.ChangeCipherNameById +import com.artemchep.keyguard.common.usecase.ChangeCipherPasswordById +import com.artemchep.keyguard.common.usecase.CheckPasswordLeak +import com.artemchep.keyguard.common.usecase.CheckPasswordSetLeak +import com.artemchep.keyguard.common.usecase.CheckUsernameLeak +import com.artemchep.keyguard.common.usecase.CipherBreachCheck +import com.artemchep.keyguard.common.usecase.CipherDuplicatesCheck +import com.artemchep.keyguard.common.usecase.CipherExpiringCheck +import com.artemchep.keyguard.common.usecase.CipherFieldSwitchToggle +import com.artemchep.keyguard.common.usecase.CipherIncompleteCheck +import com.artemchep.keyguard.common.usecase.CipherMerge +import com.artemchep.keyguard.common.usecase.CipherRemovePasswordHistory +import com.artemchep.keyguard.common.usecase.CipherRemovePasswordHistoryById +import com.artemchep.keyguard.common.usecase.CipherToolbox +import com.artemchep.keyguard.common.usecase.CipherToolboxImpl +import com.artemchep.keyguard.common.usecase.CipherUnsecureUrlAutoFix +import com.artemchep.keyguard.common.usecase.CipherUnsecureUrlCheck +import com.artemchep.keyguard.common.usecase.CopyCipherById +import com.artemchep.keyguard.common.usecase.DownloadAttachment +import com.artemchep.keyguard.common.usecase.FavouriteCipherById +import com.artemchep.keyguard.common.usecase.GetAccountHasError +import com.artemchep.keyguard.common.usecase.GetAccountStatus +import com.artemchep.keyguard.common.usecase.GetAccounts +import com.artemchep.keyguard.common.usecase.GetAccountsHasError +import com.artemchep.keyguard.common.usecase.GetCanAddAccount +import com.artemchep.keyguard.common.usecase.GetCipherOpenedCount +import com.artemchep.keyguard.common.usecase.GetCipherOpenedHistory +import com.artemchep.keyguard.common.usecase.GetCiphers +import com.artemchep.keyguard.common.usecase.GetCollections +import com.artemchep.keyguard.common.usecase.GetEmailRelays +import com.artemchep.keyguard.common.usecase.GetEnvSendUrl +import com.artemchep.keyguard.common.usecase.GetFingerprint +import com.artemchep.keyguard.common.usecase.GetFolderTree +import com.artemchep.keyguard.common.usecase.GetFolderTreeById +import com.artemchep.keyguard.common.usecase.GetFolders +import com.artemchep.keyguard.common.usecase.GetGeneratorHistory +import com.artemchep.keyguard.common.usecase.GetMetas +import com.artemchep.keyguard.common.usecase.GetOrganizations +import com.artemchep.keyguard.common.usecase.GetProfiles +import com.artemchep.keyguard.common.usecase.GetSends +import com.artemchep.keyguard.common.usecase.GetShouldRequestAppReview +import com.artemchep.keyguard.common.usecase.MergeFolderById +import com.artemchep.keyguard.common.usecase.MoveCipherToFolderById +import com.artemchep.keyguard.common.usecase.PutAccountColorById +import com.artemchep.keyguard.common.usecase.PutAccountMasterPasswordHintById +import com.artemchep.keyguard.common.usecase.PutAccountNameById +import com.artemchep.keyguard.common.usecase.RePromptCipherById +import com.artemchep.keyguard.common.usecase.RemoveAccountById +import com.artemchep.keyguard.common.usecase.RemoveAccounts +import com.artemchep.keyguard.common.usecase.RemoveCipherById +import com.artemchep.keyguard.common.usecase.RemoveEmailRelayById +import com.artemchep.keyguard.common.usecase.RemoveFolderById +import com.artemchep.keyguard.common.usecase.RemoveGeneratorHistory +import com.artemchep.keyguard.common.usecase.RemoveGeneratorHistoryById +import com.artemchep.keyguard.common.usecase.RenameFolderById +import com.artemchep.keyguard.common.usecase.RestoreCipherById +import com.artemchep.keyguard.common.usecase.RetryCipher +import com.artemchep.keyguard.common.usecase.RotateDeviceIdUseCase +import com.artemchep.keyguard.common.usecase.SupervisorRead +import com.artemchep.keyguard.common.usecase.SyncAll +import com.artemchep.keyguard.common.usecase.SyncById +import com.artemchep.keyguard.common.usecase.TrashCipherByFolderId +import com.artemchep.keyguard.common.usecase.TrashCipherById +import com.artemchep.keyguard.common.usecase.Watchdog +import com.artemchep.keyguard.common.usecase.WatchdogImpl +import com.artemchep.keyguard.common.usecase.impl.AddEmailRelayImpl +import com.artemchep.keyguard.common.usecase.impl.AddGeneratorHistoryImpl +import com.artemchep.keyguard.common.usecase.impl.DownloadAttachmentImpl2 +import com.artemchep.keyguard.common.usecase.impl.GetAccountStatusImpl +import com.artemchep.keyguard.common.usecase.impl.GetCanAddAccountImpl +import com.artemchep.keyguard.common.usecase.impl.GetEnvSendUrlImpl +import com.artemchep.keyguard.common.usecase.impl.GetGeneratorHistoryImpl +import com.artemchep.keyguard.common.usecase.impl.GetShouldRequestAppReviewImpl +import com.artemchep.keyguard.common.usecase.impl.RemoveGeneratorHistoryByIdImpl +import com.artemchep.keyguard.common.usecase.impl.RemoveGeneratorHistoryImpl +import com.artemchep.keyguard.core.store.DatabaseSyncer +import com.artemchep.keyguard.core.store.bitwarden.BitwardenCipherRepositoryImpl +import com.artemchep.keyguard.core.store.bitwarden.BitwardenCollectionRepositoryImpl +import com.artemchep.keyguard.core.store.bitwarden.BitwardenFolderRepositoryImpl +import com.artemchep.keyguard.core.store.bitwarden.BitwardenMetaRepositoryImpl +import com.artemchep.keyguard.core.store.bitwarden.BitwardenOrganizationRepositoryImpl +import com.artemchep.keyguard.core.store.bitwarden.BitwardenProfileRepositoryImpl +import com.artemchep.keyguard.core.store.bitwarden.BitwardenSendRepositoryImpl +import com.artemchep.keyguard.core.store.bitwarden.BitwardenTokenRepositoryImpl +import com.artemchep.keyguard.provider.bitwarden.repository.BitwardenCipherRepository +import com.artemchep.keyguard.provider.bitwarden.repository.BitwardenCollectionRepository +import com.artemchep.keyguard.provider.bitwarden.repository.BitwardenFolderRepository +import com.artemchep.keyguard.provider.bitwarden.repository.BitwardenMetaRepository +import com.artemchep.keyguard.provider.bitwarden.repository.BitwardenOrganizationRepository +import com.artemchep.keyguard.provider.bitwarden.repository.BitwardenProfileRepository +import com.artemchep.keyguard.provider.bitwarden.repository.BitwardenSendRepository +import com.artemchep.keyguard.provider.bitwarden.repository.BitwardenTokenRepository +import com.artemchep.keyguard.provider.bitwarden.usecase.AddCipherImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.AddCipherOpenedHistoryImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.AddCipherUsedAutofillHistoryImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.AddCipherUsedPasskeyHistoryImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.AddFolderImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.AddPasskeyCipherImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.AddUriCipherImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.ChangeCipherNameByIdImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.ChangeCipherPasswordByIdImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.CheckPasswordLeakImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.CheckPasswordSetLeakImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.CheckUsernameLeakImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.CipherBreachCheckImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.CipherDuplicatesCheckImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.CipherExpiringCheckImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.CipherFieldSwitchToggleImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.CipherIncompleteCheckImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.CipherMergeImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.CipherRemovePasswordHistoryByIdImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.CipherRemovePasswordHistoryImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.CipherUnsecureUrlAutoFixImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.CipherUnsecureUrlCheckImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.CopyCipherByIdImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.FavouriteCipherByIdImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.GetAccountHasErrorImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.GetAccountsHasErrorImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.GetAccountsImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.GetCipherOpenedCountImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.GetCipherOpenedHistoryImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.GetCiphersImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.GetCollectionsImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.GetEmailRelaysImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.GetFingerprintImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.GetFolderTreeByIdImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.GetFolderTreeImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.GetFoldersImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.GetMetasImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.GetOrganizationsImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.GetProfilesImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.GetSendsImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.MergeFolderByIdImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.MoveCipherToFolderByIdImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.PutAccountColorByIdImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.PutAccountMasterPasswordHintByIdImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.PutAccountNameByIdImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.RePromptCipherByIdImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.RemoveAccountByIdImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.RemoveAccountsImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.RemoveCipherByIdImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.RemoveEmailRelayByIdImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.RemoveFolderByIdImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.RenameFolderByIdImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.RestoreCipherByIdImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.RetryCipherImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.SyncAllImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.SyncByIdImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.TrashCipherByFolderIdImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.TrashCipherByIdImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.internal.AddAccount +import com.artemchep.keyguard.provider.bitwarden.usecase.internal.AddAccountImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.internal.RequestEmailTfa +import com.artemchep.keyguard.provider.bitwarden.usecase.internal.RequestEmailTfaImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.internal.SyncByToken +import com.artemchep.keyguard.provider.bitwarden.usecase.internal.SyncByTokenImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.util.ModifyCipherById +import com.artemchep.keyguard.provider.bitwarden.usecase.util.ModifyDatabase +import com.artemchep.keyguard.provider.bitwarden.usecase.util.ModifyFolderById +import com.artemchep.keyguard.provider.bitwarden.usecase.util.ModifyProfileById +import org.kodein.di.DI +import org.kodein.di.bindSingleton +import org.kodein.di.instance + +expect fun DI.Builder.createSubDi( + masterKey: MasterKey, +) + +fun DI.Builder.createSubDi2( + masterKey: MasterKey, +) { + bindSingleton { + DownloadAttachmentImpl2(this) + } + bindSingleton { + GetCanAddAccountImpl(this) + } + bindSingleton { + GetEnvSendUrlImpl( + directDI = this, + ) + } + bindSingleton { + GetEmailRelaysImpl(this) + } + bindSingleton { + AddEmailRelayImpl(this) + } + bindSingleton { + RemoveEmailRelayByIdImpl(this) + } + bindSingleton { + GetAccountsImpl(this) + } + bindSingleton { + GetAccountStatusImpl(this) + } + bindSingleton { + GetAccountsHasErrorImpl(this) + } + bindSingleton { + GetAccountHasErrorImpl(this) + } + bindSingleton { + GetCiphersImpl(this) + } + bindSingleton { + GetSendsImpl(this) + } + bindSingleton { + GetCollectionsImpl(this) + } + bindSingleton { + GetOrganizationsImpl(this) + } + bindSingleton { + GetFingerprintImpl(this) + } + bindSingleton { + GetFoldersImpl(this) + } + bindSingleton { + GetFolderTreeImpl(this) + } + bindSingleton { + GetFolderTreeByIdImpl(this) + } + bindSingleton { + GetProfilesImpl(this) + } + bindSingleton { + GetMetasImpl(this) + } + bindSingleton { + AddAccountImpl(this) + } + bindSingleton { + RequestEmailTfaImpl(this) + } + bindSingleton { + RotateDeviceIdUseCase(this) + } + bindSingleton { + RemoveAccountsImpl(this) + } + bindSingleton { + RemoveAccountByIdImpl(this) + } + bindSingleton { + ModifyCipherById(this) + } + bindSingleton { + ModifyFolderById(this) + } + bindSingleton { + ModifyProfileById(this) + } + bindSingleton { + ModifyDatabase(this) + } + bindSingleton { + TrashCipherByIdImpl(this) + } + bindSingleton { + TrashCipherByFolderIdImpl(this) + } + bindSingleton { + RestoreCipherByIdImpl(this) + } + bindSingleton { + MoveCipherToFolderByIdImpl(this) + } + bindSingleton { + RemoveCipherByIdImpl(this) + } + bindSingleton { + RemoveFolderByIdImpl(this) + } + bindSingleton { + MergeFolderByIdImpl(this) + } + bindSingleton { + ChangeCipherPasswordByIdImpl(this) + } + bindSingleton { + ChangeCipherNameByIdImpl(this) + } + bindSingleton { + RetryCipherImpl(this) + } + bindSingleton { + CipherFieldSwitchToggleImpl(this) + } + bindSingleton { + CipherUnsecureUrlAutoFixImpl(this) + } + bindSingleton { + CipherToolboxImpl(this) + } + bindSingleton { + CipherUnsecureUrlCheckImpl(this) + } + bindSingleton { + CipherIncompleteCheckImpl(this) + } + bindSingleton { + CipherMergeImpl(this) + } + bindSingleton { + CipherExpiringCheckImpl(this) + } + bindSingleton { + CipherBreachCheckImpl(this) + } + bindSingleton { + CipherDuplicatesCheckImpl(this) + } + bindSingleton { + RenameFolderByIdImpl(this) + } + bindSingleton { + CheckPasswordLeakImpl(this) + } + bindSingleton { + CheckPasswordSetLeakImpl(this) + } + bindSingleton { + CheckUsernameLeakImpl(this) + } + bindSingleton { + AddFolderImpl(this) + } + bindSingleton { + PutAccountColorByIdImpl(this) + } + bindSingleton { + PutAccountMasterPasswordHintByIdImpl(this) + } + bindSingleton { + PutAccountNameByIdImpl(this) + } + bindSingleton { + GetGeneratorHistoryImpl( + directDI = this, + ) + } + bindSingleton { + RemoveGeneratorHistoryImpl( + directDI = this, + ) + } + bindSingleton { + RemoveGeneratorHistoryByIdImpl( + directDI = this, + ) + } + bindSingleton { + AddGeneratorHistoryImpl( + directDI = this, + ) + } + bindSingleton { + AddCipherImpl(this) + } + bindSingleton { + AddCipherOpenedHistoryImpl(this) + } + bindSingleton { + AddCipherUsedAutofillHistoryImpl(this) + } + bindSingleton { + AddCipherUsedPasskeyHistoryImpl(this) + } + bindSingleton { + GetCipherOpenedHistoryImpl(this) + } + bindSingleton { + GetCipherOpenedCountImpl(this) + } + bindSingleton { + GetShouldRequestAppReviewImpl(this) + } + bindSingleton { + CipherHistoryOpenedRepositoryImpl(this) + } + bindSingleton { + GeneratorHistoryRepositoryImpl(this) + } + bindSingleton { + GeneratorEmailRelayRepositoryImpl(this) + } + bindSingleton { + PasswordPwnageDataSourceLocalImpl(this) + } + bindSingleton { + PasswordPwnageDataSourceRemoteImpl(this) + } + bindSingleton { + PasswordPwnageRepositoryImpl(this) + } + bindSingleton { + BreachesRemoteDataSourceImpl(this) + } + bindSingleton { + BreachesLocalDataSourceImpl(this) + } + bindSingleton { + BreachesRepositoryImpl(this) + } + bindSingleton { + AddUriCipherImpl(this) + } + bindSingleton { + AddPasskeyCipherImpl(this) + } + bindSingleton { + FavouriteCipherByIdImpl(this) + } + bindSingleton { + RePromptCipherByIdImpl(this) + } + bindSingleton { + CopyCipherByIdImpl(this) + } + bindSingleton { + CipherRemovePasswordHistoryByIdImpl(this) + } + bindSingleton { + CipherRemovePasswordHistoryImpl(this) + } + bindSingleton { + SyncAllImpl(this) + } + bindSingleton { + SyncByIdImpl(this) + } + bindSingleton { + SyncByTokenImpl(this) + } + bindSingleton { + WatchdogImpl() + } + bindSingleton { + instance() + } + bindSingleton { + instance() + } + + bindSingleton { masterKey } + bindSingleton { + BitwardenTokenRepositoryImpl(this) + } + bindSingleton { + BitwardenSendRepositoryImpl(this) + } + bindSingleton { + BitwardenCipherRepositoryImpl(this) + } + bindSingleton { + BitwardenCollectionRepositoryImpl(this) + } + bindSingleton { + BitwardenOrganizationRepositoryImpl(this) + } + bindSingleton { + BitwardenFolderRepositoryImpl(this) + } + bindSingleton { + BitwardenProfileRepositoryImpl(this) + } + bindSingleton { + BitwardenMetaRepositoryImpl(this) + } + bindSingleton { + DatabaseSyncer( + cryptoGenerator = instance(), + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/core/session/util/EncodeByCipher.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/core/session/util/EncodeByCipher.kt new file mode 100644 index 00000000..2a94749f --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/core/session/util/EncodeByCipher.kt @@ -0,0 +1,8 @@ +package com.artemchep.keyguard.core.session.util + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.platform.LeCipher + +expect fun ByteArray.encode(cipher: IO): IO + +expect fun IO.encode(cipher: IO): IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/DatabaseDispatcher.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/DatabaseDispatcher.kt new file mode 100644 index 00000000..61c60f43 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/DatabaseDispatcher.kt @@ -0,0 +1,3 @@ +package com.artemchep.keyguard.core.store + +object DatabaseDispatcher diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/DatabaseManager.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/DatabaseManager.kt new file mode 100644 index 00000000..f87fecf9 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/DatabaseManager.kt @@ -0,0 +1,220 @@ +package com.artemchep.keyguard.core.store + +import app.cash.sqldelight.ColumnAdapter +import app.cash.sqldelight.db.SqlDriver +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.io.effectMap +import com.artemchep.keyguard.common.io.io +import com.artemchep.keyguard.common.io.map +import com.artemchep.keyguard.common.io.retry +import com.artemchep.keyguard.common.io.shared +import com.artemchep.keyguard.common.model.MasterKey +import com.artemchep.keyguard.common.service.logging.LogRepository +import com.artemchep.keyguard.core.store.bitwarden.BitwardenCipher +import com.artemchep.keyguard.core.store.bitwarden.BitwardenCollection +import com.artemchep.keyguard.core.store.bitwarden.BitwardenFolder +import com.artemchep.keyguard.core.store.bitwarden.BitwardenMeta +import com.artemchep.keyguard.core.store.bitwarden.BitwardenOrganization +import com.artemchep.keyguard.core.store.bitwarden.BitwardenProfile +import com.artemchep.keyguard.core.store.bitwarden.BitwardenSend +import com.artemchep.keyguard.core.store.bitwarden.BitwardenToken +import com.artemchep.keyguard.data.CipherUsageHistory +import com.artemchep.keyguard.data.Database +import com.artemchep.keyguard.data.GeneratorEmailRelay +import com.artemchep.keyguard.data.GeneratorHistory +import com.artemchep.keyguard.data.bitwarden.Account +import com.artemchep.keyguard.data.bitwarden.Cipher +import com.artemchep.keyguard.data.bitwarden.Collection +import com.artemchep.keyguard.data.bitwarden.Folder +import com.artemchep.keyguard.data.bitwarden.Meta +import com.artemchep.keyguard.data.bitwarden.Organization +import com.artemchep.keyguard.data.bitwarden.Profile +import com.artemchep.keyguard.data.bitwarden.Send +import com.artemchep.keyguard.data.pwnage.AccountBreach +import com.artemchep.keyguard.data.pwnage.PasswordBreach +import com.artemchep.keyguard.provider.bitwarden.entity.HibpBreachGroup +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.sync.Mutex +import kotlinx.coroutines.sync.withLock +import kotlinx.datetime.Instant +import kotlinx.serialization.InternalSerializationApi +import kotlinx.serialization.KSerializer +import kotlinx.serialization.json.Json +import kotlinx.serialization.serializer + +interface DatabaseManager { + fun get(): IO + + fun mutate( + block: suspend (Database) -> T, + ): IO + + /** + * Changes the password of the database. After executing the function, you must create a + * new database manager with a new master key. + */ + fun changePassword(newMasterKey: MasterKey): IO +} + +interface SqlManager { + fun create( + masterKey: MasterKey, + databaseFactory: (SqlDriver) -> Database, + ): IO +} + +interface SqlHelper { + val driver: SqlDriver + + val database: Database + + /** + * Changes the password of the database. After executing the function, you should create a + * new database manager with a new master key. + */ + fun changePassword(newMasterKey: MasterKey): IO +} + +class DatabaseManagerImpl( + private val logRepository: LogRepository, + private val json: Json, + private val sqlManager: SqlManager, + masterKey: MasterKey, +) : DatabaseManager { + companion object { + private const val TAG = "DatabaseManager" + + private val mutex = Mutex() + } + + private val bitwardenCipherToStringAdapter = BitwardenCipherToStringAdapter(json) + private val bitwardenSendToStringAdapter = BitwardenSendToStringAdapter(json) + private val bitwardenCollectionToStringAdapter = BitwardenCollectionToStringAdapter(json) + private val bitwardenFolderToStringAdapter = BitwardenFolderToStringAdapter(json) + private val bitwardenMetaToStringAdapter = BitwardenMetaToStringAdapter(json) + private val bitwardenOrganizationToStringAdapter = BitwardenOrganizationToStringAdapter(json) + private val bitwardenProfileToStringAdapter = BitwardenProfileToStringAdapter(json) + private val bitwardenTokenToStringAdapter = BitwardenTokenToStringAdapter(json) + private val hibpAccountBreachToStringAdapter = HibpAccountBreachToStringAdapter(json) + + private val dbIo = io(masterKey) + .effectMap { masterKey -> + val databaseFactory = { driver: SqlDriver -> + Database( + driver = driver, + cipherUsageHistoryAdapter = CipherUsageHistory.Adapter(InstantToLongAdapter), + generatorHistoryAdapter = GeneratorHistory.Adapter(InstantToLongAdapter), + generatorEmailRelayAdapter = GeneratorEmailRelay.Adapter(InstantToLongAdapter), + cipherAdapter = Cipher.Adapter(bitwardenCipherToStringAdapter), + sendAdapter = Send.Adapter(bitwardenSendToStringAdapter), + collectionAdapter = Collection.Adapter(bitwardenCollectionToStringAdapter), + folderAdapter = Folder.Adapter(bitwardenFolderToStringAdapter), + metaAdapter = Meta.Adapter(bitwardenMetaToStringAdapter), + organizationAdapter = Organization.Adapter(bitwardenOrganizationToStringAdapter), + profileAdapter = Profile.Adapter(bitwardenProfileToStringAdapter), + accountAdapter = Account.Adapter(bitwardenTokenToStringAdapter), + passwordBreachAdapter = PasswordBreach.Adapter( + updatedAtAdapter = InstantToLongAdapter, + ), + accountBreachAdapter = AccountBreach.Adapter( + updatedAtAdapter = InstantToLongAdapter, + data_Adapter = hibpAccountBreachToStringAdapter, + ), + ) + } + val sqlHelper = sqlManager + .create(masterKey, databaseFactory) + .bind() + sqlHelper + } + .retry { e, attempt -> + e.printStackTrace() + false + } + .shared() + + override fun get() = dbIo.map { it.database } + + override fun mutate( + block: suspend (Database) -> T, + ) = dbIo + .effectMap(Dispatchers.IO) { db -> + mutex.withLock { + block(db.database) + } + } + + /** + * Changes the password of the database. After executing the function, you must create a + * new database manager with a new master key. + */ + override fun changePassword(newMasterKey: MasterKey) = dbIo + .effectMap(Dispatchers.IO) { db -> + mutex.withLock { + db.changePassword(newMasterKey) + .bind() + } + } +} + +private object InstantToLongAdapter : ColumnAdapter { + override fun decode(databaseValue: Long) = Instant.fromEpochMilliseconds(databaseValue) + + override fun encode(value: Instant) = value.toEpochMilliseconds() +} + +private class BitwardenCipherToStringAdapter( + private val json: Json, +) : ColumnAdapter by ObjectToStringAdapter(json) + +private class BitwardenSendToStringAdapter( + private val json: Json, +) : ColumnAdapter by ObjectToStringAdapter(json) + +private class BitwardenCollectionToStringAdapter( + private val json: Json, +) : ColumnAdapter by ObjectToStringAdapter(json) + +private class BitwardenFolderToStringAdapter( + private val json: Json, +) : ColumnAdapter by ObjectToStringAdapter(json) + +private class BitwardenMetaToStringAdapter( + private val json: Json, +) : ColumnAdapter by ObjectToStringAdapter(json) + +private class BitwardenOrganizationToStringAdapter( + private val json: Json, +) : ColumnAdapter by ObjectToStringAdapter(json) + +private class BitwardenProfileToStringAdapter( + private val json: Json, +) : ColumnAdapter by ObjectToStringAdapter(json) + +private class BitwardenTokenToStringAdapter( + private val json: Json, +) : ColumnAdapter by ObjectToStringAdapter(json) + +private class HibpAccountBreachToStringAdapter( + private val json: Json, +) : ColumnAdapter by ObjectToStringAdapter(json) + +private class ObjectToStringAdapter( + private val serializer: KSerializer, + private val json: Json, +) : ColumnAdapter { + companion object { + @OptIn(InternalSerializationApi::class) + inline operator fun invoke( + json: Json, + ) = ObjectToStringAdapter( + serializer = T::class.serializer(), + json = json, + ) + } + + override fun decode(databaseValue: String) = json.decodeFromString(serializer, databaseValue) + + override fun encode(value: T) = json.encodeToString(serializer, value) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/DatabaseSyncer.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/DatabaseSyncer.kt new file mode 100644 index 00000000..d9e3c35e --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/DatabaseSyncer.kt @@ -0,0 +1,171 @@ +package com.artemchep.keyguard.core.store + +import com.artemchep.keyguard.common.service.crypto.CryptoGenerator +import kotlinx.coroutines.CancellationException +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Job +import kotlinx.coroutines.suspendCancellableCoroutine +import kotlinx.coroutines.sync.Mutex +import kotlinx.coroutines.yield +import kotlin.contracts.ExperimentalContracts +import kotlin.contracts.InvocationKind +import kotlin.contracts.contract + +class DatabaseSyncer( + private val cryptoGenerator: CryptoGenerator, +) { + sealed interface Key { + data class User( + val id: String, + ) : Key + + data class Profile( + val id: String, + ) : Key + + data class Cipher( + val id: String, + ) : Key + + data class Folder( + val id: String, + ) : Key + + data class Collection( + val id: String, + ) : Key + + data class Organization( + val id: String, + ) : Key + } + + private interface SimpleMutex { + /** + * Locks this mutex, suspending caller while the mutex is locked. + * + * This suspending function is cancellable. If the [Job] of the current coroutine is cancelled or completed while this + * function is suspended, this function immediately resumes with [CancellationException]. + * There is a **prompt cancellation guarantee**. If the job was cancelled while this function was + * suspended, it will not resume successfully. See [suspendCancellableCoroutine] documentation for low-level details. + * This function releases the lock if it was already acquired by this function before the [CancellationException] + * was thrown. + * + * Note that this function does not check for cancellation when it is not suspended. + * Use [yield] or [CoroutineScope.isActive] to periodically check for cancellation in tight loops if needed. + * + * This function is fair; suspended callers are resumed in first-in-first-out order. + * + * @param owner Optional owner token for debugging. When `owner` is specified (non-null value) and this mutex + * is already locked with the same token (same identity), this function throws [IllegalStateException]. + */ + suspend fun lock(owner: Any? = null) + + /** + * Unlocks this mutex. Throws [IllegalStateException] if invoked on a mutex that is not locked or + * was locked with a different owner token (by identity). + * + * @param owner Optional owner token for debugging. When `owner` is specified (non-null value) and this mutex + * was locked with the different token (by identity), this function throws [IllegalStateException]. + */ + fun unlock(owner: Any? = null) + } + + /** + * Executes the given [action] under this mutex's lock. + * + * @param owner Optional owner token for debugging. When `owner` is specified (non-null value) and this mutex + * is already locked with the same token (same identity), this function throws [IllegalStateException]. + * + * @return the return value of the action. + */ + @OptIn(ExperimentalContracts::class) + private suspend inline fun SimpleMutex.withLock(owner: Any? = null, action: () -> T): T { + contract { + callsInPlace(action, InvocationKind.EXACTLY_ONCE) + } + + lock(owner) + try { + return action() + } finally { + unlock(owner) + } + } + + private data class Entry( + val key: String, + val mutex: SimpleMutex, + ) + + private val map: MutableMap> = mutableMapOf() + + suspend fun withLock( + vararg keys: Key, + block: suspend () -> T, + ): T { + val id = cryptoGenerator.uuid() + try { + val mutex = synchronized(map) { + val entry = kotlin.run { + val existingLocks = keys.flatMap { key -> map[key].orEmpty() } + val newLock: SimpleMutex = + object : SimpleMutex { + private val mutex = Mutex() + + override suspend fun lock(owner: Any?) { + existingLocks.forEach { entry -> entry.mutex.lock(owner) } + mutex.lock(owner) + } + + override fun unlock(owner: Any?) { + mutex.unlock(owner) + existingLocks.forEach { entry -> entry.mutex.unlock(owner) } + } + } + Entry( + key = id, + mutex = newLock, + ) + } + + keys.forEach { key -> + val list = map[key] + if (list != null) { + list += entry + } else { + val newList = mutableListOf(entry) + map[key] = newList + } + } + + entry.mutex + } + return mutex.withLock { + block() + } + } finally { + synchronized(map) { + keys.forEach { key -> + val list = map[key] + if (list != null) { + var i = 0 + while (i < list.size) { + val el = list[i] + if (el.key == id) { + list.removeAt(i) + } else { + i++ + } + } + if (list.isEmpty()) { + map.remove(key) + } + } else { + error("Trying to remove mutex that does not exist!") + } + } + } + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/bitwarden/BitwardenCipher.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/bitwarden/BitwardenCipher.kt new file mode 100644 index 00000000..963ebf82 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/bitwarden/BitwardenCipher.kt @@ -0,0 +1,297 @@ +package com.artemchep.keyguard.core.store.bitwarden + +import arrow.optics.optics +import kotlinx.datetime.Clock +import kotlinx.datetime.Instant +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import java.util.UUID +import kotlin.time.Duration.Companion.days + +@Serializable +@optics +data class BitwardenCipher( + /** + * Id of the bitwarden account, generated on + * login. + */ + val accountId: String, + val cipherId: String, + val folderId: String? = null, + val organizationId: String? = null, + val collectionIds: Set = emptySet(), + val revisionDate: Instant, + val createdDate: Instant? = null, + val deletedDate: Instant? = null, + // service fields + override val service: BitwardenService, + // common + val name: String?, + val notes: String?, + val favorite: Boolean, + val fields: List = emptyList(), + val attachments: List = emptyList(), + val reprompt: RepromptType, + // types + val type: Type, + val login: Login? = null, + val secureNote: SecureNote? = null, + val card: Card? = null, + val identity: Identity? = null, +) : BitwardenService.Has { + companion object; + + override fun withService(service: BitwardenService) = copy(service = service) + + @Serializable + enum class Type { + Login, + SecureNote, + Card, + Identity, + } + + @Serializable + sealed interface Attachment { + companion object; + + val id: String + val url: String? + + @Serializable + @SerialName("remote") + data class Remote( + override val id: String, + override val url: String?, + val fileName: String, + val keyBase64: String, + val size: Long, + ) : Attachment { + companion object + } + + @Serializable + @SerialName("local") + data class Local( + override val id: String, + override val url: String, + val fileName: String, + val size: Long? = null, + ) : Attachment { + companion object + } + } + + @Serializable + data class Field( + val name: String? = null, + val value: String? = null, + val linkedId: LinkedId? = null, + val type: Type, + ) { + @Serializable + enum class Type { + Text, + Hidden, + Boolean, + Linked, + } + + @Serializable + enum class LinkedId { + Login_Username, + Login_Password, + + // card + Card_CardholderName, + Card_ExpMonth, + Card_ExpYear, + Card_Code, + Card_Brand, + Card_Number, + + // identity + Identity_Title, + Identity_MiddleName, + Identity_Address1, + Identity_Address2, + Identity_Address3, + Identity_City, + Identity_State, + Identity_PostalCode, + Identity_Country, + Identity_Company, + Identity_Email, + Identity_Phone, + Identity_Ssn, + Identity_Username, + Identity_PassportNumber, + Identity_LicenseNumber, + Identity_FirstName, + Identity_LastName, + Identity_FullName, + ; + + companion object + } + } + + @Serializable + enum class RepromptType { + None, + Password, + } + + // + // Types + // + + @optics + @Serializable + data class Login( + val username: String? = null, + val password: String? = null, + val passwordStrength: PasswordStrength? = null, + val passwordRevisionDate: Instant? = null, + val passwordHistory: List = emptyList(), + val uris: List, + val fido2Credentials: List = emptyList(), + val totp: String? = null, + ) { + companion object; + + @Serializable + data class PasswordHistory( + val password: String, + val lastUsedDate: Instant, + ) { + val id = "$password|timestamp=$lastUsedDate" + } + + @Serializable + data class PasswordStrength( + val password: String, + val crackTimeSeconds: Long, + val version: Long, + ) + + @Serializable + data class Uri( + val uri: String? = null, + val match: MatchType? = null, + ) { + @Serializable + enum class MatchType { + Domain, + Host, + StartsWith, + Exact, + RegularExpression, + Never, + } + } + + @Serializable + data class Fido2Credentials( + val credentialId: String? = null, + val keyType: String, + val keyAlgorithm: String, + val keyCurve: String, + val keyValue: String, + val rpId: String, + val rpName: String, + val counter: String, + val userHandle: String, + val userName: String? = null, + val userDisplayName: String? = null, + val discoverable: String, + val creationDate: Instant, + ) + } + + @Serializable + data class Card( + val cardholderName: String? = null, + val brand: String? = null, + val number: String? = null, + val expMonth: String? = null, + val expYear: String? = null, + val code: String? = null, + ) { + companion object + } + + @Serializable + data class Identity( + val title: String? = null, + val firstName: String? = null, + val middleName: String? = null, + val lastName: String? = null, + val address1: String? = null, + val address2: String? = null, + val address3: String? = null, + val city: String? = null, + val state: String? = null, + val postalCode: String? = null, + val country: String? = null, + val company: String? = null, + val email: String? = null, + val phone: String? = null, + val ssn: String? = null, + val username: String? = null, + val passportNumber: String? = null, + val licenseNumber: String? = null, + ) { + companion object + } + + @Serializable + data class SecureNote( + val type: Type = Type.Generic, + ) { + companion object + + @Serializable + enum class Type { + Generic, + } + } +} + +fun BitwardenCipher.Companion.generated(): BitwardenCipher { + val accountIds = listOf( + "account_a", + "account_b", + "account_c", + ) + val folderIds = listOf( + "folder_a", + "folder_b", + "folder_c", + null, + ) + val name = listOf( + "**Lorem ipsum dolor sit amet**, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim medicorum scientiam non ipsius artis, sed bonae valetudinis causa probamus, et gubernatoris ars, quia bene navigandi rationem habet, utilitate, non arte.\n" + + "\n" + + "Qui officia deserunt mollit anim id est voluptatem et dolorem. Ad haec et quae fugiamus refert omnia. Quod quamquam Aristippi est a Chrysippo praetermissum in Stoicis? Legimus tamen Diogenem, Antipatrum, Mnesarchum, Panaetium, multos alios in primisque familiarem nostrum Posidonium. Quid? Theophrastus mediocriterne delectat, cum tractat locos ab Aristotele ante tractatos? Quid? Epicurei num desistunt de isdem, de quibus ante dictum.\n" + + "\n" + + "Cum ita esset affecta, secundum non recte, si voluptas esset bonum, fuisse desideraturam. Idcirco enim non desideraret, quia, quod dolore caret, id in hominum consuetudine facilius fieri poterit et iustius?", + ) + return BitwardenCipher( + cipherId = UUID.randomUUID().toString(), + accountId = accountIds.random(), + folderId = folderIds.random(), + revisionDate = Clock.System.now().minus(20L.days), + service = BitwardenService(), + favorite = Math.random() > 0.5f, + reprompt = BitwardenCipher.RepromptType.None, + name = name.random(), + notes = name.random(), + type = BitwardenCipher.Type.Login, + login = BitwardenCipher.Login( + username = "test", + password = "qwerty", + uris = listOf(), + ), + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/bitwarden/BitwardenCipherRepositoryImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/bitwarden/BitwardenCipherRepositoryImpl.kt new file mode 100644 index 00000000..9a331cc5 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/bitwarden/BitwardenCipherRepositoryImpl.kt @@ -0,0 +1,64 @@ +package com.artemchep.keyguard.core.store.bitwarden + +import app.cash.sqldelight.coroutines.asFlow +import app.cash.sqldelight.coroutines.mapToList +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.effectMap +import com.artemchep.keyguard.common.io.toIO +import com.artemchep.keyguard.core.store.DatabaseDispatcher +import com.artemchep.keyguard.core.store.DatabaseManager +import com.artemchep.keyguard.provider.bitwarden.repository.BitwardenCipherRepository +import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.asFlow +import kotlinx.coroutines.flow.catch +import kotlinx.coroutines.flow.flatMapLatest +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.shareIn +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class BitwardenCipherRepositoryImpl( + private val databaseManager: DatabaseManager, + private val dispatcher: CoroutineDispatcher, +) : BitwardenCipherRepository { + constructor(directDI: DirectDI) : this( + databaseManager = directDI.instance(), + dispatcher = directDI.instance(tag = DatabaseDispatcher), + ) + + override fun get(): Flow> = databaseManager + .get() + .asFlow() + .flatMapLatest { db -> + db.cipherQueries + .get() + .asFlow() + .mapToList(dispatcher) + .catch { + } + .map { + it.map { it.data_ } + } + } + .shareIn(GlobalScope, SharingStarted.WhileSubscribed(1000L), replay = 1) + + override fun getById(id: String): IO = get() + .toIO() + .effectMap { ciphers -> + ciphers.firstOrNull { it.cipherId == id } + } + + override fun put(model: BitwardenCipher): IO = databaseManager + .get() + .effectMap(dispatcher) { + it.cipherQueries.insert( + accountId = model.accountId, + cipherId = model.cipherId, + folderId = null, + data = model, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/bitwarden/BitwardenCollection.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/bitwarden/BitwardenCollection.kt new file mode 100644 index 00000000..45791e36 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/bitwarden/BitwardenCollection.kt @@ -0,0 +1,30 @@ +package com.artemchep.keyguard.core.store.bitwarden + +import arrow.optics.optics +import kotlinx.datetime.Instant +import kotlinx.serialization.Serializable + +@Serializable +@optics +data class BitwardenCollection( + /** + * Id of the bitwarden account, generated on + * login. + */ + val accountId: String, + val collectionId: String, + val externalId: String?, + val organizationId: String?, + val revisionDate: Instant, + val deletedDate: Instant? = null, + // service fields + override val service: BitwardenService, + // common + val name: String, + val hidePasswords: Boolean, + val readOnly: Boolean, +) : BitwardenService.Has { + companion object; + + override fun withService(service: BitwardenService) = copy(service = service) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/bitwarden/BitwardenCollectionRepositoryImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/bitwarden/BitwardenCollectionRepositoryImpl.kt new file mode 100644 index 00000000..fccdcc9a --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/bitwarden/BitwardenCollectionRepositoryImpl.kt @@ -0,0 +1,49 @@ +package com.artemchep.keyguard.core.store.bitwarden + +import app.cash.sqldelight.coroutines.asFlow +import app.cash.sqldelight.coroutines.mapToList +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.map +import com.artemchep.keyguard.core.store.DatabaseDispatcher +import com.artemchep.keyguard.core.store.DatabaseManager +import com.artemchep.keyguard.provider.bitwarden.repository.BitwardenCollectionRepository +import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.asFlow +import kotlinx.coroutines.flow.flatMapLatest +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.shareIn +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class BitwardenCollectionRepositoryImpl( + private val databaseManager: DatabaseManager, + private val dispatcher: CoroutineDispatcher, +) : BitwardenCollectionRepository { + constructor(directDI: DirectDI) : this( + databaseManager = directDI.instance(), + dispatcher = directDI.instance(tag = DatabaseDispatcher), + ) + + override fun get(): Flow> = databaseManager + .get() + .asFlow() + .flatMapLatest { db -> + db.collectionQueries + .get() + .asFlow() + .mapToList(dispatcher) + .map { + it.map { it.data_ } + } + } + .shareIn(GlobalScope, SharingStarted.WhileSubscribed(1000L), replay = 1) + + override fun put(model: BitwardenCollection): IO = databaseManager + .get() + .map { + TODO() + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/bitwarden/BitwardenFolder.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/bitwarden/BitwardenFolder.kt new file mode 100644 index 00000000..60ba629f --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/bitwarden/BitwardenFolder.kt @@ -0,0 +1,25 @@ +package com.artemchep.keyguard.core.store.bitwarden + +import arrow.optics.optics +import kotlinx.datetime.Instant +import kotlinx.serialization.Serializable + +@Serializable +@optics +data class BitwardenFolder( + /** + * Id of the bitwarden account, generated on + * login. + */ + val accountId: String, + val folderId: String, + val revisionDate: Instant, + // service fields + override val service: BitwardenService, + // common + val name: String, +) : BitwardenService.Has { + companion object; + + override fun withService(service: BitwardenService) = copy(service = service) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/bitwarden/BitwardenFolderRepositoryImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/bitwarden/BitwardenFolderRepositoryImpl.kt new file mode 100644 index 00000000..094be468 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/bitwarden/BitwardenFolderRepositoryImpl.kt @@ -0,0 +1,49 @@ +package com.artemchep.keyguard.core.store.bitwarden + +import app.cash.sqldelight.coroutines.asFlow +import app.cash.sqldelight.coroutines.mapToList +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.map +import com.artemchep.keyguard.core.store.DatabaseDispatcher +import com.artemchep.keyguard.core.store.DatabaseManager +import com.artemchep.keyguard.provider.bitwarden.repository.BitwardenFolderRepository +import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.asFlow +import kotlinx.coroutines.flow.flatMapLatest +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.shareIn +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class BitwardenFolderRepositoryImpl( + private val databaseManager: DatabaseManager, + private val dispatcher: CoroutineDispatcher, +) : BitwardenFolderRepository { + constructor(directDI: DirectDI) : this( + databaseManager = directDI.instance(), + dispatcher = directDI.instance(tag = DatabaseDispatcher), + ) + + override fun get(): Flow> = databaseManager + .get() + .asFlow() + .flatMapLatest { db -> + db.folderQueries + .get() + .asFlow() + .mapToList(dispatcher) + .map { + it.map { it.data_ } + } + } + .shareIn(GlobalScope, SharingStarted.WhileSubscribed(1000L), replay = 1) + + override fun put(model: BitwardenFolder): IO = databaseManager + .get() + .map { + TODO() + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/bitwarden/BitwardenMeta.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/bitwarden/BitwardenMeta.kt new file mode 100644 index 00000000..a31c1e30 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/bitwarden/BitwardenMeta.kt @@ -0,0 +1,40 @@ +package com.artemchep.keyguard.core.store.bitwarden + +import arrow.optics.optics +import kotlinx.datetime.Instant +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +@optics +data class BitwardenMeta( + /** + * Id of the bitwarden account, generated on + * login. + */ + val accountId: String, + // common + val lastSyncTimestamp: Instant? = null, + val lastSyncResult: LastSyncResult? = null, +) { + companion object; + + @Serializable + sealed interface LastSyncResult { + @Serializable + @SerialName("success") + data object Success : LastSyncResult + + @Serializable + @SerialName("failure") + data class Failure( + val timestamp: Instant, + val reason: String? = null, + /** + * `true` if you should ask user to authenticate to use + * this account, `false` otherwise. + */ + val requiresAuthentication: Boolean = false, + ) : LastSyncResult + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/bitwarden/BitwardenMetaRepositoryImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/bitwarden/BitwardenMetaRepositoryImpl.kt new file mode 100644 index 00000000..10194044 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/bitwarden/BitwardenMetaRepositoryImpl.kt @@ -0,0 +1,49 @@ +package com.artemchep.keyguard.core.store.bitwarden + +import app.cash.sqldelight.coroutines.asFlow +import app.cash.sqldelight.coroutines.mapToList +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.map +import com.artemchep.keyguard.core.store.DatabaseDispatcher +import com.artemchep.keyguard.core.store.DatabaseManager +import com.artemchep.keyguard.provider.bitwarden.repository.BitwardenMetaRepository +import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.asFlow +import kotlinx.coroutines.flow.flatMapLatest +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.shareIn +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class BitwardenMetaRepositoryImpl( + private val databaseManager: DatabaseManager, + private val dispatcher: CoroutineDispatcher, +) : BitwardenMetaRepository { + constructor(directDI: DirectDI) : this( + databaseManager = directDI.instance(), + dispatcher = directDI.instance(tag = DatabaseDispatcher), + ) + + override fun get(): Flow> = databaseManager + .get() + .asFlow() + .flatMapLatest { db -> + db.metaQueries + .get() + .asFlow() + .mapToList(dispatcher) + .map { + it.map { it.data_ } + } + } + .shareIn(GlobalScope, SharingStarted.WhileSubscribed(1000L), replay = 1) + + override fun put(model: BitwardenMeta): IO = databaseManager + .get() + .map { + TODO() + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/bitwarden/BitwardenOrganization.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/bitwarden/BitwardenOrganization.kt new file mode 100644 index 00000000..f04eeaf0 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/bitwarden/BitwardenOrganization.kt @@ -0,0 +1,29 @@ +package com.artemchep.keyguard.core.store.bitwarden + +import arrow.optics.optics +import kotlinx.datetime.Instant +import kotlinx.serialization.Serializable + +@Serializable +@optics +data class BitwardenOrganization( + /** + * Id of the bitwarden account, generated on + * login. + */ + val accountId: String, + val organizationId: String, + val revisionDate: Instant, + val deletedDate: Instant? = null, + // service fields + override val service: BitwardenService, + // common + val name: String, + val avatarColor: String? = null, + val selfHost: Boolean = false, + val keyBase64: String = "", +) : BitwardenService.Has { + companion object; + + override fun withService(service: BitwardenService) = copy(service = service) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/bitwarden/BitwardenOrganizationRepositoryImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/bitwarden/BitwardenOrganizationRepositoryImpl.kt new file mode 100644 index 00000000..66366390 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/bitwarden/BitwardenOrganizationRepositoryImpl.kt @@ -0,0 +1,60 @@ +package com.artemchep.keyguard.core.store.bitwarden + +import app.cash.sqldelight.coroutines.asFlow +import app.cash.sqldelight.coroutines.mapToList +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.effectMap +import com.artemchep.keyguard.common.io.map +import com.artemchep.keyguard.common.model.AccountId +import com.artemchep.keyguard.core.store.DatabaseDispatcher +import com.artemchep.keyguard.core.store.DatabaseManager +import com.artemchep.keyguard.provider.bitwarden.repository.BitwardenOrganizationRepository +import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.asFlow +import kotlinx.coroutines.flow.flatMapLatest +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.shareIn +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class BitwardenOrganizationRepositoryImpl( + private val databaseManager: DatabaseManager, + private val dispatcher: CoroutineDispatcher, +) : BitwardenOrganizationRepository { + constructor(directDI: DirectDI) : this( + databaseManager = directDI.instance(), + dispatcher = directDI.instance(tag = DatabaseDispatcher), + ) + + override fun get(): Flow> = databaseManager + .get() + .asFlow() + .flatMapLatest { db -> + db.organizationQueries + .get() + .asFlow() + .mapToList(dispatcher) + .map { + it.map { it.data_ } + } + } + .shareIn(GlobalScope, SharingStarted.WhileSubscribed(1000L), replay = 1) + + override fun getByAccountId(id: AccountId): IO> = databaseManager + .get() + .effectMap(dispatcher) { db -> + val list = db.organizationQueries + .getByAccountId(accountId = id.id) + .executeAsList() + list.map { it.data_ } + } + + override fun put(model: BitwardenOrganization): IO = databaseManager + .get() + .map { + TODO() + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/bitwarden/BitwardenProfile.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/bitwarden/BitwardenProfile.kt new file mode 100644 index 00000000..285dbc8a --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/bitwarden/BitwardenProfile.kt @@ -0,0 +1,30 @@ +package com.artemchep.keyguard.core.store.bitwarden + +import arrow.optics.optics +import kotlinx.serialization.Serializable + +@Serializable +@optics +data class BitwardenProfile( + /** + * Id of the bitwarden account, generated on + * login. + */ + val accountId: String, + val profileId: String, + // common + val avatarColor: String? = null, + val name: String, + val keyBase64: String, + val privateKeyBase64: String, + val culture: String = "", + val email: String, + val emailVerified: Boolean, + val premium: Boolean, + val securityStamp: String = "", + val twoFactorEnabled: Boolean, + val masterPasswordHint: String?, + val unofficialServer: Boolean = false, +) { + companion object; +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/bitwarden/BitwardenProfileRepositoryImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/bitwarden/BitwardenProfileRepositoryImpl.kt new file mode 100644 index 00000000..dc1b4ae7 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/bitwarden/BitwardenProfileRepositoryImpl.kt @@ -0,0 +1,68 @@ +package com.artemchep.keyguard.core.store.bitwarden + +import app.cash.sqldelight.coroutines.asFlow +import app.cash.sqldelight.coroutines.mapToList +import app.cash.sqldelight.coroutines.mapToOneOrNull +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.effectMap +import com.artemchep.keyguard.common.model.AccountId +import com.artemchep.keyguard.core.store.DatabaseDispatcher +import com.artemchep.keyguard.core.store.DatabaseManager +import com.artemchep.keyguard.provider.bitwarden.repository.BitwardenProfileRepository +import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.asFlow +import kotlinx.coroutines.flow.flatMapLatest +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.shareIn +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class BitwardenProfileRepositoryImpl( + private val databaseManager: DatabaseManager, + private val dispatcher: CoroutineDispatcher, +) : BitwardenProfileRepository { + constructor(directDI: DirectDI) : this( + databaseManager = directDI.instance(), + dispatcher = directDI.instance(tag = DatabaseDispatcher), + ) + + override fun get(): Flow> = databaseManager + .get() + .asFlow() + .flatMapLatest { db -> + db.profileQueries + .get() + .asFlow() + .mapToList(dispatcher) + .map { + it.map { it.data_ } + } + } + .shareIn(GlobalScope, SharingStarted.WhileSubscribed(1000L), replay = 1) + + override fun getById(id: AccountId): Flow = databaseManager + .get() + .asFlow() + .flatMapLatest { db -> + db.profileQueries + .getByAccountId(accountId = id.id) + .asFlow() + .mapToOneOrNull(dispatcher) + .map { + it?.data_ + } + } + + override fun put(model: BitwardenProfile): IO = databaseManager + .get() + .effectMap(dispatcher) { db -> + db.profileQueries.insert( + model, + accountId = model.accountId, + profileId = model.profileId, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/bitwarden/BitwardenSend.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/bitwarden/BitwardenSend.kt new file mode 100644 index 00000000..1a2e8856 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/bitwarden/BitwardenSend.kt @@ -0,0 +1,71 @@ +package com.artemchep.keyguard.core.store.bitwarden + +import arrow.optics.optics +import kotlinx.datetime.Instant +import kotlinx.serialization.Serializable + +@Serializable +@optics +data class BitwardenSend( + /** + * Id of the Bitwarden account, generated on + * login. + */ + val accountId: String, + val sendId: String, + val accessId: String, + val revisionDate: Instant, + val createdDate: Instant? = null, + val deletedDate: Instant? = null, + val expirationDate: Instant? = null, + // service fields + override val service: BitwardenService, + // common + val keyBase64: String? = null, + val name: String?, + val notes: String?, + val accessCount: Int, + val maxAccessCount: Int? = null, + val password: String? = null, + val disabled: Boolean = false, + val hideEmail: Boolean? = null, + // types + val type: Type = Type.None, + val file: File? = null, + val text: Text? = null, +) : BitwardenService.Has { + companion object; + + override fun withService(service: BitwardenService) = copy(service = service) + + @Serializable + enum class Type { + None, + File, + Text, + } + + // + // Types + // + + @optics + @Serializable + data class File( + val id: String, + val fileName: String, + val keyBase64: String? = null, + val size: Long? = null, + ) { + companion object; + } + + @optics + @Serializable + data class Text( + val text: String? = null, + val hidden: Boolean? = null, + ) { + companion object; + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/bitwarden/BitwardenSendRepositoryImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/bitwarden/BitwardenSendRepositoryImpl.kt new file mode 100644 index 00000000..4712f9a2 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/bitwarden/BitwardenSendRepositoryImpl.kt @@ -0,0 +1,57 @@ +package com.artemchep.keyguard.core.store.bitwarden + +import app.cash.sqldelight.coroutines.asFlow +import app.cash.sqldelight.coroutines.mapToList +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.effectMap +import com.artemchep.keyguard.core.store.DatabaseDispatcher +import com.artemchep.keyguard.core.store.DatabaseManager +import com.artemchep.keyguard.provider.bitwarden.repository.BitwardenSendRepository +import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.asFlow +import kotlinx.coroutines.flow.catch +import kotlinx.coroutines.flow.flatMapLatest +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.shareIn +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class BitwardenSendRepositoryImpl( + private val databaseManager: DatabaseManager, + private val dispatcher: CoroutineDispatcher, +) : BitwardenSendRepository { + constructor(directDI: DirectDI) : this( + databaseManager = directDI.instance(), + dispatcher = directDI.instance(tag = DatabaseDispatcher), + ) + + override fun get(): Flow> = databaseManager + .get() + .asFlow() + .flatMapLatest { db -> + db.sendQueries + .get() + .asFlow() + .mapToList(dispatcher) + .catch { + } + .map { + it.map { it.data_ } + } + } + .shareIn(GlobalScope, SharingStarted.WhileSubscribed(1000L), replay = 1) + + override fun put(model: BitwardenSend): IO = databaseManager + .get() + .effectMap(dispatcher) { + it.sendQueries.insert( + accountId = model.accountId, + sendId = model.sendId, + data = model, + ) + Unit + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/bitwarden/BitwardenService.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/bitwarden/BitwardenService.kt new file mode 100644 index 00000000..4b988791 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/bitwarden/BitwardenService.kt @@ -0,0 +1,57 @@ +package com.artemchep.keyguard.core.store.bitwarden + +import arrow.optics.optics +import kotlinx.datetime.Instant +import kotlinx.serialization.Serializable + +@Serializable +@optics +data class BitwardenService( + val remote: Remote? = null, + val error: Error? = null, + val deleted: Boolean = false, + val version: Int = 0, +) { + companion object { + const val VERSION = 13 + } + + @Serializable + @optics + data class Remote( + val id: String, + val revisionDate: Instant, + val deletedDate: Instant?, + ) { + companion object + } + + @Serializable + @optics + data class Error( + val code: Int, + val message: String? = null, + val revisionDate: Instant, + ) { + companion object { + const val CODE_UNKNOWN = 0 + + /** + * Thrown to indicate that there + * is an error in the underlying protocol, + * such as a TCP error. + */ + const val CODE_PROTOCOL_EXCEPTION = -3000 + const val CODE_UNKNOWN_HOST = -2000 + const val CODE_DECODING_FAILED = -1000 + } + } + + interface Has { + val service: BitwardenService + + fun withService( + service: BitwardenService, + ): T + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/bitwarden/BitwardenServiceUtil.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/bitwarden/BitwardenServiceUtil.kt new file mode 100644 index 00000000..834cb6d4 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/bitwarden/BitwardenServiceUtil.kt @@ -0,0 +1,24 @@ +package com.artemchep.keyguard.core.store.bitwarden + +import com.artemchep.keyguard.ui.canRetry +import io.ktor.http.HttpStatusCode +import kotlinx.datetime.Instant + +fun BitwardenService.Error.canRetry(revisionDate: Instant): Boolean = + expired(revisionDate) || code.canRetry() + +fun BitwardenService.Error.expired(revisionDate: Instant) = + revisionDate > this.revisionDate + +fun BitwardenService.Error?.exists(revisionDate: Instant) = + this != null && !this.expired(revisionDate) + +fun BitwardenService.Error.message() = message + ?: code + .takeIf { it > 0 } + ?.let { HttpStatusCode.fromValue(it) } + ?.description + ?: when (code) { + BitwardenService.Error.CODE_DECODING_FAILED -> "Failed to decode cipher text" + else -> "Unknown error" + } diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/bitwarden/BitwardenToken.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/bitwarden/BitwardenToken.kt new file mode 100644 index 00000000..a24f1575 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/bitwarden/BitwardenToken.kt @@ -0,0 +1,148 @@ +package com.artemchep.keyguard.core.store.bitwarden + +import arrow.optics.optics +import com.artemchep.keyguard.provider.bitwarden.ServerEnv +import com.artemchep.keyguard.provider.bitwarden.ServerHeader +import kotlinx.datetime.Instant +import kotlinx.serialization.Serializable +import java.util.UUID + +@Serializable +data class BitwardenToken( + val id: String = UUID.randomUUID().toString(), + val key: Key, + val token: Token? = null, + val user: User, + /** Information about the Bitwarden server */ + val env: Environment, +) { + fun formatUser() = "<" + + "id=$id, " + + "email=${user.email}" + + ">" + + @Serializable + data class Token( + val refreshToken: String, + val accessToken: String, + /** + * Expiration date of the refresh token, ask user to re-login + * after the old one is expired! + */ + val expirationDate: Instant, + ) + + @optics + @Serializable + data class Key( + val masterKeyBase64: String, + val passwordKeyBase64: String, + val encryptionKeyBase64: String, + val macKeyBase64: String, + ) { + companion object + } + + @optics + @Serializable + data class Environment( + val baseUrl: String = "", + val webVaultUrl: String = "", + val apiUrl: String = "", + val identityUrl: String = "", + val iconsUrl: String = "", + val region: Region = Region.US, + val headers: List
= emptyList(), + ) { + companion object { + fun of(model: ServerEnv) = Environment( + baseUrl = model.baseUrl, + webVaultUrl = model.webVaultUrl, + apiUrl = model.apiUrl, + identityUrl = model.identityUrl, + iconsUrl = model.iconsUrl, + region = when (model.region) { + ServerEnv.Region.US -> Region.US + ServerEnv.Region.EU -> Region.EU + }, + headers = model + .headers + .map { header -> + Header( + key = header.key, + value = header.value, + ) + }, + ) + } + + fun back() = ServerEnv( + baseUrl = baseUrl, + webVaultUrl = webVaultUrl, + apiUrl = apiUrl, + identityUrl = identityUrl, + iconsUrl = iconsUrl, + region = when (region) { + Region.US -> ServerEnv.Region.US + Region.EU -> ServerEnv.Region.EU + }, + headers = headers + .map { header -> + ServerHeader( + key = header.key, + value = header.value, + ) + }, + ) + + @Serializable + enum class Region { + US, + EU, + } + + @optics + @Serializable + data class Header( + val key: String, + val value: String, + ) { + companion object + } + } + + @Serializable + data class User( + val email: String, + ) +} + +fun BitwardenToken.Companion.generated(): BitwardenToken { + val accountIds = listOf( + "account_a", + "account_b", + "account_c", + ) + val folderIds = listOf( + "folder_a", + "folder_b", + "folder_c", + null, + ) + val name = listOf( + "List", + ) + return BitwardenToken( + id = accountIds.random(), + key = BitwardenToken.Key( + masterKeyBase64 = "", + passwordKeyBase64 = "", + encryptionKeyBase64 = "", + macKeyBase64 = "", + ), + env = BitwardenToken.Environment(), + user = BitwardenToken.User( + email = "email", + ), + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/bitwarden/BitwardenTokenRepositoryImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/bitwarden/BitwardenTokenRepositoryImpl.kt new file mode 100644 index 00000000..934fbde6 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/core/store/bitwarden/BitwardenTokenRepositoryImpl.kt @@ -0,0 +1,62 @@ +package com.artemchep.keyguard.core.store.bitwarden + +import app.cash.sqldelight.coroutines.asFlow +import app.cash.sqldelight.coroutines.mapToList +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.effectMap +import com.artemchep.keyguard.common.model.AccountId +import com.artemchep.keyguard.core.store.DatabaseDispatcher +import com.artemchep.keyguard.core.store.DatabaseManager +import com.artemchep.keyguard.provider.bitwarden.repository.BitwardenTokenRepository +import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.asFlow +import kotlinx.coroutines.flow.flatMapLatest +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.shareIn +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class BitwardenTokenRepositoryImpl( + private val databaseManager: DatabaseManager, + private val dispatcher: CoroutineDispatcher, +) : BitwardenTokenRepository { + constructor(directDI: DirectDI) : this( + databaseManager = directDI.instance(), + dispatcher = directDI.instance(tag = DatabaseDispatcher), + ) + + override fun get(): Flow> = databaseManager + .get() + .asFlow() + .flatMapLatest { db -> + db.accountQueries + .get() + .asFlow() + .mapToList(dispatcher) + .map { + it.map { it.data_ } + } + } + .shareIn(GlobalScope, SharingStarted.WhileSubscribed(1000L), replay = 1) + + override fun getById(id: AccountId): IO = databaseManager + .get() + .effectMap(dispatcher) { db -> + val infoEntity = db.accountQueries + .getByAccountId(accountId = id.id) + .executeAsOneOrNull() + infoEntity?.data_ + } + + override fun put(model: BitwardenToken): IO = databaseManager + .get() + .effectMap(dispatcher) { + it.accountQueries.insert( + accountId = model.id, + data = model, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/EmptyView.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/EmptyView.kt new file mode 100644 index 00000000..c3ebd852 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/EmptyView.kt @@ -0,0 +1,96 @@ +package com.artemchep.keyguard.feature + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.layout.widthIn +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.SearchOff +import androidx.compose.material3.Icon +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.LocalTextStyle +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.theme.Dimens +import com.artemchep.keyguard.ui.theme.combineAlpha +import dev.icerock.moko.resources.compose.stringResource + +@Composable +fun EmptySearchView( + modifier: Modifier = Modifier, + text: @Composable () -> Unit = { + DefaultEmptyViewText() + }, +) { + EmptyView( + modifier = modifier, + icon = { + Icon( + imageVector = Icons.Outlined.SearchOff, + contentDescription = null, + ) + }, + text = text, + ) +} + +@Composable +fun EmptyView( + modifier: Modifier = Modifier, + icon: (@Composable () -> Unit)? = null, + text: @Composable () -> Unit = { + DefaultEmptyViewText() + }, +) { + Row( + modifier = modifier + .padding( + vertical = Dimens.verticalPadding, + horizontal = Dimens.horizontalPadding, + ) + .fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.Center, + ) { + CompositionLocalProvider( + LocalContentColor provides LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + LocalTextStyle provides MaterialTheme.typography.labelLarge, + ) { + if (icon != null) { + icon() + Spacer( + modifier = Modifier + .width(Dimens.buttonIconPadding), + ) + } + Box( + modifier = Modifier + .widthIn(max = 196.dp), + ) { + text() + } + } + } +} + +@Composable +private fun DefaultEmptyViewText( + modifier: Modifier = Modifier, +) { + Text( + modifier = modifier, + text = stringResource(Res.strings.items_empty_label), + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/ErrorView.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/ErrorView.kt new file mode 100644 index 00000000..51bfc5a8 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/ErrorView.kt @@ -0,0 +1,77 @@ +package com.artemchep.keyguard.feature + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.ErrorOutline +import androidx.compose.material3.ElevatedButton +import androidx.compose.material3.Icon +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.LocalTextStyle +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.ui.ExpandedIfNotEmpty +import com.artemchep.keyguard.ui.theme.Dimens + +@Composable +fun ErrorView( + icon: (@Composable () -> Unit)? = { + Icon( + imageVector = Icons.Outlined.ErrorOutline, + contentDescription = null, + ) + }, + text: @Composable () -> Unit = { + Text(text = "Something went wrong") + }, + exception: Throwable? = null, +) { + Column( + modifier = Modifier + .padding( + vertical = 16.dp, + horizontal = Dimens.horizontalPadding, + ) + .fillMaxWidth(), + horizontalAlignment = Alignment.CenterHorizontally, + ) { + Row( + verticalAlignment = Alignment.CenterVertically, + ) { + CompositionLocalProvider( + LocalContentColor provides MaterialTheme.colorScheme.error, + LocalTextStyle provides MaterialTheme.typography.labelLarge, + ) { + if (icon != null) { + icon() + Spacer( + modifier = Modifier + .width(16.dp), + ) + } + text() + } + } + ExpandedIfNotEmpty( + valueOrNull = exception, + ) { e -> + ElevatedButton( + modifier = Modifier + .padding(top = 8.dp), + onClick = { + }, + ) { + Text(text = "View details") + } + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/apppicker/AppPickerResult.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/apppicker/AppPickerResult.kt new file mode 100644 index 00000000..b8d60a4b --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/apppicker/AppPickerResult.kt @@ -0,0 +1,9 @@ +package com.artemchep.keyguard.feature.apppicker + +sealed interface AppPickerResult { + data object Deny : AppPickerResult + + data class Confirm( + val uri: String, + ) : AppPickerResult +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/apppicker/AppPickerRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/apppicker/AppPickerRoute.kt new file mode 100644 index 00000000..c71e0b30 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/apppicker/AppPickerRoute.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.feature.apppicker + +import com.artemchep.keyguard.feature.navigation.RouteForResult + +expect object AppPickerRoute : RouteForResult diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/appreview/RequestAppReviewEffect.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/appreview/RequestAppReviewEffect.kt new file mode 100644 index 00000000..924ae2cc --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/appreview/RequestAppReviewEffect.kt @@ -0,0 +1,31 @@ +package com.artemchep.keyguard.feature.appreview + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberUpdatedState +import com.artemchep.keyguard.common.io.attempt +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.usecase.GetShouldRequestAppReview +import com.artemchep.keyguard.common.usecase.RequestAppReview +import com.artemchep.keyguard.platform.LocalLeContext +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.flow.first +import org.kodein.di.compose.rememberInstance + +@Composable +fun RequestAppReviewEffect() { + val getShouldRequestAppReview: GetShouldRequestAppReview by rememberInstance() + val requestAppReview: RequestAppReview by rememberInstance() + + val context by rememberUpdatedState(LocalLeContext) + LaunchedEffect(Unit) { + val shouldAskForReview = getShouldRequestAppReview() + .first() + if (shouldAskForReview) { + requestAppReview(context) + .attempt() + .launchIn(GlobalScope) + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/attachments/AttachmentsRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/attachments/AttachmentsRoute.kt new file mode 100644 index 00000000..8041e165 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/attachments/AttachmentsRoute.kt @@ -0,0 +1,11 @@ +package com.artemchep.keyguard.feature.attachments + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.navigation.Route + +class AttachmentsRoute : Route { + @Composable + override fun Content() { + AttachmentsScreen() + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/attachments/AttachmentsScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/attachments/AttachmentsScreen.kt new file mode 100644 index 00000000..9d452bfe --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/attachments/AttachmentsScreen.kt @@ -0,0 +1,164 @@ +package com.artemchep.keyguard.feature.attachments + +import androidx.compose.foundation.ExperimentalFoundationApi +import androidx.compose.foundation.lazy.items +import androidx.compose.material.ExperimentalMaterialApi +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.input.nestedscroll.nestedScroll +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.model.getOrNull +import com.artemchep.keyguard.feature.EmptySearchView +import com.artemchep.keyguard.feature.attachments.compose.ItemAttachment +import com.artemchep.keyguard.feature.watchtower.VaultHomeScreenFilterButton2 +import com.artemchep.keyguard.feature.watchtower.VaultHomeScreenFilterPaneCard2 +import com.artemchep.keyguard.feature.home.vault.component.Section +import com.artemchep.keyguard.feature.navigation.NavigationIcon +import com.artemchep.keyguard.feature.twopane.TwoPaneScreen +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.DefaultSelection +import com.artemchep.keyguard.ui.ScaffoldLazyColumn +import com.artemchep.keyguard.ui.skeleton.SkeletonItem +import com.artemchep.keyguard.ui.toolbar.LargeToolbar +import dev.icerock.moko.resources.compose.stringResource + +@Composable +fun AttachmentsScreen() { + val loadableState = produceAttachmentsScreenState() + + TwoPaneScreen( + detail = { modifier -> + VaultHomeScreenFilterPaneCard2( + modifier = modifier, + items = loadableState.getOrNull()?.filter?.items.orEmpty(), + onClear = loadableState.getOrNull()?.filter?.onClear, + ) + }, + ) { modifier, detailIsVisible -> + AttachmentsScreen( + modifier = modifier, + state = loadableState, + showFilter = !detailIsVisible, + ) + } +} + +@OptIn( + ExperimentalMaterial3Api::class, + ExperimentalFoundationApi::class, + ExperimentalMaterialApi::class, +) +@Composable +fun AttachmentsScreen( + modifier: Modifier, + state: Loadable, + showFilter: Boolean, +) { + val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior() + ScaffoldLazyColumn( + modifier = modifier + .nestedScroll(scrollBehavior.nestedScrollConnection), + topAppBarScrollBehavior = scrollBehavior, + topBar = { + LargeToolbar( + title = { + Text( + text = stringResource(Res.strings.downloads), + ) + }, + navigationIcon = { + NavigationIcon() + }, + actions = { + if (showFilter) { + VaultHomeScreenFilterButton2( + modifier = modifier, + items = state.getOrNull()?.filter?.items.orEmpty(), + onClear = state.getOrNull()?.filter?.onClear, + ) + } + }, + scrollBehavior = scrollBehavior, + ) + }, + bottomBar = { + val selectionOrNull = state.getOrNull()?.selection + DefaultSelection( + state = selectionOrNull, + ) + }, + ) { + when (state) { + is Loadable.Loading -> { + for (i in 1..3) { + item("skeleton.$i") { + SkeletonItem() + } + } + } + + is Loadable.Ok -> { + val items = state.getOrNull()?.items.orEmpty() + if (items.isEmpty()) { + item("header.empty") { + NoItemsPlaceholder() + } + } + + items(items, key = { it.key }) { item -> + Item( + modifier = Modifier + .animateItemPlacement(), + item = item, + ) + } + } + } + } +} + +@Composable +private fun NoItemsPlaceholder( + modifier: Modifier = Modifier, +) { + EmptySearchView( + modifier = modifier, + text = { + Text( + text = stringResource(Res.strings.downloads_empty_label), + ) + }, + ) +} + +@Composable +private fun Item( + modifier: Modifier, + item: AttachmentsState.Item, +) = when (item) { + is AttachmentsState.Item.Section -> + ItemSection( + modifier = modifier, + item = item, + ) + + is AttachmentsState.Item.Attachment -> + ItemAttachment( + modifier = modifier, + item = item.item, + ) +} + +@Composable +private fun ItemSection( + modifier: Modifier, + item: AttachmentsState.Item.Section, +) { + Section( + modifier = modifier, + text = item.name, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/attachments/AttachmentsState.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/attachments/AttachmentsState.kt new file mode 100644 index 00000000..c2fce31c --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/attachments/AttachmentsState.kt @@ -0,0 +1,52 @@ +package com.artemchep.keyguard.feature.attachments + +import androidx.compose.runtime.Immutable +import com.artemchep.keyguard.feature.attachments.model.AttachmentItem +import com.artemchep.keyguard.feature.home.vault.model.FilterItem +import com.artemchep.keyguard.ui.Selection + +data class AttachmentsState( + val filter: Filter, + val stats: Stats, + val selection: Selection?, + val items: List, +) { + data class Filter( + val items: List = emptyList(), + val onClear: (() -> Unit)? = null, + ) + + data class Stats( + val totalAttachments: Int, + val totalSize: String, + ) + + sealed interface Item { + val key: String + + data class Section( + override val key: String, + val name: String, + ) : Item + + data class Attachment( + override val key: String, + val item: AttachmentItem, + ) : Item + } +} + +data class SelectableItemStateRaw( + val selecting: Boolean, + val selected: Boolean, + val canSelect: Boolean = true, +) + +@Immutable +data class SelectableItemState( + val selecting: Boolean, + val selected: Boolean, + val can: Boolean = true, + val onClick: (() -> Unit)?, + val onLongClick: (() -> Unit)?, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/attachments/AttachmentsStateProducer.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/attachments/AttachmentsStateProducer.kt new file mode 100644 index 00000000..f85b930a --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/attachments/AttachmentsStateProducer.kt @@ -0,0 +1,661 @@ +package com.artemchep.keyguard.feature.attachments + +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Cancel +import androidx.compose.material.icons.outlined.Delete +import androidx.compose.material.icons.outlined.Download +import androidx.compose.material.icons.outlined.FileOpen +import androidx.compose.material.icons.outlined.FolderOpen +import androidx.compose.material.icons.outlined.OpenInNew +import androidx.compose.material.icons.outlined.Refresh +import androidx.compose.material.icons.outlined.Send +import androidx.compose.runtime.Composable +import arrow.core.identity +import arrow.core.partially1 +import com.artemchep.keyguard.android.downloader.journal.DownloadRepository +import com.artemchep.keyguard.android.downloader.journal.room.DownloadInfoEntity2 +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.attempt +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.model.DSecret +import com.artemchep.keyguard.common.model.DownloadAttachmentRequest +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.model.RemoveAttachmentRequest +import com.artemchep.keyguard.common.service.download.DownloadManager +import com.artemchep.keyguard.common.usecase.DownloadAttachment +import com.artemchep.keyguard.common.usecase.GetAccounts +import com.artemchep.keyguard.common.usecase.GetCiphers +import com.artemchep.keyguard.common.usecase.GetCollections +import com.artemchep.keyguard.common.usecase.GetFolders +import com.artemchep.keyguard.common.usecase.GetOrganizations +import com.artemchep.keyguard.common.usecase.GetProfiles +import com.artemchep.keyguard.common.usecase.RemoveAttachment +import com.artemchep.keyguard.common.util.flow.foldAsList +import com.artemchep.keyguard.feature.attachments.model.AttachmentItem +import com.artemchep.keyguard.feature.attachments.util.createAttachmentItem +import com.artemchep.keyguard.feature.decorator.ItemDecorator +import com.artemchep.keyguard.feature.decorator.ItemDecoratorNone +import com.artemchep.keyguard.feature.decorator.ItemDecoratorTitle +import com.artemchep.keyguard.feature.home.vault.screen.FilterParams +import com.artemchep.keyguard.feature.home.vault.screen.OurFilterResult +import com.artemchep.keyguard.feature.home.vault.screen.VaultViewRoute +import com.artemchep.keyguard.feature.home.vault.screen.ah +import com.artemchep.keyguard.feature.home.vault.screen.createFilter +import com.artemchep.keyguard.feature.home.vault.search.filter.FilterHolder +import com.artemchep.keyguard.feature.home.vault.util.AlphabeticalSortMinItemsSize +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.feature.navigation.state.TranslatorScope +import com.artemchep.keyguard.feature.navigation.state.produceScreenState +import com.artemchep.keyguard.platform.CurrentPlatform +import com.artemchep.keyguard.platform.Platform +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.ContextItem +import com.artemchep.keyguard.ui.FlatItemAction +import com.artemchep.keyguard.ui.Selection +import com.artemchep.keyguard.ui.buildContextItems +import com.artemchep.keyguard.ui.icons.ChevronIcon +import com.artemchep.keyguard.ui.icons.icon +import com.artemchep.keyguard.ui.icons.iconSmall +import com.artemchep.keyguard.ui.selection.selectionHandle +import kotlinx.collections.immutable.toPersistentList +import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.awaitCancellation +import kotlinx.coroutines.coroutineScope +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.filterNotNull +import kotlinx.coroutines.flow.flatMapLatest +import kotlinx.coroutines.flow.flow +import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.onEach +import kotlinx.coroutines.flow.stateIn +import org.kodein.di.DirectDI +import org.kodein.di.compose.localDI +import org.kodein.di.direct +import org.kodein.di.instance + +@Composable +fun produceAttachmentsScreenState() = with(localDI().direct) { + produceAttachmentsScreenState( + directDI = this, + getAccounts = instance(), + getProfiles = instance(), + getCiphers = instance(), + getFolders = instance(), + getCollections = instance(), + getOrganizations = instance(), + downloadRepository = instance(), + downloadManager = instance(), + downloadAttachment = instance(), + removeAttachment = instance(), + ) +} + +private data class CipherWithAttachment( + val cipher: DSecret, + val attachment: DSecret.Attachment.Remote, +) + +private data class ItemCipher( + val item: AttachmentItem, + val cipher: DSecret, + val attachment: DSecret.Attachment.Remote, +) + +private data class FilteredBoo( + val count: Int, + val list: List, + val filterConfig: FilterHolder? = null, +) + +@OptIn(ExperimentalCoroutinesApi::class) +@Composable +fun produceAttachmentsScreenState( + directDI: DirectDI, + getAccounts: GetAccounts, + getProfiles: GetProfiles, + getCiphers: GetCiphers, + getFolders: GetFolders, + getCollections: GetCollections, + getOrganizations: GetOrganizations, + downloadRepository: DownloadRepository, + downloadManager: DownloadManager, + downloadAttachment: DownloadAttachment, + removeAttachment: RemoveAttachment, +): Loadable = produceScreenState( + key = "attachments", + args = arrayOf( + getCiphers, + ), + initial = Loadable.Loading, +) { + val selectionHandle = selectionHandle("selection") + + val filterResult = createFilter() + + val ciphersFlow = getCiphers() + + val ciphersByAttachmentRefFlow = ciphersFlow + .map { ciphers -> + ciphers + .asSequence() + .flatMap { cipher -> + cipher + .attachments + .asSequence() + .mapNotNull { it as? DSecret.Attachment.Remote } + .map { attachment -> + val model = CipherWithAttachment( + cipher = cipher, + attachment = attachment, + ) + val tag = DownloadInfoEntity2.AttachmentDownloadTag( + localCipherId = cipher.id, + remoteCipherId = cipher.service.remote?.id, + attachmentId = attachment.id, + ) + tag to model + } + } + .associate { it } + } + .shareInScreenScope() + + val itemsRawFlow = downloadRepository + // get a list of all known tags + .get() + .map { + it + .asSequence() + .map { + DownloadInfoEntity2.AttachmentDownloadTag( + localCipherId = it.localCipherId, + remoteCipherId = it.remoteCipherId, + attachmentId = it.attachmentId, + ) + } + .toSet() + } + .distinctUntilChanged() + // filter it by being available offline + .flatMapLatest { refs -> + refs + .map { ref -> + ciphersByAttachmentRefFlow + .map { state -> state[ref] } + .distinctUntilChanged() + .flatMapLatest { cipherWithAttachment -> + cipherWithAttachment + ?: return@flatMapLatest flowOf(null) + + val attachment = cipherWithAttachment.attachment + val cipher = cipherWithAttachment.cipher + + val downloadIo = kotlin.run { + val request = DownloadAttachmentRequest.ByLocalCipherAttachment( + cipher = cipher, + attachment = attachment, + ) + downloadAttachment(listOf(request)) + } + val removeIo = kotlin.run { + val request = RemoveAttachmentRequest.ByLocalCipherAttachment( + cipher = cipher, + attachment = attachment, + ) + removeAttachment(listOf(request)) + } + flow { + coroutineScope { + val actualItem = createAttachmentItem( + selectionHandle = selectionHandle, + tag = ref, + sharingScope = this, + attachment = attachment, + launchViewCipherData = LaunchViewCipherData( + accountId = cipher.accountId, + cipherId = cipher.id, + ), + downloadManager = downloadManager, + downloadIo = downloadIo, + removeIo = removeIo, + ) + val wrapperItem = ItemCipher( + item = actualItem, + cipher = cipher, + attachment = attachment, + ) + emit(wrapperItem) + awaitCancellation() + } + } + } + } + .foldAsList() + .map { list -> + list + .filterNotNull() + .sortedBy { it.item.name } + } + } + .shareInScreenScope() + + // Automatically de-select items + // that do not exist. + combine( + itemsRawFlow, + selectionHandle.idsFlow, + ) { attachments, selectedAttachmentIds -> + val newSelectedAttachmentIds = selectedAttachmentIds + .asSequence() + .filter { attachmentId -> + attachments.any { it.attachment.id == attachmentId } + } + .toSet() + newSelectedAttachmentIds.takeIf { it.size < selectedAttachmentIds.size } + } + .filterNotNull() + .onEach { ids -> selectionHandle.setSelection(ids) } + .launchIn(screenScope) + + val selectionFlow = combine( + itemsRawFlow, + selectionHandle.idsFlow, + ) { items, selectedCipherIds -> + val selectedItems = items + .filter { it.attachment.id in selectedCipherIds } + items to selectedItems + } + .flatMapLatest { (allItems, selectedItems) -> + selectedItems + .map { item -> + item.item.statusState + .map { attachmentStatus -> + item to FooStatus.of( + attachmentStatus = attachmentStatus, + ) + } + .distinctUntilChanged() + } + .foldAsList() + .map { allItems to it } + } + .map { (allItems, selectedPairs) -> + if (selectedPairs.isEmpty()) { + return@map null + } + + val selectedItemsAllDownloaded = selectedPairs + .all { it.second is FooStatus.Downloaded } + val selectedItemsAllCancelable = selectedPairs + .all { + val status = it.second + status is FooStatus.Loading || + status is FooStatus.Failed + } + val selectedItemsAllDownloadable = selectedPairs + .all { + val status = it.second + status is FooStatus.None || + status is FooStatus.Failed + } + + val downloadIo by lazy { + val requests = selectedPairs + .map { (i, _) -> + DownloadAttachmentRequest.ByLocalCipherAttachment( + cipher = i.cipher, + attachment = i.attachment, + ) + } + downloadAttachment(requests) + } + val removeIo by lazy { + val requests = selectedPairs + .map { (i, _) -> + RemoveAttachmentRequest.ByLocalCipherAttachment( + cipher = i.cipher, + attachment = i.attachment, + ) + } + removeAttachment(requests) + } + + val actions = mutableListOf() + if (selectedItemsAllCancelable) { + actions += FlatItemAction( + leading = icon(Icons.Outlined.Cancel), + title = translate(Res.strings.cancel), + onClick = { + removeIo.launchIn(appScope) + }, + ) + } + if (selectedItemsAllDownloadable) { + actions += FlatItemAction( + leading = icon(Icons.Outlined.Download), + title = "Download", + onClick = { + downloadIo.launchIn(appScope) + }, + ) + } + if (selectedItemsAllDownloaded) { + actions += FlatItemAction( + leading = icon(Icons.Outlined.Delete), + title = "Delete local files", + onClick = { + removeIo.launchIn(appScope) + }, + ) + } + + Selection( + count = selectedPairs.size, + actions = actions.toPersistentList(), + onSelectAll = if (selectedPairs.size < allItems.size) { + val allIds = allItems + .asSequence() + .map { it.attachment.id } + .toSet() + selectionHandle::setSelection + .partially1(allIds) + } else { + null + }, + onClear = selectionHandle::clearSelection, + ) + } + + val itemsFilteredFlow = itemsRawFlow + .map { attachments -> + FilteredBoo( + count = attachments.size, + list = attachments, + ) + } + .combine( + flow = filterResult.filterFlow, + ) { state, filterConfig -> + // Fast path: if the there are no filters, then + // just return original list of items. + if (filterConfig.state.isEmpty()) { + return@combine state.copy( + filterConfig = filterConfig, + ) + } + + val filteredAllItems = state + .list + .run { + val ciphers = map { it.cipher } + val predicate = filterConfig.filter.prepare(directDI, ciphers) + filter { predicate(it.cipher) } + } + state.copy( + list = filteredAllItems, + filterConfig = filterConfig, + ) + } + .shareInScreenScope() + + val filterListFlow = ah( + directDI = directDI, + outputGetter = { it.cipher }, + outputFlow = itemsFilteredFlow + .map { it.list }, + accountGetter = ::identity, + accountFlow = getAccounts(), + profileFlow = getProfiles(), + cipherGetter = ::identity, + cipherFlow = ciphersFlow, + folderGetter = ::identity, + folderFlow = getFolders(), + collectionGetter = ::identity, + collectionFlow = getCollections(), + organizationGetter = ::identity, + organizationFlow = getOrganizations(), + input = filterResult, + params = FilterParams( + section = FilterParams.Section( + type = false, + misc = false, + ), + ), + ) + .stateIn(screenScope, SharingStarted.WhileSubscribed(), OurFilterResult()) + + val itemsFlow = itemsFilteredFlow + .map { state -> + val decorator: ItemDecorator = + when { + state.list.size >= AlphabeticalSortMinItemsSize -> + ItemDecoratorTitle( + selector = { it.name }, + factory = { id, text -> + AttachmentsState.Item.Section( + key = id, + name = text, + ) + }, + ) + + else -> + ItemDecoratorNone + as ItemDecorator + } + + val items = sequence { + state.list.forEach { item -> + val section = decorator.getOrNull(item.item) + if (section != null) yield(section) + + val wrappedItem = AttachmentsState.Item.Attachment( + key = item.item.key, + item = item.item, + ) + yield(wrappedItem) + } + }.toList() + FilteredBoo( + count = state.list.size, + list = items, + filterConfig = state.filterConfig, + ) + } + .map { + it.list + } + + val state = combine( + itemsFlow, + selectionFlow, + filterListFlow, + ) { items, selection, filterState -> + val state = AttachmentsState( + filter = AttachmentsState.Filter( + items = filterState.items, + onClear = filterState.onClear, + ), + stats = AttachmentsState.Stats( + totalAttachments = 0, + totalSize = "12", + ), + selection = selection, + items = items, + ) + Loadable.Ok(state) + } + state +} + +private fun itemKeyForAttachment(key: String) = "attachment.$key" + +sealed interface FooStatus { + companion object { + fun of(attachmentStatus: AttachmentItem.Status) = when (attachmentStatus) { + is AttachmentItem.Status.None -> None + is AttachmentItem.Status.Loading -> Loading + is AttachmentItem.Status.Failed -> Failed + is AttachmentItem.Status.Downloaded -> + Downloaded( + localUrl = attachmentStatus.localUrl, + ) + } + } + + data object None : FooStatus + + data object Loading : FooStatus + + data object Failed : FooStatus + + data class Downloaded( + val localUrl: String, + ) : FooStatus +} + +data class LaunchViewCipherData( + val accountId: String, + val cipherId: String, +) + +fun foo( + translatorScope: TranslatorScope, + fileName: String, + status: FooStatus, + launchViewCipherData: LaunchViewCipherData?, + downloadIo: IO, + removeIo: IO, + navigate: (NavigationIntent) -> Unit, +): List { + fun performDownload() { + downloadIo + .attempt() + .launchIn(GlobalScope) + } + + fun performRemove() { + removeIo + .attempt() + .launchIn(GlobalScope) + } + + return buildContextItems { + section { + when (status) { + is FooStatus.None -> { + this += FlatItemAction( + icon = Icons.Outlined.Download, + title = translatorScope.translate(Res.strings.download), + onClick = ::performDownload, + type = FlatItemAction.Type.DOWNLOAD, + ) + } + + is FooStatus.Loading -> { + this += FlatItemAction( + leading = icon(Icons.Outlined.Cancel), + title = translatorScope.translate(Res.strings.cancel), + onClick = ::performRemove, + ) + } + + is FooStatus.Failed -> { + this += FlatItemAction( + leading = icon(Icons.Outlined.Cancel), + title = translatorScope.translate(Res.strings.cancel), + onClick = ::performRemove, + ) + this += FlatItemAction( + leading = icon(Icons.Outlined.Refresh), + title = translatorScope.translate(Res.strings.download), + onClick = ::performDownload, + type = FlatItemAction.Type.DOWNLOAD, + ) + } + + is FooStatus.Downloaded -> { + val fileUrl = status.localUrl + this += FlatItemAction( + leading = icon(Icons.Outlined.FileOpen), + trailing = { + ChevronIcon() + }, + title = translatorScope.translate(Res.strings.file_action_open_with_title), + onClick = { + val intent = NavigationIntent.NavigateToPreview( + uri = fileUrl, + fileName = fileName, + ) + navigate(intent) + }, + type = FlatItemAction.Type.VIEW, + ) + if (CurrentPlatform is Platform.Desktop) { + this += FlatItemAction( + leading = iconSmall(Icons.Outlined.FileOpen, Icons.Outlined.FolderOpen), + trailing = { + ChevronIcon() + }, + title = translatorScope.translate(Res.strings.file_action_open_in_file_manager_title), + onClick = { + val intent = NavigationIntent.NavigateToPreviewInFileManager( + uri = fileUrl, + fileName = fileName, + ) + navigate(intent) + }, + ) + } + if (CurrentPlatform is Platform.Mobile) { + this += FlatItemAction( + leading = icon(Icons.Outlined.Send), + trailing = { + ChevronIcon() + }, + title = translatorScope.translate(Res.strings.file_action_send_with_title), + onClick = { + val intent = NavigationIntent.NavigateToSend( + uri = fileUrl, + fileName = fileName, + ) + navigate(intent) + }, + ) + } + this += FlatItemAction( + leading = icon(Icons.Outlined.Delete), + title = translatorScope.translate(Res.strings.file_action_delete_local_title), + onClick = ::performRemove, + ) + } + } + } + if (launchViewCipherData != null) { + section { + this += FlatItemAction( + leading = icon(Icons.Outlined.OpenInNew), + trailing = { + ChevronIcon() + }, + title = translatorScope.translate(Res.strings.file_action_view_cipher_title), + onClick = { + val route = VaultViewRoute( + itemId = launchViewCipherData.cipherId, + accountId = launchViewCipherData.accountId, + ) + val intent = NavigationIntent.NavigateToRoute( + route = route, + ) + navigate(intent) + }, + ) + } + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/attachments/compose/ItemAttachment.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/attachments/compose/ItemAttachment.kt new file mode 100644 index 00000000..1699fe7b --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/attachments/compose/ItemAttachment.kt @@ -0,0 +1,386 @@ +package com.artemchep.keyguard.feature.attachments.compose + +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.animation.Crossfade +import androidx.compose.animation.ExperimentalAnimationApi +import androidx.compose.animation.animateContentSize +import androidx.compose.animation.core.animateFloatAsState +import androidx.compose.animation.fadeIn +import androidx.compose.animation.fadeOut +import androidx.compose.animation.scaleIn +import androidx.compose.animation.scaleOut +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ExperimentalLayoutApi +import androidx.compose.foundation.layout.FlowRow +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.heightIn +import androidx.compose.foundation.layout.offset +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.sizeIn +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.layout.widthIn +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Download +import androidx.compose.material.icons.outlined.DownloadDone +import androidx.compose.material.icons.outlined.ErrorOutline +import androidx.compose.material.icons.outlined.Info +import androidx.compose.material.icons.outlined.Launch +import androidx.compose.material3.Checkbox +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.LinearProgressIndicator +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.State +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.feature.attachments.SelectableItemState +import com.artemchep.keyguard.feature.attachments.model.AttachmentItem +import com.artemchep.keyguard.feature.filepicker.humanReadableByteCountSI +import com.artemchep.keyguard.ui.ContextItem +import com.artemchep.keyguard.ui.ExpandedIfNotEmpty +import com.artemchep.keyguard.ui.ExpandedIfNotEmptyForRow +import com.artemchep.keyguard.ui.FlatDropdown +import com.artemchep.keyguard.ui.FlatItemAction +import com.artemchep.keyguard.ui.FlatItemTextContent +import com.artemchep.keyguard.ui.icons.AttachmentIcon +import com.artemchep.keyguard.ui.theme.info +import com.artemchep.keyguard.ui.theme.infoContainer + +@OptIn(ExperimentalLayoutApi::class) +@Composable +fun ItemAttachment( + modifier: Modifier, + item: AttachmentItem, +) { + val downloadStatusState = item.statusState.collectAsState() + val selectableState = item.selectableState.collectAsState() + val actionsState = item.actionsState.collectAsState() + ItemAttachmentLayout( + modifier = modifier, + name = item.name, + size = item.size, + dropdown = actionsState.value, + previewUrlProvider = { downloadStatusState.value.previewUrl }, + downloadedProvider = { + downloadStatusState.value is AttachmentItem.Status.Downloaded + }, + selectableState = selectableState, + content = { + ExpandedIfNotEmpty( + // If the download progress does not exist then + // do not show the visuals. + valueOrNull = downloadStatusState.value as? AttachmentItem.Status.Loading, + ) { downloadProgress -> + Column { + Spacer( + modifier = Modifier + .height(8.dp), + ) + + val downloaded = downloadProgress.downloaded + val total = downloadProgress.total + + val downloadedRatio = if ( + downloaded != null && + total != null + ) { + val p = downloaded.toDouble() / total.toDouble() + p.toFloat().coerceIn(0f..1f) + } else { + null + } + Row( + modifier = Modifier + .heightIn(min = 24.dp), + verticalAlignment = Alignment.CenterVertically, + ) { + val downloadedHumanReadable = downloaded?.let(::humanReadableByteCountSI) + ExpandedIfNotEmptyForRow( + valueOrNull = downloadedHumanReadable, + ) { text -> + Text( + modifier = Modifier + .widthIn(min = 64.dp) + .padding(end = 8.dp) + .animateContentSize(), + text = text, + style = MaterialTheme.typography.labelSmall, + ) + } + Crossfade( + targetState = downloadedRatio != null, + ) { hasProgress -> + if (hasProgress) { + val updatedProgressState = remember { + mutableStateOf(0f) + } + if (downloadedRatio != null) { + updatedProgressState.value = + downloadedRatio + } + val p = animateFloatAsState(updatedProgressState.value) + LinearProgressIndicator( + modifier = Modifier + .fillMaxWidth(), + progress = p.value, + ) + } else { + LinearProgressIndicator( + modifier = Modifier + .fillMaxWidth(), + ) + } + } + } + } + } + ExpandedIfNotEmpty( + // If the download progress does not exist then + // do not show the visuals. + valueOrNull = downloadStatusState.value as? AttachmentItem.Status.Failed, + ) { downloadFailed -> + FlowRow( + modifier = Modifier + .padding( + top = 4.dp, + ), + horizontalArrangement = Arrangement.spacedBy(4.dp), + verticalArrangement = Arrangement.spacedBy(4.dp, Alignment.CenterVertically), + ) { + val errorContentColor = MaterialTheme.colorScheme.error + val errorBackgroundColor = MaterialTheme.colorScheme.errorContainer + val infoContentColor = MaterialTheme.colorScheme.info + val infoBackgroundColor = MaterialTheme.colorScheme.infoContainer + Row( + modifier = Modifier + .background( + errorBackgroundColor, + MaterialTheme.shapes.small, + ) + .padding( + start = 4.dp, + top = 4.dp, + bottom = 4.dp, + end = 4.dp, + ), + verticalAlignment = Alignment.CenterVertically, + ) { + Icon( + modifier = Modifier + .size(14.dp), + imageVector = Icons.Outlined.ErrorOutline, + contentDescription = null, + tint = errorContentColor, + ) + Spacer(modifier = Modifier.width(4.dp)) + Text( + modifier = Modifier, + text = "Downloading failed", + style = MaterialTheme.typography.labelMedium, + ) + } + ExpandedIfNotEmptyForRow( + valueOrNull = Unit.takeIf { downloadFailed.autoResume }, + ) { + Row( + modifier = Modifier + .background( + infoBackgroundColor, + MaterialTheme.shapes.small, + ) + .padding( + start = 4.dp, + top = 4.dp, + bottom = 4.dp, + end = 4.dp, + ), + verticalAlignment = Alignment.CenterVertically, + ) { + Icon( + modifier = Modifier + .size(14.dp), + imageVector = Icons.Outlined.Info, + contentDescription = null, + tint = infoContentColor, + ) + Spacer(modifier = Modifier.width(4.dp)) + Text( + modifier = Modifier, + text = "Auto-resumes", + style = MaterialTheme.typography.labelMedium, + ) + } + } + } + } + }, + ) +} + +@Composable +private fun ItemAttachmentLayout( + modifier: Modifier, + name: String, + size: String? = null, + dropdown: List, + previewUrlProvider: @Composable () -> String?, + downloadedProvider: @Composable () -> Boolean, + selectableState: State, + content: (@Composable () -> Unit)? = null, +) { + val selectable = selectableState.value + val selected = selectable.selected + val backgroundColor = + if (selectable.selected) { + MaterialTheme.colorScheme.primaryContainer + } else { + MaterialTheme.colorScheme.surface + } + FlatDropdown( + modifier = modifier, + backgroundColor = backgroundColor, + content = { + FlatItemTextContent( + title = { + Text(name) + }, + text = if (size != null) { + // composable + { + Text(size) + } + } else { + null + }, + ) + content?.invoke() + }, + leading = { + Box { + val url = previewUrlProvider() + val downloaded = downloadedProvider() + AttachmentIcon( + uri = url, + name = name, + encrypted = false, + ) + Row( + modifier = Modifier + .offset(x = 6.dp, y = 6.dp) + .align(Alignment.BottomEnd), + ) { + AnimatedVisibility( + visible = downloaded, + enter = fadeIn() + scaleIn(), + exit = scaleOut() + fadeOut(), + ) { + Icon( + modifier = Modifier + .background( + MaterialTheme.colorScheme.tertiaryContainer, + MaterialTheme.shapes.extraSmall, + ) + .size(16.dp) + .padding(1.dp), + imageVector = Icons.Outlined.DownloadDone, + tint = MaterialTheme.colorScheme.onTertiaryContainer, + contentDescription = null, + ) + } + } + } + }, + trailing = { + Crossfade( + targetState = selectable.selecting, + ) { + if (it) { + Checkbox( + modifier = Modifier + .sizeIn( + minWidth = 48.dp, + minHeight = 48.dp, + ), + checked = selected, + onCheckedChange = null, + ) + } else { + Row( + modifier = Modifier + .sizeIn( + minWidth = 48.dp, + minHeight = 48.dp, + ), + horizontalArrangement = Arrangement.End, + verticalAlignment = Alignment.CenterVertically, + ) { + val onLaunchAction = remember(dropdown) { + dropdown + .firstNotNullOfOrNull { + val action = it as? FlatItemAction + action?.takeIf { it.type == FlatItemAction.Type.VIEW } + } + } + ExpandedIfNotEmptyForRow( + valueOrNull = onLaunchAction, + ) { action -> + val onCopy = action.onClick + IconButton( + enabled = onCopy != null, + onClick = { + onCopy?.invoke() + }, + ) { + Icon( + imageVector = Icons.Outlined.Launch, + contentDescription = null, + ) + } + } + + val onDownloadAction = remember(dropdown) { + dropdown + .firstNotNullOfOrNull { + val action = it as? FlatItemAction + action?.takeIf { it.type == FlatItemAction.Type.DOWNLOAD } + } + } + ExpandedIfNotEmptyForRow( + valueOrNull = onDownloadAction, + ) { action -> + val onCopy = action.onClick + IconButton( + enabled = onCopy != null, + onClick = { + onCopy?.invoke() + }, + ) { + Icon( + imageVector = Icons.Outlined.Download, + contentDescription = null, + ) + } + } + } + } + } + }, + dropdown = dropdown, + onClick = selectable.onClick, + onLongClick = selectable.onLongClick, + enabled = true, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/attachments/model/AttachmentItem.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/attachments/model/AttachmentItem.kt new file mode 100644 index 00000000..6d1a079d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/attachments/model/AttachmentItem.kt @@ -0,0 +1,79 @@ +package com.artemchep.keyguard.feature.attachments.model + +import com.artemchep.keyguard.common.service.download.DownloadProgress +import com.artemchep.keyguard.feature.attachments.SelectableItemState +import com.artemchep.keyguard.ui.ContextItem +import com.artemchep.keyguard.ui.canRetry +import com.artemchep.keyguard.ui.getHttpCode +import kotlinx.coroutines.flow.StateFlow + +data class AttachmentItem( + val key: String, + val name: String, + val extension: String?, + val size: String?, + val statusState: StateFlow, + val actionsState: StateFlow>, + val selectableState: StateFlow, +) { + sealed interface Status { + companion object { + fun of( + downloadStatus: DownloadProgress, + ) = when (downloadStatus) { + is DownloadProgress.None -> None + + is DownloadProgress.Loading -> Loading( + downloaded = downloadStatus.downloaded, + total = downloadStatus.total, + ) + + is DownloadProgress.Complete -> + downloadStatus + .result + .fold( + ifLeft = { e -> + val code = e.getHttpCode() + val autoResume = code.canRetry() + Failed( + code = code, + autoResume = autoResume, + ) + }, + ifRight = { file -> + val uri = file.toURI().toString() + Downloaded( + localUrl = uri,//leParseUri(file).toString(), + ) + }, + ) + } + } + + val previewUrl: String? + + data object None : Status { + override val previewUrl get() = null + } + + data class Loading( + val downloaded: Long?, + val total: Long?, + ) : Status { + override val previewUrl get() = null + } + + data class Failed( + val code: Int, + val autoResume: Boolean, + ) : Status { + override val previewUrl get() = null + } + + data class Downloaded( + val localUrl: String, + ) : Status { + override val previewUrl get() = localUrl + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/attachments/util/CreateAttachmentItem.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/attachments/util/CreateAttachmentItem.kt new file mode 100644 index 00000000..525c9cc0 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/attachments/util/CreateAttachmentItem.kt @@ -0,0 +1,121 @@ +package com.artemchep.keyguard.feature.attachments.util + +import arrow.core.partially1 +import com.artemchep.keyguard.android.downloader.journal.room.DownloadInfoEntity2 +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.DSecret +import com.artemchep.keyguard.common.model.fileName +import com.artemchep.keyguard.common.model.fileSize +import com.artemchep.keyguard.common.service.download.DownloadManager +import com.artemchep.keyguard.common.util.flow.persistingStateIn +import com.artemchep.keyguard.feature.attachments.FooStatus +import com.artemchep.keyguard.feature.attachments.LaunchViewCipherData +import com.artemchep.keyguard.feature.attachments.SelectableItemState +import com.artemchep.keyguard.feature.attachments.SelectableItemStateRaw +import com.artemchep.keyguard.feature.attachments.foo +import com.artemchep.keyguard.feature.attachments.model.AttachmentItem +import com.artemchep.keyguard.feature.filepicker.humanReadableByteCountSI +import com.artemchep.keyguard.feature.home.vault.screen.verify +import com.artemchep.keyguard.feature.navigation.state.RememberStateFlowScope +import com.artemchep.keyguard.ui.selection.SelectionHandle +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.stateIn + +suspend fun RememberStateFlowScope.createAttachmentItem( + attachment: DSecret.Attachment, + tag: DownloadInfoEntity2.AttachmentDownloadTag, + selectionHandle: SelectionHandle, + sharingScope: CoroutineScope, + launchViewCipherData: LaunchViewCipherData?, + downloadManager: DownloadManager, + downloadIo: IO, + removeIo: IO, + verify: ((() -> Unit) -> Unit)? = null, +): AttachmentItem { + val fileName = attachment.fileName() + val fileExt = attachment.fileName() + val fileSize = attachment + .fileSize() + ?.let(::humanReadableByteCountSI) + + val downloadStatusState = downloadManager + .statusByTag(tag) + .map { downloadStatus -> + AttachmentItem.Status.of( + downloadStatus = downloadStatus, + ) + } + .persistingStateIn( + scope = sharingScope, + started = SharingStarted.WhileSubscribed(1000L), + ) + val actionsState = downloadStatusState + .map { attachmentStatus -> + FooStatus.of( + attachmentStatus = attachmentStatus, + ) + } + .distinctUntilChanged() + .map { actionsStatus -> + val actions = foo( + translatorScope = this, + fileName = fileName, + launchViewCipherData = launchViewCipherData, + status = actionsStatus, + downloadIo = downloadIo, + removeIo = removeIo, + navigate = ::navigate, + ).verify(verify) + actions + } + .persistingStateIn( + scope = sharingScope, + started = SharingStarted.WhileSubscribed(1000L), + ) + val selectableState = selectionHandle + .idsFlow + .map { selectedIds -> + SelectableItemStateRaw( + selecting = selectedIds.isNotEmpty(), + selected = attachment.id in selectedIds, + ) + } + .distinctUntilChanged() + .map { raw -> + val onClick = if (raw.selecting) { + // lambda + selectionHandle::toggleSelection.partially1( + attachment.id, + ) + } else { + null + } + val onLongClick = if (raw.selecting) { + null + } else { + // lambda + selectionHandle::toggleSelection.partially1( + attachment.id, + ) + } + SelectableItemState( + selecting = raw.selecting, + selected = raw.selected, + onClick = onClick, + onLongClick = onLongClick, + ) + } + .stateIn(sharingScope) + return AttachmentItem( + key = "attachment.${attachment.id}", + name = fileName, + extension = fileExt, + size = fileSize, + statusState = downloadStatusState, + actionsState = actionsState, + selectableState = selectableState, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/attachments/util/CreateSendAttachmentItem.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/attachments/util/CreateSendAttachmentItem.kt new file mode 100644 index 00000000..55de7531 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/attachments/util/CreateSendAttachmentItem.kt @@ -0,0 +1,117 @@ +package com.artemchep.keyguard.feature.attachments.util + +import arrow.core.partially1 +import com.artemchep.keyguard.android.downloader.journal.room.DownloadInfoEntity2 +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.DSend +import com.artemchep.keyguard.common.service.download.DownloadManager +import com.artemchep.keyguard.common.util.flow.persistingStateIn +import com.artemchep.keyguard.feature.attachments.FooStatus +import com.artemchep.keyguard.feature.attachments.LaunchViewCipherData +import com.artemchep.keyguard.feature.attachments.SelectableItemState +import com.artemchep.keyguard.feature.attachments.SelectableItemStateRaw +import com.artemchep.keyguard.feature.attachments.foo +import com.artemchep.keyguard.feature.attachments.model.AttachmentItem +import com.artemchep.keyguard.feature.filepicker.humanReadableByteCountSI +import com.artemchep.keyguard.feature.navigation.state.RememberStateFlowScope +import com.artemchep.keyguard.ui.selection.SelectionHandle +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.stateIn + +suspend fun RememberStateFlowScope.createAttachmentItem( + attachment: DSend.File, + tag: DownloadInfoEntity2.AttachmentDownloadTag, + selectionHandle: SelectionHandle, + sharingScope: CoroutineScope, + launchViewCipherData: LaunchViewCipherData?, + downloadManager: DownloadManager, + downloadIo: IO, + removeIo: IO, +): AttachmentItem { + val fileName = attachment.fileName + val fileExt = attachment.fileName + val fileSize = attachment + .size + ?.let(::humanReadableByteCountSI) + + val downloadStatusState = downloadManager + .statusByTag(tag) + .map { downloadStatus -> + AttachmentItem.Status.of( + downloadStatus = downloadStatus, + ) + } + .persistingStateIn( + scope = sharingScope, + started = SharingStarted.WhileSubscribed(1000L), + ) + val actionsState = downloadStatusState + .map { attachmentStatus -> + FooStatus.of( + attachmentStatus = attachmentStatus, + ) + } + .distinctUntilChanged() + .map { actionsStatus -> + val actions = foo( + translatorScope = this, + fileName = fileName, + launchViewCipherData = launchViewCipherData, + status = actionsStatus, + downloadIo = downloadIo, + removeIo = removeIo, + navigate = ::navigate, + ) + actions + } + .persistingStateIn( + scope = sharingScope, + started = SharingStarted.WhileSubscribed(1000L), + ) + val selectableState = selectionHandle + .idsFlow + .map { selectedIds -> + SelectableItemStateRaw( + selecting = selectedIds.isNotEmpty(), + selected = attachment.id in selectedIds, + ) + } + .distinctUntilChanged() + .map { raw -> + val onClick = if (raw.selecting) { + // lambda + selectionHandle::toggleSelection.partially1( + attachment.id, + ) + } else { + null + } + val onLongClick = if (raw.selecting) { + null + } else { + // lambda + selectionHandle::toggleSelection.partially1( + attachment.id, + ) + } + SelectableItemState( + selecting = raw.selecting, + selected = raw.selected, + onClick = onClick, + onLongClick = onLongClick, + ) + } + .stateIn(sharingScope) + return AttachmentItem( + key = "attachment.${attachment.id}", + name = fileName, + extension = fileExt, + size = fileSize, + statusState = downloadStatusState, + actionsState = actionsState, + selectableState = selectableState, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/AccountViewRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/AccountViewRoute.kt new file mode 100644 index 00000000..556cbf8a --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/AccountViewRoute.kt @@ -0,0 +1,16 @@ +package com.artemchep.keyguard.feature.auth + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.common.model.AccountId +import com.artemchep.keyguard.feature.navigation.Route + +data class AccountViewRoute( + val accountId: AccountId, +) : Route { + @Composable + override fun Content() { + AccountViewScreen( + accountId = accountId, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/AccountViewScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/AccountViewScreen.kt new file mode 100644 index 00000000..9699410d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/AccountViewScreen.kt @@ -0,0 +1,236 @@ +package com.artemchep.keyguard.feature.auth + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.IntrinsicSize +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.lazy.items +import androidx.compose.material.ExperimentalMaterialApi +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Launch +import androidx.compose.material.icons.outlined.SearchOff +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.runtime.Composable +import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.input.nestedscroll.nestedScroll +import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.common.model.AccountId +import com.artemchep.keyguard.feature.EmptyView +import com.artemchep.keyguard.feature.home.vault.component.VaultViewItem +import com.artemchep.keyguard.feature.navigation.NavigationIcon +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.DefaultFab +import com.artemchep.keyguard.ui.DisabledEmphasisAlpha +import com.artemchep.keyguard.ui.FabState +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.OptionallyKeepScreenOnEffect +import com.artemchep.keyguard.ui.OptionsButton +import com.artemchep.keyguard.ui.ScaffoldLazyColumn +import com.artemchep.keyguard.ui.shimmer.shimmer +import com.artemchep.keyguard.ui.theme.Dimens +import com.artemchep.keyguard.ui.theme.combineAlpha +import com.artemchep.keyguard.ui.toolbar.LargeToolbar +import dev.icerock.moko.resources.compose.stringResource + +@Composable +fun AccountViewScreen( + accountId: AccountId, +) { + OptionallyKeepScreenOnEffect() + + val state = accountState(accountId) + AccountViewScreen( + state = state, + ) +} + +@OptIn( + ExperimentalMaterial3Api::class, + ExperimentalMaterialApi::class, +) +@Composable +fun AccountViewScreen( + state: AccountViewState, +) { + val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior() + ScaffoldLazyColumn( + modifier = Modifier + .nestedScroll(scrollBehavior.nestedScrollConnection), + topAppBarScrollBehavior = scrollBehavior, + topBar = { + LargeToolbar( + title = { + AccountViewTitle(state) + }, + navigationIcon = { + NavigationIcon() + }, + actions = { + val updatedOnOpenWebVault by rememberUpdatedState( + newValue = AccountViewState.content.data.onOpenWebVault.getOrNull(state), + ) + TextButton( + enabled = updatedOnOpenWebVault != null, + onClick = { + updatedOnOpenWebVault?.invoke() + }, + ) { + Icon( + imageVector = Icons.Outlined.Launch, + contentDescription = null, + ) + Spacer( + modifier = Modifier + .width(Dimens.buttonIconPadding), + ) + Text( + text = stringResource(Res.strings.web_vault), + ) + } + + val actions = AccountViewState.content.data.actions.getOrNull(state) + ?: return@LargeToolbar + OptionsButton( + actions = actions, + ) + }, + scrollBehavior = scrollBehavior, + ) + }, + floatingActionState = run { + val primaryAction = AccountViewState.content.data.primaryAction.getOrNull(state) + val fabOnClick = primaryAction?.onClick + val fabState = if (fabOnClick != null) { + FabState( + onClick = fabOnClick, + model = null, + ) + } else { + null + } + rememberUpdatedState(newValue = fabState) + }, + floatingActionButton = { + val primaryAction = AccountViewState.content.data.primaryAction.getOrNull(state) + DefaultFab( + icon = { + val icon = primaryAction?.icon + if (icon != null) { + Icon( + imageVector = icon, + contentDescription = null, + ) + } + }, + text = { + Text(primaryAction?.text.orEmpty()) + }, + ) + }, + ) { + val items = AccountViewState.content.data.items.getOrNull(state).orEmpty() + items( + items, + key = { it.id }, + ) { + VaultViewItem(item = it) + } + } +} + +@Composable +private fun AccountViewTitle( + state: AccountViewState, +) = Column { + val isLoading = state.content is AccountViewState.Content.Skeleton + val shimmerColor = LocalContentColor.current + .combineAlpha(DisabledEmphasisAlpha) + + val host by derivedStateOf { + val data = AccountViewState.content.data.data.getOrNull(state) + data?.host.orEmpty() + } + if (isLoading) { + Box( + modifier = Modifier + .height(IntrinsicSize.Min), + ) { + Box( + modifier = Modifier + .shimmer() + .fillMaxHeight() + .fillMaxWidth(0.28f) + .clip(MaterialTheme.shapes.medium) + .background(shimmerColor), + ) + // only needed to measure the text size + Text( + "", + style = MaterialTheme.typography.labelSmall, + ) + } + Box( + modifier = Modifier + .padding(top = 4.dp) + .height(IntrinsicSize.Min), + ) { + Box( + modifier = Modifier + .shimmer() + .fillMaxHeight() + .fillMaxWidth(0.45f) + .clip(MaterialTheme.shapes.medium) + .background(shimmerColor), + ) + // only needed to measure the text size + Text( + "", + style = MaterialTheme.typography.titleMedium, + ) + } + } else { + Text( + text = host, + style = MaterialTheme.typography.labelSmall, + color = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + overflow = TextOverflow.Ellipsis, + maxLines = 2, + ) + Text( + text = "Bitwarden", + style = MaterialTheme.typography.titleMedium, + overflow = TextOverflow.Ellipsis, + maxLines = 1, + ) + } +} + +@Composable +private fun NoItemsPlaceholder() { + EmptyView( + icon = { + Icon(Icons.Outlined.SearchOff, null) + }, + text = { + Text(text = "No items") + }, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/AccountViewState.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/AccountViewState.kt new file mode 100644 index 00000000..c36aafab --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/AccountViewState.kt @@ -0,0 +1,42 @@ +package com.artemchep.keyguard.feature.auth + +import androidx.compose.runtime.Immutable +import androidx.compose.ui.graphics.vector.ImageVector +import arrow.optics.optics +import com.artemchep.keyguard.common.model.DAccount +import com.artemchep.keyguard.feature.home.vault.model.VaultViewItem +import com.artemchep.keyguard.ui.FlatItemAction + +@Immutable +@optics +data class AccountViewState( + val content: Content = Content.Skeleton, +) { + companion object; + + @optics + sealed interface Content { + companion object; + + data object Skeleton : Content + + data object NotFound : Content + + @optics + data class Data( + val data: DAccount, + val items: List, + val actions: List, + val primaryAction: PrimaryAction? = null, + val onOpenWebVault: (() -> Unit)? = null, + ) : Content { + companion object; + + data class PrimaryAction( + val text: String = "", + val icon: ImageVector? = null, + val onClick: (() -> Unit)? = null, + ) + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/AccountViewStateProducer.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/AccountViewStateProducer.kt new file mode 100644 index 00000000..07784a57 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/AccountViewStateProducer.kt @@ -0,0 +1,1037 @@ +package com.artemchep.keyguard.feature.auth + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.RowScope +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.ColorLens +import androidx.compose.material.icons.outlined.Edit +import androidx.compose.material.icons.outlined.Fingerprint +import androidx.compose.material.icons.outlined.Folder +import androidx.compose.material.icons.outlined.HelpOutline +import androidx.compose.material.icons.outlined.Login +import androidx.compose.material.icons.outlined.Logout +import androidx.compose.material.icons.outlined.VerifiedUser +import androidx.compose.material3.Badge +import androidx.compose.material3.BadgedBox +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.text.AnnotatedString +import androidx.compose.ui.unit.dp +import arrow.core.partially1 +import com.artemchep.keyguard.common.io.attempt +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.io.effectMap +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.io.toIO +import com.artemchep.keyguard.common.model.AccountId +import com.artemchep.keyguard.common.model.DAccount +import com.artemchep.keyguard.common.model.DFilter +import com.artemchep.keyguard.common.model.DMeta +import com.artemchep.keyguard.common.model.DProfile +import com.artemchep.keyguard.common.model.firstOrNull +import com.artemchep.keyguard.common.service.clipboard.ClipboardService +import com.artemchep.keyguard.common.usecase.CopyText +import com.artemchep.keyguard.common.usecase.DateFormatter +import com.artemchep.keyguard.common.usecase.GetAccounts +import com.artemchep.keyguard.common.usecase.GetCiphers +import com.artemchep.keyguard.common.usecase.GetCollections +import com.artemchep.keyguard.common.usecase.GetFingerprint +import com.artemchep.keyguard.common.usecase.GetFolders +import com.artemchep.keyguard.common.usecase.GetGravatarUrl +import com.artemchep.keyguard.common.usecase.GetMetas +import com.artemchep.keyguard.common.usecase.GetOrganizations +import com.artemchep.keyguard.common.usecase.GetProfiles +import com.artemchep.keyguard.common.usecase.PutAccountColorById +import com.artemchep.keyguard.common.usecase.PutAccountMasterPasswordHintById +import com.artemchep.keyguard.common.usecase.PutAccountNameById +import com.artemchep.keyguard.common.usecase.QueueSyncById +import com.artemchep.keyguard.common.usecase.RemoveAccountById +import com.artemchep.keyguard.common.usecase.SupervisorRead +import com.artemchep.keyguard.core.store.DatabaseManager +import com.artemchep.keyguard.feature.auth.login.LoginRoute +import com.artemchep.keyguard.feature.colorpicker.ColorPickerRoute +import com.artemchep.keyguard.feature.colorpicker.createColorPickerDialogIntent +import com.artemchep.keyguard.feature.confirmation.ConfirmationRoute +import com.artemchep.keyguard.feature.confirmation.createConfirmationDialogIntent +import com.artemchep.keyguard.feature.crashlytics.crashlyticsTap +import com.artemchep.keyguard.feature.emailleak.EmailLeakRoute +import com.artemchep.keyguard.feature.home.vault.VaultRoute +import com.artemchep.keyguard.feature.home.vault.collections.CollectionsRoute +import com.artemchep.keyguard.feature.home.vault.folders.FoldersRoute +import com.artemchep.keyguard.feature.home.vault.model.VaultViewItem +import com.artemchep.keyguard.feature.home.vault.organizations.OrganizationsRoute +import com.artemchep.keyguard.feature.largetype.LargeTypeRoute +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.feature.navigation.registerRouteResultReceiver +import com.artemchep.keyguard.feature.navigation.state.RememberStateFlowScope +import com.artemchep.keyguard.feature.navigation.state.copy +import com.artemchep.keyguard.feature.navigation.state.produceScreenState +import com.artemchep.keyguard.provider.bitwarden.ServerEnv +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItemAction +import com.artemchep.keyguard.ui.buildContextItems +import com.artemchep.keyguard.ui.icons.ChevronIcon +import com.artemchep.keyguard.ui.icons.EmailIcon +import com.artemchep.keyguard.ui.icons.KeyguardCipher +import com.artemchep.keyguard.ui.icons.KeyguardCollection +import com.artemchep.keyguard.ui.icons.KeyguardOrganization +import com.artemchep.keyguard.ui.icons.KeyguardPremium +import com.artemchep.keyguard.ui.icons.KeyguardTwoFa +import com.artemchep.keyguard.ui.icons.SyncIcon +import com.artemchep.keyguard.ui.icons.icon +import com.artemchep.keyguard.ui.icons.iconSmall +import com.artemchep.keyguard.ui.theme.badgeContainer +import com.artemchep.keyguard.ui.theme.isDark +import kotlinx.coroutines.DelicateCoroutinesApi +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.FlowCollector +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.flow +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.toList +import org.kodein.di.compose.localDI +import org.kodein.di.direct +import org.kodein.di.instance + +@Composable +fun accountState( + accountId: AccountId, +): AccountViewState = with(localDI().direct) { + accountState( + queueSyncById = instance(), + syncSupervisor = instance(), + getGravatarUrl = instance(), + clipboardService = instance(), + dateFormatter = instance(), + removeAccountById = instance(), + getFingerprint = instance(), + putAccountNameById = instance(), + putAccountColorById = instance(), + putAccountMasterPasswordHintById = instance(), + getAccounts = instance(), + getProfiles = instance(), + getCiphers = instance(), + getFolders = instance(), + getCollections = instance(), + getOrganizations = instance(), + getMetas = instance(), + db = instance(), + accountId = accountId, + ) +} + +private data class AccountCounters( + val ciphers: Int, + val organizations: Int, + val collections: Int, + val folders: Int, +) + +@Composable +fun accountState( + queueSyncById: QueueSyncById, + syncSupervisor: SupervisorRead, + getGravatarUrl: GetGravatarUrl, + clipboardService: ClipboardService, + dateFormatter: DateFormatter, + removeAccountById: RemoveAccountById, + getFingerprint: GetFingerprint, + putAccountNameById: PutAccountNameById, + putAccountColorById: PutAccountColorById, + putAccountMasterPasswordHintById: PutAccountMasterPasswordHintById, + getAccounts: GetAccounts, + getProfiles: GetProfiles, + getCiphers: GetCiphers, + getFolders: GetFolders, + getCollections: GetCollections, + getOrganizations: GetOrganizations, + getMetas: GetMetas, + db: DatabaseManager, + accountId: AccountId, +): AccountViewState = produceScreenState( + initial = AccountViewState(), + key = "account:$accountId", + args = arrayOf( + accountId, + ), +) { + fun doReLogin( + accountId: AccountId, + email: String, + env: ServerEnv, + ) { + val route = registerRouteResultReceiver( + route = LoginRoute( + args = LoginRoute.Args( + accountId = accountId.id, + email = email, + emailEditable = false, + env = env, + envEditable = false, + ), + ), + ) { + navigate(NavigationIntent.Pop) + } + val intent = NavigationIntent.NavigateToRoute(route) + navigate(intent) + } + + fun doSyncAccountById(accountId: AccountId) { + queueSyncById(accountId) + .launchIn(appScope) + } + + fun doRemoveAccountById(accountId: AccountId) { + val intent = createConfirmationDialogIntent( + icon = icon(Icons.Outlined.Logout), + title = translate(Res.strings.account_log_out_confirmation_title), + message = translate(Res.strings.account_log_out_confirmation_text), + ) { + removeAccountById(setOf(accountId)) + .launchIn(appScope) + } + navigate(intent) + } + + val accountFlow = getAccounts() + .map { it.firstOrNull(accountId) } + val metaFlow = getMetas() + .map { it.firstOrNull(accountId) } + val profileFlow = getProfiles() + .map { it.firstOrNull(accountId) } + + val countersFlow = kotlin.run { + fun Flow>.mapCount(predicate: (T) -> Boolean) = this + .map { list -> list.count(predicate) } + .distinctUntilChanged() + + val ciphersCountFlow = getCiphers() + .mapCount { + it.accountId == accountId.id && + it.deletedDate == null + } + val foldersCountFlow = getFolders() + .mapCount { + it.accountId == accountId.id && + !it.deleted + } + val collectionsCountFlow = getCollections() + .mapCount { it.accountId == accountId.id } + val organizationsCountFlow = getOrganizations() + .mapCount { it.accountId == accountId.id } + + combine( + ciphersCountFlow, + organizationsCountFlow, + collectionsCountFlow, + foldersCountFlow, + ) { ciphersCount, organizationsCount, collectionsCount, foldersCount -> + AccountCounters( + ciphers = ciphersCount, + organizations = organizationsCount, + collections = collectionsCount, + folders = foldersCount, + ) + } + } + + val copyText = copy(clipboardService) + + fun Flow.prepare() = this + .distinctUntilChanged() + + fun Flow.prepare() = this + .distinctUntilChanged() + + val primaryActionFlow = metaFlow.prepare() + .map { meta -> + val requiresAuthentication = meta?.lastSyncResult is DMeta.LastSyncResult.Failure + // TODO: +// && +// meta.lastSyncResult.requiresAuthentication + val primaryActionOrNull = if (requiresAuthentication) { + val token = db.get() + .effectMap { + val info = it + .accountQueries + .getByAccountId(accountId.id) + .executeAsOne() + .data_ + info + } + .attempt() + .bind() + token.fold( + ifLeft = { + null + }, + ifRight = { t -> + val email = t.user.email + val env = t.env.back() + AccountViewState.Content.Data.PrimaryAction( + text = translate(Res.strings.account_action_sign_in_title), + icon = Icons.Outlined.Login, + onClick = ::doReLogin + .partially1(accountId) + .partially1(email) + .partially1(env), + ) + }, + ) + } else { + null + } + primaryActionOrNull + } + val itemsFlow = combine( + metaFlow.prepare(), + accountFlow.prepare(), + profileFlow.prepare(), + countersFlow.prepare(), + ) { meta, account, profile, counters -> + buildItemsFlow( + accountId = accountId, + scope = this, + account = account, + profile = profile, + meta = meta, + counters = counters, + copyText = copyText, + putAccountNameById = putAccountNameById, + putAccountColorById = putAccountColorById, + putAccountMasterPasswordHintById = putAccountMasterPasswordHintById, + queueSyncById = queueSyncById, + getFingerprint = getFingerprint, + dateFormatter = dateFormatter, + getGravatarUrl = getGravatarUrl, + ).toList() + } + combine( + accountFlow, + itemsFlow, + primaryActionFlow, + ) { accountOrNull, items, primaryAction -> + if (accountOrNull == null) { + return@combine AccountViewState.Content.NotFound + } + + val syncing = false + val busy = false + + val actionSync = + FlatItemAction( + leading = { + SyncIcon(rotating = syncing) + }, + title = translate(Res.strings.sync), + onClick = if (busy) { + null + } else { + // on click listener + ::doSyncAccountById.partially1(accountOrNull.id) + }, + ) + val actionRemove = + FlatItemAction( + icon = Icons.Outlined.Logout, + title = translate(Res.strings.account_action_sign_out_title), + onClick = if (busy) { + null + } else { + // on click listener + ::doRemoveAccountById.partially1(accountOrNull.id) + }, + ) + AccountViewState.Content.Data( + data = accountOrNull, + actions = listOf( + actionSync, + actionRemove, + ), + items = items, + primaryAction = primaryAction, + onOpenWebVault = { + val intent = NavigationIntent.NavigateToBrowser(accountOrNull.url) + navigate(intent) + }, + ) + } + .map { content -> + AccountViewState( + content = content, + ) + } +} + +@OptIn(ExperimentalMaterial3Api::class) +private fun buildItemsFlow( + accountId: AccountId, + scope: RememberStateFlowScope, + account: DAccount?, + profile: DProfile?, + meta: DMeta?, + counters: AccountCounters, + getGravatarUrl: GetGravatarUrl, + copyText: CopyText, + putAccountNameById: PutAccountNameById, + putAccountColorById: PutAccountColorById, + putAccountMasterPasswordHintById: PutAccountMasterPasswordHintById, + queueSyncById: QueueSyncById, + getFingerprint: GetFingerprint, + dateFormatter: DateFormatter, +): Flow = flow { + if (meta != null) { + when (val syncResult = meta.lastSyncResult) { + is DMeta.LastSyncResult.Success -> { + // Show nothing. + } + + is DMeta.LastSyncResult.Failure -> { + val time = dateFormatter.formatDateTime(syncResult.timestamp) + val model = VaultViewItem.Error( + id = "error", + name = "Couldn't sync the account", + message = syncResult.reason ?: "Something went wrong", + timestamp = time, + onRetry = if (true) { + // lambda + { + queueSyncById(accountId) + .launchIn(scope.appScope) + } + } else { + null + }, + ) + emit(model) + } + + null -> { + // Do nothing. + } + } + } + if (profile != null) { + emitName( + scope = scope, + profile = profile, + copyText = copyText, + putAccountNameById = putAccountNameById, + putAccountColorById = putAccountColorById, + ) + emitEmail( + scope = scope, + profile = profile, + getGravatarUrl = getGravatarUrl, + copyText = copyText, + ) + } + if (meta != null) { + val syncTimestamp = meta.lastSyncTimestamp + if (syncTimestamp != null) { + val syncDate = dateFormatter.formatDateTime(syncTimestamp) + val syncInfoText = scope.translate(Res.strings.account_last_synced_at, syncDate) + val syncInfoItem = VaultViewItem.Label( + id = "sync.timestamp", + text = AnnotatedString(syncInfoText), + ) + emit(syncInfoItem) + } + } + + if (account != null) { + val ff0 = VaultViewItem.Action( + id = "ciphers", + title = scope.translate(Res.strings.items), + leading = { + BadgedBox( + badge = { + Badge( + containerColor = MaterialTheme.colorScheme.badgeContainer, + ) { + val size = counters.ciphers + Text(text = size.toString()) + } + }, + ) { + Icon(Icons.Outlined.KeyguardCipher, null) + } + }, + trailing = { + ChevronIcon() + }, + onClick = { + val route = VaultRoute.by(account = account) + val intent = NavigationIntent.NavigateToRoute(route) + scope.navigate(intent) + }, + ) + emit(ff0) + } + val ff = VaultViewItem.Action( + id = "folders", + title = scope.translate(Res.strings.folders), + leading = { + BadgedBox( + badge = { + Badge( + containerColor = MaterialTheme.colorScheme.badgeContainer, + ) { + val size = counters.folders + Text(text = size.toString()) + } + }, + ) { + Icon(Icons.Outlined.Folder, null) + } + }, + trailing = { + ChevronIcon() + }, + onClick = { + val route = FoldersRoute( + args = FoldersRoute.Args( + filter = DFilter.ById(accountId.id, DFilter.ById.What.ACCOUNT), + ), + ) + val intent = NavigationIntent.NavigateToRoute(route) + scope.navigate(intent) + }, + ) + emit(ff) + val ff2 = VaultViewItem.Action( + id = "collections", + title = scope.translate(Res.strings.collections), + leading = { + BadgedBox( + badge = { + Badge( + containerColor = MaterialTheme.colorScheme.badgeContainer, + ) { + val size = counters.collections + Text(text = size.toString()) + } + }, + ) { + Icon(Icons.Outlined.KeyguardCollection, null) + } + }, + trailing = { + ChevronIcon() + }, + onClick = { + val route = CollectionsRoute( + args = CollectionsRoute.Args( + accountId = accountId, + organizationId = null, + ), + ) + val intent = NavigationIntent.NavigateToRoute(route) + scope.navigate(intent) + }, + ) + emit(ff2) + val ff3 = VaultViewItem.Action( + id = "organizations", + title = scope.translate(Res.strings.organizations), + leading = { + BadgedBox( + badge = { + Badge( + containerColor = MaterialTheme.colorScheme.badgeContainer, + ) { + val size = counters.organizations + Text(text = size.toString()) + } + }, + ) { + Icon(Icons.Outlined.KeyguardOrganization, null) + } + }, + trailing = { + ChevronIcon() + }, + onClick = { + val route = OrganizationsRoute( + args = OrganizationsRoute.Args( + accountId = accountId, + ), + ) + val intent = NavigationIntent.NavigateToRoute(route) + scope.navigate(intent) + }, + ) + emit(ff3) + val ff4 = VaultViewItem.Section( + id = "section", + text = scope.translate(Res.strings.security), + ) + emit(ff4) + if (profile != null) { + emitFingerprint( + scope = scope, + profile = profile, + copyText = copyText, + getFingerprint = getFingerprint, + ) + emitMasterPasswordHint( + scope = scope, + profile = profile, + copyText = copyText, + putAccountMasterPasswordHintById = putAccountMasterPasswordHintById, + ) + val ff5 = VaultViewItem.Section( + id = "section2", + text = scope.translate(Res.strings.info), + ) + emit(ff5) + } + + if (account != null && profile != null) { + emitPremium( + scope = scope, + account = account, + profile = profile, + ) + emitTwoFactorAuth( + scope = scope, + account = account, + profile = profile, + ) + val unofficialServer = profile.unofficialServer + if (unofficialServer) { + val unofficialServerText = scope.translate(Res.strings.bitwarden_unofficial_server) + val unofficialServerItem = VaultViewItem.Label( + id = "unofficial_server", + text = AnnotatedString(unofficialServerText), + ) + emit(unofficialServerItem) + } +// emitMasterPasswordHint( +// profile = profile, +// copyText = copyText, +// ) + } +} + +private suspend fun FlowCollector.emitName( + scope: RememberStateFlowScope, + profile: DProfile, + copyText: CopyText, + putAccountNameById: PutAccountNameById, + putAccountColorById: PutAccountColorById, +) { + val name = profile.name + + fun onClick() { + val intent = scope.createConfirmationDialogIntent( + icon = icon(Icons.Outlined.Edit), + item = ConfirmationRoute.Args.Item.StringItem( + key = "name", + title = scope.translate(Res.strings.account_name), + value = name, + // You can have an empty account name. + canBeEmpty = true, + ), + title = scope.translate(Res.strings.account_action_change_name_title), + ) { name -> + val profileIdsToNames = mapOf( + AccountId(profile.accountId) to name, + ) + putAccountNameById(profileIdsToNames) + .launchIn(scope.appScope) + } + scope.navigate(intent) + } + + fun onEditColor() { + val intent = scope.createColorPickerDialogIntent( + args = ColorPickerRoute.Args( + color = profile.accentColor.dark, + ), + ) { color -> + val profileIdsToColors = mapOf( + AccountId(profile.accountId) to color, + ) + putAccountColorById(profileIdsToColors) + .launchIn(scope.appScope) + } + scope.navigate(intent) + } + + val id = "name" + val nameEditActionItem = FlatItemAction( + icon = Icons.Outlined.Edit, + title = scope.translate(Res.strings.account_action_change_name_title), + onClick = ::onClick, + ) + val colorEditActionItem = FlatItemAction( + leading = iconSmall(Icons.Outlined.Edit, Icons.Outlined.ColorLens), + trailing = { + val accentColor = if (MaterialTheme.colorScheme.isDark) { + profile.accentColor.dark + } else { + profile.accentColor.light + } + Box( + Modifier + .background(accentColor, CircleShape) + .size(24.dp), + ) + }, + title = scope.translate(Res.strings.account_action_change_color_title), + onClick = ::onEditColor, + ) + val leading: @Composable RowScope.() -> Unit = { + val backgroundColor = if (MaterialTheme.colorScheme.isDark) { + profile.accentColor.dark + } else { + profile.accentColor.light + } + Box( + modifier = Modifier + .size(24.dp) + .clip(CircleShape) + .background(backgroundColor), + ) + } + val nameItem = if (name.isBlank()) { + VaultViewItem.Value( + id = id, + elevation = 1.dp, + title = scope.translate(Res.strings.account_name), + value = "", + leading = leading, + dropdown = listOfNotNull( + // action to edit current name + nameEditActionItem, + colorEditActionItem, + ), + ) + } else { + VaultViewItem.Value( + id = id, + elevation = 1.dp, + title = scope.translate(Res.strings.account_name), + value = name, + leading = leading, + dropdown = buildContextItems { + section { + this += copyText.FlatItemAction( + title = scope.translate(Res.strings.copy), + value = name, + ) + } + section { + this += LargeTypeRoute.showInLargeTypeActionOrNull( + translator = scope, + text = name, + navigate = scope::navigate, + ) + this += LargeTypeRoute.showInLargeTypeActionAndLockOrNull( + translator = scope, + text = name, + navigate = scope::navigate, + ) + } + section { + this += nameEditActionItem + this += colorEditActionItem + } + }, + ) + } + emit(nameItem) +} + +private suspend fun FlowCollector.emitEmail( + scope: RememberStateFlowScope, + profile: DProfile, + getGravatarUrl: GetGravatarUrl, + copyText: CopyText, +) { + val id = "email" + val email = profile.email + if (email.isNotBlank()) { + val gravatarUrl = getGravatarUrl(email) + .attempt() + .bind() + .getOrNull() + val emailItem = VaultViewItem.Value( + id = id, + elevation = 1.dp, + title = scope.translate(Res.strings.email), + value = email, + leading = { + EmailIcon( + modifier = Modifier + .size(24.dp) + .clip(CircleShape), + gravatarUrl = gravatarUrl, + ) + }, + dropdown = buildContextItems { + section { + this += copyText.FlatItemAction( + title = scope.translate(Res.strings.copy), + value = email, + ) + } + section { + this += LargeTypeRoute.showInLargeTypeActionOrNull( + translator = scope, + text = email, + navigate = scope::navigate, + ) + this += LargeTypeRoute.showInLargeTypeActionAndLockOrNull( + translator = scope, + text = email, + navigate = scope::navigate, + ) + } + if (!profile.emailVerified) { + section { + this += FlatItemAction( + leading = icon(Icons.Outlined.VerifiedUser), + title = scope.translate(Res.strings.account_action_email_verify_instructions_title), + onClick = null, + ) + } + } + section { + this += EmailLeakRoute.checkBreachesEmailActionOrNull( + translator = scope, + accountId = AccountId(profile.accountId), + email = profile.email, + navigate = scope::navigate, + ) + } + }, + badge = if (profile.emailVerified) { + VaultViewItem.Value.Badge( + text = scope.translate(Res.strings.email_verified), + score = 1f, + ) + } else { + VaultViewItem.Value.Badge( + text = scope.translate(Res.strings.email_not_verified), + score = 0.5f, + ) + }, + ) + emit(emailItem) + } +} + +private suspend fun FlowCollector.emitTwoFactorAuth( + scope: RememberStateFlowScope, + account: DAccount, + profile: DProfile, +) { + val id = "twofa" + val twoFactorEnabled = profile.twoFactorEnabled + val item = VaultViewItem.Action( + id = id, + title = scope.translate(Res.strings.account_action_tfa_title), + text = scope.translate(Res.strings.account_action_tfa_text), + leading = { + Icon(Icons.Outlined.KeyguardTwoFa, null) + }, + trailing = { + ChevronIcon() + }, + badge = if (twoFactorEnabled) { + VaultViewItem.Action.Badge( + text = scope.translate(Res.strings.account_action_tfa_active_status), + score = 1f, + ) + } else { + null + }, + onClick = { + val intent = NavigationIntent.NavigateToBrowser(account.url) + scope.navigate(intent) + }, + ) + emit(item) +} + +private suspend fun FlowCollector.emitPremium( + scope: RememberStateFlowScope, + account: DAccount, + profile: DProfile, +) { + val id = "premium" + val premiumItem = if (profile.premium) { + VaultViewItem.Action( + id = id, + title = scope.translate(Res.strings.bitwarden_premium), + leading = { + Icon(Icons.Outlined.KeyguardPremium, null) + }, + trailing = { + ChevronIcon() + }, + badge = VaultViewItem.Action.Badge( + text = scope.translate(Res.strings.pref_item_premium_status_active), + score = 1f, + ), + onClick = { + val intent = NavigationIntent.NavigateToBrowser(account.url) + scope.navigate(intent) + }, + ) + } else { + VaultViewItem.Action( + id = id, + title = scope.translate(Res.strings.bitwarden_premium), + text = scope.translate(Res.strings.account_action_premium_purchase_instructions_title), + leading = { + Icon(Icons.Outlined.KeyguardPremium, null) + }, + trailing = { + ChevronIcon() + }, + onClick = { + val intent = NavigationIntent.NavigateToBrowser(account.url) + scope.navigate(intent) + }, + ) + } + emit(premiumItem) +} + +private suspend fun FlowCollector.emitMasterPasswordHint( + scope: RememberStateFlowScope, + profile: DProfile, + copyText: CopyText, + putAccountMasterPasswordHintById: PutAccountMasterPasswordHintById, +) { + val hint = profile.masterPasswordHint + + fun onClick() { + val intent = scope.createConfirmationDialogIntent( + icon = icon(Icons.Outlined.Edit), + item = ConfirmationRoute.Args.Item.StringItem( + key = "name", + title = scope.translate(Res.strings.master_password_hint), + value = hint.orEmpty(), + // You can have an empty password hint. + canBeEmpty = true, + ), + title = scope.translate(Res.strings.account_action_change_master_password_hint_title), + ) { newHint -> + val profileIdsToNames = mapOf( + AccountId(profile.accountId) to newHint, + ) + putAccountMasterPasswordHintById(profileIdsToNames) + .launchIn(scope.appScope) + } + scope.navigate(intent) + } + + val id = "master_password_hint" + val hintEditActionItem = FlatItemAction( + icon = Icons.Outlined.Edit, + title = scope.translate(Res.strings.account_action_change_master_password_hint_title), + onClick = ::onClick, + ) + val hintItem = + VaultViewItem.Value( + id = id, + title = scope.translate(Res.strings.master_password_hint), + value = hint.orEmpty(), + private = true, + leading = { + Icon(Icons.Outlined.HelpOutline, null) + }, + dropdown = buildContextItems { + if (!hint.isNullOrBlank()) { + section { + this += copyText.FlatItemAction( + title = scope.translate(Res.strings.copy), + value = hint, + ) + } + } + section { + this += hintEditActionItem + } + }, + ) + emit(hintItem) +} + +private suspend fun FlowCollector.emitFingerprint( + scope: RememberStateFlowScope, + profile: DProfile, + copyText: CopyText, + getFingerprint: GetFingerprint, +) { + val fingerprintOrException = getFingerprint(AccountId(profile.accountId)) + .toIO() + .crashlyticsTap() + .attempt() + .bind() + val fingerprint = fingerprintOrException.getOrNull().orEmpty() + val id = "fingerprint" + if (fingerprint.isNotBlank()) { + val item = VaultViewItem.Value( + id = id, + title = scope.translate(Res.strings.fingerprint_phrase), + value = fingerprint, + monospace = true, + colorize = true, + leading = { + Icon(Icons.Outlined.Fingerprint, null) + }, + dropdown = buildContextItems { + section { + this += copyText.FlatItemAction( + title = scope.translate(Res.strings.copy), + value = fingerprint, + ) + } + section { + this += LargeTypeRoute.showInLargeTypeActionOrNull( + translator = scope, + text = fingerprint, + colorize = true, + navigate = scope::navigate, + ) + this += LargeTypeRoute.showInLargeTypeActionAndLockOrNull( + translator = scope, + text = fingerprint, + colorize = true, + navigate = scope::navigate, + ) + } + section { + this += FlatItemAction( + icon = Icons.Outlined.HelpOutline, + title = scope.translate(Res.strings.fingerprint_phrase_help_title), + trailing = { + ChevronIcon() + }, + onClick = { + val url = "https://bitwarden.com/help/fingerprint-phrase/" + val intent = NavigationIntent.NavigateToBrowser(url) + scope.navigate(intent) + }, + ) + } + }, + ) + emit(item) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/common/Autofill.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/common/Autofill.kt new file mode 100644 index 00000000..ed6ccd0e --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/common/Autofill.kt @@ -0,0 +1,71 @@ +package com.artemchep.keyguard.feature.auth.common + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.ExperimentalComposeUiApi +import androidx.compose.ui.Modifier +import androidx.compose.ui.autofill.AutofillNode +import androidx.compose.ui.autofill.AutofillType +import androidx.compose.ui.composed +import androidx.compose.ui.focus.onFocusChanged +import androidx.compose.ui.layout.boundsInWindow +import androidx.compose.ui.layout.onGloballyPositioned +import androidx.compose.ui.platform.LocalAutofill +import androidx.compose.ui.platform.LocalAutofillTree + +@OptIn(ExperimentalComposeUiApi::class) +fun Modifier.autofill( + value: String, + autofillTypes: List, + onFill: ((String) -> Unit)?, +) = composed { + val autofillNode = remember(autofillTypes, onFill) { + AutofillNode( + onFill = onFill, + autofillTypes = autofillTypes, + ) + } + val updatedAutofill by rememberUpdatedState(newValue = LocalAutofill.current) + val updatedAutofillNode by rememberUpdatedState(newValue = autofillNode) + + // TODO: Do we need to remove the node at some point? Do + // we need to add it every recomposition? + val autofillTree = LocalAutofillTree.current + autofillTree += autofillNode + + AutofillSideEffect( + value = value, + node = autofillNode, + ) + + this + .onGloballyPositioned { + autofillNode.boundingBox = it.boundsInWindow() + } + .onFocusChanged { focusState -> + val autofill = updatedAutofill + ?: return@onFocusChanged + if (focusState.isFocused) { + // To avoid exception: + // requestAutofill called before onChildPositioned() + // + // we first check if the element has been positioned already. + // Note that a few lines of code we update the position. + if (autofillNode.boundingBox != null) { + autofill.requestAutofillForNode(updatedAutofillNode) + } + } else { + autofill.cancelAutofillForNode(updatedAutofillNode) + } + } +} + +@OptIn(ExperimentalComposeUiApi::class) +@Composable +expect fun AutofillSideEffect( + value: String, + node: AutofillNode, +) + diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/common/IntFieldModel.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/common/IntFieldModel.kt new file mode 100644 index 00000000..701ce126 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/common/IntFieldModel.kt @@ -0,0 +1,15 @@ +package com.artemchep.keyguard.feature.auth.common + +import androidx.compose.runtime.Immutable +import arrow.optics.optics + +@Immutable +@optics +data class IntFieldModel( + val number: Long, + val min: Long, + val max: Long, + val onChange: ((Long) -> Unit)? = null, +) { + companion object +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/common/SwitchFieldModel.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/common/SwitchFieldModel.kt new file mode 100644 index 00000000..da76c13d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/common/SwitchFieldModel.kt @@ -0,0 +1,13 @@ +package com.artemchep.keyguard.feature.auth.common + +import androidx.compose.runtime.Immutable +import arrow.optics.optics + +@Immutable +@optics +data class SwitchFieldModel( + val checked: Boolean = false, + val onChange: ((Boolean) -> Unit)? = null, +) { + companion object +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/common/TextFieldModel.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/common/TextFieldModel.kt new file mode 100644 index 00000000..1beb02e4 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/common/TextFieldModel.kt @@ -0,0 +1,52 @@ +package com.artemchep.keyguard.feature.auth.common + +import androidx.compose.runtime.Immutable +import androidx.compose.runtime.MutableState +import androidx.compose.runtime.mutableStateOf +import arrow.optics.optics +import kotlinx.collections.immutable.ImmutableList +import kotlinx.collections.immutable.persistentListOf + +@Immutable +@optics +data class TextFieldModel2( + val state: MutableState, + val text: String = state.value, + val hint: String? = null, + val error: String? = null, + val vl: Vl? = null, + val autocompleteOptions: ImmutableList = persistentListOf(), + val onChange: ((String) -> Unit)? = null, +) { + companion object { + val empty = TextFieldModel2( + state = mutableStateOf(""), + ) + + fun of( + state: MutableState, + validated: Validated, + hint: String? = null, + onChange: ((String) -> Unit)? = state::value::set, + ) = TextFieldModel2( + state = state, + text = validated.model, + hint = hint, + error = (validated as? Validated.Failure)?.error + ?.takeUnless { validated.model.isEmpty() }, + onChange = onChange, + ) + } + + data class Vl( + val type: Type, + val text: String, + ) { + enum class Type { + SUCCESS, + INFO, + WARNING, + ERROR, + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/common/Validated.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/common/Validated.kt new file mode 100644 index 00000000..87f9f580 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/common/Validated.kt @@ -0,0 +1,20 @@ +package com.artemchep.keyguard.feature.auth.common + +sealed interface Validated { + val model: T + + data class Success( + override val model: T, + ) : Validated + + data class Failure( + override val model: T, + val error: String = "", + ) : Validated +} + +inline fun T.anyFlatMap(block: (Success) -> T) = + when (this) { + is Success -> block(this) + else -> this + } diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/common/Visibility.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/common/Visibility.kt new file mode 100644 index 00000000..c319cc07 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/common/Visibility.kt @@ -0,0 +1,50 @@ +package com.artemchep.keyguard.feature.auth.common + +import androidx.compose.material3.IconButton +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.setValue +import arrow.core.partially1 +import com.artemchep.keyguard.ui.icons.VisibilityIcon + +@Composable +fun VisibilityToggle( + visibilityState: VisibilityState, +) { + VisibilityToggle( + visible = visibilityState.isVisible, + enabled = visibilityState.isEnabled, + onVisibleChange = { shouldBeVisible -> + // Apply the visibility state only if the + // button is enabled. + if (visibilityState.isEnabled) { + visibilityState.isVisible = shouldBeVisible + } + }, + ) +} + +@Composable +fun VisibilityToggle( + visible: Boolean, + enabled: Boolean = true, + onVisibleChange: (Boolean) -> Unit, +) { + IconButton( + enabled = enabled, + onClick = onVisibleChange.partially1(!visible), + ) { + VisibilityIcon( + visible = visible, + ) + } +} + +class VisibilityState( + isVisible: Boolean = false, + isEnabled: Boolean = true, +) { + var isVisible by mutableStateOf(isVisible) + var isEnabled by mutableStateOf(isEnabled) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/common/util/ValidatorDomain.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/common/util/ValidatorDomain.kt new file mode 100644 index 00000000..b126a8d2 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/common/util/ValidatorDomain.kt @@ -0,0 +1,81 @@ +package com.artemchep.keyguard.feature.auth.common.util + +import arrow.core.Either +import io.ktor.http.Url + +val REGEX_DOMAIN = + "^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]\$".toRegex() + +val REGEX_IPV4 = "^((25[0-5]|(2[0-4]|1\\d|[1-9]|)\\d)\\.?\\b){4}\$".toRegex() + +private val privateIpAddressList = listOf( + IpRange( + from = intArrayOf(10, 0, 0, 0), + to = intArrayOf(10, 255, 255, 255), + ), + IpRange( + from = intArrayOf(172, 16, 0, 0), + to = intArrayOf(172, 31, 255, 255), + ), + IpRange( + from = intArrayOf(192, 168, 0, 0), + to = intArrayOf(192, 168, 255, 255), + ), +) + +private data class IpRange( + val from: IntArray, + val to: IntArray, +) { + init { + require(from.size == 4) + require(to.size == 4) + } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + + other as IpRange + + if (!from.contentEquals(other.from)) return false + if (!to.contentEquals(other.to)) return false + + return true + } + + override fun hashCode(): Int { + var result = from.contentHashCode() + result = 31 * result + to.contentHashCode() + return result + } + + fun matches(ip: IntArray): Boolean { + if (ip.size != 4) return false + ip.forEachIndexed { index, block -> + val a = from[index] + val b = to[index] + if (block < a || block > b) return false + } + return true + } +} + +fun verifyIsLocalUrl(url: String) = Either.catch { + verifyIsLocalUrl(Url(url)) +} + +fun verifyIsLocalUrl(url: Url) = run { + val host = url.host + when { + host == "localhost" -> true + REGEX_IPV4.matches(host) -> { + val ip = host.split(".") + .map { it.toInt() } + .toIntArray() + privateIpAddressList.any { it.matches(ip) } + } + + else -> false + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/common/util/ValidatorEmail.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/common/util/ValidatorEmail.kt new file mode 100644 index 00000000..6c572481 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/common/util/ValidatorEmail.kt @@ -0,0 +1,62 @@ +package com.artemchep.keyguard.feature.auth.common.util + +import com.artemchep.keyguard.feature.auth.common.Validated +import com.artemchep.keyguard.feature.navigation.state.TranslatorScope +import com.artemchep.keyguard.res.Res +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.map + +enum class ValidationEmail { + OK, + ERROR_EMPTY, + ERROR_INVALID, +} + +val REGEX_EMAIL = ( + "[a-zA-Z0-9\\+\\.\\_\\%\\-\\+]{1,256}" + + "\\@" + + "[a-zA-Z0-9][a-zA-Z0-9\\-]{0,64}" + + "(" + + "\\." + + "[a-zA-Z0-9][a-zA-Z0-9\\-]{0,25}" + + ")+" + ).toRegex() + +fun validateEmail(email: String?): ValidationEmail { + return if (email.isNullOrBlank()) { + ValidationEmail.ERROR_EMPTY + } else if (!REGEX_EMAIL.matches(email)) { + ValidationEmail.ERROR_INVALID + } else { + ValidationEmail.OK + } +} + +/** + * @return human-readable variant of [validateEmail] result, or `null` if + * there's no validation error. + */ +fun ValidationEmail.format(scope: TranslatorScope): String? = + when (this) { + ValidationEmail.ERROR_EMPTY -> scope.translate(Res.strings.error_must_not_be_blank) + ValidationEmail.ERROR_INVALID -> scope.translate(Res.strings.error_invalid_email) + else -> null + } + +fun Flow.validatedEmail(scope: TranslatorScope) = this + .map { rawEmail -> + val email = rawEmail + .trim() + val emailError = validateEmail(email) + .format(scope) + if (emailError != null) { + Validated.Failure( + model = email, + error = emailError, + ) + } else { + Validated.Success( + model = email, + ) + } + } diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/common/util/ValidatorFeedback.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/common/util/ValidatorFeedback.kt new file mode 100644 index 00000000..592db4ce --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/common/util/ValidatorFeedback.kt @@ -0,0 +1,48 @@ +package com.artemchep.keyguard.feature.auth.common.util + +import com.artemchep.keyguard.feature.auth.common.Validated +import com.artemchep.keyguard.feature.navigation.state.TranslatorScope +import com.artemchep.keyguard.res.Res +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.map + +enum class ValidationFeedback { + OK, + ERROR_EMPTY, +} + +fun validateFeedback(feedback: String?): ValidationFeedback { + return if (feedback.isNullOrBlank()) { + ValidationFeedback.ERROR_EMPTY + } else { + ValidationFeedback.OK + } +} + +/** + * @return human-readable variant of [validateFeedback] result, or `null` if + * there's no validation error. + */ +fun ValidationFeedback.format(scope: TranslatorScope): String? = + when (this) { + ValidationFeedback.ERROR_EMPTY -> scope.translate(Res.strings.error_must_not_be_blank) + else -> null + } + +fun Flow.validatedFeedback(scope: TranslatorScope) = this + .map { rawFeedback -> + val feedback = rawFeedback + .trim(' ') + val feedbackError = validateFeedback(feedback) + .format(scope) + if (feedbackError != null) { + Validated.Failure( + model = feedback, + error = feedbackError, + ) + } else { + Validated.Success( + model = feedback, + ) + } + } diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/common/util/ValidatorHeader.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/common/util/ValidatorHeader.kt new file mode 100644 index 00000000..59f92d2a --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/common/util/ValidatorHeader.kt @@ -0,0 +1,3 @@ +package com.artemchep.keyguard.feature.auth.common.util + +val REGEX_US_ASCII = "^[\\x00-\\x7F]*\$".toRegex() diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/common/util/ValidatorPassword.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/common/util/ValidatorPassword.kt new file mode 100644 index 00000000..12470ac5 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/common/util/ValidatorPassword.kt @@ -0,0 +1,53 @@ +package com.artemchep.keyguard.feature.auth.common.util + +import com.artemchep.keyguard.feature.auth.common.Validated +import com.artemchep.keyguard.feature.navigation.state.TranslatorScope +import com.artemchep.keyguard.res.Res +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.map + +enum class ValidationPassword { + OK, + ERROR_MIN_LENGTH, + ; + + object Const { + /** The minimum length of the password */ + const val MIN_LENGTH = 6 + } +} + +fun validatePassword(password: String?): ValidationPassword { + val passwordLength = password?.trim()?.length ?: 0 + return if (passwordLength < ValidationPassword.Const.MIN_LENGTH) { + ValidationPassword.ERROR_MIN_LENGTH + } else { + ValidationPassword.OK + } +} + +fun ValidationPassword.format(scope: TranslatorScope): String? = + when (this) { + ValidationPassword.ERROR_MIN_LENGTH -> scope.translate( + res = Res.strings.error_must_have_at_least_n_symbols, + ValidationPassword.Const.MIN_LENGTH, + ) + + else -> null + } + +fun Flow.validatedPassword(scope: TranslatorScope) = this + .map { password -> + val passwordError = validatePassword(password) + .format(scope) + if (passwordError != null) { + Validated.Failure( + model = password, + error = passwordError, + ) + } else { + Validated.Success( + model = password, + ) + } + } diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/common/util/ValidatorPhoneNumber.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/common/util/ValidatorPhoneNumber.kt new file mode 100644 index 00000000..5b2f282b --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/common/util/ValidatorPhoneNumber.kt @@ -0,0 +1,4 @@ +package com.artemchep.keyguard.feature.auth.common.util + +val REGEX_PHONE_NUMBER = + "^(\\+\\d{1,2}\\s?)?1?\\-?\\.?\\s?\\(?\\d{3}\\)?[\\s.-]?\\d{3}[\\s.-]?\\d{4}\$".toRegex() diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/common/util/ValidatorTitle.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/common/util/ValidatorTitle.kt new file mode 100644 index 00000000..7b361359 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/common/util/ValidatorTitle.kt @@ -0,0 +1,44 @@ +package com.artemchep.keyguard.feature.auth.common.util + +import com.artemchep.keyguard.feature.auth.common.Validated +import com.artemchep.keyguard.feature.navigation.state.TranslatorScope +import com.artemchep.keyguard.res.Res +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.map + +enum class ValidationTitle { + OK, + ERROR_EMPTY, +} + +fun validateTitle(title: String?): ValidationTitle { + return if (title.isNullOrBlank()) { + ValidationTitle.ERROR_EMPTY + } else { + ValidationTitle.OK + } +} + +fun ValidationTitle.format(scope: TranslatorScope): String? = + when (this) { + ValidationTitle.ERROR_EMPTY -> scope.translate(Res.strings.error_must_not_be_blank) + else -> null + } + +fun Flow.validatedTitle(scope: TranslatorScope) = this + .map { rawTitle -> + val title = rawTitle + .trim() + val titleError = validateTitle(title) + .format(scope) + if (titleError != null) { + Validated.Failure( + model = title, + error = titleError, + ) + } else { + Validated.Success( + model = title, + ) + } + } diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/common/util/ValidatorUri.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/common/util/ValidatorUri.kt new file mode 100644 index 00000000..49845ad0 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/common/util/ValidatorUri.kt @@ -0,0 +1,70 @@ +package com.artemchep.keyguard.feature.auth.common.util + +import com.artemchep.keyguard.feature.navigation.state.TranslatorScope +import com.artemchep.keyguard.res.Res + +enum class ValidationUri { + OK, + ERROR_EMPTY, + ERROR_INVALID, +} + +/** + * Example: "http". Also called 'protocol'. + * Scheme component is optional, even though the RFC doesn't make it optional. Since this regex is validating a + * submitted callback url, which determines where the browser will navigate to after a successful authentication, + * the browser will use http or https for the scheme by default. + * Not borrowed from dperini in order to allow any scheme type. + */ +private const val REGEX_SCHEME = "[A-Za-z][+-.\\w^_]*:" + +// Example: "//". +private const val REGEX_AUTHORITATIVE_DECLARATION = "/{2}" + +// Optional component. Example: "suzie:abc123@". The use of the format "user:password" is deprecated. +private const val REGEX_USERINFO = "(?:\\S+(?::\\S*)?@)?" + +// Examples: "google.com", "22.231.113.64". +private const val REGEX_HOST = + "(?:" + // @Author = http://www.regular-expressions.info/examples.html + // IP address + "(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)" + + "|" + // host name + "(?:(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)" + // domain name + "(?:\\.(?:[a-z\\u00a1-\\uffff0-9]-*)*[a-z\\u00a1-\\uffff0-9]+)*" + // TLD identifier must have >= 2 characters + "(?:\\.(?:[a-z\\u00a1-\\uffff]{2,})))" + +// Example: ":8042". +private const val REGEX_PORT = "(?::\\d{2,5})?" + +// Example: "/search?foo=bar#element1". +private const val REGEX_RESOURCE_PATH = "(?:/\\S*)?" + +val REGEX_WEB_URI = ( + "^(?:(?:" + REGEX_SCHEME + REGEX_AUTHORITATIVE_DECLARATION + ")?" + + REGEX_USERINFO + REGEX_HOST + REGEX_PORT + REGEX_RESOURCE_PATH + ")$" + ).toRegex() + +fun validateUri( + uri: String?, + allowBlank: Boolean = false, +): ValidationUri { + return if (uri == null || uri.isBlank()) { + if (allowBlank) { + ValidationUri.OK + } else { + ValidationUri.ERROR_EMPTY + } + } else if (!REGEX_WEB_URI.matches(uri)) { + ValidationUri.ERROR_INVALID + } else { + ValidationUri.OK + } +} + +fun ValidationUri.format(scope: TranslatorScope): String? = + when (this) { + ValidationUri.ERROR_EMPTY -> scope.translate(Res.strings.error_must_not_be_blank) + ValidationUri.ERROR_INVALID -> scope.translate(Res.strings.error_invalid_uri) + else -> null + } diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/common/util/ValidatorUrl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/common/util/ValidatorUrl.kt new file mode 100644 index 00000000..18ea24ee --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/common/util/ValidatorUrl.kt @@ -0,0 +1,106 @@ +package com.artemchep.keyguard.feature.auth.common.util + +import com.artemchep.keyguard.feature.auth.common.Validated +import com.artemchep.keyguard.feature.navigation.state.TranslatorScope +import com.artemchep.keyguard.res.Res +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.map + +enum class ValidationUrl { + OK, + ERROR_EMPTY, + ERROR_INVALID, +} + +/** + * Good characters for Internationalized Resource Identifiers (IRI). + * This comprises most common used Unicode characters allowed in IRI + * as detailed in RFC 3987. + * Specifically, those two byte Unicode characters are not included. + */ +private const val GOOD_IRI_CHAR = "a-zA-Z0-9\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF" + +/** + * RFC 1035 Section 2.3.4 limits the labels to a maximum 63 octets. + */ +private const val IRI = "[$GOOD_IRI_CHAR]([$GOOD_IRI_CHAR\\-]{0,61}[$GOOD_IRI_CHAR]){0,1}" + +private const val GOOD_GTLD_CHAR = "a-zA-Z\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF" + +private const val GTLD = "[$GOOD_GTLD_CHAR]{2,63}" + +private const val HOST_NAME = "($IRI\\.)+$GTLD" + +private const val IP_ADDRESS = + "((25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}|[1-9][0-9]|[1-9])\\.(25[0-5]|2[0-4]" + + "[0-9]|[0-1][0-9]{2}|[1-9][0-9]|[1-9]|0)\\.(25[0-5]|2[0-4][0-9]|[0-1]" + + "[0-9]{2}|[1-9][0-9]|[1-9]|0)\\.(25[0-5]|2[0-4][0-9]|[0-1][0-9]{2}" + + "|[1-9][0-9]|[0-9]))" + +private const val DOMAIN_NAME = "($HOST_NAME|$IP_ADDRESS)" + +/** + * Regular expression pattern to match most part of RFC 3987 + * Internationalized URLs, aka IRIs. Commonly used Unicode characters are + * added. + */ +val REGEX_WEB_URL = + ( + "((?:(http|https|Http|Https|rtsp|Rtsp):\\/\\/(?:(?:[a-zA-Z0-9\\$\\-\\_\\.\\+\\!\\*\\'\\(\\)" + + "\\,\\;\\?\\&\\=]|(?:\\%[a-fA-F0-9]{2})){1,64}(?:\\:(?:[a-zA-Z0-9\\$\\-\\_" + + "\\.\\+\\!\\*\\'\\(\\)\\,\\;\\?\\&\\=]|(?:\\%[a-fA-F0-9]{2})){1,25})?\\@)?)?" + + "(?:" + DOMAIN_NAME + ")" + + "(?:\\:\\d{1,5})?)" + // plus option port number + "(\\/(?:(?:[" + GOOD_IRI_CHAR + "\\;\\/\\?\\:\\@\\&\\=\\#\\~" + // plus option query params + "\\-\\.\\+\\!\\*\\'\\(\\)\\,\\_])|(?:\\%[a-fA-F0-9]{2}))*)?" + + "(?:\\b|$)" + ).toRegex() + +fun validateUrl( + url: String?, + allowBlank: Boolean = false, +): ValidationUrl { + return if (url == null || url.isBlank()) { + if (allowBlank) { + ValidationUrl.OK + } else { + ValidationUrl.ERROR_EMPTY + } + } else if (!REGEX_WEB_URL.matches(url)) { + ValidationUrl.ERROR_INVALID + } else { + ValidationUrl.OK + } +} + +/** + * @return human-readable variant of [validateEmail] result, or `null` if + * there's no validation error. + */ +fun ValidationUrl.format(scope: TranslatorScope): String? = + when (this) { + ValidationUrl.ERROR_EMPTY -> scope.translate(Res.strings.error_must_not_be_blank) + ValidationUrl.ERROR_INVALID -> scope.translate(Res.strings.error_invalid_url) + else -> null + } + +fun Flow.validatedUrl( + scope: TranslatorScope, + allowBlank: Boolean = false, +) = this + .map { rawUrl -> + val url = rawUrl + .trim() + val urlError = validateUrl(url, allowBlank = allowBlank) + .format(scope) + if (urlError != null) { + Validated.Failure( + model = url, + error = urlError, + ) + } else { + Validated.Success( + model = url, + ) + } + } diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/login/LoginEvent.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/login/LoginEvent.kt new file mode 100644 index 00000000..83e81b99 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/login/LoginEvent.kt @@ -0,0 +1,14 @@ +package com.artemchep.keyguard.feature.auth.login + +import com.artemchep.keyguard.feature.auth.login.otp.LoginTwofaRoute + +/** + * @author Artem Chepurnyi + */ +sealed interface LoginEvent { + sealed interface Error : LoginEvent { + data class OtpRequired( + val args: LoginTwofaRoute.Args, + ) : Error + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/login/LoginRegion.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/login/LoginRegion.kt new file mode 100644 index 00000000..e1ba3549 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/login/LoginRegion.kt @@ -0,0 +1,64 @@ +package com.artemchep.keyguard.feature.auth.login + +import com.artemchep.keyguard.provider.bitwarden.ServerEnv +import com.artemchep.keyguard.res.Res +import dev.icerock.moko.resources.StringResource +import kotlinx.collections.immutable.PersistentList +import kotlinx.collections.immutable.toPersistentList + +sealed interface LoginRegion { + companion object { + val default get() = Predefined(ServerEnv.Region.default) + + val values: PersistentList + get() = kotlin.run { + val list = ServerEnv.Region.entries + .asSequence() + .map { region -> + val value: LoginRegion = Predefined(region) + value + } + .toPersistentList() + list.add(Custom) + } + + fun ofOrNull(key: String): LoginRegion? { + val region = ServerEnv.Region.entries + .firstOrNull { it.name == key } + if (region != null) { + return Predefined(region) + } + + return when (key) { + Custom.key -> Custom + else -> null + } + } + } + + val key: String + val title: StringResource + val text: String? get() = null + + @JvmInline + value class Predefined( + val region: ServerEnv.Region, + ) : LoginRegion { + override val key: String + get() = region.name + + override val title: StringResource + get() = region.title + + override val text: String + get() = region.text + } + + data object Custom : LoginRegion { + override val key: String + get() = ServerEnv.Region.selfhosted + + override val title: StringResource + get() = Res.strings.addaccount_region_custom_type + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/login/LoginRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/login/LoginRoute.kt new file mode 100644 index 00000000..cd6b64a1 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/login/LoginRoute.kt @@ -0,0 +1,34 @@ +package com.artemchep.keyguard.feature.auth.login + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.navigation.RouteForResult +import com.artemchep.keyguard.feature.navigation.RouteResultTransmitter +import com.artemchep.keyguard.provider.bitwarden.ServerEnv + +data class LoginRoute( + val args: Args = Args(), +) : RouteForResult { + data class Args( + val accountId: String? = null, + // common + val clientSecret: String? = null, + val clientSecretEditable: Boolean = true, + val email: String? = null, + val emailEditable: Boolean = true, + val password: String? = null, + val passwordEditable: Boolean = true, + // server + val env: ServerEnv = ServerEnv(), + val envEditable: Boolean = true, + ) + + @Composable + override fun Content( + transmitter: RouteResultTransmitter, + ) { + LoginScreen( + transmitter = transmitter, + args = args, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/login/LoginScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/login/LoginScreen.kt new file mode 100644 index 00000000..56189b11 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/login/LoginScreen.kt @@ -0,0 +1,605 @@ +package com.artemchep.keyguard.feature.auth.login + +import androidx.compose.animation.Crossfade +import androidx.compose.animation.animateContentSize +import androidx.compose.foundation.ExperimentalFoundationApi +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.layout.widthIn +import androidx.compose.foundation.text.KeyboardActionScope +import androidx.compose.foundation.text.KeyboardActions +import androidx.compose.foundation.text.KeyboardOptions +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Add +import androidx.compose.material.icons.outlined.Login +import androidx.compose.material.icons.outlined.Security +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.DropdownMenu +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.key +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.ExperimentalComposeUiApi +import androidx.compose.ui.Modifier +import androidx.compose.ui.autofill.AutofillType +import androidx.compose.ui.focus.FocusDirection +import androidx.compose.ui.focus.FocusRequester +import androidx.compose.ui.focus.focusRequester +import androidx.compose.ui.input.nestedscroll.nestedScroll +import androidx.compose.ui.platform.LocalFocusManager +import androidx.compose.ui.text.input.ImeAction +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.common.model.fold +import com.artemchep.keyguard.feature.auth.common.autofill +import com.artemchep.keyguard.feature.auth.login.otp.LoginTwofaRoute +import com.artemchep.keyguard.feature.home.vault.component.Section +import com.artemchep.keyguard.feature.navigation.LocalNavigationController +import com.artemchep.keyguard.feature.navigation.NavigationIcon +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.feature.navigation.RouteResultTransmitter +import com.artemchep.keyguard.feature.navigation.registerRouteResultReceiver +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.BiFlatTextField +import com.artemchep.keyguard.ui.CollectedEffect +import com.artemchep.keyguard.ui.ConcealedFlatTextField +import com.artemchep.keyguard.ui.DefaultFab +import com.artemchep.keyguard.ui.DropdownMenuItemFlat +import com.artemchep.keyguard.ui.DropdownMinWidth +import com.artemchep.keyguard.ui.DropdownScopeImpl +import com.artemchep.keyguard.ui.EmailFlatTextField +import com.artemchep.keyguard.ui.ExpandedIfNotEmpty +import com.artemchep.keyguard.ui.FabState +import com.artemchep.keyguard.ui.FlatDropdown +import com.artemchep.keyguard.ui.FlatItem +import com.artemchep.keyguard.ui.FlatItemTextContent +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.OptionsButton +import com.artemchep.keyguard.ui.PasswordFlatTextField +import com.artemchep.keyguard.ui.ScaffoldColumn +import com.artemchep.keyguard.ui.UrlFlatTextField +import com.artemchep.keyguard.ui.icons.DropdownIcon +import com.artemchep.keyguard.ui.icons.IconBox +import com.artemchep.keyguard.ui.skeleton.SkeletonText +import com.artemchep.keyguard.ui.skeleton.SkeletonTextField +import com.artemchep.keyguard.ui.theme.Dimens +import com.artemchep.keyguard.ui.theme.combineAlpha +import com.artemchep.keyguard.ui.toolbar.LargeToolbar +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.flow.map + +@Composable +fun LoginScreen( + transmitter: RouteResultTransmitter, + args: LoginRoute.Args, +) { + val state = produceLoginScreenState( + args = args, + ) + state.fold( + ifLoading = { + LoginContentSkeleton() + }, + ifOk = { okState -> + LoginScreen( + transmitter = transmitter, + state = okState, + ) + }, + ) +} + +@Composable +fun LoginScreen( + transmitter: RouteResultTransmitter, + state: LoginState, +) { + val controller by rememberUpdatedState(LocalNavigationController.current) + CollectedEffect(state.effects.onSuccessFlow) { + // Notify that we have successfully logged in, and that + // the caller can now decide what to do. + transmitter.invoke(Unit) + } + CollectedEffect(state.effects.onErrorFlow) { error -> + when (error) { + // Navigate to the OTP screen with current + // credentials and environment. + is LoginEvent.Error.OtpRequired -> { + val route = registerRouteResultReceiver( + route = LoginTwofaRoute(error.args), + ) { + controller.queue(NavigationIntent.Pop) + transmitter.invoke(Unit) + } + val intent = NavigationIntent.NavigateToRoute(route) + controller.queue(intent) + } + } + } + + LoginContent( + loginState = state, + ) +} + +@OptIn( + ExperimentalMaterial3Api::class, +) +@Composable +fun LoginContentSkeleton() { + val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior() + ScaffoldColumn( + modifier = Modifier + .nestedScroll(scrollBehavior.nestedScrollConnection), + topAppBarScrollBehavior = scrollBehavior, + topBar = { + LargeToolbar( + title = { + Text( + text = stringResource(Res.strings.addaccount_header_title), + ) + }, + navigationIcon = { + NavigationIcon() + }, + scrollBehavior = scrollBehavior, + ) + }, + ) { + SkeletonText( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding) + .fillMaxWidth(0.8f), + style = MaterialTheme.typography.bodyMedium, + ) + SkeletonText( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding) + .fillMaxWidth(0.88f), + style = MaterialTheme.typography.bodyMedium, + ) + SkeletonText( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding) + .fillMaxWidth(0.3f), + style = MaterialTheme.typography.bodyMedium, + ) + Spacer(Modifier.height(16.dp)) + SkeletonTextField( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = Dimens.horizontalPadding), + ) + Spacer(Modifier.height(8.dp)) + SkeletonTextField( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = Dimens.horizontalPadding), + ) + } +} + +@OptIn( + ExperimentalMaterial3Api::class, + ExperimentalFoundationApi::class, ExperimentalComposeUiApi::class, +) +@Composable +fun LoginContent( + loginState: LoginState, +) { + var isEnvironmentVisible by rememberSaveable { + mutableStateOf(false) + } + + val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior() + ScaffoldColumn( + modifier = Modifier + .nestedScroll(scrollBehavior.nestedScrollConnection), + topAppBarScrollBehavior = scrollBehavior, + topBar = { + LargeToolbar( + title = { + Text( + text = stringResource(Res.strings.addaccount_header_title), + ) + }, + navigationIcon = { + NavigationIcon() + }, + scrollBehavior = scrollBehavior, + ) + }, + floatingActionState = run { + val fabOnClick = loginState.onLoginClick + val fabState = FabState( + onClick = fabOnClick, + model = null, + ) + rememberUpdatedState(newValue = fabState) + }, + floatingActionButton = { + DefaultFab( + icon = { + Crossfade( + modifier = Modifier + .size(24.dp), + targetState = loginState.isLoading, + ) { isLoading -> + if (isLoading) { + CircularProgressIndicator( + color = LocalContentColor.current, + ) + } else { + Icon( + imageVector = Icons.Outlined.Login, + contentDescription = null, + ) + } + } + }, + text = { + Text( + text = stringResource(Res.strings.addaccount_sign_in_button), + ) + }, + ) + }, + ) { + val focusManager = LocalFocusManager.current + val focusRequester = remember { FocusRequester() } + // Auto focus the text field + // on launch. + LaunchedEffect(focusRequester) { + focusRequester.requestFocus() + } + + val keyboardOnGo: (KeyboardActionScope.() -> Unit)? = + if (loginState.onLoginClick != null) { + // lambda + { + loginState.onLoginClick.invoke() + } + } else { + null + } + val keyboardOnNext: KeyboardActionScope.() -> Unit = { + focusManager.moveFocus(FocusDirection.Down) + } + + Text( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding), + text = stringResource(Res.strings.addaccount_disclaimer_bitwarden_label), + style = MaterialTheme.typography.bodyMedium, + ) + Spacer(Modifier.height(16.dp)) + EmailFlatTextField( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding) + .focusRequester(focusRequester), + fieldModifier = Modifier + .autofill( + value = loginState.email.state.value, + autofillTypes = listOf( + AutofillType.EmailAddress, + ), + onFill = loginState.email.onChange, + ), + value = loginState.email, + keyboardOptions = KeyboardOptions( + imeAction = ImeAction.Next, + ), + keyboardActions = KeyboardActions( + onNext = keyboardOnNext, + ), + ) + Spacer(Modifier.height(8.dp)) + val passwordIsLastField = loginState.clientSecret == null && !isEnvironmentVisible + PasswordFlatTextField( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding), + fieldModifier = Modifier + .autofill( + value = loginState.password.state.value, + autofillTypes = listOf( + AutofillType.Password, + ), + onFill = loginState.password.onChange, + ), + value = loginState.password, + keyboardOptions = KeyboardOptions( + imeAction = when { + !passwordIsLastField -> ImeAction.Next + keyboardOnGo != null -> ImeAction.Go + else -> ImeAction.Default + }, + ), + keyboardActions = KeyboardActions( + onGo = keyboardOnGo, + onNext = keyboardOnNext.takeUnless { passwordIsLastField }, + ), + ) + val clientSecretOrNull = loginState.clientSecret + ExpandedIfNotEmpty( + valueOrNull = clientSecretOrNull, + ) { clientSecret -> + Column { + Box(Modifier.height(32.dp)) + Text( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding), + text = stringResource(Res.strings.addaccount_captcha_need_client_secret_note), + style = MaterialTheme.typography.bodyMedium, + ) + Box(Modifier.height(16.dp)) + val clientSecretIsLastField = !isEnvironmentVisible + ConcealedFlatTextField( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding), + label = stringResource(Res.strings.addaccount_captcha_need_client_secret_label), + value = clientSecret, + keyboardOptions = KeyboardOptions( + imeAction = when { + !clientSecretIsLastField -> ImeAction.Next + keyboardOnGo != null -> ImeAction.Go + else -> ImeAction.Default + }, + ), + keyboardActions = KeyboardActions( + onGo = keyboardOnGo, + onNext = keyboardOnNext.takeUnless { clientSecretIsLastField }, + ), + singleLine = true, + maxLines = 1, + leading = { + IconBox( + main = Icons.Outlined.Security, + ) + }, + ) + } + } + Spacer(Modifier.height(8.dp)) + LoginItems( + items = loginState.regionItems, + ) + Spacer(Modifier.height(8.dp)) + ExpandedIfNotEmpty( + valueOrNull = Unit.takeIf { loginState.showCustomEnv }, + ) { + LoginItems( + items = loginState.items, + ) + } + } +} + +@Composable +private fun LoginItems( + modifier: Modifier = Modifier, + items: List, +) { + Column( + modifier = modifier + .fillMaxWidth(), + verticalArrangement = Arrangement.spacedBy(8.dp), + ) { + items.forEach { item -> + key(item.id) { + LoginItem( + modifier = Modifier, + item = item, + ) + } + } + } +} + +@Composable +private fun LoginItem( + modifier: Modifier = Modifier, + item: LoginStateItem, +) = when (item) { + is LoginStateItem.Dropdown -> LoginItemDropdown(modifier = modifier, item = item) + is LoginStateItem.Url -> LoginItemUrl(modifier = modifier, item = item) + is LoginStateItem.HttpHeader -> LoginItemField(modifier = modifier, item = item) + is LoginStateItem.Section -> LoginItemSection(modifier = modifier, item = item) + is LoginStateItem.Label -> LoginItemLabel(modifier = modifier, item = item) + is LoginStateItem.Add -> LoginItemAdd(modifier = modifier, item = item) +} + +@Composable +private fun LoginItemDropdown( + modifier: Modifier = Modifier, + item: LoginStateItem.Dropdown, +) { + val field by item.state.flow.collectAsState() + FlatDropdown( + modifier = modifier, + content = { + FlatItemTextContent( + title = { + Row( + verticalAlignment = Alignment.CenterVertically, + ) { + Column( + modifier = Modifier + .weight(1f, fill = false), + ) { + Text( + modifier = Modifier + .animateContentSize(), + text = field.title, + style = MaterialTheme.typography.titleMedium, + ) + ExpandedIfNotEmpty(field.text) { text -> + Text( + text = text, + style = MaterialTheme.typography.bodySmall, + color = MaterialTheme.colorScheme.primary, + ) + } + } + Spacer( + modifier = Modifier + .width(8.dp), + ) + DropdownIcon() + } + }, + ) + }, + dropdown = field.options, + ) +} + +@Composable +private fun LoginItemUrl( + modifier: Modifier = Modifier, + item: LoginStateItem.Url, +) { + val field by item.state.flow.collectAsState() + UrlFlatTextField( + modifier = modifier + .padding(horizontal = Dimens.horizontalPadding), + value = field.text, + label = field.label, +// keyboardOptions = KeyboardOptions( +// imeAction = ImeAction.Next, +// ), +// keyboardActions = KeyboardActions( +// onNext = keyboardOnNext, +// ), + ) +} + +@Composable +private fun LoginItemField( + modifier: Modifier = Modifier, + item: LoginStateItem.HttpHeader, +) { + val field by item.state.flow.collectAsState() + val localState by remember(item.state.flow) { + item.state.flow + .map { a -> + a.options + item.options + } + }.collectAsState(null) + BiFlatTextField( + modifier = modifier + .padding(horizontal = Dimens.horizontalPadding), + label = field.label, + value = field.text, + trailing = { + OptionsButton( + actions = localState.orEmpty(), + ) + }, + ) +} + +@Composable +private fun LoginItemSection( + modifier: Modifier = Modifier, + item: LoginStateItem.Section, +) { + Section( + modifier = modifier, + text = item.text, + ) +} + +@Composable +private fun LoginItemLabel( + modifier: Modifier = Modifier, + item: LoginStateItem.Label, +) { + Text( + modifier = modifier + .padding(horizontal = Dimens.horizontalPadding), + text = item.text, + style = MaterialTheme.typography.bodyMedium, + color = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + ) +} + +@Composable +private fun LoginItemAdd( + modifier: Modifier = Modifier, + item: LoginStateItem.Add, +) { + Column( + modifier = modifier, + ) { + val dropdownShownState = remember { mutableStateOf(false) } + if (item.actions.isEmpty()) { + dropdownShownState.value = false + } + + // Inject the dropdown popup to the bottom of the + // content. + val onDismissRequest = remember(dropdownShownState) { + // lambda + { + dropdownShownState.value = false + } + } + val contentColor = MaterialTheme.colorScheme.primary + FlatItem( + leading = { + Icon(Icons.Outlined.Add, null, tint = contentColor) + }, + title = { + Text( + text = item.text, + color = contentColor, + ) + + DropdownMenu( + modifier = Modifier + .widthIn(min = DropdownMinWidth), + expanded = dropdownShownState.value, + onDismissRequest = onDismissRequest, + ) { + val scope = DropdownScopeImpl(this, onDismissRequest = onDismissRequest) + with(scope) { + item.actions.forEachIndexed { index, action -> + DropdownMenuItemFlat( + action = action, + ) + } + } + } + }, + onClick = { + if (item.actions.size == 1) { + item.actions.first() + .onClick?.invoke() + } else { + dropdownShownState.value = true + } + }, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/login/LoginState.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/login/LoginState.kt new file mode 100644 index 00000000..c470af12 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/login/LoginState.kt @@ -0,0 +1,157 @@ +package com.artemchep.keyguard.feature.auth.login + +import androidx.compose.runtime.Immutable +import arrow.optics.optics +import com.artemchep.keyguard.feature.auth.common.TextFieldModel2 +import com.artemchep.keyguard.provider.bitwarden.ServerHeader +import com.artemchep.keyguard.ui.FlatItemAction +import kotlinx.collections.immutable.PersistentList +import kotlinx.collections.immutable.persistentListOf +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.emptyFlow + +@Immutable +@optics +data class LoginState( + val email: TextFieldModel2, + val password: TextFieldModel2, + val clientSecret: TextFieldModel2? = null, + val effects: SideEffect = SideEffect(), + val showCustomEnv: Boolean = false, + val regionItems: List = emptyList(), + val items: List = emptyList(), + val isLoading: Boolean = false, + val onLoginClick: (() -> Unit)? = null, +) { + companion object; + + @Immutable + @optics + data class SideEffect( + val onSuccessFlow: Flow = emptyFlow(), + val onErrorFlow: Flow = emptyFlow(), + ) { + companion object + } +} + +sealed interface LoginStateItem { + val id: String + + interface HasOptions { + val options: List + + /** + * Copies the data class replacing the old options with a + * provided ones. + */ + fun withOptions( + options: List, + ): T + } + + interface HasState { + val state: LocalStateItem + } + + data class Dropdown( + override val id: String, + override val state: LocalStateItem, + ) : LoginStateItem, HasState { + data class State( + val value: LoginRegion, + val title: String, + val text: String?, + val options: List = emptyList(), + ) + } + + data class Url( + override val id: String, + override val options: List = emptyList(), + override val state: LocalStateItem, + ) : LoginStateItem, HasOptions, HasState { + override fun withOptions(options: List): Url = + copy( + options = options, + ) + + data class State( + override val options: List = emptyList(), + val label: String, + val text: TextFieldModel2, + ) : HasOptions { + override fun withOptions(options: List): State = + copy( + options = options, + ) + } + } + + data class HttpHeader( + override val id: String, + override val options: List = emptyList(), + override val state: LocalStateItem, + ) : LoginStateItem, HasOptions, HasState { + override fun withOptions(options: List): HttpHeader = + copy( + options = options, + ) + + data class State( + override val options: List = emptyList(), + val label: TextFieldModel2, + val text: TextFieldModel2, + ) : HasOptions { + override fun withOptions(options: List) = + copy( + options = options, + ) + } + } + + // + // Items that may modify the amount of items in the + // list. + // + + data class Section( + override val id: String, + val text: String? = null, + ) : LoginStateItem + + data class Label( + override val id: String, + val text: String, + ) : LoginStateItem + + data class Add( + override val id: String, + val text: String, + val actions: List, + ) : LoginStateItem +} + +data class LocalStateItem( + val flow: StateFlow, + val populator: CreateRequest.(T) -> CreateRequest = { this }, +) + +data class CreateRequest( + val error: Boolean = false, + // general + val username: String? = null, + val password: String? = null, + val clientSecret: String? = null, + val region: LoginRegion? = null, + // base environment + val baseUrl: String? = null, + // custom environment + val webVaultUrl: String? = null, + val apiUrl: String? = null, + val identityUrl: String? = null, + val iconsUrl: String? = null, + // headers + val headers: PersistentList = persistentListOf(), +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/login/LoginStateProducer.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/login/LoginStateProducer.kt new file mode 100644 index 00000000..eb7d7f0e --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/login/LoginStateProducer.kt @@ -0,0 +1,1086 @@ +package com.artemchep.keyguard.feature.auth.login + +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.ArrowDownward +import androidx.compose.material.icons.outlined.ArrowUpward +import androidx.compose.material.icons.outlined.DeleteForever +import androidx.compose.runtime.Composable +import arrow.core.partially1 +import arrow.core.partially2 +import arrow.core.widen +import com.artemchep.keyguard.common.exception.ApiException +import com.artemchep.keyguard.common.io.effectTap +import com.artemchep.keyguard.common.io.handleErrorTap +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.usecase.CipherUnsecureUrlCheck +import com.artemchep.keyguard.common.util.flow.EventFlow +import com.artemchep.keyguard.common.util.flow.combineToList +import com.artemchep.keyguard.common.util.flow.persistingStateIn +import com.artemchep.keyguard.feature.auth.common.TextFieldModel2 +import com.artemchep.keyguard.feature.auth.common.Validated +import com.artemchep.keyguard.feature.auth.common.util.REGEX_US_ASCII +import com.artemchep.keyguard.feature.auth.common.util.ValidationUrl +import com.artemchep.keyguard.feature.auth.common.util.format +import com.artemchep.keyguard.feature.auth.common.util.validateUrl +import com.artemchep.keyguard.feature.auth.common.util.validatedEmail +import com.artemchep.keyguard.feature.auth.common.util.validatedPassword +import com.artemchep.keyguard.feature.auth.login.otp.LoginTwofaRoute +import com.artemchep.keyguard.feature.confirmation.createConfirmationDialogIntent +import com.artemchep.keyguard.feature.navigation.state.RememberStateFlowScope +import com.artemchep.keyguard.feature.navigation.state.produceScreenState +import com.artemchep.keyguard.platform.parcelize.LeParcelable +import com.artemchep.keyguard.platform.parcelize.LeParcelize +import com.artemchep.keyguard.provider.bitwarden.ServerEnv +import com.artemchep.keyguard.provider.bitwarden.ServerHeader +import com.artemchep.keyguard.provider.bitwarden.usecase.internal.AddAccount +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItemAction +import com.artemchep.keyguard.ui.icons.icon +import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.toPersistentMap +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.Job +import kotlinx.coroutines.cancel +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.filterNotNull +import kotlinx.coroutines.flow.flatMapLatest +import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.scan +import kotlinx.coroutines.flow.shareIn +import kotlinx.coroutines.flow.update +import kotlinx.coroutines.plus +import org.kodein.di.compose.localDI +import org.kodein.di.direct +import org.kodein.di.instance +import java.io.Serializable +import java.util.UUID + +private const val TAG = "login" + +private const val KEY_EMAIL = "$TAG.email" +private const val KEY_PASSWORD = "$TAG.password" +private const val KEY_REGION = "$TAG.region" + +private const val KEY_CLIENT_SECRET = "$TAG.client_secret" + +private const val KEY_FAILED_IDENTITY_REQUEST_FINGERPRINT = + "$TAG.failed_identity_request_fingerprint" + +private const val KEY_SERVER_REGION_SECTION = "$TAG.server.region.section" +private const val KEY_SERVER_REGION = "$TAG.server.region" + +private const val KEY_SERVER_BASE_SECTION = "$TAG.server.base.section" +private const val KEY_SERVER_BASE_URL = "$TAG.server.base.url" +private const val KEY_SERVER_BASE_URL_DESCRIPTION = "$TAG.server.base.description" + +private const val KEY_SERVER_CUSTOM_SECTION = "$TAG.server.custom.section" +private const val KEY_SERVER_CUSTOM_WEB_VAULT_URL = "$TAG.server.custom.web_vault_url" +private const val KEY_SERVER_CUSTOM_API_URL = "$TAG.server.custom.api_url" +private const val KEY_SERVER_CUSTOM_IDENTITY_URL = "$TAG.server.custom.identity_url" +private const val KEY_SERVER_CUSTOM_ICONS_URL = "$TAG.server.custom.icons_url" +private const val KEY_SERVER_CUSTOM_DESCRIPTION = "$TAG.server.custom.description" + +@LeParcelize +data class IdentityRequestFingerprint( + val email: String, + val password: String, + // env + val baseUrl: String = "", + val identityUrl: String = "", +) : LeParcelable + +private data class IdentityCredentials( + val email: Validated, + val password: Validated, + val clientSecret: Validated?, +) + +@Composable +fun produceLoginScreenState( + args: LoginRoute.Args, +): Loadable = with(localDI().direct) { + produceLoginScreenState( + addAccount = instance(), + cipherUnsecureUrlCheck = instance(), + args = args, + ) +} + +private inline val defaultEmail get() = "" + +private inline val defaultPassword get() = "" + +@OptIn(ExperimentalCoroutinesApi::class) +@Composable +fun produceLoginScreenState( + addAccount: AddAccount, + cipherUnsecureUrlCheck: CipherUnsecureUrlCheck, + args: LoginRoute.Args, +): Loadable = produceScreenState( + initial = Loadable.Loading, + key = "login", + args = arrayOf( + addAccount, + args, + ), +) { + val onSuccessFlow = EventFlow() + val onErrorFlow = EventFlow() + + val actionExecutor = screenExecutor() + + // email + + val emailSink = mutablePersistedFlow(KEY_EMAIL) { + args.email // fallback to default email + ?: defaultEmail + } + val emailState = mutableComposeState(emailSink) + + // A flow of a email + email validation error, if any. + val validatedEmailFlow = emailSink.filterNotNull() + .validatedEmail(this) + + // password + + val passwordSink = mutablePersistedFlow(KEY_PASSWORD) { + args.password // fallback to default password + ?: defaultPassword + } + val passwordState = mutableComposeState(passwordSink) + + // A flow of a password + password validation error, if any. + val validatedPasswordFlow = passwordSink.filterNotNull() + .validatedPassword(this) + + // client secret + + val clientSecretSink = mutablePersistedFlow(KEY_CLIENT_SECRET) { + args.clientSecret // fallback to default client secret + ?: "" + } + val clientSecretState = mutableComposeState(clientSecretSink) + + val failedIdentityRequestFingerprintSink = + mutablePersistedFlow(KEY_FAILED_IDENTITY_REQUEST_FINGERPRINT) { + null + } + + // region + + val regionDefault = LoginRegion.default + val regionSink = mutablePersistedFlow(KEY_REGION) { regionDefault.key } + val regionFlow = regionSink + .map { regionName -> + LoginRegion.ofOrNull(regionName) + ?: regionDefault + } + + val regionItems = LoginRegion.values + .asSequence() + .map { region -> + FlatItemAction( + id = region.key, + title = translate(region.title), + onClick = { + regionSink.value = region.key + }, + ) + } + .toPersistentList() + + // + // + // + + val envReadOnlyFlow = actionExecutor.isExecutingFlow + .map { executing -> + executing || !args.envEditable + } + .distinctUntilChanged() + + suspend fun createEnvUrlItem( + key: String, + label: String, + initialValue: () -> String, + populator: CreateRequest.(String) -> CreateRequest, + ) = kotlin.run { + val textSink = mutablePersistedFlow("$key.text") { + initialValue() + } + val textMutableState = mutableComposeState(textSink) + val textFlow = textSink + .map { text -> + val validationUrl = validateUrl( + url = text, + allowBlank = true, + ) + val badge = kotlin.run { + val isUnsecure = + validationUrl == ValidationUrl.OK && cipherUnsecureUrlCheck(text) + if (isUnsecure) { + return@run TextFieldModel2.Vl( + type = TextFieldModel2.Vl.Type.WARNING, + text = translate(Res.strings.uri_unsecure), + ) + } + + null + } + + TextFieldModel2( + text = text, + error = validationUrl.format(this), + state = textMutableState, + vl = badge, + onChange = textMutableState::value::set, + ) + } + .readOnly(envReadOnlyFlow) + + LoginStateItem.Url( + id = key, + state = LocalStateItem( + flow = textFlow + .map { textField -> + LoginStateItem.Url.State( + label = label, + text = textField, + ) + } + .persistingStateIn(screenScope, SharingStarted.Lazily), + populator = { state -> + val error = state.text.error != null + if (error) { + return@LocalStateItem copy(error = true) + } + + val value = state.text.text + populator(value) + }, + ), + ) + } + + val globalItems = listOf( + LoginStateItem.Section( + id = KEY_SERVER_REGION_SECTION, + text = translate(Res.strings.addaccount_region_section), + ), + LoginStateItem.Dropdown( + id = KEY_SERVER_REGION, + state = LocalStateItem( + flow = regionFlow + .map { region -> + LoginStateItem.Dropdown.State( + value = region, + title = translate(region.title), + text = region.text, + options = regionItems, + ) + } + .persistingStateIn(screenScope, SharingStarted.Lazily), + populator = { state -> + copy( + region = state.value, + ) + }, + ), + ), + ) + + val envServerBaseUrlItem = + createEnvUrlItem( + key = KEY_SERVER_BASE_URL, + label = translate(Res.strings.addaccount_base_env_server_url_label), + initialValue = { args.env.baseUrl }, + ) { copy(baseUrl = it) } + val envServerCustomIdentityUrlItem = + createEnvUrlItem( + key = KEY_SERVER_CUSTOM_IDENTITY_URL, + label = translate(Res.strings.addaccount_custom_env_identity_url_label), + initialValue = { args.env.identityUrl }, + ) { copy(identityUrl = it) } + + val envServerItems = listOf( + // general + envServerBaseUrlItem, + LoginStateItem.Label( + id = KEY_SERVER_BASE_URL_DESCRIPTION, + text = translate(Res.strings.addaccount_base_env_note), + ), + // custom + LoginStateItem.Section( + id = KEY_SERVER_CUSTOM_SECTION, + text = translate(Res.strings.addaccount_custom_env_section), + ), + createEnvUrlItem( + key = KEY_SERVER_CUSTOM_WEB_VAULT_URL, + label = translate(Res.strings.addaccount_custom_env_web_vault_url_label), + initialValue = { args.env.webVaultUrl }, + ) { copy(webVaultUrl = it) }, + createEnvUrlItem( + key = KEY_SERVER_CUSTOM_API_URL, + label = translate(Res.strings.addaccount_custom_env_api_url_label), + initialValue = { args.env.apiUrl }, + ) { copy(apiUrl = it) }, + envServerCustomIdentityUrlItem, + createEnvUrlItem( + key = KEY_SERVER_CUSTOM_ICONS_URL, + label = translate(Res.strings.addaccount_custom_env_icons_url_label), + initialValue = { args.env.iconsUrl }, + ) { copy(iconsUrl = it) }, + LoginStateItem.Label( + id = KEY_SERVER_CUSTOM_DESCRIPTION, + text = translate(Res.strings.addaccount_custom_env_note), + ), + ) + + val clientSecretRequiredFlow = failedIdentityRequestFingerprintSink + .flatMapLatest { identityOrNull -> + // If we don't have a failed request, then do not + // require a user to fill in the client secret. + identityOrNull ?: return@flatMapLatest flowOf(false) + + data class IdentityServerData( + val baseServerUrl: String? = null, + val identityServerUrl: String? = null, + ) + + // If the identity server is not specified then it is + // derived from the base server. + fun of( + baseServerUrl: String, + identityServerUrl: String, + ): IdentityServerData { + if (identityServerUrl.isNotBlank()) { + return IdentityServerData(identityServerUrl = identityServerUrl) + } + return IdentityServerData(baseServerUrl = baseServerUrl) + } + + val identityData = of( + baseServerUrl = identityOrNull.baseUrl, + identityServerUrl = identityOrNull.identityUrl, + ) + val dataFlow = combine( + envServerBaseUrlItem.state.flow.map { it.text.text }, + envServerCustomIdentityUrlItem.state.flow.map { it.text.text }, + ) { baseServerUrl, identityServerUrl -> + of( + baseServerUrl = baseServerUrl, + identityServerUrl = identityServerUrl, + ) + } + combine( + emailSink, + passwordSink, + dataFlow, + ) { email, password, data -> + identityOrNull.email == email && + identityOrNull.password == password && + identityData == data + } + } + .shareIn(screenScope, SharingStarted.WhileSubscribed(), replay = 1) + + val validatedClientSecretFlow = combine( + clientSecretSink, + clientSecretRequiredFlow, + ) { clientSecret, clientSecretRequired -> + val error = translate(Res.strings.error_must_not_be_blank) + .takeIf { clientSecretRequired && clientSecret.isBlank() } + if (error != null) { + Validated.Failure(clientSecret, error) + } else { + Validated.Success(clientSecret) + } + } + + val clientCredentialFlow = combine( + validatedEmailFlow, + validatedPasswordFlow, + // Hide client secret field if it is + // not required. + combine( + validatedClientSecretFlow, + clientSecretRequiredFlow, + ) { clientSecret, required -> + clientSecret.takeIf { required } + }, + ) { + email, + password, + clientSecret, + -> + IdentityCredentials( + email, + password, + clientSecret, + ) + }.shareIn(screenScope, SharingStarted.WhileSubscribed(), replay = 1) + + val envHeadersFactories = kotlin.run { + val headerFactory = AddStateItemFieldFactory( + readOnlyFlow = envReadOnlyFlow, + ) + listOf( + headerFactory, + ) + } + val envHeadersTypesFlow = flowOf( + listOf( + Foo2Type( + type = "header", + name = translate(Res.strings.addaccount_http_header_type), + ), + ), + ) + val envHeadersFlow = foo3( + scope = "header", + initial = args.env.headers, + initialType = { "header" }, + factories = envHeadersFactories, + afterList = { + val header = LoginStateItem.Section( + id = "header.section", + text = translate(Res.strings.addaccount_http_header_section), + ) + add(0, header) + }, + extra = { + typeBasedAddItem( + scope = "header", + addText = translate(Res.strings.addaccount_http_header_add_more_button), + typesFlow = envHeadersTypesFlow, + ).map { items -> + val info = LoginStateItem.Label( + id = "header.info", + text = translate(Res.strings.addaccount_http_header_note), + ) + items + info + } + }, + ) + + fun stetify(flow: Flow>) = flow + .map { items -> + items + .mapNotNull { item -> + val stateHolder = item as? LoginStateItem.HasState + ?: return@mapNotNull null + + val state = stateHolder.state + state + .flow + .map { v -> + state.populator + .partially2(v) + } + } + } + + val outputFlow = combine( + stetify(envHeadersFlow), + stetify(flowOf(globalItems)), + stetify(flowOf(envServerItems)), + clientCredentialFlow + .map { credentials -> + val transform = fun(oldState: CreateRequest): CreateRequest { + var state = oldState + + // Email + kotlin.run { + val error = credentials.email is Validated.Failure + if (error) return state.copy(error = true) + state = state.copy(username = credentials.email.model) + } + // Password + kotlin.run { + val error = credentials.password is Validated.Failure + if (error) return state.copy(error = true) + state = state.copy(password = credentials.password.model) + } + // Client secret + kotlin.run { + val error = credentials.clientSecret is Validated.Failure + if (error) return state.copy(error = true) + state = state.copy(clientSecret = credentials.clientSecret?.model) + } + + return state + } + listOf(flowOf(transform)) + }, + ) { arr -> + arr.toList().flatten() + } + .flatMapLatest { it.combineToList() } + .map { populators -> + populators.fold( + initial = CreateRequest(), + ) { state, transform -> + // If the model already has an error, then we can not + // use it and to save processing power we can abort + // populating it. + if (state.error) state else transform(state) + } + } + .distinctUntilChanged() + + combine( + clientCredentialFlow, + regionFlow.map { it is LoginRegion.Custom }.distinctUntilChanged(), + outputFlow, + envHeadersFlow, + actionExecutor.isExecutingFlow, + ) { (validatedEmail, validatedPassword, clientSecret), showCustomEnv, output, items, taskIsExecuting -> + val canLogin = validatedEmail is Validated.Success && + validatedPassword is Validated.Success && + !output.error && + !taskIsExecuting + + val emailField = TextFieldModel2.of( + state = emailState, + validated = validatedEmail, + onChange = emailState::value::set + .takeUnless { !args.emailEditable || taskIsExecuting }, + ) + val passwordField = TextFieldModel2.of( + state = passwordState, + validated = validatedPassword, + onChange = passwordState::value::set + .takeUnless { !args.passwordEditable || taskIsExecuting }, + ) + val clientSecretField = clientSecret?.let { + TextFieldModel2.of( + state = clientSecretState, + validated = it, + onChange = clientSecretState::value::set + .takeUnless { !args.clientSecretEditable || taskIsExecuting }, + ) + } + LoginState( + effects = LoginState.SideEffect( + onSuccessFlow = onSuccessFlow, + onErrorFlow = onErrorFlow, + ), + email = emailField, + password = passwordField, + clientSecret = clientSecretField, + showCustomEnv = showCustomEnv, + regionItems = globalItems, + items = envServerItems + items, + isLoading = taskIsExecuting, + onLoginClick = if (canLogin) { + { + val env = if (args.envEditable) { + when (val r = output.region) { + is LoginRegion.Predefined -> { + ServerEnv( + region = r.region, + ) + } + + is LoginRegion.Custom -> { + ServerEnv( + baseUrl = output.baseUrl.orEmpty().let(::ensureUrlSchema), + webVaultUrl = output.webVaultUrl.orEmpty() + .let(::ensureUrlSchema), + apiUrl = output.apiUrl.orEmpty().let(::ensureUrlSchema), + identityUrl = output.identityUrl.orEmpty() + .let(::ensureUrlSchema), + iconsUrl = output.iconsUrl.orEmpty().let(::ensureUrlSchema), + headers = output.headers, + ) + } + + null -> { + ServerEnv( + region = ServerEnv.Region.default, + ) + } + } + } else { + args.env + } + val io = addAccount( + args.accountId, // account id + env, // environment + null, // two-factor token + clientSecret?.model, // client secret + validatedEmail.model, // email + validatedPassword.model, // password + ) + .handleErrorTap { e -> + // We should only handle api exceptions + if (e !is ApiException) return@handleErrorTap + when (val t = e.type) { + is ApiException.Type.TwoFaRequired -> { + val otpRequiredArgs = LoginTwofaRoute.Args( + accountId = args.accountId, + providers = t.providers, + clientSecret = clientSecret?.model, + email = validatedEmail.model, + password = validatedPassword.model, + env = env, + ) + val event = LoginEvent.Error.OtpRequired(otpRequiredArgs) + onErrorFlow.emit(event) + } + + is ApiException.Type.CaptchaRequired -> { + val fingerprint = IdentityRequestFingerprint( + email = validatedEmail.model, + password = validatedPassword.model, + baseUrl = env.baseUrl, + identityUrl = env.identityUrl, + ) + failedIdentityRequestFingerprintSink.value = fingerprint + } + + else -> { + // TODO: Do we ned to reset the password on error? + // Everyone does that, but i'm not sure if + // that is very helpful. + passwordState.value = "" + } + } + } + .effectTap { + onSuccessFlow.emit(Unit) + } + actionExecutor.execute(io) + } + } else { + null + }, + ).let { Loadable.Ok(it) } + } +} + +private fun ensureUrlSchema(url: String) = + if (url.isBlank() || url.contains("://")) { + // The url contains a schema, return + // it as it as. + url + } else { + val newUrl = "https://$url" + newUrl + } + +class AddStateItemFieldFactory( + private val readOnlyFlow: Flow, +) : Foo2Factory { + override val type: String = "header" + + override fun RememberStateFlowScope.release(key: String) { + clearPersistedFlow("$key.label") + clearPersistedFlow("$key.text") + } + + override suspend fun RememberStateFlowScope.add( + coroutineScope: CoroutineScope, + key: String, + initial: ServerHeader?, + ): LoginStateItem.HttpHeader { + val labelSink = mutablePersistedFlow("$key.label") { + initial?.key.orEmpty() + } + val labelMutableState = mutableComposeState(labelSink) + val labelFlow = labelSink + .map { label -> + val error = if (label.isBlank()) { + translate(Res.strings.error_must_not_be_blank) + } else { + null + } + TextFieldModel2( + text = label, + hint = translate(Res.strings.addaccount_http_header_key_label), + error = error, + state = labelMutableState, + onChange = labelMutableState::value::set, + ) + } + .readOnly(readOnlyFlow) + + val textSink = mutablePersistedFlow("$key.text") { + initial?.value.orEmpty() + } + val textMutableState = mutableComposeState(textSink) + val textFlow = textSink + .map { text -> + val error = if (!REGEX_US_ASCII.matches(text)) { + translate(Res.strings.error_must_contain_only_us_ascii_chars) + } else { + null + } + TextFieldModel2( + text = text, + hint = translate(Res.strings.addaccount_http_header_value_label), + error = error, + state = textMutableState, + onChange = textMutableState::value::set, + ) + } + .readOnly(readOnlyFlow) + + val stateFlow = combine( + labelFlow, + textFlow, + ) { labelField, textField -> + LoginStateItem.HttpHeader.State( + label = labelField, + text = textField, + ) + } + .persistingStateIn( + scope = coroutineScope, + started = SharingStarted.Lazily, + ) + return LoginStateItem.HttpHeader( + id = key, + state = LocalStateItem( + flow = stateFlow, + populator = { state -> + val error = state.label.error != null || state.text.error != null + if (error) { + return@LocalStateItem copy(error = true) + } + + val header = ServerHeader( + key = state.label.text, + value = state.text.text, + ) + copy(headers = headers.add(header)) + }, + ), + ) + } +} + +interface Foo2Factory where T : LoginStateItem, T : LoginStateItem.HasOptions { + val type: String + + suspend fun RememberStateFlowScope.add( + coroutineScope: CoroutineScope, + key: String, + initial: Default?, + ): T + + fun RememberStateFlowScope.release(key: String) +} + +data class Foo2Type( + val type: String, + val name: String, +) + +data class Foo2Persistable( + val key: String, + val type: String, +) : Serializable + +data class Foo2InitialState( + val items: List>, +) { + data class Item( + val key: String, + val type: String, + val argument: Argument? = null, + ) +} + +fun RememberStateFlowScope.foo3( + scope: String, + initial: List, + initialType: (Argument) -> String, + factories: List>, + afterList: MutableList.() -> Unit, + extra: FieldBakeryScope.() -> Flow> = { + flowOf(emptyList()) + }, +): Flow> where T : LoginStateItem, T : LoginStateItem.HasOptions { + val initialState = Foo2InitialState( + items = initial + .associateBy { + UUID.randomUUID().toString() + } + .map { entry -> + Foo2InitialState.Item( + key = entry.key, + type = initialType(entry.value), + argument = entry.value, + ) + }, + ) + return foo( + scope = scope, + initialState = initialState, + entryAdd = { coroutineScope, (key, type), arg -> + val factory = factories.first { it.type == type } + with(factory) { + add(coroutineScope, key, arg) + } + }, + entryRelease = { (key, type) -> + val factory = factories.first { it.type == type } + with(factory) { + release(key) + } + }, + afterList = afterList, + extra = extra, + ) +} + +interface FieldBakeryScope { + fun moveUp(key: String) + + fun moveDown(key: String) + + fun delete(key: String) + + fun add(type: String, arg: Argument?) +} + +private fun FieldBakeryScope.typeBasedAddItem( + scope: String, + addText: String, + typesFlow: Flow>, +): Flow> = typesFlow + .map { types -> + if (types.isEmpty()) { + return@map null // hide add item + } + + val actions = types + .map { type -> + FlatItemAction( + title = type.name, + onClick = { + add(type.type, null) + }, + ) + } + LoginStateItem.Add( + id = "$scope.add", + text = addText, + actions = actions, + ) + } + .map { listOfNotNull(it) } + +fun RememberStateFlowScope.foo( + // scope name, + scope: String, + initialState: Foo2InitialState, + entryAdd: suspend RememberStateFlowScope.(CoroutineScope, Foo2Persistable, Argument?) -> T, + entryRelease: RememberStateFlowScope.(Foo2Persistable) -> Unit, + afterList: MutableList.() -> Unit, + extra: FieldBakeryScope.() -> Flow> = { + flowOf(emptyList()) + }, +): Flow> where T : LoginStateItem, T : LoginStateItem.HasOptions { + var inMemoryArguments = initialState + .items + .mapNotNull { + if (it.argument != null) { + it.key to it.argument + } else { + null + } + } + .toMap() + .toPersistentMap() + + val persistableSink = mutablePersistedFlow("$scope.keys") { + initialState + .items + .map { + Foo2Persistable( + key = it.key, + type = it.type, + ) + } + } + + fun move(key: String, offset: Int) = persistableSink.update { state -> + val i = state.indexOfFirst { it.key == key } + if ( + i == -1 || + i + offset < 0 || + i + offset >= state.size + ) { + return@update state + } + + val newState = state.toMutableList() + val item = newState.removeAt(i) + newState.add(i + offset, item) + newState + } + + fun moveUp(key: String) = move(key, offset = -1) + + fun moveDown(key: String) = move(key, offset = 1) + + fun delete(key: String) = persistableSink.update { state -> + inMemoryArguments = inMemoryArguments.remove(key) + + val i = state.indexOfFirst { it.key == key } + if (i == -1) return@update state + + val newState = state.toMutableList() + newState.removeAt(i) + newState + } + + fun add(type: String, arg: Argument?) { + val key = "$scope.items." + UUID.randomUUID().toString() + // Remember the argument, so we can grab it and construct something + // persistent from it. + if (arg != null) { + inMemoryArguments = inMemoryArguments.put(key, arg) + } + + val newEntry = Foo2Persistable( + key = key, + type = type, + ) + persistableSink.update { state -> + state + newEntry + } + } + + val scope2 = object : FieldBakeryScope { + override fun moveUp(key: String) = moveUp(key) + + override fun moveDown(key: String) = moveDown(key) + + override fun delete(key: String) = delete(key) + + override fun add(type: String, arg: Argument?) = add(type, arg) + } + + data class Foo2Scoped( + val perst: Foo2Persistable, + val scope: CoroutineScope, + val v: T, + ) + + val keysFlow = persistableSink + .scan( + initial = listOf>(), + ) { state, new -> + val out = mutableListOf>() + // Find if a new entry has a different + // type comparing to the old one. + new.forEach { perst -> + val existingEntry = state.firstOrNull { it.perst.key == perst.key } + val shouldAdd = when (val existingType = existingEntry?.perst?.type) { + perst.type -> { + out += existingEntry + false // do no add + } + + null -> true // add + + else -> { + val item = Foo2Persistable(perst.key, existingType) + entryRelease(item) + // clear the scope that we used to construct fields + existingEntry.scope.cancel() + true // add + } + } + if (shouldAdd) { + val itemCoroutineScope = screenScope + Job() + val itemDefaultArg = inMemoryArguments[perst.key] + out += Foo2Scoped( + perst = perst, + scope = itemCoroutineScope, + v = entryAdd(itemCoroutineScope, perst, itemDefaultArg), + ) + } + } + // Clean-up removed entries. + state.forEach { i -> + val removed = new.none { it.key == i.perst.key } + if (removed) { + val item = Foo2Persistable(i.perst.key, i.perst.type) + entryRelease(item) + // clear the scope that we used to construct fields + i.scope.cancel() + } + } + + out + } + val itemsFlow = keysFlow + .map { state -> + state.mapIndexed { index, entry -> + val item = entry.v + + // Appends list-specific options to be able to reorder + // the list or remove an item. + val options = item.options.toMutableList() + if (index > 0) { + options += FlatItemAction( + icon = Icons.Outlined.ArrowUpward, + title = translate(Res.strings.list_move_up), + onClick = ::moveUp.partially1(entry.perst.key), + ) + } + if (index < state.size - 1) { + options += FlatItemAction( + icon = Icons.Outlined.ArrowDownward, + title = translate(Res.strings.list_move_down), + onClick = ::moveDown.partially1(entry.perst.key), + ) + } + options += FlatItemAction( + icon = Icons.Outlined.DeleteForever, + title = translate(Res.strings.list_remove), + onClick = { + val intent = createConfirmationDialogIntent( + icon = icon(Icons.Outlined.DeleteForever), + title = translate(Res.strings.list_remove_confirmation_title), + ) { + delete(entry.perst.key) + } + navigate(intent) + }, + ) + + item.withOptions(options) + } + } + val extraFlow = extra(scope2) + return combine( + itemsFlow, + extraFlow, + ) { items, customItems -> + val out = items + .widen() + .toMutableList() + out += customItems + out.apply(afterList) + } + .shareIn(screenScope, SharingStarted.WhileSubscribed(5000L), replay = 1) +} + +private fun Flow.readOnly(flow: Flow) = this + .combine(flow) { textField, readOnly -> + if (readOnly) { + textField.copy(onChange = null) + } else { + textField + } + } diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/login/otp/LoginTwofaRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/login/otp/LoginTwofaRoute.kt new file mode 100644 index 00000000..97001578 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/login/otp/LoginTwofaRoute.kt @@ -0,0 +1,33 @@ +package com.artemchep.keyguard.feature.auth.login.otp + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.navigation.RouteForResult +import com.artemchep.keyguard.feature.navigation.RouteResultTransmitter +import com.artemchep.keyguard.provider.bitwarden.ServerEnv +import com.artemchep.keyguard.provider.bitwarden.model.TwoFactorProviderArgument + +data class LoginTwofaRoute( + val args: Args, +) : RouteForResult { + data class Args( + val accountId: String? = null, + // two factor + val providers: List, + // common + val clientSecret: String?, + val email: String, + val password: String, + // server + val env: ServerEnv, + ) + + @Composable + override fun Content( + transmitter: RouteResultTransmitter, + ) { + LoginTwofaScreen( + args = args, + transmitter = transmitter, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/login/otp/LoginTwofaScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/login/otp/LoginTwofaScreen.kt new file mode 100644 index 00000000..cea2cd39 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/login/otp/LoginTwofaScreen.kt @@ -0,0 +1,654 @@ +package com.artemchep.keyguard.feature.auth.login.otp + +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.animation.Crossfade +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ColumnScope +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.foundation.text.KeyboardActionScope +import androidx.compose.foundation.text.KeyboardActions +import androidx.compose.foundation.text.KeyboardOptions +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Construction +import androidx.compose.material.icons.outlined.Launch +import androidx.compose.material.icons.outlined.Login +import androidx.compose.material.icons.outlined.MailOutline +import androidx.compose.material.icons.outlined.Refresh +import androidx.compose.material3.Checkbox +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.focus.FocusRequester +import androidx.compose.ui.focus.focusRequester +import androidx.compose.ui.input.nestedscroll.nestedScroll +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.input.ImeAction +import androidx.compose.ui.text.input.KeyboardType +import androidx.compose.ui.unit.dp +import arrow.core.partially1 +import arrow.core.right +import com.artemchep.keyguard.common.model.getOrNull +import com.artemchep.keyguard.feature.navigation.NavigationIcon +import com.artemchep.keyguard.feature.navigation.RouteResultTransmitter +import com.artemchep.keyguard.feature.yubikey.YubiKeyManual +import com.artemchep.keyguard.feature.yubikey.YubiKeyNfcCard +import com.artemchep.keyguard.feature.yubikey.YubiKeyUsbCard +import com.artemchep.keyguard.feature.yubikey.rememberYubiKey +import com.artemchep.keyguard.platform.CurrentPlatform +import com.artemchep.keyguard.platform.Platform +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.DefaultFab +import com.artemchep.keyguard.ui.DefaultProgressBar +import com.artemchep.keyguard.ui.DisabledEmphasisAlpha +import com.artemchep.keyguard.ui.ExpandedIfNotEmpty +import com.artemchep.keyguard.ui.FabState +import com.artemchep.keyguard.ui.FlatDropdown +import com.artemchep.keyguard.ui.FlatItemAction +import com.artemchep.keyguard.ui.FlatItemLayout +import com.artemchep.keyguard.ui.FlatItemTextContent +import com.artemchep.keyguard.ui.FlatTextField +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.ScaffoldColumn +import com.artemchep.keyguard.ui.grid.SimpleGridLayout +import com.artemchep.keyguard.ui.icons.DropdownIcon +import com.artemchep.keyguard.ui.icons.IconBox +import com.artemchep.keyguard.ui.icons.KeyguardTwoFa +import com.artemchep.keyguard.ui.shimmer.shimmer +import com.artemchep.keyguard.ui.theme.Dimens +import com.artemchep.keyguard.ui.theme.combineAlpha +import com.artemchep.keyguard.ui.theme.horizontalPaddingHalf +import com.artemchep.keyguard.ui.theme.monoFontFamily +import com.artemchep.keyguard.ui.toolbar.LargeToolbar +import com.artemchep.keyguard.ui.util.HorizontalDivider +import dev.icerock.moko.resources.compose.stringResource + +@Composable +fun LoginTwofaScreen( + args: LoginTwofaRoute.Args, + transmitter: RouteResultTransmitter, +) { + val state = produceLoginTwofaScreenState( + args = args, + transmitter = transmitter, + ) + LoginTwofaScreenContent( + state = state, + ) +} + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun LoginTwofaScreenContent( + state: TwoFactorState, +) { + val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior() + val scope = remember { + LoginOtpScreenScope() + } + ScaffoldColumn( + modifier = Modifier + .nestedScroll(scrollBehavior.nestedScrollConnection), + topAppBarScrollBehavior = scrollBehavior, + topBar = { + LargeToolbar( + title = { + Text( + text = stringResource(Res.strings.addaccount2fa_header_title), + ) + }, + navigationIcon = { + NavigationIcon() + }, + scrollBehavior = scrollBehavior, + ) + }, + floatingActionState = run { + val holder = state.state as? LoginTwofaState.HasPrimaryAction + val primaryAction = holder?.primaryAction + val fabState = if (primaryAction != null) { + val fabOnClick = primaryAction.onClick + FabState( + onClick = fabOnClick, + model = null, + ) + } else { + null + } + rememberUpdatedState(newValue = fabState) + }, + floatingActionButton = { + val holder = state.state as? LoginTwofaState.HasPrimaryAction + val action = holder?.primaryAction + DefaultFab( + icon = { + Crossfade( + modifier = Modifier + .size(24.dp), + targetState = action?.icon, + ) { icon -> + when (icon) { + LoginTwofaState.PrimaryAction.Icon.LOGIN -> + Icon( + imageVector = Icons.Outlined.Login, + contentDescription = null, + ) + + LoginTwofaState.PrimaryAction.Icon.LAUNCH -> + Icon( + imageVector = Icons.Outlined.Launch, + contentDescription = null, + ) + + LoginTwofaState.PrimaryAction.Icon.LOADING -> + CircularProgressIndicator( + color = LocalContentColor.current, + ) + + null -> { + // Draw nothing. + } + } + } + }, + text = { + Text(action?.text.orEmpty()) + }, + ) + }, + overlay = { + val isLoading by state.loadingState.collectAsState() + DefaultProgressBar( + modifier = Modifier, + visible = isLoading, + ) + }, + ) { + TwoFactorProviderSelector( + items = state.providers, + ) + Spacer(Modifier.height(8.dp)) + + // Content + val s = state.state + Column { + when (s) { + is LoginTwofaState.Skeleton -> LoginOtpScreenContentSkeleton(scope, s) + is LoginTwofaState.Unsupported -> LoginOtpScreenContentUnsupported(scope, s) + is LoginTwofaState.Authenticator -> LoginOtpScreenContentAuthenticator(scope, s) + is LoginTwofaState.YubiKey -> LoginOtpScreenContentYubiKey(scope, s) + is LoginTwofaState.Email -> LoginOtpScreenContentEmail(scope, s) + is LoginTwofaState.Fido2WebAuthn -> LoginOtpScreenContentFido2WebAuthnBrowser( + scope, + s, + ) + + is LoginTwofaState.Duo -> LoginOtpScreenContentDuoWebView(scope, s) + } + } + } +} + +class LoginOtpScreenScope( + initialFocusRequested: Boolean = false, +) { + val initialFocusRequestedState = mutableStateOf(initialFocusRequested) + + @Composable + fun initialFocusRequesterEffect(): FocusRequester { + val focusRequester = remember { FocusRequester() } + // Auto focus the text field + // on launch. + LaunchedEffect(focusRequester) { + var initialFocusRequested by initialFocusRequestedState + if (!initialFocusRequested) { + focusRequester.requestFocus() + // do not request it the second time + initialFocusRequested = true + } + } + return focusRequester + } +} + +@Composable +private fun TwoFactorProviderSelector( + items: List, +) { + val dropdown = remember(items) { + items + .map { type -> + FlatItemAction( + id = type.key, + title = type.title, + onClick = type.onClick, + ) + } + } + FlatDropdown( + content = { + FlatItemTextContent( + title = { + val selectedTitle = remember(items) { + val type = items.firstOrNull { it.checked } + type?.title.orEmpty() + } + Row( + verticalAlignment = Alignment.CenterVertically, + ) { + Text( + text = selectedTitle, + style = MaterialTheme.typography.titleMedium, + ) + Spacer( + modifier = Modifier + .width(Dimens.buttonIconPadding), + ) + DropdownIcon() + } + }, + ) + }, + dropdown = dropdown, + ) +} + +@Composable +private fun ColumnScope.LoginOtpScreenContentSkeleton( + screenScope: LoginOtpScreenScope, + state: LoginTwofaState.Skeleton, +) { + val contentColor = LocalContentColor.current.combineAlpha(DisabledEmphasisAlpha) + Box( + modifier = Modifier + .height(13.dp) + .fillMaxWidth(0.70f) + .shimmer() + .padding(horizontal = Dimens.horizontalPadding) + .clip(MaterialTheme.shapes.medium) + .background(contentColor.copy(alpha = 0.28f)), + ) + Spacer(Modifier.height(32.dp)) + Box( + modifier = Modifier + .height(56.dp) + .fillMaxWidth() + .shimmer() + .padding(horizontal = Dimens.horizontalPadding) + .clip(MaterialTheme.shapes.medium) + .background(contentColor), + ) + Spacer(Modifier.height(16.dp)) + val height = 18.dp + Row( + modifier = Modifier + .height(height) + .padding(horizontal = Dimens.horizontalPadding), + ) { + Box( + modifier = Modifier + .width(height) + .fillMaxHeight() + .shimmer() + .clip(MaterialTheme.shapes.medium) + .background(contentColor), + ) + Spacer(Modifier.width(16.dp)) + Box( + modifier = Modifier + .fillMaxWidth(0.33f) + .fillMaxHeight() + .shimmer() + .clip(MaterialTheme.shapes.medium) + .background(contentColor), + ) + } +} + +@Composable +private fun ColumnScope.LoginOtpScreenContentUnsupported( + screenScope: LoginOtpScreenScope, + state: LoginTwofaState.Unsupported, +) { + val contentColor = LocalContentColor.current + .combineAlpha(alpha = MediumEmphasisAlpha) + Icon( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding), + imageVector = Icons.Outlined.Construction, + contentDescription = null, + tint = contentColor, + ) + Spacer(Modifier.height(16.dp)) + Text( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding), + text = stringResource(Res.strings.addaccount2fa_unsupported_note), + style = MaterialTheme.typography.bodyMedium, + color = contentColor, + ) + val updatedOnLaunchWebVault by rememberUpdatedState(state.onLaunchWebVault) + ExpandedIfNotEmpty( + valueOrNull = Unit.takeIf { state.onLaunchWebVault != null }, + ) { + TextButton( + modifier = Modifier + .padding(top = 16.dp) + .padding( + vertical = 4.dp, + horizontal = 4.dp, + ), + onClick = { + updatedOnLaunchWebVault?.invoke() + }, + ) { + Text( + text = stringResource(Res.strings.launch_web_vault), + ) + } + } +} + +@Composable +private fun ColumnScope.LoginOtpScreenContentAuthenticator( + screenScope: LoginOtpScreenScope, + state: LoginTwofaState.Authenticator, +) { + val focusRequester = screenScope.initialFocusRequesterEffect() + + val primaryActionOnClick = state.primaryAction?.onClick + val keyboardOnGo: (KeyboardActionScope.() -> Unit)? = + if (primaryActionOnClick != null) { + // lambda + { + primaryActionOnClick() + } + } else { + null + } + + Text( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding), + text = stringResource(Res.strings.addaccount2fa_otp_note), + style = MaterialTheme.typography.bodyMedium, + ) + Spacer(Modifier.height(16.dp)) + FlatTextField( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding), + // TODO: Should be Authenticator code, when compose autofill + // adds a support for that. + fieldModifier = Modifier + .focusRequester(focusRequester), + label = stringResource(Res.strings.verification_code), + value = state.code, + textStyle = TextStyle( + fontFamily = monoFontFamily, + ), + keyboardOptions = KeyboardOptions( + autoCorrect = false, + keyboardType = KeyboardType.Number, + imeAction = when { + keyboardOnGo != null -> ImeAction.Go + else -> ImeAction.Default + }, + ), + keyboardActions = KeyboardActions( + onGo = keyboardOnGo, + ), + maxLines = 1, + singleLine = true, + leading = { + IconBox( + main = Icons.Outlined.KeyguardTwoFa, + ) + }, + ) + Spacer(Modifier.height(8.dp)) + FlatItemLayout( + leading = { + Checkbox( + checked = state.rememberMe.checked, + enabled = state.rememberMe.onChange != null, + onCheckedChange = null, + ) + }, + content = { + Text( + text = stringResource(Res.strings.remember_me), + style = MaterialTheme.typography.bodyMedium, + ) + }, + onClick = state.rememberMe.onChange?.partially1(!state.rememberMe.checked), + ) +} + +@Composable +private fun ColumnScope.LoginOtpScreenContentEmail( + screenScope: LoginOtpScreenScope, + state: LoginTwofaState.Email, +) { + val focusRequester = screenScope.initialFocusRequesterEffect() + + val primaryActionOnClick = state.primaryAction?.onClick + val keyboardOnGo: (KeyboardActionScope.() -> Unit)? = + if (primaryActionOnClick != null) { + // lambda + { + primaryActionOnClick() + } + } else { + null + } + + Text( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding), + text = stringResource(Res.strings.addaccount2fa_email_note, state.email.orEmpty()), + style = MaterialTheme.typography.bodyMedium, + ) + Spacer(Modifier.height(16.dp)) + FlatTextField( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding), + // TODO: Should be Email code, when compose autofill + // adds a support for that. + fieldModifier = Modifier + .focusRequester(focusRequester), + label = stringResource(Res.strings.verification_code), + value = state.code, + textStyle = TextStyle( + fontFamily = monoFontFamily, + ), + keyboardOptions = KeyboardOptions( + autoCorrect = false, + keyboardType = KeyboardType.Number, + imeAction = when { + keyboardOnGo != null -> ImeAction.Go + else -> ImeAction.Default + }, + ), + keyboardActions = KeyboardActions( + onGo = keyboardOnGo, + ), + maxLines = 1, + singleLine = true, + leading = { + IconBox( + main = Icons.Outlined.KeyguardTwoFa, + ) + }, + ) + Spacer(Modifier.height(8.dp)) + AnimatedVisibility( + visible = state.emailResend != null, + ) { + FlatItemLayout( + leading = { + Box { + Icon(Icons.Outlined.MailOutline, null) + Box( + Modifier + .align(Alignment.BottomEnd) + .background(MaterialTheme.colorScheme.surfaceVariant, CircleShape), + ) { + Icon( + Icons.Outlined.Refresh, + null, + Modifier + .padding(1.dp) + .size(12.dp), + ) + } + } + }, + content = { + Text( + text = stringResource(Res.strings.resend_verification_code), + style = MaterialTheme.typography.bodyMedium, + ) + }, + onClick = state.emailResend, + ) + } + FlatItemLayout( + leading = { + Checkbox( + checked = state.rememberMe.checked, + enabled = state.rememberMe.onChange != null, + onCheckedChange = null, + ) + }, + content = { + Text( + text = stringResource(Res.strings.remember_me), + style = MaterialTheme.typography.bodyMedium, + ) + }, + onClick = state.rememberMe.onChange?.partially1(!state.rememberMe.checked), + ) +} + +// TODO: Switch to WebView implementation after +// https://bugs.chromium.org/p/chromium/issues/detail?id=1284805 +// is fixed. +@Composable +expect fun ColumnScope.LoginOtpScreenContentFido2WebAuthnWebView( + screenScope: LoginOtpScreenScope, + state: LoginTwofaState.Fido2WebAuthn, +) + +@Composable +expect fun ColumnScope.LoginOtpScreenContentFido2WebAuthnBrowser( + screenScope: LoginOtpScreenScope, + state: LoginTwofaState.Fido2WebAuthn, +) + +@Composable +expect fun ColumnScope.LoginOtpScreenContentDuoWebView( + screenScope: LoginOtpScreenScope, + state: LoginTwofaState.Duo, +) + +@Composable +private fun ColumnScope.LoginOtpScreenContentYubiKey( + screenScope: LoginOtpScreenScope, + state: LoginTwofaState.YubiKey, +) { + val yubi = rememberYubiKey( + send = state.onComplete, + ) + + val platform = CurrentPlatform + val manual = remember(platform, yubi) { + derivedStateOf { + if (platform is Platform.Desktop) { + return@derivedStateOf true + } + + val usb = yubi.usbState.value.getOrNull() + val nfc = yubi.nfcState.value.getOrNull() + usb?.enabled == false && + nfc?.enabled == false + } + } + AnimatedVisibility(manual.value) { + val updatedSend by rememberUpdatedState(state.onComplete) + Column( + modifier = Modifier + .fillMaxWidth(), + ) { + YubiKeyManual( + modifier = Modifier + .fillMaxWidth(), + onSend = { value -> + val result = value.right() + updatedSend?.invoke(result) + }, + ) + Spacer( + modifier = Modifier + .height(16.dp), + ) + HorizontalDivider() + Spacer( + modifier = Modifier + .height(16.dp), + ) + } + } + SimpleGridLayout( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPaddingHalf), + ) { + YubiKeyUsbCard( + state = yubi.usbState, + ) + YubiKeyNfcCard( + state = yubi.nfcState, + ) + } + FlatItemLayout( + leading = { + Checkbox( + checked = state.rememberMe.checked, + enabled = state.rememberMe.onChange != null, + onCheckedChange = null, + ) + }, + content = { + Text( + text = stringResource(Res.strings.remember_me), + style = MaterialTheme.typography.bodyMedium, + ) + }, + onClick = state.rememberMe.onChange?.partially1(!state.rememberMe.checked), + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/login/otp/LoginTwofaState.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/login/otp/LoginTwofaState.kt new file mode 100644 index 00000000..e3ef7fa2 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/login/otp/LoginTwofaState.kt @@ -0,0 +1,145 @@ +package com.artemchep.keyguard.feature.auth.login.otp + +import androidx.compose.runtime.Immutable +import arrow.core.Either +import arrow.optics.optics +import com.artemchep.keyguard.feature.auth.common.TextFieldModel2 +import com.artemchep.keyguard.feature.yubikey.OnYubiKeyListener +import com.artemchep.keyguard.provider.bitwarden.model.TwoFactorProviderType + +@Immutable +@optics +sealed class LoginTwofaState { + companion object + + interface HasPrimaryAction { + val primaryAction: PrimaryAction? + } + + @Immutable + @optics + data class PrimaryAction( + val text: String = "", + val icon: Icon = Icon.LOADING, + val onClick: (() -> Unit)? = null, + ) { + companion object; + + enum class Icon { + LOGIN, + LAUNCH, + LOADING, + } + } + + data object Skeleton : LoginTwofaState() + + @Immutable + @optics + data class Unsupported( + val providerType: TwoFactorProviderType?, + val onLaunchWebVault: (() -> Unit)?, + override val primaryAction: PrimaryAction? = null, + ) : LoginTwofaState(), HasPrimaryAction { + companion object + } + + @Immutable + @optics + data class Authenticator( + val code: TextFieldModel2, + val rememberMe: RememberMe = RememberMe(), + override val primaryAction: PrimaryAction? = null, + ) : LoginTwofaState(), HasPrimaryAction { + companion object + + @Immutable + data class RememberMe( + val checked: Boolean = false, + val onChange: ((Boolean) -> Unit)? = null, + ) { + companion object + } + } + + @Immutable + @optics + data class YubiKey( + val onComplete: OnYubiKeyListener?, + val rememberMe: RememberMe = RememberMe(), + override val primaryAction: PrimaryAction? = null, + ) : LoginTwofaState(), HasPrimaryAction { + companion object + + @Immutable + data class RememberMe( + val checked: Boolean = false, + val onChange: ((Boolean) -> Unit)? = null, + ) { + companion object + } + } + + @Immutable + @optics + data class Email( + val email: String? = null, + val emailResend: (() -> Unit)? = null, + val code: TextFieldModel2, + val rememberMe: RememberMe = RememberMe(), + override val primaryAction: PrimaryAction? = null, + ) : LoginTwofaState(), HasPrimaryAction { + companion object + + @Immutable + @optics + data class RememberMe( + val checked: Boolean = false, + val onChange: ((Boolean) -> Unit)? = null, + ) { + companion object + } + } + + @Immutable + @optics + data class Fido2WebAuthn( + val authUrl: String, + val callbackUrls: Set, + val error: String? = null, + val rememberMe: RememberMe = RememberMe(), + val onBrowser: (() -> Unit)?, + val onComplete: ((Either) -> Unit)?, + ) : LoginTwofaState() { + companion object + + @Immutable + @optics + data class RememberMe( + val checked: Boolean = false, + val onChange: ((Boolean) -> Unit)? = null, + ) { + companion object + } + } + + @Immutable + @optics + data class Duo( + val authUrl: String, + val error: String? = null, + val rememberMe: RememberMe = RememberMe(), + val onComplete: ((Either) -> Unit)?, + ) : LoginTwofaState() { + companion object + + @Immutable + @optics + data class RememberMe( + val checked: Boolean = false, + val onChange: ((Boolean) -> Unit)? = null, + ) { + companion object + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/login/otp/LoginTwofaStateProducer.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/login/otp/LoginTwofaStateProducer.kt new file mode 100644 index 00000000..5d7d8c58 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/login/otp/LoginTwofaStateProducer.kt @@ -0,0 +1,793 @@ +package com.artemchep.keyguard.feature.auth.login.otp + +import androidx.compose.runtime.Composable +import arrow.core.Either +import arrow.core.right +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.effectTap +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.model.ToastMessage +import com.artemchep.keyguard.common.service.crypto.CryptoGenerator +import com.artemchep.keyguard.common.service.deeplink.DeeplinkService +import com.artemchep.keyguard.common.service.text.Base64Service +import com.artemchep.keyguard.feature.auth.common.TextFieldModel2 +import com.artemchep.keyguard.feature.auth.common.Validated +import com.artemchep.keyguard.feature.loading.LoadingTask +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.feature.navigation.RouteResultTransmitter +import com.artemchep.keyguard.feature.navigation.state.RememberStateFlowScope +import com.artemchep.keyguard.feature.navigation.state.produceScreenState +import com.artemchep.keyguard.provider.bitwarden.ServerTwoFactorToken +import com.artemchep.keyguard.provider.bitwarden.api.builder.buildWebVaultUrl +import com.artemchep.keyguard.provider.bitwarden.model.TwoFactorProvider +import com.artemchep.keyguard.provider.bitwarden.model.TwoFactorProviderArgument +import com.artemchep.keyguard.provider.bitwarden.model.TwoFactorProviderType +import com.artemchep.keyguard.provider.bitwarden.usecase.internal.AddAccount +import com.artemchep.keyguard.provider.bitwarden.usecase.internal.RequestEmailTfa +import com.artemchep.keyguard.res.Res +import io.ktor.http.URLBuilder +import io.ktor.http.URLParserException +import io.ktor.http.Url +import io.ktor.http.appendPathSegments +import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.filterNotNull +import kotlinx.coroutines.flow.flatMapLatest +import kotlinx.coroutines.flow.flow +import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.onEach +import kotlinx.datetime.Clock +import kotlinx.datetime.Instant +import kotlinx.serialization.encodeToString +import kotlinx.serialization.json.Json +import kotlinx.serialization.json.buildJsonObject +import kotlinx.serialization.json.put +import org.kodein.di.compose.localDI +import org.kodein.di.direct +import org.kodein.di.instance +import kotlin.time.Duration + +@Composable +fun produceLoginTwofaScreenState( + args: LoginTwofaRoute.Args, + transmitter: RouteResultTransmitter, +) = with(localDI().direct) { + produceLoginTwofaScreenState( + cryptoGenerator = instance(), + base64Service = instance(), + deeplinkService = instance(), + json = instance(), + addAccount = instance(), + requestEmailTfa = instance(), + args = args, + transmitter = transmitter, + ) +} + +@Composable +fun produceLoginTwofaScreenState( + cryptoGenerator: CryptoGenerator, + base64Service: Base64Service, + deeplinkService: DeeplinkService, + json: Json, + addAccount: AddAccount, + requestEmailTfa: RequestEmailTfa, + args: LoginTwofaRoute.Args, + transmitter: RouteResultTransmitter, +): TwoFactorState = produceScreenState( + key = "login_otp", + initial = TwoFactorState( + loadingState = MutableStateFlow(false), + state = LoginTwofaState.Skeleton, + ), + args = arrayOf( + addAccount, + requestEmailTfa, + args, + transmitter, + ), +) { + val actionExecutor = screenExecutor() + + val providersComparator = compareBy( + { !it.supported }, // supported items first + { -it.priority }, // higher priority first + ) + val providers = args + .providers + .mapNotNull { TwoFactorProvider.state[it.type] } + .sortedWith(providersComparator) + + val providerTypeSink = mutablePersistedFlow("provider_type") { + providers.firstOrNull()?.type + } + + val providerItemsFlow = providerTypeSink + .map { selectedProviderType -> + providers.map { provider -> + val checked = provider.type == selectedProviderType + TwoFactorProviderItem( + key = provider.type.name, + title = translate(provider.name), + checked = checked, + onClick = { + providerTypeSink.value = provider.type + }, + ) + } + } + val providerCache = mutableMapOf>() + val providerStateFlow = providerTypeSink + .flatMapLatest { providerType -> + val providerArgs = args + .providers + .firstOrNull { providerType == it.type } + // should not happen + ?: return@flatMapLatest createStateFlowForUnsupported( + providerType = null, + args = args, + ) + val stateFlow = providerCache.getOrPut(providerType) { + val supported = TwoFactorProvider.state[providerType]?.supported + if (supported != true) { + // This might happen if platforms have different + // supported 2FA providers. + return@getOrPut createStateFlowForUnsupported( + providerType = providerType, + args = args, + ) + } + + when (providerType) { + TwoFactorProviderType.Authenticator -> + createStateFlowForAuthenticator( + actionExecutor = actionExecutor, + addAccount = addAccount, + args = args, + provider = providerArgs as TwoFactorProviderArgument.Authenticator, + transmitter = transmitter, + ) + + TwoFactorProviderType.YubiKey -> + createStateFlowForYubiKey( + actionExecutor = actionExecutor, + addAccount = addAccount, + args = args, + provider = providerArgs as TwoFactorProviderArgument.YubiKey, + transmitter = transmitter, + ) + + TwoFactorProviderType.Email -> + createStateFlowForEmail( + cryptoGenerator = cryptoGenerator, + actionExecutor = actionExecutor, + addAccount = addAccount, + requestEmailTfa = requestEmailTfa, + args = args, + provider = providerArgs as TwoFactorProviderArgument.Email, + transmitter = transmitter, + ) + + TwoFactorProviderType.Duo -> + createStateFlowForDuo( + actionExecutor = actionExecutor, + addAccount = addAccount, + args = args, + provider = providerArgs as TwoFactorProviderArgument.Duo, + transmitter = transmitter, + ) + + TwoFactorProviderType.OrganizationDuo -> + createStateFlowForOrganizationDuo( + actionExecutor = actionExecutor, + addAccount = addAccount, + args = args, + provider = providerArgs as TwoFactorProviderArgument.OrganizationDuo, + transmitter = transmitter, + ) + + TwoFactorProviderType.Fido2WebAuthn -> + createStateFlowForFido2WebAuthn( + cryptoGenerator = cryptoGenerator, + base64Service = base64Service, + deeplinkService = deeplinkService, + json = json, + actionExecutor = actionExecutor, + addAccount = addAccount, + args = args, + provider = providerArgs as TwoFactorProviderArgument.Fido2WebAuthn, + transmitter = transmitter, + ) + + else -> + // Show unsupported dialog for every other provider + // for now. + createStateFlowForUnsupported( + providerType = providerType, + args = args, + ) + } + } + stateFlow + } + combine( + providerItemsFlow, + providerStateFlow, + ) { providerItems, providerState -> + TwoFactorState( + providers = providerItems, + loadingState = actionExecutor.isExecutingFlow, + state = providerState, + ) + } +} + +private fun RememberStateFlowScope.createStateFlowForUnsupported( + providerType: TwoFactorProviderType?, + args: LoginTwofaRoute.Args, +): Flow { + val webVaultUrl = args.env.buildWebVaultUrl() + val onLaunchWebVault = try { + // Check if the web vault url is a + // valid url. + Url(webVaultUrl) + // if so, then + val onClick = { + val intent = NavigationIntent.NavigateToBrowser( + url = webVaultUrl, + ) + navigate(intent) + } + onClick + } catch (e: URLParserException) { + null + } + val defaultState = LoginTwofaState.Unsupported( + providerType = providerType, + onLaunchWebVault = onLaunchWebVault, + primaryAction = null, + ) + return flowOf( + value = defaultState, + ) +} + +private fun RememberStateFlowScope.createStateFlowForAuthenticator( + actionExecutor: LoadingTask, + addAccount: AddAccount, + args: LoginTwofaRoute.Args, + provider: TwoFactorProviderArgument.Authenticator, + transmitter: RouteResultTransmitter, +): Flow { + val codeSink = mutablePersistedFlow("authenticator.code") { "" } + val codeState = mutableComposeState(codeSink) + + val codeValidatedFlow = codeSink + .map { rawCode -> + val code = rawCode + .trim() + if (code.length != 6) { + Validated.Failure( + model = code, + error = translate(Res.strings.error_must_have_exactly_n_symbols, 6), + ) + } else { + Validated.Success( + model = code, + ) + } + } + + val rememberMeSink = mutablePersistedFlow("remember_me") { false } + + return combine( + codeValidatedFlow, + actionExecutor.isExecutingFlow, + rememberMeSink + .map { checked -> + LoginTwofaState.Authenticator.RememberMe( + checked = checked, + onChange = rememberMeSink::value::set, + ) + }, + ) { codeValidated, isLoading, rememberMe -> + val canLogin = codeValidated is Validated.Success && + !isLoading + val primaryAction = LoginTwofaState.PrimaryAction( + text = translate(Res.strings.continue_), + icon = if (isLoading) { + LoginTwofaState.PrimaryAction.Icon.LOADING + } else { + LoginTwofaState.PrimaryAction.Icon.LOGIN + }, + onClick = if (canLogin) { + // lambda + { + val io = addAccount( + args.accountId, + args.env, + ServerTwoFactorToken( + token = codeValidated.model, + provider = com.artemchep.keyguard.provider.bitwarden.model.TwoFactorProviderType.Authenticator, + remember = rememberMe.checked, + ), + args.clientSecret, + args.email, + args.password, + ).effectTap { + transmitter(Unit) + } + actionExecutor.execute(io) + } + } else { + null + }, + ) + LoginTwofaState.Authenticator( + code = TextFieldModel2.of( + state = codeState, + validated = codeValidated, + ), + rememberMe = rememberMe, + primaryAction = primaryAction, + ) + } +} + +private fun RememberStateFlowScope.createStateFlowForYubiKey( + actionExecutor: LoadingTask, + addAccount: AddAccount, + args: LoginTwofaRoute.Args, + provider: TwoFactorProviderArgument.YubiKey, + transmitter: RouteResultTransmitter, +): Flow { + val rememberMeSink = mutablePersistedFlow("remember_me") { false } + + fun onComplete( + token: String, + remember: Boolean, + ) { + val io = addAccount( + args.accountId, + args.env, + ServerTwoFactorToken( + token = token, + provider = TwoFactorProviderType.YubiKey, + remember = remember, + ), + args.clientSecret, + args.email, + args.password, + ).effectTap { + transmitter(Unit) + } + actionExecutor.execute(io) + } + + return combine( + actionExecutor.isExecutingFlow, + rememberMeSink + .map { checked -> + LoginTwofaState.YubiKey.RememberMe( + checked = checked, + onChange = rememberMeSink::value::set, + ) + }, + ) { isLoading, rememberMe -> + val canLogin = !isLoading + LoginTwofaState.YubiKey( + onComplete = { event: Either -> + event.fold( + ifLeft = { + val msg = ToastMessage( + title = translate(Res.strings.yubikey_error_failed_to_read), + type = ToastMessage.Type.ERROR, + ) + message(msg) + }, + ifRight = { token -> + onComplete( + token = token, + remember = rememberMe.checked, + ) + }, + ) + }.takeIf { canLogin }, + rememberMe = rememberMe, + primaryAction = null, + ) + } +} + +private fun RememberStateFlowScope.createStateFlowForEmail( + cryptoGenerator: CryptoGenerator, + actionExecutor: LoadingTask, + addAccount: AddAccount, + requestEmailTfa: RequestEmailTfa, + args: LoginTwofaRoute.Args, + provider: TwoFactorProviderArgument.Email, + transmitter: RouteResultTransmitter, +): Flow { + val codeSink = mutablePersistedFlow("email.code") { "" } + val codeState = mutableComposeState(codeSink) + + val codeValidatedFlow = codeSink + .map { rawCode -> + val code = rawCode + .trim() + if (code.length != 6) { + Validated.Failure( + model = code, + error = translate(Res.strings.error_must_have_exactly_n_symbols, 6), + ) + } else { + Validated.Success( + model = code, + ) + } + } + + val rememberMeSink = mutablePersistedFlow("remember_me") { false } + + val onResendFlow = createResendFlow( + cryptoGenerator = cryptoGenerator, + prefix = "email.send_email", + io = requestEmailTfa( + args.env, + args.email, + args.password, + ).effectTap { + val model = ToastMessage( + title = translate(Res.strings.requested_verification_email), + ) + message(model) + }, + ) + + return combine( + codeValidatedFlow, + actionExecutor.isExecutingFlow, + rememberMeSink + .map { checked -> + LoginTwofaState.Email.RememberMe( + checked = checked, + onChange = rememberMeSink::value::set, + ) + }, + onResendFlow, + ) { codeValidated, isLoading, rememberMe, onResend -> + val canLogin = codeValidated is Validated.Success && + !isLoading + val primaryAction = LoginTwofaState.PrimaryAction( + text = translate(Res.strings.continue_), + icon = if (isLoading) { + LoginTwofaState.PrimaryAction.Icon.LOADING + } else { + LoginTwofaState.PrimaryAction.Icon.LOGIN + }, + onClick = if (canLogin) { + // lambda + { + val io = addAccount( + args.accountId, + args.env, + ServerTwoFactorToken( + token = codeValidated.model, + provider = com.artemchep.keyguard.provider.bitwarden.model.TwoFactorProviderType.Email, + remember = rememberMe.checked, + ), + args.clientSecret, + args.email, + args.password, + ).effectTap { + transmitter(Unit) + } + actionExecutor.execute(io) + } + } else { + null + }, + ) + LoginTwofaState.Email( + email = provider.email, + emailResend = onResend, + code = TextFieldModel2.of( + state = codeState, + validated = codeValidated, + ), + rememberMe = rememberMe, + primaryAction = primaryAction, + ) + } +} + +private fun RememberStateFlowScope.createStateFlowForDuo( + actionExecutor: LoadingTask, + addAccount: AddAccount, + args: LoginTwofaRoute.Args, + provider: TwoFactorProviderArgument.Duo, + transmitter: RouteResultTransmitter, +): Flow = createStateFlowForDuo( + actionExecutor = actionExecutor, + addAccount = addAccount, + args = args, + providerHost = provider.host, + providerSignature = provider.signature, + providerType = TwoFactorProviderType.Duo, + transmitter = transmitter, +) + +private fun RememberStateFlowScope.createStateFlowForOrganizationDuo( + actionExecutor: LoadingTask, + addAccount: AddAccount, + args: LoginTwofaRoute.Args, + provider: TwoFactorProviderArgument.OrganizationDuo, + transmitter: RouteResultTransmitter, +): Flow = createStateFlowForDuo( + actionExecutor = actionExecutor, + addAccount = addAccount, + args = args, + providerHost = provider.host, + providerSignature = provider.signature, + providerType = TwoFactorProviderType.OrganizationDuo, + transmitter = transmitter, +) + +private fun RememberStateFlowScope.createStateFlowForDuo( + actionExecutor: LoadingTask, + addAccount: AddAccount, + args: LoginTwofaRoute.Args, + providerHost: String?, + providerSignature: String?, + providerType: TwoFactorProviderType, + transmitter: RouteResultTransmitter, +): Flow { + val authUrl = kotlin.run { + val url = args.env.buildWebVaultUrl() + URLBuilder(Url(url)).apply { + appendPathSegments("duo-connector.html") + parameters.apply { + if (providerHost != null) append("host", providerHost) + if (providerSignature != null) append("request", providerSignature) + } + }.build() + } + + val rememberMeSink = mutablePersistedFlow("remember_me") { false } + + fun onComplete( + result: Either, + ) { + result.fold( + ifLeft = { e -> + val text = e.localizedMessage ?: e.message + val msg = ToastMessage( + type = ToastMessage.Type.ERROR, + title = text.orEmpty(), + ) + message(msg) + }, + ifRight = { token -> + val io = addAccount( + args.accountId, + args.env, + ServerTwoFactorToken( + token = token, + provider = providerType, + remember = rememberMeSink.value, + ), + args.clientSecret, + args.email, + args.password, + ).effectTap { + transmitter(Unit) + } + actionExecutor.execute(io) + }, + ) + } + + return combine( + actionExecutor.isExecutingFlow, + rememberMeSink + .map { checked -> + LoginTwofaState.Duo.RememberMe( + checked = checked, + onChange = rememberMeSink::value::set, + ) + }, + ) { isLoading, rememberMe -> + val canLogin = !isLoading + LoginTwofaState.Duo( + authUrl = authUrl.toString(), + error = null, + rememberMe = rememberMe, + onComplete = ::onComplete + .takeIf { canLogin }, + ) + } +} + +private fun RememberStateFlowScope.createStateFlowForFido2WebAuthn( + cryptoGenerator: CryptoGenerator, + base64Service: Base64Service, + deeplinkService: DeeplinkService, + json: Json, + actionExecutor: LoadingTask, + addAccount: AddAccount, + args: LoginTwofaRoute.Args, + provider: TwoFactorProviderArgument.Fido2WebAuthn, + transmitter: RouteResultTransmitter, +): Flow { + val errorSink = mutablePersistedFlow("fido2webauthn.error") { "" } + + val callbackUrl = "keyguard://webauthn-callback" + val callbackUrls = setOf( + callbackUrl, + // Bitwarden hardcoded a callback URL internally, so we have to + // check for that schema too, to support older installations. + // https://github.com/bitwarden/clients/pull/6469 + "bitwarden://webauthn-callback", + ) + val authUrl = kotlin.run { + val url = args.env.buildWebVaultUrl() + val data = buildJsonObject { + val responseData = provider.json + ?.let { json.encodeToString(it) } + if (responseData != null) { + put("data", responseData) + } + put("callbackUri", callbackUrl) + put("headerText", translate(Res.strings.fido2webauthn_web_title)) + put("btnText", translate(Res.strings.fido2webauthn_action_go_title)) + put("btnReturnText", translate(Res.strings.fido2webauthn_action_return_title)) + } + .let { json.encodeToString(it) } + .let { base64Service.encodeToString(it) } + URLBuilder(Url(url)).apply { + appendPathSegments("webauthn-mobile-connector.html") + parameters.apply { + append("data", data) + append("parent", callbackUrl) + append("v", "2") + } + }.build() + } + + val rememberMeSink = mutablePersistedFlow("remember_me") { false } + + fun onComplete( + result: Either, + ) { + result.fold( + ifLeft = { e -> + val text = e.localizedMessage ?: e.message + val msg = ToastMessage( + type = ToastMessage.Type.ERROR, + title = text.orEmpty(), + ) + message(msg) + }, + ifRight = { token -> + val io = addAccount( + args.accountId, + args.env, + ServerTwoFactorToken( + token = token, + provider = TwoFactorProviderType.Fido2WebAuthn, + remember = rememberMeSink.value, + ), + args.clientSecret, + args.email, + args.password, + ).effectTap { + transmitter(Unit) + } + actionExecutor.execute(io) + }, + ) + } + + fun onBrowser( + ) { + val intent = NavigationIntent.NavigateToBrowser(authUrl.toString()) + navigate(intent) + } + + return combine( + deeplinkService + .getFlow("webauthn-callback") + .onEach { data -> + if (data != null) { + val result = data.right() + onComplete(result) + } + }, + errorSink + .map { error -> error.takeIf { it.isNotBlank() } }, + actionExecutor.isExecutingFlow, + rememberMeSink + .map { checked -> + LoginTwofaState.Fido2WebAuthn.RememberMe( + checked = checked, + onChange = rememberMeSink::value::set, + ) + }, + ) { _, error, isLoading, rememberMe -> + val canLogin = !isLoading + LoginTwofaState.Fido2WebAuthn( + authUrl = authUrl.toString(), + callbackUrls = callbackUrls, + error = error, + rememberMe = rememberMe, + onBrowser = ::onBrowser + .takeIf { canLogin }, + onComplete = ::onComplete + .takeIf { canLogin }, + ) + } +} + +private fun RememberStateFlowScope.createResendFlow( + cryptoGenerator: CryptoGenerator, + prefix: String, + io: IO, + resendDelay: Duration = with(Duration) { 30L.seconds }, +): Flow<(() -> Unit)?> = kotlin.run { + // A flow of time, past which a user can manually + // resend a request. + val canResendAtSink = mutablePersistedFlow("$prefix.resend_at") { + Instant.DISTANT_FUTURE + } + + val targetSink = mutablePersistedFlow("$prefix.target") { + cryptoGenerator.uuid() + } + val currentSink = mutablePersistedFlow("$prefix.current") { "" } + combine( + targetSink, + currentSink, + ) { send, sent -> + send.takeUnless { it == sent } + }.filterNotNull() + .onEach { + io + .effectTap { + canResendAtSink.value = Clock.System.now() + resendDelay + } + .launchIn(this) + } + .onEach { key -> + // Remember the key, so next time when we resubscribe + // we do not send the email request again. + currentSink.value = key + } + .launchIn(screenScope) + + val resend: () -> Unit = { + targetSink.value = cryptoGenerator.uuid() + } + + canResendAtSink + .flatMapLatest { at -> + val dt = at - Clock.System.now() + if (dt.isPositive()) { + flow { + emit(false) + delay(dt) + emit(true) + } + } else { + flowOf(true) + } + } + .distinctUntilChanged() + .map { canResend -> + resend.takeIf { canResend } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/login/otp/TwoFactorProviderItem.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/login/otp/TwoFactorProviderItem.kt new file mode 100644 index 00000000..6ebfab85 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/login/otp/TwoFactorProviderItem.kt @@ -0,0 +1,8 @@ +package com.artemchep.keyguard.feature.auth.login.otp + +data class TwoFactorProviderItem( + val key: String, + val title: String, + val checked: Boolean, + val onClick: (() -> Unit)? = null, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/login/otp/TwoFactorState.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/login/otp/TwoFactorState.kt new file mode 100644 index 00000000..bc2aeaec --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/auth/login/otp/TwoFactorState.kt @@ -0,0 +1,9 @@ +package com.artemchep.keyguard.feature.auth.login.otp + +import kotlinx.coroutines.flow.StateFlow + +data class TwoFactorState( + val providers: List = emptyList(), + val loadingState: StateFlow, + val state: LoginTwofaState, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/barcodetype/BarcodeTypeRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/barcodetype/BarcodeTypeRoute.kt new file mode 100644 index 00000000..33f304da --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/barcodetype/BarcodeTypeRoute.kt @@ -0,0 +1,76 @@ +package com.artemchep.keyguard.feature.barcodetype + +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.QrCode +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.common.model.BarcodeImageFormat +import com.artemchep.keyguard.feature.navigation.DialogRoute +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.feature.navigation.state.TranslatorScope +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItemAction +import com.artemchep.keyguard.ui.icons.icon + +data class BarcodeTypeRoute( + val args: Args, +) : DialogRoute { + companion object { + fun showInBarcodeTypeActionOrNull( + translator: TranslatorScope, + data: String, + text: String? = null, + format: BarcodeImageFormat = BarcodeImageFormat.QR_CODE, + single: Boolean = false, + navigate: (NavigationIntent) -> Unit, + ) = if (data.length > 1024) { + null + } else { + showInBarcodeTypeAction( + translator = translator, + data = data, + text = text, + format = format, + single = single, + navigate = navigate, + ) + } + + fun showInBarcodeTypeAction( + translator: TranslatorScope, + data: String, + text: String? = null, + format: BarcodeImageFormat = BarcodeImageFormat.QR_CODE, + single: Boolean = false, + navigate: (NavigationIntent) -> Unit, + ) = FlatItemAction( + leading = icon(Icons.Outlined.QrCode), + title = translator.translate(Res.strings.barcodetype_action_show_in_barcode_title), + onClick = { + val route = BarcodeTypeRoute( + args = Args( + text = text, + data = data, + format = format, + single = single, + ), + ) + val intent = NavigationIntent.NavigateToRoute(route) + navigate(intent) + }, + ) + } + + data class Args( + val text: String?, + val data: String, + val format: BarcodeImageFormat, + val single: Boolean, + ) + + @Composable + override fun Content() { + BarcodeTypeScreen( + args = args, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/barcodetype/BarcodeTypeScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/barcodetype/BarcodeTypeScreen.kt new file mode 100644 index 00000000..e73736b3 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/barcodetype/BarcodeTypeScreen.kt @@ -0,0 +1,231 @@ +package com.artemchep.keyguard.feature.barcodetype + +import androidx.compose.animation.animateContentSize +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.BoxWithConstraints +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.QrCode +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.ImageBitmap +import androidx.compose.ui.platform.LocalDensity +import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.unit.dp +import arrow.core.Either +import com.artemchep.keyguard.common.io.attempt +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.io.handleErrorTap +import com.artemchep.keyguard.common.model.BarcodeImageFormat +import com.artemchep.keyguard.common.model.BarcodeImageRequest +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.model.getOrNull +import com.artemchep.keyguard.common.usecase.GetBarcodeImage +import com.artemchep.keyguard.feature.dialog.Dialog +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatDropdown +import com.artemchep.keyguard.ui.FlatItemTextContent +import com.artemchep.keyguard.ui.KeepScreenOnEffect +import com.artemchep.keyguard.ui.icons.DropdownIcon +import com.artemchep.keyguard.ui.icons.icon +import dev.icerock.moko.resources.compose.stringResource +import org.kodein.di.compose.rememberInstance + +@Composable +fun BarcodeTypeScreen( + args: BarcodeTypeRoute.Args, +) { + val loadableState = produceBarcodeTypeScreenState(args) + BarcodeTypeContent( + args = args, + loadableState = loadableState, + ) +} + +@Composable +private fun BarcodeTypeContent( + args: BarcodeTypeRoute.Args, + loadableState: Loadable, +) { + KeepScreenOnEffect() + + Dialog( + icon = icon(Icons.Outlined.QrCode), + title = { + Text(stringResource(Res.strings.barcodetype_title)) + }, + content = { + Column { + val dropdown = loadableState.getOrNull()?.format?.options.orEmpty() + FlatDropdown( + content = { + FlatItemTextContent( + title = { + val selectedTitle = + loadableState.getOrNull()?.format?.format.orEmpty() + Row( + verticalAlignment = Alignment.CenterVertically, + ) { + Text( + text = selectedTitle, + style = MaterialTheme.typography.titleMedium, + ) + Spacer( + modifier = Modifier + .width(8.dp), + ) + DropdownIcon() + } + }, + ) + }, + dropdown = dropdown, + ) + Spacer( + modifier = Modifier + .height(8.dp), + ) + + val imageRequest = loadableState.getOrNull()?.request + val imageAspectRatio = imageRequest?.format?.aspectRatio() ?: 1f + BoxWithConstraints( + modifier = Modifier + .padding(horizontal = 8.dp) + .clip(MaterialTheme.shapes.medium) + .fillMaxWidth(), + ) { + val density = LocalDensity.current + val imageWidth = maxWidth.value.times(density.density).toInt() + val imageHeight = imageWidth + .div(imageAspectRatio) + .toInt() + BarcodeImage( + modifier = Modifier + .fillMaxWidth() + .animateContentSize(), + imageModel = { + imageRequest + ?.copy( + size = BarcodeImageRequest.Size( + width = imageWidth, + height = imageHeight, + ), + ) + }, + ) + } + + if (args.text != null) { + Spacer( + modifier = Modifier + .height(16.dp), + ) + Text( + modifier = Modifier + .padding(horizontal = 16.dp), + text = args.text, + ) + } + } + }, + actions = { + val updatedOnClose by rememberUpdatedState(loadableState.getOrNull()?.onClose) + TextButton( + enabled = updatedOnClose != null, + onClick = { + updatedOnClose?.invoke() + }, + ) { + Text(stringResource(Res.strings.close)) + } + }, + ) +} + +@Composable +private fun BarcodeImage( + imageModel: () -> BarcodeImageRequest?, + modifier: Modifier, +) { + val imageState = remember { + mutableStateOf?>(null) + } + + val getBarcodeImage: GetBarcodeImage by rememberInstance() + LaunchedEffect( + getBarcodeImage, + imageModel, + ) { + val image = imageModel() + ?.let(getBarcodeImage) + ?.handleErrorTap { + it.printStackTrace() + } + ?.attempt() + ?.bind() + imageState.value = image + } + + BoxWithConstraints( + modifier = modifier, + ) { + val image = imageState.value + ?: return@BoxWithConstraints + image.fold( + ifLeft = { e -> + Text( + modifier = Modifier + .padding(8.dp), + text = e.localizedMessage, + color = MaterialTheme.colorScheme.error, + style = MaterialTheme.typography.bodyMedium, + maxLines = 6, + overflow = TextOverflow.Ellipsis, + ) + }, + ifRight = { img -> + Image( + bitmap = img, + contentDescription = null, + ) + }, + ) + } +} + +private fun BarcodeImageFormat.aspectRatio() = when (this) { + BarcodeImageFormat.AZTEC -> 1f // square + BarcodeImageFormat.CODABAR -> 2f // bar + BarcodeImageFormat.CODE_39 -> 2f + BarcodeImageFormat.CODE_93 -> 2f + BarcodeImageFormat.CODE_128 -> 2f + BarcodeImageFormat.DATA_MATRIX -> 1f + BarcodeImageFormat.EAN_8 -> null + BarcodeImageFormat.EAN_13 -> null + BarcodeImageFormat.ITF -> null + BarcodeImageFormat.MAXICODE -> null + BarcodeImageFormat.PDF_417 -> 2f + BarcodeImageFormat.QR_CODE -> 1f + BarcodeImageFormat.RSS_14 -> null + BarcodeImageFormat.RSS_EXPANDED -> null + BarcodeImageFormat.UPC_A -> null + BarcodeImageFormat.UPC_E -> null + BarcodeImageFormat.UPC_EAN_EXTENSION -> null +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/barcodetype/BarcodeTypeState.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/barcodetype/BarcodeTypeState.kt new file mode 100644 index 00000000..803c9ef7 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/barcodetype/BarcodeTypeState.kt @@ -0,0 +1,15 @@ +package com.artemchep.keyguard.feature.barcodetype + +import com.artemchep.keyguard.common.model.BarcodeImageRequest +import com.artemchep.keyguard.ui.FlatItemAction + +data class BarcodeTypeState( + val format: Format, + val request: BarcodeImageRequest, + val onClose: (() -> Unit)? = null, +) { + data class Format( + val format: String, + val options: List, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/barcodetype/BarcodeTypeStateProducer.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/barcodetype/BarcodeTypeStateProducer.kt new file mode 100644 index 00000000..933162a7 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/barcodetype/BarcodeTypeStateProducer.kt @@ -0,0 +1,105 @@ +package com.artemchep.keyguard.feature.barcodetype + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.common.model.BarcodeImageFormat +import com.artemchep.keyguard.common.model.BarcodeImageRequest +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.feature.navigation.state.PersistedStorage +import com.artemchep.keyguard.feature.navigation.state.navigatePopSelf +import com.artemchep.keyguard.feature.navigation.state.produceScreenState +import com.artemchep.keyguard.ui.FlatItemAction +import kotlinx.coroutines.flow.map + +@Composable +fun produceBarcodeTypeScreenState( + args: BarcodeTypeRoute.Args, +): Loadable = produceScreenState( + key = "barcodetype", + args = arrayOf( + args, + ), + initial = Loadable.Loading, +) { + fun onClose() { + navigatePopSelf() + } + + val storage = kotlin.run { + val disk = loadDiskHandle("barcodetype") + PersistedStorage.InDisk(disk) + } + val formatDefault = args.format + val formatSink = mutablePersistedFlow( + key = "format", + storage = if (args.single) { + // Do not save the choice on disk, if we + // could not change anything. + PersistedStorage.InMemory + } else { + storage + }, + ) { formatDefault.name } + val formatFlow = formatSink + .map { + kotlin.runCatching { + BarcodeImageFormat.valueOf(it) + }.getOrDefault(formatDefault) + } + + val formatList = if (args.single) { + listOf(formatDefault) + } else { + listOf( + BarcodeImageFormat.QR_CODE, + BarcodeImageFormat.CODE_39, + BarcodeImageFormat.CODE_93, + BarcodeImageFormat.CODE_128, + BarcodeImageFormat.PDF_417, + ) + } + val formatActions = formatList + .map { format -> + FlatItemAction( + title = format.formatTitle(), + onClick = { + formatSink.value = format.name + }, + ) + } + formatFlow + .map { format -> + val request = BarcodeImageRequest( + format = format, + data = args.data, + ) + val state = BarcodeTypeState( + request = request, + format = BarcodeTypeState.Format( + format = format.formatTitle(), + options = formatActions, + ), + onClose = ::onClose, + ) + Loadable.Ok(state) + } +} + +private fun BarcodeImageFormat.formatTitle() = when (this) { + BarcodeImageFormat.AZTEC -> "Aztec 2D" + BarcodeImageFormat.CODABAR -> "CODABAR 1D" + BarcodeImageFormat.CODE_39 -> "Code 39 1D" + BarcodeImageFormat.CODE_93 -> "Code 93 1D" + BarcodeImageFormat.CODE_128 -> "Code 128 1D" + BarcodeImageFormat.DATA_MATRIX -> "Data Matrix 2D" + BarcodeImageFormat.EAN_8 -> "EAN-8 1D" + BarcodeImageFormat.EAN_13 -> "EAN-13 1D" + BarcodeImageFormat.ITF -> "ITF (Interleaved Two of Five) 1D" + BarcodeImageFormat.MAXICODE -> "MaxiCode 2D" + BarcodeImageFormat.PDF_417 -> "PDF417" + BarcodeImageFormat.QR_CODE -> "QR Code" + BarcodeImageFormat.RSS_14 -> "RSS 14" + BarcodeImageFormat.RSS_EXPANDED -> "RSS EXPANDED" + BarcodeImageFormat.UPC_A -> "UPC-A 1D" + BarcodeImageFormat.UPC_E -> "UPC-E 1D" + BarcodeImageFormat.UPC_EAN_EXTENSION -> "UPC/EAN extension format" +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/biometric/BiometricPromptEffect.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/biometric/BiometricPromptEffect.kt new file mode 100644 index 00000000..ce1bec13 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/biometric/BiometricPromptEffect.kt @@ -0,0 +1,10 @@ +package com.artemchep.keyguard.feature.biometric + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.common.model.PureBiometricAuthPrompt +import kotlinx.coroutines.flow.Flow + +@Composable +expect fun BiometricPromptEffect( + flow: Flow, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/changepassword/ChangePasswordRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/changepassword/ChangePasswordRoute.kt new file mode 100644 index 00000000..6b69321e --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/changepassword/ChangePasswordRoute.kt @@ -0,0 +1,11 @@ +package com.artemchep.keyguard.feature.changepassword + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.navigation.Route + +object ChangePasswordRoute : Route { + @Composable + override fun Content() { + ChangePasswordScreen() + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/changepassword/ChangePasswordScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/changepassword/ChangePasswordScreen.kt new file mode 100644 index 00000000..7d4b0618 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/changepassword/ChangePasswordScreen.kt @@ -0,0 +1,286 @@ +package com.artemchep.keyguard.feature.changepassword + +import androidx.compose.animation.Crossfade +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Info +import androidx.compose.material.icons.outlined.Save +import androidx.compose.material3.Checkbox +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.runtime.Composable +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.ExperimentalComposeUiApi +import androidx.compose.ui.Modifier +import androidx.compose.ui.input.nestedscroll.nestedScroll +import androidx.compose.ui.unit.dp +import arrow.core.partially1 +import com.artemchep.keyguard.common.model.fold +import com.artemchep.keyguard.feature.biometric.BiometricPromptEffect +import com.artemchep.keyguard.feature.navigation.NavigationIcon +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.AutofillButton +import com.artemchep.keyguard.ui.DefaultFab +import com.artemchep.keyguard.ui.FabState +import com.artemchep.keyguard.ui.FlatItemLayout +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.PasswordFlatTextField +import com.artemchep.keyguard.ui.ScaffoldColumn +import com.artemchep.keyguard.ui.skeleton.SkeletonCheckbox +import com.artemchep.keyguard.ui.skeleton.SkeletonText +import com.artemchep.keyguard.ui.skeleton.SkeletonTextField +import com.artemchep.keyguard.ui.theme.Dimens +import com.artemchep.keyguard.ui.theme.combineAlpha +import com.artemchep.keyguard.ui.toolbar.LargeToolbar +import dev.icerock.moko.resources.compose.stringResource + +@Composable +fun ChangePasswordScreen() { + val loadableState = changePasswordState() + loadableState.fold( + ifLoading = { + ChangePasswordSkeleton() + }, + ifOk = { state -> + ChangePasswordScreen( + state = state, + ) + }, + ) +} + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun ChangePasswordSkeleton() { + val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior() + ScaffoldColumn( + modifier = Modifier + .nestedScroll(scrollBehavior.nestedScrollConnection), + topAppBarScrollBehavior = scrollBehavior, + topBar = { + LargeToolbar( + title = { + Text( + text = stringResource(Res.strings.changepassword_header_title), + ) + }, + navigationIcon = { + NavigationIcon() + }, + scrollBehavior = scrollBehavior, + ) + }, + ) { + SkeletonTextField( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = Dimens.horizontalPadding), + ) + Spacer(Modifier.height(8.dp)) + SkeletonTextField( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = Dimens.horizontalPadding), + ) + Spacer(Modifier.height(8.dp)) + FlatItemLayout( + leading = { + SkeletonCheckbox( + clickable = false, + ) + }, + content = { + SkeletonText( + modifier = Modifier + .fillMaxWidth(0.3f), + style = MaterialTheme.typography.bodyMedium, + ) + }, + enabled = true, + ) + Spacer( + modifier = Modifier + .height(32.dp), + ) + Spacer( + modifier = Modifier + .height(24.dp), + ) + Spacer( + modifier = Modifier + .height(16.dp), + ) + SkeletonText( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding) + .fillMaxWidth(), + style = MaterialTheme.typography.bodyMedium, + emphasis = MediumEmphasisAlpha, + ) + SkeletonText( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding) + .fillMaxWidth(), + style = MaterialTheme.typography.bodyMedium, + emphasis = MediumEmphasisAlpha, + ) + SkeletonText( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding) + .fillMaxWidth(0.6f), + style = MaterialTheme.typography.bodyMedium, + emphasis = MediumEmphasisAlpha, + ) + } +} + +@OptIn(ExperimentalMaterial3Api::class, ExperimentalComposeUiApi::class) +@Composable +fun ChangePasswordScreen( + state: ChangePasswordState, +) { + BiometricPromptEffect(state.sideEffects.showBiometricPromptFlow) + + val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior() + ScaffoldColumn( + modifier = Modifier + .nestedScroll(scrollBehavior.nestedScrollConnection), + topAppBarScrollBehavior = scrollBehavior, + topBar = { + LargeToolbar( + title = { + Text( + text = stringResource(Res.strings.changepassword_header_title), + ) + }, + navigationIcon = { + NavigationIcon() + }, + scrollBehavior = scrollBehavior, + ) + }, + floatingActionState = run { + val fabOnClick = state.onConfirm + val fabState = if (fabOnClick != null) { + FabState( + onClick = fabOnClick, + model = null, + ) + } else { + null + } + rememberUpdatedState(newValue = fabState) + }, + floatingActionButton = { + DefaultFab( + icon = { + Crossfade( + targetState = state.isLoading, + ) { isLoading -> + if (isLoading) { + CircularProgressIndicator( + color = LocalContentColor.current, + ) + } else { + Icon( + imageVector = Icons.Outlined.Save, + contentDescription = null, + ) + } + } + }, + text = { + Text( + text = stringResource(Res.strings.changepassword_change_password_button), + ) + }, + ) + }, + ) { + PasswordFlatTextField( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding), + value = state.password.current, + label = stringResource(Res.strings.current_password), + ) + Spacer(Modifier.height(8.dp)) + PasswordFlatTextField( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding), + value = state.password.new, + label = stringResource(Res.strings.new_password), + trailing = { + AutofillButton( + key = "password", + password = true, + onValueChange = state.password.new.onChange, + ) + }, + ) + if (state.biometric != null) { + Spacer(Modifier.height(8.dp)) + FlatItemLayout( + leading = { + Checkbox( + enabled = state.biometric.onChange != null, + checked = state.biometric.checked, + onCheckedChange = { + state.biometric.onChange?.invoke(it) + }, + ) + }, + content = { + Text( + text = stringResource(Res.strings.changepassword_biometric_auth_checkbox), + style = MaterialTheme.typography.bodyMedium, + ) + }, + onClick = state.biometric.onChange?.partially1(!state.biometric.checked), + ) + } + Spacer( + modifier = Modifier + .height(32.dp), + ) + Icon( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding), + imageVector = Icons.Outlined.Info, + contentDescription = null, + tint = LocalContentColor.current + .combineAlpha(alpha = MediumEmphasisAlpha), + ) + Spacer( + modifier = Modifier + .height(16.dp), + ) + Text( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding), + text = stringResource(Res.strings.changepassword_disclaimer_local_note), + style = MaterialTheme.typography.bodyMedium, + color = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + ) + Spacer( + modifier = Modifier + .height(16.dp), + ) + Text( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding), + text = stringResource(Res.strings.changepassword_disclaimer_abuse_note), + style = MaterialTheme.typography.bodyMedium, + color = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/changepassword/ChangePasswordState.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/changepassword/ChangePasswordState.kt new file mode 100644 index 00000000..a766cfb5 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/changepassword/ChangePasswordState.kt @@ -0,0 +1,42 @@ +package com.artemchep.keyguard.feature.changepassword + +import androidx.compose.runtime.Immutable +import arrow.optics.optics +import com.artemchep.keyguard.common.model.BiometricAuthPrompt +import com.artemchep.keyguard.feature.auth.common.TextFieldModel2 +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.emptyFlow + +data class ChangePasswordState( + val sideEffects: SideEffects = SideEffects(), + val password: Password, + val biometric: Biometric?, + val isLoading: Boolean = false, + val onConfirm: (() -> Unit)? = null, +) { + @Immutable + @optics + data class Password( + val current: TextFieldModel2, + val new: TextFieldModel2, + ) { + companion object + } + + @Immutable + @optics + data class Biometric( + val checked: Boolean = false, + val onChange: ((Boolean) -> Unit)? = null, + ) { + companion object + } + + @Immutable + @optics + data class SideEffects( + val showBiometricPromptFlow: Flow = emptyFlow(), + ) { + companion object + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/changepassword/ChangePasswordStateProducer.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/changepassword/ChangePasswordStateProducer.kt new file mode 100644 index 00000000..d73b2075 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/changepassword/ChangePasswordStateProducer.kt @@ -0,0 +1,215 @@ +package com.artemchep.keyguard.feature.changepassword + +import androidx.compose.runtime.Composable +import arrow.core.identity +import arrow.core.partially1 +import com.artemchep.keyguard.common.io.effectTap +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.model.BiometricAuthPrompt +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.model.ToastMessage +import com.artemchep.keyguard.common.model.VaultState +import com.artemchep.keyguard.common.usecase.UnlockUseCase +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.common.util.flow.EventFlow +import com.artemchep.keyguard.feature.auth.common.TextFieldModel2 +import com.artemchep.keyguard.feature.auth.common.util.validatedPassword +import com.artemchep.keyguard.feature.localization.TextHolder +import com.artemchep.keyguard.feature.navigation.state.RememberStateFlowScope +import com.artemchep.keyguard.feature.navigation.state.produceScreenState +import com.artemchep.keyguard.res.Res +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.flatMapLatest +import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.flow.map +import org.kodein.di.compose.localDI +import org.kodein.di.direct +import org.kodein.di.instance + +private const val KEY_PASSWORD_OLD = "password.old" +private const val KEY_PASSWORD_NEW = "password.new" + +private const val KEY_BIOMETRIC_ENABLED = "biometric.enabled" + +@Composable +fun changePasswordState(): Loadable = with(localDI().direct) { + changePasswordState( + unlockUseCase = instance(), + windowCoroutineScope = instance(), + ) +} + +@Composable +fun changePasswordState( + unlockUseCase: UnlockUseCase, + windowCoroutineScope: WindowCoroutineScope, +): Loadable = produceScreenState( + key = "change_password", + initial = Loadable.Loading, + args = arrayOf( + unlockUseCase, + ), +) { + val biometricPromptSink = EventFlow() + + val passwordOldSink = mutablePersistedFlow(KEY_PASSWORD_OLD) { "" } + val passwordOldState = mutableComposeState(passwordOldSink) + + val passwordNewSink = mutablePersistedFlow(KEY_PASSWORD_NEW) { "" } + val passwordNewState = mutableComposeState(passwordNewSink) + + val fn = unlockUseCase() + .map { vaultState -> + when (vaultState) { + is VaultState.Main -> ah( + state = vaultState, + biometricPromptSink = biometricPromptSink, + windowCoroutineScope = windowCoroutineScope, + ) + + else -> null + } + } + + val biometricAvailableFlow = fn + .map { it?.changePasswordWithBiometric != null } + .distinctUntilChanged() + val biometricWasEnabled = true + val biometricEnabledSink = mutablePersistedFlow(KEY_BIOMETRIC_ENABLED) { + biometricWasEnabled + } + + val validatedPasswordFlow = passwordOldSink + .validatedPassword(this) + val validatedPasswordNewFlow = passwordNewSink + .validatedPassword(this) + + val passwordFlow = combine( + validatedPasswordFlow, + validatedPasswordNewFlow, + ) { + validatedPassword, + validatedPasswordNew, + -> + ChangePasswordState.Password( + current = TextFieldModel2.of( + state = passwordOldState, + validated = validatedPassword, + ), + new = TextFieldModel2.of( + state = passwordNewState, + validated = validatedPasswordNew, + ), + ) + } + + val biometricFlow = biometricAvailableFlow + .flatMapLatest { available -> + if (available) { + biometricEnabledSink + .map { enabled -> + ChangePasswordState.Biometric( + checked = enabled, + onChange = biometricEnabledSink::value::set, + ) + } + } else { + flowOf(null) + } + } + + combine( + passwordFlow, + biometricFlow, + fn, + ) { password, biometric, f -> + val isValid = password.current.error == null && + password.current.text.isNotEmpty() && + password.new.error == null && + password.new.text.isNotEmpty() + val onConfirm = if (isValid && f != null) { + if (biometric?.checked == true) { + f.changePasswordWithBiometric + } else { + f.changePassword + } + ?.partially1(password.current.text) + ?.partially1(password.new.text) + } else { + null + } + val state = ChangePasswordState( + sideEffects = ChangePasswordState.SideEffects( + showBiometricPromptFlow = biometricPromptSink, + ), + password = password, + biometric = biometric, + onConfirm = onConfirm, + ) + Loadable.Ok(state) + } +} + +private fun RememberStateFlowScope.ah( + state: VaultState.Main, + biometricPromptSink: EventFlow, + windowCoroutineScope: WindowCoroutineScope, +) = Fn( + changePassword = { currentPassword, newPassword -> + val io = state.changePassword.withMasterPassword + .getCreateIo(currentPassword, newPassword) + .effectTap { + val msg = ToastMessage( + title = "Changed the password", + type = ToastMessage.Type.SUCCESS, + ) + message(msg) + } + io.launchIn(windowCoroutineScope) + }, + changePasswordWithBiometric = if (state.changePassword.withMasterPasswordAndBiometric != null) { + lambda@{ currentPassword, newPassword -> + val cipher = state.changePassword.withMasterPasswordAndBiometric.getCipher() + .fold( + ifLeft = { e -> + message(e) + return@lambda + }, + ifRight = ::identity, + ) + val prompt = BiometricAuthPrompt( + title = TextHolder.Res(Res.strings.changepassword_biometric_auth_confirm_title), + cipher = cipher, + onComplete = { result -> + result.fold( + ifLeft = { e -> + message(e) + }, + ifRight = { + val io = state + .changePassword.withMasterPasswordAndBiometric + .getCreateIo(currentPassword, newPassword) + .effectTap { + val msg = ToastMessage( + title = "Changed the password", + type = ToastMessage.Type.SUCCESS, + ) + message(msg) + } + io.launchIn(windowCoroutineScope) + }, + ) + }, + ) + biometricPromptSink.emit(prompt) + } + } else { + null + }, +) + +private data class Fn( + val changePassword: (String, String) -> Unit, + val changePasswordWithBiometric: ((String, String) -> Unit)?, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/colorpicker/ColorPickerResult.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/colorpicker/ColorPickerResult.kt new file mode 100644 index 00000000..43723827 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/colorpicker/ColorPickerResult.kt @@ -0,0 +1,11 @@ +package com.artemchep.keyguard.feature.colorpicker + +import androidx.compose.ui.graphics.Color + +sealed interface ColorPickerResult { + data object Deny : ColorPickerResult + + data class Confirm( + val color: Color, + ) : ColorPickerResult +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/colorpicker/ColorPickerRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/colorpicker/ColorPickerRoute.kt new file mode 100644 index 00000000..ca5caa05 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/colorpicker/ColorPickerRoute.kt @@ -0,0 +1,44 @@ +package com.artemchep.keyguard.feature.colorpicker + +import androidx.compose.runtime.Composable +import androidx.compose.ui.graphics.Color +import com.artemchep.keyguard.feature.navigation.DialogRouteForResult +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.feature.navigation.RouteResultTransmitter +import com.artemchep.keyguard.feature.navigation.registerRouteResultReceiver +import com.artemchep.keyguard.feature.navigation.state.RememberStateFlowScope + +data class ColorPickerRoute( + val args: Args, +) : DialogRouteForResult { + data class Args( + val color: Color? = null, + ) + + @Composable + override fun Content( + transmitter: RouteResultTransmitter, + ) { + ColorPickerScreen( + args = args, + transmitter = transmitter, + ) + } +} + +inline fun RememberStateFlowScope.createColorPickerDialogIntent( + args: ColorPickerRoute.Args, + noinline onSuccess: (Color) -> Unit, +): NavigationIntent { + val route = registerRouteResultReceiver( + route = ColorPickerRoute( + args = args, + ), + ) { result -> + if (result is ColorPickerResult.Confirm) { + val arg = result.color + onSuccess(arg) + } + } + return NavigationIntent.NavigateToRoute(route) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/colorpicker/ColorPickerScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/colorpicker/ColorPickerScreen.kt new file mode 100644 index 00000000..cd79a660 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/colorpicker/ColorPickerScreen.kt @@ -0,0 +1,166 @@ +package com.artemchep.keyguard.feature.colorpicker + +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ColumnScope +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.sizeIn +import androidx.compose.foundation.lazy.LazyRow +import androidx.compose.foundation.lazy.itemsIndexed +import androidx.compose.foundation.lazy.rememberLazyListState +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Check +import androidx.compose.material.icons.outlined.ColorLens +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.luminance +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.common.model.getOrNull +import com.artemchep.keyguard.feature.dialog.Dialog +import com.artemchep.keyguard.feature.navigation.RouteResultTransmitter +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.icons.icon +import com.artemchep.keyguard.ui.theme.combineAlpha +import com.artemchep.keyguard.ui.theme.isDark +import dev.icerock.moko.resources.compose.stringResource + +@Composable +fun ColorPickerScreen( + args: ColorPickerRoute.Args, + transmitter: RouteResultTransmitter, +) { + val loadableState = produceColorPickerState( + args = args, + transmitter = transmitter, + ) + Dialog( + icon = icon(Icons.Outlined.ColorLens), + title = { + Text(stringResource(Res.strings.colorpicker_title)) + }, + content = { + Column { + val state = loadableState.getOrNull() + ?: return@Column + Content( + state = state, + ) + } + }, + contentScrollable = false, + actions = { + val state = loadableState.getOrNull() + + val updatedOnClose by rememberUpdatedState(state?.onDeny) + val updatedOnOk by rememberUpdatedState(state?.onConfirm) + TextButton( + enabled = updatedOnClose != null, + onClick = { + updatedOnClose?.invoke() + }, + ) { + Text(stringResource(Res.strings.close)) + } + TextButton( + enabled = updatedOnOk != null, + onClick = { + updatedOnOk?.invoke() + }, + ) { + Text(stringResource(Res.strings.ok)) + } + }, + ) +} + +@Composable +private fun ColumnScope.Content( + state: ColorPickerState, +) { + val listState = rememberLazyListState() + LazyRow( + modifier = Modifier + .fillMaxWidth(), + state = listState, + ) { + itemsIndexed(state.content.items) { index, item -> + val backgroundColor = if (MaterialTheme.colorScheme.isDark) { + item.color.dark + } else { + item.color.light + } + val isSelected = state.content.index == index + ColorItem( + modifier = Modifier + .sizeIn( + minWidth = 16.dp, + minHeight = 64.dp, + ), + selected = isSelected, + backgroundColor = backgroundColor, + onClick = item.onClick, + ) + } + } + + LaunchedEffect(Unit) { + val index = state.content.index + ?: return@LaunchedEffect + val finalIndex = index.minus(4).coerceAtLeast(0) + listState.scrollToItem(finalIndex) + } +} + +@Composable +private fun ColorItem( + modifier: Modifier = Modifier, + selected: Boolean, + backgroundColor: Color, + onClick: () -> Unit, +) { + val updatedOnClick by rememberUpdatedState(onClick) + Box( + modifier = modifier + .background(color = backgroundColor) + .clickable { + updatedOnClick.invoke() + }, + ) { + androidx.compose.animation.AnimatedVisibility( + modifier = Modifier + .align(Alignment.Center), + visible = selected, + ) { + val contentColor = + if (backgroundColor.luminance() > 0.5f) Color.Black else Color.White + Box( + modifier = Modifier + .padding(16.dp) + .background( + color = contentColor + .combineAlpha(alpha = 0.09f), + shape = CircleShape, + ), + ) { + Icon( + Icons.Outlined.Check, + contentDescription = null, + tint = contentColor, + ) + } + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/colorpicker/ColorPickerState.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/colorpicker/ColorPickerState.kt new file mode 100644 index 00000000..91916649 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/colorpicker/ColorPickerState.kt @@ -0,0 +1,25 @@ +package com.artemchep.keyguard.feature.colorpicker + +import androidx.compose.runtime.Immutable +import com.artemchep.keyguard.ui.icons.AccentColors +import kotlinx.collections.immutable.ImmutableList + +@Immutable +data class ColorPickerState( + val content: Content, + val onDeny: (() -> Unit)? = null, + val onConfirm: (() -> Unit)? = null, +) { + @Immutable + data class Content( + val index: Int?, + val items: ImmutableList, + ) + + @Immutable + data class Item( + val key: Int, + val color: AccentColors, + val onClick: () -> Unit, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/colorpicker/ColorPickerStateProducer.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/colorpicker/ColorPickerStateProducer.kt new file mode 100644 index 00000000..06d83820 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/colorpicker/ColorPickerStateProducer.kt @@ -0,0 +1,78 @@ +package com.artemchep.keyguard.feature.colorpicker + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.util.hue +import com.artemchep.keyguard.feature.navigation.RouteResultTransmitter +import com.artemchep.keyguard.feature.navigation.state.navigatePopSelf +import com.artemchep.keyguard.feature.navigation.state.produceScreenState +import com.artemchep.keyguard.ui.icons.generateAccentColors +import kotlinx.collections.immutable.toPersistentList +import kotlinx.coroutines.flow.map + +@Composable +fun produceColorPickerState( + args: ColorPickerRoute.Args, + transmitter: RouteResultTransmitter, +): Loadable = produceScreenState( + key = "color_picker", + initial = Loadable.Loading, + args = arrayOf(), +) { + // Give a user a bunch of different colors + // to choose from. This should be enough for + // most of the users. + val length = 64 + + val indexSink = mutablePersistedFlow("index") { + val color = args.color + ?: return@mutablePersistedFlow -1 + val hue = color.hue() + val index = hue / 360f * length + index.toInt() + .rem(length) + } + + val hues = 0 until length + val items = hues + .asSequence() + .map { index -> + val hue = 360f * index.toFloat() / length.toFloat() + generateAccentColors(hue = hue) + } + .mapIndexed { index, colors -> + ColorPickerState.Item( + key = index, + color = colors, + onClick = { + indexSink.value = index + }, + ) + } + .toPersistentList() + + indexSink + .map { index -> + val content = ColorPickerState.Content( + index = index.takeIf { it >= 0 }, + items = items, + ) + val state = ColorPickerState( + content = content, + onDeny = { + transmitter(ColorPickerResult.Deny) + navigatePopSelf() + }, + onConfirm = { + val item = items.getOrNull(index) + ?: return@ColorPickerState + val result = ColorPickerResult.Confirm( + color = item.color.dark, + ) + transmitter(result) + navigatePopSelf() + }, + ) + Loadable.Ok(state) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/ConfirmationResult.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/ConfirmationResult.kt new file mode 100644 index 00000000..31a79cf7 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/ConfirmationResult.kt @@ -0,0 +1,9 @@ +package com.artemchep.keyguard.feature.confirmation + +sealed interface ConfirmationResult { + data object Deny : ConfirmationResult + + data class Confirm( + val data: Map, + ) : ConfirmationResult +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/ConfirmationRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/ConfirmationRoute.kt new file mode 100644 index 00000000..466357b8 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/ConfirmationRoute.kt @@ -0,0 +1,132 @@ +package com.artemchep.keyguard.feature.confirmation + +import androidx.compose.runtime.Composable +import androidx.compose.ui.graphics.vector.ImageVector +import com.artemchep.keyguard.feature.navigation.DialogRouteForResult +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.feature.navigation.RouteResultTransmitter +import com.artemchep.keyguard.feature.navigation.registerRouteResultReceiver +import com.artemchep.keyguard.feature.navigation.state.RememberStateFlowScope + +class ConfirmationRoute( + val args: Args, +) : DialogRouteForResult { + data class Args( + val icon: (@Composable () -> Unit)? = null, + val title: String? = null, + val subtitle: String? = null, + val message: String? = null, + val items: List> = emptyList(), + val docUrl: String? = null, + ) { + sealed interface Item { + val key: String + val value: T + + data class BooleanItem( + override val key: String, + override val value: Boolean = false, + val title: String, + ) : Item + + data class StringItem( + override val key: String, + override val value: String = "", + val title: String, + val hint: String? = null, + val type: Type = Type.Text, + /** + * `true` if the empty value is a valid + * value, `false` otherwise. + */ + val canBeEmpty: Boolean = true, + ) : Item { + enum class Type { + Text, + Token, + Password, + Username, + } + } + + data class EnumItem( + override val key: String, + override val value: String = "", + val items: List, + val docs: Map = emptyMap(), + ) : Item { + data class Item( + val key: String, + val icon: ImageVector? = null, + val title: String, + val text: String? = null, + ) + + data class Doc( + val text: String, + val url: String? = null, + ) + } + } + } + + @Composable + override fun Content( + transmitter: RouteResultTransmitter, + ) { + ConfirmationScreen( + args = args, + transmitter = transmitter, + ) + } +} + +fun RememberStateFlowScope.createConfirmationDialogIntent( + icon: (@Composable () -> Unit)? = null, + title: String? = null, + message: String? = null, + onSuccess: () -> Unit, +): NavigationIntent { + val route = registerRouteResultReceiver( + route = ConfirmationRoute( + args = ConfirmationRoute.Args( + icon = icon, + title = title, + message = message, + ), + ), + ) { result -> + if (result is ConfirmationResult.Confirm) { + onSuccess() + } + } + return NavigationIntent.NavigateToRoute(route) +} + +inline fun RememberStateFlowScope.createConfirmationDialogIntent( + item: ConfirmationRoute.Args.Item, + noinline icon: (@Composable () -> Unit)? = null, + title: String? = null, + message: String? = null, + noinline onSuccess: (T) -> Unit, +): NavigationIntent { + val route = registerRouteResultReceiver( + route = ConfirmationRoute( + args = ConfirmationRoute.Args( + icon = icon, + title = title, + message = message, + items = listOf(item), + ), + ), + ) { result -> + if (result is ConfirmationResult.Confirm) { + val arg = result.data[item.key] + if (arg !is T) { + return@registerRouteResultReceiver + } + onSuccess(arg) + } + } + return NavigationIntent.NavigateToRoute(route) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/ConfirmationScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/ConfirmationScreen.kt new file mode 100644 index 00000000..f49c4545 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/ConfirmationScreen.kt @@ -0,0 +1,397 @@ +package com.artemchep.keyguard.feature.confirmation + +import androidx.compose.animation.animateContentSize +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ExperimentalLayoutApi +import androidx.compose.foundation.layout.FlowRow +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.text.KeyboardOptions +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Info +import androidx.compose.material3.Checkbox +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.Icon +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.LocalTextStyle +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.key +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.input.KeyboardType +import androidx.compose.ui.text.input.PasswordVisualTransformation +import androidx.compose.ui.text.input.VisualTransformation +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.model.getOrNull +import com.artemchep.keyguard.feature.auth.common.VisibilityState +import com.artemchep.keyguard.feature.auth.common.VisibilityToggle +import com.artemchep.keyguard.feature.dialog.Dialog +import com.artemchep.keyguard.feature.navigation.LocalNavigationController +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.feature.navigation.RouteResultTransmitter +import com.artemchep.keyguard.feature.search.filter.component.FilterItemComposable +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.AutofillButton +import com.artemchep.keyguard.ui.ExpandedIfNotEmpty +import com.artemchep.keyguard.ui.ExpandedIfNotEmptyForRow +import com.artemchep.keyguard.ui.FlatItemLayout +import com.artemchep.keyguard.ui.FlatTextField +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.PasswordStrengthBadge +import com.artemchep.keyguard.ui.theme.Dimens +import com.artemchep.keyguard.ui.theme.combineAlpha +import com.artemchep.keyguard.ui.theme.monoFontFamily +import dev.icerock.moko.resources.compose.stringResource + +@Composable +fun ConfirmationScreen( + args: ConfirmationRoute.Args, + transmitter: RouteResultTransmitter, +) { + val state = confirmationState( + args = args, + transmitter = transmitter, + ) + val showContent = args.message != null || args.items.isNotEmpty() + Dialog( + icon = args.icon, + title = if (args.title != null) { + // composable + { + Text( + text = args.title, + ) + if (args.subtitle != null) { + Text( + text = args.subtitle, + style = MaterialTheme.typography.titleSmall, + color = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + ) + } + } + } else { + null + }, + content = if (showContent) { + // composable + { + Column { + val items = state.items.getOrNull().orEmpty() + if (args.message != null) { + Text( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding), + text = args.message, + ) + if (items.isNotEmpty()) { + Spacer(modifier = Modifier.height(16.dp)) + } + } + + Column( + verticalArrangement = Arrangement.spacedBy(8.dp), + ) { + items.forEach { item -> + key(item.key) { + ConfirmationItem( + item = item, + ) + } + } + } + + if (state.items is Loadable.Loading) { + CircularProgressIndicator( + modifier = Modifier + .align(Alignment.CenterHorizontally) + .padding(16.dp), + ) + } + } + } + } else { + null + }, + actions = { + if (args.docUrl != null) { + val updatedNavigationController by rememberUpdatedState(LocalNavigationController.current) + val updatedDocUrl by rememberUpdatedState(args.docUrl) + TextButton( + modifier = Modifier, + onClick = { + val intent = NavigationIntent.NavigateToBrowser(updatedDocUrl) + updatedNavigationController.queue(intent) + }, + ) { + Text( + text = stringResource(Res.strings.uri_action_launch_docs_title), + ) + } + Spacer( + modifier = Modifier + .weight(1f), + ) + } + + val updatedOnDeny by rememberUpdatedState(state.onDeny) + val updatedOnConfirm by rememberUpdatedState(state.onConfirm) + TextButton( + enabled = state.onDeny != null, + onClick = { + updatedOnDeny?.invoke() + }, + ) { + Text(stringResource(Res.strings.cancel)) + } + TextButton( + enabled = state.onConfirm != null, + onClick = { + updatedOnConfirm?.invoke() + }, + ) { + Text(stringResource(Res.strings.ok)) + } + }, + ) +} + +@Composable +private fun ConfirmationItem( + modifier: Modifier = Modifier, + item: ConfirmationState.Item, +) = when (item) { + is ConfirmationState.Item.BooleanItem -> ConfirmationBooleanItem( + modifier = modifier, + item = item, + ) + + is ConfirmationState.Item.StringItem -> ConfirmationStringItem( + modifier = modifier, + item = item, + ) + + is ConfirmationState.Item.EnumItem -> ConfirmationEnumItem( + modifier = modifier, + item = item, + ) +} + +@Composable +private fun ConfirmationBooleanItem( + modifier: Modifier = Modifier, + item: ConfirmationState.Item.BooleanItem, +) { + FlatItemLayout( + modifier = modifier, + leading = { + Checkbox( + checked = item.value, + onCheckedChange = null, + ) + }, + content = { + Text( + text = item.title, + style = MaterialTheme.typography.bodyMedium, + ) + }, + onClick = { + val newValue = !item.value + item.onChange.invoke(newValue) + }, + ) +} + +@Composable +private fun ConfirmationStringItem( + modifier: Modifier = Modifier, + item: ConfirmationState.Item.StringItem, +) { + val visibilityState = remember(item.sensitive) { + VisibilityState( + isVisible = !item.sensitive, + ) + } + FlatTextField( + modifier = modifier + .padding(horizontal = Dimens.horizontalPadding), + label = item.title, + value = item.state, + textStyle = when { + item.monospace -> + TextStyle( + fontFamily = monoFontFamily, + ) + + else -> LocalTextStyle.current + }, + visualTransformation = if (visibilityState.isVisible) { + VisualTransformation.None + } else { + PasswordVisualTransformation() + }, + keyboardOptions = when { + item.password -> + KeyboardOptions( + autoCorrect = false, + keyboardType = KeyboardType.Password, + ) + + else -> KeyboardOptions.Default + }, + singleLine = true, + maxLines = 1, + trailing = { + ExpandedIfNotEmptyForRow( + Unit.takeIf { item.sensitive }, + ) { + VisibilityToggle( + visibilityState = visibilityState, + ) + } + ExpandedIfNotEmptyForRow( + item.generator, + ) { generator -> + val key = when (generator) { + ConfirmationState.Item.StringItem.Generator.Username -> "username" + ConfirmationState.Item.StringItem.Generator.Password -> "password" + } + AutofillButton( + key = key, + username = generator == ConfirmationState.Item.StringItem.Generator.Username, + password = generator == ConfirmationState.Item.StringItem.Generator.Password, + onValueChange = item.state.onChange, + ) + } + }, + content = { + ExpandedIfNotEmpty( + valueOrNull = Unit + .takeIf { + item.value.isNotEmpty() && + item.password && + item.state.error == null + }, + ) { + PasswordStrengthBadge( + modifier = Modifier + .padding( + top = 8.dp, + bottom = 8.dp, + ), + password = item.value, + ) + } + }, + ) +} + +@OptIn(ExperimentalLayoutApi::class) +@Composable +private fun ConfirmationEnumItem( + modifier: Modifier = Modifier, + item: ConfirmationState.Item.EnumItem, +) { + Column( + modifier = modifier, + ) { + FlowRow( + modifier = Modifier + .padding(horizontal = 8.dp), + horizontalArrangement = Arrangement.spacedBy(8.dp), + verticalArrangement = Arrangement.spacedBy(8.dp), + ) { + item.items.forEach { item -> + key(item.key) { + ConfirmationEnumItemItem( + modifier = Modifier, + item = item, + ) + } + } + } + ExpandedIfNotEmpty( + valueOrNull = item.doc, + ) { doc -> + Column { + Spacer( + modifier = Modifier + .height(32.dp), + ) + Icon( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding), + imageVector = Icons.Outlined.Info, + contentDescription = null, + tint = LocalContentColor.current.combineAlpha(alpha = MediumEmphasisAlpha), + ) + Spacer( + modifier = Modifier + .height(16.dp), + ) + Text( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding) + .animateContentSize(), + text = doc.text, + style = MaterialTheme.typography.bodySmall, + color = LocalContentColor.current.combineAlpha(alpha = MediumEmphasisAlpha), + ) + Spacer( + modifier = Modifier + .height(16.dp), + ) + val updatedOnLearnMore by rememberUpdatedState(doc.onLearnMore) + TextButton( + modifier = Modifier + .padding(horizontal = 4.dp), + enabled = updatedOnLearnMore != null, + onClick = { + updatedOnLearnMore?.invoke() + }, + ) { + Text( + text = stringResource(Res.strings.learn_more), + ) + } + } + } + } +} + +@Composable +private fun ConfirmationEnumItemItem( + modifier: Modifier = Modifier, + item: ConfirmationState.Item.EnumItem.Item, +) { + FilterItemComposable( + modifier = modifier, + checked = item.selected, + leading = + if (item.icon != null) { + // composable + { + Icon( + item.icon, + null, + ) + } + } else { + null + }, + title = item.title, + text = item.text, + onClick = item.onClick, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/ConfirmationState.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/ConfirmationState.kt new file mode 100644 index 00000000..70fe2a76 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/ConfirmationState.kt @@ -0,0 +1,70 @@ +package com.artemchep.keyguard.feature.confirmation + +import androidx.compose.ui.graphics.vector.ImageVector +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.feature.auth.common.TextFieldModel2 + +data class ConfirmationState( + val items: Loadable> = Loadable.Loading, + val onDeny: (() -> Unit)? = null, + val onConfirm: (() -> Unit)? = null, +) { + sealed interface Item { + val key: String + val value: Any? + val valid: Boolean + + data class BooleanItem( + override val key: String, + override val value: Boolean, + val title: String, + val onChange: (Boolean) -> Unit, + ) : Item { + override val valid: Boolean + get() = true + } + + data class StringItem( + override val key: String, + override val value: String, + val state: TextFieldModel2, + val title: String, + val sensitive: Boolean, + val monospace: Boolean, + val password: Boolean, + val generator: Generator?, + ) : Item { + override val valid: Boolean + get() = state.error == null + + enum class Generator { + Username, + Password, + } + } + + data class EnumItem( + override val key: String, + override val value: String, + val items: List, + val doc: Doc? = null, + ) : Item { + override val valid: Boolean + get() = value.isNotEmpty() + + data class Item( + val key: String, + val icon: ImageVector? = null, + val title: String, + val text: String? = null, + val selected: Boolean, + val onClick: (() -> Unit)? = null, + ) + + data class Doc( + val text: String, + val onLearnMore: (() -> Unit)?, + ) + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/ConfirmationStateProducer.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/ConfirmationStateProducer.kt new file mode 100644 index 00000000..6a6058d7 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/ConfirmationStateProducer.kt @@ -0,0 +1,173 @@ +package com.artemchep.keyguard.feature.confirmation + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.common.util.flow.combineToList +import com.artemchep.keyguard.feature.auth.common.TextFieldModel2 +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.feature.navigation.RouteResultTransmitter +import com.artemchep.keyguard.feature.navigation.state.navigatePopSelf +import com.artemchep.keyguard.feature.navigation.state.produceScreenState +import com.artemchep.keyguard.res.Res +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.map +import org.kodein.di.compose.localDI +import org.kodein.di.direct +import org.kodein.di.instance + +@Composable +fun confirmationState( + args: ConfirmationRoute.Args, + transmitter: RouteResultTransmitter, +): ConfirmationState = with(localDI().direct) { + confirmationState( + args = args, + transmitter = transmitter, + windowCoroutineScope = instance(), + ) +} + +@Composable +fun confirmationState( + args: ConfirmationRoute.Args, + transmitter: RouteResultTransmitter, + windowCoroutineScope: WindowCoroutineScope, +): ConfirmationState = produceScreenState( + key = "confirmation", + initial = ConfirmationState( + items = if (args.items.isEmpty()) Loadable.Ok(emptyList()) else Loadable.Loading, + ), + args = arrayOf( + windowCoroutineScope, + ), +) { + fun createItemKey(key: String) = "item.$key" + + val itemsFlow = args.items + .map { item -> + val sink = mutablePersistedFlow(createItemKey(item.key)) { + item.value + } + val state = when (item) { + is ConfirmationRoute.Args.Item.BooleanItem -> null + is ConfirmationRoute.Args.Item.StringItem -> + mutableComposeState(sink as MutableStateFlow) + + is ConfirmationRoute.Args.Item.EnumItem -> null + } + sink + .map { value -> + when (item) { + is ConfirmationRoute.Args.Item.BooleanItem -> ConfirmationState.Item.BooleanItem( + key = item.key, + title = item.title, + value = value as Boolean, + onChange = sink::value::set, + ) + + is ConfirmationRoute.Args.Item.StringItem -> { + val fixed = value as String + val error = if (item.canBeEmpty || fixed.isNotBlank()) { + null + } else { + translate(Res.strings.error_must_not_be_blank) + } + val sensitive = + item.type == ConfirmationRoute.Args.Item.StringItem.Type.Password || + item.type == ConfirmationRoute.Args.Item.StringItem.Type.Token + val monospace = + item.type == ConfirmationRoute.Args.Item.StringItem.Type.Password || + item.type == ConfirmationRoute.Args.Item.StringItem.Type.Token + val password = + item.type == ConfirmationRoute.Args.Item.StringItem.Type.Password + val generator = when (item.type) { + ConfirmationRoute.Args.Item.StringItem.Type.Username -> ConfirmationState.Item.StringItem.Generator.Username + ConfirmationRoute.Args.Item.StringItem.Type.Password -> ConfirmationState.Item.StringItem.Generator.Password + ConfirmationRoute.Args.Item.StringItem.Type.Token, + ConfirmationRoute.Args.Item.StringItem.Type.Text, + -> null + } + requireNotNull(state) + val model = TextFieldModel2( + state = state, + text = fixed, + hint = item.hint, + error = error, + onChange = state::value::set, + ) + ConfirmationState.Item.StringItem( + key = item.key, + title = item.title, + sensitive = sensitive, + monospace = monospace, + password = password, + generator = generator, + value = fixed, + state = model, + ) + } + + is ConfirmationRoute.Args.Item.EnumItem -> { + val fixed = value as String + ConfirmationState.Item.EnumItem( + key = item.key, + value = fixed, + items = item.items + .map { el -> + ConfirmationState.Item.EnumItem.Item( + key = el.key, + title = el.title, + text = el.text, + selected = el.key == fixed, + onClick = { + sink.value = el.key + }, + ) + }, + doc = item.docs[fixed] + ?.let { doc -> + ConfirmationState.Item.EnumItem.Doc( + text = doc.text, + onLearnMore = if (doc.url != null) { + // lambda + { + val intent = + NavigationIntent.NavigateToBrowser(doc.url) + navigate(intent) + } + } else { + null + }, + ) + }, + ) + } + } + } + } + .combineToList() + itemsFlow + .map { items -> + val valid = items.all { it.valid } + ConfirmationState( + items = Loadable.Ok(items), + onDeny = { + transmitter(ConfirmationResult.Deny) + navigatePopSelf() + }, + onConfirm = if (valid) { + // lambda + { + val data = items + .associate { it.key to it.value } + val result = ConfirmationResult.Confirm(data) + transmitter(result) + navigatePopSelf() + } + } else { + null + }, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/elevatedaccess/ElevatedAccessResult.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/elevatedaccess/ElevatedAccessResult.kt new file mode 100644 index 00000000..06936c58 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/elevatedaccess/ElevatedAccessResult.kt @@ -0,0 +1,7 @@ +package com.artemchep.keyguard.feature.confirmation.elevatedaccess + +sealed interface ElevatedAccessResult { + data object Deny : ElevatedAccessResult + + data object Allow : ElevatedAccessResult +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/elevatedaccess/ElevatedAccessRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/elevatedaccess/ElevatedAccessRoute.kt new file mode 100644 index 00000000..3acb31cb --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/elevatedaccess/ElevatedAccessRoute.kt @@ -0,0 +1,33 @@ +package com.artemchep.keyguard.feature.confirmation.elevatedaccess + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.navigation.DialogRouteForResult +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.feature.navigation.RouteResultTransmitter +import com.artemchep.keyguard.feature.navigation.registerRouteResultReceiver +import com.artemchep.keyguard.feature.navigation.state.RememberStateFlowScope + +class ElevatedAccessRoute( +) : DialogRouteForResult { + @Composable + override fun Content( + transmitter: RouteResultTransmitter, + ) { + ElevatedAccessScreen( + transmitter = transmitter, + ) + } +} + +fun RememberStateFlowScope.createElevatedAccessDialogIntent( + onSuccess: () -> Unit, +): NavigationIntent { + val route = registerRouteResultReceiver( + route = ElevatedAccessRoute(), + ) { result -> + if (result is ElevatedAccessResult.Allow) { + onSuccess() + } + } + return NavigationIntent.NavigateToRoute(route) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/elevatedaccess/ElevatedAccessScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/elevatedaccess/ElevatedAccessScreen.kt new file mode 100644 index 00000000..e21fb360 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/elevatedaccess/ElevatedAccessScreen.kt @@ -0,0 +1,211 @@ +package com.artemchep.keyguard.feature.confirmation.elevatedaccess + +import androidx.compose.foundation.BorderStroke +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ColumnScope +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.text.KeyboardActionScope +import androidx.compose.foundation.text.KeyboardActions +import androidx.compose.foundation.text.KeyboardOptions +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Fingerprint +import androidx.compose.material.icons.outlined.Security +import androidx.compose.material3.Icon +import androidx.compose.material3.OutlinedButton +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.testTag +import androidx.compose.ui.text.input.ImeAction +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.feature.biometric.BiometricPromptEffect +import com.artemchep.keyguard.feature.dialog.Dialog +import com.artemchep.keyguard.feature.navigation.RouteResultTransmitter +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.ExpandedIfNotEmpty +import com.artemchep.keyguard.ui.PasswordFlatTextField +import com.artemchep.keyguard.ui.focus.FocusRequester2 +import com.artemchep.keyguard.ui.focus.focusRequester2 +import com.artemchep.keyguard.ui.icons.icon +import com.artemchep.keyguard.ui.skeleton.SkeletonText +import com.artemchep.keyguard.ui.skeleton.SkeletonTextField +import com.artemchep.keyguard.ui.theme.Dimens +import com.artemchep.keyguard.ui.util.DividerColor +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.delay + +@Composable +fun ElevatedAccessScreen( + transmitter: RouteResultTransmitter, +) { + val state = produceElevatedAccessState( + transmitter = transmitter, + ) + val content = state.content + // If we have a content ready, subscribe to biometric + // prompt effects. + if (content is Loadable.Ok) { + BiometricPromptEffect(content.value.sideEffects.showBiometricPromptFlow) + } + + Dialog( + icon = icon(Icons.Outlined.Security), + title = { + Text(stringResource(Res.strings.elevatedaccess_header_title)) + }, + content = { + Column( + modifier = Modifier, + ) { + when (content) { + is Loadable.Loading -> { + ElevatedAccessSkeleton() + } + + is Loadable.Ok -> { + ElevatedAccessContent( + content = content.value, + onConfirm = state.onConfirm, + ) + } + } + } + }, + actions = { + val updatedOnDeny by rememberUpdatedState(state.onDeny) + val updatedOnConfirm by rememberUpdatedState(state.onConfirm) + TextButton( + modifier = Modifier + .testTag("btn:close"), + enabled = state.onDeny != null, + onClick = { + updatedOnDeny?.invoke() + }, + ) { + Text(stringResource(Res.strings.close)) + } + TextButton( + modifier = Modifier + .testTag("btn:go"), + enabled = state.onConfirm != null, + onClick = { + updatedOnConfirm?.invoke() + }, + ) { + Text(stringResource(Res.strings.ok)) + } + }, + ) +} + +@Composable +private fun ColumnScope.ElevatedAccessSkeleton() { + SkeletonText( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding) + .fillMaxWidth(0.8f), + ) + SkeletonText( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding) + .fillMaxWidth(0.6f), + ) + Spacer(modifier = Modifier.height(16.dp)) + SkeletonTextField( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding) + .fillMaxWidth(), + ) +} + +@Composable +private fun ColumnScope.ElevatedAccessContent( + content: ElevatedAccessState.Content, + onConfirm: (() -> Unit)?, +) { + val requester = remember { + FocusRequester2() + } + + val keyboardOnGo: (KeyboardActionScope.() -> Unit)? = + if (onConfirm != null) { + // lambda + { + onConfirm.invoke() + } + } else { + null + } + Text( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding), + text = stringResource(Res.strings.elevatedaccess_header_text), + ) + Spacer(modifier = Modifier.height(16.dp)) + PasswordFlatTextField( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding) + .focusRequester2(requester), + testTag = "field:password", + value = content.password, + keyboardOptions = KeyboardOptions( + imeAction = when { + keyboardOnGo != null -> ImeAction.Go + else -> ImeAction.Default + }, + ), + keyboardActions = KeyboardActions( + onGo = keyboardOnGo, + ), + ) + val onBiometricButtonClick by rememberUpdatedState(content.biometric?.onClick) + ExpandedIfNotEmpty( + modifier = Modifier + .align(Alignment.CenterHorizontally), + valueOrNull = content.biometric, + ) { b -> + OutlinedButton( + modifier = Modifier + .padding( + top = 24.dp, + bottom = 16.dp, // fix shadow clipping + ), + enabled = b.onClick != null, + border = BorderStroke( + width = Dp.Hairline, + color = DividerColor, + ), + onClick = { + onBiometricButtonClick?.invoke() + }, + contentPadding = PaddingValues(16.dp), + ) { + Icon( + imageVector = Icons.Outlined.Fingerprint, + contentDescription = null, + ) + } + } + + LaunchedEffect(requester) { + delay(80L) + // Do not auto-focus the password field if a device has biometric + // available. It causes a weird layout lags when keyboard pops up for + // a split second. + if (onBiometricButtonClick == null) { + requester.requestFocus() + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/elevatedaccess/ElevatedAccessState.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/elevatedaccess/ElevatedAccessState.kt new file mode 100644 index 00000000..19efb8ea --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/elevatedaccess/ElevatedAccessState.kt @@ -0,0 +1,40 @@ +package com.artemchep.keyguard.feature.confirmation.elevatedaccess + +import androidx.compose.runtime.Immutable +import arrow.optics.optics +import com.artemchep.keyguard.common.model.BiometricAuthPrompt +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.feature.auth.common.TextFieldModel2 +import com.artemchep.keyguard.feature.keyguard.unlock.UnlockState +import kotlinx.coroutines.flow.Flow + +@Immutable +data class ElevatedAccessState( + val content: Loadable = Loadable.Loading, + val onDeny: (() -> Unit)? = null, + val onConfirm: (() -> Unit)? = null, +) { + @Immutable + data class Content( + val sideEffects: UnlockState.SideEffects, + val password: TextFieldModel2, + val biometric: Biometric? = null, + val isLoading: Boolean = false, + ) + + @Immutable + @optics + data class Biometric( + val onClick: (() -> Unit)? = null, + ) { + companion object + } + + @Immutable + @optics + data class SideEffects( + val showBiometricPromptFlow: Flow, + ) { + companion object + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/elevatedaccess/ElevatedAccessStateProducer.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/elevatedaccess/ElevatedAccessStateProducer.kt new file mode 100644 index 00000000..ed36d01f --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/elevatedaccess/ElevatedAccessStateProducer.kt @@ -0,0 +1,192 @@ +package com.artemchep.keyguard.feature.confirmation.elevatedaccess + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.common.io.attempt +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.io.effectTap +import com.artemchep.keyguard.common.io.ioRaise +import com.artemchep.keyguard.common.io.toIO +import com.artemchep.keyguard.common.model.BiometricAuthException +import com.artemchep.keyguard.common.model.BiometricAuthPromptSimple +import com.artemchep.keyguard.common.model.BiometricStatus +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.model.PureBiometricAuthPrompt +import com.artemchep.keyguard.common.model.ToastMessage +import com.artemchep.keyguard.common.usecase.BiometricStatusUseCase +import com.artemchep.keyguard.common.usecase.ConfirmAccessByPasswordUseCase +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.common.util.flow.EventFlow +import com.artemchep.keyguard.feature.auth.common.TextFieldModel2 +import com.artemchep.keyguard.feature.auth.common.Validated +import com.artemchep.keyguard.feature.auth.common.util.validatedPassword +import com.artemchep.keyguard.feature.keyguard.unlock.UnlockState +import com.artemchep.keyguard.feature.loading.LoadingTask +import com.artemchep.keyguard.feature.localization.TextHolder +import com.artemchep.keyguard.feature.navigation.RouteResultTransmitter +import com.artemchep.keyguard.feature.navigation.state.navigatePopSelf +import com.artemchep.keyguard.feature.navigation.state.produceScreenState +import com.artemchep.keyguard.res.Res +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.onStart +import kotlinx.coroutines.flow.shareIn +import org.kodein.di.compose.localDI +import org.kodein.di.direct +import org.kodein.di.instance + +private const val DEFAULT_PASSWORD = "" + +@Composable +fun produceElevatedAccessState( + transmitter: RouteResultTransmitter, +): ElevatedAccessState = with(localDI().direct) { + produceElevatedAccessState( + transmitter = transmitter, + biometricStatusUseCase = instance(), + confirmAccessByPasswordUseCase = instance(), + windowCoroutineScope = instance(), + ) +} + +@Composable +fun produceElevatedAccessState( + transmitter: RouteResultTransmitter, + biometricStatusUseCase: BiometricStatusUseCase, + confirmAccessByPasswordUseCase: ConfirmAccessByPasswordUseCase, + windowCoroutineScope: WindowCoroutineScope, +): ElevatedAccessState = produceScreenState( + key = "elevated_access", + initial = ElevatedAccessState(), + args = arrayOf( + windowCoroutineScope, + ), +) { + val executor = screenExecutor() + + val passwordSink = mutablePersistedFlow("password") { DEFAULT_PASSWORD } + val passwordState = mutableComposeState(passwordSink) + + val biometricPrompt = kotlin.run { + val biometricStatus = biometricStatusUseCase() + .toIO() + .attempt() + .bind() + .getOrNull() + when (biometricStatus) { + is BiometricStatus.Available -> { + createPromptOrNull( + executor = executor, + fn = { + navigatePopSelf() + transmitter(ElevatedAccessResult.Allow) + }, + ) + } + + else -> null + } + } + + val biometricPromptSink = EventFlow() + val biometricPromptFlow = biometricPromptSink + // Automatically emit the prompt on first show + // of the user interface. + .onStart { + if (biometricPrompt != null) { + emit(biometricPrompt) + } + } + .shareIn(screenScope, SharingStarted.WhileSubscribed(5000L)) + val biometricStateEnabled = biometricPrompt?.let { prompt -> + ElevatedAccessState.Biometric( + onClick = { + biometricPromptSink.emit(prompt) + }, + ) + } + val biometricStateDisabled = biometricPrompt?.let { prompt -> + ElevatedAccessState.Biometric( + onClick = null, + ) + } + + combine( + passwordSink + .validatedPassword(this), + executor.isExecutingFlow, + ) { validatedPassword, taskExecuting -> + val error = (validatedPassword as? Validated.Failure)?.error + val canCreateVault = error == null && !taskExecuting + val content = ElevatedAccessState.Content( + biometric = if (taskExecuting) { + biometricStateDisabled + } else { + biometricStateEnabled + }, + sideEffects = UnlockState.SideEffects( + showBiometricPromptFlow = biometricPromptFlow, + ), + password = TextFieldModel2.of( + state = passwordState, + validated = validatedPassword, + ), + isLoading = taskExecuting, + ) + ElevatedAccessState( + content = Loadable.Ok(content), + onDeny = { + navigatePopSelf() + transmitter(ElevatedAccessResult.Deny) + }, + onConfirm = if (canCreateVault) { + // lambda + { + val io = confirmAccessByPasswordUseCase(validatedPassword.model) + .effectTap { success -> + if (success) { + navigatePopSelf() + transmitter(ElevatedAccessResult.Allow) + } else { + val message = ToastMessage( + title = translate(Res.strings.error_incorrect_password), + type = ToastMessage.Type.ERROR, + ) + message(message) + } + } + executor.execute(io) + } + } else { + null + }, + ) + } +} + +private fun createPromptOrNull( + executor: LoadingTask, + fn: () -> Unit, +): PureBiometricAuthPrompt = run { + BiometricAuthPromptSimple( + title = TextHolder.Res(Res.strings.elevatedaccess_biometric_auth_confirm_title), + text = TextHolder.Res(Res.strings.elevatedaccess_biometric_auth_confirm_text), + onComplete = { result -> + result.fold( + ifLeft = { exception -> + when (exception.code) { + BiometricAuthException.ERROR_CANCELED, + BiometricAuthException.ERROR_USER_CANCELED, + BiometricAuthException.ERROR_NEGATIVE_BUTTON, + -> return@fold + } + + val io = ioRaise(exception) + executor.execute(io) + }, + ifRight = { + fn.invoke() + }, + ) + }, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/folder/FolderConfirmationResult.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/folder/FolderConfirmationResult.kt new file mode 100644 index 00000000..dc1ef62b --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/folder/FolderConfirmationResult.kt @@ -0,0 +1,11 @@ +package com.artemchep.keyguard.feature.confirmation.folder + +import com.artemchep.keyguard.feature.confirmation.organization.FolderInfo + +sealed interface FolderConfirmationResult { + data object Deny : FolderConfirmationResult + + data class Confirm( + val folderInfo: FolderInfo, + ) : FolderConfirmationResult +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/folder/FolderConfirmationRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/folder/FolderConfirmationRoute.kt new file mode 100644 index 00000000..07e8b6e8 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/folder/FolderConfirmationRoute.kt @@ -0,0 +1,25 @@ +package com.artemchep.keyguard.feature.confirmation.folder + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.common.model.AccountId +import com.artemchep.keyguard.feature.navigation.DialogRouteForResult +import com.artemchep.keyguard.feature.navigation.RouteResultTransmitter + +class FolderConfirmationRoute( + val args: Args, +) : DialogRouteForResult { + data class Args( + val accountId: AccountId, + val blacklistedFolderIds: Set = emptySet(), + ) + + @Composable + override fun Content( + transmitter: RouteResultTransmitter, + ) { + FolderConfirmationScreen( + args = args, + transmitter = transmitter, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/folder/FolderConfirmationScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/folder/FolderConfirmationScreen.kt new file mode 100644 index 00000000..41dd1938 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/folder/FolderConfirmationScreen.kt @@ -0,0 +1,195 @@ +package com.artemchep.keyguard.feature.confirmation.folder + +import androidx.compose.foundation.ExperimentalFoundationApi +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ExperimentalLayoutApi +import androidx.compose.foundation.layout.FlowRow +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Folder +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.Icon +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.key +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.model.getOrNull +import com.artemchep.keyguard.feature.EmptyView +import com.artemchep.keyguard.feature.auth.common.TextFieldModel2 +import com.artemchep.keyguard.feature.dialog.Dialog +import com.artemchep.keyguard.feature.navigation.RouteResultTransmitter +import com.artemchep.keyguard.feature.search.filter.component.FilterItemComposable +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.ExpandedIfNotEmpty +import com.artemchep.keyguard.ui.FlatTextField +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.focus.FocusRequester2 +import com.artemchep.keyguard.ui.focus.focusRequester2 +import com.artemchep.keyguard.ui.icons.icon +import com.artemchep.keyguard.ui.theme.Dimens +import com.artemchep.keyguard.ui.theme.combineAlpha +import com.artemchep.keyguard.ui.util.HorizontalDivider +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.delay + +@OptIn(ExperimentalFoundationApi::class, ExperimentalLayoutApi::class) +@Composable +fun FolderConfirmationScreen( + args: FolderConfirmationRoute.Args, + transmitter: RouteResultTransmitter, +) { + val state = folderConfirmationState( + args = args, + transmitter = transmitter, + ) + Dialog( + icon = icon(Icons.Outlined.Folder), + title = { + Text(stringResource(Res.strings.folderpicker_header_title)) + }, + content = { + val data = state.content.getOrNull() + Column( + modifier = Modifier + .align(Alignment.TopStart), + ) { + FlowRow( + modifier = Modifier + .padding(horizontal = 8.dp), + horizontalArrangement = Arrangement.spacedBy(8.dp), + verticalArrangement = Arrangement.spacedBy(8.dp), + ) { + if (data != null) { + if (data.items.isEmpty()) { + EmptyView() + } + + data.items.forEach { item -> + key(item.key) { + FolderConfirmationItem( + modifier = Modifier, + item = item, + ) + } + } + } + } + val field = state.content.getOrNull()?.new + CreateNewFolder( + field = field, + ) + } + + if (state.content is Loadable.Loading && data == null) { + CircularProgressIndicator( + modifier = Modifier + .align(Alignment.Center) + .padding(16.dp), + ) + } + }, + actions = { + val updatedOnDeny by rememberUpdatedState(state.onDeny) + val updatedOnConfirm by rememberUpdatedState(state.onConfirm) + TextButton( + enabled = state.onDeny != null, + onClick = { + updatedOnDeny?.invoke() + }, + ) { + Text(stringResource(Res.strings.close)) + } + TextButton( + enabled = state.onConfirm != null, + onClick = { + updatedOnConfirm?.invoke() + }, + ) { + Text(stringResource(Res.strings.ok)) + } + }, + ) +} + +@Composable +fun CreateNewFolder( + field: TextFieldModel2?, + modifier: Modifier = Modifier, +) { + ExpandedIfNotEmpty( + modifier = modifier, + valueOrNull = field, + ) { + Column { + val requester = remember { + FocusRequester2() + } + + HorizontalDivider( + modifier = Modifier + .padding(vertical = 16.dp), + ) + Text( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding), + text = stringResource(Res.strings.folderpicker_create_new_folder), + style = MaterialTheme.typography.bodyMedium, + color = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + ) + Spacer(Modifier.height(16.dp)) + FlatTextField( + modifier = Modifier + .padding(horizontal = 8.dp), + fieldModifier = Modifier + .focusRequester2(requester), + value = it, + label = stringResource(Res.strings.generic_name), + ) + + LaunchedEffect(requester) { + delay(80L) + requester.requestFocus() + } + } + } +} + +@Composable +private fun FolderConfirmationItem( + modifier: Modifier = Modifier, + item: FolderConfirmationState.Content.Item, +) { + FilterItemComposable( + modifier = modifier, + checked = item.selected, + leading = + if (item.icon != null) { + // composable + { + Icon( + item.icon, + null, + ) + } + } else { + null + }, + title = item.title, + text = null, + onClick = item.onClick, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/folder/FolderConfirmationState.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/folder/FolderConfirmationState.kt new file mode 100644 index 00000000..df82897b --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/folder/FolderConfirmationState.kt @@ -0,0 +1,24 @@ +package com.artemchep.keyguard.feature.confirmation.folder + +import androidx.compose.ui.graphics.vector.ImageVector +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.feature.auth.common.TextFieldModel2 + +data class FolderConfirmationState( + val content: Loadable = Loadable.Loading, + val onDeny: (() -> Unit)? = null, + val onConfirm: (() -> Unit)? = null, +) { + data class Content( + val items: List, + val new: TextFieldModel2?, + ) { + data class Item( + val key: String, + val title: String, + val selected: Boolean, + val icon: ImageVector? = null, + val onClick: (() -> Unit)?, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/folder/FolderConfirmationStateProducer.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/folder/FolderConfirmationStateProducer.kt new file mode 100644 index 00000000..376e31ce --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/folder/FolderConfirmationStateProducer.kt @@ -0,0 +1,311 @@ +package com.artemchep.keyguard.feature.confirmation.folder + +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Add +import androidx.compose.material.icons.outlined.FolderOff +import androidx.compose.runtime.Composable +import arrow.core.andThen +import arrow.core.partially1 +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.usecase.GetFolders +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.feature.auth.common.TextFieldModel2 +import com.artemchep.keyguard.feature.auth.common.Validated +import com.artemchep.keyguard.feature.auth.common.util.validatedTitle +import com.artemchep.keyguard.feature.confirmation.organization.FolderInfo +import com.artemchep.keyguard.feature.confirmation.organization.FolderInfoType +import com.artemchep.keyguard.feature.navigation.RouteResultTransmitter +import com.artemchep.keyguard.feature.navigation.state.navigatePopSelf +import com.artemchep.keyguard.feature.navigation.state.produceScreenState +import com.artemchep.keyguard.platform.parcelize.LeParcelable +import com.artemchep.keyguard.platform.parcelize.LeParcelize +import com.artemchep.keyguard.res.Res +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.shareIn +import kotlinx.coroutines.flow.update +import org.kodein.di.compose.localDI +import org.kodein.di.direct +import org.kodein.di.instance + +private data class FolderVariant( + val accountId: String, + val folder: FolderInfo, + val name: String, + val enabled: Boolean, +) { + sealed interface FolderInfo { + val key: String + + data object None : FolderInfo { + override val key: String = "none" + } + + data object New : FolderInfo { + override val key: String = "new" + } + + data class Id( + val id: String, + ) : FolderInfo { + override val key: String = "id:$id" + } + + fun type() = when (this) { + is None -> FolderInfoType.None + is New -> FolderInfoType.New + is Id -> FolderInfoType.Id + } + + fun folderId() = when (this) { + is None -> null + is New -> null + is Id -> id + } + } + + val key = "$accountId|${folder.key}" +} + +@LeParcelize +@kotlinx.serialization.Serializable +data class FooBar( + val folderType: FolderInfoType = FolderInfoType.Id, + val folderId: String? = null, +) : LeParcelable + +private fun FooBar.withFolderId(folder: FolderVariant.FolderInfo): FooBar { + val folderType = folder.type() + val folderId = (folder as? FolderVariant.FolderInfo.Id)?.id + if ( + this.folderType == folderType && + this.folderId == folderId + ) { + return this + } + return FooBar( + folderType = folderType, + folderId = folderId, + ) +} + +@Composable +fun folderConfirmationState( + args: FolderConfirmationRoute.Args, + transmitter: RouteResultTransmitter, +): FolderConfirmationState = with(localDI().direct) { + folderConfirmationState( + args = args, + transmitter = transmitter, + getFolders = instance(), + windowCoroutineScope = instance(), + ) +} + +@Composable +fun folderConfirmationState( + args: FolderConfirmationRoute.Args, + transmitter: RouteResultTransmitter, + getFolders: GetFolders, + windowCoroutineScope: WindowCoroutineScope, +): FolderConfirmationState = produceScreenState( + key = "folder_confirmation", + initial = FolderConfirmationState(), + args = arrayOf( + getFolders, + windowCoroutineScope, + ), +) { + val folderNameSink = mutablePersistedFlow("folder_name") { + "" + } + val folderNameState = mutableComposeState(folderNameSink) + val folderValidatedFlow = folderNameSink + .validatedTitle(this) + .shareInScreenScope() + + val foldersFlow = getFolders() + .map { folders -> + val items = folders + .filter { it.accountId == args.accountId.id } + .sortedBy { it.name } + .map { folder -> + val folderEnabled = folder.id !in args.blacklistedFolderIds + val folderInfo = FolderVariant.FolderInfo.Id( + id = folder.id, + ) + FolderVariant( + accountId = folder.accountId, + folder = folderInfo, + name = folder.name, + enabled = folderEnabled, + ) + } + .toMutableList() + // No folder item + run { + val enabled = null !in args.blacklistedFolderIds + items += FolderVariant( + accountId = args.accountId.id, + folder = FolderVariant.FolderInfo.None, + name = translate(Res.strings.folder_none), + enabled = enabled, + ) + } + // New folder item + run { + items += FolderVariant( + accountId = args.accountId.id, + folder = FolderVariant.FolderInfo.New, + name = translate(Res.strings.folder_new), + enabled = true, + ) + } + items + } + .shareIn(screenScope, SharingStarted.Lazily, replay = 1) + + val selectionSink = mutablePersistedFlow("selection") { + FooBar() + } + val selectionFlow = foldersFlow + .combine(selectionSink) { folders, selection -> + var s = selection + + val filteredFolders = folders + .filter { it.enabled } + // De-select non-existent folder + if (s.folderType == FolderInfoType.Id) { + val hasSelectedFolder = filteredFolders + .any { variant -> + when (val f = variant.folder) { + is FolderVariant.FolderInfo.Id -> f.id == s.folderId + else -> false + } + } + if (!hasSelectedFolder) { + val newVariant = FolderVariant.FolderInfo.None + s = s.withFolderId(newVariant) + } + } + // Pre-select the only available folder + if (filteredFolders.size == 1 && s.folderId == null) { + val folderId = filteredFolders.first().folder + s = s.withFolderId(folderId) + } + s + } + .distinctUntilChanged() + .shareIn(screenScope, SharingStarted.Lazily, replay = 1) + + fun onClickFolder(folder: FolderVariant.FolderInfo) = selectionSink.update { + it.withFolderId(folder) + } + + val folderItemsFlow = combine( + foldersFlow, + selectionFlow + .distinctUntilChanged(), + ) { folders, selection -> + val selectedFolderType = selection.folderType + val selectedFolderId = selection.folderId + val items = folders + .asSequence() + .map { folder -> + val selected = folder.folder.type() == selectedFolderType && + folder.folder.folderId() == selectedFolderId + val onClick = if ( + folder.enabled + ) { + ::onClickFolder.partially1(folder.folder) + } else { + null + } + val icon = when (folder.folder) { + is FolderVariant.FolderInfo.None -> Icons.Outlined.FolderOff + is FolderVariant.FolderInfo.New -> Icons.Outlined.Add + else -> null + } + FolderConfirmationState.Content.Item( + key = folder.key, + icon = icon, + title = folder.name, + selected = selected, + onClick = onClick, + ) + } + .toList() + items + } + val folderNameFlow = combine( + selectionFlow + .map { it.folderType } + .distinctUntilChanged(), + folderValidatedFlow, + ) { folderType, folderNameValidated -> + when (folderType) { + FolderInfoType.New -> TextFieldModel2( + state = folderNameState, + text = folderNameValidated.model, + error = (folderNameValidated as? Validated.Failure)?.error, + onChange = folderNameState::value::set, + ) + + else -> null + } + } + val contentFlow = combine( + folderItemsFlow, + folderNameFlow, + ) { items, new -> + FolderConfirmationState.Content( + items = items, + new = new, + ) + } + val confirmFlow = combine( + selectionFlow, + folderValidatedFlow, + ) { selection, folderNameValidated -> + val onConfirm = if ( + (selection.folderType != FolderInfoType.New || folderNameValidated is Validated.Success) + ) { + val folder = when (selection.folderType) { + FolderInfoType.None -> FolderInfo.None + FolderInfoType.New -> FolderInfo.New(name = folderNameValidated.model) + FolderInfoType.Id -> { + val id = selection.folderId + ?: return@combine null // must not be null + FolderInfo.Id(id) + } + } + val result = FolderConfirmationResult.Confirm( + folderInfo = folder, + ) + // lambda + transmitter + .partially1(result) + .andThen { + navigatePopSelf() + } + } else { + null + } + onConfirm + } + combine( + contentFlow, + confirmFlow, + ) { content, onConfirm -> + FolderConfirmationState( + content = Loadable.Ok(content), + onDeny = { + transmitter(FolderConfirmationResult.Deny) + navigatePopSelf() + }, + onConfirm = onConfirm, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/organization/FolderInfo.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/organization/FolderInfo.kt new file mode 100644 index 00000000..78e4bb83 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/organization/FolderInfo.kt @@ -0,0 +1,36 @@ +package com.artemchep.keyguard.feature.confirmation.organization + +import com.artemchep.keyguard.platform.parcelize.LeParcelable +import com.artemchep.keyguard.platform.parcelize.LeParcelize +import kotlinx.serialization.Serializable + +@Serializable +sealed interface FolderInfo : LeParcelable { + @Serializable + @LeParcelize + data object None : FolderInfo + + @Serializable + @LeParcelize + data class New( + val name: String, + ) : FolderInfo + + @Serializable + @LeParcelize + data class Id( + val id: String, + ) : FolderInfo +} + +fun FolderInfo.type() = when (this) { + is FolderInfo.None -> FolderInfoType.None + is FolderInfo.New -> FolderInfoType.New + is FolderInfo.Id -> FolderInfoType.Id +} + +enum class FolderInfoType { + None, + New, + Id, +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/organization/OrganizationConfirmationResult.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/organization/OrganizationConfirmationResult.kt new file mode 100644 index 00000000..8fabb286 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/organization/OrganizationConfirmationResult.kt @@ -0,0 +1,12 @@ +package com.artemchep.keyguard.feature.confirmation.organization + +sealed interface OrganizationConfirmationResult { + data object Deny : OrganizationConfirmationResult + + data class Confirm( + val accountId: String, + val organizationId: String?, + val collectionsIds: Set, + val folderId: FolderInfo, + ) : OrganizationConfirmationResult +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/organization/OrganizationConfirmationRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/organization/OrganizationConfirmationRoute.kt new file mode 100644 index 00000000..ddb6965e --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/organization/OrganizationConfirmationRoute.kt @@ -0,0 +1,54 @@ +package com.artemchep.keyguard.feature.confirmation.organization + +import androidx.compose.runtime.Composable +import androidx.compose.ui.graphics.vector.ImageVector +import com.artemchep.keyguard.feature.navigation.DialogRouteForResult +import com.artemchep.keyguard.feature.navigation.RouteResultTransmitter +import com.artemchep.keyguard.ui.SimpleNote + +class OrganizationConfirmationRoute( + val args: Args, +) : DialogRouteForResult { + data class Args( + val decor: Decor, + val flags: Int = 0, + // selection + val accountId: String? = null, + val organizationId: String? = null, + val folderId: FolderInfo = FolderInfo.None, + val collectionsIds: Set = emptySet(), + // blacklist + val blacklistedAccountIds: Set = emptySet(), + val blacklistedOrganizationIds: Set = emptySet(), + val blacklistedCollectionIds: Set = emptySet(), + val blacklistedFolderIds: Set = emptySet(), + ) { + companion object { + private const val RAW_RO_ACCOUNT = 1 + private const val RAW_RO_ORGANIZATION = 2 + private const val RAW_RO_COLLECTION = 4 + private const val RAW_RO_FOLDER = 8 + + const val RO_ACCOUNT = RAW_RO_ACCOUNT + const val RO_ORGANIZATION = RAW_RO_ORGANIZATION + const val RO_COLLECTION = RAW_RO_COLLECTION + const val RO_FOLDER = RAW_RO_FOLDER + } + + data class Decor( + val title: String, + val note: SimpleNote? = null, + val icon: ImageVector? = null, + ) + } + + @Composable + override fun Content( + transmitter: RouteResultTransmitter, + ) { + OrganizationConfirmationScreen( + args = args, + transmitter = transmitter, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/organization/OrganizationConfirmationScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/organization/OrganizationConfirmationScreen.kt new file mode 100644 index 00000000..493de156 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/organization/OrganizationConfirmationScreen.kt @@ -0,0 +1,184 @@ +package com.artemchep.keyguard.feature.confirmation.organization + +import androidx.compose.animation.animateContentSize +import androidx.compose.foundation.ExperimentalFoundationApi +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ColumnScope +import androidx.compose.foundation.layout.ExperimentalLayoutApi +import androidx.compose.foundation.layout.FlowRow +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.key +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.model.getOrNull +import com.artemchep.keyguard.feature.confirmation.folder.CreateNewFolder +import com.artemchep.keyguard.feature.dialog.Dialog +import com.artemchep.keyguard.feature.home.vault.component.Section +import com.artemchep.keyguard.feature.navigation.RouteResultTransmitter +import com.artemchep.keyguard.feature.search.filter.component.FilterItemComposable +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.ExpandedIfNotEmpty +import com.artemchep.keyguard.ui.FlatSimpleNote +import com.artemchep.keyguard.ui.icons.icon +import com.artemchep.keyguard.ui.theme.Dimens +import dev.icerock.moko.resources.compose.stringResource + +@Composable +fun OrganizationConfirmationScreen( + args: OrganizationConfirmationRoute.Args, + transmitter: RouteResultTransmitter, +) { + val state = organizationConfirmationState( + args = args, + transmitter = transmitter, + ) + OrganizationConfirmationScreen( + decor = args.decor, + state = state, + ) +} + +@Composable +private fun OrganizationConfirmationScreen( + decor: OrganizationConfirmationRoute.Args.Decor, + state: OrganizationConfirmationState, +) { + Dialog( + icon = decor.icon?.let { icon(it) }, + title = { + Text(decor.title) + }, + content = { + val data = state.content.getOrNull() + Column { + ExpandedIfNotEmpty( + valueOrNull = decor.note, + ) { note -> + FlatSimpleNote( + modifier = Modifier, + note = note, + ) + } + + val accountsOrNull = state.content.getOrNull()?.accounts + FolderSection( + title = stringResource(Res.strings.accounts), + section = accountsOrNull, + ) + val organizationsOrNull = state.content.getOrNull()?.organizations + FolderSection( + title = stringResource(Res.strings.organizations), + section = organizationsOrNull, + ) + val collectionsOrNull = state.content.getOrNull()?.collections + FolderSection( + title = stringResource(Res.strings.collections), + section = collectionsOrNull, + ) + val foldersOrNull = state.content.getOrNull()?.folders + FolderSection( + title = stringResource(Res.strings.folders), + section = foldersOrNull, + ) + + val field = state.content.getOrNull()?.folderNew + CreateNewFolder( + field = field, + ) + } + + if (state.content is Loadable.Loading && data == null) { + CircularProgressIndicator( + modifier = Modifier + .align(Alignment.Center) + .padding(16.dp), + ) + } + }, + actions = { + val updatedOnDeny by rememberUpdatedState(state.onDeny) + val updatedOnConfirm by rememberUpdatedState(state.onConfirm) + TextButton( + enabled = state.onDeny != null, + onClick = { + updatedOnDeny?.invoke() + }, + ) { + Text(stringResource(Res.strings.close)) + } + TextButton( + enabled = state.onConfirm != null, + onClick = { + updatedOnConfirm?.invoke() + }, + ) { + Text(stringResource(Res.strings.ok)) + } + }, + ) +} + +@Composable +private fun ColumnScope.Note( + modifier: Modifier = Modifier, + title: String, + section: OrganizationConfirmationState.Content.Section?, +) { +} + +@OptIn(ExperimentalLayoutApi::class) +@Composable +private fun ColumnScope.FolderSection( + modifier: Modifier = Modifier, + title: String, + section: OrganizationConfirmationState.Content.Section?, +) { + ExpandedIfNotEmpty( + valueOrNull = section?.takeUnless { it.items.isEmpty() }, + ) { l -> + Column { + Section(text = title) + FlowRow( + modifier = Modifier + .padding(horizontal = 8.dp) + .animateContentSize(), + horizontalArrangement = Arrangement.spacedBy(8.dp), + verticalArrangement = Arrangement.spacedBy(8.dp), + ) { + l.items.forEach { item -> + key(item.key) { + FilterItemComposable( + modifier = Modifier, + checked = item.selected, + leading = item.icon, + title = item.title, + text = item.text, + onClick = item.onClick, + ) + } + } + } + ExpandedIfNotEmpty( + valueOrNull = l.text, + ) { text -> + Text( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding) + .padding(top = 8.dp), + text = text, + style = MaterialTheme.typography.labelMedium, + ) + } + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/organization/OrganizationConfirmationState.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/organization/OrganizationConfirmationState.kt new file mode 100644 index 00000000..b9874075 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/organization/OrganizationConfirmationState.kt @@ -0,0 +1,33 @@ +package com.artemchep.keyguard.feature.confirmation.organization + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.feature.auth.common.TextFieldModel2 + +data class OrganizationConfirmationState( + val content: Loadable = Loadable.Loading, + val onDeny: (() -> Unit)? = null, + val onConfirm: (() -> Unit)? = null, +) { + data class Content( + val accounts: Section, + val organizations: Section, + val collections: Section, + val folders: Section, + val folderNew: TextFieldModel2?, + ) { + data class Section( + val items: List, + val text: String? = null, + ) + + data class Item( + val key: String, + val title: String, + val text: String? = null, + val selected: Boolean, + val icon: (@Composable () -> Unit)? = null, + val onClick: (() -> Unit)?, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/organization/OrganizationConfirmationStateProducer.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/organization/OrganizationConfirmationStateProducer.kt new file mode 100644 index 00000000..c48407c1 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/confirmation/organization/OrganizationConfirmationStateProducer.kt @@ -0,0 +1,711 @@ +package com.artemchep.keyguard.feature.confirmation.organization + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Add +import androidx.compose.material.icons.outlined.FolderOff +import androidx.compose.material.icons.outlined.Lock +import androidx.compose.material3.MaterialTheme +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import arrow.core.andThen +import arrow.core.partially1 +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.usecase.GetAccounts +import com.artemchep.keyguard.common.usecase.GetCollections +import com.artemchep.keyguard.common.usecase.GetFolders +import com.artemchep.keyguard.common.usecase.GetOrganizations +import com.artemchep.keyguard.common.usecase.GetProfiles +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.common.util.contains +import com.artemchep.keyguard.feature.auth.common.TextFieldModel2 +import com.artemchep.keyguard.feature.auth.common.Validated +import com.artemchep.keyguard.feature.auth.common.util.validatedTitle +import com.artemchep.keyguard.feature.navigation.RouteResultTransmitter +import com.artemchep.keyguard.feature.navigation.state.navigatePopSelf +import com.artemchep.keyguard.feature.navigation.state.produceScreenState +import com.artemchep.keyguard.platform.parcelize.LeParcelable +import com.artemchep.keyguard.platform.parcelize.LeParcelize +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.icons.AccentColors +import com.artemchep.keyguard.ui.icons.icon +import com.artemchep.keyguard.ui.theme.isDark +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.onEach +import kotlinx.coroutines.flow.shareIn +import kotlinx.coroutines.flow.update +import org.kodein.di.compose.localDI +import org.kodein.di.direct +import org.kodein.di.instance + +@Composable +fun organizationConfirmationState( + args: OrganizationConfirmationRoute.Args, + transmitter: RouteResultTransmitter, +): OrganizationConfirmationState = with(localDI().direct) { + organizationConfirmationState( + args = args, + transmitter = transmitter, + getAccounts = instance(), + getProfiles = instance(), + getOrganizations = instance(), + getCollections = instance(), + getFolders = instance(), + windowCoroutineScope = instance(), + ) +} + +@LeParcelize +@kotlinx.serialization.Serializable +data class FooBar( + val accountId: String? = null, + val organizationId: String? = null, + val collectionsIds: Set = emptySet(), + val folderType: FolderInfoType = FolderInfoType.None, + val folderId: String? = null, +) : LeParcelable + +private fun FooBar.withAccountId(accountId: String?): FooBar { + if (this.accountId == accountId) return this + return FooBar( + accountId = accountId, + ) +} + +private fun FooBar.withOrganizationId(organizationId: String?): FooBar { + if (this.organizationId == organizationId) return this + return FooBar( + accountId = this.accountId, + organizationId = organizationId, + folderType = this.folderType, + folderId = this.folderId, + ) +} + +private fun FooBar.withCollectionIdSet(ids: Set): FooBar { + if (this.collectionsIds == ids) return this + return FooBar( + accountId = this.accountId, + organizationId = this.organizationId, + collectionsIds = ids, + folderType = this.folderType, + folderId = this.folderId, + ) +} + +private fun FooBar.withFolderId(folder: FolderVariant.FolderInfo): FooBar { + val folderType = folder.type() + val folderId = (folder as? FolderVariant.FolderInfo.Id)?.id + if ( + this.folderType == folderType && + this.folderId == folderId + ) { + return this + } + return FooBar( + accountId = this.accountId, + organizationId = this.organizationId, + collectionsIds = this.collectionsIds, + folderType = folderType, + folderId = folderId, + ) +} + +private data class AccountVariant( + val accountId: String, + val name: String, + val text: String, + val enabled: Boolean, + val accentColors: AccentColors, +) { + val key = accountId +} + +private data class OrganizationVariant( + val accountId: String, + val organizationId: String? = null, + val name: String, + val enabled: Boolean, +) { + val key = "$accountId|$organizationId" +} + +private data class CollectionVariant( + val accountId: String, + val organizationId: String? = null, + val collectionId: String, + val name: String, + val readOnly: Boolean, + val enabled: Boolean, +) { + val key = "$accountId|$organizationId|$collectionId" +} + +private data class FolderVariant( + val accountId: String, + val folder: FolderInfo, + val name: String, + val enabled: Boolean, +) { + sealed interface FolderInfo { + val key: String + + data object None : FolderInfo { + override val key: String = "none" + } + + data object New : FolderInfo { + override val key: String = "new" + } + + data class Id( + val id: String, + ) : FolderInfo { + override val key: String = "id:$id" + } + + fun type() = when (this) { + is None -> FolderInfoType.None + is New -> FolderInfoType.New + is Id -> FolderInfoType.Id + } + + fun folderId() = when (this) { + is None -> null + is New -> null + is Id -> id + } + } + + val key = "$accountId|${folder.key}" +} + +@Composable +fun organizationConfirmationState( + args: OrganizationConfirmationRoute.Args, + transmitter: RouteResultTransmitter, + getAccounts: GetAccounts, + getProfiles: GetProfiles, + getOrganizations: GetOrganizations, + getCollections: GetCollections, + getFolders: GetFolders, + windowCoroutineScope: WindowCoroutineScope, +): OrganizationConfirmationState = produceScreenState( + key = "organization_confirmation", + initial = OrganizationConfirmationState(), + args = arrayOf( + getFolders, + windowCoroutineScope, + ), +) { + val readOnlyAccount = OrganizationConfirmationRoute.Args.RO_ACCOUNT in args.flags + val readOnlyOrganization = OrganizationConfirmationRoute.Args.RO_ORGANIZATION in args.flags + val readOnlyFolder = OrganizationConfirmationRoute.Args.RO_FOLDER in args.flags + val readOnlyCollections = OrganizationConfirmationRoute.Args.RO_COLLECTION in args.flags + + val accountsFlow = getProfiles() + .map { profiles -> + profiles + .map { profile -> + val enabled = profile.accountId() !in args.blacklistedAccountIds + AccountVariant( + accountId = profile.accountId(), + name = profile.email, + text = profile.accountHost, + enabled = enabled, + accentColors = profile.accentColor, + ) + } + } + .shareIn(screenScope, SharingStarted.WhileSubscribed(), replay = 1) + val organizationsFlow = combine( + getOrganizations(), + accountsFlow, + ) { organizations, accounts -> + organizations + .sortedBy { it.name } + .map { organization -> + val enabled = organization.id !in args.blacklistedOrganizationIds + OrganizationVariant( + accountId = organization.accountId, + organizationId = organization.id, + name = organization.name, + enabled = enabled, + ) + } + accounts + .map { account -> + val enabled = null !in args.blacklistedOrganizationIds && + account.enabled + OrganizationVariant( + accountId = account.accountId, + organizationId = null, + name = translate(Res.strings.organization_none), + enabled = enabled, + ) + } + } + .shareIn(screenScope, SharingStarted.WhileSubscribed(), replay = 1) + val collectionsFlow = getCollections() + .map { collections -> + collections + .map { collection -> + val enabled = collection.id !in args.blacklistedCollectionIds && + !collection.readOnly + CollectionVariant( + accountId = collection.accountId, + organizationId = collection.organizationId, + collectionId = collection.id, + name = collection.name, + readOnly = collection.readOnly, + enabled = enabled, + ) + } + } + .shareIn(screenScope, SharingStarted.WhileSubscribed(), replay = 1) + val foldersFlow = combine( + getFolders(), + accountsFlow, + ) { folders, accounts -> + folders + .sortedBy { it.name } + .map { folder -> + val enabled = folder.id !in args.blacklistedFolderIds + FolderVariant( + accountId = folder.accountId, + folder = FolderVariant.FolderInfo.Id(folder.id), + name = folder.name, + enabled = enabled, + ) + } + accounts + .flatMap { account -> + val items = mutableListOf() + // No folder item + run { + val enabled = null !in args.blacklistedFolderIds && + account.enabled + items += FolderVariant( + accountId = account.accountId, + folder = FolderVariant.FolderInfo.None, + name = translate(Res.strings.folder_none), + enabled = enabled, + ) + } + // New folder item + run { + val enabled = account.enabled + items += FolderVariant( + accountId = account.accountId, + folder = FolderVariant.FolderInfo.New, + name = translate(Res.strings.folder_new), + enabled = enabled, + ) + } + items + } + } + .shareIn(screenScope, SharingStarted.WhileSubscribed(), replay = 1) + + val folderNameSink = mutablePersistedFlow("folder_name") { + val folderName = (args.folderId as? FolderInfo.New)?.name + folderName.orEmpty() + } + val folderNameState = mutableComposeState(folderNameSink) + val folderValidatedFlow = folderNameSink + .validatedTitle(this) + .shareInScreenScope() + + val selectionSink = mutablePersistedFlow("selection") { + val folderType = args.folderId.type() + val folderId = (args.folderId as? FolderInfo.Id)?.id + FooBar( + accountId = args.accountId, + organizationId = args.organizationId, + collectionsIds = args.collectionsIds, + folderType = folderType, + folderId = folderId, + ) + } + val selectionFlow = combine( + selectionSink, + accountsFlow, + organizationsFlow, + collectionsFlow, + foldersFlow, + ) { selection, accounts, organizations, collections, folders -> + var s = selection + + // + // Accounts + // + + val filteredAccounts = accounts + .filter { it.enabled } + // De-select non-existent account + if (filteredAccounts.none { it.accountId == s.accountId }) { + s = s.withAccountId(null) + } + // Pre-select the only available account + if (filteredAccounts.size == 1 && s.accountId == null) { + val accountId = filteredAccounts.first().accountId + s = s.withAccountId(accountId) + } + + // + // Organizations + // + + val filteredOrganizations = organizations + .filter { it.accountId == s.accountId && it.enabled } + // De-select non-existent organization + if (filteredOrganizations.none { it.organizationId == s.organizationId }) { + s = s.withOrganizationId(null) + } + // Pre-select the only available organization + if (filteredOrganizations.size == 1 && s.organizationId == null) { + val organizationId = filteredOrganizations.first().organizationId + s = s.withOrganizationId(organizationId) + } + + // + // Collections + // + + val filteredCollections = collections + .filter { + it.enabled && + it.accountId == s.accountId && + it.organizationId == s.organizationId + } + val filteredCollectionIds = filteredCollections + .map { it.collectionId } + .toSet() + // De-select non-existent collections + s = s.withCollectionIdSet( + ids = filteredCollectionIds + .intersect(s.collectionsIds), + ) + // Pre-select the only available collection + if (filteredCollectionIds.size == 1 && s.collectionsIds.isEmpty()) { + s = s.withCollectionIdSet(filteredCollectionIds) + } + + // + // Folders + // + + val filteredFolders = folders + .filter { it.accountId == s.accountId && it.enabled } + // De-select non-existent folder + if (s.folderType == FolderInfoType.Id) { + val hasSelectedFolder = filteredFolders + .any { variant -> + when (val f = variant.folder) { + is FolderVariant.FolderInfo.Id -> f.id == s.folderId + else -> false + } + } + if (!hasSelectedFolder) { + val newVariant = FolderVariant.FolderInfo.None + s = s.withFolderId(newVariant) + } + } + // Pre-select the only available folder + if (filteredFolders.size == 1 && s.folderId == null) { + val folderId = filteredFolders.first().folder + s = s.withFolderId(folderId) + } + + s + } + .distinctUntilChanged() + .onEach { + selectionSink.value = it + } + .shareIn(screenScope, SharingStarted.WhileSubscribed(), replay = 1) + + fun onClickAccount(accountId: String?) = selectionSink.update { + it.withAccountId(accountId) + } + + fun onClickOrganization(organizationId: String?) = selectionSink.update { + it.withOrganizationId(organizationId) + } + + fun onClickCollection(collectionId: String) = selectionSink.update { + val existed = collectionId in it.collectionsIds + val ids = if (existed) { + it.collectionsIds - collectionId + } else { + it.collectionsIds + collectionId + } + it.withCollectionIdSet(ids) + } + + fun onClickFolder(folder: FolderVariant.FolderInfo) = selectionSink.update { + it.withFolderId(folder) + } + + val itemAccountsFlow = combine( + accountsFlow, + selectionFlow + .map { it.accountId } + .distinctUntilChanged(), + ) { accounts, selectedAccountId -> + val items = accounts + .map { account -> + val selected = account.accountId == selectedAccountId + val onClick = if ( + account.enabled && + !readOnlyAccount + ) { + ::onClickAccount.partially1(account.accountId) + } else { + null + } + OrganizationConfirmationState.Content.Item( + key = account.accountId, + title = account.name, + text = account.text, + selected = selected, + onClick = onClick, + icon = { + val accentColor = if (MaterialTheme.colorScheme.isDark) { + account.accentColors.dark + } else { + account.accentColors.light + } + Box( + modifier = Modifier + .size(24.dp) + .background(accentColor, CircleShape), + ) + }, + ) + } + OrganizationConfirmationState.Content.Section( + items = items, + ) + } + val itemOrganizationsFlow = combine( + organizationsFlow, + selectionFlow + .map { it.organizationId to it.accountId } + .distinctUntilChanged(), + ) { organizations, (selectedOrganizationId, selectedAccountId) -> + val items = organizations + .asSequence() + .filter { it.accountId == selectedAccountId } + .map { organization -> + val selected = organization.organizationId == selectedOrganizationId + val onClick = if ( + organization.enabled && + !readOnlyOrganization + ) { + ::onClickOrganization.partially1(organization.organizationId) + } else { + null + } + OrganizationConfirmationState.Content.Item( + key = organization.key, + title = organization.name, + selected = selected, + onClick = onClick, + ) + } + .toList() + OrganizationConfirmationState.Content.Section( + items = items, + text = translate(Res.strings.destinationpicker_organization_ownership_note) + .takeIf { selectedOrganizationId != null }, + ) + } + val itemCollectionsFlow = combine( + collectionsFlow, + selectionFlow + .map { + Triple( + it.collectionsIds, + it.organizationId, + it.accountId, + ) + } + .distinctUntilChanged(), + ) { collections, (selectedCollectionIds, selectedOrganizationId, selectedAccountId) -> + val items = collections + .asSequence() + .filter { it.accountId == selectedAccountId && it.organizationId == selectedOrganizationId } + .map { collection -> + val selected = collection.collectionId in selectedCollectionIds + val onClick = if ( + collection.enabled && + !readOnlyCollections + ) { + ::onClickCollection.partially1(collection.collectionId) + } else { + null + } + OrganizationConfirmationState.Content.Item( + key = collection.key, + title = collection.name, + icon = Icons.Outlined.Lock + .takeIf { collection.readOnly } + ?.let { + // create icon composable + icon(it) + }, + selected = selected, + onClick = onClick, + ) + } + .toList() + OrganizationConfirmationState.Content.Section( + items = items, + ) + } + + data class Ty( + val folderType: FolderInfoType, + val folderId: String?, + val accountId: String?, + ) + + val itemFoldersFlow = combine( + foldersFlow, + selectionFlow + .map { + Ty( + folderType = it.folderType, + folderId = it.folderId, + accountId = it.accountId, + ) + } + .distinctUntilChanged(), + ) { folders, (selectedFolderType, selectedFolderId, selectedAccountId) -> + val items = folders + .asSequence() + .filter { it.accountId == selectedAccountId } + .map { folder -> + val selected = folder.folder.type() == selectedFolderType && + folder.folder.folderId() == selectedFolderId + val onClick = if ( + folder.enabled && + !readOnlyFolder + ) { + ::onClickFolder.partially1(folder.folder) + } else { + null + } + val icon = when (folder.folder) { + is FolderVariant.FolderInfo.None -> Icons.Outlined.FolderOff + is FolderVariant.FolderInfo.New -> Icons.Outlined.Add + else -> null + } + OrganizationConfirmationState.Content.Item( + key = folder.key, + icon = icon + ?.let { + // create icon composable + icon(it) + }, + title = folder.name, + selected = selected, + onClick = onClick, + ) + } + .toList() + OrganizationConfirmationState.Content.Section( + items = items, + ) + } + + val contentFlow = combine( + itemAccountsFlow, + itemOrganizationsFlow, + itemCollectionsFlow, + itemFoldersFlow, + // folder name + combine( + selectionFlow + .map { it.folderType } + .distinctUntilChanged(), + folderValidatedFlow, + ) { folderType, folderNameValidated -> + when (folderType) { + FolderInfoType.New -> TextFieldModel2( + state = folderNameState, + text = folderNameValidated.model, + error = (folderNameValidated as? Validated.Failure)?.error, + onChange = folderNameState::value::set, + ) + + else -> null + } + }, + ) { accounts, organizations, collections, folders, folderNew -> + OrganizationConfirmationState.Content( + accounts = accounts, + organizations = organizations, + collections = collections, + folders = folders, + folderNew = folderNew, + ) + } + + combine( + contentFlow, + combine( + selectionFlow, + folderValidatedFlow, + ) { selection, folderNameValidated -> + val onConfirm = if ( + // Account must be not empty + selection.accountId != null && + // If you save to an organization, you must pick at least one + // collection... otherwise the collection ids must be empty. + (selection.organizationId != null) == selection.collectionsIds.isNotEmpty() && + (selection.folderType != FolderInfoType.New || folderNameValidated is Validated.Success) + ) { + val folder = when (selection.folderType) { + FolderInfoType.None -> FolderInfo.None + FolderInfoType.New -> FolderInfo.New(name = folderNameValidated.model) + FolderInfoType.Id -> { + val id = selection.folderId + ?: return@combine null // must not be null + FolderInfo.Id(id) + } + } + val result = OrganizationConfirmationResult.Confirm( + accountId = selection.accountId, + organizationId = selection.organizationId, + collectionsIds = selection.collectionsIds, + folderId = folder, + ) + // lambda + transmitter + .partially1(result) + .andThen { + navigatePopSelf() + } + } else { + null + } + onConfirm + }, + ) { content, onConfirm -> + OrganizationConfirmationState( + content = Loadable.Ok(content), + onDeny = { + transmitter(OrganizationConfirmationResult.Deny) + navigatePopSelf() + }, + onConfirm = onConfirm, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/crashlytics/crashlyticsMap.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/crashlytics/crashlyticsMap.kt new file mode 100644 index 00000000..91aed0b3 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/crashlytics/crashlyticsMap.kt @@ -0,0 +1,64 @@ +package com.artemchep.keyguard.feature.crashlytics + +import arrow.core.Either +import arrow.core.getOrElse +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.attempt +import com.artemchep.keyguard.common.io.handleErrorTap +import com.artemchep.keyguard.platform.recordException +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.flatMapConcat +import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.flow.onEach + +fun Flow.crashlyticsAttempt( + transform: (Throwable) -> Throwable? = { it }, +) = this + .attempt() + .onEach { result -> + if (result is Either.Left) { + val newException = transform(result.value) + if (newException != null) { + recordException(newException) + } + } + } + +fun Flow.crashlyticsMap( + transform: (Throwable) -> Throwable? = { it }, + orElse: (Throwable) -> T, +) = crashlyticsFlatMapConcat( + transform = transform, + orElse = { + val fallbackValue = orElse(it) + flowOf(fallbackValue) + }, +) + +fun Flow.crashlyticsFlatMapConcat( + transform: (Throwable) -> Throwable? = { it }, + orElse: Flow.(Throwable) -> Flow, +): Flow = this + .attempt() + .flatMapConcat { result -> + result + .map { flowOf(it) } + .getOrElse { e -> + val newException = transform(e) + if (newException != null) { + recordException(newException) + } + // Fall back to the default value. + orElse(e) + } + } + +fun IO.crashlyticsTap( + transform: (Throwable) -> Throwable? = { it }, +) = this + .handleErrorTap { e -> + val newException = transform(e) + if (newException != null) { + recordException(newException) + } + } diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/datasafety/DataSafetyRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/datasafety/DataSafetyRoute.kt new file mode 100644 index 00000000..ff9456c5 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/datasafety/DataSafetyRoute.kt @@ -0,0 +1,11 @@ +package com.artemchep.keyguard.feature.datasafety + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.navigation.Route + +object DataSafetyRoute : Route { + @Composable + override fun Content() { + DataSafetyScreen() + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/datasafety/DataSafetyScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/datasafety/DataSafetyScreen.kt new file mode 100644 index 00000000..8aecf412 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/datasafety/DataSafetyScreen.kt @@ -0,0 +1,274 @@ +package com.artemchep.keyguard.feature.datasafety + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ColumnScope +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.layout.widthIn +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.LocalTextStyle +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.input.nestedscroll.nestedScroll +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.feature.home.vault.component.LargeSection +import com.artemchep.keyguard.feature.home.vault.component.Section +import com.artemchep.keyguard.feature.navigation.LocalNavigationController +import com.artemchep.keyguard.feature.navigation.NavigationIcon +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.ScaffoldColumn +import com.artemchep.keyguard.ui.theme.Dimens +import com.artemchep.keyguard.ui.theme.combineAlpha +import com.artemchep.keyguard.ui.toolbar.LargeToolbar +import com.artemchep.keyguard.ui.util.HorizontalDivider +import dev.icerock.moko.resources.compose.stringResource + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun DataSafetyScreen() { + val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior() + ScaffoldColumn( + modifier = Modifier + .nestedScroll(scrollBehavior.nestedScrollConnection), + topAppBarScrollBehavior = scrollBehavior, + topBar = { + LargeToolbar( + title = { + Text( + text = stringResource(Res.strings.datasafety_header_title), + ) + }, + navigationIcon = { + NavigationIcon() + }, + scrollBehavior = scrollBehavior, + ) + }, + ) { + DataSafetyScreenContent() + } +} + +@Composable +private fun ColumnScope.DataSafetyScreenContent() { + val navigationController by rememberUpdatedState(LocalNavigationController.current) + val secondaryTextStyle = LocalTextStyle.current + .merge(MaterialTheme.typography.bodyMedium) + .copy( + color = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + ) + + LargeSection( + text = stringResource(Res.strings.datasafety_local_section), + ) + Text( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding), + text = stringResource(Res.strings.datasafety_local_text), + ) + Spacer( + modifier = Modifier + .height(16.dp), + ) + Section( + text = stringResource(Res.strings.datasafety_local_downloads_section), + ) + TwoColumnRow( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = Dimens.horizontalPadding), + title = stringResource(Res.strings.encryption), + value = stringResource(Res.strings.none), + ) + Spacer( + modifier = Modifier + .height(16.dp), + ) + Section( + text = stringResource(Res.strings.datasafety_local_settings_section), + ) + TwoColumnRow( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = Dimens.horizontalPadding), + title = stringResource(Res.strings.encryption), + value = "256-bit AES", + ) + Spacer( + modifier = Modifier + .height(16.dp), + ) + CompositionLocalProvider( + LocalTextStyle provides secondaryTextStyle, + ) { + Column { + Text( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding), + text = stringResource(Res.strings.datasafety_local_settings_note), + ) + } + } + Spacer( + modifier = Modifier + .height(16.dp), + ) + Section( + text = stringResource(Res.strings.datasafety_local_vault_section), + ) + TwoColumnRow( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = Dimens.horizontalPadding), + title = stringResource(Res.strings.encryption), + value = stringResource(Res.strings.encryption_algorithm_256bit_aes), + ) + Spacer( + modifier = Modifier + .height(16.dp), + ) + CompositionLocalProvider( + LocalTextStyle provides secondaryTextStyle, + ) { + Column { + val labelAppPassword = stringResource(Res.strings.app_password) + val labelHash = stringResource(Res.strings.encryption_hash) + val labelSalt = stringResource(Res.strings.encryption_salt) + val labelKey = stringResource(Res.strings.encryption_key) + Text( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding), + text = stringResource( + Res.strings.datasafety_local_encryption_algorithm_intro, + ), + ) + Spacer( + modifier = Modifier + .height(16.dp), + ) + TwoColumnRow( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = Dimens.horizontalPadding), + title = labelSalt, + value = stringResource(Res.strings.encryption_random_bits_data, 64), + ) + HorizontalDivider( + modifier = Modifier + .padding(vertical = 8.dp) + .padding(horizontal = Dimens.horizontalPadding), + ) + TwoColumnRow( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = Dimens.horizontalPadding), + title = labelHash, + value = "PBKDF2($labelAppPassword, $labelSalt)", + ) + HorizontalDivider( + modifier = Modifier + .padding(vertical = 8.dp) + .padding(horizontal = Dimens.horizontalPadding), + ) + TwoColumnRow( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = Dimens.horizontalPadding), + title = labelKey, + value = "PBKDF2($labelAppPassword, $labelHash)", + ) + Spacer( + modifier = Modifier + .height(16.dp), + ) + Text( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding), + text = stringResource( + Res.strings.datasafety_local_encryption_algorithm_outro, + ), + ) + } + } + HorizontalDivider( + modifier = Modifier + .padding(vertical = 16.dp), + ) + Text( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding), + text = stringResource( + Res.strings.datasafety_local_unlocking_vault, + stringResource(Res.strings.encryption_key), + ), + ) + LargeSection( + text = stringResource(Res.strings.datasafety_remote_section), + ) + Text( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding), + text = stringResource(Res.strings.datasafety_remote_text), + ) + TextButton( + modifier = Modifier + .padding( + vertical = 4.dp, + horizontal = 4.dp, + ), + onClick = { + val intent = NavigationIntent.NavigateToBrowser( + url = "https://bitwarden.com/help/what-encryption-is-used/", + ) + navigationController.queue(intent) + }, + ) { + Text( + text = stringResource(Res.strings.learn_more), + ) + } +} + +@Composable +private fun TwoColumnRow( + modifier: Modifier = Modifier, + title: String, + value: String, +) { + Row( + modifier = modifier, + verticalAlignment = Alignment.Top, + ) { + Text( + modifier = Modifier + .weight(1f) + .widthIn(max = 120.dp), + text = title, + fontWeight = FontWeight.Medium, + ) + Spacer(modifier = Modifier.width(16.dp)) + Text( + modifier = Modifier + .weight(1f) + .widthIn(max = 120.dp), + text = value, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/datepicker/DatePickerResult.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/datepicker/DatePickerResult.kt new file mode 100644 index 00000000..134234ef --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/datepicker/DatePickerResult.kt @@ -0,0 +1,13 @@ +package com.artemchep.keyguard.feature.datepicker + +import java.time.Month +import java.time.Year + +sealed interface DatePickerResult { + data object Deny : DatePickerResult + + data class Confirm( + val month: Month, + val year: Year, + ) : DatePickerResult +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/datepicker/DatePickerRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/datepicker/DatePickerRoute.kt new file mode 100644 index 00000000..849dc63c --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/datepicker/DatePickerRoute.kt @@ -0,0 +1,24 @@ +package com.artemchep.keyguard.feature.datepicker + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.navigation.DialogRouteForResult +import com.artemchep.keyguard.feature.navigation.RouteResultTransmitter + +data class DatePickerRoute( + val args: Args, +) : DialogRouteForResult { + data class Args( + val month: Int? = null, + val year: Int? = null, + ) + + @Composable + override fun Content( + transmitter: RouteResultTransmitter, + ) { + DatePickerScreen( + args = args, + transmitter = transmitter, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/datepicker/DatePickerScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/datepicker/DatePickerScreen.kt new file mode 100644 index 00000000..409c65d7 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/datepicker/DatePickerScreen.kt @@ -0,0 +1,206 @@ +package com.artemchep.keyguard.feature.datepicker + +import androidx.compose.animation.animateContentSize +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ColumnScope +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.items +import androidx.compose.foundation.lazy.rememberLazyListState +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.CalendarMonth +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.common.model.getOrNull +import com.artemchep.keyguard.feature.dialog.Dialog +import com.artemchep.keyguard.feature.navigation.RouteResultTransmitter +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.DisabledEmphasisAlpha +import com.artemchep.keyguard.ui.FlatItem +import com.artemchep.keyguard.ui.icons.icon +import com.artemchep.keyguard.ui.theme.combineAlpha +import com.artemchep.keyguard.ui.theme.selectedContainer +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.collections.immutable.ImmutableList + +@Composable +fun DatePickerScreen( + args: DatePickerRoute.Args, + transmitter: RouteResultTransmitter, +) { + val loadableState = produceDatePickerState( + args = args, + transmitter = transmitter, + ) + Dialog( + icon = icon(Icons.Outlined.CalendarMonth), + title = { + Text(stringResource(Res.strings.datepicker_title)) + }, + content = { + Column { + val state = loadableState.getOrNull() + ?: return@Column + Content( + state = state, + ) + } + }, + contentScrollable = false, + actions = { + val updatedOnClose by rememberUpdatedState(loadableState.getOrNull()?.onDeny) + val updatedOnOk by rememberUpdatedState(loadableState.getOrNull()?.onConfirm) + TextButton( + enabled = updatedOnClose != null, + onClick = { + updatedOnClose?.invoke() + }, + ) { + Text(stringResource(Res.strings.close)) + } + TextButton( + enabled = updatedOnOk != null, + onClick = { + updatedOnOk?.invoke() + }, + ) { + Text(stringResource(Res.strings.ok)) + } + }, + ) +} + +@Composable +private fun ColumnScope.Content( + state: DatePickerState, +) { + Surface( + modifier = Modifier + .padding( + horizontal = 8.dp, + vertical = 8.dp, + ), + color = MaterialTheme.colorScheme.primaryContainer, + shape = MaterialTheme.shapes.medium, + ) { + Row( + modifier = Modifier + .fillMaxWidth() + .padding(16.dp), + horizontalArrangement = Arrangement.SpaceEvenly, + ) { + val monthRes = getMonthTitleStringRes(state.content.month) + val year = getYearTitle(state.content.year) + Text( + modifier = Modifier + .animateContentSize() + .alignByBaseline(), + text = stringResource(monthRes), + style = MaterialTheme.typography.displaySmall, + ) + Text( + modifier = Modifier + .animateContentSize() + .alignByBaseline(), + text = year, + style = MaterialTheme.typography.displayMedium, + ) + } + } + Row( + modifier = Modifier, + ) { + MonthPicker( + modifier = Modifier + .weight(1f), + month = state.content.month, + months = state.content.months, + ) + MonthPicker( + modifier = Modifier + .weight(1f), + month = state.content.year, + months = state.content.years, + ) + } +} + +@Composable +private fun MonthPicker( + modifier: Modifier = Modifier, + month: Int, + months: ImmutableList, +) { + val listState = rememberLazyListState() + LazyColumn( + modifier = modifier, + state = listState, + ) { + items( + items = months, + key = { it.key }, + ) { item -> + val selected = month == item.key + MonthPickerItem( + item = item, + selected = selected, + ) + } + } + + LaunchedEffect(Unit) { + val index = months.indexOfFirst { it.key == month } + if (index != -1) { + val finalIndex = index.minus(1).coerceAtLeast(0) + listState.scrollToItem(finalIndex) + } + } +} + +@Composable +private fun MonthPickerItem( + modifier: Modifier = Modifier, + item: DatePickerState.Item, + selected: Boolean, +) { + val backgroundColor = if (selected) { + MaterialTheme.colorScheme.selectedContainer + } else { + Color.Unspecified + } + FlatItem( + modifier = modifier, + backgroundColor = backgroundColor, + title = { + Row { + Text(text = item.title) + + val index = item.index + if (!index.isNullOrEmpty()) { + Text( + modifier = Modifier + .padding(start = 8.dp) + .alignByBaseline(), + text = index, + color = LocalContentColor.current + .combineAlpha(DisabledEmphasisAlpha), + ) + } + } + }, + onClick = item.onClick, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/datepicker/DatePickerState.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/datepicker/DatePickerState.kt new file mode 100644 index 00000000..3b15a7d4 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/datepicker/DatePickerState.kt @@ -0,0 +1,28 @@ +package com.artemchep.keyguard.feature.datepicker + +import androidx.compose.runtime.Immutable +import androidx.compose.runtime.Stable +import kotlinx.collections.immutable.ImmutableList + +@Immutable +data class DatePickerState( + val content: Content, + val onDeny: (() -> Unit)? = null, + val onConfirm: (() -> Unit)? = null, +) { + @Immutable + data class Content( + val month: Int, + val months: ImmutableList, + val year: Int, + val years: ImmutableList, + ) + + @Stable + data class Item( + val key: Int, + val title: String, + val index: String? = null, + val onClick: () -> Unit, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/datepicker/DatePickerStateProducer.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/datepicker/DatePickerStateProducer.kt new file mode 100644 index 00000000..ddcab7ca --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/datepicker/DatePickerStateProducer.kt @@ -0,0 +1,122 @@ +package com.artemchep.keyguard.feature.datepicker + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.feature.navigation.RouteResultTransmitter +import com.artemchep.keyguard.feature.navigation.state.navigatePopSelf +import com.artemchep.keyguard.feature.navigation.state.produceScreenState +import com.artemchep.keyguard.res.Res +import dev.icerock.moko.resources.StringResource +import kotlinx.collections.immutable.toImmutableList +import kotlinx.coroutines.flow.combine +import kotlinx.datetime.Clock +import kotlinx.datetime.Month +import kotlinx.datetime.TimeZone +import kotlinx.datetime.toLocalDateTime +import java.time.Year + +@Composable +fun produceDatePickerState( + args: DatePickerRoute.Args, + transmitter: RouteResultTransmitter, +): Loadable = produceScreenState( + key = "date_picker", + initial = Loadable.Loading, + args = arrayOf(), +) { + val yearCurrent = getYear() + val yearSink = mutablePersistedFlow("year") { + val year = args.year + ?: getYear() + year + } + val yearItems = kotlin.run { + val yearMin = yearCurrent - 32 + val yearMax = yearCurrent + 64 + (yearMin..yearMax) + .map { year -> + val title = getYearTitle(year) + DatePickerState.Item( + key = year, + title = title, + onClick = { + yearSink.value = year + }, + ) + } + .toImmutableList() + } + + val monthSink = mutablePersistedFlow("month") { + val month = args.month + ?: Clock.System.now().toLocalDateTime(TimeZone.UTC).month.value + month + } + val monthItems = kotlin.run { + (1..12) + .map { month -> + val index = kotlin.run { + val m = month.toString().padStart(2, '0') + "($m)" + } + val titleRes = getMonthTitleStringRes(month) + DatePickerState.Item( + key = month, + title = translate(titleRes), + index = index, + onClick = { + monthSink.value = month + }, + ) + } + .toImmutableList() + } + + combine( + monthSink, + yearSink, + ) { month, year -> + val content = DatePickerState.Content( + month = month, + months = monthItems, + year = year, + years = yearItems, + ) + val state = DatePickerState( + content = content, + onDeny = { + transmitter(DatePickerResult.Deny) + navigatePopSelf() + }, + onConfirm = { + val result = DatePickerResult.Confirm( + month = Month.of(month), + year = Year.of(year), + ) + transmitter(result) + navigatePopSelf() + }, + ) + Loadable.Ok(state) + } +} + +fun getMonthTitleStringRes(month: Int): StringResource = when (month) { + 1 -> Res.strings.january + 2 -> Res.strings.february + 3 -> Res.strings.march + 4 -> Res.strings.april + 5 -> Res.strings.may + 6 -> Res.strings.june + 7 -> Res.strings.july + 8 -> Res.strings.august + 9 -> Res.strings.september + 10 -> Res.strings.october + 11 -> Res.strings.november + 12 -> Res.strings.december + else -> throw IllegalArgumentException("Number of the month should be in 1..12 range, got $month instead!") +} + +fun getYearTitle(year: Int) = year.toString() + +private fun getYear() = Clock.System.now().toLocalDateTime(TimeZone.UTC).year diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/decorator/ItemDecorator.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/decorator/ItemDecorator.kt new file mode 100644 index 00000000..a3f2b4f6 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/decorator/ItemDecorator.kt @@ -0,0 +1,75 @@ +package com.artemchep.keyguard.feature.decorator + +import com.artemchep.keyguard.common.usecase.DateFormatter +import kotlinx.datetime.Instant +import kotlinx.datetime.TimeZone +import kotlinx.datetime.monthsUntil + +interface ItemDecorator { + fun getOrNull(item: Value): Generic? +} + +object ItemDecoratorNone : ItemDecorator { + override fun getOrNull(item: Any) = null +} + +class ItemDecoratorDate( + private val dateFormatter: DateFormatter, + private val selector: (Value) -> Instant?, + private val factory: (String, String) -> Generic, +) : ItemDecorator { + private val past = Instant.fromEpochMilliseconds(0L) + + /** + * Last shown month, used to not repeat the sections + * if it stays the same. + */ + private var lastMonths: Int? = null + + override fun getOrNull(item: Value): Generic? { + val instant = selector(item) ?: return null + val months = instant + .monthsUntil(past, TimeZone.UTC) + if (months == lastMonths) { + return null + } + + lastMonths = months + + val text = dateFormatter.formatDateShort(instant) + return factory( + "decorator.date.$months", + text, + ) + } +} + +class ItemDecoratorTitle( + private val selector: (Value) -> String?, + private val factory: (String, String) -> Generic, +) : ItemDecorator { + /** + * Last shown character, used to not repeat the sections + * if it stays the same. + */ + private var lastChar: Char? = null + + override fun getOrNull(item: Value): Generic? { + val char = selector(item) + ?.firstOrNull() + ?.uppercaseChar() + // Replace all non letter symbols with a common + // character. + ?.takeIf { it.isLetter() } + ?: '#' + if (char == lastChar) { + return null + } + + lastChar = char + return factory( + "decorator.title.$char", + char.toString(), + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/dialog/Dialog.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/dialog/Dialog.kt new file mode 100644 index 00000000..e57ccd4f --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/dialog/Dialog.kt @@ -0,0 +1,229 @@ +package com.artemchep.keyguard.feature.dialog + +import androidx.compose.foundation.background +import androidx.compose.foundation.gestures.detectTapGestures +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.BoxScope +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ColumnScope +import androidx.compose.foundation.layout.ExperimentalLayoutApi +import androidx.compose.foundation.layout.FlowRow +import androidx.compose.foundation.layout.FlowRowScope +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.consumeWindowInsets +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.union +import androidx.compose.foundation.layout.widthIn +import androidx.compose.foundation.layout.windowInsetsPadding +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.LocalAbsoluteTonalElevation +import androidx.compose.material3.LocalTextStyle +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.ProvideTextStyle +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.material3.surfaceColorAtElevation +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.input.nestedscroll.nestedScroll +import androidx.compose.ui.input.pointer.pointerInput +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.feature.navigation.LocalNavigationController +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.platform.leIme +import com.artemchep.keyguard.platform.leSystemBars +import com.artemchep.keyguard.ui.theme.Dimens +import com.artemchep.keyguard.ui.theme.combineAlpha +import com.artemchep.keyguard.ui.util.HorizontalDivider + +// See: +// https://m3.material.io/components/dialogs/specs#9a8c226b-19fa-4d6b-894e-e7d5ca9203e8 + +@OptIn(ExperimentalMaterial3Api::class, ExperimentalLayoutApi::class) +@Composable +fun Dialog( + icon: (@Composable () -> Unit)? = null, + title: (@Composable ColumnScope.() -> Unit)?, + content: (@Composable BoxScope.() -> Unit)?, + contentScrollable: Boolean = true, + actions: @Composable FlowRowScope.() -> Unit, +) { + Dialog { + val scrollState = rememberScrollState() + val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior() + Column( + modifier = Modifier, + ) { + Column( + modifier = Modifier + .weight(1f, fill = false) + .nestedScroll(scrollBehavior.nestedScrollConnection), + ) { + Spacer( + modifier = Modifier + .height(24.dp), + ) + if (title != null) { + val centerAlign = icon != null + Column( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding) + .fillMaxWidth(), + horizontalAlignment = if (centerAlign) { + Alignment.CenterHorizontally + } else { + Alignment.Start + }, + ) { + if (icon != null) { + icon() + Spacer( + modifier = Modifier + .height(16.dp), + ) + } + ProvideTextStyle( + MaterialTheme.typography.titleLarge + .copy( + textAlign = if (centerAlign) { + TextAlign.Center + } else { + TextAlign.Start + }, + ), + ) { + title() + } + Spacer( + modifier = Modifier + .height(16.dp), + ) + } + } + if (content != null) { + Box { + Box( + modifier = Modifier + .fillMaxWidth() + .then( + if (contentScrollable) { + Modifier + .verticalScroll(scrollState) + } else { + Modifier + }, + ), + contentAlignment = Alignment.TopStart, + ) { + CompositionLocalProvider( + LocalTextStyle provides MaterialTheme.typography.bodyMedium, + ) { + content() + } + } + androidx.compose.animation.AnimatedVisibility( + modifier = Modifier + .align(Alignment.TopCenter) + .fillMaxWidth(), + visible = scrollState.canScrollBackward && contentScrollable, + ) { + HorizontalDivider(transparency = false) + } + androidx.compose.animation.AnimatedVisibility( + modifier = Modifier + .align(Alignment.BottomCenter) + .fillMaxWidth(), + visible = scrollState.canScrollForward && contentScrollable, + ) { + HorizontalDivider(transparency = false) + } + } + Spacer( + modifier = Modifier + .height(16.dp), + ) + } + } + FlowRow( + modifier = Modifier + .padding( + start = 16.dp, + end = 16.dp, + ) + .fillMaxWidth(), + verticalArrangement = Arrangement.spacedBy(8.dp), + horizontalArrangement = Arrangement.spacedBy(8.dp, Alignment.End), + ) { + actions() + } + Spacer( + modifier = Modifier + .height(16.dp), + ) + } + } +} + +@Composable +fun Dialog( + content: @Composable BoxScope.() -> Unit, +) { + val updatedNavController by rememberUpdatedState(LocalNavigationController.current) + + val tintColor = MaterialTheme.colorScheme.background + .combineAlpha(0.8f) + Box( + modifier = Modifier + .background(tintColor) + .pointerInput(Unit) { + detectTapGestures { + val intent = NavigationIntent.Pop + updatedNavController.queue(intent) + } + } + .fillMaxSize(), + ) { + CompositionLocalProvider( + LocalAbsoluteTonalElevation provides 8.dp, + ) { + val verticalInsets = WindowInsets.leSystemBars + .union(WindowInsets.leIme) + Box( + modifier = Modifier + .padding(16.dp) + .windowInsetsPadding(verticalInsets) + .consumeWindowInsets(verticalInsets) + .clip(MaterialTheme.shapes.extraLarge) + .background( + MaterialTheme.colorScheme + .surfaceColorAtElevation(LocalAbsoluteTonalElevation.current), + ) + .widthIn( + min = 280.dp, + max = 560.dp, + ) + .align(Alignment.Center) + // Eat all pointer inputs from within the + // dialog composable. + .pointerInput(Unit) { + detectTapGestures { + } + }, + ) { + content() + } + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/duplicates/DuplicatesRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/duplicates/DuplicatesRoute.kt new file mode 100644 index 00000000..40ce9fe6 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/duplicates/DuplicatesRoute.kt @@ -0,0 +1,18 @@ +package com.artemchep.keyguard.feature.duplicates + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.common.model.DFilter +import com.artemchep.keyguard.feature.navigation.Route + +data class DuplicatesRoute( + val args: Args = Args(), +) : Route { + data class Args( + val filter: DFilter? = null, + ) + + @Composable + override fun Content() { + DuplicatesScreen(args) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/duplicates/DuplicatesScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/duplicates/DuplicatesScreen.kt new file mode 100644 index 00000000..0cff0a52 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/duplicates/DuplicatesScreen.kt @@ -0,0 +1,193 @@ +package com.artemchep.keyguard.feature.duplicates + +import androidx.compose.foundation.ExperimentalFoundationApi +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.layout.widthIn +import androidx.compose.foundation.lazy.items +import androidx.compose.material.ExperimentalMaterialApi +import androidx.compose.material3.DropdownMenu +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.input.nestedscroll.nestedScroll +import androidx.compose.ui.text.style.TextOverflow +import com.artemchep.keyguard.common.model.fold +import com.artemchep.keyguard.common.model.getOrNull +import com.artemchep.keyguard.feature.EmptySearchView +import com.artemchep.keyguard.feature.home.vault.component.VaultListItem +import com.artemchep.keyguard.feature.navigation.NavigationIcon +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.DefaultSelection +import com.artemchep.keyguard.ui.DropdownMenuItemFlat +import com.artemchep.keyguard.ui.DropdownMinWidth +import com.artemchep.keyguard.ui.DropdownScopeImpl +import com.artemchep.keyguard.ui.ExpandedIfNotEmpty +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.ScaffoldLazyColumn +import com.artemchep.keyguard.ui.icons.DropdownIcon +import com.artemchep.keyguard.ui.skeleton.SkeletonItem +import com.artemchep.keyguard.ui.theme.Dimens +import com.artemchep.keyguard.ui.theme.combineAlpha +import com.artemchep.keyguard.ui.toolbar.LargeToolbar +import dev.icerock.moko.resources.compose.stringResource + +@OptIn( + ExperimentalMaterial3Api::class, + ExperimentalMaterialApi::class, + ExperimentalFoundationApi::class, +) +@Composable +fun DuplicatesScreen( + args: DuplicatesRoute.Args, +) { + val loadableState = produceDuplicatesState(args) + val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior() + ScaffoldLazyColumn( + modifier = Modifier + .nestedScroll(scrollBehavior.nestedScrollConnection), + topAppBarScrollBehavior = scrollBehavior, + topBar = { + LargeToolbar( + title = { + Column() { + Text( + text = stringResource(Res.strings.watchtower_header_title), + style = MaterialTheme.typography.labelSmall, + color = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + overflow = TextOverflow.Ellipsis, + maxLines = 2, + ) + Text( + text = stringResource(Res.strings.watchtower_item_duplicate_items_title), + style = MaterialTheme.typography.titleMedium, + overflow = TextOverflow.Ellipsis, + maxLines = 1, + ) + } + }, + navigationIcon = { + NavigationIcon() + }, + actions = { + var isAutofillWindowShowing by remember { + mutableStateOf(false) + } + + val normalContentColor = LocalContentColor.current + TextButton( + onClick = { + isAutofillWindowShowing = true + }, + ) { + Column { + Text(text = "Sensitivity") + val textOrNull = + loadableState.getOrNull()?.sensitivity?.name + ?.lowercase() + ?.capitalize() + ExpandedIfNotEmpty( + valueOrNull = textOrNull, + ) { text -> + Text( + text = text, + style = MaterialTheme.typography.labelSmall, + color = normalContentColor + .combineAlpha(MediumEmphasisAlpha), + ) + } + } + Spacer( + modifier = Modifier + .width(Dimens.buttonIconPadding), + ) + DropdownIcon() + + // Inject the dropdown popup to the bottom of the + // content. + val onDismissRequest = { + isAutofillWindowShowing = false + } + DropdownMenu( + modifier = Modifier + .widthIn(min = DropdownMinWidth), + expanded = isAutofillWindowShowing, + onDismissRequest = onDismissRequest, + ) { + val scope = DropdownScopeImpl(this, onDismissRequest = onDismissRequest) + loadableState.getOrNull()?.sensitivities.orEmpty() + .forEachIndexed { index, action -> + scope.DropdownMenuItemFlat( + action = action, + ) + } + } + } + }, + scrollBehavior = scrollBehavior, + ) + }, + bottomBar = { + val screenState = loadableState.getOrNull() + ?: return@ScaffoldLazyColumn + val selectionState = screenState.selectionStateFlow.collectAsState() + DefaultSelection( + state = selectionState.value, + ) + }, + ) { + loadableState.fold( + ifLoading = { + for (i in 0..2) { + item(i) { + SkeletonItem() + } + } + }, + ifOk = { state -> + val items = state.items + if (items.isEmpty()) { + item("header.empty") { + NoItemsPlaceholder() + } + } + items( + items = items, + key = { model -> model.id }, + ) { model -> + VaultListItem( + modifier = Modifier + .animateItemPlacement(), + item = model, + ) + } + }, + ) + } +} + +@Composable +private fun NoItemsPlaceholder( + modifier: Modifier = Modifier, +) { + EmptySearchView( + modifier = modifier, + text = { + Text( + text = stringResource(Res.strings.duplicates_empty_label), + ) + }, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/duplicates/DuplicatesState.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/duplicates/DuplicatesState.kt new file mode 100644 index 00000000..7c8f602a --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/duplicates/DuplicatesState.kt @@ -0,0 +1,14 @@ +package com.artemchep.keyguard.feature.duplicates + +import com.artemchep.keyguard.common.usecase.CipherDuplicatesCheck +import com.artemchep.keyguard.feature.home.vault.model.VaultItem2 +import com.artemchep.keyguard.ui.FlatItemAction +import com.artemchep.keyguard.ui.Selection +import kotlinx.coroutines.flow.StateFlow + +data class DuplicatesState( + val items: List, + val sensitivity: CipherDuplicatesCheck.Sensitivity, + val sensitivities: List, + val selectionStateFlow: StateFlow, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/duplicates/DuplicatesStateProducer.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/duplicates/DuplicatesStateProducer.kt new file mode 100644 index 00000000..c5e7aaa6 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/duplicates/DuplicatesStateProducer.kt @@ -0,0 +1,560 @@ +package com.artemchep.keyguard.feature.duplicates + +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Merge +import androidx.compose.runtime.Composable +import arrow.core.partially1 +import com.artemchep.keyguard.common.io.effectMap +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.model.AccountId +import com.artemchep.keyguard.common.model.DCollection +import com.artemchep.keyguard.common.model.DSecret +import com.artemchep.keyguard.common.model.DSecretDuplicateGroup +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.model.ToastMessage +import com.artemchep.keyguard.common.model.canDelete +import com.artemchep.keyguard.common.model.canEdit +import com.artemchep.keyguard.common.service.clipboard.ClipboardService +import com.artemchep.keyguard.common.usecase.CipherDuplicatesCheck +import com.artemchep.keyguard.common.usecase.CipherToolbox +import com.artemchep.keyguard.common.usecase.GetAppIcons +import com.artemchep.keyguard.common.usecase.GetCanWrite +import com.artemchep.keyguard.common.usecase.GetCiphers +import com.artemchep.keyguard.common.usecase.GetCollections +import com.artemchep.keyguard.common.usecase.GetConcealFields +import com.artemchep.keyguard.common.usecase.GetOrganizations +import com.artemchep.keyguard.common.usecase.GetTotpCode +import com.artemchep.keyguard.common.usecase.GetWebsiteIcons +import com.artemchep.keyguard.common.util.flow.persistingStateIn +import com.artemchep.keyguard.feature.attachments.SelectableItemState +import com.artemchep.keyguard.feature.attachments.SelectableItemStateRaw +import com.artemchep.keyguard.feature.confirmation.elevatedaccess.createElevatedAccessDialogIntent +import com.artemchep.keyguard.feature.generator.history.mapLatestScoped +import com.artemchep.keyguard.feature.home.vault.model.VaultItem2 +import com.artemchep.keyguard.feature.home.vault.screen.VaultViewRoute +import com.artemchep.keyguard.feature.home.vault.screen.toVaultListItem +import com.artemchep.keyguard.feature.home.vault.screen.verify +import com.artemchep.keyguard.feature.home.vault.util.cipherChangeNameAction +import com.artemchep.keyguard.feature.home.vault.util.cipherChangePasswordAction +import com.artemchep.keyguard.feature.home.vault.util.cipherCopyToAction +import com.artemchep.keyguard.feature.home.vault.util.cipherDeleteAction +import com.artemchep.keyguard.feature.home.vault.util.cipherDisableConfirmAccessAction +import com.artemchep.keyguard.feature.home.vault.util.cipherEditAction +import com.artemchep.keyguard.feature.home.vault.util.cipherEnableConfirmAccessAction +import com.artemchep.keyguard.feature.home.vault.util.cipherMergeInto +import com.artemchep.keyguard.feature.home.vault.util.cipherMergeIntoAction +import com.artemchep.keyguard.feature.home.vault.util.cipherMoveToFolderAction +import com.artemchep.keyguard.feature.home.vault.util.cipherRestoreAction +import com.artemchep.keyguard.feature.home.vault.util.cipherTrashAction +import com.artemchep.keyguard.feature.home.vault.util.cipherViewPasswordHistoryAction +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.feature.navigation.state.RememberStateFlowScope +import com.artemchep.keyguard.feature.navigation.state.copy +import com.artemchep.keyguard.feature.navigation.state.produceScreenState +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItemAction +import com.artemchep.keyguard.ui.Selection +import com.artemchep.keyguard.ui.icons.KeyguardFavourite +import com.artemchep.keyguard.ui.icons.KeyguardFavouriteOutline +import com.artemchep.keyguard.ui.icons.icon +import com.artemchep.keyguard.ui.selection.SelectionHandle +import com.artemchep.keyguard.ui.selection.selectionHandle +import kotlinx.collections.immutable.toPersistentList +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.flow.map +import org.kodein.di.DirectDI +import org.kodein.di.compose.localDI +import org.kodein.di.direct +import org.kodein.di.instance + +private data class ConfigMapper( + val concealFields: Boolean, + val appIcons: Boolean, + val websiteIcons: Boolean, +) + +private data class SelectionData( + val ids: Set, + val group: String, +) + +@Composable +fun produceDuplicatesState( + args: DuplicatesRoute.Args, +) = with(localDI().direct) { + produceDuplicatesState( + directDI = this, + args = args, + clipboardService = instance(), + getTotpCode = instance(), + getConcealFields = instance(), + getAppIcons = instance(), + getWebsiteIcons = instance(), + getOrganizations = instance(), + getCollections = instance(), + getCiphers = instance(), + getCanWrite = instance(), + cipherToolbox = instance(), + cipherDuplicatesCheck = instance(), + ) +} + +@Composable +fun produceDuplicatesState( + directDI: DirectDI, + args: DuplicatesRoute.Args, + clipboardService: ClipboardService, + getTotpCode: GetTotpCode, + getConcealFields: GetConcealFields, + getAppIcons: GetAppIcons, + getWebsiteIcons: GetWebsiteIcons, + getOrganizations: GetOrganizations, + getCollections: GetCollections, + getCiphers: GetCiphers, + getCanWrite: GetCanWrite, + cipherToolbox: CipherToolbox, + cipherDuplicatesCheck: CipherDuplicatesCheck, +): Loadable = produceScreenState( + key = "duplicates", + initial = Loadable.Loading, + args = arrayOf( + getOrganizations, + getCiphers, + cipherDuplicatesCheck, + ), +) { + val copy = copy(clipboardService) + val sensitivitySink = mutablePersistedFlow("sensitivity") { + CipherDuplicatesCheck.Sensitivity.NORMAL + } + val selectionHandle = selectionHandle("selection") + val selectionGroupSink = mutablePersistedFlow("selection_group_id") { + "" + } + val selectionFlow = combine( + selectionGroupSink, + selectionHandle.idsFlow, + ) { group, ids -> + SelectionData( + group = group, + ids = ids, + ) + } + + fun onClickCipher( + cipher: DSecret, + ) { + val intent = NavigationIntent.NavigateToRoute( + VaultViewRoute( + itemId = cipher.id, + accountId = cipher.accountId, + ), + ) + navigate(intent) + } + + fun onLongClickCipher( + group: DSecretDuplicateGroup, + cipher: DSecret, + ) { + val canToggle = selectionGroupSink.value == group.id || + selectionHandle.idsFlow.value.isEmpty() + if (canToggle) { + selectionGroupSink.value = group.id + selectionHandle.toggleSelection(cipher.id) + } + } + + val configFlow = combine( + getConcealFields(), + getAppIcons(), + getWebsiteIcons(), + ) { concealFields, appIcons, websiteIcons -> + ConfigMapper( + concealFields = concealFields, + appIcons = appIcons, + websiteIcons = websiteIcons, + ) + }.distinctUntilChanged() + + val organizationsByIdFlow = getOrganizations() + .map { organizations -> + organizations + .associateBy { it.id } + } + + val ciphersComparator = Comparator { a, b -> + var r = a.name.compareTo(b.name, ignoreCase = true) + if (r == 0) r = a.id.compareTo(b.id) + r + } + val ciphersFlow = getCiphers() + .map { ciphers -> + ciphers + .filter { it.deletedDate == null } + .run { + val filter = args.filter + if (filter != null) { + val predicate = filter.prepare(directDI, ciphers) + filter(predicate) + } else { + this + } + } + } + .shareInScreenScope() + val groupsFlow = ciphersFlow + .combine(sensitivitySink) { ciphers, sensitivity -> + val groups = + cipherDuplicatesCheck.invoke(ciphers, sensitivity) + groups + .map { group -> + val groupedCiphers = group.ciphers + .sortedWith(ciphersComparator) + group.copy(ciphers = groupedCiphers) + } + .sortedByDescending { it.accuracy } + } + val itemsFlow = combine( + groupsFlow, + organizationsByIdFlow, + configFlow, + ) { groups, organizationsById, cfg -> Triple(groups, organizationsById, cfg) } + .mapLatestScoped { (groups, organizationsById, cfg) -> + val totalItemsCount = groups.sumOf { it.ciphers.size } + groups + .flatMapIndexed { index: Int, group -> + val groupedItems = group + .ciphers + .map { cipher -> + val selectableFlow = selectionFlow + .map { data -> + val matchesGroupId = data.group == group.id + SelectableItemStateRaw( + selecting = matchesGroupId && data.ids.isNotEmpty(), + selected = matchesGroupId && cipher.id in data.ids, + canSelect = matchesGroupId || data.ids.isEmpty(), + ) + } + .distinctUntilChanged() + .map { raw -> + val toggle = ::onLongClickCipher + .partially1(group) + .partially1(cipher) + val onClick = toggle.takeIf { raw.selecting } + val onLongClick = toggle + .takeIf { !raw.selecting && raw.canSelect } + SelectableItemState( + selecting = raw.selecting, + selected = raw.selected, + can = raw.canSelect, + onClick = onClick, + onLongClick = onLongClick, + ) + } + val openedStateFlow = flowOf("") + .map { + val isOpened = it == cipher.id + VaultItem2.Item.OpenedState(isOpened) + } + val sharing = SharingStarted.WhileSubscribed(1000L) + val localStateFlow = combine( + selectableFlow, + openedStateFlow, + ) { selectableState, openedState -> + VaultItem2.Item.LocalState( + openedState, + selectableState, + ) + }.persistingStateIn(this, sharing) + val item = cipher.toVaultListItem( + groupId = group.id, + copy = copy, + translator = this@produceScreenState, + getTotpCode = getTotpCode, + concealFields = cfg.concealFields, + appIcons = cfg.appIcons, + websiteIcons = cfg.websiteIcons, + organizationsById = organizationsById, + localStateFlow = localStateFlow, + onClick = { + VaultItem2.Item.Action.Go( + onClick = ::onClickCipher + .partially1(cipher), + ) + }, + onClickPasskey = { + null + }, + ) + item + } + val allItems = mutableListOf() + if (index > 0) { + allItems += VaultItem2.Section( + id = group.id, + ) + } + allItems += groupedItems + allItems += VaultItem2.Button( + id = "merge." + group.id, + title = translate(Res.strings.ciphers_action_merge_title), + leading = icon(Icons.Outlined.Merge), + onClick = { + val ciphers = groupedItems + .map { it.source } + cipherMergeInto( + cipherMerge = cipherToolbox.cipherMerge, + ciphers = ciphers, + ) + }, + ) + allItems + } + } + + val selectionStateFlow = createCipherSelectionFlow( + selectionHandle = selectionHandle, + ciphersFlow = ciphersFlow, + collectionsFlow = getCollections(), + canWriteFlow = getCanWrite(), + toolbox = cipherToolbox, + ) + .persistingStateIn(this, SharingStarted.WhileSubscribed()) + + itemsFlow + .combine(sensitivitySink) { items, sensitivity -> + val state = DuplicatesState( + items = items, + sensitivity = sensitivity, + sensitivities = CipherDuplicatesCheck.Sensitivity + .entries + .map { s -> + FlatItemAction( + title = s.name + .lowercase() + .capitalize(), + onClick = { + sensitivitySink.value = s + }, + ) + }, + selectionStateFlow = selectionStateFlow, + ) + Loadable.Ok(state) + } +} + +fun RememberStateFlowScope.createCipherSelectionFlow( + selectionHandle: SelectionHandle, + ciphersFlow: Flow>, + collectionsFlow: Flow>, + canWriteFlow: Flow, + // + toolbox: CipherToolbox, +) = combine( + ciphersFlow, + selectionHandle.idsFlow, + collectionsFlow, + canWriteFlow, +) { ciphers, selectedCipherIds, collections, canWrite -> + if (selectedCipherIds.isEmpty()) { + return@combine null + } + + val selectedCiphers = ciphers + .filter { it.id in selectedCipherIds } + val selectedCiphersByAccount = selectedCiphers + .groupBy { it.accountId } + + val selectedCiphersAllLogins = selectedCiphers.all { it.type == DSecret.Type.Login } + val selectedCiphersAllSameType = kotlin.run { + if (selectedCiphersAllLogins) { + return@run true + } + + val type = selectedCiphers.firstOrNull()?.type + selectedCiphers.all { it.type == type } + } + + val selectedCollections = selectedCiphers + .asSequence() + .flatMap { it.collectionIds } + .distinct() + .mapNotNull { collectionId -> + collections + .firstOrNull { it.id == collectionId } + } + // Find ciphers that have some limitations + val hasCanNotEditCiphers = selectedCiphers.any { !it.canEdit() } + val hasCanNotDeleteCiphers = selectedCiphers.any { !it.canDelete() } + val hasCanNotWriteCiphers = selectedCollections.any { it.readOnly } + val hasRepromptCiphers = selectedCiphers.any { it.reprompt } + + val canEdit = canWrite && !hasCanNotEditCiphers && !hasCanNotWriteCiphers + val canDelete = canWrite && !hasCanNotDeleteCiphers && !hasCanNotWriteCiphers + + val verify: ((() -> Unit) -> Unit)? = if (hasRepromptCiphers) { + // lambda + { block -> + val intent = createElevatedAccessDialogIntent { + block() + } + navigate(intent) + } + } else { + null + } + + val actions = mutableListOf() + // If any of the ciphers can be favourite-d, then we + // show an action to do it! + if (canEdit && selectedCiphers.any { !it.favorite }) { + actions += FlatItemAction( + icon = Icons.Outlined.KeyguardFavourite, + title = translate(Res.strings.ciphers_action_add_to_favorites_title), + onClick = { + val filteredCipherIds = selectedCiphers + .asSequence() + .filter { !it.favorite } + .map { it.id } + .toSet() + toolbox + .favouriteCipherById( + filteredCipherIds, + true, + ) + .effectMap { + val message = ToastMessage( + title = "Add to favourites", + ) + message(message) + } + .launchIn(appScope) + }, + ) + } + // If any of the ciphers can be un-favourited, then we + // show an action to do it! + if (canEdit && selectedCiphers.any { it.favorite }) { + actions += FlatItemAction( + icon = Icons.Outlined.KeyguardFavouriteOutline, + title = translate(Res.strings.ciphers_action_remove_from_favorites_title), + onClick = { + val filteredCipherIds = selectedCiphers + .asSequence() + .filter { it.favorite } + .map { it.id } + .toSet() + toolbox + .favouriteCipherById( + filteredCipherIds, + false, + ) + .effectMap { + val message = ToastMessage( + title = "Removed from favourites", + ) + message(message) + } + .launchIn(appScope) + }, + ) + } + + if (canEdit && selectedCiphers.any { !it.reprompt }) { + actions += cipherEnableConfirmAccessAction( + rePromptCipherById = toolbox.rePromptCipherById, + ciphers = selectedCiphers, + ) + } + if (canEdit && selectedCiphers.any { it.reprompt }) { + actions += cipherDisableConfirmAccessAction( + rePromptCipherById = toolbox.rePromptCipherById, + ciphers = selectedCiphers, + ).verify(verify) + } + + if (canEdit && selectedCiphers.size == 1) { + val cipher = selectedCiphers.first() + actions += cipherEditAction( + cipher = cipher, + ).verify(verify) + } + + if (selectedCiphers.size == 1 && selectedCiphersAllLogins) { + val cipher = selectedCiphers.first() + if (!cipher.login?.passwordHistory.isNullOrEmpty()) { + actions += cipherViewPasswordHistoryAction( + cipher = cipher, + ).verify(verify) + } + } + + if (canEdit) { + actions += cipherChangeNameAction( + changeCipherNameById = toolbox.changeCipherNameById, + ciphers = selectedCiphers, + ) + } + + if (canEdit && selectedCiphersAllLogins) { + actions += cipherChangePasswordAction( + changeCipherPasswordById = toolbox.changeCipherPasswordById, + ciphers = selectedCiphers, + ).verify(verify) + } + + if (canWrite && selectedCiphersAllSameType && selectedCiphers.size > 1) { + actions += cipherMergeIntoAction( + cipherMerge = toolbox.cipherMerge, + ciphers = selectedCiphers, + ).verify(verify) + } + + if (canWrite) { + actions += cipherCopyToAction( + copyCipherById = toolbox.copyCipherById, + ciphers = selectedCiphers, + ) + } + + if (canEdit && selectedCiphersByAccount.size == 1) { + val selectedAccount = selectedCiphersByAccount.entries.first() + actions += cipherMoveToFolderAction( + moveCipherToFolderById = toolbox.moveCipherToFolderById, + accountId = AccountId(selectedAccount.key), + ciphers = selectedAccount.value, + ) + } + + if (canDelete && selectedCiphers.any { it.deletedDate != null }) { + actions += cipherRestoreAction( + restoreCipherById = toolbox.restoreCipherById, + ciphers = selectedCiphers, + ) + } + if (canDelete && selectedCiphers.any { it.deletedDate == null && it.service.remote != null }) { + actions += cipherTrashAction( + trashCipherById = toolbox.trashCipherById, + ciphers = selectedCiphers, + ) + } + + if (canDelete && selectedCiphers.all { it.deletedDate != null || it.service.remote == null }) { + actions += cipherDeleteAction( + removeCipherById = toolbox.removeCipherById, + ciphers = selectedCiphers, + ) + } + + Selection( + count = selectedCiphers.size, + actions = actions.toPersistentList(), + onClear = selectionHandle::clearSelection, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/emailleak/EmailLeakRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/emailleak/EmailLeakRoute.kt new file mode 100644 index 00000000..770a0bb4 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/emailleak/EmailLeakRoute.kt @@ -0,0 +1,94 @@ +package com.artemchep.keyguard.feature.emailleak + +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.FactCheck +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.common.model.AccountId +import com.artemchep.keyguard.feature.navigation.DialogRoute +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.feature.navigation.state.TranslatorScope +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItemAction +import com.artemchep.keyguard.ui.icons.icon + +data class EmailLeakRoute( + val args: Args, +) : DialogRoute { + companion object { + fun checkBreachesEmailActionOrNull( + translator: TranslatorScope, + accountId: AccountId, + email: String, + navigate: (NavigationIntent) -> Unit, + ) = checkBreachesEmailAction( + translator = translator, + accountId = accountId, + email = email, + navigate = navigate, + ) + + fun checkBreachesEmailAction( + translator: TranslatorScope, + accountId: AccountId, + email: String, + navigate: (NavigationIntent) -> Unit, + ) = FlatItemAction( + leading = icon(Icons.Outlined.FactCheck), + title = translator.translate(Res.strings.email_action_check_data_breach_title), + onClick = { + val route = EmailLeakRoute( + args = Args( + accountId = accountId, + email = email, + ), + ) + val intent = NavigationIntent.NavigateToRoute(route) + navigate(intent) + }, + ) + + fun checkBreachesUsernameActionOrNull( + translator: TranslatorScope, + accountId: AccountId, + username: String, + navigate: (NavigationIntent) -> Unit, + ) = checkBreachesUsernameAction( + translator = translator, + accountId = accountId, + username = username, + navigate = navigate, + ) + + fun checkBreachesUsernameAction( + translator: TranslatorScope, + accountId: AccountId, + username: String, + navigate: (NavigationIntent) -> Unit, + ) = FlatItemAction( + leading = icon(Icons.Outlined.FactCheck), + title = translator.translate(Res.strings.username_action_check_data_breach_title), + onClick = { + val route = EmailLeakRoute( + args = Args( + accountId = accountId, + email = username, + ), + ) + val intent = NavigationIntent.NavigateToRoute(route) + navigate(intent) + }, + ) + } + + data class Args( + val accountId: AccountId, + val email: String, + ) + + @Composable + override fun Content() { + EmailLeakScreen( + args = args, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/emailleak/EmailLeakScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/emailleak/EmailLeakScreen.kt new file mode 100644 index 00000000..9938120a --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/emailleak/EmailLeakScreen.kt @@ -0,0 +1,280 @@ +package com.artemchep.keyguard.feature.emailleak + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ColumnScope +import androidx.compose.foundation.layout.ExperimentalLayoutApi +import androidx.compose.foundation.layout.FlowRow +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.FactCheck +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.ProvideTextStyle +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.text.font.FontFamily +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.model.getOrNull +import com.artemchep.keyguard.common.usecase.NumberFormatter +import com.artemchep.keyguard.feature.dialog.Dialog +import com.artemchep.keyguard.feature.favicon.FaviconImage +import com.artemchep.keyguard.feature.home.vault.component.Section +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItem +import com.artemchep.keyguard.ui.FlatSimpleNote +import com.artemchep.keyguard.ui.FlatTextFieldBadge +import com.artemchep.keyguard.ui.HtmlText +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.SimpleNote +import com.artemchep.keyguard.ui.icons.icon +import com.artemchep.keyguard.ui.poweredby.PoweredByHaveibeenpwned +import com.artemchep.keyguard.ui.skeleton.SkeletonText +import com.artemchep.keyguard.ui.theme.Dimens +import com.artemchep.keyguard.ui.theme.combineAlpha +import com.artemchep.keyguard.ui.theme.infoContainer +import com.artemchep.keyguard.ui.util.HorizontalDivider +import dev.icerock.moko.resources.compose.stringResource +import org.kodein.di.compose.rememberInstance + +@Composable +fun EmailLeakScreen( + args: EmailLeakRoute.Args, +) { + val loadableState = produceEmailLeakState( + args = args, + ) + Dialog( + icon = icon(Icons.Outlined.FactCheck), + title = { + Text(stringResource(Res.strings.emailleak_title)) + }, + content = { + Column { + Text( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding), + text = stringResource(Res.strings.emailleak_note), + style = MaterialTheme.typography.bodySmall, + color = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + ) + Spacer( + modifier = Modifier + .height(16.dp), + ) + + when (loadableState) { + is Loadable.Loading -> { + ContentSkeleton() + } + + is Loadable.Ok -> { + Content( + state = loadableState.value, + ) + } + } + + Spacer( + modifier = Modifier + .height(4.dp), + ) + + PoweredByHaveibeenpwned( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding) + .fillMaxWidth(), + ) + } + }, + contentScrollable = true, + actions = { + val updatedOnClose by rememberUpdatedState(loadableState.getOrNull()?.onClose) + TextButton( + enabled = updatedOnClose != null, + onClick = { + updatedOnClose?.invoke() + }, + ) { + Text(stringResource(Res.strings.close)) + } + }, + ) +} + +@Composable +private fun ColumnScope.ContentSkeleton() { + FlatItem( + title = { + SkeletonText( + modifier = Modifier + .fillMaxWidth(0.8f), + ) + }, + text = { + SkeletonText( + modifier = Modifier + .fillMaxWidth(0.6f), + ) + }, + enabled = true, + elevation = 1.dp, + ) +} + +@Composable +private fun ColumnScope.Content( + state: EmailLeakState, +) { + val leaks = state.content.getOrNull()?.breaches + if (leaks == null) { + FlatSimpleNote( + type = SimpleNote.Type.WARNING, + text = stringResource(Res.strings.emailleak_failed_to_load_status_text), + ) + return + } + + if (leaks.isNotEmpty()) { + FlatSimpleNote( + type = SimpleNote.Type.WARNING, + title = stringResource(Res.strings.emailleak_breach_found_title), + ) + Section( + text = stringResource(Res.strings.emailleak_breach_section), + ) + } else { + FlatSimpleNote( + type = SimpleNote.Type.OK, + title = stringResource(Res.strings.emailleak_breach_not_found_title), + ) + } + leaks.forEachIndexed { index, item -> + if (index > 0) { + HorizontalDivider( + modifier = Modifier + .padding( + vertical = 16.dp, + ), + ) + } + + BreachItem( + modifier = Modifier + .padding( + horizontal = Dimens.horizontalPadding, + ), + item = item, + ) + } +} + +@OptIn(ExperimentalLayoutApi::class) +@Composable +private fun BreachItem( + modifier: Modifier = Modifier, + item: EmailLeakState.Breach, +) { + Column( + modifier = modifier, + verticalArrangement = Arrangement.spacedBy(8.dp), + ) { + Row( + verticalAlignment = Alignment.CenterVertically, + ) { + FaviconImage( + modifier = Modifier + .size(24.dp) + .clip(CircleShape), + imageModel = { item.icon }, + ) + Spacer( + modifier = Modifier + .width(16.dp), + ) + Column { + Text( + text = item.title, + style = MaterialTheme.typography.titleMedium, + ) + Text( + text = item.domain, + style = MaterialTheme.typography.bodyMedium, + color = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + fontFamily = FontFamily.Monospace, + ) + } + } + if (item.dataClasses.isNotEmpty()) { + FlowRow( + verticalArrangement = Arrangement.spacedBy(8.dp), + horizontalArrangement = Arrangement.spacedBy(8.dp), + ) { + item.dataClasses.forEach { dataClass -> + FlatTextFieldBadge( + backgroundColor = MaterialTheme.colorScheme.infoContainer, + text = dataClass, + ) + } + } + } + Column { + if (item.count != null) { + val numberFormatter: NumberFormatter by rememberInstance() + Text( + text = stringResource( + Res.plurals.emailleak_breach_accounts_count_plural, + item.count, + numberFormatter.formatNumber(item.count.toInt()), + ), + style = MaterialTheme.typography.labelSmall, + fontWeight = FontWeight.Black, + ) + } + if (item.occurredAt != null) { + Text( + text = stringResource( + Res.strings.emailleak_breach_occurred_at, + item.occurredAt, + ), + style = MaterialTheme.typography.labelSmall, + color = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + ) + } + if (item.reportedAt != null) { + Text( + text = stringResource( + Res.strings.emailleak_breach_reported_at, + item.reportedAt, + ), + style = MaterialTheme.typography.labelSmall, + color = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + ) + } + } + ProvideTextStyle(MaterialTheme.typography.bodySmall) { + HtmlText( + html = item.description, + ) + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/emailleak/EmailLeakState.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/emailleak/EmailLeakState.kt new file mode 100644 index 00000000..1865a49d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/emailleak/EmailLeakState.kt @@ -0,0 +1,31 @@ +package com.artemchep.keyguard.feature.emailleak + +import androidx.compose.runtime.Immutable +import arrow.core.Either +import kotlinx.collections.immutable.ImmutableList + +@Immutable +data class EmailLeakState( + val username: String, + val content: Either, + val onClose: (() -> Unit)? = null, +) { + @Immutable + data class Content( + val breaches: ImmutableList, + ) + + @Immutable + data class Breach( + val title: String, + val domain: String, + val description: String, + val icon: String?, + val count: Int?, + /** Time when this breach has occurred */ + val occurredAt: String?, + /** Time when this breach was acknowledged */ + val reportedAt: String?, + val dataClasses: List, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/emailleak/EmailLeakStateProducer.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/emailleak/EmailLeakStateProducer.kt new file mode 100644 index 00000000..78767648 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/emailleak/EmailLeakStateProducer.kt @@ -0,0 +1,77 @@ +package com.artemchep.keyguard.feature.emailleak + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.common.io.attempt +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.io.map +import com.artemchep.keyguard.common.model.CheckUsernameLeakRequest +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.usecase.CheckUsernameLeak +import com.artemchep.keyguard.common.usecase.DateFormatter +import com.artemchep.keyguard.feature.navigation.state.navigatePopSelf +import com.artemchep.keyguard.feature.navigation.state.produceScreenState +import kotlinx.collections.immutable.toImmutableList +import kotlinx.coroutines.flow.flowOf +import org.kodein.di.compose.localDI +import org.kodein.di.direct +import org.kodein.di.instance + +@Composable +fun produceEmailLeakState( + args: EmailLeakRoute.Args, +) = with(localDI().direct) { + produceEmailLeakState( + args = args, + checkUsernameLeak = instance(), + dateFormatter = instance(), + ) +} + +@Composable +fun produceEmailLeakState( + args: EmailLeakRoute.Args, + checkUsernameLeak: CheckUsernameLeak, + dateFormatter: DateFormatter, +): Loadable = produceScreenState( + key = "email_leak", + initial = Loadable.Loading, + args = arrayOf(), +) { + val request = CheckUsernameLeakRequest( + accountId = args.accountId, + username = args.email, + ) + val content = checkUsernameLeak(request) + .map { report -> + val breaches = report.leaks + .sortedByDescending { it.reportedAt } + .map { leak -> + EmailLeakState.Breach( + title = leak.title, + domain = leak.website, + icon = leak.icon, + count = leak.count, + description = leak.description, + occurredAt = leak.occurredAt + ?.let(dateFormatter::formatDate), + reportedAt = leak.reportedAt + ?.let(dateFormatter::formatDate), + dataClasses = leak.dataClasses, + ) + } + .toImmutableList() + EmailLeakState.Content( + breaches = breaches, + ) + } + .attempt() + .bind() + val state = EmailLeakState( + username = args.email, + content = content, + onClose = { + navigatePopSelf() + }, + ) + flowOf(Loadable.Ok(state)) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/favicon/Favicon.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/favicon/Favicon.kt new file mode 100644 index 00000000..b0c9270a --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/favicon/Favicon.kt @@ -0,0 +1,33 @@ +package com.artemchep.keyguard.feature.favicon + +import com.artemchep.keyguard.common.usecase.GetAccounts +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.onEach + +object Favicon { + var servers: List = emptyList() + + fun getServerOrNull(serverId: String?) = serverId + ?.let { id -> + servers.firstOrNull { it.id == id } + } + + fun launch( + scope: CoroutineScope, + getAccounts: GetAccounts, + ) { + getAccounts() + .map { accounts -> + accounts + .map { + FaviconAccountServer(it) + } + } + .onEach { servers -> + Favicon.servers = servers + } + .launchIn(scope) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/favicon/FaviconFetcher.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/favicon/FaviconFetcher.kt new file mode 100644 index 00000000..44f5d0d2 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/favicon/FaviconFetcher.kt @@ -0,0 +1,10 @@ +package com.artemchep.keyguard.feature.favicon + +data class FaviconUrl( + val serverId: String? = null, + val url: String, +) + +data class AppIconUrl( + val packageName: String, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/favicon/FaviconImage.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/favicon/FaviconImage.kt new file mode 100644 index 00000000..4eaa1162 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/favicon/FaviconImage.kt @@ -0,0 +1,10 @@ +package com.artemchep.keyguard.feature.favicon + +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier + +@Composable +expect fun FaviconImage( + imageModel: () -> Any?, + modifier: Modifier = Modifier, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/favicon/FaviconServer.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/favicon/FaviconServer.kt new file mode 100644 index 00000000..9c093977 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/favicon/FaviconServer.kt @@ -0,0 +1,42 @@ +package com.artemchep.keyguard.feature.favicon + +import com.artemchep.keyguard.common.model.DAccount +import com.artemchep.keyguard.feature.auth.common.util.verifyIsLocalUrl +import io.ktor.http.Url + +interface FaviconServer { + val id: String + + fun transform(url: String): String? +} + +class FaviconAccountServer( + account: DAccount, +) : FaviconServer { + override val id: String = account.accountId() + + private val transformer = account.faviconServer + + override fun transform( + url: String, + ): String? = kotlin.runCatching { + val ktorUrl = Url(url) + when (ktorUrl.specifiedPort) { + 80, + 443, + 0, + -> { + // All is fine, continue as if + // the port was not specified. + } + + else -> return@runCatching null + } + if (verifyIsLocalUrl(ktorUrl)) { + // Do not download local urls. + return@runCatching null + } + + transformer.invoke(ktorUrl.host) + }.getOrNull() +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/favicon/GravatarUrl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/favicon/GravatarUrl.kt new file mode 100644 index 00000000..903454a1 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/favicon/GravatarUrl.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.feature.favicon + +data class GravatarUrl( + val url: String, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/feedback/FeedbackRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/feedback/FeedbackRoute.kt new file mode 100644 index 00000000..216986d4 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/feedback/FeedbackRoute.kt @@ -0,0 +1,11 @@ +package com.artemchep.keyguard.feature.feedback + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.navigation.Route + +object FeedbackRoute : Route { + @Composable + override fun Content() { + FeedbackScreen() + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/feedback/FeedbackScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/feedback/FeedbackScreen.kt new file mode 100644 index 00000000..985180c6 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/feedback/FeedbackScreen.kt @@ -0,0 +1,152 @@ +package com.artemchep.keyguard.feature.feedback + +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.text.KeyboardOptions +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Info +import androidx.compose.material.icons.outlined.Send +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.runtime.Composable +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.Modifier +import androidx.compose.ui.input.nestedscroll.nestedScroll +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.input.KeyboardType +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.model.fold +import com.artemchep.keyguard.common.model.getOrNull +import com.artemchep.keyguard.feature.navigation.NavigationIcon +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.DefaultFab +import com.artemchep.keyguard.ui.FabState +import com.artemchep.keyguard.ui.FlatTextField +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.ScaffoldColumn +import com.artemchep.keyguard.ui.skeleton.SkeletonTextField +import com.artemchep.keyguard.ui.theme.Dimens +import com.artemchep.keyguard.ui.theme.combineAlpha +import com.artemchep.keyguard.ui.toolbar.LargeToolbar +import dev.icerock.moko.resources.compose.stringResource + +@Composable +fun FeedbackScreen() { + val loadableState = produceFeedbackScreenState() + FeedbackContent( + loadableState = loadableState, + ) +} + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +private fun FeedbackContent( + loadableState: Loadable, +) { + val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior() + ScaffoldColumn( + modifier = Modifier + .nestedScroll(scrollBehavior.nestedScrollConnection), + topAppBarScrollBehavior = scrollBehavior, + topBar = { + LargeToolbar( + title = { + Text( + text = stringResource(Res.strings.contactus_header_title), + ) + }, + navigationIcon = { + NavigationIcon() + }, + scrollBehavior = scrollBehavior, + ) + }, + floatingActionState = run { + val fabOnClick = loadableState.getOrNull()?.onSendClick + val fabState = if (fabOnClick != null) { + FabState( + onClick = fabOnClick, + model = null, + ) + } else { + null + } + rememberUpdatedState(newValue = fabState) + }, + floatingActionButton = { + DefaultFab( + icon = { + Icon(Icons.Outlined.Send, null) + }, + text = { + Text( + text = stringResource(Res.strings.send), + ) + }, + ) + }, + ) { + val contentModifier = Modifier + .fillMaxWidth() + .padding(horizontal = Dimens.horizontalPadding) + loadableState.fold( + ifLoading = { + SkeletonTextField( + modifier = contentModifier, + ) + }, + ifOk = { state -> + FlatTextField( + modifier = contentModifier, + label = stringResource(Res.strings.contactus_message_label), + value = state.message, + keyboardOptions = KeyboardOptions( + autoCorrect = true, + keyboardType = KeyboardType.Text, + ), + ) + }, + ) + Spacer( + modifier = Modifier + .height(32.dp), + ) + Icon( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding), + imageVector = Icons.Outlined.Info, + contentDescription = null, + tint = LocalContentColor.current.combineAlpha(alpha = MediumEmphasisAlpha), + ) + Spacer( + modifier = Modifier + .height(16.dp), + ) + Text( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding), + text = stringResource(Res.strings.contactus_english_note), + style = MaterialTheme.typography.bodyMedium, + fontWeight = FontWeight.Bold, + color = LocalContentColor.current.combineAlpha(alpha = MediumEmphasisAlpha), + ) + Spacer( + modifier = Modifier + .height(16.dp), + ) + Text( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding), + text = stringResource(Res.strings.contactus_thanks_note), + style = MaterialTheme.typography.bodyMedium, + color = LocalContentColor.current.combineAlpha(alpha = MediumEmphasisAlpha), + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/feedback/FeedbackState.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/feedback/FeedbackState.kt new file mode 100644 index 00000000..2f01a661 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/feedback/FeedbackState.kt @@ -0,0 +1,9 @@ +package com.artemchep.keyguard.feature.feedback + +import com.artemchep.keyguard.feature.auth.common.TextFieldModel2 + +data class FeedbackState( + val message: TextFieldModel2, + val onClear: (() -> Unit)? = null, + val onSendClick: (() -> Unit)? = null, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/feedback/FeedbackStateProducer.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/feedback/FeedbackStateProducer.kt new file mode 100644 index 00000000..b1be5d6c --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/feedback/FeedbackStateProducer.kt @@ -0,0 +1,74 @@ +package com.artemchep.keyguard.feature.feedback + +import androidx.compose.runtime.Composable +import arrow.core.partially1 +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.feature.auth.common.TextFieldModel2 +import com.artemchep.keyguard.feature.auth.common.Validated +import com.artemchep.keyguard.feature.auth.common.util.validatedFeedback +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.feature.navigation.state.PersistedStorage +import com.artemchep.keyguard.feature.navigation.state.produceScreenState +import kotlinx.coroutines.flow.map + +@Composable +fun produceFeedbackScreenState(): Loadable = produceScreenState( + key = "feedback", + initial = Loadable.Loading, +) { + val storage = kotlin.run { + val disk = loadDiskHandle("feedback") + PersistedStorage.InDisk(disk) + } + val messageSink = mutablePersistedFlow( + key = "message", + storage = storage, + ) { "" } + val messageState = mutableComposeState(messageSink) + + fun onSend(message: String) { + if (message == "send test crash report") { + val msg = "Test crash report." + throw RuntimeException(msg) + } + + val subject = getFeedbackSubject() + val intent = NavigationIntent.NavigateToEmail( + email = "artemchep+keyguard@gmail.com", + subject = subject, + body = message, + ) + navigate(intent) + } + + val validatedMessageFlow = messageSink + .validatedFeedback(this) + validatedMessageFlow + .map { validatedMessage -> + val canLogin = validatedMessage is Validated.Success + val message = TextFieldModel2.of( + messageState, + validatedMessage, + ) + FeedbackState( + message = message, + onSendClick = if (canLogin) { + // lambda + ::onSend.partially1(validatedMessage.model) + } else { + null + }, + onClear = if (validatedMessage.model.isNotEmpty()) { + // lambda + { + messageState.value = "" + } + } else { + null + }, + ) + } + .map { state -> + Loadable.Ok(state) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/feedback/FeedbackUtils.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/feedback/FeedbackUtils.kt new file mode 100644 index 00000000..bccf5948 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/feedback/FeedbackUtils.kt @@ -0,0 +1,3 @@ +package com.artemchep.keyguard.feature.feedback + +expect fun getFeedbackSubject(): String diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/filepicker/FilePickerEffect.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/filepicker/FilePickerEffect.kt new file mode 100644 index 00000000..9160f754 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/filepicker/FilePickerEffect.kt @@ -0,0 +1,9 @@ +package com.artemchep.keyguard.feature.filepicker + +import androidx.compose.runtime.Composable +import kotlinx.coroutines.flow.Flow + +@Composable +expect fun FilePickerEffect( + flow: Flow>, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/filepicker/FilePickerIntent.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/filepicker/FilePickerIntent.kt new file mode 100644 index 00000000..8d248603 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/filepicker/FilePickerIntent.kt @@ -0,0 +1,23 @@ +package com.artemchep.keyguard.feature.filepicker + +import com.artemchep.keyguard.platform.LeUri + +sealed interface FilePickerIntent { + val onResult: (R) -> Unit + + class OpenDocument( + /** The mime types to filter by, e.g. image/\*. */ + val mimeTypes: Array = mimeTypesAll, + override val onResult: (Ifo?) -> Unit, + ) : FilePickerIntent { + companion object { + val mimeTypesAll = arrayOf("*/*") + } + + data class Ifo( + val uri: LeUri, + val name: String?, + val size: Long?, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/filepicker/FilePickerUtils.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/filepicker/FilePickerUtils.kt new file mode 100644 index 00000000..ef7410bf --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/filepicker/FilePickerUtils.kt @@ -0,0 +1,34 @@ +package com.artemchep.keyguard.feature.filepicker + +import java.text.CharacterIterator +import java.text.StringCharacterIterator + +fun humanReadableByteCountBin(bytes: Long): String? { + val absB = if (bytes == Long.MIN_VALUE) Long.MAX_VALUE else Math.abs(bytes) + if (absB < 1024) { + return "$bytes B" + } + var value = absB + val ci: CharacterIterator = StringCharacterIterator("KMGTPE") + var i = 40 + while (i >= 0 && absB > 0xfffccccccccccccL shr i) { + value = value shr 10 + ci.next() + i -= 10 + } + value *= java.lang.Long.signum(bytes).toLong() + return java.lang.String.format("%.1f %ciB", value / 1024.0, ci.current()) +} + +fun humanReadableByteCountSI(bytes: Long): String { + var bytes = bytes + if (-1000 < bytes && bytes < 1000) { + return "$bytes B" + } + val ci: CharacterIterator = StringCharacterIterator("kMGTPE") + while (bytes <= -999950 || bytes >= 999950) { + bytes /= 1000 + ci.next() + } + return String.format("%.1f %cB", bytes / 1000.0, ci.current()) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/generator/GeneratorRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/generator/GeneratorRoute.kt new file mode 100644 index 00000000..8aa64aa5 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/generator/GeneratorRoute.kt @@ -0,0 +1,20 @@ +package com.artemchep.keyguard.feature.generator + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.navigation.Route + +data class GeneratorRoute( + val args: Args = Args(), +) : Route { + data class Args( + val username: Boolean = false, + val password: Boolean = false, + ) + + @Composable + override fun Content() { + GeneratorScreen( + args = args, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/generator/GeneratorScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/generator/GeneratorScreen.kt new file mode 100644 index 00000000..cc6cdb8e --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/generator/GeneratorScreen.kt @@ -0,0 +1,1000 @@ +package com.artemchep.keyguard.feature.generator + +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.animation.Crossfade +import androidx.compose.animation.ExperimentalAnimationApi +import androidx.compose.animation.animateContentSize +import androidx.compose.animation.fadeIn +import androidx.compose.animation.fadeOut +import androidx.compose.animation.scaleIn +import androidx.compose.animation.scaleOut +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.gestures.detectDragGesturesAfterLongPress +import androidx.compose.foundation.interaction.MutableInteractionSource +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.BoxWithConstraints +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ColumnScope +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.heightIn +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.layout.widthIn +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.ArrowDownward +import androidx.compose.material.icons.outlined.ArrowUpward +import androidx.compose.material.icons.outlined.ContentCopy +import androidx.compose.material.icons.outlined.History +import androidx.compose.material.icons.outlined.Info +import androidx.compose.material.icons.outlined.Refresh +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.LocalTextStyle +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Slider +import androidx.compose.material3.Surface +import androidx.compose.material3.Switch +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.getValue +import androidx.compose.runtime.key +import androidx.compose.runtime.movableContentOf +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.hapticfeedback.HapticFeedbackType +import androidx.compose.ui.input.nestedscroll.nestedScroll +import androidx.compose.ui.input.pointer.pointerInput +import androidx.compose.ui.platform.LocalHapticFeedback +import androidx.compose.ui.text.AnnotatedString +import androidx.compose.ui.text.SpanStyle +import androidx.compose.ui.text.buildAnnotatedString +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.text.withStyle +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import arrow.core.partially1 +import com.artemchep.keyguard.LocalAppMode +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.model.fold +import com.artemchep.keyguard.common.model.getOrNull +import com.artemchep.keyguard.feature.auth.common.IntFieldModel +import com.artemchep.keyguard.feature.home.vault.component.Section +import com.artemchep.keyguard.feature.navigation.NavigationIcon +import com.artemchep.keyguard.feature.twopane.TwoPaneScreen +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.DefaultFab +import com.artemchep.keyguard.ui.DisabledEmphasisAlpha +import com.artemchep.keyguard.ui.ExpandedIfNotEmpty +import com.artemchep.keyguard.ui.ExpandedIfNotEmptyForRow +import com.artemchep.keyguard.ui.FabState +import com.artemchep.keyguard.ui.FlatDropdown +import com.artemchep.keyguard.ui.FlatItem +import com.artemchep.keyguard.ui.FlatItemTextContent +import com.artemchep.keyguard.ui.FlatTextField +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.OptionsButton +import com.artemchep.keyguard.ui.PasswordStrengthBadge +import com.artemchep.keyguard.ui.ScaffoldColumn +import com.artemchep.keyguard.ui.collectIsInteractedWith +import com.artemchep.keyguard.ui.colorizePassword +import com.artemchep.keyguard.ui.icons.DropdownIcon +import com.artemchep.keyguard.ui.shimmer.shimmer +import com.artemchep.keyguard.ui.skeleton.SkeletonItem +import com.artemchep.keyguard.ui.skeleton.SkeletonSection +import com.artemchep.keyguard.ui.skeleton.SkeletonSlider +import com.artemchep.keyguard.ui.theme.Dimens +import com.artemchep.keyguard.ui.theme.combineAlpha +import com.artemchep.keyguard.ui.theme.horizontalPaddingHalf +import com.artemchep.keyguard.ui.theme.monoFontFamily +import com.artemchep.keyguard.ui.toolbar.LargeToolbar +import com.artemchep.keyguard.ui.toolbar.SmallToolbar +import com.artemchep.keyguard.ui.util.VerticalDivider +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.Job +import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.isActive +import kotlinx.coroutines.launch +import kotlin.math.roundToInt +import kotlin.math.roundToLong + +@Composable +fun GeneratorScreen( + args: GeneratorRoute.Args, +) { + val loadableState = produceGeneratorState( + mode = LocalAppMode.current, + args = args, + ) + + val sliderInteractionSource = remember { + MutableInteractionSource() + } + TwoPaneScreen( + detail = { modifier -> + GeneratorPaneDetail( + modifier = modifier, + loadableState = loadableState, + sliderInteractionSource = sliderInteractionSource, + ) + }, + ) { modifier, detailIsVisible -> + GeneratorPaneMaster( + modifier = modifier, + loadableState = loadableState, + showFilter = !detailIsVisible, + sliderInteractionSource = sliderInteractionSource, + ) + } +} + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +private fun GeneratorPaneDetail( + modifier: Modifier = Modifier, + loadableState: Loadable, + sliderInteractionSource: MutableInteractionSource, +) { + val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior() + ScaffoldColumn( + modifier = modifier + .nestedScroll(scrollBehavior.nestedScrollConnection), + topAppBarScrollBehavior = scrollBehavior, + topBar = { + SmallToolbar( + title = { + Text( + text = stringResource(Res.strings.filter_header_title), + style = MaterialTheme.typography.titleMedium, + ) + }, + actions = { + loadableState.fold( + ifLoading = { + }, + ifOk = { state -> + val updatedOnOpenHistory by rememberUpdatedState(state.onOpenHistory) + IconButton( + onClick = { + updatedOnOpenHistory() + }, + ) { + Icon( + imageVector = Icons.Outlined.History, + contentDescription = null, + ) + } + val actions = state.options + OptionsButton(actions) + }, + ) + }, + scrollBehavior = scrollBehavior, + ) + }, + ) { + loadableState.fold( + ifLoading = { + SkeletonItem( + titleWidthFraction = 0.6f, + textWidthFraction = null, + ) + SkeletonSection() + SkeletonItem() + SkeletonItem() + }, + ifOk = { state -> + GeneratorPaneDetailContent( + state = state, + sliderInteractionSource = sliderInteractionSource, + ) + }, + ) + } +} + +@Composable +private fun ColumnScope.GeneratorPaneDetailContent( + state: GeneratorState, + sliderInteractionSource: MutableInteractionSource, +) { + GeneratorType( + state = state, + ) + + GeneratorFilterItems( + filterFlow = state.filterState, + sliderInteractionSource = sliderInteractionSource, + ) +} + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +private fun GeneratorPaneMaster( + modifier: Modifier, + loadableState: Loadable, + showFilter: Boolean, + sliderInteractionSource: MutableInteractionSource, +) { + val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior() + ScaffoldColumn( + modifier = modifier + .nestedScroll(scrollBehavior.nestedScrollConnection), + topAppBarScrollBehavior = scrollBehavior, + topBar = { + LargeToolbar( + title = { + Text(stringResource(Res.strings.generator_header_title)) + }, + navigationIcon = { + NavigationIcon() + }, + actions = { + if (showFilter) { + loadableState.fold( + ifLoading = { + }, + ifOk = { state -> + val updatedOnOpenHistory by rememberUpdatedState(state.onOpenHistory) + IconButton( + onClick = { + updatedOnOpenHistory() + }, + ) { + Icon( + imageVector = Icons.Outlined.History, + contentDescription = null, + ) + } + val actions = state.options + OptionsButton(actions) + }, + ) + } + }, + scrollBehavior = scrollBehavior, + ) + }, + floatingActionState = run { + val valueStateOrNull = loadableState.getOrNull()?.valueState + val valueState = remember(valueStateOrNull) { + valueStateOrNull + ?: MutableStateFlow(null) + }.collectAsState() + + val onClick by remember(valueState) { + derivedStateOf { valueState.value?.onRefresh } + } + val fabState = FabState( + onClick = onClick, + model = null, + ) + rememberUpdatedState(fabState) + }, + floatingActionButton = { + DefaultFab( + icon = { + Icon( + imageVector = Icons.Outlined.Refresh, + contentDescription = null, + ) + }, + ) { + val valueState = loadableState.getOrNull()?.valueState?.collectAsState() + val valueExists by remember(valueState) { + derivedStateOf { + !valueState?.value?.password.isNullOrEmpty() + } + } + Text( + modifier = Modifier + .animateContentSize(), + text = if (valueExists) { + stringResource(Res.strings.generator_regenerate_button) + } else { + stringResource(Res.strings.generator_generate_button) + }, + ) + } + }, + ) { + loadableState.fold( + ifLoading = { + SkeletonItem() + }, + ifOk = { state -> + GeneratorPaneMasterContent( + state = state, + showFilter = showFilter, + sliderInteractionSource = sliderInteractionSource, + ) + }, + ) + } +} + +@Composable +private fun ColumnScope.GeneratorPaneMasterContent( + state: GeneratorState, + showFilter: Boolean, + sliderInteractionSource: MutableInteractionSource, +) { + if (showFilter) { + GeneratorType( + state = state, + ) + } + + GeneratorValue( + valueFlow = state.valueState, + sliderInteractionSource = sliderInteractionSource, + ) + + GeneratorFilterTip( + filterFlow = state.filterState, + ) + + if (showFilter) { + GeneratorFilterItems( + filterFlow = state.filterState, + sliderInteractionSource = sliderInteractionSource, + ) + } +} + +@Composable +fun ColumnScope.GeneratorType( + state: GeneratorState, +) { + val type by state.typeState.collectAsState() + FlatDropdown( + content = { + FlatItemTextContent( + title = { + Row( + verticalAlignment = Alignment.CenterVertically, + ) { + Text( + modifier = Modifier + .weight(1f, fill = false), + text = type.title, + style = MaterialTheme.typography.titleMedium, + ) + Spacer( + modifier = Modifier + .width(8.dp), + ) + DropdownIcon() + } + }, + ) + }, + dropdown = type.items, + ) +} + +@Composable +fun ColumnScope.GeneratorValue( + valueFlow: StateFlow, + sliderInteractionSource: MutableInteractionSource, +) { + val valueState = valueFlow.collectAsState() + ExpandedIfNotEmpty( + valueOrNull = valueState.value, + ) { value -> + val sliderInteractionSourceIsInteracted = + sliderInteractionSource.collectIsInteractedWith() + FlatDropdown( + elevation = 1.dp, + content = { + Crossfade( + targetState = value.password, + modifier = Modifier + .animateContentSize(), + ) { password -> + AutoResizeText( + text = if (password.isEmpty()) { + val color = LocalContentColor.current + .combineAlpha(DisabledEmphasisAlpha) + val text = stringResource(Res.strings.empty_value) + buildAnnotatedString { + withStyle( + style = SpanStyle(color = color), + ) { + append(text) + } + } + } else { + colorizePassword( + password = password, + contentColor = LocalContentColor.current, + ) + }, + ) + } + Spacer( + modifier = Modifier + .height(4.dp), + ) + + val visible = value.strength + ExpandedIfNotEmpty( + valueOrNull = value.password.takeIf { visible }, + ) { password -> + PasswordStrengthBadge( + password = password, + ) + } + }, + trailing = { + val updatedOnCopy by rememberUpdatedState(value.onCopy) + IconButton( + enabled = value.onCopy != null, + onClick = { + updatedOnCopy?.invoke() + }, + ) { + Icon(Icons.Outlined.ContentCopy, null) + } + }, + dropdown = value.dropdown, + actions = value.actions, + enabled = !sliderInteractionSourceIsInteracted, + ) + } +} + +@Composable +private fun ColumnScope.GeneratorFilterTip( + filterFlow: StateFlow, +) { + val filterState = filterFlow.collectAsState() + val tipState = remember(filterState) { + derivedStateOf { + filterState.value.tip + } + } + ExpandedIfNotEmpty( + valueOrNull = tipState.value, + ) { tip -> + Column( + modifier = Modifier + .fillMaxWidth(), + ) { + Spacer( + modifier = Modifier + .height(32.dp), + ) + Icon( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding), + imageVector = Icons.Outlined.Info, + contentDescription = null, + tint = LocalContentColor.current.combineAlpha(alpha = MediumEmphasisAlpha), + ) + Spacer( + modifier = Modifier + .height(16.dp), + ) + Row( + modifier = Modifier + .fillMaxWidth(), + verticalAlignment = Alignment.Top, + ) { + Spacer(modifier = Modifier.width(16.dp)) + Text( + modifier = Modifier + .weight(1f), + style = MaterialTheme.typography.bodyMedium, + text = tip.text, + color = LocalContentColor.current + .combineAlpha(alpha = MediumEmphasisAlpha), + ) + Spacer(modifier = Modifier.width(16.dp)) + if (tip.onLearnMore != null) { + TextButton( + onClick = { + tip.onLearnMore.invoke() + }, + ) { + Text( + text = stringResource(Res.strings.learn_more), + ) + } + } + Spacer(modifier = Modifier.width(8.dp)) + } + } + } +} + +@Composable +private fun ColumnScope.GeneratorFilterItems( + filterFlow: StateFlow, + sliderInteractionSource: MutableInteractionSource, +) { + + val filterState = filterFlow.collectAsState() + val filter by filterState + + val showSection = filter.length != null || filter.items.isNotEmpty() + ExpandedIfNotEmpty( + Unit.takeIf { showSection }, + ) { + Section( + text = stringResource(Res.strings.filter_header_title), + ) + } + + ExpandedIfNotEmpty( + filter.length, + ) { + Column { + DecoratedSlider( + filterLength = it, + interactionSource = sliderInteractionSource, + ) + } + } + + Spacer( + modifier = Modifier + .height(16.dp), + ) + + val items = filter.items + items.forEach { item -> + key(item.key) { + FilterItem(item) + } + } +} + +@Composable +fun FilterItem( + item: GeneratorState.Filter.Item, +) = when (item) { + is GeneratorState.Filter.Item.Switch -> FilterSwitchItem(item) + is GeneratorState.Filter.Item.Text -> FilterTextItem(item) + is GeneratorState.Filter.Item.Section -> FilterSectionItem(item) +} + +@Composable +private fun FilterSwitchItem( + item: GeneratorState.Filter.Item.Switch, +) { + val updatedItemState = rememberUpdatedState(newValue = item) + val movableSwitchContent = remember(updatedItemState) { + movableContentOf { + val item2 = updatedItemState.value + FlatItem( + title = { + Text( + text = item2.title, + maxLines = 2, + ) + }, + text = if (item2.text != null) { + // composable + { + Text( + text = item2.text, + maxLines = 1, + ) + } + } else { + null + }, + trailing = { + Switch( + modifier = Modifier + .height(20.dp), + checked = item2.model.checked, + enabled = item2.model.onChange != null, + onCheckedChange = null, + ) + }, + onClick = item2.model.onChange?.partially1(!item2.model.checked), + ) + } + } + BoxWithConstraints { + val horizontal = maxWidth >= 296.dp + if (horizontal) { + Row( + verticalAlignment = Alignment.CenterVertically, + ) { + Box( + modifier = Modifier + .weight(1f), + ) { + movableSwitchContent() + } + ExpandedIfNotEmptyForRow( + valueOrNull = item.counter, + ) { counter -> + Row( + verticalAlignment = Alignment.CenterVertically, + ) { + VerticalDivider( + modifier = Modifier + .height(20.dp), + ) + Spacer( + modifier = Modifier + .width(Dimens.horizontalPadding), + ) + FilterSwitchItemCounter( + counter = counter, + ) + Spacer( + modifier = Modifier + .width(Dimens.horizontalPadding), + ) + } + } + } + } else { + Column { + movableSwitchContent() + ExpandedIfNotEmpty( + modifier = Modifier + .padding( + start = Dimens.horizontalPadding, + end = Dimens.horizontalPadding, + top = Dimens.horizontalPaddingHalf, + bottom = Dimens.horizontalPaddingHalf, + ), + valueOrNull = item.counter, + ) { counter -> + FilterSwitchItemCounter( + counter = counter, + ) + } + } + } + } +} + +@Composable +fun FilterSwitchItemCounter( + counter: IntFieldModel, +) { + Surface( + modifier = Modifier + .height(32.dp), + shape = CircleShape, + color = MaterialTheme.colorScheme.secondaryContainer, + ) { + Row { + val updatedOnChange = rememberUpdatedState(counter.onChange) + val canDecrement = counter.number > counter.min + val canIncrement = counter.number < counter.max + FilterSwitchItemCounterButton( + enabled = canDecrement, + icon = Icons.Outlined.ArrowDownward, + onChange = { + val newValue = counter.number + .minus(1) + .coerceIn(counter.min..counter.max) + val hasChanged = newValue != counter.number + if (hasChanged) { + updatedOnChange.value?.invoke(newValue) + } + hasChanged + }, + ) + Text( + modifier = Modifier + .padding( + horizontal = 4.dp, + vertical = 2.dp, + ) + .widthIn(min = 18.dp) + .animateContentSize() + .align(Alignment.CenterVertically), + text = counter.number.toString(), + style = MaterialTheme.typography.labelMedium, + textAlign = TextAlign.Center, + ) + FilterSwitchItemCounterButton( + enabled = canIncrement, + icon = Icons.Outlined.ArrowUpward, + onChange = { + val newValue = counter.number + .plus(1) + .coerceIn(counter.min..counter.max) + val hasChanged = newValue != counter.number + if (hasChanged) { + updatedOnChange.value?.invoke(newValue) + } + hasChanged + }, + ) + } + } +} + +@Composable +private fun FilterSwitchItemCounterButton( + icon: ImageVector, + enabled: Boolean, + onChange: (() -> Boolean)? = null, +) { + val coroutineScope = rememberCoroutineScope() + var lastJob by remember { + mutableStateOf(null) + } + + val updatedLocalHapticFeedback by rememberUpdatedState(newValue = LocalHapticFeedback.current) + val updatedOnChange by rememberUpdatedState(newValue = onChange) + Box( + modifier = Modifier + .fillMaxHeight() + .widthIn(32.dp) + .clip(CircleShape) + .pointerInput(Unit) { + detectDragGesturesAfterLongPress( + onDragStart = { + updatedLocalHapticFeedback.performHapticFeedback(HapticFeedbackType.LongPress) + + lastJob?.cancel() + lastJob = coroutineScope.launch { + var iteration = 0 + while (isActive) { + val shouldAbort = updatedOnChange?.invoke() == false + if (shouldAbort) { + break + } + + val delayMs = 5f / (1f + iteration) + delay( + delayMs + .times(100) + .toLong(), + ) + iteration += 1 + } + } + }, + onDragCancel = { + lastJob?.cancel() + }, + onDragEnd = { + lastJob?.cancel() + }, + ) { _, _ -> + // Do nothing. + } + } + .clickable(enabled = enabled) { + updatedOnChange?.invoke() + }, + contentAlignment = Alignment.Center, + ) { + AnimatedVisibility( + visible = enabled, + enter = fadeIn() + scaleIn(), + exit = scaleOut() + fadeOut(), + ) { + Icon( + imageVector = icon, + contentDescription = null, + ) + } + } +} + +@Composable +private fun FilterTextItem( + item: GeneratorState.Filter.Item.Text, +) { + FlatTextField( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding) + .padding(vertical = 2.dp), + label = item.title, + value = item.model, + textStyle = LocalTextStyle.current.copy( + fontFamily = monoFontFamily, + ), + ) +} + +@Composable +private fun FilterSectionItem( + item: GeneratorState.Filter.Item.Section, +) { + Section( + text = item.text, + ) +} + +@Composable +private fun ColumnScope.DecoratedSliderLayout( + length: @Composable (Modifier) -> Unit, + slider: @Composable (Modifier) -> Unit, + sliderLabel: @Composable (Modifier, Float) -> Unit, +) { + Row( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = Dimens.horizontalPadding), + ) { + Text( + modifier = Modifier + .weight(1f), + style = MaterialTheme.typography.bodyLarge, + text = stringResource(Res.strings.length), + ) + length( + Modifier + .alignByBaseline(), + ) + } + slider( + Modifier + .fillMaxWidth() + .padding(horizontal = Dimens.horizontalPadding), + ) + Row( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = Dimens.horizontalPadding), + horizontalArrangement = Arrangement.SpaceBetween, + ) { + val n = 9 + for (i in 0..n) { + val ratio = i.toFloat() / n.toFloat() + sliderLabel( + Modifier, + ratio, + ) + } + } +} + +@Composable +fun ColumnScope.DecoratedSlider( + filterLength: GeneratorState.Filter.Length, + interactionSource: MutableInteractionSource, + modifier: Modifier = Modifier, +) { + val onLengthChange = rememberUpdatedState(newValue = filterLength.onChange) + + var filterLengthTemp by kotlin.run { + val length = filterLength.value + remember(filterLength) { + mutableStateOf(length.toFloat()) + } + } + val counter = remember(filterLengthTemp.roundToInt()) { + IntFieldModel( + number = filterLengthTemp.roundToLong(), + min = filterLength.min.toLong(), + max = filterLength.max.toLong(), + onChange = { value -> + onLengthChange.value?.invoke(value.toInt()) + }, + ) + } + + Row( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = Dimens.horizontalPadding), + ) { + Text( + modifier = Modifier + .weight(1f), + style = MaterialTheme.typography.bodyLarge, + text = stringResource(Res.strings.length), + ) + FilterSwitchItemCounter( + counter = counter, + ) + } + val sliderValueRange = filterLength.run { min.toFloat()..max.toFloat() } + val sliderSteps = filterLength.run { max - min } - 1 + Slider( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = Dimens.horizontalPadding), + value = filterLengthTemp, + valueRange = sliderValueRange, + steps = sliderSteps, + interactionSource = interactionSource, + onValueChange = { length -> + filterLengthTemp = length + }, + onValueChangeFinished = { + val length = filterLengthTemp.roundToInt() + onLengthChange.value?.invoke(length) + }, + ) +} + +@Composable +private fun ColumnScope.DecoratedSkeletonSlider( + modifier: Modifier = Modifier, +) { + DecoratedSliderLayout( + length = { m -> + val contentColor = LocalContentColor.current + .combineAlpha(DisabledEmphasisAlpha) + Box( + modifier = m + .shimmer() + .heightIn(min = 16.dp) + .widthIn(min = 20.dp) + .clip(MaterialTheme.shapes.medium) + .background(contentColor), + ) + }, + slider = { m -> + SkeletonSlider( + modifier = m, + ) + }, + sliderLabel = { m, _ -> + val contentColor = LocalContentColor.current + .combineAlpha(DisabledEmphasisAlpha) + Box( + modifier = m + .shimmer() + .heightIn(min = 14.dp) + .widthIn(min = 18.dp) + .clip(MaterialTheme.shapes.medium) + .background(contentColor), + ) + }, + ) +} + +@Composable +fun AutoResizeText( + text: AnnotatedString, + modifier: Modifier = Modifier, +) { + Box( + modifier = modifier, + ) { + val maxFontSize = 32f + val minFontSize = 14f + + val fontSize = kotlin.run { + val ratio = 1f - (text.length / 128f) + .coerceAtMost(1f) + minFontSize + (maxFontSize - minFontSize) * ratio + } + Text( + modifier = Modifier + .animateContentSize(), + text = text, + fontFamily = monoFontFamily, + fontSize = fontSize.sp, + style = MaterialTheme.typography.titleLarge, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/generator/GeneratorState.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/generator/GeneratorState.kt new file mode 100644 index 00000000..1b716d07 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/generator/GeneratorState.kt @@ -0,0 +1,92 @@ +@file:JvmName("GeneratorStateUtils") + +package com.artemchep.keyguard.feature.generator + +import androidx.compose.runtime.Immutable +import androidx.compose.runtime.Stable +import com.artemchep.keyguard.feature.auth.common.IntFieldModel +import com.artemchep.keyguard.feature.auth.common.SwitchFieldModel +import com.artemchep.keyguard.feature.auth.common.TextFieldModel2 +import com.artemchep.keyguard.ui.ContextItem +import com.artemchep.keyguard.ui.FlatItemAction +import kotlinx.collections.immutable.ImmutableList +import kotlinx.coroutines.flow.StateFlow + +@Stable +data class GeneratorState( + val onOpenHistory: () -> Unit, + val options: ImmutableList, + val typeState: StateFlow, + val valueState: StateFlow, + val filterState: StateFlow, +) { + companion object; + + @Immutable + data class Type( + val title: String, + val items: ImmutableList, + ) + + @Immutable + data class Filter( + val tip: Tip?, + val length: Length?, + val items: ImmutableList, + ) { + companion object; + + @Immutable + data class Length( + val value: Int, + val min: Int, + val max: Int, + val onChange: ((Int) -> Unit)? = null, + ) + + sealed interface Item { + val key: String + + @Immutable + data class Switch( + override val key: String, + val title: String, + val text: String? = null, + val model: SwitchFieldModel, + val counter: IntFieldModel? = null, + ) : Item + + @Immutable + data class Text( + override val key: String, + val title: String, + val model: TextFieldModel2, + ) : Item + + @Immutable + data class Section( + override val key: String, + val text: String? = null, + ) : Item + } + + @Immutable + data class Tip( + val text: String, + val onHide: (() -> Unit)? = null, + val onLearnMore: (() -> Unit)? = null, + ) + } + + @Immutable + data class Value( + val password: String, + val strength: Boolean, + val actions: ImmutableList, + val dropdown: ImmutableList, + val onCopy: (() -> Unit)?, + val onRefresh: (() -> Unit)?, + ) { + companion object + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/generator/GeneratorStateProducer.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/generator/GeneratorStateProducer.kt new file mode 100644 index 00000000..5db5eba6 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/generator/GeneratorStateProducer.kt @@ -0,0 +1,1309 @@ +package com.artemchep.keyguard.feature.generator + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Add +import androidx.compose.material.icons.outlined.AlternateEmail +import androidx.compose.material.icons.outlined.Info +import androidx.compose.material.icons.outlined.Mail +import androidx.compose.material.icons.outlined.Password +import androidx.compose.material3.Checkbox +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.MaterialTheme +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import arrow.core.compose +import arrow.core.partially1 +import arrow.core.right +import com.artemchep.keyguard.AppMode +import com.artemchep.keyguard.common.io.attempt +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.io.handleErrorTap +import com.artemchep.keyguard.common.io.ioRaise +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.io.map +import com.artemchep.keyguard.common.io.shared +import com.artemchep.keyguard.common.io.toIO +import com.artemchep.keyguard.common.model.DGeneratorEmailRelay +import com.artemchep.keyguard.common.model.DGeneratorHistory +import com.artemchep.keyguard.common.model.DSecret +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.model.PasswordGeneratorConfigBuilder2 +import com.artemchep.keyguard.common.model.build +import com.artemchep.keyguard.common.model.isExpensive +import com.artemchep.keyguard.common.service.clipboard.ClipboardService +import com.artemchep.keyguard.common.service.relays.api.EmailRelay +import com.artemchep.keyguard.common.usecase.AddGeneratorHistory +import com.artemchep.keyguard.common.usecase.GetCanWrite +import com.artemchep.keyguard.common.usecase.GetEmailRelays +import com.artemchep.keyguard.common.usecase.GetPassword +import com.artemchep.keyguard.common.usecase.GetPasswordStrength +import com.artemchep.keyguard.common.usecase.GetProfiles +import com.artemchep.keyguard.common.util.flow.EventFlow +import com.artemchep.keyguard.feature.auth.common.IntFieldModel +import com.artemchep.keyguard.feature.auth.common.SwitchFieldModel +import com.artemchep.keyguard.feature.auth.common.TextFieldModel2 +import com.artemchep.keyguard.feature.auth.common.util.REGEX_DOMAIN +import com.artemchep.keyguard.feature.auth.common.util.REGEX_EMAIL +import com.artemchep.keyguard.feature.crashlytics.crashlyticsTap +import com.artemchep.keyguard.feature.generator.emailrelay.EmailRelayListRoute +import com.artemchep.keyguard.feature.generator.history.GeneratorHistoryRoute +import com.artemchep.keyguard.feature.home.vault.add.AddRoute +import com.artemchep.keyguard.feature.home.vault.add.LeAddRoute +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.feature.navigation.state.PersistedStorage +import com.artemchep.keyguard.feature.navigation.state.copy +import com.artemchep.keyguard.feature.navigation.state.produceScreenState +import com.artemchep.keyguard.feature.navigation.state.translate +import com.artemchep.keyguard.generatorTarget +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.ContextItem +import com.artemchep.keyguard.ui.FlatItemAction +import com.artemchep.keyguard.ui.buildContextItems +import com.artemchep.keyguard.ui.icons.icon +import com.artemchep.keyguard.ui.theme.isDark +import kotlinx.collections.immutable.persistentListOf +import kotlinx.collections.immutable.toPersistentList +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.debounce +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.flatMapLatest +import kotlinx.coroutines.flow.flow +import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.flow.flowOn +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.onEach +import kotlinx.coroutines.flow.onStart +import kotlinx.coroutines.flow.shareIn +import kotlinx.coroutines.flow.stateIn +import kotlinx.datetime.Clock +import org.kodein.di.allInstances +import org.kodein.di.compose.localDI +import org.kodein.di.direct +import org.kodein.di.instance +import org.kodein.di.instanceOrNull + +private const val TIP_VISIBLE = true + +private const val PASSWORD_LENGTH_DEFAULT = 16L +private const val PASSWORD_LENGTH_MIN = 4 +private const val PASSWORD_LENGTH_MAX = 128 +private const val PASSWORD_INCLUDE_UPPERCASE_CHARS_DEFAULT = true +private const val PASSWORD_INCLUDE_UPPERCASE_CHARS_MIN_DEFAULT = 1L +private const val PASSWORD_INCLUDE_LOWERCASE_CHARS_DEFAULT = true +private const val PASSWORD_INCLUDE_LOWERCASE_CHARS_MIN_DEFAULT = 1L +private const val PASSWORD_INCLUDE_NUMBERS_DEFAULT = true +private const val PASSWORD_INCLUDE_NUMBERS_MIN_DEFAULT = 1L +private const val PASSWORD_INCLUDE_SYMBOLS_DEFAULT = true +private const val PASSWORD_INCLUDE_SYMBOLS_MIN_DEFAULT = 1L +private const val PASSWORD_EXCLUDE_SIMILAR_CHARS = true +private const val PASSWORD_EXCLUDE_AMBIGUOUS_CHARS = true + +private const val PASSPHRASE_LENGTH_DEFAULT = 5L +private const val PASSPHRASE_LENGTH_MIN = 1 +private const val PASSPHRASE_LENGTH_MAX = 10 +private const val PASSPHRASE_DELIMITER_DEFAULT = "-" +private const val PASSPHRASE_CAPITALIZE_DEFAULT = false +private const val PASSPHRASE_NUMBER_DEFAULT = false + +private const val USERNAME_LENGTH_DEFAULT = 2L +private const val USERNAME_LENGTH_MIN = 1 +private const val USERNAME_LENGTH_MAX = 10 +private const val USERNAME_DELIMITER_DEFAULT = "" +private const val USERNAME_CAPITALIZE_DEFAULT = true +private const val USERNAME_NUMBER_DEFAULT = true +private const val USERNAME_CUSTOM_WORD = "" + +private const val EMAIL_CATCH_ALL_LENGTH_DEFAULT = 5L +private const val EMAIL_CATCH_ALL_LENGTH_MIN = 3 +private const val EMAIL_CATCH_ALL_LENGTH_MAX = 10 + +private const val EMAIL_PLUS_ADDRESSING_LENGTH_DEFAULT = 5L +private const val EMAIL_PLUS_ADDRESSING_LENGTH_MIN = 3 +private const val EMAIL_PLUS_ADDRESSING_LENGTH_MAX = 10 + +private const val EMAIL_SUBDOMAIN_ADDRESSING_LENGTH_DEFAULT = 5L +private const val EMAIL_SUBDOMAIN_ADDRESSING_LENGTH_MIN = 3 +private const val EMAIL_SUBDOMAIN_ADDRESSING_LENGTH_MAX = 10 + +private val popularEmailDomains = setOf( + "gmail.com", + "yahoo.com", + "hotmail.com", + "aol.com", + "hotmail.co.uk", + "hotmail.fr", + "msn.com", + "yahoo.fr", + "wanadoo.fr", + "orange.fr", + "comcast.net", + "yahoo.co.uk", + "yahoo.com.br", + "yahoo.co.in", + "live.com", + "rediffmail.com", + "free.fr", + "gmx.de", + "web.de", + "yandex.ru", + "ymail.com", + "libero.it", + "outlook.com", + "uol.com.br", + "bol.com.br", + "mail.ru", + "cox.net", + "hotmail.it", + "sbcglobal.net", + "sfr.fr", + "live.fr", + "verizon.net", + "live.co.uk", + "googlemail.com", + "yahoo.es", + "ig.com.br", + "live.nl", + "bigpond.com", + "terra.com.br", + "yahoo.it", + "neuf.fr", + "yahoo.de", + "alice.it", + "rocketmail.com", + "att.net", + "laposte.net", + "facebook.com", + "bellsouth.net", + "yahoo.in", + "hotmail.es", + "charter.net", + "yahoo.ca", + "yahoo.com.au", + "rambler.ru", + "hotmail.de", + "tiscali.it", + "shaw.ca", + "yahoo.co.jp", + "sky.com", + "earthlink.net", + "optonline.net", + "freenet.de", + "t-online.de", + "aliceadsl.fr", + "virgilio.it", + "home.nl", + "qq.com", + "telenet.be", + "me.com", + "yahoo.com.ar", + "tiscali.co.uk", + "yahoo.com.mx", + "voila.fr", + "gmx.net", + "mail.com", + "planet.nl", + "tin.it", + "live.it", + "ntlworld.com", + "arcor.de", + "yahoo.co.id", + "frontiernet.net", + "hetnet.nl", + "live.com.au", + "yahoo.com.sg", + "zonnet.nl", + "club-internet.fr", + "juno.com", + "optusnet.com.au", + "blueyonder.co.uk", + "bluewin.ch", + "skynet.be", + "sympatico.ca", + "windstream.net", + "mac.com", + "centurytel.net", + "chello.nl", + "live.ca", + "aim.com", + "bigpond.net.au", +) + +@Composable +fun produceGeneratorState( + mode: AppMode, + args: GeneratorRoute.Args, + key: String? = null, +) = with(localDI().direct) { + produceGeneratorState( + mode = mode, + args = args, + key = key, + addGeneratorHistory = instanceOrNull(), + getPassword = instance(), + getPasswordStrength = instance(), + getProfiles = instanceOrNull(), + getEmailRelays = instanceOrNull(), + getCanWrite = instance(), + clipboardService = instance(), + emailRelays = allInstances(), + ) +} + +private const val PREFIX_PASSWORD = "password" +private const val PREFIX_PASSPHRASE = "passphrase" +private const val PREFIX_USERNAME = "username" +private const val PREFIX_EMAIL_CATCH_ALL = "email_catch_all" +private const val PREFIX_EMAIL_PLUS_ADDRESSING = "email_plus_addressing" +private const val PREFIX_EMAIL_SUBDOMAIN_ADDRESSING = "email_subdomain_addressing" +private const val PREFIX_EMAIL_ALIAS = "email_alias" + +private data class EmailRelayWithConfig( + val emailRelay: EmailRelay, + val config: DGeneratorEmailRelay, +) + +@OptIn(ExperimentalCoroutinesApi::class, ExperimentalMaterial3Api::class) +@Composable +fun produceGeneratorState( + mode: AppMode, + args: GeneratorRoute.Args, + key: String? = null, + addGeneratorHistory: AddGeneratorHistory?, + getPassword: GetPassword, + getPasswordStrength: GetPasswordStrength, + getProfiles: GetProfiles?, + getEmailRelays: GetEmailRelays?, + getCanWrite: GetCanWrite, + clipboardService: ClipboardService, + emailRelays: List, +): Loadable = produceScreenState( + initial = Loadable.Loading, + key = key?.let { "$it:" }.orEmpty() + "autofill", + args = arrayOf( + args, + getPassword, + getPasswordStrength, + getCanWrite, + clipboardService, + ), +) { + val generatorContext = mode.generatorTarget + val copyItemFactory = copy( + clipboardService = clipboardService, + ) + + val typesAllStatic = listOf( + GeneratorType2.Password, + GeneratorType2.Passphrase, + GeneratorType2.Username, + GeneratorType2.EmailCatchAll, + GeneratorType2.EmailPlusAddressing, + GeneratorType2.EmailSubdomainAddressing, + ) + val typesRelay = getEmailRelays?.invoke() + ?: flowOf(emptyList()) + val typesAllFlow = typesRelay + .map { list -> + val emailRelayItems = list + .mapNotNull { config -> + val emailRelay = emailRelays + .firstOrNull { it.type == config.type } + ?: return@mapNotNull null + GeneratorType2.EmailRelay( + emailRelay = emailRelay, + config = config, + ) + } + typesAllStatic + emailRelayItems + } + .map { items -> + items + .filter { + (it.password && args.password) || + (it.username && args.username) + } + } + + val getUserEmailDefaultIo = (getProfiles?.invoke()?.toIO() ?: ioRaise(RuntimeException())) + .map { profiles -> + val emailOrNull = profiles + .asSequence() + .map { profile -> + val priority = kotlin.run { + var p = 0f + if (profile.emailVerified) p += 10f + p + } + profile.email to priority + } + .groupBy { (email, priority) -> email } + .mapValues { (email, values) -> + values + .asSequence() + .map { it.second } + .reduce { y, x -> y + x } + } + .toList() + .maxByOrNull { it.second } + ?.first + emailOrNull + } + .shared() + + val getUserDomainDefaultIo = getUserEmailDefaultIo + .map { email -> + email + ?.substringAfterLast('@', missingDelimiterValue = "") + ?.takeUnless { domain -> + // Catch-all email can not be setup for a + // public email server. + domain in popularEmailDomains + } + } + .shared() + + val storage = kotlin.run { + val disk = loadDiskHandle( + key = key?.let { "$it:" }.orEmpty() + "generator", + global = true, + ) + PersistedStorage.InDisk(disk) + } + // common + val typeDefaultName = GeneratorType2.Password.key + val typeSink = mutablePersistedFlow( + key = "type", + storage = storage, + ) { typeDefaultName } + // Auto-fix the current type if it + // gets out of the variants. + typesAllFlow + .onEach { items -> + val shouldAutoSelect = items.none { it.key == typeSink.value } + if (shouldAutoSelect) { + typeSink.value = typeDefaultName + } + } + .launchIn(screenScope) + val typeFlow = typeSink + .combine(typesAllFlow) { typeKey, items -> + items.firstOrNull { it.key == typeKey } + ?: GeneratorType2.Password + } + val tipVisibleSink = mutablePersistedFlow( + key = "tip.visible", + storage = storage, + ) { TIP_VISIBLE } + + fun hideTip() { + tipVisibleSink.value = false + } + + // password + val passwordLengthSink = mutablePersistedFlow( + key = "$PREFIX_PASSWORD.length", + storage = storage, + ) { PASSWORD_LENGTH_DEFAULT } + val passwordIncludeUppercaseCharactersSink = mutablePersistedFlow( + key = "$PREFIX_PASSWORD.include_uppercase_chars", + storage = storage, + ) { PASSWORD_INCLUDE_UPPERCASE_CHARS_DEFAULT } + val passwordIncludeUppercaseCharactersMinSink = mutablePersistedFlow( + key = "$PREFIX_PASSWORD.include_uppercase_chars.min", + storage = storage, + ) { PASSWORD_INCLUDE_UPPERCASE_CHARS_MIN_DEFAULT } + val passwordIncludeLowercaseCharactersSink = mutablePersistedFlow( + key = "$PREFIX_PASSWORD.include_lowercase_chars", + storage = storage, + ) { PASSWORD_INCLUDE_LOWERCASE_CHARS_DEFAULT } + val passwordIncludeLowercaseCharactersMinSink = mutablePersistedFlow( + key = "$PREFIX_PASSWORD.include_lowercase_chars.min", + storage = storage, + ) { PASSWORD_INCLUDE_LOWERCASE_CHARS_MIN_DEFAULT } + val passwordIncludeNumbersSink = mutablePersistedFlow( + key = "$PREFIX_PASSWORD.include_numbers", + storage = storage, + ) { PASSWORD_INCLUDE_NUMBERS_DEFAULT } + val passwordIncludeNumbersMinSink = mutablePersistedFlow( + key = "$PREFIX_PASSWORD.include_numbers.min", + storage = storage, + ) { PASSWORD_INCLUDE_NUMBERS_MIN_DEFAULT } + val passwordIncludeSymbolsSink = mutablePersistedFlow( + "$PREFIX_PASSWORD.include_symbols", + storage = storage, + ) { PASSWORD_INCLUDE_SYMBOLS_DEFAULT } + val passwordIncludeSymbolsMinSink = mutablePersistedFlow( + key = "$PREFIX_PASSWORD.include_symbols.min", + storage = storage, + ) { PASSWORD_INCLUDE_SYMBOLS_MIN_DEFAULT } + val passwordExcludeSimilarCharactersSink = mutablePersistedFlow( + "$PREFIX_PASSWORD.exclude_similar_chars", + storage = storage, + ) { PASSWORD_EXCLUDE_SIMILAR_CHARS } + val passwordExcludeAmbiguousCharactersSink = mutablePersistedFlow( + "$PREFIX_PASSWORD.exclude_ambiguous_chars", + storage = storage, + ) { PASSWORD_EXCLUDE_AMBIGUOUS_CHARS } + // passphrase + val passphraseLengthSink = mutablePersistedFlow( + key = "$PREFIX_PASSPHRASE.length", + storage = storage, + ) { PASSPHRASE_LENGTH_DEFAULT } + val passphraseDelimiterSink = mutablePersistedFlow( + key = "$PREFIX_PASSPHRASE.delimiter", + storage = storage, + ) { PASSPHRASE_DELIMITER_DEFAULT } + val passphraseDelimiterState = mutableComposeState(passphraseDelimiterSink) + val passphraseCapitalizeSink = mutablePersistedFlow( + key = "$PREFIX_PASSPHRASE.capitalize", + storage = storage, + ) { PASSPHRASE_CAPITALIZE_DEFAULT } + val passphraseIncludeNumberSink = mutablePersistedFlow( + key = "$PREFIX_PASSPHRASE.include_number", + storage = storage, + ) { PASSPHRASE_NUMBER_DEFAULT } + // username + val usernameLengthSink = mutablePersistedFlow( + key = "$PREFIX_USERNAME.length", + storage = storage, + ) { USERNAME_LENGTH_DEFAULT } + val usernameDelimiterSink = mutablePersistedFlow( + key = "$PREFIX_USERNAME.delimiter", + storage = storage, + ) { USERNAME_DELIMITER_DEFAULT } + val usernameDelimiterState = mutableComposeState(usernameDelimiterSink) + val usernameCapitalizeSink = mutablePersistedFlow( + key = "$PREFIX_USERNAME.capitalize", + storage = storage, + ) { USERNAME_CAPITALIZE_DEFAULT } + val usernameIncludeNumberSink = mutablePersistedFlow( + key = "$PREFIX_USERNAME.include_number", + storage = storage, + ) { USERNAME_NUMBER_DEFAULT } + val usernameCustomWordSink = mutablePersistedFlow( + key = "$PREFIX_USERNAME.custom_word", + storage = storage, + ) { USERNAME_CUSTOM_WORD } + val usernameCustomWordState = mutableComposeState(usernameCustomWordSink) + // email catch all + val emailCatchAllLengthSink = mutablePersistedFlow( + key = "$PREFIX_EMAIL_CATCH_ALL.length", + storage = storage, + ) { EMAIL_CATCH_ALL_LENGTH_DEFAULT } + val emailCatchAllDomainSink = mutablePersistedFlow( + key = "$PREFIX_EMAIL_CATCH_ALL.domain", + storage = storage, + ) { "" } + val emailCatchAllDomainState = mutableComposeState(emailCatchAllDomainSink) + if (emailCatchAllDomainState.value.isEmpty()) { + emailCatchAllDomainState.value = + getUserDomainDefaultIo.attempt().bind().getOrNull().orEmpty() + } + // email plus addressing + val emailPlusAddressingLengthSink = mutablePersistedFlow( + key = "$PREFIX_EMAIL_PLUS_ADDRESSING.length", + storage = storage, + ) { EMAIL_PLUS_ADDRESSING_LENGTH_DEFAULT } + val emailPlusAddressingEmailSink = mutablePersistedFlow( + key = "$PREFIX_EMAIL_PLUS_ADDRESSING.email", + storage = storage, + ) { "" } + val emailPlusAddressingEmailState = mutableComposeState(emailPlusAddressingEmailSink) + if (emailPlusAddressingEmailState.value.isEmpty()) { + emailPlusAddressingEmailState.value = + getUserEmailDefaultIo.attempt().bind().getOrNull().orEmpty() + } + // email subdomain addressing + val emailSubdomainAddressingLengthSink = mutablePersistedFlow( + key = "$PREFIX_EMAIL_SUBDOMAIN_ADDRESSING.length", + storage = storage, + ) { EMAIL_SUBDOMAIN_ADDRESSING_LENGTH_DEFAULT } + val emailSubdomainAddressingEmailSink = mutablePersistedFlow( + key = "$PREFIX_EMAIL_SUBDOMAIN_ADDRESSING.email", + storage = storage, + ) { "" } + val emailSubdomainAddressingEmailState = mutableComposeState(emailSubdomainAddressingEmailSink) + if (emailSubdomainAddressingEmailState.value.isEmpty()) { + emailSubdomainAddressingEmailState.value = + getUserEmailDefaultIo.attempt().bind().getOrNull().orEmpty() + .takeIf { email -> + email.substringAfterLast('@', "") !in popularEmailDomains + } + .orEmpty() + } + + val passphraseFilterTip = GeneratorState.Filter.Tip( + text = translate(Res.strings.generator_passphrase_note), + onLearnMore = { + val url = "https://xkcd.com/936/" + val intent = NavigationIntent.NavigateToBrowser(url) + navigate(intent) + }, + onHide = ::hideTip, + ) + + fun createFilter( + config: PasswordGeneratorConfigBuilder2.Passphrase, + ): GeneratorState.Filter { + val items = persistentListOf( + GeneratorState.Filter.Item.Text( + key = "$PREFIX_PASSPHRASE.delimiter", + title = translate(Res.strings.generator_passphrase_delimiter_title), + model = TextFieldModel2( + state = passphraseDelimiterState, + text = config.delimiter, + onChange = passphraseDelimiterState::value::set, + ), + ), + GeneratorState.Filter.Item.Switch( + key = "$PREFIX_PASSPHRASE.capitalize", + title = translate(Res.strings.generator_passphrase_capitalize_title), + model = SwitchFieldModel( + checked = config.capitalize, + onChange = passphraseCapitalizeSink::value::set, + ), + ), + GeneratorState.Filter.Item.Switch( + key = "$PREFIX_PASSPHRASE.include_number", + title = translate(Res.strings.generator_passphrase_number_title), + model = SwitchFieldModel( + checked = config.includeNumber, + onChange = passphraseIncludeNumberSink::value::set, + ), + ), + ) + return GeneratorState.Filter( + tip = passphraseFilterTip, + length = GeneratorState.Filter.Length( + value = config.length, + min = PASSPHRASE_LENGTH_MIN, + max = PASSPHRASE_LENGTH_MAX, + onChange = passphraseLengthSink::value::set + .compose { it.toLong() }, + ), + items = items, + ) + } + + fun createFilter( + config: PasswordGeneratorConfigBuilder2.Username, + ): GeneratorState.Filter { + val items = persistentListOf( + GeneratorState.Filter.Item.Text( + key = "$PREFIX_PASSPHRASE.custom_word", + title = translate(Res.strings.generator_username_custom_word_title), + model = TextFieldModel2( + state = usernameCustomWordState, + text = config.customWord, + onChange = usernameCustomWordState::value::set, + ), + ), + GeneratorState.Filter.Item.Text( + key = "$PREFIX_PASSPHRASE.delimiter", + title = translate(Res.strings.generator_username_delimiter_title), + model = TextFieldModel2( + state = usernameDelimiterState, + text = config.delimiter, + onChange = usernameDelimiterState::value::set, + ), + ), + GeneratorState.Filter.Item.Switch( + key = "$PREFIX_USERNAME.capitalize", + title = translate(Res.strings.generator_username_capitalize_title), + model = SwitchFieldModel( + checked = config.capitalize, + onChange = usernameCapitalizeSink::value::set, + ), + ), + GeneratorState.Filter.Item.Switch( + key = "$PREFIX_USERNAME.include_number", + title = translate(Res.strings.generator_username_number_title), + model = SwitchFieldModel( + checked = config.includeNumber, + onChange = usernameIncludeNumberSink::value::set, + ), + ), + ) + return GeneratorState.Filter( + tip = null, + length = GeneratorState.Filter.Length( + value = config.length, + min = USERNAME_LENGTH_MIN, + max = USERNAME_LENGTH_MAX, + onChange = usernameLengthSink::value::set + .compose { it.toLong() }, + ), + items = items, + ) + } + + val passwordFilterTip = GeneratorState.Filter.Tip( + text = translate(Res.strings.generator_password_note, 16), + onHide = ::hideTip, + ) + + fun createFilter( + config: PasswordGeneratorConfigBuilder2.Password, + ): GeneratorState.Filter { + val items = persistentListOf( + GeneratorState.Filter.Item.Switch( + key = "$PREFIX_PASSWORD.include_numbers", + title = translate(Res.strings.generator_password_numbers_title), + model = SwitchFieldModel( + checked = config.includeNumbers, + onChange = passwordIncludeNumbersSink::value::set, + ), + counter = IntFieldModel( + number = config.includeNumbersMin + .coerceAtMost(config.length.toLong()), + min = 1L, + max = config.length.toLong(), + onChange = passwordIncludeNumbersMinSink::value::set, + ), + ), + GeneratorState.Filter.Item.Switch( + key = "$PREFIX_PASSWORD.include_symbols", + title = translate(Res.strings.generator_password_symbols_title), + text = """!"#$%&'()*+-./:;<=>?@[\]^_`{|}~""", + model = SwitchFieldModel( + checked = config.includeSymbols, + onChange = passwordIncludeSymbolsSink::value::set, + ), + counter = IntFieldModel( + number = config.includeSymbolsMin + .coerceAtMost(config.length.toLong()), + min = 1L, + max = config.length.toLong(), + onChange = passwordIncludeSymbolsMinSink::value::set, + ), + ), + GeneratorState.Filter.Item.Switch( + key = "$PREFIX_PASSWORD.include_uppercase_chars", + title = translate(Res.strings.generator_password_uppercase_letters_title), + model = SwitchFieldModel( + checked = config.includeUppercaseCharacters, + onChange = passwordIncludeUppercaseCharactersSink::value::set, + ), + counter = IntFieldModel( + number = config.includeUppercaseCharactersMin + .coerceAtMost(config.length.toLong()), + min = 1L, + max = config.length.toLong(), + onChange = passwordIncludeUppercaseCharactersMinSink::value::set, + ), + ), + GeneratorState.Filter.Item.Switch( + key = "$PREFIX_PASSWORD.include_lowercase_chars", + title = translate(Res.strings.generator_password_lowercase_letters_title), + model = SwitchFieldModel( + checked = config.includeLowercaseCharacters, + onChange = passwordIncludeLowercaseCharactersSink::value::set, + ), + counter = IntFieldModel( + number = config.includeLowercaseCharactersMin + .coerceAtMost(config.length.toLong()), + min = 1L, + max = config.length.toLong(), + onChange = passwordIncludeLowercaseCharactersMinSink::value::set, + ), + ), + GeneratorState.Filter.Item.Section( + key = "$PREFIX_PASSWORD.exclude", + ), + GeneratorState.Filter.Item.Switch( + key = "$PREFIX_PASSWORD.exclude_similar_chars", + title = translate(Res.strings.generator_password_exclude_similar_symbols_title), + text = "il1Lo0O", + model = SwitchFieldModel( + checked = config.excludeSimilarCharacters, + onChange = passwordExcludeSimilarCharactersSink::value::set, + ), + ), + GeneratorState.Filter.Item.Switch( + key = "$PREFIX_PASSWORD.exclude_ambiguous_chars", + title = translate(Res.strings.generator_password_exclude_ambiguous_symbols_title), + text = """{}[]()/\'"`~,;:.<>""", + model = SwitchFieldModel( + checked = config.excludeAmbiguousCharacters, + onChange = passwordExcludeAmbiguousCharactersSink::value::set, + ), + ), + ) + return GeneratorState.Filter( + tip = passwordFilterTip, + length = GeneratorState.Filter.Length( + value = config.length, + min = PASSWORD_LENGTH_MIN, + max = PASSWORD_LENGTH_MAX, + onChange = passwordLengthSink::value::set + .compose { it.toLong() }, + ), + items = items, + ) + } + + val catchAllEmailFilterTip = GeneratorState.Filter.Tip( + text = translate(Res.strings.generator_email_catch_all_note), + onHide = ::hideTip, + ) + + fun onOpenHistory() { + val route = GeneratorHistoryRoute + val intent = NavigationIntent.NavigateToRoute(route) + navigate(intent) + } + + fun createFilter( + config: PasswordGeneratorConfigBuilder2.EmailCatchAll, + ): GeneratorState.Filter { + val items = persistentListOf( + GeneratorState.Filter.Item.Text( + key = "$PREFIX_EMAIL_CATCH_ALL.domain", + title = translate(Res.strings.generator_email_catch_all_domain_title), + model = TextFieldModel2( + state = emailCatchAllDomainState, + text = config.domain, + hint = "example.com", + error = when { + config.domain.isEmpty() -> + translate(Res.strings.error_must_not_be_empty) + + config.domain in popularEmailDomains -> + translate(Res.strings.error_must_be_custom_domain) + + !REGEX_DOMAIN.matches(config.domain.trim()) -> + translate(Res.strings.error_invalid_domain) + + else -> null + }, + onChange = emailCatchAllDomainState::value::set, + ), + ), + ) + return GeneratorState.Filter( + tip = catchAllEmailFilterTip, + length = GeneratorState.Filter.Length( + value = config.length, + min = EMAIL_CATCH_ALL_LENGTH_MIN, + max = EMAIL_CATCH_ALL_LENGTH_MAX, + onChange = emailCatchAllLengthSink::value::set + .compose { it.toLong() }, + ), + items = items, + ) + } + + val emailPlusAddressingFilterTip = GeneratorState.Filter.Tip( + text = translate( + Res.strings.generator_email_plus_addressing_note, + "username+abc@example.com", + ), + onHide = ::hideTip, + ) + + fun createFilter( + config: PasswordGeneratorConfigBuilder2.EmailPlusAddressing, + ): GeneratorState.Filter { + val items = persistentListOf( + GeneratorState.Filter.Item.Text( + key = "$PREFIX_EMAIL_PLUS_ADDRESSING.email", + title = translate(Res.strings.generator_email_plus_addressing_email_title), + model = TextFieldModel2( + state = emailPlusAddressingEmailState, + text = config.email, + hint = "username@example.com", + error = when { + config.email.isEmpty() -> + translate(Res.strings.error_must_not_be_empty) + + !REGEX_EMAIL.matches(config.email.trim()) -> + translate(Res.strings.error_invalid_email) + + else -> null + }, + onChange = emailPlusAddressingEmailState::value::set, + ), + ), + ) + return GeneratorState.Filter( + tip = emailPlusAddressingFilterTip, + length = GeneratorState.Filter.Length( + value = config.length, + min = EMAIL_PLUS_ADDRESSING_LENGTH_MIN, + max = EMAIL_PLUS_ADDRESSING_LENGTH_MAX, + onChange = emailPlusAddressingLengthSink::value::set + .compose { it.toLong() }, + ), + items = items, + ) + } + + val emailSubdomainAddressingFilterTip = GeneratorState.Filter.Tip( + text = translate( + Res.strings.generator_email_subdomain_addressing_note, + "username@abc.example.com", + ), + onHide = ::hideTip, + ) + + fun createFilter( + config: PasswordGeneratorConfigBuilder2.EmailSubdomainAddressing, + ): GeneratorState.Filter { + val items = persistentListOf( + GeneratorState.Filter.Item.Text( + key = "$PREFIX_EMAIL_SUBDOMAIN_ADDRESSING.email", + title = translate(Res.strings.generator_email_subdomain_addressing_email_title), + model = TextFieldModel2( + state = emailSubdomainAddressingEmailState, + text = config.email, + hint = "username@example.com", + error = when { + config.email.isEmpty() -> + translate(Res.strings.error_must_not_be_empty) + + config.email.substringAfterLast('@', "") in popularEmailDomains -> + translate(Res.strings.error_must_be_custom_domain) + + !REGEX_EMAIL.matches(config.email.trim()) -> + translate(Res.strings.error_invalid_email) + + else -> null + }, + onChange = emailSubdomainAddressingEmailState::value::set, + ), + ), + ) + return GeneratorState.Filter( + tip = emailSubdomainAddressingFilterTip, + length = GeneratorState.Filter.Length( + value = config.length, + min = EMAIL_SUBDOMAIN_ADDRESSING_LENGTH_MIN, + max = EMAIL_SUBDOMAIN_ADDRESSING_LENGTH_MAX, + onChange = emailSubdomainAddressingLengthSink::value::set + .compose { it.toLong() }, + ), + items = items, + ) + } + + fun createFilter( + config: PasswordGeneratorConfigBuilder2.EmailRelay, + ): GeneratorState.Filter { + val items = persistentListOf( + ) + return GeneratorState.Filter( + tip = null, + length = null, + items = items, + ) + } + + fun createFilter( + config: PasswordGeneratorConfigBuilder2, + ) = when (config) { + is PasswordGeneratorConfigBuilder2.Password -> createFilter(config) + is PasswordGeneratorConfigBuilder2.Passphrase -> createFilter(config) + is PasswordGeneratorConfigBuilder2.Username -> createFilter(config) + is PasswordGeneratorConfigBuilder2.EmailCatchAll -> createFilter(config) + is PasswordGeneratorConfigBuilder2.EmailPlusAddressing -> createFilter(config) + is PasswordGeneratorConfigBuilder2.EmailSubdomainAddressing -> createFilter(config) + is PasswordGeneratorConfigBuilder2.EmailRelay -> createFilter(config) + } + + fun createLoginWithUsername( + username: String, + ) { + val type = DSecret.Type.Login + val route = LeAddRoute( + args = AddRoute.Args( + type = type, + username = username, + ), + ) + val intent = NavigationIntent.NavigateToRoute(route) + navigate(intent) + } + + fun createLoginWithPassword( + password: String, + ) { + val type = DSecret.Type.Login + val route = LeAddRoute( + args = AddRoute.Args( + type = type, + password = password, + ), + ) + val intent = NavigationIntent.NavigateToRoute(route) + navigate(intent) + } + + val refreshPasswordSink = EventFlow() + val refreshPassword = refreshPasswordSink::emit.partially1(Unit) + + val configBuilderFlow = typeFlow + .flatMapLatest { type -> + when (type) { + is GeneratorType2.Password -> combine( + passwordLengthSink, + passwordIncludeUppercaseCharactersSink, + passwordIncludeLowercaseCharactersSink, + passwordIncludeNumbersSink, + passwordIncludeSymbolsSink, + passwordExcludeSimilarCharactersSink, + passwordExcludeAmbiguousCharactersSink, + passwordIncludeNumbersMinSink, + passwordIncludeSymbolsMinSink, + passwordIncludeUppercaseCharactersMinSink, + passwordIncludeLowercaseCharactersMinSink, + ) { array -> + val length = array[0] as Long + val includeUppercaseCharacters = array[1] as Boolean + val includeLowercaseCharacters = array[2] as Boolean + val includeNumbers = array[3] as Boolean + val includeSymbols = array[4] as Boolean + val excludeSimilarCharacters = array[5] as Boolean + val excludeAmbiguousCharacters = array[6] as Boolean + val includeNumbersMin = array[7] as Long + val includeSymbolsMin = array[8] as Long + val includeUppercaseCharactersMin = array[9] as Long + val includeLowercaseCharactersMin = array[10] as Long + PasswordGeneratorConfigBuilder2.Password( + length = length.toInt(), + includeUppercaseCharacters = includeUppercaseCharacters, + includeUppercaseCharactersMin = includeUppercaseCharactersMin, + includeLowercaseCharacters = includeLowercaseCharacters, + includeLowercaseCharactersMin = includeLowercaseCharactersMin, + includeNumbers = includeNumbers, + includeNumbersMin = includeNumbersMin, + includeSymbols = includeSymbols, + includeSymbolsMin = includeSymbolsMin, + excludeSimilarCharacters = excludeSimilarCharacters, + excludeAmbiguousCharacters = excludeAmbiguousCharacters, + ) + } + + is GeneratorType2.Passphrase -> combine( + passphraseLengthSink, + passphraseDelimiterSink, + passphraseCapitalizeSink, + passphraseIncludeNumberSink, + ) { length, delimiter, capitalize, includeNumber -> + PasswordGeneratorConfigBuilder2.Passphrase( + length = length.toInt(), + delimiter = delimiter, + capitalize = capitalize, + includeNumber = includeNumber, + customWord = "", + ) + } + + is GeneratorType2.Username -> combine( + usernameLengthSink, + usernameDelimiterSink, + usernameCapitalizeSink, + usernameIncludeNumberSink, + usernameCustomWordSink, + ) { length, delimiter, capitalize, includeNumber, customWord -> + PasswordGeneratorConfigBuilder2.Username( + length = length.toInt(), + delimiter = delimiter, + capitalize = capitalize, + includeNumber = includeNumber, + customWord = customWord, + ) + } + + is GeneratorType2.EmailCatchAll -> combine( + emailCatchAllLengthSink, + emailCatchAllDomainSink, + ) { length, domain -> + PasswordGeneratorConfigBuilder2.EmailCatchAll( + length = length.toInt(), + domain = domain, + ) + } + + is GeneratorType2.EmailPlusAddressing -> combine( + emailPlusAddressingLengthSink, + emailPlusAddressingEmailSink, + ) { length, email -> + PasswordGeneratorConfigBuilder2.EmailPlusAddressing( + length = length.toInt(), + email = email, + ) + } + + is GeneratorType2.EmailSubdomainAddressing -> combine( + emailSubdomainAddressingLengthSink, + emailSubdomainAddressingEmailSink, + ) { length, email -> + PasswordGeneratorConfigBuilder2.EmailSubdomainAddressing( + length = length.toInt(), + email = email, + ) + } + + is GeneratorType2.EmailRelay -> flow { + val m = PasswordGeneratorConfigBuilder2.EmailRelay( + emailRelay = type.emailRelay, + config = type.config, + ) + emit(m) + } + }.map { it to type } + } + .distinctUntilChanged() + .shareIn(screenScope, SharingStarted.WhileSubscribed(), replay = 1) + + val typesFlow = combine( + typesAllFlow, + typeFlow, + ) { types, type -> + val typeTitle = translate(type.title) + val typeItems = buildContextItems { + types.forEachIndexed { index, t -> + if (index > 0) { + val groupChanged = types[index - 1].group != t.group + if (groupChanged) { + this += when (t.group) { + GENERATOR_TYPE_GROUP_INTEGRATION -> + ContextItem.Section( + title = translate(Res.strings.emailrelay_list_section_title), + ) + + else -> ContextItem.Section() + } + } + } + + when (t) { + is GeneratorType2.EmailRelay -> { + val emailRelay = t.config + this += FlatItemAction( + leading = { + val backgroundColor = if (MaterialTheme.colorScheme.isDark) { + emailRelay.accentColor.dark + } else { + emailRelay.accentColor.light + } + Box( + modifier = Modifier + .size(24.dp) + .background(backgroundColor, shape = CircleShape), + ) + }, + title = emailRelay.name, + onClick = { + typeSink.value = t.key + }, + ) + } + + else -> { + val imageVector = when { + t.password -> Icons.Outlined.Password + t is GeneratorType2.Username -> Icons.Outlined.AlternateEmail + else -> Icons.Outlined.Mail + } + this += FlatItemAction( + title = translate(t.title), + onClick = { + typeSink.value = t.key + }, + leading = icon(imageVector), + ) + } + } + } + } + GeneratorState.Type( + title = typeTitle, + items = typeItems, + ) + } + .stateIn(appScope) + val filterFlow = configBuilderFlow + .combine(tipVisibleSink) { (configBuilder, _), tipVisible -> + createFilter(configBuilder) + .let { filter -> + if (tipVisible) { + filter + } else { + filter.copy(tip = null) + } + } + } + .stateIn(screenScope) + val passwordTextFlow = configBuilderFlow + .map { (configBuilder, type) -> + val config = configBuilder.build() + val factory = getPassword(generatorContext, config) + Triple( + config, + factory, + type, + ) + } + .flatMapLatest { (config, factory, type) -> + val generateOnInit = !config.isExpensive() + flow { + val initialValue = "".right() + emit(initialValue to type) + + refreshPasswordSink + .onStart { + if (generateOnInit) { + emit(Unit) + } + } + .map { + val password = factory + .crashlyticsTap() + .handleErrorTap { e -> + message(e) + } + .attempt() + .bind() + password to type + } + .collect(this) + } + } + .flowOn(Dispatchers.Default) + .shareIn(screenScope, SharingStarted.Lazily, replay = 1) + passwordTextFlow + .debounce(1000L) + .onEach { (passwordResult, type) -> + val password = passwordResult + .getOrNull() + if (!password.isNullOrEmpty() && addGeneratorHistory != null) { + val model = DGeneratorHistory( + value = password, + createdDate = Clock.System.now(), + isPassword = type.password && args.password, + isUsername = type.username && args.username, + isEmailRelay = type is GeneratorType2.EmailRelay, + ) + addGeneratorHistory(model) + .crashlyticsTap() + .attempt() + .launchIn(appScope) + } + } + .launchIn(screenScope) + + val passwordFlow = combine( + getCanWrite(), + passwordTextFlow, + ) { canWrite, (passwordResult, type) -> + passwordResult.fold( + ifLeft = { e -> + GeneratorState.Value( + password = "", + strength = type.password && args.password, + dropdown = persistentListOf(), + actions = persistentListOf(), + onCopy = null, + onRefresh = refreshPassword, + ) + }, + ifRight = { password -> + if (password == null) { + return@fold null + } + + val dropdown = buildContextItems { + this += copyItemFactory.FlatItemAction( + title = translate(Res.strings.copy), + value = password, + ) + } + val actions = kotlin.run { + val list = mutableListOf() + if (canWrite && type.username) { + list += FlatItemAction( + leading = icon(Icons.Outlined.Add), + title = translate(Res.strings.generator_create_item_with_username_title), + onClick = ::createLoginWithUsername.partially1(password), + ) + } + if (canWrite && type.password) { + list += FlatItemAction( + leading = icon(Icons.Outlined.Add), + title = translate(Res.strings.generator_create_item_with_password_title), + onClick = ::createLoginWithPassword.partially1(password), + ) + } + list.toPersistentList() + } + GeneratorState.Value( + password = password, + strength = type.password && args.password, + dropdown = if (password.isNotEmpty()) { + dropdown + } else { + persistentListOf() + }, + actions = if (password.isNotEmpty()) { + actions + } else { + persistentListOf() + }, + onCopy = if (password.isNotEmpty()) { + copyItemFactory::copy + .partially1(password) + .partially1(false) + } else { + null + }, + onRefresh = refreshPassword, + ) + }, + ) + }.stateIn(screenScope) + val optionsStatic = buildContextItems { + this += EmailRelayListRoute.actionOrNull( + translator = this@produceScreenState, + navigate = ::navigate, + ) + } + val optionsFlow = tipVisibleSink + .map { tipVisible -> + FlatItemAction( + title = translate(Res.strings.generator_show_tips_title), + icon = Icons.Outlined.Info, + trailing = { + Checkbox( + checked = tipVisible, + onCheckedChange = null, + ) + }, + onClick = tipVisibleSink::value::set.partially1(!tipVisible), + ) + } + .map { tipVisibilityItem -> + optionsStatic.add(0, tipVisibilityItem) + } + + optionsFlow + .map { options -> + val state = GeneratorState( + onOpenHistory = ::onOpenHistory, + options = options, + typeState = typesFlow, + valueState = passwordFlow, + filterState = filterFlow, + ) + Loadable.Ok(state) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/generator/GeneratorType.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/generator/GeneratorType.kt new file mode 100644 index 00000000..dd674c8e --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/generator/GeneratorType.kt @@ -0,0 +1,78 @@ +package com.artemchep.keyguard.feature.generator + +import com.artemchep.keyguard.common.model.DGeneratorEmailRelay +import com.artemchep.keyguard.feature.localization.TextHolder +import com.artemchep.keyguard.res.Res + +const val GENERATOR_TYPE_GROUP_PASSWORD = "password" +const val GENERATOR_TYPE_GROUP_USERNAME = "username" +const val GENERATOR_TYPE_GROUP_INTEGRATION = "integration" + +sealed interface GeneratorType2 { + val key: String + val group: String + val title: TextHolder + val username: Boolean + val password: Boolean + + data object Password : GeneratorType2 { + override val key: String = "PASSWORD" + override val group: String = GENERATOR_TYPE_GROUP_PASSWORD + override val title: TextHolder = TextHolder.Res(Res.strings.generator_password_type) + override val username: Boolean = true + override val password: Boolean = true + } + + data object Passphrase : GeneratorType2 { + override val key: String = "PASSPHRASE" + override val group: String = GENERATOR_TYPE_GROUP_PASSWORD + override val title: TextHolder = TextHolder.Res(Res.strings.generator_passphrase_type) + override val username: Boolean = false + override val password: Boolean = true + } + + data object Username : GeneratorType2 { + override val key: String = "USERNAME" + override val group: String = GENERATOR_TYPE_GROUP_USERNAME + override val title: TextHolder = TextHolder.Res(Res.strings.generator_username_type) + override val username: Boolean = true + override val password: Boolean = false + } + + data object EmailCatchAll : GeneratorType2 { + override val key: String = "EMAIL_CATCH_ALL" + override val group: String = GENERATOR_TYPE_GROUP_USERNAME + override val title: TextHolder = TextHolder.Res(Res.strings.generator_email_catch_all_type) + override val username: Boolean = true + override val password: Boolean = false + } + + data object EmailPlusAddressing : GeneratorType2 { + override val key: String = "EMAIL_PLUS_ADDRESSING" + override val group: String = GENERATOR_TYPE_GROUP_USERNAME + override val title: TextHolder = + TextHolder.Res(Res.strings.generator_email_plus_addressing_type) + override val username: Boolean = true + override val password: Boolean = false + } + + data object EmailSubdomainAddressing : GeneratorType2 { + override val key: String = "EMAIL_SUBDOMAIN_ADDRESSING" + override val group: String = GENERATOR_TYPE_GROUP_USERNAME + override val title: TextHolder = + TextHolder.Res(Res.strings.generator_email_subdomain_addressing_type) + override val username: Boolean = true + override val password: Boolean = false + } + + data class EmailRelay( + val emailRelay: com.artemchep.keyguard.common.service.relays.api.EmailRelay, + val config: DGeneratorEmailRelay, + ) : GeneratorType2 { + override val key: String = "EMAIL_RELAY:${emailRelay.type}" + override val group: String = GENERATOR_TYPE_GROUP_INTEGRATION + override val title: TextHolder = TextHolder.Value(config.name) + override val username: Boolean = true + override val password: Boolean = false + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/generator/emailrelay/EmailRelayListRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/generator/emailrelay/EmailRelayListRoute.kt new file mode 100644 index 00000000..daa43f08 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/generator/emailrelay/EmailRelayListRoute.kt @@ -0,0 +1,39 @@ +package com.artemchep.keyguard.feature.generator.emailrelay + +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.ForwardToInbox +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.feature.navigation.Route +import com.artemchep.keyguard.feature.navigation.state.TranslatorScope +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItemAction +import com.artemchep.keyguard.ui.icons.iconSmall + +object EmailRelayListRoute : Route { + fun actionOrNull( + translator: TranslatorScope, + navigate: (NavigationIntent) -> Unit, + ) = action( + translator = translator, + navigate = navigate, + ) + + fun action( + translator: TranslatorScope, + navigate: (NavigationIntent) -> Unit, + ) = FlatItemAction( + leading = iconSmall(Icons.Outlined.ForwardToInbox), + title = translator.translate(Res.strings.emailrelay_list_header_title), + onClick = { + val route = EmailRelayListRoute + val intent = NavigationIntent.NavigateToRoute(route) + navigate(intent) + }, + ) + + @Composable + override fun Content() { + EmailRelayListScreen() + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/generator/emailrelay/EmailRelayListScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/generator/emailrelay/EmailRelayListScreen.kt new file mode 100644 index 00000000..74561d4c --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/generator/emailrelay/EmailRelayListScreen.kt @@ -0,0 +1,324 @@ +package com.artemchep.keyguard.feature.generator.emailrelay + +import androidx.compose.foundation.ExperimentalFoundationApi +import androidx.compose.foundation.border +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.widthIn +import androidx.compose.foundation.lazy.LazyListState +import androidx.compose.foundation.lazy.items +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Add +import androidx.compose.material3.Checkbox +import androidx.compose.material3.DropdownMenu +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.runtime.snapshotFlow +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.input.nestedscroll.nestedScroll +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.model.flatMap +import com.artemchep.keyguard.common.model.getOrNull +import com.artemchep.keyguard.feature.EmptyView +import com.artemchep.keyguard.feature.ErrorView +import com.artemchep.keyguard.feature.home.vault.component.rememberSecretAccentColor +import com.artemchep.keyguard.feature.navigation.NavigationIcon +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.AvatarBuilder +import com.artemchep.keyguard.ui.DefaultFab +import com.artemchep.keyguard.ui.DefaultSelection +import com.artemchep.keyguard.ui.DropdownMenuItemFlat +import com.artemchep.keyguard.ui.DropdownMinWidth +import com.artemchep.keyguard.ui.DropdownScopeImpl +import com.artemchep.keyguard.ui.ExpandedIfNotEmptyForRow +import com.artemchep.keyguard.ui.FabState +import com.artemchep.keyguard.ui.FlatDropdown +import com.artemchep.keyguard.ui.FlatItemTextContent +import com.artemchep.keyguard.ui.ScaffoldLazyColumn +import com.artemchep.keyguard.ui.icons.IconBox +import com.artemchep.keyguard.ui.skeleton.SkeletonItem +import com.artemchep.keyguard.ui.toolbar.CustomToolbar +import com.artemchep.keyguard.ui.toolbar.content.CustomToolbarContent +import com.artemchep.keyguard.ui.util.DividerColor +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.flow.filter +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.flow.withIndex + +@Composable +fun EmailRelayListScreen( +) { + val loadableState = produceEmailRelayListState( + ) + EmailRelayListScreen( + loadableState = loadableState, + ) +} + +@OptIn(ExperimentalMaterial3Api::class, ExperimentalFoundationApi::class) +@Composable +fun EmailRelayListScreen( + loadableState: Loadable, +) { + val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior() + + val listRevision = + loadableState.getOrNull()?.content?.getOrNull()?.getOrNull()?.revision + val listState = remember { + LazyListState( + firstVisibleItemIndex = 0, + firstVisibleItemScrollOffset = 0, + ) + } + + LaunchedEffect(listRevision) { + // TODO: How do you wait till the layout state start to represent + // the actual data? + val listSize = + loadableState.getOrNull()?.content?.getOrNull()?.getOrNull()?.items?.size + snapshotFlow { listState.layoutInfo.totalItemsCount } + .withIndex() + .filter { + it.index > 0 || it.value == listSize + } + .first() + + listState.scrollToItem(0, 0) + } + + val dp = remember { + mutableStateOf(false) + } + val rp = remember { + mutableStateOf(false) + } + val pitems = loadableState.getOrNull()?.content?.getOrNull()?.getOrNull()?.primaryActions + if (pitems.isNullOrEmpty()) { + dp.value = false + } + + ScaffoldLazyColumn( + modifier = Modifier + .nestedScroll(scrollBehavior.nestedScrollConnection), + topAppBarScrollBehavior = scrollBehavior, + topBar = { + CustomToolbar( + scrollBehavior = scrollBehavior, + ) { + Column { + CustomToolbarContent( + title = stringResource(Res.strings.emailrelay_list_header_title), + icon = { + NavigationIcon() + }, + ) + } + } + }, + bottomBar = { + val selectionOrNull = + loadableState.getOrNull()?.content?.getOrNull()?.getOrNull()?.selection + DefaultSelection( + state = selectionOrNull, + ) + }, + floatingActionState = run { + val fabVisible = !pitems.isNullOrEmpty() + val fabState = if (fabVisible) { + FabState( + onClick = { + dp.value = true + }, + model = null, + ) + } else { + null + } + rememberUpdatedState(newValue = fabState) + }, + floatingActionButton = { + DefaultFab( + icon = { + IconBox(main = Icons.Outlined.Add) + + // Inject the dropdown popup to the bottom of the + // content. + val onDismissRequest = remember(dp) { + // lambda + { + dp.value = false + } + } + DropdownMenu( + modifier = Modifier + .widthIn(min = DropdownMinWidth), + expanded = dp.value, + onDismissRequest = onDismissRequest, + ) { + val scope = DropdownScopeImpl(this, onDismissRequest = onDismissRequest) + with(scope) { + pitems?.forEachIndexed { index, action -> + DropdownMenuItemFlat( + action = action, + ) + } + } + } + }, + text = { + Text( + text = stringResource(Res.strings.add_integration), + ) + }, + ) + }, + listState = listState, + ) { + val contentState = loadableState + .flatMap { it.content } + when (contentState) { + is Loadable.Loading -> { + for (i in 1..3) { + item("skeleton.$i") { + SkeletonItem() + } + } + } + + is Loadable.Ok -> { + contentState.value.fold( + ifLeft = { e -> + item("error") { + ErrorView( + text = { + Text(text = "Failed to load app list!") + }, + exception = e, + ) + } + }, + ifRight = { content -> + val items = content.items + if (items.isEmpty()) { + item("empty") { + NoItemsPlaceholder() + } + } + + items( + items = items, + key = { it.key }, + ) { item -> + AppItem( + modifier = Modifier + .animateItemPlacement(), + item = item, + ) + } + }, + ) + } + } + } +} + +@Composable +private fun NoItemsPlaceholder( + modifier: Modifier = Modifier, +) { + EmptyView( + modifier = modifier, + text = { + Text( + text = stringResource(Res.strings.emailrelay_empty_label), + ) + }, + ) +} + +@Composable +private fun AppItem( + modifier: Modifier, + item: EmailRelayListState.Item, +) { + val selectableState by item.selectableState.collectAsState() + val backgroundColor = when { + selectableState.selected -> MaterialTheme.colorScheme.primaryContainer + else -> Color.Unspecified + } + FlatDropdown( + modifier = modifier, + backgroundColor = backgroundColor, + leading = { + val accent = rememberSecretAccentColor( + accentLight = item.accentLight, + accentDark = item.accentDark, + ) + AvatarBuilder( + icon = item.icon, + accent = accent, + active = true, + badge = { + // Do nothing. + }, + ) + }, + content = { + FlatItemTextContent( + title = { + Text(item.title) + }, + ) + }, + trailing = { + Text( + modifier = Modifier + .widthIn(max = 128.dp) + .padding( + top = 8.dp, + bottom = 8.dp, + ) + .border( + Dp.Hairline, + DividerColor, + MaterialTheme.shapes.small, + ) + .padding( + horizontal = 8.dp, + vertical = 4.dp, + ), + text = item.service, + style = MaterialTheme.typography.labelSmall, + textAlign = TextAlign.End, + maxLines = 2, + ) + ExpandedIfNotEmptyForRow( + selectableState.selected.takeIf { selectableState.selecting }, + ) { selected -> + Checkbox( + modifier = Modifier + .padding(start = 16.dp), + checked = selected, + onCheckedChange = null, + ) + } + }, + dropdown = item.dropdown, + onClick = selectableState.onClick, + onLongClick = selectableState.onLongClick, + enabled = true, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/generator/emailrelay/EmailRelayListState.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/generator/emailrelay/EmailRelayListState.kt new file mode 100644 index 00000000..ad8cd22f --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/generator/emailrelay/EmailRelayListState.kt @@ -0,0 +1,40 @@ +package com.artemchep.keyguard.feature.generator.emailrelay + +import androidx.compose.runtime.Immutable +import androidx.compose.runtime.Stable +import androidx.compose.ui.graphics.Color +import arrow.core.Either +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.feature.attachments.SelectableItemState +import com.artemchep.keyguard.feature.home.vault.model.VaultItemIcon +import com.artemchep.keyguard.ui.ContextItem +import com.artemchep.keyguard.ui.Selection +import kotlinx.collections.immutable.ImmutableList +import kotlinx.coroutines.flow.StateFlow + +@Immutable +data class EmailRelayListState( + val content: Loadable>, +) { + @Immutable + data class Content( + val revision: Int, + val items: ImmutableList, + val selection: Selection?, + val primaryActions: ImmutableList, + ) { + companion object + } + + @Stable + data class Item( + val key: String, + val title: String, + val service: String, + val icon: VaultItemIcon, + val accentLight: Color, + val accentDark: Color, + val dropdown: ImmutableList, + val selectableState: StateFlow, + ) +} \ No newline at end of file diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/generator/emailrelay/EmailRelayListStateProducer.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/generator/emailrelay/EmailRelayListStateProducer.kt new file mode 100644 index 00000000..5b8d9c39 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/generator/emailrelay/EmailRelayListStateProducer.kt @@ -0,0 +1,360 @@ +package com.artemchep.keyguard.feature.generator.emailrelay + +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Add +import androidx.compose.material.icons.outlined.Delete +import androidx.compose.material.icons.outlined.Edit +import androidx.compose.material.icons.outlined.Email +import androidx.compose.runtime.Composable +import arrow.core.partially1 +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.model.DGeneratorEmailRelay +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.service.relays.api.EmailRelay +import com.artemchep.keyguard.common.usecase.AddEmailRelay +import com.artemchep.keyguard.common.usecase.GetEmailRelays +import com.artemchep.keyguard.common.usecase.RemoveEmailRelayById +import com.artemchep.keyguard.common.util.flow.persistingStateIn +import com.artemchep.keyguard.feature.attachments.SelectableItemState +import com.artemchep.keyguard.feature.attachments.SelectableItemStateRaw +import com.artemchep.keyguard.feature.confirmation.ConfirmationResult +import com.artemchep.keyguard.feature.confirmation.ConfirmationRoute +import com.artemchep.keyguard.feature.confirmation.createConfirmationDialogIntent +import com.artemchep.keyguard.feature.crashlytics.crashlyticsAttempt +import com.artemchep.keyguard.feature.home.vault.model.VaultItemIcon +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.feature.navigation.registerRouteResultReceiver +import com.artemchep.keyguard.feature.navigation.state.produceScreenState +import com.artemchep.keyguard.feature.navigation.state.translate +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItemAction +import com.artemchep.keyguard.ui.Selection +import com.artemchep.keyguard.ui.buildContextItems +import com.artemchep.keyguard.ui.icons.icon +import com.artemchep.keyguard.ui.selection.selectionHandle +import kotlinx.collections.immutable.toImmutableList +import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.toPersistentMap +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.filterNotNull +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.onEach +import kotlinx.coroutines.flow.stateIn +import kotlinx.datetime.Clock +import org.kodein.di.allInstances +import org.kodein.di.compose.localDI +import org.kodein.di.direct +import org.kodein.di.instance + +private class EmailRelayListUiException( + msg: String, + cause: Throwable, +) : RuntimeException(msg, cause) + +@Composable +fun produceEmailRelayListState( +) = with(localDI().direct) { + produceEmailRelayListState( + emailRelays = allInstances(), + addEmailRelay = instance(), + removeEmailRelayById = instance(), + getEmailRelays = instance(), + ) +} + +@Composable +fun produceEmailRelayListState( + emailRelays: List, + addEmailRelay: AddEmailRelay, + removeEmailRelayById: RemoveEmailRelayById, + getEmailRelays: GetEmailRelays, +): Loadable = produceScreenState( + key = "emailrelay_list", + initial = Loadable.Loading, + args = arrayOf(), +) { + val selectionHandle = selectionHandle("selection") + + fun onEdit(model: EmailRelay, entity: DGeneratorEmailRelay?) { + val keyName = "name" + + val items2 = model + .schema + .map { emailRelay -> + val itemKey = emailRelay.key + val itemValue = entity?.data?.get(itemKey).orEmpty() + ConfirmationRoute.Args.Item.StringItem( + key = itemKey, + value = itemValue, + title = translate(emailRelay.value.title), + hint = emailRelay.value.hint?.let { translate(it) }, + type = emailRelay.value.type, + canBeEmpty = emailRelay.value.canBeEmpty, + ) + } + .let { + val out = mutableListOf>() + out += ConfirmationRoute.Args.Item.StringItem( + key = keyName, + value = entity?.name + ?: model.name, + title = translate(Res.strings.generic_name), + ) + out += it + out + } + val route = registerRouteResultReceiver( + route = ConfirmationRoute( + args = ConfirmationRoute.Args( + icon = icon( + main = Icons.Outlined.Email, + secondary = if (entity != null) { + Icons.Outlined.Edit + } else { + Icons.Outlined.Add + }, + ), + title = model.name, + subtitle = translate(Res.strings.emailrelay_integration_title), + items = items2, + docUrl = model.docUrl, + ), + ), + ) { result -> + if (result is ConfirmationResult.Confirm) { + val name = result.data[keyName] as? String + ?: return@registerRouteResultReceiver + val createdAt = Clock.System.now() + val data = model + .schema + .mapNotNull { entry -> + val value = result.data[entry.key] as? String + ?: return@mapNotNull null + entry.key to value + } + .toMap() + .toPersistentMap() + val model = DGeneratorEmailRelay( + id = entity?.id, + name = name, + type = model.type, + data = data, + createdDate = createdAt, + ) + addEmailRelay(model) + .launchIn(appScope) + } + } + val intent = NavigationIntent.NavigateToRoute(route) + navigate(intent) + } + + fun onNew(model: EmailRelay) = onEdit(model, null) + + fun onDelete( + emailRelayIds: Set, + ) { + val title = if (emailRelayIds.size > 1) { + translate(Res.strings.emailrelay_delete_many_confirmation_title) + } else { + translate(Res.strings.emailrelay_delete_one_confirmation_title) + } + val intent = createConfirmationDialogIntent( + icon = icon(Icons.Outlined.Delete), + title = title, + ) { + removeEmailRelayById(emailRelayIds) + .launchIn(appScope) + } + navigate(intent) + } + + val primaryActions = emailRelays + .map { emailRelay -> + val key = emailRelay.type + FlatItemAction( + id = key, + title = emailRelay.name, + onClick = ::onNew + .partially1(emailRelay), + ) + } + .sortedBy { it.title } + .toImmutableList() + + val itemsRawFlow = getEmailRelays() + // Automatically de-select items + // that do not exist. + combine( + itemsRawFlow, + selectionHandle.idsFlow, + ) { items, selectedItemIds -> + val newSelectedItemIds = selectedItemIds + .asSequence() + .filter { id -> + items.any { it.id == id } + } + .toSet() + newSelectedItemIds.takeIf { it.size < selectedItemIds.size } + } + .filterNotNull() + .onEach { ids -> selectionHandle.setSelection(ids) } + .launchIn(screenScope) + val selectionFlow = combine( + itemsRawFlow, + selectionHandle.idsFlow, + ) { items, selectedItemIds -> + val selectedItems = items + .filter { it.id in selectedItemIds } + items to selectedItems + } + .map { (allItems, selectedItems) -> + if (selectedItems.isEmpty()) { + return@map null + } + + val actions = mutableListOf() + actions += FlatItemAction( + leading = icon(Icons.Outlined.Delete), + title = translate(Res.strings.delete), + onClick = { + val ids = selectedItems.mapNotNull { it.id }.toSet() + onDelete(ids) + }, + ) + Selection( + count = selectedItems.size, + actions = actions.toPersistentList(), + onSelectAll = if (selectedItems.size < allItems.size) { + val allIds = allItems + .asSequence() + .mapNotNull { it.id } + .toSet() + selectionHandle::setSelection + .partially1(allIds) + } else { + null + }, + onClear = selectionHandle::clearSelection, + ) + } + val itemsFlow = itemsRawFlow + .map { list -> + list + .map { + val relay = emailRelays + .firstOrNull { r -> r.type == it.type } + val dropdown = buildContextItems { + section { + if (relay != null) { + this += FlatItemAction( + icon = Icons.Outlined.Edit, + title = translate(Res.strings.edit), + onClick = ::onEdit + .partially1(relay) + .partially1(it), + ) + } + this += FlatItemAction( + icon = Icons.Outlined.Delete, + title = translate(Res.strings.delete), + onClick = ::onDelete + .partially1(setOfNotNull(it.id)), + ) + } + } + val icon = VaultItemIcon.TextIcon( + run { + val words = it.name.split(" ") + if (words.size <= 1) { + return@run words.firstOrNull()?.take(2).orEmpty() + } + + words + .take(2) + .joinToString("") { it.take(1) } + }.uppercase(), + ) + + val selectableFlow = selectionHandle + .idsFlow + .map { selectedIds -> + SelectableItemStateRaw( + selecting = selectedIds.isNotEmpty(), + selected = it.id in selectedIds, + ) + } + .distinctUntilChanged() + .map { raw -> + val onClick = if (raw.selecting) { + // lambda + selectionHandle::toggleSelection.partially1(it.id.orEmpty()) + } else { + null + } + val onLongClick = if (raw.selecting) { + null + } else { + // lambda + selectionHandle::toggleSelection.partially1(it.id.orEmpty()) + } + SelectableItemState( + selecting = raw.selecting, + selected = raw.selected, + onClick = onClick, + onLongClick = onLongClick, + ) + } + val selectableStateFlow = + if (list.size >= 100) { + val sharing = SharingStarted.WhileSubscribed(1000L) + selectableFlow.persistingStateIn(this, sharing) + } else { + selectableFlow.stateIn(this) + } + EmailRelayListState.Item( + key = it.id.orEmpty(), + title = it.name, + service = relay?.name ?: it.type, + icon = icon, + accentLight = it.accentColor.light, + accentDark = it.accentColor.dark, + dropdown = dropdown, + selectableState = selectableStateFlow, + ) + } + .toPersistentList() + } + .crashlyticsAttempt { e -> + val msg = "Failed to get the email relay list!" + EmailRelayListUiException( + msg = msg, + cause = e, + ) + } + val contentFlow = combine( + selectionFlow, + itemsFlow, + ) { selection, itemsResult -> + val contentOrException = itemsResult + .map { items -> + EmailRelayListState.Content( + revision = 0, + items = items, + selection = selection, + primaryActions = primaryActions, + ) + } + Loadable.Ok(contentOrException) + } + contentFlow + .map { content -> + val state = EmailRelayListState( + content = content, + ) + Loadable.Ok(state) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/generator/history/GeneratorHistoryItem.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/generator/history/GeneratorHistoryItem.kt new file mode 100644 index 00000000..86a8ced1 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/generator/history/GeneratorHistoryItem.kt @@ -0,0 +1,51 @@ +package com.artemchep.keyguard.feature.generator.history + +import androidx.compose.runtime.Immutable +import arrow.optics.optics +import com.artemchep.keyguard.feature.attachments.SelectableItemState +import com.artemchep.keyguard.ui.FlatItemAction +import kotlinx.collections.immutable.PersistentList +import kotlinx.coroutines.flow.StateFlow +import kotlinx.datetime.Instant +import java.util.UUID + +@Immutable +@optics +sealed interface GeneratorHistoryItem { + companion object + + val id: String + + @Immutable + data class Section( + override val id: String = UUID.randomUUID().toString(), + val text: String? = null, + val caps: Boolean = true, + ) : GeneratorHistoryItem { + companion object + } + + @Immutable + data class Value( + override val id: String, + val title: String, + val text: String, + val type: Type?, + val createdDate: Instant, + /** + * List of the callable actions appended + * to the item. + */ + val dropdown: PersistentList, + val selectableState: StateFlow, + ) : GeneratorHistoryItem { + companion object; + + enum class Type { + PASSWORD, + USERNAME, + EMAIL, + EMAIL_RELAY, + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/generator/history/GeneratorHistoryRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/generator/history/GeneratorHistoryRoute.kt new file mode 100644 index 00000000..ebf1fa27 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/generator/history/GeneratorHistoryRoute.kt @@ -0,0 +1,11 @@ +package com.artemchep.keyguard.feature.generator.history + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.navigation.Route + +object GeneratorHistoryRoute : Route { + @Composable + override fun Content() { + GeneratorHistoryScreen() + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/generator/history/GeneratorHistoryScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/generator/history/GeneratorHistoryScreen.kt new file mode 100644 index 00000000..9966f988 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/generator/history/GeneratorHistoryScreen.kt @@ -0,0 +1,254 @@ +package com.artemchep.keyguard.feature.generator.history + +import androidx.compose.animation.Crossfade +import androidx.compose.foundation.ExperimentalFoundationApi +import androidx.compose.foundation.lazy.LazyListScope +import androidx.compose.foundation.lazy.items +import androidx.compose.material.ExperimentalMaterialApi +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.AlternateEmail +import androidx.compose.material.icons.outlined.ContentCopy +import androidx.compose.material.icons.outlined.Email +import androidx.compose.material.icons.outlined.ForwardToInbox +import androidx.compose.material.icons.outlined.Password +import androidx.compose.material3.Checkbox +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.input.nestedscroll.nestedScroll +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.model.fold +import com.artemchep.keyguard.common.model.getOrNull +import com.artemchep.keyguard.feature.EmptyView +import com.artemchep.keyguard.feature.home.vault.component.Section +import com.artemchep.keyguard.feature.navigation.NavigationIcon +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.DefaultSelection +import com.artemchep.keyguard.ui.ExpandedIfNotEmptyForRow +import com.artemchep.keyguard.ui.FlatDropdown +import com.artemchep.keyguard.ui.FlatItemAction +import com.artemchep.keyguard.ui.FlatItemTextContent +import com.artemchep.keyguard.ui.OptionsButton +import com.artemchep.keyguard.ui.ScaffoldLazyColumn +import com.artemchep.keyguard.ui.colorizePassword +import com.artemchep.keyguard.ui.icons.Stub +import com.artemchep.keyguard.ui.items.FlatItemSkeleton +import com.artemchep.keyguard.ui.theme.monoFontFamily +import com.artemchep.keyguard.ui.toolbar.LargeToolbar +import dev.icerock.moko.resources.compose.stringResource + +@Composable +fun GeneratorHistoryScreen() { + val loadableState = produceGeneratorHistoryState() + GeneratorPaneMaster( + modifier = Modifier, + loadableState = loadableState, + ) +} + +@OptIn( + ExperimentalMaterial3Api::class, + ExperimentalMaterialApi::class, +) +@Composable +private fun GeneratorPaneMaster( + modifier: Modifier, + loadableState: Loadable, +) { + val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior() + ScaffoldLazyColumn( + modifier = modifier + .nestedScroll(scrollBehavior.nestedScrollConnection), + topAppBarScrollBehavior = scrollBehavior, + topBar = { + LargeToolbar( + title = { + Text(stringResource(Res.strings.generatorhistory_header_title)) + }, + navigationIcon = { + NavigationIcon() + }, + actions = { + loadableState.fold( + ifLoading = { + }, + ifOk = { state -> + val actions = state.options + OptionsButton(actions) + }, + ) + }, + scrollBehavior = scrollBehavior, + ) + }, + bottomBar = { + val selectionOrNull = loadableState.getOrNull()?.selection + DefaultSelection( + state = selectionOrNull, + ) + }, + ) { + loadableState.fold( + ifLoading = { + populateGeneratorPaneMasterSkeleton() + }, + ifOk = { state -> + populateGeneratorPaneMasterContent( + state = state, + ) + }, + ) + } +} + +private fun LazyListScope.populateGeneratorPaneMasterSkeleton() { + item("skeleton") { + FlatItemSkeleton() + } +} + +@OptIn(ExperimentalFoundationApi::class) +private fun LazyListScope.populateGeneratorPaneMasterContent( + state: GeneratorHistoryState, +) { + if (state.items.isEmpty()) { + item("empty") { + EmptyView() + } + } + items(state.items, key = { it.id }) { item -> + GeneratorHistoryItem( + modifier = Modifier + .animateItemPlacement(), + item = item, + ) + } +} + +@Composable +private fun GeneratorHistoryItem( + modifier: Modifier, + item: GeneratorHistoryItem, +) = when (item) { + is GeneratorHistoryItem.Section -> GeneratorHistoryItem( + modifier = modifier, + item = item, + ) + + is GeneratorHistoryItem.Value -> GeneratorHistoryItem( + modifier = modifier, + item = item, + ) +} + +@Composable +private fun GeneratorHistoryItem( + modifier: Modifier, + item: GeneratorHistoryItem.Section, +) { + Section( + modifier = modifier, + text = item.text, + caps = item.caps, + ) +} + +@Composable +private fun GeneratorHistoryItem( + modifier: Modifier, + item: GeneratorHistoryItem.Value, +) { + val selectableState by item.selectableState.collectAsState() + val backgroundColor = when { + selectableState.selected -> MaterialTheme.colorScheme.primaryContainer + else -> Color.Unspecified + } + FlatDropdown( + modifier = modifier, + backgroundColor = backgroundColor, + leading = { + Crossfade(targetState = item.type) { type -> + val icon = when (type) { + GeneratorHistoryItem.Value.Type.USERNAME -> Icons.Outlined.AlternateEmail + GeneratorHistoryItem.Value.Type.EMAIL -> Icons.Outlined.Email + GeneratorHistoryItem.Value.Type.EMAIL_RELAY -> Icons.Outlined.ForwardToInbox + GeneratorHistoryItem.Value.Type.PASSWORD -> Icons.Outlined.Password + null -> Icons.Stub + } + Icon(icon, null) + } + }, + content = { + FlatItemTextContent( + title = { + when (item.type) { + GeneratorHistoryItem.Value.Type.USERNAME, + GeneratorHistoryItem.Value.Type.EMAIL, + GeneratorHistoryItem.Value.Type.EMAIL_RELAY, + -> + Text( + text = item.title, + fontFamily = monoFontFamily, + ) + + else -> + Text( + text = colorizePassword(item.title, LocalContentColor.current), + fontFamily = monoFontFamily, + ) + } + }, + text = if (item.text.isNotBlank()) { + // composable + { + Text(item.text) + } + } else { + null + }, + ) + }, + dropdown = item.dropdown, + trailing = { + val onCopyAction = remember(item.dropdown) { + item.dropdown + .firstOrNull { it.type == FlatItemAction.Type.COPY } + } + if (onCopyAction != null) { + val onCopy = onCopyAction.onClick + IconButton( + enabled = onCopy != null, + onClick = { + onCopy?.invoke() + }, + ) { + Icon( + imageVector = Icons.Outlined.ContentCopy, + contentDescription = null, + ) + } + } + ExpandedIfNotEmptyForRow( + selectableState.selected.takeIf { selectableState.selecting }, + ) { selected -> + Checkbox( + checked = selected, + onCheckedChange = null, + ) + } + }, + onClick = selectableState.onClick, + onLongClick = selectableState.onLongClick, + enabled = true, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/generator/history/GeneratorHistoryState.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/generator/history/GeneratorHistoryState.kt new file mode 100644 index 00000000..dff549ea --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/generator/history/GeneratorHistoryState.kt @@ -0,0 +1,15 @@ +@file:JvmName("GeneratorStateUtils") + +package com.artemchep.keyguard.feature.generator.history + +import androidx.compose.runtime.Immutable +import com.artemchep.keyguard.ui.FlatItemAction +import com.artemchep.keyguard.ui.Selection +import kotlinx.collections.immutable.ImmutableList + +@Immutable +data class GeneratorHistoryState( + val selection: Selection?, + val options: ImmutableList, + val items: ImmutableList, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/generator/history/GeneratorHistoryStateProducer.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/generator/history/GeneratorHistoryStateProducer.kt new file mode 100644 index 00000000..5d736501 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/generator/history/GeneratorHistoryStateProducer.kt @@ -0,0 +1,313 @@ +package com.artemchep.keyguard.feature.generator.history + +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Delete +import androidx.compose.runtime.Composable +import arrow.core.partially1 +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.service.clipboard.ClipboardService +import com.artemchep.keyguard.common.usecase.DateFormatter +import com.artemchep.keyguard.common.usecase.GetGeneratorHistory +import com.artemchep.keyguard.common.usecase.RemoveGeneratorHistory +import com.artemchep.keyguard.common.usecase.RemoveGeneratorHistoryById +import com.artemchep.keyguard.common.util.flow.persistingStateIn +import com.artemchep.keyguard.feature.attachments.SelectableItemState +import com.artemchep.keyguard.feature.attachments.SelectableItemStateRaw +import com.artemchep.keyguard.feature.auth.common.util.REGEX_EMAIL +import com.artemchep.keyguard.feature.confirmation.ConfirmationResult +import com.artemchep.keyguard.feature.confirmation.ConfirmationRoute +import com.artemchep.keyguard.feature.decorator.ItemDecoratorDate +import com.artemchep.keyguard.feature.largetype.LargeTypeRoute +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.feature.navigation.registerRouteResultReceiver +import com.artemchep.keyguard.feature.navigation.state.copy +import com.artemchep.keyguard.feature.navigation.state.produceScreenState +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItemAction +import com.artemchep.keyguard.ui.Selection +import com.artemchep.keyguard.ui.icons.icon +import com.artemchep.keyguard.ui.selection.selectionHandle +import kotlinx.collections.immutable.persistentListOf +import kotlinx.collections.immutable.toImmutableList +import kotlinx.collections.immutable.toPersistentList +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.awaitCancellation +import kotlinx.coroutines.coroutineScope +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.filterNotNull +import kotlinx.coroutines.flow.flatMapLatest +import kotlinx.coroutines.flow.flow +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.onEach +import kotlinx.coroutines.flow.stateIn +import org.kodein.di.compose.localDI +import org.kodein.di.direct +import org.kodein.di.instance + +@Composable +fun produceGeneratorHistoryState() = with(localDI().direct) { + produceGeneratorHistoryState( + getGeneratorHistory = instance(), + removeGeneratorHistory = instance(), + removeGeneratorHistoryById = instance(), + dateFormatter = instance(), + clipboardService = instance(), + ) +} + +@Composable +fun produceGeneratorHistoryState( + getGeneratorHistory: GetGeneratorHistory, + removeGeneratorHistory: RemoveGeneratorHistory, + removeGeneratorHistoryById: RemoveGeneratorHistoryById, + dateFormatter: DateFormatter, + clipboardService: ClipboardService, +): Loadable = produceScreenState( + initial = Loadable.Loading, + key = "generator_history", + args = arrayOf( + getGeneratorHistory, + removeGeneratorHistory, + removeGeneratorHistoryById, + dateFormatter, + clipboardService, + ), +) { + val selectionHandle = selectionHandle("selection") + + val copyFactory = copy(clipboardService) + + val itemsRawFlow = getGeneratorHistory() + .shareInScreenScope() + val optionsFlow = itemsRawFlow + .map { items -> + items.isEmpty() + } + .distinctUntilChanged() + .map { isEmpty -> + if (isEmpty) { + persistentListOf() + } else { + val action = FlatItemAction( + leading = icon(Icons.Outlined.Delete), + title = translate(Res.strings.generatorhistory_clear_history_title), + onClick = { + val route = registerRouteResultReceiver( + route = ConfirmationRoute( + args = ConfirmationRoute.Args( + icon = icon(Icons.Outlined.Delete), + title = translate(Res.strings.generatorhistory_clear_history_confirmation_title), + message = translate(Res.strings.generatorhistory_clear_history_confirmation_text), + ), + ), + ) { + if (it is ConfirmationResult.Confirm) { + removeGeneratorHistory() + .launchIn(appScope) + } + } + val intent = NavigationIntent.NavigateToRoute(route) + navigate(intent) + }, + ) + persistentListOf(action) + } + } + // Automatically de-select items + // that do not exist. + combine( + itemsRawFlow, + selectionHandle.idsFlow, + ) { items, selectedItemIds -> + val newSelectedAttachmentIds = selectedItemIds + .asSequence() + .filter { attachmentId -> + items.any { it.id == attachmentId } + } + .toSet() + newSelectedAttachmentIds.takeIf { it.size < selectedItemIds.size } + } + .filterNotNull() + .onEach { ids -> selectionHandle.setSelection(ids) } + .launchIn(screenScope) + + val selectionFlow = combine( + itemsRawFlow, + selectionHandle.idsFlow, + ) { items, selectedItemIds -> + val selectedItems = items + .filter { it.id in selectedItemIds } + items to selectedItems + } + .map { (allItems, selectedItems) -> + if (selectedItems.isEmpty()) { + return@map null + } + + val actions = mutableListOf() + actions += FlatItemAction( + leading = icon(Icons.Outlined.Delete), + title = translate(Res.strings.remove_from_history), + onClick = { + val ids = selectedItems.mapNotNull { it.id }.toSet() + removeGeneratorHistoryById(ids) + .launchIn(appScope) + }, + ) + Selection( + count = selectedItems.size, + actions = actions.toPersistentList(), + onSelectAll = if (selectedItems.size < allItems.size) { + val allIds = allItems + .asSequence() + .mapNotNull { it.id } + .toSet() + selectionHandle::setSelection + .partially1(allIds) + } else { + null + }, + onClear = selectionHandle::clearSelection, + ) + } + + val itemsValueFlow = itemsRawFlow + .mapLatestScoped { items -> + items.map { item -> + val type = when { + item.isPassword && item.isUsername -> null + item.isPassword -> GeneratorHistoryItem.Value.Type.PASSWORD + item.isUsername -> kotlin.run { + val isEmail = REGEX_EMAIL.matches(item.value) + if (isEmail) { + if (item.isEmailRelay) { + GeneratorHistoryItem.Value.Type.EMAIL_RELAY + } else { + GeneratorHistoryItem.Value.Type.EMAIL + } + } else { + GeneratorHistoryItem.Value.Type.USERNAME + } + } + + else -> null + } + val actions = listOfNotNull( + copyFactory.FlatItemAction( + title = translate(Res.strings.copy_value), + value = item.value, + hidden = item.isPassword, + ), + LargeTypeRoute.showInLargeTypeActionOrNull( + translator = this@produceScreenState, + text = item.value, + colorize = item.isPassword, + navigate = ::navigate, + ), + LargeTypeRoute.showInLargeTypeActionAndLockOrNull( + translator = this@produceScreenState, + text = item.value, + colorize = item.isPassword, + navigate = ::navigate, + ), + ).toPersistentList() + val selectableFlow = selectionHandle + .idsFlow + .map { selectedIds -> + SelectableItemStateRaw( + selecting = selectedIds.isNotEmpty(), + selected = item.id in selectedIds, + ) + } + .distinctUntilChanged() + .map { raw -> + val onClick = if (raw.selecting) { + // lambda + selectionHandle::toggleSelection.partially1(item.id.orEmpty()) + } else { + null + } + val onLongClick = if (raw.selecting) { + null + } else { + // lambda + selectionHandle::toggleSelection.partially1(item.id.orEmpty()) + } + SelectableItemState( + selecting = raw.selecting, + selected = raw.selected, + onClick = onClick, + onLongClick = onLongClick, + ) + } + val selectableStateFlow = + if (items.size >= 100) { + val sharing = SharingStarted.WhileSubscribed(1000L) + selectableFlow.persistingStateIn(this, sharing) + } else { + selectableFlow.stateIn(this) + } + GeneratorHistoryItem.Value( + id = item.id.orEmpty(), + title = item.value, + text = dateFormatter.formatDateTime(item.createdDate), + type = type, + createdDate = item.createdDate, + dropdown = actions, + selectableState = selectableStateFlow, + ) + } + } + val itemsFlow = itemsValueFlow + .map { items -> + val decorator = ItemDecoratorDate( + dateFormatter = dateFormatter, + selector = { it.createdDate }, + factory = { id, text -> + GeneratorHistoryItem.Section( + id = id, + text = text, + ) + }, + ) + sequence { + items.forEach { item -> + val section = decorator.getOrNull(item) + if (section != null) { + yield(section) + } + yield(item) + } + }.toPersistentList() + } + combine( + optionsFlow, + selectionFlow, + itemsFlow, + ) { options, selection, items -> + val state = GeneratorHistoryState( + options = options, + selection = selection, + items = items.toImmutableList(), + ) + Loadable.Ok(state) + } +} + +fun Flow.mapLatestScoped( + block: suspend CoroutineScope.(T) -> R, +) = this + .flatMapLatest { value -> + flow { + coroutineScope { + val result = block(value) + emit(result) + awaitCancellation() + } + } + } diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/HomeLayout.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/HomeLayout.kt new file mode 100644 index 00000000..b255307f --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/HomeLayout.kt @@ -0,0 +1,33 @@ +package com.artemchep.keyguard.feature.home + +import androidx.compose.foundation.layout.BoxWithConstraints +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.staticCompositionLocalOf +import androidx.compose.ui.Modifier + +internal val LocalHomeLayout = staticCompositionLocalOf { + throw IllegalStateException("Home layout must be initialized!") +} + +sealed interface HomeLayout { + data object Vertical : HomeLayout + data object Horizontal : HomeLayout +} + +@Composable +fun ResponsiveLayout( + content: @Composable () -> Unit, +) = BoxWithConstraints( + modifier = Modifier + .fillMaxSize(), +) { + val layout = when { + maxHeight < maxWidth -> HomeLayout.Horizontal + else -> HomeLayout.Vertical + } + CompositionLocalProvider(LocalHomeLayout provides layout) { + content() + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/HomeScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/HomeScreen.kt new file mode 100644 index 00000000..37869d6d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/HomeScreen.kt @@ -0,0 +1,893 @@ +package com.artemchep.keyguard.feature.home + +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.animation.Crossfade +import androidx.compose.animation.ExperimentalAnimationApi +import androidx.compose.animation.animateContentSize +import androidx.compose.animation.fadeIn +import androidx.compose.animation.fadeOut +import androidx.compose.animation.scaleIn +import androidx.compose.animation.scaleOut +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.BoxScope +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ColumnScope +import androidx.compose.foundation.layout.ExperimentalLayoutApi +import androidx.compose.foundation.layout.IntrinsicSize +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.RowScope +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.WindowInsetsSides +import androidx.compose.foundation.layout.add +import androidx.compose.foundation.layout.asPaddingValues +import androidx.compose.foundation.layout.consumeWindowInsets +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.heightIn +import androidx.compose.foundation.layout.only +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.union +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.layout.windowInsetsPadding +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.selection.selectableGroup +import androidx.compose.foundation.verticalScroll +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Home +import androidx.compose.material.icons.filled.Password +import androidx.compose.material.icons.filled.Security +import androidx.compose.material.icons.filled.Send +import androidx.compose.material.icons.filled.Settings +import androidx.compose.material.icons.outlined.CheckCircle +import androidx.compose.material.icons.outlined.CloudUpload +import androidx.compose.material.icons.outlined.ErrorOutline +import androidx.compose.material.icons.outlined.Home +import androidx.compose.material.icons.outlined.Info +import androidx.compose.material.icons.outlined.Password +import androidx.compose.material.icons.outlined.Security +import androidx.compose.material.icons.outlined.Send +import androidx.compose.material.icons.outlined.Settings +import androidx.compose.material3.Badge +import androidx.compose.material3.BadgedBox +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.LinearProgressIndicator +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.NavigationBarItem +import androidx.compose.material3.NavigationRail +import androidx.compose.material3.NavigationRailItem +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.State +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp +import androidx.compose.ui.zIndex +import com.artemchep.keyguard.common.io.attempt +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.model.DAccountStatus +import com.artemchep.keyguard.common.usecase.GetAccountStatus +import com.artemchep.keyguard.common.usecase.GetNavLabel +import com.artemchep.keyguard.common.usecase.GetPasswordStrength +import com.artemchep.keyguard.core.store.DatabaseManager +import com.artemchep.keyguard.core.store.bitwarden.BitwardenCipher +import com.artemchep.keyguard.feature.generator.GeneratorRoute +import com.artemchep.keyguard.feature.watchtower.WatchtowerRoute +import com.artemchep.keyguard.feature.home.settings.SettingsRoute +import com.artemchep.keyguard.feature.home.vault.VaultRoute +import com.artemchep.keyguard.feature.localization.TextHolder +import com.artemchep.keyguard.feature.localization.textResource +import com.artemchep.keyguard.feature.navigation.LocalNavigationController +import com.artemchep.keyguard.feature.navigation.LocalNavigationNodeVisualStack +import com.artemchep.keyguard.feature.navigation.NavigationController +import com.artemchep.keyguard.feature.navigation.NavigationEntry +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.feature.navigation.NavigationNode +import com.artemchep.keyguard.feature.navigation.NavigationRouter +import com.artemchep.keyguard.feature.navigation.Route +import com.artemchep.keyguard.feature.navigation.popById +import com.artemchep.keyguard.feature.send.SendRoute +import com.artemchep.keyguard.feature.sync.SyncRoute +import com.artemchep.keyguard.platform.LocalLeContext +import com.artemchep.keyguard.platform.leDisplayCutout +import com.artemchep.keyguard.platform.leIme +import com.artemchep.keyguard.platform.leNavigationBars +import com.artemchep.keyguard.platform.leStatusBars +import com.artemchep.keyguard.platform.leSystemBars +import com.artemchep.keyguard.platform.recordLog +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.ExpandedIfNotEmpty +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.icons.ChevronIcon +import com.artemchep.keyguard.ui.shimmer.shimmer +import com.artemchep.keyguard.ui.theme.Dimens +import com.artemchep.keyguard.ui.theme.badgeContainer +import com.artemchep.keyguard.ui.theme.combineAlpha +import com.artemchep.keyguard.ui.theme.info +import com.artemchep.keyguard.ui.theme.infoContainer +import com.artemchep.keyguard.ui.theme.ok +import com.artemchep.keyguard.ui.util.VerticalDivider +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.collections.immutable.PersistentList +import kotlinx.collections.immutable.persistentListOf +import kotlinx.collections.immutable.toPersistentList +import org.kodein.di.compose.rememberInstance + +data class Rail( + val route: Route, + val icon: ImageVector, + val iconSelected: ImageVector, + val label: TextHolder, +) + +private const val ROUTE_NAME = "home" + +private val vaultRoute = VaultRoute() + +@Composable +fun HomeEffect() { + val db by rememberInstance() + val ps by rememberInstance() + LaunchedEffect(Unit) { + db.mutate { + val ciphers = it.cipherQueries.get().executeAsList() + val www = ciphers + .filter { it.data_.login?.password != null && it.data_.login.passwordStrength == null } + .mapNotNull { + val password = it.data_.login?.password!! + val s = ps(password) + .attempt() + .bind() + .getOrNull() + if (s != null) { + val login = it.data_.login.copy( + passwordStrength = BitwardenCipher.Login.PasswordStrength( + password = password, + crackTimeSeconds = s.crackTimeSeconds, + version = 1, + ), + ) + it.copy( + data_ = it.data_.copy( + login = login, + ), + ) + } else { + null + } + } + .toTypedArray() + recordLog("Replaced ${www.size} entities") + it.transaction { + www.forEach { cipher -> + it.cipherQueries.insert( + cipherId = cipher.cipherId, + accountId = cipher.accountId, + folderId = cipher.folderId, + data = cipher.data_, + ) + } + } + }.attempt().bind() + } +} + +@Composable +fun HomeScreen( + defaultRoute: Route = vaultRoute, + navBarVisible: Boolean = true, +) { + HomeEffect() + + val navRoutes = remember { + listOf( + Rail( + route = vaultRoute, + icon = Icons.Outlined.Home, + iconSelected = Icons.Filled.Home, + label = TextHolder.Res(Res.strings.home_vault_label), + ), + Rail( + route = SendRoute, + icon = Icons.Outlined.Send, + iconSelected = Icons.Filled.Send, + label = TextHolder.Res(Res.strings.home_send_label), + ), + Rail( + route = GeneratorRoute( + args = GeneratorRoute.Args( + password = true, + username = true, + ), + ), + icon = Icons.Outlined.Password, + iconSelected = Icons.Filled.Password, + label = TextHolder.Res(Res.strings.home_generator_label), + ), + Rail( + route = WatchtowerRoute, + icon = Icons.Outlined.Security, + iconSelected = Icons.Filled.Security, + label = TextHolder.Res(Res.strings.home_watchtower_label), + ), +// Rail( +// route = AccountsRoute, +// icon = Icons.Outlined.AccountCircle, +// iconSelected = Icons.Filled.AccountCircle, +// label = "Accounts", +// ), + Rail( + route = SettingsRoute, + icon = Icons.Outlined.Settings, + iconSelected = Icons.Filled.Settings, + label = TextHolder.Res(Res.strings.home_settings_label), + ), + ) + } + NavigationRouter( + id = ROUTE_NAME, + initial = defaultRoute, + ) { backStack -> + HomeScreenContent( + backStack = backStack, + routes = navRoutes, + navBarVisible = navBarVisible, + ) + } +} + +@Composable +fun HomeScreenContent( + backStack: PersistentList, + routes: List, + navBarVisible: Boolean = true, +) { + ResponsiveLayout { + val horizontalInsets = WindowInsets.leStatusBars + .union(WindowInsets.leNavigationBars) + .union(WindowInsets.leDisplayCutout) + .only(WindowInsetsSides.Horizontal) + Row( + modifier = Modifier + .windowInsetsPadding(horizontalInsets) + .consumeWindowInsets(horizontalInsets), + ) { + val getNavLabel by rememberInstance() + val navLabelState = remember(getNavLabel) { + getNavLabel() + }.collectAsState() + + val getAccountStatus by rememberInstance() + val accountStatusState = remember(getAccountStatus) { + getAccountStatus() + }.collectAsState(DAccountStatus()) + // The first row is a row that contains rail navigation + // bar and should be shown on tablets. + AnimatedVisibility( + modifier = Modifier + .zIndex(2f), + visible = LocalHomeLayout.current is HomeLayout.Horizontal && navBarVisible, + ) { + Row { + val scrollState = rememberScrollState() + val verticalInsets = WindowInsets.leSystemBars + .union(WindowInsets.leIme) + .only(WindowInsetsSides.Vertical) + NavigationRail( + modifier = Modifier + .fillMaxHeight() + // When the keyboard is opened, there might be not + // enough space for all the items. + .verticalScroll(scrollState), + windowInsets = verticalInsets, + ) { + routes.forEach { r -> + RailNavigationControllerItem( + backStack = backStack, + route = r.route, + icon = r.icon, + iconSelected = r.iconSelected, + label = if (navLabelState.value) { + // composable + { + Text( + text = textResource(r.label), + maxLines = 2, + ) + } + } else { + null + }, + ) + } + Spacer( + modifier = Modifier + .weight(1f), + ) + Column( + modifier = Modifier + .padding(top = 16.dp) + .width(IntrinsicSize.Min), + ) { + RailStatusBadge( + modifier = Modifier, + statusState = accountStatusState, + ) + } + } + VerticalDivider() + } + } + val bottomInsets = WindowInsets.leStatusBars + .union(WindowInsets.leNavigationBars) + .union(WindowInsets.leDisplayCutout) + .only(WindowInsetsSides.Bottom) + val bottomNavBarVisible = + LocalHomeLayout.current is HomeLayout.Vertical && navBarVisible + Column( + modifier = Modifier + .weight(1f) + .fillMaxHeight() + .then( + if (bottomNavBarVisible) { + val navBarInsets = bottomInsets + .add(WindowInsets(bottom = 80.dp)) + Modifier.consumeWindowInsets(navBarInsets) + } else { + Modifier + }, + ), + ) { + Box( + modifier = Modifier + .fillMaxWidth() + .weight(1f), + ) { + CompositionLocalProvider( + LocalNavigationNodeVisualStack provides persistentListOf(), + ) { + NavigationNode( + entries = backStack, + ) + } + } + + // TODO: +// val onboardingBannerState = rememberOnboardingBannerState() +// val notificationsBannerState = rememberNotificationsBannerState() +// kotlin.run { +// val navigationController by rememberUpdatedState(LocalNavigationController.current) +// ExpandedIfNotEmpty( +// valueOrNull = Unit.takeIf { onboardingBannerState.value }, +// ) { +// OnboardingBanner( +// contentModifier = Modifier +// .then( +// if (!bottomNavBarVisible && !notificationsBannerState.value) { +// Modifier +// .padding(bottomInsets.asPaddingValues()) +// } else Modifier +// ), +// onClick = { +// val intent = NavigationIntent.NavigateToRoute( +// route = OnboardingRoute, +// ) +// navigationController.queue(intent) +// }, +// ) +// } +// } +// // TODO: Show notifications banner as in a bottom navigation +// // container if the orientation is landscape. +// NotificationsBanner( +// contentModifier = Modifier +// .then( +// if (!bottomNavBarVisible) { +// Modifier +// .padding(bottomInsets.asPaddingValues()) +// } else Modifier +// ), +// ) + AnimatedVisibility( + visible = bottomNavBarVisible, + ) { + Surface( + tonalElevation = 3.dp, + ) { + Column { + BannerStatusBadge( + modifier = Modifier + .fillMaxWidth(), + statusState = accountStatusState, + ) + Row( + modifier = Modifier + .fillMaxWidth() + .padding(bottomInsets.asPaddingValues()) + .height(80.dp) + .selectableGroup(), + horizontalArrangement = Arrangement.SpaceBetween, + ) { + routes.forEach { r -> + BottomNavigationControllerItem( + backStack = backStack, + route = r.route, + icon = r.icon, + iconSelected = r.iconSelected, + label = if (navLabelState.value) { + // composable + { + Text( + text = textResource(r.label), + maxLines = 2, + textAlign = TextAlign.Center, + // Default style does not fit on devices with small + // screens. + style = MaterialTheme.typography.labelSmall, + ) + } + } else { + null + }, + ) + } + } + } + + val isSyncingState = remember( + accountStatusState, + ) { + derivedStateOf { + accountStatusState.value.error == null && + accountStatusState.value.pending != null + } + } + AnimatedVisibility( + visible = isSyncingState.value, + ) { + LinearProgressIndicator( + modifier = Modifier + .fillMaxWidth(), + ) + } + } + } + } + } + } +} + +@Composable +private fun BannerStatusBadge( + modifier: Modifier = Modifier, + statusState: State, +) { + val updatedContext by rememberUpdatedState(LocalLeContext) + val updatedNavController by rememberUpdatedState(LocalNavigationController.current) + val errorState = remember( + statusState, + ) { + derivedStateOf { + val error = statusState.value.error + when { + error != null -> { + BannerStatusBadgeContentModel( + count = error.count, + title = TextHolder.Res(Res.strings.syncstatus_status_failed), + error = true, + onClick = { + navigateSyncStatus(updatedNavController) + }, + ) + } + + statusState.value.pendingPermissions + .isNotEmpty() -> { + BannerStatusBadgeContentModel( + count = 0, + title = TextHolder.Value("Notifications are disabled"), + text = TextHolder.Value("Grant the notification permission to allow Keyguard to show one-time passwords when autofilling & more."), + error = false, + onClick = { + val permission = statusState.value.pendingPermissions + .firstOrNull() + permission?.ask?.invoke(updatedContext) + }, + ) + } + + else -> null + } + } + } + ExpandedIfNotEmpty( + modifier = modifier, + valueOrNull = errorState.value, + ) { currentErrorState -> + BannerStatusBadgeContent( + state = currentErrorState, + ) + } +} + +private data class BannerStatusBadgeContentModel( + val count: Int, + val title: TextHolder, + val text: TextHolder? = null, + val error: Boolean, + val onClick: () -> Unit, +) + +@Composable +private fun BannerStatusBadgeContent( + modifier: Modifier = Modifier, + contentModifier: Modifier = Modifier, + state: BannerStatusBadgeContentModel, +) { + Row { + val backgroundColor = + if (state.error) MaterialTheme.colorScheme.errorContainer else MaterialTheme.colorScheme.infoContainer + val contentColor = + if (state.error) MaterialTheme.colorScheme.error else MaterialTheme.colorScheme.info + Row( + modifier = modifier + .weight(1f) + .padding(top = 8.dp) + .padding(horizontal = 8.dp) + .clip(MaterialTheme.shapes.medium) + .background(backgroundColor) + .clickable(onClick = state.onClick) + .then(contentModifier) + .padding( + vertical = 8.dp, + horizontal = Dimens.horizontalPadding, + ), + verticalAlignment = Alignment.CenterVertically, + ) { + Box( + contentAlignment = Alignment.Center, + ) { + Icon( + imageVector = Icons.Outlined.Info, + contentDescription = null, + tint = contentColor, + ) + if (state.count > 0) { + BadgedBox( + badge = { + Badge( + containerColor = MaterialTheme.colorScheme.badgeContainer, + ) { + Text( + modifier = Modifier + .animateContentSize(), + text = state.count.toString(), + ) + } + }, + ) { + Box( + modifier = Modifier + .size(8.dp), + ) + } + } + } + Spacer( + modifier = Modifier + .width(Dimens.horizontalPadding), + ) + Column( + modifier = Modifier + .weight(1f), + ) { + Text( + text = textResource(state.title), + style = MaterialTheme.typography.labelLarge, + ) + ExpandedIfNotEmpty( + valueOrNull = state.text, + ) { text -> + Text( + text = textResource(text), + style = MaterialTheme.typography.labelMedium, + color = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + ) + } + } + Spacer( + modifier = Modifier + .width(Dimens.horizontalPadding), + ) + ChevronIcon() + } + } +} + +@Composable +private fun RailStatusBadge( + modifier: Modifier = Modifier, + statusState: State, +) { + val updatedContext by rememberUpdatedState(LocalLeContext) + val updatedNavController by rememberUpdatedState(LocalNavigationController.current) + Box( + modifier = modifier + .width(80.dp) + .heightIn(min = 80.dp) + .padding(4.dp) + .clip(MaterialTheme.shapes.medium) + .clickable { + val status = statusState.value + when { + status.error != null && + status.pending != null -> { + navigateSyncStatus(updatedNavController) + } + + status.pendingPermissions.isNotEmpty() -> { + val permission = status.pendingPermissions + .firstOrNull() + permission?.ask?.invoke(updatedContext) + } + + else -> { + navigateSyncStatus(updatedNavController) + } + } + }, + contentAlignment = Alignment.Center, + ) { + val status = statusState.value + when { + status.error != null -> { + RailStatusBadgeContent( + contentColor = MaterialTheme.colorScheme.error, + icon = { + Icon( + imageVector = Icons.Outlined.ErrorOutline, + contentDescription = null, + ) + }, + badge = status.error.count + .takeIf { it > 0 } + ?.toString(), + text = stringResource(Res.strings.syncstatus_status_failed), + ) + } + + status.pending != null -> { + RailStatusBadgeContent( + modifier = Modifier + .shimmer(), + icon = { + Icon( + imageVector = Icons.Outlined.CloudUpload, + contentDescription = null, + ) + }, + badge = status.pending.count + .takeIf { it > 0 } + ?.toString(), + text = stringResource(Res.strings.syncstatus_status_syncing), + ) + } + + status.pendingPermissions.isNotEmpty() -> { + RailStatusBadgeContent( + contentColor = MaterialTheme.colorScheme.info, + icon = { + Icon( + imageVector = Icons.Outlined.Info, + contentDescription = null, + ) + }, + text = "Pending permissions", + ) + } + + else -> { + RailStatusBadgeContent( + contentColor = MaterialTheme.colorScheme.ok, + icon = { + Icon( + imageVector = Icons.Outlined.CheckCircle, + contentDescription = null, + ) + }, + text = stringResource(Res.strings.syncstatus_status_up_to_date), + ) + } + } + } +} + +@Composable +private fun RailStatusBadgeContent( + modifier: Modifier = Modifier, + contentColor: Color = LocalContentColor.current, + icon: @Composable () -> Unit, + badge: String? = null, + text: String, +) { + Column( + modifier = modifier + .padding( + horizontal = 4.dp, + vertical = 16.dp, + ), + verticalArrangement = Arrangement.spacedBy(4.dp), + horizontalAlignment = Alignment.CenterHorizontally, + ) { + BadgedBox( + badge = { + ExpandedIfNotEmpty( + valueOrNull = badge, + enter = fadeIn() + scaleIn(), + exit = scaleOut() + fadeOut(), + ) { currentBadge -> + Badge( + containerColor = MaterialTheme.colorScheme.badgeContainer, + ) { + Text( + modifier = Modifier + .animateContentSize(), + text = currentBadge, + ) + } + } + }, + ) { + CompositionLocalProvider( + LocalContentColor provides contentColor, + ) { + Box( + modifier = Modifier + .size(18.dp), + ) { + icon() + } + } + } + Text( + text = text, + style = MaterialTheme.typography.labelSmall, + textAlign = TextAlign.Center, + maxLines = 2, + color = contentColor, + ) + } +} + +@Composable +private fun ColumnScope.RailNavigationControllerItem( + backStack: List, + route: Route, + icon: ImageVector, + iconSelected: ImageVector, + badge: @Composable (BoxScope.() -> Unit)? = null, + label: @Composable (() -> Unit)? = null, +) { + val controller = LocalNavigationController.current + val selected = isSelected(backStack, route) + NavigationRailItem( + icon = { + Box { + NavigationIcon( + selected = selected, + icon = icon, + iconSelected = iconSelected, + ) + badge?.invoke(this) + } + }, + label = label, + selected = selected, + onClick = { + navigateOnClick(controller, backStack, route) + }, + ) +} + +@Composable +private fun RowScope.BottomNavigationControllerItem( + backStack: List, + route: Route, + icon: ImageVector, + iconSelected: ImageVector, + badge: @Composable (BoxScope.() -> Unit)? = null, + label: @Composable (() -> Unit)? = null, +) { + val controller = LocalNavigationController.current + val selected = isSelected(backStack, route) + NavigationBarItem( + icon = { + Box { + NavigationIcon( + selected = selected, + icon = icon, + iconSelected = iconSelected, + ) + badge?.invoke(this) + } + }, + label = label, + selected = selected, + onClick = { + navigateOnClick(controller, backStack, route) + }, + ) +} + +private fun isSelected( + backStack: List, + route: Route, +) = run { + val entry = backStack.getOrNull(1) ?: backStack.firstOrNull() + entry?.route === route +} + +@Composable +private fun NavigationIcon( + selected: Boolean, + icon: ImageVector, + iconSelected: ImageVector, +) { + Crossfade(targetState = selected) { + val vector = if (it) { + iconSelected + } else { + icon + } + Icon(vector, null) + } +} + +private fun navigateOnClick( + controller: NavigationController, + backStack: List, + route: Route, +) { + val intent = NavigationIntent.Manual { factory -> + // If the route exists in the stack, then simply + // navigate back to it. + val indexOfRoute = backStack.indexOfFirst { it.route === route } + if (indexOfRoute != -1 && indexOfRoute <= 1) { + return@Manual subList(0, indexOfRoute + 1) + .toPersistentList() + } + + val stack = popById(ROUTE_NAME, exclusive = true) + .orEmpty() + .toPersistentList() + stack.add(factory(route)) + } + controller.queue(intent) +} + +private fun navigateSyncStatus( + controller: NavigationController, +) { + val intent = NavigationIntent.NavigateToRoute(SyncRoute) + controller.queue(intent) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/SettingListItem.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/SettingListItem.kt new file mode 100644 index 00000000..bd347e5e --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/SettingListItem.kt @@ -0,0 +1,105 @@ +package com.artemchep.keyguard.feature.home.settings + +import androidx.compose.foundation.horizontalScroll +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.rememberScrollState +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.feature.localization.textResource +import com.artemchep.keyguard.ui.Avatar +import com.artemchep.keyguard.ui.FlatItemLayout +import com.artemchep.keyguard.ui.FlatItemTextContent +import com.artemchep.keyguard.ui.icons.ChevronIcon +import com.artemchep.keyguard.ui.theme.selectedContainer + +@Composable +fun SettingListItem( + item: SettingsItem, + selected: Boolean, + onClick: (SettingsItem) -> Unit, +) { + Column { + FlatItemLayout( + backgroundColor = if (selected) MaterialTheme.colorScheme.selectedContainer else Color.Unspecified, + leading = { + Avatar { + when { + item.leading != null -> { + Row( + modifier = Modifier + .align(Alignment.Center), + ) { + item.leading.invoke(this) + } + } + + item.icon != null -> { + Icon( + modifier = Modifier + .align(Alignment.Center), + imageVector = item.icon, + contentDescription = null, + ) + } + + else -> { + } + } + } + }, + trailing = { + if (item.trailing != null) { + item.trailing.invoke(this) + Spacer( + modifier = Modifier + .width(8.dp), + ) + } + ChevronIcon() + }, + content = { + FlatItemTextContent( + title = { + Text( + text = textResource(item.title), + style = MaterialTheme.typography.titleMedium, + ) + }, + text = { + Text( + text = textResource(item.text), + maxLines = 1, + overflow = TextOverflow.Ellipsis, + ) + }, + ) + }, + onClick = { + onClick(item) + }, + ) + if (item.content != null) { + Row( + modifier = Modifier + .padding(top = 8.dp, bottom = 16.dp) + .horizontalScroll(rememberScrollState()) + .padding(start = 64.dp, end = 8.dp), + horizontalArrangement = Arrangement.spacedBy(8.dp), + ) { + item.content.invoke(this) + } + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/SettingListRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/SettingListRoute.kt new file mode 100644 index 00000000..035cf9ea --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/SettingListRoute.kt @@ -0,0 +1,13 @@ +package com.artemchep.keyguard.feature.home.settings + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.Stable +import com.artemchep.keyguard.feature.navigation.Route + +@Stable +object SettingListRoute : Route { + @Composable + override fun Content() { + SettingListScreen() + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/SettingListScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/SettingListScreen.kt new file mode 100644 index 00000000..b9fbd7e3 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/SettingListScreen.kt @@ -0,0 +1,316 @@ +package com.artemchep.keyguard.feature.home.settings + +import androidx.compose.animation.animateColorAsState +import androidx.compose.foundation.layout.ExperimentalLayoutApi +import androidx.compose.foundation.layout.RowScope +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.lazy.items +import androidx.compose.material.ExperimentalMaterialApi +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.AccountBox +import androidx.compose.material.icons.outlined.AutoAwesome +import androidx.compose.material.icons.outlined.Code +import androidx.compose.material.icons.outlined.ColorLens +import androidx.compose.material.icons.outlined.ErrorOutline +import androidx.compose.material.icons.outlined.Info +import androidx.compose.material.icons.outlined.Lock +import androidx.compose.material.icons.outlined.Notifications +import androidx.compose.material.icons.outlined.Search +import androidx.compose.material.icons.outlined.Security +import androidx.compose.material.pullrefresh.pullRefresh +import androidx.compose.material.pullrefresh.rememberPullRefreshState +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.input.nestedscroll.nestedScroll +import com.artemchep.keyguard.common.usecase.GetAccountsHasError +import com.artemchep.keyguard.common.usecase.GetPurchased +import com.artemchep.keyguard.feature.home.settings.accounts.AccountsRoute +import com.artemchep.keyguard.feature.home.settings.autofill.AutofillSettingsRoute +import com.artemchep.keyguard.feature.home.settings.debug.DebugSettingsRoute +import com.artemchep.keyguard.feature.home.settings.display.UiSettingsRoute +import com.artemchep.keyguard.feature.home.settings.notifications.NotificationsSettingsRoute +import com.artemchep.keyguard.feature.home.settings.other.OtherSettingsRoute +import com.artemchep.keyguard.feature.home.settings.search.SearchSettingsRoute +import com.artemchep.keyguard.feature.home.settings.security.SecuritySettingsRoute +import com.artemchep.keyguard.feature.home.settings.subscriptions.SubscriptionsSettingsRoute +import com.artemchep.keyguard.feature.home.settings.watchtower.WatchtowerSettingsRoute +import com.artemchep.keyguard.feature.home.vault.component.Section +import com.artemchep.keyguard.feature.localization.TextHolder +import com.artemchep.keyguard.feature.localization.textResource +import com.artemchep.keyguard.feature.navigation.LocalNavigationController +import com.artemchep.keyguard.feature.navigation.LocalNavigationRouter +import com.artemchep.keyguard.feature.navigation.NavigationIcon +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.feature.navigation.Route +import com.artemchep.keyguard.feature.onboarding.SmallOnboardingCard +import com.artemchep.keyguard.feature.onboarding.onboardingItemsPremium +import com.artemchep.keyguard.platform.CurrentPlatform +import com.artemchep.keyguard.platform.isStandalone +import com.artemchep.keyguard.platform.util.hasAutofill +import com.artemchep.keyguard.platform.util.hasSubscription +import com.artemchep.keyguard.platform.util.isRelease +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.ExpandedIfNotEmptyForRow +import com.artemchep.keyguard.ui.ScaffoldLazyColumn +import com.artemchep.keyguard.ui.icons.IconBox +import com.artemchep.keyguard.ui.icons.KeyguardPremium +import com.artemchep.keyguard.ui.pulltosearch.PullToSearch +import com.artemchep.keyguard.ui.toolbar.LargeToolbar +import dev.icerock.moko.resources.compose.stringResource +import org.kodein.di.compose.rememberInstance + +sealed interface SettingsItem2 { + val id: String +} + +data class SettingsItem( + override val id: String, + val title: TextHolder, + val text: TextHolder, + val icon: ImageVector? = null, + val leading: (@Composable RowScope.() -> Unit)? = null, + val trailing: (@Composable RowScope.() -> Unit)? = null, + val content: (@Composable RowScope.() -> Unit)? = null, + val route: Route, +) : SettingsItem2 + +data class SettingsSectionItem( + override val id: String, + val title: TextHolder?, +) : SettingsItem2 + +private val items = listOfNotNull( + SettingsItem( + id = "accounts", + title = TextHolder.Res(Res.strings.pref_item_accounts_title), + text = TextHolder.Res(Res.strings.pref_item_accounts_text), + icon = Icons.Outlined.AccountBox, + trailing = { + val getAccountsHasError: GetAccountsHasError by rememberInstance() + // Show a badge if any of the accounts have + // a failed sync attempt. + val visible by remember(getAccountsHasError) { + val settingsAlertVisibleFlow = getAccountsHasError() + settingsAlertVisibleFlow + }.collectAsState(initial = false) + ExpandedIfNotEmptyForRow( + valueOrNull = Unit.takeIf { visible }, + ) { + Icon( + imageVector = Icons.Outlined.ErrorOutline, + tint = MaterialTheme.colorScheme.error, + contentDescription = null, + ) + } + }, + route = AccountsRoute, + ), + SettingsSectionItem( + id = "seee", + title = null, // TextHolder.Value("Options"), + ), + SettingsItem( + id = "subscription", + title = TextHolder.Res(Res.strings.pref_item_subscription_title), + text = TextHolder.Res(Res.strings.pref_item_subscription_text), + leading = { + val getPurchased by rememberInstance() + val isPurchased by remember(getPurchased) { + getPurchased() + }.collectAsState(false) + + val targetTint = + if (isPurchased) MaterialTheme.colorScheme.primary else LocalContentColor.current + val tint by animateColorAsState(targetValue = targetTint) + Icon( + Icons.Outlined.KeyguardPremium, + null, + tint = tint, + ) + }, + content = { + onboardingItemsPremium.forEach { item -> + SmallOnboardingCard( + modifier = Modifier, + title = stringResource(item.title), + text = stringResource(item.text), + imageVector = item.icon, + ) + } + }, + route = SubscriptionsSettingsRoute, + ).takeIf { CurrentPlatform.hasSubscription() && !isStandalone }, +// SettingsItem( +// id = "onboarding", +// title = "Onboarding", +// text = "Learn more about the Keyguard", +// icon = Icons.Outlined.Info, +// route = OnboardingRoute, +// ), +// SettingsSectionItem( +// id = "seee22", +// title = null, // TextHolder.Value("Settings"), +// ), + SettingsItem( + id = "autofill", + title = TextHolder.Res(Res.strings.pref_item_autofill_title), + text = TextHolder.Res(Res.strings.pref_item_autofill_text), + icon = Icons.Outlined.AutoAwesome, + route = AutofillSettingsRoute, + ).takeIf { CurrentPlatform.hasAutofill() }, + SettingsItem( + id = "security", + title = TextHolder.Res(Res.strings.pref_item_security_title), + text = TextHolder.Res(Res.strings.pref_item_security_text), + icon = Icons.Outlined.Lock, + route = SecuritySettingsRoute, + ), + SettingsItem( + id = "watchtower", + title = TextHolder.Res(Res.strings.pref_item_watchtower_title), + text = TextHolder.Res(Res.strings.pref_item_watchtower_text), + icon = Icons.Outlined.Security, + route = WatchtowerSettingsRoute, + ).takeIf { !isRelease }, + SettingsItem( + id = "notifications", + title = TextHolder.Res(Res.strings.pref_item_notifications_title), + text = TextHolder.Res(Res.strings.pref_item_notifications_text), + icon = Icons.Outlined.Notifications, + route = NotificationsSettingsRoute, + ).takeIf { !isRelease }, + SettingsItem( + id = "display", + title = TextHolder.Res(Res.strings.pref_item_appearance_title), + text = TextHolder.Res(Res.strings.pref_item_appearance_text), + icon = Icons.Outlined.ColorLens, + route = UiSettingsRoute, + ), + SettingsItem( + id = "debug", + title = TextHolder.Res(Res.strings.pref_item_dev_title), + text = TextHolder.Res(Res.strings.pref_item_dev_text), + icon = Icons.Outlined.Code, + route = DebugSettingsRoute, + ).takeIf { !isRelease }, + SettingsItem( + id = "about", + title = TextHolder.Res(Res.strings.pref_item_other_title), + text = TextHolder.Res(Res.strings.pref_item_other_text), + icon = Icons.Outlined.Info, + route = OtherSettingsRoute, + ), +) + +@Composable +fun SettingListScreen() { + SettingListScreenContent( + items = items, + ) +} + +@OptIn( + ExperimentalMaterial3Api::class, + ExperimentalLayoutApi::class, + ExperimentalMaterialApi::class, +) +@Composable +private fun SettingListScreenContent( + items: List, +) { + val q = LocalNavigationController.current + val l = LocalNavigationRouter.current.value + val s = l + .indexOfLast { it.id == "settings" } + val t = if (s != -1) { + l.subList(fromIndex = s, toIndex = l.size) + } else { + emptyList() + } + + val pullRefreshState = rememberPullRefreshState( + refreshing = false, + onRefresh = { + val route = SearchSettingsRoute + val intent = NavigationIntent.NavigateToRoute(route) + q.queue(intent) + }, + ) + val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior() + ScaffoldLazyColumn( + modifier = Modifier + .pullRefresh(pullRefreshState) + .nestedScroll(scrollBehavior.nestedScrollConnection), + topAppBarScrollBehavior = scrollBehavior, + topBar = { + LargeToolbar( + title = { + Text( + text = stringResource(Res.strings.settings_main_header_title), + ) + }, + navigationIcon = { + NavigationIcon() + }, + actions = { + IconButton( + onClick = { + val route = SearchSettingsRoute + val intent = NavigationIntent.NavigateToRoute(route) + q.queue(intent) + }, + ) { + IconBox(Icons.Outlined.Search) + } + }, + scrollBehavior = scrollBehavior, + ) + }, + pullRefreshState = pullRefreshState, + overlay = { + PullToSearch( + modifier = Modifier + .padding(contentPadding.value), + pullRefreshState = pullRefreshState, + ) + }, + ) { + items(items, key = { it.id }) { + when (it) { + is SettingsItem -> { + SettingListItem( + selected = it.route === t.getOrNull(1)?.route, + item = it, + onClick = { + val intent = NavigationIntent.Composite( + listOf( + NavigationIntent.PopById("settings"), + NavigationIntent.NavigateToRoute(it.route), + ), + ) + q.queue(intent) + }, + ) + } + + is SettingsSectionItem -> { + val text = it.title?.let { textResource(it) } + Section( + text = text, + ) + } + } + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/SettingPaneContent.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/SettingPaneContent.kt new file mode 100644 index 00000000..c8b11648 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/SettingPaneContent.kt @@ -0,0 +1,386 @@ +package com.artemchep.keyguard.feature.home.settings + +import androidx.compose.foundation.layout.ExperimentalLayoutApi +import androidx.compose.foundation.lazy.items +import androidx.compose.material.ExperimentalMaterialApi +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember +import androidx.compose.runtime.staticCompositionLocalOf +import androidx.compose.ui.Modifier +import androidx.compose.ui.input.nestedscroll.nestedScroll +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.util.flow.foldAsList +import com.artemchep.keyguard.feature.EmptyView +import com.artemchep.keyguard.feature.home.settings.component.SettingComponent +import com.artemchep.keyguard.feature.home.settings.component.settingAboutAppBuildDateProvider +import com.artemchep.keyguard.feature.home.settings.component.settingAboutAppProvider +import com.artemchep.keyguard.feature.home.settings.component.settingAboutTeamProvider +import com.artemchep.keyguard.feature.home.settings.component.settingAboutTelegramProvider +import com.artemchep.keyguard.feature.home.settings.component.settingApkProvider +import com.artemchep.keyguard.feature.home.settings.component.settingAppIconsProvider +import com.artemchep.keyguard.feature.home.settings.component.settingAutofillCopyTotpProvider +import com.artemchep.keyguard.feature.home.settings.component.settingAutofillInlineSuggestionsProvider +import com.artemchep.keyguard.feature.home.settings.component.settingAutofillManualSelectionProvider +import com.artemchep.keyguard.feature.home.settings.component.settingAutofillProvider +import com.artemchep.keyguard.feature.home.settings.component.settingAutofillRespectAutofillOffProvider +import com.artemchep.keyguard.feature.home.settings.component.settingAutofillSaveRequestProvider +import com.artemchep.keyguard.feature.home.settings.component.settingAutofillSaveUriProvider +import com.artemchep.keyguard.feature.home.settings.component.settingBiometricsProvider +import com.artemchep.keyguard.feature.home.settings.component.settingCheckPwnedPasswordsProvider +import com.artemchep.keyguard.feature.home.settings.component.settingCheckPwnedServicesProvider +import com.artemchep.keyguard.feature.home.settings.component.settingCheckTwoFAProvider +import com.artemchep.keyguard.feature.home.settings.component.settingClearCache +import com.artemchep.keyguard.feature.home.settings.component.settingClipboardAutoClearProvider +import com.artemchep.keyguard.feature.home.settings.component.settingClipboardAutoRefreshProvider +import com.artemchep.keyguard.feature.home.settings.component.settingColorAccentProvider +import com.artemchep.keyguard.feature.home.settings.component.settingColorSchemeProvider +import com.artemchep.keyguard.feature.home.settings.component.settingConcealFieldsProvider +import com.artemchep.keyguard.feature.home.settings.component.settingCrashProvider +import com.artemchep.keyguard.feature.home.settings.component.settingCrashlyticsProvider +import com.artemchep.keyguard.feature.home.settings.component.settingCredentialProviderProvider +import com.artemchep.keyguard.feature.home.settings.component.settingDataSafetyProvider +import com.artemchep.keyguard.feature.home.settings.component.settingEmitMessageProvider +import com.artemchep.keyguard.feature.home.settings.component.settingExperimentalProvider +import com.artemchep.keyguard.feature.home.settings.component.settingFeaturesOverviewProvider +import com.artemchep.keyguard.feature.home.settings.component.settingFeedbackAppProvider +import com.artemchep.keyguard.feature.home.settings.component.settingFontProvider +import com.artemchep.keyguard.feature.home.settings.component.settingGitHubProvider +import com.artemchep.keyguard.feature.home.settings.component.settingKeepScreenOnProvider +import com.artemchep.keyguard.feature.home.settings.component.settingLaunchAppPicker +import com.artemchep.keyguard.feature.home.settings.component.settingLaunchYubiKey +import com.artemchep.keyguard.feature.home.settings.component.settingLocalizationProvider +import com.artemchep.keyguard.feature.home.settings.component.settingMarkdownProvider +import com.artemchep.keyguard.feature.home.settings.component.settingMasterPasswordProvider +import com.artemchep.keyguard.feature.home.settings.component.settingNavAnimationProvider +import com.artemchep.keyguard.feature.home.settings.component.settingNavLabelProvider +import com.artemchep.keyguard.feature.home.settings.component.settingOpenSourceLicensesProvider +import com.artemchep.keyguard.feature.home.settings.component.settingPermissionCameraProvider +import com.artemchep.keyguard.feature.home.settings.component.settingPermissionDetailsProvider +import com.artemchep.keyguard.feature.home.settings.component.settingPermissionOtherProvider +import com.artemchep.keyguard.feature.home.settings.component.settingPermissionPostNotificationsProvider +import com.artemchep.keyguard.feature.home.settings.component.settingPrivacyPolicyProvider +import com.artemchep.keyguard.feature.home.settings.component.settingRateAppProvider +import com.artemchep.keyguard.feature.home.settings.component.settingRequireMasterPasswordProvider +import com.artemchep.keyguard.feature.home.settings.component.settingRotateDeviceId +import com.artemchep.keyguard.feature.home.settings.component.settingScreenDelay +import com.artemchep.keyguard.feature.home.settings.component.settingScreenshotsProvider +import com.artemchep.keyguard.feature.home.settings.component.settingSectionProvider +import com.artemchep.keyguard.feature.home.settings.component.settingSelectLocaleProvider +import com.artemchep.keyguard.feature.home.settings.component.settingSubscriptionsDebug +import com.artemchep.keyguard.feature.home.settings.component.settingSubscriptionsPlayStoreProvider +import com.artemchep.keyguard.feature.home.settings.component.settingSubscriptionsProvider +import com.artemchep.keyguard.feature.home.settings.component.settingThemeUseAmoledDarkProvider +import com.artemchep.keyguard.feature.home.settings.component.settingTwoPanelLayoutLandscapeProvider +import com.artemchep.keyguard.feature.home.settings.component.settingTwoPanelLayoutPortraitProvider +import com.artemchep.keyguard.feature.home.settings.component.settingUseExternalBrowserProvider +import com.artemchep.keyguard.feature.home.settings.component.settingVaultLockAfterRebootProvider +import com.artemchep.keyguard.feature.home.settings.component.settingVaultLockAfterScreenOffProvider +import com.artemchep.keyguard.feature.home.settings.component.settingVaultLockAfterTimeoutProvider +import com.artemchep.keyguard.feature.home.settings.component.settingVaultLockProvider +import com.artemchep.keyguard.feature.home.settings.component.settingVaultPersistProvider +import com.artemchep.keyguard.feature.home.settings.component.settingWebsiteIconsProvider +import com.artemchep.keyguard.feature.home.settings.component.settingWriteAccessProvider +import com.artemchep.keyguard.feature.navigation.NavigationIcon +import com.artemchep.keyguard.ui.ScaffoldLazyColumn +import com.artemchep.keyguard.ui.items.FlatItemSkeleton +import com.artemchep.keyguard.ui.toolbar.LargeToolbar +import kotlinx.collections.immutable.toImmutableList +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.map +import org.kodein.di.DirectDI +import org.kodein.di.compose.localDI +import org.kodein.di.direct + +object Setting { + const val DIVIDER = "divider" + + const val CREDENTIAL_PROVIDER = "credential_provider" + const val AUTOFILL = "autofill" + const val AUTOFILL_INLINE_SUGGESTIONS = "autofill_inline_suggestions" + const val AUTOFILL_MANUAL_SELECTION = "autofill_manual_selection" + const val AUTOFILL_RESPECT_AUTOFILL_OFF = "autofill_respect_autofill_off" + const val AUTOFILL_SAVE_REQUEST = "autofill_save_request" + const val AUTOFILL_SAVE_URI = "autofill_save_uri" + const val AUTOFILL_COPY_TOTP = "autofill_copy_totp" + const val NAV_ANIMATION = "nav_animation" + const val NAV_LABEL = "nav_label" + const val FONT = "font" + const val LOCALE = "locale" + const val COLOR_SCHEME = "color_scheme" + const val COLOR_SCHEME_AMOLED_DARK = "color_scheme_amoled_dark" + const val COLOR_ACCENT = "color_accent" + const val MASTER_PASSWORD = "master_password" + const val PERMISSION_DETAILS = "permission_details" // screen + const val PERMISSION_OTHER = "permission_other" + const val PERMISSION_CAMERA = "permission_camera" + const val PERMISSION_POST_NOTIFICATION = "permission_post_notification" + const val BIOMETRIC = "biometric" + const val VAULT_PERSIST = "vault_persist" + const val VAULT_LOCK = "vault_lock" + const val VAULT_LOCK_AFTER_REBOOT = "vault_lock_after_reboot" + const val VAULT_LOCK_AFTER_SCREEN_OFF = "vault_screen_lock" + const val VAULT_LOCK_AFTER_TIMEOUT = "vault_timeout" + const val ROTATE_DEVICE_ID = "rotate_device_id" + const val CLIPBOARD_AUTO_CLEAR = "clipboard_auto_clear" + const val CLIPBOARD_AUTO_REFRESH = "clipboard_auto_refresh" + const val CRASH = "test_crash_reports" + const val CRASHLYTICS = "automatic_crash_reports" + const val REQUIRE_MASTER_PASSWORD = "require_master_password" + const val EMIT_MESSAGE = "emit_message" + const val FEEDBACK_APP = "feedback_app" + const val REDDIT = "reddit" + const val CROWDIN = "crowdin" + const val GITHUB = "github" + const val PRIVACY_POLICY = "privacy_policy" + const val OPEN_SOURCE_LICENSES = "open_source_licenses" + const val ABOUT_APP = "about_app" + const val ABOUT_APP_BUILD_DATE = "about_app_build_date" + const val ABOUT_TEAM = "about_team" + const val EXPERIMENTAL = "experimental" + const val LAUNCH_APP_PICKER = "launch_app_picker" + const val LAUNCH_YUBIKEY = "launch_yubikey" + const val DATA_SAFETY = "data_safety" + const val FEATURES_OVERVIEW = "features_overview" + const val RATE_APP = "rate_app" + const val CONCEAL = "conceal" + const val MARKDOWN = "markdown" + const val WRITE_ACCESS = "write_access" + const val SCREENSHOTS = "screenshots" + const val TWO_PANEL_LAYOUT_LANDSCAPE = "two_panel_layout_landscape" + const val TWO_PANEL_LAYOUT_PORTRAIT = "two_panel_layout_portrait" + const val USE_EXTERNAL_BROWSER = "use_external_browser" + const val APP_ICONS = "app_icons" + const val WEBSITE_ICONS = "website_icons" + const val CHECK_PWNED_PASSWORDS = "check_pwned_passwords" + const val CHECK_PWNED_SERVICES = "check_pwned_services" + const val CHECK_TWO_FA = "check_two_fa" + const val CLEAR_CACHE = "clear_cache" + const val APK = "apk" + const val SUBSCRIPTIONS = "subscriptions" + const val SUBSCRIPTIONS_IN_STORE = "subscriptions_in_store" + const val SUBSCRIPTIONS_DEBUG = "subscriptions_debug" + const val SCREEN_DELAY = "screen_delay" + const val KEEP_SCREEN_ON = "keep_screen_on" +} + +val LocalSettingItemArgs = staticCompositionLocalOf { + null +} + +val hub = mapOf SettingComponent>( + Setting.CREDENTIAL_PROVIDER to ::settingCredentialProviderProvider, + Setting.AUTOFILL to ::settingAutofillProvider, + Setting.AUTOFILL_INLINE_SUGGESTIONS to ::settingAutofillInlineSuggestionsProvider, + Setting.AUTOFILL_MANUAL_SELECTION to ::settingAutofillManualSelectionProvider, + Setting.AUTOFILL_RESPECT_AUTOFILL_OFF to ::settingAutofillRespectAutofillOffProvider, + Setting.AUTOFILL_SAVE_REQUEST to ::settingAutofillSaveRequestProvider, + Setting.AUTOFILL_SAVE_URI to ::settingAutofillSaveUriProvider, + Setting.AUTOFILL_COPY_TOTP to ::settingAutofillCopyTotpProvider, + Setting.NAV_ANIMATION to ::settingNavAnimationProvider, + Setting.NAV_LABEL to ::settingNavLabelProvider, + Setting.FONT to ::settingFontProvider, + Setting.LOCALE to ::settingSelectLocaleProvider, + Setting.COLOR_SCHEME to ::settingColorSchemeProvider, + Setting.COLOR_SCHEME_AMOLED_DARK to ::settingThemeUseAmoledDarkProvider, + Setting.COLOR_ACCENT to ::settingColorAccentProvider, + Setting.MASTER_PASSWORD to ::settingMasterPasswordProvider, + Setting.PERMISSION_DETAILS to ::settingPermissionDetailsProvider, + Setting.PERMISSION_OTHER to ::settingPermissionOtherProvider, + Setting.PERMISSION_CAMERA to ::settingPermissionCameraProvider, + Setting.PERMISSION_POST_NOTIFICATION to ::settingPermissionPostNotificationsProvider, + Setting.BIOMETRIC to ::settingBiometricsProvider, + Setting.VAULT_PERSIST to ::settingVaultPersistProvider, + Setting.VAULT_LOCK to ::settingVaultLockProvider, + Setting.VAULT_LOCK_AFTER_REBOOT to ::settingVaultLockAfterRebootProvider, + Setting.VAULT_LOCK_AFTER_SCREEN_OFF to ::settingVaultLockAfterScreenOffProvider, + Setting.VAULT_LOCK_AFTER_TIMEOUT to ::settingVaultLockAfterTimeoutProvider, + Setting.ROTATE_DEVICE_ID to ::settingRotateDeviceId, + Setting.CLIPBOARD_AUTO_CLEAR to ::settingClipboardAutoClearProvider, + Setting.CLIPBOARD_AUTO_REFRESH to ::settingClipboardAutoRefreshProvider, + Setting.CRASH to ::settingCrashProvider, + Setting.CRASHLYTICS to ::settingCrashlyticsProvider, + Setting.REQUIRE_MASTER_PASSWORD to ::settingRequireMasterPasswordProvider, + Setting.EMIT_MESSAGE to ::settingEmitMessageProvider, + Setting.FEEDBACK_APP to ::settingFeedbackAppProvider, + Setting.ABOUT_APP to ::settingAboutAppProvider, + Setting.ABOUT_APP_BUILD_DATE to ::settingAboutAppBuildDateProvider, + Setting.ABOUT_TEAM to ::settingAboutTeamProvider, + Setting.REDDIT to ::settingAboutTelegramProvider, + Setting.CROWDIN to ::settingLocalizationProvider, + Setting.GITHUB to ::settingGitHubProvider, + Setting.PRIVACY_POLICY to ::settingPrivacyPolicyProvider, + Setting.OPEN_SOURCE_LICENSES to ::settingOpenSourceLicensesProvider, + Setting.EXPERIMENTAL to ::settingExperimentalProvider, + Setting.LAUNCH_YUBIKEY to ::settingLaunchYubiKey, + Setting.LAUNCH_APP_PICKER to ::settingLaunchAppPicker, + Setting.DATA_SAFETY to ::settingDataSafetyProvider, + Setting.FEATURES_OVERVIEW to ::settingFeaturesOverviewProvider, + Setting.RATE_APP to ::settingRateAppProvider, + Setting.DIVIDER to ::settingSectionProvider, + Setting.CONCEAL to ::settingConcealFieldsProvider, + Setting.MARKDOWN to ::settingMarkdownProvider, + Setting.WRITE_ACCESS to ::settingWriteAccessProvider, + Setting.SCREENSHOTS to ::settingScreenshotsProvider, + Setting.TWO_PANEL_LAYOUT_LANDSCAPE to ::settingTwoPanelLayoutLandscapeProvider, + Setting.TWO_PANEL_LAYOUT_PORTRAIT to ::settingTwoPanelLayoutPortraitProvider, + Setting.USE_EXTERNAL_BROWSER to ::settingUseExternalBrowserProvider, + Setting.APP_ICONS to ::settingAppIconsProvider, + Setting.WEBSITE_ICONS to ::settingWebsiteIconsProvider, + Setting.CHECK_PWNED_PASSWORDS to ::settingCheckPwnedPasswordsProvider, + Setting.CHECK_PWNED_SERVICES to ::settingCheckPwnedServicesProvider, + Setting.CHECK_TWO_FA to ::settingCheckTwoFAProvider, + Setting.CLEAR_CACHE to ::settingClearCache, + Setting.APK to ::settingApkProvider, + Setting.SUBSCRIPTIONS to ::settingSubscriptionsProvider, + Setting.SUBSCRIPTIONS_IN_STORE to ::settingSubscriptionsPlayStoreProvider, + Setting.SUBSCRIPTIONS_DEBUG to ::settingSubscriptionsDebug, + Setting.SCREEN_DELAY to ::settingScreenDelay, + Setting.KEEP_SCREEN_ON to ::settingKeepScreenOnProvider, +) + +@Composable +fun SettingPaneContent( + title: String, + items: List, +) { + val di = localDI() + val state by remember(items, di, hub) { + fun create( + item: SettingPaneItem.Item, + group: String = "", + args: Any? = null, + ) = hub[item.key] + ?.invoke(di.direct) + ?.map { content -> + val compositeKey = group + ":" + item.key + ":" + item.suffix + SettingPaneState.Component( + compositeKey = compositeKey, + itemKey = item.key, + groupKey = group, + args = args, + content = content?.content, + ) + } + + val componentDivider = "divider" + val componentFlows = mutableListOf>() + items.forEach { item -> + when (item) { + is SettingPaneItem.Group -> { + val shouldAddDivider = + // Do not add a divider on top of the + // blank list. + componentFlows.isNotEmpty() || !item.title.isNullOrBlank() + if (shouldAddDivider) { + val divider = create( + item = SettingPaneItem.Item(componentDivider), + group = item.key, + args = item.toSectionArgs(), + ) + if (divider != null) componentFlows.add(divider) + } + item.list.forEach { childItem -> + val e = create(childItem, group = item.key) + if (e != null) componentFlows.add(e) + } + } + + is SettingPaneItem.Item -> { + val e = create(item) + if (e != null) componentFlows.add(e) + } + } + } + componentFlows + .foldAsList() + .map { components -> + val result = mutableListOf() + val filteredComponents = components + .filter { it.content != null } + filteredComponents + .forEachIndexed { index, component -> + val isDivider = component.itemKey == componentDivider + if (isDivider) { + val hasItemsFromTheSameGroup = + component.groupKey == filteredComponents.getOrNull(index + 1)?.groupKey + if (result.isNotEmpty() && hasItemsFromTheSameGroup) { + result.add(component) + } + } else { + result.add(component) + } + } + SettingPaneState( + list = Loadable.Ok(result.toImmutableList()), + ) + } + }.collectAsState(initial = SettingPaneState()) + + SettingPaneContent2( + title = title, + state = state, + ) +} + +@OptIn( + ExperimentalMaterial3Api::class, + ExperimentalLayoutApi::class, + ExperimentalMaterialApi::class, +) +@Composable +fun SettingPaneContent2( + title: String, + state: SettingPaneState, +) { + val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior() + ScaffoldLazyColumn( + modifier = Modifier + .nestedScroll(scrollBehavior.nestedScrollConnection), + topAppBarScrollBehavior = scrollBehavior, + topBar = { + LargeToolbar( + title = { + Text(title) + }, + navigationIcon = { + NavigationIcon() + }, + scrollBehavior = scrollBehavior, + ) + }, + ) { + when (val contentState = state.list) { + is Loadable.Loading -> { + item("skeleton") { + FlatItemSkeleton() + } + } + + is Loadable.Ok -> { + val list = contentState.value + if (list.isEmpty()) { + item("empty") { + EmptyView() + } + } + + items( + items = list, + key = { model -> model.compositeKey }, + ) { model -> + CompositionLocalProvider( + LocalSettingItemArgs provides model.args, + ) { + model.content?.invoke() + } + } + } + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/SettingPaneItem.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/SettingPaneItem.kt new file mode 100644 index 00000000..a875cbf1 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/SettingPaneItem.kt @@ -0,0 +1,22 @@ +package com.artemchep.keyguard.feature.home.settings + +import com.artemchep.keyguard.feature.home.settings.component.SettingSectionArgs + +sealed interface SettingPaneItem { + val key: String + + data class Group( + override val key: String, + val title: String? = null, + val list: List, + ) : SettingPaneItem { + fun toSectionArgs() = SettingSectionArgs( + title = title, + ) + } + + data class Item( + override val key: String, + val suffix: String = "", + ) : SettingPaneItem +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/SettingPaneState.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/SettingPaneState.kt new file mode 100644 index 00000000..464e4f22 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/SettingPaneState.kt @@ -0,0 +1,20 @@ +package com.artemchep.keyguard.feature.home.settings + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.Immutable +import com.artemchep.keyguard.common.model.Loadable +import kotlinx.collections.immutable.ImmutableList + +@Immutable +data class SettingPaneState( + val list: Loadable> = Loadable.Loading, +) { + @Immutable + data class Component( + val compositeKey: String, + val itemKey: String, + val groupKey: String, + val args: Any?, + val content: (@Composable () -> Unit)?, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/SettingsRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/SettingsRoute.kt new file mode 100644 index 00000000..849e175d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/SettingsRoute.kt @@ -0,0 +1,11 @@ +package com.artemchep.keyguard.feature.home.settings + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.navigation.Route + +object SettingsRoute : Route { + @Composable + override fun Content() { + SettingsScreen() + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/SettingsScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/SettingsScreen.kt new file mode 100644 index 00000000..f433807b --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/SettingsScreen.kt @@ -0,0 +1,27 @@ +package com.artemchep.keyguard.feature.home.settings + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import com.artemchep.keyguard.feature.navigation.LocalNavigationNodeVisualStack +import com.artemchep.keyguard.feature.navigation.NavigationRouter +import com.artemchep.keyguard.feature.twopane.TwoPaneNavigationContent + +@Composable +fun SettingsScreen() { + // Vault screen actually does not add any depth to the + // navigation stack, it just renders sub-windows. + val visualStack = LocalNavigationNodeVisualStack.current + .run { + removeAt(lastIndex) + } + CompositionLocalProvider( + LocalNavigationNodeVisualStack provides visualStack, + ) { + NavigationRouter( + id = "settings", + initial = SettingListRoute, + ) { backStack -> + TwoPaneNavigationContent(backStack) + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/accounts/AccountListRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/accounts/AccountListRoute.kt new file mode 100644 index 00000000..51b40507 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/accounts/AccountListRoute.kt @@ -0,0 +1,11 @@ +package com.artemchep.keyguard.feature.home.settings.accounts + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.navigation.Route + +object AccountListRoute : Route { + @Composable + override fun Content() { + AccountListScreen() + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/accounts/AccountListScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/accounts/AccountListScreen.kt new file mode 100644 index 00000000..d3922dff --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/accounts/AccountListScreen.kt @@ -0,0 +1,172 @@ +package com.artemchep.keyguard.feature.home.settings.accounts + +import androidx.compose.foundation.layout.ExperimentalLayoutApi +import androidx.compose.foundation.lazy.items +import androidx.compose.material.ExperimentalMaterialApi +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Add +import androidx.compose.material.icons.outlined.NoAccounts +import androidx.compose.material.icons.outlined.SelectAll +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.Modifier +import androidx.compose.ui.input.nestedscroll.nestedScroll +import com.artemchep.keyguard.feature.EmptyView +import com.artemchep.keyguard.feature.auth.login.LoginRoute +import com.artemchep.keyguard.feature.home.settings.accounts.component.AccountListItem +import com.artemchep.keyguard.feature.navigation.LocalNavigationController +import com.artemchep.keyguard.feature.navigation.NavigationIcon +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.feature.navigation.registerRouteResultReceiver +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.DefaultFab +import com.artemchep.keyguard.ui.ExpandedIfNotEmpty +import com.artemchep.keyguard.ui.FabState +import com.artemchep.keyguard.ui.OptionsButton +import com.artemchep.keyguard.ui.ScaffoldLazyColumn +import com.artemchep.keyguard.ui.icons.SyncIcon +import com.artemchep.keyguard.ui.items.FlatItemSkeleton +import com.artemchep.keyguard.ui.selection.SelectionBar +import com.artemchep.keyguard.ui.toolbar.LargeToolbar +import dev.icerock.moko.resources.compose.stringResource + +@Composable +fun AccountListScreen() { + val controller by rememberUpdatedState(LocalNavigationController.current) + val r = registerRouteResultReceiver(LoginRoute()) { + controller.queue(NavigationIntent.Pop) + } + + val accountListStateWrapper = accountListScreenState() + val accountListState = remember(accountListStateWrapper) { + accountListStateWrapper.unwrap( + onAddAccount = { + controller.queue(NavigationIntent.NavigateToRoute(r)) + }, + ) + } + AccountListScreenContent( + state = accountListState, + ) +} + +@OptIn( + ExperimentalMaterial3Api::class, + ExperimentalMaterialApi::class, +) +@Composable +fun AccountListScreenContent( + state: AccountListState, +) { + val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior() + ScaffoldLazyColumn( + modifier = Modifier + .nestedScroll(scrollBehavior.nestedScrollConnection), + topAppBarScrollBehavior = scrollBehavior, + topBar = { + LargeToolbar( + title = { + Text(stringResource(Res.strings.account_main_header_title)) + }, + navigationIcon = { + NavigationIcon() + }, + scrollBehavior = scrollBehavior, + ) + }, + floatingActionState = run { + val fabOnClick = state.onAddNewAccount + val fabState = if (fabOnClick != null) { + FabState( + onClick = fabOnClick, + model = null, + ) + } else { + null + } + rememberUpdatedState(newValue = fabState) + }, + floatingActionButton = { + DefaultFab( + icon = { + Icon(Icons.Outlined.Add, null) + }, + text = { + Text(stringResource(Res.strings.account_main_add_account_title)) + }, + ) + }, + bottomBar = { + ExpandedIfNotEmpty( + valueOrNull = state.selection, + ) { selection -> + SelectionBar( + title = { + val text = stringResource(Res.strings.selection_n_selected, selection.count) + Text(text) + }, + trailing = { + val updatedOnSelectAll by rememberUpdatedState(selection.onSelectAll) + IconButton( + enabled = updatedOnSelectAll != null, + onClick = { + updatedOnSelectAll?.invoke() + }, + ) { + Icon( + imageVector = Icons.Outlined.SelectAll, + contentDescription = null, + ) + } + IconButton( + enabled = selection.onSync != null, + onClick = { + selection.onSync?.invoke() + }, + ) { + SyncIcon(rotating = false) + } + OptionsButton( + actions = selection.actions, + ) + }, + onClear = selection.onClear, + ) + } + }, + ) { + if (state.items.isEmpty()) { + item("header") { + if (state.isLoading) { + FlatItemSkeleton() + } else { + EmptyView( + icon = { + Icon(Icons.Outlined.NoAccounts, null) + }, + text = { + Text( + text = stringResource(Res.strings.accounts_empty_label), + ) + }, + ) + } + } + } + items( + items = state.items, + key = { model -> model.id }, + ) { model -> + AccountListItem( + item = model, + ) + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/accounts/AccountListState.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/accounts/AccountListState.kt new file mode 100644 index 00000000..e11201c9 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/accounts/AccountListState.kt @@ -0,0 +1,30 @@ +package com.artemchep.keyguard.feature.home.settings.accounts + +import androidx.compose.runtime.Immutable +import arrow.optics.optics +import com.artemchep.keyguard.feature.home.settings.accounts.model.AccountItem +import com.artemchep.keyguard.ui.ContextItem + +@Immutable +@optics +data class AccountListState( + val selection: Selection? = null, + /** + * Current revision of the items; each revision you should scroll to + * the top of the list. + */ + val itemsRevision: Int = 0, + val items: List = emptyList(), + val isLoading: Boolean = true, + val onAddNewAccount: (() -> Unit)? = null, +) { + companion object; + + data class Selection( + val count: Int, + val actions: List, + val onSelectAll: (() -> Unit)? = null, + val onSync: (() -> Unit)? = null, + val onClear: (() -> Unit)? = null, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/accounts/AccountListStateWrapper.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/accounts/AccountListStateWrapper.kt new file mode 100644 index 00000000..6ccca1f8 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/accounts/AccountListStateWrapper.kt @@ -0,0 +1,7 @@ +package com.artemchep.keyguard.feature.home.settings.accounts + +fun interface AccountListStateWrapper { + fun unwrap( + onAddAccount: () -> Unit, + ): AccountListState +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/accounts/AccountListViewModel.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/accounts/AccountListViewModel.kt new file mode 100644 index 00000000..f87b2837 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/accounts/AccountListViewModel.kt @@ -0,0 +1,328 @@ +package com.artemchep.keyguard.feature.home.settings.accounts + +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Logout +import androidx.compose.runtime.Composable +import androidx.compose.ui.text.AnnotatedString +import arrow.core.partially1 +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.model.AccountId +import com.artemchep.keyguard.common.model.AccountTask +import com.artemchep.keyguard.common.model.DAccount +import com.artemchep.keyguard.common.model.DProfile +import com.artemchep.keyguard.common.model.firstOrNull +import com.artemchep.keyguard.common.usecase.GetAccountHasError +import com.artemchep.keyguard.common.usecase.GetAccounts +import com.artemchep.keyguard.common.usecase.GetCanAddAccount +import com.artemchep.keyguard.common.usecase.GetProfiles +import com.artemchep.keyguard.common.usecase.QueueSyncById +import com.artemchep.keyguard.common.usecase.RemoveAccountById +import com.artemchep.keyguard.common.usecase.SupervisorRead +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.common.util.flow.foldAsList +import com.artemchep.keyguard.feature.auth.AccountViewRoute +import com.artemchep.keyguard.feature.confirmation.createConfirmationDialogIntent +import com.artemchep.keyguard.feature.home.settings.accounts.model.AccountItem +import com.artemchep.keyguard.feature.home.vault.VaultRoute +import com.artemchep.keyguard.feature.home.vault.model.VaultItemIcon +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.feature.navigation.state.produceScreenState +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItemAction +import com.artemchep.keyguard.ui.SyncSupervisorImpl +import com.artemchep.keyguard.ui.buildContextItems +import com.artemchep.keyguard.ui.icons.KeyguardCipher +import com.artemchep.keyguard.ui.icons.generateAccentColorsByAccountId +import com.artemchep.keyguard.ui.icons.icon +import com.artemchep.keyguard.ui.selection.selectionHandle +import kotlinx.collections.immutable.toImmutableList +import kotlinx.coroutines.DelicateCoroutinesApi +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.flatMapLatest +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.shareIn +import org.kodein.di.compose.localDI +import org.kodein.di.direct +import org.kodein.di.instance + +@Composable +fun accountListScreenState(): AccountListStateWrapper = with(localDI().direct) { + accountListScreenState( + queueSyncById = instance(), + syncSupervisor = instance(), + removeAccountById = instance(), + getAccounts = instance(), + getProfiles = instance(), + getAccountHasError = instance(), + getCanAddAccount = instance(), + windowCoroutineScope = instance(), + ) +} + +@Composable +fun accountListScreenState( + queueSyncById: QueueSyncById, + syncSupervisor: SupervisorRead, + removeAccountById: RemoveAccountById, + getAccounts: GetAccounts, + getProfiles: GetProfiles, + getAccountHasError: GetAccountHasError, + getCanAddAccount: GetCanAddAccount, + windowCoroutineScope: WindowCoroutineScope, +): AccountListStateWrapper = produceScreenState( + key = "account_list", + initial = AccountListStateWrapper { + AccountListState() + }, + args = arrayOf( + queueSyncById, + syncSupervisor, + removeAccountById, + getAccounts, + getCanAddAccount, + ), +) { + val selectionHandle = selectionHandle("selection") + val selectedAccountsFlow = getAccounts() + .combine(selectionHandle.idsFlow) { accounts, selectedAccountIds -> + selectedAccountIds + .mapNotNull { selectedAccountId -> + val account = accounts + .firstOrNull { it.id.id == selectedAccountId } + ?: return@mapNotNull null + selectedAccountId to account + } + .toMap() + } + .distinctUntilChanged() + .shareIn(screenScope, SharingStarted.Lazily, replay = 1) + + val selectionModeFlow = selectionHandle + .idsFlow + .map { accountIds -> accountIds.isNotEmpty() } + .distinctUntilChanged() + + val accountIdsSyncFlow = syncSupervisor + .get(AccountTask.SYNC) + .map { accounts -> + accounts.map { it.id }.toSet() + } + + /** + * Returns a binary flow that determines whether the + * account is being sync-ed at this moment or not. + */ + fun getIsAccountSyncingFlow( + accountId: AccountId, + ) = accountIdsSyncFlow.map { accountId.id in it } + + val accountIdsRemoveSupervisor = SyncSupervisorImpl() + + /** + * Returns a binary flow that determines whether the + * account is being removed at this moment or not. + */ + fun getIsAccountRemovingFlow( + accountId: AccountId, + ) = accountIdsRemoveSupervisor.output.map { accountId.id in it } + + fun doSyncAccountById(accountId: AccountId) { + queueSyncById(accountId).launchIn(windowCoroutineScope) + } + + fun onDelete( + accountIds: Set, + ) { + val intent = createConfirmationDialogIntent( + icon = icon(Icons.Outlined.Logout), + title = translate(Res.strings.account_log_out_confirmation_title), + message = translate(Res.strings.account_log_out_confirmation_text), + ) { + removeAccountById(accountIds) + .launchIn(windowCoroutineScope) + } + navigate(intent) + } + + fun onSync( + accountIds: Set, + ) { + accountIds.forEach { accountId -> + doSyncAccountById(accountId) + } + } + + val selectionFlow = combine( + getAccounts() + .map { accounts -> + accounts + .map { it.id } + .toSet() + } + .distinctUntilChanged(), + selectedAccountsFlow, + ) { accountIds, selectedAccounts -> + if (selectedAccounts.isEmpty()) { + return@combine null + } + + val selectedAccountIds = selectedAccounts.keys + val f = selectedAccountIds + .map { AccountId(it) } + .toSet() + val actions = buildContextItems { + section { + // An option to view all the items that belong + // to these folders. + this += FlatItemAction( + leading = icon(Icons.Outlined.KeyguardCipher), + title = translate(Res.strings.items), + onClick = { + val accounts = selectedAccounts.values + val route = VaultRoute.by(accounts = accounts) + val intent = NavigationIntent.NavigateToRoute(route) + navigate(intent) + }, + ) + } + section { + this += FlatItemAction( + icon = Icons.Outlined.Logout, + title = translate(Res.strings.account_action_log_out_title), + onClick = ::onDelete + .partially1(f), + ) + } + } + AccountListState.Selection( + count = selectedAccounts.size, + actions = actions.toImmutableList(), + onSelectAll = selectionHandle::setSelection + .partially1(accountIds.map { it.id }.toSet()) + .takeIf { + accountIds.size > f.size + }, + onSync = ::onSync + .partially1(accountIds), + onClear = selectionHandle::clearSelection, + ) + } + + fun flowOfItems( + accounts: List, + profiles: List, + ) = accounts + .map { + val profile = profiles.firstOrNull(it.id) + + val errorFlow = getAccountHasError(it.id) + val syncingFlow = getIsAccountSyncingFlow(it.id) + val removingFlow = getIsAccountRemovingFlow(it.id) + combine( + errorFlow, + syncingFlow, + removingFlow, + selectionHandle + .idsFlow + .map { accountIds -> + it.id.id in accountIds + }, + selectionModeFlow, + ) { error, syncing, removing, selected, selectionMode -> + val busy = syncing || removing + val accent = profile?.accentColor + ?: generateAccentColorsByAccountId(it.id.id) + val icon = VaultItemIcon.TextIcon( + run { + val words = profile?.name?.split(" ").orEmpty() + if (words.size <= 1) { + return@run words.firstOrNull()?.take(2).orEmpty() + } + + words + .take(2) + .joinToString("") { it.take(1) } + }.uppercase(), + ) + AccountItem.Item( + id = it.id.id, + icon = icon, + name = profile?.name.orEmpty(), + title = AnnotatedString(it.username), + text = it.host, + error = error, + syncing = syncing, + selecting = selectionMode, + actions = listOf(), + actionNeeded = false, + accentLight = accent.light, + accentDark = accent.dark, + isOpened = false, + isSelected = selected, + onClick = { + if (selectionMode) { + selectionHandle.toggleSelection(it.id.id) + } else { + val route = AccountViewRoute(it.id) + val intent = NavigationIntent.Composite( + listOf( + NavigationIntent.PopById("accounts"), + NavigationIntent.NavigateToRoute(route), + ), + ) + navigate(intent) + } + }, + onLongClick = if (selectionMode) { + null + } else { + // lambda + selectionHandle::toggleSelection.partially1(it.id.id) + }, + ) + } + } + .foldAsList() + .map { items -> + items + .sortedBy { it.text } + } + + combine( + combine( + getAccounts(), + getProfiles(), + ) { accounts, profiles -> + flowOfItems( + accounts = accounts, + profiles = profiles, + ) + } + .flatMapLatest { it } + .map { + val list = mutableListOf() + if (it.isNotEmpty()) { + list += AccountItem.Section( + id = "bitwarden", + text = "Bitwarden", + ) + list += it + } + list + }, + selectionFlow, + getCanAddAccount(), + ) { items, selection, canAddAccount -> + AccountListStateWrapper { onAddAccount -> + AccountListState( + selection = selection, + items = items, + isLoading = false, + onAddNewAccount = onAddAccount + .takeIf { canAddAccount && selection == null }, + ) + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/accounts/AccountsRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/accounts/AccountsRoute.kt new file mode 100644 index 00000000..281b56a2 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/accounts/AccountsRoute.kt @@ -0,0 +1,11 @@ +package com.artemchep.keyguard.feature.home.settings.accounts + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.navigation.Route + +object AccountsRoute : Route { + @Composable + override fun Content() { + AccountsScreen() + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/accounts/AccountsScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/accounts/AccountsScreen.kt new file mode 100644 index 00000000..3536dd67 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/accounts/AccountsScreen.kt @@ -0,0 +1,26 @@ +package com.artemchep.keyguard.feature.home.settings.accounts + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.navigation.LocalNavigationNodeVisualStack +import com.artemchep.keyguard.feature.navigation.NavigationRouter +import com.artemchep.keyguard.feature.twopane.TwoPaneNavigationContent + +@Composable +fun AccountsScreen() { + // The screen actually does not add any depth to the + // navigation stack, it just renders sub-windows. + val visualStack = LocalNavigationNodeVisualStack.current +// .run { +// removeAt(lastIndex) +// } +// CompositionLocalProvider( +// LocalNavigationNodeVisualStack provides visualStack, +// ) { + NavigationRouter( + id = "accounts", + initial = AccountListRoute, + ) { backStack -> + TwoPaneNavigationContent(backStack) + } +// } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/accounts/component/AccountListItem.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/accounts/component/AccountListItem.kt new file mode 100644 index 00000000..3bf2940e --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/accounts/component/AccountListItem.kt @@ -0,0 +1,200 @@ +package com.artemchep.keyguard.feature.home.settings.accounts.component + +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.animation.ExperimentalAnimationApi +import androidx.compose.animation.fadeIn +import androidx.compose.animation.fadeOut +import androidx.compose.animation.scaleIn +import androidx.compose.animation.scaleOut +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.ErrorOutline +import androidx.compose.material.icons.outlined.Warning +import androidx.compose.material3.Checkbox +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.feature.home.settings.accounts.model.AccountItem +import com.artemchep.keyguard.feature.home.vault.component.Section +import com.artemchep.keyguard.feature.home.vault.component.rememberSecretAccentColor +import com.artemchep.keyguard.ui.AvatarBuilder +import com.artemchep.keyguard.ui.ExpandedIfNotEmptyForRow +import com.artemchep.keyguard.ui.FlatItemLayout +import com.artemchep.keyguard.ui.FlatItemTextContent +import com.artemchep.keyguard.ui.icons.ChevronIcon +import com.artemchep.keyguard.ui.icons.SyncIcon +import com.artemchep.keyguard.ui.theme.selectedContainer + +@Composable +fun AccountListItem( + item: AccountItem, +) = when (item) { + is AccountItem.Section -> AccountListItemSection(item) + is AccountItem.Item -> AccountListItemText(item) +} + +@Composable +fun AccountListItemSection( + item: AccountItem.Section, +) { + Section( + text = item.text.orEmpty(), + ) +} + +@Composable +fun AccountListItemText( + item: AccountItem.Item, +) { + @Composable + fun TextContent(text: String) = + Text( + text = text, + maxLines = 1, + ) + + val backgroundColor = when { + item.isSelected -> MaterialTheme.colorScheme.primaryContainer + item.isOpened -> MaterialTheme.colorScheme.selectedContainer + else -> Color.Unspecified + } + FlatItemLayout( + backgroundColor = backgroundColor, + leading = { + val accent = rememberSecretAccentColor( + accentLight = item.accentLight, + accentDark = item.accentDark, + ) + AvatarBuilder( + icon = item.icon, + accent = accent, + active = true, + badge = { + // Do nothing. + }, + ) + }, + actions = item.actions, + content = { + FlatItemTextContent( + title = { + Text( + text = item.title, + overflow = TextOverflow.Ellipsis, + maxLines = 1, + ) + }, + text = item.text + ?.takeIf { it.isNotEmpty() } + ?.let { + // composable + { + TextContent(text = it) + } + }, + ) + }, + trailing = { + if (item.error) { + Spacer(modifier = Modifier.width(8.dp)) + Icon( + imageVector = Icons.Outlined.ErrorOutline, + tint = MaterialTheme.colorScheme.error, + contentDescription = null, + ) + } + + AnimatedVisibility( + visible = item.syncing, + enter = fadeIn() + scaleIn(), + exit = scaleOut() + fadeOut(), + ) { + SyncIcon( + rotating = true, + ) + } + + Spacer(modifier = Modifier.width(8.dp)) + + ExpandedIfNotEmptyForRow( + item.isSelected.takeIf { item.selecting }, + ) { selected -> + Checkbox( + checked = selected, + onCheckedChange = null, + ) + } + + ExpandedIfNotEmptyForRow( + Unit.takeIf { !item.selecting }, + ) { + ChevronIcon() + } + }, + onClick = item.onClick, + onLongClick = item.onLongClick, + ) +} + +@Composable +fun VaultListItemTextIcon( + item: AccountItem.Item, +) = Box( + modifier = Modifier + .size(24.dp), +) { + Box( + modifier = Modifier + .fillMaxSize(), + ) { + Box( + modifier = Modifier + .padding(2.dp), + contentAlignment = Alignment.Center, + ) { + val color = rememberSecretAccentColor( + accentLight = item.accentLight, + accentDark = item.accentDark, + ) + Box( + modifier = Modifier + .fillMaxSize() + .background(color, CircleShape), + ) + } + } + Row( + modifier = Modifier + .align(Alignment.BottomEnd) + .background( + MaterialTheme.colorScheme.tertiaryContainer, + MaterialTheme.shapes.extraSmall, + ), + ) { + if (item.actionNeeded) { + Icon( + modifier = Modifier + .size(15.dp) + .padding(1.dp), + imageVector = Icons.Outlined.Warning, + tint = MaterialTheme.colorScheme.onTertiaryContainer, + contentDescription = null, + ) + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/accounts/model/AccountItem.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/accounts/model/AccountItem.kt new file mode 100644 index 00000000..fbdeb8f0 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/accounts/model/AccountItem.kt @@ -0,0 +1,53 @@ +package com.artemchep.keyguard.feature.home.settings.accounts.model + +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.text.AnnotatedString +import arrow.optics.optics +import com.artemchep.keyguard.feature.home.vault.model.VaultItemIcon +import com.artemchep.keyguard.ui.FlatItemAction +import java.util.UUID + +@optics +sealed interface AccountItem { + companion object + + val id: String + + @optics + data class Section( + override val id: String = UUID.randomUUID().toString(), + val text: String? = null, + ) : AccountItem { + companion object + } + + @optics + data class Item( + override val id: String, + val fav: String? = null, // "https://icons.bitwarden.net/vault.bitwarden.com/icon.png", + /** + * The name of the item. + */ + val name: String, + val title: AnnotatedString, + val text: String?, + val error: Boolean = false, + val syncing: Boolean = false, + val selecting: Boolean = false, + val actionNeeded: Boolean, + val icon: VaultItemIcon, + val accentLight: Color, + val accentDark: Color, + val isOpened: Boolean, + val isSelected: Boolean, + /** + * List of the callable actions appended + * to the item. + */ + val actions: List = emptyList(), + val onClick: () -> Unit, + val onLongClick: (() -> Unit)?, + ) : AccountItem { + companion object + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/autofill/AutofillSettingsRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/autofill/AutofillSettingsRoute.kt new file mode 100644 index 00000000..373a530f --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/autofill/AutofillSettingsRoute.kt @@ -0,0 +1,11 @@ +package com.artemchep.keyguard.feature.home.settings.autofill + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.navigation.Route + +object AutofillSettingsRoute : Route { + @Composable + override fun Content() { + AutofillSettingsScreen() + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/autofill/AutofillSettingsScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/autofill/AutofillSettingsScreen.kt new file mode 100644 index 00000000..853601ea --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/autofill/AutofillSettingsScreen.kt @@ -0,0 +1,50 @@ +package com.artemchep.keyguard.feature.home.settings.autofill + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.home.settings.Setting +import com.artemchep.keyguard.feature.home.settings.SettingPaneContent +import com.artemchep.keyguard.feature.home.settings.SettingPaneItem +import com.artemchep.keyguard.res.Res +import dev.icerock.moko.resources.compose.stringResource + +@Composable +fun AutofillSettingsScreen() { + SettingPaneContent( + title = stringResource(Res.strings.settings_autofill_header_title), + items = listOf( + SettingPaneItem.Group( + key = "credential", + list = listOf( + SettingPaneItem.Item(Setting.CREDENTIAL_PROVIDER), + ), + ), + SettingPaneItem.Group( + key = "autofill", + list = listOf( + SettingPaneItem.Item(Setting.AUTOFILL), + ), + ), + SettingPaneItem.Group( + key = "general", + list = listOf( + SettingPaneItem.Item(Setting.AUTOFILL_INLINE_SUGGESTIONS), + SettingPaneItem.Item(Setting.AUTOFILL_MANUAL_SELECTION), + SettingPaneItem.Item(Setting.AUTOFILL_RESPECT_AUTOFILL_OFF), + ), + ), + SettingPaneItem.Group( + key = "totp", + list = listOf( + SettingPaneItem.Item(Setting.AUTOFILL_COPY_TOTP), + ), + ), + SettingPaneItem.Group( + key = "save", + list = listOf( + SettingPaneItem.Item(Setting.AUTOFILL_SAVE_REQUEST), + SettingPaneItem.Item(Setting.AUTOFILL_SAVE_URI), + ), + ), + ), + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingAboutApp.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingAboutApp.kt new file mode 100644 index 00000000..4118dec9 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingAboutApp.kt @@ -0,0 +1,45 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.common.usecase.GetAppVersion +import com.artemchep.keyguard.res.Res +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.flow.map +import org.kodein.di.DirectDI +import org.kodein.di.instance + +fun settingAboutAppProvider( + directDI: DirectDI, +) = settingAboutAppProvider( + getAppVersion = directDI.instance(), +) + +fun settingAboutAppProvider( + getAppVersion: GetAppVersion, +): SettingComponent = getAppVersion() + .map { appVersion -> + // composable + SettingIi( + search = SettingIi.Search( + group = "about", + tokens = listOf( + "about", + "app", + ), + ), + ) { + SettingAboutApp( + appVersion = appVersion, + ) + } + } + +@Composable +private fun SettingAboutApp( + appVersion: String, +) { + SettingListItem( + title = stringResource(Res.strings.pref_item_app_version_title), + text = appVersion, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingAboutAppBuildDate.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingAboutAppBuildDate.kt new file mode 100644 index 00000000..4b719077 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingAboutAppBuildDate.kt @@ -0,0 +1,47 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.common.usecase.GetAppBuildDate +import com.artemchep.keyguard.res.Res +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.flow.map +import org.kodein.di.DirectDI +import org.kodein.di.instance + +fun settingAboutAppBuildDateProvider( + directDI: DirectDI, +) = settingAboutAppBuildDateProvider( + getAppBuildDate = directDI.instance(), +) + +fun settingAboutAppBuildDateProvider( + getAppBuildDate: GetAppBuildDate, +): SettingComponent = getAppBuildDate() + .map { buildDate -> + // composable + SettingIi( + search = SettingIi.Search( + group = "about", + tokens = listOf( + "about", + "app", + "build", + "date", + ), + ), + ) { + SettingAboutAppBuildDate( + buildDate = buildDate, + ) + } + } + +@Composable +private fun SettingAboutAppBuildDate( + buildDate: String, +) { + SettingListItem( + title = stringResource(Res.strings.pref_item_app_build_date_title), + text = buildDate, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingAboutTeam.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingAboutTeam.kt new file mode 100644 index 00000000..99582b24 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingAboutTeam.kt @@ -0,0 +1,64 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.foundation.layout.RowScope +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.People +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberUpdatedState +import com.artemchep.keyguard.feature.navigation.LocalNavigationController +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.feature.team.AboutTeamRoute +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItem +import com.artemchep.keyguard.ui.icons.ChevronIcon +import com.artemchep.keyguard.ui.icons.icon +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.flow.flowOf +import org.kodein.di.DirectDI + +fun settingAboutTeamProvider( + directDI: DirectDI, +) = settingAboutTeamProvider() + +fun settingAboutTeamProvider(): SettingComponent = kotlin.run { + val item = SettingIi( + search = SettingIi.Search( + group = "about", + tokens = listOf( + "about", + "team", + ), + ), + ) { + val navigationController by rememberUpdatedState(LocalNavigationController.current) + SettingAboutTeam( + onClick = { + val intent = NavigationIntent.NavigateToRoute( + route = AboutTeamRoute, + ) + navigationController.queue(intent) + }, + ) + } + flowOf(item) +} + +@Composable +private fun SettingAboutTeam( + onClick: (() -> Unit)?, +) { + FlatItem( + leading = icon(Icons.Outlined.People), + trailing = { + ChevronIcon() + }, + title = { + Text( + text = stringResource(Res.strings.pref_item_app_team_title), + ) + }, + onClick = onClick, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingAboutTelegram.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingAboutTelegram.kt new file mode 100644 index 00000000..903e8934 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingAboutTelegram.kt @@ -0,0 +1,68 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.foundation.layout.RowScope +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Forum +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberUpdatedState +import com.artemchep.keyguard.feature.navigation.LocalNavigationController +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItem +import com.artemchep.keyguard.ui.icons.ChevronIcon +import com.artemchep.keyguard.ui.icons.KeyguardWebsite +import com.artemchep.keyguard.ui.icons.icon +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.flow.flowOf +import org.kodein.di.DirectDI + +fun settingAboutTelegramProvider( + directDI: DirectDI, +) = settingAboutTelegramProvider() + +fun settingAboutTelegramProvider(): SettingComponent = kotlin.run { + val item = SettingIi( + search = SettingIi.Search( + group = "about", + tokens = listOf( + "about", + "reddit", + "forum", + "discussion", + "feedback", + "report", + ), + ), + ) { + val navigationController by rememberUpdatedState(LocalNavigationController.current) + SettingAboutTelegram( + onClick = { + val intent = NavigationIntent.NavigateToBrowser( + url = "https://www.reddit.com/r/keyguard/", + ) + navigationController.queue(intent) + }, + ) + } + flowOf(item) +} + +@Composable +private fun SettingAboutTelegram( + onClick: (() -> Unit)?, +) { + FlatItem( + leading = icon(Icons.Outlined.Forum, Icons.Outlined.KeyguardWebsite), + trailing = { + ChevronIcon() + }, + title = { + Text( + text = stringResource(Res.strings.pref_item_reddit_community_title), + ) + }, + onClick = onClick, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingApk.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingApk.kt new file mode 100644 index 00000000..8c47e7c6 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingApk.kt @@ -0,0 +1,72 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.foundation.layout.RowScope +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.FileDownload +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberUpdatedState +import com.artemchep.keyguard.common.usecase.GetPurchased +import com.artemchep.keyguard.feature.navigation.LocalNavigationController +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItem +import com.artemchep.keyguard.ui.icons.ChevronIcon +import com.artemchep.keyguard.ui.icons.icon +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.flow.map +import org.kodein.di.DirectDI +import org.kodein.di.instance + +fun settingApkProvider( + directDI: DirectDI, +) = settingApkProvider( + getPurchased = directDI.instance(), +) + +fun settingApkProvider( + getPurchased: GetPurchased, +): SettingComponent = getPurchased() + .map { premium -> + if (premium) { + // composable + SettingIi( + search = SettingIi.Search( + group = "subscription", + tokens = listOf( + "apk", + "download", + ), + ), + ) { + SettingApk() + } + } else { + null + } + } + +@Composable +private fun SettingApk() { + val controller by rememberUpdatedState(LocalNavigationController.current) + FlatItem( + leading = icon(Icons.Outlined.FileDownload), + title = { + Text( + text = stringResource(Res.strings.pref_item_download_apk_title), + ) + }, + trailing = { + ChevronIcon() + }, + onClick = { + val intent = run { + val url = + "https://github.com/AChep/keyguard-app/releases" + NavigationIntent.NavigateToBrowser(url) + } + controller.queue(intent) + }, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingAppIcons.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingAppIcons.kt new file mode 100644 index 00000000..4240af76 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingAppIcons.kt @@ -0,0 +1,83 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.foundation.layout.RowScope +import androidx.compose.material.icons.Icons +import androidx.compose.material3.Switch +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import arrow.core.partially1 +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.usecase.GetAppIcons +import com.artemchep.keyguard.common.usecase.PutAppIcons +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItemLayout +import com.artemchep.keyguard.ui.FlatItemTextContent +import com.artemchep.keyguard.ui.icons.Stub +import com.artemchep.keyguard.ui.icons.icon +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.flow.map +import org.kodein.di.DirectDI +import org.kodein.di.instance + +fun settingAppIconsProvider( + directDI: DirectDI, +) = settingAppIconsProvider( + getAppIcons = directDI.instance(), + putAppIcons = directDI.instance(), + windowCoroutineScope = directDI.instance(), +) + +fun settingAppIconsProvider( + getAppIcons: GetAppIcons, + putAppIcons: PutAppIcons, + windowCoroutineScope: WindowCoroutineScope, +): SettingComponent = getAppIcons().map { appIcons -> + val onCheckedChange = { shouldAppIcons: Boolean -> + putAppIcons(shouldAppIcons) + .launchIn(windowCoroutineScope) + Unit + } + + SettingIi( + search = SettingIi.Search( + group = "icon", + tokens = listOf( + "icon", + "app", + ), + ), + ) { + SettingAppIcons( + checked = appIcons, + onCheckedChange = onCheckedChange, + ) + } +} + +@Composable +private fun SettingAppIcons( + checked: Boolean, + onCheckedChange: ((Boolean) -> Unit)?, +) { + FlatItemLayout( + leading = icon(Icons.Stub), + trailing = { + Switch( + checked = checked, + enabled = onCheckedChange != null, + onCheckedChange = onCheckedChange, + ) + }, + content = { + FlatItemTextContent( + title = { + Text( + text = stringResource(Res.strings.pref_item_load_app_icons_title), + ) + }, + ) + }, + onClick = onCheckedChange?.partially1(!checked), + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingAutofill.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingAutofill.kt new file mode 100644 index 00000000..755a294b --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingAutofill.kt @@ -0,0 +1,7 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import org.kodein.di.DirectDI + +expect fun settingAutofillProvider( + directDI: DirectDI, +): SettingComponent diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingAutofillCopyTotp.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingAutofillCopyTotp.kt new file mode 100644 index 00000000..03541c88 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingAutofillCopyTotp.kt @@ -0,0 +1,81 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.material3.Switch +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import arrow.core.partially1 +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.usecase.GetAutofillCopyTotp +import com.artemchep.keyguard.common.usecase.PutAutofillCopyTotp +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItem +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.flow.map +import org.kodein.di.DirectDI +import org.kodein.di.instance + +fun settingAutofillCopyTotpProvider( + directDI: DirectDI, +) = settingAutofillCopyTotpProvider( + getAutofillCopyTotp = directDI.instance(), + putAutofillCopyTotp = directDI.instance(), + windowCoroutineScope = directDI.instance(), +) + +fun settingAutofillCopyTotpProvider( + getAutofillCopyTotp: GetAutofillCopyTotp, + putAutofillCopyTotp: PutAutofillCopyTotp, + windowCoroutineScope: WindowCoroutineScope, +): SettingComponent = getAutofillCopyTotp().map { copyTotp -> + val onCheckedChange = { shouldCopyTotp: Boolean -> + putAutofillCopyTotp(shouldCopyTotp) + .launchIn(windowCoroutineScope) + Unit + } + + SettingIi( + search = SettingIi.Search( + group = "autofill", + tokens = listOf( + "autofill", + "copy", + "totp", + "password", + "one-time", + ), + ), + ) { + SettingAutofillCopyTotp( + checked = copyTotp, + onCheckedChange = onCheckedChange, + ) + } +} + +@Composable +private fun SettingAutofillCopyTotp( + checked: Boolean, + onCheckedChange: ((Boolean) -> Unit)?, +) { + FlatItem( + trailing = { + Switch( + checked = checked, + enabled = onCheckedChange != null, + onCheckedChange = onCheckedChange, + ) + }, + title = { + Text( + text = stringResource(Res.strings.pref_item_autofill_auto_copy_otp_title), + ) + }, + text = { + Text( + text = stringResource(Res.strings.pref_item_autofill_auto_copy_otp_text), + ) + }, + onClick = onCheckedChange?.partially1(!checked), + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingAutofillInlineSuggestions.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingAutofillInlineSuggestions.kt new file mode 100644 index 00000000..f4727dce --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingAutofillInlineSuggestions.kt @@ -0,0 +1,78 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.material3.Switch +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import arrow.core.partially1 +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.usecase.GetAutofillInlineSuggestions +import com.artemchep.keyguard.common.usecase.PutAutofillInlineSuggestions +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItem +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.flow.map +import org.kodein.di.DirectDI +import org.kodein.di.instance + +fun settingAutofillInlineSuggestionsProvider( + directDI: DirectDI, +) = settingAutofillInlineSuggestionsProvider( + getAutofillInlineSuggestions = directDI.instance(), + putAutofillInlineSuggestions = directDI.instance(), + windowCoroutineScope = directDI.instance(), +) + +fun settingAutofillInlineSuggestionsProvider( + getAutofillInlineSuggestions: GetAutofillInlineSuggestions, + putAutofillInlineSuggestions: PutAutofillInlineSuggestions, + windowCoroutineScope: WindowCoroutineScope, +): SettingComponent = getAutofillInlineSuggestions().map { inlineSuggestions -> + val onCheckedChange = { shouldInlineSuggestions: Boolean -> + putAutofillInlineSuggestions(shouldInlineSuggestions) + .launchIn(windowCoroutineScope) + Unit + } + + SettingIi( + search = SettingIi.Search( + group = "autofill", + tokens = listOf( + "autofill", + "suggestions", + ), + ), + ) { + SettingAutofillInlineSuggestions( + checked = inlineSuggestions, + onCheckedChange = onCheckedChange, + ) + } +} + +@Composable +private fun SettingAutofillInlineSuggestions( + checked: Boolean, + onCheckedChange: ((Boolean) -> Unit)?, +) { + FlatItem( + trailing = { + Switch( + checked = checked, + enabled = onCheckedChange != null, + onCheckedChange = onCheckedChange, + ) + }, + title = { + Text( + text = stringResource(Res.strings.pref_item_autofill_inline_suggestions_title), + ) + }, + text = { + Text( + text = stringResource(Res.strings.pref_item_autofill_inline_suggestions_text), + ) + }, + onClick = onCheckedChange?.partially1(!checked), + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingAutofillManualSelection.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingAutofillManualSelection.kt new file mode 100644 index 00000000..71a72638 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingAutofillManualSelection.kt @@ -0,0 +1,78 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.material3.Switch +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import arrow.core.partially1 +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.usecase.GetAutofillManualSelection +import com.artemchep.keyguard.common.usecase.PutAutofillManualSelection +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItem +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.flow.map +import org.kodein.di.DirectDI +import org.kodein.di.instance + +fun settingAutofillManualSelectionProvider( + directDI: DirectDI, +) = settingAutofillManualSelectionProvider( + getAutofillManualSelection = directDI.instance(), + putAutofillManualSelection = directDI.instance(), + windowCoroutineScope = directDI.instance(), +) + +fun settingAutofillManualSelectionProvider( + getAutofillManualSelection: GetAutofillManualSelection, + putAutofillManualSelection: PutAutofillManualSelection, + windowCoroutineScope: WindowCoroutineScope, +): SettingComponent = getAutofillManualSelection().map { manualSelection -> + val onCheckedChange = { shouldManualSelection: Boolean -> + putAutofillManualSelection(shouldManualSelection) + .launchIn(windowCoroutineScope) + Unit + } + + SettingIi( + search = SettingIi.Search( + group = "autofill", + tokens = listOf( + "autofill", + "manual", + ), + ), + ) { + SettingAutofillManualSelection( + checked = manualSelection, + onCheckedChange = onCheckedChange, + ) + } +} + +@Composable +private fun SettingAutofillManualSelection( + checked: Boolean, + onCheckedChange: ((Boolean) -> Unit)?, +) { + FlatItem( + trailing = { + Switch( + checked = checked, + enabled = onCheckedChange != null, + onCheckedChange = onCheckedChange, + ) + }, + title = { + Text( + text = stringResource(Res.strings.pref_item_autofill_manual_selection_title), + ) + }, + text = { + Text( + text = stringResource(Res.strings.pref_item_autofill_manual_selection_text), + ) + }, + onClick = onCheckedChange?.partially1(!checked), + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingAutofillRespectAutofillOff.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingAutofillRespectAutofillOff.kt new file mode 100644 index 00000000..136b1bd3 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingAutofillRespectAutofillOff.kt @@ -0,0 +1,101 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.height +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Switch +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import arrow.core.partially1 +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.usecase.GetAutofillRespectAutofillOff +import com.artemchep.keyguard.common.usecase.PutAutofillRespectAutofillOff +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItemLayout +import com.artemchep.keyguard.ui.FlatItemTextContent +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.theme.combineAlpha +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.flow.map +import org.kodein.di.DirectDI +import org.kodein.di.instance + +fun settingAutofillRespectAutofillOffProvider( + directDI: DirectDI, +) = settingAutofillRespectAutofillOffProvider( + getAutofillRespectAutofillOff = directDI.instance(), + putAutofillRespectAutofillOff = directDI.instance(), + windowCoroutineScope = directDI.instance(), +) + +fun settingAutofillRespectAutofillOffProvider( + getAutofillRespectAutofillOff: GetAutofillRespectAutofillOff, + putAutofillRespectAutofillOff: PutAutofillRespectAutofillOff, + windowCoroutineScope: WindowCoroutineScope, +): SettingComponent = getAutofillRespectAutofillOff().map { respectAutofillOff -> + val onCheckedChange = { shouldRespectAutofillOff: Boolean -> + putAutofillRespectAutofillOff(shouldRespectAutofillOff) + .launchIn(windowCoroutineScope) + Unit + } + + SettingIi( + search = SettingIi.Search( + group = "autofill", + tokens = listOf( + "autofill", + "flag", + ), + ), + ) { + SettingAutofillRespectAutofillOff( + checked = respectAutofillOff, + onCheckedChange = onCheckedChange, + ) + } +} + +@Composable +private fun SettingAutofillRespectAutofillOff( + checked: Boolean, + onCheckedChange: ((Boolean) -> Unit)?, +) { + FlatItemLayout( + trailing = { + Switch( + checked = checked, + enabled = onCheckedChange != null, + onCheckedChange = onCheckedChange, + ) + }, + content = { + FlatItemTextContent( + title = { + Text( + text = stringResource(Res.strings.pref_item_autofill_respect_autofill_disabled_title), + ) + }, + text = { + Text( + text = stringResource(Res.strings.pref_item_autofill_respect_autofill_disabled_text), + ) + Spacer( + modifier = Modifier + .height(8.dp), + ) + Text( + color = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + style = MaterialTheme.typography.bodySmall, + text = stringResource(Res.strings.pref_item_autofill_respect_autofill_disabled_note), + ) + }, + ) + }, + onClick = onCheckedChange?.partially1(!checked), + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingAutofillSaveRequest.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingAutofillSaveRequest.kt new file mode 100644 index 00000000..5e5b8f9b --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingAutofillSaveRequest.kt @@ -0,0 +1,86 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.material3.Switch +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import arrow.core.partially1 +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.usecase.GetAutofillSaveRequest +import com.artemchep.keyguard.common.usecase.GetCanWrite +import com.artemchep.keyguard.common.usecase.PutAutofillSaveRequest +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItem +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.flow.combine +import org.kodein.di.DirectDI +import org.kodein.di.instance + +fun settingAutofillSaveRequestProvider( + directDI: DirectDI, +) = settingAutofillSaveRequestProvider( + getCanWrite = directDI.instance(), + getAutofillSaveRequest = directDI.instance(), + putAutofillSaveRequest = directDI.instance(), + windowCoroutineScope = directDI.instance(), +) + +fun settingAutofillSaveRequestProvider( + getCanWrite: GetCanWrite, + getAutofillSaveRequest: GetAutofillSaveRequest, + putAutofillSaveRequest: PutAutofillSaveRequest, + windowCoroutineScope: WindowCoroutineScope, +): SettingComponent = run { + val onCheckedChange = { shouldSaveRequest: Boolean -> + putAutofillSaveRequest(shouldSaveRequest) + .launchIn(windowCoroutineScope) + Unit + } + + combine( + getCanWrite(), + getAutofillSaveRequest(), + ) { canWrite, saveRequest -> + SettingIi( + search = SettingIi.Search( + group = "autofill", + tokens = listOf( + "autofill", + "save", + ), + ), + ) { + SettingAutofillSaveRequest( + checked = saveRequest, + onCheckedChange = onCheckedChange.takeIf { canWrite }, + ) + } + } +} + +@Composable +private fun SettingAutofillSaveRequest( + checked: Boolean, + onCheckedChange: ((Boolean) -> Unit)?, +) { + FlatItem( + trailing = { + Switch( + checked = checked, + enabled = onCheckedChange != null, + onCheckedChange = onCheckedChange, + ) + }, + title = { + Text( + text = stringResource(Res.strings.pref_item_autofill_save_request_title), + ) + }, + text = { + Text( + text = stringResource(Res.strings.pref_item_autofill_save_request_text), + ) + }, + onClick = onCheckedChange?.partially1(!checked), + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingAutofillSaveUri.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingAutofillSaveUri.kt new file mode 100644 index 00000000..046eb84d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingAutofillSaveUri.kt @@ -0,0 +1,81 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.material3.Switch +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import arrow.core.partially1 +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.usecase.GetAutofillSaveUri +import com.artemchep.keyguard.common.usecase.GetCanWrite +import com.artemchep.keyguard.common.usecase.PutAutofillSaveUri +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItem +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.flow.combine +import org.kodein.di.DirectDI +import org.kodein.di.instance + +fun settingAutofillSaveUriProvider( + directDI: DirectDI, +) = settingAutofillSaveUriProvider( + getCanWrite = directDI.instance(), + getAutofillSaveUri = directDI.instance(), + putAutofillSaveUri = directDI.instance(), + windowCoroutineScope = directDI.instance(), +) + +fun settingAutofillSaveUriProvider( + getCanWrite: GetCanWrite, + getAutofillSaveUri: GetAutofillSaveUri, + putAutofillSaveUri: PutAutofillSaveUri, + windowCoroutineScope: WindowCoroutineScope, +): SettingComponent = run { + val onCheckedChange = { shouldSaveRequest: Boolean -> + putAutofillSaveUri(shouldSaveRequest) + .launchIn(windowCoroutineScope) + Unit + } + + combine( + getCanWrite(), + getAutofillSaveUri(), + ) { canWrite, saveUri -> + SettingIi( + search = SettingIi.Search( + group = "autofill", + tokens = listOf( + "autofill", + "save", + ), + ), + ) { + SettingAutofillSaveUri( + checked = saveUri, + onCheckedChange = onCheckedChange.takeIf { canWrite }, + ) + } + } +} + +@Composable +private fun SettingAutofillSaveUri( + checked: Boolean, + onCheckedChange: ((Boolean) -> Unit)?, +) { + FlatItem( + trailing = { + Switch( + checked = checked, + enabled = onCheckedChange != null, + onCheckedChange = onCheckedChange, + ) + }, + title = { + Text( + text = stringResource(Res.strings.pref_item_autofill_auto_save_source_title), + ) + }, + onClick = onCheckedChange?.partially1(!checked), + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingBiometrics.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingBiometrics.kt new file mode 100644 index 00000000..823ef044 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingBiometrics.kt @@ -0,0 +1,134 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.foundation.layout.RowScope +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Fingerprint +import androidx.compose.material3.Switch +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import arrow.core.partially1 +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.io.map +import com.artemchep.keyguard.common.model.BiometricAuthPrompt +import com.artemchep.keyguard.common.model.BiometricStatus +import com.artemchep.keyguard.common.service.vault.FingerprintReadRepository +import com.artemchep.keyguard.common.usecase.BiometricStatusUseCase +import com.artemchep.keyguard.common.usecase.DisableBiometric +import com.artemchep.keyguard.common.usecase.EnableBiometric +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.common.util.flow.EventFlow +import com.artemchep.keyguard.feature.biometric.BiometricPromptEffect +import com.artemchep.keyguard.feature.localization.TextHolder +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItem +import com.artemchep.keyguard.ui.icons.icon +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.flatMapLatest +import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.flow.map +import org.kodein.di.DirectDI +import org.kodein.di.instance + +fun settingBiometricsProvider( + directDI: DirectDI, +) = settingBiometricsProvider( + fingerprintReadRepository = directDI.instance(), + biometricStatusUseCase = directDI.instance(), + enableBiometric = directDI.instance(), + disableBiometric = directDI.instance(), + windowCoroutineScope = directDI.instance(), +) + +fun settingBiometricsProvider( + fingerprintReadRepository: FingerprintReadRepository, + biometricStatusUseCase: BiometricStatusUseCase, + enableBiometric: EnableBiometric, + disableBiometric: DisableBiometric, + windowCoroutineScope: WindowCoroutineScope, +): SettingComponent = biometricStatusUseCase() + .map { it is BiometricStatus.Available } + .distinctUntilChanged() + .flatMapLatest { hasBiometrics -> + if (hasBiometrics) { + fingerprintReadRepository.get() + .map { tokens -> + val hasBiometricEnabled = tokens?.biometric != null + + SettingIi( + search = SettingIi.Search( + group = "biometric", + tokens = listOf( + "biometric", + ), + ), + ) { + val promptSink = remember { + EventFlow() + } + + SettingBiometrics( + checked = hasBiometricEnabled, + onCheckedChange = { shouldBeChecked -> + if (shouldBeChecked) { + enableBiometric(null) // use global session + .map { d -> + val cipher = d.getCipher() + val prompt = BiometricAuthPrompt( + title = TextHolder.Res(Res.strings.pref_item_biometric_unlock_confirm_title), + cipher = cipher, + onComplete = { result -> + result.fold( + ifLeft = { exception -> + val message = exception.message + // biometricPromptErrorSink.emit(message) + }, + ifRight = { + d.getCreateIo() + .launchIn(windowCoroutineScope) + }, + ) + }, + ) + promptSink.emit(prompt) + } + .launchIn(windowCoroutineScope) + } else { + disableBiometric() + .launchIn(windowCoroutineScope) + } + }, + ) + + BiometricPromptEffect(promptSink) + } + } + } else { + // hide option if the device does not have biometrics + flowOf(null) + } + } + +@Composable +private fun SettingBiometrics( + checked: Boolean, + onCheckedChange: ((Boolean) -> Unit)?, +) { + FlatItem( + leading = icon(Icons.Outlined.Fingerprint), + trailing = { + Switch( + checked = checked, + enabled = onCheckedChange != null, + onCheckedChange = onCheckedChange, + ) + }, + title = { + Text( + text = stringResource(Res.strings.pref_item_biometric_unlock_title), + ) + }, + onClick = onCheckedChange?.partially1(!checked), + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingCheckPwnedPasswords.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingCheckPwnedPasswords.kt new file mode 100644 index 00000000..f5a418c1 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingCheckPwnedPasswords.kt @@ -0,0 +1,65 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.material3.Switch +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import arrow.core.partially1 +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.usecase.GetCheckPwnedPasswords +import com.artemchep.keyguard.common.usecase.PutCheckPwnedPasswords +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.ui.FlatItem +import kotlinx.coroutines.flow.map +import org.kodein.di.DirectDI +import org.kodein.di.instance + +fun settingCheckPwnedPasswordsProvider( + directDI: DirectDI, +) = settingCheckPwnedPasswordsProvider( + getCheckPwnedPasswords = directDI.instance(), + putCheckPwnedPasswords = directDI.instance(), + windowCoroutineScope = directDI.instance(), +) + +fun settingCheckPwnedPasswordsProvider( + getCheckPwnedPasswords: GetCheckPwnedPasswords, + putCheckPwnedPasswords: PutCheckPwnedPasswords, + windowCoroutineScope: WindowCoroutineScope, +): SettingComponent = getCheckPwnedPasswords().map { checkPwnedPasswords -> + val onCheckedChange = { shouldCheckPwnedPasswords: Boolean -> + putCheckPwnedPasswords(shouldCheckPwnedPasswords) + .launchIn(windowCoroutineScope) + Unit + } + + SettingIi { + SettingCheckPwnedPasswords( + checked = checkPwnedPasswords, + onCheckedChange = onCheckedChange, + ) + } +} + +@Composable +private fun SettingCheckPwnedPasswords( + checked: Boolean, + onCheckedChange: ((Boolean) -> Unit)?, +) { + FlatItem( + trailing = { + Switch( + checked = checked, + enabled = onCheckedChange != null, + onCheckedChange = onCheckedChange, + ) + }, + title = { + Text("Check for vulnerable passwords") + }, + text = { + val text = "Check saved passwords for recent security breaches." + Text(text) + }, + onClick = onCheckedChange?.partially1(!checked), + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingCheckPwnedServices.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingCheckPwnedServices.kt new file mode 100644 index 00000000..00de2842 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingCheckPwnedServices.kt @@ -0,0 +1,65 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.material3.Switch +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import arrow.core.partially1 +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.usecase.GetCheckPwnedServices +import com.artemchep.keyguard.common.usecase.PutCheckPwnedServices +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.ui.FlatItem +import kotlinx.coroutines.flow.map +import org.kodein.di.DirectDI +import org.kodein.di.instance + +fun settingCheckPwnedServicesProvider( + directDI: DirectDI, +) = settingCheckPwnedServicesProvider( + getCheckPwnedServices = directDI.instance(), + putCheckPwnedServices = directDI.instance(), + windowCoroutineScope = directDI.instance(), +) + +fun settingCheckPwnedServicesProvider( + getCheckPwnedServices: GetCheckPwnedServices, + putCheckPwnedServices: PutCheckPwnedServices, + windowCoroutineScope: WindowCoroutineScope, +): SettingComponent = getCheckPwnedServices().map { checkPwnedServices -> + val onCheckedChange = { shouldCheckPwnedServices: Boolean -> + putCheckPwnedServices(shouldCheckPwnedServices) + .launchIn(windowCoroutineScope) + Unit + } + + SettingIi { + SettingCheckPwnedServices( + checked = checkPwnedServices, + onCheckedChange = onCheckedChange, + ) + } +} + +@Composable +private fun SettingCheckPwnedServices( + checked: Boolean, + onCheckedChange: ((Boolean) -> Unit)?, +) { + FlatItem( + trailing = { + Switch( + checked = checked, + enabled = onCheckedChange != null, + onCheckedChange = onCheckedChange, + ) + }, + title = { + Text("Check for compromised websites") + }, + text = { + val text = "Check saved websites for recent security breaches." + Text(text) + }, + onClick = onCheckedChange?.partially1(!checked), + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingCheckTwoFA.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingCheckTwoFA.kt new file mode 100644 index 00000000..f02706c0 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingCheckTwoFA.kt @@ -0,0 +1,65 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.material3.Switch +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import arrow.core.partially1 +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.usecase.GetCheckTwoFA +import com.artemchep.keyguard.common.usecase.PutCheckTwoFA +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.ui.FlatItem +import kotlinx.coroutines.flow.map +import org.kodein.di.DirectDI +import org.kodein.di.instance + +fun settingCheckTwoFAProvider( + directDI: DirectDI, +) = settingCheckTwoFAProvider( + getCheckTwoFA = directDI.instance(), + putCheckTwoFA = directDI.instance(), + windowCoroutineScope = directDI.instance(), +) + +fun settingCheckTwoFAProvider( + getCheckTwoFA: GetCheckTwoFA, + putCheckTwoFA: PutCheckTwoFA, + windowCoroutineScope: WindowCoroutineScope, +): SettingComponent = getCheckTwoFA().map { checkTwoFA -> + val onCheckedChange = { shouldCheckTwoFA: Boolean -> + putCheckTwoFA(shouldCheckTwoFA) + .launchIn(windowCoroutineScope) + Unit + } + + SettingIi { + SettingCheckTwoFA( + checked = checkTwoFA, + onCheckedChange = onCheckedChange, + ) + } +} + +@Composable +private fun SettingCheckTwoFA( + checked: Boolean, + onCheckedChange: ((Boolean) -> Unit)?, +) { + FlatItem( + trailing = { + Switch( + checked = checked, + enabled = onCheckedChange != null, + onCheckedChange = onCheckedChange, + ) + }, + title = { + Text("Check for two-factor authentication") + }, + text = { + val text = "Check for login items that support two-factor authentication." + Text(text) + }, + onClick = onCheckedChange?.partially1(!checked), + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingClearCache.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingClearCache.kt new file mode 100644 index 00000000..905619ce --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingClearCache.kt @@ -0,0 +1,64 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.foundation.layout.RowScope +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Cached +import androidx.compose.material.icons.outlined.Remove +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.io.parallel +import com.artemchep.keyguard.common.service.hibp.breaches.all.BreachesLocalDataSource +import com.artemchep.keyguard.common.service.hibp.passwords.PasswordPwnageDataSourceLocal +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.feature.home.vault.component.VaultViewButtonItem +import com.artemchep.keyguard.platform.util.isRelease +import com.artemchep.keyguard.ui.icons.icon +import kotlinx.coroutines.flow.flow +import org.kodein.di.DirectDI +import org.kodein.di.instance + +fun settingClearCache( + directDI: DirectDI, +) = settingClearCache( + breachesLocalDataSource = directDI.instance(), +// accountPwnageDataSourceLocal = directDI.instance(), + passwordPwnageDataSourceLocal = directDI.instance(), + windowCoroutineScope = directDI.instance(), +) + +fun settingClearCache( + breachesLocalDataSource: BreachesLocalDataSource, +// accountPwnageDataSourceLocal: AccountPwnageDataSourceLocal, + passwordPwnageDataSourceLocal: PasswordPwnageDataSourceLocal, + windowCoroutineScope: WindowCoroutineScope, +): SettingComponent = flow { + val component = if (!isRelease) { + SettingIi { + SettingClearCache( + onClick = { + listOf( + breachesLocalDataSource.clear(), +// accountPwnageDataSourceLocal.clear(), + passwordPwnageDataSourceLocal.clear(), + ) + .parallel(parallelism = 1) + .launchIn(windowCoroutineScope) + }, + ) + } + } else { + null + } + emit(component) +} + +@Composable +private fun SettingClearCache( + onClick: (() -> Unit), +) { + VaultViewButtonItem( + leading = icon(Icons.Outlined.Cached, Icons.Outlined.Remove), + text = "Clear cache", + onClick = onClick, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingClipboardAutoClear.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingClipboardAutoClear.kt new file mode 100644 index 00000000..46c8f83e --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingClipboardAutoClear.kt @@ -0,0 +1,103 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.foundation.layout.RowScope +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Clear +import androidx.compose.material.icons.outlined.ContentPaste +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.usecase.GetClipboardAutoClear +import com.artemchep.keyguard.common.usecase.GetClipboardAutoClearVariants +import com.artemchep.keyguard.common.usecase.PutClipboardAutoClear +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.feature.localization.textResource +import com.artemchep.keyguard.platform.LeContext +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatDropdown +import com.artemchep.keyguard.ui.FlatItemAction +import com.artemchep.keyguard.ui.FlatItemTextContent +import com.artemchep.keyguard.ui.icons.icon +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.flow.combine +import org.kodein.di.DirectDI +import org.kodein.di.instance +import kotlin.time.Duration + +fun settingClipboardAutoClearProvider( + directDI: DirectDI, +) = settingClipboardAutoClearProvider( + getClipboardAutoClear = directDI.instance(), + getClipboardAutoClearVariants = directDI.instance(), + putClipboardAutoClear = directDI.instance(), + windowCoroutineScope = directDI.instance(), + context = directDI.instance(), +) + +fun settingClipboardAutoClearProvider( + getClipboardAutoClear: GetClipboardAutoClear, + getClipboardAutoClearVariants: GetClipboardAutoClearVariants, + putClipboardAutoClear: PutClipboardAutoClear, + windowCoroutineScope: WindowCoroutineScope, + context: LeContext, +): SettingComponent = combine( + getClipboardAutoClear(), + getClipboardAutoClearVariants(), +) { timeout, variants -> + val text = getAutoClearDurationTitle(timeout, context) + val dropdown = variants + .map { duration -> + val title = getAutoClearDurationTitle(duration, context) + FlatItemAction( + title = title, + onClick = { + putClipboardAutoClear(duration) + .launchIn(windowCoroutineScope) + }, + ) + } + + SettingIi { + SettingClipboardAutoClear( + text = text, + dropdown = dropdown, + ) + } +} + +private fun getAutoClearDurationTitle(duration: Duration, context: LeContext) = when (duration) { + Duration.ZERO -> textResource( + Res.strings.pref_item_clipboard_auto_clear_immediately_text, + context, + ) + + Duration.INFINITE -> textResource( + Res.strings.pref_item_clipboard_auto_clear_never_text, + context, + ) + + else -> duration.toString() +} + +@Composable +private fun SettingClipboardAutoClear( + text: String, + dropdown: List, +) { + FlatDropdown( + leading = icon(Icons.Outlined.ContentPaste, Icons.Outlined.Clear), + dropdown = dropdown, + content = { + FlatItemTextContent( + title = { + Text( + text = stringResource(Res.strings.pref_item_clipboard_auto_clear_title), + ) + }, + text = { + Text(text) + }, + ) + }, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingClipboardAutoRefresh.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingClipboardAutoRefresh.kt new file mode 100644 index 00000000..315dff9b --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingClipboardAutoRefresh.kt @@ -0,0 +1,116 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.foundation.layout.RowScope +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.height +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Notifications +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.usecase.GetClipboardAutoRefresh +import com.artemchep.keyguard.common.usecase.GetClipboardAutoRefreshVariants +import com.artemchep.keyguard.common.usecase.PutClipboardAutoRefresh +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.feature.localization.textResource +import com.artemchep.keyguard.platform.LeContext +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatDropdown +import com.artemchep.keyguard.ui.FlatItemAction +import com.artemchep.keyguard.ui.FlatItemTextContent +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.icons.KeyguardTwoFa +import com.artemchep.keyguard.ui.icons.icon +import com.artemchep.keyguard.ui.theme.combineAlpha +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.flow.combine +import org.kodein.di.DirectDI +import org.kodein.di.instance +import kotlin.time.Duration + +fun settingClipboardAutoRefreshProvider( + directDI: DirectDI, +) = settingClipboardAutoRefreshProvider( + getClipboardAutoRefresh = directDI.instance(), + getClipboardAutoRefreshVariants = directDI.instance(), + putClipboardAutoRefresh = directDI.instance(), + windowCoroutineScope = directDI.instance(), + context = directDI.instance(), +) + +fun settingClipboardAutoRefreshProvider( + getClipboardAutoRefresh: GetClipboardAutoRefresh, + getClipboardAutoRefreshVariants: GetClipboardAutoRefreshVariants, + putClipboardAutoRefresh: PutClipboardAutoRefresh, + windowCoroutineScope: WindowCoroutineScope, + context: LeContext, +): SettingComponent = combine( + getClipboardAutoRefresh(), + getClipboardAutoRefreshVariants(), +) { timeout, variants -> + val text = getAutoRefreshDurationTitle(timeout, context) + val dropdown = variants + .map { duration -> + val title = getAutoRefreshDurationTitle(duration, context) + FlatItemAction( + title = title, + onClick = { + putClipboardAutoRefresh(duration) + .launchIn(windowCoroutineScope) + }, + ) + } + + SettingIi { + SettingClipboardAutoRefresh( + text = text, + dropdown = dropdown, + ) + } +} + +private fun getAutoRefreshDurationTitle(duration: Duration, context: LeContext) = when (duration) { + Duration.ZERO -> textResource( + Res.strings.pref_item_clipboard_auto_refresh_otp_duration_never_text, + context, + ) + + else -> duration.toString() +} + +@Composable +private fun SettingClipboardAutoRefresh( + text: String, + dropdown: List, +) { + FlatDropdown( + leading = icon(Icons.Outlined.KeyguardTwoFa, Icons.Outlined.Notifications), + content = { + FlatItemTextContent( + title = { + Text( + text = stringResource(Res.strings.pref_item_clipboard_auto_refresh_otp_duration_title), + ) + }, + text = { + Text(text) + Spacer( + modifier = Modifier + .height(8.dp), + ) + Text( + color = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + style = MaterialTheme.typography.bodySmall, + text = stringResource(Res.strings.pref_item_clipboard_auto_refresh_otp_duration_note), + ) + }, + ) + }, + dropdown = dropdown, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingColorAccent.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingColorAccent.kt new file mode 100644 index 00000000..e6476733 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingColorAccent.kt @@ -0,0 +1,131 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.RowScope +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.FormatColorFill +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.model.AppColors +import com.artemchep.keyguard.common.usecase.GetColors +import com.artemchep.keyguard.common.usecase.GetColorsVariants +import com.artemchep.keyguard.common.usecase.PutColors +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.feature.localization.textResource +import com.artemchep.keyguard.platform.LeContext +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatDropdown +import com.artemchep.keyguard.ui.FlatItemAction +import com.artemchep.keyguard.ui.FlatItemTextContent +import com.artemchep.keyguard.ui.composable +import com.artemchep.keyguard.ui.icons.icon +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.flow.combine +import org.kodein.di.DirectDI +import org.kodein.di.instance + +fun settingColorAccentProvider( + directDI: DirectDI, +) = settingColorAccentProvider( + getColors = directDI.instance(), + getColorsVariants = directDI.instance(), + putColors = directDI.instance(), + windowCoroutineScope = directDI.instance(), + context = directDI.instance(), +) + +fun settingColorAccentProvider( + getColors: GetColors, + getColorsVariants: GetColorsVariants, + putColors: PutColors, + windowCoroutineScope: WindowCoroutineScope, + context: LeContext, +): SettingComponent = combine( + getColors(), + getColorsVariants(), +) { colors, variants -> + val text = getAppColorsTitle(colors, context) + val dropdown = variants + .map { colorsVariant -> + val actionTitle = getAppColorsTitle(colorsVariant, context) + FlatItemAction( + title = actionTitle, + onClick = { + putColors(colorsVariant) + .launchIn(windowCoroutineScope) + }, + trailing = if (colorsVariant != null) { + composable { + val accentColor = Color(colorsVariant.color) + Box( + Modifier + .background(accentColor, CircleShape) + .size(24.dp), + ) + } + } else { + null + }, + ) + } + + SettingIi( + search = SettingIi.Search( + group = "color_scheme", + tokens = listOf( + "schema", + "color", + "accent", + "theme", + ), + ), + ) { + SettingFont( + text = text, + dropdown = dropdown, + ) + } +} + +private fun getAppColorsTitle(appColors: AppColors?, context: LeContext) = when (appColors) { + null -> textResource(Res.strings.follow_system_settings, context) + else -> appColors.title +} + +@Composable +private fun SettingFont( + text: String, + dropdown: List, +) { + FlatDropdown( + leading = icon(Icons.Outlined.FormatColorFill), + content = { + FlatItemTextContent( + title = { + Text( + text = stringResource(Res.strings.pref_item_color_accent_title), + ) + }, + text = { + Text(text) + }, + ) + }, + trailing = { + Box( + Modifier + .background(MaterialTheme.colorScheme.primary, CircleShape) + .size(24.dp), + ) + }, + dropdown = dropdown, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingColorScheme.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingColorScheme.kt new file mode 100644 index 00000000..04fd4b22 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingColorScheme.kt @@ -0,0 +1,105 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.foundation.layout.RowScope +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.ColorLens +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.model.AppTheme +import com.artemchep.keyguard.common.usecase.GetTheme +import com.artemchep.keyguard.common.usecase.GetThemeVariants +import com.artemchep.keyguard.common.usecase.PutTheme +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.feature.localization.textResource +import com.artemchep.keyguard.platform.LeContext +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatDropdown +import com.artemchep.keyguard.ui.FlatItemAction +import com.artemchep.keyguard.ui.FlatItemTextContent +import com.artemchep.keyguard.ui.icons.icon +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.flow.combine +import org.kodein.di.DirectDI +import org.kodein.di.instance + +fun settingColorSchemeProvider( + directDI: DirectDI, +) = settingColorSchemeProvider( + getTheme = directDI.instance(), + getThemeVariants = directDI.instance(), + putTheme = directDI.instance(), + windowCoroutineScope = directDI.instance(), + context = directDI.instance(), +) + +fun settingColorSchemeProvider( + getTheme: GetTheme, + getThemeVariants: GetThemeVariants, + putTheme: PutTheme, + windowCoroutineScope: WindowCoroutineScope, + context: LeContext, +): SettingComponent = combine( + getTheme(), + getThemeVariants(), +) { theme, variants -> + val text = getAppThemeTitle(theme, context) + val dropdown = variants + .map { themeVariant -> + val actionTitle = getAppThemeTitle(themeVariant, context) + FlatItemAction( + title = actionTitle, + onClick = { + putTheme(themeVariant) + .launchIn(windowCoroutineScope) + }, + ) + } + + SettingIi( + search = SettingIi.Search( + group = "color_scheme", + tokens = listOf( + "schema", + "color", + "theme", + "dark", + "light", + ), + ), + ) { + SettingFont( + text = text, + dropdown = dropdown, + ) + } +} + +private fun getAppThemeTitle(appTheme: AppTheme?, context: LeContext) = when (appTheme) { + null -> textResource(Res.strings.follow_system_settings, context) + AppTheme.DARK -> textResource(Res.strings.theme_dark, context) + AppTheme.LIGHT -> textResource(Res.strings.theme_light, context) +} + +@Composable +private fun SettingFont( + text: String, + dropdown: List, +) { + FlatDropdown( + leading = icon(Icons.Outlined.ColorLens), + content = { + FlatItemTextContent( + title = { + Text( + text = stringResource(Res.strings.pref_item_color_scheme_title), + ) + }, + text = { + Text(text) + }, + ) + }, + dropdown = dropdown, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingComponent.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingComponent.kt new file mode 100644 index 00000000..97259bcf --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingComponent.kt @@ -0,0 +1,40 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.platform.Platform +import com.artemchep.keyguard.ui.FlatItem +import kotlinx.coroutines.flow.Flow + +typealias SettingComponent = Flow + +data class SettingIi( + val platform: Platform? = null, + val search: Search? = null, + val content: @Composable () -> Unit, +) { + data class Search( + val group: String, + val tokens: List, + ) +} + +@Composable +fun SettingListItem( + title: String, + text: String? = null, +) { + FlatItem( + title = { + Text(title) + }, + text = if (text != null) { + // composable + { + Text(text) + } + } else { + null + }, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingConcealedFields.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingConcealedFields.kt new file mode 100644 index 00000000..09714780 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingConcealedFields.kt @@ -0,0 +1,89 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.animation.Crossfade +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Visibility +import androidx.compose.material.icons.outlined.VisibilityOff +import androidx.compose.material3.Switch +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import arrow.core.partially1 +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.usecase.GetConcealFields +import com.artemchep.keyguard.common.usecase.PutConcealFields +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItem +import com.artemchep.keyguard.ui.icons.IconBox +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.flow.map +import org.kodein.di.DirectDI +import org.kodein.di.instance + +fun settingConcealFieldsProvider( + directDI: DirectDI, +) = settingConcealFieldsProvider( + getConcealFields = directDI.instance(), + putConcealFields = directDI.instance(), + windowCoroutineScope = directDI.instance(), +) + +fun settingConcealFieldsProvider( + getConcealFields: GetConcealFields, + putConcealFields: PutConcealFields, + windowCoroutineScope: WindowCoroutineScope, +): SettingComponent = getConcealFields().map { concealFields -> + val onCheckedChange = { shouldConcealFields: Boolean -> + putConcealFields(shouldConcealFields) + .launchIn(windowCoroutineScope) + Unit + } + + SettingIi( + search = SettingIi.Search( + group = "conceal", + tokens = listOf( + "conceal", + ), + ), + ) { + SettingScreenshotsFields( + checked = concealFields, + onCheckedChange = onCheckedChange, + ) + } +} + +@Composable +private fun SettingScreenshotsFields( + checked: Boolean, + onCheckedChange: ((Boolean) -> Unit)?, +) { + FlatItem( + leading = { + Crossfade(targetState = checked) { + val imageVector = + if (it) Icons.Outlined.VisibilityOff else Icons.Outlined.Visibility + IconBox(imageVector) + } + }, + trailing = { + Switch( + checked = checked, + enabled = onCheckedChange != null, + onCheckedChange = onCheckedChange, + ) + }, + title = { + Text( + text = stringResource(Res.strings.pref_item_conceal_fields_title), + ) + }, + text = { + Text( + text = stringResource(Res.strings.pref_item_conceal_fields_text), + ) + }, + onClick = onCheckedChange?.partially1(!checked), + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingCrash.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingCrash.kt new file mode 100644 index 00000000..27cff409 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingCrash.kt @@ -0,0 +1,36 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.foundation.layout.RowScope +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.BugReport +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.home.vault.component.VaultViewButtonItem +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.icons.icon +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.flow.flowOf +import org.kodein.di.DirectDI + +fun settingCrashProvider( + directDI: DirectDI, +): SettingComponent = run { + val item = SettingIi { + SettingCrash( + onClick = { + throw RuntimeException("Test crash.") + }, + ) + } + flowOf(item) +} + +@Composable +private fun SettingCrash( + onClick: () -> Unit, +) { + VaultViewButtonItem( + leading = icon(Icons.Outlined.BugReport), + text = stringResource(Res.strings.pref_item_crash_title), + onClick = onClick, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingCrashlytics.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingCrashlytics.kt new file mode 100644 index 00000000..cd88dcc8 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingCrashlytics.kt @@ -0,0 +1,82 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.BugReport +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.LocalMinimumInteractiveComponentEnforcement +import androidx.compose.material3.Switch +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import arrow.core.partially1 +import com.artemchep.keyguard.platform.crashlyticsIsEnabledFlow +import com.artemchep.keyguard.platform.crashlyticsSetEnabled +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.ExpandedIfNotEmptyForRow +import com.artemchep.keyguard.ui.FlatItem +import com.artemchep.keyguard.ui.icons.IconBox +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.flow.map +import org.kodein.di.DirectDI + +fun settingCrashlyticsProvider( + directDI: DirectDI, +): SettingComponent = run { + crashlyticsIsEnabledFlow() + .map { checked -> + val onCheckedChange = { shouldCheck: Boolean -> + crashlyticsSetEnabled(shouldCheck) + } + + SettingIi( + search = SettingIi.Search( + group = "analytics", + tokens = listOf( + "crash", + "report", + "analytics", + ), + ), + ) { + SettingCrashlytics( + checked = checked, + onCheckedChange = onCheckedChange, + ) + } + } +} + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +private fun SettingCrashlytics( + checked: Boolean?, + onCheckedChange: ((Boolean) -> Unit)?, +) { + FlatItem( + leading = { + val imageVector = Icons.Outlined.BugReport + IconBox(imageVector) + }, + trailing = { + ExpandedIfNotEmptyForRow( + valueOrNull = checked, + ) { + CompositionLocalProvider( + LocalMinimumInteractiveComponentEnforcement provides false, + ) { + Switch( + checked = it, + enabled = onCheckedChange != null, + onCheckedChange = onCheckedChange, + ) + } + } + }, + title = { + Text( + text = stringResource(Res.strings.pref_item_send_crash_reports_title), + ) + }, + onClick = onCheckedChange?.partially1(checked != true), + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingCredentialProvider.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingCredentialProvider.kt new file mode 100644 index 00000000..b6d8a163 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingCredentialProvider.kt @@ -0,0 +1,7 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import org.kodein.di.DirectDI + +expect fun settingCredentialProviderProvider( + directDI: DirectDI, +): SettingComponent diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingDataSafety.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingDataSafety.kt new file mode 100644 index 00000000..9ababec6 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingDataSafety.kt @@ -0,0 +1,65 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.foundation.layout.RowScope +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.PrivacyTip +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberUpdatedState +import com.artemchep.keyguard.feature.datasafety.DataSafetyRoute +import com.artemchep.keyguard.feature.navigation.LocalNavigationController +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItem +import com.artemchep.keyguard.ui.icons.ChevronIcon +import com.artemchep.keyguard.ui.icons.icon +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.flow.flowOf +import org.kodein.di.DirectDI + +fun settingDataSafetyProvider( + directDI: DirectDI, +) = settingDataSafetyProvider() + +fun settingDataSafetyProvider(): SettingComponent = kotlin.run { + val item = SettingIi( + search = SettingIi.Search( + group = "about", + tokens = listOf( + "safety", + "data", + "how", + ), + ), + ) { + val navigationController by rememberUpdatedState(LocalNavigationController.current) + SettingPermissionDetails( + onClick = { + val intent = NavigationIntent.NavigateToRoute( + route = DataSafetyRoute, + ) + navigationController.queue(intent) + }, + ) + } + flowOf(item) +} + +@Composable +private fun SettingPermissionDetails( + onClick: (() -> Unit)?, +) { + FlatItem( + leading = icon(Icons.Outlined.PrivacyTip), + trailing = { + ChevronIcon() + }, + title = { + Text( + text = stringResource(Res.strings.pref_item_data_safety_title), + ) + }, + onClick = onClick, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingEmitMessage.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingEmitMessage.kt new file mode 100644 index 00000000..3dd9e75f --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingEmitMessage.kt @@ -0,0 +1,52 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.foundation.layout.RowScope +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Message +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.common.model.ToastMessage +import com.artemchep.keyguard.common.usecase.ShowMessage +import com.artemchep.keyguard.feature.home.vault.component.VaultViewButtonItem +import com.artemchep.keyguard.ui.icons.icon +import kotlinx.coroutines.flow.flowOf +import org.kodein.di.DirectDI +import org.kodein.di.instance +import java.util.UUID + +fun settingEmitMessageProvider( + directDI: DirectDI, +) = settingEmitMessageProvider( + showMessage = directDI.instance(), +) + +fun settingEmitMessageProvider( + showMessage: ShowMessage, +): SettingComponent = kotlin.run { + val item = SettingIi { + SettingEmitMessage( + onClick = { + val type = ToastMessage.Type.entries + .toTypedArray() + .random() + val model = ToastMessage( + title = "Test message", + type = type, + text = UUID.randomUUID().toString(), + ) + showMessage.copy(model) + }, + ) + } + flowOf(item) +} + +@Composable +fun SettingEmitMessage( + onClick: () -> Unit, +) { + VaultViewButtonItem( + leading = icon(Icons.Outlined.Message), + text = "Emit message", + onClick = onClick, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingExperimental.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingExperimental.kt new file mode 100644 index 00000000..ec84d5e0 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingExperimental.kt @@ -0,0 +1,56 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.foundation.layout.RowScope +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Biotech +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberUpdatedState +import com.artemchep.keyguard.feature.home.settings.experimental.ExperimentalSettingsRoute +import com.artemchep.keyguard.feature.navigation.LocalNavigationController +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItem +import com.artemchep.keyguard.ui.icons.ChevronIcon +import com.artemchep.keyguard.ui.icons.icon +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.flow.flowOf +import org.kodein.di.DirectDI + +fun settingExperimentalProvider( + directDI: DirectDI, +) = settingExperimentalProvider() + +fun settingExperimentalProvider(): SettingComponent = kotlin.run { + val item = SettingIi { + val navigationController by rememberUpdatedState(LocalNavigationController.current) + SettingExperimental( + onClick = { + val intent = NavigationIntent.NavigateToRoute( + route = ExperimentalSettingsRoute, + ) + navigationController.queue(intent) + }, + ) + } + flowOf(item) +} + +@Composable +private fun SettingExperimental( + onClick: (() -> Unit)?, +) { + FlatItem( + leading = icon(Icons.Outlined.Biotech), + trailing = { + ChevronIcon() + }, + title = { + Text( + text = stringResource(Res.strings.pref_item_experimental_title), + ) + }, + onClick = onClick, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingFeaturesOverview.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingFeaturesOverview.kt new file mode 100644 index 00000000..99afdd2f --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingFeaturesOverview.kt @@ -0,0 +1,66 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.foundation.layout.RowScope +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Functions +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberUpdatedState +import com.artemchep.keyguard.feature.navigation.LocalNavigationController +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.feature.onboarding.OnboardingRoute +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItem +import com.artemchep.keyguard.ui.icons.ChevronIcon +import com.artemchep.keyguard.ui.icons.icon +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.flow.flowOf +import org.kodein.di.DirectDI + +fun settingFeaturesOverviewProvider( + directDI: DirectDI, +) = settingFeaturesOverviewProvider() + +fun settingFeaturesOverviewProvider(): SettingComponent = kotlin.run { + val item = SettingIi( + search = SettingIi.Search( + group = "about", + tokens = listOf( + "features", + "introduction", + "onboarding", + "overview", + ), + ), + ) { + val navigationController by rememberUpdatedState(LocalNavigationController.current) + SettingFeaturesOverview( + onClick = { + val intent = NavigationIntent.NavigateToRoute( + route = OnboardingRoute, + ) + navigationController.queue(intent) + }, + ) + } + flowOf(item) +} + +@Composable +private fun SettingFeaturesOverview( + onClick: (() -> Unit)?, +) { + FlatItem( + leading = icon(Icons.Outlined.Functions), + trailing = { + ChevronIcon() + }, + title = { + Text( + text = stringResource(Res.strings.pref_item_features_overview_title), + ) + }, + onClick = onClick, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingFeedbackApp.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingFeedbackApp.kt new file mode 100644 index 00000000..8f60d396 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingFeedbackApp.kt @@ -0,0 +1,67 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.foundation.layout.RowScope +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Feedback +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberUpdatedState +import com.artemchep.keyguard.feature.feedback.FeedbackRoute +import com.artemchep.keyguard.feature.navigation.LocalNavigationController +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItem +import com.artemchep.keyguard.ui.icons.ChevronIcon +import com.artemchep.keyguard.ui.icons.icon +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.flow.flowOf +import org.kodein.di.DirectDI + +fun settingFeedbackAppProvider( + directDI: DirectDI, +) = settingFeedbackAppProvider() + +fun settingFeedbackAppProvider(): SettingComponent = kotlin.run { + val item = SettingIi( + search = SettingIi.Search( + group = "about", + tokens = listOf( + "contact", + "feedback", + "report", + "issue", + "bug", + ), + ), + ) { + val navigationController by rememberUpdatedState(LocalNavigationController.current) + SettingFeedbackAppItem( + onClick = { + val intent = NavigationIntent.NavigateToRoute( + route = FeedbackRoute, + ) + navigationController.queue(intent) + }, + ) + } + flowOf(item) +} + +@Composable +fun SettingFeedbackAppItem( + onClick: (() -> Unit)?, +) { + FlatItem( + leading = icon(Icons.Outlined.Feedback), + trailing = { + ChevronIcon() + }, + title = { + Text( + text = stringResource(Res.strings.pref_item_contact_us_title), + ) + }, + onClick = onClick, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingFont.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingFont.kt new file mode 100644 index 00000000..47e752af --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingFont.kt @@ -0,0 +1,115 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.foundation.layout.RowScope +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.FontDownload +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.model.AppFont +import com.artemchep.keyguard.common.usecase.GetFont +import com.artemchep.keyguard.common.usecase.GetFontVariants +import com.artemchep.keyguard.common.usecase.PutFont +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.feature.localization.textResource +import com.artemchep.keyguard.platform.LeContext +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatDropdown +import com.artemchep.keyguard.ui.FlatItemAction +import com.artemchep.keyguard.ui.FlatItemTextContent +import com.artemchep.keyguard.ui.icons.icon +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.flow.combine +import org.kodein.di.DirectDI +import org.kodein.di.instance + +fun settingFontProvider( + directDI: DirectDI, +) = settingFontProvider( + getFont = directDI.instance(), + getFontVariants = directDI.instance(), + putFont = directDI.instance(), + windowCoroutineScope = directDI.instance(), + context = directDI.instance(), +) + +fun settingFontProvider( + getFont: GetFont, + getFontVariants: GetFontVariants, + putFont: PutFont, + windowCoroutineScope: WindowCoroutineScope, + context: LeContext, +): SettingComponent = combine( + getFont(), + getFontVariants(), +) { font, variants -> + val text = getAppFontTitle(font, context) + val dropdown = variants + .map { fontVariant -> + val actionTitle = getAppFontTitle(fontVariant, context) + val actionText = getAppFontText(fontVariant, context) + FlatItemAction( + title = actionTitle, + text = actionText, + onClick = { + putFont(fontVariant) + .launchIn(windowCoroutineScope) + }, + ) + } + + SettingIi( + search = SettingIi.Search( + group = "font", + tokens = listOf( + "font", + "family", + ), + ), + ) { + SettingFont( + text = text, + dropdown = dropdown, + ) + } +} + +private fun getAppFontTitle(appFont: AppFont?, context: LeContext) = when (appFont) { + null -> textResource(Res.strings.follow_system_settings, context) + AppFont.ROBOTO -> "Roboto" + AppFont.NOTO -> "Noto" + AppFont.ATKINSON_HYPERLEGIBLE -> "Atkinson Hyperlegible" +} + +private fun getAppFontText(appFont: AppFont?, context: LeContext) = when (appFont) { + null -> null + AppFont.ROBOTO -> null + AppFont.NOTO -> null + AppFont.ATKINSON_HYPERLEGIBLE -> textResource( + Res.strings.font_atkinson_hyperlegible_text, + context, + ) +} + +@Composable +private fun SettingFont( + text: String, + dropdown: List, +) { + FlatDropdown( + leading = icon(Icons.Outlined.FontDownload), + content = { + FlatItemTextContent( + title = { + Text( + text = stringResource(Res.strings.pref_item_font_title), + ) + }, + text = { + Text(text) + }, + ) + }, + dropdown = dropdown, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingGitHub.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingGitHub.kt new file mode 100644 index 00000000..1ea00a1c --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingGitHub.kt @@ -0,0 +1,66 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.foundation.layout.RowScope +import androidx.compose.material.icons.Icons +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberUpdatedState +import com.artemchep.keyguard.feature.navigation.LocalNavigationController +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItem +import com.artemchep.keyguard.ui.icons.ChevronIcon +import com.artemchep.keyguard.ui.icons.KeyguardWebsite +import com.artemchep.keyguard.ui.icons.icon +import compose.icons.FeatherIcons +import compose.icons.feathericons.Github +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.flow.flowOf +import org.kodein.di.DirectDI + +fun settingGitHubProvider( + directDI: DirectDI, +): SettingComponent = settingGitHubProvider() + +fun settingGitHubProvider(): SettingComponent = kotlin.run { + val item = SettingIi( + search = SettingIi.Search( + group = "about", + tokens = listOf( + "code", + "github", + "open", + ), + ), + ) { + val navigationController by rememberUpdatedState(LocalNavigationController.current) + SettingGitHub( + onClick = { + val intent = NavigationIntent.NavigateToBrowser( + url = "https://github.com/AChep/keyguard-app/", + ) + navigationController.queue(intent) + }, + ) + } + flowOf(item) +} + +@Composable +private fun SettingGitHub( + onClick: (() -> Unit)?, +) { + FlatItem( + leading = icon(FeatherIcons.Github, Icons.Outlined.KeyguardWebsite), + trailing = { + ChevronIcon() + }, + title = { + Text( + text = stringResource(Res.strings.pref_item_github_title), + ) + }, + onClick = onClick, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingKeepScreenOn.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingKeepScreenOn.kt new file mode 100644 index 00000000..c7c1dae6 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingKeepScreenOn.kt @@ -0,0 +1,74 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.material3.Switch +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import arrow.core.partially1 +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.usecase.GetKeepScreenOn +import com.artemchep.keyguard.common.usecase.PutKeepScreenOn +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItem +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.flow.map +import org.kodein.di.DirectDI +import org.kodein.di.instance + +fun settingKeepScreenOnProvider( + directDI: DirectDI, +) = settingKeepScreenOnProvider( + getKeepScreenOn = directDI.instance(), + putKeepScreenOn = directDI.instance(), + windowCoroutineScope = directDI.instance(), +) + +fun settingKeepScreenOnProvider( + getKeepScreenOn: GetKeepScreenOn, + putKeepScreenOn: PutKeepScreenOn, + windowCoroutineScope: WindowCoroutineScope, +): SettingComponent = getKeepScreenOn().map { keepScreenOn -> + val onCheckedChange = { shouldKeepScreenOn: Boolean -> + putKeepScreenOn(shouldKeepScreenOn) + .launchIn(windowCoroutineScope) + Unit + } + + SettingIi( + search = SettingIi.Search( + group = "ui", + tokens = listOf( + "screen", + "on", + "keep", + ), + ), + ) { + SettingKeepScreenOn( + checked = keepScreenOn, + onCheckedChange = onCheckedChange, + ) + } +} + +@Composable +private fun SettingKeepScreenOn( + checked: Boolean, + onCheckedChange: ((Boolean) -> Unit)?, +) { + FlatItem( + trailing = { + Switch( + checked = checked, + enabled = onCheckedChange != null, + onCheckedChange = onCheckedChange, + ) + }, + title = { + Text( + text = stringResource(Res.strings.pref_item_keep_screen_on_title), + ) + }, + onClick = onCheckedChange?.partially1(!checked), + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingLaunchAppPicker.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingLaunchAppPicker.kt new file mode 100644 index 00000000..47d41d28 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingLaunchAppPicker.kt @@ -0,0 +1,69 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.foundation.layout.RowScope +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Apps +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberUpdatedState +import com.artemchep.keyguard.common.model.ToastMessage +import com.artemchep.keyguard.common.usecase.ShowMessage +import com.artemchep.keyguard.feature.apppicker.AppPickerResult +import com.artemchep.keyguard.feature.apppicker.AppPickerRoute +import com.artemchep.keyguard.feature.home.vault.component.VaultViewButtonItem +import com.artemchep.keyguard.feature.navigation.LocalNavigationController +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.feature.navigation.registerRouteResultReceiver +import com.artemchep.keyguard.platform.util.isRelease +import com.artemchep.keyguard.ui.icons.icon +import kotlinx.coroutines.flow.flow +import org.kodein.di.DirectDI +import org.kodein.di.instance +import java.util.UUID + +fun settingLaunchAppPicker( + directDI: DirectDI, +) = settingLaunchAppPicker( + showMessage = directDI.instance(), +) + +fun settingLaunchAppPicker( + showMessage: ShowMessage, +): SettingComponent = flow { + val component = if (!isRelease) { + SettingIi { + val navigationController by rememberUpdatedState(LocalNavigationController.current) + SettingLaunchYubiKey( + onClick = { + val route = registerRouteResultReceiver(AppPickerRoute) { result -> + if (result is AppPickerResult.Confirm) { + val model = ToastMessage( + title = result.uri, + text = UUID.randomUUID().toString(), + ) + showMessage.copy(model) + } + } + val intent = NavigationIntent.NavigateToRoute( + route = route, + ) + navigationController.queue(intent) + }, + ) + } + } else { + null + } + emit(component) +} + +@Composable +private fun SettingLaunchYubiKey( + onClick: (() -> Unit), +) { + VaultViewButtonItem( + leading = icon(Icons.Outlined.Apps), + text = "App Picker", + onClick = onClick, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingLaunchYubiKey.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingLaunchYubiKey.kt new file mode 100644 index 00000000..6d224262 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingLaunchYubiKey.kt @@ -0,0 +1,50 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.foundation.layout.RowScope +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Key +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberUpdatedState +import com.artemchep.keyguard.feature.home.vault.component.VaultViewButtonItem +import com.artemchep.keyguard.feature.navigation.LocalNavigationController +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.feature.yubikey.YubiRoute +import com.artemchep.keyguard.platform.util.isRelease +import com.artemchep.keyguard.ui.icons.icon +import kotlinx.coroutines.flow.flow +import org.kodein.di.DirectDI + +fun settingLaunchYubiKey( + directDI: DirectDI, +) = settingLaunchYubiKey() + +fun settingLaunchYubiKey(): SettingComponent = flow { + val component = if (!isRelease) { + SettingIi { + val navigationController by rememberUpdatedState(LocalNavigationController.current) + SettingLaunchYubiKey( + onClick = { + val intent = NavigationIntent.NavigateToRoute( + route = YubiRoute, + ) + navigationController.queue(intent) + }, + ) + } + } else { + null + } + emit(component) +} + +@Composable +private fun SettingLaunchYubiKey( + onClick: (() -> Unit), +) { + VaultViewButtonItem( + leading = icon(Icons.Outlined.Key), + text = "YubiKey", + onClick = onClick, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingLocalization.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingLocalization.kt new file mode 100644 index 00000000..3d101101 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingLocalization.kt @@ -0,0 +1,66 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.foundation.layout.RowScope +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Translate +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberUpdatedState +import com.artemchep.keyguard.feature.navigation.LocalNavigationController +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItem +import com.artemchep.keyguard.ui.icons.ChevronIcon +import com.artemchep.keyguard.ui.icons.KeyguardWebsite +import com.artemchep.keyguard.ui.icons.icon +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.flow.flowOf +import org.kodein.di.DirectDI + +fun settingLocalizationProvider( + directDI: DirectDI, +): SettingComponent = settingLocalizationProvider() + +fun settingLocalizationProvider(): SettingComponent = kotlin.run { + val item = SettingIi( + search = SettingIi.Search( + group = "about", + tokens = listOf( + "localization", + "language", + "translate", + "crowdin", + ), + ), + ) { + val navigationController by rememberUpdatedState(LocalNavigationController.current) + SettingLocalization( + onClick = { + val intent = NavigationIntent.NavigateToBrowser( + url = "https://crowdin.com/project/keyguard", + ) + navigationController.queue(intent) + }, + ) + } + flowOf(item) +} + +@Composable +private fun SettingLocalization( + onClick: (() -> Unit)?, +) { + FlatItem( + leading = icon(Icons.Outlined.Translate, Icons.Outlined.KeyguardWebsite), + trailing = { + ChevronIcon() + }, + title = { + Text( + text = stringResource(Res.strings.pref_item_crowdin_title), + ) + }, + onClick = onClick, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingMarkdown.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingMarkdown.kt new file mode 100644 index 00000000..8bae8aa9 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingMarkdown.kt @@ -0,0 +1,120 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.RowScope +import androidx.compose.foundation.layout.padding +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.TextFormat +import androidx.compose.material3.Switch +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import arrow.core.partially1 +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.usecase.GetMarkdown +import com.artemchep.keyguard.common.usecase.PutMarkdown +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.feature.navigation.LocalNavigationController +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItemLayout +import com.artemchep.keyguard.ui.FlatItemTextContent +import com.artemchep.keyguard.ui.icons.icon +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.flow.map +import org.kodein.di.DirectDI +import org.kodein.di.instance + +fun settingMarkdownProvider( + directDI: DirectDI, +) = settingMarkdownProvider( + getMarkdown = directDI.instance(), + putMarkdown = directDI.instance(), + windowCoroutineScope = directDI.instance(), +) + +fun settingMarkdownProvider( + getMarkdown: GetMarkdown, + putMarkdown: PutMarkdown, + windowCoroutineScope: WindowCoroutineScope, +): SettingComponent = getMarkdown().map { markdown -> + val onCheckedChange = { shouldMarkdown: Boolean -> + putMarkdown(shouldMarkdown) + .launchIn(windowCoroutineScope) + Unit + } + + SettingIi( + search = SettingIi.Search( + group = "ui", + tokens = listOf( + "markdown", + "format", + "note", + ), + ), + ) { + val navigationController by rememberUpdatedState(LocalNavigationController.current) + SettingMarkdown( + checked = markdown, + onCheckedChange = onCheckedChange, + onLearnMore = { + val intent = NavigationIntent.NavigateToBrowser( + url = "https://www.markdownguide.org/basic-syntax/", + ) + navigationController.queue(intent) + }, + ) + } +} + +@Composable +private fun SettingMarkdown( + checked: Boolean, + onCheckedChange: ((Boolean) -> Unit)?, + onLearnMore: (() -> Unit)?, +) { + Column { + FlatItemLayout( + leading = icon(Icons.Outlined.TextFormat), + trailing = { + Switch( + checked = checked, + enabled = onCheckedChange != null, + onCheckedChange = onCheckedChange, + ) + }, + content = { + FlatItemTextContent( + title = { + Text( + text = stringResource(Res.strings.pref_item_markdown_title), + ) + }, + text = { + Text( + text = stringResource(Res.strings.pref_item_markdown_text), + ) + }, + ) + }, + onClick = onCheckedChange?.partially1(!checked), + ) + TextButton( + modifier = Modifier + .padding(horizontal = 46.dp), + enabled = onLearnMore != null, + onClick = { + onLearnMore?.invoke() + }, + ) { + Text( + text = stringResource(Res.strings.learn_more), + ) + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingMasterPassword.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingMasterPassword.kt new file mode 100644 index 00000000..c1706ce4 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingMasterPassword.kt @@ -0,0 +1,66 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.foundation.layout.RowScope +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Password +import androidx.compose.material.icons.outlined.Refresh +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberUpdatedState +import com.artemchep.keyguard.feature.changepassword.ChangePasswordRoute +import com.artemchep.keyguard.feature.navigation.LocalNavigationController +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItem +import com.artemchep.keyguard.ui.icons.ChevronIcon +import com.artemchep.keyguard.ui.icons.icon +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.flow.flowOf +import org.kodein.di.DirectDI + +fun settingMasterPasswordProvider( + directDI: DirectDI, +) = settingMasterPasswordProvider() + +fun settingMasterPasswordProvider(): SettingComponent = kotlin.run { + val item = SettingIi( + search = SettingIi.Search( + group = "password", + tokens = listOf( + "app", + "master", + "password", + ), + ), + ) { + val navigationController by rememberUpdatedState(LocalNavigationController.current) + SettingMasterPassword( + onClick = { + val intent = NavigationIntent.NavigateToRoute( + route = ChangePasswordRoute, + ) + navigationController.queue(intent) + }, + ) + } + flowOf(item) +} + +@Composable +private fun SettingMasterPassword( + onClick: (() -> Unit)?, +) { + FlatItem( + leading = icon(Icons.Outlined.Password, Icons.Outlined.Refresh), + trailing = { + ChevronIcon() + }, + title = { + Text( + text = stringResource(Res.strings.pref_item_change_app_password_title), + ) + }, + onClick = onClick, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingNavAnimation.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingNavAnimation.kt new file mode 100644 index 00000000..56b30610 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingNavAnimation.kt @@ -0,0 +1,96 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.foundation.layout.RowScope +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Animation +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.usecase.GetNavAnimation +import com.artemchep.keyguard.common.usecase.GetNavAnimationVariants +import com.artemchep.keyguard.common.usecase.PutNavAnimation +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.feature.localization.textResource +import com.artemchep.keyguard.platform.LeContext +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatDropdown +import com.artemchep.keyguard.ui.FlatItemAction +import com.artemchep.keyguard.ui.FlatItemTextContent +import com.artemchep.keyguard.ui.icons.icon +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.flow.combine +import org.kodein.di.DirectDI +import org.kodein.di.instance + +fun settingNavAnimationProvider( + directDI: DirectDI, +) = settingNavAnimationProvider( + getNavAnimation = directDI.instance(), + getNavAnimationVariants = directDI.instance(), + putNavAnimation = directDI.instance(), + windowCoroutineScope = directDI.instance(), + context = directDI.instance(), +) + +fun settingNavAnimationProvider( + getNavAnimation: GetNavAnimation, + getNavAnimationVariants: GetNavAnimationVariants, + putNavAnimation: PutNavAnimation, + windowCoroutineScope: WindowCoroutineScope, + context: LeContext, +): SettingComponent = combine( + getNavAnimation(), + getNavAnimationVariants(), +) { navAnimation, variants -> + val text = textResource(navAnimation.title, context) + val dropdown = variants + .map { navAnimationVariant -> + val title = textResource(navAnimationVariant.title, context) + FlatItemAction( + title = title, + onClick = { + putNavAnimation(navAnimationVariant) + .launchIn(windowCoroutineScope) + }, + ) + } + + SettingIi( + search = SettingIi.Search( + group = "nav_animation", + tokens = listOf( + "navigation", + "animation", + "crossfade", + ), + ), + ) { + SettingNavAnimation( + text = text, + dropdown = dropdown, + ) + } +} + +@Composable +private fun SettingNavAnimation( + text: String, + dropdown: List, +) { + FlatDropdown( + leading = icon(Icons.Outlined.Animation), + content = { + FlatItemTextContent( + title = { + Text( + text = stringResource(Res.strings.pref_item_nav_animation_title), + ) + }, + text = { + Text(text) + }, + ) + }, + dropdown = dropdown, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingNavLabel.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingNavLabel.kt new file mode 100644 index 00000000..4cb0881c --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingNavLabel.kt @@ -0,0 +1,78 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.foundation.layout.RowScope +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Label +import androidx.compose.material3.Switch +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import arrow.core.partially1 +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.usecase.GetNavLabel +import com.artemchep.keyguard.common.usecase.PutNavLabel +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItem +import com.artemchep.keyguard.ui.icons.icon +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.flow.map +import org.kodein.di.DirectDI +import org.kodein.di.instance + +fun settingNavLabelProvider( + directDI: DirectDI, +) = settingNavLabelProvider( + getNavLabel = directDI.instance(), + putNavLabel = directDI.instance(), + windowCoroutineScope = directDI.instance(), +) + +fun settingNavLabelProvider( + getNavLabel: GetNavLabel, + putNavLabel: PutNavLabel, + windowCoroutineScope: WindowCoroutineScope, +): SettingComponent = getNavLabel().map { navLabel -> + val onCheckedChange = { shouldNavLabel: Boolean -> + putNavLabel(shouldNavLabel) + .launchIn(windowCoroutineScope) + Unit + } + + SettingIi( + search = SettingIi.Search( + group = "ui", + tokens = listOf( + "navigation", + "label", + ), + ), + ) { + SettingNavLabel( + checked = navLabel, + onCheckedChange = onCheckedChange, + ) + } +} + +@Composable +private fun SettingNavLabel( + checked: Boolean, + onCheckedChange: ((Boolean) -> Unit)?, +) { + FlatItem( + leading = icon(Icons.Outlined.Label), + trailing = { + Switch( + checked = checked, + enabled = onCheckedChange != null, + onCheckedChange = onCheckedChange, + ) + }, + title = { + Text( + text = stringResource(Res.strings.pref_item_nav_label_title), + ) + }, + onClick = onCheckedChange?.partially1(!checked), + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingOpenSourceLicenses.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingOpenSourceLicenses.kt new file mode 100644 index 00000000..c4f3fd05 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingOpenSourceLicenses.kt @@ -0,0 +1,64 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.foundation.layout.RowScope +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.TextSnippet +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberUpdatedState +import com.artemchep.keyguard.feature.license.LicenseRoute +import com.artemchep.keyguard.feature.navigation.LocalNavigationController +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItem +import com.artemchep.keyguard.ui.icons.ChevronIcon +import com.artemchep.keyguard.ui.icons.icon +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.flow.flowOf +import org.kodein.di.DirectDI + +fun settingOpenSourceLicensesProvider( + directDI: DirectDI, +): SettingComponent = settingOpenSourceLicensesProvider() + +fun settingOpenSourceLicensesProvider(): SettingComponent = kotlin.run { + val item = SettingIi( + search = SettingIi.Search( + group = "about", + tokens = listOf( + "code", + "license", + "open", + "source", + ), + ), + ) { + val navigationController by rememberUpdatedState(LocalNavigationController.current) + SettingOpenSourceLicenses( + onClick = { + val intent = NavigationIntent.NavigateToRoute(LicenseRoute) + navigationController.queue(intent) + }, + ) + } + flowOf(item) +} + +@Composable +private fun SettingOpenSourceLicenses( + onClick: (() -> Unit)?, +) { + FlatItem( + leading = icon(Icons.Outlined.TextSnippet), + trailing = { + ChevronIcon() + }, + title = { + Text( + text = stringResource(Res.strings.pref_item_open_source_licenses_title), + ) + }, + onClick = onClick, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingPermission.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingPermission.kt new file mode 100644 index 00000000..cdff2f33 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingPermission.kt @@ -0,0 +1,7 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import org.kodein.di.DirectDI + +expect fun settingPermissionDetailsProvider( + directDI: DirectDI, +): SettingComponent diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingPermissionCamera.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingPermissionCamera.kt new file mode 100644 index 00000000..981c30a7 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingPermissionCamera.kt @@ -0,0 +1,7 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import org.kodein.di.DirectDI + +expect fun settingPermissionCameraProvider( + directDI: DirectDI, +): SettingComponent diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingPermissionOther.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingPermissionOther.kt new file mode 100644 index 00000000..a6becba9 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingPermissionOther.kt @@ -0,0 +1,7 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import org.kodein.di.DirectDI + +expect fun settingPermissionOtherProvider( + directDI: DirectDI, +): SettingComponent diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingPermissionPostNotifications.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingPermissionPostNotifications.kt new file mode 100644 index 00000000..694985ab --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingPermissionPostNotifications.kt @@ -0,0 +1,7 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import org.kodein.di.DirectDI + +expect fun settingPermissionPostNotificationsProvider( + directDI: DirectDI, +): SettingComponent diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingPrivacyPolicy.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingPrivacyPolicy.kt new file mode 100644 index 00000000..251e9138 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingPrivacyPolicy.kt @@ -0,0 +1,64 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.foundation.layout.RowScope +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.PrivacyTip +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberUpdatedState +import com.artemchep.keyguard.feature.navigation.LocalNavigationController +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItem +import com.artemchep.keyguard.ui.icons.ChevronIcon +import com.artemchep.keyguard.ui.icons.KeyguardWebsite +import com.artemchep.keyguard.ui.icons.icon +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.flow.flowOf +import org.kodein.di.DirectDI + +fun settingPrivacyPolicyProvider( + directDI: DirectDI, +): SettingComponent = settingPrivacyPolicyProvider() + +fun settingPrivacyPolicyProvider(): SettingComponent = kotlin.run { + val item = SettingIi( + search = SettingIi.Search( + group = "about", + tokens = listOf( + "privacy", + "policy", + ), + ), + ) { + val navigationController by rememberUpdatedState(LocalNavigationController.current) + SettingPrivacyPolicy( + onClick = { + val intent = NavigationIntent.NavigateToBrowser( + url = "https://gist.github.com/AChep/1fd4e019a4ad8f9647ba3b4694b5dc1c", + ) + navigationController.queue(intent) + }, + ) + } + flowOf(item) +} + +@Composable +private fun SettingPrivacyPolicy( + onClick: (() -> Unit)?, +) { + FlatItem( + leading = icon(Icons.Outlined.PrivacyTip, Icons.Outlined.KeyguardWebsite), + trailing = { + ChevronIcon() + }, + title = { + Text( + text = stringResource(Res.strings.pref_item_privacy_policy_title), + ) + }, + onClick = onClick, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingRateApp.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingRateApp.kt new file mode 100644 index 00000000..c06f6efa --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingRateApp.kt @@ -0,0 +1,64 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.foundation.layout.RowScope +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.StarRate +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberUpdatedState +import com.artemchep.keyguard.feature.navigation.LocalNavigationController +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItem +import com.artemchep.keyguard.ui.icons.ChevronIcon +import com.artemchep.keyguard.ui.icons.icon +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.flow.flowOf +import org.kodein.di.DirectDI + +fun settingRateAppProvider( + directDI: DirectDI, +) = settingRateAppProvider() + +fun settingRateAppProvider(): SettingComponent = kotlin.run { + val item = SettingIi( + search = SettingIi.Search( + group = "about", + tokens = listOf( + "rate", + "play", + "google", + ), + ), + ) { + val navigationController by rememberUpdatedState(LocalNavigationController.current) + SettingRateAppItem( + onClick = { + val intent = NavigationIntent.NavigateToBrowser( + url = "https://play.google.com/store/apps/details?id=com.artemchep.keyguard", + ) + navigationController.queue(intent) + }, + ) + } + flowOf(item) +} + +@Composable +fun SettingRateAppItem( + onClick: (() -> Unit)?, +) { + FlatItem( + leading = icon(Icons.Outlined.StarRate), + trailing = { + ChevronIcon() + }, + title = { + Text( + text = stringResource(Res.strings.pref_item_rate_on_play_store_title), + ) + }, + onClick = onClick, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingRequireMasterPassword.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingRequireMasterPassword.kt new file mode 100644 index 00000000..a69cc6cb --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingRequireMasterPassword.kt @@ -0,0 +1,179 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.foundation.layout.ColumnScope +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.height +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.model.BiometricStatus +import com.artemchep.keyguard.common.service.vault.FingerprintReadRepository +import com.artemchep.keyguard.common.usecase.BiometricStatusUseCase +import com.artemchep.keyguard.common.usecase.GetBiometricTimeout +import com.artemchep.keyguard.common.usecase.GetBiometricTimeoutVariants +import com.artemchep.keyguard.common.usecase.PutBiometricTimeout +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.feature.localization.textResource +import com.artemchep.keyguard.platform.LeContext +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatDropdown +import com.artemchep.keyguard.ui.FlatItemAction +import com.artemchep.keyguard.ui.FlatItemTextContent +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.theme.combineAlpha +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.flatMapLatest +import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.flow.map +import org.kodein.di.DirectDI +import org.kodein.di.instance +import kotlin.time.Duration + +fun settingRequireMasterPasswordProvider( + directDI: DirectDI, +) = settingRequireMasterPasswordProvider( + fingerprintReadRepository = directDI.instance(), + biometricStatusUseCase = directDI.instance(), + getBiometricTimeout = directDI.instance(), + getBiometricTimeoutVariants = directDI.instance(), + putBiometricTimeout = directDI.instance(), + windowCoroutineScope = directDI.instance(), + context = directDI.instance(), +) + +fun settingRequireMasterPasswordProvider( + fingerprintReadRepository: FingerprintReadRepository, + biometricStatusUseCase: BiometricStatusUseCase, + getBiometricTimeout: GetBiometricTimeout, + getBiometricTimeoutVariants: GetBiometricTimeoutVariants, + putBiometricTimeout: PutBiometricTimeout, + windowCoroutineScope: WindowCoroutineScope, + context: LeContext, +): SettingComponent = biometricStatusUseCase() + .map { it is BiometricStatus.Available } + .distinctUntilChanged() + .flatMapLatest { hasBiometrics -> + if (hasBiometrics) { + ah( + fingerprintReadRepository = fingerprintReadRepository, + getBiometricTimeout = getBiometricTimeout, + getBiometricTimeoutVariants = getBiometricTimeoutVariants, + putBiometricTimeout = putBiometricTimeout, + windowCoroutineScope = windowCoroutineScope, + context = context, + ) + } else { + // hide option if the device does not have biometrics + flowOf(null) + } + } + +private fun ah( + fingerprintReadRepository: FingerprintReadRepository, + getBiometricTimeout: GetBiometricTimeout, + getBiometricTimeoutVariants: GetBiometricTimeoutVariants, + putBiometricTimeout: PutBiometricTimeout, + windowCoroutineScope: WindowCoroutineScope, + context: LeContext, +) = combine( + getBiometricTimeout(), + getBiometricTimeoutVariants() + .combine( + flow = fingerprintReadRepository.get() + .map { tokens -> + tokens?.biometric != null + }, + ) { variants, hasBiometricEnabled -> + variants.takeIf { hasBiometricEnabled }.orEmpty() + }, +) { timeout, variants -> + val text = getRequirePasswordDurationTitle(timeout, context) + val dropdown = variants + .map { duration -> + val title = getRequirePasswordDurationTitle(duration, context) + FlatItemAction( + title = title, + onClick = { + putBiometricTimeout(duration) + .launchIn(windowCoroutineScope) + }, + ) + } + + SettingIi( + search = SettingIi.Search( + group = "password", + tokens = listOf( + "master", + "password", + ), + ), + ) { + SettingRequireMasterPassword( + text = text, + dropdown = dropdown, + ) + } +} + +private fun getRequirePasswordDurationTitle(duration: Duration, context: LeContext) = + when (duration) { + Duration.ZERO -> textResource( + Res.strings.pref_item_require_app_password_immediately_text, + context, + ) + + Duration.INFINITE -> textResource( + Res.strings.pref_item_require_app_password_never_text, + context, + ) + + else -> duration.toString() + } + +@Composable +fun SettingRequireMasterPassword( + text: String, + dropdown: List, +) { + FlatDropdown( + content = { + SettingRequireMasterPasswordContent( + text = text, + ) + }, + dropdown = dropdown, + ) +} + +@Composable +private fun ColumnScope.SettingRequireMasterPasswordContent( + text: String, +) { + FlatItemTextContent( + title = { + Text( + text = stringResource(Res.strings.pref_item_require_app_password_title), + ) + }, + text = { + Text(text) + Spacer( + modifier = Modifier + .height(8.dp), + ) + Text( + color = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + style = MaterialTheme.typography.bodySmall, + text = stringResource(Res.strings.pref_item_require_app_password_note), + ) + }, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingRotateDeviceId.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingRotateDeviceId.kt new file mode 100644 index 00000000..fddfbd7b --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingRotateDeviceId.kt @@ -0,0 +1,66 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.foundation.layout.RowScope +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Key +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.usecase.RotateDeviceIdUseCase +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.platform.util.isRelease +import com.artemchep.keyguard.ui.FlatItem +import com.artemchep.keyguard.ui.icons.icon +import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.flow +import org.kodein.di.DirectDI +import org.kodein.di.instance + +fun settingRotateDeviceId( + directDI: DirectDI, +) = settingRotateDeviceId( + rotateDeviceIdUseCase = directDI.instance(), + windowCoroutineScope = directDI.instance(), +) + +fun settingRotateDeviceId( + rotateDeviceIdUseCase: RotateDeviceIdUseCase, + windowCoroutineScope: WindowCoroutineScope, +): SettingComponent = flow { + val onClick = { + rotateDeviceIdUseCase() + .launchIn(windowCoroutineScope) + Unit + } + + val state = if (!isRelease) { + SettingIi { + SettingRotateDeviceId( + onClick = onClick, + ) + } + } else { + null + } + emit(state) + delay(1000L) + emit(state) + emit(state) +} + +@Composable +private fun SettingRotateDeviceId( + onClick: (() -> Unit)?, +) { + FlatItem( + leading = icon(Icons.Outlined.Key), + title = { + Text("Rotate device id") + }, + text = { + val msg = "Removes all added accounts & rotates the device identifier." + Text(msg) + }, + onClick = onClick, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingScreenDelay.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingScreenDelay.kt new file mode 100644 index 00000000..64936b9c --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingScreenDelay.kt @@ -0,0 +1,66 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.material3.Switch +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import arrow.core.partially1 +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.usecase.GetDebugScreenDelay +import com.artemchep.keyguard.common.usecase.PutDebugScreenDelay +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.platform.util.isRelease +import com.artemchep.keyguard.ui.FlatItem +import kotlinx.coroutines.flow.map +import org.kodein.di.DirectDI +import org.kodein.di.instance + +fun settingScreenDelay( + directDI: DirectDI, +) = settingScreenDelay( + getDebugScreenDelay = directDI.instance(), + putDebugScreenDelay = directDI.instance(), + windowCoroutineScope = directDI.instance(), +) + +fun settingScreenDelay( + getDebugScreenDelay: GetDebugScreenDelay, + putDebugScreenDelay: PutDebugScreenDelay, + windowCoroutineScope: WindowCoroutineScope, +): SettingComponent = getDebugScreenDelay().map { screenDelay -> + val onCheckedChange = { shouldBeScreenDelay: Boolean -> + putDebugScreenDelay(shouldBeScreenDelay) + .launchIn(windowCoroutineScope) + Unit + } + + if (!isRelease) { + SettingIi { + SettingDebugScreenDelay( + checked = screenDelay, + onCheckedChange = onCheckedChange, + ) + } + } else { + null + } +} + +@Composable +private fun SettingDebugScreenDelay( + checked: Boolean, + onCheckedChange: ((Boolean) -> Unit)?, +) { + FlatItem( + trailing = { + Switch( + checked = checked, + enabled = onCheckedChange != null, + onCheckedChange = onCheckedChange, + ) + }, + title = { + Text("Delay screen loading") + }, + onClick = onCheckedChange?.partially1(!checked), + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingScreenshots.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingScreenshots.kt new file mode 100644 index 00000000..f2d4ff18 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingScreenshots.kt @@ -0,0 +1,88 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.foundation.layout.RowScope +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Screenshot +import androidx.compose.material3.Switch +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import arrow.core.partially1 +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.usecase.GetAllowScreenshots +import com.artemchep.keyguard.common.usecase.PutAllowScreenshots +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItem +import com.artemchep.keyguard.ui.icons.icon +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.flow.map +import org.kodein.di.DirectDI +import org.kodein.di.instance + +fun settingScreenshotsProvider( + directDI: DirectDI, +) = settingScreenshotsProvider( + getAllowScreenshots = directDI.instance(), + putAllowScreenshots = directDI.instance(), + windowCoroutineScope = directDI.instance(), +) + +fun settingScreenshotsProvider( + getAllowScreenshots: GetAllowScreenshots, + putAllowScreenshots: PutAllowScreenshots, + windowCoroutineScope: WindowCoroutineScope, +): SettingComponent = getAllowScreenshots().map { allowScreenshots -> + val onCheckedChange = { shouldConcealFields: Boolean -> + putAllowScreenshots(shouldConcealFields) + .launchIn(windowCoroutineScope) + Unit + } + + SettingIi( + search = SettingIi.Search( + group = "conceal", + tokens = listOf( + "screenshot", + "record", + "block", + "prevent", + ), + ), + ) { + SettingScreenshotsFields( + checked = allowScreenshots, + onCheckedChange = onCheckedChange, + ) + } +} + +@Composable +private fun SettingScreenshotsFields( + checked: Boolean, + onCheckedChange: ((Boolean) -> Unit)?, +) { + FlatItem( + leading = icon(Icons.Outlined.Screenshot), + trailing = { + Switch( + checked = checked, + enabled = onCheckedChange != null, + onCheckedChange = onCheckedChange, + ) + }, + title = { + Text( + text = stringResource(Res.strings.pref_item_allow_screenshots_title), + ) + }, + text = { + val text = if (checked) { + stringResource(Res.strings.pref_item_allow_screenshots_text_on) + } else { + stringResource(Res.strings.pref_item_allow_screenshots_text_off) + } + Text(text) + }, + onClick = onCheckedChange?.partially1(!checked), + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingSection.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingSection.kt new file mode 100644 index 00000000..aa634586 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingSection.kt @@ -0,0 +1,39 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.foundation.layout.padding +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.feature.home.settings.LocalSettingItemArgs +import com.artemchep.keyguard.feature.home.vault.component.Section +import com.artemchep.keyguard.ui.util.HorizontalDivider +import kotlinx.coroutines.flow.flowOf +import org.kodein.di.DirectDI + +fun settingSectionProvider( + directDI: DirectDI, +) = settingSectionProvider() + +fun settingSectionProvider(): SettingComponent = kotlin.run { + val item = SettingIi { + val title = run { + val args = LocalSettingItemArgs.current as? SettingSectionArgs + args?.title + } + + if (title != null) { + Section( + text = title, + ) + } else { + HorizontalDivider( + modifier = Modifier + .padding(vertical = 4.dp), + ) + } + } + flowOf(item) +} + +data class SettingSectionArgs( + val title: String? = null, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingSelectLocale.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingSelectLocale.kt new file mode 100644 index 00000000..8aa613d1 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingSelectLocale.kt @@ -0,0 +1,155 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.RowScope +import androidx.compose.foundation.layout.padding +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Language +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.usecase.GetLocale +import com.artemchep.keyguard.common.usecase.GetLocaleVariants +import com.artemchep.keyguard.common.usecase.PutLocale +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.feature.localization.textResource +import com.artemchep.keyguard.feature.navigation.LocalNavigationController +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.platform.LeContext +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatDropdown +import com.artemchep.keyguard.ui.FlatItemAction +import com.artemchep.keyguard.ui.FlatItemTextContent +import com.artemchep.keyguard.ui.icons.icon +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.flow.combine +import org.kodein.di.DirectDI +import org.kodein.di.instance +import java.util.Locale + +fun settingSelectLocaleProvider( + directDI: DirectDI, +) = settingSelectLocaleProvider( + getLocale = directDI.instance(), + getLocaleVariants = directDI.instance(), + putLocale = directDI.instance(), + windowCoroutineScope = directDI.instance(), + context = directDI.instance(), +) + +fun settingSelectLocaleProvider( + getLocale: GetLocale, + getLocaleVariants: GetLocaleVariants, + putLocale: PutLocale, + windowCoroutineScope: WindowCoroutineScope, + context: LeContext, +): SettingComponent = combine( + getLocale(), + getLocaleVariants(), +) { locale, variants -> + val text = getLocaleTitle(locale, context) + val dropdown = variants + .map { localeVariant -> + val title = getLocaleTitle(localeVariant, context) + LocaleItem( + locale = localeVariant, + title = title, + ) + } + .sortedWith( + compareBy( + { it.locale != null }, + { it.title }, + ), + ) + .map { item -> + FlatItemAction( + // leading = if (item.locale != null) null else icon(Icons.Outlined.AutoAwesome), + title = item.title, + onClick = { + putLocale(item.locale) + .launchIn(windowCoroutineScope) + }, + ) + } + + SettingIi( + search = SettingIi.Search( + group = "locale", + tokens = listOf( + "locale", + "language", + "translate", + ), + ), + ) { + val navigationController by rememberUpdatedState(LocalNavigationController.current) + SettingLocale( + text = text, + dropdown = dropdown, + onHelpTranslate = { + val intent = NavigationIntent.NavigateToBrowser( + url = "https://crowdin.com/project/keyguard", + ) + navigationController.queue(intent) + }, + ) + } +} + +private data class LocaleItem( + val locale: String?, + val title: String, +) + +private fun getLocaleTitle(locale: String?, context: LeContext) = locale + ?.let { + Locale.forLanguageTag(it).let { locale -> + locale.getDisplayName(locale) + .capitalize(locale) + } + } + ?: textResource(Res.strings.follow_system_settings, context) + +@Composable +private fun SettingLocale( + text: String, + dropdown: List, + onHelpTranslate: (() -> Unit)? = null, +) { + Column { + FlatDropdown( + leading = icon(Icons.Outlined.Language), + content = { + FlatItemTextContent( + title = { + Text( + text = stringResource(Res.strings.pref_item_locale_title), + ) + }, + text = { + Text(text) + }, + ) + }, + dropdown = dropdown, + ) + TextButton( + modifier = Modifier + .padding(horizontal = 46.dp), + enabled = onHelpTranslate != null, + onClick = { + onHelpTranslate?.invoke() + }, + ) { + Text( + text = stringResource(Res.strings.pref_item_locale_help_translation_button), + ) + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingSubscriptions.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingSubscriptions.kt new file mode 100644 index 00000000..24632838 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingSubscriptions.kt @@ -0,0 +1,363 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.animation.animateColorAsState +import androidx.compose.foundation.background +import androidx.compose.foundation.horizontalScroll +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.widthIn +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Star +import androidx.compose.material3.Icon +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.contentColorFor +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.model.Product +import com.artemchep.keyguard.common.model.Subscription +import com.artemchep.keyguard.common.model.fold +import com.artemchep.keyguard.common.usecase.GetProducts +import com.artemchep.keyguard.common.usecase.GetSubscriptions +import com.artemchep.keyguard.feature.home.vault.component.Section +import com.artemchep.keyguard.feature.onboarding.OnboardingCard +import com.artemchep.keyguard.feature.onboarding.onboardingItemsPremium +import com.artemchep.keyguard.platform.LocalLeContext +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.Ah +import com.artemchep.keyguard.ui.DisabledEmphasisAlpha +import com.artemchep.keyguard.ui.ExpandedIfNotEmpty +import com.artemchep.keyguard.ui.FlatItemLayout +import com.artemchep.keyguard.ui.FlatItemTextContent +import com.artemchep.keyguard.ui.FlatSimpleNote +import com.artemchep.keyguard.ui.SimpleNote +import com.artemchep.keyguard.ui.icons.ChevronIcon +import com.artemchep.keyguard.ui.shimmer.shimmer +import com.artemchep.keyguard.ui.theme.Dimens +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.onStart +import org.kodein.di.DirectDI +import org.kodein.di.instance + +private const val SubscriptionsCountDefault = 2 +private const val ProductsCountDefault = 1 + +fun settingSubscriptionsProvider( + directDI: DirectDI, +) = settingSubscriptionsProvider( + getSubscriptions = directDI.instance(), + getProducts = directDI.instance(), +) + +fun settingSubscriptionsProvider( + getSubscriptions: GetSubscriptions, + getProducts: GetProducts, +): SettingComponent = combine( + getSubscriptions() + .loadable(), + getProducts() + .loadable(), +) { loadableSubscriptions, loadableProducts -> + SettingIi( + search = SettingIi.Search( + group = "subscription", + tokens = listOf( + "subscription", + "premium", + ), + ), + ) { + SettingSubscriptions( + loadableSubscriptions = loadableSubscriptions, + loadableProducts = loadableProducts, + ) + } +} + +fun Flow.loadable(): Flow> = this + .map { + val state: Loadable = Loadable.Ok(it) + state + } + .onStart { + val initialState = Loadable.Loading + emit(initialState) + } + +@Composable +private fun SettingSubscriptions( + loadableSubscriptions: Loadable?>, + loadableProducts: Loadable?>, +) { + Column( + modifier = Modifier + .fillMaxWidth(), + ) { + Text( + stringResource(Res.strings.pref_item_premium_membership_title), + style = MaterialTheme.typography.bodyLarge, + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding), + ) + Text( + stringResource(Res.strings.pref_item_premium_membership_text), + style = MaterialTheme.typography.bodyMedium, + modifier = Modifier + .padding(top = 4.dp) + .padding(horizontal = Dimens.horizontalPadding), + ) + Spacer(Modifier.height(8.dp)) + Row( + modifier = Modifier + .padding(top = 8.dp, bottom = 16.dp) + .horizontalScroll(rememberScrollState()) + .padding(start = 8.dp, end = 8.dp), + horizontalArrangement = Arrangement.spacedBy(8.dp), + ) { + onboardingItemsPremium.forEach { item -> + OnboardingCard( + modifier = Modifier + .widthIn(max = 156.dp), + title = stringResource(item.title), + text = stringResource(item.text), + imageVector = item.icon, + ) + } + } + Section(text = stringResource(Res.strings.pref_item_premium_membership_section_subscriptions_title)) + loadableSubscriptions.fold( + ifLoading = { + repeat(SubscriptionsCountDefault) { + SettingSubscriptionSkeletonItem() + } + }, + ifOk = { subscriptions -> + if (subscriptions == null) { + FlatSimpleNote( + text = stringResource(Res.strings.pref_item_premium_membership_failed_to_load_subscriptions), + type = SimpleNote.Type.WARNING, + ) + return@fold + } + subscriptions.forEach { subscription -> + SettingSubscriptionItem( + subscription = subscription, + ) + } + }, + ) + Section(text = stringResource(Res.strings.pref_item_premium_membership_section_products_title)) + loadableProducts.fold( + ifLoading = { + repeat(ProductsCountDefault) { + SettingSubscriptionSkeletonItem() + } + }, + ifOk = { products -> + if (products == null) { + FlatSimpleNote( + text = stringResource(Res.strings.pref_item_premium_membership_failed_to_load_products), + type = SimpleNote.Type.WARNING, + ) + return@fold + } + products.forEach { product -> + SettingProductItem( + product = product, + ) + } + }, + ) + } +} + +@Composable +private fun SettingSubscriptionSkeletonItem() { + val contentColor = + LocalContentColor.current.copy(alpha = DisabledEmphasisAlpha) + FlatItemLayout( + modifier = Modifier + .shimmer(), + leading = { + Box( + modifier = Modifier + .size(24.dp) + .background(contentColor, CircleShape), + ) + }, + content = { + Box( + Modifier + .height(18.dp) + .fillMaxWidth(0.45f) + .clip(MaterialTheme.shapes.medium) + .background(contentColor), + ) + Box( + Modifier + .padding(top = 4.dp) + .height(15.dp) + .fillMaxWidth(0.35f) + .clip(MaterialTheme.shapes.medium) + .background(contentColor.copy(alpha = 0.2f)), + ) + }, + ) +} + +@Composable +private fun SettingSubscriptionItem( + subscription: Subscription, +) { + val context by rememberUpdatedState(LocalLeContext) + FlatItemLayout( + leading = { + val backgroundColor = MaterialTheme.colorScheme.secondaryContainer + Box( + modifier = Modifier + .size(24.dp) + .background(backgroundColor, CircleShape) + .padding(4.dp), + ) { + val targetContentColor = kotlin.run { + val active = subscription.status is Subscription.Status.Active + if (active) { + MaterialTheme.colorScheme.primary + } else { + contentColorFor(backgroundColor) + } + } + val contentColor by animateColorAsState(targetValue = targetContentColor) + Icon( + Icons.Outlined.Star, + contentDescription = null, + tint = contentColor, + ) + } + }, + elevation = 2.dp, + trailing = { + ChevronIcon() + }, + content = { + FlatItemTextContent( + title = { + Text(subscription.price) + }, + text = { + Text(subscription.title) + }, + ) + + val statusOrNull = subscription.status as? Subscription.Status.Active + ExpandedIfNotEmpty(statusOrNull) { status -> + Row( + modifier = Modifier + .padding(top = 4.dp), + ) { + Ah( + score = 1f, + text = stringResource(Res.strings.pref_item_premium_status_active), + ) + + val isCancelled = !status.willRenew + AnimatedVisibility( + modifier = Modifier + .padding(start = 4.dp), + visible = isCancelled, + ) { + Ah( + score = 0f, + text = stringResource(Res.strings.pref_item_premium_status_will_not_renew), + ) + } + } + } + }, + onClick = { + subscription.purchase(context) + }, + ) +} + +@Composable +private fun SettingProductItem( + product: Product, +) { + val context by rememberUpdatedState(LocalLeContext) + FlatItemLayout( + leading = { + val backgroundColor = MaterialTheme.colorScheme.secondaryContainer + Box( + modifier = Modifier + .size(24.dp) + .background(backgroundColor, CircleShape) + .padding(4.dp), + ) { + val targetContentColor = kotlin.run { + val active = product.status is Product.Status.Active + if (active) { + MaterialTheme.colorScheme.primary + } else { + contentColorFor(backgroundColor) + } + } + val contentColor by animateColorAsState(targetValue = targetContentColor) + Icon( + Icons.Outlined.Star, + contentDescription = null, + tint = contentColor, + ) + } + }, + elevation = 2.dp, + trailing = { + ChevronIcon() + }, + content = { + FlatItemTextContent( + title = { + Text(product.price) + }, + text = { + Text(product.title) + }, + ) + + val statusOrNull = product.status as? Product.Status.Active + ExpandedIfNotEmpty(statusOrNull) { + Row( + modifier = Modifier + .padding(top = 4.dp), + ) { + Ah( + score = 1f, + text = stringResource(Res.strings.pref_item_premium_status_active), + ) + } + } + }, + onClick = { + product.purchase(context) + }, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingSubscriptionsDebug.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingSubscriptionsDebug.kt new file mode 100644 index 00000000..f348d0fb --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingSubscriptionsDebug.kt @@ -0,0 +1,70 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.material3.Switch +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import arrow.core.partially1 +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.usecase.GetDebugPremium +import com.artemchep.keyguard.common.usecase.PutDebugPremium +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.platform.util.isRelease +import com.artemchep.keyguard.ui.FlatItem +import kotlinx.coroutines.flow.map +import org.kodein.di.DirectDI +import org.kodein.di.instance + +fun settingSubscriptionsDebug( + directDI: DirectDI, +) = settingSubscriptionsDebug( + getDebugPremium = directDI.instance(), + putDebugPremium = directDI.instance(), + windowCoroutineScope = directDI.instance(), +) + +fun settingSubscriptionsDebug( + getDebugPremium: GetDebugPremium, + putDebugPremium: PutDebugPremium, + windowCoroutineScope: WindowCoroutineScope, +): SettingComponent = getDebugPremium().map { premium -> + val onCheckedChange = { shouldBePremium: Boolean -> + putDebugPremium(shouldBePremium) + .launchIn(windowCoroutineScope) + Unit + } + + if (!isRelease) { + SettingIi { + SettingDebugPremium( + checked = premium, + onCheckedChange = onCheckedChange, + ) + } + } else { + null + } +} + +@Composable +private fun SettingDebugPremium( + checked: Boolean, + onCheckedChange: ((Boolean) -> Unit)?, +) { + FlatItem( + trailing = { + Switch( + checked = checked, + enabled = onCheckedChange != null, + onCheckedChange = onCheckedChange, + ) + }, + title = { + Text("Force premium status") + }, + text = { + val msg = "Enables premium features in test builds." + Text(msg) + }, + onClick = onCheckedChange?.partially1(!checked), + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingSubscriptionsPlayStore.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingSubscriptionsPlayStore.kt new file mode 100644 index 00000000..f8548315 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingSubscriptionsPlayStore.kt @@ -0,0 +1,7 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import org.kodein.di.DirectDI + +expect fun settingSubscriptionsPlayStoreProvider( + directDI: DirectDI, +): SettingComponent diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingThemeUseAmoledDark.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingThemeUseAmoledDark.kt new file mode 100644 index 00000000..c4369cc3 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingThemeUseAmoledDark.kt @@ -0,0 +1,82 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.foundation.layout.RowScope +import androidx.compose.material.icons.Icons +import androidx.compose.material3.Switch +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import arrow.core.partially1 +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.usecase.GetThemeUseAmoledDark +import com.artemchep.keyguard.common.usecase.PutThemeUseAmoledDark +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItem +import com.artemchep.keyguard.ui.icons.Stub +import com.artemchep.keyguard.ui.icons.icon +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.flow.map +import org.kodein.di.DirectDI +import org.kodein.di.instance + +fun settingThemeUseAmoledDarkProvider( + directDI: DirectDI, +) = settingThemeUseAmoledDarkProvider( + getThemeUseAmoledDark = directDI.instance(), + putThemeUseAmoledDark = directDI.instance(), + windowCoroutineScope = directDI.instance(), +) + +fun settingThemeUseAmoledDarkProvider( + getThemeUseAmoledDark: GetThemeUseAmoledDark, + putThemeUseAmoledDark: PutThemeUseAmoledDark, + windowCoroutineScope: WindowCoroutineScope, +): SettingComponent = getThemeUseAmoledDark().map { useAmoledDark -> + val onCheckedChange = { shouldUseAmoledDark: Boolean -> + putThemeUseAmoledDark(shouldUseAmoledDark) + .launchIn(windowCoroutineScope) + Unit + } + + SettingIi( + search = SettingIi.Search( + group = "color_scheme", + tokens = listOf( + "schema", + "color", + "theme", + "dark", + "light", + "black", + ), + ), + ) { + SettingThemeUseAmoledDark( + checked = useAmoledDark, + onCheckedChange = onCheckedChange, + ) + } +} + +@Composable +private fun SettingThemeUseAmoledDark( + checked: Boolean, + onCheckedChange: ((Boolean) -> Unit)?, +) { + FlatItem( + leading = icon(Icons.Stub), + trailing = { + Switch( + checked = checked, + enabled = onCheckedChange != null, + onCheckedChange = onCheckedChange, + ) + }, + title = { + Text( + text = stringResource(Res.strings.pref_item_color_scheme_amoled_dark_title), + ) + }, + onClick = onCheckedChange?.partially1(!checked), + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingTwoPanelLayoutLandscape.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingTwoPanelLayoutLandscape.kt new file mode 100644 index 00000000..946a9ad6 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingTwoPanelLayoutLandscape.kt @@ -0,0 +1,80 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.foundation.layout.RowScope +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Tablet +import androidx.compose.material3.Switch +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import arrow.core.partially1 +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.usecase.GetAllowTwoPanelLayoutInLandscape +import com.artemchep.keyguard.common.usecase.PutAllowTwoPanelLayoutInLandscape +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItem +import com.artemchep.keyguard.ui.icons.icon +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.flow.map +import org.kodein.di.DirectDI +import org.kodein.di.instance + +fun settingTwoPanelLayoutLandscapeProvider( + directDI: DirectDI, +) = settingTwoPanelLayoutLandscapeProvider( + getAllowTwoPanelLayoutInLandscape = directDI.instance(), + putAllowTwoPanelLayoutInLandscape = directDI.instance(), + windowCoroutineScope = directDI.instance(), +) + +fun settingTwoPanelLayoutLandscapeProvider( + getAllowTwoPanelLayoutInLandscape: GetAllowTwoPanelLayoutInLandscape, + putAllowTwoPanelLayoutInLandscape: PutAllowTwoPanelLayoutInLandscape, + windowCoroutineScope: WindowCoroutineScope, +): SettingComponent = getAllowTwoPanelLayoutInLandscape().map { allow -> + val onCheckedChange = { shouldAllow: Boolean -> + putAllowTwoPanelLayoutInLandscape(shouldAllow) + .launchIn(windowCoroutineScope) + Unit + } + + SettingIi( + search = SettingIi.Search( + group = "layout", + tokens = listOf( + "layout", + "two", + "panel", + "landscape", + ), + ), + ) { + SettingTwoPanelLayoutLandscape( + checked = allow, + onCheckedChange = onCheckedChange, + ) + } +} + +@Composable +private fun SettingTwoPanelLayoutLandscape( + checked: Boolean, + onCheckedChange: ((Boolean) -> Unit)?, +) { + FlatItem( + leading = icon(Icons.Outlined.Tablet), + trailing = { + Switch( + checked = checked, + enabled = onCheckedChange != null, + onCheckedChange = onCheckedChange, + ) + }, + title = { + Text( + text = stringResource(Res.strings.pref_item_allow_two_panel_layout_in_landscape_title), + ) + }, + onClick = onCheckedChange?.partially1(!checked), + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingTwoPanelLayoutPortrait.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingTwoPanelLayoutPortrait.kt new file mode 100644 index 00000000..c1a5d04d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingTwoPanelLayoutPortrait.kt @@ -0,0 +1,80 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.foundation.layout.RowScope +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.PhoneAndroid +import androidx.compose.material3.Switch +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import arrow.core.partially1 +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.usecase.GetAllowTwoPanelLayoutInPortrait +import com.artemchep.keyguard.common.usecase.PutAllowTwoPanelLayoutInPortrait +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItem +import com.artemchep.keyguard.ui.icons.icon +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.flow.map +import org.kodein.di.DirectDI +import org.kodein.di.instance + +fun settingTwoPanelLayoutPortraitProvider( + directDI: DirectDI, +) = settingTwoPanelLayoutPortraitProvider( + getAllowTwoPanelLayoutInPortrait = directDI.instance(), + putAllowTwoPanelLayoutInPortrait = directDI.instance(), + windowCoroutineScope = directDI.instance(), +) + +fun settingTwoPanelLayoutPortraitProvider( + getAllowTwoPanelLayoutInPortrait: GetAllowTwoPanelLayoutInPortrait, + putAllowTwoPanelLayoutInPortrait: PutAllowTwoPanelLayoutInPortrait, + windowCoroutineScope: WindowCoroutineScope, +): SettingComponent = getAllowTwoPanelLayoutInPortrait().map { allow -> + val onCheckedChange = { shouldAllow: Boolean -> + putAllowTwoPanelLayoutInPortrait(shouldAllow) + .launchIn(windowCoroutineScope) + Unit + } + + SettingIi( + search = SettingIi.Search( + group = "layout", + tokens = listOf( + "layout", + "two", + "panel", + "portrait", + ), + ), + ) { + SettingTwoPanelLayoutPortrait( + checked = allow, + onCheckedChange = onCheckedChange, + ) + } +} + +@Composable +private fun SettingTwoPanelLayoutPortrait( + checked: Boolean, + onCheckedChange: ((Boolean) -> Unit)?, +) { + FlatItem( + leading = icon(Icons.Outlined.PhoneAndroid), + trailing = { + Switch( + checked = checked, + enabled = onCheckedChange != null, + onCheckedChange = onCheckedChange, + ) + }, + title = { + Text( + text = stringResource(Res.strings.pref_item_allow_two_panel_layout_in_portrait_title), + ) + }, + onClick = onCheckedChange?.partially1(!checked), + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingUseExternalBrowser.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingUseExternalBrowser.kt new file mode 100644 index 00000000..9ea834d9 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingUseExternalBrowser.kt @@ -0,0 +1,86 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.foundation.layout.RowScope +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.OpenInBrowser +import androidx.compose.material3.Switch +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import arrow.core.partially1 +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.usecase.GetUseExternalBrowser +import com.artemchep.keyguard.common.usecase.PutUseExternalBrowser +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.platform.CurrentPlatform +import com.artemchep.keyguard.platform.Platform +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItem +import com.artemchep.keyguard.ui.icons.icon +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.flow.map +import org.kodein.di.DirectDI +import org.kodein.di.instance + +fun settingUseExternalBrowserProvider( + directDI: DirectDI, +) = settingUseExternalBrowserProvider( + getUseExternalBrowser = directDI.instance(), + putUseExternalBrowser = directDI.instance(), + windowCoroutineScope = directDI.instance(), +) + +fun settingUseExternalBrowserProvider( + getUseExternalBrowser: GetUseExternalBrowser, + putUseExternalBrowser: PutUseExternalBrowser, + windowCoroutineScope: WindowCoroutineScope, +): SettingComponent = getUseExternalBrowser().map { useExtenalBrowser -> + val onCheckedChange = { shouldUseExternalBrowser: Boolean -> + putUseExternalBrowser(shouldUseExternalBrowser) + .launchIn(windowCoroutineScope) + Unit + } + + if (CurrentPlatform is Platform.Mobile) { + SettingIi( + search = SettingIi.Search( + group = "ux", + tokens = listOf( + "browser", + "links", + "chrome", + "tabs", + ), + ), + ) { + SettingUseExternalBrowser( + checked = useExtenalBrowser, + onCheckedChange = onCheckedChange, + ) + } + } else { + null + } +} + +@Composable +private fun SettingUseExternalBrowser( + checked: Boolean, + onCheckedChange: ((Boolean) -> Unit)?, +) { + FlatItem( + leading = icon(Icons.Outlined.OpenInBrowser), + trailing = { + Switch( + checked = checked, + enabled = onCheckedChange != null, + onCheckedChange = onCheckedChange, + ) + }, + title = { + Text( + text = stringResource(Res.strings.pref_item_open_links_in_external_browser_title), + ) + }, + onClick = onCheckedChange?.partially1(!checked), + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingVaultLock.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingVaultLock.kt new file mode 100644 index 00000000..f6a055e8 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingVaultLock.kt @@ -0,0 +1,57 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.foundation.layout.RowScope +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Lock +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.usecase.ClearVaultSession +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.feature.home.vault.component.VaultViewButtonItem +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.icons.icon +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.flow.flowOf +import org.kodein.di.DirectDI +import org.kodein.di.instance + +fun settingVaultLockProvider( + directDI: DirectDI, +) = settingVaultLockProvider( + clearVaultSession = directDI.instance(), + windowCoroutineScope = directDI.instance(), +) + +fun settingVaultLockProvider( + clearVaultSession: ClearVaultSession, + windowCoroutineScope: WindowCoroutineScope, +): SettingComponent = kotlin.run { + val item = SettingIi( + search = SettingIi.Search( + group = "lock", + tokens = listOf( + "vault", + "lock", + ), + ), + ) { + SettingVaultLock( + onClick = { + clearVaultSession() + .launchIn(windowCoroutineScope) + }, + ) + } + flowOf(item) +} + +@Composable +fun SettingVaultLock( + onClick: () -> Unit, +) { + VaultViewButtonItem( + leading = icon(Icons.Outlined.Lock), + text = stringResource(Res.strings.pref_item_lock_vault_title), + onClick = onClick, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingVaultLockAfterReboot.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingVaultLockAfterReboot.kt new file mode 100644 index 00000000..4604eab9 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingVaultLockAfterReboot.kt @@ -0,0 +1,94 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.foundation.layout.RowScope +import androidx.compose.material.icons.Icons +import androidx.compose.material3.Switch +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import arrow.core.partially1 +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.usecase.GetVaultLockAfterReboot +import com.artemchep.keyguard.common.usecase.GetVaultPersist +import com.artemchep.keyguard.common.usecase.PutVaultLockAfterReboot +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.ExpandedIfNotEmpty +import com.artemchep.keyguard.ui.FlatItem +import com.artemchep.keyguard.ui.icons.Stub +import com.artemchep.keyguard.ui.icons.icon +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.flow.combine +import org.kodein.di.DirectDI +import org.kodein.di.instance + +fun settingVaultLockAfterRebootProvider( + directDI: DirectDI, +) = settingVaultLockAfterRebootProvider( + getVaultPersist = directDI.instance(), + getVaultLockAfterReboot = directDI.instance(), + putVaultLockAfterReboot = directDI.instance(), + windowCoroutineScope = directDI.instance(), +) + +fun settingVaultLockAfterRebootProvider( + getVaultPersist: GetVaultPersist, + getVaultLockAfterReboot: GetVaultLockAfterReboot, + putVaultLockAfterReboot: PutVaultLockAfterReboot, + windowCoroutineScope: WindowCoroutineScope, +): SettingComponent = combine( + getVaultPersist(), + getVaultLockAfterReboot(), +) { persist, lockAfterReboot -> + val onCheckedChange = { shouldLockAfterReboot: Boolean -> + putVaultLockAfterReboot(shouldLockAfterReboot) + .launchIn(windowCoroutineScope) + Unit + } + + SettingIi( + search = SettingIi.Search( + group = "lock", + tokens = listOf( + "vault", + "lock", + "reboot", + ), + ), + ) { + // If the vault is not stored on a disk then it by + // definition cannot survive a reboot. + ExpandedIfNotEmpty( + valueOrNull = Unit.takeIf { persist }, + ) { + SettingLockAfterReboot( + checked = lockAfterReboot, + onCheckedChange = null, + ) + } + } +} + +@Composable +private fun SettingLockAfterReboot( + checked: Boolean, + onCheckedChange: ((Boolean) -> Unit)?, +) { + FlatItem( + leading = icon(Icons.Stub), + trailing = { + Switch( + checked = checked, + enabled = onCheckedChange != null, + onCheckedChange = onCheckedChange, + ) + }, + title = { + Text(stringResource(Res.strings.pref_item_lock_vault_after_reboot_title)) + }, + text = { + val text = stringResource(Res.strings.pref_item_lock_vault_after_reboot_text) + Text(text) + }, + onClick = onCheckedChange?.partially1(!checked), + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingVaultLockAfterScreenOff.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingVaultLockAfterScreenOff.kt new file mode 100644 index 00000000..030c87a5 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingVaultLockAfterScreenOff.kt @@ -0,0 +1,87 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.foundation.layout.RowScope +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.MobileOff +import androidx.compose.material3.Switch +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import arrow.core.partially1 +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.usecase.GetVaultLockAfterScreenOff +import com.artemchep.keyguard.common.usecase.GetVaultPersist +import com.artemchep.keyguard.common.usecase.PutVaultLockAfterScreenOff +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItem +import com.artemchep.keyguard.ui.icons.icon +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.flow.combine +import org.kodein.di.DirectDI +import org.kodein.di.instance + +fun settingVaultLockAfterScreenOffProvider( + directDI: DirectDI, +) = settingVaultLockAfterScreenOffProvider( + getVaultPersist = directDI.instance(), + getVaultLockAfterScreenOff = directDI.instance(), + putVaultLockAfterScreenOff = directDI.instance(), + windowCoroutineScope = directDI.instance(), +) + +fun settingVaultLockAfterScreenOffProvider( + getVaultPersist: GetVaultPersist, + getVaultLockAfterScreenOff: GetVaultLockAfterScreenOff, + putVaultLockAfterScreenOff: PutVaultLockAfterScreenOff, + windowCoroutineScope: WindowCoroutineScope, +): SettingComponent = combine( + getVaultPersist(), + getVaultLockAfterScreenOff(), +) { persist, screenLock -> + val onCheckedChange = { shouldScreenLock: Boolean -> + putVaultLockAfterScreenOff(shouldScreenLock) + .launchIn(windowCoroutineScope) + Unit + } + + SettingIi( + search = SettingIi.Search( + group = "lock", + tokens = listOf( + "vault", + "lock", + "screen", + ), + ), + ) { + SettingLockAfterScreenOff( + checked = screenLock, + onCheckedChange = onCheckedChange.takeUnless { persist }, + ) + } +} + +@Composable +private fun SettingLockAfterScreenOff( + checked: Boolean, + onCheckedChange: ((Boolean) -> Unit)?, +) { + FlatItem( + leading = icon(Icons.Outlined.MobileOff), + trailing = { + Switch( + checked = checked, + enabled = onCheckedChange != null, + onCheckedChange = onCheckedChange, + ) + }, + title = { + Text(stringResource(Res.strings.pref_item_lock_vault_after_screen_off_title)) + }, + text = { + val text = stringResource(Res.strings.pref_item_lock_vault_after_screen_off_text) + Text(text) + }, + onClick = onCheckedChange?.partially1(!checked), + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingVaultLockAfterTimeout.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingVaultLockAfterTimeout.kt new file mode 100644 index 00000000..fdeae938 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingVaultLockAfterTimeout.kt @@ -0,0 +1,109 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.foundation.layout.RowScope +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Timer +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.usecase.GetVaultLockAfterTimeout +import com.artemchep.keyguard.common.usecase.GetVaultLockAfterTimeoutVariants +import com.artemchep.keyguard.common.usecase.PutVaultLockAfterTimeout +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.feature.localization.textResource +import com.artemchep.keyguard.platform.LeContext +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatDropdown +import com.artemchep.keyguard.ui.FlatItemAction +import com.artemchep.keyguard.ui.FlatItemTextContent +import com.artemchep.keyguard.ui.icons.icon +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.flow.combine +import org.kodein.di.DirectDI +import org.kodein.di.instance +import kotlin.time.Duration + +fun settingVaultLockAfterTimeoutProvider( + directDI: DirectDI, +) = settingVaultLockAfterTimeoutProvider( + getVaultLockAfterTimeout = directDI.instance(), + getVaultLockAfterTimeoutVariants = directDI.instance(), + putVaultLockAfterTimeout = directDI.instance(), + windowCoroutineScope = directDI.instance(), + context = directDI.instance(), +) + +fun settingVaultLockAfterTimeoutProvider( + getVaultLockAfterTimeout: GetVaultLockAfterTimeout, + getVaultLockAfterTimeoutVariants: GetVaultLockAfterTimeoutVariants, + putVaultLockAfterTimeout: PutVaultLockAfterTimeout, + windowCoroutineScope: WindowCoroutineScope, + context: LeContext, +): SettingComponent = combine( + getVaultLockAfterTimeout(), + getVaultLockAfterTimeoutVariants(), +) { timeout, variants -> + val text = getLockAfterDurationTitle(timeout, context) + val dropdown = variants + .map { duration -> + val title = getLockAfterDurationTitle(duration, context) + FlatItemAction( + title = title, + onClick = { + putVaultLockAfterTimeout(duration) + .launchIn(windowCoroutineScope) + }, + ) + } + + SettingIi( + search = SettingIi.Search( + group = "lock", + tokens = listOf( + "vault", + "lock", + "timeout", + ), + ), + ) { + SettingLockAfterTimeout( + text = text, + dropdown = dropdown, + ) + } +} + +private fun getLockAfterDurationTitle(duration: Duration, context: LeContext) = when (duration) { + Duration.ZERO -> textResource( + Res.strings.pref_item_lock_vault_after_delay_immediately_text, + context, + ) + + Duration.INFINITE -> textResource( + Res.strings.pref_item_lock_vault_after_delay_never_text, + context, + ) + + else -> duration.toString() +} + +@Composable +fun SettingLockAfterTimeout( + text: String, + dropdown: List, +) { + FlatDropdown( + leading = icon(Icons.Outlined.Timer), + dropdown = dropdown, + content = { + FlatItemTextContent( + title = { + Text(stringResource(Res.strings.pref_item_lock_vault_after_delay_title)) + }, + text = { + Text(text) + }, + ) + }, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingVaultPersist.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingVaultPersist.kt new file mode 100644 index 00000000..241e85ba --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingVaultPersist.kt @@ -0,0 +1,121 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.animation.animateContentSize +import androidx.compose.foundation.layout.RowScope +import androidx.compose.foundation.layout.padding +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Key +import androidx.compose.material.icons.outlined.Memory +import androidx.compose.material.icons.outlined.Storage +import androidx.compose.material3.Switch +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import arrow.core.partially1 +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.usecase.GetVaultPersist +import com.artemchep.keyguard.common.usecase.PutVaultPersist +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.ExpandedIfNotEmpty +import com.artemchep.keyguard.ui.FlatItemLayout +import com.artemchep.keyguard.ui.FlatItemTextContent +import com.artemchep.keyguard.ui.FlatSimpleNote +import com.artemchep.keyguard.ui.SimpleNote +import com.artemchep.keyguard.ui.icons.icon +import com.artemchep.keyguard.ui.theme.Dimens +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.flow.map +import org.kodein.di.DirectDI +import org.kodein.di.instance + +fun settingVaultPersistProvider( + directDI: DirectDI, +) = settingVaultPersistProvider( + getVaultPersist = directDI.instance(), + putVaultPersist = directDI.instance(), + windowCoroutineScope = directDI.instance(), +) + +fun settingVaultPersistProvider( + getVaultPersist: GetVaultPersist, + putVaultPersist: PutVaultPersist, + windowCoroutineScope: WindowCoroutineScope, +): SettingComponent = getVaultPersist().map { persist -> + val onCheckedChange = { shouldPersist: Boolean -> + putVaultPersist(shouldPersist) + .launchIn(windowCoroutineScope) + Unit + } + + SettingIi( + search = SettingIi.Search( + group = "lock", + tokens = listOf( + "vault", + "lock", + "persist", + "disk", + ), + ), + ) { + SettingVaultPersist( + checked = persist, + onCheckedChange = onCheckedChange, + ) + } +} + +@Composable +private fun SettingVaultPersist( + checked: Boolean, + onCheckedChange: ((Boolean) -> Unit)?, +) { + val secondaryIcon = if (checked) Icons.Outlined.Memory else Icons.Outlined.Storage + FlatItemLayout( + leading = icon(Icons.Outlined.Key, secondaryIcon), + trailing = { + Switch( + checked = checked, + enabled = onCheckedChange != null, + onCheckedChange = onCheckedChange, + ) + }, + content = { + FlatItemTextContent( + title = { + Text(stringResource(Res.strings.pref_item_persist_vault_key_title)) + }, + text = { + val text = if (checked) { + stringResource(Res.strings.pref_item_persist_vault_key_text_on) + } else { + stringResource(Res.strings.pref_item_persist_vault_key_text_off) + } + Text( + modifier = Modifier + .animateContentSize(), + text = text, + ) + }, + ) + }, + onClick = onCheckedChange?.partially1(!checked), + ) + + ExpandedIfNotEmpty( + valueOrNull = Unit.takeIf { checked }, + ) { + FlatSimpleNote( + modifier = Modifier + .padding( + top = 8.dp, + bottom = 8.dp, + start = Dimens.horizontalPadding * 1 + 24.dp, + ), + type = SimpleNote.Type.WARNING, + text = stringResource(Res.strings.pref_item_persist_vault_key_note), + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingWebsiteIcons.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingWebsiteIcons.kt new file mode 100644 index 00000000..1198205d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingWebsiteIcons.kt @@ -0,0 +1,130 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.RowScope +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.material.icons.Icons +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Switch +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import arrow.core.partially1 +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.usecase.GetWebsiteIcons +import com.artemchep.keyguard.common.usecase.PutWebsiteIcons +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.feature.navigation.LocalNavigationController +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItemLayout +import com.artemchep.keyguard.ui.FlatItemTextContent +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.icons.KeyguardWebsite +import com.artemchep.keyguard.ui.icons.icon +import com.artemchep.keyguard.ui.theme.combineAlpha +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.flow.map +import org.kodein.di.DirectDI +import org.kodein.di.instance + +fun settingWebsiteIconsProvider( + directDI: DirectDI, +) = settingWebsiteIconsProvider( + getWebsiteIcons = directDI.instance(), + putWebsiteIcons = directDI.instance(), + windowCoroutineScope = directDI.instance(), +) + +fun settingWebsiteIconsProvider( + getWebsiteIcons: GetWebsiteIcons, + putWebsiteIcons: PutWebsiteIcons, + windowCoroutineScope: WindowCoroutineScope, +): SettingComponent = getWebsiteIcons().map { websiteIcons -> + val onCheckedChange = { shouldWebsiteIcons: Boolean -> + putWebsiteIcons(shouldWebsiteIcons) + .launchIn(windowCoroutineScope) + Unit + } + + SettingIi( + search = SettingIi.Search( + group = "icon", + tokens = listOf( + "icon", + "website", + ), + ), + ) { + val navigationController by rememberUpdatedState(LocalNavigationController.current) + SettingMarkdown( + checked = websiteIcons, + onCheckedChange = onCheckedChange, + onLearnMore = { + val intent = NavigationIntent.NavigateToBrowser( + url = "https://bitwarden.com/help/website-icons/", + ) + navigationController.queue(intent) + }, + ) + } +} + +@Composable +private fun SettingMarkdown( + checked: Boolean, + onCheckedChange: ((Boolean) -> Unit)?, + onLearnMore: (() -> Unit)?, +) { + Column { + FlatItemLayout( + leading = icon(Icons.Outlined.KeyguardWebsite), + trailing = { + Switch( + checked = checked, + enabled = onCheckedChange != null, + onCheckedChange = onCheckedChange, + ) + }, + content = { + FlatItemTextContent( + title = { + Text( + text = stringResource(Res.strings.pref_item_load_website_icons_title), + ) + }, + ) + Spacer( + modifier = Modifier + .height(8.dp), + ) + Text( + color = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + style = MaterialTheme.typography.bodySmall, + text = stringResource(Res.strings.pref_item_load_website_icons_text), + ) + }, + onClick = onCheckedChange?.partially1(!checked), + ) + TextButton( + modifier = Modifier + .padding(horizontal = 46.dp), + enabled = onLearnMore != null, + onClick = { + onLearnMore?.invoke() + }, + ) { + Text( + text = stringResource(Res.strings.learn_more), + ) + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingWriteAccess.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingWriteAccess.kt new file mode 100644 index 00000000..4206b7f3 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingWriteAccess.kt @@ -0,0 +1,70 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import androidx.compose.material3.Switch +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import arrow.core.partially1 +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.usecase.GetPurchased +import com.artemchep.keyguard.common.usecase.GetWriteAccess +import com.artemchep.keyguard.common.usecase.PutWriteAccess +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.ui.FlatItem +import kotlinx.coroutines.flow.combine +import org.kodein.di.DirectDI +import org.kodein.di.instance + +fun settingWriteAccessProvider( + directDI: DirectDI, +) = settingWriteAccessProvider( + getWriteAccess = directDI.instance(), + putWriteAccess = directDI.instance(), + getPurchased = directDI.instance(), + windowCoroutineScope = directDI.instance(), +) + +fun settingWriteAccessProvider( + getWriteAccess: GetWriteAccess, + putWriteAccess: PutWriteAccess, + getPurchased: GetPurchased, + windowCoroutineScope: WindowCoroutineScope, +): SettingComponent = combine( + getPurchased(), + getWriteAccess(), +) { purchased, writeAccess -> + val onCheckedChange = { shouldHaveWriteAccess: Boolean -> + putWriteAccess(shouldHaveWriteAccess) + .launchIn(windowCoroutineScope) + Unit + } + + SettingIi { + SettingWriteAccess( + checked = writeAccess, + onCheckedChange = onCheckedChange.takeIf { purchased }, + ) + } +} + +@Composable +private fun SettingWriteAccess( + checked: Boolean, + onCheckedChange: ((Boolean) -> Unit)?, +) { + FlatItem( + trailing = { + Switch( + checked = checked, + enabled = onCheckedChange != null, + onCheckedChange = onCheckedChange, + ) + }, + title = { + Text("Save edited changes") + }, + text = { + Text("May cause a partial data loss, be careful!") + }, + onClick = onCheckedChange?.partially1(!checked), + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/debug/DebugSettingsRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/debug/DebugSettingsRoute.kt new file mode 100644 index 00000000..aff4f74d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/debug/DebugSettingsRoute.kt @@ -0,0 +1,11 @@ +package com.artemchep.keyguard.feature.home.settings.debug + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.navigation.Route + +object DebugSettingsRoute : Route { + @Composable + override fun Content() { + DebugSettingsScreen() + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/debug/DebugSettingsScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/debug/DebugSettingsScreen.kt new file mode 100644 index 00000000..0299221c --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/debug/DebugSettingsScreen.kt @@ -0,0 +1,43 @@ +package com.artemchep.keyguard.feature.home.settings.debug + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.home.settings.Setting +import com.artemchep.keyguard.feature.home.settings.SettingPaneContent +import com.artemchep.keyguard.feature.home.settings.SettingPaneItem +import com.artemchep.keyguard.res.Res +import dev.icerock.moko.resources.compose.stringResource + +@Composable +fun DebugSettingsScreen() { + SettingPaneContent( + title = stringResource(Res.strings.settings_dev_header_title), + items = listOf( + SettingPaneItem.Group( + key = "ui", + title = "UI", + list = listOf( + SettingPaneItem.Item(Setting.EMIT_MESSAGE), + SettingPaneItem.Item(Setting.CLEAR_CACHE), + SettingPaneItem.Item(Setting.LAUNCH_APP_PICKER), + SettingPaneItem.Item(Setting.LAUNCH_YUBIKEY), + SettingPaneItem.Item(Setting.CRASH), + SettingPaneItem.Item(Setting.SCREEN_DELAY), + ), + ), + SettingPaneItem.Group( + key = "billing", + title = "Billing", + list = listOf( + SettingPaneItem.Item(Setting.SUBSCRIPTIONS_DEBUG), + ), + ), + SettingPaneItem.Group( + key = "security", + title = "Security", + list = listOf( + SettingPaneItem.Item(Setting.ROTATE_DEVICE_ID), + ), + ), + ), + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/display/UiSettingsRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/display/UiSettingsRoute.kt new file mode 100644 index 00000000..fb987d1c --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/display/UiSettingsRoute.kt @@ -0,0 +1,11 @@ +package com.artemchep.keyguard.feature.home.settings.display + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.navigation.Route + +object UiSettingsRoute : Route { + @Composable + override fun Content() { + UiSettingsScreen() + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/display/UiSettingsScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/display/UiSettingsScreen.kt new file mode 100644 index 00000000..fc69c5bc --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/display/UiSettingsScreen.kt @@ -0,0 +1,56 @@ +package com.artemchep.keyguard.feature.home.settings.display + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.home.settings.Setting +import com.artemchep.keyguard.feature.home.settings.SettingPaneContent +import com.artemchep.keyguard.feature.home.settings.SettingPaneItem +import com.artemchep.keyguard.res.Res +import dev.icerock.moko.resources.compose.stringResource + +@Composable +fun UiSettingsScreen() { + SettingPaneContent( + title = stringResource(Res.strings.settings_appearance_header_title), + items = listOf( + SettingPaneItem.Group( + key = "locale", + list = listOf( + SettingPaneItem.Item(Setting.LOCALE), + ), + ), + SettingPaneItem.Group( + key = "color_scheme", + list = listOf( + SettingPaneItem.Item(Setting.COLOR_SCHEME), + SettingPaneItem.Item(Setting.COLOR_SCHEME_AMOLED_DARK), + SettingPaneItem.Item(Setting.COLOR_ACCENT), + SettingPaneItem.Item(Setting.FONT), + SettingPaneItem.Item(Setting.MARKDOWN), + SettingPaneItem.Item(Setting.NAV_ANIMATION), + SettingPaneItem.Item(Setting.NAV_LABEL), + ), + ), + SettingPaneItem.Group( + key = "icons", + list = listOf( + SettingPaneItem.Item(Setting.APP_ICONS), + SettingPaneItem.Item(Setting.WEBSITE_ICONS), + ), + ), + SettingPaneItem.Group( + key = "experience", + list = listOf( + SettingPaneItem.Item(Setting.USE_EXTERNAL_BROWSER), + SettingPaneItem.Item(Setting.KEEP_SCREEN_ON), + ), + ), + SettingPaneItem.Group( + key = "layout", + list = listOf( + SettingPaneItem.Item(Setting.TWO_PANEL_LAYOUT_PORTRAIT), + SettingPaneItem.Item(Setting.TWO_PANEL_LAYOUT_LANDSCAPE), + ), + ), + ), + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/experimental/ExperimentalSettingsRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/experimental/ExperimentalSettingsRoute.kt new file mode 100644 index 00000000..ab55ced6 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/experimental/ExperimentalSettingsRoute.kt @@ -0,0 +1,11 @@ +package com.artemchep.keyguard.feature.home.settings.experimental + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.navigation.Route + +object ExperimentalSettingsRoute : Route { + @Composable + override fun Content() { + ExperimentalSettingsScreen() + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/experimental/ExperimentalSettingsScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/experimental/ExperimentalSettingsScreen.kt new file mode 100644 index 00000000..e1b11643 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/experimental/ExperimentalSettingsScreen.kt @@ -0,0 +1,18 @@ +package com.artemchep.keyguard.feature.home.settings.experimental + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.home.settings.Setting +import com.artemchep.keyguard.feature.home.settings.SettingPaneContent +import com.artemchep.keyguard.feature.home.settings.SettingPaneItem +import com.artemchep.keyguard.res.Res +import dev.icerock.moko.resources.compose.stringResource + +@Composable +fun ExperimentalSettingsScreen() { + SettingPaneContent( + title = stringResource(Res.strings.settings_experimental_header_title), + items = listOf( + SettingPaneItem.Item(Setting.WRITE_ACCESS), + ), + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/notifications/NotificationsSettingsRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/notifications/NotificationsSettingsRoute.kt new file mode 100644 index 00000000..c3a86fb0 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/notifications/NotificationsSettingsRoute.kt @@ -0,0 +1,11 @@ +package com.artemchep.keyguard.feature.home.settings.notifications + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.navigation.Route + +object NotificationsSettingsRoute : Route { + @Composable + override fun Content() { + NotificationsSettingsScreen() + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/notifications/NotificationsSettingsScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/notifications/NotificationsSettingsScreen.kt new file mode 100644 index 00000000..61cd95fb --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/notifications/NotificationsSettingsScreen.kt @@ -0,0 +1,19 @@ +package com.artemchep.keyguard.feature.home.settings.notifications + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.home.settings.Setting +import com.artemchep.keyguard.feature.home.settings.SettingPaneContent +import com.artemchep.keyguard.feature.home.settings.SettingPaneItem +import com.artemchep.keyguard.res.Res +import dev.icerock.moko.resources.compose.stringResource + +@Composable +fun NotificationsSettingsScreen() { + SettingPaneContent( + title = stringResource(Res.strings.settings_notifications_header_title), + items = listOf( + SettingPaneItem.Item(Setting.PERMISSION_CAMERA), + SettingPaneItem.Item(Setting.PERMISSION_POST_NOTIFICATION), + ), + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/other/OtherSettingsRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/other/OtherSettingsRoute.kt new file mode 100644 index 00000000..8be9bba4 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/other/OtherSettingsRoute.kt @@ -0,0 +1,11 @@ +package com.artemchep.keyguard.feature.home.settings.other + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.navigation.Route + +object OtherSettingsRoute : Route { + @Composable + override fun Content() { + OtherSettingsScreen() + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/other/OtherSettingsScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/other/OtherSettingsScreen.kt new file mode 100644 index 00000000..7fcd3fef --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/other/OtherSettingsScreen.kt @@ -0,0 +1,52 @@ +package com.artemchep.keyguard.feature.home.settings.other + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.home.settings.Setting +import com.artemchep.keyguard.feature.home.settings.SettingPaneContent +import com.artemchep.keyguard.feature.home.settings.SettingPaneItem +import com.artemchep.keyguard.res.Res +import dev.icerock.moko.resources.compose.stringResource + +@Composable +fun OtherSettingsScreen() { + SettingPaneContent( + title = stringResource(Res.strings.settings_other_header_title), + items = listOf( + SettingPaneItem.Group( + key = "features", + list = listOf( + SettingPaneItem.Item(Setting.FEATURES_OVERVIEW), + ), + ), + SettingPaneItem.Group( + key = "security", + list = listOf( + SettingPaneItem.Item(Setting.CRASHLYTICS), + SettingPaneItem.Item(Setting.DATA_SAFETY), + SettingPaneItem.Item(Setting.PERMISSION_DETAILS), + ), + ), +// SettingPaneItem.Group( +// key = "exp", +// list = listOf( +// SettingPaneItem.Item(Setting.EXPERIMENTAL), +// ), +// ), + SettingPaneItem.Group( + key = "social", + list = listOf( + SettingPaneItem.Item(Setting.RATE_APP), + SettingPaneItem.Item(Setting.ABOUT_TEAM), + SettingPaneItem.Item(Setting.REDDIT), + SettingPaneItem.Item(Setting.GITHUB), + SettingPaneItem.Item(Setting.CROWDIN), + SettingPaneItem.Item(Setting.FEEDBACK_APP), + SettingPaneItem.Item(Setting.OPEN_SOURCE_LICENSES), + SettingPaneItem.Item(Setting.PRIVACY_POLICY), + ), + ), + SettingPaneItem.Item(Setting.ABOUT_APP), + SettingPaneItem.Item(Setting.ABOUT_APP_BUILD_DATE), + ), + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/permissions/PermissionsSettingsRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/permissions/PermissionsSettingsRoute.kt new file mode 100644 index 00000000..b782eb93 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/permissions/PermissionsSettingsRoute.kt @@ -0,0 +1,11 @@ +package com.artemchep.keyguard.feature.home.settings.permissions + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.navigation.Route + +object PermissionsSettingsRoute : Route { + @Composable + override fun Content() { + PermissionsSettingsScreen() + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/permissions/PermissionsSettingsScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/permissions/PermissionsSettingsScreen.kt new file mode 100644 index 00000000..e126cf0d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/permissions/PermissionsSettingsScreen.kt @@ -0,0 +1,30 @@ +package com.artemchep.keyguard.feature.home.settings.permissions + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.home.settings.Setting +import com.artemchep.keyguard.feature.home.settings.SettingPaneContent +import com.artemchep.keyguard.feature.home.settings.SettingPaneItem +import com.artemchep.keyguard.res.Res +import dev.icerock.moko.resources.compose.stringResource + +@Composable +fun PermissionsSettingsScreen() { + SettingPaneContent( + title = stringResource(Res.strings.settings_permissions_header_title), + items = listOf( + SettingPaneItem.Group( + key = "runtime", + list = listOf( + SettingPaneItem.Item(Setting.PERMISSION_CAMERA), + SettingPaneItem.Item(Setting.PERMISSION_POST_NOTIFICATION), + ), + ), + SettingPaneItem.Group( + key = "other", + list = listOf( + SettingPaneItem.Item(Setting.PERMISSION_OTHER), + ), + ), + ), + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/search/SearchSettingsRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/search/SearchSettingsRoute.kt new file mode 100644 index 00000000..4cc122f6 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/search/SearchSettingsRoute.kt @@ -0,0 +1,11 @@ +package com.artemchep.keyguard.feature.home.settings.search + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.navigation.Route + +object SearchSettingsRoute : Route { + @Composable + override fun Content() { + SearchSettingsScreen() + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/search/SearchSettingsScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/search/SearchSettingsScreen.kt new file mode 100644 index 00000000..aa39b2a9 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/search/SearchSettingsScreen.kt @@ -0,0 +1,155 @@ +package com.artemchep.keyguard.feature.home.settings.search + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ExperimentalLayoutApi +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.heightIn +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.lazy.items +import androidx.compose.material.pullrefresh.pullRefresh +import androidx.compose.material.pullrefresh.rememberPullRefreshState +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.remember +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.input.nestedscroll.nestedScroll +import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.feature.EmptySearchView +import com.artemchep.keyguard.feature.home.vault.component.SearchTextField +import com.artemchep.keyguard.feature.navigation.NavigationIcon +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.DefaultProgressBar +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.ScaffoldLazyColumn +import com.artemchep.keyguard.ui.focus.FocusRequester2 +import com.artemchep.keyguard.ui.focus.focusRequester2 +import com.artemchep.keyguard.ui.pulltosearch.PullToSearch +import com.artemchep.keyguard.ui.theme.combineAlpha +import com.artemchep.keyguard.ui.toolbar.CustomToolbar +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.delay + +@Composable +fun SearchSettingsScreen() { + val state = produceSearchSettingsState() + SearchSettingsScreenContent( + state = state, + ) +} + +@OptIn(ExperimentalMaterial3Api::class, ExperimentalLayoutApi::class) +@Composable +fun SearchSettingsScreenContent( + state: SearchSettingsState, +) { + val focusRequester = remember { + FocusRequester2() + } + val pullRefreshState = rememberPullRefreshState( + refreshing = false, + onRefresh = { + focusRequester.requestFocus() + }, + ) + val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior() + + LaunchedEffect(focusRequester) { + delay(500L) + focusRequester.requestFocus() + } + + ScaffoldLazyColumn( + modifier = Modifier + .pullRefresh(pullRefreshState) + .nestedScroll(scrollBehavior.nestedScrollConnection), + topAppBarScrollBehavior = scrollBehavior, + topBar = { + CustomToolbar( + scrollBehavior = scrollBehavior, + ) { + Column { + Row( + modifier = Modifier + .heightIn(min = 64.dp), + verticalAlignment = Alignment.CenterVertically, + ) { + Spacer(Modifier.width(4.dp)) + NavigationIcon() + Spacer(Modifier.width(4.dp)) + Column( + modifier = Modifier + .weight(1f) + .align(Alignment.CenterVertically), + ) { + Text( + text = stringResource(Res.strings.settingssearch_header_subtitle), + style = MaterialTheme.typography.labelSmall, + color = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + overflow = TextOverflow.Ellipsis, + maxLines = 2, + ) + Text( + text = stringResource(Res.strings.settingssearch_header_title), + style = MaterialTheme.typography.titleMedium, + overflow = TextOverflow.Ellipsis, + maxLines = 1, + ) + } + Spacer(Modifier.width(4.dp)) + } + + SearchTextField( + modifier = Modifier + .focusRequester2(focusRequester), + text = state.query.state.value, + placeholder = stringResource(Res.strings.settingssearch_search_placeholder), + searchIcon = false, + leading = {}, + trailing = {}, + onTextChange = state.query.onChange, + onGoClick = null, + ) + } + } + }, + pullRefreshState = pullRefreshState, + overlay = { + DefaultProgressBar( + modifier = Modifier, + visible = false, + ) + + PullToSearch( + modifier = Modifier + .padding(contentPadding.value), + pullRefreshState = pullRefreshState, + ) + }, + ) { + val items = state.items + if (items.isEmpty()) { + item("empty") { + EmptySearchView() + } + } + + items( + items = items, + key = { it.key }, + ) { + when (it) { + is SearchSettingsState.Item.Settings -> it.content() + } + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/search/SearchSettingsState.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/search/SearchSettingsState.kt new file mode 100644 index 00000000..bb524fef --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/search/SearchSettingsState.kt @@ -0,0 +1,21 @@ +package com.artemchep.keyguard.feature.home.settings.search + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.mutableStateOf +import com.artemchep.keyguard.feature.auth.common.TextFieldModel2 + +data class SearchSettingsState( + val revision: Int = 0, + val query: TextFieldModel2 = TextFieldModel2(mutableStateOf("")), + val items: List = emptyList(), +) { + sealed interface Item { + val key: String + + data class Settings( + override val key: String, + val score: Float, + val content: @Composable () -> Unit, + ) : Item + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/search/SearchSettingsStateProducer.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/search/SearchSettingsStateProducer.kt new file mode 100644 index 00000000..496600bd --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/search/SearchSettingsStateProducer.kt @@ -0,0 +1,105 @@ +package com.artemchep.keyguard.feature.home.settings.search + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.common.usecase.GetCollections +import com.artemchep.keyguard.common.usecase.GetOrganizations +import com.artemchep.keyguard.common.util.flow.combineToList +import com.artemchep.keyguard.feature.auth.common.TextFieldModel2 +import com.artemchep.keyguard.feature.home.settings.hub +import com.artemchep.keyguard.feature.home.vault.search.findAlike +import com.artemchep.keyguard.feature.navigation.state.produceScreenState +import com.artemchep.keyguard.feature.search.search.SEARCH_DEBOUNCE +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.debounce +import kotlinx.coroutines.flow.map +import org.kodein.di.DirectDI +import org.kodein.di.compose.localDI +import org.kodein.di.direct +import org.kodein.di.instance + +@Composable +fun produceSearchSettingsState() = with(localDI().direct) { + produceSearchSettingsState( + directDI = this, + getOrganizations = instance(), + getCollections = instance(), + ) +} + +@Composable +fun produceSearchSettingsState( + directDI: DirectDI, + getOrganizations: GetOrganizations, + getCollections: GetCollections, +): SearchSettingsState = produceScreenState( + key = "settings_search", + initial = SearchSettingsState(), + args = arrayOf( + getOrganizations, + getCollections, + ), +) { + val querySink = mutablePersistedFlow("query") { "" } + val queryState = mutableComposeState(querySink) + + val queryFlow = querySink + .debounce(SEARCH_DEBOUNCE) + .map { query -> + query + .lowercase() + .split(" ") + } + .shareInScreenScope() + + val e = hub + .map { (key, component) -> + val flow = component(directDI) + flow + .combine(queryFlow) { item, query -> + val tokens = item?.search?.tokens + ?: return@combine null + val score = findAlike(tokens, query, ignoreCommonWords = false) + if (score < 0.1f) { + return@combine null + } + score to item + } + .map { pair -> + pair ?: return@map null + val score = pair.first + val item = pair.second + val content = item.content + if (item.search == null) { + return@map null + } + SearchSettingsState.Item.Settings( + key = key, + score = score, + content = content, + ) + } + } + .combineToList() + .map { + it + .filterNotNull() + .sortedByDescending { it.score } + } + .map { items -> + SearchSettingsState( + items = items, + ) + } + combine( + e, + querySink, + ) { a, b -> + a.copy( + query = TextFieldModel2( + state = queryState, + text = b, + onChange = queryState::value::set, + ), + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/security/SecuritySettingsRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/security/SecuritySettingsRoute.kt new file mode 100644 index 00000000..7dddf391 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/security/SecuritySettingsRoute.kt @@ -0,0 +1,11 @@ +package com.artemchep.keyguard.feature.home.settings.security + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.navigation.Route + +object SecuritySettingsRoute : Route { + @Composable + override fun Content() { + SecuritySettingsScreen() + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/security/SecuritySettingsScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/security/SecuritySettingsScreen.kt new file mode 100644 index 00000000..4519ef4d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/security/SecuritySettingsScreen.kt @@ -0,0 +1,49 @@ +package com.artemchep.keyguard.feature.home.settings.security + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.home.settings.Setting +import com.artemchep.keyguard.feature.home.settings.SettingPaneContent +import com.artemchep.keyguard.feature.home.settings.SettingPaneItem +import com.artemchep.keyguard.res.Res +import dev.icerock.moko.resources.compose.stringResource + +@Composable +fun SecuritySettingsScreen() { + SettingPaneContent( + title = stringResource(Res.strings.settings_security_header_title), + items = listOf( + SettingPaneItem.Item(Setting.VAULT_PERSIST), + SettingPaneItem.Item(Setting.VAULT_LOCK_AFTER_TIMEOUT), + SettingPaneItem.Item(Setting.VAULT_LOCK_AFTER_SCREEN_OFF), + SettingPaneItem.Item(Setting.VAULT_LOCK_AFTER_REBOOT), + SettingPaneItem.Item(Setting.VAULT_LOCK), + SettingPaneItem.Group( + key = "clipboard", + list = listOf( + SettingPaneItem.Item(Setting.CLIPBOARD_AUTO_REFRESH), + ), + ), + SettingPaneItem.Group( + key = "visuals", + list = listOf( + SettingPaneItem.Item(Setting.CONCEAL), + SettingPaneItem.Item(Setting.SCREENSHOTS), + SettingPaneItem.Item(Setting.WEBSITE_ICONS), + ), + ), + SettingPaneItem.Group( + key = "biometric", + list = listOf( + SettingPaneItem.Item(Setting.BIOMETRIC), + SettingPaneItem.Item(Setting.REQUIRE_MASTER_PASSWORD), + ), + ), + SettingPaneItem.Group( + key = "password", + list = listOf( + SettingPaneItem.Item(Setting.MASTER_PASSWORD), + ), + ), + ), + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/subscriptions/SubscriptionsSettingsRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/subscriptions/SubscriptionsSettingsRoute.kt new file mode 100644 index 00000000..acefb376 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/subscriptions/SubscriptionsSettingsRoute.kt @@ -0,0 +1,11 @@ +package com.artemchep.keyguard.feature.home.settings.subscriptions + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.navigation.Route + +object SubscriptionsSettingsRoute : Route { + @Composable + override fun Content() { + SubscriptionsSettingsScreen() + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/subscriptions/SubscriptionsSettingsScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/subscriptions/SubscriptionsSettingsScreen.kt new file mode 100644 index 00000000..c35fdecd --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/subscriptions/SubscriptionsSettingsScreen.kt @@ -0,0 +1,27 @@ +package com.artemchep.keyguard.feature.home.settings.subscriptions + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.home.settings.Setting +import com.artemchep.keyguard.feature.home.settings.SettingPaneContent +import com.artemchep.keyguard.feature.home.settings.SettingPaneItem +import com.artemchep.keyguard.res.Res +import dev.icerock.moko.resources.compose.stringResource + +@Composable +fun SubscriptionsSettingsScreen() { + SettingPaneContent( + title = stringResource(Res.strings.settings_subscriptions_header_title), + items = listOf( + SettingPaneItem.Item(Setting.SUBSCRIPTIONS), + SettingPaneItem.Group( + key = "other", + title = stringResource(Res.strings.misc), + list = listOf( + SettingPaneItem.Item(Setting.SUBSCRIPTIONS_IN_STORE), + SettingPaneItem.Item(Setting.FEEDBACK_APP), + SettingPaneItem.Item(Setting.APK), + ), + ), + ), + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/watchtower/WatchtowerSettingsRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/watchtower/WatchtowerSettingsRoute.kt new file mode 100644 index 00000000..bc5ba0eb --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/watchtower/WatchtowerSettingsRoute.kt @@ -0,0 +1,11 @@ +package com.artemchep.keyguard.feature.home.settings.watchtower + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.navigation.Route + +object WatchtowerSettingsRoute : Route { + @Composable + override fun Content() { + WatchtowerSettingsScreen() + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/watchtower/WatchtowerSettingsScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/watchtower/WatchtowerSettingsScreen.kt new file mode 100644 index 00000000..327a21a5 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/settings/watchtower/WatchtowerSettingsScreen.kt @@ -0,0 +1,19 @@ +package com.artemchep.keyguard.feature.home.settings.watchtower + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.home.settings.SettingPaneContent +import com.artemchep.keyguard.feature.home.settings.SettingPaneItem +import com.artemchep.keyguard.res.Res +import dev.icerock.moko.resources.compose.stringResource + +@Composable +fun WatchtowerSettingsScreen() { + SettingPaneContent( + title = stringResource(Res.strings.settings_watchtower_header_title), + items = listOf( + SettingPaneItem.Item("check_pwned_services"), + SettingPaneItem.Item("check_pwned_passwords"), + SettingPaneItem.Item("check_two_fa"), + ), + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/VaultRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/VaultRoute.kt new file mode 100644 index 00000000..a6d20b36 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/VaultRoute.kt @@ -0,0 +1,239 @@ +package com.artemchep.keyguard.feature.home.vault + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.common.model.DAccount +import com.artemchep.keyguard.common.model.DCollection +import com.artemchep.keyguard.common.model.DFilter +import com.artemchep.keyguard.common.model.DFolder +import com.artemchep.keyguard.common.model.DOrganization +import com.artemchep.keyguard.feature.home.vault.search.sort.Sort +import com.artemchep.keyguard.feature.navigation.Route +import com.artemchep.keyguard.feature.navigation.state.TranslatorScope +import com.artemchep.keyguard.res.Res + +data class VaultRoute( + val args: Args = Args(), +) : Route { + companion object { + // + // Account + // + + fun by(account: DAccount) = by( + accounts = listOf(account), + ) + + @JvmName("byAccounts") + fun by(accounts: Collection) = VaultRoute( + args = Args( + appBar = Args.AppBar( + title = accounts.joinToString { it.username }, + subtitle = if (accounts.size > 1) { + "Accounts" + } else { + "Account" + }, + ), + filter = DFilter.Or( + filters = accounts + .map { account -> + DFilter.ById( + id = account.accountId(), + what = DFilter.ById.What.ACCOUNT, + ) + }, + ), + preselect = false, + canAddSecrets = false, + ), + ) + + // + // Organization + // + + fun by(translator: TranslatorScope, organization: DOrganization) = by( + translator = translator, + organizations = listOf(organization), + ) + + @JvmName("byOrganizations") + fun by(translator: TranslatorScope, organizations: Collection) = VaultRoute( + args = Args( + appBar = Args.AppBar( + title = organizations.joinToString { it.name }, + subtitle = if (organizations.size > 1) { + translator.translate(Res.strings.organizations) + } else { + translator.translate(Res.strings.organization) + }, + ), + filter = DFilter.Or( + filters = organizations + .map { organization -> + DFilter.And( + filters = listOf( + DFilter.ById( + id = organization.accountId, + what = DFilter.ById.What.ACCOUNT, + ), + DFilter.ById( + id = organization.id, + what = DFilter.ById.What.ORGANIZATION, + ), + ), + ) + }, + ), + preselect = false, + canAddSecrets = false, + ), + ) + + // + // Collection + // + + fun by(translator: TranslatorScope, collection: DCollection) = by( + translator = translator, + collections = listOf(collection), + ) + + @JvmName("byCollections") + fun by(translator: TranslatorScope, collections: Collection) = VaultRoute( + args = Args( + appBar = Args.AppBar( + title = collections.joinToString { it.name }, + subtitle = if (collections.size > 1) { + translator.translate(Res.strings.collections) + } else { + translator.translate(Res.strings.collection) + }, + ), + filter = DFilter.Or( + filters = collections + .map { collection -> + DFilter.And( + filters = listOf( + DFilter.ById( + id = collection.accountId, + what = DFilter.ById.What.ACCOUNT, + ), + DFilter.ById( + id = collection.id, + what = DFilter.ById.What.COLLECTION, + ), + ), + ) + }, + ), + preselect = false, + canAddSecrets = false, + ), + ) + + // + // Folder + // + + fun by(translator: TranslatorScope, folder: DFolder) = by( + translator = translator, + folders = listOf(folder), + ) + + @JvmName("byFolders") + fun by(translator: TranslatorScope, folders: Collection) = VaultRoute( + args = Args( + appBar = Args.AppBar( + title = folders.joinToString { it.name }, + subtitle = if (folders.size > 1) { + translator.translate(Res.strings.folders) + } else { + translator.translate(Res.strings.folder) + }, + ), + filter = DFilter.Or( + filters = folders + .map { folder -> + DFilter.And( + filters = listOf( + DFilter.ById( + id = folder.accountId, + what = DFilter.ById.What.ACCOUNT, + ), + DFilter.ById( + id = folder.id, + what = DFilter.ById.What.FOLDER, + ), + ), + ) + }, + ), + preselect = false, + canAddSecrets = false, + ), + ) + + // + // Watchtower + // + + fun watchtower( + title: String, + subtitle: String?, + filter: DFilter? = null, + trash: Boolean? = false, + sort: Sort? = null, + searchBy: Args.SearchBy = Args.SearchBy.ALL, + ) = VaultRoute( + args = Args( + appBar = Args.AppBar( + title = title, + subtitle = subtitle ?: "Watchtower", + ), + filter = filter, + sort = sort, + trash = trash, + searchBy = searchBy, + preselect = false, + canAddSecrets = false, + ), + ) + } + + data class Args( + val appBar: AppBar? = null, + val filter: DFilter? = null, + val sort: Sort? = null, + val main: Boolean = false, + val searchBy: SearchBy = SearchBy.ALL, + /** + * `true` to show only trashed items, `false` to show + * only active items, `null` to show both. + */ + val trash: Boolean? = false, + val preselect: Boolean = true, + val canAddSecrets: Boolean = true, + ) { + enum class SearchBy { + ALL, + PASSWORD, + } + + val canAlwaysShowKeyboard: Boolean get() = appBar?.title == null + + val canQuickFilter: Boolean get() = appBar?.title == null + + data class AppBar( + val title: String? = null, + val subtitle: String? = null, + ) + } + + @Composable + override fun Content() { + VaultScreen( + args = args, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/VaultScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/VaultScreen.kt new file mode 100644 index 00000000..eda68a1d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/VaultScreen.kt @@ -0,0 +1,36 @@ +package com.artemchep.keyguard.feature.home.vault + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.remember +import com.artemchep.keyguard.feature.home.vault.screen.VaultListRoute +import com.artemchep.keyguard.feature.navigation.LocalNavigationNodeVisualStack +import com.artemchep.keyguard.feature.navigation.NavigationRouter +import com.artemchep.keyguard.feature.twopane.TwoPaneNavigationContent + +@Composable +fun VaultScreen( + args: VaultRoute.Args, +) { + val initialRoute = remember(args) { + VaultListRoute( + args = args, + ) + } + // Vault screen actually does not add any depth to the + // navigation stack, it just renders sub-windows. + val visualStack = LocalNavigationNodeVisualStack.current + .run { + removeAt(lastIndex) + } + CompositionLocalProvider( + LocalNavigationNodeVisualStack provides visualStack, + ) { + NavigationRouter( + id = "vault", + initial = initialRoute, + ) { backStack -> + TwoPaneNavigationContent(backStack) + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/VaultState.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/VaultState.kt new file mode 100644 index 00000000..5d2a1e20 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/VaultState.kt @@ -0,0 +1,34 @@ +package com.artemchep.keyguard.feature.home.vault + +import androidx.compose.runtime.Immutable +import arrow.optics.optics +import com.artemchep.keyguard.feature.home.vault.model.VaultItem2 +import com.artemchep.keyguard.feature.home.vault.screen.VaultCipherItem + +@Immutable +@optics +data class VaultState( + val master: Master = Master(), + val detail: Detail? = null, +) { + companion object; + + data class Master( + /** + * Current revision of the items; each revision you should scroll to + * the top of the list. + */ + val itemsRevision: Int = 0, + val items: List = emptyList(), + val onGoClick: (() -> Unit)? = null, + ) + + data class Detail( + val item: VaultCipherItem, + /** + * Called to unselect this item, closing the + * detail pane. + */ + val close: (() -> Unit)? = null, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/add/AddRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/add/AddRoute.kt new file mode 100644 index 00000000..f161e151 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/add/AddRoute.kt @@ -0,0 +1,61 @@ +package com.artemchep.keyguard.feature.home.vault.add + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.common.model.DSecret +import com.artemchep.keyguard.feature.navigation.Route + +fun LeAddRoute( + args: AddRoute.Args = AddRoute.Args(), +): Route = + AddRouteImpl( + args = args, + ) + +data class AddRouteImpl( + val args: AddRoute.Args = AddRoute.Args(), +) : Route { + @Composable + override fun Content() { + AddScreen( + args = args, + ) + } +} + +interface AddRoute { + data class Args( + val behavior: Behavior = Behavior(), + val merge: Merge? = null, + val initialValue: DSecret? = null, + val ownershipRo: Boolean = initialValue != null, + val type: DSecret.Type? = null, + val name: String? = null, + val username: String? = null, + val password: String? = null, + val autofill: Autofill? = null, + ) { + data class Behavior( + val autoShowKeyboard: Boolean = true, + val launchEditedCipher: Boolean = true, + ) + + data class Merge( + val ciphers: List, + ) + + data class Autofill( + val applicationId: String? = null, + val webDomain: String? = null, + val webScheme: String? = null, + // login + val username: String? = null, + val password: String? = null, + // identity + val email: String? = null, + val phone: String? = null, + val personName: String? = null, + ) { + companion object + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/add/AddScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/add/AddScreen.kt new file mode 100644 index 00000000..911aa6f8 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/add/AddScreen.kt @@ -0,0 +1,1734 @@ +@file:OptIn(ExperimentalMaterial3Api::class) + +package com.artemchep.keyguard.feature.home.vault.add + +import androidx.compose.animation.Crossfade +import androidx.compose.foundation.BorderStroke +import androidx.compose.foundation.ExperimentalFoundationApi +import androidx.compose.foundation.LocalIndication +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.interaction.MutableInteractionSource +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ColumnScope +import androidx.compose.foundation.layout.ExperimentalLayoutApi +import androidx.compose.foundation.layout.FlowRow +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.RowScope +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.heightIn +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.layout.widthIn +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.foundation.text.KeyboardActionScope +import androidx.compose.foundation.text.KeyboardActions +import androidx.compose.foundation.text.KeyboardOptions +import androidx.compose.foundation.verticalScroll +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Add +import androidx.compose.material.icons.outlined.ArrowDropDown +import androidx.compose.material.icons.outlined.Clear +import androidx.compose.material.icons.outlined.CloudDone +import androidx.compose.material.icons.outlined.FileUpload +import androidx.compose.material.icons.outlined.Folder +import androidx.compose.material.icons.outlined.Key +import androidx.compose.material.icons.outlined.Password +import androidx.compose.material.icons.outlined.Save +import androidx.compose.material3.Checkbox +import androidx.compose.material3.DropdownMenu +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.LocalTextStyle +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.runtime.* +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.alpha +import androidx.compose.ui.draw.clip +import androidx.compose.ui.focus.FocusDirection +import androidx.compose.ui.focus.FocusRequester +import androidx.compose.ui.focus.focusRequester +import androidx.compose.ui.focus.onFocusChanged +import androidx.compose.ui.graphics.graphicsLayer +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.input.nestedscroll.nestedScroll +import androidx.compose.ui.platform.LocalDensity +import androidx.compose.ui.platform.LocalFocusManager +import androidx.compose.ui.semantics.Role +import androidx.compose.ui.text.SpanStyle +import androidx.compose.ui.text.font.FontStyle +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.input.ImeAction +import androidx.compose.ui.text.input.KeyboardType +import androidx.compose.ui.text.input.PasswordVisualTransformation +import androidx.compose.ui.text.input.VisualTransformation +import androidx.compose.ui.unit.dp +import arrow.core.partially1 +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.model.UsernameVariationIcon +import com.artemchep.keyguard.common.model.fold +import com.artemchep.keyguard.common.model.getOrNull +import com.artemchep.keyguard.common.model.title +import com.artemchep.keyguard.common.model.titleH +import com.artemchep.keyguard.common.service.logging.LogRepository +import com.artemchep.keyguard.feature.auth.common.TextFieldModel2 +import com.artemchep.keyguard.feature.auth.common.VisibilityState +import com.artemchep.keyguard.feature.auth.common.VisibilityToggle +import com.artemchep.keyguard.feature.filepicker.FilePickerEffect +import com.artemchep.keyguard.feature.home.vault.component.FlatItemTextContent2 +import com.artemchep.keyguard.feature.home.vault.component.Section +import com.artemchep.keyguard.feature.home.vault.component.VaultViewTotpBadge2 +import com.artemchep.keyguard.feature.navigation.LocalNavigationController +import com.artemchep.keyguard.feature.navigation.NavigationIcon +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.feature.qr.ScanQrButton +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.AutofillButton +import com.artemchep.keyguard.ui.BiFlatContainer +import com.artemchep.keyguard.ui.BiFlatTextField +import com.artemchep.keyguard.ui.BiFlatTextFieldLabel +import com.artemchep.keyguard.ui.BiFlatValueHeightMin +import com.artemchep.keyguard.ui.DefaultEmphasisAlpha +import com.artemchep.keyguard.ui.DefaultFab +import com.artemchep.keyguard.ui.DisabledEmphasisAlpha +import com.artemchep.keyguard.ui.DropdownMenuItemFlat +import com.artemchep.keyguard.ui.DropdownMinWidth +import com.artemchep.keyguard.ui.DropdownScopeImpl +import com.artemchep.keyguard.ui.EmailFlatTextField +import com.artemchep.keyguard.ui.ExpandedIfNotEmpty +import com.artemchep.keyguard.ui.ExpandedIfNotEmptyForRow +import com.artemchep.keyguard.ui.FabState +import com.artemchep.keyguard.ui.FlatDropdown +import com.artemchep.keyguard.ui.FlatItem +import com.artemchep.keyguard.ui.FlatItemAction +import com.artemchep.keyguard.ui.FlatItemLayout +import com.artemchep.keyguard.ui.FlatItemTextContent +import com.artemchep.keyguard.ui.FlatTextField +import com.artemchep.keyguard.ui.FlatTextFieldBadge +import com.artemchep.keyguard.ui.LeMOdelBottomSheet +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.OptionsButton +import com.artemchep.keyguard.ui.PasswordFlatTextField +import com.artemchep.keyguard.ui.PasswordPwnedBadge +import com.artemchep.keyguard.ui.PasswordStrengthBadge +import com.artemchep.keyguard.ui.ScaffoldColumn +import com.artemchep.keyguard.ui.UrlFlatTextField +import com.artemchep.keyguard.ui.button.FavouriteToggleButton +import com.artemchep.keyguard.ui.icons.IconBox +import com.artemchep.keyguard.ui.icons.KeyguardAttachment +import com.artemchep.keyguard.ui.icons.KeyguardCollection +import com.artemchep.keyguard.ui.icons.KeyguardOrganization +import com.artemchep.keyguard.ui.icons.KeyguardTwoFa +import com.artemchep.keyguard.ui.icons.KeyguardWebsite +import com.artemchep.keyguard.ui.icons.icon +import com.artemchep.keyguard.ui.markdown.Md +import com.artemchep.keyguard.ui.shimmer.shimmer +import com.artemchep.keyguard.ui.skeleton.SkeletonText +import com.artemchep.keyguard.ui.skeleton.SkeletonTextField +import com.artemchep.keyguard.ui.text.annotatedResource +import com.artemchep.keyguard.ui.theme.Dimens +import com.artemchep.keyguard.ui.theme.combineAlpha +import com.artemchep.keyguard.ui.theme.isDark +import com.artemchep.keyguard.ui.theme.monoFontFamily +import com.artemchep.keyguard.ui.toolbar.LargeToolbar +import com.artemchep.keyguard.ui.util.DividerColor +import com.artemchep.keyguard.ui.util.HorizontalDivider +import com.artemchep.keyguard.ui.util.VerticalDivider +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.onEach +import org.kodein.di.compose.rememberInstance + +@Composable +fun AddScreen( + args: AddRoute.Args, +) { + val loadableState = produceAddScreenState( + args = args, + ) + + val state = loadableState.getOrNull() + if (state != null) { + FilePickerEffect( + flow = state.sideEffects.filePickerIntentFlow, + ) + } + + val addScreenScope = remember { + val addScreenBehavior = args.behavior + AddScreenScope( + initialFocusRequested = !addScreenBehavior.autoShowKeyboard, + ) + } + AddScreenContent( + addScreenScope = addScreenScope, + loadableState = loadableState, + ) +} + +@OptIn(ExperimentalMaterial3Api::class, ExperimentalLayoutApi::class, ExperimentalLayoutApi::class) +@Composable +private fun AddScreenContent( + addScreenScope: AddScreenScope, + loadableState: Loadable, +) { + val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior() + ScaffoldColumn( + modifier = Modifier + .nestedScroll(scrollBehavior.nestedScrollConnection), + topAppBarScrollBehavior = scrollBehavior, + topBar = { + LargeToolbar( + title = { + val title = loadableState.getOrNull()?.title + if (title != null) { + Text(title) + } else { + SkeletonText( + modifier = Modifier + .fillMaxWidth(0.4f), + ) + } + }, + navigationIcon = { + NavigationIcon() + }, + actions = { + val fav = loadableState.getOrNull()?.favourite + + val checked = fav?.checked == true + val onChange = fav?.onChange + FavouriteToggleButton( + modifier = Modifier + .then( + loadableState.fold( + ifLoading = { + Modifier + .shimmer() + }, + ifOk = { + Modifier + }, + ), + ), + favorite = checked, + onChange = onChange, + ) + + val actions = loadableState.getOrNull()?.actions.orEmpty() + OptionsButton( + actions = actions, + ) + }, + scrollBehavior = scrollBehavior, + ) + }, + floatingActionState = run { + val fabOnClick = loadableState.getOrNull()?.onSave + val fabState = if (fabOnClick != null) { + FabState( + onClick = fabOnClick, + model = null, + ) + } else { + null + } + rememberUpdatedState(newValue = fabState) + }, + floatingActionButton = { + DefaultFab( + icon = { + Icon( + imageVector = Icons.Outlined.Save, + contentDescription = null, + ) + }, + text = { + Text( + text = stringResource(Res.strings.save), + ) + }, + ) + }, + columnVerticalArrangement = Arrangement.spacedBy(8.dp), + ) { + populateItems( + addScreenScope = addScreenScope, + loadableState = loadableState, + ) + } +} + +private class AddScreenScope( + initialFocusRequested: Boolean = false, +) { + val initialFocusRequestedState = mutableStateOf(initialFocusRequested) + + @Composable + fun initialFocusRequesterEffect(): FocusRequester { + val focusRequester = remember { FocusRequester() } + // Auto focus the text field + // on launch. + LaunchedEffect(focusRequester) { + var initialFocusRequested by initialFocusRequestedState + if (!initialFocusRequested) { + focusRequester.requestFocus() + // do not request it the second time + initialFocusRequested = true + } + } + return focusRequester + } +} + +@Composable +private fun ColumnScope.populateItems( + addScreenScope: AddScreenScope, + loadableState: Loadable, +) = loadableState.fold( + ifLoading = { + populateItemsSkeleton( + addScreenScope = addScreenScope, + ) + }, + ifOk = { state -> + populateItemsContent( + addScreenScope = addScreenScope, + state = state, + ) + }, +) + +@Composable +private fun ColumnScope.populateItemsSkeleton( + addScreenScope: AddScreenScope, +) { + Column( + modifier = Modifier + .fillMaxWidth() + .padding( + horizontal = 8.dp, + vertical = 2.dp, + ) + .padding(vertical = 8.dp), + verticalArrangement = Arrangement.spacedBy(8.dp, Alignment.CenterVertically), + ) { + Row( + modifier = Modifier + .fillMaxWidth() + .padding(end = 8.dp), + horizontalArrangement = Arrangement.spacedBy(8.dp), + ) { + ToolbarContentItemErrSkeleton( + modifier = Modifier + .weight(1.5f), + fraction = 0.5f, + ) + Spacer(modifier = Modifier.width(8.dp)) + ToolbarContentItemErrSkeleton( + modifier = Modifier + .weight(1f) + .padding(end = 8.dp), + fraction = 0.75f, + ) + } + ToolbarContentItemErrSkeleton( + modifier = Modifier + .padding(end = 8.dp), + fraction = 0.35f, + ) + } + Section() + Spacer(Modifier.height(24.dp)) + SkeletonTextField( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = Dimens.horizontalPadding), + ) + SkeletonTextField( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = Dimens.horizontalPadding), + ) + SkeletonText( + modifier = Modifier + .fillMaxWidth(0.75f) + .padding(horizontal = Dimens.horizontalPadding), + style = MaterialTheme.typography.labelMedium, + ) + SkeletonText( + modifier = Modifier + .fillMaxWidth(0.4f) + .padding(horizontal = Dimens.horizontalPadding), + style = MaterialTheme.typography.labelMedium, + ) +} + +@Composable +private fun ColumnScope.populateItemsContent( + addScreenScope: AddScreenScope, + state: AddState, +) { + ToolbarContent( + modifier = Modifier, + account = state.ownership.account, + organization = state.ownership.organization, + collection = state.ownership.collection, + folder = state.ownership.folder, + onClick = state.ownership.onClick, + ) + Section() + Spacer(Modifier.height(24.dp)) + val logRepository by rememberInstance() + remember(state) { + logRepository.post("Foo3", "rendered state ${state.items.size} items") + } + state.items.forEach { + key(it.id) { + AnyField( + modifier = Modifier, + addScreenScope = addScreenScope, + item = it, + ) + } + } +} + +@Composable +private fun AnyField( + modifier: Modifier = Modifier, + addScreenScope: AddScreenScope, + item: AddStateItem, +) { + when (item) { + is AddStateItem.Title -> { + val localState by item.state.flow.collectAsState() + NameTextField( + modifier = modifier, + addScreenScope = addScreenScope, + field = localState, + ) + } + + is AddStateItem.Username -> { + val localState by item.state.flow.collectAsState() + UsernameTextField(modifier, localState) + } + + is AddStateItem.Password -> { + val localState by item.state.flow.collectAsState() + PasswordTextField(modifier, localState) + } + + is AddStateItem.Totp -> { + val localState by item.state.flow.collectAsState() + TotpTextField(modifier, localState) + } + + is AddStateItem.Url -> { + UrlTextField(modifier, item) + } + + is AddStateItem.Attachment -> { + AttachmentTextField(modifier, item) + } + + is AddStateItem.Passkey -> { + PasskeyField(modifier, item) + } + + is AddStateItem.Note -> { + val localState by item.state.flow.collectAsState() + NoteTextField(modifier, localState, markdown = item.markdown) + } + + is AddStateItem.Text -> { + val localState by item.state.flow.collectAsState() + TextTextField(modifier, localState) + } + + is AddStateItem.DateMonthYear -> { + DateMonthYearField( + modifier = modifier, + item = item, + ) + } + + is AddStateItem.Switch -> { + SwitchField( + modifier = modifier, + item = item, + ) + } + + is AddStateItem.Suggestion -> { + SuggestionItem( + modifier = modifier, + item = item, + ) + } + + is AddStateItem.Enum -> { + val localState by item.state.flow.collectAsState() + EnumItem( + modifier = modifier, + icon = item.icon, + label = item.label, + title = localState.value, + dropdown = localState.dropdown, + ) + } + + is AddStateItem.Field -> { + Box( + modifier = modifier, + ) { + val logRepository by rememberInstance() + remember(item) { + logRepository.post("Foo3", "im rendering a field! ${item.id}") + } + val localState = remember { + mutableStateOf(null) + } + LaunchedEffect(item.state.flow) { + item.state.flow + .map { a -> + a.withOptions(a.options + item.options) + } + .onEach { + localState.value = it + logRepository.post("Foo3", "im on emit a field! ${it}") + } + .launchIn(this) + } +// val localState = remember(item.state.flow) { +// item.state.flow +// .map { a -> +// a.withOptions(a.options + item.options) +// } +// .onEach { +// logRepository.post("Foo3", "im on emit a field! ${it}") +// } +// }.collectAsState(null) + when (val l = localState.value) { + is AddStateItem.Field.State.Text -> { + FieldTextField(Modifier, l) + } + + is AddStateItem.Field.State.Switch -> { + FieldSwitchField(Modifier, l) + } + + is AddStateItem.Field.State.LinkedId -> { + FieldLinkedIdField(Modifier, l) + } + + null -> { + // Do nothing. + } + } + } + } + + is AddStateItem.Section -> { + SectionItem(modifier, item.text) + } + // Modifiers + is AddStateItem.Add -> { + Column( + modifier = modifier, + ) { + val dropdownShownState = remember { mutableStateOf(false) } + if (item.actions.isEmpty()) { + dropdownShownState.value = false + } + + // Inject the dropdown popup to the bottom of the + // content. + val onDismissRequest = remember(dropdownShownState) { + // lambda + { + dropdownShownState.value = false + } + } + val contentColor = MaterialTheme.colorScheme.primary + FlatItem( + leading = { + Icon(Icons.Outlined.Add, null, tint = contentColor) + }, + title = { + Text( + text = item.text, + color = contentColor, + ) + + DropdownMenu( + modifier = Modifier + .widthIn(min = DropdownMinWidth), + expanded = dropdownShownState.value, + onDismissRequest = onDismissRequest, + ) { + val scope = DropdownScopeImpl(this, onDismissRequest = onDismissRequest) + with(scope) { + item.actions.forEachIndexed { index, action -> + DropdownMenuItemFlat( + action = action, + ) + } + } + } + }, + onClick = { + if (item.actions.size == 1) { + item.actions.first() + .onClick?.invoke() + } else { + dropdownShownState.value = true + } + }, + ) + } + } + } +} + +@Composable +private fun NameTextField( + modifier: Modifier = Modifier, + addScreenScope: AddScreenScope, + field: TextFieldModel2, +) { + val focusManager = LocalFocusManager.current + val keyboardOnNext: KeyboardActionScope.() -> Unit = { + focusManager.moveFocus(FocusDirection.Down) + } + val focusRequester = addScreenScope.initialFocusRequesterEffect() + FlatTextField( + modifier = modifier + .padding(horizontal = Dimens.horizontalPadding), + fieldModifier = Modifier + .focusRequester(focusRequester), + label = stringResource(Res.strings.generic_name), + singleLine = true, + value = field, + keyboardOptions = KeyboardOptions( + imeAction = ImeAction.Next, + ), + keyboardActions = KeyboardActions( + onNext = keyboardOnNext, + ), + ) +} + +@Composable +private fun UsernameTextField( + modifier: Modifier = Modifier, + field: AddStateItem.Username.State, +) { + EmailFlatTextField( + modifier = modifier + .padding(horizontal = Dimens.horizontalPadding), + label = stringResource(Res.strings.username), + value = field.value, + leading = { + Crossfade( + targetState = field.type, + ) { variation -> + UsernameVariationIcon( + usernameVariation = variation, + ) + } + }, + trailing = { + AutofillButton( + key = "username", + username = true, + onValueChange = { + field.value.onChange?.invoke(it) + }, + ) + }, + ) +} + +@OptIn(ExperimentalLayoutApi::class) +@Composable +private fun PasswordTextField( + modifier: Modifier = Modifier, + field: TextFieldModel2, +) = Column { + PasswordFlatTextField( + modifier = modifier + .padding(horizontal = Dimens.horizontalPadding), + value = field, + leading = { + IconBox( + main = Icons.Outlined.Password, + ) + }, + trailing = { + AutofillButton( + key = "password", + password = true, + onValueChange = { + field.onChange?.invoke(it) + }, + ) + }, + content = { + ExpandedIfNotEmpty( + valueOrNull = Unit.takeIf { field.state.value.isNotEmpty() && field.error == null }, + ) { + FlowRow( + modifier = Modifier + .fillMaxWidth() + .padding( + top = 8.dp, + bottom = 8.dp, + ), + verticalArrangement = Arrangement.spacedBy(8.dp), + horizontalArrangement = Arrangement.spacedBy(8.dp), + ) { + PasswordStrengthBadge( + password = field.state.value, + ) + PasswordPwnedBadge( + password = field.state.value, + ) + } + } + }, + ) + Text( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding) + .padding( + top = Dimens.topPaddingCaption, + bottom = Dimens.topPaddingCaption, + ), + style = MaterialTheme.typography.bodyMedium, + text = stringResource(Res.strings.generator_password_note, 16), + color = LocalContentColor.current + .combineAlpha(alpha = MediumEmphasisAlpha), + ) +} + +@Composable +private fun TotpTextField( + modifier: Modifier = Modifier, + state: AddStateItem.Totp.State, +) { + FlatTextField( + modifier = modifier + .padding(horizontal = Dimens.horizontalPadding), + label = stringResource(Res.strings.one_time_password_authenticator_key), + value = state.value, + textStyle = LocalTextStyle.current.copy( + fontFamily = monoFontFamily, + ), + singleLine = true, + maxLines = 1, + trailing = { + ScanQrButton( + onValueChange = state.value.onChange, + ) + }, + leading = { + IconBox( + main = Icons.Outlined.KeyguardTwoFa, + ) + }, + ) + ExpandedIfNotEmpty( + modifier = Modifier + .fillMaxWidth(), + valueOrNull = state.totpToken, + ) { totpToken -> + Box { + VaultViewTotpBadge2( + modifier = Modifier + .padding(start = 16.dp), + copyText = state.copyText, + totpToken = totpToken, + ) + } + } +} + +@Composable +private fun NoteTextField( + modifier: Modifier = Modifier, + field: TextFieldModel2, + markdown: Boolean, +) = Column( + modifier = modifier, +) { + var isAutofillWindowShowing by remember { + mutableStateOf(false) + } + if (!markdown) { + isAutofillWindowShowing = false + } + + FlatTextField( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding), + label = stringResource(Res.strings.note), + value = field, + content = if (markdown) { + // composable + { + ExpandedIfNotEmpty( + Unit.takeIf { field.text.isNotEmpty() }, + ) { + TextButton( + onClick = { + isAutofillWindowShowing = true + }, + ) { + Text( + text = stringResource(Res.strings.additem_markdown_render_preview), + ) + } + } + } + } else { + null + }, + // TODO: Long note moves a lot when you focus then field, because + // the clear button suddenly appears. We might move the button + // to the footer or something to keep the functionality. + clearButton = false, + ) + if (markdown) { + val description = annotatedResource( + Res.strings.additem_markdown_note, + stringResource(Res.strings.additem_markdown_note_italic) + .let { "*$it*" } to SpanStyle( + fontStyle = FontStyle.Italic, + ), + stringResource(Res.strings.additem_markdown_note_bold) + .let { "**$it**" } to SpanStyle( + fontWeight = FontWeight.Bold, + ), + ) + Row( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding) + .padding(top = Dimens.topPaddingCaption), + ) { + val navigationController = LocalNavigationController.current + Text( + modifier = Modifier + .weight(1f), + text = description, + style = MaterialTheme.typography.bodyMedium, + color = LocalContentColor.current.combineAlpha(alpha = MediumEmphasisAlpha), + ) + Spacer( + modifier = Modifier + .width(16.dp), + ) + TextButton( + onClick = { + val intent = NavigationIntent.NavigateToBrowser( + url = "https://www.markdownguide.org/basic-syntax/", + ) + navigationController.queue(intent) + }, + ) { + Text( + text = stringResource(Res.strings.learn_more), + ) + } + } + } + + // Inject the dropdown popup to the bottom of the + // content. + val onDismissRequest = { + isAutofillWindowShowing = false + } + LeMOdelBottomSheet( + visible = isAutofillWindowShowing, + onDismissRequest = onDismissRequest, + ) { contentPadding -> + Column( + modifier = Modifier + .verticalScroll(rememberScrollState()) + .padding(contentPadding), + ) { + Text( + modifier = Modifier + .padding( + horizontal = 16.dp, + vertical = 8.dp, + ), + text = "Markdown", + style = MaterialTheme.typography.titleLarge, + ) + Md( + modifier = Modifier + .padding( + horizontal = Dimens.horizontalPadding, + vertical = Dimens.verticalPadding, + ), + markdown = field.text, + ) + } + } +} + +@Composable +private fun UrlTextField( + modifier: Modifier = Modifier, + item: AddStateItem.Url, +) { + val state by item.state.flow.collectAsState() + UrlFlatTextField( + modifier = modifier + .padding(horizontal = Dimens.horizontalPadding), + label = stringResource(Res.strings.uri), + value = state.text, + leading = { + IconBox( + main = Icons.Outlined.KeyguardWebsite, + ) + }, + trailing = { + val actions = remember( + state.options, + item.options, + ) { + state.options + item.options + } + OptionsButton( + actions = actions, + ) + }, + content = { + ExpandedIfNotEmpty( + valueOrNull = state.matchTypeTitle, + ) { matchType -> + FlatTextFieldBadge( + type = TextFieldModel2.Vl.Type.INFO, + text = matchType, + ) + } + }, + ) +} + +@Composable +private fun AttachmentTextField( + modifier: Modifier = Modifier, + item: AddStateItem.Attachment, +) { + val state by item.state.flow.collectAsState() + FlatTextField( + modifier = modifier + .padding(horizontal = Dimens.horizontalPadding), + label = "File", + placeholder = "File name", + value = state.name, + keyboardOptions = KeyboardOptions( + autoCorrect = false, + keyboardType = KeyboardType.Text, + ), + singleLine = true, + maxLines = 1, + leading = { + Box { + Icon( + imageVector = Icons.Outlined.KeyguardAttachment, + contentDescription = null, + ) + Row( + modifier = Modifier + .align(Alignment.BottomEnd) + .background( + MaterialTheme.colorScheme.tertiaryContainer, + MaterialTheme.shapes.extraSmall, + ), + ) { + if (state.synced) { + Icon( + modifier = Modifier + .size(16.dp) + .padding(1.dp), + imageVector = Icons.Outlined.CloudDone, + tint = MaterialTheme.colorScheme.onTertiaryContainer, + contentDescription = null, + ) + } + if (!state.synced) { + Icon( + modifier = Modifier + .size(16.dp) + .padding(1.dp), + imageVector = Icons.Outlined.FileUpload, + tint = MaterialTheme.colorScheme.onTertiaryContainer, + contentDescription = null, + ) + } + } + } + }, + content = { + ExpandedIfNotEmpty( + valueOrNull = state.size, + ) { fileSize -> + Column { + Spacer(Modifier.height(8.dp)) + HorizontalDivider() + Spacer(Modifier.height(8.dp)) + Text( + text = fileSize, + style = MaterialTheme.typography.labelSmall, + ) + } + } + }, + trailing = { + OptionsButton( + actions = item.options, + ) + }, + ) +} + +@Composable +private fun PasskeyField( + modifier: Modifier = Modifier, + item: AddStateItem.Passkey, +) { + val state by item.state.flow.collectAsState() + FlatItemLayout( + modifier = modifier, + leading = icon(Icons.Outlined.Key), + contentPadding = PaddingValues( + horizontal = 16.dp, + vertical = 8.dp, + ), + content = { + val passkey = state.passkey + if (passkey != null) { + FlatItemTextContent( + title = { + Text( + text = passkey.userDisplayName.orEmpty(), + ) + }, + text = { + Text( + text = passkey.rpName, + ) + }, + ) + } else { + FlatItemTextContent( + title = { + Text( + text = stringResource(Res.strings.passkey), + ) + }, + ) + } + }, + trailing = { + OptionsButton( + actions = item.options, + ) + }, + enabled = true, + ) +} + +@Composable +private fun TextTextField( + modifier: Modifier = Modifier, + state: AddStateItem.Text.State, +) { + FlatTextField( + modifier = modifier + .padding(horizontal = Dimens.horizontalPadding), + label = state.label, + value = state.value, + singleLine = state.singleLine, + keyboardOptions = state.keyboardOptions, + visualTransformation = state.visualTransformation, + ) +} + +@Composable +private fun FieldTextField( + modifier: Modifier = Modifier, + field: AddStateItem.Field.State.Text, +) { + val visibilityState = remember(field.hidden) { + VisibilityState( + isVisible = !field.hidden, + ) + } + BiFlatTextField( + modifier = modifier + .padding(horizontal = Dimens.horizontalPadding), + label = field.label, + value = field.text, + valueVisualTransformation = if (visibilityState.isVisible || !field.hidden) { + VisualTransformation.None + } else { + PasswordVisualTransformation() + }, + trailing = { + ExpandedIfNotEmptyForRow( + valueOrNull = Unit.takeIf { field.hidden }, + ) { + VisibilityToggle( + visibilityState = visibilityState, + ) + } + OptionsButton( + actions = field.options, + ) + }, + ) +} + +@Composable +private fun FieldSwitchField( + modifier: Modifier = Modifier, + field: AddStateItem.Field.State.Switch, +) { + FlatTextField( + modifier = modifier + .padding(horizontal = Dimens.horizontalPadding), + value = field.label, + trailing = { + Checkbox( + checked = field.checked, + onCheckedChange = field.onCheckedChange, + ) + OptionsButton( + actions = field.options, + ) + }, + ) +} + +@Composable +private fun FieldLinkedIdField( + modifier: Modifier = Modifier, + field: AddStateItem.Field.State.LinkedId, +) { + val label = field.label + + val labelInteractionSource = remember { MutableInteractionSource() } + val valueInteractionSource = remember { MutableInteractionSource() } + + val isError = remember( + label.error, + ) { + derivedStateOf { + label.error != null + } + } + + val hasFocusState = remember { + mutableStateOf(false) + } + + val isEmpty = remember( + label.state, + ) { + derivedStateOf { + label.state.value.isBlank() + } + } + + val dropdownShownState = remember { mutableStateOf(false) } + if (field.actions.isEmpty()) { + dropdownShownState.value = false + } + + // Inject the dropdown popup to the bottom of the + // content. + val onDismissRequest = remember(dropdownShownState) { + // lambda + { + dropdownShownState.value = false + } + } + + BiFlatContainer( + modifier = modifier + .padding(horizontal = Dimens.horizontalPadding) + .onFocusChanged { state -> + hasFocusState.value = state.hasFocus + }, + contentModifier = Modifier + .clickable( + indication = LocalIndication.current, + interactionSource = valueInteractionSource, + role = Role.Button, + ) { + dropdownShownState.value = true + }, + isError = isError, + isFocused = hasFocusState, + isEmpty = isEmpty, + label = { + BiFlatTextFieldLabel( + label = label, + interactionSource = labelInteractionSource, + ) + }, + content = { + Row { + val textColor = + if (field.value != null) { + LocalContentColor.current + } else { + LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha) + } + Text( + modifier = Modifier + .heightIn(min = BiFlatValueHeightMin) + .weight(1f, fill = false), + text = (field.value?.titleH() ?: Res.strings.select_linked_type) + .let { stringResource(it) }, + color = textColor, + ) + Spacer( + modifier = Modifier + .width(4.dp), + ) + Icon( + modifier = Modifier + .alpha(MediumEmphasisAlpha), + imageVector = Icons.Outlined.ArrowDropDown, + contentDescription = null, + ) + } + + DropdownMenu( + modifier = Modifier + .widthIn(min = DropdownMinWidth), + expanded = dropdownShownState.value, + onDismissRequest = onDismissRequest, + ) { + val scope = DropdownScopeImpl(this, onDismissRequest = onDismissRequest) + with(scope) { + field.actions.forEachIndexed { index, action -> + DropdownMenuItemFlat( + action = action, + ) + } + } + } + }, + trailing = { + OptionsButton( + actions = field.options, + ) + }, + ) +} + +@Composable +private fun SwitchField( + modifier: Modifier = Modifier, + item: AddStateItem.Switch, +) { + val localState by item.state.flow.collectAsState() + FlatItem( + modifier = modifier, + leading = { + Checkbox( + checked = localState.checked, + enabled = localState.onChange != null, + onCheckedChange = null, + ) + }, + title = { + Text( + text = item.title, + ) + }, + text = if (item.text != null) { + // composable + { + Text( + text = item.text, + ) + } + } else { + null + }, + onClick = localState.onChange?.partially1(!localState.checked), + ) +} + +@Composable +private fun DateMonthYearField( + modifier: Modifier = Modifier, + item: AddStateItem.DateMonthYear, +) { + val localState by item.state.flow.collectAsState() + BiFlatContainer( + modifier = modifier + .padding(horizontal = Dimens.horizontalPadding), + contentModifier = Modifier + .clickable( + indication = LocalIndication.current, + interactionSource = remember { + MutableInteractionSource() + }, + role = Role.Button, + ) { + localState.onClick.invoke() + }, + isError = rememberUpdatedState(newValue = false), + isFocused = rememberUpdatedState(newValue = false), + isEmpty = rememberUpdatedState(newValue = false), + label = { + Text( + text = item.label, + style = MaterialTheme.typography.bodySmall, + ) + }, + content = { + val density = LocalDensity.current + Row( + modifier = Modifier + .graphicsLayer { + translationY = 12f + density.density + }, + ) { + Row( + modifier = Modifier + .heightIn(min = BiFlatValueHeightMin) + .weight(1f, fill = false), + horizontalArrangement = Arrangement.spacedBy(2.dp), + ) { + val month = localState.month.text.ifBlank { "--" } + val year = localState.year.text.ifBlank { "----" } + Text( + text = month, + ) + Text( + text = "/", + color = LocalContentColor.current + .combineAlpha(DisabledEmphasisAlpha), + ) + Text( + text = year, + ) + } +// Spacer( +// modifier = Modifier +// .width(4.dp), +// ) +// Icon( +// modifier = Modifier +// .alpha(MediumEmphasisAlpha), +// imageVector = Icons.Outlined.ArrowDropDown, +// contentDescription = null, +// ) + } + }, + trailing = { + val isEmpty = localState.month.state.value.isEmpty() && + localState.year.state.value.isEmpty() + ExpandedIfNotEmptyForRow( + valueOrNull = Unit.takeUnless { isEmpty }, + ) { + Row( + verticalAlignment = Alignment.CenterVertically, + ) { + Spacer( + modifier = Modifier + .width(8.dp), + ) + VerticalDivider( + modifier = Modifier + .height(24.dp), + ) + Spacer( + modifier = Modifier + .width(8.dp), + ) + IconButton( + enabled = true, + onClick = { + localState.month.state.value = "" + localState.year.state.value = "" + }, + ) { + Icon( + imageVector = Icons.Outlined.Clear, + contentDescription = null, + ) + } + } + } + }, + ) +} + +@Composable +private fun EnumItem( + modifier: Modifier = Modifier, + icon: ImageVector, + label: String, + title: String, + dropdown: List, +) { + FlatDropdown( + modifier = modifier, + content = { + FlatItemTextContent2( + title = { + Text(label) + }, + text = { + Text(title) + }, + ) + }, + leading = { + Icon(icon, null) + }, + dropdown = dropdown, + ) +} + +@Composable +private fun SectionItem( + modifier: Modifier = Modifier, + title: String?, +) { + Section( + modifier = modifier, + text = title, + ) +} + +@OptIn(ExperimentalMaterial3Api::class, ExperimentalLayoutApi::class) +@Composable +private fun SuggestionItem( + modifier: Modifier = Modifier, + item: AddStateItem.Suggestion, +) { + val localState by item.state.flow.collectAsState() + FlowRow( + modifier = modifier + .padding(horizontal = Dimens.horizontalPadding), + horizontalArrangement = Arrangement.spacedBy(8.dp), + verticalArrangement = Arrangement.spacedBy(8.dp), + ) { + localState.items.forEach { item -> + key(item.key) { + SuggestionItemChip( + modifier = Modifier, + item = item, + ) + } + } + } +} + +@Composable +private fun SuggestionItemChip( + modifier: Modifier = Modifier, + item: AddStateItem.Suggestion.Item, +) { + val backgroundColor = + if (item.selected) MaterialTheme.colorScheme.primaryContainer else MaterialTheme.colorScheme.surface + Surface( + modifier = modifier, + border = if (item.selected) null else BorderStroke(0.dp, DividerColor), + color = backgroundColor, + shape = MaterialTheme.shapes.small, + ) { + val contentColor = LocalContentColor.current + .let { color -> + if (item.onClick != null) { + color // enabled + } else { + color.combineAlpha(DisabledEmphasisAlpha) + } + } + CompositionLocalProvider( + LocalContentColor provides contentColor, + ) { + Column( + modifier = Modifier + .then( + if (item.onClick != null) { + Modifier + .clickable(role = Role.Button) { + item.onClick.invoke() + } + } else { + Modifier + }, + ) + .padding( + horizontal = 12.dp, + vertical = 8.dp, + ), + ) { + Text( + text = item.text, + style = MaterialTheme.typography.bodyMedium, + ) + Text( + text = item.source, + style = MaterialTheme.typography.bodySmall, + color = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + ) + } + } + } +} + +// +// Ownership +// + +@Composable +private fun ToolbarContentItem( + element: AddState.SaveToElement, +) { + element.items.forEach { + key(it.key) { + Column( + modifier = Modifier + .heightIn(min = 32.dp), + verticalArrangement = Arrangement.Center, + ) { + Text( + text = it.title, + style = MaterialTheme.typography.bodyMedium, + ) + if (it.text != null) { + Text( + text = it.text, + color = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + style = MaterialTheme.typography.bodySmall, + ) + } + } + } + } +} + +@Composable +private fun ToolbarContentItemErr( + modifier: Modifier = Modifier, + icon: ImageVector, + element: AddState.SaveToElement, +) { + ToolbarContentItemErr( + modifier = modifier, + leading = { + Icon( + imageVector = icon, + contentDescription = null, + ) + }, + element = element, + ) +} + +@OptIn(ExperimentalLayoutApi::class) +@Composable +private fun ToolbarContentItemErr( + modifier: Modifier = Modifier, + leading: @Composable () -> Unit, + element: AddState.SaveToElement, +) { + val alpha = if (!element.readOnly) DefaultEmphasisAlpha else DisabledEmphasisAlpha + Row( + modifier = modifier + .heightIn(min = 32.dp) + .alpha(alpha), + ) { + Box( + modifier = Modifier + .size(32.dp), + contentAlignment = Alignment.Center, + ) { + Box( + modifier = Modifier + .size(16.dp), + ) { + leading() + } + } + Spacer(modifier = Modifier.width(14.dp)) + FlowRow( + horizontalArrangement = Arrangement.spacedBy(8.dp), + verticalArrangement = Arrangement.spacedBy(8.dp), + ) { + ToolbarContentItem(element = element) + } + } +} + +@OptIn(ExperimentalLayoutApi::class) +@Composable +private fun ToolbarContentItemErrSkeleton( + modifier: Modifier = Modifier, + fraction: Float = 1f, +) { + Row( + modifier = modifier + .heightIn(min = 32.dp), + ) { + Box( + modifier = Modifier + .size(32.dp), + contentAlignment = Alignment.Center, + ) { + val contentColor = LocalContentColor.current + .combineAlpha(DisabledEmphasisAlpha) + Box( + modifier = Modifier + .shimmer() + .size(16.dp) + .clip(MaterialTheme.shapes.small) + .background(contentColor), + ) + } + Spacer(modifier = Modifier.width(14.dp)) + FlowRow( + horizontalArrangement = Arrangement.spacedBy(8.dp), + verticalArrangement = Arrangement.spacedBy(8.dp), + ) { + Column( + modifier = Modifier + .heightIn(min = 32.dp), + verticalArrangement = Arrangement.Center, + ) { + SkeletonText( + modifier = Modifier + .fillMaxWidth(fraction), + style = MaterialTheme.typography.bodyMedium, + ) + } + } + } +} + +@Composable +private fun ToolbarContent( + modifier: Modifier = Modifier, + account: AddState.SaveToElement? = null, + organization: AddState.SaveToElement? = null, + collection: AddState.SaveToElement? = null, + folder: AddState.SaveToElement? = null, + onClick: (() -> Unit)? = null, +) { + Column( + modifier = modifier + .fillMaxWidth() + .padding( + horizontal = 8.dp, + vertical = 2.dp, + ) + .clip(MaterialTheme.shapes.medium) + .then( + if (onClick != null) { + Modifier + .clickable( + role = Role.Button, + onClick = onClick, + ) + } else { + Modifier + }, + ) + .padding(vertical = 8.dp), + verticalArrangement = Arrangement.spacedBy(8.dp, Alignment.CenterVertically), + ) { + Row( + modifier = Modifier + .fillMaxWidth() + .padding(end = 8.dp), + horizontalArrangement = Arrangement.spacedBy(8.dp), + ) { + if (account != null) { + ToolbarContentItemErr( + modifier = Modifier + .weight(1.5f), + leading = { + val accentColors = account.items.firstOrNull() + ?.accentColors + ?: return@ToolbarContentItemErr + val backgroundColor = if (MaterialTheme.colorScheme.isDark) { + accentColors.dark + } else { + accentColors.light + } + Box( + modifier = Modifier + .size(24.dp) + .background(backgroundColor, CircleShape), + ) + }, + element = account, + ) + Spacer(modifier = Modifier.width(8.dp)) + } + if (folder != null) { + ToolbarContentItemErr( + modifier = Modifier + .weight(1f) + .padding(end = 8.dp), + icon = Icons.Outlined.Folder, + element = folder, + ) + } + } + ExpandedIfNotEmpty( + valueOrNull = organization, + ) { org -> + ToolbarContentItemErr( + modifier = Modifier + .padding(end = 8.dp), + icon = Icons.Outlined.KeyguardOrganization, + element = org, + ) + } + ExpandedIfNotEmpty( + valueOrNull = collection, + ) { col -> + ToolbarContentItemErr( + modifier = Modifier + .padding(end = 8.dp), + icon = Icons.Outlined.KeyguardCollection, + element = col, + ) + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/add/AddState.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/add/AddState.kt new file mode 100644 index 00000000..8f887614 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/add/AddState.kt @@ -0,0 +1,337 @@ +package com.artemchep.keyguard.feature.home.vault.add + +import androidx.compose.foundation.text.KeyboardOptions +import androidx.compose.runtime.Immutable +import androidx.compose.ui.graphics.RectangleShape +import androidx.compose.ui.graphics.Shape +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.text.input.VisualTransformation +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.common.model.DSecret +import com.artemchep.keyguard.common.model.TotpToken +import com.artemchep.keyguard.common.model.UsernameVariation2 +import com.artemchep.keyguard.common.model.create.CreateRequest +import com.artemchep.keyguard.common.usecase.CopyText +import com.artemchep.keyguard.feature.auth.common.SwitchFieldModel +import com.artemchep.keyguard.feature.auth.common.TextFieldModel2 +import com.artemchep.keyguard.feature.confirmation.organization.FolderInfo +import com.artemchep.keyguard.feature.filepicker.FilePickerIntent +import com.artemchep.keyguard.ui.FlatItemAction +import com.artemchep.keyguard.ui.icons.AccentColors +import kotlinx.collections.immutable.ImmutableList +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.StateFlow + +/** + * @author Artem Chepurnyi + */ +data class AddState( + val title: String = "", + val favourite: SwitchFieldModel, + val ownership: Ownership, + val sideEffects: SideEffects, + val actions: List = emptyList(), + val items: List = emptyList(), + val onSave: (() -> Unit)? = null, +) { + @Immutable + data class SideEffects( + val filePickerIntentFlow: Flow>, + ) { + companion object + } + + data class Ownership( + val data: Data, + val account: SaveToElement? = null, + val organization: SaveToElement? = null, + val collection: SaveToElement? = null, + val folder: SaveToElement? = null, + val onClick: (() -> Unit)? = null, + ) { + data class Data( + val accountId: String?, + val folderId: FolderInfo, + val organizationId: String?, + val collectionIds: Set, + ) + } + + data class SaveToElement( + val readOnly: Boolean, + val items: List = emptyList(), + ) { + data class Item( + val key: String, + val title: String, + val text: String? = null, + val accentColors: AccentColors? = null, + ) + } +} + +sealed interface AddStateItem { + val id: String + + interface HasOptions { + val options: List + + /** + * Copies the data class replacing the old options with a + * provided ones. + */ + fun withOptions( + options: List, + ): T + } + + interface HasDecor { + val decor: Decor + } + + interface HasState { + val state: LocalStateItem + } + + data class Decor( + val shape: Shape = RectangleShape, + val elevation: Dp = 0.dp, + ) + + data class Title( + override val id: String, + override val state: LocalStateItem, + ) : AddStateItem, HasState + + data class Username( + override val id: String, + override val state: LocalStateItem, + ) : AddStateItem, HasState { + data class State( + val value: TextFieldModel2, + val type: UsernameVariation2, + ) + } + + data class Password( + override val id: String, + override val state: LocalStateItem, + ) : AddStateItem, HasState + + data class Text( + override val id: String, + override val decor: Decor = Decor(), + override val state: LocalStateItem, + ) : AddStateItem, HasDecor, HasState { + data class State( + val value: TextFieldModel2, + val label: String? = null, + val singleLine: Boolean = false, + val keyboardOptions: KeyboardOptions = KeyboardOptions.Default, + val visualTransformation: VisualTransformation = VisualTransformation.None, + ) + } + + data class Suggestion( + override val id: String, + override val decor: Decor = Decor(), + override val state: LocalStateItem, + ) : AddStateItem, HasDecor, HasState { + data class State( + val items: ImmutableList, + ) + + data class Item( + val key: String, + val text: String, + val value: String, + val source: String, + val selected: Boolean, + val onClick: (() -> Unit)? = null, + ) + } + + data class Totp( + override val id: String, + override val state: LocalStateItem, + ) : AddStateItem, HasState { + data class State( + val copyText: CopyText, + val value: TextFieldModel2, + val totpToken: TotpToken? = null, + ) + } + + data class Passkey( + override val id: String, + override val options: List = emptyList(), + override val state: LocalStateItem, + ) : AddStateItem, HasOptions, HasState { + override fun withOptions( + options: List, + ): Passkey = copy( + options = options, + ) + + data class State( + val passkey: DSecret.Login.Fido2Credentials?, + ) + } + + data class Attachment( + override val id: String, + override val options: List = emptyList(), + override val state: LocalStateItem, + ) : AddStateItem, HasOptions, HasState { + override fun withOptions(options: List): Attachment = + copy( + options = options, + ) + + data class State( + val id: String, + val name: TextFieldModel2, + val size: String? = null, + /** + * `true` if the attachment is already uploaded to the server, + * `false` otherwise. + */ + val synced: Boolean, + ) + } + + data class Url( + override val id: String, + override val options: List = emptyList(), + override val state: LocalStateItem, + ) : AddStateItem, HasOptions, HasState { + override fun withOptions(options: List): Url = + copy( + options = options, + ) + + data class State( + override val options: List = emptyList(), + val text: TextFieldModel2, + val matchType: DSecret.Uri.MatchType? = null, + val matchTypeTitle: String? = null, + ) : HasOptions { + override fun withOptions(options: List): State = + copy( + options = options, + ) + } + } + + data class Field( + override val id: String, + override val options: List = emptyList(), + override val state: LocalStateItem, + ) : AddStateItem, HasOptions, HasState { + override fun withOptions(options: List): Field = + copy( + options = options, + ) + + sealed interface State : HasOptions { + data class Text( + override val options: List = emptyList(), + val label: TextFieldModel2, + val text: TextFieldModel2, + val hidden: Boolean = false, + ) : State { + override fun withOptions(options: List): Text = + copy( + options = options, + ) + } + + data class Switch( + override val options: List = emptyList(), + val checked: Boolean = false, + val onCheckedChange: ((Boolean) -> Unit)? = null, + val label: TextFieldModel2, + ) : State { + override fun withOptions(options: List): Switch = + copy( + options = options, + ) + } + + data class LinkedId( + override val options: List = emptyList(), + val value: DSecret.Field.LinkedId?, + val actions: List, + val label: TextFieldModel2, + ) : State { + override fun withOptions(options: List): LinkedId = + copy( + options = options, + ) + } + } + } + + data class Note( + override val id: String, + override val state: LocalStateItem, + val markdown: Boolean, + ) : AddStateItem, HasState + + data class Enum( + override val id: String, + val icon: ImageVector, + val label: String, + override val state: LocalStateItem, + ) : AddStateItem, HasState { + data class State( + val value: String = "", + val dropdown: List = emptyList(), + ) + } + + data class Switch( + override val id: String, + val title: String, + val text: String? = null, + override val state: LocalStateItem, + ) : AddStateItem, HasState + + data class Section( + override val id: String, + val text: String? = null, + ) : AddStateItem + + // + // CUSTOM + // + + data class DateMonthYear( + override val id: String, + override val state: LocalStateItem, + val label: String, + ) : AddStateItem, HasState { + data class State( + val month: TextFieldModel2, + val year: TextFieldModel2, + val onClick: () -> Unit, + ) + } + + // + // Items that may modify the amount of items in the + // list. + // + + data class Add( + override val id: String, + val text: String, + val actions: List, + ) : AddStateItem +} + +data class LocalStateItem( + val flow: StateFlow, + val populator: CreateRequest.(T) -> CreateRequest = { this }, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/add/AddStateProducer.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/add/AddStateProducer.kt new file mode 100644 index 00000000..72fb434d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/add/AddStateProducer.kt @@ -0,0 +1,3411 @@ +package com.artemchep.keyguard.feature.home.vault.add + +import androidx.compose.animation.Crossfade +import androidx.compose.foundation.text.KeyboardOptions +import androidx.compose.material.Checkbox +import androidx.compose.material.RadioButton +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.AccountBox +import androidx.compose.material.icons.outlined.Apps +import androidx.compose.material.icons.outlined.ArrowDownward +import androidx.compose.material.icons.outlined.ArrowUpward +import androidx.compose.material.icons.outlined.DeleteForever +import androidx.compose.material.icons.outlined.Password +import androidx.compose.material.icons.outlined.Visibility +import androidx.compose.material.icons.outlined.VisibilityOff +import androidx.compose.material3.Switch +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.ui.text.AnnotatedString +import androidx.compose.ui.text.input.KeyboardType +import androidx.compose.ui.text.input.OffsetMapping +import androidx.compose.ui.text.input.TransformedText +import androidx.compose.ui.text.input.VisualTransformation +import arrow.core.flatten +import arrow.core.partially1 +import arrow.core.partially2 +import arrow.core.widen +import arrow.optics.Optional +import com.artemchep.keyguard.common.io.attempt +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.io.effectTap +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.io.toIO +import com.artemchep.keyguard.common.model.DSecret +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.model.ToastMessage +import com.artemchep.keyguard.common.model.TotpToken +import com.artemchep.keyguard.common.model.UsernameVariation2 +import com.artemchep.keyguard.common.model.create.CreateRequest +import com.artemchep.keyguard.common.model.create.address1 +import com.artemchep.keyguard.common.model.create.address2 +import com.artemchep.keyguard.common.model.create.address3 +import com.artemchep.keyguard.common.model.create.brand +import com.artemchep.keyguard.common.model.create.card +import com.artemchep.keyguard.common.model.create.cardholderName +import com.artemchep.keyguard.common.model.create.city +import com.artemchep.keyguard.common.model.create.code +import com.artemchep.keyguard.common.model.create.company +import com.artemchep.keyguard.common.model.create.country +import com.artemchep.keyguard.common.model.create.email +import com.artemchep.keyguard.common.model.create.expMonth +import com.artemchep.keyguard.common.model.create.expYear +import com.artemchep.keyguard.common.model.create.firstName +import com.artemchep.keyguard.common.model.create.fromMonth +import com.artemchep.keyguard.common.model.create.fromYear +import com.artemchep.keyguard.common.model.create.identity +import com.artemchep.keyguard.common.model.create.lastName +import com.artemchep.keyguard.common.model.create.licenseNumber +import com.artemchep.keyguard.common.model.create.middleName +import com.artemchep.keyguard.common.model.create.note +import com.artemchep.keyguard.common.model.create.number +import com.artemchep.keyguard.common.model.create.passportNumber +import com.artemchep.keyguard.common.model.create.phone +import com.artemchep.keyguard.common.model.create.postalCode +import com.artemchep.keyguard.common.model.create.ssn +import com.artemchep.keyguard.common.model.create.state +import com.artemchep.keyguard.common.model.create.title +import com.artemchep.keyguard.common.model.create.username +import com.artemchep.keyguard.common.model.creditCards +import com.artemchep.keyguard.common.model.fileName +import com.artemchep.keyguard.common.model.fileSize +import com.artemchep.keyguard.common.model.title +import com.artemchep.keyguard.common.model.titleH +import com.artemchep.keyguard.common.service.clipboard.ClipboardService +import com.artemchep.keyguard.common.service.logging.LogRepository +import com.artemchep.keyguard.common.usecase.AddCipher +import com.artemchep.keyguard.common.usecase.CipherUnsecureUrlCheck +import com.artemchep.keyguard.common.usecase.CopyText +import com.artemchep.keyguard.common.usecase.GetAccounts +import com.artemchep.keyguard.common.usecase.GetCiphers +import com.artemchep.keyguard.common.usecase.GetCollections +import com.artemchep.keyguard.common.usecase.GetFolders +import com.artemchep.keyguard.common.usecase.GetGravatarUrl +import com.artemchep.keyguard.common.usecase.GetMarkdown +import com.artemchep.keyguard.common.usecase.GetOrganizations +import com.artemchep.keyguard.common.usecase.GetProfiles +import com.artemchep.keyguard.common.usecase.GetTotpCode +import com.artemchep.keyguard.common.usecase.ShowMessage +import com.artemchep.keyguard.common.util.flow.EventFlow +import com.artemchep.keyguard.common.util.flow.combineToList +import com.artemchep.keyguard.common.util.flow.foldAsList +import com.artemchep.keyguard.common.util.flow.persistingStateIn +import com.artemchep.keyguard.common.util.validLuhn +import com.artemchep.keyguard.feature.apppicker.AppPickerResult +import com.artemchep.keyguard.feature.apppicker.AppPickerRoute +import com.artemchep.keyguard.feature.auth.common.SwitchFieldModel +import com.artemchep.keyguard.feature.auth.common.TextFieldModel2 +import com.artemchep.keyguard.feature.auth.common.util.ValidationUri +import com.artemchep.keyguard.feature.auth.common.util.format +import com.artemchep.keyguard.feature.auth.common.util.validateUri +import com.artemchep.keyguard.feature.auth.common.util.validatedTitle +import com.artemchep.keyguard.feature.confirmation.ConfirmationRoute +import com.artemchep.keyguard.feature.confirmation.createConfirmationDialogIntent +import com.artemchep.keyguard.feature.confirmation.organization.FolderInfo +import com.artemchep.keyguard.feature.confirmation.organization.OrganizationConfirmationResult +import com.artemchep.keyguard.feature.confirmation.organization.OrganizationConfirmationRoute +import com.artemchep.keyguard.feature.datepicker.DatePickerResult +import com.artemchep.keyguard.feature.datepicker.DatePickerRoute +import com.artemchep.keyguard.feature.filepicker.FilePickerIntent +import com.artemchep.keyguard.feature.filepicker.humanReadableByteCountSI +import com.artemchep.keyguard.feature.home.vault.add.attachment.SkeletonAttachment +import com.artemchep.keyguard.feature.home.vault.add.attachment.SkeletonAttachmentItemFactory +import com.artemchep.keyguard.feature.home.vault.component.obscurePassword +import com.artemchep.keyguard.feature.home.vault.screen.VaultViewRoute +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.feature.navigation.registerRouteResultReceiver +import com.artemchep.keyguard.feature.navigation.state.PersistedStorage +import com.artemchep.keyguard.feature.navigation.state.RememberStateFlowScope +import com.artemchep.keyguard.feature.navigation.state.TranslatorScope +import com.artemchep.keyguard.feature.navigation.state.copy +import com.artemchep.keyguard.feature.navigation.state.produceScreenState +import com.artemchep.keyguard.platform.leParseUri +import com.artemchep.keyguard.platform.parcelize.LeParcelable +import com.artemchep.keyguard.platform.parcelize.LeParcelize +import com.artemchep.keyguard.provider.bitwarden.usecase.autofill +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItemAction +import com.artemchep.keyguard.ui.icons.ChevronIcon +import com.artemchep.keyguard.ui.icons.IconBox +import com.artemchep.keyguard.ui.icons.Stub +import com.artemchep.keyguard.ui.icons.icon +import kotlinx.collections.immutable.ImmutableList +import kotlinx.collections.immutable.persistentListOf +import kotlinx.collections.immutable.toImmutableList +import kotlinx.collections.immutable.toPersistentList +import kotlinx.collections.immutable.toPersistentMap +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.debounce +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.flow.flatMapLatest +import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.onEach +import kotlinx.coroutines.flow.onStart +import kotlinx.coroutines.flow.scan +import kotlinx.coroutines.flow.shareIn +import kotlinx.coroutines.flow.update +import kotlinx.datetime.Clock +import kotlinx.datetime.Instant +import kotlinx.serialization.encodeToString +import org.kodein.di.compose.localDI +import org.kodein.di.direct +import org.kodein.di.instance +import java.io.Serializable +import java.util.UUID + +// TODO: Support hide password option +@Composable +fun produceAddScreenState( + args: AddRoute.Args, +) = with(localDI().direct) { + produceAddScreenState( + args = args, + getAccounts = instance(), + getProfiles = instance(), + getOrganizations = instance(), + getCollections = instance(), + getFolders = instance(), + getCiphers = instance(), + getTotpCode = instance(), + getGravatarUrl = instance(), + getMarkdown = instance(), + logRepository = instance(), + clipboardService = instance(), + cipherUnsecureUrlCheck = instance(), + showMessage = instance(), + addCipher = instance(), + ) +} + +@kotlinx.serialization.Serializable +@LeParcelize +data class AddItemOwnershipData( + val accountId: String?, + val folder: FolderInfo, + val organizationId: String?, + val collectionIds: Set, +) : LeParcelable + +@Composable +fun produceAddScreenState( + args: AddRoute.Args, + getAccounts: GetAccounts, + getProfiles: GetProfiles, + getOrganizations: GetOrganizations, + getCollections: GetCollections, + getFolders: GetFolders, + getCiphers: GetCiphers, + getTotpCode: GetTotpCode, + getGravatarUrl: GetGravatarUrl, + getMarkdown: GetMarkdown, + logRepository: LogRepository, + clipboardService: ClipboardService, + cipherUnsecureUrlCheck: CipherUnsecureUrlCheck, + showMessage: ShowMessage, + addCipher: AddCipher, +): Loadable = produceScreenState( + key = "cipher_add", + initial = Loadable.Loading, + args = arrayOf( + args, + getAccounts, + getOrganizations, + getCollections, + getFolders, + getCiphers, + getTotpCode, + ), +) { + val copyText = copy(clipboardService) + val markdown = getMarkdown().first() + + val ownershipFlow = produceOwnershipFlow( + args = args, + getProfiles = getProfiles, + getOrganizations = getOrganizations, + getCollections = getCollections, + getFolders = getFolders, + getCiphers = getCiphers, + ) + + val loginHolder = produceLoginState( + args = args, + ownershipFlow = ownershipFlow, + copyText = copyText, + getTotpCode = getTotpCode, + getGravatarUrl = getGravatarUrl, + ) + val cardHolder = produceCardState( + args = args, + ) + val identityHolder = produceIdentityState( + args = args, + ) + val noteHolder = produceNoteState( + args = args, + markdown = markdown, + ) + + val typeFlow = kotlin.run { + val initialValue = args.type + ?: args.initialValue?.type + // this should never happen + ?: DSecret.Type.None + flowOf(initialValue) + } + + val filePickerIntentSink = EventFlow>() + + val sideEffects = AddState.SideEffects( + filePickerIntentFlow = filePickerIntentSink, + ) + + val passkeysFactories = kotlin.run { + val passkeyFactory = AddStateItemPasskeyFactory( + ) + listOf( + passkeyFactory, + ) + } + val passkeysFlow = foo3( + logRepository = logRepository, + scope = "passkey", + initial = kotlin.run { + val existingPasskeys = args.initialValue?.login?.fido2Credentials + .orEmpty() + existingPasskeys + }, + initialType = { "passkey" }, + factories = passkeysFactories, + afterList = { + if (isEmpty()) { + return@foo3 + } + + val header = AddStateItem.Section( + id = "passkey.section", + text = translate(Res.strings.passkeys), + ) + add(0, header) + }, + ) + + val urisFactories = kotlin.run { + val uriFactory = AddStateItemUriFactory( + cipherUnsecureUrlCheck = cipherUnsecureUrlCheck, + ) + listOf( + uriFactory, + ) + } + val urisFlow = foo3( + logRepository = logRepository, + scope = "uri", + initial = kotlin.run { + val existingUris = args.initialValue?.uris + .orEmpty() + existingUris.autofill( + applicationId = args.autofill?.applicationId, + webDomain = args.autofill?.webDomain, + webScheme = args.autofill?.webScheme, + ) + }, + initialType = { "uri" }, + factories = urisFactories, + afterList = { + val header = AddStateItem.Section( + id = "uri.section", + text = translate(Res.strings.uris), + ) + add(0, header) + }, + extra = { + typeBasedAddItem( + translator = this@produceScreenState, + scope = "uri", + typesFlow = flowOf( + listOf( + Foo2Type( + type = "uri", + name = translate(Res.strings.uri), + ), + ), + ), + ) + }, + ) + + val attachmentsFactories = kotlin.run { + val attachmentFactory = SkeletonAttachmentItemFactory() + listOf( + attachmentFactory, + ) + } + val attachmentsFlow = foo3( + logRepository = logRepository, + scope = "attachment", + initial = args.initialValue?.attachments.orEmpty() + .map { + when (it) { + is DSecret.Attachment.Remote -> { + SkeletonAttachment.Remote( + identity = SkeletonAttachment.Remote.Identity( + id = it.id, + ), + name = it.fileName(), + size = it.fileSize()?.let(::humanReadableByteCountSI).orEmpty(), + ) + } + + is DSecret.Attachment.Local -> { + val uri = kotlin.runCatching { + leParseUri(it.url) + }.getOrNull() + ?: return@map null + SkeletonAttachment.Local( + identity = SkeletonAttachment.Local.Identity( + id = it.id, + uri = uri, + size = it.fileSize(), + ), + name = it.fileName(), + size = it.fileSize()?.let(::humanReadableByteCountSI).orEmpty(), + ) + } + } + } + .filterNotNull(), + initialType = { "attachment" }, + factories = attachmentsFactories, + afterList = { +// val header = AddStateItem.Section( +// id = "attachment.section", +// text = "Attachments", +// ) +// add(0, header) + }, + extra = { + val action = FlatItemAction( + title = "Attachment", + onClick = { + val intent = FilePickerIntent.OpenDocument { info -> + val msg = ToastMessage( + title = "Picked a file!", + text = info?.name?.toString(), + ) + showMessage.copy(msg) + + if (info != null) { + val model = SkeletonAttachment.Local( + identity = SkeletonAttachment.Local.Identity( + id = UUID.randomUUID().toString(), + uri = info.uri, + size = info.size, + ), + name = info.name ?: "File", + size = info.size?.let(::humanReadableByteCountSI).orEmpty(), + ) + add("attachment", model) + } + } + filePickerIntentSink.emit(intent) + }, + ) + val item = AddStateItem.Add( + id = "attachment.add", + text = translate(Res.strings.list_add), + actions = listOf(action), + ) + flowOf(emptyList()) + }, + ) + + val typeItemsFlow = typeFlow + .flatMapLatest { type -> + when (type) { + DSecret.Type.Login -> + combine( + passkeysFlow, + urisFlow, + ) { passkeys, uris -> + loginHolder.items + passkeys + uris + } + + DSecret.Type.Card -> flowOf(cardHolder.items) + DSecret.Type.Identity -> flowOf(identityHolder.items) + DSecret.Type.SecureNote -> flowOf(noteHolder.items) + DSecret.Type.None -> flowOf(emptyList()) + } + } + val miscItems by lazy { + listOf( + AddStateItem.Section( + id = "misc", + ), + AddStateItem.Note( + id = "misc.note", + state = noteHolder.note.state, + markdown = markdown, + ), + ) + } + val miscFlow = typeFlow + .map { type -> + val hasNotes = when (type) { + DSecret.Type.SecureNote -> true + else -> false + } + hasNotes + } + .distinctUntilChanged() + .map { hasNotes -> + miscItems.takeUnless { hasNotes }.orEmpty() + } + + val favouriteSink = mutablePersistedFlow("favourite") { + args.initialValue?.favorite + ?: false + } + val favouriteFlow = favouriteSink + .map { checked -> + SwitchFieldModel( + checked = checked, + onChange = favouriteSink::value::set, + ) + } + val reprompt = + AddStateItem.Switch( + id = "reprompt", + title = translate(Res.strings.additem_auth_reprompt_title), + text = translate(Res.strings.additem_auth_reprompt_text), + state = LocalStateItem( + flow = kotlin.run { + val sink = mutablePersistedFlow("reprompt") { + args.initialValue?.reprompt + ?: false + } + sink.map { + SwitchFieldModel( + checked = it, + onChange = sink::value::set, + ) + } + .persistingStateIn( + scope = screenScope, + started = SharingStarted.WhileSubscribed(), + initialValue = SwitchFieldModel(), + ) + }, + populator = { + copy( + reprompt = it.checked, + ) + }, + ), + ) + val actions = listOf(reprompt) + .map { item -> + when (item) { + is AddStateItem.Switch -> + item + .state.flow + .map { model -> + FlatItemAction( + id = item.id, + title = item.title, + text = item.text, + leading = icon(Icons.Outlined.Password), + trailing = { + Switch( + checked = model.checked, + onCheckedChange = model.onChange, + ) + }, + onClick = model.onChange?.partially1(!model.checked), + ) + } + + else -> { + TODO() + } + } + } + .foldAsList() + + val fieldsFactories = kotlin.run { + val textFactory = AddStateItemFieldTextFactory() + val booleanFactory = AddStateItemFieldBooleanFactory() + val linkedIdFactory = AddStateItemFieldLinkedIdFactory( + typeFlow = typeFlow, + ) + listOf( + textFactory, + booleanFactory, + linkedIdFactory, + ) + } + val fieldsFlow = foo3( + logRepository = logRepository, + scope = "field", + initial = args.initialValue?.fields.orEmpty(), + initialType = { field -> + when (field.type) { + DSecret.Field.Type.Text, + DSecret.Field.Type.Hidden, + -> "field.text" + + DSecret.Field.Type.Boolean -> "field.boolean" + DSecret.Field.Type.Linked -> "field.linked_id" + } + }, + factories = fieldsFactories, + afterList = { + val header = AddStateItem.Section( + id = "field.section", + text = translate(Res.strings.custom_fields), + ) + add(0, header) + }, + extra = { + typeBasedAddItem( + translator = this@produceScreenState, + scope = "field", + typesFlow = typeFlow + .map { type -> + val textType = Foo2Type( + type = "field.text", + name = translate(Res.strings.field_type_text), + ) + val booleanType = Foo2Type( + type = "field.boolean", + name = translate(Res.strings.field_type_boolean), + ) + val linkedIdType = Foo2Type( + type = "field.linked_id", + name = translate(Res.strings.field_type_linked), + ) + when (type) { + DSecret.Type.Login, + DSecret.Type.Card, + DSecret.Type.Identity, + -> listOf( + textType, + booleanType, + linkedIdType, + ) + + DSecret.Type.SecureNote -> listOf( + textType, + booleanType, + ) + + DSecret.Type.None -> emptyList() + } + }, + ) + }, + ) + + val titleItem = AddStateItem.Title( + id = "title", + state = LocalStateItem( + flow = kotlin.run { + val key = "title" + val sink = mutablePersistedFlow(key) { + args.name + ?: args.initialValue?.name + ?: args.autofill?.webDomain + ?: "" + } + val state = asComposeState(key) + combine( + sink + .validatedTitle(this), + typeFlow, + ) { validatedTitle, type -> + TextFieldModel2.of( + state = state, + hint = translate(type.titleH()), + validated = validatedTitle, + onChange = state::value::set, + ) + } + .persistingStateIn( + scope = screenScope, + started = SharingStarted.WhileSubscribed(1000L), + initialValue = TextFieldModel2.empty, + ) + }, + populator = { field -> + copy( + title = field.text, + ) + }, + ), + ) + val titleSuggestions = createItem2( + prefix = "title", + key = "title", + args = args, + getSuggestion = { it.name }, + selectedFlow = titleItem.state.flow.map { it.text }, + concealed = false, + onClick = { + titleItem.state.flow.value.onChange?.invoke(it) + }, + ) + val items1 = listOfNotNull( + titleItem, + titleSuggestions, + ) + + fun stetify(flow: Flow>) = flow + .map { items -> + items + .mapNotNull { item -> + val stateHolder = item as? AddStateItem.HasState + ?: return@mapNotNull null + + val state = stateHolder.state + val flow = state.flow + .map { v -> + state.populator + .partially2(v) + } + item.id to flow + } + } + + val title = if (args.ownershipRo) { + translate(Res.strings.additem_header_edit_title) + } else { + translate(Res.strings.additem_header_new_title) + } + val itfff = combine( + typeItemsFlow, + fieldsFlow, + attachmentsFlow, + miscFlow, + ) { arr -> + arr.toList().flatten() + } + .onEach { l -> + logRepository.post("Foo3", "combine ${l.size}") + } + + val outputFlow = combine( + stetify(itfff), + stetify(flowOf(items1 + reprompt)), + ) { arr -> + arr + .flatMap { + it + } + } + .flatMapLatest { populatorFlows -> + val typePopulator = + typeFlow + .map { type -> + val f = fun(r: CreateRequest): CreateRequest { + return r.copy(type = type) + } + f + } + val favouritePopulator = + favouriteSink + .map { favourite -> + val f = fun(r: CreateRequest): CreateRequest { + return r.copy(favorite = favourite) + } + f + } + val ownershipPopulator = + ownershipFlow + .map { ownership -> + val f = fun(r: CreateRequest): CreateRequest { + val requestOwnership = CreateRequest.Ownership2( + accountId = ownership.data.accountId, + folder = ownership.data.folderId, + organizationId = ownership.data.organizationId, + collectionIds = ownership.data.collectionIds, + ) + return r.copy(ownership2 = requestOwnership) + } + f + } + (populatorFlows.map { it.second } + ownershipPopulator + favouritePopulator + typePopulator) + .combineToList() + } + .map { populators -> + populators.fold( + initial = CreateRequest( + now = Clock.System.now(), + ), + ) { y, x -> x(y) } + } + .distinctUntilChanged() + val f = combine( + actions, + favouriteFlow, + ownershipFlow, + itfff, + outputFlow, + ) { q, s, c, x, request -> + logRepository.post( + "Foo3", + "create state ${x.size} (+${items1.size}) items| ${x.joinToString { it.id }}", + ) + val state = AddState( + title = title, + favourite = s, + ownership = c, + actions = q, + items = items1 + x, + sideEffects = sideEffects, + onSave = { + val cipherIdToRequestMap = mapOf( + args.initialValue?.id?.takeIf { args.ownershipRo } to request, + ) + addCipher(cipherIdToRequestMap) + .effectTap { + val intent = kotlin.run { + val list = mutableListOf() + list += NavigationIntent.PopById(screenId, exclusive = false) + if (args.behavior.launchEditedCipher) { + val cipherId = it.first() + val accountId = c.data.accountId!! + val route = VaultViewRoute( + itemId = cipherId, + accountId = accountId, + ) + list += NavigationIntent.NavigateToRoute(route) + } + NavigationIntent.Composite( + list = list, + ) + } + navigate(intent) + } + .launchIn(appScope) + }, + ) + Loadable.Ok(state) + } + f +} + +class AddStateItemAttachmentFactory : Foo2Factory { + override val type: String = "attachment" + + override fun RememberStateFlowScope.release(key: String) { + clearPersistedFlow("$key.name") + } + + override fun RememberStateFlowScope.add( + key: String, + initial: DSecret.Attachment?, + ): AddStateItem.Attachment { + val nameKey = "$key.name" + val nameSink = mutablePersistedFlow(nameKey) { + initial?.fileName().orEmpty() + } + val nameMutableState = asComposeState(nameKey) + + val textFlow = nameSink + .map { uri -> + TextFieldModel2( + text = uri, + state = nameMutableState, + onChange = nameMutableState::value::set, + ) + } + val stateFlow = textFlow + .map { text -> + AddStateItem.Attachment.State( + id = "id", + name = text, + size = null, // initial?.fileSize(), + synced = initial != null, + ) + } + .persistingStateIn( + scope = screenScope, + started = SharingStarted.WhileSubscribed(), + initialValue = AddStateItem.Attachment.State( + id = "id", + name = TextFieldModel2.empty, + size = null, + synced = initial != null, + ), + ) + return AddStateItem.Attachment( + id = key, + state = LocalStateItem( + flow = stateFlow, + populator = { state -> + this + }, + ), + ) + } +} + +class AddStateItemUriFactory( + private val cipherUnsecureUrlCheck: CipherUnsecureUrlCheck, +) : Foo2Factory { + override val type: String = "uri" + + override fun RememberStateFlowScope.release(key: String) { + clearPersistedFlow("$key.uri") + clearPersistedFlow("$key.match_type") + } + + override fun RememberStateFlowScope.add( + key: String, + initial: DSecret.Uri?, + ): AddStateItem.Url { + val uriKey = "$key.uri" + val uriSink = mutablePersistedFlow(uriKey) { + initial?.uri.orEmpty() + } + val uriMutableState = asComposeState(uriKey) + + val matchTypeSink = mutablePersistedFlow("$key.match_type") { + initial?.match ?: DSecret.Uri.MatchType.default + } + + val actionsAppPickerItem = FlatItemAction( + leading = icon(Icons.Outlined.Apps), + title = translate(Res.strings.uri_match_app_title), + trailing = { + ChevronIcon() + }, + onClick = { + val route = registerRouteResultReceiver(AppPickerRoute) { result -> + if (result is AppPickerResult.Confirm) { + uriMutableState.value = result.uri + matchTypeSink.value = DSecret.Uri.MatchType.default + } + } + val intent = NavigationIntent.NavigateToRoute( + route = route, + ) + navigate(intent) + }, + ) + // Add a ability to change the + // match type via an option. + val actionsMatchTypeItemFlow = matchTypeSink + .map { selectedMatchType -> + val text = translate(selectedMatchType.titleH()) + FlatItemAction( + leading = icon(Icons.Stub), + title = translate(Res.strings.uri_match_detection_title), + text = text, + onClick = { + val items = DSecret.Uri.MatchType.entries + .map { type -> + val typeTitle = translate(type.titleH()) + ConfirmationRoute.Args.Item.EnumItem.Item( + key = type.name, + title = typeTitle, + ) + } + val intent = createConfirmationDialogIntent( + item = ConfirmationRoute.Args.Item.EnumItem( + key = "name", + value = selectedMatchType.name, + items = items, + docs = mapOf( + DSecret.Uri.MatchType.Domain.name to ConfirmationRoute.Args.Item.EnumItem.Doc( + text = translate(Res.strings.uri_match_detection_domain_note), + url = "https://bitwarden.com/help/uri-match-detection/#base-domain", + ), + DSecret.Uri.MatchType.Host.name to ConfirmationRoute.Args.Item.EnumItem.Doc( + text = translate(Res.strings.uri_match_detection_host_note), + url = "https://bitwarden.com/help/uri-match-detection/#host", + ), + DSecret.Uri.MatchType.StartsWith.name to ConfirmationRoute.Args.Item.EnumItem.Doc( + text = translate(Res.strings.uri_match_detection_startswith_note), + url = "https://bitwarden.com/help/uri-match-detection/#starts-with", + ), + DSecret.Uri.MatchType.Exact.name to ConfirmationRoute.Args.Item.EnumItem.Doc( + text = translate(Res.strings.uri_match_detection_exact_note), + url = "https://bitwarden.com/help/uri-match-detection/#regular-expression", + ), + DSecret.Uri.MatchType.RegularExpression.name to ConfirmationRoute.Args.Item.EnumItem.Doc( + text = translate(Res.strings.uri_match_detection_regex_note), + url = "https://bitwarden.com/help/uri-match-detection/#regular-expression", + ), + DSecret.Uri.MatchType.Never.name to ConfirmationRoute.Args.Item.EnumItem.Doc( + text = translate(Res.strings.uri_match_detection_never_note), + url = "https://bitwarden.com/help/uri-match-detection/#exact", + ), + ), + ), + title = translate(Res.strings.uri_match_detection_title), + ) { newMatchTypeKey -> + matchTypeSink.value = + DSecret.Uri.MatchType.valueOf(newMatchTypeKey) + } + navigate(intent) + }, + ) + } + val actionsFlow = actionsMatchTypeItemFlow + .map { + listOf(it, actionsAppPickerItem) + } + + val textFlow = uriSink + .map { uri -> + TextFieldModel2( + text = uri, + state = uriMutableState, + onChange = uriMutableState::value::set, + ) + } + val stateFlow = combine( + textFlow, + matchTypeSink, + actionsFlow, + ) { text, matchType, actions -> + val badge = when (matchType) { + DSecret.Uri.MatchType.Never, + DSecret.Uri.MatchType.Host, + DSecret.Uri.MatchType.Domain, + DSecret.Uri.MatchType.Exact, + DSecret.Uri.MatchType.StartsWith, + -> { + val validationUri = validateUri( + uri = text.text, + allowBlank = true, + ) + if (validationUri == ValidationUri.OK) { + val isUnsecure = cipherUnsecureUrlCheck(text.text) + if (isUnsecure) { + TextFieldModel2.Vl( + type = TextFieldModel2.Vl.Type.WARNING, + text = translate(Res.strings.uri_unsecure), + ) + } else { + null + } + } else { + validationUri.format(this) + ?.let { error -> + TextFieldModel2.Vl( + type = TextFieldModel2.Vl.Type.WARNING, + text = error, + ) + } + } + } + + DSecret.Uri.MatchType.RegularExpression -> { + null + } + } + AddStateItem.Url.State( + options = actions, + text = text.copy(vl = badge), + matchType = matchType, + matchTypeTitle = matchType + .takeIf { it != DSecret.Uri.MatchType.default } + ?.let { + val name = translate(it.titleH()) + name + }, + ) + } + .persistingStateIn( + scope = screenScope, + started = SharingStarted.WhileSubscribed(), + initialValue = AddStateItem.Url.State( + text = TextFieldModel2.empty, + matchType = DSecret.Uri.MatchType.default, + ), + ) + return AddStateItem.Url( + id = key, + state = LocalStateItem( + flow = stateFlow, + populator = { state -> + val field = DSecret.Uri( + uri = state.text.text, + match = state.matchType, + ) + val newUris = uris.add(field) + copy(uris = newUris) + }, + ), + ) + } +} + +class AddStateItemPasskeyFactory( +) : Foo2Factory { + @kotlinx.serialization.Serializable + private data class PasskeyHolder( + val data: PasskeyData? = null, + ) + + @kotlinx.serialization.Serializable + private data class PasskeyData( + val credentialId: String, + val keyType: String, // public-key + val keyAlgorithm: String, // ECDSA + val keyCurve: String, // P-256 + val keyValue: String, + val rpId: String, + val rpName: String, + val counter: Int?, + val userHandle: String, + val userName: String? = null, + val userDisplayName: String? = null, + val discoverable: Boolean, + val creationDate: Instant, + ) + + private fun PasskeyData.toDomainOrNull(): DSecret.Login.Fido2Credentials? { + return DSecret.Login.Fido2Credentials( + credentialId = credentialId, + keyType = keyType, + keyAlgorithm = keyAlgorithm, + keyCurve = keyCurve, + keyValue = keyValue, + rpId = rpId, + rpName = rpName, + counter = counter, + userHandle = userHandle, + userName = userName, + userDisplayName = userDisplayName, + discoverable = discoverable, + creationDate = creationDate, + ) + } + + override val type: String = "passkey" + + override fun RememberStateFlowScope.release(key: String) { + clearPersistedFlow("$key.data") + } + + override fun RememberStateFlowScope.add( + key: String, + initial: DSecret.Login.Fido2Credentials?, + ): AddStateItem.Passkey { + val dataKey = "$key.data" + val dataSink = mutablePersistedFlow( + dataKey, + serialize = { json, m: PasskeyHolder -> + json.encodeToString(m) + }, + deserialize = { json, m: String -> + json.decodeFromString(m) + }, + ) { + val data = initial?.let { + PasskeyData( + credentialId = it.credentialId, + keyType = it.keyType, + keyAlgorithm = it.keyAlgorithm, + keyCurve = it.keyCurve, + keyValue = it.keyValue, + rpId = it.rpId, + rpName = it.rpName, + counter = it.counter, + userHandle = it.userHandle, + userName = it.userName, + userDisplayName = it.userDisplayName, + discoverable = it.discoverable, + creationDate = it.creationDate, + ) + } + PasskeyHolder(data = data) + } + + val stateFlow = dataSink + .map { holder -> + val passkey = holder.data?.toDomainOrNull() + AddStateItem.Passkey.State( + passkey = passkey, + ) + } + .persistingStateIn( + scope = screenScope, + started = SharingStarted.WhileSubscribed(), + initialValue = AddStateItem.Passkey.State( + passkey = null, + ), + ) + return AddStateItem.Passkey( + id = key, + state = LocalStateItem( + flow = stateFlow, + populator = { state -> + val passkey = state.passkey + // Do not modify the state if the + // passkey does not exist. + ?: return@LocalStateItem this + val newFido2Credentials = fido2Credentials.add(passkey) + copy(fido2Credentials = newFido2Credentials) + }, + ), + ) + } +} + +abstract class AddStateItemFieldFactory : Foo2Factory { + fun foo( + key: String, + flow: StateFlow, + ) = AddStateItem.Field( + id = key, + state = LocalStateItem( + flow = flow, + populator = { state -> + val field = when (state) { + is AddStateItem.Field.State.Text -> { + val fieldType = if (state.hidden) { + DSecret.Field.Type.Hidden + } else { + DSecret.Field.Type.Text + } + DSecret.Field( + name = state.label.text, + value = state.text.text, + type = fieldType, + ) + } + + is AddStateItem.Field.State.Switch -> { + DSecret.Field( + name = state.label.text, + value = state.checked.toString(), + type = DSecret.Field.Type.Boolean, + ) + } + + is AddStateItem.Field.State.LinkedId -> { + if (state.value == null) { + return@LocalStateItem this + } + + DSecret.Field( + name = state.label.text, + linkedId = state.value, + type = DSecret.Field.Type.Linked, + ) + } + } + val newFields = fields.add(field) + copy(fields = newFields) + }, + ), + ) +} + +class AddStateItemFieldTextFactory : AddStateItemFieldFactory() { + override val type: String = "field.text" + + override fun RememberStateFlowScope.release(key: String) { + clearPersistedFlow("$key.label") + clearPersistedFlow("$key.text") + clearPersistedFlow("$key.conceal") + } + + override fun RememberStateFlowScope.add( + key: String, + initial: DSecret.Field?, + ): AddStateItem.Field { + val labelSink = mutablePersistedFlow("$key.label") { + initial?.name.orEmpty() + } + val labelMutableState = mutableComposeState(labelSink) + val labelFlow = labelSink.map { label -> + TextFieldModel2( + text = label, + hint = "Label", + state = labelMutableState, + onChange = labelMutableState::value::set, + ) + } + + val textSink = mutablePersistedFlow("$key.text") { + initial?.value.orEmpty() + } + val textMutableState = mutableComposeState(textSink) + val textFlow = textSink.map { text -> + TextFieldModel2( + text = text, + hint = "Value", + state = textMutableState, + onChange = textMutableState::value::set, + ) + } + + val concealSink = mutablePersistedFlow("$key.conceal") { + initial?.type == DSecret.Field.Type.Hidden + } + + val actionsConcealItemFlow = concealSink + .map { conceal -> + FlatItemAction( + leading = { + val imageVector = if (conceal) { + Icons.Outlined.VisibilityOff + } else { + Icons.Outlined.Visibility + } + Crossfade(targetState = imageVector) { iv -> + IconBox( + main = iv, + ) + } + }, + title = "Conceal value", + trailing = { + Checkbox( + checked = conceal, + onCheckedChange = null, + ) + }, + onClick = { + concealSink.value = !conceal + }, + ) + } + val actionsFlow = actionsConcealItemFlow + .map { concealItem -> + listOf( + concealItem, + ) + } + + val stateFlow = combine( + labelFlow, + textFlow, + concealSink, + actionsFlow, + ) { labelField, textField, hidden, actions -> + AddStateItem.Field.State.Text( + label = labelField, + text = textField, + hidden = hidden, + options = actions, + ) + } + .persistingStateIn( + scope = screenScope, + started = SharingStarted.WhileSubscribed(1000L), + initialValue = AddStateItem.Field.State.Text( + label = TextFieldModel2.empty, + text = TextFieldModel2.empty, + ), + ) + return foo( + key = key, + flow = stateFlow, + ) + } +} + +class AddStateItemFieldBooleanFactory : AddStateItemFieldFactory() { + override val type: String = "field.boolean" + + override fun RememberStateFlowScope.release(key: String) { + clearPersistedFlow("$key.label") + clearPersistedFlow("$key.check") + } + + override fun RememberStateFlowScope.add( + key: String, + initial: DSecret.Field?, + ): AddStateItem.Field { + val labelSink = mutablePersistedFlow("$key.label") { + initial?.name.orEmpty() + } + val labelMutableState = mutableComposeState(labelSink) + val labelFlow = labelSink.map { label -> + TextFieldModel2( + text = label, + hint = "Label", + state = labelMutableState, + onChange = labelMutableState::value::set, + ) + } + + val checkedSink = mutablePersistedFlow("$key.check") { + initial?.value.toBoolean() + } + + val stateFlow = combine( + labelFlow, + checkedSink, + ) { label, checked -> + AddStateItem.Field.State.Switch( + label = label, + checked = checked, + onCheckedChange = checkedSink::value::set, + ) + } + .persistingStateIn( + scope = screenScope, + started = SharingStarted.WhileSubscribed(1000L), + initialValue = AddStateItem.Field.State.Switch( + label = TextFieldModel2.empty, + ), + ) + return foo( + key = key, + flow = stateFlow, + ) + } +} + +class AddStateItemFieldLinkedIdFactory( + private val typeFlow: Flow, +) : AddStateItemFieldFactory() { + override val type: String = "field.linked_id" + + override fun RememberStateFlowScope.release(key: String) { + clearPersistedFlow("$key.label") + clearPersistedFlow("$key.linked_id") + } + + override fun RememberStateFlowScope.add( + key: String, + initial: DSecret.Field?, + ): AddStateItem.Field { + val labelSink = mutablePersistedFlow("$key.label") { + initial?.name.orEmpty() + } + val labelMutableState = mutableComposeState(labelSink) + val labelFlow = labelSink.map { label -> + TextFieldModel2( + text = label, + hint = "Label", + state = labelMutableState, + onChange = labelMutableState::value::set, + ) + } + + val valueSink = mutablePersistedFlow("$key.linked_id") { + initial?.linkedId + } + val valueFlow = combine( + valueSink, + typeFlow, + ) { linkedIdOrNull, type -> + linkedIdOrNull + ?.takeIf { it.type == type } + ?: kotlin.run { + DSecret.Field.LinkedId.entries + .firstOrNull { it.type == type } + } + } + val actionsAll = DSecret.Field.LinkedId.entries + .map { actionLinkedId -> + actionLinkedId to FlatItemAction( + id = actionLinkedId.name, + leading = { + val selectedLinkedId by valueFlow.collectAsState(initial = null) + RadioButton( + selected = selectedLinkedId == actionLinkedId, + onClick = null, + ) + }, + title = translate(actionLinkedId.titleH()), + onClick = { + valueSink.value = actionLinkedId + }, + ) + } + val actionsFlow = typeFlow + .map { type -> + actionsAll + .mapNotNull { (itemLinkedId, itemAction) -> + itemAction + .takeIf { itemLinkedId.type == type } + } + } + val stateFlow = combine( + labelFlow, + valueFlow, + actionsFlow, + ) { label, linkedId, actions -> + AddStateItem.Field.State.LinkedId( + label = label, + value = linkedId, + actions = actions, + ) + } + .persistingStateIn( + scope = screenScope, + started = SharingStarted.WhileSubscribed(1000L), + initialValue = AddStateItem.Field.State.LinkedId( + label = TextFieldModel2.empty, + value = null, + actions = emptyList(), + ), + ) + return foo( + key = key, + flow = stateFlow, + ) + } +} + +interface Foo2Factory where T : AddStateItem, T : AddStateItem.HasOptions { + val type: String + + fun RememberStateFlowScope.add(key: String, initial: Default?): T + + fun RememberStateFlowScope.release(key: String) +} + +data class Foo2Type( + val type: String, + val name: String, +) + +data class Foo2Persistable( + val key: String, + val type: String, +) : Serializable + +data class Foo2InitialState( + val items: List>, +) { + data class Item( + val key: String, + val type: String, + val argument: Argument? = null, + ) +} + +fun RememberStateFlowScope.foo3( + logRepository: LogRepository, + scope: String, + initial: List, + initialType: (Argument) -> String, + factories: List>, + afterList: MutableList.() -> Unit, + extra: FieldBakeryScope.() -> Flow> = { + flowOf(emptyList()) + }, +): Flow> where T : AddStateItem, T : AddStateItem.HasOptions { + val initialState = Foo2InitialState( + items = initial + .associateBy { + UUID.randomUUID().toString() + } + .map { entry -> + Foo2InitialState.Item( + key = entry.key, + type = initialType(entry.value), + argument = entry.value, + ) + }, + ) + logRepository.post("Foo3", "Scope '$scope' with initial ${initial.size} items.") + return foo( + scope = scope, + initialState = initialState, + entryAdd = { (key, type), arg -> + val factory = factories.first { it.type == type } + with(factory) { + add(key, arg) + } + }, + entryRelease = { (key, type) -> + val factory = factories.first { it.type == type } + with(factory) { + release(key) + } + }, + afterList = afterList, + extra = extra, + ) + .onEach { l -> + logRepository.post("Foo3", "Scope '$scope' emit ${l.size}") + } +} + +fun RememberStateFlowScope.foo2( + scope: String, + initialState: Foo2InitialState, + factories: List>, + afterList: MutableList.() -> Unit, + extra: FieldBakeryScope.() -> Flow> = { + flowOf(emptyList()) + }, +): Flow> where T : AddStateItem, T : AddStateItem.HasOptions { + return foo( + scope = scope, + initialState = initialState, + entryAdd = { (key, type), arg -> + val factory = factories.first { it.type == type } + with(factory) { + add(key, arg) + } + }, + entryRelease = { (key, type) -> + val factory = factories.first { it.type == type } + with(factory) { + release(key) + } + }, + afterList = afterList, + extra = extra, + ) +} + +interface FieldBakeryScope { + fun moveUp(key: String) + + fun moveDown(key: String) + + fun delete(key: String) + + fun add(type: String, arg: Argument?) +} + +private fun FieldBakeryScope.typeBasedAddItem( + translator: TranslatorScope, + scope: String, + typesFlow: Flow>, +): Flow> = typesFlow + .map { types -> + if (types.isEmpty()) { + return@map null // hide add item + } + + val actions = types + .map { type -> + FlatItemAction( + title = type.name, + onClick = ::add + .partially1(type.type) + .partially1(null), + ) + } + AddStateItem.Add( + id = "$scope.add", + text = translator.translate(Res.strings.list_add), + actions = actions, + ) + } + .map { listOfNotNull(it) } + +fun RememberStateFlowScope.foo( + // scope name, + scope: String, + initialState: Foo2InitialState, + entryAdd: RememberStateFlowScope.(Foo2Persistable, Argument?) -> T, + entryRelease: RememberStateFlowScope.(Foo2Persistable) -> Unit, + afterList: MutableList.() -> Unit, + extra: FieldBakeryScope.() -> Flow> = { + flowOf(emptyList()) + }, +): Flow> where T : AddStateItem, T : AddStateItem.HasOptions { + var inMemoryArguments = initialState + .items + .mapNotNull { + if (it.argument != null) { + it.key to it.argument + } else { + null + } + } + .toMap() + .toPersistentMap() + + val persistableSink = mutablePersistedFlow("$scope.keys") { + initialState + .items + .map { + Foo2Persistable( + key = it.key, + type = it.type, + ) + } + } + + fun move(key: String, offset: Int) = persistableSink.update { state -> + val i = state.indexOfFirst { it.key == key } + if ( + i == -1 || + i + offset < 0 || + i + offset >= state.size + ) { + return@update state + } + + val newState = state.toMutableList() + val item = newState.removeAt(i) + newState.add(i + offset, item) + newState + } + + fun moveUp(key: String) = move(key, offset = -1) + + fun moveDown(key: String) = move(key, offset = 1) + + fun delete(key: String) = persistableSink.update { state -> + inMemoryArguments = inMemoryArguments.remove(key) + + val i = state.indexOfFirst { it.key == key } + if (i == -1) return@update state + + val newState = state.toMutableList() + newState.removeAt(i) + newState + } + + fun add(type: String, arg: Argument?) { + val key = "$scope.items." + UUID.randomUUID().toString() + // Remember the argument, so we can grab it and construct something + // persistent from it. + if (arg != null) { + inMemoryArguments = inMemoryArguments.put(key, arg) + } + + val newEntry = Foo2Persistable( + key = key, + type = type, + ) + persistableSink.update { state -> + state + newEntry + } + } + + val scope2 = object : FieldBakeryScope { + override fun moveUp(key: String) = moveUp(key) + + override fun moveDown(key: String) = moveDown(key) + + override fun delete(key: String) = delete(key) + + override fun add(type: String, arg: Argument?) = add(type, arg) + } + + val keysFlow = persistableSink + .scan( + initial = listOf(), + ) { state, new -> + // Find if a new entry has a different + // type comparing to the old one. + new.forEach { (key, type) -> + val existingEntry = state.firstOrNull { it.key == key } + when (val existingType = existingEntry?.type) { + type, + null, + -> { + // Do nothing. + } + + else -> { + val item = Foo2Persistable(key, existingType) + entryRelease(item) + } + } + } + // Clean-up removed entries. + state.forEach { (key, type) -> + val removed = new.none { it.key == key } + if (removed) { + val item = Foo2Persistable(key, type) + entryRelease(item) + } + } + + new + } + val itemsFlow = keysFlow + .map { state -> + state.mapIndexed { index, entry -> + val arg = inMemoryArguments[entry.key] + val item = entryAdd(entry, arg) + + // Appends list-specific options to be able to reorder + // the list or remove an item. + val options = item.options.toMutableList() + if (index > 0) { + options += FlatItemAction( + icon = Icons.Outlined.ArrowUpward, + title = translate(Res.strings.list_move_up), + onClick = ::moveUp.partially1(entry.key), + ) + } + if (index < state.size - 1) { + options += FlatItemAction( + icon = Icons.Outlined.ArrowDownward, + title = translate(Res.strings.list_move_down), + onClick = ::moveDown.partially1(entry.key), + ) + } + options += FlatItemAction( + icon = Icons.Outlined.DeleteForever, + title = translate(Res.strings.list_remove), + onClick = { + val intent = createConfirmationDialogIntent( + icon = icon(Icons.Outlined.DeleteForever), + title = translate(Res.strings.list_remove_confirmation_title), + ) { + delete(entry.key) + } + navigate(intent) + }, + ) + + item.withOptions(options) + } + } + val extraFlow = extra(scope2) + return combine( + itemsFlow, + extraFlow, + ) { items, customItems -> + val out = items + .widen() + .toMutableList() + out += customItems + out.apply(afterList) + } + .shareIn(screenScope, SharingStarted.WhileSubscribed(5000L), replay = 1) +} + +private suspend fun RememberStateFlowScope.produceOwnershipFlow( + args: AddRoute.Args, + getProfiles: GetProfiles, + getOrganizations: GetOrganizations, + getCollections: GetCollections, + getFolders: GetFolders, + getCiphers: GetCiphers, +): Flow { + val ro = args.ownershipRo + + data class Fool( + val value: T, + val element: AddState.SaveToElement?, + ) + + val disk = loadDiskHandle("new_item") + val accountIdSink = mutablePersistedFlow( + key = "ownership.account_id", + storage = PersistedStorage.InDisk(disk), + ) { null } + + val initialState = kotlin.run { + if (args.initialValue != null) { + return@run AddItemOwnershipData( + accountId = args.initialValue.accountId, + organizationId = args.initialValue.organizationId, + collectionIds = args.initialValue.collectionIds, + folder = kotlin.run { + val folderId = args.initialValue.folderId + if (folderId != null) { + FolderInfo.Id(folderId) + } else { + FolderInfo.None + } + }, + ) + } + + // Make an account that has the most ciphers a + // default account. + val accountId = ioEffect { + val accountIds = getProfiles().toIO().bind() + .map { it.accountId() } + .toSet() + + fun String.takeIfAccountIdExists() = this + .takeIf { id -> + id in accountIds + } + + val lastAccountId = accountIdSink.value?.takeIfAccountIdExists() + if (lastAccountId != null) { + return@ioEffect lastAccountId + } + + val ciphers = getCiphers().toIO().bind() + ciphers + .asSequence() + .filter { it.organizationId != null } + .groupBy { it.accountId } + // the one that has the most ciphers + .maxByOrNull { entry -> entry.value.size } + // account id + ?.key + ?.takeIfAccountIdExists() + }.attempt().bind().getOrNull() + + AddItemOwnershipData( + accountId = accountId, + organizationId = null, + collectionIds = emptySet(), + folder = FolderInfo.None, + ) + } + val sink = mutablePersistedFlow("ownership") { + initialState + } + + // If we are creating a new item, then remember the + // last selected account to pre-select it next time. + // TODO: Remember only when an item is created. + sink + .map { it.accountId } + .onEach(accountIdSink::value::set) + .launchIn(screenScope) + + val accountFlow = combine( + sink + .map { it.accountId } + .distinctUntilChanged(), + getProfiles(), + ) { accountId, profiles -> + if (accountId == null) { + val item = AddState.SaveToElement.Item( + key = "account.empty", + title = translate(Res.strings.account_none), + ) + val el = AddState.SaveToElement( + readOnly = ro, + items = listOf(item), + ) + return@combine Fool( + value = null, + element = el, + ) + } + val profileOrNull = profiles + .firstOrNull { it.accountId() == accountId } + val el = AddState.SaveToElement( + readOnly = ro, + items = listOfNotNull(profileOrNull) + .map { account -> + val key = "account.${account.accountId()}" + AddState.SaveToElement.Item( + key = key, + title = account.email, + text = account.accountHost, + accentColors = account.accentColor, + ) + }, + ) + Fool( + value = accountId, + element = el, + ) + } + + val organizationFlow = combine( + sink + .map { it.organizationId } + .distinctUntilChanged(), + getOrganizations(), + ) { organizationId, organizations -> + if (organizationId == null) { + val item = AddState.SaveToElement.Item( + key = "organization.empty", + title = translate(Res.strings.organization_none), + ) + val el = AddState.SaveToElement( + readOnly = ro, + items = listOf(item), + ) + return@combine Fool( + value = null, + element = el, + ) + } + val organizationOrNull = organizations + .firstOrNull { it.id == organizationId } + val el = AddState.SaveToElement( + readOnly = ro, + items = listOfNotNull(organizationOrNull) + .map { organization -> + val key = "organization.${organization.id}" + AddState.SaveToElement.Item( + key = key, + title = organization.name, + ) + }, + ) + Fool( + value = organizationId, + element = el, + ) + } + + val collectionFlow = combine( + sink + .map { it.collectionIds } + .distinctUntilChanged(), + getCollections(), + ) { collectionIds, collections -> + if (collectionIds.isEmpty()) { + return@combine Fool( + value = emptySet(), + element = null, + ) + } + + val selectedCollections = collections + .sortedBy { it.name } + .filter { it.id in collectionIds } + val el = AddState.SaveToElement( + readOnly = ro, + items = selectedCollections + .map { collection -> + val key = "collection.${collection.id}" + AddState.SaveToElement.Item( + key = key, + title = collection.name, + ) + }, + ) + Fool( + value = collectionIds, + element = el, + ) + } + + val folderFlow = combine( + sink + .map { it.folder } + .distinctUntilChanged(), + getFolders(), + ) { selectedFolder, folders -> + when (selectedFolder) { + is FolderInfo.None -> { + val item = AddState.SaveToElement.Item( + key = "folder.empty", + title = translate(Res.strings.folder_none), + ) + val el = AddState.SaveToElement( + readOnly = false, + items = listOf(item), + ) + return@combine Fool( + value = selectedFolder, + element = el, + ) + } + + is FolderInfo.New -> { + val item = AddState.SaveToElement.Item( + key = "folder.new", + title = selectedFolder.name, + ) + val el = AddState.SaveToElement( + readOnly = false, + items = listOf(item), + ) + return@combine Fool( + value = selectedFolder, + element = el, + ) + } + + is FolderInfo.Id -> { + val selectedFolderOrNull = folders + .firstOrNull { it.id == selectedFolder.id } + val el = AddState.SaveToElement( + readOnly = false, + items = listOfNotNull(selectedFolderOrNull) + .map { folder -> + val key = "folder.${folder.id}" + AddState.SaveToElement.Item( + key = key, + title = folder.name, + ) + }, + ) + Fool( + value = selectedFolder, + element = el, + ) + } + } + } + + return combine( + accountFlow, + organizationFlow, + collectionFlow, + folderFlow, + ) { account, organization, collection, folder -> + val flags = if (ro) { + OrganizationConfirmationRoute.Args.RO_ACCOUNT or + OrganizationConfirmationRoute.Args.RO_ORGANIZATION or + OrganizationConfirmationRoute.Args.RO_COLLECTION + } else { + 0 + } + val data = AddState.Ownership.Data( + accountId = account.value, + folderId = folder.value, + organizationId = organization.value, + collectionIds = collection.value, + ) + AddState.Ownership( + data = data, + account = account.element, + organization = organization.element.takeIf { account.value != null }, + collection = collection.element.takeIf { account.value != null }, + folder = folder.element, + onClick = { + val route = registerRouteResultReceiver( + route = OrganizationConfirmationRoute( + args = OrganizationConfirmationRoute.Args( + decor = OrganizationConfirmationRoute.Args.Decor( + title = "Save to", + icon = Icons.Outlined.AccountBox, + ), + flags = flags, + accountId = account.value, + organizationId = organization.value, + folderId = folder.value, + collectionsIds = collection.value, + ), + ), + ) { result -> + if (result is OrganizationConfirmationResult.Confirm) { + val newState = AddItemOwnershipData( + accountId = result.accountId, + organizationId = result.organizationId, + collectionIds = result.collectionsIds, + folder = result.folderId, + ) + sink.value = newState + } + } + val intent = NavigationIntent.NavigateToRoute(route) + navigate(intent) + }, + ) + } +} + +data class TmpLogin( + val username: AddStateItem.Username, + val password: AddStateItem.Password, + val totp: AddStateItem.Totp, + val items: List, +) + +data class TmpCard( + val cardholderName: AddStateItem.Text, + val brand: AddStateItem.Text, + val number: AddStateItem.Text, + val fromDate: AddStateItem.DateMonthYear, + val expDate: AddStateItem.DateMonthYear, + val code: AddStateItem.Text, + val items: List, +) + +data class TmpIdentity( + val title: AddStateItem.Text, + val firstName: AddStateItem.Text, + val middleName: AddStateItem.Text, + val lastName: AddStateItem.Text, + val address1: AddStateItem.Text, + val address2: AddStateItem.Text, + val address3: AddStateItem.Text, + val city: AddStateItem.Text, + val state: AddStateItem.Text, + val postalCode: AddStateItem.Text, + val country: AddStateItem.Text, + val company: AddStateItem.Text, + val email: AddStateItem.Text, + val phone: AddStateItem.Text, + val ssn: AddStateItem.Text, + val username: AddStateItem.Text, + val passportNumber: AddStateItem.Text, + val licenseNumber: AddStateItem.Text, + val items: List, +) + +data class TmpNote( + val note: AddStateItem.Note, + val items: List, +) + +private suspend fun RememberStateFlowScope.produceLoginState( + args: AddRoute.Args, + ownershipFlow: Flow, + copyText: CopyText, + getTotpCode: GetTotpCode, + getGravatarUrl: GetGravatarUrl, +): TmpLogin { + val prefix = "login" + + suspend fun createItemUsername( + key: String, + initialValue: String? = null, + populator: CreateRequest.(AddStateItem.Username.State) -> CreateRequest, + factory: (String, LocalStateItem) -> Item, + ) = kotlin.run { + val id = "$prefix.$key" + + val sink = mutablePersistedFlow(id) { initialValue.orEmpty() } + val state = mutableComposeState(sink) + factory( + id, + LocalStateItem( + flow = ownershipFlow + .map { + it.account + ?.items + ?.asSequence() + ?.map { it.title } + ?.toPersistentList() + ?: persistentListOf() + } + .combine(sink) { autocompleteOptions, value -> + val model = TextFieldModel2( + state = state, + text = value, + autocompleteOptions = autocompleteOptions, + onChange = state::value::set, + ) + AddStateItem.Username.State( + value = model, + type = UsernameVariation2.of(getGravatarUrl, value), + ) + } + .persistingStateIn( + scope = screenScope, + started = SharingStarted.WhileSubscribed(), + initialValue = + AddStateItem.Username.State( + value = TextFieldModel2.empty, + type = UsernameVariation2.default, + ), + ), + populator = populator, + ), + ) + } + + suspend fun createItem( + key: String, + initialValue: String? = null, + populator: CreateRequest.(TextFieldModel2) -> CreateRequest, + factory: (String, LocalStateItem) -> Item, + ) = kotlin.run { + val id = "$prefix.$key" + + val sink = mutablePersistedFlow(id) { initialValue.orEmpty() } + val state = mutableComposeState(sink) + factory( + id, + LocalStateItem( + flow = sink + .map { value -> + TextFieldModel2( + state = state, + text = value, + onChange = state::value::set, + ) + } + .persistingStateIn( + scope = screenScope, + started = SharingStarted.WhileSubscribed(), + initialValue = TextFieldModel2.empty, + ), + populator = populator, + ), + ) + } + + val login = args.initialValue?.login + + val username = createItemUsername( + key = "username", + initialValue = args.username ?: args.autofill?.username ?: login?.username, + populator = { + copy( + login = this.login.copy( + username = it.value.text, + ), + ) + }, + ) { id, state -> + AddStateItem.Username( + id = id, + state = state, + ) + } + val usernameSuggestions = createItem2( + prefix = prefix, + key = "username", + args = args, + getSuggestion = { it.login?.username }, + selectedFlow = username.state.flow.map { it.value.text }, + onClick = { + username.state.flow.value.value.onChange?.invoke(it) + }, + ) + val password = createItem( + key = "password", + initialValue = args.password ?: args.autofill?.password ?: login?.password, + populator = { + copy( + login = this.login.copy( + password = it.text, + ), + ) + }, + ) { id, state -> + AddStateItem.Password( + id = id, + state = state, + ) + } + val passwordSuggestions = createItem2( + prefix = prefix, + key = "password", + args = args, + getSuggestion = { it.login?.password }, + selectedFlow = password.state.flow.map { it.text }, + concealed = true, + onClick = { + password.state.flow.value.onChange?.invoke(it) + }, + ) + + val totpState = kotlin.run { + val sink = mutablePersistedFlow("totp") { + args.initialValue?.login?.totp?.raw.orEmpty() + } + val state = mutableComposeState(sink) + val totpFlow = sink + .debounce(80L) + .map { raw -> + val token = if (raw.isBlank()) { + null + } else { + TotpToken.parse(raw).getOrNull() + } + token + } + .onStart { + val initialState = null + emit(initialState) + } + val flow = combine( + sink + .map { raw -> + TextFieldModel2( + state = state, + text = raw, + onChange = state::value::set, + ) + }, + totpFlow, + ) { value, totp -> + AddStateItem.Totp.State( + value = value, + copyText = copyText, + totpToken = totp, + ) + } + LocalStateItem( + flow = flow + .persistingStateIn( + scope = screenScope, + started = SharingStarted.WhileSubscribed(), + initialValue = AddStateItem.Totp.State( + value = TextFieldModel2.empty, + copyText = copyText, + totpToken = null, + ), + ), + populator = { + this.copy( + login = this.login.copy( + totp = it.value.text, + ), + ) + }, + ) + } + val totp = AddStateItem.Totp( + id = "$prefix.totp", + state = totpState, + ) + val totpSuggestions = createItem2( + prefix = prefix, + key = "totp", + args = args, + getSuggestion = { it.login?.totp?.raw }, + selectedFlow = totp.state.flow.map { it.value.text }, + concealed = true, + onClick = { + totp.state.flow.value.value.onChange?.invoke(it) + }, + ) + + val items = listOfNotNull( + username, + usernameSuggestions, + password, + passwordSuggestions, + totp, + totpSuggestions, + ) + return TmpLogin( + username = username, + password = password, + totp = totp, + items = items, + ) +} + +private suspend fun RememberStateFlowScope.produceCardState( + args: AddRoute.Args, +): TmpCard { + val prefix = "card" + + suspend fun RememberStateFlowScope.createItem2( + prefix: String, + key: String, + initialMonth: String? = null, + initialYear: String? = null, + populator: CreateRequest.(AddStateItem.DateMonthYear.State) -> CreateRequest, + factory: (String, LocalStateItem) -> Item, + ): Item { + val id = "$prefix.$key" + + val monthSink = mutablePersistedFlow("$id.month") { initialMonth.orEmpty() } + val monthState = mutableComposeState(monthSink) + val monthFlow = monthSink + .map { value -> + val model = TextFieldModel2( + state = monthState, + text = value, + onChange = monthState::value::set, + ) + model + } + + val yearSink = mutablePersistedFlow("$id.year") { initialYear.orEmpty() } + val yearState = mutableComposeState(yearSink) + val yearFlow = yearSink + .map { value -> + val model = TextFieldModel2( + state = yearState, + text = value, + onChange = yearState::value::set, + ) + model + } + + return factory( + id, + LocalStateItem( + flow = combine( + monthFlow, + yearFlow, + ) { month, year -> + AddStateItem.DateMonthYear.State( + month = month, + year = year, + onClick = { + val route = registerRouteResultReceiver( + DatePickerRoute( + DatePickerRoute.Args( + month = month.text.toIntOrNull(), + year = year.text.toIntOrNull(), + ), + ), + ) { result -> + if (result is DatePickerResult.Confirm) { + monthState.value = result.month.value + .toString() + .padStart(2, '0') + yearState.value = result.year.value.toString() + } + } + val intent = NavigationIntent.NavigateToRoute(route) + navigate(intent) + }, + ) + } + .persistingStateIn( + scope = screenScope, + started = SharingStarted.WhileSubscribed(), + initialValue = AddStateItem.DateMonthYear.State( + month = TextFieldModel2.empty, + year = TextFieldModel2.empty, + onClick = { + val route = registerRouteResultReceiver( + DatePickerRoute( + DatePickerRoute.Args(), + ), + ) { + } + val intent = NavigationIntent.NavigateToRoute(route) + navigate(intent) + }, + ), + ), + populator = populator, + ), + ) + } + + suspend fun RememberStateFlowScope.createItem2( + prefix: String, + key: String, + label: String, + initialMonth: String? = null, + initialYear: String? = null, + populator: CreateRequest.(AddStateItem.DateMonthYear.State) -> CreateRequest, + ) = createItem2( + prefix = prefix, + key = key, + initialMonth = initialMonth, + initialYear = initialYear, + populator = populator, + ) { id, state -> + AddStateItem.DateMonthYear( + id = id, + state = state, + label = label, + ) + } + + suspend fun createItem( + key: String, + label: String? = null, + hint: String? = null, + initialValue: String? = null, + singleLine: Boolean = false, + autocompleteOptions: ImmutableList = persistentListOf(), + keyboardOptions: KeyboardOptions = KeyboardOptions.Default, + visualTransformation: VisualTransformation = VisualTransformation.None, + lens: Optional, + ) = createItem( + prefix = prefix, + key = key, + label = label, + hint = hint, + initialValue = initialValue, + singleLine = singleLine, + autocompleteOptions = autocompleteOptions, + keyboardOptions = keyboardOptions, + visualTransformation = visualTransformation, + populator = { + lens.set(this, it.value.text) + }, + ) + + val ff2 = "\\D".toRegex() + + suspend fun createItem4( + key: String, + label: String? = null, + initialValue: String? = null, + autocompleteOptions: ImmutableList = persistentListOf(), + keyboardOptions: KeyboardOptions = KeyboardOptions.Default, + visualTransformation: VisualTransformation = VisualTransformation.None, + lens: Optional, + ) = kotlin.run { + val id = "$prefix.$key" + + val sink = mutablePersistedFlow(id) { initialValue.orEmpty() } + val state = mutableComposeState(sink) + val state2 = LocalStateItem( + flow = sink + .map { value -> + val isValid = kotlin.run { + val n = value.replace(ff2, "") + if (n.isBlank()) { + return@run true + } + val luhn by lazy { + validLuhn(n) + } + val t = creditCards + .asSequence() + // Use eager pattern to detect card type even if + // the user hasn't finished typing. + .filter { creditCardType -> + val result = creditCardType.eagerPattern.find(n) + result?.groups?.isNotEmpty() == true + } + .filter { creditCardType -> + if (n.length < creditCardType.digits.first) { + // This card could still be this type. + true + } else if (n.length in creditCardType.digits) { + // This card must pass strict regex. + creditCardType.pattern.matches(n) && + (!creditCardType.luhn || luhn) + } else { + false + } + } + .firstOrNull() + t != null + } + val badge = if (!isValid) { + TextFieldModel2.Vl( + type = TextFieldModel2.Vl.Type.WARNING, + text = translate(Res.strings.error_invalid_card_number), + ) + } else { + null + } + + val model = TextFieldModel2( + state = state, + text = value, + hint = "4111 1111 1111 1111", + vl = badge, + autocompleteOptions = autocompleteOptions, + onChange = state::value::set, + ) + AddStateItem.Text.State( + value = model, + label = label, + singleLine = true, + keyboardOptions = keyboardOptions, + visualTransformation = visualTransformation, + ) + } + .persistingStateIn( + scope = screenScope, + started = SharingStarted.WhileSubscribed(), + initialValue = AddStateItem.Text.State( + value = TextFieldModel2.empty, + label = label, + ), + ), + populator = { + lens.set(this, it.value.text) + }, + ) + return@run AddStateItem.Text( + id = id, + state = state2, + ) + } + + val card = args.initialValue?.card + val number = createItem4( + key = "number", + label = translate(Res.strings.card_number), + initialValue = card?.number, + keyboardOptions = KeyboardOptions( + autoCorrect = false, + keyboardType = KeyboardType.Number, + ), + visualTransformation = GenericSeparatorVisualTransformation(), + lens = CreateRequest.card.number, + ) + val ff = number.state.flow + .map { state -> + val n = state.value.text.replace(ff2, "") + val t = creditCards + .asSequence() + // Use eager pattern to detect card type even if + // the user hasn't finished typing. + .filter { creditCardType -> + val result = creditCardType.eagerPattern.find(n) + result?.groups?.isNotEmpty() == true + } + .filter { creditCardType -> + if (n.length < creditCardType.digits.first) { + // This card could still be this type. + true + } else if (n.length in creditCardType.digits) { + // This card must pass strict regex. + creditCardType.pattern.matches(n) + } else { + false + } + } + .firstOrNull() + t + } + + val numberSuggestions = createItem2Txt( + prefix = prefix, + key = "number", + args = args, + getSuggestion = { it.card?.number }, + field = number, + ) + val cardholderName = createItem( + key = "cardholderName", + label = translate(Res.strings.cardholder_name), + initialValue = card?.cardholderName, + singleLine = true, + lens = CreateRequest.card.cardholderName, + ) + val cardholderNameSuggestions = createItem2Txt( + prefix = prefix, + key = "cardholderName", + args = args, + getSuggestion = { it.card?.cardholderName }, + field = cardholderName, + ) + val brandAutocompleteVariants = creditCards + .asSequence() + .map { type -> type.name } + .toPersistentList() + val brand = createItem( + key = "brand", + label = translate(Res.strings.card_type), + initialValue = card?.brand, + singleLine = true, + hint = brandAutocompleteVariants + .firstOrNull(), + autocompleteOptions = brandAutocompleteVariants, + lens = CreateRequest.card.brand, + ) + val brandSuggestions = createItem2Txt( + prefix = prefix, + key = "brand", + args = args, + getSuggestion = { it.card?.brand }, + field = brand, + ) + val fromDate = createItem2( + prefix = prefix, + key = "from", + label = translate(Res.strings.valid_from), + initialMonth = card?.fromMonth, + initialYear = card?.fromYear, + populator = { + var out = this + out = CreateRequest.card.fromMonth.set(out, it.month.text) + out = CreateRequest.card.fromYear.set(out, it.year.text) + out + }, + ) +// val fromMonth = createItem( +// key = "fromMonth", +// label = "From month", +// initialValue = card?.fromMonth, +// lens = CreateRequest.card.fromMonth, +// ) +// val fromMonthSuggestions = createItem2Txt( +// prefix = prefix, +// key = "fromMonth", +// args = args, +// getSuggestion = { it.card?.fromMonth }, +// field = fromMonth, +// ) +// val fromYear = createItem( +// key = "fromYear", +// label = "From year", +// initialValue = card?.fromYear, +// lens = CreateRequest.card.fromYear, +// ) +// val fromYearSuggestions = createItem2Txt( +// prefix = prefix, +// key = "fromYear", +// args = args, +// getSuggestion = { it.card?.fromYear }, +// field = fromYear, +// ) + val expDate = createItem2( + prefix = prefix, + key = "exp", + label = translate(Res.strings.expiry_date), + initialMonth = card?.expMonth, + initialYear = card?.expYear, + populator = { + var out = this + out = CreateRequest.card.expMonth.set(out, it.month.text) + out = CreateRequest.card.expYear.set(out, it.year.text) + out + }, + ) +// val expMonth = createItem( +// key = "expMonth", +// label = "Exp month", +// initialValue = card?.expMonth, +// lens = CreateRequest.card.expMonth, +// ) +// val expMonthSuggestions = createItem2Txt( +// prefix = prefix, +// key = "expMonth", +// args = args, +// getSuggestion = { it.card?.expMonth }, +// field = expMonth, +// ) +// val expYear = createItem( +// key = "expYear", +// label = "Exp year", +// initialValue = card?.expYear, +// lens = CreateRequest.card.expYear, +// ) +// val expYearSuggestions = createItem2Txt( +// prefix = prefix, +// key = "expYear", +// args = args, +// getSuggestion = { it.card?.expYear }, +// field = expYear, +// ) + val code = createItem( + key = "code", + label = translate(Res.strings.card_cvv), + hint = "111", + initialValue = card?.code, + singleLine = true, + keyboardOptions = KeyboardOptions( + autoCorrect = false, + keyboardType = KeyboardType.Number, + ), + lens = CreateRequest.card.code, + ) + val codeSuggestions = createItem2Txt( + prefix = prefix, + key = "code", + args = args, + getSuggestion = { it.card?.code }, + field = code, + ) + return TmpCard( + cardholderName = cardholderName, + brand = brand, + number = number, + fromDate = fromDate, + expDate = expDate, + code = code, + items = listOfNotNull( + number, + numberSuggestions, + brand, + brandSuggestions, + code, + codeSuggestions, + expDate, + fromDate, + cardholderName, + cardholderNameSuggestions, + ), + ) +} + +class GenericSeparatorVisualTransformation : VisualTransformation { + private val offsetMapping = object : OffsetMapping { + override fun originalToTransformed(offset: Int): Int = + offset + offset.minus(1).div(4) + + override fun transformedToOriginal(offset: Int): Int = + when (offset) { + in 0..4 -> offset + else -> offset - offset.div(5) + } + } + + override fun filter(text: AnnotatedString): TransformedText { + val formatted = text.text + .chunked(4) + .joinToString(" ") + return TransformedText( + text = AnnotatedString(text = formatted), + offsetMapping, + ) + } +} + +private suspend fun RememberStateFlowScope.produceIdentityState( + args: AddRoute.Args, +): TmpIdentity { + val prefix = "identity" + + suspend fun createItem( + key: String, + label: String? = null, + initialValue: String? = null, + singleLine: Boolean = false, + autocompleteOptions: ImmutableList = persistentListOf(), + keyboardOptions: KeyboardOptions = KeyboardOptions.Default, + lens: Optional, + ) = createItem( + prefix = prefix, + key = key, + label = label, + initialValue = initialValue, + singleLine = singleLine, + autocompleteOptions = autocompleteOptions, + keyboardOptions = keyboardOptions, + populator = { + lens.set(this, it.value.text) + }, + ) + + val identity = args.initialValue?.identity + val title = createItem( + key = "title", + label = translate(Res.strings.identity_title), + initialValue = identity?.title, + singleLine = true, + lens = CreateRequest.identity.title, + ) + val titleSuggestions = createItem2Txt( + prefix = prefix, + key = "title", + args = args, + getSuggestion = { it.identity?.title }, + field = title, + ) + val firstName = createItem( + key = "firstName", + label = translate(Res.strings.identity_first_name), + initialValue = identity?.firstName ?: args.autofill?.personName, + singleLine = true, + lens = CreateRequest.identity.firstName, + ) + val firstNameSuggestions = createItem2Txt( + prefix = prefix, + key = "firstName", + args = args, + getSuggestion = { it.identity?.firstName }, + field = firstName, + ) + val middleName = createItem( + key = "middleName", + label = translate(Res.strings.identity_middle_name), + initialValue = identity?.middleName, + singleLine = true, + lens = CreateRequest.identity.middleName, + ) + val middleNameSuggestions = createItem2Txt( + prefix = prefix, + key = "middleName", + args = args, + getSuggestion = { it.identity?.middleName }, + field = middleName, + ) + val lastName = createItem( + key = "lastName", + label = translate(Res.strings.identity_last_name), + initialValue = identity?.lastName, + singleLine = true, + lens = CreateRequest.identity.lastName, + ) + val lastNameSuggestions = createItem2Txt( + prefix = prefix, + key = "lastName", + args = args, + getSuggestion = { it.identity?.lastName }, + field = lastName, + ) + val address1 = createItem( + key = "address1", + label = translate(Res.strings.address1), + initialValue = identity?.address1, + singleLine = true, + lens = CreateRequest.identity.address1, + ) + val address1Suggestions = createItem2Txt( + prefix = prefix, + key = "address1", + args = args, + getSuggestion = { it.identity?.address1 }, + field = address1, + ) + val address2 = createItem( + key = "address2", + label = translate(Res.strings.address2), + initialValue = identity?.address2, + singleLine = true, + lens = CreateRequest.identity.address2, + ) + val address2Suggestions = createItem2Txt( + prefix = prefix, + key = "address2", + args = args, + getSuggestion = { it.identity?.address2 }, + field = address2, + ) + val address3 = createItem( + key = "address3", + label = translate(Res.strings.address3), + initialValue = identity?.address3, + singleLine = true, + lens = CreateRequest.identity.address3, + ) + val address3Suggestions = createItem2Txt( + prefix = prefix, + key = "address3", + args = args, + getSuggestion = { it.identity?.address3 }, + field = address3, + ) + val city = createItem( + key = "city", + label = translate(Res.strings.city), + initialValue = identity?.city, + singleLine = true, + lens = CreateRequest.identity.city, + ) + val citySuggestions = createItem2Txt( + prefix = prefix, + key = "city", + args = args, + getSuggestion = { it.identity?.city }, + field = city, + ) + val state = createItem( + key = "state", + label = translate(Res.strings.state), + initialValue = identity?.state, + singleLine = true, + lens = CreateRequest.identity.state, + ) + val stateSuggestions = createItem2Txt( + prefix = prefix, + key = "state", + args = args, + getSuggestion = { it.identity?.state }, + field = state, + ) + val postalCode = createItem( + key = "postalCode", + label = translate(Res.strings.postal_code), + initialValue = identity?.postalCode, + singleLine = true, + lens = CreateRequest.identity.postalCode, + ) + val postalCodeSuggestions = createItem2Txt( + prefix = prefix, + key = "postalCode", + args = args, + getSuggestion = { it.identity?.postalCode }, + field = postalCode, + ) + val country = createItem( + key = "country", + label = translate(Res.strings.country), + initialValue = identity?.country, + singleLine = true, + lens = CreateRequest.identity.country, + ) + val countrySuggestions = createItem2Txt( + prefix = prefix, + key = "country", + args = args, + getSuggestion = { it.identity?.country }, + field = country, + ) + val company = createItem( + key = "company", + label = translate(Res.strings.company), + initialValue = identity?.company, + singleLine = true, + lens = CreateRequest.identity.company, + ) + val companySuggestions = createItem2Txt( + prefix = prefix, + key = "country", + args = args, + getSuggestion = { it.identity?.company }, + field = company, + ) + val email = createItem( + key = "email", + label = translate(Res.strings.email), + initialValue = args.autofill?.email ?: identity?.email, + singleLine = true, + keyboardOptions = KeyboardOptions( + autoCorrect = false, + keyboardType = KeyboardType.Email, + ), + lens = CreateRequest.identity.email, + ) + val emailSuggestions = createItem2Txt( + prefix = prefix, + key = "email", + args = args, + getSuggestion = { it.identity?.email }, + field = email, + ) + val phone = createItem( + key = "phone", + label = translate(Res.strings.phone_number), + initialValue = args.autofill?.phone ?: identity?.phone, + singleLine = true, + keyboardOptions = KeyboardOptions( + autoCorrect = false, + keyboardType = KeyboardType.Phone, + ), + lens = CreateRequest.identity.phone, + ) + val phoneSuggestions = createItem2Txt( + prefix = prefix, + key = "phone", + args = args, + getSuggestion = { it.identity?.phone }, + field = phone, + ) + val ssn = createItem( + key = "ssn", + label = translate(Res.strings.ssn), + initialValue = identity?.ssn, + singleLine = true, + lens = CreateRequest.identity.ssn, + ) + val ssnSuggestions = createItem2Txt( + prefix = prefix, + key = "ssn", + args = args, + getSuggestion = { it.identity?.ssn }, + field = ssn, + ) + val username = createItem( + key = "username", + label = translate(Res.strings.username), + initialValue = args.autofill?.username ?: identity?.username, + singleLine = true, + lens = CreateRequest.identity.username, + ) + val usernameSuggestions = createItem2Txt( + prefix = prefix, + key = "username", + args = args, + getSuggestion = { it.identity?.username }, + field = username, + ) + val passportNumber = createItem( + key = "passportNumber", + label = translate(Res.strings.passport_number), + initialValue = identity?.passportNumber, + singleLine = true, + keyboardOptions = KeyboardOptions( + autoCorrect = false, + ), + lens = CreateRequest.identity.passportNumber, + ) + val passportNumberSuggestions = createItem2Txt( + prefix = prefix, + key = "passportNumber", + args = args, + getSuggestion = { it.identity?.passportNumber }, + field = passportNumber, + ) + val licenseNumber = createItem( + key = "licenseNumber", + label = translate(Res.strings.license_number), + initialValue = identity?.licenseNumber, + singleLine = true, + lens = CreateRequest.identity.licenseNumber, + ) + val licenseNumberSuggestions = createItem2Txt( + prefix = prefix, + key = "licenseNumber", + args = args, + getSuggestion = { it.identity?.licenseNumber }, + field = licenseNumber, + ) + return TmpIdentity( + title = title, + firstName = firstName, + middleName = middleName, + lastName = lastName, + address1 = address1, + address2 = address2, + address3 = address3, + city = city, + state = state, + postalCode = postalCode, + country = country, + company = company, + email = email, + phone = phone, + ssn = ssn, + username = username, + passportNumber = passportNumber, + licenseNumber = licenseNumber, + items = listOfNotNull( + title, + titleSuggestions, + firstName, + firstNameSuggestions, + middleName, + middleNameSuggestions, + lastName, + lastNameSuggestions, + AddStateItem.Section( + id = "identity.section.address", + ), + address1, + address1Suggestions, + address2, + address2Suggestions, + address3, + address3Suggestions, + city, + citySuggestions, + state, + stateSuggestions, + postalCode, + postalCodeSuggestions, + country, + countrySuggestions, + AddStateItem.Section( + id = "identity.section.misc", + ), + email, + emailSuggestions, + phone, + phoneSuggestions, + ssn, + ssnSuggestions, + username, + usernameSuggestions, + company, + companySuggestions, + passportNumber, + passportNumberSuggestions, + licenseNumber, + licenseNumberSuggestions, + ), + ) +} + +private suspend fun RememberStateFlowScope.produceNoteState( + args: AddRoute.Args, + markdown: Boolean, +): TmpNote { + val prefix = "notes" + + val note = kotlin.run { + val id = "$prefix.note" + + val initialValue = args.initialValue?.notes + + val sink = mutablePersistedFlow(id) { initialValue.orEmpty() } + val state = mutableComposeState(sink) + val stateItem = LocalStateItem( + flow = sink + .map { value -> + val model = TextFieldModel2( + state = state, + text = value, + hint = "Add any notes about this item here", + onChange = state::value::set, + ) + model + } + .persistingStateIn( + scope = screenScope, + started = SharingStarted.WhileSubscribed(), + initialValue = TextFieldModel2.empty, + ), + populator = { state -> + CreateRequest.note.set(this, state.text) + }, + ) + AddStateItem.Note( + id = id, + state = stateItem, + markdown = markdown, + ) + } + val noteSuggestions = createItem2( + prefix = prefix, + key = "note", + args = args, + getSuggestion = { it.notes }, + selectedFlow = note.state.flow.map { it.text }, + onClick = { + note.state.flow.value.onChange?.invoke(it) + }, + ) + return TmpNote( + note = note, + items = listOfNotNull( + note, + noteSuggestions, + ), + ) +} + +private suspend fun RememberStateFlowScope.createItem( + prefix: String, + key: String, + label: String? = null, + hint: String? = null, + initialValue: String? = null, + autocompleteOptions: ImmutableList = persistentListOf(), + singleLine: Boolean = false, + keyboardOptions: KeyboardOptions = KeyboardOptions.Default, + visualTransformation: VisualTransformation = VisualTransformation.None, + populator: CreateRequest.(AddStateItem.Text.State) -> CreateRequest, +) = createItem( + prefix = prefix, + key = key, + label = label, + hint = hint, + initialValue = initialValue, + autocompleteOptions = autocompleteOptions, + singleLine = singleLine, + keyboardOptions = keyboardOptions, + visualTransformation = visualTransformation, + populator = populator, +) { id, state -> + AddStateItem.Text( + id = id, + state = state, + ) +} + +private suspend fun RememberStateFlowScope.createItem( + prefix: String, + key: String, + label: String? = null, + hint: String? = null, + initialValue: String? = null, + autocompleteOptions: ImmutableList = persistentListOf(), + singleLine: Boolean = false, + keyboardOptions: KeyboardOptions = KeyboardOptions.Default, + visualTransformation: VisualTransformation = VisualTransformation.None, + populator: CreateRequest.(AddStateItem.Text.State) -> CreateRequest, + factory: (String, LocalStateItem) -> Item, +): Item { + val id = "$prefix.$key" + + val sink = mutablePersistedFlow(id) { initialValue.orEmpty() } + val state = mutableComposeState(sink) + return factory( + id, + LocalStateItem( + flow = sink + .map { value -> + val model = TextFieldModel2( + state = state, + text = value, + hint = hint, + autocompleteOptions = autocompleteOptions, + onChange = state::value::set, + ) + AddStateItem.Text.State( + value = model, + label = label, + singleLine = singleLine, + keyboardOptions = keyboardOptions, + visualTransformation = visualTransformation, + ) + } + .persistingStateIn( + scope = screenScope, + started = SharingStarted.WhileSubscribed(), + initialValue = AddStateItem.Text.State( + value = TextFieldModel2.empty, + label = label, + ), + ), + populator = populator, + ), + ) +} + +private suspend fun RememberStateFlowScope.createItem2Txt( + prefix: String, + key: String, + args: AddRoute.Args, + getSuggestion: (DSecret) -> String?, + field: AddStateItem.Text, + concealed: Boolean = false, +) = createItem2( + prefix = prefix, + key = key, + args = args, + getSuggestion = getSuggestion, + selectedFlow = field.state.flow.map { it.value.text }, + concealed = concealed, + onClick = { + field.state.flow.value.value.onChange?.invoke(it) + }, +) + +private suspend fun RememberStateFlowScope.createItem2( + prefix: String, + key: String, + args: AddRoute.Args, + getSuggestion: (DSecret) -> String?, + selectedFlow: Flow, + concealed: Boolean = false, + onClick: (String) -> Unit, +): AddStateItem.Suggestion? { + val finalKey = "$prefix.$key.suggestions" + val suggestions = args.merge + ?.ciphers + ?.mapNotNull { cipher -> + val suggestion = getSuggestion(cipher) + // skip blank suggestions + ?.takeIf { it.isNotBlank() } + ?: return@mapNotNull null + suggestion to cipher + } + ?.groupBy { it.first } + ?.takeIf { it.size > 1 } + ?: return null + + val items = suggestions + .map { (suggestion, secrets) -> + val suggestionKey = "$finalKey.$suggestion" + val text = if (concealed) { + obscurePassword(suggestion) + } else { + suggestion + } + AddStateItem.Suggestion.Item( + key = suggestionKey, + value = suggestion, + text = text, + source = secrets + .joinToString { it.second.name }, + onClick = onClick + .partially1(suggestion), + selected = false, + ) + } + .toImmutableList() + val flow = selectedFlow + .map { selectedValue -> + val i = items + .map { item -> + val selected = selectedValue == item.value + item.copy(selected = selected) + } + .toImmutableList() + AddStateItem.Suggestion.State( + items = i, + ) + } + .persistingStateIn( + scope = screenScope, + started = SharingStarted.WhileSubscribed(), + initialValue = AddStateItem.Suggestion.State(persistentListOf()), + ) + return AddStateItem.Suggestion( + id = finalKey, + state = LocalStateItem( + flow = flow, + ), + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/add/attachment/SkeletonAttachment.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/add/attachment/SkeletonAttachment.kt new file mode 100644 index 00000000..8fe07caf --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/add/attachment/SkeletonAttachment.kt @@ -0,0 +1,37 @@ +package com.artemchep.keyguard.feature.home.vault.add.attachment + +import com.artemchep.keyguard.platform.LeUri +import com.artemchep.keyguard.platform.parcelize.LeParcelable +import com.artemchep.keyguard.platform.parcelize.LeParcelize + +sealed interface SkeletonAttachment { + sealed interface Identity : LeParcelable + + val identity: Identity + val name: String + val size: String + + data class Remote( + override val identity: Identity, + override val name: String, + override val size: String, + ) : SkeletonAttachment { + @LeParcelize + data class Identity( + val id: String, + ) : SkeletonAttachment.Identity, LeParcelable + } + + data class Local( + override val identity: Identity, + override val name: String, + override val size: String, + ) : SkeletonAttachment { + @LeParcelize + data class Identity( + val id: String, + val uri: LeUri, + val size: Long? = null, + ) : SkeletonAttachment.Identity, LeParcelable + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/add/attachment/SkeletonAttachmentItemFactory.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/add/attachment/SkeletonAttachmentItemFactory.kt new file mode 100644 index 00000000..6bfcc4ac --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/add/attachment/SkeletonAttachmentItemFactory.kt @@ -0,0 +1,95 @@ +package com.artemchep.keyguard.feature.home.vault.add.attachment + +import com.artemchep.keyguard.common.model.create.CreateRequest +import com.artemchep.keyguard.common.model.create.attachments +import com.artemchep.keyguard.common.util.flow.persistingStateIn +import com.artemchep.keyguard.feature.auth.common.TextFieldModel2 +import com.artemchep.keyguard.feature.home.vault.add.AddStateItem +import com.artemchep.keyguard.feature.home.vault.add.Foo2Factory +import com.artemchep.keyguard.feature.home.vault.add.LocalStateItem +import com.artemchep.keyguard.feature.navigation.state.RememberStateFlowScope +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.map + +class SkeletonAttachmentItemFactory : Foo2Factory { + override val type: String = "attachment" + + override fun RememberStateFlowScope.release(key: String) { + clearPersistedFlow("$key.identity") + clearPersistedFlow("$key.name") + } + + override fun RememberStateFlowScope.add( + key: String, + initial: SkeletonAttachment?, + ): AddStateItem.Attachment { + val identitySink = mutablePersistedFlow("$key.identity") { + val identity = initial?.identity + requireNotNull(identity) + } + val identity = identitySink.value + val synced = identity is SkeletonAttachment.Remote.Identity + + val nameKey = "$key.name" + val nameSink = mutablePersistedFlow(nameKey) { + initial?.name.orEmpty() + } + val nameMutableState = asComposeState(nameKey) + + val textFlow = nameSink + .map { uri -> + TextFieldModel2( + text = uri, + state = nameMutableState, + onChange = nameMutableState::value::set, + ) + } + val stateFlow = textFlow + .map { text -> + AddStateItem.Attachment.State( + id = "id", + name = text, + size = initial?.size, + synced = synced, + ) + } + .persistingStateIn( + scope = screenScope, + started = SharingStarted.WhileSubscribed(), + initialValue = AddStateItem.Attachment.State( + id = "id", + name = TextFieldModel2.empty, + size = null, + synced = synced, + ), + ) + return AddStateItem.Attachment( + id = key, + state = LocalStateItem( + flow = stateFlow, + populator = { state -> + CreateRequest.attachments.modify(this) { + val model = when (identity) { + is SkeletonAttachment.Remote.Identity -> { + CreateRequest.Attachment.Remote( + id = identity.id, + name = state.name.text, + ) + } + + is SkeletonAttachment.Local.Identity -> { + CreateRequest.Attachment.Local( + id = identity.id, + uri = identity.uri, + size = identity.size, + name = state.name.text, + ) + } + } + it.add(model) + } + }, + ), + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/collection/CollectionRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/collection/CollectionRoute.kt new file mode 100644 index 00000000..f8139dfb --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/collection/CollectionRoute.kt @@ -0,0 +1,19 @@ +package com.artemchep.keyguard.feature.home.vault.collection + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.navigation.DialogRoute + +data class CollectionRoute( + val args: Args, +) : DialogRoute { + data class Args( + val collectionId: String, + ) + + @Composable + override fun Content() { + CollectionScreen( + args = args, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/collection/CollectionScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/collection/CollectionScreen.kt new file mode 100644 index 00000000..3f8b0bcd --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/collection/CollectionScreen.kt @@ -0,0 +1,102 @@ +package com.artemchep.keyguard.feature.home.vault.collection + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.common.model.fold +import com.artemchep.keyguard.feature.dialog.Dialog +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.ExpandedIfNotEmpty +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.theme.Dimens +import com.artemchep.keyguard.ui.theme.combineAlpha +import dev.icerock.moko.resources.compose.stringResource + +@Composable +fun CollectionScreen( + args: CollectionRoute.Args, +) { + val state = collectionScreenState( + args = args, + ) + Dialog( + title = { + Text("Collection info") + }, + content = { + state.content.fold( + ifLoading = { + CircularProgressIndicator( + modifier = Modifier + .align(Alignment.Center) + .padding(16.dp), + ) + }, + ifOk = { contentOrNull -> + if (contentOrNull != null) { + CollectionScreenContent( + content = contentOrNull, + ) + } + }, + ) + }, + actions = { + val updatedOnClose by rememberUpdatedState(state.onClose) + TextButton( + enabled = state.onClose != null, + onClick = { + updatedOnClose?.invoke() + }, + ) { + Text(stringResource(Res.strings.close)) + } + }, + ) +} + +@Composable +fun CollectionScreenContent( + content: CollectionState.Content, +) { + Column( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding), + ) { + ExpandedIfNotEmpty( + valueOrNull = Unit.takeIf { content.config.readOnly }, + ) { + Text( + modifier = Modifier + .padding(vertical = 2.dp), + text = "Read only", + style = MaterialTheme.typography.bodySmall, + color = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + ) + } + ExpandedIfNotEmpty( + valueOrNull = Unit.takeIf { content.config.hidePasswords }, + ) { + Text( + modifier = Modifier + .padding(vertical = 2.dp), + text = "Hide passwords", + style = MaterialTheme.typography.bodySmall, + color = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + ) + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/collection/CollectionState.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/collection/CollectionState.kt new file mode 100644 index 00000000..30d61000 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/collection/CollectionState.kt @@ -0,0 +1,27 @@ +package com.artemchep.keyguard.feature.home.vault.collection + +import androidx.compose.runtime.Immutable +import com.artemchep.keyguard.common.model.DOrganization +import com.artemchep.keyguard.common.model.Loadable + +/** + * @author Artem Chepurnyi + */ +@Immutable +data class CollectionState( + val content: Loadable = Loadable.Loading, + val onClose: (() -> Unit)? = null, +) { + @Immutable + data class Content( + val title: String, + val organization: DOrganization?, + val config: Config, + ) { + @Immutable + data class Config( + val readOnly: Boolean, + val hidePasswords: Boolean, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/collection/CollectionStateProducer.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/collection/CollectionStateProducer.kt new file mode 100644 index 00000000..91fa6aee --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/collection/CollectionStateProducer.kt @@ -0,0 +1,76 @@ +package com.artemchep.keyguard.feature.home.vault.collection + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.usecase.GetCollections +import com.artemchep.keyguard.common.usecase.GetOrganizations +import com.artemchep.keyguard.feature.navigation.state.navigatePopSelf +import com.artemchep.keyguard.feature.navigation.state.produceScreenState +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.shareIn +import org.kodein.di.compose.localDI +import org.kodein.di.direct +import org.kodein.di.instance + +@Composable +fun collectionScreenState( + args: CollectionRoute.Args, +) = with(localDI().direct) { + collectionScreenState( + args = args, + getOrganizations = instance(), + getCollections = instance(), + ) +} + +@Composable +fun collectionScreenState( + args: CollectionRoute.Args, + getOrganizations: GetOrganizations, + getCollections: GetCollections, +): CollectionState = produceScreenState( + key = "collection", + initial = CollectionState(), + args = arrayOf( + args, + getOrganizations, + getCollections, + ), +) { + fun onClose() { + navigatePopSelf() + } + + val collectionFlow = getCollections() + .map { collections -> + collections + .firstOrNull { it.id == args.collectionId } + } + .shareIn(screenScope, SharingStarted.Lazily, replay = 1) + val contentFlow = combine( + collectionFlow, + getOrganizations(), + ) { collection, organizations -> + collection + ?: return@combine null + val organization = organizations.firstOrNull { it.id == collection.organizationId } + val config = CollectionState.Content.Config( + readOnly = collection.readOnly, + hidePasswords = collection.hidePasswords, + ) + CollectionState.Content( + title = collection.name, + organization = organization, + config = config, + ) + } + contentFlow + .map { content -> + CollectionState( + content = Loadable.Ok(content), + onClose = ::onClose, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/collections/CollectionsRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/collections/CollectionsRoute.kt new file mode 100644 index 00000000..81ede591 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/collections/CollectionsRoute.kt @@ -0,0 +1,21 @@ +package com.artemchep.keyguard.feature.home.vault.collections + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.common.model.AccountId +import com.artemchep.keyguard.feature.navigation.Route + +data class CollectionsRoute( + val args: Args, +) : Route { + data class Args( + val accountId: AccountId, + val organizationId: String?, + ) + + @Composable + override fun Content() { + CollectionsScreen( + args = args, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/collections/CollectionsScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/collections/CollectionsScreen.kt new file mode 100644 index 00000000..a1d82b52 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/collections/CollectionsScreen.kt @@ -0,0 +1,232 @@ +@file:OptIn(ExperimentalMaterial3Api::class) + +package com.artemchep.keyguard.feature.home.vault.collections + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.lazy.items +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Add +import androidx.compose.material3.Checkbox +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.LocalAbsoluteTonalElevation +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.runtime.Composable +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.Modifier +import androidx.compose.ui.input.nestedscroll.nestedScroll +import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.feature.EmptyView +import com.artemchep.keyguard.feature.home.vault.component.Section +import com.artemchep.keyguard.feature.home.vault.component.surfaceColorAtElevationSemi +import com.artemchep.keyguard.feature.navigation.NavigationIcon +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.AhLayout +import com.artemchep.keyguard.ui.DefaultFab +import com.artemchep.keyguard.ui.DefaultSelection +import com.artemchep.keyguard.ui.ExpandedIfNotEmptyForRow +import com.artemchep.keyguard.ui.FabState +import com.artemchep.keyguard.ui.FlatDropdown +import com.artemchep.keyguard.ui.FlatItemTextContent +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.ScaffoldLazyColumn +import com.artemchep.keyguard.ui.animatedNumberText +import com.artemchep.keyguard.ui.skeleton.SkeletonItemPilled +import com.artemchep.keyguard.ui.theme.combineAlpha +import com.artemchep.keyguard.ui.toolbar.LargeToolbar +import dev.icerock.moko.resources.compose.stringResource + +@Composable +fun CollectionsScreen( + args: CollectionsRoute.Args, +) { + val state = collectionsScreenState( + args = args, + ) + CollectionsScreenContent( + state = state, + ) +} + +@Composable +fun CollectionsScreenContent( + state: CollectionsState, +) { + val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior() + ScaffoldLazyColumn( + modifier = Modifier + .nestedScroll(scrollBehavior.nestedScrollConnection), + topAppBarScrollBehavior = scrollBehavior, + topBar = { + LargeToolbar( + title = { + Column { + Text( + text = stringResource(Res.strings.account), + style = MaterialTheme.typography.labelSmall, + color = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + overflow = TextOverflow.Ellipsis, + maxLines = 2, + ) + Text( + text = stringResource(Res.strings.collections), + style = MaterialTheme.typography.titleMedium, + overflow = TextOverflow.Ellipsis, + maxLines = 1, + ) + } + }, + navigationIcon = { + NavigationIcon() + }, + scrollBehavior = scrollBehavior, + ) + }, + floatingActionState = run { + val fabOnClick = state.onAdd + val fabState = if (fabOnClick != null) { + FabState( + onClick = fabOnClick, + model = null, + ) + } else { + null + } + rememberUpdatedState(newValue = fabState) + }, + floatingActionButton = { + DefaultFab( + icon = { + Icon( + imageVector = Icons.Outlined.Add, + contentDescription = null, + ) + }, + text = { + Text("New collection") + }, + ) + }, + bottomBar = { + DefaultSelection( + state = state.selection, + ) + }, + ) { + when (val contentState = state.content) { + is Loadable.Loading -> { + for (i in 1..3) { + item("skeleton.$i") { + SkeletonItemPilled() + } + } + } + + is Loadable.Ok -> { + val items = contentState.value.items + if (items.isEmpty()) { + item("empty") { + EmptyView( + text = { + Text( + text = stringResource(Res.strings.collections_empty_label), + ) + }, + ) + } + } + + items( + items = items, + key = { it.key }, + ) { + OrganizationsScreenItem( + modifier = Modifier + .animateItemPlacement(), + item = it, + ) + } + } + } + } +} + +@Composable +private fun OrganizationsScreenItem( + modifier: Modifier = Modifier, + item: CollectionsState.Content.Item, +) = when (item) { + is CollectionsState.Content.Item.Section -> + OrganizationsScreenSectionItem( + modifier = modifier, + item = item, + ) + + is CollectionsState.Content.Item.Collection -> + OrganizationsScreenCollectionItem( + modifier = modifier, + item = item, + ) +} + +@Composable +private fun OrganizationsScreenSectionItem( + modifier: Modifier = Modifier, + item: CollectionsState.Content.Item.Section, +) { + Section( + modifier = modifier, + text = item.text, + ) +} + +@Composable +private fun OrganizationsScreenCollectionItem( + modifier: Modifier = Modifier, + item: CollectionsState.Content.Item.Collection, +) { + val backgroundColor = + if (item.selected) MaterialTheme.colorScheme.primaryContainer else MaterialTheme.colorScheme.surface + FlatDropdown( + modifier = modifier, + backgroundColor = backgroundColor, + dropdown = item.actions, + leading = { + val pillElevation = LocalAbsoluteTonalElevation.current + 8.dp + val pillColor = MaterialTheme.colorScheme + .surfaceColorAtElevationSemi(elevation = pillElevation) + AhLayout( + modifier = modifier, + backgroundColor = pillColor, + ) { + val text = animatedNumberText(item.ciphers) + Text(text) + } + }, + content = { + FlatItemTextContent( + title = { + Text(item.title) + }, + ) + }, + trailing = { + ExpandedIfNotEmptyForRow( + item.selected.takeIf { item.selecting }, + ) { selected -> + Checkbox( + checked = selected, + onCheckedChange = null, + ) + } + }, + onClick = item.onClick, + onLongClick = item.onLongClick, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/collections/CollectionsState.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/collections/CollectionsState.kt new file mode 100644 index 00000000..600acd33 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/collections/CollectionsState.kt @@ -0,0 +1,56 @@ +package com.artemchep.keyguard.feature.home.vault.collections + +import androidx.compose.runtime.Immutable +import androidx.compose.ui.graphics.vector.ImageVector +import com.artemchep.keyguard.common.model.DOrganization +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.ui.ContextItem +import com.artemchep.keyguard.ui.Selection +import kotlinx.collections.immutable.ImmutableList + +/** + * @author Artem Chepurnyi + */ +@Immutable +data class CollectionsState( + val selection: Selection? = null, + val content: Loadable = Loadable.Loading, + val onAdd: (() -> Unit)? = null, +) { + @Immutable + data class Content( + val title: Title, + val items: ImmutableList, + ) { + @Immutable + data class Title( + val title: String? = null, + val subtitle: String? = null, + ) + + @Immutable + sealed interface Item { + val key: String + + @Immutable + data class Section( + override val key: String, + val text: String? = null, + ) : Item + + @Immutable + data class Collection( + override val key: String, + val title: String, + val ciphers: Int, + val selecting: Boolean, + val selected: Boolean, + val organization: DOrganization?, + val icon: ImageVector? = null, + val actions: ImmutableList, + val onClick: (() -> Unit)?, + val onLongClick: (() -> Unit)?, + ) : Item + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/collections/CollectionsStateProducer.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/collections/CollectionsStateProducer.kt new file mode 100644 index 00000000..cc71219a --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/collections/CollectionsStateProducer.kt @@ -0,0 +1,373 @@ +package com.artemchep.keyguard.feature.home.vault.collections + +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Info +import androidx.compose.runtime.Composable +import arrow.core.partially1 +import com.artemchep.keyguard.common.model.DCollection +import com.artemchep.keyguard.common.model.DOrganization +import com.artemchep.keyguard.common.model.DSecret +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.usecase.GetCanWrite +import com.artemchep.keyguard.common.usecase.GetCiphers +import com.artemchep.keyguard.common.usecase.GetCollections +import com.artemchep.keyguard.common.usecase.GetOrganizations +import com.artemchep.keyguard.feature.home.vault.VaultRoute +import com.artemchep.keyguard.feature.home.vault.collection.CollectionRoute +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.feature.navigation.state.produceScreenState +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItemAction +import com.artemchep.keyguard.ui.Selection +import com.artemchep.keyguard.ui.buildContextItems +import com.artemchep.keyguard.ui.icons.ChevronIcon +import com.artemchep.keyguard.ui.icons.KeyguardCipher +import com.artemchep.keyguard.ui.selection.selectionHandle +import kotlinx.collections.immutable.toImmutableList +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.shareIn +import org.kodein.di.compose.localDI +import org.kodein.di.direct +import org.kodein.di.instance +import java.util.UUID + +@Composable +fun collectionsScreenState( + args: CollectionsRoute.Args, +) = with(localDI().direct) { + collectionsScreenState( + args = args, + getOrganizations = instance(), + getCollections = instance(), + getCiphers = instance(), + getCanWrite = instance(), + ) +} + +@Composable +fun collectionsScreenState( + args: CollectionsRoute.Args, + getOrganizations: GetOrganizations, + getCollections: GetCollections, + getCiphers: GetCiphers, + getCanWrite: GetCanWrite, +): CollectionsState = produceScreenState( + key = "collections", + initial = CollectionsState(), + args = arrayOf( + args, + getCollections, + getOrganizations, + getCiphers, + getCanWrite, + ), +) { + fun checkAccountId(accountId: String) = accountId == args.accountId.id + + fun checkOrganizationId(organizationId: String?) = + args.organizationId == null || + args.organizationId == organizationId + + data class CollectionWithCiphers( + val collection: DCollection, + val organization: DOrganization?, + val ciphers: List, + ) + + val comparator = Comparator { a: CollectionWithCiphers, b: CollectionWithCiphers -> + var out = compareValues(a.organization, b.organization) + if (out == 0) { + out = compareValues(a.collection, b.collection) + } + out + } + + val collectionsFlow = getCollections() + .map { collections -> + collections + .filter { + checkAccountId(it.accountId) && + checkOrganizationId(it.organizationId) + } + } + .distinctUntilChanged() + .shareIn(screenScope, SharingStarted.WhileSubscribed(), replay = 1) + val organizationsMapFlow = getOrganizations() + .map { organizations -> + organizations + .filter { + checkAccountId(it.accountId) && + checkOrganizationId(it.id) + } + } + .distinctUntilChanged() + .map { organizations -> + organizations + // can ot have collisions because we filter by account id + .associateBy { it.id } + } + .shareIn(screenScope, SharingStarted.WhileSubscribed(), replay = 1) + val ciphersMapByCollectionIdFlow = getCiphers() + .map { ciphers -> + ciphers + .filter { + it.deletedDate == null && + checkAccountId(it.accountId) && + checkOrganizationId(it.organizationId) + } + } + .distinctUntilChanged() + .map { ciphers -> + ciphers + .flatMap { cipher -> + cipher + .collectionIds + .map { collectionId -> + collectionId to cipher + } + } + .groupBy { it.first } + .mapValues { entry -> + entry + .value + .map { collectionCipherPair -> + collectionCipherPair.second + } + } + } + .shareIn(screenScope, SharingStarted.WhileSubscribed(), replay = 1) + + val collectionsWithCiphersFolder = combine( + collectionsFlow, + organizationsMapFlow, + ciphersMapByCollectionIdFlow, + ) { collections, organizationsMap, ciphersMapByCollectionId -> + collections + .map { collection -> + val organization = organizationsMap[collection.organizationId] + val ciphers = ciphersMapByCollectionId[collection.id].orEmpty() + CollectionWithCiphers( + collection = collection, + organization = organization, + ciphers = ciphers, + ) + } + .sortedWith(comparator) + } + + val selectionHandle = selectionHandle("selection") + val selectedCollectionsWithCiphersFlow = collectionsWithCiphersFolder + .combine(selectionHandle.idsFlow) { collectionsWithCiphers, selectedCollectionIds -> + selectedCollectionIds + .mapNotNull { selectedCollectionId -> + val collectionWithCiphers = collectionsWithCiphers + .firstOrNull { it.collection.id == selectedCollectionId } + ?: return@mapNotNull null + selectedCollectionId to collectionWithCiphers + } + .toMap() + } + .distinctUntilChanged() + .shareIn(screenScope, SharingStarted.Lazily, replay = 1) + + val selectionFlow = combine( + collectionsFlow + .map { collections -> + collections + .map { it.id } + .toSet() + } + .distinctUntilChanged(), + selectedCollectionsWithCiphersFlow, + getCanWrite(), + ) { collectionIds, selectedCollections, canWrite -> + if (selectedCollections.isEmpty()) { + return@combine null + } + + val selectedFolderIds = selectedCollections.keys + val actions = mutableListOf() + // An option to view all the items that belong + // to these collections. + val ciphersCount = selectedCollections + .asSequence() + .flatMap { it.value.ciphers } + .distinct() + .count() + if (ciphersCount > 0) { + actions += FlatItemAction( + icon = Icons.Outlined.KeyguardCipher, + title = translate(Res.strings.items), + trailing = { + ChevronIcon() + }, + onClick = { + val collections = selectedCollections.values + .map { it.collection } + val route = VaultRoute.by( + translator = this, + collections = collections, + ) + val intent = NavigationIntent.NavigateToRoute(route) + navigate(intent) + }, + ) + } + Selection( + count = selectedCollections.size, + actions = actions.toImmutableList(), + onSelectAll = selectionHandle::setSelection + .partially1(collectionIds) + .takeIf { + collectionIds.size > selectedFolderIds.size + }, + onClear = selectionHandle::clearSelection, + ) + } + val contentFlow = combine( + collectionsWithCiphersFolder, + selectedCollectionsWithCiphersFlow, + getCanWrite(), + ) { collectionsWithCiphers, selectedCollectionIds, canWrite -> + val selecting = selectedCollectionIds.isNotEmpty() + val decorator = if (args.organizationId != null) { + // We already know the organization, no need to add it + // to the list. + NoDecorator + } else { + OrganizationDecorator() + } + val items = collectionsWithCiphers + .asSequence() + .map { collectionWithCiphers -> + val collection = collectionWithCiphers.collection + val ciphers = collectionWithCiphers.ciphers + val selected = collection.id in selectedCollectionIds + + val actions = buildContextItems { + section { + // An option to view all the items that belong + // to this cipher. + if (ciphers.isNotEmpty()) { + this += FlatItemAction( + icon = Icons.Outlined.KeyguardCipher, + title = translate(Res.strings.items), + onClick = { + val route = VaultRoute.by( + translator = this@produceScreenState, + collection = collection, + ) + val intent = NavigationIntent.NavigateToRoute(route) + navigate(intent) + }, + ) + } + } + section { + this += FlatItemAction( + icon = Icons.Outlined.Info, + title = translate(Res.strings.info), + onClick = { + val intent = NavigationIntent.NavigateToRoute( + CollectionRoute( + args = CollectionRoute.Args( + collectionId = collection.id, + ), + ), + ) + navigate(intent) + }, + ) + } + } + CollectionsState.Content.Item.Collection( + key = collection.id, + title = collection.name, + ciphers = collectionWithCiphers.ciphers.size, + organization = collectionWithCiphers.organization, + selecting = selecting, + selected = selected, + actions = actions.toImmutableList(), + onClick = if (selecting) { + // lambda + selectionHandle::toggleSelection.partially1(collection.id) + } else { + null + }, + onLongClick = if (selecting) { + null + } else { + // lambda + selectionHandle::toggleSelection.partially1(collection.id) + }, + ) + } + .flatMap { item -> + sequence { + val section = decorator.getOrNull(item) + if (section != null) yield(section) + yield(item) + } + } + .toImmutableList() + CollectionsState.Content( + title = CollectionsState.Content.Title(), + items = items, + ) + } + combine( + selectionFlow, + contentFlow, + ) { selection, content -> + CollectionsState( + selection = selection, + content = Loadable.Ok(content), + ) + } +} + +private interface Decorator { + fun getOrNull(item: CollectionsState.Content.Item.Collection): CollectionsState.Content.Item? +} + +private object NoDecorator : Decorator { + override fun getOrNull(item: CollectionsState.Content.Item.Collection) = null +} + +private class OrganizationDecorator : Decorator { + private val seenOrganizationIds = mutableSetOf() + + /** + * Last shown character, used to not repeat the sections + * if it stays the same. + */ + private var lastOrganization: DOrganization? = null + + override fun getOrNull(item: CollectionsState.Content.Item.Collection): CollectionsState.Content.Item? { + val organization = item.organization + if (organization?.id == lastOrganization?.id) { + return null + } + + lastOrganization = organization + if (organization != null) { + val itemKey = if (organization.id in seenOrganizationIds) { + val randomId = UUID.randomUUID().toString() + "duplicate.$randomId" + } else { + organization.id + } + // mark as seen, so next time we generate a new id for the section + seenOrganizationIds += organization.id + + return CollectionsState.Content.Item.Section( + key = "decorator.organization.$itemKey", + text = organization.name, + ) + } + return null + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/SearchTextField.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/SearchTextField.kt new file mode 100644 index 00000000..33e9cc1d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/SearchTextField.kt @@ -0,0 +1,211 @@ +package com.artemchep.keyguard.feature.home.vault.component + +import androidx.compose.animation.animateColorAsState +import androidx.compose.foundation.interaction.MutableInteractionSource +import androidx.compose.foundation.interaction.collectIsFocusedAsState +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.foundation.text.KeyboardActions +import androidx.compose.foundation.text.KeyboardOptions +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Clear +import androidx.compose.material.icons.outlined.Search +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.State +import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.composed +import androidx.compose.ui.draw.clip +import androidx.compose.ui.draw.drawBehind +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.Shape +import androidx.compose.ui.graphics.luminance +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.input.ImeAction +import androidx.compose.ui.text.input.KeyboardType +import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import com.artemchep.keyguard.ui.ExpandedIfNotEmptyForRow +import com.artemchep.keyguard.ui.PlainTextField +import com.artemchep.keyguard.ui.theme.combineAlpha + +@Composable +fun SearchTextField( + modifier: Modifier = Modifier, + text: String, + placeholder: String, + searchIcon: Boolean = true, + leading: @Composable () -> Unit, + trailing: @Composable () -> Unit, + onTextChange: ((String) -> Unit)?, + onGoClick: (() -> Unit)?, +) { + val interactionSource = remember { + MutableInteractionSource() + } + + val isEmptyState = rememberUpdatedState(text.isEmpty()) + val isFocusedState = interactionSource.collectIsFocusedAsState() + Row( + modifier = modifier + .fillMaxWidth(), + verticalAlignment = Alignment.CenterVertically, + ) { + Row( + modifier = Modifier + .weight(1f) + // Height should be the size of + // the Material 3 top bar. + .height(64.dp) + .padding( + horizontal = 8.dp, + vertical = 8.dp, + ) + .searchTextFieldBackground( + isEmptyState = isEmptyState, + isFocusedState = isFocusedState, + shape = CircleShape, + ), + verticalAlignment = Alignment.CenterVertically, + ) { + Spacer( + modifier = Modifier + .size(8.dp), + ) + Row( + verticalAlignment = Alignment.CenterVertically, + ) { + leading() + + if (searchIcon) { + Icon( + imageVector = Icons.Outlined.Search, + contentDescription = null, + ) + } else { + Spacer( + modifier = Modifier + .size(24.dp), + ) + } + Spacer( + modifier = Modifier + .size(16.dp), + ) + } + val textStyle = TextStyle( + fontSize = 20.sp, + ) + val updatedOnChange by rememberUpdatedState(onTextChange) + PlainTextField( + modifier = Modifier + .fillMaxHeight() + .weight(1f), + interactionSource = interactionSource, + value = text, + textStyle = textStyle, + placeholder = { + Text( + text = placeholder, + style = textStyle, + maxLines = 1, + overflow = TextOverflow.Ellipsis, + ) + }, + enabled = onTextChange != null, + onValueChange = { + updatedOnChange?.invoke(it) + }, + keyboardOptions = KeyboardOptions( + keyboardType = KeyboardType.Text, + imeAction = if (onGoClick != null) ImeAction.Go else ImeAction.Done, + autoCorrect = false, + ), + keyboardActions = KeyboardActions( + onGo = { + onGoClick?.invoke() + }, + ), + singleLine = true, + ) + Spacer( + modifier = Modifier + .size(8.dp), + ) + ExpandedIfNotEmptyForRow( + valueOrNull = Unit + .takeIf { !isEmptyState.value }, + ) { + IconButton( + enabled = onTextChange != null, + onClick = { + updatedOnChange?.invoke("") + }, + ) { + Icon(Icons.Outlined.Clear, null) + } + } + } + + trailing() + } +} + +private fun Modifier.searchTextFieldBackground( + isEmptyState: State, + isFocusedState: State, + shape: Shape, +): Modifier = composed { + val isHighlightedState = remember(isEmptyState, isFocusedState) { + derivedStateOf { + !isEmptyState.value || + isFocusedState.value + } + } + + val colorAlphaTarget: Float + val colorRgbTarget: Color + + val backgroundColor = MaterialTheme.colorScheme.background + val luminance = backgroundColor.luminance() + if (luminance > 0.5f) { // light background + colorAlphaTarget = 0.07f + colorRgbTarget = Color.Black + } else if (luminance > 0f) { // dark background + colorAlphaTarget = 0.22f + colorRgbTarget = Color.Black + } else { // black background + colorAlphaTarget = 0.14f + colorRgbTarget = Color.Gray + } + + val colorTarget = colorRgbTarget + .combineAlpha(colorAlphaTarget) + val colorState = animateColorAsState( + targetValue = if (isHighlightedState.value) colorTarget else colorTarget.combineAlpha(0f), + label = "SearchFieldBackground", + ) + + this + .clip(shape) + .drawBehind { + val color = colorState.value + drawRect(color) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultListItem.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultListItem.kt new file mode 100644 index 00000000..672cca8c --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultListItem.kt @@ -0,0 +1,752 @@ +package com.artemchep.keyguard.feature.home.vault.component + +import androidx.compose.animation.Crossfade +import androidx.compose.foundation.ExperimentalFoundationApi +import androidx.compose.foundation.Image +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.combinedClickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.BoxScope +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ColumnScope +import androidx.compose.foundation.layout.FlowRow +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.RowScope +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.layout.widthIn +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.ErrorOutline +import androidx.compose.material.icons.outlined.Key +import androidx.compose.material.icons.outlined.Lock +import androidx.compose.material.icons.outlined.SearchOff +import androidx.compose.material3.Checkbox +import androidx.compose.material3.ColorScheme +import androidx.compose.material3.DropdownMenu +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.LocalMinimumInteractiveComponentEnforcement +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.ProvideTextStyle +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.material3.minimumInteractiveComponentSize +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.key +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.draw.drawBehind +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.compositeOver +import androidx.compose.ui.graphics.isSpecified +import androidx.compose.ui.graphics.luminance +import androidx.compose.ui.hapticfeedback.HapticFeedbackType +import androidx.compose.ui.platform.LocalHapticFeedback +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import arrow.core.partially1 +import com.artemchep.keyguard.common.model.DSecret +import com.artemchep.keyguard.feature.EmptyView +import com.artemchep.keyguard.feature.favicon.FaviconImage +import com.artemchep.keyguard.feature.home.vault.model.VaultItem2 +import com.artemchep.keyguard.feature.home.vault.model.VaultItemIcon +import com.artemchep.keyguard.feature.localization.textResource +import com.artemchep.keyguard.feature.twopane.LocalHasDetailPane +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.AvatarBuilder +import com.artemchep.keyguard.ui.DisabledEmphasisAlpha +import com.artemchep.keyguard.ui.DropdownMenuItemFlat +import com.artemchep.keyguard.ui.DropdownMinWidth +import com.artemchep.keyguard.ui.DropdownScopeImpl +import com.artemchep.keyguard.ui.FlatItemTextContent +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.icons.ChevronIcon +import com.artemchep.keyguard.ui.icons.IconSmallBox +import com.artemchep.keyguard.ui.icons.KeyguardAttachment +import com.artemchep.keyguard.ui.icons.KeyguardFavourite +import com.artemchep.keyguard.ui.rightClickable +import com.artemchep.keyguard.ui.theme.Dimens +import com.artemchep.keyguard.ui.theme.combineAlpha +import com.artemchep.keyguard.ui.theme.isDark +import com.artemchep.keyguard.ui.theme.selectedContainer +import com.artemchep.keyguard.ui.util.HorizontalDivider +import dev.icerock.moko.resources.compose.painterResource +import dev.icerock.moko.resources.compose.stringResource +import kotlin.math.ln + +@Composable +fun VaultListItem( + modifier: Modifier = Modifier, + item: VaultItem2, +) = when (item) { + is VaultItem2.QuickFilters -> { + } + + is VaultItem2.NoSuggestions -> { + EmptyView( + icon = { + Icon(Icons.Outlined.SearchOff, null) + }, + text = { + Text( + text = stringResource(Res.strings.vault_main_no_suggested_items), + ) + }, + ) + } + + is VaultItem2.NoItems -> { + EmptyView( + icon = { + Icon(Icons.Outlined.SearchOff, null) + }, + text = { + Text( + text = stringResource(Res.strings.items_empty_label), + ) + }, + ) + } + + is VaultItem2.Section -> VaultListItemSection(modifier, item) + is VaultItem2.Button -> VaultListItemButton(modifier, item) + is VaultItem2.Item -> VaultListItemText(modifier, item) +} + +@Composable +fun VaultListItemSection( + modifier: Modifier = Modifier, + item: VaultItem2.Section, +) { + val text = item.text?.let { textResource(it) } + Section( + modifier = modifier, + text = text, + caps = item.caps, + ) +} + +@Composable +fun VaultListItemButton( + modifier: Modifier = Modifier, + item: VaultItem2.Button, +) { + VaultViewButtonItem( + modifier = modifier, + leading = { + item.leading?.invoke() + }, + text = item.title, + onClick = item.onClick, + ) +} + +@Composable +fun Section( + modifier: Modifier = Modifier, + text: String? = null, + caps: Boolean = true, +) { + if (text != null) { + Text( + modifier = modifier + .padding( + vertical = 16.dp, + horizontal = Dimens.horizontalPadding, + ), + text = if (caps) text.uppercase() else text, + style = MaterialTheme.typography.labelLarge, + fontSize = 12.sp, + fontWeight = FontWeight.Medium, + color = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + ) + } else { + HorizontalDivider( + modifier = modifier + .padding( + vertical = 4.dp, + ), + ) + } +} + +@Composable +fun LargeSection( + modifier: Modifier = Modifier, + text: String, + trailing: (@Composable RowScope.() -> Unit)? = null, +) { + Row( + modifier = modifier + .padding( + vertical = 16.dp, + horizontal = Dimens.horizontalPadding, + ), + ) { + val textStyle = MaterialTheme.typography.labelLarge + .copy( + fontSize = 18.sp, + fontWeight = FontWeight.Medium, + ) + ProvideTextStyle(textStyle) { + Text( + modifier = Modifier + .weight(1f), + text = text, + ) + if (trailing != null) { + Spacer( + modifier = Modifier + .width(8.dp), + ) + trailing() + } + } + } +} + +@Composable +fun VaultListItemText( + modifier: Modifier = Modifier, + item: VaultItem2.Item, +) { + val dropdownExpandedState = remember { mutableStateOf(false) } + val dropdownExpand = remember { + // lambda + dropdownExpandedState::value::set + .partially1(true) + } + val dropdownActions = item.action + .let { it as? VaultItem2.Item.Action.Dropdown } + .let { it?.actions.orEmpty() } + // If we suddenly switch the mode of the items or items disappear, + // then collapse the existing popup window. + if (dropdownActions.isEmpty()) { + dropdownExpandedState.value = false + } + + val localState by item.localStateFlow.collectAsState() + + val onClick = localState.selectableItemState.onClick + // fallback to default + ?: when (item.action) { + is VaultItem2.Item.Action.Dropdown -> dropdownExpand + is VaultItem2.Item.Action.Go -> item.action.onClick + }.takeIf { localState.selectableItemState.can } + val onLongClick = localState.selectableItemState.onLongClick + + val backgroundColor = when { + localState.selectableItemState.selected -> MaterialTheme.colorScheme.primaryContainer + localState.openedState.isOpened -> + MaterialTheme.colorScheme.selectedContainer + .takeIf { LocalHasDetailPane.current } + ?: Color.Unspecified + + else -> Color.Unspecified + } + val badgeColor = if (backgroundColor.isSpecified) { + LocalContentColor.current + .combineAlpha(0.03f) + .compositeOver(backgroundColor) + } else { + backgroundColor + } + FlatItemLayout2( + modifier = modifier, + backgroundColor = backgroundColor, + content = { + FlatItemTextContent( + title = { + Text( + text = item.title, + overflow = TextOverflow.Ellipsis, + maxLines = 1, + ) + }, + text = item.text + ?.takeIf { it.isNotEmpty() } + ?.let { + // composable + { + Text( + text = it, + overflow = TextOverflow.Ellipsis, + maxLines = if (item.source.type == DSecret.Type.SecureNote) 4 else 2, + ) + } + }, + ) + + if (item.token != null) { + VaultViewTotpBadge2( + color = badgeColor, + copyText = item.copyText, + totpToken = item.token, + ) + } + + if (item.passkeys.isNotEmpty()) { + FlowRow( + modifier = Modifier + .padding(top = 8.dp) + .fillMaxWidth(), + verticalArrangement = Arrangement.spacedBy(8.dp), + horizontalArrangement = Arrangement.spacedBy(8.dp), + ) { + item.passkeys.forEach { + key(it.source.credentialId) { + Surface( + color = badgeColor.takeIf { it.isSpecified } + ?: MaterialTheme.colorScheme.surface, + shape = MaterialTheme.shapes.small, + tonalElevation = 1.dp, + ) { + Row( + modifier = Modifier + .clickable(onClick = it.onClick) + .padding( + start = 8.dp, + end = 8.dp, + top = 8.dp, + bottom = 8.dp, + ), + verticalAlignment = Alignment.CenterVertically, + ) { + Box( + modifier = Modifier + .size(16.dp), + ) { + IconSmallBox( + main = Icons.Outlined.Key, + ) + } + Spacer( + modifier = Modifier + .width(8.dp), + ) + val userDisplayName = it.source.userDisplayName + Text( + modifier = Modifier + .widthIn(max = 128.dp) + .alignByBaseline(), + text = userDisplayName + ?: stringResource(Res.strings.empty_value), + color = if (userDisplayName != null) { + LocalContentColor.current + } else { + LocalContentColor.current + .combineAlpha(DisabledEmphasisAlpha) + }, + maxLines = 1, + overflow = TextOverflow.Ellipsis, + style = MaterialTheme.typography.bodyMedium, + ) + Spacer( + modifier = Modifier + .width(8.dp), + ) + val rpId = it.source.rpId + Text( + modifier = Modifier + .widthIn(max = 128.dp) + .alignByBaseline(), + text = rpId, + color = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + maxLines = 1, + overflow = TextOverflow.Ellipsis, + style = MaterialTheme.typography.bodySmall, + ) + } + } + } + } + } + } + + // Inject the dropdown popup to the bottom of the + // content. + val onDismissRequest = { + dropdownExpandedState.value = false + } + DropdownMenu( + modifier = Modifier + .widthIn(min = DropdownMinWidth), + expanded = dropdownExpandedState.value, + onDismissRequest = onDismissRequest, + ) { + val scope = DropdownScopeImpl(this, onDismissRequest = onDismissRequest) + with(scope) { + dropdownActions.forEach { action -> + DropdownMenuItemFlat( + action = action, + ) + } + } + } + }, + leading = { + AccountListItemTextIcon( + modifier = Modifier, + item = item, + ) + }, + trailing = { + when (item.feature) { + is VaultItem2.Item.Feature.Organization -> { + val backgroundColor = if (MaterialTheme.colorScheme.isDark) { + item.feature.accentColors.dark + } else { + item.feature.accentColors.light + } + val contentColor = if (backgroundColor.luminance() > 0.5f) { + Color.Black + } else { + Color.White + }.combineAlpha(0.8f).compositeOver(backgroundColor) + Text( + modifier = Modifier + .widthIn(max = 80.dp) + .background( + backgroundColor, + MaterialTheme.shapes.small, + ) + .padding( + horizontal = 6.dp, + vertical = 2.dp, + ), + text = item.feature.name, + color = contentColor, + maxLines = 1, + overflow = TextOverflow.Ellipsis, + style = MaterialTheme.typography.labelMedium, + ) + } + + is VaultItem2.Item.Feature.Totp, + is VaultItem2.Item.Feature.None, + -> { + } + } + + if (item.source.hasError) { + Spacer(modifier = Modifier.width(8.dp)) + Icon( + imageVector = Icons.Outlined.ErrorOutline, + tint = MaterialTheme.colorScheme.error, + contentDescription = null, + ) + } + + Spacer(modifier = Modifier.width(8.dp)) + + val tqry = when { + localState.selectableItemState.selecting -> Try.CHECKBOX + item.action is VaultItem2.Item.Action.Go -> Try.CHEVRON + else -> Try.NONE + } + Crossfade( + modifier = Modifier + .size( + width = 36.dp, + height = 36.dp, + ), + targetState = tqry, + ) { + Box( + modifier = Modifier + .fillMaxSize(), + contentAlignment = Alignment.Center, + ) { + when (it) { + Try.CHECKBOX -> { + Checkbox( + checked = localState.selectableItemState.selected, + onCheckedChange = null, + ) + } + + Try.CHEVRON -> { + ChevronIcon() + } + + Try.NONE -> {} + } + } + } + }, + onClick = onClick, + onLongClick = onLongClick, + ) +} + +private enum class Try { + CHECKBOX, + CHEVRON, + NONE, +} + +@OptIn( + ExperimentalMaterial3Api::class, + ExperimentalFoundationApi::class, +) +@Composable +fun FlatItemLayout2( + modifier: Modifier = Modifier, + backgroundColor: Color, + content: @Composable ColumnScope.() -> Unit, + leading: (@Composable RowScope.() -> Unit)? = null, + trailing: (@Composable RowScope.() -> Unit)? = null, + onClick: (() -> Unit)? = null, + onLongClick: (() -> Unit)? = null, + enabled: Boolean = onClick != null, +) { + val haptic by rememberUpdatedState(LocalHapticFeedback.current) + val background = run { + Modifier + .drawBehind { + drawRect(backgroundColor) + } + } + val clickable = run { + val onClickState = rememberUpdatedState(onClick) + val onLongClickState = rememberUpdatedState(onLongClick) + Modifier + .combinedClickable( + enabled = onClick != null, + onLongClick = { + val lambda = onLongClickState.value + if (lambda != null) { + lambda.invoke() + haptic.performHapticFeedback(HapticFeedbackType.LongPress) + } + }, + ) { + onClickState.value?.invoke() + } + .rightClickable(onLongClick) + } + Row( + modifier = modifier + .fillMaxWidth() + .padding( + horizontal = 8.dp, + vertical = 2.dp, + ) + .clip(MaterialTheme.shapes.medium) + .then(background) + .then(clickable) + .minimumInteractiveComponentSize() + .padding( + horizontal = 8.dp, + vertical = 8.dp, + ), + verticalAlignment = Alignment.CenterVertically, + ) { + CompositionLocalProvider( + LocalContentColor provides LocalContentColor.current + .let { color -> + if (enabled) { + color + } else { + color.combineAlpha(alpha = DisabledEmphasisAlpha) + } + }, + ) { + if (leading != null) { + CompositionLocalProvider( + LocalMinimumInteractiveComponentEnforcement provides false, + ) { + leading() + } + Spacer(Modifier.width(16.dp)) + } + Column( + modifier = Modifier + .weight(1f), + ) { + content() + } + if (trailing != null) { + Spacer(Modifier.width(16.dp)) + trailing() + } + } + } +} + +@Composable +fun rememberSecretAccentColor( + accentLight: Color, + accentDark: Color, +): Color { + val color = LocalContentColor.current + val accent = if (color.luminance() > 0.5f) accentDark else accentLight + return accent.combineAlpha(alpha = color.alpha) +} + +@Composable +fun surfaceColorAtElevation(color: Color, elevation: Dp): Color { + return if (color == MaterialTheme.colorScheme.surface) { + MaterialTheme.colorScheme.surfaceColorAtElevation(elevation) + } else { + color + } +} + +/** + * Returns the [ColorScheme.surface] color with an alpha of the [ColorScheme.surfaceTint] color + * overlaid on top of it. + * Computes the surface tonal color at different elevation levels e.g. surface1 through surface5. + * + * @param elevation Elevation value used to compute alpha of the color overlay layer. + */ +fun ColorScheme.surfaceColorAtElevation( + elevation: Dp, +): Color { + val tint = surfaceColorAtElevationSemi(elevation = elevation) + return if (tint.isSpecified) { + tint.compositeOver(surface) + } else { + surface + } +} + +/** + * Returns the [ColorScheme.surface] color with an alpha of the [ColorScheme.surfaceTint] color + * overlaid on top of it. + * Computes the surface tonal color at different elevation levels e.g. surface1 through surface5. + * + * @param elevation Elevation value used to compute alpha of the color overlay layer. + */ +fun ColorScheme.surfaceColorAtElevationSemi( + elevation: Dp, +): Color { + if (elevation == 0.dp) return Color.Unspecified + val alpha = ((4.5f * ln(elevation.value + 1)) + 2f) / 100f + return surfaceTint.copy(alpha = alpha) +} + +@Composable +fun BoxScope.VaultItemIcon2( + icon: VaultItemIcon, + modifier: Modifier = Modifier, +) { + when (icon) { + is VaultItemIcon.VectorIcon -> { + Icon( + modifier = modifier + .align(Alignment.Center), + imageVector = icon.imageVector, + contentDescription = null, + tint = Color.Black, + ) + } + + is VaultItemIcon.TextIcon -> { + Text( + modifier = modifier + .align(Alignment.Center), + text = icon.text, + color = Color.Black + .combineAlpha(MediumEmphasisAlpha), + fontWeight = FontWeight.Bold, + fontSize = 14.sp, + ) + } + + is VaultItemIcon.ImageIcon -> { + Image( + modifier = modifier + .fillMaxSize() + .padding(3.dp) + .clip(CircleShape), + painter = painterResource(icon.imageRes), + contentDescription = null, + ) + } + + is VaultItemIcon.WebsiteIcon, + is VaultItemIcon.AppIcon, + -> { + FaviconImage( + modifier = modifier + .fillMaxSize() + .padding(3.dp) + .clip(CircleShape), + imageModel = { + when (icon) { + is VaultItemIcon.WebsiteIcon -> icon.data + is VaultItemIcon.AppIcon -> icon.data + else -> error("Unreachable statement") + } + }, + ) + } + } +} + +@Composable +fun AccountListItemTextIcon( + modifier: Modifier = Modifier, + item: VaultItem2.Item, +) { + val accent = rememberSecretAccentColor( + accentLight = item.accentLight, + accentDark = item.accentDark, + ) + AvatarBuilder( + modifier = modifier, + icon = item.icon, + accent = accent, + active = item.source.service.remote != null, + badge = { + if (item.favourite) { + Icon( + modifier = Modifier + .size(16.dp) + .padding(1.dp), + imageVector = Icons.Outlined.KeyguardFavourite, + contentDescription = null, + ) + } + if (item.source.reprompt) { + Icon( + modifier = Modifier + .size(16.dp) + .padding(1.dp), + imageVector = Icons.Outlined.Lock, + contentDescription = null, + ) + } + if (item.attachments) { + Icon( + modifier = Modifier + .size(16.dp) + .padding(1.dp), + imageVector = Icons.Outlined.KeyguardAttachment, + contentDescription = null, + ) + } + }, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultPasswordHistoryItem.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultPasswordHistoryItem.kt new file mode 100644 index 00000000..cbbe4cf7 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultPasswordHistoryItem.kt @@ -0,0 +1,11 @@ +package com.artemchep.keyguard.feature.home.vault.component + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.home.vault.model.VaultPasswordHistoryItem + +@Composable +fun VaultPasswordHistoryItem( + item: VaultPasswordHistoryItem, +) = when (item) { + is VaultPasswordHistoryItem.Value -> VaultPasswordHistoryValueItem(item) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultPasswordHistoryValueItem.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultPasswordHistoryValueItem.kt new file mode 100644 index 00000000..a86cc278 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultPasswordHistoryValueItem.kt @@ -0,0 +1,92 @@ +package com.artemchep.keyguard.feature.home.vault.component + +import androidx.compose.animation.ExperimentalAnimationApi +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.ContentCopy +import androidx.compose.material.icons.outlined.Password +import androidx.compose.material3.Checkbox +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import androidx.compose.ui.graphics.Color +import com.artemchep.keyguard.feature.home.vault.model.VaultPasswordHistoryItem +import com.artemchep.keyguard.ui.ExpandedIfNotEmptyForRow +import com.artemchep.keyguard.ui.FlatDropdown +import com.artemchep.keyguard.ui.FlatItemAction +import com.artemchep.keyguard.ui.FlatItemTextContent +import com.artemchep.keyguard.ui.colorizePassword +import com.artemchep.keyguard.ui.theme.monoFontFamily + +@Composable +fun VaultPasswordHistoryValueItem( + item: VaultPasswordHistoryItem.Value, +) { + val backgroundColor = when { + item.selected -> MaterialTheme.colorScheme.primaryContainer + else -> Color.Unspecified + } + FlatDropdown( + backgroundColor = backgroundColor, + leading = { + val icon = Icons.Outlined.Password + Icon(icon, null) + }, + content = { + FlatItemTextContent( + title = { + Text( + text = colorizePassword(item.value, LocalContentColor.current), + fontFamily = if (item.monospace) monoFontFamily else null, + ) + }, + text = if (item.title.isNotBlank()) { + // composable + { + Text(item.title) + } + } else { + null + }, + ) + }, + dropdown = item.dropdown, + trailing = { + val onCopyAction = remember(item.dropdown) { + item.dropdown + .firstNotNullOfOrNull { + val action = it as? FlatItemAction + action?.takeIf { it.type == FlatItemAction.Type.COPY } + } + } + if (onCopyAction != null) { + val onCopy = onCopyAction.onClick + IconButton( + enabled = onCopy != null, + onClick = { + onCopy?.invoke() + }, + ) { + Icon( + imageVector = Icons.Outlined.ContentCopy, + contentDescription = null, + ) + } + } + ExpandedIfNotEmptyForRow( + item.selected.takeIf { item.selecting }, + ) { selected -> + Checkbox( + checked = selected, + onCheckedChange = null, + ) + } + }, + onClick = item.onClick, + onLongClick = item.onLongClick, + enabled = true, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewActionItem.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewActionItem.kt new file mode 100644 index 00000000..bdda9780 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewActionItem.kt @@ -0,0 +1,50 @@ +package com.artemchep.keyguard.feature.home.vault.component + +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.height +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.feature.home.vault.model.VaultViewItem +import com.artemchep.keyguard.ui.FlatItemLayout +import com.artemchep.keyguard.ui.FlatItemTextContent + +@Composable +fun VaultViewActionItem( + modifier: Modifier = Modifier, + item: VaultViewItem.Action, +) { + FlatItemLayout( + modifier = modifier, + elevation = item.elevation, + leading = item.leading, + content = { + FlatItemTextContent( + title = { + Text(item.title) + }, + text = if (item.text != null) { + { + Text(item.text) + } + } else { + null + }, + ) + + if (item.badge != null) { + Spacer( + modifier = Modifier + .height(4.dp), + ) + com.artemchep.keyguard.ui.Ah( + score = item.badge.score, + text = item.badge.text, + ) + } + }, + trailing = item.trailing, + onClick = item.onClick, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewAttachmentItem.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewAttachmentItem.kt new file mode 100644 index 00000000..0610a52b --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewAttachmentItem.kt @@ -0,0 +1,17 @@ +package com.artemchep.keyguard.feature.home.vault.component + +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import com.artemchep.keyguard.feature.attachments.compose.ItemAttachment +import com.artemchep.keyguard.feature.home.vault.model.VaultViewItem + +@Composable +fun VaultViewAttachmentItem( + modifier: Modifier = Modifier, + item: VaultViewItem.Attachment, +) { + ItemAttachment( + modifier = modifier, + item = item.item, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewBooleanItem.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewBooleanItem.kt new file mode 100644 index 00000000..5b6e1399 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewBooleanItem.kt @@ -0,0 +1,41 @@ +package com.artemchep.keyguard.feature.home.vault.component + +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Switch +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import com.artemchep.keyguard.feature.home.vault.model.VaultViewItem +import com.artemchep.keyguard.ui.FlatDropdown +import com.artemchep.keyguard.ui.FlatItemTextContent + +@Composable +fun VaultViewSwitchItem( + modifier: Modifier = Modifier, + item: VaultViewItem.Switch, +) { + FlatDropdown( + modifier = modifier, + content = { + FlatItemTextContent( + text = { + Text( + text = item.title, + ) + }, + ) + }, + trailing = { + // TODO +// CompositionLocalProvider( +// LocalMinimumInteractiveComponentEnforcement provides false, +// ) { + Switch( + checked = item.value, + onCheckedChange = null, + ) +// } + }, + dropdown = item.dropdown, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewButtonItem.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewButtonItem.kt new file mode 100644 index 00000000..c709b646 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewButtonItem.kt @@ -0,0 +1,57 @@ +package com.artemchep.keyguard.feature.home.vault.component + +import androidx.compose.foundation.layout.RowScope +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.material3.Button +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.feature.home.vault.model.VaultViewItem + +@Composable +fun VaultViewButtonItem( + modifier: Modifier = Modifier, + item: VaultViewItem.Button, +) { + VaultViewButtonItem( + modifier = modifier, + leading = item.leading, + text = item.text, + onClick = item.onClick, + ) +} + +@Composable +fun VaultViewButtonItem( + modifier: Modifier = Modifier, + leading: (@Composable RowScope.() -> Unit)? = null, + text: String, + onClick: (() -> Unit)? = null, +) { + val updatedOnClick by rememberUpdatedState(onClick) + Button( + modifier = modifier + .padding( + horizontal = 8.dp, + vertical = 4.dp, + ), + enabled = updatedOnClick != null, + onClick = { + updatedOnClick?.invoke() + }, + ) { + if (leading != null) { + leading.invoke(this) + Spacer( + modifier = Modifier + .width(16.dp), + ) + } + Text(text) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewCardItem.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewCardItem.kt new file mode 100644 index 00000000..8b647342 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewCardItem.kt @@ -0,0 +1,308 @@ +package com.artemchep.keyguard.feature.home.vault.component + +import androidx.compose.animation.core.animateFloatAsState +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.RowScope +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.CreditCardOff +import androidx.compose.material3.Icon +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.feature.auth.common.VisibilityToggle +import com.artemchep.keyguard.feature.home.vault.model.VaultViewItem +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatDropdown +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.theme.combineAlpha +import com.artemchep.keyguard.ui.theme.monoFontFamily +import dev.icerock.moko.resources.compose.stringResource +import kotlin.math.roundToInt + +const val ObscureChar = '•' + +val ObscureCharBlock = "".padStart(6, ObscureChar) + +val FormatCardGroupLength = 4 + +fun obscurePassword(password: String): String { + if (password.length < 2) return "".padStart(8, ObscureChar) + return password.take(1) + ObscureCharBlock + password.takeLast(1) +} + +fun formatCardNumber( + cardNumber: String, +) = buildString { + var count = 0 + var shouldAddSpace = false + cardNumber.forEach { char -> + if (char.isLetterOrDigit()) { + count++ + } + if (shouldAddSpace) { + append(' ') + shouldAddSpace = false + } + append(char) + shouldAddSpace = count.rem(FormatCardGroupLength) == 0 + } +} + +fun obscureCardNumber( + cardNumber: String, +): String { + val cardNumberFormatted = formatCardNumber(cardNumber) + val obscureToExclusive = run { + var i = 0 + var count = 0 + for (j in (cardNumberFormatted.length - 1) downTo 0) { + // Increment the counter of meaningful + // characters. + if (cardNumberFormatted[j].isLetterOrDigit()) { + count++ + } + if (count == FormatCardGroupLength) { + i = j + break + } + } + i + } + val sb = StringBuilder() + // Form a new card number that is semi-obscure. + cardNumberFormatted.forEachIndexed { i, char -> + val finalChar = if ( + i < obscureToExclusive && char.isLetterOrDigit() + ) { + ObscureChar + } else { + char + } + sb.append(finalChar) + } + return sb.toString() +} + +@Composable +fun VaultViewCardItem( + modifier: Modifier = Modifier, + item: VaultViewItem.Card, +) { + val passwordVisibility = remember { + mutableStateOf(!item.concealFields) + } + + val updatedVerify by rememberUpdatedState(item.verify) + val cardNumber = item.data.number + FlatDropdown( + modifier = modifier, + elevation = item.elevation, + content = { + val brand = item.data.brand + ?: item.data.creditCardType?.name + if (brand != null) { + Text( + text = brand, + color = MaterialTheme.colorScheme.secondary + .combineAlpha(MediumEmphasisAlpha), + style = MaterialTheme.typography.labelSmall, + ) + Spacer( + modifier = Modifier + .height(8.dp), + ) + } + Row { + if (cardNumber != null) { + val progress by animateFloatAsState( + targetValue = if (passwordVisibility.value) { + 1f + } else { + 0f + }, + ) + + val cardNumberFormatted = remember(cardNumber) { + formatCardNumber(cardNumber) + } + + val obscureToExclusive = remember(cardNumberFormatted) { + var i = 0 + var count = 0 + for (j in (cardNumberFormatted.length - 1) downTo 0) { + // Increment the counter of meaningful + // characters. + if (cardNumberFormatted[j].isLetterOrDigit()) { + count++ + } + if (count == 4) { + i = j + break + } + } + i + } + val obscureFrom by derivedStateOf { + val indexFloat = cardNumberFormatted.length.toFloat() * progress + indexFloat.roundToInt() + } + val finalCardNumber = remember( + obscureFrom, + obscureToExclusive, + cardNumberFormatted, + ) { + val sb = StringBuilder() + // Form a new card number that is semi-obscure. + cardNumberFormatted.forEachIndexed { i, char -> + val finalChar = if ( + i in obscureFrom until obscureToExclusive && char.isLetterOrDigit() + ) { + ObscureChar + } else { + char + } + sb.append(finalChar) + } + sb.toString() + } + Text( + text = finalCardNumber, + style = MaterialTheme.typography.titleLarge, + fontFamily = monoFontFamily, + ) + } else { + val contentColor = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha) + Row( + verticalAlignment = Alignment.CenterVertically, + ) { + Icon( + modifier = Modifier + .size(18.dp), + imageVector = Icons.Outlined.CreditCardOff, + tint = contentColor, + contentDescription = null, + ) + Spacer( + modifier = Modifier + .width(8.dp), + ) + Text( + text = stringResource(Res.strings.card_number_empty_label), + color = contentColor, + style = MaterialTheme.typography.bodyLarge, + ) + } + } + } + Spacer(modifier = Modifier.height(16.dp)) + Row { + DateLabel( + label = stringResource(Res.strings.card_valid_from), + month = item.data.fromMonth, + year = item.data.fromYear, + ) + DateLabel( + label = stringResource(Res.strings.card_valid_to), + month = item.data.expMonth, + year = item.data.expYear, + ) + } + val cardholderName = item.data.cardholderName + if (cardholderName != null) { + Spacer(modifier = Modifier.height(8.dp)) + Text( + text = cardholderName, + style = MaterialTheme.typography.bodyMedium, + fontFamily = monoFontFamily, + ) + } + }, + trailing = if (cardNumber != null) { + // composable + { + VisibilityToggle( + visible = passwordVisibility.value, + onVisibleChange = { shouldBeConcealed -> + val verify = updatedVerify + if ( + verify != null && + shouldBeConcealed + ) { + verify.invoke { + passwordVisibility.value = true + } + return@VisibilityToggle + } + + passwordVisibility.value = shouldBeConcealed + }, + ) + } + } else { + null + }, + dropdown = item.dropdown, + actions = item.actions, + ) +} + +@Composable +private fun RowScope.DateLabel( + label: String, + month: String?, + year: String?, +) { + if ( + month == null && + year == null + ) { + return + } + + val monthFormatted = month ?: "mm" + val yearFormatted = year ?: "yyyy" + DateLabelContent( + text = label, + date = "$monthFormatted/$yearFormatted", + ) + Spacer(modifier = Modifier.width(24.dp)) +} + +@Composable +private fun DateLabelContent( + modifier: Modifier = Modifier, + text: String, + date: String, +) { + Column( + modifier = modifier, + horizontalAlignment = Alignment.Start, + ) { + Text( + text = text, + color = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + style = MaterialTheme.typography.labelSmall, + ) + Text( + text = date, + style = MaterialTheme.typography.bodyMedium, + fontFamily = monoFontFamily, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewCollectionItem.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewCollectionItem.kt new file mode 100644 index 00000000..b585c941 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewCollectionItem.kt @@ -0,0 +1,39 @@ +package com.artemchep.keyguard.feature.home.vault.component + +import androidx.compose.material.icons.Icons +import androidx.compose.material3.Icon +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.text.style.TextOverflow +import com.artemchep.keyguard.feature.home.vault.model.VaultViewItem +import com.artemchep.keyguard.ui.FlatItem +import com.artemchep.keyguard.ui.icons.ChevronIcon +import com.artemchep.keyguard.ui.icons.KeyguardCollection + +@Composable +fun VaultViewCollectionItem( + modifier: Modifier = Modifier, + item: VaultViewItem.Collection, +) { + FlatItem( + modifier = modifier, + leading = { + Icon( + Icons.Outlined.KeyguardCollection, + null, + ) + }, + trailing = { + ChevronIcon() + }, + title = { + Text( + text = item.title, + overflow = TextOverflow.Ellipsis, + maxLines = 5, + ) + }, + onClick = item.onClick, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewErrorItem.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewErrorItem.kt new file mode 100644 index 00000000..051d64b4 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewErrorItem.kt @@ -0,0 +1,150 @@ +package com.artemchep.keyguard.feature.home.vault.component + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.heightIn +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.AccessTime +import androidx.compose.material.icons.outlined.ErrorOutline +import androidx.compose.material.icons.outlined.Sync +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.feature.home.vault.model.VaultViewItem +import com.artemchep.keyguard.ui.DisabledEmphasisAlpha +import com.artemchep.keyguard.ui.ExpandedIfNotEmpty +import com.artemchep.keyguard.ui.ExpandedIfNotEmptyForRow +import com.artemchep.keyguard.ui.HighEmphasisAlpha +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.theme.combineAlpha +import com.artemchep.keyguard.ui.util.HorizontalDivider + +@Composable +fun VaultViewErrorItem( + modifier: Modifier = Modifier, + item: VaultViewItem.Error, +) { + val contentColor = MaterialTheme.colorScheme.error + val backgroundColor = MaterialTheme.colorScheme.errorContainer + .combineAlpha(DisabledEmphasisAlpha) + Surface( + modifier = modifier + .fillMaxWidth() + .padding( + horizontal = 8.dp, + vertical = 2.dp, + ) + .padding(bottom = 24.dp), + shape = MaterialTheme.shapes.large, + color = backgroundColor, + ) { + Column( + modifier = Modifier, + ) { + Row( + verticalAlignment = Alignment.CenterVertically, + ) { + Column( + modifier = Modifier + .weight(1f), + ) { + Spacer(modifier = Modifier.height(16.dp)) + Icon( + modifier = Modifier + .padding(horizontal = 8.dp), + imageVector = Icons.Outlined.ErrorOutline, + contentDescription = null, + tint = contentColor, + ) + Spacer(modifier = Modifier.height(16.dp)) + Text( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 8.dp), + text = item.name, + style = MaterialTheme.typography.titleSmall, + color = MaterialTheme.colorScheme.onErrorContainer, + ) + ExpandedIfNotEmpty( + valueOrNull = item.message, + ) { message -> + Text( + modifier = Modifier + .fillMaxWidth() + .padding(top = 4.dp) + .padding(horizontal = 8.dp), + text = message, + style = MaterialTheme.typography.bodySmall, + color = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + ) + } + Spacer(modifier = Modifier.height(8.dp)) + } + val updatedOnRetry by rememberUpdatedState(item.onRetry) + ExpandedIfNotEmptyForRow( + valueOrNull = updatedOnRetry, + ) { + Row { + Spacer( + modifier = Modifier + .width(8.dp), + ) + IconButton( + onClick = { + updatedOnRetry?.invoke() + }, + ) { + Icon( + imageVector = Icons.Outlined.Sync, + contentDescription = null, + ) + } + } + } + Spacer( + modifier = Modifier + .width(8.dp), + ) + } + HorizontalDivider() + Row( + modifier = Modifier + .fillMaxWidth() + .heightIn(min = 36.dp) + .padding(horizontal = 8.dp), + verticalAlignment = Alignment.CenterVertically, + ) { + Icon( + modifier = Modifier + .size(14.dp), + imageVector = Icons.Outlined.AccessTime, + contentDescription = null, + ) + Spacer(modifier = Modifier.width(8.dp)) + Text( + modifier = Modifier, + text = item.timestamp, + style = MaterialTheme.typography.labelSmall, + color = LocalContentColor.current + .combineAlpha(HighEmphasisAlpha), + ) + } + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewFolderItem.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewFolderItem.kt new file mode 100644 index 00000000..8ed73667 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewFolderItem.kt @@ -0,0 +1,118 @@ +package com.artemchep.keyguard.feature.home.vault.component + +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.ExperimentalLayoutApi +import androidx.compose.foundation.layout.FlowRow +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.ChevronRight +import androidx.compose.material.icons.outlined.Folder +import androidx.compose.material3.Icon +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.feature.home.vault.model.VaultViewItem +import com.artemchep.keyguard.ui.DisabledEmphasisAlpha +import com.artemchep.keyguard.ui.FlatItem +import com.artemchep.keyguard.ui.icons.ChevronIcon +import com.artemchep.keyguard.ui.theme.combineAlpha + +@OptIn(ExperimentalLayoutApi::class) +@Composable +fun VaultViewFolderItem( + modifier: Modifier = Modifier, + item: VaultViewItem.Folder, +) { + FlatItem( + modifier = modifier, + leading = { + Icon( + Icons.Outlined.Folder, + null, + ) + }, + trailing = { + ChevronIcon() + }, + title = { + FlowRow( + verticalArrangement = Arrangement.spacedBy(4.dp, Alignment.CenterVertically), + horizontalArrangement = Arrangement.spacedBy(4.dp, Alignment.Start), + ) { + val paddingModifier = Modifier + .padding( + horizontal = 8.dp, + vertical = 4.dp, + ) + item.nodes.forEachIndexed { index, s -> + if (item.nodes.size > 1 && index != item.nodes.lastIndex) { + Surface( + modifier = Modifier + .align(Alignment.CenterVertically), + shape = MaterialTheme.shapes.small, + tonalElevation = 1.dp, + ) { + val updatedOnClick by rememberUpdatedState(s.onClick) + Row( + modifier = Modifier + .clickable { + updatedOnClick() + } + .then(paddingModifier), + verticalAlignment = Alignment.CenterVertically, + ) { + Text( + modifier = Modifier + .weight(1f, fill = false), + text = s.name, + overflow = TextOverflow.Ellipsis, + maxLines = 5, + ) + Spacer(modifier = Modifier.width(8.dp)) + Icon( + Icons.Outlined.ChevronRight, + null, + modifier = Modifier + .size(18.dp), + tint = LocalContentColor.current + .combineAlpha(DisabledEmphasisAlpha), + ) + } + } + } else if (item.nodes.size == 1) { + Text( + modifier = Modifier + .align(Alignment.CenterVertically), + text = s.name, + overflow = TextOverflow.Ellipsis, + maxLines = 5, + ) + } else { + Text( + modifier = Modifier + .align(Alignment.CenterVertically) + .then(paddingModifier), + text = s.name, + overflow = TextOverflow.Ellipsis, + maxLines = 5, + ) + } + } + } + }, + onClick = item.onClick, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewIdentityItem.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewIdentityItem.kt new file mode 100644 index 00000000..bcec17d2 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewIdentityItem.kt @@ -0,0 +1,126 @@ +package com.artemchep.keyguard.feature.home.vault.component + +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Icon +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.feature.home.vault.model.VaultViewItem +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.theme.Dimens +import com.artemchep.keyguard.ui.theme.combineAlpha + +@Composable +fun VaultViewIdentityItem( + modifier: Modifier = Modifier, + item: VaultViewItem.Identity, +) { + Column( + modifier = modifier, + ) { + val title = item.data.title + if (!title.isNullOrBlank()) { + Text( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding), + text = title, + style = MaterialTheme.typography.titleMedium, + color = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + ) + } + val name = listOfNotNull( + item.data.firstName, + item.data.middleName, + item.data.lastName, + ).joinToString(separator = " ") + if (name.isNotBlank()) { + Text( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding), + text = name, + style = MaterialTheme.typography.titleLarge, + ) + } + Spacer(modifier = Modifier.height(16.dp)) + if (item.actions.isNotEmpty()) { + Row( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 8.dp), + horizontalArrangement = Arrangement.spacedBy(4.dp), + ) { + item.actions.forEach { action -> + Ah( + modifier = Modifier + .weight(1f), + icon = { + if (action.leading != null) { + action.leading.invoke() + } else if (action.icon != null) { + Icon(action.icon, null) + } + }, + title = action.title, + onClick = action.onClick, + ) + } + } + } + } +} + +@Composable +private fun Ah( + modifier: Modifier = Modifier, + icon: @Composable () -> Unit, + title: String, + onClick: (() -> Unit)?, +) { + Surface( + modifier = modifier, + shape = MaterialTheme.shapes.medium, + color = MaterialTheme.colorScheme.surface, + tonalElevation = 1.dp, + ) { + CompositionLocalProvider( + LocalContentColor provides MaterialTheme.colorScheme.primary, + ) { + Column( + modifier = Modifier + .then( + if (onClick != null) { + Modifier + .clickable { + onClick() + } + } else { + Modifier + }, + ) + .padding(8.dp), + horizontalAlignment = Alignment.CenterHorizontally, + ) { + icon() + Spacer(modifier = Modifier.height(8.dp)) + Text( + text = title, + style = MaterialTheme.typography.labelSmall, + ) + } + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewInactivePasskeyItem.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewInactivePasskeyItem.kt new file mode 100644 index 00000000..eabc5183 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewInactivePasskeyItem.kt @@ -0,0 +1,58 @@ +package com.artemchep.keyguard.feature.home.vault.component + +import androidx.compose.foundation.layout.ExperimentalLayoutApi +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Info +import androidx.compose.material3.Icon +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.ui.Modifier +import com.artemchep.keyguard.feature.home.vault.model.VaultViewItem +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.DisabledEmphasisAlpha +import com.artemchep.keyguard.ui.FlatItemLayout +import com.artemchep.keyguard.ui.FlatItemTextContent +import com.artemchep.keyguard.ui.theme.combineAlpha +import com.artemchep.keyguard.ui.theme.info +import com.artemchep.keyguard.ui.theme.infoContainer +import com.artemchep.keyguard.ui.theme.onInfoContainer +import dev.icerock.moko.resources.compose.stringResource + +@Composable +fun VaultViewInactivePasskeyItem( + modifier: Modifier = Modifier, + item: VaultViewItem.InactivePasskey, +) { + val contentColor = MaterialTheme.colorScheme.info + val backgroundColor = MaterialTheme.colorScheme.infoContainer + .combineAlpha(DisabledEmphasisAlpha) + FlatItemLayout( + modifier = modifier, + backgroundColor = backgroundColor, + leading = { + Icon( + Icons.Outlined.Info, + contentDescription = null, + tint = contentColor, + ) + }, + content = { + CompositionLocalProvider( + LocalContentColor provides MaterialTheme.colorScheme.onInfoContainer, + ) { + FlatItemTextContent( + title = { + Text( + stringResource(Res.strings.passkey_available), + style = MaterialTheme.typography.titleSmall, + ) + }, + ) + } + }, + onClick = item.onClick, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewInactiveTotpItem.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewInactiveTotpItem.kt new file mode 100644 index 00000000..b087396a --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewInactiveTotpItem.kt @@ -0,0 +1,58 @@ +package com.artemchep.keyguard.feature.home.vault.component + +import androidx.compose.foundation.layout.ExperimentalLayoutApi +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Warning +import androidx.compose.material3.Icon +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.ui.Modifier +import com.artemchep.keyguard.feature.home.vault.model.VaultViewItem +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.DisabledEmphasisAlpha +import com.artemchep.keyguard.ui.FlatDropdown +import com.artemchep.keyguard.ui.FlatItemTextContent +import com.artemchep.keyguard.ui.theme.combineAlpha +import com.artemchep.keyguard.ui.theme.onWarningContainer +import com.artemchep.keyguard.ui.theme.warning +import com.artemchep.keyguard.ui.theme.warningContainer +import dev.icerock.moko.resources.compose.stringResource + +@Composable +fun VaultViewInactiveTotpItem( + modifier: Modifier = Modifier, + item: VaultViewItem.InactiveTotp, +) { + val contentColor = MaterialTheme.colorScheme.warning + val backgroundColor = MaterialTheme.colorScheme.warningContainer + .combineAlpha(DisabledEmphasisAlpha) + FlatDropdown( + modifier = modifier, + backgroundColor = backgroundColor, + leading = { + Icon( + Icons.Outlined.Warning, + contentDescription = null, + tint = contentColor, + ) + }, + content = { + CompositionLocalProvider( + LocalContentColor provides MaterialTheme.colorScheme.onWarningContainer, + ) { + FlatItemTextContent( + title = { + Text( + text = stringResource(Res.strings.twofa_available), + style = MaterialTheme.typography.titleSmall, + ) + }, + ) + } + }, + onClick = item.onClick, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewInfoItem.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewInfoItem.kt new file mode 100644 index 00000000..2ba4f74a --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewInfoItem.kt @@ -0,0 +1,242 @@ +package com.artemchep.keyguard.feature.home.vault.component + +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.animation.animateContentSize +import androidx.compose.animation.fadeIn +import androidx.compose.animation.fadeOut +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.ArrowDropDown +import androidx.compose.material.icons.outlined.ErrorOutline +import androidx.compose.material3.ColorScheme +import androidx.compose.material3.Icon +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.draw.shadow +import androidx.compose.ui.graphics.Brush +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.Shape +import androidx.compose.ui.graphics.compositeOver +import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.feature.home.vault.model.VaultViewItem +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.DisabledEmphasisAlpha +import com.artemchep.keyguard.ui.ExpandedIfNotEmpty +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.theme.combineAlpha +import com.artemchep.keyguard.ui.theme.info +import com.artemchep.keyguard.ui.theme.infoContainer +import com.artemchep.keyguard.ui.theme.onInfoContainer +import dev.icerock.moko.resources.compose.stringResource +import kotlin.math.ln + +@Composable +fun VaultViewInfoItem( + modifier: Modifier = Modifier, + item: VaultViewItem.Info, +) { + val expandable = item.long + val expandedState = remember(expandable) { + mutableStateOf(!expandable) + } + + val contentColor = MaterialTheme.colorScheme.info + val backgroundColor = MaterialTheme.colorScheme.infoContainer + .combineAlpha(DisabledEmphasisAlpha) + // We want to composite it over the background because the overlay + // requires us to have the opaque color as the background. + .compositeOver(MaterialTheme.colorScheme.background) + Surface( + modifier = modifier + .fillMaxWidth() + .padding( + horizontal = 8.dp, + vertical = 2.dp, + ) + .padding(bottom = 24.dp), + shape = MaterialTheme.shapes.large, + color = backgroundColor, + ) { + Box { + Column( + modifier = Modifier, + ) { + Spacer( + modifier = Modifier + .height(16.dp), + ) + Icon( + modifier = Modifier + .padding(horizontal = 8.dp), + imageVector = Icons.Outlined.ErrorOutline, + contentDescription = null, + tint = contentColor, + ) + Spacer(modifier = Modifier.height(16.dp)) + Text( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 8.dp), + text = item.name, + style = MaterialTheme.typography.titleSmall, + color = MaterialTheme.colorScheme.onInfoContainer, + ) + ExpandedIfNotEmpty( + valueOrNull = item.message, + ) { message -> + Text( + modifier = Modifier + .fillMaxWidth() + .padding(top = 4.dp) + .padding(horizontal = 8.dp) + .animateContentSize(), + text = message, + style = MaterialTheme.typography.bodySmall, + color = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + overflow = TextOverflow.Ellipsis, + maxLines = if (expandedState.value) Int.MAX_VALUE else 4, + ) + } + Spacer( + modifier = Modifier + .height(8.dp), + ) + } + AnimatedVisibility( + modifier = Modifier + .matchParentSize(), + enter = fadeIn(), + exit = fadeOut(), + visible = !expandedState.value, + ) { + LearnOverlay( + modifier = Modifier + .matchParentSize(), + backgroundColor = backgroundColor, + onClick = { + expandedState.value = true + }, + ) + } + } + } +} + +@Composable +private fun LearnOverlay( + modifier: Modifier = Modifier, + backgroundColor: Color = MaterialTheme.colorScheme.surface, + onClick: () -> Unit, +) { + Column( + modifier = modifier, + ) { + Box( + modifier = Modifier + .fillMaxWidth() + .weight(1f), + ) + Box( + modifier = Modifier + .fillMaxWidth() + .background( + brush = Brush.verticalGradient( + colors = listOf( + backgroundColor.copy(alpha = 0f), + backgroundColor.copy(alpha = 0.8f), + ), + ), + ) + .padding( + start = 8.dp, + end = 8.dp, + top = 48.dp, + bottom = 8.dp, + ), + contentAlignment = Alignment.BottomStart, + ) { + LearnButton( + backgroundColor = backgroundColor, + elevation = 1.dp, + onClick = onClick, + ) + } + } +} + +@Composable +private fun LearnButton( + modifier: Modifier = Modifier, + backgroundColor: Color = MaterialTheme.colorScheme.surface, + color: Color = MaterialTheme.colorScheme.primary, + shape: Shape = CircleShape, + elevation: Dp = 0.dp, + onClick: () -> Unit, +) { + val finalBackgroundColor = MaterialTheme.colorScheme.colorAtElevation( + color = backgroundColor, + elevation = elevation, + ) + Row( + modifier = modifier + .shadow(elevation, shape) + .clip(shape) + .background(finalBackgroundColor) + .clickable(onClick = onClick) + .padding( + horizontal = 12.dp, + vertical = 8.dp, + ), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.Start, + ) { + Text( + text = stringResource(Res.strings.learn_more), + style = MaterialTheme.typography.labelLarge, + color = color, + ) + Spacer( + modifier = Modifier + .width(4.dp), + ) + Icon( + modifier = Modifier + .size(18.dp), + tint = color, + imageVector = Icons.Outlined.ArrowDropDown, + contentDescription = null, + ) + } +} + +private fun ColorScheme.colorAtElevation( + color: Color, + elevation: Dp, +): Color { + if (elevation == 0.dp) return color + val alpha = ((4.5f * ln(elevation.value + 1)) + 2f) / 100f + return surfaceTint.copy(alpha = alpha).compositeOver(color) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewItem.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewItem.kt new file mode 100644 index 00000000..39323e51 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewItem.kt @@ -0,0 +1,34 @@ +package com.artemchep.keyguard.feature.home.vault.component + +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import com.artemchep.keyguard.feature.home.vault.model.VaultViewItem + +@Composable +fun VaultViewItem( + modifier: Modifier = Modifier, + item: VaultViewItem, +) = when (item) { + is VaultViewItem.Card -> VaultViewCardItem(modifier, item) + is VaultViewItem.Folder -> VaultViewFolderItem(modifier, item) + is VaultViewItem.Organization -> VaultViewOrganizationItem(modifier, item) + is VaultViewItem.Collection -> VaultViewCollectionItem(modifier, item) + is VaultViewItem.Error -> VaultViewErrorItem(modifier, item) + is VaultViewItem.Info -> VaultViewInfoItem(modifier, item) + is VaultViewItem.Identity -> VaultViewIdentityItem(modifier, item) + is VaultViewItem.Action -> VaultViewActionItem(modifier, item) + is VaultViewItem.Value -> VaultViewValueItem(modifier, item) + is VaultViewItem.Switch -> VaultViewSwitchItem(modifier, item) + is VaultViewItem.Uri -> VaultViewUriItem(modifier, item) + is VaultViewItem.Button -> VaultViewButtonItem(modifier, item) + is VaultViewItem.Label -> VaultViewLabelItem(modifier, item) + is VaultViewItem.Spacer -> VaultViewSpacerItem(modifier, item) + is VaultViewItem.Note -> VaultViewNoteItem(modifier, item) + is VaultViewItem.Totp -> VaultViewTotpItem(modifier, item) + is VaultViewItem.Passkey -> VaultViewPasskeyItem(modifier, item) + is VaultViewItem.ReusedPassword -> VaultViewReusedPasswordItem(modifier, item) + is VaultViewItem.InactiveTotp -> VaultViewInactiveTotpItem(modifier, item) + is VaultViewItem.InactivePasskey -> VaultViewInactivePasskeyItem(modifier, item) + is VaultViewItem.Section -> VaultViewSectionItem(modifier, item) + is VaultViewItem.Attachment -> VaultViewAttachmentItem(modifier, item) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewLabelItem.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewLabelItem.kt new file mode 100644 index 00000000..5d9e397a --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewLabelItem.kt @@ -0,0 +1,51 @@ +package com.artemchep.keyguard.feature.home.vault.component + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.feature.home.vault.model.VaultViewItem +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.theme.Dimens +import com.artemchep.keyguard.ui.theme.combineAlpha + +@Composable +fun VaultViewLabelItem( + modifier: Modifier = Modifier, + item: VaultViewItem.Label, +) { + Row( + modifier = modifier + .fillMaxWidth() + .padding( + horizontal = Dimens.horizontalPadding, + vertical = 8.dp, + ), + horizontalArrangement = item.horizontalArrangement, + ) { + val textAlign = if (item.horizontalArrangement == Arrangement.Center) { + TextAlign.Center + } else { + TextAlign.Start + } + Text( + text = item.text, + textAlign = textAlign, + style = MaterialTheme.typography.labelMedium, + color = + if (item.error) { + MaterialTheme.colorScheme.error + } else { + LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha) + }, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewNoteItem.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewNoteItem.kt new file mode 100644 index 00000000..fdb67141 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewNoteItem.kt @@ -0,0 +1,120 @@ +package com.artemchep.keyguard.feature.home.vault.component + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.text.selection.SelectionContainer +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.feature.home.vault.model.VaultViewItem +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.ExpandedIfNotEmpty +import com.artemchep.keyguard.ui.FlatItem +import com.artemchep.keyguard.ui.icons.VisibilityIcon +import com.artemchep.keyguard.ui.markdown.Md +import com.artemchep.keyguard.ui.theme.Dimens +import dev.icerock.moko.resources.compose.stringResource + +@Composable +fun VaultViewNoteItem( + modifier: Modifier = Modifier, + item: VaultViewItem.Note, +) { + Column( + modifier = modifier, + ) { + val updatedVerify by rememberUpdatedState(item.verify) + val visibilityState = remember( + item.conceal, + ) { mutableStateOf(!item.conceal) } + + if (item.conceal) { + FlatItem( + leading = { + VisibilityIcon( + visible = visibilityState.value, + ) + }, + title = { + val text = if (visibilityState.value) { + stringResource(Res.strings.hide_secure_note) + } else { + stringResource(Res.strings.reveal_secure_note) + } + Text( + text = text, + ) + }, + onClick = { + val shouldBeConcealed = !visibilityState.value + val verify = updatedVerify + if ( + verify != null && + shouldBeConcealed + ) { + verify.invoke { + visibilityState.value = true + } + return@FlatItem + } + + visibilityState.value = shouldBeConcealed + }, + ) + } + ExpandedIfNotEmpty( + Unit.takeIf { visibilityState.value }, + modifier = Modifier + .fillMaxWidth(), + ) { + VaultViewNoteItemLayout( + modifier = Modifier + .fillMaxWidth(), + ) { + SelectionContainer { + if (item.markdown) { + Md( + markdown = item.text, + ) + } else { + Text(item.text) + } + } + } + } + } +} + +@Composable +fun VaultViewNoteItemLayout( + modifier: Modifier = Modifier, + content: @Composable () -> Unit, +) { +// Surface( +// modifier = Modifier +// .padding( +// horizontal = 8.dp, +// vertical = 2.dp, +// ) +// .padding(top = 8.dp) +// .fillMaxWidth(), +// shape = MaterialTheme.shapes.medium, +// color = MaterialTheme.colorScheme.noteContainer, +// ) { + Column( + modifier = modifier + .padding( + vertical = 12.dp, + horizontal = Dimens.horizontalPadding, + ), + ) { + content() + } +// } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewOrganizationItem.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewOrganizationItem.kt new file mode 100644 index 00000000..112d10d9 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewOrganizationItem.kt @@ -0,0 +1,39 @@ +package com.artemchep.keyguard.feature.home.vault.component + +import androidx.compose.material.icons.Icons +import androidx.compose.material3.Icon +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.text.style.TextOverflow +import com.artemchep.keyguard.feature.home.vault.model.VaultViewItem +import com.artemchep.keyguard.ui.FlatItem +import com.artemchep.keyguard.ui.icons.ChevronIcon +import com.artemchep.keyguard.ui.icons.KeyguardOrganization + +@Composable +fun VaultViewOrganizationItem( + modifier: Modifier = Modifier, + item: VaultViewItem.Organization, +) { + FlatItem( + modifier = modifier, + leading = { + Icon( + Icons.Outlined.KeyguardOrganization, + null, + ) + }, + trailing = { + ChevronIcon() + }, + title = { + Text( + text = item.title, + overflow = TextOverflow.Ellipsis, + maxLines = 5, + ) + }, + onClick = item.onClick, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewPasskeyItem.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewPasskeyItem.kt new file mode 100644 index 00000000..480a976c --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewPasskeyItem.kt @@ -0,0 +1,136 @@ +package com.artemchep.keyguard.feature.home.vault.component + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.RowScope +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.width +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Check +import androidx.compose.material.icons.outlined.Key +import androidx.compose.material3.Button +import androidx.compose.material3.Icon +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.Modifier +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.feature.home.vault.model.VaultViewItem +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItemLayout +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.icons.icon +import com.artemchep.keyguard.ui.theme.Dimens +import com.artemchep.keyguard.ui.theme.combineAlpha +import dev.icerock.moko.resources.compose.stringResource + +@Composable +fun VaultViewPasskeyItem( + modifier: Modifier = Modifier, + item: VaultViewItem.Passkey, +) { + FlatItemLayout( + modifier = modifier, + elevation = 1.dp, + leading = icon(Icons.Outlined.Key), + content = { + val columnLayout = item.onUse != null + if (columnLayout) { + Column { + if (item.source.userDisplayName != null) { + TextUserName( + text = item.source.userDisplayName, + ) + } + TextRpId( + text = item.source.rpId, + ) + } + } else { + Row( + modifier = Modifier + .fillMaxWidth(), + ) { + if (item.source.userDisplayName != null) { + TextUserName( + modifier = Modifier + .alignByBaseline() + .weight(0.6f, fill = false), + text = item.source.userDisplayName, + ) + Spacer( + modifier = Modifier + .width(8.dp), + ) + } + TextRpId( + modifier = Modifier + .alignByBaseline() + .weight(0.4f, fill = false), + text = item.source.rpId, + ) + } + } + }, + trailing = if (item.onUse != null) { + // composable + { + val updatedOnUse by rememberUpdatedState(item.onUse) + Button( + onClick = { + updatedOnUse.invoke() + }, + ) { + Icon(Icons.Outlined.Check, null) + Spacer( + modifier = Modifier + .width(Dimens.buttonIconPadding), + ) + Text( + text = stringResource(Res.strings.passkey_use_short), + textAlign = TextAlign.Center, + ) + } + } + } else { + null + }, + onClick = item.onClick, + ) +} + +@Composable +private fun TextUserName( + modifier: Modifier = Modifier, + text: String, +) { + Text( + modifier = modifier, + text = text, + style = MaterialTheme.typography.bodyLarge, + maxLines = 1, + overflow = TextOverflow.Ellipsis, + ) +} + +@Composable +private fun TextRpId( + modifier: Modifier = Modifier, + text: String, +) { + Text( + modifier = modifier, + text = text, + style = MaterialTheme.typography.bodyMedium, + maxLines = 1, + overflow = TextOverflow.Ellipsis, + color = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewReusedPasswordItem.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewReusedPasswordItem.kt new file mode 100644 index 00000000..db5482d8 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewReusedPasswordItem.kt @@ -0,0 +1,58 @@ +package com.artemchep.keyguard.feature.home.vault.component + +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.ErrorOutline +import androidx.compose.material3.Icon +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.ui.Modifier +import com.artemchep.keyguard.feature.home.vault.model.VaultViewItem +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.DisabledEmphasisAlpha +import com.artemchep.keyguard.ui.FlatItemLayout +import com.artemchep.keyguard.ui.FlatItemTextContent +import com.artemchep.keyguard.ui.icons.ChevronIcon +import com.artemchep.keyguard.ui.theme.combineAlpha +import dev.icerock.moko.resources.compose.stringResource + +@Composable +fun VaultViewReusedPasswordItem( + modifier: Modifier = Modifier, + item: VaultViewItem.ReusedPassword, +) { + val contentColor = MaterialTheme.colorScheme.error + val backgroundColor = MaterialTheme.colorScheme.errorContainer + .combineAlpha(DisabledEmphasisAlpha) + FlatItemLayout( + modifier = modifier, + backgroundColor = backgroundColor, + leading = { + Icon( + Icons.Outlined.ErrorOutline, + contentDescription = null, + tint = contentColor, + ) + }, + content = { + CompositionLocalProvider( + LocalContentColor provides MaterialTheme.colorScheme.onErrorContainer, + ) { + FlatItemTextContent( + title = { + Text( + stringResource(Res.strings.reused_password), + style = MaterialTheme.typography.titleSmall, + ) + }, + ) + } + }, + trailing = { + ChevronIcon() + }, + onClick = item.onClick, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewSectionItem.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewSectionItem.kt new file mode 100644 index 00000000..b7b0f2a0 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewSectionItem.kt @@ -0,0 +1,16 @@ +package com.artemchep.keyguard.feature.home.vault.component + +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import com.artemchep.keyguard.feature.home.vault.model.VaultViewItem + +@Composable +fun VaultViewSectionItem( + modifier: Modifier = Modifier, + item: VaultViewItem.Section, +) { + Section( + modifier = modifier, + text = item.text, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewSpacerItem.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewSpacerItem.kt new file mode 100644 index 00000000..c76dbc95 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewSpacerItem.kt @@ -0,0 +1,15 @@ +package com.artemchep.keyguard.feature.home.vault.component + +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.height +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import com.artemchep.keyguard.feature.home.vault.model.VaultViewItem + +@Composable +fun VaultViewSpacerItem( + modifier: Modifier = Modifier, + item: VaultViewItem.Spacer, +) { + Spacer(modifier = modifier.height(item.height)) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewTotpItem.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewTotpItem.kt new file mode 100644 index 00000000..0a30d372 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewTotpItem.kt @@ -0,0 +1,448 @@ +package com.artemchep.keyguard.feature.home.vault.component + +import androidx.compose.animation.AnimatedContent +import androidx.compose.animation.EnterTransition +import androidx.compose.animation.ExitTransition +import androidx.compose.animation.animateContentSize +import androidx.compose.animation.scaleIn +import androidx.compose.animation.scaleOut +import androidx.compose.animation.slideInVertically +import androidx.compose.animation.slideOutVertically +import androidx.compose.animation.togetherWith +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.ExperimentalLayoutApi +import androidx.compose.foundation.layout.FlowRow +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.RowScope +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.ContentCopy +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.State +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.key +import androidx.compose.runtime.remember +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.isSpecified +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.dp +import arrow.core.getOrElse +import com.artemchep.keyguard.common.io.attempt +import com.artemchep.keyguard.common.model.TotpCode +import com.artemchep.keyguard.common.model.TotpToken +import com.artemchep.keyguard.common.usecase.CopyText +import com.artemchep.keyguard.common.usecase.GetTotpCode +import com.artemchep.keyguard.feature.home.vault.model.VaultViewItem +import com.artemchep.keyguard.ui.AhContainer +import com.artemchep.keyguard.ui.DisabledEmphasisAlpha +import com.artemchep.keyguard.ui.ExpandedIfNotEmptyForRow +import com.artemchep.keyguard.ui.FlatDropdown +import com.artemchep.keyguard.ui.FlatItemAction +import com.artemchep.keyguard.ui.icons.IconBox +import com.artemchep.keyguard.ui.icons.KeyguardTwoFa +import com.artemchep.keyguard.ui.theme.combineAlpha +import com.artemchep.keyguard.ui.theme.monoFontFamily +import com.artemchep.keyguard.ui.totp.formatCode2 +import kotlinx.collections.immutable.PersistentList +import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.flatMapLatest +import kotlinx.coroutines.flow.flow +import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.flow.map +import kotlinx.datetime.Clock +import org.kodein.di.compose.rememberInstance +import kotlin.math.roundToInt + +private sealed interface VaultViewTotpItemBadgeState { + data object Loading : VaultViewTotpItemBadgeState + + data class Success( + val codes: PersistentList>, + val codeRaw: String, + val counter: Counter, + ) : VaultViewTotpItemBadgeState { + sealed interface Counter { + val text: String + } + + data class TimeBasedCounter( + val time: String, + val progress: Float, + ) : Counter { + override val text: String + get() = time + } + + data class IncrementBasedCounter( + val counter: String, + ) : Counter { + override val text: String + get() = counter + } + } +} + +@OptIn(ExperimentalLayoutApi::class) +@Composable +fun VaultViewTotpItem( + modifier: Modifier = Modifier, + item: VaultViewItem.Totp, +) { + val state by item.localStateFlow.collectAsState() + val dropdown = state.dropdown + FlatDropdown( + modifier = modifier, + elevation = item.elevation, + content = { + FlatItemTextContent2( + title = { + Text(item.title) + }, + text = { + FlowRow { + VaultViewTotpCodeContent( + totp = item.totp, + codes = state.codes, + ) + } + }, + ) + }, + leading = { + IconBox(main = Icons.Outlined.KeyguardTwoFa) + }, + trailing = { + VaultViewTotpBadge( + totpToken = item.totp, + ) + + val onCopyAction = remember(dropdown) { + dropdown + .firstNotNullOfOrNull { + val action = it as? FlatItemAction + action?.takeIf { it.type == FlatItemAction.Type.COPY } + } + } + if (onCopyAction != null) { + val onCopy = onCopyAction.onClick + Spacer(Modifier.width(16.dp)) + IconButton( + enabled = onCopy != null, + onClick = { + onCopy?.invoke() + }, + ) { + Icon( + imageVector = Icons.Outlined.ContentCopy, + contentDescription = null, + ) + } + } + }, + dropdown = dropdown, + ) +} + +@Composable +fun RowScope.VaultViewTotpBadge( + totpToken: TotpToken, +) { + val state by produceTotpCode( + totpToken = totpToken, + ) + + VaultViewTotpRemainderBadge( + state = state, + ) +} + +@Composable +fun VaultViewTotpBadge2( + modifier: Modifier = Modifier, + color: Color = Color.Unspecified, + copyText: CopyText, + totpToken: TotpToken, +) { + val state by produceTotpCode( + totpToken = totpToken, + ) + + Surface( + modifier = modifier + .padding(top = 8.dp), + color = color.takeIf { it.isSpecified } + ?: MaterialTheme.colorScheme.surface, + shape = MaterialTheme.shapes.small, + tonalElevation = 1.dp, + ) { + Row( + modifier = Modifier + .clickable(enabled = state is VaultViewTotpItemBadgeState.Success) { + val code = (state as? VaultViewTotpItemBadgeState.Success) + ?.codeRaw ?: return@clickable + copyText.copy(code, hidden = false) + } + .padding( + start = 8.dp, + end = 4.dp, + top = 4.dp, + bottom = 4.dp, + ), + ) { + VaultViewTotpCodeContent( + totp = totpToken, + codes = (state as? VaultViewTotpItemBadgeState.Success?) + ?.codes, + ) + + Spacer( + modifier = Modifier + .width(16.dp), + ) + + VaultViewTotpRemainderBadge( + state = state, + ) + } + } +} + +@Composable +private fun RowScope.VaultViewTotpCodeContent( + totp: TotpToken, + codes: PersistentList>?, +) { + val symbolColor = LocalContentColor.current + .combineAlpha(DisabledEmphasisAlpha) + if (codes == null) { + repeat(totp.digits) { index -> + if (index != 0 && index.rem(3) == 0) { + Spacer( + modifier = Modifier + .padding( + horizontal = 5.dp, + ) + .size(3.dp), + ) + } + Text( + text = " ", + fontFamily = monoFontFamily, + ) + } + return + } + codes.forEachIndexed { index, text -> + if (index > 0) { + Box( + modifier = Modifier + .padding( + horizontal = 5.dp, + ) + .size(3.dp) + .background(symbolColor, CircleShape) + .align(Alignment.CenterVertically), + ) + } + key(index) { + text.forEachIndexed { cpIndex, cpText -> + key(cpIndex) { + AnimatedContent( + modifier = Modifier + .align(Alignment.CenterVertically), + targetState = cpText, + transitionSpec = { + val from = this.initialState + if (from == " ") { + return@AnimatedContent EnterTransition.None togetherWith + ExitTransition.None + } + + val to = this.targetState + val currentFavorite = from > to + val enter = slideInVertically { + if (currentFavorite) -it else it + } + scaleIn() + val exit = slideOutVertically { + if (currentFavorite) it else -it + } + scaleOut() + enter togetherWith exit + }, + ) { text -> + Text( + text = text, + fontFamily = monoFontFamily, + ) + } + } + } + } + } +} + +// +// Remainder +// + +@Composable +private fun VaultViewTotpRemainderBadge( + state: VaultViewTotpItemBadgeState?, +) { + ExpandedIfNotEmptyForRow( + valueOrNull = state, + ) { + VaultViewTotpRemainderBadgeLayout( + state = it, + ) + } +} + +@Composable +private fun VaultViewTotpRemainderBadgeLayout( + state: VaultViewTotpItemBadgeState, +) { + val score = when (state) { + is VaultViewTotpItemBadgeState.Loading -> null + + is VaultViewTotpItemBadgeState.Success -> when (val counter = state.counter) { + is VaultViewTotpItemBadgeState.Success.TimeBasedCounter -> counter.progress.coerceIn( + 0f, + 1f, + ) + + is VaultViewTotpItemBadgeState.Success.IncrementBasedCounter -> null + } + } + AhContainer( + score = score + ?: 1f, + ) { + val time = (state as? VaultViewTotpItemBadgeState.Success)?.counter?.text.orEmpty() + VaultViewTotpRemainderBadgeContent( + progress = it.takeIf { score != null }, + text = time, + ) + } +} + +@Composable +private fun RowScope.VaultViewTotpRemainderBadgeContent( + progress: Float?, + text: String, +) { + val circularProgressModifier = Modifier.size(16.dp) + when (progress) { + null -> { + // Do nothing. + } + + else -> { + CircularProgressIndicator( + modifier = circularProgressModifier, + progress = progress, + color = LocalContentColor.current, + ) + Spacer(Modifier.width(4.dp)) + } + } + Spacer(Modifier.width(4.dp)) + Text( + modifier = Modifier + .animateContentSize(), + text = text, + fontFamily = monoFontFamily, + fontWeight = FontWeight.Bold, + style = MaterialTheme.typography.labelMedium, + ) + Spacer(Modifier.width(4.dp)) +} + +// +// State +// + +@Composable +private fun produceTotpCode( + totpToken: TotpToken, +): State { + val getTotpCode by rememberInstance() + return remember(totpToken) { + getTotpCode(totpToken) + .flatMapLatest { + // Format the totp code, so it's easier to + // read for the user. + val codes = it.formatCode2() + when (val counter = it.counter) { + is TotpCode.TimeBasedCounter -> flow { + while (true) { + val now = Clock.System.now() + val totalDuration = counter.duration + val remainingDuration = counter.expiration - now + val elapsedDuration = totalDuration - remainingDuration + + val time = remainingDuration + .inWholeMilliseconds + .toFloat() + .div(1000F) + .roundToInt() + .coerceAtLeast(0) + .toString() + val progress = + 1f - elapsedDuration.inWholeSeconds.toFloat() / totalDuration.inWholeSeconds.toFloat() + val c = VaultViewTotpItemBadgeState.Success.TimeBasedCounter( + time = time, + progress = progress, + ) + val s = VaultViewTotpItemBadgeState.Success( + codes = codes, + codeRaw = it.code, + counter = c, + ) + emit(s) + + val dt = remainingDuration + .inWholeMilliseconds + .rem(1000L) + delay(dt + 1L) + } + } + + is TotpCode.IncrementBasedCounter -> { + val c = VaultViewTotpItemBadgeState.Success.IncrementBasedCounter( + counter = counter.counter.toString(), + ) + val s = VaultViewTotpItemBadgeState.Success( + codes = codes, + codeRaw = it.code, + counter = c, + ) + flowOf(s) + } + } + + } + .attempt() + .map { either -> + either + .getOrElse { + null + } + } + }.collectAsState(initial = VaultViewTotpItemBadgeState.Loading) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewUriItem.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewUriItem.kt new file mode 100644 index 00000000..4700a6fa --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewUriItem.kt @@ -0,0 +1,134 @@ +package com.artemchep.keyguard.feature.home.vault.component + +import androidx.compose.foundation.background +import androidx.compose.foundation.border +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.layout.widthIn +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Warning +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.feature.home.vault.model.VaultViewItem +import com.artemchep.keyguard.ui.DisabledEmphasisAlpha +import com.artemchep.keyguard.ui.ExpandedIfNotEmpty +import com.artemchep.keyguard.ui.ExpandedIfNotEmptyForRow +import com.artemchep.keyguard.ui.FlatDropdown +import com.artemchep.keyguard.ui.FlatItemTextContent +import com.artemchep.keyguard.ui.theme.combineAlpha +import com.artemchep.keyguard.ui.theme.warning +import com.artemchep.keyguard.ui.theme.warningContainer +import com.artemchep.keyguard.ui.util.DividerColor + +@Composable +fun VaultViewUriItem( + modifier: Modifier = Modifier, + item: VaultViewItem.Uri, +) { + FlatDropdown( + modifier = modifier, + leading = { + item.icon() + }, + content = { + FlatItemTextContent( + title = { + Text( + text = item.title, + overflow = TextOverflow.Ellipsis, + maxLines = 5, + ) + }, + text = if (item.text != null) { + // composable + { + Text( + text = item.text, + overflow = TextOverflow.Ellipsis, + maxLines = 5, + ) + } + } else { + null + }, + ) + ExpandedIfNotEmpty( + item.warningTitle, + ) { warningTitle -> + val contentColor = MaterialTheme.colorScheme.warning + val backgroundColor = MaterialTheme.colorScheme.warningContainer + .combineAlpha(DisabledEmphasisAlpha) + Row( + modifier = Modifier + .padding( + top = 4.dp, + ) + .background( + backgroundColor, + MaterialTheme.shapes.small, + ) + .padding( + start = 4.dp, + top = 4.dp, + bottom = 4.dp, + end = 4.dp, + ), + verticalAlignment = Alignment.CenterVertically, + ) { + Icon( + modifier = Modifier + .size(14.dp), + imageVector = Icons.Outlined.Warning, + contentDescription = null, + tint = contentColor, + ) + Spacer(modifier = Modifier.width(4.dp)) + Text( + modifier = Modifier, + text = warningTitle, + style = MaterialTheme.typography.labelMedium, + ) + } + } + }, + trailing = { + ExpandedIfNotEmptyForRow( + item.matchTypeTitle, + ) { matchTypeTitle -> + Text( + modifier = Modifier + .widthIn(max = 128.dp) + .padding( + top = 8.dp, + bottom = 8.dp, + ) + .border( + Dp.Hairline, + DividerColor, + MaterialTheme.shapes.small, + ) + .padding( + horizontal = 8.dp, + vertical = 4.dp, + ), + text = matchTypeTitle, + style = MaterialTheme.typography.labelSmall, + textAlign = TextAlign.End, + maxLines = 2, + ) + } + }, + dropdown = item.dropdown, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewValueItem.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewValueItem.kt new file mode 100644 index 00000000..aea56153 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/component/VaultViewValueItem.kt @@ -0,0 +1,209 @@ +package com.artemchep.keyguard.feature.home.vault.component + +import androidx.compose.animation.animateContentSize +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.ColumnScope +import androidx.compose.foundation.layout.ExperimentalLayoutApi +import androidx.compose.foundation.layout.FlowRow +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.height +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.ContentCopy +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.LocalTextStyle +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.alpha +import androidx.compose.ui.text.AnnotatedString +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.feature.auth.common.VisibilityToggle +import com.artemchep.keyguard.feature.home.vault.model.VaultViewItem +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatDropdown +import com.artemchep.keyguard.ui.FlatItemAction +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.animatedConcealedText +import com.artemchep.keyguard.ui.colorizePassword +import com.artemchep.keyguard.ui.theme.combineAlpha +import com.artemchep.keyguard.ui.theme.monoFontFamily +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.flow.MutableSharedFlow + +@OptIn(ExperimentalLayoutApi::class) +@Composable +fun VaultViewValueItem( + modifier: Modifier = Modifier, + item: VaultViewItem.Value, +) { + val contentColor = LocalContentColor.current + val value = remember(item.value, item.colorize, contentColor) { + if (item.colorize) { + colorizePassword( + password = item.value, + contentColor = contentColor, + ) + } else { + AnnotatedString(item.value) + } + } + + val updatedVerify by rememberUpdatedState(item.verify) + val visibilityState = remember( + item.private, + item.hidden, + ) { mutableStateOf(!item.private && !item.hidden) } + FlatDropdown( + modifier = modifier, + elevation = item.elevation, + content = { + val shownValue = animatedConcealedText( + text = value, + concealed = !visibilityState.value, + ) + + FlatItemTextContent2( + title = if (!item.title.isNullOrBlank()) { + // composable + { + Text(item.title) + } + } else { + null + }, + text = if (shownValue.isNotBlank()) { + // composable + { + Text( + modifier = Modifier + .animateContentSize(), + text = shownValue, + fontFamily = if (item.monospace) monoFontFamily else null, + ) + } + } else { + // composable + { + Text( + modifier = Modifier + .animateContentSize() + .alpha(MediumEmphasisAlpha), + text = stringResource(Res.strings.empty_value), + fontFamily = if (item.monospace) monoFontFamily else null, + ) + } + }, + ) + + if (item.badge != null || item.badge2.isNotEmpty()) { + Spacer( + modifier = Modifier + .height(4.dp), + ) + FlowRow( + verticalArrangement = Arrangement.spacedBy(8.dp), + horizontalArrangement = Arrangement.spacedBy(8.dp), + ) { + if (item.badge != null) { + com.artemchep.keyguard.ui.Ah( + score = item.badge.score, + text = item.badge.text, + ) + } + item.badge2.forEach { + val s = it.collectAsState() + val v = s.value + if (v != null) { + com.artemchep.keyguard.ui.Ah( + score = v.score, + text = v.text, + ) + } + } + } + } + }, + dropdown = item.dropdown, + leading = item.leading, + trailing = { + if (item.private && !item.hidden) { + VisibilityToggle( + visible = visibilityState.value, + onVisibleChange = { shouldBeConcealed -> + val verify = updatedVerify + if ( + verify != null && + shouldBeConcealed + ) { + verify.invoke { + visibilityState.value = true + } + return@VisibilityToggle + } + + visibilityState.value = shouldBeConcealed + }, + ) + } + val sharedFLow = MutableSharedFlow() + sharedFLow.tryEmit(Unit) + val onCopyAction = remember(item.dropdown) { + item.dropdown + .firstNotNullOfOrNull { + val action = it as? FlatItemAction + action?.takeIf { it.type == FlatItemAction.Type.COPY } + } + } + if (onCopyAction != null) { + val onCopy = onCopyAction.onClick + IconButton( + enabled = onCopy != null, + onClick = { + onCopy?.invoke() + }, + ) { + Icon( + imageVector = Icons.Outlined.ContentCopy, + contentDescription = null, + ) + } + } + + item.trailing?.invoke(this) + }, + ) +} + +@Composable +fun ColumnScope.FlatItemTextContent2( + title: (@Composable () -> Unit)? = null, + text: (@Composable () -> Unit)? = null, +) { + if (title != null) { + CompositionLocalProvider( + LocalTextStyle provides MaterialTheme.typography.labelMedium + .let { + val color = LocalContentColor.current.combineAlpha(alpha = MediumEmphasisAlpha) + it.copy(color = color) + }, + ) { + title() + } + } + if (text != null) { + CompositionLocalProvider( + LocalTextStyle provides MaterialTheme.typography.bodyLarge, + ) { + text() + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/folders/FoldersRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/folders/FoldersRoute.kt new file mode 100644 index 00000000..6808e074 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/folders/FoldersRoute.kt @@ -0,0 +1,21 @@ +package com.artemchep.keyguard.feature.home.vault.folders + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.common.model.DFilter +import com.artemchep.keyguard.feature.navigation.Route + +data class FoldersRoute( + val args: Args, +) : Route { + data class Args( + val filter: DFilter? = null, + val empty: Boolean = false, + ) + + @Composable + override fun Content() { + FoldersScreen( + args = args, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/folders/FoldersScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/folders/FoldersScreen.kt new file mode 100644 index 00000000..c4736d75 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/folders/FoldersScreen.kt @@ -0,0 +1,252 @@ +@file:OptIn(ExperimentalMaterial3Api::class) + +package com.artemchep.keyguard.feature.home.vault.folders + +import androidx.compose.foundation.ExperimentalFoundationApi +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.lazy.items +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.CreateNewFolder +import androidx.compose.material.icons.outlined.FolderOff +import androidx.compose.material3.Checkbox +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.LocalAbsoluteTonalElevation +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.runtime.Composable +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.alpha +import androidx.compose.ui.input.nestedscroll.nestedScroll +import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.feature.EmptyView +import com.artemchep.keyguard.feature.home.vault.component.Section +import com.artemchep.keyguard.feature.home.vault.component.surfaceColorAtElevationSemi +import com.artemchep.keyguard.feature.navigation.NavigationIcon +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.AhLayout +import com.artemchep.keyguard.ui.DefaultFab +import com.artemchep.keyguard.ui.DefaultSelection +import com.artemchep.keyguard.ui.ExpandedIfNotEmptyForRow +import com.artemchep.keyguard.ui.FabState +import com.artemchep.keyguard.ui.FlatDropdown +import com.artemchep.keyguard.ui.FlatItemTextContent +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.ScaffoldLazyColumn +import com.artemchep.keyguard.ui.animatedNumberText +import com.artemchep.keyguard.ui.icons.OfflineIcon +import com.artemchep.keyguard.ui.skeleton.SkeletonItemPilled +import com.artemchep.keyguard.ui.theme.combineAlpha +import com.artemchep.keyguard.ui.toolbar.LargeToolbar +import dev.icerock.moko.resources.compose.stringResource + +@Composable +fun FoldersScreen( + args: FoldersRoute.Args, +) { + val state = foldersScreenState( + args = args, + ) + FoldersScreenContent( + state = state, + ) +} + +@OptIn(ExperimentalMaterial3Api::class, ExperimentalFoundationApi::class) +@Composable +fun FoldersScreenContent( + state: FoldersState, +) { + val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior() + ScaffoldLazyColumn( + modifier = Modifier + .nestedScroll(scrollBehavior.nestedScrollConnection), + topAppBarScrollBehavior = scrollBehavior, + topBar = { + LargeToolbar( + title = { + Column { + Text( + text = stringResource(Res.strings.account), + style = MaterialTheme.typography.labelSmall, + color = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + overflow = TextOverflow.Ellipsis, + maxLines = 2, + ) + Text( + text = stringResource(Res.strings.folders), + style = MaterialTheme.typography.titleMedium, + overflow = TextOverflow.Ellipsis, + maxLines = 1, + ) + } + }, + navigationIcon = { + NavigationIcon() + }, + scrollBehavior = scrollBehavior, + ) + }, + floatingActionState = run { + val fabOnClick = state.onAdd + val fabState = if (fabOnClick != null) { + FabState( + onClick = fabOnClick, + model = null, + ) + } else { + null + } + rememberUpdatedState(newValue = fabState) + }, + floatingActionButton = { + DefaultFab( + icon = { + Icon( + imageVector = Icons.Outlined.CreateNewFolder, + contentDescription = null, + ) + }, + text = { + Text( + text = stringResource(Res.strings.folder_new), + ) + }, + ) + }, + bottomBar = { + DefaultSelection( + state = state.selection, + ) + }, + ) { + when (val contentState = state.content) { + is Loadable.Loading -> { + for (i in 1..3) { + item("skeleton.$i") { + SkeletonItemPilled() + } + } + } + + is Loadable.Ok -> { + val items = contentState.value.items + if (items.isEmpty()) { + item("empty") { + EmptyView( + icon = { + Icon(Icons.Outlined.FolderOff, null) + }, + text = { + Text( + text = stringResource(Res.strings.folders_empty_label), + ) + }, + ) + } + } + + items( + items = items, + key = { it.key }, + ) { + FoldersScreenItem( + modifier = Modifier + .animateItemPlacement(), + item = it, + ) + } + } + } + } +} + +@Composable +private fun FoldersScreenItem( + modifier: Modifier = Modifier, + item: FoldersState.Content.Item, +) = when (item) { + is FoldersState.Content.Item.Section -> FoldersScreenSectionItem(modifier, item) + is FoldersState.Content.Item.Folder -> FoldersScreenFolderItem(modifier, item) +} + +@Composable +private fun FoldersScreenSectionItem( + modifier: Modifier = Modifier, + item: FoldersState.Content.Item.Section, +) { + Section( + modifier = modifier, + text = item.text, + ) +} + +@Composable +private fun FoldersScreenFolderItem( + modifier: Modifier = Modifier, + item: FoldersState.Content.Item.Folder, +) { + val backgroundColor = + if (item.selected) MaterialTheme.colorScheme.primaryContainer else MaterialTheme.colorScheme.surface + FlatDropdown( + modifier = modifier, + backgroundColor = backgroundColor, + dropdown = item.actions, + leading = { + val pillElevation = LocalAbsoluteTonalElevation.current + 8.dp + val pillColor = MaterialTheme.colorScheme + .surfaceColorAtElevationSemi(elevation = pillElevation) + AhLayout( + modifier = modifier, + backgroundColor = pillColor, + ) { + val text = animatedNumberText(item.ciphers) + Text(text) + } + }, + content = { + FlatItemTextContent( + title = { + Text(item.title) + }, + text = if (item.text != null) { + // composable + { + Text(item.text) + } + } else { + null + }, + ) + }, + trailing = { + ExpandedIfNotEmptyForRow( + Unit.takeUnless { item.synced }, + modifier = Modifier + .alpha(LocalContentColor.current.alpha), + ) { + OfflineIcon( + modifier = Modifier + .padding(end = 8.dp), + ) + } + ExpandedIfNotEmptyForRow( + item.selected.takeIf { item.selecting }, + ) { selected -> + Checkbox( + checked = selected, + onCheckedChange = null, + ) + } + }, + onClick = item.onClick, + onLongClick = item.onLongClick, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/folders/FoldersState.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/folders/FoldersState.kt new file mode 100644 index 00000000..4cadce3a --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/folders/FoldersState.kt @@ -0,0 +1,51 @@ +package com.artemchep.keyguard.feature.home.vault.folders + +import androidx.compose.runtime.Immutable +import androidx.compose.ui.graphics.vector.ImageVector +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.ui.ContextItem +import com.artemchep.keyguard.ui.Selection +import kotlinx.collections.immutable.ImmutableList + +/** + * @author Artem Chepurnyi + */ +@Immutable +data class FoldersState( + val selection: Selection? = null, + val content: Loadable = Loadable.Loading, + val onAdd: (() -> Unit)? = null, +) { + @Immutable + data class Content( + val items: ImmutableList, + ) { + + @Immutable + sealed interface Item { + val key: String + + @Immutable + data class Section( + override val key: String, + val text: String? = null, + ) : Item + + @Immutable + data class Folder( + override val key: String, + val title: String, + val text: String? = null, + val ciphers: Int, + val selecting: Boolean, + val selected: Boolean, + val synced: Boolean, + val failed: Boolean, + val icon: ImageVector? = null, + val actions: ImmutableList, + val onClick: (() -> Unit)?, + val onLongClick: (() -> Unit)?, + ) : Item + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/folders/FoldersStateProducer.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/folders/FoldersStateProducer.kt new file mode 100644 index 00000000..b384e528 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/folders/FoldersStateProducer.kt @@ -0,0 +1,506 @@ +package com.artemchep.keyguard.feature.home.vault.folders + +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Delete +import androidx.compose.material.icons.outlined.Edit +import androidx.compose.material.icons.outlined.Merge +import androidx.compose.runtime.Composable +import arrow.core.partially1 +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.model.AccountId +import com.artemchep.keyguard.common.model.DFilter +import com.artemchep.keyguard.common.model.DFolder +import com.artemchep.keyguard.common.model.DSecret +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.usecase.AddFolder +import com.artemchep.keyguard.common.usecase.GetCanWrite +import com.artemchep.keyguard.common.usecase.GetCiphers +import com.artemchep.keyguard.common.usecase.GetFolders +import com.artemchep.keyguard.common.usecase.MergeFolderById +import com.artemchep.keyguard.common.usecase.RemoveFolderById +import com.artemchep.keyguard.common.usecase.RenameFolderById +import com.artemchep.keyguard.core.store.bitwarden.exists +import com.artemchep.keyguard.feature.confirmation.ConfirmationResult +import com.artemchep.keyguard.feature.confirmation.ConfirmationRoute +import com.artemchep.keyguard.feature.confirmation.createConfirmationDialogIntent +import com.artemchep.keyguard.feature.home.vault.VaultRoute +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.feature.navigation.registerRouteResultReceiver +import com.artemchep.keyguard.feature.navigation.state.produceScreenState +import com.artemchep.keyguard.provider.bitwarden.usecase.util.canDelete +import com.artemchep.keyguard.provider.bitwarden.usecase.util.canEdit +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItemAction +import com.artemchep.keyguard.ui.Selection +import com.artemchep.keyguard.ui.buildContextItems +import com.artemchep.keyguard.ui.icons.ChevronIcon +import com.artemchep.keyguard.ui.icons.KeyguardCipher +import com.artemchep.keyguard.ui.icons.icon +import com.artemchep.keyguard.ui.selection.selectionHandle +import kotlinx.collections.immutable.toImmutableList +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.shareIn +import org.kodein.di.DirectDI +import org.kodein.di.compose.localDI +import org.kodein.di.direct +import org.kodein.di.instance + +@Composable +fun foldersScreenState( + args: FoldersRoute.Args, +) = with(localDI().direct) { + foldersScreenState( + args = args, + directDI = this, + getFolders = instance(), + getCiphers = instance(), + getCanWrite = instance(), + addFolder = instance(), + mergeFolderById = instance(), + removeFolderById = instance(), + renameFolderById = instance(), + ) +} + +@Composable +fun foldersScreenState( + args: FoldersRoute.Args, + directDI: DirectDI, + getFolders: GetFolders, + getCiphers: GetCiphers, + getCanWrite: GetCanWrite, + addFolder: AddFolder, + mergeFolderById: MergeFolderById, + removeFolderById: RemoveFolderById, + renameFolderById: RenameFolderById, +): FoldersState = produceScreenState( + key = "folders", + initial = FoldersState(), + args = arrayOf( + args, + getFolders, + getCiphers, + getCanWrite, + addFolder, + mergeFolderById, + removeFolderById, + renameFolderById, + ), +) { + data class FolderWithCiphers( + val folder: DFolder, + val ciphers: List, + ) + + val foldersComparator = Comparator { a: DFolder, b: DFolder -> + a.name.compareTo(b.name, ignoreCase = true) + } + val foldersFilter = args.filter ?: DFilter.All + val foldersFlow = getFolders() + .map { folders -> + val predicate = foldersFilter.prepareFolders(directDI, folders) + folders + .filter { predicate(it) } + .sortedWith(foldersComparator) + } + .shareIn(screenScope, SharingStarted.Lazily, replay = 1) + val foldersWithCiphersFolder = getCiphers() + .map { ciphers -> + ciphers + .filter { it.deletedDate == null } + .groupBy { it.folderId } + } + .combine(foldersFlow) { ciphersByFolder, folders -> + folders + .map { folder -> + val ciphers = ciphersByFolder[folder.id].orEmpty() + FolderWithCiphers( + folder = folder, + ciphers = ciphers, + ) + } + .run { + if (args.empty) { + filter { it.ciphers.isEmpty() } + } else { + this + } + } + } + + val selectionHandle = selectionHandle("selection") + val selectedFoldersWithCiphersFlow = foldersWithCiphersFolder + .combine(selectionHandle.idsFlow) { foldersWithCiphers, selectedFolderIds -> + selectedFolderIds + .mapNotNull { selectedFolderId -> + val folderWithCiphers = foldersWithCiphers + .firstOrNull { it.folder.id == selectedFolderId } + ?: return@mapNotNull null + selectedFolderId to folderWithCiphers + } + .toMap() + } + .distinctUntilChanged() + .shareIn(screenScope, SharingStarted.Lazily, replay = 1) + + val accountId = DFilter + .findOne(foldersFilter) { f -> + f.what == DFilter.ById.What.ACCOUNT + } + ?.id + + fun onAdd() { + accountId + ?: // Should not happen, we should not + // call this function if the account id + // is null. + return + val intent = createConfirmationDialogIntent( + item = ConfirmationRoute.Args.Item.StringItem( + key = "name", + title = "Folder name", + // Folder must have a non-empty name! + canBeEmpty = false, + ), + title = "Create a folder", + ) { name -> + val accountIdsToNames = mapOf( + AccountId(accountId) to name, + ) + addFolder(accountIdsToNames) + .launchIn(appScope) + } + navigate(intent) + } + + fun onRename( + folders: List, + ) { + val route = registerRouteResultReceiver( + route = ConfirmationRoute( + args = ConfirmationRoute.Args( + icon = icon(Icons.Outlined.Edit), + title = if (folders.size > 1) { + translate(Res.strings.folder_action_change_names_title) + } else { + translate(Res.strings.folder_action_change_name_title) + }, + items = folders + .sortedBy { it.name } + .map { folder -> + ConfirmationRoute.Args.Item.StringItem( + key = folder.id, + value = folder.name, + title = folder.name, + type = ConfirmationRoute.Args.Item.StringItem.Type.Text, + canBeEmpty = false, + ) + }, + ), + ), + ) { + if (it is ConfirmationResult.Confirm) { + val folderIdsToNames = it.data + .mapValues { it.value as String } + renameFolderById(folderIdsToNames) + .launchIn(appScope) + } + } + val intent = NavigationIntent.NavigateToRoute(route) + navigate(intent) + } + + fun onMerge( + folderName: String, + folderIds: Set, + ) { + val folderNameKey = "folder_name" + val folderNameItem = ConfirmationRoute.Args.Item.StringItem( + key = folderNameKey, + value = folderName, + title = "Folder name", + type = ConfirmationRoute.Args.Item.StringItem.Type.Text, + canBeEmpty = false, + ) + + val route = registerRouteResultReceiver( + route = ConfirmationRoute( + args = ConfirmationRoute.Args( + icon = icon(Icons.Outlined.Merge), + title = "Are you sure you want to merge these folders?", + items = listOfNotNull( + folderNameItem, + ), + ), + ), + ) { result -> + if (result is ConfirmationResult.Confirm) { + selectionHandle.clearSelection() + + val name = result.data[folderNameKey] as String + mergeFolderById(folderIds, name) + .launchIn(appScope) + } + } + val intent = NavigationIntent.NavigateToRoute(route) + navigate(intent) + } + + fun onDelete( + folderIds: Set, + /** + * `true` if any of the folders contain ciphers in it, + * `false` otherwise. + */ + hasCiphers: Boolean, + ) { + val cascadeRemoveKey = "cascade_remove" + val cascadeRemoveItem = if (hasCiphers) { + ConfirmationRoute.Args.Item.BooleanItem( + key = cascadeRemoveKey, + title = translate(Res.strings.ciphers_action_cascade_trash_associated_items_title), + ) + } else { + null + } + + val route = registerRouteResultReceiver( + route = ConfirmationRoute( + args = ConfirmationRoute.Args( + icon = icon(Icons.Outlined.Delete), + title = if (folderIds.size > 1) { + translate(Res.strings.folder_delete_many_confirmation_title) + } else { + translate(Res.strings.folder_delete_one_confirmation_title) + }, + message = translate(Res.strings.folder_delete_confirmation_text), + items = listOfNotNull( + cascadeRemoveItem, + ), + ), + ), + ) { result -> + if (result is ConfirmationResult.Confirm) { + selectionHandle.clearSelection() + + val onCiphersConflict = kotlin.run { + val shouldRemoveAssociatedCiphers = result.data[cascadeRemoveKey] == true + if (shouldRemoveAssociatedCiphers) { + RemoveFolderById.OnCiphersConflict.TRASH + } else { + RemoveFolderById.OnCiphersConflict.IGNORE + } + } + removeFolderById(folderIds, onCiphersConflict) + .launchIn(appScope) + } + } + val intent = NavigationIntent.NavigateToRoute(route) + navigate(intent) + } + + val selectionFlow = combine( + foldersFlow + .map { folders -> + folders + .map { it.id } + .toSet() + } + .distinctUntilChanged(), + selectedFoldersWithCiphersFlow, + getCanWrite(), + ) { folderIds, selectedFolders, canWrite -> + if (selectedFolders.isEmpty()) { + return@combine null + } + + val selectedFolderIds = selectedFolders.keys + // Find folders that have some limitations + val hasCanNotEditFolders = selectedFolders.values + .any { !it.folder.service.canEdit() } + val hasCanNotDeleteFolders = selectedFolders.values + .any { !it.folder.service.canDelete() } + + val canEdit = canWrite && !hasCanNotEditFolders + val canDelete = canWrite && !hasCanNotDeleteFolders + + val actions = buildContextItems { + section { + // An option to view all the items that belong + // to these folders. + val ciphersCount = selectedFolders + .asSequence() + .flatMap { it.value.ciphers } + .distinct() + .count() + if (ciphersCount > 0) { + this += FlatItemAction( + icon = Icons.Outlined.KeyguardCipher, + title = translate(Res.strings.items), + trailing = { + ChevronIcon() + }, + onClick = { + val folders = selectedFolders.values + .map { it.folder } + val route = VaultRoute.by( + translator = this@produceScreenState, + folders = folders, + ) + val intent = NavigationIntent.NavigateToRoute(route) + navigate(intent) + }, + ) + } + } + section { + if (canEdit) { + this += FlatItemAction( + icon = Icons.Outlined.Edit, + title = translate(Res.strings.rename), + onClick = { + val folders = selectedFolders.values + .map { it.folder } + onRename(folders) + }, + ) + if (selectedFolders.size > 1) { + val folderAccountId = selectedFolders.values.first().folder.accountId + val singleAccount = selectedFolders + .any { it.value.folder.accountId == folderAccountId } + if (singleAccount) { + val folderName = + selectedFolders.values.maxBy { it.ciphers.size }.folder.name + this += FlatItemAction( + icon = Icons.Outlined.Merge, + title = "Merge into…", + onClick = ::onMerge + .partially1(folderName) + .partially1(selectedFolderIds), + ) + } + } + } + if (canDelete) { + val hasCiphers = selectedFolders.any { it.value.ciphers.isNotEmpty() } + this += FlatItemAction( + icon = Icons.Outlined.Delete, + title = translate(Res.strings.delete), + onClick = ::onDelete + .partially1(selectedFolderIds) + .partially1(hasCiphers), + ) + } + } + } + + Selection( + count = selectedFolders.size, + actions = actions.toImmutableList(), + onSelectAll = selectionHandle::setSelection + .partially1(folderIds) + .takeIf { + folderIds.size > selectedFolderIds.size + }, + onClear = selectionHandle::clearSelection, + ) + } + val contentFlow = combine( + foldersWithCiphersFolder, + selectedFoldersWithCiphersFlow, + getCanWrite(), + ) { foldersWithCiphers, selectedFolderIds, canWrite -> + val selecting = selectedFolderIds.isNotEmpty() + val items = foldersWithCiphers + .map { folderWithCiphers -> + val folder = folderWithCiphers.folder + val ciphers = folderWithCiphers.ciphers + val selected = folder.id in selectedFolderIds + + val canEdit = canWrite && folder.service.canEdit() + val canDelete = canWrite && folder.service.canDelete() + + val actions = buildContextItems { + section { + // An option to view all the items that belong + // to this cipher. + if (!folder.deleted && ciphers.isNotEmpty()) { + this += FlatItemAction( + icon = Icons.Outlined.KeyguardCipher, + title = translate(Res.strings.items), + trailing = { + ChevronIcon() + }, + onClick = { + val route = VaultRoute.by( + translator = this@produceScreenState, + folder = folder, + ) + val intent = NavigationIntent.NavigateToRoute(route) + navigate(intent) + }, + ) + } + } + section { + if (!folder.deleted && canEdit) { + this += FlatItemAction( + icon = Icons.Outlined.Edit, + title = translate(Res.strings.rename), + onClick = ::onRename + .partially1(listOf(folder)), + ) + } + if (!folder.deleted && canDelete) { + this += FlatItemAction( + icon = Icons.Outlined.Delete, + title = translate(Res.strings.delete), + onClick = ::onDelete + .partially1(setOf(folder.id)) + .partially1(folderWithCiphers.ciphers.isNotEmpty()), + ) + } + } + } + FoldersState.Content.Item.Folder( + key = folder.id, + title = folder.name, + ciphers = folderWithCiphers.ciphers.size, + selecting = selecting, + selected = selected, + synced = folder.synced, + failed = folder.service.error.exists(folder.revisionDate), + actions = actions.toImmutableList(), + onClick = if (!folder.deleted && selecting) { + // lambda + selectionHandle::toggleSelection.partially1(folder.id) + } else { + null + }, + onLongClick = if (folder.deleted || selecting) { + null + } else { + // lambda + selectionHandle::toggleSelection.partially1(folder.id) + }, + ) + } + .toImmutableList() + FoldersState.Content( + items = items, + ) + } + combine( + selectionFlow, + contentFlow, + ) { selection, content -> + FoldersState( + selection = selection, + content = Loadable.Ok(content), + onAdd = ::onAdd.takeUnless { selection != null || accountId == null }, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/model/FilterItem.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/model/FilterItem.kt new file mode 100644 index 00000000..a3494d62 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/model/FilterItem.kt @@ -0,0 +1,42 @@ +package com.artemchep.keyguard.feature.home.vault.model + +import androidx.compose.runtime.Composable +import arrow.optics.optics +import com.artemchep.keyguard.common.model.DFilter +import com.artemchep.keyguard.feature.search.filter.model.FilterItemModel + +@optics +sealed interface FilterItem : FilterItemModel { + companion object + + val sectionId: String + + data class Section( + override val sectionId: String, + override val text: String, + override val expanded: Boolean = true, + override val onClick: () -> Unit, + ) : FilterItem, FilterItemModel.Section { + companion object; + + override val id: String = sectionId + } + + data class Item( + override val sectionId: String, + val filterSectionId: String, + val filters: Set, + override val checked: Boolean, + override val fill: Boolean, + override val indent: Int = 0, + override val leading: (@Composable () -> Unit)?, + override val title: String, + override val text: String?, + override val onClick: (() -> Unit)?, + ) : FilterItem, FilterItemModel.Item { + companion object; + + override val id: String = + sectionId + "|" + filterSectionId + "|" + filters.joinToString(separator = ",") { it.key } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/model/SortItem.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/model/SortItem.kt new file mode 100644 index 00000000..b9ebf905 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/model/SortItem.kt @@ -0,0 +1,28 @@ +package com.artemchep.keyguard.feature.home.vault.model + +import androidx.compose.ui.graphics.vector.ImageVector +import arrow.optics.optics +import com.artemchep.keyguard.feature.home.vault.screen.ComparatorHolder +import com.artemchep.keyguard.feature.localization.TextHolder +import com.artemchep.keyguard.feature.search.sort.model.SortItemModel + +@optics +sealed interface SortItem : SortItemModel { + companion object; + + data class Section( + override val id: String, + override val text: TextHolder? = null, + ) : SortItem, SortItemModel.Section { + companion object + } + + data class Item( + override val id: String, + val config: ComparatorHolder, + override val icon: ImageVector? = null, + override val title: TextHolder, + override val checked: Boolean, + override val onClick: (() -> Unit)? = null, + ) : SortItem, SortItemModel.Item +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/model/VaultItem.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/model/VaultItem.kt new file mode 100644 index 00000000..0628c27e --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/model/VaultItem.kt @@ -0,0 +1,157 @@ +package com.artemchep.keyguard.feature.home.vault.model + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.Immutable +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.text.AnnotatedString +import arrow.optics.optics +import com.artemchep.keyguard.common.model.DSecret +import com.artemchep.keyguard.common.model.PasswordStrength +import com.artemchep.keyguard.common.model.TotpToken +import com.artemchep.keyguard.common.usecase.CopyText +import com.artemchep.keyguard.feature.attachments.SelectableItemState +import com.artemchep.keyguard.feature.localization.TextHolder +import com.artemchep.keyguard.ui.FlatItemAction +import com.artemchep.keyguard.ui.icons.AccentColors +import kotlinx.collections.immutable.ImmutableList +import kotlinx.coroutines.flow.StateFlow +import kotlinx.datetime.Instant +import java.util.UUID + +@Immutable +@optics +sealed interface VaultItem2 { + companion object + + val id: String + + @Immutable + data class QuickFilters( + override val id: String, + val items: ImmutableList, + ) : VaultItem2 { + companion object; + + data class Item( + val key: String = UUID.randomUUID().toString(), + val leading: (@Composable () -> Unit)? = null, + val imageVector: ImageVector? = null, + val title: String, + val selected: Boolean = false, + val primary: Boolean = false, + val onClick: (() -> Unit)? = null, + ) + } + + @Immutable + data class Button( + override val id: String, + val title: String, + val leading: (@Composable () -> Unit)? = null, + val onClick: (() -> Unit)? = null, + ) : VaultItem2 { + companion object; + } + + @Immutable + data object NoSuggestions : VaultItem2 { + override val id: String get() = "vault_item:no_suggestions" + } + + @Immutable + data object NoItems : VaultItem2 { + override val id: String get() = "vault_item:no_items" + } + + @Immutable + data class Section( + override val id: String = UUID.randomUUID().toString(), + val text: TextHolder? = null, + val caps: Boolean = true, + ) : VaultItem2 { + companion object + } + + @Immutable + data class Item( + override val id: String, + val source: DSecret, + val accentLight: Color, + val accentDark: Color, + val tag: String? = source.accountId, + val accountId: String, + val groupId: String?, + val revisionDate: Instant, + val createdDate: Instant?, + val password: String?, + val passwordRevisionDate: Instant?, + val score: PasswordStrength?, + val type: String, + val folderId: String?, + val icon: VaultItemIcon, + val feature: Feature, + val copyText: CopyText, + val token: TotpToken?, + val passkeys: ImmutableList, + /** + * The name of the item. + */ + val title: AnnotatedString, + val text: String?, + val favourite: Boolean, + val attachments: Boolean, + // + val action: Action, + val localStateFlow: StateFlow, + ) : VaultItem2 { + companion object; + + @Immutable + data class LocalState( + val openedState: OpenedState, + val selectableItemState: SelectableItemState, + ) + + @Immutable + data class OpenedState( + val isOpened: Boolean, + ) + + @Immutable + sealed interface Action { + @Immutable + data class Dropdown( + val actions: List, + ) : Action + + @Immutable + data class Go( + val onClick: () -> Unit, + ) : Action + } + + @Immutable + data class Passkey( + val source: DSecret.Login.Fido2Credentials, + val onClick: () -> Unit, + ) + + @Immutable + sealed interface Feature { + @Immutable + data object None : Feature + + @Immutable + data class Totp( + val token: TotpToken, + ) : Feature + + @Immutable + data class Organization( + val name: String, + val accentColors: AccentColors, + ) : Feature + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/model/VaultItemIcon.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/model/VaultItemIcon.kt new file mode 100644 index 00000000..d0edf288 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/model/VaultItemIcon.kt @@ -0,0 +1,37 @@ +package com.artemchep.keyguard.feature.home.vault.model + +import androidx.compose.runtime.Immutable +import androidx.compose.ui.graphics.vector.ImageVector +import com.artemchep.keyguard.feature.favicon.AppIconUrl +import com.artemchep.keyguard.feature.favicon.FaviconUrl +import dev.icerock.moko.resources.ImageResource + +@Immutable +sealed interface VaultItemIcon { + @Immutable + data class AppIcon( + val data: AppIconUrl, + val fallback: VaultItemIcon?, + ) : VaultItemIcon + + @Immutable + data class WebsiteIcon( + val data: FaviconUrl, + val fallback: VaultItemIcon?, + ) : VaultItemIcon + + @Immutable + data class VectorIcon( + val imageVector: ImageVector, + ) : VaultItemIcon + + @Immutable + data class ImageIcon( + val imageRes: ImageResource, + ) : VaultItemIcon + + @Immutable + data class TextIcon( + val text: String, + ) : VaultItemIcon +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/model/VaultPasswordHistoryItem.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/model/VaultPasswordHistoryItem.kt new file mode 100644 index 00000000..756a7ce1 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/model/VaultPasswordHistoryItem.kt @@ -0,0 +1,29 @@ +package com.artemchep.keyguard.feature.home.vault.model + +import arrow.optics.optics +import com.artemchep.keyguard.ui.ContextItem + +@optics +sealed interface VaultPasswordHistoryItem { + companion object + + val id: String + + data class Value( + override val id: String, + val title: String, + val value: String, + val monospace: Boolean, + val selected: Boolean, + val selecting: Boolean, + /** + * List of the callable actions appended + * to the item. + */ + val dropdown: List = emptyList(), + val onClick: (() -> Unit)? = null, + val onLongClick: (() -> Unit)? = null, + ) : VaultPasswordHistoryItem { + companion object + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/model/VaultViewItem.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/model/VaultViewItem.kt new file mode 100644 index 00000000..cbfd7a3b --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/model/VaultViewItem.kt @@ -0,0 +1,285 @@ +package com.artemchep.keyguard.feature.home.vault.model + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.RowScope +import androidx.compose.runtime.Composable +import androidx.compose.runtime.Immutable +import androidx.compose.ui.text.AnnotatedString +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.dp +import arrow.optics.optics +import com.artemchep.keyguard.common.model.DSecret +import com.artemchep.keyguard.common.model.TotpToken +import com.artemchep.keyguard.common.service.passkey.PassKeyServiceInfo +import com.artemchep.keyguard.common.service.twofa.TwoFaServiceInfo +import com.artemchep.keyguard.common.usecase.CopyText +import com.artemchep.keyguard.feature.attachments.model.AttachmentItem +import com.artemchep.keyguard.ui.ContextItem +import com.artemchep.keyguard.ui.FlatItemAction +import kotlinx.collections.immutable.PersistentList +import kotlinx.coroutines.flow.StateFlow + +@optics +sealed interface VaultViewItem { + companion object + + val id: String + + data class Card( + override val id: String, + val elevation: Dp, + val data: DSecret.Card, + val concealFields: Boolean, + val verify: ((() -> Unit) -> Unit)? = null, + /** + * List of the callable actions appended + * to the item. + */ + val actions: List = emptyList(), + val dropdown: List = emptyList(), + ) : VaultViewItem { + companion object + } + + data class Identity( + override val id: String, + val data: DSecret.Identity, + /** + * List of the callable actions appended + * to the item. + */ + val actions: List = emptyList(), + ) : VaultViewItem { + companion object + } + + data class Action( + override val id: String, + val elevation: Dp = 0.dp, + val title: String, + val text: String? = null, + val leading: (@Composable RowScope.() -> Unit)? = null, + val trailing: (@Composable RowScope.() -> Unit)? = null, + val badge: Badge? = null, + /** + * List of the callable actions appended + * to the item. + */ + val onClick: (() -> Unit)? = null, + ) : VaultViewItem { + companion object; + + data class Badge( + val text: String, + val score: Float, + ) + } + + data class Value( + override val id: String, + val elevation: Dp = 0.dp, + val title: String?, + val value: String, + val private: Boolean = false, + val hidden: Boolean = false, + val monospace: Boolean = false, + val colorize: Boolean = false, + val leading: (@Composable RowScope.() -> Unit)? = null, + val trailing: (@Composable RowScope.() -> Unit)? = null, + val badge: Badge? = null, + val badge2: List> = emptyList(), + val verify: ((() -> Unit) -> Unit)? = null, + /** + * List of the callable actions appended + * to the item. + */ + val dropdown: List = emptyList(), + ) : VaultViewItem { + companion object; + + sealed interface Style { + data object Info : Style + data object Action : Style + } + + data class Badge( + val text: String, + val score: Float, + ) + } + + data class Error( + override val id: String, + val name: String, + val message: String?, + val timestamp: String, + val onRetry: (() -> Unit)? = null, + ) : VaultViewItem { + companion object; + } + + data class Info( + override val id: String, + val name: String, + val message: String? = null, + val long: Boolean, + ) : VaultViewItem { + companion object; + } + + data class Switch( + override val id: String, + val title: String, + val value: Boolean, + val dropdown: List = emptyList(), + ) : VaultViewItem { + companion object + } + + data class Passkey( + override val id: String, + val value: String?, + val source: DSecret.Login.Fido2Credentials, + val onUse: (() -> Unit)? = null, + val onClick: (() -> Unit)? = null, + ) : VaultViewItem { + companion object + } + + data class Note( + override val id: String, + val text: String, + val markdown: Boolean, + val elevation: Dp = 0.dp, + val conceal: Boolean = false, + val verify: ((() -> Unit) -> Unit)? = null, + ) : VaultViewItem { + companion object + } + + data class Spacer( + override val id: String, + val height: Dp, + ) : VaultViewItem { + companion object + } + + data class Label( + override val id: String, + val horizontalArrangement: Arrangement.Horizontal = Arrangement.Center, + val text: AnnotatedString, + val error: Boolean = false, + ) : VaultViewItem { + companion object + } + + data class Folder( + override val id: String, + val nodes: List, + val onClick: () -> Unit, + ) : VaultViewItem { + companion object; + + data class FolderNode( + val name: String, + val onClick: () -> Unit, + ) + } + + data class Organization( + override val id: String, + val title: String, + val onClick: () -> Unit, + ) : VaultViewItem { + companion object + } + + data class Collection( + override val id: String, + val title: String, + val onClick: () -> Unit, + ) : VaultViewItem { + companion object + } + + data class Uri( + override val id: String, + val title: AnnotatedString, + val text: String? = null, + val matchTypeTitle: String? = null, + val warningTitle: String? = null, + val icon: @Composable () -> Unit, + /** + * List of the callable actions appended + * to the item. + */ + val dropdown: List = emptyList(), + ) : VaultViewItem { + companion object + } + + data class Totp( + override val id: String, + val copy: CopyText, + val title: String, + val elevation: Dp, + val verify: ((() -> Unit) -> Unit)? = null, + val totp: TotpToken, + val localStateFlow: StateFlow, + ) : VaultViewItem { + companion object; + + @Immutable + data class LocalState( + val codes: PersistentList>, + val dropdown: PersistentList, + ) + } + + data class InactiveTotp( + override val id: String, + val info: TwoFaServiceInfo, + val onClick: () -> Unit, + ) : VaultViewItem { + companion object + } + + data class InactivePasskey( + override val id: String, + val info: PassKeyServiceInfo, + val onClick: () -> Unit, + ) : VaultViewItem { + companion object + } + + data class ReusedPassword( + override val id: String, + val count: Int, + val onClick: () -> Unit, + ) : VaultViewItem { + companion object + } + + data class Section( + override val id: String, + val text: String? = null, + ) : VaultViewItem { + companion object + } + + data class Button( + override val id: String, + val leading: (@Composable RowScope.() -> Unit)? = null, + val text: String, + val onClick: () -> Unit, + ) : VaultViewItem { + companion object + } + + data class Attachment( + override val id: String, + val item: AttachmentItem, + ) : VaultViewItem { + companion object + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/organization/OrganizationRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/organization/OrganizationRoute.kt new file mode 100644 index 00000000..264e9737 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/organization/OrganizationRoute.kt @@ -0,0 +1,19 @@ +package com.artemchep.keyguard.feature.home.vault.organization + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.navigation.DialogRoute + +data class OrganizationRoute( + val args: Args, +) : DialogRoute { + data class Args( + val organizationId: String, + ) + + @Composable + override fun Content() { + OrganizationScreen( + args = args, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/organization/OrganizationScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/organization/OrganizationScreen.kt new file mode 100644 index 00000000..f555ab6a --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/organization/OrganizationScreen.kt @@ -0,0 +1,90 @@ +package com.artemchep.keyguard.feature.home.vault.organization + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.common.model.fold +import com.artemchep.keyguard.feature.dialog.Dialog +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.ExpandedIfNotEmpty +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.theme.Dimens +import com.artemchep.keyguard.ui.theme.combineAlpha +import dev.icerock.moko.resources.compose.stringResource + +@Composable +fun OrganizationScreen( + args: OrganizationRoute.Args, +) { + val state = organizationScreenState( + args = args, + ) + Dialog( + title = { + Text("Collection info") + }, + content = { + state.content.fold( + ifLoading = { + CircularProgressIndicator( + modifier = Modifier + .align(Alignment.Center) + .padding(16.dp), + ) + }, + ifOk = { contentOrNull -> + if (contentOrNull != null) { + OrganizationScreenContent( + content = contentOrNull, + ) + } + }, + ) + }, + actions = { + val updatedOnClose by rememberUpdatedState(state.onClose) + TextButton( + enabled = state.onClose != null, + onClick = { + updatedOnClose?.invoke() + }, + ) { + Text(stringResource(Res.strings.close)) + } + }, + ) +} + +@Composable +fun OrganizationScreenContent( + content: OrganizationState.Content, +) { + Column( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding), + ) { + ExpandedIfNotEmpty( + valueOrNull = Unit.takeIf { content.config.selfHost }, + ) { + Text( + modifier = Modifier + .padding(vertical = 2.dp), + text = "Self-hosted", + style = MaterialTheme.typography.bodySmall, + color = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + ) + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/organization/OrganizationState.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/organization/OrganizationState.kt new file mode 100644 index 00000000..0b29b56b --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/organization/OrganizationState.kt @@ -0,0 +1,24 @@ +package com.artemchep.keyguard.feature.home.vault.organization + +import androidx.compose.runtime.Immutable +import com.artemchep.keyguard.common.model.Loadable + +/** + * @author Artem Chepurnyi + */ +@Immutable +data class OrganizationState( + val content: Loadable = Loadable.Loading, + val onClose: (() -> Unit)? = null, +) { + @Immutable + data class Content( + val title: String, + val config: Config, + ) { + @Immutable + data class Config( + val selfHost: Boolean, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/organization/OrganizationStateProducer.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/organization/OrganizationStateProducer.kt new file mode 100644 index 00000000..4d0d991d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/organization/OrganizationStateProducer.kt @@ -0,0 +1,66 @@ +package com.artemchep.keyguard.feature.home.vault.organization + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.usecase.GetOrganizations +import com.artemchep.keyguard.feature.navigation.state.navigatePopSelf +import com.artemchep.keyguard.feature.navigation.state.produceScreenState +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.shareIn +import org.kodein.di.compose.localDI +import org.kodein.di.direct +import org.kodein.di.instance + +@Composable +fun organizationScreenState( + args: OrganizationRoute.Args, +) = with(localDI().direct) { + organizationScreenState( + args = args, + getOrganizations = instance(), + ) +} + +@Composable +fun organizationScreenState( + args: OrganizationRoute.Args, + getOrganizations: GetOrganizations, +): OrganizationState = produceScreenState( + key = "organization", + initial = OrganizationState(), + args = arrayOf( + args, + getOrganizations, + ), +) { + fun onClose() { + navigatePopSelf() + } + + val organizationFlow = getOrganizations() + .map { organizations -> + organizations + .firstOrNull { it.id == args.organizationId } + } + .shareIn(screenScope, SharingStarted.Lazily, replay = 1) + val contentFlow = organizationFlow + .map { organization -> + organization + ?: return@map null + val config = OrganizationState.Content.Config( + selfHost = organization.selfHost, + ) + OrganizationState.Content( + title = organization.name, + config = config, + ) + } + contentFlow + .map { content -> + OrganizationState( + content = Loadable.Ok(content), + onClose = ::onClose, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/organizations/OrganizationsRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/organizations/OrganizationsRoute.kt new file mode 100644 index 00000000..caca4d83 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/organizations/OrganizationsRoute.kt @@ -0,0 +1,20 @@ +package com.artemchep.keyguard.feature.home.vault.organizations + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.common.model.AccountId +import com.artemchep.keyguard.feature.navigation.Route + +data class OrganizationsRoute( + val args: Args, +) : Route { + data class Args( + val accountId: AccountId, + ) + + @Composable + override fun Content() { + FoldersScreen( + args = args, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/organizations/OrganizationsScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/organizations/OrganizationsScreen.kt new file mode 100644 index 00000000..19432fec --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/organizations/OrganizationsScreen.kt @@ -0,0 +1,216 @@ +@file:OptIn(ExperimentalMaterial3Api::class) + +package com.artemchep.keyguard.feature.home.vault.organizations + +import androidx.compose.foundation.ExperimentalFoundationApi +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.lazy.items +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Add +import androidx.compose.material3.Checkbox +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.LocalAbsoluteTonalElevation +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.runtime.Composable +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.compositeOver +import androidx.compose.ui.graphics.luminance +import androidx.compose.ui.input.nestedscroll.nestedScroll +import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.feature.EmptyView +import com.artemchep.keyguard.feature.navigation.NavigationIcon +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.AhLayout +import com.artemchep.keyguard.ui.DefaultFab +import com.artemchep.keyguard.ui.DefaultSelection +import com.artemchep.keyguard.ui.ExpandedIfNotEmptyForRow +import com.artemchep.keyguard.ui.FabState +import com.artemchep.keyguard.ui.FlatDropdown +import com.artemchep.keyguard.ui.FlatItemTextContent +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.ScaffoldLazyColumn +import com.artemchep.keyguard.ui.animatedNumberText +import com.artemchep.keyguard.ui.skeleton.SkeletonItemPilled +import com.artemchep.keyguard.ui.theme.combineAlpha +import com.artemchep.keyguard.ui.theme.isDark +import com.artemchep.keyguard.ui.toolbar.LargeToolbar +import dev.icerock.moko.resources.compose.stringResource + +@Composable +fun FoldersScreen( + args: OrganizationsRoute.Args, +) { + val state = organizationsScreenState( + args = args, + ) + FoldersScreenContent( + state = state, + ) +} + +@OptIn(ExperimentalMaterial3Api::class, ExperimentalFoundationApi::class) +@Composable +fun FoldersScreenContent( + state: OrganizationsState, +) { + val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior() + ScaffoldLazyColumn( + modifier = Modifier + .nestedScroll(scrollBehavior.nestedScrollConnection), + topAppBarScrollBehavior = scrollBehavior, + topBar = { + LargeToolbar( + title = { + Column { + Text( + text = stringResource(Res.strings.account), + style = MaterialTheme.typography.labelSmall, + color = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + overflow = TextOverflow.Ellipsis, + maxLines = 2, + ) + Text( + text = stringResource(Res.strings.organizations), + style = MaterialTheme.typography.titleMedium, + overflow = TextOverflow.Ellipsis, + maxLines = 1, + ) + } + }, + navigationIcon = { + NavigationIcon() + }, + scrollBehavior = scrollBehavior, + ) + }, + floatingActionState = run { + val fabOnClick = state.onAdd + val fabState = if (fabOnClick != null) { + FabState( + onClick = fabOnClick, + model = null, + ) + } else { + null + } + rememberUpdatedState(newValue = fabState) + }, + floatingActionButton = { + DefaultFab( + icon = { + Icon( + imageVector = Icons.Outlined.Add, + contentDescription = null, + ) + }, + text = { + Text("New organization") + }, + ) + }, + bottomBar = { + DefaultSelection( + state = state.selection, + ) + }, + ) { + when (val contentState = state.content) { + is Loadable.Loading -> { + for (i in 1..3) { + item("skeleton.$i") { + SkeletonItemPilled() + } + } + } + + is Loadable.Ok -> { + val items = contentState.value.items + if (items.isEmpty()) { + item("empty") { + EmptyView( + text = { + Text( + text = stringResource(Res.strings.organizations_empty_label), + ) + }, + ) + } + } + + items( + items = items, + key = { it.key }, + ) { + OrganizationsScreenItem( + modifier = Modifier + .animateItemPlacement(), + item = it, + ) + } + } + } + } +} + +@Composable +private fun OrganizationsScreenItem( + modifier: Modifier = Modifier, + item: OrganizationsState.Content.Item, +) { + val backgroundColor = + if (item.selected) MaterialTheme.colorScheme.primaryContainer else MaterialTheme.colorScheme.surface + FlatDropdown( + modifier = modifier, + backgroundColor = backgroundColor, + dropdown = item.actions, + leading = { + val pillElevation = LocalAbsoluteTonalElevation.current + 8.dp + val pillColor = if (MaterialTheme.colorScheme.isDark) { + item.accentColors.dark + } else { + item.accentColors.light + } + val contentColor = if (pillColor.luminance() > 0.5f) { + Color.Black + } else { + Color.White + }.combineAlpha(0.8f).compositeOver(pillColor) + AhLayout( + modifier = modifier, + backgroundColor = pillColor, + contentColor = contentColor, + ) { + val text = animatedNumberText(item.ciphers) + Text(text) + } + }, + content = { + FlatItemTextContent( + title = { + Text(item.title) + }, + ) + }, + trailing = { + ExpandedIfNotEmptyForRow( + item.selected.takeIf { item.selecting }, + ) { selected -> + Checkbox( + checked = selected, + onCheckedChange = null, + ) + } + }, + onClick = item.onClick, + onLongClick = item.onLongClick, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/organizations/OrganizationsState.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/organizations/OrganizationsState.kt new file mode 100644 index 00000000..c1f755bb --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/organizations/OrganizationsState.kt @@ -0,0 +1,38 @@ +package com.artemchep.keyguard.feature.home.vault.organizations + +import androidx.compose.runtime.Immutable +import androidx.compose.ui.graphics.vector.ImageVector +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.ui.ContextItem +import com.artemchep.keyguard.ui.Selection +import com.artemchep.keyguard.ui.icons.AccentColors +import kotlinx.collections.immutable.ImmutableList + +/** + * @author Artem Chepurnyi + */ +@Immutable +data class OrganizationsState( + val selection: Selection? = null, + val content: Loadable = Loadable.Loading, + val onAdd: (() -> Unit)? = null, +) { + @Immutable + data class Content( + val items: ImmutableList, + ) { + @Immutable + data class Item( + val key: String, + val title: String, + val ciphers: Int, + val selecting: Boolean, + val selected: Boolean, + val accentColors: AccentColors, + val icon: ImageVector? = null, + val actions: ImmutableList, + val onClick: (() -> Unit)?, + val onLongClick: (() -> Unit)?, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/organizations/OrganizationsStateProducer.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/organizations/OrganizationsStateProducer.kt new file mode 100644 index 00000000..ea786fb0 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/organizations/OrganizationsStateProducer.kt @@ -0,0 +1,269 @@ +package com.artemchep.keyguard.feature.home.vault.organizations + +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Info +import androidx.compose.runtime.Composable +import arrow.core.partially1 +import com.artemchep.keyguard.common.model.AccountId +import com.artemchep.keyguard.common.model.DCollection +import com.artemchep.keyguard.common.model.DOrganization +import com.artemchep.keyguard.common.model.DSecret +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.usecase.GetCanWrite +import com.artemchep.keyguard.common.usecase.GetCiphers +import com.artemchep.keyguard.common.usecase.GetCollections +import com.artemchep.keyguard.common.usecase.GetOrganizations +import com.artemchep.keyguard.feature.home.vault.VaultRoute +import com.artemchep.keyguard.feature.home.vault.collections.CollectionsRoute +import com.artemchep.keyguard.feature.home.vault.organization.OrganizationRoute +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.feature.navigation.state.produceScreenState +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItemAction +import com.artemchep.keyguard.ui.Selection +import com.artemchep.keyguard.ui.buildContextItems +import com.artemchep.keyguard.ui.icons.ChevronIcon +import com.artemchep.keyguard.ui.icons.KeyguardCipher +import com.artemchep.keyguard.ui.icons.KeyguardCollection +import com.artemchep.keyguard.ui.selection.selectionHandle +import kotlinx.collections.immutable.toImmutableList +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.shareIn +import org.kodein.di.compose.localDI +import org.kodein.di.direct +import org.kodein.di.instance + +@Composable +fun organizationsScreenState( + args: OrganizationsRoute.Args, +) = with(localDI().direct) { + organizationsScreenState( + args = args, + getOrganizations = instance(), + getCollections = instance(), + getCiphers = instance(), + getCanWrite = instance(), + ) +} + +@Composable +fun organizationsScreenState( + args: OrganizationsRoute.Args, + getOrganizations: GetOrganizations, + getCollections: GetCollections, + getCiphers: GetCiphers, + getCanWrite: GetCanWrite, +): OrganizationsState = produceScreenState( + key = "organizations", + initial = OrganizationsState(), + args = arrayOf( + args, + getOrganizations, + getCollections, + getCiphers, + getCanWrite, + ), +) { + data class OrganizationWithCiphers( + val organization: DOrganization, + val collections: List, + val ciphers: List, + ) + + val organizationsComparator = Comparator { a: DOrganization, b: DOrganization -> + a.name.compareTo(b.name, ignoreCase = true) + } + val organizationsFlow = getOrganizations() + .map { organizations -> + organizations + .filter { it.accountId == args.accountId.id } + .sortedWith(organizationsComparator) + } + .shareIn(screenScope, SharingStarted.Lazily, replay = 1) + val collectionsMapByOrganizationIdFlow = getCollections() + .map { collections -> + collections + .groupBy { it.organizationId } + } + .distinctUntilChanged() + val ciphersMapByOrganizationIdFlow = getCiphers() + .map { ciphers -> + ciphers + .filter { it.deletedDate == null } + .groupBy { it.organizationId } + } + .distinctUntilChanged() + val organizationsWithCiphersFlow = combine( + organizationsFlow, + collectionsMapByOrganizationIdFlow, + ciphersMapByOrganizationIdFlow, + ) { organizations, collectionsMapByOrganizationId, ciphersMapByOrganizationId -> + organizations + .map { organization -> + val collections = collectionsMapByOrganizationId[organization.id].orEmpty() + val ciphers = ciphersMapByOrganizationId[organization.id].orEmpty() + OrganizationWithCiphers( + organization = organization, + collections = collections, + ciphers = ciphers, + ) + } + } + + val selectionHandle = selectionHandle("selection") + val selectedOrganizationsWithCiphersFlow = organizationsWithCiphersFlow + .combine(selectionHandle.idsFlow) { organizationsWithCiphers, selectedOrganizationIds -> + selectedOrganizationIds + .mapNotNull { selectedOrganizationId -> + val organizationWithCiphers = organizationsWithCiphers + .firstOrNull { it.organization.id == selectedOrganizationId } + ?: return@mapNotNull null + selectedOrganizationId to organizationWithCiphers + } + .toMap() + } + .distinctUntilChanged() + .shareIn(screenScope, SharingStarted.Lazily, replay = 1) + + val selectionFlow = combine( + organizationsFlow + .map { organizations -> + organizations + .map { it.id } + .toSet() + } + .distinctUntilChanged(), + selectedOrganizationsWithCiphersFlow, + getCanWrite(), + ) { organizationsIds, selectedOrganizations, canWrite -> + if (selectedOrganizations.isEmpty()) { + return@combine null + } + + val selectedOrganizationIds = selectedOrganizations.keys + val actions = mutableListOf() + Selection( + count = selectedOrganizations.size, + actions = actions.toImmutableList(), + onSelectAll = selectionHandle::setSelection + .partially1(organizationsIds) + .takeIf { + organizationsIds.size > selectedOrganizationIds.size + }, + onClear = selectionHandle::clearSelection, + ) + } + val contentFlow = combine( + organizationsWithCiphersFlow, + selectedOrganizationsWithCiphersFlow, + getCanWrite(), + ) { organizationsWithCiphers, selectedOrganizationIds, canWrite -> + val selecting = selectedOrganizationIds.isNotEmpty() + val items = organizationsWithCiphers + .map { organizationWithCiphers -> + val organization = organizationWithCiphers.organization + val collections = organizationWithCiphers.collections + val ciphers = organizationWithCiphers.ciphers + val selected = organization.id in selectedOrganizationIds + + val actions = buildContextItems { + section { + // An option to view all the items that belong + // to this cipher. + if (ciphers.isNotEmpty()) { + this += FlatItemAction( + icon = Icons.Outlined.KeyguardCipher, + title = translate(Res.strings.items), + trailing = { + ChevronIcon() + }, + onClick = { + val route = VaultRoute.by( + translator = this@produceScreenState, + organization = organization, + ) + val intent = NavigationIntent.NavigateToRoute(route) + navigate(intent) + }, + ) + } + // An option to view all the items that belong + // to this cipher. + if (collections.isNotEmpty()) { + this += FlatItemAction( + icon = Icons.Outlined.KeyguardCollection, + title = translate(Res.strings.collections), + trailing = { + ChevronIcon() + }, + onClick = { + val intent = NavigationIntent.NavigateToRoute( + CollectionsRoute( + args = CollectionsRoute.Args( + accountId = organization.accountId.let(::AccountId), + organizationId = organization.id, + ), + ), + ) + navigate(intent) + }, + ) + } + } + section { + this += FlatItemAction( + icon = Icons.Outlined.Info, + title = translate(Res.strings.info), + onClick = { + val intent = NavigationIntent.NavigateToRoute( + OrganizationRoute( + args = OrganizationRoute.Args( + organizationId = organization.id, + ), + ), + ) + navigate(intent) + }, + ) + } + } + OrganizationsState.Content.Item( + key = organization.id, + title = organization.name, + accentColors = organization.accentColor, + ciphers = organizationWithCiphers.ciphers.size, + selecting = selecting, + selected = selected, + actions = actions.toImmutableList(), + onClick = if (selecting) { + // lambda + selectionHandle::toggleSelection.partially1(organization.id) + } else { + null + }, + onLongClick = if (selecting) { + null + } else { + // lambda + selectionHandle::toggleSelection.partially1(organization.id) + }, + ) + } + .toImmutableList() + OrganizationsState.Content( + items = items, + ) + } + combine( + selectionFlow, + contentFlow, + ) { selection, content -> + OrganizationsState( + selection = selection, + content = Loadable.Ok(content), + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/screen/AutofillWindow.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/screen/AutofillWindow.kt new file mode 100644 index 00000000..af2a843a --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/screen/AutofillWindow.kt @@ -0,0 +1,243 @@ +package com.artemchep.keyguard.feature.home.vault.screen + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ColumnScope +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.items +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.History +import androidx.compose.material.icons.outlined.HistoryToggleOff +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.State +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.common.model.DSecret +import com.artemchep.keyguard.common.model.fold +import com.artemchep.keyguard.feature.home.vault.component.VaultListItem +import com.artemchep.keyguard.ui.LeMOdelBottomSheet +import com.artemchep.keyguard.ui.Placeholder +import com.artemchep.keyguard.ui.icons.IconBox +import com.artemchep.keyguard.ui.skeleton.SkeletonItem +import com.artemchep.keyguard.ui.skeleton.SkeletonSegmented +import com.artemchep.keyguard.ui.tabs.SegmentedButtonGroup +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.onEach + +@Composable +fun RecentsButton( + onValueChange: ((DSecret) -> Unit)? = null, +) { + var isAutofillWindowShowing by remember { + mutableStateOf(false) + } + + val enabled = onValueChange != null + if (!enabled) { + // We can not autofill disabled text fields and we can not + // tease user with it. + isAutofillWindowShowing = false + } + + IconButton( + enabled = onValueChange != null, + onClick = { + isAutofillWindowShowing = !isAutofillWindowShowing + }, + ) { + IconBox(main = Icons.Outlined.History) + } + // Inject the dropdown popup to the bottom of the + // content. + val onDismissRequest = { + isAutofillWindowShowing = false + } + LeMOdelBottomSheet( + visible = isAutofillWindowShowing, + onDismissRequest = onDismissRequest, + ) { contentPadding -> + Column( + modifier = Modifier, + ) { + RecentsWindow( + contentPadding = contentPadding, + onComplete = { password -> + if (onValueChange != null && password != null) { + onValueChange(password) + } + // Hide the dropdown window on click on one + // of the buttons. + onDismissRequest() + }, + ) + } + } +} + +@Composable +fun RecentsButtonRaw( + visible: State, + onDismissRequest: () -> Unit, + onValueChange: ((DSecret) -> Unit)? = null, +) { + LeMOdelBottomSheet( + visible = visible.value, + onDismissRequest = onDismissRequest, + ) { contentPadding -> + Column( + modifier = Modifier, + ) { + RecentsWindow( + contentPadding = contentPadding, + onComplete = { cipher -> + if (onValueChange != null) { + onValueChange(cipher) + } + // Hide the dropdown window on click on one + // of the buttons. + onDismissRequest() + }, + ) + } + } +} + +@Composable +fun ColumnScope.RecentsWindow( + contentPadding: PaddingValues, + onComplete: (DSecret) -> Unit, +) { + val state = vaultRecentScreenState( + highlightBackgroundColor = MaterialTheme.colorScheme.tertiaryContainer, + highlightContentColor = MaterialTheme.colorScheme.onTertiaryContainer, + ) + state.fold( + ifLoading = { + Column( + modifier = Modifier + .padding(contentPadding), + ) { + RecentsWindowSkeleton() + } + }, + ifOk = { state -> + RecentsWindowOk( + contentPadding = contentPadding, + state = state, + onComplete = onComplete, + ) + }, + ) +} + +@Composable +fun ColumnScope.RecentsWindowSkeleton( +) { + Spacer( + modifier = Modifier + .height(16.dp), + ) + SkeletonSegmented( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 16.dp), + ) + Spacer( + modifier = Modifier + .height(16.dp), + ) + repeat(3) { + SkeletonItem(avatar = true) + } +} + +@Composable +fun ColumnScope.RecentsWindowOk( + contentPadding: PaddingValues, + state: VaultRecentState, + onComplete: (DSecret) -> Unit, +) { + val selectCipherFlow = state.sideEffects.selectCipherFlow + LaunchedEffect(selectCipherFlow) { + selectCipherFlow + .onEach { cipher -> + onComplete(cipher) + } + .launchIn(this) + } + + val list by state.recent.collectAsState() + LazyColumn( + modifier = Modifier + .fillMaxWidth(), + contentPadding = contentPadding, + ) { + item("header") { + Spacer( + modifier = Modifier + .height(16.dp), + ) + + val selectedTab = state.selectedTab.collectAsState() + val updatedOnSelectTab by rememberUpdatedState(state.onSelectTab) + SegmentedButtonGroup( + tabState = selectedTab, + tabs = state.tabs, + onClick = { tab -> + updatedOnSelectTab?.invoke(tab) + }, + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 16.dp), + ) + + Spacer( + modifier = Modifier + .height(16.dp), + ) + } + + if (list.isEmpty()) { + item("header.empty") { + Column( + modifier = Modifier + .fillMaxWidth(), + horizontalAlignment = Alignment.CenterHorizontally, + ) { + Placeholder( + icon = Icons.Outlined.HistoryToggleOff, + title = "No recently opened items yet.", + ) + } + } + } + items(list, key = { it.id }) { item -> + VaultListItem( + modifier = Modifier, + item = item, + ) + } + + item("footer") { + Spacer( + modifier = Modifier + .height(16.dp), + ) + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/screen/VaultCipherItem.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/screen/VaultCipherItem.kt new file mode 100644 index 00000000..547c54a4 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/screen/VaultCipherItem.kt @@ -0,0 +1,20 @@ +package com.artemchep.keyguard.feature.home.vault.screen + +import androidx.compose.runtime.Immutable +import arrow.optics.optics + +@Immutable +@optics +sealed interface VaultCipherItem { + companion object; + + val id: String + val title: String + + data class Password( + override val id: String, + override val title: String, + val username: String, + val password: String, + ) : VaultCipherItem +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/screen/VaultListFilter.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/screen/VaultListFilter.kt new file mode 100644 index 00000000..1b1ef18a --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/screen/VaultListFilter.kt @@ -0,0 +1,827 @@ +package com.artemchep.keyguard.feature.home.vault.screen + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.CloudOff +import androidx.compose.material.icons.outlined.ErrorOutline +import androidx.compose.material.icons.outlined.FolderOff +import androidx.compose.material.icons.outlined.Key +import androidx.compose.material.icons.outlined.Lock +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.unit.dp +import arrow.core.partially1 +import arrow.core.widen +import com.artemchep.keyguard.common.model.DAccount +import com.artemchep.keyguard.common.model.DCollection +import com.artemchep.keyguard.common.model.DFilter +import com.artemchep.keyguard.common.model.DFolder +import com.artemchep.keyguard.common.model.DOrganization +import com.artemchep.keyguard.common.model.DProfile +import com.artemchep.keyguard.common.model.DSecret +import com.artemchep.keyguard.common.model.iconImageVector +import com.artemchep.keyguard.common.model.titleH +import com.artemchep.keyguard.common.usecase.GetFolderTree +import com.artemchep.keyguard.feature.home.vault.component.rememberSecretAccentColor +import com.artemchep.keyguard.feature.home.vault.model.FilterItem +import com.artemchep.keyguard.feature.home.vault.search.filter.FilterHolder +import com.artemchep.keyguard.feature.navigation.state.PersistedStorage +import com.artemchep.keyguard.feature.navigation.state.RememberStateFlowScope +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.icons.AccentColors +import com.artemchep.keyguard.ui.icons.IconBox +import com.artemchep.keyguard.ui.icons.KeyguardAttachment +import com.artemchep.keyguard.ui.icons.KeyguardTwoFa +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.flow.flowOn +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.update +import kotlinx.serialization.encodeToString +import org.kodein.di.DirectDI +import org.kodein.di.instance + +private fun mapCiphers( + flow: Flow>, + getter: (T) -> R, +) where R : Any? = flow + .map { ciphers -> + ciphers + .asSequence() + .map(getter) + .toSet() + } + .distinctUntilChanged() + +data class CreateFilterResult( + val filterFlow: Flow, + val onToggle: (String, Set) -> Unit, + val onClear: () -> Unit, +) + +suspend fun RememberStateFlowScope.createFilter(): CreateFilterResult { + val emptyState = FilterHolder( + state = mapOf(), + ) + + val filterSink = mutablePersistedFlow( + key = "ciphers.filters", + serialize = { json, value -> + json.encodeToString(value) + }, + deserialize = { json, value -> + json.decodeFromString(value) + }, + ) { emptyState } + val onClear = { + filterSink.value = emptyState + } + val onToggle = { sectionId: String, filters: Set -> + filterSink.update { holder -> + val activeFilters = holder.state.getOrElse(sectionId) { emptySet() } + val pendingFilters = filters + .filter { it !in activeFilters } + + val newFilters = if (pendingFilters.isNotEmpty()) { + // Add the filters from a clicked item if + // not all of them are already active. + activeFilters + pendingFilters + } else { + activeFilters - filters + } + val newState = holder.state + (sectionId to newFilters) + holder.copy( + state = newState, + ) + } + } + return CreateFilterResult( + filterFlow = filterSink, + onToggle = onToggle, + onClear = onClear, + ) +} + +data class OurFilterResult( + val rev: Int = 0, + val items: List = emptyList(), + val onClear: (() -> Unit)? = null, +) + +data class FilterParams( + val deeplinkCustomFilter: String? = null, + val section: Section = Section(), +) { + data class Section( + val account: Boolean = true, + val type: Boolean = true, + val organization: Boolean = true, + val collection: Boolean = true, + val folder: Boolean = true, + val misc: Boolean = true, + ) +} + +suspend fun < + Output : Any, + Account, + Secret, + Folder, + Collection, + Organization, + > RememberStateFlowScope.ah( + directDI: DirectDI, + outputGetter: (Output) -> DSecret, + outputFlow: Flow>, + accountGetter: (Account) -> DAccount, + accountFlow: Flow>, + profileFlow: Flow>, + cipherGetter: (Secret) -> DSecret, + cipherFlow: Flow>, + folderGetter: (Folder) -> DFolder, + folderFlow: Flow>, + collectionGetter: (Collection) -> DCollection, + collectionFlow: Flow>, + organizationGetter: (Organization) -> DOrganization, + organizationFlow: Flow>, + input: CreateFilterResult, + params: FilterParams = FilterParams(), +): Flow { + val storage = kotlin.run { + val disk = loadDiskHandle("ciphers.filter") + PersistedStorage.InDisk(disk) + } + + val collapsedSectionIdsSink = + mutablePersistedFlow>("ciphers.sections", storage) { emptyList() } + + fun toggleSection(sectionId: String) { + collapsedSectionIdsSink.update { + val shouldAdd = sectionId !in it + if (shouldAdd) { + it + sectionId + } else { + it - sectionId + } + } + } + + val outputCipherFlow = outputFlow + .map { list -> + list + .map { outputGetter(it) } + } + + val filterTypesWithCiphers = mapCiphers(cipherFlow) { cipherGetter(it).type } + val filterFoldersWithCiphers = mapCiphers(cipherFlow) { cipherGetter(it).folderId } + val filterAccountsWithCiphers = mapCiphers(cipherFlow) { cipherGetter(it).accountId } + val filterOrganizationsWithCiphers = mapCiphers(cipherFlow) { cipherGetter(it).organizationId } + val filterCollectionsWithCiphers = cipherFlow + .map { ciphers -> + ciphers + .asSequence() + .flatMap { + val cipher = cipherGetter(it) + cipher.collectionIds + .takeUnless { it.isEmpty() } + ?: listOf(null) + } + .toSet() + } + .distinctUntilChanged() + + fun Flow>.filterSection( + enabled: Boolean, + ) = if (enabled) { + this + } else { + flowOf(emptyList()) + } + + fun Flow>.aaa( + sectionId: String, + sectionTitle: String, + collapse: Boolean = true, + ) = this + .combine(input.filterFlow) { items, filterHolder -> + items + .map { item -> + val shouldBeChecked = kotlin.run { + val activeFilters = filterHolder.state[item.filterSectionId].orEmpty() + item.filters + .all { itemFilter -> + itemFilter in activeFilters + } + } + if (shouldBeChecked == item.checked) { + return@map item + } + + item.copy(checked = shouldBeChecked) + } + } + .distinctUntilChanged() + .map { items -> + if (items.size <= 1 && collapse) { + // Do not show a single filter item. + return@map emptyList() + } + + items + .widen() + .toMutableList() + .apply { + val sectionItem = FilterItem.Section( + sectionId = sectionId, + text = sectionTitle, + onClick = { + toggleSection(sectionId) + }, + ) + add(0, sectionItem) + } + } + + val setOfNull = setOf(null) + + val customSectionId = "custom" + val typeSectionId = "type" + val accountSectionId = "account" + val folderSectionId = "folder" + val collectionSectionId = "collection" + val organizationSectionId = "organization" + val miscSectionId = "misc" + + fun createFilterAction( + sectionId: String, + filter: Set, + filterSectionId: String = sectionId, + title: String, + text: String? = null, + tint: AccentColors? = null, + icon: ImageVector? = null, + fill: Boolean = false, + indent: Int = 0, + ) = FilterItem.Item( + sectionId = sectionId, + filterSectionId = filterSectionId, + filters = filter, + leading = when { + icon != null -> { + // composable + { + IconBox(main = icon) + } + } + + tint != null -> { + // composable + { + Box( + modifier = Modifier + .padding(2.dp), + contentAlignment = Alignment.Center, + ) { + val color = rememberSecretAccentColor( + accentLight = tint.light, + accentDark = tint.dark, + ) + Box( + modifier = Modifier + .fillMaxSize() + .background(color, CircleShape), + ) + } + } + } + + else -> null + }, + title = title, + text = text, + onClick = input.onToggle + .partially1(filterSectionId) + .partially1(filter), + fill = fill, + indent = indent, + checked = false, + ) + + fun createAccountFilterAction( + accountIds: Set, + title: String, + text: String, + tint: AccentColors? = null, + icon: ImageVector? = null, + ) = createFilterAction( + sectionId = accountSectionId, + filter = accountIds + .asSequence() + .map { accountId -> + DFilter.ById( + id = accountId, + what = DFilter.ById.What.ACCOUNT, + ) + } + .toSet(), + title = title, + text = text, + tint = tint, + icon = icon, + ) + + fun createTypeFilterAction( + type: DSecret.Type, + sectionId: String = typeSectionId, + ) = createFilterAction( + sectionId = sectionId, + filterSectionId = typeSectionId, + filter = setOf( + DFilter.ByType(type), + ), + title = translate(type.titleH()), + icon = type.iconImageVector(), + ) + + fun createFolderFilterAction( + folderIds: Set, + title: String, + icon: ImageVector? = null, + fill: Boolean, + indent: Int, + ) = createFilterAction( + sectionId = folderSectionId, + filter = folderIds + .asSequence() + .map { folderId -> + DFilter.ById( + id = folderId, + what = DFilter.ById.What.FOLDER, + ) + } + .toSet(), + title = title, + icon = icon, + fill = fill, + indent = indent, + ) + + fun createCollectionFilterAction( + collectionIds: Set, + title: String, + icon: ImageVector? = null, + ) = createFilterAction( + sectionId = collectionSectionId, + filter = collectionIds + .asSequence() + .map { collectionId -> + DFilter.ById( + id = collectionId, + what = DFilter.ById.What.COLLECTION, + ) + } + .toSet(), + title = title, + icon = icon, + ) + + fun createOrganizationFilterAction( + organizationIds: Set, + title: String, + icon: ImageVector? = null, + ) = createFilterAction( + sectionId = organizationSectionId, + filter = organizationIds + .asSequence() + .map { organizationId -> + DFilter.ById( + id = organizationId, + what = DFilter.ById.What.ORGANIZATION, + ) + } + .toSet(), + title = title, + icon = icon, + ) + + val filterAccountListFlow = profileFlow + .map { profiles -> + profiles + .map { profile -> + createAccountFilterAction( + accountIds = setOf( + profile.accountId, + ), + title = profile.email, + text = profile.accountHost, + tint = profile.accentColor, + ) + } + } + .combine(filterAccountsWithCiphers) { items, accountIds -> + items + .filter { filterItem -> + filterItem.filters + .any { filter -> + val filterFixed = filter as DFilter.ById + require(filterFixed.what == DFilter.ById.What.ACCOUNT) + filterFixed.id in accountIds + } + } + } + .aaa( + sectionId = accountSectionId, + sectionTitle = translate(Res.strings.account), + ) + .filterSection(params.section.account) + + val filterTypesAll = listOf( + DSecret.Type.Login to createTypeFilterAction( + type = DSecret.Type.Login, + ), + DSecret.Type.Card to createTypeFilterAction( + type = DSecret.Type.Card, + ), + DSecret.Type.Identity to createTypeFilterAction( + type = DSecret.Type.Identity, + ), + DSecret.Type.SecureNote to createTypeFilterAction( + type = DSecret.Type.SecureNote, + ), + ) + + val filterTypeListFlow = filterTypesWithCiphers + .map { types -> + filterTypesAll.mapNotNull { (type, item) -> + item.takeIf { type in types } + } + } + .aaa( + sectionId = typeSectionId, + sectionTitle = translate(Res.strings.type), + ) + .filterSection(params.section.type) + + val folderTree: GetFolderTree = directDI.instance() + val filterFolderListFlow = folderFlow + .map { folders -> + val q = folders + .filter { folder -> + val model = folderGetter(folder) + !model.deleted + } + .groupBy { folder -> + val model = folderGetter(folder) + model.name + } + val w = q + .map { + folderTree.invoke( + lens = { it.key }, + allFolders = q.entries, + folder = it, + ) + } + val p = w + .asSequence() + .flatMap { + it.hierarchy + .dropLast(1) + } + .map { it.folder.key } + .toSet() + + w + .asSequence() + .sortedBy { it.folder.key } + .map { entry -> + val name = entry.folder.key // entry.hierarchy.last().name + val folders = entry.folder.value + createFolderFilterAction( + folderIds = folders + .asSequence() + .map(folderGetter) + .map { it.id } + .toSet(), + title = name, + fill = false,// entry.folder.key in p || entry.hierarchy.size > 1, + indent = 0, // entry.hierarchy.lastIndex, + ) + } + .toList() + + createFolderFilterAction( + folderIds = setOfNull, + title = translate(Res.strings.folder_none), + icon = Icons.Outlined.FolderOff, + fill = false, + indent = 0, + ) + } + .combine(filterFoldersWithCiphers) { items, folderIds -> + items + .filter { filterItem -> + filterItem.filters + .any { filter -> + val filterFixed = filter as DFilter.ById + require(filterFixed.what == DFilter.ById.What.FOLDER) + filterFixed.id in folderIds + } + } + } + .aaa( + sectionId = folderSectionId, + sectionTitle = translate(Res.strings.folder), + ) + .filterSection(params.section.folder) + + val filterCollectionListFlow = collectionFlow + .map { collections -> + collections + .groupBy { collection -> + val model = collectionGetter(collection) + model.name + } + .asSequence() + .map { (name, collections) -> + createCollectionFilterAction( + collectionIds = collections + .asSequence() + .map(collectionGetter) + .map { it.id } + .toSet(), + title = name, + ) + } + .sortedBy { it.title } + .toList() + + createCollectionFilterAction( + collectionIds = setOfNull, + title = translate(Res.strings.collection_none), + ) + } + .combine(filterCollectionsWithCiphers) { items, collectionIds -> + items + .filter { filterItem -> + filterItem.filters + .any { filter -> + val filterFixed = filter as DFilter.ById + require(filterFixed.what == DFilter.ById.What.COLLECTION) + filterFixed.id in collectionIds + } + } + } + .aaa( + sectionId = collectionSectionId, + sectionTitle = translate(Res.strings.collection), + ) + .filterSection(params.section.collection) + + val filterOrganizationListFlow = organizationFlow + .map { organizations -> + organizations + .groupBy { organization -> + val model = organizationGetter(organization) + model.name + } + .asSequence() + .map { (name, organizations) -> + createOrganizationFilterAction( + organizationIds = organizations + .asSequence() + .map(organizationGetter) + .map { it.id } + .toSet(), + title = name, + ) + } + .sortedBy { it.title } + .toList() + + createOrganizationFilterAction( + organizationIds = setOfNull, + title = translate(Res.strings.organization_none), + ) + } + .combine(filterOrganizationsWithCiphers) { items, organizationIds -> + items + .filter { filterItem -> + filterItem.filters + .any { filter -> + val filterFixed = filter as DFilter.ById + require(filterFixed.what == DFilter.ById.What.ORGANIZATION) + filterFixed.id in organizationIds + } + } + } + .aaa( + sectionId = organizationSectionId, + sectionTitle = translate(Res.strings.organization), + ) + .filterSection(params.section.organization) + + val filterMiscAll = listOf( + createFilterAction( + sectionId = miscSectionId, + filter = setOf( + DFilter.ByOtp, + ), + filterSectionId = "$miscSectionId.otp", + title = translate(Res.strings.one_time_password), + icon = Icons.Outlined.KeyguardTwoFa, + ), + createFilterAction( + sectionId = miscSectionId, + filter = setOf( + DFilter.ByAttachments, + ), + filterSectionId = "$miscSectionId.attachments", + title = translate(Res.strings.attachments), + icon = Icons.Outlined.KeyguardAttachment, + ), + createFilterAction( + sectionId = miscSectionId, + filter = setOf( + DFilter.ByPasskeys, + ), + filterSectionId = "$miscSectionId.passkeys", + title = translate(Res.strings.passkeys), + icon = Icons.Outlined.Key, + ), + createFilterAction( + sectionId = miscSectionId, + filter = setOf( + DFilter.ByReprompt(reprompt = true), + ), + filterSectionId = "$miscSectionId.reprompt", + title = "Auth re-prompt", + icon = Icons.Outlined.Lock, + ), + createFilterAction( + sectionId = miscSectionId, + filter = setOf( + DFilter.BySync(synced = false), + ), + filterSectionId = "$miscSectionId.sync", + title = "Un-synced", + icon = Icons.Outlined.CloudOff, + ), + createFilterAction( + sectionId = miscSectionId, + filter = setOf( + DFilter.ByError(error = true), + ), + filterSectionId = "$miscSectionId.error", + title = "Failed", + icon = Icons.Outlined.ErrorOutline, + ), + ) + + val filterMiscListFlow = flowOf(Unit) + .map { + filterMiscAll + } + .aaa( + sectionId = miscSectionId, + sectionTitle = translate(Res.strings.misc), + collapse = false, + ) + .filterSection(params.section.misc) + + val filterCustomTypesAll = listOf( + DSecret.Type.Login to createTypeFilterAction( + sectionId = customSectionId, + type = DSecret.Type.Login, + ), + DSecret.Type.Card to createTypeFilterAction( + sectionId = customSectionId, + type = DSecret.Type.Card, + ), + DSecret.Type.Identity to createTypeFilterAction( + sectionId = customSectionId, + type = DSecret.Type.Identity, + ), + DSecret.Type.SecureNote to createTypeFilterAction( + sectionId = customSectionId, + type = DSecret.Type.SecureNote, + ), + ) + + val filterCustomAll = listOf( + createFilterAction( + sectionId = customSectionId, + filter = setOf( + DFilter.ByOtp, + ), + filterSectionId = "$miscSectionId.otp", + title = translate(Res.strings.one_time_password), + icon = Icons.Outlined.KeyguardTwoFa, + ), + ) + + if (params.deeplinkCustomFilter == "2fa") { + input.onToggle( + "$miscSectionId.otp", + setOf( + DFilter.ByOtp, + ), + ) + } + + val filterCustomListFlow = flowOf(Unit) + .map { + filterCustomTypesAll.map { it.second } + filterCustomAll + } + .aaa( + sectionId = customSectionId, + sectionTitle = translate(Res.strings.custom), + collapse = false, + ) + .filterSection(params.section.misc) + + return combine( + filterCustomListFlow, + filterAccountListFlow, + filterOrganizationListFlow, + filterTypeListFlow, + filterFolderListFlow, + filterCollectionListFlow, + filterMiscListFlow, + ) { a -> a.flatMap { it } } + .combine(collapsedSectionIdsSink) { items, collapsedSectionIds -> + var skippedSectionId: String? = null + + val out = mutableListOf() + items.forEach { item -> + if (item is FilterItem.Section) { + val collapsed = item.sectionId in collapsedSectionIds + skippedSectionId = item.sectionId.takeIf { collapsed } + + out += if (collapsed) { + item.copy(expanded = false) + } else { + item + } + } else { + if (item.sectionId != skippedSectionId) { + out += item + } + } + } + out + } + .combine(outputCipherFlow) { items, outputCiphers -> + val checkedSectionIds = items + .asSequence() + .mapNotNull { + when (it) { + is FilterItem.Section -> null + is FilterItem.Item -> it.takeIf { it.checked } + ?.sectionId + } + } + .toSet() + + val out = mutableListOf() + items.forEach { item -> + when (item) { + is FilterItem.Section -> out += item + is FilterItem.Item -> { + val fastEnabled = item.checked || + // If one of the items in a section is enabled, then + // enable the whole section. + item.sectionId in checkedSectionIds + val enabled = fastEnabled || kotlin.run { + item.filters + .any { filter -> + val filterPredicate = filter.prepare(directDI, outputCiphers) + outputCiphers.any(filterPredicate) + } + } + + if (enabled) { + out += item + return@forEach + } + + out += item.copy(onClick = null) + } + } + } + out + } + .combine(input.filterFlow) { a, b -> + OurFilterResult( + rev = b.id, + items = a, + onClear = input.onClear.takeIf { b.id != 0 }, + ) + } + .flowOn(Dispatchers.Default) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/screen/VaultListItemMapping.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/screen/VaultListItemMapping.kt new file mode 100644 index 00000000..74be1bb4 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/screen/VaultListItemMapping.kt @@ -0,0 +1,325 @@ +package com.artemchep.keyguard.feature.home.vault.screen + +import androidx.compose.foundation.layout.Row +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.ContentCopy +import androidx.compose.ui.text.AnnotatedString +import com.artemchep.keyguard.common.io.attempt +import com.artemchep.keyguard.common.io.effectTap +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.io.toIO +import com.artemchep.keyguard.common.model.DOrganization +import com.artemchep.keyguard.common.model.DSecret +import com.artemchep.keyguard.common.model.iconImageVector +import com.artemchep.keyguard.common.model.login +import com.artemchep.keyguard.common.model.password +import com.artemchep.keyguard.common.model.passwordRevisionDate +import com.artemchep.keyguard.common.model.passwordStrength +import com.artemchep.keyguard.common.usecase.CopyText +import com.artemchep.keyguard.common.usecase.GetTotpCode +import com.artemchep.keyguard.feature.favicon.AppIconUrl +import com.artemchep.keyguard.feature.home.vault.component.VaultViewTotpBadge +import com.artemchep.keyguard.feature.home.vault.component.obscureCardNumber +import com.artemchep.keyguard.feature.home.vault.model.VaultItem2 +import com.artemchep.keyguard.feature.home.vault.model.VaultItemIcon +import com.artemchep.keyguard.feature.navigation.state.TranslatorScope +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItemAction +import com.artemchep.keyguard.ui.concealedText +import kotlinx.collections.immutable.toImmutableList +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.flow.StateFlow + +suspend fun DSecret.toVaultListItem( + copy: CopyText, + translator: TranslatorScope, + getTotpCode: GetTotpCode, + appIcons: Boolean, + websiteIcons: Boolean, + concealFields: Boolean, + groupId: String? = null, + organizationsById: Map, + onClick: (List) -> VaultItem2.Item.Action, + onClickPasskey: suspend (DSecret.Login.Fido2Credentials) -> (() -> Unit)?, + localStateFlow: StateFlow, +): VaultItem2.Item { + val cf = concealFields || reprompt + val d = when (type) { + DSecret.Type.Login -> + createLogin( + copy = copy, + translator = translator, + getTotpCode = getTotpCode, + concealFields = cf, + ) + + DSecret.Type.Card -> + createCard( + copy = copy, + translator = translator, + concealFields = cf, + ) + + DSecret.Type.Identity -> + createIdentity( + copy = copy, + translator = translator, + concealFields = cf, + ) + + DSecret.Type.SecureNote -> + createNote( + copy = copy, + translator = translator, + concealFields = cf, + ) + + else -> createUnknown() + } + + val icon = toVaultItemIcon( + appIcons = appIcons, + websiteIcons = websiteIcons, + ) + return VaultItem2.Item( + id = id, + source = this, + accentLight = accentLight, + accentDark = accentDark, + accountId = accountId, + groupId = groupId, + revisionDate = revisionDate, + createdDate = createdDate, + feature = when { + organizationId != null -> { + val org = organizationsById[organizationId] + if (org != null) { + VaultItem2.Item.Feature.Organization( + name = org.name, + accentColors = org.accentColor, + ) + } else { + VaultItem2.Item.Feature.None + } + } + + login?.totp?.token != null -> { + val token = login.totp.token + VaultItem2.Item.Feature.Totp(token) + } + + else -> VaultItem2.Item.Feature.None + }, + copyText = copy, + token = login?.totp?.token, + passkeys = login?.fido2Credentials.orEmpty() + .mapNotNull { + val onClick = onClickPasskey(it) + ?: return@mapNotNull null + VaultItem2.Item.Passkey( + source = it, + onClick = onClick, + ) + } + .toImmutableList(), + password = DSecret.login.password.getOrNull(this), + passwordRevisionDate = DSecret.login.passwordRevisionDate.getOrNull(this), + score = DSecret.login.passwordStrength.getOrNull(this), + icon = icon, + type = type.name, + folderId = folderId, + favourite = favorite, + attachments = attachments.isNotEmpty(), + title = AnnotatedString(name.trim()), + text = d.text.trim(), + action = onClick(d.actions), + localStateFlow = localStateFlow, + ) +} + +fun DSecret.toVaultItemIcon( + appIcons: Boolean, + websiteIcons: Boolean, +): VaultItemIcon = kotlin.run { + val vectorIconSrc = type.iconImageVector() + val cardIcon = run { + val cardIcon = card + ?.creditCardType + ?.icon + if (cardIcon != null) { + VaultItemIcon.ImageIcon( + imageRes = cardIcon, + ) + } else { + null + } + } + val textIcon = if (name.isNotBlank()) { + VaultItemIcon.TextIcon( + text = name.take(2), + ) + } else { + null + } + val vectorIcon = VaultItemIcon.VectorIcon( + imageVector = vectorIconSrc, + ) + val appIcon = if (appIcons) { + uris + .firstOrNull { uri -> uri.uri.startsWith("androidapp://") } + ?.let { uri -> + val packageName = uri.uri.substringAfter("androidapp://") + VaultItemIcon.AppIcon( + data = AppIconUrl(packageName), + fallback = vectorIcon, + ) + } + } else { + null + } + val websiteIcon = if (websiteIcons) { + favicon + ?.let { url -> + VaultItemIcon.WebsiteIcon( + data = url, + fallback = appIcon ?: vectorIcon, + ) + } + } else { + null + } + websiteIcon ?: appIcon ?: cardIcon ?: textIcon ?: vectorIcon +} + +private data class TypeSpecific( + val text: String, + val actions: List = emptyList(), +) + +private suspend fun DSecret.createLogin( + copy: CopyText, + translator: TranslatorScope, + getTotpCode: GetTotpCode, + concealFields: Boolean, +): TypeSpecific { + val actions = listOfNotNull( + copy.FlatItemAction( + title = translator.translate(Res.strings.copy_username), + value = login?.username, + ), + copy.FlatItemAction( + title = translator.translate(Res.strings.copy_password), + value = login?.password, + hidden = concealFields, + ), + login?.totp?.run { + FlatItemAction( + icon = Icons.Outlined.ContentCopy, + title = translator.translate(Res.strings.copy_otp_code), + trailing = { + Row { + VaultViewTotpBadge( + totpToken = login.totp.token, + ) + } + }, + onClick = { + getTotpCode(token) + .toIO() + .effectTap { code -> + copy.copy(code.code, false) + } + .attempt() + .launchIn(GlobalScope) + }, + ) + }, + ) + return TypeSpecific( + text = login?.username + ?: login?.fido2Credentials + ?.firstNotNullOfOrNull { it.userDisplayName } + ?: "", + actions = actions, + ) +} + +private fun DSecret.createCard( + copy: CopyText, + translator: TranslatorScope, + concealFields: Boolean, +): TypeSpecific { + val actions = listOfNotNull( + copy.FlatItemAction( + title = translator.translate(Res.strings.copy_card_number), + value = card?.number, + hidden = concealFields, + ), + copy.FlatItemAction( + title = translator.translate(Res.strings.copy_cvv_code), + value = card?.code, + hidden = concealFields, + ), + ) + val text = kotlin.run { + val textRaw = card?.number.orEmpty() + obscureCardNumber(textRaw) + } + return TypeSpecific( + text = text, + actions = actions, + ) +} + +private fun DSecret.createIdentity( + copy: CopyText, + translator: TranslatorScope, + concealFields: Boolean, +): TypeSpecific { + val actions = listOfNotNull( + copy.FlatItemAction( + title = translator.translate(Res.strings.copy_phone_number), + value = identity?.phone, + ), + copy.FlatItemAction( + title = translator.translate(Res.strings.copy_email), + value = identity?.email, + ), + copy.FlatItemAction( + title = translator.translate(Res.strings.copy_passport_number), + value = identity?.passportNumber, + hidden = concealFields, + ), + copy.FlatItemAction( + title = translator.translate(Res.strings.copy_license_number), + value = identity?.licenseNumber, + hidden = concealFields, + ), + ) + val text = identity?.firstName.orEmpty() + return TypeSpecific( + text = text, + actions = actions, + ) +} + +private fun DSecret.createNote( + copy: CopyText, + translator: TranslatorScope, + concealFields: Boolean, +): TypeSpecific { + val text = if (reprompt) { + concealedText() + } else { + notes + } + return TypeSpecific( + text = text, + ) +} + +private fun DSecret.createUnknown(): TypeSpecific { + return TypeSpecific( + text = "", + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/screen/VaultListMode.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/screen/VaultListMode.kt new file mode 100644 index 00000000..d652d1c0 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/screen/VaultListMode.kt @@ -0,0 +1,7 @@ +package com.artemchep.keyguard.feature.home.vault.screen + +sealed interface VaultListMode { + data object Normal : VaultListMode + + data object Find : VaultListMode +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/screen/VaultListRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/screen/VaultListRoute.kt new file mode 100644 index 00000000..0ecdd710 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/screen/VaultListRoute.kt @@ -0,0 +1,16 @@ +package com.artemchep.keyguard.feature.home.vault.screen + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.home.vault.VaultRoute +import com.artemchep.keyguard.feature.navigation.Route + +data class VaultListRoute( + val args: VaultRoute.Args, +) : Route { + @Composable + override fun Content() { + VaultListScreen( + args = args, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/screen/VaultListScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/screen/VaultListScreen.kt new file mode 100644 index 00000000..1b5f6530 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/screen/VaultListScreen.kt @@ -0,0 +1,646 @@ +package com.artemchep.keyguard.feature.home.vault.screen + +import androidx.compose.animation.ExperimentalAnimationApi +import androidx.compose.foundation.ExperimentalFoundationApi +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ExperimentalLayoutApi +import androidx.compose.foundation.layout.FlowRow +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.heightIn +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.layout.widthIn +import androidx.compose.foundation.lazy.LazyListState +import androidx.compose.foundation.lazy.items +import androidx.compose.material.ExperimentalMaterialApi +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Add +import androidx.compose.material.icons.outlined.History +import androidx.compose.material.icons.outlined.PersonAdd +import androidx.compose.material.pullrefresh.pullRefresh +import androidx.compose.material.pullrefresh.rememberPullRefreshState +import androidx.compose.material3.DropdownMenu +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.SideEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.runtime.snapshotFlow +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.input.nestedscroll.nestedScroll +import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.AppMode +import com.artemchep.keyguard.LocalAppMode +import com.artemchep.keyguard.feature.home.vault.VaultRoute +import com.artemchep.keyguard.feature.home.vault.component.SearchTextField +import com.artemchep.keyguard.feature.home.vault.component.VaultListItem +import com.artemchep.keyguard.feature.home.vault.model.FilterItem +import com.artemchep.keyguard.feature.home.vault.model.VaultItem2 +import com.artemchep.keyguard.feature.navigation.LocalNavigationController +import com.artemchep.keyguard.feature.navigation.LocalNavigationEntry +import com.artemchep.keyguard.feature.navigation.LocalNavigationRouter +import com.artemchep.keyguard.feature.navigation.NavigationIcon +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.feature.search.filter.FilterButton +import com.artemchep.keyguard.feature.search.filter.FilterScreen +import com.artemchep.keyguard.feature.search.filter.component.FilterItemComposable +import com.artemchep.keyguard.feature.search.sort.SortButton +import com.artemchep.keyguard.feature.twopane.TwoPaneScreen +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.CollectedEffect +import com.artemchep.keyguard.ui.Compose +import com.artemchep.keyguard.ui.DefaultFab +import com.artemchep.keyguard.ui.DefaultProgressBar +import com.artemchep.keyguard.ui.DefaultSelection +import com.artemchep.keyguard.ui.DropdownMenuItemFlat +import com.artemchep.keyguard.ui.DropdownMinWidth +import com.artemchep.keyguard.ui.DropdownScopeImpl +import com.artemchep.keyguard.ui.FabState +import com.artemchep.keyguard.ui.FlatItem +import com.artemchep.keyguard.ui.FlatItemAction +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.OptionsButton +import com.artemchep.keyguard.ui.ScaffoldLazyColumn +import com.artemchep.keyguard.ui.SmallFab +import com.artemchep.keyguard.ui.focus.FocusRequester2 +import com.artemchep.keyguard.ui.focus.focusRequester2 +import com.artemchep.keyguard.ui.icons.ChevronIcon +import com.artemchep.keyguard.ui.icons.IconBox +import com.artemchep.keyguard.ui.pulltosearch.PullToSearch +import com.artemchep.keyguard.ui.skeleton.SkeletonFilter +import com.artemchep.keyguard.ui.skeleton.SkeletonItem +import com.artemchep.keyguard.ui.theme.combineAlpha +import com.artemchep.keyguard.ui.toolbar.CustomToolbar +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.filter +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.flow.withIndex + +@Composable +fun VaultListScreen( + args: VaultRoute.Args, +) { + val state = vaultListScreenState( + args = args, + highlightBackgroundColor = MaterialTheme.colorScheme.tertiaryContainer, + highlightContentColor = MaterialTheme.colorScheme.onTertiaryContainer, + mode = LocalAppMode.current, + ) + val old = remember { + mutableStateOf(null) + } + SideEffect { + old.value = state + } + + val wtf = (state.content as? VaultListState.Content.Items)?.onSelected + Compose { + val screenId = LocalNavigationEntry.current.id + val screenStack = LocalNavigationRouter.current.value + val childBackStackFlow = remember( + screenId, + screenStack, + ) { + snapshotFlow { + val backStack = screenStack + .indexOfFirst { it.id == screenId } + // take the next screen + .inc() + // check if in range + .takeIf { it in 1 until screenStack.size } + ?.let { index -> + screenStack.subList( + fromIndex = index, + toIndex = screenStack.size, + ) + } + .orEmpty() + backStack + } + } + LaunchedEffect(wtf, childBackStackFlow) { + childBackStackFlow.collect { backStack -> + val firstRoute = backStack.firstOrNull()?.route as? VaultViewRoute? + wtf?.invoke(firstRoute?.itemId) + } + } + } + + val xd by rememberUpdatedState(LocalNavigationEntry.current.id) + val controller by rememberUpdatedState(LocalNavigationController.current) + CollectedEffect(state.sideEffects.showBiometricPromptFlow) { + val route = VaultViewRoute( + itemId = it.id, + accountId = it.accountId, + ) + val intent = NavigationIntent.Composite( + listOf( + NavigationIntent.PopById(xd), + NavigationIntent.NavigateToRoute(route), + ), + ) + controller.queue(intent) +// bs.push(route) + } + + val focusRequester = remember { FocusRequester2() } + TwoPaneScreen( + detail = { modifier -> + VaultListFilterScreen( + modifier = modifier, + state = state, + ) + }, + ) { modifier, detailIsVisible -> + VaultHomeScreenListPane( + modifier = modifier, + state = state, + focusRequester = focusRequester, + title = args.appBar?.title, + subtitle = args.appBar?.subtitle, + fab = args.canAddSecrets, + showFilter = !detailIsVisible, + preselect = args.preselect, + ) + } + + LaunchedEffect(state.showKeyboard) { + if (state.showKeyboard) { + delay(200L) // FIXME: Delete this! + focusRequester.requestFocus() + } + } +} + +@Composable +private fun VaultListFilterScreen( + modifier: Modifier = Modifier, + state: VaultListState, +) { + val count = (state.content as? VaultListState.Content.Items)?.count + val filters = state.filters + val clearFilters = state.clearFilters + FilterScreen( + modifier = modifier, + count = count, + items = filters, + onClear = clearFilters, + actions = { + VaultListSortButton( + state = state, + ) + OptionsButton( + actions = state.actions, + ) + }, + ) +} + +@Composable +private fun VaultListFilterButton( + modifier: Modifier = Modifier, + state: VaultListState, +) { + val count = (state.content as? VaultListState.Content.Items)?.count + val filters = state.filters + val clearFilters = state.clearFilters + FilterButton( + modifier = modifier, + count = count, + items = filters, + onClear = clearFilters, + ) +} + +@Composable +private fun VaultListSortButton( + modifier: Modifier = Modifier, + state: VaultListState, +) { + val filters = state.sort + val clearFilters = state.clearSort + SortButton( + modifier = modifier, + items = filters, + onClear = clearFilters, + ) +} + +@OptIn( + ExperimentalMaterial3Api::class, + ExperimentalFoundationApi::class, + ExperimentalLayoutApi::class, + ExperimentalAnimationApi::class, + ExperimentalMaterialApi::class, +) +@Composable +fun VaultHomeScreenListPane( + modifier: Modifier, + state: VaultListState, + focusRequester: FocusRequester2, + title: String?, + subtitle: String?, + fab: Boolean, + showFilter: Boolean, + preselect: Boolean, +) { + val itemsState = (state.content as? VaultListState.Content.Items) + + val listRevision = itemsState?.revision + val listState = remember { + LazyListState( + firstVisibleItemIndex = listRevision?.firstVisibleItemIndex?.value ?: 0, + firstVisibleItemScrollOffset = listRevision?.firstVisibleItemScrollOffset?.value ?: 0, + ) + } + + LaunchedEffect(listRevision?.id) { + // Scroll to the start of the list if the list has + // no real content. + if (listRevision == null) { + listState.scrollToItem(0, 0) + return@LaunchedEffect + } + + // TODO: How do you wait till the layout state start to represent + // the actual data? + snapshotFlow { listState.layoutInfo.totalItemsCount } + .withIndex() + .filter { + it.index > 0 || it.value == itemsState.list.size + } + .first() + + val index = listRevision.firstVisibleItemIndex.value + val offset = listRevision.firstVisibleItemScrollOffset.value + listState.scrollToItem(index, offset) + } + + LaunchedEffect(listRevision?.onScroll) { + if (listRevision == null) return@LaunchedEffect // do nothing, just cancel old job + + val visibleItemScrollStateFlow = snapshotFlow { + val index = listState.firstVisibleItemIndex + val offset = listState.firstVisibleItemScrollOffset + index to offset + } + visibleItemScrollStateFlow.collect { (index, offset) -> + // TODO: How do you wait till the layout state start to represent + // the actual data? + if (listState.layoutInfo.totalItemsCount != itemsState.list.size) { + return@collect + } + + listRevision.onScroll( + index, + offset, + ) + } + } + + val dp = remember { + mutableStateOf(false) + } + val rp = remember { + mutableStateOf(false) + } + if (state.primaryActions.isEmpty()) { + dp.value = false + } + val updatedSelectCipher by rememberUpdatedState(newValue = state.selectCipher) + + val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior() + val pullRefreshState = rememberPullRefreshState( + refreshing = false, + onRefresh = { + focusRequester.requestFocus() + }, + ) + ScaffoldLazyColumn( + modifier = modifier + .pullRefresh(pullRefreshState) + .nestedScroll(scrollBehavior.nestedScrollConnection), + topAppBarScrollBehavior = scrollBehavior, + topBar = { + CustomToolbar( + scrollBehavior = scrollBehavior, + ) { + Column { + val hasTitle = title != null || subtitle != null + if (hasTitle) { + Row( + modifier = Modifier + .heightIn(min = 64.dp), + verticalAlignment = Alignment.CenterVertically, + ) { + Spacer(Modifier.width(4.dp)) + NavigationIcon() + Spacer(Modifier.width(4.dp)) + Column( + modifier = Modifier + .weight(1f) + .align(Alignment.CenterVertically), + ) { + if (subtitle != null) { + Text( + text = subtitle, + style = MaterialTheme.typography.labelSmall, + color = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + overflow = TextOverflow.Ellipsis, + maxLines = 2, + ) + } + if (title != null) { + Text( + text = title, + style = MaterialTheme.typography.titleMedium, + overflow = TextOverflow.Ellipsis, + maxLines = 1, + ) + } + } + if (showFilter) { + Spacer(Modifier.width(4.dp)) + VaultListFilterButton( + state = state, + ) + VaultListSortButton( + state = state, + ) + OptionsButton( + actions = state.actions, + ) + } + Spacer(Modifier.width(4.dp)) + } + } else { + } + SearchTextField( + modifier = Modifier + .focusRequester2(focusRequester), + text = state.query.state.value, + placeholder = stringResource(Res.strings.vault_main_search_placeholder), + searchIcon = !hasTitle, + leading = { + if (!hasTitle) { + NavigationIcon() + } + }, + trailing = { + Row( + verticalAlignment = Alignment.CenterVertically, + ) { + if (!hasTitle && showFilter) { + VaultListFilterButton( + state = state, + ) + VaultListSortButton( + state = state, + ) + OptionsButton( + actions = state.actions, + ) + } + } + }, + onTextChange = state.query.onChange, + onGoClick = null, + ) + } + } + }, + floatingActionState = run { + val fabVisible = fab && state.primaryActions.isNotEmpty() + val fabState = if (fabVisible) { + // If there's only one primary action, then there's no + // need to show the dropdown. + val onClick = run { + val action = + state.primaryActions.firstNotNullOfOrNull { it as? FlatItemAction } + action?.onClick + ?.takeIf { + val count = state.primaryActions + .count { it is FlatItemAction } + count == 1 + } + } ?: + // lambda + { + dp.value = true + } + FabState( + onClick = onClick, + model = null, + ) + } else { + null + } + rememberUpdatedState(newValue = fabState) + }, + floatingActionButton = { + Column( + horizontalAlignment = Alignment.End, + verticalArrangement = Arrangement.spacedBy(16.dp), + ) { + SmallFab( + onClick = { + rp.value = true + }, + icon = { + IconBox(main = Icons.Outlined.History) + + RecentsButtonRaw( + visible = rp, + onDismissRequest = { + rp.value = false + }, + onValueChange = { cipher -> + updatedSelectCipher?.invoke(cipher) + }, + ) + }, + ) + DefaultFab( + icon = { + IconBox(main = Icons.Outlined.Add) + + // Inject the dropdown popup to the bottom of the + // content. + val onDismissRequest = remember(dp) { + // lambda + { + dp.value = false + } + } + DropdownMenu( + modifier = Modifier + .widthIn(min = DropdownMinWidth), + expanded = dp.value, + onDismissRequest = onDismissRequest, + ) { + val scope = DropdownScopeImpl(this, onDismissRequest = onDismissRequest) + with(scope) { + state.primaryActions.forEachIndexed { index, action -> + DropdownMenuItemFlat( + action = action, + ) + } + } + } + }, + text = { + Text( + text = stringResource(Res.strings.vault_main_new_item_button), + ) + }, + ) + } + }, + pullRefreshState = pullRefreshState, + bottomBar = { + val selectionOrNull = (state.content as? VaultListState.Content.Items)?.selection + DefaultSelection( + state = selectionOrNull, + ) + }, + overlay = { + DefaultProgressBar( + modifier = Modifier, + visible = state.content is VaultListState.Content.Items && + state.revision != state.content.revision.id, + ) + + PullToSearch( + modifier = Modifier + .padding(contentPadding.value), + pullRefreshState = pullRefreshState, + ) + }, + listState = listState, + ) { + when (state.content) { + is VaultListState.Content.Skeleton -> { + item { + Column( + modifier = Modifier, + ) { + FlowRow( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 8.dp), + horizontalArrangement = Arrangement.spacedBy(8.dp), + verticalArrangement = Arrangement.spacedBy(8.dp), + ) { + for (i in 1..5) { + SkeletonFilter() + } + } + Spacer(modifier = Modifier.height(16.dp)) + } + } + // Show a bunch of skeleton items, so it makes an impression of a + // fully loaded screen. + for (i in 0..3) { + item(i) { + SkeletonItem( + avatar = true, + ) + } + } + } + + else -> { + if (state.content is VaultListState.Content.AddAccount) { + item("header.add_account") { + FlatItem( + elevation = 1.dp, + title = { + Text( + text = stringResource(Res.strings.account_main_add_account_title), + style = MaterialTheme.typography.titleMedium, + ) + }, + trailing = { + ChevronIcon() + }, + leading = { + Icon(Icons.Outlined.PersonAdd, contentDescription = null) + }, + onClick = state.content.onAddAccount, + ) + } + } else { + } + + val list = (state.content as? VaultListState.Content.Items)?.list.orEmpty() + items( + items = list, + key = { model -> model.id }, + ) { model -> + if (model is VaultItem2.QuickFilters && showFilter) { + Box( + modifier = Modifier + .animateItemPlacement(), + ) { + val arg2 = LocalAppMode.current + val llll = remember(state.filters) { + state.filters + .filter { it.sectionId == "custom" && it is FilterItem.Item } + .map { it as FilterItem.Item } + } + if (llll.isNotEmpty() && fab && arg2 is AppMode.Main && state.query.state.value == "") Column( + modifier = Modifier, + ) { + FlowRow( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 8.dp), + horizontalArrangement = Arrangement.spacedBy(8.dp), + verticalArrangement = Arrangement.spacedBy(8.dp), + ) { + llll.forEach { item -> + FilterItemComposable( + leading = item.leading, + title = item.title, + text = null, + checked = item.checked, + onClick = item.onClick, + ) + } + } + Spacer(modifier = Modifier.height(16.dp)) + } + } + } else { + VaultListItem( + modifier = Modifier + .animateItemPlacement(), + item = model, + ) + } + } + } + } + } +} + +@Composable +private fun NoItemsPlaceholder() { +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/screen/VaultListState.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/screen/VaultListState.kt new file mode 100644 index 00000000..294a5a73 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/screen/VaultListState.kt @@ -0,0 +1,89 @@ +package com.artemchep.keyguard.feature.home.vault.screen + +import androidx.compose.runtime.Immutable +import androidx.compose.runtime.mutableStateOf +import arrow.optics.optics +import com.artemchep.keyguard.common.model.DSecret +import com.artemchep.keyguard.feature.auth.common.TextFieldModel2 +import com.artemchep.keyguard.feature.home.vault.model.FilterItem +import com.artemchep.keyguard.feature.home.vault.model.SortItem +import com.artemchep.keyguard.feature.home.vault.model.VaultItem2 +import com.artemchep.keyguard.ui.ContextItem +import com.artemchep.keyguard.ui.FlatItemAction +import com.artemchep.keyguard.ui.Selection +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.emptyFlow + +@Immutable +@optics +data class VaultListState( + val revision: Int = 0, + val query: TextFieldModel2 = TextFieldModel2(mutableStateOf("")), + val filters: List = emptyList(), + val sort: List = emptyList(), + val clearFilters: (() -> Unit)? = null, + val clearSort: (() -> Unit)? = null, + val selectCipher: ((DSecret) -> Unit)? = null, + val showKeyboard: Boolean = false, + val primaryActions: List = emptyList(), + val actions: List = emptyList(), + val content: Content = Content.Skeleton, + val sideEffects: SideEffects = SideEffects(), +) { + companion object; + + sealed interface Content { + companion object + + data object Skeleton : Content + + @optics + data class AddAccount( + val onAddAccount: (() -> Unit)? = null, + ) : Content { + companion object + } + + @optics + data class Items( + val revision: Revision = Revision(), + val selection: Selection? = null, + val list: List = emptyList(), + val count: Int = 0, + val onSelected: (String?) -> Unit = { }, + val onGoClick: (() -> Unit)? = null, + ) : Content { + companion object; + + @optics + data class Revision( + /** + * Current revision of the items; each revision you should scroll to + * the top of the list. + */ + val id: Int = 0, + val firstVisibleItemIndex: Mutable = MutableImpl(0), + val firstVisibleItemScrollOffset: Mutable = MutableImpl(0), + val onScroll: (Int, Int) -> Unit = { _, _ -> }, + ) : Content { + companion object; + + interface Mutable { + val value: T + } + + data class MutableImpl( + override val value: T, + ) : Mutable + } + } + } + + @Immutable + @optics + data class SideEffects( + val showBiometricPromptFlow: Flow = emptyFlow(), + ) { + companion object + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducer.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducer.kt new file mode 100644 index 00000000..7b8bba5e --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/screen/VaultListStateProducer.kt @@ -0,0 +1,1878 @@ +package com.artemchep.keyguard.feature.home.vault.screen + +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.AutoAwesome +import androidx.compose.material.icons.outlined.CalendarMonth +import androidx.compose.material.icons.outlined.Delete +import androidx.compose.material.icons.outlined.Download +import androidx.compose.material.icons.outlined.Edit +import androidx.compose.material.icons.outlined.Info +import androidx.compose.material.icons.outlined.Keyboard +import androidx.compose.material.icons.outlined.Lock +import androidx.compose.material.icons.outlined.Password +import androidx.compose.material.icons.outlined.Save +import androidx.compose.material.icons.outlined.Security +import androidx.compose.material.icons.outlined.SortByAlpha +import androidx.compose.material3.Icon +import androidx.compose.material3.Switch +import androidx.compose.runtime.Composable +import androidx.compose.runtime.mutableStateOf +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.vector.ImageVector +import arrow.core.identity +import arrow.core.partially1 +import arrow.optics.Getter +import com.artemchep.keyguard.AppMode +import com.artemchep.keyguard.autofillTarget +import com.artemchep.keyguard.common.io.attempt +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.io.nullable +import com.artemchep.keyguard.common.io.parallelSearch +import com.artemchep.keyguard.common.model.AccountTask +import com.artemchep.keyguard.common.model.AutofillTarget +import com.artemchep.keyguard.common.model.DFilter +import com.artemchep.keyguard.common.model.DFolder +import com.artemchep.keyguard.common.model.DSecret +import com.artemchep.keyguard.common.model.formatH +import com.artemchep.keyguard.common.model.iconImageVector +import com.artemchep.keyguard.common.model.titleH +import com.artemchep.keyguard.common.service.clipboard.ClipboardService +import com.artemchep.keyguard.common.service.deeplink.DeeplinkService +import com.artemchep.keyguard.common.usecase.CipherToolbox +import com.artemchep.keyguard.common.usecase.ClearVaultSession +import com.artemchep.keyguard.common.usecase.DateFormatter +import com.artemchep.keyguard.common.usecase.GetAccounts +import com.artemchep.keyguard.common.usecase.GetAppIcons +import com.artemchep.keyguard.common.usecase.GetCanWrite +import com.artemchep.keyguard.common.usecase.GetCipherOpenedHistory +import com.artemchep.keyguard.common.usecase.GetCiphers +import com.artemchep.keyguard.common.usecase.GetCollections +import com.artemchep.keyguard.common.usecase.GetConcealFields +import com.artemchep.keyguard.common.usecase.GetFolders +import com.artemchep.keyguard.common.usecase.GetOrganizations +import com.artemchep.keyguard.common.usecase.GetPasswordStrength +import com.artemchep.keyguard.common.usecase.GetProfiles +import com.artemchep.keyguard.common.usecase.GetSuggestions +import com.artemchep.keyguard.common.usecase.GetTotpCode +import com.artemchep.keyguard.common.usecase.GetWebsiteIcons +import com.artemchep.keyguard.common.usecase.PasskeyTargetCheck +import com.artemchep.keyguard.common.usecase.QueueSyncAll +import com.artemchep.keyguard.common.usecase.RenameFolderById +import com.artemchep.keyguard.common.usecase.SupervisorRead +import com.artemchep.keyguard.common.util.flow.EventFlow +import com.artemchep.keyguard.common.util.flow.persistingStateIn +import com.artemchep.keyguard.feature.attachments.AttachmentsRoute +import com.artemchep.keyguard.feature.attachments.SelectableItemState +import com.artemchep.keyguard.feature.attachments.SelectableItemStateRaw +import com.artemchep.keyguard.feature.auth.common.TextFieldModel2 +import com.artemchep.keyguard.feature.auth.login.LoginRoute +import com.artemchep.keyguard.feature.confirmation.ConfirmationResult +import com.artemchep.keyguard.feature.confirmation.ConfirmationRoute +import com.artemchep.keyguard.feature.decorator.ItemDecorator +import com.artemchep.keyguard.feature.decorator.ItemDecoratorDate +import com.artemchep.keyguard.feature.decorator.ItemDecoratorNone +import com.artemchep.keyguard.feature.decorator.ItemDecoratorTitle +import com.artemchep.keyguard.feature.duplicates.createCipherSelectionFlow +import com.artemchep.keyguard.feature.generator.history.mapLatestScoped +import com.artemchep.keyguard.feature.home.vault.VaultRoute +import com.artemchep.keyguard.feature.home.vault.add.AddRoute +import com.artemchep.keyguard.feature.home.vault.add.LeAddRoute +import com.artemchep.keyguard.feature.home.vault.component.obscurePassword +import com.artemchep.keyguard.feature.home.vault.model.SortItem +import com.artemchep.keyguard.feature.home.vault.model.VaultItem2 +import com.artemchep.keyguard.feature.home.vault.search.IndexedText +import com.artemchep.keyguard.feature.home.vault.search.filter.FilterHolder +import com.artemchep.keyguard.feature.home.vault.search.find +import com.artemchep.keyguard.feature.home.vault.search.findAlike +import com.artemchep.keyguard.feature.home.vault.search.sort.AlphabeticalSort +import com.artemchep.keyguard.feature.home.vault.search.sort.LastCreatedSort +import com.artemchep.keyguard.feature.home.vault.search.sort.LastModifiedSort +import com.artemchep.keyguard.feature.home.vault.search.sort.PasswordLastModifiedSort +import com.artemchep.keyguard.feature.home.vault.search.sort.PasswordSort +import com.artemchep.keyguard.feature.home.vault.search.sort.PasswordStrengthSort +import com.artemchep.keyguard.feature.home.vault.search.sort.Sort +import com.artemchep.keyguard.feature.home.vault.util.AlphabeticalSortMinItemsSize +import com.artemchep.keyguard.feature.localization.TextHolder +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.feature.navigation.registerRouteResultReceiver +import com.artemchep.keyguard.feature.navigation.state.PersistedStorage +import com.artemchep.keyguard.feature.navigation.state.copy +import com.artemchep.keyguard.feature.navigation.state.produceScreenState +import com.artemchep.keyguard.feature.passkeys.PasskeysCredentialViewRoute +import com.artemchep.keyguard.feature.search.search.SEARCH_DEBOUNCE +import com.artemchep.keyguard.leof +import com.artemchep.keyguard.platform.parcelize.LeParcelable +import com.artemchep.keyguard.platform.parcelize.LeParcelize +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItemAction +import com.artemchep.keyguard.ui.buildContextItems +import com.artemchep.keyguard.ui.icons.ChevronIcon +import com.artemchep.keyguard.ui.icons.SyncIcon +import com.artemchep.keyguard.ui.icons.icon +import com.artemchep.keyguard.ui.selection.selectionHandle +import dev.icerock.moko.resources.StringResource +import kotlinx.collections.immutable.persistentListOf +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.debounce +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.flow.flowOn +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.mapLatest +import kotlinx.coroutines.flow.onEach +import kotlinx.coroutines.flow.shareIn +import kotlinx.coroutines.flow.stateIn +import kotlinx.serialization.Serializable +import org.kodein.di.DirectDI +import org.kodein.di.compose.localDI +import org.kodein.di.direct +import org.kodein.di.instance +import kotlin.time.ExperimentalTime +import kotlin.time.measureTimedValue + +@LeParcelize +data class OhOhOh( + val id: String? = null, + val offset: Int = 0, + val revision: Int = 0, +) : LeParcelable + +@LeParcelize +@Serializable +data class ComparatorHolder( + val comparator: Sort, + val reversed: Boolean = false, + val favourites: Boolean = false, +) : LeParcelable { + companion object { + fun of(map: Map): ComparatorHolder { + return ComparatorHolder( + comparator = Sort.valueOf(map["comparator"].toString()) ?: AlphabeticalSort, + reversed = map["reversed"].toString() == "true", + favourites = map["favourites"].toString() == "true", + ) + } + } + + fun toMap() = mapOf( + "comparator" to comparator.id, + "reversed" to reversed, + "favourites" to favourites, + ) +} + +@Composable +fun vaultListScreenState( + args: VaultRoute.Args, + highlightBackgroundColor: Color, + highlightContentColor: Color, + mode: AppMode, +): VaultListState = with(localDI().direct) { + vaultListScreenState( + directDI = this, + args = args, + highlightBackgroundColor = highlightBackgroundColor, + highlightContentColor = highlightContentColor, + mode = mode, + deeplinkService = instance(), + clearVaultSession = instance(), + getSuggestions = instance(), + getAccounts = instance(), + getProfiles = instance(), + getCanWrite = instance(), + getCiphers = instance(), + getFolders = instance(), + getCollections = instance(), + getOrganizations = instance(), + getTotpCode = instance(), + getConcealFields = instance(), + getAppIcons = instance(), + getWebsiteIcons = instance(), + getPasswordStrength = instance(), + getCipherOpenedHistory = instance(), + passkeyTargetCheck = instance(), + renameFolderById = instance(), + toolbox = instance(), + queueSyncAll = instance(), + syncSupervisor = instance(), + dateFormatter = instance(), + clipboardService = instance(), + ) +} + +@Composable +fun vaultListScreenState( + directDI: DirectDI, + args: VaultRoute.Args, + highlightBackgroundColor: Color, + highlightContentColor: Color, + mode: AppMode, + deeplinkService: DeeplinkService, + getSuggestions: GetSuggestions, + getAccounts: GetAccounts, + getProfiles: GetProfiles, + getCanWrite: GetCanWrite, + getCiphers: GetCiphers, + getFolders: GetFolders, + getCollections: GetCollections, + getOrganizations: GetOrganizations, + getTotpCode: GetTotpCode, + getConcealFields: GetConcealFields, + getAppIcons: GetAppIcons, + getWebsiteIcons: GetWebsiteIcons, + getPasswordStrength: GetPasswordStrength, + getCipherOpenedHistory: GetCipherOpenedHistory, + passkeyTargetCheck: PasskeyTargetCheck, + renameFolderById: RenameFolderById, + clearVaultSession: ClearVaultSession, + toolbox: CipherToolbox, + queueSyncAll: QueueSyncAll, + syncSupervisor: SupervisorRead, + dateFormatter: DateFormatter, + clipboardService: ClipboardService, +): VaultListState = produceScreenState( + key = "vault_list", + initial = VaultListState(), + args = arrayOf( + getAccounts, + getCiphers, + getTotpCode, + dateFormatter, + clipboardService, + ), +) { + val storage = kotlin.run { + val disk = loadDiskHandle("vault.list") + PersistedStorage.InDisk(disk) + } + + val fffFilter = args.filter ?: DFilter.All + println(fffFilter) +// val fffAccountId = DFilter +// .findOne(fffFilter) { f -> +// f.what == DFilter.ById.What.ACCOUNT +// } +// ?.id + val fffFolderId = DFilter + .findOne(fffFilter) { f -> + f.what == DFilter.ById.What.FOLDER + } + ?.id +// val fffCollectionId = DFilter +// .findOne(fffFilter) { f -> +// f.what == DFilter.ById.What.COLLECTION +// } +// ?.id +// val fffOrganizationId = DFilter +// .findOne(fffFilter) { f -> +// f.what == DFilter.ById.What.ORGANIZATION +// } +// ?.id + + fun onRename( + folders: List, + ) { + val route = registerRouteResultReceiver( + route = ConfirmationRoute( + args = ConfirmationRoute.Args( + icon = icon(Icons.Outlined.Edit), + title = "Change folder name", + items = folders + .sortedBy { it.name } + .map { folder -> + ConfirmationRoute.Args.Item.StringItem( + key = folder.id, + value = folder.name, + title = folder.name, + type = ConfirmationRoute.Args.Item.StringItem.Type.Text, + canBeEmpty = false, + ) + }, + ), + ), + ) { + if (it is ConfirmationResult.Confirm) { + val folderIdsToNames = it.data + .mapValues { it.value as String } + renameFolderById(folderIdsToNames) + .launchIn(appScope) + } + } + val intent = NavigationIntent.NavigateToRoute(route) + navigate(intent) + } + + val copy = copy(clipboardService) + val ciphersRawFlow = getCiphers() + + val querySink = mutablePersistedFlow("query") { "" } + val queryState = mutableComposeState(querySink) + + val cipherSink = EventFlow() + + val itemSink = mutablePersistedFlow("lole") { "" } + + val selectionHandle = selectionHandle("selection") + // Automatically remove selection from ciphers + // that do not exist anymore. + getCiphers() + .onEach { ciphers -> + val selectedItemIds = selectionHandle.idsFlow.value + val filteredSelectedItemIds = selectedItemIds + .filter { itemId -> + ciphers.any { it.id == itemId } + } + .toSet() + if (filteredSelectedItemIds.size < selectedItemIds.size) { + selectionHandle.setSelection(filteredSelectedItemIds) + } + } + .launchIn(this) + + val showKeyboardSink = if (args.canAlwaysShowKeyboard) { + mutablePersistedFlow( + key = "keyboard", + storage = storage, + ) { false } + } else { + mutablePersistedFlow( + key = "keyboard", + ) { false } + } + val syncFlow = syncSupervisor + .get(AccountTask.SYNC) + .map { accounts -> + accounts.isNotEmpty() + } + + val sortDefault = ComparatorHolder( + comparator = AlphabeticalSort, + favourites = true, + ) + val sortSink = mutablePersistedFlow( + key = "sort", + serialize = { json, value -> + value.toMap() + }, + deserialize = { json, value -> + ComparatorHolder.of(value) + }, + ) { + if (args.sort != null) { + ComparatorHolder( + comparator = args.sort, + ) + } else { + sortDefault + } + } + + var scrollPositionKey: Any? = null + val scrollPositionSink = mutablePersistedFlow("scroll_state") { OhOhOh() } + + val filterResult = createFilter() + val actionsFlow = kotlin.run { + val actionTrashItem = FlatItemAction( + leading = { + Icon(Icons.Outlined.Delete, null) + }, + title = translate(Res.strings.trash), + onClick = { + val newArgs = args.copy( + appBar = VaultRoute.Args.AppBar( + subtitle = args.appBar?.subtitle + ?: translate(Res.strings.home_vault_label), + title = translate(Res.strings.trash), + ), + trash = true, + preselect = false, + canAddSecrets = false, + ) + val route = VaultListRoute(newArgs) + val intent = NavigationIntent.NavigateToRoute(route) + navigate(intent) + }, + ) + val actionTrashFlow = flowOf(actionTrashItem) + val actionDownloadsItem = FlatItemAction( + leading = { + Icon(Icons.Outlined.Download, null) + }, + title = translate(Res.strings.downloads), + onClick = { + val route = AttachmentsRoute() + val intent = NavigationIntent.NavigateToRoute(route) + navigate(intent) + }, + ) + val actionDownloadsFlow = flowOf(actionDownloadsItem) + val actionGroupFlow = combine( + actionTrashFlow, + actionDownloadsFlow, + ) { array -> + buildContextItems { + section { + array.forEach(this::plusAssign) + } + } + } + + val actionAlwaysShowKeyboardFlow = showKeyboardSink + .map { showKeyboard -> + FlatItemAction( + leading = { + Icon( + Icons.Outlined.Keyboard, + null, + ) + }, + trailing = { + Switch( + checked = showKeyboard, + onCheckedChange = showKeyboardSink::value::set, + ) + }, + title = translate(Res.strings.vault_action_always_show_keyboard_title), + onClick = showKeyboardSink::value::set.partially1(!showKeyboard), + ) + } + val actionGroup2Flow = combine( + actionAlwaysShowKeyboardFlow, + ) { array -> + buildContextItems { + section { + array.forEach(this::plusAssign) + } + } + } + val actionSyncAccountsFlow = syncFlow + .map { syncing -> + FlatItemAction( + leading = { + SyncIcon( + rotating = syncing, + ) + }, + title = translate(Res.strings.vault_action_sync_vault_title), + onClick = if (!syncing) { + // lambda + { + queueSyncAll() + .launchIn(appScope) + } + } else { + null + }, + ) + } + val actionLockVaultItem = FlatItemAction( + leading = { + Icon(Icons.Outlined.Lock, null) + }, + title = translate(Res.strings.vault_action_lock_vault_title), + onClick = { + clearVaultSession() + .launchIn(appScope) + }, + ) + val actionLockVaultFlow = flowOf(actionLockVaultItem) + val actionGroup3Flow = combine( + actionSyncAccountsFlow, + actionLockVaultFlow, + ) { array -> + buildContextItems { + section { + array.forEach(this::plusAssign) + } + } + } + val actionFolderRenameFlow = getFolders() + .map { folders -> + val folder = folders.firstOrNull { it.id == fffFolderId } + if (folder != null) { + FlatItemAction( + leading = { + Icon(Icons.Outlined.Edit, null) + }, + title = translate(Res.strings.vault_action_rename_folder_title), + onClick = { + onRename(listOf(folder)) + }, + ) + } else { + null + } + } + .map { + buildContextItems { + this += it + } + } + if (args.canAlwaysShowKeyboard) { + combine( + actionFolderRenameFlow, + actionGroupFlow, + actionGroup2Flow, + actionGroup3Flow, + ) { array -> + buildContextItems { + array.forEach { + section { + it.forEach { + this += it + } + } + } + } + } + } else { + combine( + actionFolderRenameFlow, + ) { array -> + buildContextItems { + array.forEach { + section { + it.forEach { + this += it + } + } + } + } + } + } + } + + val recentState = MutableStateFlow( + VaultItem2.Item.LocalState( + openedState = VaultItem2.Item.OpenedState(false), + selectableItemState = SelectableItemState( + selected = false, + selecting = false, + can = true, + onClick = null, + onLongClick = null, + ), + ), + ) + + data class ConfigMapper( + val concealFields: Boolean, + val appIcons: Boolean, + val websiteIcons: Boolean, + ) + + val configFlow = combine( + getConcealFields(), + getAppIcons(), + getWebsiteIcons(), + ) { concealFields, appIcons, websiteIcons -> + ConfigMapper( + concealFields = concealFields, + appIcons = appIcons, + websiteIcons = websiteIcons, + ) + }.distinctUntilChanged() + val organizationsByIdFlow = getOrganizations() + .map { organizations -> + organizations + .associateBy { it.id } + } + + val ciphersFlow = combine( + ciphersRawFlow, + organizationsByIdFlow, + configFlow, + ) { secrets, organizationsById, cfg -> Triple(secrets, organizationsById, cfg) } + .mapLatestScoped { (secrets, organizationsById, cfg) -> + val items = secrets + .run { + if (mode is AppMode.PickPasskey) { + return@run this + .filter { cipher -> + val credentials = cipher.login?.fido2Credentials.orEmpty() + credentials + .any { credential -> + passkeyTargetCheck(credential, mode.target) + .attempt() + .bind() + .isRight { it } + } + } + } + if (mode is AppMode.HasType) { + val type = mode.type + if (type != null) { + return@run this + .filter { it.type == type } + } + } + + this + } + .filter { + when (args.trash) { + true -> it.deletedDate != null + false -> it.deletedDate == null + null -> true + } + } + .map { secret -> + val selectableFlow = selectionHandle + .idsFlow + .map { ids -> + SelectableItemStateRaw( + selecting = ids.isNotEmpty(), + selected = secret.id in ids, + ) + } + .distinctUntilChanged() + .map { raw -> + val toggle = selectionHandle::toggleSelection + .partially1(secret.id) + val onClick = toggle.takeIf { raw.selecting } + val onLongClick = toggle + .takeIf { !raw.selecting && raw.canSelect } + SelectableItemState( + selecting = raw.selecting, + selected = raw.selected, + can = raw.canSelect, + onClick = onClick, + onLongClick = onLongClick, + ) + } + val openedStateFlow = itemSink + .map { + val isOpened = it == secret.id + VaultItem2.Item.OpenedState(isOpened) + } + val sharing = SharingStarted.WhileSubscribed(1000L) + val localStateFlow = combine( + selectableFlow, + openedStateFlow, + ) { selectableState, openedState -> + VaultItem2.Item.LocalState( + openedState, + selectableState, + ) + }.persistingStateIn(this, sharing) + val item = secret.toVaultListItem( + copy = copy, + translator = this@produceScreenState, + getTotpCode = getTotpCode, + concealFields = cfg.concealFields, + appIcons = cfg.appIcons, + websiteIcons = cfg.websiteIcons, + organizationsById = organizationsById, + localStateFlow = localStateFlow, + onClick = { actions -> + val dropdown = when (mode) { + is AppMode.Pick -> listOf( + FlatItemAction( + icon = Icons.Outlined.AutoAwesome, + title = translate(Res.strings.autofill), + onClick = { + mode.onAutofill(secret) + }, + ), + ) + actions + FlatItemAction( + icon = Icons.Outlined.Info, + title = translate(Res.strings.ciphers_view_details), + trailing = { + ChevronIcon() + }, + onClick = { + cipherSink.emit(secret) + }, + ) + + is AppMode.Save -> listOf( + FlatItemAction( + icon = Icons.Outlined.Save, + title = translate(Res.strings.ciphers_save_to), + onClick = { + val route = LeAddRoute( + args = AddRoute.Args( + behavior = AddRoute.Args.Behavior( + // User wants to quickly check the updated + // cipher data, not to fill the data :P + autoShowKeyboard = false, + launchEditedCipher = false, + ), + initialValue = secret, + autofill = AddRoute.Args.Autofill.leof(mode.args), + ), + ) + val intent = NavigationIntent.NavigateToRoute(route) + navigate(intent) + }, + ), + ) + FlatItemAction( + icon = Icons.Outlined.Info, + title = translate(Res.strings.ciphers_view_details), + trailing = { + ChevronIcon() + }, + onClick = { + cipherSink.emit(secret) + }, + ) + + is AppMode.SavePasskey -> listOf( + FlatItemAction( + icon = Icons.Outlined.Save, + title = translate(Res.strings.ciphers_save_to), + onClick = { + mode.onComplete(secret) + }, + ), + ) + FlatItemAction( + icon = Icons.Outlined.Info, + title = translate(Res.strings.ciphers_view_details), + trailing = { + ChevronIcon() + }, + onClick = { + cipherSink.emit(secret) + }, + ) + + is AppMode.PickPasskey -> + return@toVaultListItem VaultItem2.Item.Action.Go( + onClick = cipherSink::emit.partially1(secret), + ) + + is AppMode.Main -> + return@toVaultListItem VaultItem2.Item.Action.Go( + onClick = cipherSink::emit.partially1(secret), + ) + } + VaultItem2.Item.Action.Dropdown( + actions = dropdown, + ) + }, + onClickPasskey = { credential -> + if (mode is AppMode.PickPasskey) { + val matches = passkeyTargetCheck(credential, mode.target) + .attempt() + .bind() + .isRight { it } + if (matches) { + // lambda + { + mode.onComplete(credential) + } + } else { + null + } + } else { + // lambda + { + val route = PasskeysCredentialViewRoute( + args = PasskeysCredentialViewRoute.Args( + cipherId = secret.id, + credentialId = credential.credentialId, + model = credential, + ), + ) + val intent = NavigationIntent.NavigateToRoute(route) + navigate(intent) + } + } + }, + ) + val indexed = mutableListOf() + indexed += SearchToken( + priority = 2f, + value = secret.name, + ) + if (secret.login != null) { + // Make username searchable + if (secret.login.username != null) { + indexed += SearchToken( + priority = 1f, + value = secret.login.username, + ) + } + // Make password searchable + if (!secret.reprompt && secret.login.password != null) { + indexed += SearchToken( + priority = 0.5f, + value = secret.login.password, + ) + } + secret.login.fido2Credentials.forEach { + if (it.userDisplayName != null) { + indexed += SearchToken( + priority = 0.8f, + value = it.userDisplayName, + ) + } + indexed += SearchToken( + priority = 0.5f, + value = it.rpId, + ) + } + } + if (secret.card != null) { + // Make card holder name & + // card brand searchable + if (secret.card.cardholderName != null) { + indexed += SearchToken( + priority = 1f, + value = secret.card.cardholderName, + ) + } + if (secret.card.brand != null) { + indexed += SearchToken( + priority = 0.5f, + value = secret.card.brand, + ) + } + if (!secret.reprompt && secret.card.number != null) { + indexed += SearchToken( + priority = 0.5f, + value = secret.card.number, + ) + } + } + if (secret.identity != null) { + // Name + if (secret.identity.firstName != null) { + indexed += SearchToken( + priority = 1f, + value = secret.identity.firstName, + ) + } + if (secret.identity.middleName != null) { + indexed += SearchToken( + priority = 0.5f, + value = secret.identity.middleName, + ) + } + if (secret.identity.lastName != null) { + indexed += SearchToken( + priority = 1f, + value = secret.identity.lastName, + ) + } + // Contacts + if (secret.identity.email != null) { + indexed += SearchToken( + priority = 1f, + value = secret.identity.email, + ) + } + if (secret.identity.phone != null) { + indexed += SearchToken( + priority = 0.5f, + value = secret.identity.phone, + ) + } + if (secret.identity.username != null) { + indexed += SearchToken( + priority = 1f, + value = secret.identity.username, + ) + } + } + if (!secret.reprompt && secret.notes.isNotBlank()) { + indexed += SearchToken( + priority = 0.8f, + value = secret.notes, + ) + } + secret.uris.forEach { uri -> + @Suppress("MoveVariableDeclarationIntoWhen") + val matchType = uri.match ?: DSecret.Uri.MatchType.default + val priority = when (matchType) { + DSecret.Uri.MatchType.Domain -> 0.5f + DSecret.Uri.MatchType.Host -> 0.5f + DSecret.Uri.MatchType.StartsWith -> 0.5f + DSecret.Uri.MatchType.Exact -> 0.5f + DSecret.Uri.MatchType.RegularExpression -> 0f // can't type regex... + DSecret.Uri.MatchType.Never -> 0.1f + } + if (priority > 0f) { + indexed += SearchToken( + priority = priority, + value = uri.uri, + ) + } + } + secret.fields.forEach { field -> + val priority = when (field.type) { + DSecret.Field.Type.Text -> 0.5f + DSecret.Field.Type.Hidden -> 0f + DSecret.Field.Type.Boolean -> 0f + DSecret.Field.Type.Linked -> 0f + } + if (priority > 0f && field.value != null) { + indexed += SearchToken( + priority = priority, + value = field.value, + ) + } + } + IndexedModel( + model = item, + indexedText = IndexedText(item.title.text), + indexedOther = indexed, + ) + } + .run { + if (args.filter != null) { + val ciphers = map { it.model.source } + val predicate = args.filter.prepare(directDI, ciphers) + this + .filter { predicate(it.model.source) } + } else { + this + } + } + items + } + .flowOn(Dispatchers.Default) + .shareIn(this, SharingStarted.WhileSubscribed(5000L), replay = 1) + + fun createComparatorAction( + id: String, + title: StringResource, + icon: ImageVector? = null, + config: ComparatorHolder, + ) = SortItem.Item( + id = id, + config = config, + title = TextHolder.Res(title), + icon = icon, + onClick = { + sortSink.value = config + }, + checked = false, + ) + + data class Fuu( + val item: SortItem.Item, + val subItems: List, + ) + + val cam = mapOf( + AlphabeticalSort to Fuu( + item = createComparatorAction( + id = "title", + icon = Icons.Outlined.SortByAlpha, + title = Res.strings.sortby_title_title, + config = ComparatorHolder( + comparator = AlphabeticalSort, + favourites = true, + ), + ), + subItems = listOf( + createComparatorAction( + id = "title_normal", + title = Res.strings.sortby_title_normal_mode, + config = ComparatorHolder( + comparator = AlphabeticalSort, + favourites = true, + ), + ), + createComparatorAction( + id = "title_rev", + title = Res.strings.sortby_title_reverse_mode, + config = ComparatorHolder( + comparator = AlphabeticalSort, + reversed = true, + favourites = true, + ), + ), + ), + ), + LastModifiedSort to Fuu( + item = createComparatorAction( + id = "modify_date", + icon = Icons.Outlined.CalendarMonth, + title = Res.strings.sortby_modification_date_title, + config = ComparatorHolder( + comparator = LastModifiedSort, + ), + ), + subItems = listOf( + createComparatorAction( + id = "modify_date_normal", + title = Res.strings.sortby_modification_date_normal_mode, + config = ComparatorHolder( + comparator = LastModifiedSort, + ), + ), + createComparatorAction( + id = "modify_date_rev", + title = Res.strings.sortby_modification_date_reverse_mode, + config = ComparatorHolder( + comparator = LastModifiedSort, + reversed = true, + ), + ), + ), + ), + PasswordSort to Fuu( + item = createComparatorAction( + id = "password", + icon = Icons.Outlined.Password, + title = Res.strings.sortby_password_title, + config = ComparatorHolder( + comparator = PasswordSort, + ), + ), + subItems = listOf( + createComparatorAction( + id = "password_normal", + title = Res.strings.sortby_password_normal_mode, + config = ComparatorHolder( + comparator = PasswordSort, + ), + ), + createComparatorAction( + id = "password_rev", + title = Res.strings.sortby_password_reverse_mode, + config = ComparatorHolder( + comparator = PasswordSort, + reversed = true, + ), + ), + ), + ), + PasswordLastModifiedSort to Fuu( + item = createComparatorAction( + id = "password_last_modified_strength", + icon = Icons.Outlined.CalendarMonth, + title = Res.strings.sortby_password_modification_date_title, + config = ComparatorHolder( + comparator = PasswordLastModifiedSort, + ), + ), + subItems = listOf( + createComparatorAction( + id = "password_last_modified_normal", + title = Res.strings.sortby_password_modification_date_normal_mode, + config = ComparatorHolder( + comparator = PasswordLastModifiedSort, + ), + ), + createComparatorAction( + id = "password_last_modified_rev", + title = Res.strings.sortby_password_modification_date_reverse_mode, + config = ComparatorHolder( + comparator = PasswordLastModifiedSort, + reversed = true, + ), + ), + ), + ), + PasswordStrengthSort to Fuu( + item = createComparatorAction( + id = "password_strength", + icon = Icons.Outlined.Security, + title = Res.strings.sortby_password_strength_title, + config = ComparatorHolder( + comparator = PasswordStrengthSort, + ), + ), + subItems = listOf( + createComparatorAction( + id = "password_strength_normal", + title = Res.strings.sortby_password_strength_normal_mode, + config = ComparatorHolder( + comparator = PasswordStrengthSort, + ), + ), + createComparatorAction( + id = "password_strength_rev", + title = Res.strings.sortby_password_strength_reverse_mode, + config = ComparatorHolder( + comparator = PasswordStrengthSort, + reversed = true, + ), + ), + ), + ), + ) + + val comparatorsListFlow = sortSink + .map { orderConfig -> + val mainItems = cam.values + .map { it.item } + .map { item -> + val checked = item.config.comparator == orderConfig.comparator + item.copy(checked = checked) + } + val subItems = cam[orderConfig.comparator]?.subItems.orEmpty() + .map { item -> + val checked = item.config == orderConfig + item.copy(checked = checked) + } + + val out = mutableListOf() + out += mainItems + if (subItems.isNotEmpty()) { + out += SortItem.Section( + id = "sub_items_section", + text = TextHolder.Res(Res.strings.options), + ) + out += subItems + } + out + } + + val queryTrimmedFlow = querySink.map { it to it.trim() } + + val queryIndexedFlow = queryTrimmedFlow + .debounce(SEARCH_DEBOUNCE) + .map { (_, queryTrimmed) -> + if (queryTrimmed.isEmpty()) return@map null + IndexedText( + text = queryTrimmed, + ) + } + + data class Rev( + val count: Int, + val list: List, + val revision: Int = 0, + ) + + val autofillTarget = mode.autofillTarget + val ciphersFilteredFlow = hahah( + directDI = directDI, + ciphersFlow = ciphersFlow, + orderFlow = sortSink, + filterFlow = filterResult.filterFlow, + queryFlow = queryIndexedFlow, + autofillTarget = autofillTarget, + getSuggestions = getSuggestions, + dateFormatter = dateFormatter, + highlightBackgroundColor = highlightBackgroundColor, + highlightContentColor = highlightContentColor, + ) + .map { + val keepOtp = it.filterConfig?.filter + ?.let { + DFilter.findOne(it, DFilter.ByOtp::class.java) + } != null + val keepPasskey = it.filterConfig?.filter + ?.let { + DFilter.findOne(it, DFilter.ByPasskeys::class.java) + } != null || + // If a user is in the pick a passkey mode, + // then we want to always show it in the items. + mode is AppMode.PickPasskey || + mode is AppMode.SavePasskey + val l = if (keepOtp && keepPasskey) { + it.list + } else { + it.list + .map { + when (it) { + is VaultItem2.Item -> { + it.copy( + token = it.token.takeIf { keepOtp }, + passkeys = it.passkeys.takeIf { keepPasskey } + ?: persistentListOf(), + ) + } + + else -> it + } + } + } + + Rev( + count = it.count, + list = l, + revision = (it.filterConfig?.id ?: 0) xor ( + it.queryConfig?.text?.hashCode() + ?: 0 + ) xor (it.orderConfig?.hashCode() ?: 0), + ) + } + .flowOn(Dispatchers.Default) + .shareIn(this, SharingStarted.WhileSubscribed(), replay = 1) + + val dl = deeplinkService.get("customFilter") + deeplinkService.clear("customFilter") + val filterListFlow = ah( + directDI = directDI, + outputGetter = { it.source }, + outputFlow = ciphersFilteredFlow + .map { state -> + state.list.mapNotNull { it as? VaultItem2.Item } + }, + accountGetter = ::identity, + accountFlow = getAccounts(), + profileFlow = getProfiles(), + cipherGetter = { + it.model.source + }, + cipherFlow = ciphersFlow, + folderGetter = ::identity, + folderFlow = getFolders(), + collectionGetter = ::identity, + collectionFlow = getCollections(), + organizationGetter = ::identity, + organizationFlow = getOrganizations(), + input = filterResult, + params = FilterParams( + deeplinkCustomFilter = dl, + ), + ) + .stateIn(this, SharingStarted.WhileSubscribed(), OurFilterResult()) + + val selectionFlow = createCipherSelectionFlow( + selectionHandle = selectionHandle, + ciphersFlow = ciphersRawFlow, + collectionsFlow = getCollections(), + canWriteFlow = getCanWrite(), + toolbox = toolbox, + ) + + val itemsFlow = ciphersFilteredFlow + .map { + val list = it.list + .toMutableList() + if (args.canQuickFilter) { + list.add( + 0, + VaultItem2.QuickFilters( + id = "quick_filters", + items = persistentListOf(), + ), + ) + } + it.copy(list = list) + } + .combine(selectionFlow) { ciphers, selection -> + val items = ciphers.list + + @Suppress("UnnecessaryVariable") + val localScrollPositionKey = items + scrollPositionKey = localScrollPositionKey + + val lastScrollState = scrollPositionSink.value + val (firstVisibleItemIndex, firstVisibleItemScrollOffset) = + if (lastScrollState.revision == ciphers.revision) { + val index = items + .indexOfFirst { it.id == lastScrollState.id } + .takeIf { it >= 0 } + index?.let { it to lastScrollState.offset } + } else { + null + } + // otherwise start with a first item + ?: (0 to 0) + + val a = object : VaultListState.Content.Items.Revision.Mutable> { + override val value: Pair + get() { + val lastScrollState = scrollPositionSink.value + val v = if (lastScrollState.revision == ciphers.revision) { + val index = items + .indexOfFirst { it.id == lastScrollState.id } + .takeIf { it >= 0 } + index?.let { it to lastScrollState.offset } + } else { + null + } ?: (firstVisibleItemIndex to firstVisibleItemScrollOffset) + return v + } + } + val b = object : VaultListState.Content.Items.Revision.Mutable { + override val value: Int + get() = a.value.first + } + val c = object : VaultListState.Content.Items.Revision.Mutable { + override val value: Int + get() = a.value.second + } + VaultListState.Content.Items( + onSelected = { key -> + itemSink.value = key.orEmpty() + }, + revision = VaultListState.Content.Items.Revision( + id = ciphers.revision, + firstVisibleItemIndex = b, + firstVisibleItemScrollOffset = c, + onScroll = { index, offset -> + if (localScrollPositionKey !== scrollPositionKey) { + return@Revision + } + + val item = items.getOrNull(index) + ?: return@Revision + scrollPositionSink.value = OhOhOh( + id = item.id, + offset = offset, + revision = ciphers.revision, + ) + }, + ), + list = items, + count = ciphers.count, + selection = selection, + ) + } + + val itemsNullableFlow = itemsFlow + // First search might take some time, but we want to provide + // initial state as fast as we can. + .nullable() + .persistingStateIn(this, SharingStarted.WhileSubscribed(), null) + combine( + itemsNullableFlow, + filterListFlow, + comparatorsListFlow + .combine(sortSink) { a, b -> a to b }, + queryTrimmedFlow, + getAccounts() + .map { it.isNotEmpty() } + .distinctUntilChanged(), + ) { itemsContent, filters, (comparators, sort), (query, queryTrimmed), hasAccounts -> + val revision = filters.rev xor queryTrimmed.hashCode() xor sort.hashCode() + val content = if (hasAccounts) { + itemsContent + ?: VaultListState.Content.Skeleton + } else { + VaultListState.Content.AddAccount( + onAddAccount = { + val route = registerRouteResultReceiver(LoginRoute()) { + // Close the login screen. + navigate(NavigationIntent.Pop) + } + navigate(NavigationIntent.NavigateToRoute(route)) + }, + ) + } + val queryField = if (content !is VaultListState.Content.AddAccount) { + // We want to let the user search while the items + // are still loading. + TextFieldModel2( + state = queryState, + text = query, + onChange = queryState::value::set, + ) + } else { + TextFieldModel2( + mutableStateOf(""), + ) + } + + fun createTypeAction( + type: DSecret.Type, + ) = FlatItemAction( + leading = icon(type.iconImageVector()), + title = translate(type.titleH()), + onClick = { + val autofill = when (mode) { + is AppMode.Main -> null + is AppMode.SavePasskey -> null + is AppMode.PickPasskey -> null + is AppMode.Save -> { + AddRoute.Args.Autofill.leof(mode.args) + } + + is AppMode.Pick -> { + AddRoute.Args.Autofill.leof(mode.args) + } + } + val route = LeAddRoute( + args = AddRoute.Args( + type = type, + autofill = autofill, + name = queryTrimmed.takeIf { it.isNotEmpty() }, + ), + ) + val intent = NavigationIntent.NavigateToRoute(route) + navigate(intent) + }, + ) + + val primaryActions = kotlin.run { + // You can not create a passkey at will, it + // must be a separate action. During the pick passkey + // request you can only select existing ones. + if (mode is AppMode.PickPasskey) { + return@run emptyList() + } + if (mode is AppMode.HasType) { + val type = mode.type + if (type != null) { + return@run listOf( + createTypeAction( + type = type, + ), + ) + } + } + listOf( + createTypeAction( + type = DSecret.Type.Login, + ), + createTypeAction( + type = DSecret.Type.Card, + ), + createTypeAction( + type = DSecret.Type.Identity, + ), + createTypeAction( + type = DSecret.Type.SecureNote, + ), + ) + } + VaultListState( + revision = revision, + query = queryField, + filters = filters.items, + sort = comparators + .takeIf { queryTrimmed.isEmpty() } + .orEmpty(), + primaryActions = if (hasAccounts) { + primaryActions + } else { + emptyList() + }, + clearFilters = filters.onClear, + clearSort = if (sortDefault != sort) { + { + sortSink.value = sortDefault + } + } else { + null + }, + selectCipher = cipherSink::emit, + content = content, + sideEffects = VaultListState.SideEffects(cipherSink), + ) + }.combine( + combine( + getCanWrite(), + selectionHandle.idsFlow, + ) { canWrite, itemIds -> + canWrite && itemIds.isEmpty() + }, + ) { state, canWrite -> + state.copy( + primaryActions = state.primaryActions.takeIf { canWrite }.orEmpty(), + ) + }.combine(actionsFlow) { state, actions -> + state.copy( + actions = actions, + ) + }.combine(showKeyboardSink) { state, showKeyboard -> + state.copy( + showKeyboard = showKeyboard && state.query.onChange != null, + ) + } +} + +private data class SearchToken( + val priority: Float, + val tokens: List, +) { + companion object { + operator fun invoke( + priority: Float, + value: String, + ) = SearchToken( + priority = priority, + tokens = value.lowercase().split(" "), + ) + } +} + +private class IndexedModel( + val model: T, + val indexedText: IndexedText, + val indexedOther: List, +) + +private data class FilteredModel( + val model: T, + val score: Float, + val result: IndexedText.FindResult?, +) + +private data class FilteredCiphers( + val list: List, + val revision: Int, +) + +private data class FilteredBoo( + val count: Int, + val list: List, + val preferredList: List?, + val orderConfig: ComparatorHolder? = null, + val filterConfig: FilterHolder? = null, + val queryConfig: IndexedText? = null, +) + +private data class Preferences( + val appId: String? = null, + val webDomain: String? = null, +) + +private fun hahah( + directDI: DirectDI, + ciphersFlow: Flow>>, + orderFlow: Flow, + filterFlow: Flow, + queryFlow: Flow, + autofillTarget: AutofillTarget?, + getSuggestions: GetSuggestions, + dateFormatter: DateFormatter, + highlightBackgroundColor: Color, + highlightContentColor: Color, +) = ciphersFlow + .map { items -> + val preferredList = if (autofillTarget != null) { + getSuggestions( + items, + Getter { + val m = it as IndexedModel + m.model.source + }, + autofillTarget, + ) + .bind().let { it as List> } + .map { item -> + val newModel = item.model.copy( + id = "preferred." + item.model.id, + ) + IndexedModel( + model = newModel, + indexedText = item.indexedText, + indexedOther = emptyList(), + ) + } + } else { + null + } + FilteredBoo( + count = items.size, + list = items, + preferredList = preferredList, + ) + } + .combine( + flow = orderFlow + .map { orderConfig -> + val orderComparator = Comparator> { a, b -> + val aModel = a.model + val bModel = b.model + + var r = 0 + if (r == 0 && orderConfig.favourites) { + // Place favourite items on top of the list. + r = -compareValues(a.model.favourite, b.model.favourite) + } + if (r == 0) { + r = orderConfig.comparator.compare(aModel, bModel) + r = if (orderConfig.reversed) -r else r + } + if (r == 0) { + r = aModel.id.compareTo(bModel.id) + r = if (orderConfig.reversed) -r else r + } + r + } + orderConfig to orderComparator + }, + ) { state, (orderConfig, orderComparator) -> + val sortedAllItems = state.list.sortedWith(orderComparator) + state.copy( + list = sortedAllItems, + orderConfig = orderConfig, + ) + } + .combine( + flow = filterFlow, + ) { state, filterConfig -> + // Fast path: if the there are no filters, then + // just return original list of items. + if (filterConfig.state.isEmpty()) { + return@combine state.copy( + filterConfig = filterConfig, + ) + } + + val filteredAllItems = state + .list + .run { + val ciphers = map { it.model.source } + val predicate = filterConfig.filter.prepare(directDI, ciphers) + filter { predicate(it.model.source) } + } + val filteredPreferredItems = state + .preferredList + ?.run { + val ciphers = map { it.model.source } + val predicate = filterConfig.filter.prepare(directDI, ciphers) + filter { predicate(it.model.source) } + } + state.copy( + list = filteredAllItems, + preferredList = filteredPreferredItems, + filterConfig = filterConfig, + ) + } + .combine(queryFlow) { a, b -> a to b } // i want to use map latest + .mapLatest { (state, query) -> + if (query == null) { + return@mapLatest FilteredBoo( + count = state.list.size, + list = state.list.map { it.model }, + preferredList = state.preferredList?.map { it.model }, + orderConfig = state.orderConfig, + filterConfig = state.filterConfig, + queryConfig = state.queryConfig, + ) + } + + val filteredAllItems = state.list.search( + query = query, + highlightBackgroundColor = highlightBackgroundColor, + highlightContentColor = highlightContentColor, + ) + val filteredPreferredItems = state.preferredList?.search( + query = query, + highlightBackgroundColor = highlightBackgroundColor, + highlightContentColor = highlightContentColor, + ) + FilteredBoo( + count = filteredAllItems.size, + list = filteredAllItems, + preferredList = filteredPreferredItems, + orderConfig = state.orderConfig, + filterConfig = state.filterConfig, + queryConfig = query, + ) + } + .map { state -> + val keys = mutableSetOf() + + val orderConfig = state.orderConfig + val decorator = when { + // Search does not guarantee meaningful order that we can + // show in the section. + state.queryConfig != null -> ItemDecoratorNone + orderConfig?.comparator is AlphabeticalSort && + // it looks ugly on small lists + state.list.size >= AlphabeticalSortMinItemsSize -> + ItemDecoratorTitle( + selector = { it.title.text }, + factory = { id, text -> + VaultItem2.Section( + id = id, + text = TextHolder.Value(text), + ) + }, + ) + + orderConfig?.comparator is LastCreatedSort -> + ItemDecoratorDate( + dateFormatter = dateFormatter, + selector = { it.createdDate }, + factory = { id, text -> + VaultItem2.Section( + id = id, + text = TextHolder.Value(text), + ) + }, + ) + + orderConfig?.comparator is LastModifiedSort -> + ItemDecoratorDate( + dateFormatter = dateFormatter, + selector = { it.revisionDate }, + factory = { id, text -> + VaultItem2.Section( + id = id, + text = TextHolder.Value(text), + ) + }, + ) + + orderConfig?.comparator is PasswordSort -> PasswordDecorator() + + orderConfig?.comparator is PasswordLastModifiedSort -> + ItemDecoratorDate( + dateFormatter = dateFormatter, + selector = { it.passwordRevisionDate }, + factory = { id, text -> + VaultItem2.Section( + id = id, + text = TextHolder.Value(text), + ) + }, + ) + + orderConfig?.comparator is PasswordStrengthSort -> PasswordStrengthDecorator() + else -> ItemDecoratorNone + } + + val items = sequence { + if (state.preferredList != null) { + // We want to show the 'No suggestions' text if the suggestions + // target does exist, but searching for suggestions returns no + // items. + if (state.preferredList.isEmpty()) { + yield(VaultItem2.NoSuggestions) + } + state.preferredList.forEach { item -> + yield(item) + } + + // A section item for all items. + if (state.list.isNotEmpty()) { + val section = VaultItem2.Section( + id = "preferred.end", + text = TextHolder.Res(Res.strings.items_all), + ) + yield(section) + } + } + state.list.forEach { item -> + if (!item.favourite || orderConfig?.favourites != true) { + val section = decorator.getOrNull(item) + if (section != null) yield(section) + } + yield(item) + } + }.toList().ifEmpty { + listOf(VaultItem2.NoItems) + } + FilteredBoo( + count = state.list.size, + list = items, + preferredList = items, + orderConfig = state.orderConfig, + filterConfig = state.filterConfig, + queryConfig = state.queryConfig, + ) + } + +private typealias Decorator = ItemDecorator + +private class PasswordDecorator : Decorator { + /** + * Last shown password, used to not repeat the sections + * if it stays the same. + */ + private var lastPassword: Any? = Any() + + override fun getOrNull(item: VaultItem2.Item): VaultItem2? { + val pw = item.password + if (pw == lastPassword) { + return null + } + + lastPassword = pw + if (pw == null) { + return VaultItem2.Section( + id = "decorator.pw.empty", + text = TextHolder.Value("No password"), + ) + } + val text = obscurePassword(pw) + return VaultItem2.Section( + id = "decorator.pw.$pw", + text = TextHolder.Value(text), + caps = false, + ) + } +} + +private class PasswordStrengthDecorator : Decorator { + /** + * Last shown password score, used to not repeat the sections + * if it stays the same. + */ + private var lastScore: Any? = Any() + + override fun getOrNull(item: VaultItem2.Item): VaultItem2? { + val score = item.score?.score + if (score == lastScore) { + return null + } + + lastScore = score + if (score == null) { + return VaultItem2.Section( + id = "decorator.pw_strength.empty", + text = TextHolder.Value("No password"), + ) + } + return VaultItem2.Section( + id = "decorator.pw_strength.${score.name}", + text = TextHolder.Res(score.formatH()), + ) + } +} + +private suspend fun List>.search( + query: IndexedText, + highlightBackgroundColor: Color, + highlightContentColor: Color, +) = kotlin.run { + // Fast path if there's nothing to search from. + if (isEmpty()) { + return@run this + .map { + it.model + } + } + + val queryComponents = query + .components + .map { it.lowercase } + val timedValue = measureTimedValue { + parallelSearch { + val q = it.indexedOther + .fold(0f) { y, x -> + y + findAlike( + source = x.tokens, + query = queryComponents, + ) + }.div(it.indexedOther.size.coerceAtLeast(1)) + val r = it.indexedText.find( + query = query, + colorBackground = highlightBackgroundColor, + colorContent = highlightContentColor, + ) + if (r == null && q <= 0.0001f) { + return@parallelSearch null + } + FilteredModel( + model = it.model, + score = q + (r?.score ?: 0f), + result = r, + ) + } + .sortedWith( + compareBy( + { !it.model.favourite }, + { -it.score }, + ), + ) + .map { + it.result + ?: return@map it.model + // Replace the origin text with the one with + // search decor applied to it. + it.model.copy(title = it.result.highlightedText) + } + } + timedValue.value +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/screen/VaultRecentState.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/screen/VaultRecentState.kt new file mode 100644 index 00000000..e8bf149d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/screen/VaultRecentState.kt @@ -0,0 +1,34 @@ +package com.artemchep.keyguard.feature.home.vault.screen + +import androidx.compose.runtime.Immutable +import arrow.optics.optics +import com.artemchep.keyguard.common.model.DSecret +import com.artemchep.keyguard.feature.home.vault.model.VaultItem2 +import com.artemchep.keyguard.ui.tabs.CallsTabs +import kotlinx.collections.immutable.PersistentList +import kotlinx.collections.immutable.toPersistentList +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.emptyFlow + +@Immutable +@optics +data class VaultRecentState( + val revision: Int = 0, + val tabs: PersistentList = CallsTabs.entries.toPersistentList(), + val onSelectTab: ((CallsTabs) -> Unit)? = null, + val selectedTab: StateFlow = MutableStateFlow(CallsTabs.RECENTS), + val recent: StateFlow> = MutableStateFlow(emptyList()), + val sideEffects: SideEffects = SideEffects(), +) { + companion object; + + @Immutable + @optics + data class SideEffects( + val selectCipherFlow: Flow = emptyFlow(), + ) { + companion object + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/screen/VaultRecentStateProducer.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/screen/VaultRecentStateProducer.kt new file mode 100644 index 00000000..448c6ac5 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/screen/VaultRecentStateProducer.kt @@ -0,0 +1,234 @@ +package com.artemchep.keyguard.feature.home.vault.screen + +import androidx.compose.runtime.Composable +import androidx.compose.ui.graphics.Color +import arrow.core.partially1 +import com.artemchep.keyguard.common.model.CipherOpenedHistoryMode +import com.artemchep.keyguard.common.model.DSecret +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.service.clipboard.ClipboardService +import com.artemchep.keyguard.common.usecase.CipherToolbox +import com.artemchep.keyguard.common.usecase.ClearVaultSession +import com.artemchep.keyguard.common.usecase.DateFormatter +import com.artemchep.keyguard.common.usecase.GetAccounts +import com.artemchep.keyguard.common.usecase.GetAppIcons +import com.artemchep.keyguard.common.usecase.GetCanWrite +import com.artemchep.keyguard.common.usecase.GetCipherOpenedHistory +import com.artemchep.keyguard.common.usecase.GetCiphers +import com.artemchep.keyguard.common.usecase.GetCollections +import com.artemchep.keyguard.common.usecase.GetConcealFields +import com.artemchep.keyguard.common.usecase.GetFolders +import com.artemchep.keyguard.common.usecase.GetOrganizations +import com.artemchep.keyguard.common.usecase.GetPasswordStrength +import com.artemchep.keyguard.common.usecase.GetSuggestions +import com.artemchep.keyguard.common.usecase.GetTotpCode +import com.artemchep.keyguard.common.usecase.GetWebsiteIcons +import com.artemchep.keyguard.common.usecase.QueueSyncAll +import com.artemchep.keyguard.common.usecase.SupervisorRead +import com.artemchep.keyguard.common.util.flow.EventFlow +import com.artemchep.keyguard.feature.attachments.SelectableItemState +import com.artemchep.keyguard.feature.home.vault.model.VaultItem2 +import com.artemchep.keyguard.feature.navigation.state.PersistedStorage +import com.artemchep.keyguard.feature.navigation.state.copy +import com.artemchep.keyguard.feature.navigation.state.produceScreenState +import com.artemchep.keyguard.ui.tabs.CallsTabs +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.flatMapLatest +import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.stateIn +import org.kodein.di.DirectDI +import org.kodein.di.compose.localDI +import org.kodein.di.direct +import org.kodein.di.instance + +@Composable +fun vaultRecentScreenState( + highlightBackgroundColor: Color, + highlightContentColor: Color, +) = with(localDI().direct) { + vaultRecentScreenState( + directDI = this, + highlightBackgroundColor = highlightBackgroundColor, + highlightContentColor = highlightContentColor, + clearVaultSession = instance(), + getSuggestions = instance(), + getAccounts = instance(), + getCanWrite = instance(), + getCiphers = instance(), + getFolders = instance(), + getCollections = instance(), + getOrganizations = instance(), + getTotpCode = instance(), + getConcealFields = instance(), + getAppIcons = instance(), + getWebsiteIcons = instance(), + getPasswordStrength = instance(), + getCipherOpenedHistory = instance(), + toolbox = instance(), + queueSyncAll = instance(), + syncSupervisor = instance(), + dateFormatter = instance(), + clipboardService = instance(), + ) +} + +@Composable +fun vaultRecentScreenState( + directDI: DirectDI, + highlightBackgroundColor: Color, + highlightContentColor: Color, + getSuggestions: GetSuggestions, + getAccounts: GetAccounts, + getCanWrite: GetCanWrite, + getCiphers: GetCiphers, + getFolders: GetFolders, + getCollections: GetCollections, + getOrganizations: GetOrganizations, + getTotpCode: GetTotpCode, + getConcealFields: GetConcealFields, + getAppIcons: GetAppIcons, + getWebsiteIcons: GetWebsiteIcons, + getPasswordStrength: GetPasswordStrength, + getCipherOpenedHistory: GetCipherOpenedHistory, + clearVaultSession: ClearVaultSession, + toolbox: CipherToolbox, + queueSyncAll: QueueSyncAll, + syncSupervisor: SupervisorRead, + dateFormatter: DateFormatter, + clipboardService: ClipboardService, +): Loadable = produceScreenState( + key = "vault_recent", + initial = Loadable.Loading, + args = arrayOf( + getAccounts, + getCiphers, + getTotpCode, + dateFormatter, + clipboardService, + ), +) { + val storage = kotlin.run { + val disk = loadDiskHandle("vault.recent") + PersistedStorage.InDisk(disk) + } + + val tabSink = mutablePersistedFlow( + key = "tab", + storage = storage, + ) { + CallsTabs.default.name + } + val tabFlow = tabSink + .map { + kotlin.runCatching { + CallsTabs.valueOf(it) + }.getOrNull() ?: CallsTabs.default + } + .stateIn(screenScope) + + val copy = copy(clipboardService) + + val cipherSink = EventFlow() + + val recentState = MutableStateFlow( + VaultItem2.Item.LocalState( + openedState = VaultItem2.Item.OpenedState(false), + selectableItemState = SelectableItemState( + selected = false, + selecting = false, + can = true, + onClick = null, + onLongClick = null, + ), + ), + ) + + data class ConfigMapper( + val concealFields: Boolean, + val appIcons: Boolean, + val websiteIcons: Boolean, + ) + + val configFlow = combine( + getConcealFields(), + getAppIcons(), + getWebsiteIcons(), + ) { concealFields, appIcons, websiteIcons -> + ConfigMapper( + concealFields = concealFields, + appIcons = appIcons, + websiteIcons = websiteIcons, + ) + }.distinctUntilChanged() + val organizationsByIdFlow = getOrganizations() + .map { organizations -> + organizations + .associateBy { it.id } + } + val recentFLow = tabFlow + .flatMapLatest { tab -> + val mode = when (tab) { + CallsTabs.RECENTS -> CipherOpenedHistoryMode.Recent + CallsTabs.FAVORITES -> CipherOpenedHistoryMode.Popular + } + getCipherOpenedHistory(mode) + } + .map { items -> + items + .asSequence() + .map { it.cipherId } + .toSet() + } + .combine(getCiphers()) { recents, ciphers -> + recents + .mapNotNull { recentId -> + ciphers + .firstOrNull { it.id == recentId } + } + } + + val recent = combine( + recentFLow, + organizationsByIdFlow, + configFlow, + ) { secrets, organizationsById, cfg -> Triple(secrets, organizationsById, cfg) } + .map { (secrets, organizationsById, cfg) -> + secrets + .map { secret -> + secret.toVaultListItem( + copy = copy, + translator = this, + getTotpCode = getTotpCode, + concealFields = cfg.concealFields, + appIcons = cfg.appIcons, + websiteIcons = cfg.websiteIcons, + organizationsById = organizationsById, + localStateFlow = recentState, + onClick = { actions -> + VaultItem2.Item.Action.Go( + onClick = cipherSink::emit.partially1(secret), + ) + }, + onClickPasskey = { + null + }, + ) + } + } + + val defaultState = VaultRecentState( + recent = recent + .stateIn(screenScope), + selectedTab = tabFlow, + onSelectTab = { tab -> + tabSink.value = tab.name + }, + sideEffects = VaultRecentState.SideEffects( + selectCipherFlow = cipherSink, + ), + ) + flowOf(Loadable.Ok(defaultState)) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/screen/VaultViewPasswordHistoryRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/screen/VaultViewPasswordHistoryRoute.kt new file mode 100644 index 00000000..4d9cf3ac --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/screen/VaultViewPasswordHistoryRoute.kt @@ -0,0 +1,15 @@ +package com.artemchep.keyguard.feature.home.vault.screen + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.navigation.Route + +data class VaultViewPasswordHistoryRoute( + val itemId: String, +) : Route { + @Composable + override fun Content() { + VaultViewPasswordHistoryScreen( + itemId = itemId, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/screen/VaultViewPasswordHistoryScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/screen/VaultViewPasswordHistoryScreen.kt new file mode 100644 index 00000000..5ddd2ef9 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/screen/VaultViewPasswordHistoryScreen.kt @@ -0,0 +1,171 @@ +package com.artemchep.keyguard.feature.home.vault.screen + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ExperimentalLayoutApi +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.lazy.LazyListScope +import androidx.compose.foundation.lazy.items +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.input.nestedscroll.nestedScroll +import androidx.compose.ui.text.style.TextOverflow +import com.artemchep.keyguard.feature.EmptyView +import com.artemchep.keyguard.feature.home.vault.component.VaultPasswordHistoryItem +import com.artemchep.keyguard.feature.home.vault.model.VaultPasswordHistoryItem +import com.artemchep.keyguard.feature.navigation.NavigationIcon +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.DefaultSelection +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.OptionsButton +import com.artemchep.keyguard.ui.ScaffoldLazyColumn +import com.artemchep.keyguard.ui.skeleton.SkeletonItem +import com.artemchep.keyguard.ui.skeleton.SkeletonText +import com.artemchep.keyguard.ui.theme.combineAlpha +import com.artemchep.keyguard.ui.toolbar.LargeToolbar +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.collections.immutable.ImmutableList + +private const val SKELETON_ITEMS_COUNT = 2 + +@Composable +fun VaultViewPasswordHistoryScreen( + itemId: String, +) { + val state = vaultViewPasswordHistoryScreenState( + itemId = itemId, + ) + VaultViewPasswordHistoryScreen( + state = state, + ) +} + +@OptIn(ExperimentalMaterial3Api::class, ExperimentalLayoutApi::class) +@Composable +fun VaultViewPasswordHistoryScreen( + state: VaultViewPasswordHistoryState, +) { + val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior() + ScaffoldLazyColumn( + modifier = Modifier + .nestedScroll(scrollBehavior.nestedScrollConnection), + topAppBarScrollBehavior = scrollBehavior, + topBar = { + LargeToolbar( + title = { + ToolbarTitle( + state = state, + ) + }, + navigationIcon = { + NavigationIcon() + }, + actions = { + val actions = + (state.content as? VaultViewPasswordHistoryState.Content.Cipher)?.actions.orEmpty() + OptionsButton( + actions = actions, + ) + }, + scrollBehavior = scrollBehavior, + ) + }, + bottomBar = { + val selectionOrNull = + (state.content as? VaultViewPasswordHistoryState.Content.Cipher)?.selection + DefaultSelection( + state = selectionOrNull, + ) + }, + ) { + when (state.content) { + is VaultViewPasswordHistoryState.Content.Loading -> { + // Show a bunch of skeleton items, so it makes an impression of a + // fully loaded screen. + populateItemsSkeleton() + } + + is VaultViewPasswordHistoryState.Content.Cipher -> { + populateItemsContent( + items = state.content.items, + ) + } + + else -> { + // Do nothing. + } + } + } +} + +private fun LazyListScope.populateItemsSkeleton() { + for (i in 0 until SKELETON_ITEMS_COUNT) { + item("skeleton.$i") { + SkeletonItem() + } + } +} + +private fun LazyListScope.populateItemsContent( + items: ImmutableList, +) { + if (items.isEmpty()) { + item("empty") { + EmptyView() + } + } + items( + items = items, + key = { model -> model.id }, + ) { model -> + VaultPasswordHistoryItem( + item = model, + ) + } +} + +@Composable +private fun ToolbarTitle( + state: VaultViewPasswordHistoryState, +) = Column { + when (state.content) { + is VaultViewPasswordHistoryState.Content.Loading -> { + SkeletonText( + modifier = Modifier + .fillMaxWidth(0.33f), + style = MaterialTheme.typography.labelSmall, + emphasis = MediumEmphasisAlpha, + ) + } + + is VaultViewPasswordHistoryState.Content.Cipher -> { + val name = state.content.data.name + Text( + text = name, + style = MaterialTheme.typography.labelSmall, + color = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + overflow = TextOverflow.Ellipsis, + maxLines = 2, + ) + } + + is VaultViewPasswordHistoryState.Content.NotFound -> { + Text( + text = "Not found", + style = MaterialTheme.typography.labelSmall, + color = MaterialTheme.colorScheme.error, + ) + } + } + Text( + text = stringResource(Res.strings.passwordhistory_header_title), + style = MaterialTheme.typography.titleMedium, + overflow = TextOverflow.Ellipsis, + maxLines = 1, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/screen/VaultViewPasswordHistoryState.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/screen/VaultViewPasswordHistoryState.kt new file mode 100644 index 00000000..13724af7 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/screen/VaultViewPasswordHistoryState.kt @@ -0,0 +1,38 @@ +package com.artemchep.keyguard.feature.home.vault.screen + +import androidx.compose.runtime.Immutable +import arrow.optics.optics +import com.artemchep.keyguard.common.model.DSecret +import com.artemchep.keyguard.feature.home.vault.model.VaultPasswordHistoryItem +import com.artemchep.keyguard.ui.FlatItemAction +import com.artemchep.keyguard.ui.Selection +import kotlinx.collections.immutable.ImmutableList + +@Immutable +@optics +data class VaultViewPasswordHistoryState( + val content: Content = Content.Loading, +) { + companion object; + + @Immutable + sealed interface Content { + companion object; + + @Immutable + data class Cipher( + val selection: Selection? = null, + val data: DSecret, + val items: ImmutableList, + val actions: ImmutableList, + ) : Content { + companion object; + } + + @Immutable + data object NotFound : Content + + @Immutable + data object Loading : Content + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/screen/VaultViewPasswordHistoryStateProducer.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/screen/VaultViewPasswordHistoryStateProducer.kt new file mode 100644 index 00000000..c344b974 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/screen/VaultViewPasswordHistoryStateProducer.kt @@ -0,0 +1,296 @@ +package com.artemchep.keyguard.feature.home.vault.screen + +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Delete +import androidx.compose.runtime.Composable +import arrow.core.partially1 +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.model.DSecret +import com.artemchep.keyguard.common.service.clipboard.ClipboardService +import com.artemchep.keyguard.common.usecase.CipherRemovePasswordHistory +import com.artemchep.keyguard.common.usecase.CipherRemovePasswordHistoryById +import com.artemchep.keyguard.common.usecase.DateFormatter +import com.artemchep.keyguard.common.usecase.GetAccounts +import com.artemchep.keyguard.common.usecase.GetCanWrite +import com.artemchep.keyguard.common.usecase.GetCiphers +import com.artemchep.keyguard.feature.confirmation.ConfirmationResult +import com.artemchep.keyguard.feature.confirmation.ConfirmationRoute +import com.artemchep.keyguard.feature.home.vault.model.VaultPasswordHistoryItem +import com.artemchep.keyguard.feature.largetype.LargeTypeRoute +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.feature.navigation.registerRouteResultReceiver +import com.artemchep.keyguard.feature.navigation.state.copy +import com.artemchep.keyguard.feature.navigation.state.produceScreenState +import com.artemchep.keyguard.feature.passwordleak.PasswordLeakRoute +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.ContextItem +import com.artemchep.keyguard.ui.FlatItemAction +import com.artemchep.keyguard.ui.Selection +import com.artemchep.keyguard.ui.buildContextItems +import com.artemchep.keyguard.ui.icons.icon +import kotlinx.collections.immutable.persistentListOf +import kotlinx.collections.immutable.toPersistentList +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.onEach +import org.kodein.di.compose.localDI +import org.kodein.di.direct +import org.kodein.di.instance + +@Composable +fun vaultViewPasswordHistoryScreenState( + itemId: String, +) = with(localDI().direct) { + vaultViewPasswordHistoryScreenState( + getCanWrite = instance(), + getAccounts = instance(), + getCiphers = instance(), + cipherRemovePasswordHistory = instance(), + cipherRemovePasswordHistoryById = instance(), + clipboardService = instance(), + dateFormatter = instance(), + itemId = itemId, + ) +} + +@Composable +fun vaultViewPasswordHistoryScreenState( + getCanWrite: GetCanWrite, + getAccounts: GetAccounts, + getCiphers: GetCiphers, + cipherRemovePasswordHistory: CipherRemovePasswordHistory, + cipherRemovePasswordHistoryById: CipherRemovePasswordHistoryById, + clipboardService: ClipboardService, + dateFormatter: DateFormatter, + itemId: String, +) = produceScreenState( + key = "vault_password_history", + initial = VaultViewPasswordHistoryState(), + args = arrayOf( + getAccounts, + getCiphers, + cipherRemovePasswordHistory, + cipherRemovePasswordHistoryById, + clipboardService, + dateFormatter, + itemId, + ), +) { + val copy = copy( + clipboardService = clipboardService, + ) + val secretFlow = getCiphers() + .map { secrets -> + secrets + .firstOrNull { it.id == itemId } + } + .distinctUntilChanged() + + val selectionSink = mutablePersistedFlow("selection") { + listOf() + } + // Automatically remove selection from items + // that do not exist anymore. + secretFlow + .onEach { secretOrNull -> + val f = secretOrNull?.login?.passwordHistory.orEmpty() + val selectedAccountIds = selectionSink.value + val filteredSelectedAccountIds = selectedAccountIds + .filter { id -> + f.any { it.id == id } + } + if (filteredSelectedAccountIds.size < selectedAccountIds.size) { + selectionSink.value = filteredSelectedAccountIds + } + } + .launchIn(this) + + fun clearSelection() { + selectionSink.value = emptyList() + } + + fun toggleSelection(entry: DSecret.Login.PasswordHistory) { + val entryId = entry.id + + val oldAccountIds = selectionSink.value + val newAccountIds = + if (entryId in oldAccountIds) { + oldAccountIds - entryId + } else { + oldAccountIds + entryId + } + selectionSink.value = newAccountIds + } + + val selectionFlow = combine( + selectionSink, + getCanWrite(), + ) { ids, canWrite -> + if (ids.isEmpty()) { + return@combine null + } + + val actions = if (canWrite) { + val removeAction = FlatItemAction( + icon = Icons.Outlined.Delete, + title = translate(Res.strings.remove_from_history), + onClick = { + val route = registerRouteResultReceiver( + route = ConfirmationRoute( + args = ConfirmationRoute.Args( + icon = icon(Icons.Outlined.Delete), + title = "Remove ${ids.size} passwords from the history?", + ), + ), + ) { + if (it is ConfirmationResult.Confirm) { + cipherRemovePasswordHistoryById( + itemId, + ids, + ).launchIn(appScope) + } + } + val intent = NavigationIntent.NavigateToRoute(route) + navigate(intent) + }, + ) + persistentListOf( + removeAction, + ) + } else { + persistentListOf() + } + Selection( + count = ids.size, + actions = actions, + onClear = ::clearSelection, + ) + } + + val itemsFlow = secretFlow + .map { secretOrNull -> + secretOrNull + ?.login + ?.passwordHistory + .orEmpty() + } + .distinctUntilChanged() + .map { passwordHistory -> + passwordHistory + .sortedByDescending { it.lastUsedDate } + .map { password -> + TempPasswordHistory( + src = password, + date = dateFormatter.formatDateTime(password.lastUsedDate), + actions = buildContextItems { + section { + this += copy.FlatItemAction( + title = translate(Res.strings.copy_password), + value = password.password, + ) + } + section { + this += LargeTypeRoute.showInLargeTypeActionOrNull( + translator = this@produceScreenState, + text = password.password, + colorize = true, + navigate = ::navigate, + ) + this += LargeTypeRoute.showInLargeTypeActionAndLockOrNull( + translator = this@produceScreenState, + text = password.password, + colorize = true, + navigate = ::navigate, + ) + } + section { + this += PasswordLeakRoute.checkBreachesPasswordAction( + translator = this@produceScreenState, + password = password.password, + navigate = ::navigate, + ) + } + }, + ) + } + } + .combine(selectionSink) { passwords, ids -> + val selectionMode = ids.isNotEmpty() + passwords + .asSequence() + .map { passwordWrapper -> + val password = passwordWrapper.src + val selected = password.id in ids + val onToggle = ::toggleSelection.partially1(password) + VaultPasswordHistoryItem.Value( + id = password.id, + title = passwordWrapper.date, + value = password.password, + dropdown = passwordWrapper.actions, + monospace = true, + selected = selected, + selecting = selectionMode, + onClick = onToggle.takeIf { selectionMode }, + onLongClick = onToggle.takeUnless { selectionMode }, + ) + } + .toPersistentList() + } + + val actionsFlow = flowOf( + persistentListOf( + FlatItemAction( + icon = Icons.Outlined.Delete, + title = translate(Res.strings.passwordhistory_clear_history_title), + onClick = { + val route = registerRouteResultReceiver( + route = ConfirmationRoute( + args = ConfirmationRoute.Args( + icon = icon(Icons.Outlined.Delete), + title = translate(Res.strings.passwordhistory_clear_history_confirmation_title), + message = translate(Res.strings.passwordhistory_clear_history_confirmation_text), + ), + ), + ) { + if (it is ConfirmationResult.Confirm) { + cipherRemovePasswordHistory( + itemId, + ).launchIn(appScope) + } + } + val intent = NavigationIntent.NavigateToRoute(route) + navigate(intent) + }, + ), + ), + ) + + combine( + secretFlow, + itemsFlow, + actionsFlow, + selectionFlow, + ) { secretOrNull, items, actions, selection -> + val content = when (secretOrNull) { + null -> VaultViewPasswordHistoryState.Content.NotFound + else -> VaultViewPasswordHistoryState.Content.Cipher( + data = secretOrNull, + selection = selection, + items = items, + actions = actions, + ) + } + VaultViewPasswordHistoryState( + content = content, + ) + } +} + +private data class TempPasswordHistory( + val src: DSecret.Login.PasswordHistory, + val actions: List, + val date: String, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/screen/VaultViewRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/screen/VaultViewRoute.kt new file mode 100644 index 00000000..5c2b00a8 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/screen/VaultViewRoute.kt @@ -0,0 +1,17 @@ +package com.artemchep.keyguard.feature.home.vault.screen + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.navigation.Route + +data class VaultViewRoute( + val itemId: String, + val accountId: String, +) : Route { + @Composable + override fun Content() { + VaultViewScreen( + itemId = itemId, + accountId = accountId, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/screen/VaultViewScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/screen/VaultViewScreen.kt new file mode 100644 index 00000000..6d3c8d2f --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/screen/VaultViewScreen.kt @@ -0,0 +1,393 @@ +@file:OptIn(ExperimentalMaterial3Api::class) + +package com.artemchep.keyguard.feature.home.vault.screen + +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.foundation.ExperimentalFoundationApi +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.RowScope +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.lazy.LazyListState +import androidx.compose.foundation.lazy.items +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Edit +import androidx.compose.material.icons.outlined.Lock +import androidx.compose.material.icons.outlined.SearchOff +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.LocalAbsoluteTonalElevation +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.material3.minimumInteractiveComponentSize +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.alpha +import androidx.compose.ui.draw.clip +import androidx.compose.ui.input.nestedscroll.nestedScroll +import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.LocalAppMode +import com.artemchep.keyguard.feature.EmptyView +import com.artemchep.keyguard.feature.home.vault.component.VaultItemIcon2 +import com.artemchep.keyguard.feature.home.vault.component.VaultViewItem +import com.artemchep.keyguard.feature.home.vault.component.rememberSecretAccentColor +import com.artemchep.keyguard.feature.home.vault.component.surfaceColorAtElevationSemi +import com.artemchep.keyguard.feature.home.vault.model.VaultItemIcon +import com.artemchep.keyguard.feature.navigation.NavigationIcon +import com.artemchep.keyguard.ui.Avatar +import com.artemchep.keyguard.ui.DefaultFab +import com.artemchep.keyguard.ui.DisabledEmphasisAlpha +import com.artemchep.keyguard.ui.FabState +import com.artemchep.keyguard.ui.FlatItemAction +import com.artemchep.keyguard.ui.FlatItemLayout +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.OptionsButton +import com.artemchep.keyguard.ui.ScaffoldLazyColumn +import com.artemchep.keyguard.ui.button.FavouriteToggleButton +import com.artemchep.keyguard.ui.icons.OfflineIcon +import com.artemchep.keyguard.ui.shimmer.shimmer +import com.artemchep.keyguard.ui.skeleton.SkeletonText +import com.artemchep.keyguard.ui.theme.combineAlpha +import com.artemchep.keyguard.ui.toolbar.LargeToolbar + +@Composable +fun VaultViewScreen( + itemId: String, + accountId: String, +) { + val state = vaultViewScreenState( + mode = LocalAppMode.current, + contentColor = LocalContentColor.current, + disabledContentColor = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + itemId = itemId, + accountId = accountId, + ) + VaultViewScreenContent( + state = state, + ) +} + +@OptIn(ExperimentalMaterial3Api::class, ExperimentalFoundationApi::class) +@Composable +fun VaultViewScreenContent( + state: VaultViewState, +) { + val listState = rememberSaveable( + 0, + saver = LazyListState.Saver, + ) { + LazyListState( + firstVisibleItemIndex = 0, + firstVisibleItemScrollOffset = 0, + ) + } + val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior() + ScaffoldLazyColumn( + modifier = Modifier + .nestedScroll(scrollBehavior.nestedScrollConnection), + topAppBarScrollBehavior = scrollBehavior, + topBar = { + LargeToolbar( + title = { + VaultViewTitle( + state = state, + ) + }, + navigationIcon = { + NavigationIcon() + }, + actions = { + VaultViewTitleActions( + state = state, + ) + }, + scrollBehavior = scrollBehavior, + ) + }, + floatingActionState = run { + val action = (state.content as? VaultViewState.Content.Cipher) + ?.primaryAction + val fabState = if (action != null) { + FabState( + onClick = action.onClick, + model = action, + ) + } else { + null + } + rememberUpdatedState(newValue = fabState) + }, + floatingActionButton = { + val action = this.state.value?.model as? FlatItemAction + if (action != null) { + DefaultFab( + icon = { + action.leading?.invoke() + }, + text = { + Text( + text = action.title, + ) + }, + ) + } + }, + listState = listState, + ) { + when (state.content) { + is VaultViewState.Content.Loading -> { + // Show a bunch of skeleton items, so it makes an impression of a + // fully loaded screen. + for (i in 0..1) { + item(i) { + val contentColor = + LocalContentColor.current.copy(alpha = DisabledEmphasisAlpha) + FlatItemLayout( + modifier = Modifier + .shimmer(), + backgroundColor = contentColor.copy(alpha = 0.08f), + content = { + Box( + Modifier + .height(13.dp) + .fillMaxWidth(0.15f) + .clip(MaterialTheme.shapes.medium) + .background(contentColor.copy(alpha = 0.2f)), + ) + Box( + Modifier + .padding(top = 4.dp) + .height(18.dp) + .fillMaxWidth(0.38f) + .clip(MaterialTheme.shapes.medium) + .background(contentColor), + ) + }, + ) + } + } + item(-1) { + val contentColor = + LocalContentColor.current.copy(alpha = DisabledEmphasisAlpha) + Box( + modifier = Modifier + .padding(top = 8.dp) + .fillMaxWidth(), + contentAlignment = Alignment.Center, + ) { + Box( + Modifier + .shimmer() + .height(10.dp) + .fillMaxWidth(0.38f) + .clip(MaterialTheme.shapes.medium) + .background(contentColor.copy(alpha = 0.23f)), + ) + } + Box( + modifier = Modifier + .padding(top = 8.dp) + .fillMaxWidth(), + contentAlignment = Alignment.Center, + ) { + Box( + Modifier + .shimmer() + .height(10.dp) + .fillMaxWidth(0.38f) + .clip(MaterialTheme.shapes.medium) + .background(contentColor.copy(alpha = 0.23f)), + ) + } + } + } + + is VaultViewState.Content.Cipher -> { + val list = state.content.items + if (list.isEmpty()) { + item("header.empty") { + NoItemsPlaceholder() + } + } + items( + items = list, + key = { model -> model.id }, + ) { model -> + VaultViewItem( + modifier = Modifier, + // .animateItemPlacement(), + item = model, + ) + } + } + + else -> { + // Do nothing. + } + } + } +} + +@Composable +private fun VaultViewTitle( + state: VaultViewState, +) = Row( + verticalAlignment = Alignment.CenterVertically, +) { + val isLoading = state.content is VaultViewState.Content.Loading + val shimmerColor = LocalContentColor.current + .combineAlpha(DisabledEmphasisAlpha) + + val avatarBackground = when (state.content) { + is VaultViewState.Content.Loading -> shimmerColor + is VaultViewState.Content.NotFound -> shimmerColor + is VaultViewState.Content.Cipher -> { + val avatarIcon = state.content.icon + val avatarBackground = if ( + (avatarIcon !is VaultItemIcon.VectorIcon && + avatarIcon !is VaultItemIcon.TextIcon) || + state.content.data.service.remote == null + ) { + val elevation = LocalAbsoluteTonalElevation.current + 8.dp + MaterialTheme.colorScheme + .surfaceColorAtElevationSemi(elevation = elevation) + .combineAlpha(LocalContentColor.current.alpha) + } else { + rememberSecretAccentColor( + accentLight = state.content.data.accentLight, + accentDark = state.content.data.accentDark, + ) + } + avatarBackground + } + } + Avatar( + modifier = Modifier + .then( + if (isLoading) { + Modifier + .shimmer() + } else { + Modifier + }, + ), + color = avatarBackground, + ) { + val icon = VaultViewState.content.cipher.icon.getOrNull(state) + if (icon != null) { + VaultItemIcon2( + icon, + modifier = Modifier + .alpha(LocalContentColor.current.alpha), + ) + } + } + Spacer(modifier = Modifier.width(16.dp)) + when (state.content) { + is VaultViewState.Content.Loading -> { + SkeletonText( + modifier = Modifier + .fillMaxWidth(0.33f), + emphasis = MediumEmphasisAlpha, + ) + // Apparently a text has some sort of margins? + Text("") + } + + is VaultViewState.Content.Cipher -> { + val name = state.content.data.name + Text( + text = name, + maxLines = 2, + overflow = TextOverflow.Ellipsis, + ) + } + + is VaultViewState.Content.NotFound -> { + Text( + text = "Not found", + color = MaterialTheme.colorScheme.error + .combineAlpha(LocalContentColor.current.alpha), + ) + } + } + Spacer(modifier = Modifier.width(8.dp)) +} + +@Composable +private fun RowScope.VaultViewTitleActions( + state: VaultViewState, +) { + if (state.content is VaultViewState.Content.Cipher) { + val elevated = state.content.locked.collectAsState() + AnimatedVisibility( + modifier = Modifier + .alpha(LocalContentColor.current.alpha), + visible = !elevated.value, + ) { + Icon( + modifier = Modifier + .minimumInteractiveComponentSize() + .alpha(DisabledEmphasisAlpha), + imageVector = Icons.Outlined.Lock, + contentDescription = null, + ) + } + val synced = state.content.synced + AnimatedVisibility( + modifier = Modifier + .alpha(LocalContentColor.current.alpha), + visible = !synced, + ) { + OfflineIcon( + modifier = Modifier + .minimumInteractiveComponentSize(), + ) + } + val favorite = state.content.data.favorite + FavouriteToggleButton( + favorite = favorite, + onChange = state.content.onFavourite, + ) + IconButton( + onClick = { + state.content.onEdit?.invoke() + }, + enabled = state.content.onEdit != null, + ) { + Icon( + imageVector = Icons.Outlined.Edit, + contentDescription = null, + ) + } + OptionsButton( + actions = state.content.actions, + ) + } +} + +@Composable +private fun NoItemsPlaceholder() { + EmptyView( + icon = { + Icon(Icons.Outlined.SearchOff, null) + }, + text = { + Text(text = "No items") + }, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/screen/VaultViewState.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/screen/VaultViewState.kt new file mode 100644 index 00000000..ed9044bf --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/screen/VaultViewState.kt @@ -0,0 +1,45 @@ +package com.artemchep.keyguard.feature.home.vault.screen + +import androidx.compose.runtime.Immutable +import arrow.optics.optics +import com.artemchep.keyguard.common.model.DSecret +import com.artemchep.keyguard.feature.home.vault.model.VaultItemIcon +import com.artemchep.keyguard.feature.home.vault.model.VaultViewItem +import com.artemchep.keyguard.ui.FlatItemAction +import kotlinx.coroutines.flow.StateFlow + +@Immutable +@optics +data class VaultViewState( + val content: Content = Content.Loading, +) { + companion object; + + @Immutable + @optics + sealed interface Content { + companion object; + + @Immutable + @optics + data class Cipher( + val locked: StateFlow, + val data: DSecret, + val icon: VaultItemIcon, + val synced: Boolean, + val onFavourite: ((Boolean) -> Unit)?, + val onEdit: (() -> Unit)?, + val actions: List, + val primaryAction: FlatItemAction?, + val items: List, + ) : Content { + companion object; + } + + @Immutable + data object NotFound : Content + + @Immutable + data object Loading : Content + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/screen/VaultViewStateProducer.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/screen/VaultViewStateProducer.kt new file mode 100644 index 00000000..6ba9a91f --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/screen/VaultViewStateProducer.kt @@ -0,0 +1,2402 @@ +package com.artemchep.keyguard.feature.home.vault.screen + +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.ExperimentalLayoutApi +import androidx.compose.foundation.layout.RowScope +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Android +import androidx.compose.material.icons.outlined.AutoAwesome +import androidx.compose.material.icons.outlined.Call +import androidx.compose.material.icons.outlined.ContentCopy +import androidx.compose.material.icons.outlined.Directions +import androidx.compose.material.icons.outlined.Email +import androidx.compose.material.icons.outlined.Key +import androidx.compose.material.icons.outlined.Launch +import androidx.compose.material.icons.outlined.Link +import androidx.compose.material.icons.outlined.Password +import androidx.compose.material.icons.outlined.PhoneIphone +import androidx.compose.material.icons.outlined.Save +import androidx.compose.material.icons.outlined.Terminal +import androidx.compose.material.icons.outlined.Textsms +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.Switch +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.text.AnnotatedString +import androidx.compose.ui.text.SpanStyle +import androidx.compose.ui.text.buildAnnotatedString +import androidx.compose.ui.text.font.FontFamily +import androidx.compose.ui.unit.dp +import arrow.core.getOrElse +import com.artemchep.keyguard.AppMode +import com.artemchep.keyguard.android.downloader.journal.room.DownloadInfoEntity2 +import com.artemchep.keyguard.common.io.attempt +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.model.AccountId +import com.artemchep.keyguard.common.model.AddCipherOpenedHistoryRequest +import com.artemchep.keyguard.common.model.BarcodeImageFormat +import com.artemchep.keyguard.common.model.CheckPasswordLeakRequest +import com.artemchep.keyguard.common.model.CipherFieldSwitchToggleRequest +import com.artemchep.keyguard.common.model.DAccount +import com.artemchep.keyguard.common.model.DCollection +import com.artemchep.keyguard.common.model.DFilter +import com.artemchep.keyguard.common.model.DFolderTree +import com.artemchep.keyguard.common.model.DOrganization +import com.artemchep.keyguard.common.model.DSecret +import com.artemchep.keyguard.common.model.DownloadAttachmentRequest +import com.artemchep.keyguard.common.model.LinkInfo +import com.artemchep.keyguard.common.model.LinkInfoAndroid +import com.artemchep.keyguard.common.model.LinkInfoExecute +import com.artemchep.keyguard.common.model.LinkInfoLaunch +import com.artemchep.keyguard.common.model.LinkInfoPlatform +import com.artemchep.keyguard.common.model.RemoveAttachmentRequest +import com.artemchep.keyguard.common.model.UsernameVariation2 +import com.artemchep.keyguard.common.model.UsernameVariationIcon +import com.artemchep.keyguard.common.model.alertScore +import com.artemchep.keyguard.common.model.canDelete +import com.artemchep.keyguard.common.model.canEdit +import com.artemchep.keyguard.common.model.formatH +import com.artemchep.keyguard.common.model.titleH +import com.artemchep.keyguard.common.service.clipboard.ClipboardService +import com.artemchep.keyguard.common.service.download.DownloadManager +import com.artemchep.keyguard.common.service.extract.LinkInfoExtractor +import com.artemchep.keyguard.common.service.extract.LinkInfoRegistry +import com.artemchep.keyguard.common.service.passkey.PassKeyService +import com.artemchep.keyguard.common.service.twofa.TwoFaService +import com.artemchep.keyguard.common.usecase.AddCipherOpenedHistory +import com.artemchep.keyguard.common.usecase.ChangeCipherNameById +import com.artemchep.keyguard.common.usecase.ChangeCipherPasswordById +import com.artemchep.keyguard.common.usecase.CheckPasswordLeak +import com.artemchep.keyguard.common.usecase.CipherExpiringCheck +import com.artemchep.keyguard.common.usecase.CipherFieldSwitchToggle +import com.artemchep.keyguard.common.usecase.CipherIncompleteCheck +import com.artemchep.keyguard.common.usecase.CipherUnsecureUrlAutoFix +import com.artemchep.keyguard.common.usecase.CipherUnsecureUrlCheck +import com.artemchep.keyguard.common.usecase.CipherUrlCheck +import com.artemchep.keyguard.common.usecase.CopyCipherById +import com.artemchep.keyguard.common.usecase.CopyText +import com.artemchep.keyguard.common.usecase.DateFormatter +import com.artemchep.keyguard.common.usecase.DownloadAttachment +import com.artemchep.keyguard.common.usecase.FavouriteCipherById +import com.artemchep.keyguard.common.usecase.GetAccounts +import com.artemchep.keyguard.common.usecase.GetAppIcons +import com.artemchep.keyguard.common.usecase.GetCanWrite +import com.artemchep.keyguard.common.usecase.GetCiphers +import com.artemchep.keyguard.common.usecase.GetCollections +import com.artemchep.keyguard.common.usecase.GetConcealFields +import com.artemchep.keyguard.common.usecase.GetFolderTreeById +import com.artemchep.keyguard.common.usecase.GetFolders +import com.artemchep.keyguard.common.usecase.GetGravatarUrl +import com.artemchep.keyguard.common.usecase.GetJustDeleteMeByUrl +import com.artemchep.keyguard.common.usecase.GetMarkdown +import com.artemchep.keyguard.common.usecase.GetOrganizations +import com.artemchep.keyguard.common.usecase.GetPasswordStrength +import com.artemchep.keyguard.common.usecase.GetTotpCode +import com.artemchep.keyguard.common.usecase.GetWebsiteIcons +import com.artemchep.keyguard.common.usecase.MoveCipherToFolderById +import com.artemchep.keyguard.common.usecase.PasskeyTargetCheck +import com.artemchep.keyguard.common.usecase.RePromptCipherById +import com.artemchep.keyguard.common.usecase.RemoveAttachment +import com.artemchep.keyguard.common.usecase.RemoveCipherById +import com.artemchep.keyguard.common.usecase.RestoreCipherById +import com.artemchep.keyguard.common.usecase.RetryCipher +import com.artemchep.keyguard.common.usecase.TrashCipherById +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.common.util.flow.persistingStateIn +import com.artemchep.keyguard.core.store.bitwarden.canRetry +import com.artemchep.keyguard.core.store.bitwarden.expired +import com.artemchep.keyguard.core.store.bitwarden.message +import com.artemchep.keyguard.feature.attachments.util.createAttachmentItem +import com.artemchep.keyguard.feature.auth.common.util.REGEX_EMAIL +import com.artemchep.keyguard.feature.barcodetype.BarcodeTypeRoute +import com.artemchep.keyguard.feature.confirmation.elevatedaccess.createElevatedAccessDialogIntent +import com.artemchep.keyguard.feature.crashlytics.crashlyticsTap +import com.artemchep.keyguard.feature.emailleak.EmailLeakRoute +import com.artemchep.keyguard.feature.favicon.FaviconImage +import com.artemchep.keyguard.feature.favicon.FaviconUrl +import com.artemchep.keyguard.feature.home.vault.VaultRoute +import com.artemchep.keyguard.feature.home.vault.add.AddRoute +import com.artemchep.keyguard.feature.home.vault.add.LeAddRoute +import com.artemchep.keyguard.feature.home.vault.collections.CollectionsRoute +import com.artemchep.keyguard.feature.home.vault.model.VaultViewItem +import com.artemchep.keyguard.feature.home.vault.search.sort.PasswordSort +import com.artemchep.keyguard.feature.home.vault.util.cipherChangeNameAction +import com.artemchep.keyguard.feature.home.vault.util.cipherChangePasswordAction +import com.artemchep.keyguard.feature.home.vault.util.cipherCopyToAction +import com.artemchep.keyguard.feature.home.vault.util.cipherDeleteAction +import com.artemchep.keyguard.feature.home.vault.util.cipherDisableConfirmAccessAction +import com.artemchep.keyguard.feature.home.vault.util.cipherEnableConfirmAccessAction +import com.artemchep.keyguard.feature.home.vault.util.cipherMoveToFolderAction +import com.artemchep.keyguard.feature.home.vault.util.cipherRestoreAction +import com.artemchep.keyguard.feature.home.vault.util.cipherTrashAction +import com.artemchep.keyguard.feature.home.vault.util.cipherViewPasswordHistoryAction +import com.artemchep.keyguard.feature.justdeleteme.directory.JustDeleteMeServiceViewRoute +import com.artemchep.keyguard.feature.largetype.LargeTypeRoute +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.feature.navigation.state.RememberStateFlowScope +import com.artemchep.keyguard.feature.navigation.state.TranslatorScope +import com.artemchep.keyguard.feature.navigation.state.copy +import com.artemchep.keyguard.feature.navigation.state.produceScreenState +import com.artemchep.keyguard.feature.passkeys.PasskeysCredentialViewRoute +import com.artemchep.keyguard.feature.passkeys.directory.PasskeysServiceViewRoute +import com.artemchep.keyguard.feature.passwordleak.PasswordLeakRoute +import com.artemchep.keyguard.feature.send.action.createSendActionOrNull +import com.artemchep.keyguard.feature.send.action.createShareAction +import com.artemchep.keyguard.feature.tfa.directory.TwoFaServiceViewRoute +import com.artemchep.keyguard.feature.websiteleak.WebsiteLeakRoute +import com.artemchep.keyguard.platform.util.isRelease +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.ContextItem +import com.artemchep.keyguard.ui.FlatItemAction +import com.artemchep.keyguard.ui.buildContextItems +import com.artemchep.keyguard.ui.colorizePassword +import com.artemchep.keyguard.ui.icons.ChevronIcon +import com.artemchep.keyguard.ui.icons.IconBox +import com.artemchep.keyguard.ui.icons.IconBox2 +import com.artemchep.keyguard.ui.icons.icon +import com.artemchep.keyguard.ui.icons.iconSmall +import com.artemchep.keyguard.ui.selection.SelectionHandle +import com.artemchep.keyguard.ui.selection.selectionHandle +import com.artemchep.keyguard.ui.text.annotate +import com.artemchep.keyguard.ui.totp.formatCode2 +import kotlinx.collections.immutable.persistentListOf +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.asFlow +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.flow.flatMapLatest +import kotlinx.coroutines.flow.flow +import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.stateIn +import kotlinx.coroutines.flow.toList +import kotlinx.datetime.Clock +import org.kodein.di.allInstances +import org.kodein.di.compose.localDI +import org.kodein.di.direct +import org.kodein.di.instance +import java.net.URI + +@Composable +fun vaultViewScreenState( + mode: AppMode, + contentColor: Color, + disabledContentColor: Color, + itemId: String, + accountId: String, +) = with(localDI().direct) { + vaultViewScreenState( + getAccounts = instance(), + getCanWrite = instance(), + getCiphers = instance(), + getCollections = instance(), + getOrganizations = instance(), + getFolders = instance(), + getFolderTreeById = instance(), + getConcealFields = instance(), + getMarkdown = instance(), + getAppIcons = instance(), + getWebsiteIcons = instance(), + getTotpCode = instance(), + getPasswordStrength = instance(), + passkeyTargetCheck = instance(), + cipherUnsecureUrlCheck = instance(), + cipherUnsecureUrlAutoFix = instance(), + cipherFieldSwitchToggle = instance(), + moveCipherToFolderById = instance(), + rePromptCipherById = instance(), + changeCipherNameById = instance(), + changeCipherPasswordById = instance(), + checkPasswordLeak = instance(), + retryCipher = instance(), + copyCipherById = instance(), + restoreCipherById = instance(), + trashCipherById = instance(), + removeCipherById = instance(), + favouriteCipherById = instance(), + downloadManager = instance(), + downloadAttachment = instance(), + removeAttachment = instance(), + cipherExpiringCheck = instance(), + cipherIncompleteCheck = instance(), + cipherUrlCheck = instance(), + passKeyService = instance(), + tfaService = instance(), + clipboardService = instance(), + getGravatarUrl = instance(), + dateFormatter = instance(), + addCipherOpenedHistory = instance(), + getJustDeleteMeByUrl = instance(), + windowCoroutineScope = instance(), + linkInfoExtractors = allInstances(), + mode = mode, + contentColor = contentColor, + disabledContentColor = disabledContentColor, + itemId = itemId, + accountId = accountId, + ) +} + +private class Holder( + val uri: DSecret.Uri, + val info: List, +) + +@Composable +fun vaultViewScreenState( + mode: AppMode, + contentColor: Color, + disabledContentColor: Color, + getAccounts: GetAccounts, + getCanWrite: GetCanWrite, + getCiphers: GetCiphers, + getCollections: GetCollections, + getOrganizations: GetOrganizations, + getFolders: GetFolders, + getFolderTreeById: GetFolderTreeById, + getConcealFields: GetConcealFields, + getMarkdown: GetMarkdown, + getAppIcons: GetAppIcons, + getWebsiteIcons: GetWebsiteIcons, + getTotpCode: GetTotpCode, + getPasswordStrength: GetPasswordStrength, + passkeyTargetCheck: PasskeyTargetCheck, + cipherUnsecureUrlCheck: CipherUnsecureUrlCheck, + cipherUnsecureUrlAutoFix: CipherUnsecureUrlAutoFix, + cipherFieldSwitchToggle: CipherFieldSwitchToggle, + moveCipherToFolderById: MoveCipherToFolderById, + rePromptCipherById: RePromptCipherById, + changeCipherNameById: ChangeCipherNameById, + changeCipherPasswordById: ChangeCipherPasswordById, + checkPasswordLeak: CheckPasswordLeak, + retryCipher: RetryCipher, + copyCipherById: CopyCipherById, + restoreCipherById: RestoreCipherById, + trashCipherById: TrashCipherById, + removeCipherById: RemoveCipherById, + favouriteCipherById: FavouriteCipherById, + downloadManager: DownloadManager, + downloadAttachment: DownloadAttachment, + removeAttachment: RemoveAttachment, + cipherExpiringCheck: CipherExpiringCheck, + cipherIncompleteCheck: CipherIncompleteCheck, + cipherUrlCheck: CipherUrlCheck, + passKeyService: PassKeyService, + tfaService: TwoFaService, + clipboardService: ClipboardService, + getGravatarUrl: GetGravatarUrl, + dateFormatter: DateFormatter, + addCipherOpenedHistory: AddCipherOpenedHistory, + getJustDeleteMeByUrl: GetJustDeleteMeByUrl, + windowCoroutineScope: WindowCoroutineScope, + linkInfoExtractors: List>, + itemId: String, + accountId: String, +) = produceScreenState( + key = "vault_view", + initial = VaultViewState(), + args = arrayOf( + getAccounts, + getCiphers, + getCollections, + getOrganizations, + getFolders, + getFolderTreeById, + getConcealFields, + getWebsiteIcons, + getPasswordStrength, + downloadAttachment, + clipboardService, + dateFormatter, + windowCoroutineScope, + linkInfoExtractors, + itemId, + accountId, + ), +) { + addCipherOpenedHistory( + AddCipherOpenedHistoryRequest( + accountId = accountId, + cipherId = itemId, + ), + ) + .attempt() + .launchIn(windowCoroutineScope) + + val copy = copy( + clipboardService = clipboardService, + ) + + val selectionHandle = selectionHandle("selection") + val markdown = getMarkdown().first() + + val accountFlow = getAccounts() + .map { accounts -> + accounts + .firstOrNull { it.id.id == accountId } + } + .distinctUntilChanged() + val secretFlow = getCiphers() + .map { secrets -> + secrets + .firstOrNull { it.id == itemId && it.accountId == accountId } + } + .distinctUntilChanged() + val ciphersFlow = getCiphers() + .map { secrets -> + secrets + .filter { it.deletedDate == null } + } + val folderFlow = secretFlow + .flatMapLatest { secret -> + val folderId = secret?.folderId + ?: return@flatMapLatest flowOf(null) + getFolderTreeById(folderId) + } + .distinctUntilChanged() + val collectionsFlow = getCollections() + .combine( + secretFlow + .map { secret -> secret?.collectionIds.orEmpty() } + .distinctUntilChanged(), + ) { collections, collectionIds -> + collectionIds + .mapNotNull { collectionId -> + collections + .firstOrNull { it.id == collectionId && it.accountId == accountId } + } + .sortedByDescending { it.name } + } + .distinctUntilChanged() + val organizationFlow = getOrganizations() + .combine( + secretFlow + .map { secret -> secret?.organizationId } + .distinctUntilChanged(), + ) { organizations, organizationIdOrNull -> + organizationIdOrNull?.let { organizationId -> + organizations + .firstOrNull { it.id == organizationId && it.accountId == accountId } + } + } + .distinctUntilChanged() + + val fff = MutableStateFlow(false) + val bbb = fff + .combine(secretFlow) { elevatedAccess, cipher -> + elevatedAccess || cipher?.reprompt != true + } + .stateIn(appScope) + combine( + accountFlow, + secretFlow, + folderFlow, + ciphersFlow, + collectionsFlow, + organizationFlow, + getConcealFields(), + getAppIcons(), + getWebsiteIcons(), + getCanWrite(), + ) { array -> + val accountOrNull = array[0] as DAccount? + val secretOrNull = array[1] as DSecret? + val folderOrNull = array[2] as DFolderTree? + val ciphers = array[3] as List + val collections = array[4] as List + val organizationOrNull = array[5] as DOrganization? + val concealFields = array[6] as Boolean + val appIcons = array[7] as Boolean + val websiteIcons = array[8] as Boolean + val canAddSecret = array[9] as Boolean + + val content = when { + accountOrNull == null || secretOrNull == null -> VaultViewState.Content.NotFound + else -> { + val verify: ((() -> Unit) -> Unit)? = if (secretOrNull.reprompt) { + // composable + { block -> + if (!fff.value) { + val intent = createElevatedAccessDialogIntent { + fff.value = true + block() + } + navigate(intent) + } else { + block() + } + } + } else { + null + } + + // Find ciphers that have some limitations + val hasCanNotWriteCiphers = collections.any { it.readOnly } + val hasCanNotSeePassword = + collections.all { it.hidePasswords } && collections.isNotEmpty() + val canEdit = canAddSecret && secretOrNull.canEdit() && !hasCanNotWriteCiphers + val canDelete = canAddSecret && secretOrNull.canDelete() && !hasCanNotWriteCiphers + + val extractors = LinkInfoRegistry(linkInfoExtractors) + val cipherUris = secretOrNull + .uris + .map { uri -> + val extra = extractors.process(uri) + Holder( + uri = uri, + info = extra, + ) + } + val icon = secretOrNull.toVaultItemIcon( + appIcons = appIcons, + websiteIcons = websiteIcons, + ) + val primaryAction = if ( + mode is AppMode.HasType && + mode.type != null && + mode.type != secretOrNull.type + ) { + null + } else when (mode) { + is AppMode.PickPasskey -> null + is AppMode.Main -> null + is AppMode.Pick -> { + FlatItemAction( + title = translate(Res.strings.autofill), + leading = icon(Icons.Outlined.AutoAwesome), + onClick = { + val cipher = secretOrNull + mode.onAutofill(cipher) + }, + ) + } + + is AppMode.Save -> null + is AppMode.SavePasskey -> { + FlatItemAction( + title = translate(Res.strings.passkey_save), + leading = icon(Icons.Outlined.Save), + onClick = { + val cipher = secretOrNull + mode.onComplete(cipher) + }, + ) + } + } + VaultViewState.Content.Cipher( + locked = bbb, + data = secretOrNull, + icon = icon, + synced = secretOrNull.synced, + onFavourite = if (canEdit) { + // lambda + { + val cipherIds = setOf(secretOrNull.id) + favouriteCipherById(cipherIds, it) + .launchIn(windowCoroutineScope) + } + } else { + null + }, + onEdit = if (canEdit) { + // lambda + { + val route = LeAddRoute( + args = AddRoute.Args( + behavior = AddRoute.Args.Behavior( + // When you edit a cipher, you do not know what field + // user is targeting, so it's better to not show the + // keyboard automatically. + autoShowKeyboard = false, + launchEditedCipher = false, + ), + initialValue = secretOrNull, + ), + ) + val intent = NavigationIntent.NavigateToRoute(route) + if (verify != null) { + verify { + navigate(intent) + } + } else { + navigate(intent) + } + } + } else { + null + }, + actions = listOfNotNull( + cipherEnableConfirmAccessAction( + rePromptCipherById = rePromptCipherById, + ciphers = listOf(secretOrNull), + ) + .takeIf { !secretOrNull.reprompt }, + cipherDisableConfirmAccessAction( + rePromptCipherById = rePromptCipherById, + ciphers = listOf(secretOrNull), + ) + .takeIf { secretOrNull.reprompt } + ?.verify(verify), + cipherViewPasswordHistoryAction( + cipher = secretOrNull, + ) + .takeIf { !secretOrNull.login?.passwordHistory.isNullOrEmpty() } + ?.verify(verify), + cipherChangeNameAction( + changeCipherNameById = changeCipherNameById, + ciphers = listOf(secretOrNull), + ).takeIf { canEdit }, + cipherChangePasswordAction( + changeCipherPasswordById = changeCipherPasswordById, + ciphers = listOf(secretOrNull), + ).takeIf { canEdit && secretOrNull.login != null } + ?.verify(verify), + cipherCopyToAction( + copyCipherById = copyCipherById, + ciphers = listOf(secretOrNull), + ).takeIf { canAddSecret }, + cipherMoveToFolderAction( + moveCipherToFolderById = moveCipherToFolderById, + accountId = AccountId(accountId), + ciphers = listOf(secretOrNull), + ).takeIf { canEdit }, + cipherTrashAction( + trashCipherById = trashCipherById, + ciphers = listOf(secretOrNull), + ).takeIf { canDelete && (secretOrNull.deletedDate == null && secretOrNull.service.remote != null) }, + cipherRestoreAction( + restoreCipherById = restoreCipherById, + ciphers = listOf(secretOrNull), + ).takeIf { canDelete && secretOrNull.deletedDate != null }, + cipherDeleteAction( + removeCipherById = removeCipherById, + ciphers = listOf(secretOrNull), + ).takeIf { canDelete && (secretOrNull.deletedDate != null || secretOrNull.service.remote == null) }, + ), + primaryAction = primaryAction, + items = oh( + mode = mode, + sharingScope = screenScope, // FIXME: must not be a screen scope!! + selectionHandle = selectionHandle, + canEdit = canEdit, + contentColor = contentColor, + disabledContentColor = disabledContentColor, + hasCanNotSeePassword = hasCanNotSeePassword, + downloadManager = downloadManager, + downloadAttachment = downloadAttachment, + removeAttachment = removeAttachment, + passKeyService = passKeyService, + tfaService = tfaService, + getTotpCode = getTotpCode, + getPasswordStrength = getPasswordStrength, + passkeyTargetCheck = passkeyTargetCheck, + cipherUnsecureUrlCheck = cipherUnsecureUrlCheck, + cipherUnsecureUrlAutoFix = cipherUnsecureUrlAutoFix, + cipherFieldSwitchToggle = cipherFieldSwitchToggle, + checkPasswordLeak = checkPasswordLeak, + retryCipher = retryCipher, + markdown = markdown, + concealFields = concealFields || secretOrNull.reprompt, + websiteIcons = websiteIcons, + getGravatarUrl = getGravatarUrl, + copy = copy, + dateFormatter = dateFormatter, + linkInfoExtractors = linkInfoExtractors, + account = accountOrNull, + cipher = secretOrNull, + folder = folderOrNull, + organization = organizationOrNull, + ciphers = ciphers, + collections = collections, + cipherUris = cipherUris, + cipherExpiringCheck = cipherExpiringCheck, + cipherIncompleteCheck = cipherIncompleteCheck, + cipherUrlCheck = cipherUrlCheck, + getJustDeleteMeByUrl = getJustDeleteMeByUrl, + verify = verify, + ).toList(), + ) + } + } + VaultViewState( + content = content, + ) + } +} + +private fun RememberStateFlowScope.oh( + mode: AppMode, + sharingScope: CoroutineScope, + selectionHandle: SelectionHandle, + canEdit: Boolean, + contentColor: Color, + disabledContentColor: Color, + hasCanNotSeePassword: Boolean, + downloadManager: DownloadManager, + downloadAttachment: DownloadAttachment, + removeAttachment: RemoveAttachment, + passKeyService: PassKeyService, + tfaService: TwoFaService, + getTotpCode: GetTotpCode, + getPasswordStrength: GetPasswordStrength, + passkeyTargetCheck: PasskeyTargetCheck, + cipherUnsecureUrlCheck: CipherUnsecureUrlCheck, + cipherUnsecureUrlAutoFix: CipherUnsecureUrlAutoFix, + cipherFieldSwitchToggle: CipherFieldSwitchToggle, + checkPasswordLeak: CheckPasswordLeak, + retryCipher: RetryCipher, + markdown: Boolean, + concealFields: Boolean, + websiteIcons: Boolean, + getGravatarUrl: GetGravatarUrl, + copy: CopyText, + dateFormatter: DateFormatter, + linkInfoExtractors: List>, + account: DAccount, + cipher: DSecret, + folder: DFolderTree?, + organization: DOrganization?, + ciphers: List, + collections: List, + cipherUris: List, + cipherExpiringCheck: CipherExpiringCheck, + cipherIncompleteCheck: CipherIncompleteCheck, + cipherUrlCheck: CipherUrlCheck, + getJustDeleteMeByUrl: GetJustDeleteMeByUrl, + verify: ((() -> Unit) -> Unit)?, +) = flow { + val cipherError = cipher.service.error + if (cipherError != null && !cipherError.expired(cipher.revisionDate)) { + val time = dateFormatter.formatDateTime(cipherError.revisionDate) + val model = VaultViewItem.Error( + id = "error", + name = "Couldn't sync the item", + message = cipherError.message(), + timestamp = time, + onRetry = if (cipherError.canRetry(cipher.revisionDate)) { + // lambda + { + val cipherIds = setOf(cipher.id) + retryCipher(cipherIds) + .launchIn(appScope) + } + } else { + null + }, + ) + emit(model) + } + + val incomplete = cipherIncompleteCheck.invoke(cipher) + if (incomplete) { + val model = VaultViewItem.Info( + id = "info.incomplete", + name = translate(Res.strings.item_incomplete_title), + message = translate(Res.strings.item_incomplete_text), + long = false, + ) + emit(model) + } + + val expiring = cipherExpiringCheck.invoke(cipher, Clock.System.now()) + if (expiring != null) { + val expiringDate = dateFormatter.formatDate(expiring) + val expiringMessage = when (cipher.type) { + DSecret.Type.Card -> + "This card expires on $expiringDate. There are a few things you can do to ensure a smooth transition:\n" + + "1. Get a new card: Your card issuer may have already sent you a replacement card with a new expiration date. If not, contact your card issuer to see if they plan to send you a new card and when to expect it.\n" + + "2. Update automatic payments: If you have any automatic payments set up with your card, such as a monthly gym membership or Netflix subscription, make sure to update the information with the new card number and expiration date.\n" + + "3. Destroy the old card: Once your new card arrives and you have updated any necessary information, be sure to securely dispose of the old, expired card to prevent identity theft." + + else -> "This item expires on $expiringDate." + } + val model = VaultViewItem.Info( + id = "info.expiring", + name = translate(Res.strings.expiring_soon), + message = expiringMessage, + long = true, + ) + emit(model) + } + + val cipherCard = cipher.card + if (cipherCard != null) { + val model = create( + translatorScope = this@oh, + copy = copy, + id = "card", + verify = verify.takeIf { concealFields }, + concealFields = concealFields, + data = cipherCard, + ) + emit(model) + val cipherCardCode = cipherCard.code + if (cipherCardCode != null) { + val cvv = create( + copy = copy, + id = "card.cvv", + accountId = account.id, + title = translate(Res.strings.vault_view_card_cvv_label), + value = cipherCardCode, + verify = verify.takeIf { concealFields }, + private = concealFields, + monospace = true, + elevated = true, + ) + emit(cvv) + } + } + val cipherLogin = cipher.login + if (cipherLogin != null) { + val cipherLoginUsername = cipherLogin.username + if (cipherLoginUsername != null) { + val usernameVariation = UsernameVariation2.of( + getGravatarUrl, + cipherLoginUsername, + ) + val model = create( + copy = copy, + id = "login.username", + accountId = account.id, + title = translate(Res.strings.username), + value = cipherLoginUsername, + username = true, + elevated = true, + leading = { + UsernameVariationIcon(usernameVariation = usernameVariation) + }, + ) + emit(model) + } + val cipherLoginPassword = cipherLogin.password + if (cipherLoginPassword != null) { + val scoreRaw = + getPasswordStrength(cipherLoginPassword).attempt().bind().getOrNull()?.score + + val pwnage = checkPasswordLeak(CheckPasswordLeakRequest(cipherLoginPassword)) + .attempt() + .asFlow() + .map { + val occurrences = it.getOrElse { 0 } + if (occurrences > 0) + VaultViewItem.Value.Badge( + text = translate(Res.strings.password_pwned_label), + score = 0f, + ) + else null + } + .stateIn(sharingScope, SharingStarted.Eagerly, null) + val model = create( + copy = copy, + id = "login.password", + accountId = account.id, + title = translate(Res.strings.password), + value = cipherLoginPassword, + verify = verify.takeIf { concealFields }, + private = concealFields, + hidden = hasCanNotSeePassword, + password = true, + monospace = true, + colorize = true, + elevated = true, + badge = scoreRaw + ?.takeUnless { hasCanNotSeePassword } + ?.let { + val text = translate(it.formatH()) + val score = it.alertScore() + VaultViewItem.Value.Badge( + text = text, + score = score, + ) + }, + badge2 = listOf(pwnage), + leading = { + IconBox(main = Icons.Outlined.Password) + }, + ) + emit(model) + + val reusedPasswords = ciphers + .count { + it.login?.password == cipherLoginPassword + } + if (reusedPasswords > 1) { + val reusedPasswordsModel = VaultViewItem.ReusedPassword( + id = "login.password.reused", + count = reusedPasswords, + onClick = { + val intent = NavigationIntent.NavigateToRoute( + VaultRoute.watchtower( + title = translate(Res.strings.reused_passwords), + subtitle = translate(Res.strings.watchtower_header_title), + filter = DFilter.ByPasswordValue(cipherLoginPassword), + sort = PasswordSort, + ), + ) + navigate(intent) + }, + ) + emit(reusedPasswordsModel) + } + + val passwordDate = cipherLogin.passwordRevisionDate + if (passwordDate != null) { + // vault_view_password_revision_label + val b = VaultViewItem.Label( + id = "login.password.revision", + text = AnnotatedString( + translate( + Res.strings.vault_view_password_revision_label, + dateFormatter.formatDateTime(passwordDate), + ), + ), + ) + emit(b) + } + } + val cipherLoginTotp = cipherLogin.totp + if (cipherLoginTotp != null) { + val sharing = SharingStarted.WhileSubscribed(1000L) + val localStateFlow = getTotpCode(cipherLoginTotp.token) + .map { + // Format the totp code, so it's easier to + // read for the user. + val codes = it.formatCode2() + val dropdown = buildContextItems { + section { + this += copy.FlatItemAction( + title = translate(Res.strings.copy_otp_code), + value = it.code, + ) + this += copy.FlatItemAction( + leading = iconSmall(Icons.Outlined.ContentCopy, Icons.Outlined.Key), + title = translate(Res.strings.copy_otp_secret_code), + value = cipherLoginTotp.token.raw, + hidden = true, + ).verify(verify) + } + section { + this += BarcodeTypeRoute.showInBarcodeTypeActionOrNull( + translator = this@oh, + data = cipherLoginTotp.token.raw, + text = translate(Res.strings.barcodetype_copy_otp_secret_code_note), + single = true, + navigate = ::navigate, + ) + } + section { + this += createShareAction( + translator = this@oh, + text = it.code, + navigate = ::navigate, + ) + } + } + + VaultViewItem.Totp.LocalState( + codes = codes, + dropdown = dropdown, + ) + } + .attempt() + .map { either -> + either + .getOrElse { + VaultViewItem.Totp.LocalState( + codes = persistentListOf(), + dropdown = persistentListOf(), + ) + } + } + .persistingStateIn(appScope, sharing) + val model = VaultViewItem.Totp( + id = "login.totp", + elevation = 1.dp, + title = translate(Res.strings.one_time_password), + copy = copy, + totp = cipherLoginTotp.token, + verify = verify, + localStateFlow = localStateFlow, + ) + emit(model) + } else { + kotlin.run { + if ( + cipherLogin.fido2Credentials.isNotEmpty() && + cipherLogin.password.isNullOrEmpty() + ) { + return@run + } + + val tfa = tfaService.get() + .crashlyticsTap() + .attempt() + .bind() + .getOrNull() + .orEmpty() + + val isUnsecure = DFilter.ByTfaWebsites + .match(cipher, tfa) + .firstOrNull() + if (isUnsecure != null) { + val model = VaultViewItem.InactiveTotp( + id = "error2", + info = isUnsecure, + onClick = { + val route = TwoFaServiceViewRoute( + args = TwoFaServiceViewRoute.Args(isUnsecure), + ) + val intent = NavigationIntent.NavigateToRoute(route) + navigate(intent) + }, + ) + emit(model) + } + } + } + if (cipher.login.fido2Credentials.isNullOrEmpty()) { + val tfa = passKeyService.get() + .crashlyticsTap() + .attempt() + .bind() + .getOrNull() + .orEmpty() + + val isUnsecure = DFilter.ByPasskeyWebsites + .match(cipher, tfa) + .firstOrNull() + if (isUnsecure != null) { + val model = VaultViewItem.InactivePasskey( + id = "error2.passkeys", + info = isUnsecure, + onClick = { + val route = PasskeysServiceViewRoute( + args = PasskeysServiceViewRoute.Args(isUnsecure), + ) + val intent = NavigationIntent.NavigateToRoute(route) + navigate(intent) + }, + ) + emit(model) + } + } + val fido2Credentials = cipherLogin.fido2Credentials + if (fido2Credentials.isNotEmpty()) { + val loginPasskeysItem = VaultViewItem.Section( + id = "login.passkey.header", + text = translate(Res.strings.passkeys), + ) + emit(loginPasskeysItem) + fido2Credentials.forEachIndexed { index, item -> + val onUse = when (mode) { + is AppMode.PickPasskey -> { + val matches = passkeyTargetCheck(item, mode.target) + .attempt() + .bind() + .isRight { it } + if (matches) { + // lambda + { + mode.onComplete(item) + } + } else { + null + } + } + + else -> null + } + val model = VaultViewItem.Passkey( + id = "login.passkey.index$index", + value = item.userDisplayName + .takeIf { !it.isNullOrEmpty() }, + source = item, + onUse = onUse, + onClick = { + val route = PasskeysCredentialViewRoute( + args = PasskeysCredentialViewRoute.Args( + cipherId = cipher.id, + credentialId = item.credentialId, + model = item, + ), + ) + val intent = NavigationIntent.NavigateToRoute(route) + navigate(intent) + }, + ) + emit(model) + } + } + } + + val cipherIdentity = cipher.identity + if (cipherIdentity != null) { + val identityItem = kotlin.run { + val actions = mutableListOf() + if (cipherIdentity.phone != null) { + actions += FlatItemAction( + icon = Icons.Outlined.Call, + title = translate(Res.strings.vault_view_call_phone_action), + onClick = { + val intent = NavigationIntent.NavigateToPhone( + phoneNumber = cipherIdentity.phone, + ) + navigate(intent) + }, + ) + actions += FlatItemAction( + icon = Icons.Outlined.Textsms, + title = translate(Res.strings.vault_view_text_phone_action), + onClick = { + val intent = NavigationIntent.NavigateToSms( + phoneNumber = cipherIdentity.phone, + ) + navigate(intent) + }, + ) + } + if (cipherIdentity.email != null) { + actions += FlatItemAction( + icon = Icons.Outlined.Email, + title = translate(Res.strings.vault_view_email_action), + onClick = { + val intent = NavigationIntent.NavigateToEmail( + email = cipherIdentity.email, + ) + navigate(intent) + }, + ) + } + if ( + cipherIdentity.address1 != null || + cipherIdentity.address2 != null || + cipherIdentity.address3 != null || + cipherIdentity.city != null || + cipherIdentity.state != null || + cipherIdentity.postalCode != null || + cipherIdentity.country != null + ) { + actions += FlatItemAction( + icon = Icons.Outlined.Directions, + title = translate(Res.strings.vault_view_navigate_action), + onClick = { + val intent = NavigationIntent.NavigateToMaps( + address1 = cipherIdentity.address1, + address2 = cipherIdentity.address2, + address3 = cipherIdentity.address3, + city = cipherIdentity.city, + state = cipherIdentity.state, + postalCode = cipherIdentity.postalCode, + country = cipherIdentity.country, + ) + navigate(intent) + }, + ) + } + + VaultViewItem.Identity( + id = "identity", + data = cipherIdentity, + actions = actions, + ) + } + emit(identityItem) + + suspend fun yieldContactField( + key: String, + value: String?, + title: String? = null, + username: Boolean = false, + ) { + if (value == null) { + return + } + + val contactFieldItem = create( + copy = copy, + id = "identity.contact.$key", + accountId = account.id, + title = title, + value = value, + private = false, + monospace = false, + elevated = true, + username = username, + ) + emit(contactFieldItem) + } + + if ( + cipherIdentity.phone != null || + cipherIdentity.email != null || + cipherIdentity.username != null + ) { + val contactHeaderItem = VaultViewItem.Section( + id = "identity.contact.header", + text = translate(Res.strings.contact_info), + ) + emit(contactHeaderItem) + } + + yieldContactField("phone", cipherIdentity.phone, translate(Res.strings.phone_number)) + yieldContactField("email", cipherIdentity.email, translate(Res.strings.email)) + yieldContactField( + "username", + value = cipherIdentity.username, + title = translate(Res.strings.username), + username = true, + ) + + suspend fun yieldMiscField( + key: String, + value: String?, + title: String? = null, + conceal: Boolean = false, + ) { + if (value == null) { + return + } + + val miscFieldItem = create( + copy = copy, + id = "identity.misc.$key", + accountId = account.id, + title = title, + value = value, + verify = verify.takeIf { conceal }, + private = conceal, + monospace = false, + elevated = false, + ) + emit(miscFieldItem) + } + + if ( + cipherIdentity.company != null || + cipherIdentity.ssn != null || + cipherIdentity.passportNumber != null || + cipherIdentity.licenseNumber != null + ) { + val miscHeaderItem = VaultViewItem.Section( + id = "identity.misc.header", + text = translate(Res.strings.misc), + ) + emit(miscHeaderItem) + } + + yieldMiscField("company", cipherIdentity.company, translate(Res.strings.company)) + yieldMiscField( + "ssn", + cipherIdentity.ssn, + title = translate(Res.strings.ssn), + conceal = concealFields, + ) + yieldMiscField( + "passportNumber", + cipherIdentity.passportNumber, + title = translate(Res.strings.passport_number), + conceal = concealFields, + ) + yieldMiscField( + "licenseNumber", + cipherIdentity.licenseNumber, + title = translate(Res.strings.license_number), + conceal = concealFields, + ) + + suspend fun yieldAddressField( + key: String, + value: String?, + title: String? = null, + ) { + if (value == null) { + return + } + + val addressFieldModel = create( + copy = copy, + id = "identity.address.$key", + accountId = account.id, + title = title, + value = value, + private = false, + monospace = false, + elevated = false, + ) + emit(addressFieldModel) + } + + if ( + cipherIdentity.address1 != null || + cipherIdentity.address2 != null || + cipherIdentity.address3 != null || + cipherIdentity.city != null || + cipherIdentity.state != null || + cipherIdentity.postalCode != null || + cipherIdentity.country != null + ) { + val addressSectionModel = VaultViewItem.Section( + id = "identity.address.header", + text = translate(Res.strings.address), + ) + emit(addressSectionModel) + } + + yieldAddressField("address1", cipherIdentity.address1) + yieldAddressField("address2", cipherIdentity.address2) + yieldAddressField("address3", cipherIdentity.address3) + yieldAddressField("city", cipherIdentity.city, translate(Res.strings.city)) + yieldAddressField("state", cipherIdentity.state, translate(Res.strings.state)) + yieldAddressField( + "postalCode", + cipherIdentity.postalCode, + translate(Res.strings.postal_code), + ) + yieldAddressField("country", cipherIdentity.country, translate(Res.strings.country)) + } + + if (cipher.type == DSecret.Type.SecureNote && cipher.notes.isNotEmpty()) { + val note = VaultViewItem.Note( + id = "note.text", + text = if (markdown) cipher.notes.trimIndent() else cipher.notes, + markdown = markdown, + verify = verify, + conceal = verify != null, + ) + emit(note) + } + + val linkedApps = cipherUris + .filter { holder -> + holder + .info + .any { info -> + info is LinkInfoPlatform.Android || + info is LinkInfoPlatform.IOS + } + } + if (linkedApps.isNotEmpty()) { + val section = VaultViewItem.Section( + id = "link.app", + text = translate(Res.strings.linked_apps), + ) + emit(section) + // items + linkedApps + .mapIndexed { index, holder -> + val id = "link.app.$index" + val item = aaaa( + canEdit = canEdit, + contentColor = contentColor, + disabledContentColor = disabledContentColor, + websiteIcons = websiteIcons, + cipherUnsecureUrlCheck = cipherUnsecureUrlCheck, + cipherUnsecureUrlAutoFix = cipherUnsecureUrlAutoFix, + getJustDeleteMeByUrl = getJustDeleteMeByUrl, + holder = holder, + id = id, + accountId = account.accountId(), + cipherId = cipher.id, + copy = copy, + ) + item + } + .forEach { item -> + emit(item) + } + } + + val linkedWebsites = cipherUris + .filter { holder -> + holder + .info + .any { info -> + info is LinkInfoPlatform.Web || + info is LinkInfoPlatform.Other + } + } + if (linkedWebsites.isNotEmpty()) { + val section = VaultViewItem.Section( + id = "link.website", + text = translate(Res.strings.linked_uris), + ) + emit(section) + // items + linkedWebsites + .mapIndexed { index, holder -> + val id = "link.website.$index" + val item = aaaa( + canEdit = canEdit, + contentColor = contentColor, + disabledContentColor = disabledContentColor, + websiteIcons = websiteIcons, + cipherUnsecureUrlCheck = cipherUnsecureUrlCheck, + cipherUnsecureUrlAutoFix = cipherUnsecureUrlAutoFix, + getJustDeleteMeByUrl = getJustDeleteMeByUrl, + holder = holder, + id = id, + accountId = account.accountId(), + cipherId = cipher.id, + copy = copy, + ) + item + } + .forEach { item -> + emit(item) + } + } + if (cipher.fields.isNotEmpty()) { + val section = VaultViewItem.Section( + id = "custom", + text = translate(Res.strings.custom_fields), + ) + emit(section) + // items + cipher.fields.forEachIndexed { index, field -> + if (field.type == DSecret.Field.Type.Boolean) { + fun createAction( + value: Boolean, + ) = FlatItemAction( + title = "Toggle value", + trailing = { + Switch( + checked = !value, + onCheckedChange = null, + enabled = canEdit, + ) + }, + onClick = if (canEdit) { + // lambda + { + val request = mapOf( + cipher.id to listOf( + CipherFieldSwitchToggleRequest( + fieldIndex = index, + fieldName = field.name, + value = value, + ), + ), + ) + cipherFieldSwitchToggle(request) + .launchIn(appScope) + } + } else { + null + }, + ) + + val value = field.value?.toBooleanStrictOrNull() ?: false + val actions = listOf( + createAction(!value), + ) + val m = VaultViewItem.Switch( + id = "custom.$index", + title = field.name.orEmpty(), + value = value, + dropdown = actions, + ) + emit(m) + return@forEachIndexed + } + if (field.type == DSecret.Field.Type.Linked) { + val t = annotate( + when (field.linkedId) { + DSecret.Field.LinkedId.Login_Username -> Res.strings.field_linked_to_username + DSecret.Field.LinkedId.Login_Password -> Res.strings.field_linked_to_password + DSecret.Field.LinkedId.Card_CardholderName -> Res.strings.field_linked_to_card_cardholdername + DSecret.Field.LinkedId.Card_ExpMonth -> Res.strings.field_linked_to_card_expmonth + DSecret.Field.LinkedId.Card_ExpYear -> Res.strings.field_linked_to_card_expyear + DSecret.Field.LinkedId.Card_Code -> Res.strings.field_linked_to_card_code + DSecret.Field.LinkedId.Card_Brand -> Res.strings.field_linked_to_card_brand + DSecret.Field.LinkedId.Card_Number -> Res.strings.field_linked_to_card_number + DSecret.Field.LinkedId.Identity_Title -> Res.strings.field_linked_to_identity_title + DSecret.Field.LinkedId.Identity_MiddleName -> Res.strings.field_linked_to_identity_middlename + DSecret.Field.LinkedId.Identity_Address1 -> Res.strings.field_linked_to_identity_address1 + DSecret.Field.LinkedId.Identity_Address2 -> Res.strings.field_linked_to_identity_address2 + DSecret.Field.LinkedId.Identity_Address3 -> Res.strings.field_linked_to_identity_address3 + DSecret.Field.LinkedId.Identity_City -> Res.strings.field_linked_to_identity_city + DSecret.Field.LinkedId.Identity_State -> Res.strings.field_linked_to_identity_state + DSecret.Field.LinkedId.Identity_PostalCode -> Res.strings.field_linked_to_identity_postalcode + DSecret.Field.LinkedId.Identity_Country -> Res.strings.field_linked_to_identity_country + DSecret.Field.LinkedId.Identity_Company -> Res.strings.field_linked_to_identity_company + DSecret.Field.LinkedId.Identity_Email -> Res.strings.field_linked_to_identity_email + DSecret.Field.LinkedId.Identity_Phone -> Res.strings.field_linked_to_identity_phone + DSecret.Field.LinkedId.Identity_Ssn -> Res.strings.field_linked_to_identity_ssn + DSecret.Field.LinkedId.Identity_Username -> Res.strings.field_linked_to_identity_username + DSecret.Field.LinkedId.Identity_PassportNumber -> Res.strings.field_linked_to_identity_passportnumber + DSecret.Field.LinkedId.Identity_LicenseNumber -> Res.strings.field_linked_to_identity_licensenumber + DSecret.Field.LinkedId.Identity_FirstName -> Res.strings.field_linked_to_identity_firstname + DSecret.Field.LinkedId.Identity_LastName -> Res.strings.field_linked_to_identity_lastname + DSecret.Field.LinkedId.Identity_FullName -> Res.strings.field_linked_to_identity_fullname + null -> Res.strings.field_linked_to_unknown_field + }, + field.name.orEmpty() to SpanStyle( + fontFamily = FontFamily.Monospace, + color = contentColor, + ), + ) + val m = VaultViewItem.Label( + id = "custom.$index", + text = t, + ) + emit(m) + return@forEachIndexed + } + + val hidden = field.type == DSecret.Field.Type.Hidden + val m = create( + copy = copy, + id = "custom.$index", + accountId = account.id, + title = field.name.orEmpty(), + value = field.value.orEmpty(), + verify = verify.takeIf { hidden && concealFields }, + private = hidden && concealFields, + ) + emit(m) + } + } + if (cipher.type != DSecret.Type.SecureNote && cipher.notes.isNotEmpty()) { + val section = VaultViewItem.Section( + id = "note", + text = translate(Res.strings.notes), + ) + emit(section) + val note = VaultViewItem.Note( + id = "note.text", + text = if (markdown) cipher.notes.trimIndent() else cipher.notes, + markdown = markdown, + verify = verify, + conceal = verify != null, + ) + emit(note) + } + if (cipher.attachments.isNotEmpty()) { + val section = VaultViewItem.Section( + id = "attachment", + text = translate(Res.strings.attachments), + ) + emit(section) + // items + cipher.attachments.forEachIndexed { index, attachment -> + when (attachment) { + is DSecret.Attachment.Remote -> { + val downloadIo = kotlin.run { + val request = DownloadAttachmentRequest.ByLocalCipherAttachment( + cipher = cipher, + attachment = attachment, + ) + downloadAttachment(listOf(request)) + } + val removeIo = kotlin.run { + val request = RemoveAttachmentRequest.ByLocalCipherAttachment( + cipher = cipher, + attachment = attachment, + ) + removeAttachment(listOf(request)) + } + + val actualItem = createAttachmentItem( + tag = DownloadInfoEntity2.AttachmentDownloadTag( + localCipherId = cipher.id, + remoteCipherId = cipher.service.remote?.id, + attachmentId = attachment.id, + ), + selectionHandle = selectionHandle, + sharingScope = sharingScope, + attachment = attachment, + launchViewCipherData = null, + downloadManager = downloadManager, + downloadIo = downloadIo, + removeIo = removeIo, + verify = verify, + ) + val wrapperItem = VaultViewItem.Attachment( + id = actualItem.key, + item = actualItem, + ) + emit(wrapperItem) + } + + is DSecret.Attachment.Local -> { + // TODO: Show local attachments. + } + } + } + } + + if (folder != null) { + val section = VaultViewItem.Section( + id = "folder", + text = translate(Res.strings.folder), + ) + emit(section) + + val f = VaultViewItem.Folder( + id = "folder.0", + nodes = folder.hierarchy + .map { + VaultViewItem.Folder.FolderNode( + name = it.name, + onClick = { + val route = VaultRoute.by( + translator = this@oh, + folder = it.folder, + ) + val intent = NavigationIntent.NavigateToRoute(route) + navigate(intent) + }, + ) + }, + onClick = { + val route = VaultRoute.by( + translator = this@oh, + folder = folder.folder, + ) + val intent = NavigationIntent.NavigateToRoute(route) + navigate(intent) + }, + ) + emit(f) + } + + if (collections.isNotEmpty()) { + val section = VaultViewItem.Section( + id = "collection", + text = + if (collections.size == 1) { + translate(Res.strings.collection) + } else { + translate(Res.strings.collections) + }, + ) + emit(section) + collections.forEach { collection -> + val f = VaultViewItem.Collection( + id = "collection.${collection.id}", + title = collection.name, + onClick = { + val route = VaultRoute.by( + translator = this@oh, + collection = collection, + ) + val intent = NavigationIntent.NavigateToRoute(route) + navigate(intent) + }, + ) + emit(f) + } + } + + if (organization != null) { + val section = VaultViewItem.Section( + id = "organization", + text = translate(Res.strings.organization), + ) + emit(section) + val f = VaultViewItem.Organization( + id = "organization.0", + title = organization.name, + onClick = { + val intent = NavigationIntent.NavigateToRoute( + CollectionsRoute( + args = CollectionsRoute.Args( + accountId = organization.accountId.let(::AccountId), + organizationId = organization.id, + ), + ), + ) + navigate(intent) + }, + ) + emit(f) + } + + val s = VaultViewItem.Spacer( + id = "end.spacer", + height = 24.dp, + ) + emit(s) + val x = VaultViewItem.Label( + id = "account", + text = annotate( + Res.strings.vault_view_saved_to_label, + account.username to SpanStyle( + color = contentColor, + ), + account.host to SpanStyle( + color = contentColor, + ), + ), + ) + emit(x) + val createdDate = cipher.createdDate + if (createdDate != null) { + val w = VaultViewItem.Label( + id = "created", + text = AnnotatedString( + translate( + Res.strings.vault_view_created_at_label, + dateFormatter.formatDateTime(createdDate), + ), + ), + ) + emit(w) + } + + val a = VaultViewItem.Label( + id = "revision", + text = AnnotatedString( + translate( + Res.strings.vault_view_revision_label, + dateFormatter.formatDateTime(cipher.revisionDate), + ), + ), + ) + emit(a) + val deletedDate = cipher.deletedDate + if (deletedDate != null) { + val b = VaultViewItem.Label( + id = "deleted", + text = AnnotatedString( + translate( + Res.strings.vault_view_deleted_at_label, + dateFormatter.formatDateTime(deletedDate), + ), + ), + ) + emit(b) + } + + if (!isRelease && false) { + val debugSpacer = VaultViewItem.Spacer( + id = "debug.spacer", + height = 24.dp, + ) + emit(debugSpacer) + val debugSection = VaultViewItem.Section( + id = "debug.section", + text = "Debug", + ) + emit(debugSection) + + // IDs + val localId = create( + copy = copy, + id = "debug.local_id", + accountId = account.id, + title = "Local ID", + value = cipher.id, + ) + emit(localId) + val remoteId = create( + copy = copy, + id = "debug.remote_id", + accountId = account.id, + title = "Remote ID", + value = cipher.service.remote?.id.orEmpty(), + ) + emit(remoteId) + val remoteRevDate = create( + copy = copy, + id = "debug.remote_rev_date", + accountId = account.id, + title = "Remote revision date", + value = cipher.service.remote?.revisionDate + ?.let { date -> + dateFormatter.formatDateTime(date) + } + .orEmpty(), + ) + emit(remoteRevDate) + + // TOTP + // TODO: Fix meeeee!!! +// val totp = cipher.login?.totp +// if (totp != null) { +// val intent = KeyguardClipboardService.Companion.getIntent( +// context = context, +// cipherName = cipher.name, +// totpToken = totp.token, +// ) +// val remoteRevDate2 = VaultViewItem.Button( +// id = "adasdadasdasdads", +// text = "Launch TOTP", +// onClick = { +// context.startForegroundService(intent) +// }, +// ) +// emit(remoteRevDate2) +// } + } +} + +private suspend fun RememberStateFlowScope.aaaa( + canEdit: Boolean, + contentColor: Color, + disabledContentColor: Color, + websiteIcons: Boolean, + cipherUnsecureUrlCheck: CipherUnsecureUrlCheck, + cipherUnsecureUrlAutoFix: CipherUnsecureUrlAutoFix, + getJustDeleteMeByUrl: GetJustDeleteMeByUrl, + holder: Holder, + id: String, + accountId: String, + cipherId: String, + copy: CopyText, +): VaultViewItem.Uri { + val uri = holder.uri + + val matchTypeTitle = holder.uri.match + .takeUnless { it == DSecret.Uri.MatchType.default } + ?.titleH() + ?.let { + translate(it) + } + + val platformMarker = holder.info + .firstOrNull { it is LinkInfoPlatform } as LinkInfoPlatform? + when (platformMarker) { + is LinkInfoPlatform.Android -> { + val androidMarker = holder.info + .firstOrNull { it is LinkInfoAndroid } as LinkInfoAndroid? + when (androidMarker) { + is LinkInfoAndroid.Installed -> { + val dropdown = buildContextItems { + section { + this += copy.FlatItemAction( + title = translate(Res.strings.copy_package_name), + value = platformMarker.packageName, + ) + } + section { + this += FlatItemAction( + leading = { + Image( + modifier = Modifier + .size(24.dp) + .clip(CircleShape), + painter = androidMarker.icon, + contentDescription = null, + ) + }, + title = translate(Res.strings.uri_action_launch_app_title), + trailing = { + ChevronIcon() + }, + onClick = { + val intent = + NavigationIntent.NavigateToApp(platformMarker.packageName) + navigate(intent) + }, + ) + this += FlatItemAction( + icon = Icons.Outlined.Launch, + title = translate(Res.strings.uri_action_launch_play_store_title), + trailing = { + ChevronIcon() + }, + onClick = { + val intent = + NavigationIntent.NavigateToBrowser(platformMarker.playStoreUrl) + navigate(intent) + }, + ) + } + section { + this += createShareAction( + translator = this@aaaa, + text = platformMarker.playStoreUrl, + navigate = ::navigate, + ) + } + } + return VaultViewItem.Uri( + id = id, + icon = { + Image( + modifier = Modifier + .size(24.dp) + .clip(CircleShape), + painter = androidMarker.icon, + contentDescription = null, + ) + }, + title = AnnotatedString(androidMarker.label), + matchTypeTitle = matchTypeTitle, + dropdown = dropdown, + ) + } + + else -> { + val dropdown = buildContextItems { + section { + this += copy.FlatItemAction( + title = translate(Res.strings.copy_package_name), + value = platformMarker.packageName, + ) + } + section { + this += FlatItemAction( + icon = Icons.Outlined.Launch, + title = translate(Res.strings.uri_action_launch_play_store_title), + trailing = { + ChevronIcon() + }, + onClick = { + val intent = + NavigationIntent.NavigateToBrowser(platformMarker.playStoreUrl) + navigate(intent) + }, + ) + } + section { + this += createShareAction( + translator = this@aaaa, + text = platformMarker.playStoreUrl, + navigate = ::navigate, + ) + } + } + return VaultViewItem.Uri( + id = id, + icon = { + Icon( + imageVector = Icons.Outlined.Android, + contentDescription = null, + ) + }, + title = AnnotatedString(platformMarker.packageName), + matchTypeTitle = matchTypeTitle, + dropdown = dropdown, + ) + } + } + } + + is LinkInfoPlatform.IOS -> { + val dropdown = buildContextItems { + section { + this += copy.FlatItemAction( + title = translate(Res.strings.copy_package_name), + value = platformMarker.packageName, + ) + } + } + return VaultViewItem.Uri( + id = id, + icon = { + Icon( + imageVector = Icons.Outlined.PhoneIphone, + contentDescription = null, + ) + }, + title = AnnotatedString(platformMarker.packageName), + matchTypeTitle = matchTypeTitle, + dropdown = dropdown, + ) + } + + is LinkInfoPlatform.Web -> { + val url = platformMarker.url.toString() + val isJustDeleteMe = getJustDeleteMeByUrl(url) + .attempt() + .bind() + .getOrNull() + + val isUnsecure = cipherUnsecureUrlCheck(holder.uri.uri) + val dropdown = buildContextItems { + section { + this += copy.FlatItemAction( + title = translate(Res.strings.copy_url), + value = url, + ) + } + section { + this += FlatItemAction( + icon = Icons.Outlined.Launch, + title = translate(Res.strings.uri_action_launch_browser_title), + text = url, + trailing = { + ChevronIcon() + }, + onClick = { + val intent = NavigationIntent.NavigateToBrowser(url) + navigate(intent) + }, + ) + if ( + url.removeSuffix("/") != + platformMarker.frontPageUrl.toString().removeSuffix("/") + ) { + val launchUrl = platformMarker.frontPageUrl.toString() + this += FlatItemAction( + icon = Icons.Outlined.Launch, + title = translate(Res.strings.uri_action_launch_browser_main_page_title), + text = launchUrl, + trailing = { + ChevronIcon() + }, + onClick = { + val intent = NavigationIntent.NavigateToBrowser(launchUrl) + navigate(intent) + }, + ) + } + } + if (isUnsecure) { + section { + this += FlatItemAction( + icon = Icons.Outlined.AutoAwesome, + title = "Auto-fix unsecure URL", + text = "Changes a protocol to secure variant if it is available", + onClick = if (canEdit) { + // lambda + { + val ff = mapOf( + cipherId to setOf(holder.uri.uri), + ) + cipherUnsecureUrlAutoFix(ff) + .launchIn(appScope) + } + } else { + null + }, + ) + } + } + section { + this += createShareAction( + translator = this@aaaa, + text = uri.uri, + navigate = ::navigate, + ) + } + section { + this += WebsiteLeakRoute.checkBreachesWebsiteActionOrNull( + translator = this@aaaa, + host = platformMarker.url.host, + navigate = ::navigate, + ) + if (isJustDeleteMe != null) { + this += JustDeleteMeServiceViewRoute.justDeleteMeActionOrNull( + translator = this@aaaa, + justDeleteMe = isJustDeleteMe, + navigate = ::navigate, + ) + } + } + } + val faviconUrl = FaviconUrl( + serverId = accountId, + url = url, + ).takeIf { websiteIcons } + val warningTitle = "Unsecure".takeIf { isUnsecure } + return VaultViewItem.Uri( + id = id, + icon = { + FaviconImage( + modifier = Modifier + .size(24.dp) + .clip(CircleShape), + imageModel = { faviconUrl }, + ) + }, + title = buildAnnotatedString { + append(url) + + val host = platformMarker.url.host + val hostIndex = url.indexOf(host) + if (hostIndex != -1) { + addStyle( + style = SpanStyle( + color = disabledContentColor, + ), + start = 0, + end = hostIndex, + ) + addStyle( + style = SpanStyle( + color = disabledContentColor, + ), + start = hostIndex + host.length, + end = url.length, + ) + } + }, + warningTitle = warningTitle, + matchTypeTitle = matchTypeTitle, + dropdown = dropdown, + ) + } + + else -> { + val canLuanch = holder.info + .firstNotNullOfOrNull { it as? LinkInfoLaunch.Allow } + val canExecute = holder.info + .firstNotNullOfOrNull { it as? LinkInfoExecute.Allow } + val dropdown = buildContextItems { + section { + this += copy.FlatItemAction( + title = translate(Res.strings.copy), + value = uri.uri, + ) + } + section { + if (canExecute != null) { + this += FlatItemAction( + icon = Icons.Outlined.Terminal, + title = "Execute", + trailing = { + ChevronIcon() + }, + onClick = { + val intent = NavigationIntent.NavigateToBrowser(uri.uri) + navigate(intent) + }, + ) + } + if (canLuanch != null) { + if (canLuanch.apps.size > 1) { + this += FlatItemAction( + icon = Icons.Outlined.Launch, + title = translate(Res.strings.uri_action_launch_in_smth_title), + trailing = { + ChevronIcon() + }, + onClick = { + val intent = NavigationIntent.NavigateToBrowser(uri.uri) + navigate(intent) + }, + ) + } else { + val icon = canLuanch.apps.first().icon + this += FlatItemAction( + leading = { + if (icon != null) { + Image( + modifier = Modifier + .size(24.dp) + .clip(CircleShape), + painter = icon, + contentDescription = null, + ) + } else { + Icon(Icons.Outlined.Launch, null) + } + }, + title = translate( + Res.strings.uri_action_launch_in_app_title, + canLuanch.apps.first().label, + ), + trailing = { + ChevronIcon() + }, + onClick = { + val intent = NavigationIntent.NavigateToBrowser(uri.uri) + navigate(intent) + }, + ) + } + } + } + section { + this += LargeTypeRoute.showInLargeTypeActionOrNull( + translator = this@aaaa, + text = uri.uri, + colorize = true, + navigate = ::navigate, + ) + this += LargeTypeRoute.showInLargeTypeActionAndLockOrNull( + translator = this@aaaa, + text = uri.uri, + colorize = true, + navigate = ::navigate, + ) + } + section { + this += createShareAction( + translator = this@aaaa, + text = uri.uri, + navigate = ::navigate, + ) + } + } + return VaultViewItem.Uri( + id = id, + icon = { + if (canLuanch != null && canLuanch.apps.size == 1) { + val icon = canLuanch.apps.first().icon + if (icon != null) { + IconBox2( + main = { + Image( + modifier = Modifier + .size(24.dp) + .clip(CircleShape), + painter = icon, + contentDescription = null, + ) + }, + secondary = { + Icon( + imageVector = Icons.Outlined.Link, + contentDescription = null, + ) + }, + ) + } else if (canExecute != null) { + Icon( + imageVector = Icons.Outlined.Terminal, + contentDescription = null, + ) + } else { + Icon(Icons.Outlined.Link, null) + } + } else if (canExecute != null) { + Icon( + imageVector = Icons.Outlined.Terminal, + contentDescription = null, + ) + } else { + Icon( + imageVector = Icons.Outlined.Link, + contentDescription = null, + ) + } + }, + title = when (uri.match) { + DSecret.Uri.MatchType.RegularExpression -> { + colorizePassword(uri.uri, contentColor) + } + + else -> { + kotlin.runCatching { + val url = uri.uri + val host = URI(url).host + + buildAnnotatedString { + append(uri.uri) + + val hostIndex = url.indexOf(host) + if (hostIndex != -1) { + addStyle( + style = SpanStyle( + color = disabledContentColor, + ), + start = 0, + end = hostIndex, + ) + addStyle( + style = SpanStyle( + color = disabledContentColor, + ), + start = hostIndex + host.length, + end = url.length, + ) + } + } + }.getOrElse { + AnnotatedString(uri.uri) + } + } + }, + matchTypeTitle = matchTypeTitle, + dropdown = dropdown, + ) + } + } +} + +fun RememberStateFlowScope.create( + copy: CopyText, + id: String, + accountId: AccountId, + title: String?, + value: String, + badge: VaultViewItem.Value.Badge? = null, + badge2: List> = emptyList(), + leading: (@Composable RowScope.() -> Unit)? = null, + verify: ((() -> Unit) -> Unit)? = null, + password: Boolean = false, + username: Boolean = false, + private: Boolean = false, + hidden: Boolean = false, + monospace: Boolean = false, + colorize: Boolean = false, + elevated: Boolean = false, +): VaultViewItem { + val dropdown = if (!hidden) { + buildContextItems { + section { + this += copy.FlatItemAction( + title = translate(Res.strings.copy), + value = value, + hidden = private, + ) + } + section { + this += LargeTypeRoute.showInLargeTypeActionOrNull( + translator = this@create, + text = value, + colorize = colorize, + navigate = ::navigate, + ) + this += LargeTypeRoute.showInLargeTypeActionAndLockOrNull( + translator = this@create, + text = value, + colorize = colorize, + navigate = ::navigate, + ) + this += BarcodeTypeRoute.showInBarcodeTypeActionOrNull( + translator = this@create, + data = value, + format = BarcodeImageFormat.QR_CODE, + navigate = ::navigate, + ) + } + section { + this += createShareAction( + translator = this@create, + text = value, + navigate = ::navigate, + ) + this += createSendActionOrNull( + text = value, + navigate = ::navigate, + ) + } + section { + val isEmail = REGEX_EMAIL.matches(value) + if (isEmail) { + this += EmailLeakRoute.checkBreachesEmailActionOrNull( + translator = this@create, + accountId = accountId, + email = value, + navigate = ::navigate, + ) + } else if (username) { + this += EmailLeakRoute.checkBreachesUsernameActionOrNull( + translator = this@create, + accountId = accountId, + username = value, + navigate = ::navigate, + ) + } else if (password) { + this += PasswordLeakRoute.checkBreachesPasswordAction( + translator = this@create, + password = value, + navigate = ::navigate, + ) + } + } + } + } else { + emptyList() + } + return VaultViewItem.Value( + id = id, + elevation = if (elevated) 1.dp else 0.dp, + title = title, + value = value, + verify = verify, + private = private, + hidden = hidden, + monospace = monospace, + colorize = colorize, + leading = leading, + badge = badge, + badge2 = badge2, + dropdown = dropdown.verify(verify), + ) +} + +private fun create( + translatorScope: TranslatorScope, + copy: CopyText, + id: String, + verify: ((() -> Unit) -> Unit)? = null, + concealFields: Boolean, + data: DSecret.Card, +): VaultViewItem { + val actions = listOfNotNull( + copy.FlatItemAction( + title = translatorScope.translate(Res.strings.copy_card_number), + value = data.number, + hidden = concealFields, + )?.verify(verify), + ) + val dropdown = listOfNotNull( + copy.FlatItemAction( + title = translatorScope.translate(Res.strings.copy_cardholder_name), + value = data.cardholderName, + ), + copy.FlatItemAction( + title = translatorScope.translate(Res.strings.copy_expiration_month), + value = data.expMonth, + ), + copy.FlatItemAction( + title = translatorScope.translate(Res.strings.copy_expiration_year), + value = data.expYear, + ), + ) + return VaultViewItem.Card( + id = id, + data = data, + verify = verify, + actions = actions, + dropdown = dropdown, + concealFields = concealFields, + elevation = 1.dp, + ) +} + +@JvmName("verifyContextItemList") +fun List.verify( + verify: ((() -> Unit) -> Unit)? = null, +): List = this + .map { + when (it) { + is ContextItem.Section -> it + is ContextItem.Custom -> it + is FlatItemAction -> it.verify(verify) + } + } + +fun List.verify( + verify: ((() -> Unit) -> Unit)? = null, +) = this + .map { + it.verify(verify) + } + +fun FlatItemAction.verify( + verify: ((() -> Unit) -> Unit)? = null, +) = if (verify != null) { + val defaultOnClick = onClick + val protectedOnClick = if (defaultOnClick != null) { + // lambda + { + verify.invoke { + defaultOnClick() + } + } + } else { + null + } + this.copy( + onClick = protectedOnClick, + ) +} else { + this +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/search/IndexedText.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/search/IndexedText.kt new file mode 100644 index 00000000..9993b472 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/search/IndexedText.kt @@ -0,0 +1,122 @@ +package com.artemchep.keyguard.feature.home.vault.search + +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.text.AnnotatedString +import androidx.compose.ui.text.SpanStyle +import androidx.compose.ui.text.buildAnnotatedString +import androidx.compose.ui.text.font.FontWeight + +interface IndexedText { + companion object { + operator fun invoke(text: String): IndexedText = IndexedTextImpl(text) + } + + val text: String + val components: List + + /** + * The searchable component of the text, usually + * a text between spaces. + */ + data class Component( + val origin: String, + ) { + val lowercase: String = origin.lowercase() + } + + data class FindResult( + override val text: String, + override val components: List, + val highlightedText: AnnotatedString, + val score: Float, + ) : IndexedText +} + +private data class IndexedTextImpl( + override val text: String, +) : IndexedText { + override val components = text + .split(' ') + .map { str -> + IndexedText.Component( + origin = str, + ) + } +} + +fun IndexedText.find( + query: IndexedText, + colorBackground: Color = Color.Unspecified, + colorContent: Color = Color.Unspecified, + requireAll: Boolean = true, +): IndexedText.FindResult? { + if (components.isEmpty()) { + return null + } + + var x = query.components.map { false }.toMutableList() + + var score = 0f + val text = buildAnnotatedString { + components.forEachIndexed { compIndex, comp -> + if (compIndex > 0) { + append(' ') + } + append(comp.origin) + + var max = 0f + var start = 0 + var end = 0 + query.components.forEachIndexed { queryCompIndex, queryComp -> + if (comp.lowercase.isEmpty()) { + return@forEachIndexed + } + // Find the query in the target text + val i = comp.lowercase.indexOf(queryComp.lowercase) + if (i == -1) { + return@forEachIndexed + } + + val queryPositionScore = 1f - i.toFloat() / comp.lowercase.length.toFloat() + val queryLengthScore = + queryComp.lowercase.length.toFloat() / comp.lowercase.length.toFloat() + val s = 0f + + queryPositionScore + + queryLengthScore + if (s > max) { + max = s + // remember the position of the match, so we can draw it. + start = i + end = i + queryComp.lowercase.length + } + + x[queryCompIndex] = true + } + if (start != 0 || end != 0) { + val offset = length - comp.lowercase.length + addStyle( + SpanStyle( + fontWeight = FontWeight.Bold, + background = colorBackground, + color = colorContent, + ), + start = offset + start, + end = offset + end, + ) + } + score += max * + // We want to prioritize when the component starts with + // a given query. + ((1f - compIndex.toFloat() / components.size.toFloat()) / 5f + 0.8f) + } + + if (score < 0.01f || !x.all { it } && requireAll) return null + } + + return IndexedText.FindResult( + text = this.text, + components = this.components, + highlightedText = text, + score = score / components.size.toFloat(), + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/search/Suggestions.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/search/Suggestions.kt new file mode 100644 index 00000000..dfe77b66 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/search/Suggestions.kt @@ -0,0 +1,138 @@ +package com.artemchep.keyguard.feature.home.vault.search + +import kotlin.math.sqrt + +private const val ignoreLength = 3 + +private val ignoreWords = setOf( + "www", + // popular domains + "com", + "tk", + "cn", + "de", + "net", + "uk", + "org", + "nl", + "icu", + "ru", + "eu", + // rising domains + "icu", + "top", + "xyz", + "site", + "online", + "club", + "wang", + "vip", + "shop", + "work", + // common words used in domain names + "login", + "signin", + "auth", + // top 100 english words that are > ignoreLength + "there", + "some", + "than", + "this", + "would", + "first", + "have", + "each", + "make", + "water", + "from", + "which", + "like", + "been", + "call", + "into", + "time", + "that", + "their", + "word", + "look", + "now", + "will", + "find", + "more", + "long", + "what", + "other", + "write", + "down", + "about", + "were", + "many", + "number", + "with", + "when", + "then", + "come", + "your", + "them", + "made", + "they", + "these", + "could", + "said", + "people", + "part", +) + +fun findAlike( + source: Collection, + query: Collection, + ignoreCommonWords: Boolean = true, +): Float { + val a = find(source, query, ignoreCommonWords = ignoreCommonWords) + val b = find(query, source, ignoreCommonWords = ignoreCommonWords) + return a + b +} + +fun find( + source: Collection, + query: Collection, + ignoreCommonWords: Boolean = true, +): Float { + if (source.isEmpty() || query.isEmpty()) { + return 0.0f + } + + var score = 0f + source.forEachIndexed { _, comp -> + var max = 0f + query.forEach { queryComp -> + if (ignoreCommonWords && (queryComp.length <= ignoreLength || queryComp in ignoreWords) || queryComp.length <= 1) { + return@forEach + } + // Find the query in the target text + val i = comp.indexOf(queryComp) + if (i == -1) { + return@forEach + } + + val queryPositionScore = if (i == 0) { + 1f + } else { + // We slightly discourage components that + // not start from the query. + 0.65f + } + val queryTotalLengthScore = 10f / sqrt(queryComp.length.toFloat()) + val queryMatchLengthScore = queryComp.length.toFloat() / comp.length.toFloat() + val s = 0f + + queryPositionScore + + queryTotalLengthScore * queryMatchLengthScore + if (s > max) { + max = s + } + } + score += max + } + + return score / source.size.toFloat() +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/search/filter/AccountFilter.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/search/filter/AccountFilter.kt new file mode 100644 index 00000000..003eae0e --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/search/filter/AccountFilter.kt @@ -0,0 +1,9 @@ +package com.artemchep.keyguard.feature.home.vault.search.filter + +import arrow.optics.Getter +import com.artemchep.keyguard.platform.parcelize.LeParcelize + +@LeParcelize +data class AccountFilter( + override val id: String, +) : Filter, PureFilter by PureFilter(id, Getter { it.accountId }) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/search/filter/AndFilter.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/search/filter/AndFilter.kt new file mode 100644 index 00000000..e41a40c2 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/search/filter/AndFilter.kt @@ -0,0 +1,25 @@ +package com.artemchep.keyguard.feature.home.vault.search.filter + +import com.artemchep.keyguard.feature.home.vault.model.VaultItem2 +import com.artemchep.keyguard.platform.parcelize.LeParcelize + +@LeParcelize +data class AndFilter( + val filters: List, + override val id: String = "and_filter:" + filters.joinToString(separator = ",") { it.id.orEmpty() }, +) : Filter, PureFilter { + override fun invoke( + list: List, + getter: (Any) -> VaultItem2.Item, + ): (VaultItem2.Item) -> Boolean = kotlin.run { + val a = filters + .map { filter -> + filter.invoke(list, getter) + } + + // lambda + fun( + item: VaultItem2.Item, + ): Boolean = a.all { it(item) } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/search/filter/CollectionFilter.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/search/filter/CollectionFilter.kt new file mode 100644 index 00000000..b9dcb61b --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/search/filter/CollectionFilter.kt @@ -0,0 +1,20 @@ +package com.artemchep.keyguard.feature.home.vault.search.filter + +import com.artemchep.keyguard.feature.home.vault.model.VaultItem2 +import com.artemchep.keyguard.platform.parcelize.LeParcelize + +@LeParcelize +data class CollectionFilter( + override val id: String?, +) : Filter, PureFilter { + override fun invoke( + list: List, + getter: (Any) -> VaultItem2.Item, + ): (VaultItem2.Item) -> Boolean = ::internalFilter + + private fun internalFilter(item: VaultItem2.Item) = if (id != null) { + id in item.source.collectionIds + } else { + item.source.collectionIds.isEmpty() + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/search/filter/Filter.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/search/filter/Filter.kt new file mode 100644 index 00000000..5971061b --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/search/filter/Filter.kt @@ -0,0 +1,27 @@ +package com.artemchep.keyguard.feature.home.vault.search.filter + +import arrow.optics.Getter +import com.artemchep.keyguard.feature.home.vault.model.VaultItem2 +import com.artemchep.keyguard.platform.parcelize.LeParcelable + +interface PureFilter : (List, (Any) -> VaultItem2.Item) -> (VaultItem2.Item) -> Boolean { + companion object { + operator fun invoke( + value: String, + getter: Getter, + ): PureFilter = object : PureFilter { + override val id: String = value + + override fun invoke( + list: List, + getter: (Any) -> VaultItem2.Item, + ): (VaultItem2.Item) -> Boolean = ::internalFilter + + private fun internalFilter(item: VaultItem2.Item) = getter.get(item) == value + } + } + + val id: String? +} + +interface Filter : PureFilter, LeParcelable diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/search/filter/FilterHolder.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/search/filter/FilterHolder.kt new file mode 100644 index 00000000..7b20b935 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/search/filter/FilterHolder.kt @@ -0,0 +1,22 @@ +package com.artemchep.keyguard.feature.home.vault.search.filter + +import com.artemchep.keyguard.common.model.DFilter + +@kotlinx.serialization.Serializable +data class FilterHolder( + val state: Map>, +) { + val filter by lazy { + val f = state + .map { + val filters = DFilter.Or(it.value) + filters + } + DFilter.And(f) + } + + val id: Int = state + .asSequence() + .flatMap { it.value } + .fold(0) { y, x -> y xor x.key.hashCode() } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/search/filter/FolderFilter.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/search/filter/FolderFilter.kt new file mode 100644 index 00000000..e8373b7c --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/search/filter/FolderFilter.kt @@ -0,0 +1,16 @@ +package com.artemchep.keyguard.feature.home.vault.search.filter + +import com.artemchep.keyguard.feature.home.vault.model.VaultItem2 +import com.artemchep.keyguard.platform.parcelize.LeParcelize + +@LeParcelize +data class FolderFilter( + override val id: String?, +) : Filter, PureFilter { + override fun invoke( + list: List, + getter: (Any) -> VaultItem2.Item, + ): (VaultItem2.Item) -> Boolean = ::internalFilter + + private fun internalFilter(item: VaultItem2.Item) = item.folderId == id +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/search/filter/OrFilter.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/search/filter/OrFilter.kt new file mode 100644 index 00000000..7c373922 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/search/filter/OrFilter.kt @@ -0,0 +1,29 @@ +package com.artemchep.keyguard.feature.home.vault.search.filter + +import arrow.core.partially1 +import com.artemchep.keyguard.feature.home.vault.model.VaultItem2 +import com.artemchep.keyguard.platform.parcelize.LeParcelize + +@LeParcelize +data class OrFilter( + val filters: List, + override val id: String = "or_filter:" + filters.joinToString(separator = ",") { it.id.orEmpty() }, +) : Filter, PureFilter { + override fun invoke( + list: List, + getter: (Any) -> VaultItem2.Item, + ): (VaultItem2.Item) -> Boolean = kotlin.run { + val a = filters + .map { filter -> + filter.invoke(list, getter) + } + + // lambda + ::filte.partially1(a) + } + + private fun filte( + a: List<(VaultItem2.Item) -> Boolean>, + item: VaultItem2.Item, + ) = a.any { it(item) } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/search/filter/OrganizationFilter.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/search/filter/OrganizationFilter.kt new file mode 100644 index 00000000..b1c3a294 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/search/filter/OrganizationFilter.kt @@ -0,0 +1,16 @@ +package com.artemchep.keyguard.feature.home.vault.search.filter + +import com.artemchep.keyguard.feature.home.vault.model.VaultItem2 +import com.artemchep.keyguard.platform.parcelize.LeParcelize + +@LeParcelize +data class OrganizationFilter( + override val id: String?, +) : Filter, PureFilter { + override fun invoke( + list: List, + getter: (Any) -> VaultItem2.Item, + ): (VaultItem2.Item) -> Boolean = ::internalFilter + + private fun internalFilter(item: VaultItem2.Item) = id == item.source.organizationId +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/search/filter/PasswordDuplicateFilter.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/search/filter/PasswordDuplicateFilter.kt new file mode 100644 index 00000000..02ff3309 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/search/filter/PasswordDuplicateFilter.kt @@ -0,0 +1,37 @@ +package com.artemchep.keyguard.feature.home.vault.search.filter + +import arrow.core.partially1 +import com.artemchep.keyguard.feature.home.vault.model.VaultItem2 +import com.artemchep.keyguard.platform.parcelize.LeIgnoredOnParcel +import com.artemchep.keyguard.platform.parcelize.LeParcelize + +@LeParcelize +object PasswordDuplicateFilter : Filter, PureFilter { + @LeIgnoredOnParcel + override val id: String = "duplicate" + + override fun invoke( + list: List, + getter: (Any) -> VaultItem2.Item, + ): (VaultItem2.Item) -> Boolean = kotlin.run { + val map = mutableMapOf() + list.forEach { wrapper -> + val item = getter(wrapper) + val password = item.password + if (password != null) { + val oldValue = map.getOrElse(password) { 0 } + map[password] = oldValue + 1 + } + } + val set = map + .asSequence() + .mapNotNull { entry -> + entry.key.takeIf { entry.value > 1 } + } + .toSet() + ::internalFilter.partially1(set) + } + + private fun internalFilter(passwords: Set, item: VaultItem2.Item) = + item.password in passwords +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/search/filter/PasswordStrengthFilter.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/search/filter/PasswordStrengthFilter.kt new file mode 100644 index 00000000..692f12df --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/search/filter/PasswordStrengthFilter.kt @@ -0,0 +1,18 @@ +package com.artemchep.keyguard.feature.home.vault.search.filter + +import com.artemchep.keyguard.common.model.PasswordStrength +import com.artemchep.keyguard.feature.home.vault.model.VaultItem2 +import com.artemchep.keyguard.platform.parcelize.LeParcelize + +@LeParcelize +data class PasswordStrengthFilter( + val score: PasswordStrength.Score, + override val id: String = score.name, +) : Filter, PureFilter { + override fun invoke( + list: List, + getter: (Any) -> VaultItem2.Item, + ): (VaultItem2.Item) -> Boolean = ::internalFilter + + private fun internalFilter(item: VaultItem2.Item) = item.score?.score == score +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/search/filter/TypeFilter.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/search/filter/TypeFilter.kt new file mode 100644 index 00000000..3276bf12 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/search/filter/TypeFilter.kt @@ -0,0 +1,9 @@ +package com.artemchep.keyguard.feature.home.vault.search.filter + +import arrow.optics.Getter +import com.artemchep.keyguard.platform.parcelize.LeParcelize + +@LeParcelize +data class TypeFilter( + override val id: String, +) : Filter, PureFilter by PureFilter(id, Getter { it.type }) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/search/sort/AlphabeticalSort.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/search/sort/AlphabeticalSort.kt new file mode 100644 index 00000000..ca75f6b0 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/search/sort/AlphabeticalSort.kt @@ -0,0 +1,24 @@ +package com.artemchep.keyguard.feature.home.vault.search.sort + +import com.artemchep.keyguard.feature.home.vault.model.VaultItem2 +import com.artemchep.keyguard.platform.parcelize.LeIgnoredOnParcel +import com.artemchep.keyguard.platform.parcelize.LeParcelize +import kotlinx.serialization.Serializable +import kotlinx.serialization.Transient + +@LeParcelize +@Serializable +object AlphabeticalSort : Sort, PureSort { + @LeIgnoredOnParcel + @Transient + override val id: String = "alphabetical" + + override fun compare( + a: VaultItem2.Item, + b: VaultItem2.Item, + ): Int = kotlin.run { + val aTitle = a.title.text + val bTitle = b.title.text + aTitle.compareTo(bTitle, ignoreCase = true) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/search/sort/LastCreatedSort.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/search/sort/LastCreatedSort.kt new file mode 100644 index 00000000..5a3e342a --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/search/sort/LastCreatedSort.kt @@ -0,0 +1,31 @@ +package com.artemchep.keyguard.feature.home.vault.search.sort + +import com.artemchep.keyguard.feature.home.vault.model.VaultItem2 +import com.artemchep.keyguard.platform.parcelize.LeIgnoredOnParcel +import com.artemchep.keyguard.platform.parcelize.LeParcelize +import kotlinx.serialization.Serializable +import kotlinx.serialization.Transient + +@LeParcelize +@Serializable +object LastCreatedSort : Sort, PureSort { + private object LastCreatedRawComparator : Comparator { + override fun compare( + a: VaultItem2.Item, + b: VaultItem2.Item, + ): Int = compareValues(b.createdDate, a.createdDate) + } + + @LeIgnoredOnParcel + @Transient + override val id: String = "last_created" + + @LeIgnoredOnParcel + private val comparator = LastCreatedRawComparator + .thenBy(AlphabeticalSort) { it } + + override fun compare( + a: VaultItem2.Item, + b: VaultItem2.Item, + ): Int = comparator.compare(a, b) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/search/sort/LastModifiedSort.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/search/sort/LastModifiedSort.kt new file mode 100644 index 00000000..ad33947b --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/search/sort/LastModifiedSort.kt @@ -0,0 +1,31 @@ +package com.artemchep.keyguard.feature.home.vault.search.sort + +import com.artemchep.keyguard.feature.home.vault.model.VaultItem2 +import com.artemchep.keyguard.platform.parcelize.LeIgnoredOnParcel +import com.artemchep.keyguard.platform.parcelize.LeParcelize +import kotlinx.serialization.Serializable +import kotlinx.serialization.Transient + +@LeParcelize +@Serializable +object LastModifiedSort : Sort, PureSort { + private object LastModifiedRawComparator : Comparator { + override fun compare( + a: VaultItem2.Item, + b: VaultItem2.Item, + ): Int = compareValues(b.revisionDate, a.revisionDate) + } + + @LeIgnoredOnParcel + @Transient + override val id: String = "last_modified" + + @LeIgnoredOnParcel + private val comparator = LastModifiedRawComparator + .thenBy(AlphabeticalSort) { it } + + override fun compare( + a: VaultItem2.Item, + b: VaultItem2.Item, + ): Int = comparator.compare(a, b) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/search/sort/PasswordLastModifiedSort.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/search/sort/PasswordLastModifiedSort.kt new file mode 100644 index 00000000..84ddfdda --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/search/sort/PasswordLastModifiedSort.kt @@ -0,0 +1,31 @@ +package com.artemchep.keyguard.feature.home.vault.search.sort + +import com.artemchep.keyguard.feature.home.vault.model.VaultItem2 +import com.artemchep.keyguard.platform.parcelize.LeIgnoredOnParcel +import com.artemchep.keyguard.platform.parcelize.LeParcelize +import kotlinx.serialization.Serializable +import kotlinx.serialization.Transient + +@LeParcelize +@Serializable +object PasswordLastModifiedSort : Sort, PureSort { + private object PasswordLastModifiedRawComparator : Comparator { + override fun compare( + a: VaultItem2.Item, + b: VaultItem2.Item, + ): Int = compareValues(b.passwordRevisionDate, a.passwordRevisionDate) + } + + @LeIgnoredOnParcel + @Transient + override val id: String = "password_last_modified" + + @LeIgnoredOnParcel + private val comparator = PasswordLastModifiedRawComparator + .thenBy(AlphabeticalSort) { it } + + override fun compare( + a: VaultItem2.Item, + b: VaultItem2.Item, + ): Int = comparator.compare(a, b) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/search/sort/PasswordSort.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/search/sort/PasswordSort.kt new file mode 100644 index 00000000..687d9bff --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/search/sort/PasswordSort.kt @@ -0,0 +1,29 @@ +package com.artemchep.keyguard.feature.home.vault.search.sort + +import com.artemchep.keyguard.feature.home.vault.model.VaultItem2 +import com.artemchep.keyguard.platform.parcelize.LeIgnoredOnParcel +import com.artemchep.keyguard.platform.parcelize.LeParcelize +import kotlinx.serialization.Serializable +import kotlinx.serialization.Transient + +@LeParcelize +@Serializable +object PasswordSort : Sort, PureSort { + @LeIgnoredOnParcel + @Transient + override val id: String = "password" + + override fun compare( + a: VaultItem2.Item, + b: VaultItem2.Item, + ): Int = kotlin.run { + val aTitle = a.password + val bTitle = b.password + // check if null + if (aTitle === bTitle) return 0 + if (aTitle == null) return -1 + if (bTitle == null) return 1 + + aTitle.compareTo(bTitle, ignoreCase = false) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/search/sort/PasswordStrengthSort.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/search/sort/PasswordStrengthSort.kt new file mode 100644 index 00000000..50c3dc1e --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/search/sort/PasswordStrengthSort.kt @@ -0,0 +1,31 @@ +package com.artemchep.keyguard.feature.home.vault.search.sort + +import com.artemchep.keyguard.feature.home.vault.model.VaultItem2 +import com.artemchep.keyguard.platform.parcelize.LeIgnoredOnParcel +import com.artemchep.keyguard.platform.parcelize.LeParcelize +import kotlinx.serialization.Serializable +import kotlinx.serialization.Transient + +@LeParcelize +@Serializable +object PasswordStrengthSort : Sort, PureSort { + private object PasswordStrengthRawComparator : Comparator { + override fun compare( + a: VaultItem2.Item, + b: VaultItem2.Item, + ): Int = -compareValues(b.score?.score, a.score?.score) + } + + @LeIgnoredOnParcel + @Transient + override val id: String = "password_strength" + + @LeIgnoredOnParcel + private val comparator = PasswordStrengthRawComparator + .thenBy(AlphabeticalSort) { it } + + override fun compare( + a: VaultItem2.Item, + b: VaultItem2.Item, + ): Int = comparator.compare(a, b) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/search/sort/Sort.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/search/sort/Sort.kt new file mode 100644 index 00000000..a9755e61 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/search/sort/Sort.kt @@ -0,0 +1,24 @@ +package com.artemchep.keyguard.feature.home.vault.search.sort + +import com.artemchep.keyguard.feature.home.vault.model.VaultItem2 +import com.artemchep.keyguard.platform.parcelize.LeParcelable + +interface PureSort : Comparator { + val id: String +} + +interface Sort : PureSort, LeParcelable { + companion object { + fun valueOf( + name: String, + ): Sort? = when (name) { + AlphabeticalSort.id -> AlphabeticalSort + LastCreatedSort.id -> LastCreatedSort + LastModifiedSort.id -> LastModifiedSort + PasswordSort.id -> PasswordSort + PasswordLastModifiedSort.id -> PasswordLastModifiedSort + PasswordStrengthSort.id -> PasswordStrengthSort + else -> null + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/util/SortLimiter.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/util/SortLimiter.kt new file mode 100644 index 00000000..7a4b7232 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/util/SortLimiter.kt @@ -0,0 +1,3 @@ +package com.artemchep.keyguard.feature.home.vault.util + +const val AlphabeticalSortMinItemsSize = 24 diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/util/changePasswordAction.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/util/changePasswordAction.kt new file mode 100644 index 00000000..afe12c8e --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/home/vault/util/changePasswordAction.kt @@ -0,0 +1,660 @@ +package com.artemchep.keyguard.feature.home.vault.util + +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Lock +import androidx.compose.material.icons.outlined.Delete +import androidx.compose.material.icons.outlined.DeleteForever +import androidx.compose.material.icons.outlined.Edit +import androidx.compose.material.icons.outlined.FileCopy +import androidx.compose.material.icons.outlined.Folder +import androidx.compose.material.icons.outlined.History +import androidx.compose.material.icons.outlined.LockOpen +import androidx.compose.material.icons.outlined.Merge +import androidx.compose.material.icons.outlined.Password +import androidx.compose.material.icons.outlined.RestoreFromTrash +import androidx.compose.material3.Badge +import androidx.compose.material3.BadgedBox +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import com.artemchep.keyguard.common.io.biFlatTap +import com.artemchep.keyguard.common.io.effectMap +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.model.AccountId +import com.artemchep.keyguard.common.model.DSecret +import com.artemchep.keyguard.common.model.FolderOwnership2 +import com.artemchep.keyguard.common.model.ToastMessage +import com.artemchep.keyguard.common.model.create.CreateRequest +import com.artemchep.keyguard.common.usecase.ChangeCipherNameById +import com.artemchep.keyguard.common.usecase.ChangeCipherPasswordById +import com.artemchep.keyguard.common.usecase.CipherMerge +import com.artemchep.keyguard.common.usecase.CopyCipherById +import com.artemchep.keyguard.common.usecase.MoveCipherToFolderById +import com.artemchep.keyguard.common.usecase.RePromptCipherById +import com.artemchep.keyguard.common.usecase.RemoveCipherById +import com.artemchep.keyguard.common.usecase.RestoreCipherById +import com.artemchep.keyguard.common.usecase.TrashCipherById +import com.artemchep.keyguard.feature.confirmation.ConfirmationResult +import com.artemchep.keyguard.feature.confirmation.ConfirmationRoute +import com.artemchep.keyguard.feature.confirmation.folder.FolderConfirmationResult +import com.artemchep.keyguard.feature.confirmation.folder.FolderConfirmationRoute +import com.artemchep.keyguard.feature.confirmation.organization.FolderInfo +import com.artemchep.keyguard.feature.confirmation.organization.OrganizationConfirmationResult +import com.artemchep.keyguard.feature.confirmation.organization.OrganizationConfirmationRoute +import com.artemchep.keyguard.feature.home.vault.add.AddRoute +import com.artemchep.keyguard.feature.home.vault.add.LeAddRoute +import com.artemchep.keyguard.feature.home.vault.screen.VaultViewPasswordHistoryRoute +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.feature.navigation.registerRouteResultReceiver +import com.artemchep.keyguard.feature.navigation.state.RememberStateFlowScope +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItemAction +import com.artemchep.keyguard.ui.SimpleNote +import com.artemchep.keyguard.ui.icons.icon +import com.artemchep.keyguard.ui.theme.badgeContainer + +fun RememberStateFlowScope.cipherEnableConfirmAccessAction( + rePromptCipherById: RePromptCipherById, + ciphers: List, + before: (() -> Unit)? = null, + after: ((Boolean) -> Unit)? = null, +) = kotlin.run { + FlatItemAction( + icon = Icons.Filled.Lock, + title = translate(Res.strings.ciphers_action_enable_auth_reprompt_title), + onClick = { + before?.invoke() + + val filteredCipherIds = ciphers + .asSequence() + .filter { !it.reprompt } + .map { it.id } + .toSet() + rePromptCipherById( + filteredCipherIds, + true, + ) + .effectMap { + val message = ToastMessage( + title = "Auth re-prompt enabled", + ) + message(message) + } + .launchIn(appScope) + }, + ) +} + +fun RememberStateFlowScope.cipherDisableConfirmAccessAction( + rePromptCipherById: RePromptCipherById, + ciphers: List, + before: (() -> Unit)? = null, + after: ((Boolean) -> Unit)? = null, +) = kotlin.run { + FlatItemAction( + icon = Icons.Outlined.LockOpen, + title = translate(Res.strings.ciphers_action_disable_auth_reprompt_title), + onClick = { + before?.invoke() + + val filteredCipherIds = ciphers + .asSequence() + .filter { it.reprompt } + .map { it.id } + .toSet() + rePromptCipherById( + filteredCipherIds, + false, + ) + .effectMap { + val message = ToastMessage( + title = "Auth re-prompt disabled", + ) + message(message) + } + .biFlatTap( + ifException = { + ioEffect { after?.invoke(false) } + }, + ifSuccess = { + ioEffect { after?.invoke(true) } + }, + ) + .launchIn(appScope) + }, + ) +} + +fun RememberStateFlowScope.cipherEditAction( + cipher: DSecret, + behavior: AddRoute.Args.Behavior = AddRoute.Args.Behavior(), + before: (() -> Unit)? = null, + after: ((Boolean) -> Unit)? = null, +) = kotlin.run { + val icon = icon(Icons.Outlined.Edit) + val title = translate(Res.strings.ciphers_action_edit_title) + FlatItemAction( + leading = icon, + title = title, + onClick = { + before?.invoke() + + val route = LeAddRoute( + args = AddRoute.Args( + behavior = behavior, + initialValue = cipher, + ), + ) + val intent = NavigationIntent.NavigateToRoute(route) + navigate(intent) + // TODO: Where do I put 'after' callback? + }, + ) +} + +fun RememberStateFlowScope.cipherMergeIntoAction( + cipherMerge: CipherMerge, + ciphers: List, + behavior: AddRoute.Args.Behavior = AddRoute.Args.Behavior(), + before: (() -> Unit)? = null, + after: ((Boolean) -> Unit)? = null, +) = kotlin.run { + val icon = icon(Icons.Outlined.Merge) + val title = translate(Res.strings.ciphers_action_merge_title) + FlatItemAction( + leading = icon, + title = title, + onClick = { + before?.invoke() + cipherMergeInto( + cipherMerge = cipherMerge, + ciphers = ciphers, + behavior = behavior, + ) + // TODO: Where do I put 'after' callback? + }, + ) +} + +fun RememberStateFlowScope.cipherMergeInto( + cipherMerge: CipherMerge, + ciphers: List, + behavior: AddRoute.Args.Behavior = AddRoute.Args.Behavior(), +) = kotlin.run { + val cipher = cipherMerge.invoke(ciphers) + val type = ciphers.firstOrNull()?.type + val route = LeAddRoute( + args = AddRoute.Args( + behavior = behavior, + initialValue = cipher, + ownershipRo = false, + type = type, + merge = AddRoute.Args.Merge( + ciphers = ciphers, + ), + ), + ) + val intent = NavigationIntent.NavigateToRoute(route) + navigate(intent) +} + +fun RememberStateFlowScope.cipherCopyToAction( + copyCipherById: CopyCipherById, + ciphers: List, + before: (() -> Unit)? = null, + after: ((Boolean) -> Unit)? = null, +) = kotlin.run { + val iconImageVector = Icons.Outlined.FileCopy + val title = translate(Res.strings.ciphers_action_copy_title) + FlatItemAction( + icon = iconImageVector, + title = title, + onClick = { + before?.invoke() + + val ciphersHaveAttachments = ciphers.any { it.attachments.isNotEmpty() } + val note = when { + ciphersHaveAttachments -> { + val text = + "Copying a cipher does not copy its attachments, this feature is work in progress." + SimpleNote( + text = text, + type = SimpleNote.Type.INFO, + ) + } + + else -> null + } + val route = registerRouteResultReceiver( + route = OrganizationConfirmationRoute( + args = OrganizationConfirmationRoute.Args( + decor = OrganizationConfirmationRoute.Args.Decor( + title = title, + note = note, + icon = iconImageVector, + ), + ), + ), + ) { result -> + if (result is OrganizationConfirmationResult.Confirm) { + val ownership = CreateRequest.Ownership2( + accountId = result.accountId, + folder = result.folderId, + organizationId = result.organizationId, + collectionIds = result.collectionsIds, + ) + val cipherIdsToOwnership = ciphers + .associate { cipher -> + cipher.id to ownership + } + copyCipherById(cipherIdsToOwnership) + .effectMap { + val message = ToastMessage( + title = "Copied ciphers!", + ) + message(message) + } + .launchIn(appScope) + } + + val success = result is OrganizationConfirmationResult.Confirm + after?.invoke(success) + } + val intent = NavigationIntent.NavigateToRoute(route) + navigate(intent) + }, + ) +} + +fun RememberStateFlowScope.cipherMoveToFolderAction( + moveCipherToFolderById: MoveCipherToFolderById, + accountId: AccountId, + ciphers: List, + before: (() -> Unit)? = null, + after: ((Boolean) -> Unit)? = null, +) = kotlin.run { + val icon = icon(Icons.Outlined.Folder) + val title = translate(Res.strings.ciphers_action_change_folder_title) + FlatItemAction( + leading = icon, + title = title, + onClick = { + before?.invoke() + + val blacklistedFolderIds = ciphers + .asSequence() + .map { it.folderId } + .toSet() + // only if has one value + .takeIf { it.size == 1 } + .orEmpty() + val route = registerRouteResultReceiver( + route = FolderConfirmationRoute( + args = FolderConfirmationRoute.Args( + accountId = accountId, + blacklistedFolderIds = blacklistedFolderIds, + ), + ), + ) { result -> + if (result is FolderConfirmationResult.Confirm) { + // Filter out the ciphers that already have the + // target folder. This is just to speed up the + // change process. + val cipherIds = when (val info = result.folderInfo) { + is FolderInfo.None, + is FolderInfo.Id, + -> { + val newFolderId = when (info) { + is FolderInfo.None -> null + is FolderInfo.Id -> info.id + else -> error("Unreachable statement!") + } + ciphers + .asSequence() + .filter { it.folderId != newFolderId } + } + + is FolderInfo.New -> { + ciphers + .asSequence() + } + } + // Just in case we messed up before, make sure that + // the ciphers all belong to the target account. + .filter { it.accountId == accountId.id } + .map { it.id } + .toSet() + val destination = FolderOwnership2( + accountId = accountId.id, + folder = result.folderInfo, + ) + moveCipherToFolderById( + cipherIds, + destination, + ) + .effectMap { + val message = ToastMessage( + title = "Moved to the folder", + ) + message(message) + } + .launchIn(appScope) + } + + val success = result is FolderConfirmationResult.Confirm + after?.invoke(success) + } + val intent = NavigationIntent.NavigateToRoute(route) + navigate(intent) + }, + ) +} + +fun RememberStateFlowScope.cipherChangeNameAction( + changeCipherNameById: ChangeCipherNameById, + ciphers: List, + before: (() -> Unit)? = null, + after: ((Boolean) -> Unit)? = null, +) = kotlin.run { + val icon = icon(Icons.Outlined.Edit) + val title = if (ciphers.size > 1) { + translate(Res.strings.ciphers_action_change_names_title) + } else { + translate(Res.strings.ciphers_action_change_name_title) + } + FlatItemAction( + leading = icon, + title = title, + onClick = { + before?.invoke() + + val items = ciphers + .sortedBy { it.name } + .map { cipher -> + ConfirmationRoute.Args.Item.StringItem( + key = cipher.id, + value = cipher.name, + title = cipher.name, + type = ConfirmationRoute.Args.Item.StringItem.Type.Text, + canBeEmpty = false, + ) + } + val route = registerRouteResultReceiver( + route = ConfirmationRoute( + args = ConfirmationRoute.Args( + icon = icon, + title = title, + items = items, + ), + ), + ) { result -> + if (result is ConfirmationResult.Confirm) { + val cipherIdsToNames = result + .data + .mapValues { it.value as String } + changeCipherNameById(cipherIdsToNames) + .effectMap { + val message = ToastMessage( + title = "Changed names", + ) + message(message) + } + .launchIn(appScope) + } + + val success = result is ConfirmationResult.Confirm + after?.invoke(success) + } + val intent = NavigationIntent.NavigateToRoute(route) + navigate(intent) + }, + ) +} + +fun RememberStateFlowScope.cipherChangePasswordAction( + changeCipherPasswordById: ChangeCipherPasswordById, + ciphers: List, + before: (() -> Unit)? = null, + after: ((Boolean) -> Unit)? = null, +) = kotlin.run { + val icon = icon(Icons.Outlined.Password) + val title = kotlin.run { + val hasPasswords = ciphers.any { !it.login?.password.isNullOrEmpty() } + if (hasPasswords) { + if (ciphers.size > 1) { + translate(Res.strings.ciphers_action_change_passwords_title) + } else { + translate(Res.strings.ciphers_action_change_password_title) + } + } else { + if (ciphers.size > 1) { + translate(Res.strings.ciphers_action_add_passwords_title) + } else { + translate(Res.strings.ciphers_action_add_password_title) + } + } + } + FlatItemAction( + leading = icon, + title = title, + onClick = { + before?.invoke() + + val items = ciphers + .filter { it.type == DSecret.Type.Login } + .sortedBy { it.name } + .map { cipher -> + ConfirmationRoute.Args.Item.StringItem( + key = cipher.id, + value = cipher.login?.password.orEmpty(), + title = cipher.name, + type = ConfirmationRoute.Args.Item.StringItem.Type.Password, + canBeEmpty = true, // so you can clear passwords + ) + } + val route = registerRouteResultReceiver( + route = ConfirmationRoute( + args = ConfirmationRoute.Args( + icon = icon, + title = title, + message = translate(Res.strings.generator_password_note, 16), + items = items, + ), + ), + ) { result -> + if (result is ConfirmationResult.Confirm) { + val cipherIdsToPasswords = result + .data + .mapValues { it.value as String } + changeCipherPasswordById(cipherIdsToPasswords) + .effectMap { + val message = ToastMessage( + title = "Changed passwords", + ) + message(message) + } + .launchIn(appScope) + } + + val success = result is ConfirmationResult.Confirm + after?.invoke(success) + } + val intent = NavigationIntent.NavigateToRoute(route) + navigate(intent) + }, + ) +} + +@OptIn(ExperimentalMaterial3Api::class) +fun RememberStateFlowScope.cipherViewPasswordHistoryAction( + cipher: DSecret, + before: (() -> Unit)? = null, +) = kotlin.run { + val title = translate(Res.strings.ciphers_action_view_password_history_title) + FlatItemAction( + leading = { + BadgedBox( + badge = { + Badge( + containerColor = MaterialTheme.colorScheme.badgeContainer, + ) { + val size = cipher.login?.passwordHistory?.size ?: 0 + Text(text = size.toString()) + } + }, + ) { + Icon( + imageVector = Icons.Outlined.History, + contentDescription = null, + ) + } + }, + title = title, + onClick = { + val intent = NavigationIntent.NavigateToRoute( + VaultViewPasswordHistoryRoute( + itemId = cipher.id, + ), + ) + navigate(intent) + }, + ) +} + +fun RememberStateFlowScope.cipherTrashAction( + trashCipherById: TrashCipherById, + ciphers: List, + before: (() -> Unit)? = null, + after: ((Boolean) -> Unit)? = null, +) = kotlin.run { + val icon = icon(Icons.Outlined.Delete) + val title = translate(Res.strings.ciphers_action_trash_title) + FlatItemAction( + leading = icon, + title = title, + onClick = { + before?.invoke() + + val route = registerRouteResultReceiver( + route = ConfirmationRoute( + args = ConfirmationRoute.Args( + icon = icon(Icons.Outlined.Delete), + title = "Move to trash?", + message = "Items that have been in Trash more than 30 days will be automatically deleted.", + ), + ), + ) { result -> + if (result is ConfirmationResult.Confirm) { + val cipherIds = ciphers + .map { it.id } + .toSet() + trashCipherById(cipherIds) + .effectMap { + val message = ToastMessage( + title = "Trashed", + ) + message(message) + } + .launchIn(appScope) + } + + val success = result is ConfirmationResult.Confirm + after?.invoke(success) + } + val intent = NavigationIntent.NavigateToRoute(route) + navigate(intent) + }, + ) +} + +fun RememberStateFlowScope.cipherRestoreAction( + restoreCipherById: RestoreCipherById, + ciphers: List, + before: (() -> Unit)? = null, + after: ((Boolean) -> Unit)? = null, +) = kotlin.run { + val icon = icon(Icons.Outlined.RestoreFromTrash) + val title = translate(Res.strings.ciphers_action_restore_title) + FlatItemAction( + leading = icon, + title = title, + onClick = { + before?.invoke() + + val route = registerRouteResultReceiver( + route = ConfirmationRoute( + args = ConfirmationRoute.Args( + icon = icon(Icons.Outlined.RestoreFromTrash), + title = "Restore from trash?", + ), + ), + ) { result -> + if (result is ConfirmationResult.Confirm) { + val cipherIds = ciphers + .map { it.id } + .toSet() + restoreCipherById(cipherIds) + .effectMap { + val message = ToastMessage( + title = "Restored", + ) + message(message) + } + .launchIn(appScope) + } + + val success = result is ConfirmationResult.Confirm + after?.invoke(success) + } + val intent = NavigationIntent.NavigateToRoute(route) + navigate(intent) + }, + ) +} + +fun RememberStateFlowScope.cipherDeleteAction( + removeCipherById: RemoveCipherById, + ciphers: List, + before: (() -> Unit)? = null, + after: ((Boolean) -> Unit)? = null, +) = kotlin.run { + val icon = icon(Icons.Outlined.DeleteForever) + val title = translate(Res.strings.ciphers_action_delete_title) + FlatItemAction( + leading = icon, + title = title, + onClick = { + before?.invoke() + + val route = registerRouteResultReceiver( + route = ConfirmationRoute( + args = ConfirmationRoute.Args( + icon = icon(Icons.Outlined.DeleteForever), + title = "Delete forever?", + ), + ), + ) { result -> + if (result is ConfirmationResult.Confirm) { + val cipherIds = ciphers + .map { it.id } + .toSet() + removeCipherById(cipherIds) + .effectMap { + val message = ToastMessage( + title = "Deleted", + ) + message(message) + } + .launchIn(appScope) + } + + val success = result is ConfirmationResult.Confirm + after?.invoke(success) + } + val intent = NavigationIntent.NavigateToRoute(route) + navigate(intent) + }, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/justdeleteme/JustDeleteMeComponent.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/justdeleteme/JustDeleteMeComponent.kt new file mode 100644 index 00000000..0e06df4b --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/justdeleteme/JustDeleteMeComponent.kt @@ -0,0 +1,37 @@ +package com.artemchep.keyguard.feature.justdeleteme + +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import com.artemchep.keyguard.common.service.justdeleteme.JustDeleteMeServiceInfo +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.Ah +import dev.icerock.moko.resources.compose.stringResource + +@Composable +fun AhDifficulty( + modifier: Modifier = Modifier, + model: JustDeleteMeServiceInfo, +) { + val difficulty = model.difficulty + val score = when (difficulty) { + "easy" -> 1f + "medium" -> 0.5f + "hard" -> 0.2f + "limited" -> 0.0f + "impossible" -> 0.0f + else -> 0.0f + } + val text = when (difficulty) { + "easy" -> stringResource(Res.strings.justdeleteme_difficulty_easy_label) + "medium" -> stringResource(Res.strings.justdeleteme_difficulty_medium_label) + "hard" -> stringResource(Res.strings.justdeleteme_difficulty_hard_label) + "limited" -> stringResource(Res.strings.justdeleteme_difficulty_limited_availability_label) + "impossible" -> stringResource(Res.strings.justdeleteme_difficulty_impossible_label) + else -> "" + } + Ah( + modifier = modifier, + score = score, + text = text, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/justdeleteme/directory/JustDeleteMeServiceListRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/justdeleteme/directory/JustDeleteMeServiceListRoute.kt new file mode 100644 index 00000000..4a47cbae --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/justdeleteme/directory/JustDeleteMeServiceListRoute.kt @@ -0,0 +1,40 @@ +package com.artemchep.keyguard.feature.justdeleteme.directory + +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.AccountBox +import androidx.compose.material.icons.outlined.Delete +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.feature.navigation.Route +import com.artemchep.keyguard.feature.navigation.state.TranslatorScope +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItemAction +import com.artemchep.keyguard.ui.icons.iconSmall + +object JustDeleteMeServiceListRoute : Route { + fun justDeleteMeActionOrNull( + translator: TranslatorScope, + navigate: (NavigationIntent) -> Unit, + ) = justDeleteMeAction( + translator = translator, + navigate = navigate, + ) + + fun justDeleteMeAction( + translator: TranslatorScope, + navigate: (NavigationIntent) -> Unit, + ) = FlatItemAction( + leading = iconSmall(Icons.Outlined.AccountBox, Icons.Outlined.Delete), + title = translator.translate(Res.strings.uri_action_how_to_delete_account_title), + onClick = { + val route = JustDeleteMeServiceListRoute + val intent = NavigationIntent.NavigateToRoute(route) + navigate(intent) + }, + ) + + @Composable + override fun Content() { + JustDeleteMeListScreen() + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/justdeleteme/directory/JustDeleteMeServiceListScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/justdeleteme/directory/JustDeleteMeServiceListScreen.kt new file mode 100644 index 00000000..6ade5ed8 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/justdeleteme/directory/JustDeleteMeServiceListScreen.kt @@ -0,0 +1,265 @@ +package com.artemchep.keyguard.feature.justdeleteme.directory + +import androidx.compose.foundation.ExperimentalFoundationApi +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.lazy.LazyListState +import androidx.compose.foundation.lazy.items +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.OpenInBrowser +import androidx.compose.material.pullrefresh.pullRefresh +import androidx.compose.material.pullrefresh.rememberPullRefreshState +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.IconButton +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.runtime.snapshotFlow +import androidx.compose.ui.Modifier +import androidx.compose.ui.input.nestedscroll.nestedScroll +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.model.flatMap +import com.artemchep.keyguard.common.model.getOrNull +import com.artemchep.keyguard.feature.EmptySearchView +import com.artemchep.keyguard.feature.ErrorView +import com.artemchep.keyguard.feature.home.vault.component.SearchTextField +import com.artemchep.keyguard.feature.justdeleteme.AhDifficulty +import com.artemchep.keyguard.feature.navigation.LocalNavigationController +import com.artemchep.keyguard.feature.navigation.NavigationIcon +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.DefaultProgressBar +import com.artemchep.keyguard.ui.FlatItem +import com.artemchep.keyguard.ui.ScaffoldLazyColumn +import com.artemchep.keyguard.ui.focus.FocusRequester2 +import com.artemchep.keyguard.ui.focus.focusRequester2 +import com.artemchep.keyguard.ui.icons.IconBox +import com.artemchep.keyguard.ui.poweredby.URL_JUST_DELETE_ME +import com.artemchep.keyguard.ui.pulltosearch.PullToSearch +import com.artemchep.keyguard.ui.skeleton.SkeletonItem +import com.artemchep.keyguard.ui.toolbar.CustomToolbar +import com.artemchep.keyguard.ui.toolbar.content.CustomToolbarContent +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.filter +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.flow.withIndex + +@Composable +fun JustDeleteMeListScreen( +) { + val loadableState = produceJustDeleteMeServiceListState() + JustDeleteMeListScreen( + loadableState = loadableState, + ) +} + +@OptIn(ExperimentalMaterial3Api::class, ExperimentalFoundationApi::class) +@Composable +fun JustDeleteMeListScreen( + loadableState: Loadable, +) { + val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior() + val filterState = run { + val filterFlow = loadableState.getOrNull()?.filter + remember(filterFlow) { + filterFlow ?: MutableStateFlow(null) + }.collectAsState() + } + + val listRevision = + loadableState.getOrNull()?.content?.getOrNull()?.getOrNull()?.revision + val listState = remember { + LazyListState( + firstVisibleItemIndex = 0, + firstVisibleItemScrollOffset = 0, + ) + } + + LaunchedEffect(listRevision) { + // TODO: How do you wait till the layout state start to represent + // the actual data? + val listSize = + loadableState.getOrNull()?.content?.getOrNull()?.getOrNull()?.items?.size + snapshotFlow { listState.layoutInfo.totalItemsCount } + .withIndex() + .filter { + it.index > 0 || it.value == listSize + } + .first() + + listState.scrollToItem(0, 0) + } + + val focusRequester = remember { FocusRequester2() } + // Auto focus the text field + // on launch. + LaunchedEffect( + focusRequester, + filterState, + ) { + snapshotFlow { filterState.value } + .first { it?.query?.onChange != null } + delay(100L) + focusRequester.requestFocus() + } + + val pullRefreshState = rememberPullRefreshState( + refreshing = false, + onRefresh = { + focusRequester.requestFocus() + }, + ) + ScaffoldLazyColumn( + modifier = Modifier + .pullRefresh(pullRefreshState) + .nestedScroll(scrollBehavior.nestedScrollConnection), + topAppBarScrollBehavior = scrollBehavior, + topBar = { + CustomToolbar( + scrollBehavior = scrollBehavior, + ) { + Column { + CustomToolbarContent( + title = stringResource(Res.strings.justdeleteme_title), + icon = { + NavigationIcon() + }, + actions = { + val updatedNavigationController by rememberUpdatedState( + LocalNavigationController.current, + ) + IconButton( + onClick = { + val intent = + NavigationIntent.NavigateToBrowser(URL_JUST_DELETE_ME) + updatedNavigationController.queue(intent) + }, + ) { + IconBox(Icons.Outlined.OpenInBrowser) + } + }, + ) + + val query = filterState.value?.query + val queryText = query?.state?.value.orEmpty() + SearchTextField( + modifier = Modifier + .focusRequester2(focusRequester), + text = queryText, + placeholder = stringResource(Res.strings.justdeleteme_search_placeholder), + searchIcon = false, + leading = {}, + trailing = {}, + onTextChange = query?.onChange, + onGoClick = null, + ) + } + } + }, + pullRefreshState = pullRefreshState, + overlay = { + val filterRevision = filterState.value?.revision + DefaultProgressBar( + visible = listRevision != null && filterRevision != null && + listRevision != filterRevision, + ) + + PullToSearch( + modifier = Modifier + .padding(contentPadding.value), + pullRefreshState = pullRefreshState, + ) + }, + listState = listState, + ) { + val contentState = loadableState + .flatMap { it.content } + when (contentState) { + is Loadable.Loading -> { + for (i in 1..3) { + item("skeleton.$i") { + SkeletonItem() + } + } + } + + is Loadable.Ok -> { + contentState.value.fold( + ifLeft = { e -> + item("error") { + ErrorView( + text = { + Text(text = "Failed to load app list!") + }, + exception = e, + ) + } + }, + ifRight = { content -> + val items = content.items + if (items.isEmpty()) { + item("empty") { + NoItemsPlaceholder() + } + } + + items( + items = items, + key = { it.key }, + ) { item -> + AppItem( + modifier = Modifier + .animateItemPlacement(), + item = item, + ) + } + }, + ) + } + } + } +} + +@Composable +private fun NoItemsPlaceholder( + modifier: Modifier = Modifier, +) { + EmptySearchView( + modifier = modifier, + text = { + Text( + text = stringResource(Res.strings.justdeleteme_empty_label), + ) + }, + ) +} + +@Composable +private fun AppItem( + modifier: Modifier, + item: JustDeleteMeServiceListState.Item, +) { + FlatItem( + modifier = modifier, + leading = { + item.icon() + }, + title = { + Text(item.name) + }, + trailing = { + AhDifficulty( + modifier = Modifier, + model = item.data, + ) + }, + onClick = item.onClick, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/justdeleteme/directory/JustDeleteMeServiceListState.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/justdeleteme/directory/JustDeleteMeServiceListState.kt new file mode 100644 index 00000000..805470db --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/justdeleteme/directory/JustDeleteMeServiceListState.kt @@ -0,0 +1,40 @@ +package com.artemchep.keyguard.feature.justdeleteme.directory + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.Immutable +import androidx.compose.ui.text.AnnotatedString +import arrow.core.Either +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.service.justdeleteme.JustDeleteMeServiceInfo +import com.artemchep.keyguard.feature.auth.common.TextFieldModel2 +import kotlinx.coroutines.flow.StateFlow + +data class JustDeleteMeServiceListState( + val filter: StateFlow, + val content: Loadable>, +) { + @Immutable + data class Filter( + val revision: Int, + val query: TextFieldModel2, + ) { + companion object + } + + @Immutable + data class Content( + val revision: Int, + val items: List, + ) { + companion object + } + + @Immutable + data class Item( + val key: String, + val icon: @Composable () -> Unit, + val name: AnnotatedString, + val data: JustDeleteMeServiceInfo, + val onClick: (() -> Unit)? = null, + ) +} \ No newline at end of file diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/justdeleteme/directory/JustDeleteMeServiceListStateProducer.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/justdeleteme/directory/JustDeleteMeServiceListStateProducer.kt new file mode 100644 index 00000000..5daf6be4 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/justdeleteme/directory/JustDeleteMeServiceListStateProducer.kt @@ -0,0 +1,155 @@ +package com.artemchep.keyguard.feature.justdeleteme.directory + +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.text.AnnotatedString +import androidx.compose.ui.unit.dp +import arrow.core.partially1 +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.service.justdeleteme.JustDeleteMeService +import com.artemchep.keyguard.common.service.justdeleteme.JustDeleteMeServiceInfo +import com.artemchep.keyguard.feature.crashlytics.crashlyticsAttempt +import com.artemchep.keyguard.feature.favicon.FaviconImage +import com.artemchep.keyguard.feature.favicon.FaviconUrl +import com.artemchep.keyguard.feature.home.vault.search.IndexedText +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.feature.navigation.state.produceScreenState +import com.artemchep.keyguard.feature.search.search.IndexedModel +import com.artemchep.keyguard.feature.search.search.mapSearch +import com.artemchep.keyguard.feature.search.search.searchFilter +import com.artemchep.keyguard.feature.search.search.searchQueryHandle +import kotlinx.coroutines.flow.asFlow +import kotlinx.coroutines.flow.map +import org.kodein.di.compose.localDI +import org.kodein.di.direct +import org.kodein.di.instance + +private class JustDeleteMeServiceListUiException( + msg: String, + cause: Throwable, +) : RuntimeException(msg, cause) + +@Composable +fun produceJustDeleteMeServiceListState( +) = with(localDI().direct) { + produceJustDeleteMeServiceListState( + justDeleteMeService = instance(), + ) +} + +@Composable +fun produceJustDeleteMeServiceListState( + justDeleteMeService: JustDeleteMeService, +): Loadable = produceScreenState( + key = "justdeleteme_service_list", + initial = Loadable.Loading, + args = arrayOf(), +) { + val queryHandle = searchQueryHandle("query") + val queryFlow = searchFilter(queryHandle) { model, revision -> + JustDeleteMeServiceListState.Filter( + revision = revision, + query = model, + ) + } + + val modelComparator = Comparator { a: JustDeleteMeServiceInfo, b: JustDeleteMeServiceInfo -> + a.name.compareTo(b.name, ignoreCase = true) + } + + fun onClick(model: JustDeleteMeServiceInfo) { + val route = JustDeleteMeServiceViewRoute( + args = JustDeleteMeServiceViewRoute.Args( + justDeleteMe = model, + ), + ) + val intent = NavigationIntent.NavigateToRoute(route) + navigate(intent) + } + + fun List.toItems(): List { + val nameCollisions = mutableMapOf() + return this + .sortedWith(modelComparator) + .map { serviceInfo -> + val key = kotlin.run { + val newNameCollisionCounter = nameCollisions + .getOrDefault(serviceInfo.name, 0) + 1 + nameCollisions[serviceInfo.name] = + newNameCollisionCounter + serviceInfo.name + ":" + newNameCollisionCounter + } + val faviconUrl = serviceInfo.url?.let { url -> + FaviconUrl( + serverId = null, + url = url, + ) + } + JustDeleteMeServiceListState.Item( + key = key, + icon = { + FaviconImage( + modifier = Modifier + .size(24.dp) + .clip(CircleShape), + imageModel = { faviconUrl }, + ) + }, + name = AnnotatedString(serviceInfo.name), + data = serviceInfo, + onClick = ::onClick + .partially1(serviceInfo), + ) + } + } + + val itemsFlow = justDeleteMeService.get() + .asFlow() + .map { apps -> + apps + .toItems() + // Index for the search. + .map { item -> + IndexedModel( + model = item, + indexedText = IndexedText.invoke(item.name.text), + ) + } + } + .mapSearch( + handle = queryHandle, + ) { item, result -> + // Replace the origin text with the one with + // search decor applied to it. + item.copy(name = result.highlightedText) + } + val contentFlow = itemsFlow + .crashlyticsAttempt { e -> + val msg = "Failed to get the just-delete-me list!" + JustDeleteMeServiceListUiException( + msg = msg, + cause = e, + ) + } + .map { result -> + val contentOrException = result + .map { (items, revision) -> + JustDeleteMeServiceListState.Content( + revision = revision, + items = items, + ) + } + Loadable.Ok(contentOrException) + } + contentFlow + .map { content -> + val state = JustDeleteMeServiceListState( + filter = queryFlow, + content = content, + ) + Loadable.Ok(state) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/justdeleteme/directory/JustDeleteMeServiceViewRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/justdeleteme/directory/JustDeleteMeServiceViewRoute.kt new file mode 100644 index 00000000..f4e2bdf4 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/justdeleteme/directory/JustDeleteMeServiceViewRoute.kt @@ -0,0 +1,58 @@ +package com.artemchep.keyguard.feature.justdeleteme.directory + +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.AccountBox +import androidx.compose.material.icons.outlined.Delete +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.common.service.justdeleteme.JustDeleteMeServiceInfo +import com.artemchep.keyguard.feature.navigation.DialogRoute +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.feature.navigation.state.TranslatorScope +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItemAction +import com.artemchep.keyguard.ui.icons.iconSmall + +data class JustDeleteMeServiceViewRoute( + val args: Args, +) : DialogRoute { + companion object { + fun justDeleteMeActionOrNull( + translator: TranslatorScope, + justDeleteMe: JustDeleteMeServiceInfo, + navigate: (NavigationIntent) -> Unit, + ) = justDeleteMeAction( + translator = translator, + justDeleteMe = justDeleteMe, + navigate = navigate, + ) + + fun justDeleteMeAction( + translator: TranslatorScope, + justDeleteMe: JustDeleteMeServiceInfo, + navigate: (NavigationIntent) -> Unit, + ) = FlatItemAction( + leading = iconSmall(Icons.Outlined.AccountBox, Icons.Outlined.Delete), + title = translator.translate(Res.strings.uri_action_how_to_delete_account_title), + onClick = { + val route = JustDeleteMeServiceViewRoute( + args = Args( + justDeleteMe = justDeleteMe, + ), + ) + val intent = NavigationIntent.NavigateToRoute(route) + navigate(intent) + }, + ) + } + + data class Args( + val justDeleteMe: JustDeleteMeServiceInfo, + ) + + @Composable + override fun Content() { + JustDeleteMeScreen( + args = args, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/justdeleteme/directory/JustDeleteMeServiceViewScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/justdeleteme/directory/JustDeleteMeServiceViewScreen.kt new file mode 100644 index 00000000..6b9ca693 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/justdeleteme/directory/JustDeleteMeServiceViewScreen.kt @@ -0,0 +1,145 @@ +package com.artemchep.keyguard.feature.justdeleteme.directory + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.AccountBox +import androidx.compose.material.icons.outlined.Delete +import androidx.compose.material.icons.outlined.Email +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.common.model.getOrNull +import com.artemchep.keyguard.feature.dialog.Dialog +import com.artemchep.keyguard.feature.justdeleteme.AhDifficulty +import com.artemchep.keyguard.feature.navigation.LocalNavigationController +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.feature.tfa.directory.FlatLaunchBrowserItem +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItem +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.icons.ChevronIcon +import com.artemchep.keyguard.ui.icons.IconBox +import com.artemchep.keyguard.ui.icons.icon +import com.artemchep.keyguard.ui.markdown.Md +import com.artemchep.keyguard.ui.poweredby.PoweredByJustDeleteMe +import com.artemchep.keyguard.ui.theme.Dimens +import com.artemchep.keyguard.ui.theme.combineAlpha +import dev.icerock.moko.resources.compose.stringResource + +@Composable +fun JustDeleteMeScreen( + args: JustDeleteMeServiceViewRoute.Args, +) { + val loadableState = produceJustDeleteMeServiceViewState( + args = args, + ) + Dialog( + icon = icon(Icons.Outlined.AccountBox, Icons.Outlined.Delete), + title = { + val title = args.justDeleteMe.name + Text( + text = title, + ) + Text( + text = stringResource(Res.strings.justdeleteme_title), + style = MaterialTheme.typography.titleSmall, + color = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + ) + AhDifficulty( + modifier = Modifier + .padding(top = 4.dp), + model = args.justDeleteMe, + ) + }, + content = { + Column { + val notes = args.justDeleteMe.notes + if (notes != null) { + Md( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding), + markdown = notes, + ) + Spacer( + modifier = Modifier + .height(16.dp), + ) + } + + val navigationController by rememberUpdatedState(LocalNavigationController.current) + + val updatedEmail by rememberUpdatedState(args.justDeleteMe.email) + if (updatedEmail != null) { + FlatItem( + elevation = 8.dp, + leading = { + IconBox(Icons.Outlined.Email) + }, + title = { + Text( + text = stringResource(Res.strings.justdeleteme_send_email_title), + ) + }, + trailing = { + ChevronIcon() + }, + onClick = { + // Open the email, if it's available. + updatedEmail?.let { + val intent = NavigationIntent.NavigateToEmail( + it, + subject = args.justDeleteMe.emailSubject, + body = args.justDeleteMe.emailBody, + ) + navigationController.queue(intent) + } + }, + enabled = updatedEmail != null, + ) + } + + val websiteUrl = args.justDeleteMe.url + if (websiteUrl != null) { + FlatLaunchBrowserItem( + title = stringResource(Res.strings.uri_action_launch_website_title), + url = websiteUrl, + ) + } + + Spacer( + modifier = Modifier + .height(8.dp), + ) + + PoweredByJustDeleteMe( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding) + .fillMaxWidth(), + ) + } + }, + contentScrollable = true, + actions = { + val updatedOnClose by rememberUpdatedState(loadableState.getOrNull()?.onClose) + TextButton( + enabled = updatedOnClose != null, + onClick = { + updatedOnClose?.invoke() + }, + ) { + Text(stringResource(Res.strings.close)) + } + }, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/justdeleteme/directory/JustDeleteMeServiceViewState.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/justdeleteme/directory/JustDeleteMeServiceViewState.kt new file mode 100644 index 00000000..e74bfa5c --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/justdeleteme/directory/JustDeleteMeServiceViewState.kt @@ -0,0 +1,30 @@ +package com.artemchep.keyguard.feature.justdeleteme.directory + +import androidx.compose.runtime.Immutable +import arrow.core.Either +import kotlinx.collections.immutable.ImmutableList + +@Immutable +data class JustDeleteMeServiceViewState( + val content: Either, + val onClose: (() -> Unit)? = null, +) { + @Immutable + data class Content( + val breaches: ImmutableList, + ) + + @Immutable + data class Breach( + val title: String, + val domain: String, + val description: String, + val icon: String?, + val count: Int?, + /** Time when this breach has occurred */ + val occurredAt: String?, + /** Time when this breach was acknowledged */ + val reportedAt: String?, + val dataClasses: List, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/justdeleteme/directory/JustDeleteMeServiceViewStateProducer.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/justdeleteme/directory/JustDeleteMeServiceViewStateProducer.kt new file mode 100644 index 00000000..e31f264c --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/justdeleteme/directory/JustDeleteMeServiceViewStateProducer.kt @@ -0,0 +1,48 @@ +package com.artemchep.keyguard.feature.justdeleteme.directory + +import androidx.compose.runtime.Composable +import arrow.core.right +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.usecase.CheckUsernameLeak +import com.artemchep.keyguard.common.usecase.DateFormatter +import com.artemchep.keyguard.feature.navigation.state.navigatePopSelf +import com.artemchep.keyguard.feature.navigation.state.produceScreenState +import kotlinx.collections.immutable.persistentListOf +import kotlinx.coroutines.flow.flowOf +import org.kodein.di.compose.localDI +import org.kodein.di.direct +import org.kodein.di.instance + +@Composable +fun produceJustDeleteMeServiceViewState( + args: JustDeleteMeServiceViewRoute.Args, +) = with(localDI().direct) { + produceJustDeleteMeServiceViewState( + args = args, + checkUsernameLeak = instance(), + dateFormatter = instance(), + ) +} + +@Composable +fun produceJustDeleteMeServiceViewState( + args: JustDeleteMeServiceViewRoute.Args, + checkUsernameLeak: CheckUsernameLeak, + dateFormatter: DateFormatter, +): Loadable = produceScreenState( + key = "justdeleteme_service_view", + initial = Loadable.Loading, + args = arrayOf(), +) { + val content = + JustDeleteMeServiceViewState.Content( + breaches = persistentListOf(), + ).right() + val state = JustDeleteMeServiceViewState( + content = content, + onClose = { + navigatePopSelf() + }, + ) + flowOf(Loadable.Ok(state)) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/keyguard/AppRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/keyguard/AppRoute.kt new file mode 100644 index 00000000..a2281431 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/keyguard/AppRoute.kt @@ -0,0 +1,11 @@ +package com.artemchep.keyguard.feature.keyguard + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.navigation.Route + +object AppRoute : Route { + @Composable + override fun Content() { + AppScreen() + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/keyguard/AppScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/keyguard/AppScreen.kt new file mode 100644 index 00000000..e14dd667 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/keyguard/AppScreen.kt @@ -0,0 +1,152 @@ +package com.artemchep.keyguard.feature.keyguard + +import androidx.compose.animation.Crossfade +import androidx.compose.animation.ExperimentalAnimationApi +import androidx.compose.animation.core.tween +import androidx.compose.animation.core.updateTransition +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.asPaddingValues +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.union +import androidx.compose.foundation.layout.widthIn +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.common.model.VaultState +import com.artemchep.keyguard.common.usecase.UnlockUseCase +import com.artemchep.keyguard.feature.keyguard.main.MainRoute +import com.artemchep.keyguard.feature.keyguard.setup.SetupRoute +import com.artemchep.keyguard.feature.keyguard.unlock.UnlockRoute +import com.artemchep.keyguard.feature.loading.LoadingScreen +import com.artemchep.keyguard.feature.navigation.NavigationNode +import com.artemchep.keyguard.platform.leIme +import com.artemchep.keyguard.platform.leNavigationBars +import com.artemchep.keyguard.platform.lifecycle.LocalLifecycleStateFlow +import com.artemchep.keyguard.platform.lifecycle.flowWithLifecycle +import com.artemchep.keyguard.ui.ToastMessageHost +import org.kodein.di.compose.rememberInstance +import org.kodein.di.compose.withDI + +@Composable +fun AppScreen() { + ManualAppScreen { vaultState -> + when (vaultState) { + is VaultState.Create -> ManualAppScreenOnCreate(vaultState) + is VaultState.Unlock -> ManualAppScreenOnUnlock(vaultState) + is VaultState.Loading -> ManualAppScreenOnLoading(vaultState) + is VaultState.Main -> ManualAppScreenOnMain(vaultState) + } + } +} + +// +// Internals +// + +@Composable +fun ManualAppScreenOnCreate( + state: VaultState.Create, +) { + val route = remember(state) { + SetupRoute( + createVaultWithMasterPassword = state.createWithMasterPassword, + createVaultWithMasterPasswordAndBiometric = state.createWithMasterPasswordAndBiometric, + ) + } + NavigationNode( + id = "setup", + route = route, + ) +} + +@Composable +fun ManualAppScreenOnUnlock( + state: VaultState.Unlock, +) { + val route = remember(state) { + UnlockRoute( + unlockVaultByMasterPassword = state.unlockWithMasterPassword, + unlockVaultByBiometric = state.unlockWithBiometric, + lockReason = state.lockReason, + ) + } + NavigationNode( + id = "unlock", + route = route, + ) +} + +@Composable +fun ManualAppScreenOnLoading( + state: VaultState.Loading, +) { + LoadingScreen() +} + +@Composable +fun ManualAppScreenOnMain( + state: VaultState.Main, +) { + // Provide the session DI to all of the + // sub screens of this composable. + withDI(state.di) { + NavigationNode( + id = "main", + route = MainRoute, + ) + } +} + +@OptIn(ExperimentalAnimationApi::class) +@Composable +fun ManualAppScreen( + content: @Composable (VaultState) -> Unit, +) { + Box( + modifier = Modifier + .fillMaxSize(), + ) { + var appState by remember { + mutableStateOf(VaultState.Loading) + } + + val appViewModel by rememberInstance() + val lifecycleFlow = LocalLifecycleStateFlow + LaunchedEffect(appViewModel, lifecycleFlow) { + appViewModel() + .flowWithLifecycle(lifecycleFlow) + .collect { state -> + if (state != appState) { + appState = state + } + } + } + + val transition = updateTransition(appState) + transition.Crossfade( + modifier = Modifier, + animationSpec = tween(), + contentKey = { it::class }, + ) { state -> + content(state) + } + + val insets = WindowInsets.leNavigationBars + .union(WindowInsets.leIme) + .asPaddingValues() + ToastMessageHost( + modifier = Modifier + .align(Alignment.BottomCenter) + .padding(insets) + .widthIn(max = 300.dp), + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/keyguard/main/MainRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/keyguard/main/MainRoute.kt new file mode 100644 index 00000000..87c03669 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/keyguard/main/MainRoute.kt @@ -0,0 +1,11 @@ +package com.artemchep.keyguard.feature.keyguard.main + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.navigation.Route + +object MainRoute : Route { + @Composable + override fun Content() { + MainScreen() + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/keyguard/main/MainScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/keyguard/main/MainScreen.kt new file mode 100644 index 00000000..c7277b0e --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/keyguard/main/MainScreen.kt @@ -0,0 +1,26 @@ +package com.artemchep.keyguard.feature.keyguard.main + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.AppMode +import com.artemchep.keyguard.LocalAppMode +import com.artemchep.keyguard.feature.home.HomeScreen + +@OptIn(kotlin.time.ExperimentalTime::class) +@Composable +fun MainScreen() { + when (LocalAppMode.current) { + is AppMode.Main -> { + HomeScreen() + } + + is AppMode.Save, + is AppMode.Pick, + is AppMode.PickPasskey, + is AppMode.SavePasskey, + -> { + HomeScreen( + navBarVisible = false, + ) + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/keyguard/setup/SetupRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/keyguard/setup/SetupRoute.kt new file mode 100644 index 00000000..ef4b9dcc --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/keyguard/setup/SetupRoute.kt @@ -0,0 +1,22 @@ +package com.artemchep.keyguard.feature.keyguard.setup + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.common.model.VaultState +import com.artemchep.keyguard.feature.navigation.Route + +data class SetupRoute( + /** + * Creates a vault with the key derived from a + * given password. + */ + val createVaultWithMasterPassword: VaultState.Create.WithPassword, + val createVaultWithMasterPasswordAndBiometric: VaultState.Create.WithBiometric?, +) : Route { + @Composable + override fun Content() { + SetupScreen( + createVaultWithMasterPassword = createVaultWithMasterPassword, + createVaultWithMasterPasswordAndBiometric = createVaultWithMasterPasswordAndBiometric, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/keyguard/setup/SetupScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/keyguard/setup/SetupScreen.kt new file mode 100644 index 00000000..8e4f34be --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/keyguard/setup/SetupScreen.kt @@ -0,0 +1,327 @@ +package com.artemchep.keyguard.feature.keyguard.setup + +import androidx.compose.animation.Crossfade +import androidx.compose.foundation.layout.ColumnScope +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.text.KeyboardActionScope +import androidx.compose.foundation.text.KeyboardActions +import androidx.compose.foundation.text.KeyboardOptions +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Add +import androidx.compose.material3.Button +import androidx.compose.material3.Checkbox +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.ExperimentalComposeUiApi +import androidx.compose.ui.Modifier +import androidx.compose.ui.autofill.AutofillType +import androidx.compose.ui.focus.FocusRequester +import androidx.compose.ui.focus.focusRequester +import androidx.compose.ui.platform.testTag +import androidx.compose.ui.text.SpanStyle +import androidx.compose.ui.text.buildAnnotatedString +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.input.ImeAction +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.text.withStyle +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.common.model.VaultState +import com.artemchep.keyguard.common.model.fold +import com.artemchep.keyguard.feature.auth.common.autofill +import com.artemchep.keyguard.feature.biometric.BiometricPromptEffect +import com.artemchep.keyguard.feature.keyguard.unlock.unlockScreenActionPadding +import com.artemchep.keyguard.feature.keyguard.unlock.unlockScreenTitlePadding +import com.artemchep.keyguard.platform.isStandalone +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.AutofillButton +import com.artemchep.keyguard.ui.DisabledEmphasisAlpha +import com.artemchep.keyguard.ui.FlatItemLayout +import com.artemchep.keyguard.ui.OtherScaffold +import com.artemchep.keyguard.ui.PasswordFlatTextField +import com.artemchep.keyguard.ui.skeleton.SkeletonButton +import com.artemchep.keyguard.ui.skeleton.SkeletonCheckbox +import com.artemchep.keyguard.ui.skeleton.SkeletonText +import com.artemchep.keyguard.ui.skeleton.SkeletonTextField +import com.artemchep.keyguard.ui.theme.Dimens +import com.artemchep.keyguard.ui.theme.combineAlpha +import dev.icerock.moko.resources.compose.stringResource + +@Composable +fun SetupScreen( + /** + * Creates a vault with the key derived from a + * given password. + */ + createVaultWithMasterPassword: VaultState.Create.WithPassword, + createVaultWithMasterPasswordAndBiometric: VaultState.Create.WithBiometric?, +) { + val loadableState = setupScreenState( + createVaultWithMasterPassword = createVaultWithMasterPassword, + createVaultWithMasterPasswordAndBiometric = createVaultWithMasterPasswordAndBiometric, + ) + loadableState.fold( + ifLoading = { + SetupScreenSkeleton() + }, + ifOk = { state -> + SetupScreen(state) + }, + ) +} + +@Composable +private fun SetupScreenSkeleton() { + OtherScaffold { + SetupScreenCreateVaultTitle() + Spacer(Modifier.height(unlockScreenTitlePadding)) + SkeletonTextField( + modifier = Modifier + .fillMaxWidth(), + ) + Spacer(Modifier.height(unlockScreenActionPadding)) + FlatItemLayout( + paddingValues = PaddingValues(0.dp), + leading = { + SkeletonCheckbox( + clickable = false, + ) + }, + content = { + SkeletonText( + modifier = Modifier + .fillMaxWidth(0.4f), + style = MaterialTheme.typography.bodyMedium, + ) + }, + enabled = true, + ) + Spacer(Modifier.height(unlockScreenActionPadding)) + FlatItemLayout( + paddingValues = PaddingValues(0.dp), + leading = { + SkeletonCheckbox( + clickable = false, + ) + }, + content = { + SkeletonText( + modifier = Modifier + .fillMaxWidth(0.3f), + style = MaterialTheme.typography.bodyMedium, + ) + }, + enabled = true, + ) + Spacer(Modifier.height(unlockScreenActionPadding)) + SkeletonButton( + modifier = Modifier + .fillMaxWidth(), + ) + } +} + +@Composable +fun SetupScreen( + setupState: SetupState, +) { + BiometricPromptEffect(setupState.sideEffects.showBiometricPromptFlow) + + OtherScaffold { + SetupContent( + setupState = setupState, + ) + } +} + +@OptIn(ExperimentalMaterial3Api::class, ExperimentalComposeUiApi::class) +@Composable +fun ColumnScope.SetupContent( + setupState: SetupState, +) { + val focusRequester = remember { FocusRequester() } + // Auto focus the text field + // on launch. + LaunchedEffect(focusRequester) { + focusRequester.requestFocus() + } + + SetupScreenCreateVaultTitle() + Spacer(Modifier.height(unlockScreenTitlePadding)) + val keyboardOnGo: (KeyboardActionScope.() -> Unit)? = + if (setupState.onCreateVault != null) { + // lambda + { + setupState.onCreateVault.invoke() + } + } else { + null + } + PasswordFlatTextField( + modifier = Modifier + .focusRequester(focusRequester), + fieldModifier = Modifier + .autofill( + value = setupState.password.state.value, + autofillTypes = listOf( + AutofillType.NewPassword, + ), + onFill = setupState.password.onChange, + ), + testTag = "field:password", + label = stringResource(Res.strings.setup_field_app_password_label), + value = setupState.password, + keyboardOptions = KeyboardOptions( + imeAction = when { + keyboardOnGo != null -> ImeAction.Go + else -> ImeAction.Default + }, + ), + keyboardActions = KeyboardActions( + onGo = keyboardOnGo, + ), + clearButton = false, // Minimize used space + leading = null, // Do not display default icon + trailing = { + AutofillButton( + key = "password", + password = true, + onValueChange = setupState.password.onChange, + ) + }, + ) + if (setupState.biometric != null) { + Spacer(Modifier.height(unlockScreenActionPadding)) + + val updatedBiometric by rememberUpdatedState(setupState.biometric) + FlatItemLayout( + paddingValues = PaddingValues(0.dp), + leading = { + Checkbox( + checked = setupState.biometric.checked, + onCheckedChange = null, + ) + }, + content = { + Text( + text = stringResource(Res.strings.setup_checkbox_biometric_auth), + style = MaterialTheme.typography.bodyMedium, + ) + }, + onClick = { + val newValue = !updatedBiometric.checked + updatedBiometric.onChange?.invoke(newValue) + }, + enabled = updatedBiometric.onChange != null, + ) + } + Spacer(Modifier.height(unlockScreenActionPadding)) + val updatedCrashlytics by rememberUpdatedState(setupState.crashlytics) + FlatItemLayout( + paddingValues = PaddingValues(0.dp), + leading = { + Checkbox( + checked = setupState.crashlytics.checked, + onCheckedChange = null, + ) + }, + content = { + Text( + text = stringResource(Res.strings.setup_button_send_crash_reports), + style = MaterialTheme.typography.bodyMedium, + ) + }, + onClick = { + val newValue = !updatedCrashlytics.checked + updatedCrashlytics.onChange?.invoke(newValue) + }, + enabled = updatedCrashlytics.onChange != null, + ) + Spacer(Modifier.height(unlockScreenActionPadding)) + val onCreateButtonClick by rememberUpdatedState(setupState.onCreateVault) + Button( + modifier = Modifier + .testTag("btn:go") + .fillMaxWidth(), + enabled = setupState.onCreateVault != null, + onClick = { + onCreateButtonClick?.invoke() + }, + ) { + Crossfade( + modifier = Modifier + .size(24.dp), + targetState = setupState.isLoading, + ) { isLoading -> + if (isLoading) { + CircularProgressIndicator( + color = LocalContentColor.current, + ) + } else { + Icon( + imageVector = Icons.Outlined.Add, + contentDescription = null, + ) + } + } + Spacer( + modifier = Modifier + .width(Dimens.buttonIconPadding), + ) + Text( + text = stringResource(Res.strings.setup_button_create_vault), + ) + } +} + +@Composable +private fun ColumnScope.SetupScreenCreateVaultTitle() { + Text( + textAlign = TextAlign.Center, + text = remember { + keyguardSpan() + }, + style = MaterialTheme.typography.titleLarge, + ) + Spacer(Modifier.height(unlockScreenTitlePadding)) + Text( + modifier = Modifier + .fillMaxWidth(), + text = stringResource(Res.strings.setup_header_text), + style = MaterialTheme.typography.bodyLarge, + ) + if (isStandalone) { + Spacer(Modifier.height(8.dp)) + Text( + text = "By continuing you confirm that you have purchased the Keyguard or have had an active license.", + style = MaterialTheme.typography.bodyMedium, + color = LocalContentColor.current + .combineAlpha(DisabledEmphasisAlpha), + ) + } +} + +fun keyguardSpan() = + buildAnnotatedString { + withStyle( + style = SpanStyle( + fontWeight = FontWeight.Bold, + ), + ) { + append("Key") + } + append("guard") + } diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/keyguard/setup/SetupState.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/keyguard/setup/SetupState.kt new file mode 100644 index 00000000..9f8ad7aa --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/keyguard/setup/SetupState.kt @@ -0,0 +1,39 @@ +package com.artemchep.keyguard.feature.keyguard.setup + +import androidx.compose.runtime.Immutable +import arrow.optics.optics +import com.artemchep.keyguard.common.model.BiometricAuthPrompt +import com.artemchep.keyguard.feature.auth.common.SwitchFieldModel +import com.artemchep.keyguard.feature.auth.common.TextFieldModel2 +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.emptyFlow + +@Immutable +@optics +data class SetupState( + val sideEffects: SideEffects = SideEffects(), + val password: TextFieldModel2, + val crashlytics: SwitchFieldModel, + val biometric: Biometric? = null, + val isLoading: Boolean = false, + val onCreateVault: (() -> Unit)? = null, +) { + companion object; + + @Immutable + @optics + data class Biometric( + val checked: Boolean = false, + val onChange: ((Boolean) -> Unit)? = null, + ) { + companion object + } + + @Immutable + @optics + data class SideEffects( + val showBiometricPromptFlow: Flow = emptyFlow(), + ) { + companion object + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/keyguard/setup/SetupStateProducer.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/keyguard/setup/SetupStateProducer.kt new file mode 100644 index 00000000..f03ab4ec --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/keyguard/setup/SetupStateProducer.kt @@ -0,0 +1,213 @@ +package com.artemchep.keyguard.feature.keyguard.setup + +import androidx.compose.runtime.Composable +import arrow.core.Either +import arrow.core.identity +import arrow.core.partially1 +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.ioRaise +import com.artemchep.keyguard.common.model.BiometricAuthPrompt +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.model.VaultState +import com.artemchep.keyguard.common.util.flow.EventFlow +import com.artemchep.keyguard.feature.auth.common.SwitchFieldModel +import com.artemchep.keyguard.feature.auth.common.TextFieldModel2 +import com.artemchep.keyguard.feature.auth.common.Validated +import com.artemchep.keyguard.feature.auth.common.util.validatedPassword +import com.artemchep.keyguard.feature.loading.LoadingTask +import com.artemchep.keyguard.feature.localization.TextHolder +import com.artemchep.keyguard.feature.navigation.state.produceScreenState +import com.artemchep.keyguard.platform.LeCipher +import com.artemchep.keyguard.platform.crashlyticsIsEnabled +import com.artemchep.keyguard.platform.crashlyticsSetEnabled +import com.artemchep.keyguard.res.Res +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.flow.map + +private const val DEFAULT_PASSWORD = "" +private const val DEFAULT_BIOMETRIC = false +private const val DEFAULT_CRASHLYTICS = false + +@Composable +fun setupScreenState( + createVaultWithMasterPassword: VaultState.Create.WithPassword, + createVaultWithMasterPasswordAndBiometric: VaultState.Create.WithBiometric?, +): Loadable = produceScreenState>( + key = "setup", + initial = Loadable.Loading, + args = arrayOf( + createVaultWithMasterPassword, + createVaultWithMasterPasswordAndBiometric, + ), +) { + val executor = screenExecutor() + + val biometricPromptSink = EventFlow() + + val biometricSink = mutablePersistedFlow("biometric") { DEFAULT_BIOMETRIC } + val crashlyticsSink = mutablePersistedFlow("crashlytics") { + crashlyticsIsEnabled() + ?: DEFAULT_CRASHLYTICS + } + + val passwordSink = mutablePersistedFlow("password") { DEFAULT_PASSWORD } + val passwordState = mutableComposeState(passwordSink) + + val createVaultByMasterPasswordFn = createVaultWithMasterPassword + .let { + CreateVaultWithPassword(executor, it) + } + val createVaultWithMasterPasswordAndBiometricFn = createVaultWithMasterPasswordAndBiometric + ?.let { + CreateVaultWithBiometric(executor, it) + } + + val biometricStateFlow = biometricStateFlow( + biometricSink = biometricSink, + // True if the device is capable of performing a + // biometric authentication. + hasBiometric = createVaultWithMasterPasswordAndBiometric != null, + ) + combine( + passwordSink.validatedPassword(this), + crashlyticsSink, + biometricStateFlow, + executor.isExecutingFlow, + ) { validatedPassword, crashlytics, biometric, taskIsExecuting -> + val validationError = (validatedPassword as? Validated.Failure)?.error + val canCreateVault = validationError == null && !taskIsExecuting + val state = SetupState( + biometric = biometric, + password = TextFieldModel2.of( + state = passwordState, + validated = validatedPassword, + ), + crashlytics = SwitchFieldModel( + checked = crashlytics, + onChange = crashlyticsSink::value::set, + ), + sideEffects = SetupState.SideEffects( + showBiometricPromptFlow = biometricPromptSink, + ), + isLoading = taskIsExecuting, + onCreateVault = if (canCreateVault) { + crashlyticsSetEnabled(crashlytics) + // If the biometric is checked & possible, then ask user to + // confirm his identity. + if (createVaultWithMasterPasswordAndBiometricFn != null && biometric?.checked == true) { + val prompt by lazy { + createPromptOrNull( + executor = executor, + createVaultWithMasterPasswordAndBiometricFn = createVaultWithMasterPasswordAndBiometricFn, + password = validatedPassword.model, + ) + } + + // An action should trigger the biometric prompt upon + // execution. + fun() { + prompt?.let(biometricPromptSink::emit) + } + } else { + createVaultByMasterPasswordFn.partially1(validatedPassword.model) + } + } else { + null + }, + ) + Loadable.Ok(state) + } +} + +private fun createPromptOrNull( + executor: LoadingTask, + createVaultWithMasterPasswordAndBiometricFn: CreateVaultWithBiometric, + password: String, +): BiometricAuthPrompt? = run { + val createVault = createVaultWithMasterPasswordAndBiometricFn + .partially1(password) + // Creating a cipher may fail with: + // Fatal Exception: + // java.security.ProviderException + // Keystore key generation failed + val cipher = createVaultWithMasterPasswordAndBiometricFn.getCipher() + .fold( + ifLeft = { e -> + val fakeIo = ioRaise(e) + executor.execute(fakeIo) + return@run null + }, + ifRight = ::identity, + ) + BiometricAuthPrompt( + title = TextHolder.Res(Res.strings.setup_biometric_auth_confirm_title), + cipher = cipher, + onComplete = { result -> + result.fold( + ifLeft = { exception -> + val io = ioRaise(exception) + executor.execute(io) + }, + ifRight = { + createVault() + }, + ) + }, + ) +} + +private open class CreateVaultWithPassword( + private val executor: LoadingTask, + private val getCreateIo: (String) -> IO, +) : (String) -> Unit { + // Create from vault state options + constructor( + executor: LoadingTask, + options: VaultState.Create.WithPassword, + ) : this( + executor = executor, + getCreateIo = options.getCreateIo, + ) + + override fun invoke(password: String) { + val io = getCreateIo(password) + executor.execute(io, password) + } +} + +private class CreateVaultWithBiometric( + executor: LoadingTask, + /** + * A getter for the cipher to pass to the biometric + * authentication. + */ + val getCipher: () -> Either, + getCreateIo: (String) -> IO, +) : CreateVaultWithPassword(executor, getCreateIo) { + // Create from vault state options + constructor( + executor: LoadingTask, + options: VaultState.Create.WithBiometric, + ) : this( + executor = executor, + getCipher = options.getCipher, + getCreateIo = options.getCreateIo, + ) +} + +private fun biometricStateFlow( + biometricSink: MutableStateFlow, + hasBiometric: Boolean, +) = if (hasBiometric) { + val initialState = SetupState.Biometric( + onChange = biometricSink::value::set, + ) + biometricSink.map { isChecked -> + initialState.copy(checked = isChecked) + } +} else { + val disabledState = null + flowOf(disabledState) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/keyguard/unlock/UnlockRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/keyguard/unlock/UnlockRoute.kt new file mode 100644 index 00000000..a0eb96e7 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/keyguard/unlock/UnlockRoute.kt @@ -0,0 +1,24 @@ +package com.artemchep.keyguard.feature.keyguard.unlock + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.common.model.VaultState +import com.artemchep.keyguard.feature.navigation.Route + +class UnlockRoute( + /** + * Unlocks a vault with the key derived from a + * given password. + */ + val unlockVaultByMasterPassword: VaultState.Unlock.WithPassword, + val unlockVaultByBiometric: VaultState.Unlock.WithBiometric?, + val lockReason: String?, +) : Route { + @Composable + override fun Content() { + UnlockScreen( + unlockVaultByMasterPassword = unlockVaultByMasterPassword, + unlockVaultByBiometric = unlockVaultByBiometric, + lockReason = lockReason, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/keyguard/unlock/UnlockScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/keyguard/unlock/UnlockScreen.kt new file mode 100644 index 00000000..d64aa446 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/keyguard/unlock/UnlockScreen.kt @@ -0,0 +1,267 @@ +package com.artemchep.keyguard.feature.keyguard.unlock + +import androidx.compose.animation.Crossfade +import androidx.compose.foundation.layout.ColumnScope +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.text.KeyboardActionScope +import androidx.compose.foundation.text.KeyboardActions +import androidx.compose.foundation.text.KeyboardOptions +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Fingerprint +import androidx.compose.material.icons.outlined.LockOpen +import androidx.compose.material3.Button +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.ElevatedButton +import androidx.compose.material3.Icon +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.ExperimentalComposeUiApi +import androidx.compose.ui.Modifier +import androidx.compose.ui.autofill.AutofillType +import androidx.compose.ui.platform.testTag +import androidx.compose.ui.text.input.ImeAction +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.common.model.VaultState +import com.artemchep.keyguard.common.model.fold +import com.artemchep.keyguard.feature.auth.common.autofill +import com.artemchep.keyguard.feature.biometric.BiometricPromptEffect +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.ExpandedIfNotEmpty +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.OptionsButton +import com.artemchep.keyguard.ui.OtherScaffold +import com.artemchep.keyguard.ui.PasswordFlatTextField +import com.artemchep.keyguard.ui.focus.FocusRequester2 +import com.artemchep.keyguard.ui.focus.focusRequester2 +import com.artemchep.keyguard.ui.skeleton.SkeletonButton +import com.artemchep.keyguard.ui.skeleton.SkeletonTextField +import com.artemchep.keyguard.ui.theme.Dimens +import com.artemchep.keyguard.ui.theme.combineAlpha +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.delay +import org.kodein.di.compose.localDI +import org.kodein.di.direct +import org.kodein.di.instance + +val unlockScreenTitlePadding = 48.dp +val unlockScreenActionPadding = 8.dp + +@Composable +fun UnlockScreen( + /** + * Unlocks a vault with the key derived from a + * given password. + */ + unlockVaultByMasterPassword: VaultState.Unlock.WithPassword, + unlockVaultByBiometric: VaultState.Unlock.WithBiometric?, + lockReason: String?, +) { + val loadableState = unlockScreenState( + clearData = localDI().direct.instance(), + unlockVaultByMasterPassword = unlockVaultByMasterPassword, + unlockVaultByBiometric = unlockVaultByBiometric, + lockReason = lockReason, + ) + loadableState.fold( + ifLoading = { + UnlockScreenSkeleton() + }, + ifOk = { state -> + UnlockScreen(state) + }, + ) +} + +@Composable +private fun UnlockScreenSkeleton() { + OtherScaffold { + UnlockScreenContainer( + top = { + UnlockScreenTheVaultIsLockedTitle() + }, + center = { + SkeletonTextField( + modifier = Modifier + .fillMaxWidth(), + ) + }, + bottom = { + SkeletonButton( + modifier = Modifier + .fillMaxWidth(), + ) + }, + ) + } +} + +@OptIn(ExperimentalComposeUiApi::class) +@Composable +private fun UnlockScreen( + unlockState: UnlockState, +) { + val focusRequester = remember { + FocusRequester2() + } + + val updatedHasBiometric by rememberUpdatedState(unlockState.biometric != null) + LaunchedEffect(focusRequester) { + delay(200L) + // If we focus a password field and request the biometrics, + // then the keyboard pops-up after we have successfully used + // the biometrics to unlock. Looks super junky. + if (!updatedHasBiometric) { + focusRequester.requestFocus() + } + } + + BiometricPromptEffect(unlockState.sideEffects.showBiometricPromptFlow) + OtherScaffold( + actions = { + OptionsButton(actions = unlockState.actions) + }, + ) { + UnlockScreenContainer( + top = { + UnlockScreenTheVaultIsLockedTitle() + ExpandedIfNotEmpty( + valueOrNull = unlockState.lockReason, + ) { lockReason -> + Text( + modifier = Modifier + .padding(top = 16.dp), + textAlign = TextAlign.Center, + text = lockReason, + color = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + style = MaterialTheme.typography.bodyMedium, + ) + } + }, + center = { + val keyboardOnGo: (KeyboardActionScope.() -> Unit)? = + if (unlockState.unlockVaultByMasterPassword != null) { + // lambda + { + unlockState.unlockVaultByMasterPassword.invoke() + } + } else { + null + } + PasswordFlatTextField( + modifier = Modifier, + fieldModifier = Modifier + .focusRequester2(focusRequester) + .autofill( + value = unlockState.password.state.value, + autofillTypes = listOf( + AutofillType.Password, + ), + onFill = unlockState.password.onChange, + ), + testTag = "field:password", + value = unlockState.password, + keyboardOptions = KeyboardOptions( + imeAction = when { + keyboardOnGo != null -> ImeAction.Go + else -> ImeAction.Default + }, + ), + keyboardActions = KeyboardActions( + onGo = keyboardOnGo, + ), + ) + }, + bottom = { + val onUnlockButtonClick by rememberUpdatedState(unlockState.unlockVaultByMasterPassword) + Button( + modifier = Modifier + .testTag("btn:go") + .fillMaxWidth(), + enabled = unlockState.unlockVaultByMasterPassword != null, + onClick = { + onUnlockButtonClick?.invoke() + }, + ) { + Crossfade( + modifier = Modifier + .size(24.dp), + targetState = unlockState.isLoading, + ) { isLoading -> + if (isLoading) { + CircularProgressIndicator( + color = LocalContentColor.current, + ) + } else { + Icon( + imageVector = Icons.Outlined.LockOpen, + contentDescription = null, + ) + } + } + Spacer( + modifier = Modifier + .width(Dimens.buttonIconPadding), + ) + Text( + text = stringResource(Res.strings.unlock_button_unlock), + ) + } + val onBiometricButtonClick by rememberUpdatedState(unlockState.biometric?.onClick) + ExpandedIfNotEmpty( + valueOrNull = unlockState.biometric, + ) { b -> + ElevatedButton( + modifier = Modifier + .padding(top = 32.dp), + enabled = b.onClick != null, + onClick = { + onBiometricButtonClick?.invoke() + }, + contentPadding = PaddingValues(16.dp), + ) { + Icon( + imageVector = Icons.Outlined.Fingerprint, + contentDescription = null, + ) + } + } + }, + ) + } +} + +@Composable +private fun UnlockScreenTheVaultIsLockedTitle() { + Text( + textAlign = TextAlign.Center, + text = stringResource(Res.strings.unlock_header_text), + style = MaterialTheme.typography.bodyLarge, + ) +} + +@Composable +inline fun ColumnScope.UnlockScreenContainer( + top: @Composable () -> Unit, + center: @Composable () -> Unit, + bottom: @Composable () -> Unit, +) { + top() + Spacer(Modifier.height(unlockScreenTitlePadding)) + center() + Spacer(Modifier.height(unlockScreenActionPadding)) + bottom() +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/keyguard/unlock/UnlockState.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/keyguard/unlock/UnlockState.kt new file mode 100644 index 00000000..a36f612a --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/keyguard/unlock/UnlockState.kt @@ -0,0 +1,40 @@ +package com.artemchep.keyguard.feature.keyguard.unlock + +import androidx.compose.runtime.Immutable +import arrow.optics.optics +import com.artemchep.keyguard.common.model.PureBiometricAuthPrompt +import com.artemchep.keyguard.feature.auth.common.TextFieldModel2 +import com.artemchep.keyguard.ui.ContextItem +import kotlinx.collections.immutable.ImmutableList +import kotlinx.collections.immutable.persistentListOf +import kotlinx.coroutines.flow.Flow + +@Immutable +@optics +data class UnlockState( + val sideEffects: SideEffects, + val password: TextFieldModel2, + val biometric: Biometric? = null, + val lockReason: String? = null, + val isLoading: Boolean = false, + val actions: ImmutableList = persistentListOf(), + val unlockVaultByMasterPassword: (() -> Unit)? = null, +) { + companion object + + @Immutable + @optics + data class Biometric( + val onClick: (() -> Unit)? = null, + ) { + companion object + } + + @Immutable + @optics + data class SideEffects( + val showBiometricPromptFlow: Flow, + ) { + companion object + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/keyguard/unlock/UnlockStateProducer.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/keyguard/unlock/UnlockStateProducer.kt new file mode 100644 index 00000000..1734ba42 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/keyguard/unlock/UnlockStateProducer.kt @@ -0,0 +1,267 @@ +package com.artemchep.keyguard.feature.keyguard.unlock + +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Delete +import androidx.compose.runtime.Composable +import arrow.core.Either +import arrow.core.andThen +import arrow.core.identity +import arrow.core.partially1 +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.attempt +import com.artemchep.keyguard.common.io.effectTap +import com.artemchep.keyguard.common.io.ioRaise +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.model.BiometricAuthException +import com.artemchep.keyguard.common.model.BiometricAuthPrompt +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.model.VaultState +import com.artemchep.keyguard.common.usecase.ClearData +import com.artemchep.keyguard.common.util.flow.EventFlow +import com.artemchep.keyguard.feature.auth.common.TextFieldModel2 +import com.artemchep.keyguard.feature.auth.common.Validated +import com.artemchep.keyguard.feature.auth.common.util.validatedTitle +import com.artemchep.keyguard.feature.loading.LoadingTask +import com.artemchep.keyguard.feature.localization.TextHolder +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.feature.navigation.state.produceScreenState +import com.artemchep.keyguard.platform.LeCipher +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItemAction +import kotlinx.collections.immutable.persistentListOf +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.onStart +import kotlinx.coroutines.flow.shareIn +import kotlinx.coroutines.withContext + +private val DEFAULT_PASSWORD = "" + +@Composable +fun unlockScreenState( + clearData: ClearData, + unlockVaultByMasterPassword: VaultState.Unlock.WithPassword, + unlockVaultByBiometric: VaultState.Unlock.WithBiometric?, + lockReason: String? = null, +): Loadable = produceScreenState>( + key = "unlock", + initial = Loadable.Loading, + args = arrayOf( + unlockVaultByMasterPassword, + unlockVaultByBiometric, + ), +) { + val executor = screenExecutor() + + val unlockVaultByMasterPasswordFn = UnlockVaultWithPassword( + executor = executor, + options = unlockVaultByMasterPassword, + ) + val unlockVaultWithBiometricFn = unlockVaultByBiometric + ?.let { + UnlockVaultWithBiometric( + executor = executor, + options = it, + ) + } + + val biometricPromptSink = EventFlow() + val biometricPromptFlow = biometricPromptSink + .onStart { + if (unlockVaultWithBiometricFn != null) { + val prompt = withContext(Dispatchers.Main) { + createPromptOrNull( + executor = executor, + fn = unlockVaultWithBiometricFn, + ) + } + if (prompt != null) { + emit(prompt) + } + } + } + .shareIn(screenScope, SharingStarted.WhileSubscribed(5000L)) + + val passwordSink = mutablePersistedFlow("password") { DEFAULT_PASSWORD } + val passwordState = mutableComposeState(passwordSink) + + val actions = persistentListOf( + FlatItemAction( + icon = Icons.Outlined.Delete, + title = translate(Res.strings.pref_item_erase_data_title), + text = translate(Res.strings.pref_item_erase_data_text), + onClick = { + clearData() + .effectTap { + val exitIntent = NavigationIntent.Exit + navigate(exitIntent) + } + .attempt() + .launchIn(GlobalScope) + }, + ), + ) + + val biometricPrecomputed = if (unlockVaultWithBiometricFn != null) { + val requestBiometricAuthPrompt = biometricPromptSink::emit + .andThen { true } + BiometricStatePrecomputed( + disabled = createBiometricState( + executor = executor, + fn = unlockVaultWithBiometricFn, + clickable = false, + requestBiometricAuthPrompt = requestBiometricAuthPrompt, + ), + enabled = createBiometricState( + executor = executor, + fn = unlockVaultWithBiometricFn, + clickable = true, + requestBiometricAuthPrompt = requestBiometricAuthPrompt, + ), + ) + } else { + null + } + combine( + passwordSink + .validatedTitle(this), + executor.isExecutingFlow, + ) { validatedPassword, taskExecuting -> + val error = (validatedPassword as? Validated.Failure)?.error + val canCreateVault = error == null && !taskExecuting + val state = UnlockState( + lockReason = lockReason, + password = TextFieldModel2.of( + state = passwordState, + validated = validatedPassword, + ), + biometric = if (taskExecuting) { + biometricPrecomputed?.disabled + } else { + biometricPrecomputed?.enabled + }, + sideEffects = UnlockState.SideEffects( + showBiometricPromptFlow = biometricPromptFlow, + ), + isLoading = taskExecuting, + unlockVaultByMasterPassword = if (canCreateVault) { + unlockVaultByMasterPasswordFn.partially1(validatedPassword.model) + } else { + null + }, + actions = actions, + ) + Loadable.Ok(state) + } +} + +private class BiometricStatePrecomputed( + val disabled: UnlockState.Biometric, + val enabled: UnlockState.Biometric, +) + +private fun createBiometricState( + executor: LoadingTask, + fn: UnlockVaultWithBiometric, + clickable: Boolean, + requestBiometricAuthPrompt: (BiometricAuthPrompt) -> Boolean, +) = UnlockState.Biometric( + onClick = if (!clickable) { + null + } else { + val prompt by lazy { + createPromptOrNull(executor, fn) + } + + // An action should trigger the biometric prompt upon + // execution. + fun() { + val p = prompt ?: return + requestBiometricAuthPrompt(p) + } + }, +) + +private fun createPromptOrNull( + executor: LoadingTask, + fn: UnlockVaultWithBiometric, +): BiometricAuthPrompt? = run { + val cipher = fn.getCipher() + .fold( + ifLeft = { e -> + val fakeIo = ioRaise(e) + executor.execute(fakeIo) + return@run null + }, + ifRight = ::identity, + ) + BiometricAuthPrompt( + title = TextHolder.Res(Res.strings.unlock_biometric_auth_confirm_title), + text = TextHolder.Res(Res.strings.unlock_biometric_auth_confirm_text), + cipher = cipher, + onComplete = { result -> + result.fold( + ifLeft = { exception -> + when (exception.code) { + BiometricAuthException.ERROR_CANCELED, + BiometricAuthException.ERROR_USER_CANCELED, + BiometricAuthException.ERROR_NEGATIVE_BUTTON, + -> return@fold + } + + val io = ioRaise(exception) + executor.execute(io) + }, + ifRight = { + fn.invoke() + }, + ) + }, + ) +} + +private class UnlockVaultWithPassword( + private val executor: LoadingTask, + private val getCreateIo: (String) -> IO, +) : (String) -> Unit { + // Create from vault state options + constructor( + executor: LoadingTask, + options: VaultState.Unlock.WithPassword, + ) : this( + executor = executor, + getCreateIo = options.getCreateIo, + ) + + override fun invoke(password: String) { + val io = getCreateIo(password) + executor.execute(io, password) + } +} + +private class UnlockVaultWithBiometric( + private val executor: LoadingTask, + /** + * A getter for the cipher to pass to the biometric + * authentication. + */ + val getCipher: () -> Either, + private val getCreateIo: () -> IO, +) : () -> Unit { + // Create from vault state options + constructor( + executor: LoadingTask, + options: VaultState.Unlock.WithBiometric, + ) : this( + executor = executor, + getCipher = options.getCipher, + getCreateIo = options.getCreateIo, + ) + + override fun invoke() { + val io = getCreateIo() + executor.execute(io) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/largetype/LargeTypeRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/largetype/LargeTypeRoute.kt new file mode 100644 index 00000000..e1d63e5a --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/largetype/LargeTypeRoute.kt @@ -0,0 +1,102 @@ +package com.artemchep.keyguard.feature.largetype + +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Lock +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.navigation.DialogRoute +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.feature.navigation.state.TranslatorScope +import com.artemchep.keyguard.platform.CurrentPlatform +import com.artemchep.keyguard.platform.Platform +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItemAction +import com.artemchep.keyguard.ui.icons.KeyguardLargeType +import com.artemchep.keyguard.ui.icons.icon +import com.artemchep.keyguard.ui.icons.iconSmall + +data class LargeTypeRoute( + val args: Args, +) : DialogRoute { + companion object { + fun showInLargeTypeActionOrNull( + translator: TranslatorScope, + text: String, + colorize: Boolean = false, + navigate: (NavigationIntent) -> Unit, + ) = if (text.length > 128) { + null + } else { + showInLargeTypeAction( + translator = translator, + text = text, + colorize = colorize, + navigate = navigate, + ) + } + + fun showInLargeTypeAction( + translator: TranslatorScope, + text: String, + colorize: Boolean = false, + navigate: (NavigationIntent) -> Unit, + ) = FlatItemAction( + leading = icon(Icons.Outlined.KeyguardLargeType), + title = translator.translate(Res.strings.largetype_action_show_in_large_type_title), + onClick = { + val route = LargeTypeRoute( + args = Args( + text = text, + colorize = colorize, + ), + ) + val intent = NavigationIntent.NavigateToRoute(route) + navigate(intent) + }, + ) + + fun showInLargeTypeActionAndLockOrNull( + translator: TranslatorScope, + text: String, + colorize: Boolean = false, + navigate: (NavigationIntent) -> Unit, + ) = if (text.length > 128 || CurrentPlatform !is Platform.Mobile) { + null + } else { + showInLargeTypeAndLockAction( + translator = translator, + text = text, + colorize = colorize, + navigate = navigate, + ) + } + + fun showInLargeTypeAndLockAction( + translator: TranslatorScope, + text: String, + colorize: Boolean = false, + navigate: (NavigationIntent) -> Unit, + ) = FlatItemAction( + leading = iconSmall(Icons.Outlined.KeyguardLargeType, Icons.Filled.Lock), + title = translator.translate(Res.strings.largetype_action_show_in_large_type_and_lock_title), + onClick = { + val intent = NavigationIntent.NavigateToLargeType( + text = text, + colorize = colorize, + ) + navigate(intent) + }, + ) + } + + data class Args( + val text: String, + val colorize: Boolean, + ) + + @Composable + override fun Content() { + LargeTypeScreen( + args = args, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/largetype/LargeTypeScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/largetype/LargeTypeScreen.kt new file mode 100644 index 00000000..ddae41ee --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/largetype/LargeTypeScreen.kt @@ -0,0 +1,200 @@ +package com.artemchep.keyguard.feature.largetype + +import androidx.compose.animation.animateColorAsState +import androidx.compose.animation.core.animateIntAsState +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ExperimentalLayoutApi +import androidx.compose.foundation.layout.FlowRow +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material.icons.Icons +import androidx.compose.material3.LocalAbsoluteTonalElevation +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.material3.surfaceColorAtElevation +import androidx.compose.runtime.Composable +import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.draw.drawBehind +import androidx.compose.ui.text.SpanStyle +import androidx.compose.ui.text.buildAnnotatedString +import androidx.compose.ui.text.withStyle +import androidx.compose.ui.unit.coerceAtLeast +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.model.getOrNull +import com.artemchep.keyguard.feature.dialog.Dialog +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.ExpandedIfNotEmpty +import com.artemchep.keyguard.ui.KeepScreenOnEffect +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.colorizePasswordDigitColor +import com.artemchep.keyguard.ui.colorizePasswordSymbolColor +import com.artemchep.keyguard.ui.icons.KeyguardLargeType +import com.artemchep.keyguard.ui.icons.icon +import com.artemchep.keyguard.ui.theme.Dimens +import com.artemchep.keyguard.ui.theme.combineAlpha +import com.artemchep.keyguard.ui.theme.monoFontFamily +import com.artemchep.keyguard.ui.theme.selectedContainer +import dev.icerock.moko.resources.compose.stringResource + +@Composable +fun LargeTypeScreen( + args: LargeTypeRoute.Args, +) { + val loadableState = produceLargeTypeScreenState(args) + LargeTypeDialog( + loadableState = loadableState, + ) +} + +@OptIn(ExperimentalLayoutApi::class) +@Composable +private fun LargeTypeDialog( + loadableState: Loadable, +) { + KeepScreenOnEffect() + + Dialog( + icon = icon(Icons.Outlined.KeyguardLargeType), + title = { + Text(stringResource(Res.strings.largetype_title)) + }, + content = { + val state = loadableState.getOrNull() + if (state != null) { + LargeTypeContent( + state = state, + ) + } + }, + actions = { + val updatedOnClose by rememberUpdatedState(loadableState.getOrNull()?.onClose) + TextButton( + enabled = updatedOnClose != null, + onClick = { + updatedOnClose?.invoke() + }, + ) { + Text(stringResource(Res.strings.close)) + } + }, + ) +} + +@OptIn(ExperimentalLayoutApi::class) +@Composable +fun LargeTypeContent( + state: LargeTypeState, +) { + Column( + modifier = Modifier + .fillMaxWidth(), + ) { + val elevation = LocalAbsoluteTonalElevation.current + val indexState = animateIntAsState(state.index) + FlowRow( + modifier = Modifier + .padding( + horizontal = 16.dp, + ) + .align(Alignment.Start), + ) { + state.items.forEachIndexed { index, item -> + val contentModifier = kotlin.run { + val selected by remember(index, indexState) { + derivedStateOf { + indexState.value >= index + } + } + + val targetBackgroundColor = if (selected) { + MaterialTheme.colorScheme.selectedContainer + } else { + val isEven = index.rem(2) == 0 + val backgroundElevation = if (isEven) { + elevation.plus(8.dp) + } else { + elevation.minus(2.dp).coerceAtLeast(0.dp) + } + MaterialTheme.colorScheme + .surfaceColorAtElevation(backgroundElevation) + } + val backgroundColorState = animateColorAsState(targetBackgroundColor) + Modifier + .padding(2.dp) + .clip(RoundedCornerShape(4.dp)) + .drawBehind { + drawRect(backgroundColorState.value) + } + } + + val updatedOnClick by rememberUpdatedState(item.onClick) + Column( + modifier = Modifier + .then(contentModifier) + .clickable { + updatedOnClick?.invoke() + } + .padding( + horizontal = 6.dp, + vertical = 8.dp, + ), + horizontalAlignment = Alignment.CenterHorizontally, + ) { + val color = LocalContentColor.current + val text = remember(color, item) { + buildAnnotatedString { + val symbolColor = when { + !item.colorize || item.text.length > 1 -> color + item.text[0].isDigit() -> colorizePasswordDigitColor(color) + item.text[0].isLetter() -> color + else -> colorizePasswordSymbolColor(color) + } + withStyle( + style = SpanStyle( + color = symbolColor, + ), + ) { + append(item.text) + } + } + } + Text( + text = text, + fontFamily = monoFontFamily, + style = MaterialTheme.typography.headlineMedium, + ) + Text( + text = index.plus(1).toString(), + color = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + style = MaterialTheme.typography.labelSmall, + ) + } + } + } + ExpandedIfNotEmpty( + valueOrNull = state.text, + ) { text -> + Text( + modifier = Modifier + .padding(top = 8.dp) + .padding(horizontal = Dimens.horizontalPadding), + text = text, + color = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + style = MaterialTheme.typography.bodyMedium, + ) + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/largetype/LargeTypeState.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/largetype/LargeTypeState.kt new file mode 100644 index 00000000..e9fe06b9 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/largetype/LargeTypeState.kt @@ -0,0 +1,14 @@ +package com.artemchep.keyguard.feature.largetype + +data class LargeTypeState( + val text: String? = null, + val index: Int, + val items: List, + val onClose: (() -> Unit)? = null, +) { + data class Item( + val text: String, + val colorize: Boolean, + val onClick: (() -> Unit)? = null, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/largetype/LargeTypeStateProducer.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/largetype/LargeTypeStateProducer.kt new file mode 100644 index 00000000..e7c07c66 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/largetype/LargeTypeStateProducer.kt @@ -0,0 +1,59 @@ +package com.artemchep.keyguard.feature.largetype + +import androidx.compose.runtime.Composable +import arrow.core.partially1 +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.feature.navigation.state.navigatePopSelf +import com.artemchep.keyguard.feature.navigation.state.produceScreenState +import com.artemchep.keyguard.ui.asCodePointsSequence +import kotlinx.coroutines.flow.map + +@Composable +fun produceLargeTypeScreenState( + args: LargeTypeRoute.Args, +): Loadable = produceScreenState( + key = "largetype", + args = arrayOf( + args, + ), + initial = Loadable.Loading, +) { + val selectedPositionSink = mutablePersistedFlow("index") { + -1 + } + + fun onClose() { + navigatePopSelf() + } + + fun onClickCodePoint(index: Int) { + selectedPositionSink.value = index + } + + val text = if (args.text.any { it.isSurrogate() }) { + "Text contains composite Unicode symbols!" + } else { + null + } + + val items = args.text + .asCodePointsSequence() + .mapIndexed { index, codePoint -> + LargeTypeState.Item( + text = codePoint, + colorize = args.colorize, + onClick = ::onClickCodePoint.partially1(index), + ) + } + .toList() + selectedPositionSink + .map { index -> + val state = LargeTypeState( + text = text, + index = index, + items = items, + onClose = ::onClose, + ) + Loadable.Ok(state) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/license/LicenseRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/license/LicenseRoute.kt new file mode 100644 index 00000000..6802b37f --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/license/LicenseRoute.kt @@ -0,0 +1,11 @@ +package com.artemchep.keyguard.feature.license + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.navigation.Route + +object LicenseRoute : Route { + @Composable + override fun Content() { + LicenseScreen() + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/license/LicenseScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/license/LicenseScreen.kt new file mode 100644 index 00000000..febc07ed --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/license/LicenseScreen.kt @@ -0,0 +1,182 @@ +package com.artemchep.keyguard.feature.license + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.ExperimentalLayoutApi +import androidx.compose.foundation.layout.FlowRow +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.lazy.items +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.Modifier +import androidx.compose.ui.input.nestedscroll.nestedScroll +import androidx.compose.ui.text.font.FontFamily +import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.service.license.model.License +import com.artemchep.keyguard.feature.EmptySearchView +import com.artemchep.keyguard.feature.navigation.LocalNavigationController +import com.artemchep.keyguard.feature.navigation.NavigationIcon +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.DisabledEmphasisAlpha +import com.artemchep.keyguard.ui.FlatItemLayout +import com.artemchep.keyguard.ui.FlatItemTextContent +import com.artemchep.keyguard.ui.FlatTextFieldBadge +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.ScaffoldLazyColumn +import com.artemchep.keyguard.ui.icons.ChevronIcon +import com.artemchep.keyguard.ui.skeleton.SkeletonItem +import com.artemchep.keyguard.ui.theme.combineAlpha +import com.artemchep.keyguard.ui.theme.infoContainer +import com.artemchep.keyguard.ui.toolbar.LargeToolbar +import dev.icerock.moko.resources.compose.stringResource + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun LicenseScreen() { + val loadableState = produceLicenseState() + + val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior() + ScaffoldLazyColumn( + modifier = Modifier + .nestedScroll(scrollBehavior.nestedScrollConnection), + topAppBarScrollBehavior = scrollBehavior, + topBar = { + LargeToolbar( + title = { + Text( + text = stringResource(Res.strings.settings_open_source_licenses_header_title), + ) + }, + navigationIcon = { + NavigationIcon() + }, + scrollBehavior = scrollBehavior, + ) + }, + ) { + when (loadableState) { + is Loadable.Ok -> { + val list = loadableState.value.content.items + if (list.isEmpty()) { + item("empty") { + NoItemsPlaceholder() + } + } + + items(list) { item -> + LicenseItem( + item = item, + ) + } + } + + is Loadable.Loading -> { + item { + repeat(3) { + SkeletonItem() + } + } + } + } + } +} + +@Composable +private fun NoItemsPlaceholder( + modifier: Modifier = Modifier, +) { + EmptySearchView( + modifier = modifier, + ) +} + +@OptIn(ExperimentalLayoutApi::class) +@Composable +private fun LicenseItem( + modifier: Modifier = Modifier, + item: License, +) { + val navigationController by rememberUpdatedState(LocalNavigationController.current) + val scmUrl by rememberUpdatedState(item.scm?.url) + FlatItemLayout( + modifier = modifier, + content = { + FlatItemTextContent( + title = { + Text( + text = item.name + ?: stringResource(Res.strings.empty_value), + color = LocalContentColor.current + .let { color -> + // If the name doesn't exist, then show it with + // a different accent. + if (item.name != null) { + color + } else { + color.combineAlpha(DisabledEmphasisAlpha) + } + }, + ) + }, + ) + val dependency = + "${item.groupId}:${item.artifactId}:${item.version}" + Text( + text = dependency, + maxLines = 2, + overflow = TextOverflow.Ellipsis, + fontFamily = FontFamily.Monospace, + style = MaterialTheme.typography.labelSmall, + color = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + ) + Spacer( + modifier = Modifier + .height(8.dp), + ) + FlowRow( + verticalArrangement = Arrangement.spacedBy(8.dp), + horizontalArrangement = Arrangement.spacedBy(8.dp), + ) { + item.spdxLicenses.forEach { license -> + FlatTextFieldBadge( + backgroundColor = MaterialTheme.colorScheme.infoContainer, + text = license.name, + ) + } + } + }, + trailing = if (scmUrl != null) { + // composable + { + ChevronIcon() + } + } else { + null + }, + enabled = true, + onClick = if (scmUrl != null) { + // lambda + { + val url = scmUrl + if (url != null) { + val intent = NavigationIntent.NavigateToBrowser( + url = url, + ) + navigationController.queue(intent) + } + } + } else { + null + }, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/license/LicenseState.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/license/LicenseState.kt new file mode 100644 index 00000000..c85c8c25 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/license/LicenseState.kt @@ -0,0 +1,14 @@ +package com.artemchep.keyguard.feature.license + +import androidx.compose.runtime.Immutable +import com.artemchep.keyguard.common.service.license.model.License + +@Immutable +data class LicenseState( + val content: Content, +) { + @Immutable + data class Content( + val items: List, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/license/LicenseStateProducer.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/license/LicenseStateProducer.kt new file mode 100644 index 00000000..31308051 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/license/LicenseStateProducer.kt @@ -0,0 +1,49 @@ +package com.artemchep.keyguard.feature.license + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.common.io.attempt +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.service.license.LicenseService +import com.artemchep.keyguard.feature.navigation.state.produceScreenState +import kotlinx.coroutines.flow.flowOf +import org.kodein.di.compose.localDI +import org.kodein.di.direct +import org.kodein.di.instance + +@Composable +fun produceLicenseState( +) = with(localDI().direct) { + produceLicenseState( + licenseService = instance(), + ) +} + +@Composable +fun produceLicenseState( + licenseService: LicenseService, +): Loadable = produceScreenState( + key = "open_source_licenses", + initial = Loadable.Loading, + args = arrayOf( + licenseService, + ), +) { + val request = licenseService.get() + .attempt() + .bind() + request.isLeft { + it.printStackTrace() + true + } + + val content = LicenseState.Content( + items = request + .getOrNull() + .orEmpty(), + ) + val state = LicenseState( + content = content, + ) + flowOf(Loadable.Ok(state)) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/loading/LoadingScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/loading/LoadingScreen.kt new file mode 100644 index 00000000..c6eb662c --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/loading/LoadingScreen.kt @@ -0,0 +1,27 @@ +package com.artemchep.keyguard.feature.loading + +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp + +@Composable +fun LoadingScreen() { + LoadingScreenContent() +} + +@Composable +private fun LoadingScreenContent() { + Box( + modifier = Modifier + .padding(16.dp) + .fillMaxSize(), + contentAlignment = Alignment.Center, + ) { + CircularProgressIndicator() + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/loading/LoadingTask.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/loading/LoadingTask.kt new file mode 100644 index 00000000..9ef8d977 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/loading/LoadingTask.kt @@ -0,0 +1,80 @@ +package com.artemchep.keyguard.feature.loading + +import arrow.core.Either +import com.artemchep.keyguard.common.exception.Readable +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.attempt +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.util.flow.EventFlow +import com.artemchep.keyguard.feature.navigation.state.TranslatorScope +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.launch + +class LoadingTask( + private val translator: TranslatorScope, + private val scope: CoroutineScope, + /** + * Exception handler that's responsible for parsing the + * error messages as user-readable messages. + */ + private val exceptionHandler: (Throwable) -> String = { e -> + getErrorReadableMessage(e, translator) + }, +) { + private val isWorkingSink = MutableStateFlow(false) + + private val errorSink = EventFlow() + + val isExecutingFlow get() = isWorkingSink + + val errorFlow: Flow = errorSink.map { it.text } + + data class Failure( + val tag: String?, + val text: String, + ) + + /** + * Executes given task if the manager is + * not working, otherwise skips it. + */ + fun execute( + io: IO<*>, + tag: String? = null, + ) { + scope.launch { + if (isWorkingSink.value) { + return@launch + } + isWorkingSink.value = true + try { + val result = io.attempt().bind() + if (result is Either.Left) { + val message = Failure( + tag = tag, + text = exceptionHandler(result.value), + ) + result.value.printStackTrace() + errorSink.emit(message) + } else { + // Normally executing a task navigates the user somewhere. We + // artificially slow down the execution of the task, so the app state + // changes before the user is able to interact with the button again. + delay(60L) + } + } finally { + isWorkingSink.value = false + } + } + } +} + +fun getErrorReadableMessage(e: Throwable, translator: TranslatorScope) = + when (e) { + is Readable -> translator.translate(e.title) + else -> e.message.orEmpty() + } diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/localization/TextHolder.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/localization/TextHolder.kt new file mode 100644 index 00000000..810800f3 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/localization/TextHolder.kt @@ -0,0 +1,21 @@ +package com.artemchep.keyguard.feature.localization + +import androidx.compose.runtime.Composable +import dev.icerock.moko.resources.StringResource +import dev.icerock.moko.resources.compose.stringResource + +sealed interface TextHolder { + data class Value( + val data: String, + ) : TextHolder + + data class Res( + val data: StringResource, + ) : TextHolder +} + +@Composable +fun textResource(text: TextHolder): String = when (text) { + is TextHolder.Value -> text.data + is TextHolder.Res -> stringResource(text.data) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/localization/textResource.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/localization/textResource.kt new file mode 100644 index 00000000..c2f7715d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/localization/textResource.kt @@ -0,0 +1,15 @@ +package com.artemchep.keyguard.feature.localization + +import com.artemchep.keyguard.platform.LeContext +import dev.icerock.moko.resources.StringResource + +expect fun textResource( + res: StringResource, + context: LeContext, +): String + +expect fun textResource( + res: StringResource, + context: LeContext, + vararg args: Any, +): String diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/N.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/N.kt new file mode 100644 index 00000000..8a85dd87 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/N.kt @@ -0,0 +1,8 @@ +package com.artemchep.keyguard.feature.navigation + +object N { + /** generic tag, so you can find all the navigation logs */ + const val TAG = "nav" + + fun tag(tag: String) = "$TAG:$tag" +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/Navigation.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/Navigation.kt new file mode 100644 index 00000000..7727736d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/Navigation.kt @@ -0,0 +1,66 @@ +package com.artemchep.keyguard.feature.navigation + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.Stable +import androidx.compose.runtime.staticCompositionLocalOf + +internal val LocalBackHost = staticCompositionLocalOf { + false +} + +internal val LocalRoute = staticCompositionLocalOf { + throw IllegalStateException("Home layout must be initialized!") +} + +@Stable +interface RouteForResult { + @Composable + fun Content(transmitter: RouteResultTransmitter) +} + +@Stable +interface DialogRouteForResult : RouteForResult + +fun registerRouteResultReceiver( + route: RouteForResult, + block: (T) -> Unit, +): Route { + val transmitter: RouteResultTransmitter = object : RouteResultTransmitter { + override fun invoke(unit: T) { + block(unit) + } + } + return object : Route { + @Composable + override fun Content() { + route.Content( + transmitter = transmitter, + ) + } + } +} + +fun registerRouteResultReceiver( + route: DialogRouteForResult, + block: (T) -> Unit, +): DialogRoute { + val transmitter: RouteResultTransmitter = object : RouteResultTransmitter { + override fun invoke(unit: T) { + block(unit) + } + } + return object : DialogRoute { + @Composable + override fun Content() { + route.Content( + transmitter = transmitter, + ) + } + } +} + +/** + * A callback to pass the result back + * to a caller. + */ +interface RouteResultTransmitter : (T) -> Unit diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/NavigationAnimation.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/NavigationAnimation.kt new file mode 100644 index 00000000..aa15ff28 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/NavigationAnimation.kt @@ -0,0 +1,115 @@ +package com.artemchep.keyguard.feature.navigation + +import androidx.compose.animation.ContentTransform +import androidx.compose.animation.core.CubicBezierEasing +import androidx.compose.animation.core.Easing +import androidx.compose.animation.core.snap +import androidx.compose.animation.core.tween +import androidx.compose.animation.fadeIn +import androidx.compose.animation.fadeOut +import androidx.compose.animation.slideInHorizontally +import androidx.compose.animation.slideOutHorizontally +import androidx.compose.animation.with +import com.artemchep.keyguard.common.model.NavAnimation + +const val ahForward = 300 +const val ahBack = 280 + +const val ah2 = 0.5f + +private fun twoot() = tween( + durationMillis = ahForward, +// easing = FastOutSlowInEasing, +) + +/** + * Incoming elements are animated using deceleration easing, which starts a transition + * at peak velocity (the fastest point of an element’s movement) and ends at rest. + * + * This is equivalent to the Android `LinearOutSlowInInterpolator` + */ +private val LinearOutSlowInEasing2: Easing = CubicBezierEasing(0.6f, 0.0f, 0.4f, 1.0f) + +/** + * Elements exiting a screen use acceleration easing, where they start at rest and + * end at peak velocity. + * + * This is equivalent to the Android `FastOutLinearInInterpolator` + */ +private val FastOutLinearInEasing2: Easing = CubicBezierEasing(0.6f, 0.0f, 0.4f, 1.0f) + +private fun twaat( + durationMillis: Int, +) = tween( + durationMillis = durationMillis, + easing = LinearOutSlowInEasing2, +) + +private fun twuut( + durationMillis: Int, +) = tween( + durationMillis = durationMillis, + easing = FastOutLinearInEasing2, +) + +object NavigationAnimation + +enum class NavigationAnimationType { + SWITCH, + GO_FORWARD, + GO_BACKWARD, +} + +fun NavigationAnimation.transform( + scale: Float, + animationType: NavAnimation, + transitionType: NavigationAnimationType, +): ContentTransform = when (animationType) { + NavAnimation.DISABLED -> transformImmediate() + NavAnimation.CROSSFADE -> transformSwitchContext(scale) + NavAnimation.DYNAMIC -> when (transitionType) { + NavigationAnimationType.SWITCH -> transformSwitchContext(scale) + NavigationAnimationType.GO_FORWARD -> transformGoForward(scale) + NavigationAnimationType.GO_BACKWARD -> transformGoBack(scale) + } +} + +fun NavigationAnimation.transformImmediate(): ContentTransform = + fadeIn( + animationSpec = snap(), + ) with fadeOut( + animationSpec = snap(), + ) + +fun NavigationAnimation.transformSwitchContext(scale: Float): ContentTransform = + fadeIn( + animationSpec = tween(ahForward.times(scale).toInt()), + ) with fadeOut( + animationSpec = tween(ahForward.times(scale).toInt()), + ) + +fun NavigationAnimation.transformGoForward(scale: Float): ContentTransform = + slideInHorizontally( + animationSpec = twaat(ahForward.times(scale).toInt()), + initialOffsetX = { fullWidth -> fullWidth / 8 }, + ) + fadeIn( + animationSpec = twaat(ahBack.times(scale).toInt()), + ) with slideOutHorizontally( + animationSpec = twuut(ahForward.times(scale).toInt()), + targetOffsetX = { fullWidth -> -fullWidth / 12 }, + ) + fadeOut( + animationSpec = twuut(ahForward.times(scale).toInt() / 2), + ) + +fun NavigationAnimation.transformGoBack(scale: Float): ContentTransform = + slideInHorizontally( + animationSpec = twaat(ahBack.times(scale).toInt()), + initialOffsetX = { fullWidth -> -fullWidth / 12 }, + ) + fadeIn( + animationSpec = twaat(ahBack.times(scale).toInt()), + ) with slideOutHorizontally( + animationSpec = twuut(ahBack.times(scale).toInt()), + targetOffsetX = { fullWidth -> fullWidth / 8 }, + ) + fadeOut( + animationSpec = twuut(ahForward.times(scale).toInt() / 2), + ) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/NavigationController.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/NavigationController.kt new file mode 100644 index 00000000..91cf0c30 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/NavigationController.kt @@ -0,0 +1,70 @@ +package com.artemchep.keyguard.feature.navigation + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.remember +import androidx.compose.runtime.staticCompositionLocalOf +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.flowOf + +private const val TAG = "Controller" + +@Composable +fun NavigationController( + scope: CoroutineScope? = null, + canPop: Flow, + handle: (NavigationIntent) -> NavigationIntent?, + content: @Composable (NavigationController) -> Unit, +) { + val finalTag = N.tag(TAG) + + val parent = LocalNavigationController.current + val controller = remember(canPop, handle, parent) { + val combinedCanPop = combine( + canPop, + parent.canPop(), + ) { a, b -> a || b } + val handler = object : NavigationController { + override val scope: CoroutineScope = kotlin.run { + scope ?: parent.scope + } + + override fun queue(intent: NavigationIntent) { + val newIntent = handle(intent) + ?: return + parent.queue(newIntent) + } + + override fun canPop(): Flow = combinedCanPop + } + handler + } + CompositionLocalProvider( + LocalNavigationController provides controller, + ) { + content(controller) + } +} + +interface NavigationController { + val scope: CoroutineScope + + fun queue(intent: NavigationIntent) + + fun canPop(): Flow +} + +internal val LocalNavigationController = staticCompositionLocalOf { + object : NavigationController { + override val scope: CoroutineScope get() = GlobalScope + + override fun queue(intent: NavigationIntent) { + // Do nothing. + } + + override fun canPop(): Flow = flowOf(false) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/NavigationEntry.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/NavigationEntry.kt new file mode 100644 index 00000000..021692c3 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/NavigationEntry.kt @@ -0,0 +1,67 @@ +package com.artemchep.keyguard.feature.navigation + +import androidx.compose.runtime.staticCompositionLocalOf +import com.artemchep.keyguard.feature.navigation.state.FlowHolderViewModel +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.Job +import kotlinx.coroutines.NonCancellable +import kotlinx.coroutines.launch +import kotlinx.coroutines.plus +import kotlinx.coroutines.suspendCancellableCoroutine +import kotlinx.coroutines.withContext + +interface NavigationEntry { + companion object { + fun new() { + } + } + + val id: String + val type: String + + val route: Route + val scope: CoroutineScope + val vm: FlowHolderViewModel + + fun destroy() +} + +internal val LocalNavigationEntry = staticCompositionLocalOf { + throw IllegalStateException("Home layout must be initialized!") +} + +data class NavigationEntryImpl( + private val source: String, + private val parent: CoroutineScope, + override val id: String, + override val route: Route, +) : NavigationEntry { + override val type: String = route::class.simpleName.orEmpty() + + private val job = Job() + + override val scope = parent + job + + override val vm: FlowHolderViewModel = FlowHolderViewModel(source, scope) + + init { + require('/' !in id) + require('/' !in type) + + parent.launch { + try { + suspendCancellableCoroutine { } + } finally { + withContext(NonCancellable + Dispatchers.Main) { + destroy() + } + } + } + } + + override fun destroy() { + vm.destroy() + job.cancel() + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/NavigationEntryProvider.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/NavigationEntryProvider.kt new file mode 100644 index 00000000..a4b74d28 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/NavigationEntryProvider.kt @@ -0,0 +1,33 @@ +package com.artemchep.keyguard.feature.navigation + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.DisposableEffect +import androidx.compose.runtime.remember + +/** + * A definition of the distinct application component that + * makes sense when rendered in a separate window. + */ +@Composable +fun NavigationNode( + id: String, + route: Route, +) { + val parentScope = LocalNavigationController.current.scope + val entry = remember(id, route) { + NavigationEntryImpl( + source = "NavigationNode", + id = id, + parent = parentScope, + route = route, + ) + } + DisposableEffect(entry) { + onDispose { + entry.destroy() + } + } + NavigationNode( + entry = entry, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/NavigationIntent.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/NavigationIntent.kt new file mode 100644 index 00000000..c298e8a3 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/NavigationIntent.kt @@ -0,0 +1,102 @@ +package com.artemchep.keyguard.feature.navigation + +import kotlinx.collections.immutable.PersistentList + +sealed interface NavigationIntent { + data class Composite( + val list: List, + ) : NavigationIntent + + // navigate + + data class NavigateToPreview( + val uri: String, + val fileName: String? = null, + ) : NavigationIntent + + data class NavigateToPreviewInFileManager( + val uri: String, + val fileName: String? = null, + ) : NavigationIntent + + data class NavigateToSend( + val uri: String, + val fileName: String? = null, + ) : NavigationIntent + + data class NavigateToShare( + val text: String, + ) : NavigationIntent + + data class NavigateToLargeType( + val text: String, + val colorize: Boolean, + ) : NavigationIntent + + data class NavigateToApp( + val packageName: String, + ) : NavigationIntent + + data class NavigateToBrowser( + val url: String, + ) : NavigationIntent + + data class NavigateToPhone( + val phoneNumber: String, + ) : NavigationIntent + + data class NavigateToSms( + val phoneNumber: String, + ) : NavigationIntent + + data class NavigateToEmail( + val email: String, + val subject: String? = null, + val body: String? = null, + ) : NavigationIntent + + data class NavigateToMaps( + val address1: String? = null, + val address2: String? = null, + val address3: String? = null, + val city: String? = null, + val state: String? = null, + val postalCode: String? = null, + val country: String? = null, + ) : NavigationIntent + + data class NavigateToRoute( + val route: Route, + val launchMode: LaunchMode = LaunchMode.DEFAULT, + ) : NavigationIntent { + enum class LaunchMode { + DEFAULT, + SINGLE, + } + } + + data class NavigateToStack( + val stack: List, + ) : NavigationIntent + + data class SetRoute( + val route: Route, + ) : NavigationIntent + + // pop + + data object Exit : NavigationIntent + + data object Pop : NavigationIntent + + data class PopById( + val id: String, + val exclusive: Boolean = true, + ) : NavigationIntent + + // manual + + data class Manual( + val handle: PersistentList.((Route) -> NavigationEntry) -> PersistentList, + ) : NavigationIntent +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/NavigationIntentPackage.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/NavigationIntentPackage.kt new file mode 100644 index 00000000..6815ff84 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/NavigationIntentPackage.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.feature.navigation + +data class NavigationIntentPackage( + val intent: NavigationIntent, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/NavigationNode.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/NavigationNode.kt new file mode 100644 index 00000000..6e6ce620 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/NavigationNode.kt @@ -0,0 +1,270 @@ +package com.artemchep.keyguard.feature.navigation + +import androidx.compose.animation.AnimatedContent +import androidx.compose.animation.Crossfade +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material.Text +import androidx.compose.material3.MaterialTheme +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.Immutable +import androidx.compose.runtime.compositionLocalOf +import androidx.compose.runtime.getValue +import androidx.compose.runtime.key +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.Modifier +import androidx.compose.ui.platform.testTag +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.common.usecase.GetNavAnimation +import com.artemchep.keyguard.platform.LocalAnimationFactor +import kotlinx.collections.immutable.PersistentList +import kotlinx.collections.immutable.persistentListOf +import org.kodein.di.compose.rememberInstance + +/** + * A definition of the distinct application component that + * makes sense when rendered in a separate window. + */ +@Composable +fun NavigationNode( + entry: NavigationEntry, +) { + CompositionLocalProvider( + LocalNavigationNodeLogicalStack provides LocalNavigationNodeLogicalStack.current.add(entry), + ) { + NavigationRoute( + entry = entry, + ) + } +} + +@Immutable +private data class Foo( + val logicalStack: PersistentList, + val visualStack: PersistentList, + val entry: NavigationEntry?, +) { + companion object { + val empty = Foo( + logicalStack = persistentListOf(), + visualStack = persistentListOf(), + entry = null, + ) + } +} + +@Composable +fun NavigationNode( + entries: PersistentList, + offset: Int = 0, +) { + val getNavAnimation by rememberInstance() + + val newVisualEntries = remember(entries, offset) { + if (offset < 0 || offset >= entries.size) { + // If the offset is illegal then we just + // render empty stack. + return@remember persistentListOf() + } + entries.subList(offset, entries.size) + } + + val lastFullscreenEntryIndex = newVisualEntries.indexOfLast { it.route !is DialogRoute } + + val logicalStack = LocalNavigationNodeLogicalStack.current + val visualStack = LocalNavigationNodeVisualStack.current + + Box { + // + // Draw screen stack + // + + val prevFoo = remember { + mutableStateOf(null) + } + val oldFoo = remember { + mutableStateOf(null) + } + val foo = remember( + logicalStack, + visualStack, + entries, + newVisualEntries, + lastFullscreenEntryIndex, + ) { + // There are no screens in the stack. + if (lastFullscreenEntryIndex == -1) { + return@remember Foo.empty + } + + val newLogicalStack = kotlin.run { + val items = entries + .subList(fromIndex = 0, toIndex = lastFullscreenEntryIndex + 1 + offset) + logicalStack.addAll(items) + } + val newVisualStack = kotlin.run { + val items = newVisualEntries + .subList(fromIndex = 0, toIndex = lastFullscreenEntryIndex + 1) + visualStack.addAll(items) + } + Foo( + logicalStack = newLogicalStack, + visualStack = newVisualStack, + entry = newVisualStack.last(), + ) + } + remember(foo) { + prevFoo.value = oldFoo.value + oldFoo.value = foo + 1 + } + + val updatedAnimationScale by rememberUpdatedState(LocalAnimationFactor) + AnimatedContent( + targetState = foo, + transitionSpec = { + val animationType = getNavAnimation().value + val transitionType = kotlin.run { + if ( + this.targetState.visualStack.size == + this.initialState.visualStack.size + ) { + return@run NavigationAnimationType.SWITCH + } + + val isForward = when { + initialState.visualStack.size == 0 -> true + initialState.visualStack.size < targetState.visualStack.size -> true + + else -> false + } + if (isForward) { + NavigationAnimationType.GO_FORWARD + } else { + NavigationAnimationType.GO_BACKWARD + } + } + + NavigationAnimation.transform( + scale = updatedAnimationScale, + animationType = animationType, + transitionType = transitionType, + ) + }, + label = "", + ) { foo -> + val entry = foo.entry + key(entry?.id) { + if (entry != null) { + CompositionLocalProvider( + LocalNavigationNodeLogicalStack provides foo.logicalStack, + LocalNavigationNodeVisualStack provides foo.visualStack, + ) { + NavigationRoute( + entry = entry, + ) + } + } + } + } + + // + // Draw dialog stack + // + + val bar = remember( + logicalStack, + visualStack, + entries, + newVisualEntries, + lastFullscreenEntryIndex, + ) { + // There are no screens in the stack. + if ( + newVisualEntries.isEmpty() || + lastFullscreenEntryIndex == newVisualEntries.lastIndex + ) { + return@remember Foo.empty + } + + val newLogicalStack = logicalStack.addAll(entries) + val newVisualStack = kotlin.run { + val items = newVisualEntries + .subList( + fromIndex = lastFullscreenEntryIndex + 1, + toIndex = newVisualEntries.size, + ) + visualStack.addAll(items) + } + Foo( + logicalStack = newLogicalStack, + visualStack = newVisualStack, + entry = entries.last(), + ) + } + Crossfade( + targetState = bar, + ) { bar -> + val entry = bar.entry + key(entry?.id) { + if (entry != null) { + CompositionLocalProvider( + LocalNavigationNodeLogicalStack provides bar.logicalStack, + LocalNavigationNodeVisualStack provides bar.visualStack, + ) { + NavigationRoute( + entry = entry, + ) + } + } + } + } + } +} + +@Composable +private fun NavigationRoute( + entry: NavigationEntry, +) { + // A composable content must be able to fetch the + // route instance if it wants to. + CompositionLocalProvider( + LocalNavigationEntry provides entry, + LocalRoute provides entry.route, + ) { + key(entry.route) { + Box( + modifier = Modifier + .testTag("nav:${entry.id}"), + ) { + entry.route.Content() + } + } + } +} + +internal val LocalNavigationNodeLogicalStack = compositionLocalOf> { + persistentListOf() +} + +internal val LocalNavigationNodeVisualStack = compositionLocalOf> { + persistentListOf() +} + +@Composable +fun VisualStackText() { + val nav = LocalNavigationNodeVisualStack.current.joinToString { it.id } + Text( + modifier = Modifier + .fillMaxWidth() + .background(MaterialTheme.colorScheme.tertiaryContainer) + .padding(4.dp), + text = nav, + color = MaterialTheme.colorScheme.onTertiaryContainer, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/NavigationNodeCurrentStack.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/NavigationNodeCurrentStack.kt new file mode 100644 index 00000000..7de6ba6f --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/NavigationNodeCurrentStack.kt @@ -0,0 +1,18 @@ +package com.artemchep.keyguard.feature.navigation + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberUpdatedState + +@Composable +fun navigationNodeStack(): String { + val stack by rememberUpdatedState(LocalNavigationNodeLogicalStack.current) + val value by remember { + derivedStateOf { + stack.joinToString(separator = "/") { it.id } + } + } + return value +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/NavigationRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/NavigationRoute.kt new file mode 100644 index 00000000..1c866771 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/NavigationRoute.kt @@ -0,0 +1,13 @@ +package com.artemchep.keyguard.feature.navigation + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.Stable + +@Stable +interface Route { + @Composable + fun Content() +} + +@Stable +interface DialogRoute : Route diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/NavigationRouter.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/NavigationRouter.kt new file mode 100644 index 00000000..38b92e52 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/NavigationRouter.kt @@ -0,0 +1,212 @@ +package com.artemchep.keyguard.feature.navigation + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.DisposableEffect +import androidx.compose.runtime.compositionLocalOf +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.snapshotFlow +import kotlinx.collections.immutable.PersistentList +import kotlinx.collections.immutable.persistentListOf +import kotlinx.collections.immutable.toPersistentList +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.flow.map +import java.util.UUID + +@Composable +fun NavigationRouter( + id: String, + initial: Route, + content: @Composable (PersistentList) -> Unit, +) { + // Fid the top-level router and link the entry's lifecycle + // to it, so if the top level gets destroyed we also get + // destroyed. + val f = LocalNavigationNodeLogicalStack.current.last() + val parentScope = f.scope + val navStack = remember(id) { + val navEntry = NavigationEntryImpl( + source = "router root", + id = id, + parent = parentScope, + route = initial, + ) + NavigationStack(navEntry) + } + val canPop = remember(navStack) { + snapshotFlow { navStack.value } + .map { it.size > 1 } + } + NavigationController( + canPop = canPop, + handle = { intent -> + val backStack = navStack.value + val newBackStack = backStack + .exec( + intent = intent, + scope = parentScope, + ) + when { + newBackStack == null -> { + // The intent was not handled, pass it to the next + // navigation controller. + return@NavigationController intent + } + + newBackStack.isEmpty() -> { + NavigationIntent.Pop + } + + else -> { + navStack.value = newBackStack + // We have handled the navigation intent. + null + } + } + }, + ) { controller -> + val localBackStack = navStack.value + val globalBackStack = LocalNavigationNodeLogicalStack.current.addAll(localBackStack) + val backHandler = LocalNavigationBackHandler.current + + DisposableEffect( + controller, + globalBackStack, + backHandler, + ) { + val registration = backHandler.register(controller, globalBackStack) + onDispose { + registration() + } + } + + CompositionLocalProvider( + LocalNavigationRouter provides navStack, + ) { + content(localBackStack) + } + } +} + +class NavigationStack( + entry: NavigationEntry, +) { + private val _state = kotlin.run { + val initialState = persistentListOf(entry) + mutableStateOf(initialState) + } + + var value: PersistentList + get() = _state.value + set(value) { + val oldValue = _state.value + + val removedItems = mutableListOf() + oldValue.forEach { e -> + val exists = value.any { it === e } + if (!exists) { + removedItems += e + } + } + removedItems.forEach { + it.destroy() + } + _state.value = value + } +} + +private fun PersistentList.exec( + intent: NavigationIntent, + scope: CoroutineScope, +): PersistentList? = when (intent) { + is NavigationIntent.Composite -> run compose@{ + var backStack = this + for (subIntent in intent.list) { + val new = backStack.exec( + intent = subIntent, + scope = scope, + ) + backStack = new + ?: return@compose null + } + backStack + } + + is NavigationIntent.NavigateToRoute -> kotlin.run { + val backStack = when (intent.launchMode) { + NavigationIntent.NavigateToRoute.LaunchMode.DEFAULT -> this + NavigationIntent.NavigateToRoute.LaunchMode.SINGLE -> { + val clearedBackStack = removeAll { it.route::class == intent.route::class } + val existingEntry = lastOrNull { it.route == intent.route } + if (existingEntry != null) { + // Fast path if existing route matches the new route. + return@run clearedBackStack.add(existingEntry) + } + + clearedBackStack + } + } + + val r = intent.route + val e = NavigationEntryImpl( + source = "router", + id = UUID.randomUUID().toString(), + parent = scope, + route = r, + ) + backStack.add(e) + } + + is NavigationIntent.SetRoute -> { + val r = intent.route + val e = NavigationEntryImpl( + source = "router", + id = UUID.randomUUID().toString(), + parent = scope, + route = r, + ) + persistentListOf(e) + } + + is NavigationIntent.NavigateToStack -> intent.stack.toPersistentList() + is NavigationIntent.Pop -> { + if (size > 0) { + removeAt(size - 1) + } else { + null + } + } + + is NavigationIntent.PopById -> popById(intent.id, intent.exclusive) + is NavigationIntent.Manual -> { + val factory = fun(route: Route): NavigationEntry = + NavigationEntryImpl( + source = "router", + id = UUID.randomUUID().toString(), + parent = scope, + route = route, + ) + intent.handle(this, factory) + } + + else -> null +} + +fun PersistentList.popById( + id: String, + exclusive: Boolean, +) = kotlin.run { + val i = indexOfLast { it.id == id } + if (i >= 0) { + val offset = if (exclusive) 1 else 0 + subList(0, i + offset) + .toPersistentList() + } else { + null + } +} + +internal val LocalNavigationRouter = compositionLocalOf { + TODO() +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler.kt new file mode 100644 index 00000000..4f55f3a5 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/NavigationRouterBackHandler.kt @@ -0,0 +1,88 @@ +package com.artemchep.keyguard.feature.navigation + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.compositionLocalOf +import androidx.compose.runtime.remember +import kotlinx.collections.immutable.PersistentMap +import kotlinx.collections.immutable.persistentMapOf +import kotlinx.coroutines.flow.MutableStateFlow +import java.util.UUID + +/** + * A definition of the distinct application component that + * makes sense when rendered in a separate window. + */ +@Composable +fun NavigationRouterBackHandler( + sideEffect: @Composable (BackHandler) -> Unit, + content: @Composable () -> Unit, +) { + val handler = remember { + BackHandler() + } + sideEffect(handler) + + CompositionLocalProvider( + LocalNavigationBackHandler provides handler, + ) { + content() + } +} + +class BackHandler( + val eek: MutableStateFlow> = MutableStateFlow(persistentMapOf()), + val eek2: MutableStateFlow> = MutableStateFlow(persistentMapOf()), +) { + class Entry( + val controller: NavigationController, + val backStack: List, + ) + + class Entry2( + val onBack: () -> Unit, + val priority: Int, + ) + + fun register( + controller: NavigationController, + backStack: List, + ): () -> Unit { + val id = UUID.randomUUID().toString() + eek.value = eek.value.put( + key = id, + value = Entry( + controller = controller, + backStack = backStack, + ), + ) + return { + eek.value = eek.value.remove( + key = id, + ) + } + } + + fun register2( + onBack: () -> Unit, + priority: Int, + ): () -> Unit { + val id = UUID.randomUUID().toString() + eek2.value = eek2.value.put( + key = id, + value = Entry2( + onBack = onBack, + priority = priority, + ), + ) + return { + eek2.value = eek2.value.remove( + key = id, + ) + } + } +} + +val LocalNavigationBackHandler = compositionLocalOf { + throw IllegalStateException() +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/NavigationRouterBackIcon.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/NavigationRouterBackIcon.kt new file mode 100644 index 00000000..ed88015a --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/NavigationRouterBackIcon.kt @@ -0,0 +1,31 @@ +package com.artemchep.keyguard.feature.navigation + +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.ArrowBack +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.Modifier + +@Composable +fun NavigationIcon( + modifier: Modifier = Modifier, +) { + val visualStack = LocalNavigationNodeVisualStack.current + val backVisible = visualStack.size > 1 + if (backVisible) { + val navigationId by rememberUpdatedState(visualStack.last().id) + val controller by rememberUpdatedState(LocalNavigationController.current) + IconButton( + modifier = modifier, + onClick = { + val intent = NavigationIntent.PopById(navigationId, exclusive = false) + controller.queue(intent) + }, + ) { + Icon(Icons.Outlined.ArrowBack, null) + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/state/Copy.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/state/Copy.kt new file mode 100644 index 00000000..e527d6a8 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/state/Copy.kt @@ -0,0 +1,11 @@ +package com.artemchep.keyguard.feature.navigation.state + +import com.artemchep.keyguard.common.service.clipboard.ClipboardService +import com.artemchep.keyguard.common.usecase.CopyText + +fun RememberStateFlowScope.copy( + clipboardService: ClipboardService, +) = CopyText( + clipboardService = clipboardService, + onMessage = ::message, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/state/DiskHandle.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/state/DiskHandle.kt new file mode 100644 index 00000000..89dd8785 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/state/DiskHandle.kt @@ -0,0 +1,14 @@ +package com.artemchep.keyguard.feature.navigation.state + +import kotlinx.coroutines.flow.Flow + +/** + * @author Artem Chepurnyi + */ +interface DiskHandle { + val restoredState: Map + + fun link(key: String, flow: Flow) + + fun unlink(key: String) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/state/DiskHandleImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/state/DiskHandleImpl.kt new file mode 100644 index 00000000..2448b918 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/state/DiskHandleImpl.kt @@ -0,0 +1,98 @@ +package com.artemchep.keyguard.feature.navigation.state + +import arrow.core.Either +import com.artemchep.keyguard.common.io.attempt +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.io.toIO +import com.artemchep.keyguard.common.usecase.GetScreenState +import com.artemchep.keyguard.common.usecase.PutScreenState +import com.artemchep.keyguard.common.util.flow.combineToList +import com.artemchep.keyguard.feature.crashlytics.crashlyticsTap +import kotlinx.collections.immutable.persistentMapOf +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.debounce +import kotlinx.coroutines.flow.flatMapLatest +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.onEach +import kotlinx.coroutines.flow.update + +class DiskHandleImpl private constructor( + private val scope: CoroutineScope, + private val putScreenState: PutScreenState, + private val key: String, + override val restoredState: Map, +) : DiskHandle { + companion object { + private const val SAVE_DEBOUNCE_MS = 180L + + suspend fun read( + scope: CoroutineScope, + getScreenState: GetScreenState, + putScreenState: PutScreenState, + key: String, + ): DiskHandle { + val restoredState = getScreenState(key) + .toIO() + .crashlyticsTap() + .attempt() + .bind() + .getOrNull() + .orEmpty() + return DiskHandleImpl( + scope = scope, + putScreenState = putScreenState, + key = key, + restoredState = restoredState, + ) + } + } + + private val registrySink = MutableStateFlow(persistentMapOf>()) + + init { + registrySink + .flatMapLatest { state -> + state.entries + .map { (key, value) -> + // Combine flow of values with a + // key of the variable. + value + .map { f -> key to f } + } + .combineToList() + } + .debounce(SAVE_DEBOUNCE_MS) // no need to save all of the events + .onEach { entries -> + val state = entries.toMap() + val result = tryWrite(state) + if (result is Either.Left) { + val e = result.value + e.printStackTrace() + } + } + .launchIn(scope) + } + + private suspend fun tryWrite(state: Map) = putScreenState(key, state) + .attempt() + .bind() + + override fun link(key: String, flow: Flow) = registrySink.update { state -> + val savedFlow = state[key] + if (savedFlow != null) { + require(savedFlow === flow) { + "Tried to link a flow with a disk, but a collision has occurred." + } + state + } else { + state.put(key, flow) + } + } + + override fun unlink(key: String) = registrySink.update { state -> + state.remove(key) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/state/FlowHolderViewModel.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/state/FlowHolderViewModel.kt new file mode 100644 index 00000000..37b8ad9a --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/state/FlowHolderViewModel.kt @@ -0,0 +1,102 @@ +package com.artemchep.keyguard.feature.navigation.state + +import androidx.compose.material3.ColorScheme +import androidx.compose.runtime.State +import arrow.core.Some +import com.artemchep.keyguard.common.usecase.GetScreenState +import com.artemchep.keyguard.common.usecase.PutScreenState +import com.artemchep.keyguard.common.usecase.ShowMessage +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.feature.navigation.NavigationController +import com.artemchep.keyguard.platform.LeBundle +import com.artemchep.keyguard.platform.LeContext +import com.artemchep.keyguard.platform.leBundleOf +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.Job +import kotlinx.coroutines.plus +import kotlinx.serialization.json.Json + +class FlowHolderViewModel( + private val source: String, + private val scope: CoroutineScope, +) { + var bundle: LeBundle = leBundleOf() + + private val store = mutableMapOf>() + + private class Entry( + val scope: RememberStateFlowScope, + val job: Job, + val value: Any?, + ) + + fun getOrPut( + key: String, + c: NavigationController, + showMessage: ShowMessage, + getScreenState: GetScreenState, + putScreenState: PutScreenState, + windowCoroutineScope: WindowCoroutineScope, + json: Json, + screen: String, + screenName: String, + context: LeContext, + colorSchemeState: State, + init: RememberStateFlowScope.() -> T, + ): T = synchronized(this) { + store.getOrPut(key) { + val job = Job() + val scope = RememberStateFlowScopeImpl( + key = key, + scope = scope + job + Dispatchers.Default, + navigationController = c, + showMessage = showMessage, + getScreenState = getScreenState, + putScreenState = putScreenState, + windowCoroutineScope = windowCoroutineScope, + json = json, + bundle = bundle, + screen = screen, + screenName = screenName, + colorSchemeState = colorSchemeState, + context = context, + ) + val value = init(scope) + Some( + Entry( + scope = scope, + job = job, + value = value, + ), + ) + }.value.value as T + } + + fun clear(key: String) { + synchronized(this) { + store.remove(key)?.map { it.job.cancel() } + } + } + + private var isDestroyed = false + + fun destroy() { + synchronized(this) { + if (!isDestroyed) { + isDestroyed = true + // + store.keys.toSet().forEach { + clear(it) + } + } + } + } + + fun persistedState(): LeBundle { + val state = store + .map { (key, sink) -> key to sink.value.scope.persistedState() } + .toTypedArray() + return leBundleOf(*state) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/state/PersistedStorage.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/state/PersistedStorage.kt new file mode 100644 index 00000000..c24b1ed0 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/state/PersistedStorage.kt @@ -0,0 +1,13 @@ +package com.artemchep.keyguard.feature.navigation.state + +sealed interface PersistedStorage { + data object InMemory : PersistedStorage + + /** + * Stores the latest value on the disk, allowing to + * survive the restart of an app. + */ + data class InDisk( + val disk: DiskHandle, + ) : PersistedStorage +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/state/ProduceScreenState.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/state/ProduceScreenState.kt new file mode 100644 index 00000000..86791c9d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/state/ProduceScreenState.kt @@ -0,0 +1,40 @@ +package com.artemchep.keyguard.feature.navigation.state + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.State +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import kotlinx.coroutines.flow.Flow + +@Composable +fun produceScreenState( + key: String, + args: Array = emptyArray(), + rargs: Array = emptyArray(), + initial: T, + init: suspend RememberStateFlowScope.() -> Flow, +): T { + val stateFlow by rememberScreenState( + key = key, + args = args, + rargs = rargs, + initial = initial, + init = init, + ) + return stateFlow +} + +@Composable +fun rememberScreenState( + key: String, + args: Array = emptyArray(), + rargs: Array = emptyArray(), + initial: T, + init: suspend RememberStateFlowScope.() -> Flow, +): State = rememberScreenStateFlow( + key = key, + args = args, + rargs = rargs, + initial = initial, + init = init, +).collectAsState() diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlow.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlow.kt new file mode 100644 index 00000000..1ed0a23c --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/state/RememberScreenStateFlow.kt @@ -0,0 +1,127 @@ +package com.artemchep.keyguard.feature.navigation.state + +import androidx.compose.material3.MaterialTheme +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberUpdatedState +import com.artemchep.keyguard.common.usecase.GetDebugScreenDelay +import com.artemchep.keyguard.common.usecase.GetScreenState +import com.artemchep.keyguard.common.usecase.PutScreenState +import com.artemchep.keyguard.common.usecase.ShowMessage +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.common.util.flow.persistingStateIn +import com.artemchep.keyguard.feature.navigation.LocalNavigationController +import com.artemchep.keyguard.feature.navigation.LocalNavigationNodeLogicalStack +import com.artemchep.keyguard.feature.navigation.N +import com.artemchep.keyguard.feature.navigation.navigationNodeStack +import com.artemchep.keyguard.platform.LocalLeContext +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.firstOrNull +import kotlinx.coroutines.flow.flattenConcat +import kotlinx.coroutines.flow.flow +import kotlinx.coroutines.flow.flowOn +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.shareIn +import kotlinx.coroutines.flow.withIndex +import kotlinx.coroutines.launch +import kotlinx.coroutines.suspendCancellableCoroutine +import kotlinx.coroutines.withContext +import kotlinx.datetime.Clock +import kotlinx.serialization.json.Json +import org.kodein.di.compose.rememberInstance + +private const val TAG = "ScreenState" + +@Composable +fun rememberScreenStateFlow( + key: String, + args: Array = emptyArray(), + rargs: Array = emptyArray(), + initial: T, + init: suspend RememberStateFlowScope.() -> Flow, +): StateFlow { + val finalTag = N.tag(TAG) + // Key is the one provided by the user or + // the one generated by the compose runtime. + val finalKey = navigationNodeStack() + ":" + key + + val f = LocalNavigationNodeLogicalStack.current.last() + val c = LocalNavigationController.current + val viewModel = f.vm + + val context = LocalLeContext + + val colorSchemeState = rememberUpdatedState(MaterialTheme.colorScheme) + + val toastService by rememberInstance() + val getScreenState by rememberInstance() + val getDebugScreenDelay by rememberInstance() + val putScreenState by rememberInstance() + val windowCoroutineScope by rememberInstance() + val json by rememberInstance() + return remember( + finalKey, + viewModel, + c, + toastService, + getScreenState, + putScreenState, + windowCoroutineScope, + json, + context, + *rargs, + ) { + val now = Clock.System.now() + val flow: RememberStateFlowScope.() -> Flow = { + launch { +// Log.i(finalTag, "Initialized the state of '$finalKey'.") + try { + // Suspend forever. + suspendCancellableCoroutine { } + } finally { +// Log.i(finalTag, "Finished the state of '$finalKey'.") + } + } + + val structureFlow = flow { + val shouldDelay = getDebugScreenDelay().firstOrNull() == true + if (shouldDelay) { + delay(5500L) + } + + val structure = withContext(Dispatchers.Default) { + init() + } + emit(structure) + } + // We don't want to recreate a state producer + // each time we re-subscribe to it. + .shareIn(this, SharingStarted.Lazily, 1) + structureFlow + .flattenConcat() + .withIndex() + .map { it.value } + .flowOn(Dispatchers.Default) + .persistingStateIn(this, SharingStarted.WhileSubscribed(), initial) + } + val flow2 = viewModel.getOrPut( + finalKey, + c, + toastService, + getScreenState, + putScreenState, + windowCoroutineScope, + json, + f.id, + key, + context, + colorSchemeState, + flow, + ) as StateFlow + flow2 + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope.kt new file mode 100644 index 00000000..e5fc36b1 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/state/RememberStateFlowScope.kt @@ -0,0 +1,102 @@ +package com.artemchep.keyguard.feature.navigation.state + +import androidx.compose.material3.ColorScheme +import com.artemchep.keyguard.common.model.ToastMessage +import com.artemchep.keyguard.feature.loading.LoadingTask +import com.artemchep.keyguard.feature.localization.TextHolder +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.platform.LeContext +import dev.icerock.moko.resources.StringResource +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.shareIn + +interface TranslatorScope { + fun translate( + res: StringResource, + ): String + + fun translate( + res: StringResource, + vararg args: Any, + ): String +} + +fun TranslatorScope.translate(text: TextHolder) = when (text) { + is TextHolder.Res -> translate(text.data) + is TextHolder.Value -> text.data +} + +interface RememberStateFlowScope : RememberStateFlowScopeSub, CoroutineScope, TranslatorScope { + val appScope: CoroutineScope + + val screenScope: CoroutineScope + + val screenId: String + + val screenName: String + + val context: LeContext + + val colorScheme: ColorScheme + + /** + * Commands a closest router to execute the + * given intent. + */ + fun navigate( + intent: NavigationIntent, + ) + + /** Sends a message from this screen */ + fun message( + message: ToastMessage, + ) + + /** Sends a message from this screen */ + fun message( + exception: Throwable, + ) + + fun screenExecutor(): LoadingTask + + /** + * Register a listener to exit request. Once registered, you must + * call the callback with `true` if you can go back, `false` if that + * should be ignored. + */ + fun interceptExit( + isEnabledFlow: Flow, + callback: ((Boolean) -> Unit) -> Unit, + ) + + /** + * Register a listener to back press. Once registered, you must + * call the callback with `true` if you can go back, `false` if that + * should be ignored. + */ + fun interceptBackPress( + isEnabledFlow: Flow, + callback: ((Boolean) -> Unit) -> Unit, + ) + + // + // Helpers + // + + fun Flow.shareInScreenScope( + started: SharingStarted = SharingStarted.WhileSubscribed(1000), + replay: Int = 1, + ) = this + .shareIn( + scope = screenScope, + started = started, + replay = replay, + ) +} + +fun RememberStateFlowScope.navigatePopSelf() { + val intent = NavigationIntent.PopById(screenId, exclusive = false) + navigate(intent) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl.kt new file mode 100644 index 00000000..010c07f7 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeImpl.kt @@ -0,0 +1,291 @@ +package com.artemchep.keyguard.feature.navigation.state + +import androidx.compose.material3.ColorScheme +import androidx.compose.runtime.MutableState +import androidx.compose.runtime.State +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.snapshotFlow +import arrow.core.partially1 +import com.artemchep.keyguard.common.model.ToastMessage +import com.artemchep.keyguard.common.usecase.GetScreenState +import com.artemchep.keyguard.common.usecase.PutScreenState +import com.artemchep.keyguard.common.usecase.ShowMessage +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.feature.loading.LoadingTask +import com.artemchep.keyguard.feature.loading.getErrorReadableMessage +import com.artemchep.keyguard.feature.localization.textResource +import com.artemchep.keyguard.feature.navigation.NavigationController +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.platform.LeBundle +import com.artemchep.keyguard.platform.LeContext +import com.artemchep.keyguard.platform.contains +import com.artemchep.keyguard.platform.get +import com.artemchep.keyguard.platform.leBundleOf +import dev.icerock.moko.resources.StringResource +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Job +import kotlinx.coroutines.cancel +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.onEach +import kotlinx.coroutines.plus +import kotlinx.serialization.json.Json + +class RememberStateFlowScopeImpl( + private val key: String, + private val bundle: LeBundle, + private val showMessage: ShowMessage, + private val getScreenState: GetScreenState, + private val putScreenState: PutScreenState, + private val windowCoroutineScope: WindowCoroutineScope, + private val navigationController: NavigationController, + private val json: Json, + private val scope: CoroutineScope, + private val screen: String, + private val colorSchemeState: State, + override val screenName: String, + override val context: LeContext, +) : RememberStateFlowScope, CoroutineScope by scope { + private val registry = mutableMapOf>() + + override val colorScheme get() = colorSchemeState.value + + private data class Entry( + val sink: MutableStateFlow, + val serialize: (T) -> S, + val deserialize: (S) -> T, + val composeState: ComposeState, + ) { + class ComposeState( + scope: CoroutineScope, + sink: MutableStateFlow, + ) { + private val collectScope by lazy { + scope + Job() + } + + val mutableState by lazy { + val state = mutableStateOf(sink.value) + // Send back the data from a source of truth to the + // property's sink. + snapshotFlow { state.value } + .onEach { text -> + sink.value = text + } + .launchIn(collectScope) + return@lazy state + } + + fun dispose() { + collectScope.cancel() + } + } + } + + override val appScope: CoroutineScope + get() = windowCoroutineScope + + override val screenScope: CoroutineScope + get() = scope + + override val screenId: String + get() = screen + + private fun getBundleKey(key: String) = "${this.key}:$key" + + override fun navigate( + intent: NavigationIntent, + ) { + navigationController.queue(intent) + } + + override fun message( + message: ToastMessage, + ) { + showMessage.copy( + value = message, + target = key, + ) + } + + override fun message( + exception: Throwable, + ) { + val title = getErrorReadableMessage(exception, this) + val message = ToastMessage( + type = ToastMessage.Type.ERROR, + title = title, + ) + message(message) + } + + override fun translate(res: StringResource): String = + textResource(res, context) + + override fun translate(res: StringResource, vararg args: Any): String = + textResource(res, context, *args) + + override fun screenExecutor(): LoadingTask { + val executor = LoadingTask(this, appScope) + executor + .errorFlow + .onEach { message -> + val model = ToastMessage( + title = message, + type = ToastMessage.Type.ERROR, + ) + message(model) + } + .launchIn(screenScope) + return executor + } + + override fun interceptExit( + isEnabledFlow: Flow, + callback: ((Boolean) -> Unit) -> Unit, + ) { + } + + override fun interceptBackPress( + isEnabledFlow: Flow, + callback: ((Boolean) -> Unit) -> Unit, + ) { + } + + override suspend fun loadDiskHandle( + key: String, + global: Boolean, + ): DiskHandle = kotlin.run { + val diskHandleKey = if (global) { + "$key@*" + } else { + "$key@$screenName" + } + DiskHandleImpl + .read( + scope = screenScope, + getScreenState = getScreenState, + putScreenState = putScreenState, + key = diskHandleKey, + ) + } + + override fun mutablePersistedFlow( + key: String, + storage: PersistedStorage, + initialValue: () -> T, + ): MutableStateFlow = mutablePersistedFlow( + key = key, + storage = storage, + serialize = { _, value -> value }, + deserialize = { _, value -> value }, + initialValue = initialValue, + ) + + override fun mutablePersistedFlow( + key: String, + storage: PersistedStorage, + serialize: (Json, T) -> S, + deserialize: (Json, S) -> T, + initialValue: () -> T, + ): MutableStateFlow = synchronized(this) { + registry.getOrPut(key) { + val value = kotlin.run { + val bundleKey = getBundleKey(key) + if (bundle.contains(bundleKey)) { + // Obtain the persisted value from the bundle. We can not guarantee + // the type, so we yolo it. + val serializedValue = bundle[bundleKey] + try { + val v = serializedValue as S + return@run deserialize(json, v) + } catch (e: Exception) { + // Fall down. + e.printStackTrace() + } + } + + if ( + storage is PersistedStorage.InDisk && + storage.disk.restoredState.containsKey(key) + ) { + try { + val v = storage.disk.restoredState[key] as S + return@run deserialize(json, v) + } catch (e: Exception) { + // Fall down. + e.printStackTrace() + } + } + + initialValue() + } + + val sink = MutableStateFlow(value) + val entry = Entry( + sink = sink, + serialize = serialize.partially1(json), + deserialize = deserialize.partially1(json), + composeState = Entry.ComposeState( + scope = screenScope, + sink = sink, + ), + ) as Entry + // Remember all the updates of the flow in the + // persisted storage. + if (storage is PersistedStorage.InDisk) { + val flow = entry + .sink + .map { + serialize(json, it as T) + } + storage.disk.link(key, flow) + } + entry + }.sink as MutableStateFlow + } + + override fun asComposeState(key: String) = synchronized(this) { + registry[key]!!.composeState.mutableState as MutableState + } + + override fun clearPersistedFlow(key: String) { + val entry = synchronized(this) { + registry.remove(key) + } + @Suppress("IfThenToSafeAccess") + if (entry != null) { + entry.composeState.dispose() + } + } + + override fun mutableComposeState(sink: MutableStateFlow): MutableState { + val state = mutableStateOf(sink.value) + // Send back the data from a source of truth to the + // screen's storage. + snapshotFlow { state.value } + .onEach { text -> + sink.value = text + } + .launchIn(screenScope) + return state + } + + override fun persistedState(): LeBundle { + val state = synchronized(this) { + registry + .map { (key, entry) -> + val fullKey = getBundleKey(key) + val serializableValue = kotlin.run { + val rawValue = entry.sink.value + entry.serialize(rawValue) + } + fullKey to serializableValue + } + .toTypedArray() + } + return leBundleOf(*state) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeSub.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeSub.kt new file mode 100644 index 00000000..c020f152 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/navigation/state/RememberStateFlowScopeSub.kt @@ -0,0 +1,36 @@ +package com.artemchep.keyguard.feature.navigation.state + +import androidx.compose.runtime.MutableState +import com.artemchep.keyguard.platform.LeBundle +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.serialization.json.Json + +interface RememberStateFlowScopeSub { + suspend fun loadDiskHandle(key: String, global: Boolean = false): DiskHandle + + fun mutablePersistedFlow( + key: String, + storage: PersistedStorage = PersistedStorage.InMemory, + initialValue: () -> T, + ): MutableStateFlow + + fun mutablePersistedFlow( + key: String, + storage: PersistedStorage = PersistedStorage.InMemory, + serialize: (Json, T) -> S, + deserialize: (Json, S) -> T, + initialValue: () -> T, + ): MutableStateFlow + + fun asComposeState( + key: String, + ): MutableState + + fun clearPersistedFlow(key: String) + + fun mutableComposeState( + sink: MutableStateFlow, + ): MutableState + + fun persistedState(): LeBundle +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/notifications/NotificationsBanner.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/notifications/NotificationsBanner.kt new file mode 100644 index 00000000..bb3a91f7 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/notifications/NotificationsBanner.kt @@ -0,0 +1,142 @@ +// package com.artemchep.keyguard.feature.notifications +// +// import android.Manifest +// import android.os.Build +// import androidx.compose.foundation.background +// import androidx.compose.foundation.clickable +// import androidx.compose.foundation.layout.Column +// import androidx.compose.foundation.layout.Row +// import androidx.compose.foundation.layout.Spacer +// import androidx.compose.foundation.layout.fillMaxWidth +// import androidx.compose.foundation.layout.padding +// import androidx.compose.foundation.layout.width +// import androidx.compose.material.icons.Icons +// import androidx.compose.material.icons.outlined.NotificationsOff +// import androidx.compose.material3.Icon +// import androidx.compose.material3.LocalContentColor +// import androidx.compose.material3.MaterialTheme +// import androidx.compose.material3.Surface +// import androidx.compose.material3.Text +// import androidx.compose.runtime.Composable +// import androidx.compose.runtime.State +// import androidx.compose.runtime.derivedStateOf +// import androidx.compose.runtime.mutableStateOf +// import androidx.compose.runtime.remember +// import androidx.compose.ui.Alignment +// import androidx.compose.ui.Modifier +// import androidx.compose.ui.unit.dp +// import com.artemchep.keyguard.feature.home.security.watchtowerWarningColor +// import com.artemchep.keyguard.ui.ChevronIcon +// import com.artemchep.keyguard.ui.ExpandedIfNotEmpty +// import com.artemchep.keyguard.ui.MediumEmphasisAlpha +// import com.artemchep.keyguard.ui.theme.Dimens +// import com.artemchep.keyguard.ui.theme.combineAlpha +// import com.artemchep.keyguard.ui.util.HorizontalDivider +// import com.google.accompanist.permissions.ExperimentalPermissionsApi +// import com.google.accompanist.permissions.PermissionStatus +// import com.google.accompanist.permissions.rememberPermissionState +// +// @OptIn(ExperimentalPermissionsApi::class) +// @Composable +// fun NotificationsBanner( +// modifier: Modifier = Modifier, +// contentModifier: Modifier = Modifier, +// ) { +// if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) { +// return +// } +// +// val state = rememberPermissionState(Manifest.permission.POST_NOTIFICATIONS) +// val visible = state.status !is PermissionStatus.Granted +// ExpandedIfNotEmpty( +// modifier = modifier, +// valueOrNull = Unit.takeIf { visible }, +// ) { +// NotificationsBanner( +// contentModifier = contentModifier, +// onClick = { +// state.launchPermissionRequest() +// }, +// ) +// } +// } +// +// @OptIn(ExperimentalPermissionsApi::class) +// @Composable +// fun rememberNotificationsBannerState(): State { +// if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) { +// return remember { +// mutableStateOf(false) +// } +// } +// +// val permissionState = rememberPermissionState(Manifest.permission.POST_NOTIFICATIONS) +// val bannerState = remember(permissionState) { +// derivedStateOf { +// permissionState.status !is PermissionStatus.Granted +// } +// } +// return bannerState +// } +// +// @Composable +// private fun NotificationsBanner( +// modifier: Modifier = Modifier, +// contentModifier: Modifier = Modifier, +// onClick: () -> Unit, +// ) { +// Surface( +// modifier = modifier, +// tonalElevation = 3.dp, +// ) { +// Column { +// val warningColor = watchtowerWarningColor() +// val backgroundColor = warningColor +// .copy(alpha = 0.13f) +// Row( +// modifier = Modifier +// .fillMaxWidth() +// .background(backgroundColor) +// .clickable { +// onClick() +// } +// .then(contentModifier) +// .padding( +// vertical = 8.dp, +// horizontal = Dimens.horizontalPadding, +// ), +// verticalAlignment = Alignment.CenterVertically, +// ) { +// Icon( +// imageVector = Icons.Outlined.NotificationsOff, +// contentDescription = null, +// ) +// Spacer( +// modifier = Modifier +// .width(Dimens.horizontalPadding), +// ) +// Column( +// modifier = Modifier +// .weight(1f), +// ) { +// Text( +// text = "Notifications are disabled", +// style = MaterialTheme.typography.titleMedium, +// ) +// Text( +// text = "Grant the notification permission to allow Keyguard to show one-time passwords when autofilling & more.", +// style = MaterialTheme.typography.bodySmall, +// color = LocalContentColor.current +// .combineAlpha(MediumEmphasisAlpha), +// ) +// } +// Spacer( +// modifier = Modifier +// .width(Dimens.horizontalPadding), +// ) +// ChevronIcon() +// } +// HorizontalDivider() +// } +// } +// } diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/onboarding/OnboardingBanner.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/onboarding/OnboardingBanner.kt new file mode 100644 index 00000000..fd857d26 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/onboarding/OnboardingBanner.kt @@ -0,0 +1,146 @@ +// package com.artemchep.keyguard.feature.onboarding +// +// import androidx.compose.foundation.background +// import androidx.compose.foundation.clickable +// import androidx.compose.foundation.layout.Column +// import androidx.compose.foundation.layout.Row +// import androidx.compose.foundation.layout.Spacer +// import androidx.compose.foundation.layout.fillMaxWidth +// import androidx.compose.foundation.layout.padding +// import androidx.compose.foundation.layout.width +// import androidx.compose.material.icons.Icons +// import androidx.compose.material.icons.outlined.Info +// import androidx.compose.material.icons.outlined.NotificationsOff +// import androidx.compose.material3.Icon +// import androidx.compose.material3.LocalContentColor +// import androidx.compose.material3.MaterialTheme +// import androidx.compose.material3.Surface +// import androidx.compose.material3.Text +// import androidx.compose.runtime.Composable +// import androidx.compose.runtime.State +// import androidx.compose.runtime.collectAsState +// import androidx.compose.runtime.derivedStateOf +// import androidx.compose.runtime.getValue +// import androidx.compose.runtime.mutableStateOf +// import androidx.compose.runtime.remember +// import androidx.compose.runtime.rememberUpdatedState +// import androidx.compose.ui.Alignment +// import androidx.compose.ui.Modifier +// import androidx.compose.ui.unit.dp +// import com.artemchep.keyguard.common.usecase.GetOnboardingLastVisitInstant +// import com.artemchep.keyguard.feature.home.security.watchtowerInfoColor +// import com.artemchep.keyguard.feature.home.security.watchtowerWarningColor +// import com.artemchep.keyguard.feature.navigation.LocalNavigationController +// import com.artemchep.keyguard.feature.navigation.NavigationIntent +// import com.artemchep.keyguard.ui.ChevronIcon +// import com.artemchep.keyguard.ui.ExpandedIfNotEmpty +// import com.artemchep.keyguard.ui.MediumEmphasisAlpha +// import com.artemchep.keyguard.ui.theme.Dimens +// import com.artemchep.keyguard.ui.theme.combineAlpha +// import com.artemchep.keyguard.ui.util.HorizontalDivider +// import com.google.accompanist.permissions.ExperimentalPermissionsApi +// import com.google.accompanist.permissions.PermissionStatus +// import com.google.accompanist.permissions.rememberPermissionState +// import kotlinx.coroutines.flow.map +// import org.kodein.di.compose.rememberInstance +// +// @OptIn(ExperimentalPermissionsApi::class) +// @Composable +// fun OnboardingBanner( +// modifier: Modifier = Modifier, +// contentModifier: Modifier = Modifier, +// ) { +// val getInstant by rememberInstance() +// val visible = remember(getInstant) { +// getInstant() +// .map { it == null } +// }.collectAsState(initial = false) +// +// val navigationController by rememberUpdatedState(LocalNavigationController.current) +// ExpandedIfNotEmpty( +// modifier = modifier, +// valueOrNull = Unit.takeIf { visible.value }, +// ) { +// OnboardingBanner( +// contentModifier = contentModifier, +// onClick = { +// val intent = NavigationIntent.NavigateToRoute( +// route = OnboardingRoute, +// ) +// navigationController.queue(intent) +// }, +// ) +// } +// } +// +// @Composable +// fun rememberOnboardingBannerState(): State { +// val getInstant by rememberInstance() +// val bannerState = remember(getInstant) { +// getInstant() +// .map { it == null } +// }.collectAsState(initial = false) +// return bannerState +// } +// +// @Composable +// fun OnboardingBanner( +// modifier: Modifier = Modifier, +// contentModifier: Modifier = Modifier, +// onClick: () -> Unit, +// ) { +// Surface( +// modifier = modifier, +// tonalElevation = 3.dp, +// ) { +// Column { +// val warningColor = watchtowerInfoColor() +// val backgroundColor = warningColor +// .copy(alpha = 0.13f) +// Row( +// modifier = Modifier +// .fillMaxWidth() +// .background(backgroundColor) +// .clickable { +// onClick() +// } +// .then(contentModifier) +// .padding( +// vertical = 8.dp, +// horizontal = Dimens.horizontalPadding, +// ), +// verticalAlignment = Alignment.CenterVertically, +// ) { +// Icon( +// imageVector = Icons.Outlined.Info, +// contentDescription = null, +// ) +// Spacer( +// modifier = Modifier +// .width(Dimens.horizontalPadding), +// ) +// Column( +// modifier = Modifier +// .weight(1f), +// ) { +// Text( +// text = "Learn more about app's features", +// style = MaterialTheme.typography.titleMedium, +// ) +// // Text( +// // text = "Grant the notification permission to allow Keyguard to show one-time passwords when autofilling & more.", +// // style = MaterialTheme.typography.bodySmall, +// // color = LocalContentColor.current +// // .combineAlpha(MediumEmphasisAlpha), +// // ) +// } +// Spacer( +// modifier = Modifier +// .width(Dimens.horizontalPadding), +// ) +// ChevronIcon() +// } +// HorizontalDivider() +// } +// } +// } diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/onboarding/OnboardingItem.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/onboarding/OnboardingItem.kt new file mode 100644 index 00000000..a95c984e --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/onboarding/OnboardingItem.kt @@ -0,0 +1,11 @@ +package com.artemchep.keyguard.feature.onboarding + +import androidx.compose.ui.graphics.vector.ImageVector +import dev.icerock.moko.resources.StringResource + +data class OnboardingItem( + val title: StringResource, + val text: StringResource, + val premium: Boolean = false, + val icon: ImageVector? = null, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/onboarding/OnboardingRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/onboarding/OnboardingRoute.kt new file mode 100644 index 00000000..f830c77c --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/onboarding/OnboardingRoute.kt @@ -0,0 +1,11 @@ +package com.artemchep.keyguard.feature.onboarding + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.navigation.Route + +object OnboardingRoute : Route { + @Composable + override fun Content() { + OnboardingScreen() + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/onboarding/OnboardingScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/onboarding/OnboardingScreen.kt new file mode 100644 index 00000000..bb612738 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/onboarding/OnboardingScreen.kt @@ -0,0 +1,399 @@ +@file:OptIn(ExperimentalMaterial3Api::class) + +package com.artemchep.keyguard.feature.onboarding + +import androidx.compose.foundation.BorderStroke +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ColumnScope +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.widthIn +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.AccountBox +import androidx.compose.material.icons.outlined.CopyAll +import androidx.compose.material.icons.outlined.DataArray +import androidx.compose.material.icons.outlined.FilterAlt +import androidx.compose.material.icons.outlined.OfflineBolt +import androidx.compose.material.icons.outlined.Password +import androidx.compose.material.icons.outlined.QrCode +import androidx.compose.material.icons.outlined.Recycling +import androidx.compose.material.icons.outlined.Search +import androidx.compose.material.icons.outlined.SelectAll +import androidx.compose.material.icons.outlined.ShortText +import androidx.compose.material.icons.outlined.Sync +import androidx.compose.material.icons.outlined.Timer +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.alpha +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.input.nestedscroll.nestedScroll +import androidx.compose.ui.text.style.Hyphens +import androidx.compose.ui.text.style.LineBreak +import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.common.io.attempt +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.usecase.PutOnboardingLastVisitInstant +import com.artemchep.keyguard.feature.home.vault.component.Section +import com.artemchep.keyguard.feature.navigation.NavigationIcon +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.ExpandedIfNotEmpty +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.ScaffoldColumn +import com.artemchep.keyguard.ui.grid.SimpleGridLayout +import com.artemchep.keyguard.ui.icons.KeyguardPremium +import com.artemchep.keyguard.ui.icons.KeyguardTwoFa +import com.artemchep.keyguard.ui.icons.KeyguardWebsite +import com.artemchep.keyguard.ui.theme.Dimens +import com.artemchep.keyguard.ui.theme.combineAlpha +import com.artemchep.keyguard.ui.theme.horizontalPaddingHalf +import com.artemchep.keyguard.ui.toolbar.LargeToolbar +import com.artemchep.keyguard.ui.util.DividerColor +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.GlobalScope +import kotlinx.datetime.Clock +import org.kodein.di.compose.rememberInstance + +val onboardingItemsPremium = listOf( + OnboardingItem( + title = Res.strings.feat_item_multiple_accounts_title, + text = Res.strings.feat_item_multiple_accounts_text, + premium = true, + icon = Icons.Outlined.AccountBox, + ), + OnboardingItem( + title = Res.strings.feat_item_two_way_sync_title, + text = Res.strings.feat_item_two_way_sync_text, + premium = true, + icon = Icons.Outlined.Sync, + ), + OnboardingItem( + title = Res.strings.feat_item_offline_editing_title, + text = Res.strings.feat_item_offline_editing_text, + premium = true, + icon = Icons.Outlined.OfflineBolt, + ), +) + +val onboardingItemsSearch = listOf( + OnboardingItem( + title = Res.strings.feat_item_search_by_anything_title, + text = Res.strings.feat_item_search_by_anything_text, + icon = Icons.Outlined.Search, + ), + OnboardingItem( + title = Res.strings.feat_item_filter_title, + text = Res.strings.feat_item_filter_text, + icon = Icons.Outlined.FilterAlt, + ), + OnboardingItem( + title = Res.strings.feat_item_multiple_keywords_title, + text = Res.strings.feat_item_multiple_keywords_text, + ), +) + +val onboardingItemsWatchtower = listOf( + OnboardingItem( + title = Res.strings.feat_item_pwned_passwords_title, + text = Res.strings.feat_item_pwned_passwords_text, + icon = Icons.Outlined.DataArray, + ), + OnboardingItem( + title = Res.strings.feat_item_password_strength_title, + text = Res.strings.feat_item_password_strength_text, + icon = Icons.Outlined.Password, + ), + OnboardingItem( + title = Res.strings.feat_item_reused_passwords_title, + text = Res.strings.feat_item_reused_passwords_text, + icon = Icons.Outlined.Recycling, + ), + OnboardingItem( + title = Res.strings.feat_item_inactive_totp_title, + text = Res.strings.feat_item_inactive_totp_text, + icon = Icons.Outlined.KeyguardTwoFa, + ), + OnboardingItem( + title = Res.strings.feat_item_unsecure_websites_title, + text = Res.strings.feat_item_unsecure_websites_text, + icon = Icons.Outlined.KeyguardWebsite, + ), + OnboardingItem( + title = Res.strings.feat_item_incomplete_items_title, + text = Res.strings.feat_item_incomplete_items_text, + icon = Icons.Outlined.ShortText, + ), + OnboardingItem( + title = Res.strings.feat_item_expiring_items_title, + text = Res.strings.feat_item_expiring_items_text, + icon = Icons.Outlined.Timer, + ), + OnboardingItem( + title = Res.strings.feat_item_duplicate_items_title, + text = Res.strings.feat_item_duplicate_items_text, + icon = Icons.Outlined.CopyAll, + ), +) + +val onboardingItemsOther = listOf( + OnboardingItem( + title = Res.strings.feat_item_multi_selection_title, + text = Res.strings.feat_item_multi_selection_text, + icon = Icons.Outlined.SelectAll, + ), + OnboardingItem( + title = Res.strings.feat_item_show_barcode_title, + text = Res.strings.feat_item_show_barcode_text, + icon = Icons.Outlined.QrCode, + ), + OnboardingItem( + title = Res.strings.feat_item_generator_title, + text = Res.strings.feat_item_generator_text, + ), +) + +@Composable +fun OnboardingScreen() { + val putInstant by rememberInstance() + LaunchedEffect(putInstant) { + putInstant(Clock.System.now()) + .attempt() + .launchIn(GlobalScope) + } + + val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior() + ScaffoldColumn( + modifier = Modifier + .nestedScroll(scrollBehavior.nestedScrollConnection), + topAppBarScrollBehavior = scrollBehavior, + topBar = { + LargeToolbar( + title = { + Text(stringResource(Res.strings.feat_header_title)) + }, + navigationIcon = { + NavigationIcon() + }, + scrollBehavior = scrollBehavior, + ) + }, + ) { + OnboardingScreenContent() + } +} + +@Composable +private fun ColumnScope.OnboardingScreenContent() { + OnboardingContainer( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = Dimens.horizontalPaddingHalf), + items = onboardingItemsPremium, + ) + Section( + text = stringResource(Res.strings.feat_section_search_title), + ) + OnboardingContainer( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = Dimens.horizontalPaddingHalf), + items = onboardingItemsSearch, + ) + Section( + text = stringResource(Res.strings.feat_section_watchtower_title), + ) + OnboardingContainer( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = Dimens.horizontalPaddingHalf), + items = onboardingItemsWatchtower, + ) + Section( + text = stringResource(Res.strings.feat_section_misc_title), + ) + OnboardingContainer( + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = Dimens.horizontalPaddingHalf), + items = onboardingItemsOther, + ) +} + +@Composable +private fun OnboardingContainer( + modifier: Modifier = Modifier, + items: List, +) { + SimpleGridLayout( + modifier = modifier, + ) { + items.forEach { item -> + OnboardingCard( + modifier = Modifier, + title = stringResource(item.title), + text = stringResource(item.text), + premium = item.premium, + imageVector = item.icon, + ) + } + } +} + +@Composable +fun OnboardingCard( + modifier: Modifier = Modifier, + title: String, + text: String? = null, + premium: Boolean = false, + imageVector: ImageVector? = null, +) { + Surface( + modifier = modifier, + shape = MaterialTheme.shapes.medium, + tonalElevation = 0.dp, + ) { + Box( + modifier = Modifier, + contentAlignment = Alignment.TopEnd, + ) { + if (imageVector != null) { + Icon( + imageVector, + modifier = Modifier + .padding(8.dp) + .size(72.dp) + .alpha(0.035f) + .align(Alignment.TopEnd), + contentDescription = null, + ) + } + Column( + modifier = Modifier + .padding(8.dp) + .fillMaxWidth(), + verticalArrangement = Arrangement.spacedBy(8.dp), + ) { + Text( + text = title, + style = MaterialTheme.typography.titleMedium + .copy( + hyphens = Hyphens.Auto, + lineBreak = LineBreak.Heading, + ), + maxLines = 3, + overflow = TextOverflow.Ellipsis, + ) + ExpandedIfNotEmpty(valueOrNull = text) { + Text( + text = it, + style = MaterialTheme.typography.bodyMedium + .copy( + hyphens = Hyphens.Auto, + lineBreak = LineBreak.Paragraph, + ), + maxLines = 6, + overflow = TextOverflow.Ellipsis, + ) + } + ExpandedIfNotEmpty( + valueOrNull = Unit.takeIf { premium }, + ) { + Row( + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(8.dp), + ) { + Icon( + modifier = Modifier + .size(12.dp), + imageVector = Icons.Outlined.KeyguardPremium, + contentDescription = null, + tint = MaterialTheme.colorScheme.primary, + ) + Text( + text = stringResource(Res.strings.feat_keyguard_premium_label), + color = MaterialTheme.colorScheme.primary, + style = MaterialTheme.typography.labelSmall, + ) + } + } + } + } + } +} + +@Composable +fun SmallOnboardingCard( + modifier: Modifier = Modifier, + title: String, + text: String? = null, + imageVector: ImageVector? = null, +) { + Surface( + modifier = modifier, + shape = MaterialTheme.shapes.medium, + tonalElevation = 0.dp, + border = BorderStroke(Dp.Hairline, DividerColor), + ) { + Box( + modifier = Modifier, + contentAlignment = Alignment.TopEnd, + ) { + if (imageVector != null) { + Icon( + imageVector, + modifier = Modifier + .padding(8.dp) + .size(72.dp) + .alpha(0.035f) + .align(Alignment.TopEnd), + contentDescription = null, + ) + } + Column( + modifier = Modifier + .padding(8.dp) + .widthIn(max = 128.dp), + verticalArrangement = Arrangement.spacedBy(8.dp), + ) { + Text( + text = title, + style = MaterialTheme.typography.titleSmall + .copy( + hyphens = Hyphens.Auto, + lineBreak = LineBreak.Heading, + ), + maxLines = 2, + overflow = TextOverflow.Ellipsis, + ) + ExpandedIfNotEmpty(valueOrNull = text) { + Text( + text = it, + style = MaterialTheme.typography.bodySmall + .copy( + hyphens = Hyphens.Auto, + lineBreak = LineBreak.Paragraph, + ), + color = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + maxLines = 4, + overflow = TextOverflow.Ellipsis, + ) + } + } + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/passkeys/PasskeysCredentialViewRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/passkeys/PasskeysCredentialViewRoute.kt new file mode 100644 index 00000000..1b510edb --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/passkeys/PasskeysCredentialViewRoute.kt @@ -0,0 +1,22 @@ +package com.artemchep.keyguard.feature.passkeys + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.common.model.DSecret +import com.artemchep.keyguard.feature.navigation.DialogRoute + +data class PasskeysCredentialViewRoute( + val args: Args, +) : DialogRoute { + data class Args( + val cipherId: String, + val credentialId: String, + val model: DSecret.Login.Fido2Credentials, + ) + + @Composable + override fun Content() { + PasskeysCredentialViewScreen( + args = args, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/passkeys/PasskeysCredentialViewScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/passkeys/PasskeysCredentialViewScreen.kt new file mode 100644 index 00000000..30e3a1a9 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/passkeys/PasskeysCredentialViewScreen.kt @@ -0,0 +1,384 @@ +package com.artemchep.keyguard.feature.passkeys + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ColumnScope +import androidx.compose.foundation.layout.ExperimentalLayoutApi +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.AccountCircle +import androidx.compose.material.icons.outlined.AlternateEmail +import androidx.compose.material.icons.outlined.Business +import androidx.compose.material.icons.outlined.Info +import androidx.compose.material.icons.outlined.Key +import androidx.compose.material.icons.outlined.Public +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.text.font.FontFamily +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.LocalAppMode +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.model.getOrNull +import com.artemchep.keyguard.feature.dialog.Dialog +import com.artemchep.keyguard.feature.home.vault.component.FlatItemTextContent2 +import com.artemchep.keyguard.feature.home.vault.component.Section +import com.artemchep.keyguard.feature.navigation.LocalNavigationController +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.DisabledEmphasisAlpha +import com.artemchep.keyguard.ui.FlatItemLayout +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.icons.IconBox +import com.artemchep.keyguard.ui.icons.KeyguardView +import com.artemchep.keyguard.ui.icons.icon +import com.artemchep.keyguard.ui.skeleton.SkeletonItem +import com.artemchep.keyguard.ui.skeleton.SkeletonSection +import com.artemchep.keyguard.ui.skeleton.SkeletonText +import com.artemchep.keyguard.ui.theme.Dimens +import com.artemchep.keyguard.ui.theme.combineAlpha +import dev.icerock.moko.resources.compose.stringResource + +@Composable +fun PasskeysCredentialViewScreen( + args: PasskeysCredentialViewRoute.Args, +) { + val loadableState = producePasskeysCredentialViewState( + args = args, + mode = LocalAppMode.current, + ) + PasskeysCredentialViewScreen( + loadableState = loadableState, + ) +} + +@OptIn(ExperimentalLayoutApi::class) +@Composable +fun PasskeysCredentialViewScreen( + loadableState: Loadable, +) { + Dialog( + icon = icon(Icons.Outlined.Key), + title = { + Text( + text = stringResource(Res.strings.passkey), + ) + }, + content = { + Column { + when (loadableState) { + is Loadable.Ok -> { + loadableState.value.content.fold( + ifLeft = { + ContentError( + exception = it, + ) + }, + ifRight = { + ContentOk( + state = it, + ) + }, + ) + } + + is Loadable.Loading -> { + ContentSkeleton() + } + } + } + }, + contentScrollable = true, + actions = { + val updatedOnClose by rememberUpdatedState(loadableState.getOrNull()?.onClose) + TextButton( + enabled = updatedOnClose != null, + onClick = { + updatedOnClose?.invoke() + }, + ) { + Text(stringResource(Res.strings.close)) + } + val onUse = loadableState.getOrNull()?.content?.getOrNull()?.onUse + if (onUse != null) { + val updatedOnUse by rememberUpdatedState(onUse) + TextButton( + onClick = { + updatedOnUse.invoke() + }, + ) { + Text(stringResource(Res.strings.passkey_use_short)) + } + } + }, + ) +} + +@Composable +private fun ColumnScope.ContentOk( + state: PasskeysCredentialViewState.Content, +) { + val navigationController by rememberUpdatedState(LocalNavigationController.current) + FlatItemLayout( + leading = { + Icon( + imageVector = Icons.Outlined.AccountCircle, + contentDescription = null, + ) + }, + content = { + FlatItemTextContent2( + title = { + Text( + text = stringResource(Res.strings.passkey_user_display_name), + ) + }, + text = { + val userDisplayName = state.model.userDisplayName + Text( + text = userDisplayName + ?: stringResource(Res.strings.empty_value), + color = if (userDisplayName != null) { + LocalContentColor.current + } else { + LocalContentColor.current + .combineAlpha(DisabledEmphasisAlpha) + }, + ) + }, + ) + }, + enabled = true, + ) + FlatItemLayout( + leading = { + Icon( + imageVector = Icons.Outlined.AlternateEmail, + contentDescription = null, + ) + }, + content = { + FlatItemTextContent2( + title = { + Text( + text = stringResource(Res.strings.passkey_user_username), + ) + }, + text = { + val userName = state.model.userName + Text( + text = userName + ?: stringResource(Res.strings.empty_value), + color = if (userName != null) { + LocalContentColor.current + } else { + LocalContentColor.current + .combineAlpha(DisabledEmphasisAlpha) + }, + ) + }, + ) + }, + enabled = true, + ) + Section( + text = stringResource(Res.strings.info), + ) + FlatItemLayout( + leading = { + IconBox(Icons.Outlined.Business) + }, + content = { + FlatItemTextContent2( + title = { + Text( + text = stringResource(Res.strings.passkey_relying_party), + ) + }, + text = { + val rpName = state.model.rpName + val rpId = state.model.rpId + Column { + Text( + text = rpName, + ) + Text( + text = rpId, + fontFamily = FontFamily.Monospace, + style = MaterialTheme.typography.bodyMedium, + ) + } + }, + ) + }, + trailing = { + IconButton( + onClick = { + val url = "https://www.w3.org/TR/webauthn-2/#relying-party" + val intent = NavigationIntent.NavigateToBrowser(url) + navigationController.queue(intent) + }, + ) { + Icon(Icons.Outlined.Info, null) + } + }, + enabled = true, + ) + FlatItemLayout( + leading = { + IconBox(Icons.Outlined.KeyguardView) + }, + content = { + FlatItemTextContent2( + title = { + Text( + text = stringResource(Res.strings.passkey_signature_counter), + ) + }, + text = { + val counter = state.model.counter?.toString() + Text( + text = counter + ?: stringResource(Res.strings.empty_value), + color = if (counter != null) { + LocalContentColor.current + } else { + LocalContentColor.current + .combineAlpha(DisabledEmphasisAlpha) + }, + ) + }, + ) + }, + trailing = { + IconButton( + onClick = { + val url = "https://www.w3.org/TR/webauthn-2/#signature-counter" + val intent = NavigationIntent.NavigateToBrowser(url) + navigationController.queue(intent) + }, + ) { + Icon(Icons.Outlined.Info, null) + } + }, + enabled = true, + ) + FlatItemLayout( + leading = { + IconBox(Icons.Outlined.Public) + }, + content = { + FlatItemTextContent2( + title = { + Text( + text = stringResource(Res.strings.passkey_discoverable), + ) + }, + text = { + val discoverable = state.model.discoverable + .let { discoverable -> + if (discoverable) { + stringResource(Res.strings.yes) + } else stringResource(Res.strings.no) + } + Text( + text = discoverable, + ) + }, + ) + }, + trailing = { + IconButton( + onClick = { + val url = "https://www.w3.org/TR/webauthn-2/#discoverable-credential" + val intent = NavigationIntent.NavigateToBrowser(url) + navigationController.queue(intent) + }, + ) { + Icon(Icons.Outlined.Info, null) + } + }, + enabled = true, + ) + Row( + modifier = Modifier + .fillMaxWidth() + .padding( + start = Dimens.horizontalPadding, + end = Dimens.horizontalPadding, + top = 16.dp, + ), + horizontalArrangement = Arrangement.Center, + ) { + Text( + text = state.createdAt, + textAlign = TextAlign.Center, + style = MaterialTheme.typography.labelMedium, + color = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + ) + } +} + +@Composable +private fun ColumnScope.ContentError( + exception: Throwable, +) { + val message = exception.localizedMessage + ?: exception.message + ?: "Something went wrong" + Text( + modifier = Modifier + .padding(horizontal = 16.dp) + .align(Alignment.CenterHorizontally), + text = message, + textAlign = TextAlign.Center, + style = MaterialTheme.typography.labelMedium, + color = MaterialTheme.colorScheme.error, + ) +} + +@Composable +private fun ColumnScope.ContentSkeleton( +) { + SkeletonItem( + titleWidthFraction = 0.6f, + textWidthFraction = null, + ) + SkeletonSection() + SkeletonItem( + titleWidthFraction = 0.45f, + textWidthFraction = 0.3f, + ) + SkeletonItem( + titleWidthFraction = 0.5f, + textWidthFraction = 0.4f, + ) + Row( + modifier = Modifier + .fillMaxWidth() + .padding( + start = Dimens.horizontalPadding, + end = Dimens.horizontalPadding, + top = 16.dp, + ), + horizontalArrangement = Arrangement.Center, + ) { + SkeletonText( + modifier = Modifier + .fillMaxWidth(0.8f), + style = MaterialTheme.typography.labelMedium, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/passkeys/PasskeysCredentialViewState.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/passkeys/PasskeysCredentialViewState.kt new file mode 100644 index 00000000..af6db622 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/passkeys/PasskeysCredentialViewState.kt @@ -0,0 +1,19 @@ +package com.artemchep.keyguard.feature.passkeys + +import androidx.compose.runtime.Immutable +import arrow.core.Either +import com.artemchep.keyguard.common.model.DSecret + +data class PasskeysCredentialViewState( + val content: Either, + val onClose: (() -> Unit)? = null, +) { + @Immutable + data class Content( + val model: DSecret.Login.Fido2Credentials, + val createdAt: String, + val onUse: (() -> Unit)? = null, + ) { + companion object + } +} \ No newline at end of file diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/passkeys/PasskeysCredentialViewStateProducer.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/passkeys/PasskeysCredentialViewStateProducer.kt new file mode 100644 index 00000000..b08f40c7 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/passkeys/PasskeysCredentialViewStateProducer.kt @@ -0,0 +1,106 @@ +package com.artemchep.keyguard.feature.passkeys + +import androidx.compose.runtime.Composable +import arrow.core.left +import arrow.core.right +import com.artemchep.keyguard.AppMode +import com.artemchep.keyguard.common.io.attempt +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.usecase.DateFormatter +import com.artemchep.keyguard.common.usecase.GetCiphers +import com.artemchep.keyguard.common.usecase.PasskeyTargetCheck +import com.artemchep.keyguard.feature.navigation.state.navigatePopSelf +import com.artemchep.keyguard.feature.navigation.state.produceScreenState +import com.artemchep.keyguard.res.Res +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.onStart +import org.kodein.di.compose.localDI +import org.kodein.di.direct +import org.kodein.di.instance + +@Composable +fun producePasskeysCredentialViewState( + args: PasskeysCredentialViewRoute.Args, + mode: AppMode, +) = with(localDI().direct) { + producePasskeysCredentialViewState( + args = args, + mode = mode, + getCiphers = instance(), + passkeyTargetCheck = instance(), + dateFormatter = instance(), + ) +} + +@Composable +fun producePasskeysCredentialViewState( + args: PasskeysCredentialViewRoute.Args, + mode: AppMode, + getCiphers: GetCiphers, + passkeyTargetCheck: PasskeyTargetCheck, + dateFormatter: DateFormatter, +): Loadable = produceScreenState( + key = "passkeys_credential_view", + initial = Loadable.Loading, + args = arrayOf(), +) { + val contentFlow = getCiphers() + .map { ciphers -> + val cipherOrNull = ciphers.firstOrNull { it.id == args.cipherId } + val credentialOrNull = cipherOrNull + ?.login + ?.fido2Credentials + ?.firstOrNull { it.credentialId == args.credentialId } + credentialOrNull + } + .onStart { + emit(args.model) + } + .map { credential -> + if (credential == null) { + val e = RuntimeException("Credential does not exist.") + return@map e.left() + } + + // If we are in the pick passkey mode then allow a use to use + // the passkey. + val onUse = if (mode is AppMode.PickPasskey) { + val matches = passkeyTargetCheck(credential, mode.target) + .attempt() + .bind() + .isRight { it } + if (matches) { + // lambda + { + mode.onComplete(credential) + } + } else { + null + } + } else { + null + } + + val createdAt = translate( + Res.strings.vault_view_passkey_created_at_label, + dateFormatter.formatDateTime(credential.creationDate), + ) + val content = PasskeysCredentialViewState.Content( + model = credential, + createdAt = createdAt, + onUse = onUse, + ) + content.right() + } + contentFlow + .map { contentResult -> + val state = PasskeysCredentialViewState( + content = contentResult, + onClose = { + navigatePopSelf() + }, + ) + Loadable.Ok(state) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/passkeys/directory/PasskeysServiceListRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/passkeys/directory/PasskeysServiceListRoute.kt new file mode 100644 index 00000000..9bfb06a7 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/passkeys/directory/PasskeysServiceListRoute.kt @@ -0,0 +1,41 @@ +package com.artemchep.keyguard.feature.passkeys.directory + +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Folder +import androidx.compose.material.icons.outlined.Key +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.feature.navigation.Route +import com.artemchep.keyguard.feature.navigation.state.TranslatorScope +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItemAction +import com.artemchep.keyguard.ui.icons.iconSmall + +object PasskeysServiceListRoute : Route { + fun passkeysActionOrNull( + translator: TranslatorScope, + navigate: (NavigationIntent) -> Unit, + ) = passkeysAction( + translator = translator, + navigate = navigate, + ) + + fun passkeysAction( + translator: TranslatorScope, + navigate: (NavigationIntent) -> Unit, + ) = FlatItemAction( + leading = iconSmall(Icons.Outlined.Folder, Icons.Outlined.Key), + title = translator.translate(Res.strings.passkeys_directory_title), + text = translator.translate(Res.strings.passkeys_directory_text), + onClick = { + val route = PasskeysServiceListRoute + val intent = NavigationIntent.NavigateToRoute(route) + navigate(intent) + }, + ) + + @Composable + override fun Content() { + PasskeysListScreen() + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/passkeys/directory/PasskeysServiceListScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/passkeys/directory/PasskeysServiceListScreen.kt new file mode 100644 index 00000000..90cb2a19 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/passkeys/directory/PasskeysServiceListScreen.kt @@ -0,0 +1,252 @@ +package com.artemchep.keyguard.feature.passkeys.directory + +import androidx.compose.foundation.ExperimentalFoundationApi +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.lazy.LazyListState +import androidx.compose.foundation.lazy.items +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.OpenInBrowser +import androidx.compose.material.pullrefresh.pullRefresh +import androidx.compose.material.pullrefresh.rememberPullRefreshState +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.IconButton +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.runtime.snapshotFlow +import androidx.compose.ui.Modifier +import androidx.compose.ui.input.nestedscroll.nestedScroll +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.model.flatMap +import com.artemchep.keyguard.common.model.getOrNull +import com.artemchep.keyguard.feature.EmptySearchView +import com.artemchep.keyguard.feature.ErrorView +import com.artemchep.keyguard.feature.home.vault.component.SearchTextField +import com.artemchep.keyguard.feature.navigation.LocalNavigationController +import com.artemchep.keyguard.feature.navigation.NavigationIcon +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.DefaultProgressBar +import com.artemchep.keyguard.ui.FlatItem +import com.artemchep.keyguard.ui.ScaffoldLazyColumn +import com.artemchep.keyguard.ui.focus.FocusRequester2 +import com.artemchep.keyguard.ui.focus.focusRequester2 +import com.artemchep.keyguard.ui.icons.IconBox +import com.artemchep.keyguard.ui.poweredby.URL_PASSKEYS +import com.artemchep.keyguard.ui.pulltosearch.PullToSearch +import com.artemchep.keyguard.ui.skeleton.SkeletonItem +import com.artemchep.keyguard.ui.toolbar.CustomToolbar +import com.artemchep.keyguard.ui.toolbar.content.CustomToolbarContent +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.filter +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.flow.withIndex + +@Composable +fun PasskeysListScreen( +) { + val loadableState = producePasskeysListState() + PasskeysListScreen( + loadableState = loadableState, + ) +} + +@OptIn(ExperimentalMaterial3Api::class, ExperimentalFoundationApi::class) +@Composable +fun PasskeysListScreen( + loadableState: Loadable, +) { + val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior() + val filterState = run { + val filterFlow = loadableState.getOrNull()?.filter + remember(filterFlow) { + filterFlow ?: MutableStateFlow(null) + }.collectAsState() + } + + val listRevision = + loadableState.getOrNull()?.content?.getOrNull()?.getOrNull()?.revision + val listState = remember { + LazyListState( + firstVisibleItemIndex = 0, + firstVisibleItemScrollOffset = 0, + ) + } + + LaunchedEffect(listRevision) { + // TODO: How do you wait till the layout state start to represent + // the actual data? + val listSize = + loadableState.getOrNull()?.content?.getOrNull()?.getOrNull()?.items?.size + snapshotFlow { listState.layoutInfo.totalItemsCount } + .withIndex() + .filter { + it.index > 0 || it.value == listSize + } + .first() + + listState.scrollToItem(0, 0) + } + + val focusRequester = remember { FocusRequester2() } + // Auto focus the text field + // on launch. + LaunchedEffect( + focusRequester, + filterState, + ) { + snapshotFlow { filterState.value } + .first { it?.query?.onChange != null } + delay(100L) + focusRequester.requestFocus() + } + + val pullRefreshState = rememberPullRefreshState( + refreshing = false, + onRefresh = { + focusRequester.requestFocus() + }, + ) + ScaffoldLazyColumn( + modifier = Modifier + .pullRefresh(pullRefreshState) + .nestedScroll(scrollBehavior.nestedScrollConnection), + topAppBarScrollBehavior = scrollBehavior, + topBar = { + CustomToolbar( + scrollBehavior = scrollBehavior, + ) { + Column { + CustomToolbarContent( + title = stringResource(Res.strings.passkeys_directory_title), + icon = { + NavigationIcon() + }, + actions = { + val updatedNavigationController by rememberUpdatedState( + LocalNavigationController.current, + ) + IconButton( + onClick = { + val intent = NavigationIntent.NavigateToBrowser(URL_PASSKEYS) + updatedNavigationController.queue(intent) + }, + ) { + IconBox(Icons.Outlined.OpenInBrowser) + } + }, + ) + + val query = filterState.value?.query + val queryText = query?.state?.value.orEmpty() + SearchTextField( + modifier = Modifier + .focusRequester2(focusRequester), + text = queryText, + placeholder = stringResource(Res.strings.passkeys_directory_search_placeholder), + searchIcon = false, + leading = {}, + trailing = {}, + onTextChange = query?.onChange, + onGoClick = null, + ) + } + } + }, + pullRefreshState = pullRefreshState, + overlay = { + val filterRevision = filterState.value?.revision + DefaultProgressBar( + visible = listRevision != null && filterRevision != null && + listRevision != filterRevision, + ) + + PullToSearch( + modifier = Modifier + .padding(contentPadding.value), + pullRefreshState = pullRefreshState, + ) + }, + listState = listState, + ) { + val contentState = loadableState + .flatMap { it.content } + when (contentState) { + is Loadable.Loading -> { + for (i in 1..3) { + item("skeleton.$i") { + SkeletonItem() + } + } + } + + is Loadable.Ok -> { + contentState.value.fold( + ifLeft = { e -> + item("error") { + ErrorView( + text = { + Text(text = "Failed to load app list!") + }, + exception = e, + ) + } + }, + ifRight = { content -> + val items = content.items + if (items.isEmpty()) { + item("empty") { + NoItemsPlaceholder() + } + } + + items( + items = items, + key = { it.key }, + ) { item -> + AppItem( + modifier = Modifier + .animateItemPlacement(), + item = item, + ) + } + }, + ) + } + } + } +} + +@Composable +private fun NoItemsPlaceholder( + modifier: Modifier = Modifier, +) { + EmptySearchView( + modifier = modifier, + ) +} + +@Composable +private fun AppItem( + modifier: Modifier, + item: PasskeysServiceListState.Item, +) { + FlatItem( + modifier = modifier, + leading = { + item.icon() + }, + title = { + Text(item.name) + }, + onClick = item.onClick, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/passkeys/directory/PasskeysServiceListState.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/passkeys/directory/PasskeysServiceListState.kt new file mode 100644 index 00000000..3986e420 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/passkeys/directory/PasskeysServiceListState.kt @@ -0,0 +1,41 @@ +package com.artemchep.keyguard.feature.passkeys.directory + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.Immutable +import androidx.compose.ui.text.AnnotatedString +import arrow.core.Either +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.service.passkey.PassKeyServiceInfo +import com.artemchep.keyguard.feature.auth.common.TextFieldModel2 +import kotlinx.coroutines.flow.StateFlow + +data class PasskeysServiceListState( + val filter: StateFlow, + val content: Loadable>, +) { + @Immutable + data class Filter( + val revision: Int, + val query: TextFieldModel2, + ) { + companion object + } + + @Immutable + data class Content( + val revision: Int, + val items: List, + ) { + companion object + } + + @Immutable + data class Item( + val key: String, + val icon: @Composable () -> Unit, + val name: AnnotatedString, + val text: String, + val data: PassKeyServiceInfo, + val onClick: (() -> Unit)? = null, + ) +} \ No newline at end of file diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/passkeys/directory/PasskeysServiceListStateProducer.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/passkeys/directory/PasskeysServiceListStateProducer.kt new file mode 100644 index 00000000..5513b0ee --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/passkeys/directory/PasskeysServiceListStateProducer.kt @@ -0,0 +1,156 @@ +package com.artemchep.keyguard.feature.passkeys.directory + +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.text.AnnotatedString +import androidx.compose.ui.unit.dp +import arrow.core.partially1 +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.service.passkey.PassKeyService +import com.artemchep.keyguard.common.service.passkey.PassKeyServiceInfo +import com.artemchep.keyguard.feature.crashlytics.crashlyticsAttempt +import com.artemchep.keyguard.feature.favicon.FaviconImage +import com.artemchep.keyguard.feature.favicon.FaviconUrl +import com.artemchep.keyguard.feature.home.vault.search.IndexedText +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.feature.navigation.state.produceScreenState +import com.artemchep.keyguard.feature.search.search.IndexedModel +import com.artemchep.keyguard.feature.search.search.mapSearch +import com.artemchep.keyguard.feature.search.search.searchFilter +import com.artemchep.keyguard.feature.search.search.searchQueryHandle +import kotlinx.coroutines.flow.asFlow +import kotlinx.coroutines.flow.map +import org.kodein.di.compose.localDI +import org.kodein.di.direct +import org.kodein.di.instance + +private class PasskeysServiceListUiException( + msg: String, + cause: Throwable, +) : RuntimeException(msg, cause) + +@Composable +fun producePasskeysListState( +) = with(localDI().direct) { + producePasskeysListState( + passKeyService = instance(), + ) +} + +@Composable +fun producePasskeysListState( + passKeyService: PassKeyService, +): Loadable = produceScreenState( + key = "passkeys_service_list", + initial = Loadable.Loading, + args = arrayOf(), +) { + val queryHandle = searchQueryHandle("query") + val queryFlow = searchFilter(queryHandle) { model, revision -> + PasskeysServiceListState.Filter( + revision = revision, + query = model, + ) + } + + val modelComparator = Comparator { a: PassKeyServiceInfo, b: PassKeyServiceInfo -> + a.name.compareTo(b.name, ignoreCase = true) + } + + fun onClick(model: PassKeyServiceInfo) { + val route = PasskeysServiceViewRoute( + args = PasskeysServiceViewRoute.Args( + model = model, + ), + ) + val intent = NavigationIntent.NavigateToRoute(route) + navigate(intent) + } + + fun List.toItems(): List { + val nameCollisions = mutableMapOf() + return this + .sortedWith(modelComparator) + .map { serviceInfo -> + val key = kotlin.run { + val newNameCollisionCounter = nameCollisions + .getOrDefault(serviceInfo.name, 0) + 1 + nameCollisions[serviceInfo.name] = + newNameCollisionCounter + serviceInfo.name + ":" + newNameCollisionCounter + } + val faviconUrl = serviceInfo.documentation?.let { url -> + FaviconUrl( + serverId = null, + url = url, + ) + } + PasskeysServiceListState.Item( + key = key, + icon = { + FaviconImage( + modifier = Modifier + .size(24.dp) + .clip(CircleShape), + imageModel = { faviconUrl }, + ) + }, + name = AnnotatedString(serviceInfo.name), + text = serviceInfo.domain, + data = serviceInfo, + onClick = ::onClick + .partially1(serviceInfo), + ) + } + } + + val itemsFlow = passKeyService.get() + .asFlow() + .map { apps -> + apps + .toItems() + // Index for the search. + .map { item -> + IndexedModel( + model = item, + indexedText = IndexedText.invoke(item.name.text), + ) + } + } + .mapSearch( + handle = queryHandle, + ) { item, result -> + // Replace the origin text with the one with + // search decor applied to it. + item.copy(name = result.highlightedText) + } + val contentFlow = itemsFlow + .crashlyticsAttempt { e -> + val msg = "Failed to get the passkeys list!" + PasskeysServiceListUiException( + msg = msg, + cause = e, + ) + } + .map { result -> + val contentOrException = result + .map { (items, revision) -> + PasskeysServiceListState.Content( + revision = revision, + items = items, + ) + } + Loadable.Ok(contentOrException) + } + contentFlow + .map { content -> + val state = PasskeysServiceListState( + filter = queryFlow, + content = content, + ) + Loadable.Ok(state) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/passkeys/directory/PasskeysServiceViewRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/passkeys/directory/PasskeysServiceViewRoute.kt new file mode 100644 index 00000000..74cd59ce --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/passkeys/directory/PasskeysServiceViewRoute.kt @@ -0,0 +1,20 @@ +package com.artemchep.keyguard.feature.passkeys.directory + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.common.service.passkey.PassKeyServiceInfo +import com.artemchep.keyguard.feature.navigation.DialogRoute + +data class PasskeysServiceViewRoute( + val args: Args, +) : DialogRoute { + data class Args( + val model: PassKeyServiceInfo, + ) + + @Composable + override fun Content() { + PasskeysViewScreen( + args = args, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/passkeys/directory/PasskeysServiceViewScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/passkeys/directory/PasskeysServiceViewScreen.kt new file mode 100644 index 00000000..732e6ed3 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/passkeys/directory/PasskeysServiceViewScreen.kt @@ -0,0 +1,192 @@ +package com.artemchep.keyguard.feature.passkeys.directory + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ExperimentalLayoutApi +import androidx.compose.foundation.layout.FlowRow +import androidx.compose.foundation.layout.FlowRowScope +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Key +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.model.getOrNull +import com.artemchep.keyguard.feature.dialog.Dialog +import com.artemchep.keyguard.feature.tfa.directory.FlatLaunchBrowserItem +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.DisabledEmphasisAlpha +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.icons.icon +import com.artemchep.keyguard.ui.markdown.Md +import com.artemchep.keyguard.ui.poweredby.PoweredByPasskeys +import com.artemchep.keyguard.ui.skeleton.SkeletonText +import com.artemchep.keyguard.ui.theme.Dimens +import com.artemchep.keyguard.ui.theme.combineAlpha +import com.artemchep.keyguard.ui.theme.monoFontFamily +import dev.icerock.moko.resources.compose.stringResource + +@Composable +fun PasskeysViewScreen( + args: PasskeysServiceViewRoute.Args, +) { + val loadableState = producePasskeysServiceViewState( + args = args, + ) + PasskeysViewScreen( + loadableState = loadableState, + ) +} + +@OptIn(ExperimentalLayoutApi::class) +@Composable +fun PasskeysViewScreen( + loadableState: Loadable, +) { + Dialog( + icon = icon(Icons.Outlined.Key), + title = { + when (loadableState) { + is Loadable.Loading -> { + SkeletonText( + modifier = Modifier + .width(72.dp), + ) + } + + is Loadable.Ok -> { + val title = loadableState.value.content.getOrNull() + ?.model?.name.orEmpty() + Text( + text = title, + ) + } + } + + Text( + text = stringResource(Res.strings.passkeys_directory_title), + style = MaterialTheme.typography.titleSmall, + color = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + ) + + HeaderChipContainer( + modifier = Modifier + .padding(top = 4.dp), + ) { + val chipModifier = Modifier + .background( + color = LocalContentColor.current + .combineAlpha(DisabledEmphasisAlpha) + .combineAlpha(DisabledEmphasisAlpha), + shape = MaterialTheme.shapes.small, + ) + .padding( + horizontal = 4.dp, + vertical = 2.dp, + ) + val chipTextStyle = MaterialTheme.typography.labelSmall + when (loadableState) { + is Loadable.Loading -> { + repeat(2) { + SkeletonText( + modifier = chipModifier + .width(48.dp), + style = chipTextStyle, + ) + } + } + + is Loadable.Ok -> { + val types = loadableState.value.content.getOrNull() + ?.model?.features + types?.forEach { type -> + Text( + modifier = chipModifier, + text = type, + style = chipTextStyle, + fontFamily = monoFontFamily, + ) + } + } + } + } + }, + content = { + Column { + val state = loadableState.getOrNull()?.content?.getOrNull() + val notes = state?.model?.notes + if (notes != null) { + Md( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding), + markdown = notes, + ) + Spacer( + modifier = Modifier + .height(16.dp), + ) + } + + val documentationUrl = state?.model?.documentation + if (documentationUrl != null) { + FlatLaunchBrowserItem( + title = stringResource(Res.strings.uri_action_launch_docs_title), + url = documentationUrl, + ) + } + + Spacer( + modifier = Modifier + .height(8.dp), + ) + + PoweredByPasskeys( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding) + .fillMaxWidth(), + ) + } + }, + contentScrollable = true, + actions = { + val updatedOnClose by rememberUpdatedState(loadableState.getOrNull()?.onClose) + TextButton( + enabled = updatedOnClose != null, + onClick = { + updatedOnClose?.invoke() + }, + ) { + Text(stringResource(Res.strings.close)) + } + }, + ) +} + +@OptIn(ExperimentalLayoutApi::class) +@Composable +private fun HeaderChipContainer( + modifier: Modifier = Modifier, + content: @Composable FlowRowScope.() -> Unit, +) { + FlowRow( + modifier = modifier, + horizontalArrangement = Arrangement.spacedBy(8.dp, Alignment.CenterHorizontally), + verticalArrangement = Arrangement.spacedBy(8.dp), + ) { + content() + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/passkeys/directory/PasskeysServiceViewState.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/passkeys/directory/PasskeysServiceViewState.kt new file mode 100644 index 00000000..41d6138f --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/passkeys/directory/PasskeysServiceViewState.kt @@ -0,0 +1,17 @@ +package com.artemchep.keyguard.feature.passkeys.directory + +import androidx.compose.runtime.Immutable +import arrow.core.Either +import com.artemchep.keyguard.common.service.passkey.PassKeyServiceInfo + +data class PasskeysServiceViewState( + val content: Either, + val onClose: (() -> Unit)? = null, +) { + @Immutable + data class Content( + val model: PassKeyServiceInfo, + ) { + companion object + } +} \ No newline at end of file diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/passkeys/directory/PasskeysServiceViewStateProducer.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/passkeys/directory/PasskeysServiceViewStateProducer.kt new file mode 100644 index 00000000..ec2bc030 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/passkeys/directory/PasskeysServiceViewStateProducer.kt @@ -0,0 +1,44 @@ +package com.artemchep.keyguard.feature.passkeys.directory + +import androidx.compose.runtime.Composable +import arrow.core.right +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.service.passkey.PassKeyService +import com.artemchep.keyguard.feature.navigation.state.navigatePopSelf +import com.artemchep.keyguard.feature.navigation.state.produceScreenState +import kotlinx.coroutines.flow.flowOf +import org.kodein.di.compose.localDI +import org.kodein.di.direct +import org.kodein.di.instance + +@Composable +fun producePasskeysServiceViewState( + args: PasskeysServiceViewRoute.Args, +) = with(localDI().direct) { + producePasskeysServiceViewState( + args = args, + passKeyService = instance(), + ) +} + +@Composable +fun producePasskeysServiceViewState( + args: PasskeysServiceViewRoute.Args, + passKeyService: PassKeyService, +): Loadable = produceScreenState( + key = "passkeys_service_view", + initial = Loadable.Loading, + args = arrayOf(), +) { + val content = PasskeysServiceViewState.Content( + model = args.model, + ) + val state = PasskeysServiceViewState( + content = content + .right(), + onClose = { + navigatePopSelf() + }, + ) + flowOf(Loadable.Ok(state)) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/passwordleak/PasswordLeakRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/passwordleak/PasswordLeakRoute.kt new file mode 100644 index 00000000..39220c4b --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/passwordleak/PasswordLeakRoute.kt @@ -0,0 +1,56 @@ +package com.artemchep.keyguard.feature.passwordleak + +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.FactCheck +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.navigation.DialogRoute +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.feature.navigation.state.TranslatorScope +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItemAction +import com.artemchep.keyguard.ui.icons.icon + +data class PasswordLeakRoute( + val args: Args, +) : DialogRoute { + companion object { + fun checkBreachesPasswordActionOrNull( + translator: TranslatorScope, + password: String, + navigate: (NavigationIntent) -> Unit, + ) = checkBreachesPasswordAction( + translator = translator, + password = password, + navigate = navigate, + ) + + fun checkBreachesPasswordAction( + translator: TranslatorScope, + password: String, + navigate: (NavigationIntent) -> Unit, + ) = FlatItemAction( + leading = icon(Icons.Outlined.FactCheck), + title = translator.translate(Res.strings.password_action_check_data_breach_title), + onClick = { + val route = PasswordLeakRoute( + args = Args( + password = password, + ), + ) + val intent = NavigationIntent.NavigateToRoute(route) + navigate(intent) + }, + ) + } + + data class Args( + val password: String, + ) + + @Composable + override fun Content() { + PasswordLeakScreen( + args = args, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/passwordleak/PasswordLeakScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/passwordleak/PasswordLeakScreen.kt new file mode 100644 index 00000000..e7e10138 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/passwordleak/PasswordLeakScreen.kt @@ -0,0 +1,165 @@ +package com.artemchep.keyguard.feature.passwordleak + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ColumnScope +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.FactCheck +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.Modifier +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.model.getOrNull +import com.artemchep.keyguard.common.usecase.NumberFormatter +import com.artemchep.keyguard.feature.dialog.Dialog +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItem +import com.artemchep.keyguard.ui.FlatSimpleNote +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.SimpleNote +import com.artemchep.keyguard.ui.icons.icon +import com.artemchep.keyguard.ui.poweredby.PoweredByHaveibeenpwned +import com.artemchep.keyguard.ui.skeleton.SkeletonText +import com.artemchep.keyguard.ui.theme.Dimens +import com.artemchep.keyguard.ui.theme.combineAlpha +import dev.icerock.moko.resources.compose.stringResource +import org.kodein.di.compose.rememberInstance + +@Composable +fun PasswordLeakScreen( + args: PasswordLeakRoute.Args, +) { + val loadableState = producePasswordLeakState( + args = args, + ) + Dialog( + icon = icon(Icons.Outlined.FactCheck), + title = { + Text(stringResource(Res.strings.passwordleak_title)) + }, + content = { + Column { + Text( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding), + text = stringResource(Res.strings.passwordleak_note), + style = MaterialTheme.typography.bodySmall, + color = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + ) + Spacer( + modifier = Modifier + .height(16.dp), + ) + + when (loadableState) { + is Loadable.Loading -> { + ContentSkeleton() + } + + is Loadable.Ok -> { + Content( + state = loadableState.value, + ) + } + } + + Spacer( + modifier = Modifier + .height(4.dp), + ) + + PoweredByHaveibeenpwned( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding) + .fillMaxWidth(), + ) + } + }, + contentScrollable = true, + actions = { + val updatedOnClose by rememberUpdatedState(loadableState.getOrNull()?.onClose) + TextButton( + enabled = updatedOnClose != null, + onClick = { + updatedOnClose?.invoke() + }, + ) { + Text(stringResource(Res.strings.close)) + } + }, + ) +} + +@Composable +private fun ColumnScope.ContentSkeleton() { + FlatItem( + title = { + SkeletonText( + modifier = Modifier + .fillMaxWidth(0.8f), + ) + }, + text = { + SkeletonText( + modifier = Modifier + .fillMaxWidth(0.6f), + ) + }, + enabled = true, + elevation = 1.dp, + ) +} + +@Composable +private fun ColumnScope.Content( + state: PasswordLeakState, +) { + val leaks = state.content.getOrNull()?.occurrences + if (leaks == null) { + FlatSimpleNote( + type = SimpleNote.Type.WARNING, + text = stringResource(Res.strings.passwordleak_failed_to_load_status_text), + ) + return + } + + if (leaks > 0) { + FlatSimpleNote( + type = SimpleNote.Type.WARNING, + title = stringResource(Res.strings.passwordleak_occurrences_found_title), + text = stringResource(Res.strings.passwordleak_occurrences_found_text), + ) + Spacer( + modifier = Modifier + .height(8.dp), + ) + val numberFormatter: NumberFormatter by rememberInstance() + Text( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding), + text = stringResource( + Res.plurals.passwordleak_occurrences_count_plural, + leaks, + numberFormatter.formatNumber(leaks), + ), + style = MaterialTheme.typography.labelSmall, + fontWeight = FontWeight.Black, + ) + } else { + FlatSimpleNote( + type = SimpleNote.Type.OK, + title = stringResource(Res.strings.passwordleak_occurrences_not_found_title), + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/passwordleak/PasswordLeakState.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/passwordleak/PasswordLeakState.kt new file mode 100644 index 00000000..09e5af33 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/passwordleak/PasswordLeakState.kt @@ -0,0 +1,15 @@ +package com.artemchep.keyguard.feature.passwordleak + +import androidx.compose.runtime.Immutable +import arrow.core.Either + +@Immutable +data class PasswordLeakState( + val content: Either, + val onClose: (() -> Unit)? = null, +) { + @Immutable + data class Content( + val occurrences: Int, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/passwordleak/PasswordLeakStateProducer.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/passwordleak/PasswordLeakStateProducer.kt new file mode 100644 index 00000000..c160e802 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/passwordleak/PasswordLeakStateProducer.kt @@ -0,0 +1,57 @@ +package com.artemchep.keyguard.feature.passwordleak + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.common.io.attempt +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.io.map +import com.artemchep.keyguard.common.model.CheckPasswordLeakRequest +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.usecase.CheckPasswordLeak +import com.artemchep.keyguard.feature.navigation.state.navigatePopSelf +import com.artemchep.keyguard.feature.navigation.state.produceScreenState +import kotlinx.coroutines.flow.flowOf +import org.kodein.di.compose.localDI +import org.kodein.di.direct +import org.kodein.di.instance + +@Composable +fun producePasswordLeakState( + args: PasswordLeakRoute.Args, +) = with(localDI().direct) { + producePasswordLeakState( + args = args, + checkPasswordLeak = instance(), + ) +} + +@Composable +fun producePasswordLeakState( + args: PasswordLeakRoute.Args, + checkPasswordLeak: CheckPasswordLeak, +): Loadable = produceScreenState( + key = "password_leak", + initial = Loadable.Loading, + args = arrayOf( + checkPasswordLeak, + ), +) { + val request = CheckPasswordLeakRequest( + password = args.password, + ) + val content = checkPasswordLeak(request) + .map { occurrences -> + PasswordLeakState.Content( + occurrences = occurrences, + ) + } + .attempt() + .bind() + + val state = PasswordLeakState( + content = content, + onClose = { + navigatePopSelf() + }, + ) + flowOf(Loadable.Ok(state)) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/qr/ScanQrButton.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/qr/ScanQrButton.kt new file mode 100644 index 00000000..a89f4b99 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/qr/ScanQrButton.kt @@ -0,0 +1,39 @@ +package com.artemchep.keyguard.feature.qr + +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.QrCodeScanner +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberUpdatedState +import com.artemchep.keyguard.feature.navigation.LocalNavigationController +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.feature.navigation.registerRouteResultReceiver + +@Composable +fun ScanQrButton( + onValueChange: ((String) -> Unit)? = null, +) { + val updatedOnValueChange by rememberUpdatedState(onValueChange) + val controller by rememberUpdatedState(LocalNavigationController.current) + IconButton( + enabled = onValueChange != null, + onClick = { + val route = registerRouteResultReceiver(ScanQrRoute) { rawValue -> + controller.queue(NavigationIntent.Pop) + // feed the result back + updatedOnValueChange?.invoke(rawValue) + } + val intent = NavigationIntent.NavigateToRoute( + route = route, + ) + controller.queue(intent) + }, + ) { + Icon( + imageVector = Icons.Outlined.QrCodeScanner, + contentDescription = null, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/qr/ScanQrRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/qr/ScanQrRoute.kt new file mode 100644 index 00000000..3aea26d4 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/qr/ScanQrRoute.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.feature.qr + +import com.artemchep.keyguard.feature.navigation.RouteForResult + +expect object ScanQrRoute : RouteForResult diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/search/EmptyItem.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/search/EmptyItem.kt new file mode 100644 index 00000000..a42d729b --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/search/EmptyItem.kt @@ -0,0 +1,30 @@ +package com.artemchep.keyguard.feature.search + +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.theme.Dimens +import com.artemchep.keyguard.ui.theme.combineAlpha + +@Composable +fun EmptyItem( + text: String, + modifier: Modifier = Modifier, +) { + Text( + modifier = modifier + .padding( + horizontal = Dimens.horizontalPadding, + vertical = 8.dp, + ), + text = text, + color = LocalContentColor.current + .combineAlpha(alpha = MediumEmphasisAlpha), + style = MaterialTheme.typography.labelMedium, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/search/component/DropdownButton.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/search/component/DropdownButton.kt new file mode 100644 index 00000000..5d40d8ae --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/search/component/DropdownButton.kt @@ -0,0 +1,108 @@ +package com.artemchep.keyguard.feature.search.component + +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.ColumnScope +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.widthIn +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material3.DropdownMenu +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.MaterialTheme +import androidx.compose.runtime.Composable +import androidx.compose.runtime.SideEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.ui.DropdownMinWidth +import com.artemchep.keyguard.ui.ExpandedIfNotEmptyForRow +import com.artemchep.keyguard.ui.theme.badgeContainer + +@Composable +fun DropdownButton( + modifier: Modifier = Modifier, + icon: ImageVector, + title: String, + items: List, + onClear: (() -> Unit)?, + content: @Composable ColumnScope.() -> Unit, +) { + var isExpanded by remember { mutableStateOf(false) } + SideEffect { + // Filters can not be shown if there's no content + // available. Automatically hide the dropdown. + if (items.isEmpty() && isExpanded) { + isExpanded = false + } + } + + Box( + modifier = modifier, + ) { + val visible = items.isNotEmpty() + ExpandedIfNotEmptyForRow( + valueOrNull = Unit.takeIf { visible }, + ) { + IconButton( + modifier = Modifier, + enabled = items.isNotEmpty(), + onClick = { + isExpanded = !isExpanded + }, + ) { + Box { + Icon(icon, null) + AnimatedVisibility( + modifier = Modifier + .size(8.dp) + .align(Alignment.TopEnd), + visible = onClear != null, + ) { + Box( + modifier = Modifier + .fillMaxSize() + .background( + color = MaterialTheme.colorScheme.badgeContainer, + shape = CircleShape, + ), + ) + } + } + } + } + + // Inject the dropdown popup to the bottom of the + // content. + val onDismissRequest = { + isExpanded = false + } + DropdownMenu( + modifier = Modifier + .widthIn( + min = DropdownMinWidth, + max = 320.dp, + ) + .fillMaxWidth(), + expanded = isExpanded, + onDismissRequest = onDismissRequest, + ) { + DropdownHeader( + modifier = Modifier + .fillMaxWidth(), + title = title, + onClear = onClear, + ) + + content() + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/search/component/DropdownHeader.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/search/component/DropdownHeader.kt new file mode 100644 index 00000000..85628528 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/search/component/DropdownHeader.kt @@ -0,0 +1,71 @@ +package com.artemchep.keyguard.feature.search.component + +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.heightIn +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Clear +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.ExpandedIfNotEmptyForRow +import com.artemchep.keyguard.ui.theme.Dimens +import dev.icerock.moko.resources.compose.stringResource + +@Composable +fun DropdownHeader( + title: String, + onClear: (() -> Unit)?, + modifier: Modifier = Modifier, +) { + Row( + modifier = modifier + .heightIn(min = 56.dp), + verticalAlignment = Alignment.CenterVertically, + ) { + Text( + modifier = Modifier + .weight(1f) + .padding(horizontal = Dimens.horizontalPadding), + text = title, + style = MaterialTheme.typography.titleMedium, + ) + + val updatedOnClear by rememberUpdatedState(onClear) + ExpandedIfNotEmptyForRow( + valueOrNull = onClear, + ) { + TextButton( + onClick = { + updatedOnClear?.invoke() + }, + ) { + Icon( + imageVector = Icons.Outlined.Clear, + contentDescription = null, + ) + Spacer( + modifier = Modifier + .width(Dimens.buttonIconPadding), + ) + Text( + text = stringResource(Res.strings.reset), + ) + } + } + Spacer( + modifier = Modifier + .width(8.dp), + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/search/filter/FilterButton.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/search/filter/FilterButton.kt new file mode 100644 index 00000000..1e68772d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/search/filter/FilterButton.kt @@ -0,0 +1,38 @@ +package com.artemchep.keyguard.feature.search.filter + +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.FilterAlt +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import com.artemchep.keyguard.feature.search.component.DropdownButton +import com.artemchep.keyguard.feature.search.filter.component.VaultHomeScreenFilterPaneNumberOfItems +import com.artemchep.keyguard.feature.search.filter.model.FilterItemModel +import com.artemchep.keyguard.res.Res +import dev.icerock.moko.resources.compose.stringResource + +@Composable +fun FilterButton( + modifier: Modifier = Modifier, + count: Int?, + items: List, + onClear: (() -> Unit)?, +) { + DropdownButton( + modifier = modifier, + icon = Icons.Outlined.FilterAlt, + title = stringResource(Res.strings.filter_header_title), + items = items, + onClear = onClear, + ) { + VaultHomeScreenFilterPaneNumberOfItems( + count = count, + ) + + FilterItems( + items = items, + predicate = { + !it.id.startsWith("custom") + }, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/search/filter/FilterItems.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/search/filter/FilterItems.kt new file mode 100644 index 00000000..d541bb4d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/search/filter/FilterItems.kt @@ -0,0 +1,86 @@ +package com.artemchep.keyguard.feature.search.filter + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.ColumnScope +import androidx.compose.foundation.layout.ExperimentalLayoutApi +import androidx.compose.foundation.layout.FlowRow +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.runtime.Composable +import androidx.compose.runtime.key +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.times +import com.artemchep.keyguard.feature.search.EmptyItem +import com.artemchep.keyguard.feature.search.filter.component.FilterItemComposable +import com.artemchep.keyguard.feature.search.filter.component.FilterSectionComposable +import com.artemchep.keyguard.feature.search.filter.model.FilterItemModel +import com.artemchep.keyguard.res.Res +import dev.icerock.moko.resources.compose.stringResource + +@OptIn(ExperimentalLayoutApi::class) +@Composable +fun ColumnScope.FilterItems( + items: List, + predicate: (FilterItemModel) -> Boolean = { true }, +) { + if (items.isEmpty()) { + EmptyItem( + text = stringResource(Res.strings.filter_empty_label), + ) + } + + FlowRow( + modifier = Modifier + .padding(horizontal = 8.dp), + horizontalArrangement = Arrangement.spacedBy(8.dp), + verticalArrangement = Arrangement.spacedBy(8.dp), + ) { + items.forEach { item -> + if (!predicate(item)) { + return@forEach + } + key(item.id) { + when (item) { + is FilterItemModel.Item -> FilterItemItem(item) + is FilterItemModel.Section -> FilterItemSection(item) + } + } + } + } +} + +@Composable +private fun FilterItemItem( + item: FilterItemModel.Item, +) { + val indent = item.indent * 16.dp + FilterItemComposable( + modifier = Modifier + .padding(start = indent) + .then( + if (item.fill) { + Modifier + .fillMaxWidth() + } else { + Modifier + }, + ), + checked = item.checked, + leading = item.leading, + title = item.title, + text = item.text, + onClick = item.onClick, + ) +} + +@Composable +private fun FilterItemSection( + item: FilterItemModel.Section, +) { + FilterSectionComposable( + expanded = item.expanded, + title = item.text, + onClick = item.onClick, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/search/filter/FilterScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/search/filter/FilterScreen.kt new file mode 100644 index 00000000..f4f4b3eb --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/search/filter/FilterScreen.kt @@ -0,0 +1,81 @@ +package com.artemchep.keyguard.feature.search.filter + +import androidx.compose.foundation.layout.RowScope +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Clear +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.runtime.Composable +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.Modifier +import androidx.compose.ui.input.nestedscroll.nestedScroll +import com.artemchep.keyguard.feature.search.filter.component.VaultHomeScreenFilterPaneNumberOfItems +import com.artemchep.keyguard.feature.search.filter.model.FilterItemModel +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.DefaultFab +import com.artemchep.keyguard.ui.FabState +import com.artemchep.keyguard.ui.ScaffoldColumn +import com.artemchep.keyguard.ui.icons.IconBox +import com.artemchep.keyguard.ui.toolbar.SmallToolbar +import dev.icerock.moko.resources.compose.stringResource + +@Composable +fun FilterScreen( + modifier: Modifier = Modifier, + count: Int?, + items: List, + onClear: (() -> Unit)?, + actions: @Composable RowScope.() -> Unit, +) { + val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior() + ScaffoldColumn( + modifier = modifier + .nestedScroll(scrollBehavior.nestedScrollConnection), + topAppBarScrollBehavior = scrollBehavior, + topBar = { + SmallToolbar( + title = { + Text( + text = stringResource(Res.strings.filter_header_title), + style = MaterialTheme.typography.titleMedium, + ) + }, + actions = actions, + scrollBehavior = scrollBehavior, + ) + }, + floatingActionState = run { + val fabState = if (onClear != null) { + FabState( + onClick = onClear, + model = null, + ) + } else { + null + } + rememberUpdatedState(newValue = fabState) + }, + floatingActionButton = { + DefaultFab( + icon = { + IconBox(main = Icons.Outlined.Clear) + }, + text = { + Text( + text = stringResource(Res.strings.reset), + ) + }, + color = MaterialTheme.colorScheme.secondaryContainer, + ) + }, + ) { + VaultHomeScreenFilterPaneNumberOfItems( + count = count, + ) + + FilterItems( + items = items, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/search/filter/component/FilterItem.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/search/filter/component/FilterItem.kt new file mode 100644 index 00000000..d1aa82be --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/search/filter/component/FilterItem.kt @@ -0,0 +1,142 @@ +package com.artemchep.keyguard.feature.search.filter.component + +import androidx.compose.foundation.BorderStroke +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.heightIn +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.semantics.Role +import androidx.compose.ui.semantics.role +import androidx.compose.ui.semantics.semantics +import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.ui.DisabledEmphasisAlpha +import com.artemchep.keyguard.ui.ExpandedIfNotEmpty +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.theme.combineAlpha +import com.artemchep.keyguard.ui.theme.selectedContainer +import com.artemchep.keyguard.ui.util.DividerColor + +@Composable +fun FilterItemComposable( + modifier: Modifier = Modifier, + checked: Boolean, + leading: (@Composable () -> Unit)?, + title: String, + text: String?, + onClick: (() -> Unit)?, +) { + FilterItemLayout( + modifier = modifier, + checked = checked, + leading = leading, + content = { + Text( + title, + maxLines = 1, + overflow = TextOverflow.Ellipsis, + style = MaterialTheme.typography.labelLarge, + ) + val summaryOrNull = text?.takeUnless { it.isBlank() } + ExpandedIfNotEmpty(valueOrNull = summaryOrNull) { summary -> + Text( + summary, + maxLines = 2, + overflow = TextOverflow.Ellipsis, + style = MaterialTheme.typography.labelSmall, + color = LocalContentColor.current + .combineAlpha(alpha = MediumEmphasisAlpha), + ) + } + }, + onClick = onClick, + ) +} + +@Composable +fun FilterItemLayout( + modifier: Modifier = Modifier, + checked: Boolean, + leading: (@Composable () -> Unit)?, + content: @Composable () -> Unit, + onClick: (() -> Unit)?, + enabled: Boolean = onClick != null, +) { + val updatedOnClick by rememberUpdatedState(onClick) + + val backgroundColor = + if (checked) { + MaterialTheme.colorScheme.selectedContainer + } else MaterialTheme.colorScheme.surface + Surface( + modifier = modifier + .semantics { role = Role.Checkbox }, + border = if (checked) null else BorderStroke(Dp.Hairline, DividerColor), + color = backgroundColor, + shape = MaterialTheme.shapes.small, + ) { + val contentColor = LocalContentColor.current + .let { color -> + if (enabled) { + color // enabled + } else { + color.combineAlpha(DisabledEmphasisAlpha) + } + } + CompositionLocalProvider( + LocalContentColor provides contentColor, + ) { + Row( + modifier = Modifier + .then( + if (updatedOnClick != null) { + Modifier + .clickable(role = Role.Button) { + updatedOnClick?.invoke() + } + } else { + Modifier + }, + ) + .heightIn(min = 32.dp) + .padding( + horizontal = 8.dp, + vertical = 4.dp, + ), + verticalAlignment = Alignment.CenterVertically, + ) { + if (leading != null) { + Box( + modifier = Modifier + .size(18.dp), + ) { + leading() + } + Spacer( + modifier = Modifier + .width(8.dp), + ) + } + Column { + content() + } + } + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/search/filter/component/FilterSection.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/search/filter/component/FilterSection.kt new file mode 100644 index 00000000..f51f90a7 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/search/filter/component/FilterSection.kt @@ -0,0 +1,67 @@ +package com.artemchep.keyguard.feature.search.filter.component + +import androidx.compose.animation.core.animateFloatAsState +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.ChevronRight +import androidx.compose.material3.Icon +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.graphicsLayer +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import com.artemchep.keyguard.ui.FlatItem +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.theme.combineAlpha + +@Composable +fun FilterSectionComposable( + modifier: Modifier = Modifier, + expanded: Boolean, + title: String, + onClick: (() -> Unit)?, +) { + FlatItem( + modifier = modifier, + paddingValues = PaddingValues( + horizontal = 0.dp, + vertical = 2.dp, + ), + trailing = { + val targetRotationX = + if (expanded) { + 0f + } else { + 180f + } + val rotationX by animateFloatAsState(targetRotationX) + Icon( + modifier = Modifier + .graphicsLayer( + rotationX = rotationX, + rotationZ = -90f, + ), + tint = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + imageVector = Icons.Outlined.ChevronRight, + contentDescription = null, + ) + }, + title = { + Text( + text = title.uppercase(), + style = MaterialTheme.typography.labelLarge, + fontSize = 12.sp, + fontWeight = FontWeight.Black, + color = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + ) + }, + onClick = onClick, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/search/filter/component/VaultHomeScreenFilterPaneNumberOfItems.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/search/filter/component/VaultHomeScreenFilterPaneNumberOfItems.kt new file mode 100644 index 00000000..c6ad12d2 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/search/filter/component/VaultHomeScreenFilterPaneNumberOfItems.kt @@ -0,0 +1,36 @@ +package com.artemchep.keyguard.feature.search.filter.component + +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.ExpandedIfNotEmpty +import com.artemchep.keyguard.ui.animatedNumberText +import dev.icerock.moko.resources.compose.stringResource + +@Composable +fun VaultHomeScreenFilterPaneNumberOfItems( + count: Int?, + modifier: Modifier = Modifier, +) { + ExpandedIfNotEmpty( + modifier = modifier, + valueOrNull = count, + ) { n -> + val animatedCount = animatedNumberText(n) + Text( + modifier = Modifier + .padding( + start = 16.dp, + end = 16.dp, + top = 8.dp, + bottom = 8.dp, + ), + text = stringResource(Res.strings.items_n, animatedCount), + style = MaterialTheme.typography.titleSmall, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/search/filter/model/FilterItemModel.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/search/filter/model/FilterItemModel.kt new file mode 100644 index 00000000..a612e362 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/search/filter/model/FilterItemModel.kt @@ -0,0 +1,23 @@ +package com.artemchep.keyguard.feature.search.filter.model + +import androidx.compose.runtime.Composable + +interface FilterItemModel { + val id: String + + interface Section : FilterItemModel { + val text: String + val expanded: Boolean + val onClick: () -> Unit + } + + interface Item : FilterItemModel { + val leading: (@Composable () -> Unit)? + val title: String + val text: String? + val checked: Boolean + val fill: Boolean + val indent: Int + val onClick: (() -> Unit)? + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/search/search/IndexedModel.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/search/search/IndexedModel.kt new file mode 100644 index 00000000..3c8a7209 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/search/search/IndexedModel.kt @@ -0,0 +1,58 @@ +package com.artemchep.keyguard.feature.search.search + +import androidx.compose.ui.graphics.Color +import com.artemchep.keyguard.common.io.parallelSearch +import com.artemchep.keyguard.feature.home.vault.search.IndexedText +import com.artemchep.keyguard.feature.home.vault.search.find +import kotlin.time.measureTimedValue + +class IndexedModel( + val model: T, + val indexedText: IndexedText, +) + +data class FilteredModel( + val model: T, + val result: IndexedText.FindResult, +) + +@OptIn(kotlin.time.ExperimentalTime::class) +suspend fun List>.search( + query: IndexedText, + highlightBackgroundColor: Color, + highlightContentColor: Color, + transform: (T, IndexedText.FindResult) -> T, +) = kotlin.run { + // Fast path if there's nothing to search from. + if (isEmpty()) { + return@run this + .map { + it.model + } + } + + val timedValue = measureTimedValue { + parallelSearch { + val r = it.indexedText.find( + query = query, + colorBackground = highlightBackgroundColor, + colorContent = highlightContentColor, + ) ?: return@parallelSearch null + FilteredModel( + model = it.model, + result = r, + ) + } + .sortedWith( + compareBy( + { -it.result.score }, + ), + ) + .map { + // Replace the origin text with the one with + // search decor applied to it. + transform(it.model, it.result) + } + } + timedValue.value +} \ No newline at end of file diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/search/search/produceSimpleSearch.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/search/search/produceSimpleSearch.kt new file mode 100644 index 00000000..852c8c2a --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/search/search/produceSimpleSearch.kt @@ -0,0 +1,88 @@ +package com.artemchep.keyguard.feature.search.search + +import androidx.compose.runtime.MutableState +import com.artemchep.keyguard.feature.auth.common.TextFieldModel2 +import com.artemchep.keyguard.feature.home.vault.search.IndexedText +import com.artemchep.keyguard.feature.navigation.state.RememberStateFlowScope +import com.artemchep.keyguard.ui.theme.searchHighlightBackgroundColor +import com.artemchep.keyguard.ui.theme.searchHighlightContentColor +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.debounce +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.mapLatest +import kotlinx.coroutines.flow.stateIn + +const val SEARCH_DEBOUNCE = 88L + +class SearchQueryHandle( + val scope: RememberStateFlowScope, + val querySink: MutableStateFlow, + val queryState: MutableState, + val queryIndexed: Flow, +) { +} + +fun RememberStateFlowScope.searchQueryHandle( + key: String, +): SearchQueryHandle { + val querySink = mutablePersistedFlow(key) { "" } + val queryState = mutableComposeState(querySink) + + val queryIndexedFlow = querySink + .debounce(SEARCH_DEBOUNCE) + .map { query -> + val queryTrimmed = query.trim() + if (queryTrimmed.isEmpty()) return@map null + IndexedText( + text = queryTrimmed, + ) + } + + return SearchQueryHandle( + scope = this, + querySink = querySink, + queryState = queryState, + queryIndexed = queryIndexedFlow, + ) +} + +suspend fun RememberStateFlowScope.searchFilter( + handle: SearchQueryHandle, + transform: (TextFieldModel2, Int) -> T, +) = handle.querySink + .map { query -> + val revision = query.trim().hashCode() + val model = TextFieldModel2( + state = handle.queryState, + text = query, + onChange = handle.queryState::value::set, + ) + transform( + model, + revision, + ) + } + .stateIn(screenScope) + +fun Flow>>.mapSearch( + handle: SearchQueryHandle, + transform: (T, IndexedText.FindResult) -> T, +) = this + .combine(handle.queryIndexed) { items, query -> items to query } + .mapLatest { (items, query) -> + if (query == null) { + return@mapLatest items.map { it.model } to 0 + } + + val filteredItems = items + .search( + query, + highlightBackgroundColor = handle.scope.colorScheme.searchHighlightBackgroundColor, + highlightContentColor = handle.scope.colorScheme.searchHighlightContentColor, + transform = transform, + ) + filteredItems to query.text.hashCode() + } + diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/search/sort/SortButton.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/search/sort/SortButton.kt new file mode 100644 index 00000000..e47ab789 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/search/sort/SortButton.kt @@ -0,0 +1,81 @@ +package com.artemchep.keyguard.feature.search.sort + +import androidx.compose.foundation.layout.ColumnScope +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.SortByAlpha +import androidx.compose.runtime.Composable +import androidx.compose.runtime.key +import androidx.compose.ui.Modifier +import com.artemchep.keyguard.feature.localization.textResource +import com.artemchep.keyguard.feature.search.EmptyItem +import com.artemchep.keyguard.feature.search.component.DropdownButton +import com.artemchep.keyguard.feature.search.sort.component.SortItemComposable +import com.artemchep.keyguard.feature.search.sort.component.SortSectionComposable +import com.artemchep.keyguard.feature.search.sort.model.SortItemModel +import com.artemchep.keyguard.res.Res +import dev.icerock.moko.resources.compose.stringResource + +@Composable +fun SortButton( + modifier: Modifier = Modifier, + items: List, + onClear: (() -> Unit)?, +) { + DropdownButton( + modifier = modifier, + icon = Icons.Outlined.SortByAlpha, + title = stringResource(Res.strings.sort_header_title), + items = items, + onClear = onClear, + ) { + SortItems( + items = items, + ) + } +} + +@Composable +private fun ColumnScope.SortItems( + items: List, +) { + if (items.isEmpty()) { + EmptyItem( + text = stringResource(Res.strings.sort_empty_label), + ) + } + + items.forEach { item -> + key(item.id) { + when (item) { + is SortItemModel.Item -> SortItemItem(item) + is SortItemModel.Section -> SortItemSection(item) + } + } + } +} + +@Composable +private fun SortItemItem( + item: SortItemModel.Item, + modifier: Modifier = Modifier, +) { + SortItemComposable( + modifier = modifier, + checked = item.checked, + icon = item.icon, + title = textResource(item.title), + onClick = item.onClick, + ) +} + +@Composable +private fun SortItemSection( + item: SortItemModel.Section, + modifier: Modifier = Modifier, +) { + val text = item.text?.let { textResource(it) } + SortSectionComposable( + modifier = modifier, + text = text, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/search/sort/component/SortItem.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/search/sort/component/SortItem.kt new file mode 100644 index 00000000..8309d938 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/search/sort/component/SortItem.kt @@ -0,0 +1,94 @@ +package com.artemchep.keyguard.feature.search.sort.component + +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.minimumInteractiveComponentSize +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.ui.FlatItemTextContent +import com.artemchep.keyguard.ui.theme.selectedContainer + +@Composable +fun SortItemComposable( + modifier: Modifier = Modifier, + checked: Boolean, + icon: ImageVector?, + title: String, + onClick: (() -> Unit)?, +) { + val updatedOnClick by rememberUpdatedState(onClick) + + val backgroundColor = + if (checked) { + MaterialTheme.colorScheme.selectedContainer + } else Color.Unspecified + Row( + modifier = modifier + .then( + if (updatedOnClick != null) { + Modifier + .clickable { + updatedOnClick?.invoke() + } + } else { + Modifier + }, + ) + .background(backgroundColor) + .minimumInteractiveComponentSize() + .padding( + horizontal = 8.dp, + vertical = 4.dp, + ), + verticalAlignment = Alignment.CenterVertically, + ) { + if (icon != null) { + Box( + modifier = Modifier + .padding(4.dp) + .size(16.dp), + ) { + Icon( + imageVector = icon, + contentDescription = null, + ) + } + Spacer( + modifier = Modifier + .width(8.dp), + ) + } + Column( + modifier = Modifier + .weight(1f), + ) { + FlatItemTextContent( + title = { + Text( + text = title, + maxLines = 2, + overflow = TextOverflow.Ellipsis, + ) + }, + compact = true, + ) + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/search/sort/component/SortSection.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/search/sort/component/SortSection.kt new file mode 100644 index 00000000..0153edda --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/search/sort/component/SortSection.kt @@ -0,0 +1,16 @@ +package com.artemchep.keyguard.feature.search.sort.component + +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import com.artemchep.keyguard.feature.home.vault.component.Section + +@Composable +fun SortSectionComposable( + modifier: Modifier = Modifier, + text: String?, +) { + Section( + modifier = modifier, + text = text, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/search/sort/model/SortItemModel.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/search/sort/model/SortItemModel.kt new file mode 100644 index 00000000..26ff6d2b --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/search/sort/model/SortItemModel.kt @@ -0,0 +1,19 @@ +package com.artemchep.keyguard.feature.search.sort.model + +import androidx.compose.ui.graphics.vector.ImageVector +import com.artemchep.keyguard.feature.localization.TextHolder + +interface SortItemModel { + val id: String + + interface Section : SortItemModel { + val text: TextHolder? + } + + interface Item : SortItemModel { + val icon: ImageVector? + val title: TextHolder + val checked: Boolean + val onClick: (() -> Unit)? + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/SendItem.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/SendItem.kt new file mode 100644 index 00000000..74782fa3 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/SendItem.kt @@ -0,0 +1,77 @@ +package com.artemchep.keyguard.feature.send + +import androidx.compose.runtime.Immutable +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.text.AnnotatedString +import arrow.optics.optics +import com.artemchep.keyguard.common.model.DSend +import com.artemchep.keyguard.feature.attachments.SelectableItemState +import com.artemchep.keyguard.feature.home.vault.model.VaultItemIcon +import kotlinx.coroutines.flow.StateFlow +import kotlinx.datetime.Instant +import java.util.UUID + +@Immutable +@optics +sealed interface SendItem { + companion object + + val id: String + + @Immutable + data class Section( + override val id: String = UUID.randomUUID().toString(), + val text: String? = null, + val caps: Boolean = true, + ) : SendItem { + companion object + } + + @Immutable + data class Item( + override val id: String, + val source: DSend, + val accentLight: Color, + val accentDark: Color, + val tag: String? = source.accountId, + val accountId: String, + val groupId: String?, + val revisionDate: Instant, + val createdDate: Instant?, + val hasPassword: Boolean, + val hasFile: Boolean, + val type: String, + val icon: VaultItemIcon, + /** + * The name of the item. + */ + val title: AnnotatedString, + val text: String?, + val notes: String?, + val deletion: String?, + // + val action: Action, + val localStateFlow: StateFlow, + ) : SendItem { + companion object; + + @Immutable + data class LocalState( + val openedState: OpenedState, + val selectableItemState: SelectableItemState, + ) + + @Immutable + data class OpenedState( + val isOpened: Boolean, + ) + + @Immutable + sealed interface Action { + @Immutable + data class Go( + val onClick: () -> Unit, + ) : Action + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/SendListItemMapping.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/SendListItemMapping.kt new file mode 100644 index 00000000..4d69c21f --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/SendListItemMapping.kt @@ -0,0 +1,97 @@ +package com.artemchep.keyguard.feature.send + +import androidx.compose.ui.text.AnnotatedString +import com.artemchep.keyguard.common.model.DSend +import com.artemchep.keyguard.common.model.iconImageVector +import com.artemchep.keyguard.common.usecase.CopyText +import com.artemchep.keyguard.common.usecase.DateFormatter +import com.artemchep.keyguard.feature.filepicker.humanReadableByteCountSI +import com.artemchep.keyguard.feature.home.vault.model.VaultItemIcon +import com.artemchep.keyguard.ui.FlatItemAction +import kotlinx.coroutines.flow.StateFlow + +suspend fun DSend.toVaultListItem( + copy: CopyText, + appIcons: Boolean, + websiteIcons: Boolean, + groupId: String? = null, + dateFormatter: DateFormatter, + onClick: (List) -> SendItem.Item.Action, + localStateFlow: StateFlow, +): SendItem.Item { + val d = when { + text != null -> text.createText() + file != null -> file.createFile() + else -> { + TypeSpecific( + text = notes, + ) + } + } + + val icon = toVaultItemIcon( + appIcons = appIcons, + websiteIcons = websiteIcons, + ) + val deletion = deletedDate + ?.let(dateFormatter::formatDate) + return SendItem.Item( + id = id, + source = this, + accentLight = accentLight, + accentDark = accentDark, + accountId = accountId, + groupId = groupId, + revisionDate = revisionDate, + createdDate = createdDate, + hasPassword = password != null, + hasFile = type == DSend.Type.File, + icon = icon, + type = type.name, + title = AnnotatedString(name.trim()), + text = d.text.trim(), + notes = notes.trim(), + deletion = deletion, + action = onClick(d.actions), + localStateFlow = localStateFlow, + ) +} + +fun DSend.toVaultItemIcon( + appIcons: Boolean, + websiteIcons: Boolean, +): VaultItemIcon = kotlin.run { + val vectorIconSrc = type.iconImageVector() + val textIcon = if (name.isNotBlank()) { + VaultItemIcon.TextIcon( + text = name.take(2), + ) + } else { + null + } + val vectorIcon = VaultItemIcon.VectorIcon( + imageVector = vectorIconSrc, + ) + textIcon ?: vectorIcon +} + +private data class TypeSpecific( + val text: String, + val actions: List = emptyList(), +) + +private fun DSend.Text.createText( +): TypeSpecific { + return TypeSpecific( + text = text.orEmpty(), + ) +} + +private fun DSend.File.createFile( +): TypeSpecific { + val size = size?.let(::humanReadableByteCountSI) + ?.let { " ($it)" } + return TypeSpecific( + text = fileName + size, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/SendListState.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/SendListState.kt new file mode 100644 index 00000000..39900c5c --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/SendListState.kt @@ -0,0 +1,86 @@ +package com.artemchep.keyguard.feature.send + +import androidx.compose.runtime.Immutable +import androidx.compose.runtime.mutableStateOf +import arrow.optics.optics +import com.artemchep.keyguard.common.model.DSend +import com.artemchep.keyguard.feature.auth.common.TextFieldModel2 +import com.artemchep.keyguard.feature.send.search.SendSortItem +import com.artemchep.keyguard.feature.send.search.filter.SendFilterItem +import com.artemchep.keyguard.ui.FlatItemAction +import com.artemchep.keyguard.ui.Selection +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.emptyFlow + +@Immutable +@optics +data class SendListState( + val revision: Int = 0, + val query: TextFieldModel2 = TextFieldModel2(mutableStateOf("")), + val filters: List = emptyList(), + val sort: List = emptyList(), + val clearFilters: (() -> Unit)? = null, + val clearSort: (() -> Unit)? = null, + val showKeyboard: Boolean = false, + val primaryActions: List = emptyList(), + val actions: List = emptyList(), + val content: Content = Content.Skeleton, + val sideEffects: SideEffects = SideEffects(), +) { + companion object; + + sealed interface Content { + companion object + + data object Skeleton : Content + + @optics + data class AddAccount( + val onAddAccount: (() -> Unit)? = null, + ) : Content { + companion object + } + + @optics + data class Items( + val revision: Revision = Revision(), + val selection: Selection? = null, + val list: List = emptyList(), + val count: Int = 0, + val onSelected: (String?) -> Unit = { }, + val onGoClick: (() -> Unit)? = null, + ) : Content { + companion object; + + @optics + data class Revision( + /** + * Current revision of the items; each revision you should scroll to + * the top of the list. + */ + val id: Int = 0, + val firstVisibleItemIndex: Mutable = MutableImpl(0), + val firstVisibleItemScrollOffset: Mutable = MutableImpl(0), + val onScroll: (Int, Int) -> Unit = { _, _ -> }, + ) : Content { + companion object; + + interface Mutable { + val value: T + } + + data class MutableImpl( + override val value: T, + ) : Mutable + } + } + } + + @Immutable + @optics + data class SideEffects( + val showBiometricPromptFlow: Flow = emptyFlow(), + ) { + companion object + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/SendListStateProducer.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/SendListStateProducer.kt new file mode 100644 index 00000000..b4967962 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/SendListStateProducer.kt @@ -0,0 +1,1179 @@ +package com.artemchep.keyguard.feature.send + +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.CalendarMonth +import androidx.compose.material.icons.outlined.Keyboard +import androidx.compose.material.icons.outlined.Lock +import androidx.compose.material.icons.outlined.SortByAlpha +import androidx.compose.material3.Icon +import androidx.compose.material3.Switch +import androidx.compose.runtime.Composable +import androidx.compose.runtime.mutableStateOf +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.vector.ImageVector +import arrow.core.identity +import arrow.core.partially1 +import com.artemchep.keyguard.AppMode +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.io.nullable +import com.artemchep.keyguard.common.io.parallelSearch +import com.artemchep.keyguard.common.model.AccountTask +import com.artemchep.keyguard.common.model.DSecret +import com.artemchep.keyguard.common.model.DSend +import com.artemchep.keyguard.common.model.iconImageVector +import com.artemchep.keyguard.common.model.title +import com.artemchep.keyguard.common.model.titleH +import com.artemchep.keyguard.common.service.clipboard.ClipboardService +import com.artemchep.keyguard.common.usecase.CipherToolbox +import com.artemchep.keyguard.common.usecase.ClearVaultSession +import com.artemchep.keyguard.common.usecase.DateFormatter +import com.artemchep.keyguard.common.usecase.GetAccounts +import com.artemchep.keyguard.common.usecase.GetAppIcons +import com.artemchep.keyguard.common.usecase.GetCanWrite +import com.artemchep.keyguard.common.usecase.GetSends +import com.artemchep.keyguard.common.usecase.GetSuggestions +import com.artemchep.keyguard.common.usecase.GetWebsiteIcons +import com.artemchep.keyguard.common.usecase.QueueSyncAll +import com.artemchep.keyguard.common.usecase.SupervisorRead +import com.artemchep.keyguard.common.util.flow.EventFlow +import com.artemchep.keyguard.common.util.flow.persistingStateIn +import com.artemchep.keyguard.feature.attachments.SelectableItemState +import com.artemchep.keyguard.feature.attachments.SelectableItemStateRaw +import com.artemchep.keyguard.feature.auth.common.TextFieldModel2 +import com.artemchep.keyguard.feature.decorator.ItemDecorator +import com.artemchep.keyguard.feature.decorator.ItemDecoratorDate +import com.artemchep.keyguard.feature.decorator.ItemDecoratorNone +import com.artemchep.keyguard.feature.decorator.ItemDecoratorTitle +import com.artemchep.keyguard.feature.generator.history.mapLatestScoped +import com.artemchep.keyguard.feature.home.settings.accounts.AccountsRoute +import com.artemchep.keyguard.feature.home.vault.add.AddRoute +import com.artemchep.keyguard.feature.home.vault.add.LeAddRoute +import com.artemchep.keyguard.feature.home.vault.search.IndexedText +import com.artemchep.keyguard.feature.home.vault.search.find +import com.artemchep.keyguard.feature.home.vault.search.findAlike +import com.artemchep.keyguard.feature.home.vault.util.AlphabeticalSortMinItemsSize +import com.artemchep.keyguard.feature.localization.TextHolder +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.feature.navigation.state.PersistedStorage +import com.artemchep.keyguard.feature.navigation.state.copy +import com.artemchep.keyguard.feature.navigation.state.produceScreenState +import com.artemchep.keyguard.feature.search.search.SEARCH_DEBOUNCE +import com.artemchep.keyguard.feature.send.search.AccessCountSendSort +import com.artemchep.keyguard.feature.send.search.AlphabeticalSendSort +import com.artemchep.keyguard.feature.send.search.LastDeletedSendSort +import com.artemchep.keyguard.feature.send.search.LastExpiredSendSort +import com.artemchep.keyguard.feature.send.search.LastModifiedSendSort +import com.artemchep.keyguard.feature.send.search.OurFilterResult +import com.artemchep.keyguard.feature.send.search.SendSort +import com.artemchep.keyguard.feature.send.search.SendSortItem +import com.artemchep.keyguard.feature.send.search.ah +import com.artemchep.keyguard.feature.send.search.createFilter +import com.artemchep.keyguard.feature.send.search.filter.FilterSendHolder +import com.artemchep.keyguard.leof +import com.artemchep.keyguard.platform.parcelize.LeParcelable +import com.artemchep.keyguard.platform.parcelize.LeParcelize +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItemAction +import com.artemchep.keyguard.ui.Selection +import com.artemchep.keyguard.ui.icons.KeyguardView +import com.artemchep.keyguard.ui.icons.SyncIcon +import com.artemchep.keyguard.ui.icons.icon +import com.artemchep.keyguard.ui.selection.selectionHandle +import dev.icerock.moko.resources.StringResource +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.debounce +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.flow.flowOn +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.mapLatest +import kotlinx.coroutines.flow.onEach +import kotlinx.coroutines.flow.shareIn +import kotlinx.coroutines.flow.stateIn +import kotlinx.serialization.Serializable +import org.kodein.di.DirectDI +import org.kodein.di.compose.localDI +import org.kodein.di.direct +import org.kodein.di.instance +import kotlin.time.ExperimentalTime +import kotlin.time.measureTimedValue + +@LeParcelize +data class OhOhOh( + val id: String? = null, + val offset: Int = 0, + val revision: Int = 0, +) : LeParcelable + +@LeParcelize +@Serializable +data class ComparatorHolder( + val comparator: SendSort, + val reversed: Boolean = false, + val favourites: Boolean = false, +) : LeParcelable { + companion object { + fun of(map: Map): ComparatorHolder { + return ComparatorHolder( + comparator = SendSort.valueOf(map["comparator"].toString()) ?: AlphabeticalSendSort, + reversed = map["reversed"].toString() == "true", + favourites = map["favourites"].toString() == "true", + ) + } + } + + fun toMap() = mapOf( + "comparator" to comparator.id, + "reversed" to reversed, + "favourites" to favourites, + ) +} + +@Composable +fun sendListScreenState( + args: SendRoute.Args, + highlightBackgroundColor: Color, + highlightContentColor: Color, + mode: AppMode, +): SendListState = with(localDI().direct) { + sendListScreenState( + directDI = this, + args = args, + highlightBackgroundColor = highlightBackgroundColor, + highlightContentColor = highlightContentColor, + mode = mode, + clearVaultSession = instance(), + getSuggestions = instance(), + getAccounts = instance(), + getCanWrite = instance(), + getSends = instance(), + getAppIcons = instance(), + getWebsiteIcons = instance(), + toolbox = instance(), + queueSyncAll = instance(), + syncSupervisor = instance(), + dateFormatter = instance(), + clipboardService = instance(), + ) +} + +@Composable +fun sendListScreenState( + directDI: DirectDI, + args: SendRoute.Args, + highlightBackgroundColor: Color, + highlightContentColor: Color, + mode: AppMode, + clearVaultSession: ClearVaultSession, + getSuggestions: GetSuggestions, + getAccounts: GetAccounts, + getCanWrite: GetCanWrite, + getSends: GetSends, + getAppIcons: GetAppIcons, + getWebsiteIcons: GetWebsiteIcons, + toolbox: CipherToolbox, + queueSyncAll: QueueSyncAll, + syncSupervisor: SupervisorRead, + dateFormatter: DateFormatter, + clipboardService: ClipboardService, +): SendListState = produceScreenState( + key = "send_list", + initial = SendListState(), + args = arrayOf( + getAccounts, + dateFormatter, + clipboardService, + ), +) { + val storage = kotlin.run { + val disk = loadDiskHandle("vault.list") + PersistedStorage.InDisk(disk) + } + + val copy = copy(clipboardService) + val ciphersRawFlow = getSends() +// .map { l -> +// Log.e("???","lol ciphers") +// (0..100).flatMap { l }.map { +// it.copy(id = UUID.randomUUID().toString()) +// }.also { +// Log.d("??? search", "${it.size} items") +// } +// } + + val querySink = mutablePersistedFlow("query") { "" } + val queryState = mutableComposeState(querySink) + + val cipherSink = EventFlow() + + val itemSink = mutablePersistedFlow("lole") { "" } + + val selectionHandle = selectionHandle("selection") + // Automatically remove selection from ciphers + // that do not exist anymore. + getSends() + .onEach { ciphers -> + val selectedItemIds = selectionHandle.idsFlow.value + val filteredSelectedItemIds = selectedItemIds + .filter { itemId -> + ciphers.any { it.id == itemId } + } + .toSet() + if (filteredSelectedItemIds.size < selectedItemIds.size) { + selectionHandle.setSelection(filteredSelectedItemIds) + } + } + .launchIn(this) + + val showKeyboardSink = if (args.canAlwaysShowKeyboard) { + mutablePersistedFlow( + key = "keyboard", + storage = storage, + ) { false } + } else { + mutablePersistedFlow( + key = "keyboard", + ) { false } + } + val syncFlow = syncSupervisor + .get(AccountTask.SYNC) + .map { accounts -> + accounts.isNotEmpty() + } + + val sortDefault = ComparatorHolder( + comparator = LastDeletedSendSort, + reversed = true, + ) + val sortSink = mutablePersistedFlow( + key = "sort", + serialize = { json, value -> + value.toMap() + }, + deserialize = { json, value -> + ComparatorHolder.of(value) + }, + ) { + if (args.sort != null) { + ComparatorHolder( + comparator = args.sort, + ) + } else { + sortDefault + } + } + + var scrollPositionKey: Any? = null + val scrollPositionSink = mutablePersistedFlow("scroll_state") { OhOhOh() } + + val filterResult = createFilter() + val actionsFlow = kotlin.run { + val actionAlwaysShowKeyboardFlow = showKeyboardSink + .map { showKeyboard -> + FlatItemAction( + leading = { + Icon( + Icons.Outlined.Keyboard, + null, + ) + }, + trailing = { + Switch( + checked = showKeyboard, + onCheckedChange = showKeyboardSink::value::set, + ) + }, + title = "Always show keyboard", + onClick = showKeyboardSink::value::set.partially1(!showKeyboard), + ) + } + val actionSyncAccountsFlow = syncFlow + .map { syncing -> + FlatItemAction( + leading = { + SyncIcon( + rotating = syncing, + ) + }, + title = "Sync vault", + onClick = if (!syncing) { + // lambda + { + queueSyncAll() + .launchIn(appScope) + } + } else { + null + }, + ) + } + val actionLockVaultItem = FlatItemAction( + leading = { + Icon(Icons.Outlined.Lock, null) + }, + title = "Lock vault", + onClick = { + clearVaultSession() + .launchIn(appScope) + }, + ) + val actionLockVaultFlow = flowOf(actionLockVaultItem) + combine( + actionAlwaysShowKeyboardFlow, + actionSyncAccountsFlow, + actionLockVaultFlow, + ) { array -> + array.toList().takeIf { args.canAlwaysShowKeyboard }.orEmpty() + } + } + + data class ConfigMapper( + val appIcons: Boolean, + val websiteIcons: Boolean, + ) + + val configFlow = combine( + getAppIcons(), + getWebsiteIcons(), + ) { appIcons, websiteIcons -> + ConfigMapper( + appIcons = appIcons, + websiteIcons = websiteIcons, + ) + }.distinctUntilChanged() + val ciphersFlow = combine( + ciphersRawFlow, + configFlow, + ) { secrets, cfg -> secrets to cfg } + .mapLatestScoped { (secrets, cfg) -> + val items = secrets + .map { secret -> + val selectableFlow = selectionHandle + .idsFlow + .map { ids -> + SelectableItemStateRaw( + selecting = ids.isNotEmpty(), + selected = secret.id in ids, + ) + } + .distinctUntilChanged() + .map { raw -> + val toggle = selectionHandle::toggleSelection + .partially1(secret.id) + val onClick = toggle.takeIf { raw.selecting } + val onLongClick = toggle + .takeIf { !raw.selecting && raw.canSelect } + SelectableItemState( + selecting = raw.selecting, + selected = raw.selected, + can = raw.canSelect, + onClick = onClick, + onLongClick = onLongClick, + ) + } + val openedStateFlow = itemSink + .map { + val isOpened = it == secret.id + SendItem.Item.OpenedState(isOpened) + } + val sharing = SharingStarted.WhileSubscribed(1000L) + val localStateFlow = combine( + selectableFlow, + openedStateFlow, + ) { selectableState, openedState -> + SendItem.Item.LocalState( + openedState, + selectableState, + ) + }.persistingStateIn(this, sharing) + val item = secret.toVaultListItem( + copy = copy, + appIcons = cfg.appIcons, + websiteIcons = cfg.websiteIcons, + localStateFlow = localStateFlow, + dateFormatter = dateFormatter, + onClick = { actions -> + SendItem.Item.Action.Go( + onClick = cipherSink::emit.partially1(secret), + ) + }, + ) + val indexed = mutableListOf() + indexed += SearchToken( + priority = 2f, + value = secret.name, + ) + if (secret.notes.isNotBlank()) { + indexed += SearchToken( + priority = 0.8f, + value = secret.notes, + ) + } + IndexedModel( + model = item, + indexedText = IndexedText(item.title.text), + indexedOther = indexed, + ) + } + .run { + if (args.filter != null) { + val ciphers = map { it.model.source } + val predicate = args.filter.prepare(directDI, ciphers) + this + .filter { predicate(it.model.source) } + } else { + this + } + } + items + } + .flowOn(Dispatchers.Default) + .shareIn(this, SharingStarted.WhileSubscribed(5000L), replay = 1) + + fun createComparatorAction( + id: String, + title: StringResource, + icon: ImageVector? = null, + config: ComparatorHolder, + ) = SendSortItem.Item( + id = id, + config = config, + title = TextHolder.Res(title), + icon = icon, + onClick = { + sortSink.value = config + }, + checked = false, + ) + + data class Fuu( + val item: SendSortItem.Item, + val subItems: List, + ) + + val cam = mapOf( + AlphabeticalSendSort to Fuu( + item = createComparatorAction( + id = "title", + icon = Icons.Outlined.SortByAlpha, + title = Res.strings.sortby_title_title, + config = ComparatorHolder( + comparator = AlphabeticalSendSort, + favourites = true, + ), + ), + subItems = listOf( + createComparatorAction( + id = "title_normal", + title = Res.strings.sortby_title_normal_mode, + config = ComparatorHolder( + comparator = AlphabeticalSendSort, + favourites = true, + ), + ), + createComparatorAction( + id = "title_rev", + title = Res.strings.sortby_title_reverse_mode, + config = ComparatorHolder( + comparator = AlphabeticalSendSort, + reversed = true, + favourites = true, + ), + ), + ), + ), + AccessCountSendSort to Fuu( + item = createComparatorAction( + id = "access_count", + icon = Icons.Outlined.KeyguardView, + title = Res.strings.sortby_access_count_title, + config = ComparatorHolder( + comparator = AccessCountSendSort, + ), + ), + subItems = listOf( + createComparatorAction( + id = "access_count_normal", + title = Res.strings.sortby_access_count_normal_mode, + config = ComparatorHolder( + comparator = AccessCountSendSort, + ), + ), + createComparatorAction( + id = "access_count_rev", + title = Res.strings.sortby_access_count_reverse_mode, + config = ComparatorHolder( + comparator = AccessCountSendSort, + reversed = true, + ), + ), + ), + ), + LastModifiedSendSort to Fuu( + item = createComparatorAction( + id = "modify_date", + icon = Icons.Outlined.CalendarMonth, + title = Res.strings.sortby_modification_date_title, + config = ComparatorHolder( + comparator = LastModifiedSendSort, + ), + ), + subItems = listOf( + createComparatorAction( + id = "modify_date_normal", + title = Res.strings.sortby_modification_date_normal_mode, + config = ComparatorHolder( + comparator = LastModifiedSendSort, + ), + ), + createComparatorAction( + id = "modify_date_rev", + title = Res.strings.sortby_modification_date_reverse_mode, + config = ComparatorHolder( + comparator = LastModifiedSendSort, + reversed = true, + ), + ), + ), + ), + LastExpiredSendSort to Fuu( + item = createComparatorAction( + id = "expiration_date", + icon = Icons.Outlined.CalendarMonth, + title = Res.strings.sortby_expiration_date_title, + config = ComparatorHolder( + comparator = LastExpiredSendSort, + ), + ), + subItems = listOf( + createComparatorAction( + id = "expiration_date_normal", + title = Res.strings.sortby_expiration_date_normal_mode, + config = ComparatorHolder( + comparator = LastExpiredSendSort, + ), + ), + createComparatorAction( + id = "expiration_date_rev", + title = Res.strings.sortby_expiration_date_reverse_mode, + config = ComparatorHolder( + comparator = LastExpiredSendSort, + reversed = true, + ), + ), + ), + ), + LastDeletedSendSort to Fuu( + item = createComparatorAction( + id = "deletion_date", + icon = Icons.Outlined.CalendarMonth, + title = Res.strings.sortby_deletion_date_title, + config = ComparatorHolder( + comparator = LastDeletedSendSort, + ), + ), + subItems = listOf( + createComparatorAction( + id = "deletion_date_normal", + title = Res.strings.sortby_deletion_date_normal_mode, + config = ComparatorHolder( + comparator = LastDeletedSendSort, + ), + ), + createComparatorAction( + id = "deletion_date_rev", + title = Res.strings.sortby_deletion_date_reverse_mode, + config = ComparatorHolder( + comparator = LastDeletedSendSort, + reversed = true, + ), + ), + ), + ), + ) + + val comparatorsListFlow = sortSink + .map { orderConfig -> + val mainItems = cam.values + .map { it.item } + .map { item -> + val checked = item.config.comparator == orderConfig.comparator + item.copy(checked = checked) + } + val subItems = cam[orderConfig.comparator]?.subItems.orEmpty() + .map { item -> + val checked = item.config == orderConfig + item.copy(checked = checked) + } + + val out = mutableListOf() + out += mainItems + if (subItems.isNotEmpty()) { + out += SendSortItem.Section( + id = "sub_items_section", + text = TextHolder.Res(Res.strings.options), + ) + out += subItems + } + out + } + + val queryTrimmedFlow = querySink.map { it to it.trim() } + + val queryIndexedFlow = queryTrimmedFlow + .debounce(SEARCH_DEBOUNCE) + .map { (_, queryTrimmed) -> + if (queryTrimmed.isEmpty()) return@map null + IndexedText( + text = queryTrimmed, + ) + } + + data class Rev( + val count: Int, + val list: List, + val revision: Int = 0, + ) + + val ciphersFilteredFlow = hahah( + directDI = directDI, + ciphersFlow = ciphersFlow, + orderFlow = sortSink, + filterFlow = filterResult.filterFlow, + queryFlow = queryIndexedFlow, + dateFormatter = dateFormatter, + highlightBackgroundColor = highlightBackgroundColor, + highlightContentColor = highlightContentColor, + ) + .map { + Rev( + count = it.count, + list = it.list, + revision = (it.filterConfig?.id ?: 0) xor ( + it.queryConfig?.text?.hashCode() + ?: 0 + ) xor (it.orderConfig?.hashCode() ?: 0), + ) + } + .flowOn(Dispatchers.Default) + .shareIn(this, SharingStarted.WhileSubscribed(), replay = 1) + + val filterListFlow = ah( + directDI = directDI, + outputGetter = { it.source }, + outputFlow = ciphersFilteredFlow + .map { state -> + state.list.mapNotNull { it as? SendItem.Item } + }, + accountGetter = ::identity, + accountFlow = getAccounts(), + cipherGetter = { + it.model.source + }, + cipherFlow = ciphersFlow, + input = filterResult, + ) + .stateIn(this, SharingStarted.WhileSubscribed(), OurFilterResult()) + + val selectionFlow = flowOf(null) + + val itemsFlow = ciphersFilteredFlow + .combine(selectionFlow) { ciphers, selection -> + val items = ciphers.list + + @Suppress("UnnecessaryVariable") + val localScrollPositionKey = items + scrollPositionKey = localScrollPositionKey + + val lastScrollState = scrollPositionSink.value + val (firstVisibleItemIndex, firstVisibleItemScrollOffset) = + if (lastScrollState.revision == ciphers.revision) { + val index = items + .indexOfFirst { it.id == lastScrollState.id } + .takeIf { it >= 0 } + index?.let { it to lastScrollState.offset } + } else { + null + } + // otherwise start with a first item + ?: (0 to 0) + + val a = object : SendListState.Content.Items.Revision.Mutable> { + override val value: Pair + get() { + val lastScrollState = scrollPositionSink.value + val v = if (lastScrollState.revision == ciphers.revision) { + val index = items + .indexOfFirst { it.id == lastScrollState.id } + .takeIf { it >= 0 } + index?.let { it to lastScrollState.offset } + } else { + null + } ?: (firstVisibleItemIndex to firstVisibleItemScrollOffset) + return v + } + } + val b = object : SendListState.Content.Items.Revision.Mutable { + override val value: Int + get() = a.value.first + } + val c = object : SendListState.Content.Items.Revision.Mutable { + override val value: Int + get() = a.value.second + } + SendListState.Content.Items( + onSelected = { key -> + itemSink.value = key.orEmpty() + }, + revision = SendListState.Content.Items.Revision( + id = ciphers.revision, + firstVisibleItemIndex = b, + firstVisibleItemScrollOffset = c, + onScroll = { index, offset -> + if (localScrollPositionKey !== scrollPositionKey) { + return@Revision + } + + val item = items.getOrNull(index) + ?: return@Revision + scrollPositionSink.value = OhOhOh( + id = item.id, + offset = offset, + revision = ciphers.revision, + ) + }, + ), + list = items, + count = ciphers.count, + selection = selection, + ) + } + + val itemsNullableFlow = itemsFlow + // First search might take some time, but we want to provide + // initial state as fast as we can. + .nullable() + .persistingStateIn(this, SharingStarted.WhileSubscribed(), null) + combine( + itemsNullableFlow, + filterListFlow, + comparatorsListFlow + .combine(sortSink) { a, b -> a to b }, + queryTrimmedFlow, + getAccounts() + .map { it.isNotEmpty() } + .distinctUntilChanged(), + ) { itemsContent, filters, (comparators, sort), (query, queryTrimmed), hasAccounts -> + val revision = filters.rev xor queryTrimmed.hashCode() xor sort.hashCode() + val content = if (hasAccounts) { + itemsContent + ?: SendListState.Content.Skeleton + } else { + SendListState.Content.AddAccount( + onAddAccount = { + val route = AccountsRoute + navigate(NavigationIntent.NavigateToRoute(route)) + }, + ) + } + val queryField = if (content !is SendListState.Content.AddAccount) { + // We want to let the user search while the items + // are still loading. + TextFieldModel2( + state = queryState, + text = query, + onChange = queryState::value::set, + ) + } else { + TextFieldModel2( + mutableStateOf(""), + ) + } + + fun createTypeAction( + type: DSecret.Type, + ) = FlatItemAction( + leading = icon(type.iconImageVector()), + title = translate(type.titleH()), + onClick = { + val autofill = when (mode) { + is AppMode.Main -> null + is AppMode.PickPasskey -> null + is AppMode.SavePasskey -> null + is AppMode.Save -> { + AddRoute.Args.Autofill.leof(mode.args) + } + + is AppMode.Pick -> { + AddRoute.Args.Autofill.leof(mode.args) + } + } + val route = LeAddRoute( + args = AddRoute.Args( + type = type, + autofill = autofill, + ), + ) + val intent = NavigationIntent.NavigateToRoute(route) + navigate(intent) + }, + ) + + val primaryActions = listOf( + createTypeAction( + type = DSecret.Type.Login, + ), + createTypeAction( + type = DSecret.Type.Card, + ), + createTypeAction( + type = DSecret.Type.Identity, + ), + createTypeAction( + type = DSecret.Type.SecureNote, + ), + ) + SendListState( + revision = revision, + query = queryField, + filters = filters.items, + sort = comparators + .takeIf { queryTrimmed.isEmpty() } + .orEmpty(), + primaryActions = primaryActions, + clearFilters = filters.onClear, + clearSort = if (sortDefault != sort) { + { + sortSink.value = sortDefault + } + } else { + null + }, + content = content, + sideEffects = SendListState.SideEffects(cipherSink), + ) + }.combine( + combine( + getCanWrite(), + selectionHandle.idsFlow, + ) { canWrite, itemIds -> + canWrite && itemIds.isEmpty() + }, + ) { state, canWrite -> + state.copy( + primaryActions = state.primaryActions.takeIf { canWrite }.orEmpty(), + ) + }.combine(actionsFlow) { state, actions -> + state.copy( + actions = actions, + ) + }.combine(showKeyboardSink) { state, showKeyboard -> + state.copy( + showKeyboard = showKeyboard && state.query.onChange != null, + ) + } +} + +private data class SearchToken( + val priority: Float, + val tokens: List, +) { + companion object { + operator fun invoke( + priority: Float, + value: String, + ) = SearchToken( + priority = priority, + tokens = value.lowercase().split(" "), + ) + } +} + +private class IndexedModel( + val model: T, + val indexedText: IndexedText, + val indexedOther: List, +) + +private data class FilteredModel( + val model: T, + val score: Float, + val result: IndexedText.FindResult?, +) + +private data class FilteredCiphers( + val list: List, + val revision: Int, +) + +private data class FilteredBoo( + val count: Int, + val list: List, + val preferredList: List, + val orderConfig: ComparatorHolder? = null, + val filterConfig: FilterSendHolder? = null, + val queryConfig: IndexedText? = null, +) + +private data class Preferences( + val appId: String? = null, + val webDomain: String? = null, +) + +private fun hahah( + directDI: DirectDI, + ciphersFlow: Flow>>, + orderFlow: Flow, + filterFlow: Flow, + queryFlow: Flow, + dateFormatter: DateFormatter, + highlightBackgroundColor: Color, + highlightContentColor: Color, +) = ciphersFlow + .map { items -> + FilteredBoo( + count = items.size, + list = items, + preferredList = emptyList(), + ) + } + .combine( + flow = orderFlow + .map { orderConfig -> + val orderComparator = Comparator> { a, b -> + val aModel = a.model + val bModel = b.model + + var r = 0 + if (r == 0) { + r = orderConfig.comparator.compare(aModel, bModel) + r = if (orderConfig.reversed) -r else r + } + if (r == 0) { + r = aModel.id.compareTo(bModel.id) + r = if (orderConfig.reversed) -r else r + } + r + } + orderConfig to orderComparator + }, + ) { state, (orderConfig, orderComparator) -> + val sortedAllItems = state.list.sortedWith(orderComparator) + state.copy( + list = sortedAllItems, + orderConfig = orderConfig, + ) + } + .combine( + flow = filterFlow, + ) { state, filterConfig -> + // Fast path: if the there are no filters, then + // just return original list of items. + if (filterConfig.state.isEmpty()) { + return@combine state.copy( + filterConfig = filterConfig, + ) + } + + val filteredAllItems = state + .list + .run { + val ciphers = map { it.model.source } + val predicate = filterConfig.filter.prepare(directDI, ciphers) + filter { predicate(it.model.source) } + } + val filteredPreferredItems = state + .preferredList + .run { + val ciphers = map { it.model.source } + val predicate = filterConfig.filter.prepare(directDI, ciphers) + filter { predicate(it.model.source) } + } + state.copy( + list = filteredAllItems, + preferredList = filteredPreferredItems, + filterConfig = filterConfig, + ) + } + .combine(queryFlow) { a, b -> a to b } // i want to use map latest + .mapLatest { (state, query) -> + if (query == null) { + return@mapLatest FilteredBoo( + count = state.list.size, + list = state.list.map { it.model }, + preferredList = state.preferredList.map { it.model }, + orderConfig = state.orderConfig, + filterConfig = state.filterConfig, + queryConfig = state.queryConfig, + ) + } + + val filteredAllItems = state.list.search( + query = query, + highlightBackgroundColor = highlightBackgroundColor, + highlightContentColor = highlightContentColor, + ) + val filteredPreferredItems = state.preferredList.search( + query = query, + highlightBackgroundColor = highlightBackgroundColor, + highlightContentColor = highlightContentColor, + ) + FilteredBoo( + count = filteredAllItems.size, + list = filteredAllItems, + preferredList = filteredPreferredItems, + orderConfig = state.orderConfig, + filterConfig = state.filterConfig, + queryConfig = query, + ) + } + .map { state -> + val keys = mutableSetOf() + + val orderConfig = state.orderConfig + val decorator: ItemDecorator = when { + // Search does not guarantee meaningful order that we can + // show in the section. + state.queryConfig != null -> ItemDecoratorNone + + orderConfig?.comparator is AlphabeticalSendSort && + // it looks ugly on small lists + state.list.size >= AlphabeticalSortMinItemsSize -> + ItemDecoratorTitle( + selector = { it.title.text }, + factory = { id, text -> + SendItem.Section( + id = id, + text = text, + ) + }, + ) + + orderConfig?.comparator is LastModifiedSendSort -> + ItemDecoratorDate( + dateFormatter = dateFormatter, + selector = { it.revisionDate }, + factory = { id, text -> + SendItem.Section( + id = id, + text = text, + ) + }, + ) + + orderConfig?.comparator is LastExpiredSendSort -> + ItemDecoratorDate( + dateFormatter = dateFormatter, + selector = { it.source.expirationDate }, + factory = { id, text -> + SendItem.Section( + id = id, + text = text, + ) + }, + ) + + orderConfig?.comparator is LastDeletedSendSort -> + ItemDecoratorDate( + dateFormatter = dateFormatter, + selector = { it.source.deletedDate }, + factory = { id, text -> + SendItem.Section( + id = id, + text = text, + ) + }, + ) + + else -> ItemDecoratorNone + } + + val items = sequence { + state.preferredList.forEach { item -> + yield(item) + } + if ( + state.preferredList.isNotEmpty() && + state.list.isNotEmpty() + ) { + val section = SendItem.Section( + id = "preferred.end", + text = "All items", + ) + yield(section) + } + state.list.forEach { item -> + val section = decorator.getOrNull(item) + if (section != null) yield(section) + + yield(item) + } + }.toList() + FilteredBoo( + count = state.list.size, + list = items, + preferredList = items, + orderConfig = state.orderConfig, + filterConfig = state.filterConfig, + queryConfig = state.queryConfig, + ) + } + +private suspend fun List>.search( + query: IndexedText, + highlightBackgroundColor: Color, + highlightContentColor: Color, +) = kotlin.run { + // Fast path if there's nothing to search from. + if (isEmpty()) { + return@run this + .map { + it.model + } + } + + val queryComponents = query + .components + .map { it.lowercase } + val timedValue = measureTimedValue { + parallelSearch { + val q = it.indexedOther + .fold(0f) { y, x -> + y + findAlike( + source = x.tokens, + query = queryComponents, + ) + }.div(it.indexedOther.size.coerceAtLeast(1)) + val r = it.indexedText.find( + query = query, + colorBackground = highlightBackgroundColor, + colorContent = highlightContentColor, + ) + if (r == null && q <= 0.0001f) { + return@parallelSearch null + } + FilteredModel( + model = it.model, + score = q + (r?.score ?: 0f), + result = r, + ) + } + .sortedWith( + compareBy( + { -it.score }, + ), + ) + .map { + it.result + ?: return@map it.model + // Replace the origin text with the one with + // search decor applied to it. + it.model.copy(title = it.result.highlightedText) + } + } + timedValue.value +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/SendRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/SendRoute.kt new file mode 100644 index 00000000..de3b760a --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/SendRoute.kt @@ -0,0 +1,42 @@ +package com.artemchep.keyguard.feature.send + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.common.model.DSendFilter +import com.artemchep.keyguard.feature.navigation.Route +import com.artemchep.keyguard.feature.send.search.SendSort + +object SendRoute : Route { + data class Args( + val appBar: AppBar? = null, + val filter: DSendFilter? = null, + val sort: SendSort? = null, + val main: Boolean = false, + val searchBy: SearchBy = SearchBy.ALL, + /** + * `true` to show only trashed items, `false` to show + * only active items, `null` to show both. + */ + val trash: Boolean? = false, + val preselect: Boolean = true, + val canAddSecrets: Boolean = true, + ) { + enum class SearchBy { + ALL, + PASSWORD, + } + + val canAlwaysShowKeyboard: Boolean get() = appBar?.title == null + + val canQuickFilter: Boolean get() = appBar?.title == null + + data class AppBar( + val title: String? = null, + val subtitle: String? = null, + ) + } + + @Composable + override fun Content() { + SendScreen(Args()) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/SendScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/SendScreen.kt new file mode 100644 index 00000000..b56b0002 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/SendScreen.kt @@ -0,0 +1,34 @@ +package com.artemchep.keyguard.feature.send + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.remember +import com.artemchep.keyguard.feature.navigation.LocalNavigationNodeVisualStack +import com.artemchep.keyguard.feature.navigation.NavigationRouter +import com.artemchep.keyguard.feature.send.list.SendListRoute +import com.artemchep.keyguard.feature.twopane.TwoPaneNavigationContent + +@Composable +fun SendScreen( + args: SendRoute.Args, +) { + val initialRoute = remember(args) { + SendListRoute + } + // Send screen actually does not add any depth to the + // navigation stack, it just renders sub-windows. + val visualStack = LocalNavigationNodeVisualStack.current + .run { + removeAt(lastIndex) + } + CompositionLocalProvider( + LocalNavigationNodeVisualStack provides visualStack, + ) { + NavigationRouter( + id = "send", + initial = initialRoute, + ) { backStack -> + TwoPaneNavigationContent(backStack) + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/action/showInLargeTypeActionOrNull.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/action/showInLargeTypeActionOrNull.kt new file mode 100644 index 00000000..49d26838 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/action/showInLargeTypeActionOrNull.kt @@ -0,0 +1,52 @@ +package com.artemchep.keyguard.feature.send.action + +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Send +import androidx.compose.material.icons.outlined.Share +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.feature.navigation.state.TranslatorScope +import com.artemchep.keyguard.platform.util.isRelease +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItemAction +import com.artemchep.keyguard.ui.icons.ChevronIcon +import com.artemchep.keyguard.ui.icons.icon + +fun createSendActionOrNull( + text: String, + navigate: (NavigationIntent) -> Unit, +) = if (isRelease) { + null +} else { + createSendAction( + text = text, + navigate = navigate, + ) +} + +fun createSendAction( + text: String, + navigate: (NavigationIntent) -> Unit, +) = FlatItemAction( + leading = icon(Icons.Outlined.Send), + title = "Send…", + onClick = { + }, +) + +fun createShareAction( + translator: TranslatorScope, + text: String, + navigate: (NavigationIntent) -> Unit, +) = FlatItemAction( + leading = icon(Icons.Outlined.Share), + trailing = { + ChevronIcon() + }, + title = translator.translate(Res.strings.text_action_share_with_title), + onClick = { + val intent = NavigationIntent.NavigateToShare( + text = text, + ) + navigate(intent) + }, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/list/SendListRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/list/SendListRoute.kt new file mode 100644 index 00000000..c24b2dd3 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/list/SendListRoute.kt @@ -0,0 +1,11 @@ +package com.artemchep.keyguard.feature.send.list + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.navigation.Route + +object SendListRoute : Route { + @Composable + override fun Content() { + SendListScreen() + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/list/SendListScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/list/SendListScreen.kt new file mode 100644 index 00000000..ae272a3e --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/list/SendListScreen.kt @@ -0,0 +1,633 @@ +package com.artemchep.keyguard.feature.send.list + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.heightIn +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.layout.widthIn +import androidx.compose.foundation.lazy.items +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.AccessTime +import androidx.compose.material.icons.outlined.Key +import androidx.compose.material.icons.outlined.PersonAdd +import androidx.compose.material.pullrefresh.pullRefresh +import androidx.compose.material.pullrefresh.rememberPullRefreshState +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.LocalAbsoluteTonalElevation +import androidx.compose.material3.LocalTextStyle +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.SideEffect +import androidx.compose.runtime.State +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.runtime.snapshotFlow +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.alpha +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.input.nestedscroll.nestedScroll +import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.LocalAppMode +import com.artemchep.keyguard.common.model.DSend +import com.artemchep.keyguard.common.model.expiredFlow +import com.artemchep.keyguard.feature.EmptySearchView +import com.artemchep.keyguard.feature.home.vault.component.FlatItemLayout2 +import com.artemchep.keyguard.feature.home.vault.component.SearchTextField +import com.artemchep.keyguard.feature.home.vault.component.Section +import com.artemchep.keyguard.feature.home.vault.component.rememberSecretAccentColor +import com.artemchep.keyguard.feature.home.vault.component.surfaceColorAtElevationSemi +import com.artemchep.keyguard.feature.navigation.LocalNavigationController +import com.artemchep.keyguard.feature.navigation.LocalNavigationEntry +import com.artemchep.keyguard.feature.navigation.LocalNavigationRouter +import com.artemchep.keyguard.feature.navigation.NavigationIcon +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.feature.search.filter.FilterButton +import com.artemchep.keyguard.feature.search.filter.FilterScreen +import com.artemchep.keyguard.feature.search.sort.SortButton +import com.artemchep.keyguard.feature.send.SendItem +import com.artemchep.keyguard.feature.send.SendListState +import com.artemchep.keyguard.feature.send.SendRoute +import com.artemchep.keyguard.feature.send.sendListScreenState +import com.artemchep.keyguard.feature.send.view.SendViewRoute +import com.artemchep.keyguard.feature.twopane.LocalHasDetailPane +import com.artemchep.keyguard.feature.twopane.TwoPaneScreen +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.AvatarBuilder +import com.artemchep.keyguard.ui.CollectedEffect +import com.artemchep.keyguard.ui.Compose +import com.artemchep.keyguard.ui.ExpandedIfNotEmptyForRow +import com.artemchep.keyguard.ui.FlatItem +import com.artemchep.keyguard.ui.FlatItemTextContent +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.OptionsButton +import com.artemchep.keyguard.ui.ScaffoldLazyColumn +import com.artemchep.keyguard.ui.focus.FocusRequester2 +import com.artemchep.keyguard.ui.focus.focusRequester2 +import com.artemchep.keyguard.ui.icons.ChevronIcon +import com.artemchep.keyguard.ui.icons.KeyguardNote +import com.artemchep.keyguard.ui.icons.KeyguardView +import com.artemchep.keyguard.ui.pulltosearch.PullToSearch +import com.artemchep.keyguard.ui.skeleton.SkeletonItem +import com.artemchep.keyguard.ui.theme.selectedContainer +import com.artemchep.keyguard.ui.toolbar.CustomToolbar +import dev.icerock.moko.resources.compose.stringResource + +@Composable +fun SendListScreen() { + val state = sendListScreenState( + args = remember { + SendRoute.Args() + }, + highlightBackgroundColor = MaterialTheme.colorScheme.tertiaryContainer, + highlightContentColor = MaterialTheme.colorScheme.onTertiaryContainer, + mode = LocalAppMode.current, + ) + val old = remember { + mutableStateOf(null) + } + SideEffect { + old.value = state + } + + val wtf = (state.content as? SendListState.Content.Items)?.onSelected + Compose { + val screenId = LocalNavigationEntry.current.id + val screenStack = LocalNavigationRouter.current.value + val childBackStackFlow = remember( + screenId, + screenStack, + ) { + snapshotFlow { + val backStack = screenStack + .indexOfFirst { it.id == screenId } + // take the next screen + .inc() + // check if in range + .takeIf { it in 1 until screenStack.size } + ?.let { index -> + screenStack.subList( + fromIndex = index, + toIndex = screenStack.size, + ) + } + .orEmpty() + backStack + } + } + LaunchedEffect(wtf, childBackStackFlow) { + childBackStackFlow.collect { backStack -> + val firstRoute = backStack.firstOrNull()?.route as? SendViewRoute? + wtf?.invoke(firstRoute?.sendId) + } + } + } + + val xd by rememberUpdatedState(LocalNavigationEntry.current.id) + val controller by rememberUpdatedState(LocalNavigationController.current) + CollectedEffect(state.sideEffects.showBiometricPromptFlow) { + val route = SendViewRoute( + sendId = it.id, + accountId = it.accountId, + ) + val intent = NavigationIntent.Composite( + listOf( + NavigationIntent.PopById(xd), + NavigationIntent.NavigateToRoute(route), + ), + ) + controller.queue(intent) + } + + TwoPaneScreen( + detail = { modifier -> + SendListFilterScreen( + modifier = modifier, + state = state, + ) + }, + ) { modifier, detailIsVisible -> + SendScreenContent( + modifier = modifier, + state = state, + showFilter = !detailIsVisible, + ) + } +} + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +private fun SendScreenContent( + modifier: Modifier = Modifier, + state: SendListState, + showFilter: Boolean, +) { + + val focusRequester = remember { + FocusRequester2() + } + val pullRefreshState = rememberPullRefreshState( + refreshing = false, + onRefresh = { + focusRequester.requestFocus() + }, + ) + val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior() + ScaffoldLazyColumn( + modifier = modifier + .pullRefresh(pullRefreshState) + .nestedScroll(scrollBehavior.nestedScrollConnection), + topAppBarScrollBehavior = scrollBehavior, + topBar = { + CustomToolbar( + scrollBehavior = scrollBehavior, + ) { + Column { + Row( + modifier = Modifier + .heightIn(min = 64.dp), + verticalAlignment = Alignment.CenterVertically, + ) { + Spacer(Modifier.width(4.dp)) + NavigationIcon() + Spacer(Modifier.width(4.dp)) + Column( + modifier = Modifier + .weight(1f) + .align(Alignment.CenterVertically), + ) { + Text( + text = stringResource(Res.strings.send_main_header_title), + style = MaterialTheme.typography.titleMedium, + overflow = TextOverflow.Ellipsis, + maxLines = 1, + ) + } + if (showFilter) { + Spacer(Modifier.width(4.dp)) + SendListFilterButton( + state = state, + ) + SendListSortButton( + state = state, + ) + OptionsButton( + actions = state.actions, + ) + } + Spacer(Modifier.width(4.dp)) + } + + SearchTextField( + modifier = Modifier + .focusRequester2(focusRequester), + text = state.query.state.value, + placeholder = stringResource(Res.strings.send_main_search_placeholder), + searchIcon = false, + leading = { + }, + trailing = { + }, + onTextChange = state.query.onChange, + onGoClick = null, + ) + } + } + }, + pullRefreshState = pullRefreshState, + overlay = { + PullToSearch( + modifier = Modifier + .padding(contentPadding.value), + pullRefreshState = pullRefreshState, + ) + }, + ) { + when (state.content) { + is SendListState.Content.Skeleton -> { + // Show a bunch of skeleton items, so it makes an impression of a + // fully loaded screen. + for (i in 0..3) { + item(i) { + SkeletonItem( + avatar = true, + ) + } + } + } + + else -> { + if (state.content is SendListState.Content.AddAccount) { + item("header.add_account") { + FlatItem( + elevation = 1.dp, + title = { + Text( + text = "Add an account", + style = MaterialTheme.typography.titleMedium, + ) + }, + leading = { + Icon(Icons.Outlined.PersonAdd, contentDescription = null) + }, + onClick = state.content.onAddAccount, + ) + } + } + val list = (state.content as? SendListState.Content.Items)?.list.orEmpty() + if (list.isEmpty()) { + item("header.empty") { + NoItemsPlaceholder() + } + } + items( + items = list, + key = { model -> model.id }, + ) { model -> + VaultSendItemText( + modifier = Modifier + .animateItemPlacement(), + item = model, + ) + } + } + } + } +} + +@Composable +private fun NoItemsPlaceholder( + modifier: Modifier = Modifier, +) { + EmptySearchView( + modifier = modifier, + ) +} + +@Composable +private fun SendListFilterScreen( + modifier: Modifier = Modifier, + state: SendListState, +) { + val count = (state.content as? SendListState.Content.Items)?.count + val filters = state.filters + val clearFilters = state.clearFilters + FilterScreen( + modifier = modifier, + count = count, + items = filters, + onClear = clearFilters, + actions = { + SendListSortButton( + state = state, + ) + OptionsButton( + actions = state.actions, + ) + }, + ) +} + +@Composable +private fun SendListFilterButton( + modifier: Modifier = Modifier, + state: SendListState, +) { + val count = (state.content as? SendListState.Content.Items)?.count + val filters = state.filters + val clearFilters = state.clearFilters + FilterButton( + modifier = modifier, + count = count, + items = filters, + onClear = clearFilters, + ) +} + +@Composable +private fun SendListSortButton( + modifier: Modifier = Modifier, + state: SendListState, +) { + val filters = state.sort + val clearFilters = state.clearSort + SortButton( + modifier = modifier, + items = filters, + onClear = clearFilters, + ) +} + +@Composable +fun VaultSendItemText( + modifier: Modifier = Modifier, + item: SendItem, +) = when (item) { + is SendItem.Item -> VaultSendItemText( + modifier = modifier, + item = item, + ) + + is SendItem.Section -> { + Section( + modifier = modifier, + text = item.text, + caps = item.caps, + ) + } +} + +@Composable +fun VaultSendItemText( + modifier: Modifier = Modifier, + item: SendItem.Item, +) { + val localState by item.localStateFlow.collectAsState() + val expiredState = remember(item.source) { + item.source.expiredFlow + }.collectAsState() + + val onClick = localState.selectableItemState.onClick + // fallback to default + ?: when (item.action) { + is SendItem.Item.Action.Go -> item.action.onClick + }.takeIf { localState.selectableItemState.can } + val onLongClick = localState.selectableItemState.onLongClick + + val backgroundColor = when { + localState.selectableItemState.selected -> MaterialTheme.colorScheme.primaryContainer + localState.openedState.isOpened -> + MaterialTheme.colorScheme.selectedContainer + .takeIf { LocalHasDetailPane.current } + ?: Color.Unspecified + + else -> Color.Unspecified + } + FlatItemLayout2( + modifier = modifier, + backgroundColor = backgroundColor, + content = { + FlatItemTextContent( + title = { + Text( + text = item.title, + overflow = TextOverflow.Ellipsis, + maxLines = 1, + ) + }, + text = item.text + ?.takeIf { it.isNotEmpty() } + ?.let { + // composable + { + Column { + Text( + text = it, + overflow = TextOverflow.Ellipsis, + maxLines = 4, + ) + if (item.notes != null && item.notes.isNotEmpty()) { + Spacer( + modifier = Modifier + .height(4.dp), + ) + Row( + verticalAlignment = Alignment.CenterVertically, + ) { + Icon( + modifier = Modifier + .width(14.dp), + imageVector = Icons.Outlined.KeyguardNote, + contentDescription = null, + tint = LocalTextStyle.current.color, + ) + Spacer( + modifier = Modifier + .width(8.dp), + ) + Text( + text = item.notes, + overflow = TextOverflow.Ellipsis, + maxLines = 4, + ) + } + } + } + } + }, + ) + + if (item.deletion != null) { + val elevation = LocalAbsoluteTonalElevation.current + Spacer( + modifier = Modifier + .height(4.dp), + ) + Row( + modifier = Modifier + .fillMaxWidth() + .alpha(MediumEmphasisAlpha), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.SpaceBetween, + ) { + Row( + verticalAlignment = Alignment.CenterVertically, + ) { + Icon( + modifier = Modifier + .width(14.dp), + imageVector = Icons.Outlined.AccessTime, + contentDescription = null, + ) + Spacer( + modifier = Modifier + .width(8.dp), + ) + Text( + text = item.deletion, + maxLines = 1, + overflow = TextOverflow.Ellipsis, + style = MaterialTheme.typography.labelMedium, + ) + } + Spacer( + modifier = Modifier + .width(16.dp), + ) + Row( + verticalAlignment = Alignment.CenterVertically, + ) { + Icon( + modifier = Modifier + .width(14.dp), + imageVector = Icons.Outlined.KeyguardView, + contentDescription = null, + ) + Spacer( + modifier = Modifier + .width(8.dp), + ) + Text( + text = item.source.accessCount.toString() + + item.source.maxAccessCount?.let { " / $it" } + .orEmpty(), + maxLines = 1, + overflow = TextOverflow.Ellipsis, + style = MaterialTheme.typography.labelMedium, + ) + } + } + } + }, + leading = { + AccountListItemTextIcon( + send = item.source, + item = item, + expiredState = expiredState, + ) + }, + trailing = { + ExpandedIfNotEmptyForRow( + Unit.takeIf { expiredState.value || item.source.disabled }, + ) { + Column( + verticalArrangement = Arrangement.spacedBy(4.dp), + horizontalAlignment = Alignment.End, + ) { + if (expiredState.value) { + val elevation = LocalAbsoluteTonalElevation.current + Text( + modifier = Modifier + .widthIn(max = 72.dp) + .background( + MaterialTheme.colorScheme + .surfaceColorAtElevationSemi(elevation + 2.dp), + MaterialTheme.shapes.small, + ) + .padding( + horizontal = 6.dp, + vertical = 2.dp, + ), + text = "Expired", + maxLines = 1, + overflow = TextOverflow.Ellipsis, + style = MaterialTheme.typography.labelMedium, + ) + } + if (item.source.disabled) { + val elevation = LocalAbsoluteTonalElevation.current + Text( + modifier = Modifier + .widthIn(max = 72.dp) + .background( + MaterialTheme.colorScheme + .surfaceColorAtElevationSemi(elevation + 2.dp), + MaterialTheme.shapes.small, + ) + .padding( + horizontal = 6.dp, + vertical = 2.dp, + ), + text = "Disabled", + maxLines = 1, + overflow = TextOverflow.Ellipsis, + style = MaterialTheme.typography.labelMedium, + ) + } + } + } + + Spacer(modifier = Modifier.width(8.dp)) + + ChevronIcon() + }, + onClick = onClick, + onLongClick = onLongClick, + ) +} + +@Composable +fun AccountListItemTextIcon( + modifier: Modifier = Modifier, + send: DSend, + item: SendItem.Item, + expiredState: State, +) { + val active = !send.disabled && !expiredState.value + val accent = rememberSecretAccentColor( + accentLight = item.accentLight, + accentDark = item.accentDark, + ) + AvatarBuilder( + modifier = modifier, + icon = item.icon, + accent = accent, + active = active, + badge = { + if (item.hasPassword) { + Icon( + modifier = Modifier + .size(16.dp) + .padding(1.dp), + imageVector = Icons.Outlined.Key, + contentDescription = null, + ) + } + }, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/search/AccessCountSort.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/search/AccessCountSort.kt new file mode 100644 index 00000000..98f03896 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/search/AccessCountSort.kt @@ -0,0 +1,31 @@ +package com.artemchep.keyguard.feature.send.search + +import com.artemchep.keyguard.feature.send.SendItem +import com.artemchep.keyguard.platform.parcelize.LeIgnoredOnParcel +import com.artemchep.keyguard.platform.parcelize.LeParcelize +import kotlinx.serialization.Serializable +import kotlinx.serialization.Transient + +@LeParcelize +@Serializable +object AccessCountSendSort : SendSort { + private object AccessCountRawComparator : Comparator { + override fun compare( + a: SendItem.Item, + b: SendItem.Item, + ): Int = compareValues(b.source.accessCount, a.source.accessCount) + } + + @LeIgnoredOnParcel + @Transient + override val id: String = "access_count" + + @LeIgnoredOnParcel + private val comparator = AccessCountRawComparator + .thenBy(AlphabeticalSendSort) { it } + + override fun compare( + a: SendItem.Item, + b: SendItem.Item, + ): Int = comparator.compare(a, b) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/search/AlphabeticalSort.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/search/AlphabeticalSort.kt new file mode 100644 index 00000000..86a16a81 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/search/AlphabeticalSort.kt @@ -0,0 +1,24 @@ +package com.artemchep.keyguard.feature.send.search + +import com.artemchep.keyguard.feature.send.SendItem +import com.artemchep.keyguard.platform.parcelize.LeIgnoredOnParcel +import com.artemchep.keyguard.platform.parcelize.LeParcelize +import kotlinx.serialization.Serializable +import kotlinx.serialization.Transient + +@LeParcelize +@Serializable +object AlphabeticalSendSort : SendSort { + @LeIgnoredOnParcel + @Transient + override val id: String = "alphabetical" + + override fun compare( + a: SendItem.Item, + b: SendItem.Item, + ): Int = kotlin.run { + val aTitle = a.title.text + val bTitle = b.title.text + aTitle.compareTo(bTitle, ignoreCase = true) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/search/LastDeletedSort.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/search/LastDeletedSort.kt new file mode 100644 index 00000000..224b6429 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/search/LastDeletedSort.kt @@ -0,0 +1,31 @@ +package com.artemchep.keyguard.feature.send.search + +import com.artemchep.keyguard.feature.send.SendItem +import com.artemchep.keyguard.platform.parcelize.LeIgnoredOnParcel +import com.artemchep.keyguard.platform.parcelize.LeParcelize +import kotlinx.serialization.Serializable +import kotlinx.serialization.Transient + +@LeParcelize +@Serializable +object LastDeletedSendSort : SendSort, PureSendSort { + private object LastDeletedRawComparator : Comparator { + override fun compare( + a: SendItem.Item, + b: SendItem.Item, + ): Int = compareValues(b.source.deletedDate, a.source.deletedDate) + } + + @LeIgnoredOnParcel + @Transient + override val id: String = "last_deleted" + + @LeIgnoredOnParcel + private val comparator = LastDeletedRawComparator + .thenBy(AlphabeticalSendSort) { it } + + override fun compare( + a: SendItem.Item, + b: SendItem.Item, + ): Int = comparator.compare(a, b) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/search/LastExpiredSort.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/search/LastExpiredSort.kt new file mode 100644 index 00000000..33f1b242 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/search/LastExpiredSort.kt @@ -0,0 +1,31 @@ +package com.artemchep.keyguard.feature.send.search + +import com.artemchep.keyguard.feature.send.SendItem +import com.artemchep.keyguard.platform.parcelize.LeIgnoredOnParcel +import com.artemchep.keyguard.platform.parcelize.LeParcelize +import kotlinx.serialization.Serializable +import kotlinx.serialization.Transient + +@LeParcelize +@Serializable +object LastExpiredSendSort : SendSort, PureSendSort { + private object LastExpiredRawComparator : Comparator { + override fun compare( + a: SendItem.Item, + b: SendItem.Item, + ): Int = compareValues(b.source.expirationDate, a.source.expirationDate) + } + + @LeIgnoredOnParcel + @Transient + override val id: String = "last_expired" + + @LeIgnoredOnParcel + private val comparator = LastExpiredRawComparator + .thenBy(AlphabeticalSendSort) { it } + + override fun compare( + a: SendItem.Item, + b: SendItem.Item, + ): Int = comparator.compare(a, b) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/search/LastModifiedSort.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/search/LastModifiedSort.kt new file mode 100644 index 00000000..88d1db0a --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/search/LastModifiedSort.kt @@ -0,0 +1,31 @@ +package com.artemchep.keyguard.feature.send.search + +import com.artemchep.keyguard.feature.send.SendItem +import com.artemchep.keyguard.platform.parcelize.LeIgnoredOnParcel +import com.artemchep.keyguard.platform.parcelize.LeParcelize +import kotlinx.serialization.Serializable +import kotlinx.serialization.Transient + +@LeParcelize +@Serializable +object LastModifiedSendSort : SendSort, PureSendSort { + private object LastModifiedRawComparator : Comparator { + override fun compare( + a: SendItem.Item, + b: SendItem.Item, + ): Int = compareValues(b.revisionDate, a.revisionDate) + } + + @LeIgnoredOnParcel + @Transient + override val id: String = "last_modified" + + @LeIgnoredOnParcel + private val comparator = LastModifiedRawComparator + .thenBy(AlphabeticalSendSort) { it } + + override fun compare( + a: SendItem.Item, + b: SendItem.Item, + ): Int = comparator.compare(a, b) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/search/SendListFilter.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/search/SendListFilter.kt new file mode 100644 index 00000000..5e273ceb --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/search/SendListFilter.kt @@ -0,0 +1,445 @@ +package com.artemchep.keyguard.feature.send.search + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.unit.dp +import arrow.core.partially1 +import arrow.core.widen +import com.artemchep.keyguard.common.model.DAccount +import com.artemchep.keyguard.common.model.DSend +import com.artemchep.keyguard.common.model.DSendFilter +import com.artemchep.keyguard.common.model.iconImageVector +import com.artemchep.keyguard.common.model.titleH +import com.artemchep.keyguard.feature.home.vault.component.rememberSecretAccentColor +import com.artemchep.keyguard.feature.navigation.state.PersistedStorage +import com.artemchep.keyguard.feature.navigation.state.RememberStateFlowScope +import com.artemchep.keyguard.feature.send.search.filter.FilterSendHolder +import com.artemchep.keyguard.feature.send.search.filter.SendFilterItem +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.icons.AccentColors +import com.artemchep.keyguard.ui.icons.IconBox +import com.artemchep.keyguard.ui.icons.generateAccentColorsByAccountId +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.flow.flowOn +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.update +import kotlinx.serialization.encodeToString +import org.kodein.di.DirectDI + +private fun mapCiphers( + flow: Flow>, + getter: (T) -> R, +) where R : Any? = flow + .map { ciphers -> + ciphers + .asSequence() + .map(getter) + .toSet() + } + .distinctUntilChanged() + +data class CreateFilterResult( + val filterFlow: Flow, + val onToggle: (String, Set) -> Unit, + val onClear: () -> Unit, +) + +suspend fun RememberStateFlowScope.createFilter(): CreateFilterResult { + val emptyState = FilterSendHolder( + state = mapOf(), + ) + + val filterSink = mutablePersistedFlow( + key = "ciphers.filters", + serialize = { json, value -> + json.encodeToString(value) + }, + deserialize = { json, value -> + json.decodeFromString(value) + }, + ) { emptyState } + val onClear = { + filterSink.value = emptyState + } + val onToggle = { sectionId: String, filters: Set -> + filterSink.update { holder -> + val activeFilters = holder.state.getOrElse(sectionId) { emptySet() } + val pendingFilters = filters + .filter { it !in activeFilters } + + val newFilters = if (pendingFilters.isNotEmpty()) { + // Add the filters from a clicked item if + // not all of them are already active. + activeFilters + pendingFilters + } else { + activeFilters - filters + } + val newState = holder.state + (sectionId to newFilters) + holder.copy( + state = newState, + ) + } + } + return CreateFilterResult( + filterFlow = filterSink, + onToggle = onToggle, + onClear = onClear, + ) +} + +data class OurFilterResult( + val rev: Int = 0, + val items: List = emptyList(), + val onClear: (() -> Unit)? = null, +) + +data class FilterParams( + val section: Section = Section(), +) { + data class Section( + val account: Boolean = true, + val type: Boolean = true, + val misc: Boolean = true, + ) +} + +suspend fun < + Output : Any, + Account, + Secret, + > RememberStateFlowScope.ah( + directDI: DirectDI, + outputGetter: (Output) -> DSend, + outputFlow: Flow>, + accountGetter: (Account) -> DAccount, + accountFlow: Flow>, + cipherGetter: (Secret) -> DSend, + cipherFlow: Flow>, + input: CreateFilterResult, + params: FilterParams = FilterParams(), +): Flow { + val storage = kotlin.run { + val disk = loadDiskHandle("ciphers.filter") + PersistedStorage.InDisk(disk) + } + + val collapsedSectionIdsSink = + mutablePersistedFlow>("ciphers.sections", storage) { emptyList() } + + fun toggleSection(sectionId: String) { + collapsedSectionIdsSink.update { + val shouldAdd = sectionId !in it + if (shouldAdd) { + it + sectionId + } else { + it - sectionId + } + } + } + + val outputCipherFlow = outputFlow + .map { list -> + list + .map { outputGetter(it) } + } + + val filterTypesWithCiphers = mapCiphers(cipherFlow) { cipherGetter(it).type } + val filterAccountsWithCiphers = mapCiphers(cipherFlow) { cipherGetter(it).accountId } + + fun Flow>.filterSection( + enabled: Boolean, + ) = if (enabled) { + this + } else { + flowOf(emptyList()) + } + + fun Flow>.aaa( + sectionId: String, + sectionTitle: String, + collapse: Boolean = true, + ) = this + .combine(input.filterFlow) { items, filterHolder -> + items + .map { item -> + val shouldBeChecked = kotlin.run { + val activeFilters = filterHolder.state[item.filterSectionId].orEmpty() + item.filters + .all { itemFilter -> + itemFilter in activeFilters + } + } + if (shouldBeChecked == item.checked) { + return@map item + } + + item.copy(checked = shouldBeChecked) + } + } + .distinctUntilChanged() + .map { items -> + if (items.size <= 1 && collapse) { + // Do not show a single filter item. + return@map emptyList() + } + + items + .widen() + .toMutableList() + .apply { + val sectionItem = SendFilterItem.Section( + sectionId = sectionId, + text = sectionTitle, + onClick = { + toggleSection(sectionId) + }, + ) + add(0, sectionItem) + } + } + + val setOfNull = setOf(null) + + val typeSectionId = "type" + val accountSectionId = "account" + val miscSectionId = "misc" + + fun createFilterAction( + sectionId: String, + filter: Set, + filterSectionId: String = sectionId, + title: String, + text: String? = null, + tint: AccentColors? = null, + icon: ImageVector? = null, + ) = SendFilterItem.Item( + sectionId = sectionId, + filterSectionId = filterSectionId, + filters = filter, + leading = when { + icon != null -> { + // composable + { + IconBox(main = icon) + } + } + + tint != null -> { + // composable + { + Box( + modifier = Modifier + .padding(2.dp), + contentAlignment = Alignment.Center, + ) { + val color = rememberSecretAccentColor( + accentLight = tint.light, + accentDark = tint.dark, + ) + Box( + modifier = Modifier + .fillMaxSize() + .background(color, CircleShape), + ) + } + } + } + + else -> null + }, + title = title, + text = text, + onClick = input.onToggle + .partially1(filterSectionId) + .partially1(filter), + checked = false, + fill = false, + indent = 0, + ) + + fun createAccountFilterAction( + accountIds: Set, + title: String, + text: String, + tint: AccentColors? = null, + icon: ImageVector? = null, + ) = createFilterAction( + sectionId = accountSectionId, + filter = accountIds + .asSequence() + .map { accountId -> + DSendFilter.ById( + id = accountId, + what = DSendFilter.ById.What.ACCOUNT, + ) + } + .toSet(), + title = title, + text = text, + tint = tint, + icon = icon, + ) + + fun createTypeFilterAction( + type: DSend.Type, + ) = createFilterAction( + sectionId = typeSectionId, + filter = setOf( + DSendFilter.ByType(type), + ), + title = translate(type.titleH()), + icon = type.iconImageVector(), + ) + + val filterAccountListFlow = accountFlow + .map { accounts -> + accounts + .map { account -> + val model = accountGetter(account) + val accountId = model.accountId() + val tint = generateAccentColorsByAccountId(accountId) + createAccountFilterAction( + accountIds = setOf( + model.accountId(), + ), + title = model.username, + text = model.host, + tint = tint, + ) + } + } + .combine(filterAccountsWithCiphers) { items, accountIds -> + items + .filter { filterItem -> + filterItem.filters + .any { filter -> + val filterFixed = filter as DSendFilter.ById + require(filterFixed.what == DSendFilter.ById.What.ACCOUNT) + filterFixed.id in accountIds + } + } + } + .aaa( + sectionId = accountSectionId, + sectionTitle = translate(Res.strings.account), + ) + .filterSection(params.section.account) + + val filterTypesAll = listOf( + DSend.Type.Text to createTypeFilterAction( + type = DSend.Type.Text, + ), + DSend.Type.File to createTypeFilterAction( + type = DSend.Type.File, + ), + ) + + val filterTypeListFlow = filterTypesWithCiphers + .map { types -> + filterTypesAll.mapNotNull { (type, item) -> + item.takeIf { type in types } + } + } + .aaa( + sectionId = typeSectionId, + sectionTitle = translate(Res.strings.type), + ) + .filterSection(params.section.type) + + val filterMiscAll = listOf( + ) + + val filterMiscListFlow = flowOf(Unit) + .map { + filterMiscAll + } + .aaa( + sectionId = miscSectionId, + sectionTitle = translate(Res.strings.misc), + collapse = false, + ) + .filterSection(params.section.misc) + + return combine( + filterAccountListFlow, + filterTypeListFlow, + filterMiscListFlow, + ) { a -> a.flatMap { it } } + .combine(collapsedSectionIdsSink) { items, collapsedSectionIds -> + var skippedSectionId: String? = null + + val out = mutableListOf() + items.forEach { item -> + if (item is SendFilterItem.Section) { + val collapsed = item.sectionId in collapsedSectionIds + skippedSectionId = item.sectionId.takeIf { collapsed } + + out += if (collapsed) { + item.copy(expanded = false) + } else { + item + } + } else { + if (item.sectionId != skippedSectionId) { + out += item + } + } + } + out + } + .combine(outputCipherFlow) { items, outputCiphers -> + val checkedSectionIds = items + .asSequence() + .mapNotNull { + when (it) { + is SendFilterItem.Section -> null + is SendFilterItem.Item -> it.takeIf { it.checked } + ?.sectionId + } + } + .toSet() + + val out = mutableListOf() + items.forEach { item -> + when (item) { + is SendFilterItem.Section -> out += item + is SendFilterItem.Item -> { + val fastEnabled = item.checked || item.sectionId in checkedSectionIds + val enabled = fastEnabled || kotlin.run { + item.filters + .any { filter -> + val filterPredicate = filter.prepare(directDI, outputCiphers) + outputCiphers.any(filterPredicate) + } + } + + if (enabled) { + out += item + return@forEach + } + + out += item.copy(onClick = null) + } + } + } + out + } + .combine(input.filterFlow) { a, b -> + OurFilterResult( + rev = b.id, + items = a, + onClear = input.onClear.takeIf { b.id != 0 }, + ) + } + .flowOn(Dispatchers.Default) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/search/SendSortItem.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/search/SendSortItem.kt new file mode 100644 index 00000000..4d5d32d1 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/search/SendSortItem.kt @@ -0,0 +1,28 @@ +package com.artemchep.keyguard.feature.send.search + +import androidx.compose.ui.graphics.vector.ImageVector +import arrow.optics.optics +import com.artemchep.keyguard.feature.localization.TextHolder +import com.artemchep.keyguard.feature.search.sort.model.SortItemModel +import com.artemchep.keyguard.feature.send.ComparatorHolder + +@optics +sealed interface SendSortItem : SortItemModel { + companion object; + + data class Section( + override val id: String, + override val text: TextHolder? = null, + ) : SendSortItem, SortItemModel.Section { + companion object + } + + data class Item( + override val id: String, + val config: ComparatorHolder, + override val icon: ImageVector? = null, + override val title: TextHolder, + override val checked: Boolean, + override val onClick: (() -> Unit)? = null, + ) : SendSortItem, SortItemModel.Item +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/search/Sort.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/search/Sort.kt new file mode 100644 index 00000000..4d7a5b46 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/search/Sort.kt @@ -0,0 +1,23 @@ +package com.artemchep.keyguard.feature.send.search + +import com.artemchep.keyguard.feature.send.SendItem +import com.artemchep.keyguard.platform.parcelize.LeParcelable + +interface PureSendSort : Comparator { + val id: String +} + +interface SendSort : PureSendSort, LeParcelable { + companion object { + fun valueOf( + name: String, + ): SendSort? = when (name) { + AlphabeticalSendSort.id -> AlphabeticalSendSort + AccessCountSendSort.id -> AccessCountSendSort + LastModifiedSendSort.id -> LastModifiedSendSort + LastExpiredSendSort.id -> LastExpiredSendSort + LastDeletedSendSort.id -> LastDeletedSendSort + else -> null + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/search/filter/AccountFilter.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/search/filter/AccountFilter.kt new file mode 100644 index 00000000..93effd56 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/search/filter/AccountFilter.kt @@ -0,0 +1,9 @@ +package com.artemchep.keyguard.feature.send.search.filter + +import arrow.optics.Getter +import com.artemchep.keyguard.platform.parcelize.LeParcelize + +@LeParcelize +data class AccountFilter( + override val id: String, +) : SendFilter, PureSendFilter by PureSendFilter(id, Getter { it.accountId }) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/search/filter/AndFilter.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/search/filter/AndFilter.kt new file mode 100644 index 00000000..80b5c493 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/search/filter/AndFilter.kt @@ -0,0 +1,25 @@ +package com.artemchep.keyguard.feature.send.search.filter + +import com.artemchep.keyguard.feature.send.SendItem +import com.artemchep.keyguard.platform.parcelize.LeParcelize + +@LeParcelize +data class AndSendFilter( + val filters: List, + override val id: String = "and_filter:" + filters.joinToString(separator = ",") { it.id.orEmpty() }, +) : SendFilter, PureSendFilter { + override fun invoke( + list: List, + getter: (Any) -> SendItem.Item, + ): (SendItem.Item) -> Boolean = kotlin.run { + val a = filters + .map { filter -> + filter.invoke(list, getter) + } + + // lambda + fun( + item: SendItem.Item, + ): Boolean = a.all { it(item) } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/search/filter/Filter.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/search/filter/Filter.kt new file mode 100644 index 00000000..87a84ffc --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/search/filter/Filter.kt @@ -0,0 +1,27 @@ +package com.artemchep.keyguard.feature.send.search.filter + +import arrow.optics.Getter +import com.artemchep.keyguard.feature.send.SendItem +import com.artemchep.keyguard.platform.parcelize.LeParcelable + +interface PureSendFilter : (List, (Any) -> SendItem.Item) -> (SendItem.Item) -> Boolean { + companion object { + operator fun invoke( + value: String, + getter: Getter, + ): PureSendFilter = object : PureSendFilter { + override val id: String = value + + override fun invoke( + list: List, + getter: (Any) -> SendItem.Item, + ): (SendItem.Item) -> Boolean = ::internalFilter + + private fun internalFilter(item: SendItem.Item) = getter.get(item) == value + } + } + + val id: String? +} + +interface SendFilter : PureSendFilter, LeParcelable diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/search/filter/FilterHolder.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/search/filter/FilterHolder.kt new file mode 100644 index 00000000..f6268b58 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/search/filter/FilterHolder.kt @@ -0,0 +1,22 @@ +package com.artemchep.keyguard.feature.send.search.filter + +import com.artemchep.keyguard.common.model.DSendFilter + +@kotlinx.serialization.Serializable +data class FilterSendHolder( + val state: Map>, +) { + val filter by lazy { + val f = state + .map { + val filters = DSendFilter.Or(it.value) + filters + } + DSendFilter.And(f) + } + + val id: Int = state + .asSequence() + .flatMap { it.value } + .fold(0) { y, x -> y xor x.key.hashCode() } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/search/filter/FilterItem.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/search/filter/FilterItem.kt new file mode 100644 index 00000000..4cff8bd0 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/search/filter/FilterItem.kt @@ -0,0 +1,42 @@ +package com.artemchep.keyguard.feature.send.search.filter + +import androidx.compose.runtime.Composable +import arrow.optics.optics +import com.artemchep.keyguard.common.model.DSendFilter +import com.artemchep.keyguard.feature.search.filter.model.FilterItemModel + +@optics +sealed interface SendFilterItem : FilterItemModel { + companion object + + val sectionId: String + + data class Section( + override val sectionId: String, + override val text: String, + override val expanded: Boolean = true, + override val onClick: () -> Unit, + ) : SendFilterItem, FilterItemModel.Section { + companion object; + + override val id: String = sectionId + } + + data class Item( + override val sectionId: String, + val filterSectionId: String, + val filters: Set, + override val checked: Boolean, + override val fill: Boolean, + override val indent: Int, + override val leading: (@Composable () -> Unit)?, + override val title: String, + override val text: String?, + override val onClick: (() -> Unit)?, + ) : SendFilterItem, FilterItemModel.Item { + companion object; + + override val id: String = + sectionId + "|" + filterSectionId + "|" + filters.joinToString(separator = ",") { it.key } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/search/filter/OrFilter.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/search/filter/OrFilter.kt new file mode 100644 index 00000000..9bde2484 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/search/filter/OrFilter.kt @@ -0,0 +1,29 @@ +package com.artemchep.keyguard.feature.send.search.filter + +import arrow.core.partially1 +import com.artemchep.keyguard.feature.send.SendItem +import com.artemchep.keyguard.platform.parcelize.LeParcelize + +@LeParcelize +data class OrSendFilter( + val filters: List, + override val id: String = "or_filter:" + filters.joinToString(separator = ",") { it.id.orEmpty() }, +) : SendFilter, PureSendFilter { + override fun invoke( + list: List, + getter: (Any) -> SendItem.Item, + ): (SendItem.Item) -> Boolean = kotlin.run { + val a = filters + .map { filter -> + filter.invoke(list, getter) + } + + // lambda + ::filte.partially1(a) + } + + private fun filte( + a: List<(SendItem.Item) -> Boolean>, + item: SendItem.Item, + ) = a.any { it(item) } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/search/filter/TypeFilter.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/search/filter/TypeFilter.kt new file mode 100644 index 00000000..1d00b4fd --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/search/filter/TypeFilter.kt @@ -0,0 +1,9 @@ +package com.artemchep.keyguard.feature.send.search.filter + +import arrow.optics.Getter +import com.artemchep.keyguard.platform.parcelize.LeParcelize + +@LeParcelize +data class TypeSendFilter( + override val id: String, +) : SendFilter, PureSendFilter by PureSendFilter(id, Getter { it.type }) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/view/SendViewScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/view/SendViewScreen.kt new file mode 100644 index 00000000..9d121581 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/view/SendViewScreen.kt @@ -0,0 +1,348 @@ +package com.artemchep.keyguard.feature.send.view + +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.RowScope +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.lazy.LazyListState +import androidx.compose.foundation.lazy.items +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.ContentCopy +import androidx.compose.material.icons.outlined.Share +import androidx.compose.material3.LocalAbsoluteTonalElevation +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.material3.minimumInteractiveComponentSize +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.runtime.saveable.rememberSaveable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.alpha +import androidx.compose.ui.draw.clip +import androidx.compose.ui.input.nestedscroll.nestedScroll +import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.feature.home.vault.component.VaultItemIcon2 +import com.artemchep.keyguard.feature.home.vault.component.VaultViewItem +import com.artemchep.keyguard.feature.home.vault.component.rememberSecretAccentColor +import com.artemchep.keyguard.feature.home.vault.component.surfaceColorAtElevationSemi +import com.artemchep.keyguard.feature.home.vault.model.VaultItemIcon +import com.artemchep.keyguard.feature.navigation.NavigationIcon +import com.artemchep.keyguard.ui.Avatar +import com.artemchep.keyguard.ui.DefaultFab +import com.artemchep.keyguard.ui.DisabledEmphasisAlpha +import com.artemchep.keyguard.ui.FabState +import com.artemchep.keyguard.ui.FlatItemLayout +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.OptionsButton +import com.artemchep.keyguard.ui.Placeholder +import com.artemchep.keyguard.ui.ScaffoldLazyColumn +import com.artemchep.keyguard.ui.SmallFab +import com.artemchep.keyguard.ui.icons.IconBox +import com.artemchep.keyguard.ui.icons.OfflineIcon +import com.artemchep.keyguard.ui.shimmer.shimmer +import com.artemchep.keyguard.ui.skeleton.SkeletonText +import com.artemchep.keyguard.ui.theme.combineAlpha +import com.artemchep.keyguard.ui.toolbar.LargeToolbar + +@Composable +fun SendViewScreen( + sendId: String, + accountId: String, +) { + val state = sendViewScreenState( + contentColor = LocalContentColor.current, + disabledContentColor = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + sendId = sendId, + accountId = accountId, + ) + val listState = rememberSaveable( + 0, + saver = LazyListState.Saver, + ) { + LazyListState( + firstVisibleItemIndex = 0, + firstVisibleItemScrollOffset = 0, + ) + } + val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior() + ScaffoldLazyColumn( + modifier = Modifier + .nestedScroll(scrollBehavior.nestedScrollConnection), + topAppBarScrollBehavior = scrollBehavior, + topBar = { + LargeToolbar( + title = { + VaultViewTitle( + state = state, + ) + }, + navigationIcon = { + NavigationIcon() + }, + actions = { + VaultViewTitleActions( + state = state, + ) + }, + scrollBehavior = scrollBehavior, + ) + }, + floatingActionState = run { + val fabVisible = (state.content as? SendViewState.Content.Cipher) + ?.onCopy != null || true // TODO: Why would I need it? + val fabState = if (fabVisible) { + FabState( + onClick = (state.content as? SendViewState.Content.Cipher) + ?.onCopy, + model = null, + ) + } else { + null + } + rememberUpdatedState(newValue = fabState) + }, + floatingActionButton = { + val updatedOnShare by rememberUpdatedState( + (state.content as? SendViewState.Content.Cipher) + ?.onShare, + ) + Column( + horizontalAlignment = Alignment.End, + verticalArrangement = Arrangement.spacedBy(16.dp), + ) { + SmallFab( + onClick = { + updatedOnShare?.invoke() + }, + icon = { + IconBox(main = Icons.Outlined.Share) + }, + ) + DefaultFab( + icon = { + IconBox(main = Icons.Outlined.ContentCopy) + }, + text = { + Text( + text = "Copy share", + ) + }, + ) + } + }, + listState = listState, + ) { + when (state.content) { + is SendViewState.Content.Loading -> { + // Show a bunch of skeleton items, so it makes an impression of a + // fully loaded screen. + for (i in 0..1) { + item(i) { + val contentColor = + LocalContentColor.current.copy(alpha = DisabledEmphasisAlpha) + FlatItemLayout( + modifier = Modifier + .shimmer(), + backgroundColor = contentColor.copy(alpha = 0.08f), + content = { + Box( + Modifier + .height(13.dp) + .fillMaxWidth(0.15f) + .clip(MaterialTheme.shapes.medium) + .background(contentColor.copy(alpha = 0.2f)), + ) + Box( + Modifier + .padding(top = 4.dp) + .height(18.dp) + .fillMaxWidth(0.38f) + .clip(MaterialTheme.shapes.medium) + .background(contentColor), + ) + }, + ) + } + } + item(-1) { + val contentColor = + LocalContentColor.current.copy(alpha = DisabledEmphasisAlpha) + Box( + modifier = Modifier + .padding(top = 8.dp) + .fillMaxWidth(), + contentAlignment = Alignment.Center, + ) { + Box( + Modifier + .shimmer() + .height(10.dp) + .fillMaxWidth(0.38f) + .clip(MaterialTheme.shapes.medium) + .background(contentColor.copy(alpha = 0.23f)), + ) + } + Box( + modifier = Modifier + .padding(top = 8.dp) + .fillMaxWidth(), + contentAlignment = Alignment.Center, + ) { + Box( + Modifier + .shimmer() + .height(10.dp) + .fillMaxWidth(0.38f) + .clip(MaterialTheme.shapes.medium) + .background(contentColor.copy(alpha = 0.23f)), + ) + } + } + } + + is SendViewState.Content.Cipher -> { + val list = state.content.items + if (list.isEmpty()) { + item("header.empty") { + Placeholder() + } + } + items( + items = list, + key = { model -> model.id }, + ) { model -> + VaultViewItem( + modifier = Modifier + .animateItemPlacement(), + item = model, + ) + } + } + + else -> { + // Do nothing. + } + } + } +} + +@Composable +private fun VaultViewTitle( + state: SendViewState, +) = Row( + verticalAlignment = Alignment.CenterVertically, +) { + val isLoading = state.content is SendViewState.Content.Loading + val shimmerColor = LocalContentColor.current + .combineAlpha(DisabledEmphasisAlpha) + + val avatarBackground = when (state.content) { + is SendViewState.Content.Loading -> shimmerColor + is SendViewState.Content.NotFound -> shimmerColor + is SendViewState.Content.Cipher -> { + val avatarIcon = state.content.icon + val avatarBackground = if ( + avatarIcon !is VaultItemIcon.VectorIcon && + avatarIcon !is VaultItemIcon.TextIcon + ) { + val elevation = LocalAbsoluteTonalElevation.current + 8.dp + MaterialTheme.colorScheme + .surfaceColorAtElevationSemi(elevation = elevation) + .combineAlpha(LocalContentColor.current.alpha) + } else { + rememberSecretAccentColor( + accentLight = state.content.data.accentLight, + accentDark = state.content.data.accentDark, + ) + } + avatarBackground + } + } + Avatar( + modifier = Modifier + .then( + if (isLoading) { + Modifier + .shimmer() + } else { + Modifier + }, + ), + color = avatarBackground, + ) { + val icon = SendViewState.content.cipher.icon.getOrNull(state) + if (icon != null) { + VaultItemIcon2( + icon, + modifier = Modifier + .alpha(LocalContentColor.current.alpha), + ) + } + } + Spacer(modifier = Modifier.width(16.dp)) + when (state.content) { + is SendViewState.Content.Loading -> { + SkeletonText( + modifier = Modifier + .fillMaxWidth(0.33f), + emphasis = MediumEmphasisAlpha, + ) + // Apparently a text has some sort of margins? + Text("") + } + + is SendViewState.Content.Cipher -> { + val name = state.content.data.name + Text( + text = name, + maxLines = 2, + overflow = TextOverflow.Ellipsis, + ) + } + + is SendViewState.Content.NotFound -> { + Text( + text = "Not found", + color = MaterialTheme.colorScheme.error + .combineAlpha(LocalContentColor.current.alpha), + ) + } + } + Spacer(modifier = Modifier.width(8.dp)) +} + +@Composable +private fun RowScope.VaultViewTitleActions( + state: SendViewState, +) { + if (state.content is SendViewState.Content.Cipher) { + val synced = state.content.synced + AnimatedVisibility( + modifier = Modifier + .alpha(LocalContentColor.current.alpha), + visible = !synced, + ) { + OfflineIcon( + modifier = Modifier + .minimumInteractiveComponentSize(), + ) + } + OptionsButton( + actions = state.content.actions, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/view/SendViewState.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/view/SendViewState.kt new file mode 100644 index 00000000..b18e784b --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/view/SendViewState.kt @@ -0,0 +1,42 @@ +package com.artemchep.keyguard.feature.send.view + +import androidx.compose.runtime.Immutable +import arrow.optics.optics +import com.artemchep.keyguard.common.model.DSend +import com.artemchep.keyguard.feature.home.vault.model.VaultItemIcon +import com.artemchep.keyguard.feature.home.vault.model.VaultViewItem +import com.artemchep.keyguard.ui.FlatItemAction + +@Immutable +@optics +data class SendViewState( + val content: Content = Content.Loading, +) { + companion object; + + @Immutable + @optics + sealed interface Content { + companion object; + + @Immutable + @optics + data class Cipher( + val data: DSend, + val icon: VaultItemIcon, + val synced: Boolean, + val onCopy: (() -> Unit)?, + val onShare: (() -> Unit)?, + val actions: List, + val items: List, + ) : Content { + companion object; + } + + @Immutable + data object NotFound : Content + + @Immutable + data object Loading : Content + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/view/SendViewStateProducer.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/view/SendViewStateProducer.kt new file mode 100644 index 00000000..f202f181 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/view/SendViewStateProducer.kt @@ -0,0 +1,694 @@ +package com.artemchep.keyguard.feature.send.view + +import androidx.compose.foundation.layout.RowScope +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Email +import androidx.compose.material.icons.outlined.Launch +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.text.AnnotatedString +import androidx.compose.ui.text.SpanStyle +import androidx.compose.ui.text.buildAnnotatedString +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.android.downloader.journal.room.DownloadInfoEntity2 +import com.artemchep.keyguard.common.io.attempt +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.io.ioRaise +import com.artemchep.keyguard.common.io.ioUnit +import com.artemchep.keyguard.common.model.BarcodeImageFormat +import com.artemchep.keyguard.common.model.DAccount +import com.artemchep.keyguard.common.model.DSecret +import com.artemchep.keyguard.common.model.DSend +import com.artemchep.keyguard.common.model.LinkInfo +import com.artemchep.keyguard.common.service.clipboard.ClipboardService +import com.artemchep.keyguard.common.service.download.DownloadManager +import com.artemchep.keyguard.common.service.extract.LinkInfoExtractor +import com.artemchep.keyguard.common.service.twofa.TwoFaService +import com.artemchep.keyguard.common.usecase.AddCipherOpenedHistory +import com.artemchep.keyguard.common.usecase.ChangeCipherNameById +import com.artemchep.keyguard.common.usecase.ChangeCipherPasswordById +import com.artemchep.keyguard.common.usecase.CipherExpiringCheck +import com.artemchep.keyguard.common.usecase.CipherFieldSwitchToggle +import com.artemchep.keyguard.common.usecase.CipherIncompleteCheck +import com.artemchep.keyguard.common.usecase.CipherUnsecureUrlAutoFix +import com.artemchep.keyguard.common.usecase.CipherUnsecureUrlCheck +import com.artemchep.keyguard.common.usecase.CipherUrlCheck +import com.artemchep.keyguard.common.usecase.CopyCipherById +import com.artemchep.keyguard.common.usecase.CopyText +import com.artemchep.keyguard.common.usecase.DateFormatter +import com.artemchep.keyguard.common.usecase.DownloadAttachment +import com.artemchep.keyguard.common.usecase.FavouriteCipherById +import com.artemchep.keyguard.common.usecase.GetAccounts +import com.artemchep.keyguard.common.usecase.GetAppIcons +import com.artemchep.keyguard.common.usecase.GetCanWrite +import com.artemchep.keyguard.common.usecase.GetCollections +import com.artemchep.keyguard.common.usecase.GetConcealFields +import com.artemchep.keyguard.common.usecase.GetEnvSendUrl +import com.artemchep.keyguard.common.usecase.GetFolders +import com.artemchep.keyguard.common.usecase.GetGravatarUrl +import com.artemchep.keyguard.common.usecase.GetMarkdown +import com.artemchep.keyguard.common.usecase.GetOrganizations +import com.artemchep.keyguard.common.usecase.GetPasswordStrength +import com.artemchep.keyguard.common.usecase.GetSends +import com.artemchep.keyguard.common.usecase.GetWebsiteIcons +import com.artemchep.keyguard.common.usecase.MoveCipherToFolderById +import com.artemchep.keyguard.common.usecase.RemoveAttachment +import com.artemchep.keyguard.common.usecase.RemoveCipherById +import com.artemchep.keyguard.common.usecase.RestoreCipherById +import com.artemchep.keyguard.common.usecase.RetryCipher +import com.artemchep.keyguard.common.usecase.TrashCipherById +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.feature.attachments.util.createAttachmentItem +import com.artemchep.keyguard.feature.barcodetype.BarcodeTypeRoute +import com.artemchep.keyguard.feature.favicon.FaviconImage +import com.artemchep.keyguard.feature.favicon.FaviconUrl +import com.artemchep.keyguard.feature.home.vault.model.VaultViewItem +import com.artemchep.keyguard.feature.largetype.LargeTypeRoute +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.feature.navigation.state.RememberStateFlowScope +import com.artemchep.keyguard.feature.navigation.state.copy +import com.artemchep.keyguard.feature.navigation.state.produceScreenState +import com.artemchep.keyguard.feature.send.action.createSendActionOrNull +import com.artemchep.keyguard.feature.send.action.createShareAction +import com.artemchep.keyguard.feature.send.toVaultItemIcon +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItemAction +import com.artemchep.keyguard.ui.buildContextItems +import com.artemchep.keyguard.ui.icons.ChevronIcon +import com.artemchep.keyguard.ui.icons.IconBox +import com.artemchep.keyguard.ui.icons.KeyguardView +import com.artemchep.keyguard.ui.selection.SelectionHandle +import com.artemchep.keyguard.ui.selection.selectionHandle +import com.artemchep.keyguard.ui.text.annotate +import io.ktor.http.Url +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.flow.flow +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.toList +import org.kodein.di.allInstances +import org.kodein.di.compose.localDI +import org.kodein.di.direct +import org.kodein.di.instance + +@Composable +fun sendViewScreenState( + contentColor: Color, + disabledContentColor: Color, + sendId: String, + accountId: String, +) = with(localDI().direct) { + sendViewScreenState( + getAccounts = instance(), + getCanWrite = instance(), + getSends = instance(), + getCollections = instance(), + getOrganizations = instance(), + getFolders = instance(), + getConcealFields = instance(), + getMarkdown = instance(), + getAppIcons = instance(), + getWebsiteIcons = instance(), + getPasswordStrength = instance(), + cipherUnsecureUrlCheck = instance(), + cipherUnsecureUrlAutoFix = instance(), + cipherFieldSwitchToggle = instance(), + moveCipherToFolderById = instance(), + changeCipherNameById = instance(), + changeCipherPasswordById = instance(), + retryCipher = instance(), + copyCipherById = instance(), + restoreCipherById = instance(), + trashCipherById = instance(), + removeCipherById = instance(), + favouriteCipherById = instance(), + downloadManager = instance(), + downloadAttachment = instance(), + removeAttachment = instance(), + cipherExpiringCheck = instance(), + cipherIncompleteCheck = instance(), + cipherUrlCheck = instance(), + tfaService = instance(), + clipboardService = instance(), + getGravatarUrl = instance(), + getEnvSendUrl = instance(), + dateFormatter = instance(), + addCipherOpenedHistory = instance(), + windowCoroutineScope = instance(), + linkInfoExtractors = allInstances(), + contentColor = contentColor, + disabledContentColor = disabledContentColor, + sendId = sendId, + accountId = accountId, + ) +} + +private class Holder( + val uri: DSecret.Uri, + val info: List, +) + +@Composable +fun sendViewScreenState( + contentColor: Color, + disabledContentColor: Color, + getAccounts: GetAccounts, + getCanWrite: GetCanWrite, + getSends: GetSends, + getCollections: GetCollections, + getOrganizations: GetOrganizations, + getFolders: GetFolders, + getConcealFields: GetConcealFields, + getMarkdown: GetMarkdown, + getAppIcons: GetAppIcons, + getWebsiteIcons: GetWebsiteIcons, + getPasswordStrength: GetPasswordStrength, + cipherUnsecureUrlCheck: CipherUnsecureUrlCheck, + cipherUnsecureUrlAutoFix: CipherUnsecureUrlAutoFix, + cipherFieldSwitchToggle: CipherFieldSwitchToggle, + moveCipherToFolderById: MoveCipherToFolderById, + changeCipherNameById: ChangeCipherNameById, + changeCipherPasswordById: ChangeCipherPasswordById, + retryCipher: RetryCipher, + copyCipherById: CopyCipherById, + restoreCipherById: RestoreCipherById, + trashCipherById: TrashCipherById, + removeCipherById: RemoveCipherById, + favouriteCipherById: FavouriteCipherById, + downloadManager: DownloadManager, + downloadAttachment: DownloadAttachment, + removeAttachment: RemoveAttachment, + cipherExpiringCheck: CipherExpiringCheck, + cipherIncompleteCheck: CipherIncompleteCheck, + cipherUrlCheck: CipherUrlCheck, + tfaService: TwoFaService, + clipboardService: ClipboardService, + getGravatarUrl: GetGravatarUrl, + getEnvSendUrl: GetEnvSendUrl, + dateFormatter: DateFormatter, + addCipherOpenedHistory: AddCipherOpenedHistory, + windowCoroutineScope: WindowCoroutineScope, + linkInfoExtractors: List>, + sendId: String, + accountId: String, +) = produceScreenState( + key = "send_view", + initial = SendViewState(), + args = arrayOf( + getAccounts, + getSends, + getCollections, + getOrganizations, + getFolders, + getConcealFields, + getWebsiteIcons, + getPasswordStrength, + downloadAttachment, + clipboardService, + dateFormatter, + windowCoroutineScope, + linkInfoExtractors, + sendId, + accountId, + ), +) { + val copy = copy( + clipboardService = clipboardService, + ) + + val selectionHandle = selectionHandle("selection") + val markdown = getMarkdown().first() + + val accountFlow = getAccounts() + .map { accounts -> + accounts + .firstOrNull { it.id.id == accountId } + } + .distinctUntilChanged() + val secretFlow = getSends() + .map { secrets -> + secrets + .firstOrNull { it.id == sendId && it.accountId == accountId } + } + .distinctUntilChanged() + combine( + accountFlow, + secretFlow, + getConcealFields(), + getAppIcons(), + getWebsiteIcons(), + getCanWrite(), + ) { array -> + val accountOrNull = array[0] as DAccount? + val secretOrNull = array[1] as DSend? + val concealFields = array[2] as Boolean + val appIcons = array[3] as Boolean + val websiteIcons = array[4] as Boolean + val canAddSecret = array[5] as Boolean + + val content = when { + accountOrNull == null || secretOrNull == null -> SendViewState.Content.NotFound + else -> { + val icon = secretOrNull.toVaultItemIcon( + appIcons = appIcons, + websiteIcons = websiteIcons, + ) + val url = getEnvSendUrl(secretOrNull) + .attempt() + .bind() + .getOrNull() + val info = if (url != null) { + buildString { + append(secretOrNull.name) + append(": ") + append(url) + } + } else { + null + } + SendViewState.Content.Cipher( + data = secretOrNull, + icon = icon, + synced = true, + actions = emptyList(), + onCopy = if (info != null) { + // lambda + { + copy.copy(info, hidden = false) + } + } else { + null + }, + onShare = if (info != null) { + // lambda + { + val intent = NavigationIntent.NavigateToShare(info) + navigate(intent) + } + } else { + null + }, + items = oh( + sharingScope = screenScope, + selectionHandle = selectionHandle, + canEdit = canAddSecret, + contentColor = contentColor, + disabledContentColor = disabledContentColor, + tfaService = tfaService, + retryCipher = retryCipher, + markdown = markdown, + concealFields = concealFields, + websiteIcons = websiteIcons, + downloadManager = downloadManager, + getGravatarUrl = getGravatarUrl, + getEnvSendUrl = getEnvSendUrl, + copy = copy, + dateFormatter = dateFormatter, + account = accountOrNull, + send = secretOrNull, + ).toList(), + ) + } + } + SendViewState( + content = content, + ) + } +} + +private fun RememberStateFlowScope.oh( + sharingScope: CoroutineScope, + selectionHandle: SelectionHandle, + canEdit: Boolean, + contentColor: Color, + disabledContentColor: Color, + tfaService: TwoFaService, + retryCipher: RetryCipher, + markdown: Boolean, + concealFields: Boolean, + websiteIcons: Boolean, + downloadManager: DownloadManager, + getGravatarUrl: GetGravatarUrl, + getEnvSendUrl: GetEnvSendUrl, + copy: CopyText, + dateFormatter: DateFormatter, + account: DAccount, + send: DSend, +) = flow { + if (send.disabled) { + val model = VaultViewItem.Info( + id = "disabled", + name = "Deactivated", + message = "This share is deactivated, no one can access it.", + long = false, + ) + emit(model) + } + + val text = send.text + if (text != null) { + val model = create( + copy = copy, + id = "text.text", + title = translate(Res.strings.text), + value = text.text.orEmpty(), + elevated = true, + ) + emit(model) + } + + val file = send.file + if (file != null) { + val downloadIo = kotlin.run { + ioRaise(RuntimeException("Downloading sends is not implemented yet.")) + } + val removeIo = kotlin.run { + ioUnit() + } + + val actualItem = createAttachmentItem( + tag = DownloadInfoEntity2.AttachmentDownloadTag( + localCipherId = "cipher.id", + remoteCipherId = "cipher.service.remote?.id", + attachmentId = file.id, + ), + selectionHandle = selectionHandle, + sharingScope = sharingScope, + attachment = file, + launchViewCipherData = null, + downloadManager = downloadManager, + downloadIo = downloadIo, + removeIo = removeIo, + ) + val model = VaultViewItem.Attachment( + id = "file.file", + item = actualItem, + ) + emit(model) + } + + val url = aaaa( + disabledContentColor = disabledContentColor, + websiteIcons = websiteIcons, + getEnvSendUrl = getEnvSendUrl, + id = "url.url", + accountId = account.accountId(), + send = send, + copy = copy, + ) + if (url != null) { + val section = VaultViewItem.Section( + id = "url", + text = translate(Res.strings.public_url), + ) + emit(section) + emit(url) + + val password = send.password + if (password != null) { + val w = VaultViewItem.Label( + id = "url.password", + text = AnnotatedString( + text = translate(Res.strings.send_password_is_required_to_access_label), + ), + ) + emit(w) + } + } + + val section = VaultViewItem.Section( + id = "iiinfo", + text = translate(Res.strings.info), + ) + emit(section) + + val accessCount = send.accessCount + val w = VaultViewItem.Value( + id = "info", + title = translate(Res.strings.access_count), + value = "$accessCount" + send.maxAccessCount?.let { " / $it" }.orEmpty(), + leading = { + IconBox(Icons.Outlined.KeyguardView) + }, + ) + emit(w) + + val w22 = VaultViewItem.Value( + id = "info.email", + title = translate(Res.strings.email_visibility), + value = if (send.hideEmail) { + translate(Res.strings.hidden) + } else { + translate(Res.strings.visible) + }, + leading = { + IconBox(Icons.Outlined.Email) + }, + ) + emit(w22) + + if (send.notes.isNotEmpty()) { + val section = VaultViewItem.Section( + id = "note", + text = translate(Res.strings.notes), + ) + emit(section) + val note = VaultViewItem.Note( + id = "note.text", + text = if (markdown) send.notes.trimIndent() else send.notes, + markdown = markdown, + ) + emit(note) + } + + val s = VaultViewItem.Spacer( + id = "end.spacer", + height = 24.dp, + ) + emit(s) + val x = VaultViewItem.Label( + id = "account", + text = annotate( + Res.strings.vault_view_saved_to_label, + account.username to SpanStyle( + color = contentColor, + ), + account.host to SpanStyle( + color = contentColor, + ), + ), + ) + emit(x) + val createdDate = send.createdDate + if (createdDate != null) { + val w = VaultViewItem.Label( + id = "created", + text = AnnotatedString( + translate( + Res.strings.vault_view_created_at_label, + dateFormatter.formatDateTime(createdDate), + ), + ), + ) + emit(w) + } + + val a = VaultViewItem.Label( + id = "revision", + text = AnnotatedString( + translate( + Res.strings.vault_view_revision_label, + dateFormatter.formatDateTime(send.revisionDate), + ), + ), + ) + emit(a) + val expirationDate = send.expirationDate + if (expirationDate != null) { + val b = VaultViewItem.Label( + id = "expiration", + text = AnnotatedString( + translate( + Res.strings.vault_view_expiration_scheduled_at_label, + dateFormatter.formatDateTime(expirationDate), + ), + ), + ) + emit(b) + } + val deletedDate = send.deletedDate + if (deletedDate != null) { + val b = VaultViewItem.Label( + id = "deleted", + text = AnnotatedString( + translate( + Res.strings.vault_view_deletion_scheduled_at_label, + dateFormatter.formatDateTime(deletedDate), + ), + ), + ) + emit(b) + } +} + +fun RememberStateFlowScope.create( + copy: CopyText, + id: String, + title: String?, + value: String, + badge: VaultViewItem.Value.Badge? = null, + leading: (@Composable RowScope.() -> Unit)? = null, + private: Boolean = false, + hidden: Boolean = false, + monospace: Boolean = false, + colorize: Boolean = false, + elevated: Boolean = false, +): VaultViewItem { + val dropdown = if (!hidden) { + buildContextItems { + section { + this += copy.FlatItemAction( + title = translate(Res.strings.copy), + value = value, + hidden = private, + ) + } + section { + this += LargeTypeRoute.showInLargeTypeActionOrNull( + translator = this@create, + text = value, + colorize = colorize, + navigate = ::navigate, + ) + this += LargeTypeRoute.showInLargeTypeActionAndLockOrNull( + translator = this@create, + text = value, + colorize = colorize, + navigate = ::navigate, + ) + this += BarcodeTypeRoute.showInBarcodeTypeActionOrNull( + translator = this@create, + data = value, + format = BarcodeImageFormat.QR_CODE, + navigate = ::navigate, + ) + } + section { + this += createShareAction( + translator = this@create, + text = value, + navigate = ::navigate, + ) + this += createSendActionOrNull( + text = value, + navigate = ::navigate, + ) + } + } + } else { + emptyList() + } + return VaultViewItem.Value( + id = id, + elevation = if (elevated) 1.dp else 0.dp, + title = title, + value = value, + private = private, + hidden = hidden, + monospace = monospace, + colorize = colorize, + leading = leading, + badge = badge, + dropdown = dropdown, + ) +} + +private suspend fun RememberStateFlowScope.aaaa( + disabledContentColor: Color, + websiteIcons: Boolean, + getEnvSendUrl: GetEnvSendUrl, + id: String, + accountId: String, + send: DSend, + copy: CopyText, +): VaultViewItem.Uri? { + val url = getEnvSendUrl(send) + .attempt() + .bind() + .getOrNull() + ?: return null + val dropdown = buildContextItems { + section { + this += copy.FlatItemAction( + title = translate(Res.strings.copy_url), + value = url, + ) + } + section { + this += FlatItemAction( + icon = Icons.Outlined.Launch, + title = translate(Res.strings.uri_action_launch_browser_title), + text = url, + trailing = { + ChevronIcon() + }, + onClick = { + val intent = NavigationIntent.NavigateToBrowser(url) + navigate(intent) + }, + ) + } + section { + this += createShareAction( + translator = this@aaaa, + text = url, + navigate = ::navigate, + ) + } + } + val faviconUrl = FaviconUrl( + serverId = accountId, + url = url, + ).takeIf { websiteIcons } + return VaultViewItem.Uri( + id = id, + icon = { + FaviconImage( + modifier = Modifier + .size(24.dp) + .clip(CircleShape), + imageModel = { faviconUrl }, + ) + }, + title = buildAnnotatedString { + append(url) + + val host = Url(url).host + val hostIndex = url.indexOf(host) + if (hostIndex != -1) { + addStyle( + style = SpanStyle( + color = disabledContentColor, + ), + start = 0, + end = hostIndex, + ) + addStyle( + style = SpanStyle( + color = disabledContentColor, + ), + start = hostIndex + host.length, + end = url.length, + ) + } + }, + dropdown = dropdown, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/view/VaultViewRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/view/VaultViewRoute.kt new file mode 100644 index 00000000..24f269be --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/send/view/VaultViewRoute.kt @@ -0,0 +1,17 @@ +package com.artemchep.keyguard.feature.send.view + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.navigation.Route + +data class SendViewRoute( + val sendId: String, + val accountId: String, +) : Route { + @Composable + override fun Content() { + SendViewScreen( + sendId = sendId, + accountId = accountId, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/sync/SyncItem.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/sync/SyncItem.kt new file mode 100644 index 00000000..c41e5627 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/sync/SyncItem.kt @@ -0,0 +1,26 @@ +package com.artemchep.keyguard.feature.sync + +sealed interface SyncItem { + val key: String + + data class Section( + override val key: String, + ) : SyncItem + + data class Account( + override val key: String, + val title: String, + val text: String, + /** + * Contains last sync status of the account, + * `null` if the account never had the sync + * performed yet. + */ + val lastSyncStatus: LastSyncStatus?, + ) : SyncItem { + data class LastSyncStatus( + val timestamp: String, + val success: Boolean, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/sync/SyncRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/sync/SyncRoute.kt new file mode 100644 index 00000000..1d9d6d8d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/sync/SyncRoute.kt @@ -0,0 +1,11 @@ +package com.artemchep.keyguard.feature.sync + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.navigation.Route + +object SyncRoute : Route { + @Composable + override fun Content() { + SyncScreen() + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/sync/SyncScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/sync/SyncScreen.kt new file mode 100644 index 00000000..d40362a2 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/sync/SyncScreen.kt @@ -0,0 +1,305 @@ +package com.artemchep.keyguard.feature.sync + +import androidx.compose.animation.animateContentSize +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.widthIn +import androidx.compose.foundation.lazy.itemsIndexed +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.CheckCircle +import androidx.compose.material.icons.outlined.ErrorOutline +import androidx.compose.material3.Badge +import androidx.compose.material3.BadgedBox +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.input.nestedscroll.nestedScroll +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.model.fold +import com.artemchep.keyguard.feature.navigation.NavigationIcon +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.Ah +import com.artemchep.keyguard.ui.AhContainer +import com.artemchep.keyguard.ui.FlatItem +import com.artemchep.keyguard.ui.FlatItemAction +import com.artemchep.keyguard.ui.FlatItemLayout +import com.artemchep.keyguard.ui.FlatItemTextContent +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.ScaffoldLazyColumn +import com.artemchep.keyguard.ui.icons.ChevronIcon +import com.artemchep.keyguard.ui.icons.KeyguardCipher +import com.artemchep.keyguard.ui.shimmer.shimmer +import com.artemchep.keyguard.ui.theme.badgeContainer +import com.artemchep.keyguard.ui.theme.combineAlpha +import com.artemchep.keyguard.ui.theme.ok +import com.artemchep.keyguard.ui.toolbar.LargeToolbar +import com.artemchep.keyguard.ui.util.HorizontalDivider +import dev.icerock.moko.resources.compose.stringResource + +@Composable +fun SyncScreen() { + val loadableState = produceSyncState() + SyncContent( + loadableState = loadableState, + ) +} + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +private fun SyncContent( + loadableState: Loadable, +) { + val s = loadableState.fold( + ifLoading = { + remember { + mutableStateOf(emptyList()) + } + }, + ifOk = { + it.itemsFlow.collectAsState() + }, + ) + val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior() + ScaffoldLazyColumn( + modifier = Modifier + .nestedScroll(scrollBehavior.nestedScrollConnection), + topAppBarScrollBehavior = scrollBehavior, + topBar = { + LargeToolbar( + title = { + Text( + text = stringResource(Res.strings.syncstatus_header_title), + ) + }, + navigationIcon = { + NavigationIcon() + }, + scrollBehavior = scrollBehavior, + ) + }, + ) { + itemsIndexed( + items = s.value, + key = { _, it -> it.key }, + ) { index, item -> + if (index > 0) { + HorizontalDivider() + } + TestK( + modifier = Modifier + .animateItemPlacement(), + item = item, + ) + } + } +} + +@Composable +private fun TestK( + modifier: Modifier = Modifier, + item: SyncState.Item, +) { + Column( + modifier = modifier, + ) { + FlatItemLayout( + leading = { + when (item.status) { + is SyncState.Item.Status.Ok, + is SyncState.Item.Status.Pending, + -> { + Icon( + imageVector = Icons.Outlined.CheckCircle, + contentDescription = null, + tint = MaterialTheme.colorScheme.ok, + ) + } + + is SyncState.Item.Status.Failed -> { + Icon( + imageVector = Icons.Outlined.ErrorOutline, + contentDescription = null, + tint = MaterialTheme.colorScheme.error, + ) + } + } + }, + content = { + FlatItemTextContent( + title = { + Text( + text = item.email, + ) + }, + text = { + Text( + text = item.host, + ) + }, + ) + }, + onClick = item.onClick, + ) + Column( + modifier = Modifier + .padding(horizontal = 16.dp), + ) { + Spacer( + modifier = Modifier + .height(8.dp), + ) + when (item.status) { + is SyncState.Item.Status.Ok -> { + BadgeStatusUpToDate() + } + + is SyncState.Item.Status.Pending -> { + BadgeStatusPending( + badge = item.status.text, + ) + } + + is SyncState.Item.Status.Failed -> { + BadgeStatusFailed() + } + } + if (item.lastSyncTimestamp != null) { + Spacer( + modifier = Modifier + .height(4.dp), + ) + Text( + text = item.lastSyncTimestamp, + style = MaterialTheme.typography.bodySmall, + color = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + ) + } + Spacer( + modifier = Modifier + .height(16.dp), + ) + } + item.items.forEach { action -> + when (action) { + is FlatItemAction -> { + FlatItem( + leading = { + Icon( + Icons.Outlined.KeyguardCipher, + null, + ) + }, + trailing = { + ChevronIcon() + }, + title = { + Text(action.title) + }, + elevation = 1.dp, + onClick = action.onClick, + ) + } + + else -> { + } + } + } + } +} + +// +// Badges +// + +@Composable +private fun BadgeStatusUpToDate( + modifier: Modifier = Modifier, +) { + Ah( + modifier = modifier, + score = 1f, + text = stringResource(Res.strings.syncstatus_status_up_to_date), + ) +} + +@Composable +private fun BadgeStatusPending( + modifier: Modifier = Modifier, + badge: String? = null, +) { + Box( + modifier = modifier, + ) { + AhContainer( + modifier = Modifier + .matchParentSize() + .shimmer(), + score = 1f, + ) { + // Do nothing. + } + Row( + modifier = Modifier + .padding( + start = 4.dp, + top = 4.dp, + bottom = 4.dp, + end = 4.dp, + ) + .widthIn(min = 36.dp), + horizontalArrangement = Arrangement.Center, + verticalAlignment = Alignment.CenterVertically, + ) { + BadgedBox( + modifier = Modifier + .padding(horizontal = 4.dp), + badge = { + Badge( + containerColor = MaterialTheme.colorScheme.badgeContainer, + ) { + Text( + modifier = Modifier + .animateContentSize(), + text = badge.orEmpty(), + ) + } + }, + ) { + Text( + modifier = Modifier + .animateContentSize(), + text = "Pending", + style = MaterialTheme.typography.labelMedium, + color = MaterialTheme.colorScheme.onSecondaryContainer, + ) + } + } + } +} + +@Composable +private fun BadgeStatusFailed( + modifier: Modifier = Modifier, +) { + Ah( + modifier = modifier, + score = 0f, + text = stringResource(Res.strings.syncstatus_status_failed), + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/sync/SyncState.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/sync/SyncState.kt new file mode 100644 index 00000000..99d27146 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/sync/SyncState.kt @@ -0,0 +1,28 @@ +package com.artemchep.keyguard.feature.sync + +import com.artemchep.keyguard.ui.ContextItem +import kotlinx.coroutines.flow.StateFlow + +data class SyncState( + val itemsFlow: StateFlow>, +) { + data class Item( + val key: String, + val email: String, + val host: String, + val status: Status, + val items: List, + val lastSyncTimestamp: String?, + val onClick: (() -> Unit)?, + ) { + sealed interface Status { + data object Ok : Status + + data class Pending( + val text: String, + ) : Status + + data object Failed : Status + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/sync/SyncStateProducer.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/sync/SyncStateProducer.kt new file mode 100644 index 00000000..b7358912 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/sync/SyncStateProducer.kt @@ -0,0 +1,245 @@ +package com.artemchep.keyguard.feature.sync + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.common.model.AccountId +import com.artemchep.keyguard.common.model.DAccount +import com.artemchep.keyguard.common.model.DFilter +import com.artemchep.keyguard.common.model.DMeta +import com.artemchep.keyguard.common.model.DProfile +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.usecase.DateFormatter +import com.artemchep.keyguard.common.usecase.GetAccounts +import com.artemchep.keyguard.common.usecase.GetCiphers +import com.artemchep.keyguard.common.usecase.GetCollections +import com.artemchep.keyguard.common.usecase.GetFolders +import com.artemchep.keyguard.common.usecase.GetMetas +import com.artemchep.keyguard.common.usecase.GetOrganizations +import com.artemchep.keyguard.common.usecase.GetProfiles +import com.artemchep.keyguard.feature.auth.AccountViewRoute +import com.artemchep.keyguard.feature.home.vault.VaultRoute +import com.artemchep.keyguard.feature.home.vault.folders.FoldersRoute +import com.artemchep.keyguard.feature.home.vault.screen.VaultListRoute +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.feature.navigation.state.produceScreenState +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItemAction +import com.artemchep.keyguard.ui.buildContextItems +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.stateIn +import org.kodein.di.compose.localDI +import org.kodein.di.direct +import org.kodein.di.instance + +@Composable +fun produceSyncState( +) = with(localDI().direct) { + produceSyncState( + dateFormatter = instance(), + getMetas = instance(), + getAccounts = instance(), + getProfiles = instance(), + getCiphers = instance(), + getCollections = instance(), + getOrganizations = instance(), + getFolders = instance(), + ) +} + +private data class CombinedAccountInfo( + val id: String, + val account: DAccount?, + val profile: DProfile?, + val meta: DMeta?, + val pendingCiphersCount: Int, + val pendingFoldersCount: Int, + val failedCiphersCount: Int, + val failedFoldersCount: Int, +) + +@Composable +fun produceSyncState( + dateFormatter: DateFormatter, + getMetas: GetMetas, + getAccounts: GetAccounts, + getProfiles: GetProfiles, + getCiphers: GetCiphers, + getCollections: GetCollections, + getOrganizations: GetOrganizations, + getFolders: GetFolders, +): Loadable = produceScreenState( + key = "sync_state", + initial = Loadable.Loading, +) { + val ciphersByAccountIdFlow = getCiphers() + .map { ciphers -> + ciphers + .groupBy { it.accountId } + } + val foldersByAccountIdFlow = getFolders() + .map { folders -> + folders + .groupBy { it.accountId } + } + val f = combine( + getAccounts(), + getProfiles(), + getMetas(), + ciphersByAccountIdFlow, + foldersByAccountIdFlow, + ) { accounts, profiles, metas, ciphersByAccountId, foldersByAccountId -> + val accountsById = accounts.groupBy { it.id.id } + val profilesById = profiles.groupBy { it.accountId } + val metasById = metas.groupBy { it.accountId.id } + + // Collect all of the account IDs. + val accountIds = sequence { + accountsById.keys.forEach { accountId -> + yield(accountId) + } + profilesById.keys.forEach { accountId -> + yield(accountId) + } + metasById.keys.forEach { accountId -> + yield(accountId) + } + ciphersByAccountId.keys.forEach { accountId -> + yield(accountId) + } + foldersByAccountId.keys.forEach { accountId -> + yield(accountId) + } + }.toSet() + accountIds + .map { accountId -> + val account = accountsById[accountId]?.firstOrNull() + val profile = profilesById[accountId]?.firstOrNull() + val meta = metasById[accountId]?.firstOrNull() + // Items + val failedCiphers = ciphersByAccountId[accountId].orEmpty() + val failedFolders = foldersByAccountId[accountId].orEmpty() + CombinedAccountInfo( + id = accountId, + account = account, + profile = profile, + meta = meta, + pendingCiphersCount = failedCiphers.count { !it.synced }, + pendingFoldersCount = failedFolders.count { !it.synced }, + failedCiphersCount = failedCiphers.count { it.hasError }, + failedFoldersCount = failedFolders.count { it.hasError }, + ) + } + .map { c -> + val lastSyncTimestamp = kotlin.run { + val timestamp = c.meta?.lastSyncTimestamp + if (timestamp != null) { + val date = dateFormatter.formatDateTime(timestamp) + translate(Res.strings.account_last_synced_at, date) + } else { + null + } + } + val status = kotlin.run { + val failed = c.failedCiphersCount > 0 || + c.failedFoldersCount > 0 || + c.meta?.lastSyncResult is DMeta.LastSyncResult.Failure + val pending = c.pendingCiphersCount > 0 || + c.pendingFoldersCount > 0 + if (failed) { + SyncState.Item.Status.Failed + } else if (pending) { + SyncState.Item.Status.Pending( + text = (c.pendingCiphersCount + c.pendingFoldersCount) + .toString(), + ) + } else { + SyncState.Item.Status.Ok + } + } + val items = buildContextItems { + if (c.failedCiphersCount > 0) { + this += FlatItemAction( + title = translate(Res.strings.items), + onClick = { + val filter = DFilter.And( + listOf( + DFilter.ById( + id = c.id, + what = DFilter.ById.What.ACCOUNT, + ), + DFilter.ByError( + error = true, + ), + ), + ) + val route = VaultListRoute( + args = VaultRoute.Args( + appBar = VaultRoute.Args.AppBar( + title = translate(Res.strings.items), + subtitle = translate(Res.strings.syncstatus_header_title), + ), + filter = filter, + trash = null, + preselect = false, + canAddSecrets = false, + ), + ) + val intent = NavigationIntent.NavigateToRoute(route) + navigate(intent) + }, + ) + } + if (c.failedFoldersCount > 0) { + this += FlatItemAction( + title = translate(Res.strings.folders), + onClick = { + val filter = DFilter.And( + listOf( + DFilter.ById( + id = c.id, + what = DFilter.ById.What.ACCOUNT, + ), + DFilter.ByError( + error = true, + ), + ), + ) + val route = FoldersRoute( + args = FoldersRoute.Args( + filter = filter, + ), + ) + val intent = NavigationIntent.NavigateToRoute(route) + navigate(intent) + }, + ) + } + } + SyncState.Item( + key = c.id, + email = c.profile?.email.orEmpty(), + host = c.account?.host.orEmpty(), + status = status, + items = items, + lastSyncTimestamp = lastSyncTimestamp, + onClick = { + val route = AccountViewRoute( + accountId = AccountId(c.id), + ) + val intent = NavigationIntent.NavigateToRoute(route) + navigate(intent) + }, + ) + } + }.stateIn(screenScope) + + + val state = SyncState( + itemsFlow = f, + ) + flowOf(state) + .map { + Loadable.Ok(it) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/team/AboutTeamRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/team/AboutTeamRoute.kt new file mode 100644 index 00000000..9de4fb2d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/team/AboutTeamRoute.kt @@ -0,0 +1,11 @@ +package com.artemchep.keyguard.feature.team + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.navigation.Route + +object AboutTeamRoute : Route { + @Composable + override fun Content() { + AboutTeamScreen() + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/team/AboutTeamScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/team/AboutTeamScreen.kt new file mode 100644 index 00000000..ff78db75 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/team/AboutTeamScreen.kt @@ -0,0 +1,199 @@ +package com.artemchep.keyguard.feature.team + +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.RowScope +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.luminance +import androidx.compose.ui.input.nestedscroll.nestedScroll +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.feature.home.vault.component.LargeSection +import com.artemchep.keyguard.feature.home.vault.component.Section +import com.artemchep.keyguard.feature.navigation.LocalNavigationController +import com.artemchep.keyguard.feature.navigation.NavigationIcon +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.Avatar +import com.artemchep.keyguard.ui.FlatItem +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.ScaffoldColumn +import com.artemchep.keyguard.ui.icons.ChevronIcon +import com.artemchep.keyguard.ui.icons.icon +import com.artemchep.keyguard.ui.theme.Dimens +import com.artemchep.keyguard.ui.theme.combineAlpha +import com.artemchep.keyguard.ui.toolbar.LargeToolbar +import compose.icons.FeatherIcons +import compose.icons.feathericons.Github +import compose.icons.feathericons.Instagram +import dev.icerock.moko.resources.compose.painterResource +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.collections.immutable.toPersistentList + +private data class SocialNetwork( + val title: String, + val username: String, + val icon: @Composable () -> Unit, + val color: Color, + val url: String, +) + +private data class SocialNetworkItem( + val title: String, + val username: String, + val leading: @Composable RowScope.() -> Unit, + val onClick: () -> Unit, +) + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun AboutTeamScreen() { + val navController by rememberUpdatedState(LocalNavigationController.current) + val socialNetworks = remember { + listOf( + SocialNetwork( + title = "GitHub", + username = "AChep", + icon = icon(FeatherIcons.Github), + color = Color.Black, + url = "https://github.com/AChep/", + ), + SocialNetwork( + title = "Mastodon", + username = "artemchep", + icon = { + Image( + modifier = Modifier + .size(24.dp) + .padding(1.dp), + painter = painterResource(Res.images.ic_mastodon), + contentDescription = null, + ) + }, + color = Color(0xFF595aff), + url = "https://mastodon.social/@artemchep", + ), + SocialNetwork( + title = "Instagram", + username = "artemchep", + icon = icon(FeatherIcons.Instagram), + color = Color(0xFF8134AF), + url = "https://instagram.com/artemchep/", + ), + ).map { socialNetwork -> + SocialNetworkItem( + title = socialNetwork.title, + username = socialNetwork.username, + leading = { + Avatar( + color = socialNetwork.color, + ) { + val tint = + if (socialNetwork.color.luminance() > 0.5f) Color.Black else Color.White + CompositionLocalProvider( + LocalContentColor provides tint, + ) { + Box( + modifier = Modifier + .align(Alignment.Center), + ) { + socialNetwork.icon() + } + } + } + }, + onClick = { + val intent = NavigationIntent.NavigateToBrowser(socialNetwork.url) + navController.queue(intent) + }, + ) + }.toPersistentList() + } + + val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior() + ScaffoldColumn( + modifier = Modifier + .nestedScroll(scrollBehavior.nestedScrollConnection), + topAppBarScrollBehavior = scrollBehavior, + topBar = { + LargeToolbar( + title = { + Text( + text = stringResource(Res.strings.team_header_title), + ) + }, + navigationIcon = { + NavigationIcon() + }, + scrollBehavior = scrollBehavior, + ) + }, + ) { + LargeSection( + text = "Artem Chepurnyi", + trailing = { + Text( + text = "\uD83C\uDDFA\uD83C\uDDE6", + ) + }, + ) + Text( + modifier = Modifier + .padding(horizontal = 16.dp), + text = stringResource(Res.strings.team_artem_whoami_text), + ) + Section( + text = stringResource(Res.strings.team_follow_me_section), + ) + socialNetworks.forEach { item -> + FlatItem( + leading = item.leading, + trailing = { + ChevronIcon() + }, + title = { + Text(item.title) + }, + onClick = item.onClick, + ) + } + Spacer( + modifier = Modifier + .height(16.dp), + ) + Text( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding), + text = "Thanks to Vira & my friends for supporting me and patiently testing the app.", + style = MaterialTheme.typography.bodyMedium, + color = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + ) + /* + LargeSection( + text = "Community", + ) + Section( + text = "Localization", + ) + SkeletonItem() + SkeletonItem() + SkeletonItem() + */ + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/tfa/directory/TwoFaServiceListRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/tfa/directory/TwoFaServiceListRoute.kt new file mode 100644 index 00000000..86ea30dd --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/tfa/directory/TwoFaServiceListRoute.kt @@ -0,0 +1,41 @@ +package com.artemchep.keyguard.feature.tfa.directory + +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Folder +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.feature.navigation.Route +import com.artemchep.keyguard.feature.navigation.state.TranslatorScope +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItemAction +import com.artemchep.keyguard.ui.icons.KeyguardTwoFa +import com.artemchep.keyguard.ui.icons.iconSmall + +object TwoFaServiceListRoute : Route { + fun actionOrNull( + translator: TranslatorScope, + navigate: (NavigationIntent) -> Unit, + ) = action( + translator = translator, + navigate = navigate, + ) + + fun action( + translator: TranslatorScope, + navigate: (NavigationIntent) -> Unit, + ) = FlatItemAction( + leading = iconSmall(Icons.Outlined.Folder, Icons.Outlined.KeyguardTwoFa), + title = translator.translate(Res.strings.tfa_directory_title), + text = translator.translate(Res.strings.tfa_directory_text), + onClick = { + val route = TwoFaServiceListRoute + val intent = NavigationIntent.NavigateToRoute(route) + navigate(intent) + }, + ) + + @Composable + override fun Content() { + TwoFaServiceListScreen() + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/tfa/directory/TwoFaServiceListScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/tfa/directory/TwoFaServiceListScreen.kt new file mode 100644 index 00000000..b801f024 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/tfa/directory/TwoFaServiceListScreen.kt @@ -0,0 +1,252 @@ +package com.artemchep.keyguard.feature.tfa.directory + +import androidx.compose.foundation.ExperimentalFoundationApi +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.lazy.LazyListState +import androidx.compose.foundation.lazy.items +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.OpenInBrowser +import androidx.compose.material.pullrefresh.pullRefresh +import androidx.compose.material.pullrefresh.rememberPullRefreshState +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.IconButton +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.runtime.snapshotFlow +import androidx.compose.ui.Modifier +import androidx.compose.ui.input.nestedscroll.nestedScroll +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.model.flatMap +import com.artemchep.keyguard.common.model.getOrNull +import com.artemchep.keyguard.feature.EmptySearchView +import com.artemchep.keyguard.feature.ErrorView +import com.artemchep.keyguard.feature.home.vault.component.SearchTextField +import com.artemchep.keyguard.feature.navigation.LocalNavigationController +import com.artemchep.keyguard.feature.navigation.NavigationIcon +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.DefaultProgressBar +import com.artemchep.keyguard.ui.FlatItem +import com.artemchep.keyguard.ui.ScaffoldLazyColumn +import com.artemchep.keyguard.ui.focus.FocusRequester2 +import com.artemchep.keyguard.ui.focus.focusRequester2 +import com.artemchep.keyguard.ui.icons.IconBox +import com.artemchep.keyguard.ui.poweredby.URL_2FA +import com.artemchep.keyguard.ui.pulltosearch.PullToSearch +import com.artemchep.keyguard.ui.skeleton.SkeletonItem +import com.artemchep.keyguard.ui.toolbar.CustomToolbar +import com.artemchep.keyguard.ui.toolbar.content.CustomToolbarContent +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.filter +import kotlinx.coroutines.flow.first +import kotlinx.coroutines.flow.withIndex + +@Composable +fun TwoFaServiceListScreen( +) { + val loadableState = produceTwoFaServiceListState() + TwoFaServiceListScreen( + loadableState = loadableState, + ) +} + +@OptIn(ExperimentalMaterial3Api::class, ExperimentalFoundationApi::class) +@Composable +fun TwoFaServiceListScreen( + loadableState: Loadable, +) { + val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior() + val filterState = run { + val filterFlow = loadableState.getOrNull()?.filter + remember(filterFlow) { + filterFlow ?: MutableStateFlow(null) + }.collectAsState() + } + + val listRevision = + loadableState.getOrNull()?.content?.getOrNull()?.getOrNull()?.revision + val listState = remember { + LazyListState( + firstVisibleItemIndex = 0, + firstVisibleItemScrollOffset = 0, + ) + } + + LaunchedEffect(listRevision) { + // TODO: How do you wait till the layout state start to represent + // the actual data? + val listSize = + loadableState.getOrNull()?.content?.getOrNull()?.getOrNull()?.items?.size + snapshotFlow { listState.layoutInfo.totalItemsCount } + .withIndex() + .filter { + it.index > 0 || it.value == listSize + } + .first() + + listState.scrollToItem(0, 0) + } + + val focusRequester = remember { FocusRequester2() } + // Auto focus the text field + // on launch. + LaunchedEffect( + focusRequester, + filterState, + ) { + snapshotFlow { filterState.value } + .first { it?.query?.onChange != null } + delay(100L) + focusRequester.requestFocus() + } + + val pullRefreshState = rememberPullRefreshState( + refreshing = false, + onRefresh = { + focusRequester.requestFocus() + }, + ) + ScaffoldLazyColumn( + modifier = Modifier + .pullRefresh(pullRefreshState) + .nestedScroll(scrollBehavior.nestedScrollConnection), + topAppBarScrollBehavior = scrollBehavior, + topBar = { + CustomToolbar( + scrollBehavior = scrollBehavior, + ) { + Column { + CustomToolbarContent( + title = stringResource(Res.strings.tfa_directory_title), + icon = { + NavigationIcon() + }, + actions = { + val updatedNavigationController by rememberUpdatedState( + LocalNavigationController.current, + ) + IconButton( + onClick = { + val intent = NavigationIntent.NavigateToBrowser(URL_2FA) + updatedNavigationController.queue(intent) + }, + ) { + IconBox(Icons.Outlined.OpenInBrowser) + } + }, + ) + + val query = filterState.value?.query + val queryText = query?.state?.value.orEmpty() + SearchTextField( + modifier = Modifier + .focusRequester2(focusRequester), + text = queryText, + placeholder = stringResource(Res.strings.tfa_directory_search_placeholder), + searchIcon = false, + leading = {}, + trailing = {}, + onTextChange = query?.onChange, + onGoClick = null, + ) + } + } + }, + pullRefreshState = pullRefreshState, + overlay = { + val filterRevision = filterState.value?.revision + DefaultProgressBar( + visible = listRevision != null && filterRevision != null && + listRevision != filterRevision, + ) + + PullToSearch( + modifier = Modifier + .padding(contentPadding.value), + pullRefreshState = pullRefreshState, + ) + }, + listState = listState, + ) { + val contentState = loadableState + .flatMap { it.content } + when (contentState) { + is Loadable.Loading -> { + for (i in 1..3) { + item("skeleton.$i") { + SkeletonItem() + } + } + } + + is Loadable.Ok -> { + contentState.value.fold( + ifLeft = { e -> + item("error") { + ErrorView( + text = { + Text(text = "Failed to load app list!") + }, + exception = e, + ) + } + }, + ifRight = { content -> + val items = content.items + if (items.isEmpty()) { + item("empty") { + NoItemsPlaceholder() + } + } + + items( + items = items, + key = { it.key }, + ) { item -> + AppItem( + modifier = Modifier + .animateItemPlacement(), + item = item, + ) + } + }, + ) + } + } + } +} + +@Composable +private fun NoItemsPlaceholder( + modifier: Modifier = Modifier, +) { + EmptySearchView( + modifier = modifier, + ) +} + +@Composable +private fun AppItem( + modifier: Modifier, + item: TwoFaServiceListState.Item, +) { + FlatItem( + modifier = modifier, + leading = { + item.icon() + }, + title = { + Text(item.name) + }, + onClick = item.onClick, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/tfa/directory/TwoFaServiceListState.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/tfa/directory/TwoFaServiceListState.kt new file mode 100644 index 00000000..20db857d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/tfa/directory/TwoFaServiceListState.kt @@ -0,0 +1,40 @@ +package com.artemchep.keyguard.feature.tfa.directory + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.Immutable +import androidx.compose.ui.text.AnnotatedString +import arrow.core.Either +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.service.twofa.TwoFaServiceInfo +import com.artemchep.keyguard.feature.auth.common.TextFieldModel2 +import kotlinx.coroutines.flow.StateFlow + +data class TwoFaServiceListState( + val filter: StateFlow, + val content: Loadable>, +) { + @Immutable + data class Filter( + val revision: Int, + val query: TextFieldModel2, + ) { + companion object + } + + @Immutable + data class Content( + val revision: Int, + val items: List, + ) { + companion object + } + + @Immutable + data class Item( + val key: String, + val icon: @Composable () -> Unit, + val name: AnnotatedString, + val data: TwoFaServiceInfo, + val onClick: (() -> Unit)? = null, + ) +} \ No newline at end of file diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/tfa/directory/TwoFaServiceListStateProducer.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/tfa/directory/TwoFaServiceListStateProducer.kt new file mode 100644 index 00000000..063177f3 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/tfa/directory/TwoFaServiceListStateProducer.kt @@ -0,0 +1,155 @@ +package com.artemchep.keyguard.feature.tfa.directory + +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.text.AnnotatedString +import androidx.compose.ui.unit.dp +import arrow.core.partially1 +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.service.twofa.TwoFaService +import com.artemchep.keyguard.common.service.twofa.TwoFaServiceInfo +import com.artemchep.keyguard.feature.crashlytics.crashlyticsAttempt +import com.artemchep.keyguard.feature.favicon.FaviconImage +import com.artemchep.keyguard.feature.favicon.FaviconUrl +import com.artemchep.keyguard.feature.home.vault.search.IndexedText +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.feature.navigation.state.produceScreenState +import com.artemchep.keyguard.feature.search.search.IndexedModel +import com.artemchep.keyguard.feature.search.search.mapSearch +import com.artemchep.keyguard.feature.search.search.searchFilter +import com.artemchep.keyguard.feature.search.search.searchQueryHandle +import kotlinx.coroutines.flow.asFlow +import kotlinx.coroutines.flow.map +import org.kodein.di.compose.localDI +import org.kodein.di.direct +import org.kodein.di.instance + +private class TwoFaServiceListUiException( + msg: String, + cause: Throwable, +) : RuntimeException(msg, cause) + +@Composable +fun produceTwoFaServiceListState( +) = with(localDI().direct) { + produceTwoFaServiceListState( + twoFaService = instance(), + ) +} + +@Composable +fun produceTwoFaServiceListState( + twoFaService: TwoFaService, +): Loadable = produceScreenState( + key = "tfa_service_list", + initial = Loadable.Loading, + args = arrayOf(), +) { + val queryHandle = searchQueryHandle("query") + val queryFlow = searchFilter(queryHandle) { model, revision -> + TwoFaServiceListState.Filter( + revision = revision, + query = model, + ) + } + + val modelComparator = Comparator { a: TwoFaServiceInfo, b: TwoFaServiceInfo -> + a.name.compareTo(b.name, ignoreCase = true) + } + + fun onClick(model: TwoFaServiceInfo) { + val route = TwoFaServiceViewRoute( + args = TwoFaServiceViewRoute.Args( + model = model, + ), + ) + val intent = NavigationIntent.NavigateToRoute(route) + navigate(intent) + } + + fun List.toItems(): List { + val nameCollisions = mutableMapOf() + return this + .sortedWith(modelComparator) + .map { appInfo -> + val key = kotlin.run { + val newPackageNameCollisionCounter = nameCollisions + .getOrDefault(appInfo.name, 0) + 1 + nameCollisions[appInfo.name] = + newPackageNameCollisionCounter + appInfo.name + ":" + newPackageNameCollisionCounter + } + val faviconUrl = appInfo.documentation?.let { url -> + FaviconUrl( + serverId = null, + url = url, + ) + } + TwoFaServiceListState.Item( + key = key, + icon = { + FaviconImage( + modifier = Modifier + .size(24.dp) + .clip(CircleShape), + imageModel = { faviconUrl }, + ) + }, + name = AnnotatedString(appInfo.name), + data = appInfo, + onClick = ::onClick + .partially1(appInfo), + ) + } + } + + val itemsFlow = twoFaService.get() + .asFlow() + .map { apps -> + apps + .toItems() + // Index for the search. + .map { item -> + IndexedModel( + model = item, + indexedText = IndexedText.invoke(item.name.text), + ) + } + } + .mapSearch( + handle = queryHandle, + ) { item, result -> + // Replace the origin text with the one with + // search decor applied to it. + item.copy(name = result.highlightedText) + } + val contentFlow = itemsFlow + .crashlyticsAttempt { e -> + val msg = "Failed to get the just-delete-me list!" + TwoFaServiceListUiException( + msg = msg, + cause = e, + ) + } + .map { result -> + val contentOrException = result + .map { (items, revision) -> + TwoFaServiceListState.Content( + revision = revision, + items = items, + ) + } + Loadable.Ok(contentOrException) + } + contentFlow + .map { content -> + val state = TwoFaServiceListState( + filter = queryFlow, + content = content, + ) + Loadable.Ok(state) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/tfa/directory/TwoFaServiceViewRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/tfa/directory/TwoFaServiceViewRoute.kt new file mode 100644 index 00000000..8ddd1a3a --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/tfa/directory/TwoFaServiceViewRoute.kt @@ -0,0 +1,20 @@ +package com.artemchep.keyguard.feature.tfa.directory + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.common.service.twofa.TwoFaServiceInfo +import com.artemchep.keyguard.feature.navigation.DialogRoute + +data class TwoFaServiceViewRoute( + val args: Args, +) : DialogRoute { + data class Args( + val model: TwoFaServiceInfo, + ) + + @Composable + override fun Content() { + TwoFaServiceViewScreen( + args = args, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/tfa/directory/TwoFaServiceViewScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/tfa/directory/TwoFaServiceViewScreen.kt new file mode 100644 index 00000000..ef50c022 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/tfa/directory/TwoFaServiceViewScreen.kt @@ -0,0 +1,250 @@ +package com.artemchep.keyguard.feature.tfa.directory + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ExperimentalLayoutApi +import androidx.compose.foundation.layout.FlowRow +import androidx.compose.foundation.layout.FlowRowScope +import androidx.compose.foundation.layout.RowScope +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.OpenInNew +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.model.getOrNull +import com.artemchep.keyguard.feature.dialog.Dialog +import com.artemchep.keyguard.feature.navigation.LocalNavigationController +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.DisabledEmphasisAlpha +import com.artemchep.keyguard.ui.FlatItem +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.icons.ChevronIcon +import com.artemchep.keyguard.ui.icons.KeyguardTwoFa +import com.artemchep.keyguard.ui.icons.icon +import com.artemchep.keyguard.ui.markdown.Md +import com.artemchep.keyguard.ui.poweredby.PoweredBy2factorauth +import com.artemchep.keyguard.ui.skeleton.SkeletonText +import com.artemchep.keyguard.ui.theme.Dimens +import com.artemchep.keyguard.ui.theme.combineAlpha +import com.artemchep.keyguard.ui.theme.monoFontFamily +import dev.icerock.moko.resources.compose.stringResource + +@Composable +fun TwoFaServiceViewScreen( + args: TwoFaServiceViewRoute.Args, +) { + val loadableState = produceTwoFaServiceViewState( + args = args, + ) + TwoFaServiceViewScreen( + loadableState = loadableState, + ) +} + +@OptIn(ExperimentalLayoutApi::class) +@Composable +fun TwoFaServiceViewScreen( + loadableState: Loadable, +) { + Dialog( + icon = icon(Icons.Outlined.KeyguardTwoFa), + title = { + when (loadableState) { + is Loadable.Loading -> { + SkeletonText( + modifier = Modifier + .width(72.dp), + ) + } + + is Loadable.Ok -> { + val title = loadableState.value.content.getOrNull() + ?.model?.name + .orEmpty() + Text( + text = title, + ) + } + } + + Text( + text = stringResource(Res.strings.tfa_directory_title), + style = MaterialTheme.typography.titleSmall, + color = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + ) + + HeaderChipContainer( + modifier = Modifier + .padding(top = 4.dp), + ) { + val chipModifier = Modifier + .background( + color = LocalContentColor.current + .combineAlpha(DisabledEmphasisAlpha) + .combineAlpha(DisabledEmphasisAlpha), + shape = MaterialTheme.shapes.small, + ) + .padding( + horizontal = 4.dp, + vertical = 2.dp, + ) + val chipTextStyle = MaterialTheme.typography.labelSmall + when (loadableState) { + is Loadable.Loading -> { + repeat(2) { + SkeletonText( + modifier = chipModifier + .width(48.dp), + style = chipTextStyle, + ) + } + } + + is Loadable.Ok -> { + val types = loadableState.value.content.getOrNull() + ?.model?.tfa + types?.forEach { type -> + Text( + modifier = chipModifier, + text = type, + style = chipTextStyle, + fontFamily = monoFontFamily, + ) + } + } + } + } + }, + content = { + Column { + val state = loadableState.getOrNull()?.content?.getOrNull() + val notes = state?.model?.notes + if (notes != null) { + Md( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding), + markdown = notes, + ) + Spacer( + modifier = Modifier + .height(16.dp), + ) + } + + val websiteUrl = state?.model?.url + if (websiteUrl != null) { + FlatLaunchBrowserItem( + title = stringResource(Res.strings.uri_action_launch_website_title), + url = websiteUrl, + ) + } + + val documentationUrl = state?.model?.documentation + if (documentationUrl != null) { + FlatLaunchBrowserItem( + title = stringResource(Res.strings.uri_action_launch_docs_title), + url = documentationUrl, + ) + } + + Spacer( + modifier = Modifier + .height(8.dp), + ) + + PoweredBy2factorauth( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding) + .fillMaxWidth(), + ) + } + }, + contentScrollable = true, + actions = { + val updatedOnClose by rememberUpdatedState(loadableState.getOrNull()?.onClose) + TextButton( + enabled = updatedOnClose != null, + onClick = { + updatedOnClose?.invoke() + }, + ) { + Text(stringResource(Res.strings.close)) + } + }, + ) +} + +@OptIn(ExperimentalLayoutApi::class) +@Composable +private fun HeaderChipContainer( + modifier: Modifier = Modifier, + content: @Composable FlowRowScope.() -> Unit, +) { + FlowRow( + modifier = modifier, + horizontalArrangement = Arrangement.spacedBy(8.dp, Alignment.CenterHorizontally), + verticalArrangement = Arrangement.spacedBy(8.dp), + ) { + content() + } +} + +@Composable +fun FlatLaunchBrowserItem( + modifier: Modifier = Modifier, + title: String, + url: String?, +) { + val updatedUrl by rememberUpdatedState(url) + val updatedNavigationController by rememberUpdatedState(LocalNavigationController.current) + FlatItem( + modifier = modifier, + leading = icon(Icons.Outlined.OpenInNew), + title = { + Text( + text = title, + maxLines = 3, + ) + }, + text = if (updatedUrl != null) { + // composable + { + Text( + text = updatedUrl.orEmpty(), + maxLines = 2, + overflow = TextOverflow.Ellipsis, + ) + } + } else { + null + }, + trailing = { + ChevronIcon() + }, + onClick = { + // Open the website, if it's available. + updatedUrl?.let { + val intent = NavigationIntent.NavigateToBrowser(it) + updatedNavigationController.queue(intent) + } + }, + enabled = updatedUrl != null, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/tfa/directory/TwoFaServiceViewState.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/tfa/directory/TwoFaServiceViewState.kt new file mode 100644 index 00000000..47a3fb3a --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/tfa/directory/TwoFaServiceViewState.kt @@ -0,0 +1,17 @@ +package com.artemchep.keyguard.feature.tfa.directory + +import androidx.compose.runtime.Immutable +import arrow.core.Either +import com.artemchep.keyguard.common.service.twofa.TwoFaServiceInfo + +data class TwoFaServiceViewState( + val content: Either, + val onClose: (() -> Unit)? = null, +) { + @Immutable + data class Content( + val model: TwoFaServiceInfo, + ) { + companion object + } +} \ No newline at end of file diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/tfa/directory/TwoFaServiceViewStateProducer.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/tfa/directory/TwoFaServiceViewStateProducer.kt new file mode 100644 index 00000000..8479e8f8 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/tfa/directory/TwoFaServiceViewStateProducer.kt @@ -0,0 +1,44 @@ +package com.artemchep.keyguard.feature.tfa.directory + +import androidx.compose.runtime.Composable +import arrow.core.right +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.service.twofa.TwoFaService +import com.artemchep.keyguard.feature.navigation.state.navigatePopSelf +import com.artemchep.keyguard.feature.navigation.state.produceScreenState +import kotlinx.coroutines.flow.flowOf +import org.kodein.di.compose.localDI +import org.kodein.di.direct +import org.kodein.di.instance + +@Composable +fun produceTwoFaServiceViewState( + args: TwoFaServiceViewRoute.Args, +) = with(localDI().direct) { + produceTwoFaServiceViewState( + args = args, + twoFaService = instance(), + ) +} + +@Composable +fun produceTwoFaServiceViewState( + args: TwoFaServiceViewRoute.Args, + twoFaService: TwoFaService, +): Loadable = produceScreenState( + key = "tfa_service_view", + initial = Loadable.Loading, + args = arrayOf(), +) { + val content = TwoFaServiceViewState.Content( + model = args.model, + ) + val state = TwoFaServiceViewState( + content = content + .right(), + onClose = { + navigatePopSelf() + }, + ) + flowOf(Loadable.Ok(state)) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/twopane/TwoPaneLayout.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/twopane/TwoPaneLayout.kt new file mode 100644 index 00000000..af9871bb --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/twopane/TwoPaneLayout.kt @@ -0,0 +1,220 @@ +package com.artemchep.keyguard.feature.twopane + +import androidx.compose.animation.AnimatedContent +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.BoxScope +import androidx.compose.foundation.layout.BoxWithConstraints +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.widthIn +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Lock +import androidx.compose.material3.Icon +import androidx.compose.material3.LocalAbsoluteTonalElevation +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.Stable +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.key +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.alpha +import androidx.compose.ui.draw.clipToBounds +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.coerceAtMost +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.common.usecase.GetAllowTwoPanelLayoutInLandscape +import com.artemchep.keyguard.common.usecase.GetAllowTwoPanelLayoutInPortrait +import com.artemchep.keyguard.common.usecase.GetNavAnimation +import com.artemchep.keyguard.feature.home.HomeLayout +import com.artemchep.keyguard.feature.home.LocalHomeLayout +import com.artemchep.keyguard.feature.keyguard.setup.keyguardSpan +import com.artemchep.keyguard.feature.navigation.NavigationAnimation +import com.artemchep.keyguard.feature.navigation.NavigationAnimationType +import com.artemchep.keyguard.feature.navigation.transform +import com.artemchep.keyguard.platform.LocalAnimationFactor +import com.artemchep.keyguard.ui.screenMaxWidth +import com.artemchep.keyguard.ui.util.VerticalDivider +import org.kodein.di.compose.rememberInstance + +@Composable +fun TwoPaneScaffold( + modifier: Modifier = Modifier, + masterPaneMinWidth: Dp = 310.dp, + detailPaneMinWidth: Dp = masterPaneMinWidth, + detailPaneMaxWidth: Dp = screenMaxWidth, + ratio: Float = 0.5f, + content: @Composable TwoPaneScaffoldScope.() -> Unit, +) { + val getAllowTwoPanelLayoutInPortrait by rememberInstance() + val allowTwoPanelLayoutInPortrait = remember(getAllowTwoPanelLayoutInPortrait) { + getAllowTwoPanelLayoutInPortrait() + }.collectAsState() + + val getAllowTwoPanelLayoutInLandscape by rememberInstance() + val allowTwoPanelLayoutInLandscape = remember(getAllowTwoPanelLayoutInLandscape) { + getAllowTwoPanelLayoutInLandscape() + }.collectAsState() + + check(ratio <= 0.5f) { + "Ratios larger than 0.5 are not supported!" + } + + BoxWithConstraints( + modifier = modifier, + ) { + val masterPaneWidth = (maxWidth * ratio) + .coerceAtLeast(detailPaneMinWidth) + .coerceAtMost(detailPaneMaxWidth) + val totalPaneWidth = masterPaneWidth + masterPaneMinWidth + val tabletUi = when (LocalHomeLayout.current) { + is HomeLayout.Horizontal -> allowTwoPanelLayoutInLandscape.value && + totalPaneWidth <= maxWidth + + is HomeLayout.Vertical -> allowTwoPanelLayoutInPortrait.value && + totalPaneWidth * 1.25f <= maxWidth + } + val scope = TwoPaneScaffoldScopeImpl( + parent = this, + tabletUi = tabletUi, + masterPaneWidth = masterPaneWidth, + ) + content(scope) + } +} + +@Stable +interface TwoPaneScaffoldScope : BoxScope { + val tabletUi: Boolean + val masterPaneWidth: Dp +} + +private data class TwoPaneScaffoldScopeImpl( + private val parent: BoxScope, + override val tabletUi: Boolean, + override val masterPaneWidth: Dp, +) : TwoPaneScaffoldScope, BoxScope by parent + +@Composable +fun TwoPaneScaffoldScope.TwoPaneLayout( + detailPane: (@Composable BoxScope.() -> Unit)? = null, + masterPane: @Composable BoxScope.() -> Unit, +) { + val getNavAnimation by rememberInstance() + + Row { + if (this@TwoPaneLayout.tabletUi) { + val absoluteElevation = LocalAbsoluteTonalElevation.current + 1.dp + CompositionLocalProvider( + LocalAbsoluteTonalElevation provides absoluteElevation, + LocalHasDetailPane provides (detailPane != null), + ) { + PaneLayout( + modifier = Modifier + .widthIn(max = this@TwoPaneLayout.masterPaneWidth), + ) { + masterPane(this) + } + } + VerticalDivider() + } + key("movable-pane") { + PaneLayout( + modifier = Modifier + .background(MaterialTheme.colorScheme.background), + ) { + val pane = detailPane ?: masterPane.takeUnless { this@TwoPaneLayout.tabletUi } + val updatedAnimationScale by rememberUpdatedState(LocalAnimationFactor) + AnimatedContent( + modifier = Modifier + .fillMaxSize(), + targetState = pane, + transitionSpec = { + val animationType = getNavAnimation().value + val transitionType = kotlin.run { + if ( + initialState == null || + targetState == null + ) { + return@run NavigationAnimationType.SWITCH + } + + val isForward = targetState === detailPane + if (isForward) { + NavigationAnimationType.GO_FORWARD + } else { + NavigationAnimationType.GO_BACKWARD + } + } + + NavigationAnimation.transform( + scale = updatedAnimationScale, + animationType = animationType, + transitionType = transitionType, + ) + }, + label = "", + ) { foo -> + Box( + modifier = Modifier + .fillMaxSize(), + ) { + if (foo != null) { + foo() + } else { + Row( + modifier = Modifier + .align(Alignment.Center) + .alpha(0.035f), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.spacedBy(8.dp), + ) { + Icon( + modifier = Modifier + .size(48.dp), + imageVector = Icons.Outlined.Lock, + contentDescription = null, + tint = MaterialTheme.colorScheme.onBackground, + ) + Text( + text = remember { + keyguardSpan() + }, + textAlign = TextAlign.Center, + style = MaterialTheme.typography.displayLarge, + color = MaterialTheme.colorScheme.onBackground, + maxLines = 1, + ) + } + } + } + } + } + } + } +} + +@Composable +private fun PaneLayout( + modifier: Modifier = Modifier, + content: @Composable BoxScope.() -> Unit, +) { + Box( + modifier = modifier + .fillMaxSize() + // Don't allow shadows and stuff to leak out of the + // component's bounds. + .clipToBounds(), + ) { + content() + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/twopane/TwoPaneLayoutProvider.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/twopane/TwoPaneLayoutProvider.kt new file mode 100644 index 00000000..fc66a52a --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/twopane/TwoPaneLayoutProvider.kt @@ -0,0 +1,7 @@ +package com.artemchep.keyguard.feature.twopane + +import androidx.compose.runtime.compositionLocalOf + +internal val LocalHasDetailPane = compositionLocalOf { + false +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/twopane/TwoPaneNavigation.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/twopane/TwoPaneNavigation.kt new file mode 100644 index 00000000..984776e4 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/twopane/TwoPaneNavigation.kt @@ -0,0 +1,58 @@ +package com.artemchep.keyguard.feature.twopane + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import com.artemchep.keyguard.feature.navigation.LocalNavigationNodeVisualStack +import com.artemchep.keyguard.feature.navigation.NavigationEntry +import com.artemchep.keyguard.feature.navigation.NavigationNode +import kotlinx.collections.immutable.PersistentList +import kotlinx.collections.immutable.persistentListOf + +@Composable +fun TwoPaneNavigationContent( + backStack: PersistentList, +) { + TwoPaneScaffold { + if (backStack.isEmpty()) { + // Nothing to draw, the back stack is empty. + return@TwoPaneScaffold + } + + val tabletUi = tabletUi + + val masterPane = backStack.first() + val detailPane = backStack.last() + .takeIf { it !== masterPane } + TwoPaneLayout( + masterPane = { + val entries = if (detailPane != null) { + // The master pane in tablet UI has no visual depth of + // it and should not have the back stack. + persistentListOf(masterPane) + } else { + backStack + } + NavigationNode( + entries = entries, + ) + }, + detailPane = detailPane + ?.run { + // composable + { + // this is a new UI element + CompositionLocalProvider( + LocalNavigationNodeVisualStack provides persistentListOf(), + ) { + NavigationNode( + entries = backStack, + // The root entry of the backstack is shown on a + // master pane. + offset = if (tabletUi) 1 else 0, + ) + } + } + }, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/twopane/TwoPaneScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/twopane/TwoPaneScreen.kt new file mode 100644 index 00000000..685fd060 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/twopane/TwoPaneScreen.kt @@ -0,0 +1,53 @@ +package com.artemchep.keyguard.feature.twopane + +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.width +import androidx.compose.material3.LocalAbsoluteTonalElevation +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.ui.util.VerticalDivider + +@Composable +fun TwoPaneScreen( + modifier: Modifier = Modifier, + detail: @Composable TwoPaneScaffoldScope.(Modifier) -> Unit, + content: @Composable TwoPaneScaffoldScope.(Modifier, Boolean) -> Unit, +) { + TwoPaneScaffold( + modifier = modifier, + masterPaneMinWidth = 280.dp, + detailPaneMinWidth = 180.dp, + detailPaneMaxWidth = 320.dp, + ratio = 0.4f, + ) { + val scope = this + Row( + modifier = Modifier + .fillMaxSize(), + ) { + val detailIsVisible = this@TwoPaneScaffold.tabletUi + if (detailIsVisible) { + val absoluteElevation = LocalAbsoluteTonalElevation.current + 1.dp + CompositionLocalProvider( + LocalAbsoluteTonalElevation provides absoluteElevation, + ) { + detail( + scope, + Modifier + .width(scope.masterPaneWidth), + ) + } + VerticalDivider() + } + + content( + scope, + Modifier, + detailIsVisible, + ) + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/watchtower/WatchtowerRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/watchtower/WatchtowerRoute.kt new file mode 100644 index 00000000..ea9d0875 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/watchtower/WatchtowerRoute.kt @@ -0,0 +1,11 @@ +package com.artemchep.keyguard.feature.watchtower + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.navigation.Route + +object WatchtowerRoute : Route { + @Composable + override fun Content() { + WatchtowerScreen() + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/watchtower/WatchtowerScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/watchtower/WatchtowerScreen.kt new file mode 100644 index 00000000..a44c438f --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/watchtower/WatchtowerScreen.kt @@ -0,0 +1,1037 @@ +package com.artemchep.keyguard.feature.watchtower + +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.animation.Crossfade +import androidx.compose.animation.expandIn +import androidx.compose.animation.fadeIn +import androidx.compose.animation.fadeOut +import androidx.compose.animation.shrinkOut +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.BoxWithConstraints +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ColumnScope +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.RowScope +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.WindowInsetsSides +import androidx.compose.foundation.layout.consumeWindowInsets +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.only +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.union +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.layout.widthIn +import androidx.compose.foundation.layout.windowInsetsPadding +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.AccountTree +import androidx.compose.material.icons.outlined.CheckCircleOutline +import androidx.compose.material.icons.outlined.CopyAll +import androidx.compose.material.icons.outlined.DataArray +import androidx.compose.material.icons.outlined.Delete +import androidx.compose.material.icons.outlined.ErrorOutline +import androidx.compose.material.icons.outlined.FolderOff +import androidx.compose.material.icons.outlined.Info +import androidx.compose.material.icons.outlined.Recycling +import androidx.compose.material.icons.outlined.ShortText +import androidx.compose.material.icons.outlined.Timer +import androidx.compose.material.icons.outlined.Warning +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.LinearProgressIndicator +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.LocalTextStyle +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Scaffold +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.State +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.getValue +import androidx.compose.runtime.key +import androidx.compose.runtime.remember +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.alpha +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.input.nestedscroll.nestedScroll +import androidx.compose.ui.semantics.Role +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.unit.IntSize +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.model.PasswordStrength +import com.artemchep.keyguard.common.model.fold +import com.artemchep.keyguard.common.model.formatLocalized +import com.artemchep.keyguard.feature.appreview.RequestAppReviewEffect +import com.artemchep.keyguard.feature.home.vault.component.Section +import com.artemchep.keyguard.feature.home.vault.model.FilterItem +import com.artemchep.keyguard.feature.navigation.NavigationIcon +import com.artemchep.keyguard.feature.search.filter.FilterButton +import com.artemchep.keyguard.feature.search.filter.FilterScreen +import com.artemchep.keyguard.feature.twopane.TwoPaneScreen +import com.artemchep.keyguard.platform.leIme +import com.artemchep.keyguard.platform.leNavigationBars +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.Ah +import com.artemchep.keyguard.ui.DefaultEmphasisAlpha +import com.artemchep.keyguard.ui.DisabledEmphasisAlpha +import com.artemchep.keyguard.ui.ExpandedIfNotEmpty +import com.artemchep.keyguard.ui.FlatItem +import com.artemchep.keyguard.ui.GridLayout +import com.artemchep.keyguard.ui.OptionsButton +import com.artemchep.keyguard.ui.animatedNumberText +import com.artemchep.keyguard.ui.grid.preferredGridWidth +import com.artemchep.keyguard.ui.icons.ChevronIcon +import com.artemchep.keyguard.ui.icons.KeyguardTwoFa +import com.artemchep.keyguard.ui.icons.KeyguardWebsite +import com.artemchep.keyguard.ui.poweredby.PoweredBy2factorauth +import com.artemchep.keyguard.ui.poweredby.PoweredByHaveibeenpwned +import com.artemchep.keyguard.ui.poweredby.PoweredByPasskeys +import com.artemchep.keyguard.ui.shimmer.shimmer +import com.artemchep.keyguard.ui.skeleton.SkeletonItemPilled +import com.artemchep.keyguard.ui.skeleton.SkeletonSection +import com.artemchep.keyguard.ui.theme.combineAlpha +import com.artemchep.keyguard.ui.theme.info +import com.artemchep.keyguard.ui.theme.ok +import com.artemchep.keyguard.ui.theme.warning +import com.artemchep.keyguard.ui.toolbar.LargeToolbar +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow +import kotlin.math.roundToInt + +@Composable +fun WatchtowerScreen() { + RequestAppReviewEffect() + + val state = produceWatchtowerState() + WatchtowerScreen( + state = state, + ) +} + +@Composable +fun WatchtowerScreen( + state: WatchtowerState, +) { + TwoPaneScreen( + detail = { modifier -> + VaultHomeScreenFilterPaneCard( + modifier = modifier, + state = state, + ) + }, + ) { modifier, detailIsVisible -> + WatchtowerScreen2( + modifier = modifier, + state = state, + showFilter = !detailIsVisible, + ) + } +} + +@OptIn( + ExperimentalMaterial3Api::class, + androidx.compose.foundation.layout.ExperimentalLayoutApi::class, +) +@Composable +private fun VaultHomeScreenFilterPaneCard( + modifier: Modifier = Modifier, + state: WatchtowerState, +) { + VaultHomeScreenFilterPaneCard2( + modifier = modifier, + items = state.filter.items, + onClear = state.filter.onClear, + ) +} + +@OptIn( + ExperimentalMaterial3Api::class, + androidx.compose.foundation.layout.ExperimentalLayoutApi::class, +) +@Composable +fun VaultHomeScreenFilterPaneCard2( + modifier: Modifier = Modifier, + items: List, + onClear: (() -> Unit)?, +) { + FilterScreen( + modifier = modifier, + count = null, + items = items, + onClear = onClear, + actions = { + }, + ) +} + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun WatchtowerScreen2( + modifier: Modifier, + state: WatchtowerState, + showFilter: Boolean, +) { + val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior() + Scaffold( + modifier = modifier + .nestedScroll(scrollBehavior.nestedScrollConnection), + topBar = { + LargeToolbar( + title = { + Text( + text = stringResource(Res.strings.watchtower_header_title), + ) + }, + navigationIcon = { + NavigationIcon() + }, + actions = { + if (showFilter) { + VaultHomeScreenFilterButton( + state = state, + ) + } + OptionsButton( + actions = state.actions, + ) + }, + scrollBehavior = scrollBehavior, + ) + }, + ) { contentPadding -> + ContentLayout( + contentPadding = contentPadding, + dashboardContent = { + val passwordStrength by remember(state.content) { + if (state.content is Loadable.Ok) { + state.content.value.strength + } else { + MutableStateFlow(Loadable.Loading) + } + }.collectAsState() + DashboardContent(passwordStrength) + }, + cardsContent = { + state.content.RenderCard( + transform = { pwned }, + ) { pwnedPasswords -> + CardPwnedPassword(pwnedPasswords) + } + + state.content.RenderCard( + transform = { pwnedWebsites }, + ) { pwnedWebsites -> + CardVulnerableAccounts(pwnedWebsites) + } + + state.content.RenderCard( + transform = { reused }, + ) { reusedPasswords -> + CardReusedPassword(reusedPasswords) + } + + state.content.RenderCard( + transform = { inactiveTwoFactorAuth }, + ) { inactiveTwoFactorAuth -> + CardInactiveTwoFactorAuth(inactiveTwoFactorAuth) + } + + state.content.RenderCard( + transform = { unsecureWebsites }, + ) { unsecureWebsites -> + CardUnsecureWebsites(unsecureWebsites) + } + + // TODO: + /* + state.content.RenderCard( + transform = { accountCompromised }, + ) { accountCompromised -> + CardCompromisedAccount(accountCompromised) + } + */ + + state.content.RenderCard( + transform = { inactivePasskey }, + ) { inactivePasskey -> + CardInactivePasskey(inactivePasskey) + } + }, + cardsContent2 = { + state.content.RenderCard( + transform = { duplicateItems }, + ) { duplicateItems -> + CardDuplicateItems(duplicateItems) + } + + state.content.RenderCard( + transform = { incompleteItems }, + ) { incompleteItems -> + CardIncompleteItems(incompleteItems) + } + + state.content.RenderCard( + transform = { expiringItems }, + ) { expiringItems -> + CardExpiringItems(expiringItems) + } + + state.content.RenderCard( + transform = { duplicateWebsites }, + ) { duplicateWebsites -> + CardDuplicateWebsites(duplicateWebsites) + } + + state.content.RenderCard( + transform = { trashedItems }, + ) { trashedItems -> + CardTrashedItems(trashedItems) + } + + state.content.RenderCard( + transform = { emptyItems }, + ) { emptyItems -> + CardEmptyItems(emptyItems) + } + }, + loaded = remember { + derivedStateOf { +// val content = state.content.getOrNull() +// ?: return@derivedStateOf false +// combine( +// content.duplicateItems, +// ) + false + } + }, + ) + } +} + +@Composable +private inline fun Loadable.RenderCard( + crossinline transform: T.() -> StateFlow>, + content: @Composable (R) -> Unit, +) { + val valueOrException by remember(this) { + if (this is Loadable.Ok) { + this.value.let(transform) + } else { + MutableStateFlow(Loadable.Loading) + } + }.collectAsState() + valueOrException.fold( + ifLoading = { + CardSkeleton() + }, + ifOk = { data -> + if (data != null) content(data) + }, + ) +} + +@Composable +private fun VaultHomeScreenFilterButton( + modifier: Modifier = Modifier, + state: WatchtowerState, +) { + VaultHomeScreenFilterButton2( + modifier = modifier, + items = state.filter.items, + onClear = state.filter.onClear, + ) +} + +@Composable +fun VaultHomeScreenFilterButton2( + modifier: Modifier = Modifier, + items: List, + onClear: (() -> Unit)?, +) { + FilterButton( + modifier = modifier, + count = null, + items = items, + onClear = onClear, + ) +} + +// Dashboard + +@Composable +private fun ColumnScope.DashboardContent( + content: Loadable, +) = content.fold( + ifOk = { passwordStrengthOrNull -> + ExpandedIfNotEmpty( + valueOrNull = passwordStrengthOrNull, + ) { passwordStrength -> + Column { + DashboardContentData(passwordStrength) + } + } + }, + ifLoading = { + DashboardContentSkeleton() + }, +) + +@Composable +private fun ColumnScope.DashboardContentData( + content: WatchtowerState.Content.PasswordStrength, +) { + Section( + text = stringResource(Res.strings.watchtower_section_password_strength_label), + ) + content.items.forEach { (t, u, onClick) -> + key(t) { + val score = when (t) { + PasswordStrength.Score.Weak -> 0f + PasswordStrength.Score.Fair -> 0.2f + PasswordStrength.Score.Good -> 0.5f + PasswordStrength.Score.Strong -> 0.9f + PasswordStrength.Score.VeryStrong -> 1f + } + FlatItem( + title = { + val text = t.formatLocalized() + Text(text) + }, + leading = { + val numberStr = animatedNumberText(u) + Ah( + score = score, + text = numberStr, + ) + }, + trailing = { + ChevronIcon() + }, + onClick = onClick, + ) + } + } +} + +@Composable +private fun ColumnScope.DashboardContentSkeleton() { + SkeletonSection() + for (i in 0..4) + SkeletonItemPilled() +} + +// Cards + +@Composable +private fun CardPwnedPassword( + state: WatchtowerState.Content.PwnedPasswords, +) { + Card( + number = state.count, + title = { + ContentCardsContentTitle( + icon = WatchtowerStatusIcon.ERROR.takeIf { state.count > 0 } + ?: WatchtowerStatusIcon.OK, + title = stringResource(Res.strings.watchtower_item_pwned_passwords_title), + ) + }, + text = stringResource(Res.strings.watchtower_item_pwned_passwords_text), + imageVector = Icons.Outlined.DataArray, + onClick = state.onClick, + content = { + PoweredByHaveibeenpwned( + modifier = Modifier + .fillMaxWidth(), + fill = true, + ) + }, + ) +} + +@Composable +private fun CardReusedPassword( + state: WatchtowerState.Content.ReusedPasswords, +) { + Card( + number = state.count, + title = { + ContentCardsContentTitle( + icon = WatchtowerStatusIcon.ERROR.takeIf { state.count > 0 } + ?: WatchtowerStatusIcon.OK, + title = stringResource(Res.strings.watchtower_item_reused_passwords_title), + ) + }, + text = stringResource(Res.strings.watchtower_item_reused_passwords_text), + imageVector = Icons.Outlined.Recycling, + onClick = state.onClick, + ) +} + +@Composable +private fun CardVulnerableAccounts( + state: WatchtowerState.Content.PwnedWebsites, +) { + Card( + number = state.count, + title = { + ContentCardsContentTitle( + icon = WatchtowerStatusIcon.ERROR.takeIf { state.count > 0 } + ?: WatchtowerStatusIcon.OK, + title = stringResource(Res.strings.watchtower_item_vulnerable_accounts_title), + ) + }, + text = stringResource(Res.strings.watchtower_item_vulnerable_accounts_text), + imageVector = Icons.Outlined.KeyguardWebsite, + onClick = state.onClick, + content = { + PoweredByHaveibeenpwned( + modifier = Modifier + .fillMaxWidth(), + fill = true, + ) + }, + ) +} + +@Composable +private fun CardUnsecureWebsites( + state: WatchtowerState.Content.UnsecureWebsites, +) { + Card( + number = state.count, + title = { + ContentCardsContentTitle( + icon = WatchtowerStatusIcon.WARNING.takeIf { state.count > 0 } + ?: WatchtowerStatusIcon.OK, + title = stringResource(Res.strings.watchtower_item_unsecure_websites_title), + ) + }, + text = stringResource(Res.strings.watchtower_item_unsecure_websites_text), + imageVector = Icons.Outlined.KeyguardWebsite, + onClick = state.onClick, + ) +} + +@Composable +private fun CardCompromisedAccount( + state: WatchtowerState.Content.CompromisedAccounts, +) { + Card( + number = state.count, + title = { + ContentCardsContentTitle( + icon = WatchtowerStatusIcon.WARNING.takeIf { state.count > 0 } + ?: WatchtowerStatusIcon.OK, + title = stringResource(Res.strings.watchtower_item_compromised_accounts_title), + ) + }, + text = stringResource(Res.strings.watchtower_item_compromised_accounts_text), + imageVector = Icons.Outlined.AccountTree, + onClick = state.onClick, + content = { + PoweredByHaveibeenpwned( + modifier = Modifier + .fillMaxWidth(), + fill = true, + ) + }, + ) +} + +@Composable +private fun CardInactiveTwoFactorAuth( + state: WatchtowerState.Content.InactiveTwoFactorAuth, +) { + Card( + number = state.count, + title = { + ContentCardsContentTitle( + icon = WatchtowerStatusIcon.WARNING.takeIf { state.count > 0 } + ?: WatchtowerStatusIcon.OK, + title = stringResource(Res.strings.watchtower_item_inactive_2fa_title), + ) + }, + text = stringResource(Res.strings.watchtower_item_inactive_2fa_text), + imageVector = Icons.Outlined.KeyguardTwoFa, + onClick = state.onClick, + content = { + PoweredBy2factorauth( + modifier = Modifier + .fillMaxWidth(), + fill = true, + ) + }, + ) +} + +@Composable +private fun CardInactivePasskey( + state: WatchtowerState.Content.InactivePasskey, +) { + Card( + number = state.count, + title = { + ContentCardsContentTitle( + icon = WatchtowerStatusIcon.INFO.takeIf { state.count > 0 } + ?: WatchtowerStatusIcon.OK, + title = stringResource(Res.strings.watchtower_item_inactive_passkey_title), + ) + }, + text = stringResource(Res.strings.watchtower_item_inactive_passkey_text), + imageVector = Icons.Outlined.KeyguardTwoFa, + onClick = state.onClick, + content = { + PoweredByPasskeys( + modifier = Modifier + .fillMaxWidth(), + fill = true, + ) + }, + ) +} + +@Composable +private fun CardIncompleteItems( + state: WatchtowerState.Content.IncompleteItems, +) { + Card( + number = state.count, + title = { + ContentCardsContentTitle( + icon = WatchtowerStatusIcon.INFO.takeIf { state.count > 0 } + ?: WatchtowerStatusIcon.OK, + title = stringResource(Res.strings.watchtower_item_incomplete_items_title), + ) + }, + text = stringResource(Res.strings.watchtower_item_incomplete_items_text), + imageVector = Icons.Outlined.ShortText, + onClick = state.onClick, + ) +} + +@Composable +private fun CardExpiringItems( + state: WatchtowerState.Content.ExpiringItems, +) { + Card( + number = state.count, + title = { + ContentCardsContentTitle( + icon = WatchtowerStatusIcon.INFO.takeIf { state.count > 0 } + ?: WatchtowerStatusIcon.OK, + title = stringResource(Res.strings.watchtower_item_expiring_items_title), + ) + }, + text = stringResource(Res.strings.watchtower_item_expiring_items_text), + imageVector = Icons.Outlined.Timer, + onClick = state.onClick, + ) +} + +@Composable +private fun CardDuplicateWebsites( + state: WatchtowerState.Content.DuplicateWebsites, +) { + Card( + number = state.count, + title = { + ContentCardsContentTitle( + icon = WatchtowerStatusIcon.INFO.takeIf { state.count > 0 } + ?: WatchtowerStatusIcon.OK, + title = stringResource(Res.strings.watchtower_item_duplicate_websites_title), + ) + }, + text = stringResource(Res.strings.watchtower_item_duplicate_websites_text), + imageVector = Icons.Outlined.KeyguardWebsite, + onClick = state.onClick, + ) +} + +@Composable +private fun CardTrashedItems( + state: WatchtowerState.Content.TrashedItems, +) { + Card( + number = state.count, + title = { + val icon = when { + // See: + // https://github.com/bitwarden/mobile/issues/1723 + // for a reasoning behind these numbers. + state.count > 2000 -> WatchtowerStatusIcon.ERROR + state.count > 500 -> WatchtowerStatusIcon.WARNING + state.count > 0 -> WatchtowerStatusIcon.INFO + else -> WatchtowerStatusIcon.OK + } + ContentCardsContentTitle( + icon = icon, + title = stringResource(Res.strings.watchtower_item_trashed_items_title), + ) + }, + text = stringResource(Res.strings.watchtower_item_trashed_items_text), + imageVector = Icons.Outlined.Delete, + onClick = state.onClick, + ) +} + +@Composable +private fun CardEmptyItems( + state: WatchtowerState.Content.EmptyItems, +) { + Card( + number = state.count, + title = { + val icon = when { + state.count > 50 -> WatchtowerStatusIcon.ERROR + state.count > 5 -> WatchtowerStatusIcon.WARNING + state.count > 0 -> WatchtowerStatusIcon.INFO + else -> WatchtowerStatusIcon.OK + } + ContentCardsContentTitle( + icon = icon, + title = stringResource(Res.strings.watchtower_item_empty_folders_title), + ) + }, + text = stringResource(Res.strings.watchtower_item_empty_folders_text), + imageVector = Icons.Outlined.FolderOff, + onClick = state.onClick, + ) +} + +@Composable +private fun CardDuplicateItems( + state: WatchtowerState.Content.DuplicateItems, +) { + Card( + number = state.count, + title = { + ContentCardsContentTitle( + icon = WatchtowerStatusIcon.INFO.takeIf { state.count > 0 } + ?: WatchtowerStatusIcon.OK, + title = stringResource(Res.strings.watchtower_item_duplicate_items_title), + ) + }, + text = stringResource(Res.strings.watchtower_item_duplicate_items_text), + imageVector = Icons.Outlined.CopyAll, + onClick = state.onClick, + ) +} + +private enum class WatchtowerStatusIcon { + OK, + INFO, + WARNING, + ERROR, +} + +@Composable +private fun RowScope.ContentCardsContentTitle( + icon: WatchtowerStatusIcon, + title: String, +) { + Text( + modifier = Modifier + .weight(1f), + text = title, + ) + Spacer( + modifier = Modifier + .width(8.dp), + ) + Crossfade(icon) { ic -> + when (ic) { + WatchtowerStatusIcon.OK -> { + Icon( + Icons.Outlined.CheckCircleOutline, + modifier = Modifier + .align(Alignment.CenterVertically), + contentDescription = null, + tint = MaterialTheme.colorScheme.ok, + ) + } + + WatchtowerStatusIcon.INFO -> { + Icon( + Icons.Outlined.Info, + modifier = Modifier + .align(Alignment.CenterVertically), + contentDescription = null, + tint = MaterialTheme.colorScheme.info, + ) + } + + WatchtowerStatusIcon.WARNING -> { + Icon( + Icons.Outlined.Warning, + modifier = Modifier + .align(Alignment.CenterVertically), + contentDescription = null, + tint = MaterialTheme.colorScheme.warning, + ) + } + + WatchtowerStatusIcon.ERROR -> { + Icon( + Icons.Outlined.ErrorOutline, + modifier = Modifier + .align(Alignment.CenterVertically), + contentDescription = null, + tint = MaterialTheme.colorScheme.error, + ) + } + } + } + Spacer( + modifier = Modifier + .width(8.dp), + ) +} + +@Composable +private fun ContentLayout( + contentPadding: PaddingValues, + dashboardContent: @Composable ColumnScope.() -> Unit, + cardsContent: @Composable () -> Unit, + cardsContent2: @Composable () -> Unit, + loaded: State, +) { + val scrollState = rememberScrollState() + BoxWithConstraints { + val navBarWithImeInsets = WindowInsets.leNavigationBars + .union(WindowInsets.leIme) + .only(WindowInsetsSides.Bottom) + Box( + modifier = Modifier + .windowInsetsPadding(navBarWithImeInsets) + .consumeWindowInsets(navBarWithImeInsets), + ) { + Column( + modifier = Modifier + .fillMaxSize() + .verticalScroll(scrollState) + .padding(contentPadding), + ) { + val columns = (this@BoxWithConstraints.maxWidth / preferredGridWidth) + .roundToInt() + .coerceAtLeast(1) + val dashboardWidth = this@BoxWithConstraints.maxWidth / columns * + 2.coerceAtMost(columns) + + Column( + modifier = Modifier + .widthIn(max = dashboardWidth) + .fillMaxWidth(), + ) { + dashboardContent() + } + Section( + text = stringResource(Res.strings.watchtower_section_security_label), + ) + GridLayout( + modifier = Modifier + .padding(horizontal = 8.dp), + columns = columns, + mainAxisSpacing = 8.dp, + crossAxisSpacing = 8.dp, + ) { + cardsContent() + } + Section( + text = stringResource(Res.strings.watchtower_section_maintenance_label), + ) + GridLayout( + modifier = Modifier + .padding(horizontal = 8.dp), + columns = columns, + mainAxisSpacing = 8.dp, + crossAxisSpacing = 8.dp, + ) { + cardsContent2() + } + } + AnimatedVisibility( + modifier = Modifier + .padding(contentPadding), + visible = loaded.value, + enter = fadeIn() + expandIn( + initialSize = { + IntSize(it.width, 0) + }, + ), + exit = shrinkOut( + targetSize = { + IntSize(it.width, 0) + }, + ) + fadeOut(), + ) { + LinearProgressIndicator( + modifier = Modifier + .fillMaxWidth(), + ) + } + } + } +} + +@Composable +fun Card( + modifier: Modifier = Modifier, + number: Int, + title: @Composable RowScope.() -> Unit, + text: String, + imageVector: ImageVector?, + content: (@Composable () -> Unit)? = null, + onClick: (() -> Unit)? = null, +) { + Surface( + modifier = modifier, + shape = MaterialTheme.shapes.medium, + tonalElevation = if (number > 0) 1.dp else 0.dp, + ) { + if (imageVector != null) { + Box( + modifier = Modifier + .fillMaxSize(), + contentAlignment = Alignment.TopEnd, + ) { + Icon( + imageVector, + modifier = Modifier + .size(128.dp) + .alpha(0.035f), + contentDescription = null, + ) + } + } + Column( + modifier = Modifier + .then( + if (onClick != null) { + Modifier + .clickable(role = Role.Button) { + onClick() + } + } else { + Modifier + }, + ) + .padding(8.dp), + ) { + val localEmphasis = DefaultEmphasisAlpha + val localTextStyle = TextStyle( + color = LocalContentColor.current + .combineAlpha(localEmphasis), + ) + + val numberStr = animatedNumberText(number) + Text( + numberStr, + style = MaterialTheme.typography.displayLarge + .merge(localTextStyle), + ) + Spacer(modifier = Modifier.height(8.dp)) + CompositionLocalProvider( + LocalTextStyle provides MaterialTheme.typography.titleMedium + .merge(localTextStyle), + ) { + Row { + title() + } + } + Spacer(modifier = Modifier.height(8.dp)) + Text( + text, + style = MaterialTheme.typography.bodyMedium + .merge(localTextStyle), + ) + if (content != null) { + Spacer(modifier = Modifier.height(8.dp).weight(1f)) + content() + } + } + } +} + +@Composable +fun CardSkeleton( + modifier: Modifier = Modifier, +) { + val contentColor = + LocalContentColor.current.copy(alpha = DisabledEmphasisAlpha) + Surface( + modifier = modifier, + shape = MaterialTheme.shapes.medium, + tonalElevation = 1.dp, + ) { + Column( + modifier = Modifier + .shimmer() + .padding(8.dp), + ) { + Box( + Modifier + .padding(top = 16.dp) + .height(48.dp) + .width(30.dp) + .clip(MaterialTheme.shapes.medium) + .background(contentColor), + ) + Spacer(modifier = Modifier.height(18.dp)) + Box( + Modifier + .height(18.dp) + .fillMaxWidth(0.72f) + .clip(MaterialTheme.shapes.medium) + .background(contentColor), + ) + Spacer(modifier = Modifier.height(8.dp)) + Box( + Modifier + .height(14.dp) + .fillMaxWidth(0.6f) + .clip(MaterialTheme.shapes.medium) + .background(contentColor.copy(alpha = 0.2f)), + ) + Spacer(modifier = Modifier.height(4.dp)) + Box( + Modifier + .height(14.dp) + .fillMaxWidth(0.6f) + .clip(MaterialTheme.shapes.medium) + .background(contentColor.copy(alpha = 0.2f)), + ) + Spacer(modifier = Modifier.height(4.dp)) + Box( + Modifier + .height(14.dp) + .fillMaxWidth(0.6f) + .clip(MaterialTheme.shapes.medium) + .background(contentColor.copy(alpha = 0.2f)), + ) + Spacer(modifier = Modifier.height(4.dp)) + Box( + Modifier + .height(14.dp) + .fillMaxWidth(0.3f) + .clip(MaterialTheme.shapes.medium) + .background(contentColor.copy(alpha = 0.2f)), + ) + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/watchtower/WatchtowerState.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/watchtower/WatchtowerState.kt new file mode 100644 index 00000000..c2c2c5a7 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/watchtower/WatchtowerState.kt @@ -0,0 +1,124 @@ +package com.artemchep.keyguard.feature.watchtower + +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.feature.home.vault.model.FilterItem +import com.artemchep.keyguard.ui.ContextItem +import kotlinx.coroutines.flow.StateFlow + +data class WatchtowerState( + val revision: Int = 0, + val filter: Filter = Filter(), + val actions: List = emptyList(), + val content: Loadable = Loadable.Loading, +) { + data class Filter( + val items: List = emptyList(), + val onClear: (() -> Unit)? = null, + ) + + data class Content( + val unsecureWebsites: StateFlow>, + val duplicateWebsites: StateFlow>, + val inactiveTwoFactorAuth: StateFlow>, + val inactivePasskey: StateFlow>, + val accountCompromised: StateFlow>, + val pwned: StateFlow>, + val pwnedWebsites: StateFlow>, + val reused: StateFlow>, + val incompleteItems: StateFlow>, + val expiringItems: StateFlow>, + val duplicateItems: StateFlow>, + val trashedItems: StateFlow>, + val emptyItems: StateFlow>, + val strength: StateFlow>, + ) { + data class UnsecureWebsites( + val revision: Int, + val count: Int, + val onClick: (() -> Unit)? = null, + ) + + data class DuplicateWebsites( + val revision: Int, + val count: Int, + val onClick: (() -> Unit)? = null, + ) + + data class InactiveTwoFactorAuth( + val revision: Int, + val count: Int, + val onClick: (() -> Unit)? = null, + ) + + data class InactivePasskey( + val revision: Int, + val count: Int, + val onClick: (() -> Unit)? = null, + ) + + data class PwnedPasswords( + val revision: Int, + val count: Int, + val onClick: (() -> Unit)? = null, + ) + + data class PwnedWebsites( + val revision: Int, + val count: Int, + val onClick: (() -> Unit)? = null, + ) + + data class CompromisedAccounts( + val revision: Int, + val count: Int, + val onClick: (() -> Unit)? = null, + ) + + data class ReusedPasswords( + val revision: Int, + val count: Int, + val onClick: (() -> Unit)? = null, + ) + + data class IncompleteItems( + val revision: Int, + val count: Int, + val onClick: (() -> Unit)? = null, + ) + + data class ExpiringItems( + val revision: Int, + val count: Int, + val onClick: (() -> Unit)? = null, + ) + + data class DuplicateItems( + val revision: Int, + val count: Int, + val onClick: (() -> Unit)? = null, + ) + + data class TrashedItems( + val revision: Int, + val count: Int, + val onClick: (() -> Unit)? = null, + ) + + data class EmptyItems( + val revision: Int, + val count: Int, + val onClick: (() -> Unit)? = null, + ) + + data class PasswordStrength( + val revision: Int, + val items: List, + ) { + data class Item( + val score: com.artemchep.keyguard.common.model.PasswordStrength.Score, + val count: Int, + val onClick: (() -> Unit)?, + ) + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/watchtower/WatchtowerStateProducer.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/watchtower/WatchtowerStateProducer.kt new file mode 100644 index 00000000..93be9493 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/watchtower/WatchtowerStateProducer.kt @@ -0,0 +1,947 @@ +package com.artemchep.keyguard.feature.watchtower + +import androidx.compose.runtime.Composable +import arrow.core.identity +import arrow.core.partially1 +import com.artemchep.keyguard.common.model.DFilter +import com.artemchep.keyguard.common.model.DFolder +import com.artemchep.keyguard.common.model.DSecret +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.model.PasswordStrength +import com.artemchep.keyguard.common.model.formatH2 +import com.artemchep.keyguard.common.usecase.CipherDuplicatesCheck +import com.artemchep.keyguard.common.usecase.GetAccounts +import com.artemchep.keyguard.common.usecase.GetCiphers +import com.artemchep.keyguard.common.usecase.GetCollections +import com.artemchep.keyguard.common.usecase.GetFolders +import com.artemchep.keyguard.common.usecase.GetOrganizations +import com.artemchep.keyguard.common.usecase.GetProfiles +import com.artemchep.keyguard.common.util.flow.persistingStateIn +import com.artemchep.keyguard.feature.crashlytics.crashlyticsMap +import com.artemchep.keyguard.feature.duplicates.DuplicatesRoute +import com.artemchep.keyguard.feature.home.vault.VaultRoute +import com.artemchep.keyguard.feature.home.vault.folders.FoldersRoute +import com.artemchep.keyguard.feature.home.vault.screen.FilterParams +import com.artemchep.keyguard.feature.home.vault.screen.OurFilterResult +import com.artemchep.keyguard.feature.home.vault.screen.ah +import com.artemchep.keyguard.feature.home.vault.screen.createFilter +import com.artemchep.keyguard.feature.home.vault.search.filter.FilterHolder +import com.artemchep.keyguard.feature.home.vault.search.sort.PasswordSort +import com.artemchep.keyguard.feature.justdeleteme.directory.JustDeleteMeServiceListRoute +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.feature.navigation.state.PersistedStorage +import com.artemchep.keyguard.feature.navigation.state.produceScreenState +import com.artemchep.keyguard.feature.passkeys.directory.PasskeysServiceListRoute +import com.artemchep.keyguard.feature.tfa.directory.TwoFaServiceListRoute +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.buildContextItems +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.flatMapLatest +import kotlinx.coroutines.flow.flow +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.onEach +import kotlinx.coroutines.flow.shareIn +import kotlinx.coroutines.flow.stateIn +import org.kodein.di.DirectDI +import org.kodein.di.compose.localDI +import org.kodein.di.direct +import org.kodein.di.instance + +@Composable +fun produceWatchtowerState( +) = with(localDI().direct) { + produceWatchtowerState( + directDI = this, + getCiphers = instance(), + getAccounts = instance(), + getProfiles = instance(), + getFolders = instance(), + getCollections = instance(), + getOrganizations = instance(), + cipherDuplicatesCheck = instance(), + ) +} + +private data class FilteredBoo( + val list: List, + val filterConfig: FilterHolder? = null, +) + +private class WatchtowerUiException( + msg: String, + cause: Throwable, +) : RuntimeException(msg, cause) + +@Composable +fun produceWatchtowerState( + directDI: DirectDI, + getCiphers: GetCiphers, + getAccounts: GetAccounts, + getProfiles: GetProfiles, + getFolders: GetFolders, + getCollections: GetCollections, + getOrganizations: GetOrganizations, + cipherDuplicatesCheck: CipherDuplicatesCheck, +): WatchtowerState = produceScreenState( + initial = WatchtowerState(), + key = "watchtower", + args = arrayOf( + getCiphers, + ), +) { + val storage = kotlin.run { + val disk = loadDiskHandle( + key = "cache", + ) + PersistedStorage.InDisk(disk) + } + + val ciphersFlow = getCiphers() + .map { secrets -> + secrets + .filter { secret -> !secret.deleted } + } + .shareIn(screenScope, SharingStarted.WhileSubscribed(), replay = 1) + val foldersFlow = getFolders() + .map { folders -> + folders + .filter { folder -> !folder.deleted } + } + .shareIn(screenScope, SharingStarted.WhileSubscribed(), replay = 1) + + val filterResult = createFilter() + + fun filteredCiphers(ciphersFlow: Flow>) = ciphersFlow + .map { + FilteredBoo( + list = it, + ) + } + .combine( + flow = filterResult.filterFlow, + ) { state, filterConfig -> + // Fast path: if the there are no filters, then + // just return original list of items. + if (filterConfig.state.isEmpty()) { + return@combine state.copy( + filterConfig = filterConfig, + ) + } + + val filteredItems = kotlin.run { + val allItems = state.list + val predicate = filterConfig.filter.prepare(directDI, allItems) + allItems.filter(predicate) + } + state.copy( + list = filteredItems, + filterConfig = filterConfig, + ) + } + .shareIn(screenScope, SharingStarted.WhileSubscribed(), replay = 1) + + fun filteredFolders(foldersFlow: Flow>) = foldersFlow + .map { + FilteredBoo( + list = it, + ) + } + .combine( + flow = filterResult.filterFlow, + ) { state, filterConfig -> + // Fast path: if the there are no filters, then + // just return original list of items. + if (filterConfig.state.isEmpty()) { + return@combine state.copy( + filterConfig = filterConfig, + ) + } + + val filteredItems = kotlin.run { + val allItems = state.list + val predicate = filterConfig.filter.prepareFolders(directDI, allItems) + allItems.filter(predicate) + } + state.copy( + list = filteredItems, + filterConfig = filterConfig, + ) + } + .shareIn(screenScope, SharingStarted.WhileSubscribed(), replay = 1) + + val filteredCiphersFlow = filteredCiphers( + ciphersFlow = ciphersFlow, + ) + val filteredTrashedCiphersFlow = filteredCiphers( + ciphersFlow = getCiphers() + .map { secrets -> + secrets + .filter { secret -> secret.deleted } + }, + ) + + val filteredFoldersFlow = filteredFolders( + foldersFlow = foldersFlow, + ) + + val filterFlow = ah( + directDI = directDI, + outputGetter = ::identity, + outputFlow = filteredCiphersFlow + .map { state -> + state.list + }, + accountGetter = ::identity, + accountFlow = getAccounts(), + profileFlow = getProfiles(), + cipherGetter = ::identity, + cipherFlow = ciphersFlow, + folderGetter = ::identity, + folderFlow = getFolders(), + collectionGetter = ::identity, + collectionFlow = getCollections(), + organizationGetter = ::identity, + organizationFlow = getOrganizations(), + input = filterResult, + params = FilterParams( + section = FilterParams.Section( + misc = false, + type = false, + ), + ), + ) + .stateIn(this, SharingStarted.WhileSubscribed(), OurFilterResult()) + + fun boose( + source: Flow>, + key: String, + counterFlow: (FilteredBoo) -> Flow, + onCreate: (FilteredBoo?, Int) -> T, + ): StateFlow> { + val cachedCounterSink = mutablePersistedFlow(key, storage) { + -1 + } + // Start with displaying cached counter, and then load + // the actual value. + val initialValue = kotlin.run { + val cachedCounter = cachedCounterSink.value + if (cachedCounter >= 0) { + val state = onCreate(null, cachedCounter) + Loadable.Ok(state) + } else { + Loadable.Loading + } + } + return source + .flatMapLatest { holder -> + counterFlow(holder) + .onEach { + val revision = holder.filterConfig?.id + if (revision == null || revision == 0) { + cachedCounterSink.value = it + } + } + .map { count -> + val state = onCreate(holder, count) + Loadable.Ok(state) + } + } + .crashlyticsMap( + transform = { e -> + val msg = "Failed to process '$key' metric!" + WatchtowerUiException(msg, e) + }, + orElse = { Loadable.Ok(null) }, + ) + .persistingStateIn( + scope = screenScope, + started = SharingStarted.WhileSubscribed(), + initialValue = initialValue, + ) + } + + fun booseBlock( + source: Flow>, + key: String, + counterBlock: suspend (FilteredBoo) -> Int, + onCreate: (FilteredBoo?, Int) -> T, + ) = boose( + source = source, + key = key, + counterFlow = { holder -> + flow { + val count = counterBlock(holder) + emit(count) + } + }, + onCreate = onCreate, + ) + + // + // Password strength + // + + fun onClickPasswordStrength( + filter: DFilter, + score: PasswordStrength.Score, + ) { + val intent = NavigationIntent.NavigateToRoute( + VaultRoute.watchtower( + title = translate(score.formatH2()), + subtitle = translate(Res.strings.watchtower_header_title), + filter = DFilter.And( + filters = listOf( + DFilter.ByPasswordStrength(score), + filter, + ), + ), + ), + ) + navigate(intent) + } + + val passwordStrengthFlow = filteredCiphersFlow + .map { holder -> + val items = holder + .list + .mapNotNull { secret -> secret.login?.passwordStrength?.score } + .groupBy { it } + .mapValues { + it.value.size + } + .run { + val m = toMutableMap() + m.getOrPut(PasswordStrength.Score.VeryStrong) { 0 } + m.getOrPut(PasswordStrength.Score.Strong) { 0 } + m.getOrPut(PasswordStrength.Score.Good) { 0 } + m.getOrPut(PasswordStrength.Score.Fair) { 0 } + m.getOrPut(PasswordStrength.Score.Weak) { 0 } + m + } + .map { + val onClick = if (it.value > 0) { + val filter = holder.filterConfig?.filter + ?: DFilter.All + ::onClickPasswordStrength + .partially1(filter) + .partially1(it.key) + } else { + null + } + WatchtowerState.Content.PasswordStrength.Item( + score = it.key, + count = it.value, + onClick = onClick, + ) + } + .sortedByDescending { it.score } + val state = WatchtowerState.Content.PasswordStrength( + revision = holder.filterConfig?.id ?: 0, + items = items, + ) + Loadable.Ok(state) + } + .crashlyticsMap( + transform = { e -> + val msg = "Failed to process password strength list!" + WatchtowerUiException(msg, e) + }, + orElse = { Loadable.Ok(null) }, + ) + .persistingStateIn( + scope = screenScope, + started = SharingStarted.WhileSubscribed(), + initialValue = Loadable.Loading, + ) + + // + // Security + // + + fun onClickPasswordPwned( + filter: DFilter, + ) { + val intent = NavigationIntent.NavigateToRoute( + VaultRoute.watchtower( + title = translate(Res.strings.watchtower_item_pwned_passwords_title), + subtitle = translate(Res.strings.watchtower_header_title), + filter = DFilter.And( + filters = listOf( + DFilter.ByPasswordPwned, + filter, + ), + ), + ), + ) + navigate(intent) + } + + val passwordPwnedFlow = booseBlock( + source = filteredCiphersFlow, + key = DFilter.ByPasswordPwned.key, + counterBlock = { holder -> + val count = DFilter.ByPasswordPwned.count(directDI, holder.list) + count + }, + onCreate = { holder, count -> + val onClick = if (count > 0) { + val filter = holder?.filterConfig?.filter + ?: DFilter.All + ::onClickPasswordPwned + .partially1(filter) + } else { + null + } + WatchtowerState.Content.PwnedPasswords( + revision = holder?.filterConfig?.id ?: 0, + count = count, + onClick = onClick, + ) + }, + ) + + fun onClickUnsecureWebsites( + filter: DFilter, + ) { + val intent = NavigationIntent.NavigateToRoute( + VaultRoute.watchtower( + title = translate(Res.strings.watchtower_item_unsecure_websites_title), + subtitle = translate(Res.strings.watchtower_header_title), + filter = DFilter.And( + filters = listOf( + DFilter.ByUnsecureWebsites, + filter, + ), + ), + ), + ) + navigate(intent) + } + + val unsecureWebsitesFlow = booseBlock( + source = filteredCiphersFlow, + key = DFilter.ByUnsecureWebsites.key, + counterBlock = { holder -> + val count = DFilter.ByUnsecureWebsites.count(directDI, holder.list) + count + }, + onCreate = { holder, count -> + val onClick = if (count > 0) { + val filter = holder?.filterConfig?.filter + ?: DFilter.All + ::onClickUnsecureWebsites + .partially1(filter) + } else { + null + } + WatchtowerState.Content.UnsecureWebsites( + revision = holder?.filterConfig?.id ?: 0, + count = count, + onClick = onClick, + ) + }, + ) + + fun onClickDuplicateWebsites( + filter: DFilter, + ) { + val intent = NavigationIntent.NavigateToRoute( + VaultRoute.watchtower( + title = translate(Res.strings.watchtower_item_duplicate_websites_title), + subtitle = translate(Res.strings.watchtower_header_title), + filter = DFilter.And( + filters = listOf( + DFilter.ByDuplicateWebsites, + filter, + ), + ), + ), + ) + navigate(intent) + } + + val duplicateWebsitesFlow = booseBlock( + source = filteredCiphersFlow, + key = DFilter.ByDuplicateWebsites.key, + counterBlock = { holder -> + val count = DFilter.ByDuplicateWebsites.count(directDI, holder.list) + count + }, + onCreate = { holder, count -> + val onClick = if (count > 0) { + val filter = holder?.filterConfig?.filter + ?: DFilter.All + ::onClickDuplicateWebsites + .partially1(filter) + } else { + null + } + WatchtowerState.Content.DuplicateWebsites( + revision = holder?.filterConfig?.id ?: 0, + count = count, + onClick = onClick, + ) + }, + ) + + fun onClickTfaWebsites( + filter: DFilter, + ) { + val intent = NavigationIntent.NavigateToRoute( + VaultRoute.watchtower( + title = translate(Res.strings.watchtower_item_inactive_2fa_title), + subtitle = translate(Res.strings.watchtower_header_title), + filter = DFilter.And( + filters = listOf( + DFilter.ByTfaWebsites, + filter, + ), + ), + ), + ) + navigate(intent) + } + + val inactiveTwoFactorAuthFlow = booseBlock( + source = filteredCiphersFlow, + key = DFilter.ByTfaWebsites.key, + counterBlock = { holder -> + val count = DFilter.ByTfaWebsites.count(directDI, holder.list) + count + }, + onCreate = { holder, count -> + val onClick = if (count > 0) { + val filter = holder?.filterConfig?.filter + ?: DFilter.All + ::onClickTfaWebsites + .partially1(filter) + } else { + null + } + WatchtowerState.Content.InactiveTwoFactorAuth( + revision = holder?.filterConfig?.id ?: 0, + count = count, + onClick = onClick, + ) + }, + ) + + fun onClickPasskeyWebsites( + filter: DFilter, + ) { + val intent = NavigationIntent.NavigateToRoute( + VaultRoute.watchtower( + title = translate(Res.strings.watchtower_item_inactive_passkey_title), + subtitle = translate(Res.strings.watchtower_header_title), + filter = DFilter.And( + filters = listOf( + DFilter.ByPasskeyWebsites, + filter, + ), + ), + ), + ) + navigate(intent) + } + + val inactivePasskeyFlow = booseBlock( + source = filteredCiphersFlow, + key = DFilter.ByPasskeyWebsites.key, + counterBlock = { holder -> + val count = DFilter.ByPasskeyWebsites.count(directDI, holder.list) + count + }, + onCreate = { holder, count -> + val onClick = if (count > 0) { + val filter = holder?.filterConfig?.filter + ?: DFilter.All + ::onClickPasskeyWebsites + .partially1(filter) + } else { + null + } + WatchtowerState.Content.InactivePasskey( + revision = holder?.filterConfig?.id ?: 0, + count = count, + onClick = onClick, + ) + }, + ) + + fun onClickPasswordReused( + filter: DFilter, + ) { + val intent = NavigationIntent.NavigateToRoute( + VaultRoute.watchtower( + title = translate(Res.strings.watchtower_item_reused_passwords_title), + subtitle = translate(Res.strings.watchtower_header_title), + filter = DFilter.And( + filters = listOf( + DFilter.ByPasswordDuplicates, + filter, + ), + ), + sort = PasswordSort, + ), + ) + navigate(intent) + } + + val passwordReusedFlow = booseBlock( + source = filteredCiphersFlow, + key = DFilter.ByPasswordDuplicates.key, + counterBlock = { holder -> + val count = DFilter.ByPasswordDuplicates.count(directDI, holder.list) + count + }, + onCreate = { holder, count -> + val onClick = if (count > 0) { + val filter = holder?.filterConfig?.filter + ?: DFilter.All + ::onClickPasswordReused + .partially1(filter) + } else { + null + } + WatchtowerState.Content.ReusedPasswords( + revision = holder?.filterConfig?.id ?: 0, + count = count, + onClick = onClick, + ) + }, + ) + + fun onClickWebsitePwned( + filter: DFilter, + ) { + val intent = NavigationIntent.NavigateToRoute( + VaultRoute.watchtower( + title = translate(Res.strings.watchtower_item_vulnerable_accounts_title), + subtitle = translate(Res.strings.watchtower_header_title), + filter = DFilter.And( + filters = listOf( + DFilter.ByWebsitePwned, + filter, + ), + ), + ), + ) + navigate(intent) + } + + val websitePwnedFlow = booseBlock( + source = filteredCiphersFlow, + key = DFilter.ByWebsitePwned.key, + counterBlock = { holder -> + val count = DFilter.ByWebsitePwned.count(directDI, holder.list) + count + }, + onCreate = { holder, count -> + val onClick = if (count > 0) { + val filter = holder?.filterConfig?.filter + ?: DFilter.All + ::onClickWebsitePwned + .partially1(filter) + } else { + null + } + WatchtowerState.Content.PwnedWebsites( + revision = holder?.filterConfig?.id ?: 0, + count = count, + onClick = onClick, + ) + }, + ) + val accountCompromisedFlow = booseBlock( + source = filteredCiphersFlow, + key = DFilter.ByWebsitePwned.key, + counterBlock = { holder -> + val count = DFilter.ByWebsitePwned.count(directDI, holder.list) + count + }, + onCreate = { holder, count -> + val onClick = if (count > 0) { + val filter = holder?.filterConfig?.filter + ?: DFilter.All + ::onClickWebsitePwned + .partially1(filter) + } else { + null + } + WatchtowerState.Content.CompromisedAccounts( + revision = holder?.filterConfig?.id ?: 0, + count = count, + onClick = onClick, + ) + }, + ) + + // + // Maintenance + // + + fun onClickDuplicates( + filter: DFilter, + ) { + val intent = NavigationIntent.NavigateToRoute( + DuplicatesRoute( + args = DuplicatesRoute.Args( + filter = filter, + ), + ), + ) + navigate(intent) + } + + val duplicateItemsFlow = booseBlock( + source = filteredCiphersFlow, + key = "by_duplicate", + counterBlock = { holder -> + val groups = + cipherDuplicatesCheck(holder.list, CipherDuplicatesCheck.Sensitivity.NORMAL) + val count = groups.size + count + }, + onCreate = { holder, count -> + val onClick = if (count > 0) { + val filter = holder?.filterConfig?.filter + ?: DFilter.All + ::onClickDuplicates + .partially1(filter) + } else { + null + } + WatchtowerState.Content.DuplicateItems( + revision = holder?.filterConfig?.id ?: 0, + count = count, + onClick = onClick, + ) + }, + ) + + fun onClickIncomplete( + filter: DFilter, + ) { + val intent = NavigationIntent.NavigateToRoute( + VaultRoute.watchtower( + title = translate(Res.strings.watchtower_item_incomplete_items_title), + subtitle = translate(Res.strings.watchtower_header_title), + filter = DFilter.And( + filters = listOf( + DFilter.ByIncomplete, + filter, + ), + ), + ), + ) + navigate(intent) + } + + val incompleteItemsFlow = booseBlock( + source = filteredCiphersFlow, + key = DFilter.ByIncomplete.key, + counterBlock = { holder -> + val count = DFilter.ByIncomplete.count(directDI, holder.list) + count + }, + onCreate = { holder, count -> + val onClick = if (count > 0) { + val filter = holder?.filterConfig?.filter + ?: DFilter.All + ::onClickIncomplete + .partially1(filter) + } else { + null + } + WatchtowerState.Content.IncompleteItems( + revision = holder?.filterConfig?.id ?: 0, + count = count, + onClick = onClick, + ) + }, + ) + + fun onClickExpiring( + filter: DFilter, + ) { + val intent = NavigationIntent.NavigateToRoute( + VaultRoute.watchtower( + title = translate(Res.strings.watchtower_item_expiring_items_title), + subtitle = translate(Res.strings.watchtower_header_title), + filter = DFilter.And( + filters = listOf( + DFilter.ByExpiring, + filter, + ), + ), + ), + ) + navigate(intent) + } + + val expiringItemsFlow = booseBlock( + source = filteredCiphersFlow, + key = DFilter.ByExpiring.key, + counterBlock = { holder -> + val count = DFilter.ByExpiring.count(directDI, holder.list) + count + }, + onCreate = { holder, count -> + val onClick = if (count > 0) { + val filter = holder?.filterConfig?.filter + ?: DFilter.All + ::onClickExpiring + .partially1(filter) + } else { + null + } + WatchtowerState.Content.ExpiringItems( + revision = holder?.filterConfig?.id ?: 0, + count = count, + onClick = onClick, + ) + }, + ) + + fun onClickTrash( + filter: DFilter, + ) { + val intent = NavigationIntent.NavigateToRoute( + VaultRoute.watchtower( + title = translate(Res.strings.watchtower_item_trashed_items_title), + subtitle = translate(Res.strings.watchtower_header_title), + filter = filter, + trash = true, + ), + ) + navigate(intent) + } + + val trashedItemsFlow = booseBlock( + source = filteredTrashedCiphersFlow, + key = "by_trash", + counterBlock = { holder -> + val count = holder.list.size + count + }, + onCreate = { holder, count -> + val onClick = if (count > 0) { + val filter = holder?.filterConfig?.filter + ?: DFilter.All + ::onClickTrash + .partially1(filter) + } else { + null + } + WatchtowerState.Content.TrashedItems( + revision = holder?.filterConfig?.id ?: 0, + count = count, + onClick = onClick, + ) + }, + ) + + fun onClickEmpty( + filter: DFilter, + ) { + val route = FoldersRoute( + args = FoldersRoute.Args( + filter = filter, + empty = true, + ), + ) + val intent = NavigationIntent.NavigateToRoute(route) + navigate(intent) + } + + val emptyItemsFlow = booseBlock( + source = filteredFoldersFlow + .combine( + ciphersFlow + .map { list -> + list + .asSequence() + .map { it.folderId } + .toSet() + } + .distinctUntilChanged(), + ) { holder, usedFolderIds -> + val filteredFolders = holder + .list + .filter { folder -> + val isEmpty = folder.id !in usedFolderIds + isEmpty + } + holder.copy(list = filteredFolders) + }, + key = "by_empty_folder", + counterBlock = { holder -> + val count = holder.list.size + count + }, + onCreate = { holder, count -> + val onClick = if (count > 0) { + val filter = holder?.filterConfig?.filter + ?: DFilter.All + ::onClickEmpty + .partially1(filter) + } else { + null + } + WatchtowerState.Content.EmptyItems( + revision = holder?.filterConfig?.id ?: 0, + count = count, + onClick = onClick, + ) + }, + ) + + val content = WatchtowerState.Content( + unsecureWebsites = unsecureWebsitesFlow, + duplicateWebsites = duplicateWebsitesFlow, + inactiveTwoFactorAuth = inactiveTwoFactorAuthFlow, + inactivePasskey = inactivePasskeyFlow, + accountCompromised = accountCompromisedFlow, + pwned = passwordPwnedFlow, + pwnedWebsites = websitePwnedFlow, + reused = passwordReusedFlow, + incompleteItems = incompleteItemsFlow, + expiringItems = expiringItemsFlow, + duplicateItems = duplicateItemsFlow, + trashedItems = trashedItemsFlow, + emptyItems = emptyItemsFlow, + strength = passwordStrengthFlow, + ) + val actions = buildContextItems { + section { + this += TwoFaServiceListRoute.actionOrNull( + translator = this@produceScreenState, + navigate = ::navigate, + ) + this += PasskeysServiceListRoute.passkeysActionOrNull( + translator = this@produceScreenState, + navigate = ::navigate, + ) + this += JustDeleteMeServiceListRoute.justDeleteMeActionOrNull( + translator = this@produceScreenState, + navigate = ::navigate, + ) + } + } + filterFlow + .map { filterState -> + WatchtowerState( + revision = filterState.rev, + content = Loadable.Ok(content), + filter = WatchtowerState.Filter( + items = filterState.items, + onClear = filterState.onClear, + ), + actions = actions, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/websiteleak/WebsiteLeakRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/websiteleak/WebsiteLeakRoute.kt new file mode 100644 index 00000000..00d6c858 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/websiteleak/WebsiteLeakRoute.kt @@ -0,0 +1,56 @@ +package com.artemchep.keyguard.feature.websiteleak + +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.FactCheck +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.navigation.DialogRoute +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.feature.navigation.state.TranslatorScope +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItemAction +import com.artemchep.keyguard.ui.icons.icon + +data class WebsiteLeakRoute( + val args: Args, +) : DialogRoute { + companion object { + fun checkBreachesWebsiteActionOrNull( + translator: TranslatorScope, + host: String, + navigate: (NavigationIntent) -> Unit, + ) = checkBreachesWebsiteAction( + translator = translator, + host = host, + navigate = navigate, + ) + + fun checkBreachesWebsiteAction( + translator: TranslatorScope, + host: String, + navigate: (NavigationIntent) -> Unit, + ) = FlatItemAction( + leading = icon(Icons.Outlined.FactCheck), + title = translator.translate(Res.strings.website_action_check_data_breach_title), + onClick = { + val route = WebsiteLeakRoute( + args = Args( + host = host, + ), + ) + val intent = NavigationIntent.NavigateToRoute(route) + navigate(intent) + }, + ) + } + + data class Args( + val host: String, + ) + + @Composable + override fun Content() { + WebsiteLeakScreen( + args = args, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/websiteleak/WebsiteLeakScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/websiteleak/WebsiteLeakScreen.kt new file mode 100644 index 00000000..4453a1cb --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/websiteleak/WebsiteLeakScreen.kt @@ -0,0 +1,272 @@ +package com.artemchep.keyguard.feature.websiteleak + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ColumnScope +import androidx.compose.foundation.layout.ExperimentalLayoutApi +import androidx.compose.foundation.layout.FlowRow +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.FactCheck +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.ProvideTextStyle +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.text.font.FontFamily +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.model.getOrNull +import com.artemchep.keyguard.common.usecase.NumberFormatter +import com.artemchep.keyguard.feature.dialog.Dialog +import com.artemchep.keyguard.feature.favicon.FaviconImage +import com.artemchep.keyguard.feature.home.vault.component.Section +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatItem +import com.artemchep.keyguard.ui.FlatSimpleNote +import com.artemchep.keyguard.ui.FlatTextFieldBadge +import com.artemchep.keyguard.ui.HtmlText +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.SimpleNote +import com.artemchep.keyguard.ui.icons.icon +import com.artemchep.keyguard.ui.poweredby.PoweredByHaveibeenpwned +import com.artemchep.keyguard.ui.skeleton.SkeletonText +import com.artemchep.keyguard.ui.theme.Dimens +import com.artemchep.keyguard.ui.theme.combineAlpha +import com.artemchep.keyguard.ui.theme.infoContainer +import com.artemchep.keyguard.ui.util.HorizontalDivider +import dev.icerock.moko.resources.compose.stringResource +import org.kodein.di.compose.rememberInstance + +@Composable +fun WebsiteLeakScreen( + args: WebsiteLeakRoute.Args, +) { + val loadableState = produceWebsiteLeakState( + args = args, + ) + Dialog( + icon = icon(Icons.Outlined.FactCheck), + title = { + Text(stringResource(Res.strings.emailleak_title)) + }, + content = { + Column { + Text( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding), + text = stringResource(Res.strings.emailleak_note), + style = MaterialTheme.typography.bodySmall, + color = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + ) + Spacer( + modifier = Modifier + .height(16.dp), + ) + + when (loadableState) { + is Loadable.Loading -> { + ContentSkeleton() + } + + is Loadable.Ok -> { + Content( + state = loadableState.value, + ) + } + } + + Spacer( + modifier = Modifier + .height(4.dp), + ) + + PoweredByHaveibeenpwned( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding) + .fillMaxWidth(), + ) + } + }, + contentScrollable = true, + actions = { + val updatedOnClose by rememberUpdatedState(loadableState.getOrNull()?.onClose) + TextButton( + enabled = updatedOnClose != null, + onClick = { + updatedOnClose?.invoke() + }, + ) { + Text(stringResource(Res.strings.close)) + } + }, + ) +} + +@Composable +private fun ColumnScope.ContentSkeleton() { + FlatItem( + title = { + SkeletonText( + modifier = Modifier + .fillMaxWidth(0.8f), + ) + }, + text = { + SkeletonText( + modifier = Modifier + .fillMaxWidth(0.6f), + ) + }, + enabled = true, + elevation = 1.dp, + ) +} + +@Composable +private fun ColumnScope.Content( + state: WebsiteLeakState, +) { + val leaks = state.content.breaches + if (leaks.isNotEmpty()) { + FlatSimpleNote( + type = SimpleNote.Type.WARNING, + title = stringResource(Res.strings.emailleak_breach_found_title), + ) + Section( + text = stringResource(Res.strings.emailleak_breach_section), + ) + } else { + FlatSimpleNote( + type = SimpleNote.Type.OK, + title = stringResource(Res.strings.emailleak_breach_not_found_title), + ) + } + leaks.forEachIndexed { index, item -> + if (index > 0) { + HorizontalDivider( + modifier = Modifier + .padding( + vertical = 16.dp, + ), + ) + } + + BreachItem( + modifier = Modifier + .padding( + horizontal = Dimens.horizontalPadding, + ), + item = item, + ) + } +} + +@OptIn(ExperimentalLayoutApi::class) +@Composable +private fun BreachItem( + modifier: Modifier = Modifier, + item: WebsiteLeakState.Breach, +) { + Column( + modifier = modifier, + verticalArrangement = Arrangement.spacedBy(8.dp), + ) { + Row( + verticalAlignment = Alignment.CenterVertically, + ) { + FaviconImage( + modifier = Modifier + .size(24.dp) + .clip(CircleShape), + imageModel = { item.icon }, + ) + Spacer( + modifier = Modifier + .width(16.dp), + ) + Column { + Text( + text = item.title, + style = MaterialTheme.typography.titleMedium, + ) + Text( + text = item.domain, + style = MaterialTheme.typography.bodyMedium, + color = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + fontFamily = FontFamily.Monospace, + ) + } + } + if (item.dataClasses.isNotEmpty()) { + FlowRow( + verticalArrangement = Arrangement.spacedBy(8.dp), + horizontalArrangement = Arrangement.spacedBy(8.dp), + ) { + item.dataClasses.forEach { dataClass -> + FlatTextFieldBadge( + backgroundColor = MaterialTheme.colorScheme.infoContainer, + text = dataClass, + ) + } + } + } + Column { + if (item.count != null) { + val numberFormatter: NumberFormatter by rememberInstance() + Text( + text = stringResource( + Res.plurals.emailleak_breach_accounts_count_plural, + item.count, + numberFormatter.formatNumber(item.count.toInt()), + ), + style = MaterialTheme.typography.labelSmall, + fontWeight = FontWeight.Black, + ) + } + if (item.occurredAt != null) { + Text( + text = stringResource( + Res.strings.emailleak_breach_occurred_at, + item.occurredAt, + ), + style = MaterialTheme.typography.labelSmall, + color = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + ) + } + if (item.reportedAt != null) { + Text( + text = stringResource( + Res.strings.emailleak_breach_reported_at, + item.reportedAt, + ), + style = MaterialTheme.typography.labelSmall, + color = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), + ) + } + } + ProvideTextStyle(MaterialTheme.typography.bodySmall) { + HtmlText( + html = item.description, + ) + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/websiteleak/WebsiteLeakState.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/websiteleak/WebsiteLeakState.kt new file mode 100644 index 00000000..add3a35d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/websiteleak/WebsiteLeakState.kt @@ -0,0 +1,29 @@ +package com.artemchep.keyguard.feature.websiteleak + +import androidx.compose.runtime.Immutable +import kotlinx.collections.immutable.ImmutableList + +@Immutable +data class WebsiteLeakState( + val content: Content, + val onClose: (() -> Unit)? = null, +) { + @Immutable + data class Content( + val breaches: ImmutableList, + ) + + @Immutable + data class Breach( + val title: String, + val domain: String, + val description: String, + val icon: String?, + val count: Int?, + /** Time when this breach has occurred */ + val occurredAt: String?, + /** Time when this breach was acknowledged */ + val reportedAt: String?, + val dataClasses: List, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/websiteleak/WebsiteLeakStateProducer.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/websiteleak/WebsiteLeakStateProducer.kt new file mode 100644 index 00000000..6fbf6e1e --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/websiteleak/WebsiteLeakStateProducer.kt @@ -0,0 +1,87 @@ +package com.artemchep.keyguard.feature.websiteleak + +import androidx.compose.runtime.Composable +import arrow.core.getOrElse +import com.artemchep.keyguard.common.io.attempt +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.service.hibp.breaches.all.BreachesRepository +import com.artemchep.keyguard.common.usecase.DateFormatter +import com.artemchep.keyguard.feature.navigation.state.navigatePopSelf +import com.artemchep.keyguard.feature.navigation.state.produceScreenState +import kotlinx.collections.immutable.toImmutableList +import kotlinx.coroutines.flow.flowOf +import kotlinx.datetime.LocalTime +import kotlinx.datetime.TimeZone +import kotlinx.datetime.atTime +import kotlinx.datetime.toInstant +import org.kodein.di.compose.localDI +import org.kodein.di.direct +import org.kodein.di.instance + +@Composable +fun produceWebsiteLeakState( + args: WebsiteLeakRoute.Args, +) = with(localDI().direct) { + produceWebsiteLeakState( + args = args, + breachesRepository = instance(), + dateFormatter = instance(), + ) +} + +@Composable +fun produceWebsiteLeakState( + args: WebsiteLeakRoute.Args, + breachesRepository: BreachesRepository, + dateFormatter: DateFormatter, +): Loadable = produceScreenState( + key = "website_leak", + initial = Loadable.Loading, + args = arrayOf(), +) { + val breaches2 = breachesRepository.get() + .attempt() + .bind() + val breach3 = breaches2 + .map { + it.breaches + .filter { + it.domain != null && + it.domain.isNotBlank() && + args.host.endsWith(it.domain) + } + .sortedByDescending { it.addedDate } + .map { leak -> + WebsiteLeakState.Breach( + title = leak.title.orEmpty(), + domain = leak.domain.orEmpty(), + icon = leak.logoPath.orEmpty(), + count = leak.pwnCount, + description = leak.description.orEmpty(), + occurredAt = leak.breachDate + ?.atTime(LocalTime.fromMillisecondOfDay(0)) + ?.toInstant(TimeZone.UTC) + ?.let(dateFormatter::formatDate), + reportedAt = leak.addedDate + ?.atTime(LocalTime.fromMillisecondOfDay(0)) + ?.toInstant(TimeZone.UTC) + ?.let(dateFormatter::formatDate), + dataClasses = leak.dataClasses, + ) + } + } + .getOrElse { emptyList() } + + val content = WebsiteLeakState.Content( + breaches = breach3 + .toImmutableList(), + ) + val state = WebsiteLeakState( + content = content, + onClose = { + navigatePopSelf() + }, + ) + flowOf(Loadable.Ok(state)) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/yubikey/YubiKey.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/yubikey/YubiKey.kt new file mode 100644 index 00000000..19d95f58 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/yubikey/YubiKey.kt @@ -0,0 +1,237 @@ +package com.artemchep.keyguard.feature.yubikey + +import androidx.compose.animation.Crossfade +import androidx.compose.animation.animateColorAsState +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.RowScope +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Nfc +import androidx.compose.material.icons.outlined.Usb +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.Icon +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.LocalTextStyle +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.State +import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.graphicsLayer +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.unit.dp +import arrow.core.Either +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.model.getOrNull +import com.artemchep.keyguard.common.model.map +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.DefaultEmphasisAlpha +import com.artemchep.keyguard.ui.DisabledEmphasisAlpha +import com.artemchep.keyguard.ui.ExpandedIfNotEmpty +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.theme.combineAlpha +import dev.icerock.moko.resources.compose.stringResource + +typealias OnYubiKeyListener = (Either) -> Unit + +@Composable +expect fun rememberYubiKey( + send: OnYubiKeyListener?, +): YubiKeyState + +@Composable +fun YubiKeyUsbCard( + modifier: Modifier = Modifier, + state: State>, +) { + val isEnabled by remember(state) { + derivedStateOf { + val isEnabled = state.value + .map { it.enabled } + .getOrNull() + isEnabled == true + } + } + val isActive by remember(state) { + derivedStateOf { + val isActive = state.value + .map { it.devices.isNotEmpty() } + .getOrNull() + isActive == true + } + } + YubiKeyCard( + modifier = modifier + .graphicsLayer { + alpha = if (isEnabled) 1f else DisabledEmphasisAlpha + }, + title = { + Text( + modifier = Modifier + .weight(1f), + text = stringResource(Res.strings.yubikey_usb_title), + ) + Spacer( + modifier = Modifier + .width(8.dp), + ) + val colorTarget = + if (isActive) MaterialTheme.colorScheme.primary else LocalContentColor.current + val color by animateColorAsState(colorTarget) + Icon( + Icons.Outlined.Usb, + modifier = Modifier + .align(Alignment.CenterVertically), + contentDescription = null, + tint = color, + ) + Spacer( + modifier = Modifier + .width(8.dp), + ) + }, + text = stringResource(Res.strings.yubikey_usb_text), + content = { + val isCapturing by remember(state) { + derivedStateOf { + val isCapturing = state.value + .map { it.capturing } + .getOrNull() + isCapturing == true + } + } + ExpandedIfNotEmpty( + Unit.takeIf { isActive }, + ) { + Row( + verticalAlignment = Alignment.CenterVertically, + ) { + Text( + modifier = Modifier + .weight(1f), + text = stringResource(Res.strings.yubikey_usb_touch_the_gold_sensor_note), + style = MaterialTheme.typography.labelMedium, + color = MaterialTheme.colorScheme.primary, + ) + Spacer( + modifier = Modifier + .width(8.dp), + ) + Crossfade( + modifier = Modifier + .size(24.dp), + targetState = isCapturing, + ) { capturing -> + if (capturing) { + CircularProgressIndicator() + } + } + Spacer( + modifier = Modifier + .width(8.dp), + ) + } + } + }, + ) +} + +@Composable +fun YubiKeyNfcCard( + modifier: Modifier = Modifier, + state: State>, +) { + val isEnabled by remember(state) { + derivedStateOf { + val isEnabled = state.value + .map { it.enabled } + .getOrNull() + isEnabled == true + } + } + YubiKeyCard( + modifier = modifier + .graphicsLayer { + alpha = if (isEnabled) 1f else DisabledEmphasisAlpha + }, + title = { + Text( + modifier = Modifier + .weight(1f), + text = stringResource(Res.strings.yubikey_nfc_title), + ) + Spacer( + modifier = Modifier + .width(8.dp), + ) + Icon( + Icons.Outlined.Nfc, + modifier = Modifier + .align(Alignment.CenterVertically), + contentDescription = null, + ) + Spacer( + modifier = Modifier + .width(8.dp), + ) + }, + text = stringResource(Res.strings.yubikey_nfc_text), + ) +} + +@Composable +private fun YubiKeyCard( + modifier: Modifier = Modifier, + title: @Composable RowScope.() -> Unit, + text: String, + content: (@Composable () -> Unit)? = null, +) { + Surface( + modifier = modifier, + shape = MaterialTheme.shapes.medium, + ) { + Column( + modifier = Modifier + .padding(8.dp), + ) { + val localEmphasis = DefaultEmphasisAlpha + val localTextStyle = TextStyle( + color = LocalContentColor.current + .combineAlpha(localEmphasis), + ) + + CompositionLocalProvider( + LocalTextStyle provides MaterialTheme.typography.titleMedium + .merge(localTextStyle), + ) { + Row { + title() + } + } + Spacer(modifier = Modifier.height(8.dp)) + Text( + text, + style = MaterialTheme.typography.bodyMedium + .merge(localTextStyle), + color = LocalContentColor.current + .combineAlpha(localEmphasis) + .combineAlpha(MediumEmphasisAlpha), + ) + if (content != null) { + Spacer(modifier = Modifier.height(8.dp)) + content() + } + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/yubikey/YubiKeyState.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/yubikey/YubiKeyState.kt new file mode 100644 index 00000000..5536c2eb --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/yubikey/YubiKeyState.kt @@ -0,0 +1,26 @@ +package com.artemchep.keyguard.feature.yubikey + +import androidx.compose.runtime.Immutable +import androidx.compose.runtime.Stable +import androidx.compose.runtime.State +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.platform.LeUsbPid +import kotlinx.collections.immutable.ImmutableSet + +@Immutable +data class YubiKeyUsbState( + val enabled: Boolean, + val capturing: Boolean, + val devices: ImmutableSet, +) + +@Immutable +data class YubiKeyNfcState( + val enabled: Boolean, +) + +@Stable +data class YubiKeyState( + val usbState: State>, + val nfcState: State>, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/yubikey/YubiRoute.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/yubikey/YubiRoute.kt new file mode 100644 index 00000000..3ca9761b --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/yubikey/YubiRoute.kt @@ -0,0 +1,11 @@ +package com.artemchep.keyguard.feature.yubikey + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.navigation.Route + +object YubiRoute : Route { + @Composable + override fun Content() { + YubiScreen() + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/yubikey/YubiScreen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/yubikey/YubiScreen.kt new file mode 100644 index 00000000..bd2c2e9c --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/feature/yubikey/YubiScreen.kt @@ -0,0 +1,171 @@ +package com.artemchep.keyguard.feature.yubikey + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.text.KeyboardOptions +import androidx.compose.material3.Button +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.runtime.Composable +import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.Modifier +import androidx.compose.ui.input.nestedscroll.nestedScroll +import androidx.compose.ui.text.input.KeyboardType +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.common.model.ToastMessage +import com.artemchep.keyguard.common.usecase.ShowMessage +import com.artemchep.keyguard.feature.auth.common.TextFieldModel2 +import com.artemchep.keyguard.feature.navigation.NavigationIcon +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.FlatTextField +import com.artemchep.keyguard.ui.ScaffoldColumn +import com.artemchep.keyguard.ui.grid.SimpleGridLayout +import com.artemchep.keyguard.ui.theme.Dimens +import com.artemchep.keyguard.ui.theme.horizontalPaddingHalf +import com.artemchep.keyguard.ui.toolbar.LargeToolbar +import com.artemchep.keyguard.ui.util.HorizontalDivider +import dev.icerock.moko.resources.compose.stringResource +import org.kodein.di.compose.rememberInstance + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun YubiScreen() { + val updatedShowMessage by run { + val showMessage: ShowMessage by rememberInstance() + rememberUpdatedState(showMessage) + } + val yubiKey = rememberYubiKey { event -> + val msg = event.fold( + ifLeft = { e -> + ToastMessage( + title = "Failed to receive YubiKey code", + text = e.message, + type = ToastMessage.Type.ERROR, + ) + }, + ifRight = { code -> + ToastMessage( + title = "Received YubiKey code", + text = code, + type = ToastMessage.Type.SUCCESS, + ) + }, + ) + updatedShowMessage.copy(msg) + } + + val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior() + ScaffoldColumn( + modifier = Modifier + .nestedScroll(scrollBehavior.nestedScrollConnection), + topAppBarScrollBehavior = scrollBehavior, + topBar = { + LargeToolbar( + title = { + Text("YubiKey") + }, + navigationIcon = { + NavigationIcon() + }, + scrollBehavior = scrollBehavior, + ) + }, + ) { + YubiKeyManual( + onSend = { + // Do nothing. + }, + ) + Spacer( + modifier = Modifier + .height(16.dp), + ) + HorizontalDivider() + Spacer( + modifier = Modifier + .height(16.dp), + ) + SimpleGridLayout( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPaddingHalf), + ) { + YubiKeyUsbCard( + state = yubiKey.usbState, + ) + YubiKeyNfcCard( + state = yubiKey.nfcState, + ) + } + } +} + +@Composable +fun YubiKeyManual( + modifier: Modifier = Modifier, + onSend: (String) -> Unit, +) { + Column( + modifier = modifier, + ) { + val textState = remember { + mutableStateOf("") + } + val fieldState = remember(textState) { + derivedStateOf { + TextFieldModel2( + state = textState, + onChange = textState::value::set, + ) + } + } + + Text( + modifier = Modifier + .padding(horizontal = Dimens.horizontalPadding), + text = stringResource(Res.strings.addaccount2fa_yubikey_manual_text), + style = MaterialTheme.typography.bodyMedium, + ) + Spacer( + modifier = Modifier + .height(16.dp), + ) + FlatTextField( + modifier = Modifier + .padding(horizontal = 16.dp), + label = stringResource(Res.strings.verification_code), + value = fieldState.value, + keyboardOptions = KeyboardOptions( + autoCorrect = true, + keyboardType = KeyboardType.Text, + ), + ) + Spacer( + modifier = Modifier + .height(16.dp), + ) + val enabled = remember(textState) { + derivedStateOf { + textState.value.isNotBlank() + } + } + val updatedOnSend by rememberUpdatedState(onSend) + Button( + modifier = Modifier + .padding(horizontal = 16.dp), + enabled = enabled.value, + onClick = { + updatedOnSend(textState.value) + }, + ) { + Text(stringResource(Res.strings.send)) + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/platform/LeActivity.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/platform/LeActivity.kt new file mode 100644 index 00000000..e34a4013 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/platform/LeActivity.kt @@ -0,0 +1,3 @@ +package com.artemchep.keyguard.platform + +expect class LeActivity diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/platform/LeAnimation.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/platform/LeAnimation.kt new file mode 100644 index 00000000..100eaf21 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/platform/LeAnimation.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.platform + +import androidx.compose.runtime.Composable + +@get:Composable +expect val LocalAnimationFactor: Float diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/platform/LeBundle.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/platform/LeBundle.kt new file mode 100644 index 00000000..ef530efe --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/platform/LeBundle.kt @@ -0,0 +1,11 @@ +package com.artemchep.keyguard.platform + +expect class LeBundle + +expect operator fun LeBundle.contains(key: String): Boolean + +expect operator fun LeBundle.get(key: String): Any? + +expect fun leBundleOf( + vararg map: Pair, +): LeBundle diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/platform/LeCipher.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/platform/LeCipher.kt new file mode 100644 index 00000000..fb7b228a --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/platform/LeCipher.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.platform + +expect class LeCipher + +expect val LeCipher.leIv: ByteArray diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/platform/LeContext.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/platform/LeContext.kt new file mode 100644 index 00000000..250b4b51 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/platform/LeContext.kt @@ -0,0 +1,8 @@ +package com.artemchep.keyguard.platform + +import androidx.compose.runtime.Composable + +expect class LeContext + +@get:Composable +expect val LocalLeContext: LeContext diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/platform/LeCrashlytics.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/platform/LeCrashlytics.kt new file mode 100644 index 00000000..841bff65 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/platform/LeCrashlytics.kt @@ -0,0 +1,13 @@ +package com.artemchep.keyguard.platform + +import kotlinx.coroutines.flow.Flow + +expect fun recordException(e: Throwable) + +expect fun recordLog(message: String) + +expect fun crashlyticsIsEnabled(): Boolean? + +expect fun crashlyticsIsEnabledFlow(): Flow + +expect fun crashlyticsSetEnabled(enabled: Boolean?) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/platform/LeDebug.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/platform/LeDebug.kt new file mode 100644 index 00000000..05e289c3 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/platform/LeDebug.kt @@ -0,0 +1,8 @@ +package com.artemchep.keyguard.platform + +/** + * `true` if the app is not for the app store, so it + * should not contain subscriptions, `false` if the app + * is for the app store. + */ +expect val isStandalone: Boolean diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/platform/LePlatform.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/platform/LePlatform.kt new file mode 100644 index 00000000..87745ac0 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/platform/LePlatform.kt @@ -0,0 +1,18 @@ +package com.artemchep.keyguard.platform + +expect val CurrentPlatform: Platform + +sealed interface Platform { + sealed interface Mobile : Platform { + data class Android( + val isChromebook: Boolean, + ) : Mobile + } + + sealed interface Desktop : Platform { + data object Linux : Desktop + data object Windows : Desktop + data object MacOS : Desktop + data object Other : Desktop + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/platform/LeUri.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/platform/LeUri.kt new file mode 100644 index 00000000..7eb3aae2 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/platform/LeUri.kt @@ -0,0 +1,9 @@ +package com.artemchep.keyguard.platform + +import java.io.File + +expect abstract class LeUri + +expect fun leParseUri(uri: String): LeUri + +expect fun leParseUri(file: File): LeUri diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/platform/LeUsbPid.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/platform/LeUsbPid.kt new file mode 100644 index 00000000..30637672 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/platform/LeUsbPid.kt @@ -0,0 +1,3 @@ +package com.artemchep.keyguard.platform + +expect enum class LeUsbPid diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/platform/LeWindowInsets.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/platform/LeWindowInsets.kt new file mode 100644 index 00000000..62032a82 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/platform/LeWindowInsets.kt @@ -0,0 +1,19 @@ +package com.artemchep.keyguard.platform + +import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.runtime.Composable + +@get:Composable +expect val WindowInsets.Companion.leIme: WindowInsets + +@get:Composable +expect val WindowInsets.Companion.leNavigationBars: WindowInsets + +@get:Composable +expect val WindowInsets.Companion.leStatusBars: WindowInsets + +@get:Composable +expect val WindowInsets.Companion.leSystemBars: WindowInsets + +@get:Composable +expect val WindowInsets.Companion.leDisplayCutout: WindowInsets diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/platform/lifecycle/LeLifecycleExt.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/platform/lifecycle/LeLifecycleExt.kt new file mode 100644 index 00000000..3122710a --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/platform/lifecycle/LeLifecycleExt.kt @@ -0,0 +1,39 @@ +package com.artemchep.keyguard.platform.lifecycle + +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.coroutineScope +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.emptyFlow +import kotlinx.coroutines.flow.flatMapLatest +import kotlinx.coroutines.flow.flow +import kotlinx.coroutines.flow.map + +fun Flow.flowWithLifecycle( + lifecycleStateFlow: Flow, + minActiveState: LeLifecycleState = LeLifecycleState.STARTED, +): Flow = lifecycleStateFlow + .map { lifecycleState -> + lifecycleState >= minActiveState + } + .distinctUntilChanged() + // Collect the underlying flow when the lifecycle + // is in an active state. + .flatMapLatest { shouldBeActive -> + if (shouldBeActive) { + this + } else { + emptyFlow() + } + } + +fun Flow.onState( + minActiveState: LeLifecycleState = LeLifecycleState.STARTED, + block: suspend CoroutineScope.() -> Unit, +) = run { + val flow = flow { + coroutineScope(block) + } + flow + .flowWithLifecycle(this, minActiveState = minActiveState) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/platform/lifecycle/LeLifecycleProvider.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/platform/lifecycle/LeLifecycleProvider.kt new file mode 100644 index 00000000..f4324703 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/platform/lifecycle/LeLifecycleProvider.kt @@ -0,0 +1,7 @@ +package com.artemchep.keyguard.platform.lifecycle + +import androidx.compose.runtime.Composable +import kotlinx.coroutines.flow.StateFlow + +@get:Composable +expect val LocalLifecycleStateFlow: StateFlow diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/platform/lifecycle/LeLifecycleState.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/platform/lifecycle/LeLifecycleState.kt new file mode 100644 index 00000000..e7e62ed7 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/platform/lifecycle/LeLifecycleState.kt @@ -0,0 +1,9 @@ +package com.artemchep.keyguard.platform.lifecycle + +enum class LeLifecycleState { + DESTROYED, + INITIALIZED, + CREATED, + STARTED, + RESUMED, +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/platform/parcelize/LeIgnoredOnParcel.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/platform/parcelize/LeIgnoredOnParcel.kt new file mode 100644 index 00000000..79aa01af --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/platform/parcelize/LeIgnoredOnParcel.kt @@ -0,0 +1,9 @@ +package com.artemchep.keyguard.platform.parcelize + +/** + * The property annotated with [LeIgnoredOnParcel] + * will not be stored into parcel. + */ +@Target(AnnotationTarget.PROPERTY) +@Retention(AnnotationRetention.SOURCE) +expect annotation class LeIgnoredOnParcel() diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/platform/parcelize/LeParcelable.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/platform/parcelize/LeParcelable.kt new file mode 100644 index 00000000..dbdd6a89 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/platform/parcelize/LeParcelable.kt @@ -0,0 +1,3 @@ +package com.artemchep.keyguard.platform.parcelize + +expect interface LeParcelable diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/platform/parcelize/LeParcelize.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/platform/parcelize/LeParcelize.kt new file mode 100644 index 00000000..77ced9e1 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/platform/parcelize/LeParcelize.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.platform.parcelize + +@Target(AnnotationTarget.CLASS) +@Retention(AnnotationRetention.BINARY) +expect annotation class LeParcelize() diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/platform/util/hasAutofill.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/platform/util/hasAutofill.kt new file mode 100644 index 00000000..8abf6ea1 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/platform/util/hasAutofill.kt @@ -0,0 +1,10 @@ +package com.artemchep.keyguard.platform.util + +import com.artemchep.keyguard.platform.Platform + +fun Platform.hasAutofill(): Boolean = + this is Platform.Mobile.Android && + !this.isChromebook + +fun Platform.hasSubscription(): Boolean = + this is Platform.Mobile.Android diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/platform/util/isRelease.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/platform/util/isRelease.kt new file mode 100644 index 00000000..5a98f302 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/platform/util/isRelease.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.platform.util + +import com.artemchep.keyguard.build.BuildKonfig + +val isRelease: Boolean = BuildKonfig.buildType.lowercase() == "release" diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/CreatePasskeyRequest.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/CreatePasskeyRequest.kt new file mode 100644 index 00000000..7050a207 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/CreatePasskeyRequest.kt @@ -0,0 +1,140 @@ +package com.artemchep.keyguard.provider.bitwarden + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class AuthenticatorAssertionClientData( + val type: String, // webauthn.get + // base64 + val challenge: String, + val origin: String, + /** + * Android app package name, if the app + * does exist. + */ + val androidPackageName: String? = null, +) + +@Serializable +data class AuthenticatorAssertion( + // base64 + val clientDataJSON: String, + // base64 + val authenticatorData: String, + val signature: String, + val userHandle: String, + val publicKeyAlgorithm: Int, + val publicKey: String, +) + +// See: +// https://webauthn.guide/ + +@Serializable +enum class CreatePasskeyAttestation { + /** + * Means that the server wishes to receive + * the attestation data from the authenticator. + */ + @SerialName("direct") + DIRECT, + + @SerialName("enterprise") + ENTERPRISE, + + /** + * Means that the server will allow for anonymized attestation data. + */ + @SerialName("indirect") + INDIRECT, + + /** + * Indicates that the server does not care about attestation. + */ + @SerialName("none") + NONE, +} + +@Serializable +data class CreatePasskeyRelyingParty( + val id: String? = null, + val name: String, +) + +@Serializable +data class CreatePasskeyUser( + // base64 + val id: String, + val name: String, + val displayName: String, +) + +@Serializable +data class CreatePasskeyPubKeyCredParams( + // https://www.iana.org/assignments/cose/cose.xhtml#algorithms + val alg: Int, + val type: String, +) + +// https://www.w3.org/TR/webauthn-2/#dictionary-authenticatorSelection +@Serializable +data class CreatePasskeyAuthenticatorSelection( + val residentKey: String = "discouraged", + val requireResidentKey: Boolean = residentKey == "required", +) + +/* + * { + * "attestation":"none", + * "authenticatorSelection":{ + * "authenticatorAttachment":"platform", + * "requireResidentKey":false, + * "residentKey":"required", + * "userVerification":"required" + * }, + * "challenge":"t2cLubF-1PFSjgNAkyZwqC_aooWQUyBcjEDSj56wJKA", + * "excludeCredentials":[], + * "pubKeyCredParams":[ + * {"alg":-7,"type":"public-key"} + * ], + * "rp":{ + * "id":"dashlanepasskeydemo.com", + * "name":"Dashlane Passkey Demo" + * }, + * "timeout":1800000, + * "user":{ + * "displayName":"artemchep@gmail.com", + * "id":"ab4ad29c-e435-45cb-995b-9a36600e0f85", + * "name":"artemchep@gmail.com" + * } + * } + */ +@Serializable +data class CreatePasskey( + // TODO: Make it fall back to none + val attestation: CreatePasskeyAttestation? = CreatePasskeyAttestation.NONE, + val authenticatorSelection: CreatePasskeyAuthenticatorSelection = CreatePasskeyAuthenticatorSelection(), + /** + * The challenge is a buffer of cryptographically random bytes generated + * on the server, and is needed to prevent "replay attacks". + */ + // base64 + val challenge: String, + val pubKeyCredParams: List, + /** + * Describing the organization responsible + * for registering and authenticating the user. + */ + val rp: CreatePasskeyRelyingParty, + /** + * This is information about the user currently registering. + * The authenticator uses the id to associate a credential with the user. + */ + val user: CreatePasskeyUser, + /** + * The time (in milliseconds) that the user has to respond + * to a prompt for registration before an error is returned. + */ + val timeout: Long? = null, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/ServerEnv.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/ServerEnv.kt new file mode 100644 index 00000000..3866aa99 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/ServerEnv.kt @@ -0,0 +1,43 @@ +package com.artemchep.keyguard.provider.bitwarden + +import arrow.optics.optics +import com.artemchep.keyguard.res.Res +import dev.icerock.moko.resources.StringResource + +@optics +data class ServerEnv( + val baseUrl: String = "", + val webVaultUrl: String = "", + val apiUrl: String = "", + val identityUrl: String = "", + val iconsUrl: String = "", + val notificationsUrl: String = "", + val region: Region = Region.default, + val headers: List = emptyList(), +) { + companion object; + + enum class Region( + val title: StringResource, + val text: String, + ) { + US(Res.strings.addaccount_region_us_type, "bitwarden.com"), + EU(Res.strings.addaccount_region_eu_type, "bitwarden.eu"), + ; + + companion object { + val default get() = US + + // Must not collide with any of the + // region names! + val selfhosted get() = "selfhosted" + } + } +} + +data class ServerHeader( + val key: String, + val value: String, +) { + companion object +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/ServerTwoFactorToken.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/ServerTwoFactorToken.kt new file mode 100644 index 00000000..52ebca67 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/ServerTwoFactorToken.kt @@ -0,0 +1,13 @@ +package com.artemchep.keyguard.provider.bitwarden + +import arrow.optics.optics +import com.artemchep.keyguard.provider.bitwarden.model.TwoFactorProviderType + +@optics +data class ServerTwoFactorToken( + val token: String, + val provider: TwoFactorProviderType, + val remember: Boolean = false, +) { + companion object +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/api/SyncEngine.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/api/SyncEngine.kt new file mode 100644 index 00000000..2b1274b2 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/api/SyncEngine.kt @@ -0,0 +1,1081 @@ +package com.artemchep.keyguard.provider.bitwarden.api + +import com.artemchep.keyguard.common.exception.HttpException +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.service.crypto.CipherEncryptor +import com.artemchep.keyguard.common.service.crypto.CryptoGenerator +import com.artemchep.keyguard.common.service.logging.LogRepository +import com.artemchep.keyguard.common.service.text.Base64Service +import com.artemchep.keyguard.core.store.DatabaseManager +import com.artemchep.keyguard.core.store.DatabaseSyncer +import com.artemchep.keyguard.core.store.bitwarden.BitwardenCipher +import com.artemchep.keyguard.core.store.bitwarden.BitwardenCollection +import com.artemchep.keyguard.core.store.bitwarden.BitwardenFolder +import com.artemchep.keyguard.core.store.bitwarden.BitwardenOrganization +import com.artemchep.keyguard.core.store.bitwarden.BitwardenProfile +import com.artemchep.keyguard.core.store.bitwarden.BitwardenSend +import com.artemchep.keyguard.core.store.bitwarden.BitwardenService +import com.artemchep.keyguard.core.store.bitwarden.BitwardenToken +import com.artemchep.keyguard.data.Database +import com.artemchep.keyguard.platform.recordException +import com.artemchep.keyguard.provider.bitwarden.api.builder.api +import com.artemchep.keyguard.provider.bitwarden.api.builder.create +import com.artemchep.keyguard.provider.bitwarden.api.builder.delete +import com.artemchep.keyguard.provider.bitwarden.api.builder.get +import com.artemchep.keyguard.provider.bitwarden.api.builder.post +import com.artemchep.keyguard.provider.bitwarden.api.builder.put +import com.artemchep.keyguard.provider.bitwarden.api.builder.restore +import com.artemchep.keyguard.provider.bitwarden.api.builder.sync +import com.artemchep.keyguard.provider.bitwarden.api.builder.trash +import com.artemchep.keyguard.provider.bitwarden.api.entity.SyncResponse +import com.artemchep.keyguard.provider.bitwarden.crypto.BitwardenCr +import com.artemchep.keyguard.provider.bitwarden.crypto.BitwardenCrCta +import com.artemchep.keyguard.provider.bitwarden.crypto.BitwardenCrImpl +import com.artemchep.keyguard.provider.bitwarden.crypto.BitwardenCrKey +import com.artemchep.keyguard.provider.bitwarden.crypto.appendOrganizationToken +import com.artemchep.keyguard.provider.bitwarden.crypto.appendProfileToken +import com.artemchep.keyguard.provider.bitwarden.crypto.appendSendToken +import com.artemchep.keyguard.provider.bitwarden.crypto.appendUserToken +import com.artemchep.keyguard.provider.bitwarden.crypto.encrypted +import com.artemchep.keyguard.provider.bitwarden.crypto.transform +import com.artemchep.keyguard.provider.bitwarden.entity.CipherEntity +import com.artemchep.keyguard.provider.bitwarden.entity.CollectionEntity +import com.artemchep.keyguard.provider.bitwarden.entity.FolderEntity +import com.artemchep.keyguard.provider.bitwarden.entity.OrganizationEntity +import com.artemchep.keyguard.provider.bitwarden.entity.SyncProfile +import com.artemchep.keyguard.provider.bitwarden.entity.SyncSends +import com.artemchep.keyguard.provider.bitwarden.entity.request.CipherUpdate +import com.artemchep.keyguard.provider.bitwarden.entity.request.FolderUpdate +import com.artemchep.keyguard.provider.bitwarden.entity.request.of +import com.artemchep.keyguard.provider.bitwarden.sync.SyncManager +import io.ktor.client.HttpClient +import io.ktor.client.call.NoTransformationFoundException +import kotlinx.datetime.Clock +import kotlinx.datetime.Instant +import kotlin.RuntimeException +import kotlin.String +import kotlin.TODO +import kotlin.Throwable +import kotlin.Unit +import kotlin.apply +import kotlin.let +import kotlin.require +import kotlin.requireNotNull +import kotlin.takeIf +import kotlin.to + +class SyncEngine( + private val httpClient: HttpClient, + private val dbManager: DatabaseManager, + private val base64Service: Base64Service, + private val cryptoGenerator: CryptoGenerator, + private val cipherEncryptor: CipherEncryptor, + private val logRepository: LogRepository, + private val user: BitwardenToken, + private val syncer: DatabaseSyncer, +) { + companion object { + private const val TAG = "SyncEngine" + } + + class EmptyVaultException(message: String) : RuntimeException(message) + + class DecodeVaultException(message: String, e: Throwable) : RuntimeException(message, e) + + suspend fun sync() = kotlin.run { + val env = user.env.back() + val api = env.api + val token = requireNotNull(user.token).accessToken + + val response = api.sync( + httpClient = httpClient, + env = env, + token = token, + ) + val db = dbManager.get().bind() + + // There's a bug in the web vault that sometimes displays a + // user empty vault. This check logs these kind of events, I need + // it to know if that's what once caused a user sync to completely + // empty vault. + if ( + response.ciphers.isNullOrEmpty() && + response.folders.isNullOrEmpty() + ) { + val existingCiphers = db.cipherQueries + .getByAccountId(user.id) + .executeAsList() + if (existingCiphers.isNotEmpty()) { + val isSelfHosted = env.webVaultUrl.isNotBlank() + val isUnofficial = response.unofficialServer == true + + val m = "Backend returned empty cipher list, while there's " + + "${existingCiphers.size} ciphers in the local storage: " + + "official=${!isUnofficial}, self-hosted=${isSelfHosted}" + val e = EmptyVaultException(m) + recordException(e) + } + } + + val now = Clock.System.now() + val crypto = crypto( + profile = response.profile, + sends = response.sends.orEmpty(), + ) + + fun getCodec( + mode: BitwardenCrCta.Mode, + organizationId: String? = null, + sendId: String? = null, + ) = kotlin.run { + val envEncryptionType = CipherEncryptor.Type.AesCbc256_HmacSha256_B64 + val env = if (sendId != null) { + val key = BitwardenCrKey.SendToken(sendId) + BitwardenCrCta.BitwardenCrCtaEnv( + key = key, + encryptionType = CipherEncryptor.Type.AesCbc256_B64, + ) + } else if (organizationId != null) { + val key = BitwardenCrKey.OrganizationToken(organizationId) + BitwardenCrCta.BitwardenCrCtaEnv( + key = key, + encryptionType = envEncryptionType, + ) + } else { + val key = BitwardenCrKey.UserToken + BitwardenCrCta.BitwardenCrCtaEnv( + key = key, + encryptionType = envEncryptionType, + ) + } + crypto.cta( + env = env, + mode = mode, + ) + } + + // + // Profile + // + + val newProfile = BitwardenProfile + .encrypted( + accountId = user.id, + entity = response.profile, + unofficialServer = response.unofficialServer == true, + ) + .transform( + crypto = getCodec( + mode = BitwardenCrCta.Mode.DECRYPT, + ), + ) + syncer.withLock(DatabaseSyncer.Key.Profile(response.profile.id)) { + val profileDao = db.profileQueries + + // Check the security timestamp. + val existingProfile = profileDao + .getByAccountId( + accountId = user.id, + ) + .executeAsOneOrNull() + ?.takeIf { it.profileId == response.profile.id } + if (existingProfile != null) { + val existingSecurityStamp = existingProfile.data_.securityStamp + require(existingSecurityStamp == response.profile.securityStamp) { + "Local security stamp differs from a remote one. " + + "You might be in a man-in-the-middle attack!" + } + } + + // Insert updated profile. + if (existingProfile?.data_ != newProfile) { + profileDao.insert( + profileId = newProfile.profileId, + accountId = newProfile.accountId, + data = newProfile, + ) + } + } + + // + // Folder + // + + fun BitwardenCrCta.folderDecoder( + entity: FolderEntity, + localFolderId: String?, + ) = kotlin.run { + val folderId = localFolderId + ?: cryptoGenerator.uuid() + BitwardenFolder + .encrypted( + accountId = user.id, + folderId = folderId, + entity = entity, + ) + .transform(this) + } + + val folderDao = db.folderQueries + val existingFolders = folderDao + .getByAccountId( + accountId = user.id, + ) + .executeAsList() + .map { it.data_ } + syncX( + name = "folder", + localItems = existingFolders, + localLens = SyncManager.LensLocal( + getLocalId = { it.folderId }, + getLocalRevisionDate = { it.revisionDate }, + ), + localReEncoder = { model -> + model + }, + localDecoder = { local, remote -> + val encryptor = getCodec( + mode = BitwardenCrCta.Mode.ENCRYPT, + ) + val encryptedFolder = local.transform(encryptor) + FolderUpdate.of( + model = encryptedFolder, + ) to local + }, + localDeleteById = { ids -> + folderDao.transaction { + ids.forEach { folderId -> + folderDao.deleteByFolderId( + folderId = folderId, + ) + } + } + }, + localPut = { models -> + folderDao.transaction { + models.forEach { folder -> + folderDao.insert( + folderId = folder.folderId, + accountId = folder.accountId, + data = folder, + ) + } + } + }, + remoteItems = response.folders.orEmpty(), + remoteLens = SyncManager.Lens( + getId = { it.id }, + getRevisionDate = { it.revisionDate }, + ), + remoteDecoder = { remote, local -> + val codec = getCodec( + mode = BitwardenCrCta.Mode.DECRYPT, + ) + codec + .folderDecoder( + entity = remote, + localFolderId = local?.folderId, + ) + }, + remoteDeleteById = { id -> + user.env.back().api.folders.delete( + httpClient = httpClient, + env = env, + token = user.token.accessToken, + id = id, + ) + }, + remoteDecodedFallback = { remote, localOrNull, e -> + val logObj = mapOf( + // this should include the encryption type + "name" to remote.name.take(2), + ) + val logE = DecodeVaultException( + message = "Failed to decrypt a folder. Structure: $logObj", + e = e, + ) + recordException(logE) + + val localId = localOrNull?.folderId + ?: cryptoGenerator.uuid() + val service = BitwardenService( + remote = BitwardenService.Remote( + id = remote.id, + revisionDate = remote.revisionDate, + deletedDate = null, + ), + error = BitwardenService.Error( + code = BitwardenService.Error.CODE_DECODING_FAILED, + revisionDate = now, + ), + deleted = false, + version = BitwardenService.VERSION, + ) + val model = BitwardenFolder( + accountId = user.id, + folderId = localId, + revisionDate = remote.revisionDate, + service = service, + name = "⚠️ Unsupported Folder", + ) + model + }, + remotePut = { (update, local) -> + require(update.source.folderId == local.folderId) + val folderApi = user.env.back().api.folders + val folderResponse = when (update) { + is FolderUpdate.Create -> + folderApi.post( + httpClient = httpClient, + env = env, + token = user.token.accessToken, + body = update.folderRequest, + ) + + is FolderUpdate.Modify -> + folderApi.put( + httpClient = httpClient, + env = env, + token = user.token.accessToken, + id = update.folderId, + body = update.folderRequest, + ) + } + val codec = getCodec( + mode = BitwardenCrCta.Mode.DECRYPT, + ) + codec + .folderDecoder( + entity = folderResponse, + localFolderId = update.source.folderId, + ) + }, + onLog = { msg, logLevel -> + logRepository.post(TAG, "[SyncFolder] $msg", logLevel) + }, + ) + + val folder1 = folderDao.get().executeAsList() + val localToRemoteFolders = folder1 + .associate { folder -> + val remoteId = folder.data_.service.remote?.id + val localId = folder.data_.folderId + localId to remoteId + } + val remoteToLocalFolders = folder1 + .mapNotNull { folder -> + val remoteId = folder.data_.service.remote?.id + ?: return@mapNotNull null + val localId = folder.data_.folderId + remoteId to localId + } + .toMap() + + // + // Cipher + // + + fun BitwardenCrCta.cipherDecoder( + entity: CipherEntity, + localCipherId: String?, + ) = kotlin.run { + val folderId = entity.folderId + ?.let { remoteFolderId -> + val localFolderId = remoteToLocalFolders[remoteFolderId] + if (localFolderId != null) return@let localFolderId + + val folderExists = response.folders + .orEmpty() + .any { it.id == remoteFolderId } + if (folderExists) { + // TODO: The folder exists, but we failed to create an + // entry for it... this should not happen, but if it does + // then try to decode the object without a folder and then + // declare model as incomplete. + } + + // Remove folder from the cipher. + null + } + val cipherId = localCipherId + ?: cryptoGenerator.uuid() + BitwardenCipher + .encrypted( + accountId = user.id, + cipherId = cipherId, + folderId = folderId, + entity = entity, + ) + .transform(this) + } + + val cipherDao = db.cipherQueries + val existingCipher = cipherDao + .getByAccountId( + accountId = user.id, + ) + .executeAsList() + .map { it.data_ } + syncX( + name = "cipher", + localItems = existingCipher, + localLens = SyncManager.LensLocal( + getLocalId = { it.cipherId }, + getLocalRevisionDate = { cipher -> cipher.revisionDate }, + getLocalDeletedDate = { cipher -> cipher.deletedDate }, + ), + localReEncoder = { model -> + model + }, + localDecoder = { local, remote -> + val codec = getCodec( + mode = BitwardenCrCta.Mode.ENCRYPT, + organizationId = local.organizationId, + ) + val encryptedCipher = local.transform(codec) + CipherUpdate.of( + model = encryptedCipher, + folders = localToRemoteFolders, + ) to local + }, + localDeleteById = { ids -> + cipherDao.transaction { + ids.forEach { cipherId -> + cipherDao.deleteByCipherId( + cipherId = cipherId, + ) + } + } + }, + localPut = { models -> + cipherDao.transaction { + models.forEach { cipher -> + cipherDao.insert( + cipherId = cipher.cipherId, + accountId = cipher.accountId, + folderId = cipher.folderId, + data = cipher, + ) + } + } + }, + shouldOverwrite = { local, remote -> + val remoteAttachments = remote.attachments + .orEmpty() + // fast path: + if (local.attachments.size != remoteAttachments.size) { + return@syncX true + } + + // slow path: + val localAttachmentIds = local.attachments + .asSequence() + .map { it.id } + .toSet() + val remoteAttachmentIds = remoteAttachments + .asSequence() + .map { it.id } + .toSet() + if (!localAttachmentIds.containsAll(remoteAttachmentIds)) { + return@syncX true + } + + false + }, + remoteItems = response.ciphers.orEmpty(), + remoteLens = SyncManager.Lens( + getId = { it.id }, + getRevisionDate = { cipher -> cipher.revisionDate }, + getDeletedDate = { cipher -> cipher.deletedDate }, + ), + remoteDecoder = { remote, local -> + val codec = getCodec( + mode = BitwardenCrCta.Mode.DECRYPT, + organizationId = remote.organizationId, + ) + codec + .cipherDecoder( + entity = remote, + localCipherId = local?.cipherId, + ) + .let { remoteDecoded -> + // inject the local model into newly decoded remote one + local?.let { merge(remoteDecoded, it) } ?: remoteDecoded + } + }, + remoteDeleteById = { id -> + user.env.back().api.ciphers.focus(id).delete( + httpClient = httpClient, + env = env, + token = user.token.accessToken, + ) + }, + remoteDecodedFallback = { remote, localOrNull, e -> + val logObj = mapOf( + // this should include the encryption type + "name" to remote.name?.take(2), + ) + val logE = DecodeVaultException( + message = "Failed to decrypt a cipher. Structure: $logObj", + e = e, + ) + recordException(logE) + + val localId = localOrNull?.cipherId + ?: cryptoGenerator.uuid() + val folderId = remote.folderId?.let { remoteToLocalFolders[it] } + val service = BitwardenService( + remote = BitwardenService.Remote( + id = remote.id, + revisionDate = remote.revisionDate, + deletedDate = remote.deletedDate, + ), + error = BitwardenService.Error( + code = BitwardenService.Error.CODE_DECODING_FAILED, + revisionDate = now, + ), + deleted = false, + version = BitwardenService.VERSION, + ) + val model = BitwardenCipher( + accountId = user.id, + cipherId = localId, + folderId = folderId, + organizationId = remote.organizationId, + revisionDate = remote.revisionDate, + deletedDate = remote.deletedDate, + // service fields + service = service, + // common + name = "⚠️ Unsupported Item", + notes = null, + favorite = false, + reprompt = BitwardenCipher.RepromptType.None, + // types + type = BitwardenCipher.Type.Card, + ) + localOrNull?.let { merge(model, it) } ?: model + }, + remotePut = { (r, local) -> + val ciphersApi = user.env.back().api.ciphers + val cipherResponse = when (r) { + is CipherUpdate.Modify -> { + val cipherApi = ciphersApi.focus(r.cipherId) + var cipherRequest = r.cipherRequest + + fun handleIntermediateResponse(cipherEntity: CipherEntity) { + cipherRequest = r.cipherRequest.copy( + lastKnownRevisionDate = cipherEntity.revisionDate, + ) + + // We might loose local changes here if the next request fails, so + // save the data in that case. + updateRemoteModel(cipherEntity) + } + + val isTrashed = r.source.deletedDate != null + val wasTrashed = r.source.service.remote?.deletedDate != null + val hasChanged = + r.source.service.remote?.revisionDate != r.source.revisionDate + if (isTrashed != wasTrashed || hasChanged) { + // Due to Bitwarden API restrictions you can not modify + // trashed items: first we have to restore them. + if (wasTrashed) { + val restoredCipher = cipherApi.restore( + httpClient = httpClient, + env = env, + token = user.token.accessToken, + cipherRequest = cipherRequest, + ) + handleIntermediateResponse(restoredCipher) + } + + val putCipher = if (hasChanged) { + cipherApi.put( + httpClient = httpClient, + env = env, + token = user.token.accessToken, + body = cipherRequest, + ) + } else { + null + } + + if (isTrashed) { + if (putCipher != null) handleIntermediateResponse(putCipher) + try { + cipherApi.trash( + httpClient = httpClient, + env = env, + token = user.token.accessToken, + ) + } catch (e: HttpException) { + // Trashing a cipher returns no body. + if (e.cause !is NoTransformationFoundException) { + throw e + } + } + } + } + + cipherApi.get( + httpClient = httpClient, + env = env, + token = user.token.accessToken, + ) + } + + is CipherUpdate.Create -> { + require(r.cipherRequest.organizationId == null) { + "To create a cipher in the organization, you must use a special API call." + } + ciphersApi.post( + httpClient = httpClient, + env = env, + token = user.token.accessToken, + body = r.cipherRequest, + ) + } + + is CipherUpdate.CreateInOrg -> { + require(r.cipherRequest.cipher.organizationId != null) { + "To create a cipher in the user's vault, you must use a special API call." + } + ciphersApi.create( + httpClient = httpClient, + env = env, + token = user.token.accessToken, + body = r.cipherRequest, + ) + } + } + + val codec = getCodec( + mode = BitwardenCrCta.Mode.DECRYPT, + organizationId = r.source.organizationId, + ) + codec + .cipherDecoder( + entity = cipherResponse, + localCipherId = r.source.cipherId, + ) + .let { remoteDecoded -> + // inject the local model into newly decoded remote one + merge(remoteDecoded, r.source) + } + }, + onLog = { msg, logLevel -> + logRepository.post(TAG, msg, logLevel) + }, + ) + + // + // Collection + // + + fun BitwardenCrCta.collectionDecoder( + entity: CollectionEntity, + ) = kotlin.run { + BitwardenCollection + .encrypted( + accountId = user.id, + entity = entity, + ) + .transform(this) + } + + val collectionDao = db.collectionQueries + val existingCollections = collectionDao + .getByAccountId( + accountId = user.id, + ) + .executeAsList() + .map { it.data_ } + syncX( + name = "collection", + localItems = existingCollections, + localLens = SyncManager.LensLocal( + getLocalId = { it.collectionId }, + getLocalRevisionDate = { it.revisionDate }, + ), + localReEncoder = { model -> + model + }, + localDecoder = { l, d -> + Unit + }, + localDeleteById = { ids -> + collectionDao.transaction { + ids.forEach { collectionId -> + collectionDao.deleteByCollectionId( + collectionId = collectionId, + ) + } + } + }, + localPut = { models -> + collectionDao.transaction { + models.forEach { collection -> + collectionDao.insert( + collectionId = collection.collectionId, + accountId = collection.accountId, + data = collection, + ) + } + } + }, + remoteItems = response.collections.orEmpty(), + remoteLens = SyncManager.Lens( + getId = { it.id }, + getRevisionDate = { Instant.DISTANT_FUTURE }, + ), + remoteDecoder = { remote, local -> + val codec = getCodec( + mode = BitwardenCrCta.Mode.DECRYPT, + organizationId = remote.organizationId, + ) + codec + .collectionDecoder( + entity = remote, + ) + }, + remoteDeleteById = { id -> + TODO() + }, + remoteDecodedFallback = { remote, localOrNull, e -> + val logE = DecodeVaultException( + message = "Failed to decrypt a collection.", + e = e, + ) + recordException(logE) + + val service = BitwardenService( + remote = BitwardenService.Remote( + id = remote.id, + revisionDate = now, + deletedDate = null, + ), + error = BitwardenService.Error( + code = BitwardenService.Error.CODE_DECODING_FAILED, + revisionDate = now, + ), + deleted = false, + version = BitwardenService.VERSION, + ) + val model = BitwardenCollection( + accountId = user.id, + collectionId = remote.id, + externalId = remote.externalId, + organizationId = remote.organizationId, + revisionDate = now, + // service fields + service = service, + // common + name = "⚠️ Unsupported Collection", + hidePasswords = remote.hidePasswords, + readOnly = remote.readOnly, + ) + model + }, + remotePut = { collections -> + TODO() + }, + onLog = { msg, logLevel -> + logRepository.post(TAG, msg, logLevel) + }, + ) + + // + // Organization + // + + fun BitwardenCrCta.organizationDecoder( + entity: OrganizationEntity, + ) = kotlin.run { + BitwardenOrganization + .encrypted( + accountId = user.id, + entity = entity, + ) + .transform(this) + } + + val organizationDao = db.organizationQueries + val existingOrganizations = organizationDao + .getByAccountId( + accountId = user.id, + ) + .executeAsList() + .map { it.data_ } + syncX( + name = "organization", + localItems = existingOrganizations, + localLens = SyncManager.LensLocal( + getLocalId = { it.organizationId }, + getLocalRevisionDate = { it.revisionDate }, + ), + localReEncoder = { model -> + model + }, + localDecoder = { l, d -> + Unit + }, + localDeleteById = { ids -> + organizationDao.transaction { + ids.forEach { organizationId -> + organizationDao.deleteByOrganizationId( + organizationId = organizationId, + ) + } + } + }, + localPut = { models -> + organizationDao.transaction { + models.forEach { organization -> + organizationDao.insert( + organizationId = organization.organizationId, + accountId = organization.accountId, + data = organization, + ) + } + } + }, + remoteItems = response.profile.organizations.orEmpty(), + remoteLens = SyncManager.Lens( + getId = { it.id }, + getRevisionDate = { Instant.DISTANT_FUTURE }, + ), + remoteDecoder = { remote, local -> + val codec = getCodec( + mode = BitwardenCrCta.Mode.DECRYPT, + ) + codec + .organizationDecoder( + entity = remote, + ) + }, + remoteDeleteById = { id -> + TODO() + }, + remoteDecodedFallback = { remote, localOrNull, e -> + val logE = DecodeVaultException( + message = "Failed to decrypt a organization.", + e = e, + ) + recordException(logE) + + val service = BitwardenService( + remote = BitwardenService.Remote( + id = remote.id, + revisionDate = now, + deletedDate = null, + ), + error = BitwardenService.Error( + code = BitwardenService.Error.CODE_DECODING_FAILED, + revisionDate = now, + ), + deleted = false, + version = BitwardenService.VERSION, + ) + val model = BitwardenOrganization( + accountId = user.id, + organizationId = remote.id, + revisionDate = now, + // service fields + service = service, + // common + name = "⚠️ Unsupported Organization", + selfHost = remote.selfHost, + ) + model + }, + remotePut = { + TODO() + }, + onLog = { msg, logLevel -> + logRepository.post(TAG, msg, logLevel) + }, + ) + + // + // Sends + // + + fun BitwardenCrCta.sendDecoder( + entity: SyncSends, + codec2: BitwardenCrCta, + localSyncId: String?, + ) = kotlin.run { + val syncId = localSyncId + ?: cryptoGenerator.uuid() + BitwardenSend + .encrypted( + accountId = user.id, + sendId = syncId, + entity = entity, + ) + .transform(this, codec2) + } + + val sendDao = db.sendQueries + val existingSends = sendDao + .getByAccountId( + accountId = user.id, + ) + .executeAsList() + .map { it.data_ } + syncX( + name = "send", + localItems = existingSends, + localLens = SyncManager.LensLocal( + getLocalId = { it.sendId }, + getLocalRevisionDate = { it.revisionDate }, + ), + localReEncoder = { model -> + model + }, + localDecoder = { l, d -> + Unit + }, + localDeleteById = { ids -> + sendDao.transaction { + ids.forEach { sendId -> + sendDao.deleteBySendId( + sendId = sendId, + ) + } + } + }, + localPut = { models -> + sendDao.transaction { + models.forEach { send -> + sendDao.insert( + accountId = send.accountId, + sendId = send.sendId, + data = send, + ) + } + } + }, + remoteItems = response.sends.orEmpty(), + remoteLens = SyncManager.Lens( + getId = { it.id }, + getRevisionDate = { Instant.DISTANT_FUTURE }, + ), + remoteDecoder = { remote, local -> + val codec = getCodec( + mode = BitwardenCrCta.Mode.DECRYPT, + sendId = remote.id, + ) + val codec2 = getCodec( + mode = BitwardenCrCta.Mode.DECRYPT, + ) + codec + .sendDecoder( + entity = remote, + codec2 = codec2, + localSyncId = local?.sendId, + ) + }, + remoteDeleteById = { id -> + TODO() + }, + remoteDecodedFallback = { remote, localOrNull, e -> + e.printStackTrace() + val service = BitwardenService( + remote = BitwardenService.Remote( + id = remote.id, + revisionDate = now, + deletedDate = null, + ), + error = BitwardenService.Error( + code = BitwardenService.Error.CODE_DECODING_FAILED, + revisionDate = now, + ), + deleted = false, + version = BitwardenService.VERSION, + ) + val model = BitwardenSend( + accountId = user.id, + sendId = localOrNull?.sendId ?: cryptoGenerator.uuid(), + revisionDate = now, + // service fields + service = service, + // common + name = "⚠️ Unsupported Send", + notes = "", + accessCount = 0, + accessId = "", + ) + model + }, + remotePut = { + TODO() + }, + onLog = { msg, logLevel -> + logRepository.post(TAG, msg, logLevel) + }, + ) + + Unit + } + + // User + + private fun crypto( + profile: SyncProfile, + sends: List, + ): BitwardenCr = kotlin.run { + val builder = BitwardenCrImpl( + cipherEncryptor = cipherEncryptor, + cryptoGenerator = cryptoGenerator, + base64Service = base64Service, + ).apply { + // We need user keys to decrypt the + // profile key. + appendUserToken( + encKey = base64Service.decode(user.key.encryptionKeyBase64), + macKey = base64Service.decode(user.key.macKeyBase64), + ) + appendProfileToken( + keyCipherText = profile.key, + privateKeyCipherText = profile.privateKey, + ) + + profile.organizations.orEmpty().forEach { organization -> + appendOrganizationToken( + id = organization.id, + keyCipherText = organization.key, + ) + } + + sends.forEach { send -> + appendSendToken( + id = send.id, + keyCipherText = send.key, + ) + } + } + builder.build() + } + + private suspend fun requireSecurityStampMatchesOrNull( + db: Database, + response: SyncResponse, + ) { + val existingProfile = db + .profileQueries + .getByAccountId( + accountId = user.id, + ) + .executeAsOneOrNull() + ?.takeIf { it.profileId == response.profile.id } + if (existingProfile != null) { + val existingSecurityStamp = existingProfile.data_.securityStamp + require(existingSecurityStamp == response.profile.securityStamp) { + "Local security stamp differs from a remote one. " + + "You might be in a man-in-the-middle attack!" + } + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/api/builder/ServerEnvApi.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/api/builder/ServerEnvApi.kt new file mode 100644 index 00000000..91e3f4d2 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/api/builder/ServerEnvApi.kt @@ -0,0 +1,549 @@ +package com.artemchep.keyguard.provider.bitwarden.api.builder + +import com.artemchep.keyguard.provider.bitwarden.ServerEnv +import com.artemchep.keyguard.provider.bitwarden.api.entity.SyncResponse +import com.artemchep.keyguard.provider.bitwarden.entity.AttachmentEntity +import com.artemchep.keyguard.provider.bitwarden.entity.AvatarRequestEntity +import com.artemchep.keyguard.provider.bitwarden.entity.CipherEntity +import com.artemchep.keyguard.provider.bitwarden.entity.FolderEntity +import com.artemchep.keyguard.provider.bitwarden.entity.HibpBreachResponse +import com.artemchep.keyguard.provider.bitwarden.entity.ProfileRequestEntity +import com.artemchep.keyguard.provider.bitwarden.entity.SyncSends +import com.artemchep.keyguard.provider.bitwarden.entity.TwoFactorEmailRequestEntity +import com.artemchep.keyguard.provider.bitwarden.entity.request.CipherCreateRequest +import com.artemchep.keyguard.provider.bitwarden.entity.request.CipherRequest +import com.artemchep.keyguard.provider.bitwarden.entity.request.FolderRequest +import com.artemchep.keyguard.provider.bitwarden.entity.request.SendRequest +import io.ktor.client.HttpClient +import io.ktor.client.request.HttpRequestBuilder +import io.ktor.client.request.delete +import io.ktor.client.request.forms.MultiPartFormDataContent +import io.ktor.client.request.forms.formData +import io.ktor.client.request.get +import io.ktor.client.request.header +import io.ktor.client.request.parameter +import io.ktor.client.request.post +import io.ktor.client.request.put +import io.ktor.client.request.setBody +import io.ktor.client.statement.HttpResponse +import io.ktor.http.ContentType +import io.ktor.http.contentType +import io.ktor.util.AttributeKey + +val routeAttribute = AttributeKey("route") + +val accountAttribute = AttributeKey("account") + +/** + * A DSL for the API server endpoints. To use, call [ServerEnv.api] + * property. + * + * @author Artem Chepurnyi + */ +@JvmInline +value class ServerEnvApi @Deprecated("Use the [ServerEnv.api] property instead.") constructor( + private val url: String, +) { + val twoFactor get() = TwoFactor(url = url + "two-factor/") + + val accounts get() = Accounts(url = url + "accounts/") + + val ciphers get() = Ciphers(url = url + "ciphers/") + + val folders get() = Folders(url = url + "folders/") + + val sends get() = Sends(url = url + "sends/") + + val hibp get() = HaveIBeenPwned(url = url + "hibp/") + + val sync get() = url + "sync" + + @JvmInline + value class HaveIBeenPwned( + private val url: String, + ) { + /** + * Send a GET request to search breaches. + * + * Request: + * ``` + * ?username=artemchep@gmail.com + * ``` + * + * Response: List of breaches found. + */ + val breach get() = url + "breach" + } + + @JvmInline + value class TwoFactor( + private val url: String, + ) { + val requestEmailCode get() = url + "send-email-login" + } + + @JvmInline + value class Accounts( + private val url: String, + ) { + val prelogin get() = url + "prelogin" + + /** + * Send a PUT request to change the avatar + * color of the account. + * + * Request: + * ``` + * { "avatarColor": "#e5beed" } + * ``` + * + * Response: profile object. + */ + val avatar get() = url + "avatar" + + /** + * Send a PUT request to change the profile info. + * + * Request: + * ``` + * { "culture":"en-US", "name":"Main Vault2", "masterPasswordHint":null } + * ``` + * + * Response: profile object. + */ + val profile get() = url + "profile" + } + + @JvmInline + value class Ciphers( + val url: String, + ) { + val create get() = "$url/create" + + fun focus(id: String) = Cipher(url = "$url$id") + + @JvmInline + value class Cipher( + val url: String, + ) { + val trash get() = "$url/delete" + + val restore get() = "$url/restore" + + val attachments get() = Attachments(url = "$url/attachment") + } + + @JvmInline + value class Attachments( + val url: String, + ) { + fun focus(id: String) = Attachment(url = "$url/$id") + + @JvmInline + value class Attachment( + val url: String, + ) + } + } + + @JvmInline + value class Folders( + private val url: String, + ) { + fun post() = url + + fun create() = "$url/create" + + fun put(id: String) = "$url$id" + + fun delete(id: String) = url + id + } + + @JvmInline + value class Sends( + private val url: String, + ) { + fun post() = url + + fun focus(id: String) = Send(url = "$url$id") + + @JvmInline + value class Send( + val url: String, + ) { + val removePassword get() = "$url/remove-password" + } + } +} + +@Suppress("DEPRECATION") +val ServerEnv.api + get() = ServerEnvApi(url = buildApiUrl()) + +suspend fun ServerEnvApi.TwoFactor.requestEmailCode( + httpClient: HttpClient, + env: ServerEnv, + model: TwoFactorEmailRequestEntity, +) = httpClient + .post(requestEmailCode) { + headers(env) + contentType(ContentType.Application.Json) + setBody(model) + attributes.put(routeAttribute, "request-email-code") + } + .bodyOrApiException() + +suspend fun ServerEnvApi.Accounts.avatar( + httpClient: HttpClient, + env: ServerEnv, + token: String, + model: AvatarRequestEntity, +) = httpClient + .put(avatar) { + headers(env) + header("Authorization", "Bearer $token") + contentType(ContentType.Application.Json) + setBody(model) + attributes.put(routeAttribute, "put-avatar") + } + .bodyOrApiException() + +suspend fun ServerEnvApi.Accounts.profile( + httpClient: HttpClient, + env: ServerEnv, + token: String, + model: ProfileRequestEntity, +) = httpClient + .put(profile) { + headers(env) + header("Authorization", "Bearer $token") + contentType(ContentType.Application.Json) + setBody(model) + attributes.put(routeAttribute, "put-profile") + } + .bodyOrApiException() + +suspend fun ServerEnvApi.HaveIBeenPwned.breach( + httpClient: HttpClient, + env: ServerEnv, + token: String, + username: String, +) = httpClient + .get(breach) { + headers(env) + header("Authorization", "Bearer $token") + parameter("username", username) + attributes.put(routeAttribute, "get-username-breach") + } + .bodyOrApiException>() + +// Sync + +suspend fun ServerEnvApi.sync( + httpClient: HttpClient, + env: ServerEnv, + token: String, +) = httpClient + .get(sync) { + headers(env) + header("Authorization", "Bearer $token") + parameter("excludeDomains", true) + attributes.put(routeAttribute, "sync") + } + .bodyOrApiException() + +// Ciphers + +suspend fun ServerEnvApi.Ciphers.post( + httpClient: HttpClient, + env: ServerEnv, + token: String, + body: CipherRequest, +) = url.post( + httpClient = httpClient, + env = env, + token = token, + body = body, + route = "post-cipher", +) + +suspend fun ServerEnvApi.Ciphers.create( + httpClient: HttpClient, + env: ServerEnv, + token: String, + body: CipherCreateRequest, +) = create.post( + httpClient = httpClient, + env = env, + token = token, + body = body, + route = "post-create-cipher", +) + +suspend fun ServerEnvApi.Ciphers.Cipher.get( + httpClient: HttpClient, + env: ServerEnv, + token: String, +) = httpClient + .get(url) { + headers(env) + header("Authorization", "Bearer $token") + attributes.put(routeAttribute, "get-cipher") + } + .bodyOrApiException() + +suspend fun ServerEnvApi.Ciphers.Cipher.put( + httpClient: HttpClient, + env: ServerEnv, + token: String, + body: CipherRequest, +): CipherEntity = url.put( + httpClient = httpClient, + env = env, + token = token, + body = body, + route = "put-cipher", +) + +suspend fun ServerEnvApi.Ciphers.Cipher.delete( + httpClient: HttpClient, + env: ServerEnv, + token: String, +) = url.delete( + httpClient = httpClient, + env = env, + token = token, + route = "delete-cipher", +) + +suspend fun ServerEnvApi.Ciphers.Cipher.trash( + httpClient: HttpClient, + env: ServerEnv, + token: String, +) = httpClient + .put(trash) { + headers(env) + header("Authorization", "Bearer $token") + contentType(ContentType.Any) + attributes.put(routeAttribute, "trash-cipher") + } + .bodyOrApiException() + +suspend fun ServerEnvApi.Ciphers.Cipher.restore( + httpClient: HttpClient, + env: ServerEnv, + token: String, + cipherRequest: CipherRequest, +) = httpClient + .put(restore) { + headers(env) + header("Authorization", "Bearer $token") + contentType(ContentType.Application.Json) + setBody(cipherRequest) + attributes.put(routeAttribute, "restore-cipher") + } + .bodyOrApiException() + +// Attachment + +suspend fun ServerEnvApi.Ciphers.Attachments.post( + httpClient: HttpClient, + env: ServerEnv, + token: String, + attachmentKey: String, + attachmentData: ByteArray, +): CipherEntity = kotlin.run { + // TODO: Provide a stream to read data from, this should + // solve performance issues when uploading large files. + // + // val attachmentDataProvider = ChannelProvider { + // attachmentStream + // .toByteReadChannel() + // } + val body = MultiPartFormDataContent( + formData { + append("key", attachmentKey) + append("data", attachmentData) + }, + ) + url.post( + httpClient = httpClient, + env = env, + token = token, + body = body, + route = "post-attachment", + ) +} + +suspend fun ServerEnvApi.Ciphers.Attachments.delete( + httpClient: HttpClient, + env: ServerEnv, + token: String, + id: String, +) = focus(id = id).url.delete( + httpClient = httpClient, + env = env, + token = token, + route = "delete-cipher", +) + +suspend fun ServerEnvApi.Ciphers.Attachments.Attachment.get( + httpClient: HttpClient, + env: ServerEnv, + token: String, +) = httpClient + .get(url) { + headers(env) + header("Authorization", "Bearer $token") + attributes.put(routeAttribute, "get-attachment") + } + .bodyOrApiException() + +// Folders + +suspend fun ServerEnvApi.Folders.post( + httpClient: HttpClient, + env: ServerEnv, + token: String, + body: FolderRequest, +) = post().post( + httpClient = httpClient, + env = env, + token = token, + body = body, + route = "post-folder", +) + +suspend fun ServerEnvApi.Folders.put( + httpClient: HttpClient, + env: ServerEnv, + token: String, + id: String, + body: FolderRequest, +) = put(id = id).put( + httpClient = httpClient, + env = env, + token = token, + body = body, + route = "put-folder", +) + +suspend fun ServerEnvApi.Folders.delete( + httpClient: HttpClient, + env: ServerEnv, + token: String, + id: String, +) = delete(id = id).delete( + httpClient = httpClient, + env = env, + token = token, + route = "delete-folder", +) + +// Sends + +suspend fun ServerEnvApi.Sends.post( + httpClient: HttpClient, + env: ServerEnv, + token: String, + body: SendRequest, +) = post().post( + httpClient = httpClient, + env = env, + token = token, + body = body, + route = "post-send", +) + +suspend fun ServerEnvApi.Sends.Send.removePassword( + httpClient: HttpClient, + env: ServerEnv, + token: String, +) = httpClient + .put(url) { + headers(env) + header("Authorization", "Bearer $token") + attributes.put(routeAttribute, "remove-password-send") + } + .bodyOrApiException() + +suspend fun ServerEnvApi.Sends.Send.delete( + httpClient: HttpClient, + env: ServerEnv, + token: String, +) = url.delete( + httpClient = httpClient, + env = env, + token = token, + route = "delete-send", +) + +// Base + +private suspend inline fun String.post( + httpClient: HttpClient, + env: ServerEnv, + token: String, + body: Input, + route: String, +) = httpClient + .post(this) { + headers(env) + header("Authorization", "Bearer $token") + contentType(ContentType.Application.Json) + setBody(body) + attributes.put(routeAttribute, route) + } + .bodyOrApiException() + +private suspend inline fun String.put( + httpClient: HttpClient, + env: ServerEnv, + token: String, + body: Input, + route: String, +) = httpClient + .put(this) { + headers(env) + header("Authorization", "Bearer $token") + contentType(ContentType.Application.Json) + setBody(body) + attributes.put(routeAttribute, route) + } + .bodyOrApiException() + +private suspend inline fun String.delete( + httpClient: HttpClient, + env: ServerEnv, + token: String, + route: String, +) = httpClient + .delete(this) { + headers(env) + header("Authorization", "Bearer $token") + attributes.put(routeAttribute, route) + } + .bodyOrApiException() + +fun HttpRequestBuilder.headers(env: ServerEnv) { + // Seems like now Bitwarden now requires you to specify + // the client name and version. + header("Bitwarden-Client-Name", "web") + header("Bitwarden-Client-Version", "2023.10.1") + // App does not work if hidden behind reverse-proxy under + // a subdirectory. We should specify the 'referer' so the server + // generates correct urls for us. + if (env.baseUrl.isNotEmpty()) { + header( + key = "referer", + value = env.baseUrl + .ensureSuffix("/"), + ) + } + env.headers.forEach { header -> + header( + key = header.key, + value = header.value, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/api/builder/ServerEnvIdentity.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/api/builder/ServerEnvIdentity.kt new file mode 100644 index 00000000..d734b01c --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/api/builder/ServerEnvIdentity.kt @@ -0,0 +1,17 @@ +package com.artemchep.keyguard.provider.bitwarden.api.builder + +import com.artemchep.keyguard.provider.bitwarden.ServerEnv + +/** + * @author Artem Chepurnyi + */ +@JvmInline +value class ServerEnvNotifications @Deprecated("Use the [ServerEnv.notifications] property instead.") constructor( + private val url: String, +) { + val hub get() = url + "hub" +} + +@Suppress("DEPRECATION") +val ServerEnv.notifications + get() = ServerEnvNotifications(url = buildNotificationsUrl()) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/api/builder/ServerEnvNotifications.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/api/builder/ServerEnvNotifications.kt new file mode 100644 index 00000000..0bbc5967 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/api/builder/ServerEnvNotifications.kt @@ -0,0 +1,27 @@ +package com.artemchep.keyguard.provider.bitwarden.api.builder + +import com.artemchep.keyguard.provider.bitwarden.ServerEnv + +/** + * A DSL for the Identity server endpoints. To use, call [ServerEnv.identity] + * property. + * + * @author Artem Chepurnyi + */ +@JvmInline +value class ServerEnvIdentity @Deprecated("Use the [ServerEnv.identity] property instead.") constructor( + private val url: String, +) { + val connect get() = Connect(url = url + "connect/") + + @JvmInline + value class Connect( + private val url: String, + ) { + val token get() = url + "token" + } +} + +@Suppress("DEPRECATION") +val ServerEnv.identity + get() = ServerEnvIdentity(url = buildIdentityUrl()) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/api/builder/UrlBuilder.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/api/builder/UrlBuilder.kt new file mode 100644 index 00000000..38209086 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/api/builder/UrlBuilder.kt @@ -0,0 +1,81 @@ +package com.artemchep.keyguard.provider.bitwarden.api.builder + +import com.artemchep.keyguard.provider.bitwarden.ServerEnv +import io.ktor.http.Url + +private const val BITWARDEN_DOMAIN_US = "bitwarden.com" +private const val BITWARDEN_DOMAIN_EU = "bitwarden.eu" + +fun ServerEnv.buildHost() = buildWebVaultUrl() + .let(::Url) + .host + +fun ServerEnv.buildWebVaultUrl() = buildUrl( + url = webVaultUrl, + suffix = "", + default = when (region) { + ServerEnv.Region.US -> "https://vault.$BITWARDEN_DOMAIN_US/" + ServerEnv.Region.EU -> "https://vault.$BITWARDEN_DOMAIN_EU/" + }, +) + +fun ServerEnv.buildApiUrl() = buildUrl( + url = apiUrl, + suffix = "api/", + default = when (region) { + ServerEnv.Region.US -> "https://vault.$BITWARDEN_DOMAIN_US/api/" + ServerEnv.Region.EU -> "https://vault.$BITWARDEN_DOMAIN_EU/api/" + }, +) + +fun ServerEnv.buildIdentityUrl() = buildUrl( + url = identityUrl, + suffix = "identity/", + default = when (region) { + ServerEnv.Region.US -> "https://vault.$BITWARDEN_DOMAIN_US/identity/" + ServerEnv.Region.EU -> "https://vault.$BITWARDEN_DOMAIN_EU/identity/" + }, +) + +fun ServerEnv.buildIconsUrl() = buildUrl( + url = iconsUrl, + suffix = "icons/", + default = "https://icons.bitwarden.net/", +) + +fun ServerEnv.buildNotificationsUrl() = buildUrl( + url = notificationsUrl, + suffix = "notifications/", + default = when (region) { + ServerEnv.Region.US -> "https://notifications.$BITWARDEN_DOMAIN_US/" + ServerEnv.Region.EU -> "https://notifications.$BITWARDEN_DOMAIN_EU/" + }, +) + +fun ServerEnv.buildSendUrl() = buildUrl( + url = webVaultUrl, + suffix = "#/send/", + default = when (region) { + ServerEnv.Region.US -> "https://send.$BITWARDEN_DOMAIN_US/#" + ServerEnv.Region.EU -> "https://send.$BITWARDEN_DOMAIN_EU/#" + }, +) + +fun ServerEnv.buildIconsRequestUrl(domain: String) = kotlin.run { + val baseUrl = buildIconsUrl() + "$baseUrl$domain/icon.png" +} + +private fun ServerEnv.buildUrl( + url: String, + suffix: String, + default: String, +) = url + .takeUnless { it.isBlank() } + ?: baseUrl + .takeUnless { it.isBlank() } + ?.ensureSuffix("/") + ?.let { it + suffix } + ?: default + +fun String.ensureSuffix(suffix: String) = if (endsWith(suffix)) this else this + suffix diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/api/builder/http.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/api/builder/http.kt new file mode 100644 index 00000000..4a4867a4 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/api/builder/http.kt @@ -0,0 +1,165 @@ +package com.artemchep.keyguard.provider.bitwarden.api.builder + +import com.artemchep.keyguard.common.exception.HttpException +import com.artemchep.keyguard.platform.recordException +import com.artemchep.keyguard.platform.recordLog +import com.artemchep.keyguard.provider.bitwarden.entity.ErrorEntity +import com.artemchep.keyguard.provider.bitwarden.entity.toException +import io.ktor.client.call.body +import io.ktor.client.statement.HttpResponse +import io.ktor.http.HttpStatusCode +import kotlinx.serialization.encodeToString +import kotlinx.serialization.json.Json +import kotlinx.serialization.json.JsonArray +import kotlinx.serialization.json.JsonElement +import kotlinx.serialization.json.JsonNull +import kotlinx.serialization.json.JsonObject +import kotlinx.serialization.json.JsonPrimitive +import kotlinx.serialization.json.booleanOrNull +import kotlinx.serialization.json.contentOrNull +import kotlinx.serialization.json.doubleOrNull +import kotlinx.serialization.json.longOrNull +import kotlin.collections.component1 +import kotlin.collections.component2 +import kotlin.collections.firstOrNull +import kotlin.collections.forEach +import kotlin.collections.mutableListOf +import kotlin.collections.mutableMapOf +import kotlin.collections.plusAssign +import kotlin.collections.set + +suspend inline fun HttpResponse.bodyOrApiException(): T = kotlin.run { + logCrashlyticsRoute() + + val b = this.body() + // No need to parse a response if we want + // unit type back. + if (Unit is T) { + return@run Unit + } + try { + b.body() + } catch (e: Exception) { + e.printStackTrace() + + val newStatus = HttpStatusCode.fromValue(status.value) + val apiException = try { + b.body() + .toException( + exception = e, + code = newStatus, + ) + } catch (f: Exception) { + f.printStackTrace() + + // Try to parse an unknown exception, it might still contain + // the message content. + val json = runCatching { + b.body() + }.getOrNull() + ?: run { + // This might happen if a user miss-types a server URL, so we + // instead get default HTML template saying that this page + // can not be found. + if (newStatus != HttpStatusCode.NotFound) { + val loggedException = + RuntimeException("Failed request: body is not a JSON!") + recordException(loggedException) + } + // Generic exception + throw HttpException( + statusCode = newStatus, + m = newStatus.description, + e = e, + ) + } + + val responseBodySanitizedJson = Json.encodeToString(json.sanitize()) + println("Sanitized response JSON:") + println(responseBodySanitizedJson) + + val message = json.tryGetErrorMessageBitwardenApi() + ?: json.tryGetErrorMessageCloudflareApi() + if ( + message == null || + // This response is expected when we have to + // refresh the access token, no need to log it. + newStatus != HttpStatusCode.Unauthorized + ) { + val loggedException = + RuntimeException("Failed request! Body: $responseBodySanitizedJson") + recordLog(responseBodySanitizedJson) + recordException(loggedException) + } + HttpException( + statusCode = newStatus, + m = message + ?: newStatus.description, + e = e, + ) + } + throw apiException + } +} + +fun HttpResponse.logCrashlyticsRoute() { + val route = this.call.attributes.getOrNull(routeAttribute) + ?: "route-unknown" + recordLog("${status.value} @ $route") +} + +fun JsonObject.tryGetErrorMessageBitwardenApi(): String? { + val error = getIgnoreCase("error") as? JsonObject + ?: return null + val message = error.getIgnoreCase("description") as? JsonPrimitive + ?: return null + return message.contentOrNull +} + +fun JsonObject.tryGetErrorMessageCloudflareApi(): String? { + val message = getIgnoreCase("message") as? JsonPrimitive + ?: return null + return message.contentOrNull +} + +private fun JsonObject.getIgnoreCase(key: String) = keys + .firstOrNull { k -> + k.equals(key, ignoreCase = true) + } + ?.let { this[it] } + +/** + * Sanitize all of the primitives from the json object, + * making the response safe to be send to the crashlytics. + */ +fun JsonElement.sanitize(): JsonElement = when (this) { + is JsonObject -> { + val map = mutableMapOf() + entries.forEach { (key, child) -> + val sanitizedChild = child.sanitize() + map[key] = sanitizedChild + } + JsonObject(map) + } + + is JsonArray -> { + val list = mutableListOf() + forEach { child -> + val sanitizedChild = child.sanitize() + list += sanitizedChild + } + JsonArray(list) + } + + is JsonNull -> this + + is JsonPrimitive -> { + val value = when { + isString -> "string" + booleanOrNull != null -> "bool" + doubleOrNull != null -> "number" + else -> "other" + } + JsonPrimitive(value) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/api/entity/SyncResponse.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/api/entity/SyncResponse.kt new file mode 100644 index 00000000..a6dbcae4 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/api/entity/SyncResponse.kt @@ -0,0 +1,32 @@ +package com.artemchep.keyguard.provider.bitwarden.api.entity + +import com.artemchep.keyguard.provider.bitwarden.entity.CipherEntity +import com.artemchep.keyguard.provider.bitwarden.entity.CollectionEntity +import com.artemchep.keyguard.provider.bitwarden.entity.FolderEntity +import com.artemchep.keyguard.provider.bitwarden.entity.SyncProfile +import com.artemchep.keyguard.provider.bitwarden.entity.SyncSends +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import kotlinx.serialization.json.JsonNames + +@Serializable +data class SyncResponse( + @JsonNames("ciphers") + @SerialName("Ciphers") + val ciphers: List? = null, + @JsonNames("folders") + @SerialName("Folders") + val folders: List? = null, + @JsonNames("collections") + @SerialName("Collections") + val collections: List? = null, + @JsonNames("profile") + @SerialName("Profile") + val profile: SyncProfile, + @JsonNames("sends") + @SerialName("Sends") + val sends: List? = null, + @JsonNames("unofficialServer") + @SerialName("UnofficialServer") + val unofficialServer: Boolean? = false, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/api/fff.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/api/fff.kt new file mode 100644 index 00000000..8d337f26 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/api/fff.kt @@ -0,0 +1,245 @@ +package com.artemchep.keyguard.provider.bitwarden.api + +import com.artemchep.keyguard.common.exception.ApiException +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.attempt +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.io.effectMap +import com.artemchep.keyguard.common.io.flatMap +import com.artemchep.keyguard.common.io.handleError +import com.artemchep.keyguard.common.io.handleErrorTap +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.io.measure +import com.artemchep.keyguard.common.io.parallel +import com.artemchep.keyguard.common.service.logging.LogLevel +import com.artemchep.keyguard.core.store.bitwarden.BitwardenCipher +import com.artemchep.keyguard.core.store.bitwarden.BitwardenService +import com.artemchep.keyguard.provider.bitwarden.sync.SyncManager +import kotlinx.coroutines.Dispatchers +import kotlinx.datetime.Clock +import kotlin.Any +import kotlin.Boolean +import kotlin.String +import kotlin.Throwable +import kotlin.Unit +import kotlin.let + +fun merge( + remote: BitwardenCipher, + local: BitwardenCipher, +): BitwardenCipher { + val attachments = remote.attachments.toMutableList() + local.attachments.forEachIndexed { localIndex, attachment -> + val localAttachment = attachment as? BitwardenCipher.Attachment.Local + ?: return@forEachIndexed + + // Skip collisions. + val remoteIndex = attachments + .indexOfFirst { it.id == localAttachment.id } + if (remoteIndex >= 0) { + // This attachment already exists on remote, so + // we just keep it as is. + return@forEachIndexed + } + + val parent = local.attachments + .getOrNull(localIndex - 1) + val parentIndex = attachments + .indexOfFirst { it.id == parent?.id } + if (parentIndex >= 0) { + attachments.add(parentIndex + 1, localAttachment) + } else { + if (parent != null) { + attachments.add(localAttachment) + } else { + attachments.add(0, localAttachment) + } + } + } + + return remote.copy(attachments = attachments) +} + +interface RemotePutScope { + fun updateRemoteModel(remote: Remote) +} + +suspend fun < + Local : BitwardenService.Has, + LocalDecoded : Any, + Remote : Any, + RemoteDecoded : Any, + > syncX( + sync: (String, IO) -> IO = { _, io -> io }, + name: String, + localItems: Collection, + localLens: SyncManager.LensLocal, + localReEncoder: (Local) -> RemoteDecoded, + localDecoder: (Local, Remote?) -> LocalDecoded, + localDecodedToString: (LocalDecoded) -> String = { it.toString() }, + localDeleteById: suspend (List) -> Unit, + localPut: suspend (List) -> Unit, + shouldOverwrite: (Local, Remote) -> Boolean = { _, _ -> false }, + remoteItems: Collection, + remoteLens: SyncManager.Lens, + remoteDecoder: (Remote, Local?) -> RemoteDecoded, + remoteDecodedToString: (RemoteDecoded) -> String = { it.toString() }, + remoteDecodedFallback: (Remote, Local?, Throwable) -> RemoteDecoded, + remoteDeleteById: suspend (String) -> Unit, + remotePut: suspend RemotePutScope.(LocalDecoded) -> RemoteDecoded, + onLog: (String, LogLevel) -> Unit, +) { + onLog( + "[Start] Starting to sync the $name: " + + "${localItems.size} local items, " + + "${remoteItems.size} remote items.", + LogLevel.INFO, + ) + + val df = SyncManager( + local = localLens, + remote = remoteLens, + ).df( + localItems = localItems, + remoteItems = remoteItems, + shouldOverwrite = shouldOverwrite, + ) + + // + // Write changes to local storage as these + // are quite fast to do. + // + + localDeleteById( + df.localDeletedCipherIds + .map { localLens.getLocalId(it.local) }, + ) + + val localPutCipherDecoded = df.localPutCipher + .map { (localOrNull, remote) -> + ioEffect { remoteDecoder(remote, localOrNull) } + .handleError { e -> + val remoteId = remoteLens.getId(remote) + val localId = localOrNull?.let(localLens.getLocalId) + val msg = "[local] Failed to decode the item: " + + "remote_id=$remoteId, " + + "local_id=$localId" + onLog(msg, LogLevel.WARNING) + e.printStackTrace() + + remoteDecodedFallback(remote, localOrNull, e) + } + } + .parallel(Dispatchers.Default) + .measure { duration, v -> + val msg = "[local] Decoding $name took $duration; " + + "${v.size} entries decoded." + onLog(msg, LogLevel.INFO) + } + .bind() + localPut(localPutCipherDecoded) + + // + // Write changes to remote server. + // + + suspend fun handleFailedToPut( + local: Local, + remote: Remote? = null, + e: Throwable, + ) { + e.printStackTrace() + onLog("Failed to put!! $e", LogLevel.INFO) + + val code = when (e) { + is ApiException -> e.code.value + else -> BitwardenService.Error.CODE_UNKNOWN + } + val newError = BitwardenService.Error( + code = code, + message = e.localizedMessage + ?: e.message, + revisionDate = Clock.System.now(), + ) + val newRemote = remote + ?.let { + BitwardenService.Remote( + id = remoteLens.getId(it), + revisionDate = remoteLens.getRevisionDate(it), + deletedDate = remoteLens.getDeletedDate(it), + ) + } + ?: local.service.remote + val newService = local.service.copy( + error = newError, + remote = newRemote, + ) + val newLocal = local + .withService(newService) + + val update = localReEncoder(newLocal) + localPut(listOf(update)) + } + + df.remoteDeletedCipherIds + .map { entry -> + val localId = localLens.getLocalId(entry.local) + val remoteId = remoteLens.getId(entry.remote) + ioEffect { remoteDeleteById(remoteId) } + .handleErrorTap { e -> + handleFailedToPut(entry.local, e = e) + } + .effectMap { + val update = listOf(localId) + localDeleteById(update) + } + // If a client wants to block an access to database + // while we are doing this operation -> this is a right place. + .let { io -> sync(localId, io) } + .attempt() + } + .parallel(Dispatchers.Default) + .bind() + + df.remotePutCipher + .map { entry -> + val localId = localLens.getLocalId(entry.local) + ioEffect { localDecoder(entry.local, entry.remote) } + .handleErrorTap { e -> + handleFailedToPut(entry.local, e = e) + } + .flatMap { localDecoded -> + var lastRemote: Remote? = null + val scope = object : RemotePutScope { + override fun updateRemoteModel(remote: Remote) { + lastRemote = remote + } + } + ioEffect { remotePut(scope, localDecoded) } + .handleErrorTap { e -> + handleFailedToPut( + local = entry.local, + remote = lastRemote, + e = e, + ) + } + .effectMap { + val update = listOf(it) + localPut(update) + } + // If a client wants to block an access to database + // while we are doing this operation -> this is a right place. + .let { io -> sync(localId, io) } + } + // I want to filter out the items that were failed to + // be decoded. + .attempt() + } + .parallel(Dispatchers.Default) + .measure { duration, v -> + val msg = "[remote] Decoding $name took $duration; " + + "${v.size} entries decoded." + onLog(msg, LogLevel.INFO) + } + .bind() +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/api/login.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/api/login.kt new file mode 100644 index 00000000..74972099 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/api/login.kt @@ -0,0 +1,300 @@ +package com.artemchep.keyguard.provider.bitwarden.api + +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.model.Argon2Mode +import com.artemchep.keyguard.common.service.crypto.CryptoGenerator +import com.artemchep.keyguard.common.service.text.Base64Service +import com.artemchep.keyguard.common.usecase.DeviceIdUseCase +import com.artemchep.keyguard.common.util.int +import com.artemchep.keyguard.core.store.bitwarden.BitwardenToken +import com.artemchep.keyguard.provider.bitwarden.ServerEnv +import com.artemchep.keyguard.provider.bitwarden.ServerTwoFactorToken +import com.artemchep.keyguard.provider.bitwarden.api.builder.api +import com.artemchep.keyguard.provider.bitwarden.api.builder.bodyOrApiException +import com.artemchep.keyguard.provider.bitwarden.api.builder.headers +import com.artemchep.keyguard.provider.bitwarden.api.builder.identity +import com.artemchep.keyguard.provider.bitwarden.api.builder.routeAttribute +import com.artemchep.keyguard.provider.bitwarden.entity.AccountPreLoginRequest +import com.artemchep.keyguard.provider.bitwarden.entity.AccountPreLoginResponse +import com.artemchep.keyguard.provider.bitwarden.entity.ConnectTokenResponse +import com.artemchep.keyguard.provider.bitwarden.entity.TwoFactorProviderTypeEntity +import com.artemchep.keyguard.provider.bitwarden.entity.toDomain +import com.artemchep.keyguard.provider.bitwarden.model.Login +import com.artemchep.keyguard.provider.bitwarden.model.PasswordResult +import com.artemchep.keyguard.provider.bitwarden.model.PreLogin +import io.ktor.client.HttpClient +import io.ktor.client.request.forms.FormDataContent +import io.ktor.client.request.header +import io.ktor.client.request.post +import io.ktor.client.request.setBody +import io.ktor.http.ContentType +import io.ktor.http.Parameters +import io.ktor.http.contentType +import io.ktor.utils.io.InternalAPI +import kotlinx.serialization.encodeToString +import kotlinx.serialization.json.Json +import kotlinx.serialization.json.JsonObject +import kotlinx.serialization.json.jsonPrimitive +import java.util.Locale + +private const val PBKDF2_KEY_LENGTH = 32 + +private const val CLIENT_ID = "web" +private const val DEVICE_TYPE = "9" + +suspend fun login( + deviceIdUseCase: DeviceIdUseCase, + cryptoGenerator: CryptoGenerator, + base64Service: Base64Service, + httpClient: HttpClient, + json: Json, + env: ServerEnv, + twoFactorToken: ServerTwoFactorToken?, + clientSecret: String?, + email: String, + password: String, +) = run { + val deviceId = deviceIdUseCase().bind() + val secrets = obtainSecrets( + cryptoGenerator = cryptoGenerator, + httpClient = httpClient, + env = env, + email = email, + password = password, + ) + val token = internalLogin( + base64Service = base64Service, + httpClient = httpClient, + json = json, + env = env, + twoFactorToken = twoFactorToken, + clientSecret = clientSecret, + deviceId = deviceId, + email = email, + passwordKey = secrets.passwordKey, + ) + secrets to token +} + +@OptIn(InternalAPI::class) +private suspend fun internalLogin( + base64Service: Base64Service, + httpClient: HttpClient, + json: Json, + env: ServerEnv, + twoFactorToken: ServerTwoFactorToken?, + clientSecret: String?, + deviceId: String, + email: String, + passwordKey: ByteArray, +): Login = httpClient + .post(env.identity.connect.token) { + headers(env) + header("device-type", DEVICE_TYPE) + header("dnt", "1") + // Official Bitwarden backend specifically checks for this header, + // which is just a base-64 string of an email. + val emailBase64 = base64Service + .encodeToString(email) + header("Auth-Email", emailBase64) + val passwordBase64 = base64Service + .encodeToString(passwordKey) + body = FormDataContent( + Parameters.build { + append("grant_type", "password") + append("username", email) + append("password", passwordBase64) + append("scope", "api offline_access") + append("client_id", CLIENT_ID) + // As per + // https://github.com/bitwarden/cli/issues/383#issuecomment-937819752 + // the backdoor to a captcha is a client secret. + if (clientSecret != null) { + append("captchaResponse", clientSecret) + } + append("deviceIdentifier", deviceId) + append("deviceType", DEVICE_TYPE) + append("deviceName", "chrome") + + if (twoFactorToken != null) { + val providerEntity = TwoFactorProviderTypeEntity.of(twoFactorToken.provider) + val providerId = json + .encodeToString(providerEntity) + .removeSurrounding("\"") + append("twoFactorProvider", providerId) + append("twoFactorToken", twoFactorToken.token) + append("twoFactorRemember", twoFactorToken.remember.int.toString()) + } + }, + ) + + attributes.put(routeAttribute, "get-token") + } + .bodyOrApiException() + .toDomain() + +@OptIn(InternalAPI::class) +suspend fun refresh( + base64Service: Base64Service, + httpClient: HttpClient, + json: Json, + env: ServerEnv, + token: BitwardenToken.Token, +): Login = httpClient + .post(env.identity.connect.token) { + headers(env) + header("device-type", DEVICE_TYPE) + header("dnt", "1") + + val clientId = kotlin.runCatching { + val jwtData = parseAccessTokenData( + base64Service = base64Service, + json = json, + accessToken = token.accessToken, + ) + jwtData["client_id"]?.jsonPrimitive?.content + }.getOrNull() + ?: CLIENT_ID + body = FormDataContent( + Parameters.build { + append("grant_type", "refresh_token") + append("client_id", clientId) + append("refresh_token", token.refreshToken) + }, + ) + + attributes.put(routeAttribute, "refresh-token") + } + .bodyOrApiException() + .toDomain() + +private fun parseAccessTokenData( + base64Service: Base64Service, + json: Json, + accessToken: String, +): JsonObject { + val parts = accessToken.split(".") + require(parts.size == 3) { + "Access token must consist of 3 parts." + } + + val dataJsonStringBase64 = parts[1] + val dataJsonString = base64Service.decodeToString(dataJsonStringBase64) + val dataJson = json.parseToJsonElement(dataJsonString) as JsonObject + return dataJson +} + +suspend fun obtainSecrets( + cryptoGenerator: CryptoGenerator, + httpClient: HttpClient, + env: ServerEnv, + email: String, + password: String, +) = run { + val prelogin = prelogin( + httpClient = httpClient, + env = env, + email = email, + ) + generateSecrets( + cryptoGenerator, + email, + password, + hashConfig = prelogin.hash, + ) +} + +private suspend fun prelogin( + httpClient: HttpClient, + env: ServerEnv, + email: String, +): PreLogin = httpClient + .post(env.api.accounts.prelogin) { + headers(env) + contentType(ContentType.Application.Json) + setBody( + AccountPreLoginRequest( + email = email, + ), + ) + + attributes.put(routeAttribute, "get-prelogin") + } + .bodyOrApiException() + .toDomain() + +private fun generateSecrets( + cryptoGenerator: CryptoGenerator, + email: String, + password: String, + hashConfig: PreLogin.Hash, +): PasswordResult { + val passwordBytes = password.toByteArray() + val emailBytes = email + .lowercase(Locale.ENGLISH) + .toByteArray() + + val masterKey = cryptoGenerator.masterKeyHash( + seed = passwordBytes, + salt = emailBytes, + config = hashConfig, + ) + val passwordKey = cryptoGenerator.pbkdf2( + seed = masterKey, + salt = passwordBytes, + iterations = 1, + length = PBKDF2_KEY_LENGTH, + ) + val (encryptionKey, macKey) = stretchMasterKey( + cryptoGenerator = cryptoGenerator, + key = masterKey, + ) + return PasswordResult( + masterKey = masterKey, + passwordKey = passwordKey, + encryptionKey = encryptionKey, + macKey = macKey, + ) +} + +private fun stretchMasterKey( + cryptoGenerator: CryptoGenerator, + key: ByteArray, +): Pair { + val encryptionKey = cryptoGenerator.hkdf( + seed = key, + info = "enc".toByteArray(), + ) + val macKey = cryptoGenerator.hkdf( + seed = key, + info = "mac".toByteArray(), + ) + return encryptionKey to macKey +} + +private fun CryptoGenerator.masterKeyHash( + seed: ByteArray, + salt: ByteArray, + config: PreLogin.Hash, +): ByteArray = when (config) { + is PreLogin.Hash.Pbkdf2 -> + pbkdf2( + seed = seed, + salt = salt, + iterations = config.iterationsCount, + length = PBKDF2_KEY_LENGTH, + ) + + is PreLogin.Hash.Argon2id -> { + val memoryKb = 1024 * config.memoryMb + val saltHash = hashSha256(salt) + argon2( + mode = Argon2Mode.ARGON2_ID, + seed = seed, + salt = saltHash, + iterations = config.iterationsCount, + memoryKb = memoryKb, + parallelism = config.parallelism, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/crypto/BitwardenCrypto.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/crypto/BitwardenCrypto.kt new file mode 100644 index 00000000..006f6bd4 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/crypto/BitwardenCrypto.kt @@ -0,0 +1,338 @@ +package com.artemchep.keyguard.provider.bitwarden.crypto + +import arrow.core.partially2 +import arrow.core.partially3 +import com.artemchep.keyguard.common.exception.DecodeException +import com.artemchep.keyguard.common.service.crypto.CipherEncryptor +import com.artemchep.keyguard.common.service.crypto.CryptoGenerator +import com.artemchep.keyguard.common.service.text.Base64Service + +private typealias Decoder = (String) -> DecodeResult + +private typealias Encoder = (CipherEncryptor.Type, ByteArray) -> String + +sealed interface BitwardenCrKey { + data object AuthToken : BitwardenCrKey + + // + // User / Organization + // + + data object UserToken : BitwardenCrKey + + data class OrganizationToken( + val id: String, + ) : BitwardenCrKey + + data class SendToken( + val id: String, + ) : BitwardenCrKey +} + +interface BitwardenCr { + val base64Service: Base64Service + + fun decoder( + key: BitwardenCrKey, + ): Decoder + + fun encoder( + key: BitwardenCrKey, + ): Encoder + + fun cta( + env: BitwardenCrCta.BitwardenCrCtaEnv, + mode: BitwardenCrCta.Mode, + ): BitwardenCrCta +} + +class BitwardenCrCta( + private val crypto: BitwardenCr, + val env: BitwardenCrCtaEnv, + val mode: Mode, +) : BitwardenCr by crypto { + data class BitwardenCrCtaEnv( + val key: BitwardenCrKey, + /** An encryption type */ + val encryptionType: CipherEncryptor.Type, + ) + + fun withEnv(env: BitwardenCrCtaEnv) = BitwardenCrCta( + crypto = crypto, + env = env, + mode = mode, + ) + + enum class Mode { + ENCRYPT, + DECRYPT, + } +} + +inline fun BitwardenCrCta.whatIf( + isEncrypt: BitwardenCrCta.() -> T, + isDecrypt: BitwardenCrCta.() -> T, +): T = when (mode) { + BitwardenCrCta.Mode.DECRYPT -> isDecrypt() + BitwardenCrCta.Mode.ENCRYPT -> isEncrypt() +} + +@JvmName("transformString") +fun BitwardenCrCta.transformString( + value: String, +): String = whatIf( + isEncrypt = { + val encryptionType = env.encryptionType + val data = value.toByteArray() + encoder(env.key).invoke(encryptionType, data) + }, + isDecrypt = { + val data = decoder(env.key).invoke(value).data + String(data) + }, +) + +@JvmName("transformStringNullable") +fun BitwardenCrCta.transformString( + value: String?, +): String? = value?.let { transformString(it) } + +fun BitwardenCrCta.transformBase64( + value: String, +): String = whatIf( + isEncrypt = { + val encryptionType = env.encryptionType + val data = base64Service.decode(value) + encoder(env.key).invoke(encryptionType, data) + }, + isDecrypt = { + val data = decoder(env.key).invoke(value).data + base64Service.encodeToString(data) + }, +) + +interface BitwardenCrFactoryScope : BitwardenCr { + val cipherEncryptor: CipherEncryptor + val cryptoGenerator: CryptoGenerator + + fun appendDecoder( + key: BitwardenCrKey, + decoder: Decoder, + ) + + fun appendEncoder( + key: BitwardenCrKey, + encoder: Encoder, + ) + + fun build(): BitwardenCr +} + +class BitwardenCrImpl( + override val cipherEncryptor: CipherEncryptor, + override val cryptoGenerator: CryptoGenerator, + override val base64Service: Base64Service, +) : BitwardenCrFactoryScope { + private val decoders: MutableMap = mutableMapOf() + + private val encoders: MutableMap = mutableMapOf() + + override fun appendDecoder( + key: BitwardenCrKey, + decoder: Decoder, + ) { + if (key in decoders) error("The decoder with key '$key' is already defined!") + decoders[key] = decoder + } + + override fun appendEncoder( + key: BitwardenCrKey, + encoder: Encoder, + ) { + if (key in encoders) error("The encoder with key '$key' is already defined!") + encoders[key] = encoder + } + + override fun build(): BitwardenCr = this + + // + // Decoder + // + + override fun decoder(key: BitwardenCrKey): Decoder = decoders.getValue(key) + + override fun encoder(key: BitwardenCrKey): Encoder = encoders.getValue(key) + + override fun cta( + env: BitwardenCrCta.BitwardenCrCtaEnv, + mode: BitwardenCrCta.Mode, + ): BitwardenCrCta = BitwardenCrCta( + crypto = this, + env = env, + mode = mode, + ) +} + +private fun Decoder.withExceptionHandling( + key: BitwardenCrKey, + symmetricCryptoKey: SymmetricCryptoKey2? = null, + asymmetricCryptoKey: AsymmetricCryptoKey? = null, +): Decoder = + { cipherText -> + val result = kotlin.runCatching { + this(cipherText) + }.getOrElse { e -> + val info = listOfNotNull( + symmetricCryptoKey?.let { "symmetric key is ${it.data.size}b long" }, + asymmetricCryptoKey?.let { "asymmetric key is ${it.privateKey.size}b long" }, + ).joinToString() + val msg = "Failed to decode a cipher-text: $key, $info" + throw DecodeException(msg, e) + } + result + } + +fun BitwardenCrFactoryScope.appendUserToken( + encKey: ByteArray, + macKey: ByteArray, +) { + val symmetricCryptoKey = SymmetricCryptoKey2( + data = encKey + macKey, + ) + val decoder = cipherEncryptor::decode2 + .partially2(symmetricCryptoKey) + .partially2(null) + .withExceptionHandling(BitwardenCrKey.AuthToken) + val encoder = cipherEncryptor::encode2 + .partially3(symmetricCryptoKey) + .partially3(null) + appendDecoder(BitwardenCrKey.AuthToken, decoder) + appendEncoder(BitwardenCrKey.AuthToken, encoder) +} + +fun BitwardenCrFactoryScope.appendProfileToken( + keyCipherText: String, + privateKeyCipherText: String, +) { + val symmetricCryptoKey = decoder(BitwardenCrKey.AuthToken)(keyCipherText) + .data + .let(CryptoKey::decodeSymmetricOrThrow) + val asymmetricCryptoKey = kotlin.run { + // RSA encryption requires to include the private + // key into the decoder. + cipherEncryptor + .decode2( + cipher = privateKeyCipherText, + symmetricCryptoKey = symmetricCryptoKey, + ) + .data + .let(CryptoKey::decodeAsymmetricOrThrow) + } + val decoder = cipherEncryptor::decode2 + .partially2(symmetricCryptoKey) + .partially2(asymmetricCryptoKey) + .withExceptionHandling( + BitwardenCrKey.UserToken, + symmetricCryptoKey = symmetricCryptoKey, + asymmetricCryptoKey = asymmetricCryptoKey, + ) + val encoder = cipherEncryptor::encode2 + .partially3(symmetricCryptoKey) + .partially3(asymmetricCryptoKey) + appendDecoder(BitwardenCrKey.UserToken, decoder) + appendEncoder(BitwardenCrKey.UserToken, encoder) +} + +fun BitwardenCrFactoryScope.appendProfileToken2( + keyData: ByteArray, + privateKey: ByteArray, +) { + val symmetricCryptoKey = CryptoKey.decodeSymmetricOrThrow(keyData) + val asymmetricCryptoKey = CryptoKey.decodeAsymmetricOrThrow(privateKey) + val decoder = cipherEncryptor::decode2 + .partially2(symmetricCryptoKey) + .partially2(asymmetricCryptoKey) + .withExceptionHandling( + BitwardenCrKey.UserToken, + symmetricCryptoKey = symmetricCryptoKey, + asymmetricCryptoKey = asymmetricCryptoKey, + ) + val encoder = cipherEncryptor::encode2 + .partially3(symmetricCryptoKey) + .partially3(asymmetricCryptoKey) + appendDecoder(BitwardenCrKey.UserToken, decoder) + appendEncoder(BitwardenCrKey.UserToken, encoder) +} + +fun BitwardenCrFactoryScope.appendOrganizationToken( + id: String, + keyCipherText: String, +) { + val symmetricCryptoKey = decoder(BitwardenCrKey.UserToken)(keyCipherText) + .data + .let(CryptoKey::decodeSymmetricOrThrow) + val key = BitwardenCrKey.OrganizationToken(id) + val decoder = cipherEncryptor::decode2 + .partially2(symmetricCryptoKey) + .partially2(null) + .withExceptionHandling( + key, + symmetricCryptoKey = symmetricCryptoKey, + ) + val encoder = cipherEncryptor::encode2 + .partially3(symmetricCryptoKey) + .partially3(null) + appendDecoder(key, decoder) + appendEncoder(key, encoder) +} + +fun BitwardenCrFactoryScope.appendSendToken( + id: String, + keyCipherText: String, +) { + val symmetricCryptoKey = decoder(BitwardenCrKey.UserToken)(keyCipherText) + .data + .let { keyMaterial -> + val key = cryptoGenerator.hkdf( + seed = keyMaterial, + salt = "bitwarden-send".toByteArray(), + info = "send".toByteArray(), + length = 64, + ) + key + } + .let(CryptoKey::decodeSymmetricOrThrow) + val key = BitwardenCrKey.SendToken(id) + val decoder = cipherEncryptor::decode2 + .partially2(symmetricCryptoKey) + .partially2(null) + .withExceptionHandling( + key, + symmetricCryptoKey = symmetricCryptoKey, + ) + val encoder = cipherEncryptor::encode2 + .partially3(symmetricCryptoKey) + .partially3(null) + appendDecoder(key, decoder) + appendEncoder(key, encoder) +} + +fun BitwardenCrFactoryScope.appendOrganizationToken2( + id: String, + keyData: ByteArray, +) { + val symmetricCryptoKey = CryptoKey.decodeSymmetricOrThrow(keyData) + val key = BitwardenCrKey.OrganizationToken(id) + val decoder = cipherEncryptor::decode2 + .partially2(symmetricCryptoKey) + .partially2(null) + .withExceptionHandling( + key, + symmetricCryptoKey = symmetricCryptoKey, + ) + val encoder = cipherEncryptor::encode2 + .partially3(symmetricCryptoKey) + .partially3(null) + appendDecoder(key, decoder) + appendEncoder(key, encoder) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/crypto/BitwardenDecoder.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/crypto/BitwardenDecoder.kt new file mode 100644 index 00000000..e5478158 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/crypto/BitwardenDecoder.kt @@ -0,0 +1,3 @@ +package com.artemchep.keyguard.provider.bitwarden.crypto + +class BitwardenDecoder diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/crypto/CipherCrypto.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/crypto/CipherCrypto.kt new file mode 100644 index 00000000..559e2809 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/crypto/CipherCrypto.kt @@ -0,0 +1,146 @@ +package com.artemchep.keyguard.provider.bitwarden.crypto + +import com.artemchep.keyguard.core.store.bitwarden.BitwardenCipher + +fun BitwardenCipher.transform( + crypto: BitwardenCrCta, +) = copy( + // common + name = crypto.transformString(name), + notes = crypto.transformString(notes), + fields = fields.transform(crypto), + attachments = attachments.transform(crypto), + // types + login = login?.transform(crypto), + secureNote = secureNote?.transform(crypto), + card = card?.transform(crypto), + identity = identity?.transform(crypto), +) + +@JvmName("encryptListOfBitwardenCipherAttachment") +fun List.transform( + crypto: BitwardenCrCta, +) = map { item -> item.transform(crypto) } + +fun BitwardenCipher.Attachment.transform( + crypto: BitwardenCrCta, +) = when (this) { + is BitwardenCipher.Attachment.Remote -> transform(crypto) + is BitwardenCipher.Attachment.Local -> transform(crypto) +} + +fun BitwardenCipher.Attachment.Remote.transform( + crypto: BitwardenCrCta, +) = copy( + fileName = crypto.transformString(fileName), + keyBase64 = crypto.transformBase64(keyBase64), +) + +fun BitwardenCipher.Attachment.Local.transform( + crypto: BitwardenCrCta, +) = this + +@JvmName("encryptListOfBitwardenCipherField") +fun List.transform( + crypto: BitwardenCrCta, +) = map { item -> item.transform(crypto) } + +fun BitwardenCipher.Field.transform( + crypto: BitwardenCrCta, +) = copy( + name = crypto.transformString(name), + value = crypto.transformString(value), +) + +fun BitwardenCipher.Login.transform( + crypto: BitwardenCrCta, +) = copy( + username = crypto.transformString(username), + password = crypto.transformString(password), + passwordHistory = passwordHistory.transform(crypto), + uris = uris.map { uri -> uri.transform(crypto) }, + fido2Credentials = fido2Credentials.map { credentials -> credentials.transform(crypto) }, + totp = crypto.transformString(totp), +) + +@JvmName("encryptListOfBitwardenCipherLoginPasswordHistory") +fun List.transform( + crypto: BitwardenCrCta, +) = map { item -> item.transform(crypto) } + +fun BitwardenCipher.Login.PasswordHistory.transform( + crypto: BitwardenCrCta, +) = copy( + password = crypto.transformString(password), +) + +@JvmName("encryptListOfBitwardenCipherLoginUri") +fun List.transform( + crypto: BitwardenCrCta, +) = map { item -> item.transform(crypto) } + +fun BitwardenCipher.Login.Uri.transform( + crypto: BitwardenCrCta, +) = copy( + uri = crypto.transformString(uri), +) + +@JvmName("encryptListOfBitwardenCipherLoginFido2Credentials") +fun List.transform( + crypto: BitwardenCrCta, +) = map { item -> item.transform(crypto) } + +fun BitwardenCipher.Login.Fido2Credentials.transform( + crypto: BitwardenCrCta, +) = copy( + credentialId = crypto.transformString(credentialId), + keyType = crypto.transformString(keyType), + keyAlgorithm = crypto.transformString(keyAlgorithm), + keyCurve = crypto.transformString(keyCurve), + keyValue = crypto.transformString(keyValue), + rpId = crypto.transformString(rpId), + rpName = crypto.transformString(rpName), + counter = crypto.transformString(counter), + userHandle = crypto.transformString(userHandle), + userName = crypto.transformString(userName), + userDisplayName = crypto.transformString(userDisplayName), + discoverable = crypto.transformString(discoverable), +) + +fun BitwardenCipher.SecureNote.transform( + crypto: BitwardenCrCta, +) = this // Does not need encryption + +fun BitwardenCipher.Identity.transform( + crypto: BitwardenCrCta, +) = copy( + title = crypto.transformString(title), + firstName = crypto.transformString(firstName), + middleName = crypto.transformString(middleName), + lastName = crypto.transformString(lastName), + address1 = crypto.transformString(address1), + address2 = crypto.transformString(address2), + address3 = crypto.transformString(address3), + city = crypto.transformString(city), + state = crypto.transformString(state), + postalCode = crypto.transformString(postalCode), + country = crypto.transformString(country), + company = crypto.transformString(company), + email = crypto.transformString(email), + phone = crypto.transformString(phone), + ssn = crypto.transformString(ssn), + username = crypto.transformString(username), + passportNumber = crypto.transformString(passportNumber), + licenseNumber = crypto.transformString(licenseNumber), +) + +fun BitwardenCipher.Card.transform( + crypto: BitwardenCrCta, +) = copy( + cardholderName = crypto.transformString(cardholderName), + brand = crypto.transformString(brand), + number = crypto.transformString(number), + expMonth = crypto.transformString(expMonth), + expYear = crypto.transformString(expYear), + code = crypto.transformString(code), +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/crypto/CipherDecoder.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/crypto/CipherDecoder.kt new file mode 100644 index 00000000..862da4d9 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/crypto/CipherDecoder.kt @@ -0,0 +1,158 @@ +package com.artemchep.keyguard.provider.bitwarden.crypto + +import com.artemchep.keyguard.core.store.bitwarden.BitwardenCipher +import com.artemchep.keyguard.core.store.bitwarden.BitwardenService +import com.artemchep.keyguard.provider.bitwarden.entity.AttachmentEntity +import com.artemchep.keyguard.provider.bitwarden.entity.CipherEntity +import com.artemchep.keyguard.provider.bitwarden.entity.domain + +fun BitwardenCipher.Companion.encrypted( + accountId: String, + cipherId: String, + folderId: String?, + entity: CipherEntity, +) = kotlin.run { + val service = BitwardenService( + remote = BitwardenService.Remote( + id = entity.id, + revisionDate = entity.revisionDate, + deletedDate = entity.deletedDate, + ), + deleted = false, + version = BitwardenService.VERSION, + ) + BitwardenCipher( + accountId = accountId, + cipherId = cipherId, + folderId = folderId, + organizationId = entity.organizationId, + collectionIds = entity.collectionIds?.toSet().orEmpty(), + revisionDate = entity.revisionDate, + deletedDate = entity.deletedDate, + // service fields + service = service, + // common + name = entity.name, + notes = entity.notes, + favorite = entity.favorite, + fields = entity.fields + .orEmpty() + .map { + val type = it.type.domain() + val linkedId = it.linkedId?.domain() + BitwardenCipher.Field( + name = it.name, + value = it.value, + type = type, + linkedId = linkedId, + ) + }, + attachments = entity.attachments + .orEmpty() + .map { attachment -> + BitwardenCipher.Attachment.encrypted( + attachment = attachment, + ) + }, + // types + type = entity.type.domain(), + reprompt = entity.reprompt.domain(), + login = entity.login + ?.run { + BitwardenCipher.Login( + username = username, + password = password, + passwordRevisionDate = passwordRevisionDate, + passwordHistory = entity.passwordHistory + .orEmpty() + .map { + BitwardenCipher.Login.PasswordHistory( + password = it.password, + lastUsedDate = it.lastUsedDate, + ) + }, + totp = totp, + uris = uris + .orEmpty() + .map { + val match = it.match?.domain() + BitwardenCipher.Login.Uri( + uri = it.uri, + match = match, + ) + }, + fido2Credentials = fido2Credentials + .orEmpty() + .map { + BitwardenCipher.Login.Fido2Credentials( + credentialId = it.credentialId, + keyType = it.keyType, + keyAlgorithm = it.keyAlgorithm, + keyCurve = it.keyCurve, + keyValue = it.keyValue, + rpId = it.rpId, + rpName = it.rpName, + counter = it.counter, + userHandle = it.userHandle, + userName = it.userName, + userDisplayName = it.userDisplayName, + discoverable = it.discoverable, + creationDate = it.creationDate, + ) + }, + ) + }, + secureNote = entity.secureNote + ?.run { + BitwardenCipher.SecureNote( + type = type.domain(), + ) + }, + card = entity.card + ?.run { + BitwardenCipher.Card( + cardholderName = cardholderName, + brand = brand, + number = number, + expMonth = expMonth, + expYear = expYear, + code = code, + ) + }, + identity = entity.identity + ?.run { + BitwardenCipher.Identity( + title = title, + firstName = firstName, + middleName = middleName, + lastName = lastName, + address1 = address1, + address2 = address2, + address3 = address3, + city = city, + state = state, + postalCode = postalCode, + country = country, + company = company, + email = email, + phone = phone, + ssn = ssn, + username = username, + passportNumber = passportNumber, + licenseNumber = licenseNumber, + ) + }, + ) +} + +fun BitwardenCipher.Attachment.Companion.encrypted( + attachment: AttachmentEntity, +) = kotlin.run { + BitwardenCipher.Attachment.Remote( + id = attachment.id, + url = attachment.url, + fileName = attachment.fileName, + keyBase64 = attachment.key, + size = attachment.size.toLong(), + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/crypto/CollectionCrypto.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/crypto/CollectionCrypto.kt new file mode 100644 index 00000000..9ba3ae77 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/crypto/CollectionCrypto.kt @@ -0,0 +1,9 @@ +package com.artemchep.keyguard.provider.bitwarden.crypto + +import com.artemchep.keyguard.core.store.bitwarden.BitwardenCollection + +fun BitwardenCollection.transform( + crypto: BitwardenCrCta, +) = copy( + name = crypto.transformString(name), +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/crypto/CollectionDecoder.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/crypto/CollectionDecoder.kt new file mode 100644 index 00000000..46261192 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/crypto/CollectionDecoder.kt @@ -0,0 +1,35 @@ +package com.artemchep.keyguard.provider.bitwarden.crypto + +import com.artemchep.keyguard.core.store.bitwarden.BitwardenCollection +import com.artemchep.keyguard.core.store.bitwarden.BitwardenService +import com.artemchep.keyguard.provider.bitwarden.entity.CollectionEntity +import kotlinx.datetime.Clock + +fun BitwardenCollection.Companion.encrypted( + accountId: String, + entity: CollectionEntity, +) = kotlin.run { + val collectionRevision = Clock.System.now() + val service = BitwardenService( + remote = BitwardenService.Remote( + id = entity.id, + revisionDate = collectionRevision, + deletedDate = null, // can not be trashed + ), + deleted = false, + version = BitwardenService.VERSION, + ) + BitwardenCollection( + accountId = accountId, + collectionId = entity.id, + externalId = entity.externalId, + organizationId = entity.organizationId, + revisionDate = collectionRevision, + // service fields + service = service, + // common + name = entity.name, + hidePasswords = entity.hidePasswords, + readOnly = entity.readOnly, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/crypto/EntryCrypto.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/crypto/EntryCrypto.kt new file mode 100644 index 00000000..a6753434 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/crypto/EntryCrypto.kt @@ -0,0 +1,33 @@ +package com.artemchep.keyguard.provider.bitwarden.crypto + +import com.artemchep.keyguard.common.service.text.Base64Service + +class EntryCrypto( + val base64Service: Base64Service, + /** + * A function that is either encrypts the plain text or + * decrypts it, depending on the mode. + */ + val transform: (String) -> ByteArray, + val mode: Mode, +) { + enum class Mode { + ENCRYPT, + DECRYPT, + } +} + +fun EntryCrypto.transformToString(value: String): String = String(transform(value)) + +fun EntryCrypto.transformToBase64(value: String): String = whatIf( + isEncrypt = { base64Service.decodeToString(value).let(::transformToString) }, + isDecrypt = { transform(value).let(base64Service::encodeToString) }, +) + +inline fun EntryCrypto.whatIf( + isEncrypt: EntryCrypto.() -> T, + isDecrypt: EntryCrypto.() -> T, +): T = when (mode) { + EntryCrypto.Mode.DECRYPT -> isDecrypt() + EntryCrypto.Mode.ENCRYPT -> isEncrypt() +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/crypto/FolderCrypto.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/crypto/FolderCrypto.kt new file mode 100644 index 00000000..cd697035 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/crypto/FolderCrypto.kt @@ -0,0 +1,10 @@ +package com.artemchep.keyguard.provider.bitwarden.crypto + +import com.artemchep.keyguard.core.store.bitwarden.BitwardenFolder + +fun BitwardenFolder.transform( + crypto: BitwardenCrCta, +) = copy( + // common + name = crypto.transformString(name), +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/crypto/FolderDecoder.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/crypto/FolderDecoder.kt new file mode 100644 index 00000000..50eded2b --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/crypto/FolderDecoder.kt @@ -0,0 +1,30 @@ +package com.artemchep.keyguard.provider.bitwarden.crypto + +import com.artemchep.keyguard.core.store.bitwarden.BitwardenFolder +import com.artemchep.keyguard.core.store.bitwarden.BitwardenService +import com.artemchep.keyguard.provider.bitwarden.entity.FolderEntity + +fun BitwardenFolder.Companion.encrypted( + accountId: String, + folderId: String, + entity: FolderEntity, +) = kotlin.run { + val service = BitwardenService( + remote = BitwardenService.Remote( + id = entity.id, + revisionDate = entity.revisionDate, + deletedDate = null, // can not be trashed + ), + deleted = false, + version = BitwardenService.VERSION, + ) + BitwardenFolder( + accountId = accountId, + folderId = folderId, + revisionDate = entity.revisionDate, + // service fields + service = service, + // common + name = entity.name, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/crypto/OrganizationCrypto.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/crypto/OrganizationCrypto.kt new file mode 100644 index 00000000..e95c536b --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/crypto/OrganizationCrypto.kt @@ -0,0 +1,9 @@ +package com.artemchep.keyguard.provider.bitwarden.crypto + +import com.artemchep.keyguard.core.store.bitwarden.BitwardenOrganization + +fun BitwardenOrganization.transform( + crypto: BitwardenCrCta, +) = copy( + keyBase64 = crypto.transformBase64(keyBase64), +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/crypto/OrganizationDecoder.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/crypto/OrganizationDecoder.kt new file mode 100644 index 00000000..8a5601f6 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/crypto/OrganizationDecoder.kt @@ -0,0 +1,34 @@ +package com.artemchep.keyguard.provider.bitwarden.crypto + +import com.artemchep.keyguard.core.store.bitwarden.BitwardenOrganization +import com.artemchep.keyguard.core.store.bitwarden.BitwardenService +import com.artemchep.keyguard.provider.bitwarden.entity.OrganizationEntity +import kotlinx.datetime.Clock + +fun BitwardenOrganization.Companion.encrypted( + accountId: String, + entity: OrganizationEntity, +) = kotlin.run { + val organizationRevision = Clock.System.now() + val service = BitwardenService( + remote = BitwardenService.Remote( + id = entity.id, + revisionDate = organizationRevision, + deletedDate = null, // can not be trashed + ), + deleted = false, + version = BitwardenService.VERSION, + ) + BitwardenOrganization( + accountId = accountId, + organizationId = entity.id, + revisionDate = organizationRevision, + // service fields + service = service, + // common + name = entity.name, + avatarColor = entity.avatarColor, + selfHost = entity.selfHost, + keyBase64 = entity.key, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/crypto/ProfileCrypto.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/crypto/ProfileCrypto.kt new file mode 100644 index 00000000..9c75e8df --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/crypto/ProfileCrypto.kt @@ -0,0 +1,12 @@ +package com.artemchep.keyguard.provider.bitwarden.crypto + +import com.artemchep.keyguard.core.store.bitwarden.BitwardenProfile + +fun BitwardenProfile.transform( + crypto: BitwardenCrCta, +) = copy( + keyBase64 = crypto + .withEnv(crypto.env.copy(key = BitwardenCrKey.AuthToken)) + .transformBase64(keyBase64), + privateKeyBase64 = crypto.transformBase64(privateKeyBase64), +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/crypto/ProfileDecoder.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/crypto/ProfileDecoder.kt new file mode 100644 index 00000000..e8126be2 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/crypto/ProfileDecoder.kt @@ -0,0 +1,27 @@ +package com.artemchep.keyguard.provider.bitwarden.crypto + +import com.artemchep.keyguard.core.store.bitwarden.BitwardenProfile +import com.artemchep.keyguard.provider.bitwarden.entity.SyncProfile + +fun BitwardenProfile.Companion.encrypted( + accountId: String, + entity: SyncProfile, + unofficialServer: Boolean, +) = kotlin.run { + BitwardenProfile( + accountId = accountId, + profileId = entity.id, + keyBase64 = entity.key, + privateKeyBase64 = entity.privateKey, + avatarColor = entity.avatarColor, + culture = entity.culture, + name = entity.name.orEmpty(), + email = entity.email, + emailVerified = entity.emailVerified, + premium = entity.premium, + securityStamp = entity.securityStamp, + twoFactorEnabled = entity.twoFactorEnabled, + masterPasswordHint = entity.masterPasswordHint, + unofficialServer = unofficialServer, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/crypto/SendCrypto.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/crypto/SendCrypto.kt new file mode 100644 index 00000000..d8fe48ae --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/crypto/SendCrypto.kt @@ -0,0 +1,30 @@ +package com.artemchep.keyguard.provider.bitwarden.crypto + +import com.artemchep.keyguard.core.store.bitwarden.BitwardenSend + +fun BitwardenSend.transform( + crypto: BitwardenCrCta, + codec2: BitwardenCrCta, +) = copy( + // common + // key is encoded with profile key + keyBase64 = keyBase64?.let(codec2::transformBase64), + name = crypto.transformString(name), + notes = crypto.transformString(notes), + // types + text = text?.transform(crypto), + file = file?.transform(crypto), +) + +fun BitwardenSend.File.transform( + crypto: BitwardenCrCta, +) = copy( + fileName = crypto.transformString(fileName), + keyBase64 = keyBase64?.let(crypto::transformBase64), +) + +fun BitwardenSend.Text.transform( + crypto: BitwardenCrCta, +) = copy( + text = crypto.transformString(text), +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/crypto/SendDecoder.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/crypto/SendDecoder.kt new file mode 100644 index 00000000..569ba615 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/crypto/SendDecoder.kt @@ -0,0 +1,59 @@ +package com.artemchep.keyguard.provider.bitwarden.crypto + +import com.artemchep.keyguard.core.store.bitwarden.BitwardenSend +import com.artemchep.keyguard.core.store.bitwarden.BitwardenService +import com.artemchep.keyguard.provider.bitwarden.entity.SyncSends +import com.artemchep.keyguard.provider.bitwarden.entity.domain + +fun BitwardenSend.Companion.encrypted( + accountId: String, + sendId: String, + entity: SyncSends, +) = kotlin.run { + val service = BitwardenService( + remote = BitwardenService.Remote( + id = entity.id, + revisionDate = entity.revisionDate, + deletedDate = null, // can not be trashed + ), + deleted = false, + version = BitwardenService.VERSION, + ) + BitwardenSend( + accountId = accountId, + sendId = sendId, + accessId = entity.accessId, + revisionDate = entity.revisionDate, + deletedDate = entity.deletionDate, + expirationDate = entity.expirationDate, + keyBase64 = entity.key, + // service fields + service = service, + // common + name = entity.name, + notes = entity.notes, + accessCount = entity.accessCount, + maxAccessCount = entity.maxAccessCount, + password = entity.password, + disabled = entity.disabled, + hideEmail = entity.hideEmail, + // types + type = entity.type.domain(), + file = entity.file + ?.let { file -> + BitwardenSend.File( + id = file.fileName, + fileName = file.fileName, + keyBase64 = file.key, + size = file.size.toLong(), + ) + }, + text = entity.text + ?.let { text -> + BitwardenSend.Text( + text = text.text, + hidden = text.hidden, + ) + }, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/crypto/SymmetricCryptoKey.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/crypto/SymmetricCryptoKey.kt new file mode 100644 index 00000000..5b507da9 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/crypto/SymmetricCryptoKey.kt @@ -0,0 +1,193 @@ +package com.artemchep.keyguard.provider.bitwarden.crypto + +import com.artemchep.keyguard.common.service.crypto.CipherEncryptor + +sealed interface CryptoKey { + companion object; +} + +fun CryptoKey.Companion.decodeAsymmetricOrThrow( + data: ByteArray, +): AsymmetricCryptoKey = kotlin.run { + AsymmetricCryptoKey( + privateKey = data, + ) +} + +fun CryptoKey.Companion.decodeSymmetricOrThrow( + data: ByteArray, +): SymmetricCryptoKey2 = kotlin.run { + SymmetricCryptoKey2( + data = data, + ) +} + +/** + * @author Artem Chepurnyi + */ +@Suppress( + "PrivatePropertyName", + "FunctionName", + "SpellCheckingInspection", +) +data class SymmetricCryptoKey2( + val data: ByteArray, +) : CryptoKey { + interface EncKeyProvider { + val encKey: ByteArray + } + + interface MacKeyProvider { + val macKey: ByteArray + } + + /** + * @author Artem Chepurnyi + */ + data class Crypto( + override val encKey: ByteArray, + ) : EncKeyProvider { + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + + other as Crypto + + if (!encKey.contentEquals(other.encKey)) return false + + return true + } + + override fun hashCode(): Int { + return encKey.contentHashCode() + } + } + + /** + * @author Artem Chepurnyi + */ + data class CryptoWithMac( + override val encKey: ByteArray, + override val macKey: ByteArray, + ) : EncKeyProvider, MacKeyProvider { + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + + other as CryptoWithMac + + if (!encKey.contentEquals(other.encKey)) return false + if (!macKey.contentEquals(other.macKey)) return false + + return true + } + + override fun hashCode(): Int { + var result = encKey.contentHashCode() + result = 31 * result + macKey.contentHashCode() + return result + } + } + + private val aesCbc256_B64 by lazy { + require(data.size == 32) { + "Crypto key Aes+Cbc+256 must be 32 bytes long, got ${data.size} instead!" + } + Crypto( + encKey = data, + ) + } + + private val aesCbc256_HmacSha256_B64 by lazy { + require(data.size == 64) { + "Crypto key Aes+Cbc+256+Hmac256 must be 64 bytes long, got ${data.size} instead!" + } + CryptoWithMac( + encKey = data.sliceArray(0 until 32), + macKey = data.sliceArray(32 until 64), + ) + } + + private val aesCbc128_HmacSha256_B64 by lazy { + require(data.size == 32) { + "Crypto key Aes+Cbc+128+Hmac256 must be 32 bytes long, got ${data.size} instead!" + } + CryptoWithMac( + encKey = data.sliceArray(0 until 16), + macKey = data.sliceArray(16 until 32), + ) + } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + + other as SymmetricCryptoKey2 + + if (!data.contentEquals(other.data)) return false + + return true + } + + override fun hashCode(): Int { + return data.contentHashCode() + } + + // CBC 256 + + fun requireAesCbc256_B64() = aesCbc256_B64 + + fun requireAesCbc256_HmacSha256_B64() = aesCbc256_HmacSha256_B64 + + // CBC 128 + + fun requireAesCbc128_HmacSha256_B64() = aesCbc128_HmacSha256_B64 +} + +/** + * @author Artem Chepurnyi + */ +data class AsymmetricCryptoKey( + val privateKey: ByteArray, +) : CryptoKey { + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + + other as AsymmetricCryptoKey + + if (!privateKey.contentEquals(other.privateKey)) return false + + return true + } + + override fun hashCode(): Int { + return privateKey.contentHashCode() + } +} + +/** + * @author Artem Chepurnyi + */ +data class DecodeResult( + val data: ByteArray, + val type: CipherEncryptor.Type, +) { + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + + other as DecodeResult + + if (!data.contentEquals(other.data)) return false + if (type != other.type) return false + + return true + } + + override fun hashCode(): Int { + var result = data.contentHashCode() + result = 31 * result + type.hashCode() + return result + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/AccountPreLoginRequest.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/AccountPreLoginRequest.kt new file mode 100644 index 00000000..03ae3966 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/AccountPreLoginRequest.kt @@ -0,0 +1,10 @@ +package com.artemchep.keyguard.provider.bitwarden.entity + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class AccountPreLoginRequest( + @SerialName("email") + val email: String, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/AccountPreLoginResponse.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/AccountPreLoginResponse.kt new file mode 100644 index 00000000..f90a8cd6 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/AccountPreLoginResponse.kt @@ -0,0 +1,58 @@ +package com.artemchep.keyguard.provider.bitwarden.entity + +import com.artemchep.keyguard.provider.bitwarden.model.PreLogin +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import kotlinx.serialization.json.JsonNames + +@Serializable +data class AccountPreLoginResponse( + @JsonNames("kdf") + @SerialName("Kdf") + val kdfType: Int = 0, + @JsonNames("kdfIterations") + @SerialName("KdfIterations") + val kdfIterationsCount: Int = 0, + @JsonNames("kdfMemory") + @SerialName("KdfMemory") + val kdfMemory: Int = 0, + @JsonNames("kdfParallelism") + @SerialName("KdfParallelism") + val kdfParallelism: Int = 0, +) + +private const val Pbkdf2Iterations = 600000 + +private const val Argon2Iterations = 3 +private const val Argon2MemoryInMB = 64 +private const val Argon2Parallelism = 4 + +fun AccountPreLoginResponse.toDomain(): PreLogin { + val hash = when (kdfType) { + // is AccountPreLoginResponse.Pbkdf2 + 0 -> { + PreLogin.Hash.Pbkdf2( + iterationsCount = kdfIterationsCount + .takeOrDefault(Pbkdf2Iterations), + ) + } + // is AccountPreLoginResponse.Argon2id + 1 -> { + PreLogin.Hash.Argon2id( + iterationsCount = kdfIterationsCount + .takeOrDefault(Argon2Iterations), + memoryMb = kdfMemory + .takeOrDefault(Argon2MemoryInMB), + parallelism = kdfParallelism + .takeOrDefault(Argon2Parallelism), + ) + } + + else -> throw IllegalArgumentException("KDF type $kdfType is not supported!") + } + return PreLogin( + hash = hash, + ) +} + +private fun Int.takeOrDefault(default: Int) = takeIf { it != 0 } ?: default diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/AttachmentEntity.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/AttachmentEntity.kt new file mode 100644 index 00000000..ae4f0a00 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/AttachmentEntity.kt @@ -0,0 +1,27 @@ +package com.artemchep.keyguard.provider.bitwarden.entity + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import kotlinx.serialization.json.JsonNames + +@Serializable +data class AttachmentEntity( + @JsonNames("id") + @SerialName("Id") + val id: String, + @JsonNames("url") + @SerialName("Url") + val url: String? = null, + @JsonNames("fileName") + @SerialName("FileName") + val fileName: String, + @JsonNames("key") + @SerialName("Key") + val key: String, + @JsonNames("size") + @SerialName("Size") + val size: String, + @JsonNames("sizeName") + @SerialName("SizeName") + val sizeName: String, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/AvatarRequestEntity.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/AvatarRequestEntity.kt new file mode 100644 index 00000000..f045f480 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/AvatarRequestEntity.kt @@ -0,0 +1,9 @@ +package com.artemchep.keyguard.provider.bitwarden.entity + +import kotlinx.serialization.Serializable + +@Serializable +data class AvatarRequestEntity( + /** Color in the '#FFFFFF' format */ + val avatarColor: String, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/CardEntity.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/CardEntity.kt new file mode 100644 index 00000000..bfb83a98 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/CardEntity.kt @@ -0,0 +1,27 @@ +package com.artemchep.keyguard.provider.bitwarden.entity + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import kotlinx.serialization.json.JsonNames + +@Serializable +data class CardEntity( + @JsonNames("cardholderName") + @SerialName("CardholderName") + val cardholderName: String? = null, + @JsonNames("brand") + @SerialName("Brand") + val brand: String? = null, + @JsonNames("number") + @SerialName("Number") + val number: String? = null, + @JsonNames("expMonth") + @SerialName("ExpMonth") + val expMonth: String? = null, + @JsonNames("expYear") + @SerialName("ExpYear") + val expYear: String? = null, + @JsonNames("code") + @SerialName("Code") + val code: String? = null, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/CipherEntity.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/CipherEntity.kt new file mode 100644 index 00000000..d42fd2a7 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/CipherEntity.kt @@ -0,0 +1,78 @@ +package com.artemchep.keyguard.provider.bitwarden.entity + +import kotlinx.datetime.Instant +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import kotlinx.serialization.json.JsonNames + +@Serializable +data class CipherEntity( + @JsonNames("id") + @SerialName("Id") + val id: String, + @JsonNames("organizationId") + @SerialName("OrganizationId") + val organizationId: String? = null, + @JsonNames("organizationUseTotp") + @SerialName("OrganizationUseTotp") + val organizationUseTotp: Boolean, + @JsonNames("folderId") + @SerialName("FolderId") + val folderId: String? = null, + @JsonNames("userId") + @SerialName("UserId") + val userId: String? = null, + @JsonNames("edit") + @SerialName("Edit") + val edit: Boolean = true, + @JsonNames("viewPassword") + @SerialName("ViewPassword") + val viewPassword: Boolean = true, + @JsonNames("favorite") + @SerialName("Favorite") + val favorite: Boolean = false, + @JsonNames("revisionDate") + @SerialName("RevisionDate") + val revisionDate: Instant, + @JsonNames("type") + @SerialName("Type") + val type: CipherTypeEntity = CipherTypeEntity.Login, + @JsonNames("sizeName") + @SerialName("SizeName") + val sizeName: String? = null, + @JsonNames("name") + @SerialName("Name") + val name: String? = null, + @JsonNames("notes") + @SerialName("Notes") + val notes: String? = null, + @JsonNames("login") + @SerialName("Login") + val login: LoginEntity? = null, + @JsonNames("secureNote") + @SerialName("SecureNote") + val secureNote: SecureNoteEntity? = null, + @JsonNames("card") + @SerialName("Card") + val card: CardEntity? = null, + @JsonNames("identity") + @SerialName("Identity") + val identity: IdentityEntity? = null, + @JsonNames("fields") + @SerialName("Fields") + val fields: List? = null, + @JsonNames("attachments") + @SerialName("Attachments") + val attachments: List? = null, + @JsonNames("passwordHistory") + @SerialName("PasswordHistory") + val passwordHistory: List? = null, + @JsonNames("collectionIds") + @SerialName("CollectionIds") + val collectionIds: List? = null, + @JsonNames("deletedDate") + @SerialName("DeletedDate") + val deletedDate: Instant? = null, + @SerialName("Reprompt") + val reprompt: CipherRepromptTypeEntity = CipherRepromptTypeEntity.None, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/CipherRepromptTypeEntity.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/CipherRepromptTypeEntity.kt new file mode 100644 index 00000000..b1ef1ee9 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/CipherRepromptTypeEntity.kt @@ -0,0 +1,32 @@ +package com.artemchep.keyguard.provider.bitwarden.entity + +import com.artemchep.keyguard.core.store.bitwarden.BitwardenCipher +import com.artemchep.keyguard.provider.bitwarden.entity.serializer.CommonEnumIntSerializer +import com.artemchep.keyguard.provider.bitwarden.entity.serializer.IntEnum +import kotlinx.serialization.Serializable + +@Serializable(CipherRepromptTypeEntitySerializer::class) +enum class CipherRepromptTypeEntity( + override val int: Int, +) : IntEnum { + None(0), + Password(1), + ; + + companion object +} + +object CipherRepromptTypeEntitySerializer : + CommonEnumIntSerializer(CipherRepromptTypeEntity::class) + +fun CipherRepromptTypeEntity.Companion.of( + model: BitwardenCipher.RepromptType, +) = when (model) { + BitwardenCipher.RepromptType.None -> CipherRepromptTypeEntity.None + BitwardenCipher.RepromptType.Password -> CipherRepromptTypeEntity.Password +} + +fun CipherRepromptTypeEntity.domain() = when (this) { + CipherRepromptTypeEntity.None -> BitwardenCipher.RepromptType.None + CipherRepromptTypeEntity.Password -> BitwardenCipher.RepromptType.Password +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/CipherTypeEntity.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/CipherTypeEntity.kt new file mode 100644 index 00000000..61ff2956 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/CipherTypeEntity.kt @@ -0,0 +1,38 @@ +package com.artemchep.keyguard.provider.bitwarden.entity + +import com.artemchep.keyguard.core.store.bitwarden.BitwardenCipher +import com.artemchep.keyguard.provider.bitwarden.entity.serializer.CommonEnumIntSerializer +import com.artemchep.keyguard.provider.bitwarden.entity.serializer.IntEnum +import kotlinx.serialization.Serializable + +@Serializable(CipherTypeEntitySerializer::class) +enum class CipherTypeEntity( + override val int: Int, +) : IntEnum { + Login(1), + SecureNote(2), + Card(3), + Identity(4), + ; + + companion object +} + +object CipherTypeEntitySerializer : + CommonEnumIntSerializer(CipherTypeEntity::class) + +fun CipherTypeEntity.Companion.of( + model: BitwardenCipher.Type, +) = when (model) { + BitwardenCipher.Type.Login -> CipherTypeEntity.Login + BitwardenCipher.Type.SecureNote -> CipherTypeEntity.SecureNote + BitwardenCipher.Type.Card -> CipherTypeEntity.Card + BitwardenCipher.Type.Identity -> CipherTypeEntity.Identity +} + +fun CipherTypeEntity.domain() = when (this) { + CipherTypeEntity.Login -> BitwardenCipher.Type.Login + CipherTypeEntity.SecureNote -> BitwardenCipher.Type.SecureNote + CipherTypeEntity.Card -> BitwardenCipher.Type.Card + CipherTypeEntity.Identity -> BitwardenCipher.Type.Identity +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/CollectionEntity.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/CollectionEntity.kt new file mode 100644 index 00000000..9813bcaa --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/CollectionEntity.kt @@ -0,0 +1,26 @@ +package com.artemchep.keyguard.provider.bitwarden.entity + +import kotlinx.serialization.SerialName +import kotlinx.serialization.json.JsonNames + +@kotlinx.serialization.Serializable +data class CollectionEntity( + @JsonNames("id") + @SerialName("Id") + val id: String, + @JsonNames("organizationId") + @SerialName("OrganizationId") + val organizationId: String, + @JsonNames("name") + @SerialName("Name") + val name: String, + @JsonNames("externalId") + @SerialName("externalId") + val externalId: String? = null, + @JsonNames("readOnly") + @SerialName("ReadOnly") + val readOnly: Boolean, + @JsonNames("hidePasswords") + @SerialName("HidePasswords") + val hidePasswords: Boolean, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/ConnectTokenResponse.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/ConnectTokenResponse.kt new file mode 100644 index 00000000..dc22ced5 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/ConnectTokenResponse.kt @@ -0,0 +1,53 @@ +package com.artemchep.keyguard.provider.bitwarden.entity + +import com.artemchep.keyguard.provider.bitwarden.model.Login +import kotlinx.datetime.Clock +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import kotlinx.serialization.json.JsonNames +import kotlin.time.Duration + +@Serializable +data class ConnectTokenResponse( + @JsonNames("kdf") + @SerialName("Kdf") + val kdfType: Int? = null, + @JsonNames("kdfIterations") + @SerialName("KdfIterations") + val kdfIterationsCount: Int? = null, + +// @SerialName("Key") +// val key: String, +// @SerialName("PrivateKey") +// val privateKey: String, + + @SerialName("access_token") + val accessToken: String, + @SerialName("token_type") + val accessTokenType: String, + + @SerialName("expires_in") + val accessTokenExpiresInSeconds: Long, + @JsonNames("resetMasterPassword") + @SerialName("ResetMasterPassword") + val resetMasterPassword: Boolean? = null, + @SerialName("refresh_token") + val refreshToken: String, + /** + * Old versions of the app do not + * have the scope. + */ + @SerialName("scope") + val scope: String? = null, +) + +fun ConnectTokenResponse.toDomain() = Login( + accessToken = accessToken, + accessTokenType = accessTokenType, + accessTokenExpiryDate = kotlin.run { + val now = Clock.System.now() + now + with(Duration) { accessTokenExpiresInSeconds.seconds } + }, + refreshToken = refreshToken, + scope = scope, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/DomainEntity.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/DomainEntity.kt new file mode 100644 index 00000000..f5fac717 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/DomainEntity.kt @@ -0,0 +1,26 @@ +package com.artemchep.keyguard.provider.bitwarden.entity + +import kotlinx.serialization.SerialName +import kotlinx.serialization.json.JsonNames + +@kotlinx.serialization.Serializable +data class DomainEntity( + @JsonNames("id") + @SerialName("Id") + val id: String, + @JsonNames("organizationId") + @SerialName("OrganizationId") + val organizationId: String, + @JsonNames("name") + @SerialName("Name") + val name: String, + @JsonNames("externalId") + @SerialName("externalId") + val externalId: String? = null, + @JsonNames("readOnly") + @SerialName("ReadOnly") + val readOnly: Boolean, + @JsonNames("hidePasswords") + @SerialName("HidePasswords") + val hidePasswords: Boolean, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/ErrorEntity.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/ErrorEntity.kt new file mode 100644 index 00000000..a1a7c49e --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/ErrorEntity.kt @@ -0,0 +1,235 @@ +package com.artemchep.keyguard.provider.bitwarden.entity + +import com.artemchep.keyguard.common.exception.ApiException +import com.artemchep.keyguard.common.service.state.impl.toMap +import com.artemchep.keyguard.provider.bitwarden.model.TwoFactorProviderArgument +import com.artemchep.keyguard.provider.bitwarden.model.TwoFactorProviderType +import com.artemchep.keyguard.provider.bitwarden.model.toObj +import io.ktor.http.HttpStatusCode +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import kotlinx.serialization.json.JsonElement +import kotlinx.serialization.json.JsonNames +import kotlinx.serialization.json.JsonObject + +@Serializable +data class ErrorEntity( + @SerialName("error") + @JsonNames("message") + val error: String, + @SerialName("error_description") + val errorDescription: String? = null, + @JsonNames("errorModel") + @SerialName("ErrorModel") + val errorModel: Message? = null, + @JsonNames("validationErrors") + @SerialName("ValidationErrors") + val validationErrors: JsonObject? = null, + // + // Two factor provider + // + @JsonNames("twoFactorProviders") + @SerialName("TwoFactorProviders") + val twoFactorProviders: List = emptyList(), + @JsonNames("twoFactorProviders2") + @SerialName("TwoFactorProviders2") + val twoFactorProviders2: TwoFactorProviders? = null, + // + // Captcha + // + @SerialName("HCaptcha_SiteKey") + val hCaptchaSiteKey: String? = null, +) { + @Serializable + data class TwoFactorProviders( + @SerialName("0") + val authenticator: AuthenticatorParams? = null, + @SerialName("1") + val email: EmailParams? = null, + @SerialName("2") + val duo: DuoParams? = null, + @SerialName("3") + val yubiKey: YubiKeyParams? = null, + @SerialName("4") + val u2f: U2fParams? = null, + @SerialName("5") + val remember: RememberParams? = null, + @SerialName("6") + val organizationDuo: OrganizationDuoParams? = null, + @SerialName("7") + val fido2WebAuthn: JsonElement? = null, + ) { + @Serializable + object AuthenticatorParams + + @Serializable + data class EmailParams( + @JsonNames("email") + @SerialName("Email") + val email: String? = null, + ) + + @Serializable + data class DuoParams( + @JsonNames("host") + @SerialName("Host") + val host: String? = null, + @JsonNames("signature") + @SerialName("Signature") + val signature: String? = null, + ) + + @Serializable + object YubiKeyParams + + @Serializable + object U2fParams + + @Serializable + object RememberParams + + @Serializable + data class OrganizationDuoParams( + @JsonNames("host") + @SerialName("Host") + val host: String? = null, + @JsonNames("signature") + @SerialName("Signature") + val signature: String? = null, + ) + } + + @Serializable + data class Message( + @JsonNames("message") + @SerialName("Message") + val message: String, + ) +} + +private fun ErrorEntity.TwoFactorProviders.toDomain(): List = + listOfNotNull( + authenticator?.toDomain(), + email?.toDomain(), + duo?.toDomain(), + yubiKey?.toDomain(), + u2f?.toDomain(), + remember?.toDomain(), + organizationDuo?.toDomain(), + fido2WebAuthn?.toDomainFido2WebAuthn(), + ) + +private fun ErrorEntity.TwoFactorProviders.AuthenticatorParams.toDomain( +) = TwoFactorProviderArgument.Authenticator + +private fun ErrorEntity.TwoFactorProviders.EmailParams.toDomain( +) = TwoFactorProviderArgument.Email( + email = email, +) + +private fun ErrorEntity.TwoFactorProviders.DuoParams.toDomain( +) = TwoFactorProviderArgument.Duo( + host = host, + signature = signature, +) + +private fun ErrorEntity.TwoFactorProviders.YubiKeyParams.toDomain( +) = TwoFactorProviderArgument.YubiKey + +private fun ErrorEntity.TwoFactorProviders.U2fParams.toDomain( +) = TwoFactorProviderArgument.U2f + +private fun ErrorEntity.TwoFactorProviders.RememberParams.toDomain( +) = TwoFactorProviderArgument.Remember + +private fun ErrorEntity.TwoFactorProviders.OrganizationDuoParams.toDomain( +) = TwoFactorProviderArgument.OrganizationDuo( + host = host, + signature = signature, +) + +private fun JsonElement.toDomainFido2WebAuthn( +) = TwoFactorProviderArgument.Fido2WebAuthn( + json = this, +) + +fun ErrorEntity.toException( + exception: Exception, + code: HttpStatusCode, +) = kotlin.run { + val type = kotlin.run { + if (hCaptchaSiteKey != null) { + return@run ApiException.Type.CaptchaRequired( + siteKey = hCaptchaSiteKey, + ) + } + + val providers = kotlin.run { + val new = twoFactorProviders2?.toDomain().orEmpty() + .groupBy { it::class } + val old = twoFactorProviders + .mapNotNull { entity -> + entity + .toDomain() + .toObj() + } + .groupBy { it::class } + // all + TwoFactorProviderType.entries + .mapNotNull { type -> + val typeObj = type.toObj() + ?: return@mapNotNull null + val typeClazz = typeObj::class + new[typeClazz]?.firstOrNull() + ?: old[typeClazz]?.firstOrNull() + } + } + if (providers.isNotEmpty()) { + return@run ApiException.Type.TwoFaRequired( + providers = providers, + ) + } + + // Default exception does not have any additional + // information. + null + } + // Auto-format the validation error + // messages to something user-friendly. + val validationError = validationErrors?.toMap()?.format() + val generalError = errorModel?.message ?: errorDescription ?: error + val message = if (validationError != null) { + "$generalError\n\n$validationError" + } else { + generalError + } + ApiException( + exception = exception, + code = code, + error = error, + type = type, + message = message, + ) +} + +private fun Any?.format(): String { + return when (this) { + is Map<*, *> -> this + .mapKeys { it.key.toString() } + .entries + // Each entry is separated by the extra empty + // new line. + .joinToString( + separator = "\n\n", + ) { entry -> + "${entry.key}:\n${entry.value.format()}" + } + + is Collection<*> -> this + .joinToString(separator = "\n") { value -> + "- " + value.format() + } + + else -> this.toString() + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/EventEntity.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/EventEntity.kt new file mode 100644 index 00000000..9078d85a --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/EventEntity.kt @@ -0,0 +1,7 @@ +package com.artemchep.keyguard.provider.bitwarden.entity + +data class EventEntity( + val type: EventTypeEntity, + val cipherId: String, + val date: String, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/EventTypeEntity.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/EventTypeEntity.kt new file mode 100644 index 00000000..a04d6d5a --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/EventTypeEntity.kt @@ -0,0 +1,175 @@ +package com.artemchep.keyguard.provider.bitwarden.entity + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +enum class EventTypeEntity { + @SerialName("1000") + User_LoggedIn, + + @SerialName("1001") + User_ChangedPassword, + + @SerialName("1002") + User_Updated2fa, + + @SerialName("1003") + User_Disabled2fa, + + @SerialName("1004") + User_Recovered2fa, + + @SerialName("1005") + User_FailedLogIn, + + @SerialName("1006") + User_FailedLogIn2fa, + + @SerialName("1007") + User_ClientExportedVault, + + @SerialName("1008") + User_UpdatedTempPassword, + + @SerialName("1100") + Cipher_Created, + + @SerialName("1101") + Cipher_Updated, + + @SerialName("1102") + Cipher_Deleted, + + @SerialName("1103") + Cipher_AttachmentCreated, + + @SerialName("1104") + Cipher_AttachmentDeleted, + + @SerialName("1105") + Cipher_Shared, + + @SerialName("1106") + Cipher_UpdatedCollections, + + @SerialName("1107") + Cipher_ClientViewed, + + @SerialName("1108") + Cipher_ClientToggledPasswordVisible, + + @SerialName("1109") + Cipher_ClientToggledHiddenFieldVisible, + + @SerialName("1110") + Cipher_ClientToggledCardCodeVisible, + + @SerialName("1111") + Cipher_ClientCopiedPassword, + + @SerialName("1112") + Cipher_ClientCopiedHiddenField, + + @SerialName("1113") + Cipher_ClientCopiedCardCode, + + @SerialName("1114") + Cipher_ClientAutofilled, + + @SerialName("1115") + Cipher_SoftDeleted, + + @SerialName("1116") + Cipher_Restored, + + @SerialName("1117") + Cipher_ClientToggledCardNumberVisible, + + @SerialName("1300") + Collection_Created, + + @SerialName("1301") + Collection_Updated, + + @SerialName("1302") + Collection_Deleted, + + @SerialName("1400") + Group_Created, + + @SerialName("1401") + Group_Updated, + + @SerialName("1402") + Group_Deleted, + + @SerialName("1500") + OrganizationUser_Invited, + + @SerialName("1501") + OrganizationUser_Confirmed, + + @SerialName("1502") + OrganizationUser_Updated, + + @SerialName("1503") + OrganizationUser_Removed, + + @SerialName("1504") + OrganizationUser_UpdatedGroups, + + @SerialName("1505") + OrganizationUser_UnlinkedSso, + + @SerialName("1506") + OrganizationUser_ResetPassword_Enroll, + + @SerialName("1507") + OrganizationUser_ResetPassword_Withdraw, + + @SerialName("1508") + OrganizationUser_AdminResetPassword, + + @SerialName("1509") + OrganizationUser_ResetSsoLink, + + @SerialName("1600") + Organization_Updated, + + @SerialName("1601") + Organization_PurgedVault, + + @SerialName("1602") + Organization_ClientExportedVault, + + @SerialName("1603") + Organization_VaultAccessed, + + @SerialName("1700") + Policy_Updated, + + @SerialName("1800") + ProviderUser_Invited, + + @SerialName("1801") + ProviderUser_Confirmed, + + @SerialName("1802") + ProviderUser_Updated, + + @SerialName("1803") + ProviderUser_Removed, + + @SerialName("1900") + ProviderOrganization_Created, + + @SerialName("1901") + ProviderOrganization_Added, + + @SerialName("1902") + ProviderOrganization_Removed, + + @SerialName("1903") + ProviderOrganization_VaultAccessed, +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/FieldEntity.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/FieldEntity.kt new file mode 100644 index 00000000..387f72e5 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/FieldEntity.kt @@ -0,0 +1,21 @@ +package com.artemchep.keyguard.provider.bitwarden.entity + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import kotlinx.serialization.json.JsonNames + +@Serializable +data class FieldEntity( + @JsonNames("type") + @SerialName("Type") + val type: FieldTypeEntity, + @JsonNames("name") + @SerialName("Name") + val name: String? = null, + @JsonNames("value") + @SerialName("Value") + val value: String? = null, + @JsonNames("linkedId") + @SerialName("LinkedId") + val linkedId: LinkedIdTypeEntity? = null, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/FieldTypeEntity.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/FieldTypeEntity.kt new file mode 100644 index 00000000..815c2646 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/FieldTypeEntity.kt @@ -0,0 +1,37 @@ +package com.artemchep.keyguard.provider.bitwarden.entity + +import com.artemchep.keyguard.core.store.bitwarden.BitwardenCipher +import com.artemchep.keyguard.provider.bitwarden.entity.serializer.CommonEnumIntSerializer +import com.artemchep.keyguard.provider.bitwarden.entity.serializer.IntEnum +import kotlinx.serialization.Serializable + +@Serializable(FieldTypeEntitySerializer::class) +enum class FieldTypeEntity( + override val int: Int, +) : IntEnum { + Text(0), + Hidden(1), + Boolean(2), + Linked(3), + ; + + companion object +} + +object FieldTypeEntitySerializer : CommonEnumIntSerializer(FieldTypeEntity::class) + +fun FieldTypeEntity.Companion.of( + model: BitwardenCipher.Field.Type, +) = when (model) { + BitwardenCipher.Field.Type.Text -> FieldTypeEntity.Text + BitwardenCipher.Field.Type.Hidden -> FieldTypeEntity.Hidden + BitwardenCipher.Field.Type.Boolean -> FieldTypeEntity.Boolean + BitwardenCipher.Field.Type.Linked -> FieldTypeEntity.Linked +} + +fun FieldTypeEntity.domain() = when (this) { + FieldTypeEntity.Text -> BitwardenCipher.Field.Type.Text + FieldTypeEntity.Hidden -> BitwardenCipher.Field.Type.Hidden + FieldTypeEntity.Boolean -> BitwardenCipher.Field.Type.Boolean + FieldTypeEntity.Linked -> BitwardenCipher.Field.Type.Linked +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/FolderEntity.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/FolderEntity.kt new file mode 100644 index 00000000..e959b2c4 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/FolderEntity.kt @@ -0,0 +1,19 @@ +package com.artemchep.keyguard.provider.bitwarden.entity + +import kotlinx.datetime.Instant +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import kotlinx.serialization.json.JsonNames + +@Serializable +data class FolderEntity( + @JsonNames("id") + @SerialName("Id") + val id: String, + @JsonNames("name") + @SerialName("Name") + val name: String, + @JsonNames("revisionDate") + @SerialName("RevisionDate") + val revisionDate: Instant, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/HibpBreachResponse.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/HibpBreachResponse.kt new file mode 100644 index 00000000..129b1513 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/HibpBreachResponse.kt @@ -0,0 +1,126 @@ +package com.artemchep.keyguard.provider.bitwarden.entity + +import kotlinx.datetime.Instant +import kotlinx.datetime.LocalDate +import kotlinx.datetime.TimeZone +import kotlinx.datetime.toLocalDateTime +import kotlinx.serialization.KSerializer +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import kotlinx.serialization.descriptors.PrimitiveKind +import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor +import kotlinx.serialization.descriptors.SerialDescriptor +import kotlinx.serialization.encoding.Decoder +import kotlinx.serialization.encoding.Encoder +import kotlinx.serialization.json.JsonNames + +object FuzzyLocalDateIso8601Serializer : KSerializer { + override val descriptor: SerialDescriptor = + PrimitiveSerialDescriptor("keyguard.FuzzyLocalDate", PrimitiveKind.STRING) + + override fun deserialize(decoder: Decoder): LocalDate = kotlin.run { + val isoString = decoder.decodeString() + runCatching { + LocalDate.parse(isoString) + }.getOrElse { + Instant.parse(isoString) + .toLocalDateTime(TimeZone.UTC) + .date + } + } + + override fun serialize(encoder: Encoder, value: LocalDate) { + encoder.encodeString(value.toString()) + } + +} + +@Serializable +data class HibpBreachGroup( + val breaches: List, +) + +// See: +// https://haveibeenpwned.com/API/v3#BreachModel +@Serializable +data class HibpBreachResponse( + /** + * A Pascal-cased name representing the breach which is unique across + * all other breaches. This value never changes and may be used to name + * dependent assets (such as images) but should not be shown directly + * to end users (see the "Title" attribute instead). + */ + @JsonNames("name") + @SerialName("Name") + val name: String? = null, + /** + * A descriptive title for the breach suitable for displaying to end users. + * It's unique across all breaches but individual values may change in the future + * (i.e. if another breach occurs against an organisation already in the system). + * If a stable value is required to reference the breach, + * refer to the "Name" attribute instead. + */ + @JsonNames("title") + @SerialName("Title") + val title: String? = null, + /** + * The domain of the primary website the breach occurred on. This may be used + * for identifying other assets external systems may have for the site. + */ + @JsonNames("domain") + @SerialName("Domain") + val domain: String? = null, + /** + * The date (with no time) the breach originally occurred on in ISO 8601 format. + * This is not always accurate — frequently breaches are discovered and reported + * long after the original incident. Use this attribute as a guide only. + */ + @JsonNames("breachDate") + @SerialName("BreachDate") + @Serializable(with = FuzzyLocalDateIso8601Serializer::class) + val breachDate: LocalDate? = null, + @JsonNames("addedDate") + @SerialName("AddedDate") + @Serializable(with = FuzzyLocalDateIso8601Serializer::class) + val addedDate: LocalDate? = null, + @JsonNames("description") + @SerialName("Description") + val description: String? = null, + @JsonNames("logoPath") + @SerialName("LogoPath") + val logoPath: String? = null, + @JsonNames("pwnCount") + @SerialName("PwnCount") + val pwnCount: Int? = null, + /** + * This attribute describes the nature of the data compromised in the breach and + * contains an alphabetically ordered string array of impacted data classes. + */ + @JsonNames("dataClasses") + @SerialName("DataClasses") + val dataClasses: List = emptyList(), + /** + * Indicates that the breach is considered unverified. An unverified breach may not + * have been hacked from the indicated website. An unverified breach is still loaded + * into HIBP when there's sufficient confidence that a significant portion + * of the data is legitimate. + */ + @JsonNames("isVerified") + @SerialName("IsVerified") + val isVerified: Boolean? = null, + @JsonNames("isFabricated") + @SerialName("IsFabricated") + val isFabricated: Boolean? = null, + @JsonNames("isSensitive") + @SerialName("IsSensitive") + val isSensitive: Boolean? = null, + @JsonNames("isRetired") + @SerialName("IsRetired") + val isRetired: Boolean? = null, + @JsonNames("isSpamList") + @SerialName("IsSpamList") + val isSpamList: Boolean? = null, + @JsonNames("isMalware") + @SerialName("IsMalware") + val isMalware: Boolean? = null, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/IdentityEntity.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/IdentityEntity.kt new file mode 100644 index 00000000..32458707 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/IdentityEntity.kt @@ -0,0 +1,63 @@ +package com.artemchep.keyguard.provider.bitwarden.entity + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import kotlinx.serialization.json.JsonNames + +@Serializable +data class IdentityEntity( + @JsonNames("title") + @SerialName("Title") + val title: String? = null, + @JsonNames("firstName") + @SerialName("FirstName") + val firstName: String? = null, + @JsonNames("middleName") + @SerialName("MiddleName") + val middleName: String? = null, + @JsonNames("lastName") + @SerialName("LastName") + val lastName: String? = null, + @JsonNames("address1") + @SerialName("Address1") + val address1: String? = null, + @JsonNames("address2") + @SerialName("Address2") + val address2: String? = null, + @JsonNames("address3") + @SerialName("Address3") + val address3: String? = null, + @JsonNames("city") + @SerialName("City") + val city: String? = null, + @JsonNames("state") + @SerialName("State") + val state: String? = null, + @JsonNames("postalCode") + @SerialName("PostalCode") + val postalCode: String? = null, + @JsonNames("country") + @SerialName("Country") + val country: String? = null, + @JsonNames("company") + @SerialName("Company") + val company: String? = null, + @JsonNames("email") + @SerialName("Email") + val email: String? = null, + @JsonNames("phone") + @SerialName("Phone") + val phone: String? = null, + @JsonNames("ssn") + @SerialName("SSN") + val ssn: String? = null, + @JsonNames("username") + @SerialName("Username") + val username: String? = null, + @JsonNames("passportNumber") + @SerialName("PassportNumber") + val passportNumber: String? = null, + @JsonNames("licenseNumber") + @SerialName("LicenseNumber") + val licenseNumber: String? = null, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/LinkedIdTypeEntity.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/LinkedIdTypeEntity.kt new file mode 100644 index 00000000..ee95063e --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/LinkedIdTypeEntity.kt @@ -0,0 +1,111 @@ +package com.artemchep.keyguard.provider.bitwarden.entity + +import com.artemchep.keyguard.core.store.bitwarden.BitwardenCipher +import com.artemchep.keyguard.provider.bitwarden.entity.serializer.CommonEnumIntSerializer +import com.artemchep.keyguard.provider.bitwarden.entity.serializer.IntEnum +import kotlinx.serialization.Serializable + +@Serializable(LinkedIdTypeEntitySerializer::class) +enum class LinkedIdTypeEntity( + override val int: Int, +) : IntEnum { + Login_Username(100), + Login_Password(101), + + // card + Card_CardholderName(300), + Card_ExpMonth(301), + Card_ExpYear(302), + Card_Code(303), + Card_Brand(304), + Card_Number(305), + + // identity + Identity_Title(400), + Identity_MiddleName(401), + Identity_Address1(402), + Identity_Address2(403), + Identity_Address3(404), + Identity_City(405), + Identity_State(406), + Identity_PostalCode(407), + Identity_Country(408), + Identity_Company(409), + Identity_Email(410), + Identity_Phone(411), + Identity_Ssn(412), + Identity_Username(413), + Identity_PassportNumber(414), + Identity_LicenseNumber(415), + Identity_FirstName(416), + Identity_LastName(417), + Identity_FullName(418), + ; + + companion object +} + +object LinkedIdTypeEntitySerializer : + CommonEnumIntSerializer(LinkedIdTypeEntity::class) + +fun LinkedIdTypeEntity.Companion.of( + model: BitwardenCipher.Field.LinkedId, +) = when (model) { + BitwardenCipher.Field.LinkedId.Login_Username -> LinkedIdTypeEntity.Login_Username + BitwardenCipher.Field.LinkedId.Login_Password -> LinkedIdTypeEntity.Login_Password + BitwardenCipher.Field.LinkedId.Card_CardholderName -> LinkedIdTypeEntity.Card_CardholderName + BitwardenCipher.Field.LinkedId.Card_ExpMonth -> LinkedIdTypeEntity.Card_ExpMonth + BitwardenCipher.Field.LinkedId.Card_ExpYear -> LinkedIdTypeEntity.Card_ExpYear + BitwardenCipher.Field.LinkedId.Card_Code -> LinkedIdTypeEntity.Card_Code + BitwardenCipher.Field.LinkedId.Card_Brand -> LinkedIdTypeEntity.Card_Brand + BitwardenCipher.Field.LinkedId.Card_Number -> LinkedIdTypeEntity.Card_Number + BitwardenCipher.Field.LinkedId.Identity_Title -> LinkedIdTypeEntity.Identity_Title + BitwardenCipher.Field.LinkedId.Identity_MiddleName -> LinkedIdTypeEntity.Identity_MiddleName + BitwardenCipher.Field.LinkedId.Identity_Address1 -> LinkedIdTypeEntity.Identity_Address1 + BitwardenCipher.Field.LinkedId.Identity_Address2 -> LinkedIdTypeEntity.Identity_Address2 + BitwardenCipher.Field.LinkedId.Identity_Address3 -> LinkedIdTypeEntity.Identity_Address3 + BitwardenCipher.Field.LinkedId.Identity_City -> LinkedIdTypeEntity.Identity_City + BitwardenCipher.Field.LinkedId.Identity_State -> LinkedIdTypeEntity.Identity_State + BitwardenCipher.Field.LinkedId.Identity_PostalCode -> LinkedIdTypeEntity.Identity_PostalCode + BitwardenCipher.Field.LinkedId.Identity_Country -> LinkedIdTypeEntity.Identity_Country + BitwardenCipher.Field.LinkedId.Identity_Company -> LinkedIdTypeEntity.Identity_Company + BitwardenCipher.Field.LinkedId.Identity_Email -> LinkedIdTypeEntity.Identity_Email + BitwardenCipher.Field.LinkedId.Identity_Phone -> LinkedIdTypeEntity.Identity_Phone + BitwardenCipher.Field.LinkedId.Identity_Ssn -> LinkedIdTypeEntity.Identity_Ssn + BitwardenCipher.Field.LinkedId.Identity_Username -> LinkedIdTypeEntity.Identity_Username + BitwardenCipher.Field.LinkedId.Identity_PassportNumber -> LinkedIdTypeEntity.Identity_PassportNumber + BitwardenCipher.Field.LinkedId.Identity_LicenseNumber -> LinkedIdTypeEntity.Identity_LicenseNumber + BitwardenCipher.Field.LinkedId.Identity_FirstName -> LinkedIdTypeEntity.Identity_FirstName + BitwardenCipher.Field.LinkedId.Identity_LastName -> LinkedIdTypeEntity.Identity_LastName + BitwardenCipher.Field.LinkedId.Identity_FullName -> LinkedIdTypeEntity.Identity_FullName +} + +fun LinkedIdTypeEntity.domain() = when (this) { + LinkedIdTypeEntity.Login_Username -> BitwardenCipher.Field.LinkedId.Login_Username + LinkedIdTypeEntity.Login_Password -> BitwardenCipher.Field.LinkedId.Login_Password + LinkedIdTypeEntity.Card_CardholderName -> BitwardenCipher.Field.LinkedId.Card_CardholderName + LinkedIdTypeEntity.Card_ExpMonth -> BitwardenCipher.Field.LinkedId.Card_ExpMonth + LinkedIdTypeEntity.Card_ExpYear -> BitwardenCipher.Field.LinkedId.Card_ExpYear + LinkedIdTypeEntity.Card_Code -> BitwardenCipher.Field.LinkedId.Card_Code + LinkedIdTypeEntity.Card_Brand -> BitwardenCipher.Field.LinkedId.Card_Brand + LinkedIdTypeEntity.Card_Number -> BitwardenCipher.Field.LinkedId.Card_Number + LinkedIdTypeEntity.Identity_Title -> BitwardenCipher.Field.LinkedId.Identity_Title + LinkedIdTypeEntity.Identity_MiddleName -> BitwardenCipher.Field.LinkedId.Identity_MiddleName + LinkedIdTypeEntity.Identity_Address1 -> BitwardenCipher.Field.LinkedId.Identity_Address1 + LinkedIdTypeEntity.Identity_Address2 -> BitwardenCipher.Field.LinkedId.Identity_Address2 + LinkedIdTypeEntity.Identity_Address3 -> BitwardenCipher.Field.LinkedId.Identity_Address3 + LinkedIdTypeEntity.Identity_City -> BitwardenCipher.Field.LinkedId.Identity_City + LinkedIdTypeEntity.Identity_State -> BitwardenCipher.Field.LinkedId.Identity_State + LinkedIdTypeEntity.Identity_PostalCode -> BitwardenCipher.Field.LinkedId.Identity_PostalCode + LinkedIdTypeEntity.Identity_Country -> BitwardenCipher.Field.LinkedId.Identity_Country + LinkedIdTypeEntity.Identity_Company -> BitwardenCipher.Field.LinkedId.Identity_Company + LinkedIdTypeEntity.Identity_Email -> BitwardenCipher.Field.LinkedId.Identity_Email + LinkedIdTypeEntity.Identity_Phone -> BitwardenCipher.Field.LinkedId.Identity_Phone + LinkedIdTypeEntity.Identity_Ssn -> BitwardenCipher.Field.LinkedId.Identity_Ssn + LinkedIdTypeEntity.Identity_Username -> BitwardenCipher.Field.LinkedId.Identity_Username + LinkedIdTypeEntity.Identity_PassportNumber -> BitwardenCipher.Field.LinkedId.Identity_PassportNumber + LinkedIdTypeEntity.Identity_LicenseNumber -> BitwardenCipher.Field.LinkedId.Identity_LicenseNumber + LinkedIdTypeEntity.Identity_FirstName -> BitwardenCipher.Field.LinkedId.Identity_FirstName + LinkedIdTypeEntity.Identity_LastName -> BitwardenCipher.Field.LinkedId.Identity_LastName + LinkedIdTypeEntity.Identity_FullName -> BitwardenCipher.Field.LinkedId.Identity_FullName +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/LoginEntity.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/LoginEntity.kt new file mode 100644 index 00000000..677dda48 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/LoginEntity.kt @@ -0,0 +1,28 @@ +package com.artemchep.keyguard.provider.bitwarden.entity + +import kotlinx.datetime.Instant +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import kotlinx.serialization.json.JsonNames + +@Serializable +data class LoginEntity( + @JsonNames("uris") + @SerialName("Uris") + val uris: List? = null, + @JsonNames("username") + @SerialName("Username") + val username: String? = null, + @JsonNames("password") + @SerialName("Password") + val password: String? = null, + @JsonNames("passwordRevisionDate") + @SerialName("PasswordRevisionDate") + val passwordRevisionDate: Instant? = null, + @JsonNames("totp") + @SerialName("Totp") + val totp: String? = null, + @JsonNames("fido2Credentials") + @SerialName("Fido2Credentials") + val fido2Credentials: List? = null, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/LoginFido2CredentialsEntity.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/LoginFido2CredentialsEntity.kt new file mode 100644 index 00000000..24ed2b86 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/LoginFido2CredentialsEntity.kt @@ -0,0 +1,49 @@ +package com.artemchep.keyguard.provider.bitwarden.entity + +import kotlinx.datetime.Instant +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import kotlinx.serialization.json.JsonNames + +@Serializable +data class LoginFido2CredentialsEntity( + @JsonNames("credentialId") + @SerialName("CredentialId") + val credentialId: String? = null, + @JsonNames("keyType") + @SerialName("KeyType") + val keyType: String, + @JsonNames("keyAlgorithm") + @SerialName("KeyAlgorithm") + val keyAlgorithm: String, + @JsonNames("keyCurve") + @SerialName("KeyCurve") + val keyCurve: String, + @JsonNames("keyValue") + @SerialName("KeyValue") + val keyValue: String, + @JsonNames("rpId") + @SerialName("RpId") + val rpId: String, + @JsonNames("rpName") + @SerialName("RpName") + val rpName: String, + @JsonNames("counter") + @SerialName("Counter") + val counter: String, + @JsonNames("userHandle") + @SerialName("UserHandle") + val userHandle: String, + @JsonNames("userName") + @SerialName("UserName") + val userName: String? = null, + @JsonNames("userDisplayName") + @SerialName("UserDisplayName") + val userDisplayName: String? = null, + @JsonNames("discoverable") + @SerialName("Discoverable") + val discoverable: String, + @JsonNames("creationDate") + @SerialName("CreationDate") + val creationDate: Instant, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/LoginUriEntity.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/LoginUriEntity.kt new file mode 100644 index 00000000..531df5fb --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/LoginUriEntity.kt @@ -0,0 +1,15 @@ +package com.artemchep.keyguard.provider.bitwarden.entity + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import kotlinx.serialization.json.JsonNames + +@Serializable +data class LoginUriEntity( + @JsonNames("uri") + @SerialName("Uri") + val uri: String? = null, + @JsonNames("match") + @SerialName("Match") + val match: UriMatchTypeEntity? = null, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/OrganizationEntity.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/OrganizationEntity.kt new file mode 100644 index 00000000..eded0bd3 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/OrganizationEntity.kt @@ -0,0 +1,61 @@ +package com.artemchep.keyguard.provider.bitwarden.entity + +import kotlinx.serialization.SerialName +import kotlinx.serialization.json.JsonNames + +@kotlinx.serialization.Serializable +data class OrganizationEntity( + @JsonNames("id") + @SerialName("Id") + val id: String, + @JsonNames("key") + @SerialName("Key") + val key: String, + @JsonNames("privateKey") + @SerialName("PrivateKey") + val privateKey: String? = null, + @JsonNames("name") + @SerialName("Name") + val name: String, + @JsonNames("avatarColor") + @SerialName("AvatarColor") + val avatarColor: String? = null, + @JsonNames("status") + @SerialName("Status") + val status: OrganizationUserStatusTypeEntity, + @JsonNames("type") + @SerialName("Type") + val type: OrganizationUserTypeEntity, + @JsonNames("enabled") + @SerialName("Enabled") + val enabled: Boolean = true, +// val usePolicies: Boolean, +// val useGroups: Boolean, +// val useDirectory: Boolean, +// val useEvents: Boolean, +// val useTotp: Boolean, +// val use2fa: Boolean, +// val useApi: Boolean, +// val useSso: Boolean, +// val useResetPassword: Boolean, + @JsonNames("selfHost") + @SerialName("SelfHost") + val selfHost: Boolean = false, + @JsonNames("usersGetPremium") + @SerialName("UsersGetPremium") + val usersGetPremium: Boolean = false, + @JsonNames("seats") + @SerialName("Seats") + val seats: Int = 0, +// val maxCollections: Int, +// val maxStorageGb: Int?, +// val ssoBound: Boolean, +// val identifier: String, +// // val permissions: PermissionsApi, +// val resetPasswordEnrolled: Boolean, +// val userId: String, +// val hasPublicAndPrivateKeys: Boolean, +// val providerId: String, +// val providerName: String, +// val isProviderUser: Boolean, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/OrganizationUserStatusTypeEntity.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/OrganizationUserStatusTypeEntity.kt new file mode 100644 index 00000000..a50f4f76 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/OrganizationUserStatusTypeEntity.kt @@ -0,0 +1,16 @@ +package com.artemchep.keyguard.provider.bitwarden.entity + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +enum class OrganizationUserStatusTypeEntity { + @SerialName("0") + Invited, + + @SerialName("1") + Accepted, + + @SerialName("2") + Confirmed, +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/OrganizationUserTypeEntity.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/OrganizationUserTypeEntity.kt new file mode 100644 index 00000000..8dcfbc97 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/OrganizationUserTypeEntity.kt @@ -0,0 +1,22 @@ +package com.artemchep.keyguard.provider.bitwarden.entity + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +enum class OrganizationUserTypeEntity { + @SerialName("0") + Owner, + + @SerialName("1") + Admin, + + @SerialName("2") + User, + + @SerialName("3") + Manager, + + @SerialName("4") + Custom, +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/PasswordHistoryEntity.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/PasswordHistoryEntity.kt new file mode 100644 index 00000000..059b96c0 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/PasswordHistoryEntity.kt @@ -0,0 +1,16 @@ +package com.artemchep.keyguard.provider.bitwarden.entity + +import kotlinx.datetime.Instant +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import kotlinx.serialization.json.JsonNames + +@Serializable +data class PasswordHistoryEntity( + @JsonNames("password") + @SerialName("Password") + val password: String, + @JsonNames("lastUsedDate") + @SerialName("LastUsedDate") + val lastUsedDate: Instant, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/PolicyEntity.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/PolicyEntity.kt new file mode 100644 index 00000000..06048adb --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/PolicyEntity.kt @@ -0,0 +1,9 @@ +package com.artemchep.keyguard.provider.bitwarden.entity + +data class PolicyEntity( + val id: String, + val organizationId: String, + val type: PolicyTypeEntity, + val data: Any, + val enabled: Boolean, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/PolicyTypeEntity.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/PolicyTypeEntity.kt new file mode 100644 index 00000000..e4252948 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/PolicyTypeEntity.kt @@ -0,0 +1,51 @@ +package com.artemchep.keyguard.provider.bitwarden.entity + +import kotlinx.serialization.SerialName + +enum class PolicyTypeEntity { + // Requires users to have 2fa enabled + @SerialName("0") + TwoFactorAuthentication, + + // Sets minimum requirements for master password complexity + @SerialName("1") + MasterPassword, + + // Sets minimum requirements/default type for generated + // passwords/passphrases + @SerialName("2") + PasswordGenerator, + + // Allows users to only be apart of one organization + @SerialName("3") + SingleOrg, + + // Requires users to authenticate with SSO + @SerialName("4") + RequireSso, + + // Disables personal vault ownership for adding/cloning items + @SerialName("5") + PersonalOwnership, + + // Disables the ability to create and edit Bitwarden Sends + @SerialName("6") + DisableSend, + + // Sets restrictions or defaults for Bitwarden Sends + @SerialName("7") + SendOptions, + + // Allows organizations to use reset password, + // also can enable auto-enrollment during invite flow + @SerialName("8") + ResetPassword, + + // Sets the maximum allowed vault timeout + @SerialName("9") + MaximumVaultTimeout, + + // Disable personal vault export + @SerialName("10") + DisablePersonalVaultExport, +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/ProfileRequestEntity.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/ProfileRequestEntity.kt new file mode 100644 index 00000000..9d74edec --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/ProfileRequestEntity.kt @@ -0,0 +1,10 @@ +package com.artemchep.keyguard.provider.bitwarden.entity + +import kotlinx.serialization.Serializable + +@Serializable +data class ProfileRequestEntity( + val culture: String?, + val name: String?, + val masterPasswordHint: String?, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/ProviderEntity.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/ProviderEntity.kt new file mode 100644 index 00000000..1a7f858b --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/ProviderEntity.kt @@ -0,0 +1,11 @@ +package com.artemchep.keyguard.provider.bitwarden.entity + +data class ProviderEntity( + val id: String, + val name: String, + val status: ProviderUserStatusTypeEntity, + val type: ProviderUserTypeEntity, + val enabled: Boolean, + val userId: String, + val useEvents: Boolean, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/ProviderUserStatusTypeEntity.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/ProviderUserStatusTypeEntity.kt new file mode 100644 index 00000000..bbd78d23 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/ProviderUserStatusTypeEntity.kt @@ -0,0 +1,16 @@ +package com.artemchep.keyguard.provider.bitwarden.entity + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +enum class ProviderUserStatusTypeEntity { + @SerialName("0") + Invited, + + @SerialName("1") + Accepted, + + @SerialName("2") + Confirmed, +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/ProviderUserTypeEntity.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/ProviderUserTypeEntity.kt new file mode 100644 index 00000000..9fd161f5 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/ProviderUserTypeEntity.kt @@ -0,0 +1,13 @@ +package com.artemchep.keyguard.provider.bitwarden.entity + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +enum class ProviderUserTypeEntity { + @SerialName("0") + ProviderAdmin, + + @SerialName("1") + ServiceUser, +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/SecureNoteEntity.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/SecureNoteEntity.kt new file mode 100644 index 00000000..103257ed --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/SecureNoteEntity.kt @@ -0,0 +1,12 @@ +package com.artemchep.keyguard.provider.bitwarden.entity + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import kotlinx.serialization.json.JsonNames + +@Serializable +data class SecureNoteEntity( + @JsonNames("type") + @SerialName("Type") + val type: SecureNoteTypeEntity = SecureNoteTypeEntity.Generic, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/SecureNoteTypeEntity.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/SecureNoteTypeEntity.kt new file mode 100644 index 00000000..fb33e502 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/SecureNoteTypeEntity.kt @@ -0,0 +1,29 @@ +package com.artemchep.keyguard.provider.bitwarden.entity + +import com.artemchep.keyguard.core.store.bitwarden.BitwardenCipher +import com.artemchep.keyguard.provider.bitwarden.entity.serializer.CommonEnumIntSerializer +import com.artemchep.keyguard.provider.bitwarden.entity.serializer.IntEnum +import kotlinx.serialization.Serializable + +@Serializable(SecureNoteTypeEntitySerializer::class) +enum class SecureNoteTypeEntity( + override val int: Int, +) : IntEnum { + Generic(0), + ; + + companion object +} + +object SecureNoteTypeEntitySerializer : + CommonEnumIntSerializer(SecureNoteTypeEntity::class) + +fun SecureNoteTypeEntity.Companion.of( + model: BitwardenCipher.SecureNote.Type, +) = when (model) { + BitwardenCipher.SecureNote.Type.Generic -> SecureNoteTypeEntity.Generic +} + +fun SecureNoteTypeEntity.domain() = when (this) { + SecureNoteTypeEntity.Generic -> BitwardenCipher.SecureNote.Type.Generic +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/SendEntity.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/SendEntity.kt new file mode 100644 index 00000000..847653c6 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/SendEntity.kt @@ -0,0 +1,21 @@ +package com.artemchep.keyguard.provider.bitwarden.entity + +data class SendEntity( + val id: String, + val accessId: String, + val userId: String, + val type: SendTypeEntity, + val name: String, + val notes: String, + val file: SendFileEntity, + val text: SendTextEntity, + val key: String, + val maxAccessCount: Int?, + val accessCount: Int, + val revisionDate: String, + val expirationDate: String, + val deletionDate: String, + val password: String, + val disabled: Boolean, + val hideEmail: Boolean, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/SendFileEntity.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/SendFileEntity.kt new file mode 100644 index 00000000..9a7cafda --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/SendFileEntity.kt @@ -0,0 +1,24 @@ +package com.artemchep.keyguard.provider.bitwarden.entity + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import kotlinx.serialization.json.JsonNames + +@Serializable +data class SendFileEntity( + @JsonNames("id") + @SerialName("Id") + val id: String, + @JsonNames("fileName") + @SerialName("FileName") + val fileName: String, + @JsonNames("key") + @SerialName("Key") + val key: String? = null, + @JsonNames("size") + @SerialName("Size") + val size: String, + @JsonNames("sizeName") + @SerialName("SizeName") + val sizeName: String, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/SendTextEntity.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/SendTextEntity.kt new file mode 100644 index 00000000..8dbf299b --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/SendTextEntity.kt @@ -0,0 +1,15 @@ +package com.artemchep.keyguard.provider.bitwarden.entity + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import kotlinx.serialization.json.JsonNames + +@Serializable +data class SendTextEntity( + @JsonNames("text") + @SerialName("Text") + val text: String, + @JsonNames("hidden") + @SerialName("Hidden") + val hidden: Boolean? = null, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/SendTypeEntity.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/SendTypeEntity.kt new file mode 100644 index 00000000..5828353b --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/SendTypeEntity.kt @@ -0,0 +1,34 @@ +package com.artemchep.keyguard.provider.bitwarden.entity + +import com.artemchep.keyguard.core.store.bitwarden.BitwardenSend +import com.artemchep.keyguard.provider.bitwarden.entity.serializer.CommonEnumIntSerializer +import com.artemchep.keyguard.provider.bitwarden.entity.serializer.IntEnum +import kotlinx.serialization.Serializable + +@Serializable(SendTypeEntitySerializer::class) +enum class SendTypeEntity( + override val int: Int, +) : IntEnum { + Text(0), + File(1), + ; + + companion object +} + +object SendTypeEntitySerializer : CommonEnumIntSerializer(SendTypeEntity::class) + +fun SendTypeEntity.Companion.of( + model: BitwardenSend.Type, +) = when (model) { + BitwardenSend.Type.None -> + throw IllegalArgumentException("Unknown Send type!") + + BitwardenSend.Type.Text -> SendTypeEntity.Text + BitwardenSend.Type.File -> SendTypeEntity.File +} + +fun SendTypeEntity.domain() = when (this) { + SendTypeEntity.Text -> BitwardenSend.Type.Text + SendTypeEntity.File -> BitwardenSend.Type.File +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/SyncResponse.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/SyncResponse.kt new file mode 100644 index 00000000..cd1e65f4 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/SyncResponse.kt @@ -0,0 +1,147 @@ +package com.artemchep.keyguard.provider.bitwarden.entity + +import com.artemchep.keyguard.common.model.DProfile +import com.artemchep.keyguard.common.model.DSecret +import kotlinx.datetime.Instant +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable +import kotlinx.serialization.json.JsonNames + +@Serializable +data class SyncResponse( + @JsonNames("ciphers") + @SerialName("Ciphers") + val ciphers: List, + @JsonNames("profile") + @SerialName("Profile") + val profile: SyncProfile, +) + +@Serializable +data class SyncCipher( + @JsonNames("id") + @SerialName("Id") + val id: String, + @JsonNames("name") + @SerialName("Name") + val name: String, + @JsonNames("login") + @SerialName("Login") + val login: SyncCipherLogin? = null, + @JsonNames("revisionDate") + @SerialName("RevisionDate") + val revisionDate: Instant, +) + +@Serializable +data class SyncCipherLogin( + @JsonNames("password") + @SerialName("Password") + val password: String? = null, + @JsonNames("username") + @SerialName("Username") + val username: String? = null, +) + +@Serializable +data class SyncProfile( + @JsonNames("avatarColor") + @SerialName("AvatarColor") + val avatarColor: String? = null, + @JsonNames("culture") + @SerialName("Culture") + val culture: String, + @JsonNames("email") + @SerialName("Email") + val email: String, + @JsonNames("emailVerified") + @SerialName("EmailVerified") + val emailVerified: Boolean, + @JsonNames("id") + @SerialName("Id") + val id: String, + @JsonNames("key") + @SerialName("Key") + val key: String, + @JsonNames("privateKey") + @SerialName("PrivateKey") + val privateKey: String, + @JsonNames("masterPasswordHint") + @SerialName("MasterPasswordHint") + val masterPasswordHint: String? = null, + @JsonNames("name") + @SerialName("Name") + val name: String? = null, + @JsonNames("object") + @SerialName("Object") + val obj: String, + @JsonNames("organizations") + @SerialName("Organizations") + val organizations: List? = null, + @JsonNames("premium") + @SerialName("Premium") + val premium: Boolean, + @JsonNames("securityStamp") + @SerialName("SecurityStamp") + val securityStamp: String, + @JsonNames("twoFactorEnabled") + @SerialName("TwoFactorEnabled") + val twoFactorEnabled: Boolean, +) + +@Serializable +data class SyncSends( + @JsonNames("id") + @SerialName("Id") + val id: String, + @JsonNames("accessId") + @SerialName("AccessId") + val accessId: String, + @JsonNames("key") + @SerialName("Key") + val key: String, + @JsonNames("type") + @SerialName("Type") + val type: SendTypeEntity, + @JsonNames("name") + @SerialName("Name") + val name: String, + @JsonNames("notes") + @SerialName("Notes") + val notes: String? = null, + @JsonNames("file") + @SerialName("File") + val file: SendFileEntity? = null, + @JsonNames("text") + @SerialName("Text") + val text: SendTextEntity? = null, + @JsonNames("accessCount") + @SerialName("AccessCount") + val accessCount: Int, + @JsonNames("maxAccessCount") + @SerialName("MaxAccessCount") + val maxAccessCount: Int? = null, + @JsonNames("revisionDate") + @SerialName("RevisionDate") + val revisionDate: Instant, + @JsonNames("expirationDate") + @SerialName("ExpirationDate") + val expirationDate: Instant? = null, + @JsonNames("deletionDate") + @SerialName("DeletionDate") + val deletionDate: Instant? = null, + @JsonNames("password") + @SerialName("Password") + val password: String? = null, + @JsonNames("disabled") + @SerialName("Disabled") + val disabled: Boolean, + @JsonNames("hideEmail") + @SerialName("HideEmail") + val hideEmail: Boolean? = null, +) + +data class SyncResponseToDomainResult( + val profile: DProfile, + val secrets: List, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/TwoFactorEmailRequestEntity.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/TwoFactorEmailRequestEntity.kt new file mode 100644 index 00000000..c595171c --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/TwoFactorEmailRequestEntity.kt @@ -0,0 +1,10 @@ +package com.artemchep.keyguard.provider.bitwarden.entity + +import kotlinx.serialization.Serializable + +@Serializable +data class TwoFactorEmailRequestEntity( + val email: String, + val masterPasswordHash: String, + val deviceIdentifier: String, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/TwoFactorProviderTypeEntity.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/TwoFactorProviderTypeEntity.kt new file mode 100644 index 00000000..dcfe0519 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/TwoFactorProviderTypeEntity.kt @@ -0,0 +1,63 @@ +package com.artemchep.keyguard.provider.bitwarden.entity + +import com.artemchep.keyguard.provider.bitwarden.model.TwoFactorProviderType +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +enum class TwoFactorProviderTypeEntity { + @SerialName("-1") + Unknown, + + @SerialName("0") + Authenticator, + + @SerialName("1") + Email, + + @SerialName("2") + Duo, + + @SerialName("3") + YubiKey, + + @SerialName("4") + U2f, + + @SerialName("5") + Remember, + + @SerialName("6") + OrganizationDuo, + + @SerialName("7") + Fido2WebAuthn, + + ; + + companion object { + fun of(type: TwoFactorProviderType) = when (type) { + TwoFactorProviderType.Unknown -> Unknown + TwoFactorProviderType.Authenticator -> Authenticator + TwoFactorProviderType.Email -> Email + TwoFactorProviderType.Duo -> Duo + TwoFactorProviderType.YubiKey -> YubiKey + TwoFactorProviderType.U2f -> U2f + TwoFactorProviderType.Remember -> Remember + TwoFactorProviderType.OrganizationDuo -> OrganizationDuo + TwoFactorProviderType.Fido2WebAuthn -> Fido2WebAuthn + } + } +} + +fun TwoFactorProviderTypeEntity.toDomain(): TwoFactorProviderType = when (this) { + TwoFactorProviderTypeEntity.Unknown -> TwoFactorProviderType.Unknown + TwoFactorProviderTypeEntity.Authenticator -> TwoFactorProviderType.Authenticator + TwoFactorProviderTypeEntity.Email -> TwoFactorProviderType.Email + TwoFactorProviderTypeEntity.Duo -> TwoFactorProviderType.Duo + TwoFactorProviderTypeEntity.YubiKey -> TwoFactorProviderType.YubiKey + TwoFactorProviderTypeEntity.U2f -> TwoFactorProviderType.U2f + TwoFactorProviderTypeEntity.Remember -> TwoFactorProviderType.Remember + TwoFactorProviderTypeEntity.OrganizationDuo -> TwoFactorProviderType.OrganizationDuo + TwoFactorProviderTypeEntity.Fido2WebAuthn -> TwoFactorProviderType.Fido2WebAuthn +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/UriMatchTypeEntity.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/UriMatchTypeEntity.kt new file mode 100644 index 00000000..beec6a79 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/UriMatchTypeEntity.kt @@ -0,0 +1,44 @@ +package com.artemchep.keyguard.provider.bitwarden.entity + +import com.artemchep.keyguard.core.store.bitwarden.BitwardenCipher +import com.artemchep.keyguard.provider.bitwarden.entity.serializer.CommonEnumIntSerializer +import com.artemchep.keyguard.provider.bitwarden.entity.serializer.IntEnum +import kotlinx.serialization.Serializable + +@Serializable(UriMatchTypeEntitySerializer::class) +enum class UriMatchTypeEntity( + override val int: Int, +) : IntEnum { + Domain(0), + Host(1), + StartsWith(2), + Exact(3), + RegularExpression(4), + Never(5), + ; + + companion object +} + +object UriMatchTypeEntitySerializer : + CommonEnumIntSerializer(UriMatchTypeEntity::class) + +fun UriMatchTypeEntity.Companion.of( + model: BitwardenCipher.Login.Uri.MatchType, +) = when (model) { + BitwardenCipher.Login.Uri.MatchType.Domain -> UriMatchTypeEntity.Domain + BitwardenCipher.Login.Uri.MatchType.Host -> UriMatchTypeEntity.Host + BitwardenCipher.Login.Uri.MatchType.StartsWith -> UriMatchTypeEntity.StartsWith + BitwardenCipher.Login.Uri.MatchType.Exact -> UriMatchTypeEntity.Exact + BitwardenCipher.Login.Uri.MatchType.RegularExpression -> UriMatchTypeEntity.RegularExpression + BitwardenCipher.Login.Uri.MatchType.Never -> UriMatchTypeEntity.Never +} + +fun UriMatchTypeEntity.domain() = when (this) { + UriMatchTypeEntity.Domain -> BitwardenCipher.Login.Uri.MatchType.Domain + UriMatchTypeEntity.Host -> BitwardenCipher.Login.Uri.MatchType.Host + UriMatchTypeEntity.StartsWith -> BitwardenCipher.Login.Uri.MatchType.StartsWith + UriMatchTypeEntity.Exact -> BitwardenCipher.Login.Uri.MatchType.Exact + UriMatchTypeEntity.RegularExpression -> BitwardenCipher.Login.Uri.MatchType.RegularExpression + UriMatchTypeEntity.Never -> BitwardenCipher.Login.Uri.MatchType.Never +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/api/FieldApi.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/api/FieldApi.kt new file mode 100644 index 00000000..16305251 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/api/FieldApi.kt @@ -0,0 +1,38 @@ +package com.artemchep.keyguard.provider.bitwarden.entity.api + +import com.artemchep.keyguard.core.store.bitwarden.BitwardenCipher +import com.artemchep.keyguard.provider.bitwarden.entity.FieldTypeEntity +import com.artemchep.keyguard.provider.bitwarden.entity.LinkedIdTypeEntity +import com.artemchep.keyguard.provider.bitwarden.entity.of +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class FieldApi( + @SerialName("type") + val type: FieldTypeEntity, + @SerialName("name") + val name: String?, + @SerialName("value") + val value: String?, + @SerialName("linkedId") + val linkedId: LinkedIdTypeEntity?, +) { + companion object +} + +fun FieldApi.Companion.of( + model: BitwardenCipher.Field, +) = kotlin.run { + val type = FieldTypeEntity.of(model.type) + val linkedId = model.linkedId + ?.let { + LinkedIdTypeEntity.of(it) + } + FieldApi( + type = type, + name = model.name, + value = model.value, + linkedId = linkedId, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/api/IdentityRequest.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/api/IdentityRequest.kt new file mode 100644 index 00000000..ed01abc5 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/api/IdentityRequest.kt @@ -0,0 +1,72 @@ +package com.artemchep.keyguard.provider.bitwarden.entity.api + +import com.artemchep.keyguard.core.store.bitwarden.BitwardenCipher +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class IdentityRequest( + @SerialName("title") + val title: String?, + @SerialName("firstName") + val firstName: String?, + @SerialName("middleName") + val middleName: String?, + @SerialName("lastName") + val lastName: String?, + @SerialName("address1") + val address1: String?, + @SerialName("address2") + val address2: String?, + @SerialName("address3") + val address3: String?, + @SerialName("city") + val city: String?, + @SerialName("state") + val state: String?, + @SerialName("postalCode") + val postalCode: String?, + @SerialName("country") + val country: String?, + @SerialName("company") + val company: String?, + @SerialName("email") + val email: String?, + @SerialName("phone") + val phone: String?, + @SerialName("ssn") + val ssn: String?, + @SerialName("username") + val username: String?, + @SerialName("passportNumber") + val passportNumber: String?, + @SerialName("licenseNumber") + val licenseNumber: String?, +) { + companion object +} + +fun IdentityRequest.Companion.of( + model: BitwardenCipher.Identity, +) = kotlin.run { + IdentityRequest( + title = model.title, + firstName = model.firstName, + middleName = model.middleName, + lastName = model.lastName, + address1 = model.address1, + address2 = model.address2, + address3 = model.address3, + city = model.city, + state = model.state, + postalCode = model.postalCode, + country = model.country, + company = model.company, + email = model.email, + phone = model.phone, + ssn = model.ssn, + username = model.username, + passportNumber = model.passportNumber, + licenseNumber = model.licenseNumber, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/api/LoginFido2CredentialsRequest.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/api/LoginFido2CredentialsRequest.kt new file mode 100644 index 00000000..f034bfa5 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/api/LoginFido2CredentialsRequest.kt @@ -0,0 +1,58 @@ +package com.artemchep.keyguard.provider.bitwarden.entity.api + +import com.artemchep.keyguard.core.store.bitwarden.BitwardenCipher +import kotlinx.datetime.Instant +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class LoginFido2CredentialsRequest( + @SerialName("credentialId") + val credentialId: String? = null, + @SerialName("keyType") + val keyType: String, + @SerialName("keyAlgorithm") + val keyAlgorithm: String, + @SerialName("keyCurve") + val keyCurve: String, + @SerialName("keyValue") + val keyValue: String, + @SerialName("rpId") + val rpId: String, + @SerialName("rpName") + val rpName: String, + @SerialName("counter") + val counter: String, + @SerialName("userHandle") + val userHandle: String, + @SerialName("userName") + val userName: String?, + @SerialName("userDisplayName") + val userDisplayName: String?, + @SerialName("discoverable") + val discoverable: String, + @SerialName("creationDate") + val creationDate: Instant, +) { + companion object +} + +fun LoginFido2CredentialsRequest.Companion.of( + model: BitwardenCipher.Login.Fido2Credentials, +) = kotlin.run { + LoginFido2CredentialsRequest( + credentialId = model.credentialId, + keyType = model.keyType, + keyAlgorithm = model.keyAlgorithm, + keyCurve = model.keyCurve, + keyValue = model.keyValue, + rpId = model.rpId, + rpName = model.rpName, + counter = model.counter, + userHandle = model.userHandle, + userName = model.userName, + userDisplayName = model.userDisplayName, + discoverable = model.discoverable, + creationDate = model.creationDate, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/api/LoginRequest.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/api/LoginRequest.kt new file mode 100644 index 00000000..2a12b1fe --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/api/LoginRequest.kt @@ -0,0 +1,43 @@ +package com.artemchep.keyguard.provider.bitwarden.entity.api + +import com.artemchep.keyguard.core.store.bitwarden.BitwardenCipher +import kotlinx.datetime.Instant +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class LoginRequest( + @SerialName("fido2Credentials") + val fido2Credentials: List, + @SerialName("uris") + val uris: List, + @SerialName("username") + val username: String?, + @SerialName("password") + val password: String?, + @SerialName("passwordRevisionDate") + val passwordRevisionDate: Instant?, + @SerialName("totp") + val totp: String?, +) { + companion object +} + +fun LoginRequest.Companion.of( + model: BitwardenCipher.Login, +) = kotlin.run { + val fido2CredentialsRequests = model + .fido2Credentials + .map(LoginFido2CredentialsRequest::of) + val urisRequests = model + .uris + .map(LoginUriRequest::of) + LoginRequest( + fido2Credentials = fido2CredentialsRequests, + uris = urisRequests, + username = model.username, + password = model.password, + passwordRevisionDate = model.passwordRevisionDate, + totp = model.totp, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/api/LoginUriRequest.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/api/LoginUriRequest.kt new file mode 100644 index 00000000..4176bb72 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/api/LoginUriRequest.kt @@ -0,0 +1,26 @@ +package com.artemchep.keyguard.provider.bitwarden.entity.api + +import com.artemchep.keyguard.core.store.bitwarden.BitwardenCipher +import com.artemchep.keyguard.provider.bitwarden.entity.UriMatchTypeEntity +import com.artemchep.keyguard.provider.bitwarden.entity.of +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class LoginUriRequest( + @SerialName("uri") + val uri: String, + @SerialName("match") + val match: UriMatchTypeEntity?, +) { + companion object +} + +fun LoginUriRequest.Companion.of( + model: BitwardenCipher.Login.Uri, +) = kotlin.run { + LoginUriRequest( + uri = model.uri.orEmpty(), + match = model.match?.let(UriMatchTypeEntity::of), + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/api/SecureNoteRequest.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/api/SecureNoteRequest.kt new file mode 100644 index 00000000..9ba41e77 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/api/SecureNoteRequest.kt @@ -0,0 +1,21 @@ +package com.artemchep.keyguard.provider.bitwarden.entity.api + +import com.artemchep.keyguard.core.store.bitwarden.BitwardenCipher +import com.artemchep.keyguard.provider.bitwarden.entity.SecureNoteTypeEntity +import com.artemchep.keyguard.provider.bitwarden.entity.of +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class SecureNoteRequest( + @SerialName("type") + val type: SecureNoteTypeEntity, +) + +fun SecureNoteRequest.Companion.of( + model: BitwardenCipher.SecureNote, +) = kotlin.run { + SecureNoteRequest( + type = model.type.let(SecureNoteTypeEntity::of), + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/api/SendFileApi.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/api/SendFileApi.kt new file mode 100644 index 00000000..1e60fdd8 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/api/SendFileApi.kt @@ -0,0 +1,18 @@ +package com.artemchep.keyguard.provider.bitwarden.entity.api + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class SendFileApi( + @SerialName("id") + val id: String, + @SerialName("fileName") + val fileName: String, + @SerialName("key") + val key: String, + @SerialName("size") + val size: String, + @SerialName("sizeName") + val sizeName: String, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/api/SendTextApi.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/api/SendTextApi.kt new file mode 100644 index 00000000..ea42d657 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/api/SendTextApi.kt @@ -0,0 +1,12 @@ +package com.artemchep.keyguard.provider.bitwarden.entity.api + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class SendTextApi( + @SerialName("text") + val text: String, + @SerialName("hidden") + val hidden: Boolean, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/request/AttachmentRequest.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/request/AttachmentRequest.kt new file mode 100644 index 00000000..e651719e --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/request/AttachmentRequest.kt @@ -0,0 +1,25 @@ +package com.artemchep.keyguard.provider.bitwarden.entity.request + +import com.artemchep.keyguard.core.store.bitwarden.BitwardenCipher +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class AttachmentRequest( + @SerialName("fileName") + val fileName: String, + @SerialName("key") + val key: String, +// @SerialName("fileSize") +// val fileSize: Long, +) + +fun AttachmentRequest.Companion.of( + model: BitwardenCipher.Attachment.Remote, +) = kotlin.run { + AttachmentRequest( + fileName = model.fileName, + key = model.keyBase64, +// fileSize = model.size, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/request/CardRequest.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/request/CardRequest.kt new file mode 100644 index 00000000..e9e49c1b --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/request/CardRequest.kt @@ -0,0 +1,36 @@ +package com.artemchep.keyguard.provider.bitwarden.entity.request + +import com.artemchep.keyguard.core.store.bitwarden.BitwardenCipher +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class CardRequest( + @SerialName("cardholderName") + val cardholderName: String?, + @SerialName("brand") + val brand: String?, + @SerialName("number") + val number: String?, + @SerialName("expMonth") + val expMonth: String?, + @SerialName("expYear") + val expYear: String?, + @SerialName("code") + val code: String?, +) { + companion object +} + +fun CardRequest.Companion.of( + model: BitwardenCipher.Card, +) = kotlin.run { + CardRequest( + cardholderName = model.cardholderName, + brand = model.brand, + number = model.number, + expMonth = model.expMonth, + expYear = model.expYear, + code = model.code, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/request/CipherCollectionsRequest.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/request/CipherCollectionsRequest.kt new file mode 100644 index 00000000..7592b32d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/request/CipherCollectionsRequest.kt @@ -0,0 +1,10 @@ +package com.artemchep.keyguard.provider.bitwarden.entity.request + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class CipherCollectionsRequest( + @SerialName("collectionIds") + val collectionIds: List, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/request/CipherCreateRequest.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/request/CipherCreateRequest.kt new file mode 100644 index 00000000..034e1595 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/request/CipherCreateRequest.kt @@ -0,0 +1,26 @@ +package com.artemchep.keyguard.provider.bitwarden.entity.request + +import com.artemchep.keyguard.core.store.bitwarden.BitwardenCipher +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class CipherCreateRequest( + @SerialName("cipher") + val cipher: CipherRequest, + @SerialName("collectionIds") + val collectionIds: Set, +) + +fun CipherCreateRequest.Companion.of( + model: BitwardenCipher, + folders: Map, +) = kotlin.run { + CipherCreateRequest( + cipher = CipherRequest.of( + model = model, + folders = folders, + ), + collectionIds = model.collectionIds, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/request/CipherRequest.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/request/CipherRequest.kt new file mode 100644 index 00000000..2c900e11 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/request/CipherRequest.kt @@ -0,0 +1,117 @@ +package com.artemchep.keyguard.provider.bitwarden.entity.request + +import com.artemchep.keyguard.core.store.bitwarden.BitwardenCipher +import com.artemchep.keyguard.provider.bitwarden.entity.CipherRepromptTypeEntity +import com.artemchep.keyguard.provider.bitwarden.entity.CipherTypeEntity +import com.artemchep.keyguard.provider.bitwarden.entity.api.FieldApi +import com.artemchep.keyguard.provider.bitwarden.entity.api.IdentityRequest +import com.artemchep.keyguard.provider.bitwarden.entity.api.LoginRequest +import com.artemchep.keyguard.provider.bitwarden.entity.api.SecureNoteRequest +import com.artemchep.keyguard.provider.bitwarden.entity.api.of +import com.artemchep.keyguard.provider.bitwarden.entity.of +import kotlinx.datetime.Instant +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class CipherRequest( + @SerialName("type") + val type: CipherTypeEntity, + @SerialName("organizationId") + val organizationId: String?, + @SerialName("folderId") + val folderId: String?, + @SerialName("name") + val name: String?, + @SerialName("notes") + val notes: String?, + @SerialName("favorite") + val favorite: Boolean, + @SerialName("login") + val login: LoginRequest?, + @SerialName("secureNote") + val secureNote: SecureNoteRequest?, + @SerialName("card") + val card: CardRequest?, + @SerialName("identity") + val identity: IdentityRequest?, + @SerialName("fields") + val fields: List?, + @SerialName("passwordHistory") + val passwordHistory: List?, + @SerialName("attachments") + val attachments: Map?, + @SerialName("attachments2") + val attachments2: Map?, + @SerialName("lastKnownRevisionDate") + val lastKnownRevisionDate: Instant?, + @SerialName("reprompt") + val reprompt: CipherRepromptTypeEntity, +) { + companion object +} + +fun CipherRequest.Companion.of( + model: BitwardenCipher, + folders: Map, +) = kotlin.run { + val type = CipherTypeEntity.of(model.type) + val reprompt = CipherRepromptTypeEntity.of(model.reprompt) + val login = model.login + ?.let { login -> + LoginRequest.of(login) + } + val secureNote = model.secureNote + ?.let(SecureNoteRequest::of) + val card = model.card + ?.let(CardRequest::of) + val identity = model.identity + ?.let(IdentityRequest::of) + val fields = model.fields + .map { field -> + FieldApi.of(field) + } + .takeUnless { it.isEmpty() } + val passwordHistory = model.login?.passwordHistory.orEmpty() + .map { passwordHistory -> + PasswordHistoryRequest.of(passwordHistory) + } + .takeUnless { it.isEmpty() } + val (attachments, attachments2) = kotlin.run { + val tmp = model.attachments + .mapNotNull { it as? BitwardenCipher.Attachment.Remote } + .associateBy { it.id } + if (tmp.isEmpty()) { + return@run null to null + } + val attachments = tmp + .mapValues { it.value.fileName } + val attachments2 = tmp + .mapValues { + AttachmentRequest.of(it.value) + } + attachments to attachments2 + } + + CipherRequest( + type = type, + organizationId = model.organizationId, + folderId = model.folderId + // Folders might not include the folder id of this cipher, and + // that could be cause because the folder was deleted. + ?.let { folders[it] }, + name = model.name, + notes = model.notes, + favorite = model.favorite, + login = login, + secureNote = secureNote, + card = card, + identity = identity, + fields = fields, + passwordHistory = passwordHistory, + attachments = attachments, + attachments2 = attachments2, + lastKnownRevisionDate = model.service.remote?.revisionDate, + reprompt = reprompt, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/request/CipherShareRequest.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/request/CipherShareRequest.kt new file mode 100644 index 00000000..fe912991 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/request/CipherShareRequest.kt @@ -0,0 +1,12 @@ +package com.artemchep.keyguard.provider.bitwarden.entity.request + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class CipherShareRequest( + @SerialName("cipher") + val cipher: CipherRequest, + @SerialName("collectionIds") + val collectionIds: List, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/request/CipherUpdate.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/request/CipherUpdate.kt new file mode 100644 index 00000000..d2fc927b --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/request/CipherUpdate.kt @@ -0,0 +1,62 @@ +package com.artemchep.keyguard.provider.bitwarden.entity.request + +import com.artemchep.keyguard.core.store.bitwarden.BitwardenCipher + +sealed interface CipherUpdate { + companion object; + + val source: BitwardenCipher + + data class Modify( + override val source: BitwardenCipher, + val cipherId: String, + val cipherRequest: CipherRequest, + ) : CipherUpdate + + data class Create( + override val source: BitwardenCipher, + val cipherRequest: CipherRequest, + ) : CipherUpdate + + data class CreateInOrg( + override val source: BitwardenCipher, + val cipherRequest: CipherCreateRequest, + ) : CipherUpdate +} + +fun CipherUpdate.Companion.of( + model: BitwardenCipher, + folders: Map, +) = when { + model.service.remote != null -> { + CipherUpdate.Modify( + source = model, + cipherId = model.service.remote.id, + cipherRequest = CipherRequest.of( + model = model, + folders = folders, + ), + ) + } + // Remote ID does not exist, therefore the items has not yet + // been created on remote. + model.organizationId != null -> { + CipherUpdate.CreateInOrg( + source = model, + cipherRequest = CipherCreateRequest.of( + model = model, + folders = folders, + ), + ) + } + + else -> { + CipherUpdate.Create( + source = model, + cipherRequest = CipherRequest.of( + model = model, + folders = folders, + ), + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/request/DeleteAccountRequest.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/request/DeleteAccountRequest.kt new file mode 100644 index 00000000..5a842c53 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/request/DeleteAccountRequest.kt @@ -0,0 +1,12 @@ +package com.artemchep.keyguard.provider.bitwarden.entity.request + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class DeleteAccountRequest( + @SerialName("masterPasswordHash") + val masterPasswordHash: String, + @SerialName("otp") + val otp: String? = null, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/request/FolderRequest.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/request/FolderRequest.kt new file mode 100644 index 00000000..a2ea9e15 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/request/FolderRequest.kt @@ -0,0 +1,19 @@ +package com.artemchep.keyguard.provider.bitwarden.entity.request + +import com.artemchep.keyguard.core.store.bitwarden.BitwardenFolder +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class FolderRequest( + @SerialName("name") + val name: String, +) + +fun FolderRequest.Companion.of( + model: BitwardenFolder, +) = kotlin.run { + FolderRequest( + name = model.name, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/request/FolderUpdate.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/request/FolderUpdate.kt new file mode 100644 index 00000000..b4120390 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/request/FolderUpdate.kt @@ -0,0 +1,43 @@ +package com.artemchep.keyguard.provider.bitwarden.entity.request + +import com.artemchep.keyguard.core.store.bitwarden.BitwardenFolder + +sealed interface FolderUpdate { + companion object; + + val source: BitwardenFolder + + data class Modify( + override val source: BitwardenFolder, + val folderId: String, + val folderRequest: FolderRequest, + ) : FolderUpdate + + data class Create( + override val source: BitwardenFolder, + val folderRequest: FolderRequest, + ) : FolderUpdate +} + +fun FolderUpdate.Companion.of( + model: BitwardenFolder, +) = when { + model.service.remote != null -> kotlin.run { + FolderUpdate.Modify( + source = model, + folderId = model.service.remote.id, + folderRequest = FolderRequest.of( + model = model, + ), + ) + } + + else -> { + FolderUpdate.Create( + source = model, + folderRequest = FolderRequest.of( + model = model, + ), + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/request/PasswordHistoryRequest.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/request/PasswordHistoryRequest.kt new file mode 100644 index 00000000..808f4370 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/request/PasswordHistoryRequest.kt @@ -0,0 +1,23 @@ +package com.artemchep.keyguard.provider.bitwarden.entity.request + +import com.artemchep.keyguard.core.store.bitwarden.BitwardenCipher +import kotlinx.datetime.Instant +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class PasswordHistoryRequest( + @SerialName("password") + val password: String, + @SerialName("lastUsedDate") + val lastUsedDate: Instant, +) + +fun PasswordHistoryRequest.Companion.of( + model: BitwardenCipher.Login.PasswordHistory, +) = kotlin.run { + PasswordHistoryRequest( + password = model.password, + lastUsedDate = model.lastUsedDate, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/request/SendRequest.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/request/SendRequest.kt new file mode 100644 index 00000000..523ad412 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/request/SendRequest.kt @@ -0,0 +1,59 @@ +package com.artemchep.keyguard.provider.bitwarden.entity.request + +import com.artemchep.keyguard.provider.bitwarden.entity.SendTypeEntity +import kotlinx.datetime.Instant +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +data class SendRequest( + @SerialName("type") + val type: SendTypeEntity, + @SerialName("name") + val name: String, + @SerialName("notes") + val notes: String?, + @SerialName("password") + val password: String? = null, + @SerialName("disabled") + val disabled: Boolean, + /** + * `true` to hide the email of the author of the + * send, `false` otherwise. + */ + @SerialName("hideEmail") + val hideEmail: Boolean, + @SerialName("deletionDate") + val deletionDate: Instant, + @SerialName("expirationDate") + val expirationDate: Instant?, + @SerialName("maxAccessCount") + val maxAccessCount: Int?, + @SerialName("text") + val text: SendTextRequest?, + @SerialName("file") + val file: SendFileRequest?, +) + +@Serializable +data class SendTextRequest( + @SerialName("name") + val name: String, + @SerialName("notes") + val notes: String, + @SerialName("password") + val password: String? = null, + val type: SendTypeEntity, +) + + +@Serializable +data class SendFileRequest( + @SerialName("name") + val name: String, + @SerialName("notes") + val notes: String, + @SerialName("password") + val password: String? = null, + val type: SendTypeEntity, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/serializer/CommonEnumIntSerializer.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/serializer/CommonEnumIntSerializer.kt new file mode 100644 index 00000000..8da1c4d5 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/entity/serializer/CommonEnumIntSerializer.kt @@ -0,0 +1,33 @@ +package com.artemchep.keyguard.provider.bitwarden.entity.serializer + +import kotlinx.serialization.KSerializer +import kotlinx.serialization.builtins.serializer +import kotlinx.serialization.encoding.Decoder +import kotlinx.serialization.encoding.Encoder +import kotlin.reflect.KClass + +interface IntEnum { + val int: Int +} + +open class CommonEnumIntSerializer( + clazz: KClass, +) : KSerializer where T : Enum, T : IntEnum { + override val descriptor = Int.serializer().descriptor + + private val choices = clazz.java.enumConstants!! + + init { + val uniqueChoices = choices.distinctBy { it.int } + require(uniqueChoices.size == choices.size) + } + + final override fun serialize(encoder: Encoder, value: T) { + encoder.encodeInt(value.int) + } + + final override fun deserialize(decoder: Decoder): T { + val value = decoder.decodeInt() + return choices.first { it.int == value } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/mapper/CipherMapping.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/mapper/CipherMapping.kt new file mode 100644 index 00000000..5f27bd32 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/mapper/CipherMapping.kt @@ -0,0 +1,223 @@ +package com.artemchep.keyguard.provider.bitwarden.mapper + +import com.artemchep.keyguard.common.io.attempt +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.model.DSecret +import com.artemchep.keyguard.common.model.PasswordStrength +import com.artemchep.keyguard.common.model.TotpToken +import com.artemchep.keyguard.common.usecase.GetPasswordStrength +import com.artemchep.keyguard.core.store.bitwarden.BitwardenCipher + +suspend fun BitwardenCipher.toDomain( + getPasswordStrength: GetPasswordStrength, +): DSecret { + val type: DSecret.Type = when (type) { + BitwardenCipher.Type.Login -> DSecret.Type.Login + BitwardenCipher.Type.SecureNote -> DSecret.Type.SecureNote + BitwardenCipher.Type.Card -> DSecret.Type.Card + BitwardenCipher.Type.Identity -> DSecret.Type.Identity + } + return DSecret( + id = cipherId, + accountId = accountId, + folderId = folderId, + organizationId = organizationId, + collectionIds = collectionIds, + revisionDate = revisionDate, + createdDate = createdDate, + deletedDate = deletedDate, + service = service, + // common + name = name.orEmpty(), + notes = notes.orEmpty(), + favorite = favorite, + reprompt = reprompt == BitwardenCipher.RepromptType.Password, + synced = !service.deleted && + revisionDate == service.remote?.revisionDate, + uris = login?.uris.orEmpty().map(BitwardenCipher.Login.Uri::toDomain), + fields = fields.map(BitwardenCipher.Field::toDomain), + attachments = attachments + .mapNotNull { attachment -> + when (attachment) { + is BitwardenCipher.Attachment.Remote -> { + val remoteCipherId = service.remote?.id + ?: return@mapNotNull null // must not happen + attachment.toDomain(remoteCipherId = remoteCipherId) + } + + is BitwardenCipher.Attachment.Local -> attachment.toDomain() + } + }, + // types + type = type, + login = login?.toDomain(getPasswordStrength), + card = card?.toDomain(), + identity = identity?.toDomain(), + ) +} + +fun BitwardenCipher.Login.Uri.toDomain() = DSecret.Uri( + uri = uri.orEmpty(), + match = match?.toDomain(), +) + +fun BitwardenCipher.Login.Uri.MatchType.toDomain() = when (this) { + BitwardenCipher.Login.Uri.MatchType.Domain -> DSecret.Uri.MatchType.Domain + BitwardenCipher.Login.Uri.MatchType.Host -> DSecret.Uri.MatchType.Host + BitwardenCipher.Login.Uri.MatchType.StartsWith -> DSecret.Uri.MatchType.StartsWith + BitwardenCipher.Login.Uri.MatchType.Exact -> DSecret.Uri.MatchType.Exact + BitwardenCipher.Login.Uri.MatchType.RegularExpression -> DSecret.Uri.MatchType.RegularExpression + BitwardenCipher.Login.Uri.MatchType.Never -> DSecret.Uri.MatchType.Never +} + +fun BitwardenCipher.Field.toDomain() = DSecret.Field( + name = name, + value = value, + type = type.toDomain(), + linkedId = linkedId?.toDomain(), +) + +fun BitwardenCipher.Field.Type.toDomain() = when (this) { + BitwardenCipher.Field.Type.Boolean -> DSecret.Field.Type.Boolean + BitwardenCipher.Field.Type.Text -> DSecret.Field.Type.Text + BitwardenCipher.Field.Type.Hidden -> DSecret.Field.Type.Hidden + BitwardenCipher.Field.Type.Linked -> DSecret.Field.Type.Linked +} + +fun BitwardenCipher.Field.LinkedId.toDomain() = when (this) { + BitwardenCipher.Field.LinkedId.Login_Username -> DSecret.Field.LinkedId.Login_Username + BitwardenCipher.Field.LinkedId.Login_Password -> DSecret.Field.LinkedId.Login_Password + BitwardenCipher.Field.LinkedId.Card_CardholderName -> DSecret.Field.LinkedId.Card_CardholderName + BitwardenCipher.Field.LinkedId.Card_ExpMonth -> DSecret.Field.LinkedId.Card_ExpMonth + BitwardenCipher.Field.LinkedId.Card_ExpYear -> DSecret.Field.LinkedId.Card_ExpYear + BitwardenCipher.Field.LinkedId.Card_Code -> DSecret.Field.LinkedId.Card_Code + BitwardenCipher.Field.LinkedId.Card_Brand -> DSecret.Field.LinkedId.Card_Brand + BitwardenCipher.Field.LinkedId.Card_Number -> DSecret.Field.LinkedId.Card_Number + BitwardenCipher.Field.LinkedId.Identity_Title -> DSecret.Field.LinkedId.Identity_Title + BitwardenCipher.Field.LinkedId.Identity_MiddleName -> DSecret.Field.LinkedId.Identity_MiddleName + BitwardenCipher.Field.LinkedId.Identity_Address1 -> DSecret.Field.LinkedId.Identity_Address1 + BitwardenCipher.Field.LinkedId.Identity_Address2 -> DSecret.Field.LinkedId.Identity_Address2 + BitwardenCipher.Field.LinkedId.Identity_Address3 -> DSecret.Field.LinkedId.Identity_Address3 + BitwardenCipher.Field.LinkedId.Identity_City -> DSecret.Field.LinkedId.Identity_City + BitwardenCipher.Field.LinkedId.Identity_State -> DSecret.Field.LinkedId.Identity_State + BitwardenCipher.Field.LinkedId.Identity_PostalCode -> DSecret.Field.LinkedId.Identity_PostalCode + BitwardenCipher.Field.LinkedId.Identity_Country -> DSecret.Field.LinkedId.Identity_Country + BitwardenCipher.Field.LinkedId.Identity_Company -> DSecret.Field.LinkedId.Identity_Company + BitwardenCipher.Field.LinkedId.Identity_Email -> DSecret.Field.LinkedId.Identity_Email + BitwardenCipher.Field.LinkedId.Identity_Phone -> DSecret.Field.LinkedId.Identity_Phone + BitwardenCipher.Field.LinkedId.Identity_Ssn -> DSecret.Field.LinkedId.Identity_Ssn + BitwardenCipher.Field.LinkedId.Identity_Username -> DSecret.Field.LinkedId.Identity_Username + BitwardenCipher.Field.LinkedId.Identity_PassportNumber -> DSecret.Field.LinkedId.Identity_PassportNumber + BitwardenCipher.Field.LinkedId.Identity_LicenseNumber -> DSecret.Field.LinkedId.Identity_LicenseNumber + BitwardenCipher.Field.LinkedId.Identity_FirstName -> DSecret.Field.LinkedId.Identity_FirstName + BitwardenCipher.Field.LinkedId.Identity_LastName -> DSecret.Field.LinkedId.Identity_LastName + BitwardenCipher.Field.LinkedId.Identity_FullName -> DSecret.Field.LinkedId.Identity_FullName +} + +fun BitwardenCipher.Attachment.Remote.toDomain( + remoteCipherId: String, +) = DSecret.Attachment.Remote( + id = id, + remoteCipherId = remoteCipherId, + url = url, + fileName = fileName, + keyBase64 = keyBase64, + size = size, +) + +fun BitwardenCipher.Attachment.Local.toDomain() = DSecret.Attachment.Local( + id = id, + url = url, + fileName = fileName, + size = size, +) + +suspend fun BitwardenCipher.Login.toDomain( + getPasswordStrength: GetPasswordStrength, +) = DSecret.Login( + username = username, + password = password, + passwordStrength = passwordStrength?.toDomain() ?: password?.let { + getPasswordStrength(it).attempt().bind().getOrNull() + }, + passwordRevisionDate = passwordRevisionDate, + passwordHistory = passwordHistory.map(BitwardenCipher.Login.PasswordHistory::toDomain), + totp = totp + ?.let { raw -> + TotpToken + .parse(raw) + .map { token -> + DSecret.Login.Totp( + raw = raw, + token = token, + ) + } + .getOrNull() + }, + fido2Credentials = fido2Credentials + .map { credentials -> + val counter = credentials.counter + .toIntOrNull() + val discoverable = credentials.discoverable.toBoolean() + DSecret.Login.Fido2Credentials( + credentialId = credentials.credentialId + // It should never be empty, as it doesn't really make sense. + // An empty credential ID should not be accepted by the server. + .orEmpty(), + keyType = credentials.keyType, + keyAlgorithm = credentials.keyAlgorithm, + keyCurve = credentials.keyCurve, + keyValue = credentials.keyValue, + rpId = credentials.rpId, + rpName = credentials.rpName, + counter = counter, + userHandle = credentials.userHandle, + userName = credentials.userName, + userDisplayName = credentials.userDisplayName, + discoverable = discoverable, + creationDate = credentials.creationDate, + ) + }, +) + +fun BitwardenCipher.Login.PasswordHistory.toDomain() = DSecret.Login.PasswordHistory( + password = password, + lastUsedDate = lastUsedDate, +) + +fun BitwardenCipher.Login.PasswordStrength.toDomain() = PasswordStrength( + crackTimeSeconds = crackTimeSeconds, + version = version, +) + +fun BitwardenCipher.Card.toDomain() = DSecret.Card( + cardholderName = cardholderName.oh(), + brand = brand.oh(), + number = number.oh(), + expMonth = expMonth.oh(), + expYear = expYear.oh(), + code = code.oh(), +) + +fun BitwardenCipher.Identity.toDomain() = DSecret.Identity( + title = title.oh(), + firstName = firstName.oh(), + middleName = middleName.oh(), + lastName = lastName.oh(), + address1 = address1.oh(), + address2 = address2.oh(), + address3 = address3.oh(), + city = city.oh(), + state = state.oh(), + postalCode = postalCode.oh(), + country = country.oh(), + company = company.oh(), + email = email.oh(), + phone = phone.oh(), + ssn = ssn.oh(), + username = username.oh(), + passportNumber = passportNumber.oh(), + licenseNumber = licenseNumber.oh(), +) + +private fun String?.oh() = this?.takeIf { it.isNotBlank() } diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/mapper/CollectionMapping.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/mapper/CollectionMapping.kt new file mode 100644 index 00000000..2798bba9 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/mapper/CollectionMapping.kt @@ -0,0 +1,16 @@ +package com.artemchep.keyguard.provider.bitwarden.mapper + +import com.artemchep.keyguard.common.model.DCollection +import com.artemchep.keyguard.core.store.bitwarden.BitwardenCollection + +fun BitwardenCollection.toDomain(): DCollection { + return DCollection( + id = collectionId, + organizationId = organizationId, + accountId = accountId, + revisionDate = revisionDate, + name = name, + readOnly = readOnly, + hidePasswords = hidePasswords, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/mapper/FolderMapping.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/mapper/FolderMapping.kt new file mode 100644 index 00000000..4804deb6 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/mapper/FolderMapping.kt @@ -0,0 +1,17 @@ +package com.artemchep.keyguard.provider.bitwarden.mapper + +import com.artemchep.keyguard.common.model.DFolder +import com.artemchep.keyguard.core.store.bitwarden.BitwardenFolder + +fun BitwardenFolder.toDomain(): DFolder { + return DFolder( + id = folderId, + accountId = accountId, + revisionDate = revisionDate, + service = service, + name = name, + deleted = service.deleted, + synced = !service.deleted && + revisionDate == service.remote?.revisionDate, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/mapper/MetaMapping.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/mapper/MetaMapping.kt new file mode 100644 index 00000000..cf8ba92d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/mapper/MetaMapping.kt @@ -0,0 +1,22 @@ +package com.artemchep.keyguard.provider.bitwarden.mapper + +import com.artemchep.keyguard.common.model.AccountId +import com.artemchep.keyguard.common.model.DMeta +import com.artemchep.keyguard.core.store.bitwarden.BitwardenMeta + +fun BitwardenMeta.toDomain(): DMeta = DMeta( + accountId = AccountId(accountId), + lastSyncTimestamp = lastSyncTimestamp, + lastSyncResult = lastSyncResult?.toDomain(), +) + +private fun BitwardenMeta.LastSyncResult.toDomain(): DMeta.LastSyncResult = when (this) { + is BitwardenMeta.LastSyncResult.Failure -> + DMeta.LastSyncResult.Failure( + timestamp = timestamp, + reason = reason, + requiresAuthentication = requiresAuthentication, + ) + + is BitwardenMeta.LastSyncResult.Success -> DMeta.LastSyncResult.Success +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/mapper/OrganizationMapping.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/mapper/OrganizationMapping.kt new file mode 100644 index 00000000..f53c99e8 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/mapper/OrganizationMapping.kt @@ -0,0 +1,44 @@ +package com.artemchep.keyguard.provider.bitwarden.mapper + +import androidx.compose.ui.graphics.Color +import com.artemchep.keyguard.common.model.DOrganization +import com.artemchep.keyguard.common.util.RGBToHSL +import com.artemchep.keyguard.common.util.toColorInt +import com.artemchep.keyguard.core.store.bitwarden.BitwardenOrganization +import com.artemchep.keyguard.ui.icons.generateAccentColors + +fun BitwardenOrganization.toDomain(): DOrganization { + val accentColor = run { + val avatarColor = runCatching { + avatarColor + ?.toColorInt() + ?.let(::Color) + ?.let { color -> + val hsl = FloatArray(3) + RGBToHSL( + rf = color.red, + gf = color.green, + bf = color.blue, + outHsl = hsl, + ) + generateAccentColors( + hue = hsl[0], + ) + } + }.getOrNull() + avatarColor + ?: run { + val colors = generateAccentColors(organizationId) + colors + } + } + return DOrganization( + id = organizationId, + accountId = accountId, + revisionDate = revisionDate, + keyBase64 = keyBase64, + name = name, + accentColor = accentColor, + selfHost = selfHost, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/mapper/ProfileMapping.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/mapper/ProfileMapping.kt new file mode 100644 index 00000000..446b3353 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/mapper/ProfileMapping.kt @@ -0,0 +1,55 @@ +package com.artemchep.keyguard.provider.bitwarden.mapper + +import androidx.compose.ui.graphics.Color +import com.artemchep.keyguard.common.model.DProfile +import com.artemchep.keyguard.common.util.RGBToHSL +import com.artemchep.keyguard.common.util.toColorInt +import com.artemchep.keyguard.core.store.bitwarden.BitwardenProfile +import com.artemchep.keyguard.ui.icons.generateAccentColors + +fun BitwardenProfile.toDomain( + accountHost: String, + accountUrl: String, +): DProfile { + val accentColor = run { + val avatarColor = runCatching { + avatarColor + ?.toColorInt() + ?.let(::Color) + ?.let { color -> + val hsl = FloatArray(3) + RGBToHSL( + rf = color.red, + gf = color.green, + bf = color.blue, + outHsl = hsl, + ) + generateAccentColors( + hue = hsl[0], + ) + } + }.getOrNull() + avatarColor + ?: run { + val colors = generateAccentColors(profileId) + colors + } + } + return DProfile( + accountId = accountId, + profileId = profileId, + email = email, + emailVerified = emailVerified, + keyBase64 = keyBase64, + privateKeyBase64 = privateKeyBase64, + accentColor = accentColor, + accountHost = accountHost, + accountUrl = accountUrl, + name = name, + premium = premium, + securityStamp = securityStamp, + twoFactorEnabled = twoFactorEnabled, + masterPasswordHint = masterPasswordHint, + unofficialServer = unofficialServer, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/mapper/SendMapping.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/mapper/SendMapping.kt new file mode 100644 index 00000000..f173192e --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/mapper/SendMapping.kt @@ -0,0 +1,48 @@ +package com.artemchep.keyguard.provider.bitwarden.mapper + +import com.artemchep.keyguard.common.model.DSend +import com.artemchep.keyguard.core.store.bitwarden.BitwardenSend + +suspend fun BitwardenSend.toDomain( +): DSend { + val type: DSend.Type = when (type) { + BitwardenSend.Type.None -> DSend.Type.None + BitwardenSend.Type.Text -> DSend.Type.Text + BitwardenSend.Type.File -> DSend.Type.File + } + return DSend( + id = sendId, + accountId = accountId, + accessId = accessId, + keyBase64 = keyBase64, + revisionDate = revisionDate, + createdDate = createdDate, + deletedDate = deletedDate, + expirationDate = expirationDate, + service = service, + // common + name = name.orEmpty(), + notes = notes.orEmpty(), + accessCount = accessCount, + maxAccessCount = maxAccessCount, + disabled = disabled, + hideEmail = hideEmail ?: false, + password = password, + // types + type = type, + text = text?.toDomain(), + file = file?.toDomain(), + ) +} + +fun BitwardenSend.Text.toDomain() = DSend.Text( + text = text, + hidden = hidden, +) + +fun BitwardenSend.File.toDomain() = DSend.File( + id = id, + fileName = fileName, + keyBase64 = keyBase64, + size = size, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/mapper/TokenMapping.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/mapper/TokenMapping.kt new file mode 100644 index 00000000..9fb116eb --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/mapper/TokenMapping.kt @@ -0,0 +1,22 @@ +package com.artemchep.keyguard.provider.bitwarden.mapper + +import com.artemchep.keyguard.common.model.AccountId +import com.artemchep.keyguard.common.model.DAccount +import com.artemchep.keyguard.core.store.bitwarden.BitwardenToken +import com.artemchep.keyguard.provider.bitwarden.api.builder.buildHost +import com.artemchep.keyguard.provider.bitwarden.api.builder.buildIconsRequestUrl +import com.artemchep.keyguard.provider.bitwarden.api.builder.buildWebVaultUrl + +fun BitwardenToken.toDomain(): DAccount { + val environment = env.back() + return DAccount( + id = AccountId(id), + username = user.email, + host = environment.buildHost(), + url = environment.buildWebVaultUrl(), + faviconServer = { domain -> + environment + .buildIconsRequestUrl(domain) + }, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/model/LastSyncStatus.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/model/LastSyncStatus.kt new file mode 100644 index 00000000..aafc75e5 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/model/LastSyncStatus.kt @@ -0,0 +1,10 @@ +package com.artemchep.keyguard.provider.bitwarden.model + +import kotlinx.datetime.Instant +import kotlinx.serialization.Serializable + +@Serializable +data class LastSyncStatus( + val accountId: String, + val timestamp: Instant, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/model/Login.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/model/Login.kt new file mode 100644 index 00000000..0abf4242 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/model/Login.kt @@ -0,0 +1,11 @@ +package com.artemchep.keyguard.provider.bitwarden.model + +import kotlinx.datetime.Instant + +data class Login( + val accessToken: String, + val accessTokenType: String, + val accessTokenExpiryDate: Instant, + val refreshToken: String, + val scope: String?, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/model/PasswordResult.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/model/PasswordResult.kt new file mode 100644 index 00000000..6d96ed82 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/model/PasswordResult.kt @@ -0,0 +1,30 @@ +package com.artemchep.keyguard.provider.bitwarden.model + +data class PasswordResult( + val masterKey: ByteArray, + val passwordKey: ByteArray, + val encryptionKey: ByteArray, + val macKey: ByteArray, +) { + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + + other as PasswordResult + + if (!masterKey.contentEquals(other.masterKey)) return false + if (!passwordKey.contentEquals(other.passwordKey)) return false + if (!encryptionKey.contentEquals(other.encryptionKey)) return false + if (!macKey.contentEquals(other.macKey)) return false + + return true + } + + override fun hashCode(): Int { + var result = masterKey.contentHashCode() + result = 31 * result + passwordKey.contentHashCode() + result = 31 * result + encryptionKey.contentHashCode() + result = 31 * result + macKey.contentHashCode() + return result + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/model/PreLogin.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/model/PreLogin.kt new file mode 100644 index 00000000..07099207 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/model/PreLogin.kt @@ -0,0 +1,26 @@ +package com.artemchep.keyguard.provider.bitwarden.model + +data class PreLogin( + val hash: Hash, +) { + sealed interface Hash { + data class Pbkdf2( + val iterationsCount: Int, + ) : Hash { + init { + require(iterationsCount > 0) + } + } + + data class Argon2id( + val iterationsCount: Int, + val memoryMb: Int, + val parallelism: Int, + ) : Hash { + init { + require(iterationsCount > 0) + require(memoryMb > 0) + } + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/model/TwoFactorProvider.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/model/TwoFactorProvider.kt new file mode 100644 index 00000000..25185c3a --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/model/TwoFactorProvider.kt @@ -0,0 +1,62 @@ +package com.artemchep.keyguard.provider.bitwarden.model + +import com.artemchep.keyguard.platform.CurrentPlatform +import com.artemchep.keyguard.platform.Platform +import com.artemchep.keyguard.res.Res +import dev.icerock.moko.resources.StringResource + +data class TwoFactorProvider( + val type: TwoFactorProviderType, + val name: StringResource, + val priority: Int, + val supported: Boolean = false, +) { + companion object { + val state = mapOf( + TwoFactorProviderType.Authenticator to TwoFactorProvider( + type = TwoFactorProviderType.Authenticator, + name = Res.strings.provider_2fa_authenticator, + priority = 10, + supported = true, + ), + TwoFactorProviderType.YubiKey to TwoFactorProvider( + type = TwoFactorProviderType.YubiKey, + name = Res.strings.provider_2fa_yubikey, + priority = 30, + supported = true, + ), + TwoFactorProviderType.Duo to TwoFactorProvider( + type = TwoFactorProviderType.Duo, + name = Res.strings.provider_2fa_duo, + priority = 20, + supported = CurrentPlatform is Platform.Mobile, + ), + TwoFactorProviderType.OrganizationDuo to TwoFactorProvider( + type = TwoFactorProviderType.OrganizationDuo, + name = Res.strings.provider_2fa_duo_organization, + priority = 21, + supported = CurrentPlatform is Platform.Mobile, + ), + TwoFactorProviderType.Fido2WebAuthn to TwoFactorProvider( + type = TwoFactorProviderType.Fido2WebAuthn, + name = Res.strings.provider_2fa_fido2_webauthn, + priority = 50, + supported = CurrentPlatform is Platform.Mobile, + ), + TwoFactorProviderType.Email to TwoFactorProvider( + type = TwoFactorProviderType.Email, + name = Res.strings.provider_2fa_email, + priority = 0, + supported = true, + ), + // As far as I understand the U2f is replaced by the Fido2WebAuthn + // provider. Therefore most likely this is never going to be implemented. + TwoFactorProviderType.U2f to TwoFactorProvider( + type = TwoFactorProviderType.U2f, + name = Res.strings.provider_2fa_fido_u2f, + priority = 40, + supported = false, + ), + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/model/TwoFactorProviderArgument.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/model/TwoFactorProviderArgument.kt new file mode 100644 index 00000000..43f2f607 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/model/TwoFactorProviderArgument.kt @@ -0,0 +1,49 @@ +package com.artemchep.keyguard.provider.bitwarden.model + +import kotlinx.serialization.json.JsonElement + +sealed interface TwoFactorProviderArgument { + val type: TwoFactorProviderType + + data object Authenticator : TwoFactorProviderArgument { + override val type get() = TwoFactorProviderType.Authenticator + } + + data class Email( + val email: String? = null, + ) : TwoFactorProviderArgument { + override val type get() = TwoFactorProviderType.Email + } + + data class Duo( + val host: String? = null, + val signature: String? = null, + ) : TwoFactorProviderArgument { + override val type get() = TwoFactorProviderType.Duo + } + + data object YubiKey : TwoFactorProviderArgument { + override val type get() = TwoFactorProviderType.YubiKey + } + + data object U2f : TwoFactorProviderArgument { + override val type get() = TwoFactorProviderType.U2f + } + + data object Remember : TwoFactorProviderArgument { + override val type get() = TwoFactorProviderType.Remember + } + + data class OrganizationDuo( + val host: String? = null, + val signature: String? = null, + ) : TwoFactorProviderArgument { + override val type get() = TwoFactorProviderType.OrganizationDuo + } + + data class Fido2WebAuthn( + val json: JsonElement? = null, + ) : TwoFactorProviderArgument { + override val type get() = TwoFactorProviderType.Fido2WebAuthn + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/model/TwoFactorProviderType.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/model/TwoFactorProviderType.kt new file mode 100644 index 00000000..ca035b6f --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/model/TwoFactorProviderType.kt @@ -0,0 +1,25 @@ +package com.artemchep.keyguard.provider.bitwarden.model + +enum class TwoFactorProviderType { + Unknown, + Authenticator, + Email, + Duo, + YubiKey, + U2f, + Remember, + OrganizationDuo, + Fido2WebAuthn, +} + +fun TwoFactorProviderType.toObj(): TwoFactorProviderArgument? = when (this) { + TwoFactorProviderType.Unknown -> null + TwoFactorProviderType.Authenticator -> TwoFactorProviderArgument.Authenticator + TwoFactorProviderType.Email -> TwoFactorProviderArgument.Email() + TwoFactorProviderType.Duo -> TwoFactorProviderArgument.Duo() + TwoFactorProviderType.YubiKey -> TwoFactorProviderArgument.YubiKey + TwoFactorProviderType.U2f -> TwoFactorProviderArgument.U2f + TwoFactorProviderType.Remember -> TwoFactorProviderArgument.Remember + TwoFactorProviderType.OrganizationDuo -> TwoFactorProviderArgument.OrganizationDuo() + TwoFactorProviderType.Fido2WebAuthn -> TwoFactorProviderArgument.Fido2WebAuthn() +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/repository/BaseRepository.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/repository/BaseRepository.kt new file mode 100644 index 00000000..49ee8961 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/repository/BaseRepository.kt @@ -0,0 +1,17 @@ +package com.artemchep.keyguard.provider.bitwarden.repository + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.toIO +import kotlinx.coroutines.flow.Flow + +interface BaseRepository { + fun get(): Flow> + + /** + * Returns the first state of the + * data. + */ + fun getSnapshot(): IO> = get().toIO() + + fun put(model: T): IO +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/repository/BitwardenCipherRepository.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/repository/BitwardenCipherRepository.kt new file mode 100644 index 00000000..6f4668ce --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/repository/BitwardenCipherRepository.kt @@ -0,0 +1,8 @@ +package com.artemchep.keyguard.provider.bitwarden.repository + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.core.store.bitwarden.BitwardenCipher + +interface BitwardenCipherRepository : BaseRepository { + fun getById(id: String): IO +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/repository/BitwardenCollectionRepository.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/repository/BitwardenCollectionRepository.kt new file mode 100644 index 00000000..85cb04be --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/repository/BitwardenCollectionRepository.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.provider.bitwarden.repository + +import com.artemchep.keyguard.core.store.bitwarden.BitwardenCollection + +interface BitwardenCollectionRepository : BaseRepository diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/repository/BitwardenFolderRepository.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/repository/BitwardenFolderRepository.kt new file mode 100644 index 00000000..ecbf1543 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/repository/BitwardenFolderRepository.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.provider.bitwarden.repository + +import com.artemchep.keyguard.core.store.bitwarden.BitwardenFolder + +interface BitwardenFolderRepository : BaseRepository diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/repository/BitwardenMetaRepository.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/repository/BitwardenMetaRepository.kt new file mode 100644 index 00000000..39dbd411 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/repository/BitwardenMetaRepository.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.provider.bitwarden.repository + +import com.artemchep.keyguard.core.store.bitwarden.BitwardenMeta + +interface BitwardenMetaRepository : BaseRepository diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/repository/BitwardenOrganizationRepository.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/repository/BitwardenOrganizationRepository.kt new file mode 100644 index 00000000..412690dc --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/repository/BitwardenOrganizationRepository.kt @@ -0,0 +1,9 @@ +package com.artemchep.keyguard.provider.bitwarden.repository + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.AccountId +import com.artemchep.keyguard.core.store.bitwarden.BitwardenOrganization + +interface BitwardenOrganizationRepository : BaseRepository { + fun getByAccountId(id: AccountId): IO> +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/repository/BitwardenProfileRepository.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/repository/BitwardenProfileRepository.kt new file mode 100644 index 00000000..3de584b5 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/repository/BitwardenProfileRepository.kt @@ -0,0 +1,9 @@ +package com.artemchep.keyguard.provider.bitwarden.repository + +import com.artemchep.keyguard.common.model.AccountId +import com.artemchep.keyguard.core.store.bitwarden.BitwardenProfile +import kotlinx.coroutines.flow.Flow + +interface BitwardenProfileRepository : BaseRepository { + fun getById(id: AccountId): Flow +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/repository/BitwardenSendRepository.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/repository/BitwardenSendRepository.kt new file mode 100644 index 00000000..b9475006 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/repository/BitwardenSendRepository.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.provider.bitwarden.repository + +import com.artemchep.keyguard.core.store.bitwarden.BitwardenSend + +interface BitwardenSendRepository : BaseRepository { +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/repository/BitwardenTokenRepository.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/repository/BitwardenTokenRepository.kt new file mode 100644 index 00000000..edba9c62 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/repository/BitwardenTokenRepository.kt @@ -0,0 +1,9 @@ +package com.artemchep.keyguard.provider.bitwarden.repository + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.AccountId +import com.artemchep.keyguard.core.store.bitwarden.BitwardenToken + +interface BitwardenTokenRepository : BaseRepository { + fun getById(id: AccountId): IO +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/sync/SyncManager.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/sync/SyncManager.kt new file mode 100644 index 00000000..9222266d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/sync/SyncManager.kt @@ -0,0 +1,203 @@ +package com.artemchep.keyguard.provider.bitwarden.sync + +import com.artemchep.keyguard.common.util.millis +import com.artemchep.keyguard.core.store.bitwarden.BitwardenService +import com.artemchep.keyguard.core.store.bitwarden.canRetry +import kotlinx.datetime.Instant +import kotlin.math.roundToLong + +class SyncManager, Remote : Any>( + private val local: LensLocal, + private val remote: Lens, +) { + class Lens( + val getId: (T) -> String, + val getRevisionDate: (T) -> Instant, + val getDeletedDate: (T) -> Instant? = { null }, + ) + + class LensLocal( + val getLocalId: (T) -> String, + val getLocalRevisionDate: (T) -> Instant, + val getLocalDeletedDate: (T) -> Instant? = { null }, + ) + + data class Df( + // Delete items + val remoteDeletedCipherIds: List>, + val localDeletedCipherIds: List>, + // Put items + val remotePutCipher: List>, + val localPutCipher: List>, + ) { + data class Ite( + val local: Local, + val remote: Remote, + ) + } + + private fun getDate(model: Remote) = getDate( + revisionDate = remote.getRevisionDate(model), + deletedDate = remote.getDeletedDate(model), + ) + + private fun getDate(model: Local) = getDate( + revisionDate = local.getLocalRevisionDate(model), + deletedDate = local.getLocalDeletedDate(model), + ) + + private fun getDate( + revisionDate: Instant, + deletedDate: Instant?, + ) = deletedDate?.let(revisionDate::coerceAtLeast) + ?: revisionDate + + /** + * Calculates the difference between local and remote + * representations of a server, allowing you to easily sync + * them with each other. + */ + fun df( + localItems: Collection, + remoteItems: Collection, + shouldOverwrite: (Local, Remote) -> Boolean, + ): Df { + // Delete items + val remoteDeletedCipherIds = mutableListOf>() + val localDeletedCipherIds = mutableListOf>() + // Put items + val remotePutCipher = mutableListOf>() + val localPutCipher = mutableListOf>() + + val localItemsGrouped = localItems + .groupBy { + it.service.remote != null + } + val localItemsNew = localItemsGrouped + .getOrDefault(false, emptyList()) // no remote + val localItemsExistingByRemoteId = localItemsGrouped + .getOrDefault(true, emptyList()) // remote + .asSequence() + .map { localItem -> + val id = requireNotNull(localItem.service.remote?.id) + id to localItem + } + .toMap(mutableMapOf()) + + remoteItems.forEach { remoteItem -> + val remoteItemId = remote.getId(remoteItem) + val localItem = localItemsExistingByRemoteId + .remove(remoteItemId) + if (localItem != null) { + // TODO: Replace it with a migration mechanism + if (localItem.service.version < BitwardenService.VERSION) { + localPutCipher += Df.Ite(localItem, remoteItem) + return@forEach + } + + // FIXME: After we create something, the date is + // -- + // 2022-09-21T14:04:33.1819975Z + // -- + // but after we get the same entry using the sync + // API the revision date is some-why rounded to: + // -- + // 2022-09-21T14:04:33.1833333Z + // -- + // for now we round the revision date to + // -- + // 2022-09-21T14:04:33.18 + // -- + fun Instant.roundToMillis() = millis.toDouble().div(100.0).roundToLong() + + val localRemoteRevDate = kotlin.run { + val date = getDate( + revisionDate = localItem.service.remote?.revisionDate + ?: Instant.DISTANT_PAST, + deletedDate = localItem.service.remote?.deletedDate, + ) + date.roundToMillis() + } + // If the local item has outdated remote revision, then it must + // be updated and any of its changes are going to be discarded. + // + // Why: + // This is needed to resolve a conflict where you edit one item + // on multiple devices simultaneously. + val remoteRevDate = getDate(remoteItem).roundToMillis() + if (remoteRevDate != localRemoteRevDate) { + localPutCipher += Df.Ite(localItem, remoteItem) + return@forEach + } + + val diff = kotlin.run { + val localRevDate = getDate(localItem).roundToMillis() + localRevDate.compareTo(remoteRevDate) + } + when { + diff < 0 -> localPutCipher += Df.Ite(localItem, remoteItem) + diff > 0 -> { + if (localItem.service.deleted) { + remoteDeletedCipherIds += Df.Ite(localItem, remoteItem) + } else { + val error = localItem.service.error + val revisionDate = getDate(localItem) + if (error?.canRetry(revisionDate) != false) { + remotePutCipher += Df.Ite(localItem, remoteItem) + } + } + } + + else -> { + // Date rounding error can happen because Bitwarden rounds the + // revision date. We can not safely resolve this issue, so just + // fall back to the remote item. + val dateRoundingError = getDate(remoteItem) != getDate(localItem) + if (dateRoundingError || localItem.service.error != null) { + localPutCipher += Df.Ite(localItem, remoteItem) + } else { + val hasChanged = shouldOverwrite(localItem, remoteItem) + if (hasChanged) { + localPutCipher += Df.Ite(localItem, remoteItem) + } else { + // Up to date. + } + } + } + } + } else { + localPutCipher += Df.Ite(null, remoteItem) + } + } + + // The item has remote id, but the remote items + // do not have it -- therefore it has deleted on remote. + localDeletedCipherIds += localItemsExistingByRemoteId + .map { (_, localItem) -> + Df.Ite(localItem, null) + } + + // + // Handle new items + // + + localItemsNew.forEach { localItem -> + if (localItem.service.deleted) { + localDeletedCipherIds += Df.Ite(localItem, null) + } else { + val error = localItem.service.error + val revisionDate = getDate(localItem) + if (error?.canRetry(revisionDate) != false) { + remotePutCipher += Df.Ite(localItem, null) + } + } + } + + return Df( + remoteDeletedCipherIds = remoteDeletedCipherIds, + localDeletedCipherIds = localDeletedCipherIds, + remotePutCipher = remotePutCipher, + localPutCipher = localPutCipher, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/AddCipher.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/AddCipher.kt new file mode 100644 index 00000000..35260bef --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/AddCipher.kt @@ -0,0 +1,557 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.attempt +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.io.combine +import com.artemchep.keyguard.common.io.effectMap +import com.artemchep.keyguard.common.io.flatMap +import com.artemchep.keyguard.common.io.io +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.io.map +import com.artemchep.keyguard.common.model.AccountId +import com.artemchep.keyguard.common.model.DSecret +import com.artemchep.keyguard.common.model.create.CreateRequest +import com.artemchep.keyguard.common.service.crypto.CryptoGenerator +import com.artemchep.keyguard.common.usecase.AddCipher +import com.artemchep.keyguard.common.usecase.AddFolder +import com.artemchep.keyguard.common.usecase.GetPasswordStrength +import com.artemchep.keyguard.core.store.bitwarden.BitwardenCipher +import com.artemchep.keyguard.core.store.bitwarden.BitwardenService +import com.artemchep.keyguard.feature.confirmation.organization.FolderInfo +import com.artemchep.keyguard.provider.bitwarden.usecase.util.ModifyDatabase +import kotlinx.collections.immutable.toPersistentList +import kotlinx.datetime.Clock +import kotlinx.datetime.Instant +import org.kodein.di.DirectDI +import org.kodein.di.instance + +/** + * @author Artem Chepurnyi + */ +class AddCipherImpl( + private val modifyDatabase: ModifyDatabase, + private val addFolder: AddFolder, + private val cryptoGenerator: CryptoGenerator, + private val getPasswordStrength: GetPasswordStrength, +) : AddCipher { + companion object { + private const val TAG = "AddCipher.bitwarden" + + private const val FILES_DIR = "attachments_pending" + } + + constructor(directDI: DirectDI) : this( + modifyDatabase = directDI.instance(), + addFolder = directDI.instance(), + cryptoGenerator = directDI.instance(), + getPasswordStrength = directDI.instance(), + ) + + override fun invoke( + cipherIdsToRequests: Map, + ): IO> = ioEffect { + cipherIdsToRequests + .mapValues { (_, request) -> + copyLocalFilesToInternalStorageIo(request) + .bind() + } + .mapValues { (key, request) -> + val value = request.ownership2!! + val folderId = when (val folder = value.folder) { + is FolderInfo.None -> null + is FolderInfo.New -> { + val accountId = AccountId(value.accountId!!) + val rq = mapOf( + accountId to folder.name, + ) + val rs = addFolder(rq) + .bind() + rs.first() + } + + is FolderInfo.Id -> folder.id + } + val own = CreateRequest.Ownership( + accountId = value.accountId, + folderId = folderId, + organizationId = value.organizationId, + collectionIds = value.collectionIds, + ) + request.copy(ownership = own) + } + }.flatMap { map -> + modifyDatabase { database -> + val dao = database.cipherQueries + val now = Clock.System.now() + + val oldCiphersMap = map + .keys + .filterNotNull() + .mapNotNull { cipherId -> + dao + .getByCipherId(cipherId) + .executeAsOneOrNull() + } + .associateBy { it.cipherId } + + val models = map + .map { (cipherId, request) -> + val old = oldCiphersMap[cipherId]?.data_ + BitwardenCipher.of( + cryptoGenerator = cryptoGenerator, + getPasswordStrength = getPasswordStrength, + now = now, + request = request, + old = old, + ) + } + if (models.isEmpty()) { + return@modifyDatabase ModifyDatabase.Result( + changedAccountIds = emptySet(), + value = emptyList(), + ) + } + dao.transaction { + models.forEach { cipher -> + dao.insert( + cipherId = cipher.cipherId, + accountId = cipher.accountId, + folderId = cipher.folderId, + data = cipher, + ) + } + } + + val changedAccountIds = models + .map { AccountId(it.accountId) } + .toSet() + ModifyDatabase.Result( + changedAccountIds = changedAccountIds, + value = models + .map { it.cipherId }, + ) + } + } + + private fun copyLocalFilesToInternalStorageIo( + request: CreateRequest, + ): IO = request + .attachments + .mapNotNull { attachment -> + when (attachment) { + is CreateRequest.Attachment.Remote -> io(attachment) + is CreateRequest.Attachment.Local -> null +// copyLocalFileToInternalStorageIo(attachment.uri) +// .effectMap { file -> +// val uri = file.toUri() +// val size = attachment.size +// ?: withContext(Dispatchers.IO) { file.length() } +// attachment.copy( +// uri = uri, +// size = size, +// ) +// } + } + } + .combine(bucket = 2) + .effectMap { attachments -> + val list = attachments + .toPersistentList() + request.copy(attachments = list) + } + +// private fun copyLocalFileToInternalStorageIo( +// uri: Uri, +// ): IO = ioEffect(Dispatchers.IO) { +// val dstDir = context.filesDir.resolve("$FILES_DIR/") +// // If the URI points to a file, check if it is already in the +// // internal storage. +// if (uri.scheme == "file") { +// val srcFile = uri.toFile() +// +// // A parent directory must match the destination directory. +// val existsInDstDir = generateSequence(srcFile) { it.parentFile } +// .any { it == dstDir } +// if (existsInDstDir) { +// return@ioEffect srcFile +// } +// } +// +// val dstFileName = cryptoGenerator.uuid() + ".tmp" +// val dstFile = dstDir.resolve(dstFileName) +// // In case the dst folder does not exist. +// dstFile.parentFile?.mkdirs() +// +// // Copy source resource into the dst file. +// val srcInputStream = context.contentResolver.openInputStream(uri) +// requireNotNull(srcInputStream) { +// "The content provider has crashed, failed to access the resource!" +// } +// srcInputStream.use { input -> +// dstFile.outputStream().use { output -> +// input.copyTo(output) +// } +// } +// +// dstFile +// } +} + +private suspend fun BitwardenCipher.Companion.of( + cryptoGenerator: CryptoGenerator, + getPasswordStrength: GetPasswordStrength, + request: CreateRequest, + now: Instant, + old: BitwardenCipher? = null, +): BitwardenCipher { + val accountId = request.ownership?.accountId + val folderId = request.ownership?.folderId + val organizationId = request.ownership?.organizationId + val collectionIds = request.ownership?.collectionIds.orEmpty() + require(old?.service?.deleted != true) { + "Can not modify deleted cipher!" + } + requireNotNull(accountId) { "Cipher must have an account!" } + require(organizationId == null || collectionIds.isNotEmpty()) { + "When a cipher belongs to an organization, it must have at " + + "least one collection!" + } + + val favourite = request.favorite!! + val reprompt = when (request.reprompt!!) { + true -> BitwardenCipher.RepromptType.Password + false -> BitwardenCipher.RepromptType.None + } + val type = when (request.type) { + DSecret.Type.Login -> BitwardenCipher.Type.Login + DSecret.Type.SecureNote -> BitwardenCipher.Type.SecureNote + DSecret.Type.Card -> BitwardenCipher.Type.Card + DSecret.Type.Identity -> BitwardenCipher.Type.Identity + null, + DSecret.Type.None, + -> error("Cipher must have a type!") + } + + var login: BitwardenCipher.Login? = null + var secureNote: BitwardenCipher.SecureNote? = null + var card: BitwardenCipher.Card? = null + var identity: BitwardenCipher.Identity? = null + when (type) { + BitwardenCipher.Type.Login -> { + login = BitwardenCipher.Login.of( + getPasswordStrength = getPasswordStrength, + request = request, + now = now, + old = old, + ) + } + + BitwardenCipher.Type.SecureNote -> { + secureNote = BitwardenCipher.SecureNote.of( + request = request, + ) + } + + BitwardenCipher.Type.Card -> { + card = BitwardenCipher.Card.of( + request = request, + ) + } + + BitwardenCipher.Type.Identity -> { + identity = BitwardenCipher.Identity.of( + request = request, + ) + } + } + + val fields = request + .fields + .map { field -> + requireNotNull(field.name) + + val fieldType = when (field.type) { + DSecret.Field.Type.Text -> BitwardenCipher.Field.Type.Text + DSecret.Field.Type.Hidden -> BitwardenCipher.Field.Type.Hidden + DSecret.Field.Type.Boolean -> BitwardenCipher.Field.Type.Boolean + DSecret.Field.Type.Linked -> BitwardenCipher.Field.Type.Linked + } + when (fieldType) { + BitwardenCipher.Field.Type.Text, + BitwardenCipher.Field.Type.Hidden, + -> { + requireNotNull(field.value) + // no additional validation + } + + BitwardenCipher.Field.Type.Boolean -> { + requireNotNull(field.value) + // must be a valid boolean + field.value.toBooleanStrict() + } + + BitwardenCipher.Field.Type.Linked -> { + requireNotNull(field.linkedId) + } + } + BitwardenCipher.Field( + type = fieldType, + name = field.name, + value = field.value + ?.takeIf { + fieldType == BitwardenCipher.Field.Type.Text || + fieldType == BitwardenCipher.Field.Type.Hidden || + fieldType == BitwardenCipher.Field.Type.Boolean + }, + linkedId = field.linkedId + ?.takeIf { + fieldType == BitwardenCipher.Field.Type.Linked + } + ?.let(BitwardenCipher.Field.LinkedId::of), + ) + } + + val attachments = kotlin.run { + val existingAttachmentsMap = old?.attachments + .orEmpty() + .associateBy { it.id } + request + .attachments + .mapNotNull { attachment -> + val existingAttachment = existingAttachmentsMap[attachment.id] + val newAttachment: BitwardenCipher.Attachment? = when (attachment) { + is CreateRequest.Attachment.Remote -> { + // Remote attachment can not be created here, it can only + // be obtained from the remote server! + val out = existingAttachment as? BitwardenCipher.Attachment.Remote + out?.copy(fileName = attachment.name) + } + + is CreateRequest.Attachment.Local -> { + BitwardenCipher.Attachment.Local( + id = attachment.id, + url = attachment.uri.toString(), + fileName = attachment.name, + size = attachment.size, + ) + } + } + newAttachment + } + } + + val cipherId = old?.cipherId ?: cryptoGenerator.uuid() + val createdDate = old?.createdDate ?: request.now + val deletedDate = old?.deletedDate + return BitwardenCipher( + accountId = accountId, + cipherId = cipherId, + folderId = folderId, + organizationId = organizationId, + collectionIds = collectionIds, + revisionDate = now, + createdDate = createdDate, + deletedDate = deletedDate, + // service fields + service = BitwardenService( + remote = old?.service?.remote, + deleted = false, + version = BitwardenService.VERSION, + ), + // common + name = request.title, + notes = request.note, + favorite = favourite, + fields = fields, + attachments = attachments, + reprompt = reprompt, + // types + type = type, + login = login, + secureNote = secureNote, + card = card, + identity = identity, + ) +} + +private fun BitwardenCipher.Field.LinkedId.Companion.of( + linkedId: DSecret.Field.LinkedId, +) = when (linkedId) { + DSecret.Field.LinkedId.Login_Username -> BitwardenCipher.Field.LinkedId.Login_Username + DSecret.Field.LinkedId.Login_Password -> BitwardenCipher.Field.LinkedId.Login_Password + DSecret.Field.LinkedId.Card_CardholderName -> BitwardenCipher.Field.LinkedId.Card_CardholderName + DSecret.Field.LinkedId.Card_ExpMonth -> BitwardenCipher.Field.LinkedId.Card_ExpMonth + DSecret.Field.LinkedId.Card_ExpYear -> BitwardenCipher.Field.LinkedId.Card_ExpYear + DSecret.Field.LinkedId.Card_Code -> BitwardenCipher.Field.LinkedId.Card_Code + DSecret.Field.LinkedId.Card_Brand -> BitwardenCipher.Field.LinkedId.Card_Brand + DSecret.Field.LinkedId.Card_Number -> BitwardenCipher.Field.LinkedId.Card_Number + DSecret.Field.LinkedId.Identity_Title -> BitwardenCipher.Field.LinkedId.Identity_Title + DSecret.Field.LinkedId.Identity_MiddleName -> BitwardenCipher.Field.LinkedId.Identity_MiddleName + DSecret.Field.LinkedId.Identity_Address1 -> BitwardenCipher.Field.LinkedId.Identity_Address1 + DSecret.Field.LinkedId.Identity_Address2 -> BitwardenCipher.Field.LinkedId.Identity_Address2 + DSecret.Field.LinkedId.Identity_Address3 -> BitwardenCipher.Field.LinkedId.Identity_Address3 + DSecret.Field.LinkedId.Identity_City -> BitwardenCipher.Field.LinkedId.Identity_City + DSecret.Field.LinkedId.Identity_State -> BitwardenCipher.Field.LinkedId.Identity_State + DSecret.Field.LinkedId.Identity_PostalCode -> BitwardenCipher.Field.LinkedId.Identity_PostalCode + DSecret.Field.LinkedId.Identity_Country -> BitwardenCipher.Field.LinkedId.Identity_Country + DSecret.Field.LinkedId.Identity_Company -> BitwardenCipher.Field.LinkedId.Identity_Company + DSecret.Field.LinkedId.Identity_Email -> BitwardenCipher.Field.LinkedId.Identity_Email + DSecret.Field.LinkedId.Identity_Phone -> BitwardenCipher.Field.LinkedId.Identity_Phone + DSecret.Field.LinkedId.Identity_Ssn -> BitwardenCipher.Field.LinkedId.Identity_Ssn + DSecret.Field.LinkedId.Identity_Username -> BitwardenCipher.Field.LinkedId.Identity_Username + DSecret.Field.LinkedId.Identity_PassportNumber -> BitwardenCipher.Field.LinkedId.Identity_PassportNumber + DSecret.Field.LinkedId.Identity_LicenseNumber -> BitwardenCipher.Field.LinkedId.Identity_LicenseNumber + DSecret.Field.LinkedId.Identity_FirstName -> BitwardenCipher.Field.LinkedId.Identity_FirstName + DSecret.Field.LinkedId.Identity_LastName -> BitwardenCipher.Field.LinkedId.Identity_LastName + DSecret.Field.LinkedId.Identity_FullName -> BitwardenCipher.Field.LinkedId.Identity_FullName +} + +private suspend fun BitwardenCipher.Login.Companion.of( + getPasswordStrength: GetPasswordStrength, + request: CreateRequest, + now: Instant, + old: BitwardenCipher? = null, +): BitwardenCipher.Login { + val oldLogin = old?.login + + val username = request.login.username?.takeIf { it.isNotEmpty() } + val password = request.login.password?.takeIf { it.isNotEmpty() } + + val passwordHistory = if (oldLogin != null) { + val list = oldLogin.passwordHistory.toMutableList() + // The existing password was changed, so we should + // add the it one to the history. + if (password != oldLogin.password && oldLogin.password != null) { + list += BitwardenCipher.Login.PasswordHistory( + password = oldLogin.password, + lastUsedDate = now, + ) + } + list + } else { + emptyList() + } + val passwordRevisionDate = now + .takeIf { + // The password must be v2+ to have the revision date. + oldLogin != null && + oldLogin.password != password && + (oldLogin.passwordRevisionDate != null || oldLogin.password != null) + } + ?: oldLogin?.passwordRevisionDate + // Password revision date: + // When we edit or create an item with a password, we must set the + // passwords revision date. Otherwise you loose the info of when the + // password was created. + ?: (old?.revisionDate ?: now) + .takeIf { password != null } + val passwordStrength = password + ?.let { pwd -> + getPasswordStrength(pwd) + .map { ps -> + BitwardenCipher.Login.PasswordStrength( + password = pwd, + crackTimeSeconds = ps.crackTimeSeconds, + version = ps.version, + ) + } + }?.attempt()?.bind()?.getOrNull() + + val uris = request + .uris + .mapNotNull { uri -> + // Filter out urls that are empty + if (uri.uri.isEmpty()) { + return@mapNotNull null + } + + val match = uri.match + .takeUnless { it == DSecret.Uri.MatchType.default } + ?.let { + when (it) { + DSecret.Uri.MatchType.Domain -> BitwardenCipher.Login.Uri.MatchType.Domain + DSecret.Uri.MatchType.Host -> BitwardenCipher.Login.Uri.MatchType.Host + DSecret.Uri.MatchType.StartsWith -> BitwardenCipher.Login.Uri.MatchType.StartsWith + DSecret.Uri.MatchType.Exact -> BitwardenCipher.Login.Uri.MatchType.Exact + DSecret.Uri.MatchType.RegularExpression -> BitwardenCipher.Login.Uri.MatchType.RegularExpression + DSecret.Uri.MatchType.Never -> BitwardenCipher.Login.Uri.MatchType.Never + } + } + BitwardenCipher.Login.Uri( + uri = uri.uri, + match = match, + ) + } + val fido2Credentials = request + .fido2Credentials + .map { + BitwardenCipher.Login.Fido2Credentials( + credentialId = it.credentialId, + keyType = it.keyType, + keyAlgorithm = it.keyAlgorithm, + keyCurve = it.keyCurve, + keyValue = it.keyValue, + rpId = it.rpId, + rpName = it.rpName, + counter = it.counter?.toString() ?: "", + userHandle = it.userHandle, + userName = it.userName, + userDisplayName = it.userDisplayName, + discoverable = it.discoverable.toString(), + creationDate = it.creationDate, + ) + } + + val totp = request.login.totp?.takeIf { it.isNotEmpty() } + return BitwardenCipher.Login( + username = username, + password = password, + passwordStrength = passwordStrength, + passwordRevisionDate = passwordRevisionDate, + passwordHistory = passwordHistory, + uris = uris, + fido2Credentials = fido2Credentials, + totp = totp, + ) +} + +private suspend fun BitwardenCipher.SecureNote.Companion.of( + request: CreateRequest, +): BitwardenCipher.SecureNote = BitwardenCipher.SecureNote( + type = BitwardenCipher.SecureNote.Type.Generic, +) + +private suspend fun BitwardenCipher.Card.Companion.of( + request: CreateRequest, +): BitwardenCipher.Card = BitwardenCipher.Card( + cardholderName = request.card.cardholderName, + brand = request.card.brand, + number = request.card.number, + expMonth = request.card.expMonth, + expYear = request.card.expYear, + code = request.card.code, +) + +private suspend fun BitwardenCipher.Identity.Companion.of( + request: CreateRequest, +): BitwardenCipher.Identity = BitwardenCipher.Identity( + title = request.identity.title, + firstName = request.identity.firstName, + middleName = request.identity.middleName, + lastName = request.identity.lastName, + address1 = request.identity.address1, + address2 = request.identity.address2, + address3 = request.identity.address3, + city = request.identity.city, + state = request.identity.state, + postalCode = request.identity.postalCode, + country = request.identity.country, + company = request.identity.company, + email = request.identity.email, + phone = request.identity.phone, + ssn = request.identity.ssn, + username = request.identity.username, + passportNumber = request.identity.passportNumber, + licenseNumber = request.identity.licenseNumber, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/AddCipherOpenedHistoryImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/AddCipherOpenedHistoryImpl.kt new file mode 100644 index 00000000..14d19c7c --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/AddCipherOpenedHistoryImpl.kt @@ -0,0 +1,26 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import com.artemchep.keyguard.common.model.AddCipherOpenedHistoryRequest +import com.artemchep.keyguard.common.model.CipherHistoryType +import com.artemchep.keyguard.common.usecase.AddCipherOpenedHistory +import com.artemchep.keyguard.core.store.DatabaseManager +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class AddCipherOpenedHistoryImpl( + private val db: DatabaseManager, +) : AddCipherOpenedHistory { + constructor(directDI: DirectDI) : this( + db = directDI.instance(), + ) + + override fun invoke(request: AddCipherOpenedHistoryRequest) = db + .mutate { + it.cipherUsageHistoryQueries.insert( + cipherId = request.cipherId, + credentialId = null, + type = CipherHistoryType.OPENED, + createdAt = request.instant, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/AddCipherPasskey.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/AddCipherPasskey.kt new file mode 100644 index 00000000..9077ba78 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/AddCipherPasskey.kt @@ -0,0 +1,76 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.flatten +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.io.map +import com.artemchep.keyguard.common.model.AddPasskeyCipherRequest +import com.artemchep.keyguard.common.usecase.AddPasskeyCipher +import com.artemchep.keyguard.core.store.bitwarden.BitwardenCipher +import com.artemchep.keyguard.provider.bitwarden.usecase.util.ModifyCipherById +import kotlinx.datetime.Clock +import org.kodein.di.DirectDI +import org.kodein.di.instance + +/** + * @author Artem Chepurnyi + */ +class AddPasskeyCipherImpl( + private val modifyCipherById: ModifyCipherById, +) : AddPasskeyCipher { + companion object { + private const val TAG = "AddPasskeyCipher.bitwarden" + } + + constructor(directDI: DirectDI) : this( + modifyCipherById = directDI.instance(), + ) + + override fun invoke( + request: AddPasskeyCipherRequest, + ): IO = ioEffect { + val createdAt = Clock.System.now() + modifyCipherById( + setOf(request.cipherId), + ) { model -> + var new = model + + val oldUris = model.data_.login?.fido2Credentials.orEmpty() + val newUris = kotlin.run { + val passkey = BitwardenCipher.Login.Fido2Credentials( + credentialId = request.data.credentialId, + keyType = request.data.keyType, + keyAlgorithm = request.data.keyAlgorithm, + keyCurve = request.data.keyCurve, + keyValue = request.data.keyValue, + rpId = request.data.rpId, + rpName = request.data.rpName, + counter = request.data.counter?.toString().orEmpty(), + userHandle = request.data.userHandle, + userName = request.data.userName, + userDisplayName = request.data.userDisplayName, + discoverable = request.data.discoverable.toString(), + creationDate = createdAt, + ) + listOf(passkey) + } + if (newUris.isEmpty()) { + return@modifyCipherById new + } + new = new.copy( + data_ = new.data_.copy( + login = new.data_.login?.copy( + fido2Credentials = oldUris + newUris, + ), + ), + ) + new + } + // Report that we have actually modified the + // ciphers. + .map { changedCipherIds -> + request.cipherId in changedCipherIds + } + } + .flatten() +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/AddCipherUri.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/AddCipherUri.kt new file mode 100644 index 00000000..4172efac --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/AddCipherUri.kt @@ -0,0 +1,183 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.attempt +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.io.effectTap +import com.artemchep.keyguard.common.io.flatten +import com.artemchep.keyguard.common.io.io +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.io.map +import com.artemchep.keyguard.common.model.AddUriCipherRequest +import com.artemchep.keyguard.common.model.DSecret +import com.artemchep.keyguard.common.usecase.AddUriCipher +import com.artemchep.keyguard.common.usecase.CipherUrlDuplicateCheck +import com.artemchep.keyguard.common.usecase.GetAutofillSaveUri +import com.artemchep.keyguard.common.usecase.isEmpty +import com.artemchep.keyguard.common.util.Browsers +import com.artemchep.keyguard.core.store.bitwarden.BitwardenCipher +import com.artemchep.keyguard.provider.bitwarden.mapper.toDomain +import com.artemchep.keyguard.provider.bitwarden.usecase.util.ModifyCipherById +import kotlinx.coroutines.flow.first +import org.kodein.di.DirectDI +import org.kodein.di.instance + +/** + * @author Artem Chepurnyi + */ +class AddUriCipherImpl( + private val modifyCipherById: ModifyCipherById, + private val cipherUrlDuplicateCheck: CipherUrlDuplicateCheck, + private val getAutofillSaveUri: GetAutofillSaveUri, +) : AddUriCipher { + companion object { + private const val TAG = "AddUriCipher.bitwarden" + } + + constructor(directDI: DirectDI) : this( + modifyCipherById = directDI.instance(), + cipherUrlDuplicateCheck = directDI.instance(), + getAutofillSaveUri = directDI.instance(), + ) + + override fun invoke( + request: AddUriCipherRequest, + ): IO = ioEffect { + if (request.isEmpty()) { + return@ioEffect io(false) + } + // Check if the option to save uris is actually + // enabled. + val shouldSave = getAutofillSaveUri().first() + if (!shouldSave) { + return@ioEffect io(false) + } + + modifyCipherById( + setOf(request.cipherId), + ) { model -> + var new = model + + val oldUris = model.data_.login?.uris.orEmpty() + val oldUrisDomain = oldUris + .map { uri -> + uri.toDomain() + } + val newUris = autofill1( + // we do not want to add browsers to + // list of uris + applicationId = request.applicationId + ?.takeIf { + it !in Browsers + } + ?.takeIf { + request.webDomain == null || + request.webView == true + }, + webDomain = request.webDomain, + webScheme = request.webScheme, + ) + .filter { newUri -> + val newUriDomain = newUri.toDomain() + oldUrisDomain + .none { oldUriDomain -> + val isDuplicate = cipherUrlDuplicateCheck(oldUriDomain, newUriDomain) + .attempt() + .bind() + .isRight { it != null } + isDuplicate + } + } + if (newUris.isEmpty()) { + return@modifyCipherById new + } + new = new.copy( + data_ = new.data_.copy( + login = new.data_.login?.copy( + uris = oldUris + newUris, + ), + ), + ) + new + } + // Report that we have actually modified the + // ciphers. + .map { changedCipherIds -> + request.cipherId in changedCipherIds + } + } + .flatten() + .effectTap { changed -> + // TODO: Fix me!!! +// if (changed) { +// Toast +// .makeText(context, "Added the URI to the item", Toast.LENGTH_SHORT) +// .show() +// } + } +} + +fun List.autofill( + applicationId: String? = null, + webDomain: String? = null, + webScheme: String? = null, +): List { + val existingUris = this + .toMutableList() + // If the application we autofill for does not + // exist there, we append it. + if (applicationId != null) { + val androidAppUri = "androidapp://$applicationId" + val androidAppUriExists = existingUris.any { it.uri == androidAppUri } + if (!androidAppUriExists) { + existingUris += DSecret.Uri( + uri = androidAppUri, + match = DSecret.Uri.MatchType.default, + ) + } + } + // If the web url we autofill for does not + // exist there, we append it. + if (webDomain != null) { + val webUriExists = existingUris.any { it.uri.contains(webDomain) } + if (!webUriExists) { + val webPrefix = webScheme?.let { "$it://" }.orEmpty() + val webUri = "$webPrefix$webDomain" + existingUris += DSecret.Uri( + uri = webUri, + match = DSecret.Uri.MatchType.default, + ) + } + } + + return existingUris +} + +fun autofill1( + applicationId: String? = null, + webDomain: String? = null, + webScheme: String? = null, +): List { + val uris = mutableListOf() + // If the application we autofill for does not + // exist there, we append it. + if (applicationId != null) { + val androidAppUri = "androidapp://$applicationId" + uris += BitwardenCipher.Login.Uri( + uri = androidAppUri, + match = BitwardenCipher.Login.Uri.MatchType.Domain, + ) + } + // If the web url we autofill for does not + // exist there, we append it. + if (webDomain != null) { + val webPrefix = webScheme?.let { "$it://" }.orEmpty() + val webUri = "$webPrefix$webDomain" + uris += BitwardenCipher.Login.Uri( + uri = webUri, + match = null, + ) + } + + return uris +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/AddCipherUsedAutofillHistoryImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/AddCipherUsedAutofillHistoryImpl.kt new file mode 100644 index 00000000..12e0061f --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/AddCipherUsedAutofillHistoryImpl.kt @@ -0,0 +1,26 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import com.artemchep.keyguard.common.model.AddCipherOpenedHistoryRequest +import com.artemchep.keyguard.common.model.CipherHistoryType +import com.artemchep.keyguard.common.usecase.AddCipherUsedAutofillHistory +import com.artemchep.keyguard.core.store.DatabaseManager +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class AddCipherUsedAutofillHistoryImpl( + private val db: DatabaseManager, +) : AddCipherUsedAutofillHistory { + constructor(directDI: DirectDI) : this( + db = directDI.instance(), + ) + + override fun invoke(request: AddCipherOpenedHistoryRequest) = db + .mutate { + it.cipherUsageHistoryQueries.insert( + cipherId = request.cipherId, + credentialId = null, + type = CipherHistoryType.USED_AUTOFILL, + createdAt = request.instant, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/AddCipherUsedPasskeyHistoryImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/AddCipherUsedPasskeyHistoryImpl.kt new file mode 100644 index 00000000..166df7cd --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/AddCipherUsedPasskeyHistoryImpl.kt @@ -0,0 +1,26 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import com.artemchep.keyguard.common.model.AddCipherUsedPasskeyHistoryRequest +import com.artemchep.keyguard.common.model.CipherHistoryType +import com.artemchep.keyguard.common.usecase.AddCipherUsedPasskeyHistory +import com.artemchep.keyguard.core.store.DatabaseManager +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class AddCipherUsedPasskeyHistoryImpl( + private val db: DatabaseManager, +) : AddCipherUsedPasskeyHistory { + constructor(directDI: DirectDI) : this( + db = directDI.instance(), + ) + + override fun invoke(request: AddCipherUsedPasskeyHistoryRequest) = db + .mutate { + it.cipherUsageHistoryQueries.insert( + cipherId = request.cipherId, + credentialId = request.credentialId, + type = CipherHistoryType.USED_PASSKEY, + createdAt = request.instant, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/AddFolder.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/AddFolder.kt new file mode 100644 index 00000000..fcefb2f3 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/AddFolder.kt @@ -0,0 +1,76 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.AccountId +import com.artemchep.keyguard.common.service.crypto.CryptoGenerator +import com.artemchep.keyguard.common.usecase.AddFolder +import com.artemchep.keyguard.core.store.bitwarden.BitwardenFolder +import com.artemchep.keyguard.core.store.bitwarden.BitwardenService +import com.artemchep.keyguard.provider.bitwarden.usecase.util.ModifyDatabase +import kotlinx.datetime.Clock +import org.kodein.di.DirectDI +import org.kodein.di.instance + +/** + * @author Artem Chepurnyi + */ +class AddFolderImpl( + private val modifyDatabase: ModifyDatabase, + private val cryptoGenerator: CryptoGenerator, +) : AddFolder { + companion object { + private const val TAG = "AddFolder.bitwarden" + } + + constructor(directDI: DirectDI) : this( + modifyDatabase = directDI.instance(), + cryptoGenerator = directDI.instance(), + ) + + override fun invoke( + accountIdsToNames: Map, + ): IO> = modifyDatabase { database -> + val dao = database.folderQueries + val now = Clock.System.now() + + val models = accountIdsToNames + .map { (accountId, name) -> + val folderId = cryptoGenerator.uuid() + BitwardenFolder( + accountId = accountId.id, + folderId = folderId, + revisionDate = now, + name = name, + service = BitwardenService( + version = BitwardenService.VERSION, + ), + ) + } + if (models.isEmpty()) { + return@modifyDatabase ModifyDatabase.Result( + changedAccountIds = emptySet(), + value = emptySet(), + ) + } + dao.transaction { + models.forEach { folder -> + dao.insert( + folderId = folder.folderId, + accountId = folder.accountId, + data = folder, + ) + } + } + + val changedAccountIds = models + .map { AccountId(it.accountId) } + .toSet() + ModifyDatabase.Result( + changedAccountIds = changedAccountIds, + // pass the set of folder ids back + value = models + .map { it.folderId } + .toSet(), + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/ChangeCipherNameById.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/ChangeCipherNameById.kt new file mode 100644 index 00000000..32ddb8a6 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/ChangeCipherNameById.kt @@ -0,0 +1,39 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.map +import com.artemchep.keyguard.common.usecase.ChangeCipherNameById +import com.artemchep.keyguard.core.store.bitwarden.BitwardenCipher +import com.artemchep.keyguard.core.store.bitwarden.name +import com.artemchep.keyguard.provider.bitwarden.usecase.util.ModifyCipherById +import org.kodein.di.DirectDI +import org.kodein.di.instance + +/** + * @author Artem Chepurnyi + */ +class ChangeCipherNameByIdImpl( + private val modifyCipherById: ModifyCipherById, +) : ChangeCipherNameById { + companion object { + private const val TAG = "ChangeCipherNameById.bitwarden" + } + + constructor(directDI: DirectDI) : this( + modifyCipherById = directDI.instance(), + ) + + override fun invoke( + cipherIdsToNames: Map, + ): IO = modifyCipherById( + cipherIdsToNames + .keys, + ) { model -> + val name = cipherIdsToNames.getValue(model.cipherId) + var new = model + new = new.copy( + data_ = BitwardenCipher.name.set(new.data_, name), + ) + new + }.map { Unit } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/ChangeCipherPasswordById.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/ChangeCipherPasswordById.kt new file mode 100644 index 00000000..671f4622 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/ChangeCipherPasswordById.kt @@ -0,0 +1,94 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.attempt +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.io.flatMap +import com.artemchep.keyguard.common.io.ioUnit +import com.artemchep.keyguard.common.io.map +import com.artemchep.keyguard.common.usecase.ChangeCipherPasswordById +import com.artemchep.keyguard.common.usecase.GetPasswordStrength +import com.artemchep.keyguard.core.store.bitwarden.BitwardenCipher +import com.artemchep.keyguard.core.store.bitwarden.login +import com.artemchep.keyguard.provider.bitwarden.usecase.util.ModifyCipherById +import kotlinx.datetime.Clock +import org.kodein.di.DirectDI +import org.kodein.di.instance + +/** + * @author Artem Chepurnyi + */ +class ChangeCipherPasswordByIdImpl( + private val modifyCipherById: ModifyCipherById, + private val getPasswordStrength: GetPasswordStrength, +) : ChangeCipherPasswordById { + companion object { + private const val TAG = "ChangeCipherPasswordById.bitwarden" + } + + constructor(directDI: DirectDI) : this( + modifyCipherById = directDI.instance(), + getPasswordStrength = directDI.instance(), + ) + + override fun invoke( + cipherIdsToPasswords: Map, + ): IO = ioUnit() + .flatMap { + val now = Clock.System.now() + modifyCipherById( + cipherIdsToPasswords + .keys, + ) { model -> + val password = cipherIdsToPasswords.getValue(model.cipherId) + // so we can clear password + .takeUnless { it.isEmpty() } + val passwordStrength = password + ?.let { pwd -> + getPasswordStrength(pwd) + .map { ps -> + BitwardenCipher.Login.PasswordStrength( + password = pwd, + crackTimeSeconds = ps.crackTimeSeconds, + version = ps.version, + ) + } + }?.attempt()?.bind()?.getOrNull() + + var new = model + val data = BitwardenCipher.login.modify(new.data_) { login -> + val passwordHistory = kotlin.run { + val list = login.passwordHistory.toMutableList() + // The existing password was changed, so we should + // add the it one to the history. + if (password != login.password && login.password != null) { + list += BitwardenCipher.Login.PasswordHistory( + password = login.password, + lastUsedDate = now, + ) + } + list + } + + val passwordRevisionDate = now + .takeIf { + // The password must be v2+ to have the revision date. + password != login.password && + (login.passwordRevisionDate != null || login.password != null) + } + ?: login.passwordRevisionDate + + login.copy( + password = password, + passwordHistory = passwordHistory, + passwordRevisionDate = passwordRevisionDate, + passwordStrength = passwordStrength, + ) + } + new = new.copy( + data_ = data, + ) + new + } + }.map { Unit } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/CheckPasswordLeakImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/CheckPasswordLeakImpl.kt new file mode 100644 index 00000000..286e9064 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/CheckPasswordLeakImpl.kt @@ -0,0 +1,32 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.map +import com.artemchep.keyguard.common.model.CheckPasswordLeakRequest +import com.artemchep.keyguard.common.service.hibp.passwords.PasswordPwnageRepository +import com.artemchep.keyguard.common.usecase.CheckPasswordLeak +import org.kodein.di.DirectDI +import org.kodein.di.instance + +/** + * @author Artem Chepurnyi + */ +class CheckPasswordLeakImpl( + private val passwordPwnageRepository: PasswordPwnageRepository, +) : CheckPasswordLeak { + constructor(directDI: DirectDI) : this( + passwordPwnageRepository = directDI.instance(), + ) + + override fun invoke( + request: CheckPasswordLeakRequest, + ): IO = passwordPwnageRepository + .checkOne( + password = request.password, + cache = request.cache, + ) + .map { + it.occurrences + } + +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/CheckPasswordSetLeakImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/CheckPasswordSetLeakImpl.kt new file mode 100644 index 00000000..6849c30e --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/CheckPasswordSetLeakImpl.kt @@ -0,0 +1,28 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.CheckPasswordSetLeakRequest +import com.artemchep.keyguard.common.model.PasswordPwnage +import com.artemchep.keyguard.common.service.hibp.passwords.PasswordPwnageRepository +import com.artemchep.keyguard.common.usecase.CheckPasswordSetLeak +import org.kodein.di.DirectDI +import org.kodein.di.instance + +/** + * @author Artem Chepurnyi + */ +class CheckPasswordSetLeakImpl( + private val passwordPwnageRepository: PasswordPwnageRepository, +) : CheckPasswordSetLeak { + constructor(directDI: DirectDI) : this( + passwordPwnageRepository = directDI.instance(), + ) + + override fun invoke( + request: CheckPasswordSetLeakRequest, + ): IO> = passwordPwnageRepository + .checkMany( + passwords = request.passwords, + cache = request.cache, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/CheckUsernameLeakImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/CheckUsernameLeakImpl.kt new file mode 100644 index 00000000..e6bf9292 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/CheckUsernameLeakImpl.kt @@ -0,0 +1,92 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.model.CheckUsernameLeakRequest +import com.artemchep.keyguard.common.model.DHibp +import com.artemchep.keyguard.common.model.DHibpC +import com.artemchep.keyguard.common.service.text.Base64Service +import com.artemchep.keyguard.common.usecase.CheckUsernameLeak +import com.artemchep.keyguard.core.store.DatabaseManager +import com.artemchep.keyguard.provider.bitwarden.api.builder.api +import com.artemchep.keyguard.provider.bitwarden.api.builder.breach +import com.artemchep.keyguard.provider.bitwarden.repository.BitwardenTokenRepository +import com.artemchep.keyguard.provider.bitwarden.usecase.util.withRefreshableAccessToken +import io.ktor.client.HttpClient +import kotlinx.datetime.TimeZone +import kotlinx.datetime.atStartOfDayIn +import kotlinx.serialization.json.Json +import org.kodein.di.DirectDI +import org.kodein.di.instance + +/** + * @author Artem Chepurnyi + */ +class CheckUsernameLeakImpl( + private val tokenRepository: BitwardenTokenRepository, + private val base64Service: Base64Service, + private val json: Json, + private val httpClient: HttpClient, + private val db: DatabaseManager, +) : CheckUsernameLeak { + companion object { + private const val TAG = "CheckUsernameLeak.bitwarden" + } + + constructor(directDI: DirectDI) : this( + tokenRepository = directDI.instance(), + base64Service = directDI.instance(), + json = directDI.instance(), + httpClient = directDI.instance(), + db = directDI.instance(), + ) + + override fun invoke( + request: CheckUsernameLeakRequest, + ): IO = ioEffect { + val user = tokenRepository.getById(request.accountId) + .bind() + requireNotNull(user) { + "Failed to find a token!" + } + + val username = request.username + val breaches = withRefreshableAccessToken( + base64Service = base64Service, + httpClient = httpClient, + json = json, + db = db, + user = user, + ) { latestUser -> + val serverEnv = latestUser.env.back() + val accessToken = requireNotNull(latestUser.token).accessToken + serverEnv.api.hibp.breach( + httpClient = httpClient, + env = serverEnv, + token = accessToken, + username = username, + ) + } + + val f = breaches + .map { + DHibp( + title = it.title.orEmpty(), + name = it.name.orEmpty(), + description = it.description + .orEmpty() + .replace("^(
|\\s)+".toRegex(), "") + .replace("(
|\\s)+$".toRegex(), ""), + website = it.domain.orEmpty(), + icon = it.logoPath.orEmpty(), + count = it.pwnCount, + occurredAt = it.breachDate?.atStartOfDayIn(TimeZone.UTC), + reportedAt = it.addedDate?.atStartOfDayIn(TimeZone.UTC), + dataClasses = it.dataClasses, + ) + } + DHibpC(f) + } + +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/CipherBreachCheck.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/CipherBreachCheck.kt new file mode 100644 index 00000000..81fd859e --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/CipherBreachCheck.kt @@ -0,0 +1,89 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.model.DSecret +import com.artemchep.keyguard.common.usecase.CipherBreachCheck +import com.artemchep.keyguard.common.usecase.CipherUrlCheck +import com.artemchep.keyguard.provider.bitwarden.entity.HibpBreachGroup +import kotlinx.datetime.TimeZone +import kotlinx.datetime.toLocalDateTime +import org.kodein.di.DirectDI +import org.kodein.di.instance + +/** + * @author Artem Chepurnyi + */ +class CipherBreachCheckImpl( + private val cipherUrlCheck: CipherUrlCheck, +) : CipherBreachCheck { + // https://haveibeenpwned.com/api/v3/dataclasses + private val sensitiveDataClass = setOf( + "Passwords", + // Other. These are not necessarily require password change, but + // are serious enough that there might have been an unknown breach + // that actually leaked the passwords. + "Auth tokens", + "Bank account numbers", + "Biometric data", + "Bios", + "Chat logs", + "Credit card CVV", + "Credit cards", + "Encrypted keys", + "Historical passwords", + "MAC addresses", + "Payment histories", + "Payment methods", + "Personal health data", + "PINs", + "Private messages", + "Purchases", + "Security questions and answers", + ) + + constructor(directDI: DirectDI) : this( + cipherUrlCheck = directDI.instance(), + ) + + override fun invoke( + cipher: DSecret, + breaches: HibpBreachGroup, + ): IO = ioEffect { + val login = cipher.login + ?: return@ioEffect false + val revision = (login.passwordRevisionDate ?: cipher.revisionDate) + .toLocalDateTime(TimeZone.UTC) + .date + + val validBreaches = breaches.breaches + .filter { breach -> + val bd = breach.breachDate + ?: breach.addedDate + ?: return@filter false + bd >= revision + } + // We show only accounts that have leaked the sensitive data + // in some form. For these web-sites you should change the + // password. + .filter { breach -> + breach.dataClasses + .any { dataClass -> + dataClass in sensitiveDataClass + } + } + .filter { breach -> + val domain = breach.domain + ?.takeIf { it.isNotBlank() } + ?: return@filter false + cipher.uris.any { uri -> + cipherUrlCheck(uri, domain) + .bind() + } + } + validBreaches + .isNotEmpty() + } + +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/CipherDuplicatesCheck.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/CipherDuplicatesCheck.kt new file mode 100644 index 00000000..b522f1d8 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/CipherDuplicatesCheck.kt @@ -0,0 +1,546 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import com.artemchep.keyguard.common.model.DSecret +import com.artemchep.keyguard.common.model.DSecretDuplicateGroup +import com.artemchep.keyguard.common.model.fileName +import com.artemchep.keyguard.common.model.fileSize +import com.artemchep.keyguard.common.service.crypto.CryptoGenerator +import com.artemchep.keyguard.common.service.logging.LogLevel +import com.artemchep.keyguard.common.service.logging.LogRepository +import com.artemchep.keyguard.common.service.similarity.SimilarityService +import com.artemchep.keyguard.common.service.text.Base64Service +import com.artemchep.keyguard.common.usecase.CipherDuplicatesCheck +import org.kodein.di.DirectDI +import org.kodein.di.instance +import kotlin.math.absoluteValue +import kotlin.time.ExperimentalTime +import kotlin.time.measureTimedValue + +/** + * @author Artem Chepurnyi + */ +class CipherDuplicatesCheckImpl( + private val cryptoGenerator: CryptoGenerator, + private val base64Service: Base64Service, + private val similarityService: SimilarityService, + private val logRepository: LogRepository, +) : CipherDuplicatesCheck { + companion object { + private val TAG = "CipherDuplicatesCheck" + + private val REGEX_SYMBOLS = "\\W".toRegex() + private val REGEX_DIGITS = "\\d".toRegex() + + // Find a schema of a URI string, for + // example https:// or androidapp:// + private val REGEX_SCHEMA = "^.+://".toRegex() + + private val ignoredWords = setOf( + // prepositions + "about", + "along", + "amid", + "among", + "anti", + "as", + "at", + "but", + "by", + "for", + "from", + "in", + "into", + "like", + "minus", + "near", + "of", + "off", + "on", + "onto", + "over", + "past", + "per", + "plus", + "save", + "since", + "than", + "to", + "up", + "upon", + "via", + "with", + "within", + "without", + ) + } + + data class ProcessedSecret( + val source: DSecret, + val processed: DSecret, + ) + + constructor(directDI: DirectDI) : this( + cryptoGenerator = directDI.instance(), + base64Service = directDI.instance(), + similarityService = directDI.instance(), + logRepository = directDI.instance(), + ) + + override fun invoke( + ciphers: List, + sensitivity: CipherDuplicatesCheck.Sensitivity, + ): List = measureTimedValue { + val existingGroupIds = mutableSetOf() + val pCiphers = ciphers + .map { cipher -> + processCipher(cipher) + } + // We only search duplicates in the same type group. We + // assume that no duplicates have different types. + val pCiphersByType = pCiphers + .groupBy { it.processed.type } + pCiphersByType + .mapValues { (_, pCiphersGroup) -> + val out = mutableListOf() + val src = pCiphersGroup.toMutableList() + for (i in src.lastIndex downTo 0) { + var avg: MutableList? = null + var group: MutableList? = null + val target = src.removeLastOrNull() + ?: continue + // Go over the rest of the items and + // compare the with the target item. + for (j in src.lastIndex downTo 0) { + val candidate = src.getOrNull(j) + ?: continue + val accuracy = compare2( + a = target, + b = candidate, + ).eval() + if (accuracy > sensitivity.threshold) { + if (avg == null) { + avg = mutableListOf() + } + avg.add(accuracy) + if (group == null) { + group = mutableListOf() + group.add(target) + } + group.add(candidate) + // remove the potential duplicate from a list + src.removeAt(j) + } + } + if (group != null && avg != null) { + val groupId = group + .joinToString(separator = "") { it.source.id } + .let { + val data = it.toByteArray() + val hash = cryptoGenerator.hashSha256(data) + base64Service.encodeToString(hash) + } + val finalGroupId = if (groupId in existingGroupIds) { + // We happen to have a collision, so + // resort to generating a completely random + // identifier. + cryptoGenerator.uuid() + } else { + groupId + } + existingGroupIds += finalGroupId + + val finalAccuracy = avg.average().toFloat() + out += DSecretDuplicateGroup( + id = finalGroupId, + accuracy = finalAccuracy, + ciphers = group + .map { it.source }, + ) + } + } + out + } + .flatMap { it.value } + }.let { timedValue -> + val logMessage = "Found ${timedValue.value.size} duplicates in ${timedValue.duration}" + logRepository.post(TAG, logMessage, LogLevel.INFO) + + timedValue.value + } + + private fun Sequence.eval() = average().toFloat() + + private fun compare2( + a: ProcessedSecret, + b: ProcessedSecret, + ): Sequence = sequence { + compareStringsFuzzy( + a = a.processed.name, + b = b.processed.name, + strategy = ComparisonStrategy.Fuzzy.TH, + weight = 1f, + ).let { yield(it) } + compareStringsFuzzy( + a = a.processed.notes, + b = b.processed.notes, + strategy = ComparisonStrategy.Fuzzy.TH, + weight = if (a.processed.type == DSecret.Type.SecureNote) 2f else 0.6f, + ifOneEmpty = if (a.processed.type == DSecret.Type.SecureNote) -2f else -0.2f, + ).let { yield(it) } + + // Urls + compareListsFuzzy( + a = a.processed.uris, + b = b.processed.uris, + ) { a, b -> + val scoreMax = 1f + val scoreMin = -1f + if ( + a.match == DSecret.Uri.MatchType.RegularExpression || + b.match == DSecret.Uri.MatchType.RegularExpression + ) { + if (a.uri == b.uri) scoreMax else scoreMin + } else { + if (a.uri == b.uri) { + scoreMax + } else { + val aDomain = a.uri.substringAfter('.') + val bDomain = b.uri.substringAfter('.') + if (aDomain == bDomain) { + scoreMin / 2f + } else { + scoreMin + } + } + } + }.times(3f).let { yield(it) } + + // Fields + compareListsFuzzy( + a = a.processed.fields, + b = b.processed.fields, + ) { a, b -> + if (a == b) 1f else -1f + }.times(3f).let { yield(it) } + + // Attachments + compareListsFuzzy( + a = a.processed.attachments, + b = b.processed.attachments, + ) { a, b -> + val aFileName = a.fileName() + val bFileName = b.fileName() + val aFileSize = a.fileSize() + val bFileSize = b.fileSize() + if (aFileName == bFileName && aFileSize == bFileSize) 1f else -1f + }.times(2f).let { yield(it) } + + // Login + if ( + a.processed.login != null && + b.processed.login != null && + a.processed.type == DSecret.Type.Login + ) { + val aLogin = a.processed.login + val bLogin = b.processed.login + compareStringsFuzzy( + a = aLogin.username, + b = bLogin.username, + // If username is not exactly matched, then we + // give it a very low score. + min = -6f, + strategy = ComparisonStrategy.Exact, + weight = 0.5f, + ).let { yield(it) } + compareStringsFuzzy( + a = aLogin.password, + b = bLogin.password, + min = -3f, + strategy = ComparisonStrategy.Exact, + weight = 1f, + ).let { yield(it) } + compareStringsFuzzy( + a = aLogin.totp?.raw, + b = bLogin.totp?.raw, + min = -4f, + strategy = ComparisonStrategy.Exact, + weight = 5f, + ).let { yield(it) } + // Passkeys + compareListsFuzzy( + a = aLogin.fido2Credentials.map { it.credentialId }, + b = bLogin.fido2Credentials.map { it.credentialId }, + ) { a, b -> + if (a == b) 1f else -3f + }.times(3f).let { yield(it) } + return@sequence + } + + // Card + if ( + a.processed.card != null && + b.processed.card != null && + a.processed.type == DSecret.Type.Card + ) { + val aCard = a.processed.card + val bCard = b.processed.card + compareStringsFuzzy( + a = aCard.number, + b = bCard.number, + strategy = ComparisonStrategy.Exact, + weight = 5f, + ).let { yield(it) } + return@sequence + } + + // Identity + if ( + a.processed.identity != null && + b.processed.identity != null && + a.processed.type == DSecret.Type.Card + ) { + val aIdentity = a.processed.identity + val bIdentity = b.processed.identity + compareStringsFuzzy( + a = aIdentity.title, + b = bIdentity.title, + strategy = ComparisonStrategy.Exact, + weight = 0.7f, + ).let { yield(it) } + compareStringsFuzzy( + a = aIdentity.firstName, + b = bIdentity.firstName, + strategy = ComparisonStrategy.Exact, + weight = 0.7f, + ).let { yield(it) } + compareStringsFuzzy( + a = aIdentity.middleName, + b = bIdentity.middleName, + strategy = ComparisonStrategy.Exact, + weight = 0.7f, + ).let { yield(it) } + compareStringsFuzzy( + a = aIdentity.lastName, + b = bIdentity.lastName, + strategy = ComparisonStrategy.Exact, + weight = 0.7f, + ).let { yield(it) } + compareStringsFuzzy( + a = aIdentity.email, + b = bIdentity.email, + strategy = ComparisonStrategy.Exact, + weight = 0.7f, + ).let { yield(it) } + compareStringsFuzzy( + a = aIdentity.phone, + b = bIdentity.phone, + strategy = ComparisonStrategy.Exact, + weight = 0.7f, + ).let { yield(it) } + compareStringsFuzzy( + a = aIdentity.username, + b = bIdentity.username, + strategy = ComparisonStrategy.Exact, + weight = 0.7f, + ).let { yield(it) } + return@sequence + } + } + + private sealed interface ComparisonStrategy { + data object Exact : ComparisonStrategy + + data class Fuzzy( + val threshold: Float = 0f, + ) : ComparisonStrategy { + companion object { + val TH = Fuzzy(threshold = 0.9f) + } + } + } + + private fun compareListsFuzzy( + a: List, + b: List, + areEqual: (T, T) -> Float, + ): Float { + val sizeScore = -(a.size - b.size).toFloat().absoluteValue * 0.2f / 3f + // We want to start from a smaller list. + val (s, l) = if (a.size > b.size) { + b to a.toMutableList() + } else { + a to b.toMutableList() + } + if (s.isEmpty()) { + return sizeScore + } + val contentScore = s + .mapNotNull { x -> + var index = -1 + var max = Float.MIN_VALUE + l.forEachIndexed { i, y -> + val score = areEqual(x, y) + if (score > max || index == -1) { + index = i + max = score + } + } + if (index != -1) { + // Do not remove urls that did not match + // to the current url. + if (max > 0f) { + l.removeAt(index) + } + max + } else { + null + } + } + .average() + .toFloat() + return sizeScore + contentScore + } + + private fun compareStringsFuzzy( + a: String?, + b: String?, + strategy: ComparisonStrategy, + weight: Float = 1f, + min: Float = -weight, + max: Float = +weight, + // If one of the arguments are empty, + // but the other one is not. + ifOneEmpty: Float = -0.2f, + // If both of the arguments are empty. + ifBothEmpty: Float = 0.05f, + ifExactMatch: Float = max, + ): Float { + val score = when { + a == null || b == null || a.isBlank() || b.isBlank() -> + if (a == b) ifBothEmpty else ifOneEmpty + + a == b -> ifExactMatch + else -> kotlin.run fuzzy@{ + when (strategy) { + is ComparisonStrategy.Exact -> { + // Continue. + } + + is ComparisonStrategy.Fuzzy -> { + // Do not compare strings fuzzily if + // they are too long, as it might take + // too much processing power. + val sumLength = a.length + b.length + if (sumLength <= 100) { + val score = similarityService.score(a, b) + .coerceIn(0f, 1f) + return@fuzzy if (score < strategy.threshold) { + min + } else { + val distance = max - min + score * distance - min + } + } + } + } + min + } + }.coerceIn( + minimumValue = min, + maximumValue = max, + ) + return score + } + + // + // Pre-Processing + // + + private fun processCipher(cipher: DSecret): ProcessedSecret { + val processed = cipher.copy( + name = processString(cipher.name) + .replace("copy", "") + .replace("clone", "") + .replace("duplicate", "") + // Get rid of the digits, because a name + // "Hello world 2" might be a duplicate to + // "Hello world". + .replace(REGEX_DIGITS, ""), + notes = processString(cipher.notes), + uris = cipher.uris + .map { uri -> + val isRegex = uri.match == DSecret.Uri.MatchType.RegularExpression + if (isRegex) return@map uri + + // Leave only the host name + val processedUri = uri.uri + .replace(REGEX_SCHEMA, "") + .substringBefore(":") + .substringBefore("/") + .trim() + uri.copy(uri = processedUri) + }, + fields = cipher.fields + .map { field -> + val processedName = field.name?.let(::processString) + val processedValue = field.value?.trim() + field.copy( + name = processedName, + value = processedValue, + ) + }, + // types + login = cipher.login?.let(::processLogin), + card = cipher.card?.let(::processCard), + identity = cipher.identity?.let(::processIdentity), + ) + return ProcessedSecret( + source = cipher, + processed = processed, + ) + } + + private fun processLogin(login: DSecret.Login): DSecret.Login { + val processedUsername = login.username?.trim() + return login.copy( + username = processedUsername, + ) + } + + private fun processCard(card: DSecret.Card): DSecret.Card { + val processedNumber = card.number?.let(::processString) + return card.copy( + number = processedNumber, + ) + } + + private fun processIdentity(identity: DSecret.Identity): DSecret.Identity { + return identity.copy( + title = identity.title?.let(::processString), + firstName = identity.firstName?.let(::processString), + middleName = identity.middleName?.let(::processString), + lastName = identity.lastName?.let(::processString), + address1 = identity.address1?.let(::processString), + address2 = identity.address2?.let(::processString), + address3 = identity.address3?.let(::processString), + city = identity.city?.let(::processString), + state = identity.state?.let(::processString), + postalCode = identity.postalCode?.let(::processString), + country = identity.country?.let(::processString), + company = identity.company?.let(::processString), + email = identity.email?.let(::processString), + phone = identity.phone?.let(::processString), + ssn = identity.ssn?.let(::processString), + username = identity.username?.let(::processString), + passportNumber = identity.passportNumber?.let(::processString), + licenseNumber = identity.licenseNumber?.let(::processString), + ) + } + + private fun processString(str: String) = str + .lowercase() + .split(" ") + .filter { it !in ignoredWords } + .joinToString(separator = "") + .replace(REGEX_SYMBOLS, "") +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/CipherExpiringCheck.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/CipherExpiringCheck.kt new file mode 100644 index 00000000..c18e17d3 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/CipherExpiringCheck.kt @@ -0,0 +1,55 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import com.artemchep.keyguard.common.model.DSecret +import com.artemchep.keyguard.common.usecase.CipherExpiringCheck +import kotlinx.datetime.DateTimeUnit +import kotlinx.datetime.Instant +import kotlinx.datetime.LocalDate +import kotlinx.datetime.TimeZone +import kotlinx.datetime.atStartOfDayIn +import kotlinx.datetime.plus +import org.kodein.di.DirectDI + +/** + * @author Artem Chepurnyi + */ +class CipherExpiringCheckImpl() : CipherExpiringCheck { + constructor(directDI: DirectDI) : this() + + private val timeZone get() = TimeZone.currentSystemDefault() + + override fun invoke(secret: DSecret, now: Instant): Instant? { + val soon = now + .plus(3, DateTimeUnit.MONTH, timeZone) + return when (secret.type) { + DSecret.Type.Login -> null + DSecret.Type.Card -> expiringCard(secret, soon) + DSecret.Type.Identity -> null + DSecret.Type.SecureNote -> null + else -> null + } + } + + private fun expiringCard(secret: DSecret, now: Instant): Instant? { + val cardDate = kotlin.run { + val card = secret.card ?: return null + val month = card.expMonth + ?.trim() + ?.toIntOrNull() + val year = card.expYear + ?.trim() + ?.toIntOrNull() + // If the year is unknown then there's no way + // we know when the card is expiring. + ?: return null + val finalYear = if (year <= 99) 2000 + year else year + LocalDate(finalYear, month ?: 1, 1) + } + val cardInstant = cardDate + // The card expiry date is inclusive, so the actual time + // is the first day of the next month. + .plus(1, DateTimeUnit.MONTH) + .atStartOfDayIn(timeZone) + return cardInstant.takeIf { it <= now } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/CipherFieldSwitchToggle.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/CipherFieldSwitchToggle.kt new file mode 100644 index 00000000..07db1f24 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/CipherFieldSwitchToggle.kt @@ -0,0 +1,50 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.map +import com.artemchep.keyguard.common.model.CipherFieldSwitchToggleRequest +import com.artemchep.keyguard.common.usecase.CipherFieldSwitchToggle +import com.artemchep.keyguard.core.store.bitwarden.BitwardenCipher +import com.artemchep.keyguard.core.store.bitwarden.fields +import com.artemchep.keyguard.provider.bitwarden.usecase.util.ModifyCipherById +import org.kodein.di.DirectDI +import org.kodein.di.instance + +/** + * @author Artem Chepurnyi + */ +class CipherFieldSwitchToggleImpl( + private val modifyCipherById: ModifyCipherById, +) : CipherFieldSwitchToggle { + constructor(directDI: DirectDI) : this( + modifyCipherById = directDI.instance(), + ) + + override fun invoke( + cipherIdsToRequests: Map>, + ): IO = modifyCipherById( + cipherIdsToRequests + .keys, + ) { model -> + val fieldsTargets = cipherIdsToRequests[model.cipherId].orEmpty() + val fields = model.data_.fields + .mapIndexed { index, field -> + if (field.type != BitwardenCipher.Field.Type.Boolean) { + return@mapIndexed field + } + + val target = fieldsTargets + .firstOrNull { it.fieldIndex == index && it.fieldName == field.name } + if (target != null) { + field.copy(value = target.value.toString()) + } else { + field + } + } + var new = model + new = new.copy( + data_ = BitwardenCipher.fields.set(new.data_, fields), + ) + new + }.map { Unit } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/CipherIncompleteCheck.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/CipherIncompleteCheck.kt new file mode 100644 index 00000000..c92423b1 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/CipherIncompleteCheck.kt @@ -0,0 +1,118 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import com.artemchep.keyguard.common.model.DSecret +import com.artemchep.keyguard.common.usecase.CipherIncompleteCheck +import org.kodein.di.DirectDI + +/** + * @author Artem Chepurnyi + */ +class CipherIncompleteCheckImpl() : CipherIncompleteCheck { + private val placeholderNames = setOf( + "login", + "email", + "password", + "username", + "key", + "item", + "todo", + "entry", + "identity", + ) + + private val tokenNames = setOf( + "ssh", + "key", + "token", + "api", + "security", + "password", + "gpg", + "signature", + "private", + "public", + "id", + ) + + constructor(directDI: DirectDI) : this() + + override fun invoke(secret: DSecret): Boolean { + if (secret.name.isBlank()) { + return true + } + val lowercaseName = secret.name.lowercase() + if (lowercaseName in placeholderNames) { + return true + } + + // API has limited subset of item types, so you might create an + // item just to add attachments/custom fields to it. + if ( + secret.fields.isNotEmpty() || + secret.attachments.isNotEmpty() + ) { + return false + } + + return when (secret.type) { + DSecret.Type.Login -> incompleteLogin(secret) + DSecret.Type.Card -> incompleteCard(secret) + DSecret.Type.Identity -> incompleteIdentity(secret) + DSecret.Type.SecureNote -> incompleteNote(secret) + else -> false + } + } + + private fun incompleteLogin(secret: DSecret): Boolean { + val login = secret.login ?: return true + // Passkey contains both password and + // a username (and a website too). + if (login.fido2Credentials.isNotEmpty()) { + return false + } + if (login.username.isNullOrBlank()) { + // Every login should have a username, otherwise how do you know + // which user to login with? + val lowercaseNameByWords = secret.name.lowercase().split(" ") + if (lowercaseNameByWords.any { it in tokenNames }) { + // Token items tend to have no username. + return false + } + return true + } + return false + } + + private fun incompleteIdentity(secret: DSecret): Boolean { + val identity = secret.identity ?: return true + kotlin.run { + if ( + identity.firstName.isNullOrBlank() && + identity.lastName.isNullOrBlank() + ) { + // Every identity should have a person name, otherwise how do you know + // which person it is? + // #1: If the entry name contains a space, then there's a chance + // that the entry name itself is a person's name. + if (" " in secret.name) return@run + return true + } + } + return false + } + + private fun incompleteNote(secret: DSecret): Boolean { + if (secret.notes.isBlank()) { + return true + } + return false + } + + private fun incompleteCard(secret: DSecret): Boolean { + val card = secret.card ?: return true + if (card.number.isNullOrBlank()) { + return true + } + return false + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/CipherMergee.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/CipherMergee.kt new file mode 100644 index 00000000..08ee0485 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/CipherMergee.kt @@ -0,0 +1,241 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import arrow.core.some +import arrow.optics.Optional +import com.artemchep.keyguard.common.model.DSecret +import com.artemchep.keyguard.common.model.address1 +import com.artemchep.keyguard.common.model.address2 +import com.artemchep.keyguard.common.model.address3 +import com.artemchep.keyguard.common.model.attachments +import com.artemchep.keyguard.common.model.card +import com.artemchep.keyguard.common.model.city +import com.artemchep.keyguard.common.model.company +import com.artemchep.keyguard.common.model.country +import com.artemchep.keyguard.common.model.email +import com.artemchep.keyguard.common.model.favorite +import com.artemchep.keyguard.common.model.fields +import com.artemchep.keyguard.common.model.firstName +import com.artemchep.keyguard.common.model.identity +import com.artemchep.keyguard.common.model.lastName +import com.artemchep.keyguard.common.model.licenseNumber +import com.artemchep.keyguard.common.model.login +import com.artemchep.keyguard.common.model.middleName +import com.artemchep.keyguard.common.model.notes +import com.artemchep.keyguard.common.model.passportNumber +import com.artemchep.keyguard.common.model.password +import com.artemchep.keyguard.common.model.phone +import com.artemchep.keyguard.common.model.postalCode +import com.artemchep.keyguard.common.model.reprompt +import com.artemchep.keyguard.common.model.ssn +import com.artemchep.keyguard.common.model.state +import com.artemchep.keyguard.common.model.title +import com.artemchep.keyguard.common.model.totp +import com.artemchep.keyguard.common.model.type +import com.artemchep.keyguard.common.model.uris +import com.artemchep.keyguard.common.model.username +import com.artemchep.keyguard.common.usecase.CipherMerge +import org.kodein.di.DirectDI + +/** + * @author Artem Chepurnyi + */ +class CipherMergeImpl() : CipherMerge { + private val mergeRules = Node.Group( + lens = Optional( + getOption = { it.some() }, + set = { _, newValue -> newValue }, + ), + children = listOf( + Node.Leaf(DSecret.notes), + Node.Leaf( + lens = DSecret.type, + strategy = PickModeStrategy { DSecret.Type.Login }, + ), + Node.Leaf( + lens = DSecret.favorite, + strategy = PickModeStrategy { false }, + ), + Node.Leaf( + lens = DSecret.reprompt, + strategy = PickModeStrategy { false }, + ), + Node.Leaf( + lens = DSecret.uris, + strategy = PickUriStrategy(), + ), + Node.Leaf( + lens = DSecret.fields, + strategy = PickFieldStrategy(), + ), + Node.Leaf( + lens = DSecret.attachments, + strategy = PickAttachmentStrategy(), + ), + // types + Node.Group( + lens = DSecret.login, + children = listOf( + Node.Leaf(DSecret.Login.username), + Node.Leaf(DSecret.Login.password), + Node.Leaf(DSecret.Login.totp), + ), + ), + Node.Leaf( + lens = DSecret.card, + strategy = PickCardStrategy(), + ), + Node.Group( + lens = DSecret.identity, + children = listOf( + Node.Leaf(DSecret.Identity.title), + Node.Leaf(DSecret.Identity.firstName), + Node.Leaf(DSecret.Identity.middleName), + Node.Leaf(DSecret.Identity.lastName), + Node.Leaf(DSecret.Identity.address1), + Node.Leaf(DSecret.Identity.address2), + Node.Leaf(DSecret.Identity.address3), + Node.Leaf(DSecret.Identity.city), + Node.Leaf(DSecret.Identity.state), + Node.Leaf(DSecret.Identity.postalCode), + Node.Leaf(DSecret.Identity.country), + Node.Leaf(DSecret.Identity.company), + Node.Leaf(DSecret.Identity.email), + Node.Leaf(DSecret.Identity.phone), + Node.Leaf(DSecret.Identity.ssn), + Node.Leaf(DSecret.Identity.username), + Node.Leaf(DSecret.Identity.passportNumber), + Node.Leaf(DSecret.Identity.licenseNumber), + ), + ), + ), + ) + + private sealed interface Node { + val lens: Optional + + class Group( + override val lens: Optional, + val children: List> = emptyList(), + ) : Node + + class Leaf( + override val lens: Optional, + val strategy: PickStrategy = PickModeStrategy(), + ) : Node + } + + @FunctionalInterface + private interface PickStrategy { + fun pick(list: List): T + } + + private class PickModeStrategy( + val orElse: (() -> T)? = null, + ) : PickStrategy { + override fun pick(list: List): T { + val candidates = kotlin.run { + val listSorted = list + .groupBy { it } + .values + .sortedByDescending { it.size } + val first = listSorted[0] + listSorted + .filter { it.size == first.size } + .map { it.first() } + } + val default = orElse?.invoke() + return default + ?.takeIf { it in candidates } + ?: candidates.first() + } + } + + private class PickUriStrategy : PickStrategy> { + override fun pick( + list: List>, + ): List = list + .flatten() + .distinct() + } + + private class PickFieldStrategy : PickStrategy> { + override fun pick( + list: List>, + ): List = list + .flatten() + .distinct() + } + + // FIXME: We do not support merging attachments, so + // just invalidate the list of attachments. + private class PickAttachmentStrategy : PickStrategy> { + override fun pick( + list: List>, + ): List = emptyList() + } + + private class PickCardStrategy : PickStrategy { + override fun pick(list: List): DSecret.Card = list.first() + } + + constructor(directDI: DirectDI) : this() + + override fun invoke( + ciphers: List, + ): DSecret = kotlin.run { + val initialCipher = ciphers.first() + .run { + copy( + login = login ?: DSecret.Login(), + identity = identity ?: DSecret.Identity(), + card = card ?: DSecret.Card(), + ) + } + mergeRules.merge(initialCipher, ciphers) as DSecret + } + + private fun Node.merge( + source: Any, + data: List, + ): Any { + return when (this) { + is Node.Group<*, *> -> { + val lensFixed = lens as Optional + val lensData = data + .mapNotNull(lensFixed::getOrNull) + // We can not merge empty list of sources, so + // just return the original value. + if (lensData.isEmpty()) return source + + val lensSource = lensFixed.getOrNull(source) + // A downside of this approach is that we + // can not create new objects. :'( If the + // login is null, we will not create it. + ?: return source + + lensFixed.set( + source = source, + focus = children + .fold(lensSource) { s, child -> + child.merge(s, lensData) + }, + ) + } + + is Node.Leaf<*, *> -> { + val lensFixed = lens as Optional + val lensData = data + .mapNotNull(lensFixed::getOrNull) + if (lensData.isEmpty()) { + // We do not have any children, so + // just return the source value. + source + } else { + val strategy = strategy as PickStrategy + val focus = strategy.pick(lensData) + lensFixed.set(source, focus) + } + } + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/CipherRemovePasswordHistoryByIdImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/CipherRemovePasswordHistoryByIdImpl.kt new file mode 100644 index 00000000..337acaa5 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/CipherRemovePasswordHistoryByIdImpl.kt @@ -0,0 +1,43 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.map +import com.artemchep.keyguard.common.usecase.CipherRemovePasswordHistoryById +import com.artemchep.keyguard.core.store.bitwarden.BitwardenCipher +import com.artemchep.keyguard.core.store.bitwarden.login +import com.artemchep.keyguard.core.store.bitwarden.passwordHistory +import com.artemchep.keyguard.provider.bitwarden.usecase.util.ModifyCipherById +import org.kodein.di.DirectDI +import org.kodein.di.instance + +/** + * @author Artem Chepurnyi + */ +class CipherRemovePasswordHistoryByIdImpl( + private val modifyCipherById: ModifyCipherById, +) : CipherRemovePasswordHistoryById { + companion object { + private const val TAG = "CipherRemovePasswordHistoryById.bitwarden" + } + + constructor(directDI: DirectDI) : this( + modifyCipherById = directDI.instance(), + ) + + override fun invoke( + cipherId: String, + passwordIds: List, + ): IO = modifyCipherById( + setOf(cipherId), + ) { model -> + var new = model + new = new.copy( + data_ = BitwardenCipher.login.passwordHistory + .modify(new.data_) { oldPasswordHistory -> + oldPasswordHistory + .filter { it.id !in passwordIds } + }, + ) + new + }.map { Unit } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/CipherRemovePasswordHistoryImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/CipherRemovePasswordHistoryImpl.kt new file mode 100644 index 00000000..9c412184 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/CipherRemovePasswordHistoryImpl.kt @@ -0,0 +1,39 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.map +import com.artemchep.keyguard.common.usecase.CipherRemovePasswordHistory +import com.artemchep.keyguard.core.store.bitwarden.BitwardenCipher +import com.artemchep.keyguard.core.store.bitwarden.login +import com.artemchep.keyguard.core.store.bitwarden.passwordHistory +import com.artemchep.keyguard.provider.bitwarden.usecase.util.ModifyCipherById +import org.kodein.di.DirectDI +import org.kodein.di.instance + +/** + * @author Artem Chepurnyi + */ +class CipherRemovePasswordHistoryImpl( + private val modifyCipherById: ModifyCipherById, +) : CipherRemovePasswordHistory { + companion object { + private const val TAG = "CipherRemovePasswordHistory.bitwarden" + } + + constructor(directDI: DirectDI) : this( + modifyCipherById = directDI.instance(), + ) + + override fun invoke( + cipherId: String, + ): IO = modifyCipherById( + setOf(cipherId), + ) { model -> + var new = model + new = new.copy( + data_ = BitwardenCipher.login.passwordHistory + .set(new.data_, emptyList()), + ) + new + }.map { Unit } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/CipherUnsecureUrlAutoFix.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/CipherUnsecureUrlAutoFix.kt new file mode 100644 index 00000000..d30d4039 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/CipherUnsecureUrlAutoFix.kt @@ -0,0 +1,87 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.map +import com.artemchep.keyguard.common.usecase.CipherUnsecureUrlAutoFix +import com.artemchep.keyguard.core.store.bitwarden.BitwardenCipher +import com.artemchep.keyguard.core.store.bitwarden.login +import com.artemchep.keyguard.core.store.bitwarden.uris +import com.artemchep.keyguard.provider.bitwarden.usecase.util.ModifyCipherById +import io.ktor.client.HttpClient +import io.ktor.client.request.get +import io.ktor.http.DEFAULT_PORT +import io.ktor.http.URLBuilder +import io.ktor.http.Url +import io.ktor.http.isSecure +import io.ktor.http.isSuccess +import org.kodein.di.DirectDI +import org.kodein.di.instance + +/** + * @author Artem Chepurnyi + */ +class CipherUnsecureUrlAutoFixImpl( + private val httpClient: HttpClient, + private val modifyCipherById: ModifyCipherById, +) : CipherUnsecureUrlAutoFix { + constructor(directDI: DirectDI) : this( + httpClient = directDI.instance(), + modifyCipherById = directDI.instance(), + ) + + override fun invoke( + cipherIdsToUrls: Map>, + ): IO = modifyCipherById( + cipherIdsToUrls + .keys, + ) { model -> + val urisToFix = cipherIdsToUrls[model.cipherId].orEmpty() + val uris = model.data_.login + ?.uris + ?.map { uri -> + val shouldAutoFix = uri.uri in urisToFix + if (shouldAutoFix && uri.uri != null) { + val secureUrl = autofyUrl(uri.uri) + uri.copy(uri = secureUrl) + } else { + uri + } + } + .orEmpty() + + var new = model + new = new.copy( + data_ = BitwardenCipher.login.uris.set(new.data_, uris), + ) + new + }.map { Unit } + + private suspend fun autofyUrl(unsecureUrl: String): String { + val url = Url(unsecureUrl) + if (url.protocol.isSecure()) { + throw IllegalStateException("The '$unsecureUrl' uses a secure protocol.") + } + val secureProtocol = + CipherUnsecureUrlCheckUtils.unsecureToSecureProtocols[url.protocol.name] + // Should not happen, as we should not allow + // user to auto-fix unknown protocols. + ?: throw IllegalStateException("Protocol '${url.protocol.name}' doesn't have a secure variant.") + val secureUrl = URLBuilder(url).apply { + protocol = secureProtocol + // unless specified port is different to the previous default + port = url.port.takeIf { url.port != url.protocol.defaultPort } + ?: DEFAULT_PORT + }.build() + + // Test if the new url is GET-able + testUrlOrThrow(secureUrl) + return secureUrl.toString() + } + + private suspend fun testUrlOrThrow(url: Url) { + val secureUrlExists = httpClient.get(url).status.isSuccess() + if (!secureUrlExists) { + throw IllegalStateException("Could not check if secure URL exists.") + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/CipherUnsecureUrlCheck.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/CipherUnsecureUrlCheck.kt new file mode 100644 index 00000000..cf30afec --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/CipherUnsecureUrlCheck.kt @@ -0,0 +1,31 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import arrow.core.getOrElse +import com.artemchep.keyguard.common.usecase.CipherUnsecureUrlCheck +import com.artemchep.keyguard.feature.auth.common.util.verifyIsLocalUrl +import org.kodein.di.DirectDI + +/** + * @author Artem Chepurnyi + */ +class CipherUnsecureUrlCheckImpl() : CipherUnsecureUrlCheck { + private val regex = kotlin.run { + val protocols = CipherUnsecureUrlCheckUtils.unsecureProtocols + val protocolsGroup = "(" + protocols.joinToString(separator = "|") { it.name } + ")" + "\\s*$protocolsGroup://.*".toRegex() + } + + constructor(directDI: DirectDI) : this() + + override fun invoke(url: String): Boolean = + isUnsecureUrl(url) && + // Most of us do not care about the https for + // local web sites. + !isLocalUrl(url) + + private fun isUnsecureUrl(url: String) = regex.matches(url) + + // TODO: Allow reserved IP addresses to be unsafe + // https://en.wikipedia.org/wiki/Reserved_IP_addresses#IPv4 + private fun isLocalUrl(url: String) = verifyIsLocalUrl(url).getOrElse { false } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/CipherUnsecureUrlUtils.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/CipherUnsecureUrlUtils.kt new file mode 100644 index 00000000..acedb602 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/CipherUnsecureUrlUtils.kt @@ -0,0 +1,22 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import io.ktor.http.URLProtocol + +/** + * @author Artem Chepurnyi + */ +object CipherUnsecureUrlCheckUtils { + private val internalUnsecureToSecureProtocols = listOf( + URLProtocol.HTTP to URLProtocol.HTTPS, + URLProtocol.WS to URLProtocol.WSS, + ) + + val unsecureToSecureProtocols = internalUnsecureToSecureProtocols + .associateBy { it.first.name } + // values -- secure protocols + .mapValues { it.value.second } + + val unsecureProtocols = internalUnsecureToSecureProtocols + // values -- un-secure protocols + .map { it.first } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/CipherUrlCheck.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/CipherUrlCheck.kt new file mode 100644 index 00000000..cb9c5cf5 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/CipherUrlCheck.kt @@ -0,0 +1,121 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.io.io +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.model.DSecret +import com.artemchep.keyguard.common.service.tld.TldService +import com.artemchep.keyguard.common.usecase.CipherUrlCheck +import io.ktor.http.Url +import io.ktor.http.hostWithPort +import org.kodein.di.DirectDI +import org.kodein.di.instance + +/** + * @author Artem Chepurnyi + */ +// TODO: Add special treatments for androidapp:// etc. +class CipherUrlCheckImpl( + private val tldService: TldService, +) : CipherUrlCheck { + companion object { + private const val PROTOCOL_ANDROID_APP = "androidapp://" + } + + constructor(directDI: DirectDI) : this( + tldService = directDI.instance(), + ) + + override fun invoke( + uri: DSecret.Uri, + url: String, + ): IO { + return when (uri.match ?: DSecret.Uri.MatchType.default) { + DSecret.Uri.MatchType.Domain -> { + when { + uri.uri.startsWith(PROTOCOL_ANDROID_APP) -> ::checkUrlMatchByHost + else -> ::checkUrlMatchByDomain + } + } + + DSecret.Uri.MatchType.Host -> ::checkUrlMatchByHost + DSecret.Uri.MatchType.StartsWith -> ::checkUrlMatchByStartsWith + DSecret.Uri.MatchType.Exact -> ::checkUrlMatchByExact + DSecret.Uri.MatchType.RegularExpression -> ::checkUrlMatchByRegularExpression + DSecret.Uri.MatchType.Never -> ::checkUrlMatchByNever + }.invoke(uri.uri, url) + } + + private fun checkUrlMatchByDomain( + a: String, + b: String, + ): IO = ioEffect { + val aHost = urlOf(a).host + val bHost = urlOf(b).host + // Find the actual domain name from the host name. This + // is quite trickery as there are quite a lot of very different + // company owned names. + val aDomain = tldService + .getDomainName(aHost) + .bind() + bHost.endsWith(aDomain) + } + + private fun checkUrlMatchByHost( + a: String, + b: String, + ): IO = ioEffect { + val aHost = urlOf(a).hostWithPort + val bHost = urlOf(b).hostWithPort + aHost == bHost + } + + private fun checkUrlMatchByStartsWith( + a: String, + b: String, + ): IO = ioEffect { + val aFiltered = a.trim().removeSuffix("/") + val bFiltered = b.trim().removeSuffix("/") + bFiltered.startsWith(aFiltered) + } + + private fun checkUrlMatchByExact( + a: String, + b: String, + ): IO = ioEffect { + val aFiltered = a.trim().removeSuffix("/") + val bFiltered = b.trim().removeSuffix("/") + aFiltered == bFiltered + } + + private fun checkUrlMatchByRegularExpression( + a: String, + b: String, + ): IO = ioEffect { + // URIs are mostly case-insensitive, so it makes sense + // that regular expressions should also be case-insensitive. + val aRegex = a.toRegex(RegexOption.IGNORE_CASE) + b.matches(aRegex) + } + + private fun checkUrlMatchByNever( + a: String, + b: String, + ): IO = io(false) + + private fun urlOf(url: String): Url { + val newUrl = ensureUrlSchema(url) + return Url(newUrl) + } + + private fun ensureUrlSchema(url: String) = + if (url.isBlank() || url.contains("://")) { + // The url contains a schema, return + // it as it as. + url + } else { + val newUrl = "https://$url" + newUrl + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/CipherUrlDuplicateCheck.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/CipherUrlDuplicateCheck.kt new file mode 100644 index 00000000..cdc904b8 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/CipherUrlDuplicateCheck.kt @@ -0,0 +1,54 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.effectMap +import com.artemchep.keyguard.common.io.io +import com.artemchep.keyguard.common.model.DSecret +import com.artemchep.keyguard.common.usecase.CipherUrlCheck +import com.artemchep.keyguard.common.usecase.CipherUrlDuplicateCheck +import org.kodein.di.DirectDI +import org.kodein.di.instance + +/** + * @author Artem Chepurnyi + */ +class CipherUrlDuplicateCheckImpl( + private val cipherUrlCheck: CipherUrlCheck, +) : CipherUrlDuplicateCheck { + constructor(directDI: DirectDI) : this( + cipherUrlCheck = directDI.instance(), + ) + + override fun invoke( + a: DSecret.Uri, + b: DSecret.Uri, + ): IO { + val aMatch = a.match ?: DSecret.Uri.MatchType.default + val bMatch = b.match ?: DSecret.Uri.MatchType.default + + // If one of the URIs are set to never match then + // ignore it, it can not be a duplicate. + if ( + aMatch == DSecret.Uri.MatchType.Never || + bMatch == DSecret.Uri.MatchType.Never + ) { + return io(null) + } + + // If both a RegEx, then the only thing we can do is + // to check if they are equal. + if ( + aMatch == DSecret.Uri.MatchType.RegularExpression && + bMatch == DSecret.Uri.MatchType.RegularExpression + ) { + val result = a.takeIf { it.uri == b.uri } + return io(result) + } + + return cipherUrlCheck(a, b.uri) + .effectMap { areMatching -> + a.takeIf { areMatching } + } + } + +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/CopyCipherById.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/CopyCipherById.kt new file mode 100644 index 00000000..dfc7bf7f --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/CopyCipherById.kt @@ -0,0 +1,132 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.io.map +import com.artemchep.keyguard.common.model.AccountId +import com.artemchep.keyguard.common.model.create.CreateRequest +import com.artemchep.keyguard.common.service.crypto.CryptoGenerator +import com.artemchep.keyguard.common.usecase.AddFolder +import com.artemchep.keyguard.common.usecase.CopyCipherById +import com.artemchep.keyguard.core.store.bitwarden.BitwardenCipher +import com.artemchep.keyguard.core.store.bitwarden.attachments +import com.artemchep.keyguard.core.store.bitwarden.name +import com.artemchep.keyguard.feature.confirmation.organization.FolderInfo +import com.artemchep.keyguard.provider.bitwarden.usecase.util.ModifyCipherById +import org.kodein.di.DirectDI +import org.kodein.di.instance + +/** + * @author Artem Chepurnyi + */ +class CopyCipherByIdImpl( + private val modifyCipherById: ModifyCipherById, + private val addFolder: AddFolder, + private val cryptoGenerator: CryptoGenerator, +) : CopyCipherById { + companion object { + private const val TAG = "CopyCipherById.bitwarden" + } + + constructor(directDI: DirectDI) : this( + modifyCipherById = directDI.instance(), + addFolder = directDI.instance(), + cryptoGenerator = directDI.instance(), + ) + + override fun invoke( + cipherIdsToRequests: Map, + ): IO = ioEffect { + val r = cipherIdsToRequests + .mapValues { (key, value) -> + val folderId = when (val folder = value.folder) { + is FolderInfo.None -> null + is FolderInfo.New -> { + val accountId = AccountId(value.accountId!!) + val rq = mapOf( + accountId to folder.name, + ) + val rs = addFolder(rq) + .bind() + rs.first() + } + + is FolderInfo.Id -> folder.id + } + CreateRequest.Ownership( + accountId = value.accountId, + folderId = folderId, + organizationId = value.organizationId, + collectionIds = value.collectionIds, + ) + } + invoke2(r).bind() + } + + private fun invoke2( + cipherIdsToRequests: Map, + ): IO = modifyCipherById( + cipherIdsToRequests + .keys, + ) { model -> + val request = cipherIdsToRequests.getValue(model.cipherId) + val cipherId = cryptoGenerator.uuid() + + val accountId = request.accountId + val folderId = request.folderId + val organizationId = request.organizationId + val collectionIds = request.collectionIds + requireNotNull(accountId) { "Cipher must have an account!" } + require(organizationId == null || collectionIds.isNotEmpty()) { + "When a cipher belongs to an organization, it must have at " + + "least one collection!" + } + + val changesOwnership = request.accountId != model.data_.accountId || + request.organizationId != model.data_.organizationId + + var new = model + new = new.copy( + data_ = new.data_.copy( + cipherId = cipherId, + accountId = accountId, + folderId = folderId, + organizationId = organizationId, + collectionIds = collectionIds, + ), + ) + new = new.copy( + cipherId = cipherId, + accountId = accountId, + folderId = folderId, + ) + // We are creating a copy, that means that the new cipher + // has not been on remote yet. + new = new.copy( + data_ = new.data_.copy( + service = new.data_.service.copy( + remote = null, + deleted = false, + ), + ), + ) + // TODO: Support copying attachments + if (changesOwnership) { + new = new.copy( + data_ = BitwardenCipher.attachments.set(new.data_, emptyList()), + ) + } + // TODO: Check if the name collides + // If we copy to the same account, then add a prefix to + // the name. + if (!changesOwnership) { + new = new.copy( + data_ = BitwardenCipher.name.modify(new.data_) { oldName -> + "Copy of $oldName" + }, + ) + } + new + }.map { Unit } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/FavouriteCipherById.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/FavouriteCipherById.kt new file mode 100644 index 00000000..70a228f1 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/FavouriteCipherById.kt @@ -0,0 +1,38 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.map +import com.artemchep.keyguard.common.usecase.FavouriteCipherById +import com.artemchep.keyguard.core.store.bitwarden.BitwardenCipher +import com.artemchep.keyguard.core.store.bitwarden.favorite +import com.artemchep.keyguard.provider.bitwarden.usecase.util.ModifyCipherById +import org.kodein.di.DirectDI +import org.kodein.di.instance + +/** + * @author Artem Chepurnyi + */ +class FavouriteCipherByIdImpl( + private val modifyCipherById: ModifyCipherById, +) : FavouriteCipherById { + companion object { + private const val TAG = "FavouriteCipherById.bitwarden" + } + + constructor(directDI: DirectDI) : this( + modifyCipherById = directDI.instance(), + ) + + override fun invoke( + cipherIds: Set, + favourite: Boolean, + ): IO = modifyCipherById( + cipherIds, + ) { model -> + var new = model + new = new.copy( + data_ = BitwardenCipher.favorite.set(new.data_, favourite), + ) + new + }.map { Unit } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/GetAccountHasError.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/GetAccountHasError.kt new file mode 100644 index 00000000..0afe27cf --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/GetAccountHasError.kt @@ -0,0 +1,36 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import com.artemchep.keyguard.common.model.AccountId +import com.artemchep.keyguard.common.model.DMeta +import com.artemchep.keyguard.common.usecase.GetAccountHasError +import com.artemchep.keyguard.common.usecase.GetMetas +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.map +import org.kodein.di.DirectDI +import org.kodein.di.instance + +/** + * @author Artem Chepurnyi + */ +class GetAccountHasErrorImpl( + private val getMetas: GetMetas, +) : GetAccountHasError { + companion object { + private const val TAG = "GetAccountHasError.bitwarden" + } + + constructor(directDI: DirectDI) : this( + getMetas = directDI.instance(), + ) + + override fun invoke(accountId: AccountId): Flow = getMetas() + .map { metas -> + metas + .any { + it.accountId == accountId && + it.lastSyncResult is DMeta.LastSyncResult.Failure + } + } + .distinctUntilChanged() +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/GetAccounts.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/GetAccounts.kt new file mode 100644 index 00000000..a14cc963 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/GetAccounts.kt @@ -0,0 +1,39 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import com.artemchep.keyguard.common.model.DAccount +import com.artemchep.keyguard.common.usecase.GetAccounts +import com.artemchep.keyguard.core.store.bitwarden.BitwardenToken +import com.artemchep.keyguard.provider.bitwarden.mapper.toDomain +import com.artemchep.keyguard.provider.bitwarden.repository.BitwardenTokenRepository +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.flowOn +import kotlinx.coroutines.flow.map +import org.kodein.di.DirectDI +import org.kodein.di.instance +import kotlin.coroutines.CoroutineContext + +/** + * @author Artem Chepurnyi + */ +class GetAccountsImpl( + private val tokenRepository: BitwardenTokenRepository, + private val dispatcher: CoroutineContext = Dispatchers.Default, +) : GetAccounts { + companion object { + private const val TAG = "GetAccounts.bitwarden" + } + + constructor(directDI: DirectDI) : this( + tokenRepository = directDI.instance(), + ) + + override fun invoke(): Flow> = tokenRepository + .get() + .map { list -> + list + .map(BitwardenToken::toDomain) + .sorted() + } + .flowOn(dispatcher) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/GetAccountsHasError.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/GetAccountsHasError.kt new file mode 100644 index 00000000..1026af94 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/GetAccountsHasError.kt @@ -0,0 +1,32 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import com.artemchep.keyguard.common.model.DMeta +import com.artemchep.keyguard.common.usecase.GetAccountsHasError +import com.artemchep.keyguard.common.usecase.GetMetas +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.map +import org.kodein.di.DirectDI +import org.kodein.di.instance + +/** + * @author Artem Chepurnyi + */ +class GetAccountsHasErrorImpl( + private val getMetas: GetMetas, +) : GetAccountsHasError { + companion object { + private const val TAG = "GetAccountsHasError.bitwarden" + } + + constructor(directDI: DirectDI) : this( + getMetas = directDI.instance(), + ) + + override fun invoke(): Flow = getMetas() + .map { metas -> + metas + .any { it.lastSyncResult is DMeta.LastSyncResult.Failure } + } + .distinctUntilChanged() +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/GetCipherOpenedCountImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/GetCipherOpenedCountImpl.kt new file mode 100644 index 00000000..c844e68b --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/GetCipherOpenedCountImpl.kt @@ -0,0 +1,18 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import com.artemchep.keyguard.android.downloader.journal.CipherHistoryOpenedRepository +import com.artemchep.keyguard.common.usecase.GetCipherOpenedCount +import kotlinx.coroutines.flow.Flow +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class GetCipherOpenedCountImpl( + private val cipherHistoryOpenedRepository: CipherHistoryOpenedRepository, +) : GetCipherOpenedCount { + constructor(directDI: DirectDI) : this( + cipherHistoryOpenedRepository = directDI.instance(), + ) + + override fun invoke( + ): Flow = cipherHistoryOpenedRepository.getCount() +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/GetCipherOpenedHistoryImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/GetCipherOpenedHistoryImpl.kt new file mode 100644 index 00000000..38dc3514 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/GetCipherOpenedHistoryImpl.kt @@ -0,0 +1,24 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import com.artemchep.keyguard.android.downloader.journal.CipherHistoryOpenedRepository +import com.artemchep.keyguard.common.model.CipherOpenedHistoryMode +import com.artemchep.keyguard.common.model.DCipherOpenedHistory +import com.artemchep.keyguard.common.usecase.GetCipherOpenedHistory +import kotlinx.coroutines.flow.Flow +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class GetCipherOpenedHistoryImpl( + private val cipherHistoryOpenedRepository: CipherHistoryOpenedRepository, +) : GetCipherOpenedHistory { + constructor(directDI: DirectDI) : this( + cipherHistoryOpenedRepository = directDI.instance(), + ) + + override fun invoke( + mode: CipherOpenedHistoryMode, + ): Flow> = when (mode) { + is CipherOpenedHistoryMode.Recent -> cipherHistoryOpenedRepository.getRecent() + is CipherOpenedHistoryMode.Popular -> cipherHistoryOpenedRepository.getPopular() + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/GetCiphers.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/GetCiphers.kt new file mode 100644 index 00000000..2090b527 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/GetCiphers.kt @@ -0,0 +1,56 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import com.artemchep.keyguard.common.model.DSecret +import com.artemchep.keyguard.common.service.logging.LogRepository +import com.artemchep.keyguard.common.usecase.GetCiphers +import com.artemchep.keyguard.common.usecase.GetPasswordStrength +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.common.util.withLogTimeOfFirstEvent +import com.artemchep.keyguard.provider.bitwarden.mapper.toDomain +import com.artemchep.keyguard.provider.bitwarden.repository.BitwardenCipherRepository +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.flowOn +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.shareIn +import org.kodein.di.DirectDI +import org.kodein.di.instance +import kotlin.coroutines.CoroutineContext + +/** + * @author Artem Chepurnyi + */ +class GetCiphersImpl( + private val logRepository: LogRepository, + private val cipherRepository: BitwardenCipherRepository, + private val getPasswordStrength: GetPasswordStrength, + private val windowCoroutineScope: WindowCoroutineScope, + private val dispatcher: CoroutineContext = Dispatchers.Default, +) : GetCiphers { + companion object { + private const val TAG = "GetCiphers.bitwarden" + } + + constructor(directDI: DirectDI) : this( + logRepository = directDI.instance(), + cipherRepository = directDI.instance(), + getPasswordStrength = directDI.instance(), + windowCoroutineScope = directDI.instance(), + ) + + private val sharedFlow = cipherRepository + .get() + .map { list -> + list + .distinctBy { it.cipherId to it.accountId } + .map { + it.toDomain(getPasswordStrength) + } + } + .withLogTimeOfFirstEvent(logRepository, TAG) + .flowOn(dispatcher) + .shareIn(windowCoroutineScope, SharingStarted.WhileSubscribed(5000L), replay = 1) + + override fun invoke(): Flow> = sharedFlow +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/GetCollections.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/GetCollections.kt new file mode 100644 index 00000000..08101094 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/GetCollections.kt @@ -0,0 +1,52 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import com.artemchep.keyguard.common.model.DCollection +import com.artemchep.keyguard.common.service.logging.LogRepository +import com.artemchep.keyguard.common.usecase.GetCollections +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.common.util.withLogTimeOfFirstEvent +import com.artemchep.keyguard.core.store.bitwarden.BitwardenCollection +import com.artemchep.keyguard.provider.bitwarden.mapper.toDomain +import com.artemchep.keyguard.provider.bitwarden.repository.BitwardenCollectionRepository +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.flowOn +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.shareIn +import org.kodein.di.DirectDI +import org.kodein.di.instance +import kotlin.coroutines.CoroutineContext + +/** + * @author Artem Chepurnyi + */ +class GetCollectionsImpl( + private val logRepository: LogRepository, + private val collectionRepository: BitwardenCollectionRepository, + private val windowCoroutineScope: WindowCoroutineScope, + private val dispatcher: CoroutineContext = Dispatchers.Default, +) : GetCollections { + companion object { + private const val TAG = "GetCollections.bitwarden" + } + + constructor(directDI: DirectDI) : this( + logRepository = directDI.instance(), + collectionRepository = directDI.instance(), + windowCoroutineScope = directDI.instance(), + ) + + private val sharedFlow = collectionRepository + .get() + .map { list -> + list + .distinctBy { it.collectionId to it.accountId } + .map(BitwardenCollection::toDomain) + } + .withLogTimeOfFirstEvent(logRepository, TAG) + .flowOn(dispatcher) + .shareIn(windowCoroutineScope, SharingStarted.WhileSubscribed(5000L), replay = 1) + + override fun invoke(): Flow> = sharedFlow +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/GetEmailRelays.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/GetEmailRelays.kt new file mode 100644 index 00000000..ad6ca738 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/GetEmailRelays.kt @@ -0,0 +1,36 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import com.artemchep.keyguard.common.model.DGeneratorEmailRelay +import com.artemchep.keyguard.common.service.relays.repo.GeneratorEmailRelayRepository +import com.artemchep.keyguard.common.usecase.GetEmailRelays +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.flowOn +import kotlinx.coroutines.flow.map +import org.kodein.di.DirectDI +import org.kodein.di.instance +import kotlin.coroutines.CoroutineContext + +/** + * @author Artem Chepurnyi + */ +class GetEmailRelaysImpl( + private val generatorEmailRelayRepository: GeneratorEmailRelayRepository, + private val dispatcher: CoroutineContext = Dispatchers.Default, +) : GetEmailRelays { + companion object { + private const val TAG = "GetAccounts.bitwarden" + } + + constructor(directDI: DirectDI) : this( + generatorEmailRelayRepository = directDI.instance(), + ) + + override fun invoke(): Flow> = generatorEmailRelayRepository + .get() + .map { list -> + list + .sorted() + } + .flowOn(dispatcher) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/GetFingerprint.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/GetFingerprint.kt new file mode 100644 index 00000000..875d528f --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/GetFingerprint.kt @@ -0,0 +1,104 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.model.AccountId +import com.artemchep.keyguard.common.service.crypto.CryptoGenerator +import com.artemchep.keyguard.common.service.text.Base64Service +import com.artemchep.keyguard.common.service.wordlist.WordlistService +import com.artemchep.keyguard.common.usecase.GetFingerprint +import com.artemchep.keyguard.provider.bitwarden.repository.BitwardenProfileRepository +import com.artemchep.keyguard.provider.bitwarden.usecase.util.pbk +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.flowOn +import kotlinx.coroutines.flow.map +import org.kodein.di.DirectDI +import org.kodein.di.instance +import java.math.BigInteger +import kotlin.coroutines.CoroutineContext +import kotlin.math.ceil +import kotlin.math.ln + +/** + * @author Artem Chepurnyi + */ +class GetFingerprintImpl( + private val profileRepository: BitwardenProfileRepository, + private val cryptoGenerator: CryptoGenerator, + private val base64Service: Base64Service, + private val wordlistService: WordlistService, + private val dispatcher: CoroutineContext = Dispatchers.Default, +) : GetFingerprint { + companion object { + private const val TAG = "GetFingerprint.bitwarden" + } + + constructor(directDI: DirectDI) : this( + profileRepository = directDI.instance(), + cryptoGenerator = directDI.instance(), + base64Service = directDI.instance(), + wordlistService = directDI.instance(), + ) + + override fun invoke( + accountId: AccountId, + ): Flow = profileRepository + .getById(accountId) + .map { profileOrNull -> + val profile = requireNotNull(profileOrNull) { "Profile not found." } + val wordList = wordlistService + .get() + .bind() + + val publicKeyHash = kotlin.run { + val privateKey = base64Service.decode(profile.privateKeyBase64) + val publicKey = pbk(privateKey) + cryptoGenerator.hashSha256(publicKey) + } + val fingerprint = cryptoGenerator.hkdf( + seed = publicKeyHash, + info = profile.profileId.toByteArray(), + ) + generateHashPhrase( + hash = fingerprint, + wordList = wordList, + ).joinToString("-") + } + .flowOn(dispatcher) + + private fun generateHashPhrase( + hash: ByteArray, + wordList: List, + minimumEntropy: Int = 64, + ): List { + val wordsCount = wordList.size + val wordsCountBi = BigInteger.valueOf(wordsCount.toLong()) + + val entropyPerWord = ln(wordsCount.toDouble()) / ln(2.0) + val entropyAvailable = hash.size * 4 + var remainingWordsCount = ceil(minimumEntropy / entropyPerWord) + if (remainingWordsCount * entropyPerWord > entropyAvailable) { + throw IllegalStateException("Output entropy of hash function is too small") + } + + val phrase = mutableListOf() + var hashNumber = BigInteger.ZERO + hash.toList() + .asReversed() + .forEachIndexed { index, byte -> + var v = BigInteger.valueOf(byte.toUByte().toLong()) + repeat(index) { + v = v.times(BigInteger.valueOf(256L)) + } + hashNumber = hashNumber.plus(v) + } + while (remainingWordsCount-- > 0) { + val remainder = hashNumber + .remainder(wordsCountBi) + .toInt() + hashNumber = hashNumber.divide(wordsCountBi) + phrase.add(wordList[remainder]) + } + return phrase + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/GetFolderTree.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/GetFolderTree.kt new file mode 100644 index 00000000..18c3872b --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/GetFolderTree.kt @@ -0,0 +1,106 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import com.artemchep.keyguard.common.model.DFolderTree2 +import com.artemchep.keyguard.common.usecase.GetFolderTree +import kotlinx.coroutines.Dispatchers +import org.kodein.di.DirectDI +import kotlin.coroutines.CoroutineContext + +/** + * @author Artem Chepurnyi + */ +class GetFolderTreeImpl( + private val dispatcher: CoroutineContext = Dispatchers.Default, +) : GetFolderTree { + companion object { + private const val TAG = "GetFolderTree.bitwarden" + + private const val DELIMITER = '/' + } + + private val trimPrefixRegex = "^\\s*/\\s*".toRegex() + + constructor(directDI: DirectDI) : this( + ) + + override fun invoke( + lens: (T) -> String, + allFolders: Collection, + folder: T, + ): DFolderTree2 { + // First start with finding a target folder, + // we will later use it to form the hierarchy. + val target = folder + val folders = allFolders + + val rawHierarchy = target.hierarchyIn(lens, folders) + .toList() + .asReversed() + val hierarchy = rawHierarchy + .mapIndexed { index, folder -> + val name = if (index > 0) { + // Slice the name basing on the + // parent folder. + val parent = rawHierarchy[index - 1] + lens(folder).substringAfter(lens(parent)) + .replace(trimPrefixRegex, "") + } else { + lens(folder) + } + DFolderTree2.Node( + name = name, + folder = folder, + ) + } + return DFolderTree2( + folder = target, + hierarchy = hierarchy, + ) + } + + private fun T.hierarchyIn( + lens: (T) -> String, + folders: Collection, + ) = generateSequence(this) { + findParentOrNull( + lens = lens, + folders = folders, + folder = it, + ) + } + + private fun findParentOrNull( + lens: (T) -> String, + folders: Collection, + folder: T, + ) = findParentByNameOrNull( + lens = lens, + folders = folders, + name = lens(folder), + ) + + private fun findParentByNameOrNull( + lens: (T) -> String, + folders: Collection, + name: String, + ): T? { + val index = name.indexOfLast { it == DELIMITER } + if (index == -1) { + // The name does not contain the hierarchy + // symbol, stop searching for the matches. + return null + } + + val parentName = name.substring(0, index) + // Try to find a directory that matches + // parent by the name. + return folders + .firstOrNull { lens(it) == parentName } + // Otherwise search one level deeper. + ?: findParentByNameOrNull( + lens = lens, + folders = folders, + name = parentName, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/GetFolderTreeById.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/GetFolderTreeById.kt new file mode 100644 index 00000000..039fde61 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/GetFolderTreeById.kt @@ -0,0 +1,59 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import com.artemchep.keyguard.common.model.DFolderTree +import com.artemchep.keyguard.common.usecase.GetFolderTree +import com.artemchep.keyguard.common.usecase.GetFolderTreeById +import com.artemchep.keyguard.common.usecase.GetFolders +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.map +import org.kodein.di.DirectDI +import org.kodein.di.instance +import kotlin.coroutines.CoroutineContext + +/** + * @author Artem Chepurnyi + */ +class GetFolderTreeByIdImpl( + private val getFolders: GetFolders, + private val getFolderTree: GetFolderTree, + private val dispatcher: CoroutineContext = Dispatchers.Default, +) : GetFolderTreeById { + companion object { + private const val TAG = "GetFolderTreeById.bitwarden" + } + + constructor(directDI: DirectDI) : this( + getFolders = directDI.instance(), + getFolderTree = directDI.instance(), + ) + + override fun invoke( + folderId: String, + ): Flow = getFolders() + .map { allFolders -> + // First start with finding a target folder, + // we will later use it to form the hierarchy. + val target = allFolders.firstOrNull { it.id == folderId } + ?: return@map null + val folders = allFolders + .filter { it.accountId == target.accountId } + + val tree = getFolderTree.invoke( + lens = { it.name }, + folders, + target, + ) + DFolderTree( + folder = target, + hierarchy = tree + .hierarchy + .map { + DFolderTree.Node( + name = it.name, + folder = it.folder, + ) + }, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/GetFolders.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/GetFolders.kt new file mode 100644 index 00000000..07a031e9 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/GetFolders.kt @@ -0,0 +1,52 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import com.artemchep.keyguard.common.model.DFolder +import com.artemchep.keyguard.common.service.logging.LogRepository +import com.artemchep.keyguard.common.usecase.GetFolders +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.common.util.withLogTimeOfFirstEvent +import com.artemchep.keyguard.core.store.bitwarden.BitwardenFolder +import com.artemchep.keyguard.provider.bitwarden.mapper.toDomain +import com.artemchep.keyguard.provider.bitwarden.repository.BitwardenFolderRepository +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.flowOn +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.shareIn +import org.kodein.di.DirectDI +import org.kodein.di.instance +import kotlin.coroutines.CoroutineContext + +/** + * @author Artem Chepurnyi + */ +class GetFoldersImpl( + private val logRepository: LogRepository, + private val folderRepository: BitwardenFolderRepository, + private val windowCoroutineScope: WindowCoroutineScope, + private val dispatcher: CoroutineContext = Dispatchers.Default, +) : GetFolders { + companion object { + private const val TAG = "GetFolders.bitwarden" + } + + constructor(directDI: DirectDI) : this( + logRepository = directDI.instance(), + folderRepository = directDI.instance(), + windowCoroutineScope = directDI.instance(), + ) + + private val sharedFlow = folderRepository + .get() + .map { list -> + list + .distinctBy { it.folderId to it.accountId } + .map(BitwardenFolder::toDomain) + } + .withLogTimeOfFirstEvent(logRepository, TAG) + .flowOn(dispatcher) + .shareIn(windowCoroutineScope, SharingStarted.WhileSubscribed(5000L), replay = 1) + + override fun invoke(): Flow> = sharedFlow +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/GetMetas.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/GetMetas.kt new file mode 100644 index 00000000..0bdc3961 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/GetMetas.kt @@ -0,0 +1,46 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import com.artemchep.keyguard.common.model.DMeta +import com.artemchep.keyguard.common.usecase.GetMetas +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.core.store.bitwarden.BitwardenMeta +import com.artemchep.keyguard.provider.bitwarden.mapper.toDomain +import com.artemchep.keyguard.provider.bitwarden.repository.BitwardenMetaRepository +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.flowOn +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.shareIn +import org.kodein.di.DirectDI +import org.kodein.di.instance +import kotlin.coroutines.CoroutineContext + +/** + * @author Artem Chepurnyi + */ +class GetMetasImpl( + private val metaRepository: BitwardenMetaRepository, + private val windowCoroutineScope: WindowCoroutineScope, + private val dispatcher: CoroutineContext = Dispatchers.Default, +) : GetMetas { + companion object { + private const val TAG = "GetMetas.bitwarden" + } + + constructor(directDI: DirectDI) : this( + metaRepository = directDI.instance(), + windowCoroutineScope = directDI.instance(), + ) + + private val sharedFlow = metaRepository + .get() + .map { list -> + list + .map(BitwardenMeta::toDomain) + } + .flowOn(dispatcher) + .shareIn(windowCoroutineScope, SharingStarted.WhileSubscribed(5000L), replay = 1) + + override fun invoke(): Flow> = sharedFlow +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizations.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizations.kt new file mode 100644 index 00000000..b2e69844 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/GetOrganizations.kt @@ -0,0 +1,52 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import com.artemchep.keyguard.common.model.DOrganization +import com.artemchep.keyguard.common.service.logging.LogRepository +import com.artemchep.keyguard.common.usecase.GetOrganizations +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.common.util.withLogTimeOfFirstEvent +import com.artemchep.keyguard.core.store.bitwarden.BitwardenOrganization +import com.artemchep.keyguard.provider.bitwarden.mapper.toDomain +import com.artemchep.keyguard.provider.bitwarden.repository.BitwardenOrganizationRepository +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.flowOn +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.shareIn +import org.kodein.di.DirectDI +import org.kodein.di.instance +import kotlin.coroutines.CoroutineContext + +/** + * @author Artem Chepurnyi + */ +class GetOrganizationsImpl( + private val logRepository: LogRepository, + private val organizationRepository: BitwardenOrganizationRepository, + private val windowCoroutineScope: WindowCoroutineScope, + private val dispatcher: CoroutineContext = Dispatchers.Default, +) : GetOrganizations { + companion object { + private const val TAG = "GetOrganizations.bitwarden" + } + + constructor(directDI: DirectDI) : this( + logRepository = directDI.instance(), + organizationRepository = directDI.instance(), + windowCoroutineScope = directDI.instance(), + ) + + private val sharedFlow = organizationRepository + .get() + .map { list -> + list + .distinctBy { it.organizationId to it.accountId } + .map(BitwardenOrganization::toDomain) + } + .withLogTimeOfFirstEvent(logRepository, TAG) + .flowOn(dispatcher) + .shareIn(windowCoroutineScope, SharingStarted.WhileSubscribed(5000L), replay = 1) + + override fun invoke(): Flow> = sharedFlow +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/GetProfiles.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/GetProfiles.kt new file mode 100644 index 00000000..004c7ca7 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/GetProfiles.kt @@ -0,0 +1,60 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import com.artemchep.keyguard.common.model.DProfile +import com.artemchep.keyguard.common.usecase.GetProfiles +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.provider.bitwarden.api.builder.buildHost +import com.artemchep.keyguard.provider.bitwarden.api.builder.buildWebVaultUrl +import com.artemchep.keyguard.provider.bitwarden.mapper.toDomain +import com.artemchep.keyguard.provider.bitwarden.repository.BitwardenProfileRepository +import com.artemchep.keyguard.provider.bitwarden.repository.BitwardenTokenRepository +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.flowOn +import kotlinx.coroutines.flow.shareIn +import org.kodein.di.DirectDI +import org.kodein.di.instance +import kotlin.coroutines.CoroutineContext + +/** + * @author Artem Chepurnyi + */ +class GetProfilesImpl( + private val tokenRepository: BitwardenTokenRepository, + private val profileRepository: BitwardenProfileRepository, + private val windowCoroutineScope: WindowCoroutineScope, + private val dispatcher: CoroutineContext = Dispatchers.Default, +) : GetProfiles { + companion object { + private const val TAG = "GetProfiles.bitwarden" + } + + constructor(directDI: DirectDI) : this( + tokenRepository = directDI.instance(), + profileRepository = directDI.instance(), + windowCoroutineScope = directDI.instance(), + ) + + private val sharedFlow = combine( + tokenRepository.get(), + profileRepository.get(), + ) { tokens, profiles -> + profiles + .mapNotNull { profile -> + val token = tokens.firstOrNull { it.id == profile.accountId } + ?: return@mapNotNull null + val env = token.env.back() + profile.toDomain( + accountHost = env.buildHost(), + accountUrl = env.buildWebVaultUrl(), + ) + } + .sorted() + } + .flowOn(dispatcher) + .shareIn(windowCoroutineScope, SharingStarted.WhileSubscribed(5000L), replay = 1) + + override fun invoke(): Flow> = sharedFlow +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/GetSends.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/GetSends.kt new file mode 100644 index 00000000..255844d9 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/GetSends.kt @@ -0,0 +1,52 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import com.artemchep.keyguard.common.model.DSend +import com.artemchep.keyguard.common.service.logging.LogRepository +import com.artemchep.keyguard.common.usecase.GetSends +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.common.util.withLogTimeOfFirstEvent +import com.artemchep.keyguard.provider.bitwarden.mapper.toDomain +import com.artemchep.keyguard.provider.bitwarden.repository.BitwardenSendRepository +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.flowOn +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.shareIn +import org.kodein.di.DirectDI +import org.kodein.di.instance +import kotlin.coroutines.CoroutineContext + +/** + * @author Artem Chepurnyi + */ +class GetSendsImpl( + private val logRepository: LogRepository, + private val sendRepository: BitwardenSendRepository, + private val windowCoroutineScope: WindowCoroutineScope, + private val dispatcher: CoroutineContext = Dispatchers.Default, +) : GetSends { + companion object { + private const val TAG = "GetSends.bitwarden" + } + + constructor(directDI: DirectDI) : this( + logRepository = directDI.instance(), + sendRepository = directDI.instance(), + windowCoroutineScope = directDI.instance(), + ) + + private val sharedFlow = sendRepository + .get() + .map { list -> + list + .map { + it.toDomain() + } + } + .withLogTimeOfFirstEvent(logRepository, TAG) + .flowOn(dispatcher) + .shareIn(windowCoroutineScope, SharingStarted.WhileSubscribed(5000L), replay = 1) + + override fun invoke(): Flow> = sharedFlow +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/MergeFolderById.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/MergeFolderById.kt new file mode 100644 index 00000000..2905cd99 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/MergeFolderById.kt @@ -0,0 +1,28 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.ioUnit +import com.artemchep.keyguard.common.usecase.MergeFolderById +import com.artemchep.keyguard.provider.bitwarden.usecase.util.ModifyFolderById +import org.kodein.di.DirectDI +import org.kodein.di.instance + +/** + * @author Artem Chepurnyi + */ +class MergeFolderByIdImpl( + private val modifyFolderById: ModifyFolderById, +) : MergeFolderById { + companion object { + private const val TAG = "MergeFolderById.bitwarden" + } + + constructor(directDI: DirectDI) : this( + modifyFolderById = directDI.instance(), + ) + + override fun invoke( + folderIds: Set, + folderName: String, + ): IO = ioUnit() +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/MoveCipherToFolderById.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/MoveCipherToFolderById.kt new file mode 100644 index 00000000..76660dc3 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/MoveCipherToFolderById.kt @@ -0,0 +1,70 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.io.map +import com.artemchep.keyguard.common.model.AccountId +import com.artemchep.keyguard.common.model.FolderOwnership2 +import com.artemchep.keyguard.common.usecase.AddFolder +import com.artemchep.keyguard.common.usecase.MoveCipherToFolderById +import com.artemchep.keyguard.core.store.bitwarden.BitwardenCipher +import com.artemchep.keyguard.core.store.bitwarden.nullableFolderId +import com.artemchep.keyguard.feature.confirmation.organization.FolderInfo +import com.artemchep.keyguard.provider.bitwarden.usecase.util.ModifyCipherById +import org.kodein.di.DirectDI +import org.kodein.di.instance + +/** + * @author Artem Chepurnyi + */ +class MoveCipherToFolderByIdImpl( + private val modifyCipherById: ModifyCipherById, + private val addFolder: AddFolder, +) : MoveCipherToFolderById { + companion object { + private const val TAG = "MoveCipherToFolderById.bitwarden" + } + + constructor(directDI: DirectDI) : this( + modifyCipherById = directDI.instance(), + addFolder = directDI.instance(), + ) + + override fun invoke( + cipherIds: Set, + ownership: FolderOwnership2, + ): IO = ioEffect { + val folderId = when (val folder = ownership.folder) { + is FolderInfo.None -> null + is FolderInfo.New -> { + val accountId = AccountId(ownership.accountId) + val rq = mapOf( + accountId to folder.name, + ) + val rs = addFolder(rq) + .bind() + rs.first() + } + + is FolderInfo.Id -> folder.id + } + performSetFolder( + cipherIds = cipherIds, + folderId = folderId, + ).map { Unit }.bind() + } + + private fun performSetFolder( + cipherIds: Set, + folderId: String?, + ) = modifyCipherById( + cipherIds, + ) { model -> + var new = model + new = new.copy( + data_ = BitwardenCipher.nullableFolderId.set(new.data_, folderId), + ) + new + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/PutAccountColorById.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/PutAccountColorById.kt new file mode 100644 index 00000000..136cd558 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/PutAccountColorById.kt @@ -0,0 +1,117 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import androidx.compose.ui.graphics.Color +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.io.effectMap +import com.artemchep.keyguard.common.io.flatMap +import com.artemchep.keyguard.common.io.ioUnit +import com.artemchep.keyguard.common.io.map +import com.artemchep.keyguard.common.io.parallel +import com.artemchep.keyguard.common.io.toIO +import com.artemchep.keyguard.common.model.AccountId +import com.artemchep.keyguard.common.service.logging.LogRepository +import com.artemchep.keyguard.common.service.text.Base64Service +import com.artemchep.keyguard.common.usecase.PutAccountColorById +import com.artemchep.keyguard.common.util.toHex +import com.artemchep.keyguard.core.store.DatabaseManager +import com.artemchep.keyguard.core.store.bitwarden.BitwardenProfile +import com.artemchep.keyguard.core.store.bitwarden.avatarColor +import com.artemchep.keyguard.provider.bitwarden.api.builder.api +import com.artemchep.keyguard.provider.bitwarden.api.builder.avatar +import com.artemchep.keyguard.provider.bitwarden.entity.AvatarRequestEntity +import com.artemchep.keyguard.provider.bitwarden.repository.BitwardenProfileRepository +import com.artemchep.keyguard.provider.bitwarden.repository.BitwardenTokenRepository +import com.artemchep.keyguard.provider.bitwarden.usecase.util.withRefreshableAccessToken +import io.ktor.client.HttpClient +import kotlinx.coroutines.Dispatchers +import kotlinx.serialization.json.Json +import org.kodein.di.DirectDI +import org.kodein.di.instance + +/** + * @author Artem Chepurnyi + */ +class PutAccountColorByIdImpl( + private val logRepository: LogRepository, + private val tokenRepository: BitwardenTokenRepository, + private val profileRepository: BitwardenProfileRepository, + private val base64Service: Base64Service, + private val json: Json, + private val httpClient: HttpClient, + private val db: DatabaseManager, +) : PutAccountColorById { + companion object { + private const val TAG = "PutAccountColor.bitwarden" + } + + constructor(directDI: DirectDI) : this( + logRepository = directDI.instance(), + tokenRepository = directDI.instance(), + profileRepository = directDI.instance(), + base64Service = directDI.instance(), + json = directDI.instance(), + httpClient = directDI.instance(), + db = directDI.instance(), + ) + + override fun invoke( + request: Map, + ): IO = request + .entries + .map { entry -> + putAccountColorIo( + accountId = entry.key, + color = entry.value, + ) + } + .parallel(Dispatchers.Default) + .map { + // Do not return the result. + } + + private fun putAccountColorIo( + accountId: AccountId, + color: Color, + ) = tokenRepository + .getById(accountId) + .effectMap { user -> + requireNotNull(user) { + "Failed to find account tokens!" + } + + val colorString = color.toHex() + val request = AvatarRequestEntity( + avatarColor = colorString, + ) + withRefreshableAccessToken( + base64Service = base64Service, + httpClient = httpClient, + json = json, + db = db, + user = user, + ) { latestUser -> + val serverEnv = latestUser.env.back() + val accessToken = requireNotNull(latestUser.token).accessToken + serverEnv.api.accounts.avatar( + httpClient = httpClient, + env = serverEnv, + token = accessToken, + model = request, + ) + } + + // TODO: Instead of using cached profile model, use the one returned + // from the avatar update call. + profileRepository + .getById(accountId) + .toIO() + .flatMap { profileOrNull -> + val currentProfile = profileOrNull + ?: return@flatMap ioUnit() + val newProfile = BitwardenProfile.avatarColor.set(currentProfile, colorString) + profileRepository.put(newProfile) + } + .bind() + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/PutAccountMasterPasswordHintById.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/PutAccountMasterPasswordHintById.kt new file mode 100644 index 00000000..06d07f53 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/PutAccountMasterPasswordHintById.kt @@ -0,0 +1,111 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.io.effectMap +import com.artemchep.keyguard.common.io.map +import com.artemchep.keyguard.common.io.parallel +import com.artemchep.keyguard.common.model.AccountId +import com.artemchep.keyguard.common.service.logging.LogRepository +import com.artemchep.keyguard.common.service.text.Base64Service +import com.artemchep.keyguard.common.usecase.PutAccountMasterPasswordHintById +import com.artemchep.keyguard.core.store.DatabaseManager +import com.artemchep.keyguard.core.store.bitwarden.BitwardenProfile +import com.artemchep.keyguard.core.store.bitwarden.masterPasswordHint +import com.artemchep.keyguard.provider.bitwarden.api.builder.api +import com.artemchep.keyguard.provider.bitwarden.api.builder.profile +import com.artemchep.keyguard.provider.bitwarden.entity.ProfileRequestEntity +import com.artemchep.keyguard.provider.bitwarden.repository.BitwardenProfileRepository +import com.artemchep.keyguard.provider.bitwarden.repository.BitwardenTokenRepository +import com.artemchep.keyguard.provider.bitwarden.usecase.util.withRefreshableAccessToken +import io.ktor.client.HttpClient +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.first +import kotlinx.serialization.json.Json +import org.kodein.di.DirectDI +import org.kodein.di.instance + +/** + * @author Artem Chepurnyi + */ +class PutAccountMasterPasswordHintByIdImpl( + private val logRepository: LogRepository, + private val tokenRepository: BitwardenTokenRepository, + private val profileRepository: BitwardenProfileRepository, + private val base64Service: Base64Service, + private val json: Json, + private val httpClient: HttpClient, + private val db: DatabaseManager, +) : PutAccountMasterPasswordHintById { + companion object { + private const val TAG = "PutAccountMasterPasswordHintById.bitwarden" + } + + constructor(directDI: DirectDI) : this( + logRepository = directDI.instance(), + tokenRepository = directDI.instance(), + profileRepository = directDI.instance(), + base64Service = directDI.instance(), + json = directDI.instance(), + httpClient = directDI.instance(), + db = directDI.instance(), + ) + + override fun invoke( + request: Map, + ): IO = request + .entries + .map { entry -> + putAccountNameIo( + accountId = entry.key, + masterPasswordHint = entry.value, + ) + } + .parallel(Dispatchers.Default) + .map { + // Do not return the result. + } + + private fun putAccountNameIo( + accountId: AccountId, + masterPasswordHint: String?, + ) = tokenRepository + .getById(accountId) + .effectMap { user -> + requireNotNull(user) { + "Failed to find account tokens!" + } + + val profile = profileRepository + .getById(accountId) + .first()!! + val request = ProfileRequestEntity( + culture = profile.culture.takeIf { it.isNotBlank() }, + name = profile.name.takeIf { it.isNotBlank() }, + masterPasswordHint = masterPasswordHint, + ) + withRefreshableAccessToken( + base64Service = base64Service, + httpClient = httpClient, + json = json, + db = db, + user = user, + ) { latestUser -> + val serverEnv = latestUser.env.back() + val accessToken = requireNotNull(latestUser.token).accessToken + serverEnv.api.accounts.profile( + httpClient = httpClient, + env = serverEnv, + token = accessToken, + model = request, + ) + } + + // TODO: Instead of using cached profile model, use the one returned + // from the avatar update call. + val newProfile = + BitwardenProfile.masterPasswordHint.set(profile, masterPasswordHint.orEmpty()) + profileRepository.put(newProfile) + .bind() + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/PutAccountNameById.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/PutAccountNameById.kt new file mode 100644 index 00000000..9b8053ae --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/PutAccountNameById.kt @@ -0,0 +1,110 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.io.effectMap +import com.artemchep.keyguard.common.io.map +import com.artemchep.keyguard.common.io.parallel +import com.artemchep.keyguard.common.model.AccountId +import com.artemchep.keyguard.common.service.logging.LogRepository +import com.artemchep.keyguard.common.service.text.Base64Service +import com.artemchep.keyguard.common.usecase.PutAccountNameById +import com.artemchep.keyguard.core.store.DatabaseManager +import com.artemchep.keyguard.core.store.bitwarden.BitwardenProfile +import com.artemchep.keyguard.core.store.bitwarden.name +import com.artemchep.keyguard.provider.bitwarden.api.builder.api +import com.artemchep.keyguard.provider.bitwarden.api.builder.profile +import com.artemchep.keyguard.provider.bitwarden.entity.ProfileRequestEntity +import com.artemchep.keyguard.provider.bitwarden.repository.BitwardenProfileRepository +import com.artemchep.keyguard.provider.bitwarden.repository.BitwardenTokenRepository +import com.artemchep.keyguard.provider.bitwarden.usecase.util.withRefreshableAccessToken +import io.ktor.client.HttpClient +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.first +import kotlinx.serialization.json.Json +import org.kodein.di.DirectDI +import org.kodein.di.instance + +/** + * @author Artem Chepurnyi + */ +class PutAccountNameByIdImpl( + private val logRepository: LogRepository, + private val tokenRepository: BitwardenTokenRepository, + private val profileRepository: BitwardenProfileRepository, + private val base64Service: Base64Service, + private val json: Json, + private val httpClient: HttpClient, + private val db: DatabaseManager, +) : PutAccountNameById { + companion object { + private const val TAG = "PutAccountNameById.bitwarden" + } + + constructor(directDI: DirectDI) : this( + logRepository = directDI.instance(), + tokenRepository = directDI.instance(), + profileRepository = directDI.instance(), + base64Service = directDI.instance(), + json = directDI.instance(), + httpClient = directDI.instance(), + db = directDI.instance(), + ) + + override fun invoke( + request: Map, + ): IO = request + .entries + .map { entry -> + putAccountNameIo( + accountId = entry.key, + accountName = entry.value, + ) + } + .parallel(Dispatchers.Default) + .map { + // Do not return the result. + } + + private fun putAccountNameIo( + accountId: AccountId, + accountName: String, + ) = tokenRepository + .getById(accountId) + .effectMap { user -> + requireNotNull(user) { + "Failed to find account tokens!" + } + + val profile = profileRepository + .getById(accountId) + .first()!! + val request = ProfileRequestEntity( + culture = profile.culture.takeIf { it.isNotBlank() }, + name = accountName, + masterPasswordHint = profile.masterPasswordHint?.takeIf { it.isNotBlank() }, + ) + withRefreshableAccessToken( + base64Service = base64Service, + httpClient = httpClient, + json = json, + db = db, + user = user, + ) { latestUser -> + val serverEnv = latestUser.env.back() + val accessToken = requireNotNull(latestUser.token).accessToken + serverEnv.api.accounts.profile( + httpClient = httpClient, + env = serverEnv, + token = accessToken, + model = request, + ) + } + + // TODO: Instead of using cached profile model, use the one returned + // from the avatar update call. + val newProfile = BitwardenProfile.name.set(profile, accountName) + profileRepository.put(newProfile) + .bind() + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/QueueSyncAll.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/QueueSyncAll.kt new file mode 100644 index 00000000..9ccd55ae --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/QueueSyncAll.kt @@ -0,0 +1,32 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.attempt +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.usecase.QueueSyncAll +import com.artemchep.keyguard.common.usecase.SyncAll +import kotlinx.coroutines.GlobalScope +import org.kodein.di.DirectDI +import org.kodein.di.instance + +/** + * @author Artem Chepurnyi + */ +class QueueSyncAllImpl( + private val syncAll: SyncAll, +) : QueueSyncAll { + companion object { + private const val TAG = "QueueSyncById.bitwarden" + } + + constructor(directDI: DirectDI) : this( + syncAll = directDI.instance(), + ) + + override fun invoke(): IO = ioEffect { + syncAll() + .attempt() + .launchIn(GlobalScope) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/QueueSyncById.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/QueueSyncById.kt new file mode 100644 index 00000000..491912d5 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/QueueSyncById.kt @@ -0,0 +1,33 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.attempt +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.model.AccountId +import com.artemchep.keyguard.common.usecase.QueueSyncById +import com.artemchep.keyguard.common.usecase.SyncById +import kotlinx.coroutines.GlobalScope +import org.kodein.di.DirectDI +import org.kodein.di.instance + +/** + * @author Artem Chepurnyi + */ +class QueueSyncByIdImpl( + private val syncById: SyncById, +) : QueueSyncById { + companion object { + private const val TAG = "QueueSyncById.bitwarden" + } + + constructor(directDI: DirectDI) : this( + syncById = directDI.instance(), + ) + + override fun invoke(accountId: AccountId): IO = ioEffect { + syncById(accountId) + .attempt() + .launchIn(GlobalScope) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/RePromptCipherById.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/RePromptCipherById.kt new file mode 100644 index 00000000..ebc16037 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/RePromptCipherById.kt @@ -0,0 +1,44 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.map +import com.artemchep.keyguard.common.usecase.RePromptCipherById +import com.artemchep.keyguard.core.store.bitwarden.BitwardenCipher +import com.artemchep.keyguard.core.store.bitwarden.reprompt +import com.artemchep.keyguard.provider.bitwarden.usecase.util.ModifyCipherById +import org.kodein.di.DirectDI +import org.kodein.di.instance + +/** + * @author Artem Chepurnyi + */ +class RePromptCipherByIdImpl( + private val modifyCipherById: ModifyCipherById, +) : RePromptCipherById { + companion object { + private const val TAG = "FavouriteCipherById.bitwarden" + } + + constructor(directDI: DirectDI) : this( + modifyCipherById = directDI.instance(), + ) + + override fun invoke( + cipherIds: Set, + reprompt: Boolean, + ): IO = modifyCipherById( + cipherIds, + ) { model -> + val type = if (reprompt) { + BitwardenCipher.RepromptType.Password + } else { + BitwardenCipher.RepromptType.None + } + + var new = model + new = new.copy( + data_ = BitwardenCipher.reprompt.set(new.data_, type), + ) + new + }.map { Unit } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/RemoveAccountById.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/RemoveAccountById.kt new file mode 100644 index 00000000..b3b0daab --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/RemoveAccountById.kt @@ -0,0 +1,53 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.parallel +import com.artemchep.keyguard.common.model.AccountId +import com.artemchep.keyguard.common.model.AccountTask +import com.artemchep.keyguard.common.usecase.RemoveAccountById +import com.artemchep.keyguard.common.usecase.Watchdog +import com.artemchep.keyguard.common.usecase.unit +import com.artemchep.keyguard.core.store.DatabaseManager +import org.kodein.di.DirectDI +import org.kodein.di.instance + +/** + * @author Artem Chepurnyi + */ +class RemoveAccountByIdImpl( + private val db: DatabaseManager, + private val watchdog: Watchdog, +) : RemoveAccountById { + companion object { + private const val TAG = "RemoveAccountById.bitwarden" + } + + constructor(directDI: DirectDI) : this( + db = directDI.instance(), + watchdog = directDI.instance(), + ) + + override fun invoke( + accountIds: Set, + ): IO = accountIds + .map { accountId -> + watchdog + .track( + accountId = accountId, + accountTask = AccountTask.REMOVE, + io = performRemoveAccount( + accountId = accountId, + ), + ) + } + .parallel() + .unit() + + private fun performRemoveAccount( + accountId: AccountId, + ) = db + .mutate { database -> + val dao = database.accountQueries + dao.deleteByAccountId(accountId.id) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/RemoveAccounts.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/RemoveAccounts.kt new file mode 100644 index 00000000..ae8a01d6 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/RemoveAccounts.kt @@ -0,0 +1,28 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.usecase.RemoveAccounts +import com.artemchep.keyguard.core.store.DatabaseManager +import org.kodein.di.DirectDI +import org.kodein.di.instance + +/** + * @author Artem Chepurnyi + */ +class RemoveAccountsImpl( + private val db: DatabaseManager, +) : RemoveAccounts { + companion object { + private const val TAG = "RemoveAccounts.bitwarden" + } + + constructor(directDI: DirectDI) : this( + db = directDI.instance(), + ) + + override fun invoke(): IO = db + .mutate { database -> + val dao = database.accountQueries + dao.deleteAll() + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/RemoveCipherById.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/RemoveCipherById.kt new file mode 100644 index 00000000..620e076e --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/RemoveCipherById.kt @@ -0,0 +1,45 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.map +import com.artemchep.keyguard.common.usecase.RemoveCipherById +import com.artemchep.keyguard.core.store.bitwarden.BitwardenCipher +import com.artemchep.keyguard.core.store.bitwarden.deleted +import com.artemchep.keyguard.core.store.bitwarden.service +import com.artemchep.keyguard.provider.bitwarden.usecase.util.ModifyCipherById +import org.kodein.di.DirectDI +import org.kodein.di.instance + +/** + * @author Artem Chepurnyi + */ +class RemoveCipherByIdImpl( + private val modifyCipherById: ModifyCipherById, +) : RemoveCipherById { + companion object { + private const val TAG = "RemoveCipherById.bitwarden" + } + + constructor(directDI: DirectDI) : this( + modifyCipherById = directDI.instance(), + ) + + override fun invoke( + cipherIds: Set, + ): IO = performRemoveCipher( + cipherIds = cipherIds, + ).map { Unit } + + private fun performRemoveCipher( + cipherIds: Set, + ) = modifyCipherById( + cipherIds = cipherIds, + checkIfStub = false, // we want to be able to delete failed items + ) { model -> + var new = model + new = new.copy( + data_ = BitwardenCipher.service.deleted.set(new.data_, true), + ) + new + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/RemoveEmailRelayById.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/RemoveEmailRelayById.kt new file mode 100644 index 00000000..43986ef0 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/RemoveEmailRelayById.kt @@ -0,0 +1,34 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.map +import com.artemchep.keyguard.common.service.relays.repo.GeneratorEmailRelayRepository +import com.artemchep.keyguard.common.usecase.RemoveEmailRelayById +import org.kodein.di.DirectDI +import org.kodein.di.instance + +/** + * @author Artem Chepurnyi + */ +class RemoveEmailRelayByIdImpl( + private val generatorEmailRelayRepository: GeneratorEmailRelayRepository, +) : RemoveEmailRelayById { + companion object { + private const val TAG = "RemoveEmailRelayById.bitwarden" + } + + constructor(directDI: DirectDI) : this( + generatorEmailRelayRepository = directDI.instance(), + ) + + override fun invoke( + emailRelayIds: Set, + ): IO = performRemoveEmailRelay( + emailRelayIds = emailRelayIds, + ).map { Unit } + + private fun performRemoveEmailRelay( + emailRelayIds: Set, + ) = generatorEmailRelayRepository + .removeByIds(emailRelayIds) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/RemoveFolderById.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/RemoveFolderById.kt new file mode 100644 index 00000000..c713f87c --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/RemoveFolderById.kt @@ -0,0 +1,60 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.flatMap +import com.artemchep.keyguard.common.io.ioUnit +import com.artemchep.keyguard.common.usecase.RemoveFolderById +import com.artemchep.keyguard.common.usecase.TrashCipherByFolderId +import com.artemchep.keyguard.core.store.bitwarden.BitwardenFolder +import com.artemchep.keyguard.core.store.bitwarden.deleted +import com.artemchep.keyguard.core.store.bitwarden.service +import com.artemchep.keyguard.provider.bitwarden.usecase.util.ModifyFolderById +import org.kodein.di.DirectDI +import org.kodein.di.instance + +/** + * @author Artem Chepurnyi + */ +class RemoveFolderByIdImpl( + private val modifyFolderById: ModifyFolderById, + private val trashCipherByFolderId: TrashCipherByFolderId, +) : RemoveFolderById { + companion object { + private const val TAG = "RemoveFolderById.bitwarden" + } + + constructor(directDI: DirectDI) : this( + modifyFolderById = directDI.instance(), + trashCipherByFolderId = directDI.instance(), + ) + + override fun invoke( + folderIds: Set, + onCiphersConflict: RemoveFolderById.OnCiphersConflict, + ): IO = performRemoveFolder( + folderIds = folderIds, + onCiphersConflict = onCiphersConflict, + ).flatMap { + when (onCiphersConflict) { + RemoveFolderById.OnCiphersConflict.TRASH -> performTrashCiphersByFolderId(folderIds) + RemoveFolderById.OnCiphersConflict.IGNORE -> ioUnit() + } + } + + private fun performRemoveFolder( + folderIds: Set, + onCiphersConflict: RemoveFolderById.OnCiphersConflict, + ) = modifyFolderById( + folderIds, + ) { model -> + var new = model + new = new.copy( + data_ = BitwardenFolder.service.deleted.set(new.data_, true), + ) + new + } + + private fun performTrashCiphersByFolderId( + folderIds: Set, + ) = trashCipherByFolderId(folderIds) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/RenameFolderById.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/RenameFolderById.kt new file mode 100644 index 00000000..06473ffc --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/RenameFolderById.kt @@ -0,0 +1,45 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.usecase.RenameFolderById +import com.artemchep.keyguard.core.store.bitwarden.BitwardenFolder +import com.artemchep.keyguard.core.store.bitwarden.name +import com.artemchep.keyguard.provider.bitwarden.usecase.util.ModifyFolderById +import org.kodein.di.DirectDI +import org.kodein.di.instance + +/** + * @author Artem Chepurnyi + */ +class RenameFolderByIdImpl( + private val modifyFolderById: ModifyFolderById, +) : RenameFolderById { + companion object { + private const val TAG = "RenameFolderById.bitwarden" + } + + constructor(directDI: DirectDI) : this( + modifyFolderById = directDI.instance(), + ) + + override fun invoke( + folderIdsToNames: Map, + ): IO = performRenameFolder( + folderIdsToNames = folderIdsToNames, + ) + + private fun performRenameFolder( + folderIdsToNames: Map, + ) = modifyFolderById( + folderIdsToNames + .keys, + ) { model -> + val newName = folderIdsToNames.getValue(model.folderId) + + var new = model + new = new.copy( + data_ = BitwardenFolder.name.set(new.data_, newName), + ) + new + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/RestoreCipherById.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/RestoreCipherById.kt new file mode 100644 index 00000000..1a2d1cc5 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/RestoreCipherById.kt @@ -0,0 +1,44 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.map +import com.artemchep.keyguard.common.usecase.RestoreCipherById +import com.artemchep.keyguard.core.store.bitwarden.BitwardenCipher +import com.artemchep.keyguard.core.store.bitwarden.nullableDeletedDate +import com.artemchep.keyguard.provider.bitwarden.usecase.util.ModifyCipherById +import org.kodein.di.DirectDI +import org.kodein.di.instance + +/** + * @author Artem Chepurnyi + */ +class RestoreCipherByIdImpl( + private val modifyCipherById: ModifyCipherById, +) : RestoreCipherById { + companion object { + private const val TAG = "RestoreCipherById.bitwarden" + } + + constructor(directDI: DirectDI) : this( + modifyCipherById = directDI.instance(), + ) + + override fun invoke( + cipherIds: Set, + ): IO = performRestoreCipher( + cipherIds = cipherIds, + ).map { Unit } + + private fun performRestoreCipher( + cipherIds: Set, + ) = modifyCipherById( + cipherIds, + ) { model -> + var new = model + // Un-trash the model. + new = model.copy( + data_ = BitwardenCipher.nullableDeletedDate.set(new.data_, null), + ) + new + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/RetryCipher.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/RetryCipher.kt new file mode 100644 index 00000000..693f6f84 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/RetryCipher.kt @@ -0,0 +1,32 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.map +import com.artemchep.keyguard.common.usecase.RetryCipher +import com.artemchep.keyguard.provider.bitwarden.usecase.util.ModifyCipherById +import org.kodein.di.DirectDI +import org.kodein.di.instance + +/** + * @author Artem Chepurnyi + */ +class RetryCipherImpl( + private val modifyCipherById: ModifyCipherById, +) : RetryCipher { + companion object { + private const val TAG = "RetryCipher.bitwarden" + } + + constructor(directDI: DirectDI) : this( + modifyCipherById = directDI.instance(), + ) + + override fun invoke( + cipherIds: Set, + ): IO = modifyCipherById( + cipherIds = cipherIds, + checkIfChanged = false, + ) { model -> + model // change nothing + }.map { Unit } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/SyncAll.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/SyncAll.kt new file mode 100644 index 00000000..1a7e923f --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/SyncAll.kt @@ -0,0 +1,57 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import com.artemchep.keyguard.common.io.attempt +import com.artemchep.keyguard.common.io.flatMap +import com.artemchep.keyguard.common.io.map +import com.artemchep.keyguard.common.io.parallel +import com.artemchep.keyguard.common.model.AccountId +import com.artemchep.keyguard.common.service.logging.LogRepository +import com.artemchep.keyguard.common.usecase.SyncAll +import com.artemchep.keyguard.provider.bitwarden.repository.BitwardenTokenRepository +import com.artemchep.keyguard.provider.bitwarden.usecase.internal.SyncByToken +import kotlinx.coroutines.Dispatchers +import org.kodein.di.DirectDI +import org.kodein.di.instance + +/** + * @author Artem Chepurnyi + */ +class SyncAllImpl( + private val logRepository: LogRepository, + private val tokenRepository: BitwardenTokenRepository, + private val syncByToken: SyncByToken, +) : SyncAll { + companion object { + private const val TAG = "SyncAll.bitwarden" + } + + constructor(directDI: DirectDI) : this( + logRepository = directDI.instance(), + tokenRepository = directDI.instance(), + syncByToken = directDI.instance(), + ) + + override fun invoke() = tokenRepository.getSnapshot() + .flatMap { tokens -> + logRepository.post( + tag = TAG, + message = "Loaded ${tokens.size} accounts from the store.", + ) + + // Sync all of the accounts simultaneously, on errors do not + // interrupt other io-es. + tokens + .map { token -> + syncByToken(token) + .attempt() + .map { either -> + val accountId = AccountId(token.id) + accountId to either + } + } + .parallel(Dispatchers.IO) + .map { list -> + list.toMap() + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/SyncById.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/SyncById.kt new file mode 100644 index 00000000..68edbaf5 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/SyncById.kt @@ -0,0 +1,50 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.flatMap +import com.artemchep.keyguard.common.io.io +import com.artemchep.keyguard.common.io.map +import com.artemchep.keyguard.common.model.AccountId +import com.artemchep.keyguard.common.usecase.SyncById +import com.artemchep.keyguard.provider.bitwarden.repository.BitwardenTokenRepository +import com.artemchep.keyguard.provider.bitwarden.usecase.internal.SyncByToken +import org.kodein.di.DirectDI +import org.kodein.di.instance + +/** + * @author Artem Chepurnyi + */ +class SyncByIdImpl( + private val tokenRepository: BitwardenTokenRepository, + private val syncByToken: SyncByToken, +) : SyncById { + companion object { + private const val TAG = "SyncById.bitwarden" + } + + constructor(directDI: DirectDI) : this( + tokenRepository = directDI.instance(), + syncByToken = directDI.instance(), + ) + + override fun invoke(accountId: AccountId): IO = tokenRepository.getSnapshot() + // Find the correct account model + // by its account id. + .map { accounts -> + accounts + .firstOrNull { it.id == accountId.id } + } + .flatMap { token -> + if (token == null) { + // We could not find the tokens + // for this account. + return@flatMap io(false) + } + + syncByToken(token) + .map { + // Handled successfully. + true + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/TrashCipherByFolderId.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/TrashCipherByFolderId.kt new file mode 100644 index 00000000..0c342dfb --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/TrashCipherByFolderId.kt @@ -0,0 +1,50 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.effectMap +import com.artemchep.keyguard.common.io.flatMap +import com.artemchep.keyguard.common.io.map +import com.artemchep.keyguard.common.io.toIO +import com.artemchep.keyguard.common.usecase.GetCiphers +import com.artemchep.keyguard.common.usecase.TrashCipherByFolderId +import com.artemchep.keyguard.common.usecase.TrashCipherById +import org.kodein.di.DirectDI +import org.kodein.di.instance + +/** + * @author Artem Chepurnyi + */ +class TrashCipherByFolderIdImpl( + private val getCiphers: GetCiphers, + private val trashCipherById: TrashCipherById, +) : TrashCipherByFolderId { + companion object { + private const val TAG = "TrashCipherByFolderId.bitwarden" + } + + constructor(directDI: DirectDI) : this( + getCiphers = directDI.instance(), + trashCipherById = directDI.instance(), + ) + + override fun invoke( + folderIds: Set, + ): IO = performTrashCipherByFolderId( + folderIds = folderIds, + ).map { Unit } + + private fun performTrashCipherByFolderId( + folderIds: Set, + ) = getCiphers() + .toIO() + .effectMap { ciphers -> + ciphers + .asSequence() + .filter { it.folderId in folderIds } + .map { it.id } + .toSet() + } + .flatMap { cipherIds -> + trashCipherById(cipherIds) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/TrashCipherById.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/TrashCipherById.kt new file mode 100644 index 00000000..30b5df45 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/TrashCipherById.kt @@ -0,0 +1,51 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.map +import com.artemchep.keyguard.common.usecase.TrashCipherById +import com.artemchep.keyguard.core.store.bitwarden.BitwardenCipher +import com.artemchep.keyguard.core.store.bitwarden.deletedDate +import com.artemchep.keyguard.provider.bitwarden.usecase.util.ModifyCipherById +import kotlinx.datetime.Clock +import org.kodein.di.DirectDI +import org.kodein.di.instance + +/** + * @author Artem Chepurnyi + */ +class TrashCipherByIdImpl( + private val modifyCipherById: ModifyCipherById, +) : TrashCipherById { + companion object { + private const val TAG = "TrashCipherById.bitwarden" + } + + constructor(directDI: DirectDI) : this( + modifyCipherById = directDI.instance(), + ) + + override fun invoke( + cipherIds: Set, + ): IO = performTrashCipher( + cipherIds = cipherIds, + ).map { Unit } + + private fun performTrashCipher( + cipherIds: Set, + ) = modifyCipherById( + cipherIds, + // Bitwarden does not update revision date of a + // trashed cipher. + updateRevisionDate = false, + ) { model -> + var new = model + // Add the deleted instant to mark the model as trashed. + // This does not actually remove the cipher, it + // only puts it in the bin. + val now = Clock.System.now() + new = new.copy( + data_ = BitwardenCipher.deletedDate.set(new.data_, now), + ) + new + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/internal/AddAccount.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/internal/AddAccount.kt new file mode 100644 index 00000000..9e5a5635 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/internal/AddAccount.kt @@ -0,0 +1,15 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase.internal + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.AccountId +import com.artemchep.keyguard.provider.bitwarden.ServerEnv +import com.artemchep.keyguard.provider.bitwarden.ServerTwoFactorToken + +interface AddAccount : ( + String?, + ServerEnv, + ServerTwoFactorToken?, + String?, + String, + String, +) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/internal/AddAccountImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/internal/AddAccountImpl.kt new file mode 100644 index 00000000..89415dad --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/internal/AddAccountImpl.kt @@ -0,0 +1,139 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase.internal + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.io.effectTap +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.io.map +import com.artemchep.keyguard.common.io.measure +import com.artemchep.keyguard.common.io.toIO +import com.artemchep.keyguard.common.model.AccountId +import com.artemchep.keyguard.common.service.crypto.CryptoGenerator +import com.artemchep.keyguard.common.service.logging.LogRepository +import com.artemchep.keyguard.common.service.text.Base64Service +import com.artemchep.keyguard.common.usecase.DeviceIdUseCase +import com.artemchep.keyguard.common.usecase.GetAccounts +import com.artemchep.keyguard.common.usecase.GetPurchased +import com.artemchep.keyguard.common.usecase.QueueSyncById +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.common.usecase.premium +import com.artemchep.keyguard.core.store.DatabaseManager +import com.artemchep.keyguard.core.store.bitwarden.BitwardenToken +import com.artemchep.keyguard.provider.bitwarden.ServerEnv +import com.artemchep.keyguard.provider.bitwarden.ServerTwoFactorToken +import com.artemchep.keyguard.provider.bitwarden.api.login +import io.ktor.client.HttpClient +import kotlinx.coroutines.Dispatchers +import kotlinx.serialization.json.Json +import org.kodein.di.DirectDI +import org.kodein.di.instance + +/** + * @author Artem Chepurnyi + */ +class AddAccountImpl( + private val getPurchased: GetPurchased, + private val getAccounts: GetAccounts, + private val queueSyncById: QueueSyncById, + private val windowCoroutineScope: WindowCoroutineScope, + private val logRepository: LogRepository, + private val deviceIdUseCase: DeviceIdUseCase, + private val cryptoGenerator: CryptoGenerator, + private val base64Service: Base64Service, + private val httpClient: HttpClient, + private val json: Json, + private val db: DatabaseManager, +) : AddAccount { + companion object { + private const val TAG = "AddAccount.bitwarden" + } + + private val needsPremiumToAddAccountIo = getAccounts() + .toIO() + .map { accounts -> accounts.size > 1 } + + constructor(directDI: DirectDI) : this( + getPurchased = directDI.instance(), + getAccounts = directDI.instance(), + queueSyncById = directDI.instance(), + windowCoroutineScope = directDI.instance(), + logRepository = directDI.instance(), + deviceIdUseCase = directDI.instance(), + cryptoGenerator = directDI.instance(), + base64Service = directDI.instance(), + httpClient = directDI.instance(), + json = directDI.instance(), + db = directDI.instance(), + ) + + override fun invoke( + accountId: String?, + env: ServerEnv, + twoFactorToken: ServerTwoFactorToken?, + clientSecret: String?, + email: String, + password: String, + ): IO = ioEffect(Dispatchers.Default) { + val (cryptoSecrets, apiSecrets) = login( + deviceIdUseCase = deviceIdUseCase, + cryptoGenerator = cryptoGenerator, + base64Service = base64Service, + httpClient = httpClient, + json = json, + env = env, + twoFactorToken = twoFactorToken, + clientSecret = clientSecret?.takeUnless { it.isBlank() }, + email = email, + password = password, + ) + if (accountId != null) { + // TODO: Validate that the old account matches a new one. + // This may save you from merging two unrelated ciphers together. + } + val token = BitwardenToken( + id = accountId ?: cryptoGenerator.uuid(), + key = BitwardenToken.Key( + masterKeyBase64 = base64Service.encodeToString(cryptoSecrets.masterKey), + passwordKeyBase64 = base64Service.encodeToString(cryptoSecrets.passwordKey), + encryptionKeyBase64 = base64Service.encodeToString(cryptoSecrets.encryptionKey), + macKeyBase64 = base64Service.encodeToString(cryptoSecrets.macKey), + ), + token = BitwardenToken.Token( + refreshToken = apiSecrets.refreshToken, + accessToken = apiSecrets.accessToken, + expirationDate = apiSecrets.accessTokenExpiryDate, + ), + user = BitwardenToken.User( + email = email, + ), + env = BitwardenToken.Environment.of( + model = env, + ), + ) + + db.mutate { database -> + database.accountQueries.insert( + accountId = token.id, + data = token, + ) + }.bind() + + AccountId(token.id) + } + // Require premium for adding more than + // one account. + .premium( + getPurchased = getPurchased, + predicate = needsPremiumToAddAccountIo, + ) + .effectTap { finalAccountId -> + queueSyncById(finalAccountId) + .launchIn(windowCoroutineScope) + } + // Log the time spent adding an account. + .measure { duration, finalAccountId -> + val message = "Added an account '$finalAccountId' in $duration." + logRepository.post(TAG, message) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/internal/RequestEmailTfa.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/internal/RequestEmailTfa.kt new file mode 100644 index 00000000..23a58d7d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/internal/RequestEmailTfa.kt @@ -0,0 +1,60 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase.internal + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.service.crypto.CryptoGenerator +import com.artemchep.keyguard.common.service.text.Base64Service +import com.artemchep.keyguard.common.usecase.DeviceIdUseCase +import com.artemchep.keyguard.provider.bitwarden.ServerEnv +import com.artemchep.keyguard.provider.bitwarden.api.builder.api +import com.artemchep.keyguard.provider.bitwarden.api.builder.requestEmailCode +import com.artemchep.keyguard.provider.bitwarden.api.obtainSecrets +import com.artemchep.keyguard.provider.bitwarden.entity.TwoFactorEmailRequestEntity +import io.ktor.client.HttpClient +import org.kodein.di.DirectDI +import org.kodein.di.instance + +interface RequestEmailTfa : ( + ServerEnv, + String, // email + String, // password +) -> IO + +class RequestEmailTfaImpl( + private val deviceIdUseCase: DeviceIdUseCase, + private val cryptoGenerator: CryptoGenerator, + private val base64Service: Base64Service, + private val httpClient: HttpClient, +) : RequestEmailTfa { + constructor(directDI: DirectDI) : this( + deviceIdUseCase = directDI.instance(), + cryptoGenerator = directDI.instance(), + base64Service = directDI.instance(), + httpClient = directDI.instance(), + ) + + override fun invoke( + env: ServerEnv, + email: String, + password: String, + ): IO = ioEffect { + val secrets = obtainSecrets( + cryptoGenerator = cryptoGenerator, + httpClient = httpClient, + env = env, + email = email, + password = password, + ) + val request = TwoFactorEmailRequestEntity( + email = email, + masterPasswordHash = base64Service.encodeToString(secrets.passwordKey), + deviceIdentifier = deviceIdUseCase().bind(), + ) + env.api.twoFactor.requestEmailCode( + httpClient = httpClient, + env = env, + model = request, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/internal/SyncByToken.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/internal/SyncByToken.kt new file mode 100644 index 00000000..d1d7616a --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/internal/SyncByToken.kt @@ -0,0 +1,6 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase.internal + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.core.store.bitwarden.BitwardenToken + +interface SyncByToken : (BitwardenToken) -> IO diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/internal/SyncByTokenImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/internal/SyncByTokenImpl.kt new file mode 100644 index 00000000..a5a5dece --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/internal/SyncByTokenImpl.kt @@ -0,0 +1,161 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase.internal + +import app.cash.sqldelight.coroutines.asFlow +import com.artemchep.keyguard.common.exception.HttpException +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.biFlatTap +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.io.measure +import com.artemchep.keyguard.common.io.toIO +import com.artemchep.keyguard.common.model.AccountId +import com.artemchep.keyguard.common.model.AccountTask +import com.artemchep.keyguard.common.service.crypto.CipherEncryptor +import com.artemchep.keyguard.common.service.crypto.CryptoGenerator +import com.artemchep.keyguard.common.service.logging.LogRepository +import com.artemchep.keyguard.common.service.text.Base64Service +import com.artemchep.keyguard.common.usecase.Watchdog +import com.artemchep.keyguard.core.store.DatabaseManager +import com.artemchep.keyguard.core.store.DatabaseSyncer +import com.artemchep.keyguard.core.store.bitwarden.BitwardenMeta +import com.artemchep.keyguard.core.store.bitwarden.BitwardenToken +import com.artemchep.keyguard.provider.bitwarden.api.SyncEngine +import com.artemchep.keyguard.provider.bitwarden.usecase.util.withRefreshableAccessToken +import io.ktor.client.HttpClient +import io.ktor.http.HttpStatusCode +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.sync.Mutex +import kotlinx.coroutines.sync.withLock +import kotlinx.datetime.Clock +import kotlinx.serialization.json.Json +import org.kodein.di.DirectDI +import org.kodein.di.instance + +/** + * @author Artem Chepurnyi + */ +class SyncByTokenImpl( + private val logRepository: LogRepository, + private val cipherEncryptor: CipherEncryptor, + private val cryptoGenerator: CryptoGenerator, + private val base64Service: Base64Service, + private val json: Json, + private val httpClient: HttpClient, + private val db: DatabaseManager, + private val dbSyncer: DatabaseSyncer, + private val watchdog: Watchdog, +) : SyncByToken { + companion object { + private const val TAG = "SyncById.bitwarden" + } + + private val mutex = Mutex() + + constructor(directDI: DirectDI) : this( + logRepository = directDI.instance(), + cipherEncryptor = directDI.instance(), + cryptoGenerator = directDI.instance(), + base64Service = directDI.instance(), + json = directDI.instance(), + httpClient = directDI.instance(), + db = directDI.instance(), + dbSyncer = directDI.instance(), + watchdog = directDI.instance(), + ) + + override fun invoke(user: BitwardenToken): IO = watchdog + .track( + accountId = AccountId(user.id), + accountTask = AccountTask.SYNC, + ) { + // We want to automatically request a new access token if the old + // one has expired. + withRefreshableAccessToken( + base64Service = base64Service, + httpClient = httpClient, + json = json, + db = db, + user = user, + ) { latestUser -> + val syncEngine = SyncEngine( + httpClient = httpClient, + dbManager = db, + base64Service = base64Service, + cryptoGenerator = cryptoGenerator, + cipherEncryptor = cipherEncryptor, + logRepository = logRepository, + user = latestUser, + syncer = dbSyncer, + ) + mutex.withLock { + syncEngine.sync() + } +// sss( +// logRepository = logRepository, +// cipherEncryptor = cipherEncryptor, +// cryptoGenerator = cryptoGenerator, +// base64Service = base64Service, +// httpClient = httpClient, +// db = db, +// user = latestUser, +// ) + } + } + .biFlatTap( + ifException = { e -> + db.mutate { + val dao = it.metaQueries + val existingMeta = dao + .getByAccountId(accountId = user.id) + .asFlow() + .map { it.executeAsList().firstOrNull()?.data_ } + .toIO() + .bind() + + val reason = e.localizedMessage ?: e.message + val requiresAuthentication = e is HttpException && + ( + e.statusCode == HttpStatusCode.Unauthorized || + e.statusCode == HttpStatusCode.Forbidden + ) + + val now = Clock.System.now() + val meta = BitwardenMeta( + accountId = user.id, + // Copy the existing successful sync timestamp + // into a new model. + lastSyncTimestamp = existingMeta?.lastSyncTimestamp, + lastSyncResult = BitwardenMeta.LastSyncResult.Failure( + timestamp = now, + reason = reason, + requiresAuthentication = requiresAuthentication, + ), + ) + + dao.insert( + accountId = user.id, + data = meta, + ) + } + }, + ifSuccess = { + db.mutate { + val now = Clock.System.now() + val meta = BitwardenMeta( + accountId = user.id, + lastSyncTimestamp = now, + lastSyncResult = BitwardenMeta.LastSyncResult.Success, + ) + + val dao = it.metaQueries + dao.insert( + accountId = user.id, + data = meta, + ) + } + }, + ) + .measure { duration, _ -> + val message = "Synced user ${user.formatUser()} in $duration." + logRepository.post(TAG, message) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/util/CanModify.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/util/CanModify.kt new file mode 100644 index 00000000..05bae208 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/util/CanModify.kt @@ -0,0 +1,12 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase.util + +import com.artemchep.keyguard.core.store.bitwarden.BitwardenService + +fun BitwardenService.canDelete() = true + +fun BitwardenService.canEdit() = when (error?.code) { + // If the cipher was not properly decoded, then + // prevent it from being edited. + BitwardenService.Error.CODE_DECODING_FAILED -> false + else -> true +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyCipherById.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyCipherById.kt new file mode 100644 index 00000000..f779f240 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyCipherById.kt @@ -0,0 +1,107 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase.util + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.AccountId +import com.artemchep.keyguard.core.store.bitwarden.BitwardenCipher +import com.artemchep.keyguard.core.store.bitwarden.login +import com.artemchep.keyguard.data.bitwarden.Cipher +import kotlinx.datetime.Clock +import org.kodein.di.DirectDI +import org.kodein.di.instance + +/** + * @author Artem Chepurnyi + */ +class ModifyCipherById( + private val modifyDatabase: ModifyDatabase, +) { + companion object { + private const val TAG = "ModifyCipherById.bitwarden" + } + + constructor(directDI: DirectDI) : this( + modifyDatabase = directDI.instance(), + ) + + operator fun invoke( + cipherIds: Set, + checkIfStub: Boolean = true, + checkIfChanged: Boolean = true, + updateRevisionDate: Boolean = true, + transform: suspend (Cipher) -> Cipher, + ): IO> = modifyDatabase { database -> + val dao = database.cipherQueries + val now = Clock.System.now() + val models = dao + .get() + .executeAsList() + .filter { + it.cipherId in cipherIds + } + .mapNotNull { model -> + // If the cipher was not properly decoded, then + // prevent it from being pushed to backend. + val service = model.data_.service + if (checkIfStub && !service.canEdit()) { + return@mapNotNull null + } + var new = model + new = transform(new) + // If the cipher was not changed, then we do not need to + // update it in the database. + if (checkIfChanged && new == model) { + return@mapNotNull null + } + + if (updateRevisionDate) { + // Password revision date: + // When we edit or create an item with a password, we must set the + // passwords revision date. Otherwise you loose the info of when the + // password was created. + val newData = BitwardenCipher.login.modify(new.data_) { login -> + val passwordRevisionDate = login.passwordRevisionDate + ?: new.data_.revisionDate + .takeIf { + login.password != null || + login.passwordHistory.isNotEmpty() + } + login.copy(passwordRevisionDate = passwordRevisionDate) + } + + new = new.copy( + data_ = newData.copy( + revisionDate = now, + ), + ) + } + new + } + if (models.isEmpty()) { + return@modifyDatabase ModifyDatabase.Result( + changedAccountIds = emptySet(), + value = emptySet(), + ) + } + dao.transaction { + models.forEach { cipher -> + dao.insert( + cipherId = cipher.cipherId, + accountId = cipher.accountId, + folderId = cipher.folderId, + data = cipher.data_, + ) + } + } + + val changedAccountIds = models + .map { AccountId(it.accountId) } + .toSet() + val changedCipherIds = models + .map { it.cipherId } + .toSet() + ModifyDatabase.Result( + changedAccountIds = changedAccountIds, + value = changedCipherIds, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyDatabase.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyDatabase.kt new file mode 100644 index 00000000..2c937a2a --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyDatabase.kt @@ -0,0 +1,79 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase.util + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.effectTap +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.io.map +import com.artemchep.keyguard.common.model.AccountId +import com.artemchep.keyguard.common.usecase.GetCanWrite +import com.artemchep.keyguard.common.usecase.GetWriteAccess +import com.artemchep.keyguard.common.usecase.QueueSyncById +import com.artemchep.keyguard.common.usecase.premium +import com.artemchep.keyguard.core.store.DatabaseManager +import com.artemchep.keyguard.data.Database +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.flow.combine +import org.kodein.di.DirectDI +import org.kodein.di.instance + +/** + * @author Artem Chepurnyi + */ +class ModifyDatabase( + private val db: DatabaseManager, + private val getCanWrite: GetCanWrite, + private val getWriteAccess: GetWriteAccess, + private val queueSyncById: QueueSyncById, +) { + companion object { + private const val TAG = "ModifyDatabase.bitwarden" + } + + data class Result( + val changedAccountIds: Set, + val value: T, + ) { + companion object { + fun unit( + changedAccountIds: Set = emptySet(), + ) = Result( + changedAccountIds = changedAccountIds, + value = Unit, + ) + } + } + + constructor(directDI: DirectDI) : this( + db = directDI.instance(), + getCanWrite = directDI.instance(), + getWriteAccess = directDI.instance(), + queueSyncById = directDI.instance(), + ) + + operator fun invoke( + block: suspend (Database) -> Result, + ): IO = db + .mutate { database -> + val accountIds = block(database) + accountIds + } + .effectTap { result -> + // TODO: FIX ME + result.changedAccountIds.forEach { + queueSyncById(it) + .launchIn(GlobalScope) + } + // val accountIds = result.changedAccountIds + // SyncWorker.enqueueOnce(context, accountIds) + } + .map { it.value } + // Require premium for modifying a cipher. + .premium( + getPurchased = { + combine( + getCanWrite(), + getWriteAccess(), + ) { a, b -> a && b } + }, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyFolderById.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyFolderById.kt new file mode 100644 index 00000000..fb042244 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyFolderById.kt @@ -0,0 +1,78 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase.util + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.AccountId +import com.artemchep.keyguard.data.bitwarden.Folder +import kotlinx.datetime.Clock +import org.kodein.di.DirectDI +import org.kodein.di.instance + +/** + * @author Artem Chepurnyi + */ +class ModifyFolderById( + private val modifyDatabase: ModifyDatabase, +) { + companion object { + private const val TAG = "ModifyFolderById.bitwarden" + } + + constructor(directDI: DirectDI) : this( + modifyDatabase = directDI.instance(), + ) + + operator fun invoke( + folderIds: Set, + checkIfStub: Boolean = true, + checkIfChanged: Boolean = true, + transform: suspend (Folder) -> Folder, + ): IO = modifyDatabase { database -> + val dao = database.folderQueries + val now = Clock.System.now() + val models = dao + .get() + .executeAsList() + .filter { + it.folderId in folderIds + } + .mapNotNull { model -> + // If the folder was not properly decoded, then + // prevent it from being pushed to backend. + val service = model.data_.service + if (checkIfStub && !service.canEdit()) { + return@mapNotNull null + } + var new = model + new = transform(new) + // If the folder was not changed, then we do not need to + // update it in the database. + if (checkIfChanged && new == model) { + return@mapNotNull null + } + + new = new.copy( + data_ = new.data_.copy( + revisionDate = now, + ), + ) + new + } + if (models.isEmpty()) { + return@modifyDatabase ModifyDatabase.Result.unit() + } + dao.transaction { + models.forEach { folder -> + dao.insert( + folderId = folder.folderId, + accountId = folder.accountId, + data = folder.data_, + ) + } + } + + val changedAccountIds = models + .map { AccountId(it.accountId) } + .toSet() + ModifyDatabase.Result.unit(changedAccountIds) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyProfileById.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyProfileById.kt new file mode 100644 index 00000000..a758e182 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/util/ModifyProfileById.kt @@ -0,0 +1,57 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase.util + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.model.AccountId +import com.artemchep.keyguard.data.bitwarden.Profile +import kotlinx.datetime.Clock +import org.kodein.di.DirectDI +import org.kodein.di.instance + +/** + * @author Artem Chepurnyi + */ +class ModifyProfileById( + private val modifyDatabase: ModifyDatabase, +) { + companion object { + private const val TAG = "ModifyProfileById.bitwarden" + } + + constructor(directDI: DirectDI) : this( + modifyDatabase = directDI.instance(), + ) + + operator fun invoke( + profileIds: Set, + transform: suspend (Profile) -> Profile, + ): IO = modifyDatabase { database -> + val dao = database.profileQueries + val now = Clock.System.now() + val models = dao + .get() + .executeAsList() + .filter { + it.profileId in profileIds + } + .map { model -> + var new = model + new = transform(new) + new + } + require(models.isNotEmpty()) + dao.transaction { + models.forEach { profile -> + dao.insert( + profileId = profile.profileId, + accountId = profile.accountId, + data = profile.data_, + ) + } + } + + val changedAccountIds = models + .map { AccountId(it.accountId) } + .toSet() + ModifyDatabase.Result.unit(changedAccountIds) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/util/RefreshToken.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/util/RefreshToken.kt new file mode 100644 index 00000000..1222e7a6 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/util/RefreshToken.kt @@ -0,0 +1,159 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase.util + +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.service.text.Base64Service +import com.artemchep.keyguard.core.store.DatabaseManager +import com.artemchep.keyguard.core.store.bitwarden.BitwardenService +import com.artemchep.keyguard.core.store.bitwarden.BitwardenToken +import com.artemchep.keyguard.provider.bitwarden.api.refresh +import com.artemchep.keyguard.ui.canRetry +import com.artemchep.keyguard.ui.getHttpCode +import io.ktor.client.HttpClient +import io.ktor.http.HttpStatusCode +import kotlinx.coroutines.delay +import kotlinx.coroutines.sync.Mutex +import kotlinx.coroutines.sync.withLock +import kotlinx.datetime.Clock +import kotlinx.serialization.json.Json +import kotlin.math.pow + +private val mutex = Mutex() + +private val mutexPerUserId = mutableMapOf() + +class RetryDelayStrategy { + private var _attempt: Int = 0 + + val attempt get() = _attempt + + suspend fun dl() { + // If the server is broken and doesn't not recognized our token, + // e.g. https://github.com/dani-garcia/vaultwarden/issues/3776 + // then artificially delay each request so we don't span the + // refresh token too much. + val ms = 100L * (3f.pow(attempt.coerceAtMost(6)) - 1f).toLong() + delay(ms) + // Increment the attempt. + _attempt += 1 + } +} + +internal suspend fun withRetry( + block: suspend () -> T, +): T { + val retryDelayStrategy = RetryDelayStrategy() + while (true) { + try { + return block() + } catch (e: Exception) { + e.printStackTrace() + val statusCode = e.getHttpCode() + + val canRetry = statusCode.canRetry() && + statusCode != BitwardenService.Error.CODE_UNKNOWN + if (!canRetry) { + throw e + } + } + + retryDelayStrategy.dl() + } +} + +internal suspend fun withRefreshableAccessToken( + base64Service: Base64Service, + httpClient: HttpClient, + json: Json, + db: DatabaseManager, + user: BitwardenToken, + block: suspend (BitwardenToken) -> T, +): T { + val getAndUpdateUserToken: suspend (BitwardenToken) -> BitwardenToken = { + val m = mutex.withLock { + // Get or create a mutex specific to this + // account. We never delete it because we do + // not expect a user creating & deleting dozens + // of accounts. + mutexPerUserId.getOrPut(user.id) { Mutex() } + } + m.withLock { + getAndUpdateUserToken( + base64Service = base64Service, + httpClient = httpClient, + json = json, + db = db, + user = it, + ) + } + } + + val retryDelayStrategy = RetryDelayStrategy() + var latestToken = user + while (true) { + val token = user.token + if (token != null) { + // Refresh token immediately if the expiration date + // has already passed. + if (Clock.System.now() > token.expirationDate) { + latestToken = getAndUpdateUserToken(latestToken) + } + } + + try { + return block(latestToken) + } catch (e: Exception) { + val statusCode = e.getHttpCode() + if (statusCode == HttpStatusCode.Unauthorized.value) { + latestToken = getAndUpdateUserToken(latestToken) + } else { + throw e + } + } + + retryDelayStrategy.dl() + } +} + +suspend fun getAndUpdateUserToken( + base64Service: Base64Service, + httpClient: HttpClient, + json: Json, + db: DatabaseManager, + user: BitwardenToken, +): BitwardenToken { + if (user.token == null) { + throw IllegalStateException("Help") + } + + val newUser = db.mutate { + it.accountQueries + .getByAccountId(user.id) + .executeAsOneOrNull() + }.bind() + val newUserToken = newUser?.data_ + if (newUserToken != null && newUserToken != user) { + return newUserToken + } + + // TODO: This one may also crash the server! + val login = refresh( + base64Service = base64Service, + httpClient = httpClient, + json = json, + env = user.env.back(), + token = user.token, + ) + val token = BitwardenToken.Token( + refreshToken = login.refreshToken, + accessToken = login.accessToken, + expirationDate = login.accessTokenExpiryDate, + ) + val u = user.copy(token = token) + db.mutate { + it.accountQueries.insert( + accountId = u.id, + data = u, + ) + }.bind() + return u +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/util/publicKey.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/util/publicKey.kt new file mode 100644 index 00000000..bd09a7c9 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/util/publicKey.kt @@ -0,0 +1,3 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase.util + +expect fun pbk(privateKey: ByteArray): ByteArray diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/AnimatedFabVisibility.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/AnimatedFabVisibility.kt new file mode 100644 index 00000000..59d0a256 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/AnimatedFabVisibility.kt @@ -0,0 +1,15 @@ +package com.artemchep.keyguard.ui + +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.TopAppBarScrollBehavior +import androidx.compose.runtime.Composable +import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.remember + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun TopAppBarScrollBehavior.rememberFabExpanded() = remember(this) { + derivedStateOf { + state.overlappedFraction < 0.01f + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/AnimatedNumberText.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/AnimatedNumberText.kt new file mode 100644 index 00000000..b1ee1d53 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/AnimatedNumberText.kt @@ -0,0 +1,13 @@ +package com.artemchep.keyguard.ui + +import androidx.compose.animation.core.animateIntAsState +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue + +@Composable +fun animatedNumberText( + number: Int, +): String { + val a by animateIntAsState(number) + return a.toString() +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/AutofillWindow.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/AutofillWindow.kt new file mode 100644 index 00000000..8323b53a --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/AutofillWindow.kt @@ -0,0 +1,355 @@ +package com.artemchep.keyguard.ui + +import androidx.compose.animation.Crossfade +import androidx.compose.animation.animateContentSize +import androidx.compose.foundation.interaction.MutableInteractionSource +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ColumnScope +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.AutoAwesome +import androidx.compose.material.icons.outlined.Check +import androidx.compose.material.icons.outlined.Refresh +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.ExtendedFloatingActionButton +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.getValue +import androidx.compose.runtime.key +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.alpha +import androidx.compose.ui.text.SpanStyle +import androidx.compose.ui.text.buildAnnotatedString +import androidx.compose.ui.text.withStyle +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.LocalAppMode +import com.artemchep.keyguard.common.model.fold +import com.artemchep.keyguard.feature.generator.AutoResizeText +import com.artemchep.keyguard.feature.generator.DecoratedSlider +import com.artemchep.keyguard.feature.generator.FilterItem +import com.artemchep.keyguard.feature.generator.GeneratorRoute +import com.artemchep.keyguard.feature.generator.GeneratorState +import com.artemchep.keyguard.feature.generator.GeneratorType +import com.artemchep.keyguard.feature.generator.produceGeneratorState +import com.artemchep.keyguard.feature.home.vault.component.Section +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.icons.icon +import com.artemchep.keyguard.ui.skeleton.SkeletonItem +import com.artemchep.keyguard.ui.theme.combineAlpha +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.flow.StateFlow + +@Composable +fun AutofillButton( + key: String, + username: Boolean = false, + password: Boolean = false, + onValueChange: ((String) -> Unit)? = null, +) { + var isAutofillWindowShowing by remember { + mutableStateOf(false) + } + + val enabled = onValueChange != null + if (!enabled) { + // We can not autofill disabled text fields and we can not + // tease user with it. + isAutofillWindowShowing = false + } + + IconButton( + enabled = onValueChange != null, + onClick = { + isAutofillWindowShowing = !isAutofillWindowShowing + }, + ) { + Icon( + imageVector = Icons.Outlined.AutoAwesome, + contentDescription = null, + ) + } + // Inject the dropdown popup to the bottom of the + // content. + val onDismissRequest = { + isAutofillWindowShowing = false + } + LeMOdelBottomSheet( + visible = isAutofillWindowShowing, + onDismissRequest = onDismissRequest, + ) { contentPadding -> + Column( + modifier = Modifier + .fillMaxSize() + .verticalScroll(rememberScrollState()) + .padding(contentPadding), + ) { + AutofillWindow( + key = key, + username = username, + password = password, + onComplete = { password -> + if (onValueChange != null && password != null) { + onValueChange(password) + } + // Hide the dropdown window on click on one + // of the buttons. + onDismissRequest() + }, + ) + } + } +} + +@Composable +expect fun LeMOdelBottomSheet( + visible: Boolean, + onDismissRequest: () -> Unit, + content: @Composable (PaddingValues) -> Unit, +) + +@Composable +fun ColumnScope.AutofillWindow( + key: String, + username: Boolean = false, + password: Boolean = false, + onComplete: (String?) -> Unit, +) { + val args = remember(username, password) { + GeneratorRoute.Args( + username = username, + password = password, + ) + } + val loadableState = produceGeneratorState( + mode = LocalAppMode.current, + args = args, + key = key, + ) + loadableState.fold( + ifLoading = { + SkeletonItem() + }, + ifOk = { state -> + val text = when { + username && password -> stringResource(Res.strings.generator_header_title) + username -> stringResource(Res.strings.generator_header_username_title) + password -> stringResource(Res.strings.generator_header_password_title) + else -> stringResource(Res.strings.generator_header_title) + } + Text( + modifier = Modifier + .padding( + horizontal = 16.dp, + vertical = 8.dp, + ), + text = text, + style = MaterialTheme.typography.titleLarge, + ) + AutofillWindow( + state = state, + onComplete = onComplete, + ) + }, + ) +} + +@Composable +fun ColumnScope.AutofillWindow( + state: GeneratorState, + onComplete: (String?) -> Unit, +) { + AutofillWindowContent( + state = state, + onComplete = onComplete, + ) + Spacer(modifier = Modifier.height(16.dp)) +} + +@Composable +fun ColumnScope.AutofillWindowContent( + state: GeneratorState, + onComplete: (String?) -> Unit, +) { + val filter by state.filterState.collectAsState() + val filterLengthSliderInteractionSource = remember { + MutableInteractionSource() + } + + GeneratorType( + state = state, + ) + + GeneratorValue2( + valueFlow = state.valueState, + sliderInteractionSource = filterLengthSliderInteractionSource, + onComplete = onComplete, + ) + + val showSection = filter.length != null || filter.items.isNotEmpty() + ExpandedIfNotEmpty( + Unit.takeIf { showSection }, + ) { + Section( + text = stringResource(Res.strings.filter_header_title), + ) + } + + ExpandedIfNotEmpty( + filter.length, + ) { + Column { + DecoratedSlider( + filterLength = it, + interactionSource = filterLengthSliderInteractionSource, + ) + } + } + + Spacer( + modifier = Modifier + .height(16.dp), + ) + + filter.items.forEachIndexed { index, item -> + key(item.key) { + FilterItem(item) + } + } +} + +@Composable +private fun ColumnScope.GeneratorValue2( + valueFlow: StateFlow, + sliderInteractionSource: MutableInteractionSource, + onComplete: (String?) -> Unit, +) { + val valueState = valueFlow.collectAsState() + ExpandedIfNotEmpty( + valueOrNull = valueState.value, + ) { value -> + val updatedOnRefresh by rememberUpdatedState(value.onRefresh) + + val generateTitle = stringResource(Res.strings.generator_generate_button) + val regenerateTitle = stringResource(Res.strings.generator_regenerate_button) + val actions by remember(valueState) { + derivedStateOf { + val valueExists = !valueState.value?.password.isNullOrEmpty() + if (valueExists) { + listOf( + FlatItemAction( + leading = icon(Icons.Outlined.Refresh), + title = regenerateTitle, + onClick = { + updatedOnRefresh?.invoke() + }, + ), + ) + } else { + listOf( + FlatItemAction( + leading = icon(Icons.Outlined.Refresh), + title = generateTitle, + onClick = { + updatedOnRefresh?.invoke() + }, + ), + ) + } + } + } + + val sliderInteractionSourceIsInteracted = + sliderInteractionSource.collectIsInteractedWith() + FlatDropdown( + elevation = 8.dp, + content = { + Crossfade( + targetState = value.password, + modifier = Modifier + .animateContentSize(), + ) { password -> + AutoResizeText( + text = if (password.isEmpty()) { + val color = LocalContentColor.current + .combineAlpha(DisabledEmphasisAlpha) + val text = stringResource(Res.strings.empty_value) + buildAnnotatedString { + withStyle( + style = SpanStyle(color = color), + ) { + append(text) + } + } + } else { + colorizePassword( + password = password, + contentColor = LocalContentColor.current, + ) + }, + ) + } + Spacer( + modifier = Modifier + .height(4.dp), + ) + + val visible = value.strength + ExpandedIfNotEmpty( + valueOrNull = value.password.takeIf { visible }, + ) { password -> + PasswordStrengthBadge( + password = password, + ) + } + }, + trailing = { + val updatedPassword by rememberUpdatedState(value.password) + val updatedOnClick by rememberUpdatedState(onComplete) + ExtendedFloatingActionButton( + modifier = Modifier + .then( + if (updatedPassword.isNotEmpty()) { + Modifier + } else { + Modifier.alpha(DisabledEmphasisAlpha) + }, + ), + onClick = { + if (updatedPassword.isNotEmpty()) { + updatedOnClick.invoke(updatedPassword) + } + }, + containerColor = MaterialTheme.colorScheme.primary, + icon = { + Icon( + imageVector = Icons.Outlined.Check, + contentDescription = null, + ) + }, + text = { + Text("Use") + }, + ) + }, + dropdown = value.dropdown, + actions = actions, + enabled = !sliderInteractionSourceIsInteracted, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/BadgeField.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/BadgeField.kt new file mode 100644 index 00000000..7744fd7d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/BadgeField.kt @@ -0,0 +1,122 @@ +package com.artemchep.keyguard.ui + +import androidx.compose.animation.animateContentSize +import androidx.compose.animation.core.animateFloatAsState +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.RowScope +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.widthIn +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.LocalTextStyle +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.getValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.compositeOver +import androidx.compose.ui.text.AnnotatedString +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.ui.theme.combineAlpha +import kotlin.math.pow + +@Composable +fun Ah( + score: Float, + text: String, + modifier: Modifier = Modifier, +) { + AhContainer( + score = score, + modifier = modifier, + ) { + Text( + modifier = Modifier + .padding(horizontal = 4.dp) + .animateContentSize(), + text = text, + ) + } +} + +@Composable +fun Ah( + score: Float, + text: AnnotatedString, + modifier: Modifier = Modifier, +) { + AhContainer( + score = score, + modifier = modifier, + ) { + Text( + modifier = Modifier + .padding(horizontal = 4.dp) + .animateContentSize(), + text = text, + ) + } +} + +@Composable +fun AhContainer( + score: Float, + modifier: Modifier = Modifier, + content: @Composable RowScope.(Float) -> Unit, +) { + val progress by animateFloatAsState(targetValue = score) + val progressColor = progress.pow(0.4f) + val contentColor = run { + val primary = MaterialTheme.colorScheme.onSecondaryContainer + val error = MaterialTheme.colorScheme.onErrorContainer + primary.copy(alpha = progressColor).compositeOver(error) + .combineAlpha(LocalContentColor.current.alpha) + } + val backgroundColor = run { + val primary = MaterialTheme.colorScheme.secondaryContainer + val error = MaterialTheme.colorScheme.errorContainer + primary.copy(alpha = progressColor).compositeOver(error) + } + AhLayout( + modifier = modifier, + contentColor = contentColor, + backgroundColor = backgroundColor, + ) { + content(progress) + } +} + +@Composable +fun AhLayout( + modifier: Modifier = Modifier, + contentColor: Color = LocalContentColor.current, + backgroundColor: Color, + content: @Composable RowScope.() -> Unit, +) { + val shape = MaterialTheme.shapes.small + Row( + modifier = modifier + .background(backgroundColor.combineAlpha(LocalContentColor.current.alpha), shape) + .padding( + start = 4.dp, + top = 4.dp, + bottom = 4.dp, + end = 4.dp, + ) + .widthIn(min = 36.dp), + horizontalArrangement = Arrangement.Center, + verticalAlignment = Alignment.CenterVertically, + ) { + val textStyle = MaterialTheme.typography.labelMedium + CompositionLocalProvider( + LocalContentColor provides contentColor, + LocalTextStyle provides textStyle, + ) { + content() + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/CollectedEffect.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/CollectedEffect.kt new file mode 100644 index 00000000..db748c80 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/CollectedEffect.kt @@ -0,0 +1,17 @@ +package com.artemchep.keyguard.ui + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import kotlinx.coroutines.flow.Flow + +@Composable +fun CollectedEffect( + flow: Flow, + action: suspend (T) -> Unit, +) { + LaunchedEffect(flow) { + flow.collect { + action(it) + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/Composable.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/Composable.kt new file mode 100644 index 00000000..025f4d63 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/Composable.kt @@ -0,0 +1,16 @@ +package com.artemchep.keyguard.ui + +import androidx.compose.runtime.Composable + +@Composable +fun Compose( + content: @Composable () -> Unit, +) { + content() +} + +inline fun composable( + crossinline content: @Composable () -> Unit, +): @Composable () -> Unit = { + content() +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/Dropdown.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/Dropdown.kt new file mode 100644 index 00000000..15038e91 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/Dropdown.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.ui + +import androidx.compose.ui.unit.dp + +val DropdownMinWidth = 256.dp diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/ExpandedIfNotEmpty.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/ExpandedIfNotEmpty.kt new file mode 100644 index 00000000..6e21576a --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/ExpandedIfNotEmpty.kt @@ -0,0 +1,69 @@ +package com.artemchep.keyguard.ui + +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.animation.EnterTransition +import androidx.compose.animation.ExitTransition +import androidx.compose.animation.ExperimentalAnimationApi +import androidx.compose.animation.expandIn +import androidx.compose.animation.fadeIn +import androidx.compose.animation.fadeOut +import androidx.compose.animation.scaleIn +import androidx.compose.animation.scaleOut +import androidx.compose.animation.shrinkOut +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.IntSize + +/** + * A container that expands if the [valueOrNull] is + * not `null`. + */ +@Suppress("FunctionName") +@Composable +fun ExpandedIfNotEmpty( + valueOrNull: T?, + modifier: Modifier = Modifier, + enter: EnterTransition = fadeIn() + expandIn( + initialSize = { IntSize(it.width, 0) }, + ), + exit: ExitTransition = shrinkOut( + targetSize = { IntSize(it.width, 0) }, + ) + fadeOut(), + content: @Composable (T) -> Unit, +) { + AnimatedVisibility( + modifier = modifier, + visible = valueOrNull != null, + enter = enter, + exit = exit, + ) { + var value by remember { + mutableStateOf(null) + } + valueOrNull?.let { + value = it + } + content(value!!) + } +} + +@Composable +fun ExpandedIfNotEmptyForRow( + valueOrNull: T?, + modifier: Modifier = Modifier, + content: @Composable (T) -> Unit, +) = ExpandedIfNotEmpty( + valueOrNull = valueOrNull, + modifier = modifier, + enter = fadeIn() + scaleIn() + expandIn( + initialSize = { IntSize(0, it.height) }, + ), + exit = shrinkOut( + targetSize = { IntSize(0, it.height) }, + ) + fadeOut() + scaleOut(), + content = content, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/GridLayout.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/GridLayout.kt new file mode 100644 index 00000000..f0131c30 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/GridLayout.kt @@ -0,0 +1,77 @@ +package com.artemchep.keyguard.ui + +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.layout.Layout +import androidx.compose.ui.unit.Constraints +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.dp + +@Composable +fun GridLayout( + modifier: Modifier = Modifier, + columns: Int = 1, + mainAxisSpacing: Dp = 0.dp, + crossAxisSpacing: Dp = 0.dp, + content: @Composable () -> Unit, +) = Layout( + modifier = modifier, + content = content, +) { measurables, constraints -> + val mainAxisSpacingPx = mainAxisSpacing.roundToPx() + val crossAxisSpacingPx = crossAxisSpacing.roundToPx() + + val itemWidth = (constraints.maxWidth - crossAxisSpacingPx * (columns - 1)) / columns + val itemConstraints = Constraints( + minWidth = itemWidth, + maxWidth = itemWidth, + ) + + val placeables = measurables + .asSequence() + .windowed(columns, columns, true) { it } + .flatMap { group -> + val height = group + .maxOf { it.minIntrinsicHeight(itemWidth) } + val groupConstraints = itemConstraints + .copy(minHeight = height) + // Measure each of the element of the group separately, + // so we it has similar height. + group + .map { it.measure(groupConstraints) } + } + .toList() + var height = 0 + var heightLocalMax = 0 + for (i in placeables.indices) { + // Reset the max height upon + // entering the new group + if (i.rem(columns) == 0) { + height += heightLocalMax + heightLocalMax = 0 + } + val h = placeables[i].height + mainAxisSpacingPx + if (h > heightLocalMax) { + heightLocalMax = h + } + } + height += heightLocalMax + // Set the size of the layout as big as it can + layout(constraints.maxWidth, height) { + var y = 0 + var yLocalMax = 0 + placeables.forEachIndexed { i, placeable -> + if (i.rem(columns) == 0) { + y += yLocalMax + yLocalMax = 0 + } + val x = i.rem(columns) * (itemWidth + crossAxisSpacingPx) + placeable.place(x, y) + + val h = placeables[i].height + mainAxisSpacingPx + if (h > yLocalMax) { + yLocalMax = h + } + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/Html.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/Html.kt new file mode 100644 index 00000000..c50b507e --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/Html.kt @@ -0,0 +1,10 @@ +package com.artemchep.keyguard.ui + +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier + +@Composable +expect fun HtmlText( + modifier: Modifier = Modifier, + html: String, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/KeepScreenOn.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/KeepScreenOn.kt new file mode 100644 index 00000000..49185b9d --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/KeepScreenOn.kt @@ -0,0 +1,29 @@ +package com.artemchep.keyguard.ui + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember +import com.artemchep.keyguard.common.usecase.GetKeepScreenOn +import org.kodein.di.compose.localDI +import org.kodein.di.direct +import org.kodein.di.instance + +@Composable +fun OptionallyKeepScreenOnEffect() { + val shouldKeepScreenOn by run { + val di = localDI() + val get = remember(di) { + di.direct.instance() + } + remember(get) { + get() + }.collectAsState(false) + } + if (shouldKeepScreenOn) { + KeepScreenOnEffect() + } +} + +@Composable +expect fun KeepScreenOnEffect() diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/OptionsWindow.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/OptionsWindow.kt new file mode 100644 index 00000000..80377655 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/OptionsWindow.kt @@ -0,0 +1,142 @@ +package com.artemchep.keyguard.ui + +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.widthIn +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.MoreVert +import androidx.compose.material3.DropdownMenu +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.minimumInteractiveComponentSize +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.feature.home.vault.component.Section + +@Composable +fun DropdownScope.DropdownMenuItemFlat( + action: ContextItem, +) { + when (action) { + is ContextItem.Section -> { + Section( + text = action.title, + ) + } + + is ContextItem.Custom -> { + Column( + modifier = Modifier + .widthIn(max = DropdownMinWidth), + ) { + action.content() + } + } + + is FlatItemAction -> { + DropdownMenuItemFlat(action) + } + } +} + +@Composable +fun DropdownScope.DropdownMenuItemFlat( + action: FlatItemAction, +) { + Row( + modifier = Modifier + .widthIn(max = DropdownMinWidth) + .then( + if (action.onClick != null) { + Modifier + .clickable { + action.onClick.invoke() + onDismissRequest() + } + } else { + Modifier + }, + ) + .minimumInteractiveComponentSize() + .padding( + horizontal = 8.dp, + vertical = 4.dp, + ), + verticalAlignment = Alignment.CenterVertically, + ) { + FlatItemActionContent( + action = action, + compact = true, + ) + } +} + +@Composable +fun OptionsButton( + actions: List = emptyList(), +) { + if (actions.isNotEmpty()) { + OptionsButton( + enabled = actions.isNotEmpty(), + ) { + actions.forEachIndexed { index, action -> + DropdownMenuItemFlat( + action = action, + ) + } + } + } +} + +@Composable +fun OptionsButton( + enabled: Boolean = true, + content: @Composable DropdownScope.() -> Unit, +) { + var isAutofillWindowShowing by remember { + mutableStateOf(false) + } + + if (!enabled) { + // We can not autofill disabled text fields and we can not + // tease user with it. + isAutofillWindowShowing = false + } + + Box { + IconButton( + enabled = enabled, + onClick = { + isAutofillWindowShowing = !isAutofillWindowShowing + }, + ) { + Icon( + imageVector = Icons.Outlined.MoreVert, + contentDescription = null, + ) + } + // Inject the dropdown popup to the bottom of the + // content. + val onDismissRequest = { + isAutofillWindowShowing = false + } + DropdownMenu( + modifier = Modifier + .widthIn(min = DropdownMinWidth), + expanded = isAutofillWindowShowing, + onDismissRequest = onDismissRequest, + ) { + val scope = DropdownScopeImpl(this, onDismissRequest = onDismissRequest) + content(scope) + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/OtherScaffold.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/OtherScaffold.kt new file mode 100644 index 00000000..ced2b049 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/OtherScaffold.kt @@ -0,0 +1,75 @@ +package com.artemchep.keyguard.ui + +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ColumnScope +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.RowScope +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.union +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.layout.widthIn +import androidx.compose.foundation.layout.windowInsetsPadding +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.platform.leIme +import com.artemchep.keyguard.platform.leSystemBars +import com.artemchep.keyguard.ui.theme.Dimens + +@Composable +fun OtherScaffold( + modifier: Modifier = Modifier, + actions: (@Composable RowScope.() -> Unit)? = null, + content: @Composable ColumnScope.() -> Unit, +) { + Box( + modifier = modifier, + ) { + val scrollState = rememberScrollState() + Column( + modifier = Modifier + .fillMaxSize() + .verticalScroll(scrollState), + verticalArrangement = Arrangement.Center, + horizontalAlignment = Alignment.CenterHorizontally, + ) { + val insets = WindowInsets.leSystemBars + .union(WindowInsets.leIme) + Column( + modifier = Modifier + .windowInsetsPadding(insets) + .padding( + vertical = Dimens.verticalPadding, + horizontal = Dimens.horizontalPadding, + ) + .widthIn(max = 280.dp), + horizontalAlignment = Alignment.CenterHorizontally, + ) { + content() + } + } + + val insets = WindowInsets.leSystemBars + Row( + modifier = Modifier + .fillMaxWidth() + .windowInsetsPadding(insets) + .height(64.dp), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.End, + ) { + actions?.invoke(this) + Spacer(Modifier.width(4.dp)) + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/Padding.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/Padding.kt new file mode 100644 index 00000000..bdffd85a --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/Padding.kt @@ -0,0 +1,33 @@ +package com.artemchep.keyguard.ui + +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.LayoutDirection + +operator fun PaddingValues.plus(b: PaddingValues): PaddingValues = object : PaddingValues { + override fun calculateBottomPadding(): Dp = + this@plus.calculateBottomPadding() + b.calculateBottomPadding() + + override fun calculateLeftPadding(layoutDirection: LayoutDirection): Dp = + this@plus.calculateLeftPadding(layoutDirection) + b.calculateLeftPadding(layoutDirection) + + override fun calculateRightPadding(layoutDirection: LayoutDirection): Dp = + this@plus.calculateRightPadding(layoutDirection) + b.calculateRightPadding(layoutDirection) + + override fun calculateTopPadding(): Dp = + this@plus.calculateTopPadding() + b.calculateTopPadding() +} + +operator fun PaddingValues.minus(b: PaddingValues): PaddingValues = object : PaddingValues { + override fun calculateBottomPadding(): Dp = + this@minus.calculateBottomPadding() - b.calculateBottomPadding() + + override fun calculateLeftPadding(layoutDirection: LayoutDirection): Dp = + this@minus.calculateLeftPadding(layoutDirection) - b.calculateLeftPadding(layoutDirection) + + override fun calculateRightPadding(layoutDirection: LayoutDirection): Dp = + this@minus.calculateRightPadding(layoutDirection) - b.calculateRightPadding(layoutDirection) + + override fun calculateTopPadding(): Dp = + this@minus.calculateTopPadding() - b.calculateTopPadding() +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/Password.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/Password.kt new file mode 100644 index 00000000..5f850de9 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/Password.kt @@ -0,0 +1,136 @@ +package com.artemchep.keyguard.ui + +import androidx.compose.animation.core.animateFloatAsState +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.luminance +import androidx.compose.ui.text.AnnotatedString +import androidx.compose.ui.text.SpanStyle +import androidx.compose.ui.text.buildAnnotatedString +import androidx.compose.ui.text.withStyle +import com.artemchep.keyguard.feature.home.vault.component.ObscureChar +import kotlin.math.min +import kotlin.math.roundToInt + +private const val obscureValueLength = 8 + +@Composable +fun animatedConcealedText( + text: AnnotatedString, + concealed: Boolean, +): AnnotatedString { + val progress by animateFloatAsState( + targetValue = if (concealed) 0f else 1f, + ) + + val length = text.length + val lengthOfRealValue = (length.toFloat() * progress) + .roundToInt() + val minLengthOfShownValue = ((1f - progress) * obscureValueLength) + .roundToInt() + .coerceAtLeast(min(length, obscureValueLength)) + return buildAnnotatedString { + append(text.subSequence(0, lengthOfRealValue)) + + // Pad text from the end + val times = minLengthOfShownValue - lengthOfRealValue + repeat(times) { + append(ObscureChar) + } + } +} + +fun concealedText(): String { + return buildString { + val times = obscureValueLength + repeat(times) { + append(ObscureChar) + } + } +} + +fun colorizePassword( + password: String, + contentColor: Color, +) = colorizePassword( + password = password, + digitColor = colorizePasswordDigitColor(contentColor), + symbolColor = colorizePasswordSymbolColor(contentColor), +) + +fun colorizePasswordDigitColor( + contentColor: Color, +) = colorizePasswordDigitColor(onDark = contentColor.luminance() > 0.5f) + +private fun colorizePasswordDigitColor(onDark: Boolean) = run { + val saturation: Float + val lightness: Float + if (onDark) { + saturation = 0.52f // saturation + lightness = 0.56f // value + } else { + saturation = 0.72f // saturation + lightness = 0.62f // value + } + Color.hsl( + hue = 210f, + saturation = saturation, + lightness = lightness, + ) +} + +fun colorizePasswordSymbolColor( + contentColor: Color, +) = colorizePasswordSymbolColor(onDark = contentColor.luminance() > 0.5f) + +private fun colorizePasswordSymbolColor(onDark: Boolean) = run { + val saturation: Float + val lightness: Float + if (onDark) { + saturation = 0.52f // saturation + lightness = 0.56f // value + } else { + saturation = 0.72f // saturation + lightness = 0.62f // value + } + Color.hsl( + hue = 0f, + saturation = saturation, + lightness = lightness, + ) +} + +private fun colorizePassword( + password: String, + digitColor: Color = Color.Blue, + symbolColor: Color = Color.Red, +) = buildAnnotatedString { + password + .forEach { char -> + when { + char.isSurrogate() -> append(char) + char.isLetter() -> append(char) + + char.isDigit() -> { + withStyle( + style = SpanStyle( + color = digitColor, + ), + ) { + append(char) + } + } + + else -> { + withStyle( + style = SpanStyle( + color = symbolColor, + ), + ) { + append(char) + } + } + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/PasswordFilterItem.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/PasswordFilterItem.kt new file mode 100644 index 00000000..0551c88c --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/PasswordFilterItem.kt @@ -0,0 +1,695 @@ +package com.artemchep.keyguard.ui + +import androidx.compose.animation.core.animateDpAsState +import androidx.compose.foundation.ExperimentalFoundationApi +import androidx.compose.foundation.background +import androidx.compose.foundation.clickable +import androidx.compose.foundation.combinedClickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.BoxScope +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ColumnScope +import androidx.compose.foundation.layout.ExperimentalLayoutApi +import androidx.compose.foundation.layout.FlowRow +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.RowScope +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.layout.widthIn +import androidx.compose.foundation.layout.wrapContentWidth +import androidx.compose.foundation.shape.CornerSize +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.ContentCopy +import androidx.compose.material3.DropdownMenu +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.LocalAbsoluteTonalElevation +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.LocalMinimumInteractiveComponentEnforcement +import androidx.compose.material3.LocalTextStyle +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.material3.contentColorFor +import androidx.compose.material3.minimumInteractiveComponentSize +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.isSpecified +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.hapticfeedback.HapticFeedbackType +import androidx.compose.ui.platform.LocalHapticFeedback +import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import arrow.core.andThen +import com.artemchep.keyguard.common.usecase.CopyText +import com.artemchep.keyguard.feature.home.vault.component.VaultItemIcon2 +import com.artemchep.keyguard.feature.home.vault.component.surfaceColorAtElevationSemi +import com.artemchep.keyguard.feature.home.vault.model.VaultItemIcon +import com.artemchep.keyguard.ui.theme.combineAlpha +import kotlinx.collections.immutable.PersistentList +import kotlinx.collections.immutable.toPersistentList + +private inline val flatItemSmallCornerSizeDp get() = 4.dp + +private val flatItemSmallCornerSize = CornerSize(flatItemSmallCornerSizeDp) + +private val flatItemSmallShape = RoundedCornerShape(flatItemSmallCornerSizeDp) + +private val defaultPaddingValues: PaddingValues = PaddingValues( + horizontal = 8.dp, + vertical = 2.dp, +) + +private val defaultContentPadding: PaddingValues = PaddingValues( + horizontal = 8.dp, + vertical = 8.dp, +) + +sealed interface ContextItem { + data class Section( + val title: String? = null, + ) : ContextItem + + data class Custom( + val content: @Composable () -> Unit, + ) : ContextItem +} + +data class FlatItemAction( + val id: String? = null, + val icon: ImageVector? = null, + val leading: (@Composable () -> Unit)? = null, + val trailing: (@Composable () -> Unit)? = null, + val title: String, + val text: String? = null, + val type: Type? = null, + val onClick: (() -> Unit)? = {}, +) : ContextItem { + companion object; + + enum class Type { + COPY, + DOWNLOAD, + VIEW, + } +} + +inline fun buildContextItems( + vararg items: List, + block: ContextItemBuilder.() -> Unit, +) = ContextItemBuilder(items = items).apply(block).build() + +class ContextItemBuilder( + vararg items: List, +) { + private val items = kotlin.run { + val out = mutableListOf() + items.forEach { list -> + if (list.isEmpty()) { + return@forEach + } + + val header = list.first() + if (header !is ContextItem.Section) { + out += ContextItem.Section() + } + + out += list + } + out + } + + fun section( + title: String? = null, + block: ContextItemBuilder.() -> Unit, + ) { + val sectionItems = buildContextItems(block = block) + if (sectionItems.isEmpty()) { + return + } + + items += ContextItem.Section(title = title) + items += sectionItems + } + + operator fun plusAssign(item: ContextItem?) { + items += item + ?: return + } + + fun build(): PersistentList = sequence { + items.forEachIndexed { index, item -> + // Skip a first item if it has no title. + if ( + index == 0 && + item is ContextItem.Section && + item.title == null + ) { + return@forEachIndexed + } + + yield(item) + } + }.toPersistentList() +} + + +@JvmName("FlatItemActionNullable") +fun CopyText.FlatItemAction( + title: String, + value: String?, + hidden: Boolean = false, +) = value?.let { + FlatItemAction( + title = title, + value = it, + hidden = hidden, + ) +} + +fun CopyText.FlatItemAction( + leading: (@Composable () -> Unit)? = null, + title: String, + value: String, + hidden: Boolean = false, +) = FlatItemAction( + leading = leading, + icon = Icons.Outlined.ContentCopy, + title = title, + text = value.takeUnless { hidden }, + type = FlatItemAction.Type.COPY, + onClick = { + println("Copying!") + copy(value, hidden) + }, +) + +@Composable +fun FlatDropdown( + modifier: Modifier = Modifier, + elevation: Dp = 0.dp, + backgroundColor: Color = Color.Unspecified, + content: @Composable ColumnScope.() -> Unit, + dropdown: List = emptyList(), + actions: List = emptyList(), + leading: (@Composable RowScope.() -> Unit)? = null, + trailing: (@Composable RowScope.() -> Unit)? = null, + paddingValues: PaddingValues = defaultPaddingValues, + contentPadding: PaddingValues = defaultContentPadding, + onClick: (() -> Unit)? = null, + onLongClick: (() -> Unit)? = null, + enabled: Boolean = dropdown.isNotEmpty() || onClick != null || onLongClick != null, +) { + FlatDropdownLayout( + modifier = modifier, + elevation = elevation, + backgroundColor = backgroundColor, + content = content, + dropdown = if (dropdown.isNotEmpty()) { + // composable + { + dropdown.forEach { action -> + DropdownMenuItemFlat( + action = action, + ) + } + } + } else { + null + }, + actions = actions, + leading = leading, + trailing = trailing, + paddingValues = paddingValues, + contentPadding = contentPadding, + onClick = onClick, + onLongClick = onLongClick, + enabled = enabled, + ) +} + +@Composable +fun FlatDropdownLayout( + modifier: Modifier = Modifier, + elevation: Dp = 0.dp, + backgroundColor: Color = Color.Unspecified, + content: @Composable ColumnScope.() -> Unit, + dropdown: (@Composable DropdownScope.() -> Unit)? = null, + actions: List = emptyList(), + leading: (@Composable RowScope.() -> Unit)? = null, + trailing: (@Composable RowScope.() -> Unit)? = null, + paddingValues: PaddingValues = defaultPaddingValues, + contentPadding: PaddingValues = defaultContentPadding, + onClick: (() -> Unit)? = null, + onLongClick: (() -> Unit)? = null, + enabled: Boolean = dropdown != null || onClick != null || onLongClick != null, +) { + var isContentDropdownExpanded by remember { mutableStateOf(false) } + FlatItemLayout( + modifier = modifier, + elevation = elevation, + backgroundColor = backgroundColor, + content = { + content() + + // Inject the dropdown popup to the bottom of the + // content. + val onDismissRequest = { + isContentDropdownExpanded = false + } + DropdownMenu( + expanded = isContentDropdownExpanded, + onDismissRequest = onDismissRequest, + modifier = Modifier + .widthIn(min = DropdownMinWidth), + ) { + val scope = DropdownScopeImpl(this, onDismissRequest = onDismissRequest) + dropdown?.invoke(scope) + } + }, + actions = actions, + leading = leading, + trailing = trailing, + paddingValues = paddingValues, + contentPadding = contentPadding, + onClick = when { + onClick != null -> onClick + dropdown != null -> { + // lambda + { + isContentDropdownExpanded = !isContentDropdownExpanded + } + } + + else -> null + }, + onLongClick = onLongClick, + enabled = enabled, + ) +} + +interface DropdownScope : ColumnScope { + val onDismissRequest: () -> Unit +} + +fun DropdownScope.dismissOnClick(block: () -> Unit) = block.andThen { onDismissRequest() } + +class DropdownScopeImpl( + parent: ColumnScope, + override val onDismissRequest: () -> Unit, +) : DropdownScope, ColumnScope by parent + +@Composable +fun FlatItem( + modifier: Modifier = Modifier, + elevation: Dp = 0.dp, + backgroundColor: Color = Color.Unspecified, + title: @Composable () -> Unit, + text: (@Composable () -> Unit)? = null, + actions: List = emptyList(), + leading: (@Composable RowScope.() -> Unit)? = null, + trailing: (@Composable RowScope.() -> Unit)? = null, + paddingValues: PaddingValues = defaultPaddingValues, + contentPadding: PaddingValues = defaultContentPadding, + onClick: (() -> Unit)? = null, + onLongClick: (() -> Unit)? = null, + enabled: Boolean = onClick != null || onLongClick != null, +) { + FlatItemLayout( + modifier = modifier, + elevation = elevation, + backgroundColor = backgroundColor, + content = { + FlatItemTextContent( + title = title, + text = text, + ) + }, + actions = actions, + leading = leading, + trailing = trailing, + paddingValues = paddingValues, + contentPadding = contentPadding, + onClick = onClick, + onLongClick = onLongClick, + enabled = enabled, + ) +} + +@Composable +fun ColumnScope.FlatItemTextContent( + title: (@Composable () -> Unit)? = null, + text: (@Composable () -> Unit)? = null, + tint: Color = LocalContentColor.current, + compact: Boolean = false, +) { + val titleStyle = MaterialTheme.typography.bodyLarge + val textStyle = + if (!compact) MaterialTheme.typography.bodyMedium else MaterialTheme.typography.bodySmall + if (title != null) { + val contentColor = tint + .copy(alpha = 1f) + .combineAlpha(LocalContentColor.current.alpha) + CompositionLocalProvider( + LocalTextStyle provides titleStyle + .copy(color = contentColor), + ) { + title() + } + } + if (text != null) { + val contentColor = tint + .copy(alpha = 1f) + .combineAlpha(LocalContentColor.current.alpha) + .combineAlpha(MediumEmphasisAlpha) + CompositionLocalProvider( + LocalTextStyle provides textStyle + .copy(color = contentColor), + ) { + text() + } + } +} + +val DefaultEmphasisAlpha = 1f +val HighEmphasisAlpha = 0.87f +val MediumEmphasisAlpha = 0.6f +val DisabledEmphasisAlpha = 0.38f + +@OptIn( + ExperimentalMaterial3Api::class, + ExperimentalFoundationApi::class, +) +@Composable +fun FlatItemLayout( + modifier: Modifier = Modifier, + paddingValues: PaddingValues = defaultPaddingValues, + contentPadding: PaddingValues = defaultContentPadding, + elevation: Dp = 0.dp, + backgroundColor: Color = Color.Unspecified, + content: @Composable ColumnScope.() -> Unit, + actions: List = emptyList(), + leading: (@Composable RowScope.() -> Unit)? = null, + trailing: (@Composable RowScope.() -> Unit)? = null, + onClick: (() -> Unit)? = null, + onLongClick: (() -> Unit)? = null, + enabled: Boolean = onClick != null, +) { + Column( + modifier = modifier + .fillMaxWidth() + .padding(paddingValues), + ) { + val finalBackgroundColor = backgroundColor + .takeIf { it.isSpecified } + // default surface color + ?: MaterialTheme.colorScheme.surface + val animatedElevation by animateDpAsState(targetValue = elevation) + + val shape = MaterialTheme.shapes.medium + val shapeBottomCornerDp by kotlin.run { + val target = if (actions.isEmpty()) { + 16.dp + } else { + flatItemSmallCornerSizeDp + } + animateDpAsState(targetValue = target) + } + Surface( + shape = shape.copy( + bottomStart = CornerSize(shapeBottomCornerDp), + bottomEnd = CornerSize(shapeBottomCornerDp), + ), + color = finalBackgroundColor, + tonalElevation = animatedElevation, + ) { + val haptic by rememberUpdatedState(LocalHapticFeedback.current) + val updatedOnClick by rememberUpdatedState(onClick) + val updatedOnLongClick by rememberUpdatedState(onLongClick) + Column( + modifier = Modifier + .then( + if ((onClick != null || onLongClick != null) && enabled) { + Modifier + .combinedClickable( + onLongClick = if (onLongClick != null) { + // lambda + { + updatedOnLongClick?.invoke() + haptic.performHapticFeedback(HapticFeedbackType.LongPress) + } + } else { + null + }, + ) { + updatedOnClick?.invoke() + } + .rightClickable { + updatedOnLongClick?.invoke() + } + } else { + Modifier + }, + ), + ) { + Row( + modifier = Modifier + .minimumInteractiveComponentSize() + .padding(contentPadding), + verticalAlignment = Alignment.CenterVertically, + ) { + CompositionLocalProvider( + LocalContentColor provides LocalContentColor.current + .let { color -> + if (enabled) { + color + } else { + color.combineAlpha(alpha = DisabledEmphasisAlpha) + } + }, + ) { + if (leading != null) { + CompositionLocalProvider( + LocalMinimumInteractiveComponentEnforcement provides false, + ) { + leading() + } + Spacer(Modifier.width(16.dp)) + } + Column( + modifier = Modifier + .weight(1f), + ) { + content() + } + if (trailing != null) { + Spacer(Modifier.width(16.dp)) + trailing() + } + } + } + } + } + actions.forEachIndexed { actionIndex, action -> + Spacer(modifier = Modifier.height(2.dp)) + Surface( + modifier = modifier + .fillMaxWidth(), + shape = if (actions.size - 1 == actionIndex) { + shape.copy( + topStart = flatItemSmallCornerSize, + topEnd = flatItemSmallCornerSize, + ) + } else { + flatItemSmallShape + }, + color = finalBackgroundColor, + tonalElevation = animatedElevation, + ) { + val updatedOnClick by rememberUpdatedState(action.onClick) + Row( + modifier = Modifier + .then( + if (action.onClick != null) { + Modifier + .clickable { + updatedOnClick?.invoke() + } + } else { + Modifier + }, + ) + .minimumInteractiveComponentSize() + .padding(contentPadding), + verticalAlignment = Alignment.CenterVertically, + ) { + FlatItemActionContent( + action = action, + compact = true, + ) + } + } + } + } +} + +@Composable +fun RowScope.FlatItemActionContent( + action: FlatItemAction, + compact: Boolean = false, +) { + CompositionLocalProvider( + LocalContentColor provides LocalContentColor.current + .let { color -> + if (action.onClick != null) { + color + } else { + color.combineAlpha(DisabledEmphasisAlpha) + } + }, + ) { + if (action.icon != null || action.leading != null) { + Box( + modifier = Modifier + .padding(4.dp) + .size(16.dp), + ) { + if (action.icon != null) { + Icon( + imageVector = action.icon, + contentDescription = null, + ) + } + action.leading?.invoke() + } + Spacer( + modifier = Modifier + .width(8.dp), + ) + } + Column( + modifier = Modifier + .weight(1f), + verticalArrangement = Arrangement.Center, + ) { + FlatItemTextContent( + title = { + Text( + text = action.title, + maxLines = 2, + overflow = TextOverflow.Ellipsis, + ) + }, + text = if (action.text != null) { + // composable + { + Text( + text = action.text, + maxLines = 2, + overflow = TextOverflow.Ellipsis, + fontSize = 13.sp, + ) + } + } else { + null + }, + compact = compact, + ) + } + if (action.trailing != null) { + Spacer(Modifier.width(8.dp)) + action.trailing.invoke() + } + } +} + +@Composable +fun Avatar( + modifier: Modifier = Modifier, + color: Color = LocalContentColor.current + .let { + it.copy(alpha = 0.05f * LocalContentColor.current.alpha) + }, + content: @Composable BoxScope.() -> Unit, +) { + val contentColor = LocalContentColor.current.copy(alpha = DisabledEmphasisAlpha) + Box( + modifier = modifier + .size(36.dp) + .clip(MaterialTheme.shapes.medium) + .background(color), + ) { + content() + } +} + +@OptIn(ExperimentalLayoutApi::class) +@Composable +fun AvatarBuilder( + modifier: Modifier = Modifier, + icon: VaultItemIcon, + accent: Color, + active: Boolean, + badge: @Composable () -> Unit, +) = Box( + modifier = modifier, +) { + val avatarColor = accent + .takeIf { + val fits = icon is VaultItemIcon.VectorIcon || + icon is VaultItemIcon.TextIcon + fits && active + } + ?: MaterialTheme.colorScheme.surfaceColorAtElevationSemi( + LocalAbsoluteTonalElevation.current + 8.dp, + ) + Avatar( + color = avatarColor, + ) { + VaultItemIcon2( + icon = icon, + ) + } + + val backgroundColor = if (!active) { + MaterialTheme.colorScheme.surfaceVariant + } else { + MaterialTheme.colorScheme.tertiaryContainer + } + val contentColor = contentColorFor(backgroundColor) + FlowRow( + modifier = Modifier + .align(Alignment.BottomEnd) + .widthIn(max = 36.dp) + .wrapContentWidth( + align = Alignment.Start, + unbounded = true, + ) + .clip(MaterialTheme.shapes.extraSmall) + .background(backgroundColor), + ) { + CompositionLocalProvider( + LocalContentColor provides contentColor, + ) { + badge() + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/PasswordPwnedBadge.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/PasswordPwnedBadge.kt new file mode 100644 index 00000000..132ca424 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/PasswordPwnedBadge.kt @@ -0,0 +1,129 @@ +package com.artemchep.keyguard.ui + +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.SideEffect +import androidx.compose.runtime.State +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.common.io.attempt +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.model.CheckPasswordLeakRequest +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.model.getOrNull +import com.artemchep.keyguard.common.usecase.CheckPasswordLeak +import com.artemchep.keyguard.res.Res +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.async +import kotlinx.coroutines.coroutineScope +import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.debounce +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.flatMapLatest +import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.flow.flowOn +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.onStart +import org.kodein.di.compose.rememberInstance + +private data class PasswordPwnedBadgeState( + val password: String, + val content: Loadable, +) + +@Composable +fun PasswordPwnedBadge( + modifier: Modifier = Modifier, + password: String, +) { + val state = producePasswordPwnedBadgeState(password) + val visible by remember(state) { + derivedStateOf { + val strength = state.value.content.getOrNull() + strength + ?.let { it > 0 } + ?: false + } + } + ExpandedIfNotEmptyForRow( + modifier = modifier, + valueOrNull = Unit.takeIf { visible && state.value.password == password }, + ) { + AhContainer( + score = 0f, + ) { + Text( + modifier = Modifier + .padding(horizontal = 4.dp), + text = stringResource(Res.strings.password_pwned_label), + ) + } + } +} + +@Composable +private fun producePasswordPwnedBadgeState( + password: String, +): State { + val checkPasswordLeak: CheckPasswordLeak by rememberInstance() + + val sink = remember { + MutableStateFlow(password) + } + + val initialState = PasswordPwnedBadgeState( + password = password, + content = Loadable.Loading, + ) + val state = remember(sink) { + sink + .debounce(500L) + .onStart { + emit(password) + } + .distinctUntilChanged() + .flatMapLatest { pw -> + flowOf(Unit) + .map { + coroutineScope { + val deferredScore = async(Dispatchers.Default) { + val request = CheckPasswordLeakRequest( + password = pw, + cache = false, + ) + checkPasswordLeak(request) + .attempt() + .bind() + .getOrNull() + } + delay(250L) + deferredScore.await() + } + } + .map { score -> + val content: Loadable = Loadable.Ok(score) + PasswordPwnedBadgeState( + password = pw, + content = content, + ) + } + .onStart { + emit(initialState) + } + } + .flowOn(Dispatchers.Default) + }.collectAsState(initial = initialState) + + SideEffect { + sink.value = password + } + + return state +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/PasswordStrengthBadge.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/PasswordStrengthBadge.kt new file mode 100644 index 00000000..8937d0e5 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/PasswordStrengthBadge.kt @@ -0,0 +1,162 @@ +package com.artemchep.keyguard.ui + +import androidx.compose.animation.animateContentSize +import androidx.compose.animation.core.animateFloatAsState +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.material3.CircularProgressIndicator +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.SideEffect +import androidx.compose.runtime.State +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.graphicsLayer +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.common.io.attempt +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.io.map +import com.artemchep.keyguard.common.model.Loadable +import com.artemchep.keyguard.common.model.PasswordStrength +import com.artemchep.keyguard.common.model.alertScore +import com.artemchep.keyguard.common.model.formatLocalized +import com.artemchep.keyguard.common.model.getOrNull +import com.artemchep.keyguard.common.usecase.GetPasswordStrength +import com.artemchep.keyguard.feature.crashlytics.crashlyticsTap +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.async +import kotlinx.coroutines.coroutineScope +import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.debounce +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.flatMapLatest +import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.flow.flowOn +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.onStart +import org.kodein.di.compose.rememberInstance + +private data class PasswordStrengthBadgeState( + val password: String, + val content: Loadable, +) + +@Composable +fun PasswordStrengthBadge( + modifier: Modifier = Modifier, + password: String, +) { + val state = producePasswordStrengthBadgeState(password) + val score by remember(state) { + derivedStateOf { + val strength = state.value.content.getOrNull() + strength?.alertScore() + ?: 1f + } + } + val alpha by run { + val enabled by remember(state, password) { + derivedStateOf { + state.value.password == password + } + } + val targetAlpha = if (enabled) 1f else DisabledEmphasisAlpha + animateFloatAsState(targetAlpha) + } + AhContainer( + modifier = modifier + .graphicsLayer { + this.alpha = alpha + }, + score = score, + ) { + Box( + modifier = Modifier + .animateContentSize(), + ) { + val hasStrength by remember(state) { + derivedStateOf { + state.value.content is Loadable.Ok + } + } + if (hasStrength) { + val strength = state.value.content.getOrNull() + if (strength != null) { + Text( + modifier = Modifier + .padding(horizontal = 4.dp), + text = strength.formatLocalized(), + ) + } + } else { + CircularProgressIndicator( + modifier = Modifier + .size(17.dp), + ) + } + } + } +} + +@Composable +private fun producePasswordStrengthBadgeState( + password: String, +): State { + val getPasswordStrength: GetPasswordStrength by rememberInstance() + + val sink = remember { + MutableStateFlow(password) + } + + val initialState = PasswordStrengthBadgeState( + password = password, + content = Loadable.Loading, + ) + val state = remember(sink) { + sink + .debounce(250L) + .onStart { + emit(password) + } + .distinctUntilChanged() + .flatMapLatest { pw -> + flowOf(Unit) + .map { + coroutineScope { + val deferredScore = async(Dispatchers.Default) { + getPasswordStrength(pw) + .map { pwStrength -> pwStrength.score } + .crashlyticsTap() + .attempt() + .bind() + .getOrNull() + } + delay(250L) + deferredScore.await() + } + } + .map { score -> + val content: Loadable = Loadable.Ok(score) + PasswordStrengthBadgeState( + password = pw, + content = content, + ) + } + .onStart { + emit(initialState) + } + } + .flowOn(Dispatchers.Default) + }.collectAsState(initial = initialState) + + SideEffect { + sink.value = password + } + + return state +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/Placeholder.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/Placeholder.kt new file mode 100644 index 00000000..acc4ec4c --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/Placeholder.kt @@ -0,0 +1,100 @@ +package com.artemchep.keyguard.ui + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ColumnScope +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.widthIn +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.ProvideTextStyle +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.alpha +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.res.Res +import compose.icons.FeatherIcons +import compose.icons.feathericons.Package +import dev.icerock.moko.resources.compose.stringResource + +@Composable +fun Placeholder( + modifier: Modifier = Modifier, + icon: ImageVector, + title: String, +) { + Column( + modifier = modifier + .padding(horizontal = 16.dp), + ) { + Placeholder( + icon = icon, + title = title, + ) + } +} + +@Composable +fun Placeholder( + modifier: Modifier = Modifier, +) { + Placeholder( + modifier = modifier, + icon = FeatherIcons.Package, + title = stringResource(Res.strings.coming_soon), + ) +} + +@Composable +fun ColumnScope.Placeholder( + icon: ImageVector, + title: String, +) { + Placeholder( + icon = { m -> + Icon( + modifier = m, + imageVector = icon, + contentDescription = null, + ) + }, + title = { m -> + Text( + modifier = m, + text = title, + textAlign = TextAlign.Center, + ) + }, + ) +} + +@Composable +fun ColumnScope.Placeholder( + icon: @Composable (Modifier) -> Unit, + title: @Composable (Modifier) -> Unit, +) { + icon( + Modifier + .size(96.dp) + .alpha(MediumEmphasisAlpha) + .align(Alignment.CenterHorizontally), + ) + Spacer( + modifier = Modifier + .height(16.dp), + ) + ProvideTextStyle(MaterialTheme.typography.labelLarge) { + title( + Modifier + .widthIn(max = 196.dp) + .alpha(MediumEmphasisAlpha) + .align(Alignment.CenterHorizontally), + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/Scaffold.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/Scaffold.kt new file mode 100644 index 00000000..8daa95f2 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/Scaffold.kt @@ -0,0 +1,476 @@ +package com.artemchep.keyguard.ui + +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.animation.ExperimentalAnimationApi +import androidx.compose.animation.animateColorAsState +import androidx.compose.animation.expandIn +import androidx.compose.animation.fadeIn +import androidx.compose.animation.fadeOut +import androidx.compose.animation.scaleIn +import androidx.compose.animation.scaleOut +import androidx.compose.animation.shrinkOut +import androidx.compose.foundation.ScrollState +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ColumnScope +import androidx.compose.foundation.layout.ExperimentalLayoutApi +import androidx.compose.foundation.layout.MutableWindowInsets +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.consumeWindowInsets +import androidx.compose.foundation.layout.exclude +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.onConsumedWindowInsetsChanged +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.union +import androidx.compose.foundation.layout.widthIn +import androidx.compose.foundation.lazy.LazyColumn +import androidx.compose.foundation.lazy.LazyListScope +import androidx.compose.foundation.lazy.LazyListState +import androidx.compose.foundation.lazy.rememberLazyListState +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.verticalScroll +import androidx.compose.material.ExperimentalMaterialApi +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.SelectAll +import androidx.compose.material.pullrefresh.PullRefreshState +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.ExtendedFloatingActionButton +import androidx.compose.material3.FabPosition +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.LinearProgressIndicator +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Scaffold +import androidx.compose.material3.SmallFloatingActionButton +import androidx.compose.material3.Text +import androidx.compose.material3.TopAppBarScrollBehavior +import androidx.compose.material3.contentColorFor +import androidx.compose.runtime.Composable +import androidx.compose.runtime.Immutable +import androidx.compose.runtime.Stable +import androidx.compose.runtime.State +import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.compositeOver +import androidx.compose.ui.graphics.graphicsLayer +import androidx.compose.ui.platform.LocalDensity +import androidx.compose.ui.unit.IntSize +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.platform.leIme +import com.artemchep.keyguard.platform.leSystemBars +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.scrollbar.ColumnScrollbar +import com.artemchep.keyguard.ui.scrollbar.LazyColumnScrollbar +import com.artemchep.keyguard.ui.selection.SelectionBar +import com.artemchep.keyguard.ui.theme.combineAlpha +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.collections.immutable.ImmutableList +import kotlin.math.log10 + +val screenMaxWidth = 768.dp +private val screenPaddingTop = 8.dp +private val screenPaddingBottom = 8.dp + +@OptIn( + ExperimentalMaterial3Api::class, + ExperimentalMaterialApi::class, + ExperimentalLayoutApi::class, +) +@Composable +fun ScaffoldLazyColumn( + modifier: Modifier = Modifier, + topAppBarScrollBehavior: TopAppBarScrollBehavior, + topBar: @Composable () -> Unit = {}, + bottomBar: @Composable () -> Unit = {}, + snackbarHost: @Composable () -> Unit = {}, + floatingActionState: State = rememberUpdatedState(newValue = null), + floatingActionButton: @Composable FabScope.() -> Unit = {}, + floatingActionButtonPosition: FabPosition = FabPosition.End, + pullRefreshState: PullRefreshState? = null, + containerColor: Color = MaterialTheme.colorScheme.background, + contentColor: Color = contentColorFor(containerColor), + contentWindowInsets: WindowInsets = scaffoldContentWindowInsets, + overlay: @Composable OverlayScope.() -> Unit = {}, + listVerticalArrangement: Arrangement.Vertical = Arrangement.Top, + listState: LazyListState = rememberLazyListState(), + listContent: LazyListScope.() -> Unit, +) { + val density = LocalDensity.current + val translationYState = remember(density, pullRefreshState) { + derivedStateOf { + val progress = run { + val p = pullRefreshState?.progress ?: 0f + log10(p.coerceAtLeast(0f) * 10 + 1) + } + progress * density.density * 64 + } + } + + val remainingInsets = remember { MutableWindowInsets() } + Scaffold( + modifier = modifier + .onConsumedWindowInsetsChanged { consumedWindowInsets -> + remainingInsets.insets = contentWindowInsets.exclude(consumedWindowInsets) + }, + topBar = topBar, + bottomBar = bottomBar, + snackbarHost = snackbarHost, + floatingActionButton = { + val expandedState = topAppBarScrollBehavior.rememberFabExpanded() + val scope = remember( + floatingActionState, + expandedState, + ) { + MutableFabScope( + state = floatingActionState, + expanded = expandedState, + ) + } + floatingActionButton(scope) + }, + floatingActionButtonPosition = floatingActionButtonPosition, + containerColor = containerColor, + contentColor = contentColor, + contentWindowInsets = remainingInsets, + ) { contentPadding -> + val contentPaddingWithFab = calculatePaddingWithFab( + contentPadding = contentPadding, + fabState = floatingActionState, + ) + val contentPaddingState = rememberUpdatedState(contentPaddingWithFab) + LazyColumnScrollbar( + modifier = Modifier + .fillMaxSize() + .consumeWindowInsets(contentWindowInsets), + contentPadding = contentPadding, + listState = listState, + ) { + LazyColumn( + modifier = Modifier + .fillMaxSize() + .graphicsLayer { + translationY = translationYState.value + }, + verticalArrangement = listVerticalArrangement, + contentPadding = contentPaddingWithFab, + state = listState, + ) { + listContent() + } + } + val overlayScope = remember(contentPaddingState) { + MutableOverlayScope( + contentPadding = contentPaddingState, + ) + } + overlay(overlayScope) + } +} + +@OptIn(ExperimentalMaterial3Api::class, ExperimentalLayoutApi::class) +@Composable +fun ScaffoldColumn( + modifier: Modifier = Modifier, + topAppBarScrollBehavior: TopAppBarScrollBehavior, + topBar: @Composable () -> Unit = {}, + bottomBar: @Composable () -> Unit = {}, + snackbarHost: @Composable () -> Unit = {}, + floatingActionState: State = rememberUpdatedState(newValue = null), + floatingActionButton: @Composable FabScope.() -> Unit = {}, + floatingActionButtonPosition: FabPosition = FabPosition.End, + containerColor: Color = MaterialTheme.colorScheme.background, + contentColor: Color = contentColorFor(containerColor), + contentWindowInsets: WindowInsets = scaffoldContentWindowInsets, + overlay: @Composable OverlayScope.() -> Unit = {}, + columnVerticalArrangement: Arrangement.Vertical = Arrangement.Top, + columnHorizontalAlignment: Alignment.Horizontal = Alignment.Start, + columnScrollState: ScrollState = rememberScrollState(), + columnContent: @Composable ColumnScope.() -> Unit, +) { + val remainingInsets = remember { MutableWindowInsets() } + Scaffold( + modifier = modifier + .onConsumedWindowInsetsChanged { consumedWindowInsets -> + remainingInsets.insets = contentWindowInsets.exclude(consumedWindowInsets) + }, + topBar = topBar, + bottomBar = bottomBar, + snackbarHost = snackbarHost, + floatingActionButton = { + val expandedState = topAppBarScrollBehavior.rememberFabExpanded() + val scope = remember( + floatingActionState, + expandedState, + ) { + MutableFabScope( + state = floatingActionState, + expanded = expandedState, + ) + } + floatingActionButton(scope) + }, + floatingActionButtonPosition = floatingActionButtonPosition, + containerColor = containerColor, + contentColor = contentColor, + contentWindowInsets = remainingInsets, + ) { contentPadding -> + val contentPaddingWithFab = calculatePaddingWithFab( + contentPadding = contentPadding, + fabState = floatingActionState, + ) + val contentPaddingState = rememberUpdatedState(contentPaddingWithFab) + ColumnScrollbar( + modifier = Modifier + .fillMaxSize() + .consumeWindowInsets(contentWindowInsets), + state = columnScrollState, + contentPadding = contentPadding, + ) { + Box( + modifier = Modifier + .fillMaxSize() + .verticalScroll(columnScrollState) + .padding(contentPaddingWithFab), + ) { + Column( + modifier = Modifier + .widthIn(max = screenMaxWidth), + verticalArrangement = columnVerticalArrangement, + horizontalAlignment = columnHorizontalAlignment, + ) { + columnContent() + } + } + } + val overlayScope = remember(contentPaddingState) { + MutableOverlayScope( + contentPadding = contentPaddingState, + ) + } + overlay(overlayScope) + } +} + +private fun calculatePaddingWithFab( + contentPadding: PaddingValues, + fabState: State, +) = run { + val fabHeight = 56.dp + val fabPadding = fabHeight + 16.dp * 2 + val extraPadding = if (fabState.value != null) { + PaddingValues( + top = screenPaddingTop, + bottom = fabPadding, + ) + } else { + PaddingValues( + top = screenPaddingTop, + bottom = screenPaddingBottom, + ) + } + contentPadding.plus(extraPadding) +} + +@Immutable +data class FabState( + val onClick: (() -> Unit)?, + val model: Any?, +) + +@Stable +interface FabScope { + val state: State + + val expanded: State +} + +private class MutableFabScope( + override val state: State, + override val expanded: State, +) : FabScope + +@Composable +fun FabScope.DefaultFab( + color: Color = MaterialTheme.colorScheme.primaryContainer, + contentColor: Color = contentColorFor(color), + icon: @Composable () -> Unit, + text: @Composable () -> Unit, +) { + val latestFabState = state.value + val latestOnClick by rememberUpdatedState(latestFabState?.onClick) + ExpandedIfNotEmpty( + valueOrNull = latestFabState, + enter = fadeIn() + scaleIn(), + exit = scaleOut() + fadeOut(), + ) { fabState -> + val enabled = fabState.onClick != null + val containerColorTarget = + if (enabled) { + color + } else { + color + .combineAlpha(DisabledEmphasisAlpha) + .compositeOver(MaterialTheme.colorScheme.surfaceVariant) + } + val containerColor by animateColorAsState(containerColorTarget) + val contentColorTarget = + if (enabled) { + contentColor + } else { + MaterialTheme.colorScheme.onSurfaceVariant + .combineAlpha(DisabledEmphasisAlpha) + } + val contentColor by animateColorAsState(contentColorTarget) + ExtendedFloatingActionButton( + expanded = expanded.value && enabled, + icon = icon, + text = text, + containerColor = containerColor, + contentColor = contentColor, + onClick = { + latestOnClick?.invoke() + }, + ) + } +} + +@Composable +fun FabScope.SmallFab( + icon: @Composable () -> Unit, + onClick: (() -> Unit)?, +) { + val latestFabState = state.value + val latestOnClick by rememberUpdatedState(onClick) + ExpandedIfNotEmpty( + valueOrNull = latestFabState, + enter = fadeIn() + scaleIn(), + exit = scaleOut() + fadeOut(), + ) { fabState -> + val enabled = fabState.onClick != null + val containerColorTarget = + if (enabled) { + MaterialTheme.colorScheme.secondaryContainer + } else { + MaterialTheme.colorScheme.secondaryContainer + .combineAlpha(DisabledEmphasisAlpha) + .compositeOver(MaterialTheme.colorScheme.surfaceVariant) + } + val containerColor by animateColorAsState(containerColorTarget) + val contentColorTarget = + if (enabled) { + MaterialTheme.colorScheme.onSecondaryContainer + } else { + MaterialTheme.colorScheme.onSurfaceVariant + .combineAlpha(DisabledEmphasisAlpha) + } + val contentColor by animateColorAsState(contentColorTarget) + SmallFloatingActionButton( + containerColor = containerColor, + contentColor = contentColor, + onClick = { + latestOnClick?.invoke() + }, + ) { + icon() + } + } +} + +@Composable +fun DefaultSelection( + state: Selection?, +) { + ExpandedIfNotEmpty( + valueOrNull = state, + ) { selection -> + SelectionBar( + title = { + val text = stringResource(Res.strings.selection_n_selected, selection.count) + Text(text) + }, + trailing = { + val updatedOnSelectAll by rememberUpdatedState(selection.onSelectAll) + IconButton( + enabled = updatedOnSelectAll != null, + onClick = { + updatedOnSelectAll?.invoke() + }, + ) { + Icon( + imageVector = Icons.Outlined.SelectAll, + contentDescription = null, + ) + } + + OptionsButton( + actions = selection.actions, + ) + }, + onClear = selection.onClear, + ) + } +} + +@Stable +interface OverlayScope { + val contentPadding: State +} + +private class MutableOverlayScope( + override val contentPadding: State, +) : OverlayScope + +@Composable +fun OverlayScope.DefaultProgressBar( + modifier: Modifier = Modifier, + visible: Boolean, +) { + val contentPadding = contentPadding + val finalPadding = remember(contentPadding) { + derivedStateOf { + val p = PaddingValues(top = screenPaddingTop) + contentPadding.value - p + } + } + AnimatedVisibility( + modifier = modifier + .padding(finalPadding.value), + visible = visible, + enter = fadeIn() + expandIn( + initialSize = { + IntSize(it.width, 0) + }, + ), + exit = shrinkOut( + targetSize = { + IntSize(it.width, 0) + }, + ) + fadeOut(), + ) { + LinearProgressIndicator( + modifier = Modifier + .fillMaxWidth(), + ) + } +} + +@Immutable +data class Selection( + val count: Int, + val actions: ImmutableList, + val onSelectAll: (() -> Unit)? = null, + val onClear: (() -> Unit)? = null, +) + +private val scaffoldContentWindowInsets + @Composable + get() = WindowInsets.leSystemBars + .union(WindowInsets.leIme) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/SimpleNote.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/SimpleNote.kt new file mode 100644 index 00000000..071b27d6 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/SimpleNote.kt @@ -0,0 +1,121 @@ +package com.artemchep.keyguard.ui + +import androidx.compose.foundation.layout.RowScope +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Check +import androidx.compose.material.icons.outlined.ErrorOutline +import androidx.compose.material.icons.outlined.Info +import androidx.compose.material.icons.outlined.Warning +import androidx.compose.material3.Icon +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.Immutable +import androidx.compose.ui.Modifier +import com.artemchep.keyguard.ui.theme.combineAlpha +import com.artemchep.keyguard.ui.theme.info +import com.artemchep.keyguard.ui.theme.infoContainer +import com.artemchep.keyguard.ui.theme.ok +import com.artemchep.keyguard.ui.theme.okContainer +import com.artemchep.keyguard.ui.theme.onInfoContainer +import com.artemchep.keyguard.ui.theme.onOkContainer +import com.artemchep.keyguard.ui.theme.onWarningContainer +import com.artemchep.keyguard.ui.theme.warning +import com.artemchep.keyguard.ui.theme.warningContainer + +@Immutable +data class SimpleNote( + val text: String, + val type: Type, +) { + @Immutable + enum class Type { + OK, + INFO, + WARNING, + ERROR, + } +} + +@Composable +fun FlatSimpleNote( + modifier: Modifier = Modifier, + note: SimpleNote, +) { + FlatSimpleNote( + modifier = modifier, + type = note.type, + text = note.text, + ) +} + +@Composable +fun FlatSimpleNote( + modifier: Modifier = Modifier, + type: SimpleNote.Type, + title: String? = null, + text: String? = null, + trailing: (@Composable RowScope.() -> Unit)? = null, +) { + val tintColor = when (type) { + SimpleNote.Type.OK -> MaterialTheme.colorScheme.ok + SimpleNote.Type.INFO -> MaterialTheme.colorScheme.info + SimpleNote.Type.WARNING -> MaterialTheme.colorScheme.warning + SimpleNote.Type.ERROR -> MaterialTheme.colorScheme.error + } + val surfaceColor = when (type) { + SimpleNote.Type.OK -> MaterialTheme.colorScheme.okContainer + SimpleNote.Type.INFO -> MaterialTheme.colorScheme.infoContainer + SimpleNote.Type.WARNING -> MaterialTheme.colorScheme.warningContainer + SimpleNote.Type.ERROR -> MaterialTheme.colorScheme.errorContainer + } + val contentColor = when (type) { + SimpleNote.Type.OK -> MaterialTheme.colorScheme.onOkContainer + SimpleNote.Type.INFO -> MaterialTheme.colorScheme.onInfoContainer + SimpleNote.Type.WARNING -> MaterialTheme.colorScheme.onWarningContainer + SimpleNote.Type.ERROR -> MaterialTheme.colorScheme.onErrorContainer + } + FlatItemLayout( + modifier = modifier, + backgroundColor = surfaceColor + .combineAlpha(DisabledEmphasisAlpha), + leading = { + val imageVector = when (type) { + SimpleNote.Type.OK -> Icons.Outlined.Check + SimpleNote.Type.INFO -> Icons.Outlined.Info + SimpleNote.Type.WARNING -> Icons.Outlined.Warning + SimpleNote.Type.ERROR -> Icons.Outlined.ErrorOutline + } + Icon( + imageVector = imageVector, + contentDescription = null, + tint = tintColor, + ) + }, + content = { + if (title != null) { + Text( + text = title, + style = MaterialTheme.typography.titleSmall, + color = contentColor, + ) + } + if (text != null) { + val textColor = if (title != null) { + LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha) + } else { + LocalContentColor.current + } + Text( + text = text, + style = MaterialTheme.typography.bodySmall, + color = textColor, + ) + } + }, + trailing = trailing, + enabled = true, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/SliderInteraction.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/SliderInteraction.kt new file mode 100644 index 00000000..637bcd67 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/SliderInteraction.kt @@ -0,0 +1,43 @@ +package com.artemchep.keyguard.ui + +import androidx.compose.foundation.interaction.DragInteraction +import androidx.compose.foundation.interaction.Interaction +import androidx.compose.foundation.interaction.InteractionSource +import androidx.compose.foundation.interaction.PressInteraction +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import kotlinx.coroutines.flow.collect +import kotlinx.coroutines.flow.onEach + +@Composable +fun InteractionSource.collectIsInteractedWith(): Boolean { + var isInteractedWith by remember(this) { + mutableStateOf(false) + } + + LaunchedEffect(this) { + val pressInteractions = mutableListOf() + val dragInteractions = mutableListOf() + interactions + .onEach { interaction: Interaction -> + when (interaction) { + is PressInteraction.Press -> pressInteractions.add(interaction) + is PressInteraction.Release -> pressInteractions.remove(interaction.press) + is PressInteraction.Cancel -> pressInteractions.remove(interaction.press) + is DragInteraction.Start -> dragInteractions.add(interaction) + is DragInteraction.Stop -> dragInteractions.remove(interaction.start) + is DragInteraction.Cancel -> dragInteractions.remove(interaction.start) + } + val userIsInteracting = pressInteractions.isNotEmpty() || + dragInteractions.isNotEmpty() + isInteractedWith = userIsInteracting + } + .collect() + } + + return isInteractedWith +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/StringForEach.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/StringForEach.kt new file mode 100644 index 00000000..339a3f7f --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/StringForEach.kt @@ -0,0 +1,12 @@ +package com.artemchep.keyguard.ui + +import kotlin.streams.asSequence + +fun String.asCodePointsSequence(): Sequence = sequence { + val out = codePoints() + .asSequence() + .map { codePoint -> + String(Character.toChars(codePoint)) + } + yieldAll(out) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/SyncSupervisorImpl.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/SyncSupervisorImpl.kt new file mode 100644 index 00000000..5e93d599 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/SyncSupervisorImpl.kt @@ -0,0 +1,39 @@ +package com.artemchep.keyguard.ui + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.io.ioEffect +import kotlinx.collections.immutable.persistentMapOf +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.update + +class SyncSupervisorImpl { + private val sink = MutableStateFlow( + value = persistentMapOf(), + ) + + val output = sink + .map { it.keys } + .distinctUntilChanged() + + fun track(key: Key, io: IO): IO = ioEffect { + try { + updateState(key, Int::inc) + io.bind() + } finally { + updateState(key, Int::dec) + } + } + + private fun updateState(key: Key, block: (Int) -> Int) = + sink.update { map -> + val v = map.getOrElse(key) { 0 }.let(block) + if (v > 0) { + map.put(key, v) + } else { + map.remove(key) + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/TextItem.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/TextItem.kt new file mode 100644 index 00000000..725d6daa --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/TextItem.kt @@ -0,0 +1,1235 @@ +package com.artemchep.keyguard.ui + +import androidx.compose.animation.animateColorAsState +import androidx.compose.animation.animateContentSize +import androidx.compose.animation.core.LinearEasing +import androidx.compose.animation.core.animateDpAsState +import androidx.compose.animation.core.animateFloat +import androidx.compose.animation.core.animateFloatAsState +import androidx.compose.animation.core.spring +import androidx.compose.animation.core.tween +import androidx.compose.animation.core.updateTransition +import androidx.compose.foundation.border +import androidx.compose.foundation.clickable +import androidx.compose.foundation.horizontalScroll +import androidx.compose.foundation.interaction.MutableInteractionSource +import androidx.compose.foundation.interaction.collectIsFocusedAsState +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.ColumnScope +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.RowScope +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.defaultMinSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.heightIn +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.rememberScrollState +import androidx.compose.foundation.text.BasicTextField +import androidx.compose.foundation.text.KeyboardActions +import androidx.compose.foundation.text.KeyboardOptions +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.AutoAwesome +import androidx.compose.material.icons.outlined.Clear +import androidx.compose.material.icons.outlined.Email +import androidx.compose.material.icons.outlined.Password +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.LocalTextStyle +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.ProvideTextStyle +import androidx.compose.material3.Surface +import androidx.compose.material3.Text +import androidx.compose.material3.TextFieldDefaults +import androidx.compose.material3.contentColorFor +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.State +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.runtime.setValue +import androidx.compose.runtime.snapshotFlow +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.alpha +import androidx.compose.ui.draw.clip +import androidx.compose.ui.draw.drawBehind +import androidx.compose.ui.focus.onFocusChanged +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.SolidColor +import androidx.compose.ui.graphics.compositeOver +import androidx.compose.ui.graphics.graphicsLayer +import androidx.compose.ui.graphics.luminance +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.platform.testTag +import androidx.compose.ui.text.AnnotatedString +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.input.KeyboardType +import androidx.compose.ui.text.input.PasswordVisualTransformation +import androidx.compose.ui.text.input.TextFieldValue +import androidx.compose.ui.text.input.VisualTransformation +import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import com.artemchep.keyguard.feature.auth.common.TextFieldModel2 +import com.artemchep.keyguard.feature.auth.common.VisibilityState +import com.artemchep.keyguard.feature.auth.common.VisibilityToggle +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.focus.FocusRequester2 +import com.artemchep.keyguard.ui.focus.bringIntoView +import com.artemchep.keyguard.ui.focus.focusRequester2 +import com.artemchep.keyguard.ui.icons.IconBox +import com.artemchep.keyguard.ui.icons.KeyguardWebsite +import com.artemchep.keyguard.ui.theme.combineAlpha +import com.artemchep.keyguard.ui.theme.infoContainer +import com.artemchep.keyguard.ui.theme.monoFontFamily +import com.artemchep.keyguard.ui.theme.okContainer +import com.artemchep.keyguard.ui.theme.warningContainer +import com.artemchep.keyguard.ui.util.DividerColor +import com.artemchep.keyguard.ui.util.HorizontalDivider +import com.artemchep.keyguard.ui.util.VerticalDivider +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.collections.immutable.ImmutableList +import kotlinx.collections.immutable.persistentListOf +import kotlinx.collections.immutable.toImmutableList +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.debounce +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.flowOn +import kotlinx.coroutines.flow.map +import kotlinx.datetime.Clock +import kotlinx.datetime.Instant + +@Composable +fun UrlFlatTextField( + modifier: Modifier = Modifier, + testTag: String? = null, + label: String? = null, + placeholder: String? = null, + value: TextFieldModel2, + keyboardOptions: KeyboardOptions = KeyboardOptions.Default, + keyboardActions: KeyboardActions = KeyboardActions.Default, + clearButton: Boolean = true, + leading: (@Composable RowScope.() -> Unit)? = { + IconBox( + main = Icons.Outlined.KeyguardWebsite, + ) + }, + trailing: (@Composable RowScope.() -> Unit)? = null, + content: (@Composable ColumnScope.() -> Unit)? = null, +) { + FlatTextField( + modifier = modifier, + testTag = testTag, + label = label + ?: stringResource(Res.strings.url), + placeholder = placeholder, + value = value, + keyboardOptions = keyboardOptions.copy( + autoCorrect = false, + keyboardType = KeyboardType.Uri, + ), + keyboardActions = keyboardActions, + singleLine = true, + maxLines = 1, + clearButton = clearButton, + leading = leading, + trailing = trailing, + content = content, + ) +} + +@Composable +fun EmailFlatTextField( + modifier: Modifier = Modifier, + fieldModifier: Modifier = Modifier, + boxModifier: Modifier = Modifier, + testTag: String? = null, + label: String? = null, + placeholder: String? = "username@example.com", + value: TextFieldModel2, + keyboardOptions: KeyboardOptions = KeyboardOptions.Default, + keyboardActions: KeyboardActions = KeyboardActions.Default, + clearButton: Boolean = true, + leading: (@Composable RowScope.() -> Unit)? = { + IconBox( + main = Icons.Outlined.Email, + ) + }, + trailing: (@Composable RowScope.() -> Unit)? = null, + content: (@Composable ColumnScope.() -> Unit)? = null, +) { + FlatTextField( + modifier = modifier, + fieldModifier = fieldModifier, + boxModifier = boxModifier, + testTag = testTag, + label = label + ?: stringResource(Res.strings.email), + placeholder = placeholder, + value = value, + keyboardOptions = keyboardOptions.copy( + autoCorrect = false, + keyboardType = KeyboardType.Email, + ), + keyboardActions = keyboardActions, + singleLine = true, + maxLines = 1, + clearButton = clearButton, + leading = leading, + trailing = trailing, + content = content, + ) +} + +@Composable +fun PasswordFlatTextField( + modifier: Modifier = Modifier, + fieldModifier: Modifier = Modifier, + boxModifier: Modifier = Modifier, + testTag: String? = null, + label: String? = null, + placeholder: String? = null, + value: TextFieldModel2, + keyboardOptions: KeyboardOptions = KeyboardOptions.Default, + keyboardActions: KeyboardActions = KeyboardActions.Default, + clearButton: Boolean = true, + leading: (@Composable RowScope.() -> Unit)? = { + IconBox( + main = Icons.Outlined.Password, + ) + }, + trailing: (@Composable RowScope.() -> Unit)? = null, + content: (@Composable ColumnScope.() -> Unit)? = null, +) { + ConcealedFlatTextField( + modifier = modifier, + fieldModifier = fieldModifier, + boxModifier = boxModifier, + testTag = testTag, + label = label + ?: stringResource(Res.strings.password), + placeholder = placeholder, + value = value, + keyboardOptions = keyboardOptions.copy( + autoCorrect = false, + keyboardType = KeyboardType.Password, + ), + keyboardActions = keyboardActions, + singleLine = true, + maxLines = 1, + clearButton = clearButton, + leading = leading, + trailing = trailing, + content = content, + ) +} + +@Composable +fun ConcealedFlatTextField( + modifier: Modifier = Modifier, + fieldModifier: Modifier = Modifier, + boxModifier: Modifier = Modifier, + testTag: String? = null, + label: String? = null, + placeholder: String? = null, + value: TextFieldModel2, + keyboardOptions: KeyboardOptions = KeyboardOptions.Default, + keyboardActions: KeyboardActions = KeyboardActions.Default, + singleLine: Boolean = false, + maxLines: Int = Int.MAX_VALUE, + interactionSource: MutableInteractionSource = remember { MutableInteractionSource() }, + clearButton: Boolean = true, + leading: (@Composable RowScope.() -> Unit)? = null, + trailing: (@Composable RowScope.() -> Unit)? = null, + content: (@Composable ColumnScope.() -> Unit)? = null, +) { + val visibilityState = remember { + VisibilityState() + } + FlatTextField( + modifier = modifier, + fieldModifier = fieldModifier, + boxModifier = boxModifier, + testTag = testTag, + label = label, + placeholder = placeholder, + value = value, + textStyle = LocalTextStyle.current.copy( + fontFamily = monoFontFamily, + ), + visualTransformation = if (visibilityState.isVisible) { + VisualTransformation.None + } else { + PasswordVisualTransformation() + }, + keyboardOptions = keyboardOptions, + keyboardActions = keyboardActions, + singleLine = singleLine, + maxLines = maxLines, + interactionSource = interactionSource, + clearButton = clearButton, + leading = leading, + trailing = { + VisibilityToggle( + visibilityState = visibilityState, + ) + if (trailing != null) { + trailing() + } + }, + content = content, + ) +} + +@Composable +fun FlatTextField( + modifier: Modifier = Modifier, + fieldModifier: Modifier = Modifier, + boxModifier: Modifier = Modifier, + testTag: String? = null, + label: String? = null, + placeholder: String? = null, + value: TextFieldModel2, + textStyle: TextStyle = LocalTextStyle.current, + visualTransformation: VisualTransformation = VisualTransformation.None, + keyboardOptions: KeyboardOptions = KeyboardOptions.Default, + keyboardActions: KeyboardActions = KeyboardActions.Default, + singleLine: Boolean = false, + maxLines: Int = Int.MAX_VALUE, + interactionSource: MutableInteractionSource = remember { MutableInteractionSource() }, + clearButton: Boolean = true, + leading: (@Composable RowScope.() -> Unit)? = null, + trailing: (@Composable RowScope.() -> Unit)? = null, + content: (@Composable ColumnScope.() -> Unit)? = null, +) { + val enabled = value.onChange != null + + val isError = value.error != null + var hasFocus by remember { + mutableStateOf(false) + } + + val fieldFocusRequester = remember { + FocusRequester2() + } + + FlatTextFieldSurface( + modifier = modifier + .onFocusChanged { state -> + hasFocus = state.hasFocus + }, + isError = isError, + isFocused = hasFocus, + ) { + Column { + Row( + modifier = Modifier + .padding( + start = 16.dp, + end = 8.dp, + top = 8.dp, + bottom = 8.dp, + ), + verticalAlignment = Alignment.CenterVertically, + ) { + val disabledAlphaTarget = if (value.onChange != null) 1f else DisabledEmphasisAlpha + val disabledAlphaState = animateFloatAsState(disabledAlphaTarget) + + if (leading != null) { + Row( + modifier = Modifier + .graphicsLayer { + alpha = disabledAlphaState.value + }, + verticalAlignment = Alignment.CenterVertically, + ) { + leading() + } + Spacer( + modifier = Modifier + .width(16.dp), + ) + } + Column( + modifier = Modifier + .weight(1f), + ) { + Box( + modifier = Modifier + .heightIn(min = 48.dp), + contentAlignment = Alignment.TopStart, + ) { + if (label != null) { + val focused = hasFocus || value.text.isNotEmpty() + + val focusedTextSize = MaterialTheme.typography.bodySmall.fontSize.value + val normalTextSize = LocalTextStyle.current.fontSize.value + val textSize by animateFloatAsState( + targetValue = if (focused) focusedTextSize else normalTextSize, + ) + + val focusedTextColor = when { + isError -> MaterialTheme.colorScheme.error + hasFocus -> MaterialTheme.colorScheme.primary + else -> LocalContentColor.current + } + val normalTextColor = LocalContentColor.current + .combineAlpha(HighEmphasisAlpha) + val textColor by animateColorAsState( + targetValue = if (focused) focusedTextColor else normalTextColor, + ) + + val padding by animateDpAsState( + targetValue = if (focused) 28.dp else 0.dp, + ) + + Box( + modifier = Modifier + .heightIn(min = 48.dp) + .graphicsLayer { + alpha = disabledAlphaState.value + }, + contentAlignment = Alignment.CenterStart, + ) { + Text( + modifier = Modifier + .fillMaxWidth() + .padding(bottom = padding), + text = label, + fontSize = textSize.sp, + maxLines = 1, + color = textColor, + ) + } + } + val focused = (hasFocus || value.text.isNotEmpty()) && label != null + val padding by animateDpAsState( + targetValue = if (focused) 20.dp else 0.dp, + ) + + val finalPlaceholder = placeholder ?: value.hint + PlainTextField( + modifier = fieldModifier + .fillMaxWidth() + .focusRequester2(fieldFocusRequester) + .heightIn(min = 48.dp), + boxModifier = boxModifier + .padding(top = padding), + placeholder = if (finalPlaceholder != null) { + // composable + { + val ff by animateFloatAsState( + targetValue = if (focused || label == null) 1f else 0f, + ) + Text( + modifier = Modifier + .alpha(ff), + text = finalPlaceholder, + maxLines = 1, + ) + } + } else { + null + }, + textStyle = textStyle, + visualTransformation = visualTransformation, + keyboardOptions = keyboardOptions, + keyboardActions = keyboardActions, + singleLine = singleLine, + maxLines = maxLines, + value = value.state.value, + testTag = testTag, + enabled = enabled, + isError = value.error != null, + interactionSource = interactionSource, + onValueChange = { + value.onChange?.invoke(it) + }, + ) + } + Column( + modifier = Modifier + .padding( + end = 8.dp, + ), + ) { + ExpandedIfNotEmpty( + valueOrNull = value.error ?: value.vl, + ) { + val error = it as? String + val badge = it as? TextFieldModel2.Vl + FlatTextFieldBadgeLegacy( + error = error, + badge = badge, + ) + } + if (content != null) { + content() + } + } + } + if (trailing != null) { + Spacer( + modifier = Modifier + .width(8.dp), + ) + Row( + modifier = Modifier + .graphicsLayer { + alpha = disabledAlphaState.value + }, + verticalAlignment = Alignment.CenterVertically, + ) { + trailing() + } + } + val isNotEmpty = value.state.value.isNotEmpty() + ExpandedIfNotEmptyForRow( + valueOrNull = Unit.takeIf { isNotEmpty && hasFocus && clearButton }, + ) { + Row( + verticalAlignment = Alignment.CenterVertically, + ) { + Spacer( + modifier = Modifier + .width(8.dp), + ) + VerticalDivider( + modifier = Modifier + .height(24.dp), + ) + Spacer( + modifier = Modifier + .width(8.dp), + ) + IconButton( + enabled = value.onChange != null, + onClick = { + value.onChange?.invoke("") + // After clearing the text field we want to focus + // it, so the focus doesn't get reset to start of + // the page. + fieldFocusRequester.requestFocus() + }, + ) { + Icon( + imageVector = Icons.Outlined.Clear, + contentDescription = null, + ) + } + } + } + } + + val optionsText = rememberUpdatedState(value.text) + val optionsList = rememberUpdatedState(value.autocompleteOptions) + val options by remember { + val valueFlow = snapshotFlow { optionsText.value } + .debounce(80L) + .distinctUntilChanged() + val optionsFlow = snapshotFlow { optionsList.value } + combine( + valueFlow, + optionsFlow, + ) { v, options -> + val filteredOptions = options + .asSequence() + .filter { it.contains(v, ignoreCase = true) } + .take(3) + .toImmutableList() + // If the only option is the exact match of the value, + // then we do not show any suggestion. + if (filteredOptions.size == 1) { + val option = filteredOptions.first() + if (option == v) { + return@combine persistentListOf() + } + } + + filteredOptions + } + .map { options -> + Afh( + options = options, + createdAt = Clock.System.now(), + ) + } + .flowOn(Dispatchers.Default) + }.collectAsState( + initial = Afh( + options = persistentListOf(), + createdAt = Clock.System.now(), + ), + ) + ExpandedIfNotEmpty( + Unit.takeIf { hasFocus && options.options.isNotEmpty() }, + ) { + Row( + modifier = Modifier + .fillMaxWidth() + .horizontalScroll(rememberScrollState()) + .padding( + bottom = 8.dp, + start = 8.dp, + end = 8.dp, + ), + verticalAlignment = Alignment.CenterVertically, + ) { + Spacer( + modifier = Modifier + .width(8.dp), + ) + Icon( + modifier = Modifier + .size(18.dp), + imageVector = Icons.Outlined.AutoAwesome, + contentDescription = null, + ) + Spacer( + modifier = Modifier + .width(8.dp), + ) + options.options.forEachIndexed { index, text -> + if (index > 0) { + Spacer( + modifier = Modifier + .width(8.dp), + ) + } + Box( + modifier = Modifier + .heightIn(min = 32.dp) + .clip(MaterialTheme.shapes.small) + .border(Dp.Hairline, DividerColor, MaterialTheme.shapes.small) + .clickable { + value.onChange?.invoke(text) + } + .padding( + horizontal = 8.dp, + vertical = 4.dp, + ), + contentAlignment = Alignment.Center, + ) { + Text( + text = text, + maxLines = 1, + overflow = TextOverflow.Ellipsis, + style = MaterialTheme.typography.labelLarge, + ) + } + } + } + } + } + } +} + +private data class Afh( + val options: ImmutableList, + val createdAt: Instant, +) + +@Composable +fun PlainTextField( + value: String, + onValueChange: (String) -> Unit, + modifier: Modifier = Modifier, + boxModifier: Modifier = Modifier, + testTag: String? = null, + enabled: Boolean = true, + readOnly: Boolean = false, + textStyle: TextStyle = LocalTextStyle.current, + placeholder: @Composable (() -> Unit)? = null, + isError: Boolean = false, + visualTransformation: VisualTransformation = VisualTransformation.None, + keyboardOptions: KeyboardOptions = KeyboardOptions.Default, + keyboardActions: KeyboardActions = KeyboardActions.Default, + singleLine: Boolean = false, + maxLines: Int = Int.MAX_VALUE, + interactionSource: MutableInteractionSource = remember { MutableInteractionSource() }, +) { + // If color is not provided via the text style, use content color as a default + val textColor = run { + val color = contentColorFor(backgroundColor = MaterialTheme.colorScheme.background) + val alpha = if (enabled) DefaultEmphasisAlpha else DisabledEmphasisAlpha + color.copy(alpha = alpha) + } + val mergedTextStyle = textStyle.merge(TextStyle(color = textColor)) + val cursorBrushColor = + if (isError) MaterialTheme.colorScheme.error else MaterialTheme.colorScheme.primary + + BasicTextField( + value = value, + modifier = modifier + .then( + if (testTag != null) { + Modifier.testTag(testTag) + } else { + Modifier + }, + ) + .defaultMinSize( + minWidth = TextFieldDefaults.MinWidth, + ) + .bringIntoView(), + onValueChange = onValueChange, + enabled = enabled, + readOnly = readOnly, + textStyle = mergedTextStyle, + cursorBrush = SolidColor(cursorBrushColor), + visualTransformation = visualTransformation, + keyboardOptions = keyboardOptions, + keyboardActions = keyboardActions, + interactionSource = interactionSource, + singleLine = singleLine, + maxLines = maxLines, + decorationBox = @Composable { innerTextField -> + PlainTextFieldDecorationBox( + modifier = boxModifier, + value = value, + innerTextField = innerTextField, + placeholder = placeholder, + visualTransformation = visualTransformation, + interactionSource = interactionSource, + ) + }, + ) +} + +@Composable +fun PlainTextField( + value: TextFieldValue, + onValueChange: (TextFieldValue) -> Unit, + modifier: Modifier = Modifier, + boxModifier: Modifier = Modifier, + enabled: Boolean = true, + readOnly: Boolean = false, + textStyle: TextStyle = LocalTextStyle.current, + placeholder: @Composable (() -> Unit)? = null, + isError: Boolean = false, + visualTransformation: VisualTransformation = VisualTransformation.None, + keyboardOptions: KeyboardOptions = KeyboardOptions.Default, + keyboardActions: KeyboardActions = KeyboardActions.Default, + singleLine: Boolean = false, + maxLines: Int = Int.MAX_VALUE, + interactionSource: MutableInteractionSource = remember { MutableInteractionSource() }, +) { + // If color is not provided via the text style, use content color as a default + val textColor = run { + val color = contentColorFor(backgroundColor = MaterialTheme.colorScheme.background) + val alpha = if (enabled) DefaultEmphasisAlpha else DisabledEmphasisAlpha + color.copy(alpha = alpha) + } + val mergedTextStyle = textStyle.merge(TextStyle(color = textColor)) + val cursorBrushColor = + if (isError) MaterialTheme.colorScheme.error else MaterialTheme.colorScheme.primary + + BasicTextField( + value = value, + modifier = modifier + .defaultMinSize( + minWidth = TextFieldDefaults.MinWidth, + ) + .bringIntoView(), + onValueChange = onValueChange, + enabled = enabled, + readOnly = readOnly, + textStyle = mergedTextStyle, + cursorBrush = SolidColor(cursorBrushColor), + visualTransformation = visualTransformation, + keyboardOptions = keyboardOptions, + keyboardActions = keyboardActions, + interactionSource = interactionSource, + singleLine = singleLine, + maxLines = maxLines, + decorationBox = @Composable { innerTextField -> + PlainTextFieldDecorationBox( + modifier = boxModifier, + value = value.text, + innerTextField = innerTextField, + placeholder = placeholder, + visualTransformation = visualTransformation, + interactionSource = interactionSource, + ) + }, + ) +} + +@Composable +private fun PlainTextFieldDecorationBox( + modifier: Modifier, + value: String, + innerTextField: @Composable () -> Unit, + placeholder: @Composable (() -> Unit)? = null, + visualTransformation: VisualTransformation = VisualTransformation.None, + interactionSource: MutableInteractionSource = remember { MutableInteractionSource() }, +) { + val transformedText = remember(value, visualTransformation) { + visualTransformation.filter(AnnotatedString(value)) + }.text.text + + val isFocused = interactionSource.collectIsFocusedAsState().value + val inputState = when { + isFocused -> InputPhase.Focused + transformedText.isEmpty() -> InputPhase.UnfocusedEmpty + else -> InputPhase.UnfocusedNotEmpty + } + // Transitions from/to InputPhase.Focused are the most critical in the transition below. + // UnfocusedEmpty <-> UnfocusedNotEmpty are needed when a single state is used to control + // multiple text fields. + val transition = updateTransition(inputState, label = "TextFieldInputState") + + val placeholderOpacity by transition.animateFloat( + label = "PlaceholderOpacity", + transitionSpec = { + if (InputPhase.Focused isTransitioningTo InputPhase.UnfocusedEmpty) { + tween( + durationMillis = PlaceholderAnimationDelayOrDuration, + easing = LinearEasing, + ) + } else if (InputPhase.UnfocusedEmpty isTransitioningTo InputPhase.Focused || + InputPhase.UnfocusedNotEmpty isTransitioningTo InputPhase.UnfocusedEmpty + ) { + tween( + durationMillis = PlaceholderAnimationDuration, + delayMillis = PlaceholderAnimationDelayOrDuration, + easing = LinearEasing, + ) + } else { + spring() + } + }, + ) { + val showLabel = false // we do not support displaying a label + when (it) { + InputPhase.Focused -> 1f + InputPhase.UnfocusedEmpty -> if (showLabel) 0f else 1f + InputPhase.UnfocusedNotEmpty -> 0f + } + } + + val decoratedPlaceholder: @Composable ((Modifier) -> Unit)? = + if (placeholder != null && transformedText.isEmpty()) { + @Composable { modifier -> + Box( + modifier = modifier + .alpha(placeholderOpacity), + ) { + Decoration( + contentColor = MaterialTheme.colorScheme.onSurfaceVariant + .combineAlpha(HighEmphasisAlpha), + typography = MaterialTheme.typography.bodyLarge, + content = placeholder, + ) + } + } + } else { + null + } + + Box( + modifier = modifier, + contentAlignment = Alignment.CenterStart, + ) { + if (decoratedPlaceholder != null) { + decoratedPlaceholder( + Modifier, + ) + } + Box( + propagateMinConstraints = true, + ) { + innerTextField() + } + } +} + +/** + * Set content color, typography and emphasis for [content] composable + */ +@Composable +private fun Decoration( + contentColor: Color, + typography: TextStyle? = null, + content: @Composable () -> Unit, +) { + val contentWithColor: @Composable () -> Unit = @Composable { + CompositionLocalProvider( + LocalContentColor provides contentColor, + content = content, + ) + } + if (typography != null) ProvideTextStyle(typography, contentWithColor) else contentWithColor() +} + +/** + * An internal state used to animate a label and an indicator. + */ +private enum class InputPhase { + // Text field is focused + Focused, + + // Text field is not focused and input text is empty + UnfocusedEmpty, + + // Text field is not focused but input text is not empty + UnfocusedNotEmpty, +} + +private const val PlaceholderAnimationDuration = 83 +private const val PlaceholderAnimationDelayOrDuration = 67 + +val BiFlatValueHeightMin = 32.dp + +@Composable +fun BiFlatTextField( + modifier: Modifier = Modifier, + label: TextFieldModel2, + value: TextFieldModel2, + valueVisualTransformation: VisualTransformation = VisualTransformation.None, + trailing: (@Composable RowScope.() -> Unit)? = null, +) { + val labelInteractionSource = remember { MutableInteractionSource() } + val valueInteractionSource = remember { MutableInteractionSource() } + + val isError = remember( + value.error, + label.error, + ) { + derivedStateOf { + value.error != null || label.error != null + } + } + val hasFocusState = remember { + mutableStateOf(false) + } + + val isEmpty = remember( + value.state, + label.state, + ) { + derivedStateOf { + value.state.value.isBlank() || label.state.value.isBlank() + } + } + + BiFlatContainer( + modifier = modifier + .onFocusChanged { state -> + hasFocusState.value = state.hasFocus + }, + isError = isError, + isFocused = hasFocusState, + isEmpty = isEmpty, + label = { + BiFlatTextFieldLabel( + label = label, + interactionSource = labelInteractionSource, + ) + }, + content = { + BiFlatTextFieldValue( + value = value, + interactionSource = valueInteractionSource, + visualTransformation = valueVisualTransformation, + ) + }, + trailing = trailing, + ) +} + +@Composable +fun ColumnScope.BiFlatTextFieldLabel( + label: TextFieldModel2, + interactionSource: MutableInteractionSource = remember { MutableInteractionSource() }, +) { + ProvideTextStyle(value = MaterialTheme.typography.bodySmall) { + PlainTextField( + modifier = Modifier + .fillMaxWidth() + .heightIn(min = 24.dp) + .alpha(HighEmphasisAlpha), + placeholder = if (label.hint != null) { + // composable + { + Text( + text = label.hint, + style = MaterialTheme.typography.bodySmall, + maxLines = 1, + ) + } + } else { + null + }, + value = label.state.value, + enabled = label.onChange != null, + isError = label.error != null, + interactionSource = interactionSource, + onValueChange = { + label.onChange?.invoke(it) + }, + ) + } + ExpandedIfNotEmpty( + valueOrNull = label.error, + ) { error -> + FlatTextFieldBadgeLegacy( + error = error, + ) + } +} + +@Composable +fun ColumnScope.BiFlatTextFieldValue( + value: TextFieldModel2, + interactionSource: MutableInteractionSource = remember { MutableInteractionSource() }, + visualTransformation: VisualTransformation = VisualTransformation.None, +) { + PlainTextField( + modifier = Modifier + .fillMaxWidth() + .heightIn(min = BiFlatValueHeightMin), + placeholder = if (value.hint != null) { + // composable + { + Text( + text = value.hint, + maxLines = 1, + ) + } + } else { + null + }, + visualTransformation = visualTransformation, + value = value.state.value, + enabled = value.onChange != null, + isError = value.error != null, + interactionSource = interactionSource, + onValueChange = { + value.onChange?.invoke(it) + }, + ) + ExpandedIfNotEmpty( + valueOrNull = value.error, + ) { error -> + FlatTextFieldBadgeLegacy( + error = error, + ) + } +} + +@Composable +fun BiFlatContainer( + modifier: Modifier = Modifier, + contentModifier: Modifier = Modifier, + isError: State, + isFocused: State, + isEmpty: State, + label: @Composable ColumnScope.() -> Unit, + content: @Composable ColumnScope.() -> Unit, + trailing: (@Composable RowScope.() -> Unit)? = null, +) { + FlatTextFieldSurface( + modifier = modifier, + isError = isError.value, + isFocused = isFocused.value, + ) { + Row( + modifier = contentModifier + .padding( + start = 16.dp, + end = 8.dp, + top = 8.dp, + bottom = 8.dp, + ), + verticalAlignment = Alignment.CenterVertically, + ) { + Column( + modifier = Modifier + .weight(1f) + .heightIn(min = 48.dp), + verticalArrangement = Arrangement.Center, + ) { + label() + + // Divider that pops up if we need to highlight that there are + // two fields a user can edit. + Box { + val showDivider by remember( + isError, + isFocused, + isEmpty, + ) { + derivedStateOf { + isError.value || isFocused.value || isEmpty.value + } + } + + val padding by kotlin.run { + val target = if (showDivider) 8.dp else 0.dp + animateDpAsState(targetValue = target) + } + val alpha by kotlin.run { + val target = if (showDivider) 1f else 0f + animateFloatAsState(targetValue = target) + } + HorizontalDivider( + modifier = Modifier + .padding(vertical = padding) + .alpha(alpha = alpha), + ) + } + + content() + } + if (trailing != null) { + Spacer( + modifier = Modifier + .width(8.dp), + ) + trailing() + } + } + } +} + +@Composable +private fun FlatTextFieldSurface( + modifier: Modifier = Modifier, + isError: Boolean, + isFocused: Boolean, + content: @Composable () -> Unit, +) { + val borderColorTargetBaseColor = when { + isError -> MaterialTheme.colorScheme.error + else -> MaterialTheme.colorScheme.primary + } + val borderColorTarget = when { + isError || isFocused -> borderColorTargetBaseColor + else -> + borderColorTargetBaseColor + .combineAlpha(0f) + } + val borderColor by animateColorAsState(targetValue = borderColorTarget) + val shape = MaterialTheme.shapes.large + Surface( + modifier = modifier + .fillMaxWidth() + .border(1.dp, borderColor, shape), + shape = shape, + color = MaterialTheme.colorScheme.surfaceVariant, + ) { + content() + } +} + +@Composable +fun FlatTextFieldBadgeLegacy( + modifier: Modifier = Modifier, + badge: TextFieldModel2.Vl? = null, + error: String? = null, +) { + val type = when { + error != null -> TextFieldModel2.Vl.Type.ERROR + badge != null -> badge.type + else -> TextFieldModel2.Vl.Type.ERROR + } + FlatTextFieldBadge( + modifier = modifier, + type = type, + text = error ?: badge?.text ?: "", + ) +} + +@Composable +fun FlatTextFieldBadge( + modifier: Modifier = Modifier, + type: TextFieldModel2.Vl.Type, + text: String, +) { + val icon = null + val color = when (type) { + TextFieldModel2.Vl.Type.SUCCESS -> MaterialTheme.colorScheme.okContainer + TextFieldModel2.Vl.Type.INFO -> MaterialTheme.colorScheme.infoContainer + TextFieldModel2.Vl.Type.WARNING -> MaterialTheme.colorScheme.warningContainer + TextFieldModel2.Vl.Type.ERROR -> MaterialTheme.colorScheme.errorContainer + } + FlatTextFieldBadge( + modifier = modifier + .padding( + top = 8.dp, + bottom = 8.dp, + ), + backgroundColor = color, + text = text, + icon = icon, + ) +} + +@Composable +fun FlatTextFieldBadge( + modifier: Modifier = Modifier, + backgroundColor: Color, + text: String, + icon: ImageVector? = null, +) { + val backgroundColorState = animateColorAsState(backgroundColor) + val contentColor = run { + val color = if (backgroundColor.luminance() > 0.5f) { + Color.Black + } else { + Color.White + } + val tint = backgroundColor.copy(alpha = 0.1f) + tint.compositeOver(color) + } + val contentColorState = animateColorAsState(contentColor) + Row( + modifier = modifier + .clip(MaterialTheme.shapes.small) + .drawBehind { + val color = backgroundColorState.value + drawRect(color) + } + .padding( + top = 4.dp, + bottom = 4.dp, + start = 8.dp, + end = 8.dp, + ), + verticalAlignment = Alignment.CenterVertically, + ) { + ExpandedIfNotEmptyForRow( + valueOrNull = icon, + ) { + Icon( + modifier = Modifier + .padding(end = 4.dp) + .size(14.dp), + imageVector = it, + contentDescription = null, + tint = contentColorState.value, + ) + } + Text( + modifier = Modifier + .animateContentSize(), + text = text, + color = contentColorState.value, + style = MaterialTheme.typography.labelSmall, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/ToastComposable.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/ToastComposable.kt new file mode 100644 index 00000000..7ac33f56 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/ToastComposable.kt @@ -0,0 +1,283 @@ +package com.artemchep.keyguard.ui + +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.animation.ExperimentalAnimationApi +import androidx.compose.animation.core.MutableTransitionState +import androidx.compose.animation.expandIn +import androidx.compose.animation.fadeIn +import androidx.compose.animation.fadeOut +import androidx.compose.animation.scaleIn +import androidx.compose.animation.scaleOut +import androidx.compose.animation.shrinkOut +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.CheckCircle +import androidx.compose.material.icons.outlined.ErrorOutline +import androidx.compose.material.icons.outlined.Info +import androidx.compose.material3.Icon +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.* +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.unit.IntSize +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.common.model.ToastMessage +import com.artemchep.keyguard.common.usecase.MessageHub +import com.artemchep.keyguard.feature.navigation.navigationNodeStack +import com.artemchep.keyguard.ui.theme.combineAlpha +import com.artemchep.keyguard.ui.theme.ok +import com.artemchep.keyguard.ui.theme.okContainer +import com.artemchep.keyguard.ui.theme.onOkContainer +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.Job +import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.update +import kotlinx.coroutines.launch +import org.kodein.di.compose.rememberInstance + +@Composable +fun ToastMessageHost( + modifier: Modifier = Modifier, +) { + data class Drawable( + val key: String, + val content: @Composable () -> Unit, + /** + * A callback that gets fired when a drawable gets + * disposed. + */ + val onDisposed: () -> Unit, + ) { + private val visibleState = MutableTransitionState(false) + + // By default automatically expand the content + // to visible state. + init { + visibleState.targetState = true + } + + var isDisposed = false + set(value) { + field = value + // notify the observer + if (!value) onDisposed + } + + fun dispose() { + visibleState.targetState = false + } + + @Composable + fun Content() { + AnimatedVisibility( + visibleState = visibleState, + enter = fadeIn() + + scaleIn() + + expandIn(initialSize = { IntSize(it.width, 0) }), + exit = fadeOut() + + scaleOut() + + shrinkOut(targetSize = { IntSize(it.width, 0) }), + ) { + content() + } + + val shouldBeDisposed = !isDisposed && + // both current and target state are equal to 'false' + !(visibleState.targetState || visibleState.currentState) && + // the transition is complete + !visibleState.isIdle + LaunchedEffect(shouldBeDisposed) { + if (shouldBeDisposed) isDisposed = true + } + } + } + + data class Msg( + val drawable: Drawable, + /** + * A job that removes the message from a + * state after a delay. + */ + val cancellationJob: Job, + ) + + val messagesState = remember { + val initialState = listOf() + MutableStateFlow(initialState) + } + + val hub by rememberInstance() + val nav = navigationNodeStack() + val scope = rememberCoroutineScope() + DisposableEffect(hub, scope) { + val unregister = hub.register(nav) { message -> + messagesState.update { existingMessages -> + val out = existingMessages.toMutableList() + val index = + out.indexOfFirst { it.cancellationJob.isActive && it.drawable.key == message.id } + if (index != -1) { + // Stop cancellation job as it will be replaced + out[index].cancellationJob.cancel() + } + + val cancellationJob = scope.launch(Dispatchers.Main) { + val duration = message.duration + delay(duration) + // Delete a message + messagesState.value.forEach { item -> + if (item.drawable.key != message.id) { + return@forEach + } + + item.drawable.dispose() + } + } + val model = Msg( + drawable = Drawable( + key = message.id, + content = { + ToastMessage(message) + }, + onDisposed = { + messagesState.update { l -> + l.toMutableList() + .apply { removeIf { it.drawable.key == message.id } } + } + }, + ), + cancellationJob = cancellationJob, + ) + // Insert the message into a global list + if (index != -1) { + out[index] = model + } else { + out.add(0, model) + } + out + } + } + onDispose { + unregister.invoke() + } + } + + val messages by messagesState.collectAsState() + Column( + modifier = modifier + .padding( + start = 8.dp, + end = 8.dp, + bottom = 48.dp, + ) + .fillMaxWidth(), + verticalArrangement = Arrangement.spacedBy(4.dp), + horizontalAlignment = Alignment.CenterHorizontally, + ) { + messages.forEach { item -> + key(item.drawable.key) { + item.drawable.Content() + } + } + } +} + +@Composable +private fun ToastMessage(model: ToastMessage) { + val containerColor = when (model.type) { + ToastMessage.Type.ERROR -> MaterialTheme.colorScheme.errorContainer + ToastMessage.Type.SUCCESS -> MaterialTheme.colorScheme.okContainer + else -> MaterialTheme.colorScheme.surfaceVariant + } + val contentColor = when (model.type) { + ToastMessage.Type.ERROR -> MaterialTheme.colorScheme.onErrorContainer + ToastMessage.Type.SUCCESS -> MaterialTheme.colorScheme.onOkContainer + else -> MaterialTheme.colorScheme.onSurfaceVariant + } + val contentIconColor = when (model.type) { + ToastMessage.Type.ERROR -> MaterialTheme.colorScheme.error + ToastMessage.Type.SUCCESS -> MaterialTheme.colorScheme.ok + else -> contentColor + } + val contentIcon = when (model.type) { + ToastMessage.Type.ERROR -> Icons.Outlined.ErrorOutline + ToastMessage.Type.SUCCESS -> Icons.Outlined.CheckCircle + ToastMessage.Type.INFO -> Icons.Outlined.Info + else -> Icons.Outlined.Info + } + + CompositionLocalProvider( + LocalContentColor provides contentColor, + ) { + Row( + modifier = Modifier + .fillMaxWidth() + .clip(CircleShape) + .background(containerColor) + .padding( + horizontal = 8.dp, + vertical = 8.dp, + ), + verticalAlignment = Alignment.CenterVertically, + ) { + Icon( + modifier = Modifier + .size(32.dp) + .padding(4.dp), + imageVector = contentIcon, + contentDescription = null, + tint = contentIconColor, + ) + Spacer( + modifier = Modifier + .width(12.dp), + ) + Column( + modifier = Modifier + .weight(1f), + ) { + Text( + style = MaterialTheme.typography.titleSmall, + text = model.title, + maxLines = 8, + ) + if (model.text != null) { + Text( + style = MaterialTheme.typography.labelSmall, + color = LocalContentColor.current + .combineAlpha(alpha = MediumEmphasisAlpha), + maxLines = 1, + overflow = TextOverflow.Ellipsis, + text = model.text, + ) + } + } + Spacer( + modifier = Modifier + .width(8.dp), + ) + } + } +} + +private const val MSG_ERROR_DURATION = 4500L +private const val MSG_NORMAL_DURATION = 2500L + +private val ToastMessage.duration + get() = when (type) { + ToastMessage.Type.ERROR -> MSG_ERROR_DURATION + else -> MSG_NORMAL_DURATION + } diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/button/FavouriteToggleButton.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/button/FavouriteToggleButton.kt new file mode 100644 index 00000000..47e46f95 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/button/FavouriteToggleButton.kt @@ -0,0 +1,79 @@ +package com.artemchep.keyguard.ui.button + +import androidx.compose.animation.AnimatedContent +import androidx.compose.animation.animateColorAsState +import androidx.compose.animation.scaleIn +import androidx.compose.animation.scaleOut +import androidx.compose.animation.slideInVertically +import androidx.compose.animation.slideOutVertically +import androidx.compose.animation.togetherWith +import androidx.compose.material.icons.Icons +import androidx.compose.material3.Icon +import androidx.compose.material3.IconToggleButton +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.runtime.Composable +import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.Modifier +import com.artemchep.keyguard.ui.icons.KeyguardFavourite +import com.artemchep.keyguard.ui.icons.KeyguardFavouriteOutline +import com.artemchep.keyguard.ui.theme.combineAlpha + +@Composable +fun FavouriteToggleButton( + modifier: Modifier = Modifier, + favorite: Boolean, + onChange: ((Boolean) -> Unit)?, +) { + val updatedOnChange by rememberUpdatedState(onChange) + val enabled by remember { + derivedStateOf { + updatedOnChange != null + } + } + IconToggleButton( + modifier = modifier, + checked = favorite, + onCheckedChange = { + updatedOnChange?.invoke(it) + }, + enabled = enabled, + ) { + val contentColor = LocalContentColor.current + val tint by animateColorAsState( + if (favorite) { + MaterialTheme.colorScheme.primary + .combineAlpha(contentColor.alpha) + } else { + contentColor + }, + ) + AnimatedContent( + targetState = favorite, + transitionSpec = { + val currentFavorite = this.targetState + val enter = slideInVertically { + if (currentFavorite) -it else it + } + scaleIn() + val exit = slideOutVertically { + if (currentFavorite) it else -it + } + scaleOut() + enter togetherWith exit + }, + ) { currentFavorite -> + val vector = if (currentFavorite) { + Icons.Outlined.KeyguardFavourite + } else { + Icons.Outlined.KeyguardFavouriteOutline + } + Icon( + imageVector = vector, + contentDescription = null, + tint = tint, + ) + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/focus/BringIntoView.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/focus/BringIntoView.kt new file mode 100644 index 00000000..69eba871 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/focus/BringIntoView.kt @@ -0,0 +1,34 @@ +package com.artemchep.keyguard.ui.focus + +import androidx.compose.foundation.ExperimentalFoundationApi +import androidx.compose.foundation.relocation.BringIntoViewRequester +import androidx.compose.foundation.relocation.bringIntoViewRequester +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.ui.Modifier +import androidx.compose.ui.composed +import androidx.compose.ui.focus.onFocusEvent +import kotlinx.coroutines.launch + +@OptIn(ExperimentalFoundationApi::class) +fun Modifier.bringIntoView() = this + .composed { + val wasFocusedState = remember { mutableStateOf(false) } + val bringIntoViewRequester = remember { BringIntoViewRequester() } + val coroutineScope = rememberCoroutineScope() + this + .bringIntoViewRequester(bringIntoViewRequester) + .onFocusEvent { focusState -> + val isFocused = focusState.hasFocus + val wasFocused = wasFocusedState.value + if (wasFocused != isFocused) { + wasFocusedState.value = isFocused + if (isFocused) { + coroutineScope.launch { + bringIntoViewRequester.bringIntoView() + } + } + } + } + } diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/focus/FocusRequester.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/focus/FocusRequester.kt new file mode 100644 index 00000000..8bc0e79a --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/focus/FocusRequester.kt @@ -0,0 +1,64 @@ +package com.artemchep.keyguard.ui.focus + +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.ui.ExperimentalComposeUiApi +import androidx.compose.ui.Modifier +import androidx.compose.ui.composed +import androidx.compose.ui.focus.FocusRequester +import androidx.compose.ui.focus.FocusState +import androidx.compose.ui.focus.focusRequester +import androidx.compose.ui.focus.onFocusChanged +import androidx.compose.ui.platform.LocalSoftwareKeyboardController +import com.artemchep.keyguard.common.util.flow.EventFlow +import com.artemchep.keyguard.ui.CollectedEffect +import kotlinx.coroutines.flow.Flow + +@OptIn(ExperimentalComposeUiApi::class) +fun Modifier.focusRequester2( + focusRequester2: FocusRequester2, +) = composed { + val focusedStateState = remember { + mutableStateOf(null) + } + val focusRequester = remember { + FocusRequester() + } + + val keyboard = LocalSoftwareKeyboardController.current + CollectedEffect(focusRequester2.onRequestFocusFlow) { event -> + val isFocused = focusedStateState.value?.isFocused == true + if (isFocused && event.showKeyboard) { + // We can not re-focus it again, see: + // https://stackoverflow.com/questions/74391260/jetpack-compose-requestfocus-works-only-once + keyboard?.show() + return@CollectedEffect + } + + focusRequester.requestFocus() + } + + Modifier + .onFocusChanged { state -> + focusedStateState.value = state + } + .focusRequester(focusRequester) +} + +class FocusRequester2 { + private val onRequestFocusSink = EventFlow() + + val onRequestFocusFlow: Flow get() = onRequestFocusSink + + /** + * Requests a focus on associated + * compose node. + */ + fun requestFocus( + showKeyboard: Boolean = true, + ) = onRequestFocusSink.emit(FocusEvent(showKeyboard)) +} + +class FocusEvent( + val showKeyboard: Boolean, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/getHttpCode.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/getHttpCode.kt new file mode 100644 index 00000000..d5bd7338 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/getHttpCode.kt @@ -0,0 +1,46 @@ +package com.artemchep.keyguard.ui + +import com.artemchep.keyguard.common.exception.HttpException +import com.artemchep.keyguard.core.store.bitwarden.BitwardenService +import io.ktor.http.HttpStatusCode +import java.io.IOException +import java.net.ProtocolException +import java.net.SocketTimeoutException +import java.net.UnknownHostException + +class CodeException( + val code: Int, + val description: String? = null, +) : IOException() + +fun Throwable.getHttpCode(): Int { + if (this is HttpException) { + return this.statusCode.value + } + if (this is CodeException) { + return this.code + } + if (this is UnknownHostException) { + return BitwardenService.Error.CODE_UNKNOWN_HOST + } + if (this is ProtocolException) { + return BitwardenService.Error.CODE_PROTOCOL_EXCEPTION + } + if (this is SocketTimeoutException) { + return BitwardenService.Error.CODE_UNKNOWN_HOST + } + return cause?.getHttpCode() + ?: BitwardenService.Error.CODE_UNKNOWN +} + +fun Int.canRetry(): Boolean = + this == BitwardenService.Error.CODE_UNKNOWN || + this == BitwardenService.Error.CODE_PROTOCOL_EXCEPTION || + this == BitwardenService.Error.CODE_UNKNOWN_HOST || + this == BitwardenService.Error.CODE_DECODING_FAILED || + // 400x + this == HttpStatusCode.PaymentRequired.value || + this == HttpStatusCode.ProxyAuthenticationRequired.value || + this == HttpStatusCode.RequestTimeout.value || + // 500x + this in 500..599 diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/grid/SimpleGridLayout.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/grid/SimpleGridLayout.kt new file mode 100644 index 00000000..f212d950 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/grid/SimpleGridLayout.kt @@ -0,0 +1,36 @@ +package com.artemchep.keyguard.ui.grid + +import androidx.compose.foundation.layout.BoxWithConstraints +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.ui.GridLayout +import com.artemchep.keyguard.ui.theme.Dimens +import com.artemchep.keyguard.ui.theme.horizontalPaddingHalf +import kotlin.math.roundToInt + +val preferredGridWidth = 220.dp + +@Composable +fun SimpleGridLayout( + modifier: Modifier = Modifier, + mainAxisSpacing: Dp = Dimens.horizontalPaddingHalf, + crossAxisSpacing: Dp = Dimens.horizontalPaddingHalf, + content: @Composable () -> Unit, +) { + BoxWithConstraints( + modifier = modifier, + ) { + val columns = (this@BoxWithConstraints.maxWidth / preferredGridWidth) + .roundToInt() + .coerceAtLeast(1) + GridLayout( + columns = columns, + mainAxisSpacing = mainAxisSpacing, + crossAxisSpacing = crossAxisSpacing, + content = content, + ) + } +} + diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/icons/AttachmentIcon.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/icons/AttachmentIcon.kt new file mode 100644 index 00000000..50ae7c8b --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/icons/AttachmentIcon.kt @@ -0,0 +1,159 @@ +package com.artemchep.keyguard.ui.icons + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material.icons.Icons +import androidx.compose.material3.Icon +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.Immutable +import androidx.compose.runtime.remember +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.style.TextAlign +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import com.artemchep.keyguard.common.util.hash.FNV +import com.artemchep.keyguard.feature.home.vault.component.rememberSecretAccentColor +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.theme.combineAlpha + +@Composable +fun AttachmentIcon( + uri: String? = null, + name: String, + encrypted: Boolean, +) { + val accentColors = remember(name) { + generateAccentColors(name) + } + val accentColor = rememberSecretAccentColor( + accentLight = accentColors.light, + accentDark = accentColors.dark, + ) + + val ext = remember(name) { + val a = name.indexOfLast { it == '/' } + val b = name.indexOfLast { it == '.' } + if (b != -1 && b > a && b < name.length - 1) { + return@remember name.substring(b + 1) + } + + null + } + + if (uri != null && !encrypted) { + when (ext) { + "png", + "jpg", + "jpeg", + "gif", + "bmp", + "webp", + "heic", + "heif", + -> { + // We can display a preview of a file. + AttachmentIconImpl( + modifier = Modifier + .size(24.dp) + .clip(CircleShape) + .background(accentColor), + uri = uri, + ) + return + } + } + } + + if (ext != null && ext.length in 2..3) { + Box( + modifier = Modifier + .size(24.dp) + .clip(CircleShape) + .background(accentColor), + ) { + Text( + modifier = Modifier + .align(Alignment.Center), + text = ext.uppercase(), + color = Color.Black + .combineAlpha(MediumEmphasisAlpha), + fontWeight = FontWeight.Bold, + fontSize = 9.sp, + textAlign = TextAlign.Center, + ) + } + } else { + Icon( + modifier = Modifier + .size(24.dp) + .clip(CircleShape) + .background(accentColor) + .padding(3.dp), + imageVector = Icons.Outlined.KeyguardAttachment, + contentDescription = null, + tint = Color.Black + .combineAlpha(MediumEmphasisAlpha), + ) + } +} + +@Composable +expect fun AttachmentIconImpl( + uri: String? = null, + modifier: Modifier = Modifier, +) + +@Immutable +data class AccentColors( + val light: Color, + val dark: Color, +) + +fun generateAccentColorsByAccountId( + accountId: String, +) = generateAccentColors( + seed = accountId, + saturation = 0.7f, +) + +fun generateAccentColors( + seed: String, + saturation: Float = 0.5f, +): AccentColors { + val hue = run { + val r = FNV.fnv1_32(seed).rem(60) + r.toFloat() * 6f // hue + } + return generateAccentColors( + hue = hue, + saturation = saturation, + ) +} + +fun generateAccentColors( + hue: Float, + saturation: Float = 0.5f, +): AccentColors { + val accentLight = Color.hsv( + hue = hue, + saturation = saturation, + value = 0.8f, + ) + val accentDark = Color.hsv( + hue = hue, + saturation = saturation, + value = 0.7f, + ) + return AccentColors( + light = accentLight, + dark = accentDark, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/icons/ChevronIcon.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/icons/ChevronIcon.kt new file mode 100644 index 00000000..f187a2f4 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/icons/ChevronIcon.kt @@ -0,0 +1,25 @@ +package com.artemchep.keyguard.ui.icons + +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.ChevronRight +import androidx.compose.material3.Icon +import androidx.compose.material3.LocalContentColor +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.theme.combineAlpha + +@Composable +fun ChevronIcon( + modifier: Modifier = Modifier, + tint: Color = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), +) { + Icon( + modifier = modifier, + imageVector = Icons.Outlined.ChevronRight, + contentDescription = null, + tint = tint, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/icons/DropdownIcon.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/icons/DropdownIcon.kt new file mode 100644 index 00000000..763f7ec1 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/icons/DropdownIcon.kt @@ -0,0 +1,32 @@ +package com.artemchep.keyguard.ui.icons + +import androidx.compose.animation.core.animateFloatAsState +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.ArrowDropDown +import androidx.compose.material3.Icon +import androidx.compose.material3.LocalContentColor +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.rotate +import androidx.compose.ui.graphics.Color +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.theme.combineAlpha + +@Composable +fun DropdownIcon( + modifier: Modifier = Modifier, + expanded: Boolean = false, + tint: Color = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), +) { + val iconRotationTarget = if (expanded) 180f else 0f + val iconRotation by animateFloatAsState(iconRotationTarget) + Icon( + modifier = modifier + .rotate(iconRotation), + imageVector = Icons.Outlined.ArrowDropDown, + contentDescription = null, + tint = tint, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/icons/EmailIcon.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/icons/EmailIcon.kt new file mode 100644 index 00000000..236b6bd3 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/icons/EmailIcon.kt @@ -0,0 +1,11 @@ +package com.artemchep.keyguard.ui.icons + +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import com.artemchep.keyguard.feature.favicon.GravatarUrl + +@Composable +expect fun EmailIcon( + modifier: Modifier = Modifier, + gravatarUrl: GravatarUrl?, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/icons/ExpandableIcon.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/icons/ExpandableIcon.kt new file mode 100644 index 00000000..eb750fae --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/icons/ExpandableIcon.kt @@ -0,0 +1,27 @@ +package com.artemchep.keyguard.ui.icons + +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.ChevronRight +import androidx.compose.material3.Icon +import androidx.compose.material3.LocalContentColor +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.rotate +import androidx.compose.ui.graphics.Color +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.theme.combineAlpha + +@Composable +fun ExpandableIcon( + modifier: Modifier = Modifier, + tint: Color = LocalContentColor.current + .combineAlpha(MediumEmphasisAlpha), +) { + Icon( + modifier = modifier + .rotate(90f), + imageVector = Icons.Outlined.ChevronRight, + contentDescription = null, + tint = tint, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/icons/IconBox.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/icons/IconBox.kt new file mode 100644 index 00000000..c7a2ee03 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/icons/IconBox.kt @@ -0,0 +1,160 @@ +package com.artemchep.keyguard.ui.icons + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material3.Icon +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.graphicsLayer +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.ui.HighEmphasisAlpha + +@Suppress("NOTHING_TO_INLINE") +inline fun icon( + main: ImageVector, + secondary: ImageVector? = null, +): @Composable () -> Unit = { + IconBox( + main = main, + secondary = secondary, + ) +} + +@Suppress("NOTHING_TO_INLINE") +inline fun icon( + main: ImageVector, + secondary: ImageVector? = null, +): @Composable T.() -> Unit = { + IconBox( + main = main, + secondary = secondary, + ) +} + +@Composable +fun IconBox( + main: ImageVector, + secondary: ImageVector? = null, + secondaryBackground: @Composable () -> Color = { MaterialTheme.colorScheme.surfaceVariant }, + secondaryTint: @Composable () -> Color = { MaterialTheme.colorScheme.onSurfaceVariant }, +) { + Box { + Icon(main, null) + if (secondary != null) { + val backgroundColor = secondaryBackground() + .copy(alpha = HighEmphasisAlpha) + Box( + Modifier + .align(Alignment.BottomEnd) + .background(backgroundColor, CircleShape), + ) { + Icon( + secondary, + null, + Modifier + .padding(1.dp) + .size(12.dp), + tint = secondaryTint(), + ) + } + } + } +} + +@Composable +fun IconBox2( + main: @Composable () -> Unit, + secondary: (@Composable () -> Unit)? = null, + secondaryBackground: @Composable () -> Color = { MaterialTheme.colorScheme.surfaceVariant }, + secondaryTint: @Composable () -> Color = { MaterialTheme.colorScheme.onSurfaceVariant }, +) { + Box { + main() + if (secondary != null) { + val backgroundColor = secondaryBackground() + .copy(alpha = HighEmphasisAlpha) + Box( + Modifier + .align(Alignment.BottomEnd) + .background(backgroundColor, CircleShape), + ) { + CompositionLocalProvider( + LocalContentColor provides secondaryTint(), + ) { + Box( + Modifier + .padding(1.dp) + .size(12.dp), + ) { + secondary() + } + } + } + } + } +} + +@Suppress("NOTHING_TO_INLINE") +inline fun iconSmall( + main: ImageVector, + secondary: ImageVector? = null, +): @Composable () -> Unit = { + IconSmallBox( + main = main, + secondary = secondary, + ) +} + +@Suppress("NOTHING_TO_INLINE") +inline fun iconSmall( + main: ImageVector, + secondary: ImageVector? = null, +): @Composable T.() -> Unit = { + IconSmallBox( + main = main, + secondary = secondary, + ) +} + +@Composable +fun IconSmallBox( + main: ImageVector, + secondary: ImageVector? = null, + secondaryBackground: @Composable () -> Color = { MaterialTheme.colorScheme.surfaceVariant }, + secondaryTint: @Composable () -> Color = { MaterialTheme.colorScheme.onSurfaceVariant }, +) { + Box { + Icon(main, null) + if (secondary != null) { + val backgroundColor = secondaryBackground() + .copy(alpha = HighEmphasisAlpha) + Box( + Modifier + .align(Alignment.BottomEnd) + .graphicsLayer { + translationX = density * 4f + translationY = density * 4f + } + .background(backgroundColor, CircleShape), + ) { + Icon( + secondary, + null, + Modifier + .padding(1.dp) + .size(12.dp), + tint = secondaryTint(), + ) + } + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/icons/Icons.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/icons/Icons.kt new file mode 100644 index 00000000..212858ff --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/icons/Icons.kt @@ -0,0 +1,69 @@ +package com.artemchep.keyguard.ui.icons + +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.materialIcon +import androidx.compose.material.icons.materialPath +import androidx.compose.material.icons.outlined.AccountTree +import androidx.compose.material.icons.outlined.Attachment +import androidx.compose.material.icons.outlined.CollectionsBookmark +import androidx.compose.material.icons.outlined.Lens +import androidx.compose.material.icons.outlined.List +import androidx.compose.material.icons.outlined.Numbers +import androidx.compose.material.icons.outlined.Star +import androidx.compose.material.icons.outlined.StarBorder +import androidx.compose.material.icons.outlined.StickyNote2 +import androidx.compose.ui.graphics.vector.ImageVector +import compose.icons.FeatherIcons +import compose.icons.feathericons.Eye +import compose.icons.feathericons.Globe + +val Icons.Outlined.KeyguardWebsite + get() = FeatherIcons.Globe + +val Icons.Outlined.KeyguardView + get() = FeatherIcons.Eye + +val Icons.Outlined.KeyguardTwoFa + get() = Numbers + +val Icons.Outlined.KeyguardNote + get() = StickyNote2 + +val Icons.Outlined.KeyguardAttachment + get() = Attachment + +val Icons.Outlined.KeyguardFavourite + get() = Star + +val Icons.Outlined.KeyguardFavouriteOutline + get() = StarBorder + +val Icons.Outlined.KeyguardOrganization + get() = AccountTree + +val Icons.Outlined.KeyguardCollection + get() = CollectionsBookmark + +val Icons.Outlined.KeyguardCipher + get() = List + +val Icons.Outlined.KeyguardLargeType + get() = Lens + +val Icons.Outlined.KeyguardPremium + get() = Star + +val Icons.Stub: ImageVector + get() { + if (_stub != null) { + return _stub!! + } + _stub = materialIcon(name = "Stub") { + materialPath { + close() + } + } + return _stub!! + } + +private var _stub: ImageVector? = null diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/icons/OfflineIcon.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/icons/OfflineIcon.kt new file mode 100644 index 00000000..d054760a --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/icons/OfflineIcon.kt @@ -0,0 +1,20 @@ +package com.artemchep.keyguard.ui.icons + +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.CloudUpload +import androidx.compose.material3.Icon +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import com.artemchep.keyguard.ui.shimmer.shimmer + +@Composable +fun OfflineIcon( + modifier: Modifier = Modifier, +) { + Icon( + modifier = modifier + .shimmer(), + imageVector = Icons.Outlined.CloudUpload, + contentDescription = null, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/icons/SyncIcon.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/icons/SyncIcon.kt new file mode 100644 index 00000000..bbc2a552 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/icons/SyncIcon.kt @@ -0,0 +1,70 @@ +package com.artemchep.keyguard.ui.icons + +import androidx.compose.animation.core.Spring +import androidx.compose.animation.core.animateFloatAsState +import androidx.compose.animation.core.spring +import androidx.compose.foundation.layout.Box +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Sync +import androidx.compose.material3.Icon +import androidx.compose.runtime.Composable +import androidx.compose.runtime.SideEffect +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.rotate +import kotlin.math.absoluteValue + +@Composable +fun SyncIcon( + modifier: Modifier = Modifier, + rotating: Boolean, +) { + AnimatedRotation( + modifier = modifier, + rotating = rotating, + ) { + Icon( + imageVector = Icons.Outlined.Sync, + contentDescription = null, + ) + } +} + +@Composable +fun AnimatedRotation( + modifier: Modifier = Modifier, + rotating: Boolean, + content: @Composable () -> Unit, +) { + var lastRotation by remember { mutableStateOf(0f) } + var targetRotation by remember { mutableStateOf(0f) } + + val rotation by animateFloatAsState( + targetValue = targetRotation, + animationSpec = spring( + stiffness = Spring.StiffnessVeryLow, + ), + finishedListener = { + lastRotation = it + }, + ) + + val dr = (lastRotation - targetRotation).absoluteValue + if (dr < 0.1f && rotating) { + // Increase the target rotation for the next + // full cycle. + SideEffect { + targetRotation += 360f + } + } + + Box( + modifier = modifier + .rotate(rotation), + ) { + content() + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/icons/VisibilityIcon.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/icons/VisibilityIcon.kt new file mode 100644 index 00000000..58005566 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/icons/VisibilityIcon.kt @@ -0,0 +1,30 @@ +package com.artemchep.keyguard.ui.icons + +import androidx.compose.animation.Crossfade +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Visibility +import androidx.compose.material.icons.outlined.VisibilityOff +import androidx.compose.material3.Icon +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier + +@Composable +fun VisibilityIcon( + modifier: Modifier = Modifier, + visible: Boolean, +) { + val targetImage = if (visible) { + Icons.Outlined.Visibility + } else { + Icons.Outlined.VisibilityOff + } + Crossfade( + modifier = modifier, + targetState = targetImage, + ) { image -> + Icon( + imageVector = image, + contentDescription = null, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/items/ContextItem.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/items/ContextItem.kt new file mode 100644 index 00000000..7d0acf59 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/items/ContextItem.kt @@ -0,0 +1,3 @@ +package com.artemchep.keyguard.ui.items + + diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/items/FlatItemShimmer.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/items/FlatItemShimmer.kt new file mode 100644 index 00000000..8bf21301 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/items/FlatItemShimmer.kt @@ -0,0 +1,64 @@ +package com.artemchep.keyguard.ui.items + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.ui.Avatar +import com.artemchep.keyguard.ui.DisabledEmphasisAlpha +import com.artemchep.keyguard.ui.FlatItemLayout +import com.artemchep.keyguard.ui.shimmer.shimmer + +@Composable +fun FlatItemSkeleton( + avatar: Boolean = false, + fill: Boolean = false, + titleWidthFraction: Float = 0.45f, + textWidthFraction: Float = 0.33f, +) { + val contentColor = LocalContentColor.current.copy(alpha = DisabledEmphasisAlpha) + FlatItemLayout( + modifier = Modifier + .shimmer(), + backgroundColor = contentColor + .takeIf { fill } + ?.copy( + alpha = 0.08f, + ) + ?: Color.Unspecified, + leading = if (avatar) { + // composable + { + Avatar { + } + } + } else { + null + }, + content = { + Box( + Modifier + .height(18.dp) + .fillMaxWidth(titleWidthFraction) + .clip(MaterialTheme.shapes.medium) + .background(contentColor), + ) + Box( + Modifier + .padding(top = 4.dp) + .height(14.dp) + .fillMaxWidth(textWidthFraction) + .clip(MaterialTheme.shapes.medium) + .background(contentColor), + ) + }, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/markdown/Markdown.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/markdown/Markdown.kt new file mode 100644 index 00000000..056abf4f --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/markdown/Markdown.kt @@ -0,0 +1,30 @@ +package com.artemchep.keyguard.ui.markdown + +import androidx.compose.material3.MaterialTheme +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import com.halilibo.richtext.markdown.Markdown +import com.halilibo.richtext.ui.RichTextStyle +import com.halilibo.richtext.ui.material3.Material3RichText +import com.halilibo.richtext.ui.resolveDefaults +import com.halilibo.richtext.ui.string.RichTextStringStyle + +@Composable +fun Md( + modifier: Modifier = Modifier, + markdown: String, +) { + val richTextStyle = RichTextStyle().resolveDefaults().copy( + stringStyle = RichTextStringStyle().copy( + linkStyle = MaterialTheme.typography.bodyLarge.toSpanStyle().copy( + color = MaterialTheme.colorScheme.primary, + ), + ), + ) + Material3RichText( + modifier = modifier, + style = richTextStyle, + ) { + Markdown(markdown) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/popup.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/popup.kt new file mode 100644 index 00000000..d25a83c0 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/popup.kt @@ -0,0 +1,322 @@ +package com.artemchep.keyguard.ui + +//import androidx.compose.ui.awt.awtEventOrNull +import androidx.compose.animation.core.MutableTransitionState +import androidx.compose.animation.core.animateFloat +import androidx.compose.animation.core.tween +import androidx.compose.animation.core.updateTransition +import androidx.compose.foundation.background +import androidx.compose.foundation.gestures.detectTapGestures +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.widthIn +import androidx.compose.foundation.shape.CornerSize +import androidx.compose.material.ElevationOverlay +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Surface +import androidx.compose.runtime.Composable +import androidx.compose.runtime.Immutable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.alpha +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.TransformOrigin +import androidx.compose.ui.graphics.graphicsLayer +import androidx.compose.ui.input.pointer.pointerInput +import androidx.compose.ui.platform.LocalDensity +import androidx.compose.ui.unit.Density +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.DpOffset +import androidx.compose.ui.unit.IntOffset +import androidx.compose.ui.unit.IntRect +import androidx.compose.ui.unit.IntSize +import androidx.compose.ui.unit.LayoutDirection +import androidx.compose.ui.unit.dp +import androidx.compose.ui.window.Popup +import androidx.compose.ui.window.PopupPositionProvider +import androidx.compose.ui.window.PopupProperties + +// Menu open/close animation. +private const val InTransitionDuration = 180 +private const val OutTransitionDuration = 125 + +@Composable +fun WunderPopup( + modifier: Modifier = Modifier, + onDismissRequest: () -> Unit, + expanded: Boolean = true, + offset: DpOffset = DpOffset(0.dp, 0.dp), + content: @Composable () -> Unit, +) { + val expandedStates = remember { + MutableTransitionState(false) + } + expandedStates.targetState = expanded + if (!expandedStates.currentState && !expandedStates.targetState) { + return + } + + // Menu open/close animation. + val transition = updateTransition(expandedStates, "DropDownMenu") + val alpha by transition.animateFloat( + transitionSpec = { + if (false isTransitioningTo true) { + // Dismissed to expanded + tween(durationMillis = InTransitionDuration) + } else { + // Expanded to dismissed. + tween(durationMillis = OutTransitionDuration) + } + }, + ) { + if (it) { + // Menu is expanded. + 1f + } else { + // Menu is dismissed. + 0f + } + } + + Popup( + popupPositionProvider = object : PopupPositionProvider { + override fun calculatePosition( + anchorBounds: IntRect, + windowSize: IntSize, + layoutDirection: LayoutDirection, + popupContentSize: IntSize, + ): IntOffset = IntOffset.Zero + }, + onDismissRequest = onDismissRequest, + properties = PopupProperties( + focusable = true, + ), + //onPreviewKeyEvent = { false }, + //onKeyEvent = { + // TODO: && it.awtEventOrNull?.keyCode == KeyEvent.VK_ESCAPE + //if (it.type == KeyEventType.KeyDown) { + // onDismissRequest() + // true + //} else { + // false + //} + //}, + ) { + val scrimColor = MaterialTheme.colorScheme.scrim + .copy(alpha = 0.32f) + Box( + modifier = Modifier + .fillMaxSize() + .alpha(alpha) + .background(scrimColor) + .pointerInput(onDismissRequest) { + detectTapGestures(onPress = { onDismissRequest() }) + }, + ) + } + + // Popups on the desktop are by default embedded in the component in which + // they are defined and aligned within its bounds. But an [AlertDialog] needs + // to be aligned within the window, not the parent component, so we cannot use + // [alignment] property of [Popup] and have to use [Box] that fills all the + // available space. Also [Box] provides a dismiss request feature when clicked + // outside of the [AlertDialog] content. + val transformOriginState = remember { mutableStateOf(TransformOrigin.Center) } + val density = LocalDensity.current + // The original [DropdownMenuPositionProvider] is not yet suitable for large screen devices, + // so we need to make additional checks and adjust the position of the [DropdownMenu] to + // avoid content being cut off if the [DropdownMenu] contains too many items. + // See: https://github.com/JetBrains/compose-jb/issues/1388 + val popupPositionProvider = DesktopDropdownMenuPositionProvider( + offset, + density, + ) { parentBounds, menuBounds -> + transformOriginState.value = calculateTransformOrigin(parentBounds, menuBounds) + } + Popup( + popupPositionProvider = popupPositionProvider, + onDismissRequest = onDismissRequest, + properties = PopupProperties( + focusable = true, + ), + //onPreviewKeyEvent = { false }, + //onKeyEvent = { + // TODO: && it.awtEventOrNull?.keyCode == KeyEvent.VK_ESCAPE + //if (it.type == KeyEventType.KeyDown) { + // onDismissRequest() + // true + //} else { + // false + //} + //}, + ) { + val scale by transition.animateFloat( + transitionSpec = { + if (false isTransitioningTo true) { + // Dismissed to expanded + tween( + durationMillis = InTransitionDuration, + ) + } else { + // Expanded to dismissed. + tween( + durationMillis = OutTransitionDuration, + ) + } + }, + ) { + if (it) { + // Menu is expanded. + 1f + } else { + // Menu is dismissed. + 0.9f + } + } + val elevation = 1.dp + val maxWidth = 418.dp + Surface( + modifier = Modifier + .widthIn(max = maxWidth) + .fillMaxWidth(0.8f) + .fillMaxHeight() + .pointerInput(onDismissRequest) { + detectTapGestures( + onPress = { + // Workaround to disable clicks on Surface background + // https://github.com/JetBrains/compose-jb/issues/2581 + }, + ) + } + .graphicsLayer { + this.translationX = (1f - scale) * maxWidth.toPx() + this.alpha = alpha + transformOrigin = transformOriginState.value + }, + shape = MaterialTheme.shapes.large + .copy( + topEnd = CornerSize(0.dp), + bottomEnd = CornerSize(0.dp), + ), + tonalElevation = elevation, + shadowElevation = elevation, + ) { + Column( + modifier = Modifier + .fillMaxSize(), + ) { + content() + } + } + } +} + +@Immutable +private data class DesktopDropdownMenuPositionProvider( + val contentOffset: DpOffset, + val density: Density, + // callback + val onPositionCalculated: (IntRect, IntRect) -> Unit = { _, _ -> }, +) : PopupPositionProvider { + override fun calculatePosition( + anchorBounds: IntRect, + windowSize: IntSize, + layoutDirection: LayoutDirection, + popupContentSize: IntSize, + ): IntOffset { + // The min margin above and below the menu, relative to the screen. + val verticalMargin = with(density) { 48.dp.roundToPx() } + // The content offset specified using the dropdown offset parameter. + val contentOffsetY = with(density) { contentOffset.y.roundToPx() } + + // Compute horizontal position. + val toDisplayRight = windowSize.width - popupContentSize.width + val toDisplayLeft = 0 + val x = if (layoutDirection == LayoutDirection.Ltr) { + toDisplayRight + } else { + toDisplayLeft + } + + // Compute vertical position. + val toBottom = maxOf(anchorBounds.bottom + contentOffsetY, verticalMargin) + val toTop = anchorBounds.top - contentOffsetY - popupContentSize.height + val toCenter = anchorBounds.top - popupContentSize.height / 2 + val toDisplayBottom = windowSize.height - popupContentSize.height - verticalMargin + var y = sequenceOf(toBottom, toTop, toCenter, toDisplayBottom).firstOrNull { + it >= verticalMargin && + it + popupContentSize.height <= windowSize.height - verticalMargin + } ?: toTop + + // Desktop specific vertical position checking + val aboveAnchor = anchorBounds.top + contentOffsetY + val belowAnchor = windowSize.height - anchorBounds.bottom - contentOffsetY + + if (belowAnchor >= aboveAnchor) { + y = anchorBounds.bottom + contentOffsetY + } + + if (y + popupContentSize.height > windowSize.height) { + y = windowSize.height - popupContentSize.height + } + + y = y.coerceAtLeast(0) + + onPositionCalculated( + anchorBounds, + IntRect(x, y, x + popupContentSize.width, y + popupContentSize.height), + ) + return IntOffset(x, y) + } +} + +private fun calculateTransformOrigin( + parentBounds: IntRect, + menuBounds: IntRect, +): TransformOrigin { + val pivotX = when { + menuBounds.left >= parentBounds.right -> 0f + menuBounds.right <= parentBounds.left -> 1f + menuBounds.width == 0 -> 0f + else -> { + val intersectionCenter = + ( + kotlin.math.max(parentBounds.left, menuBounds.left) + + kotlin.math.min(parentBounds.right, menuBounds.right) + ) / 2 + (intersectionCenter - menuBounds.left).toFloat() / menuBounds.width + } + } + val pivotY = when { + menuBounds.top >= parentBounds.bottom -> 0f + menuBounds.bottom <= parentBounds.top -> 1f + menuBounds.height == 0 -> 0f + else -> { + val intersectionCenter = + ( + kotlin.math.max(parentBounds.top, menuBounds.top) + + kotlin.math.min(parentBounds.bottom, menuBounds.bottom) + ) / 2 + (intersectionCenter - menuBounds.top).toFloat() / menuBounds.height + } + } + return TransformOrigin(pivotX, pivotY) +} + +@Composable +private fun surfaceColorAtElevation( + color: Color, + elevationOverlay: ElevationOverlay?, + absoluteElevation: Dp, +): Color { + return if (color == MaterialTheme.colorScheme.surface && elevationOverlay != null) { + elevationOverlay.apply(color, absoluteElevation) + } else { + color + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/poweredby/PoweredBy.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/poweredby/PoweredBy.kt new file mode 100644 index 00000000..2aa7f90a --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/poweredby/PoweredBy.kt @@ -0,0 +1,119 @@ +package com.artemchep.keyguard.ui.poweredby + +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.material3.TextButton +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.feature.navigation.LocalNavigationController +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.DisabledEmphasisAlpha +import com.artemchep.keyguard.ui.theme.combineAlpha +import dev.icerock.moko.resources.compose.stringResource + +const val URL_JUST_DELETE_ME = "https://justdeleteme.xyz/" +const val URL_HAVE_I_BEEN_PWNED = "https://haveibeenpwned.com/" +const val URL_2FA = "https://2fa.directory/" +const val URL_PASSKEYS = "https://passkeys.directory/" + +@Composable +fun PoweredByJustDeleteMe( + modifier: Modifier = Modifier, + fill: Boolean = false, +) { + PoweredByLabel( + modifier = modifier, + domain = "JustDeleteMe", + url = URL_JUST_DELETE_ME, + fill = fill, + ) +} + +@Composable +fun PoweredByHaveibeenpwned( + modifier: Modifier = Modifier, + fill: Boolean = false, +) { + PoweredByLabel( + modifier = modifier, + domain = "HIBP", + url = URL_HAVE_I_BEEN_PWNED, + fill = fill, + ) +} + +@Composable +fun PoweredBy2factorauth( + modifier: Modifier = Modifier, + fill: Boolean = false, +) { + PoweredByLabel( + modifier = modifier, + domain = "2factorauth", + url = URL_2FA, + fill = fill, + ) +} + +@Composable +fun PoweredByPasskeys( + modifier: Modifier = Modifier, + fill: Boolean = false, +) { + PoweredByLabel( + modifier = modifier, + domain = "passkeys", + url = URL_PASSKEYS, + fill = fill, + ) +} + +@Composable +fun PoweredByLabel( + modifier: Modifier = Modifier, + domain: String, + url: String, + fill: Boolean = false, +) { + Row( + modifier = modifier, + verticalAlignment = Alignment.CenterVertically, + ) { + Text( + modifier = Modifier + .weight(1f, fill = fill) + .padding(top = 4.dp), + text = stringResource(Res.strings.powered_by), + maxLines = 2, + style = MaterialTheme.typography.labelSmall, + color = LocalContentColor.current + .combineAlpha(DisabledEmphasisAlpha), + ) + Spacer(modifier = Modifier.width(8.dp)) + val navigationController by rememberUpdatedState(LocalNavigationController.current) + val updatedUrl by rememberUpdatedState(url) + TextButton( + onClick = { + val intent = NavigationIntent.NavigateToBrowser( + url = updatedUrl, + ) + navigationController.queue(intent) + }, + ) { + Text( + text = domain, + maxLines = 1, + ) + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/pulltosearch/PullToSearch.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/pulltosearch/PullToSearch.kt new file mode 100644 index 00000000..edb0d0a8 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/pulltosearch/PullToSearch.kt @@ -0,0 +1,85 @@ +package com.artemchep.keyguard.ui.pulltosearch + +import androidx.compose.animation.animateColorAsState +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Search +import androidx.compose.material.pullrefresh.PullRefreshState +import androidx.compose.material3.Icon +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.graphicsLayer +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.DisabledEmphasisAlpha +import com.artemchep.keyguard.ui.theme.combineAlpha +import dev.icerock.moko.resources.compose.stringResource +import kotlin.math.log10 + +@Composable +fun PullToSearch( + modifier: Modifier = Modifier, + pullRefreshState: PullRefreshState, +) { + Box( + modifier = modifier + .fillMaxWidth(), + contentAlignment = Alignment.Center, + ) { + val willSearch by remember(pullRefreshState) { + derivedStateOf { + pullRefreshState.progress >= 1f + } + } + Row( + modifier = Modifier + .graphicsLayer { + val progress = + log10(pullRefreshState.progress.coerceAtLeast(0f) * 10 + 1) + alpha = progress.coerceIn(0f..1f) + val scale = progress + .coerceAtLeast(0.1f) + .coerceAtMost(1f) + scaleX = scale + scaleY = scale + // move down a bit + translationY = (progress - 1f) * 32f * density + } + .padding( + vertical = 16.dp, + horizontal = 16.dp, + ), + horizontalArrangement = Arrangement.spacedBy(8.dp), + verticalAlignment = Alignment.CenterVertically, + ) { + val tintTarget = + if (willSearch) { + MaterialTheme.colorScheme.primary + } else { + LocalContentColor.current.combineAlpha(DisabledEmphasisAlpha) + } + val tint by animateColorAsState(tintTarget) + Icon( + imageVector = Icons.Outlined.Search, + contentDescription = null, + tint = tint, + ) + Text( + text = stringResource(Res.strings.pull_to_search), + color = tint, + style = MaterialTheme.typography.bodySmall, + ) + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/rememberVectorPainter.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/rememberVectorPainter.kt new file mode 100644 index 00000000..30188c26 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/rememberVectorPainter.kt @@ -0,0 +1,30 @@ +package com.artemchep.keyguard.ui + +import androidx.compose.runtime.Composable +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.isSpecified +import androidx.compose.ui.graphics.vector.ImageVector +import androidx.compose.ui.graphics.vector.RenderVectorGroup +import androidx.compose.ui.graphics.vector.VectorPainter + +/** + * Create a [VectorPainter] with the given [ImageVector]. This will create a + * sub-composition of the vector hierarchy given the tree structure in [ImageVector] + * + * @param [image] ImageVector used to create a vector graphic sub-composition + */ +@Composable +fun rememberVectorPainterCustom( + image: ImageVector, + tintColor: Color = Color.Unspecified, +) = androidx.compose.ui.graphics.vector.rememberVectorPainter( + defaultWidth = image.defaultWidth, + defaultHeight = image.defaultHeight, + viewportWidth = image.viewportWidth, + viewportHeight = image.viewportHeight, + name = image.name, + tintColor = tintColor.takeIf { it.isSpecified } ?: image.tintColor, + tintBlendMode = image.tintBlendMode, + autoMirror = image.autoMirror, + content = { _, _ -> RenderVectorGroup(group = image.root) }, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/rightClickable.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/rightClickable.kt new file mode 100644 index 00000000..5c519161 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/rightClickable.kt @@ -0,0 +1,7 @@ +package com.artemchep.keyguard.ui + +import androidx.compose.ui.Modifier + +expect fun Modifier.rightClickable( + onClick: (() -> Unit)?, +): Modifier diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/scrollbar/ColumnScrollbar.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/scrollbar/ColumnScrollbar.kt new file mode 100644 index 00000000..6030e899 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/scrollbar/ColumnScrollbar.kt @@ -0,0 +1,283 @@ +package com.artemchep.keyguard.ui.scrollbar + +import androidx.compose.animation.core.animateFloatAsState +import androidx.compose.animation.core.tween +import androidx.compose.foundation.ScrollState +import androidx.compose.foundation.background +import androidx.compose.foundation.gestures.Orientation +import androidx.compose.foundation.gestures.draggable +import androidx.compose.foundation.gestures.rememberDraggableState +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.BoxWithConstraints +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.runtime.Composable +import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.alpha +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.Shape +import androidx.compose.ui.graphics.graphicsLayer +import androidx.compose.ui.platform.LocalDensity +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.platform.CurrentPlatform +import com.artemchep.keyguard.platform.Platform +import com.artemchep.keyguard.ui.DisabledEmphasisAlpha +import com.artemchep.keyguard.ui.theme.combineAlpha +import kotlinx.coroutines.launch + +/** + * Scrollbar for Column + * + * @param rightSide true -> right, false -> left + * @param thickness Thickness of the scrollbar thumb + * @param padding Padding of the scrollbar + * @param thumbMinHeight Thumb minimum height proportional to total scrollbar's height (eg: 0.1 -> 10% of total) + */ +@Composable +fun ColumnScrollbar( + modifier: Modifier = Modifier, + state: ScrollState, + rightSide: Boolean = true, + thickness: Dp = 6.dp, + padding: Dp = 4.dp, + thumbMinHeight: Float = 0.1f, + thumbColor: Color = LocalContentColor.current + .combineAlpha(DisabledEmphasisAlpha), + thumbSelectedColor: Color = MaterialTheme.colorScheme.primary, + thumbShape: Shape = CircleShape, + enabled: Boolean = true, + selectionMode: ScrollbarSelectionMode = ScrollbarSelectionMode.default, + indicatorContent: (@Composable (normalizedOffset: Float, isThumbSelected: Boolean) -> Unit)? = null, + contentPadding: PaddingValues, + content: @Composable () -> Unit, +) { + BoxWithConstraints( + modifier = modifier, + ) { + content() + + if (enabled) { + InternalColumnScrollbar( + state = state, + rightSide = rightSide, + thickness = thickness, + padding = padding, + thumbMinHeight = thumbMinHeight, + thumbColor = thumbColor, + thumbSelectedColor = thumbSelectedColor, + thumbShape = thumbShape, + visibleHeightDp = with(LocalDensity.current) { constraints.maxHeight.toDp() }, + indicatorContent = indicatorContent, + contentPadding = contentPadding, + selectionMode = selectionMode, + ) + } + } +} + +/** + * Scrollbar for Column + * Use this variation if you want to place the scrollbar independently of the Column position + * + * @param rightSide true -> right, false -> left + * @param thickness Thickness of the scrollbar thumb + * @param padding Padding of the scrollbar + * @param thumbMinHeight Thumb minimum height proportional to total scrollbar's height (eg: 0.1 -> 10% of total) + * @param visibleHeightDp Visible height of column view + */ +@Composable +fun InternalColumnScrollbar( + state: ScrollState, + rightSide: Boolean = true, + thickness: Dp = 6.dp, + padding: Dp = 8.dp, + thumbMinHeight: Float = 0.1f, + thumbColor: Color = Color(0xFF2A59B6), + thumbSelectedColor: Color = Color(0xFF5281CA), + thumbShape: Shape = CircleShape, + selectionMode: ScrollbarSelectionMode = ScrollbarSelectionMode.Thumb, + indicatorContent: (@Composable (normalizedOffset: Float, isThumbSelected: Boolean) -> Unit)? = null, + contentPadding: PaddingValues, + visibleHeightDp: Dp, +) { + val coroutineScope = rememberCoroutineScope() + + var isSelected by remember { mutableStateOf(false) } + + var dragOffset by remember { mutableStateOf(0f) } + + val fullHeightDp = with(LocalDensity.current) { state.maxValue.toDp() + visibleHeightDp } + + val normalizedThumbSizeReal by remember(visibleHeightDp, state.maxValue) { + derivedStateOf { + if (fullHeightDp == 0.dp) { + 1f + } else { + val normalizedDp = visibleHeightDp / fullHeightDp + normalizedDp.coerceIn(0f, 1f) + } + } + } + + val normalizedThumbSize by remember(normalizedThumbSizeReal) { + derivedStateOf { + normalizedThumbSizeReal.coerceAtLeast(thumbMinHeight) + } + } + + val normalizedThumbSizeUpdated by rememberUpdatedState(newValue = normalizedThumbSize) + + fun offsetCorrection(top: Float): Float { + val topRealMax = 1f + val topMax = (1f - normalizedThumbSizeUpdated).coerceIn(0f, 1f) + return top * topMax / topRealMax + } + + fun offsetCorrectionInverse(top: Float): Float { + val topRealMax = 1f + val topMax = 1f - normalizedThumbSizeUpdated + if (topMax == 0f) return top + return (top * topRealMax / topMax).coerceAtLeast(0f) + } + + val normalizedOffsetPosition by remember { + derivedStateOf { + if (state.maxValue == 0) return@derivedStateOf 0f + val normalized = state.value.toFloat() / state.maxValue.toFloat() + offsetCorrection(normalized) + } + } + + fun setDragOffset(value: Float) { + val maxValue = (1f - normalizedThumbSize).coerceAtLeast(0f) + dragOffset = value.coerceIn(0f, maxValue) + } + + fun setScrollOffset(newOffset: Float) { + setDragOffset(newOffset) + val exactIndex = offsetCorrectionInverse(state.maxValue * dragOffset).toInt() + coroutineScope.launch { + state.scrollTo(exactIndex) + } + } + + val isInAction = state.isScrollInProgress || isSelected + + val alpha by animateFloatAsState( + targetValue = if (isInAction) 1f else 0f, + animationSpec = tween( + durationMillis = if (isInAction) 75 else 500, + delayMillis = if (isInAction) 0 else 500, + ), + ) + + val displacement by animateFloatAsState( + targetValue = if (isInAction) 0f else 14f, + animationSpec = tween( + durationMillis = if (isInAction) 75 else 500, + delayMillis = if (isInAction) 0 else 500, + ), + ) + + BoxWithConstraints( + Modifier + .alpha(alpha) + .fillMaxWidth() + .padding(contentPadding), + ) { + if (indicatorContent != null) { + BoxWithConstraints( + Modifier + .align(if (rightSide) Alignment.TopEnd else Alignment.TopStart) + .fillMaxHeight() + .graphicsLayer { + translationX = (if (rightSide) displacement.dp else -displacement.dp).toPx() + translationY = constraints.maxHeight.toFloat() * normalizedOffsetPosition + }, + ) { + indicatorContent( + normalizedOffset = offsetCorrectionInverse(normalizedOffsetPosition), + isThumbSelected = isSelected, + ) + } + } + + BoxWithConstraints( + Modifier + .align(if (rightSide) Alignment.TopEnd else Alignment.TopStart) + .fillMaxHeight() + .draggable( + state = rememberDraggableState { delta -> + if (isSelected) { + setScrollOffset(dragOffset + delta / constraints.maxHeight.toFloat()) + } + }, + orientation = Orientation.Vertical, + enabled = selectionMode != ScrollbarSelectionMode.Disabled, + startDragImmediately = when (CurrentPlatform) { + is Platform.Desktop -> true + is Platform.Mobile -> false + }, + onDragStarted = { offset -> + val newOffset = offset.y / constraints.maxHeight.toFloat() + val currentOffset = normalizedOffsetPosition + when (selectionMode) { + ScrollbarSelectionMode.Full -> { + if (newOffset in currentOffset..(currentOffset + normalizedThumbSizeUpdated)) { + setDragOffset(currentOffset) + } else { + setScrollOffset(newOffset) + } + isSelected = true + } + + ScrollbarSelectionMode.Thumb -> { + if (newOffset in currentOffset..(currentOffset + normalizedThumbSizeUpdated)) { + setDragOffset(currentOffset) + isSelected = true + } + } + + ScrollbarSelectionMode.Disabled -> Unit + } + }, + onDragStopped = { + isSelected = false + }, + ) + .graphicsLayer { + translationX = (if (rightSide) displacement.dp else -displacement.dp).toPx() + }, + ) { + val animatedThumbSize by animateFloatAsState(normalizedThumbSize) + Box( + modifier = Modifier + .align(Alignment.TopEnd) + .graphicsLayer { + translationY = constraints.maxHeight.toFloat() * normalizedOffsetPosition + } + .padding(horizontal = padding) + .width(thickness) + .clip(thumbShape) + .background(if (isSelected) thumbSelectedColor else thumbColor) + .fillMaxHeight(animatedThumbSize), + ) + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbar.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbar.kt new file mode 100644 index 00000000..85ba52c2 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/scrollbar/LazyColumnScrollbar.kt @@ -0,0 +1,345 @@ +package com.artemchep.keyguard.ui.scrollbar + +import androidx.compose.animation.core.animateFloatAsState +import androidx.compose.animation.core.tween +import androidx.compose.foundation.background +import androidx.compose.foundation.gestures.Orientation +import androidx.compose.foundation.gestures.draggable +import androidx.compose.foundation.gestures.rememberDraggableState +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.BoxWithConstraints +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.lazy.LazyListItemInfo +import androidx.compose.foundation.lazy.LazyListState +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.runtime.Composable +import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberCoroutineScope +import androidx.compose.runtime.setValue +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.alpha +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.Shape +import androidx.compose.ui.graphics.graphicsLayer +import androidx.compose.ui.platform.LocalDensity +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.platform.CurrentPlatform +import com.artemchep.keyguard.platform.Platform +import com.artemchep.keyguard.ui.DisabledEmphasisAlpha +import com.artemchep.keyguard.ui.theme.combineAlpha +import kotlinx.coroutines.launch +import kotlin.math.floor + +/** + * Scrollbar for LazyColumn + * + * @param rightSide true -> right, false -> left + * @param thickness Thickness of the scrollbar thumb + * @param padding Padding of the scrollbar + * @param thumbMinHeight Thumb minimum height proportional to total scrollbar's height (eg: 0.1 -> 10% of total) + */ +@Composable +fun LazyColumnScrollbar( + modifier: Modifier = Modifier, + listState: LazyListState, + rightSide: Boolean = true, + thickness: Dp = 6.dp, + padding: Dp = 4.dp, + thumbMinHeight: Float = 0.1f, + thumbColor: Color = LocalContentColor.current + .combineAlpha(DisabledEmphasisAlpha), + thumbSelectedColor: Color = MaterialTheme.colorScheme.primary, + thumbShape: Shape = CircleShape, + selectionMode: ScrollbarSelectionMode = ScrollbarSelectionMode.default, + enabled: Boolean = true, + indicatorContent: (@Composable (index: Int, isThumbSelected: Boolean) -> Unit)? = null, + contentPadding: PaddingValues, + content: @Composable () -> Unit, +) { + Box( + modifier = modifier, + ) { + content() + + if (enabled) { + InternalLazyColumnScrollbar( + listState = listState, + rightSide = rightSide, + thickness = thickness, + padding = padding, + thumbMinHeight = thumbMinHeight, + thumbColor = thumbColor, + thumbSelectedColor = thumbSelectedColor, + thumbShape = thumbShape, + selectionMode = selectionMode, + indicatorContent = indicatorContent, + contentPadding = contentPadding, + ) + } + } +} + +/** + * Scrollbar for LazyColumn + * Use this variation if you want to place the scrollbar independently of the LazyColumn position + * + * @param rightSide true -> right, false -> left + * @param thickness Thickness of the scrollbar thumb + * @param padding Padding of the scrollbar + * @param thumbMinHeight Thumb minimum height proportional to total scrollbar's height (eg: 0.1 -> 10% of total) + */ +@Composable +fun InternalLazyColumnScrollbar( + listState: LazyListState, + rightSide: Boolean = true, + thickness: Dp = 6.dp, + padding: Dp = 8.dp, + thumbMinHeight: Float = 0.1f, + thumbColor: Color, + thumbSelectedColor: Color, + thumbShape: Shape = CircleShape, + selectionMode: ScrollbarSelectionMode = ScrollbarSelectionMode.Thumb, + indicatorContent: (@Composable (index: Int, isThumbSelected: Boolean) -> Unit)? = null, + contentPadding: PaddingValues, +) { + val firstVisibleItemIndex = remember { derivedStateOf { listState.firstVisibleItemIndex } } + + val coroutineScope = rememberCoroutineScope() + + var isSelected by remember { mutableStateOf(false) } + + var dragOffset by remember { mutableStateOf(0f) } + + val reverseLayout by remember { derivedStateOf { listState.layoutInfo.reverseLayout } } + + val realFirstVisibleItem by remember { + derivedStateOf { + listState.layoutInfo.visibleItemsInfo.firstOrNull { + it.index == listState.firstVisibleItemIndex + } + } + } + + val isStickyHeaderInAction by remember { + derivedStateOf { + val realIndex = realFirstVisibleItem?.index ?: return@derivedStateOf false + val firstVisibleIndex = listState.layoutInfo.visibleItemsInfo.firstOrNull()?.index + ?: return@derivedStateOf false + realIndex != firstVisibleIndex + } + } + + fun LazyListItemInfo.fractionHiddenTop() = + if (size == 0) 0f else -offset.toFloat() / size.toFloat() + + fun LazyListItemInfo.fractionVisibleBottom(viewportEndOffset: Int) = + if (size == 0) 0f else (viewportEndOffset - offset).toFloat() / size.toFloat() + + val normalizedThumbSizeReal by remember { + derivedStateOf { + listState.layoutInfo.let { + if (it.totalItemsCount == 0) { + return@let 0f + } + + val firstItem = realFirstVisibleItem ?: return@let 0f + val firstPartial = firstItem.fractionHiddenTop() + val lastPartial = + 1f - it.visibleItemsInfo.last().fractionVisibleBottom(it.viewportEndOffset) + + val realSize = it.visibleItemsInfo.size - if (isStickyHeaderInAction) 1 else 0 + val realVisibleSize = realSize.toFloat() - firstPartial - lastPartial + realVisibleSize / it.totalItemsCount.toFloat() + } + } + } + + val normalizedThumbSize by remember { + derivedStateOf { + normalizedThumbSizeReal.coerceAtLeast(thumbMinHeight) + } + } + + fun offsetCorrection(top: Float): Float { + val topRealMax = (1f - normalizedThumbSizeReal).coerceIn(0f, 1f) + if (normalizedThumbSizeReal >= thumbMinHeight) { + return when { + reverseLayout -> topRealMax - top + else -> top + } + } + + val topMax = 1f - thumbMinHeight + return when { + reverseLayout -> (topRealMax - top) * topMax / topRealMax + else -> top * topMax / topRealMax + } + } + + fun offsetCorrectionInverse(top: Float): Float { + if (normalizedThumbSizeReal >= thumbMinHeight) { + return top + } + val topRealMax = 1f - normalizedThumbSizeReal + val topMax = 1f - thumbMinHeight + return top * topRealMax / topMax + } + + val normalizedOffsetPosition by remember { + derivedStateOf { + listState.layoutInfo.let { + if (it.totalItemsCount == 0 || it.visibleItemsInfo.isEmpty()) { + return@let 0f + } + + val firstItem = realFirstVisibleItem ?: return@let 0f + val top = firstItem + .run { index.toFloat() + fractionHiddenTop() } / it.totalItemsCount.toFloat() + offsetCorrection(top) + } + } + } + + fun setDragOffset(value: Float) { + val maxValue = (1f - normalizedThumbSize).coerceAtLeast(0f) + dragOffset = value.coerceIn(0f, maxValue) + } + + fun setScrollOffset(newOffset: Float) { + setDragOffset(newOffset) + val totalItemsCount = listState.layoutInfo.totalItemsCount.toFloat() + val exactIndex = offsetCorrectionInverse(totalItemsCount * dragOffset) + val index: Int = floor(exactIndex).toInt() + val remainder: Float = exactIndex - floor(exactIndex) + + coroutineScope.launch { + listState.scrollToItem(index = index, scrollOffset = 0) + val offset = realFirstVisibleItem + ?.size + ?.let { it.toFloat() * remainder } + ?.toInt() ?: 0 + listState.scrollToItem(index = index, scrollOffset = offset) + } + } + + val isInAction = listState.isScrollInProgress || isSelected + + val alpha by animateFloatAsState( + targetValue = if (isInAction) 1f else 0f, + animationSpec = tween( + durationMillis = if (isInAction) 75 else 500, + delayMillis = if (isInAction) 0 else 500, + ), + ) + + val displacement by animateFloatAsState( + targetValue = if (isInAction) 0f else 14f, + animationSpec = tween( + durationMillis = if (isInAction) 75 else 500, + delayMillis = if (isInAction) 0 else 500, + ), + ) + + BoxWithConstraints( + Modifier + .alpha(alpha) + .fillMaxWidth() + .padding(contentPadding), + ) { + if (indicatorContent != null) { + BoxWithConstraints( + Modifier + .align(if (rightSide) Alignment.TopEnd else Alignment.TopStart) + .fillMaxHeight() + .graphicsLayer( + translationX = with(LocalDensity.current) { (if (rightSide) displacement.dp else -displacement.dp).toPx() }, + translationY = constraints.maxHeight.toFloat() * normalizedOffsetPosition, + ), + ) { + indicatorContent( + index = firstVisibleItemIndex.value, + isThumbSelected = isSelected, + ) + } + } + + BoxWithConstraints( + Modifier + .align(if (rightSide) Alignment.TopEnd else Alignment.TopStart) + .fillMaxHeight() + .draggable( + state = rememberDraggableState { delta -> + val displace = if (reverseLayout) -delta else delta // side effect ? + if (isSelected) { + setScrollOffset(dragOffset + displace / constraints.maxHeight.toFloat()) + } + }, + orientation = Orientation.Vertical, + enabled = selectionMode != ScrollbarSelectionMode.Disabled, + startDragImmediately = when (CurrentPlatform) { + is Platform.Desktop -> true + is Platform.Mobile -> false + }, + onDragStarted = onDragStarted@{ offset -> + val maxHeight = constraints.maxHeight.toFloat() + if (maxHeight <= 0f) return@onDragStarted + val newOffset = when { + reverseLayout -> (maxHeight - offset.y) / maxHeight + else -> offset.y / maxHeight + } + val currentOffset = when { + reverseLayout -> 1f - normalizedOffsetPosition - normalizedThumbSize + else -> normalizedOffsetPosition + } + when (selectionMode) { + ScrollbarSelectionMode.Full -> { + if (newOffset in currentOffset..(currentOffset + normalizedThumbSize)) { + setDragOffset(currentOffset) + } else { + setScrollOffset(newOffset) + } + isSelected = true + } + + ScrollbarSelectionMode.Thumb -> { + if (newOffset in currentOffset..(currentOffset + normalizedThumbSize)) { + setDragOffset(currentOffset) + isSelected = true + } + } + + ScrollbarSelectionMode.Disabled -> Unit + } + }, + onDragStopped = { + isSelected = false + }, + ) + .graphicsLayer(translationX = with(LocalDensity.current) { (if (rightSide) displacement.dp else -displacement.dp).toPx() }), + ) { + val animatedThumbSize by animateFloatAsState(normalizedThumbSize) + Box( + modifier = Modifier + .align(Alignment.TopEnd) + .graphicsLayer(translationY = constraints.maxHeight.toFloat() * normalizedOffsetPosition) + .padding(horizontal = padding) + .width(thickness) + .clip(thumbShape) + .background(if (isSelected) thumbSelectedColor else thumbColor) + .fillMaxHeight(animatedThumbSize), + ) + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/scrollbar/ScrollbarSelectionMode.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/scrollbar/ScrollbarSelectionMode.kt new file mode 100644 index 00000000..78001f0e --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/scrollbar/ScrollbarSelectionMode.kt @@ -0,0 +1,35 @@ +package com.artemchep.keyguard.ui.scrollbar + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.platform.CurrentPlatform +import com.artemchep.keyguard.platform.Platform + +/** + * Scrollbar selection modes. + */ +enum class ScrollbarSelectionMode { + /** + * Enable selection in the whole scrollbar and thumb + */ + Full, + + /** + * Enable selection in the thumb + */ + Thumb, + + /** + * Disable selection + */ + Disabled, + ; + + companion object { + @get:Composable + val default: ScrollbarSelectionMode + get() = when (CurrentPlatform) { + is Platform.Desktop -> Full + is Platform.Mobile -> Thumb + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/selection/SelectionBar.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/selection/SelectionBar.kt new file mode 100644 index 00000000..67725e5c --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/selection/SelectionBar.kt @@ -0,0 +1,101 @@ +package com.artemchep.keyguard.ui.selection + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.RowScope +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.foundation.layout.WindowInsetsSides +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.heightIn +import androidx.compose.foundation.layout.only +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.layout.windowInsetsPadding +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Clear +import androidx.compose.material.icons.outlined.ViewList +import androidx.compose.material3.Button +import androidx.compose.material3.Icon +import androidx.compose.material3.IconButton +import androidx.compose.material3.LocalTextStyle +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Surface +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.platform.leNavigationBars +import com.artemchep.keyguard.ui.icons.IconBox +import com.artemchep.keyguard.ui.theme.Dimens +import com.artemchep.keyguard.ui.util.HorizontalDivider + +@Composable +fun SelectionBar( + title: (@Composable RowScope.() -> Unit)? = null, + trailing: (@Composable RowScope.() -> Unit)? = null, + onClear: (() -> Unit)?, +) { + Column { + Surface( + modifier = Modifier + .fillMaxWidth(), + tonalElevation = 3.dp, + ) { + val navBarInsets = WindowInsets.leNavigationBars + .only(WindowInsetsSides.Bottom) + Row( + modifier = Modifier + .heightIn(min = 56.dp) + .windowInsetsPadding(navBarInsets), + verticalAlignment = Alignment.CenterVertically, + ) { + IconButton( + enabled = onClear != null, + onClick = { + onClear?.invoke() + }, + ) { + // TODO: Consider using Icons.Outlined.Deselect + Icon( + Icons.Outlined.Clear, + null, + ) + } + Row( + modifier = Modifier + .weight(1f), + ) { + Button( + onClick = { /*TODO*/ }, + ) { + IconBox( + main = Icons.Outlined.ViewList, + secondary = null, // Icons.Outlined.PanoramaFishEye, + ) + if (title != null) { + Spacer( + modifier = Modifier + .width(Dimens.buttonIconPadding), + ) + title.invoke(this) + } + } + val textStyle = MaterialTheme.typography.titleMedium + CompositionLocalProvider( + LocalTextStyle provides textStyle, + ) { + } + } + Spacer( + modifier = Modifier + .width(16.dp), + ) + trailing?.invoke(this) + } + } + HorizontalDivider( + transparency = false, + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/selection/SelectionUtil.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/selection/SelectionUtil.kt new file mode 100644 index 00000000..c149aae2 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/selection/SelectionUtil.kt @@ -0,0 +1,61 @@ +package com.artemchep.keyguard.ui.selection + +import com.artemchep.keyguard.feature.navigation.state.RememberStateFlowScope +import kotlinx.coroutines.flow.StateFlow +import kotlinx.coroutines.flow.map + +interface SelectionHandle { + val idsFlow: StateFlow> + + fun clearSelection() + + fun toggleSelection(itemId: String) + + fun setSelection(ids: Set) +} + +fun RememberStateFlowScope.selectionHandle( + key: String, +): SelectionHandle { + val itemIdsSink = mutablePersistedFlow(key) { + setOf() + } + + interceptBackPress( + // Intercept the back button while the + // selection set is not empty. + isEnabledFlow = itemIdsSink + .map { it.isNotEmpty() }, + ) { callback -> + val wereEmpty = itemIdsSink.value.isEmpty() + // Reset the selection on back + // button press. + itemIdsSink.value = emptySet() + + // Eat the callback if it weren't empty. + callback(wereEmpty) + } + + return object : SelectionHandle { + override val idsFlow: StateFlow> get() = itemIdsSink + + override fun clearSelection() { + itemIdsSink.value = emptySet() + } + + override fun toggleSelection(itemId: String) { + val oldItemIds = itemIdsSink.value + val newItemIds = + if (itemId in oldItemIds) { + oldItemIds - itemId + } else { + oldItemIds + itemId + } + itemIdsSink.value = newItemIds + } + + override fun setSelection(ids: Set) { + itemIdsSink.value = ids + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/shimmer/ShimmerArea.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/shimmer/ShimmerArea.kt new file mode 100644 index 00000000..9cf4a1b5 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/shimmer/ShimmerArea.kt @@ -0,0 +1,130 @@ +package com.artemchep.keyguard.ui.shimmer + +import androidx.compose.ui.geometry.Offset +import androidx.compose.ui.geometry.Rect +import androidx.compose.ui.geometry.Size +import kotlin.math.PI +import kotlin.math.abs +import kotlin.math.acos +import kotlin.math.cos +import kotlin.math.pow +import kotlin.math.sqrt + +/** + * Describes the area in which the shimmer effect will be drawn. + */ +internal class ShimmerArea( + private val widthOfShimmer: Float, + rotationInDegree: Float, +) { + + private val reducedRotation = rotationInDegree + .reduceRotation() + .toRadian() + + // = Rect.Zero -> Don't draw + // = null -> Draw into view + private var requestedShimmerBounds: Rect? = null + private var shimmerSize: Size = Size.Zero + + var translationDistance = 0f + private set + + var pivotPoint = Offset.Unspecified + private set + + var shimmerBounds = Rect.Zero + private set + + var viewBounds = Rect.Zero + set(value) { + if (value == field) return + field = value + computeShimmerBounds() + } + + fun updateBounds(shimmerBounds: Rect?) { + if (this.requestedShimmerBounds == shimmerBounds) return + requestedShimmerBounds = shimmerBounds + computeShimmerBounds() + } + + private fun computeShimmerBounds() { + if (viewBounds.isEmpty) return + shimmerBounds = requestedShimmerBounds ?: viewBounds + + // Pivot point in the view's frame of reference + pivotPoint = -viewBounds.topLeft + shimmerBounds.center + + val newShimmerSize = shimmerBounds.size + if (shimmerSize != newShimmerSize) { + shimmerSize = newShimmerSize + computeTranslationDistance() + } + } + + /** + * Rotating the shimmer results in an effect that will first be visible in one of the corners. + * It will afterwards travel across the view / display until the last visible part of it will + * disappear in the opposite corner. + * + * A simple shimmer going across the device's screen from left to right has to travel until + * it reaches the center of the screen and then the same distance again. Without taking the + * shimmer's own width into account. + * + * If the shimmer is now tilted slightly clockwise around the center of the display, a new + * distance has to be calculated. The required distance is the length of a line, which extends + * from the top left of the display to the rotated shimmer (or center line), hitting it at a + * 90 degree angle. As the height and width of the display (or view) are known, the length of + * the line can be calculated by using basic trigonometric functions. + */ + private fun computeTranslationDistance() { + val width = shimmerSize.width / 2 + val height = shimmerSize.height / 2 + + val distanceCornerToCenter = sqrt(width.pow(2) + height.pow(2)) + val beta = acos(width / distanceCornerToCenter) + val alpha = beta - reducedRotation + + val distanceCornerToRotatedCenterLine = cos(alpha) * distanceCornerToCenter + translationDistance = distanceCornerToRotatedCenterLine * 2 + widthOfShimmer + } + + /** + * The formula to compute the required distance for the shimmer's traversal across the view + * only accepts inputs between 0 and 90. All inputs above 90 can simply be mapped to a value + * in the accepted range. + * Inputs between 90 and 180 have to be mapped to the values between 90 and 0 (decreasing). + * Inputs between 180 and 270 have to be mapped to the values between 0 and 90. + * And inputs between 270 and 360 have to be mapped to the values between 90 and 0 again. + */ + private fun Float.reduceRotation(): Float { + if (this < 0f) { + throw IllegalArgumentException("The shimmer's rotation must be a positive number") + } + var rotation = this % 180 // 0..179, 0 + rotation -= 90 // -90..0..89, -90 + rotation = -abs(rotation) // -90..0..-90 + return rotation + 90 // 0..90..0 + } + + private fun Float.toRadian(): Float = this / 180 * PI.toFloat() + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + + other as ShimmerArea + + if (widthOfShimmer != other.widthOfShimmer) return false + if (reducedRotation != other.reducedRotation) return false + + return true + } + + override fun hashCode(): Int { + var result = widthOfShimmer.hashCode() + result = 31 * result + reducedRotation.hashCode() + return result + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/shimmer/ShimmerBounds.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/shimmer/ShimmerBounds.kt new file mode 100644 index 00000000..86e112ad --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/shimmer/ShimmerBounds.kt @@ -0,0 +1,28 @@ +package com.artemchep.keyguard.ui.shimmer + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import androidx.compose.ui.geometry.Rect + +@Composable +expect fun rememberShimmerBoundsWindow(): Rect + +@Composable +internal fun rememberShimmerBounds( + shimmerBounds: ShimmerBounds, +): Rect? { + val windowBounds = rememberShimmerBoundsWindow() + return remember(shimmerBounds, windowBounds) { + when (shimmerBounds) { + ShimmerBounds.Window -> windowBounds + ShimmerBounds.Custom -> Rect.Zero + ShimmerBounds.View -> null + } + } +} + +sealed class ShimmerBounds { + data object Custom : ShimmerBounds() + data object View : ShimmerBounds() + data object Window : ShimmerBounds() +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/shimmer/ShimmerTheme.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/shimmer/ShimmerTheme.kt new file mode 100644 index 00000000..96b1bbc5 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/shimmer/ShimmerTheme.kt @@ -0,0 +1,86 @@ +package com.artemchep.keyguard.ui.shimmer + +import androidx.compose.animation.core.AnimationSpec +import androidx.compose.animation.core.LinearEasing +import androidx.compose.animation.core.RepeatMode +import androidx.compose.animation.core.infiniteRepeatable +import androidx.compose.animation.core.tween +import androidx.compose.runtime.staticCompositionLocalOf +import androidx.compose.ui.graphics.BlendMode +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.ui.DisabledEmphasisAlpha +import com.artemchep.keyguard.ui.HighEmphasisAlpha + +data class ShimmerTheme( + + /** + * The [AnimationSpec] which will be used for the traversal. Use an infinite spec to repeat + * shimmering. + * + * @see defaultShimmerTheme + */ + val animationSpec: AnimationSpec, + + /** + * The [BlendMode] used in the shimmer's [androidx.compose.ui.graphics.Paint]. Have a look at + * the theming samples to get an idea on how to utilize the blend mode. + * + * @see ThemingSamples in the sample app. + */ + val blendMode: BlendMode, + + /** + * Describes the orientation of the shimmer in degrees. Zero is thereby defined as shimmer + * traversing from the left to the right. The rotation is applied clockwise. + * Only values >= 0 will be accepted. + */ + val rotation: Float, + + /** + * The [shaderColors] can be used to control the colors and alpha values of the shimmer. The + * size of the list has to be kept in sync with the [shaderColorStops]. Consult the docs of the + * [androidx.compose.ui.graphics.LinearGradientShader] for more information and have a look + * at the theming samples. + * + * @see ThemingSamples in the samples app. + */ + val shaderColors: List, + + /** + * See docs of [shaderColors]. + */ + val shaderColorStops: List?, + + /** + * Controls the width used to distribute the [shaderColors]. + */ + val shimmerWidth: Dp, +) + +val defaultShimmerTheme: ShimmerTheme = ShimmerTheme( + animationSpec = infiniteRepeatable( + animation = tween( + 800, + easing = LinearEasing, + delayMillis = 400, + ), + repeatMode = RepeatMode.Restart, + ), + blendMode = BlendMode.DstIn, + rotation = 5.0f, + shaderColors = listOf( + Color.Unspecified.copy(alpha = DisabledEmphasisAlpha), + Color.Unspecified.copy(alpha = HighEmphasisAlpha), + Color.Unspecified.copy(alpha = DisabledEmphasisAlpha), + ), + shaderColorStops = listOf( + 0.0f, + 0.5f, + 1.0f, + ), + shimmerWidth = 400.dp, +) + +val LocalShimmerTheme = staticCompositionLocalOf { defaultShimmerTheme } diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/shimmer/rememberShimmer.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/shimmer/rememberShimmer.kt new file mode 100644 index 00000000..3be51b23 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/shimmer/rememberShimmer.kt @@ -0,0 +1,50 @@ +package com.artemchep.keyguard.ui.shimmer + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import androidx.compose.ui.geometry.Rect +import kotlinx.coroutines.flow.MutableStateFlow + +@Composable +fun rememberShimmer( + shimmerBounds: ShimmerBounds, + theme: ShimmerTheme = LocalShimmerTheme.current, +): Shimmer { + val effect = rememberShimmerEffect(theme) + val bounds = rememberShimmerBounds(shimmerBounds) + + return remember(theme, effect, bounds) { + Shimmer(theme, effect, bounds) + } +} + +class Shimmer internal constructor( + internal val theme: ShimmerTheme, + internal val effect: ShimmerEffect, + bounds: Rect?, +) { + + internal val boundsFlow = MutableStateFlow(bounds) + + fun updateBounds(bounds: Rect?) { + boundsFlow.value = bounds + } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + + other as Shimmer + + if (theme != other.theme) return false + if (effect != other.effect) return false + + return true + } + + override fun hashCode(): Int { + var result = theme.hashCode() + result = 31 * result + effect.hashCode() + return result + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/shimmer/rememberShimmerEffect.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/shimmer/rememberShimmerEffect.kt new file mode 100644 index 00000000..eec938c5 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/shimmer/rememberShimmerEffect.kt @@ -0,0 +1,127 @@ +package com.artemchep.keyguard.ui.shimmer + +import androidx.compose.animation.core.Animatable +import androidx.compose.animation.core.AnimationSpec +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.remember +import androidx.compose.ui.geometry.Offset +import androidx.compose.ui.geometry.toRect +import androidx.compose.ui.graphics.BlendMode +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.LinearGradientShader +import androidx.compose.ui.graphics.Paint +import androidx.compose.ui.graphics.PaintingStyle +import androidx.compose.ui.graphics.drawscope.ContentDrawScope +import androidx.compose.ui.graphics.drawscope.drawIntoCanvas +import androidx.compose.ui.graphics.withSaveLayer +import androidx.compose.ui.platform.LocalDensity + +@Composable +internal fun rememberShimmerEffect(theme: ShimmerTheme): ShimmerEffect { + val shimmerWidth = with(LocalDensity.current) { theme.shimmerWidth.toPx() } + val shimmerEffect = remember(theme) { + ShimmerEffect( + animationSpec = theme.animationSpec, + blendMode = theme.blendMode, + rotation = theme.rotation, + shaderColors = theme.shaderColors, + shaderColorStops = theme.shaderColorStops, + shimmerWidth = shimmerWidth, + ) + } + + LaunchedEffect(shimmerEffect) { + shimmerEffect.startAnimation() + } + return shimmerEffect +} + +internal class ShimmerEffect( + private val animationSpec: AnimationSpec, + private val blendMode: BlendMode, + private val rotation: Float, + private val shaderColors: List, + private val shaderColorStops: List?, + private val shimmerWidth: Float, +) { + + private val animatedState = Animatable(0f) + + private val shader = LinearGradientShader( + from = Offset(-shimmerWidth / 2, 0f), + to = Offset(shimmerWidth / 2, 0f), + colors = shaderColors, + colorStops = shaderColorStops, + ) + + private val paint = Paint().apply { + isAntiAlias = true + style = PaintingStyle.Fill + blendMode = this@ShimmerEffect.blendMode + shader = this@ShimmerEffect.shader + } + + internal suspend fun startAnimation() { + animatedState.animateTo( + targetValue = 1f, + animationSpec = animationSpec, + ) + } + + private val emptyPaint = Paint() + + fun ContentDrawScope.draw(shimmerArea: ShimmerArea) = with(shimmerArea) { + if (shimmerBounds.isEmpty || viewBounds.isEmpty) return + + val progress = animatedState.value + val traversal = -translationDistance / 2 + translationDistance * progress + pivotPoint.x + + val drawArea = size.toRect() + drawIntoCanvas { canvas -> + canvas.withSaveLayer( + bounds = drawArea, + emptyPaint, + ) { + drawContent() + canvas.save() + canvas.translate(traversal, 0f) + // canvas.rotate(rotation, pivotPoint.x, pivotPoint.y) + canvas.drawRect( + drawArea.left - traversal, + drawArea.top, + drawArea.right - traversal, + drawArea.bottom, + paint, + ) + canvas.restore() + } + } + } + + override fun equals(other: Any?): Boolean { + if (this === other) return true + if (javaClass != other?.javaClass) return false + + other as ShimmerEffect + + if (animationSpec != other.animationSpec) return false + if (blendMode != other.blendMode) return false + if (rotation != other.rotation) return false + if (shaderColors != other.shaderColors) return false + if (shaderColorStops != other.shaderColorStops) return false + if (shimmerWidth != other.shimmerWidth) return false + + return true + } + + override fun hashCode(): Int { + var result = animationSpec.hashCode() + result = 31 * result + blendMode.hashCode() + result = 31 * result + rotation.hashCode() + result = 31 * result + shaderColors.hashCode() + result = 31 * result + shaderColorStops.hashCode() + result = 31 * result + shimmerWidth.hashCode() + return result + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/shimmer/shimmer.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/shimmer/shimmer.kt new file mode 100644 index 00000000..5069ef2b --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/shimmer/shimmer.kt @@ -0,0 +1,56 @@ +/* + * Dr. Ing. h.c. F. Porsche AG confidential. This code is protected by intellectual property rights. + * The Dr. Ing. h.c. F. Porsche AG owns exclusive legal rights of use. + */ +package com.artemchep.keyguard.ui.shimmer + +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.composed +import androidx.compose.ui.draw.DrawModifier +import androidx.compose.ui.graphics.drawscope.ContentDrawScope +import androidx.compose.ui.layout.LayoutCoordinates +import androidx.compose.ui.layout.OnGloballyPositionedModifier +import androidx.compose.ui.platform.LocalDensity +import androidx.compose.ui.platform.debugInspectorInfo + +fun Modifier.shimmer( + customShimmer: Shimmer? = null, +): Modifier = composed( + factory = { + val shimmer = customShimmer ?: rememberShimmer(ShimmerBounds.View) + + val width = with(LocalDensity.current) { shimmer.theme.shimmerWidth.toPx() } + val area = remember(width, shimmer.theme.rotation) { + ShimmerArea(width, shimmer.theme.rotation) + } + + LaunchedEffect(area, shimmer) { + shimmer.boundsFlow.collect { + area.updateBounds(it) + } + } + + remember(area, shimmer) { ShimmerModifier(area, shimmer.effect) } + }, + inspectorInfo = debugInspectorInfo { + name = "shimmer" + properties["customShimmer"] = customShimmer + }, +) + +internal class ShimmerModifier( + private val area: ShimmerArea, + private val effect: ShimmerEffect, +) : DrawModifier, OnGloballyPositionedModifier { + + override fun ContentDrawScope.draw() { + with(effect) { draw(area) } + } + + override fun onGloballyPositioned(coordinates: LayoutCoordinates) { + val viewBounds = coordinates.unclippedBoundsInWindow() + area.viewBounds = viewBounds + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/shimmer/unclippedBoundsInWindow.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/shimmer/unclippedBoundsInWindow.kt new file mode 100644 index 00000000..016a7552 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/shimmer/unclippedBoundsInWindow.kt @@ -0,0 +1,15 @@ +package com.artemchep.keyguard.ui.shimmer + +import androidx.compose.ui.geometry.Rect +import androidx.compose.ui.layout.LayoutCoordinates +import androidx.compose.ui.layout.positionInWindow + +fun LayoutCoordinates.unclippedBoundsInWindow(): Rect { + val positionInWindow = positionInWindow() + return Rect( + positionInWindow.x, + positionInWindow.y, + positionInWindow.x + size.width, + positionInWindow.y + size.height, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/skeleton/SkeletonButton.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/skeleton/SkeletonButton.kt new file mode 100644 index 00000000..661bea4a --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/skeleton/SkeletonButton.kt @@ -0,0 +1,33 @@ +package com.artemchep.keyguard.ui.skeleton + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.heightIn +import androidx.compose.foundation.layout.widthIn +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.minimumInteractiveComponentSize +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.ui.DisabledEmphasisAlpha +import com.artemchep.keyguard.ui.shimmer.shimmer +import com.artemchep.keyguard.ui.theme.combineAlpha + +@Composable +fun SkeletonButton( + modifier: Modifier = Modifier, +) { + val contentColor = LocalContentColor.current + .combineAlpha(DisabledEmphasisAlpha) + Box( + modifier + .shimmer() + .widthIn(min = 58.dp) + .heightIn(min = 40.dp) + .minimumInteractiveComponentSize() + .clip(CircleShape) + .background(contentColor), + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/skeleton/SkeletonCheckBox.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/skeleton/SkeletonCheckBox.kt new file mode 100644 index 00000000..3afd26f0 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/skeleton/SkeletonCheckBox.kt @@ -0,0 +1,47 @@ +package com.artemchep.keyguard.ui.skeleton + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.heightIn +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.widthIn +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.ui.DisabledEmphasisAlpha +import com.artemchep.keyguard.ui.shimmer.shimmer +import com.artemchep.keyguard.ui.theme.combineAlpha + +@Composable +fun SkeletonCheckbox( + modifier: Modifier = Modifier, + clickable: Boolean = true, +) { + val contentColor = LocalContentColor.current + .combineAlpha(DisabledEmphasisAlpha) + Box( + modifier + .then( + if (clickable) { + Modifier + .widthIn(min = 48.dp) + .heightIn(min = 48.dp) + } else { + Modifier + }, + ), + contentAlignment = Alignment.Center, + ) { + Box( + modifier + .shimmer() + .size(24.dp) + .clip(MaterialTheme.shapes.small) + .background(contentColor), + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/skeleton/SkeletonFilter.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/skeleton/SkeletonFilter.kt new file mode 100644 index 00000000..8b46c143 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/skeleton/SkeletonFilter.kt @@ -0,0 +1,28 @@ +package com.artemchep.keyguard.ui.skeleton + +import androidx.compose.foundation.layout.width +import androidx.compose.material3.MaterialTheme +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.feature.search.filter.component.FilterItemLayout + +@Composable +fun SkeletonFilter( + modifier: Modifier = Modifier, +) { + FilterItemLayout( + modifier = modifier, + checked = false, + leading = null, + content = { + SkeletonText( + modifier = Modifier + .width(64.dp), + style = MaterialTheme.typography.labelLarge, + ) + }, + onClick = null, + enabled = true, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/skeleton/SkeletonItem.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/skeleton/SkeletonItem.kt new file mode 100644 index 00000000..061d6e53 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/skeleton/SkeletonItem.kt @@ -0,0 +1,53 @@ +package com.artemchep.keyguard.ui.skeleton + +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.material3.LocalContentColor +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import com.artemchep.keyguard.ui.Avatar +import com.artemchep.keyguard.ui.DisabledEmphasisAlpha +import com.artemchep.keyguard.ui.FlatItem +import com.artemchep.keyguard.ui.shimmer.shimmer +import com.artemchep.keyguard.ui.theme.combineAlpha + +@Composable +fun SkeletonItem( + avatar: Boolean = false, + titleWidthFraction: Float = 0.45f, + textWidthFraction: Float? = 0.33f, +) { + FlatItem( + leading = if (avatar) { + // composable + { + Avatar( + modifier = Modifier + .shimmer(), + color = LocalContentColor.current + .combineAlpha(DisabledEmphasisAlpha), + ) { + } + } + } else { + null + }, + title = { + SkeletonText( + modifier = Modifier + .fillMaxWidth(titleWidthFraction), + ) + }, + text = if (textWidthFraction != null) { + // composable + { + SkeletonText( + modifier = Modifier + .fillMaxWidth(textWidthFraction), + ) + } + } else { + null + }, + enabled = true, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/skeleton/SkeletonItemPilled.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/skeleton/SkeletonItemPilled.kt new file mode 100644 index 00000000..065c7df4 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/skeleton/SkeletonItemPilled.kt @@ -0,0 +1,69 @@ +package com.artemchep.keyguard.ui.skeleton + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.ui.DisabledEmphasisAlpha +import com.artemchep.keyguard.ui.FlatItemLayout +import com.artemchep.keyguard.ui.shimmer.shimmer +import com.artemchep.keyguard.ui.theme.combineAlpha + +@Composable +fun SkeletonItemPilled( + modifier: Modifier = Modifier, + chevron: Boolean = false, +) { + val contentColor = LocalContentColor.current + .combineAlpha(DisabledEmphasisAlpha) + FlatItemLayout( + modifier = modifier + .shimmer() + .padding(top = 1.dp), + leading = { + Box( + Modifier + .height(18.dp) + .width(44.dp) + .clip(MaterialTheme.shapes.medium) + .background(contentColor.copy(alpha = 0.2f)), + ) + }, + content = { + Row( + Modifier + .fillMaxWidth(1f), + verticalAlignment = Alignment.CenterVertically, + ) { + Box( + Modifier + .height(18.dp) + .fillMaxWidth(0.4f) + .clip(MaterialTheme.shapes.medium) + .background(contentColor), + ) + if (chevron) { + Spacer(modifier = Modifier.weight(1f)) + Box( + Modifier + .size(18.dp) + .clip(MaterialTheme.shapes.medium) + .background(contentColor.copy(alpha = 0.2f)), + ) + } + } + }, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/skeleton/SkeletonSection.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/skeleton/SkeletonSection.kt new file mode 100644 index 00000000..97cc8e85 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/skeleton/SkeletonSection.kt @@ -0,0 +1,27 @@ +package com.artemchep.keyguard.ui.skeleton + +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.MaterialTheme +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import com.artemchep.keyguard.ui.theme.Dimens + +@Composable +fun SkeletonSection( + modifier: Modifier = Modifier, + widthFraction: Float = 0.33f, +) { + SkeletonText( + modifier = modifier + .fillMaxWidth(widthFraction) + .padding( + vertical = 16.dp, + horizontal = Dimens.horizontalPadding, + ), + style = MaterialTheme.typography.labelLarge + .copy(fontSize = 12.sp), + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/skeleton/SkeletonSegmented.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/skeleton/SkeletonSegmented.kt new file mode 100644 index 00000000..e587d1a0 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/skeleton/SkeletonSegmented.kt @@ -0,0 +1,30 @@ +package com.artemchep.keyguard.ui.skeleton + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material3.LocalContentColor +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.ui.DisabledEmphasisAlpha +import com.artemchep.keyguard.ui.shimmer.shimmer +import com.artemchep.keyguard.ui.theme.combineAlpha + +@Composable +fun SkeletonSegmented( + modifier: Modifier = Modifier, +) { + val contentColor = LocalContentColor.current + .combineAlpha(DisabledEmphasisAlpha) + Box( + modifier = modifier + .shimmer() + .height(40.dp) + .clip(CircleShape) + .background(contentColor), + ) { + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/skeleton/SkeletonSlider.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/skeleton/SkeletonSlider.kt new file mode 100644 index 00000000..eda9631f --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/skeleton/SkeletonSlider.kt @@ -0,0 +1,35 @@ +package com.artemchep.keyguard.ui.skeleton + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.heightIn +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.widthIn +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.ui.DisabledEmphasisAlpha +import com.artemchep.keyguard.ui.shimmer.shimmer +import com.artemchep.keyguard.ui.theme.combineAlpha + +@Composable +fun SkeletonSlider( + modifier: Modifier = Modifier, +) { + val contentColor = LocalContentColor.current + .combineAlpha(DisabledEmphasisAlpha) + Box( + modifier = modifier + .padding( + vertical = 14.dp, + ) + .heightIn(min = 20.dp) + .widthIn(min = 30.dp) + .shimmer() + .clip(MaterialTheme.shapes.medium) + .background(contentColor), + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/skeleton/SkeletonSwitch.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/skeleton/SkeletonSwitch.kt new file mode 100644 index 00000000..9e9d81dd --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/skeleton/SkeletonSwitch.kt @@ -0,0 +1,33 @@ +package com.artemchep.keyguard.ui.skeleton + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.heightIn +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.widthIn +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.ui.DisabledEmphasisAlpha +import com.artemchep.keyguard.ui.shimmer.shimmer +import com.artemchep.keyguard.ui.theme.combineAlpha + +@Composable +fun SkeletonSwitch( + modifier: Modifier = Modifier, +) { + val contentColor = LocalContentColor.current + .combineAlpha(DisabledEmphasisAlpha) + Box( + modifier = modifier + .padding(4.dp) + .heightIn(min = 20.dp) + .widthIn(min = 34.dp) + .shimmer() + .clip(MaterialTheme.shapes.medium) + .background(contentColor), + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/skeleton/SkeletonText.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/skeleton/SkeletonText.kt new file mode 100644 index 00000000..0eff7b25 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/skeleton/SkeletonText.kt @@ -0,0 +1,44 @@ +package com.artemchep.keyguard.ui.skeleton + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.LocalTextStyle +import androidx.compose.material3.MaterialTheme +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.graphics.isSpecified +import androidx.compose.ui.platform.LocalDensity +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.ui.DefaultEmphasisAlpha +import com.artemchep.keyguard.ui.DisabledEmphasisAlpha +import com.artemchep.keyguard.ui.shimmer.shimmer +import com.artemchep.keyguard.ui.theme.combineAlpha + +@Composable +fun SkeletonText( + modifier: Modifier = Modifier, + style: TextStyle = LocalTextStyle.current, + emphasis: Float = DefaultEmphasisAlpha, +) { + val contentColor = run { + val color = style.color.takeIf { it.isSpecified } ?: LocalContentColor.current + color.combineAlpha(DisabledEmphasisAlpha * emphasis) + } + val density = LocalDensity.current + val height = with(density) { + style.lineHeight.toDp() + } + Box( + modifier + .shimmer() + .height(height) + .padding(vertical = 2.dp) + .clip(MaterialTheme.shapes.medium) + .background(contentColor), + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/skeleton/SkeletonTextField.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/skeleton/SkeletonTextField.kt new file mode 100644 index 00000000..061febea --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/skeleton/SkeletonTextField.kt @@ -0,0 +1,29 @@ +package com.artemchep.keyguard.ui.skeleton + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.height +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.ui.DisabledEmphasisAlpha +import com.artemchep.keyguard.ui.shimmer.shimmer +import com.artemchep.keyguard.ui.theme.combineAlpha + +@Composable +fun SkeletonTextField( + modifier: Modifier = Modifier, +) { + val contentColor = LocalContentColor.current + .combineAlpha(DisabledEmphasisAlpha) + Box( + modifier + .shimmer() + .height(64.dp) + .clip(MaterialTheme.shapes.large) + .background(contentColor), + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/tabs/CallsTabs.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/tabs/CallsTabs.kt new file mode 100644 index 00000000..3ecafe03 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/tabs/CallsTabs.kt @@ -0,0 +1,19 @@ +package com.artemchep.keyguard.ui.tabs + +import com.artemchep.keyguard.res.Res +import dev.icerock.moko.resources.StringResource + +enum class CallsTabs( + override val title: StringResource, +) : TabItem { + RECENTS( + title = Res.strings.ciphers_recently_opened, + ), + FAVORITES( + title = Res.strings.ciphers_often_opened, + ); + + companion object { + val default get() = RECENTS + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/tabs/SegmentedTabs.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/tabs/SegmentedTabs.kt new file mode 100644 index 00000000..5feb07ac --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/tabs/SegmentedTabs.kt @@ -0,0 +1,171 @@ +package com.artemchep.keyguard.ui.tabs + +import androidx.compose.animation.AnimatedVisibility +import androidx.compose.animation.animateColorAsState +import androidx.compose.animation.expandHorizontally +import androidx.compose.animation.fadeIn +import androidx.compose.animation.fadeOut +import androidx.compose.animation.scaleIn +import androidx.compose.animation.scaleOut +import androidx.compose.animation.shrinkHorizontally +import androidx.compose.foundation.background +import androidx.compose.foundation.border +import androidx.compose.foundation.clickable +import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.RowScope +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.size +import androidx.compose.foundation.layout.width +import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Check +import androidx.compose.material3.Icon +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.ProvideTextStyle +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.runtime.State +import androidx.compose.runtime.derivedStateOf +import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.alpha +import androidx.compose.ui.draw.clip +import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.ui.DisabledEmphasisAlpha +import com.artemchep.keyguard.ui.theme.selectedContainer +import com.artemchep.keyguard.ui.util.DividerColor +import dev.icerock.moko.resources.compose.stringResource +import kotlinx.collections.immutable.ImmutableList + +@Composable +fun SegmentedButtonGroup( + tabState: State, + tabs: ImmutableList, + onClick: (T) -> Unit, + modifier: Modifier = Modifier, +) { + val updatedOnClick by rememberUpdatedState(onClick) + SegmentedButtonGroup( + modifier = modifier, + ) { + tabs.forEachIndexed { index, tab -> + if (index > 0) { + SegmentedButtonDivider() + } + + val selectedState = remember(tabState, tab) { + derivedStateOf { + tabState.value == tab + } + } + SegmentedButtonItem( + modifier = Modifier + .weight(1f), + selectedProvider = { + selectedState.value + }, + onClick = { + updatedOnClick.invoke(tab) + }, + ) { + Text( + text = stringResource(tab.title), + maxLines = 1, + overflow = TextOverflow.Ellipsis, + ) + } + } + } +} + +@Composable +fun SegmentedButtonGroup( + modifier: Modifier = Modifier, + content: @Composable RowScope.() -> Unit, +) { + Box( + modifier = modifier + .height(40.dp), + ) { + Row( + modifier = Modifier + .clip(CircleShape) + .fillMaxHeight(), + ) { + content() + } + Box( + modifier = Modifier + .border(1.dp, DividerColor, CircleShape) + .matchParentSize(), + ) + } +} + +@Composable +fun SegmentedButtonDivider( + modifier: Modifier = Modifier, +) { + Box( + modifier = modifier + .fillMaxHeight() + .width(1.dp) + .background(MaterialTheme.colorScheme.outlineVariant), + ) +} + +@Composable +fun SegmentedButtonItem( + selectedProvider: () -> Boolean, + modifier: Modifier = Modifier, + onClick: (() -> Unit)? = null, + content: @Composable () -> Unit, +) { + val updatedOnClick by rememberUpdatedState(onClick) + + val selected = selectedProvider() + val backgroundTarget = run { + val bg = MaterialTheme.colorScheme.selectedContainer + if (selected) bg else bg.copy(alpha = 0f) + } + val background = animateColorAsState(backgroundTarget, label = "BackgroundColor") + Row( + modifier = modifier + .fillMaxHeight() + .background(background.value) + .alpha(if (updatedOnClick != null) 1f else DisabledEmphasisAlpha) + .clickable(enabled = updatedOnClick != null) { + updatedOnClick?.invoke() + } + .padding(horizontal = 4.dp), + verticalAlignment = Alignment.CenterVertically, + horizontalArrangement = Arrangement.Center, + ) { + AnimatedVisibility( + selected, + enter = fadeIn() + expandHorizontally() + scaleIn(), + exit = fadeOut() + shrinkHorizontally() + scaleOut(), + ) { + Icon( + modifier = Modifier + .padding(end = 8.dp) + .size(18.dp), + imageVector = Icons.Outlined.Check, + contentDescription = null, + ) + } + ProvideTextStyle( + MaterialTheme.typography.labelLarge, + ) { + content() + } + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/tabs/TabItem.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/tabs/TabItem.kt new file mode 100644 index 00000000..b731e800 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/tabs/TabItem.kt @@ -0,0 +1,7 @@ +package com.artemchep.keyguard.ui.tabs + +import dev.icerock.moko.resources.StringResource + +interface TabItem { + val title: StringResource +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/text/AnnotatedResource.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/text/AnnotatedResource.kt new file mode 100644 index 00000000..eeff24e5 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/text/AnnotatedResource.kt @@ -0,0 +1,72 @@ +package com.artemchep.keyguard.ui.text + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import androidx.compose.ui.text.AnnotatedString +import androidx.compose.ui.text.SpanStyle +import androidx.compose.ui.text.buildAnnotatedString +import androidx.compose.ui.text.withStyle +import com.artemchep.keyguard.feature.navigation.state.TranslatorScope +import dev.icerock.moko.resources.StringResource +import dev.icerock.moko.resources.compose.stringResource +import java.util.UUID + +@Composable +fun annotatedResource( + resource: StringResource, + vararg args: Pair, +): AnnotatedString { + // Generate a bunch of placeholders to use as + // arguments. Later, we will replace those with + // actual values. + val placeholders = remember { + Array(args.size) { UUID.randomUUID().toString() } + } + val value = stringResource(resource, *placeholders) + return remember(value) { + rebuild( + value, + placeholders = placeholders, + args = args, + ) + } +} + +fun TranslatorScope.annotate( + resource: StringResource, + vararg args: Pair, +): AnnotatedString { + // Generate a bunch of placeholders to use as + // arguments. Later, we will replace those with + // actual values. + val placeholders = + Array(args.size) { UUID.randomUUID().toString() } + val value = translate(resource, *placeholders) + return rebuild( + value, + placeholders = placeholders, + args = args, + ) +} + +private fun rebuild( + source: String, + placeholders: Array, + args: Array>, +) = buildAnnotatedString { + var from = 0 + placeholders.forEachIndexed { pIndex, p -> + val i = source.indexOf(p) + if (i == -1) { + // Skip, should not happen. + return@forEachIndexed + } + append(source.substring(from, i)) + val entry = args[pIndex] + withStyle(style = entry.second) { + append(entry.first.toString()) + } + from = i + p.length + } + append(source.substring(from)) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/theme/Color.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/theme/Color.kt new file mode 100644 index 00000000..95044688 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/theme/Color.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.ui.theme + +import androidx.compose.ui.graphics.Color + +fun Color.combineAlpha(alpha: Float) = copy(alpha = this.alpha * alpha) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/theme/Dimen.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/theme/Dimen.kt new file mode 100644 index 00000000..ee5f1658 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/theme/Dimen.kt @@ -0,0 +1,41 @@ +package com.artemchep.keyguard.ui.theme + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.ReadOnlyComposable +import androidx.compose.runtime.staticCompositionLocalOf +import androidx.compose.ui.unit.Dp +import androidx.compose.ui.unit.dp + +internal val Dimens + @Composable + @ReadOnlyComposable + get() = LocalDimens.current + +internal val LocalDimens = staticCompositionLocalOf { + Dimen.normal() +} + +data class Dimen( + val verticalPadding: Dp, + val horizontalPadding: Dp, + val topPaddingCaption: Dp, + val buttonIconPadding: Dp = 12.dp, +) { + companion object { + fun normal() = Dimen( + verticalPadding = 16.dp, + horizontalPadding = 16.dp, + topPaddingCaption = 8.dp, + ) + + fun compact() = Dimen( + verticalPadding = 16.dp, + horizontalPadding = 8.dp, + topPaddingCaption = 8.dp, + ) + } +} + +val Dimen.horizontalPaddingHalf get() = horizontalPadding / 2 + +val Dimen.horizontalPaddingFourth get() = horizontalPadding / 4 diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/theme/Theme.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/theme/Theme.kt new file mode 100644 index 00000000..bda17852 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/theme/Theme.kt @@ -0,0 +1,377 @@ +package com.artemchep.keyguard.ui.theme + +import androidx.compose.foundation.isSystemInDarkTheme +import androidx.compose.material.darkColors +import androidx.compose.material.lightColors +import androidx.compose.material3.ColorScheme +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Typography +import androidx.compose.runtime.Composable +import androidx.compose.runtime.ReadOnlyComposable +import androidx.compose.runtime.collectAsState +import androidx.compose.runtime.getValue +import androidx.compose.runtime.remember +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.graphics.compositeOver +import androidx.compose.ui.graphics.luminance +import androidx.compose.ui.text.font.FontFamily +import com.artemchep.keyguard.common.model.AppColors +import com.artemchep.keyguard.common.model.AppFont +import com.artemchep.keyguard.common.model.AppTheme +import com.artemchep.keyguard.common.usecase.GetColors +import com.artemchep.keyguard.common.usecase.GetFont +import com.artemchep.keyguard.common.usecase.GetTheme +import com.artemchep.keyguard.common.usecase.GetThemeUseAmoledDark +import com.artemchep.keyguard.res.Res +import com.artemchep.keyguard.ui.theme.monet.ColorSchemeFactory +import com.artemchep.keyguard.ui.theme.monet.darkMonetCompatScheme +import com.artemchep.keyguard.ui.theme.monet.lightMonetCompatScheme +import dev.icerock.moko.resources.compose.fontFamilyResource +import dev.kdrag0n.colorkt.rgb.LinearSrgb +import org.kodein.di.compose.rememberInstance + +val ColorScheme.selectedContainer + @ReadOnlyComposable + get() = secondaryContainer + +val ColorScheme.onSelectedContainer + @ReadOnlyComposable + get() = onSecondaryContainer + +val ColorScheme.badgeContainer + @ReadOnlyComposable + get() = tertiaryContainer + +private const val HUE_ERROR = 0f +private const val HUE_WARNING = 55f +private const val HUE_INFO = 210f +private const val HUE_OK = 120f + +/** + * Returns `true` if the color scheme is dark or + * black, `false` otherwise. + */ +val ColorScheme.isDark + @ReadOnlyComposable + get() = background.luminance() < 0.5f + +inline val ColorScheme.searchHighlightBackgroundColor get() = tertiaryContainer + +inline val ColorScheme.searchHighlightContentColor get() = onTertiaryContainer + +// We use this property to replace the error +// of the color scheme. +@Suppress("ObjectPropertyName") +private val ColorScheme._error: Color + @Composable + get() = buildContentColor(HUE_ERROR) + +val ColorScheme.warning: Color + @Composable + get() = buildContentColor(HUE_WARNING) + +val ColorScheme.warningVariant: Color + @Composable + get() = warning + +val ColorScheme.info: Color + @Composable + get() = buildContentColor(HUE_INFO) + +val ColorScheme.infoVariant: Color + @Composable + get() = info + +val ColorScheme.ok: Color + @Composable + get() = buildContentColor(HUE_OK) + +val ColorScheme.okVariant: Color + @Composable + get() = ok + +@Composable +private fun ColorScheme.buildContentColor( + hue: Float, +): Color { + val isDark = isDark + val color = remember(isDark) { + buildContentColor( + hue = hue, + onDark = isDark, + ) + } + return color +} + +private fun buildContentColor( + hue: Float, + onDark: Boolean, +): Color { + val saturation: Float + val lightness: Float + if (onDark) { + saturation = 0.72f // saturation + lightness = 0.86f // value + } else { + saturation = 0.96f // saturation + lightness = 0.80f // value + } + return Color.hsv( + hue = hue, + saturation = saturation, + value = lightness, + ) +} + +// We use this property to replace the error container +// of the color scheme. +@Suppress("ObjectPropertyName") +private val ColorScheme._errorContainer: Color + @Composable + get() = buildContainerColor(HUE_ERROR) + +// We use this property to replace the error container +// of the color scheme. +@Suppress("ObjectPropertyName") +private val ColorScheme._onErrorContainer: Color + @Composable + get() = onSurfaceVariant + +val ColorScheme.warningContainer: Color + @Composable + get() = buildContainerColor(HUE_WARNING) + +val ColorScheme.warningContainerVariant: Color + @Composable + get() = buildContainerColor(HUE_WARNING) + +val ColorScheme.onWarningContainer + @Composable + get() = buildOnContainerColor(HUE_WARNING) + +val ColorScheme.infoContainer: Color + @Composable + get() = buildContainerColor(HUE_INFO) + +val ColorScheme.infoContainerVariant: Color + @Composable + get() = buildContainerColor(HUE_INFO) + +val ColorScheme.onInfoContainer + @Composable + get() = buildOnContainerColor(HUE_INFO) + +val ColorScheme.okContainer: Color + @Composable + get() = buildContainerColor(HUE_OK) + +val ColorScheme.okContainerVariant: Color + @Composable + get() = buildContainerColor(HUE_OK) + +val ColorScheme.onOkContainer + @Composable + get() = buildOnContainerColor(HUE_OK) + +@Composable +private fun ColorScheme.buildContainerColor( + hue: Float, +): Color { + val tint = Color.hsv( + hue = hue, + saturation = 1f, + value = 1f, + ) + val backgroundColor = if (isDark) { + surfaceVariant + } else { + surfaceVariant + } + return tint + .copy(alpha = 0.20f) + .compositeOver(backgroundColor) +} + +@Composable +private fun ColorScheme.buildOnContainerColor( + hue: Float, +): Color { + val isDark = isDark + val color = remember(isDark) { + buildOnContainerColor( + hue = hue, + onDark = isDark, + ) + } + return color +} + +private fun buildOnContainerColor( + hue: Float, + onDark: Boolean, +): Color { + val saturation: Float + val lightness: Float + if (onDark) { + saturation = 0.1f // saturation + lightness = 0.9f // value + } else { + saturation = 0.2f // saturation + lightness = 0.2f // value + } + return Color.hsv( + hue = hue, + saturation = saturation, + value = lightness, + ) +} + +val monoFontFamily: FontFamily + @Composable + get() = robotoMonoFontFamily + +val sansFontFamily: FontFamily + @Composable + get() = robotoSansFontFamily + +val robotoMonoFontFamily: FontFamily + @Composable + get() = fontFamilyResource(Res.fonts.RobotoMono.robotoMono) + +val robotoSansFontFamily: FontFamily + @Composable + get() { + val getFont by rememberInstance() + val font = remember(getFont) { + getFont() + }.collectAsState(null) + val res = when (font.value) { + AppFont.ROBOTO -> Res.fonts.Roboto.regular + AppFont.NOTO -> Res.fonts.NotoSans.regular + AppFont.ATKINSON_HYPERLEGIBLE -> Res.fonts.AtkinsonHyperlegible.regular + null -> Res.fonts.Roboto.regular + } + return fontFamilyResource(res) + } + +@Composable +fun KeyguardTheme( + content: @Composable () -> Unit, +) { + val getTheme by rememberInstance() + val getThemeUseAmoledDark by rememberInstance() + val getColors by rememberInstance() + val theme by remember(getTheme) { + getTheme() + }.collectAsState(initial = null) + val themeBlack by remember(getThemeUseAmoledDark) { + getThemeUseAmoledDark() + }.collectAsState(initial = false) + val colors by remember(getColors) { + getColors() + }.collectAsState(initial = null) + val isDarkColorScheme = when (theme) { + AppTheme.DARK -> true + AppTheme.LIGHT -> false + null -> isSystemInDarkTheme() + } + + val scheme = kotlin.run { + val scheme = appColorScheme( + colors = colors, + isDarkColorScheme = isDarkColorScheme, + ) + scheme.copy( + errorContainer = scheme._errorContainer, + onErrorContainer = scheme._onErrorContainer, + error = scheme._error, + background = if (themeBlack && isDarkColorScheme) Color.Black else scheme.background, + surface = if (themeBlack && isDarkColorScheme) Color.Black else scheme.surface, + ) + } + + val getFont by rememberInstance() + val font = remember(getFont) { + getFont() + }.collectAsState(null) + + val typography = if (font.value == null) { + Typography() + } else { + val defaultTypography = Typography() + Typography( + displayLarge = defaultTypography.displayLarge.copy(fontFamily = sansFontFamily), + displayMedium = defaultTypography.displayMedium.copy(fontFamily = sansFontFamily), + displaySmall = defaultTypography.displaySmall.copy(fontFamily = sansFontFamily), + + headlineLarge = defaultTypography.headlineLarge.copy(fontFamily = sansFontFamily), + headlineMedium = defaultTypography.headlineMedium.copy(fontFamily = sansFontFamily), + headlineSmall = defaultTypography.headlineSmall.copy(fontFamily = sansFontFamily), + + titleLarge = defaultTypography.titleLarge.copy(fontFamily = sansFontFamily), + titleMedium = defaultTypography.titleMedium.copy(fontFamily = sansFontFamily), + titleSmall = defaultTypography.titleSmall.copy(fontFamily = sansFontFamily), + + bodyLarge = defaultTypography.bodyLarge.copy(fontFamily = sansFontFamily), + bodyMedium = defaultTypography.bodyMedium.copy(fontFamily = sansFontFamily), + bodySmall = defaultTypography.bodySmall.copy(fontFamily = sansFontFamily), + + labelLarge = defaultTypography.labelLarge.copy(fontFamily = sansFontFamily), + labelMedium = defaultTypography.labelMedium.copy(fontFamily = sansFontFamily), + labelSmall = defaultTypography.labelSmall.copy(fontFamily = sansFontFamily), + ) + } + MaterialTheme( + colorScheme = scheme, + typography = typography, + ) { + SystemUiThemeEffect() + + androidx.compose.material.MaterialTheme( + colors = (if (isDarkColorScheme) darkColors() else lightColors()) + .copy( + primary = scheme.primary, + onPrimary = scheme.onPrimary, + secondary = scheme.secondary, + onSecondary = scheme.onSecondary, + ), + ) { + content() + } + } +} + +@Composable +private fun appColorScheme( + colors: AppColors?, + isDarkColorScheme: Boolean, +): ColorScheme = colors?.let { c -> + runCatching { + val palette = run { + val tempColor = Color(c.color) + val primaryColor = LinearSrgb( + r = tempColor.red.toDouble(), + g = tempColor.green.toDouble(), + b = tempColor.blue.toDouble(), + ) + ColorSchemeFactory.getFactory().getColor(primaryColor) + } + if (isDarkColorScheme) palette.darkMonetCompatScheme() else palette.lightMonetCompatScheme() + }.getOrNull() +} ?: run { + if (isDarkColorScheme) { + appDynamicDarkColorScheme() + } else { + appDynamicLightColorScheme() + } +} + +@Composable +expect fun appDynamicDarkColorScheme(): ColorScheme + +@Composable +expect fun appDynamicLightColorScheme(): ColorScheme + +@Composable +expect fun SystemUiThemeEffect() diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/theme/m3/Palette.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/theme/m3/Palette.kt new file mode 100644 index 00000000..bc340915 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/theme/m3/Palette.kt @@ -0,0 +1,192 @@ +/* + * Copyright 2021 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.artemchep.keyguard.ui.theme.m3 + +import androidx.compose.ui.graphics.Color + +internal object Palette { + val Black = Color(red = 0, green = 0, blue = 0) + val Blue0 = Color(red = 0, green = 0, blue = 0) + val Blue10 = Color(red = 4, green = 30, blue = 73) + val Blue100 = Color(red = 255, green = 255, blue = 255) + val Blue20 = Color(red = 6, green = 46, blue = 111) + val Blue30 = Color(red = 8, green = 66, blue = 160) + val Blue40 = Color(red = 11, green = 87, blue = 208) + val Blue50 = Color(red = 27, green = 110, blue = 243) + val Blue60 = Color(red = 76, green = 141, blue = 246) + val Blue70 = Color(red = 124, green = 172, blue = 248) + val Blue80 = Color(red = 168, green = 199, blue = 250) + val Blue90 = Color(red = 211, green = 227, blue = 253) + val Blue95 = Color(red = 236, green = 243, blue = 254) + val Blue99 = Color(red = 250, green = 251, blue = 255) + val BlueVariant0 = Color(red = 0, green = 0, blue = 0) + val BlueVariant10 = Color(red = 0, green = 29, blue = 53) + val BlueVariant100 = Color(red = 255, green = 255, blue = 255) + val BlueVariant20 = Color(red = 0, green = 51, blue = 85) + val BlueVariant30 = Color(red = 0, green = 74, blue = 119) + val BlueVariant40 = Color(red = 0, green = 99, blue = 155) + val BlueVariant50 = Color(red = 4, green = 125, blue = 183) + val BlueVariant60 = Color(red = 57, green = 152, blue = 211) + val BlueVariant70 = Color(red = 90, green = 179, blue = 240) + val BlueVariant80 = Color(red = 127, green = 207, blue = 255) + val BlueVariant90 = Color(red = 194, green = 231, blue = 255) + val BlueVariant95 = Color(red = 223, green = 243, blue = 255) + val BlueVariant99 = Color(red = 247, green = 252, blue = 255) + val Error0 = Color(red = 0, green = 0, blue = 0) + val Error10 = Color(red = 65, green = 14, blue = 11) + val Error100 = Color(red = 255, green = 255, blue = 255) + val Error20 = Color(red = 96, green = 20, blue = 16) + val Error30 = Color(red = 140, green = 29, blue = 24) + val Error40 = Color(red = 179, green = 38, blue = 30) + val Error50 = Color(red = 220, green = 54, blue = 46) + val Error60 = Color(red = 228, green = 105, blue = 98) + val Error70 = Color(red = 236, green = 146, blue = 142) + val Error80 = Color(red = 242, green = 184, blue = 181) + val Error90 = Color(red = 249, green = 222, blue = 220) + val Error95 = Color(red = 252, green = 238, blue = 238) + val Error99 = Color(red = 255, green = 251, blue = 249) + val Green0 = Color(red = 0, green = 0, blue = 0) + val Green10 = Color(red = 7, green = 39, blue = 17) + val Green100 = Color(red = 255, green = 255, blue = 255) + val Green20 = Color(red = 10, green = 56, blue = 24) + val Green30 = Color(red = 15, green = 82, blue = 35) + val Green40 = Color(red = 20, green = 108, blue = 46) + val Green50 = Color(red = 25, green = 134, blue = 57) + val Green60 = Color(red = 30, green = 164, blue = 70) + val Green70 = Color(red = 55, green = 190, blue = 95) + val Green80 = Color(red = 109, green = 213, blue = 140) + val Green90 = Color(red = 196, green = 238, blue = 208) + val Green95 = Color(red = 231, green = 248, blue = 237) + val Green99 = Color(red = 242, green = 255, blue = 238) + val Grey0 = Color(red = 0, green = 0, blue = 0) + val Grey10 = Color(red = 31, green = 31, blue = 31) + val Grey100 = Color(red = 255, green = 255, blue = 255) + val Grey20 = Color(red = 48, green = 48, blue = 48) + val Grey30 = Color(red = 71, green = 71, blue = 71) + val Grey40 = Color(red = 94, green = 94, blue = 94) + val Grey50 = Color(red = 117, green = 117, blue = 117) + val Grey60 = Color(red = 143, green = 143, blue = 143) + val Grey70 = Color(red = 171, green = 171, blue = 171) + val Grey80 = Color(red = 199, green = 199, blue = 199) + val Grey90 = Color(red = 227, green = 227, blue = 227) + val Grey95 = Color(red = 242, green = 242, blue = 242) + val Grey99 = Color(red = 253, green = 252, blue = 251) + val GreyVariant0 = Color(red = 0, green = 0, blue = 0) + val GreyVariant10 = Color(red = 25, green = 29, blue = 28) + val GreyVariant100 = Color(red = 255, green = 255, blue = 255) + val GreyVariant20 = Color(red = 45, green = 49, blue = 47) + val GreyVariant30 = Color(red = 68, green = 71, blue = 70) + val GreyVariant40 = Color(red = 92, green = 95, blue = 94) + val GreyVariant50 = Color(red = 116, green = 119, blue = 117) + val GreyVariant60 = Color(red = 142, green = 145, blue = 143) + val GreyVariant70 = Color(red = 169, green = 172, blue = 170) + val GreyVariant80 = Color(red = 196, green = 199, blue = 197) + val GreyVariant90 = Color(red = 225, green = 227, blue = 225) + val GreyVariant95 = Color(red = 239, green = 242, blue = 239) + val GreyVariant99 = Color(red = 250, green = 253, blue = 251) + val Neutral0 = Color(red = 0, green = 0, blue = 0) + val Neutral10 = Color(red = 28, green = 27, blue = 31) + val Neutral100 = Color(red = 255, green = 255, blue = 255) + val Neutral20 = Color(red = 49, green = 48, blue = 51) + val Neutral30 = Color(red = 72, green = 70, blue = 73) + val Neutral40 = Color(red = 96, green = 93, blue = 98) + val Neutral50 = Color(red = 120, green = 117, blue = 121) + val Neutral60 = Color(red = 147, green = 144, blue = 148) + val Neutral70 = Color(red = 174, green = 170, blue = 174) + val Neutral80 = Color(red = 201, green = 197, blue = 202) + val Neutral90 = Color(red = 230, green = 225, blue = 229) + val Neutral95 = Color(red = 244, green = 239, blue = 244) + val Neutral99 = Color(red = 255, green = 251, blue = 254) + val NeutralVariant0 = Color(red = 0, green = 0, blue = 0) + val NeutralVariant10 = Color(red = 29, green = 26, blue = 34) + val NeutralVariant100 = Color(red = 255, green = 255, blue = 255) + val NeutralVariant20 = Color(red = 50, green = 47, blue = 55) + val NeutralVariant30 = Color(red = 73, green = 69, blue = 79) + val NeutralVariant40 = Color(red = 96, green = 93, blue = 102) + val NeutralVariant50 = Color(red = 121, green = 116, blue = 126) + val NeutralVariant60 = Color(red = 147, green = 143, blue = 153) + val NeutralVariant70 = Color(red = 174, green = 169, blue = 180) + val NeutralVariant80 = Color(red = 202, green = 196, blue = 208) + val NeutralVariant90 = Color(red = 231, green = 224, blue = 236) + val NeutralVariant95 = Color(red = 245, green = 238, blue = 250) + val NeutralVariant99 = Color(red = 255, green = 251, blue = 254) + val Primary0 = Color(red = 0, green = 0, blue = 0) + val Primary10 = Color(red = 33, green = 0, blue = 93) + val Primary100 = Color(red = 255, green = 255, blue = 255) + val Primary20 = Color(red = 56, green = 30, blue = 114) + val Primary30 = Color(red = 79, green = 55, blue = 139) + val Primary40 = Color(red = 103, green = 80, blue = 164) + val Primary50 = Color(red = 127, green = 103, blue = 190) + val Primary60 = Color(red = 154, green = 130, blue = 219) + val Primary70 = Color(red = 182, green = 157, blue = 248) + val Primary80 = Color(red = 208, green = 188, blue = 255) + val Primary90 = Color(red = 234, green = 221, blue = 255) + val Primary95 = Color(red = 246, green = 237, blue = 255) + val Primary99 = Color(red = 255, green = 251, blue = 254) + val Red0 = Color(red = 0, green = 0, blue = 0) + val Red10 = Color(red = 65, green = 14, blue = 11) + val Red100 = Color(red = 255, green = 255, blue = 255) + val Red20 = Color(red = 96, green = 20, blue = 16) + val Red30 = Color(red = 140, green = 29, blue = 24) + val Red40 = Color(red = 179, green = 38, blue = 30) + val Red50 = Color(red = 220, green = 54, blue = 46) + val Red60 = Color(red = 228, green = 105, blue = 98) + val Red70 = Color(red = 236, green = 146, blue = 142) + val Red80 = Color(red = 242, green = 184, blue = 181) + val Red90 = Color(red = 249, green = 222, blue = 220) + val Red95 = Color(red = 252, green = 238, blue = 238) + val Red99 = Color(red = 255, green = 251, blue = 249) + val Secondary0 = Color(red = 0, green = 0, blue = 0) + val Secondary10 = Color(red = 29, green = 25, blue = 43) + val Secondary100 = Color(red = 255, green = 255, blue = 255) + val Secondary20 = Color(red = 51, green = 45, blue = 65) + val Secondary30 = Color(red = 74, green = 68, blue = 88) + val Secondary40 = Color(red = 98, green = 91, blue = 113) + val Secondary50 = Color(red = 122, green = 114, blue = 137) + val Secondary60 = Color(red = 149, green = 141, blue = 165) + val Secondary70 = Color(red = 176, green = 167, blue = 192) + val Secondary80 = Color(red = 204, green = 194, blue = 220) + val Secondary90 = Color(red = 232, green = 222, blue = 248) + val Secondary95 = Color(red = 246, green = 237, blue = 255) + val Secondary99 = Color(red = 255, green = 251, blue = 254) + val Tertiary0 = Color(red = 0, green = 0, blue = 0) + val Tertiary10 = Color(red = 49, green = 17, blue = 29) + val Tertiary100 = Color(red = 255, green = 255, blue = 255) + val Tertiary20 = Color(red = 73, green = 37, blue = 50) + val Tertiary30 = Color(red = 99, green = 59, blue = 72) + val Tertiary40 = Color(red = 125, green = 82, blue = 96) + val Tertiary50 = Color(red = 152, green = 105, blue = 119) + val Tertiary60 = Color(red = 181, green = 131, blue = 146) + val Tertiary70 = Color(red = 210, green = 157, blue = 172) + val Tertiary80 = Color(red = 239, green = 184, blue = 200) + val Tertiary90 = Color(red = 255, green = 216, blue = 228) + val Tertiary95 = Color(red = 255, green = 236, blue = 241) + val Tertiary99 = Color(red = 255, green = 251, blue = 250) + val White = Color(red = 255, green = 255, blue = 255) + val Yellow0 = Color(red = 0, green = 0, blue = 0) + val Yellow10 = Color(red = 66, green = 31, blue = 0) + val Yellow100 = Color(red = 255, green = 255, blue = 255) + val Yellow20 = Color(red = 86, green = 45, blue = 0) + val Yellow30 = Color(red = 117, green = 66, blue = 0) + val Yellow40 = Color(red = 148, green = 87, blue = 0) + val Yellow50 = Color(red = 178, green = 108, blue = 0) + val Yellow60 = Color(red = 214, green = 132, blue = 0) + val Yellow70 = Color(red = 240, green = 157, blue = 0) + val Yellow80 = Color(red = 255, green = 187, blue = 41) + val Yellow90 = Color(red = 255, green = 223, blue = 153) + val Yellow95 = Color(red = 255, green = 240, blue = 209) + val Yellow99 = Color(red = 255, green = 251, blue = 240) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/theme/m3/Theme.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/theme/m3/Theme.kt new file mode 100644 index 00000000..590993d1 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/theme/m3/Theme.kt @@ -0,0 +1,149 @@ +package com.artemchep.keyguard.ui.theme.m3 + +import androidx.compose.material.Colors +import androidx.compose.material.darkColors +import androidx.compose.material.lightColors +import androidx.compose.ui.graphics.Color + +fun lightColorScheme( + primary: Color = ColorLight.Primary, + onPrimary: Color = ColorLight.OnPrimary, + primaryContainer: Color = ColorLight.PrimaryContainer, + onPrimaryContainer: Color = ColorLight.OnPrimaryContainer, + inversePrimary: Color = ColorLight.InversePrimary, + secondary: Color = ColorLight.Secondary, + onSecondary: Color = ColorLight.OnSecondary, + secondaryContainer: Color = ColorLight.SecondaryContainer, + onSecondaryContainer: Color = ColorLight.OnSecondaryContainer, + tertiary: Color = ColorLight.Tertiary, + onTertiary: Color = ColorLight.OnTertiary, + tertiaryContainer: Color = ColorLight.TertiaryContainer, + onTertiaryContainer: Color = ColorLight.OnTertiaryContainer, + background: Color = ColorLight.Background, + onBackground: Color = ColorLight.OnBackground, + surface: Color = ColorLight.Surface, + onSurface: Color = ColorLight.OnSurface, + surfaceVariant: Color = ColorLight.SurfaceVariant, + onSurfaceVariant: Color = ColorLight.OnSurfaceVariant, + inverseSurface: Color = ColorLight.InverseSurface, + inverseOnSurface: Color = ColorLight.InverseOnSurface, + error: Color = ColorLight.Error, + onError: Color = ColorLight.OnError, + errorContainer: Color = ColorLight.ErrorContainer, + onErrorContainer: Color = ColorLight.OnErrorContainer, + outline: Color = ColorLight.Outline, +): Colors = + lightColors( + primary = primary, + onPrimary = onPrimary, + secondary = secondary, + onSecondary = onSecondary, + background = background, + onBackground = onBackground, + surface = surface, + onSurface = onSurface, + error = error, + onError = onError, + ) + +/** + * Returns a dark Material color scheme. + */ +fun darkColorScheme( + primary: Color = ColorDark.Primary, + onPrimary: Color = ColorDark.OnPrimary, + primaryContainer: Color = ColorDark.PrimaryContainer, + onPrimaryContainer: Color = ColorDark.OnPrimaryContainer, + inversePrimary: Color = ColorDark.InversePrimary, + secondary: Color = ColorDark.Secondary, + onSecondary: Color = ColorDark.OnSecondary, + secondaryContainer: Color = ColorDark.SecondaryContainer, + onSecondaryContainer: Color = ColorDark.OnSecondaryContainer, + tertiary: Color = ColorDark.Tertiary, + onTertiary: Color = ColorDark.OnTertiary, + tertiaryContainer: Color = ColorDark.TertiaryContainer, + onTertiaryContainer: Color = ColorDark.OnTertiaryContainer, + background: Color = ColorDark.Background, + onBackground: Color = ColorDark.OnBackground, + surface: Color = ColorDark.Surface, + onSurface: Color = ColorDark.OnSurface, + surfaceVariant: Color = ColorDark.SurfaceVariant, + onSurfaceVariant: Color = ColorDark.OnSurfaceVariant, + inverseSurface: Color = ColorDark.InverseSurface, + inverseOnSurface: Color = ColorDark.InverseOnSurface, + error: Color = ColorDark.Error, + onError: Color = ColorDark.OnError, + errorContainer: Color = ColorDark.ErrorContainer, + onErrorContainer: Color = ColorDark.OnErrorContainer, + outline: Color = ColorDark.Outline, +): Colors = + darkColors( + primary = primary, + onPrimary = onPrimary, + secondary = secondary, + onSecondary = onSecondary, + background = background, + onBackground = onBackground, + surface = surface, + onSurface = onSurface, + error = error, + onError = onError, + ) + +internal object ColorLight { + val Background = Palette.Neutral95 + val Error = Palette.Error40 + val ErrorContainer = Palette.Error90 + val InverseOnSurface = Palette.Neutral95 + val InversePrimary = Palette.Primary80 + val InverseSurface = Palette.Neutral20 + val OnBackground = Palette.Neutral10 + val OnError = Palette.Error100 + val OnErrorContainer = Palette.Error10 + val OnPrimary = Palette.Primary100 + val OnPrimaryContainer = Palette.Primary10 + val OnSecondary = Palette.Secondary100 + val OnSecondaryContainer = Palette.Secondary10 + val OnSurface = Palette.Neutral10 + val OnSurfaceVariant = Palette.NeutralVariant30 + val OnTertiary = Palette.Tertiary100 + val OnTertiaryContainer = Palette.Tertiary10 + val Outline = Palette.NeutralVariant50 + val Primary = Palette.Primary40 + val PrimaryContainer = Palette.Primary90 + val Secondary = Palette.Secondary40 + val SecondaryContainer = Palette.Secondary90 + val Surface = Palette.Neutral99 + val SurfaceVariant = Palette.NeutralVariant90 + val Tertiary = Palette.Tertiary40 + val TertiaryContainer = Palette.Tertiary90 +} + +internal object ColorDark { + val Background = Palette.Neutral10 + val Error = Palette.Error80 + val ErrorContainer = Palette.Error30 + val InverseOnSurface = Palette.Neutral20 + val InversePrimary = Palette.Primary40 + val InverseSurface = Palette.Neutral90 + val OnBackground = Palette.Neutral90 + val OnError = Palette.Error20 + val OnErrorContainer = Palette.Error80 + val OnPrimary = Palette.Primary20 + val OnPrimaryContainer = Palette.Primary90 + val OnSecondary = Palette.Secondary20 + val OnSecondaryContainer = Palette.Secondary90 + val OnSurface = Palette.Neutral90 + val OnSurfaceVariant = Palette.NeutralVariant80 + val OnTertiary = Palette.Tertiary20 + val OnTertiaryContainer = Palette.Tertiary90 + val Outline = Palette.NeutralVariant60 + val Primary = Palette.Primary80 + val PrimaryContainer = Palette.Primary30 + val Secondary = Palette.Secondary80 + val SecondaryContainer = Palette.Secondary30 + val Surface = Palette.Neutral10 + val SurfaceVariant = Palette.NeutralVariant30 + val Tertiary = Palette.Tertiary80 + val TertiaryContainer = Palette.Tertiary30 +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/theme/monet/ColorSchemeFactory.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/theme/monet/ColorSchemeFactory.kt new file mode 100644 index 00000000..e8ad585b --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/theme/monet/ColorSchemeFactory.kt @@ -0,0 +1,67 @@ +package com.artemchep.keyguard.ui.theme.monet + +import dev.kdrag0n.colorkt.Color +import dev.kdrag0n.colorkt.cam.Zcam +import dev.kdrag0n.colorkt.data.Illuminants +import dev.kdrag0n.colorkt.rgb.Srgb +import dev.kdrag0n.colorkt.tristimulus.CieXyzAbs.Companion.toAbs +import dev.kdrag0n.colorkt.ucs.lab.CieLab + +interface ColorSchemeFactory { + fun getColor(color: Color): ColorScheme + + companion object { + fun getFactory( + // For all models + chromaFactor: Double, + accurateShades: Boolean, + useComplementColor: Boolean, + complementColorHex: Int, + // ZCAM only + whiteLuminance: Double, + useLinearLightness: Boolean, + ) = object : ColorSchemeFactory { + private val cond = createZcamViewingConditions(whiteLuminance) + private val complementColor = if (!useComplementColor || complementColorHex == 0) { + null + } else { + Srgb(complementColorHex) + } + + override fun getColor(color: Color) = DynamicColorScheme( + targets = MaterialYouTargets( + chromaFactor = chromaFactor, + useLinearLightness = useLinearLightness, + cond = cond, + ), + seedColor = color, + chromaFactor = chromaFactor, + cond = cond, + accurateShades = accurateShades, + complementColor = complementColor, + ) + } + + fun getFactory() = getFactory( + chromaFactor = 1.0, + accurateShades = true, + useComplementColor = false, + complementColorHex = 0, + whiteLuminance = 425.0, + useLinearLightness = false, + ) + + fun createZcamViewingConditions(whiteLuminance: Double) = Zcam.ViewingConditions( + surroundFactor = Zcam.ViewingConditions.SURROUND_AVERAGE, + // sRGB + adaptingLuminance = 0.4 * whiteLuminance, + // Gray world + backgroundLuminance = CieLab( + L = 50.0, + a = 0.0, + b = 0.0, + ).toXyz().y * whiteLuminance, + referenceWhite = Illuminants.D65.toAbs(whiteLuminance), + ) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/theme/monet/ColorSwatch.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/theme/monet/ColorSwatch.kt new file mode 100644 index 00000000..ebc7abfd --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/theme/monet/ColorSwatch.kt @@ -0,0 +1,20 @@ +package com.artemchep.keyguard.ui.theme.monet + +import dev.kdrag0n.colorkt.Color + +typealias ColorSwatch = Map + +abstract class ColorScheme { + abstract val neutral1: ColorSwatch + abstract val neutral2: ColorSwatch + + abstract val accent1: ColorSwatch + abstract val accent2: ColorSwatch + abstract val accent3: ColorSwatch + + // Helpers + val neutralColors: List + get() = listOf(neutral1, neutral2) + val accentColors: List + get() = listOf(accent1, accent2, accent3) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/theme/monet/DynamicColorScheme.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/theme/monet/DynamicColorScheme.kt new file mode 100644 index 00000000..f51a78c7 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/theme/monet/DynamicColorScheme.kt @@ -0,0 +1,101 @@ +package com.artemchep.keyguard.ui.theme.monet + +import dev.kdrag0n.colorkt.Color +import dev.kdrag0n.colorkt.cam.Zcam +import dev.kdrag0n.colorkt.cam.Zcam.Companion.toZcam +import dev.kdrag0n.colorkt.conversion.ConversionGraph.convert +import dev.kdrag0n.colorkt.gamut.LchGamut +import dev.kdrag0n.colorkt.gamut.LchGamut.clipToLinearSrgb +import dev.kdrag0n.colorkt.rgb.Srgb +import dev.kdrag0n.colorkt.tristimulus.CieXyz +import dev.kdrag0n.colorkt.tristimulus.CieXyzAbs.Companion.toAbs + +class DynamicColorScheme( + targets: ColorScheme, + seedColor: Color, + chromaFactor: Double = 1.0, + private val cond: Zcam.ViewingConditions, + private val accurateShades: Boolean = true, + complementColor: Color? = null, +) : ColorScheme() { + private val seedNeutral = + seedColor.convert().toAbs(cond.referenceWhite.y).toZcam(cond, include2D = false) + .let { lch -> + lch.copy(chroma = lch.chroma * chromaFactor) + } + private val seedAccent = seedNeutral + private val seedAccent3 = seedAccent.copy( + hue = complementColor?.convert() + ?.toAbs(cond.referenceWhite.y) + ?.toZcam(cond, include2D = false)?.hue + ?: (seedAccent.hue + ACCENT3_HUE_SHIFT_DEGREES), + ) + + // Main accent color. Generally, this is close to the seed color. + override val accent1 = transformSwatch(targets.accent1, seedAccent, targets.accent1) + + // Secondary accent color. Darker shades of accent1. + override val accent2 = transformSwatch(targets.accent2, seedAccent, targets.accent1) + + // Tertiary accent color. Seed color shifted to the next secondary color via hue offset. + override val accent3 = transformSwatch(targets.accent3, seedAccent3, targets.accent1) + + // Main background color. Tinted with the seed color. + override val neutral1 = transformSwatch(targets.neutral1, seedNeutral, targets.neutral1) + + // Secondary background color. Slightly tinted with the seed color. + override val neutral2 = transformSwatch(targets.neutral2, seedNeutral, targets.neutral1) + + private fun transformSwatch( + swatch: ColorSwatch, + seed: Zcam, + referenceSwatch: ColorSwatch, + ): ColorSwatch { + return swatch.map { (shade, color) -> + val target = color as? Zcam + ?: color.convert().toAbs(cond.referenceWhite.y) + .toZcam(cond, include2D = false) + val reference = referenceSwatch[shade]!! as? Zcam + ?: color.convert().toAbs(cond.referenceWhite.y) + .toZcam(cond, include2D = false) + val newLch = transformColor(target, seed, reference) + val newSrgb = newLch.convert() + shade to newSrgb + }.toMap() + } + + private fun transformColor(target: Zcam, seed: Zcam, reference: Zcam): Color { + // Keep target lightness. + val lightness = target.lightness + // Allow colorless gray and low-chroma colors by clamping. + // To preserve chroma ratios, scale chroma by the reference (A-1 / N-1). + val scaleC = if (reference.chroma == 0.0) { + // Zero reference chroma won't have chroma anyway, so use 0 to avoid a divide-by-zero + 0.0 + } else { + // Non-zero reference chroma = possible chroma scale + seed.chroma.coerceIn(0.0, reference.chroma) / reference.chroma + } + val chroma = target.chroma * scaleC + // Use the seed color's hue, since it's the most prominent feature of the theme. + val hue = seed.hue + + val newColor = Zcam( + lightness = lightness, + chroma = chroma, + hue = hue, + viewingConditions = cond, + ) + return if (accurateShades) { + newColor.clipToLinearSrgb(LchGamut.ClipMethod.PRESERVE_LIGHTNESS) + } else { + newColor.clipToLinearSrgb(LchGamut.ClipMethod.ADAPTIVE_TOWARDS_MID, alpha = 5.0) + } + } + + companion object { + // Hue shift for the tertiary accent color (accent3), in degrees. + // 60 degrees = shifting by a secondary color + private const val ACCENT3_HUE_SHIFT_DEGREES = 60.0 + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/theme/monet/MaterialYouTargets.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/theme/monet/MaterialYouTargets.kt new file mode 100644 index 00000000..2cf23b5c --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/theme/monet/MaterialYouTargets.kt @@ -0,0 +1,130 @@ +package com.artemchep.keyguard.ui.theme.monet + +import dev.kdrag0n.colorkt.Color +import dev.kdrag0n.colorkt.cam.Zcam +import dev.kdrag0n.colorkt.cam.Zcam.Companion.toZcam +import dev.kdrag0n.colorkt.rgb.LinearSrgb.Companion.toLinear +import dev.kdrag0n.colorkt.rgb.Srgb +import dev.kdrag0n.colorkt.tristimulus.CieXyz.Companion.toXyz +import dev.kdrag0n.colorkt.tristimulus.CieXyzAbs.Companion.toAbs +import dev.kdrag0n.colorkt.ucs.lab.CieLab + +/* + * Default target colors, conforming to Material You standards. + * + * Derived from AOSP and Pixel defaults. + */ +class MaterialYouTargets( + private val chromaFactor: Double = 1.0, + useLinearLightness: Boolean, + val cond: Zcam.ViewingConditions, +) : ColorScheme() { + companion object { + // Linear ZCAM lightness + private val LINEAR_LIGHTNESS_MAP = mapOf( + 0 to 100.0, + 10 to 99.0, + 20 to 98.0, + 50 to 95.0, + 100 to 90.0, + 200 to 80.0, + 300 to 70.0, + 400 to 60.0, + 500 to 50.0, + 600 to 40.0, + 650 to 35.0, + 700 to 30.0, + 800 to 20.0, + 900 to 10.0, + 950 to 5.0, + 1000 to 0.0, + ) + + // CIELAB lightness from AOSP defaults + private val CIELAB_LIGHTNESS_MAP = LINEAR_LIGHTNESS_MAP + .map { it.key to if (it.value == 50.0) 49.6 else it.value } + .toMap() + + // Accent colors from Pixel defaults + private val REF_ACCENT1_COLORS = listOf( + 0xd3e3fd, + 0xa8c7fa, + 0x7cacf8, + 0x4c8df6, + 0x1b6ef3, + 0x0b57d0, + 0x0842a0, + 0x062e6f, + 0x041e49, + ) + + private const val ACCENT1_REF_CHROMA_FACTOR = 1.2 + } + + override val neutral1: ColorSwatch + override val neutral2: ColorSwatch + + override val accent1: ColorSwatch + override val accent2: ColorSwatch + override val accent3: ColorSwatch + + init { + val lightnessMap = if (useLinearLightness) { + LINEAR_LIGHTNESS_MAP + } else { + CIELAB_LIGHTNESS_MAP + .map { it.key to cielabL(it.value) } + .toMap() + } + + // Accent chroma from Pixel defaults + // We use the most chromatic color as the reference + // A-1 chroma = avg(default Pixel Blue shades 100-900) + // Excluding very bright variants (10, 50) to avoid light bias + // A-1 > A-3 > A-2 + val accent1Chroma = calcAccent1Chroma() * ACCENT1_REF_CHROMA_FACTOR + val accent2Chroma = accent1Chroma / 3 + val accent3Chroma = accent2Chroma * 2 + + // Custom neutral chroma + val neutral1Chroma = accent1Chroma / 8 + val neutral2Chroma = accent1Chroma / 5 + + neutral1 = shadesWithChroma(neutral1Chroma, lightnessMap) + neutral2 = shadesWithChroma(neutral2Chroma, lightnessMap) + + accent1 = shadesWithChroma(accent1Chroma, lightnessMap) + accent2 = shadesWithChroma(accent2Chroma, lightnessMap) + accent3 = shadesWithChroma(accent3Chroma, lightnessMap) + } + + private fun cielabL(l: Double) = CieLab( + L = l, + a = 0.0, + b = 0.0, + ).toXyz().toAbs(cond.referenceWhite.y).toZcam(cond, include2D = false).lightness + + private fun calcAccent1Chroma() = REF_ACCENT1_COLORS + .map { + Srgb(it).toLinear().toXyz().toAbs(cond.referenceWhite.y) + .toZcam(cond, include2D = false).chroma + } + .average() + + private fun shadesWithChroma( + chroma: Double, + lightnessMap: Map, + ): Map { + // Adjusted chroma + val chromaAdj = chroma * chromaFactor + + return lightnessMap.map { + it.key to Zcam( + lightness = it.value, + chroma = chromaAdj, + hue = 0.0, + viewingConditions = cond, + ) + }.toMap() + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/theme/monet/getMonetNeutralColor.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/theme/monet/getMonetNeutralColor.kt new file mode 100644 index 00000000..28b9efd8 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/theme/monet/getMonetNeutralColor.kt @@ -0,0 +1,144 @@ +package com.artemchep.keyguard.ui.theme.monet + +import androidx.compose.material3.ColorScheme +import androidx.compose.material3.darkColorScheme +import androidx.compose.material3.lightColorScheme +import androidx.compose.ui.graphics.Color +import dev.kdrag0n.colorkt.conversion.ConversionGraph +import dev.kdrag0n.colorkt.rgb.Srgb +import com.artemchep.keyguard.ui.theme.monet.ColorScheme as MonetColorScheme + +/** + * To avoid editing the core Monet code by kdrag0n, these are extensions instead + */ +fun dev.kdrag0n.colorkt.Color.toArgb(): Int { + val srgb = ConversionGraph.convert(this, Srgb::class) as Srgb + return srgb.toRgb8() or (0xFF shl 24) +} + +private fun MonetColorScheme.getMonetNeutralColor( + type: Int, + shade: Int, +): Color { + val monetColor = when (type) { + 1 -> this.neutral1[shade] + else -> this.neutral2[shade] + }?.toArgb() ?: throw Exception("Neutral$type shade $shade doesn't exist") + return Color(monetColor) +} + +private fun MonetColorScheme.getMonetAccentColor( + type: Int, + shade: Int, +): Color { + val monetColor = when (type) { + 1 -> this.accent1[shade] + 2 -> this.accent2[shade] + else -> this.accent3[shade] + }?.toArgb() ?: throw Exception("Accent$type shade $shade doesn't exist") + return Color(monetColor) +} + +/** + * Any values that are not set will be chosen to best represent default values given by [dynamicLightColorScheme][androidx.compose.material3.dynamicLightColorScheme] + * on Android 12+ devices + */ +fun MonetColorScheme.lightMonetCompatScheme( + primary: Color = getMonetAccentColor(1, 700), + onPrimary: Color = getMonetNeutralColor(1, 50), + primaryContainer: Color = getMonetAccentColor(2, 100), + onPrimaryContainer: Color = getMonetAccentColor(1, 900), + inversePrimary: Color = getMonetAccentColor(1, 200), + secondary: Color = getMonetAccentColor(2, 700), + onSecondary: Color = getMonetNeutralColor(1, 50), + secondaryContainer: Color = getMonetAccentColor(2, 100), + onSecondaryContainer: Color = getMonetAccentColor(2, 900), + tertiary: Color = getMonetAccentColor(3, 600), + onTertiary: Color = getMonetNeutralColor(1, 50), + tertiaryContainer: Color = getMonetAccentColor(3, 100), + onTertiaryContainer: Color = getMonetAccentColor(3, 900), + background: Color = getMonetNeutralColor(1, 50), + onBackground: Color = getMonetNeutralColor(1, 900), + surface: Color = getMonetNeutralColor(1, 50), + onSurface: Color = getMonetNeutralColor(1, 900), + surfaceVariant: Color = getMonetNeutralColor(2, 100), + onSurfaceVariant: Color = getMonetNeutralColor(2, 700), + inverseSurface: Color = getMonetNeutralColor(1, 800), + inverseOnSurface: Color = getMonetNeutralColor(2, 50), + outline: Color = getMonetAccentColor(2, 500), +): ColorScheme = lightColorScheme( + primary = primary, + onPrimary = onPrimary, + primaryContainer = primaryContainer, + onPrimaryContainer = onPrimaryContainer, + inversePrimary = inversePrimary, + secondary = secondary, + onSecondary = onSecondary, + secondaryContainer = secondaryContainer, + onSecondaryContainer = onSecondaryContainer, + tertiary = tertiary, + onTertiary = onTertiary, + tertiaryContainer = tertiaryContainer, + onTertiaryContainer = onTertiaryContainer, + background = background, + onBackground = onBackground, + surface = surface, + onSurface = onSurface, + surfaceVariant = surfaceVariant, + onSurfaceVariant = onSurfaceVariant, + inverseSurface = inverseSurface, + inverseOnSurface = inverseOnSurface, + outline = outline, +) + +/** + * Any values that are not set will be chosen to best represent default values given by [dynamicDarkColorScheme][androidx.compose.material3.dynamicDarkColorScheme] + * on Android 12+ devices + */ +fun MonetColorScheme.darkMonetCompatScheme( + primary: Color = getMonetAccentColor(1, 200), + onPrimary: Color = getMonetAccentColor(1, 800), + primaryContainer: Color = getMonetAccentColor(1, 600), + onPrimaryContainer: Color = getMonetAccentColor(2, 100), + inversePrimary: Color = getMonetAccentColor(1, 600), + secondary: Color = getMonetAccentColor(2, 200), + onSecondary: Color = getMonetAccentColor(2, 800), + secondaryContainer: Color = getMonetAccentColor(2, 700), + onSecondaryContainer: Color = getMonetAccentColor(2, 100), + tertiary: Color = getMonetAccentColor(3, 200), + onTertiary: Color = getMonetAccentColor(3, 700), + tertiaryContainer: Color = getMonetAccentColor(3, 700), + onTertiaryContainer: Color = getMonetAccentColor(3, 100), + background: Color = getMonetNeutralColor(1, 900), + onBackground: Color = getMonetNeutralColor(1, 100), + surface: Color = getMonetNeutralColor(1, 900), + onSurface: Color = getMonetNeutralColor(1, 100), + surfaceVariant: Color = getMonetNeutralColor(2, 700), + onSurfaceVariant: Color = getMonetNeutralColor(2, 200), + inverseSurface: Color = getMonetNeutralColor(1, 100), + inverseOnSurface: Color = getMonetNeutralColor(1, 800), + outline: Color = getMonetNeutralColor(2, 500), +): ColorScheme = darkColorScheme( + primary = primary, + onPrimary = onPrimary, + primaryContainer = primaryContainer, + onPrimaryContainer = onPrimaryContainer, + inversePrimary = inversePrimary, + secondary = secondary, + onSecondary = onSecondary, + secondaryContainer = secondaryContainer, + onSecondaryContainer = onSecondaryContainer, + tertiary = tertiary, + onTertiary = onTertiary, + tertiaryContainer = tertiaryContainer, + onTertiaryContainer = onTertiaryContainer, + background = background, + onBackground = onBackground, + surface = surface, + onSurface = onSurface, + surfaceVariant = surfaceVariant, + onSurfaceVariant = onSurfaceVariant, + inverseSurface = inverseSurface, + inverseOnSurface = inverseOnSurface, + outline = outline, +) diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/toolbar/CustomToolbar.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/toolbar/CustomToolbar.kt new file mode 100644 index 00000000..bbd3ba7c --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/toolbar/CustomToolbar.kt @@ -0,0 +1,168 @@ +package com.artemchep.keyguard.ui.toolbar + +import androidx.compose.animation.animateColorAsState +import androidx.compose.animation.core.AnimationSpec +import androidx.compose.animation.core.AnimationState +import androidx.compose.animation.core.DecayAnimationSpec +import androidx.compose.animation.core.FastOutLinearInEasing +import androidx.compose.animation.core.Spring +import androidx.compose.animation.core.animateDecay +import androidx.compose.animation.core.animateTo +import androidx.compose.animation.core.spring +import androidx.compose.foundation.gestures.Orientation +import androidx.compose.foundation.gestures.draggable +import androidx.compose.foundation.gestures.rememberDraggableState +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.windowInsetsPadding +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Surface +import androidx.compose.material3.TopAppBarDefaults +import androidx.compose.material3.TopAppBarScrollBehavior +import androidx.compose.material3.TopAppBarState +import androidx.compose.material3.surfaceColorAtElevation +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clipToBounds +import androidx.compose.ui.graphics.lerp +import androidx.compose.ui.layout.onGloballyPositioned +import androidx.compose.ui.platform.LocalDensity +import androidx.compose.ui.unit.Velocity +import androidx.compose.ui.unit.dp +import kotlin.math.abs + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun CustomToolbar( + modifier: Modifier = Modifier, + scrollBehavior: TopAppBarScrollBehavior?, + content: @Composable () -> Unit, +) { + val containerColor = MaterialTheme.colorScheme.surface + val scrolledContainerColor = MaterialTheme.colorScheme.surfaceColorAtElevation( + elevation = 3.0.dp, + ) + val windowInsets = TopAppBarDefaults.windowInsets + + // Obtain the container color from the TopAppBarColors using the `overlapFraction`. This + // ensures that the colors will adjust whether the app bar behavior is pinned or scrolled. + // This may potentially animate or interpolate a transition between the container-color and the + // container's scrolled-color according to the app bar's scroll state. + val colorTransitionFraction = scrollBehavior?.state?.overlappedFraction ?: 0f + val fraction = if (colorTransitionFraction > 0.01f) 1f else 0f + val appBarContainerColor by animateColorAsState( + targetValue = lerp( + containerColor, + scrolledContainerColor, + FastOutLinearInEasing.transform(fraction), + ), + animationSpec = spring(stiffness = Spring.StiffnessMediumLow), + ) + + // Set up support for resizing the top app bar when vertically dragging the bar itself. + val appBarDragModifier = if (scrollBehavior != null && !scrollBehavior.isPinned) { + Modifier.draggable( + orientation = Orientation.Vertical, + state = rememberDraggableState { delta -> + scrollBehavior.state.heightOffset = scrollBehavior.state.heightOffset + delta + }, + onDragStopped = { velocity -> + settleAppBar( + scrollBehavior.state, + velocity, + scrollBehavior.flingAnimationSpec, + scrollBehavior.snapAnimationSpec, + ) + }, + ) + } else { + Modifier + } + + // Compose a Surface with a TopAppBarLayout content. + // The surface's background color is animated as specified above. + // The height of the app bar is determined by subtracting the bar's height offset from the + // app bar's defined constant height value (i.e. the ContainerHeight token). + Surface(modifier = modifier.then(appBarDragModifier), color = appBarContainerColor) { + val height = LocalDensity.current.run { + 64.dp.toPx() + ( + scrollBehavior?.state?.heightOffset + ?: 0f + ) + } + Box( + modifier = Modifier + .windowInsetsPadding(windowInsets) + // clip after padding so we don't know the title over the inset area + .clipToBounds() + .onGloballyPositioned { coordinates -> + // Sets the app bar's height offset to collapse the entire bar's height when content is + // scrolled. + val heightOffsetLimit = -coordinates.size.height.toFloat() + if (scrollBehavior?.state?.heightOffsetLimit != heightOffsetLimit) { + scrollBehavior?.state?.heightOffsetLimit = heightOffsetLimit + } + }, + ) { + content() + } + } +} + +/** + * Settles the app bar by flinging, in case the given velocity is greater than zero, and snapping + * after the fling settles. + */ +@OptIn(ExperimentalMaterial3Api::class) +private suspend fun settleAppBar( + state: TopAppBarState, + velocity: Float, + flingAnimationSpec: DecayAnimationSpec?, + snapAnimationSpec: AnimationSpec?, +): Velocity { + // Check if the app bar is completely collapsed/expanded. If so, no need to settle the app bar, + // and just return Zero Velocity. + // Note that we don't check for 0f due to float precision with the collapsedFraction + // calculation. + if (state.collapsedFraction < 0.01f || state.collapsedFraction == 1f) { + return Velocity.Zero + } + var remainingVelocity = velocity + // In case there is an initial velocity that was left after a previous user fling, animate to + // continue the motion to expand or collapse the app bar. + if (flingAnimationSpec != null && abs(velocity) > 1f) { + var lastValue = 0f + AnimationState( + initialValue = 0f, + initialVelocity = velocity, + ) + .animateDecay(flingAnimationSpec) { + val delta = value - lastValue + val initialHeightOffset = state.heightOffset + state.heightOffset = initialHeightOffset + delta + val consumed = abs(initialHeightOffset - state.heightOffset) + lastValue = value + remainingVelocity = this.velocity + // avoid rounding errors and stop if anything is unconsumed + if (abs(delta - consumed) > 0.5f) this.cancelAnimation() + } + } + // Snap if animation specs were provided. + if (snapAnimationSpec != null) { + if (state.heightOffset < 0 && + state.heightOffset > state.heightOffsetLimit + ) { + AnimationState(initialValue = state.heightOffset).animateTo( + if (state.collapsedFraction < 0.5f) { + 0f + } else { + state.heightOffsetLimit + }, + animationSpec = snapAnimationSpec, + ) { state.heightOffset = value } + } + } + + return Velocity(0f, remainingVelocity) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/toolbar/LargeToolbar.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/toolbar/LargeToolbar.kt new file mode 100644 index 00000000..f1674641 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/toolbar/LargeToolbar.kt @@ -0,0 +1,38 @@ +package com.artemchep.keyguard.ui.toolbar + +import androidx.compose.foundation.layout.RowScope +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.LargeTopAppBar +import androidx.compose.material3.TopAppBarScrollBehavior +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import com.artemchep.keyguard.platform.CurrentPlatform +import com.artemchep.keyguard.platform.Platform + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun LargeToolbar( + title: @Composable () -> Unit, + modifier: Modifier = Modifier, + navigationIcon: @Composable () -> Unit = {}, + actions: @Composable RowScope.() -> Unit = {}, + scrollBehavior: TopAppBarScrollBehavior? = null, +) { + if (CurrentPlatform is Platform.Desktop) { + SmallToolbar( + title = title, + modifier = modifier, + navigationIcon = navigationIcon, + actions = actions, + scrollBehavior = scrollBehavior, + ) + return + } + LargeTopAppBar( + title = title, + modifier = modifier, + navigationIcon = navigationIcon, + actions = actions, + scrollBehavior = scrollBehavior, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/toolbar/SmallToolbar.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/toolbar/SmallToolbar.kt new file mode 100644 index 00000000..3f0ab05b --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/toolbar/SmallToolbar.kt @@ -0,0 +1,26 @@ +package com.artemchep.keyguard.ui.toolbar + +import androidx.compose.foundation.layout.RowScope +import androidx.compose.material3.ExperimentalMaterial3Api +import androidx.compose.material3.TopAppBar +import androidx.compose.material3.TopAppBarScrollBehavior +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier + +@OptIn(ExperimentalMaterial3Api::class) +@Composable +fun SmallToolbar( + title: @Composable () -> Unit, + modifier: Modifier = Modifier, + navigationIcon: @Composable () -> Unit = {}, + actions: @Composable RowScope.() -> Unit = {}, + scrollBehavior: TopAppBarScrollBehavior? = null, +) { + TopAppBar( + title = title, + modifier = modifier, + navigationIcon = navigationIcon, + actions = actions, + scrollBehavior = scrollBehavior, + ) +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/toolbar/content/ContentToolbar.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/toolbar/content/ContentToolbar.kt new file mode 100644 index 00000000..7f89f510 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/toolbar/content/ContentToolbar.kt @@ -0,0 +1,64 @@ +package com.artemchep.keyguard.ui.toolbar.content + +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.heightIn +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.text.style.TextOverflow +import androidx.compose.ui.unit.dp + +private val toolbarMinHeight = 64.dp + +@Composable +fun CustomToolbarContent( + modifier: Modifier = Modifier, + title: String, + icon: @Composable () -> Unit = {}, + actions: @Composable () -> Unit = {}, +) { + Row( + modifier = modifier + .heightIn(min = toolbarMinHeight), + verticalAlignment = Alignment.Top, + ) { + Spacer(Modifier.width(4.dp)) + Box( + modifier = Modifier + .heightIn(min = toolbarMinHeight), + contentAlignment = Alignment.Center, + ) { + icon() + } + Spacer(Modifier.width(4.dp)) + Column( + modifier = Modifier + .weight(1f) + .align(Alignment.CenterVertically) + .padding(vertical = 4.dp), + ) { + Text( + text = title, + style = MaterialTheme.typography.titleLarge, + overflow = TextOverflow.Ellipsis, + maxLines = 2, + ) + } + Spacer(Modifier.width(8.dp)) + Box( + modifier = Modifier + .heightIn(min = toolbarMinHeight), + contentAlignment = Alignment.Center, + ) { + actions() + } + Spacer(Modifier.width(4.dp)) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/totp/formatTotp.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/totp/formatTotp.kt new file mode 100644 index 00000000..44aaaf62 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/totp/formatTotp.kt @@ -0,0 +1,50 @@ +package com.artemchep.keyguard.ui.totp + +import androidx.compose.ui.text.AnnotatedString +import androidx.compose.ui.text.buildAnnotatedString +import com.artemchep.keyguard.common.model.TotpCode +import com.artemchep.keyguard.ui.asCodePointsSequence +import kotlinx.collections.immutable.PersistentList +import kotlinx.collections.immutable.toPersistentList + +fun TotpCode.formatCode(): AnnotatedString = buildAnnotatedString { + code + .windowed( + size = 3, + step = 3, + partialWindows = true, + ) + .forEachIndexed { index, text -> + if (index != 0) { + append(" ") + } + append(text) + } +} + +fun TotpCode.formatCode2(): PersistentList> = code + .windowed( + size = 3, + step = 3, + partialWindows = true, + ) + .map { + it.asCodePointsSequence() + .toList() + } + .toPersistentList() + +fun TotpCode.formatCodeStr(): String = buildString { + code + .windowed( + size = 3, + step = 3, + partialWindows = true, + ) + .forEachIndexed { index, text -> + if (index != 0) { + append(" ") + } + append(text) + } +} diff --git a/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/util/Divider.kt b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/util/Divider.kt new file mode 100644 index 00000000..5a070a89 --- /dev/null +++ b/common/src/commonMain/kotlin/com/artemchep/keyguard/ui/util/Divider.kt @@ -0,0 +1,69 @@ +package com.artemchep.keyguard.ui.util + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.fillMaxHeight +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.height +import androidx.compose.foundation.layout.width +import androidx.compose.material3.LocalAbsoluteTonalElevation +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.compositeOver +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.feature.home.vault.component.surfaceColorAtElevation +import com.artemchep.keyguard.ui.theme.combineAlpha + +val DividerColor + @Composable + get() = + LocalContentColor.current.combineAlpha(0.12f) + +val DividerSize get() = 1.dp + +@Composable +fun VerticalDivider( + modifier: Modifier = Modifier, + transparency: Boolean = true, +) { + Divider( + modifier = modifier + .fillMaxHeight() + .width(DividerSize), + transparency = transparency, + ) +} + +@Composable +fun HorizontalDivider( + modifier: Modifier = Modifier, + transparency: Boolean = true, +) = Divider( + modifier = modifier + .fillMaxWidth() + .height(DividerSize), + transparency = transparency, +) + +@Composable +private fun Divider( + modifier: Modifier = Modifier, + transparency: Boolean, +) { + val dividerColor = DividerColor + val backgroundColor = + if (transparency) { + dividerColor + } else { + val elevation = LocalAbsoluteTonalElevation.current + val background = MaterialTheme.colorScheme + .surfaceColorAtElevation(elevation) + dividerColor.compositeOver(background) + } + Box( + modifier = modifier + .background(backgroundColor), + ) +} diff --git a/common/src/commonMain/resources/MR/af-rZA/plurals.xml b/common/src/commonMain/resources/MR/af-rZA/plurals.xml new file mode 100644 index 00000000..5f2db8ad --- /dev/null +++ b/common/src/commonMain/resources/MR/af-rZA/plurals.xml @@ -0,0 +1,2 @@ + + diff --git a/common/src/commonMain/resources/MR/af-rZA/strings.xml b/common/src/commonMain/resources/MR/af-rZA/strings.xml new file mode 100644 index 00000000..214f4486 --- /dev/null +++ b/common/src/commonMain/resources/MR/af-rZA/strings.xml @@ -0,0 +1,868 @@ + + + OK + Close + Yes + No + + Name + Account name + Username + Password + App password + Current password + New password + Email + Verified + Not verified + Email visibility + Public URL + URL + + Access count + Learn more + Phone number + Passport number + License number + Card number + No card number + Brand + Security code + Valid from + Valid to + Card expiry month + Card expiry year + Cardholder name + Valid from + Expiry date + Company + Sync + + Hidden + + Visible + + Empty + + SSN + City + State + Info + Cancel + Continue + Country + Address + Postal code + Pull to search + Save + URI + URIs + Note + Notes + Attachments + No attachments + Expiring soon + Incomplete data + This item is missing some of the important information. + Item + Items + %1$s items + All items + No items + No folder + New folder + Folder + Folders + No folders + No collection + Collection + Collections + No collections + My vault + Organization + Organizations + No organizations + Miscellaneous + Add integration + Account + Accounts + No accounts + No account + Type + Options + Send + Reset + Length + Security + Contact info + Title + First name + Middle name + Last name + Full name + Address line 1 + Address line 2 + Address line 3 + Rename + Select type + Autofill + Passkey + Create a passkey + Unlock Keyguard + Confirming auth request… + Passkeys + + Signature counter + + Relying party + + Discoverable + Username + Display name + API key + Domain + Edit + Delete + Remove + Remove from the history + Reused password + Reused passwords + One-time password + Authenticator key + Use + Save passkey + Passkey available + Two-factor authentication available + Custom + Follow system settings + + Coming soon + Powered by + Verification code + Re-send verification code + Requested a verification email + Web vault + Launch Web vault + + Remember me + + Trash + + Download + Downloads + No downloads + No duplicates + Encryption + + Key + Hash + Salt + 256-bit AES + Random %1$d-bits of data + None + Text + Linked apps + Linked URIs + Custom fields + Reveal a secure note + Hide a secure note + Master password hint + Fingerprint phrase + What is a fingerprint? + Bitwarden premium + Unofficial Bitwarden server + Last synced at %1$s + Change name + Change color + Change master password hint + Sign out + Sign in + Visit Web vault to verify your email address + Upgrade your account to a premium membership and unlock some great additional features + Two-factor authentication + Require login verification with another device such as a security key, authenticator app, SMS or email + Active + Items + Log out + Log out? + All of the not synchronized changes will be lost! + Change name + Change names + Delete folder? + Delete folders? + This item(s) will be deleted immediately. You can not undo this action. + Recently opened + Often opened + View details + Save to + Add to favourites + Remove from favourites + Enable auth re-prompt + Disable auth re-prompt + Edit + Merge into… + Copy to… + Move to folder + Change name + Change names + Add password + Add passwords + Change password + Change passwords + View password history + Trash + Restore + Delete forever + Move associated items to trash + Open with… + Send with… + Open in a file manager + Delete local file + View parent item + Always show keyboard + Sync vault + Lock vault + Rename folder + Check the email in known data breaches + Check the username in known data breaches + Check the password in known data breaches + Check the website in known data breaches + Launch app + Launch website + Launch docs + Launch browser + Launch main page + Launch Play store + Launch with %1$s + Launch with… + How to delete an account? + Unsecure + Match app + Match detection + Base domain + Match resources by top-level and second-level domain. + Host + Match resources by hostname and (if specified) port. + Starts with + Match resources when the detected resource starts with the URI. + Exact + Match resources when the detected resource exactly matches the URI. + Regular expression + Match resources by regular expression. Advanced option. + Never + Ignore URI during auto-fill item search. + %1$s linked to the password + %1$s linked to the username + %1$s linked to the cardholder name + %1$s linked to the expiration month + %1$s linked to the expiration year + %1$s linked to the card code + %1$s linked to the card brand + %1$s linked to the card number + %1$s linked to the title + %1$s linked to the middle name + %1$s linked to the address line (1) + %1$s linked to the address line (2) + %1$s linked to the address line (3) + %1$s linked to the city + %1$s linked to the state + %1$s linked to the postal code + %1$s linked to the country + %1$s linked to the company + %1$s linked to the email + %1$s linked to the phone number + %1$s linked to the SSN + %1$s linked to the username + %1$s linked to the passport number + %1$s linked to the license number + %1$s linked to the first name + %1$s linked to the last name + %1$s linked to the full name + %1$s linked to an unknown field + Share with… + %1$d selected + Copy + Copy value + Copy URL + Copy URI + Copy package name + Copy password + Copy username + Copy email + Copy phone number + Copy passport number + Copy license number + Copy card number + Copy cardholder name + Copy expiration year + Copy expiration month + Copy CVV code + Copy one-time password + Copy secret key + Unlock Keyguard + Open Keyguard + January + February + March + April + May + June + July + August + September + October + November + December + Move up + Move down + Remove + Remove an item? + Add more + FIDO2 WebAuthn + Authenticate WebAuthn + Return to app + + Must not be empty + + Must not be blank + Must be custom domain + Must contain only US-ASCII characters + Must be at least %1$d symbols long + Must be %1$d symbols long + Invalid domain + Invalid email + Invalid URL + Invalid URI + Invalid card number + Incorrect password + Failed to generate OTP code + Failed to create a passkey + Failed to authorize a request + + Barcode + Show as Barcode + Copy this authenticator to another device by scanning the QR code. + + Date picker + + Color picker + + How to delete an account? + A collection of info of how to delete your account from web services + + Easy + + Medium + + Hard + + Limited availability + + Impossible + Send email + Search websites + No instructions + Two-factor authentication + List of websites with two-factor authentication support + Search websites + Passkeys + List of websites with passkeys support + Search websites + + Data breach + Breached account data can provide malicious actors with access to sensitive personal and financial information, potentially leading to identity theft, financial fraud, and other forms of cybercrime. + No breaches found + Breached accounts found + Breaches + Occurred on %1$s + Reported on %1$s + Failed to check data breaches. You might currently be offline + Data breach + A password that is found in the data breaches takes significantly less time to break and should never be used. + Password is compromised + The password has been identified in known data breaches. Please change it immediately to protect your online security + No breaches found + Failed to check data breaches. You might currently be offline + + Large Type + Show in Large Type + Show in Large Type and Lock vault + App Picker + Search installed apps + System app + No apps + Choose a folder + Create a new folder: + + This organization will have an ownership of the copy. You will not be the direct owner. + Email forwarders + Email forwarders + Delete email forwarder? + Delete email forwarders? + Email forwarder integration + No email forwarders + Create an encrypted vault where the local data will be stored. + App password + Biometric authentication + Create a vault + Send crash reports + Create a vault + Erase app data + Close the app and erase all local app data + The vault is locked. Enter your app password to continue. + Unlock + + Unlock a vault + + Use biometric authentication to unlock the vault. + User verification is required. Enter your app password to continue. + Verify + Sync status + Up to date + Pending + Syncing + Sync failed + New item + Edit item + Style text with %1$s or %2$s and more. Limited Markdown syntax is supported. + italic + bold + Render preview + Auth re-prompt + Ask to authenticate again when you view or autofill a cipher + Add Bitwarden account + We are not affiliated, associated, authorized, endorsed by, or in any way officially connected with the Bitwarden, Inc., or any of its subsidiaries or its affiliates. + + To pass the captcha verification on an unofficial Bitwarden client, you must specify the client secret. To find it, visit Web vault / Settings / API Key. + + Client secret + Sign in + Region + United States + Europe + Custom (self-hosted) + HTTP headers + HTTP header + You can add custom HTTP headers that will be sent with every request to the server. + Key + Value + Add more + Server URL + Specify the base URL of your self-hosted Bitwarden installation. + Custom environment + You can specify the base URL of each service independently. + Web Vault Server URL + API Server URL + Icons Server URL + Identity Server URL + Verification + This authentication method is not supported yet. + Enter the verification code from your authenticator app. + Enter the verification code that was emailed to %1$s. + Enter the YubiKey authentication code manually. Place the cursor on the field below and trigger the YubiKey. + Authenticator + Duo (Organization) + FIDO2 Web Authentication + Email + FIDO U2F + Connect YubiKey via USB + Requires USB OTG support. + Touch the gold sensor on your YubiKey now. + Hold your YubiKey flat against the back of your device + Requires NFC support. + Failed to read YubiKey + Using FIDO2 WebAuthn requires using the Bitwarden Web vault version %1$s or higher. On older versions the authentication result will incorrectly be forwarded to the official Bitwarden app. + Confirm access + This data is protected, to continue please enter your app password. + + Confirm access + + Use biometric authentication to confirm your access and unlock this data. + Vault + Send + Generator + Watchtower + Settings + Locked due to inactivity + Text + File + Login + Card + Identity + Note + Passkey + Text + Boolean + Linked + + Pwned + Very strong + Strong + Good + Fair + Weak + Very strong passwords + Strong passwords + Good passwords + Fair passwords + Weak passwords + Filter + No filters available + Sort by + No sorting available + Title + Alphabetically + Reverse Alphabetically + Access count + Largest First + Smallest First + Modification date + Newest First + Oldest First + Expiration date + Newest First + Oldest First + Deletion date + Newest First + Oldest First + Password + Alphabetically + Reverse Alphabetically + Password modification date + Newest First + Oldest First + Password strength + Weakest First + Strongest First + Search vault + New item + There are no suggested items available for this context + + Security code + Saved to %1$s at %2$s + Password last modified at %1$s + Passkey created at %1$s + Last modified at %1$s + Created at %1$s + Deleted at %1$s + Expired at %1$s + Expiration scheduled at %1$s + Deleting scheduled at %1$s + + Call + + Text + + Email + + Directions + Sends + Search sends + New item + A password is required to access this share + Generator + Username generator + Password generator + Generate + Regenerate + Passphrase + Random passphrases provide the best combination of memorability and security. + Delimiter + Capitalize + Number + Username + Delimiter + Custom word + Capitalize + Number + Random symbols + A strong password has at least %1$d characters, uppercase & lowercase letters, digits and symbols. + Digits + Symbols + Uppercase letters + Lowercase letters + + Exclude similar symbols + + Exclude ambiguous symbols + Catch-all email + A catch-all email address provides users the option to receive all mail sent to their domain, even if they are sent to an email address that has not been set up for their domain. Ensure that your email hosting supports this feature before using it. + + Domain + Plus addressing email + Plus addressing means any email sent to %1$s is still sent to your account. This means you can have a lot of variations on your email address to give out to different people, sites, or mailing lists. Ensure that your email hosting supports this feature before using it. + Email + Subdomain addressing email + Subdomain addressing means any email sent to %1$s is still sent to your account. This means you can have a lot of variations on your email address to give out to different people, sites, or mailing lists. Ensure that your email hosting supports this feature before using it. + Email + Forwarded email alias + Create new login with the password + Create new login with the username + Password history + Show tips + Generator history + Clear history + Clear generator history? + This will remove all items from the history. + Password history + Clear history + Clear password history? + This will remove all passwords from the history. + Watchtower + Password strength + Security + Maintenance + Pwned Passwords + Passwords that have been exposed in data breaches. Such passwords should be changed immediately. + Reused Passwords + Don\'t use the same password on multiple websites. Generate unique passwords to improve security. + Vulnerable Accounts + Sites that were affected by a data breach since you last changed a password. Change your password to keep your account safe. + Unsecure Websites + Change the URLs that use HTTP protocol to use HTTPS protocol, as the latter utilizes the most advanced encryption available. + Inactive two-factor authentication + Sites that have two-factor authentication available but you haven\'t set it up yet. + Available Passkeys + Sites that have passkey available but you haven\'t set it up yet. It\'s simpler and more secure then a password. + Incomplete Items + Helps you identify missing or incomplete data in your vault. This can refer to identities with missing names or logins without usernames. + Expiring Items + Items that have expired or are expiring soon. + Duplicate URIs + Items that have one or more URIs that cover the same websites after applying the match detection. + Trashed Items + Items that have been moved into the trash. Having too many items in the trash may slow down operations with your vault. + Empty Folders + Folders that do not have any items in them. + Duplicate Items + Helps you identify and eliminate duplicate items in your vault. + Compromised Accounts + Check data breaches by a username or email address. + Change app password + Change password + Biometric authentication + + Change app password + App password never gets stored on the device nor sent over the network. It is used to generate a secret key that is used to encrypt the local data. + Unless you suspect unauthorized access or discover a malware on the device, there is no need to change the password if it is a strong, unique password. + Contact us + Your message + Use English to ensure that your feedback doesn\'t get misunderstood. + We appreciate the time that you spend sending us a message. Your message goes directly to us and we use it to troubleshoot issues, make product improvements and fix problems. While we may not reply to every report, we\'re reviewing and working on improvements & fixing issues as fast as we can. + Accounts + Add account + Team behind the app + I\'m a Software engineer from Ukraine. I specialize on app design and development. + Follow me + Search + Settings + Search settings + Appearance + Autofill + Development + Experimental + Settings + Notifications + Other + Permissions + Security + Keyguard Premium + Watchtower + Open-source licenses + Accounts + Add & view accounts + Autofill + Android Autofill & Credential services + Security + Biometrics, change password, vault timeout + Keyguard Premium + Unlock features & support app development + Watchtower + Compromised services, vulnerable passwords + Notifications + Alerts + Appearance + Language, theme and animations + Development + Test settings for development + Other + Community websites, app info + Show labels on navigation buttons + App version + App build date + Team behind the app + Reddit community + GitHub project + Crowdin project + Open-source licenses + Download APK file + Load App icons + Load Website icons + Queuing website icon might leak the website address to internet provider + Rich text formatting + Use Markdown to format notes + Language + Suggest translation + Font + Rate on Play Store + Tint color + Theme + Use contrast black theme + Open links in external browser + Conceal fields + Conceal sensitive info, such as passwords and credit card numbers + + Crash + Credential provider + Passkeys, passwords and data services + Privacy policy + Contact us + Experimental + Change app password + Require app password + In addition to your regular security settings, your app password will be required after this time or when biometry settings are changed + Immediately + Never + Send crash reports + Transition animation + Erase app data + Close the app and erase all local app data + Allow screenshots + Show the content of the app when switching between recent apps and allow capturing a screen + Hide the content of the app when switching between recent apps and forbid capturing a screen + Data safety + Lock vault + Lock after a reboot + Lock the vault after a device reboot + Lock when screen turns off + Lock the vault after a few seconds once the screen is off + Lock after a delay + Immediately + Never + Persist vault key on a disk + Vault key is persisted on an internal storage + Vault is locked after the app is unloaded from the memory + Storing a vault key on a disk is a security risk. If the device\'s internal storage is compromised, the attacker will gain access to the local vault data. + Permissions + Features overview + Biometric unlock + + Biometric unlock + Keep the screen on while viewing items + Autofill service + Use the Android Autofill Framework to assist in filling login information into other apps on the device + Auto-copy one-time passwords + When filling a login information, automatically copy one-time passwords + Inline suggestions + Embeds autofill suggestions directly into compatible keyboards + Manual selection + Displays an option to manually search a vault for an entry + Respect Autofill disabled flag + Disables autofill for a browser field that has autofill disabled flag set + Note that some websites are notorious for disabling autofill for a password field as well as some browsers are notorious for ignoring the autofill disabled flag + Ask to save data + Asks for updating the vault when filling of a form has completed + Auto-save app or website info + Automatically clear clipboard + Immediately + Never + One-time password notification duration + When you autofill a login item that has a one-time password, the notification with verification code will popup for at least the defined duration + Never + About Keyguard membership + The Premium unlocks extra features and funds a development of the app. Thank you for supporting us! ❤️ + Subscriptions + Products + Failed to load a list of subscriptions + Failed to load a list of products + Active + Will not renew + Manage on Play Store + Post notifications + Used to post downloading notifications + Camera + Used to scan QR codes + Allow two panel layout in landscape mode + Allow two panel layout in portrait mode + Dark + Light + Disabled + Dynamic + Crossfade + Developed specifically to increase legibility for readers with low vision, and to improve comprehension + Features Overview + Keyguard Premium + Multiple Accounts + Sign-in to multiple accounts simultaneously. + Two-way sync + Add or edit items and sync the changes back. + Offline editing + Add or edit items without internet connection. + Search + Search by anything + Name, email, password, phone number etc. + Filter + Filter by folder, organization, type etc. + Multiple keywords + Search by \'bitw test\' to find your \'Bitwarden Test Account\' item. + Watchtower + Pwned passwords + Find items with exposed in data breaches passwords. + Password strength + Find items with weak passwords. + Reused passwords + Find items with reused passwords. + Inactive 2FA + Find logins with available TOTP two-factor authentication. + Unsecure websites + Find websites that use HTTP protocol, auto-fix to HTTPS. + Incomplete items + Find empty items that might need updates. + Expiring items + Find expired or soon to be expired items. + Duplicate items + Find and merge duplicate items. + Misc + Multi-selection + Merge ciphers, fasten the refactoring with batch operations. + Show as Barcode + Encode a text as different barcodes. + Generator + Generate passwords or usernames. + Data safety + Local data + Local data consists of Downloads, User settings, Vault. They are stored in the internal storage of a device, which can only be accessed by the Android system or the Keyguard. + Downloads + User settings + The User settings are encrypted using a device-specific key. + Vault + The Vault is encrypted using a Key, derived from the App password using following steps: + The Salt and the Hash is then stored locally on a device, to later generate a master key to unlock the vault. + Unlocking a Vault means storing a correct Key in a device\'s RAM, gaining an ability to read and modify encrypted Vault. + Remote data + Remote data is stored on Bitwarden servers with zero-knowledge encryption. + diff --git a/common/src/commonMain/resources/MR/ar-rSA/plurals.xml b/common/src/commonMain/resources/MR/ar-rSA/plurals.xml new file mode 100644 index 00000000..5f2db8ad --- /dev/null +++ b/common/src/commonMain/resources/MR/ar-rSA/plurals.xml @@ -0,0 +1,2 @@ + + diff --git a/common/src/commonMain/resources/MR/ar-rSA/strings.xml b/common/src/commonMain/resources/MR/ar-rSA/strings.xml new file mode 100644 index 00000000..214f4486 --- /dev/null +++ b/common/src/commonMain/resources/MR/ar-rSA/strings.xml @@ -0,0 +1,868 @@ + + + OK + Close + Yes + No + + Name + Account name + Username + Password + App password + Current password + New password + Email + Verified + Not verified + Email visibility + Public URL + URL + + Access count + Learn more + Phone number + Passport number + License number + Card number + No card number + Brand + Security code + Valid from + Valid to + Card expiry month + Card expiry year + Cardholder name + Valid from + Expiry date + Company + Sync + + Hidden + + Visible + + Empty + + SSN + City + State + Info + Cancel + Continue + Country + Address + Postal code + Pull to search + Save + URI + URIs + Note + Notes + Attachments + No attachments + Expiring soon + Incomplete data + This item is missing some of the important information. + Item + Items + %1$s items + All items + No items + No folder + New folder + Folder + Folders + No folders + No collection + Collection + Collections + No collections + My vault + Organization + Organizations + No organizations + Miscellaneous + Add integration + Account + Accounts + No accounts + No account + Type + Options + Send + Reset + Length + Security + Contact info + Title + First name + Middle name + Last name + Full name + Address line 1 + Address line 2 + Address line 3 + Rename + Select type + Autofill + Passkey + Create a passkey + Unlock Keyguard + Confirming auth request… + Passkeys + + Signature counter + + Relying party + + Discoverable + Username + Display name + API key + Domain + Edit + Delete + Remove + Remove from the history + Reused password + Reused passwords + One-time password + Authenticator key + Use + Save passkey + Passkey available + Two-factor authentication available + Custom + Follow system settings + + Coming soon + Powered by + Verification code + Re-send verification code + Requested a verification email + Web vault + Launch Web vault + + Remember me + + Trash + + Download + Downloads + No downloads + No duplicates + Encryption + + Key + Hash + Salt + 256-bit AES + Random %1$d-bits of data + None + Text + Linked apps + Linked URIs + Custom fields + Reveal a secure note + Hide a secure note + Master password hint + Fingerprint phrase + What is a fingerprint? + Bitwarden premium + Unofficial Bitwarden server + Last synced at %1$s + Change name + Change color + Change master password hint + Sign out + Sign in + Visit Web vault to verify your email address + Upgrade your account to a premium membership and unlock some great additional features + Two-factor authentication + Require login verification with another device such as a security key, authenticator app, SMS or email + Active + Items + Log out + Log out? + All of the not synchronized changes will be lost! + Change name + Change names + Delete folder? + Delete folders? + This item(s) will be deleted immediately. You can not undo this action. + Recently opened + Often opened + View details + Save to + Add to favourites + Remove from favourites + Enable auth re-prompt + Disable auth re-prompt + Edit + Merge into… + Copy to… + Move to folder + Change name + Change names + Add password + Add passwords + Change password + Change passwords + View password history + Trash + Restore + Delete forever + Move associated items to trash + Open with… + Send with… + Open in a file manager + Delete local file + View parent item + Always show keyboard + Sync vault + Lock vault + Rename folder + Check the email in known data breaches + Check the username in known data breaches + Check the password in known data breaches + Check the website in known data breaches + Launch app + Launch website + Launch docs + Launch browser + Launch main page + Launch Play store + Launch with %1$s + Launch with… + How to delete an account? + Unsecure + Match app + Match detection + Base domain + Match resources by top-level and second-level domain. + Host + Match resources by hostname and (if specified) port. + Starts with + Match resources when the detected resource starts with the URI. + Exact + Match resources when the detected resource exactly matches the URI. + Regular expression + Match resources by regular expression. Advanced option. + Never + Ignore URI during auto-fill item search. + %1$s linked to the password + %1$s linked to the username + %1$s linked to the cardholder name + %1$s linked to the expiration month + %1$s linked to the expiration year + %1$s linked to the card code + %1$s linked to the card brand + %1$s linked to the card number + %1$s linked to the title + %1$s linked to the middle name + %1$s linked to the address line (1) + %1$s linked to the address line (2) + %1$s linked to the address line (3) + %1$s linked to the city + %1$s linked to the state + %1$s linked to the postal code + %1$s linked to the country + %1$s linked to the company + %1$s linked to the email + %1$s linked to the phone number + %1$s linked to the SSN + %1$s linked to the username + %1$s linked to the passport number + %1$s linked to the license number + %1$s linked to the first name + %1$s linked to the last name + %1$s linked to the full name + %1$s linked to an unknown field + Share with… + %1$d selected + Copy + Copy value + Copy URL + Copy URI + Copy package name + Copy password + Copy username + Copy email + Copy phone number + Copy passport number + Copy license number + Copy card number + Copy cardholder name + Copy expiration year + Copy expiration month + Copy CVV code + Copy one-time password + Copy secret key + Unlock Keyguard + Open Keyguard + January + February + March + April + May + June + July + August + September + October + November + December + Move up + Move down + Remove + Remove an item? + Add more + FIDO2 WebAuthn + Authenticate WebAuthn + Return to app + + Must not be empty + + Must not be blank + Must be custom domain + Must contain only US-ASCII characters + Must be at least %1$d symbols long + Must be %1$d symbols long + Invalid domain + Invalid email + Invalid URL + Invalid URI + Invalid card number + Incorrect password + Failed to generate OTP code + Failed to create a passkey + Failed to authorize a request + + Barcode + Show as Barcode + Copy this authenticator to another device by scanning the QR code. + + Date picker + + Color picker + + How to delete an account? + A collection of info of how to delete your account from web services + + Easy + + Medium + + Hard + + Limited availability + + Impossible + Send email + Search websites + No instructions + Two-factor authentication + List of websites with two-factor authentication support + Search websites + Passkeys + List of websites with passkeys support + Search websites + + Data breach + Breached account data can provide malicious actors with access to sensitive personal and financial information, potentially leading to identity theft, financial fraud, and other forms of cybercrime. + No breaches found + Breached accounts found + Breaches + Occurred on %1$s + Reported on %1$s + Failed to check data breaches. You might currently be offline + Data breach + A password that is found in the data breaches takes significantly less time to break and should never be used. + Password is compromised + The password has been identified in known data breaches. Please change it immediately to protect your online security + No breaches found + Failed to check data breaches. You might currently be offline + + Large Type + Show in Large Type + Show in Large Type and Lock vault + App Picker + Search installed apps + System app + No apps + Choose a folder + Create a new folder: + + This organization will have an ownership of the copy. You will not be the direct owner. + Email forwarders + Email forwarders + Delete email forwarder? + Delete email forwarders? + Email forwarder integration + No email forwarders + Create an encrypted vault where the local data will be stored. + App password + Biometric authentication + Create a vault + Send crash reports + Create a vault + Erase app data + Close the app and erase all local app data + The vault is locked. Enter your app password to continue. + Unlock + + Unlock a vault + + Use biometric authentication to unlock the vault. + User verification is required. Enter your app password to continue. + Verify + Sync status + Up to date + Pending + Syncing + Sync failed + New item + Edit item + Style text with %1$s or %2$s and more. Limited Markdown syntax is supported. + italic + bold + Render preview + Auth re-prompt + Ask to authenticate again when you view or autofill a cipher + Add Bitwarden account + We are not affiliated, associated, authorized, endorsed by, or in any way officially connected with the Bitwarden, Inc., or any of its subsidiaries or its affiliates. + + To pass the captcha verification on an unofficial Bitwarden client, you must specify the client secret. To find it, visit Web vault / Settings / API Key. + + Client secret + Sign in + Region + United States + Europe + Custom (self-hosted) + HTTP headers + HTTP header + You can add custom HTTP headers that will be sent with every request to the server. + Key + Value + Add more + Server URL + Specify the base URL of your self-hosted Bitwarden installation. + Custom environment + You can specify the base URL of each service independently. + Web Vault Server URL + API Server URL + Icons Server URL + Identity Server URL + Verification + This authentication method is not supported yet. + Enter the verification code from your authenticator app. + Enter the verification code that was emailed to %1$s. + Enter the YubiKey authentication code manually. Place the cursor on the field below and trigger the YubiKey. + Authenticator + Duo (Organization) + FIDO2 Web Authentication + Email + FIDO U2F + Connect YubiKey via USB + Requires USB OTG support. + Touch the gold sensor on your YubiKey now. + Hold your YubiKey flat against the back of your device + Requires NFC support. + Failed to read YubiKey + Using FIDO2 WebAuthn requires using the Bitwarden Web vault version %1$s or higher. On older versions the authentication result will incorrectly be forwarded to the official Bitwarden app. + Confirm access + This data is protected, to continue please enter your app password. + + Confirm access + + Use biometric authentication to confirm your access and unlock this data. + Vault + Send + Generator + Watchtower + Settings + Locked due to inactivity + Text + File + Login + Card + Identity + Note + Passkey + Text + Boolean + Linked + + Pwned + Very strong + Strong + Good + Fair + Weak + Very strong passwords + Strong passwords + Good passwords + Fair passwords + Weak passwords + Filter + No filters available + Sort by + No sorting available + Title + Alphabetically + Reverse Alphabetically + Access count + Largest First + Smallest First + Modification date + Newest First + Oldest First + Expiration date + Newest First + Oldest First + Deletion date + Newest First + Oldest First + Password + Alphabetically + Reverse Alphabetically + Password modification date + Newest First + Oldest First + Password strength + Weakest First + Strongest First + Search vault + New item + There are no suggested items available for this context + + Security code + Saved to %1$s at %2$s + Password last modified at %1$s + Passkey created at %1$s + Last modified at %1$s + Created at %1$s + Deleted at %1$s + Expired at %1$s + Expiration scheduled at %1$s + Deleting scheduled at %1$s + + Call + + Text + + Email + + Directions + Sends + Search sends + New item + A password is required to access this share + Generator + Username generator + Password generator + Generate + Regenerate + Passphrase + Random passphrases provide the best combination of memorability and security. + Delimiter + Capitalize + Number + Username + Delimiter + Custom word + Capitalize + Number + Random symbols + A strong password has at least %1$d characters, uppercase & lowercase letters, digits and symbols. + Digits + Symbols + Uppercase letters + Lowercase letters + + Exclude similar symbols + + Exclude ambiguous symbols + Catch-all email + A catch-all email address provides users the option to receive all mail sent to their domain, even if they are sent to an email address that has not been set up for their domain. Ensure that your email hosting supports this feature before using it. + + Domain + Plus addressing email + Plus addressing means any email sent to %1$s is still sent to your account. This means you can have a lot of variations on your email address to give out to different people, sites, or mailing lists. Ensure that your email hosting supports this feature before using it. + Email + Subdomain addressing email + Subdomain addressing means any email sent to %1$s is still sent to your account. This means you can have a lot of variations on your email address to give out to different people, sites, or mailing lists. Ensure that your email hosting supports this feature before using it. + Email + Forwarded email alias + Create new login with the password + Create new login with the username + Password history + Show tips + Generator history + Clear history + Clear generator history? + This will remove all items from the history. + Password history + Clear history + Clear password history? + This will remove all passwords from the history. + Watchtower + Password strength + Security + Maintenance + Pwned Passwords + Passwords that have been exposed in data breaches. Such passwords should be changed immediately. + Reused Passwords + Don\'t use the same password on multiple websites. Generate unique passwords to improve security. + Vulnerable Accounts + Sites that were affected by a data breach since you last changed a password. Change your password to keep your account safe. + Unsecure Websites + Change the URLs that use HTTP protocol to use HTTPS protocol, as the latter utilizes the most advanced encryption available. + Inactive two-factor authentication + Sites that have two-factor authentication available but you haven\'t set it up yet. + Available Passkeys + Sites that have passkey available but you haven\'t set it up yet. It\'s simpler and more secure then a password. + Incomplete Items + Helps you identify missing or incomplete data in your vault. This can refer to identities with missing names or logins without usernames. + Expiring Items + Items that have expired or are expiring soon. + Duplicate URIs + Items that have one or more URIs that cover the same websites after applying the match detection. + Trashed Items + Items that have been moved into the trash. Having too many items in the trash may slow down operations with your vault. + Empty Folders + Folders that do not have any items in them. + Duplicate Items + Helps you identify and eliminate duplicate items in your vault. + Compromised Accounts + Check data breaches by a username or email address. + Change app password + Change password + Biometric authentication + + Change app password + App password never gets stored on the device nor sent over the network. It is used to generate a secret key that is used to encrypt the local data. + Unless you suspect unauthorized access or discover a malware on the device, there is no need to change the password if it is a strong, unique password. + Contact us + Your message + Use English to ensure that your feedback doesn\'t get misunderstood. + We appreciate the time that you spend sending us a message. Your message goes directly to us and we use it to troubleshoot issues, make product improvements and fix problems. While we may not reply to every report, we\'re reviewing and working on improvements & fixing issues as fast as we can. + Accounts + Add account + Team behind the app + I\'m a Software engineer from Ukraine. I specialize on app design and development. + Follow me + Search + Settings + Search settings + Appearance + Autofill + Development + Experimental + Settings + Notifications + Other + Permissions + Security + Keyguard Premium + Watchtower + Open-source licenses + Accounts + Add & view accounts + Autofill + Android Autofill & Credential services + Security + Biometrics, change password, vault timeout + Keyguard Premium + Unlock features & support app development + Watchtower + Compromised services, vulnerable passwords + Notifications + Alerts + Appearance + Language, theme and animations + Development + Test settings for development + Other + Community websites, app info + Show labels on navigation buttons + App version + App build date + Team behind the app + Reddit community + GitHub project + Crowdin project + Open-source licenses + Download APK file + Load App icons + Load Website icons + Queuing website icon might leak the website address to internet provider + Rich text formatting + Use Markdown to format notes + Language + Suggest translation + Font + Rate on Play Store + Tint color + Theme + Use contrast black theme + Open links in external browser + Conceal fields + Conceal sensitive info, such as passwords and credit card numbers + + Crash + Credential provider + Passkeys, passwords and data services + Privacy policy + Contact us + Experimental + Change app password + Require app password + In addition to your regular security settings, your app password will be required after this time or when biometry settings are changed + Immediately + Never + Send crash reports + Transition animation + Erase app data + Close the app and erase all local app data + Allow screenshots + Show the content of the app when switching between recent apps and allow capturing a screen + Hide the content of the app when switching between recent apps and forbid capturing a screen + Data safety + Lock vault + Lock after a reboot + Lock the vault after a device reboot + Lock when screen turns off + Lock the vault after a few seconds once the screen is off + Lock after a delay + Immediately + Never + Persist vault key on a disk + Vault key is persisted on an internal storage + Vault is locked after the app is unloaded from the memory + Storing a vault key on a disk is a security risk. If the device\'s internal storage is compromised, the attacker will gain access to the local vault data. + Permissions + Features overview + Biometric unlock + + Biometric unlock + Keep the screen on while viewing items + Autofill service + Use the Android Autofill Framework to assist in filling login information into other apps on the device + Auto-copy one-time passwords + When filling a login information, automatically copy one-time passwords + Inline suggestions + Embeds autofill suggestions directly into compatible keyboards + Manual selection + Displays an option to manually search a vault for an entry + Respect Autofill disabled flag + Disables autofill for a browser field that has autofill disabled flag set + Note that some websites are notorious for disabling autofill for a password field as well as some browsers are notorious for ignoring the autofill disabled flag + Ask to save data + Asks for updating the vault when filling of a form has completed + Auto-save app or website info + Automatically clear clipboard + Immediately + Never + One-time password notification duration + When you autofill a login item that has a one-time password, the notification with verification code will popup for at least the defined duration + Never + About Keyguard membership + The Premium unlocks extra features and funds a development of the app. Thank you for supporting us! ❤️ + Subscriptions + Products + Failed to load a list of subscriptions + Failed to load a list of products + Active + Will not renew + Manage on Play Store + Post notifications + Used to post downloading notifications + Camera + Used to scan QR codes + Allow two panel layout in landscape mode + Allow two panel layout in portrait mode + Dark + Light + Disabled + Dynamic + Crossfade + Developed specifically to increase legibility for readers with low vision, and to improve comprehension + Features Overview + Keyguard Premium + Multiple Accounts + Sign-in to multiple accounts simultaneously. + Two-way sync + Add or edit items and sync the changes back. + Offline editing + Add or edit items without internet connection. + Search + Search by anything + Name, email, password, phone number etc. + Filter + Filter by folder, organization, type etc. + Multiple keywords + Search by \'bitw test\' to find your \'Bitwarden Test Account\' item. + Watchtower + Pwned passwords + Find items with exposed in data breaches passwords. + Password strength + Find items with weak passwords. + Reused passwords + Find items with reused passwords. + Inactive 2FA + Find logins with available TOTP two-factor authentication. + Unsecure websites + Find websites that use HTTP protocol, auto-fix to HTTPS. + Incomplete items + Find empty items that might need updates. + Expiring items + Find expired or soon to be expired items. + Duplicate items + Find and merge duplicate items. + Misc + Multi-selection + Merge ciphers, fasten the refactoring with batch operations. + Show as Barcode + Encode a text as different barcodes. + Generator + Generate passwords or usernames. + Data safety + Local data + Local data consists of Downloads, User settings, Vault. They are stored in the internal storage of a device, which can only be accessed by the Android system or the Keyguard. + Downloads + User settings + The User settings are encrypted using a device-specific key. + Vault + The Vault is encrypted using a Key, derived from the App password using following steps: + The Salt and the Hash is then stored locally on a device, to later generate a master key to unlock the vault. + Unlocking a Vault means storing a correct Key in a device\'s RAM, gaining an ability to read and modify encrypted Vault. + Remote data + Remote data is stored on Bitwarden servers with zero-knowledge encryption. + diff --git a/common/src/commonMain/resources/MR/base/plurals.xml b/common/src/commonMain/resources/MR/base/plurals.xml new file mode 100644 index 00000000..f0bd76dd --- /dev/null +++ b/common/src/commonMain/resources/MR/base/plurals.xml @@ -0,0 +1,55 @@ + + + + + %1$s + accounts + + + %1$s + account + + + %1$s + accounts + + + %1$s + accounts + + + %1$s + accounts + + + %1$s + accounts + + + + + %1$s + occurrences + + + %1$s + occurrence + + + %1$s + occurrences + + + %1$s + occurrences + + + %1$s + occurrences + + + %1$s + occurrences + + + diff --git a/common/src/commonMain/resources/MR/base/strings.xml b/common/src/commonMain/resources/MR/base/strings.xml new file mode 100644 index 00000000..21dd3742 --- /dev/null +++ b/common/src/commonMain/resources/MR/base/strings.xml @@ -0,0 +1,936 @@ + + + OK + Close + Yes + No + + Name + Account name + Username + Password + App password + Current password + New password + Email + Verified + Not verified + Email visibility + Public URL + URL + + Access count + Learn more + Phone number + Passport number + License number + Card number + No card number + Brand + Security code + Valid from + Valid to + Card expiry month + Card expiry year + Cardholder name + Valid from + Expiry date + Company + Sync + + Hidden + + Visible + + Empty + + SSN + City + State + Info + Cancel + Continue + Country + Address + Postal code + Pull to search + Save + URI + URIs + Note + Notes + Attachments + No attachments + Expiring soon + Incomplete data + This item is missing some of the important information. + Item + Items + %1$s items + All items + No items + No folder + New folder + Folder + Folders + No folders + No collection + Collection + Collections + No collections + My vault + Organization + Organizations + No organizations + Miscellaneous + Add integration + Account + Accounts + No accounts + No account + Type + Options + Send + Reset + Length + Security + Contact info + Title + First name + Middle name + Last name + Full name + Address line 1 + Address line 2 + Address line 3 + Rename + Select type + Autofill + Passkey + Create a passkey + Unlock Keyguard + Confirming auth request… + Passkeys + + Signature counter + + Relying party + + Discoverable + Username + Display name + API key + Domain + Edit + Delete + Remove + Remove from the history + Reused password + Reused passwords + One-time password + Authenticator key + Use + Save passkey + Passkey available + Two-factor authentication available + Custom + Follow system settings + + Coming soon + Powered by + Verification code + Re-send verification code + Requested a verification email + Web vault + Launch Web vault + + Remember me + + Trash + + Download + Downloads + No downloads + No duplicates + Encryption + + Key + Hash + Salt + 256-bit AES + Random %1$d-bits of data + None + Text + Linked apps + Linked URIs + Custom fields + Reveal a secure note + Hide a secure note + Master password hint + Fingerprint phrase + What is a fingerprint? + Bitwarden premium + Unofficial Bitwarden server + + Last synced at %1$s + Change name + Change color + Change master password hint + Sign out + Sign in + Visit Web vault to verify your email address + Upgrade your account to a premium membership and unlock some great additional features + Two-factor authentication + Require login verification with another device such as a security key, authenticator app, SMS or email + Active + Items + Log out + Log out? + All of the not synchronized changes will be lost! + + Change name + Change names + Delete folder? + Delete folders? + This item(s) will be deleted immediately. You can not undo this action. + + Recently opened + Often opened + View details + Save to + Add to favourites + Remove from favourites + Enable auth re-prompt + Disable auth re-prompt + Edit + Merge into… + Copy to… + Move to folder + Change name + Change names + Add password + Add passwords + Change password + Change passwords + View password history + Trash + Restore + Delete forever + Move associated items to trash + + Open with… + Send with… + Open in a file manager + Delete local file + View parent item + + Always show keyboard + Sync vault + Lock vault + Rename folder + + Check the email in known data breaches + Check the username in known data breaches + Check the password in known data breaches + Check the website in known data breaches + + Launch app + Launch website + Launch docs + Launch browser + Launch main page + Launch Play store + Launch with %1$s + Launch with… + How to delete an account? + + Unsecure + Match app + Match detection + Base domain + Match resources by top-level and second-level domain. + Host + Match resources by hostname and (if specified) port. + Starts with + Match resources when the detected resource starts with the URI. + Exact + Match resources when the detected resource exactly matches the URI. + Regular expression + Match resources by regular expression. Advanced option. + Never + Ignore URI during auto-fill item search. + + %1$s linked to the password + %1$s linked to the username + %1$s linked to the cardholder name + %1$s linked to the expiration month + %1$s linked to the expiration year + %1$s linked to the card code + %1$s linked to the card brand + %1$s linked to the card number + %1$s linked to the title + %1$s linked to the middle name + %1$s linked to the address line (1) + %1$s linked to the address line (2) + %1$s linked to the address line (3) + %1$s linked to the city + %1$s linked to the state + %1$s linked to the postal code + %1$s linked to the country + %1$s linked to the company + %1$s linked to the email + %1$s linked to the phone number + %1$s linked to the SSN + %1$s linked to the username + %1$s linked to the passport number + %1$s linked to the license number + %1$s linked to the first name + %1$s linked to the last name + %1$s linked to the full name + %1$s linked to an unknown field + + Share with… + + %1$d selected + + Copy + Copy value + Copy URL + Copy URI + Copy package name + Copy password + Copy username + Copy email + Copy phone number + Copy passport number + Copy license number + Copy card number + Copy cardholder name + Copy expiration year + Copy expiration month + Copy CVV code + Copy one-time password + Copy secret key + + Unlock Keyguard + Open Keyguard + + January + February + March + April + May + June + July + August + September + October + November + December + + Move up + Move down + Remove + Remove an item? + Add more + + FIDO2 WebAuthn + Authenticate WebAuthn + Return to app + + + Must not be empty + + Must not be blank + Must be custom domain + Must contain only US-ASCII characters + Must be at least %1$d symbols long + Must be %1$d symbols long + Invalid domain + Invalid email + Invalid URL + Invalid URI + Invalid card number + Incorrect password + Failed to generate OTP code + Failed to create a passkey + Failed to authorize a request + + + Barcode + Show as Barcode + Copy this authenticator to another device by scanning the QR code. + + Date picker + + Color picker + + How to delete an account? + A collection of info of how to delete your account from web services + + Easy + + Medium + + Hard + + Limited availability + + Impossible + Send email + Search websites + No instructions + Two-factor authentication + List of websites with two-factor authentication support + Search websites + Passkeys + List of websites with passkeys support + Search websites + + Data breach + Breached account data can provide malicious actors with access to sensitive personal and financial information, potentially leading to identity theft, financial fraud, and other forms of cybercrime. + No breaches found + Breached accounts found + Breaches + Occurred on %1$s + Reported on %1$s + Failed to check data breaches. You might currently be offline + Data breach + A password that is found in the data breaches takes significantly less time to break and should never be used. + Password is compromised + The password has been identified in known data breaches. Please change it immediately to protect your online security + No breaches found + Failed to check data breaches. You might currently be offline + + Large Type + Show in Large Type + Show in Large Type and Lock vault + + App Picker + Search installed apps + System app + No apps + + Choose a folder + Create a new folder: + + + This organization will have an ownership of the copy. You will not be the direct owner. + + Email forwarders + Email forwarders + Delete email forwarder? + Delete email forwarders? + Email forwarder integration + No email forwarders + + Create an encrypted vault where the local data will be stored. + App password + Biometric authentication + Create a vault + Send crash reports + Create a vault + Erase app data + Close the app and erase all local app data + + The vault is locked. Enter your app password to continue. + Unlock + + Unlock a vault + + Use biometric authentication to unlock the vault. + + User verification is required. Enter your app password to continue. + Verify + + Sync status + Up to date + Pending + Syncing + Sync failed + + New item + Edit item + Style text with %1$s or %2$s and more. Limited Markdown syntax is supported. + italic + bold + Render preview + Auth re-prompt + Ask to authenticate again when you view or autofill a cipher + + Add Bitwarden account + We are not affiliated, associated, authorized, endorsed by, or in any way officially connected with the Bitwarden, Inc., or any of its subsidiaries or its affiliates. + + To pass the captcha verification on an unofficial Bitwarden client, you must specify the client secret. To find it, visit Web vault / Settings / API Key. + + Client secret + Sign in + Region + United States + Europe + Custom (self-hosted) + HTTP headers + HTTP header + You can add custom HTTP headers that will be sent with every request to the server. + Key + Value + Add more + Server URL + Specify the base URL of your self-hosted Bitwarden installation. + Custom environment + You can specify the base URL of each service independently. + Web Vault Server URL + API Server URL + Icons Server URL + Identity Server URL + + Verification + This authentication method is not supported yet. + Enter the verification code from your authenticator app. + Enter the verification code that was emailed to %1$s. + Enter the YubiKey authentication code manually. Place the cursor on the field below and trigger the YubiKey. + + Authenticator + YubiKey + Duo + Duo (Organization) + FIDO2 Web Authentication + Email + FIDO U2F + + Connect YubiKey via USB + Requires USB OTG support. + Touch the gold sensor on your YubiKey now. + Hold your YubiKey flat against the back of your device + Requires NFC support. + Failed to read YubiKey + + Using FIDO2 WebAuthn requires using the Bitwarden Web vault version %1$s or higher. On older versions the authentication result will incorrectly be forwarded to the official Bitwarden app. + + Confirm access + This data is protected, to continue please enter your app password. + + Confirm access + + Use biometric authentication to confirm your access and unlock this data. + + Vault + Send + Generator + Watchtower + Settings + + Locked due to inactivity + + Text + File + Unknown + + Login + Card + Identity + Note + Passkey + Unknown + + Text + Boolean + Linked + + + Pwned + + Very strong + Strong + Good + Fair + Weak + + Very strong passwords + Strong passwords + Good passwords + Fair passwords + Weak passwords + + Filter + No filters available + + Sort by + No sorting available + + Title + Alphabetically + Reverse Alphabetically + Access count + Largest First + Smallest First + Modification date + Newest First + Oldest First + Expiration date + Newest First + Oldest First + Deletion date + Newest First + Oldest First + Password + Alphabetically + Reverse Alphabetically + Password modification date + Newest First + Oldest First + Password strength + Weakest First + Strongest First + + Search vault + New item + There are no suggested items available for this context + + + Security code + Saved to %1$s at %2$s + Password last modified at %1$s + Passkey created at %1$s + Last modified at %1$s + Created at %1$s + Deleted at %1$s + Expired at %1$s + Expiration scheduled at %1$s + Deleting scheduled at %1$s + + Call + + Text + + Email + + Directions + + Sends + Search sends + New item + A password is required to access this share + + Generator + Username generator + Password generator + Generate + Regenerate + Passphrase + Random passphrases provide the best combination of memorability and security. + Delimiter + Capitalize + Number + Username + Delimiter + Custom word + Capitalize + Number + Random symbols + A strong password has at least %1$d characters, uppercase & lowercase letters, digits and symbols. + Digits + Symbols + Uppercase letters + Lowercase letters + + Exclude similar symbols + + Exclude ambiguous symbols + Catch-all email + A catch-all email address provides users the option to receive all mail sent to their domain, even if they are sent to an email address that has not been set up for their domain. Ensure that your email hosting supports this feature before using it. + + Domain + Plus addressing email + Plus addressing means any email sent to %1$s is still sent to your account. This means you can have a lot of variations on your email address to give out to different people, sites, or mailing lists. Ensure that your email hosting supports this feature before using it. + Email + Subdomain addressing email + Subdomain addressing means any email sent to %1$s is still sent to your account. This means you can have a lot of variations on your email address to give out to different people, sites, or mailing lists. Ensure that your email hosting supports this feature before using it. + Email + Forwarded email alias + Create new login with the password + Create new login with the username + Password history + Show tips + + Generator history + Clear history + Clear generator history? + This will remove all items from the history. + + Password history + Clear history + Clear password history? + This will remove all passwords from the history. + + Watchtower + Password strength + Security + Maintenance + Pwned Passwords + Passwords that have been exposed in data breaches. Such passwords should be changed immediately. + Reused Passwords + Don\'t use the same password on multiple websites. Generate unique passwords to improve security. + Vulnerable Accounts + Sites that were affected by a data breach since you last changed a password. Change your password to keep your account safe. + Unsecure Websites + Change the URLs that use HTTP protocol to use HTTPS protocol, as the latter utilizes the most advanced encryption available. + Inactive two-factor authentication + Sites that have two-factor authentication available but you haven\'t set it up yet. + Available Passkeys + Sites that have passkey available but you haven\'t set it up yet. It\'s simpler and more secure then a password. + Incomplete Items + Helps you identify missing or incomplete data in your vault. This can refer to identities with missing names or logins without usernames. + Expiring Items + Items that have expired or are expiring soon. + Duplicate URIs + Items that have one or more URIs that cover the same websites after applying the match detection. + Trashed Items + Items that have been moved into the trash. Having too many items in the trash may slow down operations with your vault. + Empty Folders + Folders that do not have any items in them. + Duplicate Items + Helps you identify and eliminate duplicate items in your vault. + Compromised Accounts + Check data breaches by a username or email address. + + Change app password + Change password + Biometric authentication + + Change app password + App password never gets stored on the device nor sent over the network. It is used to generate a secret key that is used to encrypt the local data. + Unless you suspect unauthorized access or discover a malware on the device, there is no need to change the password if it is a strong, unique password. + + Contact us + Your message + Use English to ensure that your feedback doesn\'t get misunderstood. + We appreciate the time that you spend sending us a message. Your message goes directly to us and we use it to troubleshoot issues, make product improvements and fix problems. While we may not reply to every report, we\'re reviewing and working on improvements & fixing issues as fast as we can. + + Accounts + Add account + + Team behind the app + I\'m a Software engineer from Ukraine. I specialize on app design and development. + Follow me + + Search + Settings + Search settings + + Appearance + Autofill + Development + Experimental + Settings + Notifications + Other + Permissions + Security + Keyguard Premium + Watchtower + Open-source licenses + + Accounts + Add & view accounts + Autofill + Android Autofill & Credential services + Security + Biometrics, change password, vault timeout + Keyguard Premium + Unlock features & support app development + Watchtower + Compromised services, vulnerable passwords + Notifications + Alerts + Appearance + Language, theme and animations + Development + Test settings for development + Other + Community websites, app info + Show labels on navigation buttons + App version + App build date + Team behind the app + Reddit community + GitHub project + Crowdin project + Open-source licenses + Download APK file + Load App icons + Load Website icons + Queuing website icon might leak the website address to internet provider + Rich text formatting + Use Markdown to format notes + Language + Suggest translation + Font + Rate on Play Store + Tint color + Theme + Use contrast black theme + Open links in external browser + Conceal fields + Conceal sensitive info, such as passwords and credit card numbers + + Crash + Credential provider + Passkeys, passwords and data services + Privacy policy + Contact us + Experimental + Change app password + Require app password + In addition to your regular security settings, your app password will be required after this time or when biometry settings are changed + Immediately + Never + Send crash reports + Transition animation + Erase app data + Close the app and erase all local app data + Allow screenshots + Show the content of the app when switching between recent apps and allow capturing a screen + Hide the content of the app when switching between recent apps and forbid capturing a screen + Data safety + Lock vault + Lock after a reboot + Lock the vault after a device reboot + Lock when screen turns off + Lock the vault after a few seconds once the screen is off + Lock after a delay + Immediately + Never + Persist vault key on a disk + Vault key is persisted on an internal storage + Vault is locked after the app is unloaded from the memory + Storing a vault key on a disk is a security risk. If the device\'s internal storage is compromised, the attacker will gain access to the local vault data. + Permissions + Features overview + Biometric unlock + + Biometric unlock + Keep the screen on while viewing items + Autofill service + Use the Android Autofill Framework to assist in filling login information into other apps on the device + Auto-copy one-time passwords + When filling a login information, automatically copy one-time passwords + Inline suggestions + Embeds autofill suggestions directly into compatible keyboards + Manual selection + Displays an option to manually search a vault for an entry + Respect Autofill disabled flag + Disables autofill for a browser field that has autofill disabled flag set + Note that some websites are notorious for disabling autofill for a password field as well as some browsers are notorious for ignoring the autofill disabled flag + Ask to save data + Asks for updating the vault when filling of a form has completed + Auto-save app or website info + Automatically clear clipboard + Immediately + Never + One-time password notification duration + When you autofill a login item that has a one-time password, the notification with verification code will popup for at least the defined duration + Never + About Keyguard membership + The Premium unlocks extra features and funds a development of the app. Thank you for supporting us! ❤️ + Subscriptions + Products + Failed to load a list of subscriptions + Failed to load a list of products + Active + Will not renew + Manage on Play Store + Post notifications + Used to post downloading notifications + Camera + Used to scan QR codes + Allow two panel layout in landscape mode + Allow two panel layout in portrait mode + + Dark + Light + + Disabled + Dynamic + Crossfade + + Developed specifically to increase legibility for readers with low vision, and to improve comprehension + + Features Overview + Keyguard Premium + Multiple Accounts + Sign-in to multiple accounts simultaneously. + Two-way sync + Add or edit items and sync the changes back. + Offline editing + Add or edit items without internet connection. + Search + Search by anything + Name, email, password, phone number etc. + Filter + Filter by folder, organization, type etc. + Multiple keywords + Search by \'bitw test\' to find your \'Bitwarden Test Account\' item. + Watchtower + Pwned passwords + Find items with exposed in data breaches passwords. + Password strength + Find items with weak passwords. + Reused passwords + Find items with reused passwords. + Inactive 2FA + Find logins with available TOTP two-factor authentication. + Unsecure websites + Find websites that use HTTP protocol, auto-fix to HTTPS. + Incomplete items + Find empty items that might need updates. + Expiring items + Find expired or soon to be expired items. + Duplicate items + Find and merge duplicate items. + Misc + Multi-selection + Merge ciphers, fasten the refactoring with batch operations. + Show as Barcode + Encode a text as different barcodes. + Generator + Generate passwords or usernames. + + Data safety + Local data + Local data consists of Downloads, User settings, Vault. They are stored in the internal storage of a device, which can only be accessed by the Android system or the Keyguard. + Downloads + User settings + The User settings are encrypted using a device-specific key. + Vault + The Vault is encrypted using a Key, derived from the App password using following steps: + The Salt and the Hash is then stored locally on a device, to later generate a master key to unlock the vault. + Unlocking a Vault means storing a correct Key in a device\'s RAM, gaining an ability to read and modify encrypted Vault. + Remote data + Remote data is stored on Bitwarden servers with zero-knowledge encryption. + + diff --git a/common/src/commonMain/resources/MR/ca-rES/plurals.xml b/common/src/commonMain/resources/MR/ca-rES/plurals.xml new file mode 100644 index 00000000..5f2db8ad --- /dev/null +++ b/common/src/commonMain/resources/MR/ca-rES/plurals.xml @@ -0,0 +1,2 @@ + + diff --git a/common/src/commonMain/resources/MR/ca-rES/strings.xml b/common/src/commonMain/resources/MR/ca-rES/strings.xml new file mode 100644 index 00000000..0e8764f2 --- /dev/null +++ b/common/src/commonMain/resources/MR/ca-rES/strings.xml @@ -0,0 +1,868 @@ + + + OK + Tanca + + No + + Nom + Nom del compte + Nom d’usuari + Contrasenya + Contrasenya d\'aplicació + Contrasenya actual + Nova Contrasenya + Correu electrònic + Verificat + No verificat + Visibilitat del correu electrònic + URL pública + URL + + Recompte d\'accessos + Més informació + Número de telèfon + Número de passaport + Número de llicència + Número de Targeta + Cap número de targeta + Marca + CVV + Vàlida des de + Vàlida fins a + Mes de venciment de la targeta + Any de caducitat de la targeta + Nom del titular + Vàlid des de + Data d\'expiració + Empresa + Sincronitza + + Amagat + + Visible + + Buit + + SSN + Ciutat + Província + Info + Cancel·lar + Continuar + País + Adreça + Codi postal + Estira per a cercar + Desa + URI + URIs + Nota + Notes + Adjunts + Sense adjunts + Expira prompte + Dades incompletes + A aquest element li falta informació important. + Element + Elements + %1$s elements + Tots els elements + Cap element + Cap carpeta + Carpeta nova + Carpeta + Carpetes + Cap carpeta + Cap col·lecció + Col·lecció + Col·leccions + Cap col·lecció + Caixa forta + Organització + Organitzacions + Cap organització + Miscel·lània + Afegir integració + Compte + Comptes + Cap compte + Cap compte + Tipus + Opcions + Envia + Restablir + Longitud + Seguretat + Informació de Contacte + Títol + Nom + Primer cognom + Segon Cognom + Nom complet + Línia 1 de l\'adreça + Línia 2 de l\'adreça + Línia 3 de l\'adreça + Reanomenar + Seleccioneu tipus + Emplenament automàtic + Passkey + Crea una passkey + Desbloqueja Keyguard + Confirmant la petició d\'autenticació… + Passkeys + + Recompte de signatures + + Partit de confiança + + Detectable + Nom d’Usuari + Nom visible + Clau d\'API + Domini + Edita + Eliminar + Suprimir + Suprimir de l\'historial + Contrasenya reutilitzada + Contrasenyes reutilitzades + Contrasenya d\'un sol ús + Clau autenticadora + Utilitza + Guarda la passkey + Passkey disponible + Autenticació de dos factors disponible + Personalitzat + Segueix el sistema + + Aviat + Impulsat per + Codi de verificació + Reenvia el codi de verificació + Sol·licita un correu de verificació + Caixa forta web + Inicia la caixa forta web + + Recorda\'m + + Paperera + + Descarrega + Descàrregues + Cap descàrrega + Cap duplicat + Xifratge + + Clau + Hash + Sal + AES de 256-bits + Dades de %1$d bits aleatòries + Cap + Text + Aplicacions enllaçades + URIs enllaçades + Camps personalitzats + Revel·la una nota segura + Amaga una nota segura + Pista de la contrasenya mestra + Frase d\'empremta digital + Què és una empremta? + Bitwarden Premium + Servidor de Bitwarden no oficial + Última sincronització %1$s + Canvia el nom + Canvia el color + Canvia la pista de contrasenya mestra + Tanca la sessió + Inicia sessió + Visita la caixa forta web per a verificar la teva adreça de correu electrònic + Actualitzeu el vostre compte a una subscripció prèmium i desbloquegeu algunes característiques addicionals excel·lents + Autenticació en dos passos + Requereix verificació d\'inici de sessió amb un altre dispositiu com una clau de seguretat, aplicació d\'autenticació, SMS o correu electrònic + Activa + Elements + Desconnecta + Desconnectar-se? + Tots els elements no sincronitzats es perdran! + Canvia el nom + Canviar noms + Eliminar carpeta? + Eliminar carpetes? + Aquest element/s seran eliminats immediatament. No pots desfer aquesta acció. + Oberts recentment + Oberts a sovint + Mostra els detalls + Desa a + Afegir a Favorits + Eliminar de favorits + Habilita la re-autenticació + Deshabilita la re-autenticació + Edita + Mescla a… + Copia a… + Mou a la carpeta + Canvia el nom + Canvia els noms + Afegir contrasenya + Afegir contrasenyes + Canvia la contrasenya + Canvia contrasenyes + Veure l\'historial de contrasenyes + Paperera + Restaura + Elimina per sempre + Mou els elements associats a la paperera + Obre amb… + Envia amb… + Obre a l\'administrador de fitxers + Elimina el fitxer local + Veure l\'element pare + Sempre mostra el teclat + Sincronitza la caixa forta + Bloqueja la caixa forta + Canvia el nom a la carpeta + Revisa el teu correu electrònic a la llista de filtracions conegudes + Revisa el teu nom d\'usuari a la llista de filtracions conegudes + Revisa la teua contrasenya a la llista de filtracions conegudes + Revisa la pàgina web a la llista de filtracions conegudes + Inicia app + Obri la web + Obri el document + Inicia el navegador + Inicia la pàgina principal + Inicia el Play Store + Inicia amb %1$s + Inicia amb… + Com eliminar un compte? + No segura + Coincideix amb l\'app + Detecció de coincidències + Domini base + Coincidències de recursos per domini de primer i segon nivell. + Amfitrió + Coincidències de recursos per nom d\'amfitrió i (si hi ha) port. + Comença amb + Coincidències de recursos quan el recurs detectat comença amb l\'URI. + Exactament + Coincidències de recursos quan el recurs detectat coincideix exactament amb l\'URI. + Expressió regular + Coincidències de recursos per expressió regular. Opció avançada. + Mai + Ignorar l\'URI en cercar l\'element d\'emplenament automàtic. + %1$s enllaços a la contrasenya + %1$s enllaços al nom d\'usuari + %1$s enllaços al nom del titular + %1$s enllaços al mes d\'expiració + %1$s enllaços a l\'any d\'expiració + %1$s enllaços al codi de la targeta + %1$s enllaços a la marca de la targeta + %1$s enllaços al número de la targeta + %1$s enllaços al títol + %1$s enllaços al primer cognom + %1$s enllaços a la primera línia d\'adreça + %1$s enllaços a la segona línia d\'adreça + %1$s enllaços a la tercera línia d\'adreça + %1$s enllaços a la ciutat + %1$s enllaços a l\'estat + %1$s enllaços al codi postal + %1$s enllaços al país + %1$s enllaços a la companyia + %1$s enllaços al correu electrònic + %1$s enllaços al telèfon mòbil + %1$s enllaços a l\'SSN + %1$s enllaços al nom d\'usuari + %1$s enllaços al número de passaport + %1$s enllaços al número de llicència + %1$s enllaços al nom + %1$s enllaços al cognom + %1$s enllaços al nom complet + %1$s enllaços a un camp desconegut + Comparteix amb… + %1$d seleccionats + Copia + Copia el valor + Copia l\'URL + Copia l\'URI + Copia el nom de paquet + Copia la contrasenya + Copia el nom d\'usuari + Copia el correu electrònic + Copia el telèfon mòbil + Copia el número de passaport + Copia el número de llicència + Copia el número de targeta + Copia el nom del titular + Copia l\'any d\'expiració + Copia el mes d\'expiració + Còpia el codi CVV + Copia la contrasenya d\'un sol ús + Copia la clau secreta + Desbloqueja Keyguard + Obre Keyguard + Gener + Febrer + Març + Abril + Maig + Juny + Juliol + Agost + Setembre + Octubre + Novembre + Desembre + Mou dalt + Mou avall + Elimina + Eliminar element? + Afegeix més + WebAuthn FIDO2 + Autenticar WebAuthn + Torna a l\'app + + No pot estar buit + + No pot estar en blanc + Ha de ser un domini personalitzat + Només pot contenir caràcters US-ASCII + Ha de tenir com a mínim %1$d símbols + Ha de tenir %1$d símbols + Domini invàlid + Correu electrònic invàlid + URL invàlida + URI invàlida + Número de targeta no vàlid + Contrasenya incorrecta + No s\'ha pogut generar el codi OTP + No s\'ha pogut crear la passkey + No s\'ha pogut autoritzar la petició + + Codi de barres + Mostra com a codi de barres + Copia aquest autenticador a un altre dispositiu escanejant el codi QR. + + Selecció de data + + Selector de color + + Com eliminar un compte? + Una col·lecció d\'informació sobre com eliminar el teu compte de serveis web + + Fàcil + + Mitjà + + Difícil + + Disponibilitat limitada + + Impossible + Envia correu electrònic + Cerca llocs web + Sense instruccions + Autenticació en dos passos + Llista de llocs web amb suport per a autenticació en dos-passes + Cerca llocs web + Passkeys + Llista de llocs web amb suport per a passkeys + Cerca llocs web + + Filtració de dades + Dades de comptes filtrades poden proporcionar les teves dades personals i financeres a criminals, el qual pot dur a suplantació d\'identitat, frau financer i altres formes de ciber-crims. + No s\'ha trobat cap filtració + S\'han trobat comptes filtrats + Filtracions + Ocorregut el %1$s + Reportat el %1$s + No s\'han pogut comprovar les filtracions de dades. És possible que no tinguis connexió + Filtració de dades + Una contrasenya que es troba a una llista de filtracions és menys segura, ja que és de les primeres que es proven a l\'intentar accedir a un compte. + S\'han trobat contrasenyes filtrades + La contrasenya ha sigut identificada a la llista de filtracions. Per favor, canvia-la immediatament per a protegir la teva seguretat en línia + Cap filtració trobada + No s\'han pogut comprovar les filtracions de dades. És possible que no tinguis connexió + + Lletra Gran + Mostra en Lletra Gran + Mostra en Lletra Gran i bloqueja la caixa forta + Selector d\'apps + Cerca aplicacions instal·lades + Aplicació del sistema + Cap aplicació + Tria una carpeta + Crea una nova carpeta: + + Aquesta organització serà propietària de la còpia. No seràs el propietari directe. + Redireccionadors d\'Email + Redireccionadors d\'Email + Eliminar el redireccionador d\'email? + Eliminar els redireccionadors d\'email? + Integració amb redireccionador d\'email + Cap redireccionador d\'email + Crea una caixa forta encriptada on es desaran totes les dades locals. + Contrasenya d\'aplicació + Autenticació biomètrica + Crea una caixa forta + Enviar informes d\'errors + Crea una caixa forta + Elimina les dades de l\'app + Tanca l\'app i elimina totes les dades locals + La caixa forta està bloquejada. Introdueix la teva contrasenya per a continuar. + Desbloqueja + + Desbloqueja una caixa forta + + Fes servir una autenticació biomètrica per a desbloquejar la caixa forta. + Cal verificar l\'usuari. Introdueix la teua contrasenya d\'app per a continuar. + Verificar + Estat de la sincronització + Actualitzada + Pendent + Sincronitzant + Error de sincronització + Nou element + Editar element + Estilitza el text amb %1$s o %2$s i més. Suport per a Markdown limitat. + cursiva + negreta + Renderitzar previsualització + Torna a autenticar + Demana autenticar-se altre vegada quan visualitzes o emplenes automàticament + Afegir un compte de Bitwarden + No estem afiliats, associats, autoritzats, finançats, ni relacionats de cap manera oficial amb Bitwarden, Inc., o qualsevol dels seus afiliats o subsidiàries. + + Per a passar la verificació del captcha en un client de Bitwarden no oficial, has d\'especificar un secret de client. Per a trobar-lo ves a Caixa Forta Web / Configuració / Clau d\'API. + + Secret del client + Inicia sessió + Regió + Estats Units + Europa + Personalitzat (a un servidor propi) + Capçaleres HTTP + Capçalera HTTP + Pots afegir capçaleres HTTP que seran enviades amb cada petició al servidor. + Clau + Valor + Afegeix Més + URL del servidor + Especifiqueu l\'URL base de la vostra instal·lació de Bitwarden allotjada a un entorn propi. + Entorn personalitzat + Pots especificar l\'URL base de cada servei independentment. + URL de la caixa forta del servidor + URL del servidor API + URL del servidor d\'icones + URL del servidor d\'identitat + Verificació + Aquest mètode d\'autenticació encara no està suportat. + Introduïu el codi de verificació de l\'aplicació autenticadora. + Introdueix el codi de verificació que s\'ha enviat a %1$s. + Introdueix el codi de YubiKey manualment. Col·loca el cursor al camp inferior i activa la YubiKey. + Autenticador + Duo (Organització) + Autenticació Web FIDO2 + Correu electrònic + FIDO U2F + Connecta una YubiKey per USB + Requereix suport d\'USB OTG. + Toca el sensor daurat de la teva YubiKey. + Subjecta la teva YubiKey plana contra la part posterior del teu dispositiu + Requereix suport d\'NFC. + No s\'ha pogut llegir la YubiKey + Fer servir WebAuthn FIDO2 necessita una versió de Bitwarden web igual o major a %1$s. En versions més antigues no s\'interpreta correctament el resultat de l\'autenticació i se\'t redirigirà a l\'aplicació oficial de Bitwarden. + Confirmeu l\'accés + Aquestes dades estan protegides, per a continuar introdueix la teva contrasenya. + + Confirmeu l\'accés + + Utilitza autenticació biomètrica per a confirmar l\'accés i desbloquejar aquestes dades. + Caixa Forta + Envia + Generador + Vigilància + Configuració + S\'ha bloquejat per inactivitat + Text + Arxiu + Inici de sessió + Targeta + Identitat + Nota + Passkey + Text + Booleà + Enllaçat + + Filtrada + Molt segura + Forta + Bona + Correcta + Poc segura + Contrasenyes molt segures + Contrasenyes segures + Bones contrasenyes + Contrasenyes correctes + Contrasenyes poc segures + Filtra + No hi ha filtres disponibles + Ordena per + No es pot ordenar + Títol + Alfabèticament + Al contrari d\'alfabèticament + Recompte d\'accessos + Els més grans primer + Els més petits primer + Data de modificació + Els més nous primer + Els més antics primer + Data de caducitat + Els més nous primer + Els més antics primer + Data d\'eliminació + Els més nous primer + Els més antics primer + Contrasenya + Alfabèticament + Al contrari d\'alfabèticament + Data de modificació de la contrasenya + Els més nous primer + Els més antics primer + Seguretat de la contrasenya + Les més fluixes primer + Les més fortes primer + Cerca a la caixa forta + Nou element + No hi ha cap element sugerit disponible per a aquest context + + Codi de seguretat + Desat a %1$s a %2$s + La contrasenya es va modificar per última vegada el %1$s + Passkey creada el %1$s + Modificat per última vegada el %1$s + Creat el %1$s + Eliminat el %1$s + Va expirar el %1$s + Expirarà el %1$s + Eliminant la programació el %1$s + + Truca + + Missatge + + Email + + Direccions + Enviaments + Cerca enviaments + Nou element + Una contrasenya és necessària per accedir aquesta compartició + Generador + Generador de nom d\'usuari + Generador de contrasenya + Genera + Regenerar + Contrasenya + Les contrasenyes aleatòries proporcionen la millor combinació de memoritzabilitat i seguretat. + Delimitador + Majúscules + Número + Nom d’usuari + Delimitador + Paraula personalitzada + Majúscules inicials + Número + Símbols aleatoris + Una contrasenya forta té almenys %1$d caràcters, lletres majúscules & minúscules, dígits i símbols. + Dígits + Símbols + Lletres majúscules + Lletres minúscules + + Exclou símbols similars + + Exclou símbols ambigus + Captura de tot el correu + Una adreça de correu de captura total dona l\'opció als usuaris de rebre tot el correu electrònic que s\'enviï al seu domini, inclús si s\'envia a una adreça de correu que no ha sigut configurada per al domini. Assegura\'t que el teu proveïdor suporta aquesta funció abans de fer-la servir. + + Domini + Afegit al correu + Els afegits al correu volen dir que qualsevol correu enviat a %1$s també serà enviat al teu compte. Açò vol dir que pots tenir un gran número de variacions al teu correu electrònic per a donar a cada persona, lloc web, o llista de correu. Assegura\'t que el teu proveïdor de correu electònic suporta aquesta funció abans de fer-la servir. + Correu Electrònic + Subdomini de correu electrònic + Amb aquesta configuració, tot el correu enviat a %1$s també s\'enviarà al teu compte. Açò vol dir que pots tindre moltes variacions del teu correu electrònic per a donar a cada persona, lloc web o llista de correu. Assegura\'t que el teu proveïdor de correu suporta la funció abans de fer-la servir. + Correu Electrònic + Àlies de correu electrònic reenviat + Crea un nou inici de sessió amb la contrasenya + Crea un nou inici de sessió amb l\'usuari + Historial de contrasenyes + Mostra consells + Historial del generador + Neteja l\'historial + Netejar l\'historial del generador? + Açò eliminarà tots els elements de l\'historial. + Historial de contrasenyes + Buida l\'historial + Buidar l\'historial de contrasenyes? + Açò eliminarà totes les contrasenyes de l\'historial. + Torre de Vigilància + Seguretat de la contrasenya + Seguretat + Manteniment + Contrasenyes filtrades + Contrasenyes que han sigut filtrades en bases de dades. Aquestes contrasenyes haurien de ser canviades immediatament. + Contrasenyes reutilitzades + No facis servir la mateixa contrasenya en diversos llocs. Genera contrasenyes úniques per millorar la seguretat. + Comptes Vulnerables + Llocs web que van ser afectats per una filtracions de dades després de l\'última vegada que vas canviar la contrasenya. Canvia-la per a mantenir el teu compte assegurat. + Llocs web no segurs + Canvia les URL que fan servir HTTP en comptes d\'HTTPS, ja que aquest últim fa servir els algoritmes d\'encriptació més segurs possibles. + Autenticació de dos factors inactiva + Llocs que tenen autenticació de dos factors disponible, però als quals no l\'has activada. + Passkeys Disponibles + Llocs web que tenen disponibilitat per a passkeys però els quals encara no has configurat. És més simple i segur que una contrasenya. + Elements incomplets + Ajuda a identificar dades que falten o incompletes a la teua caixa forta. Això pot dur a identitats sense nom o inicis de sessió sense nom d\'usuari. + Expiració d\'elements + Elements que han expirat o van a expirar prompte. + URIs duplicades + Elements que tenen una o més URIs que cobreixen les mateixes pàgines web després d\'aplicar la detecció de coincidències. + Elements esborrats + Elements que s\'han mogut a la papereta. Tindre molts elements a la paperera pot endarrerir les operacions amb la teva caixa forta. + Carpetes Buides + Les carpetes que no contenen cap element. + Elements duplicats + Ajuda a identificar i eliminar elements duplicats a la teua caixa forta. + Comptes Compromesos + Comprova filtracions de dades per nom d\'usuari o direcció de correu electrònic. + Canvia la contrasenya de l\'aplicació + Canvia la contrasenya + Autenticació biomètrica + + Canvia la contrasenya de l\'app + La contrasenya d\'aplicació mai es desa al dispositiu ni s\'envia a través de la xarxa. Es fa servir per a generar un secret que s\'utilitza per a encriptar les dades locals. + A no ser que sospites d\'un accés no autoritzat, o descobreixis programari maliciós al teu dispositiu, no hi ha cap necessitat de canviar la contrasenya si és una forta i única. + Contacta\'ns + El teu missatge + Fes servir l\'anglès per assegurar-nos que no hi ha malentesos. + Apreciem el temps que has dedicat escrivint-nos un missatge. El teu missatge va directament a nosaltres, i el fem servir per a solucionar problemes i millorar el producte. Encara que no contestem a tots els missatges, els llegim tots i solucionem els problemes tan prompte com podem. + Comptes + Afegeix un compte + L\'equip darrere de l\'aplicació + Soc un enginyer de software ucraïnès. M\'especialitzo en disseny i desenvolupament d\'aplicacions. + Segueix-me + Cerca + Configuració + Configuració de cerca + Aparença + Emplenament automàtic + Desenvolupament + Experimental + Configuració + Notificacions + Altres + Permisos + Seguretat + Keyguard Prèmium + Torre de Vigilància + Llicències de programari lliure + Comptes + Afegir & veure comptes + Emplenament automàtic + Servei d\'emplenament automàtic d\'Android + Seguretat + Biometria, canvi de contrasenya i temps d\'espera de la caixa forta + Keyguard Prèmium + Desbloqueja funcions & dona suport al desenvolupament de l\'app + Torre de Vigilància + Serveis compromesos, contrasenyes vulnerables + Notificacions + Alertes + Aparença + Idioma, tema i animacions + Desenvolupament + Configuració de prova per al desenvolupament + Altres + Llocs web de la comunitat, informació de l\'app + Mostra etiquetes als botons de navegació + Versió de l\'app + Data de compilació de l\'app + L\'equip darrere de l\'aplicació + Comunitat de Reddit + Projecte de GitHub + Projecte de Crowdin + Llicències de programari lliure + Descarrega l\'arxiu APK + Carrega icones d\'App + Carrega icones Web + Sol·licitar la icona del lloc web pot filtrar la direcció al proveïdor d\'Internet + Format de text enriquit + Fes servir Markdown per a prendre notes + Idioma + Suggerir traducció + Tipus de lletra + Valorar al Play Store + Color de tint + Tema + Fes servir el tema negre contrastrant + Obre els enllaços a un navegador extern + Amaga camps + Amaga informació sensible, tal com contrasenyes i números de targeta de crèdit + + Crash + Proveïdor de credencials + Passkeys, contrasenyes i serveis de dades + Política de privadesa + Contacta\'ns + Experimental + Canvia la contrasenya de l\'app + Requereix la contrasenya d\'app + A més de la teva configuració de seguretat habitual, la teva contrasenya de l\'app serà requerida després d\'aquest temps, o quan es canviï la configuració de biometria + Immediatament + Mai + Envia informes d\'errors + Animacions de transició + Elimina les dades de l\'app + Tanca l\'app i elimina totes les dades locals + Permet captures de pantalla + Mostra el contingut de l\'aplicació quan es canviï entre aplicacions recents, i permet fer captures de pantalla + Amaga el contingut de l\'aplicació quan es canviï entre aplicacions recents, i prohibeix fer captures de pantalla + Seguretat de Dades + Bloqueja la caixa forta + Bloqueja després d\'un reinici + Bloqueja la caixa forta després de reiniciar el dispositiu + Bloqueja quan s\'apagui la pantalla + Bloqueja la caixa forta uns segons després d\'apagar la pantalla + Bloqueja després d\'un temps + Immediatament + Mai + Desa la clau de la caixa forta a un disc + La clau de la caixa forta es desa a l\'emmagatzematge intern + La caixa forta el bloqueja després de descarregar l\'app de la memòria + Desar la clau de la caixa forta a un disc és un risc de seguretat. Si l\'emmagatzematge del dispositiu es compromet, l\'atacant tindrà accés a les dades. + Permisos + Visió general de funcions + Desbloqueig biomètric + + Desbloqueig biomètric + Mantè encesa la pantalla mentre es visualitzen els elements + Servei d\'emplenament automàtic + Fes servir el servei d\'emplenament automàtic d\'Android per ajudar-te emplenant informació d\'inici de sessió a altres apps del dispositiu + Copia contrasenyes d\'un sol ús automàticament + En emplenar informació d\'inici de sessió, còpia automàticament les contrasenyes d\'un sol ús + Suggeriments en línia + Ofereix els suggeriments directament als teclats compatibles + Selecció manual + Mostra una opció per a cercar manualment una entrada a la caixa forta + Respecta la bandera d\'emplenament automàtic desconnectat + Deshabilita l\'emplenament automàtic per a un camp del buscador web que tingui la bandera d\'emplenament automàtic desconnectada + Tingues en compte que algunes pàgines web tendeixen a deshabilitar l\'emplenament automàtic per a camps de contrasenya, i alguns navegadors ignoren la bandera + Demana desar dades + Demana actualitzar la caixa forta quan es completi un formulari + Desa informació d\'apps o pàgines web automàticament + Buida el porta-retalls automàticament + Immediatament + Mai + Durada de la notificació de la contrasenya d\'un sol ús + Quan emplenes un camp d\'inici de sessió automàticament, i té una contrasenya d\'un sol ús, la notificació amb el codi de verificació es mostrarà almenys durant la durada indicada + Mai + Sobre la subscripció de Keyguard + El Prèmium desbloqueja funcions extra i finança el desenvolupament de l\'app. Gràcies per donar-nos suport! ❤️ + Subscripcions + Productes + No s\'han pogut carregar les subscripcions + No s\'han pogut carregar els productes + Actiu + No es renovarà + Administra al Play Store + Penja notificacions + Es fa servir per a penjar notificacions de descàrregues + Càmera + Es fa servir per a escanejar codis QR + Permet la distribució en dos panells en el mode apaïsat + Permet la distribució en dos panells en el mode de retrat + Fosc + Clar + Desactivat + Dinàmic + Transició + Desenvolupat especialment per a millorar la llegibilitat per als lectors amb baixa visió, i millorar la comprensió + Visió general de funcions + Keyguard Prèmium + Comptes múltiples + Inicia sessió amb diversos comptes al mateix temps. + Sincronització en dos sentits + Afegeix o edita elements i sincronitza els canvis en l\'altre sentit. + Edició offline + Afegeix o elimina elements sense connexió. + Cerca + Cerca per qualsevol terme + Nom, correu electrònic, contrasenya, número de mòbil etc. + Filtre + Filtra per carpeta, organització, tipus etc. + Vàries paraules clau + Cerca per \'bitw test\' per a trobar el teu element \'Bitwarden Test Account\'. + Torre de Vigilància + Contrasenyes filtrades + Troba contrasenyes exposades en filtracions de dades. + Seguretat de la contrasenya + Cerca elements amb contrasenyes dèbils. + Contrasenyes reutilitzades + Cerca elements amb contrasenyes reutilitzades. + 2FA inactiva + Troba inicis de sessió amb autenticació de dos factors TOTP disponible. + Llocs web no segurs + Troba llocs web que fan servir el protocol HTTP, canvia automàticament a HTTPS. + Elements incomplets + Troba elements buits que poden necessitar actualitzacions. + Elements a expirar + Troba elements que van a expirar o que falta poc perquè ho facin. + Elements duplicats + Busca i mescla elements duplicats. + Misc + Selecció múltiple + Mescla els xifrats, i accelera la refactorització amb operacions en grup. + Mostra com a codi de barres + Codifica el text com a codis de barres diferents. + Generador + Genera contrasenyes o noms d\'usuari. + Seguretat de Dades + Dades locals + Les dades locals consisteixen en baixades, configuració d\'usuari i caixa forta. Es desen en l\'emmagatzematge intern del dispositiu, que sols pot ser accedit per Android o Keyguard. + Descàrregues + Configuració de l\'usuari + La configuració d\'usuari s\'encripta amb una clau única del dispositiu. + Configuració de l\'usuari + La caixa forta s\'encripta amb una clau, derivada de la contrasenya de l\'app seguint aquestes passes: + La sal i el hash es guarden localment al dispositiu, per a fer-se servir més tard per a generar una clau mestra i desbloquejar la caixa forta. + Desbloquejar una caixa forta vol dir desar una clau correcta a la RAM del dispositiu, guanyant l\'habilitat de llegir i modificar la caixa forta encriptada. + Dades remotes + Les dades es desen remotament als servidors de Bitwarden amb encriptació de zero-coneixement. + diff --git a/common/src/commonMain/resources/MR/cs-rCZ/plurals.xml b/common/src/commonMain/resources/MR/cs-rCZ/plurals.xml new file mode 100644 index 00000000..5f2db8ad --- /dev/null +++ b/common/src/commonMain/resources/MR/cs-rCZ/plurals.xml @@ -0,0 +1,2 @@ + + diff --git a/common/src/commonMain/resources/MR/cs-rCZ/strings.xml b/common/src/commonMain/resources/MR/cs-rCZ/strings.xml new file mode 100644 index 00000000..214f4486 --- /dev/null +++ b/common/src/commonMain/resources/MR/cs-rCZ/strings.xml @@ -0,0 +1,868 @@ + + + OK + Close + Yes + No + + Name + Account name + Username + Password + App password + Current password + New password + Email + Verified + Not verified + Email visibility + Public URL + URL + + Access count + Learn more + Phone number + Passport number + License number + Card number + No card number + Brand + Security code + Valid from + Valid to + Card expiry month + Card expiry year + Cardholder name + Valid from + Expiry date + Company + Sync + + Hidden + + Visible + + Empty + + SSN + City + State + Info + Cancel + Continue + Country + Address + Postal code + Pull to search + Save + URI + URIs + Note + Notes + Attachments + No attachments + Expiring soon + Incomplete data + This item is missing some of the important information. + Item + Items + %1$s items + All items + No items + No folder + New folder + Folder + Folders + No folders + No collection + Collection + Collections + No collections + My vault + Organization + Organizations + No organizations + Miscellaneous + Add integration + Account + Accounts + No accounts + No account + Type + Options + Send + Reset + Length + Security + Contact info + Title + First name + Middle name + Last name + Full name + Address line 1 + Address line 2 + Address line 3 + Rename + Select type + Autofill + Passkey + Create a passkey + Unlock Keyguard + Confirming auth request… + Passkeys + + Signature counter + + Relying party + + Discoverable + Username + Display name + API key + Domain + Edit + Delete + Remove + Remove from the history + Reused password + Reused passwords + One-time password + Authenticator key + Use + Save passkey + Passkey available + Two-factor authentication available + Custom + Follow system settings + + Coming soon + Powered by + Verification code + Re-send verification code + Requested a verification email + Web vault + Launch Web vault + + Remember me + + Trash + + Download + Downloads + No downloads + No duplicates + Encryption + + Key + Hash + Salt + 256-bit AES + Random %1$d-bits of data + None + Text + Linked apps + Linked URIs + Custom fields + Reveal a secure note + Hide a secure note + Master password hint + Fingerprint phrase + What is a fingerprint? + Bitwarden premium + Unofficial Bitwarden server + Last synced at %1$s + Change name + Change color + Change master password hint + Sign out + Sign in + Visit Web vault to verify your email address + Upgrade your account to a premium membership and unlock some great additional features + Two-factor authentication + Require login verification with another device such as a security key, authenticator app, SMS or email + Active + Items + Log out + Log out? + All of the not synchronized changes will be lost! + Change name + Change names + Delete folder? + Delete folders? + This item(s) will be deleted immediately. You can not undo this action. + Recently opened + Often opened + View details + Save to + Add to favourites + Remove from favourites + Enable auth re-prompt + Disable auth re-prompt + Edit + Merge into… + Copy to… + Move to folder + Change name + Change names + Add password + Add passwords + Change password + Change passwords + View password history + Trash + Restore + Delete forever + Move associated items to trash + Open with… + Send with… + Open in a file manager + Delete local file + View parent item + Always show keyboard + Sync vault + Lock vault + Rename folder + Check the email in known data breaches + Check the username in known data breaches + Check the password in known data breaches + Check the website in known data breaches + Launch app + Launch website + Launch docs + Launch browser + Launch main page + Launch Play store + Launch with %1$s + Launch with… + How to delete an account? + Unsecure + Match app + Match detection + Base domain + Match resources by top-level and second-level domain. + Host + Match resources by hostname and (if specified) port. + Starts with + Match resources when the detected resource starts with the URI. + Exact + Match resources when the detected resource exactly matches the URI. + Regular expression + Match resources by regular expression. Advanced option. + Never + Ignore URI during auto-fill item search. + %1$s linked to the password + %1$s linked to the username + %1$s linked to the cardholder name + %1$s linked to the expiration month + %1$s linked to the expiration year + %1$s linked to the card code + %1$s linked to the card brand + %1$s linked to the card number + %1$s linked to the title + %1$s linked to the middle name + %1$s linked to the address line (1) + %1$s linked to the address line (2) + %1$s linked to the address line (3) + %1$s linked to the city + %1$s linked to the state + %1$s linked to the postal code + %1$s linked to the country + %1$s linked to the company + %1$s linked to the email + %1$s linked to the phone number + %1$s linked to the SSN + %1$s linked to the username + %1$s linked to the passport number + %1$s linked to the license number + %1$s linked to the first name + %1$s linked to the last name + %1$s linked to the full name + %1$s linked to an unknown field + Share with… + %1$d selected + Copy + Copy value + Copy URL + Copy URI + Copy package name + Copy password + Copy username + Copy email + Copy phone number + Copy passport number + Copy license number + Copy card number + Copy cardholder name + Copy expiration year + Copy expiration month + Copy CVV code + Copy one-time password + Copy secret key + Unlock Keyguard + Open Keyguard + January + February + March + April + May + June + July + August + September + October + November + December + Move up + Move down + Remove + Remove an item? + Add more + FIDO2 WebAuthn + Authenticate WebAuthn + Return to app + + Must not be empty + + Must not be blank + Must be custom domain + Must contain only US-ASCII characters + Must be at least %1$d symbols long + Must be %1$d symbols long + Invalid domain + Invalid email + Invalid URL + Invalid URI + Invalid card number + Incorrect password + Failed to generate OTP code + Failed to create a passkey + Failed to authorize a request + + Barcode + Show as Barcode + Copy this authenticator to another device by scanning the QR code. + + Date picker + + Color picker + + How to delete an account? + A collection of info of how to delete your account from web services + + Easy + + Medium + + Hard + + Limited availability + + Impossible + Send email + Search websites + No instructions + Two-factor authentication + List of websites with two-factor authentication support + Search websites + Passkeys + List of websites with passkeys support + Search websites + + Data breach + Breached account data can provide malicious actors with access to sensitive personal and financial information, potentially leading to identity theft, financial fraud, and other forms of cybercrime. + No breaches found + Breached accounts found + Breaches + Occurred on %1$s + Reported on %1$s + Failed to check data breaches. You might currently be offline + Data breach + A password that is found in the data breaches takes significantly less time to break and should never be used. + Password is compromised + The password has been identified in known data breaches. Please change it immediately to protect your online security + No breaches found + Failed to check data breaches. You might currently be offline + + Large Type + Show in Large Type + Show in Large Type and Lock vault + App Picker + Search installed apps + System app + No apps + Choose a folder + Create a new folder: + + This organization will have an ownership of the copy. You will not be the direct owner. + Email forwarders + Email forwarders + Delete email forwarder? + Delete email forwarders? + Email forwarder integration + No email forwarders + Create an encrypted vault where the local data will be stored. + App password + Biometric authentication + Create a vault + Send crash reports + Create a vault + Erase app data + Close the app and erase all local app data + The vault is locked. Enter your app password to continue. + Unlock + + Unlock a vault + + Use biometric authentication to unlock the vault. + User verification is required. Enter your app password to continue. + Verify + Sync status + Up to date + Pending + Syncing + Sync failed + New item + Edit item + Style text with %1$s or %2$s and more. Limited Markdown syntax is supported. + italic + bold + Render preview + Auth re-prompt + Ask to authenticate again when you view or autofill a cipher + Add Bitwarden account + We are not affiliated, associated, authorized, endorsed by, or in any way officially connected with the Bitwarden, Inc., or any of its subsidiaries or its affiliates. + + To pass the captcha verification on an unofficial Bitwarden client, you must specify the client secret. To find it, visit Web vault / Settings / API Key. + + Client secret + Sign in + Region + United States + Europe + Custom (self-hosted) + HTTP headers + HTTP header + You can add custom HTTP headers that will be sent with every request to the server. + Key + Value + Add more + Server URL + Specify the base URL of your self-hosted Bitwarden installation. + Custom environment + You can specify the base URL of each service independently. + Web Vault Server URL + API Server URL + Icons Server URL + Identity Server URL + Verification + This authentication method is not supported yet. + Enter the verification code from your authenticator app. + Enter the verification code that was emailed to %1$s. + Enter the YubiKey authentication code manually. Place the cursor on the field below and trigger the YubiKey. + Authenticator + Duo (Organization) + FIDO2 Web Authentication + Email + FIDO U2F + Connect YubiKey via USB + Requires USB OTG support. + Touch the gold sensor on your YubiKey now. + Hold your YubiKey flat against the back of your device + Requires NFC support. + Failed to read YubiKey + Using FIDO2 WebAuthn requires using the Bitwarden Web vault version %1$s or higher. On older versions the authentication result will incorrectly be forwarded to the official Bitwarden app. + Confirm access + This data is protected, to continue please enter your app password. + + Confirm access + + Use biometric authentication to confirm your access and unlock this data. + Vault + Send + Generator + Watchtower + Settings + Locked due to inactivity + Text + File + Login + Card + Identity + Note + Passkey + Text + Boolean + Linked + + Pwned + Very strong + Strong + Good + Fair + Weak + Very strong passwords + Strong passwords + Good passwords + Fair passwords + Weak passwords + Filter + No filters available + Sort by + No sorting available + Title + Alphabetically + Reverse Alphabetically + Access count + Largest First + Smallest First + Modification date + Newest First + Oldest First + Expiration date + Newest First + Oldest First + Deletion date + Newest First + Oldest First + Password + Alphabetically + Reverse Alphabetically + Password modification date + Newest First + Oldest First + Password strength + Weakest First + Strongest First + Search vault + New item + There are no suggested items available for this context + + Security code + Saved to %1$s at %2$s + Password last modified at %1$s + Passkey created at %1$s + Last modified at %1$s + Created at %1$s + Deleted at %1$s + Expired at %1$s + Expiration scheduled at %1$s + Deleting scheduled at %1$s + + Call + + Text + + Email + + Directions + Sends + Search sends + New item + A password is required to access this share + Generator + Username generator + Password generator + Generate + Regenerate + Passphrase + Random passphrases provide the best combination of memorability and security. + Delimiter + Capitalize + Number + Username + Delimiter + Custom word + Capitalize + Number + Random symbols + A strong password has at least %1$d characters, uppercase & lowercase letters, digits and symbols. + Digits + Symbols + Uppercase letters + Lowercase letters + + Exclude similar symbols + + Exclude ambiguous symbols + Catch-all email + A catch-all email address provides users the option to receive all mail sent to their domain, even if they are sent to an email address that has not been set up for their domain. Ensure that your email hosting supports this feature before using it. + + Domain + Plus addressing email + Plus addressing means any email sent to %1$s is still sent to your account. This means you can have a lot of variations on your email address to give out to different people, sites, or mailing lists. Ensure that your email hosting supports this feature before using it. + Email + Subdomain addressing email + Subdomain addressing means any email sent to %1$s is still sent to your account. This means you can have a lot of variations on your email address to give out to different people, sites, or mailing lists. Ensure that your email hosting supports this feature before using it. + Email + Forwarded email alias + Create new login with the password + Create new login with the username + Password history + Show tips + Generator history + Clear history + Clear generator history? + This will remove all items from the history. + Password history + Clear history + Clear password history? + This will remove all passwords from the history. + Watchtower + Password strength + Security + Maintenance + Pwned Passwords + Passwords that have been exposed in data breaches. Such passwords should be changed immediately. + Reused Passwords + Don\'t use the same password on multiple websites. Generate unique passwords to improve security. + Vulnerable Accounts + Sites that were affected by a data breach since you last changed a password. Change your password to keep your account safe. + Unsecure Websites + Change the URLs that use HTTP protocol to use HTTPS protocol, as the latter utilizes the most advanced encryption available. + Inactive two-factor authentication + Sites that have two-factor authentication available but you haven\'t set it up yet. + Available Passkeys + Sites that have passkey available but you haven\'t set it up yet. It\'s simpler and more secure then a password. + Incomplete Items + Helps you identify missing or incomplete data in your vault. This can refer to identities with missing names or logins without usernames. + Expiring Items + Items that have expired or are expiring soon. + Duplicate URIs + Items that have one or more URIs that cover the same websites after applying the match detection. + Trashed Items + Items that have been moved into the trash. Having too many items in the trash may slow down operations with your vault. + Empty Folders + Folders that do not have any items in them. + Duplicate Items + Helps you identify and eliminate duplicate items in your vault. + Compromised Accounts + Check data breaches by a username or email address. + Change app password + Change password + Biometric authentication + + Change app password + App password never gets stored on the device nor sent over the network. It is used to generate a secret key that is used to encrypt the local data. + Unless you suspect unauthorized access or discover a malware on the device, there is no need to change the password if it is a strong, unique password. + Contact us + Your message + Use English to ensure that your feedback doesn\'t get misunderstood. + We appreciate the time that you spend sending us a message. Your message goes directly to us and we use it to troubleshoot issues, make product improvements and fix problems. While we may not reply to every report, we\'re reviewing and working on improvements & fixing issues as fast as we can. + Accounts + Add account + Team behind the app + I\'m a Software engineer from Ukraine. I specialize on app design and development. + Follow me + Search + Settings + Search settings + Appearance + Autofill + Development + Experimental + Settings + Notifications + Other + Permissions + Security + Keyguard Premium + Watchtower + Open-source licenses + Accounts + Add & view accounts + Autofill + Android Autofill & Credential services + Security + Biometrics, change password, vault timeout + Keyguard Premium + Unlock features & support app development + Watchtower + Compromised services, vulnerable passwords + Notifications + Alerts + Appearance + Language, theme and animations + Development + Test settings for development + Other + Community websites, app info + Show labels on navigation buttons + App version + App build date + Team behind the app + Reddit community + GitHub project + Crowdin project + Open-source licenses + Download APK file + Load App icons + Load Website icons + Queuing website icon might leak the website address to internet provider + Rich text formatting + Use Markdown to format notes + Language + Suggest translation + Font + Rate on Play Store + Tint color + Theme + Use contrast black theme + Open links in external browser + Conceal fields + Conceal sensitive info, such as passwords and credit card numbers + + Crash + Credential provider + Passkeys, passwords and data services + Privacy policy + Contact us + Experimental + Change app password + Require app password + In addition to your regular security settings, your app password will be required after this time or when biometry settings are changed + Immediately + Never + Send crash reports + Transition animation + Erase app data + Close the app and erase all local app data + Allow screenshots + Show the content of the app when switching between recent apps and allow capturing a screen + Hide the content of the app when switching between recent apps and forbid capturing a screen + Data safety + Lock vault + Lock after a reboot + Lock the vault after a device reboot + Lock when screen turns off + Lock the vault after a few seconds once the screen is off + Lock after a delay + Immediately + Never + Persist vault key on a disk + Vault key is persisted on an internal storage + Vault is locked after the app is unloaded from the memory + Storing a vault key on a disk is a security risk. If the device\'s internal storage is compromised, the attacker will gain access to the local vault data. + Permissions + Features overview + Biometric unlock + + Biometric unlock + Keep the screen on while viewing items + Autofill service + Use the Android Autofill Framework to assist in filling login information into other apps on the device + Auto-copy one-time passwords + When filling a login information, automatically copy one-time passwords + Inline suggestions + Embeds autofill suggestions directly into compatible keyboards + Manual selection + Displays an option to manually search a vault for an entry + Respect Autofill disabled flag + Disables autofill for a browser field that has autofill disabled flag set + Note that some websites are notorious for disabling autofill for a password field as well as some browsers are notorious for ignoring the autofill disabled flag + Ask to save data + Asks for updating the vault when filling of a form has completed + Auto-save app or website info + Automatically clear clipboard + Immediately + Never + One-time password notification duration + When you autofill a login item that has a one-time password, the notification with verification code will popup for at least the defined duration + Never + About Keyguard membership + The Premium unlocks extra features and funds a development of the app. Thank you for supporting us! ❤️ + Subscriptions + Products + Failed to load a list of subscriptions + Failed to load a list of products + Active + Will not renew + Manage on Play Store + Post notifications + Used to post downloading notifications + Camera + Used to scan QR codes + Allow two panel layout in landscape mode + Allow two panel layout in portrait mode + Dark + Light + Disabled + Dynamic + Crossfade + Developed specifically to increase legibility for readers with low vision, and to improve comprehension + Features Overview + Keyguard Premium + Multiple Accounts + Sign-in to multiple accounts simultaneously. + Two-way sync + Add or edit items and sync the changes back. + Offline editing + Add or edit items without internet connection. + Search + Search by anything + Name, email, password, phone number etc. + Filter + Filter by folder, organization, type etc. + Multiple keywords + Search by \'bitw test\' to find your \'Bitwarden Test Account\' item. + Watchtower + Pwned passwords + Find items with exposed in data breaches passwords. + Password strength + Find items with weak passwords. + Reused passwords + Find items with reused passwords. + Inactive 2FA + Find logins with available TOTP two-factor authentication. + Unsecure websites + Find websites that use HTTP protocol, auto-fix to HTTPS. + Incomplete items + Find empty items that might need updates. + Expiring items + Find expired or soon to be expired items. + Duplicate items + Find and merge duplicate items. + Misc + Multi-selection + Merge ciphers, fasten the refactoring with batch operations. + Show as Barcode + Encode a text as different barcodes. + Generator + Generate passwords or usernames. + Data safety + Local data + Local data consists of Downloads, User settings, Vault. They are stored in the internal storage of a device, which can only be accessed by the Android system or the Keyguard. + Downloads + User settings + The User settings are encrypted using a device-specific key. + Vault + The Vault is encrypted using a Key, derived from the App password using following steps: + The Salt and the Hash is then stored locally on a device, to later generate a master key to unlock the vault. + Unlocking a Vault means storing a correct Key in a device\'s RAM, gaining an ability to read and modify encrypted Vault. + Remote data + Remote data is stored on Bitwarden servers with zero-knowledge encryption. + diff --git a/common/src/commonMain/resources/MR/da-rDK/plurals.xml b/common/src/commonMain/resources/MR/da-rDK/plurals.xml new file mode 100644 index 00000000..5f2db8ad --- /dev/null +++ b/common/src/commonMain/resources/MR/da-rDK/plurals.xml @@ -0,0 +1,2 @@ + + diff --git a/common/src/commonMain/resources/MR/da-rDK/strings.xml b/common/src/commonMain/resources/MR/da-rDK/strings.xml new file mode 100644 index 00000000..214f4486 --- /dev/null +++ b/common/src/commonMain/resources/MR/da-rDK/strings.xml @@ -0,0 +1,868 @@ + + + OK + Close + Yes + No + + Name + Account name + Username + Password + App password + Current password + New password + Email + Verified + Not verified + Email visibility + Public URL + URL + + Access count + Learn more + Phone number + Passport number + License number + Card number + No card number + Brand + Security code + Valid from + Valid to + Card expiry month + Card expiry year + Cardholder name + Valid from + Expiry date + Company + Sync + + Hidden + + Visible + + Empty + + SSN + City + State + Info + Cancel + Continue + Country + Address + Postal code + Pull to search + Save + URI + URIs + Note + Notes + Attachments + No attachments + Expiring soon + Incomplete data + This item is missing some of the important information. + Item + Items + %1$s items + All items + No items + No folder + New folder + Folder + Folders + No folders + No collection + Collection + Collections + No collections + My vault + Organization + Organizations + No organizations + Miscellaneous + Add integration + Account + Accounts + No accounts + No account + Type + Options + Send + Reset + Length + Security + Contact info + Title + First name + Middle name + Last name + Full name + Address line 1 + Address line 2 + Address line 3 + Rename + Select type + Autofill + Passkey + Create a passkey + Unlock Keyguard + Confirming auth request… + Passkeys + + Signature counter + + Relying party + + Discoverable + Username + Display name + API key + Domain + Edit + Delete + Remove + Remove from the history + Reused password + Reused passwords + One-time password + Authenticator key + Use + Save passkey + Passkey available + Two-factor authentication available + Custom + Follow system settings + + Coming soon + Powered by + Verification code + Re-send verification code + Requested a verification email + Web vault + Launch Web vault + + Remember me + + Trash + + Download + Downloads + No downloads + No duplicates + Encryption + + Key + Hash + Salt + 256-bit AES + Random %1$d-bits of data + None + Text + Linked apps + Linked URIs + Custom fields + Reveal a secure note + Hide a secure note + Master password hint + Fingerprint phrase + What is a fingerprint? + Bitwarden premium + Unofficial Bitwarden server + Last synced at %1$s + Change name + Change color + Change master password hint + Sign out + Sign in + Visit Web vault to verify your email address + Upgrade your account to a premium membership and unlock some great additional features + Two-factor authentication + Require login verification with another device such as a security key, authenticator app, SMS or email + Active + Items + Log out + Log out? + All of the not synchronized changes will be lost! + Change name + Change names + Delete folder? + Delete folders? + This item(s) will be deleted immediately. You can not undo this action. + Recently opened + Often opened + View details + Save to + Add to favourites + Remove from favourites + Enable auth re-prompt + Disable auth re-prompt + Edit + Merge into… + Copy to… + Move to folder + Change name + Change names + Add password + Add passwords + Change password + Change passwords + View password history + Trash + Restore + Delete forever + Move associated items to trash + Open with… + Send with… + Open in a file manager + Delete local file + View parent item + Always show keyboard + Sync vault + Lock vault + Rename folder + Check the email in known data breaches + Check the username in known data breaches + Check the password in known data breaches + Check the website in known data breaches + Launch app + Launch website + Launch docs + Launch browser + Launch main page + Launch Play store + Launch with %1$s + Launch with… + How to delete an account? + Unsecure + Match app + Match detection + Base domain + Match resources by top-level and second-level domain. + Host + Match resources by hostname and (if specified) port. + Starts with + Match resources when the detected resource starts with the URI. + Exact + Match resources when the detected resource exactly matches the URI. + Regular expression + Match resources by regular expression. Advanced option. + Never + Ignore URI during auto-fill item search. + %1$s linked to the password + %1$s linked to the username + %1$s linked to the cardholder name + %1$s linked to the expiration month + %1$s linked to the expiration year + %1$s linked to the card code + %1$s linked to the card brand + %1$s linked to the card number + %1$s linked to the title + %1$s linked to the middle name + %1$s linked to the address line (1) + %1$s linked to the address line (2) + %1$s linked to the address line (3) + %1$s linked to the city + %1$s linked to the state + %1$s linked to the postal code + %1$s linked to the country + %1$s linked to the company + %1$s linked to the email + %1$s linked to the phone number + %1$s linked to the SSN + %1$s linked to the username + %1$s linked to the passport number + %1$s linked to the license number + %1$s linked to the first name + %1$s linked to the last name + %1$s linked to the full name + %1$s linked to an unknown field + Share with… + %1$d selected + Copy + Copy value + Copy URL + Copy URI + Copy package name + Copy password + Copy username + Copy email + Copy phone number + Copy passport number + Copy license number + Copy card number + Copy cardholder name + Copy expiration year + Copy expiration month + Copy CVV code + Copy one-time password + Copy secret key + Unlock Keyguard + Open Keyguard + January + February + March + April + May + June + July + August + September + October + November + December + Move up + Move down + Remove + Remove an item? + Add more + FIDO2 WebAuthn + Authenticate WebAuthn + Return to app + + Must not be empty + + Must not be blank + Must be custom domain + Must contain only US-ASCII characters + Must be at least %1$d symbols long + Must be %1$d symbols long + Invalid domain + Invalid email + Invalid URL + Invalid URI + Invalid card number + Incorrect password + Failed to generate OTP code + Failed to create a passkey + Failed to authorize a request + + Barcode + Show as Barcode + Copy this authenticator to another device by scanning the QR code. + + Date picker + + Color picker + + How to delete an account? + A collection of info of how to delete your account from web services + + Easy + + Medium + + Hard + + Limited availability + + Impossible + Send email + Search websites + No instructions + Two-factor authentication + List of websites with two-factor authentication support + Search websites + Passkeys + List of websites with passkeys support + Search websites + + Data breach + Breached account data can provide malicious actors with access to sensitive personal and financial information, potentially leading to identity theft, financial fraud, and other forms of cybercrime. + No breaches found + Breached accounts found + Breaches + Occurred on %1$s + Reported on %1$s + Failed to check data breaches. You might currently be offline + Data breach + A password that is found in the data breaches takes significantly less time to break and should never be used. + Password is compromised + The password has been identified in known data breaches. Please change it immediately to protect your online security + No breaches found + Failed to check data breaches. You might currently be offline + + Large Type + Show in Large Type + Show in Large Type and Lock vault + App Picker + Search installed apps + System app + No apps + Choose a folder + Create a new folder: + + This organization will have an ownership of the copy. You will not be the direct owner. + Email forwarders + Email forwarders + Delete email forwarder? + Delete email forwarders? + Email forwarder integration + No email forwarders + Create an encrypted vault where the local data will be stored. + App password + Biometric authentication + Create a vault + Send crash reports + Create a vault + Erase app data + Close the app and erase all local app data + The vault is locked. Enter your app password to continue. + Unlock + + Unlock a vault + + Use biometric authentication to unlock the vault. + User verification is required. Enter your app password to continue. + Verify + Sync status + Up to date + Pending + Syncing + Sync failed + New item + Edit item + Style text with %1$s or %2$s and more. Limited Markdown syntax is supported. + italic + bold + Render preview + Auth re-prompt + Ask to authenticate again when you view or autofill a cipher + Add Bitwarden account + We are not affiliated, associated, authorized, endorsed by, or in any way officially connected with the Bitwarden, Inc., or any of its subsidiaries or its affiliates. + + To pass the captcha verification on an unofficial Bitwarden client, you must specify the client secret. To find it, visit Web vault / Settings / API Key. + + Client secret + Sign in + Region + United States + Europe + Custom (self-hosted) + HTTP headers + HTTP header + You can add custom HTTP headers that will be sent with every request to the server. + Key + Value + Add more + Server URL + Specify the base URL of your self-hosted Bitwarden installation. + Custom environment + You can specify the base URL of each service independently. + Web Vault Server URL + API Server URL + Icons Server URL + Identity Server URL + Verification + This authentication method is not supported yet. + Enter the verification code from your authenticator app. + Enter the verification code that was emailed to %1$s. + Enter the YubiKey authentication code manually. Place the cursor on the field below and trigger the YubiKey. + Authenticator + Duo (Organization) + FIDO2 Web Authentication + Email + FIDO U2F + Connect YubiKey via USB + Requires USB OTG support. + Touch the gold sensor on your YubiKey now. + Hold your YubiKey flat against the back of your device + Requires NFC support. + Failed to read YubiKey + Using FIDO2 WebAuthn requires using the Bitwarden Web vault version %1$s or higher. On older versions the authentication result will incorrectly be forwarded to the official Bitwarden app. + Confirm access + This data is protected, to continue please enter your app password. + + Confirm access + + Use biometric authentication to confirm your access and unlock this data. + Vault + Send + Generator + Watchtower + Settings + Locked due to inactivity + Text + File + Login + Card + Identity + Note + Passkey + Text + Boolean + Linked + + Pwned + Very strong + Strong + Good + Fair + Weak + Very strong passwords + Strong passwords + Good passwords + Fair passwords + Weak passwords + Filter + No filters available + Sort by + No sorting available + Title + Alphabetically + Reverse Alphabetically + Access count + Largest First + Smallest First + Modification date + Newest First + Oldest First + Expiration date + Newest First + Oldest First + Deletion date + Newest First + Oldest First + Password + Alphabetically + Reverse Alphabetically + Password modification date + Newest First + Oldest First + Password strength + Weakest First + Strongest First + Search vault + New item + There are no suggested items available for this context + + Security code + Saved to %1$s at %2$s + Password last modified at %1$s + Passkey created at %1$s + Last modified at %1$s + Created at %1$s + Deleted at %1$s + Expired at %1$s + Expiration scheduled at %1$s + Deleting scheduled at %1$s + + Call + + Text + + Email + + Directions + Sends + Search sends + New item + A password is required to access this share + Generator + Username generator + Password generator + Generate + Regenerate + Passphrase + Random passphrases provide the best combination of memorability and security. + Delimiter + Capitalize + Number + Username + Delimiter + Custom word + Capitalize + Number + Random symbols + A strong password has at least %1$d characters, uppercase & lowercase letters, digits and symbols. + Digits + Symbols + Uppercase letters + Lowercase letters + + Exclude similar symbols + + Exclude ambiguous symbols + Catch-all email + A catch-all email address provides users the option to receive all mail sent to their domain, even if they are sent to an email address that has not been set up for their domain. Ensure that your email hosting supports this feature before using it. + + Domain + Plus addressing email + Plus addressing means any email sent to %1$s is still sent to your account. This means you can have a lot of variations on your email address to give out to different people, sites, or mailing lists. Ensure that your email hosting supports this feature before using it. + Email + Subdomain addressing email + Subdomain addressing means any email sent to %1$s is still sent to your account. This means you can have a lot of variations on your email address to give out to different people, sites, or mailing lists. Ensure that your email hosting supports this feature before using it. + Email + Forwarded email alias + Create new login with the password + Create new login with the username + Password history + Show tips + Generator history + Clear history + Clear generator history? + This will remove all items from the history. + Password history + Clear history + Clear password history? + This will remove all passwords from the history. + Watchtower + Password strength + Security + Maintenance + Pwned Passwords + Passwords that have been exposed in data breaches. Such passwords should be changed immediately. + Reused Passwords + Don\'t use the same password on multiple websites. Generate unique passwords to improve security. + Vulnerable Accounts + Sites that were affected by a data breach since you last changed a password. Change your password to keep your account safe. + Unsecure Websites + Change the URLs that use HTTP protocol to use HTTPS protocol, as the latter utilizes the most advanced encryption available. + Inactive two-factor authentication + Sites that have two-factor authentication available but you haven\'t set it up yet. + Available Passkeys + Sites that have passkey available but you haven\'t set it up yet. It\'s simpler and more secure then a password. + Incomplete Items + Helps you identify missing or incomplete data in your vault. This can refer to identities with missing names or logins without usernames. + Expiring Items + Items that have expired or are expiring soon. + Duplicate URIs + Items that have one or more URIs that cover the same websites after applying the match detection. + Trashed Items + Items that have been moved into the trash. Having too many items in the trash may slow down operations with your vault. + Empty Folders + Folders that do not have any items in them. + Duplicate Items + Helps you identify and eliminate duplicate items in your vault. + Compromised Accounts + Check data breaches by a username or email address. + Change app password + Change password + Biometric authentication + + Change app password + App password never gets stored on the device nor sent over the network. It is used to generate a secret key that is used to encrypt the local data. + Unless you suspect unauthorized access or discover a malware on the device, there is no need to change the password if it is a strong, unique password. + Contact us + Your message + Use English to ensure that your feedback doesn\'t get misunderstood. + We appreciate the time that you spend sending us a message. Your message goes directly to us and we use it to troubleshoot issues, make product improvements and fix problems. While we may not reply to every report, we\'re reviewing and working on improvements & fixing issues as fast as we can. + Accounts + Add account + Team behind the app + I\'m a Software engineer from Ukraine. I specialize on app design and development. + Follow me + Search + Settings + Search settings + Appearance + Autofill + Development + Experimental + Settings + Notifications + Other + Permissions + Security + Keyguard Premium + Watchtower + Open-source licenses + Accounts + Add & view accounts + Autofill + Android Autofill & Credential services + Security + Biometrics, change password, vault timeout + Keyguard Premium + Unlock features & support app development + Watchtower + Compromised services, vulnerable passwords + Notifications + Alerts + Appearance + Language, theme and animations + Development + Test settings for development + Other + Community websites, app info + Show labels on navigation buttons + App version + App build date + Team behind the app + Reddit community + GitHub project + Crowdin project + Open-source licenses + Download APK file + Load App icons + Load Website icons + Queuing website icon might leak the website address to internet provider + Rich text formatting + Use Markdown to format notes + Language + Suggest translation + Font + Rate on Play Store + Tint color + Theme + Use contrast black theme + Open links in external browser + Conceal fields + Conceal sensitive info, such as passwords and credit card numbers + + Crash + Credential provider + Passkeys, passwords and data services + Privacy policy + Contact us + Experimental + Change app password + Require app password + In addition to your regular security settings, your app password will be required after this time or when biometry settings are changed + Immediately + Never + Send crash reports + Transition animation + Erase app data + Close the app and erase all local app data + Allow screenshots + Show the content of the app when switching between recent apps and allow capturing a screen + Hide the content of the app when switching between recent apps and forbid capturing a screen + Data safety + Lock vault + Lock after a reboot + Lock the vault after a device reboot + Lock when screen turns off + Lock the vault after a few seconds once the screen is off + Lock after a delay + Immediately + Never + Persist vault key on a disk + Vault key is persisted on an internal storage + Vault is locked after the app is unloaded from the memory + Storing a vault key on a disk is a security risk. If the device\'s internal storage is compromised, the attacker will gain access to the local vault data. + Permissions + Features overview + Biometric unlock + + Biometric unlock + Keep the screen on while viewing items + Autofill service + Use the Android Autofill Framework to assist in filling login information into other apps on the device + Auto-copy one-time passwords + When filling a login information, automatically copy one-time passwords + Inline suggestions + Embeds autofill suggestions directly into compatible keyboards + Manual selection + Displays an option to manually search a vault for an entry + Respect Autofill disabled flag + Disables autofill for a browser field that has autofill disabled flag set + Note that some websites are notorious for disabling autofill for a password field as well as some browsers are notorious for ignoring the autofill disabled flag + Ask to save data + Asks for updating the vault when filling of a form has completed + Auto-save app or website info + Automatically clear clipboard + Immediately + Never + One-time password notification duration + When you autofill a login item that has a one-time password, the notification with verification code will popup for at least the defined duration + Never + About Keyguard membership + The Premium unlocks extra features and funds a development of the app. Thank you for supporting us! ❤️ + Subscriptions + Products + Failed to load a list of subscriptions + Failed to load a list of products + Active + Will not renew + Manage on Play Store + Post notifications + Used to post downloading notifications + Camera + Used to scan QR codes + Allow two panel layout in landscape mode + Allow two panel layout in portrait mode + Dark + Light + Disabled + Dynamic + Crossfade + Developed specifically to increase legibility for readers with low vision, and to improve comprehension + Features Overview + Keyguard Premium + Multiple Accounts + Sign-in to multiple accounts simultaneously. + Two-way sync + Add or edit items and sync the changes back. + Offline editing + Add or edit items without internet connection. + Search + Search by anything + Name, email, password, phone number etc. + Filter + Filter by folder, organization, type etc. + Multiple keywords + Search by \'bitw test\' to find your \'Bitwarden Test Account\' item. + Watchtower + Pwned passwords + Find items with exposed in data breaches passwords. + Password strength + Find items with weak passwords. + Reused passwords + Find items with reused passwords. + Inactive 2FA + Find logins with available TOTP two-factor authentication. + Unsecure websites + Find websites that use HTTP protocol, auto-fix to HTTPS. + Incomplete items + Find empty items that might need updates. + Expiring items + Find expired or soon to be expired items. + Duplicate items + Find and merge duplicate items. + Misc + Multi-selection + Merge ciphers, fasten the refactoring with batch operations. + Show as Barcode + Encode a text as different barcodes. + Generator + Generate passwords or usernames. + Data safety + Local data + Local data consists of Downloads, User settings, Vault. They are stored in the internal storage of a device, which can only be accessed by the Android system or the Keyguard. + Downloads + User settings + The User settings are encrypted using a device-specific key. + Vault + The Vault is encrypted using a Key, derived from the App password using following steps: + The Salt and the Hash is then stored locally on a device, to later generate a master key to unlock the vault. + Unlocking a Vault means storing a correct Key in a device\'s RAM, gaining an ability to read and modify encrypted Vault. + Remote data + Remote data is stored on Bitwarden servers with zero-knowledge encryption. + diff --git a/common/src/commonMain/resources/MR/de-rDE/plurals.xml b/common/src/commonMain/resources/MR/de-rDE/plurals.xml new file mode 100644 index 00000000..5f2db8ad --- /dev/null +++ b/common/src/commonMain/resources/MR/de-rDE/plurals.xml @@ -0,0 +1,2 @@ + + diff --git a/common/src/commonMain/resources/MR/de-rDE/strings.xml b/common/src/commonMain/resources/MR/de-rDE/strings.xml new file mode 100644 index 00000000..9fd7c320 --- /dev/null +++ b/common/src/commonMain/resources/MR/de-rDE/strings.xml @@ -0,0 +1,868 @@ + + + OK + Schließen + Ja + Nein + + Name + Kontoname + Benutzername + Passwort + App-Passwort + Aktuelles Passwort + Neues Passwort + E-Mail + Verifiziert + Nicht verifiziert + E-Mail Sichtbarkeit + Öffentliche URL + URL + + Anzahl der Ansichten + Mehr Informationen + Telefonnummer + Ausweisnummer + Ausweisnummer + Kartennummer + Keine Kartennummer + Marke + CVV + Gültig vom + Gültig bis + Card expiry month + Card expiry year + Name des Karteninhabers + Gültig ab + Gültig bis + Unternehmen + Synchronisierung + + Verborgen + + Sichtbar + + Leer + + SSN + Ort + Staat/Provinz + Info + Abbrechen + Fortsetzen + Land + Adresse + PLZ + Zum Suchen ziehen + Speichern + URI + URIs + Notiz + Notizen + Anhänge + Keine Anhänge + Läuft bald ab + Unvollständige Daten + In diesem Eintrag fehlen einige wichtige Informationen. + Element + Elemente + %1$s Elemente + Alle Einträge + Keine Einträge vorhanden + Kein Ordner + Neuer Ordner + Ordner + Ordner + Keine Ordner vorhanden + Keine Sammlung + Sammlung + Sammlungen + Keine Kollektionen vorhanden + Mein Tresor + Unternehmen + Organisationen + Keine Organisationen vorhanden + Diverses + Integration hinzufügen + Konto + Konten + Keine Accounts vorhanden + Kein Konto + Typ + Optionen + Senden + Zurücksetzen + Länge + Sicherheit + Kontaktdaten + Titel + Vorname + Zweitname + Nachname + Full name + Adresszeile 1 + Adresszeile 2 + Adresszeile 3 + Umbenennen + Select type + Automatisches Ausfüllen + Passkey + Create a passkey + Unlock Keyguard + Confirming auth request… + Passkeys + + Signature counter + + Relying party + + Auffindbar + Benutzername + Anzeigename + API-Schlüssel + Domäne + Bearbeiten + Löschen + Entfernen + Aus Verlauf entfernen + Wiederverwendetes Passwort + Wiederverwendete Passwörter + Einmalpasswort + Authentifizierungsschlüssel + Nutzen + Save passkey + Passkey verfügbar + Zwei-Faktor-Authentifizierung verfügbar + Benutzerdefiniert + Systemeinstellungen folgen + + Demnächst + Betrieben durch + Bestätigungscode + Bestätigungs-Code erneut senden + Bestätigungs E-Mail angefordert + Web-Tresor + Web-Tresor starten + + Anmeldedaten speichern + + Papierkorb + + Herunterladen + Heruntergeladenes + Keine Downloads vorhanden + Keine Duplikate vorhanden + Verschlüsselung + + Schlüssel + Hash + Salz + 256-Bit AES + Zufällige %1$d Bits von Daten + Keine + Text + Verknüpfte Apps + Verknüpfte URIs + Benutzerdefinierte Felder + Sichere Notiz anzeigen + Sichere Notiz ausblenden + Master-Passwort-Hinweis + Fingerabdrucksatz + Was ist ein Fingerabdruck? + Bitwarden premium + Inoffizieller Bitwarden-Server + Zuletzt synchronisiert am %1$s + Name ändern + Farbe ändern + Master-Passwort-Hinweis ändern + Abmelden + Anmelden + Besuchen Sie den Web-Tresor, um Ihre E-Mail-Adresse zu verifizieren + Upgrade dein Konto auf eine Premium-Mitgliedschaft, um zusätzliche, großartige Funktionen freizuschalten + Zwei-Faktor-Authentifizierung + Erfordert die Überprüfung der Anmeldung mit einem anderen Gerät wie einem Sicherheitsschlüssel, einer Authentifizierungs-App, einer SMS oder einer E-Mail + Aktiv + Elemente + Abmelden + Abmelden? + Alle nicht synchronisierten Änderungen gehen verloren! + Name ändern + Namen ändern + Ordner löschen? + Ordner löschen? + Diese Elemente werden sofort gelöscht. Sie können diese Aktion nicht rückgängig machen. + Kürzlich geöffnet + Oft geöffnet + Details anzeigen + Speichern unter + Zu Favoriten hinzufügen + Aus Favoriten entfernen + Aktiviere Authentifizierungs-Wiederholung + Deaktiviere Authentifizierungs-Wiederholung + Bearbeiten + Zusammenführen… + Kopieren nach… + In Ordner verschieben + Name ändern + Namen ändern + Passwort hinzufügen + Passwörter hinzufügen + Passwort ändern + Passwörter ändern + Passwortverlauf anzeigen + Papierkorb + Wiederherstellen + Für immer löschen + Zugehörige Elemente in den Papierkorb verschieben + Öffnen mit… + Mit… senden + Im Dateimanager öffnen + Delete local file + View parent item + Tastatur immer anzeigen + Tresor synchronisieren + Tresor sperren + Ordner umbenennen + Überprüfe, ob die E-Mail in bekannten Datenlecks vorhanden ist + Überprüfe, ob der Benutzernamen bei bekannten Datenlecks vorhanden ist + Überprüfe, ob das Passwort bei bekannten Datenlecks vorhanden ist + Website in bekannten Datenlecks überprüfen + App starten + Website Öffnen + Dokumentation öffnen + Browser starten + Hauptseite starten + Play Store starten + Mit %1$s starten + Starten mit… + Wie lösche ich ein Konto? + Unsicher + Passende App + Übereinstimmungserkennung + Basisdomäne + Ressourcen nach Top-Level- und Second-Level-Domäne abgleichen. + Host + Ressourcen nach Hostname und (wenn angegeben) Port abgleichen. + Beginnt mit + Ressourcen anpassen, wenn die erkannte Ressource mit der URL beginnt. + Genau + Ressourcen anpassen, wenn die erkannte Ressource genau mit der URL übereinstimmt. + Regular expression + Ressourcen nach regulärem Ausdruck anpassen. Erweiterte Option. + Nie + Ignoriere URI während der automatischen Artikelsuche. + %1$s linked to the password + %1$s linked to the username + %1$s linked to the cardholder name + %1$s linked to the expiration month + %1$s linked to the expiration year + %1$s linked to the card code + %1$s linked to the card brand + %1$s linked to the card number + %1$s linked to the title + %1$s linked to the middle name + %1$s linked to the address line (1) + %1$s linked to the address line (2) + %1$s linked to the address line (3) + %1$s linked to the city + %1$s linked to the state + %1$s linked to the postal code + %1$s linked to the country + %1$s linked to the company + %1$s linked to the email + %1$s linked to the phone number + %1$s linked to the SSN + %1$s linked to the username + %1$s linked to the passport number + %1$s linked to the license number + %1$s linked to the first name + %1$s linked to the last name + %1$s linked to the full name + %1$s linked to an unknown field + Teilen mit… + %1$d ausgewählt + Kopieren + Inhalt kopieren + URL kopieren + URI kopieren + Paketname kopieren + Passwort kopieren + Benutzername kopieren + E-Mail kopieren + Telefonnummer kopieren + Passnummer kopieren + Lizenznummer kopieren + Kartennummer kopieren + Namen des Karteninhabers kopieren + Ablaufjahr kopieren + Ablaufmonat kopieren + CVV-Code kopieren + OTP-Code kopieren + Geheimschlüssel kopieren + Keyguard entsperren + Keyguard öffnen + Januar + Februar + März + April + Mai + Juni + Juli + August + September + Oktober + November + Dezember + Nach oben + Nach unten + Entfernen + Element entfernen? + Mehr hinzufügen + FIDO2 WebAuthn + WebAuthn authentifizieren + Zurück zur App + + Darf nicht leer sein + + Darf nicht leer sein + Muss eine eigene Domain sein + Darf nur US-ASCII-Zeichen enthalten + Muss mindestens %1$d Zeichen lang sein + Muss %1$d Zeichen lang sein + Ungültige Domain + Ungültige E-Mail + Ungültige URL + Ungültige URI + Kartennummer ungültig + Falsches Passwort + Fehler beim Generieren des OTP-Codes + Failed to create a passkey + Failed to authorize a request + + Barcode + Als Barcode anzeigen + Kopieren Sie diesen Authentifikator auf ein anderes Gerät, indem Sie den QR-Code scannen. + + Datumsauswahl + + Farbauswahl + + Wie lösche ich ein Konto? + Eine Sammlung von Informationen, wie Sie Ihr Konto von Webdiensten löschen können + + Einfach + + Mittel + + Schwer + + Begrenzte Verfügbarkeit + + Unmöglich + E-Mail senden + Webseiten durchsuchen + Keine Anweisungen + Zwei-Faktor-Authentifizierung + Liste an Webseiten mit Unterstützung für Zwei-Faktor-Authentifizierung + Webseiten durchsuchen + Passkeys + Liste der Websites mit Unterstützung von Passkeys + Webseiten durchsuchen + + Datenleck + Die veröffentlichten Kontodaten können böswilligen Aktoren Zugriff auf vertrauliche persönliche und finanzielle Informationen gewähren, was potenziell zu Identitätsdiebstahl, Finanzbetrug und anderen Formen von Cyberkriminalität führen. + Keine Datenlecks gefunden + Betroffene Konten gefunden + Datenlecks + Am %1$s passiert + Gemeldet am %1$s + Fehler beim Prüfen von Datenbruchs. Möglicherweise sind Sie derzeit offline + Datenleck + Ein Passwort, das in den Datenlecks gefunden wird, dauert deutlich weniger Zeit zum Brechen und wird nicht empfohlen zu verwenden. + Gebrochene Passwörter gefunden + Das Passwort wurde bei bekannten Datenlecks identifiziert. Bitte ändern Sie es sofort, um Ihre Online-Sicherheit zu schützen + Keine Datenlecks gefunden + Konnte nicht auf Datenlecks überprüfen. Möglicherweise bist Du offline + + Großer Typ + Im großen Typ anzeigen + Im großen Typ anzeigen und Tresor verschließen + App Auswahl + Installierte Apps durchsuchen + System App + Keine Apps + Ordner auswählen + Neuen Ordner erstellen: + + Diese Organisation wird Eigentum der Kopie haben. Sie werden nicht der direkte Eigentümer sein. + E-Mail-Weiterleitungen + E-Mail-Weiterleitungen + E-Mail-Weiterleitung löschen? + E-Mail-Weiterleitungen löschen? + E-Mail-Weiterleitung Integration + No email forwarders + Erstelle einen verschlüsselten Tresor in dem lokale Daten gespeichert werden. + App Passwort + Biometrische Authentifizierung + Tresor erstellen + Absturzberichte senden + Tresor erstellen + App-Daten löschen + App schließen und alle lokalen App-Daten löschen + Der Tresor ist gesperrt. Geben Sie Ihr App-Passwort ein, um fortzufahren. + Entsperren + + Tresor freischalten + + Verwenden Sie biometrische Authentifizierung, um den Tresor zu entsperren. + Benutzerverifizierung erforderlich. Geben Sie Ihr App-Passwort ein, um fortzufahren. + Verify + Synchronisationsstatus + Auf dem neuesten Stand + Ausstehend + Synchronisieren + Synchronisierung fehlgeschlagen + Neues Element + Element bearbeiten + Text mit %1$s oder %2$s und mehr visuell aufarbeiten. Limitierter Markdown-Syntax wird unterstützt. + kursiv + fett + Render-Vorschau + Auth erneut anfordern + Nach erneuter Authentifizierung fragen, wenn du eine Chiffre ansiehst oder automatisch Einfügst + Bitwarden Account hinzufügen + Wir sind nicht verbunden, verknüpft, autorisiert, unterstützt oder in irgendeiner Weise offiziell verbunden mit der Bitwarden, Inc. oder einer ihrer Tochtergesellschaften oder ihrer verbundenen Unternehmen. + + Um die Captcha-Verifizierung auf einem inoffiziellen Bitwarden-Client zu bestehen, müssen Sie das Client-Geheimnis angeben. Um es zu finden, besuchen Sie den Web-Tresor / Einstellungen / API-Schlüssel. + + Client-Geheimnis + Anmelden + Region + Vereinigte Staaten + Europa + Benutzerdefiniert (selbst gehostet) + HTTP-Header + HTTP-Header + Sie können eigene HTTP-Header hinzufügen, die mit jeder Anfrage an den Server gesendet werden. + Schlüssel + Wert + Mehr hinzufügen + Server-URL + Geben Sie die Basis-URL Ihrer selbst gehosteten Bitwarden Installation an. + Benutzerdefinierte Umgebung + Sie können die Basis-URL jedes Dienstes unabhängig voneinander angeben. + Web-Tresor Server URL + API Server URL + Icons Server URL + Identitätsserver-URL + Verifizierung + Diese Authentifizierungsmethode wird noch nicht unterstützt. + Geben Sie den Bestätigungscode aus Ihrer Authentifizierungs-App ein. + Geben Sie den Bestätigungscode ein, der an %1$s gesendet wurde. + Geben Sie den YubiKey Authentifizierungscode manuell ein. Platzieren Sie den Cursor auf das Feld unten und lösen Sie den YubiKey aus. + Authentifizierer + Duo (Organisation) + FIDO2 Web-Authentifizierung + E-Mail + FIDO U2F + Verbinde YubiKey über USB + Erfordert USB OTG Unterstützung. + Berühren Sie jetzt den Goldsensor auf Ihrem YubiKey. + Halte deinen YubiKey flach gegen die Rückseite deines Geräts + Benötigt NFC-Unterstützung. + Fehler beim Lesen von YubiKey + Die Verwendung von FIDO2 WebAuthn erfordert die Verwendung der Bitwarden Web Tresor Version %1$s oder höher. Bei älteren Versionen wird das Authentifizierungsergebnis fälschlicherweise an die offizielle Bitwarden App weitergeleitet. + Zugriff bestätigen + Diese Daten sind geschützt, um fortzufahren, bitte geben Sie Ihr App-Passwort ein. + + Zugriff bestätigen + + Biometrische Authentifizierung verwenden, um den Zugriff zu bestätigen und die Daten freizuschalten. + Tresor + Send + Generator + Wachturm + Einstellungen + Wegen Inaktivität gesperrt + Text + Datei + Login + Karte + Identität + Notiz + Passkey + Text + Wahrheitswert + Verknüpft + + Aufgedeckt + Sehr stark + Stark + Gut + Fair + Schwach + Sehr starke Passwörter + Starke Passwörter + Gute Passwörter + Faire Passwörter + Schwache Passwörter + Filter + Keine Filter verfügbar + Sortieren nach + Keine Sortierung verfügbar + Titel + Alphabetisch + Umgekehrt Alphabetisch + Anzahl der Ansichten + Größte zuerst + Kleinste zuerst + Änderungsdatum + Neuste zuerst + Älteste zuerst + Verfallsdatum + Neuste zuerst + Älteste zuerst + Löschdatum + Neuste zuerst + Älteste zuerst + Passwort + Alphabetisch + Umgekehrt Alphabetisch + Passwort Änderungsdatum + Neuste zuerst + Älteste zuerst + Passwortstärke + Schwächste zuerst + Stärkste zuerst + Tresor durchsuchen + Neuer Eintrag + There are no suggested items available for this context + + Sicherheitscode + In %1$s auf %2$s gespeichert + Passwort zuletzt geändert am %1$s + Passkey erstellt am %1$s + Zuletzt geändert am %1$s + Erstellt am %1$s + Gelöscht am %1$s + Abgelaufen am %1$s + Ablaufdatum %1$s + Löschung geplant für %1$s + + Anrufen + + Schreiben + + E-Mail + + Wegbeschreibung + Sends + Sends durchsuchen + Neuer Eintrag + Ein Passwort wird benötigt, um auf diese Freigabe zuzugreifen + Generator + Benutzernamen Generator + Passwort Generator + Generieren + Neu generieren + Passphrase + Zufällige Passphrasen bieten die beste Kombination aus Gedächtnisfähigkeit und Sicherheit. + Trennzeichen + Großbuchstaben + Zahlen + Benutzername + Trennzeichen + Benutzerdefiniertes Wort + Großschreibung + Zahlen + Zufällige Symbole + Ein starkes Passwort hat eine Mindestlänge von %1$d, Groß- & Kleinbuchstaben, Zahlen und Symbole. + Stellen + Symbole + Großbuchstaben + Kleinbuchstaben + + Ähnliche Symbole ausschließen + + Mehrdeutige Symbole ausschließen + Catch-All E-Mail Adresse + Eine \"Catch-All-E-Mail-Adresse\" bietet Benutzern die Möglichkeit, alle E-Mails an ihre Domain zu erhalten, auch wenn sie an eine E-Mail-Adresse gesendet werden, die nicht für ihre Domain eingerichtet wurde. Stellen Sie sicher, dass Ihr E-Mail-Hosting diese Funktion unterstützt, bevor Sie sie verwenden. + + Domäne + Plus-adressierte E-Mail-Adresse + Plus Adressierung bedeutet, dass jede E-Mail, die an %1$s gesendet wird, immer noch an Ihr Konto gesendet wird. Das bedeutet, dass Sie eine Vielzahl von Variationen an Ihre E-Mail-Adresse haben können, die Sie an verschiedene Personen, Seiten oder Mailinglisten verteilen können. Stellen Sie sicher, dass Ihr E-Mail-Hosting diese Funktion unterstützt, bevor Sie sie verwenden. + E-Mail + Subdomänen adressierende E-Mail + Subdomänenadressierung bedeutet, dass jede E-Mail, die an %1$s gesendet wird, immer noch an Ihr Konto gesendet wird. Das bedeutet, dass Sie eine Vielzahl von Variationen an Ihre E-Mail-Adresse haben können, die Sie an verschiedene Personen, Sites oder Mailinglisten verteilen können. Stellen Sie sicher, dass Ihr E-Mail-Hosting diese Funktion unterstützt, bevor Sie sie verwenden. + E-Mail + Weitergeleiteter E-Mail-Alias + Neuen Login mit Passwort erstellen + Neuen Login mit dem Benutzernamen erstellen + Passwortverlauf + Tipps anzeigen + Generatorverlauf + Verlauf leeren + Generatorverlauf löschen? + Dadurch werden alle Elemente aus dem Verlauf entfernt. + Passwortverlauf + Verlauf leeren + Passwortverlauf löschen? + Dadurch werden alle Passwörter aus dem Verlauf entfernt. + Wachturm + Passwortstärke + Sicherheit + Wartung + Aufgedeckte Passwörter + Bei Datenlecks aufgedeckte Passwörter sollten unverzüglich geändert werden. + Wiederverwendete Passwörter + Benutzen Sie nicht dasselbe Passwort auf mehreren Webseiten. Generieren Sie einzigartige Passwörter, um die Sicherheit zu verbessern. + Anfällige Konten + Seiten, die von einem Datenleck betroffen waren, seit Sie zuletzt ein Passwort geändert haben. Ändern Sie Ihr Passwort, um Ihr Konto sicher zu halten. + Unsichere Websites + Ändere die URLs, die HTTP-Protokoll verwenden dazu das HTTPS-Protokoll zu verwenden, da letztere die fortschrittlichste Verschlüsselung verwendet. + Inaktive Zwei-Faktor-Authentifizierung + Seiten, die eine Zwei-Faktor-Authentifizierung haben, die Sie aber noch nicht eingerichtet haben. + Verfügbare Passkeys + Sites, die Passkeys haben, die Sie aber noch nicht eingerichtet haben. + Unvollständige Elemente + Hilft Ihnen, fehlende oder unvollständige Daten in Ihrem Tresor zu identifizieren. Dies kann sich auf Identitäten mit fehlenden Namen oder Logins ohne Benutzernamen beziehen. + Abgelaufene Elemente + Elemente, die abgelaufen sind oder bald ablaufen. + Duplizierte URIs + Elemente, die eine oder mehrere URIs haben, die die gleiche Website abdecken, nachdem die Match-Erkennung angewendet wurde. + Gelöschte Elemente + Elemente, die in den Papierkorb verschoben wurden. Zu viele Gegenstände im Papierkorb können die Operationen mit Ihrem Tresor verlangsamen. + Leere Ordner + Ordner, in denen keine Elemente enthalten sind. + Duplizierte Elemente + Hilft Ihnen, identische Elemente in deinem Tresor zu identifizieren und zu entfernen. + Komprimierte Konten + Datenlecks nach Nutzernamen oder E-Mail-Adressen überprüfen. + App-Passwort ändern + Passwort ändern + Biometrische Authentifizierung + + App-Passwort ändern + App-Passwort wird nie auf dem Gerät gespeichert oder über das Netzwerk versendet. Es wird verwendet, um einen geheimen Schlüssel zu generieren, der zur Verschlüsselung der lokalen Daten verwendet wird. + Es sei denn, Sie vermuten unbefugten Zugriff oder eine Malware auf dem Gerät zu entdecken, es gibt keine Notwendigkeit, das Passwort zu ändern, wenn es ein starkes und einzigartiges Passwort ist. + Kontaktiere uns + Ihre Nachricht + Benutzen Sie Englisch um sicherzustellen, dass Ihr Feedback nicht missverstanden wird. + Wir freuen uns, dass Sie uns eine Nachricht senden. Ihre Nachricht geht direkt an uns und wir verwenden sie um Probleme zu beheben, Produktverbesserungen durchzuführen und Probleme zu beheben. Obwohl wir möglicherweise nicht auf jeden Bericht antworten, prüfen und arbeiten wir an Verbesserungen und beheben Probleme so schnell wie möglich. + Konten + Konto hinzufügen + Team hinter der App + Ich bin Software-Ingenieur aus der Ukraine. Ich spezialisiere mich auf App-Design und -Entwicklung. + Folge mir + Suchen + Einstellungen + Sucheinstellungen + Erscheinung + Autofill + Entwicklung + Experimentell + Einstellungen + Benachrichtigungen + Anderes + Berechtigungen + Sicherheit + Keyguard Premium + Wachturm + Open-Source-Lizenzen + Konten + Konten hinzufügen & anzeigen + Autofill + Android Autofill Service + Sicherheit + Biometrie, Passwort ändern, Tresor Timeout + Keyguard Premium + Funktionen freischalten & App-Entwicklung unterstützen + Wachturm + Komprimierte Dienste, verwundbare Passwörter + Benachrichtigungen + Warnungen + Erscheinung + Sprache, Theme und Animationen + Entwicklung + Test-Einstellungen für die Entwicklung + Anderes + Community-Webseiten, App-Info + Zeige Beschriftungen unter Navigationstasten + App-Version + App-Erstellungsdatum + Team hinter der App + Reddit-Community + GitHub Projekt + Crowdin-Projekt + Open-Source-Lizenzen + APK-Datei herunterladen + App-Symbole laden + Website-Symbole laden + Nachfragen der Icons könnte die Adresse der Webseite an den Internetprovider preisgeben + Rich-Text-Formatierung + Markdown verwenden, um Notizen zu formatieren + Sprache + Übersetzung vorschlagen + Schriftart + Im Play Store bewerten + Farbton + Farbschema + Schwarzes Farbschema verwenden + Links in externem Browser öffnen + Felder verbergen + Vertrauliche Informationen wie Passwörter und Kreditkartennummern verbergen + + Absturz + Credential provider + Passkeys, passwords and data services + Datenschutzrichtlinie + Kontaktiere uns + Experimentell + App-Passwort ändern + App-Passwort anfordern + Zusätzlich zu Ihren regulären Sicherheitseinstellungen wird Ihr App-Passwort nach dieser Zeit oder wenn Biometrieeinstellungen geändert werden angefordert + Sofort + Nie + Absturzberichte senden + Übergangsanimationen + App-Daten löschen + Close the app and erase all local app data + Screenshots erlauben + Zeige den Inhalt der App beim Wechsel zwischen den letzten Apps und erlaube das Erfassen eines Bildschirms + Den Inhalt der App ausblenden, wenn zwischen den letzten Apps gewechselt wird und das Erfassen eines Bildschirms verbietet + Datensicherheit + Tresor sperren + Nach einem Neustart sperren + Tresor nach einem Neustart des Geräts sperren + Sperren, wenn der Bildschirm ausgeschaltet wird + Sperrt den Tresor nach ein paar Sekunden, sobald der Bildschirm ausgeschaltet ist + Nach Verzögerung sperren + Sofort + Nie + Tresor Schlüssel auf der Festplatte beibehalten + Tresor Schlüssel ist auf einem internen Speicher vorhanden + Tresor ist gesperrt, nachdem die App aus dem Arbeitsspeicher entfernt wurde + Die Speicherung eines Tresorschlüssels auf dem internen Speicher ist ein Sicherheitsrisiko. Wenn der interne Speicher des Geräts kompromittiert ist, erhält der Angreifer Zugriff auf die lokalen Tresor-Daten. + Berechtigungen + Feature-Überblick + Biometrisches Entsperren + + Biometrisches Entsperren + Bildschirm während der Anzeige von Elementen nicht ausschalten + AutoFill-Dienst + Verwenden Sie das Android Autofill Framework um Login-Informationen in anderen Apps des Geräts zu füllen + Einmalpasswörter automatisch kopieren + Beim Ausfüllen von Login-Informationen, automatisch Einmalpasswörter kopieren + Inline-Vorschläge + Füllvorschläge direkt in kompatiblen Tastaturen anzeigen + Manuelle Auswahl + Zeigt eine Option an, um manuell einen Tresor nach einem Eintrag zu durchsuchen + Autofill deaktiviert Markierung respektieren + Deaktiviert Autofill für Browserfelder, in denen Autofill deaktiviert ist + Beachten Sie, dass einige Webseiten dafür berüchtigt sind, Autofill für ein Passwortfeld zu deaktivieren sowie einige Browser dafür berüchtigt sind, die Deaktiviert-Markierung für Autofill zu ignorieren + Fragen Daten zu speichern + Fragt nach Aktualisierung des Tresors beim Ausfüllen eines Formulars + App oder Website-Info automatisch speichern + Zwischenablage automatisch löschen + Sofort + Nie + Einmalpasswort Benachrichtigungsdauer + Wenn Sie ein Login-Element automatisch eingeben, das ein einmaliges Passwort besitzt, erscheint die Benachrichtigung mit Bestätigungscode für mindestens die definierte Dauer + Nie + Über Keyguard Mitgliedschaft + Das Premium entsperrt zusätzliche Funktionen und finanziert eine Entwicklung der App. Vielen Dank für Ihre Unterstützung! ❤️ + Abonnements + Produkte + Fehler beim Laden einer Liste von Abonnements + Fehler beim Laden einer Liste von Produkten + Aktiv + Wird nicht erneuert + Im Play Store verwalten + Benachrichtigungen + Verwendet, um Download-Benachrichtigungen zu posten + Kamera + Wird zum Scannen von QR-Codes verwendet + Erlaube zwei Panels Layout im Querformat + Erlaube zwei Panels Layout im Hochformat + Dunkel + Hell + Deaktiviert + Dynamisch + Überblenden + Entwickelt zur Verbesserung der Lesbarkeit für Leser mit geringer Sehkraft und zur Verbesserung des Verständnisses + Feature-Überblick + Keyguard Premium + Mehrere Konten + Gleichzeitige Anmeldung bei mehreren Konten. + Zwei-Wege-Sync + Elemente hinzufügen oder bearbeiten und die Änderungen wieder synchronisieren. + Offline-Bearbeitung + Elemente ohne Internetverbindung hinzufügen oder bearbeiten. + Suchen + Nach allem suchen + Name, E-Mail, Passwort, Telefonnummer usw. + Filter + Nach Ordner, Organisation, Typ usw. filtern. + Mehrere Schlüsselwörter + Suchen Sie nach \'bitw test\', um Ihr \'Bitwarden Test Account\' Element zu finden. + Wachturm + Aufgedeckte Passwörter + Finde Elemente mit in Datenlecks veröffentlichten Passwörtern. + Passwortstärke + Finde Elemente mit schwachen Passwörtern. + Wiederverwendete Passwörter + Finde Elemente mit wiederverwendeten Passwörtern. + Inaktive 2FA + Suche Logins mit verfügbaren TOTP Zwei-Faktor-Authentifizierung. + Unsichere Webseiten + Finde Webseiten, die HTTP-Protokoll verwenden, Auto-Fix zu HTTPS. + Unvollständige Elemente + Finde leere Elemente, die möglicherweise Updates benötigen. + Abgelaufene Elemente + Finde abgelaufene oder bald ablaufende Artikel. + Duplizierte Elemente + Suchen und zusammenfügen doppelter Elemente. + Sonstiges + Mehrfachauswahl + Zusammenführen von Elementen oder Löschen mehrerer Elemente auf einmal. + Als Barcode anzeigen + Einen Text als verschiedene Barcodes kodieren. + Generator + Erstelle Passwörter oder Benutzernamen. + Datensicherheit + Lokale Daten + Lokale Daten bestehen aus Downloads, Benutzereinstellungen und Tresor. Sie werden im internen Speicher eines Geräts gespeichert, auf das nur das Android-System oder der Keyguard zugreifen kann. + Downloads + Benutzereinstellungen + Die Benutzereinstellungen werden mittels eines gerätespezifischen Schlüssels verschlüsselt. + Benutzereinstellungen + Der Tresor wird mit einem Schlüssel verschlüsselt, abgeleitet vom App-Passwort mit folgenden Schritten: + Der Salt und der Hash werden lokal auf einem Gerät gespeichert, um später einen Masterschlüssel zum Entsperren des Tresors zu generieren. + Das Entsperren eines Tresors bedeutet die Speicherung eines korrekten Schlüssels auf dem Arbeitsspeicher eines Geräts, das die Möglichkeit erhält, verschlüsselte Tresore zu lesen und zu modifizieren. + Externe Daten + Externe Daten werden auf Bitwarden Servern mit Null-Kenntnis-Verschlüsselung gespeichert. + diff --git a/common/src/commonMain/resources/MR/el-rGR/plurals.xml b/common/src/commonMain/resources/MR/el-rGR/plurals.xml new file mode 100644 index 00000000..5f2db8ad --- /dev/null +++ b/common/src/commonMain/resources/MR/el-rGR/plurals.xml @@ -0,0 +1,2 @@ + + diff --git a/common/src/commonMain/resources/MR/el-rGR/strings.xml b/common/src/commonMain/resources/MR/el-rGR/strings.xml new file mode 100644 index 00000000..214f4486 --- /dev/null +++ b/common/src/commonMain/resources/MR/el-rGR/strings.xml @@ -0,0 +1,868 @@ + + + OK + Close + Yes + No + + Name + Account name + Username + Password + App password + Current password + New password + Email + Verified + Not verified + Email visibility + Public URL + URL + + Access count + Learn more + Phone number + Passport number + License number + Card number + No card number + Brand + Security code + Valid from + Valid to + Card expiry month + Card expiry year + Cardholder name + Valid from + Expiry date + Company + Sync + + Hidden + + Visible + + Empty + + SSN + City + State + Info + Cancel + Continue + Country + Address + Postal code + Pull to search + Save + URI + URIs + Note + Notes + Attachments + No attachments + Expiring soon + Incomplete data + This item is missing some of the important information. + Item + Items + %1$s items + All items + No items + No folder + New folder + Folder + Folders + No folders + No collection + Collection + Collections + No collections + My vault + Organization + Organizations + No organizations + Miscellaneous + Add integration + Account + Accounts + No accounts + No account + Type + Options + Send + Reset + Length + Security + Contact info + Title + First name + Middle name + Last name + Full name + Address line 1 + Address line 2 + Address line 3 + Rename + Select type + Autofill + Passkey + Create a passkey + Unlock Keyguard + Confirming auth request… + Passkeys + + Signature counter + + Relying party + + Discoverable + Username + Display name + API key + Domain + Edit + Delete + Remove + Remove from the history + Reused password + Reused passwords + One-time password + Authenticator key + Use + Save passkey + Passkey available + Two-factor authentication available + Custom + Follow system settings + + Coming soon + Powered by + Verification code + Re-send verification code + Requested a verification email + Web vault + Launch Web vault + + Remember me + + Trash + + Download + Downloads + No downloads + No duplicates + Encryption + + Key + Hash + Salt + 256-bit AES + Random %1$d-bits of data + None + Text + Linked apps + Linked URIs + Custom fields + Reveal a secure note + Hide a secure note + Master password hint + Fingerprint phrase + What is a fingerprint? + Bitwarden premium + Unofficial Bitwarden server + Last synced at %1$s + Change name + Change color + Change master password hint + Sign out + Sign in + Visit Web vault to verify your email address + Upgrade your account to a premium membership and unlock some great additional features + Two-factor authentication + Require login verification with another device such as a security key, authenticator app, SMS or email + Active + Items + Log out + Log out? + All of the not synchronized changes will be lost! + Change name + Change names + Delete folder? + Delete folders? + This item(s) will be deleted immediately. You can not undo this action. + Recently opened + Often opened + View details + Save to + Add to favourites + Remove from favourites + Enable auth re-prompt + Disable auth re-prompt + Edit + Merge into… + Copy to… + Move to folder + Change name + Change names + Add password + Add passwords + Change password + Change passwords + View password history + Trash + Restore + Delete forever + Move associated items to trash + Open with… + Send with… + Open in a file manager + Delete local file + View parent item + Always show keyboard + Sync vault + Lock vault + Rename folder + Check the email in known data breaches + Check the username in known data breaches + Check the password in known data breaches + Check the website in known data breaches + Launch app + Launch website + Launch docs + Launch browser + Launch main page + Launch Play store + Launch with %1$s + Launch with… + How to delete an account? + Unsecure + Match app + Match detection + Base domain + Match resources by top-level and second-level domain. + Host + Match resources by hostname and (if specified) port. + Starts with + Match resources when the detected resource starts with the URI. + Exact + Match resources when the detected resource exactly matches the URI. + Regular expression + Match resources by regular expression. Advanced option. + Never + Ignore URI during auto-fill item search. + %1$s linked to the password + %1$s linked to the username + %1$s linked to the cardholder name + %1$s linked to the expiration month + %1$s linked to the expiration year + %1$s linked to the card code + %1$s linked to the card brand + %1$s linked to the card number + %1$s linked to the title + %1$s linked to the middle name + %1$s linked to the address line (1) + %1$s linked to the address line (2) + %1$s linked to the address line (3) + %1$s linked to the city + %1$s linked to the state + %1$s linked to the postal code + %1$s linked to the country + %1$s linked to the company + %1$s linked to the email + %1$s linked to the phone number + %1$s linked to the SSN + %1$s linked to the username + %1$s linked to the passport number + %1$s linked to the license number + %1$s linked to the first name + %1$s linked to the last name + %1$s linked to the full name + %1$s linked to an unknown field + Share with… + %1$d selected + Copy + Copy value + Copy URL + Copy URI + Copy package name + Copy password + Copy username + Copy email + Copy phone number + Copy passport number + Copy license number + Copy card number + Copy cardholder name + Copy expiration year + Copy expiration month + Copy CVV code + Copy one-time password + Copy secret key + Unlock Keyguard + Open Keyguard + January + February + March + April + May + June + July + August + September + October + November + December + Move up + Move down + Remove + Remove an item? + Add more + FIDO2 WebAuthn + Authenticate WebAuthn + Return to app + + Must not be empty + + Must not be blank + Must be custom domain + Must contain only US-ASCII characters + Must be at least %1$d symbols long + Must be %1$d symbols long + Invalid domain + Invalid email + Invalid URL + Invalid URI + Invalid card number + Incorrect password + Failed to generate OTP code + Failed to create a passkey + Failed to authorize a request + + Barcode + Show as Barcode + Copy this authenticator to another device by scanning the QR code. + + Date picker + + Color picker + + How to delete an account? + A collection of info of how to delete your account from web services + + Easy + + Medium + + Hard + + Limited availability + + Impossible + Send email + Search websites + No instructions + Two-factor authentication + List of websites with two-factor authentication support + Search websites + Passkeys + List of websites with passkeys support + Search websites + + Data breach + Breached account data can provide malicious actors with access to sensitive personal and financial information, potentially leading to identity theft, financial fraud, and other forms of cybercrime. + No breaches found + Breached accounts found + Breaches + Occurred on %1$s + Reported on %1$s + Failed to check data breaches. You might currently be offline + Data breach + A password that is found in the data breaches takes significantly less time to break and should never be used. + Password is compromised + The password has been identified in known data breaches. Please change it immediately to protect your online security + No breaches found + Failed to check data breaches. You might currently be offline + + Large Type + Show in Large Type + Show in Large Type and Lock vault + App Picker + Search installed apps + System app + No apps + Choose a folder + Create a new folder: + + This organization will have an ownership of the copy. You will not be the direct owner. + Email forwarders + Email forwarders + Delete email forwarder? + Delete email forwarders? + Email forwarder integration + No email forwarders + Create an encrypted vault where the local data will be stored. + App password + Biometric authentication + Create a vault + Send crash reports + Create a vault + Erase app data + Close the app and erase all local app data + The vault is locked. Enter your app password to continue. + Unlock + + Unlock a vault + + Use biometric authentication to unlock the vault. + User verification is required. Enter your app password to continue. + Verify + Sync status + Up to date + Pending + Syncing + Sync failed + New item + Edit item + Style text with %1$s or %2$s and more. Limited Markdown syntax is supported. + italic + bold + Render preview + Auth re-prompt + Ask to authenticate again when you view or autofill a cipher + Add Bitwarden account + We are not affiliated, associated, authorized, endorsed by, or in any way officially connected with the Bitwarden, Inc., or any of its subsidiaries or its affiliates. + + To pass the captcha verification on an unofficial Bitwarden client, you must specify the client secret. To find it, visit Web vault / Settings / API Key. + + Client secret + Sign in + Region + United States + Europe + Custom (self-hosted) + HTTP headers + HTTP header + You can add custom HTTP headers that will be sent with every request to the server. + Key + Value + Add more + Server URL + Specify the base URL of your self-hosted Bitwarden installation. + Custom environment + You can specify the base URL of each service independently. + Web Vault Server URL + API Server URL + Icons Server URL + Identity Server URL + Verification + This authentication method is not supported yet. + Enter the verification code from your authenticator app. + Enter the verification code that was emailed to %1$s. + Enter the YubiKey authentication code manually. Place the cursor on the field below and trigger the YubiKey. + Authenticator + Duo (Organization) + FIDO2 Web Authentication + Email + FIDO U2F + Connect YubiKey via USB + Requires USB OTG support. + Touch the gold sensor on your YubiKey now. + Hold your YubiKey flat against the back of your device + Requires NFC support. + Failed to read YubiKey + Using FIDO2 WebAuthn requires using the Bitwarden Web vault version %1$s or higher. On older versions the authentication result will incorrectly be forwarded to the official Bitwarden app. + Confirm access + This data is protected, to continue please enter your app password. + + Confirm access + + Use biometric authentication to confirm your access and unlock this data. + Vault + Send + Generator + Watchtower + Settings + Locked due to inactivity + Text + File + Login + Card + Identity + Note + Passkey + Text + Boolean + Linked + + Pwned + Very strong + Strong + Good + Fair + Weak + Very strong passwords + Strong passwords + Good passwords + Fair passwords + Weak passwords + Filter + No filters available + Sort by + No sorting available + Title + Alphabetically + Reverse Alphabetically + Access count + Largest First + Smallest First + Modification date + Newest First + Oldest First + Expiration date + Newest First + Oldest First + Deletion date + Newest First + Oldest First + Password + Alphabetically + Reverse Alphabetically + Password modification date + Newest First + Oldest First + Password strength + Weakest First + Strongest First + Search vault + New item + There are no suggested items available for this context + + Security code + Saved to %1$s at %2$s + Password last modified at %1$s + Passkey created at %1$s + Last modified at %1$s + Created at %1$s + Deleted at %1$s + Expired at %1$s + Expiration scheduled at %1$s + Deleting scheduled at %1$s + + Call + + Text + + Email + + Directions + Sends + Search sends + New item + A password is required to access this share + Generator + Username generator + Password generator + Generate + Regenerate + Passphrase + Random passphrases provide the best combination of memorability and security. + Delimiter + Capitalize + Number + Username + Delimiter + Custom word + Capitalize + Number + Random symbols + A strong password has at least %1$d characters, uppercase & lowercase letters, digits and symbols. + Digits + Symbols + Uppercase letters + Lowercase letters + + Exclude similar symbols + + Exclude ambiguous symbols + Catch-all email + A catch-all email address provides users the option to receive all mail sent to their domain, even if they are sent to an email address that has not been set up for their domain. Ensure that your email hosting supports this feature before using it. + + Domain + Plus addressing email + Plus addressing means any email sent to %1$s is still sent to your account. This means you can have a lot of variations on your email address to give out to different people, sites, or mailing lists. Ensure that your email hosting supports this feature before using it. + Email + Subdomain addressing email + Subdomain addressing means any email sent to %1$s is still sent to your account. This means you can have a lot of variations on your email address to give out to different people, sites, or mailing lists. Ensure that your email hosting supports this feature before using it. + Email + Forwarded email alias + Create new login with the password + Create new login with the username + Password history + Show tips + Generator history + Clear history + Clear generator history? + This will remove all items from the history. + Password history + Clear history + Clear password history? + This will remove all passwords from the history. + Watchtower + Password strength + Security + Maintenance + Pwned Passwords + Passwords that have been exposed in data breaches. Such passwords should be changed immediately. + Reused Passwords + Don\'t use the same password on multiple websites. Generate unique passwords to improve security. + Vulnerable Accounts + Sites that were affected by a data breach since you last changed a password. Change your password to keep your account safe. + Unsecure Websites + Change the URLs that use HTTP protocol to use HTTPS protocol, as the latter utilizes the most advanced encryption available. + Inactive two-factor authentication + Sites that have two-factor authentication available but you haven\'t set it up yet. + Available Passkeys + Sites that have passkey available but you haven\'t set it up yet. It\'s simpler and more secure then a password. + Incomplete Items + Helps you identify missing or incomplete data in your vault. This can refer to identities with missing names or logins without usernames. + Expiring Items + Items that have expired or are expiring soon. + Duplicate URIs + Items that have one or more URIs that cover the same websites after applying the match detection. + Trashed Items + Items that have been moved into the trash. Having too many items in the trash may slow down operations with your vault. + Empty Folders + Folders that do not have any items in them. + Duplicate Items + Helps you identify and eliminate duplicate items in your vault. + Compromised Accounts + Check data breaches by a username or email address. + Change app password + Change password + Biometric authentication + + Change app password + App password never gets stored on the device nor sent over the network. It is used to generate a secret key that is used to encrypt the local data. + Unless you suspect unauthorized access or discover a malware on the device, there is no need to change the password if it is a strong, unique password. + Contact us + Your message + Use English to ensure that your feedback doesn\'t get misunderstood. + We appreciate the time that you spend sending us a message. Your message goes directly to us and we use it to troubleshoot issues, make product improvements and fix problems. While we may not reply to every report, we\'re reviewing and working on improvements & fixing issues as fast as we can. + Accounts + Add account + Team behind the app + I\'m a Software engineer from Ukraine. I specialize on app design and development. + Follow me + Search + Settings + Search settings + Appearance + Autofill + Development + Experimental + Settings + Notifications + Other + Permissions + Security + Keyguard Premium + Watchtower + Open-source licenses + Accounts + Add & view accounts + Autofill + Android Autofill & Credential services + Security + Biometrics, change password, vault timeout + Keyguard Premium + Unlock features & support app development + Watchtower + Compromised services, vulnerable passwords + Notifications + Alerts + Appearance + Language, theme and animations + Development + Test settings for development + Other + Community websites, app info + Show labels on navigation buttons + App version + App build date + Team behind the app + Reddit community + GitHub project + Crowdin project + Open-source licenses + Download APK file + Load App icons + Load Website icons + Queuing website icon might leak the website address to internet provider + Rich text formatting + Use Markdown to format notes + Language + Suggest translation + Font + Rate on Play Store + Tint color + Theme + Use contrast black theme + Open links in external browser + Conceal fields + Conceal sensitive info, such as passwords and credit card numbers + + Crash + Credential provider + Passkeys, passwords and data services + Privacy policy + Contact us + Experimental + Change app password + Require app password + In addition to your regular security settings, your app password will be required after this time or when biometry settings are changed + Immediately + Never + Send crash reports + Transition animation + Erase app data + Close the app and erase all local app data + Allow screenshots + Show the content of the app when switching between recent apps and allow capturing a screen + Hide the content of the app when switching between recent apps and forbid capturing a screen + Data safety + Lock vault + Lock after a reboot + Lock the vault after a device reboot + Lock when screen turns off + Lock the vault after a few seconds once the screen is off + Lock after a delay + Immediately + Never + Persist vault key on a disk + Vault key is persisted on an internal storage + Vault is locked after the app is unloaded from the memory + Storing a vault key on a disk is a security risk. If the device\'s internal storage is compromised, the attacker will gain access to the local vault data. + Permissions + Features overview + Biometric unlock + + Biometric unlock + Keep the screen on while viewing items + Autofill service + Use the Android Autofill Framework to assist in filling login information into other apps on the device + Auto-copy one-time passwords + When filling a login information, automatically copy one-time passwords + Inline suggestions + Embeds autofill suggestions directly into compatible keyboards + Manual selection + Displays an option to manually search a vault for an entry + Respect Autofill disabled flag + Disables autofill for a browser field that has autofill disabled flag set + Note that some websites are notorious for disabling autofill for a password field as well as some browsers are notorious for ignoring the autofill disabled flag + Ask to save data + Asks for updating the vault when filling of a form has completed + Auto-save app or website info + Automatically clear clipboard + Immediately + Never + One-time password notification duration + When you autofill a login item that has a one-time password, the notification with verification code will popup for at least the defined duration + Never + About Keyguard membership + The Premium unlocks extra features and funds a development of the app. Thank you for supporting us! ❤️ + Subscriptions + Products + Failed to load a list of subscriptions + Failed to load a list of products + Active + Will not renew + Manage on Play Store + Post notifications + Used to post downloading notifications + Camera + Used to scan QR codes + Allow two panel layout in landscape mode + Allow two panel layout in portrait mode + Dark + Light + Disabled + Dynamic + Crossfade + Developed specifically to increase legibility for readers with low vision, and to improve comprehension + Features Overview + Keyguard Premium + Multiple Accounts + Sign-in to multiple accounts simultaneously. + Two-way sync + Add or edit items and sync the changes back. + Offline editing + Add or edit items without internet connection. + Search + Search by anything + Name, email, password, phone number etc. + Filter + Filter by folder, organization, type etc. + Multiple keywords + Search by \'bitw test\' to find your \'Bitwarden Test Account\' item. + Watchtower + Pwned passwords + Find items with exposed in data breaches passwords. + Password strength + Find items with weak passwords. + Reused passwords + Find items with reused passwords. + Inactive 2FA + Find logins with available TOTP two-factor authentication. + Unsecure websites + Find websites that use HTTP protocol, auto-fix to HTTPS. + Incomplete items + Find empty items that might need updates. + Expiring items + Find expired or soon to be expired items. + Duplicate items + Find and merge duplicate items. + Misc + Multi-selection + Merge ciphers, fasten the refactoring with batch operations. + Show as Barcode + Encode a text as different barcodes. + Generator + Generate passwords or usernames. + Data safety + Local data + Local data consists of Downloads, User settings, Vault. They are stored in the internal storage of a device, which can only be accessed by the Android system or the Keyguard. + Downloads + User settings + The User settings are encrypted using a device-specific key. + Vault + The Vault is encrypted using a Key, derived from the App password using following steps: + The Salt and the Hash is then stored locally on a device, to later generate a master key to unlock the vault. + Unlocking a Vault means storing a correct Key in a device\'s RAM, gaining an ability to read and modify encrypted Vault. + Remote data + Remote data is stored on Bitwarden servers with zero-knowledge encryption. + diff --git a/common/src/commonMain/resources/MR/en-rGB/plurals.xml b/common/src/commonMain/resources/MR/en-rGB/plurals.xml new file mode 100644 index 00000000..5f2db8ad --- /dev/null +++ b/common/src/commonMain/resources/MR/en-rGB/plurals.xml @@ -0,0 +1,2 @@ + + diff --git a/common/src/commonMain/resources/MR/en-rGB/strings.xml b/common/src/commonMain/resources/MR/en-rGB/strings.xml new file mode 100644 index 00000000..31f64da8 --- /dev/null +++ b/common/src/commonMain/resources/MR/en-rGB/strings.xml @@ -0,0 +1,868 @@ + + + OK + Close + Yes + No + + Name + Account name + Username + Password + App password + Current password + New password + Email + Verified + Not verified + Email visibility + Public URL + URL + + Access count + Learn more + Phone number + Passport number + Licence number + Card number + No card number + Brand + Security code + Valid from + Valid to + Card expiry month + Card expiry year + Cardholder name + Valid from + Expiry date + Company + Sync + + Hidden + + Visible + + Empty + + National Insurance number + City + County + Info + Cancel + Continue + Country + Address + Postcode + Pull to search + Save + URI + URIs + Note + Notes + Attachments + No attachments + Expiring soon + Incomplete data + This item is missing some of the important information. + Item + Items + %1$s items + All items + No items + No folder + New folder + Folder + Folders + No folders + No collection + Collection + Collections + No collections + My vault + Organisation + Organisations + No organizations + Miscellaneous + Add integration + Account + Accounts + No accounts + No account + Type + Options + Send + Reset + Length + Security + Contact info + Title + First name + Middle name + Last name + Full name + Address line 1 + Address line 2 + Address line 3 + Rename + Select type + Autofill + Passkey + Create a passkey + Unlock Keyguard + Confirming auth request… + Passkeys + + Signature counter + + Relying party + + Discoverable + Username + Display name + API key + Domain + Edit + Delete + Remove + Remove from the history + Reused password + Reused passwords + One-time password + Authenticator key + Use + Save passkey + Passkey available + Two-factor authentication available + Custom + Follow system settings + + Coming soon + Powered by + Verification code + Re-send verification code + Requested a verification email + Web vault + Launch Web vault + + Remember me + + Bin + + Download + Downloads + No downloads + No duplicates + Encryption + + Key + Hash + Salt + 256-bit AES + Random %1$d-bits of data + None + Text + Linked apps + Linked URIs + Custom fields + Reveal a secure note + Hide a secure note + Master password hint + Fingerprint phrase + What is a fingerprint? + Bitwarden premium + Unofficial Bitwarden server + Last synced at %1$s + Change name + Change colour + Change master password hint + Sign out + Sign in + Visit Web vault to verify your email address + Upgrade your account to a premium membership and unlock some great additional features + Two-factor authentication + Require login verification with another device such as a security key, authenticator app, SMS or email + Active + Items + Log out + Log out? + All the non synchronised changes will be lost! + Change name + Change names + Delete folder? + Delete folders? + This item(s) will be deleted immediately. You can not undo this action. + Recently opened + Often opened + View details + Save to + Add to favourites + Remove from favourites + Enable auth re-prompt + Disable auth re-prompt + Edit + Merge into… + Copy to… + Move to folder + Change name + Change names + Add password + Add passwords + Change password + Change passwords + View password history + Bin + Restore + Delete forever + Move associated items to the bin + Open with… + Send with… + Open in a file manager + Delete local file + View parent item + Always show keyboard + Sync vault + Lock vault + Rename folder + Check the email in known data breaches + Check the username in known data breaches + Check the password in known data breaches + Check the website in known data breaches + Launch app + Launch website + Launch docs + Launch browser + Launch main page + Launch Play store + Launch with %1$s + Launch with… + How to delete an account? + Unsecure + Match app + Match detection + Base domain + Match resources by top-level and second-level domain. + Host + Match resources by hostname and (if specified) port. + Starts with + Match resources when the detected resource starts with the URI. + Exact + Match resources when the detected resource exactly matches the URI. + Regular expression + Match resources by regular expression. Advanced option. + Never + Ignore URI during auto-fill item search. + %1$s linked to the password + %1$s linked to the username + %1$s linked to the cardholder name + %1$s linked to the expiration month + %1$s linked to the expiration year + %1$s linked to the card code + %1$s linked to the card brand + %1$s linked to the card number + %1$s linked to the title + %1$s linked to the middle name + %1$s linked to the address line (1) + %1$s linked to the address line (2) + %1$s linked to the address line (3) + %1$s linked to the city + %1$s linked to the state + %1$s linked to the postal code + %1$s linked to the country + %1$s linked to the company + %1$s linked to the email + %1$s linked to the phone number + %1$s linked to the SSN + %1$s linked to the username + %1$s linked to the passport number + %1$s linked to the license number + %1$s linked to the first name + %1$s linked to the last name + %1$s linked to the full name + %1$s linked to an unknown field + Share with… + %1$d selected + Copy + Copy value + Copy URL + Copy URI + Copy package name + Copy password + Copy username + Copy email + Copy phone number + Copy passport number + Copy licence number + Copy card number + Copy cardholder name + Copy expiration year + Copy expiration month + Copy CVV code + Copy one-time password + Copy secret key + Unlock Keyguard + Open Keyguard + January + February + March + April + May + June + July + August + September + October + November + December + Move up + Move down + Remove + Remove an item? + Add more + FIDO2 WebAuthn + Authenticate WebAuthn + Return to app + + Must not be empty + + Must not be blank + Must be custom domain + Must contain only US-ASCII characters + Must be at least %1$d symbols long + Must be %1$d symbols long + Invalid domain + Invalid email + Invalid URL + Invalid URI + Invalid card number + Incorrect password + Failed to generate OTP code + Failed to create a passkey + Failed to authorize a request + + Barcode + Show as Barcode + Copy this authenticator to another device by scanning the QR code. + + Date picker + + Colour picker + + How to delete an account? + A collection of info of how to delete your account from web services + + Easy + + Medium + + Hard + + Limited availability + + Impossible + Send email + Search websites + No instructions + Two-factor authentication + List of websites with two-factor authentication support + Search websites + Passkeys + List of websites with passkeys support + Search websites + + Data breach + Breached account data can provide malicious actors with access to sensitive personal and financial information, potentially leading to identity theft, financial fraud, and other forms of cybercrime. + No breaches found + Breached accounts found + Breaches + Occurred on %1$s + Reported on %1$s + Failed to check data breaches. You might currently be offline + Data breach + A password that is found in the data breaches takes significantly less time to break and should never be used. + Password is compromised + The password has been identified in known data breaches. Please change it immediately to protect your online security + No breaches found + Failed to check data breaches. You might currently be offline + + Large Type + Show in Large Type + Show in Large Type and Lock vault + App Picker + Search installed apps + System app + No apps + Choose a folder + Create a new folder: + + This organisation will have an ownership of the copy. You will not be the direct owner. + Email forwarders + Email forwarders + Delete email forwarder? + Delete email forwarders? + Email forwarder integration + No email forwarders + Create an encrypted vault where the local data will be stored. + App password + Biometric authentication + Create a vault + Send crash reports + Create a vault + Erase app data + Close the app and erase all local app data + The vault is locked. Enter your app password to continue. + Unlock + + Unlock a vault + + Use biometric authentication to unlock the vault. + User verification is required. Enter your app password to continue. + Verify + Sync status + Up to date + Pending + Syncing + Sync failed + New item + Edit item + Style text with %1$s or %2$s and more. Limited Markdown syntax is supported. + italic + bold + Render preview + Auth re-prompt + Ask to authenticate again when you view or autofill a cipher + Add Bitwarden account + We are not affiliated, associated, authorized, endorsed by, or in any way officially connected with the Bitwarden, Inc., or any of its subsidiaries or its affiliates. + + To pass the captcha verification on an unofficial Bitwarden client, you must specify the client secret. To find it, visit Web vault / Settings / API Key. + + Client secret + Sign in + Region + United States + Europe + Custom (self-hosted) + HTTP headers + HTTP header + You can add custom HTTP headers that will be sent with every request to the server. + Key + Value + Add more + Server URL + Specify the base URL of your self-hosted Bitwarden installation. + Custom environment + You can specify the base URL of each service independently. + Web Vault Server URL + API Server URL + Icons Server URL + Identity Server URL + Verification + This authentication method is not supported yet. + Enter the verification code from your authenticator app. + Enter the verification code that was emailed to %1$s. + Enter the YubiKey authentication code manually. Place the cursor on the field below and trigger the YubiKey. + Authenticator + Duo (Organisation) + FIDO2 Web Authentication + Email + FIDO U2F + Connect YubiKey via USB + Requires USB OTG support. + Touch the gold sensor on your YubiKey now. + Hold your YubiKey flat against the back of your device + Requires NFC support. + Failed to read YubiKey + Using FIDO2 WebAuthn requires using the Bitwarden Web vault version %1$s or higher. On older versions the authentication result will incorrectly be forwarded to the official Bitwarden app. + Confirm access + This data is protected, to continue please enter your app password. + + Confirm access + + Use biometric authentication to confirm your access and unlock this data. + Vault + Send + Generator + Watchtower + Settings + Locked due to inactivity + Text + File + Login + Card + Identity + Note + Passkey + Text + Boolean + Linked + + Pwned + Very strong + Strong + Good + Fair + Weak + Very strong passwords + Strong passwords + Good passwords + Fair passwords + Weak passwords + Filter + No filters available + Sort by + No sorting available + Title + Alphabetically + Reverse Alphabetically + Access count + Largest First + Smallest First + Modification date + Newest First + Oldest First + Expiration date + Newest First + Oldest First + Deletion date + Newest First + Oldest First + Password + Alphabetically + Reverse Alphabetically + Password modification date + Newest First + Oldest First + Password strength + Weakest First + Strongest First + Search vault + New item + There are no suggested items available for this context + + Security code + Saved to %1$s at %2$s + Password last modified at %1$s + Passkey created at %1$s + Last modified at %1$s + Created at %1$s + Deleted at %1$s + Expired at %1$s + Expiration scheduled at %1$s + Deleting scheduled at %1$s + + Call + + Text + + Email + + Directions + Sends + Search sends + New item + A password is required to access this share + Generator + Username generator + Password generator + Generate + Regenerate + Passphrase + Random passphrases provide the best combination of memorability and security. + Delimiter + Capitalize + Number + Username + Delimiter + Custom word + Capitalize + Number + Random symbols + A strong password has at least %1$d characters, uppercase & lowercase letters, digits and symbols. + Digits + Symbols + Uppercase letters + Lowercase letters + + Exclude similar symbols + + Exclude ambiguous symbols + Catch-all email + A catch-all email address provides users the option to receive all mail sent to their domain, even if they are sent to an email address that has not been set up for their domain. Ensure that your email hosting supports this feature before using it. + + Domain + Plus addressing email + Plus addressing means any email sent to %1$s is still sent to your account. This means you can have a lot of variations on your email address to give out to different people, sites, or mailing lists. Ensure that your email hosting supports this feature before using it. + Email + Subdomain addressing email + Subdomain addressing means any email sent to %1$s is still sent to your account. This means you can have a lot of variations on your email address to give out to different people, sites, or mailing lists. Ensure that your email hosting supports this feature before using it. + Email + Forwarded email alias + Create new login with the password + Create new login with the username + Password history + Show tips + Generator history + Clear history + Clear generator history? + This will remove all items from the history. + Password history + Clear history + Clear password history? + This will remove all passwords from the history. + Watchtower + Password strength + Security + Maintenance + Pwned Passwords + Passwords that have been exposed in data breaches. Such passwords should be changed immediately. + Reused Passwords + Don\'t use the same password on multiple websites. Generate unique passwords to improve security. + Vulnerable Accounts + Sites that were affected by a data breach since you last changed a password. Change your password to keep your account safe. + Unsecure Websites + Change the URLs that use HTTP protocol to use HTTPS protocol, as the latter utilizes the most advanced encryption available. + Inactive two-factor authentication + Sites that have two-factor authentication available but you haven\'t set it up yet. + Available Passkeys + Sites that have passkey available but you haven\'t set it up yet. It\'s simpler and more secure then a password. + Incomplete Items + Helps you identify missing or incomplete data in your vault. This can refer to identities with missing names or logins without usernames. + Expiring Items + Items that have expired or are expiring soon. + Duplicate URIs + Items that have one or more URIs that cover the same websites after applying the match detection. + Binned Items + Items that have been moved into the bin. Having too many items in the bin may slow down operations with your vault. + Empty Folders + Folders that do not have any items in them. + Duplicate Items + Helps you identify and eliminate duplicate items in your vault. + Compromised Accounts + Check data breaches by a username or email address. + Change app password + Change password + Biometric authentication + + Change app password + App password never gets stored on the device nor sent over the network. It is used to generate a secret key that is used to encrypt the local data. + Unless you suspect unauthorized access or discover a malware on the device, there is no need to change the password if it is a strong, unique password. + Contact us + Your message + Use English to ensure that your feedback doesn\'t get misunderstood. + We appreciate the time that you spend sending us a message. Your message goes directly to us and we use it to troubleshoot issues, make product improvements and fix problems. While we may not reply to every report, we\'re reviewing and working on improvements & fixing issues as fast as we can. + Accounts + Add account + Team behind the app + I\'m a Software engineer from Ukraine. I specialize on app design and development. + Follow me + Search + Settings + Search settings + Appearance + Autofill + Development + Experimental + Settings + Notifications + Other + Permissions + Security + Keyguard Premium + Watchtower + Open-source licences + Accounts + Add & view accounts + Autofill + Android Autofill & Credential services + Security + Biometrics, change password, vault timeout + Keyguard Premium + Unlock features & support app development + Watchtower + Compromised services, vulnerable passwords + Notifications + Alerts + Appearance + Language, theme and animations + Development + Test settings for development + Other + Community websites, app info + Show labels on navigation buttons + App version + App build date + Team behind the app + Reddit community + GitHub project + Crowdin project + Open-source licences + Download APK file + Load App icons + Load Website icons + Queuing website icon might leak the website address to internet provider + Rich text formatting + Use Markdown to format notes + Language + Suggest translation + Font + Rate on Play Store + Tint colour + Theme + Use contrast black theme + Open links in external browser + Conceal fields + Conceal sensitive info, such as passwords and credit card numbers + + Crash + Credential provider + Passkeys, passwords and data services + Privacy policy + Contact us + Experimental + Change app password + Require app password + In addition to your regular security settings, your app password will be required after this time or when biometry settings are changed + Immediately + Never + Send crash reports + Transition animation + Erase app data + Close the app and erase all local app data + Allow screenshots + Show the content of the app when switching between recent apps and allow capturing a screen + Hide the content of the app when switching between recent apps and forbid capturing a screen + Data safety + Lock vault + Lock after a reboot + Lock the vault after a device reboot + Lock when screen turns off + Lock the vault after a few seconds once the screen is off + Lock after a delay + Immediately + Never + Persist vault key on a disk + Vault key is persisted on an internal storage + Vault is locked after the app is unloaded from the memory + Storing a vault key on a disk is a security risk. If the device\'s internal storage is compromised, the attacker will gain access to the local vault data. + Permissions + Features overview + Biometric unlock + + Biometric unlock + Keep the screen on while viewing items + Autofill service + Use the Android Autofill Framework to assist in filling login information into other apps on the device + Auto-copy one-time passwords + When filling a login information, automatically copy one-time passwords + Inline suggestions + Embeds autofill suggestions directly into compatible keyboards + Manual selection + Displays an option to manually search a vault for an entry + Respect Autofill disabled flag + Disables autofill for a browser field that has autofill disabled flag set + Note that some websites are notorious for disabling autofill for a password field as well as some browsers are notorious for ignoring the autofill disabled flag + Ask to save data + Asks for updating the vault when filling of a form has completed + Auto-save app or website info + Automatically clear clipboard + Immediately + Never + One-time password notification duration + When you autofill a login item that has a one-time password, the notification with verification code will popup for at least the defined duration + Never + About Keyguard membership + The Premium unlocks extra features and funds a development of the app. Thank you for supporting us! ❤️ + Subscriptions + Products + Failed to load a list of subscriptions + Failed to load a list of products + Active + Will not renew + Manage on Play Store + Post notifications + Used to post downloading notifications + Camera + Used to scan QR codes + Allow two panel layout in landscape mode + Allow two panel layout in portrait mode + Dark + Light + Disabled + Dynamic + Crossfade + Developed specifically to increase legibility for readers with low vision, and to improve comprehension + Features Overview + Keyguard Premium + Multiple Accounts + Sign-in to multiple accounts simultaneously. + Two-way sync + Add or edit items and sync the changes back. + Offline editing + Add or edit items without internet connection. + Search + Search by anything + Name, email, password, phone number etc. + Filter + Filter by folder, organisation, type etc. + Multiple keywords + Search by \'bitw test\' to find your \'Bitwarden Test Account\' item. + Watchtower + Pwned passwords + Find items with exposed in data breaches passwords. + Password strength + Find items with weak passwords. + Reused passwords + Find items with reused passwords. + Inactive 2FA + Find logins with available TOTP two-factor authentication. + Unsecure websites + Find websites that use HTTP protocol, auto-fix to HTTPS. + Incomplete items + Find empty items that might need updates. + Expiring items + Find expired or soon to be expired items. + Duplicate items + Find and merge duplicate items. + Misc + Multi-selection + Merge ciphers, fasten the refactoring with batch operations. + Show as Barcode + Encode a text as different barcodes. + Generator + Generate passwords or usernames. + Data safety + Local data + Local data consists of Downloads, User settings, Vault. They are stored in the internal storage of a device, which can only be accessed by the Android system or the Keyguard. + Downloads + User settings + The User settings are encrypted using a device-specific key. + Vault + The Vault is encrypted using a Key, derived from the App password using following steps: + The Salt and the Hash is then stored locally on a device, to later generate a master key to unlock the vault. + Unlocking a Vault means storing a correct Key in a device\'s RAM, gaining an ability to read and modify encrypted Vault. + Remote data + Remote data is stored on Bitwarden servers with zero-knowledge encryption. + diff --git a/common/src/commonMain/resources/MR/en-rUS/plurals.xml b/common/src/commonMain/resources/MR/en-rUS/plurals.xml new file mode 100644 index 00000000..5f2db8ad --- /dev/null +++ b/common/src/commonMain/resources/MR/en-rUS/plurals.xml @@ -0,0 +1,2 @@ + + diff --git a/common/src/commonMain/resources/MR/en-rUS/strings.xml b/common/src/commonMain/resources/MR/en-rUS/strings.xml new file mode 100644 index 00000000..214f4486 --- /dev/null +++ b/common/src/commonMain/resources/MR/en-rUS/strings.xml @@ -0,0 +1,868 @@ + + + OK + Close + Yes + No + + Name + Account name + Username + Password + App password + Current password + New password + Email + Verified + Not verified + Email visibility + Public URL + URL + + Access count + Learn more + Phone number + Passport number + License number + Card number + No card number + Brand + Security code + Valid from + Valid to + Card expiry month + Card expiry year + Cardholder name + Valid from + Expiry date + Company + Sync + + Hidden + + Visible + + Empty + + SSN + City + State + Info + Cancel + Continue + Country + Address + Postal code + Pull to search + Save + URI + URIs + Note + Notes + Attachments + No attachments + Expiring soon + Incomplete data + This item is missing some of the important information. + Item + Items + %1$s items + All items + No items + No folder + New folder + Folder + Folders + No folders + No collection + Collection + Collections + No collections + My vault + Organization + Organizations + No organizations + Miscellaneous + Add integration + Account + Accounts + No accounts + No account + Type + Options + Send + Reset + Length + Security + Contact info + Title + First name + Middle name + Last name + Full name + Address line 1 + Address line 2 + Address line 3 + Rename + Select type + Autofill + Passkey + Create a passkey + Unlock Keyguard + Confirming auth request… + Passkeys + + Signature counter + + Relying party + + Discoverable + Username + Display name + API key + Domain + Edit + Delete + Remove + Remove from the history + Reused password + Reused passwords + One-time password + Authenticator key + Use + Save passkey + Passkey available + Two-factor authentication available + Custom + Follow system settings + + Coming soon + Powered by + Verification code + Re-send verification code + Requested a verification email + Web vault + Launch Web vault + + Remember me + + Trash + + Download + Downloads + No downloads + No duplicates + Encryption + + Key + Hash + Salt + 256-bit AES + Random %1$d-bits of data + None + Text + Linked apps + Linked URIs + Custom fields + Reveal a secure note + Hide a secure note + Master password hint + Fingerprint phrase + What is a fingerprint? + Bitwarden premium + Unofficial Bitwarden server + Last synced at %1$s + Change name + Change color + Change master password hint + Sign out + Sign in + Visit Web vault to verify your email address + Upgrade your account to a premium membership and unlock some great additional features + Two-factor authentication + Require login verification with another device such as a security key, authenticator app, SMS or email + Active + Items + Log out + Log out? + All of the not synchronized changes will be lost! + Change name + Change names + Delete folder? + Delete folders? + This item(s) will be deleted immediately. You can not undo this action. + Recently opened + Often opened + View details + Save to + Add to favourites + Remove from favourites + Enable auth re-prompt + Disable auth re-prompt + Edit + Merge into… + Copy to… + Move to folder + Change name + Change names + Add password + Add passwords + Change password + Change passwords + View password history + Trash + Restore + Delete forever + Move associated items to trash + Open with… + Send with… + Open in a file manager + Delete local file + View parent item + Always show keyboard + Sync vault + Lock vault + Rename folder + Check the email in known data breaches + Check the username in known data breaches + Check the password in known data breaches + Check the website in known data breaches + Launch app + Launch website + Launch docs + Launch browser + Launch main page + Launch Play store + Launch with %1$s + Launch with… + How to delete an account? + Unsecure + Match app + Match detection + Base domain + Match resources by top-level and second-level domain. + Host + Match resources by hostname and (if specified) port. + Starts with + Match resources when the detected resource starts with the URI. + Exact + Match resources when the detected resource exactly matches the URI. + Regular expression + Match resources by regular expression. Advanced option. + Never + Ignore URI during auto-fill item search. + %1$s linked to the password + %1$s linked to the username + %1$s linked to the cardholder name + %1$s linked to the expiration month + %1$s linked to the expiration year + %1$s linked to the card code + %1$s linked to the card brand + %1$s linked to the card number + %1$s linked to the title + %1$s linked to the middle name + %1$s linked to the address line (1) + %1$s linked to the address line (2) + %1$s linked to the address line (3) + %1$s linked to the city + %1$s linked to the state + %1$s linked to the postal code + %1$s linked to the country + %1$s linked to the company + %1$s linked to the email + %1$s linked to the phone number + %1$s linked to the SSN + %1$s linked to the username + %1$s linked to the passport number + %1$s linked to the license number + %1$s linked to the first name + %1$s linked to the last name + %1$s linked to the full name + %1$s linked to an unknown field + Share with… + %1$d selected + Copy + Copy value + Copy URL + Copy URI + Copy package name + Copy password + Copy username + Copy email + Copy phone number + Copy passport number + Copy license number + Copy card number + Copy cardholder name + Copy expiration year + Copy expiration month + Copy CVV code + Copy one-time password + Copy secret key + Unlock Keyguard + Open Keyguard + January + February + March + April + May + June + July + August + September + October + November + December + Move up + Move down + Remove + Remove an item? + Add more + FIDO2 WebAuthn + Authenticate WebAuthn + Return to app + + Must not be empty + + Must not be blank + Must be custom domain + Must contain only US-ASCII characters + Must be at least %1$d symbols long + Must be %1$d symbols long + Invalid domain + Invalid email + Invalid URL + Invalid URI + Invalid card number + Incorrect password + Failed to generate OTP code + Failed to create a passkey + Failed to authorize a request + + Barcode + Show as Barcode + Copy this authenticator to another device by scanning the QR code. + + Date picker + + Color picker + + How to delete an account? + A collection of info of how to delete your account from web services + + Easy + + Medium + + Hard + + Limited availability + + Impossible + Send email + Search websites + No instructions + Two-factor authentication + List of websites with two-factor authentication support + Search websites + Passkeys + List of websites with passkeys support + Search websites + + Data breach + Breached account data can provide malicious actors with access to sensitive personal and financial information, potentially leading to identity theft, financial fraud, and other forms of cybercrime. + No breaches found + Breached accounts found + Breaches + Occurred on %1$s + Reported on %1$s + Failed to check data breaches. You might currently be offline + Data breach + A password that is found in the data breaches takes significantly less time to break and should never be used. + Password is compromised + The password has been identified in known data breaches. Please change it immediately to protect your online security + No breaches found + Failed to check data breaches. You might currently be offline + + Large Type + Show in Large Type + Show in Large Type and Lock vault + App Picker + Search installed apps + System app + No apps + Choose a folder + Create a new folder: + + This organization will have an ownership of the copy. You will not be the direct owner. + Email forwarders + Email forwarders + Delete email forwarder? + Delete email forwarders? + Email forwarder integration + No email forwarders + Create an encrypted vault where the local data will be stored. + App password + Biometric authentication + Create a vault + Send crash reports + Create a vault + Erase app data + Close the app and erase all local app data + The vault is locked. Enter your app password to continue. + Unlock + + Unlock a vault + + Use biometric authentication to unlock the vault. + User verification is required. Enter your app password to continue. + Verify + Sync status + Up to date + Pending + Syncing + Sync failed + New item + Edit item + Style text with %1$s or %2$s and more. Limited Markdown syntax is supported. + italic + bold + Render preview + Auth re-prompt + Ask to authenticate again when you view or autofill a cipher + Add Bitwarden account + We are not affiliated, associated, authorized, endorsed by, or in any way officially connected with the Bitwarden, Inc., or any of its subsidiaries or its affiliates. + + To pass the captcha verification on an unofficial Bitwarden client, you must specify the client secret. To find it, visit Web vault / Settings / API Key. + + Client secret + Sign in + Region + United States + Europe + Custom (self-hosted) + HTTP headers + HTTP header + You can add custom HTTP headers that will be sent with every request to the server. + Key + Value + Add more + Server URL + Specify the base URL of your self-hosted Bitwarden installation. + Custom environment + You can specify the base URL of each service independently. + Web Vault Server URL + API Server URL + Icons Server URL + Identity Server URL + Verification + This authentication method is not supported yet. + Enter the verification code from your authenticator app. + Enter the verification code that was emailed to %1$s. + Enter the YubiKey authentication code manually. Place the cursor on the field below and trigger the YubiKey. + Authenticator + Duo (Organization) + FIDO2 Web Authentication + Email + FIDO U2F + Connect YubiKey via USB + Requires USB OTG support. + Touch the gold sensor on your YubiKey now. + Hold your YubiKey flat against the back of your device + Requires NFC support. + Failed to read YubiKey + Using FIDO2 WebAuthn requires using the Bitwarden Web vault version %1$s or higher. On older versions the authentication result will incorrectly be forwarded to the official Bitwarden app. + Confirm access + This data is protected, to continue please enter your app password. + + Confirm access + + Use biometric authentication to confirm your access and unlock this data. + Vault + Send + Generator + Watchtower + Settings + Locked due to inactivity + Text + File + Login + Card + Identity + Note + Passkey + Text + Boolean + Linked + + Pwned + Very strong + Strong + Good + Fair + Weak + Very strong passwords + Strong passwords + Good passwords + Fair passwords + Weak passwords + Filter + No filters available + Sort by + No sorting available + Title + Alphabetically + Reverse Alphabetically + Access count + Largest First + Smallest First + Modification date + Newest First + Oldest First + Expiration date + Newest First + Oldest First + Deletion date + Newest First + Oldest First + Password + Alphabetically + Reverse Alphabetically + Password modification date + Newest First + Oldest First + Password strength + Weakest First + Strongest First + Search vault + New item + There are no suggested items available for this context + + Security code + Saved to %1$s at %2$s + Password last modified at %1$s + Passkey created at %1$s + Last modified at %1$s + Created at %1$s + Deleted at %1$s + Expired at %1$s + Expiration scheduled at %1$s + Deleting scheduled at %1$s + + Call + + Text + + Email + + Directions + Sends + Search sends + New item + A password is required to access this share + Generator + Username generator + Password generator + Generate + Regenerate + Passphrase + Random passphrases provide the best combination of memorability and security. + Delimiter + Capitalize + Number + Username + Delimiter + Custom word + Capitalize + Number + Random symbols + A strong password has at least %1$d characters, uppercase & lowercase letters, digits and symbols. + Digits + Symbols + Uppercase letters + Lowercase letters + + Exclude similar symbols + + Exclude ambiguous symbols + Catch-all email + A catch-all email address provides users the option to receive all mail sent to their domain, even if they are sent to an email address that has not been set up for their domain. Ensure that your email hosting supports this feature before using it. + + Domain + Plus addressing email + Plus addressing means any email sent to %1$s is still sent to your account. This means you can have a lot of variations on your email address to give out to different people, sites, or mailing lists. Ensure that your email hosting supports this feature before using it. + Email + Subdomain addressing email + Subdomain addressing means any email sent to %1$s is still sent to your account. This means you can have a lot of variations on your email address to give out to different people, sites, or mailing lists. Ensure that your email hosting supports this feature before using it. + Email + Forwarded email alias + Create new login with the password + Create new login with the username + Password history + Show tips + Generator history + Clear history + Clear generator history? + This will remove all items from the history. + Password history + Clear history + Clear password history? + This will remove all passwords from the history. + Watchtower + Password strength + Security + Maintenance + Pwned Passwords + Passwords that have been exposed in data breaches. Such passwords should be changed immediately. + Reused Passwords + Don\'t use the same password on multiple websites. Generate unique passwords to improve security. + Vulnerable Accounts + Sites that were affected by a data breach since you last changed a password. Change your password to keep your account safe. + Unsecure Websites + Change the URLs that use HTTP protocol to use HTTPS protocol, as the latter utilizes the most advanced encryption available. + Inactive two-factor authentication + Sites that have two-factor authentication available but you haven\'t set it up yet. + Available Passkeys + Sites that have passkey available but you haven\'t set it up yet. It\'s simpler and more secure then a password. + Incomplete Items + Helps you identify missing or incomplete data in your vault. This can refer to identities with missing names or logins without usernames. + Expiring Items + Items that have expired or are expiring soon. + Duplicate URIs + Items that have one or more URIs that cover the same websites after applying the match detection. + Trashed Items + Items that have been moved into the trash. Having too many items in the trash may slow down operations with your vault. + Empty Folders + Folders that do not have any items in them. + Duplicate Items + Helps you identify and eliminate duplicate items in your vault. + Compromised Accounts + Check data breaches by a username or email address. + Change app password + Change password + Biometric authentication + + Change app password + App password never gets stored on the device nor sent over the network. It is used to generate a secret key that is used to encrypt the local data. + Unless you suspect unauthorized access or discover a malware on the device, there is no need to change the password if it is a strong, unique password. + Contact us + Your message + Use English to ensure that your feedback doesn\'t get misunderstood. + We appreciate the time that you spend sending us a message. Your message goes directly to us and we use it to troubleshoot issues, make product improvements and fix problems. While we may not reply to every report, we\'re reviewing and working on improvements & fixing issues as fast as we can. + Accounts + Add account + Team behind the app + I\'m a Software engineer from Ukraine. I specialize on app design and development. + Follow me + Search + Settings + Search settings + Appearance + Autofill + Development + Experimental + Settings + Notifications + Other + Permissions + Security + Keyguard Premium + Watchtower + Open-source licenses + Accounts + Add & view accounts + Autofill + Android Autofill & Credential services + Security + Biometrics, change password, vault timeout + Keyguard Premium + Unlock features & support app development + Watchtower + Compromised services, vulnerable passwords + Notifications + Alerts + Appearance + Language, theme and animations + Development + Test settings for development + Other + Community websites, app info + Show labels on navigation buttons + App version + App build date + Team behind the app + Reddit community + GitHub project + Crowdin project + Open-source licenses + Download APK file + Load App icons + Load Website icons + Queuing website icon might leak the website address to internet provider + Rich text formatting + Use Markdown to format notes + Language + Suggest translation + Font + Rate on Play Store + Tint color + Theme + Use contrast black theme + Open links in external browser + Conceal fields + Conceal sensitive info, such as passwords and credit card numbers + + Crash + Credential provider + Passkeys, passwords and data services + Privacy policy + Contact us + Experimental + Change app password + Require app password + In addition to your regular security settings, your app password will be required after this time or when biometry settings are changed + Immediately + Never + Send crash reports + Transition animation + Erase app data + Close the app and erase all local app data + Allow screenshots + Show the content of the app when switching between recent apps and allow capturing a screen + Hide the content of the app when switching between recent apps and forbid capturing a screen + Data safety + Lock vault + Lock after a reboot + Lock the vault after a device reboot + Lock when screen turns off + Lock the vault after a few seconds once the screen is off + Lock after a delay + Immediately + Never + Persist vault key on a disk + Vault key is persisted on an internal storage + Vault is locked after the app is unloaded from the memory + Storing a vault key on a disk is a security risk. If the device\'s internal storage is compromised, the attacker will gain access to the local vault data. + Permissions + Features overview + Biometric unlock + + Biometric unlock + Keep the screen on while viewing items + Autofill service + Use the Android Autofill Framework to assist in filling login information into other apps on the device + Auto-copy one-time passwords + When filling a login information, automatically copy one-time passwords + Inline suggestions + Embeds autofill suggestions directly into compatible keyboards + Manual selection + Displays an option to manually search a vault for an entry + Respect Autofill disabled flag + Disables autofill for a browser field that has autofill disabled flag set + Note that some websites are notorious for disabling autofill for a password field as well as some browsers are notorious for ignoring the autofill disabled flag + Ask to save data + Asks for updating the vault when filling of a form has completed + Auto-save app or website info + Automatically clear clipboard + Immediately + Never + One-time password notification duration + When you autofill a login item that has a one-time password, the notification with verification code will popup for at least the defined duration + Never + About Keyguard membership + The Premium unlocks extra features and funds a development of the app. Thank you for supporting us! ❤️ + Subscriptions + Products + Failed to load a list of subscriptions + Failed to load a list of products + Active + Will not renew + Manage on Play Store + Post notifications + Used to post downloading notifications + Camera + Used to scan QR codes + Allow two panel layout in landscape mode + Allow two panel layout in portrait mode + Dark + Light + Disabled + Dynamic + Crossfade + Developed specifically to increase legibility for readers with low vision, and to improve comprehension + Features Overview + Keyguard Premium + Multiple Accounts + Sign-in to multiple accounts simultaneously. + Two-way sync + Add or edit items and sync the changes back. + Offline editing + Add or edit items without internet connection. + Search + Search by anything + Name, email, password, phone number etc. + Filter + Filter by folder, organization, type etc. + Multiple keywords + Search by \'bitw test\' to find your \'Bitwarden Test Account\' item. + Watchtower + Pwned passwords + Find items with exposed in data breaches passwords. + Password strength + Find items with weak passwords. + Reused passwords + Find items with reused passwords. + Inactive 2FA + Find logins with available TOTP two-factor authentication. + Unsecure websites + Find websites that use HTTP protocol, auto-fix to HTTPS. + Incomplete items + Find empty items that might need updates. + Expiring items + Find expired or soon to be expired items. + Duplicate items + Find and merge duplicate items. + Misc + Multi-selection + Merge ciphers, fasten the refactoring with batch operations. + Show as Barcode + Encode a text as different barcodes. + Generator + Generate passwords or usernames. + Data safety + Local data + Local data consists of Downloads, User settings, Vault. They are stored in the internal storage of a device, which can only be accessed by the Android system or the Keyguard. + Downloads + User settings + The User settings are encrypted using a device-specific key. + Vault + The Vault is encrypted using a Key, derived from the App password using following steps: + The Salt and the Hash is then stored locally on a device, to later generate a master key to unlock the vault. + Unlocking a Vault means storing a correct Key in a device\'s RAM, gaining an ability to read and modify encrypted Vault. + Remote data + Remote data is stored on Bitwarden servers with zero-knowledge encryption. + diff --git a/common/src/commonMain/resources/MR/es-rES/plurals.xml b/common/src/commonMain/resources/MR/es-rES/plurals.xml new file mode 100644 index 00000000..5f2db8ad --- /dev/null +++ b/common/src/commonMain/resources/MR/es-rES/plurals.xml @@ -0,0 +1,2 @@ + + diff --git a/common/src/commonMain/resources/MR/es-rES/strings.xml b/common/src/commonMain/resources/MR/es-rES/strings.xml new file mode 100644 index 00000000..8e8c7c51 --- /dev/null +++ b/common/src/commonMain/resources/MR/es-rES/strings.xml @@ -0,0 +1,868 @@ + + + Ok + Cerrar + Si + No + + Nombre + Nombre de cuenta + Nombre de usuario + Contraseña + Contraseña de aplicación + Contraseña actual + Nueva contraseña + Correo electrónico + Verificado + No verificado + Visibilidad del correo + URL Pública + URL + + Recuento de acceso + Conozca más + Teléfono + Número de pasaporte + Número de licencia + Número de tarjeta + Ningún número de tarjeta + Marca + Número de seguridad + Válida desde + Válida hasta + Mes de vencimiento de la tarjeta + Año de caducidad de la tarjeta + Nombre del titular + Válida desde + Fecha de expiración + Compañía + Sincronizar + + Ocultar + + Visible + + Vacío + + Número de seguro social (SSN) + Ciudad + Estado/Provincia + Información + Cancelar + Continuar + País + Dirección + Código postal + Tira para buscar + Guardar + URI + URIs + Nota + Notas + Adjuntos + Sin adjuntos + Expira pronto + Datos incompletos + A este elemento le falta información importante. + Ítem + Ítems + %1$s elementos + Todos los elementos + Sin elementos + Sin carpeta + Nueva carpeta + Carpeta + Carpetas + Sin carpetas + Sin colección + Colección + Colecciones + Sin colecciones + Mi caja fuerte + Organización + Organizaciones + Sin organizaciones + Varios + Añadir Integración + Cuenta + Cuentas + No hay ninguna cuenta + Sin cuenta + Tipo + Opciones + Enviar + Restablecer + Longitud + Seguridad + Información de contacto + Título + Primer nombre + Segundo nombre + Apellido(s) + Nombre completo + Dirección (línea 1) + Dirección (línea 2) + Dirección (línea 3) + Renombrar + Seleccionar tipo + Autocompletar + Llave de acceso + Crear una llave de acceso + Desbloquear Keyguard + Confirmando solicitud de autenticación… + Llaves de acceso + + Contador de firma + + Servicio de confianza + + Detección + Nombre de usuario + Nombre a mostrar + Clave API + Dominio + Editar + Borrar + Eliminar + Eliminar del historial + Contraseñas reutilizadas + Contraseñas reutilizadas + Contraseña de un solo uso + Clave de autenticación + Usar + Guardar llave de acceso + Llave de acceso disponible + Autenticación en dos pasos habilitada + Personalizado + Usar Ajustes del sistema + + Próximamente + Desarrollado por + Código de verificación + Reenviar código de verificación + Solicitado un email de verificación + Caja fuerte Web + Abrir caja fuerte web + + Recordarme + + Basura + + Descarga + Descargas + Sin descargas + Sin duplicados + Cifrado + + Llave + Hash + Sal + AES de 256 bits + Aleatorio %1$d-bits de datos + Ninguna + Texto + Apps vinculadas + URIs enlazadas + Campos personalizados + Revelar una nota segura + Ocultar una nota segura + Sugerencia de contraseña maestra + Frase de huella digital + ¿Qué es una huella digital? + Bitwarden premium + Servidor no oficial de Bitwarden + Última sincronización en %1$s + Cambiar nombre + Cambiar color + Cambiar pista de contraseña maestra + Cerrar sesión + Iniciar sesión + Visita la caja fuerte web para verificar tu correo electrónico + Mejora tu cuenta a prémium y desbloquea algunas excelentes características adicionales + Autenticación de dos factores + Requiere verificación de inicio de sesión con otro dispositivo como una clave de seguridad, aplicación de autenticación, SMS o correo electrónico + Activo + Elementos + Cerrar sesión + ¿Cerrar sesión? + ¡Todos los cambios no sincronizados se perderán! + Cambiar nombre + Cambiar nombres + ¿Eliminar carpeta? + ¿Eliminar carpetas? + Este elemento(s) se eliminará inmediatamente. No puede deshacer esta acción. + Abierto recientemente + A menudo abierto + Ver detalles + Guardar en + Añadir a favoritos + Eliminar de favoritos + Activar la re-autenticación + Deshabilitar la re-autenticación + Editar + Fusionar en… + Copiar a… + Mover a carpeta + Cambiar nombre + Cambiar nombres + Añadir contraseña + Añadir contraseñas + Cambiar contraseña + Cambiar contraseñas + Ver historial de contraseñas + Papelera + Restaurar + Eliminar para siempre + Mover elementos asociados a la papelera + Abrir con… + Enviar con… + Abrir en un explorador de archivos + Eliminar archivo local + Ver elemento emparentado + Mostrar siempre el teclado + Sincronizar bóveda + Bloquear bóveda + Renombrar carpeta + Checar si el correo está en las filtraciones de datos conocidas + Checar si el nombre de usuario está en las filtraciones de datos conocidas + Checar si la contraseña está en las filtraciones de datos conocidas + Checar si el sitio web está en las filtraciones de datos conocidas + Abrir app + Abrir sitio web + Abrir documentos + Abrir el navegador + Iniciar la página principal + Iniciar Play Store + Abrir con %1$s + Abrir con... + ¿Cómo eliminar una cuenta? + Inseguro + Coincidir app + Detección de coincidencia + Dominio base + Coincide recursos por dominio de nivel superior y de segundo nivel. + Host + Coincidir recursos por nombre de host y (si se especifica) puerto. + Comienza con + Coincidir recursos cuando el recurso detectado comienza con la URI. + Coincidencia exacta + Coincidir con los recursos cuando el recurso detectado coincide exactamente con la URI. + Expresión regular + Coincidir recursos por expresión regular. Opción avanzada. + Nunca + Ignorar URI durante la búsqueda de elementos de autorrelleno. + %1$s vinculado a la contraseña + %1$s vinculado al nombre de usuario + %1$s vinculado al nombre de la tarjeta + %1$s vinculado al mes de vencimiento + %1$s vinculado al año de vencimiento + %1$s vinculado al código de la tarjeta + %1$s vinculado a la marca de la tarjeta + %1$s vinculado al número de tarjeta + %1$s vinculado al título + %1$s vinculado al segundo nombre + %1$s vinculado a la línea de dirección (1) + %1$s vinculado a la línea de dirección (2) + %1$s vinculado a la línea de dirección (3) + %1$s vinculado a la ciudad + %1$s vinculado al estado + %1$s vinculado al código postal + %1$s vinculado al país + %1$s vinculado a la empresa + %1$s vinculado al correo electrónico + %1$s vinculado al número de teléfono + %1$s vinculado al número de seguro social (SSN) + %1$s vinculado al nombre de usuario + %1$s vinculado al número de pasaporte + %1$s vinculado al número de licencia + %1$s vinculado al nombre + %1$s vinculado al apellido + %1$s vinculado al nombre completo + %1$s vinculado a un campo desconocido + Compartir con… + %1$d seleccionado + Copiar + Copiar valor + Copiar URL + Copiar URI + Copiar el nombre del paquete + Copiar contraseña + Copiar nombre de usuario + Copiar email + Copiar número de teléfono + Copiar número de pasaporte + Copiar número de licencia + Copiar número de tarjeta + Copiar el nombre del titular de la tarjeta + Copiar el año de caducidad + Copiar el mes de caducidad + Copiar código CVV + Copiar la contraseña de un solo uso + Copiar clave secreta + Desbloquear Keyguard + Abrir Keyguard + Enero + Febrero + Marzo + Abril + Mayo + Junio + Julio + Agosto + Septiembre + Octubre + Noviembre + Diciembre + Subir + Bajar + Quitar + ¿Eliminar un elemento? + Añadir más + FIDO2 WebAuthn + Autenticar WebAuthn + Volver a la app + + No debe estar vacío + + No debe estar en blanco + Debe ser un dominio personalizado + Debe contener solo caracteres US-ASCII + Al menos debe tener %1$d símbolos + Debe tener %1$d símbolos + Dominio inválido + Email no válido + URL no válida + URI no válida + Número de tarjeta inválido + Contraseña incorrecta + Error al generar el código OTP + Error al crear una llave de acceso + Error al autorizar una solicitud + + Código de barras + Mostrar como código de barras + Copie este autenticador a otro dispositivo escaneando el código QR. + + Selecciona la fecha + + Selector de color + + ¿Cómo eliminar una cuenta? + Una recopilación de información sobre cómo eliminar su cuenta de los servicios web + + Fácil + + Normal + + Difícil + + Disponibilidad limitada + + Imposible + Enviar email + Buscar sitios web + Sin instrucciones + Autenticación en dos pasos + Lista de sitios web con soporte de autenticación de dos factores + Buscar sitios web + Llaves de acceso + Lista de sitios web con soporte para llaves de acceso + Buscar sitios web + + Informe de filtración de datos + Las filtraciones de datos pueden proporcionar a los actores maliciosos acceso a información personal y financiera sensible potencialmente conduciendo a robo de identidad, fraude financiero y otras formas de cibercrimen. + No se encontraron filtraciones de datos + Cuentas comprometidas encontradas + Vulneraciones + Ocurrió en %1$s + Reportado en %1$s + No se pudieron comprobar las filtraciones de datos. Es posible que estés fuera de línea + Filtraciones de datos + Una contraseña que se encuentra en las filtraciones de datos toma mucho menos tiempo para vulnerarse y no debería ser utilizada. + La contraseña está comprometida + La contraseña ha sido identificada en las filtraciones de datos conocidas. Por favor, cámbiala inmediatamente para proteger tu seguridad en línea + No se encontraron filtraciones de datos + No se pudieron comprobar las filtraciones de datos. Es posible que estés fuera de línea + + Tipo grande + Mostrar en tipo grande + Mostrar en bóveda de tipo grande y bloqueo + Selector de Apps + Buscar apps instaladas + App de sistema + Sin apps + Elija una carpeta + Crear una nueva carpeta: + + Esta organización tendrá la propiedad de la copia. Tú no serás el dueño directo. + Reenviadores de correo + Reenviadores de correo + ¿Deseas eliminar el reenvío de correo? + ¿Deseas eliminar los reenviadores de correo? + Integración de reenvío de correo + Sin reenviadores de correo + Crear una bóveda cifrada donde se almacenarán los datos locales. + Contraseña de la app + Autenticación biométrica + Crear caja fuerte + Enviar informes de errores + Crear caja fuerte + Borrar datos de la app + Cerrar la aplicación y borrar todos los datos de la aplicación local + La caja fuerte está bloqueada. Introduce la contraseña de tu aplicación para continuar. + Desbloquear + + Desbloquear caja fuerte + + Utiliza la autenticación biométrica para desbloquear la caja fuerte. + Se requiere verificación del usuario. Introduce la contraseña de tu aplicación para continuar. + Verificar + Estado de la sincronización + Actualizado + Pendiente + Sincronizando + Sincronización fallida + Nuevo ítem + Editar ítem + Texto de estilo con %1$s o %2$s y más. Sintaxis de Markdown limitada es compatible. + cursiva + negrita + Vista previa + Re-autenticación + Solicitar que se autentifique de nuevo cuando vea o rellene automáticamente un cifrado + Añadir una cuenta de Bitwarden + No estamos afiliados, asociados, autorizados, avalados de ninguna manera, o relacionados con Bitwarden, Inc. o cualquiera de sus filiales o afiliados. + + Para pasar la verificación captcha a un cliente no oficial de Bitwarden, debe especificar la clave secreta. Para encontrarla, ve a Web Vault / Configuración / Clave API. + + Client secret + Iniciar sesión + Región + Estados Unidos + Europa + Personalizado (auto alojado) + Encabezados HTTP + Encabezado HTTP + Puede añadir cabeceras HTTP personalizadas que se enviarán con cada petición al servidor. + Llave + Valor + Añadir más + URL del servidor + Especifica la URL base de tu instalación de Bitwarden con alojamiento propio. + Entorno personalizado + Puede especificar la URL base de cada servicio de forma independiente. + URL del servidor de la caja fuerte + URL del servidor API + URL del servidor de iconos + URL del servidor de identidad + Verificación + Este método de autenticación no está soportado todavía. + Introduzca el código de verificación de su aplicación de autenticación. + Introduzca el código de verificación que fue enviado por correo electrónico a %1$s. + Introduzca el código de autenticación de YubiKey manualmente. Coloque el cursor en el campo de abajo y activa la YubiKey. + Autenticador + Dúo (Organización) + Autenticación Web De FIDO2 + Correo Electrónico + FIDO AF2 + Conectar YubiKey a través de USB + Requiere soporte USB OTG. + Toque el sensor de oro en su YubiKey ahora. + Mantén tu YubiKey en la parte trasera de tu dispositivo + Requiere soporte NFC. + Error al leer la YubiKey + Usar WebAuthn de FIDO2 requiere usar la bóveda de Bitwarden Web %1$s o superior. En versiones anteriores el resultado de autenticación será reenviado incorrectamente a la aplicación oficial de Bitwarden. + Confirmar acceso + Estos datos están protegidos, para continuar por favor ingrese la contraseña de la aplicación. + + Confirmar acceso + + Utilice la autenticación biométrica para confirmar su acceso y desbloquear estos datos. + Caja fuerte + Enviar + Generador + Vigilancia + Ajustes + Bloqueado por la inactividad + Texto + Archivo + Iniciar sesión + Tarjeta + Identidad + Nota + Llave de acceso + Texto + Boolean + Vinculado + + Comprometida + Muy fuerte + Fuerte + Bueno + Aceptable + Débil + Contraseñas muy fuertes + Contraseñas fuertes + Buenas contraseñas + No está mal + Contraseñas débiles + Filtro + No hay filtros disponibles + Ordenar por + No hay ordenamiento disponible + Título + Alfabético + Alfabético inverso + Recuento de acceso + Más grande primero + Más pequeño primero + Fecha de modificación + Más nuevo primero + Más antiguo primero + Fecha de caducidad + Más nuevo primero + Más antiguo primero + Fecha de eliminación + Más nuevo primero + Más antiguo primero + Contraseña + Alfabético + Alfabético inverso + Fecha de modificación de la contraseña + Más nuevo primero + Más antiguo primero + Seguridad de la contraseña + Más débil primero + Más fuerte primero + Buscar en caja fuerte + Nuevo ítem + No hay elementos sugeridos disponibles para este contexto + + Código de seguridad + Guardar en %1$s en%2$s + Contraseña modificada por última vez en %1$s + Llave de acceso creada en %1$s + Última modificación en %1$s + Creado en %1$s + Eliminado el %1$s + Expira el %1$s + Expiración programada el %1$s + Eliminación programada para el %1$s + + Llamar + + Texto + + E-mail + + Direcciones + Sends + Buscar Sends + Nuevo ítem + Se requiere una contraseña para compartir + Generador + Generador de nombre de usuario + Generador de contraseñas + Generar + Regenerar + Frase de contraseña + Las contraseñas aleatorias proporcionan la mejor combinación de memoria y seguridad. + Delimitador + Mayúsculas + Número + Nombre de usuario + Delimitador + Palabra personalizada + Mayúsculas + Número + Símbolos aleatorios + Una contraseña segura tiene al menos %1$d caracteres, mayúsculas & letras minúsculas, dígitos y símbolos. + Dígitos + Símbolos + Letras mayúsculas + Letras minúsculas + + Excluir símbolos similares + + Excluir símbolos ambiguos + Correo catch-all + Una dirección de correo catch-all proporciona a los usuarios la opción de recibir todo el correo enviado a su dominio, incluso si se envían a una dirección de correo electrónico que no ha sido configurada para su dominio. Asegúrate de que tu alojamiento de correo electrónico soporta esta característica antes de usarla. + + Dominio + Correo electrónico extra + Un correo electrónico extra significa que cualquier correo electrónico enviado a %1$s todavía está enviado a tu cuenta. Esto significa que puede tener muchas variaciones en tu dirección de correo electrónico para tener un correo en varios sitios o listas de correo. Asegúrate de que tu alojamiento de correo electrónico soporta esta característica antes de usarla. + Correo electrónico + Subdominio del correo electrónico + Dirección de subdominio significa que cualquier correo electrónico enviado a %1$s todavía se envía a tu cuenta. Esto significa que puedes tener muchas variantes en tú dirección de correo electrónico para dar a diferentes personas, sitios o listas de correo. Asegúrate de que tu alojamiento de correo electrónico soporta esta característica antes de usarla. + Correo electrónico + Alias de correo reenviado + Crear nueva cuenta con esta contraseña + Crear nueva cuenta con este nombre + Historial de contraseñas + Mostrar sugerencias + Historial del generador + Limpiar el historial + ¿Deseas limpiar el historial del generador? + Esto eliminará todos los elementos del historial. + Historial de contraseñas + Limpiar el historial + ¿Limpiar el historial de contraseñas? + Esto eliminará todas las contraseñas del historial. + Vigilancia + Seguridad de la contraseña + Seguridad + Mantenimiento + Contraseñas filtradas + Las contraseñas que han sido vulneradas en las filtraciones de datos. Deben ser modificadas inmediatamente. + Contraseñas reutilizadas + No utilices la misma contraseña en varios sitios web. Genera contraseñas únicas para una mejor seguridad. + Cuentas Vulnerables + Sitios que se vieron afectados por una filtración de datos desde la última vez que cambiaste una contraseña. Cambia tu contraseña para mantener tu cuenta segura. + Sitios Inseguros + Cambia las URLs que utilizan el protocolo HTTP para usar el protocolo HTTPS, ya que este último utiliza el cifrado más avanzado disponible. + Autenticación En Dos Pasos Inactiva + Sitios que tienen la autenticación en dos pasos disponibles pero aún no lo has configurado. + Llaves De Acceso Disponibles + Sitios con llaves de acceso disponibles pero aún no lo has configurado. Es más sencillo y seguro que una contraseña. + Elementos Incompletos + Te ayuda a identificar datos faltantes o incompletos en tu caja fuerte. Esto puede referirse a identidades con nombres faltantes o inicios de sesión sin nombres de usuario. + Elementos Expirados + Elementos que han expirado o expiraran pronto. + URls Duplicadas + Elementos que tienen una o más URIs que cubren los mismos sitios web después de aplicar una detección de coincidencias. + Elementos En Papelera + Elementos que se han movido a la papelera. Tener muchos elementos en la papelera puede ralentizar las operaciones con tu caja fuerte. + Carpetas Vacías + Carpetas que no tienen elementos en ellas. + Elementos Duplicados + Te ayuda a identificar y eliminar objetos duplicados en tu caja fuerte. + Cuentas Comprometidas + Compruebe las filtraciones de datos por un nombre de usuario o dirección de correo electrónico. + Cambiar contraseña de la app + Cambiar contraseña + Autenticación biométrica + + Cambiar contraseña de la app + La contraseña de la app nunca se almacena en el dispositivo ni se envía a través de la red. Se utiliza para generar una clave secreta que se utiliza para cifrar los datos locales. + A menos que sospeche acceso no autorizado o descubra un malware en el dispositivo, no hay necesidad de cambiar la contraseña más si es una contraseña única y fuerte. + Contáctanos + Tu mensaje + Utiliza solo inglés para asegurarnos de que tus comentarios no se malentiendan. + Agradecemos el tiempo que te toma enviándonos un mensaje. Tu mensaje va directamente a nosotros y lo utilizamos para solucionar problemas, hacer mejoras en el producto y solucionar problemas. Aunque no respondamos a cada informe, estamos revisando y trabajando en mejoras & arreglando problemas tan rápido como podamos. + Cuentas + Añadir cuenta + Equipo detrás de la aplicación + Soy un ingeniero en software de Ucrania. Me especializo en diseño y desarrollo de aplicaciones. + Sígueme + Buscar + Ajustes + Ajustes de búsqueda + Apariencia + Autocompletar + Desarrollo + Experimental + Ajustes + Notificaciones + Otros + Permisos + Seguridad + Keyguard Premium + Vigilancia + Licencias de código abierto + Cuentas + Añadir & ver cuentas + Autocompletar + Autollenado de Android & Servicios de credenciales + Seguridad + Biometría, cambiar contraseña, tiempo de la caja fuerte + Keyguard Premium + Desbloquear características & ayuda para desarrollo de la app + Vigilancia + Servicios comprometidos, contraseñas vulnerables + Notificaciones + Alertas + Apariencia + Idioma, temas y animaciones + Desarrollo + Configuración de prueba para desarrollo + Otros + Sitios web de la comunidad, información de la app + Mostrar etiquetas en los botones de navegación + Versión de la app + Fecha de compilación + Equipo detrás de la app + Comunidad de Reddit + Proyecto en GitHub + Proyecto de Crowdin + Licencias de código abierto + Descargar archivo APK + Cargar iconos de aplicación + Cargar iconos web + El icono de la página web podría filtrar la dirección del sitio web al proveedor de Internet + Formato de texto enriquecido + Usar Markdown para formatear notas + Idioma + Sugerir traducción + Tipo de fuente + Valorar en Play Store + Tonalidad + Tema + Usar tema negro + Abrir links en un navegador externo + Detener campos + Detener información sensible, como contraseñas y números de tarjeta de crédito + + Crash + Proveedor de credenciales + Llaves de acceso, contraseñas y servicios de datos + Política de privacidad + Contáctanos + Experimental + Cambiar contraseña de la app + Solicitar contraseña + Además de sus ajustes de seguridad regulares, su contraseña de la aplicación será requerida después de este momento o cuando se cambien los ajustes de la biometría + De inmediato + Nunca + Enviar informes de errores + Animaciones de transición + Borrar datos de la app + Cerrar la aplicación y borrar todos los datos de la aplicación local + Permitir capturas de pantalla + Mostrar el contenido de la aplicación al cambiar entre aplicaciones recientes y permitir la captura de una pantalla + Ocultar el contenido de la app al cambiar entre aplicaciones recientes y restringir las capturas de pantalla + Seguridad de los datos + Bloquear caja fuerte + Bloquear después de reiniciar + Bloquear la caja fuerte después de reiniciar el dispositivo + Bloquear cuando se apaga la pantalla + Bloquea la caja fuerte después de unos segundos de apagar la pantalla + Bloquear después de un tiempo + De inmediato + Nunca + Mantener la caja fuerte en el almacenamiento + La clave de la caja fuerte persiste en un almacenamiento interno + La caja fuerte se bloquea cuando la app se descarga de la memoria + Almacenar la clave en el almacenamiento es un riesgo de seguridad, Si el almacenamiento interno es comprometido, el atacante tendrá acceso a la clave local. + Permisos + Vista de las características + Desbloqueo biométrico + + Desbloqueo con biometría + Mantener la pantalla encendida mientras se visualizan los elementos + Servicio de Autocompletar + Utiliza el Framework de Autorrellenado de Android para ayudar a rellenar información de inicio de sesión en otras aplicaciones del dispositivo + Auto-copiar contraseñas de un solo uso + Cuando se rellena información del inicio de sesión, se copia automáticamente las contraseñas de un solo uso + Sugerencias automáticas + Inserta sugerencias de autorrelleno directamente en teclados compatibles + Selección manual + Muestra una opción para buscar manualmente una entrada en la caja fuerte + Respetar la bandera de Autorrellenado desactivada + Deshabilita el autorrelleno para un campo del navegador que tiene la bandera de autorrelleno desactivada + Toma en cuenta que algunos sitios web es difícil desactivar el autorrellenado para un campo de contraseña, así como algunos navegadores son difíciles para ignorar la bandera se autorrellenado desactivado + Preguntar para guardar datos + Pregunta para actualizar la caja fuerte cuando se completa el llenado de un formulario + Auto-guardar app o información de un sitio + Borrar automáticamente el portapapeles + De inmediato + Nunca + Duración de contraseña de un solo uso + Cuando autorrellenas un elemento de inicio de sesión que tiene una contraseña única, la notificación con código de verificación aparecerá durante al menos la duración definida + Nunca + Acerca de la suscripción de Keyguard + El Premium desbloquea características adicionales y financia el desarrollo de la aplicación. ¡Gracias por apoyarnos! ❤️ + Suscripciones + Productos + Error al cargar la lista de suscripciones + Error al cargar la lista de productos + Activo + No se renovará + Administrar en Play Store + Mostrar notificaciones + Utilizado para mostrar notificaciones de descargas + Cámara + Usado para escanear códigos QR + Permitir el diseño de dos paneles en modo horizontal + Permitir el diseño de dos paneles en modo vertical + Tema oscuro + Tema claro + Deshabilitado + Dinámico + Desvanecer + Desarrollado específicamente para aumentar la legibilidad para lectores con baja visión, y para mejorar la comprensión + Resumen De Las Funciones + Keyguard Premium + Cuentas Múltiples + Inicie sesión en varias cuentas simultáneamente. + Sincronización bidireccional + Añadir o editar elementos y sincronizar los cambios de nuevo. + Edición sin conexión + Añadir o editar elementos sin conexión a Internet. + Buscar + Buscar cualquier cosa + Nombre, correo electrónico, contraseña, número de teléfono, etc. + Filtrar + Filtrar por carpeta, organización, tipo etc. + Múltiples palabras clave + Busca por \"bitw test\" para encontrar el elemento de \"Cuenta de Prueba de Bitwarden\". + Vigilancia + Contraseñas filtradas + Encuentre elementos de contraseñas expuestas en las filtraciones de datos. + Seguridad de la contraseña + Encuentra elementos con contraseñas débiles. + Contraseñas reutilizadas + Encuentra elementos con contraseñas reutilizadas. + AF2 Inactivos + Encuentre entradas con autenticación TOTP de dos factores disponible. + Sitios inseguros + Encuentre sitios web que utilicen el protocolo HTTP, cambiando a HTTPS. + Elementos incompletos + Encuentra elementos vacíos que puedan necesitar actualizaciones. + Elementos expirados + Encontrar elementos prontos a expirar o expirados. + Elementos duplicados + Encuentra y mezcla elementos duplicados. + Misceláneos + Multi-selección + Combinar cifrados, fijar la refactorización con operaciones por lotes. + Mostrar como código de barras + Codifica un texto como códigos de barras diferentes. + Generador + Generar contraseñas o nombres de usuario. + Seguridad de los datos + Datos locales + Los datos locales consisten en Descargas, configuración de usuario, cajas fuertes. Se almacenan en el almacenamiento interno de un dispositivo, al que solo puede acceder el sistema Android o también a Keyguard. + Descargas + Ajustes de usuario + Los ajustes de usuario se cifran usando una clave específica del dispositivo. + Ajustes de usuario + La caja fuerte se encripta usando una clave, derivada de la contraseña de la aplicación usando los siguientes pasos: + La sal y el Hash se almacenan localmente en un dispositivo, para luego generar una llave maestra para desbloquear la caja fuerte. + Desbloquear una caja fuerte significa almacenar una clave correcta en la RAM de un dispositivo, ganando la capacidad de leer y modificar la caja fuerte cifrada. + Datos remotos + Los datos remotos se almacenan en servidores Bitwarden con cifrado de conocimiento cero. + diff --git a/common/src/commonMain/resources/MR/fi-rFI/plurals.xml b/common/src/commonMain/resources/MR/fi-rFI/plurals.xml new file mode 100644 index 00000000..5f2db8ad --- /dev/null +++ b/common/src/commonMain/resources/MR/fi-rFI/plurals.xml @@ -0,0 +1,2 @@ + + diff --git a/common/src/commonMain/resources/MR/fi-rFI/strings.xml b/common/src/commonMain/resources/MR/fi-rFI/strings.xml new file mode 100644 index 00000000..214f4486 --- /dev/null +++ b/common/src/commonMain/resources/MR/fi-rFI/strings.xml @@ -0,0 +1,868 @@ + + + OK + Close + Yes + No + + Name + Account name + Username + Password + App password + Current password + New password + Email + Verified + Not verified + Email visibility + Public URL + URL + + Access count + Learn more + Phone number + Passport number + License number + Card number + No card number + Brand + Security code + Valid from + Valid to + Card expiry month + Card expiry year + Cardholder name + Valid from + Expiry date + Company + Sync + + Hidden + + Visible + + Empty + + SSN + City + State + Info + Cancel + Continue + Country + Address + Postal code + Pull to search + Save + URI + URIs + Note + Notes + Attachments + No attachments + Expiring soon + Incomplete data + This item is missing some of the important information. + Item + Items + %1$s items + All items + No items + No folder + New folder + Folder + Folders + No folders + No collection + Collection + Collections + No collections + My vault + Organization + Organizations + No organizations + Miscellaneous + Add integration + Account + Accounts + No accounts + No account + Type + Options + Send + Reset + Length + Security + Contact info + Title + First name + Middle name + Last name + Full name + Address line 1 + Address line 2 + Address line 3 + Rename + Select type + Autofill + Passkey + Create a passkey + Unlock Keyguard + Confirming auth request… + Passkeys + + Signature counter + + Relying party + + Discoverable + Username + Display name + API key + Domain + Edit + Delete + Remove + Remove from the history + Reused password + Reused passwords + One-time password + Authenticator key + Use + Save passkey + Passkey available + Two-factor authentication available + Custom + Follow system settings + + Coming soon + Powered by + Verification code + Re-send verification code + Requested a verification email + Web vault + Launch Web vault + + Remember me + + Trash + + Download + Downloads + No downloads + No duplicates + Encryption + + Key + Hash + Salt + 256-bit AES + Random %1$d-bits of data + None + Text + Linked apps + Linked URIs + Custom fields + Reveal a secure note + Hide a secure note + Master password hint + Fingerprint phrase + What is a fingerprint? + Bitwarden premium + Unofficial Bitwarden server + Last synced at %1$s + Change name + Change color + Change master password hint + Sign out + Sign in + Visit Web vault to verify your email address + Upgrade your account to a premium membership and unlock some great additional features + Two-factor authentication + Require login verification with another device such as a security key, authenticator app, SMS or email + Active + Items + Log out + Log out? + All of the not synchronized changes will be lost! + Change name + Change names + Delete folder? + Delete folders? + This item(s) will be deleted immediately. You can not undo this action. + Recently opened + Often opened + View details + Save to + Add to favourites + Remove from favourites + Enable auth re-prompt + Disable auth re-prompt + Edit + Merge into… + Copy to… + Move to folder + Change name + Change names + Add password + Add passwords + Change password + Change passwords + View password history + Trash + Restore + Delete forever + Move associated items to trash + Open with… + Send with… + Open in a file manager + Delete local file + View parent item + Always show keyboard + Sync vault + Lock vault + Rename folder + Check the email in known data breaches + Check the username in known data breaches + Check the password in known data breaches + Check the website in known data breaches + Launch app + Launch website + Launch docs + Launch browser + Launch main page + Launch Play store + Launch with %1$s + Launch with… + How to delete an account? + Unsecure + Match app + Match detection + Base domain + Match resources by top-level and second-level domain. + Host + Match resources by hostname and (if specified) port. + Starts with + Match resources when the detected resource starts with the URI. + Exact + Match resources when the detected resource exactly matches the URI. + Regular expression + Match resources by regular expression. Advanced option. + Never + Ignore URI during auto-fill item search. + %1$s linked to the password + %1$s linked to the username + %1$s linked to the cardholder name + %1$s linked to the expiration month + %1$s linked to the expiration year + %1$s linked to the card code + %1$s linked to the card brand + %1$s linked to the card number + %1$s linked to the title + %1$s linked to the middle name + %1$s linked to the address line (1) + %1$s linked to the address line (2) + %1$s linked to the address line (3) + %1$s linked to the city + %1$s linked to the state + %1$s linked to the postal code + %1$s linked to the country + %1$s linked to the company + %1$s linked to the email + %1$s linked to the phone number + %1$s linked to the SSN + %1$s linked to the username + %1$s linked to the passport number + %1$s linked to the license number + %1$s linked to the first name + %1$s linked to the last name + %1$s linked to the full name + %1$s linked to an unknown field + Share with… + %1$d selected + Copy + Copy value + Copy URL + Copy URI + Copy package name + Copy password + Copy username + Copy email + Copy phone number + Copy passport number + Copy license number + Copy card number + Copy cardholder name + Copy expiration year + Copy expiration month + Copy CVV code + Copy one-time password + Copy secret key + Unlock Keyguard + Open Keyguard + January + February + March + April + May + June + July + August + September + October + November + December + Move up + Move down + Remove + Remove an item? + Add more + FIDO2 WebAuthn + Authenticate WebAuthn + Return to app + + Must not be empty + + Must not be blank + Must be custom domain + Must contain only US-ASCII characters + Must be at least %1$d symbols long + Must be %1$d symbols long + Invalid domain + Invalid email + Invalid URL + Invalid URI + Invalid card number + Incorrect password + Failed to generate OTP code + Failed to create a passkey + Failed to authorize a request + + Barcode + Show as Barcode + Copy this authenticator to another device by scanning the QR code. + + Date picker + + Color picker + + How to delete an account? + A collection of info of how to delete your account from web services + + Easy + + Medium + + Hard + + Limited availability + + Impossible + Send email + Search websites + No instructions + Two-factor authentication + List of websites with two-factor authentication support + Search websites + Passkeys + List of websites with passkeys support + Search websites + + Data breach + Breached account data can provide malicious actors with access to sensitive personal and financial information, potentially leading to identity theft, financial fraud, and other forms of cybercrime. + No breaches found + Breached accounts found + Breaches + Occurred on %1$s + Reported on %1$s + Failed to check data breaches. You might currently be offline + Data breach + A password that is found in the data breaches takes significantly less time to break and should never be used. + Password is compromised + The password has been identified in known data breaches. Please change it immediately to protect your online security + No breaches found + Failed to check data breaches. You might currently be offline + + Large Type + Show in Large Type + Show in Large Type and Lock vault + App Picker + Search installed apps + System app + No apps + Choose a folder + Create a new folder: + + This organization will have an ownership of the copy. You will not be the direct owner. + Email forwarders + Email forwarders + Delete email forwarder? + Delete email forwarders? + Email forwarder integration + No email forwarders + Create an encrypted vault where the local data will be stored. + App password + Biometric authentication + Create a vault + Send crash reports + Create a vault + Erase app data + Close the app and erase all local app data + The vault is locked. Enter your app password to continue. + Unlock + + Unlock a vault + + Use biometric authentication to unlock the vault. + User verification is required. Enter your app password to continue. + Verify + Sync status + Up to date + Pending + Syncing + Sync failed + New item + Edit item + Style text with %1$s or %2$s and more. Limited Markdown syntax is supported. + italic + bold + Render preview + Auth re-prompt + Ask to authenticate again when you view or autofill a cipher + Add Bitwarden account + We are not affiliated, associated, authorized, endorsed by, or in any way officially connected with the Bitwarden, Inc., or any of its subsidiaries or its affiliates. + + To pass the captcha verification on an unofficial Bitwarden client, you must specify the client secret. To find it, visit Web vault / Settings / API Key. + + Client secret + Sign in + Region + United States + Europe + Custom (self-hosted) + HTTP headers + HTTP header + You can add custom HTTP headers that will be sent with every request to the server. + Key + Value + Add more + Server URL + Specify the base URL of your self-hosted Bitwarden installation. + Custom environment + You can specify the base URL of each service independently. + Web Vault Server URL + API Server URL + Icons Server URL + Identity Server URL + Verification + This authentication method is not supported yet. + Enter the verification code from your authenticator app. + Enter the verification code that was emailed to %1$s. + Enter the YubiKey authentication code manually. Place the cursor on the field below and trigger the YubiKey. + Authenticator + Duo (Organization) + FIDO2 Web Authentication + Email + FIDO U2F + Connect YubiKey via USB + Requires USB OTG support. + Touch the gold sensor on your YubiKey now. + Hold your YubiKey flat against the back of your device + Requires NFC support. + Failed to read YubiKey + Using FIDO2 WebAuthn requires using the Bitwarden Web vault version %1$s or higher. On older versions the authentication result will incorrectly be forwarded to the official Bitwarden app. + Confirm access + This data is protected, to continue please enter your app password. + + Confirm access + + Use biometric authentication to confirm your access and unlock this data. + Vault + Send + Generator + Watchtower + Settings + Locked due to inactivity + Text + File + Login + Card + Identity + Note + Passkey + Text + Boolean + Linked + + Pwned + Very strong + Strong + Good + Fair + Weak + Very strong passwords + Strong passwords + Good passwords + Fair passwords + Weak passwords + Filter + No filters available + Sort by + No sorting available + Title + Alphabetically + Reverse Alphabetically + Access count + Largest First + Smallest First + Modification date + Newest First + Oldest First + Expiration date + Newest First + Oldest First + Deletion date + Newest First + Oldest First + Password + Alphabetically + Reverse Alphabetically + Password modification date + Newest First + Oldest First + Password strength + Weakest First + Strongest First + Search vault + New item + There are no suggested items available for this context + + Security code + Saved to %1$s at %2$s + Password last modified at %1$s + Passkey created at %1$s + Last modified at %1$s + Created at %1$s + Deleted at %1$s + Expired at %1$s + Expiration scheduled at %1$s + Deleting scheduled at %1$s + + Call + + Text + + Email + + Directions + Sends + Search sends + New item + A password is required to access this share + Generator + Username generator + Password generator + Generate + Regenerate + Passphrase + Random passphrases provide the best combination of memorability and security. + Delimiter + Capitalize + Number + Username + Delimiter + Custom word + Capitalize + Number + Random symbols + A strong password has at least %1$d characters, uppercase & lowercase letters, digits and symbols. + Digits + Symbols + Uppercase letters + Lowercase letters + + Exclude similar symbols + + Exclude ambiguous symbols + Catch-all email + A catch-all email address provides users the option to receive all mail sent to their domain, even if they are sent to an email address that has not been set up for their domain. Ensure that your email hosting supports this feature before using it. + + Domain + Plus addressing email + Plus addressing means any email sent to %1$s is still sent to your account. This means you can have a lot of variations on your email address to give out to different people, sites, or mailing lists. Ensure that your email hosting supports this feature before using it. + Email + Subdomain addressing email + Subdomain addressing means any email sent to %1$s is still sent to your account. This means you can have a lot of variations on your email address to give out to different people, sites, or mailing lists. Ensure that your email hosting supports this feature before using it. + Email + Forwarded email alias + Create new login with the password + Create new login with the username + Password history + Show tips + Generator history + Clear history + Clear generator history? + This will remove all items from the history. + Password history + Clear history + Clear password history? + This will remove all passwords from the history. + Watchtower + Password strength + Security + Maintenance + Pwned Passwords + Passwords that have been exposed in data breaches. Such passwords should be changed immediately. + Reused Passwords + Don\'t use the same password on multiple websites. Generate unique passwords to improve security. + Vulnerable Accounts + Sites that were affected by a data breach since you last changed a password. Change your password to keep your account safe. + Unsecure Websites + Change the URLs that use HTTP protocol to use HTTPS protocol, as the latter utilizes the most advanced encryption available. + Inactive two-factor authentication + Sites that have two-factor authentication available but you haven\'t set it up yet. + Available Passkeys + Sites that have passkey available but you haven\'t set it up yet. It\'s simpler and more secure then a password. + Incomplete Items + Helps you identify missing or incomplete data in your vault. This can refer to identities with missing names or logins without usernames. + Expiring Items + Items that have expired or are expiring soon. + Duplicate URIs + Items that have one or more URIs that cover the same websites after applying the match detection. + Trashed Items + Items that have been moved into the trash. Having too many items in the trash may slow down operations with your vault. + Empty Folders + Folders that do not have any items in them. + Duplicate Items + Helps you identify and eliminate duplicate items in your vault. + Compromised Accounts + Check data breaches by a username or email address. + Change app password + Change password + Biometric authentication + + Change app password + App password never gets stored on the device nor sent over the network. It is used to generate a secret key that is used to encrypt the local data. + Unless you suspect unauthorized access or discover a malware on the device, there is no need to change the password if it is a strong, unique password. + Contact us + Your message + Use English to ensure that your feedback doesn\'t get misunderstood. + We appreciate the time that you spend sending us a message. Your message goes directly to us and we use it to troubleshoot issues, make product improvements and fix problems. While we may not reply to every report, we\'re reviewing and working on improvements & fixing issues as fast as we can. + Accounts + Add account + Team behind the app + I\'m a Software engineer from Ukraine. I specialize on app design and development. + Follow me + Search + Settings + Search settings + Appearance + Autofill + Development + Experimental + Settings + Notifications + Other + Permissions + Security + Keyguard Premium + Watchtower + Open-source licenses + Accounts + Add & view accounts + Autofill + Android Autofill & Credential services + Security + Biometrics, change password, vault timeout + Keyguard Premium + Unlock features & support app development + Watchtower + Compromised services, vulnerable passwords + Notifications + Alerts + Appearance + Language, theme and animations + Development + Test settings for development + Other + Community websites, app info + Show labels on navigation buttons + App version + App build date + Team behind the app + Reddit community + GitHub project + Crowdin project + Open-source licenses + Download APK file + Load App icons + Load Website icons + Queuing website icon might leak the website address to internet provider + Rich text formatting + Use Markdown to format notes + Language + Suggest translation + Font + Rate on Play Store + Tint color + Theme + Use contrast black theme + Open links in external browser + Conceal fields + Conceal sensitive info, such as passwords and credit card numbers + + Crash + Credential provider + Passkeys, passwords and data services + Privacy policy + Contact us + Experimental + Change app password + Require app password + In addition to your regular security settings, your app password will be required after this time or when biometry settings are changed + Immediately + Never + Send crash reports + Transition animation + Erase app data + Close the app and erase all local app data + Allow screenshots + Show the content of the app when switching between recent apps and allow capturing a screen + Hide the content of the app when switching between recent apps and forbid capturing a screen + Data safety + Lock vault + Lock after a reboot + Lock the vault after a device reboot + Lock when screen turns off + Lock the vault after a few seconds once the screen is off + Lock after a delay + Immediately + Never + Persist vault key on a disk + Vault key is persisted on an internal storage + Vault is locked after the app is unloaded from the memory + Storing a vault key on a disk is a security risk. If the device\'s internal storage is compromised, the attacker will gain access to the local vault data. + Permissions + Features overview + Biometric unlock + + Biometric unlock + Keep the screen on while viewing items + Autofill service + Use the Android Autofill Framework to assist in filling login information into other apps on the device + Auto-copy one-time passwords + When filling a login information, automatically copy one-time passwords + Inline suggestions + Embeds autofill suggestions directly into compatible keyboards + Manual selection + Displays an option to manually search a vault for an entry + Respect Autofill disabled flag + Disables autofill for a browser field that has autofill disabled flag set + Note that some websites are notorious for disabling autofill for a password field as well as some browsers are notorious for ignoring the autofill disabled flag + Ask to save data + Asks for updating the vault when filling of a form has completed + Auto-save app or website info + Automatically clear clipboard + Immediately + Never + One-time password notification duration + When you autofill a login item that has a one-time password, the notification with verification code will popup for at least the defined duration + Never + About Keyguard membership + The Premium unlocks extra features and funds a development of the app. Thank you for supporting us! ❤️ + Subscriptions + Products + Failed to load a list of subscriptions + Failed to load a list of products + Active + Will not renew + Manage on Play Store + Post notifications + Used to post downloading notifications + Camera + Used to scan QR codes + Allow two panel layout in landscape mode + Allow two panel layout in portrait mode + Dark + Light + Disabled + Dynamic + Crossfade + Developed specifically to increase legibility for readers with low vision, and to improve comprehension + Features Overview + Keyguard Premium + Multiple Accounts + Sign-in to multiple accounts simultaneously. + Two-way sync + Add or edit items and sync the changes back. + Offline editing + Add or edit items without internet connection. + Search + Search by anything + Name, email, password, phone number etc. + Filter + Filter by folder, organization, type etc. + Multiple keywords + Search by \'bitw test\' to find your \'Bitwarden Test Account\' item. + Watchtower + Pwned passwords + Find items with exposed in data breaches passwords. + Password strength + Find items with weak passwords. + Reused passwords + Find items with reused passwords. + Inactive 2FA + Find logins with available TOTP two-factor authentication. + Unsecure websites + Find websites that use HTTP protocol, auto-fix to HTTPS. + Incomplete items + Find empty items that might need updates. + Expiring items + Find expired or soon to be expired items. + Duplicate items + Find and merge duplicate items. + Misc + Multi-selection + Merge ciphers, fasten the refactoring with batch operations. + Show as Barcode + Encode a text as different barcodes. + Generator + Generate passwords or usernames. + Data safety + Local data + Local data consists of Downloads, User settings, Vault. They are stored in the internal storage of a device, which can only be accessed by the Android system or the Keyguard. + Downloads + User settings + The User settings are encrypted using a device-specific key. + Vault + The Vault is encrypted using a Key, derived from the App password using following steps: + The Salt and the Hash is then stored locally on a device, to later generate a master key to unlock the vault. + Unlocking a Vault means storing a correct Key in a device\'s RAM, gaining an ability to read and modify encrypted Vault. + Remote data + Remote data is stored on Bitwarden servers with zero-knowledge encryption. + diff --git a/common/src/commonMain/resources/MR/files/gpm_passkeys_privileged_apps.json b/common/src/commonMain/resources/MR/files/gpm_passkeys_privileged_apps.json new file mode 100644 index 00000000..d2102b2e --- /dev/null +++ b/common/src/commonMain/resources/MR/files/gpm_passkeys_privileged_apps.json @@ -0,0 +1,480 @@ +{ + "apps": [ + { + "type": "android", + "info": { + "package_name": "com.android.chrome", + "signatures": [ + { + "build": "release", + "cert_fingerprint_sha256": "F0:FD:6C:5B:41:0F:25:CB:25:C3:B5:33:46:C8:97:2F:AE:30:F8:EE:74:11:DF:91:04:80:AD:6B:2D:60:DB:83" + }, + { + "build": "userdebug", + "cert_fingerprint_sha256": "19:75:B2:F1:71:77:BC:89:A5:DF:F3:1F:9E:64:A6:CA:E2:81:A5:3D:C1:D1:D5:9B:1D:14:7F:E1:C8:2A:FA:00" + } + ] + } + }, + { + "type": "android", + "info": { + "package_name": "com.chrome.beta", + "signatures": [ + { + "build": "release", + "cert_fingerprint_sha256": "DA:63:3D:34:B6:9E:63:AE:21:03:B4:9D:53:CE:05:2F:C5:F7:F3:C5:3A:AB:94:FD:C2:A2:08:BD:FD:14:24:9C" + }, + { + "build": "release", + "cert_fingerprint_sha256": "3D:7A:12:23:01:9A:A3:9D:9E:A0:E3:43:6A:B7:C0:89:6B:FB:4F:B6:79:F4:DE:5F:E7:C2:3F:32:6C:8F:99:4A" + } + ] + } + }, + { + "type": "android", + "info": { + "package_name": "com.chrome.dev", + "signatures": [ + { + "build": "release", + "cert_fingerprint_sha256": "90:44:EE:5F:EE:4B:BC:5E:21:DD:44:66:54:31:C4:EB:1F:1F:71:A3:27:16:A0:BC:92:7B:CB:B3:92:33:CA:BF" + }, + { + "build": "release", + "cert_fingerprint_sha256": "3D:7A:12:23:01:9A:A3:9D:9E:A0:E3:43:6A:B7:C0:89:6B:FB:4F:B6:79:F4:DE:5F:E7:C2:3F:32:6C:8F:99:4A" + } + ] + } + }, + { + "type": "android", + "info": { + "package_name": "com.chrome.canary", + "signatures": [ + { + "build": "release", + "cert_fingerprint_sha256": "20:19:DF:A1:FB:23:EF:BF:70:C5:BC:D1:44:3C:5B:EA:B0:4F:3F:2F:F4:36:6E:9A:C1:E3:45:76:39:A2:4C:FC" + } + ] + } + }, + { + "type": "android", + "info": { + "package_name": "org.chromium.chrome", + "signatures": [ + { + "build": "release", + "cert_fingerprint_sha256": "C6:AD:B8:B8:3C:6D:4C:17:D2:92:AF:DE:56:FD:48:8A:51:D3:16:FF:8F:2C:11:C5:41:02:23:BF:F8:A7:DB:B3" + }, + { + "build": "userdebug", + "cert_fingerprint_sha256": "19:75:B2:F1:71:77:BC:89:A5:DF:F3:1F:9E:64:A6:CA:E2:81:A5:3D:C1:D1:D5:9B:1D:14:7F:E1:C8:2A:FA:00" + } + ] + } + }, + { + "type": "android", + "info": { + "package_name": "com.google.android.apps.chrome", + "signatures": [ + { + "build": "userdebug", + "cert_fingerprint_sha256": "19:75:B2:F1:71:77:BC:89:A5:DF:F3:1F:9E:64:A6:CA:E2:81:A5:3D:C1:D1:D5:9B:1D:14:7F:E1:C8:2A:FA:00" + } + ] + } + }, + { + "type": "android", + "info": { + "package_name": "org.mozilla.fennec_webauthndebug", + "signatures": [ + { + "build": "userdebug", + "cert_fingerprint_sha256": "BD:AE:82:02:80:D2:AF:B7:74:94:EF:22:58:AA:78:A9:AE:A1:36:41:7E:8B:C2:3D:C9:87:75:2E:6F:48:E8:48" + } + ] + } + }, + { + "type": "android", + "info": { + "package_name": "org.mozilla.firefox", + "signatures": [ + { + "build": "release", + "cert_fingerprint_sha256": "A7:8B:62:A5:16:5B:44:94:B2:FE:AD:9E:76:A2:80:D2:2D:93:7F:EE:62:51:AE:CE:59:94:46:B2:EA:31:9B:04" + } + ] + } + }, + { + "type": "android", + "info": { + "package_name": "org.mozilla.firefox_beta", + "signatures": [ + { + "build": "release", + "cert_fingerprint_sha256": "A7:8B:62:A5:16:5B:44:94:B2:FE:AD:9E:76:A2:80:D2:2D:93:7F:EE:62:51:AE:CE:59:94:46:B2:EA:31:9B:04" + } + ] + } + }, + { + "type": "android", + "info": { + "package_name": "org.mozilla.focus", + "signatures": [ + { + "build": "release", + "cert_fingerprint_sha256": "62:03:A4:73:BE:36:D6:4E:E3:7F:87:FA:50:0E:DB:C7:9E:AB:93:06:10:AB:9B:9F:A4:CA:7D:5C:1F:1B:4F:FC" + } + ] + } + }, + { + "type": "android", + "info": { + "package_name": "org.mozilla.fennec_aurora", + "signatures": [ + { + "build": "release", + "cert_fingerprint_sha256": "BC:04:88:83:8D:06:F4:CA:6B:F3:23:86:DA:AB:0D:D8:EB:CF:3E:77:30:78:74:59:F6:2F:B3:CD:14:A1:BA:AA" + } + ] + } + }, + { + "type": "android", + "info": { + "package_name": "org.mozilla.rocket", + "signatures": [ + { + "build": "release", + "cert_fingerprint_sha256": "86:3A:46:F0:97:39:32:B7:D0:19:9B:54:91:12:74:1C:2D:27:31:AC:72:EA:11:B7:52:3A:A9:0A:11:BF:56:91" + } + ] + } + }, + { + "type": "android", + "info": { + "package_name": "com.microsoft.emmx.canary", + "signatures": [ + { + "build": "release", + "cert_fingerprint_sha256": "01:E1:99:97:10:A8:2C:27:49:B4:D5:0C:44:5D:C8:5D:67:0B:61:36:08:9D:0A:76:6A:73:82:7C:82:A1:EA:C9" + } + ] + } + }, + { + "type": "android", + "info": { + "package_name": "com.microsoft.emmx.dev", + "signatures": [ + { + "build": "release", + "cert_fingerprint_sha256": "01:E1:99:97:10:A8:2C:27:49:B4:D5:0C:44:5D:C8:5D:67:0B:61:36:08:9D:0A:76:6A:73:82:7C:82:A1:EA:C9" + } + ] + } + }, + { + "type": "android", + "info": { + "package_name": "com.microsoft.emmx.beta", + "signatures": [ + { + "build": "release", + "cert_fingerprint_sha256": "01:E1:99:97:10:A8:2C:27:49:B4:D5:0C:44:5D:C8:5D:67:0B:61:36:08:9D:0A:76:6A:73:82:7C:82:A1:EA:C9" + } + ] + } + }, + { + "type": "android", + "info": { + "package_name": "com.microsoft.emmx", + "signatures": [ + { + "build": "release", + "cert_fingerprint_sha256": "01:E1:99:97:10:A8:2C:27:49:B4:D5:0C:44:5D:C8:5D:67:0B:61:36:08:9D:0A:76:6A:73:82:7C:82:A1:EA:C9" + } + ] + } + }, + { + "type": "android", + "info": { + "package_name": "com.microsoft.emmx.rolling", + "signatures": [ + { + "build": "userdebug", + "cert_fingerprint_sha256": "32:A2:FC:74:D7:31:10:58:59:E5:A8:5D:F1:6D:95:F1:02:D8:5B:22:09:9B:80:64:C5:D8:91:5C:61:DA:D1:E0" + } + ] + } + }, + { + "type": "android", + "info": { + "package_name": "com.microsoft.emmx.local", + "signatures": [ + { + "build": "userdebug", + "cert_fingerprint_sha256": "32:A2:FC:74:D7:31:10:58:59:E5:A8:5D:F1:6D:95:F1:02:D8:5B:22:09:9B:80:64:C5:D8:91:5C:61:DA:D1:E0" + } + ] + } + }, + { + "type": "android", + "info": { + "package_name": "com.brave.browser", + "signatures": [ + { + "build": "release", + "cert_fingerprint_sha256": "9C:2D:B7:05:13:51:5F:DB:FB:BC:58:5B:3E:DF:3D:71:23:D4:DC:67:C9:4F:FD:30:63:61:C1:D7:9B:BF:18:AC" + } + ] + } + }, + { + "type": "android", + "info": { + "package_name": "com.brave.browser_beta", + "signatures": [ + { + "build": "release", + "cert_fingerprint_sha256": "9C:2D:B7:05:13:51:5F:DB:FB:BC:58:5B:3E:DF:3D:71:23:D4:DC:67:C9:4F:FD:30:63:61:C1:D7:9B:BF:18:AC" + } + ] + } + }, + { + "type": "android", + "info": { + "package_name": "com.brave.browser_nightly", + "signatures": [ + { + "build": "release", + "cert_fingerprint_sha256": "9C:2D:B7:05:13:51:5F:DB:FB:BC:58:5B:3E:DF:3D:71:23:D4:DC:67:C9:4F:FD:30:63:61:C1:D7:9B:BF:18:AC" + } + ] + } + }, + { + "type": "android", + "info": { + "package_name": "app.vanadium.browser", + "signatures": [ + { + "build": "release", + "cert_fingerprint_sha256": "C6:AD:B8:B8:3C:6D:4C:17:D2:92:AF:DE:56:FD:48:8A:51:D3:16:FF:8F:2C:11:C5:41:02:23:BF:F8:A7:DB:B3" + } + ] + } + }, + { + "type": "android", + "info": { + "package_name": "com.vivaldi.browser", + "signatures": [ + { + "build": "release", + "cert_fingerprint_sha256": "E8:A7:85:44:65:5B:A8:C0:98:17:F7:32:76:8F:56:89:B1:66:2E:C4:B2:BC:5A:0B:C0:EC:13:8D:33:CA:3D:1E" + } + ] + } + }, + { + "type": "android", + "info": { + "package_name": "com.vivaldi.browser.snapshot", + "signatures": [ + { + "build": "release", + "cert_fingerprint_sha256": "E8:A7:85:44:65:5B:A8:C0:98:17:F7:32:76:8F:56:89:B1:66:2E:C4:B2:BC:5A:0B:C0:EC:13:8D:33:CA:3D:1E" + } + ] + } + }, + { + "type": "android", + "info": { + "package_name": "com.vivaldi.browser.sopranos", + "signatures": [ + { + "build": "release", + "cert_fingerprint_sha256": "E8:A7:85:44:65:5B:A8:C0:98:17:F7:32:76:8F:56:89:B1:66:2E:C4:B2:BC:5A:0B:C0:EC:13:8D:33:CA:3D:1E" + } + ] + } + }, + { + "type": "android", + "info": { + "package_name": "com.citrix.Receiver", + "signatures": [ + { + "build": "release", + "cert_fingerprint_sha256": "3D:D1:12:67:10:69:AB:36:4E:F9:BE:73:9A:B7:B5:EE:15:E1:CD:E9:D8:75:7B:1B:F0:64:F5:0C:55:68:9A:49" + }, + { + "build": "release", + "cert_fingerprint_sha256": "CE:B2:23:D7:77:09:F2:B6:BC:0B:3A:78:36:F5:A5:AF:4C:E1:D3:55:F4:A7:28:86:F7:9D:F8:0D:C9:D6:12:2E" + }, + { + "build": "release", + "cert_fingerprint_sha256": "AA:D0:D4:57:E6:33:C3:78:25:77:30:5B:C1:B2:D9:E3:81:41:C7:21:DF:0D:AA:6E:29:07:2F:C4:1D:34:F0:AB" + } + ] + } + }, + { + "type": "android", + "info": { + "package_name": "com.android.browser", + "signatures": [ + { + "build": "release", + "cert_fingerprint_sha256": "C9:00:9D:01:EB:F9:F5:D0:30:2B:C7:1B:2F:E9:AA:9A:47:A4:32:BB:A1:73:08:A3:11:1B:75:D7:B2:14:90:25" + } + ] + } + }, + { + "type": "android", + "info": { + "package_name": "com.sec.android.app.sbrowser", + "signatures": [ + { + "build": "release", + "cert_fingerprint_sha256": "C8:A2:E9:BC:CF:59:7C:2F:B6:DC:66:BE:E2:93:FC:13:F2:FC:47:EC:77:BC:6B:2B:0D:52:C1:1F:51:19:2A:B8" + }, + { + "build": "release", + "cert_fingerprint_sha256": "34:DF:0E:7A:9F:1C:F1:89:2E:45:C0:56:B4:97:3C:D8:1C:CF:14:8A:40:50:D1:1A:EA:4A:C5:A6:5F:90:0A:42" + } + ] + } + }, + { + "type": "android", + "info": { + "package_name": "com.sec.android.app.sbrowser.beta", + "signatures": [ + { + "build": "release", + "cert_fingerprint_sha256": "C8:A2:E9:BC:CF:59:7C:2F:B6:DC:66:BE:E2:93:FC:13:F2:FC:47:EC:77:BC:6B:2B:0D:52:C1:1F:51:19:2A:B8" + }, + { + "build": "release", + "cert_fingerprint_sha256": "34:DF:0E:7A:9F:1C:F1:89:2E:45:C0:56:B4:97:3C:D8:1C:CF:14:8A:40:50:D1:1A:EA:4A:C5:A6:5F:90:0A:42" + } + ] + } + }, + { + "type": "android", + "info": { + "package_name": "com.google.android.gms", + "signatures": [ + { + "build": "release", + "cert_fingerprint_sha256": "7C:E8:3C:1B:71:F3:D5:72:FE:D0:4C:8D:40:C5:CB:10:FF:75:E6:D8:7D:9D:F6:FB:D5:3F:04:68:C2:90:50:53" + }, + { + "build": "release", + "cert_fingerprint_sha256": "D2:2C:C5:00:29:9F:B2:28:73:A0:1A:01:0D:E1:C8:2F:BE:4D:06:11:19:B9:48:14:DD:30:1D:AB:50:CB:76:78" + }, + { + "build": "release", + "cert_fingerprint_sha256": "F0:FD:6C:5B:41:0F:25:CB:25:C3:B5:33:46:C8:97:2F:AE:30:F8:EE:74:11:DF:91:04:80:AD:6B:2D:60:DB:83" + }, + { + "build": "release", + "cert_fingerprint_sha256": "19:75:B2:F1:71:77:BC:89:A5:DF:F3:1F:9E:64:A6:CA:E2:81:A5:3D:C1:D1:D5:9B:1D:14:7F:E1:C8:2A:FA:00" + } + ] + } + }, + { + "type": "android", + "info": { + "package_name": "com.yandex.browser", + "signatures": [ + { + "build": "release", + "cert_fingerprint_sha256": "AC:A4:05:DE:D8:B2:5C:B2:E8:C6:DA:69:42:5D:2B:43:07:D0:87:C1:27:6F:C0:6A:D5:94:27:31:CC:C5:1D:BA" + } + ] + } + }, + { + "type": "android", + "info": { + "package_name": "com.yandex.browser.beta", + "signatures": [ + { + "build": "release", + "cert_fingerprint_sha256": "AC:A4:05:DE:D8:B2:5C:B2:E8:C6:DA:69:42:5D:2B:43:07:D0:87:C1:27:6F:C0:6A:D5:94:27:31:CC:C5:1D:BA" + } + ] + } + }, + { + "type": "android", + "info": { + "package_name": "com.yandex.browser.alpha", + "signatures": [ + { + "build": "release", + "cert_fingerprint_sha256": "AC:A4:05:DE:D8:B2:5C:B2:E8:C6:DA:69:42:5D:2B:43:07:D0:87:C1:27:6F:C0:6A:D5:94:27:31:CC:C5:1D:BA" + } + ] + } + }, + { + "type": "android", + "info": { + "package_name": "com.yandex.browser.corp", + "signatures": [ + { + "build": "release", + "cert_fingerprint_sha256": "AC:A4:05:DE:D8:B2:5C:B2:E8:C6:DA:69:42:5D:2B:43:07:D0:87:C1:27:6F:C0:6A:D5:94:27:31:CC:C5:1D:BA" + } + ] + } + }, + { + "type": "android", + "info": { + "package_name": "com.yandex.browser.canary", + "signatures": [ + { + "build": "release", + "cert_fingerprint_sha256": "1D:A9:CB:AE:2D:CC:C6:A5:8D:6C:94:7B:E9:4C:DB:B7:33:D6:5D:A4:D1:77:0F:A1:4A:53:64:CB:4A:28:EB:49" + } + ] + } + }, + { + "type": "android", + "info": { + "package_name": "com.yandex.browser.broteam", + "signatures": [ + { + "build": "release", + "cert_fingerprint_sha256": "1D:A9:CB:AE:2D:CC:C6:A5:8D:6C:94:7B:E9:4C:DB:B7:33:D6:5D:A4:D1:77:0F:A1:4A:53:64:CB:4A:28:EB:49" + } + ] + } + } + ] +} \ No newline at end of file diff --git a/common/src/commonMain/resources/MR/files/justdeleteme.json b/common/src/commonMain/resources/MR/files/justdeleteme.json new file mode 100644 index 00000000..3341693d --- /dev/null +++ b/common/src/commonMain/resources/MR/files/justdeleteme.json @@ -0,0 +1,17845 @@ +[ + { + "name": "/e/", + "domains": [ + "doc.e.foundation", + "e.foundation", + "ecloud.global" + ], + "url": "https://doc.e.foundation/create-an-ecloud-account#how-can-i-delete-my-e-account-eemail", + "difficulty": "easy", + "notes": "Profile \u2b95 settings \u2b95 delete account \u2b95 confirm" + }, + { + "name": "000Webhost", + "domains": [ + "000webhost.com", + "000webhostapp.com" + ], + "url": "https://000webhost.com/members/profile", + "difficulty": "easy", + "notes": "Go to \"Profile \u2b95 Delete My Account\" and select why you are deleting your account." + }, + { + "name": "123RF", + "domains": [ + "123rf.com" + ], + "url": "https://www.123rf.com/support/support-answer.php?id=8817", + "difficulty": "hard", + "notes": "Account deletion requires contacting Customer Support.", + "email": "frsales@123rf.com", + "email_body": "I want my account to be deleted. My full name is XXXXXX and my user name is XXXXXX, I want my account to be deleted because of XXXXXX. I request and authorize you to remove my profile from 123rf.com and delete all my content with you. I wish to terminate the 123RF Contributor Agreement and agree to the Terms and Conditions as set in the Contributor Agreement for the termination process." + }, + { + "name": "16Personalities", + "domains": [ + "16personalities.com" + ], + "url": "https://www.16personalities.com/profile/preferences", + "difficulty": "easy", + "notes": "In your profile preferences, click in 'Delete Account' then confirm." + }, + { + "name": "1984 Hosting", + "domains": [ + "1984.hosting" + ], + "url": "https://1984.hosting/GDPR/", + "difficulty": "easy", + "notes": "If you are logged in, you can use the automated deletion process. If that doesn't work, you can contact their support to do it.", + "email": "gdpr@1984.is" + }, + { + "name": "1fichier", + "domains": [ + "1fichier.com" + ], + "url": "https://1fichier.com/contact.html", + "difficulty": "hard", + "notes": "Account deletion requires contacting Customer Support." + }, + { + "name": "1Password", + "domains": [ + "1password.com", + "blog.1password.com", + "my.1password.ca", + "my.1password.com", + "my.ent.1password.com", + "my.1password.eu", + "support.1password.com", + "start.1password.com" + ], + "url": "https://my.1password.com/profile", + "difficulty": "easy", + "notes": "Login to your account, go to profile, click 'Permanently Delete Account'. Confirm by entering 'I am sure' and click 'Delete Account'." + }, + { + "name": "1xBet", + "domains": [ + "1xbet.com" + ], + "url": "https://1xbet.com", + "difficulty": "hard", + "notes": "Account deletion requires contacting Customer Support.", + "email": "support@1xbet.com", + "email_subject": "Delete my account", + "email_body": "Please delete my account permanently because I don\u2019t want to use the 1xBet services any further. Thank you. Username: XXX Email: XXX" + }, + { + "name": "280daily", + "domains": [ + "280daily.com" + ], + "url": "https://280daily.com/settings/delete", + "difficulty": "easy", + "notes": "Enter your account password and click on 'DELETE ACCOUNT'." + }, + { + "name": "2K Games", + "domains": [ + "support.2k.com", + "2k.com" + ], + "url": "https://support.2k.com/hc/en-us/requests/new", + "difficulty": "hard", + "notes": "Go to the page linked, create a request about deleting your account, and customer support should delete it." + }, + { + "name": "3D Aim Trainer", + "domains": [ + "3daimtrainer.com" + ], + "url": "https://www.3daimtrainer.com/faq", + "difficulty": "hard", + "notes": "Email your username and e-mail used to create the account.", + "email": "shoot@3daimtrainer.com" + }, + { + "name": "4PDA", + "domains": [ + "4pda.ru", + "4pda.to" + ], + "url": "https://4pda.to/forum/index.php?act=findpost&pid=1930277&anchor=Spoil-1930277-33", + "difficulty": "impossible", + "notes": "It is not possible to delete your account. Even if the account is banned, it will still exist, but in the \u00abBanned\u00bb group." + }, + { + "name": "4shared", + "domains": [ + "4shared.com" + ], + "url": "https://www.4shared.com/web/account/settings#overview", + "difficulty": "easy" + }, + { + "name": "500px", + "domains": [ + "500px.com" + ], + "url": "https://500px.com/settings/deletion", + "difficulty": "easy", + "notes": "Visit the linked page, select 'Delete your account', then click 'Continue'. Choose a reason why you're deleting your account and click 'Continue to delete account'. Finally, confirm your password and click 'Delete account'." + }, + { + "name": "7digital", + "domains": [ + "7digital.com", + "help.7digital.com" + ], + "url": "https://help.7digital.com/hc/en-gb/requests/new", + "difficulty": "hard", + "notes": "Account deletion requires contacting Customer Support." + }, + { + "name": "7plus", + "domains": [ + "7plus.com.au", + "support.7plus.com.au" + ], + "url": "https://support.7plus.com.au/hc/en-au/requests/new", + "difficulty": "hard", + "notes": "Create a new request, select the 'Reason For Contact' as 'Account Related' and then under 'Please choose the issue' select 'Close 7plus account'. Supply the appropriate email and name, then send the request." + }, + { + "name": "8tracks", + "domains": [ + "8tracks.com" + ], + "url": "https://8tracks.com/privacy", + "difficulty": "easy", + "notes": "Login, go to your account settings and click the delete button. That's it." + }, + { + "name": "99designs", + "domains": [ + "99designs.com", + "support.99designs.com" + ], + "url": "https://support.99designs.com/hc/en-us/articles/204108919-How-do-I-delete-my-account-", + "difficulty": "hard", + "notes": "Have to contact them, they will only ask for confirmation" + }, + { + "name": "9anime", + "domains": [ + "9anime.to", + "9anime.id", + "9anime.cz", + "9anime.ws", + "9anime.me" + ], + "url": "https://9anime.to/user/delete", + "difficulty": "easy" + }, + { + "name": "9GAG", + "domains": [ + "9gag.com" + ], + "url": "https://9gag.com/member/delete", + "difficulty": "easy", + "notes": "Login to your account, go to parameters, click Delete my account. Confirm by clicking I want to delete my account. And again by clicking Delete my 9GAG account." + }, + { + "name": "A1Office", + "domains": [ + "a1office.co" + ], + "url": "https://a1office.co/support/", + "difficulty": "hard", + "notes": "Account deletion requires contacting Customer Support.", + "email": "connect@a1office.co" + }, + { + "name": "Abacashi", + "domains": [ + "abacashi.com" + ], + "url": "https://abacashi.com/contact", + "difficulty": "hard", + "notes": "Either use the contact form or e-mail them directly asking for the account to be deleted", + "email": "contato@abacashi.com" + }, + { + "name": "AbeBooks", + "domains": [ + "abebooks.com" + ], + "url": "https://www.abebooks.com/customer-support/", + "difficulty": "hard", + "notes": "Select 'Something else' and then 'Close my account' and fill out the e-mail form." + }, + { + "name": "Abload", + "domains": [ + "abload.de" + ], + "url": "https://abload.de/settings.php", + "difficulty": "easy" + }, + { + "name": "About you", + "domains": [ + "aboutyou.at", + "aboutyou.be", + "aboutyou.bg", + "aboutyou.ch", + "aboutyou.co.il", + "aboutyou.com", + "aboutyou.com.cy", + "aboutyou.cz", + "aboutyou.de", + "aboutyou.dk", + "aboutyou.ee", + "aboutyou.fi", + "aboutyou.fr", + "aboutyou.gr", + "aboutyou.he", + "aboutyou.hu", + "aboutyou.ie", + "aboutyou.it", + "aboutyou.lt", + "aboutyou.lv", + "aboutyou.nl", + "aboutyou.no", + "aboutyou.pl", + "aboutyou.pt", + "aboutyou.ro", + "aboutyou.se", + "aboutyou.si", + "aboutyou.sk", + "sa.aboutyou.com" + ], + "url": "https://www.aboutyou.it/h/il-mio-account/q-360014814179", + "difficulty": "hard", + "notes": "Account deletion requires contacting Customer Support.", + "email": "servizioclienti@aboutyou.it" + }, + { + "name": "About.me", + "domains": [ + "about.me" + ], + "url": "https://about.me/account", + "difficulty": "easy" + }, + { + "name": "Academia", + "domains": [ + "academia.edu" + ], + "url": "https://www.academia.edu/settings#account-removal", + "difficulty": "easy" + }, + { + "name": "Academic Torrents", + "domains": [ + "academictorrents.com" + ], + "url": "https://academictorrents.com", + "difficulty": "hard", + "notes": "Account deletion requires contacting Customer Support.", + "email": "contact@academictorrents.com", + "email_subject": "Account Deletion" + }, + { + "name": "Acasa", + "domains": [ + "splittable.co", + "helloacasa.com", + "app.heyacasa.com" + ], + "url": "https://app.heyacasa.com/register/edit", + "difficulty": "easy", + "notes": "In your account settings choose 'Remove my account' at the bottom." + }, + { + "name": "Acceptd", + "domains": [ + "getacceptd.com", + "app.getacceptd.com" + ], + "url": "https://app.getacceptd.com/account", + "difficulty": "medium", + "notes": "Visit the linked page, scroll to the bottom, and click 'Request Account Deletion'. You will be sent an email with a link to delete your account. Your request will be completed within 10 business days." + }, + { + "name": "Acciobooks", + "domains": [ + "acciobooks.com" + ], + "url": "https://acciobooks.com/users/settings/delete-account", + "difficulty": "easy", + "notes": "Just visit the linked page, login and confirm the deletion of your account" + }, + { + "name": "Acorns", + "domains": [ + "acorns.com", + "app.acorns.com" + ], + "url": "https://app.acorns.com/close-account", + "difficulty": "easy" + }, + { + "name": "Acronis", + "domains": [ + "acronis.com", + "account.acronis.com" + ], + "url": "https://account.acronis.com/#/profile/", + "difficulty": "easy" + }, + { + "name": "ActiveCampaign", + "domains": [ + "activehosted.com", + "ac.activehosted.com" + ], + "url": "https://ac.activehosted.com/f/2175", + "difficulty": "hard", + "notes": "For account deletion requests or requests to remove all account information, submit the [Data Subject Rights Request form](https://ac.activehosted.com/f/2175). When asked \"What would you like to initiate with us?\" choose the option I want to be forgotten, and want my personal data erased in ." + }, + { + "name": "Activision", + "domains": [ + "activision.com", + "s.activision.com", + "support.activision.com", + "callofduty.com", + "profile.callofduty.com" + ], + "url": "https://support.activision.com/privacy", + "difficulty": "hard", + "notes": "Must put in a request, via a ticket system, while logged in to the account (to verify the identity of the account owner).", + "email": "privacy@activision.com" + }, + { + "name": "Ada", + "domains": [ + "ada.com" + ], + "url": "https://ada.com/help/360000319269/", + "difficulty": "easy", + "notes": "Just click delete and all your account data is erased" + }, + { + "name": "Adafruit", + "domains": [ + "adafruit.com", + "accounts.adafruit.com" + ], + "url": "https://accounts.adafruit.com/users/security", + "difficulty": "easy", + "notes": "Just click delete and confirm." + }, + { + "name": "AddMeFast", + "domains": [ + "addmefast.com" + ], + "url": "https://addmefast.com/profile", + "difficulty": "medium", + "notes": "First delete your sites and your ads. Then go to the menu on the top right corner, click 'My Profile' then 'DELETE AddMeFast account' at the bottom of the page and confirm." + }, + { + "name": "addy.io", + "domains": [ + "addy.io", + "app.addy.io" + ], + "url": "https://app.addy.io/settings/account", + "difficulty": "easy", + "notes": "Click the 'Delete Account' tab. Enter your password and click 'Delete Account'. The usernames of deleted accounts cannot be reused." + }, + { + "name": "Adfly", + "domains": [ + "adf.ly", + "login.adf.ly" + ], + "url": "https://adf.ly/account/delete", + "difficulty": "easy", + "notes": "Press the button to delete your account, make sure you're logged in." + }, + { + "name": "AdFoc.us", + "domains": [ + "adfoc.us" + ], + "url": "https://adfoc.us/tickets/", + "difficulty": "hard", + "notes": "Account deletion requires contacting Customer Support.", + "email": "support@adfoc.us", + "email_subject": "Account Deletion Request", + "email_body": "Please delete my AdFoc.us account registered under this email address." + }, + { + "name": "AdGuard", + "domains": [ + "adguard.com", + "auth.adguard.com", + "my.adguard.com", + "adguard-vpn.com" + ], + "url": "https://my.adguard.com/en/account/settings", + "difficulty": "easy", + "notes": "On your account settings, scroll to the bottom and click 'Delete my Account'" + }, + { + "name": "Adobe", + "domains": [ + "adobe.com", + "account.adobe.com", + "auth.services.adobe.com", + "community.adobe.com", + "experienceleague.adobe.com", + "helpx.adobe.com" + ], + "url": "https://account.adobe.com/privacy/delete-account", + "difficulty": "easy" + }, + { + "name": "AdvCash", + "domains": [ + "advcash.com", + "wallet.advcash.com" + ], + "url": "https://wallet.advcash.com/pages/profile#", + "difficulty": "easy", + "notes": "Go to the profile page and click the button to delete account" + }, + { + "name": "Aeria Games", + "domains": [ + "aeriagames.com" + ], + "url": "https://www.aeriagames.com", + "difficulty": "easy", + "notes": "Login, go to your profile settings on the top right, then go to the 'Account' tab and click 'Delete my Account'" + }, + { + "name": "Agoda", + "domains": [ + "agoda.com" + ], + "url": "https://www.agoda.com/en-au/info/privacy.html", + "difficulty": "hard", + "notes": "Account deletion requires contacting Customer Support.", + "email": "privacy@agoda.com" + }, + { + "name": "AgoraDesk", + "domains": [ + "agoradesk.com" + ], + "url": "https://agoradesk.com/account/settings", + "difficulty": "easy", + "notes": "Go to account settings and click, scroll down and click 'Delete Account'" + }, + { + "name": "aiqfome", + "domains": [ + "aiqfome.com" + ], + "url": "https://aiqfome.com/", + "difficulty": "hard", + "notes": "Open a ticket on their chat requesting for your account to be deleted. They might reply first asking why, but will then proceed" + }, + { + "name": "Airbnb", + "domains": [ + "airbnb.ae", + "airbnb.at", + "airbnb.be", + "airbnb.ca", + "airbnb.cat", + "airbnb.ch", + "airbnb.cl", + "airbnb.co.cr", + "airbnb.co.id", + "airbnb.co.in", + "airbnb.co.kr", + "airbnb.co.nz", + "airbnb.co.uk", + "airbnb.co.ve", + "airbnb.com", + "airbnb.com.ar", + "airbnb.com.au", + "airbnb.com.bo", + "airbnb.com.br", + "airbnb.com.bz", + "airbnb.com.co", + "airbnb.com.ec", + "airbnb.com.gt", + "airbnb.com.hk", + "airbnb.com.hn", + "airbnb.com.mt", + "airbnb.com.my", + "airbnb.com.ni", + "airbnb.com.pa", + "airbnb.com.pe", + "airbnb.com.py", + "airbnb.com.sg", + "airbnb.com.sv", + "airbnb.com.tr", + "airbnb.com.tw", + "airbnb.cz", + "airbnb.de", + "airbnb.dk", + "airbnb.es", + "airbnb.fi", + "airbnb.fr", + "airbnb.gr", + "airbnb.gy", + "airbnb.hu", + "airbnb.ie", + "airbnb.is", + "airbnb.it", + "airbnb.jp", + "airbnb.mx", + "airbnb.nl", + "airbnb.no", + "airbnb.pl", + "airbnb.pt", + "airbnb.ru", + "airbnb.se" + ], + "url": "https://www.airbnb.com/privacy/manage-your-data", + "difficulty": "medium", + "notes": "On the linked page, click the 'Request to delete your account' button. Complete the form, then click 'Delete account'. You may receive a follow-up email to verify your identity." + }, + { + "name": "Airdroid", + "domains": [ + "airdroid.com" + ], + "url": "https://www.airdroid.com/en/deleteAccount.html", + "difficulty": "easy", + "notes": "Go to the Account Info page, Click the Delete Account button to delete your AirDroid account." + }, + { + "name": "AirMeet", + "domains": [ + "airmeet.com", + "help.airmeet.com" + ], + "url": "https://help.airmeet.com/support/solutions/articles/82000443799-how-to-delete-airmeet-community-account-", + "difficulty": "hard", + "notes": "Click the purple question mark button and then request account deletion via the Airmeet Chat Support. Alternatively, you can email support@airmeet.com.", + "email": "support@airmeet.com" + }, + { + "name": "Airmiles", + "domains": [ + "airmiles.ca" + ], + "url": "https://www.airmiles.ca/en/get-help.html#contact-us", + "difficulty": "hard", + "notes": "Launch live chat through 'Chat' button and request account deletion or by phone at 1-888-AIR-MILES (247-6453)." + }, + { + "name": "AirVPN", + "domains": [ + "airvpn.org", + "airvpn.dev" + ], + "url": "https://airvpn.org/contact/", + "difficulty": "hard", + "notes": "Visit the linked form and submit a support ticket requesting account deletion. Make sure you are logged in so they can find your account, or specify your username in your message. Alternatively, you may also send an email.", + "email": "support@airvpn.org" + }, + { + "name": "AKAI Professional", + "domains": [ + "akaipro.com" + ], + "url": "https://www.akaipro.com/privacy-policy", + "difficulty": "hard", + "notes": "Account deletion requires contacting Customer Support.", + "email": "privacy@inmusicbrands.com" + }, + { + "name": "Akinator", + "domains": [ + "akinator.com", + "ar.akinator.com", + "cn.akinator.com", + "de.akinator.com", + "en.akinator.com", + "es.akinator.com", + "fr.akinator.com", + "id.akinator.com", + "il.akinator.com", + "it.akinator.com", + "jp.akinator.com", + "kr.akinator.com", + "nl.akinator.com", + "pl.akinator.com", + "pt.akinator.com", + "ru.akinator.com", + "tr.akinator.com", + "akinator.mobi", + "ar.akinator.mobi", + "cn.akinator.mobi", + "de.akinator.mobi", + "en.akinator.mobi", + "es.akinator.mobi", + "fr.akinator.mobi", + "id.akinator.mobi", + "il.akinator.mobi", + "it.akinator.mobi", + "jp.akinator.mobi", + "kr.akinator.mobi", + "nl.akinator.mobi", + "pl.akinator.mobi", + "pt.akinator.mobi", + "ru.akinator.mobi", + "tr.akinator.mobi" + ], + "url": "https://akinator.com", + "difficulty": "easy", + "notes": "At the app, click on settings (gear icon) \u2b95 Account settings \u2b95 Delete account (at the bottom of the screen)." + }, + { + "name": "Albion Online", + "domains": [ + "albiononline.com" + ], + "url": "https://albiononline.com/en/profile/support", + "difficulty": "hard", + "notes": "You need to open a support ticket in order to delete your account." + }, + { + "name": "Alchemy", + "domains": [ + "alchemy.com" + ], + "url": "https://www.alchemy.com/", + "difficulty": "hard", + "notes": "Account deletion requires contacting Customer Support.", + "email": "support@alchemy.com" + }, + { + "name": "ALDO", + "domains": [ + "aldoshoes.com" + ], + "url": "https://www.aldoshoes.com/us/en_US/legal/privacy-policy", + "difficulty": "hard", + "notes": "Account deletion requires contacting Customer Support.", + "email": "dpo@aldogroup.com" + }, + { + "name": "Algolia", + "domains": [ + "algolia.com" + ], + "url": "https://www.algolia.com/account/details", + "difficulty": "easy", + "notes": "Go to your account settings, scroll to the bottom of Account Details, and select the Delete button next to \"Delete Account\"." + }, + { + "name": "Algor Education", + "domains": [ + "algoreducation.com", + "app.algoreducation.com", + "community.algoreducation.com", + "en.algoreducation.com", + "es.algoreducation.com", + "de.algoreducation.com", + "fr.algoreducation.com" + ], + "url": "https://en.algoreducation.com/contact-us", + "difficulty": "hard", + "notes": "Account deletion requires contacting Customer Support.", + "email": "support@algoreducation.com" + }, + { + "name": "Alibaba", + "domains": [ + "alibaba.com", + "accounts.alibaba.com" + ], + "url": "https://accounts.alibaba.com/user/organization/manage_person_profile.htm", + "difficulty": "easy", + "notes": "To delete your account, go to \"My Account\" page, click on \"Member Profile\" and then, \"Deactivate Account\"" + }, + { + "name": "AlienwareArena", + "domains": [ + "alienwarearena.com" + ], + "url": "https://www.alienwarearena.com/faq-contact#Contact1", + "difficulty": "hard", + "notes": "Account deletion requires contacting Customer Support.", + "email": "contact@alienwarearena.com" + }, + { + "name": "AliExpress", + "domains": [ + "aliexpress.com", + "privacy.aliexpress.com" + ], + "url": "https://privacy.aliexpress.com/home#/request/delete", + "difficulty": "easy", + "notes": "Visit the linked page and click the red 'Delete my account' button. Type \"agree\" in the provided text box, then click 'Delete'." + }, + { + "name": "AliPay", + "domains": [ + "alipay.com" + ], + "url": "https://memberprod.alipay.com/account/close/apply.htm", + "difficulty": "easy", + "notes": "From the app: Settings \u2b95 Account and Security \u2b95 Account Cancel." + }, + { + "name": "All 4 / Channel 4", + "domains": [ + "4id.channel4.com" + ], + "url": "https://4id.channel4.com/account#!/close", + "difficulty": "easy" + }, + { + "name": "AllDebrid", + "domains": [ + "alldebrid.com" + ], + "url": "https://alldebrid.com/account/#accountDelete", + "difficulty": "easy", + "notes": "Login to your account, then open the URL. You should see the option 'Delete my account'. Enter your username for confirmation and use the deletion link sent to your email to delete your account." + }, + { + "name": "Alvanista", + "domains": [ + "alvanista.com" + ], + "url": "https://alvanista.com/profile/edit", + "difficulty": "easy", + "notes": "Follow the link to edit your profile and click cancel account at bottom." + }, + { + "name": "Amara", + "domains": [ + "amara.org" + ], + "url": "https://amara.org/profiles/account/", + "difficulty": "easy", + "notes": "Just head to the account page and click the red button 'Delete your account' at the bottom left of the page." + }, + { + "name": "Amazon / Audible", + "domains": [ + "audible.ca", + "audible.co.jp", + "audible.co.uk", + "audible.com", + "audible.com.au", + "audible.de", + "audible.es", + "audible.fr", + "audible.in", + "audible.it", + "amazon.ae", + "amazon.ca", + "amazon.cn", + "amazon.co.jp", + "amazon.co.uk", + "amazon.com", + "amazon.com.au", + "amazon.com.br", + "amazon.com.mx", + "amazon.com.sg", + "amazon.com.tr", + "amazon.de", + "amazon.es", + "amazon.fr", + "amazon.in", + "amazon.it", + "amazon.nl", + "music.amazon.com" + ], + "url": "https://www.amazon.com/privacy/data-deletion", + "difficulty": "easy", + "notes": "Scroll down, select a reason, tick the checkbox, click on \"Close My Account\" and follow the link in the confirmation e-mail." + }, + { + "name": "Amazon AWS", + "domains": [ + "aws.amazon.com", + "console.aws.amazon.com" + ], + "url": "https://console.aws.amazon.com/billing/home#/account", + "difficulty": "medium", + "notes": "You will not be able to reuse the email address on the account at the time of closure, but they appear to accept disposable email addresses. However, for accounts created prior to May 2017, there is also an Amazon Marketplace account with the same email. See the entry for Amazon to delete that account." + }, + { + "name": "AMD Rewards", + "domains": [ + "amdrewards.com" + ], + "url": "https://www.amdrewards.com/my-account", + "difficulty": "impossible", + "notes": "You can not delete your account, only disable it, At the bottom of the page there is a 'Deactivate your account' \u2b95 Enter password \u2b95 Deactivate account" + }, + { + "name": "AmiAmi", + "domains": [ + "amiami.com" + ], + "url": "https://support.amiami.com/hc/en-us/requests/new", + "difficulty": "hard", + "notes": "Account deletion requires contacting Customer Support." + }, + { + "name": "Anaconda Nucleus", + "domains": [ + "anaconda.cloud" + ], + "url": "https://anaconda.cloud/profile/privacy-security", + "difficulty": "easy", + "notes": "Go to the 'Delete my Data' section, click the 'Delete Data' button and confirm." + }, + { + "name": "Ancestry", + "domains": [ + "ancestry.com" + ], + "url": "https://www.ancestry.com/account/data/user/delete", + "difficulty": "easy" + }, + { + "name": "Andaman7", + "domains": [ + "andaman7.com" + ], + "url": "https://www.andaman7.com/", + "difficulty": "hard", + "notes": "Contact customer service via the app and ask for account to be deleted." + }, + { + "name": "Android File Host (AFH)", + "domains": [ + "androidfilehost.com" + ], + "url": "https://androidfilehost.com/?w=contact", + "difficulty": "hard", + "notes": "Contact the customer support using the contact form and request the deletion of your account." + }, + { + "name": "Angelist", + "domains": [ + "angel.co" + ], + "url": "https://angel.co/settings", + "difficulty": "easy", + "notes": "Click delete account once logged in." + }, + { + "name": "Anghami", + "domains": [ + "anghami.com", + "support.anghami.com" + ], + "url": "https://support.anghami.com/hc/en-us/articles/224890447-How-do-I-delete-deactivate-my-account-", + "difficulty": "medium", + "notes": "If you can delete the account through the app, follow the process provided in the link. If you are using the web client you'll have to contact support@anghami.com. Your account will be deactivated within 24 hours and deleted after 30 days.", + "email": "support@anghami.com", + "email_subject": "Account Deletion Request" + }, + { + "name": "AniList", + "domains": [ + "anilist.co" + ], + "url": "https://anilist.co/settings/account", + "difficulty": "easy", + "notes": "Go to \"Delete User Account \u2b95 OK, Delete my account\"." + }, + { + "name": "Animal Crossing Community", + "domains": [ + "animalcrossingcommunity.com" + ], + "url": "http://www.animalcrossingcommunity.com/help_main.asp?HelpSectionID=5#Topic201", + "difficulty": "impossible", + "notes": "We do not 'delete' or 'terminate' accounts on ACC. If you no longer wish to use the site, you may delete all personal information from your profile and then stop logging in." + }, + { + "name": "Anime-Planet", + "domains": [ + "anime-planet.com" + ], + "url": "https://www.anime-planet.com/users/delete_account.php", + "difficulty": "easy", + "notes": "Visit the linked page and click 'YES, DELETE MY ACCOUNT FOREVER'." + }, + { + "name": "Animoto", + "domains": [ + "animoto.com" + ], + "url": "https://animoto.com/account", + "difficulty": "easy", + "notes": "Open the link and click Delete Account" + }, + { + "name": "Ankama", + "domains": [ + "ankama.com", + "support.ankama.com" + ], + "url": "https://support.ankama.com/hc/en-us/requests/new?ticket_form_id=625847", + "difficulty": "hard", + "notes": "Account deletion requires contacting Customer Support." + }, + { + "name": "AnkiApp", + "domains": [ + "ankiapp.com" + ], + "url": "https://www.ankiapp.com", + "difficulty": "easy", + "notes": "Log in to your account and click 'Delete Account'. Confirm by entering your password and click 'OK'. You cannot delete your account via web.ankiapp.com - please visit join.ankiapp.com instead." + }, + { + "name": "AnkiWeb", + "domains": [ + "ankiweb.net", + "apps.ankiweb.net", + "faqs.ankiweb.net", + "help.ankiweb.net" + ], + "url": "https://ankiweb.net/account/remove-account", + "difficulty": "easy", + "notes": "Visit the linked page, log in to your account, confirm your password and click \"Remove Account\"." + }, + { + "name": "Anti-Captcha", + "domains": [ + "anti-captcha.com" + ], + "url": "https://anti-captcha.com/clients/settings/killme", + "difficulty": "easy", + "notes": "Confirm account deletion, then input the code you'll receive by email." + }, + { + "name": "Any.do", + "domains": [ + "any.do", + "support.any.do" + ], + "url": "https://support.any.do/account-and-profile/", + "difficulty": "medium", + "notes": "You can only delete your account via the mobile app: install the app, log in, click Profile, click Delete Account." + }, + { + "name": "AOL / Instant Messenger", + "domains": [ + "aol.com", + "cancel.aol.com" + ], + "url": "https://cancel.aol.com", + "difficulty": "easy" + }, + { + "name": "Aparat", + "domains": [ + "aparat.com" + ], + "url": "https://www.aparat.com/dashboard/profile/unsubscribe", + "difficulty": "easy", + "notes": "To unsubscribe, click the Cancel membership button." + }, + { + "name": "Apex Minecraft Hosting", + "domains": [ + "apexminecrafthosting.com", + "billing.apexminecrafthosting.com" + ], + "url": "https://billing.apexminecrafthosting.com/submitticket.php", + "difficulty": "hard", + "notes": "You need to log into your billing panel and send a ticket regarding the account deletion. If you only have a multicraft account, you can send a ticket without logging in." + }, + { + "name": "Apiary", + "domains": [ + "apiary.io" + ], + "url": "https://apiary.io/", + "difficulty": "hard", + "notes": "Create a placeholder API, then delete all of your existing APIs. After that, send a request to terminate your account to the support email.", + "email": "support@apiary.io" + }, + { + "name": "APKPure", + "domains": [ + "apkpure.com" + ], + "url": "https://apkpure.com/account/destroy", + "difficulty": "easy", + "notes": "Visit the linked page, provide a reason for deletion, then submit the form. Your account will be deleted within 48 hours." + }, + { + "name": "Apoia.se", + "domains": [ + "apoia.se", + "suporte.apoia.se" + ], + "url": "https://suporte.apoia.se/hc/pt-br/articles/4408681019547-Como-encerrar-meu-cadastro-", + "difficulty": "hard", + "notes": "The exclusion will occur 7 (seven) days after filling the Google Docs form." + }, + { + "name": "AppJobber", + "domains": [ + "appjobber.com" + ], + "url": "https://appjobber.com/profile/delete_account", + "difficulty": "easy", + "notes": "Go to the profile page, click the button to delete the account at the top right and confirm. Alternatively you can send and e-mail asking for the deletion.", + "email": "datenschutz@appjobber.de" + }, + { + "name": "Apple ID / iTunes", + "domains": [ + "apple.com", + "appleid.apple.com", + "developer.apple.com", + "support.apple.com", + "icloud.com" + ], + "url": "https://support.apple.com/en-us/HT208504", + "difficulty": "easy", + "notes": "Follow the steps to request account deletion. It is possible to undo for a few days. If you have bought a developer license, it's impossible to delete your account." + }, + { + "name": "AppShopper", + "domains": [ + "appshopper.com" + ], + "url": "https://appshopper.com/about#contact-form", + "difficulty": "hard", + "notes": "Account deletion requires contacting Customer Support.", + "email": "support@appshopper.com" + }, + { + "name": "Appypie", + "domains": [ + "appypie.com", + "accounts.appypie.com" + ], + "url": "https://accounts.appypie.com/privacy", + "difficulty": "easy", + "notes": "Under Privacy Settings click on 'Delete / Deactivate Account' then click on 'Delete Account' and confirm and specify a reason." + }, + { + "name": "Aquaillumination", + "domains": [ + "aquaillumination.com" + ], + "url": "https://www.aquaillumination.com/", + "difficulty": "impossible", + "notes": "Customer service is unable to delete accounts." + }, + { + "name": "ara.cat", + "domains": [ + "ara.cat" + ], + "url": "https://www.ara.cat/", + "difficulty": "hard", + "notes": "Account deletion requires contacting Customer Support.", + "email": "home@ara.cat", + "email_subject": "Delete ARA account", + "email_body": "Please delete my ARA account which was registered under the e-mail:" + }, + { + "name": "Arc Games", + "domains": [ + "arcgames.com", + "support.arcgames.com" + ], + "url": "https://support.arcgames.com/hc/en-us/requests/new", + "difficulty": "hard", + "notes": "Account deletion requires contacting Customer Support.", + "email": "privacy@gearboxsf.com" + }, + { + "name": "Archipad", + "domains": [ + "archipad.com", + "cloud.archipad.com" + ], + "url": "https://cloud.archipad.com/", + "difficulty": "easy", + "notes": "Click on your e-mail on the top right. Click on 'Profile'. Scroll down to find the delete account button in red. Enter password to complete deletion." + }, + { + "name": "Arduino", + "domains": [ + "arduino.cc", + "id.arduino.cc" + ], + "url": "https://id.arduino.cc/", + "difficulty": "medium", + "notes": "Visit the linked page and under 'Account Settings', click the link next to 'If you wish to delete your Arduino account'. You will be sent an email with a link to delete your account." + }, + { + "name": "Arlo", + "domains": [ + "arlo.com", + "my.arlo.com" + ], + "url": "https://my.arlo.com/#/settings/privacy/delete-account", + "difficulty": "medium", + "notes": "Visit the linked page and click 'Permanently Delete Arlo Account'. Click 'Continue'. Click 'Reset and remove all devices'. Click 'Continue'. Click 'Delete All Content'. Click 'Continue'. Enter your email address and password associated with the account then click 'Permanently Delete Arlo Account'" + }, + { + "name": "ArmorGames", + "domains": [ + "armorgames.com" + ], + "url": "https://armorgames.com/settings/delete-account", + "difficulty": "easy" + }, + { + "name": "Ars Technica", + "domains": [ + "arstechnica.com" + ], + "url": "https://arstechnica.com/civis/", + "difficulty": "hard", + "notes": "You have to make a forum post about deleting your account and eventually the admins will delete your account, although your comment and post history stays on the website" + }, + { + "name": "Artsy", + "domains": [ + "artsy.net" + ], + "url": "https://www.artsy.net/user/delete", + "difficulty": "easy" + }, + { + "name": "Asda", + "domains": [ + "asda.com", + "asda.co.uk" + ], + "url": "https://www.asda.com/privacy/contact-us", + "difficulty": "hard", + "notes": "Account deletion requires contacting Customer Support.", + "email": "dataprotection@asda.co.uk" + }, + { + "name": "Asgardia.space", + "domains": [ + "asgardia.space" + ], + "url": "https://asgardia.space", + "difficulty": "impossible", + "notes": "You have to send an e-mail and request for account deletion, which might take up to 10 days. By some accounts, the site administrators will not follow up on deletion requests, leading to no follow-up.", + "email": "support@asgardia.space" + }, + { + "name": "Ashampoo", + "domains": [ + "ashampoo.com" + ], + "url": "https://www.ashampoo.com/en/usd/ppy", + "difficulty": "hard", + "notes": "Request deletion by emailing privacy team. Ask them to close your account and send them your name and email address. You\u2019ll receive a mail back from them with a personal removal link in it", + "email": "privacy@ashampoo.com" + }, + { + "name": "Ask.fm", + "domains": [ + "ask.fm" + ], + "url": "https://ask.fm/account/settings/optout", + "difficulty": "easy" + }, + { + "name": "Asos", + "domains": [ + "asos.com" + ], + "url": "https://www.asos.com/customer-care/technical/id-like-to-close-my-account-with-asos-what-should-i-do/", + "difficulty": "hard", + "notes": "If not using the app, needs to request deletion from customer services. Theoretically on the app there are options to delete account described in the FAQ." + }, + { + "name": "Assembla", + "domains": [ + "assembla.com" + ], + "url": "https://www.assembla.com/user/edit/edit_account_settings", + "difficulty": "easy" + }, + { + "name": "ASUS WebStorage", + "domains": [ + "asuswebstorage.com", + "service.asuswebstorage.com" + ], + "url": "https://service.asuswebstorage.com/contactus/", + "difficulty": "hard", + "notes": "Select \"Account related\" as the problem category and \"Request account deletion\" as the problem item." + }, + { + "name": "Atavi", + "domains": [ + "atavi.com" + ], + "url": "http://atavi.com/user/remove", + "difficulty": "easy" + }, + { + "name": "AtCoder", + "domains": [ + "atcoder.jp" + ], + "url": "https://atcoder.jp/quit", + "difficulty": "easy" + }, + { + "name": "Aternos", + "domains": [ + "aternos.gmbh", + "aternos.org" + ], + "url": "https://aternos.org/close/", + "difficulty": "easy" + }, + { + "name": "Athletic Greens", + "domains": [ + "drinkag1.com" + ], + "url": "https://ag-privacy.relyance.ai/?mockData=false", + "difficulty": "medium", + "notes": "Deleting account does not cancel subscription, so do that first. Requires submitting name, address, and phone number to start deletion." + }, + { + "name": "The Atlantic", + "domains": [ + "accounts.theatlantic.com", + "theatlantic.com", + "support.theatlantic.com" + ], + "url": "https://support.theatlantic.com/hc/en-us/requests/new", + "difficulty": "limited", + "notes": "Depending on where you live you either need to select \"Submit an EEA Data Request\" or \"Submit a CCPA Data Request\"." + }, + { + "name": "Atlassian / Bitbucket", + "domains": [ + "atlassian.com", + "community.atlassian.com", + "confluence.atlassian.com", + "id.atlassian.com", + "my.atlassian.com", + "start.atlassian.com", + "support.atlassian.com", + "bitbucket.org" + ], + "url": "https://id.atlassian.com/manage/close-account", + "difficulty": "medium", + "notes": "You need to visit my.atlassian.com and designate a different user as a billing and technical contact if your account is the primary billing contact for one or more products" + }, + { + "name": "Audiomack", + "domains": [ + "audiomack.com" + ], + "url": "https://audiomack.com/dashboard#delete-account", + "difficulty": "easy", + "notes": "Click the delete account link in the bottom left corner" + }, + { + "name": "Auth0", + "domains": [ + "auth0.com" + ], + "url": "https://community.auth0.com/t/how-can-i-delete-my-auth0-auth0-community-forum-account/34689", + "difficulty": "hard", + "notes": "Delete all tenants on the Auth0 dashboard then send a private message to a support moment on the forums." + }, + { + "name": "Authy", + "domains": [ + "authy.com" + ], + "url": "https://authy.com/account/delete/", + "difficulty": "medium", + "notes": "Fill out the form, verify your phone number and e-mail. Data will be permanently deleted after 30 days." + }, + { + "name": "Autodesk", + "domains": [ + "autodesk.com", + "accounts.autodesk.com" + ], + "url": "https://accounts.autodesk.com/Profile/Security", + "difficulty": "medium", + "notes": "Go to the bottom of the page, click the button 'Account Deletion' and confirm on 'Delete your Autodesk account and data'. Enter your password, then enter a 6-digit code that will be sent to your email and click 'Delete Account'. You can recover the account within 30 days of deleting it. The deletion is completed in 90 days." + }, + { + "name": "AutoScout24", + "domains": [ + "autoscout24.com", + "autoscout24.at", + "autoscout24.be", + "autoscout24.es", + "autoscout24.de", + "autoscout24.fr", + "autoscout24.it", + "autoscout24.lu", + "autoscout24.nl", + "autoscout24.bg", + "autoscout24.cz", + "autoscout24.eu", + "autoscout24.hr", + "autoscout24.ro", + "autoscout24.se", + "autoscout24.com.tr", + "autoscout24.com.ua", + "autoscout24.net" + ], + "url": "https://accounts.autoscout24.com/Delete", + "difficulty": "easy" + }, + { + "name": "AV Club", + "domains": [ + "avclub.com" + ], + "url": "https://notice.sp-prod.net/sar/index.html?message_id=539278&account_id=1195&ccpa_type=delete", + "difficulty": "hard", + "notes": "Fill out the form using the email address of your account and click on the verification link that is sent." + }, + { + "name": "Avast!", + "domains": [ + "avast.com", + "id.avast.com", + "profile.avast.com", + "support.avast.com" + ], + "url": "https://profile.avast.com/", + "difficulty": "easy", + "notes": "At the bottom of the linked page, click the 'Delete Account' button." + }, + { + "name": "AVEN", + "domains": [ + "asexuality.org" + ], + "url": "https://www.asexuality.org/en/topic/68514-deleting-account/", + "difficulty": "hard", + "notes": "Sign in and post a request in the deletion thread, a moderator will contact you and tell you the details." + }, + { + "name": "AVG", + "domains": [ + "avg.com", + "profile.avg.com" + ], + "url": "https://profile.avg.com/", + "difficulty": "easy", + "notes": "Click on 'Delete Account' at the bottom of the page, then 'Continue Deleting' and enter your password to delete account." + }, + { + "name": "Avira", + "domains": [ + "avira.com", + "support.avira.com" + ], + "url": "https://support.avira.com/hc/en-us/articles/360000753557--How-can-I-delete-my-Avira-account", + "difficulty": "easy", + "notes": "Follow the instructions provided in the article. If you prefer, you can also request deletion of your account via email.", + "email": "support@avira.com" + }, + { + "name": "Avito", + "domains": [ + "avito.ru" + ], + "url": "https://www.avito.ru/registration/remove", + "difficulty": "easy", + "notes": "Enter any reason to delete" + }, + { + "name": "AwardWallet", + "domains": [ + "awardwallet.com" + ], + "url": "https://awardwallet.com/user/delete", + "difficulty": "easy", + "notes": "You must enter your password and supply a reason for deleting your account" + }, + { + "name": "Axios", + "domains": [ + "axios.com" + ], + "url": "https://www.axios.com/legal", + "difficulty": "limited", + "notes": "According to their Privacy Policy, if you are a California or Virginia resident, you can email Axios about account deletion and they should delete your account and data.", + "email": "privacy@axios.com" + }, + { + "name": "AXS", + "domains": [ + "axs.com", + "support.axs.com" + ], + "url": "https://support.axs.com/hc/en-gb/articles/360017655079-Can-you-delete-my-data-", + "difficulty": "hard", + "notes": "Fill out the form requesting data deletion and then go to your e-mail to confirm the request. It takes a couple weeks for them to process the request." + }, + { + "name": "AZMVDNOW", + "domains": [ + "azmvdnow.gov" + ], + "url": "https://azmvdnow.gov/customers/useraccount/disable", + "difficulty": "impossible", + "notes": "Account will not be deleted, just disabled. If you want that, click \u2018Disable Account\u2019 button. Check \u2018Yes, I wish to disable my AZ MVD Now account.\u2019. Click \u2018Disable Account\u2019" + }, + { + "name": "B&H", + "domains": [ + "bhphotovideo.com" + ], + "url": "https://www.bhphotovideo.com/find/HelpCenter/PrivacySecurity.jsp", + "difficulty": "hard", + "notes": "Must send an email or call 800-947-9915.", + "email": "privacy@bhphoto.com", + "email_subject": "Account Deletion Request", + "email_body": "Please delete my B&H account." + }, + { + "name": "Babbel", + "domains": [ + "babbel.com", + "home.babbel.com" + ], + "url": "https://home.babbel.com/user-profile/settings", + "difficulty": "medium", + "notes": "Scroll down and press delete. A confirmation box will show up. You will have to go click the link in the email they send to you to permanently delete your Babbel account." + }, + { + "name": "Baby Names", + "domains": [ + "babynames.com" + ], + "url": "https://babynames.com/user/close.php", + "difficulty": "easy", + "notes": "Visit the linked page, select a reason why you're deleting your account, then click 'Agreed - Close My Account'." + }, + { + "name": "BabyCenter", + "domains": [ + "babycenter.com" + ], + "url": "https://dsar.babycenter.com/", + "difficulty": "hard", + "notes": "If you are protected under the GDPR or CCPA, complete the linked form. Otherwise, you must send an email.", + "email": "privacy_babycenter@everydayhealth.com" + }, + { + "name": "Backblaze", + "domains": [ + "backblaze.com", + "secure.backblaze.com" + ], + "url": "https://secure.backblaze.com/account_settings.htm", + "difficulty": "medium", + "notes": "Click on delete account and follow the required steps. You must have no outstanding B2 balance and will have to delete most files and settings in your account first." + }, + { + "name": "Badoo", + "domains": [ + "badoo.com" + ], + "url": "https://badoo.com/settings/", + "difficulty": "easy", + "notes": "On the top right corner click 'Settings', then on the left hand side click 'Delete'. Type your information, to delete Badoo, enter your password and in the other box, explain why you want to leave. Click on the 'Confirm' button, you will receive a message page confirming your rquest was successfully completed." + }, + { + "name": "Baidu", + "domains": [ + "baidu.com" + ], + "url": "https://passport.baidu.com/v6/cancelAccount", + "difficulty": "medium" + }, + { + "name": "Balance", + "domains": [ + "balanceapp.com" + ], + "url": "https://balanceapp.com/balance-privacy", + "difficulty": "hard", + "notes": "Send an email to their Privacy address. Within 24 hours, a support representative should respond to your request and ask for confirmation. Once they receive and respond to your request confirmation, your login credentials should no longer work.", + "email": "privacy@balanceapp.com", + "email_subject": "Account Information Deletion Request" + }, + { + "name": "Bambuser", + "domains": [ + "bambuser.com" + ], + "url": "https://bambuser.com", + "difficulty": "easy", + "notes": "Go to your Settings page and scroll down to find 'Deactivate' account. Click on 'Close Account' button, and confirm the account deletion." + }, + { + "name": "Bandcamp", + "domains": [ + "bandcamp.com" + ], + "url": "https://bandcamp.com/settings?pane=fan", + "difficulty": "easy", + "notes": "To terminate an artist account, you must click on the 'Artists' pane, click on the desired artist's profile, and click the termination link there." + }, + { + "name": "Barnes & Noble", + "domains": [ + "barnesandnoble.com" + ], + "url": "https://www.barnesandnoble.com/account/manage/settings/", + "difficulty": "medium", + "notes": "Visit the linked page, scroll to the bottom to 'Data Rights Request' and click on 'Submit a Request'. Complete and submit the form." + }, + { + "name": "Basecamp", + "domains": [ + "basecamp.com", + "basecamp-help.com" + ], + "url": "https://3.basecamp-help.com/article/156-cancel-your-basecamp-account", + "difficulty": "easy", + "notes": "Data will be permanantly deleted after 30 days." + }, + { + "name": "Basin", + "domains": [ + "usebasin.com" + ], + "url": "https://usebasin.com/users/edit", + "difficulty": "easy", + "notes": "Scroll down to the bottom of the page and click the 'Completely obliterate all my data' button" + }, + { + "name": "Bato.to", + "domains": [ + "bato.to" + ], + "url": "https://bato.to/account/deletion", + "difficulty": "easy", + "notes": "Go to the linked site and click \"Delete account\". Remember that you won't be able to reuse e-mail associated with this account, and all uploaded chapters and comments will not be deleted." + }, + { + "name": "Battle.net / Blizzard", + "domains": [ + "eu.battle.net", + "battle.net", + "blizzard.com" + ], + "url": "https://eu.battle.net/support/en/article/2659", + "difficulty": "medium", + "notes": "Requests may take up to 30 days to complete and may require to submit a government-issued photo ID." + }, + { + "name": "BBC", + "domains": [ + "bbc.com", + "account.bbc.com", + "bbc.co.uk" + ], + "url": "https://account.bbc.com/account/settings/delete", + "difficulty": "easy", + "notes": "Same account also covers BBC iPlayer and BBC Sounds." + }, + { + "name": "Be Welcome", + "domains": [ + "bewelcome.org" + ], + "url": "https://www.bewelcome.org/deleteprofile", + "difficulty": "easy", + "notes": "There's a 'Remove profile' option on the side menu at the 'Edit my profile' page. You can even select an option to have your data deleted within 24 hours." + }, + { + "name": "BeamNG", + "domains": [ + "beamng.com", + "support.beamng.com" + ], + "url": "https://support.beamng.com/", + "difficulty": "hard", + "notes": "You need to contact support on the linked page to request account deletion." + }, + { + "name": "Bearblog", + "domains": [ + "bearblog.dev" + ], + "url": "https://bearblog.dev/accounts/delete/", + "difficulty": "easy", + "notes": "Follow the link and confirm account deletion." + }, + { + "name": "Beatport", + "domains": [ + "beatport.com", + "support.beatport.com" + ], + "url": "https://support.beatport.com/hc/en-us/articles/4412533928596-How-can-I-close-my-account-", + "difficulty": "hard", + "notes": "Account deletion requires contacting Customer Support.", + "email": "support@beatport.com" + }, + { + "name": "Behance", + "domains": [ + "behance.net", + "help.behance.net" + ], + "url": "https://help.behance.net/hc/en-us/articles/204484854-How-do-I-delete-cancel-my-account-", + "difficulty": "easy", + "notes": "To delete your account, please click on your avatar in the top right navigation, visit Account Settings, and hit the 'Delete Account' tab. There, you'll have the option to delete." + }, + { + "name": "BeMyEye", + "domains": [ + "bemyeye.com", + "pro.bemyeye.com", + "bemyeye.zendesk.com" + ], + "url": "https://bemyeye.zendesk.com/hc/en-us/articles/360009596613-How-do-I-delete-my-account-", + "difficulty": "hard", + "notes": "Contact the customer support via email and request to delete your account. You can only completely delete your account if you have not performed missions or have not made any money using the BeMyEye app, otherwise they will only deactivate it.", + "email": "support@bemyeye.com" + }, + { + "name": "BeReal", + "domains": [ + "bere.al", + "bereal.com", + "help.bereal.com" + ], + "url": "https://help.bereal.com/hc/articles/7531255012381", + "difficulty": "easy", + "notes": "The exact steps vary by device. Account will be deleted after 15 days." + }, + { + "name": "Best Buy", + "domains": [ + "bestbuy.com" + ], + "url": "https://www.bestbuy.com/sentry/confirm/residency?context=ca&type=delete", + "difficulty": "hard", + "notes": "Process will be much smoother if you sign in. Alternatively, you can call 888-237-8289." + }, + { + "name": "Best Buy Canada", + "domains": [ + "bestbuy.ca", + "cloudpage.bestbuypromotions.ca" + ], + "url": "https://cloudpage.bestbuypromotions.ca/privacy-request", + "difficulty": "hard", + "notes": "Fill out the form with the information on your account." + }, + { + "name": "bet365", + "domains": [ + "https://www.bet365.com" + ], + "url": "https://help.bet365.com/contact", + "difficulty": "hard", + "notes": "To delete the account, contact customer service. It is recommended to do it via chat and ask to close the account, as there is no link to do so." + }, + { + "name": "Betano", + "domains": [ + "betano.com", + "betano.zendesk.com" + ], + "url": "https://betano.com/myaccount/profile/protection", + "difficulty": "easy", + "notes": "Access Account \u2b95 Profile \u2b95 Player Protection and select Self-exclusion option. You can choose remove your account for a derised time, or definitely." + }, + { + "name": "Bethesda", + "domains": [ + "bethesda.net", + "help.bethesda.net" + ], + "url": "https://help.bethesda.net/app/incident10/?prod=711&cat=1220", + "difficulty": "hard", + "notes": "To delete the account, login first on Bethesda.net, then click on the above link and select Bethesda as the product (note that the page takes a while to load), then select 'Delete Personal Information and Account' and fill out the form, this will send a prefilled support contact form for account deletion. You may also send an email to privacy@support.zenimax.com ", + "email": "privacy@support.zenimax.com" + }, + { + "name": "Betnacional", + "domains": [ + "betnacional.com" + ], + "url": "https://assets.bet6.com.br/sistemans/skins/betnacional/doc/5eef829d8f.pdf", + "difficulty": "hard", + "notes": "According to privacy policy (item 8), you have to send an e-mail to them requesting the account removal.", + "email": "contato@betnacional.com" + }, + { + "name": "Betterment", + "domains": [ + "betterment.com" + ], + "url": "https://www.betterment.com", + "difficulty": "impossible", + "notes": "Account can only be closed, but not trule deleted." + }, + { + "name": "BeyondMenu", + "domains": [ + "beyondmenu.com" + ], + "url": "https://www.beyondmenu.com/manageaccount.aspx", + "difficulty": "easy" + }, + { + "name": "Bidoo", + "domains": [ + "bidoo.com", + "it.bidoo.com" + ], + "url": "https://it.bidoo.com", + "difficulty": "hard", + "notes": "Click the assistance link on the website and fill in the contact form. A representative will mail you to confirm the account deletion." + }, + { + "name": "Bigstock", + "domains": [ + "bigstockphoto.com" + ], + "url": "https://support.bigstockphoto.com/s/article/How-do-I-close-my-Bigstock-contributor-account", + "difficulty": "hard", + "notes": "To delete your account, you must email them and request that your account be deleted.", + "email": "support@bigstockphoto.com" + }, + { + "name": "Bikemap", + "domains": [ + "bikemap.net", + "blog.bikemap.net", + "help.bikemap.net" + ], + "url": "https://www.bikemap.net/", + "difficulty": "easy", + "notes": "Login, click settings, click 'Delete Account', confirm." + }, + { + "name": "Bilibili", + "domains": [ + "bilibili.com" + ], + "url": "https://passport.bilibili.com/register/logout.html", + "difficulty": "medium" + }, + { + "name": "Binance", + "domains": [ + "binance.com" + ], + "url": "https://www.binance.com/fr/my/risk/delete-account-appeal", + "difficulty": "medium", + "notes": "First you have to empty your account from all cryptocurrencies, then click the link and enter your email." + }, + { + "name": "Bitdefender Central", + "domains": [ + "account.bitdefender.com", + "businessinsights.bitdefender.com", + "central.bitdefender.com" + ], + "url": "https://account.bitdefender.com/delete_account/info", + "difficulty": "medium", + "notes": "To delete your account, login, go to the 'My Account' page, click the 'Delete Account' link, click the 'Delete Account' button, and click the 'Send Email' button. A confirmation email will be sent to the account email. Click the 'Delete Account' link in the email sent to you, log into your account, and click the 'Delete Account' button." + }, + { + "name": "Bitfinex", + "domains": [ + "bitfinex.com", + "support.bitfinex.com" + ], + "url": "https://support.bitfinex.com/hc/en-us/articles/115002403694", + "difficulty": "medium", + "notes": "Visit the Account Settings page from the menu in the top right corner of the Bitfinex platform. Deactivate your Bitfinex account by changing your account status. Finally, confirm this via the confirmation email. This process is irreversible and your data will be retained for as long as needed to meet audit and regulatory purposes." + }, + { + "name": "Bitly", + "domains": [ + "bit.ly", + "bitly.com", + "app.bitly.com", + "dev.bitly.com", + "support.bitly.com" + ], + "url": "https://app.bitly.com/settings/profile/", + "difficulty": "easy", + "notes": "At the bottom of the linked page, click the red 'Delete Account' button. Select an option specifying why you want to leave Bitly, and confirm your action by typing \"DELETE ACCOUNT\", then click 'Delete Account' again." + }, + { + "name": "Bitstamp", + "domains": [ + "bitstamp.net" + ], + "url": "https://www.bitstamp.net/settings/deactivate/", + "difficulty": "easy", + "notes": "Process described on their [FAQ](https://www.bitstamp.net/faq/how-can-i-close-my-account/). You will need to enter your password to confirm the operation." + }, + { + "name": "Bittrex", + "domains": [ + "global.bittrex.com" + ], + "url": "https://bittrex.zendesk.com/hc/en-us/requests/new?ticket_form_id=114093958171", + "difficulty": "hard", + "notes": "The only way to delete an account is to send a customer support request, select 'Close account' and fill the form, you will then receive an email ironically asking you to create a Bittrex support account password so you can follow the status of your request." + }, + { + "name": "Bitwarden", + "domains": [ + "bitwarden.com", + "vault.bitwarden.com" + ], + "url": "https://bitwarden.com/help/article/delete-your-account", + "difficulty": "easy" + }, + { + "name": "Bkool", + "domains": [ + "bkool.com" + ], + "url": "https://support.bkool.com/hc/en-us/articles/360024682171-Privacy-policy", + "difficulty": "hard", + "notes": "To delete an account, the user must write to the following email address: dpo@bkool.com", + "email": "dpo@bkool.com" + }, + { + "name": "BlackBox", + "domains": [ + "blackbox.global" + ], + "url": "https://www.blackbox.global/contact", + "difficulty": "hard", + "notes": "You need to contact support to delete your account." + }, + { + "name": "BlackSpigot", + "domains": [ + "blackspigot.com" + ], + "url": "https://blackspigot.com/threads/delete-account.9291/", + "difficulty": "impossible", + "notes": "As noted on the forum, account removals are not an option." + }, + { + "name": "Bleep", + "domains": [ + "bleep.com" + ], + "url": "https://bleep.com/account/show", + "difficulty": "hard", + "notes": "Make sure you're logged in and go to the linked URL and click \"Delete Account\", this will show some text telling you to contact support. Click the \"Contact Support\" button and click the \"Contact Us\" button in the pop-up. Fill out the form and ask to delete your account." + }, + { + "name": "BlendSwap", + "domains": [ + "blendswap.com" + ], + "url": "https://blendswap.com/profile", + "difficulty": "easy", + "notes": "Go to your profile and press the 'delete account' button" + }, + { + "name": "Blind", + "domains": [ + "teamblind.com" + ], + "url": "https://www.teamblind.com/faqs", + "difficulty": "hard", + "email": "blindapp@teamblind.com" + }, + { + "name": "Blinkee", + "domains": [ + "blinkee.city" + ], + "url": "https://blinkee.city/en-pl/faq", + "difficulty": "hard", + "email": "contact.pl@blinkee.city" + }, + { + "name": "Blinkist", + "domains": [ + "blinkist.com" + ], + "url": "https://www.blinkist.com/nc/settings/account/", + "difficulty": "easy", + "notes": "Click 'I want to delete my account' at the bottom of the page." + }, + { + "name": "Blogger", + "domains": [ + "blogger.com" + ], + "url": "https://support.google.com/blogger/answer/41932", + "difficulty": "impossible", + "notes": "You can't delete your Blogger Account without deleting your entire Google Account. But you can delete your blog.\nIf you want to delete your entire google account, use the instructions for [Google](https://justdeleteme.xyz/#google)." + }, + { + "name": "Bloomingdales", + "domains": [ + "bloomingdales.com" + ], + "url": "https://customerservice-bloomingdales.com/articles/contact-us", + "difficulty": "hard", + "notes": "Only residents of California and Nevada are allowed to make official data removal requests. However, if you contact Customer Service via one of the methods listed, they may submit a 30-day account deletion request for you anyway." + }, + { + "name": "Blue Apron", + "domains": [ + "blueapron.com" + ], + "url": "https://www.blueapron.com/cancel_subscription", + "difficulty": "easy" + }, + { + "name": "Bluebird by American Express", + "domains": [ + "bluebird.com", + "secure.bluebird.com" + ], + "url": "https://secure.bluebird.com/manage/settings/ProfileSettings", + "difficulty": "medium", + "notes": "Remove all funds from your account. Then go to settings in your account, click on the profile tab, and click close account." + }, + { + "name": "Bluejeans", + "domains": [ + "bluejeans.com", + "support.bluejeans.com" + ], + "url": "https://support.bluejeans.com/s/contactsupport", + "difficulty": "hard", + "notes": "Contact support via the contact form and request deletion of your account." + }, + { + "name": "Board Game Arena", + "domains": [ + "boardgamearena.com" + ], + "url": "https://boardgamearena.com/preferences?section=account", + "difficulty": "easy", + "notes": "Log-in, go to your account settings and click 'Delete my BGA account'." + }, + { + "name": "Board Games Online", + "domains": [ + "boardgamesonline.net" + ], + "url": "https://boardgamesonline.net/", + "difficulty": "easy", + "notes": "Log-in \u2b95 My Profile \u2b95 Click Profile (Settings Icon) \u2b95 Click on Delete Profile. Account will be deleted in about one week." + }, + { + "name": "BoardGameGeek", + "domains": [ + "boardgamegeek.com" + ], + "url": "https://boardgamegeek.com/geekaccount.php?action=requestdeletion", + "difficulty": "easy", + "notes": "Log-in and use the link provided to request account deletion." + }, + { + "name": "bobatea", + "domains": [ + "git.boba.best" + ], + "url": "https://git.boba.best/user/settings/account", + "difficulty": "easy", + "notes": "Log-in, go to Settings \u2b95 Account then at the bottom you can delete your account." + }, + { + "name": "BodBot", + "domains": [ + "bodbot.com" + ], + "url": "https://www.bodbot.com/Account_Settings.html", + "difficulty": "easy", + "notes": "Click the 'Delete My Account' link." + }, + { + "name": "Bodybuilding", + "domains": [ + "bodybuilding.com" + ], + "url": "https://www.bodybuilding.com/help?account-inquiries&deactivate-account", + "difficulty": "impossible", + "notes": "You can only deactivate your account by contacting support as they state on the help page. There is no way to permanently delete your account or data, and an inactive public profile will always be visible to public.", + "email": "privacy@bodybuilding.com" + }, + { + "name": "Bohemia Interactive", + "domains": [ + "bohemia.net", + "support.bohemia.net" + ], + "url": "https://support.bohemia.net/", + "difficulty": "hard", + "notes": "Submit a support ticket to them at the URL and they will send you an email asking to confirm after which the account will be deleted." + }, + { + "name": "Boingo Wireless", + "domains": [ + "boingo.com" + ], + "url": "https://support.boingo.com/s/contactsupport", + "difficulty": "hard", + "notes": "Fill the form or send an e-mail to them from the account you want to delete.", + "email": "support@boingo.com" + }, + { + "name": "Bol.com", + "domains": [ + "bol.com" + ], + "url": "https://www.bol.com/nl/rnwy/account/privacy/delete", + "difficulty": "hard", + "notes": "Need to request deletion on a page within the account settings. After a few days you receive a link to confirm deletion. You need to be logged in to the account for the confirmation link to be working. Check after 30 days if the account is really removed, as it doesn't always work. If you can't figure it out complain by email, but this process takes even longer.", + "email": "dpo@aholddelhaize.com" + }, + { + "name": "Bolt", + "domains": [ + "bolt.eu" + ], + "url": "https://bolt.eu/en/support/articles/360000336273/", + "difficulty": "hard", + "notes": "You will need to contact support team via the app or request account deletion by sending an e-mail to the Data Protection Officer.", + "email": "privacy@bolt.eu" + }, + { + "name": "Bolt Driver", + "domains": [ + "bolt.eu" + ], + "url": "https://bolt.eu/en/support/articles/360000329553/", + "difficulty": "hard", + "notes": "You will need to contact support team via the app or request account deletion by sending an e-mail to the Data Protection Officer.", + "email": "privacy@bolt.eu" + }, + { + "name": "Bolt Food", + "domains": [ + "bolt.eu" + ], + "url": "https://bolt.eu/en/support/articles/360007153180/", + "difficulty": "hard", + "notes": "You will need to contact support team via the app or request account deletion by sending an e-mail to the Data Protection Officer.", + "email": "privacy@bolt.eu" + }, + { + "name": "Bones Coffee Company", + "domains": [ + "bonescoffee.com", + "bonescoffeecompany.com" + ], + "url": "https://www.bonescoffee.com/pages/contact-us", + "difficulty": "hard", + "notes": "You will need to contact support team via chat or email to request account deletion.", + "email": "Support@BonesCoffee.com " + }, + { + "name": "BookBub", + "domains": [ + "bookbub.com" + ], + "url": "https://www.bookbub.com/contact/new", + "difficulty": "hard", + "notes": "Fill out the contact form to request deletion." + }, + { + "name": "Booking", + "domains": [ + "booking.com", + "secure.booking.com" + ], + "url": "https://secure.booking.com/login.en-us.html?tmpl=profile/delete_account", + "difficulty": "easy" + }, + { + "name": "Booklooker", + "domains": [ + "booklooker.de", + "secure.booklooker.de" + ], + "url": "https://secure.booklooker.de/pages/contact.php", + "difficulty": "hard", + "notes": "You need to request deletion of your data via the contact form after logging in." + }, + { + "name": "Bookmark OS", + "domains": [ + "bookmarkos.com" + ], + "url": "https://bookmarkos.com/privacy_policy", + "difficulty": "hard", + "notes": "Send an email and request account deletion.", + "email": "dave@bookmarkos.com" + }, + { + "name": "Boostcamp", + "domains": [ + "boostcamp.app" + ], + "url": "https://www.boostcamp.app/data-deletion-request", + "difficulty": "easy", + "notes": "Visit the linked page and confirm the deletion." + }, + { + "name": "Boots Viewpoint", + "domains": [ + "bootsviewpoint.co.uk" + ], + "url": "https://www.bootsviewpoint.co.uk", + "difficulty": "hard", + "notes": "Have to contact them, email used was claire@bootsviewpoint.co.uk", + "email": "claire@bootsviewpoint.co.uk" + }, + { + "name": "BorgBase", + "domains": [ + "borgbase.com" + ], + "url": "https://www.borgbase.com/account?tab=5", + "difficulty": "easy", + "notes": "Remove all your backup repositories, then in the account tab click on profile and on the bottom of the page you'll find a button to remove your account." + }, + { + "name": "Bountysource", + "domains": [ + "bountysource.com" + ], + "url": "https://github.com/bountysource/core/issues/409", + "difficulty": "hard", + "notes": "Only possible via e-mail, where they'll (eventually) delete the account.", + "email": "support@bountysource.com" + }, + { + "name": "Box", + "domains": [ + "box.com" + ], + "url": "https://app.box.com/account", + "difficulty": "easy" + }, + { + "name": "Boxcryptor", + "domains": [ + "boxcryptor.com" + ], + "url": "https://www.boxcryptor.com/app/account/delete-account/", + "difficulty": "easy" + }, + { + "name": "Braiins", + "domains": [ + "braiins.com", + "pool.braiins.com", + "insights.braiins.com" + ], + "url": "https://help.braiins.com/en/support/solutions/articles/77000434063-how-can-i-delete-my-account-", + "difficulty": "easy", + "notes": "Go to the menu on the top right corner, click 'Account', scroll down and click 'Request Account Deletion'." + }, + { + "name": "Brain.fm", + "domains": [ + "brain.fm" + ], + "url": "https://www.brain.fm/privacy", + "difficulty": "hard", + "notes": "Send an email to their Privacy support address to request account deletion. After a brief exchange with a support representative to confirm your intention, there will be a several-day delay while they process your request, after which your login credentials will stop working.", + "email": "privacy@brain.fm", + "email_subject": "Account Deletion Request" + }, + { + "name": "Brilliant", + "domains": [ + "brilliant.org" + ], + "url": "https://brilliant.org/account/settings/deactivate/", + "difficulty": "easy" + }, + { + "name": "Bring!", + "domains": [ + "getbring.com" + ], + "url": "https://go.getbring.com/?link=https%3A%2F%2Fdeeplink.getbring.com%2Fview%2Fdeleteaccount&apn=ch.publisheria.bring&isi=580669177&ibi=ch.publisheria.bring", + "difficulty": "medium", + "notes": "Log in to the account you'd like to delete and click the link on the same device." + }, + { + "name": "British Airways", + "domains": [ + "britishairways.com" + ], + "url": "https://naprepin.custhelp.com/app/answers/detail/a_id/770/~/cancelling-your-executive-club-membership", + "difficulty": "hard", + "notes": "Must send a request in writing. See [this page](https://www.britishairways.com/travel/contact-executive-club/execclub/_gf/en_us) for contact details." + }, + { + "name": "BrowserStack", + "domains": [ + "browserstack.com" + ], + "url": "https://www.browserstack.com/accounts/profile", + "difficulty": "easy", + "notes": "Scroll down and click on the \"Delete Account\" button, then enter 'delete' into the dialog and confirm." + }, + { + "name": "Brut", + "domains": [ + "brut.media" + ], + "url": "https://www.brut.media/us/terms", + "difficulty": "hard", + "notes": "Contact the customer support via email and request the deletion of your account.", + "email": "support-web@brut.media" + }, + { + "name": "BrutX", + "domains": [ + "brutx.com", + "help.brutx.com" + ], + "url": "https://help.brutx.com/hc/fr/articles/360020090299", + "difficulty": "hard", + "notes": "Contact the customer support via email and request the deletion of your account.", + "email": "bonjour@brutx.com" + }, + { + "name": "Buffer", + "domains": [ + "bufferapp.com" + ], + "url": "https://bufferapp.com/app/account/leave", + "difficulty": "easy" + }, + { + "name": "Buildspace", + "domains": [ + "buildspace.so" + ], + "url": "https://buildspace.so", + "difficulty": "hard", + "notes": "Email support@buildspace.so requesting to delete your account.", + "email": "support@buildspace.so", + "email_subject": "Account Delection Request" + }, + { + "name": "Bukalapak", + "domains": [ + "bukalapak.com" + ], + "url": "https://www.bukalapak.com", + "difficulty": "medium", + "notes": "Open Akun (Account)>BukaBantuan (Open Help)>In Akun & Info Personal (Account & Personal Info), tap Selanjutnya (Next)>Tap Menonaktifkan Akun (Disable Account)>Tap Isi Form Bantuan (Type on Help Form)>Explain the reason why you delete it>Tap Kirim (Send)." + }, + { + "name": "Bukkit", + "domains": [ + "bukkit.org" + ], + "url": "https://bukkit.org", + "difficulty": "impossible", + "notes": "Message an [administrator](https://bukkit.org/XenStaff/') ([timtower](https://bukkit.org/members/timtower.87695/) is the most active) and tell them you want your account deleted, and they will tell you it will be done when it's possible.
So deletion of an account is not an option." + }, + { + "name": "Bungie.net", + "domains": [ + "bungie.net", + "help.bungie.net" + ], + "url": "https://help.bungie.net/hc/requests/new", + "difficulty": "hard", + "notes": "Send an email or fill out either the \"GDPR Request\" or \"Right to Know or Delete\" form.", + "email": "privacyrequests@bungie.com" + }, + { + "name": "BurstNET", + "domains": [ + "burst.net" + ], + "url": "http://burst.net", + "difficulty": "impossible", + "notes": "Support staff refuses to delete accounts due to 'accounting purposes'" + }, + { + "name": "Busuu", + "domains": [ + "busuu.com" + ], + "url": "https://www.busuu.com/dashboard#/settings/account", + "difficulty": "easy", + "notes": "Click the 'Delete my account' button at the bottom of the page, then confirm you'd like to delete your account" + }, + { + "name": "Buy Me a Coffee", + "domains": [ + "buymeacoffee.com" + ], + "url": "https://www.buymeacoffee.com/terms", + "difficulty": "hard", + "notes": "Account deletion requires contacting Customer Support.", + "email": "support@buymeacoffee.com" + }, + { + "name": "Buycott", + "domains": [ + "buycott.com" + ], + "url": "https://www.buycott.com", + "difficulty": "hard", + "notes": "To cancel your account you have to send them an email", + "email": "info@buycott.com" + }, + { + "name": "Buycraft", + "domains": [ + "tebex.io", + "server.tebex.io" + ], + "url": "https://server.tebex.io", + "difficulty": "hard", + "notes": "Buycraft was moved to Tebex, contact customer support to request account deletion" + }, + { + "name": "ByDoor", + "domains": [ + "bydoor.com", + "portal.bydoor.com" + ], + "url": "https://portal.bydoor.com/meusdados", + "difficulty": "impossible", + "notes": "Login, head to your account details, scroll to the bottom and click to deactivate your account. The text states it will remove all of your data, but after confirming on the e-mail, it's just deactivated and can be reactivated later." + }, + { + "name": "C&M News by R\u0435ss.at", + "domains": [ + "ress.at" + ], + "url": "https://ress.at/profil/profil_entfernen.php", + "difficulty": "easy", + "notes": "Just click 'Abschicken'" + }, + { + "name": "CA Cert", + "domains": [ + "cacert.org", + "wiki.cacert.org" + ], + "url": "http://wiki.cacert.org/FAQ/AccountRemoval", + "difficulty": "hard", + "notes": "Support have to be emailed with a request and it may be months before the account is deleted, depending on circumstance.", + "email": "support@cacert.org" + }, + { + "name": "Cabify", + "domains": [ + "cabify.com" + ], + "url": "https://cabify.com", + "difficulty": "hard", + "notes": "Login and go to Contact us \u2b95 My Account, payment method, and invoices \u2b95 I want to delete my account. Write a message and it will create a ticket." + }, + { + "name": "Cacoo", + "domains": [ + "cacoo.com" + ], + "url": "https://cacoo.com/unsubscribe", + "difficulty": "easy" + }, + { + "name": "CafePress", + "domains": [ + "cafepress.com" + ], + "url": "https://www.cafepress.com/account/close-account", + "difficulty": "hard", + "notes": "Visit the linked page and close your account, then contact customer service and ask to have your personal information deleted." + }, + { + "name": "CakeReader", + "domains": [ + "cakereader.com" + ], + "url": "https://cakereader.com/", + "difficulty": "impossible" + }, + { + "name": "Call of Duty Mobile", + "domains": [ + "activision.com", + "s.activision.com", + "support.activision.com", + "callofduty.com", + "profile.callofduty.com" + ], + "url": "https://support.activision.com/privacy", + "difficulty": "hard", + "notes": "Must put in a request, via a ticket system, while logged in to the account (to verify the identity of the account owner). You may also need to install and log into the game to get PlayerID/UID/PrivacyID needed for account deletion.", + "email": "privacy@activision.com" + }, + { + "name": "CamelCamelCamel", + "domains": [ + "camelcamelcamel.com" + ], + "url": "https://camelcamelcamel.com/close_account", + "difficulty": "easy", + "notes": "Login to your account first. Confirm by ticking both boxes, 'I want to close my Camel account.' and 'I\u2019m really sure!', and click 'Close Account'." + }, + { + "name": "Canva", + "domains": [ + "canva.com" + ], + "url": "https://www.canva.com/settings/login-and-security", + "difficulty": "easy", + "notes": "At the bottom of the page click on the button that says 'Delete account.' There will be a 14 day waiting period, after this period, all your account data will be deleted." + }, + { + "name": "Capsule", + "domains": [ + "capsule.com" + ], + "url": "https://www.capsule.com/privacy", + "difficulty": "hard", + "notes": "Contact support by email or by phone at 1-888-910-1808 and request that your account be deleted. Your request can be denied if you still have an active service or transaction with them.", + "email": "privacy@capsule.com" + }, + { + "name": "Captain.tv", + "domains": [ + "captain.tv", + "playnitro.com", + "streampirates.com", + "streamraiders.com", + "chatplayschess.com" + ], + "url": "https://streamcaptain.zendesk.com/hc/en-us/requests/new", + "difficulty": "hard", + "notes": "Send a request using the 'Account Deletion' type" + }, + { + "name": "Car2Go", + "domains": [ + "car2go.com", + "drive-now.com", + "share-now.com" + ], + "url": "https://www.car2go.com/US/en/contact", + "difficulty": "hard", + "notes": "You need to call customer support and even after that can take weeks before confirmation of deletion" + }, + { + "name": "Carbonmade", + "domains": [ + "carbonmade.app", + "carbonmade.com" + ], + "url": "https://carbonmade.app/account", + "difficulty": "easy", + "notes": "When logged in, use the link to be taken to the deletion page." + }, + { + "name": "CareerBuilder.com", + "domains": [ + "careerbuilder.com" + ], + "url": "https://www.careerbuilder.com/User/UserConfirmation.aspx", + "difficulty": "easy", + "notes": "Must remove uploaded files first" + }, + { + "name": "Carrd.co", + "domains": [ + "carrd.co" + ], + "url": "https://carrd.co/dashboard/account/delete", + "difficulty": "easy", + "notes": "Just enter password and confirm deletion!" + }, + { + "name": "Cash'em All", + "domains": [ + "cashemall.online" + ], + "url": "https://cashemall.online/legal/v1/privacy/online.cashemall.app", + "difficulty": "medium", + "notes": "Go to settings in the profile page, then click \"Cancel Membership\" and confirm the email. You can also request the deletion via email.", + "email": "contact@cashemall.online" + }, + { + "name": "Cash'em All Web", + "domains": [ + "cashem-all.com" + ], + "url": "https://cashem-all.com/profile", + "difficulty": "medium", + "notes": "Go to settings in the profile page, then click \"Delete account\" and confirm the email. You can also request the deletion via email.", + "email": "contact@appstation.online" + }, + { + "name": "Castbox", + "domains": [ + "castbox.fm", + "helpcenter.castbox.fm" + ], + "url": "https://helpcenter.castbox.fm/portal/en/kb/articles/delete-account", + "difficulty": "hard", + "notes": "You must request account deletion by email. Include what method you use to sign in (Google, Twitter or Facebook, etc.) and your email address. If you have their Android app, visit the linked page for instructions on how to delete your account yourself.", + "email": "contact@castbox.fm", + "email_body": "Please delete my account. I use XXX to sign in. My email address is XXX." + }, + { + "name": "Catawiki", + "domains": [ + "catawiki.com" + ], + "url": "https://www.catawiki.com/en/accounts/pre_delete_account", + "difficulty": "medium", + "notes": "Go to the profile icon in the top right corner and click \"Settings\", scroll down and click \"Continue\" under \"Delete my account\", and \"Confirm\". Then confirm the deletion from your email." + }, + { + "name": "CBC", + "domains": [ + "cbchelp.cbc.ca", + "cbc.ca" + ], + "url": "https://cbchelp.cbc.ca/hc/en-ca/requests/new", + "difficulty": "hard", + "notes": "Go to the link and make a request about deleting your account. Account deletion can take up to 30 days." + }, + { + "name": "CCMA (TV3 i CatR\u00e0dio)", + "domains": [ + "ccma.cat", + "registreusuari.ccma.cat" + ], + "url": "https://registreusuari.ccma.cat/usuaris/baixa", + "difficulty": "easy" + }, + { + "name": "cda", + "domains": [ + "cda.pl" + ], + "url": "https://www.cda.pl/kontakt", + "difficulty": "hard", + "notes": "You need to contact with support" + }, + { + "name": "CDEK Forward", + "domains": [ + "cdek-usa.com", + "cdekforward.com", + "global.cdek.ru" + ], + "url": "https://global.cdek.ru", + "difficulty": "hard", + "notes": "Account deletion requires contacting Customer Support.", + "email": "mf@cdek.ru", + "email_subject": "\u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\u0430", + "email_body": "\u0417\u0434\u0440\u0430\u0432\u0441\u0442\u0432\u0443\u0439\u0442\u0435. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u0443\u0434\u0430\u043b\u0438\u0442\u0435 \u043c\u043e\u0439 \u0430\u043a\u043a\u0430\u0443\u043d\u0442 \u043d\u0430 CDEK Forward." + }, + { + "name": "CDKeys", + "domains": [ + "cdkeys.com" + ], + "url": "https://www.cdkeys.com/user/profile/", + "difficulty": "easy", + "notes": "Use the delete account button at the bottom of the page" + }, + { + "name": "CDON.COM", + "domains": [ + "cdon.se", + "cdon.dk", + "cdon.no", + "cdon.fi", + "cdon.eu", + "help.cdon.com" + ], + "url": "https://help.cdon.com/hc/sv/articles/360022459751-Hur-tar-jag-bort-mitt-konto-", + "difficulty": "hard", + "notes": "Contact customer service via the support e-mail form and request deletion of your account under General Questions." + }, + { + "name": "Celcoin", + "domains": [ + "celcoin.com.br", + "suportecelcoin.zendesk.com" + ], + "url": "https://celcoin.com.br", + "difficulty": "hard", + "notes": "Contact the customer support via email and request the deletion of your account. In order for them to identify your account, include your full name and Tax ID in your request.", + "email": "contato@celcoin.com.br" + }, + { + "name": "Cengage", + "domains": [ + "cengage.com" + ], + "url": "https://cengage.force.com/s/", + "difficulty": "hard", + "notes": "Contact support over the phone or via live chat. Your case will need to be escalated to close the account, and it may take a few days. Otherwise, the account will automatically be deleted after 5 years of inactivity." + }, + { + "name": "CEX.IO", + "domains": [ + "cex.io" + ], + "url": "https://support.cex.io/", + "difficulty": "hard", + "notes": "You can't delete your account without contacting them. You must set the subject to 'Delete Account'", + "email": "support@cex.io", + "email_subject": "Delete Account" + }, + { + "name": "cgtrader", + "domains": [ + "cgtrader.com", + "help.cgtrader.com" + ], + "url": "https://help.cgtrader.com/hc/en-us/articles/4402420280081-How-can-I-delete-my-account-", + "difficulty": "hard", + "notes": "Request account removal by sending an email to them requesting for account deletion. Personal data will be stored for 2 years after your last login", + "email": "support@cgtrader.com" + }, + { + "name": "Challonge", + "domains": [ + "challonge.com" + ], + "url": "https://challonge.com/settings/delete_account", + "difficulty": "easy" + }, + { + "name": "Change.org", + "domains": [ + "change.org", + "help.change.org" + ], + "url": "https://www.change.org/policies/privacy", + "difficulty": "hard", + "notes": "Send an email from the address you registered with asking to have your account deleted. You will need to answer to some questions about your account.", + "email": "help@change.org" + }, + { + "name": "ChangeIP", + "domains": [ + "changeip.com" + ], + "url": "https://www.changeip.com/tos.php#:~:text=Account%20Cancellation", + "difficulty": "hard", + "notes": "All requests for canceling accounts must be made via email or by opening a support ticket from the client area. It may take up to 7 days to be processed. You must have all account information to cancel.", + "email": "support@changeip.com" + }, + { + "name": "changelly", + "domains": [ + "changelly.com" + ], + "url": "https://changelly.com/profile", + "difficulty": "easy", + "notes": "Click on 'Delete account' under 'Email settings'" + }, + { + "name": "character.ai", + "domains": [ + "character.ai", + "book.character.ai", + "beta.character.ai" + ], + "url": "https://beta.character.ai/settings/", + "difficulty": "easy", + "notes": "Scroll to the bottom of the settings page on your profile and click \u201dRemove Account\u201c, then insert your username and choose whether you want to export your data while deleting it or not." + }, + { + "name": "ChatForma", + "domains": [ + "chatforma.com" + ], + "url": "https://www.chatforma.com/", + "difficulty": "impossible" + }, + { + "name": "Cheap Ass Gamer", + "domains": [ + "cheapassgamer.com" + ], + "url": "https://www.cheapassgamer.com/index.php?app=core&module=help&do=01&HID=15", + "difficulty": "hard", + "notes": "Please email cheapyd@cheapassgamer.com from your account on file with CAG.", + "email": "cheapyd@cheapassgamer.com" + }, + { + "name": "Checklist", + "domains": [ + "checklist.com", + "api.checklist.com", + "app2.checklist.com" + ], + "url": "https://api.checklist.com/account/account", + "difficulty": "easy", + "notes": "Log in and go to your account. Scroll to 'Close your account' and click on 'Close Account'. Confirm by clicking on 'Yes' in the pop-up window. The account will be deleted immediately." + }, + { + "name": "Checksub", + "domains": [ + "checksub.com" + ], + "url": "https://www.checksub.com", + "difficulty": "hard", + "notes": "Contact the customer support to delete your account.", + "email": "team@checksub.com" + }, + { + "name": "Chegg", + "domains": [ + "chegg.com" + ], + "url": "https://www.chegg.com/contactus", + "difficulty": "hard", + "notes": "To close your account, contact support with the email listed, call/message (408)-351-0942, or request assistance via their twitter [@CheggHelp](https://twitter.com/chegghelp). For data deletion, click [here](https://privacyportal-cdn.onetrust.com/dsarwebform/a21a74f4-2f93-44a2-a887-302a9213c997/06b040b7-49eb-464a-b19a-ea35c85c79fc.html).", + "email": "closemyaccount@chegg.com" + }, + { + "name": "Chess.com", + "domains": [ + "chess.com" + ], + "url": "https://www.chess.com/my-data", + "difficulty": "medium", + "notes": "Enter your email, do the CAPTCHA and click \"Show my data\". Scroll to the bottom, enter your username, and click \"Delete\". Any comments and public posts must be deleted individually before deleting your account." + }, + { + "name": "Chick-fil-A", + "domains": [ + "chick-fil-a.com" + ], + "url": "https://privacyportal.onetrust.com/webform/63dc78c7-5612-4181-beae-47dead0569ee/01252c81-82df-4db5-9cb8-bf23a62a9a55", + "difficulty": "hard", + "notes": "Fill out the provided [privacy web form](https://privacyportal.onetrust.com/webform/63dc78c7-5612-4181-beae-47dead0569ee/01252c81-82df-4db5-9cb8-bf23a62a9a55), send an email to mailto:privacy@chick-fil-a.com, or call 1-866-232-2040." + }, + { + "name": "Cineplex", + "domains": [ + "cineplex.com" + ], + "url": "https://www.cineplex.com/Global/PrivacyPolicy", + "difficulty": "hard", + "email": "privacy@cineplex.com" + }, + { + "name": "CircleCI", + "domains": [ + "circleci.com", + "app.circleci.com" + ], + "url": "https://privacy.circleci.com", + "difficulty": "easy", + "notes": "Visit the linked page and click 'Make a Privacy Request', and then 'Delete all my data'. Enter your email address. You will receive an email; In that email, click 'Log in', and then 'Confirm Request'. More info [here](https://support.circleci.com/hc/en-us/articles/360037058873)." + }, + { + "name": "Cisco", + "domains": [ + "cisco.com", + "privacyrequest.cisco.com", + "netacad.com" + ], + "url": "https://privacyrequest.cisco.com/", + "difficulty": "hard", + "notes": "Fill in the fields on the form, confirm the request in your email and then wait for their privacy team to respond." + }, + { + "name": "Classmates", + "domains": [ + "classmates.com" + ], + "url": "https://secure.classmates.com/auth/removemember", + "difficulty": "easy", + "notes": "Provide a reason by selecting a radio button and select 'Remove Registration'." + }, + { + "name": "ClassPass", + "domains": [ + "classpass.com" + ], + "url": "https://classpass.com/settings/membership", + "difficulty": "impossible", + "notes": "You can deactivate your account from settings but not entirely delete the account itself." + }, + { + "name": "CleverReach", + "domains": [ + "cleverreach.com" + ], + "url": "https://www.cleverreach.com", + "difficulty": "hard", + "notes": "Email customer services to request deletion", + "email": "info@cleverreach.de" + }, + { + "name": "ClevGuard", + "domains": [ + "clevguard.com" + ], + "url": "https://www.clevguard.com/account-faq/", + "difficulty": "impossible", + "notes": "Site currently does not allow for accounts to be deleted." + }, + { + "name": "ClickUp", + "domains": [ + "clickup.com", + "app.clickup.com" + ], + "url": "https://app.clickup.com/settings/profile", + "difficulty": "easy", + "notes": "Scroll to the bottom of the page and click the \"Delete Account\" button." + }, + { + "name": "Clockify", + "domains": [ + "clockify.me", + "app.clockify.me" + ], + "url": "https://clockify.me/user/settings/delete", + "difficulty": "easy" + }, + { + "name": "Cloud Convert", + "domains": [ + "cloudconvert.com" + ], + "url": "https://cloudconvert.com/delete#", + "difficulty": "easy", + "notes": "Go to the dashboard \u2b95 account \u2b95 details, and fill your username and password. The acount is deleted after 72 hours." + }, + { + "name": "CloudApp", + "domains": [ + "cl.ly", + "getcloudapp.com", + "share.getcloudapp.com" + ], + "url": "https://share.getcloudapp.com/dashboard", + "difficulty": "easy", + "notes": "Visit the linked page. Click your name in the top right corner, then click 'Settings'. In the left column, select 'Account Details' and click the red 'Remove account' button." + }, + { + "name": "Cloudflare", + "domains": [ + "cloudflare.com", + "dash.cloudflare.com" + ], + "url": "https://dash.cloudflare.com/profile/delete-user", + "difficulty": "medium", + "notes": "You must have no domains, add-ons, payment methods or ongoing investigations attached to your account prior to account deletion." + }, + { + "name": "CloudMagic", + "domains": [ + "cloudmagic.com" + ], + "url": "https://cloudmagic.com/a/v2/preferences", + "difficulty": "easy" + }, + { + "name": "CNET Download", + "domains": [ + "cnet.com" + ], + "url": "https://cbsi.secure.force.com/CBSi/submitcase?template=template_cnet&referer=cnet.com&cfs=SFS_1", + "difficulty": "hard", + "notes": "You have to ask the support to get your account deleted. Choose the category CNET Registration" + }, + { + "name": "CNN", + "domains": [ + "cnn.com" + ], + "url": "https://www.cnn.com/account/settings", + "difficulty": "easy", + "notes": "Scroll down to the bottom of the page and click 'Delete Account'" + }, + { + "name": "Cocoleech", + "domains": [ + "cocoleech.com", + "members.cocoleech.com" + ], + "url": "https://members.cocoleech.com/settings", + "difficulty": "easy", + "notes": "Go to [your profile](https://members.cocoleech.com/settings) and press 'Delete Account'." + }, + { + "name": "Coda", + "domains": [ + "coda.io" + ], + "url": "https://coda.io/account", + "difficulty": "easy", + "notes": "Click \"Advanced Settings\" on the bottom of the page and the option to delete your account should appear" + }, + { + "name": "Code Red", + "domains": [ + "coderedweb.com", + "cne.coderedweb.com" + ], + "url": "https://cne.coderedweb.com", + "difficulty": "impossible", + "notes": "You can't delete yourself. You can only change your phone nr. to a bogus number." + }, + { + "name": "Codeanywhere", + "domains": [ + "codeanywhere.com" + ], + "url": "https://codeanywhere.com/dashboard", + "difficulty": "easy", + "notes": "Login then click Delete Account button and enter your password." + }, + { + "name": "Codeberg", + "domains": [ + "codeberg.org" + ], + "url": "https://codeberg.org/user/settings/account", + "difficulty": "easy", + "notes": "Log into your account, go to settings \u2b95 account and type in your password to delete your account." + }, + { + "name": "Codecademy", + "domains": [ + "codecademy.com" + ], + "url": "https://www.codecademy.com/account/delete_acct", + "difficulty": "easy", + "notes": "Simply click the \"I understand, delete my account.\" button." + }, + { + "name": "CodeChef", + "domains": [ + "codechef.com", + "discuss.codechef.com" + ], + "url": "https://discuss.codechef.com/t/how-do-i-delete-a-codechef-account/30476", + "difficulty": "easy", + "notes": "Navigate to the Privacy tab in your edit profile section. Scroll all the way down and click on \"I don\u2019t want to continue with CodeChef\". Alternatively login to codechef and visit \"https://www.codechef.com/users//discontinue\", after substituting in your username." + }, + { + "name": "Codeforces", + "domains": [ + "codeforces.com" + ], + "url": "https://codeforces.com/blog/entry/69245", + "difficulty": "impossible", + "notes": "You can't delete your account yet. The feature is being worked on and might become available in the future." + }, + { + "name": "CodePen", + "domains": [ + "codepen.io", + "blog.codepen.io" + ], + "url": "https://blog.codepen.io/documentation/faq/how-do-i-delete-my-account/", + "difficulty": "easy" + }, + { + "name": "CodeProject", + "domains": [ + "codeproject.com" + ], + "url": "https://www.codeproject.com/script/Membership/Modify.aspx", + "difficulty": "easy", + "notes": "Beneath the gravatar image, check the 'Close my account' checkbox. Then click on 'Save my Settings'." + }, + { + "name": "CoderByte", + "domains": [ + "coderbyte.com" + ], + "url": "https://coderbyte.com/privacy#:~:text=You%20may%20also%20delete%20your,detailed%20in%20this%20Privacy%20Policy.", + "difficulty": "hard", + "notes": "You can only delete your account by emailing their support team. Certain activity data may remain stored and may be shared with third parties.", + "email": "support@coderbyte.com" + }, + { + "name": "CodersRank", + "domains": [ + "codersrank.io", + "profile.codersrank.io" + ], + "url": "https://profile.codersrank.io/account", + "difficulty": "easy", + "notes": "Scroll down to the bottom of the \"Account settings\" page to the \"Danger Zone\" section and click on \"Delete your account\"" + }, + { + "name": "Coderwall", + "domains": [ + "coderwall.com" + ], + "url": "https://coderwall.com/delete_account", + "difficulty": "easy", + "notes": "Sign in then visit [https://coderwall.com/delete_account](https://coderwall.com/delete_account)" + }, + { + "name": "CodeSignal", + "domains": [ + "codesignal.com", + "app.codesignal.com" + ], + "url": "https://app.codesignal.com/account/username-password", + "difficulty": "easy", + "notes": "Sign in, visit the provided link and press delete profile" + }, + { + "name": "Codetasty", + "domains": [ + "codetasty.com" + ], + "url": "https://codetasty.com/settings/security", + "difficulty": "easy", + "notes": "Log in, press the url, press 'Deactivate Account' which will disable your account for some time and then permanently delete" + }, + { + "name": "Codewars", + "domains": [ + "codewars.com" + ], + "url": "https://www.codewars.com/users/edit", + "difficulty": "easy", + "notes": "Go to your 'Account Settings' and scroll to the bottom to find the 'Delete Account' section" + }, + { + "name": "Codingame", + "domains": [ + "codingame.com" + ], + "url": "https://www.codingame.com/settings", + "difficulty": "easy", + "notes": "Go to your 'Settings' and scroll to the bottom to find the 'Danger Zone' section. However, the source code one has published will be kept in the system with a GPLv3 license." + }, + { + "name": "Coin", + "domains": [ + "coinapp.co", + "support.coinapp.co" + ], + "url": "https://support.coinapp.co/hc/en-us/requests/new", + "difficulty": "hard", + "notes": "Contact them via ticketing system and ask for account to be deleted" + }, + { + "name": "Coinbase", + "domains": [ + "coinbase.com" + ], + "url": "https://www.coinbase.com/settings/privacy-rights", + "difficulty": "medium", + "notes": "Sign in then visit [their website](https://www.coinbase.com/settings/privacy-rights) and request the deletion of all of your data. You will then be directed to [their account activity page](https://www.coinbase.com/settings/account_activity) where you must close your account after withdrawing all funds." + }, + { + "name": "CoinBR/Stratum", + "domains": [ + "stratum.hk", + "coinbr.net", + "coinbr.io" + ], + "url": "https://stratum.hk/support", + "difficulty": "hard", + "notes": "Contact the customer support via email and request the deletion of your account. In order for them to identify your account, make the request through the same email address that you have used to create your CoinBR/Stratum account.", + "email": "support@stratum.hk", + "email_subject": "[ Permanently Account Deletion Request ]", + "email_body": "I have no further interest in using the services provided by Stratum, so I would like my account to be permanently deleted." + }, + { + "name": "CoinGecko", + "domains": [ + "coingecko.com", + "support.coingecko.com" + ], + "url": "https://support.coingecko.com/hc/en-us/articles/4537981325977-How-can-I-delete-my-account-", + "difficulty": "easy", + "notes": "You can delete your CoinGecko account directly from the website by clicking the 'Profile' icon \u2b95 'Login' and 'Security'. At the 'Login and Security' page, please click on 'Delete my account' to proceed with account deletion" + }, + { + "name": "CoinMarketCap", + "domains": [ + "coinmarketcap.com", + "support.coinmarketcap.com" + ], + "url": "https://support.coinmarketcap.com/hc/en-us/requests/new", + "difficulty": "hard", + "notes": "You must submit a support ticket and request your account to be deleted." + }, + { + "name": "CoinPayments", + "domains": [ + "coinpayments.net" + ], + "url": "https://www.coinpayments.net/help-support", + "difficulty": "impossible", + "notes": "According to their own policy, accounts can never be deleted." + }, + { + "name": "Cointree", + "domains": [ + "cointree.com" + ], + "url": "https://cointree.formstack.com/forms/account_closure_request", + "difficulty": "medium", + "notes": "Complete the form and wait for their support to delete the account." + }, + { + "name": "Collegeboard", + "domains": [ + "collegeboard.org", + "pages.collegeboard.org" + ], + "url": "https://pages.collegeboard.org/account-help/how-do-i-delete-my-account", + "difficulty": "impossible", + "notes": "You can't delete your College Board account, but you can close it by calling their customer service at 866-315-6068" + }, + { + "name": "Comment \u00e7a marche", + "domains": [ + "commentcamarche.net" + ], + "url": "https://auth.ccm.net/user/delete_account", + "difficulty": "easy", + "notes": "Your messages will remain on the forums." + }, + { + "name": "Commun", + "domains": [ + "commun.it" + ], + "url": "https://commun.it/content/cancel_account", + "difficulty": "easy" + }, + { + "name": "Conte.it", + "domains": [ + "conte.it" + ], + "url": "https://www.conte.it/privacy-unsubscribe/", + "difficulty": "easy", + "notes": "Fill out the form to request cancellation from Conte.it's insurance services." + }, + { + "name": "Cook It", + "domains": [ + "chefcookit.com" + ], + "url": "https://www.chefcookit.com/unsubscribe", + "difficulty": "impossible", + "notes": "It is only possible to permanently disable the automatic subscription fee. Doing so will also set your stars back to 0." + }, + { + "name": "Coolors", + "domains": [ + "coolors.co" + ], + "url": "https://coolors.co/account/delete", + "difficulty": "medium", + "notes": "Use the link provided to request account deletion. Enter your password, then you get an e-mail with a code. Enter this code in the next input field. If you created the account with a 'Social Login' you need to set a password first." + }, + { + "name": "Corellium", + "domains": [ + "corellium.com", + "app.corellium.com" + ], + "url": "https://app.corellium.com/admin/subscription", + "difficulty": "easy", + "notes": "Click the Delete Account button." + }, + { + "name": "Correl.app", + "domains": [ + "correl.app" + ], + "url": "https://correl.app/account/delete", + "difficulty": "easy" + }, + { + "name": "CoSpaces", + "domains": [ + "cospaces.io", + "edu.cospaces.io" + ], + "url": "https://edu.cospaces.io/Studio/Account", + "difficulty": "easy", + "notes": "Go to the linked page and scroll down to the bottom of page. From there, click the 'Delete' button next to the 'Delete account' section." + }, + { + "name": "Coub", + "domains": [ + "coub.com" + ], + "url": "https://coub.com/account/edit", + "difficulty": "easy", + "notes": "Visit the linked page. From the left column, select your username. Scroll to the bottom of the page and click \"Delete Account\"." + }, + { + "name": "Couchsurfing", + "domains": [ + "couchsurfing.org", + "support.couchsurfing.org", + "couchsurfing.com" + ], + "url": "https://support.couchsurfing.org/hc/en-us/articles/200640880-How-can-I-Hide-or-Delete-my-profile", + "difficulty": "impossible", + "notes": "Cannot be deleted fully, reactivation is always available. Fill out the request form." + }, + { + "name": "Coursera", + "domains": [ + "coursera.org" + ], + "url": "https://www.coursera.org", + "difficulty": "easy", + "notes": "Delete acccount button is at the bottom of the account settings page." + }, + { + "name": "Craigslist", + "domains": [ + "craigslist.org" + ], + "url": "https://www.craigslist.org/about/help/user_accounts", + "difficulty": "hard", + "notes": "Send an email to abuse@craigslist.org and request deletion.", + "email": "abuse@craigslist.org" + }, + { + "name": "CrashPlan", + "domains": [ + "crashplan.com", + "code42.com", + "helpdesk.code42.com" + ], + "url": "https://helpdesk.code42.com", + "difficulty": "hard", + "notes": "Start a live chat session and a representative will delete your account." + }, + { + "name": "Credit Karma", + "domains": [ + "creditkarma.com" + ], + "url": "https://www.creditkarma.com/myprofile/security/deactivate", + "difficulty": "easy", + "notes": "Membership can be canceled either online or by mail. Once you cancel, you will no longer have access to your Credit Karma account history and you won\u2019t be able to create a new account for six months." + }, + { + "name": "CreditExpert", + "domains": [ + "creditexpert.co.uk" + ], + "url": "https://www.creditexpert.co.uk", + "difficulty": "hard", + "notes": "You can cancel by email but only if your membership includes insurance. Otherwise, an email cancellation will be ignored. You have to call 0800 561 0083 to cancel your account. This is the only way. More info [here](http://experian.metafaq.com/help/CreditExpertBRS/Cancel_and_duration/CancelBRS)", + "email": "Customerservice@creditexpert.co.uk" + }, + { + "name": "Credly", + "domains": [ + "credly.com" + ], + "url": "https://www.credly.com/earner/settings/profile", + "difficulty": "easy", + "notes": "On the profile settings page, scroll down and click 'Delete my Profile'." + }, + { + "name": "Crevado Portfolios", + "domains": [ + "crevado.com" + ], + "url": "https://crevado.com/admin/account/cancel", + "difficulty": "easy" + }, + { + "name": "Crowdcast.io", + "domains": [ + "crowdcast.io", + "docs.crowdcast.io" + ], + "url": "https://crowdcast.notion.site/Deleting-Your-Crowdcast-Account-952b7f9ff09648f7960e7d9ecfb6a1b4", + "difficulty": "impossible", + "notes": "You can pause your account for $10/mo or cancel your account." + }, + { + "name": "Crowdfinder", + "domains": [ + "crowdfinder.be" + ], + "url": "https://crowdfinder.be/privacy", + "difficulty": "hard", + "notes": "Request requires sending a proof of identity", + "email": "info@crowdfinder.be" + }, + { + "name": "Crowdfire", + "domains": [ + "crowdfireapp.com", + "support.crowdfireapp.com" + ], + "url": "https://support.crowdfireapp.com/support/solutions/articles/5000712205-deleting-your-crowdfire-account", + "difficulty": "easy", + "notes": "Deleted after 48 hours of request" + }, + { + "name": "Crowdin", + "domains": [ + "crowdin.com" + ], + "url": "https://crowdin.com/settings#account", + "difficulty": "easy", + "notes": "Login to your account. Click on 'Settings', then 'Delete Account' (at the bottom). Choose one of the options why you want to delete your account and click 'Delete Account'." + }, + { + "name": "Crowdsorsa", + "domains": [ + "crowdsorsa.com" + ], + "url": "https://crowdsorsa.com/contact/", + "difficulty": "hard", + "notes": "As of now there's not a simple way to delete your account. You have to contact their team, your account will be quickly deleted upon request." + }, + { + "name": "Crunchyroll", + "domains": [ + "crunchyroll.com", + "help.crunchyroll.com" + ], + "url": "https://github.com/jdm-contrib/jdm/issues/1895", + "difficulty": "limited", + "notes": "If you live in California, use the [CCPA Request Form](https://privacyportal.onetrust.com/webform/d19e506f-1a64-463d-94e4-914dd635817d/fc46fc0c-407c-4735-9a43-14dfa283d17c). Otherwise, use the [All Other Requests Form](https://sites.sonypictures.com/corp/privacypolicies/b2c/contact-us.html).\n\nSelect \"Crunchyroll/Crunchyroll Games\" as your service." + }, + { + "name": "CryEngine", + "domains": [ + "cryengine.com", + "forum.cryengine.com" + ], + "url": "https://www.cryengine.com/user/dashboard/account/delete", + "difficulty": "easy", + "notes": "Go to your dashboard, click 'Delete your account' and confirm." + }, + { + "name": "Crypton.sh", + "domains": [ + "crypton.sh" + ], + "url": "https://crypton.sh/app/account", + "difficulty": "easy", + "notes": "Scroll down the page, click at \"Delete My Account\", type your password and confirm your action by clicking \"Delete Account\"." + }, + { + "name": "CryptoPanic", + "domains": [ + "cryptopanic.com" + ], + "url": "https://cryptopanic.com/accounts/delete/", + "difficulty": "medium", + "notes": "Click on 'Yes, send confirmation email', and you should receive an email to delete your account." + }, + { + "name": "CryptoVoucher", + "domains": [ + "cryptovoucher.io" + ], + "url": "https://cryptovoucher.io/account/settings", + "difficulty": "easy", + "notes": "Just click the close account button in the account settings" + }, + { + "name": "CryptPad", + "domains": [ + "cryptpad.fr" + ], + "url": "https://cryptpad.fr/settings/", + "difficulty": "easy", + "notes": "Scroll down to the red 'Delete your account' button and then select 'OK (enter)'" + }, + { + "name": "Crytek", + "domains": [ + "crytek.com" + ], + "url": "https://www.crytek.com/privacy-policy#:~:text=VII.%20Review%2C%20Correction%20of%20Your%20Information%2C%20Requesting%20Removal%20from%20Mailing%20Lists%20and%20Deactivating%20Your%20Account", + "difficulty": "easy", + "notes": "You can delete your account by navigating to the profile settings or e-mailing them" + }, + { + "name": "cTrader", + "domains": [ + "ctrader.com", + "help.ctrader.com" + ], + "url": "https://help.ctrader.com/ctrader-id/delete", + "difficulty": "hard", + "notes": "You need to contact customer support and they will ask for very sensitive information such as your passport number.", + "email": "community@spotware.com", + "email_subject": "cTrader account deletion request", + "email_body": "Please delete my cTrader account that uses the e-mail XXXXX and the passport is YYYYY." + }, + { + "name": "CubieCloud", + "domains": [ + "cloud.cubie.com.br", + "sso.cubie.com.br" + ], + "url": "https://sso.cubie.com.br/delacc", + "difficulty": "hard", + "notes": "Send an email asking to delete your account, providing your private id and other evidence.", + "email": "suporte@cubie.com.br" + }, + { + "name": "Curio", + "domains": [ + "curio.io" + ], + "url": "https://curio.io/account/delete", + "difficulty": "easy" + }, + { + "name": "Curriculum", + "domains": [ + "curriculum.com.br" + ], + "url": "https://curriculum.zendesk.com/hc/pt-br/requests/new", + "difficulty": "hard", + "notes": "Access the link above and fill the form requesting the account deletion." + }, + { + "name": "CurseForge", + "domains": [ + "curseforge.com" + ], + "url": "https://support.curseforge.com/en/support/tickets/new", + "difficulty": "hard", + "notes": "Send a support ticket from the email associated with your account and include the following information: your account username; a screenshot of you logged in to account settings / authors dashboard." + }, + { + "name": "Curve", + "domains": [ + "curve.app", + "support.imaginecurve.com" + ], + "url": "https://support.imaginecurve.com/hc/en-gb/articles/214179685-How-do-I-cancel-my-account", + "difficulty": "medium", + "notes": "They cannot delete your account immediately as they are obliged by the Money Laundering Regulations 2017 to keep your data for 5 years after you stop using Curve." + }, + { + "name": "CV online", + "domains": [ + "cvonline.me" + ], + "url": "https://cvonline.me/en/support/accounts/removing-account", + "difficulty": "hard", + "notes": "Request account removal by sending an email to them from the same email address appearing on your CVs.", + "email": "hello@cvonline.me" + }, + { + "name": "CVS Pharmacy", + "domains": [ + "cvs.com" + ], + "url": "https://www.cvs.com/account/account-management.jsp", + "difficulty": "medium", + "notes": "They allow account deletions under the CCPA, but only for California residents. However, the way they check your location is simply a ZIP code of your choosing. You can input any California ZIP (ex. 94102) and they will allow you to delete your account. Visit the linked page, and select 'CA residents: request or delete personal information.' Enter any California ZIP code, then click 'Delete my info and account', and finally 'Yes, delete my info and account'." + }, + { + "name": "Cybrary", + "domains": [ + "cybrary.com", + "app.cybrary.it" + ], + "url": "https://app.cybrary.it/settings/account", + "difficulty": "easy", + "notes": "Go to \"Delete Your Account \u2b95 Delete Account\"." + }, + { + "name": "DaFONT", + "domains": [ + "dafont.com" + ], + "url": "https://www.dafont.com/forum/read/12643/how-do-i-delete-my-account", + "difficulty": "hard", + "notes": "Send a private message to [Rodolphe](http://www.dafont.com/fr/profile.php?user=1)." + }, + { + "name": "DagsHub", + "domains": [ + "dagshub.com" + ], + "url": "https://dagshub.com/user/settings/delete", + "difficulty": "medium", + "notes": "You first need to delete/transfer all your repositories. After that you can visit the linked page and delete your account." + }, + { + "name": "The Daily Wire", + "domains": [ + "dailywire.com" + ], + "url": "https://privacy.dailywire.com/", + "difficulty": "easy", + "notes": "Click \"Delete Your Data\" and enter the verification code the company sends to your account email." + }, + { + "name": "Dailymotion", + "domains": [ + "dailymotion.com" + ], + "url": "https://www.dailymotion.com/settings/delete-account", + "difficulty": "easy", + "notes": "Type your password and confirm your action by clicking \"Delete account\"." + }, + { + "name": "DansTonChat", + "domains": [ + "danstonchat.com" + ], + "url": "https://danstonchat.com/user/delete.html", + "difficulty": "easy" + }, + { + "name": "danwin1210.me", + "domains": [ + "danwin1210.me" + ], + "url": "https://danwin1210.me/mail/manage_account.php", + "difficulty": "easy", + "notes": "You can either disable or remove your account. After removal, username is free to be taken again." + }, + { + "name": "Dashlane", + "domains": [ + "dashlane.com" + ], + "url": "https://www.dashlane.com/deleteaccount", + "difficulty": "easy", + "notes": "After entering the email address and selecting a reason for deletion, you will receive a security code by email. Enter the security code. After that, the account will be irretrievably deleted." + }, + { + "name": "DataCamp", + "domains": [ + "datacamp.com" + ], + "url": "https://www.datacamp.com/profile/account_settings/advanced", + "difficulty": "easy", + "notes": "Click the red 'delete account' button at the bottom." + }, + { + "name": "DataQuest", + "domains": [ + "app.dataquest.io" + ], + "url": "https://app.dataquest.io/settings/account", + "difficulty": "easy", + "notes": "Click the red 'delete account' button" + }, + { + "name": "Day One", + "domains": [ + "dayone.me" + ], + "url": "https://dayone.me/user/request-account-deletion", + "difficulty": "easy" + }, + { + "name": "dbrand", + "domains": [ + "dbrand.com" + ], + "url": "https://dbrand.com/contact", + "difficulty": "hard", + "notes": "Contact customer support to request account deletion." + }, + { + "name": "Deadspin", + "domains": [ + "deadspin.com" + ], + "url": "https://notice.sp-prod.net/sar/index.html?message_id=539278&account_id=1195&ccpa_type=delete", + "difficulty": "hard", + "notes": "Fill out the form using the email address of your account and click on the verification link that is sent." + }, + { + "name": "Decathlon India", + "domains": [ + "decathlon.in" + ], + "url": "https://decathlononline.freshdesk.com/support/tickets/new", + "difficulty": "hard", + "notes": "Send them a deletion request from the linked contact form and remember to mention your decathlon.in registered email there. After some hours of submitting the request their support representative will email you asking for your confirmation to have your decathlon account permanently deleted. Alternatively, you can email them.", + "email": "care.india@decathlon.com", + "email_subject": "Decathlon.in Account Deletion Request", + "email_body": "Please delete my decathlon.in account and erase all data associated with it." + }, + { + "name": "DeepL", + "domains": [ + "deepl.com" + ], + "url": "https://www.deepl.com/en/privacy#section_6_1", + "difficulty": "hard", + "notes": "Account deletion requires contacting Customer Support.", + "email": "support@deepl.com" + }, + { + "name": "Deezer", + "domains": [ + "deezer.com", + "developers.deezer.com", + "features.deezer.com", + "support.deezer.com", + "deezer-blog.com", + "en.deezercommunity.com" + ], + "url": "https://www.deezer.com/account", + "difficulty": "medium", + "notes": "If you signed up via Google/Facebook setup a Deezer password at [https://www.deezer.com/password/reset](https://www.deezer.com/password/reset) and click the confirmation link you'll get via mail. If you have your Deezer password, open your account settings. Click 'Delete my Account' at the bottom of the page. Enter your Deezer password and confirm the deletion in the confirmation mail." + }, + { + "name": "Deliveroo", + "domains": [ + "deliveroo.co.uk" + ], + "url": "https://deliveroo.co.uk/account", + "difficulty": "medium", + "notes": "At the bottom of the account page is the option to permanently deactivate your account. It is unclear if your data will be retained after this so you may wish to contact dpo@deliveroo.com to exercise your right to erasure under UK GDPR." + }, + { + "name": "Delivery Code", + "domains": [ + "deliverycode.com" + ], + "url": "https://www.deliverycode.com", + "difficulty": "medium", + "notes": "Go to My Account and select Edit Profile and then Delete Account. A confirmation e-mail will be sent to the address on file with a link you must visit." + }, + { + "name": "Delta Airlines (SkyMiles)", + "domains": [ + "delta.com" + ], + "url": "https://www.delta.com/contactus/pages/comment_complaint/index.jsp", + "difficulty": "hard", + "notes": "You can not delete your account on the site. You must use the linked form. Then select SkyMiles \u2b95 Update SkyMiles Account and request them to close your account." + }, + { + "name": "DelugeRPG", + "domains": [ + "delugerpg.com" + ], + "url": "https://www.delugerpg.com/faq#delete", + "difficulty": "hard", + "notes": "There is no way to delete an account. Inactive accounts are deleted automatically after 15 months." + }, + { + "name": "Depop", + "domains": [ + "depop.com" + ], + "url": "https://depophelp.zendesk.com/hc/en-gb/articles/360001772988-How-can-I-delete-my-Depop-account-", + "difficulty": "hard", + "notes": "Select 'I want to delete my account' in the support request page." + }, + { + "name": "Depositphotos", + "domains": [ + "depositphotos.com" + ], + "url": "https://depositphotos.com", + "difficulty": "hard", + "notes": "Enter live chat in the other department and request cancellation of your account or if it is not available use the contact form." + }, + { + "name": "Deutsche Post", + "domains": [ + "deutschepost.de" + ], + "url": "https://www.dhl.de/content/dpks/de/themenauswahl/kundenservice-formulare/f1b-datenschutz.html", + "difficulty": "hard", + "notes": "Fill out the form to request erasure." + }, + { + "name": "DEV", + "domains": [ + "dev.to" + ], + "url": "https://dev.to/settings/account", + "difficulty": "easy", + "notes": "Go to your 'Settings'. On the left select 'Account'. Click 'Delete Account', and follow the instructions sent via email to confirm." + }, + { + "name": "DeviantArt", + "domains": [ + "deviantart.com" + ], + "url": "https://www.deviantart.com/settings/deactivation", + "difficulty": "medium", + "notes": "All your data is ereased immediately, except comments which will remain. Accounts can be reactivated within 30 days. After that, Accounts can't be reactivated." + }, + { + "name": "DevITjobs", + "domains": [ + "devitjobs.com" + ], + "url": "https://devitjobs.com/contact", + "difficulty": "medium", + "notes": "Click on the 'Log in here' button. After logging in, go to 'Account', then 'Delete Account'. You will be redirected to write to the support email. Account gets deleted within 48 hours." + }, + { + "name": "Devpost", + "domains": [ + "devpost.com" + ], + "url": "https://devpost.com/settings/delete_account", + "difficulty": "easy" + }, + { + "name": "DHL", + "domains": [ + "dhl.de" + ], + "url": "https://www.dhl.de/de/privatkunden/kundenkonto/meine-daten.html", + "difficulty": "easy", + "notes": "Under 'Kundenkonto', click on 'Konto l\u00f6schen'." + }, + { + "name": "diasp.eu (Diaspora)", + "domains": [ + "diasp.eu" + ], + "url": "https://diasp.eu/user/edit#close_account_pane", + "difficulty": "easy", + "notes": "Click close my account and confirm with your password." + }, + { + "name": "Dice", + "domains": [ + "dice.com" + ], + "url": "https://www.dice.com/dashboard/settings", + "difficulty": "easy", + "notes": "Go to your 'Settings'. Scroll to the bottom to find the 'Delete Account' section." + }, + { + "name": "DiceCloud", + "domains": [ + "dicecloud.com" + ], + "url": "https://dicecloud.com/", + "difficulty": "impossible", + "notes": "There are no settings on the website to delete your account and the contact form is never answered." + }, + { + "name": "dict.cc", + "domains": [ + "dict.cc", + "users.dict.cc" + ], + "url": "https://users.dict.cc/my-account/close-account", + "difficulty": "easy", + "notes": "Account data will be deleted; the user name will be blocked to prevent reuse." + }, + { + "name": "Dictionary.com", + "domains": [ + "dictionary.com" + ], + "url": "https://www.dictionary.com/account", + "difficulty": "easy", + "notes": "Account data will be deleted along with all the saved data and words. You fill find the detele button at the bottom of the page." + }, + { + "name": "Didsoft", + "domains": [ + "didsoft.com" + ], + "url": "https://didsoft.com/contact.html", + "difficulty": "hard", + "notes": "Create a ticket on the website, or email them.", + "email": "support@didsoft.com" + }, + { + "name": "Dietollemode.com", + "domains": [ + "dietollemode.com" + ], + "url": "https://dietollemode.com/", + "difficulty": "easy" + }, + { + "name": "Digg", + "domains": [ + "digg.com" + ], + "url": "https://digg.com/privacy#:~:text=How%20Can%20I%20Delete%20My%20Account%3F", + "difficulty": "easy", + "notes": "Go to \"Settings \u2b95 Delete my account\"." + }, + { + "name": "Digio", + "domains": [ + "digio.com.br" + ], + "url": "https://www.digio.com.br/", + "difficulty": "impossible", + "notes": "There is no delete button and talking to the customer support gets you nowhere, they only understand you want to cancel the bank account or the credit card, but not remove the login information." + }, + { + "name": "DigitalOcean", + "domains": [ + "digitalocean.com", + "cloud.digitalocean.com" + ], + "url": "https://cloud.digitalocean.com/account/profile/deactivate", + "difficulty": "easy", + "notes": "Click in the checkbox \"Purge all of my account data\" and confirm your action by clicking \"Deactivate Account\"." + }, + { + "name": "Diigo", + "domains": [ + "diigo.com" + ], + "url": "https://www.diigo.com/setting", + "difficulty": "easy", + "notes": "Scroll down the page, click at \"I'd like to delete my account.\", type your password and confirm your action by clicking \"Confirm Delete\"." + }, + { + "name": "Directleaks", + "domains": [ + "directleaks.net" + ], + "url": "https://directleaks.net/account/delete", + "difficulty": "easy" + }, + { + "name": "Discogs", + "domains": [ + "discogs.com" + ], + "url": "https://www.discogs.com/users/delete", + "difficulty": "easy" + }, + { + "name": "Discord", + "domains": [ + "discord.com", + "support.discord.com", + "support-dev.discord.com", + "support.discordapp.com", + "discordstatus.com" + ], + "url": "https://support.discordapp.com/hc/en-us/articles/212500837-How-do-I-permanently-delete-my-account-", + "difficulty": "medium", + "notes": "Account deletion will not delete your messages, which you must do manually (Automating this process is possible using projects such as Undiscord). If you're a server owner, you'll need to either [delete the server](https://support.discordapp.com/hc/en-us/articles/213595197-How-do-I-delete-a-server-), or [transfer ownership](https://support.discordapp.com/hc/en-us/articles/216273938-How-do-I-transfer-server-ownership-) for account deletion to succeed. Account deletion takes 15 days on average (You can restore your account in this time)." + }, + { + "name": "Discourse", + "domains": [ + "community.containo.us", + "airlinepilot.life", + "bbs.boingboing.net", + "blenderartists.org", + "commons.commondreams.org", + "community.bnz.co.nz", + "community.brave.com", + "community.cartalk.com", + "community.containo.us", + "community.drownedinsound.com", + "community.gemsofwar.com", + "community.glowforge.com", + "community.infinite-flight.com", + "community.mydevices.com", + "community.netlify.com", + "community.smartthings.com", + "community.unbounce.com", + "discourse.codecombat.com", + "discourse.gnome.org", + "discourse.joplinapp.org", + "discuss.atom.io", + "discuss.codecademy.com", + "discuss.elastic.co", + "discuss.emberjs.com", + "discuss.newrelic.com", + "experts.feverbee.com", + "foro.estudiabetes.org/", + "forum.cloudron.io", + "forum.duplicati.com", + "forum.factset.com", + "forum.gethopscotch.com", + "forum.glamour.de", + "forum.level1techs.com", + "forum.linkinpark.com", + "forum.ludia.com", + "forum.mangoh.io", + "forum.plentymarkets.com", + "forum.rclone.org", + "forum.restic.net", + "forum.schizophrenia.com", + "forum.smallgiantgames.com", + "forum.syncthing.net", + "forums.bignerdranch.com", + "forums.docker.com", + "forums.envato.com", + "forums.eveonline.com", + "forums.funcom.com", + "forums.gearboxsoftware.com", + "forums.pimoroni.com", + "forums.republicwireless.com", + "forums.t-nation.com", + "forums.wyzecam.com", + "gamekult.com/forum", + "helloforos.com", + "meta.discourse.org", + "secopshub.com", + "soaps.sheknows.com/message-boards", + "survivefrance.com", + "talk.folksy.com", + "try.discourse.org", + "twittercommunity.com", + "users.rust-lang.org" + ], + "url": "https://www.discourse.org/privacy#heading--change", + "difficulty": "hard", + "notes": "Account deletion requires contacting Customer Support.", + "email": "privacy@discourse.org" + }, + { + "name": "discovery+", + "domains": [ + "discoveryplus.com", + "support.discoveryplus.com" + ], + "url": "https://privacyportal.onetrust.com/webform/1b21e05d-c206-4e0b-970e-2d73a23e42e8/5b504afe-dd1e-47f6-9af6-56144531eced", + "difficulty": "medium" + }, + { + "name": "Disney", + "domains": [ + "disney.co.uk", + "disney.com", + "disney.de", + "disney.es", + "disney.fi", + "disney.fr", + "disney.my", + "disney.pt", + "support.disney.com" + ], + "url": "https://support.disney.com/hc/en-gb/articles/115005418823-How-do-I-delete-my-Disney-account-", + "difficulty": "easy" + }, + { + "name": "Disney+", + "domains": [ + "disneyplus.com", + "help.disneyplus.com" + ], + "url": "https://help.disneyplus.com/csp?id=csp_article_content&sys_kb_id=bf6bf352db101558331d6fddd39619c7", + "difficulty": "medium", + "notes": "Your Disney+ account is different from your Disney account. Deleting your Disney+ account will not delete your Disney account." + }, + { + "name": "Displate", + "domains": [ + "displate.com" + ], + "url": "https://displate.com/settings", + "difficulty": "easy", + "notes": "Click the \"Deactivate account\" button." + }, + { + "name": "Disqus", + "domains": [ + "disqus.com" + ], + "url": "https://disqus.com/home/settings/account/", + "difficulty": "easy" + }, + { + "name": "Disroot", + "domains": [ + "disroot.org", + "bin.disroot.org", + "board.disroot.org", + "calls.disroot.org", + "cloud.disroot.org", + "cryptpad.disroot.org", + "forum.disroot.org", + "git.disroot.org", + "howto.disroot.org", + "mumble.disroot.org", + "pad.disroot.org", + "search.disroot.org", + "upload.disroot.org", + "user.disroot.org", + "webchat.disroot.org", + "webmail.disroot.org" + ], + "url": "https://user.disroot.org/pwm/private/", + "difficulty": "easy", + "notes": "Go to the home page, click the user icon then press 'Delete my Account', nobody will be able to use the same username after deletion." + }, + { + "name": "Divize", + "domains": [ + "divize.io" + ], + "url": "https://divize.io/account/delete", + "difficulty": "easy", + "notes": "Click on \"Delete\" and confirm by clicking on \"Yes, Delete it!\"." + }, + { + "name": "DJI", + "domains": [ + "dji.com" + ], + "url": "https://account.dji.com/account/userCancel", + "difficulty": "easy" + }, + { + "name": "DLH", + "domains": [ + "dlh.net" + ], + "url": "https://dlh.net/en/profile.html", + "difficulty": "medium", + "notes": "Complete the captcha and press the button to request account deletion. An email will be sent to you to confirm such action." + }, + { + "name": "DLive", + "domains": [ + "dlive.tv", + "community.dlive.tv", + "help.dlive.tv" + ], + "url": "https://dlive.tv/s/settings", + "difficulty": "easy", + "notes": "In settings scroll to the bottom, click the delete account button and enter your password. Your account will be deleted in 30 days." + }, + { + "name": "DNSimple", + "domains": [ + "dnsimple.com" + ], + "url": "https://dnsimple.com/user/cancellation", + "difficulty": "easy" + }, + { + "name": "Do IT", + "domains": [ + "doit.life" + ], + "url": "https://doit.life/privacy-policy", + "difficulty": "impossible", + "notes": "E-mailing them is a deadend even after waiting for several weeks.", + "email": "data@doit.life" + }, + { + "name": "DocHub", + "domains": [ + "dochub.com" + ], + "url": "https://dochub.com/settings/account", + "difficulty": "easy", + "notes": "Log in, under \"Account\" click \"Delete my Account\"." + }, + { + "name": "Docker", + "domains": [ + "docker.com", + "hub.docker.com" + ], + "url": "https://hub.docker.com/settings/deactivate", + "difficulty": "easy", + "notes": "Log in, under account settings find and use \"Deactivate Account\"." + }, + { + "name": "DocMorris", + "domains": [ + "docmorris.de" + ], + "url": "https://www.docmorris.de/kontaktformular", + "difficulty": "hard", + "notes": "Contact customer service using their web contact form and ask them to delete your account." + }, + { + "name": "DocuSign", + "domains": [ + "docusign.com", + "support.docusign.com" + ], + "url": "https://support.docusign.com/en/articles/How-do-I-cancel-or-downgrade-my-account#steps", + "difficulty": "hard", + "notes": "Follow the instructions at the linked support page; directions vary depending on account type and privileges." + }, + { + "name": "Dollskill", + "domains": [ + "dollskill.com" + ], + "url": "https://www.dollskill.com/pages/contact-us", + "difficulty": "hard", + "notes": "Email customer service and they will reply once that is complete.", + "email": "dataprotection@dollskill.com", + "email_subject": "Hello\n, please delete the account associated to this email. My phone number is XXXXXXXX and I would like all data associated to my account to be removed." + }, + { + "name": "DonationAlerts", + "domains": [ + "donationalerts.com" + ], + "url": "https://www.donationalerts.com/dashboard/general-settings/account", + "difficulty": "easy", + "notes": "Press \"Delete account\" under the \"Account removal\". Your account will be deleted within a month." + }, + { + "name": "Doneo", + "domains": [ + "doneo.com" + ], + "url": "http://www.doneo.org/2_index_membre.php?action=desinscription_membre&block=block2", + "difficulty": "easy" + }, + { + "name": "Doodle", + "domains": [ + "doodle.com" + ], + "url": "https://doodle.com/account", + "difficulty": "easy", + "notes": "In your Doodle account select 'Delete Doodle account' at the bottom of the page." + }, + { + "name": "DoorDash", + "domains": [ + "doordash.com" + ], + "url": "https://www.doordash.com/consumer/privacy/delete_account/", + "difficulty": "medium", + "notes": "You will need the phone tied to your account to receive the 2FA code." + }, + { + "name": "Douban", + "domains": [ + "douban.com" + ], + "url": "https://www.douban.com/accounts/suicide/", + "difficulty": "easy" + }, + { + "name": "DOWN", + "domains": [ + "downapp.com" + ], + "url": "https://www.downapp.com", + "difficulty": "easy", + "notes": "You can delete it in the settings page", + "email": "feedback@downapp.com" + }, + { + "name": "Dr. Martens", + "domains": [ + "drmartens.com" + ], + "url": "https://www.drmartens.com/us/en/faq", + "difficulty": "hard", + "notes": "Send an email stating that you want them to close your account. Include: full name on account, full billing address and registered email address. Once they confirm deletion it may take 7-10 days to take effect. " + }, + { + "name": "Draft", + "domains": [ + "draftin.com" + ], + "url": "https://draftin.com/draft/users/edit", + "difficulty": "easy" + }, + { + "name": "Drawabox", + "domains": [ + "drawabox.com" + ], + "url": "https://drawabox.com", + "difficulty": "hard", + "notes": "Send an email from the address associated with the account you'd like to delete.", + "email": "support@drawabox.com" + }, + { + "name": "Drawpile", + "domains": [ + "drawpile.net" + ], + "url": "https://drawpile.net/accounts/delete/", + "difficulty": "easy" + }, + { + "name": "DreamHost", + "domains": [ + "dreamhost.com", + "panel.dreamhost.com" + ], + "url": "https://panel.dreamhost.com/index.cgi?tree=support.msg", + "difficulty": "hard", + "notes": "Contact customer support using the customer service form or privacy contact email.", + "email": "privacypolicy@dreamhost.com" + }, + { + "name": "Dreamstime", + "domains": [ + "dreamstime.com" + ], + "url": "https://www.dreamstime.com/account/edit-profile", + "difficulty": "easy", + "notes": "Click on the \"Delete account\" link towards the bottom of the page and then confirm your action in the opened pop-up. Accounts can be deleted only if you have no activity registered (uploads, downloads, comments,blogs etc)." + }, + { + "name": "Dreamwidth", + "domains": [ + "dreamwidth.org" + ], + "url": "https://www.dreamwidth.org/accountstatus", + "difficulty": "medium", + "notes": "Changing your account status to Deleted will immediately hide your profile and journal from other users, but your account will not be removed for 30 days." + }, + { + "name": "Dribbble", + "domains": [ + "dribbble.com" + ], + "url": "https://dribbble.com/account", + "difficulty": "easy" + }, + { + "name": "DriveThruRPG", + "domains": [ + "drivethrurpg.com", + "support.drivethrurpg.com" + ], + "url": "https://support.drivethrurpg.com/hc/en-us/requests/new", + "difficulty": "hard", + "notes": "Submit a request asking for the deletion of your account providing your username" + }, + { + "name": "Drivvo", + "domains": [ + "drivvo.com" + ], + "url": "https://www.drivvo.com/", + "difficulty": "easy", + "notes": "On the app, open the 'Menu' \u2b95 'My Account' \u2b95 tap the three dots on the upper right corner, click 'Delete Account' and confirm." + }, + { + "name": "Drizly", + "domains": [ + "drizly.com" + ], + "url": "https://privacyportal.onetrust.com/webform/d3790e60-9408-4ab8-9ac6-511ad32593a0/edb91c18-e5fd-42cb-a0ce-4b1832410687", + "difficulty": "hard", + "notes": "Fill out the form and/or email them through their contact page: https://drizly.com/contact-us. They will email you promptly to let you know that your account has been deleted." + }, + { + "name": "Drone.io", + "domains": [ + "drone.io" + ], + "url": "https://drone.io", + "difficulty": "easy" + }, + { + "name": "Dronebase", + "domains": [ + "dronebase.com" + ], + "url": "https://dronebase.com/contact", + "difficulty": "hard", + "notes": "Contact support to find out if you can delete your account." + }, + { + "name": "Drop (Massdrop)", + "domains": [ + "drop.com", + "helpdesk.drop.com" + ], + "url": "https://helpdesk.drop.com/hc/en-us/articles/360019265073-How-do-I-delete-my-account-", + "difficulty": "hard", + "notes": "Log into your Drop account and submit a Support ticket on drop.com/support. Under Reason for Contacting Support, select Account inquiries." + }, + { + "name": "Dropbox", + "domains": [ + "dropbox.com" + ], + "url": "https://www.dropbox.com/account/delete", + "difficulty": "easy" + }, + { + "name": "Droplr", + "domains": [ + "droplr.com", + "d.pr" + ], + "url": "https://d.pr/settings/profile", + "difficulty": "easy", + "notes": "Click at \"Delete Account\", type your email address and confirm your action by clicking \"Delete\"." + }, + { + "name": "Dropmark", + "domains": [ + "dropmark.com", + "support.dropmark.com" + ], + "url": "https://support.dropmark.com/article/92-how-do-i-delete-my-account", + "difficulty": "medium", + "notes": "Personal accounts can be deleted from the \"Danger Zone\" section at the bottom of your [Account page](https://app.dropmark.com/account). Note: Before deleting your personal account, you must first [transfer ownership](https://support.dropmark.com/article/53-transferring-collection-ownership) or [delete all collections](https://support.dropmark.com/article/20-deleting-a-collection) owned by your account." + }, + { + "name": "DTF", + "domains": [ + "dtf.ru" + ], + "url": "https://dtf.ru", + "difficulty": "easy", + "notes": "Log into your account. Click on your profile picture in the top right corner (bottom right on mobile), then on \"\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438\". Select \"\u041e\u0441\u043d\u043e\u0432\u043d\u044b\u0435\". There click on the blue \"\u0443\u0434\u0430\u043b\u0438\u0442\u044c \u0441\u0432\u043e\u0439 \u0430\u043a\u043a\u0430\u0443\u043d\u0442\" link at the bottom. Type your deletion reason and press the red \"\u0423\u0434\u0430\u043b\u0438\u0442\u044c\" button, then the red \"\u041f\u043e\u0434\u0442\u0432\u0435\u0440\u0434\u0438\u0442\u044c\" button." + }, + { + "name": "Dunkindonuts", + "domains": [ + "dunkindonuts.com" + ], + "url": "https://www.dunkindonuts.com/en/about/contact-us", + "difficulty": "easy", + "notes": "Click Personal Information, Click Delete My Account, Confirm \u2018Yes, I want to proceed\u2019, Reason for deleting your account, Choose \u2018Other\u2019, Type: I want to delete all of my private information. Then check both boxes if you agree. First box asks: Check here if you would like Dunkin\u2019 Donuts to delete all of the personal information we have collected from you (subject to permitted exceptions). Second box: I understand that by deleting my information, I will no longer be able to use my DD Perks Account and will forfeit any accrued Perks Rewards.\u00a0Then click Next, Then confirm by clicking \u2018Delete My Account\u2019. Then you will get a confirmation page that says: Thank you for your request, this confirms that your account has been deleted! You then get an email that says it can take 48 hours to update." + }, + { + "name": "Duo", + "domains": [ + "duo.com", + "help.duo.com", + "duosecurity.com" + ], + "url": "https://help.duo.com/s/article/2162", + "difficulty": "hard", + "notes": "Delete all applications, users and other administrators in the Admin Panel according to the [support article](https://help.duo.com/s/article/2162), then contact support via email.", + "email": "support@duosecurity.com" + }, + { + "name": "Duolingo", + "domains": [ + "duolingo.com", + "drive-thru.duolingo.com" + ], + "url": "https://drive-thru.duolingo.com/", + "difficulty": "medium", + "notes": "Scroll down and click \"ERASE PERSONAL DATA\". You will receive an e-mail in which you have to click the link after \"Delete my data link:\". This confirms the erasure of your personal data and account." + }, + { + "name": "Dwell", + "domains": [ + "dwell.co.uk" + ], + "url": "https://dwell.co.uk/contactus.php", + "difficulty": "impossible", + "notes": "It\u2019s not possible to delete an account, you can either remove or replace your contact information with bogus details." + }, + { + "name": "Dwolla", + "domains": [ + "dwolla.com" + ], + "url": "https://www.dwolla.com", + "difficulty": "impossible", + "notes": "Dwolla accounts cannot be deleted, only disabled. To request deactivation of your account, contact support via email.", + "email": "support@dwolla.com" + }, + { + "name": "DWService", + "domains": [ + "dwservice.net" + ], + "url": "https://www.dwservice.net/session.dw#s", + "difficulty": "easy" + }, + { + "name": "Dynadot", + "domains": [ + "dynadot.com" + ], + "url": "https://www.dynadot.com/community/help/question/close-dynadot-account", + "difficulty": "hard", + "notes": "Deletion can only be done via email. First, you must make sure the account has no active services from Dynadot (domains, VPS or Email Hosting, SSL certificates, Website Builders, etc.). Active domains must be deleted (this takes up to 30 days), or moved to another account/registrar. Once all services have been removed, send an email to accounts@dynadot.com from your email in which the account is registered under.", + "email": "accounts@dynadot.com" + }, + { + "name": "DynDNS", + "domains": [ + "dyn.com", + "account.dyn.com" + ], + "url": "https://account.dyn.com/profile/close.html", + "difficulty": "easy" + }, + { + "name": "e621", + "domains": [ + "e621.net" + ], + "url": "https://e621.net/maintenance/user/deletion", + "difficulty": "impossible", + "notes": "Even though there is a delete option, the site states it will only change your account to a generic name and lock it. Your contributions (submissions, comments, etc) will remain." + }, + { + "name": "EA Games / Origin / Electronic Arts", + "domains": [ + "ea.com", + "help.ea.com" + ], + "url": "https://help.ea.com/help-contact-us/?product=ea-app&platform=&topic=delete-ea-account&category=manage-my-account&subcategory=delete-account", + "difficulty": "hard", + "notes": "Contact customer services to request deletion." + }, + { + "name": "EasyEDA", + "domains": [ + "easyeda.com" + ], + "url": "https://easyeda.com/account/user/account/setting/advance", + "difficulty": "easy", + "notes": "Log into easyeda.com first, then click on the provided URL. Type 'DELETE' into the input box and click the Delete button." + }, + { + "name": "easyfundraising", + "domains": [ + "easyfundraising.org.uk" + ], + "url": "https://www.easyfundraising.org.uk/account/delete-account/", + "difficulty": "easy", + "notes": "Click on 'account' on the top right, then click 'Manage your data'. Click 'Learn more' under 'Delete your account and information' section. You will be prompted to enter your password." + }, + { + "name": "easyJet", + "domains": [ + "easyjet.com" + ], + "url": "https://www.easyjet.com/en/policy/privacy-promise/request-data-form", + "difficulty": "hard", + "notes": "You have to fill out the Data protection request form on their website, providing your identification." + }, + { + "name": "EatStreet", + "domains": [ + "eatstreet.com" + ], + "url": "https://eatstreet.com/contact", + "difficulty": "hard", + "notes": "Though you can deactivate your account under \"My Account\", in order to permanently delete your account, you must contact support and request deletion at: customer.service@eatstreet.com.", + "email": "customer.service@eatstreet.com" + }, + { + "name": "EBANX", + "domains": [ + "ebanx.cl", + "ebanx.com", + "ebanx.com.bo", + "ebanx.com.br", + "ebanx.com.co", + "ebanx.com.ec", + "ebanx.com.mx", + "ebanx.com.pe" + ], + "url": "https://ebanx.com", + "difficulty": "impossible", + "notes": "Customer support says that EBANX accounts can't be deleted, as the information about user transactions (e.g: payments) may be necessary in the future for, according to them, \"legal obligations and legitimate interests\"." + }, + { + "name": "eBay", + "domains": [ + "ebay.at", + "ebay.be", + "ebay.ca", + "ebay.ch", + "ebay.co.jp", + "ebay.co.uk", + "ebay.com", + "ebay.com.au", + "ebay.com.hk", + "ebay.com.my", + "ebay.com.sg", + "ebay.com.tw", + "ar.ebay.com", + "bo.ebay.com", + "br.ebay.com", + "by.ebay.com", + "cl.ebay.com", + "cn.ebay.com", + "co.ebay.com", + "cr.ebay.com", + "do.ebay.com", + "do.ebay.com", + "ec.ebay.com", + "gt.ebay.com", + "hn.ebay.com", + "il.ebay.com", + "kz.ebay.com", + "mx.ebay.com", + "ni.ebay.com", + "pa.ebay.com", + "pe.ebay.com", + "pr.ebay.com", + "pt.ebay.com", + "py.ebay.com", + "ru.ebay.com", + "sv.ebay.com", + "uy.ebay.com", + "ve.ebay.com", + "ebay.de", + "ebay.es", + "ebay.fr", + "ebay.ie", + "ebay.in", + "ebay.it", + "ebay.nl", + "ebay.ph", + "ebay.pl", + "accountsettings.ebay.com", + "signin.ebay.com" + ], + "url": "https://accountsettings.ebay.com/uas", + "difficulty": "medium", + "notes": "Hover over name on top left, click 'Account settings', click 'Close account' under the Account preferences column, then scroll down and click 'Close account and delete my data'. Select why you are leaving from drop down and continue. Click on checkmark and then click the left button to close your account. If you want an extra safety measure, replace all of your personal info with fake info before closing the account." + }, + { + "name": "eBonus", + "domains": [ + "ebonus.gg" + ], + "url": "https://ebonus.gg/contact", + "difficulty": "hard", + "notes": "After submitting a contact form, they will ask for confirmation using email. After confirmation, account deletion takes 30 days." + }, + { + "name": "Economist", + "domains": [ + "economist.com", + "myaccount.economist.com" + ], + "url": "https://myaccount.economist.com/s/contact-us", + "difficulty": "hard", + "notes": "There are two ways to contact this website, such as calling a phone number that is based on where you reside, or use the live chat." + }, + { + "name": "Edabit", + "domains": [ + "edabit.com" + ], + "url": "https://edabit.com/challenges", + "difficulty": "easy", + "notes": "On the website, click on your avatar, click on Settings, click Account, and hit the 'Delete Account' button" + }, + { + "name": "Edizioni Simone", + "domains": [ + "simone.it", + "edizioni.simone.it", + "scuola.simone.it" + ], + "url": "https://edizioni.simone.it/informativa-sulla-privacy/", + "difficulty": "hard", + "notes": "Contact support via email and request your account to be deleted.", + "email": "privacy@simone.it" + }, + { + "name": "Edpuzzle", + "domains": [ + "edpuzzle.com" + ], + "url": "https://edpuzzle.com/profile", + "difficulty": "easy", + "notes": "Scroll the bottom of the linked page and click 'Delete account'. Student accounts can only be deleted by request of a school teacher or administrator, or after 18 months of account inactivity. See their support article for more information: https://support.edpuzzle.com/hc/en-us/articles/4407364156557-How-Do-I-Delete-My-Account-" + }, + { + "name": "Edraw Software", + "domains": [ + "edrawsoft.com", + "edrawmind.com", + "edrawmax.com" + ], + "url": "https://www.edrawsoft.com/faq/#account", + "difficulty": "hard", + "notes": "You need to contact Edraw Software support through their support center." + }, + { + "name": "eDreams", + "domains": [ + "edreams.com", + "edreams.co.uk", + "edreams.net", + "edreams.pt" + ], + "url": "https://www.edreams.co.uk/travel/secure/#accountpreferences/", + "difficulty": "easy", + "notes": "Click on \"I want to delete My Account\"." + }, + { + "name": "Educaplay", + "domains": [ + "educaplay.com" + ], + "url": "https://www.educaplay.com", + "difficulty": "easy", + "notes": "You must go to your profile, click on Account Settings and then on Delete Account" + }, + { + "name": "Edvisors/ScholarshipPoints", + "domains": [ + "edvisors.com", + "scholarshippoints.com" + ], + "url": "https://www.edvisors.com/delete-request/", + "difficulty": "hard", + "notes": "Go to the URL and fill out the form with the information associated with your account. Edvisors will respond with a confirmation email. Click the enclosed link and fill out the next form. Between a few hours and 45 days later, Edvisors should send a confirmation email that your account has been deleted." + }, + { + "name": "EdX", + "domains": [ + "edx.org", + "account.edx.org" + ], + "url": "https://account.edx.org/#delete-account", + "difficulty": "medium", + "notes": "Go to the account deletion page and select Delete Account. If you have logged in through a social media account, you'll first have to unlink them, reset your password then delete the account." + }, + { + "name": "Electroneum", + "domains": [ + "electroneum.com", + "my.electroneum.com", + "support.electroneum.com", + "electroneum.zendesk.com" + ], + "url": "https://support.electroneum.com/hc/en-gb/requests/new", + "difficulty": "hard", + "notes": "Contact the customer support using the form or via email and request the deletion of your account.", + "email": "support@electroneum.com" + }, + { + "name": "Element", + "domains": [ + "element.io", + "app.element.io" + ], + "url": "https://app.element.io/#/home", + "difficulty": "easy", + "notes": "Go to \"All Settings\" scroll all the way down, and click on Deactivate Account." + }, + { + "name": "Elevate", + "domains": [ + "elevateapp.com" + ], + "url": "https://elevateapp.com", + "difficulty": "hard", + "notes": "You must send an e-mail to hello@elevateapp.com requesting deletion. You will then receive a response from support asking for feedback and to confirm the deletion. The next e-mail you receive from support will notify you that your account has been deleted.", + "email": "hello@elevateapp.com" + }, + { + "name": "Elfster", + "domains": [ + "elfster.com" + ], + "url": "https://www.elfster.com/settings/account/", + "difficulty": "easy", + "notes": "Go to 'Account Settings' and scroll to the very bottom to see an option to delete your account." + }, + { + "name": "Ello", + "domains": [ + "ello.co" + ], + "url": "https://ello.co/wtf/help/settings/", + "difficulty": "easy", + "notes": "Quoted from Ello: Go to your Settings page and click the \u201cDelete Account\u201d link. Once you delete your account neither you, nor we, can recover it. Also note that your username may become available for another person to use." + }, + { + "name": "Elpais", + "domains": [ + "elpais.com.uy", + "registro.elpais.com.uy" + ], + "url": "https://registro.elpais.com.uy/regasistencia.asp", + "difficulty": "hard", + "notes": "Complete the form, they will send you an email where you must respond indicating the identity document." + }, + { + "name": "Elsevier", + "domains": [ + "elsevier.com" + ], + "url": "https://service.elsevier.com/app/answers/detail/a_id/30148/supporthub/ecommerce/~/how-do-i-request-deletion-of-my-elsevier.com-account", + "difficulty": "hard", + "notes": "Fill out the form with your Account name, Email and a reason for deletion request." + }, + { + "name": "Emby", + "domains": [ + "emby.media" + ], + "url": "https://emby.media/community/index.php?/settings/deletemyaccount/", + "difficulty": "easy", + "notes": "To delete your account, you must [log into the community](https://emby.media/community/index.php?/login/) (not the app)." + }, + { + "name": "Empik", + "domains": [ + "empik.com" + ], + "url": "https://www.empik.com/polityka-prywatnosci-empik", + "difficulty": "hard", + "notes": "Send an e-mail asking for the deletion.", + "email": "obsluga.klienta@empik.com" + }, + { + "name": "Engadget", + "domains": [ + "engadget.com", + "engadget.mydashboard.oath.com" + ], + "url": "https://engadget.mydashboard.oath.com/#section-manage", + "difficulty": "easy", + "notes": "Scroll down to the bottom of the page and click 'Delete Account'." + }, + { + "name": "enjin", + "domains": [ + "enjin.com" + ], + "url": "https://www.enjin.com/dashboard/account/privacy", + "difficulty": "easy", + "notes": "Scroll down and click on 'Delete Account'." + }, + { + "name": "enjoei", + "domains": [ + "enjoei.com.br" + ], + "url": "https://www.enjoei.com.br/perfil/alterar", + "difficulty": "easy", + "notes": "Scroll down on the configurations of your profile and click on 'Delete Account'. An e-mail will be sent for you to confirm the deletion by clicking a link." + }, + { + "name": "Envato", + "domains": [ + "envato.com", + "help.market.envato.com", + "themeforest.net", + "codecanyon.net", + "videohive.net", + "audiojungle.net", + "graphicriver.net", + "photodune.net", + "3docean.net", + "activeden.net" + ], + "url": "https://help.market.envato.com/hc/en-us/articles/202500394-How-Do-I-Close-My-Account-", + "difficulty": "hard", + "notes": "You have to send them a request to delete the account using the contact form." + }, + { + "name": "Epic Games", + "domains": [ + "epicgames.com" + ], + "url": "https://www.epicgames.com/help/en-US/epic-accounts-c74/general-support-c79/how-do-i-delete-my-epic-games-account-a3636", + "difficulty": "medium", + "notes": "Log in to your account. On the \"General Info\" page, scroll to the \"Delete Account\" section, request deletion and follow the steps." + }, + { + "name": "Epik", + "domains": [ + "epik.com", + "registrar.epik.com" + ], + "url": "https://www.epik.com/", + "difficulty": "hard", + "notes": "Log in to your account. Start a new chat with customer support and request the deletion of your account and personal data. Make sure you have your customer support PIN on hand." + }, + { + "name": "Epoch Times", + "domains": [ + "reader.epoch.cloud", + "epochtimes.bg", + "epochtimes.com", + "epochtimes.com.au", + "epochtimes.com.br", + "epochtimes.cz", + "epochtimes.de", + "epochtimes.fr", + "epochtimes.it", + "epochtimes.jp", + "epochtimes.nl", + "epochtimes.pl", + "epochtimes.ru", + "epochtimes.se", + "epochtimes.sk", + "epochtimes-romania.com", + "epochtimestr.com", + "epochtimesviet.com", + "erabaru.net", + "help.theepochtimes.com", + "persianepochtimes.com", + "theepochtimes.com", + "es.theepochtimes.com", + "kr.theepochtimes.com", + "theepochtimes.gr" + ], + "url": "https://help.theepochtimes.com/hc/en-us/requests/new", + "difficulty": "hard", + "notes": "Send a request to customer support demanding for the deletion of your account." + }, + { + "name": "eProject.me", + "domains": [ + "eproject.me" + ], + "url": "https://eproject.me", + "difficulty": "hard", + "notes": "Send an e-mail asking for the deletion.", + "email": "services@eproject.me" + }, + { + "name": "eRepublik", + "domains": [ + "erepublik.com" + ], + "url": "https://www.erepublik.com/en/contact/none/none", + "difficulty": "hard", + "notes": "Create new Game Support ticket to request account removal." + }, + { + "name": "ESPN", + "domains": [ + "espn.com" + ], + "url": "https://www.espn.com", + "difficulty": "easy", + "notes": "At the bottom of the account settings page there is a Remove Account button" + }, + { + "name": "eToro", + "domains": [ + "etoro.com" + ], + "url": "https://www.etoro.com/settings/account", + "difficulty": "easy", + "notes": "At the bottom of the page, click the button to close your account, select the reason for your deletion and continue to confirm it." + }, + { + "name": "Etsy", + "domains": [ + "etsy.com" + ], + "url": "https://www.etsy.com/your/account/privacy", + "difficulty": "easy", + "notes": "Click on 'Request deletion of your data' and then 'Yes, I'm sure'. You'll receive an e-mail with a link to finish the process." + }, + { + "name": "Even", + "domains": [ + "even.com" + ], + "url": "https://www.even.com/employees/support", + "difficulty": "easy", + "notes": "Head to the account information page (Profile \u2b95 App settings \u2b95 Account info) and click on \"Delete your Even account & data\"." + }, + { + "name": "Eventbrite", + "domains": [ + "eventbrite.com" + ], + "url": "https://www.eventbrite.com/account-close", + "difficulty": "easy" + }, + { + "name": "Eventim", + "domains": [ + "eventim.de" + ], + "url": "https://www.eventim.de/help/contact/?help_id=6306", + "difficulty": "hard", + "notes": "Search for Account, select question 'How can I delete my account', then click on 'This answer was not helpful'. A ticket will be opened." + }, + { + "name": "Everhelper", + "domains": [ + "everhelper.me" + ], + "url": "https://www.everhelper.me/remove-account/", + "difficulty": "easy" + }, + { + "name": "Evernote", + "domains": [ + "evernote.com", + "dev.evernote.com", + "help.evernote.com" + ], + "url": "https://help.evernote.com/hc/en-us/articles/360056549574-Permanently-close-your-Evernote-account", + "difficulty": "easy", + "notes": "Sign in to account settings, click 'Account Status', click 'Close your Evernote Account', read carefully and accept." + }, + { + "name": "Evite", + "domains": [ + "evite.com" + ], + "url": "https://privacyportal-cdn.onetrust.com/dsarwebform/516d7c8e-88ca-4311-b9d9-a6a1aa23be02/5eb62c40-d057-4621-93ca-9842142c3443.html", + "difficulty": "hard", + "notes": "Go to the URL, select 'Delete My Info' as the request type, and fill out the form with your account information. Open the email they send you and confirm. Wait a few days while they review your request. You should eventually receive email confirmation that your account was deleted, after which your login credentials will no longer work." + }, + { + "name": "Exercism", + "domains": [ + "exercism.io" + ], + "url": "https://exercism.io/my/settings", + "difficulty": "easy", + "notes": "Login and click 'Delete my Account'. Then click again on the next page to confirm deletion." + }, + { + "name": "Expedia", + "domains": [ + "expedia.com", + "expedia.co.uk", + "expedia.de", + "expedia.fr" + ], + "url": "https://www.expedia.com/service/#/articles/396/25/12395", + "difficulty": "hard", + "notes": "Contact support via the live chat or the contact form and request the deletion of your account." + }, + { + "name": "Experian", + "domains": [ + "experiandirect.com" + ], + "url": "https://www.experian.com", + "difficulty": "hard", + "notes": "You have to call or email them. They respond to email quickly, however, so it is not that painful.", + "email": "support@experian.com" + }, + { + "name": "Experian UK", + "domains": [ + "experian.co.uk", + "prodmove.experian.co.uk" + ], + "url": "https://prodmove.experian.co.uk/", + "difficulty": "easy", + "notes": "Head to 'Your Subscriptions' and click the 'Close your Experian Account' button. This will cancel any subscriptions and closes your account." + }, + { + "name": "Expo", + "domains": [ + "expo.dev" + ], + "url": "https://expo.dev/settings", + "difficulty": "easy", + "notes": "On the settings page, scroll down to the bottom of the page and follow the steps under 'Delete your account'." + }, + { + "name": "ExpressVPN", + "domains": [ + "expressvpn.com" + ], + "url": "https://www.expressvpn.com/support/", + "difficulty": "hard", + "notes": "You must either go through live support on the support page and specifically request the deletion of your account or write an e-mail from the registered address. Either way you will probably be asked to confirm again by mail.", + "email": "support@expressvpn.zendesk.com", + "email_subject": "Request to Delete my Account", + "email_body": "To whom it may concern,%0D%0A%0D%0AI am reaching out to you to request the cancellation and deletion of the ExpressVPN account attached to this Email address and its data as I am no longer using the service.%0D%0A%0D%0ABest Regards" + }, + { + "name": "EZsniper", + "domains": [ + "ezsniper.com" + ], + "url": "https://www.ezsniper.com/contact.php", + "difficulty": "hard", + "notes": "You have to fill in the contact form with the appropriate details, then in the body request for the deletion of your account and all data attached." + }, + { + "name": "Facebook", + "domains": [ + "facebook.com" + ], + "url": "https://www.facebook.com/help/delete_account?rdrhc", + "difficulty": "medium", + "notes": "While you can delete your account easily, some of the data including messages, are there to stay forever, just as stated in the website's privacy policy." + }, + { + "name": "Facebook Messenger", + "domains": [ + "messenger.com" + ], + "url": "https://www.facebook.com/help/messenger-app/458908261952384?cms_platform=android-app&helpref=platform_switcher", + "difficulty": "easy", + "notes": "If you logged in with your Facebook account, you can just delete that account. If you registered using your phone number, go to your account settings and tap on Delete Your Account and Information." + }, + { + "name": "Faceit", + "domains": [ + "faceit.com", + "support.faceit.com/" + ], + "url": "https://support.faceit.com/hc/en-us/requests/new", + "difficulty": "hard", + "notes": "See ['How do I get my personal details deleted on FACEIT?'](https://support.faceit.com/hc/en-us/articles/360001449004-How-do-I-get-my-personal-details-deleted-on-FACEIT-)" + }, + { + "name": "Facile.it", + "domains": [ + "facile.it" + ], + "url": "https://www.facile.it/cancellazione/", + "difficulty": "easy" + }, + { + "name": "Fairphone", + "domains": [ + "fairphone.com" + ], + "url": "https://www.fairphone.com/en/legal/fairphone-privacy-policy/#yourresponsibilitiesandrights", + "difficulty": "hard", + "notes": "Need to email privacy@fairphone.com and ask for your account to be deleted. Takes around 14 working days for the account to be deleted.", + "email": "privacy@fairphone.com" + }, + { + "name": "FamilySearch", + "domains": [ + "familysearch.org" + ], + "url": "https://www.familysearch.org/identity/settings/account", + "difficulty": "easy", + "notes": "Go into your account settings and then click \"Delete Account\" at the bottom of the page." + }, + { + "name": "Fanatical", + "domains": [ + "fanatical.com", + "support.fanatical.com" + ], + "url": "https://www.fanatical.com/en/account/login", + "difficulty": "easy", + "notes": "Visit the linked page and click 'Delete Account'." + }, + { + "name": "Fandom Wikia", + "domains": [ + "fandom.wikia.com", + "community.wikia.com" + ], + "url": "https://community.wikia.com/wiki/Special:CloseMyAccount", + "difficulty": "medium", + "notes": "Click on 'Close my account'. Disables the account but cannot delete user data completely. Retains user contributions and username is not released." + }, + { + "name": "FanFiction", + "domains": [ + "fanfiction.net" + ], + "url": "https://www.fanfiction.net/account/data_delete.php", + "difficulty": "hard", + "notes": "On the linked page, copy the provided code and send it to support@fanfiction.com using the email you registered with. Staff will respond and delete your account within 24 hours.", + "email": "support@fanfiction.com" + }, + { + "name": "FastWeb", + "domains": [ + "fastweb.com" + ], + "url": "https://www.fastweb.com/login", + "difficulty": "easy", + "notes": "Go to the URL and log in with your credentials. Go to 'My Account' \u2b95 'Account' and select 'Delete My Account'. Answer 'Yes' to the prompt. FastWeb will immediately log you out, and your credentials will no longer work." + }, + { + "name": "Fauna", + "domains": [ + "fauna.com", + "support.fauna.com" + ], + "url": "https://support.fauna.com/hc/en-us/articles/1260807007229-How-do-I-delete-my-account-entirely-", + "difficulty": "hard", + "notes": "In the Fauna dashboard, create a new database named 'delete-request-{today's date in DDMMYYY}'. Then open a support ticket to request deletion." + }, + { + "name": "FDM Group", + "domains": [ + "fdmgroup.com" + ], + "url": "https://www.fdmgroup.com/privacy/", + "difficulty": "hard", + "notes": "Send an email to them.", + "email": "DPO@FDMGroup.com" + }, + { + "name": "FedEx", + "domains": [ + "fedex.com" + ], + "url": "https://privacyportal.onetrust.com/webform/8a471a7b-6a52-49d0-bcb0-fa8bdb61598f/c121cce6-6cfb-4c3d-9b61-334f56a01b5f", + "difficulty": "hard", + "notes": "You will be asked to upload photo ID after the initial form submission. Alternatively, you can call customer service to have your user ID deleted." + }, + { + "name": "Fedora", + "domains": [ + "fedoraproject.org", + "accounts.fedoraproject.org", + "discussion.fedoraproject.org", + "pagure.io" + ], + "url": "https://pagure.io/fedora-pdr/new_issue", + "difficulty": "hard", + "notes": "Create a new issue and ask for your account to be deleted." + }, + { + "name": "FeedBin", + "domains": [ + "feedbin.com" + ], + "url": "https://feedbin.com/settings/account", + "difficulty": "easy", + "notes": "At the bottom of the linked page, click 'Cancel Account'." + }, + { + "name": "Feedly", + "domains": [ + "feedly.com" + ], + "url": "https://feedly.com/i/erase", + "difficulty": "easy", + "notes": "Log in and click the 'Delete Account' button." + }, + { + "name": "Ferox Hosting", + "domains": [ + "feroxhosting.nl", + "tickets.feroxhosting.nl" + ], + "url": "https://tickets.feroxhosting.nl/newissue", + "difficulty": "hard", + "notes": "You have to create a ticket regarding account deletion and you will be asked to prove ownership of the account." + }, + { + "name": "Fever", + "domains": [ + "feverup.com" + ], + "url": "https://feverup.com/", + "difficulty": "easy", + "notes": "On the app, tap 'profile' at the bottom right, then the gear icon at the upper right, scroll to the end and click 'Delete Account'. State the reason why and confirm. Deletion is immediate" + }, + { + "name": "Figma", + "domains": [ + "figma.com" + ], + "url": "https://www.figma.com/", + "difficulty": "easy", + "notes": "Log in, click on your profile picture in the top right of the header, click on 'Settings', scroll down to the accout section, click on 'Delete account', re-enter your account password, type 'delete my account' into the dialog box, and click on 'Delete account'." + }, + { + "name": "Fin.do", + "domains": [ + "fin.do" + ], + "url": "https://www.fin.do/support", + "difficulty": "hard", + "notes": "Request account deletion via the contact form." + }, + { + "name": "Finanzblick", + "domains": [ + "finanzblick.de" + ], + "url": "https://finanzblick.de/webapp", + "difficulty": "medium", + "notes": "Click on your username (top left) \u2b95 click on 'Profileinstellungen' \u2b95 'Account l\u00f6schen'. All data is fully erased." + }, + { + "name": "FinnishPod101.com", + "domains": [ + "finnishpod101.com" + ], + "url": "https://www.finnishpod101.com/#privacy_policy", + "difficulty": "hard", + "notes": "Account deletion requires contacting Customer Support.", + "email": "contactus@finnishpod101.com" + }, + { + "name": "Firefox", + "domains": [ + "addons.mozilla.org", + "accounts.firefox.com" + ], + "url": "https://accounts.firefox.com/settings/delete_account", + "difficulty": "easy", + "notes": "\u201cCancel your account\u201d link at the bottom of the page." + }, + { + "name": "Fitbit", + "domains": [ + "fitbit.com" + ], + "url": "https://www.fitbit.com/settings/profile", + "difficulty": "medium", + "notes": "From the dashboard website, click 'Settings', then scroll down and click 'Delete Account'. You'll receive an e-mail with the link for the actual deletion." + }, + { + "name": "FitnessSyncer", + "domains": [ + "fitnesssyncer.com" + ], + "url": "https://www.fitnesssyncer.com/account#Profile", + "difficulty": "easy", + "notes": "Login, click profile link, scroll down to delete and confirm." + }, + { + "name": "Fitocracy", + "domains": [ + "fitocracy.com" + ], + "url": "https://www.fitocracy.com/account/deletion/", + "difficulty": "easy" + }, + { + "name": "Fiverr", + "domains": [ + "fiverr.com" + ], + "url": "https://www.fiverr.com/support_tickets/new/account_and_security", + "difficulty": "hard", + "notes": "For each checkbox, choose:
  • Category: \"Data and privacy\"
  • Topic: \"Permanently delete my personal data\"

  • Click on the little link \"here\" under the light blue box. Fill the fields and submit request, soon, an account manager will answer you and process your request." + }, + { + "name": "Flaticon", + "domains": [ + "flaticon.com" + ], + "url": "https://www.flaticon.com/profile/me", + "difficulty": "easy", + "notes": "Scroll down to the bottom of the linked page and click 'Close my account'." + }, + { + "name": "Flattr", + "domains": [ + "flattr.com" + ], + "url": "https://flattr.com/settings/account/delete", + "difficulty": "easy", + "notes": "Type your password and confirm your action by clicking \"Permanently delete account\"." + }, + { + "name": "Fleek", + "domains": [ + "fleek.co", + "app.fleek.co", + "blog.fleek.co", + "docs.fleek.co", + "fleek.xyz", + "support.fleek.xyz" + ], + "url": "https://app.fleek.co/#/settings/general/profile", + "difficulty": "easy", + "notes": "Log in to your account, go to the linked page, scroll to the bottom and click \"Delete account\" and confirm the deletion." + }, + { + "name": "Flickr", + "domains": [ + "flickr.com" + ], + "url": "https://www.flickr.com/profile_delete.gne", + "difficulty": "easy" + }, + { + "name": "Flightradar24", + "domains": [ + "flightradar24.com" + ], + "url": "https://www.flightradar24.com/terms-and-conditions", + "difficulty": "hard", + "notes": "According to their Terms and Conditions, you must email them to delete your account.", + "email": "support@fr24.com" + }, + { + "name": "Flip", + "domains": [ + "flip.com" + ], + "url": "https://admin.flip.com/manage/settings", + "difficulty": "easy", + "notes": "Scroll down to the bottom of the page and click 'Delete Account'." + }, + { + "name": "Flipboard", + "domains": [ + "flipboard.com", + "about.flipboard.com", + "accounts.flipboard.com" + ], + "url": "https://accounts.flipboard.com/accounts/remove", + "difficulty": "easy" + }, + { + "name": "Flixster", + "domains": [ + "flixster.com" + ], + "url": "https://www.flixster.com", + "difficulty": "hard", + "notes": "Email privacy@flixster-inc.com and ask to have your account deleted.", + "email": "privacy@flixster-inc.com" + }, + { + "name": "Flo Health", + "domains": [ + "flo.health", + "app.flo.health" + ], + "url": "https://help.flo.health/hc/en-us/requests/new", + "difficulty": "hard", + "notes": "Contact support using the linked form or by email and request account deletion.", + "email": "support@flo.health" + }, + { + "name": "Floatplane", + "domains": [ + "floatplane.com" + ], + "url": "https://www.floatplane.com/user/settings", + "difficulty": "easy", + "notes": "Click the 'Delete Account' button and type your password. Your account will be deleted in 2 weeks." + }, + { + "name": "Flowkey", + "domains": [ + "flowkey.com", + "help.flowkey.com" + ], + "url": "https://help.flowkey.com/en/articles/4466433-how-to-unsubscribe-or-delete-your-account", + "difficulty": "hard", + "notes": "You need to send an email requesting to delete your account.", + "email": "support@flowkey.com" + }, + { + "name": "Fluid UI", + "domains": [ + "fluidui.com" + ], + "url": "https://www.fluidui.com/contact", + "difficulty": "hard", + "notes": "The easiest way is to log into your account, start the support chat in the bottom right corner and ask for account deletion. You can also contact the support by email.", + "email": "support@fluidui.com" + }, + { + "name": "FMOD", + "domains": [ + "fmod.com" + ], + "url": "https://fmod.com/profile", + "difficulty": "easy", + "notes": "On the linked page under Profile select 'To delete your account, click here'." + }, + { + "name": "Foap", + "domains": [ + "foap.com" + ], + "url": "https://www.foap.com/pages/contact", + "difficulty": "hard", + "notes": "Account deletion requires contacting customer support." + }, + { + "name": "FogBugz", + "domains": [ + "fogbugz.com", + "support.fogbugz.com" + ], + "url": "https://support.fogbugz.com/hc/en-us/articles/360011242754-Cancelling-a-FogBugz-or-Kiln-On-Demand-Subscription", + "difficulty": "easy", + "notes": "The account retention period depends on the type of account you have." + }, + { + "name": "Follett", + "domains": [ + "bkstr.com", + "brytewave.redshelf.com", + "follett.com", + "follettsoftware.com", + "titlewave.com" + ], + "url": "https://www.follett.com/policies/", + "difficulty": "hard", + "notes": "Scroll to the bottom and click the correct form or send an email.", + "email": "privacy@follett.com", + "email_subject": "Data Deletion Request", + "email_body": "Please delete my data from all Follett services under my email address XXXXXX." + }, + { + "name": "Font Awesome", + "domains": [ + "fontawesome.com" + ], + "url": "https://fontawesome.com/account", + "difficulty": "easy", + "notes": "Near the bottom of the linked page, click the red 'Delete Account' link. Confirm your password, then click 'Delete Account' again. If you have Font Awesome Pro, canceling your subscription will also start the process of deleting your account." + }, + { + "name": "FontStruct", + "domains": [ + "fontstruct.com" + ], + "url": "https://fontstruct.com/private/user/delete-account", + "difficulty": "easy", + "notes": "On the linked page choose the 'Delete Everything' option, confirm your password and click 'Delete Account'." + }, + { + "name": "Foodmaxx", + "domains": [ + "foodmaxx.com" + ], + "url": "https://foodmaxx.com/contact-us", + "difficulty": "hard", + "notes": "Contact customer service using the linked form and request account deletion, or call 1-800-692-5710." + }, + { + "name": "Fooducate", + "domains": [ + "fooducate.com" + ], + "url": "http://fooducate.com/deleteaccount", + "difficulty": "easy", + "notes": "Log into your profile, fill out reason (optional), click Delete" + }, + { + "name": "ForeverMissed", + "domains": [ + "forevermissed.com" + ], + "url": "https://www.forevermissed.com/contactus", + "difficulty": "hard", + "notes": "Use the contact form to ask customer service to delete your account." + }, + { + "name": "Forvo", + "domains": [ + "forvo.com" + ], + "url": "https://forvo.com/account-delete/", + "difficulty": "easy" + }, + { + "name": "forward2me", + "domains": [ + "forward2me.com" + ], + "url": "https://www.forward2me.com/terms-of-trade/", + "difficulty": "hard", + "notes": "You need to contact support to delete your account and personal information.", + "email": "info@forward2me.com" + }, + { + "name": "Fotka", + "domains": [ + "fotka.pl" + ], + "url": "https://www.fotka.pl/ustawienia/konto_usun", + "difficulty": "medium", + "notes": "To delete your account, you must not post anything for at least three days." + }, + { + "name": "Foursquare", + "domains": [ + "foursquare.com" + ], + "url": "https://foursquare.com/delete_me", + "difficulty": "easy" + }, + { + "name": "Framer", + "domains": [ + "framer.com" + ], + "url": "https://www.framer.com/contact/", + "difficulty": "hard", + "notes": "You have to email the support to delete the account. They take a few hours to respond.", + "email": "support@framer.com" + }, + { + "name": "Franz", + "domains": [ + "meetfranz.com" + ], + "url": "https://meetfranz.com/user/profile", + "difficulty": "easy", + "notes": "Navigate to the bottom of the profile page where you have the option to delete your account." + }, + { + "name": "FreeBitco.In", + "domains": [ + "freebitco.in" + ], + "url": "https://freebitco.in", + "difficulty": "impossible", + "notes": "This website does not provide options that allow the user to delete their account." + }, + { + "name": "FreeCodeCamp", + "domains": [ + "freecodecamp.org" + ], + "url": "https://www.freecodecamp.org/settings", + "difficulty": "easy", + "notes": "You'll need to access your account settings; it's under a section labeled Danger Zone" + }, + { + "name": "Freecycle", + "domains": [ + "freecycle.org" + ], + "url": "https://freecycle.org/home/delete-account", + "difficulty": "easy" + }, + { + "name": "FreeDNS", + "domains": [ + "freedns.afraid.org" + ], + "url": "https://freedns.afraid.org", + "difficulty": "impossible", + "notes": "It is impossible to delete your FreeDNS account. However, your account automatically gets tagged as \"dormant\" if you are using the free plan and haven't logged in for 6 months. When your account is dormant, all of your domains get temporarily suspended until you log back in and activate them again." + }, + { + "name": "Freejam", + "domains": [ + "freejamgames.com", + "account.freejamgames.com", + "support.freejamgames.com", + "freejam.uvdesk.com", + "robocraftgame.com", + "factory.robocraftgame.com", + "leaderboards.robocraftgame.com", + "robocraft2.com", + "cardlifegame.com" + ], + "url": "https://account.freejamgames.com/delete", + "difficulty": "easy", + "notes": "Visit the Account page, click \"Delete account\", type your username and confirm." + }, + { + "name": "Freelancer", + "domains": [ + "freelancer.com" + ], + "url": "https://www.freelancer.in/users/settings.php#AccountSettings", + "difficulty": "easy", + "notes": "Click Close My Account in Account settings from above link. Complete the short survey, and click Close my account." + }, + { + "name": "Freeletics", + "domains": [ + "freeletics.com" + ], + "url": "https://www.freeletics.com/en/settings/account", + "difficulty": "medium", + "notes": "After choosing to delete your account, a confirmation e-mail will be sent with a link you must visit." + }, + { + "name": "Freenom", + "domains": [ + "freenom.com", + "my.freenom.com" + ], + "url": "https://my.freenom.com/clientarea.php?action=details", + "difficulty": "impossible", + "notes": "This website does not provide options that allow the user to delete their account." + }, + { + "name": "Freesound", + "domains": [ + "freesound.org" + ], + "url": "https://freesound.org/home/delete/", + "difficulty": "medium", + "notes": "You cannot delete your account yourself if you have sounds uploaded to your account. In their own words: \"Because you have sounds on freesound, deleting your user is not a trivial task. As such, we ask you to please [contact the administrators via the Contact Form](https://freesound.org/contact/). They will help you with the deletion of your account....\". Alternatively - you can go through all your sounds, delete them one-by-one, and then delete your account." + }, + { + "name": "Freshdesk", + "domains": [ + "freshdesk.com" + ], + "url": "https://freshdesk.com", + "difficulty": "easy", + "notes": "On the top tab, click 'Admin' then 'Account', at the bottom, and search for the 'cancel my account' on the right. It is not really deleted, just closed." + }, + { + "name": "Freshping", + "domains": [ + "freshping.io", + "freshworks.com" + ], + "url": "https://freshping.io", + "difficulty": "easy", + "notes": "Go to https://DOMAIN.freshping.io/settings/account (replace DOMAIN with your Freshping domain), scroll to the bottom of the page and press the \"Delete account\" button, then \"Yes, Proceed\" on the pop-up." + }, + { + "name": "Frontend Mentor", + "domains": [ + "frontendmentor.io" + ], + "url": "https://www.frontendmentor.io/settings/account", + "difficulty": "easy", + "notes": "Click the 'Delete Account' button and type your username." + }, + { + "name": "Fruux", + "domains": [ + "fruux.com" + ], + "url": "https://fruux.com/account/login/", + "difficulty": "easy", + "notes": "You will need to go to Account setting and click delete account" + }, + { + "name": "Function of Beauty", + "domains": [ + "functionofbeauty.com" + ], + "url": "https://functionofbeauty.com/pages/contact-us", + "difficulty": "hard", + "notes": "You will need to request account deletion throught chat or email." + }, + { + "name": "Funimation", + "domains": [ + "funimation.com", + "help.funimation.com" + ], + "url": "https://help.funimation.com/hc/en-us/articles/360046541711-How-do-I-delete-or-close-my-account-", + "difficulty": "hard", + "notes": "In the Submit a Request form, under \"How can we help you?,\" choose \"Subscription\u201d, then \"Cancel or Delete Account\", and enter a brief description of your request in the \u201cDescription\u201d field." + }, + { + "name": "Fur Affinity", + "domains": [ + "furaffinity.net" + ], + "url": "https://www.furaffinity.net/controls/delete-account", + "difficulty": "medium", + "notes": "Click the \"Send Account Deletion Confirmation Email\" button, which will trigger a mail with a deletion link" + }, + { + "name": "Furbase", + "domains": [ + "furbase.de", + "forum.furbase.de" + ], + "url": "https://forum.furbase.de/account-management/", + "difficulty": "easy", + "notes": "At the bottom of the account management page, check the \"Delete User Account\" box and submit" + }, + { + "name": "FutureLearn", + "domains": [ + "futurelearn.com" + ], + "url": "https://www.futurelearn.com/account/delete", + "difficulty": "easy", + "notes": "Scroll down to the bottom of the page and click 'Delete my account'." + }, + { + "name": "FXhome", + "domains": [ + "fxhome.com" + ], + "url": "https://fxhome.com", + "difficulty": "hard", + "email": "support@fxhome.com" + }, + { + "name": "G2A", + "domains": [ + "g2a.com", + "id.g2a.com" + ], + "url": "https://id.g2a.com/panel/account-details/delete-account", + "difficulty": "easy", + "notes": "You will find a delete account button under 'My Account' \u2b95 'Account details' click it and accept, you will then receive an email requiring you to confirm the account deletion. Confirm it, then your account will be deleted if you do not login in the next 14 days." + }, + { + "name": "Gab Social", + "domains": [ + "gab.com" + ], + "url": "https://gab.com/settings/delete", + "difficulty": "easy", + "notes": "Under \"Account Settings\" there is an option to delete your account. Enter your password and press \"Delete Account\"" + }, + { + "name": "Gadu-Gadu", + "domains": [ + "www.gg.pl" + ], + "url": "https://www.gg.pl/pomoc/ustawienia-moje-konto-profil/", + "difficulty": "easy", + "notes": "You will find option to remove your account under Profile - My Account tab, after log in. Removed GG account number is going back to available numbers for new users." + }, + { + "name": "GAINSFIRE", + "domains": [ + "gainsfire.com" + ], + "url": "https://www.gainsfire.com/", + "difficulty": "easy", + "notes": "Open the App on your phone, navigate to your settings and select \"Delete account\" at the very bottom of the page." + }, + { + "name": "galaxy", + "domains": [ + "galaxy.click" + ], + "url": "https://galaxy.click", + "difficulty": "hard", + "notes": "Send an email to them requesting for your account's deletion.", + "email": "privacy@galaxy.click" + }, + { + "name": "Game Tracker", + "domains": [ + "gametracker.com" + ], + "url": "http://www.gametracker.com/account/manage/edit.php", + "difficulty": "easy", + "notes": "Scroll down in the account manager and click on close account button. The account will be deleted 30 days after closing it." + }, + { + "name": "GameFAQs", + "domains": [ + "gamefaqs.gamespot.com" + ], + "url": "https://gamefaqs.gamespot.com/user/closedel", + "difficulty": "medium", + "notes": "To delete your account, first close it with the provided link, after that you will be able to delete it on the same page." + }, + { + "name": "Gameforge", + "domains": [ + "gameforge.com", + "agbserver.gameforge.com", + "corporate.gameforge.com", + "security.gameforge.com", + "support.gameforge.com" + ], + "url": "https://gameforge.com/support", + "difficulty": "hard", + "notes": "You have to contact support in order to delete your account.", + "email": "support@gameforge.com" + }, + { + "name": "GameFront", + "domains": [ + "www.gamefront.com" + ], + "url": "https://www.gamefront.com/account/delete", + "difficulty": "impossible", + "notes": "Although the site claims to allow account deletion, it was not functional at the time of writing, instead returning a 500 status code (Internal Server Error). They claim that they will refuse to delete accounts through any other means." + }, + { + "name": "Gamefroot", + "domains": [ + "make.gamefroot.com" + ], + "url": "https://make.gamefroot.com/privacypolicy", + "difficulty": "hard", + "notes": "Account deletion requires contacting the developer. The privacy policy references a non-existent deletion link.", + "email": "developer@gamefroot.com", + "email_subject": "Account Deletion Request", + "email_body": "Please delete my GameFroot account registered under this email address, and opt me out from receiving any marketing communications." + }, + { + "name": "GameGleam", + "domains": [ + "gamegleam.com" + ], + "url": "https://www.gamegleam.com", + "difficulty": "hard", + "notes": "Account deletion requires contacting Customer Support.", + "email": "support@gamegleam.com" + }, + { + "name": "Gamehag", + "domains": [ + "gamehag.com" + ], + "url": "https://www.gamehag.com/profile/edit", + "difficulty": "easy", + "notes": "Go to the bottom of the page and click on 'Delete Account'", + "email": "support@gamehag.com" + }, + { + "name": "GameJolt", + "domains": [ + "gamejolt.com" + ], + "url": "https://gamejolt.com/account-deletion", + "difficulty": "hard", + "notes": "They only accept requests from the email address on your account.", + "email": "contact@gamejolt.com", + "email_body": "Please delete my GameJolt account under this email address." + }, + { + "name": "Gamespot", + "domains": [ + "gamespot.com" + ], + "url": "https://gamespot.com", + "difficulty": "hard", + "notes": "Account deletion requires contacting Customer Support.", + "email": "support@gamespot.com" + }, + { + "name": "GameStop", + "domains": [ + "gamestop.com" + ], + "url": "https://www.gamestop.com/PrivacyPolicy.html#section9", + "difficulty": "hard", + "notes": "Account deletion requires contacting Customer Support.", + "email": "GSContentRequests@gamestop.com" + }, + { + "name": "Garena", + "domains": [ + "garena.sg" + ], + "url": "https://www.garena.sg/support/", + "difficulty": "hard", + "notes": "Accounts are deleted with 6 months of inactivity or by opening a ticket to their support team." + }, + { + "name": "Garmin", + "domains": [ + "connect.garmin.com" + ], + "url": "https://www.garmin.com/account/datamanagement/", + "difficulty": "easy", + "notes": "Select the DELETE YOUR DATA option under the DATA MANAGEMENT section. Deletion process will be started and an email is sent upon finishing." + }, + { + "name": "GasBuddy", + "domains": [ + "gasbuddy.com", + "help.gasbuddy.com" + ], + "url": "https://help.gasbuddy.com/hc/en-us/requests/new?ticket_form_id=360001568313", + "difficulty": "hard", + "notes": "GasBuddy is unresponsive to account deletion requests, but you can try submitting a support ticket anyway using the linked form. If you're a California resident, you can submit a request to have your personal information deleted. You may be asked to submit more personal information to verify your identity.", + "email": "privacyrequest@gasbuddy.com" + }, + { + "name": "Gauges", + "domains": [ + "gaug.es" + ], + "url": "https://gaug.es", + "difficulty": "hard", + "notes": "Contact support and request they delete your account.", + "email": "support@gaug.es" + }, + { + "name": "GBAtemp", + "domains": [ + "gbatemp.net" + ], + "url": "https://gbatemp.net/account/delete", + "difficulty": "easy" + }, + { + "name": "Gearbest", + "domains": [ + "gearbest.com", + "wap-support.gearbest.com" + ], + "url": "https://wap-support.gearbest.com/ticket/ticket/ticket-add", + "difficulty": "hard", + "notes": "You will need to open a ticket. In the first field, select \"Account Management \u2b95 Advanced Account Information\" and then send your message requesting the deletion of the account. Within 48 hours, the customer support will return your message asking if you confirm the deletion of the account. You can also contact them [via email](mailto:support@gearbest.com)." + }, + { + "name": "GeeksforGeeks", + "domains": [ + "auth.geeksforgeeks.org", + "geeksforgeeks.org" + ], + "url": "https://auth.geeksforgeeks.org/delete-account/", + "difficulty": "easy" + }, + { + "name": "Genesis Cloud", + "domains": [ + "genesiscloud.com", + "console.genesiscloud.com", + "id.genesiscloud.com" + ], + "url": "https://id.genesiscloud.com/delete-account", + "difficulty": "easy" + }, + { + "name": "Geni", + "domains": [ + "geni.com" + ], + "url": "https://www.geni.com/account_settings", + "difficulty": "medium", + "notes": "Delete any of the information you would like removed from the site. Then select 'Account Settings' and 'Close Account'" + }, + { + "name": "Genius", + "domains": [ + "genius.com", + "support.genius.com" + ], + "url": "https://support.genius.com/hc/en-us/requests/new", + "difficulty": "hard", + "notes": "Visit the linked page to submit a ticket. Select 'Account Deletion/Data Erasure Request' from the drop down and fill out the form. You will be sent an email that asks you to reply with 'Confirm Account Deletion' to process your request. You also won't be notified when your account is deleted." + }, + { + "name": "Gentoo Forums", + "domains": [ + "forums.gentoo.org" + ], + "url": "https://wiki.gentoo.org/wiki/Project:Forums#Account_removal_requests", + "difficulty": "hard", + "notes": "Send an email to forum-mods@gentoo.org requesting account deletion. However, all your forum posts and comments will still be shown, and your account will only be anonymized as detailed [here](https://wiki.gentoo.org/wiki/Project:Forums#Account_removal_requests).", + "email": "forum-mods@gentoo.org", + "email_subject": "Account Removal Request", + "email_body": "I request for my Gentoo Forums account to be deleted. My username is XXXXXXXXX" + }, + { + "name": "Genymotion Cloud (SaaS)", + "domains": [ + "geny.io", + "cloud.geny.io" + ], + "url": "https://support.genymotion.com/hc/en-us/requests/new?ticket_form_id=360000289657", + "difficulty": "hard", + "notes": "First, log in to your account and go to the Administration Panel, cancel your plan and remove all credit cards. \nAfter doing that, you can submit a support ticket requesting the account deletion." + }, + { + "name": "Genymotion Desktop", + "domains": [ + "genymotion.com", + "www-v1.genymotion.com" + ], + "url": "https://www-v1.genymotion.com/account/#account-info", + "difficulty": "easy", + "notes": "Log in, and on the \"Account Info\" tab, scroll to the bottom and click \"Delete account\". There should then be a confirmation box, where you can delete your account." + }, + { + "name": "Geocaching", + "domains": [ + "geocaching.com", + "groundspeak.com" + ], + "url": "https://www.geocaching.com/account/settings/account", + "difficulty": "easy", + "notes": "Click \"Delete your account\" at the bottom of the page, then click \"Yes, delete my account\"." + }, + { + "name": "GeoGebra", + "domains": [ + "geogebra.org", + "accounts.geogebra.org" + ], + "url": "https://accounts.geogebra.org/", + "difficulty": "easy", + "notes": "Scroll down to the bottom of the linked page and click the button to delete your account." + }, + { + "name": "GeoGuessr", + "domains": [ + "geoguessr.com" + ], + "url": "https://www.geoguessr.com/me/settings", + "difficulty": "easy", + "notes": "Just click delete account at the bottom of the page and confirm account deletion." + }, + { + "name": "get.tech", + "domains": [ + "get.tech", + "controlpanel.tech" + ], + "url": "https://get.tech/privacy-policy", + "difficulty": "hard", + "notes": "Contact the following email from the registered email to remove your account.", + "email": "privacy@radix.email" + }, + { + "name": "GetContact", + "domains": [ + "getcontact.com" + ], + "url": "https://www.getcontact.com/manage", + "difficulty": "medium", + "notes": "You need to login on the website via WhatsApp, Telegram or SMS and then proceed to deletion." + }, + { + "name": "GetCreditScore", + "domains": [ + "getcreditscore.com.au" + ], + "url": "https://www.getcreditscore.com.au", + "difficulty": "easy", + "notes": "Select the Delete My Account option on the preferences page and click submit." + }, + { + "name": "Gettr", + "domains": [ + "gettr.com" + ], + "url": "https://gettr.com/settings/delete-account", + "difficulty": "easy" + }, + { + "name": "GG2U", + "domains": [ + "gg2u.org" + ], + "url": "https://www.gg2u.org/privacy.html", + "difficulty": "hard", + "notes": "You need to email them for them to erase your account.", + "email": "privacy@gg2u.org" + }, + { + "name": "GHash.IO", + "domains": [ + "ghash.io" + ], + "url": "https://support.cex.io/", + "difficulty": "hard", + "notes": "You can't delete your account without contacting them. You must set the subject to 'Delete Account'", + "email": "support@cex.io", + "email_subject": "Delete Account" + }, + { + "name": "Giant Bomb", + "domains": [ + "giantbomb.com" + ], + "url": "https://www.giantbomb.com", + "difficulty": "hard", + "notes": "You can delete your account by contacting support.", + "email": "support@giantbomb.com" + }, + { + "name": "Giphy", + "domains": [ + "giphy.com" + ], + "url": "https://giphy.com/settings", + "difficulty": "easy", + "notes": "Click the \"Delete Your Account\" button at the bottom of the page." + }, + { + "name": "GitBook", + "domains": [ + "gitbook.com", + "app.gitbook.com" + ], + "url": "https://app.gitbook.com/account", + "difficulty": "easy", + "notes": "Scroll to the bottom of your account settings and click \"Delete Account\"" + }, + { + "name": "GitHub", + "domains": [ + "github.blog", + "github.com", + "docs.github.com", + "support.github.com" + ], + "url": "https://github.com/settings/admin#:~:text=Delete%20account", + "difficulty": "easy", + "notes": "Click on 'Delete account' near the bottom of the page and follow the instructions. Some user content will continue to exist anonymously on the website." + }, + { + "name": "GitKraken", + "domains": [ + "app.gitkraken.com", + "gitkraken.com" + ], + "url": "https://app.gitkraken.com/account-info/delete-account", + "difficulty": "easy", + "notes": "Type in the verification message \"Delete My Account\" as required and confirm deletion." + }, + { + "name": "GitLab", + "domains": [ + "gitlab.com", + "about.gitlab.com", + "developer.gitlab.com", + "docs.gitlab.com", + "forum.gitlab.com", + "ir.gitlab.com", + "status.gitlab.com" + ], + "url": "https://gitlab.com/-/profile/account", + "difficulty": "easy", + "notes": "Click on 'Delete account' near the bottom of the page. Some user content will continue to exist anonymously on the website." + }, + { + "name": "GitPod", + "domains": [ + "gitpod.io" + ], + "url": "https://gitpod.io/account", + "difficulty": "easy", + "notes": "Click on 'Delete account' near the bottom of the page." + }, + { + "name": "Gizmodo", + "domains": [ + "gizmodo.com" + ], + "url": "https://notice.sp-prod.net/sar/index.html?message_id=539278&account_id=1195&ccpa_type=delete", + "difficulty": "hard", + "notes": "Fill out the form using the email address of your account and click on the verification link that is sent." + }, + { + "name": "Glassdoor", + "domains": [ + "glassdoor.com", + "help.glassdoor.com" + ], + "url": "https://help.glassdoor.com/s/privacyrequest", + "difficulty": "medium", + "notes": "Submit the form on the linked page. Under the field \"What is your personal data request?\", be sure to select \"Delete my personal data\". You'll be asked to verify your email, then your account will be deleted within 30 days." + }, + { + "name": "Glitch", + "domains": [ + "glitch.com" + ], + "url": "https://glitch.com/settings/account", + "difficulty": "easy", + "notes": "Log in first, go to the url, scroll down and press delete account." + }, + { + "name": "Glovo", + "domains": [ + "glovoapp.com" + ], + "url": "https://privacyportal-de.onetrust.com/webform/823e95df-5300-421a-bd72-0c9e0180184f/ff436245-5e5d-44f9-8463-eb48c2052eb5", + "difficulty": "hard", + "notes": "It is also possible to file an account deletion request via the \"Contact Us\" section at the bottom of the page." + }, + { + "name": "Glyph / Trion Worlds / Gamigo", + "domains": [ + "trionworlds.com", + "gamigo.com", + "support.gamigo.com" + ], + "url": "https://support.gamigo.com/hc/en-us/articles/204884188-How-do-I-delete-my-Glyph-account-", + "difficulty": "medium", + "notes": "In order to delete your account, you have to log in, go to \"Security and Privacy\" and press \"Delete my account\" and enter a code that has been sent to you with email." + }, + { + "name": "Gmail", + "domains": [ + "gmail.com", + "mail.google.com" + ], + "url": "https://myaccount.google.com/deleteservices", + "difficulty": "medium", + "notes": "Click the trash can next to gmail, enter your new email address, and confirm the verification email. You can request a copy of your data, before you delete it.\nIf you want to delete your entire google account, use the instructions for [Google](https://justdeleteme.xyz/#google)." + }, + { + "name": "GMX", + "domains": [ + "gmx.net", + "agb-server.gmx.net", + "gewinnspiel.gmx.net", + "hilfe.gmx.net", + "newsroom.gmx.net", + "shopping.gmx.net", + "suche.gmx.net", + "vorteile.gmx.net" + ], + "url": "https://www.gmx.net", + "difficulty": "easy", + "notes": "You can delete your account, by following the steps provided here: 'https://hilfe.gmx.net/account/verwalten/loeschen.html'" + }, + { + "name": "GNOME", + "domains": [ + "gnome.org" + ], + "url": "https://extensions.gnome.org/accounts/settings", + "difficulty": "easy", + "notes": "In the section Account removal, you need to accept the option delete your account, and input your password." + }, + { + "name": "Gocatch", + "domains": [ + "gocatch.com", + "gocatch.zendesk.com" + ], + "url": "https://gocatch.zendesk.com/hc/en-us/articles/115005902046-How-to-deactivate-or-reactivate-your-GoCatch-account", + "difficulty": "hard", + "notes": "Either submit a request via the Gocatch support site or send an email to them and ask for your account to be permanently deleted (specify that you do not want it to be able to be reactivated at a later date). Although the information on the support page only mentions account 'deactivation', the company appears to honour requests for deletion.", + "email": "support@gocatch.com" + }, + { + "name": "GoDaddy", + "domains": [ + "godaddy.com", + "account.godaddy.com" + ], + "url": "https://account.godaddy.com/preferences", + "difficulty": "easy", + "notes": "Navigate to account preferences, select to \"Close Account\" and confirm." + }, + { + "name": "GoFundMe", + "domains": [ + "gofundme.com" + ], + "url": "https://www.gofundme.com/settings", + "difficulty": "easy", + "notes": "Log in first, go to the url, scroll down and press delete account." + }, + { + "name": "GOG", + "domains": [ + "gog.com", + "support.gog.com" + ], + "url": "https://support.gog.com/hc/en-us/articles/212806525-How-can-I-delete-my-account-?product=gog", + "difficulty": "hard", + "notes": "Email privacy@gog.com and ask to have your account deleted.", + "email": "privacy@gog.com" + }, + { + "name": "Goggles4u", + "domains": [ + "goggles4u.com", + "goggles4u.co.uk" + ], + "url": "https://www.goggles4u.co.uk/privacy-policy", + "difficulty": "hard", + "notes": "Email steve@goggles4u.com and ask to have your account deleted.", + "email": "steve@goggles4u.com" + }, + { + "name": "Gogo", + "domains": [ + "gogoair.com" + ], + "url": "https://www.gogoair.com/dsar/", + "difficulty": "hard", + "notes": "Select \"Delete My Data\" on the form for the request type.", + "email": "customercare@gogoair.com" + }, + { + "name": "GoJek", + "domains": [ + "go-jek.com" + ], + "url": "https://www.go-jek.com/contact/", + "difficulty": "hard", + "notes": "Email customer service to request deletion." + }, + { + "name": "GoldenLine", + "domains": [ + "goldenline.pl" + ], + "url": "https://www.goldenline.pl/ustawienia/kasuj-konto/", + "difficulty": "easy" + }, + { + "name": "Golf GameBook Scorecard & GPS", + "domains": [ + "golfgamebook.com" + ], + "url": "https://golfgamebook.com/privacy-policy/", + "difficulty": "easy", + "notes": "You can delete profile from account settings in the app." + }, + { + "name": "Good Food", + "domains": [ + "makegoodfood.ca" + ], + "url": "https://www.makegoodfood.ca/en/faq#heading-13", + "difficulty": "impossible", + "notes": "It is impossible to close your account. You can contact the customer service just for them to suspend your account (and payments)." + }, + { + "name": "Good Noows", + "domains": [ + "goodnoows.com" + ], + "url": "https://goodnoows.com", + "difficulty": "easy", + "notes": "On the top bar, click on 'Your name', then click on the 'Delete Account' button at the bottom of the dialog." + }, + { + "name": "Goodreads", + "domains": [ + "goodreads.com" + ], + "url": "https://www.goodreads.com/user/destroy", + "difficulty": "easy" + }, + { + "name": "Google", + "domains": [ + "blogger.com", + "domains.google", + "google.ac", + "google.ad", + "google.ae", + "google.al", + "google.am", + "google.as", + "google.at", + "google.az", + "google.ba", + "google.be", + "google.bf", + "google.bg", + "google.bi", + "google.bj", + "google.bs", + "google.bt", + "google.by", + "google.ca", + "google.cat", + "google.cc", + "google.cd", + "google.cf", + "google.cg", + "google.ch", + "google.ci", + "google.cl", + "google.cm", + "google.cn", + "google.co.ao", + "google.co.bw", + "google.co.ck", + "google.co.cr", + "google.co.id", + "google.co.il", + "google.co.in", + "google.co.jp", + "google.co.ke", + "google.co.kr", + "google.co.ls", + "google.co.ma", + "google.co.mz", + "google.co.nz", + "google.co.th", + "google.co.tz", + "google.co.ug", + "google.co.uk", + "google.co.uz", + "google.co.ve", + "google.co.vi", + "google.co.za", + "google.co.zm", + "google.co.zw", + "google.com", + "google.com.af", + "google.com.ag", + "google.com.ai", + "google.com.ar", + "google.com.au", + "google.com.bd", + "google.com.bh", + "google.com.bn", + "google.com.bo", + "google.com.br", + "google.com.bz", + "google.com.co", + "google.com.cu", + "google.com.cy", + "google.com.do", + "google.com.ec", + "google.com.eg", + "google.com.et", + "google.com.fj", + "google.com.gh", + "google.com.gi", + "google.com.gt", + "google.com.hk", + "google.com.jm", + "google.com.kh", + "google.com.kw", + "google.com.lb", + "google.com.lc", + "google.com.ly", + "google.com.mm", + "google.com.mt", + "google.com.mx", + "google.com.my", + "google.com.na", + "google.com.nf", + "google.com.ng", + "google.com.ni", + "google.com.np", + "google.com.om", + "google.com.pa", + "google.com.pe", + "google.com.pg", + "google.com.ph", + "google.com.pk", + "google.com.pr", + "google.com.py", + "google.com.qa", + "google.com.sa", + "google.com.sb", + "google.com.sg", + "google.com.sl", + "google.com.sv", + "google.com.tj", + "google.com.tr", + "google.com.tw", + "google.com.ua", + "google.com.uy", + "google.com.vc", + "google.com.vn", + "google.cv", + "google.cz", + "google.de", + "google.dj", + "google.dk", + "google.dm", + "google.dz", + "google.ee", + "google.es", + "google.fi", + "google.fm", + "google.fr", + "google.ga", + "google.ge", + "google.gf", + "google.gg", + "google.gl", + "google.gm", + "google.gp", + "google.gr", + "google.gy", + "google.hn", + "google.hr", + "google.ht", + "google.hu", + "google.ie", + "google.im", + "google.io", + "google.iq", + "google.is", + "google.it", + "google.je", + "google.jo", + "google.kg", + "google.ki", + "google.kz", + "google.la", + "google.li", + "google.lk", + "google.lt", + "google.lu", + "google.lv", + "google.md", + "google.me", + "google.mg", + "google.mk", + "google.ml", + "google.mn", + "google.ms", + "google.mu", + "google.mv", + "google.mw", + "google.ne", + "google.nl", + "google.no", + "google.nr", + "google.nu", + "google.pl", + "google.pn", + "google.ps", + "google.pt", + "google.ro", + "google.rs", + "google.ru", + "google.rw", + "google.sc", + "google.se", + "google.sh", + "google.si", + "google.sk", + "google.sm", + "google.sn", + "google.so", + "google.sr", + "google.st", + "google.td", + "google.tg", + "google.zk", + "google.ti", + "google.tm", + "google.tn", + "google.to", + "google.tt", + "google.vg", + "google.vu", + "google.ws", + "accounts.google.com", + "admob.google.com", + "ads.google.com", + "artsandculture.google.com", + "books.google.com", + "chat.google.com", + "classroom.google.com", + "consent.google.com", + "contacts.google.com", + "docs.google.com", + "duo.google.com", + "drive.google.com", + "earth.google.com", + "hangouts.google.com", + "jamboard.google.com", + "keep.google.com", + "maps.google.com", + "marketingplatform.google.com", + "meet.google.com", + "myaccount.google.com", + "news.google.com", + "play.google.com", + "photos.google.com", + "sites.google.com", + "stadia.google.com", + "support.google.com", + "takeout.google.com", + "translate.google.com" + ], + "url": "https://security.google.com/settings/security/deleteaccount", + "difficulty": "easy" + }, + { + "name": "Google One", + "domains": [ + "one.google.com" + ], + "url": "https://myaccount.google.com/deleteservices", + "difficulty": "medium", + "notes": "Click the trash can next to Google One and confirm the verification email. You can request a copy of your data, before you delete it.\nIf you want to delete your entire google account, use the instructions for [Google](https://justdeleteme.xyz/#google)." + }, + { + "name": "Google Pay", + "domains": [ + "pay.google.com" + ], + "url": "https://myaccount.google.com/deleteservices", + "difficulty": "medium", + "notes": "Click the trash can next to Google Pay and confirm the verification email. You can request a copy of your data, before you delete it.\nIf you want to delete your entire google account, use the instructions for [Google](https://justdeleteme.xyz/#google)." + }, + { + "name": "GoPetition", + "domains": [ + "gopetition.com" + ], + "url": "https://www.gopetition.com", + "difficulty": "easy", + "notes": "Enter a reason for closing and your password and click delete, however this is more like a deactivation as you can contact them to undelete it" + }, + { + "name": "Gorila", + "domains": [ + "gorila.com.br", + "app.gorila.com.br" + ], + "url": "https://app.gorila.com.br/app/configuracoes-da-conta/pessoal/preferencias", + "difficulty": "easy", + "notes": "Login, go to your account configuration and click delete account" + }, + { + "name": "GoSquared", + "domains": [ + "gosquared.com" + ], + "url": "https://www.gosquared.com/home/account/close", + "difficulty": "easy", + "notes": "Select a reason for closing and it'll take 2 clicks." + }, + { + "name": "Gov.br", + "domains": [ + "gov.br" + ], + "url": "https://acesso.gov.br/faq/_perguntasdafaq/excluircadastro.html", + "difficulty": "impossible", + "notes": "According to help page, there's no way, nor necessity, to exclude account because it's the way to access public service." + }, + { + "name": "gPodder", + "domains": [ + "gpodder.net" + ], + "url": "https://www.gpodder.net/account/", + "difficulty": "easy", + "notes": "Go to account, select Delete Account at bottom of page, and click the red button labeled Delete Account." + }, + { + "name": "Grab", + "domains": [ + "grab.com" + ], + "url": "https://www.grab.com", + "difficulty": "easy", + "notes": "Swipe left to right from the edge of screen, tap the profile picture, scroll down until you see delete account." + }, + { + "name": "Gradcracker", + "domains": [ + "gradcracker.com" + ], + "url": "https://www.gradcracker.com/my-gradcracker/my-account", + "difficulty": "easy", + "notes": "Visit the linked page, scroll to the bottom of the page, click \"Delete my account\" and confirm." + }, + { + "name": "Graduate-Jobs.com", + "domains": [ + "graduate-jobs.com", + "graduatejobs.com" + ], + "url": "https://www.graduate-jobs.com/sign-in/account/settings", + "difficulty": "easy", + "notes": "Click your name on the top right, click \"Settings\", scroll down and then click \"Delete Account\". You will be prompted to enter your password." + }, + { + "name": "Grailed", + "domains": [ + "grailed.com" + ], + "url": "https://www.grailed.com", + "difficulty": "hard", + "notes": "Send an email to arun@grailed.com and request deletion.", + "email": "arun@grailed.com" + }, + { + "name": "Grammarly", + "domains": [ + "grammarly.com", + "app.grammarly.com" + ], + "url": "https://app.grammarly.com/profile/account", + "difficulty": "easy" + }, + { + "name": "Gravatar", + "domains": [ + "gravatar.com" + ], + "url": "https://gravatar.com", + "difficulty": "impossible", + "notes": "You can't delete your Gravatar Account without deleting your entire WordPress Account." + }, + { + "name": "GreasyFork", + "domains": [ + "greasyfork.org" + ], + "url": "https://greasyfork.org/en/users/delete_info", + "difficulty": "medium", + "notes": "Use the link provided to request account deletion. An e-mail will be sent to confirm it and then you're done." + }, + { + "name": "Green Man Gaming", + "domains": [ + "greenmangaming.com", + "corporate.greenmangaming.com" + ], + "url": "https://corporate.greenmangaming.com/privacy-policy", + "difficulty": "hard", + "email": "dataprotection@greenmangaming.com" + }, + { + "name": "Grindr", + "domains": [ + "grindr.com", + "help.grindr.com" + ], + "url": "https://help.grindr.com/hc/en-us/requests/new?ticket_form_id=24054", + "difficulty": "hard", + "notes": "Submit an account deletion request via their web form, including all requested account details." + }, + { + "name": "GroupMe", + "domains": [ + "groupme.com", + "app.groupme.com" + ], + "url": "https://app.groupme.com/profile", + "difficulty": "easy", + "notes": "Go to the GroupMe profile page, then click 'Delete GroupMe Account'. If you are the owner of any groups, you must transfer them to someone else first." + }, + { + "name": "Groupon (USA)", + "domains": [ + "groupon.com", + "privacy.groupon.com" + ], + "url": "https://privacy.groupon.com/", + "difficulty": "easy", + "notes": "Select \"Delete all my data\" and verify your identity." + }, + { + "name": "Groupon (Worldwide)", + "domains": [ + "groupon.ae", + "groupon.be", + "groupon.ca", + "groupon.com.au", + "groupon.co.uk", + "groupon.de", + "groupon.es", + "groupon.fr", + "groupon.ie", + "groupon.it", + "groupon.nl", + "groupon.pl", + "privacy.groupon.co.uk" + ], + "url": "https://privacy.groupon.co.uk/?modal=take-control", + "difficulty": "easy", + "notes": "Select \"Delete all my data\" and verify your identity." + }, + { + "name": "GrubHub", + "domains": [ + "grubhub.com" + ], + "url": "https://www.grubhub.com/legal/", + "difficulty": "hard", + "notes": "Privacy Policy Letter D: Account e-mail addresses cannot be deleted. However, an Account may be closed and GrubHub will cause the corresponding e-mail address to be scrambled.", + "email": "accounts@grubhub.com" + }, + { + "name": "GTmetrix", + "domains": [ + "gtmetrix.com" + ], + "url": "https://gtmetrix.com/dashboard/delete_account", + "difficulty": "easy", + "notes": "Login to your account and click on 'Request Account Deletion' or follow the link, Answer questions and click on 'Continue', Confirm deletion via entering password and click 'Delete Account'." + }, + { + "name": "The Guardian", + "domains": [ + "theguardian.com", + "profile.theguardian.com" + ], + "url": "https://profile.theguardian.com/delete", + "difficulty": "medium", + "notes": "Scroll to the bottom of the linked page, enter your password and confirm by clicking the \"Delete your account\" button. Deleting your account does not cancel subscriptions, see further information in the linked page." + }, + { + "name": "Guild Wars", + "domains": [ + "arena.net", + "guildwars2.com", + "help.guildwars2.com" + ], + "url": "https://help.guildwars2.com/hc/de/requests/new?ticket_form_id=38933", + "difficulty": "hard", + "notes": "You need to create a support ticket and request for them to delete your account. Before your account gets deleted you need to answer why you want the account to be deleted." + }, + { + "name": "Guilded", + "domains": [ + "guilded.gg" + ], + "url": "https://www.guilded.gg", + "difficulty": "easy", + "notes": "In account settings under Overview select 'Edit account', then 'Delete account', confirm your password and choose a deletion reason." + }, + { + "name": "Guildtag", + "domains": [ + "guildtag.com" + ], + "url": "https://guildtag.com", + "difficulty": "medium", + "notes": "Navigate to your profile editor and click 'Delete Account'. If you want your posts deleted, you must remove them invidivially beforehand." + }, + { + "name": "Gule Sider (Norwegian Yellow Pages)", + "domains": [ + "gulesider.no", + "oppdater.gulesider.no" + ], + "url": "https://oppdater.gulesider.no/person", + "difficulty": "impossible", + "notes": "In order to change your information on Gule Sider you'll have to find your profile by searching it in the search box from the link above, and sign in using BankID. You will be able to edit your information. You can't fully remove yourself (remove your name), but you can remove your address and phone number. Some people don't have BankID, for example minors. If you are a minor without BankID, try asking your parents for help. If you're an adult/teen without BankID you're probably screwed. Their [help page](https://www.gulesider.no/hjelp/mine-opplysninger) about changing your details seems to be out of date." + }, + { + "name": "Gumroad", + "domains": [ + "gumroad.com" + ], + "url": "https://gumroad.com/settings", + "difficulty": "easy", + "notes": "There is a link at the bottom of the Settings page to delete your account." + }, + { + "name": "Gumtree", + "domains": [ + "gumtree.com", + "my.gumtree.com" + ], + "url": "https://my.gumtree.com/manage/details/deactivate", + "difficulty": "easy" + }, + { + "name": "gutefrage", + "domains": [ + "gutefrage.net" + ], + "url": "https://www.gutefrage.net/datenschutz", + "difficulty": "hard", + "notes": "Account deletion requires contacting Customer Support.", + "email": "info@gutefrage.net" + }, + { + "name": "Gyazo", + "domains": [ + "gyazo.com" + ], + "url": "https://gyazo.com/settings", + "difficulty": "easy", + "notes": "Scroll to the bottom of the webpage, and click the red \"Delete Account\" button" + }, + { + "name": "Habbo", + "domains": [ + "habbo.com", + "habbo.com.br", + "habbo.com.tr", + "habbo.de", + "habbo.es", + "habbo.fi", + "habbo.fr", + "habbo.it", + "habbo.nl", + "help.habbo.com" + ], + "url": "https://help.habbo.com/hc/en-us/requests/new", + "difficulty": "hard", + "notes": "Log in on the respective site and submit a request to delete your account." + }, + { + "name": "Habitica", + "domains": [ + "habitica.com" + ], + "url": "https://habitica.com/user/settings/site", + "difficulty": "easy", + "notes": "Log in to your account, click the User icon in the top-right corner, click Settings in the drop-down menu, and click the red Delete Account button at the bottom of the page." + }, + { + "name": "Hack The Box", + "domains": [ + "hackthebox.eu", + "app.hackthebox.eu" + ], + "url": "https://app.hackthebox.eu/profile/settings", + "difficulty": "easy", + "notes": "On the page, click 'Delete Account'." + }, + { + "name": "Hack This Site", + "domains": [ + "hackthissite.org" + ], + "url": "https://www.hackthissite.org/user/delete", + "difficulty": "easy", + "notes": "On the page, click 'CONFIRM MY ACCOUNT DELETION'." + }, + { + "name": "Hackaday.io", + "domains": [ + "hackaday.io" + ], + "url": "https://hackaday.io", + "difficulty": "easy", + "notes": "Login to your account, go to 'Edit my Account', then 'Delete your account'. You will then be prompted to enter your password. Then click delete." + }, + { + "name": "Hacker News", + "domains": [ + "news.ycombinator.com" + ], + "url": "https://news.ycombinator.com/item?id=23623799", + "difficulty": "hard", + "notes": "You can remove your account's data, including your email, but removal of your posts should be negotiated with the staff, as it may harm the project.", + "email": "hn@ycombinator.com" + }, + { + "name": "Hackerrank", + "domains": [ + "www.hackerrank.com" + ], + "url": "https://www.hackerrank.com/settings/account", + "difficulty": "easy", + "notes": "According to the site you must go to the profile settings url and there will be a button called 'delete account' which will delete the account if it is wished to. " + }, + { + "name": "Happy Scribe", + "domains": [ + "happyscribe.co" + ], + "url": "https://www.happyscribe.co/users/edit", + "difficulty": "easy", + "notes": "Go to \"Settings \u2b95 Delete Account \u2b95 Delete my account\"." + }, + { + "name": "Hark Audio", + "domains": [ + "harkaudio.com" + ], + "url": "https://harkaudio.com/support", + "difficulty": "hard", + "notes": "Email hello@harkaudio.com and ask to have your account deleted", + "email": "hello@harkaudio.com", + "email_subject": "Account Deletion Request", + "email_body": "Please delete my Hark Audio account which is registered under this email address." + }, + { + "name": "Harney & Sons Fine Teas", + "domains": [ + "harney.com" + ], + "url": "https://www.harney.com/pages/contact-us", + "difficulty": "hard", + "notes": "Contact them through email or phone and ask for account to be deleted", + "email": "customerservice@harneyteas.com" + }, + { + "name": "HBO Max", + "domains": [ + "hbo.com", + "hbomax.com" + ], + "url": "https://privacyportal.onetrust.com/webform/1b21e05d-c206-4e0b-970e-2d73a23e42e8/6555225c-a911-4af8-bdb5-20158994ece0", + "difficulty": "hard", + "notes": "It is also possible to file an account deletion request in the iOS app (account settings \u2b95 subscription)" + }, + { + "name": "hCaptcha", + "domains": [ + "hcaptcha.com" + ], + "url": "https://www.hcaptcha.com/privacy", + "difficulty": "hard", + "notes": "You must send an email to delete your account.", + "email": "support@hcaptcha.com", + "email_subject": "Account Deletion Request", + "email_body": "Please delete my hCaptcha account which is registered under this email address." + }, + { + "name": "HeadHunter", + "domains": [ + "hh.ru", + "headhunter.ru" + ], + "url": "https://hh.ru/account/delete_me", + "difficulty": "easy" + }, + { + "name": "Headliner", + "domains": [ + "headliner.app", + "learn.headliner.app/" + ], + "url": "https://learn.headliner.app/hc/en-us/articles/360003796513-How-do-I-delete-my-account-", + "difficulty": "hard", + "notes": "You have to send an email to support@headliner.app", + "email": "support@headliner.app" + }, + { + "name": "HeadshotGenerator", + "domains": [ + "headshotgenerator.io" + ], + "url": "https://www.headshotgenerator.io/dashboard", + "difficulty": "hard", + "notes": "You have to send an email.", + "email": "contact@headshotgenerator.io" + }, + { + "name": "Headspace", + "domains": [ + "headspace.com", + "my.headspace.com" + ], + "url": "https://my.headspace.com/profile/account", + "difficulty": "easy", + "notes": "Click \"Delete my account\" and follow the instructions that appear." + }, + { + "name": "HelloFax", + "domains": [ + "hellofax.com" + ], + "url": "https://www.hellofax.com/home/myAccount", + "difficulty": "easy", + "notes": "Click \"Delete my account\" and follow the instructions that appear." + }, + { + "name": "HelloFresh", + "domains": [ + "hellofresh.com" + ], + "url": "https://www.hellofresh.com/contact-page/", + "difficulty": "hard", + "notes": "Click \"Chat\" and request that the agent delete your account. Your e-mail must be provided." + }, + { + "name": "HelloWallet", + "domains": [ + "hellowallet.com", + "my.hellowallet.com" + ], + "url": "https://my.hellowallet.com", + "difficulty": "easy", + "notes": "Login, go to setting, click 'Cancel My Membership' and confirm." + }, + { + "name": "HelpScout", + "domains": [ + "helpscout.com", + "docs.helpscout.com" + ], + "url": "https://docs.helpscout.com/article/473-cancel-your-help-scout-account", + "difficulty": "easy", + "notes": "Login, go to Account and click on Cancel Account" + }, + { + "name": "Hepsiburada", + "domains": [ + "hepsiburada.com" + ], + "url": "https://www.hepsiburada.com/cozummerkezi/sikca-sorulan-sorular-detay/220", + "difficulty": "hard", + "notes": "You have to fill out a request form in order to get your account deleted." + }, + { + "name": "Heroes and Generals", + "domains": [ + "heroesandgenerals.com", + "account.heroesandgenerals.com", + "support.heroesandgenerals.com" + ], + "url": "https://account.heroesandgenerals.com/deleteaccount.aspx/", + "difficulty": "medium", + "notes": "You need to fill the form and submit it. There is a 30 days period in which you can reverse your decision. After that your account will be deleted." + }, + { + "name": "Heroku", + "domains": [ + "heroku.com", + "dashboard.heroku.com" + ], + "url": "https://dashboard.heroku.com/account", + "difficulty": "easy", + "notes": "\u201cClose your account...\u201d link at the bottom of the page." + }, + { + "name": "HeroX", + "domains": [ + "herox.com" + ], + "url": "https://www.herox.com/profile/edit", + "difficulty": "easy", + "notes": "Account deletion button can be found at the bottom of the profile edit page." + }, + { + "name": "Hetzner", + "domains": [ + "hetzner.com" + ], + "url": "https://accounts.hetzner.com/account/delete", + "difficulty": "easy", + "notes": "Enter Hetzner account managment, find user deletion seciton and click Delete User Account." + }, + { + "name": "Hi-Rez Studios", + "domains": [ + "hirezstudios.com", + "my.hirezstudios.com" + ], + "url": "https://my.hirezstudios.com/security", + "difficulty": "hard", + "notes": "Go to the link provided, make sure the email address is verified and on the Security Tab click \"CLICK HERE TO REQUEST AN ACCOUNT DELETION OR MAKE AN ACCOUNT DATA REQUEST\" and follow the steps on the screen." + }, + { + "name": "Hi5", + "domains": [ + "hi5.com" + ], + "url": "https://www.hi5.com/account_cancel.html", + "difficulty": "easy" + }, + { + "name": "hide.me", + "domains": [ + "hide.me", + "community.hide.me", + "member.hide.me" + ], + "url": "https://member.hide.me/en/settings/delete-account/form", + "difficulty": "easy", + "notes": "Click \"Account settings\" and then the red button \"Delete my account\" at the bottom of the page." + }, + { + "name": "HiNative", + "domains": [ + "hinative.com" + ], + "url": "https://hinative.com/users/edit?type=delete_my_account", + "difficulty": "easy", + "notes": "Click \"Settings\", then \"My Account\", then \"Delete my account\", and finally click the red \"Delete my account\" button." + }, + { + "name": "HitBTC", + "domains": [ + "hitbtc.com", + "support.hitbtc.com" + ], + "url": "https://support.hitbtc.com/en/support/tickets/new", + "difficulty": "hard", + "notes": "Contact the customer support using the contact form and request the deletion of your account. After receiving a response from support, confirm the deletion by replying to that email. Note: Your balance must be empty before doing this process." + }, + { + "name": "HitFilm", + "domains": [ + "fxhome.com" + ], + "url": "https://fxhome.com/privacy", + "difficulty": "hard", + "notes": "Must email them in order to get personal data deleted.", + "email": "privacy@fxhome.com" + }, + { + "name": "Hive Social", + "domains": [ + "hivesocial.app" + ], + "url": "https://www.hivesocial.app/help-center/deactivation", + "difficulty": "hard", + "notes": "Email their support with username and associated Email address to delete your account.", + "email": "support@hivesocial.app" + }, + { + "name": "HOL Virtual Hogwarts", + "domains": [ + "hol.org.uk" + ], + "url": "https://hol.org.uk/profile.php?view=quithol", + "difficulty": "impossible", + "notes": "You can remove information and manually quit HOL, but your account stays forever." + }, + { + "name": "Holiday Pirates", + "domains": [ + "holidaypirates.com", + "urlaubspiraten.de", + "urlaubspiraten.at", + "piratinviaggio.it", + "vakantiepiraten.nl", + "wakacyjnipiraci.pl", + "voyagespirates.fr", + "viajerospiratas.es", + "ferienpiraten.ch", + "semesterpiraterna.se", + "travelpirates.com" + ], + "url": "http://www.holidaypirates.com/user/profile/edit", + "difficulty": "easy", + "notes": "\"Delete\" button at the bottom of the page." + }, + { + "name": "Holopin", + "domains": [ + "holopin.io", + "blog.holopin.io", + "boards.holopin.io", + "docs.holopin.io", + "holopin.me" + ], + "url": "https://www.holopin.io/privacy.html", + "difficulty": "hard", + "notes": "Account deletion requires contacting Customer Support.", + "email": "support@holopin.io" + }, + { + "name": "Honey", + "domains": [ + "joinhoney.com", + "help.joinhoney.com" + ], + "url": "https://www.joinhoney.com/settings/account", + "difficulty": "easy", + "notes": "Visit the linked and page, click \"DeleteAccount\" and confirm. For more details see this [help article](https://help.joinhoney.com/article/53-how-do-i-delete-my-honey-account)." + }, + { + "name": "Honeypot.io", + "domains": [ + "honeypot.io", + "app.honeypot.io", + "blog.honeypot.io", + "cult.honeypot.io" + ], + "url": "https://app.honeypot.io/profile", + "difficulty": "easy", + "notes": "Go to the profile page, click the cog icon, click 'delete your account' and then 'yes delete'" + }, + { + "name": "Hooked (Deals)", + "domains": [ + "hookedapp.com" + ], + "url": "https://www.hookedapp.com/", + "difficulty": "impossible", + "notes": "Hooked's privacy policy contains no provisions for deleting personal information once that information has been given, unless that information is inaccurate or the user is less than eighteen years of age. Falsely representing your age to get an account deleted is not recommended. The best that you can do is to forget your login credentials. If you re-used your account password elsewhere, be sure to change your password on those sites. (Changing your Hooked account password is also impossible.)" + }, + { + "name": "Hoop", + "domains": [ + "hoop.photo" + ], + "url": "https://hoop.photo/", + "difficulty": "impossible", + "notes": "Navigate to 'Account' \u2b95 'gear icon' \u2b95 'delete account' \u2b95 'delete'. This will remove some of your account data, but not all. There is no way to remove all data, despite their privacy policy claiming it is." + }, + { + "name": "Hostelsclub", + "domains": [ + "hostelsclub.com" + ], + "url": "https://www.hostelsclub.com", + "difficulty": "impossible", + "notes": "You can remove every information from your account or if you signed up using a social network disconnect it." + }, + { + "name": "Hostinger", + "domains": [ + "hostinger.com", + "hpanel.hostinger.com" + ], + "url": "https://hpanel.hostinger.com/profile/personal-information", + "difficulty": "easy", + "notes": "Click on 'Delete account' at the bottom of the page, click on continue and then confirm you'd like to delete your account." + }, + { + "name": "Hot or Not", + "domains": [ + "hotornot.com" + ], + "url": "https://hotornot.com", + "difficulty": "easy", + "notes": "Sign in to your account, go to the 'Account' options in your settings and delete your profile. See also ['Can I deactivate or delete my Profile?'](https://hotornot.com/privacy/)" + }, + { + "name": "Hotels.com", + "domains": [ + "hotels.com", + "hoteis.com" + ], + "url": "https://www.hotels.com/user/delete", + "difficulty": "easy" + }, + { + "name": "Hotspot Shield", + "domains": [ + "hotspotshield.com", + "support.hotspotshield.com" + ], + "url": "https://www.hotspotshield.com", + "difficulty": "hard", + "notes": "If you're a paid user, you can contact support. If you're a free user, it's only possible if you have regulations that require deletion." + }, + { + "name": "Houzz", + "domains": [ + "houzz.com", + "help.houzz.com" + ], + "url": "https://help.houzz.com/s/article/How-do-I-delete-my-account", + "difficulty": "hard", + "notes": "Your Houzz \u2b95 Edit Profile and Settings \u2b95 Advanced Settings \u2b95 Deactivate Houzz Account (at the bottom of the page)", + "email": "EUprivacy@houzz.com" + }, + { + "name": "Hover", + "domains": [ + "hover.com", + "help.hover.com" + ], + "url": "https://help.hover.com/hc/en-us/articles/222421328-Canceling-services-with-Hover", + "difficulty": "hard", + "notes": "First Cancel your service with Hover.com. Then proceeed to contact Customer support to submit a request for account deletion.", + "email": "help@hover.com" + }, + { + "name": "HowLongToBeat", + "domains": [ + "howlongtobeat.com" + ], + "url": "https://howlongtobeat.com/", + "difficulty": "easy", + "notes": "Go to 'My Account' \u2b95 'Options', click 'Delete Profile & Data' and confirm." + }, + { + "name": "HoYoverse", + "domains": [ + "mihoyo.com", + "account.hoyoverse.com" + ], + "url": "https://account.hoyoverse.com/?lang=en#/account/safetySettings", + "difficulty": "medium", + "notes": "Log in to your HoYoverse account, navigate to the 'Requesting Account Deletion' button at the bottom of the page, then follow the steps given. Afterwards, your account will be permanently deleted after 30 days." + }, + { + "name": "HP", + "domains": [ + "www8.hp.com", + "hp.com" + ], + "url": "https://www8.hp.com/us/en/privacy/ww-privacy-form.html", + "difficulty": "hard", + "notes": "Select language \u2b95 Fill submission \u2b95 Submit" + }, + { + "name": "HRK Game", + "domains": [ + "hrkgame.com" + ], + "url": "https://www.hrkgame.com/en/account/settings/privacy", + "difficulty": "easy", + "notes": "Delete Account \u2b95 proceed \u2b95 confirm \u2b95 enter password and click ok." + }, + { + "name": "HTC", + "domains": [ + "viveport.com", + "htcsense.com", + "htc.com" + ], + "url": "https://www.htc.com/us/terms/privacy", + "difficulty": "hard", + "email": "global-privacy@htc.com" + }, + { + "name": "HUAWEI ID", + "domains": [ + "huawei.com" + ], + "url": "https://consumer.huawei.com/ph/support/content/en-us00681307/", + "difficulty": "easy", + "notes": "On mobile, go to Settings \u2b95 HUAWEI ID \u2b95 Account Security \u2b95 More \u2b95 Security Center \u2b95 Delete account. On the desktop, id.cloud.huawei.com \u2b95 Account Security \u2b95 Security Center \u2b95 Delete account." + }, + { + "name": "Huddle", + "domains": [ + "huddle.com" + ], + "url": "https://huddle.zendesk.com/hc/en-us/articles/200124703-How-do-I-cancel-my-Huddle-account-", + "difficulty": "hard" + }, + { + "name": "Huggingface", + "domains": [ + "huggingface.co", + "discuss.huggingface.co", + "status.huggingface.co" + ], + "url": "https://huggingface.co/settings/account", + "difficulty": "easy", + "notes": "Log in to your account, visit your [account settings](https://huggingface.co/settings/account), scroll to the bottom and click \"Delete my account\", and confirm." + }, + { + "name": "Hulu", + "domains": [ + "hulu.com", + "secure.hulu.com" + ], + "url": "https://secure.hulu.com/users/delete", + "difficulty": "easy" + }, + { + "name": "Humble Bundle", + "domains": [ + "humblebundle.com", + "dsar.humblebundle.com" + ], + "url": "https://dsar.humblebundle.com", + "difficulty": "medium", + "notes": "The easiest method is to submit a Data Subject Access Request at their [DSAR Privacy Portal](https://dsar.humblebundle.com/) to request account deletion. Alternatively, you can also [submit a support request](https://support.humblebundle.com/hc/en-us/requests/new) for account deletion. In the linked page under \"What can we help you with?\" select \"Humble Bundle Account\" \u2b95 \"Delete Account\", fill in your email, enter \"Account deletion\" as subject, add your honest reason for account deletion in the message, and submit. Someone from support should contact you and guide you further." + }, + { + "name": "Hype Machine", + "domains": [ + "hypem.com" + ], + "url": "http://hypem.com/remove_account", + "difficulty": "easy" + }, + { + "name": "Hypixel Forums", + "domains": [ + "hypixel.net", + "status.hypixel.net", + "support.hypixel.net" + ], + "url": "https://hypixel.net/data-request", + "difficulty": "hard", + "notes": "Complete the form on the linked page. They require some PII such as name, address, and a government-issued ID." + }, + { + "name": "IBM Watson Media", + "domains": [ + "video.ibm.com", + "support.video.ibm.com" + ], + "url": "https://support.video.ibm.com/hc/en-us/articles/207851817-How-Do-I-Delete-My-IBM-Video-Streaming-Account-", + "difficulty": "easy" + }, + { + "name": "IBMid", + "domains": [ + "ibm.com" + ], + "url": "https://www.ibm.com/ibmid/myibm/help/us/helpdesk.html", + "difficulty": "hard", + "notes": "Contact your relevant help desk, and an email should be sent back with confirmation of deletion. You need to contact ibmidsupportuk@ibm.com, if you live in one if the following countries: Austria, Belgium, Denmark, Finland, France, Germany, Italy, Netherlands, Sweden, Switzerland or UK. Else you should contact ibmidsupport@ibm.com.", + "email": "ibmidsupport@ibm.com" + }, + { + "name": "Ibotta", + "domains": [ + "ibotta.com", + "help.ibotta.com" + ], + "url": "https://help.ibotta.com/hc/en-us/articles/225528727-How-Do-I-Cancel-My-Ibotta-Account-", + "difficulty": "hard", + "email": "accountsupport@ibotta.com" + }, + { + "name": "Icedrive", + "domains": [ + "icedrive.net" + ], + "url": "https://icedrive.net/dashboard/#/page/settings", + "difficulty": "easy", + "notes": "Visit the linked page. Select the 'Privacy' tab, scroll down, click \"Delete Account, Files, and Data\" then confirm your password." + }, + { + "name": "Icontem", + "domains": [ + "icontem.com", + "accounts.icontem.com", + "phpclasses.org", + "jsclasses.org" + ], + "url": "https://accounts.icontem.com/remove", + "difficulty": "easy" + }, + { + "name": "ICQ", + "domains": [ + "icq.com" + ], + "url": "https://www.icq.com/delete-account/", + "difficulty": "easy" + }, + { + "name": "ID.me", + "domains": [ + "id.me", + "account.id.me" + ], + "url": "https://account.id.me/signin/close", + "difficulty": "easy" + }, + { + "name": "iFixit", + "domains": [ + "ifixit.com" + ], + "url": "https://forms.obsecom.eu/requests/654931-678694-057240-634891", + "difficulty": "hard", + "notes": "Visit the linked page and complete the form. In addition to a confirmation email, you may be required to submit further proof of identity." + }, + { + "name": "IFTTT", + "domains": [ + "ifttt.com" + ], + "url": "https://ifttt.com/settings/confirm_deletion", + "difficulty": "easy", + "notes": "Visit the linked page and follow the instructions. For good measure you might want to disconnect [your services](https://ifttt.com/my_services)." + }, + { + "name": "iHeart", + "domains": [ + "iheart.com", + "help.iheart.com/" + ], + "url": "https://help.iheart.com/hc/en-us/articles/4424516427021-How-to-Delete-your-iHeart-Account", + "difficulty": "medium", + "notes": "You must use the mobile app to delete your account without contacting support." + }, + { + "name": "illa / ILLA Cloud", + "domains": [ + "illa.ai", + "illacloud.com", + "blog.illacloud.com", + "builder.illacloud.com", + "cloud.illacloud.com" + ], + "url": "https://www.illacloud.com/docs/privacy-policy#your-rights", + "difficulty": "hard", + "notes": "Account deletion requires contacting Customer Support.", + "email": "vincent@illasoft.com" + }, + { + "name": "ImageShack", + "domains": [ + "imageshack.com" + ], + "url": "https://imageshack.com/my/settings", + "difficulty": "easy", + "notes": "Visit the linked page and click the 'Delete Account' button." + }, + { + "name": "IMDb", + "domains": [ + "imdb.com", + "secure.imdb.com" + ], + "url": "https://www.imdb.com/registration/delete", + "difficulty": "easy" + }, + { + "name": "Imgur", + "domains": [ + "imgur.com" + ], + "url": "https://imgur.com/account/settings", + "difficulty": "easy" + }, + { + "name": "Immomio", + "domains": [ + "immomio.com", + "tenant.immomio.com" + ], + "url": "https://tenant.immomio.com/de/settings/account", + "difficulty": "easy", + "notes": "Login, go to your account settings and click 'Delete Account'." + }, + { + "name": "Immowelt", + "domains": [ + "immowelt.de" + ], + "url": "https://www.immowelt.de/benutzerkonto/loeschen/", + "difficulty": "easy", + "notes": "Login, go to your account settings and click on 'Delete Account' at the bottom." + }, + { + "name": "imo.im", + "domains": [ + "imo.im" + ], + "url": "https://imo.im", + "difficulty": "easy", + "notes": "You must login, go to your account settings and then click on the 'Delete Account' link on the bottom left." + }, + { + "name": "Indeed", + "domains": [ + "indeed.com" + ], + "url": "https://indeed.com", + "difficulty": "easy", + "notes": "You must login, go to your account settings and then click on the 'Close my account'." + }, + { + "name": "IndieGala", + "domains": [ + "indiegala.com", + "docs.indiegala.com" + ], + "url": "https://docs.indiegala.com/support/contacts.html", + "difficulty": "hard", + "notes": "Contact the customer support via email and request the deletion of your account. In order for them to identify your account, make the request through the same email address that you have used to create your IndieGala account.", + "email": "support@indiegala.com", + "email_subject": "[ Permanently Account Deletion Request ]", + "email_body": "I have no further interest in using the services provided by IndieGala, so I would like my account to be permanently deleted." + }, + { + "name": "Indiegogo", + "domains": [ + "indiegogo.com" + ], + "url": "https://www.indiegogo.com", + "difficulty": "easy", + "notes": "Go to \u201cMy Settings\u201d, scroll down to the bottom, and click the \u201cDelete\u201d button." + }, + { + "name": "Infinite Story", + "domains": [ + "infinite-story.com" + ], + "url": "https://infinite-story.com/my/settings.php", + "difficulty": "easy", + "notes": "Click \"Delete Infinite Story Account\" at the bottom of the page." + }, + { + "name": "Infinity Free", + "domains": [ + "infinityfree.net", + "app.infinityfree.net" + ], + "url": "https://app.infinityfree.net/accounts/", + "difficulty": "easy", + "notes": "Visit the URL. Click on your account name. Click on 'Account Settings'. Scroll down to click 'Deactivate Account'. Note: It takes 20-60 days for complete account deletion." + }, + { + "name": "InfoCasas", + "domains": [ + "infocasas.com.uy" + ], + "url": "https://www.infocasas.com.uy/dashboard", + "difficulty": "hard", + "notes": "Contact the customer support via email and request the deletion of your account. In order for them to identify your account, make the request through the same email address that you have used to create your account.", + "email": "info@infocasas.com.uy" + }, + { + "name": "InfoJobs", + "domains": [ + "infojobs.net" + ], + "url": "https://www.infojobs.net/candidate/settings/settings-cancel-account/cancel-account.xhtml", + "difficulty": "easy" + }, + { + "name": "Ingress", + "domains": [ + "ingress.com", + "support.ingress.com" + ], + "url": "https://support.ingress.com/hc/en-us/articles/206618198-I-want-to-delete-my-account", + "difficulty": "hard", + "notes": "You need to fill in the form linked in the support article by clicking \"contact us\". Fill in your email address, agent name, device you play on and submit the form." + }, + { + "name": "Inkbunny", + "domains": [ + "inkbunny.net" + ], + "url": "https://inkbunny.net/account.php#remove", + "difficulty": "easy", + "notes": "There is a checkbox to be ticked and you need to enter your current password for confirmation. Deletion has a grace period of 2 days." + }, + { + "name": "InnoGames", + "domains": [ + "innogames.com", + "goodbye.innogames.com" + ], + "url": "https://goodbye.innogames.com", + "difficulty": "easy" + }, + { + "name": "Inoreader", + "domains": [ + "inoreader.com" + ], + "url": "https://www.inoreader.com", + "difficulty": "easy", + "notes": "Select 'Reset or cancel' under preferences and click on 'Cancel account'." + }, + { + "name": "insights", + "domains": [ + "insights.gg" + ], + "url": "https://insights.gg/dashboard/settings/profile", + "difficulty": "easy", + "notes": "Delete all of your teams, click on Delete Account and type 'DELETE'" + }, + { + "name": "Instacart", + "domains": [ + "instacart.com" + ], + "url": "https://www.instacart.com/user_privacy/form/", + "difficulty": "easy" + }, + { + "name": "Instagram", + "domains": [ + "instagram.com" + ], + "url": "https://instagram.com/accounts/remove/request/permanent/", + "difficulty": "easy" + }, + { + "name": "Instapaper", + "domains": [ + "instapaper.com" + ], + "url": "https://www.instapaper.com/user/delete", + "difficulty": "easy" + }, + { + "name": "Instructables", + "domains": [ + "instructables.com" + ], + "url": "https://www.instructables.com", + "difficulty": "easy", + "notes": "Click your profile icon in the top right, click settings, and click 'Delete' under 'Delete Your Account'. You will be prompted for your password again before deleting." + }, + { + "name": "Intel", + "domains": [ + "intel.com" + ], + "url": "https://www.intel.com/content/www/us/en/secure/my-intel/frequently-asked-questions.html", + "difficulty": "easy", + "notes": "Navigate to your profile settings, click the pencil icon on the top right corner and then \"Request personal data deletion\". The account will be immediately deleted and you'll get a e-mai confirming the action." + }, + { + "name": "Intelius People Finder", + "domains": [ + "intelius.com" + ], + "url": "https://www.intelius.com/dashboard/support/contact", + "difficulty": "impossible", + "notes": "While Intellius will not delete your account login, you can request to have your records removed. Send an email to Intelius support to request deletion. A support representative will eventually respond with instructions on how to delete your account. Follow these directions CAREFULLY, as they describe a process that is VERY similar to a Public Records Opt Out, which does not necessarily involve data deletion. Note: The request process may include selecting your public records from a list. If your records do not appear, scroll to the bottom of the list and click the link to \"continue with your CCPA request\". Click the link in the resulting email confirmation. Within 24 hours, your records should no longer appear on Intelius, barring extenuating circumstances. To permanently close your account, the best option is to change and forget your login credentials.", + "email": "support@mailer.intelius.com", + "email_subject": "Information Deletion Request" + }, + { + "name": "Intelligence X", + "domains": [ + "intelx.io" + ], + "url": "https://intelx.io/account?tab=settings", + "difficulty": "easy", + "notes": "Click \"Delete Account\" button and check the \"I want to permanently delete my Intelligence X account.\" box " + }, + { + "name": "Interactive Brokers", + "domains": [ + "interactivebrokers.com" + ], + "url": "https://www.interactivebrokers.com/RegTemplates/PDF/closeAccount.pdf", + "difficulty": "hard", + "notes": "In order to delete your account, you have to fill out the PDF linked and send it to the email linked below.", + "email": "accountmanagement@interactivebrokers.com" + }, + { + "name": "Intercity", + "domains": [ + "intercity.pl", + "bilet.intercity.pl" + ], + "url": "https://bilet.intercity.pl/login", + "difficulty": "easy", + "notes": "After signing in go to \"My data\", scroll down, click \"To remove account click here\", and provide password. If you bought any ticket on this account, it will be deleted 15 months after the last purchase (account will be locked, and you won't have any option to buy tickets), otherwise it will be deleted immediately." + }, + { + "name": "Internet Archive", + "domains": [ + "archive.org", + "web.archive.org" + ], + "url": "https://archive.org/account/index.php?settings=1", + "difficulty": "easy", + "notes": "Go to settings, enter your password to unlock modifying settings, click \"Delete Account\". Your library items will remain unless you remove them before deleting your account." + }, + { + "name": "Internetometer", + "domains": [ + "internetometer.com" + ], + "url": "https://internetometer.com", + "difficulty": "impossible", + "notes": "Site provides no user account management interface or account deletion options. Email sent to internets@technoized.com was never replied to." + }, + { + "name": "Interrail", + "domains": [ + "interrail.eu" + ], + "url": "https://www.interrail.eu/", + "difficulty": "hard", + "notes": "Send an email to the email linked below and ask to delete your Interrail account. You will get an automatic reply as a confirmation that they're processing your request to remove your personal data. If there are legal grounds preventing them from (immediately) processing your request they will send you an email.", + "email": "privacy@eurail.com", + "email_body": "Please delete my Interrail account." + }, + { + "name": "Invajo", + "domains": [ + "invajo.com" + ], + "url": "https://home.invajo.com/contact", + "difficulty": "hard", + "notes": "Create a ticket on the website, email them, or call them at: +46 (0) 46-270 60 60.", + "email": "support@invajo.com" + }, + { + "name": "The Inventory", + "domains": [ + "theinventory.com" + ], + "url": "https://notice.sp-prod.net/sar/index.html?message_id=539278&account_id=1195&ccpa_type=delete", + "difficulty": "hard", + "notes": "Fill out the form using the email address of your account and click on the verification link that is sent." + }, + { + "name": "Investopedia", + "domains": [ + "investopedia.com" + ], + "url": "https://invcontent.zendesk.com/hc/en-us/articles/360017064553-Account-Deletion", + "difficulty": "hard", + "notes": "You must send an email requesting the account deletion.", + "email": "privacy@investopedia.com" + }, + { + "name": "InVideo", + "domains": [ + "invideo.io" + ], + "url": "https://help.invideo.io/articles/56692-how-do-i-delete-my-account", + "difficulty": "hard", + "notes": "Account deletion requires contacting Customer Support.", + "email": "support@invideo.io" + }, + { + "name": "Invidious", + "domains": [ + "yewtu.be", + "invidious.snopyta.org", + "invidious.kavin.rocks", + "vid.puffyan.us", + "invidious.exonip.de", + "ytprivate.com", + "invidious.silkky.cloud", + "invidious-us.kavin.rocks", + "inv.riverside.rocks", + "y.com.cm", + "ytb.trom.tf", + "invidious.s1gm4.eu", + "invidious.namazso.eu", + "yt.cyberhost.uk" + ], + "url": "https://redirect.invidious.io/preferences", + "difficulty": "easy", + "notes": "Login through your instance, go to your preferences and click 'Delete account' at the bottom of the page." + }, + { + "name": "Invision", + "domains": [ + "invisionapp.com", + "support.invisionapp.com" + ], + "url": "https://support.invisionapp.com/hc/en-us/requests/new", + "difficulty": "hard", + "notes": "You need to request them through the support form providing the email you signed up with. All files deleted will not be restorable." + }, + { + "name": "IO Interactive", + "domains": [ + "ioi.dk" + ], + "url": "https://account.ioi.dk/", + "difficulty": "easy", + "notes": "Go to the deletion URL, 'login' \u2b95 'account settings' \u2b95 'delete account'." + }, + { + "name": "ipinfo.io", + "domains": [ + "ipinfo.io" + ], + "url": "https://ipinfo.io/faq/article/126-deleting-ipinfo-account", + "difficulty": "hard", + "notes": "Send them an email asking to delete your account.", + "email": "support@ipinfo.io" + }, + { + "name": "IRCCloud", + "domains": [ + "irccloud.com" + ], + "url": "https://www.irccloud.com/?/settings=account", + "difficulty": "easy", + "notes": "On the linked page, click 'Delete your account'." + }, + { + "name": "Issuu", + "domains": [ + "issuu.com" + ], + "url": "https://issuu.com/home/settings", + "difficulty": "easy", + "notes": "Near the bottom of the linked page, expand the 'Manage Account' section and click 'Delete My Account'. Closing your account will delete your profile and all of your publications. There is no going back, so don't say we didn't warn you." + }, + { + "name": "iStudiez", + "domains": [ + "istudentpro.com", + "support.istudentpro.com" + ], + "url": "https://support.istudentpro.com/support/solutions/articles/3000068641-delete-cloud-sync-account", + "difficulty": "hard", + "notes": "Contact support and ask for your account to be removed.", + "email": "support@istudentpro.com" + }, + { + "name": "itch.io", + "domains": [ + "itch.io" + ], + "url": "https://itch.io/support", + "difficulty": "hard", + "notes": "You need to contact support via email to get your account deleted.", + "email": "support@itch.io" + }, + { + "name": "ITV", + "domains": [ + "itv.com" + ], + "url": "https://www.itv.com/watch/user/profile", + "difficulty": "easy", + "notes": "Use the delete account option at the bottom of the page." + }, + { + "name": "iubenda", + "domains": [ + "iubenda.com" + ], + "url": "https://www.iubenda.com/en/account", + "difficulty": "easy", + "notes": "Click Account & Billing info, then under General info click Delete your account." + }, + { + "name": "iversity", + "domains": [ + "iversity.com" + ], + "url": "https://iversity.org/de/user/deactivate", + "difficulty": "easy" + }, + { + "name": "IVPN", + "domains": [ + "ivpn.net" + ], + "url": "https://www.ivpn.net/account/", + "difficulty": "easy", + "notes": "Go to account settings and click on \"Delete Account\"" + }, + { + "name": "Jalopnik", + "domains": [ + "jalopnik.com" + ], + "url": "https://notice.sp-prod.net/sar/index.html?message_id=539278&account_id=1195&ccpa_type=delete", + "difficulty": "hard", + "notes": "Fill out the form using the email address of your account and click on the verification link that is sent." + }, + { + "name": "JavaRush", + "domains": [ + "javarush.com" + ], + "url": "https://javarush.com/en/settings/security", + "difficulty": "easy", + "notes": "Log in. Press the url. Scroll down and see button 'You can delete your account and your personal data'" + }, + { + "name": "JB Hi-Fi", + "domains": [ + "jbhifi.com.au", + "support.jbhifi.com.au" + ], + "url": "https://support.jbhifi.com.au/hc/en-au/requests/new", + "difficulty": "hard", + "notes": "Submit a request to their support asking for account deletion. Select 'My JB Account' as your request type and 'Account Issues' as your account enquiry type." + }, + { + "name": "JDate.com", + "domains": [ + "jdate.com" + ], + "url": "https://www.jdate.com", + "difficulty": "easy", + "notes": "Under 'Membership Management' click 'Remove my Profile'. Fill out the survey and submit to delete your profile." + }, + { + "name": "JetBrains", + "domains": [ + "jetbrains.com", + "account.jetbrains.com" + ], + "url": "https://account.jetbrains.com/delete-account", + "difficulty": "easy", + "notes": "License keys will not be deleted." + }, + { + "name": "JetBrains Academy (Hyperskill)", + "domains": [ + "hyperskill.org" + ], + "url": "https://hyperskill.org/delete-account", + "difficulty": "easy", + "notes": "Visit the link to delete your account and enter your password. Note that it won't automatically cancel your subscription." + }, + { + "name": "Jezebel", + "domains": [ + "jezebel.com" + ], + "url": "https://notice.sp-prod.net/sar/index.html?message_id=539278&account_id=1195&ccpa_type=delete", + "difficulty": "hard", + "notes": "Fill out the form using the email address of your account and click on the verification link that is sent." + }, + { + "name": "Jimdo", + "domains": [ + "jimdo.com", + "help.jimdo.com" + ], + "url": "https://help.jimdo.com/hc/en-us/articles/115005540586-How-do-I-delete-my-Jimdo-account-", + "difficulty": "medium", + "notes": "You can instantly delete your free account. The paid version requires you to first cancel your subscription." + }, + { + "name": "Jobscan", + "domains": [ + "jobscan.co" + ], + "url": "https://www.jobscan.co/privacy", + "difficulty": "hard", + "notes": "Contact customer support to request account deletion. They should respond and delete your account within 30 days, after which your login credentials will no longer work.", + "email": "support@jobscan.co", + "email_subject": "Request for Permanent Removal of Personal Information", + "email_body": "Hello,%0D%0A%0D%0AI would like to permanently remove my account and information from Jobscan, as per your Privacy Policy. My account email address is XXXXXXXXXXX.%0D%0A%0D%0AThank you" + }, + { + "name": "Jobstreet", + "domains": [ + "jobstreet.com", + "myjobstreet-id.jobstreet.co.id" + ], + "url": "https://myjobstreet-id.jobstreet.co.id/registration/delete-account.php", + "difficulty": "medium", + "notes": "Log in. Go to your account setting on top bar. Select 'Delete my Account' on secondary bar. You need to pull out all of your applications before continuing." + }, + { + "name": "Joinrs", + "domains": [ + "joinrs.com", + "community.joinrs.com", + "careers.joinrs.com", + "business.joinrs.com", + "opportunita.tutored.me" + ], + "url": "https://www.joinrs.com/en/profile/settings/", + "difficulty": "easy", + "notes": "Click on your name at the top right, then \"Settings\", \"Delete account\" and confirm." + }, + { + "name": "Jolla Account", + "domains": [ + "jolla.com", + "account.jolla.com" + ], + "url": "https://account.jolla.com/profile/settings/confirm_delete_profile", + "difficulty": "easy" + }, + { + "name": "Joom", + "domains": [ + "joom.com" + ], + "url": "https://www.joom.com/en/privacy", + "difficulty": "easy", + "notes": "Login to your account, scroll down to the bottom of the privacy policy and click \"delete account\". Confirm the deletion dialog. OPTIONAL: Enter an email address to be notified of when deletion completes." + }, + { + "name": "Jottacloud", + "domains": [ + "jottacloud.com" + ], + "url": "https://www.jottacloud.com/account/delete", + "difficulty": "easy", + "notes": "Log in. Type in password. Press 'delete'." + }, + { + "name": "Journal du geek", + "domains": [ + "journaldugeek.com" + ], + "url": "http://www.journaldugeek.com/editer-profil/", + "difficulty": "easy", + "notes": "Log in. Go to your profile, scroll down and click 'Supprimer mon profil'" + }, + { + "name": "Journey", + "domains": [ + "journey.cloud" + ], + "url": "https://journey.cloud", + "difficulty": "impossible", + "notes": "If you go to the profile settings, you can deactivate the account, but there is always a button for re-enabling it, even if you delete its 'Google Drive' data" + }, + { + "name": "JS Bin", + "domains": [ + "jsbin.com" + ], + "url": "https://jsbin.com/account/delete", + "difficulty": "easy" + }, + { + "name": "JSFiddle", + "domains": [ + "jsfiddle.net" + ], + "url": "https://jsfiddle.net/user/settings/remove_account/", + "difficulty": "easy", + "notes": "Visit the linked page and click 'Remove account'.", + "email": "support@jsfiddle.net" + }, + { + "name": "Kaggle", + "domains": [ + "kaggle.com" + ], + "url": "https://www.kaggle.com/account/delete", + "difficulty": "easy", + "notes": "Go to the page linked, verify you are a human, then click on the 'Delete account' button." + }, + { + "name": "Kahoot", + "domains": [ + "kahoot.com", + "kahoot.it", + "create.kahoot.it" + ], + "url": "https://create.kahoot.it/delete-account", + "difficulty": "easy", + "notes": "Follow the link, select reason for deleting, and click 'Delete Account'. Kahoots set to public won\u2019t be deleted along with your account. If you\u2019d like to delete them, you\u2019ll need to do it manually." + }, + { + "name": "Kakao", + "domains": [ + "kakao.com", + "accounts.kakao.com" + ], + "url": "https://accounts.kakao.com/weblogin/deactivate", + "difficulty": "medium", + "notes": "Click the 'Settings' button on the KakaoTalk app, enter 'General Settings', 'Privacy', and 'Manage My Personal Info' in the drop-down menu, and click the 'Unregister Form KakaoTalk' menu to delete account. Note: If you don't use other Kakao linked services, you will immediately switch to delete your Kakao account. If you were using some services, delete all of them, and then click the provided link to delete your Kakao account. " + }, + { + "name": "Kaleido (remove.bg, unscreen, designify)", + "domains": [ + "accounts.kaleido.ai", + "kaleido.ai", + "designify.com", + "remove.bg", + "unscreen.com" + ], + "url": "https://accounts.kaleido.ai/profile", + "difficulty": "easy", + "notes": "Go to your profile, at the bottom there will be a 'click here' to delete account. Retype your password and after 14 days the account gets deleted." + }, + { + "name": "Kanji Koohii", + "domains": [ + "kanji.koohii.com" + ], + "url": "https://kanji.koohii.com/account/delete", + "difficulty": "easy", + "notes": "Go to \"Account Settings\", then \"Edit Account\", and click \"Yes, I want to delete my account ( step 1 of 2 )\". Then fill out the form in which you have to give your email, type 'delete my account', confirm your password, and finally click \"Delete this account\"" + }, + { + "name": "Kaspersky", + "domains": [ + "kaspersky.com.au", + "kaspersky.be", + "kaspersky.bg", + "kaspersky.ca", + "kaspersky.co.in", + "kaspersky.co.jp", + "kaspersky.co.kr", + "kaspersky.co.th", + "kaspersky.co.uk", + "kaspersky.co.za", + "kaspersky.com", + "kaspersky.com.br", + "kaspersky.com.cn", + "kaspersky.com.hk", + "kaspersky.com.pl", + "kaspersky.com.tw", + "kaspersky.com.tr", + "kaspersky.com.vn", + "kaspersky.cz", + "kaspersky.de", + "kaspersky.dk", + "kaspersky.es", + "kaspersky.fi", + "kaspersky.fr", + "kaspersky.gr", + "kaspersky.hu", + "kaspersky.it", + "kaspersky.ma", + "kaspersky.nl", + "kaspersky.no", + "kaspersky.pt", + "kaspersky.ro", + "kaspersky.rs", + "kaspersky.ru", + "kaspersky.se", + "kaspersky.tn", + "kaspersky.ua", + "afrique.kaspersky.com", + "algerie.kaspersky.com", + "latam.kaspersky.com", + "me.kaskersky.com", + "me-en.kaspersky.com", + "my.kaspersky.com", + "threats.kaspersky.com", + "usa.kaspersky.com" + ], + "url": "https://my.kaspersky.com", + "difficulty": "easy", + "notes": "Login to your account. Click 'Account Settings' from the dropdown menu where your username (or email) is shown, then use the 'Delete Account' option and enter your password." + }, + { + "name": "Kattis", + "domains": [ + "kattis.com", + "icpc.kattis.com", + "open.kattis.com", + "support.kattis.com" + ], + "url": "https://support.kattis.com/support/solutions/articles/79000109991-how-do-i-delete-my-kattis-account-", + "difficulty": "hard", + "notes": "You need to contact the support to delete your account. Make sure to include your username and email in the support ticket." + }, + { + "name": "KBDfans", + "domains": [ + "kbdfans.com", + "kbdfans.myshopify.com" + ], + "url": "https://kbdfans.com/pages/contact-1", + "difficulty": "hard", + "notes": "Use the linked contact form to request account deletion." + }, + { + "name": "KDE Bugtracking System", + "domains": [ + "bugs.kde.org" + ], + "url": "https://bugs.kde.org", + "difficulty": "hard", + "notes": "You'll have to send an e-mail to them", + "email": "sysadmin@kde.org" + }, + { + "name": "Keepa", + "domains": [ + "keepa.com" + ], + "url": "https://keepa.com", + "difficulty": "easy", + "notes": "Login to your account. Click on 'Settings', then 'Account'. Click 'Yes, delete my account', enter your password and click 'Delete account'." + }, + { + "name": "Keeper", + "domains": [ + "keeper.io", + "keepersecurity.com" + ], + "url": "https://www.keepersecurity.com/privacypolicy.html?t=v#:~:text=You%20may%20deactivate%20your%20Keeper%20Security%20account%20and%20delete%20your%20personally%20identifiable%20information%20at%20any%20time%20by%20contacting%20us%20at%20support%40keepersecurity.com%20clearly%20indicating%20that%20you%20wish%20to%20deactivate%20and%20delete%20such%20information.", + "difficulty": "hard", + "notes": "You may deactivate your Keeper Security account and delete your personally identifiable information at any time by contacting their support at support@keepersecurity.com clearly indicating that you wish to delete your account.", + "email": "support@keepersecurity.com" + }, + { + "name": "Keybase.io", + "domains": [ + "keybase.io" + ], + "url": "https://keybase.io/account/delete_me", + "difficulty": "easy", + "notes": "Account is deleted instantly, though username might be kept to keep service functioning properly and avoiding impersonation." + }, + { + "name": "Khan Academy", + "domains": [ + "khanacademy.org" + ], + "url": "https://www.khanacademy.org/settings", + "difficulty": "easy" + }, + { + "name": "Kick Streaming", + "domains": [ + "kick.com" + ], + "url": "https://kick.com/", + "difficulty": "hard", + "notes": "To permanently deactivate your account, you need to send an email to Kick support.", + "email": "support@kick.com" + }, + { + "name": "Kickstarter", + "domains": [ + "kickstarter.com" + ], + "url": "https://www.kickstarter.com/profile/destroy", + "difficulty": "easy" + }, + { + "name": "Kijiji", + "domains": [ + "kijiji.ca", + "help.kijiji.ca" + ], + "url": "https://help.kijiji.ca/helpdesk/contact-us-step/other", + "difficulty": "hard", + "notes": "Must contact customer service using the online form. Once completed, wait for e-mail from them. You will need you to reply to this e-mail confirming that the account you e-mailed from should be closed." + }, + { + "name": "Kik", + "domains": [ + "kik.com", + "ws.kik.com", + "kikinteractive.zendesk.com" + ], + "url": "https://ws.kik.com/delete", + "difficulty": "medium", + "notes": "To permanently deactivate your account, go to the link provided, enter your information and you will receive a link to permanently deactivate your account." + }, + { + "name": "Killstar", + "domains": [ + "us.killstar.com" + ], + "url": "https://us.killstar.com/pages/contact-us", + "difficulty": "hard", + "notes": "Visit the url and choose from the drop down menu: 1) What can we help you with? (Choose 'Something else'), 2) How can we help? (Choose 'Website error'), 3) Choose your region (Choose which region), 4) Fill out your name, 5) Fill out your email address and confirm it, 6) What should our team know so they can help? ('Please delete my account and all associated information'), 6) Submit. Then you will receive an email and have to confirm the following information: 1) Name on the account, 2) Shipping address on the account, 3) Email address on the account, 4) Phone number on the account, 5) Which store? US, UK, or EU. Then, you will be emailed again stating that in 15 days the data will be removed from their system." + }, + { + "name": "Kinguin", + "domains": [ + "kinguin.net" + ], + "url": "https://www.kinguin.net/about-us", + "difficulty": "hard", + "notes": "Have to contact them, they first will try to convince you not to delete your account, but if you keep trying, they can delete your account" + }, + { + "name": "Kinja", + "domains": [ + "kinja.com" + ], + "url": "https://notice.sp-prod.net/sar/index.html?message_id=539278&account_id=1195&ccpa_type=delete", + "difficulty": "hard", + "notes": "Fill out the form using the email address of your account and click on the verification link that is sent." + }, + { + "name": "Kino.dk", + "domains": [ + "kino.dk" + ], + "url": "https://kino.dk/user", + "difficulty": "hard", + "notes": "Requires sending an email.", + "email": "kontakt@kino.dk", + "email_subject": "Sletning af profil", + "email_body": "Jeg \u00f8nsker at slette min konto hos jer. Tak." + }, + { + "name": "Kistania", + "domains": [ + "kistania.com" + ], + "url": "https://www.kistania.com/pages/contact-us", + "difficulty": "impossible", + "notes": "Filling out the form requesting account deletion does not work." + }, + { + "name": "Kit.co", + "domains": [ + "kit.co" + ], + "url": "https://kit.co/terms#contact", + "difficulty": "hard", + "notes": "If you need to contact us for any reason, you can do so by emailing us.", + "email": "support@kit.co" + }, + { + "name": "Kitsu", + "domains": [ + "kitsu.io" + ], + "url": "https://kitsu.io/settings/account", + "difficulty": "easy", + "notes": "Click the 'Delete Account' button and then click 'Confirm'." + }, + { + "name": "Kixeye", + "domains": [ + "kixeye.com", + "corp.kixeye.com" + ], + "url": "https://corp.kixeye.com/pp.html", + "difficulty": "hard", + "notes": "Send an email, specifying your username, requesting to delete your account.", + "email": "privacy@kixeye.com" + }, + { + "name": "Klarna", + "domains": [ + "klarna.com" + ], + "url": "https://www.klarna.com/us/customer-service/", + "difficulty": "hard", + "notes": "Pay off all your orders (if any), wait 10 days after that, remove your payment information from the app, chat with customer service and tell them you want your marketing sendouts stopped and your personal data deleted." + }, + { + "name": "Kleinanzeigen", + "domains": [ + "kleinanzeigen.de", + "themen.kleinanzeigen.de" + ], + "url": "https://themen.kleinanzeigen.de/hilfe/nutzerkonto/datenloeschung/", + "difficulty": "easy", + "notes": "Visit the linked page and follow the instructions." + }, + { + "name": "Ko-fi", + "domains": [ + "ko-fi.com" + ], + "url": "https://ko-fi.com/Manage/DeleteAccount/", + "difficulty": "medium", + "notes": "Cancel all of your monthly coffees and click the link sent to your email." + }, + { + "name": "Koingo Software", + "domains": [ + "koingosw.com" + ], + "url": "https://www.koingosw.com/account/delete.php", + "difficulty": "medium", + "notes": "Enter your E-Mail in the account deletion form and confirm the deletion in the E-Mail sent to you." + }, + { + "name": "Kongregate", + "domains": [ + "kongregate.com" + ], + "url": "https://kong.zendesk.com/hc/en-us/articles/360049211251-How-to-delete-your-account", + "difficulty": "medium", + "notes": "Visit the linked page and follow the instructions to delete your account." + }, + { + "name": "Kotaku", + "domains": [ + "kotaku.com" + ], + "url": "https://notice.sp-prod.net/sar/index.html?message_id=539278&account_id=1195&ccpa_type=delete", + "difficulty": "hard", + "notes": "Fill out the form using the email address of your account and click on the verification link that is sent." + }, + { + "name": "Kraken", + "domains": [ + "kraken.com", + "support.kraken.com" + ], + "url": "https://support.kraken.com/hc/en-us/articles/203727206-How-can-I-delete-my-Kraken-account-", + "difficulty": "hard", + "notes": "To close your account, you need to submit a request to support, which may take up to 24 hours to process." + }, + { + "name": "Kununu", + "domains": [ + "kununu.com" + ], + "url": "https://www.kununu.com/user/delete", + "difficulty": "easy", + "notes": "An email will be sent with a link to delete your account." + }, + { + "name": "Kwai", + "domains": [ + "kwai.com" + ], + "url": "https://www.kwai.com/legal", + "difficulty": "easy", + "notes": "Click in the gear on left upper corner \u2b95 Account security \u2b95 \"Delete my account\" at the bottom \u2b95 Select the reason and press the \"Delete my account\" button. The deleting process will occur in 72 hours. Your account may be removed if you haven't used it for 6 months." + }, + { + "name": "Lampyre", + "domains": [ + "lampyre.io" + ], + "url": "https://lampyre.io/", + "difficulty": "easy", + "notes": "Go to Account settings and click Delete account." + }, + { + "name": "LanguageTool", + "domains": [ + "languagetool.org" + ], + "url": "https://languagetool.org/editor/settings/account", + "difficulty": "easy", + "notes": "At the bottom of the linked page, click 'Delete my account'." + }, + { + "name": "LaptopKeyReplacements", + "domains": [ + "laptopkeyreplacements.com" + ], + "url": "https://www.laptopkeyreplacements.com/contact-us/", + "difficulty": "impossible", + "notes": "Account deletion request hasn't been fulfilled several months after contacting support." + }, + { + "name": "Last.fm", + "domains": [ + "last.fm", + "support.last.fm" + ], + "url": "https://www.last.fm/settings/account", + "difficulty": "easy", + "notes": "Scroll to the bottom of the page and click delete user account. On the following page, enter your password. Your account will then be deleted after 14 days." + }, + { + "name": "LastPass", + "domains": [ + "lastpass.com" + ], + "url": "https://lastpass.com/delete_account.php", + "difficulty": "easy" + }, + { + "name": "Launchpad", + "domains": [ + "launchpad.net", + "help.launchpad.net" + ], + "url": "https://help.launchpad.net/YourAccount/Closing", + "difficulty": "easy" + }, + { + "name": "Lazada", + "domains": [ + "lazada.co.id", + "my.lazada.co.id" + ], + "url": "https://my.lazada.co.id/", + "difficulty": "impossible", + "notes": "No way to delete your account on this website, even if you ask on their customer support, they only give you instructions on how to uninstall the application." + }, + { + "name": "LBRY / Odysee", + "domains": [ + "lbry.com", + "odysee.com" + ], + "url": "https://lbry.com/faq/how-to-remove-account", + "difficulty": "hard", + "notes": "Only way to delete your account is sending them an e-mail.", + "email": "hello@lbry.com", + "email_body": "I have an account on XXX@XXX.XXX and i want that account to be deleted because of XXXXXX." + }, + { + "name": "League of Legends", + "domains": [ + "leagueoflegends.com", + "support-leagueoflegends.riotgames.com" + ], + "url": "https://support-leagueoflegends.riotgames.com/hc/en-us/articles/360050328454", + "difficulty": "easy", + "notes": "Go to the linked page, scroll down, click on \"LOG IN\" and confirm your deletion." + }, + { + "name": "League of Legends: Wild Rift", + "domains": [ + "wildrift.leagueoflegends.com", + "support-wildrift.riotgames.com" + ], + "url": "https://support-leagueoflegends.riotgames.com/hc/en-us/articles/360050328454", + "difficulty": "easy", + "notes": "Go to the linked page, scroll down, click on \"LOG IN\" and confirm your deletion." + }, + { + "name": "LeetCode", + "domains": [ + "leetcode.com", + "support.leetcode.com" + ], + "url": "https://support.leetcode.com/hc/en-us/requests/new", + "difficulty": "hard", + "notes": "Log in to your LeetCode account, go to the URL to submit an account deletion request. Include in your request the USERNAME and EMAIL ADDRESS associated with your account. When you receive email confirmation, your account credentials will no longer work." + }, + { + "name": "Legends of Runeterra", + "domains": [ + "playruneterra.com", + "support-legendsofruneterra.riotgames.com" + ], + "url": "https://support-legendsofruneterra.riotgames.com/hc/en-us/articles/360051089233-Deleting-Your-Riot-Account-and-All-Your-Data", + "difficulty": "easy", + "notes": "Go to the linked page, scroll down, click on \"LOG IN\" and confirm your deletion." + }, + { + "name": "Lemehost", + "domains": [ + "lemehost.com" + ], + "url": "https://lemehost.com/user/settings/delete", + "difficulty": "easy" + }, + { + "name": "Lenovo Forums", + "domains": [ + "forums.lenovo.com" + ], + "url": "https://forums.lenovo.com/user/myprofilepage/personal/closeaccount", + "difficulty": "easy" + }, + { + "name": "Lenovo ID", + "domains": [ + "lenovo.com" + ], + "url": "https://privacyportal.onetrust.com/webform/3c884b5f-db83-4077-91c8-fbfdaaba21fe/f15f8a67-782c-48c4-bf1e-0d7e6cd9b464", + "difficulty": "hard", + "notes": "Click Yes at the bottom when asked if you want to delete your Lenovo account." + }, + { + "name": "Lenstore", + "domains": [ + "lenstore.co.uk" + ], + "url": "https://www.lenstore.co.uk/contact-us", + "difficulty": "hard", + "notes": "Have to contact them, using the contact us form. They require date of birth and phone number linked to account." + }, + { + "name": "Letgo", + "domains": [ + "letgo.com" + ], + "url": "https://help.letgo.com/hc/en-001/requests/new?ticket_form_id=5285423513618", + "difficulty": "hard", + "notes": "To delete your account you have to go to \"I have a question about my account\"\u2b95\"Delete\" and write your request. You will get a return later on." + }, + { + "name": "Letterboxd", + "domains": [ + "letterboxd.com" + ], + "url": "https://letterboxd.com/user/disableaccount/", + "difficulty": "easy" + }, + { + "name": "Letudiant", + "domains": [ + "letudiant.fr", + "my.letudiant.fr" + ], + "url": "https://my.letudiant.fr/tableau-de-bord/parametres/supprimer-mon-compte", + "difficulty": "easy", + "notes": "Click 'Param\u00e8tres du compte', scroll drown and click the little link in black 'Supprimer d\u00e9finitivement mon compt' then validate and confirm the link sent to you by mail" + }, + { + "name": "LetyShops", + "domains": [ + "letyshops.com" + ], + "url": "https://letyshops.com/user/delete", + "difficulty": "easy" + }, + { + "name": "Liberland", + "domains": [ + "liberland.org", + "market.ll.land" + ], + "url": "https://liberland.org", + "difficulty": "impossible", + "notes": "You can only disable the account, but never delete it." + }, + { + "name": "LibraryThing", + "domains": [ + "librarything.de" + ], + "url": "https://www.librarything.de/editprofile/change", + "difficulty": "easy" + }, + { + "name": "Libre.fm", + "domains": [ + "libre.fm" + ], + "url": "https://libre.fm/user-edit.php#", + "difficulty": "easy", + "notes": "Click 'Profile', then 'Edit', then 'Show advanced settings', and finally check the 'Delete my account' checkbox." + }, + { + "name": "Lichess", + "domains": [ + "lichess.org" + ], + "url": "https://lichess.org/account/close", + "difficulty": "easy" + }, + { + "name": "lidraughts", + "domains": [ + "lidraughts.org" + ], + "url": "https://lidraughts.org/account/close", + "difficulty": "easy" + }, + { + "name": "Lieferando", + "domains": [ + "lieferando.at", + "lieferando.de" + ], + "url": "https://www.lieferando.de/en/customerservice/article/how-do-i-delete-my-account", + "difficulty": "hard", + "notes": "Account deletion requires contacting Customer Support." + }, + { + "name": "Life360", + "domains": [ + "life360.com", + "support.life360.com" + ], + "url": "https://support.life360.com/hc/en-us/articles/360051153713-Delete-My-Account", + "difficulty": "easy", + "notes": "Go into Settings, Tap Account, Tap Delete Account, Select Delete My Account" + }, + { + "name": "Lifehacker", + "domains": [ + "lifehacker.com" + ], + "url": "https://notice.sp-prod.net/sar/index.html?message_id=539278&account_id=1195&ccpa_type=delete", + "difficulty": "hard", + "notes": "Fill out the form using the email address of your account and click on the verification link that is sent." + }, + { + "name": "Lifesum", + "domains": [ + "lifesum.com" + ], + "url": "https://lifesum.com/account/delete-account", + "difficulty": "easy", + "notes": "On you account page, go to the 'Close Account & Delete Data' tab." + }, + { + "name": "Lime", + "domains": [ + "li.me", + "help.li.me" + ], + "url": "https://help.li.me/hc/en/articles/360017597013", + "difficulty": "hard", + "notes": "You must contact support via your Lime's contact form to request deletion." + }, + { + "name": "Lingvano", + "domains": [ + "app.lingvano.com" + ], + "url": "https://linking.lingvano.com/TEoq", + "difficulty": "easy", + "notes": "Make sure you canceled your subscription! You can delete your account via the web or mobile app." + }, + { + "name": "Lingvist", + "domains": [ + "lingvist.com" + ], + "url": "https://lingvist.com/help/how-to-delete-my-account-and-download-my-data/", + "difficulty": "easy", + "notes": "You can delete your account via the web or mobile app.", + "email": "hello@lingvist.io" + }, + { + "name": "LinkedIn", + "domains": [ + "linkedin.com" + ], + "url": "https://www.linkedin.com/help/linkedin/answer/63", + "difficulty": "medium", + "notes": "There are reports that LinkedIn continues to email people with a closed account. You may need to contact customer services to delete account instead of just closing it." + }, + { + "name": "Linktree", + "domains": [ + "linktr.ee", + "auth.linktr.ee", + "help.linktr.ee" + ], + "url": "https://linktr.ee/admin/account", + "difficulty": "easy", + "notes": "Go to your account details, scroll down to the 'Danger Zone' and click 'Delete Account'." + }, + { + "name": "Linkvertise", + "domains": [ + "linkvertise.com" + ], + "url": "https://linkvertise.com/imprint", + "difficulty": "hard", + "notes": "You must specify in the email whether you want to delete a premium or a publisher account.", + "email": "info@linkvertise.com", + "email_subject": "Linkvertise account deletion request" + }, + { + "name": "Linode", + "domains": [ + "linode.com", + "cloud.linode.com" + ], + "url": "https://cloud.linode.com/account/settings", + "difficulty": "easy", + "notes": "At the bottom of the linked page select 'Close Account' and confirm your username." + }, + { + "name": "Linsensuppe", + "domains": [ + "linsensuppe.de" + ], + "url": "https://www.linsensuppe.de", + "difficulty": "impossible", + "notes": "One cannot even change the password" + }, + { + "name": "Linus Tech Tips Store", + "domains": [ + "lttstore.com" + ], + "url": "https://www.lttstore.com/pages/privacy-policy", + "difficulty": "hard", + "notes": "Account deletion requires contacting Customer Support.", + "email": "support@lttstore.com" + }, + { + "name": "Listia", + "domains": [ + "listia.com" + ], + "url": "https://help.listia.com/hc/en-us/articles/203895428-How-do-I-delete-close-my-account-", + "difficulty": "hard" + }, + { + "name": "Live Nation", + "domains": [ + "livenation.com" + ], + "url": "https://privacyportal.onetrust.com/webform/ba6f9c5b-dda5-43bd-bac4-4e06afccd928/ba7654b2-26ce-47df-8954-0884b9a0cea5", + "difficulty": "hard", + "notes": "Select \"Delete My Information\" and enter the email address used on your account." + }, + { + "name": "LiveJournal", + "domains": [ + "livejournal.com" + ], + "url": "https://www.livejournal.com/accountstatus.bml", + "difficulty": "medium", + "notes": "Once you delete your journal you have 30 days to undelete it, in case you change your mind. After 30 days, the journal will be permanently deleted and there will be no way to recover it." + }, + { + "name": "Livelo", + "domains": [ + "livelo.com.br" + ], + "url": "https://www.livelo.com.br/profile?occsite=points&tab=tab_label_1", + "difficulty": "easy" + }, + { + "name": "Lnk.Bio", + "domains": [ + "lnk.bio", + "help.lnk.bio" + ], + "url": "https://help.lnk.bio/en/articles/4300436-how-do-i-delete-my-account", + "difficulty": "hard", + "notes": "Log in and request deletion via the chat service using the button on the lower right corner." + }, + { + "name": "Lobsters", + "domains": [ + "lobste.rs" + ], + "url": "https://lobste.rs/settings", + "difficulty": "easy" + }, + { + "name": "LOBSTR", + "domains": [ + "lobstr.co" + ], + "url": "https://lobstr.co/settings/#profile-tab", + "difficulty": "medium", + "notes": "Visit the linked page and click 'Delete LOBSTR account' under the 'Profile' tab. You will be sent an email with a link to delete your account." + }, + { + "name": "Login.gov", + "domains": [ + "login.gov", + "secure.login.gov" + ], + "url": "https://secure.login.gov/account/delete", + "difficulty": "easy", + "notes": "Sometimes the login page won't redirect properly, click the \"Delete Account\" link on the side if this happens." + }, + { + "name": "Logitech", + "domains": [ + "logitech.com", + "blog.logitech.com", + "ir.logitech.com", + "press.logitech.eu", + "support.logi.com" + ], + "url": "https://support.logi.com/hc/en-us/requests/new", + "difficulty": "hard", + "notes": "Open a ticket on their customer service requesting the deletion of the account and provide a country, reason and your name" + }, + { + "name": "LogMeIn / Hamachi", + "domains": [ + "logme.in", + "logmein.com", + "logmeininc.com", + "support.logmeininc.com" + ], + "url": "https://support.logmeininc.com/hamachi/help/how-do-i-contact-hamachi-customer-support", + "difficulty": "hard", + "notes": "Scroll to the bottom of the given URL, open a new ticket and ask for account deletion" + }, + { + "name": "LogRocket", + "domains": [ + "logrocket.com", + "docs.logrocket.com" + ], + "url": "https://docs.logrocket.com/docs/security", + "difficulty": "hard", + "notes": "According to their security documentation, contact customer support via email and request the deletion of your account.", + "email": "support@logrocket.com" + }, + { + "name": "Lolja", + "domains": [ + "lolja.com.br" + ], + "url": "https://lolja.com.br", + "difficulty": "hard", + "notes": "Contact the customer support via email and request the deletion of your account. In order for them to identify your account, make the request through the same email address that you have used to create your Lolja account.", + "email": "sac@lolja.com.br" + }, + { + "name": "Lookout", + "domains": [ + "lookout.com" + ], + "url": "https://www.lookout.com/#/settings", + "difficulty": "easy", + "notes": "log into your account, in the middle right." + }, + { + "name": "LoseIt", + "domains": [ + "loseit.com" + ], + "url": "https://loseit.com", + "difficulty": "easy", + "notes": "Go to the Settings page of your account, then account information and click \u201cClose account\u201d." + }, + { + "name": "Love My Credit Union Rewards", + "domains": [ + "https://rewards.lovemycreditunion.org" + ], + "url": "https://rewards.lovemycreditunion.org/contact-us/", + "difficulty": "hard", + "notes": "Scroll all the way down on the website and find a little button with a picture of an envelope to contact customer support to have your account deleted." + }, + { + "name": "Lucidchart/Lucidpress", + "domains": [ + "lucid.app", + "lucidchart.com", + "lucidpress.com" + ], + "url": "https://www.lucidchart.com/users/login", + "difficulty": "easy", + "notes": "Click in the top right corner on your Username, then \"Account settings\" and at the tab \"Close Account\"" + }, + { + "name": "Lucky Patcher Forum", + "domains": [ + "luckypatchers.com" + ], + "url": "https://www.luckypatchers.com/forum/", + "difficulty": "impossible", + "notes": "The website does not offer any options that allow the account to be deleted." + }, + { + "name": "Ludum Dare", + "domains": [ + "https://ldjam.com/" + ], + "url": "https://ldjam.com/", + "difficulty": "impossible", + "notes": "You can't even change your username, email, or delete your posts." + }, + { + "name": "Lufthansa", + "domains": [ + "lh.com", + "lufthansa.com", + "lufthansa.de" + ], + "url": "https://www.lufthansa.com/online/myportal/lh/uk/my_account/profile/update?action=deleteProfileAction", + "difficulty": "easy" + }, + { + "name": "Lumosity", + "domains": [ + "lumosity.com" + ], + "url": "https://www.lumosity.com/app/v4/settings/account_deletion/new", + "difficulty": "easy" + }, + { + "name": "Luno", + "domains": [ + "luno.com" + ], + "url": "https://www.luno.com/help/en/tickets/new?category_id=19", + "difficulty": "hard", + "notes": "Fill the form on the site to request data deletion. The support team will confirm the request by email." + }, + { + "name": "Lush", + "domains": [ + "lush.com", + "forms.lush.com", + "weare.lush.com" + ], + "url": "https://www.lush.com/us/en_us/faq/usa-contact-us", + "difficulty": "hard", + "notes": "Conctact customer service and request account deletion" + }, + { + "name": "Lutris", + "domains": [ + "lutris.net" + ], + "url": "https://lutris.net/user/edit", + "difficulty": "easy", + "notes": "Log in to Lutris, then click on the linked page and scroll down to the 'Delete my account.' button." + }, + { + "name": "Lyft", + "domains": [ + "lyft.com", + "account.lyft.com" + ], + "url": "https://account.lyft.com/privacy/data", + "difficulty": "medium", + "notes": "Log-in to your Lyft account on the website and request for deletion. Cannot be done via the app" + }, + { + "name": "Macrumors", + "domains": [ + "forums.macrumors.com" + ], + "url": "https://macrumors.zendesk.com/hc/en-us/articles/201260797-How-do-I-cancel-my-account-", + "difficulty": "impossible", + "notes": "There is no account deletion process offered. Remove your account's Personal Details (Location, About You, etc.), your forum signature, and any social media names in the Contact Details section and leave the account dormant." + }, + { + "name": "MacTrade", + "domains": [ + "mactrade.de" + ], + "url": "https://www.mactrade.de/account/profile#confirmDeleteAccountModal", + "difficulty": "easy", + "notes": "In your user account go to 'Delete Account' and confirm the deletion via the 'Delete account now' button." + }, + { + "name": "MacUpdate", + "domains": [ + "macupdate.com" + ], + "url": "https://www.macupdate.com/member/account-preferences", + "difficulty": "easy", + "notes": "In your account preferences select 'Delete all my personal data' in the bottom left. 14 days after your request all your data will be deleted. During the 14 days the delete request may be cancelled." + }, + { + "name": "Magasin", + "domains": [ + "magasin.dk" + ], + "url": "https://www.magasin.dk/profilaendring/", + "difficulty": "easy", + "notes": "Go to your profile, press 'Rediger' and then 'Slet profil'." + }, + { + "name": "Magicflow", + "domains": [ + "magicflow.com" + ], + "url": "https://magicflow.com/profile/account", + "difficulty": "easy", + "notes": "On your account page, click in 'Delete Account' then confirm." + }, + { + "name": "Magoosh", + "domains": [ + "magoosh.com" + ], + "url": "https://magoosh.zendesk.com/hc/en-us/articles/204307485-How-do-I-delete-my-account-", + "difficulty": "easy", + "notes": "Send an email to help@magoosh.com with the subject line, 'Need to delete my account'. Might need to send another email for the deletion to finally go through.", + "email": "help@magoosh.com", + "email_subject": "Need to delete my account" + }, + { + "name": "Mail.ru", + "domains": [ + "mail.ru", + "account.mail.ru" + ], + "url": "https://account.mail.ru/user/delete", + "difficulty": "easy", + "notes": "Login into your account. Go to the deletion form. Enter the mailbox name and password. Specify the reason for the deletion, your account's password and the captcha code. Click the \"Delete\" button." + }, + { + "name": "mailbox.org", + "domains": [ + "mailbox.org", + "kb.mailbox.org" + ], + "url": "https://mailbox.org/en/", + "difficulty": "easy", + "notes": "Account Settings \u2b95 Delete Account." + }, + { + "name": "MailChimp", + "domains": [ + "mailchimp.com", + "kb.mailchimp.com" + ], + "url": "https://kb.mailchimp.com/article/how-do-i-close-my-account", + "difficulty": "easy", + "notes": "Account Settings \u2b95 Account Settings Drop-down \u2b95 Close my account \u2b95 Type DELETE and press Delete Account button." + }, + { + "name": "Mailfence", + "domains": [ + "kb.mailfence.com", + "mailfence.com" + ], + "url": "https://kb.mailfence.com/kb/how-can-i-delete-my-account/", + "difficulty": "easy", + "notes": "Go to 'Settings'\u2b95'General'\u2b95'Delete Account'." + }, + { + "name": "Mailspring", + "domains": [ + "getmailspring.com", + "id.getmailspring.com" + ], + "url": "https://id.getmailspring.com", + "difficulty": "easy", + "notes": "Sign in \u2b95 Click the 'Delete your Mailspring ID' button \u2b95 Confirm" + }, + { + "name": "Major League Hacking (MLH)", + "domains": [ + "mlh.io", + "careerlab.mlh.io", + "careers.mlh.io", + "challenges.mlh.io", + "click.mlh.io", + "events.mlh.io", + "fellowship.mlh.io", + "ghw.mlh.io", + "guide.mlh.io", + "hack.mlh.io", + "hackcon.mlh.io", + "my.mlh.io", + "news.mlh.io", + "organize.mlh.io", + "sponsor.mlh.io", + "static.mlh.io" + ], + "url": "https://my.mlh.io/users/edit", + "difficulty": "easy", + "notes": "Go to the linked page, scroll to the bottom, click \"Cancel Account\" and confirm." + }, + { + "name": "Mangadex", + "domains": [ + "mangadex.org" + ], + "url": "https://mangadex.org/settings#del", + "difficulty": "easy", + "notes": "Sign in \u2b95 Click the 'Delete' button \u2b95 You will receive an email with a confirm button \u2b95 Enter 'CONFIRM' in the text box." + }, + { + "name": "Mapbox", + "domains": [ + "mapbox.com", + "account.mapbox.com" + ], + "url": "https://account.mapbox.com/settings", + "difficulty": "easy", + "notes": "Enter Password \u2b95 Scroll to bottom \u2b95 Click 'Delete Account'" + }, + { + "name": "MapMyFitness", + "domains": [ + "mapmyfitness.com" + ], + "url": "https://www.mapmyfitness.com/account/delete", + "difficulty": "easy", + "notes": "This will also delete the profiles for MapMyRun, MapMyWalk, and/or MapMyFitness that are associated with the same email" + }, + { + "name": "MapMyRun", + "domains": [ + "mapmyrun.com" + ], + "url": "https://www.mapmyrun.com/account/delete", + "difficulty": "easy", + "notes": "This will also delete the profiles for MapMyRun, MapMyWalk, and/or MapMyFitness that are associated with the same email" + }, + { + "name": "MapMyWalk", + "domains": [ + "mapmywalk.com" + ], + "url": "https://www.mapmywalk.com/account/delete", + "difficulty": "easy", + "notes": "This will also delete the profiles for MapMyRun, MapMyWalk, and/or MapMyFitness that are associated with the same email" + }, + { + "name": "Mapstr", + "domains": [ + "mapstr.com", + "en.mapstr.com", + "go.mapstr.com", + "web.mapstr.com" + ], + "url": "https://en.mapstr.com/faq", + "difficulty": "easy", + "notes": "Log in to your account in the app, then got to the \"Profile\" tab and open settings. After that, find the \"Data Management\" section and click \"Delete my account\"." + }, + { + "name": "Marktplaats", + "domains": [ + "marktplaats.nl" + ], + "url": "https://www.marktplaats.nl/my-account/profile/edit.html", + "difficulty": "easy", + "notes": "Log in to Marktplaats. Go to the linked URL or in Marktplaats click on your name at the top right, choose 'Mijn Profiel' and go to your contact information. On this page, click 'Account verwijderen' at the bottom. Indicate why you want to delete your account and click 'Bevestigen'. Your account will be deleted and you will receive a confirmation email." + }, + { + "name": "Marvel", + "domains": [ + "marvelapp.com" + ], + "url": "https://marvelapp.com/account/", + "difficulty": "easy", + "notes": "Log into your account \u2b95 My Account \u2b95 click on Delete Account at the bottom of page." + }, + { + "name": "Mashable", + "domains": [ + "shop.mashable.com" + ], + "url": "https://support.stackcommerce.com/hc/en-us/requests/", + "difficulty": "hard", + "notes": "Contact customer support using the link here to fill out a request for account deletion" + }, + { + "name": "MasterClass", + "domains": [ + "masterclass.com", + "privacy.masterclass.com" + ], + "url": "https://privacy.masterclass.com/policies", + "difficulty": "impossible", + "notes": "It's not possible to delete your account, but you can send a request to delete your personal data by making a Privacy Request." + }, + { + "name": "Mastodon.social", + "domains": [ + "mastodon.social" + ], + "url": "https://mastodon.social/settings/delete", + "difficulty": "easy", + "notes": "Login \u2b95 Account Settings \u2b95 Security \u2b95 Delete Account" + }, + { + "name": "Match", + "domains": [ + "match.com", + "help.match.com" + ], + "url": "https://help.match.com/hc/en-us/articles/5610035266075-Delete-My-Account", + "difficulty": "medium", + "notes": "Only possible within the mobile app, otherwise can only be done via [contacting support](https://help.match.com/hc/en-us/requests/new)." + }, + { + "name": "Mathpix", + "domains": [ + "mathpix.com", + "accounts.mathpix.com" + ], + "url": "https://accounts.mathpix.com/account", + "difficulty": "easy", + "notes": "Use the link to navigate to your account settings page. Log in with your email and password then click 'Delete your account'. You will be asked to confirm with your email and a simple captcha. Your email will be blacklisted from creating new accounts." + }, + { + "name": "Mathway", + "domains": [ + "mathway.com" + ], + "url": "https://www.mathway.com/settings", + "difficulty": "easy", + "notes": "Use the link to navigate to your account settings page. Click account, type your password and click delete." + }, + { + "name": "Maxdome", + "domains": [ + "maxdome.de", + "faq.maxdome.de" + ], + "url": "https://faq.maxdome.de/frage/mxdallgemein/mxdalleszu/was-ist-maxdome/wo-finde-ich-den-live-chat-von-maxdome", + "difficulty": "hard", + "notes": "Contact support via the live chat and request the deletion of your account. This is also possible via the [contact form](https://faq.maxdome.de/kontakt), though it could take longer." + }, + { + "name": "MaxMind", + "domains": [ + "maxmind.com", + "support.maxmind.com" + ], + "url": "https://support.maxmind.com/hc/requests/new", + "difficulty": "hard", + "notes": "You must stop all services and cease downloading any databases before contacting support. State that you wish to delete your account and use your registered email on the contact form." + }, + { + "name": "Mbed", + "domains": [ + "mbed.com", + "os.mbed.com" + ], + "url": "https://os.mbed.com/account/edit/account-options/", + "difficulty": "easy" + }, + { + "name": "McAfee", + "domains": [ + "mcafee.com", + "home.mcafee.com" + ], + "url": "https://home.mcafee.com/", + "difficulty": "hard", + "notes": "You must call McAfee customer support and unsubscribe, which cancels your account. Be sure to have your state ID or driver's license available, as you will be asked questions to verify your identity." + }, + { + "name": "McDonald's", + "domains": [ + "mcdonalds.com" + ], + "url": "https://www.mcdonalds.com/us/en-us/faq/how-do-i-delete-my-account.html", + "difficulty": "easy" + }, + { + "name": "McVIP", + "domains": [ + "mcvip.mcdonalds.de" + ], + "url": "https://mcvip.mcdonalds.de/#/profil", + "difficulty": "easy", + "notes": "Click on 'Edit profile', scroll down to 'You want to delete your profile?', type in your password, click on 'Delete' and then 'Yes, delete it'." + }, + { + "name": "Mealpal", + "domains": [ + "mealpal.com" + ], + "url": "https://www.mealpal.com/privacy-policy/", + "difficulty": "hard", + "notes": "You can only delete your account by emailing them.", + "email": "privacy@mealpal.com" + }, + { + "name": "Medal", + "domains": [ + "medal.tv" + ], + "url": "https://medal.tv/settings", + "difficulty": "easy", + "notes": "Scroll down to the bottom of the linked page and click on 'Delete Account'." + }, + { + "name": "MediaFire", + "domains": [ + "mediafire.com" + ], + "url": "https://www.mediafire.com/myaccount/accountbilling.php", + "difficulty": "medium", + "notes": "Scroll to the bottom of the page and click 'Delete my Account', make sure you're logged in and follow the steps." + }, + { + "name": "Mediapart", + "domains": [ + "mediapart.fr" + ], + "url": "https://www.mediapart.fr/contenu/conditions-generales-d-utilisation", + "difficulty": "hard", + "notes": "No information is clearly provided how to delete account. You have to send an email to explicitly ask for deletion of every information related to your account otherwise they will only disable it.", + "email": "contact@mediapart.fr", + "email_body": "Please delete all information and data associated with my account. My username is XXXXXX." + }, + { + "name": "Medium", + "domains": [ + "medium.com" + ], + "url": "https://medium.com/me/settings", + "difficulty": "easy" + }, + { + "name": "MeetFrank", + "domains": [ + "meetfrank.com" + ], + "url": "https://meetfrank.com", + "difficulty": "hard", + "notes": "Send the team/company/email of the account you want to delete. No verification (not even from the same sender e-mail) required.", + "email": "team@meetfrank.com" + }, + { + "name": "Meetup", + "domains": [ + "meetup.com", + "help.meetup.com" + ], + "url": "https://help.meetup.com/hc/en-us/articles/360002861092-Deactivating-an-account-", + "difficulty": "impossible", + "notes": "Meetup accounts can only be deactivated, not deleted. To deactivate your account visit the linked page and follow the appropriate instructions for the method you used to sign up." + }, + { + "name": "MEGA", + "domains": [ + "mega.nz", + "mega.io" + ], + "url": "https://mega.nz/fm/account", + "difficulty": "easy", + "notes": "In the bottom right corner of the linked page, click 'Delete account'. Click the confirmation link sent to your email, then select a reason why you want to leave MEGA." + }, + { + "name": "Megaxus", + "domains": [ + "megaxus.com" + ], + "url": "https://megaxus.com", + "difficulty": "impossible" + }, + { + "name": "Melodics", + "domains": [ + "melodics.com" + ], + "url": "https://melodics.com/support#form-header", + "difficulty": "impossible", + "notes": "It might be possible to delete your account via the contact form, but the support team is known to be unresponsive." + }, + { + "name": "Memrise", + "domains": [ + "memrise.com" + ], + "url": "https://www.memrise.com/settings/deactivate/", + "difficulty": "easy", + "notes": "A 'Delete my account' button is available from your account settings page." + }, + { + "name": "Mendeley", + "domains": [ + "mendeley.com" + ], + "url": "https://www.mendeley.com/settings/account", + "difficulty": "hard", + "notes": "Get to Mendeley and request for account to be closed at the privacy settings. Then contact Elsevier support asking for a deletion there too." + }, + { + "name": "Mercado Libre Argentina", + "domains": [ + "mercadolibre.com.ar", + "myaccount.mercadolibre.com.ar", + "mercadopago.com.ar" + ], + "url": "https://myaccount.mercadolibre.com.ar/cancelar-cuenta", + "difficulty": "medium", + "notes": "To cancel/delete your account, access the account deletion link specified above and log in to your account. In the options, select a reason why you want to cancel your account, click in the checkbox \"Estoy de acuerdo\", and confirm your action by clinking \"Aceptar\".

    Warning: You may cancel your account only if there is no limitation, partial and/or total blockage applied to it. You will also be unable to cancel your account if you have outstanding payments and/or purchases. Mercado Libre and Mercado Pago are services associated with the same type of account. If you choose to delete your Mercado Libre account, your Mercado Pago account will be deleted too." + }, + { + "name": "Mercado Libre Bolivia", + "domains": [ + "mercadolibre.com.bo" + ], + "url": "https://myaccount.mercadolibre.com.bo/cancelar-cuenta", + "difficulty": "medium", + "notes": "To cancel/delete your account, access the account deletion link specified above and log in to your account. In the options, select a reason why you want to cancel your account, click in the checkbox \"Estoy de acuerdo\", and confirm your action by clinking \"Aceptar\".

    Warning: You may cancel your account only if there is no limitation, partial and/or total blockage applied to it. You will also be unable to cancel your account if you have outstanding payments and/or purchases." + }, + { + "name": "Mercado Libre Chile", + "domains": [ + "mercadolibre.cl", + "mercadopago.cl" + ], + "url": "https://myaccount.mercadolibre.cl/cancelar-cuenta", + "difficulty": "medium", + "notes": "To cancel/delete your account, access the account deletion link specified above and log in to your account. In the options, select a reason why you want to cancel your account, click in the checkbox \"Estoy de acuerdo\", and confirm your action by clinking \"Aceptar\".

    Warning: You may cancel your account only if there is no limitation, partial and/or total blockage applied to it. You will also be unable to cancel your account if you have outstanding payments and/or purchases. Mercado Libre and Mercado Pago are services associated with the same type of account. If you choose to delete your Mercado Libre account, your Mercado Pago account will be deleted too." + }, + { + "name": "Mercado Libre Colombia", + "domains": [ + "mercadolibre.com.co", + "mercadopago.com.co" + ], + "url": "https://myaccount.mercadolibre.com.co/cancelar-cuenta", + "difficulty": "medium", + "notes": "To cancel/delete your account, access the account deletion link specified above and log in to your account. In the options, select a reason why you want to cancel your account, click in the checkbox \"Estoy de acuerdo\", and confirm your action by clinking \"Aceptar\".

    Warning: You may cancel your account only if there is no limitation, partial and/or total blockage applied to it. You will also be unable to cancel your account if you have outstanding payments and/or purchases. Mercado Libre and Mercado Pago are services associated with the same type of account. If you choose to delete your Mercado Libre account, your Mercado Pago account will be deleted too." + }, + { + "name": "Mercado Libre Costa Rica", + "domains": [ + "mercadolibre.co.cr" + ], + "url": "https://myaccount.mercadolibre.co.cr/cancelar-cuenta", + "difficulty": "medium", + "notes": "To cancel/delete your account, access the account deletion link specified above and log in to your account. In the options, select a reason why you want to cancel your account, click in the checkbox \"Estoy de acuerdo\", and confirm your action by clinking \"Aceptar\".

    Warning: You may cancel your account only if there is no limitation, partial and/or total blockage applied to it. You will also be unable to cancel your account if you have outstanding payments and/or purchases." + }, + { + "name": "Mercado Libre Ecuador", + "domains": [ + "mercadolibre.com.ec" + ], + "url": "https://myaccount.mercadolibre.com.ec/cancelar-cuenta", + "difficulty": "medium", + "notes": "To cancel/delete your account, access the account deletion link specified above and log in to your account. In the options, select a reason why you want to cancel your account, click in the checkbox \"Estoy de acuerdo\", and confirm your action by clinking \"Aceptar\".

    Warning: You may cancel your account only if there is no limitation, partial and/or total blockage applied to it. You will also be unable to cancel your account if you have outstanding payments and/or purchases." + }, + { + "name": "Mercado Libre El Salvador", + "domains": [ + "mercadolibre.com.sv" + ], + "url": "https://myaccount.mercadolibre.com.sv/cancelar-cuenta", + "difficulty": "medium", + "notes": "To cancel/delete your account, access the account deletion link specified above and log in to your account. In the options, select a reason why you want to cancel your account, click in the checkbox \"Estoy de acuerdo\", and confirm your action by clinking \"Aceptar\".

    Warning: You may cancel your account only if there is no limitation, partial and/or total blockage applied to it. You will also be unable to cancel your account if you have outstanding payments and/or purchases." + }, + { + "name": "Mercado Libre Guatemala", + "domains": [ + "mercadolibre.com.gt" + ], + "url": "https://myaccount.mercadolibre.com.gt/cancelar-cuenta", + "difficulty": "medium", + "notes": "To cancel/delete your account, access the account deletion link specified above and log in to your account. In the options, select a reason why you want to cancel your account, click in the checkbox \"Estoy de acuerdo\", and confirm your action by clinking \"Aceptar\".

    Warning: You may cancel your account only if there is no limitation, partial and/or total blockage applied to it. You will also be unable to cancel your account if you have outstanding payments and/or purchases." + }, + { + "name": "Mercado Libre Honduras", + "domains": [ + "mercadolibre.com.hn" + ], + "url": "https://myaccount.mercadolibre.com.hn/cancelar-cuenta", + "difficulty": "medium", + "notes": "To cancel/delete your account, access the account deletion link specified above and log in to your account. In the options, select a reason why you want to cancel your account, click in the checkbox \"Estoy de acuerdo\", and confirm your action by clinking \"Aceptar\".

    Warning: You may cancel your account only if there is no limitation, partial and/or total blockage applied to it. You will also be unable to cancel your account if you have outstanding payments and/or purchases." + }, + { + "name": "Mercado Libre M\u00e9xico", + "domains": [ + "mercadolibre.com.mx", + "mercadopago.com.mx" + ], + "url": "https://myaccount.mercadolibre.com.mx/cancelar-cuenta", + "difficulty": "medium", + "notes": "To cancel/delete your account, access the account deletion link specified above and log in to your account. In the options, select a reason why you want to cancel your account, click in the checkbox \"Estoy de acuerdo\", and confirm your action by clinking \"Aceptar\".

    Warning: You may cancel your account only if there is no limitation, partial and/or total blockage applied to it. You will also be unable to cancel your account if you have outstanding payments and/or purchases. Mercado Libre and Mercado Pago are services associated with the same type of account. If you choose to delete your Mercado Libre account, your Mercado Pago account will be deleted too." + }, + { + "name": "Mercado Libre Nicaragua", + "domains": [ + "mercadolibre.com.ni" + ], + "url": "https://myaccount.mercadolibre.com.ni/cancelar-cuenta", + "difficulty": "medium", + "notes": "To cancel/delete your account, access the account deletion link specified above and log in to your account. In the options, select a reason why you want to cancel your account, click in the checkbox \"Estoy de acuerdo\", and confirm your action by clinking \"Aceptar\".

    Warning: You may cancel your account only if there is no limitation, partial and/or total blockage applied to it. You will also be unable to cancel your account if you have outstanding payments and/or purchases." + }, + { + "name": "Mercado Libre Panam\u00e1", + "domains": [ + "mercadolibre.com.pa" + ], + "url": "https://myaccount.mercadolibre.com.pa/cancelar-cuenta", + "difficulty": "medium", + "notes": "To cancel/delete your account, access the account deletion link specified above and log in to your account. In the options, select a reason why you want to cancel your account, click in the checkbox \"Estoy de acuerdo\", and confirm your action by clinking \"Aceptar\".

    Warning: You may cancel your account only if there is no limitation, partial and/or total blockage applied to it. You will also be unable to cancel your account if you have outstanding payments and/or purchases." + }, + { + "name": "Mercado Libre Paraguay", + "domains": [ + "mercadolibre.com.py" + ], + "url": "https://myaccount.mercadolibre.com.py/cancelar-cuenta", + "difficulty": "medium", + "notes": "To cancel/delete your account, access the account deletion link specified above and log in to your account. In the options, select a reason why you want to cancel your account, click in the checkbox \"Estoy de acuerdo\", and confirm your action by clinking \"Aceptar\".

    Warning: You may cancel your account only if there is no limitation, partial and/or total blockage applied to it. You will also be unable to cancel your account if you have outstanding payments and/or purchases." + }, + { + "name": "Mercado Libre Per\u00fa", + "domains": [ + "mercadolibre.com.pe", + "mercadopago.com.pe" + ], + "url": "https://myaccount.mercadolibre.com.pe/cancelar-cuenta", + "difficulty": "medium", + "notes": "To cancel/delete your account, access the account deletion link specified above and log in to your account. In the options, select a reason why you want to cancel your account, click in the checkbox \"Estoy de acuerdo\", and confirm your action by clinking \"Aceptar\".

    Warning: You may cancel your account only if there is no limitation, partial and/or total blockage applied to it. You will also be unable to cancel your account if you have outstanding payments and/or purchases. Mercado Libre and Mercado Pago are services associated with the same type of account. If you choose to delete your Mercado Libre account, your Mercado Pago account will be deleted too." + }, + { + "name": "Mercado Libre Rep\u00fablica Dominicana", + "domains": [ + "mercadolibre.com.do" + ], + "url": "https://myaccount.mercadolibre.com.do/cancelar-cuenta", + "difficulty": "medium", + "notes": "To cancel/delete your account, access the account deletion link specified above and log in to your account. In the options, select a reason why you want to cancel your account, click in the checkbox \"Estoy de acuerdo\", and confirm your action by clinking \"Aceptar\".

    Warning: You may cancel your account only if there is no limitation, partial and/or total blockage applied to it. You will also be unable to cancel your account if you have outstanding payments and/or purchases." + }, + { + "name": "Mercado Libre Uruguay", + "domains": [ + "mercadolibre.com.uy", + "mercadopago.com.uy" + ], + "url": "https://myaccount.mercadolibre.com.uy/cancelar-cuenta", + "difficulty": "medium", + "notes": "To cancel/delete your account, access the account deletion link specified above and log in to your account. In the options, select a reason why you want to cancel your account, click in the checkbox \"Estoy de acuerdo\", and confirm your action by clinking \"Aceptar\".

    Warning: You may cancel your account only if there is no limitation, partial and/or total blockage applied to it. You will also be unable to cancel your account if you have outstanding payments and/or purchases. Mercado Libre and Mercado Pago are services associated with the same type of account. If you choose to delete your Mercado Libre account, your Mercado Pago account will be deleted too." + }, + { + "name": "Mercado Libre Venezuela", + "domains": [ + "mercadolibre.com.ve", + "mercadopago.com.ve" + ], + "url": "https://myaccount.mercadolibre.com.ve/cancelar-cuenta", + "difficulty": "medium", + "notes": "To cancel/delete your account, access the account deletion link specified above and log in to your account. In the options, select a reason why you want to cancel your account, click in the checkbox \"Estoy de acuerdo\", and confirm your action by clinking \"Aceptar\".

    Warning: You may cancel your account only if there is no limitation, partial and/or total blockage applied to it. You will also be unable to cancel your account if you have outstanding payments and/or purchases. Mercado Libre and Mercado Pago are services associated with the same type of account. If you choose to delete your Mercado Libre account, your Mercado Pago account will be deleted too." + }, + { + "name": "Mercado Livre Brasil", + "domains": [ + "mercadolivre.com.br", + "mercadopago.com.br", + "mercadolivre.com" + ], + "url": "https://myaccount.mercadolivre.com.br/cancelar-conta", + "difficulty": "medium", + "notes": "To cancel/delete your account, access the account deletion link specified above and log in to your account. In the options, select a reason why you want to cancel your account, click in the checkbox \"Estou de acordo\", and confirm your action by clinking \"Aceito\".

    Warning: You may cancel your account only if there is no limitation, partial and/or total blockage applied to it. You will also be unable to cancel your account if you have outstanding payments and/or purchases. Mercado Livre and Mercado Pago are services associated with the same type of account. If you choose to delete your Mercado Livre account, your Mercado Pago account will be deleted too." + }, + { + "name": "Metacritic", + "domains": [ + "metacritic.com" + ], + "url": "http://www.metacritic.com/contact-us", + "difficulty": "hard" + }, + { + "name": "MetalPay", + "domains": [ + "metalpay.com", + "help.metalpay.com" + ], + "url": "https://help.metalpay.com/hc/en-us/articles/4409445335063-How-do-I-close-my-Metal-Pay-account-", + "difficulty": "hard", + "notes": "Contact customer support to delete your account." + }, + { + "name": "Metropolis", + "domains": [ + "app.metropolis.io", + "metropolis.io" + ], + "url": "https://app.metropolis.io/profile/terms-and-privacy", + "difficulty": "easy", + "notes": "Account Settings \u2b95 Terms and Privacy \u2b95 Delete Account" + }, + { + "name": "Mi Account", + "domains": [ + "mi.com", + "account.xiaomi.com", + "cn.account.xiaomi.com", + "eu.account.xiaomi.com", + "global.account.xiaomi.com" + ], + "url": "https://account.xiaomi.com/pass/del", + "difficulty": "easy" + }, + { + "name": "Mibbit", + "domains": [ + "mibbit.com", + "chat.mibbit.com" + ], + "url": "https://chat.mibbit.com/", + "difficulty": "easy", + "notes": "Sign in and use the 'Account' link at the top right. At the bottom of the page is a link to delete your account." + }, + { + "name": "Microsoft Account", + "domains": [ + "live.com", + "login.live.com", + "signup.live.com", + "onedrive.live.com", + "microsoft.com", + "account.microsoft.com", + "dynamics.microsoft.com", + "learn.microsoft.com", + "news.microsoft.com", + "powerplatform.microsoft.com", + "privacy.microsoft.com", + "support.microsoft.com", + "techcommunity.microsoft.com", + "visualstudio.microsoft.com", + "login.microsoftonline.com", + "xbox.com", + "office.com" + ], + "url": "https://account.live.com/closeaccount.aspx", + "difficulty": "easy" + }, + { + "name": "Milanote", + "domains": [ + "milanote.com", + "app.milanote.com" + ], + "url": "https://app.milanote.com/account/settings/delete", + "difficulty": "medium", + "notes": "Enter your email, click on \"Yes, delete my account\", then enter your password and click on \"Continue\"." + }, + { + "name": "Mimo", + "domains": [ + "getmimo.com" + ], + "url": "https://getmimo.com/settings", + "difficulty": "easy", + "notes": "Click on 'Delete my account' then 'Delete Account' to delete your account." + }, + { + "name": "MindMeister", + "domains": [ + "mindmeister.com", + "accounts.meister.co" + ], + "url": "https://accounts.meister.co/close_account", + "difficulty": "easy", + "notes": "You have to cancel your plan first" + }, + { + "name": "Minds", + "domains": [ + "minds.com" + ], + "url": "https://www.minds.com/settings/other/delete-account", + "difficulty": "easy" + }, + { + "name": "Mine", + "domains": [ + "saymineapp.com" + ], + "url": "https://saymineapp.com/profile", + "difficulty": "easy", + "notes": "Click 'Delete your Mine Account' at the bottom of the page, acknowledge that you wish to proceed and click 'Delete my Account'" + }, + { + "name": "Minecraft", + "domains": [ + "minecraft.net", + "help.minecraft.net", + "account.mojang.com" + ], + "url": "https://help.minecraft.net/hc/en-us/requests/new", + "difficulty": "hard", + "notes": "On the linked page, chose the dropdown boxes that apply. Preferably use the email address that the account is associated with. You will be required to supply the transaction ID for the purchase of the account, or any other valid proof-of-purchase. If you have migrated to a Microsoft account, visit [this page](https://support.xbox.com/contact-us), sign in, and start a session with the virtual agent. Specify that your minecraft profile is linked to your microsoft account, and that you wish for it to be deleted. Alternatively, if you do not use your Microsoft account for anything else, you can [close your account](https://account.live.com/closeaccount.aspx) entirely." + }, + { + "name": "Minecraft Tools", + "domains": [ + "minecraft.tools" + ], + "url": "https://minecraft.tools/en/contact.php", + "difficulty": "impossible", + "notes": "The only way to contact them is by email, but no one responds.", + "email": "contact@minecraft.tools" + }, + { + "name": "Miniclip", + "domains": [ + "miniclip.com" + ], + "url": "https://me.miniclip.com/account/delete", + "difficulty": "easy", + "notes": "Log in, click on \"Delete Account\" tab and then click \"Delete Account\"." + }, + { + "name": "MinID", + "domains": [ + "minid.no" + ], + "url": "https://eid.difi.no/en/minid/blocking-minid", + "difficulty": "hard", + "notes": "You need to \"block\" your MinID first by sending [a form](https://eid.difi.no/sites/eid/files/2021-03/sperring_av_minid_en_v_1.3.pdf). You'll need to submit [another form](https://eid.difi.no/sites/eid/files/2021-03/sletting_fra_kontaktregister_en_v_1.2.pdf) if you want your information to be deleted from the contact registry." + }, + { + "name": "Mint", + "domains": [ + "mint.com" + ], + "url": "https://mint.com", + "difficulty": "easy", + "notes": "Go to 'Settings', then 'Sign In & Security', then scroll down to 'Delete your Mint account'. Enter your email and password again and click 'Delete'." + }, + { + "name": "mintos.com", + "domains": [ + "mintos.com", + "help.mintos.com" + ], + "url": "https://help.mintos.com/hc/en-us/requests/new?ticket_form_id=1900000292453", + "difficulty": "hard", + "notes": "Before requesting account deletion, make sure you wait for the remaining payments to come through, and withdraw all available funds. The account balance must be 0. Then you can either use a [request form](https://help.mintos.com/hc/en-us/requests/new?ticket_form_id=1900000292453) or send an email to support directly.", + "email": "support@mintos.com", + "email_subject": "Request to delete my account from Mintos", + "email_body": "I have an account in your database associated with the email address XXXXXX (investor id: XXXXXX). I have decided not to use the account again; therefore, I request that you kindly delete my account from your database and delete all the associated data." + }, + { + "name": "Miro", + "domains": [ + "miro.com" + ], + "url": "https://miro.com/app/settings/user-profile/", + "difficulty": "easy", + "notes": "Click \"Delete my profile\" in the profile settings page. An e-mail with a verification code is sent to you, with which you can deactivate the account." + }, + { + "name": "MisterWong", + "domains": [ + "mister-wong.de" + ], + "url": "https://www.mister-wong.de", + "difficulty": "hard", + "notes": "You need to send an email to support and it may take up to 48 hours to process your request.", + "email": "support@mister-wong.de" + }, + { + "name": "MixCloud", + "domains": [ + "mixcloud.com" + ], + "url": "https://www.mixcloud.com/settings/delete-account/", + "difficulty": "easy", + "notes": "Click on \"Just delete my account\"." + }, + { + "name": "Mixlr", + "domains": [ + "mixlr.com" + ], + "url": "https://mixlr.com/settings/account/delete/", + "difficulty": "easy", + "notes": "Login to your account, go to account section of the settings page and choose the \"delete account\" option." + }, + { + "name": "MMORPG.com", + "domains": [ + "mmorpg.com" + ], + "url": "https://www.mmorpg.com/notice/delete-account", + "difficulty": "easy" + }, + { + "name": "Mobify", + "domains": [ + "mobify.com" + ], + "url": "https://www.mobify.com/contact/", + "difficulty": "hard", + "notes": "You have to send a message in order to remove your account." + }, + { + "name": "Mobills", + "domains": [ + "mobillsapp.com", + "web.mobillsapp.com" + ], + "url": "https://web.mobillsapp.com/Configuracoes/DeletaConta", + "difficulty": "easy", + "notes": "Just click the delete button. Note that if you have made an account via Google or Facebook, you'll have to change the password first." + }, + { + "name": "Mockflow", + "domains": [ + "mockflow.com", + "support.mockflow.com" + ], + "url": "https://support.mockflow.com/article/10-can-i-delete-my-mockflow-account", + "difficulty": "easy", + "notes": "Login to your account \u2b95 Open the menu and choose My Account \u2b95 In the Profile Details tab click on 'Delete Account' & confirm deletion by entering your password." + }, + { + "name": "Modrinth", + "domains": [ + "modrinth.com", + "careers.modrinth.com", + "blog.modrinth.com", + "docs.modrinth.com", + "status.modrinth.com" + ], + "url": "https://modrinth.com/settings/account", + "difficulty": "easy", + "notes": "Go to the profile icon in the top right corner and select \"Settings\", then \"Account\", click \"Delete account\" at the bottom of the page, type your username and confirm. Your projects will not be deleted." + }, + { + "name": "Mojang", + "domains": [ + "mojang.com", + "account.mojang.com" + ], + "url": "https://account.mojang.com/me/settings", + "difficulty": "easy", + "notes": "If you have registered a Mojang account and would like to delete your account, please visit your account settings page. Please be aware that if your account is deleted, you will no longer be able to log into Mojang services, and will not be able to purchase future Mojang games." + }, + { + "name": "Molotov", + "domains": [ + "molotov.tv" + ], + "url": "https://www.molotov.tv/account/profile", + "difficulty": "easy", + "notes": "Log in, go to your profile settings, finally find at the bottom of the page (Delete my account)." + }, + { + "name": "Money Dashboard", + "domains": [ + "moneydashboard.com", + "help.moneydashboard.com" + ], + "url": "https://help.moneydashboard.com/hc/requests/new", + "difficulty": "hard", + "notes": "If you wish to delete your account and its belonging data and bank accounts held within it, you have to submit a request to the user support (or send an e-mail to support@moneydashboard.com). Make it clear that you require the full deletion of your account, not simply the deletion of one of your bank accounts. If you only want to delete/remove a bank account, but keep your Money Dashboard account open, please visit [https://help.moneydashboard.com/entries/21936798](https://help.moneydashboard.com/entries/21936798)", + "email": "support@moneydashboard.com" + }, + { + "name": "Money Lover", + "domains": [ + "moneylover.me", + "web.moneylover.me" + ], + "url": "https://web.moneylover.me", + "difficulty": "easy", + "notes": "Go to the menu on the top left corner, click 'My Account' then 'Delete Account' on the bottom of the dialog and confirm." + }, + { + "name": "Money Saving Expert", + "domains": [ + "moneysavingexpert.com", + "clubs.moneysavingexpert.com" + ], + "url": "https://clubs.moneysavingexpert.com/cheapenergyclub/my-account", + "difficulty": "easy", + "notes": "Just login to your account, select 'My Account', scroll to the bottom, select 'Settings' and click 'Close Account'" + }, + { + "name": "MongoDB Atlas", + "domains": [ + "mongodb.com", + "cloud.mongodb.com", + "docs.atlas.mongodb.com" + ], + "url": "https://docs.atlas.mongodb.com/tutorial/delete-atlas-account/", + "difficulty": "medium", + "notes": "To delete your MongoDB account you first need to delete all active clusters, projects and organizations linked with your account. Then click your name in the top right corner, click \"Manage your MongoDB Account\", and click \"Profile Info\" in the left panel. Click \"Delete Account\" and proceed with the presented steps." + }, + { + "name": "Monkeytype", + "domains": [ + "monkeytype.com" + ], + "url": "https://monkeytype.com/settings", + "difficulty": "easy", + "notes": "Scroll to the bottom of the linked page and click the 'delete account' button." + }, + { + "name": "Monoprice", + "domains": [ + "monoprice.com" + ], + "url": "https://www.monoprice.com/Help/Index?pn=contact", + "difficulty": "hard", + "notes": "Use the contact form to ask customer service to delete your account." + }, + { + "name": "Monster", + "domains": [ + "monster.com" + ], + "url": "https://www.monster.com/privacy/emailform", + "difficulty": "hard", + "notes": "On the linked page, complete the form and ask for your account to be deleted." + }, + { + "name": "Moodle", + "domains": [ + "moodle.com" + ], + "url": "https://moodle.org/admin/tool/dataprivacy/createdatarequest.php?type=2", + "difficulty": "easy", + "notes": "After you place a request, you need to wait until the account is manually deleted by the administrator." + }, + { + "name": "Moonpig", + "domains": [ + "moonpig.com", + "moonpig.co.uk" + ], + "url": "https://support-uk.moonpig.com/hc/en-gb/articles/360007011998-How-do-I-delete-my-Account-Data-", + "difficulty": "hard", + "notes": "Contact customer services and they'll respond in 24-48 hours. Not to mention the ways they try to hide you removing your card details. If you want to remove your card details, do the following: The easiest way to do this would be to go to the My Account page then click on the \u2018Add Moonpig Prepay Credit\u2019 link, click on the Buy link and your saved card details will be shown onscreen. Click on the \u2018Remove Card\u2019 option." + }, + { + "name": "Moovit", + "domains": [ + "moovit.com", + "editor.moovit.com", + "widgets.moovit.com", + "mooviters.moovit.com", + "static-main.moovit.com", + "moovitapp.com", + "editor.moovitapp.com", + "support.moovitapp.com" + ], + "url": "https://support.moovitapp.com/hc/requests/new", + "difficulty": "hard", + "notes": "In the app, go to \"Help & Support\", then \"My Accounts and Personal Information\", \"Deleting my Accounts and Personal Information\", scroll to the bottom of the page and click \"Give us feedback\", and fill out the form requesting cancellation of the account. For \"Feedback Type\" choose \"Edit or delete personal information\", under \"Privacy and Security\". If you also want to delete the Moovit Editor account you will have to explicitly ask for it." + }, + { + "name": "Morningstar", + "domains": [ + "morningstar.com", + "socialize.morningstar.com" + ], + "url": "https://socialize.morningstar.com/feedback/feedbackform.asp", + "difficulty": "hard", + "notes": "Fill out the feedback form, asking them to delete your account. Be sure to specify that you\u2019re not just unsubscribing from e-mail but that you want your account deleted entirely." + }, + { + "name": "Mote", + "domains": [ + "mote.com", + "support.mote.com" + ], + "url": "https://support.mote.com/hc/en-us/articles/4407299329940-How-do-I-delete-my-account-", + "difficulty": "hard", + "notes": "Email them from the account you wish to delete.", + "email": "support@mote.com" + }, + { + "name": "Mouser", + "domains": [ + "mouser.co.uk", + "mouser.com" + ], + "url": "https://www.mouser.co.uk/privacypolicy", + "difficulty": "medium", + "notes": "Visit the privacy policy page and scroll down to section Right to erasure (Right to have your data deleted). Enter your email address into the form. A link to the account deletion form will then be sent to your registered email address. To delete your account you have to fill out the form with details such as your full name and address. Once completed you will receive a confirmation email informing you that your account will be deleted within 30 days. Alternatively you can contact the data protection officer using the email address provided in the privacy policy." + }, + { + "name": "Moviepilot.de", + "domains": [ + "moviepilot.de" + ], + "url": "https://www.moviepilot.de/users/null/edit_membership", + "difficulty": "easy" + }, + { + "name": "Mozilla Developer Network (MDN)", + "domains": [ + "bugzilla.mozilla.org", + "developer.mozilla.org" + ], + "url": "https://bugzilla.mozilla.org/enter_bug.cgi?product=developer.mozilla.org", + "difficulty": "hard", + "notes": "Log in to Bugzilla and create a bug report to request the deletion of your account (see examples: [#1576401](https://bugzilla.mozilla.org/show_bug.cgi?id=1576401)and [#1353345](https://bugzilla.mozilla.org/show_bug.cgi?id=1353345)).

    If you have made contributions to the MDN Web Docs, you will also need to specify what you would like to happen with them after deleting your account." + }, + { + "name": "MSI", + "domains": [ + "account.msi.com" + ], + "url": "https://account.msi.com/", + "difficulty": "easy", + "notes": "On your account page, in Account section, go to Login Management, and in DELETE ACCOUNT click Delete." + }, + { + "name": "Muambator", + "domains": [ + "muambator.com.br" + ], + "url": "https://www.muambator.com.br/perfil/minha-conta/", + "difficulty": "easy", + "notes": "On your account page, scroll to the bottom and click on the red button to delete it." + }, + { + "name": "MultCloud", + "domains": [ + "multcloud.com" + ], + "url": "https://www.multcloud.com/", + "difficulty": "easy", + "notes": "Login to your account, click in the account icon \u2b95 Settings \u2b95 Delete Account and write the password and a note (optionally)." + }, + { + "name": "MuniMobile (San Francisco Municipal Transportation Agency)", + "domains": [ + "sfmta.transitsherpa.com", + "sfmta.com" + ], + "url": "https://sfmta.transitsherpa.com/rider-web/", + "difficulty": "impossible", + "notes": "If you mail them asking for deletion, you will get that \"MuniMobile accounts cannot be deleted as we are required to retain the transaction information for financial audit purposes\". They say they do deactivate the account, though.", + "email": "munimobile@sfmta.com" + }, + { + "name": "Munzee", + "domains": [ + "munzee.com" + ], + "url": "https://www.munzee.com/privacy/", + "difficulty": "hard", + "notes": "Send an e-mail to privacy@freezetag.com. This email should include your first name, last name, e-mail address and, if applicable, your social network ID for the social network from which you access these services. (for example, your Facebook user ID)", + "email": "privacy@freezetag.com" + }, + { + "name": "Musescore", + "domains": [ + "musescore.com", + "musescore.org" + ], + "url": "https://musescore.com/user/settings/profile", + "difficulty": "easy", + "notes": "Click on 'Delete account' at the left of the page." + }, + { + "name": "MusicBrainz", + "domains": [ + "musicbrainz.org" + ], + "url": "https://musicbrainz.org/account/edit", + "difficulty": "easy", + "notes": "Click on the 'Delete account' tab, then confirm with the 'Delete my account' button" + }, + { + "name": "Mutant Mail", + "domains": [ + "mutantmail.com", + "my.mutantmail.com" + ], + "url": "https://my.mutantmail.com/settings", + "difficulty": "easy", + "notes": "Re-verify intent with your password at the bottom of the settings page and click 'Delete Account'." + }, + { + "name": "My Calendar", + "domains": [ + "simpleinnovation.us" + ], + "url": "https://www.simpleinnovation.us/contact", + "difficulty": "hard", + "notes": "Contact support using the linked form or by email and request account deletion.", + "email": "feedback@period-tracker.com" + }, + { + "name": "My Fitness Pal", + "domains": [ + "myfitnesspal.com" + ], + "url": "https://www.myfitnesspal.com/en/account/confirm_delete", + "difficulty": "easy", + "notes": "Just login and head to the account settings to click on delete account." + }, + { + "name": "My Invisalign", + "domains": [ + "my.invisalign.com" + ], + "url": "https://my.invisalign.com/myprofile", + "difficulty": "easy", + "notes": "Login and select 'Delete Account' in the sidebar in your account settings" + }, + { + "name": "My Lands", + "domains": [ + "mlgame.org", + "mlgame.co.uk", + "uk.mlgame.org", + "s1.mlgame.co.uk", + "mlgame.us", + "s1.mlgame.us", + "us.mlgame.org", + "mlgame.ru", + "s1.mlgame.ru", + "ru.mlgame.org", + "s1.ru.mlgame.org", + "mlgame.fr", + "s1.mlgame.fr", + "fr.mlgame.org", + "s1.fr.mlgame.org", + "mlgame.it", + "s1.mlgame.it", + "it.mlgame.org", + "s1.it.mlgame.org", + "mlgame.bg", + "s1.mlgame.bg", + "bg.mlgame.org", + "mlgame.cz", + "s1.mlgame.cz", + "cz.mlgame.org", + "mlgame.hu", + "s1.mlgame.hu", + "hu.mlgame.org" + ], + "url": "https://uk.mlgame.org/", + "difficulty": "hard", + "notes": "Contact the customer support via email and ask to delete your account. You should use the email of the country where you are registered: it's in the contacts, at the bottom of the website.", + "email": "support_uk@elyland.net" + }, + { + "name": "MyAnimeList", + "domains": [ + "myanimelist.net" + ], + "url": "https://myanimelist.net/account_deletion", + "difficulty": "hard", + "notes": "Enter your email address in the \"Enter your registered email address\" field and click \"Confirmation\" to request the deletion of your account. After that, confirm your request by clicking on the confirmation link that will be sent to you by email.

    If your account has been banned for any reason or you are an MAL Supporter, request the deletion of your account through [this](https://myanimelist.net/about.php?go=contact) contact form instead of using the method explained above." + }, + { + "name": "myESET", + "domains": [ + "eset.com", + "my.eset.com" + ], + "url": "https://my.eset.com/account", + "difficulty": "easy", + "notes": "At the bottom of the account page there is a Delete account button" + }, + { + "name": "MyFonts", + "domains": [ + "myfonts.com" + ], + "url": "https://www.myfonts.com/my/settings/", + "difficulty": "easy", + "notes": "At the bottom of the linked page select 'Delete your MyFonts account' and confirm your password." + }, + { + "name": "MyFRITZ!", + "domains": [ + "myfritz.net", + "sso.myfritz.net" + ], + "url": "https://sso.myfritz.net/account/#/delete", + "difficulty": "easy", + "notes": "Login and select 'Delete Account' in the sidebar in your account settings" + }, + { + "name": "MyJDownloader", + "domains": [ + "jdownloader.org", + "my.jdownloader.org" + ], + "url": "https://my.jdownloader.org", + "difficulty": "easy", + "notes": "Go to your account settings (top right, click on your E-Mail-Adress) and select 'Delete Account'" + }, + { + "name": "MyMaxon", + "domains": [ + "maxon.net", + "support.maxon.net" + ], + "url": "https://support.maxon.net/hc/en-us/requests/new", + "difficulty": "hard", + "notes": "Visit the linked page and submit a support ticket asking for your account to be deleted. Under \"How can we help\", select the option \"I need customer service\", then change \"Request type\" to \"GDPR\"." + }, + { + "name": "MyPlate", + "domains": [ + "livestrong.com", + "livestrong.zendesk.com" + ], + "url": "https://livestrong.zendesk.com/hc/en-us/articles/205147450-How-do-I-delete-my-account-", + "difficulty": "hard", + "notes": "Send a request to the customer service team, including your account username or email address." + }, + { + "name": "MyScript", + "domains": [ + "myscript.com", + "sso.myscript.com" + ], + "url": "https://sso.myscript.com/v1/api/account/delete/request", + "difficulty": "easy", + "notes": "Accessing the URL triggers a confirmation mail containing a deletion link. Click this link and your account will be deleted immediately." + }, + { + "name": "MySpace", + "domains": [ + "myspace.com" + ], + "url": "https://myspace.com/settings/profile", + "difficulty": "easy" + }, + { + "name": "M\u00e9liuz", + "domains": [ + "meliuz.com.br" + ], + "url": "https://www.meliuz.com.br/minha-conta/meus-dados/excluir-conta", + "difficulty": "easy" + }, + { + "name": "N11", + "domains": [ + "n11.com" + ], + "url": "https://www.n11.com/hesabim/uyelik-iptali", + "difficulty": "easy" + }, + { + "name": "Namecheap", + "domains": [ + "namecheap.com" + ], + "url": "https://www.namecheap.com/support/knowledgebase/article.aspx/303/44/how-do-i-cancel-or-close-my-account-with-you", + "difficulty": "hard", + "notes": "You have to contact Customer Support to delete your account, and provide your account username, support pin and reason why you would like to close your account." + }, + { + "name": "Nandos", + "domains": [ + "nandos.com", + "help.nandos.co.uk" + ], + "url": "https://help.nandos.co.uk/hc/en-gb/requests/new", + "difficulty": "hard", + "notes": "Contact Customer support to delete your account, referencing GDPR in the subject or body. After 14 days, your account will be deleted permanently." + }, + { + "name": "NaNoWriMo", + "domains": [ + "nanowrimo.org" + ], + "url": "https://nanowrimo.org/account_settings", + "difficulty": "easy", + "notes": "At the bottom of the Account Settings page is a \"Delete My Account\" button. Your account will be \"disabled and scheduled for permanent deletion.\" After 30 days, \"your past novels, author profile, and unique account info will be permanently deleted.\" It is unclear if forum posts will be deleted." + }, + { + "name": "Napster", + "domains": [ + "napster.com", + "help.napster.com" + ], + "url": "https://help.napster.com/hc/en-us/articles/218661367", + "difficulty": "medium", + "notes": "Start a chat and ask for your account to be deleted. You can delete anyone's account like this! Just \"I'd like my account to be deleted.\" -\"What email?\" -\"email@email.email\" -\"Ok, I have gone ahead and deleted it.\"" + }, + { + "name": "National Express", + "domains": [ + "nationalexpress.com" + ], + "url": "https://nationalexpress.com", + "difficulty": "impossible", + "notes": "No on-site way to delete an account, also does not reply to emails sent to email in the privacy policy for the data controller." + }, + { + "name": "NationStates", + "domains": [ + "nationstates.net", + "forum.nationstates.net" + ], + "url": "https://www.nationstates.net/page=faq", + "difficulty": "medium", + "notes": "Stay logged out of your nation for 28 or 60 days, depending on your settings." + }, + { + "name": "Native", + "domains": [ + "nativecos.com" + ], + "url": "https://www.nativecos.com/pages/contact-us", + "difficulty": "hard", + "notes": "Fill out the contact form. They will email you to verify your request via email, and will then ask for two pieces of personal information from the account. They will then delete the account but retain information relevant to any orders made." + }, + { + "name": "Native Instruments", + "domains": [ + "native-instruments.com", + "support.native-instruments.com" + ], + "url": "https://support.native-instruments.com/hc/requests/new", + "difficulty": "hard", + "notes": "Fill the ticket form and wait for response." + }, + { + "name": "NAVER", + "domains": [ + "naver.com", + "nid.naver.com" + ], + "url": "https://nid.naver.com/user2/help/leaveId?menu=nid", + "difficulty": "medium", + "notes": "Re-registration is not possible with a deleted ID, and posts written on the bulletin board are not automatically deleted. So, make delete or make them private before you terminate your account. " + }, + { + "name": "NCBI", + "domains": [ + "ncbi.nlm.nih.gov" + ], + "url": "https://www.ncbi.nlm.nih.gov/books/NBK3842/", + "difficulty": "hard", + "notes": "Accounts will be deleted after 2 years of inactivity" + }, + { + "name": "Nearpod", + "domains": [ + "nearpod.com" + ], + "url": "https://nearpod.com/contact/", + "difficulty": "hard", + "notes": "Requires to fill out contact form. Will still get Promotional emails until you also unsubscribe from them" + }, + { + "name": "Neon Pagamentos", + "domains": [ + "neon.com.br", + "suporte.neon.com.br" + ], + "url": "https://suporte.neon.com.br/hc/pt-br/articles/360050729234-Como-fa%C3%A7o-para-cancelar-a-conta-", + "difficulty": "impossible", + "notes": "Neon accounts cannot be deleted, only canceled." + }, + { + "name": "Neopets", + "domains": [ + "neopets.com" + ], + "url": "https://www.neopets.com/help_search.phtml?help_id=4", + "difficulty": "hard", + "notes": "Send an email to the support@neopets.com stating you wish to delete your account.", + "email": "support@neopets.com" + }, + { + "name": "Nerdwallet", + "domains": [ + "nerdwallet.com" + ], + "url": "https://support.nerdwallet.com/hc/en-us/articles/115001636783-How-can-I-close-my-NerdWallet-account-", + "difficulty": "easy" + }, + { + "name": "Netdata", + "domains": [ + "netdata.cloud", + "app.netdata.cloud", + "learn.netdata.cloud", + "community.netdata.cloud" + ], + "url": "https://learn.netdata.cloud/docs/cloud/data-privacy#delete-all-personal-data", + "difficulty": "easy", + "notes": "In your profile preferences, click 'Delete account' then confirm." + }, + { + "name": "Netflix", + "domains": [ + "netflix.com", + "help.netflix.com" + ], + "url": "https://help.netflix.com/en/node/407", + "difficulty": "hard", + "notes": "Cancel your membership, then contact support if you want immediate deletion, otherwise your account will be automatically deleted in 10 months.", + "email": "privacy@netflix.com" + }, + { + "name": "Netlify", + "domains": [ + "netlify.com", + "app.netlify.com" + ], + "url": "https://app.netlify.com/account/settings/general#danger-zone", + "difficulty": "easy", + "notes": "Press the 'delete' button and then enter your name to confirm." + }, + { + "name": "Netology", + "domains": [ + "netology.ru" + ], + "url": "https://netology.ru", + "difficulty": "impossible", + "notes": "It is not possible to delete your account. The best you can do is delete any personal information that you have stored on their website." + }, + { + "name": "NetSfere", + "domains": [ + "netsfere.com", + "help.netsfere.com", + "web.netsfere.com" + ], + "url": "https://help.netsfere.com/", + "difficulty": "hard", + "email": "support@netsfere.com" + }, + { + "name": "Netvibes", + "domains": [ + "netvibes.com" + ], + "url": "https://www.netvibes.com/account/unsubscribe", + "difficulty": "easy" + }, + { + "name": "New Relic", + "domains": [ + "newrelic.com", + "docs.newrelic.com" + ], + "url": "https://docs.newrelic.com/docs/accounts/accounts-billing/account-setup/downgradecancel-account/#cancel-simple-org", + "difficulty": "easy", + "notes": "From the New Relic menu bar, select (account) \u2b95 Upgrade subscription \u2b95 Cancel account. Select the confirmation prompt." + }, + { + "name": "New York Times", + "domains": [ + "www.nytco.com", + "nytimes.com", + "myaccount.nytimes.com" + ], + "url": "https://www.nytimes.com/data-subject-request", + "difficulty": "hard", + "notes": "Use the form to request deletion of all of your personal data, they will only do it if law mandates like GDPR (Europe), otherwise account will just be deactivated. You might be required to confirm the request by mail or another form of contact." + }, + { + "name": "Newegg", + "domains": [ + "newegg.ca", + "newegg.com" + ], + "url": "https://kb.newegg.com/knowledge-base/privacy-policy-newegg/#12-what-are-your-rights", + "difficulty": "limited", + "notes": "Deleting your account is only possible if an applicable government policy gives you the right to delete your account.", + "email": "privacy@newegg.com" + }, + { + "name": "Newgrounds", + "domains": [ + "newgrounds.com" + ], + "url": "https://www.newgrounds.com/account/delete", + "difficulty": "easy", + "notes": "Go to your account settings and select \"Request Account Deletion.\" It can take up to 30 days for your account to be completely deleted." + }, + { + "name": "NewsBlur", + "domains": [ + "newsblur.com" + ], + "url": "https://www.newsblur.com/profile/delete_account", + "difficulty": "easy" + }, + { + "name": "Newspipe", + "domains": [ + "newspipe.org" + ], + "url": "https://www.newspipe.org/", + "difficulty": "hard", + "notes": "There is a \"delete your account\" button, but it was not working. Mailing them does.", + "email": "info@newspipe.org" + }, + { + "name": "Nexo", + "domains": [ + "nexo.io", + "platform.nexo.io" + ], + "url": "https://platform.nexo.io/security/close-account", + "difficulty": "easy", + "notes": "Login to your account, go to 'Account \u2b95 Security' and enable 2FA. Go to the URL and then close your account." + }, + { + "name": "Nexon", + "domains": [ + "nexon.com", + "one.nexon.com", + "nexon.net", + "support.nexon.net" + ], + "url": "https://support-maplestory.nexon.net/hc/fr/articles/360000698823-Comment-puis-je-supprimer-ou-d%C3%A9sactiver-mon-compte-", + "difficulty": "hard", + "notes": "Open a ticket to ask for account deletion" + }, + { + "name": "NextDNS", + "domains": [ + "nextdns.io", + "my.nextdns.io" + ], + "url": "https://my.nextdns.io/account", + "difficulty": "easy", + "notes": "Navigate to account settings and click the delete account button." + }, + { + "name": "Nextdoor", + "domains": [ + "nextdoor.com", + "help.nextdoor.com" + ], + "url": "https://help.nextdoor.com/s/article/How-to-deactivate-or-delete-your-account", + "difficulty": "hard", + "notes": "Accounts can only be deleted by contacting their support team." + }, + { + "name": "Nexus Mods", + "domains": [ + "nexusmods.com", + "users.nexusmods.com" + ], + "url": "https://users.nexusmods.com/account/security", + "difficulty": "easy" + }, + { + "name": "ngrok", + "domains": [ + "ngrok.com", + "ngrok.io", + "dashboard.ngrok.com" + ], + "url": "https://dashboard.ngrok.com/user/settings/delete", + "difficulty": "easy", + "notes": "Enter your email and click \"Delete\". You will get a popup, where you must click \"Delete User\"" + }, + { + "name": "NiceHash", + "domains": [ + "nicehash.com" + ], + "url": "https://nicehash.com/my/settings/security", + "difficulty": "easy" + }, + { + "name": "Nicequest", + "domains": [ + "nicequest.com" + ], + "url": "https://www.nicequest.com/br/profile", + "difficulty": "easy" + }, + { + "name": "Nike+", + "domains": [ + "nike.com", + "secure-nikeplus.nike.com" + ], + "url": "https://secure-nikeplus.nike.com/plus/settings/", + "difficulty": "easy", + "notes": "At the bottom of the account form, there is a 'Deactivate Account' button. Upon clicking, there will be a set of information that explains the process of account deactivation. All account information will be deleted." + }, + { + "name": "Ninox", + "domains": [ + "ninoxdb.de" + ], + "url": "https://ninoxdb.de/de/support/contactus", + "difficulty": "hard", + "notes": "Contact Support via the online contact form and request your account to be deleted. Alternatively you can use the support E-Mail address.", + "email": "support@ninoxdb.de" + }, + { + "name": "Nintendo", + "domains": [ + "nintendo.com", + "accounts.nintendo.com" + ], + "url": "https://accounts.nintendo.com/withdraw/confirm", + "difficulty": "easy", + "notes": "Scroll down and press deactive and delete, it will be deactived for 30 days and then permanently deleted, if a Nintendo Network ID is linked to the account, it will not be deleted in this process" + }, + { + "name": "Nintendo Network ID", + "domains": [ + "nintendo.com", + "accounts.nintendo.com" + ], + "url": "https://en-americas-support.nintendo.com/app/answers/detail/a_id/1088/~/how-to-delete-a-nintendo-network-id", + "difficulty": "easy" + }, + { + "name": "Nitrous Networks", + "domains": [ + "nitrous-networks.com" + ], + "url": "https://nitrous-networks.com/support/article/44/how-to-cancel-your-server", + "difficulty": "hard", + "notes": "You need to login in order to request the removal." + }, + { + "name": "Njalla", + "domains": [ + "njal.la" + ], + "url": "https://njal.la/settings/delete", + "difficulty": "easy", + "notes": "Type your password and confirm your action by clicking \"Delete Account\"." + }, + { + "name": "NodeChef", + "domains": [ + "nodechef.com" + ], + "url": "https://www.nodechef.com/", + "difficulty": "easy", + "notes": "In the dashboard, go to the \"Account\" tab, scroll down to \"Delete Account\" section, follow the instructions and then click \"Delete my account\"." + }, + { + "name": "NoIP", + "domains": [ + "noip.com", + "my.noip.com" + ], + "url": "https://my.noip.com/account", + "difficulty": "easy", + "notes": "At the bottom of the linked page, click the 'Delete Account' button. Check the 'I understand' box, then click 'Confirm'." + }, + { + "name": "Nomad", + "domains": [ + "nomadglobal.com", + "benomad.zendesk.com" + ], + "url": "https://benomad.zendesk.com/hc/pt-br/articles/360042473234-Como-solicito-o-fechamento-da-minha-conta-corrente-Nomad", + "difficulty": "easy" + }, + { + "name": "NordPass", + "domains": [ + "nordpass.com" + ], + "url": "https://nordpass.com/privacy-policy/#choices-related-to-your-data", + "difficulty": "hard", + "notes": "\"If you\u2019d like to delete your account or data, please contact us at support@nordpass.com\"", + "email": "support@nordpass.com" + }, + { + "name": "NordVPN", + "domains": [ + "nordvpn.com", + "support.nordvpn.com" + ], + "url": "https://support.nordvpn.com/FAQ/1521982312/How-can-I-delete-my-account.htm", + "difficulty": "hard", + "notes": "Fill the form on the site to request deletion. Alternatively, use the Live Chat service to request deletion, located at the bottom right of the form." + }, + { + "name": "Norton", + "domains": [ + "norton.com", + "my.norton.com", + "nortonlifelock.com" + ], + "url": "https://my.norton.com/extspa/account/privacyoptions", + "difficulty": "medium", + "notes": "You must cancel all active subscriptions before deleting your account. They will send a code to your email address to verify your identity." + }, + { + "name": "Notesnook", + "domains": [ + "notesnook.com", + "app.notesnook.com", + "blog.notesnook.com", + "help.notesnook.com", + "importer.notesnook.com", + "monograph.notesnook.com", + "vericrypt.notesnook.com" + ], + "url": "https://app.notesnook.com/tags#/settings", + "difficulty": "easy", + "notes": "Log in to your account via the app or website, go to the settings, click on \"Profile\" and then \"Delete account\"." + }, + { + "name": "The Noun Project", + "domains": [ + "thenounproject.com" + ], + "url": "https://thenounproject.zendesk.com/hc/en-us/articles/200509678-How-can-I-deactivate-my-user-account-", + "difficulty": "hard", + "notes": "'Email us at info@thenounproject.com and we'll deactivate your account.'", + "email": "info@thenounproject.com" + }, + { + "name": "Novation Music", + "domains": [ + "novationmusic.com" + ], + "url": "https://www.iubenda.com/privacy-policy/29650626/legal", + "difficulty": "hard", + "notes": "'Users have the right, under certain circumstances, to obtain the erasure of their Data from the Owner.'", + "email": "dpo@focusrite.com" + }, + { + "name": "NovelAI", + "domains": [ + "novelai.net" + ], + "url": "https://novelai.net/stories", + "difficulty": "medium", + "notes": "Log into your account, and press your account icon in the top left corner of the screen. Under the User Settings column, select 'Account'. Next to 'Delete Account', click the 'Request' button. Submit your email address, then check your inbox for an account deletion confirmation. Follow the included link, then click 'Delete Account'. Your data will be deleted within 24 hours." + }, + { + "name": "NovoEd", + "domains": [ + "novoed.com" + ], + "url": "http://help.novoed.com/hc/en-us/requests/new", + "difficulty": "hard", + "notes": "Create a new request titled \"Please delete my account\" using your e-mail address and the topic \"Course Not Listed/Not Course Related\"." + }, + { + "name": "NOW TV", + "domains": [ + "nowtv.com", + "help.nowtv.com" + ], + "url": "https://help.nowtv.com/contact-us/how-do-i-cancel-now-tv", + "difficulty": "impossible", + "notes": "You must first cancel any active passes under 'My Account' \u2b95 'My Passes'. After this, you can contact the live chat and ask for your billing information to be removed. Your account must remain inactive for an indeterminate amount of time before the remaining data will be removed 'in accordance with our group data retention and deletion policies'." + }, + { + "name": "npm", + "domains": [ + "npmjs.com" + ], + "url": "https://www.npmjs.com/settings/~/profile/", + "difficulty": "easy", + "notes": "Go to your account settings and press 'Delete your account'." + }, + { + "name": "NS (Nederlandse Spoorwegen)", + "domains": [ + "ns.nl" + ], + "url": "https://www.ns.nl/en/mijnns#/account-verwijderen", + "difficulty": "easy", + "notes": "Login to your NS (Nederlandse Spoorwegen) account and click on the linked URL. On this page you can click \"Delete NS-account\" in order to delete your account." + }, + { + "name": "NS1", + "domains": [ + "ns1.com" + ], + "url": "https://ns1.com", + "difficulty": "hard", + "notes": "Email support and request account deletion. They will process your request and email you when it has been deleted.", + "email": "support@ns1.com" + }, + { + "name": "nTask", + "domains": [ + "ntaskmanager.com", + "support.ntaskmanager.com" + ], + "url": "https://support.ntaskmanager.com/support/solutions/articles/43000545051-delete-your-ntask-account", + "difficulty": "hard", + "notes": "To delete your nTask account, follow this simple procedure: Using your registered email for nTask, send a request titled \"Account Deletion\" to \"support@ntaskmanager.com\" mentioning your name and email address. Once the request is received, it will take 24 hours to process your request", + "email": "support@ntaskmanager.com", + "email_subject": "Account Deletion" + }, + { + "name": "Nubank", + "domains": [ + "nubank.com.br", + "blog.nubank.com.br" + ], + "url": "https://blog.nubank.com.br/fechar-nuconta-e-facil/", + "difficulty": "impossible", + "notes": "Nubank accounts cannot be deleted, only canceled." + }, + { + "name": "Nube", + "domains": [ + "nube.com.br" + ], + "url": "https://www.nube.com.br/politica-uso-privacidade", + "difficulty": "impossible", + "notes": "According to the privacy policy, accounts cannot be deleted, only deactivated (and reactivated later)." + }, + { + "name": "Nutaku", + "domains": [ + "nutaku.net" + ], + "url": "https://www.nutaku.net/profile/delete/", + "difficulty": "easy", + "notes": "Click the Delete Account Button" + }, + { + "name": "NutraCheck", + "domains": [ + "nutracheck.co.uk" + ], + "url": "https://www.nutracheck.co.uk/", + "difficulty": "hard", + "notes": "Have to email customer care to ask for account to be deleted", + "email": "customercare@nutracheck.co.uk" + }, + { + "name": "Nvidia", + "domains": [ + "nvidia.com" + ], + "url": "https://www.nvidia.com/en-us/privacy-center/delete-data/", + "difficulty": "easy", + "notes": "Open the link, sign in, click 'Delete my data', click the confirmation link sent to your email, type in DELETE and press ok." + }, + { + "name": "O'Reilly", + "domains": [ + "oreilly.com" + ], + "url": "https://www.oreilly.com/", + "difficulty": "hard", + "notes": "The only way to delete an account is to send an e-mail to privacy mail as instructed on their privacy policy section 6.2 (https://www.oreilly.com/privacy.html).", + "email": "privacy@oreilly.com", + "email_body": "I want my account linked to this email be deleted. I request and authorize you to remove my profile from oreilly.com and delete all my information with your company across all platforms." + }, + { + "name": "OceanHero", + "domains": [ + "oceanhero.today", + "about.oceanhero.today", + "api.oceanhero.today" + ], + "url": "https://oceanhero.zendesk.com/hc/en-us/requests/new", + "difficulty": "hard", + "notes": "You need to [open a support ticket](https://oceanhero.zendesk.com/hc/en-us/requests/new)." + }, + { + "name": "Octopus", + "domains": [ + "octopus.do" + ], + "url": "https://octopus.do/sitemap/support/help", + "difficulty": "easy", + "notes": "Hit the button with the user icon in the top-right. Navigate to the 'Settings' tab and pick 'Delete my account'." + }, + { + "name": "Oculus VR", + "domains": [ + "oculus.com" + ], + "url": "https://store.facebook.com/help/quest/articles/accounts/account-settings-and-management/delete-oculus-account/", + "difficulty": "easy" + }, + { + "name": "Odnoklassniki", + "domains": [ + "odnoklassniki.ru" + ], + "url": "https://odnoklassniki.ru/regulations", + "difficulty": "easy", + "notes": "Login to your account, scroll License Agreement down, click Delete profile, check any boxes you want, enter password and press Remove button." + }, + { + "name": "OfferUp", + "domains": [ + "offerup.com" + ], + "url": "https://offerup.com/accounts/deactivate/", + "difficulty": "easy", + "notes": "Login to your account, click Delete Account, provide reason for deletion, confirm and complete. Very simple." + }, + { + "name": "OfficeDepot", + "domains": [ + "officedepot.com" + ], + "url": "https://www.officedepot.com/ccpa/landing.do", + "difficulty": "hard", + "notes": "Note that while their privacy policy states that California residents may have their information deleted permanently, it does not specify whether they delete other accounts also. Go to the URL and fill out the form with the information pertaining to your account. Open the 'Delete My Information' section and check the box next to 'Delete my consumer data'. Submit the form and wait for an email to arrive. Click the link in the email. If after 24 hours your account is not deleted, you might have to reach out to their customer support and present their Privacy Policy to have them act." + }, + { + "name": "OkCupid", + "domains": [ + "okcupid.com" + ], + "url": "https://www.okcupid.com/settings", + "difficulty": "easy", + "notes": "Visit your settings page, and select 'Delete Account'" + }, + { + "name": "OLX", + "domains": [ + "olx.com", + "olx.com.ar", + "olx.com.br", + "olx.com.co", + "olx.com.ec", + "olx.com.pe", + "olx.com.lb", + "olx.com.bh", + "olx.com.eg", + "olx.com.kw", + "olx.com.om", + "olx.com.pk", + "olx.sa.com", + "olx.co.id", + "olx.co.za", + "olx.in", + "olx.qa", + "olx.jo", + "olx.pl", + "olx.ba", + "olx.bg", + "olx.ro", + "olx.ua", + "olx.kz", + "olx.uz", + "olx.pt" + ], + "url": "https://www.olx.com", + "difficulty": "easy", + "notes": "Click in the profile link, privacy and security and at the very bottom of the page, click in the Delete Account link and enter the password." + }, + { + "name": "OmaPosti", + "domains": [ + "oma.posti.fi" + ], + "url": "https://asiakastiedot.posti.fi/myaccount/details", + "difficulty": "easy", + "notes": "In the bottom of the page, click 'Stop using Posti\u2019s electronic services'." + }, + { + "name": "One Month", + "domains": [ + "onemonth.com" + ], + "url": "https://www.iubenda.com/privacy-policy/735465", + "difficulty": "hard", + "notes": "Email support@honeybadger.io asking to close your account.", + "email": "support@honeybadger.io" + }, + { + "name": "OneCompiler", + "domains": [ + "onecompiler.com" + ], + "url": "https://onecompiler.com/", + "difficulty": "easy", + "notes": "Click your profile image in the top right corner of the page and open 'My account'. Select the 'Settings' tab, then click 'Account', and press the 'Delete My Account' button. Submit the code sent your email." + }, + { + "name": "OneFootball", + "domains": [ + "onefootball.com" + ], + "url": "https://onefootball.com/payments/delete-account", + "difficulty": "hard", + "notes": "You need to contact OneFootball support by e-mail.", + "email": "feedback@onefootball.com" + }, + { + "name": "OneSky", + "domains": [ + "oneskyapp.com", + "support.oneskyapp.com" + ], + "url": "https://support.oneskyapp.com/hc/en-us/articles/115005242827-How-to-Delete-your-OneSky-Account", + "difficulty": "hard", + "notes": "Contact Support." + }, + { + "name": "Onet", + "domains": [ + "onet.pl", + "konto.onet.pl" + ], + "url": "https://konto.onet.pl/data.html", + "difficulty": "easy", + "notes": "You just need to click 'Delete account', then enter your account password and tick the checkbox" + }, + { + "name": "The Onion", + "domains": [ + "theonion.com" + ], + "url": "https://notice.sp-prod.net/sar/index.html?message_id=539278&account_id=1195&ccpa_type=delete", + "difficulty": "hard", + "notes": "Fill out the form using the email address of your account and click on the verification link that is sent." + }, + { + "name": "Online.net", + "domains": [ + "online.net", + "console.online.net" + ], + "url": "https://console.online.net/fr/assistance/ticket", + "difficulty": "impossible", + "notes": "The french law forces them to keep your account because it's linked to your bills." + }, + { + "name": "OnlineTVRecorder.com", + "domains": [ + "onlinetvrecorder.com" + ], + "url": "https://www.onlinetvrecorder.com/v2/index.php?go=account&do=cancel", + "difficulty": "impossible", + "notes": "You can deactivate your account with the link. But the data isn't deleted. Even if you contact the support they don't delete your data." + }, + { + "name": "OnlyFans", + "domains": [ + "onlyfans.com" + ], + "url": "https://onlyfans.com/my/settings/advanced", + "difficulty": "easy", + "notes": "On settings tab, select the option 'Delete Account' and enter the captcha. After that, you'll receive an e-mail with the confirmation." + }, + { + "name": "OpenAI", + "domains": [ + "openai.com", + "chat.openai.com" + ], + "url": "https://help.openai.com/en/articles/6378407-how-can-i-delete-my-account", + "difficulty": "easy", + "notes": "There are two methods: Sign in to ChatGPT, click on settings at the bottom left, click on 'Delete Account', or using OpenAI's help chat." + }, + { + "name": "OpenCores", + "domains": [ + "opencores.org" + ], + "url": "https://opencores.org", + "difficulty": "impossible", + "notes": "They recommend e-mailing to request for deletion, but the e-mail is never answered." + }, + { + "name": "Opendesktop", + "domains": [ + "opendesktop.org" + ], + "url": "https://www.opendesktop.org", + "difficulty": "hard", + "notes": "E-mail their support to get the account deleted.", + "email": "contact@opendesktop.org", + "email_subject": "Account Deletion Request" + }, + { + "name": "OpenDNS", + "domains": [ + "opendns.com", + "dashboard.opendns.com" + ], + "url": "https://dashboard.opendns.com/myaccount/deleteaccount", + "difficulty": "easy", + "notes": "You can delete the account by visiting the delete account page." + }, + { + "name": "OpenFoodFacts", + "domains": [ + "openfoodfacts.com" + ], + "url": "https://blog.openfoodfacts.org/en/account-deletion", + "difficulty": "impossible", + "notes": "In order to delete your OpenFoodFacts account, you need to fill out the form and send an email. Though there is a form to delete your OpenFoodFacts account, it seems no one is tending to it.", + "email": "contact@openfoodfacts.org" + }, + { + "name": "OpenInvest", + "domains": [ + "openinvest.com", + "openinvest.co" + ], + "url": "https://www.openinvest.com/terms-of-service", + "difficulty": "hard", + "notes": "Email them telling them you want to delete your account. They will retain some information as necessary to \"comply with our legal obligations, resolve disputes and enforce our agreements\" (from their TOS and Privacy Policy), but most data will be deleted within 30 days.", + "email": "support@openinvest.com" + }, + { + "name": "OpenSea", + "domains": [ + "opensea.io", + "support.opensea.io" + ], + "url": "https://support.opensea.io/hc/requests/new", + "difficulty": "limited", + "notes": "Deleting your account is only possible if an applicable government policy gives you the right to delete your account." + }, + { + "name": "OpenStreetMap", + "domains": [ + "openstreetmap.org", + "community.openstreetmap.org", + "forum.openstreetmap.org", + "wiki.openstreetmap.org" + ], + "url": "https://www.openstreetmap.org/account/deletion", + "difficulty": "easy", + "notes": "Log In, go to the linked page and confirm the deletion" + }, + { + "name": "OpenTable", + "domains": [ + "opentable.com", + "help.opentable.com" + ], + "url": "https://help.opentable.com", + "difficulty": "hard", + "notes": "If you are using the iOS app, you can delete your account via Account Settings \u2b95 Your details \u2b95 Delete my account. Otherwise, you will need to contact OpenTable on their help page or via email", + "email": "privacy@opentable.com" + }, + { + "name": "OpenWeather", + "domains": [ + "openweather.co.uk", + "openweathermap.org", + "home.openweathermap.org" + ], + "url": "https://home.openweathermap.org/privacy/notifications#del_poll_modal", + "difficulty": "easy", + "notes": "Main website may still show you logged in after deletion (compared to the account management site). In that case, cookies need to cleared." + }, + { + "name": "Opera", + "domains": [ + "opera.com", + "auth.opera.com" + ], + "url": "https://auth.opera.com/account/delete-profile", + "difficulty": "easy", + "notes": "On the linked page select 'Delete my account'." + }, + { + "name": "Oracle", + "domains": [ + "oracle.com" + ], + "url": "https://www.oracle.com/legal/data-privacy-inquiry-form.html", + "difficulty": "hard", + "notes": "You have to send a privacy inquiry to get your data deleted. (It can take a few days)" + }, + { + "name": "OSBuddy", + "domains": [ + "osbuddy.com", + "rsbuddy.com" + ], + "url": "https://rsbuddy.com/osbuddy/docs/privacy", + "difficulty": "hard", + "notes": "You must contact support via your account's registered email address to request deletion.", + "email": "support@rsbuddy.com" + }, + { + "name": "Osu!", + "domains": [ + "osu.ppy.sh" + ], + "url": "https://osu.ppy.sh/wiki/en/Help_centre/Account#account-deletion", + "difficulty": "hard", + "notes": "You can only request account deletion by sending an email.", + "email": "privacy@ppy.sh" + }, + { + "name": "Out of Milk", + "domains": [ + "outofmilk.com" + ], + "url": "https://outofmilk.com/RemoveAccount.aspx", + "difficulty": "easy" + }, + { + "name": "Outdooractive", + "domains": [ + "outdooractive.com" + ], + "url": "https://www.outdooractive.com/en/k/how-do-i-delete-my-community-account-/50323147/#:~:text=Go%20to%20your%20page%20by,then%20select%20%22Delete%20Profile%22.", + "difficulty": "easy", + "notes": "Follow the instructions provided to navigate to your profile and find the delete account button." + }, + { + "name": "OV-chipkaart", + "domains": [ + "ov-chipkaart.nl" + ], + "url": "https://www.ov-chipkaart.nl/en/privacy", + "difficulty": "hard", + "notes": "You have the right to erasure ('right to be forgotten') with ov-chipkaart.nl, only you have to send an email and exercise your right to erasure to do so. Send an email to the email address provided requesting to delete your account and personal information.", + "email": "privacy@ov-chipkaart.nl" + }, + { + "name": "Overcast.fm", + "domains": [ + "overcast.fm" + ], + "url": "https://overcast.fm/account", + "difficulty": "impossible" + }, + { + "name": "Overleaf", + "domains": [ + "overleaf.com" + ], + "url": "https://www.overleaf.com/user/settings", + "difficulty": "easy", + "notes": "Select 'Delete your account' at the bottom of the account settings page.", + "email": "privacy@overleaf.com" + }, + { + "name": "Overstock", + "domains": [ + "overstock.com" + ], + "url": "https://help.overstock.com/help/s/article/Customer-Care-Contact-Information", + "difficulty": "hard", + "notes": "You must contact support directly and ask them to invalidate your account. However, your transaction data may not be deleted from their records." + }, + { + "name": "Overwolf", + "domains": [ + "overwolf.com" + ], + "url": "https://support.overwolf.com/en/support/solutions/articles/9000178281-deleting-your-overwolf-account-and-related-data", + "difficulty": "easy", + "notes": "Follow the instructions on the linked page to delete your account within the Overwolf app. Alternatively, you may email support and request account deletion.", + "email": "support@overwolf.com" + }, + { + "name": "OVHcloud UK", + "domains": [ + "ovh.co.uk" + ], + "url": "https://www.ovh.co.uk/personal-data-protection/exercise-your-rights?lsdDoc=exercising-your-rights", + "difficulty": "medium", + "notes": "This is for UK account holders only. Ensure that you have terminated all products and services before filling the form and deleting your account. You need to provide proof of identity." + }, + { + "name": "Oxford Dictionaries API", + "domains": [ + "developer.oxforddictionaries.com" + ], + "url": "https://developer.oxforddictionaries.com/contact-us", + "difficulty": "hard", + "notes": "Contact the customer support using the contact form and request the deletion of your account." + }, + { + "name": "Packagist", + "domains": [ + "packagist.org" + ], + "url": "https://packagist.org/profile/", + "difficulty": "easy", + "notes": "Visit the linked page and click 'Delete Account Permanently'." + }, + { + "name": "Packt", + "domains": [ + "packtpub.com" + ], + "url": "https://www.packtpub.com/", + "difficulty": "hard", + "notes": "Send an email to them requesting deletion. If you have a subscription plan or free trial be sure to cancel it.", + "email": "subscription.support@packtpub.com" + }, + { + "name": "Padrim", + "domains": [ + "padrim.com.br" + ], + "url": "https://padrim.zendesk.com/hc/pt-br/articles/360015115254-Como-excluo-minha-conta-do-Padrim-", + "difficulty": "impossible", + "notes": "At the moment, it's not possible to exclude the account, but you can change the profile to the \"private\" mode." + }, + { + "name": "PAGBET", + "domains": [ + "pagbet.com" + ], + "url": "https://assets.bet6.com.br/sistemans/skins/pagbet/doc/ba98aa02a1.pdf", + "difficulty": "hard", + "notes": "According to privacy policy (item 8), you have to send an e-mail to them requesting the account removal.", + "email": "contato@pagbet.com" + }, + { + "name": "Pandora", + "domains": [ + "pandora.com" + ], + "url": "https://www.pandora.com/settings/info", + "difficulty": "easy", + "notes": "Scroll down to delete my account and click it, click delete account, type in your password, then hit submit. If you have Pandora Plus or Premium, cancel your subscription, wait for it to expire, then delete." + }, + { + "name": "Pantheon", + "domains": [ + "pantheon.io", + "dashboard.pantheon.io" + ], + "url": "https://dashboard.pantheon.io/#account/delete/Delete", + "difficulty": "easy", + "notes": "In order to delete an account, you first have to delete all active Sites, or transfer the ownership." + }, + { + "name": "Papara", + "domains": [ + "papara.com" + ], + "url": "https://www.papara.com/", + "difficulty": "hard", + "notes": "You need to call the customer support in order to get your account deleted." + }, + { + "name": "PaperKarma", + "domains": [ + "paperkarma.com" + ], + "url": "https://www.paperkarma.com/faq", + "difficulty": "hard", + "notes": "Send an email to human@paperkarma.com requesting deletion. If you have a subscription plan through the App Store or Google Play, be sure to cancel your subscription in the proper store.", + "email": "human@paperkarma.com" + }, + { + "name": "Paradox Plaza", + "domains": [ + "paradoxplaza.com", + "support.paradoxplaza.com", + "crusaderkings.com", + "citiesskylines.com", + "heartsofiron4.com" + ], + "url": "https://support.paradoxplaza.com/hc/en-us/requests/new?ticket_form_id=360000086974", + "difficulty": "hard", + "notes": "You need to select \"GDPR - Request for Account Deletion\" in the form and fill in your details." + }, + { + "name": "Parallels", + "domains": [ + "parallels.com", + "my.parallels.com" + ], + "url": "https://my.parallels.com/profile/personal/general", + "difficulty": "medium", + "notes": "Need to login, click the delete button, confirm in the email, and confirm on the site again." + }, + { + "name": "Paramount Plus", + "domains": [ + "paramountplus.com", + "help.paramountplus.com" + ], + "url": "https://help.paramountplus.com/s/article/PD-How-do-I-delete-my-Paramount-account", + "difficulty": "hard", + "notes": "You may also use the privacy form linked if you reside in California, but be warned, it is much slower." + }, + { + "name": "Parcello", + "domains": [ + "parcello.org" + ], + "url": "https://www.parcello.org/settings", + "difficulty": "easy", + "notes": "Go to settings, click 'Delete account' underneath 'Miscellaneous'. Confirm this process in the modal. Works within the app as well." + }, + { + "name": "Parkmobile", + "domains": [ + "parkmobile.us", + "parkmobile.com", + "parkmobile.zendesk.com" + ], + "url": "https://parkmobile.zendesk.com/hc/en-us/articles/203299300-How-do-I-cancel-my-account-", + "difficulty": "hard", + "notes": "To cancel your account, send an e-mail message request to the Parkmobile Help Desk at helpdesk@parkmobileglobal.com and include your name, mobile number, license plate number, and/or the last 4 digits of the card we have on file for you. After the Help Desk cancels your account, you will receive a confirmation e-mail message.", + "email": "helpdesk@parkmobileglobal.com" + }, + { + "name": "Parsec", + "domains": [ + "parsec.app", + "parsecgaming.com" + ], + "url": "https://parsec.app/settings/account/", + "difficulty": "easy", + "notes": "At the bottom of the linked page select 'Delete Account' and confirm your username." + }, + { + "name": "PassDock", + "domains": [ + "passdock.com", + "api.passdock.com" + ], + "url": "https://api.passdock.net/users/edit", + "difficulty": "easy", + "notes": "Select 'Delete account' at the bottom of your account info page." + }, + { + "name": "Passpack", + "domains": [ + "passpack.com" + ], + "url": "https://support.passpack.com/hc/en-us/articles/200749084-How-to-Delete-Your-Passpack-Account", + "difficulty": "easy", + "notes": "Sign into your Passpack account. Click on your \u2019Account\u2019 tab then click the \u2019delete your account\u2019 link in the lower left hand corner of the page. You will then be asked to insert your Packing Key to confirm that you are sure. Click 'Delete' to permanently delete your account." + }, + { + "name": "Pastebin", + "domains": [ + "pastebin.com" + ], + "url": "https://pastebin.com/user/delete-account", + "difficulty": "easy", + "notes": "Password is required for deletion. Pastes will be removed and the username cannot be used again. No Recovery after deletion." + }, + { + "name": "Patreon", + "domains": [ + "patreon.com", + "privacy.patreon.com" + ], + "url": "https://privacy.patreon.com/policies?modal=take-control", + "difficulty": "easy", + "notes": "Log in, and open the link. Click 'Erase', and proceed to press buttons. Deletion is delayed by 14 days. Data about the deletion is shared with Transcend Inc." + }, + { + "name": "Patrick Krempf Reminder", + "domains": [ + "patrickkempf.de" + ], + "url": "https://reminder.patrickkempf.de/manage.php?do=delaccount", + "difficulty": "easy" + }, + { + "name": "Payoneer", + "domains": [ + "payoneer.com", + "payoneer.custhelp.com" + ], + "url": "https://payoneer.custhelp.com/app/ask/l_id/1/c/3753", + "difficulty": "hard", + "notes": "According to their Support Center, you need to contact them via email, live chat, or phone." + }, + { + "name": "PayPal", + "domains": [ + "paypal.com" + ], + "url": "https://www.paypal.com/myaccount/privacy/data/deletion", + "difficulty": "medium", + "notes": "You must resolve any account limitations and outstanding payments or balance before closing." + }, + { + "name": "PaySafeCard", + "domains": [ + "paysafecard.com", + "login.paysafecard.com" + ], + "url": "https://login.paysafecard.com/customer-auth/?client_id=mypinsPR&theme=mypins&locale=en_US&redirect_uri=https%3A%2F%2Fmy.paysafecard.com%2Fmypins-psc%2FtokenExchange.xhtml", + "difficulty": "easy", + "notes": "You can only delete an account on the computer. Go to account settings, then click \"Delete account\"." + }, + { + "name": "PaySera", + "domains": [ + "paysera.com", + "bank.paysera.com" + ], + "url": "https://bank.paysera.com/l.php?tmpl_into=middle&tmpl_name=m_helpdesk_ask_your_question", + "difficulty": "hard", + "notes": "Quote from the support staff: If you want to delete your Paysera account completely, please write us an email (support@paysera.com) with a request and indicate why you want to delete your account. This email has to be sent from the email address that you use to log in to your Paysera account. Please be informed that if you delete your account, you will not be able to create a new account in the future. Paysera account is free of charge and we recommend not to delete it, but close the account, and you will be able to activate it in the future yourself by logging in to your Paysera account.", + "email": "support@paysera.com" + }, + { + "name": "PCBWay", + "domains": [ + "pcbway.com" + ], + "url": "https://www.pcbway.com/helpcenter/accountsettings/Account_Settings.html", + "difficulty": "hard", + "notes": "You need to contact support through built-in chat or you can comment on the linked thread" + }, + { + "name": "pCloud", + "domains": [ + "pcloud.com", + "my.pcloud.com", + "pass.pcloud.com" + ], + "url": "https://my.pcloud.com/#page=settings&settings=tab-account", + "difficulty": "medium", + "notes": "Go to Settings \u2b95 Account \u2b95 Delete Your Account and confirm the e-mail. The data will be deleted within three months." + }, + { + "name": "PCPartPicker", + "domains": [ + "pcpartpicker.com" + ], + "url": "https://pcpartpicker.com", + "difficulty": "easy", + "notes": "Click the delete account on your account preferences." + }, + { + "name": "pdfFiller", + "domains": [ + "pdffiller.com" + ], + "url": "https://www.pdffiller.com/en/login/signin?ref=%2Fen%2Faccount%2Fsettings", + "difficulty": "easy", + "notes": "Log in to your account, then go to 'Settings' tab and click 'Delete Account'." + }, + { + "name": "Peacock", + "domains": [ + "peacocktv.com" + ], + "url": "https://privacyportal.onetrust.com/webform/17e5cb00-ad90-47f5-a58d-77597d9d2c16/2aa79e13-e7d2-4d45-b928-7df9a72bec32", + "difficulty": "medium", + "notes": "If you live in the U.S., fill out the form, select Peacock under applicable brands, and your account will be automatically deleted after some time. You may still receive a human response later however. Users outside of the U.S. should send an email to the privacy contact listed at the top of the form." + }, + { + "name": "Peak", + "domains": [ + "www.peak.net" + ], + "url": "https://peak.net", + "difficulty": "hard", + "notes": "You must send an e-mail to support@peak.net requesting deletion. You will then receive a response from support asking for feedback and to confirm the deletion. The next e-mail you receive from support will notify you that your account has been deleted.", + "email": "support@peak.net" + }, + { + "name": "Peloton", + "domains": [ + "onepeloton.com" + ], + "url": "https://privacyportal.onetrust.com/webform/18f92a28-d2ae-4a6a-8f99-85b4455e22c0/cfbaf35a-5e06-4010-a6b6-1ad61ba414f1", + "difficulty": "hard", + "notes": "To permanently delete your Peloton Account, please fill out the Privacy Request Form. Once the form is completed, the Peloton Privacy Team will begin processing your request. " + }, + { + "name": "Pennsylvania Turnpike (Toll By Plate)", + "domains": [ + "paturnpike.com" + ], + "url": "https://www.paturnpike.com/help-center#contact-form", + "difficulty": "hard", + "notes": "NOT FOR EZPASS ACCOUNTS. Fill out the form using the same information that is associated to your account. Alternatively, the account can be closed by calling 877-736-6727." + }, + { + "name": "Penpot", + "domains": [ + "penpot.app", + "design.penpot.app" + ], + "url": "https://design.penpot.app/#/settings/profile", + "difficulty": "easy", + "notes": "Go to your profile settings and click on \"Want to remove your account?\" " + }, + { + "name": "Penzu", + "domains": [ + "penzu.com" + ], + "url": "https://penzu.com/app/account/delete", + "difficulty": "easy", + "notes": "Click on 'Delete Penzu Account'. Confirm the deletion through the link sent to your email address." + }, + { + "name": "peopleperhour", + "domains": [ + "peopleperhour.com" + ], + "url": "https://www.peopleperhour.com/settings/general", + "difficulty": "medium", + "notes": "Profile \u2b95 settings \u2b95 account \u2b95 edit \u2b95 select a reason \u2b95 deactivate" + }, + { + "name": "The Perfect Shave", + "domains": [ + "perfect-shave.de" + ], + "url": "https://www.perfect-shave.de/einstellungen", + "difficulty": "easy", + "notes": "Click on 'Konto l\u00f6schen' and then on 'Mein Konto jetzt unwiederruflich l\u00f6schen'" + }, + { + "name": "Perplexity", + "domains": [ + "perplexity.ai" + ], + "url": "https://www.perplexity.ai/privacy", + "difficulty": "hard", + "notes": "According to their privacy policy, you must send an e-mail requesting account deletion.", + "email": "support@perplexity.ai" + }, + { + "name": "Personal Capital", + "domains": [ + "personalcapital.com", + "home.personalcapital.com" + ], + "url": "https://home.personalcapital.com/page/login/app#/settings", + "difficulty": "easy", + "notes": "Click 'DELETE USER ACCOUNT' at the bottom of the settings page." + }, + { + "name": "Personello Germany", + "domains": [ + "de.personello.com" + ], + "url": "https://de.personello.com/service", + "difficulty": "hard", + "notes": "It is necessary to contact the support, for example through 'Mein Konto' \u2b95 'Meinung abgeben'." + }, + { + "name": "Pexels", + "domains": [ + "pexels.com", + "help.pexels.com" + ], + "url": "https://help.pexels.com/hc/en-us/articles/360042822033-How-can-I-delete-my-account-", + "difficulty": "medium", + "notes": "Follow the instructions on the help article to delete your account." + }, + { + "name": "Philips Hue", + "domains": [ + "meethue.com", + "account.meethue.com" + ], + "url": "https://account.meethue.com/account", + "difficulty": "easy", + "notes": "Click 'Delete Account' on your account page." + }, + { + "name": "PhishTank", + "domains": [ + "phishtank.com" + ], + "url": "https://privacyrequest.cisco.com", + "difficulty": "hard", + "notes": "Select \"Phishtank\" under \"Account(s) or Service(s) of interest\" and specify in request details that you wish to delete your account." + }, + { + "name": "Photobucket", + "domains": [ + "photobucket.com", + "support.photobucket.com" + ], + "url": "https://support.photobucket.com/hc/en-us/articles/360039780614", + "difficulty": "hard", + "notes": "To delete your account, you must [open a support ticket](https://support.photobucket.com/hc/en-us/requests/new) and provide your username, email address, full name, dob, the postal code and country from where you registered for verification. According to Photobucket, account deletion takes up to 30 days, and your old pictures cannot be recovered from deleted accounts as they will be completely erased from their servers." + }, + { + "name": "Photomath", + "domains": [ + "photobucket.com" + ], + "url": "https://photomath.com/en/help/delete-account", + "difficulty": "easy", + "notes": "Open the menu and sign in \u2b95 'Security and Privacy' \u2b95 'Edit profile' \u2b95 'Delete profile'" + }, + { + "name": "phplist", + "domains": [ + "phplist.com" + ], + "url": "https://www.phplist.com/privacy", + "difficulty": "hard", + "notes": "Write an email requesting all data to be deleted.", + "email": "info@phplist.com" + }, + { + "name": "Piazza", + "domains": [ + "piazza.com" + ], + "url": "https://support.piazza.com/support/solutions/articles/48000616709-student-delete-your-account", + "difficulty": "hard", + "notes": "E-mail them and ask to close your account. They will reply asking you to confirm, after which point you can acknowledge and it will be removed.", + "email": "help@piazza.com" + }, + { + "name": "PicPay", + "domains": [ + "picpay.com", + "meajuda.picpay.com", + "picpay.me" + ], + "url": "https://meajuda.picpay.com/hc/pt-br/articles/4407302956819-Como-encerro-minha-conta-do-PicPay-", + "difficulty": "medium", + "notes": "PicPay accounts can be reactivated within 25 days of the request." + }, + { + "name": "Pillpack", + "domains": [ + "pillpack.com", + "app.pillpack.com", + "folks.pillpack.com", + "my.pillpack.com" + ], + "url": "https://help.pillpack.com/hc/en-us/requests/new", + "difficulty": "hard", + "notes": "Will need to contact customer support and confirm your name and information before they'll delete." + }, + { + "name": "Pinboard", + "domains": [ + "pinboard.in" + ], + "url": "https://pinboard.in/faq/#close_account", + "difficulty": "easy", + "notes": "Visit your account page and click the \"close account\" link under your username. Your account will be suspended for 30 days, and then permanently deleted." + }, + { + "name": "Pingdom", + "domains": [ + "pingdom.com", + "my.pingdom.com" + ], + "url": "https://my.pingdom.com/account/cancel/confirm", + "difficulty": "easy" + }, + { + "name": "Pinterest", + "domains": [ + "pinterest.com" + ], + "url": "https://pinterest.com/settings/account-settings/", + "difficulty": "medium", + "notes": "On the Account Settings, click 'Delete Account', state reason and click 'Next', then 'Send email'. You need to check the e-mail and confirm the deletion." + }, + { + "name": "PivotalTracker", + "domains": [ + "pivotaltracker.com" + ], + "url": "https://www.pivotaltracker.com", + "difficulty": "medium", + "notes": "You can delete your account using the website, but it is only fully deleted after e-mailing", + "email": "tracker@pivotal.io" + }, + { + "name": "Pixabay", + "domains": [ + "pixabay.com" + ], + "url": "https://pixabay.com/de/accounts/settings/", + "difficulty": "easy", + "notes": "In your account setting choose 'Delete account'." + }, + { + "name": "Pixel Starships", + "domains": [ + "pixelstarships.com" + ], + "url": "https://www.pixelstarships.com/privacypolicy", + "difficulty": "hard", + "notes": "According to Privacy Policy, \"To request the correction or deletion of any personally identifiable information that you have provided to us, send an email to mail@savysoda.com with \"ACCESS AND CORRECT INFORMATION\" in the subject line.\"", + "email": "mail@savysoda.com", + "email_subject": "ACCESS AND CORRECT INFORMATION", + "email_body": "Please delete my Pixel Starships account registered under this email address." + }, + { + "name": "Pixilart", + "domains": [ + "pixilart.com" + ], + "url": "https://www.pixilart.com/settings/delete", + "difficulty": "easy", + "notes": "Fairly simple process, just follow the link." + }, + { + "name": "pixiv", + "domains": [ + "www.pixiv.net" + ], + "url": "https://www.pixiv.net/leave_pixiv.php", + "difficulty": "easy", + "notes": "It takes 2 weeks to delete an account. You will be unable to re-use the same e-mail during that period. They won't delete \"pixiv ID\"." + }, + { + "name": "Pixlr", + "domains": [ + "pixlr.com" + ], + "url": "https://pixlr.com/myaccount/", + "difficulty": "easy", + "notes": "Click on 'Delete account' under your profile settings, state why you want it to be delete and enter your password." + }, + { + "name": "Pixum", + "domains": [ + "pixum.com", + "int.pixum.com" + ], + "url": "https://int.pixum.com/service/delete-account", + "difficulty": "hard", + "notes": "Contact support via email and request your account to be deleted.", + "email": "service@pixum.com" + }, + { + "name": "Pizza Hut", + "domains": [ + "pizzahut.com" + ], + "url": "https://pizzahut.com", + "difficulty": "hard", + "notes": "Download the Pizza Hut app. Sign-in with account information, click on the 'account' tab and tap on profile. On the close my account section, tap on the close my account. Fill in your information (name, address, phone, email,) and click submit." + }, + { + "name": "Placeit", + "domains": [ + "placeit.net" + ], + "url": "https://placeit.net/account", + "difficulty": "easy", + "notes": "Scroll down to the bottom of the linked page and click on the 'Delete my account' button." + }, + { + "name": "PlanetMinecraft", + "domains": [ + "planetminecraft.com" + ], + "url": "https://www.planetminecraft.com/tickets/new/", + "difficulty": "hard", + "notes": "Visit the linked page and submit a ticket asking to have your account deleted." + }, + { + "name": "PlantSnap", + "domains": [ + "plantsnap.com" + ], + "url": "https://www.plantsnap.com/support-center/get-in-touch/", + "difficulty": "medium", + "notes": "To delete your account, open the app on your mobile device and click the \"More\" option button. Then click your profile name, from there you will be able to delete your account. If you require additional help, use the contact form provided on their website." + }, + { + "name": "Player FM", + "domains": [ + "player.fm" + ], + "url": "https://player.fm/will-miss-you", + "difficulty": "easy", + "notes": "In upper right, click the settings button and select \"Help/FAQ\". Select option \"How do I delete my account and leave Player FM?\" - link will be below. Type \"delete\" in the box and click the button to finalize." + }, + { + "name": "Playit.gg", + "domains": [ + "playit.gg" + ], + "url": "https://playit.gg/account/settings/account/delete-account", + "difficulty": "easy" + }, + { + "name": "PlayPosit", + "domains": [ + "playposit.com", + "go.playposit.com" + ], + "url": "https://go.playposit.com", + "difficulty": "easy", + "notes": "Click your username in the upper right and select Profile, then Delete Account" + }, + { + "name": "PlayStation Network", + "domains": [ + "playstation.com", + "sony.com", + "sonyentertainmentnetwork.com" + ], + "url": "https://www.playstation.com/en-us/support/account/close-account-for-psn/", + "difficulty": "hard", + "notes": "You need to have your account e-mail address, gamer tag, playstation serial number (or payment method, with transaction ID), and account name (not profile name) on hand to fulfill the request. This may take some time and should be done properly the first time (if possible)." + }, + { + "name": "Plenty of Fish", + "domains": [ + "pof.com" + ], + "url": "https://www.pof.com/deleteaccount.aspx", + "difficulty": "easy", + "notes": "Fill out the deletion form" + }, + { + "name": "Plex.tv", + "domains": [ + "plex.tv" + ], + "url": "https://plex.tv/users/edit", + "difficulty": "easy", + "notes": "Under 'Danger Zone', click 'Delete your account'." + }, + { + "name": "Plugin Boutique", + "domains": [ + "pluginboutique.com", + "help.pluginboutique.com" + ], + "url": "https://help.pluginboutique.com/hc/en-us/requests/new?ticket_form_id=8801812364052", + "difficulty": "hard", + "notes": "Fill out the ticket form to request deletion, using the same email of the account." + }, + { + "name": "Pluralsight", + "domains": [ + "codeschool.com", + "pluralsight.com", + "help.pluralsight.com" + ], + "url": "https://help.pluralsight.com/help/how-do-i-delete-my-account", + "difficulty": "easy", + "notes": "Follow the instructions provided in the article. If you prefer, you can also request deletion of your account via email. NOTE: If you have outstanding payments or disputes or if you aren't comfortable with sharing personal data to confirm deletion, it might be harder", + "email": "support@pluralsight.com" + }, + { + "name": "Plus500", + "domains": [ + "plus500.com", + "app.plus500.com", + "cdn-main.plus500.com" + ], + "url": "https://www.plus500.com/en-CY/MyInfo/PersonalDataRequests/", + "difficulty": "medium", + "notes": "You have to fill the 'Personal Data Requests' form to delete your account: provide your e-mail address, and under 'Request Type' select 'Right of erasure'." + }, + { + "name": "Pocket", + "domains": [ + "getpocket.com", + "help.getpocket.com" + ], + "url": "https://getpocket.com/account_deletion/", + "difficulty": "easy" + }, + { + "name": "Pocket Casts", + "domains": [ + "pocketcasts.com", + "support.pocketcasts.com" + ], + "url": "https://support.pocketcasts.com", + "difficulty": "easy", + "notes": "On your phone: Open the Pocket Casts app, click on the \"Profile\" tab and then on your account, finally scroll down and click on \"Delete Account\" at the bottom of the screen. On your browser: Log in to the Pocket Casts web player, click on the profile icon in the top right-hand corner, click on your email address then scroll down and click on the \"Delete Account\" link. A confirmation pop-up will appear asking if you're sure you want to delete your account. Click \"Delete\" to confirm" + }, + { + "name": "Pocketbook", + "domains": [ + "getpocketbook.com" + ], + "url": "https://getpocketbook.com/settings", + "difficulty": "medium", + "notes": "Click on 'Remove Pocketbook Account' under account settings. Select an option from dropdown and type random feedback. Click Submit button. Type CONFIRM into text box and proceed to delete account." + }, + { + "name": "Pocoyo Club", + "domains": [ + "pocoyo.com" + ], + "url": "https://www.pocoyo.com/en/club/account-cancellation", + "difficulty": "easy" + }, + { + "name": "Podio", + "domains": [ + "podio.com" + ], + "url": "https://podio.com/settings/account", + "difficulty": "easy", + "notes": "Log in to your account, press the delete button and type the phrase asked." + }, + { + "name": "Points.com", + "domains": [ + "points.com" + ], + "url": "https://www.points.com/pdccontent/salesforce/", + "difficulty": "hard", + "notes": "Must contact support through Contanct form or online chat." + }, + { + "name": "Pok\u00e9mon GO", + "domains": [ + "niantic.helpshift.com", + "gorelease-assets.nianticstatic.com", + "nianticlabs.com" + ], + "url": "https://niantic.helpshift.com/hc/en/6-pokemon-go/faq/3518-how-do-i-delete-my-pokemon-go-account-1656453288/", + "difficulty": "easy", + "notes": "Sign in to the app with the game account you want to delete, then navigate to the Pok\u00e9mon GO app 'Settings' \u2b95 'Advanced Settings' \u2b95 'Delete Account' and confirm." + }, + { + "name": "Pok\u00e9mon Trainer Club", + "domains": [ + "support.pokemon.com", + "pokemon.com", + "club.pokemon.com" + ], + "url": "https://support.pokemon.com/hc/en-us/articles/360000965826-How-do-I-delete-my-Pok%C3%A9mon-Trainer-Club-account-", + "difficulty": "easy", + "notes": "Go to https://club.pokemon.com/us/pokemon-trainer-club/edit-profile/ scroll down to the bottom and click 'Request Data Deletion', enter the required fields and you'll then get a confirmation email." + }, + { + "name": "Polar", + "domains": [ + "flow.polar.com" + ], + "url": "https://account.polar.com/", + "difficulty": "easy", + "notes": "Select the account deletion option from the site." + }, + { + "name": "pon", + "domains": [ + "ponlist.de", + "my.ponlist.de" + ], + "url": "https://my.ponlist.de/de/legal", + "difficulty": "easy", + "notes": "Open the app \u2b95 Open Settings \u2b95 Click on your Account's information \u2b95 Initiate deletion" + }, + { + "name": "Porkbun", + "domains": [ + "porkbun.com" + ], + "url": "https://porkbun.com/account", + "difficulty": "easy", + "notes": "Log into your account \u2b95 Click the link \u2b95 Click the Delete Account button and follow instructions." + }, + { + "name": "PornHub", + "domains": [ + "pornhub.com", + "help.pornhub.com" + ], + "url": "https://help.pornhub.com/hc/en-us/articles/4419877487635-How-do-I-delete-my-account-", + "difficulty": "easy" + }, + { + "name": "postale.io", + "domains": [ + "postale.io" + ], + "url": "https://postale.io/admin/my/show", + "difficulty": "easy", + "notes": "Click on the 'Delete account' red button at the bottom of the page. Only administrator accounts can delete an account though." + }, + { + "name": "Postcrossing", + "domains": [ + "postcrossing.com" + ], + "url": "https://www.postcrossing.com/removal", + "difficulty": "easy", + "notes": "Log into your account \u2b95 Click the link (data fully deleted, not possible to revert this)." + }, + { + "name": "postimage", + "domains": [ + "postimages.org", + "postimg.cc", + "i.postimg.cc" + ], + "url": "https://postimg.cc/profile/delete", + "difficulty": "easy", + "notes": "Log in, go to the linked website, enter your password and confirm" + }, + { + "name": "Postman", + "domains": [ + "getpostman.com", + "app.getpostman.com" + ], + "url": "https://app.getpostman.com/dashboard/profile", + "difficulty": "easy", + "notes": "Log into your account, then click the 'Delete Account' button on your profile page." + }, + { + "name": "Postmates", + "domains": [ + "postmates.com", + "support.postmates.com" + ], + "url": "https://support.postmates.com/buyer/contact-us/delete-account", + "difficulty": "medium", + "notes": "Fill in account information and click 'Report Issue'. Reply to the email sent to you to confirm deletion." + }, + { + "name": "The Powder Toy", + "domains": [ + "powdertoy.co.uk" + ], + "url": "https://powdertoy.co.uk/Discussions/Thread/View.html?Thread=24007", + "difficulty": "impossible" + }, + { + "name": "PowToon", + "domains": [ + "powtoon.com", + "support.powtoon.com" + ], + "url": "https://support.powtoon.com/en/article/deleting-your-powtoon-account", + "difficulty": "hard", + "notes": "Click on the contact link of the linked page and fill out the form." + }, + { + "name": "Premera", + "domains": [ + "premera.com" + ], + "url": "https://www.premera.com/wa/visitor/", + "difficulty": "hard", + "notes": "Email Premera's support team to request account deletion.", + "email": "support@premera.com" + }, + { + "name": "Premiumize.me", + "domains": [ + "premiumize.me" + ], + "url": "https://www.premiumize.me/deleteaccount", + "difficulty": "easy", + "notes": "Log into your account \u2b95 Click the link \u2b95 Click on Send verification code \u2b95 Paste the code you got on your email and click Delete Account." + }, + { + "name": "Previewed", + "domains": [ + "previewed.app" + ], + "url": "https://previewed.app/account", + "difficulty": "easy", + "notes": "Log into your account \u2b95 Go to account settings \u2b95 Scroll down to the bottom of the page \u2b95 Click Delete Account." + }, + { + "name": "Prey", + "domains": [ + "preyproject.com", + "panel.preyproject.com" + ], + "url": "https://panel.preyproject.com/settings/account", + "difficulty": "easy", + "notes": "Log into your account \u2b95 Click 'Need to close your account?' near the bottom of the page \u2b95 Confirm deletion" + }, + { + "name": "Prezi", + "domains": [ + "prezi.com" + ], + "url": "https://prezi.com/settings/delete-account/", + "difficulty": "easy", + "notes": "Log into your account \u2b95 Click the link \u2b95 Enter your password and click on Delete Account." + }, + { + "name": "Privacy", + "domains": [ + "privacy.com", + "support.privacy.com" + ], + "url": "https://support.privacy.com/hc/en-us", + "difficulty": "hard", + "notes": "Click on the submit request button and click the request type to Close Account and fill out the form." + }, + { + "name": "ProductHunt", + "domains": [ + "producthunt.com" + ], + "url": "https://www.producthunt.com/my/settings/edit", + "difficulty": "easy", + "notes": "Go to the account setting, click 'Continue' under 'Delete my Account' and follow from there." + }, + { + "name": "Progate", + "domains": [ + "progate.com" + ], + "url": "https://progate.com/deactivate", + "difficulty": "easy", + "notes": "Visit the linked page and click 'Delete Account'" + }, + { + "name": "ProMods", + "domains": [ + "https://promods.net/" + ], + "url": "https://promods.net/", + "difficulty": "hard", + "notes": "Contact via Discord or forum asking to delete account." + }, + { + "name": "Proofwiki", + "domains": [ + "proofwiki.org" + ], + "url": "https://proofwiki.org/wiki/ProofWiki:Privacy_policy#Removal_of_user_accounts", + "difficulty": "impossible" + }, + { + "name": "Prosper", + "domains": [ + "prosper.com" + ], + "url": "https://www.prosper.com/secure/account/borrower/close_account.aspx", + "difficulty": "easy", + "notes": "Log into your account \u2b95 Click the link \u2b95 Click on Close My Account Now." + }, + { + "name": "Proto.io", + "domains": [ + "proto.io", + "support.proto.io" + ], + "url": "https://support.proto.io/hc/en-us/articles/222733628-Dashboard-basics-Billing-Settings", + "difficulty": "easy", + "notes": "You can either close your account temporary or delete it permanently. Log into your account \u2b95 Click Settings \u2b95 Manage Subscription \u2b95 NEED TO CLOSE YOUR ACCOUNT? click Yes, Close Account" + }, + { + "name": "Proton", + "domains": [ + "proton.me", + "account.proton.me", + "calendar.proton.me", + "drive.proton.me", + "mail.proton.me", + "protonmail.com", + "protonvpn.com", + "account.protonvpn.com" + ], + "url": "https://account.proton.me/u/0/mail/account-password", + "difficulty": "medium", + "notes": "Open your account settings, go to 'Account' \u2b95 'Account and password' \u2b95 'Delete your account'. You need to select a reason for deleting your account and give some feedback." + }, + { + "name": "Prott", + "domains": [ + "prottapp.com" + ], + "url": "https://prottapp.com/app/#/users/edit/general", + "difficulty": "easy", + "notes": "Log into your account \u2b95 Click Settings \u2b95 in General tab scroll down and find 'Click here if you want to cancel your account' \u2b95 Choose why you are leaving and click 'Continue' \u2b95 Click 'Yes Cancel My Account'" + }, + { + "name": "Proxer", + "domains": [ + "proxer.me" + ], + "url": "https://proxer.me/ucp?s=deleteaccount", + "difficulty": "easy", + "notes": "The account deletion page can be found by hovering the logo \u2b95 Impressum \u2b95 FAQ/Kontakt \u2b95 Zur Accountl\u00f6schung. When logged in, the linked page should present a pop-up dialogue to confirm account deletion." + }, + { + "name": "Prusa", + "domains": [ + "prusa3d.com", + "printables.com" + ], + "url": "https://www.prusa3d.com", + "difficulty": "impossible", + "notes": "Prusa does not offer a way to delete your account." + }, + { + "name": "Public Lab", + "domains": [ + "publiclab.org" + ], + "url": "https://publiclab.org/questions/niklasjordan/03-25-2019/how-can-i-delete-a-user-account", + "difficulty": "impossible", + "notes": "It is currently not possible to delete an account on Public Lab." + }, + { + "name": "Pulse.red", + "domains": [ + "pulse.red" + ], + "url": "https://pulse.red/profile", + "difficulty": "easy", + "notes": "Hit the button with the user name in the top-right. Navigate to the 'Settings' tab and pick 'Delete account'. Confirm by clicking 'Yes, delete'." + }, + { + "name": "Pulseway", + "domains": [ + "pulseway.com", + "my.pulseway.com" + ], + "url": "https://my.pulseway.com/main/account", + "difficulty": "medium", + "notes": "At the bottom of the page click 'Delete Account'. You will need a code sent to the 'Work E-Mail' listed on the same page (can be changed without confirmation)." + }, + { + "name": "Pushover", + "domains": [ + "pushover.net" + ], + "url": "https://pushover.net/settings/delete_account", + "difficulty": "easy" + }, + { + "name": "Put.io", + "domains": [ + "put.io" + ], + "url": "https://put.io/payment/billing", + "difficulty": "easy", + "notes": "Click Destroy my account completely, then click Delete everything." + }, + { + "name": "PxHere", + "domains": [ + "pxhere.com" + ], + "url": "https://pxhere.com/my/settings", + "difficulty": "hard", + "notes": "You must email support to delete your account.", + "email": "pxhere.com@gmail.com", + "email_subject": "Account Deletion Request", + "email_body": "Please delete my PxHere account registered under this email address." + }, + { + "name": "Python Morsels", + "domains": [ + "pythonmorsels.com" + ], + "url": "https://www.pythonmorsels.com/delete-account/", + "difficulty": "easy", + "notes": "Visit the linked page and enter your email and password" + }, + { + "name": "Python Package Index (PyPI)", + "domains": [ + "pypi.org" + ], + "url": "https://pypi.org/manage/account/", + "difficulty": "medium", + "notes": "Go to \"Delete account \u2b95 Delete your PyPI account\". Projects that you are the sole of owner of will be needed to have their ownership transferred to another user or to be deleted before being able to proceed." + }, + { + "name": "PythonAnywhere", + "domains": [ + "pythonanywhere.com", + "help.pythonanywhere.com" + ], + "url": "https://help.pythonanywhere.com/pages/DeleteAccount/", + "difficulty": "hard", + "notes": "You must email support to delete your account.", + "email": "usercare@anaconda.com", + "email_subject": "Delete account 'your-username'", + "email_body": "I request to permanently delete my PythonAnywhere account 'your-username' with all its files and data." + }, + { + "name": "QIWI Wallet", + "domains": [ + "qiwi.com" + ], + "url": "https://qiwi.com/support/security/subject21/udalit-qiwi-koshelek", + "difficulty": "medium", + "notes": "If you want to delete the wallet, then log in to your QIWI Wallet and fill out the form below, which will be available after authorization." + }, + { + "name": "QQ", + "domains": [ + "qq.com" + ], + "url": "https://kf.qq.com/faq/1803146n2yMr180314MbIfER.html", + "difficulty": "easy", + "notes": "From the app: Avatar \u2b95 Settings \u2b95 Account Security \u2b95 Account Cancellation." + }, + { + "name": "Qt", + "domains": [ + "qt.io", + "my.qt.io" + ], + "url": "https://my.qt.io/profile", + "difficulty": "easy", + "notes": "Go to the linked page and scroll down to the bottom. From there, click on 'Delete Account'." + }, + { + "name": "Quantic Foundry", + "domains": [ + "quanticfoundry.com" + ], + "url": "https://quanticfoundry.com/", + "difficulty": "hard", + "notes": "Email their support team asking for account deletion.", + "email": "team@quanticfoundry.com" + }, + { + "name": "QuintoAndar", + "domains": [ + "quintoandar.com.br", + "help.quintoandar.com.br" + ], + "url": "https://help.quintoandar.com.br/hc/pt-br/requests/new", + "difficulty": "hard", + "notes": "Send a message to them requesting deletion. They will reply asking for the reason and a few personal data and eventually delete. If you had rented something on their platform in the past, they won't be able to delete your personal data to comply with regulations." + }, + { + "name": "Quip", + "domains": [ + "quip.com" + ], + "url": "https://www.quipsupport.com/entries/25079898-How-do-I-delete-my-account-", + "difficulty": "hard", + "notes": "Email support@quip.com and ask them to delete your account.", + "email": "support@quip.com" + }, + { + "name": "Quizlet", + "domains": [ + "quizlet.com" + ], + "url": "https://quizlet.com/delete-account", + "difficulty": "easy" + }, + { + "name": "Quora", + "domains": [ + "quora.com", + "ar.quora.com", + "bn.quora.com", + "da.quora.com", + "de.quora.com", + "es.quora.com", + "fi.quora.com", + "fr.quora.com", + "gu.quora.com", + "he.quora.com", + "help.quora.com", + "hi.quora.com", + "id.quora.com", + "it.quora.com", + "jp.quora.com", + "kn.quora.com", + "ml.quora.com", + "mr.quora.com", + "nl.quora.com", + "no.quora.com", + "pl.quora.com", + "pt.quora.com", + "sv.quora.com", + "ta.quora.com", + "te.quora.com" + ], + "url": "https://help.quora.com/hc/en-us/articles/115004250866-How-do-I-delete-my-Quora-account-?", + "difficulty": "easy", + "notes": "Log in, go to 'Settings', 'Privacy', and then 'Delete Account'. Your account will be deactivated, then permanently deleted after 14 days. If you log in during that time, your account will be reactivated and deletion will be canceled." + }, + { + "name": "radio.fr", + "domains": [ + "radio.fr" + ], + "url": "https://www.radio.fr/#%2Fkonto_loeschen.jsf", + "difficulty": "easy", + "notes": "Login, go to profile page, it's in tab 'my data' and click 'delete my account'." + }, + { + "name": "Radiooooo", + "domains": [ + "radiooooo.com" + ], + "url": "https://radiooooo.com/", + "difficulty": "hard", + "notes": "Account removal must be requested directly by email.", + "email": "support@radiooooo.com" + }, + { + "name": "Rail Europe", + "domains": [ + "raileurope.com" + ], + "url": "https://www.raileurope.com/account/settings", + "difficulty": "hard", + "notes": "Go to account settings and click the 'Delete my account' button at the top right corner. This will open a ticket for them to delete your account and it will eventually be processed." + }, + { + "name": "Raindrop.io", + "domains": [ + "raindrop.io", + "api.raindrop.io", + "app.raindrop.io" + ], + "url": "https://api.raindrop.io/v1/user/remove", + "difficulty": "easy" + }, + { + "name": "Rainforest QA", + "domains": [ + "rainforestqa.com", + "app.rainforestqa.com" + ], + "url": "https://app.rainforestqa.com/settings", + "difficulty": "easy", + "notes": "Login, go to the settings page and click 'I want to delete my account'." + }, + { + "name": "Rakuten", + "domains": [ + "rakuten.com", + "rakuten.ca", + "rakuten.co.uk" + ], + "url": "https://www.rakuten.com/privacy-preferences.htm", + "difficulty": "limited", + "notes": "If you're on a region where privacy rights are covered by law, it's as easy as clicking a button, otherwise you have to send an e-mail.", + "email": "memberservices@rakuten.com", + "email_subject": "Request to Delete Rakuten Account" + }, + { + "name": "RapidAPI", + "domains": [ + "rapidapi.com" + ], + "url": "https://rapidapi.com/user/settings", + "difficulty": "easy", + "notes": "Account can be deleted by clicking delete under 'Delete Current User'" + }, + { + "name": "RateYourMusic", + "domains": [ + "rateyourmusic.com" + ], + "url": "https://rateyourmusic.com/account/delete", + "difficulty": "impossible", + "notes": "After deleteing the account, it will be deactivated for 30 days before being deleted permanently. Messages, forum posts, and contributions stay on the site even after your account is deleted." + }, + { + "name": "RayWenderlich", + "domains": [ + "raywenderlich.com", + "accounts.raywenderlich.com" + ], + "url": "https://accounts.raywenderlich.com/profile", + "difficulty": "hard", + "notes": "Send an email to support@razeware.com with your account username and email address. Within a few business days, you should receive confirmation that your account was deleted.", + "email": "support@razeware.com", + "email_subject": "Account deletion request" + }, + { + "name": "Razer", + "domains": [ + "razerzone.com", + "razer-id.razerzone.com" + ], + "url": "https://razer-id.razerzone.com/account/delete", + "difficulty": "easy", + "notes": "An account is required to access the warranty and product registration section of the website. Despite being on a different subdomain, this affects the normal Razerzone.com website and the assorted store as well." + }, + { + "name": "Read the Docs", + "domains": [ + "readthedocs.org" + ], + "url": "https://readthedocs.org/accounts/delete/", + "difficulty": "easy", + "notes": "On the linked page confirm your username and select 'Delete Account'." + }, + { + "name": "Readernaut", + "domains": [ + "readernaut.com" + ], + "url": "https://readernaut.com", + "difficulty": "easy", + "notes": "Go to your profile page, and use the 'Delete Your Account' button." + }, + { + "name": "RealDebrid", + "domains": [ + "real-debrid.com" + ], + "url": "https://real-debrid.com/support", + "difficulty": "hard", + "notes": "First, search \"delete account\" in the search bar in order to obtain the \"I want to delete my Real-Debrid account\" entry. Click on it for the instructions for users in premium state. Once your account is no longer premium, proceed to the \"Contact us\" button to create a support ticket requesting to delete your account." + }, + { + "name": "RealPython", + "domains": [ + "realpython.com" + ], + "url": "https://realpython.com/account/delete/", + "difficulty": "easy" + }, + { + "name": "Rebelsmarket", + "domains": [ + "rebelsmarket.com" + ], + "url": "https://www.rebelsmarket.com/my", + "difficulty": "easy", + "notes": "Click on URL and then choose Cancel Account. Once prompted confirm that you want to cancel your account and then you will receive a verification email. Note, you can also download your personal data on this page." + }, + { + "name": "rebuy", + "domains": [ + "rebuy.de" + ], + "url": "https://www.rebuy.de/my/personal-data", + "difficulty": "easy", + "notes": "At the bottom of your Account/personal-data page should be a button to delete your account" + }, + { + "name": "RecargaPay", + "domains": [ + "recarga.com", + "recarga.helpshift.com", + "recargapay.cl", + "recargapay.co", + "recargapay.com", + "recargapay.com.ar", + "recargapay.com.br", + "recargapay.com.co", + "recargapay.com.mx", + "recargapay.es", + "recargapay.prezly.com", + "recargapay.us", + "recargapay.workable.com" + ], + "url": "https://recargapay.com.br/user/close-account", + "difficulty": "impossible", + "notes": "You can't completely delete your account. On the account closure page, you are informed that after you closing your account, most of your data will be deleted from the system, however it's not specified which data will be kept and why. Closed accounts can also be reactivated at any time by the user." + }, + { + "name": "Red Hat", + "domains": [ + "redhat.com" + ], + "url": "https://www.redhat.com/en/about/personal-data-request", + "difficulty": "hard", + "notes": "Select \"I have a redhat.com login ID and I want Red Hat to delete it.\"" + }, + { + "name": "Red Robin", + "domains": [ + "redrobin.com", + "dsr.redrobin.com" + ], + "url": "https://dsr.redrobin.com", + "difficulty": "hard", + "notes": "Select \"Delete my data\" as the request type." + }, + { + "name": "Redacteur.com", + "domains": [ + "redacteur.com" + ], + "url": "https://www.redacteur.com/identities/edit", + "difficulty": "easy", + "notes": "Login to your account. Click on \"My Account\" then \"My connection information\". Finally click \"Delete my account\"" + }, + { + "name": "Redbooth", + "domains": [ + "redbooth.com" + ], + "url": "https://redbooth.com/a/#!/settings/delete", + "difficulty": "easy", + "notes": "By deleting your account you will lose access to all your organizations and workspaces. This action is irreversible." + }, + { + "name": "Redbubble", + "domains": [ + "redbubble.com" + ], + "url": "https://www.redbubble.com/account/settings/cancel", + "difficulty": "easy", + "notes": "Click the button to delete your account." + }, + { + "name": "Reddit", + "domains": [ + "reddit.com", + "accounts.reddit.com", + "reddithelp.com", + "mods.reddithelp.com", + "redditinc.com" + ], + "url": "https://www.reddit.com/prefs/delete/", + "difficulty": "easy", + "notes": "If you are opted in to the redesign, scroll to the bottom and click on the Delete Account button. Your content will not be deleted (only disassociated)." + }, + { + "name": "Redfin", + "domains": [ + "redfin.com" + ], + "url": "https://www.redfin.com/myredfin/settings", + "difficulty": "easy", + "notes": "After logging in, click the \"Delete Your Account\" link at the bottom of the Account Settings page." + }, + { + "name": "redirect.pizza", + "domains": [ + "redirect.pizza" + ], + "url": "https://redirect.pizza/profile", + "difficulty": "easy", + "notes": "In the bottom right corner of the linked page, click 'Delete my account'." + }, + { + "name": "RedPen.io", + "domains": [ + "redpen.io" + ], + "url": "https://redpen.io/account", + "difficulty": "hard", + "notes": "You would need to email the team by clicking feedback to have your account removed." + }, + { + "name": "RedShelf", + "domains": [ + "redshelf.com", + "solve.redshelf.com" + ], + "url": "https://solve.redshelf.com/hc/requests/new?ticket_form_id=1260804993770", + "difficulty": "hard", + "notes": "Brytewave users should [submit a DSAR request to Follett](https://www.follett.com/policies/)." + }, + { + "name": "Remember The Milk", + "domains": [ + "rememberthemilk.com" + ], + "url": "https://www.rememberthemilk.com/login/delete.rtm", + "difficulty": "easy" + }, + { + "name": "Remind", + "domains": [ + "remind.com" + ], + "url": "https://www.remind.com/settings/profile", + "difficulty": "easy", + "notes": "Scroll to the bottom of the page and click 'Delete Account'" + }, + { + "name": "Remitly", + "domains": [ + "remitly.com", + "help.remitly.com" + ], + "url": "https://help.remitly.com/s/article/delete-account", + "difficulty": "hard", + "notes": "Contact the customer support and request the deletion of your account." + }, + { + "name": "Render", + "domains": [ + "render.com" + ], + "url": "https://render.com/", + "difficulty": "easy", + "notes": "Go to your profile page, scroll to the bottom and click Delete Render Account." + }, + { + "name": "Renderforest", + "domains": [ + "renderforest.com" + ], + "url": "https://www.renderforest.com/profile/account", + "difficulty": "easy", + "notes": "Click 'Delete account' in the middle of the page, then enter your password." + }, + { + "name": "Replay Poker", + "domains": [ + "replaypoker.com" + ], + "url": "https://www.replaypoker.com/settings/deactivate", + "difficulty": "easy", + "notes": "Please enter a reason for deactivating your account and then click 'Deactivate' after you're finished." + }, + { + "name": "Replit", + "domains": [ + "replit.com", + "repl.it" + ], + "url": "https://replit.com/account", + "difficulty": "easy", + "notes": "On the linked page under Account select 'Request account deletion' and then click the 'Yes, Delete my Account' button." + }, + { + "name": "Report URI", + "domains": [ + "report-uri.com" + ], + "url": "https://report-uri.com/account/settings/#deleteData", + "difficulty": "easy" + }, + { + "name": "RescueTime", + "domains": [ + "rescuetime.com" + ], + "url": "https://www.rescuetime.com/settings", + "difficulty": "easy", + "notes": "Use the 'Delete your account' link in the lower right-hand corner." + }, + { + "name": "Reservio", + "domains": [ + "reservio.com", + "app.reservio.com" + ], + "url": "https://app.reservio.com/#/business/settings", + "difficulty": "medium", + "notes": "Go to the Business tab \u2b95 Settings. You will find the option for the deletion of your account at the bottom of this page." + }, + { + "name": "ResumeGenius", + "domains": [ + "resumegenius.com", + "app.resumegenius.com" + ], + "url": "https://app.resumegenius.com/data-access/personal-data", + "difficulty": "easy", + "notes": "Simply login to your resumegenius account, go to the form, click delete and you should be good to go!" + }, + { + "name": "Resy", + "domains": [ + "resy.com", + "widgets.resy.com" + ], + "url": "https://resy.com/terms", + "difficulty": "hard", + "notes": "While self-deletion is possible through [their app](https://apps.apple.com/app/apple-store/id866163372), it is iOS only. Everyone else must send an email.", + "email": "help@resy.com", + "email_body": "Please delete my Resy account as I do not wish to use it any further." + }, + { + "name": "RetroAchievements", + "domains": [ + "retroachievements.org" + ], + "url": "https://retroachievements.org/controlpanel.php", + "difficulty": "easy" + }, + { + "name": "Retrospring", + "domains": [ + "retrospring.net" + ], + "url": "https://retrospring.net/settings/account", + "difficulty": "easy", + "notes": "Use the Delete button at the bottom of the page." + }, + { + "name": "Rev", + "domains": [ + "rev.com" + ], + "url": "https://www.rev.com/account/settings/", + "difficulty": "easy", + "notes": "Visit the linked page and click 'Close Account'. Type 'CLOSE' in the text box, then click 'Close Account Forever'." + }, + { + "name": "RevenueHits", + "domains": [ + "revenuehits.com", + "support.revenuehits.com", + "intango.com" + ], + "url": "https://www.revenuehits.com/privacy/", + "difficulty": "hard", + "notes": "In the support center it says that you can't delete your account, but if you contact them by e-mail, you should be able to get it deleted.", + "email": "privacy@intango.com" + }, + { + "name": "Revolt", + "domains": [ + "revolt.chat" + ], + "url": "https://revolt.chat/settings", + "difficulty": "easy", + "notes": "Go to your account options and click on 'Mark Account for Deletion'." + }, + { + "name": "Revolut", + "domains": [ + "revolut.com" + ], + "url": "https://www.revolut.com/help/profile/i-want-to-close-my-revolut-account", + "difficulty": "easy", + "notes": "Open the Revolut app on your phone, go to the Settings tab, press 'Close account' button and follow the instructions." + }, + { + "name": "Rideindego", + "domains": [ + "rideindego.com" + ], + "url": "https://www.rideindego.com/faq/#how-do-i-cancel-my-pass", + "difficulty": "impossible", + "notes": "You can only cancel the auto-renewal feature. I called them and asked to cancel my account and be removed from their mailing list and they told me my account was already not renewing and there was nothing else they could do." + }, + { + "name": "Riffle", + "domains": [ + "riffle.com", + "help.realnames.com" + ], + "url": "https://help.realnames.com/hc/en-us/articles/202814089-Deactivate-your-Email-Address", + "difficulty": "easy", + "notes": "On your profile page, click 'Edit Profile' and use the 'Cancel account' button." + }, + { + "name": "Ring", + "domains": [ + "ring.com", + "account.ring.com" + ], + "url": "https://account.ring.com/account/data-requests", + "difficulty": "medium", + "notes": "Go to the URL, sign into your account, and select \"Delete Data\" near the bottom. Reenter your password, select \"Confirm Deletion,\" and then wait for up to 30 days for your request to be processed. When your information has been deleted, your account credentials will no longer work." + }, + { + "name": "Riot Games", + "domains": [ + "riotgames.com", + "account.riotgames.com", + "auth.riotgames.com" + ], + "url": "https://support-valorant.riotgames.com/hc/en-us/requests/new?ticket_form_id=360004036693", + "difficulty": "easy", + "notes": "To delete your account, you need to open a support request from any game's support page. If your account is verified by the algorithm, you can use [self service option](https://support-leagueoflegends.riotgames.com/hc/en-us/articles/360050328454-Deleting-Your-Riot-Account-and-All-Your-Data)." + }, + { + "name": "Ripe NCC", + "domains": [ + "ripe.net" + ], + "url": "https://www.ripe.net", + "difficulty": "impossible" + }, + { + "name": "RiseUp", + "domains": [ + "riseup.net", + "account.riseup.net" + ], + "url": "https://account.riseup.net", + "difficulty": "easy", + "notes": "Go to account.riseup.net \u2b95 'Login' \u2b95 Press 'purge data' then press 'close account'. Finally, follow any instructions on screen." + }, + { + "name": "Rituals.com", + "domains": [ + "rituals.com", + "service.rituals.com" + ], + "url": "https://service.rituals.com/s/contact?topic=a2L4L0000008xwDUAQ&language=de&country=DE", + "difficulty": "hard", + "notes": "You have to claim a GDPR case for the right to delete your data." + }, + { + "name": "Robinhood", + "domains": [ + "robinhood.com" + ], + "url": "https://robinhood.com/contact", + "difficulty": "hard", + "notes": "Contact support via the link and request acount deletion." + }, + { + "name": "Roblox", + "domains": [ + "www.roblox.com", + "en.help.roblox.com" + ], + "url": "https://en.help.roblox.com/hc/en-us/articles/203313050-How-Do-I-Delete-My-Account-", + "difficulty": "hard", + "notes": "A form of photo ID is required. Despite what the initial email claims, they will delete your account regardless of your location." + }, + { + "name": "RoboForm", + "domains": [ + "roboform.com", + "online.roboform.com" + ], + "url": "https://online.roboform.com/site/account/manage?type=profile", + "difficulty": "easy", + "notes": "Click \"Delete my RoboForm account\" then confirm." + }, + { + "name": "Rockstar Games Social Club", + "domains": [ + "rockstargames.com", + "support.rockstargames.com" + ], + "url": "https://support.rockstargames.com/account/", + "difficulty": "hard", + "notes": "Click on the delete account and information button on the support page to submit a ticket. They will then email you asking you to confirm a few details of your account which you have to reply to, after that the account will be deleted." + }, + { + "name": "Roku", + "domains": [ + "roku.com", + "my.roku.com" + ], + "url": "https://my.roku.com/account/close", + "difficulty": "medium", + "notes": "Factory reset your roku devices before deleting account." + }, + { + "name": "Roland", + "domains": [ + "roland.com" + ], + "url": "https://www.roland.com/us/privacy/", + "difficulty": "hard", + "notes": "Account deletion requires contacting Customer Support.", + "email": "privacy@rolandus.com" + }, + { + "name": "Roll20", + "domains": [ + "roll20.net", + "app.roll20.net" + ], + "url": "https://app.roll20.net/account/", + "difficulty": "easy", + "notes": "On the account page, scroll down to the \"Danger Zone\" and click on the \"Delete My Account\" button. After that, you will have to type \"DELETE\" in the pop-up box." + }, + { + "name": "The Root", + "domains": [ + "theroot.com" + ], + "url": "https://notice.sp-prod.net/sar/index.html?message_id=539278&account_id=1195&ccpa_type=delete", + "difficulty": "hard", + "notes": "Fill out the form using the email address of your account and click on the verification link that is sent." + }, + { + "name": "Rosetta Stone", + "domains": [ + "rosettastone.com" + ], + "url": "https://privacyportal-cdn.onetrust.com/dsarwebform/27aac3ab-c36e-4457-81d4-9773ba27887e/f1e6ce28-8f84-4cae-9bdd-bc40113d5ee0.html", + "difficulty": "hard", + "notes": "Submit a personal data deletion request via the support site form using your registered email. Your data will be deleted after some time without any email confirmation. (Note: [California residents must use this form instead!](https://privacyportal-cdn.onetrust.com/dsarwebform/27aac3ab-c36e-4457-81d4-9773ba27887e/a4611d02-cd40-4c80-8efb-af97324e0cc4.html))" + }, + { + "name": "Rotten Tomatoes", + "domains": [ + "rottentomatoes.com" + ], + "url": "https://support.fandango.com/contact/contact-us-fandango-rkksORSDO", + "difficulty": "hard", + "notes": "If you want to delete an account you\u2019ve created on Rotten Tomatoes, please contact an agent on live chat or fill out the email contact form." + }, + { + "name": "Rue du Commerce", + "domains": [ + "rueducommerce.fr" + ], + "url": "https://www.rueducommerce.fr", + "difficulty": "impossible", + "notes": "No online request possible." + }, + { + "name": "Rumble", + "domains": [ + "rumble.com" + ], + "url": "https://rumble.com/account/profile", + "difficulty": "easy", + "notes": "Click on the big red button at the bottom of the page." + }, + { + "name": "Runescape", + "domains": [ + "runescape.com" + ], + "url": "https://www.runescape.com/zendesk/support-form?form=360000041149", + "difficulty": "medium", + "notes": "Select 'Remove your personal data and permanently disable your account' as your request type and fill out the rest of the form." + }, + { + "name": "RunKeeper", + "domains": [ + "runkeeper.com" + ], + "url": "https://runkeeper.com/delete-account?confirm", + "difficulty": "easy", + "notes": "Enter your password, select a reason for deletion, complete the captcha, press the delete button and then confirm it in the dialog." + }, + { + "name": "Runtastic", + "domains": [ + "runtastic.com", + "help.runtastic.com" + ], + "url": "https://help.runtastic.com/hc/en-us/articles/200370082-Delete-Account-Cancel-Membership", + "difficulty": "easy", + "notes": "To delete your account go to Runtastic.com & log in, click on the arrow on the right side of your user name, click on \"Settings\", click on \"Login Data\" on the left hand side, click on \"Delete my account\" at the bottom" + }, + { + "name": "Ryanair", + "domains": [ + "ryanair.com", + "web.ryanairemail.com" + ], + "url": "https://web.ryanairemail.com/webApp/dataerasure", + "difficulty": "easy", + "notes": "Link found in their privacy policy to process account deletion." + }, + { + "name": "Rytr", + "domains": [ + "rytr.me" + ], + "url": "https://rytr.me/blog/resources#how-to-delete-my-account", + "difficulty": "hard", + "notes": "In order to delete your acoount, you have to send an e-mail to them.", + "email": "support@rytr.me" + }, + { + "name": "SadlyUnfriended", + "domains": [ + "sadlyunfriended.com" + ], + "url": "https://www.sadlyunfriended.com/close_account.php", + "difficulty": "easy", + "notes": "Alternatively, remove the Sadly Unfriended application from Facebook and follow the email instructions." + }, + { + "name": "Sahibinden", + "domains": [ + "sahibinden.com", + "banaozel.sahibinden.com" + ], + "url": "https://banaozel.sahibinden.com/bilgilerim/uyelik-iptali", + "difficulty": "easy" + }, + { + "name": "SamMobile", + "domains": [ + "sammobile.com" + ], + "url": "https://www.sammobile.com/remove-account/", + "difficulty": "medium", + "notes": "Type in your password and click \"Submit\". Click the confirmation link sent to your email address." + }, + { + "name": "Samsung Account", + "domains": [ + "samsung.com", + "account.samsung.com" + ], + "url": "https://account.samsung.com/membership/contents/profile/delete-samsung-account", + "difficulty": "easy", + "notes": "Click in the checkbox \"I confirm the conditions above\", click at \"Delete\", type your password and confirm your action by clicking \"Confirm\"." + }, + { + "name": "Satispay", + "domains": [ + "satispay.com" + ], + "url": "https://disattivazione-account-satispay.paperform.co/", + "difficulty": "medium", + "notes": "Follow the steps in the form. You will need the mobile open with your account logged in to provide some details like the UID" + }, + { + "name": "Scaleway", + "domains": [ + "scaleway.com", + "console.scaleway.com" + ], + "url": "https://console.scaleway.com/#/account", + "difficulty": "easy", + "notes": "Go to the organization view and click the red 'deactivate organisation'." + }, + { + "name": "Scammer.info", + "domains": [ + "scammer.info" + ], + "url": "https://scammer.info/", + "difficulty": "easy", + "notes": "Go into your account preferences and click \"Delete My Account\"." + }, + { + "name": "Scavify", + "domains": [ + "scavify.com" + ], + "url": "https://www.scavify.com/users/edit", + "difficulty": "easy", + "notes": "Click the 'Delete Account' button, type in the confirmation and delete the account!" + }, + { + "name": "Scene+", + "domains": [ + "sceneplus.ca" + ], + "url": "https://scenesupport.zendesk.com/hc/en-ca/p/contactUs", + "difficulty": "hard", + "notes": "You must call support to delete your account, they will not do it over email." + }, + { + "name": "Scentbird", + "domains": [ + "scentbird.com" + ], + "url": "https://scentbird.zendesk.com/hc/en-us/articles/115004536388-How-do-I-cancel-my-subscription-", + "difficulty": "hard", + "notes": "Open a ticket with the customer service using their chat/ticket form and ask them to delete your account." + }, + { + "name": "Scholly", + "domains": [ + "myscholly.com", + "search.myscholly.com" + ], + "url": "https://search.myscholly.com/settings", + "difficulty": "easy", + "notes": "Log in, go to the URL, open 'Account Details' \u2b95 'Delete Account', and press 'Yes' to confirm. Scholly will immediately log you out and your credentials will no longer work." + }, + { + "name": "SchoolCashOnline", + "domains": [ + "schoolcashonline.com" + ], + "url": "https://schoolcashonline.com/MyAccount/EditProfile", + "difficulty": "easy", + "notes": "Scroll down to the bottom of the page and click 'Deactivate Account'." + }, + { + "name": "Schoology", + "domains": [ + "schoology.com" + ], + "url": "https://app.schoology.com/settings/account/action?delete", + "difficulty": "easy", + "notes": "Click on the \"I Agree\" button." + }, + { + "name": "Score", + "domains": [ + "getscore.app" + ], + "url": "https://getscore.app", + "difficulty": "hard", + "notes": "Email to ensure your account is deleted.", + "email": "hello@getscore.app" + }, + { + "name": "Scratch", + "domains": [ + "scratch.mit.edu" + ], + "url": "https://scratch.mit.edu/accounts/settings/delete_account_confirmation/", + "difficulty": "easy", + "notes": "Click on 'Yes, next step', and follow the prompt" + }, + { + "name": "Scribd", + "domains": [ + "scribd.com" + ], + "url": "https://www.scribd.com/account_settings/preferences", + "difficulty": "easy" + }, + { + "name": "Seagate", + "domains": [ + "seagate.com", + "myportal.seagate.com" + ], + "url": "https://myportal.seagate.com/consumer-identity/profile/", + "difficulty": "medium", + "notes": "Log in, go to the URL, press 'Delete Account and Product Registrations', and press 'Delete'. You should receive an email asking you to confirm account deletion." + }, + { + "name": "Second Life", + "domains": [ + "secondlife.com", + "community.secondlife.com" + ], + "url": "https://secondlife.com/my/account/cancel.php", + "difficulty": "easy" + }, + { + "name": "Sedo", + "domains": [ + "sedo.com" + ], + "url": "https://sedo.com/us/about-us/policies/protecting-your-privacy/", + "difficulty": "hard", + "notes": "You can only request account deletion by sending an email. \"Upon your request, we will deactivate and delete your account, contact information, billing information, shipping information, and financial information from our active databases. To make this request, email contact@sedo.com. Your account will be deactivated and deleted as soon as reasonably possible after we receive your request but no later than 30 days.\"", + "email": "contact@sedo.com" + }, + { + "name": "seedr.cc", + "domains": [ + "seedr.cc" + ], + "url": "https://www.seedr.cc/", + "difficulty": "hard", + "notes": "Scroll down to the bottom of the webpage and click on \"Contact Us\". Fill in the message as \"Please delete my seedr.cc account\", include your registered email in the contact email field, submit the form and wait for their confirmation email. Note that the chances of them actually replying is very very low." + }, + { + "name": "Sega", + "domains": [ + "sega.co.jp", + "sega.co.uk", + "sega.com" + ], + "url": "https://privacy.sega.com/en/your-rights", + "difficulty": "hard", + "notes": "Send an email to dataprivacy@sega.com / dpo@sega.co.uk / dataprivacy@segaamerica.com that says \"I want to delete all my data from Sega.\".", + "email": "dataprivacy@sega.com", + "email_subject": "I want to delete all my data from Sega", + "email_body": "Data erasure." + }, + { + "name": "Sellfy", + "domains": [ + "sellfy.com" + ], + "url": "https://sellfy.com/user/settings/account", + "difficulty": "medium", + "notes": "Log in first, go to the url and press 'Close Account', all products and orders will be lost, you will have to add a reason why, and depending on the option you will have to further explain" + }, + { + "name": "SendGrid", + "domains": [ + "sendgrid.com", + "support.sendgrid.com" + ], + "url": "https://support.sendgrid.com/hc/en-us/articles/4410760485403-Data-Retention-and-Deletion-in-Twilio-Products", + "difficulty": "hard", + "notes": "You must send an email from your account's registered address. Some account data may be retained in anonymized form for up to a year.", + "email": "datasubjectrequests@sendgrid.com", + "email_subject": "SendGrid account deletion request", + "email_body": "Please delete my SendGrid account under my email address." + }, + { + "name": "Sendspace", + "domains": [ + "sendspace.com" + ], + "url": "https://www.sendspace.com/mysendspace/prefs.html", + "difficulty": "easy", + "notes": "Login to your account, then open the URL. You should see the option 'Close my account'. They will ask for confirmation, and after you confirm your account will be deleted." + }, + { + "name": "SensCritique", + "domains": [ + "senscritique.com" + ], + "url": "https://www.senscritique.com/parametres/compte-suppression", + "difficulty": "easy", + "notes": "Log in, go to the url. Fill your password and click on \"Valider\". Click on the blue text button \"Je souhaite supprimer mon compte et ma collection\". Your account will be deleted in 7 days." + }, + { + "name": "Sentry", + "domains": [ + "sentry.io" + ], + "url": "https://sentry.io/settings/account/close-account/", + "difficulty": "easy" + }, + { + "name": "Server.pro", + "domains": [ + "server.pro" + ], + "url": "https://server.pro/", + "difficulty": "hard", + "notes": "Contact support with email provided here.", + "email": "support@server.pro" + }, + { + "name": "Serverless", + "domains": [ + "serverless.com", + "app.serverless.com" + ], + "url": "https://app.serverless.com", + "difficulty": "easy", + "notes": "To delete your account, click your avatar and go to \"Profile\" page, click on \"delete account\" and then confirm the deletion by entering your username." + }, + { + "name": "Session", + "domains": [ + "getsession.org", + "sessionapp.zendesk.com" + ], + "url": "https://sessionapp.zendesk.com/hc/en-us/articles/7726435197849-How-can-I-delete-my-Session-account-", + "difficulty": "easy", + "notes": "Go into settings, press 'Clear Data', then 'Delete' and finally 'Entire Account'." + }, + { + "name": "SetApp", + "domains": [ + "setapp.com", + "my.setapp.com" + ], + "url": "https://my.setapp.com/account", + "difficulty": "easy", + "notes": "Log in, go to the URL, press 'Delete account', and enter your password to confirm. Your account becomes unavailable and all the data in it is deleted." + }, + { + "name": "Seznam.cz", + "domains": [ + "seznam.cz" + ], + "url": "https://profil.seznam.cz/gdpr", + "difficulty": "easy" + }, + { + "name": "Sfimg", + "domains": [ + "sfimg.com" + ], + "url": "https://www.sfimg.com/MyAccount/Remove", + "difficulty": "medium", + "notes": "Go to 'Account Options' on the menu of the icon of your profile, click 'Cancel SFI Account', and 'Opt Out Of SFI COMPLETELY', then send the form with the reason of the deletion and confirm the e-mail." + }, + { + "name": "Shadow", + "domains": [ + "shadow.tech", + "account.shadow.tech" + ], + "url": "https://account.shadow.tech/home/security", + "difficulty": "easy", + "notes": "Click the \"Delete my shadow account\" at the bottom of the security page. Confirm by clicking yes and enter your password." + }, + { + "name": "ShareLaTeX", + "domains": [ + "sharelatex.com" + ], + "url": "https://www.sharelatex.com/user/settings", + "difficulty": "easy", + "notes": "Click the \"Delete your account\" at the bottom of the settings page and type \"DELETE\" in the popup box." + }, + { + "name": "Sharesome", + "domains": [ + "sharesome.com" + ], + "url": "https://sharesome.com/settings/privacy/", + "difficulty": "easy", + "notes": "On Privacy tab, click in the 'Delete Account' button. After that, insert a reason (this step is optional) and your account password." + }, + { + "name": "Shazam", + "domains": [ + "shazam.com" + ], + "url": "https://www.shazam.com/privacy/login/delete", + "difficulty": "easy", + "notes": "Visit the linked page and sign in to your account. Your account will be deleted within 30 days. According to their privacy page \"Shazam may retain data that has been deidentified and is no longer associated with you.\"" + }, + { + "name": "Shein", + "domains": [ + "shein.com" + ], + "url": "https://shein.com/robot", + "difficulty": "hard", + "notes": "Click on the link, then click on \"Contact Agent\", select \"Unsubscribe and delete\". Finally fill in the various fields and then press \"Submit\". \u26a0\ufe0f It is imperative to give a reason for deleting an account for it to work." + }, + { + "name": "Shinden", + "domains": [ + "shinden.pl" + ], + "url": "https://shinden.pl", + "difficulty": "easy", + "notes": "Go to \"Moje konto\", \"Edytuj\", \"Konto\" and \"Usu\u0144 konto\"." + }, + { + "name": "Shipito", + "domains": [ + "shipito.com" + ], + "url": "https://www.shipito.com/es/help/faq/account-navigation", + "difficulty": "hard", + "notes": "Create a customer support ticket requesting deletion." + }, + { + "name": "Shop", + "domains": [ + "shop.app", + "help.shop.app" + ], + "url": "https://help.shop.app/hc/en-us/articles/360058842072-Delete-your-account", + "difficulty": "easy", + "notes": "On the shop app: Open the 'Account' tab and tap the settings icon on the top right corner. Tap 'App settings', then 'Delete account', and then 'Delete account'. On the 'Are you sure you want to delete your account?' dialog, tap 'Delete account' to complete your account deletion. Deleting your account on a web browser is possible, but hardest: If you can't log in to the Shop app, submit your email address at https://shop.app/opt-out, and then check your email to complete deleting your account." + }, + { + "name": "Shop Your Way", + "domains": [ + "shopyourway.com" + ], + "url": "https://privacyportal.onetrust.com/webform/cc9a8230-03c2-46ab-afe1-51ced9dc71c0/30774a09-e2e1-4f85-9d3d-fc51a7530f05", + "difficulty": "limited", + "notes": "Only California and Virginia residents may file a deletion request. Complete the linked form or call 1-888-527-6415." + }, + { + "name": "Shopee", + "domains": [ + "shopee.com" + ], + "url": "https://www.sharelatex.com/user/settings", + "difficulty": "medium", + "notes": "Tap Saya (me)>Akun Saya (My account)>Ajukan Penghapusan akun (Submit Account removal/Submit Account Deletion)." + }, + { + "name": "Shopify", + "domains": [ + "shopify.com" + ], + "url": "https://shopify.com/admin/settings/account", + "difficulty": "impossible", + "notes": "The account is never deleted, just deactivated. If you want to deactivate it, select 'Please cancel my account'. Choose a reason then select 'close my shopify store'." + }, + { + "name": "Shorte.st", + "domains": [ + "shorte.st" + ], + "url": "https://shorte.st/profile/remove-account", + "difficulty": "medium", + "notes": "Log in to your account, access the account deletion link specified above, access the confirmation link received by email and select 'Remove Account'. Note: Your created links will remain working and you will not be able to use the same email for creating a new account. So remember to manually delete all your created links first." + }, + { + "name": "Shotgun.live", + "domains": [ + "shotgun.live" + ], + "url": "https://support.shotgun.live/hc/en-us/articles/360016912580--I-want-to-delete-my-account-", + "difficulty": "medium", + "notes": "You need to download the mobile app to delete your account. See the link for instructions on how to do it." + }, + { + "name": "showRSS", + "domains": [ + "showrss.info" + ], + "url": "https://showrss.info/edit/delete", + "difficulty": "easy" + }, + { + "name": "Shpock", + "domains": [ + "shpock.com" + ], + "url": "https://en.shpock.com", + "difficulty": "hard", + "notes": "Requires e-mailing support to delete the account.", + "email": "support@shpock.com" + }, + { + "name": "Shutterfly", + "domains": [ + "shutterfly.com", + "accounts.shutterfly.com", + "support.shutterfly.com", + "shutterflyinc.com" + ], + "url": "https://www.shutterfly.com/delete-account/", + "difficulty": "easy", + "notes": "Visit the linked page and request account deletion. You will receive an email when your request is completed." + }, + { + "name": "Shutterstock", + "domains": [ + "shutterstock.com", + "accounts.shutterstock.com" + ], + "url": "https://www.shutterstock.com/account/profile", + "difficulty": "easy", + "notes": "Go to your [account details](https://www.shutterstock.com/account/profile) and press [Delete my account](https://accounts.shutterstock.com/remove) and confirm." + }, + { + "name": "SigFig", + "domains": [ + "sigfig.com", + "support.sigfig.com" + ], + "url": "https://support.sigfig.com/hc/en-us/articles/202586434-How-do-I-completely-delete-my-account-", + "difficulty": "hard", + "notes": "Contact customer service by email and request deletion.", + "email": "support@sigfig.com" + }, + { + "name": "Signal", + "domains": [ + "signal.org", + "support.signal.org" + ], + "url": "https://support.signal.org/hc/en-us/articles/360007061192-Delete-Account", + "difficulty": "easy", + "notes": "In Signal, tap your 'profile' \u2b95 'Account' \u2b95 'Delete account'. And Enter your Signal number, Tap 'Delete account'." + }, + { + "name": "Similarweb", + "domains": [ + "similarweb.com", + "support.similarweb.com" + ], + "url": "https://account.similarweb.com/user-details", + "difficulty": "easy", + "notes": "In your Similarweb account settings, Within the user profile, click Delete Account, then click the 'Delete Account' button." + }, + { + "name": "Simple Machines", + "domains": [ + "simplemachines.org" + ], + "url": "https://simplemachines.org/community/index.php?action=profile;area=deleteaccount", + "difficulty": "hard", + "notes": "Enter your password to have your account marked for deletion by an administrator or moderator. You can do this for any other Simple Machines forums if the forum administrator allows." + }, + { + "name": "SimpleLogin", + "domains": [ + "simplelogin.io", + "app.simplelogin.io" + ], + "url": "https://app.simplelogin.io/dashboard/setting", + "difficulty": "easy", + "notes": "Go to \"Delete Account \u2b95 Yes, delete my account\"." + }, + { + "name": "Simplenote", + "domains": [ + "simplenote.com", + "app.simplenote.com" + ], + "url": "https://app.simplenote.com/settings", + "difficulty": "easy", + "notes": "Login to your account, go to account settings and click 'Delete Account'. Confirm by ticking the box, entering your password and click 'Delete Account'." + }, + { + "name": "SimplePlanes", + "domains": [ + "simpleplanes.com" + ], + "url": "https://www.simpleplanes.com/Account/DeleteAccount", + "difficulty": "easy", + "notes": "Login to your account, open your profile page and follow these steps: click 'Manage Account' \u2b95 click 'Close Account' \u2b95 click 'OK' \u2b95 type 'CLOSE' \u2b95 click 'CLOSE' \u2b95 click 'OK'. Using the link from here also skips every step before \"type 'CLOSE'\"." + }, + { + "name": "Sketchfab", + "domains": [ + "sketchfab.com" + ], + "url": "https://sketchfab.com/settings/account", + "difficulty": "easy", + "notes": "You have to click on the button 'Delete your account', select the 'consent to delete all content' and confirm." + }, + { + "name": "Skiddle", + "domains": [ + "skiddle.com" + ], + "url": "https://www.skiddle.com/skiddlepeople/removeaccount.php", + "difficulty": "easy", + "notes": "Follow the link above, or alternatively check the bottom of the notification settings page." + }, + { + "name": "Skillshare", + "domains": [ + "skillshare.com" + ], + "url": "https://preferences.skillshare.com/privacy", + "difficulty": "medium", + "notes": "Fill out the Privacy Request Form and select Delete under Type of Request." + }, + { + "name": "Skinbaron", + "domains": [ + "skinbaron.de" + ], + "url": "https://skinbaron.de/en/profile/tickets", + "difficulty": "hard", + "notes": "Create a ticket on the website, or email them.", + "email": "info@skinbaron.de" + }, + { + "name": "Skoob", + "domains": [ + "skoob.com.br" + ], + "url": "https://www.skoob.com.br/usuario/excluir/", + "difficulty": "easy" + }, + { + "name": "Skype", + "domains": [ + "skype.com", + "support.skype.com" + ], + "url": "https://support.skype.com/en/faq/FA142/can-i-delete-my-skype-account", + "difficulty": "impossible", + "notes": "You can't delete your Skype profile without deleting your entire Microsoft account. If you have a legacy Skype account that isn't yet linked to a Microsoft account, you must link it to a new Microsoft account for the purpose of closing.\nIf you want to delete your entire Microsoft account, use the instructions for [Microsoft Account](https://justdeleteme.xyz/#microsoft)." + }, + { + "name": "SkySilk", + "domains": [ + "skysilk.com" + ], + "url": "https://help.skysilk.com/support/solutions/articles/9000106317-how-do-i-deactivate-my-account-", + "difficulty": "limited", + "notes": "Once you [deactivate your account](https://www.skysilk.com/settings/deactivation) you can request a GDPR delete by submitting the request in a [support ticket](https://help.skysilk.com/support/tickets/new). A GDPR delete will erase 100% of your personal information that you provided when you created an account with them." + }, + { + "name": "Slack", + "domains": [ + "slack.com", + "api.slack.com", + "my.slack.com", + "slackdemo.com", + "investor.slackhq.com" + ], + "url": "https://my.slack.com/account/settings", + "difficulty": "hard", + "notes": "If you are the Slack team's primary owner you will need to either delete the team or transfer its ownership before deleting your account. If you're not, you'll need to request a deletion from the workspace admin." + }, + { + "name": "Slashdot", + "domains": [ + "slashdot.org" + ], + "url": "https://slashdot.org/faq", + "difficulty": "hard", + "email": "feedback@slashdot.org", + "email_subject": "Delete Account", + "email_body": "I want to permanently delete my account from Slashdot" + }, + { + "name": "SleeveYourGames", + "domains": [ + "sleeveyourgames.com" + ], + "url": "https://www.sleeveyourgames.com/feedback", + "difficulty": "hard", + "notes": "Write on the FAQ requesting for deletion, they will reply asking which e-mail you used to sign-up, then you provide and it gets deleted." + }, + { + "name": "Slideshare", + "domains": [ + "slideshare.com" + ], + "url": "https://www.linkedin.com/help/slideshare/answer/53671?query=delete%20account", + "difficulty": "easy", + "notes": "Sign in to SlideShare, move your cursor over your photo in the top right and select Account Settings, click the Change Password tab on the left, click Delete Account, click 'Yes, delete my account', enter your password and select applicable reasons for deleting this account, then click Delete Account. Note: If you created your SlideShare account through LinkedIn, you'll have to close your LinkedIn account." + }, + { + "name": "SmallPDF", + "domains": [ + "smallpdf.com" + ], + "url": "https://smallpdf.com/profile", + "difficulty": "hard", + "notes": "The only way to delete your account is by emailing their customer support team.", + "email": "support@smallpdf.com", + "email_subject": "Delete Account", + "email_body": "Hi, I want to permanently delete my account from SmallPDF, thanks" + }, + { + "name": "SmartRecruiters", + "domains": [ + "smartrecruiters.com", + "help.smartrecruiters.com" + ], + "url": "https://help.smartrecruiters.com/Getting_Started/User_settings/How_do_I_close_my_user_account%3F", + "difficulty": "impossible", + "notes": "You can deactivate your user account, but you cannot delete it." + }, + { + "name": "SmartyPig", + "domains": [ + "smartypig.com" + ], + "url": "https://www.smartypig.com/faqs", + "difficulty": "hard", + "notes": "You have to contact their customer support team." + }, + { + "name": "Smodin", + "domains": [ + "smodin.io" + ], + "url": "https://smodin.io/account", + "difficulty": "easy", + "notes": "Click the 'Subscriptions' tab at the top left of the page. Then scroll down and click the 'Delete Account' button at the very bottom of the page and select a checkbox. Your account will be deleted after 5 days" + }, + { + "name": "Smoothcomp", + "domains": [ + "smoothcomp.com" + ], + "url": "https://support.smoothcomp.com/article/193-please-remove-delete-hide-my-account-gdpr", + "difficulty": "easy", + "notes": "Click on your name at the top right of the website, which opens a dropdown. Then, click Settings and click the Delete Account button at the bottom of the page." + }, + { + "name": "Smule", + "domains": [ + "smule.com" + ], + "url": "https://smule.zendesk.com/hc/en-us/requests/new", + "difficulty": "hard", + "notes": "Create a ticket, select 'Remove Smule Profile', fill in the necessary details and tick the boxes. Make sure to remove subscriptions from the required services too." + }, + { + "name": "Snapchat", + "domains": [ + "snapchat.com", + "accounts.snapchat.com" + ], + "url": "https://accounts.snapchat.com/accounts/delete_account", + "difficulty": "easy", + "notes": "Enter username and password and click 'Delete'." + }, + { + "name": "Snapfish", + "domains": [ + "snapfish.com" + ], + "url": "https://support.snapfish.com/hc/en-us/articles/360008146353-Delete-your-account", + "difficulty": "hard", + "notes": "You need to open a request with customer service to delete your account." + }, + { + "name": "Snov.io", + "domains": [ + "snov.io", + "app.snov.io" + ], + "url": "https://app.snov.io/account#/security-settings", + "difficulty": "easy", + "notes": "Click \"Delete Account\" and follow the instructions" + }, + { + "name": "Social Blade", + "domains": [ + "socialblade.com" + ], + "url": "https://socialblade.com/account", + "difficulty": "easy", + "notes": "You can delete your account by clicking the red 'DELETE YOUR ACCOUNT' button at the very bottom of the page." + }, + { + "name": "SoftCreatR Media", + "domains": [ + "softcreatr.com", + "softcreatr.de" + ], + "url": "https://www.softcreatr.com/account-management/", + "difficulty": "easy", + "notes": "Your user account will be deleted after 7 days if you do not cancel the process beforehand. Created content, such as forum posts, will not be deleted, but your username will be anonymized and protected from re-registration for 363 days." + }, + { + "name": "SoloLearn", + "domains": [ + "sololearn.com" + ], + "url": "https://www.sololearn.com", + "difficulty": "easy", + "notes": "Go to Profile \u2b95 Settings \u2b95 Delete account" + }, + { + "name": "Sonder", + "domains": [ + "sonder.com" + ], + "url": "https://www.sonder.com/", + "difficulty": "medium", + "notes": "On the app, tap the 'profile' button, go into settings then 'Request account deletion'. State the reason and agree everything will be deleted and that should be it. The option to delete your account does not appear on the website." + }, + { + "name": "Songkick", + "domains": [ + "songkick.com" + ], + "url": "https://www.songkick.com/settings/account-settings", + "difficulty": "easy" + }, + { + "name": "Sonix", + "domains": [ + "sonix.ai", + "my.sonix.ai" + ], + "url": "https://my.sonix.ai/account/delete", + "difficulty": "easy" + }, + { + "name": "Sonos", + "domains": [ + "sonos.com" + ], + "url": "https://www.sonos.com/en-us/legal/privacy#legal-privacy-contact", + "difficulty": "hard", + "notes": "In order to delete your account you have to email them", + "email": "privacy@sonos.com" + }, + { + "name": "Soulseek", + "domains": [ + "slsknet.org" + ], + "url": "https://www.slsknet.org/news/node/748", + "difficulty": "hard", + "notes": "Your username is deleted automatically if you haven't logged into your account for 30 days." + }, + { + "name": "SoundCloud", + "domains": [ + "soundcloud.com" + ], + "url": "https://soundcloud.com/settings/account#delete-user", + "difficulty": "easy" + }, + { + "name": "Soundtrap", + "domains": [ + "soundtrap.com" + ], + "url": "https://support.soundtrap.com/hc/en-us/articles/360033406534-Delete-account", + "difficulty": "hard", + "notes": "If you have a subscription, you must cancel it before deleting your account. The only way to delete your account is by contacting support, which you can do using the \"Submit a request\" button at the top of their support site." + }, + { + "name": "SourceForge", + "domains": [ + "sourceforge.net" + ], + "url": "https://sourceforge.net/auth/disable/", + "difficulty": "medium", + "notes": "Data created by the user such as posts and tickets will remain and be attributed to the account, even if deleted. The username will not become available." + }, + { + "name": "Sourcery.ai", + "domains": [ + "sourcery.ai" + ], + "url": "https://sourcery.ai/privacy/", + "difficulty": "hard", + "notes": "Contact support by email and request account deletion.", + "email": "info@sourcery.ai" + }, + { + "name": "SpaceHey", + "domains": [ + "spacehey.com" + ], + "url": "https://spacehey.com/deleteaccount", + "difficulty": "easy", + "notes": "On the linked page select 'Delete this Account'." + }, + { + "name": "SPC", + "domains": [ + "spccard.ca" + ], + "url": "https://www.spccard.ca/privacy-policy", + "difficulty": "impossible", + "notes": "According to their privacy policy, emailing should be sufficient for data deletion, but they are unresponsive.", + "email": "privacy@spccard.ca" + }, + { + "name": "Speaker Deck", + "domains": [ + "speakerdeck.com" + ], + "url": "https://speakerdeck.com/account", + "difficulty": "easy", + "notes": "Scroll to the bottom of page and click on the 'Delete my account and all of my presentations'." + }, + { + "name": "speedrun.com", + "domains": [ + "speedrun.com" + ], + "url": "https://www.speedrun.com/settings", + "difficulty": "easy", + "notes": "On the linked page open the Delete tab, confirm your password, check 'Delete all runs' and 'Delete all forum posts', and select 'Delete account'." + }, + { + "name": "Speedtest", + "domains": [ + "speedtest.net", + "help.speedtest.net" + ], + "url": "https://help.speedtest.net/hc/en-us/articles/360035679994-How-do-I-delete-my-data-GDPR-", + "difficulty": "hard", + "notes": "The only way to delete your speedtest account is by emailing their support team.", + "email": "support@speedtest.net" + }, + { + "name": "Spieletipps", + "domains": [ + "spieletipps.de" + ], + "url": "https://www.spieletipps.de/m/resign/", + "difficulty": "easy", + "notes": "Confirm password and click the delete button." + }, + { + "name": "SpigotMC", + "domains": [ + "spigotmc.org" + ], + "url": "https://www.spigotmc.org/threads/delete-account.205176/", + "difficulty": "impossible", + "notes": "You can't delete your account you can only deactivate your account. Go for this to your profile and click the report button on your profile and write delete me and wait." + }, + { + "name": "Splice", + "domains": [ + "splice.com" + ], + "url": "https://splice.com/profile/settings", + "difficulty": "easy", + "notes": "Select 'Delete account' at the bottom of the page." + }, + { + "name": "Splitser", + "domains": [ + "splitser.com", + "app.splitser.com" + ], + "url": "https://app.splitser.com/account/delete", + "difficulty": "easy", + "notes": "Select 'Close account' and press 'OK' in the popup." + }, + { + "name": "Splitwise", + "domains": [ + "splitwise.com", + "secure.splitwise.com" + ], + "url": "https://secure.splitwise.com/account/settings", + "difficulty": "easy" + }, + { + "name": "Sportsbet", + "domains": [ + "sportsbet.com.au" + ], + "url": "https://helpcentre.sportsbet.com.au/hc/en-us/articles/115007208487-How-do-I-close-my-account-", + "difficulty": "hard", + "notes": "On the bottom of the page, download and fill the Self Exclusion Form." + }, + { + "name": "Sportsbet.io", + "domains": [ + "sportsbet.io" + ], + "url": "https://sportsbet.io/help-centre/help-getting-started/help-account/how-do-i-close-my-account", + "difficulty": "hard", + "notes": "Send an e-mail to them, from the registered e-mail, requesting the account exclusion.", + "email": "hello@sportsbet.io" + }, + { + "name": "Spotify", + "domains": [ + "spotify.com", + "accounts.spotify.com", + "open.spotify.com", + "support.spotify.com" + ], + "url": "https://support.spotify.com/close-account", + "difficulty": "medium", + "notes": "1. Cancel your subscription at https://www.spotify.com/us/account/subscription/ 2. Public playlists will be anonymised, delete any playlists you want. 3. Go to the provided link, Account \u2b95 I want to close my account and follow the instructions. The account can still be restored within 7 days of the request." + }, + { + "name": "Spreadshirt", + "domains": [ + "spreadshirt.com", + "my.spreadshirt.com" + ], + "url": "https://my.spreadshirt.com/account/contact", + "difficulty": "easy", + "notes": "Click 'Delete account' on the page, confirm with your password." + }, + { + "name": "SquadJobs", + "domains": [ + "squadjobs.com" + ], + "url": "https://squadjobs.com/help", + "difficulty": "hard", + "notes": "You need to e-mail them to request for account deletion.", + "email": "support@squadjobs.com" + }, + { + "name": "Square Cash", + "domains": [ + "cash.me" + ], + "url": "https://cash.me/login?return_to=support", + "difficulty": "hard", + "notes": "Login into the support page and email customer support asking to delete your account." + }, + { + "name": "Squarespace", + "domains": [ + "squarespace.com", + "account.squarespace.com" + ], + "url": "https://account.squarespace.com/settings/security/delete-account", + "difficulty": "easy" + }, + { + "name": "Stack Overflow / Stack Exchange Accounts", + "domains": [ + "stackoverflow.blog", + "stackoverflow.co", + "stackoverflow.com" + ], + "url": "https://stackoverflow.com/help/deleting-account", + "difficulty": "hard", + "notes": "You can delete using the provided link, but then you have to [submit an Erase my account request](https://stackoverflow.com/legal/gdpr/request) to have the profile fully deleted and the data removed or anonymized in the network." + }, + { + "name": "Stan", + "domains": [ + "stan.com.au" + ], + "url": "https://www.stan.com.au/privacy-policy", + "difficulty": "impossible", + "notes": "Stan provides no option to delete or deactivate your account, and will simply refuse if you send a request." + }, + { + "name": "Standard Notes", + "domains": [ + "standardnotes.com", + "app.standardnotes.com" + ], + "url": "https://standardnotes.com/reset", + "difficulty": "easy" + }, + { + "name": "Starbucks", + "domains": [ + "starbucks.com" + ], + "url": "https://www.starbucks.com/terms/privacy-policy/#contact_us", + "difficulty": "hard", + "notes": "US and Canadian users: Select the correct privacy form to submit your request. All others must send an email.", + "email": "privacy@starbucks.com", + "email_subject": "Account Deletion Request", + "email_body": "I request deletion of my Starbucks account." + }, + { + "name": "Stardock", + "domains": [ + "stardock.com", + "ashesofthesingularity.com", + "elementalgame.com", + "galciv.com", + "galciv1.com", + "galciv2.com", + "galciv3.com", + "joeuser.com", + "offworldgame.com", + "politicalmachine.com", + "sinsofasolarempire.com", + "sorcererking.com", + "wincustomize.com" + ], + "url": "https://stardock.atlassian.net/servicedesk/customer/portal/4/group/14/create/10143", + "difficulty": "hard", + "notes": "Fill out the form or send an email (from the same email as your account).", + "email": "support@stardock.com", + "email_subject": "Right to Erasure Request", + "email_body": "I wish to exercise my right to erasure under data protection law.\n\n[Give details of what personal data you want erased/deleted.]" + }, + { + "name": "Startnext", + "domains": [ + "startnext.com" + ], + "url": "https://www.startnext.com/help/FAQ.html#q74", + "difficulty": "easy", + "notes": "Go to your profile settings, scroll down, and click the 'Delete profile' link. It may be possible that your account cannot be deleted for a number of reasons, such as: you have a project in the starting, funding, or end phase; you have an active partner page; you supported a project that is still in the funding phase and we have not yet received your payment or your payment has not been returned to you." + }, + { + "name": "statcounter", + "domains": [ + "statcounter.com" + ], + "url": "https://statcounter.com/close_account.php", + "difficulty": "easy", + "notes": "Click the link, fill in your login info and confirm. It's reversible for 30 days, until your data gets purged." + }, + { + "name": "Statista", + "domains": [ + "statista.com" + ], + "url": "https://www.statista.com/profile/delete/", + "difficulty": "easy" + }, + { + "name": "StatusCake", + "domains": [ + "statuscake.com", + "app.statuscake.com" + ], + "url": "https://app.statuscake.com/User.php", + "difficulty": "easy", + "notes": "Under 'My Account' scroll down and click the red button 'Delete Your Account'" + }, + { + "name": "Steam", + "domains": [ + "steampowered.com", + "help.steampowered.com" + ], + "url": "https://help.steampowered.com/en/wizard/HelpDeleteAccount", + "difficulty": "hard", + "notes": "First you must verify ownership of the account, then Steam Support will respond to confirm your identification. After it is confirmed your account will be locked and then deleted in 30 days. You can cancel the deletion by contacting Steam Support during the 30 days. You can't reuse your account name." + }, + { + "name": "StepMap", + "domains": [ + "stepmap.de" + ], + "url": "https://www.stepmap.de/profile.html#profile_delete", + "difficulty": "hard" + }, + { + "name": "StickK", + "domains": [ + "stickk.com", + "stickk.zendesk.com" + ], + "url": "https://stickk.zendesk.com/hc/en-us/requests/new", + "difficulty": "hard", + "notes": "From the dropdown select \"I'd like to request to end my account\" and then fill in and submit the form." + }, + { + "name": "Stocard", + "domains": [ + "stocardapp.com" + ], + "url": "https://stocardapp.com/privacy", + "difficulty": "medium", + "notes": "From the app: Account \u2b95 Manage Account \u2b95 Delete account." + }, + { + "name": "Stock Informer", + "domains": [ + "stockinformer.com" + ], + "url": "https://www.stockinformer.com/myprofile.aspx", + "difficulty": "easy", + "notes": "Click 'Deactivate Account' at the bottom of the page." + }, + { + "name": "Storenvy", + "domains": [ + "storenvy.com" + ], + "url": "https://www.storenvy.com/account", + "difficulty": "easy", + "notes": "Log in, then navigate to 'Account Settings' \u2b95 'Profile'. Scroll to the bottom and click 'Delete my Storenvy store & account'. Click 'OK' when prompted to confirm." + }, + { + "name": "Storj", + "domains": [ + "eu1.storj.io", + "ap1.storj.io", + "us1.storj.io", + "storj.io" + ], + "url": "https://docs.storj.io/dcs/billing-payment-and-accounts-1/closing-an-account/", + "difficulty": "hard", + "notes": "Before requesting account deletion, make sure you have deleted all Buckets, Objects and Access Grants. These can all be found on the main dashboard after logging in. You'll have to create another account for their helpdesk ticket system, but after contacting support, they will delete both the main Storj account as well as the Helpdesk one." + }, + { + "name": "Strava", + "domains": [ + "strava.com" + ], + "url": "https://www.strava.com/athlete/delete_your_account", + "difficulty": "medium", + "notes": "Account deletion is irreversible: Your account and data will be permanently deleted, and you will be removed from all clubs, heatmaps, challenges and leaderboards. Some data you created for the community, like public segments or routes, may remain on Strava." + }, + { + "name": "Strawpoll", + "domains": [ + "strawpoll.com" + ], + "url": "https://strawpoll.com/account/settings/", + "difficulty": "easy", + "notes": "All of your polls will be eliminated" + }, + { + "name": "Streamable", + "domains": [ + "streamable.com", + "support.streamable.com" + ], + "url": "https://support.streamable.com/contact-us", + "difficulty": "hard", + "notes": "You have to contact support in order to delete your account." + }, + { + "name": "StreamLabs", + "domains": [ + "streamlabs.com" + ], + "url": "https://getonstream.com/how-to-delete-a-streamlabs-account-easy-guide/", + "difficulty": "hard", + "notes": "Contact customer support via email, set subject line to \"REQUEST TO DELETE MY ACCOUNT\". You will soon receive an email informing you about need to appeal on Logitech's website in order to fully delete your account with a link provided. Here you will need to enter your name, email, choose \"Data privacy request\" for a topic and say that you want to delete your Streamlabs account in the textbox below", + "email": "support@streamlabs.com", + "email_subject": "REQUEST TO DELETE MY ACCOUNT" + }, + { + "name": "StreamYard", + "domains": [ + "streamyard.com" + ], + "url": "https://streamyard.com/account/settings", + "difficulty": "easy", + "notes": "Click the delete account button, confirm and enter the 6-digit code sent to your e-mail to finalize" + }, + { + "name": "Stripe", + "domains": [ + "stripe.com", + "dashboard.stripe.com" + ], + "url": "https://dashboard.stripe.com/settings/account", + "difficulty": "easy", + "notes": "Account owners only, not team members can delete the account. Balances and pending invoices all need to be resolved before the account is permanently closed. Cannot be reversed." + }, + { + "name": "Stronghold Kingdoms", + "domains": [ + "strongholdkingdoms.com", + "login.strongholdkingdoms.com" + ], + "url": "https://login.strongholdkingdoms.com/ajaxphp/main_ajax.php?event=ChangeGDPR&status=0", + "difficulty": "medium", + "notes": "Log in, select the option view my account, a dialog will have delete my account button which is then confirmed by the email. After confirming, your GDPR request will takes 2 weeks to be completed. You are able to cancel this deletion request any time within that 2 week processing period by clicking the link below in the confirmation email." + }, + { + "name": "Studio", + "domains": [ + "studio.com" + ], + "url": "https://studio.com/settings?page=advanced", + "difficulty": "easy", + "notes": "Click on 'Delete My Account' and confirm you'd like to delete it." + }, + { + "name": "StudyMode", + "domains": [ + "studymode.com" + ], + "url": "https://www.studymode.com/about-us/contact", + "difficulty": "hard", + "notes": "You have to contact support in order to delete your account." + }, + { + "name": "StumbleUpon", + "domains": [ + "stumbleupon.com" + ], + "url": "https://www.stumbleupon.com/settings/delete-account", + "difficulty": "easy", + "notes": "You can reactivate within 14 days. After that the account is deleted." + }, + { + "name": "Subaru Maps", + "domains": [ + "subaru-maps.com" + ], + "url": "https://subaru-maps.com/#/users/profile", + "difficulty": "easy", + "notes": "Click the \"Delete User\" button in the bottom-right corner." + }, + { + "name": "Super Dom\u00ednios", + "domains": [ + "superdominios.org" + ], + "url": "https://superdominios.org/contato/", + "difficulty": "hard", + "notes": "Use the contact form. If you prefer, you can also request deletion of the account via email.", + "email": "suporte@superdominios.org" + }, + { + "name": "Supercell ID", + "domains": [ + "boombeach.com", + "brawlstars.com", + "clashofclans.com", + "clashroyale.com", + "clashroyaleapp.com", + "hayday.com", + "haydaygame.com", + "supercell.com", + "help.supercellsupport.com" + ], + "url": "https://help.supercellsupport.com/clash-of-clans/en/articles/gdpr-request-deletion-of-your-personal-data.html", + "difficulty": "impossible", + "notes": "Even after \"deleting\" your account, Supercell will still keep your personal information saved on its servers to, according to them, \"business interests\".", + "email": "legal-requests@supercell.com" + }, + { + "name": "SurfEasy", + "domains": [ + "surfeasy.com", + "support.surfeasy.com" + ], + "url": "https://support.surfeasy.com/hc/en-us/articles/360000937226-What-can-I-request-under-the-GDPR-", + "difficulty": "hard", + "notes": "Send an email from the address associated with your account. It takes up to 30 days for the account to be removed and data deleted.", + "email": "gdpr@surfeasy.com" + }, + { + "name": "Surfshark", + "domains": [ + "surfshark.com" + ], + "url": "https://my.surfshark.com/account/delete", + "difficulty": "easy", + "notes": "You can only delete your account if you click on the link provided.", + "email": "support@surfshark.com" + }, + { + "name": "SurveyMonkey", + "domains": [ + "surveymonkey.com" + ], + "url": "https://www.surveymonkey.com/user/account/", + "difficulty": "easy", + "notes": "Scroll to the bottom of the page and click 'Permanently delete account'. After reviewing the information, click all checkboxes and enter your password. Click 'Yes, delete this account' to confirm.The account and questionnaire data will be definitively excluded within 90 days." + }, + { + "name": "Surveytime", + "domains": [ + "surveytime.io" + ], + "url": "https://surveytime.io/privacy-policy", + "difficulty": "medium", + "notes": "You have to mail them requesting deletion or tap the \"Delete your account\" button in the Mobile App Settings screen.", + "email": "tommy@surveytime.io" + }, + { + "name": "Svbtle", + "domains": [ + "svbtle.com" + ], + "url": "https://svbtle.com/settings/account", + "difficulty": "easy", + "notes": "Click the 'Delete Account' link. After 30 days the data is irreversible to retrieve." + }, + { + "name": "Swagbucks", + "domains": [ + "swagbucks.com" + ], + "url": "https://www.swagbucks.com/account/settings#tab=account", + "difficulty": "easy", + "notes": "Use the 'Cancel My Account' link on your Account Settings page. Requires email confirmation." + }, + { + "name": "Swappa.com", + "domains": [ + "swappa.com" + ], + "url": "https://swappa.com/my/profile", + "difficulty": "easy", + "notes": "Scroll to the bottom of the page and click 'Delete Account'. Confirm the action by typing \"I understand\" in the text box." + }, + { + "name": "Swiggy", + "domains": [ + "swiggy.com", + "swiggy.in" + ], + "url": "https://swiggy.com", + "difficulty": "impossible", + "notes": "Despite their [privacy policy](https://www.swiggy.com/privacy-policy\" target=\"_blank) stating that account deletion is possible, their response to such a request was that \"there is no way to delete/erase your order history, and personal information.\"" + }, + { + "name": "Sync.com", + "domains": [ + "sync.com", + "cp.sync.com" + ], + "url": "https://cp.sync.com/account/info", + "difficulty": "easy", + "notes": "Visit the linked page. Scroll to the bottom of the page and click 'Delete account'. Select a reason for deleting and type a brief description of why." + }, + { + "name": "Syncfusion", + "domains": [ + "syncfusion.com" + ], + "url": "https://www.syncfusion.com/account/my-profile", + "difficulty": "easy", + "notes": "In \"My Profile Page\", click on \"Delete Account\" link on the left side and then the \"Delete Account\" button." + }, + { + "name": "Synology", + "domains": [ + "synology.com", + "account.synology.com" + ], + "url": "https://account.synology.com/en-us/profile", + "difficulty": "easy", + "notes": "Login to your account, go to profile. Scroll to the bottom and click on the \"Proceed\" link. Type your password, check the checkbox and click on the next button. Finally, choose a reason and click on \"Delete Account\". Your account will be deleted in 10 days." + }, + { + "name": "T-Mobile", + "domains": [ + "t-mobile.com" + ], + "url": "https://privacyportal-t-mobile.my.onetrust.com/webform/d4a925f0-4ebf-40ba-817b-bccc309e602f/7831d667-1ebc-4b1e-a941-e545cb0d0523", + "difficulty": "hard", + "notes": "You will need to provide proof of identity such as a passport or drivers license and verify the phone number associated with your T-Mobile ID. This will not delete active service plans if you have any." + }, + { + "name": "Tablondeanuncios.com", + "domains": [ + "tablondeanuncios.com" + ], + "url": "https://www.tablondeanuncios.com/mis-anuncios/", + "difficulty": "easy", + "notes": "Login to your account, go to Opciones, click Eliminar cuenta. Confirm by clicking I want to delete my account. Then, your account and your classified ads will be deleted." + }, + { + "name": "Tabnine", + "domains": [ + "tabnine.com" + ], + "url": "https://tabnine.com", + "difficulty": "hard", + "notes": "The only way to delete your account is to send a deletion request to the support using the email which your account is registered to.", + "email": "support@tabnine.com", + "email_subject": "Account Deletion", + "email_body": "Hello. Please delete my Tabnine account." + }, + { + "name": "Tagged", + "domains": [ + "tagged.com" + ], + "url": "https://tagged.com/account_cancel.html", + "difficulty": "easy", + "notes": "You can reactivate at any time by logging in to your account." + }, + { + "name": "Taiga", + "domains": [ + "taiga.io", + "tree.taiga.io" + ], + "url": "https://tree.taiga.io/user-settings/user-profile", + "difficulty": "easy", + "notes": "Log in to your user account, go to 'User Settings' and select 'Delete Taiga account' below the save button. Confirm and done." + }, + { + "name": "The Takeout", + "domains": [ + "thetakeout.com" + ], + "url": "https://notice.sp-prod.net/sar/index.html?message_id=539278&account_id=1195&ccpa_type=delete", + "difficulty": "hard", + "notes": "Fill out the form using the email address of your account and click on the verification link that is sent." + }, + { + "name": "Tanga", + "domains": [ + "tanga.com" + ], + "url": "https://www.tanga.com/support", + "difficulty": "hard", + "notes": "Select \"Account issues\" option and fill the form requesting your account deletion." + }, + { + "name": "Tango", + "domains": [ + "tango.me", + "help.tango.me" + ], + "url": "https://help.tango.me/en/articles/2985296-how-do-i-delete-my-tango-account", + "difficulty": "easy", + "notes": "Follow the instructions provided in the article. If you prefer, you can also request deletion of your account via email.", + "email": "support@tango.me" + }, + { + "name": "Tapas", + "domains": [ + "tapas.io", + "help.tapas.io" + ], + "url": "https://tapas.io/profile/settings", + "difficulty": "easy", + "notes": "Scroll to the bottom, click \"Delete Account\", and click through the prompts. You'll need to re-enter your password." + }, + { + "name": "Target", + "domains": [ + "target.com" + ], + "url": "https://www.target.com/ccpa-intake-form", + "difficulty": "hard", + "notes": "Select \"Delete your personal info and Target.com account\"" + }, + { + "name": "targetjobs", + "domains": [ + "targetjobs.co.uk" + ], + "url": "https://targetjobs.co.uk/account/settings", + "difficulty": "easy", + "notes": "Go to 'Account Settings' and then click 'Delete Account'." + }, + { + "name": "TargetProcess", + "domains": [ + "targetprocess.com" + ], + "url": "https://www.targetprocess.com", + "difficulty": "hard", + "notes": "You need to e-mail them to ask for the deletion to be processed.", + "email": "support@targetprocess.com" + }, + { + "name": "Tastebuds", + "domains": [ + "tastebuds.fm" + ], + "url": "https://tastebuds.fm/user_deletions/confirm_delete_reason", + "difficulty": "easy" + }, + { + "name": "TastyWorks", + "domains": [ + "tastyworks.com", + "support.tastyworks.com" + ], + "url": "https://support.tastyworks.com/support/solutions/articles/43000435334-close-account", + "difficulty": "hard" + }, + { + "name": "Teachable", + "domains": [ + "teachable.com", + "support.teachable.com" + ], + "url": "https://support.teachable.com/hc/en-us/articles/5540634496525-Delete-Your-School-or-Account#Deleteyouruseraccount", + "difficulty": "hard", + "notes": "You need to submit a deletion request by emailing them from the email address associated with your account.", + "email": "privacy@teachable.com", + "email_subject": "Account Deletion", + "email_body": "Hello. Please delete my Teachable account." + }, + { + "name": "Teachoo", + "domains": [ + "teachoo.com" + ], + "url": "https://www.teachoo.com/contact/", + "difficulty": "hard", + "notes": "You must contact teachoo to remove your account." + }, + { + "name": "TeamGantt", + "domains": [ + "teamgantt.com", + "app.teamgantt.com" + ], + "url": "https://app.teamgantt.com/admin/account-settings", + "difficulty": "easy", + "notes": "Go to Account Settings \u2b95 Subscription \u2b95 Cancel. Click 'Cancel my subscription and delete my data'" + }, + { + "name": "TeamSpeak", + "domains": [ + "teamspeak.com", + "support.teamspeak.com", + "myteamspeak.com" + ], + "url": "https://support.teamspeak.com/hc/en-us/articles/4408933645201-I-can-t-find-the-option-to-delete-myTeamSpeak-account-How-do-I-do-this-", + "difficulty": "hard", + "notes": "You need to contact the support using their contact form." + }, + { + "name": "TeamViewer", + "domains": [ + "teamviewer.com", + "login.teamviewer.com", + "service.teamviewer.com" + ], + "url": "https://login.teamviewer.com", + "difficulty": "easy", + "notes": "Edit profile (menu item at the top right corner of the page) \u2b95 Delete account" + }, + { + "name": "Tebex", + "domains": [ + "tebex.io", + "server.tebex.io" + ], + "url": "https://server.tebex.io", + "difficulty": "hard", + "notes": "Contact customer support to request account deletion" + }, + { + "name": "Technic Platform & Technic Forums", + "domains": [ + "technicpack.net", + "forums.technicpack.net" + ], + "url": "https://forums.technicpack.net/topic/322688-platform-forum-account-deletion-requests", + "difficulty": "medium", + "notes": "To delete your forum account reply to the linked topic with the message \"I request that my Technic forum account be deleted.\". To delete your platform account, report yourself with reason \"Other Reason\" and input the message \"I request that my Technic platform account be deleted.\"." + }, + { + "name": "TED", + "domains": [ + "ted.com", + "support.ted.com" + ], + "url": "https://support.ted.com/hc/en-us/articles/360005310614-TED-Ed-Accounts-and-managing-students", + "difficulty": "hard", + "notes": "Contact the TED support team [via their online contact form](https://support.ted.com/customer/portal/emails/new) for account deletion requests" + }, + { + "name": "Teespring", + "domains": [ + "teespring.com" + ], + "url": "https://teespring.com/", + "difficulty": "impossible", + "notes": "'It's currently unknown if they allow account deletions, but you can try emailing and asking. Do share their response with us on GitHub!", + "email": "privacy@spri.ng" + }, + { + "name": "Teladoc", + "domains": [ + "my.teladoc.com" + ], + "url": "https://member.teladoc.com/help/contact", + "difficulty": "hard", + "notes": "You must contact your insurance to delete your Teladoc account." + }, + { + "name": "Telegram", + "domains": [ + "telegram.org", + "core.telegram.org", + "my.telegram.org" + ], + "url": "https://telegram.org/deactivate", + "difficulty": "easy", + "notes": "Open deactivation page. Enter your phone number and one time password sent to your Telegram account. Delete your account then." + }, + { + "name": "Telltale", + "domains": [ + "telltale.com" + ], + "url": "https://telltale.com", + "difficulty": "hard", + "notes": "Contact support using the blue \"Support\" button at the bottom right, filling out all applicable fields with \"Account Deletion\"" + }, + { + "name": "TEMPO", + "domains": [ + "tempo.eu.com", + "k.tempocrypto.com" + ], + "url": "https://tempo.eu.com", + "difficulty": "impossible", + "notes": "No options to delete the account on website or app. Customer service asks for validation (phone number) but account is not actually deleted." + }, + { + "name": "Ten Percent Happier", + "domains": [ + "tenpercent.com", + "support.tenpercent.com" + ], + "url": "https://support.tenpercent.com/article/22-how-do-i-delete-my-account", + "difficulty": "hard", + "notes": "Cancel any subscriptions associated with yout account. Then you must send an email to Ten Percent support to have them delete your account. They will delete the account associated with the email address from which you send the request. Once their confirmation email arrives, your credentials will no longer work.", + "email": "support@tenpercent.com", + "email_subject": "Account Deletion Request", + "email_body": "I would like to delete my account." + }, + { + "name": "Tenor", + "domains": [ + "tenor.com" + ], + "url": "https://support.google.com/tenor/answer/10455265?hl=en#zippy=%2Chow-can-i-terminate-my-tenor-account", + "difficulty": "hard", + "notes": "Contact customer support and provide your Tenor username or email address to request for the account to be deleted.", + "email": "support@tenor.com", + "email_subject": "Account Deletion Request", + "email_body": "I would like to delete my account, with login XXXXXX and e-mail YYYYYY." + }, + { + "name": "Termius", + "domains": [ + "termius.com", + "account.termius.com" + ], + "url": "https://account.termius.com/", + "difficulty": "easy", + "notes": "Go to account settings, click 'Delete Account', enter your password, then verify your email address." + }, + { + "name": "Terms of Service; Didn't Read", + "domains": [ + "status.tosdr.org", + "forum.tosdr.org", + "edit.tosdr.org", + "tosdr.org" + ], + "url": "https://edit.tosdr.org/users/edit", + "difficulty": "easy", + "notes": "Log-in, then go to Menu \u2b95 Settings, scroll down and click 'Cancel my account'. Your contributions will stay and will be switched to an anonymous account." + }, + { + "name": "TerraCycle", + "domains": [ + "terracycle.com", + "help.us.terracycle.com" + ], + "url": "https://help.us.terracycle.com/hc/en-us/articles/360060676652-How-can-I-delete-my-account-", + "difficulty": "hard", + "notes": "You must contact customer support through email or by phone at +1(866)967-6766.", + "email": "customersupport@terracycle.com" + }, + { + "name": "Tesla", + "domains": [ + "tesla.com" + ], + "url": "https://www.tesla.com/support/how-create-or-delete-tesla-account#deleting-your-tesla-account", + "difficulty": "easy", + "notes": "Open the Tesla app, tap the profile picture in the top-right corner \u2b95 \u2018Account' \u2b95 \u2018Security and Privacy' and finally \u2018Delete Account\u2019." + }, + { + "name": "Testbirds", + "domains": [ + "testbirds.com", + "nest.testbirds.com" + ], + "url": "https://nest.testbirds.com/faq/category/list#accordion_faq-167", + "difficulty": "easy", + "notes": "Click on your Username \u2b95 Settings and Press the 'Delete account' Button on the bottom left, then confirm." + }, + { + "name": "Teuxdeux", + "domains": [ + "teuxdeux.com" + ], + "url": "https://teuxdeux.com/account/request-delete", + "difficulty": "easy", + "notes": "Check your email. There will be the url for permanently deleting your account." + }, + { + "name": "TextNow", + "domains": [ + "textnow.com" + ], + "url": "https://www.textnow.com/account/new#requestDataDeletionDisclosure", + "difficulty": "easy", + "notes": "Visit the linked page to delete your account." + }, + { + "name": "textPlus", + "domains": [ + "textplus.com", + "help.textplus.com" + ], + "url": "https://help.textplus.com/portal/en/kb/articles/how-can-i-delete-my-account", + "difficulty": "medium", + "notes": "Follow the instructions in the support article." + }, + { + "name": "Textures.com", + "domains": [ + "textures.com" + ], + "url": "https://www.textures.com/my-account/delete", + "difficulty": "easy", + "notes": "If you want to permanently delete your Textures.com account, go to the [Delete Account tab on your account](https://www.textures.com/my-account/delete) fill out your password and press Delete My Account." + }, + { + "name": "TheMovieDB", + "domains": [ + "themoviedb.org" + ], + "url": "https://www.themoviedb.org/settings/delete-account", + "difficulty": "easy", + "notes": "Press the button to delete the account within 30 seconds after the password confirmation, otherwise you have to reenter your password." + }, + { + "name": "Theta TV", + "domains": [ + "theta.tv", + "community.theta.tv" + ], + "url": "https://community.theta.tv/general-data-protection-gdpr-data-deletion-requests/", + "difficulty": "limited", + "notes": "In order to close your account, you must file a GDPR data deletion request to the website." + }, + { + "name": "TheTVDB", + "domains": [ + "thetvdb.com" + ], + "url": "https://thetvdb.com/dashboard/account/editinfo", + "difficulty": "easy", + "notes": "Scroll to the bottom of the linked page, enter your email address and click 'Delete Account'." + }, + { + "name": "Thingiverse", + "domains": [ + "thingiverse" + ], + "url": "https://www.thingiverse.com/", + "difficulty": "easy", + "notes": "Click your profile icon in the top right corner and select 'Account Settings', then scroll to the bottom of the page and click the red 'DELETE USER' button." + }, + { + "name": "Things", + "domains": [ + "culturedcode.com", + "support.culturedcode.com" + ], + "url": "https://support.culturedcode.com/customer/en/portal/articles/2803591-deleting-your-account-data", + "difficulty": "easy", + "notes": "In the Things app go to Preferences \u2b95 Things Cloud and select Edit Account. Then select 'Delete Account'." + }, + { + "name": "Threema", + "domains": [ + "threema.ch", + "myid.threema.ch" + ], + "url": "https://myid.threema.ch/revoke", + "difficulty": "easy", + "notes": "In the app, go to your ID and select 'Delete ID' at the bottom. Alternatively go to [https://myid.threema.ch/revoke](https://myid.threema.ch/revoke) and remove your ID with your revocation password. If you do not have one, you can only unlink your phone number and mail under [https://myid.threema.ch/unlink](https://myid.threema.ch/unlink)." + }, + { + "name": "Thrive Market", + "domains": [ + "thrivemarket.com" + ], + "url": "https://thrivemarket.com/privacy-policy", + "difficulty": "hard", + "notes": "You may request termination of your account or deletion of certain information by e-mail.", + "email": "help@thrivemarket.com" + }, + { + "name": "Ticketmaster", + "domains": [ + "ticketmaster.com" + ], + "url": "https://privacyportal.onetrust.com/webform/ba6f9c5b-dda5-43bd-bac4-4e06afccd928/968ed217-e724-4a6b-8bc0-7cb2a2c10c47", + "difficulty": "hard", + "notes": "You must submit a request to close your account via the form." + }, + { + "name": "TicketWeb", + "domains": [ + "ticketweb.com", + "ticketweb.co.uk", + "ticketweb.uk", + "help.ticketweb.co.uk" + ], + "url": "https://help.ticketweb.co.uk/hc/en-gb/articles/360007874593-How-do-I-close-my-Ticketweb-account-", + "difficulty": "hard" + }, + { + "name": "TickTick", + "domains": [ + "ticktick.com", + "blog.ticktick.com", + "support.ticktick.com" + ], + "url": "https://support.ticktick.com/hc/en-us/articles/360011759031", + "difficulty": "easy", + "notes": "Follow the instructions from this link." + }, + { + "name": "Tidal", + "domains": [ + "tidal.com", + "support.tidal.com" + ], + "url": "https://support.tidal.com/hc/en-us/requests/new", + "difficulty": "hard", + "notes": "Category: Privacy and Data Requests. NOTE! After you press submit, it says that the request has been sent. On 'Does this article answer your question?' Press 'X No, I need help'!" + }, + { + "name": "TikTok", + "domains": [ + "tiktok.com" + ], + "url": "https://www.tiktok.com", + "difficulty": "medium", + "notes": "Tap account (with people depicton, on the bottom right edge)>Menu (on top right edge)>Privacy and Settings>Privacy and Safety>Delete Account>Next>Continue>Delete Account." + }, + { + "name": "TikTok Developer", + "domains": [ + "developers.tiktok.com" + ], + "url": "https://developers.tiktok.com/support/", + "difficulty": "hard", + "notes": "Select \"Support\" as the category and \"Developer Portal\" as the topic." + }, + { + "name": "Time and Date", + "domains": [ + "timeanddate.com", + "timeanddate.de", + "timeanddate.no" + ], + "url": "https://www.timeanddate.com/custom/modify.html", + "difficulty": "easy", + "notes": "Scroll to the bottom of the linked page, click 'Delete Account' and confirm." + }, + { + "name": "Tinder", + "domains": [ + "tinder.com" + ], + "url": "https://tinder.com/app/profile", + "difficulty": "easy", + "notes": "At the bottom of the profile page is a delete account buttom, after clicking on it, you can either hide it or delete your account entirely." + }, + { + "name": "TKirch.dev", + "domains": [ + "tkirch.dev", + "tkirch.de", + "tituskirch.de" + ], + "url": "https://tkirch.dev/account-management/", + "difficulty": "easy", + "notes": "Your account will be deleted after 7 days, if you don't cancel the deletion process before. Created content (such as forum posts) won't be deleted." + }, + { + "name": "Todo Cloud", + "domains": [ + "todo-cloud.com", + "appigo.com", + "support.appigo.com" + ], + "url": "https://support.appigo.com/support/solutions/articles/4000180942-how-to-delete-my-todo-cloud-account", + "difficulty": "hard", + "notes": "Send an email from the address associated with your account.", + "email": "support@appigo.com", + "email_body": "Please delete my account and the data associated with it." + }, + { + "name": "Todoist", + "domains": [ + "todoist.com", + "developer.todoist.com", + "status.todoist.net" + ], + "url": "https://todoist.com/app/settings/account", + "difficulty": "easy", + "notes": "At the bottom of the page is a delete account buttom, after clicking on it, you will need to re-enter your password." + }, + { + "name": "Toggl Track", + "domains": [ + "toggl.com", + "track.toggl.com" + ], + "url": "https://track.toggl.com/profile", + "difficulty": "easy", + "notes": "Scroll down the profile page and click 'Close Account'" + }, + { + "name": "Tois Bet", + "domains": [ + "toisbet.com" + ], + "url": "https://toisbet.com/ptb/contents/self-exclusion", + "difficulty": "hard", + "notes": "Send an e-mail to them requesting the account exclusion.", + "email": "suporte@toisbet.com" + }, + { + "name": "Tokopedia", + "domains": [ + "tokopedia.com" + ], + "url": "https://www.tokopedia.com/help/article/apakah-saya-dapat-menghapus-akun-tokopedia", + "difficulty": "hard", + "notes": "Must contact Customer Service. NOTE: Email and mobile number cannot be reused or in other accounts." + }, + { + "name": "Toluna", + "domains": [ + "toluna.com", + "us.toluna.com" + ], + "url": "https://us.toluna.com/contactus", + "difficulty": "hard", + "notes": "You need to fill the form and submit it. After that you need to wait for them to answer to get back to you." + }, + { + "name": "TomTom GO", + "domains": [ + "tomtom.com", + "help.tomtom.com" + ], + "url": "https://help.tomtom.com/hc/en-gb/requests/new?ticket_form_id=360000697820", + "difficulty": "hard", + "notes": "Fill in the form to automatically open a support ticket." + }, + { + "name": "Too Good To Go", + "domains": [ + "toogoodtogo.com", + "space.toogoodtogo.com" + ], + "url": "https://space.toogoodtogo.com/privacy", + "difficulty": "easy", + "notes": "Click on Delete your account, enter your email. Then click on the confirmation link in the email. Alternatively, you can delete your account in the app settings." + }, + { + "name": "Topcoder", + "domains": [ + "topcoder.com" + ], + "url": "https://www.topcoder.com", + "difficulty": "impossible", + "notes": "You can't delete your account, but you can contact them via email to deactivate it.", + "email": "support@topcoder.com" + }, + { + "name": "Topface", + "domains": [ + "topface.com" + ], + "url": "https://topface.com/delete-profile/", + "difficulty": "easy" + }, + { + "name": "Tor Project", + "domains": [ + "torproject.org", + "trac.torproject.org" + ], + "url": "https://trac.torproject.org", + "difficulty": "impossible", + "notes": "You can create an account with your email address only. But you cannot change, close, or delete your account" + }, + { + "name": "Torn", + "domains": [ + "torn.com" + ], + "url": "https://www.torn.com/preferences.php#tab=accountClosure", + "difficulty": "easy", + "notes": "Login to your account first before deleting, you will lose all access to the account" + }, + { + "name": "Toronto Star", + "domains": [ + "thestar.com" + ], + "url": "https://www.thestar.com/about/privacy-anti-spam-notice-with-privacy-policy-and-terms-of-use-for-google-play-store.html", + "difficulty": "hard", + "notes": "According to their Privacy Policy, you must call customer service at 1-800-279-0181 to request the deletion of your account." + }, + { + "name": "Toyota.de", + "domains": [ + "toyota.de" + ], + "url": "https://www.toyota.de/apps/customerportal#/publish/customer_portal_profile", + "difficulty": "easy", + "notes": "Login to your account, go to your Settings, choose Tab 'Meine Einstellungen' and click on 'Konto l\u00f6schen'" + }, + { + "name": "The Tracktor", + "domains": [ + "thetracktor.com" + ], + "url": "https://thetracktor.com/account/close", + "difficulty": "easy", + "notes": "Login to your account first. Confirm by ticking 'Close my account' and click 'Close Account'." + }, + { + "name": "TradeMe", + "domains": [ + "trademe.co.nz" + ], + "url": "https://help.trademe.co.nz/hc/en-us/articles/360007000092#h_01GBNRBS8NG0QNNRWXCV7RVWDS", + "difficulty": "hard", + "notes": "Click on the link and ask the staff to delete your account" + }, + { + "name": "TradingView", + "domains": [ + "tradingview.com" + ], + "url": "https://www.tradingview.com/u/account/#settings-profile", + "difficulty": "easy", + "notes": "Login to your account. Click on \"Learn more about Account Deletion\". Press \"Yes, delete account\". Fill in your password" + }, + { + "name": "Traduc.com", + "domains": [ + "traduc.com" + ], + "url": "https://traduc.com/users/edit", + "difficulty": "easy", + "notes": "Login to your account. Click on \"My Account\" then \"My connection information\". Finally click \"Delete my account\"" + }, + { + "name": "Tragicbeautiful", + "domains": [ + "tragicbeautiful.com" + ], + "url": "https://tragicbeautiful.com", + "difficulty": "hard", + "notes": "Email customer service to delete the account associated to this email. Include your phone number and email address. There is no confirmation email. Later, you can verify that the acccount is deleted by trying to log in.", + "email": "support@tragicbeautiful.com", + "email_subject": "Hello\n, please delete the account associated to this email. My phone number is XXXXXXXX and I would like all data associated to my account to be removed." + }, + { + "name": "Trakt", + "domains": [ + "trakt.tv" + ], + "url": "https://trakt.tv/settings/data", + "difficulty": "easy" + }, + { + "name": "TransferXL", + "domains": [ + "transferxl.com" + ], + "url": "https://transferxl.com/profile", + "difficulty": "easy", + "notes": "Click on \"Delete your account\" at the bottom of the page." + }, + { + "name": "Transifex", + "domains": [ + "transifex.com", + "docs.transifex.com" + ], + "url": "https://docs.transifex.com/account/deactivating-your-account", + "difficulty": "easy", + "notes": "In the main navigation, click on your profile image in the top right corner; from the dropdown menu, select User Settings; scroll to the bottom of the page and click Deactivate my account; confirm you want to delete your account by clicking Deactivate my account in the popup." + }, + { + "name": "TrashMail", + "domains": [ + "trashmail.com" + ], + "url": "https://trashmail.com/?lang=en&cmd=manager", + "difficulty": "easy", + "notes": "In top navigation bar, click on 'Account', then select 'Delete account'." + }, + { + "name": "tree-nation", + "domains": [ + "tree-nation.com" + ], + "url": "https://tree-nation.com/userProfile/settings", + "difficulty": "easy", + "notes": "Log in to your account, go to the linked page, scroll to the \"Account management\" section, click \"Delete account\" and confirm. You will have 5 days to cancel the deletion." + }, + { + "name": "Trello", + "domains": [ + "trello.com" + ], + "url": "https://trello.com/your/account", + "difficulty": "easy", + "notes": "Select 'Delete your account?' option to delete your account" + }, + { + "name": "Tresorit", + "domains": [ + "tresorit.com" + ], + "url": "https://web.tresorit.com/account/profile", + "difficulty": "easy", + "notes": "Click the link, it redirects you to your Tresorit profile. Login, scroll to the end, and click 'Delete my account'. The deletion of your account needs confirmation by email, open your email and click 'confirm'." + }, + { + "name": "Trillian", + "domains": [ + "trillian.im" + ], + "url": "https://trillian.im/account/#delete", + "difficulty": "easy", + "notes": "Select the option to delete your account and enter your username, password and the code which will be send to your mailaddress." + }, + { + "name": "TripAdvisor", + "domains": [ + "tripadvisor.com" + ], + "url": "https://www.tripadvisorsupport.com/hc/en-us/articles/200615117", + "difficulty": "easy" + }, + { + "name": "TripIt", + "domains": [ + "tripit.com" + ], + "url": "https://www.tripit.com/account/delete", + "difficulty": "easy" + }, + { + "name": "Triptipedia", + "domains": [ + "triptipedia.com" + ], + "url": "https://www.triptipedia.com/account/delete", + "difficulty": "easy", + "notes": "Click on \"Delete my account\" and confirm" + }, + { + "name": "Troll and Toad", + "domains": [ + "www.trollandtoad.com" + ], + "url": "https://www.trollandtoad.com/contact.php", + "difficulty": "hard", + "notes": "You must contact customer support using their 'Contact Us' form, and provide your account's e-mail address. The account will be deleted once a support staff member processes it." + }, + { + "name": "TruckersMP", + "domains": [ + "truckersmp.com" + ], + "url": "https://truckersmp.com/profile/delete", + "difficulty": "easy", + "notes": "Solve the math problem and enter your password. You must wait 14 days to register again." + }, + { + "name": "Trustpilot", + "domains": [ + "trustpilot.com" + ], + "url": "https://www.trustpilot.com/users/settings", + "difficulty": "easy", + "notes": "Click 'Delete my profile' at the bottom of the page, then enter your email address to delete." + }, + { + "name": "TruthFinder", + "domains": [ + "truthfinder.com" + ], + "url": "https://www.truthfinder.com/privacy-center", + "difficulty": "easy", + "notes": "Click 'Right to Delete' under 'User Data Tools'. Then enter your email and click 'Delete My User Data'." + }, + { + "name": "TryHackMe", + "domains": [ + "tryhackme.com" + ], + "url": "https://tryhackme.com/profile", + "difficulty": "easy", + "notes": "Under the profile page navigate to the \"other\" tab, then select \"Delete My Account\"." + }, + { + "name": "TubeBuddy", + "domains": [ + "tubebuddy.com" + ], + "url": "https://www.tubebuddy.com/account/deleteuser", + "difficulty": "easy", + "notes": "Click on 'YES, Delete My Account' and then confirm to delete." + }, + { + "name": "Tubi", + "domains": [ + "tubitv.com", + "tubi.com" + ], + "url": "https://tubitv.com/account", + "difficulty": "easy", + "notes": "Click on'Delete Account' at the bottom of the page, specify why you'd like to delete your account and enter your password." + }, + { + "name": "Tumblr", + "domains": [ + "tumblr.com" + ], + "url": "https://www.tumblr.com/account/delete", + "difficulty": "easy" + }, + { + "name": "TuneMyMusic", + "domains": [ + "tunemymusic.com", + "app.tunemymusic.com" + ], + "url": "https://app.tunemymusic.com/settings", + "difficulty": "easy", + "notes": "Click the \"Delete Account\" button." + }, + { + "name": "TunnelBear", + "domains": [ + "tunnelbear.com" + ], + "url": "https://www.tunnelbear.com/account/remove", + "difficulty": "easy", + "notes": "Visit the linked page and enter your password to deleted your account." + }, + { + "name": "TurboSquid", + "domains": [ + "turbosquid.com", + "resources.turbosquid.com" + ], + "url": "https://resources.turbosquid.com/how-do-i-close-my-account/", + "difficulty": "impossible" + }, + { + "name": "Turing", + "domains": [ + "turing.com", + "developers.turing.com" + ], + "url": "https://developers.turing.com/dashboard/account", + "difficulty": "easy" + }, + { + "name": "Turo", + "domains": [ + "turo.com", + "support.turo.com" + ], + "url": "https://support.turo.com/hc/en-us/articles/203991030-How-to-close-your-account", + "difficulty": "hard", + "notes": "Email accountclosure@turo.com and request that they delete your personal information.", + "email": "accountclosure@turo.com", + "email_subject": "Account Deletion Request", + "email_body": "Please delete the data associated with my account." + }, + { + "name": "Turtl", + "domains": [ + "turtlapp.com" + ], + "url": "https://turtlapp.com/users/delete/", + "difficulty": "easy", + "notes": "You only need to confirm your email address; there's no requirement to log in." + }, + { + "name": "Tutanota", + "domains": [ + "keemail.me", + "tuta.io", + "tutamail.com", + "tutanota.com", + "tutanota.de", + "mail.tutanota.com" + ], + "url": "https://mail.tutanota.com/settings/subscription", + "difficulty": "easy", + "notes": "Go to \"Delete account\", type your password and confirm your action by clicking \"Delete\"." + }, + { + "name": "TV Tropes", + "domains": [ + "https://tvtropes.org/" + ], + "url": "https://tvtropes.org/pmwiki/profile.php", + "difficulty": "easy", + "notes": "In your profile, there is a 'Delete Account' link. Clicking this will permanently delete all personal information from your user profile and deactivate your account. Your username cannot be used again by you or anyone else" + }, + { + "name": "Tweek", + "domains": [ + "tweek.so" + ], + "url": "https://tweek.so/calendar/help", + "difficulty": "easy", + "notes": "Follow the instructions on the help article to delete your account." + }, + { + "name": "Twenty20", + "domains": [ + "twenty20.com" + ], + "url": "https://www.twenty20.com/delete-account?t20p=settings.index", + "difficulty": "easy" + }, + { + "name": "Twilio", + "domains": [ + "twilio.com", + "support.twilio.com" + ], + "url": "https://support.twilio.com/hc/en-us/requests/new", + "difficulty": "hard", + "notes": "Type something along the lines of 'delete my account' in the chatbox, then select 'No, show me more'. Scroll down and select 'Contact Support'. Select 'Not Product Specific' as the product.", + "email": "support@twilio.com", + "email_subject": "Twilio user account deletion request", + "email_body": "Please delete my Twilio user account." + }, + { + "name": "Twitch", + "domains": [ + "twitch.tv" + ], + "url": "https://www.twitch.tv/user/delete-account", + "difficulty": "easy" + }, + { + "name": "Twitter", + "domains": [ + "twitter.com" + ], + "url": "https://twitter.com/settings/accounts/confirm_deactivation", + "difficulty": "easy", + "notes": "Your account is deactivated before being deleted. After 30 days of remaining deactivated it will then be deleted." + }, + { + "name": "twoseven", + "domains": [ + "twoseven.xyz" + ], + "url": "https://twoseven.xyz/help/faq", + "difficulty": "easy", + "notes": "The instructions are the the bottom of their FAQs" + }, + { + "name": "Typeform", + "domains": [ + "typeform.com", + "help.typeform.com" + ], + "url": "https://help.typeform.com/hc/en-us/articles/360029631211-The-right-to-be-forgotten", + "difficulty": "easy", + "notes": "Follow the steps in the link: Login, then click 'My Account', scroll to the 'Danger Zone', click 'Delete my account' and confirm." + }, + { + "name": "TypePad", + "domains": [ + "typepad.com" + ], + "url": "https://www.typepad.com/secure/account/cancel-account", + "difficulty": "easy" + }, + { + "name": "Typing.com", + "domains": [ + "typing.com" + ], + "url": "https://www.typing.com/student/account", + "difficulty": "easy" + }, + { + "name": "Uber", + "domains": [ + "uber.com", + "myprivacy.uber.com", + "ubereats.com" + ], + "url": "https://myprivacy.uber.com/privacy/deleteyouraccount", + "difficulty": "medium", + "notes": "Select a reason, and wait 30 days for account to be deleted." + }, + { + "name": "Ubiquiti", + "domains": [ + "ui.com" + ], + "url": "https://www.ui.com/global-request/", + "difficulty": "hard", + "notes": "Open a ticket with support using the email address associated with the account." + }, + { + "name": "Ubisoft", + "domains": [ + "ubisoft.com", + "account.ubisoft.com", + "ubi.com" + ], + "url": "https://account.ubisoft.com/en-US/account-information/delete-account", + "difficulty": "easy" + }, + { + "name": "Ubuntu One", + "domains": [ + "one.ubuntu.com", + "login.ubuntu.com" + ], + "url": "https://login.ubuntu.com/+faq#can-i-delete-my-ubuntu-one-account", + "difficulty": "hard", + "notes": "Yes and no, it depends on which type(s) of accounts, and you will need to delete the accounts in the correct order. All accounts are tied to Ubuntu One's Single Sign-On (login.ubuntu.com), so that is the account you should close last. Everything else, such as Launchpad.net, cloud file storage, AskUbuntu, and other accounts should be closed first if possible. This is especially important if you have any paid services attached, to make sure you won't be billed for anything after closing the accounts. The last step is to delete your Single Sign-On (SSO) account. SSO accounts must be deleted manually by the Ubuntu One staff." + }, + { + "name": "Udacity", + "domains": [ + "udacity.com", + "udacity.trsnd.co" + ], + "url": "https://udacity.trsnd.co/policies?action=ERASURE&modal=take-control", + "difficulty": "medium", + "notes": "Follow the link to Udacity's privacy centre. Select \"Delete my personal data\" from the modal. In the next screen enter the email address that you use for Udacity and submit. You will be sent an email with a login link. Follow the link and you will be taken back to the privacy centre where a confirmation modal will be shown. Finally, confirm the request to delete your account. Note that you are still being charged for any courses you are enrolled in!" + }, + { + "name": "Udemy", + "domains": [ + "udemy.com" + ], + "url": "https://www.udemy.com/user/edit-danger-zone/", + "difficulty": "medium", + "notes": "In order to delete your account, you need to first unsubscribe from all of your courses." + }, + { + "name": "Ultimate Guitar", + "domains": [ + "ultimate-guitar.com" + ], + "url": "https://www.ultimate-guitar.com/forum/profile/delete-account", + "difficulty": "easy", + "notes": "Click the link or log in, go to 'settings', 'Profile' and click the small delete button at the bottom." + }, + { + "name": "Uncubed", + "domains": [ + "uncubed.com" + ], + "url": "https://uncubed.com/learn/users/edit", + "difficulty": "hard", + "notes": "You can deactivate your account from 'Settings', but must contact them via email to terminate your account", + "email": "team@uncubed.com" + }, + { + "name": "Uncyclopedia", + "domains": [ + "desciclopedia.ws", + "uncyclopedia.co", + "en.uncyclopedia.co", + "uncyclopedia.info", + "desencyclopedie.org", + "inciclopedia.org", + "absurdopedia.net", + "oncyclopedia.org", + "ansaikuropedia.org", + "nonsa.pl", + "nonciclopedia.org" + ], + "url": "https://en.uncyclopedia.co/wiki/Uncyclopedia:Delete_my_account", + "difficulty": "impossible", + "notes": "Like Wikipedia, the account cannot be removed, but there are some suggestions, like stop contributing, user rename or ask an admin or bureaucrat for a content vanishing." + }, + { + "name": "Unfuddle Ten", + "domains": [ + "unfuddle.io" + ], + "url": "https://unfuddle.io/app", + "difficulty": "hard", + "notes": "Send an email with the subject 'Delete my account', it is the only way.", + "email": "support@unfuddle.com" + }, + { + "name": "Unidays", + "domains": [ + "myunidays.com" + ], + "url": "https://www.myunidays.com/US/en-US/account/settings/delete", + "difficulty": "easy", + "notes": "Enter your password and click 'Delete my account'." + }, + { + "name": "Uniqlo", + "domains": [ + "uniqlo.com" + ], + "url": "https://www.uniqlo.com/us/en/member/details", + "difficulty": "easy" + }, + { + "name": "United Domains", + "domains": [ + "united-domains.de" + ], + "url": "https://www.united-domains.de/support/kontakt-formular/close//", + "difficulty": "hard", + "notes": "Contact Support and request to delete your account.", + "email": "support@united-domains.de" + }, + { + "name": "Unity ID", + "domains": [ + "unity.com", + "id.unity.com", + "unity3d.com" + ], + "url": "https://id.unity.com/en/account/edit", + "difficulty": "easy", + "notes": "Click 'Request to Delete Your Account' at the bottom of the account settings page." + }, + { + "name": "Unroll.me", + "domains": [ + "unroll.me" + ], + "url": "https://unroll.me/user/settings", + "difficulty": "easy", + "notes": "Click 'Delete my account' at the bottom of the user settings page." + }, + { + "name": "Unsplash", + "domains": [ + "unsplash.com" + ], + "url": "https://unsplash.com/account/close", + "difficulty": "easy" + }, + { + "name": "Uphold", + "domains": [ + "uphold.com", + "wallet.uphold.com", + "support.uphold.com" + ], + "url": "https://wallet.uphold.com/close-account", + "difficulty": "medium", + "notes": "To close your account, you must withdraw all funds. Next, click on the three dots in the left menu, then \"Security\", \"Close account\", \"Continue with account closure\", and follow the procedure." + }, + { + "name": "UPS", + "domains": [ + "ups.com", + "wwwapps.ups.com" + ], + "url": "https://wwwapps.ups.com/ppc/ppc.html?loc=en_US#/informationPage/deleteProfile", + "difficulty": "easy" + }, + { + "name": "Uptime Robot", + "domains": [ + "uptimerobot.com" + ], + "url": "https://uptimerobot.com/dashboard#mySettings", + "difficulty": "medium", + "notes": "Login to your account and click on 'My Settings' or follow the link. On the 'Delete Account' section click on 'I still want to delete the account' link & click on 'Send account deletion e-mail'. Check your email and open provided link. Lastly confirm deletion by click on 'Delete Account'." + }, + { + "name": "Urcdkey", + "domains": [ + "urcdkey.com" + ], + "url": "https://www.urcdkey.com/", + "difficulty": "hard", + "notes": "Send a message using the website chat feature (bottom right), asking them to delete your account" + }, + { + "name": "Usersnap", + "domains": [ + "usersnap.com" + ], + "url": "https://usersnap.com/contact", + "difficulty": "hard", + "notes": "Send an email with the subject 'Delete my account'", + "email": "help@usersnap.com" + }, + { + "name": "Usmobile", + "domains": [ + "usmobile.com" + ], + "url": "https://www.usmobile.com/about-us", + "difficulty": "hard", + "notes": "Request account deletion through chat. They'll send you a code to give back to them, takes about 15 minutes before deletion." + }, + { + "name": "Uswitch", + "domains": [ + "uswitch.com" + ], + "url": "https://www.uswitch.com/account/settings", + "difficulty": "easy", + "notes": "Scroll to the bottom of the 'Account Settings' page and click 'Delete Account'" + }, + { + "name": "Utry.me", + "domains": [ + "utry.me", + "shop.utryme.com" + ], + "url": "https://shop.utryme.com/kontaktformular", + "difficulty": "hard", + "notes": "Contact the customer support via email and request the deletion of your account.", + "email": "service@utryme.com" + }, + { + "name": "Uxcel", + "domains": [ + "uxcel.com", + "help.uxcel.com" + ], + "url": "https://help.uxcel.com/en/articles/4634446-can-i-delete-my-uxcel-account", + "difficulty": "hard", + "notes": "Contact the customer support via email and request the deletion of your account.", + "email": "learn@uxcel.com" + }, + { + "name": "Valorant", + "domains": [ + "playvalorant.com", + "support-valorant.riotgames.com" + ], + "url": "https://support-valorant.riotgames.com/hc/en-us/articles/360050328414-Deleting-Your-Riot-Account-and-All-Your-Data", + "difficulty": "easy", + "notes": "Go to the linked page, scroll down, click on \"LOG IN\" and confirm your deletion." + }, + { + "name": "Vans.com", + "domains": [ + "vans.com" + ], + "url": "https://www.vans.com/utility/contact-us.html", + "difficulty": "hard", + "notes": "Email customer service through the link and tell them you want your account deleted." + }, + { + "name": "VCRDB / Valorant Crosshair Database", + "domains": [ + "vcrdb.net" + ], + "url": "https://www.vcrdb.net/profile", + "difficulty": "medium", + "notes": "Before deleting your account, make sure you have deleted all Crosshairs you have created, otherwise account deletion will fail with an unknown error." + }, + { + "name": "Veduca", + "domains": [ + "veduca.org" + ], + "url": "https://veduca.org", + "difficulty": "impossible" + }, + { + "name": "Velo Hero", + "domains": [ + "velohero.com", + "app.velohero.com" + ], + "url": "https://app.velohero.com/settings/terminate", + "difficulty": "easy" + }, + { + "name": "Venmo", + "domains": [ + "venmo.com", + "account.venmo.com" + ], + "url": "https://account.venmo.com/settings/profile", + "difficulty": "easy" + }, + { + "name": "Vercel", + "domains": [ + "vercel.com" + ], + "url": "https://vercel.com/account", + "difficulty": "easy", + "notes": "In the dashboard, click your profile picture on the top right, click \"Settings\", scroll down and then click \"Delete Personal Account\"." + }, + { + "name": "Verkkokauppa.com", + "domains": [ + "verkkokauppa.com" + ], + "url": "https://asiakaspalvelu.verkkokauppa.com/hc/fi/articles/360000242527-Asiakastili", + "difficulty": "hard", + "notes": "You need to contact the customer service via email and include certain identifying information to prove you own the account.", + "email": "asiakaspalvelu@verkkokauppa.com" + }, + { + "name": "vgy.me", + "domains": [ + "vgy.me" + ], + "url": "https://vgy.me", + "difficulty": "easy", + "notes": "On the Account Details page, there is a Close Account tab." + }, + { + "name": "ViaBox", + "domains": [ + "viabox.com" + ], + "url": "https://viabox.zendesk.com/hc/en-us/requests/new", + "difficulty": "hard", + "notes": "Request the deletion of your account through the link above as a \"general request\". The system might create a support account for your request, so state that you want it to be deleted too." + }, + { + "name": "Viadeo", + "domains": [ + "viadeo.com" + ], + "url": "https://www.viadeo.com/settings/account/?ga_from=Fu:%2Fsettings%2Faccount%2F;Fb%3Amenu_box_right%3BFe%3AL1-account-settings%3B", + "difficulty": "easy", + "notes": "There's a button on the right, just under the menu." + }, + { + "name": "viainvest", + "domains": [ + "viainvest.com" + ], + "url": "https://viainvest.com/en/faq", + "difficulty": "hard", + "notes": "Before requesting account deletion, make sure you wait for the remaining payments to come through, and withdraw all available funds. The account balance must be 0. Then you can send an email to support.", + "email": "support@viainvest.com", + "email_subject": "Request to delete my account from ViaInvest", + "email_body": "I have an account in your database associated with the name XXXXXX and the email address XXXXXX. I have decided not to use the account again; therefore, I request that you kindly delete my account from your database and delete all the associated data." + }, + { + "name": "Viber", + "domains": [ + "viber.com", + "help.viber.com" + ], + "url": "https://help.viber.com/hc/en-us/articles/9174583112861", + "difficulty": "easy", + "notes": "Visit the linked page and follow the instructions." + }, + { + "name": "Vidio", + "domains": [ + "vidio.com", + "support.vidio.com" + ], + "url": "https://support.vidio.com/support/solutions/articles/43000060322--delete-account", + "difficulty": "impossible" + }, + { + "name": "Vidyard", + "domains": [ + "vidyard.com", + "knowledge.vidyard.com" + ], + "url": "https://knowledge.vidyard.com/hc/en-us/requests/new", + "difficulty": "hard", + "notes": "Click \"Submit a request\" and request an account deletion, entering your email into the request form." + }, + { + "name": "Vimeo", + "domains": [ + "vimeo.com", + "developer.vimeo.com", + "press.vimeo.com" + ], + "url": "https://vimeo.com/settings/goodbye/forever", + "difficulty": "easy" + }, + { + "name": "Vinted", + "domains": [ + "vinted.com", + "company.vinted.com", + "vinted.at", + "vinted.be", + "vinted.ca", + "vinted.cz", + "vinted.de", + "vinted.es", + "vinted.fr", + "vinted.hu", + "vinted.it", + "vinted.lt", + "vinted.lu", + "vinted.nl", + "vinted.pl", + "vinted.pt", + "vinted.ro", + "vinted.se", + "vinted.sk", + "vinted.co.uk" + ], + "url": "https://www.vinted.com/member/general/delete_account", + "difficulty": "easy", + "notes": "Click on your profile icon, then \"Settings\", \"Account settings\", \"Delete my account\", confirm that all transactions are completed, and click \"Delete account\"." + }, + { + "name": "Virmach", + "domains": [ + "virmach.com", + "billing.virmach.com" + ], + "url": "https://billing.virmach.com/submitticket.php", + "difficulty": "impossible", + "notes": "You can open a ticket and ask to have your account deleted, but they will only close it. Login credentials will continue to work and profile information is retained after closure." + }, + { + "name": "Virtualmaster", + "domains": [ + "virtualmaster.com" + ], + "url": "https://www.virtualmaster.com/virtualmaster/en/issues", + "difficulty": "hard", + "notes": "Log in to your account and contact the customer support using the contact form and request the deletion of your account." + }, + { + "name": "VirusTotal", + "domains": [ + "virustotal.com" + ], + "url": "https://www.virustotal.com/gui/settings", + "difficulty": "easy", + "notes": "Log in to your account, go to the page linked above, and press 'Delete account'" + }, + { + "name": "Visit Japan Web (Japanese Customs)", + "domains": [ + "vjw.digital.go.jp" + ], + "url": "https://www.vjw.digital.go.jp/main/#/vjwpco005", + "difficulty": "hard", + "notes": "Accounts are deleted after 18 months of inactivity, although it is possible to request deletion earlier via email.", + "email": "ciq@digital.go.jp", + "email_body": "Please delete my Visit Japan Web account." + }, + { + "name": "Viva o Linux (VOL)", + "domains": [ + "vivaolinux.com.br" + ], + "url": "https://www.vivaolinux.com.br/minhaConta.php", + "difficulty": "easy", + "notes": "Click at \"Excluir conta\", type your password and confirm your action by clicking \"Gravar\"." + }, + { + "name": "Vivaldi", + "domains": [ + "vivaldi.com", + "help.vivaldi.com", + "vivaldi.net", + "login.vivaldi.net", + "webmail.vivaldi.net" + ], + "url": "https://help.vivaldi.com/services/account/delete-account-on-vivaldi-net/", + "difficulty": "medium" + }, + { + "name": "Vive La Mode", + "domains": [ + "vive-lamode.com" + ], + "url": "https://vive-lamode.com", + "difficulty": "hard", + "notes": "Contact support using the linked form or by email and request account deletion." + }, + { + "name": "VK/\u0412\u041a\u043e\u043d\u0442\u0430\u043a\u0442\u0435", + "domains": [ + "vk.com" + ], + "url": "https://vk.com/settings?act=deactivate", + "difficulty": "easy" + }, + { + "name": "Voicemod", + "domains": [ + "voicemod.net" + ], + "url": "https://www.voicemod.net/support/?letstalk=Account%20and%20Login&issue", + "difficulty": "hard", + "notes": "Fill out the form, in the 'lets talk' field select 'Account & Login', in the second field select 'Delete account'." + }, + { + "name": "Volcano Hosting", + "domains": [ + "volcanohosting.net" + ], + "url": "https://www.volcanohosting.net", + "difficulty": "hard", + "notes": "You need to log into their billing panel and send a ticket regarding the account deletion." + }, + { + "name": "VoucherCodes", + "domains": [ + "vouchercodes.co.uk", + "support.vouchercodes.co.uk" + ], + "url": "https://support.vouchercodes.co.uk/hc/en-us/articles/360000349566-How-do-I-delete-my-Account-", + "difficulty": "hard", + "notes": "Send an email to them to request account deletion.", + "email": "privacy@vouchercodes.co.uk" + }, + { + "name": "Voxer", + "domains": [ + "voxer.com", + "support.voxer.com" + ], + "url": "https://support.voxer.com/hc/en-us/articles/204330173-How-do-I-delete-my-Voxer-account-", + "difficulty": "medium", + "notes": "Account can only be deleted from Android or iOS app, not the Voxer website." + }, + { + "name": "Vrbo", + "domains": [ + "vrbo.com", + "help.vrbo.com" + ], + "url": "https://help.vrbo.com/articles/How-do-I-delete-my-account", + "difficulty": "hard", + "notes": "To delete your account, select \"Contact Us\", select any of the listed categories, select \"Chat (new)\", ask the chatbot to speak to a real person, and ask the person to delete your account. They will send you an email asking for you to confirm that you wish to have your account deleted. Reply to the email confirming that you wish to delete your account." + }, + { + "name": "VRChat", + "domains": [ + "vrchat.com", + "help.vrchat.com" + ], + "url": "https://help.vrchat.com/hc/en-us/articles/1500002379282-I-want-to-delete-my-VRChat-account", + "difficulty": "easy", + "notes": "There will be a 14-day waiting period. Once this period has been completed, the account will be deleted." + }, + { + "name": "VSCO", + "domains": [ + "vsco.co", + "support.vsco.co" + ], + "url": "https://support.vsco.co/hc/en-us/articles/360004196352-How-do-I-delete-my-VSCO-Account-", + "difficulty": "easy", + "notes": "Deleting your account won't delete your membership." + }, + { + "name": "VSTBuzz", + "domains": [ + "vstbuzz.com" + ], + "url": "https://vstbuzz.com/contact/", + "difficulty": "hard", + "notes": "Account can only be deleted by sending request to their support team" + }, + { + "name": "VTech", + "domains": [ + "www.vtech.com", + "www.vtechda.com" + ], + "url": "https://www.vtechkids.com/support/support_form/", + "difficulty": "hard", + "notes": "You have to call their toll-free number at 1-800-521-2010 or submit a request at the contact form to delete your account." + }, + { + "name": "Vuforia Chalk", + "domains": [ + "ptc.com", + "support.ptc.com", + "vuforia.com" + ], + "url": "https://support.ptc.com/help/vuforia/chalk_app_center/#page/Vuforia_Chalk_Admin_Center%2Fcommon%2Fget_help.html%23", + "difficulty": "hard", + "notes": "Business Account users must contact their company administrator. Peronal Account users must contact PTC by phone to request account deletion. (The email address provided at the URL does not accept mail.) Call 1-877-275-4782, press 2 for Support Services, 9 for an operator, and ask them to delete your account. They should pass your information to the Vuforia team to delete your account. After about two weeks, your login credentials should no longer work in the Chalk app." + }, + { + "name": "Vultr", + "domains": [ + "vultr.com", + "my.vultr.com" + ], + "url": "https://my.vultr.com/support", + "difficulty": "hard", + "notes": "Create a ticket with customer support to request the deletion of your data" + }, + { + "name": "Wacom Cloud", + "domains": [ + "wacom.com", + "account.wacom.com" + ], + "url": "https://account.wacom.com/en-us/profile", + "difficulty": "easy", + "notes": "Just click in 'Privacy' link, check the option 'I hereby certify that I am the consumer whose personal information is the subject of this request.' and click 'Delete My Information' button." + }, + { + "name": "Wahoo Fitness", + "domains": [ + "wahoofitness.com" + ], + "url": "https://privacyportal.onetrust.com/webform/b2b76ae8-d622-4165-97c7-8896261e24b7/b43eda4f-3724-4303-879c-e65dbcfced1d", + "difficulty": "medium", + "notes": "Fill the form, selecting \"Customer/Former Customer\" and \"Delete My Information\" on the respective prompts. A link will be sent to your email to confirm." + }, + { + "name": "Waifudex", + "domains": [ + "waifudex.com" + ], + "url": "https://waifudex.com/home", + "difficulty": "easy", + "notes": "Click on your username (top right) \u2b95 Delete account (bottom of window) \u2b95 Confirm" + }, + { + "name": "Wakanim", + "domains": [ + "wakanim.tv" + ], + "url": "https://www.wakanim.tv/sc/v2/static/contactus", + "difficulty": "hard", + "notes": "Fill the form with your account's username and mail, select category \"Account/Login\" and subcategory \"Account Deletion\". Shortly after you will receive a mail that your request is being reviewed. You'll be notified via mail when the request is completed by support staff." + }, + { + "name": "Walmart", + "domains": [ + "walmart.com" + ], + "url": "https://www.walmart.com/account/api/ccpa-intake?native=false&app=gm&type=access", + "difficulty": "hard", + "notes": "They only accept requests from California, which is validated only by the actual selection on the form." + }, + { + "name": "Walmart Canada", + "domains": [ + "walmart.ca" + ], + "url": "https://www.walmart.ca/en/help/contact-us", + "difficulty": "hard", + "notes": "Contact customer service to close your account." + }, + { + "name": "WaniKani", + "domains": [ + "wanikani.com" + ], + "url": "https://www.wanikani.com/settings/danger_zone", + "difficulty": "easy", + "notes": "Visit the given link and click on \"Send deletion confirmation mail\". You will receive a mail on your registered mail address and you can confirm the account deletion from there." + }, + { + "name": "Wappalyzer", + "domains": [ + "wappalyzer.com" + ], + "url": "https://www.wappalyzer.com/account/", + "difficulty": "easy", + "notes": "Click on your e-mail on the top right in the navigator. Find and click on Account. Scroll down to find the delete account button in red. Confirm deletion. Enter password to complete deletion." + }, + { + "name": "Wargaming.net", + "domains": [ + "ru.wargaming.net", + "na.wargaming.net", + "eu.wargaming.net", + "asia.wargaming.net" + ], + "url": "https://eu.wargaming.net/personal/suspend_account/", + "difficulty": "medium", + "notes": "Follow the link, log in, and enter your email address to confirm account deletion. A confirmation email will be sent to you. Follow the 'Confirm' link in the email, login again, and finally confirm account deletion again. After 45 days your account will be deleted permanently." + }, + { + "name": "Warmshowers", + "domains": [ + "warmshowers.org" + ], + "url": "https://www.warmshowers.org/privacy", + "difficulty": "easy", + "notes": "Click the \"Cancel account\" button at the bottom of the page when editing your account." + }, + { + "name": "Warner Bros. Games", + "domains": [ + "warnerbrosgames.com", + "wbgames.com" + ], + "url": "https://account.wbgames.com/account", + "difficulty": "medium", + "notes": "Click the \"Delete my account\" button and enter a confirmation code sent yo your email." + }, + { + "name": "The Washington Post", + "domains": [ + "helpcenter.washingtonpost.com", + "washingtonpost.com" + ], + "url": "https://helpcenter.washingtonpost.com/hc/en-us/requests/new", + "difficulty": "hard", + "notes": "You have to submit a request regarding account deletion, and support will get back to you by sending you a account deletion confirmation email. After confirming, your account is deleted. For residents of EEA, UK, Switzerland, California, or Virginia who verify your address, they will delete additional information." + }, + { + "name": "Watch2Gether", + "domains": [ + "w2g.tv" + ], + "url": "https://w2g.tv/users/current_user", + "difficulty": "easy", + "notes": "Scroll down to the footer, click \"Delete my account\" and confirm." + }, + { + "name": "Wattpad", + "domains": [ + "wattpad.com" + ], + "url": "https://www.wattpad.com/settings", + "difficulty": "easy", + "notes": "Closed accounts are deleted after six months." + }, + { + "name": "WAYN", + "domains": [ + "wayn.com" + ], + "url": "https://www.wayn.com/wayn.html?wci=unregister", + "difficulty": "easy" + }, + { + "name": "Waze", + "domains": [ + "waze.com" + ], + "url": "https://www.waze.com/dashboard/delete_account", + "difficulty": "easy" + }, + { + "name": "The Weather Network", + "domains": [ + "theweathernetwork.com" + ], + "url": "https://www.theweathernetwork.com/my-account/?intcmp=twn_supernav_settings", + "difficulty": "medium", + "notes": "Scroll down to the bottom of the linked page and click on 'Delete my account'. Then, an email will be sent to you asking you to confirm your account deletion." + }, + { + "name": "Weather.com", + "domains": [ + "weather.com", + "registration.weather.com" + ], + "url": "https://registration.weather.com/ursa/profile/unsubscribe", + "difficulty": "easy", + "notes": "Site uses the term \"unsubscribe\" to describe completely deleting an account." + }, + { + "name": "WEB.DE", + "domains": [ + "web.de", + "kundencenter.web.de" + ], + "url": "https://kundencenter.web.de", + "difficulty": "easy" + }, + { + "name": "Webex - Free Account", + "domains": [ + "webex.com", + "help.webex.com", + "settings.webex.com" + ], + "url": "https://help.webex.com/en-us/5m4i4y/Delete-Your-Free-Webex-Account#id_111643", + "difficulty": "easy", + "notes": "Just follow the settings to find the delete account button and click it" + }, + { + "name": "Webhosting.dk", + "domains": [ + "webhosting.dk" + ], + "url": "https://www.webhosting.dk/DKK/deleteaccount.php", + "difficulty": "hard", + "notes": "The service claims to be required by law to retain information for the last 5 financial years, and doesn't allow you to delete it. Your account must be inactive for 5 full years before you can delete it." + }, + { + "name": "Weblate", + "domains": [ + "weblate.org" + ], + "url": "https://hosted.weblate.org/accounts/remove/", + "difficulty": "easy" + }, + { + "name": "Webtickets", + "domains": [ + "webtickets.co.za" + ], + "url": "https://www.webtickets.co.za/v2/FAQ.aspx?itemid=1505441537", + "difficulty": "hard", + "notes": "Fill in the form requesting the deletion of your account" + }, + { + "name": "WEBTOON", + "domains": [ + "www.webtoons.com" + ], + "url": "https://www.webtoons.com/en/account/delete", + "difficulty": "easy", + "notes": "Check the \"I understand and want to delete my account\" option and click on \"Delete my account\". Note that any comments you wrote will not be deleted automatically so you will need to go [here](https://www.webtoons.com/en/mycomment) and delete them yourself." + }, + { + "name": "Webull", + "domains": [ + "webull.com" + ], + "url": "https://www.webull.com/hc/categories/fq125-How-do-I-delete-my-Webull-account", + "difficulty": "easy", + "notes": "Must use the mobile application to delete account." + }, + { + "name": "WeChat", + "domains": [ + "wechat.com", + "weixin.qq.com", + "wx.qq.com" + ], + "url": "https://help.wechat.com/cgi-bin/micromsg-bin/oshelpcenter?opcode=2&id=1706083AnYFb170608VF3Ur2", + "difficulty": "easy", + "notes": "From the app: Me \u2b95 Settings \u2b95 Account Security \u2b95 WeChat Security Center \u2b95 Account Cancellation." + }, + { + "name": "Weebly", + "domains": [ + "weebly.com" + ], + "url": "https://www.weebly.com/home/account/payment", + "difficulty": "easy", + "notes": "Click on 'Permanently delete your Weebly account'." + }, + { + "name": "WeHeartIt", + "domains": [ + "weheartit.com" + ], + "url": "https://weheartit.com/settings/delete", + "difficulty": "easy" + }, + { + "name": "Weibo", + "domains": [ + "weibo.com" + ], + "url": "https://kefu.weibo.com/faqdetail?id=20690", + "difficulty": "easy" + }, + { + "name": "Western Union", + "domains": [ + "westernunion.ch", + "westernunion.com", + "wucare.westernunion.com" + ], + "url": "https://wucare.westernunion.com/s/article/How-do-I-log-in-at-westernunion-com?language=en_US#delete", + "difficulty": "hard", + "notes": "To delete your profile, [contact](https://www.westernunion.com/us/en/contactus.html) Customer Care or send an email from the account you registered with containing your name, registered phone number, My WU number (if applicable), and reason for deleting your profile.", + "email": "customercare@westernunion.com", + "email_body": "My name is XXXXXX%0AMy registered phone number is XXXXXX%0AMy WU number is XXXXXX%0AI would like to delete my WU profile because XXXXXX" + }, + { + "name": "WG-Gesucht.de", + "domains": [ + "wg-gesucht.de" + ], + "url": "https://www.wg-gesucht.de/hilfe.html#collapse-account-4", + "difficulty": "easy" + }, + { + "name": "WhatPulse", + "domains": [ + "whatpulse.org" + ], + "url": "https://whatpulse.org/my/#home", + "difficulty": "easy", + "notes": "When logged into the website, select \"My WhatPulse\" from the navigation bar, then click \"Unregister from WhatPulse\" towards the bottom of the page. This will permanently delete the account." + }, + { + "name": "WhatsApp", + "domains": [ + "whatsapp.com" + ], + "url": "https://www.whatsapp.com/faq/search/?q=how%20do%20I%20delete%20my%20account?&p=desktop", + "difficulty": "medium", + "notes": "From the app: Settings \u2b95 Account \u2b95 Delete your account." + }, + { + "name": "Which?", + "domains": [ + "which.co.uk" + ], + "url": "https://www.which.co.uk/terms-and-conditions/your-which-membership/", + "difficulty": "hard", + "notes": "Require your membership number to be sent in the email. This can be found [here](https://www.which.co.uk/account/#/)", + "email": "which@which.co.uk", + "email_body": "My membership number is XXXXXX" + }, + { + "name": "Whirlpool", + "domains": [ + "whirlpool.net.au" + ], + "url": "http://whirlpool.net.au/wiki/wp_deleteaccount", + "difficulty": "impossible", + "notes": "Whirlpool refuses to permanently delete accounts and instead suggests that the best solution is 'simply to exercise self control and not log in anymore'. In exceptional circumstances (e.g. death, legal threats, security risks) you may contact a moderator to request that your account be marked as inactive or placed in the penalty box. The site also refuses to delete a large amount of posts on your behalf, so the best solution may be to turn on 2FA, change your username/email address to something that's not used elsewhere and not login anymore." + }, + { + "name": "Whizlabs", + "domains": [ + "whizlabs.com" + ], + "url": "https://www.whizlabs.com/contact-us/", + "difficulty": "hard", + "notes": "Submit a request to delete your account using the contact form provided.", + "email": "support@whizlabs.com" + }, + { + "name": "WhoSay.com", + "domains": [ + "whosay.com" + ], + "url": "https://www.whosay.com/settings", + "difficulty": "easy", + "notes": "Just click 'Deactivate'." + }, + { + "name": "Wikidot", + "domains": [ + "wikidot.com" + ], + "url": "https://www.wikidot.com/account/settings", + "difficulty": "easy", + "notes": "Click on 'Delete account'. Confirm account deletion through the link sent to user email address." + }, + { + "name": "Wikimedia Commons", + "domains": [ + "commons.wikimedia.org", + "commons.m.wikimedia.org" + ], + "url": "https://commons.wikimedia.org/wiki/Commons:Username_policy#Deleting_your_account", + "difficulty": "impossible", + "notes": "An account cannot be deleted as all contibutions to Wikimedia Commons are licensed under licenses that require attribution. However, you can place the template {{SD|U1}} on your user and talk pages, and rename your account to something random [here](https://commons.wikimedia.org/wiki/Special:GlobalRenameRequest)" + }, + { + "name": "Wikipedia", + "domains": [ + "wikipedia.org", + "aa.wikipedia.org", + "ab.wikipedia.org", + "ace.wikipedia.org", + "ady.wikipedia.org", + "af.wikipedia.org", + "ak.wikipedia.org", + "als.wikipedia.org", + "alt.wikipedia.org", + "am.wikipedia.org", + "ami.wikipedia.org", + "an.wikipedia.org", + "ang.wikipedia.org", + "ar.wikipedia.org", + "arc.wikipedia.org", + "ary.wikipedia.org", + "arz.wikipedia.org", + "as.wikipedia.org", + "ast.wikipedia.org", + "atj.wikipedia.org", + "av.wikipedia.org", + "avk.wikipedia.org", + "awa.wikipedia.org", + "ay.wikipedia.org", + "az.wikipedia.org", + "azb.wikipedia.org", + "ba.wikipedia.org", + "ban.wikipedia.org", + "bar.wikipedia.org", + "bat-smg.wikipedia.org", + "bcl.wikipedia.org", + "be.wikipedia.org", + "be-tarask.wikipedia.org", + "bg.wikipedia.org", + "bh.wikipedia.org", + "bi.wikipedia.org", + "bjn.wikipedia.org", + "blk.wikipedia.org", + "bm.wikipedia.org", + "bn.wikipedia.org", + "bo.wikipedia.org", + "bpy.wikipedia.org", + "br.wikipedia.org", + "bs.wikipedia.org", + "bug.wikipedia.org", + "bxr.wikipedia.org", + "ca.wikipedia.org", + "cbk-zam.wikipedia.org", + "cdo.wikipedia.org", + "ce.wikipedia.org", + "ceb.wikipedia.org", + "ch.wikipedia.org", + "cho.wikipedia.org", + "chr.wikipedia.org", + "chy.wikipedia.org", + "ckb.wikipedia.org", + "co.wikipedia.org", + "cr.wikipedia.org", + "crh.wikipedia.org", + "cs.wikipedia.org", + "csb.wikipedia.org", + "cu.wikipedia.org", + "cv.wikipedia.org", + "cy.wikipedia.org", + "da.wikipedia.org", + "dag.wikipedia.org", + "de.wikipedia.org", + "din.wikipedia.org", + "diq.wikipedia.org", + "dsb.wikipedia.org", + "dty.wikipedia.org", + "dv.wikipedia.org", + "dz.wikipedia.org", + "ee.wikipedia.org", + "el.wikipedia.org", + "eml.wikipedia.org", + "en.wikipedia.org", + "eo.wikipedia.org", + "es.wikipedia.org", + "et.wikipedia.org", + "eu.wikipedia.org", + "ext.wikipedia.org", + "fa.wikipedia.org", + "ff.wikipedia.org", + "fi.wikipedia.org", + "fiu-vro.wikipedia.org", + "fj.wikipedia.org", + "fo.wikipedia.org", + "fr.wikipedia.org", + "frp.wikipedia.org", + "frr.wikipedia.org", + "fur.wikipedia.org", + "fy.wikipedia.org", + "ga.wikipedia.org", + "gag.wikipedia.org", + "gan.wikipedia.org", + "gcr.wikipedia.org", + "gd.wikipedia.org", + "gl.wikipedia.org", + "glk.wikipedia.org", + "gn.wikipedia.org", + "gom.wikipedia.org", + "gor.wikipedia.org", + "got.wikipedia.org", + "gu.wikipedia.org", + "guw.wikipedia.org", + "gv.wikipedia.org", + "ha.wikipedia.org", + "hak.wikipedia.org", + "haw.wikipedia.org", + "he.wikipedia.org", + "hi.wikipedia.org", + "hif.wikipedia.org", + "ho.wikipedia.org", + "hr.wikipedia.org", + "hsb.wikipedia.org", + "ht.wikipedia.org", + "hu.wikipedia.org", + "hy.wikipedia.org", + "hyw.wikipedia.org", + "hz.wikipedia.org", + "ia.wikipedia.org", + "id.wikipedia.org", + "ie.wikipedia.org", + "ig.wikipedia.org", + "ii.wikipedia.org", + "ik.wikipedia.org", + "ilo.wikipedia.org", + "inh.wikipedia.org", + "io.wikipedia.org", + "is.wikipedia.org", + "it.wikipedia.org", + "iu.wikipedia.org", + "ja.wikipedia.org", + "jam.wikipedia.org", + "jbo.wikipedia.org", + "jv.wikipedia.org", + "ka.wikipedia.org", + "kaa.wikipedia.org", + "kab.wikipedia.org", + "kbd.wikipedia.org", + "kbp.wikipedia.org", + "kcg.wikipedia.org", + "kg.wikipedia.org", + "ki.wikipedia.org", + "kj.wikipedia.org", + "kk.wikipedia.org", + "kl.wikipedia.org", + "km.wikipedia.org", + "kn.wikipedia.org", + "ko.wikipedia.org", + "koi.wikipedia.org", + "kr.wikipedia.org", + "krc.wikipedia.org", + "ks.wikipedia.org", + "ksh.wikipedia.org", + "ku.wikipedia.org", + "kv.wikipedia.org", + "kw.wikipedia.org", + "ky.wikipedia.org", + "la.wikipedia.org", + "lad.wikipedia.org", + "lb.wikipedia.org", + "lbe.wikipedia.org", + "lez.wikipedia.org", + "lfn.wikipedia.org", + "lg.wikipedia.org", + "li.wikipedia.org", + "lij.wikipedia.org", + "lld.wikipedia.org", + "lmo.wikipedia.org", + "ln.wikipedia.org", + "lo.wikipedia.org", + "lrc.wikipedia.org", + "lt.wikipedia.org", + "ltg.wikipedia.org", + "lv.wikipedia.org", + "mad.wikipedia.org", + "mai.wikipedia.org", + "map-bms.wikipedia.org", + "mdf.wikipedia.org", + "mg.wikipedia.org", + "mh.wikipedia.org", + "mhr.wikipedia.org", + "mi.wikipedia.org", + "min.wikipedia.org", + "mk.wikipedia.org", + "ml.wikipedia.org", + "mn.wikipedia.org", + "mni.wikipedia.org", + "mnw.wikipedia.org", + "mr.wikipedia.org", + "mrj.wikipedia.org", + "ms.wikipedia.org", + "mt.wikipedia.org", + "mus.wikipedia.org", + "mwl.wikipedia.org", + "my.wikipedia.org", + "myv.wikipedia.org", + "mzn.wikipedia.org", + "na.wikipedia.org", + "nah.wikipedia.org", + "nap.wikipedia.org", + "nds.wikipedia.org", + "nds-nl.wikipedia.org", + "ne.wikipedia.org", + "new.wikipedia.org", + "ng.wikipedia.org", + "nia.wikipedia.org", + "nl.wikipedia.org", + "nn.wikipedia.org", + "no.wikipedia.org", + "nov.wikipedia.org", + "nqo.wikipedia.org", + "nrm.wikipedia.org", + "nso.wikipedia.org", + "nv.wikipedia.org", + "ny.wikipedia.org", + "oc.wikipedia.org", + "olo.wikipedia.org", + "om.wikipedia.org", + "or.wikipedia.org", + "os.wikipedia.org", + "pa.wikipedia.org", + "pag.wikipedia.org", + "pam.wikipedia.org", + "pap.wikipedia.org", + "pcd.wikipedia.org", + "pcm.wikipedia.org", + "pdc.wikipedia.org", + "pfl.wikipedia.org", + "pi.wikipedia.org", + "pih.wikipedia.org", + "pl.wikipedia.org", + "pms.wikipedia.org", + "pnb.wikipedia.org", + "pnt.wikipedia.org", + "ps.wikipedia.org", + "pt.wikipedia.org", + "pwn.wikipedia.org", + "qu.wikipedia.org", + "rm.wikipedia.org", + "rmy.wikipedia.org", + "rn.wikipedia.org", + "ro.wikipedia.org", + "roa-rup.wikipedia.org", + "roa-tara.wikipedia.org", + "ru.wikipedia.org", + "rue.wikipedia.org", + "rw.wikipedia.org", + "sa.wikipedia.org", + "sah.wikipedia.org", + "sat.wikipedia.org", + "sc.wikipedia.org", + "scn.wikipedia.org", + "sco.wikipedia.org", + "sd.wikipedia.org", + "se.wikipedia.org", + "sg.wikipedia.org", + "sh.wikipedia.org", + "shi.wikipedia.org", + "shn.wikipedia.org", + "si.wikipedia.org", + "simple.wikipedia.org", + "sk.wikipedia.org", + "skr.wikipedia.org", + "sl.wikipedia.org", + "sm.wikipedia.org", + "smn.wikipedia.org", + "sn.wikipedia.org", + "so.wikipedia.org", + "sq.wikipedia.org", + "sr.wikipedia.org", + "srn.wikipedia.org", + "ss.wikipedia.org", + "st.wikipedia.org", + "stq.wikipedia.org", + "su.wikipedia.org", + "sv.wikipedia.org", + "sw.wikipedia.org", + "szl.wikipedia.org", + "szy.wikipedia.org", + "ta.wikipedia.org", + "tay.wikipedia.org", + "tcy.wikipedia.org", + "te.wikipedia.org", + "tet.wikipedia.org", + "tg.wikipedia.org", + "th.wikipedia.org", + "ti.wikipedia.org", + "tk.wikipedia.org", + "tl.wikipedia.org", + "tn.wikipedia.org", + "to.wikipedia.org", + "tpi.wikipedia.org", + "tr.wikipedia.org", + "trv.wikipedia.org", + "ts.wikipedia.org", + "tt.wikipedia.org", + "tum.wikipedia.org", + "tw.wikipedia.org", + "ty.wikipedia.org", + "tyv.wikipedia.org", + "udm.wikipedia.org", + "ug.wikipedia.org", + "uk.wikipedia.org", + "ur.wikipedia.org", + "uz.wikipedia.org", + "ve.wikipedia.org", + "vec.wikipedia.org", + "vep.wikipedia.org", + "vi.wikipedia.org", + "vls.wikipedia.org", + "vo.wikipedia.org", + "wa.wikipedia.org", + "war.wikipedia.org", + "wo.wikipedia.org", + "wuu.wikipedia.org", + "xal.wikipedia.org", + "xh.wikipedia.org", + "xmf.wikipedia.org", + "yi.wikipedia.org", + "yo.wikipedia.org", + "za.wikipedia.org", + "zea.wikipedia.org", + "zh.wikipedia.org", + "zh-classical.wikipedia.org", + "zh-min-nan.wikipedia.org", + "zh-yue.wikipedia.org", + "zu.wikipedia.org" + ], + "url": "https://en.wikipedia.org/wiki/Wikipedia:FAQ/Main#How_do_I_change_my_username%2Fdelete_my_account?", + "difficulty": "impossible", + "notes": "An account cannot be deleted because to all contributions to Wikipedia are licensed under licenses that require attribution. However, they do have some suggestions, such as [Courtesy Vanishing](https://en.wikipedia.org/wiki/Wikipedia:Courtesy_vanishing)" + }, + { + "name": "Wilds.io", + "domains": [ + "wilds.io" + ], + "url": "http://wilds.io", + "difficulty": "easy", + "notes": "Go to 'Settings and controls', then scroll to 'Delete my account'." + }, + { + "name": "Wilson epark", + "domains": [ + "myaccount.epark.com.au" + ], + "url": "http://myaccount.epark.com.au/ContactUs.aspx", + "difficulty": "hard", + "notes": "Send your request for account deletion to epark either via the form on the 'Contact Us' page, or by sending them an email.", + "email": "info@epark.com.au" + }, + { + "name": "Windscribe", + "domains": [ + "windscribe.com", + "blog.windscribe.com" + ], + "url": "https://windscribe.com/cancel/account", + "difficulty": "easy", + "notes": "Visit the linked page, enter your password, give a cancellation reason and click \"Delete Account\" at the bottom." + }, + { + "name": "Windy", + "domains": [ + "windy.com", + "account.windy.com" + ], + "url": "https://account.windy.com/profile/delete", + "difficulty": "easy", + "notes": "Go to the linked page, enter your email and password, click on 'Delete Account'." + }, + { + "name": "Wine HQ", + "domains": [ + "winehq.org", + "forum.winehq.org" + ], + "url": "https://forum.winehq.org/", + "difficulty": "hard", + "notes": "Send an E-Mail to the webmaster. If that didn't work, create a new forum thread on https://forum.winehq.org", + "email": "web-admin@winehq.org" + }, + { + "name": "Wire", + "domains": [ + "wire.com", + "support.wire.com" + ], + "url": "https://support.wire.com/hc/en-us/articles/207555795-Delete-a-Wire-Personal-account", + "difficulty": "medium", + "notes": "On Windows/MacOS : Go Settings \u2b95 Account \u2b95 Delete Account And on mobile devices Tap Profile \u2b95 Settings \u2b95 Account \u2b95 Delete Account. You will receive a SMS to confirm the deletion." + }, + { + "name": "Wise", + "domains": [ + "wise.com" + ], + "url": "https://wise.com/settings/", + "difficulty": "impossible", + "notes": "You can find the \"Close Account\" option at the bottom of the settings page, but you can log in any time after closing to reactivate it, so it is never deleted." + }, + { + "name": "WiseMapping", + "domains": [ + "wisemapping.com", + "app.wisemapping.com", + "wisemapping.atlassian.net" + ], + "url": "https://app.wisemapping.com/c/maps/", + "difficulty": "easy", + "notes": "Click on the profile icon in the top right corner and select \"Account\", then check the box next to \"Delete Account\" and click on \"Accept\"." + }, + { + "name": "Wish", + "domains": [ + "wish.com" + ], + "url": "https://www.wish.com/settings/account", + "difficulty": "medium", + "notes": "You will have to edit your 'Country' in the profile to be a country covered by e.g. GDPR (for example, France). Otherwise, you will not see the 'Permanently delete account' option when you click on 'Manage Account' (you will only see 'Deactivate account')." + }, + { + "name": "WishSimply", + "domains": [ + "WishSimply.com" + ], + "url": "https://wishsimply.com", + "difficulty": "easy", + "notes": "Enter your account password and click on 'DELETE ACCOUNT'." + }, + { + "name": "Withings", + "domains": [ + "withings.com", + "account.withings.com", + "blog.withings.com", + "healthmate.withings.com", + "support.withings.com" + ], + "url": "https://account.withings.com/account/account_delete", + "difficulty": "easy", + "notes": "You can delete your account after logging in, in one click from the user settings page. You can also choose to have your data sent to you first. The deletion process takes 7 days." + }, + { + "name": "Wix", + "domains": [ + "wix.com", + "manage.wix.com" + ], + "url": "https://manage.wix.com/account/close-account", + "difficulty": "medium", + "notes": "Make sure you're logged in and fill the form to delete the account." + }, + { + "name": "Wizards of the Coast", + "domains": [ + "wizards.com", + "support.wizards.com" + ], + "url": "https://support.wizards.com/hc/en-us/requests/new?ticket_form_id=360000108786", + "difficulty": "hard", + "notes": "Fill up the form requesting deletion. The customer support will reach back asking for tens of information to confirm deletion in each service they have. Provide what you can/remember and it eventually gets deleted." + }, + { + "name": "WolframAlpha.com", + "domains": [ + "wolframalpha.com" + ], + "url": "https://www.wolframalpha.com/fbfaqs.html", + "difficulty": "hard", + "notes": "For the immediate future, send a message to WolframAlpha, and your Wolfram ID will be deleted manually.", + "email": "info@wolframalpha.com" + }, + { + "name": "Woltlab", + "domains": [ + "woltlab.com", + "saschamoser.de", + "softcreatr.com", + "tkirch.dev" + ], + "url": "https://www.woltlab.com/account-management/", + "difficulty": "easy", + "notes": "Your account will be deleted after a 7-day grace period. Created content, like forum posts, will not be deleted. Your username will be anonymized and protected against re-registration for a year." + }, + { + "name": "Woot", + "domains": [ + "woot.com" + ], + "url": "https://account.woot.com/support/", + "difficulty": "hard", + "notes": "From the support page, choose 'I want to look at my account!' \u2b95 'I want to deactivate my account.' and you will then see a form where you can fill out your request." + }, + { + "name": "Wordfeud", + "domains": [ + "wordfeud.com" + ], + "url": "https://wordfeud.com/", + "difficulty": "easy", + "notes": "Log in to your Wordfeud account in the Wordfeud app and go to settings. Click on 'Wordfeud-account' and click 'Delete account'. A notice will appear telling you your account is planned for deletion in 7 days.", + "email": "support@wordfeud.com" + }, + { + "name": "WordPress.com", + "domains": [ + "wordpress.com" + ], + "url": "https://wordpress.com/me/account", + "difficulty": "easy", + "notes": "You can permanently close your WordPress.com account from your Account Settings screen by clicking on 'Close your account permanently'" + }, + { + "name": "WordPress.org", + "domains": [ + "wordpress.org" + ], + "url": "https://wordpress.org/about/privacy/data-erasure-request", + "difficulty": "impossible", + "notes": "You can't delete your \"wordpress.org\" account but you can anonymize your data [https://wordpress.org/support/forum-user-guide/faq/#can-you-delete-my-account](https://wordpress.org/support/forum-user-guide/faq/#can-you-delete-my-account)" + }, + { + "name": "workupload", + "domains": [ + "workupload.com" + ], + "url": "https://workupload.com/contact", + "difficulty": "hard", + "notes": "Write a short mail using their web contact form." + }, + { + "name": "World Market", + "domains": [ + "worldmarket.com" + ], + "url": "https://www.worldmarket.com/category/customer-service/world-market-rewards-faqs.do", + "difficulty": "hard", + "notes": "According to their help page, you must send an e-mail to them to request the deletion. The deletion is completed within 2-4 weeks.", + "email": "customercare@worldmarket.com" + }, + { + "name": "WorldAnvil", + "domains": [ + "worldanvil.com" + ], + "url": "https://www.worldanvil.com/dashboard/user/account", + "difficulty": "easy", + "notes": "Visit the linked page, scroll down to `Account Deletion`, enter your username, then click `Delete Account`" + }, + { + "name": "WP", + "domains": [ + "1login.wp.pl" + ], + "url": "https://1login.wp.pl/profil/dane", + "difficulty": "easy", + "notes": "Visit the linked page, click `Usu\u0144 konto`, log in again, then click `Usu\u0144 konto ze skrzynk\u0105`." + }, + { + "name": "WT.Social", + "domains": [ + "wt.social" + ], + "url": "https://wt.social/myaccount/deactivate-account", + "difficulty": "impossible", + "notes": "Only deactivation is possible" + }, + { + "name": "XDA Developers", + "domains": [ + "xda-developers.com" + ], + "url": "https://docs.google.com/forms/d/e/1FAIpQLSdEwxhZ4uYkGXjnduf--jjTaTrdheSFEW8Wb9-wp8_DYnMXkg/viewform", + "difficulty": "hard", + "notes": "Visit this 'Data Deletion Request Form' and fill in the form. Make sure to specify if you want your posts deleted." + }, + { + "name": "XenForo Italia", + "domains": [ + "xfitalia.it" + ], + "url": "https://www.xfitalia.it/community/account/account-details", + "difficulty": "easy", + "notes": "Visit the linked page and delete your account. Your account will be deleted in 3 days." + }, + { + "name": "Xing", + "domains": [ + "xing.com" + ], + "url": "https://www.xing.com/preferences/account", + "difficulty": "easy", + "notes": "Select 'Delete Profile' at the bottom of the page." + }, + { + "name": "XSplit", + "domains": [ + "xsplit.com" + ], + "url": "https://www.xsplit.com/dashboard/settings", + "difficulty": "easy", + "notes": "At the bottom of the account settings there is a delete account button. You'll just need to re-enter your password." + }, + { + "name": "XVideos", + "domains": [ + "xvideos.com", + "info.xvideos.com" + ], + "url": "https://info.xvideos.com/faq/question/73-everyone-how_can_i_delete_my_account", + "difficulty": "easy" + }, + { + "name": "Yahoo!", + "domains": [ + "yahoo.com", + "edit.yahoo.com" + ], + "url": "https://edit.yahoo.com/config/delete_user", + "difficulty": "easy" + }, + { + "name": "Yammer", + "domains": [ + "yammer.com" + ], + "url": "https://www.yammer.com/mozillians/account/display_options", + "difficulty": "easy", + "notes": "On the above URL, click the 'Delete your Yammer account' link in the top right and confirm." + }, + { + "name": "Yandex", + "domains": [ + "yandex.com", + "passport.yandex.com", + "yandex.ru", + "passport.yandex.ru", + "dzen.ru", + "ya.ru" + ], + "url": "https://passport.yandex.com/profile/delete?origin=passport_profile", + "difficulty": "easy", + "notes": "On the above URL, confirm the deletion by entering the CAPTCHA code. If backup email and/or phone added you will need to send a confirmation code and fill in the code(s). Press \"Delete account\" and confirm deletion in the dialog box." + }, + { + "name": "Yannik", + "domains": [ + "yannik.biz" + ], + "url": "https://yannik.biz/", + "difficulty": "hard", + "notes": "Contact the customer support and ask to delete your account.", + "email": "support@yannik.biz" + }, + { + "name": "Yelp", + "domains": [ + "yelp.co.uk" + ], + "url": "https://www.yelp.co.uk/contact?topic=support&subtopic=close", + "difficulty": "easy" + }, + { + "name": "YNAB (You Need A Budget)", + "domains": [ + "youneedabudget.com", + "app.youneedabudget.com" + ], + "url": "https://app.youneedabudget.com/users/delete", + "difficulty": "easy" + }, + { + "name": "You.com", + "domains": [ + "you.com", + "about.you.com" + ], + "url": "https://about.you.com/hc/faq/how-do-i-delete-my-profile/", + "difficulty": "hard", + "email": "legal@you.com" + }, + { + "name": "Yousician", + "domains": [ + "yousician.com", + "account.yousician.com" + ], + "url": "https://account.yousician.com/", + "difficulty": "easy", + "notes": "Go to your account, scroll down and click \"Delete account\" in the \"Advanced Settings\" section. You will be prompted to enter your password." + }, + { + "name": "YouTube", + "domains": [ + "youtube.com", + "music.youtube.com", + "studio.youtube.com" + ], + "url": "https://myaccount.google.com/deleteservices", + "difficulty": "medium", + "notes": "Click the trash can next to YouTube and confirm the verification email. You can request a copy of your data, before you delete it.\nIf you want to delete your entire google account, use the instructions for [Google](https://justdeleteme.xyz/#google)." + }, + { + "name": "YoYo Games", + "domains": [ + "yoyogames.com", + "help.yoyogames.com" + ], + "url": "https://help.yoyogames.com/hc/en-us/articles/360025895752-How-can-I-delete-my-data-", + "difficulty": "hard", + "email": "datacontroller@yoyogames.com" + }, + { + "name": "Yummly", + "domains": [ + "yummly.com" + ], + "url": "https://www.yummly.com/settings", + "difficulty": "easy", + "notes": "Select \"To delete your account, click here\" at the bottom of the page." + }, + { + "name": "YUR", + "domains": [ + "yur.fit" + ], + "url": "https://docs.google.com/forms/d/e/1FAIpQLSca2oePqdnrJWKh4U2LvnwSBZCi5FRTCDdoi0pjU21u9kBFLQ/viewform", + "difficulty": "hard", + "notes": "Requests will be processed in accordance with local laws. Request account removal by sending an email to them or filling the form (requires Google account). Include your full name, email address associated with your account and a detailed description of your data request.", + "email": "hi@yur.fit" + }, + { + "name": "Zalando", + "domains": [ + "zalando.be", + "zalando.fr", + "zalando.co.uk", + "zalando.at", + "zalando.hr", + "zalando.cz", + "zalando.dk", + "zalando.ee", + "zalando.de", + "zalando.ie", + "zalando.it", + "zalando.lv", + "zalando.lt", + "zalando.lu", + "zalando.nl", + "zalando.no", + "zalando.pl", + "zalando.sk", + "zalando.si", + "zalando.es", + "zalando.se", + "zalando.ch" + ], + "url": "https://www.zalando.co.uk/myaccount/privacy/", + "difficulty": "easy", + "notes": "Click on the link, log in and then click on the \"Delete your account\" tab. Finally, click on \"Request account and data deletion\"." + }, + { + "name": "Zamnesia", + "domains": [ + "zamnesia.nl" + ], + "url": "https://www.zamnesia.com/contact-us", + "difficulty": "hard", + "notes": "If you want to have your account deleted you have to send Zamnesia an email and they will delete your account according to the GDPR rules.", + "email": "support@zamnesia.com" + }, + { + "name": "Zanichelli", + "domains": [ + "zanichelli.it", + "my.zanichelli.it", + "assistenza.zanichelli.it", + "zte.zanichelli.it", + "insegnareindigitale.zanichelli.it", + "educazionecivica.zanichelli.it", + "classivirtuali.zanichelli.it", + "creaverifiche.zanichelli.it", + "online.scuola.zanichelli.it", + "collezioni.scuola.zanichelli.it", + "zte-universita.zanichelli.it", + "collezioni-universita.zanichelli.it", + "zte.unitutor.zanichelli.it", + "dizionari.zanichelli.it", + "dizionaripiu.zanichelli.it" + ], + "url": "https://my.zanichelli.it/registrazione/profilo", + "difficulty": "easy", + "notes": "Go to your profile, click on the button to delete the account and confirm. Your account will be deleted after 30 days, if you log in during this period, you cancel the deletion of the account." + }, + { + "name": "Zapier", + "domains": [ + "zapier.com" + ], + "url": "https://zapier.com/app/settings/delete", + "difficulty": "easy", + "notes": "Go to the URL, confirm your email. You'll be redirected to the login page. Confirm your email again and enter \"DELETE\" (all caps) In the \"Confirm you want to delete your account\" field." + }, + { + "name": "Zappos", + "domains": [ + "zappos.com" + ], + "url": "https://www.zappos.com/c/contact-us", + "difficulty": "hard", + "notes": "Contact chat support. You may be asked to verify your identity with your last name & billing address." + }, + { + "name": "Zattoo", + "domains": [ + "zattoo.com", + "support.zattoo.com" + ], + "url": "https://zattoo.com/account/delete", + "difficulty": "easy" + }, + { + "name": "Zaxby's", + "domains": [ + "zaxbys.com" + ], + "url": "https://www.zaxbys.com/", + "difficulty": "hard", + "notes": "Call 1-866-892-9297 and press 2 to be connected with a reward account services agent and ask to have your account deleted. Your account will be deleted after 24-48 hours." + }, + { + "name": "Zazzle", + "domains": [ + "zazzle.com" + ], + "url": "https://www.zazzle.com/about/ask", + "difficulty": "hard", + "notes": "To terminate your account, simply send a message via their web contact form to Customer Care that contains your username and the email address associated with your account. Once you've done so, a member of our Support Team will disable your account and remove any products, both public and private, and disable your store (if applicable). The account will be deleted fully when our system processes the next batch of account removals." + }, + { + "name": "Zeet", + "domains": [ + "zeet.co" + ], + "url": "https://zeet.co/profile", + "difficulty": "easy", + "notes": "Click on the \"Delete Account\" button." + }, + { + "name": "Zeit Online", + "domains": [ + "zeit.de" + ], + "url": "https://zeit.de", + "difficulty": "hard", + "notes": "Send an Email with the Username", + "email": "community@zeit.de" + }, + { + "name": "Zenamu", + "domains": [ + "zenamu.com", + "app.zenamu.com" + ], + "url": "https://zenamu.com/contact/", + "difficulty": "hard", + "notes": "To request account deletion, you must email them", + "email": "support@zenamu.com" + }, + { + "name": "Zendesk", + "domains": [ + "zendesk.co.jp", + "zendesk.co.uk", + "zendesk.com", + "zendesk.com.br", + "zendesk.com.mx", + "zendesk.de", + "zendesk.es", + "zendesk.fr", + "zendesk.hk", + "zendesk.kr", + "zendesk.nl", + "zendesk.tw", + "support.zendesk.com" + ], + "url": "https://support.zendesk.com/hc/en-us/articles/223774027-Canceling-your-Support-account", + "difficulty": "easy", + "notes": "Go to Admin\u2b95Settings\u2b95Subscription and click 'Yes, cancel my account'." + }, + { + "name": "Zenkit", + "domains": [ + "zenkit.com" + ], + "url": "https://zenkit.com/profile", + "difficulty": "easy", + "notes": "Login to your account, go to profile, scroll down and click 'Delete Account'. Confirm by entering 'DELETEMYACCOUNT' and click 'Delete My Account'." + }, + { + "name": "Zeplin", + "domains": [ + "zeplin.io", + "app.zeplin.io" + ], + "url": "https://app.zeplin.io/profile/account", + "difficulty": "medium", + "notes": "You need to transfer or delete your projects and cancel your subscription (if you have one) before deleting you account. Unlink your google account if you used it to login. Go to \"Profile\" \u2b95 \"account\" \u2b95 click \"Want to remove your account completely?\" \u2b95 click \"DELETE ACCOUNT\" and provide your password." + }, + { + "name": "ZeroSSL", + "domains": [ + "zerossl.com", + "app.zerossl.com" + ], + "url": "https://app.zerossl.com/account", + "difficulty": "easy", + "notes": "Scroll to the bottom of the linked page and click 'Delete Account'." + }, + { + "name": "Zhihu", + "domains": [ + "zhihu.com" + ], + "url": "https://www.zhihu.com/unregister", + "difficulty": "easy" + }, + { + "name": "Zoho", + "domains": [ + "zoho.com", + "accounts.zoho.com" + ], + "url": "https://accounts.zoho.com/u/h#setting/closeaccount", + "difficulty": "easy" + }, + { + "name": "ZombieLink", + "domains": [ + "zombiesrungame.com", + "blog.zombiesrungame.com" + ], + "url": "https://zombiesrungame.com/zombielink/account", + "difficulty": "easy", + "notes": "Scroll down to 'Delete and Reset Account' and click the red link: 'delete your account'" + }, + { + "name": "Zoom", + "domains": [ + "zoom.us" + ], + "url": "https://zoom.us/account", + "difficulty": "easy", + "notes": "Login to your account, go to 'Account Profile', click 'Terminate my account'. Enter password in dialog box and confirm." + }, + { + "name": "Zotero", + "domains": [ + "zotero.org" + ], + "url": "https://www.zotero.org/settings/account", + "difficulty": "easy", + "notes": "Login to your account, go to 'Settings', click on 'Permanently Delete Account' at the bottom of the page." + }, + { + "name": "Zulip", + "domains": [ + "zulipchat.com" + ], + "url": "https://zulipchat.com/help/deactivate-your-account", + "difficulty": "easy", + "notes": "Navigate to Settings \u2b95 Your Account \u2b95 Deactivate Account" + }, + { + "name": "Zynga", + "domains": [ + "zynga.com", + "zyngagames.com", + "privacy.zynga.com" + ], + "url": "https://privacy.zynga.com/portal/#/", + "difficulty": "medium", + "notes": "Select the game you want to delete your account from (if you want to delete the entire account choose zyngagames.com). Log in. Click on the FAQ tab on the top navigation bar. Then click \u201cGo here to request account deletion\u201d. Click the box indicating your understanding and then click Continue. To confirm deletion, click the box, select a reason, and then click Delete My Account. Your account deletion request is now pending. Expect the deletion request to be completed within 30 days of the request." + }, + { + "name": "\u00c7i\u00e7ekSepeti", + "domains": [ + "ciceksepeti.com" + ], + "url": "https://www.ciceksepeti.com/gizlilik-sozlesmesi", + "difficulty": "hard", + "notes": "In order to delete your account you have to email them and fill out their \"KVKK\" form and send them an email. [The form is only in Turkish](https://cdn03.ciceksepeti.com/images/Ciceksepeti_KVKK_Basvuru_Formu_06022019.docx).", + "email": "kvkk@ciceksepeti.com", + "email_subject": "Hesap Silme Talebi", + "email_body": "Hesab\u0131m\u0131n silinmesini talep ediyorum. Ekte KVKK formum bulunmaktad\u0131r." + }, + { + "name": "\u041c\u0456\u0439 \u041a\u043b\u0430\u0441", + "domains": [ + "miyklas.com.ua" + ], + "url": "https://www.miyklas.com.ua/Account/DeleteProfile", + "difficulty": "easy" + } +] \ No newline at end of file diff --git a/common/src/commonMain/resources/MR/files/justgetmydata.json b/common/src/commonMain/resources/MR/files/justgetmydata.json new file mode 100644 index 00000000..9c4301f3 --- /dev/null +++ b/common/src/commonMain/resources/MR/files/justgetmydata.json @@ -0,0 +1,783 @@ +[ + { + "name": "1688", + "domains": [], + "url": "https://1688.com", + "difficulty": "hard", + "notes": "Depending on your area you must follow the instructions shown in https://www.alibabagroup.com/en/contact/law_e_commerce?spm=a271m.8038972.0.0.5a916d82MwfIzm'" + }, + { + "name": "2K Games", + "domains": [], + "url": "https://support.2k.com/hc/en-us/articles/360022982514", + "difficulty": "hard", + "notes": "Go to the linked website and submit a request to download your account data." + }, + { + "name": "Adobe", + "domains": [], + "url": "https://www.adobe.com/privacy/privacy-contact.html#form", + "difficulty": "hard", + "notes": "Go to the URL provided above and submit a request." + }, + { + "name": "Akinator", + "domains": [], + "url": "https://en.akinator.com/content/13/privacy-policy", + "difficulty": "hard", + "notes": "According to privacy policy (item 8), you have to send an e-mail to them requesting the data.", + "email": "privacypolicy@elokence.com" + }, + { + "name": "Algor Education", + "domains": [], + "url": "https://en.algoreducation.com/contact-us", + "difficulty": "hard", + "notes": "Contact the customer support and request your data.", + "email": "support@algoreducation.com" + }, + { + "name": "Alibaba", + "domains": [], + "url": "https://alibaba.com", + "difficulty": "hard", + "notes": "Depending on your area you must follow the instructions shown in https://www.alibabagroup.com/en/contact/law_e_commerce?spm=a271m.8038972.0.0.5a916d82MwfIzm'" + }, + { + "name": "Aliexpress", + "domains": [], + "url": "https://www.alibabagroup.com/en/contact/law_e_commerce?spm=a271m.8038972.0.0.5a916d82MwfIzm", + "difficulty": "hard", + "notes": "Depending on you area you must follow the instructions shown in 'https://www.alibabagroup.com/en/contact/law_e_commerce?spm=a271m.8038972.0.0.5a916d82MwfIzm'" + }, + { + "name": "Amazon", + "domains": [], + "url": "https://www.amazon.com/gp/help/customer/display/", + "difficulty": "hard", + "notes": "Go to https://www.amazon.com/gp/help/customer/display and down, in browse help topic, go to \"Security & Privacy\" and \"How Do I Request My Data?\". There click \"Request My Data\", choose whatever you need/want and click \"Send Request\". An e-mail will be send to your Amazon linked e-mail to confirm the Data Request. Just click confirm and within a few weeks your data will be ready for download. However here comes the hard part, you'll be presented with 100s of tiny files, with no option to download all at once." + }, + { + "name": "Apple", + "domains": [], + "url": "https://privacy.apple.com", + "difficulty": "easy", + "notes": "Go to the url provided above and login with your Apple ID. Click on 'Get a copy of my data' and categories will be displayed to select the type of data to download. After selecting, information will be asked to confirm that you are the account's owner. You will recibe a notification when the data its available for download and you will have 2 weeks to do it." + }, + { + "name": "The Atlantic", + "domains": [], + "url": "https://support.theatlantic.com/hc/requests/new", + "difficulty": "limited", + "notes": "Depending on where you live, you either have to select \"Submit a CPRA or VCDPA Data request\" or \"Submit an EEA Data Request\"." + }, + { + "name": "Badoo", + "domains": [], + "url": "https://badoo.com/feedback", + "difficulty": "hard", + "notes": "Go to the url provided above and submit a request, picking 'General question' as subject, or send an email to [DPOcorp.badoo.com](mailto:DPO@corp.badoo.com)." + }, + { + "name": "Battle.net / Blizzard", + "domains": [], + "url": "https://www.battle.net/support/help/product/services/1327", + "difficulty": "medium", + "notes": "Select the information you want to download. You will need to enter an email verification code and a 2FA code if enabled." + }, + { + "name": "BBVA", + "domains": [], + "url": "https://web.bbva.es/index.html?v=12.3.22#areapersonal/menu/privacidadydatos", + "difficulty": "easy", + "notes": "On 'My profile' section, click on 'Security and privacy'. Go to 'Privacy and Data', click on 'Get Portability' and wait until it's done." + }, + { + "name": "Best Buy", + "domains": [], + "url": "https://www.bestbuy.com/sentry/confirm/residency?context=ca&type=access", + "difficulty": "hard", + "notes": "Make sure not to skip signin to make the process faster." + }, + { + "name": "Betnacional", + "domains": [], + "url": "https://assets.bet6.com.br/sistemans/skins/betnacional/doc/5eef829d8f.pdf", + "difficulty": "hard", + "notes": "According to privacy policy (item 8), you have to send an e-mail to them requesting the data.", + "email": "contato@betnacional.com" + }, + { + "name": "Board Game Geek", + "domains": [], + "url": "https://boardgamegeek.com/privacy#toc33", + "difficulty": "hard", + "notes": "You have to contact with service support" + }, + { + "name": "Booking", + "domains": [], + "url": "https://www.booking.com/content/dsar.en-gb.html", + "difficulty": "medium", + "notes": "Go to the form provided in the url above and fill it selecting the option 'Right of access to personal data'." + }, + { + "name": "Burger King", + "domains": [], + "url": "https://privacyportal-eu-cdn.onetrust.com/dsarwebform/7ae425dd-1c76-46b0-a1b4-2422a364fae3/draft/1d4481aa-204a-4cb5-a40a-82e4369d16b2.html", + "difficulty": "medium", + "notes": "U.S. and Canada residents can fill out the linked web form or email [privacy@rbi.com](mailto:privacy@rbi.com)" + }, + { + "name": "Chick-fil-A", + "domains": [], + "url": "https://privacyportal.onetrust.com/webform/63dc78c7-5612-4181-beae-47dead0569ee/01252c81-82df-4db5-9cb8-bf23a62a9a55", + "difficulty": "medium", + "notes": "In the mobile app, go to Account > Communications & privacy > Privacy Rights and fill out the provided [privacy web form](https://privacyportal.onetrust.com/webform/63dc78c7-5612-4181-beae-47dead0569ee/01252c81-82df-4db5-9cb8-bf23a62a9a55). U.S. residents can also send an email to [privacy@chick-fil-a.com](mailto:privacy@chick-fil-a.com) or call 1-866-232-2040; Canadian residents must email [privacy.canada@chick-fil-a.com](mailto:privacy.canada@chick-fil-a.com)." + }, + { + "name": "Cloudflare", + "domains": [], + "url": "https://www.cloudflare.com/privacypolicy/", + "difficulty": "hard", + "notes": "Cloudflare only accepts access requests via email.", + "email": "SAR@cloudflare.com" + }, + { + "name": "Coinbase", + "domains": [], + "url": "https://help.coinbase.com/en/pro/privacy-and-security/data-privacy/gdpr-how-to-access-information.html", + "difficulty": "easy", + "notes": "You can log into your Coinbase account and request your data in the Privacy section. You have a full guide in the url above." + }, + { + "name": "Craigslist", + "domains": [], + "url": "https://www.craigslist.org/about/privacy.policy", + "difficulty": "hard", + "notes": "Send an email requesting a copy of your data to [privacy@craigslist.org](mailto:privacy@craigslist.org)." + }, + { + "name": "Discord", + "domains": [], + "url": "https://discord.com", + "difficulty": "easy", + "notes": "You have to log into your Discord account, go to 'Settings > Privacy and security' and click on 'Request all my data'." + }, + { + "name": "Duolingo", + "domains": [], + "url": "https://drive-thru.duolingo.com", + "difficulty": "medium", + "notes": "Must log in to Duolingo before accessing this site (will not redirect)." + }, + { + "name": "eBay", + "domains": [], + "url": "https://www.sarweb.ebay.com/sar", + "difficulty": "easy", + "notes": "Go to your account settings, then click on \"Request your eBay data\", follow the simple steps and in 7 days you should receive your data back" + }, + { + "name": "Edizioni Simone", + "domains": [], + "url": "https://edizioni.simone.it/informativa-sulla-privacy", + "difficulty": "hard", + "notes": "Contact the customer support via email and request a copy of your data.", + "email": "privacy@simone.it" + }, + { + "name": "Electroneum", + "domains": [], + "url": "https://support.electroneum.com/hc/en-gb/requests/new", + "difficulty": "hard", + "notes": "Contact the customer support using the form or via email and request your data.", + "email": "support@electroneum.com" + }, + { + "name": "Electronic Arts", + "domains": [], + "url": "https://myaccount.ea.com/cp-ui/downloaddata/index", + "difficulty": "easy", + "notes": "Go to your account settings, click on 'Your EA data', then hit the request button, and you should be able to download your data in a couple of hours" + }, + { + "name": "Engadget", + "domains": [], + "url": "https://engadget.mydashboard.oath.com/#section-manage", + "difficulty": "medium", + "notes": "Scroll down to the bottom of page, and you should see an option to donwload your data. From there, you can select what types of data you want to download, and then request to download your data. It can take up to 30 days for Engadget to prepare your data. You can download in your account data in your account settings." + }, + { + "name": "Epic Games", + "domains": [], + "url": "https://www.epicgames.com/account/personal", + "difficulty": "easy", + "notes": "Go to your account settings, then click on 'Download Account Information' button to receive your data" + }, + { + "name": "Facebook", + "domains": [], + "url": "https://www.facebook.com/help/1701730696756992", + "difficulty": "easy", + "notes": "Go to the url provided above and follow the instructions. Logging into your account, you can access a summary of your data or download a copy. The data are categorized by type to help the search and you can download it in JSON or HTML formats." + }, + { + "name": "Fandom", + "domains": [], + "url": "https://community.fandom.com/wiki/Special:DownloadYourData", + "difficulty": "easy" + }, + { + "name": "FedEx", + "domains": [], + "url": "https://privacyportal.onetrust.com/webform/8a471a7b-6a52-49d0-bcb0-fa8bdb61598f/c121cce6-6cfb-4c3d-9b61-334f56a01b5f", + "difficulty": "hard", + "notes": "You will be asked to upload photo id after the initial form submission." + }, + { + "name": "Fitbit", + "domains": [], + "url": "https://www.fitbit.com/settings/data/export", + "difficulty": "medium", + "notes": "Click the link sent to your email if you requested a full archive." + }, + { + "name": "Freelancer", + "domains": [], + "url": "https://www.freelancer.com/about/privacy?w=f&ngsw-bypass=", + "difficulty": "hard", + "notes": "Send an email requesting a copy of your data to privacy-officer@freelancer.com.", + "email": "privacy-officer@freelancer.com" + }, + { + "name": "GearBest", + "domains": [], + "url": "https://www.gearbest.com/", + "difficulty": "hard", + "notes": "You may send us an e-mail to support@gearbest.com to exercise your rights. We will respond to your request in a reasonable timeframe. We will take all reasonable steps to ensure that your personal data is correct and up to date." + }, + { + "name": "Gettr", + "domains": [], + "url": "https://gettr.com/privacy", + "difficulty": "hard", + "notes": "According with item 11.IV, you have to send an e-mail to [privacyrights@gettr.com](mailto:privacyrights@gettr.com). And even sending the e-mail, they may refuse the request and not send the data." + }, + { + "name": "GitHub", + "domains": [], + "url": "https://github.com/settings/admin", + "difficulty": "medium", + "notes": "In the section \"Export account data\" select \"Start report\". Once done, wait for an email to arrive." + }, + { + "name": "Gmail", + "domains": [], + "url": "https://takeout.google.com/", + "difficulty": "easy", + "notes": "Since Gmail is a service by Google, please refer to the instructions for [Google](./#google)." + }, + { + "name": "GOG", + "domains": [], + "url": "https://support.gog.com/hc/en-us/requests/new?form=other&product=gog", + "difficulty": "hard", + "notes": "Go to the url provided above and submit a request or send an email to [privacy@gog.com](mailto:privacy@gog.com)." + }, + { + "name": "Google", + "domains": [], + "url": "https://takeout.google.com/", + "difficulty": "easy", + "notes": "Go to [Google Takeout](https://takeout.google.com/) while logged in to a Google Account and select the data from every Google Service you need/want and click \"Next Step\". Then you can choose between export now or once every 2 months for 1 year, the file type and size. Click \"Create Export\" and wait until the process is finished. Then, just download your data." + }, + { + "name": "Huawei", + "domains": [], + "url": "https://consumer.huawei.com/en/support/content/en-us00746223/", + "difficulty": "medium", + "notes": "Log in to your HUAWEI ID and then click Privacy Centre > Request Your Data. When you request a copy of your data, Huawei will prepare the data you have requested. After the data is ready, you can download it to your device and will be available for 21 days. If you need to download the data after the expiry date, you need to submit a new request." + }, + { + "name": "ING", + "domains": [], + "url": "https://www.ing.com/Privacy-Statement.htm", + "difficulty": "hard", + "notes": "Go to the url provided above and in section 9, 'Contact and questions', you must find the email address associated with your country. You will have to send an email to the corresponding address, stating that you want to obtain a copy of your personal data. You must provide your name, address and ID." + }, + { + "name": "Instagram", + "domains": [], + "url": "https://www.instagram.com/download/request/", + "difficulty": "medium", + "notes": "Select 'Obtain the data' and fill in your email and password. Once done, wait for a message to arrive in the mail. WARNING: you can only do a data request once every 48 hours." + }, + { + "name": "JetBrains", + "domains": [], + "url": "https://account.jetbrains.com/profile-details/JetBrainsPersonalData.xlsx", + "difficulty": "easy", + "notes": "Requires Microsoft Excel or equivalent to open." + }, + { + "name": "Kwai", + "domains": [], + "url": "https://www.kwai.com/legal?type=1", + "difficulty": "hard", + "notes": "According to item 12, you have to send an e-mail to [privacy@kwai.com](mailto:privacy@kwai.com), with your Kwai ID user to request your data." + }, + { + "name": "Linkedin", + "domains": [], + "url": "https://www.linkedin.com/", + "difficulty": "easy", + "notes": "1.-Click the Me icon at the top of your LinkedIn homepage. 2.-Select Settings & Privacy from the dropdown. 3.-Click the Data Privacy on the left rail. 4.-Under the How LinkedIn uses your data section, click Get a copy of your data. 5.-Select the data that you\u2019re looking for and Request archive." + }, + { + "name": "Linode", + "domains": [], + "url": "https://www.linode.com/legal-dpr/", + "difficulty": "hard", + "notes": "Check the boxes under the \"Personal Data Disclosure\" section" + }, + { + "name": "Livelo", + "domains": [], + "url": "https://www.livelo.com.br/profile?occsite=points&tab=tab_label_1", + "difficulty": "easy" + }, + { + "name": "Lolja", + "domains": [], + "url": "https://www.lolja.com.br/privacidade/", + "difficulty": "hard", + "notes": "Send an email to [sac@lolja.com.br](mailto:sac@lolja.com.br) with all relevant information (name, email address, etc)." + }, + { + "name": "Lyft", + "domains": [], + "url": "https://www.lyft.com/privacy/data", + "difficulty": "easy", + "notes": "Go to provided URL -> Log in (if prompted) -> Click the 'Start' button under 'Download Data'." + }, + { + "name": "Mailfence", + "domains": [], + "url": "https://kb.mailfence.com/kb/how-to-export-data-from-mailfence-account/", + "difficulty": "medium", + "notes": "Log in to your account -> Go to 'Settings'-> 'Account' -> 'Back-up'." + }, + { + "name": "Microsoft", + "domains": [], + "url": "https://microsoft.com/", + "difficulty": "hard", + "notes": "Not all personal data can be accessed using the tools above. If you want to access all the data it is needed to contact them using 'How to contact with us' or using their web form.." + }, + { + "name": "Minecraft Tools", + "domains": [], + "url": "https://minecraft.tools/en/contact.php", + "difficulty": "impossible", + "notes": "The only way to contact them is by email, but no one responds.", + "email": "contact@minecraft.tools" + }, + { + "name": "Modrinth", + "domains": [], + "url": "https://modrinth.com/legal/privacy", + "difficulty": "hard", + "notes": "Send an email requesting a copy of your data.", + "email": "gdpr@modrinth.com" + }, + { + "name": "Mozilla", + "domains": [], + "url": "https://www.mozilla.org/privacy/#contact", + "difficulty": "medium", + "notes": "Go to the url provided abobe and click on 'See here for Data Subject Access Requests' and fill a form or send an email to [compliance@mozilla.com](mailto:compliance@mozilla.com)." + }, + { + "name": "MSI", + "domains": [], + "url": "https://es.msi.com/", + "difficulty": "hard", + "notes": "To exercise the right to request access to, or copies of, your Relevant Personal Data, together with information regarding the nature, Processing and disclosure of those Relevant Personal Data, or others of your rights, or to ask a question about these rights or any other provision of Privacy Policy, or about our Processing of your Personal Data, please use the contact [privacy-eu@msi.com](mailto:privacy-eu@msi.com)." + }, + { + "name": "My Lands", + "domains": [], + "url": "https://uk.mlgame.org/", + "difficulty": "hard", + "notes": "Contact the customer support via email and ask to access your data. You should use the email of the country where you are registered: it's in the contacts, at the bottom of the website.", + "email": "support_uk@elyland.net" + }, + { + "name": "Netflix", + "domains": [], + "url": "https://www.netflix.com/", + "difficulty": "medium", + "notes": "Go to https://www.netflix.com/account/getmyinfo and follow the instructions." + }, + { + "name": "Nintendo", + "domains": [], + "url": "https://privacyportal-cdn.onetrust.com/dsarwebform/50b45312-ab08-436b-adc7-79156d8394f7/e0b5b569-7fb1-43c9-befc-0e789ed712fb.html", + "difficulty": "hard", + "notes": "Select information request under request type. Request can also be completed via telephone (+1 855-822-9548)." + }, + { + "name": "Norton", + "domains": [], + "url": "https://privacyportal.onetrust.com/webform/25b84167-55d3-4099-84e2-c9e08ec67d54/4d9f34ca-cc1d-4578-9590-35834c92f17b", + "difficulty": "easy", + "notes": "Click the link above and fill the form to confirm the request." + }, + { + "name": "OpenAI", + "domains": [], + "url": "https://openai.com/policies/privacy-policy", + "difficulty": "easy", + "notes": "You can send an email to [dsar@openai.com](mailto:dsar@openai.com) or just click in Settings > Data Controls > Export Data. The link sent by e-mail will expire within 24 hours." + }, + { + "name": "PAGBET", + "domains": [], + "url": "https://assets.bet6.com.br/sistemans/skins/pagbet/doc/ba98aa02a1.pdf", + "difficulty": "hard", + "notes": "According to privacy policy (item 8), you have to send an e-mail to them requesting the data.", + "email": "contato@pagbet.com" + }, + { + "name": "Patreon", + "domains": [], + "url": "https://privacy.patreon.com/?action=ACCESS&modal=take-control", + "difficulty": "easy", + "notes": "Click the link and confirm the request. The email with the data is usually sent within a few minutes." + }, + { + "name": "Paypal Account", + "domains": [], + "url": "https://www.paypal.com/myaccount/privacy/data/dar", + "difficulty": "easy", + "notes": "Download all your personal data (transaction history excluded). Click on the 'send request' button, you will be notified via email once your data is ready." + }, + { + "name": "Paypal Transactions", + "domains": [], + "url": "https://www.paypal.com/reports/dlog", + "difficulty": "medium", + "notes": "This page allows you to download all the transactions of your account. Select 'all transactions' in the 'transaction type' dropdown, insert the date interval you want (note: you cannot go back more than ~6 years). Then click 'create report'. You will receive an email once your report is ready. " + }, + { + "name": "PcComponentes", + "domains": [], + "url": "https://www.pccomponentes.com/", + "difficulty": "hard", + "notes": "You will have to send a written request with your passport, or another identification document, to Av. Europa Parcela 2-3, Pol. Ind. Las Salinas 30840 Alhama de Murcia. You can also request the data throught a e-mail to [lopd@pccomponentes.com](mailto:lopd@pccomponentes.com)." + }, + { + "name": "Popeyes", + "domains": [], + "url": "https://privacyportal-eu-cdn.onetrust.com/dsarwebform/7ae425dd-1c76-46b0-a1b4-2422a364fae3/draft/1d4481aa-204a-4cb5-a40a-82e4369d16b2.html", + "difficulty": "medium", + "notes": "U.S. and Canada residents can fill out the linked web form or email [privacy@rbi.com](mailto:privacy@rbi.com)" + }, + { + "name": "PornHub", + "domains": [], + "url": "https://pornhub.com/information/privacy", + "difficulty": "medium", + "notes": "Go to the url provided above and click on the button 'Request a copy of my personal data', at the bottom of the page. They will send you an email to confirm the email address where they will send your data and another to verify your username and password. You will receive your data in about 24 hours." + }, + { + "name": "Reddit", + "domains": [], + "url": "https://www.reddit.com/settings/data-request", + "difficulty": "easy", + "notes": "Click on getting the data from a range of time or all. Then, wait for the private message in reddit, click in \"Download here\" and we are done. WARNING: you can only do a data request once every 30 days. You must use the [ticket form](https://www.reddithelp.com/hc/requests/new?ticket_form_id=360001370251) if you do not have access to your account." + }, + { + "name": "Riot Games", + "domains": [], + "url": "https://support-leagueoflegends.riotgames.com/hc/en-us/requests/new", + "difficulty": "hard", + "notes": "You would have to make a ticket requesting your data, which will show data recorded on League of Legends, Valorant and Runeterra accounts. After filing a ticket, you have to wait 30 days for an email to be sent to you containing a zipped file, which contains all your data." + }, + { + "name": "Roblox", + "domains": [], + "url": "https://www.roblox.com/support", + "difficulty": "limited", + "notes": "Select \"Right of Access\" under \"Data Privacy Requests\". Photo ID is required as proof of residency." + }, + { + "name": "Roku", + "domains": [], + "url": "https://privacy.roku.com/contact", + "difficulty": "hard", + "notes": "Select \"Data access request\" for the topic." + }, + { + "name": "Samsung", + "domains": [], + "url": "https://privacy.samsung.com/mydata/downloads/request", + "difficulty": "medium", + "notes": "Select the services you want to retrieve your data for, or click the first one and click the \"All\" button at the bottom of the screen." + }, + { + "name": "Snapchat", + "domains": [], + "url": "https://support.snapchat.com/en-US/a/download-my-data", + "difficulty": "easy", + "notes": "Log into your account on accounts.snapchat.com and click on \"My Data\". Once you submit your request, Snapchat will send you a download link via email to the verified email address associated with your account." + }, + { + "name": "SpaceHey", + "domains": [], + "url": "https://spacehey.com/settings", + "difficulty": "easy", + "notes": "Go to the URL provided above and click on 'Export your Account Data'." + }, + { + "name": "Spotify", + "domains": [], + "url": "https://www.spotify.com/account/privacy/", + "difficulty": "medium", + "notes": "Log into your Spotify account, go to 'Profile > Account > Privacy settings' and follow the steps at the bottom of the page." + }, + { + "name": "Stack Exchange (Stack Overflow)", + "domains": [], + "url": "https://stackoverflow.com/legal/gdpr/request", + "difficulty": "hard", + "notes": "You might need to contact support to get your data deleted from all Stack Exchange network websites. Your posts will be anonymized, not deleted." + }, + { + "name": "Starbucks", + "domains": [], + "url": "https://www.starbucks.com/terms/privacy-policy/", + "difficulty": "hard", + "notes": "U.S. residents should use this form, and Canadian residents should use this form. All others must send an email.", + "email": "privacy@starbucks.com" + }, + { + "name": "Steam", + "domains": [], + "url": "https://help.steampowered.com/en/accountdata", + "difficulty": "medium", + "notes": "In most cases, you can access, manage, or delete Personal Data in the Privacy Dashboard, but you may also contact Valve with questions or requests by summiting a support ticket." + }, + { + "name": "Student Beans", + "domains": [], + "url": "https://accounts.studentbeans.com/uk/info/privacy", + "difficulty": "hard", + "notes": "They require two different forms of identification (acceptable documents are Driver's License, Passport, and Student ID card) to process access requests, which are only accepted via email.", + "email": "infosec@studentbeans.com", + "email_body": "Please send me a copy of my personal data." + }, + { + "name": "T-Mobile", + "domains": [], + "url": "https://privacyportal-t-mobile.my.onetrust.com/webform/d4a925f0-4ebf-40ba-817b-bccc309e602f/7831d667-1ebc-4b1e-a941-e545cb0d0523", + "difficulty": "hard", + "notes": "The email and phone number you use on the form must be associated with your T-Mobile account. Proof of identity (Driver's License or Passport, New Hampshire residents cannot submit a Driver's License as proof) is required." + }, + { + "name": "T-shirt personalis\u00e9", + "domains": [], + "url": "https://vive-lamode.com/collections/t-shirt-personnalise", + "difficulty": "easy" + }, + { + "name": "Taobao", + "domains": [], + "url": "https://taobao.com", + "difficulty": "hard", + "notes": "Depending on your area you must follow the instructions shown in https://www.alibabagroup.com/en/contact/law_e_commerce?spm=a271m.8038972.0.0.5a916d82MwfIzm'" + }, + { + "name": "Telegram", + "domains": [], + "url": "https://t.me/gdprbot", + "difficulty": "easy", + "notes": "The bots [@gdprbot](https://t.me/gdprbot) and [@lgpdbot](https://t.me/lgpdbot) in Telegram show us how to obtain our data in the app. The use of Telegram Desktop is needed in order to get the data. Once there, go to options, settings, advanced, export Telegram data, choose everything you want/need and export it in HTML or JSON format." + }, + { + "name": "Tiktok", + "domains": [], + "url": "https://www.tiktok.com/legal/report/privacy", + "difficulty": "medium", + "notes": "Go to the form provided in the url above and fill it selecting the option 'Request information or an action regarding the account data'." + }, + { + "name": "Tim Hortons", + "domains": [], + "url": "https://privacyportal-eu-cdn.onetrust.com/dsarwebform/7ae425dd-1c76-46b0-a1b4-2422a364fae3/draft/1d4481aa-204a-4cb5-a40a-82e4369d16b2.html", + "difficulty": "medium", + "notes": "U.S. and Canada residents can fill out the linked web form or email [privacy@rbi.com](mailto:privacy@rbi.com)" + }, + { + "name": "Tinder", + "domains": [], + "url": "https://account.gotinder.com/data", + "difficulty": "easy", + "notes": "Go to the url provided above, log-in with your account credentials and provide and e-mail to receive a link to your data" + }, + { + "name": "Tmall", + "domains": [], + "url": "https://tmall.com", + "difficulty": "hard", + "notes": "Depending on your area you must follow the instructions shown in https://www.alibabagroup.com/en/contact/law_e_commerce?spm=a271m.8038972.0.0.5a916d82MwfIzm'" + }, + { + "name": "Twitch", + "domains": [], + "url": "https://www.twitch.tv/p/legal/privacy-notice/", + "difficulty": "hard", + "notes": "Send an email to [privacy@twitch.tv](mailto:privacy@twitch.tv) and include your name, address, telephone number and all relevant background." + }, + { + "name": "Twitter", + "domains": [], + "url": "https://twitter.com/settings/your_twitter_data", + "difficulty": "medium", + "notes": "Go to your account settings (\"Settings and privacy\"), in the \"Account\" section, click on \"Your Twitter data\", then enter your password in \"Download your Twitter data\" and then click \"Confirm \". Once the download is ready, they will send you an email to your associated email account and from there you can download a compressed file of your Twitter data." + }, + { + "name": "Uber", + "domains": [], + "url": "https://myprivacy.uber.com/privacy/exploreyourdata/download", + "difficulty": "medium", + "notes": "Details of the export will be sent via email when ready." + }, + { + "name": "Ubisoft", + "domains": [], + "url": "https://account.ubisoft.com/en-US/privacy-settings", + "difficulty": "medium", + "notes": "Scroll down to the bottom of the page and request your data. They will send an email to you once your data download is ready. Emails take up to 24 hours to be sent." + }, + { + "name": "Universidad Complutense de Madrid", + "domains": [], + "url": "https://www.ucm.es/como-ejercer-los-derechos", + "difficulty": "hard", + "notes": "You have to present a request form through E-mail or in person at the registry with your ID." + }, + { + "name": "UOL", + "domains": [], + "url": "https://sac.uol.com.br/ajuda/content/como-solicitar-o-levantamento-dos-meus-dados-cadastrados-no-uol", + "difficulty": "easy", + "notes": "Just click in \"Clique aqui\" and click in \"Solicitar envio de dados\". An email is sent immediately." + }, + { + "name": "Uphold", + "domains": [], + "url": "https://support.uphold.com/hc/en-us/requests/new?category=data_and_privacy_inquiries", + "difficulty": "hard", + "notes": "Contact the customer support with the provided form and request your data." + }, + { + "name": "USACO Guide", + "domains": [], + "url": "https://usaco.guide/settings#user-data", + "difficulty": "easy", + "notes": "Click \"Export User Data\". The download will start immediately." + }, + { + "name": "Vinted", + "domains": [], + "url": "https://www.vinted.com/request_data_export", + "difficulty": "easy", + "notes": "Click on your profile icon, then \"Settings\", \"Privacy settings\", \"Download account data\" and \"Request data\"." + }, + { + "name": "Walmart", + "domains": [], + "url": "https://cpa-ui.walmart.com/affirmation?brandCode=WMT", + "difficulty": "hard", + "notes": "They only accept requests from California and Virginia, but they only check the state selected from the dropdown at the beginning." + }, + { + "name": "WhatsApp", + "domains": [], + "url": "https://www.whatsapp.com/", + "difficulty": "easy", + "notes": "Open the application and go to Settings > Account > Request info. from my account. Select \"Request report \", that concludes the process. NOTICE: The report will be ready in approximately 3 days. When it is available, you will have a few weeks to download it. If you delete your account or modify the phone, the request will be canceled." + }, + { + "name": "Wikimedia", + "domains": [], + "url": "https://www.mediawiki.org/wiki/API:Userinfo", + "difficulty": "hard", + "notes": "Wikipedia's data access is easy, but other data from Wikimedia like donation history can only be retrieved through email to [privacy@wikimedia.org](mailto:privacy@wikimedia.org)" + }, + { + "name": "Wikipedia", + "domains": [], + "url": "https://en.wikipedia.org/w/api.php?action=query&meta=userinfo&uiprop=email%7Cregistrationdate%7Crights%7Cgroups%7Coptions%7Ceditcount%7Clatestcontrib", + "difficulty": "easy", + "notes": "Everything is accesible through an API link. For other wikipedias, you can change the language changing the url." + }, + { + "name": "Withings", + "domains": [], + "url": "https://account.withings.com/export/user_select", + "difficulty": "easy", + "notes": "Visit the linked paged to request your data. After a short while you'll receive an email and you can download your data." + }, + { + "name": "Yahoo!", + "domains": [], + "url": "https://yahoo.com/", + "difficulty": "easy", + "notes": "Go to https://yahoo.mydashboard.oath.com/ with a Yahoo! account, scroll down and select 'Request a download' and on the next page you select all the data you want to download, then add an email that you want notify when the download will be ready, this process may take about 30 days." + }, + { + "name": "Yoigo", + "domains": [], + "url": "https://www.yoigo.com/", + "difficulty": "hard", + "notes": "You must to send e-mail to [datospersonales@yoigo.com](mailto:datospersonales@yoigo.com) with your DNI scaned by two sides with a request for what right you want to exercise." + }, + { + "name": "YouTube / YouTube Music", + "domains": [], + "url": "https://takeout.google.com/", + "difficulty": "easy", + "notes": "Since YouTube and YouTube Music are services by Google, please refer to the instructions for [Google](./#google)." + }, + { + "name": "Zanichelli", + "domains": [], + "url": "https://my.zanichelli.it/contattaci", + "difficulty": "hard", + "notes": "To request your data you need to contact customer service." + }, + { + "name": "ZombieLink", + "domains": [], + "url": "https://zombiesrungame.com/zombielink/account", + "difficulty": "easy", + "notes": "Scroll down to 'Data Download' and click red button: 'Request Download'" + }, + { + "name": "Zoom", + "domains": [], + "url": "https://zoom.us/gdpr", + "difficulty": "hard", + "notes": "Send an email requesting a copy of your data to [privacy@zoom.us](mailto:privacy@zoom.us)." + }, + { + "name": "Zynga", + "domains": [], + "url": "https://zyngasupport.helpshift.com/hc/en/29-zyngagames-com/faq/12820-how-do-i-download-or-delete-my-data/?s=legal-privacy-security&f=how-do-i-download-or-delete-my-data", + "difficulty": "easy", + "notes": "Select the game you want to request your data from. Enter your Player ID and PIN for that game. Click on 'Request a Copy of Your Account Data' to submit your request." + } +] \ No newline at end of file diff --git a/common/src/commonMain/resources/MR/files/licenses.json b/common/src/commonMain/resources/MR/files/licenses.json new file mode 100644 index 00000000..fe51488c --- /dev/null +++ b/common/src/commonMain/resources/MR/files/licenses.json @@ -0,0 +1 @@ +[] diff --git a/common/src/commonMain/resources/MR/files/passkeys.json b/common/src/commonMain/resources/MR/files/passkeys.json new file mode 100644 index 00000000..72e72a60 --- /dev/null +++ b/common/src/commonMain/resources/MR/files/passkeys.json @@ -0,0 +1,906 @@ +[ + { + "name": "Adobe", + "domain": "adobe.com", + "features": [ + "signin" + ], + "documentation": "https://helpx.adobe.com/manage-account/using/secure-sign-in-with-passkey.html#set-up", + "setup": "https://account.adobe.com/security", + "notes": "Click the setup link and sign in with your email address and password, then click Add in the Passkeys section and follow the steps to create a passkey.\n\nSign out, then click \"Sign in with passkey\" when you sign back in to use your passkey." + }, + { + "name": "Amazon UK", + "domain": "amazon.co.uk", + "features": [ + "signin" + ], + "setup": "https://www.amazon.co.uk/your-account", + "notes": "Amazon is actively rolling out sign in with passkey support. Setting up a passkey on Amazon needs to meet one of the minimum software requirements of iOS 16, macOS Big Sur, or Android 9 (if applicable).\n\n#### To set up a passkey on your Amazon account:\n\n1. In Your Account, select Login & Security.\n2. Select Set up next to Passkey.\n3. Select Set up.\n4. Follow the instructions provided to complete setting up a passkey.\n\nSigning in to different Amazon marketplaces (Amazon.co.uk compared to Amazon.com for example) requires either a new passkey for that specific marketplace or using your Amazon password." + }, + { + "name": "Amazon", + "domain": "amazon.com", + "features": [ + "signin" + ], + "setup": "https://www.amazon.com/your-account", + "notes": "Amazon is actively rolling out sign in with passkey support. Setting up a passkey on Amazon needs to meet one of the minimum software requirements of iOS 16, macOS Big Sur, or Android 9 (if applicable).\n\n#### To set up a passkey on your Amazon account:\n\n1. In Your Account, select Login & Security.\n2. Select Set up next to Passkey.\n3. Select Set up.\n4. Follow the instructions provided to complete setting up a passkey.\n\nSigning in to different Amazon marketplaces (Amazon.co.uk compared to Amazon.com for example) requires either a new passkey for that specific marketplace or using your Amazon password." + }, + { + "name": "Apple", + "domain": "apple.com", + "features": [ + "signin" + ] + }, + { + "name": "nulab", + "domain": "apps.nulab.com", + "features": [ + "signin" + ], + "documentation": "https://support.nulab.com/hc/en-us/articles/7745339110041-Passwordless-authentication-setup", + "setup": "https://apps.nulab.com/profile/security/security_device" + }, + { + "name": "Arcalive", + "domain": "arca.live", + "features": [ + "mfa", + "signin" + ], + "setup": "https://arca.live/settings/account" + }, + { + "name": "Arpari", + "domain": "arpari.com", + "features": [ + "signin" + ], + "setup": "https://app.arpari.com/login", + "notes": "Powered by Passage by 1Password." + }, + { + "name": "Authgear", + "domain": "authgear.com", + "features": [ + "signin" + ], + "setup": "https://authgear.com" + }, + { + "name": "Best Buy", + "domain": "bestbuy.com", + "features": [ + "signin" + ], + "setup": "https://www.bestbuy.com/identity/accountSettings/", + "notes": "Use the setup link provided and sign in with your email address and password, then follow the steps to create a passkey.\n\nSign out, then choose Sign In with a Passkey when you sign back in to use your passkey." + }, + { + "name": "Beyond Identity", + "domain": "beyondidentity.com", + "features": [ + "signin" + ], + "setup": "https://console-us.beyondidentity.com/signup" + }, + { + "name": "Binance", + "domain": "binance.com", + "features": [ + "mfa", + "signin" + ], + "documentation": "https://www.binance.com/en/support/faq/how-to-create-a-passkey-for-my-binance-account-2aec8fe0437242f2a5fbef9cdb71d4c2", + "setup": "https://accounts.binance.com/en/manage-yubikey-authenticator", + "notes": "Please note: Saving and signing in with passkeys in the Binance app is currently incompatible with third-party passkey managers on iOS. We are anticipating this to be fixed in future iOS 17 releases. Saving and signing in with passkeys in web browsers on iOS will work as expected." + }, + { + "name": "Boursorama", + "domain": "boursorama.com", + "features": [ + "signin" + ], + "documentation": "https://www.boursorama.com/aide-en-ligne/securite/proteger-mon-espace-client/question/comment-se-connecter-a-votre-espace-client-grace-aux-cles-de-securite-5165516", + "setup": "https://www.boursorama.com" + }, + { + "name": "Bridgecrest", + "domain": "bridgecrest.com", + "features": [ + "signin" + ], + "setup": "https://bridgecrest.com" + }, + { + "name": "Cape Cod 5", + "domain": "capecodfive.com", + "features": [ + "signin" + ], + "setup": "https://online.capecodfive.com/settings/security/" + }, + { + "name": "CardPointers", + "domain": "cardpointers.com", + "features": [ + "signin" + ], + "setup": "https://apps.apple.com/app/apple-store/id1472875808?pt=285054&ct=homepage&mt=8", + "notes": "Please note: Saving and signing in with passkeys in the CardPointers app is currently incompatible with third-party passkey managers on iOS. We are anticipating this to be fixed in future iOS 17 releases. Saving and signing in with passkeys in web browsers on iOS will work as expected." + }, + { + "name": "Caremark", + "domain": "caremark.com", + "features": [ + "signin" + ], + "setup": "https://www.caremark.com/digital-fast/caremark-login-web/#/login" + }, + { + "name": "Cloudflare", + "domain": "cloudflare.com", + "features": [ + "mfa" + ], + "documentation": "https://support.cloudflare.com/hc/en-us/articles/200167906-Securing-user-access-with-two-factor-authentication-2FA-#6Gqe6f3nZtXSTpwyS2PBZ1", + "setup": "https://dash.cloudflare.com/profile/authentication" + }, + { + "name": "Cloze", + "domain": "cloze.com", + "features": [ + "mfa", + "signin" + ], + "setup": "https://www.cloze.com/in/#setup", + "notes": "### To add a passkey to your account\n\nFrom the side menu bar:\n1. Select (\u2022\u2022\u2022 more)\n2. Select, settings\n3. Expand 'your account' and select [Add] passkeys" + }, + { + "name": "Coinbase", + "domain": "coinbase.com", + "features": [ + "mfa", + "signin" + ], + "documentation": "https://help.coinbase.com/en/coinbase/getting-started/getting-started-with-coinbase/passkeys" + }, + { + "name": "Corbado", + "domain": "corbado.com", + "features": [ + "signin" + ], + "setup": "https://app.corbado.com/" + }, + { + "name": "Crowdin", + "domain": "crowdin.com", + "features": [ + "mfa", + "signin" + ], + "setup": "https://crowdin.com/settings#account" + }, + { + "name": "Credit Union of Texas", + "domain": "cutx.org", + "features": [ + "mfa", + "signin" + ], + "setup": "https://online.cutx.org/settings/security" + }, + { + "name": "CVS", + "domain": "cvs.com", + "features": [ + "signin" + ], + "setup": "https://www.cvs.com/account/login", + "notes": "Register individual passkeys using iOS, with Safari or Edge browsers.\n\nPlease note: Saving and signing in with passkeys on CVS is currently incompatible with 1Password in the browser and third-party passkey managers on iOS." + }, + { + "name": "Dinero", + "domain": "dinero.dk", + "features": [ + "signin" + ], + "setup": "https://accountsettings.connect.visma.com/" + }, + { + "name": "Discord", + "domain": "discord.com", + "features": [ + "mfa" + ], + "notes": "### How to setup passkey\n\nGoto settings > My Account\n\n### Available on:\nWeb, desktop app and on iOS." + }, + { + "name": "DocuSign", + "domain": "docusign.com", + "features": [ + "mfa", + "signin" + ], + "documentation": "https://support.docusign.com/s/document-item?language=en_US&bundleId=jux1643235969954&topicId=niw1651694673085.html&_LANG=enus", + "setup": "https://app.docusign.com/auth", + "notes": "Click the setup link and sign in with your email address and password, then follow the steps to set up passwordless login using biometrics to create a passkey. \n\nSign out, then sign back in with your email address and choose Log in Without Password to use your passkey." + }, + { + "name": "eBay", + "domain": "ebay.com", + "features": [ + "signin" + ], + "setup": "https://accounts.ebay.com/acctsec/security-center", + "notes": "Select the setup link above and sign in with your email address and password, then select \"Turn on\" next to \"Passkeys\" or \"Face/fingerprint/PIN sign in\" section and follow the steps to create a passkey.\n\nSign out, then sign back in. 1Password will sign in with your passkey automatically." + }, + { + "name": "FormX.ai", + "domain": "formx.ai", + "features": [ + "signin" + ], + "notes": "Uses AuthGear. Setup on register or at https://auth.formextractorai.com/settings" + }, + { + "name": "FusionAuth", + "domain": "fusionauth.io", + "features": [ + "signin" + ], + "documentation": "https://fusionauth.io/docs/v1/tech/passwordless/webauthn-passkeys", + "setup": "https://fusionauth.io/" + }, + { + "name": "GitHub", + "domain": "github.com", + "features": [ + "mfa", + "signin" + ], + "documentation": "https://docs.github.com/en/authentication/authenticating-with-a-passkey/about-passkeys", + "setup": "https://github.com/settings/security", + "notes": "#### To save a passkey on your GitHub account\n1. Navigate to your GitHub account's security settings by heading to https://github.com/settings/security or selecting the setup link above.\n2. Select \"Add a passkey\" under \"Passkeys.\"\n3. Select \"Add passkey\" and follow the on-screen instructions to save a passkey to your GitHub account.\n\nOnce added, you will be able to sign in to your GitHub account by selecting \"Sign in with a passkey\" on the sign in page.\n\n#### Blog post:\n\nhttps://github.blog/2023-09-21-passkeys-are-generally-available/" + }, + { + "name": "GitLab", + "domain": "gitlab.com", + "features": [ + "mfa" + ], + "documentation": "https://docs.gitlab.com/ee/user/profile/account/two_factor_authentication.html#set-up-a-webauthn-device", + "setup": "https://gitlab.com/-/profile/two_factor_auth" + }, + { + "name": "GoDaddy", + "domain": "godaddy.com", + "features": [ + "mfa" + ], + "setup": "https://sso.godaddy.com/security" + }, + { + "name": "Google", + "domain": "google.com", + "features": [ + "mfa", + "signin" + ], + "documentation": "https://support.google.com/accounts/answer/13548313", + "setup": "https://g.co/passkeys", + "notes": "Visit setup link and sign in to a personal Google account with your email address and password, then follow the steps to create a passkey.\n\nSign out, then sign back in. You may need to click \"Try another way\" to see the option to use your passkey." + }, + { + "name": "haeppie", + "domain": "haeppie.com", + "features": [ + "signin" + ], + "setup": "https://be.haeppie.com/#register", + "notes": "Passkeys offered after sign up or sign in, after verifying email address. " + }, + { + "name": "Hancock", + "domain": "hancock.ink", + "features": [ + "signin" + ], + "setup": "https://app.hancock.ink", + "notes": "During logon and account setup, passkeys are presented as an option. If you decide not to set up passkeys at that time, you will be prompted to set them up during application use. Should you choose not to do so, or if you want to manage your passkeys, you can go to your user profile to perform these tasks" + }, + { + "name": "Hanko.io", + "domain": "hanko.io", + "features": [ + "signin" + ] + }, + { + "name": "Visma", + "domain": "home.visma.com", + "features": [ + "mfa", + "signin" + ], + "documentation": "https://community.visma.com/t5/Brukertips-i-Visma-net-ERP/Hvordan-kan-du-aktivere-totrinnskontroll-med-FIDO2/ta-p/293830", + "setup": "https://accountsettings.connect.visma.com" + }, + { + "name": "Horizon Pics", + "domain": "horizon.pics", + "features": [ + "signin" + ], + "documentation": "https://docs.hrzn.cool/pics/webauthn", + "setup": "https://horizon.pics/settings" + }, + { + "name": "World of Hyatt", + "domain": "hyatt.com", + "features": [ + "signin" + ], + "documentation": "https://www.hyatt.com/en-US/member/passkey/what-is-passkey", + "setup": "https://www.hyatt.com/member/passkey/manage", + "notes": "Hyatt.com will require verification via an emailed code in order to create or manage passkeys." + }, + { + "name": "au", + "domain": "id.auone.jp", + "features": [ + "signin" + ], + "documentation": "https://www.au.com/support/faq/detail/26/a00000000826/", + "setup": "https://connect.auone.jp/net/vw/cca_eu_net/cca?ID=ENET0570" + }, + { + "name": "Money Forward ID", + "domain": "id.moneyforward.com", + "features": [ + "signin" + ], + "setup": "https://id.moneyforward.com/webauthn/credentials" + }, + { + "name": "Docomo", + "domain": "id.smt.docomo.ne.jp", + "features": [ + "signin" + ], + "setup": "https://id.smt.docomo.ne.jp/ast/tra/id/conts/setwebauthn/top/" + }, + { + "name": "Instacart", + "domain": "instacart.com", + "features": [ + "signin" + ], + "notes": "New users signing up in the Instacart app will be asked to set up a passkey. Existing users or new users signing up through a web browser are not yet able to add a passkey to their accounts.\n\nIf you are an Instacart shopper, you are able to add a passkey to your existing account through the Shopper app.\n\n#### To set up a passkey on your Shopper account:\n\nStep 1: Go to the Account tab in the Shopper app.\n\nStep 2: Tap Settings.\n\nStep 3: Tap Set up passkey.\n\nPlease note: Saving and signing in with passkeys in the Instacart app is currently incompatible with third-party passkey managers on iOS. We are anticipating this to be fixed in future iOS 17 releases. Saving and signing in with passkeys in web browsers on iOS will work as expected." + }, + { + "name": "Intastellar Accounts", + "domain": "intastellaraccounts.com", + "features": [ + "signin" + ], + "setup": "https://my.intastellaraccounts.com/security/passkeys" + }, + { + "name": "Mercari", + "domain": "jp.mercari.com", + "features": [ + "signin" + ], + "documentation": "https://help.jp.mercari.com/guide/articles/1103/", + "setup": "https://jp.mercari.com/mypage/personal_info/passkeys" + }, + { + "name": "KAYAK", + "domain": "kayak.com", + "features": [ + "signin" + ], + "setup": "https://www.kayak.com/profile/account", + "notes": "From the setup link, click \"Sign in\" > \"Continue with email\" to create a new account with a passkey.\n\nSign out, then repeat the same process to sign in with your passkey.\n\nPlease note: Saving and signing in with passkeys in the KAYAK app is currently incompatible with third-party passkey managers on iOS. We are anticipating this to be fixed in future iOS 17 releases. Saving and signing in with passkeys in web browsers on iOS will work as expected." + }, + { + "name": "L\u00e4\u00e4k\u00e4ri.chat", + "domain": "laakari.chat", + "features": [ + "signin" + ], + "documentation": "https://l\u00e4\u00e4k\u00e4ri.chat/help#webauthn" + }, + { + "name": "LGTM.lol", + "domain": "lgtm.lol", + "features": [ + "signin" + ], + "setup": "https://lgtm.lol/signin" + }, + { + "name": "Link by Stripe", + "domain": "link.com", + "features": [ + "signin" + ], + "setup": "https://app.link.com", + "notes": "Link by Stripe offers a quick checkout solution, ensuring the secure storage of credit card information. By default, it sends 2FA codes to the customer's phone number. However, users also have the option to create passkeys, either after signing in or from the user account menu when they are logged in." + }, + { + "name": "lnk.bio", + "domain": "lnk.bio", + "features": [ + "signin" + ], + "documentation": "https://lnk.bio/linkin/log-in-with-passkeys-to-lnkbio", + "setup": "https://lnk.bio/manage/settings" + }, + { + "name": "Locker ", + "domain": "locker.io", + "features": [ + "signin" + ], + "documentation": "https://support.locker.io/articles/What-are-passkeys-How-to-create-passkeys-for-a-Locker-account-d59668df96034b42859c05ed50149ba4", + "setup": "https://id.locker.io/security/webauthn" + }, + { + "name": "Login.gov", + "domain": "login.gov", + "features": [ + "mfa" + ], + "setup": "https://secure.login.gov/account" + }, + { + "name": "MIXI M", + "domain": "m.mixi.com", + "features": [ + "signin" + ], + "setup": "https://account.mixi.com/security/authenticators" + }, + { + "name": "Mangadex", + "domain": "mangadex.org", + "features": [ + "mfa", + "signin" + ], + "setup": "https://auth.mangadex.org/" + }, + { + "name": "Daylite", + "domain": "marketcircle.com", + "features": [ + "signin" + ], + "documentation": "https://www.marketcircle.com/learn/passkeys" + }, + { + "name": "Marshmallow", + "domain": "marshmallow-qa.com", + "features": [ + "signin" + ], + "documentation": "https://diverdown.wraptas.site/3ec9bbfd244d41149909d1cd5f8003ec", + "setup": "https://marshmallow-qa.com/setting" + }, + { + "name": "Microsoft", + "domain": "microsoft.com", + "features": [ + "mfa", + "signin" + ], + "documentation": "https://support.microsoft.com/en-us/windows/sign-in-to-your-microsoft-account-with-windows-hello-or-a-security-key-800a8c01-6b61-49f5-0660-c2159bea4d84", + "setup": "https://account.live.com/proofs/manage/additional", + "notes": "Not available using Safari right now.\n\nClick the setup link and sign in with your email address and password, then click \"Add a new way to sign in or verify\", choose Use your Windows PC, and follow the steps to create a passkey.\n\nSign out, then choose \"Sign in with Windows Hello or a security key\" when you sign back in to use your passkey." + }, + { + "name": "minter.io", + "domain": "minter.io", + "features": [ + "signin" + ], + "documentation": "https://help.minter.io/en/articles/8207212-adding-a-passkey-for-your-minter-io-account", + "setup": "https://minter.io/app/edit/passkeys/add" + }, + { + "name": "KEMBA Financial Credit Union", + "domain": "my.kemba.org", + "features": [ + "signin" + ], + "setup": "https://my.kemba.org/settings/security" + }, + { + "name": "Namecheap", + "domain": "namecheap.com", + "features": [ + "mfa" + ], + "documentation": "https://www.namecheap.com/support/knowledgebase/article.aspx/10102/45/how-can-i-use-the-u2f-method-for-twofactor-authentication/?_ga=2.209547478.59346046.1668175019-514097103.1666667155&_gl=1*8xtpo2*_ga*NTE0MDk3MTAzLjE2NjY2NjcxNTU.*_ga_7DMJMG20P8*MTY2ODE3NTAxOS4yLjEuMTY2ODE3NTIyOC4zOS4wLjA.", + "setup": "https://ap.www.namecheap.com/settings/security/twofa/manage" + }, + { + "name": "Nintendo", + "domain": "nintendo.com", + "features": [ + "signin" + ], + "documentation": "https://en-americas-support.nintendo.com/app/answers/detail/a_id/62531", + "setup": "https://accounts.nintendo.com/" + }, + { + "name": "Nord Account", + "domain": "nordaccount.com", + "features": [ + "mfa" + ], + "setup": "https://my.nordaccount.com/account-settings/account-security/" + }, + { + "name": "Nvidia", + "domain": "nvidia.com", + "features": [ + "mfa", + "signin" + ], + "setup": "https://profile.nvgs.nvidia.com/security", + "notes": "Click the setup link and sign in with your email address and password, then choose Hardware Security Device, click Add New Security Device, and follow the steps to create a passkey.\n\nSign out, then choose \"Log In With Security Device\" at the bottom of the page when you sign back in to use your passkey." + }, + { + "name": "okta", + "domain": "okta.com", + "features": [ + "mfa", + "signin" + ], + "documentation": "https://help.okta.com/oie/en-us/Content/Topics/identity-engine/authenticators/configure-webauthn.htm" + }, + { + "name": "OKX", + "domain": "okx.com", + "features": [ + "signin" + ], + "setup": "https://www.okx.com/account/security/passkeys" + }, + { + "name": "omg.lol", + "domain": "omg.lol", + "features": [ + "signin" + ], + "setup": "https://home.omg.lol/account", + "notes": "Powered by Passage by 1Password." + }, + { + "name": "OneLog", + "domain": "onelog.ch", + "features": [ + "signin" + ], + "setup": "https://profile.onelog.ch/global.security" + }, + { + "name": "OneLogin", + "domain": "onelogin.com", + "features": [ + "mfa" + ], + "documentation": "https://onelogin.service-now.com/support?id=kb_article&sys_id=927dc6659778e150c90c3b0e6253af9a", + "notes": "Passkeys Support can be enabled by an Administrator of a OneLogin environment by enabling the Webauthn authentication factor on a User Security policy which is then allocated to either a group of users or all users in the environment. " + }, + { + "name": "OnlyFans", + "domain": "onlyfans.com", + "features": [ + "signin" + ], + "setup": "https://onlyfans.com/my/settings/account/passwordless-sign-in", + "notes": "Setup 'passwordless login' through Account Settings. " + }, + { + "name": "Passage Authentication Demo", + "domain": "passage.1password.com", + "features": [ + "signin" + ], + "documentation": "https://passage.1password.com/demo", + "setup": "https://passage.1password.com/demo" + }, + { + "name": "Passage", + "domain": "passage.id", + "features": [ + "signin" + ], + "setup": "https://console.passage.id/register" + }, + { + "name": "Descope passkeys demo", + "domain": "passkeys.guru", + "features": [ + "signin" + ], + "documentation": "https://passkeys.guru", + "setup": "https://passkeys.guru", + "notes": "Passkeys demo powered by descope" + }, + { + "name": "Pastery", + "domain": "pastery.net", + "features": [ + "signin" + ], + "setup": "https://www.pastery.net/login/" + }, + { + "name": "PayFit", + "domain": "payfit.com", + "features": [ + "signin" + ], + "documentation": "https://support.payfit.com/en/articles/74363-two-factor-authentication-for-employees", + "setup": "https://payfit.com", + "notes": "PayFit do not explicitly call setting up 'biometric authentication' option as a passkey or use terminology/iconography from the FIDO passkey guidelines but these are passkeys." + }, + { + "name": "PayPal", + "domain": "paypal.com", + "features": [ + "signin" + ], + "documentation": "https://www.paypal.com/us/cshelp/article/what-are-paypal-passkeys-help997", + "setup": "https://www.paypal.com/myaccount/security/", + "notes": "Passkeys on PayPal can only be created on mobile devices in Chrome on Android or iOS, and in Safari on iOS. Signing in with passkeys is not yet available on Google Chrome (and other Chromium browsers) on desktop.\n\n#### To set up a passkey on your PayPal account:\n1. On your mobile device, navigate to PayPal's settings > Security or use the setup link above.\n2. Select \"Passkeys.\"\n3. Select \"Create a passkey.\"\n4. Follow the instructions provided to complete setting up a passkey.\n\n### Confirmed Location Support\n- [United States](https://newsroom.paypal-corp.com/2022-10-24-PayPal-Introduces-More-Secure-Payments-with-Passkeys)\n- Canada\n- [United Kingdom](https://newsroom.uk.paypal-corp.com/2023-06-27-PayPal-Expands-Passkeys-to-the-UK)\n- [Germany](https://newsroom.deatch.paypal-corp.com/PayPal-weitet-Passkeys-nach-Deutschland-aus)\n\nPlease note: Saving and signing in with passkeys in the PayPal app is currently incompatible with third-party passkey managers on iOS. We are anticipating this to be fixed in future iOS 17 releases. Saving and signing in with passkeys in web browsers on iOS will work as expected." + }, + { + "name": "Porkbun", + "domain": "porkbun.com", + "features": [ + "mfa", + "signin" + ], + "documentation": "https://kb.porkbun.com/article/119-how-to-secure-your-account-with-a-physical-security-key-using-webauthn", + "setup": "https://porkbun.com/account" + }, + { + "name": "Qapital", + "domain": "qapital.com", + "features": [ + "signin" + ], + "setup": "https://qapital.com" + }, + { + "name": "rad.dad", + "domain": "rad.dad", + "features": [ + "signin" + ], + "documentation": "https://rad.dad/help#accessing", + "setup": "https://rad.dad/control-panel/", + "notes": "Powered by Passage by 1Password." + }, + { + "name": "Robinhood", + "domain": "robinhood.com", + "features": [ + "signin" + ], + "documentation": "https://robinhood.com/us/en/support/articles/passkeys/", + "setup": "https://apps.apple.com/us/app/robinhood-investing-for-all/id938003185", + "notes": "Select Account \u2192 Menu \u2192 Security and Privacy \u2192 Create passkey \u2192 Continue\n\nPlease note: Saving and signing in with passkeys in the Robinhood app is currently incompatible with third-party passkey managers on iOS. We are anticipating this to be fixed in future iOS 17 releases. Saving and signing in with passkeys in web browsers on iOS will work as expected." + }, + { + "name": "Roblox", + "domain": "roblox.com", + "features": [ + "signin" + ], + "documentation": "https://en.help.roblox.com/hc/en-us/articles/20669991483156-Login-with-a-Passkey", + "setup": "https://www.roblox.com/my/account#!/info", + "notes": "### Setting up passkeys: \n\n- Navigate to Settings on your iOS app or web browser. Log in if prompted.\n*Note: Android support will be coming soon*\n- Under Account Info > Login Methods > Passkeys, press the \u201cAdd passkey\u201d button.\n- Note: You may need to verify your identity with your password or a one-time code sent to your email.\n\nTo complete adding a passkey, you will be asked to unlock your device.\n\n\n### Manage your passkeys\n\nGo to Settings on your iOS app or web browser. Login to your account if prompted.\n\n*Note: Android support will be coming soon*\n- Under Account Info > Login Methods > Passkeys, press the \u201cManage\u201d button.\n- Press the trashcan icon next to the passkey you want to remove.\n- You may be asked to verify your identity using passwords or an email one-time code." + }, + { + "name": "Scrooge Games", + "domain": "scrooge.games", + "features": [ + "signin" + ], + "setup": "https://scrooge.games/login/" + }, + { + "name": "Shop Pay", + "domain": "shop.app", + "features": [ + "signin" + ], + "setup": "https://pay.shopify.com/pay/webauthn/new" + }, + { + "name": "Shopify", + "domain": "shopify.com", + "features": [ + "signin" + ], + "documentation": "https://help.shopify.com/manual/your-account/logging-in/passkeys#create-a-passkey", + "setup": "https://www.shopify.com", + "notes": "Sign in to Shopify with your email address and password, then follow the steps in the documentation link above to create a passkey. \n\nSign out, then sign back in with your email address and choose \"Log in with passkey\" to use your passkey." + }, + { + "name": "Skiff", + "domain": "skiff.com", + "features": [ + "mfa" + ], + "setup": "https://app.skiff.com/mail/inbox?settingTab=security" + }, + { + "name": "Synology", + "domain": "synology.com", + "features": [ + "signin" + ], + "setup": "https://account.synology.com/security/" + }, + { + "name": "Tailscale", + "domain": "tailscale.com", + "features": [ + "signin" + ], + "documentation": "https://tailscale.com/kb/1269/passkeys/", + "setup": "https://login.tailscale.com/admin/users", + "notes": "Saving and signing in with passkeys on Tailscale is limited to new user accounts only. Users also cannot create a new tailnet using passkey key authentication. The tailnet must first be created using a different authentication method then invited users can use passkey authentication for their accounts." + }, + { + "name": "Tender", + "domain": "tender.run", + "features": [ + "signin" + ], + "documentation": "https://tender.run/passkeys", + "setup": "https://app.tender.run/create-account", + "notes": "Tender only supports passkeys for authentication" + }, + { + "name": "The Hendrix", + "domain": "thehendrixjc.com", + "features": [ + "signin" + ], + "setup": "https://apply.thehendrixjc.com/new-application" + }, + { + "name": "TikTok", + "domain": "tiktok.com", + "features": [ + "signin" + ], + "documentation": "https://support.tiktok.com/en/log-in-troubleshoot/log-in/log-in-with-a-passkey#4", + "notes": "TikTok is rolling out passkeys for iOS to users and requires the following criteria to be met:\n- Have an Apple device running iOS 16 or macOS Ventura or later.\n- iCloud Keychain must be turned on in your Apple device settings.\n- Two-factor authentication must be turned on for your Apple ID.\n\n#### To set up a passkey on your TikTok account:\n\n1. In the TikTok app, tap Profile at the bottom.\n2. Tap the Menu button at the top.\n3. Tap Settings and privacy.\n4. Tap Account.\n5. Tap iCloud passkey, then tap Set up on the next screen and follow the instructions provided to complete setup.\n\nPlease note: Saving and signing in with passkeys in the TikTok app is currently incompatible with third-party passkey managers on iOS. We are anticipating this to be fixed in future iOS 17 releases. Saving and signing in with passkeys in web browsers on iOS will work as expected." + }, + { + "name": "Trusona Authentication Cloud", + "domain": "trusona.com", + "features": [ + "signin" + ], + "documentation": "https://www.trusona.com/customers/authentication-cloud", + "setup": "https://portal.trusona.io", + "notes": "Requires a commercial license. Contact Trusona at info@trusona.com for more information." + }, + { + "name": "Trustworthy", + "domain": "trustworthy.com", + "features": [ + "signin" + ], + "setup": "https://trustworthy.com", + "notes": "Available on iOS after signing up / signing in. " + }, + { + "name": "Uber", + "domain": "uber.com", + "features": [ + "signin" + ], + "documentation": "https://help.uber.com/riders/article/using-passkeys-to-sign-in?nodeId=61701cda-3615-43b2-8187-1440e91035d8", + "setup": "https://account.uber.com/passkeys" + }, + { + "name": "United Southeast Federal Credit Union", + "domain": "usfcu.org", + "features": [ + "signin" + ], + "setup": "https://my.usfcu.org/settings/security" + }, + { + "name": "Vault Vision", + "domain": "vaultvision.com", + "features": [ + "mfa", + "signin" + ], + "documentation": "https://docs.vaultvision.com/index.html", + "setup": "https://auth.vaultvision.com/signup" + }, + { + "name": "Virgin Media", + "domain": "virginmedia.com", + "features": [ + "signin" + ], + "setup": "https://virginmedia.com" + }, + { + "name": "vk", + "domain": "vk.com", + "features": [ + "signin" + ], + "documentation": "https://vk.com/press/id-onepass", + "setup": "https://id.vk.ru/account/#/connected-keys", + "notes": "VK.com / VK.ru provide passkey sign in using their 'OnePass' ID. A phone number or email address is required to create a passkey." + }, + { + "name": "Voura", + "domain": "voura.com", + "features": [ + "signin" + ], + "setup": "https://app.voura.com/auth/login", + "notes": "When signing up for Voura, you will be automatically prompted to save a passkey for your account.\n\nPowered by Passage by 1Password." + }, + { + "name": "WebAuthn.io", + "domain": "webauthn.io", + "features": [ + "signin" + ], + "setup": "https://webauthn.io" + }, + { + "name": "Yahoo! JAPAN", + "domain": "yahoo.co.jp", + "features": [ + "signin" + ], + "documentation": "https://about.yahoo.co.jp/pr/release/2023/03/14b/", + "setup": "https://id.yahoo.co.jp", + "notes": "https://fidoalliance.org/yahoo-japan-announces-support-for-passkeys-across-available-platforms/" + }, + { + "name": "Yahoo!", + "domain": "yahoo.com", + "features": [ + "mfa", + "signin" + ], + "documentation": "https://in.help.yahoo.com/kb/SLN35635.html", + "setup": "https://login.yahoo.com/myaccount/security", + "notes": "Users may need to remove authenticator app before passkeys will be offered." + }, + { + "name": "Zoho", + "domain": "zoho.com", + "features": [ + "mfa", + "signin" + ], + "documentation": "https://help.zoho.com/portal/en/kb/accounts/faqs-troubleshooting/troubleshooting/sign-in/articles/passkey-sign-in-failed-on-mac#What_happened", + "setup": "https://accounts.zoho.com/home#multiTFA/modes", + "notes": "Recently updated this listing to include passkey support for signing in, in addition to MFA." + } +] \ No newline at end of file diff --git a/common/src/commonMain/resources/MR/files/public_suffix_list.txt b/common/src/commonMain/resources/MR/files/public_suffix_list.txt new file mode 100644 index 00000000..79248a73 --- /dev/null +++ b/common/src/commonMain/resources/MR/files/public_suffix_list.txt @@ -0,0 +1,15427 @@ +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at https://mozilla.org/MPL/2.0/. + +// Please pull this list from, and only from https://publicsuffix.org/list/public_suffix_list.dat, +// rather than any other VCS sites. Pulling from any other URL is not guaranteed to be supported. + +// Instructions on pulling and using this list can be found at https://publicsuffix.org/list/. + +// ===BEGIN ICANN DOMAINS=== + +// ac : http://nic.ac/rules.htm +ac +com.ac +edu.ac +gov.ac +net.ac +mil.ac +org.ac + +// ad : https://en.wikipedia.org/wiki/.ad +ad +nom.ad + +// ae : https://tdra.gov.ae/en/aeda/ae-policies +ae +co.ae +net.ae +org.ae +sch.ae +ac.ae +gov.ae +mil.ae + +// aero : see https://www.information.aero/index.php?id=66 +aero +accident-investigation.aero +accident-prevention.aero +aerobatic.aero +aeroclub.aero +aerodrome.aero +agents.aero +aircraft.aero +airline.aero +airport.aero +air-surveillance.aero +airtraffic.aero +air-traffic-control.aero +ambulance.aero +amusement.aero +association.aero +author.aero +ballooning.aero +broker.aero +caa.aero +cargo.aero +catering.aero +certification.aero +championship.aero +charter.aero +civilaviation.aero +club.aero +conference.aero +consultant.aero +consulting.aero +control.aero +council.aero +crew.aero +design.aero +dgca.aero +educator.aero +emergency.aero +engine.aero +engineer.aero +entertainment.aero +equipment.aero +exchange.aero +express.aero +federation.aero +flight.aero +fuel.aero +gliding.aero +government.aero +groundhandling.aero +group.aero +hanggliding.aero +homebuilt.aero +insurance.aero +journal.aero +journalist.aero +leasing.aero +logistics.aero +magazine.aero +maintenance.aero +media.aero +microlight.aero +modelling.aero +navigation.aero +parachuting.aero +paragliding.aero +passenger-association.aero +pilot.aero +press.aero +production.aero +recreation.aero +repbody.aero +res.aero +research.aero +rotorcraft.aero +safety.aero +scientist.aero +services.aero +show.aero +skydiving.aero +software.aero +student.aero +trader.aero +trading.aero +trainer.aero +union.aero +workinggroup.aero +works.aero + +// af : http://www.nic.af/help.jsp +af +gov.af +com.af +org.af +net.af +edu.af + +// ag : http://www.nic.ag/prices.htm +ag +com.ag +org.ag +net.ag +co.ag +nom.ag + +// ai : http://nic.com.ai/ +ai +off.ai +com.ai +net.ai +org.ai + +// al : http://www.ert.gov.al/ert_alb/faq_det.html?Id=31 +al +com.al +edu.al +gov.al +mil.al +net.al +org.al + +// am : https://www.amnic.net/policy/en/Policy_EN.pdf +am +co.am +com.am +commune.am +net.am +org.am + +// ao : https://en.wikipedia.org/wiki/.ao +// http://www.dns.ao/REGISTR.DOC +ao +ed.ao +gv.ao +og.ao +co.ao +pb.ao +it.ao + +// aq : https://en.wikipedia.org/wiki/.aq +aq + +// ar : https://nic.ar/es/nic-argentina/normativa +ar +bet.ar +com.ar +coop.ar +edu.ar +gob.ar +gov.ar +int.ar +mil.ar +musica.ar +mutual.ar +net.ar +org.ar +senasa.ar +tur.ar + +// arpa : https://en.wikipedia.org/wiki/.arpa +// Confirmed by registry 2008-06-18 +arpa +e164.arpa +in-addr.arpa +ip6.arpa +iris.arpa +uri.arpa +urn.arpa + +// as : https://en.wikipedia.org/wiki/.as +as +gov.as + +// asia : https://en.wikipedia.org/wiki/.asia +asia + +// at : https://en.wikipedia.org/wiki/.at +// Confirmed by registry 2008-06-17 +at +ac.at +co.at +gv.at +or.at +sth.ac.at + +// au : https://en.wikipedia.org/wiki/.au +// http://www.auda.org.au/ +au +// 2LDs +com.au +net.au +org.au +edu.au +gov.au +asn.au +id.au +// Historic 2LDs (closed to new registration, but sites still exist) +info.au +conf.au +oz.au +// CGDNs - http://www.cgdn.org.au/ +act.au +nsw.au +nt.au +qld.au +sa.au +tas.au +vic.au +wa.au +// 3LDs +act.edu.au +catholic.edu.au +// eq.edu.au - Removed at the request of the Queensland Department of Education +nsw.edu.au +nt.edu.au +qld.edu.au +sa.edu.au +tas.edu.au +vic.edu.au +wa.edu.au +// act.gov.au Bug 984824 - Removed at request of Greg Tankard +// nsw.gov.au Bug 547985 - Removed at request of +// nt.gov.au Bug 940478 - Removed at request of Greg Connors +qld.gov.au +sa.gov.au +tas.gov.au +vic.gov.au +wa.gov.au +// 4LDs +// education.tas.edu.au - Removed at the request of the Department of Education Tasmania +schools.nsw.edu.au + +// aw : https://en.wikipedia.org/wiki/.aw +aw +com.aw + +// ax : https://en.wikipedia.org/wiki/.ax +ax + +// az : https://en.wikipedia.org/wiki/.az +az +com.az +net.az +int.az +gov.az +org.az +edu.az +info.az +pp.az +mil.az +name.az +pro.az +biz.az + +// ba : http://nic.ba/users_data/files/pravilnik_o_registraciji.pdf +ba +com.ba +edu.ba +gov.ba +mil.ba +net.ba +org.ba + +// bb : https://en.wikipedia.org/wiki/.bb +bb +biz.bb +co.bb +com.bb +edu.bb +gov.bb +info.bb +net.bb +org.bb +store.bb +tv.bb + +// bd : https://en.wikipedia.org/wiki/.bd +*.bd + +// be : https://en.wikipedia.org/wiki/.be +// Confirmed by registry 2008-06-08 +be +ac.be + +// bf : https://en.wikipedia.org/wiki/.bf +bf +gov.bf + +// bg : https://en.wikipedia.org/wiki/.bg +// https://www.register.bg/user/static/rules/en/index.html +bg +a.bg +b.bg +c.bg +d.bg +e.bg +f.bg +g.bg +h.bg +i.bg +j.bg +k.bg +l.bg +m.bg +n.bg +o.bg +p.bg +q.bg +r.bg +s.bg +t.bg +u.bg +v.bg +w.bg +x.bg +y.bg +z.bg +0.bg +1.bg +2.bg +3.bg +4.bg +5.bg +6.bg +7.bg +8.bg +9.bg + +// bh : https://en.wikipedia.org/wiki/.bh +bh +com.bh +edu.bh +net.bh +org.bh +gov.bh + +// bi : https://en.wikipedia.org/wiki/.bi +// http://whois.nic.bi/ +bi +co.bi +com.bi +edu.bi +or.bi +org.bi + +// biz : https://en.wikipedia.org/wiki/.biz +biz + +// bj : https://nic.bj/bj-suffixes.txt +// submitted by registry +bj +africa.bj +agro.bj +architectes.bj +assur.bj +avocats.bj +co.bj +com.bj +eco.bj +econo.bj +edu.bj +info.bj +loisirs.bj +money.bj +net.bj +org.bj +ote.bj +resto.bj +restaurant.bj +tourism.bj +univ.bj + +// bm : http://www.bermudanic.bm/dnr-text.txt +bm +com.bm +edu.bm +gov.bm +net.bm +org.bm + +// bn : http://www.bnnic.bn/faqs +bn +com.bn +edu.bn +gov.bn +net.bn +org.bn + +// bo : https://nic.bo/delegacion2015.php#h-1.10 +bo +com.bo +edu.bo +gob.bo +int.bo +org.bo +net.bo +mil.bo +tv.bo +web.bo +// Social Domains +academia.bo +agro.bo +arte.bo +blog.bo +bolivia.bo +ciencia.bo +cooperativa.bo +democracia.bo +deporte.bo +ecologia.bo +economia.bo +empresa.bo +indigena.bo +industria.bo +info.bo +medicina.bo +movimiento.bo +musica.bo +natural.bo +nombre.bo +noticias.bo +patria.bo +politica.bo +profesional.bo +plurinacional.bo +pueblo.bo +revista.bo +salud.bo +tecnologia.bo +tksat.bo +transporte.bo +wiki.bo + +// br : http://registro.br/dominio/categoria.html +// Submitted by registry +br +9guacu.br +abc.br +adm.br +adv.br +agr.br +aju.br +am.br +anani.br +aparecida.br +app.br +arq.br +art.br +ato.br +b.br +barueri.br +belem.br +bhz.br +bib.br +bio.br +blog.br +bmd.br +boavista.br +bsb.br +campinagrande.br +campinas.br +caxias.br +cim.br +cng.br +cnt.br +com.br +contagem.br +coop.br +coz.br +cri.br +cuiaba.br +curitiba.br +def.br +des.br +det.br +dev.br +ecn.br +eco.br +edu.br +emp.br +enf.br +eng.br +esp.br +etc.br +eti.br +far.br +feira.br +flog.br +floripa.br +fm.br +fnd.br +fortal.br +fot.br +foz.br +fst.br +g12.br +geo.br +ggf.br +goiania.br +gov.br +// gov.br 26 states + df https://en.wikipedia.org/wiki/States_of_Brazil +ac.gov.br +al.gov.br +am.gov.br +ap.gov.br +ba.gov.br +ce.gov.br +df.gov.br +es.gov.br +go.gov.br +ma.gov.br +mg.gov.br +ms.gov.br +mt.gov.br +pa.gov.br +pb.gov.br +pe.gov.br +pi.gov.br +pr.gov.br +rj.gov.br +rn.gov.br +ro.gov.br +rr.gov.br +rs.gov.br +sc.gov.br +se.gov.br +sp.gov.br +to.gov.br +gru.br +imb.br +ind.br +inf.br +jab.br +jampa.br +jdf.br +joinville.br +jor.br +jus.br +leg.br +lel.br +log.br +londrina.br +macapa.br +maceio.br +manaus.br +maringa.br +mat.br +med.br +mil.br +morena.br +mp.br +mus.br +natal.br +net.br +niteroi.br +*.nom.br +not.br +ntr.br +odo.br +ong.br +org.br +osasco.br +palmas.br +poa.br +ppg.br +pro.br +psc.br +psi.br +pvh.br +qsl.br +radio.br +rec.br +recife.br +rep.br +ribeirao.br +rio.br +riobranco.br +riopreto.br +salvador.br +sampa.br +santamaria.br +santoandre.br +saobernardo.br +saogonca.br +seg.br +sjc.br +slg.br +slz.br +sorocaba.br +srv.br +taxi.br +tc.br +tec.br +teo.br +the.br +tmp.br +trd.br +tur.br +tv.br +udi.br +vet.br +vix.br +vlog.br +wiki.br +zlg.br + +// bs : http://www.nic.bs/rules.html +bs +com.bs +net.bs +org.bs +edu.bs +gov.bs + +// bt : https://en.wikipedia.org/wiki/.bt +bt +com.bt +edu.bt +gov.bt +net.bt +org.bt + +// bv : No registrations at this time. +// Submitted by registry +bv + +// bw : https://en.wikipedia.org/wiki/.bw +// http://www.gobin.info/domainname/bw.doc +// list of other 2nd level tlds ? +bw +co.bw +org.bw + +// by : https://en.wikipedia.org/wiki/.by +// http://tld.by/rules_2006_en.html +// list of other 2nd level tlds ? +by +gov.by +mil.by +// Official information does not indicate that com.by is a reserved +// second-level domain, but it's being used as one (see www.google.com.by and +// www.yahoo.com.by, for example), so we list it here for safety's sake. +com.by + +// http://hoster.by/ +of.by + +// bz : https://en.wikipedia.org/wiki/.bz +// http://www.belizenic.bz/ +bz +com.bz +net.bz +org.bz +edu.bz +gov.bz + +// ca : https://en.wikipedia.org/wiki/.ca +ca +// ca geographical names +ab.ca +bc.ca +mb.ca +nb.ca +nf.ca +nl.ca +ns.ca +nt.ca +nu.ca +on.ca +pe.ca +qc.ca +sk.ca +yk.ca +// gc.ca: https://en.wikipedia.org/wiki/.gc.ca +// see also: http://registry.gc.ca/en/SubdomainFAQ +gc.ca + +// cat : https://en.wikipedia.org/wiki/.cat +cat + +// cc : https://en.wikipedia.org/wiki/.cc +cc + +// cd : https://en.wikipedia.org/wiki/.cd +// see also: https://www.nic.cd/domain/insertDomain_2.jsp?act=1 +cd +gov.cd + +// cf : https://en.wikipedia.org/wiki/.cf +cf + +// cg : https://en.wikipedia.org/wiki/.cg +cg + +// ch : https://en.wikipedia.org/wiki/.ch +ch + +// ci : https://en.wikipedia.org/wiki/.ci +// http://www.nic.ci/index.php?page=charte +ci +org.ci +or.ci +com.ci +co.ci +edu.ci +ed.ci +ac.ci +net.ci +go.ci +asso.ci +aéroport.ci +int.ci +presse.ci +md.ci +gouv.ci + +// ck : https://en.wikipedia.org/wiki/.ck +*.ck +!www.ck + +// cl : https://www.nic.cl +// Confirmed by .CL registry +cl +co.cl +gob.cl +gov.cl +mil.cl + +// cm : https://en.wikipedia.org/wiki/.cm plus bug 981927 +cm +co.cm +com.cm +gov.cm +net.cm + +// cn : https://en.wikipedia.org/wiki/.cn +// Submitted by registry +cn +ac.cn +com.cn +edu.cn +gov.cn +net.cn +org.cn +mil.cn +公司.cn +网络.cn +網絡.cn +// cn geographic names +ah.cn +bj.cn +cq.cn +fj.cn +gd.cn +gs.cn +gz.cn +gx.cn +ha.cn +hb.cn +he.cn +hi.cn +hl.cn +hn.cn +jl.cn +js.cn +jx.cn +ln.cn +nm.cn +nx.cn +qh.cn +sc.cn +sd.cn +sh.cn +sn.cn +sx.cn +tj.cn +xj.cn +xz.cn +yn.cn +zj.cn +hk.cn +mo.cn +tw.cn + +// co : https://en.wikipedia.org/wiki/.co +// Submitted by registry +co +arts.co +com.co +edu.co +firm.co +gov.co +info.co +int.co +mil.co +net.co +nom.co +org.co +rec.co +web.co + +// com : https://en.wikipedia.org/wiki/.com +com + +// coop : https://en.wikipedia.org/wiki/.coop +coop + +// cr : http://www.nic.cr/niccr_publico/showRegistroDominiosScreen.do +cr +ac.cr +co.cr +ed.cr +fi.cr +go.cr +or.cr +sa.cr + +// cu : https://en.wikipedia.org/wiki/.cu +cu +com.cu +edu.cu +org.cu +net.cu +gov.cu +inf.cu + +// cv : https://en.wikipedia.org/wiki/.cv +// cv : http://www.dns.cv/tldcv_portal/do?com=DS;5446457100;111;+PAGE(4000018)+K-CAT-CODIGO(RDOM)+RCNT(100); <- registration rules +cv +com.cv +edu.cv +int.cv +nome.cv +org.cv + +// cw : http://www.una.cw/cw_registry/ +// Confirmed by registry 2013-03-26 +cw +com.cw +edu.cw +net.cw +org.cw + +// cx : https://en.wikipedia.org/wiki/.cx +// list of other 2nd level tlds ? +cx +gov.cx + +// cy : http://www.nic.cy/ +// Submitted by registry Panayiotou Fotia +// namespace policies URL https://www.nic.cy/portal//sites/default/files/symfonia_gia_eggrafi.pdf +cy +ac.cy +biz.cy +com.cy +ekloges.cy +gov.cy +ltd.cy +mil.cy +net.cy +org.cy +press.cy +pro.cy +tm.cy + +// cz : https://en.wikipedia.org/wiki/.cz +cz + +// de : https://en.wikipedia.org/wiki/.de +// Confirmed by registry (with technical +// reservations) 2008-07-01 +de + +// dj : https://en.wikipedia.org/wiki/.dj +dj + +// dk : https://en.wikipedia.org/wiki/.dk +// Confirmed by registry 2008-06-17 +dk + +// dm : https://en.wikipedia.org/wiki/.dm +dm +com.dm +net.dm +org.dm +edu.dm +gov.dm + +// do : https://en.wikipedia.org/wiki/.do +do +art.do +com.do +edu.do +gob.do +gov.do +mil.do +net.do +org.do +sld.do +web.do + +// dz : http://www.nic.dz/images/pdf_nic/charte.pdf +dz +art.dz +asso.dz +com.dz +edu.dz +gov.dz +org.dz +net.dz +pol.dz +soc.dz +tm.dz + +// ec : http://www.nic.ec/reg/paso1.asp +// Submitted by registry +ec +com.ec +info.ec +net.ec +fin.ec +k12.ec +med.ec +pro.ec +org.ec +edu.ec +gov.ec +gob.ec +mil.ec + +// edu : https://en.wikipedia.org/wiki/.edu +edu + +// ee : http://www.eenet.ee/EENet/dom_reeglid.html#lisa_B +ee +edu.ee +gov.ee +riik.ee +lib.ee +med.ee +com.ee +pri.ee +aip.ee +org.ee +fie.ee + +// eg : https://en.wikipedia.org/wiki/.eg +eg +com.eg +edu.eg +eun.eg +gov.eg +mil.eg +name.eg +net.eg +org.eg +sci.eg + +// er : https://en.wikipedia.org/wiki/.er +*.er + +// es : https://www.nic.es/site_ingles/ingles/dominios/index.html +es +com.es +nom.es +org.es +gob.es +edu.es + +// et : https://en.wikipedia.org/wiki/.et +et +com.et +gov.et +org.et +edu.et +biz.et +name.et +info.et +net.et + +// eu : https://en.wikipedia.org/wiki/.eu +eu + +// fi : https://en.wikipedia.org/wiki/.fi +fi +// aland.fi : https://en.wikipedia.org/wiki/.ax +// This domain is being phased out in favor of .ax. As there are still many +// domains under aland.fi, we still keep it on the list until aland.fi is +// completely removed. +// TODO: Check for updates (expected to be phased out around Q1/2009) +aland.fi + +// fj : http://domains.fj/ +// Submitted by registry 2020-02-11 +fj +ac.fj +biz.fj +com.fj +gov.fj +info.fj +mil.fj +name.fj +net.fj +org.fj +pro.fj + +// fk : https://en.wikipedia.org/wiki/.fk +*.fk + +// fm : https://en.wikipedia.org/wiki/.fm +com.fm +edu.fm +net.fm +org.fm +fm + +// fo : https://en.wikipedia.org/wiki/.fo +fo + +// fr : https://www.afnic.fr/ https://www.afnic.fr/wp-media/uploads/2022/12/afnic-naming-policy-2023-01-01.pdf +fr +asso.fr +com.fr +gouv.fr +nom.fr +prd.fr +tm.fr +// Other SLDs now selfmanaged out of AFNIC range. Former "domaines sectoriels", still registration suffixes +avoues.fr +cci.fr +greta.fr +huissier-justice.fr + +// ga : https://en.wikipedia.org/wiki/.ga +ga + +// gb : This registry is effectively dormant +// Submitted by registry +gb + +// gd : https://en.wikipedia.org/wiki/.gd +edu.gd +gov.gd +gd + +// ge : http://www.nic.net.ge/policy_en.pdf +ge +com.ge +edu.ge +gov.ge +org.ge +mil.ge +net.ge +pvt.ge + +// gf : https://en.wikipedia.org/wiki/.gf +gf + +// gg : http://www.channelisles.net/register-domains/ +// Confirmed by registry 2013-11-28 +gg +co.gg +net.gg +org.gg + +// gh : https://en.wikipedia.org/wiki/.gh +// see also: http://www.nic.gh/reg_now.php +// Although domains directly at second level are not possible at the moment, +// they have been possible for some time and may come back. +gh +com.gh +edu.gh +gov.gh +org.gh +mil.gh + +// gi : http://www.nic.gi/rules.html +gi +com.gi +ltd.gi +gov.gi +mod.gi +edu.gi +org.gi + +// gl : https://en.wikipedia.org/wiki/.gl +// http://nic.gl +gl +co.gl +com.gl +edu.gl +net.gl +org.gl + +// gm : http://www.nic.gm/htmlpages%5Cgm-policy.htm +gm + +// gn : http://psg.com/dns/gn/gn.txt +// Submitted by registry +gn +ac.gn +com.gn +edu.gn +gov.gn +org.gn +net.gn + +// gov : https://en.wikipedia.org/wiki/.gov +gov + +// gp : http://www.nic.gp/index.php?lang=en +gp +com.gp +net.gp +mobi.gp +edu.gp +org.gp +asso.gp + +// gq : https://en.wikipedia.org/wiki/.gq +gq + +// gr : https://grweb.ics.forth.gr/english/1617-B-2005.html +// Submitted by registry +gr +com.gr +edu.gr +net.gr +org.gr +gov.gr + +// gs : https://en.wikipedia.org/wiki/.gs +gs + +// gt : https://www.gt/sitio/registration_policy.php?lang=en +gt +com.gt +edu.gt +gob.gt +ind.gt +mil.gt +net.gt +org.gt + +// gu : http://gadao.gov.gu/register.html +// University of Guam : https://www.uog.edu +// Submitted by uognoc@triton.uog.edu +gu +com.gu +edu.gu +gov.gu +guam.gu +info.gu +net.gu +org.gu +web.gu + +// gw : https://en.wikipedia.org/wiki/.gw +// gw : https://nic.gw/regras/ +gw + +// gy : https://en.wikipedia.org/wiki/.gy +// http://registry.gy/ +gy +co.gy +com.gy +edu.gy +gov.gy +net.gy +org.gy + +// hk : https://www.hkirc.hk +// Submitted by registry +hk +com.hk +edu.hk +gov.hk +idv.hk +net.hk +org.hk +公司.hk +教育.hk +敎育.hk +政府.hk +個人.hk +个人.hk +箇人.hk +網络.hk +网络.hk +组織.hk +網絡.hk +网絡.hk +组织.hk +組織.hk +組织.hk + +// hm : https://en.wikipedia.org/wiki/.hm +hm + +// hn : http://www.nic.hn/politicas/ps02,,05.html +hn +com.hn +edu.hn +org.hn +net.hn +mil.hn +gob.hn + +// hr : http://www.dns.hr/documents/pdf/HRTLD-regulations.pdf +hr +iz.hr +from.hr +name.hr +com.hr + +// ht : http://www.nic.ht/info/charte.cfm +ht +com.ht +shop.ht +firm.ht +info.ht +adult.ht +net.ht +pro.ht +org.ht +med.ht +art.ht +coop.ht +pol.ht +asso.ht +edu.ht +rel.ht +gouv.ht +perso.ht + +// hu : http://www.domain.hu/domain/English/sld.html +// Confirmed by registry 2008-06-12 +hu +co.hu +info.hu +org.hu +priv.hu +sport.hu +tm.hu +2000.hu +agrar.hu +bolt.hu +casino.hu +city.hu +erotica.hu +erotika.hu +film.hu +forum.hu +games.hu +hotel.hu +ingatlan.hu +jogasz.hu +konyvelo.hu +lakas.hu +media.hu +news.hu +reklam.hu +sex.hu +shop.hu +suli.hu +szex.hu +tozsde.hu +utazas.hu +video.hu + +// id : https://pandi.id/en/domain/registration-requirements/ +id +ac.id +biz.id +co.id +desa.id +go.id +mil.id +my.id +net.id +or.id +ponpes.id +sch.id +web.id + +// ie : https://en.wikipedia.org/wiki/.ie +ie +gov.ie + +// il : http://www.isoc.org.il/domains/ +// see also: https://en.isoc.org.il/il-cctld/registration-rules +// ISOC-IL (operated by .il Registry) +il +ac.il +co.il +gov.il +idf.il +k12.il +muni.il +net.il +org.il +// xn--4dbrk0ce ("Israel", Hebrew) : IL +ישראל +// xn--4dbgdty6c.xn--4dbrk0ce. +אקדמיה.ישראל +// xn--5dbhl8d.xn--4dbrk0ce. +ישוב.ישראל +// xn--8dbq2a.xn--4dbrk0ce. +צהל.ישראל +// xn--hebda8b.xn--4dbrk0ce. +ממשל.ישראל + +// im : https://www.nic.im/ +// Submitted by registry +im +ac.im +co.im +com.im +ltd.co.im +net.im +org.im +plc.co.im +tt.im +tv.im + +// in : https://en.wikipedia.org/wiki/.in +// see also: https://registry.in/policies +// Please note, that nic.in is not an official eTLD, but used by most +// government institutions. +in +5g.in +6g.in +ac.in +ai.in +am.in +bihar.in +biz.in +business.in +ca.in +cn.in +co.in +com.in +coop.in +cs.in +delhi.in +dr.in +edu.in +er.in +firm.in +gen.in +gov.in +gujarat.in +ind.in +info.in +int.in +internet.in +io.in +me.in +mil.in +net.in +nic.in +org.in +pg.in +post.in +pro.in +res.in +travel.in +tv.in +uk.in +up.in +us.in + +// info : https://en.wikipedia.org/wiki/.info +info + +// int : https://en.wikipedia.org/wiki/.int +// Confirmed by registry 2008-06-18 +int +eu.int + +// io : http://www.nic.io/rules.htm +// list of other 2nd level tlds ? +io +com.io + +// iq : http://www.cmc.iq/english/iq/iqregister1.htm +iq +gov.iq +edu.iq +mil.iq +com.iq +org.iq +net.iq + +// ir : http://www.nic.ir/Terms_and_Conditions_ir,_Appendix_1_Domain_Rules +// Also see http://www.nic.ir/Internationalized_Domain_Names +// Two .ir entries added at request of , 2010-04-16 +ir +ac.ir +co.ir +gov.ir +id.ir +net.ir +org.ir +sch.ir +// xn--mgba3a4f16a.ir (.ir, Persian YEH) +ایران.ir +// xn--mgba3a4fra.ir (.ir, Arabic YEH) +ايران.ir + +// is : http://www.isnic.is/domain/rules.php +// Confirmed by registry 2008-12-06 +is +net.is +com.is +edu.is +gov.is +org.is +int.is + +// it : https://en.wikipedia.org/wiki/.it +it +gov.it +edu.it +// Reserved geo-names (regions and provinces): +// https://www.nic.it/sites/default/files/archivio/docs/Regulation_assignation_v7.1.pdf +// Regions +abr.it +abruzzo.it +aosta-valley.it +aostavalley.it +bas.it +basilicata.it +cal.it +calabria.it +cam.it +campania.it +emilia-romagna.it +emiliaromagna.it +emr.it +friuli-v-giulia.it +friuli-ve-giulia.it +friuli-vegiulia.it +friuli-venezia-giulia.it +friuli-veneziagiulia.it +friuli-vgiulia.it +friuliv-giulia.it +friulive-giulia.it +friulivegiulia.it +friulivenezia-giulia.it +friuliveneziagiulia.it +friulivgiulia.it +fvg.it +laz.it +lazio.it +lig.it +liguria.it +lom.it +lombardia.it +lombardy.it +lucania.it +mar.it +marche.it +mol.it +molise.it +piedmont.it +piemonte.it +pmn.it +pug.it +puglia.it +sar.it +sardegna.it +sardinia.it +sic.it +sicilia.it +sicily.it +taa.it +tos.it +toscana.it +trentin-sud-tirol.it +trentin-süd-tirol.it +trentin-sudtirol.it +trentin-südtirol.it +trentin-sued-tirol.it +trentin-suedtirol.it +trentino-a-adige.it +trentino-aadige.it +trentino-alto-adige.it +trentino-altoadige.it +trentino-s-tirol.it +trentino-stirol.it +trentino-sud-tirol.it +trentino-süd-tirol.it +trentino-sudtirol.it +trentino-südtirol.it +trentino-sued-tirol.it +trentino-suedtirol.it +trentino.it +trentinoa-adige.it +trentinoaadige.it +trentinoalto-adige.it +trentinoaltoadige.it +trentinos-tirol.it +trentinostirol.it +trentinosud-tirol.it +trentinosüd-tirol.it +trentinosudtirol.it +trentinosüdtirol.it +trentinosued-tirol.it +trentinosuedtirol.it +trentinsud-tirol.it +trentinsüd-tirol.it +trentinsudtirol.it +trentinsüdtirol.it +trentinsued-tirol.it +trentinsuedtirol.it +tuscany.it +umb.it +umbria.it +val-d-aosta.it +val-daosta.it +vald-aosta.it +valdaosta.it +valle-aosta.it +valle-d-aosta.it +valle-daosta.it +valleaosta.it +valled-aosta.it +valledaosta.it +vallee-aoste.it +vallée-aoste.it +vallee-d-aoste.it +vallée-d-aoste.it +valleeaoste.it +valléeaoste.it +valleedaoste.it +valléedaoste.it +vao.it +vda.it +ven.it +veneto.it +// Provinces +ag.it +agrigento.it +al.it +alessandria.it +alto-adige.it +altoadige.it +an.it +ancona.it +andria-barletta-trani.it +andria-trani-barletta.it +andriabarlettatrani.it +andriatranibarletta.it +ao.it +aosta.it +aoste.it +ap.it +aq.it +aquila.it +ar.it +arezzo.it +ascoli-piceno.it +ascolipiceno.it +asti.it +at.it +av.it +avellino.it +ba.it +balsan-sudtirol.it +balsan-südtirol.it +balsan-suedtirol.it +balsan.it +bari.it +barletta-trani-andria.it +barlettatraniandria.it +belluno.it +benevento.it +bergamo.it +bg.it +bi.it +biella.it +bl.it +bn.it +bo.it +bologna.it +bolzano-altoadige.it +bolzano.it +bozen-sudtirol.it +bozen-südtirol.it +bozen-suedtirol.it +bozen.it +br.it +brescia.it +brindisi.it +bs.it +bt.it +bulsan-sudtirol.it +bulsan-südtirol.it +bulsan-suedtirol.it +bulsan.it +bz.it +ca.it +cagliari.it +caltanissetta.it +campidano-medio.it +campidanomedio.it +campobasso.it +carbonia-iglesias.it +carboniaiglesias.it +carrara-massa.it +carraramassa.it +caserta.it +catania.it +catanzaro.it +cb.it +ce.it +cesena-forli.it +cesena-forlì.it +cesenaforli.it +cesenaforlì.it +ch.it +chieti.it +ci.it +cl.it +cn.it +co.it +como.it +cosenza.it +cr.it +cremona.it +crotone.it +cs.it +ct.it +cuneo.it +cz.it +dell-ogliastra.it +dellogliastra.it +en.it +enna.it +fc.it +fe.it +fermo.it +ferrara.it +fg.it +fi.it +firenze.it +florence.it +fm.it +foggia.it +forli-cesena.it +forlì-cesena.it +forlicesena.it +forlìcesena.it +fr.it +frosinone.it +ge.it +genoa.it +genova.it +go.it +gorizia.it +gr.it +grosseto.it +iglesias-carbonia.it +iglesiascarbonia.it +im.it +imperia.it +is.it +isernia.it +kr.it +la-spezia.it +laquila.it +laspezia.it +latina.it +lc.it +le.it +lecce.it +lecco.it +li.it +livorno.it +lo.it +lodi.it +lt.it +lu.it +lucca.it +macerata.it +mantova.it +massa-carrara.it +massacarrara.it +matera.it +mb.it +mc.it +me.it +medio-campidano.it +mediocampidano.it +messina.it +mi.it +milan.it +milano.it +mn.it +mo.it +modena.it +monza-brianza.it +monza-e-della-brianza.it +monza.it +monzabrianza.it +monzaebrianza.it +monzaedellabrianza.it +ms.it +mt.it +na.it +naples.it +napoli.it +no.it +novara.it +nu.it +nuoro.it +og.it +ogliastra.it +olbia-tempio.it +olbiatempio.it +or.it +oristano.it +ot.it +pa.it +padova.it +padua.it +palermo.it +parma.it +pavia.it +pc.it +pd.it +pe.it +perugia.it +pesaro-urbino.it +pesarourbino.it +pescara.it +pg.it +pi.it +piacenza.it +pisa.it +pistoia.it +pn.it +po.it +pordenone.it +potenza.it +pr.it +prato.it +pt.it +pu.it +pv.it +pz.it +ra.it +ragusa.it +ravenna.it +rc.it +re.it +reggio-calabria.it +reggio-emilia.it +reggiocalabria.it +reggioemilia.it +rg.it +ri.it +rieti.it +rimini.it +rm.it +rn.it +ro.it +roma.it +rome.it +rovigo.it +sa.it +salerno.it +sassari.it +savona.it +si.it +siena.it +siracusa.it +so.it +sondrio.it +sp.it +sr.it +ss.it +suedtirol.it +südtirol.it +sv.it +ta.it +taranto.it +te.it +tempio-olbia.it +tempioolbia.it +teramo.it +terni.it +tn.it +to.it +torino.it +tp.it +tr.it +trani-andria-barletta.it +trani-barletta-andria.it +traniandriabarletta.it +tranibarlettaandria.it +trapani.it +trento.it +treviso.it +trieste.it +ts.it +turin.it +tv.it +ud.it +udine.it +urbino-pesaro.it +urbinopesaro.it +va.it +varese.it +vb.it +vc.it +ve.it +venezia.it +venice.it +verbania.it +vercelli.it +verona.it +vi.it +vibo-valentia.it +vibovalentia.it +vicenza.it +viterbo.it +vr.it +vs.it +vt.it +vv.it + +// je : http://www.channelisles.net/register-domains/ +// Confirmed by registry 2013-11-28 +je +co.je +net.je +org.je + +// jm : http://www.com.jm/register.html +*.jm + +// jo : http://www.dns.jo/Registration_policy.aspx +jo +com.jo +org.jo +net.jo +edu.jo +sch.jo +gov.jo +mil.jo +name.jo + +// jobs : https://en.wikipedia.org/wiki/.jobs +jobs + +// jp : https://en.wikipedia.org/wiki/.jp +// http://jprs.co.jp/en/jpdomain.html +// Submitted by registry +jp +// jp organizational type names +ac.jp +ad.jp +co.jp +ed.jp +go.jp +gr.jp +lg.jp +ne.jp +or.jp +// jp prefecture type names +aichi.jp +akita.jp +aomori.jp +chiba.jp +ehime.jp +fukui.jp +fukuoka.jp +fukushima.jp +gifu.jp +gunma.jp +hiroshima.jp +hokkaido.jp +hyogo.jp +ibaraki.jp +ishikawa.jp +iwate.jp +kagawa.jp +kagoshima.jp +kanagawa.jp +kochi.jp +kumamoto.jp +kyoto.jp +mie.jp +miyagi.jp +miyazaki.jp +nagano.jp +nagasaki.jp +nara.jp +niigata.jp +oita.jp +okayama.jp +okinawa.jp +osaka.jp +saga.jp +saitama.jp +shiga.jp +shimane.jp +shizuoka.jp +tochigi.jp +tokushima.jp +tokyo.jp +tottori.jp +toyama.jp +wakayama.jp +yamagata.jp +yamaguchi.jp +yamanashi.jp +栃木.jp +愛知.jp +愛媛.jp +兵庫.jp +熊本.jp +茨城.jp +北海道.jp +千葉.jp +和歌山.jp +長崎.jp +長野.jp +新潟.jp +青森.jp +静岡.jp +東京.jp +石川.jp +埼玉.jp +三重.jp +京都.jp +佐賀.jp +大分.jp +大阪.jp +奈良.jp +宮城.jp +宮崎.jp +富山.jp +山口.jp +山形.jp +山梨.jp +岩手.jp +岐阜.jp +岡山.jp +島根.jp +広島.jp +徳島.jp +沖縄.jp +滋賀.jp +神奈川.jp +福井.jp +福岡.jp +福島.jp +秋田.jp +群馬.jp +香川.jp +高知.jp +鳥取.jp +鹿児島.jp +// jp geographic type names +// http://jprs.jp/doc/rule/saisoku-1.html +*.kawasaki.jp +*.kitakyushu.jp +*.kobe.jp +*.nagoya.jp +*.sapporo.jp +*.sendai.jp +*.yokohama.jp +!city.kawasaki.jp +!city.kitakyushu.jp +!city.kobe.jp +!city.nagoya.jp +!city.sapporo.jp +!city.sendai.jp +!city.yokohama.jp +// 4th level registration +aisai.aichi.jp +ama.aichi.jp +anjo.aichi.jp +asuke.aichi.jp +chiryu.aichi.jp +chita.aichi.jp +fuso.aichi.jp +gamagori.aichi.jp +handa.aichi.jp +hazu.aichi.jp +hekinan.aichi.jp +higashiura.aichi.jp +ichinomiya.aichi.jp +inazawa.aichi.jp +inuyama.aichi.jp +isshiki.aichi.jp +iwakura.aichi.jp +kanie.aichi.jp +kariya.aichi.jp +kasugai.aichi.jp +kira.aichi.jp +kiyosu.aichi.jp +komaki.aichi.jp +konan.aichi.jp +kota.aichi.jp +mihama.aichi.jp +miyoshi.aichi.jp +nishio.aichi.jp +nisshin.aichi.jp +obu.aichi.jp +oguchi.aichi.jp +oharu.aichi.jp +okazaki.aichi.jp +owariasahi.aichi.jp +seto.aichi.jp +shikatsu.aichi.jp +shinshiro.aichi.jp +shitara.aichi.jp +tahara.aichi.jp +takahama.aichi.jp +tobishima.aichi.jp +toei.aichi.jp +togo.aichi.jp +tokai.aichi.jp +tokoname.aichi.jp +toyoake.aichi.jp +toyohashi.aichi.jp +toyokawa.aichi.jp +toyone.aichi.jp +toyota.aichi.jp +tsushima.aichi.jp +yatomi.aichi.jp +akita.akita.jp +daisen.akita.jp +fujisato.akita.jp +gojome.akita.jp +hachirogata.akita.jp +happou.akita.jp +higashinaruse.akita.jp +honjo.akita.jp +honjyo.akita.jp +ikawa.akita.jp +kamikoani.akita.jp +kamioka.akita.jp +katagami.akita.jp +kazuno.akita.jp +kitaakita.akita.jp +kosaka.akita.jp +kyowa.akita.jp +misato.akita.jp +mitane.akita.jp +moriyoshi.akita.jp +nikaho.akita.jp +noshiro.akita.jp +odate.akita.jp +oga.akita.jp +ogata.akita.jp +semboku.akita.jp +yokote.akita.jp +yurihonjo.akita.jp +aomori.aomori.jp +gonohe.aomori.jp +hachinohe.aomori.jp +hashikami.aomori.jp +hiranai.aomori.jp +hirosaki.aomori.jp +itayanagi.aomori.jp +kuroishi.aomori.jp +misawa.aomori.jp +mutsu.aomori.jp +nakadomari.aomori.jp +noheji.aomori.jp +oirase.aomori.jp +owani.aomori.jp +rokunohe.aomori.jp +sannohe.aomori.jp +shichinohe.aomori.jp +shingo.aomori.jp +takko.aomori.jp +towada.aomori.jp +tsugaru.aomori.jp +tsuruta.aomori.jp +abiko.chiba.jp +asahi.chiba.jp +chonan.chiba.jp +chosei.chiba.jp +choshi.chiba.jp +chuo.chiba.jp +funabashi.chiba.jp +futtsu.chiba.jp +hanamigawa.chiba.jp +ichihara.chiba.jp +ichikawa.chiba.jp +ichinomiya.chiba.jp +inzai.chiba.jp +isumi.chiba.jp +kamagaya.chiba.jp +kamogawa.chiba.jp +kashiwa.chiba.jp +katori.chiba.jp +katsuura.chiba.jp +kimitsu.chiba.jp +kisarazu.chiba.jp +kozaki.chiba.jp +kujukuri.chiba.jp +kyonan.chiba.jp +matsudo.chiba.jp +midori.chiba.jp +mihama.chiba.jp +minamiboso.chiba.jp +mobara.chiba.jp +mutsuzawa.chiba.jp +nagara.chiba.jp +nagareyama.chiba.jp +narashino.chiba.jp +narita.chiba.jp +noda.chiba.jp +oamishirasato.chiba.jp +omigawa.chiba.jp +onjuku.chiba.jp +otaki.chiba.jp +sakae.chiba.jp +sakura.chiba.jp +shimofusa.chiba.jp +shirako.chiba.jp +shiroi.chiba.jp +shisui.chiba.jp +sodegaura.chiba.jp +sosa.chiba.jp +tako.chiba.jp +tateyama.chiba.jp +togane.chiba.jp +tohnosho.chiba.jp +tomisato.chiba.jp +urayasu.chiba.jp +yachimata.chiba.jp +yachiyo.chiba.jp +yokaichiba.chiba.jp +yokoshibahikari.chiba.jp +yotsukaido.chiba.jp +ainan.ehime.jp +honai.ehime.jp +ikata.ehime.jp +imabari.ehime.jp +iyo.ehime.jp +kamijima.ehime.jp +kihoku.ehime.jp +kumakogen.ehime.jp +masaki.ehime.jp +matsuno.ehime.jp +matsuyama.ehime.jp +namikata.ehime.jp +niihama.ehime.jp +ozu.ehime.jp +saijo.ehime.jp +seiyo.ehime.jp +shikokuchuo.ehime.jp +tobe.ehime.jp +toon.ehime.jp +uchiko.ehime.jp +uwajima.ehime.jp +yawatahama.ehime.jp +echizen.fukui.jp +eiheiji.fukui.jp +fukui.fukui.jp +ikeda.fukui.jp +katsuyama.fukui.jp +mihama.fukui.jp +minamiechizen.fukui.jp +obama.fukui.jp +ohi.fukui.jp +ono.fukui.jp +sabae.fukui.jp +sakai.fukui.jp +takahama.fukui.jp +tsuruga.fukui.jp +wakasa.fukui.jp +ashiya.fukuoka.jp +buzen.fukuoka.jp +chikugo.fukuoka.jp +chikuho.fukuoka.jp +chikujo.fukuoka.jp +chikushino.fukuoka.jp +chikuzen.fukuoka.jp +chuo.fukuoka.jp +dazaifu.fukuoka.jp +fukuchi.fukuoka.jp +hakata.fukuoka.jp +higashi.fukuoka.jp +hirokawa.fukuoka.jp +hisayama.fukuoka.jp +iizuka.fukuoka.jp +inatsuki.fukuoka.jp +kaho.fukuoka.jp +kasuga.fukuoka.jp +kasuya.fukuoka.jp +kawara.fukuoka.jp +keisen.fukuoka.jp +koga.fukuoka.jp +kurate.fukuoka.jp +kurogi.fukuoka.jp +kurume.fukuoka.jp +minami.fukuoka.jp +miyako.fukuoka.jp +miyama.fukuoka.jp +miyawaka.fukuoka.jp +mizumaki.fukuoka.jp +munakata.fukuoka.jp +nakagawa.fukuoka.jp +nakama.fukuoka.jp +nishi.fukuoka.jp +nogata.fukuoka.jp +ogori.fukuoka.jp +okagaki.fukuoka.jp +okawa.fukuoka.jp +oki.fukuoka.jp +omuta.fukuoka.jp +onga.fukuoka.jp +onojo.fukuoka.jp +oto.fukuoka.jp +saigawa.fukuoka.jp +sasaguri.fukuoka.jp +shingu.fukuoka.jp +shinyoshitomi.fukuoka.jp +shonai.fukuoka.jp +soeda.fukuoka.jp +sue.fukuoka.jp +tachiarai.fukuoka.jp +tagawa.fukuoka.jp +takata.fukuoka.jp +toho.fukuoka.jp +toyotsu.fukuoka.jp +tsuiki.fukuoka.jp +ukiha.fukuoka.jp +umi.fukuoka.jp +usui.fukuoka.jp +yamada.fukuoka.jp +yame.fukuoka.jp +yanagawa.fukuoka.jp +yukuhashi.fukuoka.jp +aizubange.fukushima.jp +aizumisato.fukushima.jp +aizuwakamatsu.fukushima.jp +asakawa.fukushima.jp +bandai.fukushima.jp +date.fukushima.jp +fukushima.fukushima.jp +furudono.fukushima.jp +futaba.fukushima.jp +hanawa.fukushima.jp +higashi.fukushima.jp +hirata.fukushima.jp +hirono.fukushima.jp +iitate.fukushima.jp +inawashiro.fukushima.jp +ishikawa.fukushima.jp +iwaki.fukushima.jp +izumizaki.fukushima.jp +kagamiishi.fukushima.jp +kaneyama.fukushima.jp +kawamata.fukushima.jp +kitakata.fukushima.jp +kitashiobara.fukushima.jp +koori.fukushima.jp +koriyama.fukushima.jp +kunimi.fukushima.jp +miharu.fukushima.jp +mishima.fukushima.jp +namie.fukushima.jp +nango.fukushima.jp +nishiaizu.fukushima.jp +nishigo.fukushima.jp +okuma.fukushima.jp +omotego.fukushima.jp +ono.fukushima.jp +otama.fukushima.jp +samegawa.fukushima.jp +shimogo.fukushima.jp +shirakawa.fukushima.jp +showa.fukushima.jp +soma.fukushima.jp +sukagawa.fukushima.jp +taishin.fukushima.jp +tamakawa.fukushima.jp +tanagura.fukushima.jp +tenei.fukushima.jp +yabuki.fukushima.jp +yamato.fukushima.jp +yamatsuri.fukushima.jp +yanaizu.fukushima.jp +yugawa.fukushima.jp +anpachi.gifu.jp +ena.gifu.jp +gifu.gifu.jp +ginan.gifu.jp +godo.gifu.jp +gujo.gifu.jp +hashima.gifu.jp +hichiso.gifu.jp +hida.gifu.jp +higashishirakawa.gifu.jp +ibigawa.gifu.jp +ikeda.gifu.jp +kakamigahara.gifu.jp +kani.gifu.jp +kasahara.gifu.jp +kasamatsu.gifu.jp +kawaue.gifu.jp +kitagata.gifu.jp +mino.gifu.jp +minokamo.gifu.jp +mitake.gifu.jp +mizunami.gifu.jp +motosu.gifu.jp +nakatsugawa.gifu.jp +ogaki.gifu.jp +sakahogi.gifu.jp +seki.gifu.jp +sekigahara.gifu.jp +shirakawa.gifu.jp +tajimi.gifu.jp +takayama.gifu.jp +tarui.gifu.jp +toki.gifu.jp +tomika.gifu.jp +wanouchi.gifu.jp +yamagata.gifu.jp +yaotsu.gifu.jp +yoro.gifu.jp +annaka.gunma.jp +chiyoda.gunma.jp +fujioka.gunma.jp +higashiagatsuma.gunma.jp +isesaki.gunma.jp +itakura.gunma.jp +kanna.gunma.jp +kanra.gunma.jp +katashina.gunma.jp +kawaba.gunma.jp +kiryu.gunma.jp +kusatsu.gunma.jp +maebashi.gunma.jp +meiwa.gunma.jp +midori.gunma.jp +minakami.gunma.jp +naganohara.gunma.jp +nakanojo.gunma.jp +nanmoku.gunma.jp +numata.gunma.jp +oizumi.gunma.jp +ora.gunma.jp +ota.gunma.jp +shibukawa.gunma.jp +shimonita.gunma.jp +shinto.gunma.jp +showa.gunma.jp +takasaki.gunma.jp +takayama.gunma.jp +tamamura.gunma.jp +tatebayashi.gunma.jp +tomioka.gunma.jp +tsukiyono.gunma.jp +tsumagoi.gunma.jp +ueno.gunma.jp +yoshioka.gunma.jp +asaminami.hiroshima.jp +daiwa.hiroshima.jp +etajima.hiroshima.jp +fuchu.hiroshima.jp +fukuyama.hiroshima.jp +hatsukaichi.hiroshima.jp +higashihiroshima.hiroshima.jp +hongo.hiroshima.jp +jinsekikogen.hiroshima.jp +kaita.hiroshima.jp +kui.hiroshima.jp +kumano.hiroshima.jp +kure.hiroshima.jp +mihara.hiroshima.jp +miyoshi.hiroshima.jp +naka.hiroshima.jp +onomichi.hiroshima.jp +osakikamijima.hiroshima.jp +otake.hiroshima.jp +saka.hiroshima.jp +sera.hiroshima.jp +seranishi.hiroshima.jp +shinichi.hiroshima.jp +shobara.hiroshima.jp +takehara.hiroshima.jp +abashiri.hokkaido.jp +abira.hokkaido.jp +aibetsu.hokkaido.jp +akabira.hokkaido.jp +akkeshi.hokkaido.jp +asahikawa.hokkaido.jp +ashibetsu.hokkaido.jp +ashoro.hokkaido.jp +assabu.hokkaido.jp +atsuma.hokkaido.jp +bibai.hokkaido.jp +biei.hokkaido.jp +bifuka.hokkaido.jp +bihoro.hokkaido.jp +biratori.hokkaido.jp +chippubetsu.hokkaido.jp +chitose.hokkaido.jp +date.hokkaido.jp +ebetsu.hokkaido.jp +embetsu.hokkaido.jp +eniwa.hokkaido.jp +erimo.hokkaido.jp +esan.hokkaido.jp +esashi.hokkaido.jp +fukagawa.hokkaido.jp +fukushima.hokkaido.jp +furano.hokkaido.jp +furubira.hokkaido.jp +haboro.hokkaido.jp +hakodate.hokkaido.jp +hamatonbetsu.hokkaido.jp +hidaka.hokkaido.jp +higashikagura.hokkaido.jp +higashikawa.hokkaido.jp +hiroo.hokkaido.jp +hokuryu.hokkaido.jp +hokuto.hokkaido.jp +honbetsu.hokkaido.jp +horokanai.hokkaido.jp +horonobe.hokkaido.jp +ikeda.hokkaido.jp +imakane.hokkaido.jp +ishikari.hokkaido.jp +iwamizawa.hokkaido.jp +iwanai.hokkaido.jp +kamifurano.hokkaido.jp +kamikawa.hokkaido.jp +kamishihoro.hokkaido.jp +kamisunagawa.hokkaido.jp +kamoenai.hokkaido.jp +kayabe.hokkaido.jp +kembuchi.hokkaido.jp +kikonai.hokkaido.jp +kimobetsu.hokkaido.jp +kitahiroshima.hokkaido.jp +kitami.hokkaido.jp +kiyosato.hokkaido.jp +koshimizu.hokkaido.jp +kunneppu.hokkaido.jp +kuriyama.hokkaido.jp +kuromatsunai.hokkaido.jp +kushiro.hokkaido.jp +kutchan.hokkaido.jp +kyowa.hokkaido.jp +mashike.hokkaido.jp +matsumae.hokkaido.jp +mikasa.hokkaido.jp +minamifurano.hokkaido.jp +mombetsu.hokkaido.jp +moseushi.hokkaido.jp +mukawa.hokkaido.jp +muroran.hokkaido.jp +naie.hokkaido.jp +nakagawa.hokkaido.jp +nakasatsunai.hokkaido.jp +nakatombetsu.hokkaido.jp +nanae.hokkaido.jp +nanporo.hokkaido.jp +nayoro.hokkaido.jp +nemuro.hokkaido.jp +niikappu.hokkaido.jp +niki.hokkaido.jp +nishiokoppe.hokkaido.jp +noboribetsu.hokkaido.jp +numata.hokkaido.jp +obihiro.hokkaido.jp +obira.hokkaido.jp +oketo.hokkaido.jp +okoppe.hokkaido.jp +otaru.hokkaido.jp +otobe.hokkaido.jp +otofuke.hokkaido.jp +otoineppu.hokkaido.jp +oumu.hokkaido.jp +ozora.hokkaido.jp +pippu.hokkaido.jp +rankoshi.hokkaido.jp +rebun.hokkaido.jp +rikubetsu.hokkaido.jp +rishiri.hokkaido.jp +rishirifuji.hokkaido.jp +saroma.hokkaido.jp +sarufutsu.hokkaido.jp +shakotan.hokkaido.jp +shari.hokkaido.jp +shibecha.hokkaido.jp +shibetsu.hokkaido.jp +shikabe.hokkaido.jp +shikaoi.hokkaido.jp +shimamaki.hokkaido.jp +shimizu.hokkaido.jp +shimokawa.hokkaido.jp +shinshinotsu.hokkaido.jp +shintoku.hokkaido.jp +shiranuka.hokkaido.jp +shiraoi.hokkaido.jp +shiriuchi.hokkaido.jp +sobetsu.hokkaido.jp +sunagawa.hokkaido.jp +taiki.hokkaido.jp +takasu.hokkaido.jp +takikawa.hokkaido.jp +takinoue.hokkaido.jp +teshikaga.hokkaido.jp +tobetsu.hokkaido.jp +tohma.hokkaido.jp +tomakomai.hokkaido.jp +tomari.hokkaido.jp +toya.hokkaido.jp +toyako.hokkaido.jp +toyotomi.hokkaido.jp +toyoura.hokkaido.jp +tsubetsu.hokkaido.jp +tsukigata.hokkaido.jp +urakawa.hokkaido.jp +urausu.hokkaido.jp +uryu.hokkaido.jp +utashinai.hokkaido.jp +wakkanai.hokkaido.jp +wassamu.hokkaido.jp +yakumo.hokkaido.jp +yoichi.hokkaido.jp +aioi.hyogo.jp +akashi.hyogo.jp +ako.hyogo.jp +amagasaki.hyogo.jp +aogaki.hyogo.jp +asago.hyogo.jp +ashiya.hyogo.jp +awaji.hyogo.jp +fukusaki.hyogo.jp +goshiki.hyogo.jp +harima.hyogo.jp +himeji.hyogo.jp +ichikawa.hyogo.jp +inagawa.hyogo.jp +itami.hyogo.jp +kakogawa.hyogo.jp +kamigori.hyogo.jp +kamikawa.hyogo.jp +kasai.hyogo.jp +kasuga.hyogo.jp +kawanishi.hyogo.jp +miki.hyogo.jp +minamiawaji.hyogo.jp +nishinomiya.hyogo.jp +nishiwaki.hyogo.jp +ono.hyogo.jp +sanda.hyogo.jp +sannan.hyogo.jp +sasayama.hyogo.jp +sayo.hyogo.jp +shingu.hyogo.jp +shinonsen.hyogo.jp +shiso.hyogo.jp +sumoto.hyogo.jp +taishi.hyogo.jp +taka.hyogo.jp +takarazuka.hyogo.jp +takasago.hyogo.jp +takino.hyogo.jp +tamba.hyogo.jp +tatsuno.hyogo.jp +toyooka.hyogo.jp +yabu.hyogo.jp +yashiro.hyogo.jp +yoka.hyogo.jp +yokawa.hyogo.jp +ami.ibaraki.jp +asahi.ibaraki.jp +bando.ibaraki.jp +chikusei.ibaraki.jp +daigo.ibaraki.jp +fujishiro.ibaraki.jp +hitachi.ibaraki.jp +hitachinaka.ibaraki.jp +hitachiomiya.ibaraki.jp +hitachiota.ibaraki.jp +ibaraki.ibaraki.jp +ina.ibaraki.jp +inashiki.ibaraki.jp +itako.ibaraki.jp +iwama.ibaraki.jp +joso.ibaraki.jp +kamisu.ibaraki.jp +kasama.ibaraki.jp +kashima.ibaraki.jp +kasumigaura.ibaraki.jp +koga.ibaraki.jp +miho.ibaraki.jp +mito.ibaraki.jp +moriya.ibaraki.jp +naka.ibaraki.jp +namegata.ibaraki.jp +oarai.ibaraki.jp +ogawa.ibaraki.jp +omitama.ibaraki.jp +ryugasaki.ibaraki.jp +sakai.ibaraki.jp +sakuragawa.ibaraki.jp +shimodate.ibaraki.jp +shimotsuma.ibaraki.jp +shirosato.ibaraki.jp +sowa.ibaraki.jp +suifu.ibaraki.jp +takahagi.ibaraki.jp +tamatsukuri.ibaraki.jp +tokai.ibaraki.jp +tomobe.ibaraki.jp +tone.ibaraki.jp +toride.ibaraki.jp +tsuchiura.ibaraki.jp +tsukuba.ibaraki.jp +uchihara.ibaraki.jp +ushiku.ibaraki.jp +yachiyo.ibaraki.jp +yamagata.ibaraki.jp +yawara.ibaraki.jp +yuki.ibaraki.jp +anamizu.ishikawa.jp +hakui.ishikawa.jp +hakusan.ishikawa.jp +kaga.ishikawa.jp +kahoku.ishikawa.jp +kanazawa.ishikawa.jp +kawakita.ishikawa.jp +komatsu.ishikawa.jp +nakanoto.ishikawa.jp +nanao.ishikawa.jp +nomi.ishikawa.jp +nonoichi.ishikawa.jp +noto.ishikawa.jp +shika.ishikawa.jp +suzu.ishikawa.jp +tsubata.ishikawa.jp +tsurugi.ishikawa.jp +uchinada.ishikawa.jp +wajima.ishikawa.jp +fudai.iwate.jp +fujisawa.iwate.jp +hanamaki.iwate.jp +hiraizumi.iwate.jp +hirono.iwate.jp +ichinohe.iwate.jp +ichinoseki.iwate.jp +iwaizumi.iwate.jp +iwate.iwate.jp +joboji.iwate.jp +kamaishi.iwate.jp +kanegasaki.iwate.jp +karumai.iwate.jp +kawai.iwate.jp +kitakami.iwate.jp +kuji.iwate.jp +kunohe.iwate.jp +kuzumaki.iwate.jp +miyako.iwate.jp +mizusawa.iwate.jp +morioka.iwate.jp +ninohe.iwate.jp +noda.iwate.jp +ofunato.iwate.jp +oshu.iwate.jp +otsuchi.iwate.jp +rikuzentakata.iwate.jp +shiwa.iwate.jp +shizukuishi.iwate.jp +sumita.iwate.jp +tanohata.iwate.jp +tono.iwate.jp +yahaba.iwate.jp +yamada.iwate.jp +ayagawa.kagawa.jp +higashikagawa.kagawa.jp +kanonji.kagawa.jp +kotohira.kagawa.jp +manno.kagawa.jp +marugame.kagawa.jp +mitoyo.kagawa.jp +naoshima.kagawa.jp +sanuki.kagawa.jp +tadotsu.kagawa.jp +takamatsu.kagawa.jp +tonosho.kagawa.jp +uchinomi.kagawa.jp +utazu.kagawa.jp +zentsuji.kagawa.jp +akune.kagoshima.jp +amami.kagoshima.jp +hioki.kagoshima.jp +isa.kagoshima.jp +isen.kagoshima.jp +izumi.kagoshima.jp +kagoshima.kagoshima.jp +kanoya.kagoshima.jp +kawanabe.kagoshima.jp +kinko.kagoshima.jp +kouyama.kagoshima.jp +makurazaki.kagoshima.jp +matsumoto.kagoshima.jp +minamitane.kagoshima.jp +nakatane.kagoshima.jp +nishinoomote.kagoshima.jp +satsumasendai.kagoshima.jp +soo.kagoshima.jp +tarumizu.kagoshima.jp +yusui.kagoshima.jp +aikawa.kanagawa.jp +atsugi.kanagawa.jp +ayase.kanagawa.jp +chigasaki.kanagawa.jp +ebina.kanagawa.jp +fujisawa.kanagawa.jp +hadano.kanagawa.jp +hakone.kanagawa.jp +hiratsuka.kanagawa.jp +isehara.kanagawa.jp +kaisei.kanagawa.jp +kamakura.kanagawa.jp +kiyokawa.kanagawa.jp +matsuda.kanagawa.jp +minamiashigara.kanagawa.jp +miura.kanagawa.jp +nakai.kanagawa.jp +ninomiya.kanagawa.jp +odawara.kanagawa.jp +oi.kanagawa.jp +oiso.kanagawa.jp +sagamihara.kanagawa.jp +samukawa.kanagawa.jp +tsukui.kanagawa.jp +yamakita.kanagawa.jp +yamato.kanagawa.jp +yokosuka.kanagawa.jp +yugawara.kanagawa.jp +zama.kanagawa.jp +zushi.kanagawa.jp +aki.kochi.jp +geisei.kochi.jp +hidaka.kochi.jp +higashitsuno.kochi.jp +ino.kochi.jp +kagami.kochi.jp +kami.kochi.jp +kitagawa.kochi.jp +kochi.kochi.jp +mihara.kochi.jp +motoyama.kochi.jp +muroto.kochi.jp +nahari.kochi.jp +nakamura.kochi.jp +nankoku.kochi.jp +nishitosa.kochi.jp +niyodogawa.kochi.jp +ochi.kochi.jp +okawa.kochi.jp +otoyo.kochi.jp +otsuki.kochi.jp +sakawa.kochi.jp +sukumo.kochi.jp +susaki.kochi.jp +tosa.kochi.jp +tosashimizu.kochi.jp +toyo.kochi.jp +tsuno.kochi.jp +umaji.kochi.jp +yasuda.kochi.jp +yusuhara.kochi.jp +amakusa.kumamoto.jp +arao.kumamoto.jp +aso.kumamoto.jp +choyo.kumamoto.jp +gyokuto.kumamoto.jp +kamiamakusa.kumamoto.jp +kikuchi.kumamoto.jp +kumamoto.kumamoto.jp +mashiki.kumamoto.jp +mifune.kumamoto.jp +minamata.kumamoto.jp +minamioguni.kumamoto.jp +nagasu.kumamoto.jp +nishihara.kumamoto.jp +oguni.kumamoto.jp +ozu.kumamoto.jp +sumoto.kumamoto.jp +takamori.kumamoto.jp +uki.kumamoto.jp +uto.kumamoto.jp +yamaga.kumamoto.jp +yamato.kumamoto.jp +yatsushiro.kumamoto.jp +ayabe.kyoto.jp +fukuchiyama.kyoto.jp +higashiyama.kyoto.jp +ide.kyoto.jp +ine.kyoto.jp +joyo.kyoto.jp +kameoka.kyoto.jp +kamo.kyoto.jp +kita.kyoto.jp +kizu.kyoto.jp +kumiyama.kyoto.jp +kyotamba.kyoto.jp +kyotanabe.kyoto.jp +kyotango.kyoto.jp +maizuru.kyoto.jp +minami.kyoto.jp +minamiyamashiro.kyoto.jp +miyazu.kyoto.jp +muko.kyoto.jp +nagaokakyo.kyoto.jp +nakagyo.kyoto.jp +nantan.kyoto.jp +oyamazaki.kyoto.jp +sakyo.kyoto.jp +seika.kyoto.jp +tanabe.kyoto.jp +uji.kyoto.jp +ujitawara.kyoto.jp +wazuka.kyoto.jp +yamashina.kyoto.jp +yawata.kyoto.jp +asahi.mie.jp +inabe.mie.jp +ise.mie.jp +kameyama.mie.jp +kawagoe.mie.jp +kiho.mie.jp +kisosaki.mie.jp +kiwa.mie.jp +komono.mie.jp +kumano.mie.jp +kuwana.mie.jp +matsusaka.mie.jp +meiwa.mie.jp +mihama.mie.jp +minamiise.mie.jp +misugi.mie.jp +miyama.mie.jp +nabari.mie.jp +shima.mie.jp +suzuka.mie.jp +tado.mie.jp +taiki.mie.jp +taki.mie.jp +tamaki.mie.jp +toba.mie.jp +tsu.mie.jp +udono.mie.jp +ureshino.mie.jp +watarai.mie.jp +yokkaichi.mie.jp +furukawa.miyagi.jp +higashimatsushima.miyagi.jp +ishinomaki.miyagi.jp +iwanuma.miyagi.jp +kakuda.miyagi.jp +kami.miyagi.jp +kawasaki.miyagi.jp +marumori.miyagi.jp +matsushima.miyagi.jp +minamisanriku.miyagi.jp +misato.miyagi.jp +murata.miyagi.jp +natori.miyagi.jp +ogawara.miyagi.jp +ohira.miyagi.jp +onagawa.miyagi.jp +osaki.miyagi.jp +rifu.miyagi.jp +semine.miyagi.jp +shibata.miyagi.jp +shichikashuku.miyagi.jp +shikama.miyagi.jp +shiogama.miyagi.jp +shiroishi.miyagi.jp +tagajo.miyagi.jp +taiwa.miyagi.jp +tome.miyagi.jp +tomiya.miyagi.jp +wakuya.miyagi.jp +watari.miyagi.jp +yamamoto.miyagi.jp +zao.miyagi.jp +aya.miyazaki.jp +ebino.miyazaki.jp +gokase.miyazaki.jp +hyuga.miyazaki.jp +kadogawa.miyazaki.jp +kawaminami.miyazaki.jp +kijo.miyazaki.jp +kitagawa.miyazaki.jp +kitakata.miyazaki.jp +kitaura.miyazaki.jp +kobayashi.miyazaki.jp +kunitomi.miyazaki.jp +kushima.miyazaki.jp +mimata.miyazaki.jp +miyakonojo.miyazaki.jp +miyazaki.miyazaki.jp +morotsuka.miyazaki.jp +nichinan.miyazaki.jp +nishimera.miyazaki.jp +nobeoka.miyazaki.jp +saito.miyazaki.jp +shiiba.miyazaki.jp +shintomi.miyazaki.jp +takaharu.miyazaki.jp +takanabe.miyazaki.jp +takazaki.miyazaki.jp +tsuno.miyazaki.jp +achi.nagano.jp +agematsu.nagano.jp +anan.nagano.jp +aoki.nagano.jp +asahi.nagano.jp +azumino.nagano.jp +chikuhoku.nagano.jp +chikuma.nagano.jp +chino.nagano.jp +fujimi.nagano.jp +hakuba.nagano.jp +hara.nagano.jp +hiraya.nagano.jp +iida.nagano.jp +iijima.nagano.jp +iiyama.nagano.jp +iizuna.nagano.jp +ikeda.nagano.jp +ikusaka.nagano.jp +ina.nagano.jp +karuizawa.nagano.jp +kawakami.nagano.jp +kiso.nagano.jp +kisofukushima.nagano.jp +kitaaiki.nagano.jp +komagane.nagano.jp +komoro.nagano.jp +matsukawa.nagano.jp +matsumoto.nagano.jp +miasa.nagano.jp +minamiaiki.nagano.jp +minamimaki.nagano.jp +minamiminowa.nagano.jp +minowa.nagano.jp +miyada.nagano.jp +miyota.nagano.jp +mochizuki.nagano.jp +nagano.nagano.jp +nagawa.nagano.jp +nagiso.nagano.jp +nakagawa.nagano.jp +nakano.nagano.jp +nozawaonsen.nagano.jp +obuse.nagano.jp +ogawa.nagano.jp +okaya.nagano.jp +omachi.nagano.jp +omi.nagano.jp +ookuwa.nagano.jp +ooshika.nagano.jp +otaki.nagano.jp +otari.nagano.jp +sakae.nagano.jp +sakaki.nagano.jp +saku.nagano.jp +sakuho.nagano.jp +shimosuwa.nagano.jp +shinanomachi.nagano.jp +shiojiri.nagano.jp +suwa.nagano.jp +suzaka.nagano.jp +takagi.nagano.jp +takamori.nagano.jp +takayama.nagano.jp +tateshina.nagano.jp +tatsuno.nagano.jp +togakushi.nagano.jp +togura.nagano.jp +tomi.nagano.jp +ueda.nagano.jp +wada.nagano.jp +yamagata.nagano.jp +yamanouchi.nagano.jp +yasaka.nagano.jp +yasuoka.nagano.jp +chijiwa.nagasaki.jp +futsu.nagasaki.jp +goto.nagasaki.jp +hasami.nagasaki.jp +hirado.nagasaki.jp +iki.nagasaki.jp +isahaya.nagasaki.jp +kawatana.nagasaki.jp +kuchinotsu.nagasaki.jp +matsuura.nagasaki.jp +nagasaki.nagasaki.jp +obama.nagasaki.jp +omura.nagasaki.jp +oseto.nagasaki.jp +saikai.nagasaki.jp +sasebo.nagasaki.jp +seihi.nagasaki.jp +shimabara.nagasaki.jp +shinkamigoto.nagasaki.jp +togitsu.nagasaki.jp +tsushima.nagasaki.jp +unzen.nagasaki.jp +ando.nara.jp +gose.nara.jp +heguri.nara.jp +higashiyoshino.nara.jp +ikaruga.nara.jp +ikoma.nara.jp +kamikitayama.nara.jp +kanmaki.nara.jp +kashiba.nara.jp +kashihara.nara.jp +katsuragi.nara.jp +kawai.nara.jp +kawakami.nara.jp +kawanishi.nara.jp +koryo.nara.jp +kurotaki.nara.jp +mitsue.nara.jp +miyake.nara.jp +nara.nara.jp +nosegawa.nara.jp +oji.nara.jp +ouda.nara.jp +oyodo.nara.jp +sakurai.nara.jp +sango.nara.jp +shimoichi.nara.jp +shimokitayama.nara.jp +shinjo.nara.jp +soni.nara.jp +takatori.nara.jp +tawaramoto.nara.jp +tenkawa.nara.jp +tenri.nara.jp +uda.nara.jp +yamatokoriyama.nara.jp +yamatotakada.nara.jp +yamazoe.nara.jp +yoshino.nara.jp +aga.niigata.jp +agano.niigata.jp +gosen.niigata.jp +itoigawa.niigata.jp +izumozaki.niigata.jp +joetsu.niigata.jp +kamo.niigata.jp +kariwa.niigata.jp +kashiwazaki.niigata.jp +minamiuonuma.niigata.jp +mitsuke.niigata.jp +muika.niigata.jp +murakami.niigata.jp +myoko.niigata.jp +nagaoka.niigata.jp +niigata.niigata.jp +ojiya.niigata.jp +omi.niigata.jp +sado.niigata.jp +sanjo.niigata.jp +seiro.niigata.jp +seirou.niigata.jp +sekikawa.niigata.jp +shibata.niigata.jp +tagami.niigata.jp +tainai.niigata.jp +tochio.niigata.jp +tokamachi.niigata.jp +tsubame.niigata.jp +tsunan.niigata.jp +uonuma.niigata.jp +yahiko.niigata.jp +yoita.niigata.jp +yuzawa.niigata.jp +beppu.oita.jp +bungoono.oita.jp +bungotakada.oita.jp +hasama.oita.jp +hiji.oita.jp +himeshima.oita.jp +hita.oita.jp +kamitsue.oita.jp +kokonoe.oita.jp +kuju.oita.jp +kunisaki.oita.jp +kusu.oita.jp +oita.oita.jp +saiki.oita.jp +taketa.oita.jp +tsukumi.oita.jp +usa.oita.jp +usuki.oita.jp +yufu.oita.jp +akaiwa.okayama.jp +asakuchi.okayama.jp +bizen.okayama.jp +hayashima.okayama.jp +ibara.okayama.jp +kagamino.okayama.jp +kasaoka.okayama.jp +kibichuo.okayama.jp +kumenan.okayama.jp +kurashiki.okayama.jp +maniwa.okayama.jp +misaki.okayama.jp +nagi.okayama.jp +niimi.okayama.jp +nishiawakura.okayama.jp +okayama.okayama.jp +satosho.okayama.jp +setouchi.okayama.jp +shinjo.okayama.jp +shoo.okayama.jp +soja.okayama.jp +takahashi.okayama.jp +tamano.okayama.jp +tsuyama.okayama.jp +wake.okayama.jp +yakage.okayama.jp +aguni.okinawa.jp +ginowan.okinawa.jp +ginoza.okinawa.jp +gushikami.okinawa.jp +haebaru.okinawa.jp +higashi.okinawa.jp +hirara.okinawa.jp +iheya.okinawa.jp +ishigaki.okinawa.jp +ishikawa.okinawa.jp +itoman.okinawa.jp +izena.okinawa.jp +kadena.okinawa.jp +kin.okinawa.jp +kitadaito.okinawa.jp +kitanakagusuku.okinawa.jp +kumejima.okinawa.jp +kunigami.okinawa.jp +minamidaito.okinawa.jp +motobu.okinawa.jp +nago.okinawa.jp +naha.okinawa.jp +nakagusuku.okinawa.jp +nakijin.okinawa.jp +nanjo.okinawa.jp +nishihara.okinawa.jp +ogimi.okinawa.jp +okinawa.okinawa.jp +onna.okinawa.jp +shimoji.okinawa.jp +taketomi.okinawa.jp +tarama.okinawa.jp +tokashiki.okinawa.jp +tomigusuku.okinawa.jp +tonaki.okinawa.jp +urasoe.okinawa.jp +uruma.okinawa.jp +yaese.okinawa.jp +yomitan.okinawa.jp +yonabaru.okinawa.jp +yonaguni.okinawa.jp +zamami.okinawa.jp +abeno.osaka.jp +chihayaakasaka.osaka.jp +chuo.osaka.jp +daito.osaka.jp +fujiidera.osaka.jp +habikino.osaka.jp +hannan.osaka.jp +higashiosaka.osaka.jp +higashisumiyoshi.osaka.jp +higashiyodogawa.osaka.jp +hirakata.osaka.jp +ibaraki.osaka.jp +ikeda.osaka.jp +izumi.osaka.jp +izumiotsu.osaka.jp +izumisano.osaka.jp +kadoma.osaka.jp +kaizuka.osaka.jp +kanan.osaka.jp +kashiwara.osaka.jp +katano.osaka.jp +kawachinagano.osaka.jp +kishiwada.osaka.jp +kita.osaka.jp +kumatori.osaka.jp +matsubara.osaka.jp +minato.osaka.jp +minoh.osaka.jp +misaki.osaka.jp +moriguchi.osaka.jp +neyagawa.osaka.jp +nishi.osaka.jp +nose.osaka.jp +osakasayama.osaka.jp +sakai.osaka.jp +sayama.osaka.jp +sennan.osaka.jp +settsu.osaka.jp +shijonawate.osaka.jp +shimamoto.osaka.jp +suita.osaka.jp +tadaoka.osaka.jp +taishi.osaka.jp +tajiri.osaka.jp +takaishi.osaka.jp +takatsuki.osaka.jp +tondabayashi.osaka.jp +toyonaka.osaka.jp +toyono.osaka.jp +yao.osaka.jp +ariake.saga.jp +arita.saga.jp +fukudomi.saga.jp +genkai.saga.jp +hamatama.saga.jp +hizen.saga.jp +imari.saga.jp +kamimine.saga.jp +kanzaki.saga.jp +karatsu.saga.jp +kashima.saga.jp +kitagata.saga.jp +kitahata.saga.jp +kiyama.saga.jp +kouhoku.saga.jp +kyuragi.saga.jp +nishiarita.saga.jp +ogi.saga.jp +omachi.saga.jp +ouchi.saga.jp +saga.saga.jp +shiroishi.saga.jp +taku.saga.jp +tara.saga.jp +tosu.saga.jp +yoshinogari.saga.jp +arakawa.saitama.jp +asaka.saitama.jp +chichibu.saitama.jp +fujimi.saitama.jp +fujimino.saitama.jp +fukaya.saitama.jp +hanno.saitama.jp +hanyu.saitama.jp +hasuda.saitama.jp +hatogaya.saitama.jp +hatoyama.saitama.jp +hidaka.saitama.jp +higashichichibu.saitama.jp +higashimatsuyama.saitama.jp +honjo.saitama.jp +ina.saitama.jp +iruma.saitama.jp +iwatsuki.saitama.jp +kamiizumi.saitama.jp +kamikawa.saitama.jp +kamisato.saitama.jp +kasukabe.saitama.jp +kawagoe.saitama.jp +kawaguchi.saitama.jp +kawajima.saitama.jp +kazo.saitama.jp +kitamoto.saitama.jp +koshigaya.saitama.jp +kounosu.saitama.jp +kuki.saitama.jp +kumagaya.saitama.jp +matsubushi.saitama.jp +minano.saitama.jp +misato.saitama.jp +miyashiro.saitama.jp +miyoshi.saitama.jp +moroyama.saitama.jp +nagatoro.saitama.jp +namegawa.saitama.jp +niiza.saitama.jp +ogano.saitama.jp +ogawa.saitama.jp +ogose.saitama.jp +okegawa.saitama.jp +omiya.saitama.jp +otaki.saitama.jp +ranzan.saitama.jp +ryokami.saitama.jp +saitama.saitama.jp +sakado.saitama.jp +satte.saitama.jp +sayama.saitama.jp +shiki.saitama.jp +shiraoka.saitama.jp +soka.saitama.jp +sugito.saitama.jp +toda.saitama.jp +tokigawa.saitama.jp +tokorozawa.saitama.jp +tsurugashima.saitama.jp +urawa.saitama.jp +warabi.saitama.jp +yashio.saitama.jp +yokoze.saitama.jp +yono.saitama.jp +yorii.saitama.jp +yoshida.saitama.jp +yoshikawa.saitama.jp +yoshimi.saitama.jp +aisho.shiga.jp +gamo.shiga.jp +higashiomi.shiga.jp +hikone.shiga.jp +koka.shiga.jp +konan.shiga.jp +kosei.shiga.jp +koto.shiga.jp +kusatsu.shiga.jp +maibara.shiga.jp +moriyama.shiga.jp +nagahama.shiga.jp +nishiazai.shiga.jp +notogawa.shiga.jp +omihachiman.shiga.jp +otsu.shiga.jp +ritto.shiga.jp +ryuoh.shiga.jp +takashima.shiga.jp +takatsuki.shiga.jp +torahime.shiga.jp +toyosato.shiga.jp +yasu.shiga.jp +akagi.shimane.jp +ama.shimane.jp +gotsu.shimane.jp +hamada.shimane.jp +higashiizumo.shimane.jp +hikawa.shimane.jp +hikimi.shimane.jp +izumo.shimane.jp +kakinoki.shimane.jp +masuda.shimane.jp +matsue.shimane.jp +misato.shimane.jp +nishinoshima.shimane.jp +ohda.shimane.jp +okinoshima.shimane.jp +okuizumo.shimane.jp +shimane.shimane.jp +tamayu.shimane.jp +tsuwano.shimane.jp +unnan.shimane.jp +yakumo.shimane.jp +yasugi.shimane.jp +yatsuka.shimane.jp +arai.shizuoka.jp +atami.shizuoka.jp +fuji.shizuoka.jp +fujieda.shizuoka.jp +fujikawa.shizuoka.jp +fujinomiya.shizuoka.jp +fukuroi.shizuoka.jp +gotemba.shizuoka.jp +haibara.shizuoka.jp +hamamatsu.shizuoka.jp +higashiizu.shizuoka.jp +ito.shizuoka.jp +iwata.shizuoka.jp +izu.shizuoka.jp +izunokuni.shizuoka.jp +kakegawa.shizuoka.jp +kannami.shizuoka.jp +kawanehon.shizuoka.jp +kawazu.shizuoka.jp +kikugawa.shizuoka.jp +kosai.shizuoka.jp +makinohara.shizuoka.jp +matsuzaki.shizuoka.jp +minamiizu.shizuoka.jp +mishima.shizuoka.jp +morimachi.shizuoka.jp +nishiizu.shizuoka.jp +numazu.shizuoka.jp +omaezaki.shizuoka.jp +shimada.shizuoka.jp +shimizu.shizuoka.jp +shimoda.shizuoka.jp +shizuoka.shizuoka.jp +susono.shizuoka.jp +yaizu.shizuoka.jp +yoshida.shizuoka.jp +ashikaga.tochigi.jp +bato.tochigi.jp +haga.tochigi.jp +ichikai.tochigi.jp +iwafune.tochigi.jp +kaminokawa.tochigi.jp +kanuma.tochigi.jp +karasuyama.tochigi.jp +kuroiso.tochigi.jp +mashiko.tochigi.jp +mibu.tochigi.jp +moka.tochigi.jp +motegi.tochigi.jp +nasu.tochigi.jp +nasushiobara.tochigi.jp +nikko.tochigi.jp +nishikata.tochigi.jp +nogi.tochigi.jp +ohira.tochigi.jp +ohtawara.tochigi.jp +oyama.tochigi.jp +sakura.tochigi.jp +sano.tochigi.jp +shimotsuke.tochigi.jp +shioya.tochigi.jp +takanezawa.tochigi.jp +tochigi.tochigi.jp +tsuga.tochigi.jp +ujiie.tochigi.jp +utsunomiya.tochigi.jp +yaita.tochigi.jp +aizumi.tokushima.jp +anan.tokushima.jp +ichiba.tokushima.jp +itano.tokushima.jp +kainan.tokushima.jp +komatsushima.tokushima.jp +matsushige.tokushima.jp +mima.tokushima.jp +minami.tokushima.jp +miyoshi.tokushima.jp +mugi.tokushima.jp +nakagawa.tokushima.jp +naruto.tokushima.jp +sanagochi.tokushima.jp +shishikui.tokushima.jp +tokushima.tokushima.jp +wajiki.tokushima.jp +adachi.tokyo.jp +akiruno.tokyo.jp +akishima.tokyo.jp +aogashima.tokyo.jp +arakawa.tokyo.jp +bunkyo.tokyo.jp +chiyoda.tokyo.jp +chofu.tokyo.jp +chuo.tokyo.jp +edogawa.tokyo.jp +fuchu.tokyo.jp +fussa.tokyo.jp +hachijo.tokyo.jp +hachioji.tokyo.jp +hamura.tokyo.jp +higashikurume.tokyo.jp +higashimurayama.tokyo.jp +higashiyamato.tokyo.jp +hino.tokyo.jp +hinode.tokyo.jp +hinohara.tokyo.jp +inagi.tokyo.jp +itabashi.tokyo.jp +katsushika.tokyo.jp +kita.tokyo.jp +kiyose.tokyo.jp +kodaira.tokyo.jp +koganei.tokyo.jp +kokubunji.tokyo.jp +komae.tokyo.jp +koto.tokyo.jp +kouzushima.tokyo.jp +kunitachi.tokyo.jp +machida.tokyo.jp +meguro.tokyo.jp +minato.tokyo.jp +mitaka.tokyo.jp +mizuho.tokyo.jp +musashimurayama.tokyo.jp +musashino.tokyo.jp +nakano.tokyo.jp +nerima.tokyo.jp +ogasawara.tokyo.jp +okutama.tokyo.jp +ome.tokyo.jp +oshima.tokyo.jp +ota.tokyo.jp +setagaya.tokyo.jp +shibuya.tokyo.jp +shinagawa.tokyo.jp +shinjuku.tokyo.jp +suginami.tokyo.jp +sumida.tokyo.jp +tachikawa.tokyo.jp +taito.tokyo.jp +tama.tokyo.jp +toshima.tokyo.jp +chizu.tottori.jp +hino.tottori.jp +kawahara.tottori.jp +koge.tottori.jp +kotoura.tottori.jp +misasa.tottori.jp +nanbu.tottori.jp +nichinan.tottori.jp +sakaiminato.tottori.jp +tottori.tottori.jp +wakasa.tottori.jp +yazu.tottori.jp +yonago.tottori.jp +asahi.toyama.jp +fuchu.toyama.jp +fukumitsu.toyama.jp +funahashi.toyama.jp +himi.toyama.jp +imizu.toyama.jp +inami.toyama.jp +johana.toyama.jp +kamiichi.toyama.jp +kurobe.toyama.jp +nakaniikawa.toyama.jp +namerikawa.toyama.jp +nanto.toyama.jp +nyuzen.toyama.jp +oyabe.toyama.jp +taira.toyama.jp +takaoka.toyama.jp +tateyama.toyama.jp +toga.toyama.jp +tonami.toyama.jp +toyama.toyama.jp +unazuki.toyama.jp +uozu.toyama.jp +yamada.toyama.jp +arida.wakayama.jp +aridagawa.wakayama.jp +gobo.wakayama.jp +hashimoto.wakayama.jp +hidaka.wakayama.jp +hirogawa.wakayama.jp +inami.wakayama.jp +iwade.wakayama.jp +kainan.wakayama.jp +kamitonda.wakayama.jp +katsuragi.wakayama.jp +kimino.wakayama.jp +kinokawa.wakayama.jp +kitayama.wakayama.jp +koya.wakayama.jp +koza.wakayama.jp +kozagawa.wakayama.jp +kudoyama.wakayama.jp +kushimoto.wakayama.jp +mihama.wakayama.jp +misato.wakayama.jp +nachikatsuura.wakayama.jp +shingu.wakayama.jp +shirahama.wakayama.jp +taiji.wakayama.jp +tanabe.wakayama.jp +wakayama.wakayama.jp +yuasa.wakayama.jp +yura.wakayama.jp +asahi.yamagata.jp +funagata.yamagata.jp +higashine.yamagata.jp +iide.yamagata.jp +kahoku.yamagata.jp +kaminoyama.yamagata.jp +kaneyama.yamagata.jp +kawanishi.yamagata.jp +mamurogawa.yamagata.jp +mikawa.yamagata.jp +murayama.yamagata.jp +nagai.yamagata.jp +nakayama.yamagata.jp +nanyo.yamagata.jp +nishikawa.yamagata.jp +obanazawa.yamagata.jp +oe.yamagata.jp +oguni.yamagata.jp +ohkura.yamagata.jp +oishida.yamagata.jp +sagae.yamagata.jp +sakata.yamagata.jp +sakegawa.yamagata.jp +shinjo.yamagata.jp +shirataka.yamagata.jp +shonai.yamagata.jp +takahata.yamagata.jp +tendo.yamagata.jp +tozawa.yamagata.jp +tsuruoka.yamagata.jp +yamagata.yamagata.jp +yamanobe.yamagata.jp +yonezawa.yamagata.jp +yuza.yamagata.jp +abu.yamaguchi.jp +hagi.yamaguchi.jp +hikari.yamaguchi.jp +hofu.yamaguchi.jp +iwakuni.yamaguchi.jp +kudamatsu.yamaguchi.jp +mitou.yamaguchi.jp +nagato.yamaguchi.jp +oshima.yamaguchi.jp +shimonoseki.yamaguchi.jp +shunan.yamaguchi.jp +tabuse.yamaguchi.jp +tokuyama.yamaguchi.jp +toyota.yamaguchi.jp +ube.yamaguchi.jp +yuu.yamaguchi.jp +chuo.yamanashi.jp +doshi.yamanashi.jp +fuefuki.yamanashi.jp +fujikawa.yamanashi.jp +fujikawaguchiko.yamanashi.jp +fujiyoshida.yamanashi.jp +hayakawa.yamanashi.jp +hokuto.yamanashi.jp +ichikawamisato.yamanashi.jp +kai.yamanashi.jp +kofu.yamanashi.jp +koshu.yamanashi.jp +kosuge.yamanashi.jp +minami-alps.yamanashi.jp +minobu.yamanashi.jp +nakamichi.yamanashi.jp +nanbu.yamanashi.jp +narusawa.yamanashi.jp +nirasaki.yamanashi.jp +nishikatsura.yamanashi.jp +oshino.yamanashi.jp +otsuki.yamanashi.jp +showa.yamanashi.jp +tabayama.yamanashi.jp +tsuru.yamanashi.jp +uenohara.yamanashi.jp +yamanakako.yamanashi.jp +yamanashi.yamanashi.jp + +// ke : http://www.kenic.or.ke/index.php/en/ke-domains/ke-domains +ke +ac.ke +co.ke +go.ke +info.ke +me.ke +mobi.ke +ne.ke +or.ke +sc.ke + +// kg : http://www.domain.kg/dmn_n.html +kg +org.kg +net.kg +com.kg +edu.kg +gov.kg +mil.kg + +// kh : http://www.mptc.gov.kh/dns_registration.htm +*.kh + +// ki : http://www.ki/dns/index.html +ki +edu.ki +biz.ki +net.ki +org.ki +gov.ki +info.ki +com.ki + +// km : https://en.wikipedia.org/wiki/.km +// http://www.domaine.km/documents/charte.doc +km +org.km +nom.km +gov.km +prd.km +tm.km +edu.km +mil.km +ass.km +com.km +// These are only mentioned as proposed suggestions at domaine.km, but +// https://en.wikipedia.org/wiki/.km says they're available for registration: +coop.km +asso.km +presse.km +medecin.km +notaires.km +pharmaciens.km +veterinaire.km +gouv.km + +// kn : https://en.wikipedia.org/wiki/.kn +// http://www.dot.kn/domainRules.html +kn +net.kn +org.kn +edu.kn +gov.kn + +// kp : http://www.kcce.kp/en_index.php +kp +com.kp +edu.kp +gov.kp +org.kp +rep.kp +tra.kp + +// kr : https://en.wikipedia.org/wiki/.kr +// see also: http://domain.nida.or.kr/eng/registration.jsp +kr +ac.kr +co.kr +es.kr +go.kr +hs.kr +kg.kr +mil.kr +ms.kr +ne.kr +or.kr +pe.kr +re.kr +sc.kr +// kr geographical names +busan.kr +chungbuk.kr +chungnam.kr +daegu.kr +daejeon.kr +gangwon.kr +gwangju.kr +gyeongbuk.kr +gyeonggi.kr +gyeongnam.kr +incheon.kr +jeju.kr +jeonbuk.kr +jeonnam.kr +seoul.kr +ulsan.kr + +// kw : https://www.nic.kw/policies/ +// Confirmed by registry +kw +com.kw +edu.kw +emb.kw +gov.kw +ind.kw +net.kw +org.kw + +// ky : http://www.icta.ky/da_ky_reg_dom.php +// Confirmed by registry 2008-06-17 +ky +com.ky +edu.ky +net.ky +org.ky + +// kz : https://en.wikipedia.org/wiki/.kz +// see also: http://www.nic.kz/rules/index.jsp +kz +org.kz +edu.kz +net.kz +gov.kz +mil.kz +com.kz + +// la : https://en.wikipedia.org/wiki/.la +// Submitted by registry +la +int.la +net.la +info.la +edu.la +gov.la +per.la +com.la +org.la + +// lb : https://en.wikipedia.org/wiki/.lb +// Submitted by registry +lb +com.lb +edu.lb +gov.lb +net.lb +org.lb + +// lc : https://en.wikipedia.org/wiki/.lc +// see also: http://www.nic.lc/rules.htm +lc +com.lc +net.lc +co.lc +org.lc +edu.lc +gov.lc + +// li : https://en.wikipedia.org/wiki/.li +li + +// lk : https://www.nic.lk/index.php/domain-registration/lk-domain-naming-structure +lk +gov.lk +sch.lk +net.lk +int.lk +com.lk +org.lk +edu.lk +ngo.lk +soc.lk +web.lk +ltd.lk +assn.lk +grp.lk +hotel.lk +ac.lk + +// lr : http://psg.com/dns/lr/lr.txt +// Submitted by registry +lr +com.lr +edu.lr +gov.lr +org.lr +net.lr + +// ls : http://www.nic.ls/ +// Confirmed by registry +ls +ac.ls +biz.ls +co.ls +edu.ls +gov.ls +info.ls +net.ls +org.ls +sc.ls + +// lt : https://en.wikipedia.org/wiki/.lt +lt +// gov.lt : http://www.gov.lt/index_en.php +gov.lt + +// lu : http://www.dns.lu/en/ +lu + +// lv : http://www.nic.lv/DNS/En/generic.php +lv +com.lv +edu.lv +gov.lv +org.lv +mil.lv +id.lv +net.lv +asn.lv +conf.lv + +// ly : http://www.nic.ly/regulations.php +ly +com.ly +net.ly +gov.ly +plc.ly +edu.ly +sch.ly +med.ly +org.ly +id.ly + +// ma : https://en.wikipedia.org/wiki/.ma +// http://www.anrt.ma/fr/admin/download/upload/file_fr782.pdf +ma +co.ma +net.ma +gov.ma +org.ma +ac.ma +press.ma + +// mc : http://www.nic.mc/ +mc +tm.mc +asso.mc + +// md : https://en.wikipedia.org/wiki/.md +md + +// me : https://en.wikipedia.org/wiki/.me +me +co.me +net.me +org.me +edu.me +ac.me +gov.me +its.me +priv.me + +// mg : http://nic.mg/nicmg/?page_id=39 +mg +org.mg +nom.mg +gov.mg +prd.mg +tm.mg +edu.mg +mil.mg +com.mg +co.mg + +// mh : https://en.wikipedia.org/wiki/.mh +mh + +// mil : https://en.wikipedia.org/wiki/.mil +mil + +// mk : https://en.wikipedia.org/wiki/.mk +// see also: http://dns.marnet.net.mk/postapka.php +mk +com.mk +org.mk +net.mk +edu.mk +gov.mk +inf.mk +name.mk + +// ml : http://www.gobin.info/domainname/ml-template.doc +// see also: https://en.wikipedia.org/wiki/.ml +ml +com.ml +edu.ml +gouv.ml +gov.ml +net.ml +org.ml +presse.ml + +// mm : https://en.wikipedia.org/wiki/.mm +*.mm + +// mn : https://en.wikipedia.org/wiki/.mn +mn +gov.mn +edu.mn +org.mn + +// mo : http://www.monic.net.mo/ +mo +com.mo +net.mo +org.mo +edu.mo +gov.mo + +// mobi : https://en.wikipedia.org/wiki/.mobi +mobi + +// mp : http://www.dot.mp/ +// Confirmed by registry 2008-06-17 +mp + +// mq : https://en.wikipedia.org/wiki/.mq +mq + +// mr : https://en.wikipedia.org/wiki/.mr +mr +gov.mr + +// ms : http://www.nic.ms/pdf/MS_Domain_Name_Rules.pdf +ms +com.ms +edu.ms +gov.ms +net.ms +org.ms + +// mt : https://www.nic.org.mt/go/policy +// Submitted by registry +mt +com.mt +edu.mt +net.mt +org.mt + +// mu : https://en.wikipedia.org/wiki/.mu +mu +com.mu +net.mu +org.mu +gov.mu +ac.mu +co.mu +or.mu + +// museum : https://welcome.museum/wp-content/uploads/2018/05/20180525-Registration-Policy-MUSEUM-EN_VF-2.pdf https://welcome.museum/buy-your-dot-museum-2/ +museum + +// mv : https://en.wikipedia.org/wiki/.mv +// "mv" included because, contra Wikipedia, google.mv exists. +mv +aero.mv +biz.mv +com.mv +coop.mv +edu.mv +gov.mv +info.mv +int.mv +mil.mv +museum.mv +name.mv +net.mv +org.mv +pro.mv + +// mw : http://www.registrar.mw/ +mw +ac.mw +biz.mw +co.mw +com.mw +coop.mw +edu.mw +gov.mw +int.mw +museum.mw +net.mw +org.mw + +// mx : http://www.nic.mx/ +// Submitted by registry +mx +com.mx +org.mx +gob.mx +edu.mx +net.mx + +// my : http://www.mynic.my/ +// Available strings: https://mynic.my/resources/domains/buying-a-domain/ +my +biz.my +com.my +edu.my +gov.my +mil.my +name.my +net.my +org.my + +// mz : http://www.uem.mz/ +// Submitted by registry +mz +ac.mz +adv.mz +co.mz +edu.mz +gov.mz +mil.mz +net.mz +org.mz + +// na : http://www.na-nic.com.na/ +// http://www.info.na/domain/ +na +info.na +pro.na +name.na +school.na +or.na +dr.na +us.na +mx.na +ca.na +in.na +cc.na +tv.na +ws.na +mobi.na +co.na +com.na +org.na + +// name : has 2nd-level tlds, but there's no list of them +name + +// nc : http://www.cctld.nc/ +nc +asso.nc +nom.nc + +// ne : https://en.wikipedia.org/wiki/.ne +ne + +// net : https://en.wikipedia.org/wiki/.net +net + +// nf : https://en.wikipedia.org/wiki/.nf +nf +com.nf +net.nf +per.nf +rec.nf +web.nf +arts.nf +firm.nf +info.nf +other.nf +store.nf + +// ng : http://www.nira.org.ng/index.php/join-us/register-ng-domain/189-nira-slds +ng +com.ng +edu.ng +gov.ng +i.ng +mil.ng +mobi.ng +name.ng +net.ng +org.ng +sch.ng + +// ni : http://www.nic.ni/ +ni +ac.ni +biz.ni +co.ni +com.ni +edu.ni +gob.ni +in.ni +info.ni +int.ni +mil.ni +net.ni +nom.ni +org.ni +web.ni + +// nl : https://en.wikipedia.org/wiki/.nl +// https://www.sidn.nl/ +// ccTLD for the Netherlands +nl + +// no : https://www.norid.no/en/om-domenenavn/regelverk-for-no/ +// Norid geographical second level domains : https://www.norid.no/en/om-domenenavn/regelverk-for-no/vedlegg-b/ +// Norid category second level domains : https://www.norid.no/en/om-domenenavn/regelverk-for-no/vedlegg-c/ +// Norid category second-level domains managed by parties other than Norid : https://www.norid.no/en/om-domenenavn/regelverk-for-no/vedlegg-d/ +// RSS feed: https://teknisk.norid.no/en/feed/ +no +// Norid category second level domains : https://www.norid.no/en/om-domenenavn/regelverk-for-no/vedlegg-c/ +fhs.no +vgs.no +fylkesbibl.no +folkebibl.no +museum.no +idrett.no +priv.no +// Norid category second-level domains managed by parties other than Norid : https://www.norid.no/en/om-domenenavn/regelverk-for-no/vedlegg-d/ +mil.no +stat.no +dep.no +kommune.no +herad.no +// Norid geographical second level domains : https://www.norid.no/en/om-domenenavn/regelverk-for-no/vedlegg-b/ +// counties +aa.no +ah.no +bu.no +fm.no +hl.no +hm.no +jan-mayen.no +mr.no +nl.no +nt.no +of.no +ol.no +oslo.no +rl.no +sf.no +st.no +svalbard.no +tm.no +tr.no +va.no +vf.no +// primary and lower secondary schools per county +gs.aa.no +gs.ah.no +gs.bu.no +gs.fm.no +gs.hl.no +gs.hm.no +gs.jan-mayen.no +gs.mr.no +gs.nl.no +gs.nt.no +gs.of.no +gs.ol.no +gs.oslo.no +gs.rl.no +gs.sf.no +gs.st.no +gs.svalbard.no +gs.tm.no +gs.tr.no +gs.va.no +gs.vf.no +// cities +akrehamn.no +åkrehamn.no +algard.no +ålgård.no +arna.no +brumunddal.no +bryne.no +bronnoysund.no +brønnøysund.no +drobak.no +drøbak.no +egersund.no +fetsund.no +floro.no +florø.no +fredrikstad.no +hokksund.no +honefoss.no +hønefoss.no +jessheim.no +jorpeland.no +jørpeland.no +kirkenes.no +kopervik.no +krokstadelva.no +langevag.no +langevåg.no +leirvik.no +mjondalen.no +mjøndalen.no +mo-i-rana.no +mosjoen.no +mosjøen.no +nesoddtangen.no +orkanger.no +osoyro.no +osøyro.no +raholt.no +råholt.no +sandnessjoen.no +sandnessjøen.no +skedsmokorset.no +slattum.no +spjelkavik.no +stathelle.no +stavern.no +stjordalshalsen.no +stjørdalshalsen.no +tananger.no +tranby.no +vossevangen.no +// communities +afjord.no +åfjord.no +agdenes.no +al.no +ål.no +alesund.no +ålesund.no +alstahaug.no +alta.no +áltá.no +alaheadju.no +álaheadju.no +alvdal.no +amli.no +åmli.no +amot.no +åmot.no +andebu.no +andoy.no +andøy.no +andasuolo.no +ardal.no +årdal.no +aremark.no +arendal.no +ås.no +aseral.no +åseral.no +asker.no +askim.no +askvoll.no +askoy.no +askøy.no +asnes.no +åsnes.no +audnedaln.no +aukra.no +aure.no +aurland.no +aurskog-holand.no +aurskog-høland.no +austevoll.no +austrheim.no +averoy.no +averøy.no +balestrand.no +ballangen.no +balat.no +bálát.no +balsfjord.no +bahccavuotna.no +báhccavuotna.no +bamble.no +bardu.no +beardu.no +beiarn.no +bajddar.no +bájddar.no +baidar.no +báidár.no +berg.no +bergen.no +berlevag.no +berlevåg.no +bearalvahki.no +bearalváhki.no +bindal.no +birkenes.no +bjarkoy.no +bjarkøy.no +bjerkreim.no +bjugn.no +bodo.no +bodø.no +badaddja.no +bådåddjå.no +budejju.no +bokn.no +bremanger.no +bronnoy.no +brønnøy.no +bygland.no +bykle.no +barum.no +bærum.no +bo.telemark.no +bø.telemark.no +bo.nordland.no +bø.nordland.no +bievat.no +bievát.no +bomlo.no +bømlo.no +batsfjord.no +båtsfjord.no +bahcavuotna.no +báhcavuotna.no +dovre.no +drammen.no +drangedal.no +dyroy.no +dyrøy.no +donna.no +dønna.no +eid.no +eidfjord.no +eidsberg.no +eidskog.no +eidsvoll.no +eigersund.no +elverum.no +enebakk.no +engerdal.no +etne.no +etnedal.no +evenes.no +evenassi.no +evenášši.no +evje-og-hornnes.no +farsund.no +fauske.no +fuossko.no +fuoisku.no +fedje.no +fet.no +finnoy.no +finnøy.no +fitjar.no +fjaler.no +fjell.no +flakstad.no +flatanger.no +flekkefjord.no +flesberg.no +flora.no +fla.no +flå.no +folldal.no +forsand.no +fosnes.no +frei.no +frogn.no +froland.no +frosta.no +frana.no +fræna.no +froya.no +frøya.no +fusa.no +fyresdal.no +forde.no +førde.no +gamvik.no +gangaviika.no +gáŋgaviika.no +gaular.no +gausdal.no +gildeskal.no +gildeskål.no +giske.no +gjemnes.no +gjerdrum.no +gjerstad.no +gjesdal.no +gjovik.no +gjøvik.no +gloppen.no +gol.no +gran.no +grane.no +granvin.no +gratangen.no +grimstad.no +grong.no +kraanghke.no +kråanghke.no +grue.no +gulen.no +hadsel.no +halden.no +halsa.no +hamar.no +hamaroy.no +habmer.no +hábmer.no +hapmir.no +hápmir.no +hammerfest.no +hammarfeasta.no +hámmárfeasta.no +haram.no +hareid.no +harstad.no +hasvik.no +aknoluokta.no +ákŋoluokta.no +hattfjelldal.no +aarborte.no +haugesund.no +hemne.no +hemnes.no +hemsedal.no +heroy.more-og-romsdal.no +herøy.møre-og-romsdal.no +heroy.nordland.no +herøy.nordland.no +hitra.no +hjartdal.no +hjelmeland.no +hobol.no +hobøl.no +hof.no +hol.no +hole.no +holmestrand.no +holtalen.no +holtålen.no +hornindal.no +horten.no +hurdal.no +hurum.no +hvaler.no +hyllestad.no +hagebostad.no +hægebostad.no +hoyanger.no +høyanger.no +hoylandet.no +høylandet.no +ha.no +hå.no +ibestad.no +inderoy.no +inderøy.no +iveland.no +jevnaker.no +jondal.no +jolster.no +jølster.no +karasjok.no +karasjohka.no +kárášjohka.no +karlsoy.no +galsa.no +gálsá.no +karmoy.no +karmøy.no +kautokeino.no +guovdageaidnu.no +klepp.no +klabu.no +klæbu.no +kongsberg.no +kongsvinger.no +kragero.no +kragerø.no +kristiansand.no +kristiansund.no +krodsherad.no +krødsherad.no +kvalsund.no +rahkkeravju.no +ráhkkerávju.no +kvam.no +kvinesdal.no +kvinnherad.no +kviteseid.no +kvitsoy.no +kvitsøy.no +kvafjord.no +kvæfjord.no +giehtavuoatna.no +kvanangen.no +kvænangen.no +navuotna.no +návuotna.no +kafjord.no +kåfjord.no +gaivuotna.no +gáivuotna.no +larvik.no +lavangen.no +lavagis.no +loabat.no +loabát.no +lebesby.no +davvesiida.no +leikanger.no +leirfjord.no +leka.no +leksvik.no +lenvik.no +leangaviika.no +leaŋgaviika.no +lesja.no +levanger.no +lier.no +lierne.no +lillehammer.no +lillesand.no +lindesnes.no +lindas.no +lindås.no +lom.no +loppa.no +lahppi.no +láhppi.no +lund.no +lunner.no +luroy.no +lurøy.no +luster.no +lyngdal.no +lyngen.no +ivgu.no +lardal.no +lerdal.no +lærdal.no +lodingen.no +lødingen.no +lorenskog.no +lørenskog.no +loten.no +løten.no +malvik.no +masoy.no +måsøy.no +muosat.no +muosát.no +mandal.no +marker.no +marnardal.no +masfjorden.no +meland.no +meldal.no +melhus.no +meloy.no +meløy.no +meraker.no +meråker.no +moareke.no +moåreke.no +midsund.no +midtre-gauldal.no +modalen.no +modum.no +molde.no +moskenes.no +moss.no +mosvik.no +malselv.no +målselv.no +malatvuopmi.no +málatvuopmi.no +namdalseid.no +aejrie.no +namsos.no +namsskogan.no +naamesjevuemie.no +nååmesjevuemie.no +laakesvuemie.no +nannestad.no +narvik.no +narviika.no +naustdal.no +nedre-eiker.no +nes.akershus.no +nes.buskerud.no +nesna.no +nesodden.no +nesseby.no +unjarga.no +unjárga.no +nesset.no +nissedal.no +nittedal.no +nord-aurdal.no +nord-fron.no +nord-odal.no +norddal.no +nordkapp.no +davvenjarga.no +davvenjárga.no +nordre-land.no +nordreisa.no +raisa.no +ráisa.no +nore-og-uvdal.no +notodden.no +naroy.no +nærøy.no +notteroy.no +nøtterøy.no +odda.no +oksnes.no +øksnes.no +oppdal.no +oppegard.no +oppegård.no +orkdal.no +orland.no +ørland.no +orskog.no +ørskog.no +orsta.no +ørsta.no +os.hedmark.no +os.hordaland.no +osen.no +osteroy.no +osterøy.no +ostre-toten.no +østre-toten.no +overhalla.no +ovre-eiker.no +øvre-eiker.no +oyer.no +øyer.no +oygarden.no +øygarden.no +oystre-slidre.no +øystre-slidre.no +porsanger.no +porsangu.no +porsáŋgu.no +porsgrunn.no +radoy.no +radøy.no +rakkestad.no +rana.no +ruovat.no +randaberg.no +rauma.no +rendalen.no +rennebu.no +rennesoy.no +rennesøy.no +rindal.no +ringebu.no +ringerike.no +ringsaker.no +rissa.no +risor.no +risør.no +roan.no +rollag.no +rygge.no +ralingen.no +rælingen.no +rodoy.no +rødøy.no +romskog.no +rømskog.no +roros.no +røros.no +rost.no +røst.no +royken.no +røyken.no +royrvik.no +røyrvik.no +rade.no +råde.no +salangen.no +siellak.no +saltdal.no +salat.no +sálát.no +sálat.no +samnanger.no +sande.more-og-romsdal.no +sande.møre-og-romsdal.no +sande.vestfold.no +sandefjord.no +sandnes.no +sandoy.no +sandøy.no +sarpsborg.no +sauda.no +sauherad.no +sel.no +selbu.no +selje.no +seljord.no +sigdal.no +siljan.no +sirdal.no +skaun.no +skedsmo.no +ski.no +skien.no +skiptvet.no +skjervoy.no +skjervøy.no +skierva.no +skiervá.no +skjak.no +skjåk.no +skodje.no +skanland.no +skånland.no +skanit.no +skánit.no +smola.no +smøla.no +snillfjord.no +snasa.no +snåsa.no +snoasa.no +snaase.no +snåase.no +sogndal.no +sokndal.no +sola.no +solund.no +songdalen.no +sortland.no +spydeberg.no +stange.no +stavanger.no +steigen.no +steinkjer.no +stjordal.no +stjørdal.no +stokke.no +stor-elvdal.no +stord.no +stordal.no +storfjord.no +omasvuotna.no +strand.no +stranda.no +stryn.no +sula.no +suldal.no +sund.no +sunndal.no +surnadal.no +sveio.no +svelvik.no +sykkylven.no +sogne.no +søgne.no +somna.no +sømna.no +sondre-land.no +søndre-land.no +sor-aurdal.no +sør-aurdal.no +sor-fron.no +sør-fron.no +sor-odal.no +sør-odal.no +sor-varanger.no +sør-varanger.no +matta-varjjat.no +mátta-várjjat.no +sorfold.no +sørfold.no +sorreisa.no +sørreisa.no +sorum.no +sørum.no +tana.no +deatnu.no +time.no +tingvoll.no +tinn.no +tjeldsund.no +dielddanuorri.no +tjome.no +tjøme.no +tokke.no +tolga.no +torsken.no +tranoy.no +tranøy.no +tromso.no +tromsø.no +tromsa.no +romsa.no +trondheim.no +troandin.no +trysil.no +trana.no +træna.no +trogstad.no +trøgstad.no +tvedestrand.no +tydal.no +tynset.no +tysfjord.no +divtasvuodna.no +divttasvuotna.no +tysnes.no +tysvar.no +tysvær.no +tonsberg.no +tønsberg.no +ullensaker.no +ullensvang.no +ulvik.no +utsira.no +vadso.no +vadsø.no +cahcesuolo.no +čáhcesuolo.no +vaksdal.no +valle.no +vang.no +vanylven.no +vardo.no +vardø.no +varggat.no +várggát.no +vefsn.no +vaapste.no +vega.no +vegarshei.no +vegårshei.no +vennesla.no +verdal.no +verran.no +vestby.no +vestnes.no +vestre-slidre.no +vestre-toten.no +vestvagoy.no +vestvågøy.no +vevelstad.no +vik.no +vikna.no +vindafjord.no +volda.no +voss.no +varoy.no +værøy.no +vagan.no +vågan.no +voagat.no +vagsoy.no +vågsøy.no +vaga.no +vågå.no +valer.ostfold.no +våler.østfold.no +valer.hedmark.no +våler.hedmark.no + +// np : http://www.mos.com.np/register.html +*.np + +// nr : http://cenpac.net.nr/dns/index.html +// Submitted by registry +nr +biz.nr +info.nr +gov.nr +edu.nr +org.nr +net.nr +com.nr + +// nu : https://en.wikipedia.org/wiki/.nu +nu + +// nz : https://en.wikipedia.org/wiki/.nz +// Submitted by registry +nz +ac.nz +co.nz +cri.nz +geek.nz +gen.nz +govt.nz +health.nz +iwi.nz +kiwi.nz +maori.nz +mil.nz +māori.nz +net.nz +org.nz +parliament.nz +school.nz + +// om : https://en.wikipedia.org/wiki/.om +om +co.om +com.om +edu.om +gov.om +med.om +museum.om +net.om +org.om +pro.om + +// onion : https://tools.ietf.org/html/rfc7686 +onion + +// org : https://en.wikipedia.org/wiki/.org +org + +// pa : http://www.nic.pa/ +// Some additional second level "domains" resolve directly as hostnames, such as +// pannet.pa, so we add a rule for "pa". +pa +ac.pa +gob.pa +com.pa +org.pa +sld.pa +edu.pa +net.pa +ing.pa +abo.pa +med.pa +nom.pa + +// pe : https://www.nic.pe/InformeFinalComision.pdf +pe +edu.pe +gob.pe +nom.pe +mil.pe +org.pe +com.pe +net.pe + +// pf : http://www.gobin.info/domainname/formulaire-pf.pdf +pf +com.pf +org.pf +edu.pf + +// pg : https://en.wikipedia.org/wiki/.pg +*.pg + +// ph : http://www.domains.ph/FAQ2.asp +// Submitted by registry +ph +com.ph +net.ph +org.ph +gov.ph +edu.ph +ngo.ph +mil.ph +i.ph + +// pk : http://pk5.pknic.net.pk/pk5/msgNamepk.PK +pk +com.pk +net.pk +edu.pk +org.pk +fam.pk +biz.pk +web.pk +gov.pk +gob.pk +gok.pk +gon.pk +gop.pk +gos.pk +info.pk + +// pl http://www.dns.pl/english/index.html +// Submitted by registry +pl +com.pl +net.pl +org.pl +// pl functional domains (http://www.dns.pl/english/index.html) +aid.pl +agro.pl +atm.pl +auto.pl +biz.pl +edu.pl +gmina.pl +gsm.pl +info.pl +mail.pl +miasta.pl +media.pl +mil.pl +nieruchomosci.pl +nom.pl +pc.pl +powiat.pl +priv.pl +realestate.pl +rel.pl +sex.pl +shop.pl +sklep.pl +sos.pl +szkola.pl +targi.pl +tm.pl +tourism.pl +travel.pl +turystyka.pl +// Government domains +gov.pl +ap.gov.pl +griw.gov.pl +ic.gov.pl +is.gov.pl +kmpsp.gov.pl +konsulat.gov.pl +kppsp.gov.pl +kwp.gov.pl +kwpsp.gov.pl +mup.gov.pl +mw.gov.pl +oia.gov.pl +oirm.gov.pl +oke.gov.pl +oow.gov.pl +oschr.gov.pl +oum.gov.pl +pa.gov.pl +pinb.gov.pl +piw.gov.pl +po.gov.pl +pr.gov.pl +psp.gov.pl +psse.gov.pl +pup.gov.pl +rzgw.gov.pl +sa.gov.pl +sdn.gov.pl +sko.gov.pl +so.gov.pl +sr.gov.pl +starostwo.gov.pl +ug.gov.pl +ugim.gov.pl +um.gov.pl +umig.gov.pl +upow.gov.pl +uppo.gov.pl +us.gov.pl +uw.gov.pl +uzs.gov.pl +wif.gov.pl +wiih.gov.pl +winb.gov.pl +wios.gov.pl +witd.gov.pl +wiw.gov.pl +wkz.gov.pl +wsa.gov.pl +wskr.gov.pl +wsse.gov.pl +wuoz.gov.pl +wzmiuw.gov.pl +zp.gov.pl +zpisdn.gov.pl +// pl regional domains (http://www.dns.pl/english/index.html) +augustow.pl +babia-gora.pl +bedzin.pl +beskidy.pl +bialowieza.pl +bialystok.pl +bielawa.pl +bieszczady.pl +boleslawiec.pl +bydgoszcz.pl +bytom.pl +cieszyn.pl +czeladz.pl +czest.pl +dlugoleka.pl +elblag.pl +elk.pl +glogow.pl +gniezno.pl +gorlice.pl +grajewo.pl +ilawa.pl +jaworzno.pl +jelenia-gora.pl +jgora.pl +kalisz.pl +kazimierz-dolny.pl +karpacz.pl +kartuzy.pl +kaszuby.pl +katowice.pl +kepno.pl +ketrzyn.pl +klodzko.pl +kobierzyce.pl +kolobrzeg.pl +konin.pl +konskowola.pl +kutno.pl +lapy.pl +lebork.pl +legnica.pl +lezajsk.pl +limanowa.pl +lomza.pl +lowicz.pl +lubin.pl +lukow.pl +malbork.pl +malopolska.pl +mazowsze.pl +mazury.pl +mielec.pl +mielno.pl +mragowo.pl +naklo.pl +nowaruda.pl +nysa.pl +olawa.pl +olecko.pl +olkusz.pl +olsztyn.pl +opoczno.pl +opole.pl +ostroda.pl +ostroleka.pl +ostrowiec.pl +ostrowwlkp.pl +pila.pl +pisz.pl +podhale.pl +podlasie.pl +polkowice.pl +pomorze.pl +pomorskie.pl +prochowice.pl +pruszkow.pl +przeworsk.pl +pulawy.pl +radom.pl +rawa-maz.pl +rybnik.pl +rzeszow.pl +sanok.pl +sejny.pl +slask.pl +slupsk.pl +sosnowiec.pl +stalowa-wola.pl +skoczow.pl +starachowice.pl +stargard.pl +suwalki.pl +swidnica.pl +swiebodzin.pl +swinoujscie.pl +szczecin.pl +szczytno.pl +tarnobrzeg.pl +tgory.pl +turek.pl +tychy.pl +ustka.pl +walbrzych.pl +warmia.pl +warszawa.pl +waw.pl +wegrow.pl +wielun.pl +wlocl.pl +wloclawek.pl +wodzislaw.pl +wolomin.pl +wroclaw.pl +zachpomor.pl +zagan.pl +zarow.pl +zgora.pl +zgorzelec.pl + +// pm : https://www.afnic.fr/wp-media/uploads/2022/12/afnic-naming-policy-2023-01-01.pdf +pm + +// pn : http://www.government.pn/PnRegistry/policies.htm +pn +gov.pn +co.pn +org.pn +edu.pn +net.pn + +// post : https://en.wikipedia.org/wiki/.post +post + +// pr : http://www.nic.pr/index.asp?f=1 +pr +com.pr +net.pr +org.pr +gov.pr +edu.pr +isla.pr +pro.pr +biz.pr +info.pr +name.pr +// these aren't mentioned on nic.pr, but on https://en.wikipedia.org/wiki/.pr +est.pr +prof.pr +ac.pr + +// pro : http://registry.pro/get-pro +pro +aaa.pro +aca.pro +acct.pro +avocat.pro +bar.pro +cpa.pro +eng.pro +jur.pro +law.pro +med.pro +recht.pro + +// ps : https://en.wikipedia.org/wiki/.ps +// http://www.nic.ps/registration/policy.html#reg +ps +edu.ps +gov.ps +sec.ps +plo.ps +com.ps +org.ps +net.ps + +// pt : https://www.dns.pt/en/domain/pt-terms-and-conditions-registration-rules/ +pt +net.pt +gov.pt +org.pt +edu.pt +int.pt +publ.pt +com.pt +nome.pt + +// pw : https://en.wikipedia.org/wiki/.pw +pw +co.pw +ne.pw +or.pw +ed.pw +go.pw +belau.pw + +// py : http://www.nic.py/pautas.html#seccion_9 +// Submitted by registry +py +com.py +coop.py +edu.py +gov.py +mil.py +net.py +org.py + +// qa : http://domains.qa/en/ +qa +com.qa +edu.qa +gov.qa +mil.qa +name.qa +net.qa +org.qa +sch.qa + +// re : https://www.afnic.fr/wp-media/uploads/2022/12/afnic-naming-policy-2023-01-01.pdf +re +asso.re +com.re +nom.re + +// ro : http://www.rotld.ro/ +ro +arts.ro +com.ro +firm.ro +info.ro +nom.ro +nt.ro +org.ro +rec.ro +store.ro +tm.ro +www.ro + +// rs : https://www.rnids.rs/en/domains/national-domains +rs +ac.rs +co.rs +edu.rs +gov.rs +in.rs +org.rs + +// ru : https://cctld.ru/files/pdf/docs/en/rules_ru-rf.pdf +// Submitted by George Georgievsky +ru + +// rw : https://www.ricta.org.rw/sites/default/files/resources/registry_registrar_contract_0.pdf +rw +ac.rw +co.rw +coop.rw +gov.rw +mil.rw +net.rw +org.rw + +// sa : http://www.nic.net.sa/ +sa +com.sa +net.sa +org.sa +gov.sa +med.sa +pub.sa +edu.sa +sch.sa + +// sb : http://www.sbnic.net.sb/ +// Submitted by registry +sb +com.sb +edu.sb +gov.sb +net.sb +org.sb + +// sc : http://www.nic.sc/ +sc +com.sc +gov.sc +net.sc +org.sc +edu.sc + +// sd : http://www.isoc.sd/sudanic.isoc.sd/billing_pricing.htm +// Submitted by registry +sd +com.sd +net.sd +org.sd +edu.sd +med.sd +tv.sd +gov.sd +info.sd + +// se : https://en.wikipedia.org/wiki/.se +// Submitted by registry +se +a.se +ac.se +b.se +bd.se +brand.se +c.se +d.se +e.se +f.se +fh.se +fhsk.se +fhv.se +g.se +h.se +i.se +k.se +komforb.se +kommunalforbund.se +komvux.se +l.se +lanbib.se +m.se +n.se +naturbruksgymn.se +o.se +org.se +p.se +parti.se +pp.se +press.se +r.se +s.se +t.se +tm.se +u.se +w.se +x.se +y.se +z.se + +// sg : http://www.nic.net.sg/page/registration-policies-procedures-and-guidelines +sg +com.sg +net.sg +org.sg +gov.sg +edu.sg +per.sg + +// sh : http://nic.sh/rules.htm +sh +com.sh +net.sh +gov.sh +org.sh +mil.sh + +// si : https://en.wikipedia.org/wiki/.si +si + +// sj : No registrations at this time. +// Submitted by registry +sj + +// sk : https://en.wikipedia.org/wiki/.sk +// list of 2nd level domains ? +sk + +// sl : http://www.nic.sl +// Submitted by registry +sl +com.sl +net.sl +edu.sl +gov.sl +org.sl + +// sm : https://en.wikipedia.org/wiki/.sm +sm + +// sn : https://en.wikipedia.org/wiki/.sn +sn +art.sn +com.sn +edu.sn +gouv.sn +org.sn +perso.sn +univ.sn + +// so : http://sonic.so/policies/ +so +com.so +edu.so +gov.so +me.so +net.so +org.so + +// sr : https://en.wikipedia.org/wiki/.sr +sr + +// ss : https://registry.nic.ss/ +// Submitted by registry +ss +biz.ss +com.ss +edu.ss +gov.ss +me.ss +net.ss +org.ss +sch.ss + +// st : http://www.nic.st/html/policyrules/ +st +co.st +com.st +consulado.st +edu.st +embaixada.st +mil.st +net.st +org.st +principe.st +saotome.st +store.st + +// su : https://en.wikipedia.org/wiki/.su +su + +// sv : http://www.svnet.org.sv/niveldos.pdf +sv +com.sv +edu.sv +gob.sv +org.sv +red.sv + +// sx : https://en.wikipedia.org/wiki/.sx +// Submitted by registry +sx +gov.sx + +// sy : https://en.wikipedia.org/wiki/.sy +// see also: http://www.gobin.info/domainname/sy.doc +sy +edu.sy +gov.sy +net.sy +mil.sy +com.sy +org.sy + +// sz : https://en.wikipedia.org/wiki/.sz +// http://www.sispa.org.sz/ +sz +co.sz +ac.sz +org.sz + +// tc : https://en.wikipedia.org/wiki/.tc +tc + +// td : https://en.wikipedia.org/wiki/.td +td + +// tel: https://en.wikipedia.org/wiki/.tel +// http://www.telnic.org/ +tel + +// tf : https://www.afnic.fr/wp-media/uploads/2022/12/afnic-naming-policy-2023-01-01.pdf +tf + +// tg : https://en.wikipedia.org/wiki/.tg +// http://www.nic.tg/ +tg + +// th : https://en.wikipedia.org/wiki/.th +// Submitted by registry +th +ac.th +co.th +go.th +in.th +mi.th +net.th +or.th + +// tj : http://www.nic.tj/policy.html +tj +ac.tj +biz.tj +co.tj +com.tj +edu.tj +go.tj +gov.tj +int.tj +mil.tj +name.tj +net.tj +nic.tj +org.tj +test.tj +web.tj + +// tk : https://en.wikipedia.org/wiki/.tk +tk + +// tl : https://en.wikipedia.org/wiki/.tl +tl +gov.tl + +// tm : http://www.nic.tm/local.html +tm +com.tm +co.tm +org.tm +net.tm +nom.tm +gov.tm +mil.tm +edu.tm + +// tn : http://www.registre.tn/fr/ +// https://whois.ati.tn/ +tn +com.tn +ens.tn +fin.tn +gov.tn +ind.tn +info.tn +intl.tn +mincom.tn +nat.tn +net.tn +org.tn +perso.tn +tourism.tn + +// to : https://en.wikipedia.org/wiki/.to +// Submitted by registry +to +com.to +gov.to +net.to +org.to +edu.to +mil.to + +// tr : https://nic.tr/ +// https://nic.tr/forms/eng/policies.pdf +// https://nic.tr/index.php?USRACTN=PRICELST +tr +av.tr +bbs.tr +bel.tr +biz.tr +com.tr +dr.tr +edu.tr +gen.tr +gov.tr +info.tr +mil.tr +k12.tr +kep.tr +name.tr +net.tr +org.tr +pol.tr +tel.tr +tsk.tr +tv.tr +web.tr +// Used by Northern Cyprus +nc.tr +// Used by government agencies of Northern Cyprus +gov.nc.tr + +// tt : http://www.nic.tt/ +tt +co.tt +com.tt +org.tt +net.tt +biz.tt +info.tt +pro.tt +int.tt +coop.tt +jobs.tt +mobi.tt +travel.tt +museum.tt +aero.tt +name.tt +gov.tt +edu.tt + +// tv : https://en.wikipedia.org/wiki/.tv +// Not listing any 2LDs as reserved since none seem to exist in practice, +// Wikipedia notwithstanding. +tv + +// tw : https://en.wikipedia.org/wiki/.tw +tw +edu.tw +gov.tw +mil.tw +com.tw +net.tw +org.tw +idv.tw +game.tw +ebiz.tw +club.tw +網路.tw +組織.tw +商業.tw + +// tz : http://www.tznic.or.tz/index.php/domains +// Submitted by registry +tz +ac.tz +co.tz +go.tz +hotel.tz +info.tz +me.tz +mil.tz +mobi.tz +ne.tz +or.tz +sc.tz +tv.tz + +// ua : https://hostmaster.ua/policy/?ua +// Submitted by registry +ua +// ua 2LD +com.ua +edu.ua +gov.ua +in.ua +net.ua +org.ua +// ua geographic names +// https://hostmaster.ua/2ld/ +cherkassy.ua +cherkasy.ua +chernigov.ua +chernihiv.ua +chernivtsi.ua +chernovtsy.ua +ck.ua +cn.ua +cr.ua +crimea.ua +cv.ua +dn.ua +dnepropetrovsk.ua +dnipropetrovsk.ua +donetsk.ua +dp.ua +if.ua +ivano-frankivsk.ua +kh.ua +kharkiv.ua +kharkov.ua +kherson.ua +khmelnitskiy.ua +khmelnytskyi.ua +kiev.ua +kirovograd.ua +km.ua +kr.ua +kropyvnytskyi.ua +krym.ua +ks.ua +kv.ua +kyiv.ua +lg.ua +lt.ua +lugansk.ua +luhansk.ua +lutsk.ua +lv.ua +lviv.ua +mk.ua +mykolaiv.ua +nikolaev.ua +od.ua +odesa.ua +odessa.ua +pl.ua +poltava.ua +rivne.ua +rovno.ua +rv.ua +sb.ua +sebastopol.ua +sevastopol.ua +sm.ua +sumy.ua +te.ua +ternopil.ua +uz.ua +uzhgorod.ua +uzhhorod.ua +vinnica.ua +vinnytsia.ua +vn.ua +volyn.ua +yalta.ua +zakarpattia.ua +zaporizhzhe.ua +zaporizhzhia.ua +zhitomir.ua +zhytomyr.ua +zp.ua +zt.ua + +// ug : https://www.registry.co.ug/ +ug +co.ug +or.ug +ac.ug +sc.ug +go.ug +ne.ug +com.ug +org.ug + +// uk : https://en.wikipedia.org/wiki/.uk +// Submitted by registry +uk +ac.uk +co.uk +gov.uk +ltd.uk +me.uk +net.uk +nhs.uk +org.uk +plc.uk +police.uk +*.sch.uk + +// us : https://en.wikipedia.org/wiki/.us +us +dni.us +fed.us +isa.us +kids.us +nsn.us +// us geographic names +ak.us +al.us +ar.us +as.us +az.us +ca.us +co.us +ct.us +dc.us +de.us +fl.us +ga.us +gu.us +hi.us +ia.us +id.us +il.us +in.us +ks.us +ky.us +la.us +ma.us +md.us +me.us +mi.us +mn.us +mo.us +ms.us +mt.us +nc.us +nd.us +ne.us +nh.us +nj.us +nm.us +nv.us +ny.us +oh.us +ok.us +or.us +pa.us +pr.us +ri.us +sc.us +sd.us +tn.us +tx.us +ut.us +vi.us +vt.us +va.us +wa.us +wi.us +wv.us +wy.us +// The registrar notes several more specific domains available in each state, +// such as state.*.us, dst.*.us, etc., but resolution of these is somewhat +// haphazard; in some states these domains resolve as addresses, while in others +// only subdomains are available, or even nothing at all. We include the +// most common ones where it's clear that different sites are different +// entities. +k12.ak.us +k12.al.us +k12.ar.us +k12.as.us +k12.az.us +k12.ca.us +k12.co.us +k12.ct.us +k12.dc.us +k12.fl.us +k12.ga.us +k12.gu.us +// k12.hi.us Bug 614565 - Hawaii has a state-wide DOE login +k12.ia.us +k12.id.us +k12.il.us +k12.in.us +k12.ks.us +k12.ky.us +k12.la.us +k12.ma.us +k12.md.us +k12.me.us +k12.mi.us +k12.mn.us +k12.mo.us +k12.ms.us +k12.mt.us +k12.nc.us +// k12.nd.us Bug 1028347 - Removed at request of Travis Rosso +k12.ne.us +k12.nh.us +k12.nj.us +k12.nm.us +k12.nv.us +k12.ny.us +k12.oh.us +k12.ok.us +k12.or.us +k12.pa.us +k12.pr.us +// k12.ri.us Removed at request of Kim Cournoyer +k12.sc.us +// k12.sd.us Bug 934131 - Removed at request of James Booze +k12.tn.us +k12.tx.us +k12.ut.us +k12.vi.us +k12.vt.us +k12.va.us +k12.wa.us +k12.wi.us +// k12.wv.us Bug 947705 - Removed at request of Verne Britton +k12.wy.us +cc.ak.us +cc.al.us +cc.ar.us +cc.as.us +cc.az.us +cc.ca.us +cc.co.us +cc.ct.us +cc.dc.us +cc.de.us +cc.fl.us +cc.ga.us +cc.gu.us +cc.hi.us +cc.ia.us +cc.id.us +cc.il.us +cc.in.us +cc.ks.us +cc.ky.us +cc.la.us +cc.ma.us +cc.md.us +cc.me.us +cc.mi.us +cc.mn.us +cc.mo.us +cc.ms.us +cc.mt.us +cc.nc.us +cc.nd.us +cc.ne.us +cc.nh.us +cc.nj.us +cc.nm.us +cc.nv.us +cc.ny.us +cc.oh.us +cc.ok.us +cc.or.us +cc.pa.us +cc.pr.us +cc.ri.us +cc.sc.us +cc.sd.us +cc.tn.us +cc.tx.us +cc.ut.us +cc.vi.us +cc.vt.us +cc.va.us +cc.wa.us +cc.wi.us +cc.wv.us +cc.wy.us +lib.ak.us +lib.al.us +lib.ar.us +lib.as.us +lib.az.us +lib.ca.us +lib.co.us +lib.ct.us +lib.dc.us +// lib.de.us Issue #243 - Moved to Private section at request of Ed Moore +lib.fl.us +lib.ga.us +lib.gu.us +lib.hi.us +lib.ia.us +lib.id.us +lib.il.us +lib.in.us +lib.ks.us +lib.ky.us +lib.la.us +lib.ma.us +lib.md.us +lib.me.us +lib.mi.us +lib.mn.us +lib.mo.us +lib.ms.us +lib.mt.us +lib.nc.us +lib.nd.us +lib.ne.us +lib.nh.us +lib.nj.us +lib.nm.us +lib.nv.us +lib.ny.us +lib.oh.us +lib.ok.us +lib.or.us +lib.pa.us +lib.pr.us +lib.ri.us +lib.sc.us +lib.sd.us +lib.tn.us +lib.tx.us +lib.ut.us +lib.vi.us +lib.vt.us +lib.va.us +lib.wa.us +lib.wi.us +// lib.wv.us Bug 941670 - Removed at request of Larry W Arnold +lib.wy.us +// k12.ma.us contains school districts in Massachusetts. The 4LDs are +// managed independently except for private (PVT), charter (CHTR) and +// parochial (PAROCH) schools. Those are delegated directly to the +// 5LD operators. +pvt.k12.ma.us +chtr.k12.ma.us +paroch.k12.ma.us +// Merit Network, Inc. maintains the registry for =~ /(k12|cc|lib).mi.us/ and the following +// see also: http://domreg.merit.edu +// see also: whois -h whois.domreg.merit.edu help +ann-arbor.mi.us +cog.mi.us +dst.mi.us +eaton.mi.us +gen.mi.us +mus.mi.us +tec.mi.us +washtenaw.mi.us + +// uy : http://www.nic.org.uy/ +uy +com.uy +edu.uy +gub.uy +mil.uy +net.uy +org.uy + +// uz : http://www.reg.uz/ +uz +co.uz +com.uz +net.uz +org.uz + +// va : https://en.wikipedia.org/wiki/.va +va + +// vc : https://en.wikipedia.org/wiki/.vc +// Submitted by registry +vc +com.vc +net.vc +org.vc +gov.vc +mil.vc +edu.vc + +// ve : https://registro.nic.ve/ +// Submitted by registry nic@nic.ve and nicve@conatel.gob.ve +ve +arts.ve +bib.ve +co.ve +com.ve +e12.ve +edu.ve +firm.ve +gob.ve +gov.ve +info.ve +int.ve +mil.ve +net.ve +nom.ve +org.ve +rar.ve +rec.ve +store.ve +tec.ve +web.ve + +// vg : https://en.wikipedia.org/wiki/.vg +vg + +// vi : http://www.nic.vi/newdomainform.htm +// http://www.nic.vi/Domain_Rules/body_domain_rules.html indicates some other +// TLDs are "reserved", such as edu.vi and gov.vi, but doesn't actually say they +// are available for registration (which they do not seem to be). +vi +co.vi +com.vi +k12.vi +net.vi +org.vi + +// vn : https://www.vnnic.vn/en/domain/cctld-vn +// https://vnnic.vn/sites/default/files/tailieu/vn.cctld.domains.txt +vn +ac.vn +ai.vn +biz.vn +com.vn +edu.vn +gov.vn +health.vn +id.vn +info.vn +int.vn +io.vn +name.vn +net.vn +org.vn +pro.vn + +// vn geographical names +angiang.vn +bacgiang.vn +backan.vn +baclieu.vn +bacninh.vn +baria-vungtau.vn +bentre.vn +binhdinh.vn +binhduong.vn +binhphuoc.vn +binhthuan.vn +camau.vn +cantho.vn +caobang.vn +daklak.vn +daknong.vn +danang.vn +dienbien.vn +dongnai.vn +dongthap.vn +gialai.vn +hagiang.vn +haiduong.vn +haiphong.vn +hanam.vn +hanoi.vn +hatinh.vn +haugiang.vn +hoabinh.vn +hungyen.vn +khanhhoa.vn +kiengiang.vn +kontum.vn +laichau.vn +lamdong.vn +langson.vn +laocai.vn +longan.vn +namdinh.vn +nghean.vn +ninhbinh.vn +ninhthuan.vn +phutho.vn +phuyen.vn +quangbinh.vn +quangnam.vn +quangngai.vn +quangninh.vn +quangtri.vn +soctrang.vn +sonla.vn +tayninh.vn +thaibinh.vn +thainguyen.vn +thanhhoa.vn +thanhphohochiminh.vn +thuathienhue.vn +tiengiang.vn +travinh.vn +tuyenquang.vn +vinhlong.vn +vinhphuc.vn +yenbai.vn + +// vu : https://en.wikipedia.org/wiki/.vu +// http://www.vunic.vu/ +vu +com.vu +edu.vu +net.vu +org.vu + +// wf : https://www.afnic.fr/wp-media/uploads/2022/12/afnic-naming-policy-2023-01-01.pdf +wf + +// ws : https://en.wikipedia.org/wiki/.ws +// http://samoanic.ws/index.dhtml +ws +com.ws +net.ws +org.ws +gov.ws +edu.ws + +// yt : https://www.afnic.fr/wp-media/uploads/2022/12/afnic-naming-policy-2023-01-01.pdf +yt + +// IDN ccTLDs +// When submitting patches, please maintain a sort by ISO 3166 ccTLD, then +// U-label, and follow this format: +// // A-Label ("", [, variant info]) : +// // [sponsoring org] +// U-Label + +// xn--mgbaam7a8h ("Emerat", Arabic) : AE +// http://nic.ae/english/arabicdomain/rules.jsp +امارات + +// xn--y9a3aq ("hye", Armenian) : AM +// ISOC AM (operated by .am Registry) +հայ + +// xn--54b7fta0cc ("Bangla", Bangla) : BD +বাংলা + +// xn--90ae ("bg", Bulgarian) : BG +бг + +// xn--mgbcpq6gpa1a ("albahrain", Arabic) : BH +البحرين + +// xn--90ais ("bel", Belarusian/Russian Cyrillic) : BY +// Operated by .by registry +бел + +// xn--fiqs8s ("Zhongguo/China", Chinese, Simplified) : CN +// CNNIC +// http://cnnic.cn/html/Dir/2005/10/11/3218.htm +中国 + +// xn--fiqz9s ("Zhongguo/China", Chinese, Traditional) : CN +// CNNIC +// http://cnnic.cn/html/Dir/2005/10/11/3218.htm +中國 + +// xn--lgbbat1ad8j ("Algeria/Al Jazair", Arabic) : DZ +الجزائر + +// xn--wgbh1c ("Egypt/Masr", Arabic) : EG +// http://www.dotmasr.eg/ +مصر + +// xn--e1a4c ("eu", Cyrillic) : EU +// https://eurid.eu +ею + +// xn--qxa6a ("eu", Greek) : EU +// https://eurid.eu +ευ + +// xn--mgbah1a3hjkrd ("Mauritania", Arabic) : MR +موريتانيا + +// xn--node ("ge", Georgian Mkhedruli) : GE +გე + +// xn--qxam ("el", Greek) : GR +// Hellenic Ministry of Infrastructure, Transport, and Networks +ελ + +// xn--j6w193g ("Hong Kong", Chinese) : HK +// https://www.hkirc.hk +// Submitted by registry +// https://www.hkirc.hk/content.jsp?id=30#!/34 +香港 +公司.香港 +教育.香港 +政府.香港 +個人.香港 +網絡.香港 +組織.香港 + +// xn--2scrj9c ("Bharat", Kannada) : IN +// India +ಭಾರತ + +// xn--3hcrj9c ("Bharat", Oriya) : IN +// India +ଭାରତ + +// xn--45br5cyl ("Bharatam", Assamese) : IN +// India +ভাৰত + +// xn--h2breg3eve ("Bharatam", Sanskrit) : IN +// India +भारतम् + +// xn--h2brj9c8c ("Bharot", Santali) : IN +// India +भारोत + +// xn--mgbgu82a ("Bharat", Sindhi) : IN +// India +ڀارت + +// xn--rvc1e0am3e ("Bharatam", Malayalam) : IN +// India +ഭാരതം + +// xn--h2brj9c ("Bharat", Devanagari) : IN +// India +भारत + +// xn--mgbbh1a ("Bharat", Kashmiri) : IN +// India +بارت + +// xn--mgbbh1a71e ("Bharat", Arabic) : IN +// India +بھارت + +// xn--fpcrj9c3d ("Bharat", Telugu) : IN +// India +భారత్ + +// xn--gecrj9c ("Bharat", Gujarati) : IN +// India +ભારત + +// xn--s9brj9c ("Bharat", Gurmukhi) : IN +// India +ਭਾਰਤ + +// xn--45brj9c ("Bharat", Bengali) : IN +// India +ভারত + +// xn--xkc2dl3a5ee0h ("India", Tamil) : IN +// India +இந்தியா + +// xn--mgba3a4f16a ("Iran", Persian) : IR +ایران + +// xn--mgba3a4fra ("Iran", Arabic) : IR +ايران + +// xn--mgbtx2b ("Iraq", Arabic) : IQ +// Communications and Media Commission +عراق + +// xn--mgbayh7gpa ("al-Ordon", Arabic) : JO +// National Information Technology Center (NITC) +// Royal Scientific Society, Al-Jubeiha +الاردن + +// xn--3e0b707e ("Republic of Korea", Hangul) : KR +한국 + +// xn--80ao21a ("Kaz", Kazakh) : KZ +қаз + +// xn--q7ce6a ("Lao", Lao) : LA +ລາວ + +// xn--fzc2c9e2c ("Lanka", Sinhalese-Sinhala) : LK +// https://nic.lk +ලංකා + +// xn--xkc2al3hye2a ("Ilangai", Tamil) : LK +// https://nic.lk +இலங்கை + +// xn--mgbc0a9azcg ("Morocco/al-Maghrib", Arabic) : MA +المغرب + +// xn--d1alf ("mkd", Macedonian) : MK +// MARnet +мкд + +// xn--l1acc ("mon", Mongolian) : MN +мон + +// xn--mix891f ("Macao", Chinese, Traditional) : MO +// MONIC / HNET Asia (Registry Operator for .mo) +澳門 + +// xn--mix082f ("Macao", Chinese, Simplified) : MO +澳门 + +// xn--mgbx4cd0ab ("Malaysia", Malay) : MY +مليسيا + +// xn--mgb9awbf ("Oman", Arabic) : OM +عمان + +// xn--mgbai9azgqp6j ("Pakistan", Urdu/Arabic) : PK +پاکستان + +// xn--mgbai9a5eva00b ("Pakistan", Urdu/Arabic, variant) : PK +پاكستان + +// xn--ygbi2ammx ("Falasteen", Arabic) : PS +// The Palestinian National Internet Naming Authority (PNINA) +// http://www.pnina.ps +فلسطين + +// xn--90a3ac ("srb", Cyrillic) : RS +// https://www.rnids.rs/en/domains/national-domains +срб +пр.срб +орг.срб +обр.срб +од.срб +упр.срб +ак.срб + +// xn--p1ai ("rf", Russian-Cyrillic) : RU +// https://cctld.ru/files/pdf/docs/en/rules_ru-rf.pdf +// Submitted by George Georgievsky +рф + +// xn--wgbl6a ("Qatar", Arabic) : QA +// http://www.ict.gov.qa/ +قطر + +// xn--mgberp4a5d4ar ("AlSaudiah", Arabic) : SA +// http://www.nic.net.sa/ +السعودية + +// xn--mgberp4a5d4a87g ("AlSaudiah", Arabic, variant) : SA +السعودیة + +// xn--mgbqly7c0a67fbc ("AlSaudiah", Arabic, variant) : SA +السعودیۃ + +// xn--mgbqly7cvafr ("AlSaudiah", Arabic, variant) : SA +السعوديه + +// xn--mgbpl2fh ("sudan", Arabic) : SD +// Operated by .sd registry +سودان + +// xn--yfro4i67o Singapore ("Singapore", Chinese) : SG +新加坡 + +// xn--clchc0ea0b2g2a9gcd ("Singapore", Tamil) : SG +சிங்கப்பூர் + +// xn--ogbpf8fl ("Syria", Arabic) : SY +سورية + +// xn--mgbtf8fl ("Syria", Arabic, variant) : SY +سوريا + +// xn--o3cw4h ("Thai", Thai) : TH +// http://www.thnic.co.th +ไทย +ศึกษา.ไทย +ธุรกิจ.ไทย +รัฐบาล.ไทย +ทหาร.ไทย +เน็ต.ไทย +องค์กร.ไทย + +// xn--pgbs0dh ("Tunisia", Arabic) : TN +// http://nic.tn +تونس + +// xn--kpry57d ("Taiwan", Chinese, Traditional) : TW +// http://www.twnic.net/english/dn/dn_07a.htm +台灣 + +// xn--kprw13d ("Taiwan", Chinese, Simplified) : TW +// http://www.twnic.net/english/dn/dn_07a.htm +台湾 + +// xn--nnx388a ("Taiwan", Chinese, variant) : TW +臺灣 + +// xn--j1amh ("ukr", Cyrillic) : UA +укр + +// xn--mgb2ddes ("AlYemen", Arabic) : YE +اليمن + +// xxx : http://icmregistry.com +xxx + +// ye : http://www.y.net.ye/services/domain_name.htm +ye +com.ye +edu.ye +gov.ye +net.ye +mil.ye +org.ye + +// za : https://www.zadna.org.za/content/page/domain-information/ +ac.za +agric.za +alt.za +co.za +edu.za +gov.za +grondar.za +law.za +mil.za +net.za +ngo.za +nic.za +nis.za +nom.za +org.za +school.za +tm.za +web.za + +// zm : https://zicta.zm/ +// Submitted by registry +zm +ac.zm +biz.zm +co.zm +com.zm +edu.zm +gov.zm +info.zm +mil.zm +net.zm +org.zm +sch.zm + +// zw : https://www.potraz.gov.zw/ +// Confirmed by registry 2017-01-25 +zw +ac.zw +co.zw +gov.zw +mil.zw +org.zw + + +// newGTLDs + +// List of new gTLDs imported from https://www.icann.org/resources/registries/gtlds/v2/gtlds.json on 2023-12-06T15:14:09Z +// This list is auto-generated, don't edit it manually. +// aaa : American Automobile Association, Inc. +// https://www.iana.org/domains/root/db/aaa.html +aaa + +// aarp : AARP +// https://www.iana.org/domains/root/db/aarp.html +aarp + +// abb : ABB Ltd +// https://www.iana.org/domains/root/db/abb.html +abb + +// abbott : Abbott Laboratories, Inc. +// https://www.iana.org/domains/root/db/abbott.html +abbott + +// abbvie : AbbVie Inc. +// https://www.iana.org/domains/root/db/abbvie.html +abbvie + +// abc : Disney Enterprises, Inc. +// https://www.iana.org/domains/root/db/abc.html +abc + +// able : Able Inc. +// https://www.iana.org/domains/root/db/able.html +able + +// abogado : Registry Services, LLC +// https://www.iana.org/domains/root/db/abogado.html +abogado + +// abudhabi : Abu Dhabi Systems and Information Centre +// https://www.iana.org/domains/root/db/abudhabi.html +abudhabi + +// academy : Binky Moon, LLC +// https://www.iana.org/domains/root/db/academy.html +academy + +// accenture : Accenture plc +// https://www.iana.org/domains/root/db/accenture.html +accenture + +// accountant : dot Accountant Limited +// https://www.iana.org/domains/root/db/accountant.html +accountant + +// accountants : Binky Moon, LLC +// https://www.iana.org/domains/root/db/accountants.html +accountants + +// aco : ACO Severin Ahlmann GmbH & Co. KG +// https://www.iana.org/domains/root/db/aco.html +aco + +// actor : Dog Beach, LLC +// https://www.iana.org/domains/root/db/actor.html +actor + +// ads : Charleston Road Registry Inc. +// https://www.iana.org/domains/root/db/ads.html +ads + +// adult : ICM Registry AD LLC +// https://www.iana.org/domains/root/db/adult.html +adult + +// aeg : Aktiebolaget Electrolux +// https://www.iana.org/domains/root/db/aeg.html +aeg + +// aetna : Aetna Life Insurance Company +// https://www.iana.org/domains/root/db/aetna.html +aetna + +// afl : Australian Football League +// https://www.iana.org/domains/root/db/afl.html +afl + +// africa : ZA Central Registry NPC trading as Registry.Africa +// https://www.iana.org/domains/root/db/africa.html +africa + +// agakhan : Fondation Aga Khan (Aga Khan Foundation) +// https://www.iana.org/domains/root/db/agakhan.html +agakhan + +// agency : Binky Moon, LLC +// https://www.iana.org/domains/root/db/agency.html +agency + +// aig : American International Group, Inc. +// https://www.iana.org/domains/root/db/aig.html +aig + +// airbus : Airbus S.A.S. +// https://www.iana.org/domains/root/db/airbus.html +airbus + +// airforce : Dog Beach, LLC +// https://www.iana.org/domains/root/db/airforce.html +airforce + +// airtel : Bharti Airtel Limited +// https://www.iana.org/domains/root/db/airtel.html +airtel + +// akdn : Fondation Aga Khan (Aga Khan Foundation) +// https://www.iana.org/domains/root/db/akdn.html +akdn + +// alibaba : Alibaba Group Holding Limited +// https://www.iana.org/domains/root/db/alibaba.html +alibaba + +// alipay : Alibaba Group Holding Limited +// https://www.iana.org/domains/root/db/alipay.html +alipay + +// allfinanz : Allfinanz Deutsche Vermögensberatung Aktiengesellschaft +// https://www.iana.org/domains/root/db/allfinanz.html +allfinanz + +// allstate : Allstate Fire and Casualty Insurance Company +// https://www.iana.org/domains/root/db/allstate.html +allstate + +// ally : Ally Financial Inc. +// https://www.iana.org/domains/root/db/ally.html +ally + +// alsace : Region Grand Est +// https://www.iana.org/domains/root/db/alsace.html +alsace + +// alstom : ALSTOM +// https://www.iana.org/domains/root/db/alstom.html +alstom + +// amazon : Amazon Registry Services, Inc. +// https://www.iana.org/domains/root/db/amazon.html +amazon + +// americanexpress : American Express Travel Related Services Company, Inc. +// https://www.iana.org/domains/root/db/americanexpress.html +americanexpress + +// americanfamily : AmFam, Inc. +// https://www.iana.org/domains/root/db/americanfamily.html +americanfamily + +// amex : American Express Travel Related Services Company, Inc. +// https://www.iana.org/domains/root/db/amex.html +amex + +// amfam : AmFam, Inc. +// https://www.iana.org/domains/root/db/amfam.html +amfam + +// amica : Amica Mutual Insurance Company +// https://www.iana.org/domains/root/db/amica.html +amica + +// amsterdam : Gemeente Amsterdam +// https://www.iana.org/domains/root/db/amsterdam.html +amsterdam + +// analytics : Campus IP LLC +// https://www.iana.org/domains/root/db/analytics.html +analytics + +// android : Charleston Road Registry Inc. +// https://www.iana.org/domains/root/db/android.html +android + +// anquan : Beijing Qihu Keji Co., Ltd. +// https://www.iana.org/domains/root/db/anquan.html +anquan + +// anz : Australia and New Zealand Banking Group Limited +// https://www.iana.org/domains/root/db/anz.html +anz + +// aol : Oath Inc. +// https://www.iana.org/domains/root/db/aol.html +aol + +// apartments : Binky Moon, LLC +// https://www.iana.org/domains/root/db/apartments.html +apartments + +// app : Charleston Road Registry Inc. +// https://www.iana.org/domains/root/db/app.html +app + +// apple : Apple Inc. +// https://www.iana.org/domains/root/db/apple.html +apple + +// aquarelle : Aquarelle.com +// https://www.iana.org/domains/root/db/aquarelle.html +aquarelle + +// arab : League of Arab States +// https://www.iana.org/domains/root/db/arab.html +arab + +// aramco : Aramco Services Company +// https://www.iana.org/domains/root/db/aramco.html +aramco + +// archi : Identity Digital Limited +// https://www.iana.org/domains/root/db/archi.html +archi + +// army : Dog Beach, LLC +// https://www.iana.org/domains/root/db/army.html +army + +// art : UK Creative Ideas Limited +// https://www.iana.org/domains/root/db/art.html +art + +// arte : Association Relative à la Télévision Européenne G.E.I.E. +// https://www.iana.org/domains/root/db/arte.html +arte + +// asda : Wal-Mart Stores, Inc. +// https://www.iana.org/domains/root/db/asda.html +asda + +// associates : Binky Moon, LLC +// https://www.iana.org/domains/root/db/associates.html +associates + +// athleta : The Gap, Inc. +// https://www.iana.org/domains/root/db/athleta.html +athleta + +// attorney : Dog Beach, LLC +// https://www.iana.org/domains/root/db/attorney.html +attorney + +// auction : Dog Beach, LLC +// https://www.iana.org/domains/root/db/auction.html +auction + +// audi : AUDI Aktiengesellschaft +// https://www.iana.org/domains/root/db/audi.html +audi + +// audible : Amazon Registry Services, Inc. +// https://www.iana.org/domains/root/db/audible.html +audible + +// audio : XYZ.COM LLC +// https://www.iana.org/domains/root/db/audio.html +audio + +// auspost : Australian Postal Corporation +// https://www.iana.org/domains/root/db/auspost.html +auspost + +// author : Amazon Registry Services, Inc. +// https://www.iana.org/domains/root/db/author.html +author + +// auto : XYZ.COM LLC +// https://www.iana.org/domains/root/db/auto.html +auto + +// autos : XYZ.COM LLC +// https://www.iana.org/domains/root/db/autos.html +autos + +// avianca : Avianca Inc. +// https://www.iana.org/domains/root/db/avianca.html +avianca + +// aws : AWS Registry LLC +// https://www.iana.org/domains/root/db/aws.html +aws + +// axa : AXA Group Operations SAS +// https://www.iana.org/domains/root/db/axa.html +axa + +// azure : Microsoft Corporation +// https://www.iana.org/domains/root/db/azure.html +azure + +// baby : XYZ.COM LLC +// https://www.iana.org/domains/root/db/baby.html +baby + +// baidu : Baidu, Inc. +// https://www.iana.org/domains/root/db/baidu.html +baidu + +// banamex : Citigroup Inc. +// https://www.iana.org/domains/root/db/banamex.html +banamex + +// bananarepublic : The Gap, Inc. +// https://www.iana.org/domains/root/db/bananarepublic.html +bananarepublic + +// band : Dog Beach, LLC +// https://www.iana.org/domains/root/db/band.html +band + +// bank : fTLD Registry Services LLC +// https://www.iana.org/domains/root/db/bank.html +bank + +// bar : Punto 2012 Sociedad Anonima Promotora de Inversion de Capital Variable +// https://www.iana.org/domains/root/db/bar.html +bar + +// barcelona : Municipi de Barcelona +// https://www.iana.org/domains/root/db/barcelona.html +barcelona + +// barclaycard : Barclays Bank PLC +// https://www.iana.org/domains/root/db/barclaycard.html +barclaycard + +// barclays : Barclays Bank PLC +// https://www.iana.org/domains/root/db/barclays.html +barclays + +// barefoot : Gallo Vineyards, Inc. +// https://www.iana.org/domains/root/db/barefoot.html +barefoot + +// bargains : Binky Moon, LLC +// https://www.iana.org/domains/root/db/bargains.html +bargains + +// baseball : MLB Advanced Media DH, LLC +// https://www.iana.org/domains/root/db/baseball.html +baseball + +// basketball : Fédération Internationale de Basketball (FIBA) +// https://www.iana.org/domains/root/db/basketball.html +basketball + +// bauhaus : Werkhaus GmbH +// https://www.iana.org/domains/root/db/bauhaus.html +bauhaus + +// bayern : Bayern Connect GmbH +// https://www.iana.org/domains/root/db/bayern.html +bayern + +// bbc : British Broadcasting Corporation +// https://www.iana.org/domains/root/db/bbc.html +bbc + +// bbt : BB&T Corporation +// https://www.iana.org/domains/root/db/bbt.html +bbt + +// bbva : BANCO BILBAO VIZCAYA ARGENTARIA, S.A. +// https://www.iana.org/domains/root/db/bbva.html +bbva + +// bcg : The Boston Consulting Group, Inc. +// https://www.iana.org/domains/root/db/bcg.html +bcg + +// bcn : Municipi de Barcelona +// https://www.iana.org/domains/root/db/bcn.html +bcn + +// beats : Beats Electronics, LLC +// https://www.iana.org/domains/root/db/beats.html +beats + +// beauty : XYZ.COM LLC +// https://www.iana.org/domains/root/db/beauty.html +beauty + +// beer : Registry Services, LLC +// https://www.iana.org/domains/root/db/beer.html +beer + +// bentley : Bentley Motors Limited +// https://www.iana.org/domains/root/db/bentley.html +bentley + +// berlin : dotBERLIN GmbH & Co. KG +// https://www.iana.org/domains/root/db/berlin.html +berlin + +// best : BestTLD Pty Ltd +// https://www.iana.org/domains/root/db/best.html +best + +// bestbuy : BBY Solutions, Inc. +// https://www.iana.org/domains/root/db/bestbuy.html +bestbuy + +// bet : Identity Digital Limited +// https://www.iana.org/domains/root/db/bet.html +bet + +// bharti : Bharti Enterprises (Holding) Private Limited +// https://www.iana.org/domains/root/db/bharti.html +bharti + +// bible : American Bible Society +// https://www.iana.org/domains/root/db/bible.html +bible + +// bid : dot Bid Limited +// https://www.iana.org/domains/root/db/bid.html +bid + +// bike : Binky Moon, LLC +// https://www.iana.org/domains/root/db/bike.html +bike + +// bing : Microsoft Corporation +// https://www.iana.org/domains/root/db/bing.html +bing + +// bingo : Binky Moon, LLC +// https://www.iana.org/domains/root/db/bingo.html +bingo + +// bio : Identity Digital Limited +// https://www.iana.org/domains/root/db/bio.html +bio + +// black : Identity Digital Limited +// https://www.iana.org/domains/root/db/black.html +black + +// blackfriday : Registry Services, LLC +// https://www.iana.org/domains/root/db/blackfriday.html +blackfriday + +// blockbuster : Dish DBS Corporation +// https://www.iana.org/domains/root/db/blockbuster.html +blockbuster + +// blog : Knock Knock WHOIS There, LLC +// https://www.iana.org/domains/root/db/blog.html +blog + +// bloomberg : Bloomberg IP Holdings LLC +// https://www.iana.org/domains/root/db/bloomberg.html +bloomberg + +// blue : Identity Digital Limited +// https://www.iana.org/domains/root/db/blue.html +blue + +// bms : Bristol-Myers Squibb Company +// https://www.iana.org/domains/root/db/bms.html +bms + +// bmw : Bayerische Motoren Werke Aktiengesellschaft +// https://www.iana.org/domains/root/db/bmw.html +bmw + +// bnpparibas : BNP Paribas +// https://www.iana.org/domains/root/db/bnpparibas.html +bnpparibas + +// boats : XYZ.COM LLC +// https://www.iana.org/domains/root/db/boats.html +boats + +// boehringer : Boehringer Ingelheim International GmbH +// https://www.iana.org/domains/root/db/boehringer.html +boehringer + +// bofa : Bank of America Corporation +// https://www.iana.org/domains/root/db/bofa.html +bofa + +// bom : Núcleo de Informação e Coordenação do Ponto BR - NIC.br +// https://www.iana.org/domains/root/db/bom.html +bom + +// bond : ShortDot SA +// https://www.iana.org/domains/root/db/bond.html +bond + +// boo : Charleston Road Registry Inc. +// https://www.iana.org/domains/root/db/boo.html +boo + +// book : Amazon Registry Services, Inc. +// https://www.iana.org/domains/root/db/book.html +book + +// booking : Booking.com B.V. +// https://www.iana.org/domains/root/db/booking.html +booking + +// bosch : Robert Bosch GMBH +// https://www.iana.org/domains/root/db/bosch.html +bosch + +// bostik : Bostik SA +// https://www.iana.org/domains/root/db/bostik.html +bostik + +// boston : Registry Services, LLC +// https://www.iana.org/domains/root/db/boston.html +boston + +// bot : Amazon Registry Services, Inc. +// https://www.iana.org/domains/root/db/bot.html +bot + +// boutique : Binky Moon, LLC +// https://www.iana.org/domains/root/db/boutique.html +boutique + +// box : Intercap Registry Inc. +// https://www.iana.org/domains/root/db/box.html +box + +// bradesco : Banco Bradesco S.A. +// https://www.iana.org/domains/root/db/bradesco.html +bradesco + +// bridgestone : Bridgestone Corporation +// https://www.iana.org/domains/root/db/bridgestone.html +bridgestone + +// broadway : Celebrate Broadway, Inc. +// https://www.iana.org/domains/root/db/broadway.html +broadway + +// broker : Dog Beach, LLC +// https://www.iana.org/domains/root/db/broker.html +broker + +// brother : Brother Industries, Ltd. +// https://www.iana.org/domains/root/db/brother.html +brother + +// brussels : DNS.be vzw +// https://www.iana.org/domains/root/db/brussels.html +brussels + +// build : Plan Bee LLC +// https://www.iana.org/domains/root/db/build.html +build + +// builders : Binky Moon, LLC +// https://www.iana.org/domains/root/db/builders.html +builders + +// business : Binky Moon, LLC +// https://www.iana.org/domains/root/db/business.html +business + +// buy : Amazon Registry Services, Inc. +// https://www.iana.org/domains/root/db/buy.html +buy + +// buzz : DOTSTRATEGY CO. +// https://www.iana.org/domains/root/db/buzz.html +buzz + +// bzh : Association www.bzh +// https://www.iana.org/domains/root/db/bzh.html +bzh + +// cab : Binky Moon, LLC +// https://www.iana.org/domains/root/db/cab.html +cab + +// cafe : Binky Moon, LLC +// https://www.iana.org/domains/root/db/cafe.html +cafe + +// cal : Charleston Road Registry Inc. +// https://www.iana.org/domains/root/db/cal.html +cal + +// call : Amazon Registry Services, Inc. +// https://www.iana.org/domains/root/db/call.html +call + +// calvinklein : PVH gTLD Holdings LLC +// https://www.iana.org/domains/root/db/calvinklein.html +calvinklein + +// cam : Cam Connecting SARL +// https://www.iana.org/domains/root/db/cam.html +cam + +// camera : Binky Moon, LLC +// https://www.iana.org/domains/root/db/camera.html +camera + +// camp : Binky Moon, LLC +// https://www.iana.org/domains/root/db/camp.html +camp + +// canon : Canon Inc. +// https://www.iana.org/domains/root/db/canon.html +canon + +// capetown : ZA Central Registry NPC trading as ZA Central Registry +// https://www.iana.org/domains/root/db/capetown.html +capetown + +// capital : Binky Moon, LLC +// https://www.iana.org/domains/root/db/capital.html +capital + +// capitalone : Capital One Financial Corporation +// https://www.iana.org/domains/root/db/capitalone.html +capitalone + +// car : XYZ.COM LLC +// https://www.iana.org/domains/root/db/car.html +car + +// caravan : Caravan International, Inc. +// https://www.iana.org/domains/root/db/caravan.html +caravan + +// cards : Binky Moon, LLC +// https://www.iana.org/domains/root/db/cards.html +cards + +// care : Binky Moon, LLC +// https://www.iana.org/domains/root/db/care.html +care + +// career : dotCareer LLC +// https://www.iana.org/domains/root/db/career.html +career + +// careers : Binky Moon, LLC +// https://www.iana.org/domains/root/db/careers.html +careers + +// cars : XYZ.COM LLC +// https://www.iana.org/domains/root/db/cars.html +cars + +// casa : Registry Services, LLC +// https://www.iana.org/domains/root/db/casa.html +casa + +// case : Digity, LLC +// https://www.iana.org/domains/root/db/case.html +case + +// cash : Binky Moon, LLC +// https://www.iana.org/domains/root/db/cash.html +cash + +// casino : Binky Moon, LLC +// https://www.iana.org/domains/root/db/casino.html +casino + +// catering : Binky Moon, LLC +// https://www.iana.org/domains/root/db/catering.html +catering + +// catholic : Pontificium Consilium de Comunicationibus Socialibus (PCCS) (Pontifical Council for Social Communication) +// https://www.iana.org/domains/root/db/catholic.html +catholic + +// cba : COMMONWEALTH BANK OF AUSTRALIA +// https://www.iana.org/domains/root/db/cba.html +cba + +// cbn : The Christian Broadcasting Network, Inc. +// https://www.iana.org/domains/root/db/cbn.html +cbn + +// cbre : CBRE, Inc. +// https://www.iana.org/domains/root/db/cbre.html +cbre + +// center : Binky Moon, LLC +// https://www.iana.org/domains/root/db/center.html +center + +// ceo : XYZ.COM LLC +// https://www.iana.org/domains/root/db/ceo.html +ceo + +// cern : European Organization for Nuclear Research ("CERN") +// https://www.iana.org/domains/root/db/cern.html +cern + +// cfa : CFA Institute +// https://www.iana.org/domains/root/db/cfa.html +cfa + +// cfd : ShortDot SA +// https://www.iana.org/domains/root/db/cfd.html +cfd + +// chanel : Chanel International B.V. +// https://www.iana.org/domains/root/db/chanel.html +chanel + +// channel : Charleston Road Registry Inc. +// https://www.iana.org/domains/root/db/channel.html +channel + +// charity : Public Interest Registry +// https://www.iana.org/domains/root/db/charity.html +charity + +// chase : JPMorgan Chase Bank, National Association +// https://www.iana.org/domains/root/db/chase.html +chase + +// chat : Binky Moon, LLC +// https://www.iana.org/domains/root/db/chat.html +chat + +// cheap : Binky Moon, LLC +// https://www.iana.org/domains/root/db/cheap.html +cheap + +// chintai : CHINTAI Corporation +// https://www.iana.org/domains/root/db/chintai.html +chintai + +// christmas : XYZ.COM LLC +// https://www.iana.org/domains/root/db/christmas.html +christmas + +// chrome : Charleston Road Registry Inc. +// https://www.iana.org/domains/root/db/chrome.html +chrome + +// church : Binky Moon, LLC +// https://www.iana.org/domains/root/db/church.html +church + +// cipriani : Hotel Cipriani Srl +// https://www.iana.org/domains/root/db/cipriani.html +cipriani + +// circle : Amazon Registry Services, Inc. +// https://www.iana.org/domains/root/db/circle.html +circle + +// cisco : Cisco Technology, Inc. +// https://www.iana.org/domains/root/db/cisco.html +cisco + +// citadel : Citadel Domain LLC +// https://www.iana.org/domains/root/db/citadel.html +citadel + +// citi : Citigroup Inc. +// https://www.iana.org/domains/root/db/citi.html +citi + +// citic : CITIC Group Corporation +// https://www.iana.org/domains/root/db/citic.html +citic + +// city : Binky Moon, LLC +// https://www.iana.org/domains/root/db/city.html +city + +// claims : Binky Moon, LLC +// https://www.iana.org/domains/root/db/claims.html +claims + +// cleaning : Binky Moon, LLC +// https://www.iana.org/domains/root/db/cleaning.html +cleaning + +// click : Internet Naming Company LLC +// https://www.iana.org/domains/root/db/click.html +click + +// clinic : Binky Moon, LLC +// https://www.iana.org/domains/root/db/clinic.html +clinic + +// clinique : The Estée Lauder Companies Inc. +// https://www.iana.org/domains/root/db/clinique.html +clinique + +// clothing : Binky Moon, LLC +// https://www.iana.org/domains/root/db/clothing.html +clothing + +// cloud : Aruba PEC S.p.A. +// https://www.iana.org/domains/root/db/cloud.html +cloud + +// club : Registry Services, LLC +// https://www.iana.org/domains/root/db/club.html +club + +// clubmed : Club Méditerranée S.A. +// https://www.iana.org/domains/root/db/clubmed.html +clubmed + +// coach : Binky Moon, LLC +// https://www.iana.org/domains/root/db/coach.html +coach + +// codes : Binky Moon, LLC +// https://www.iana.org/domains/root/db/codes.html +codes + +// coffee : Binky Moon, LLC +// https://www.iana.org/domains/root/db/coffee.html +coffee + +// college : XYZ.COM LLC +// https://www.iana.org/domains/root/db/college.html +college + +// cologne : dotKoeln GmbH +// https://www.iana.org/domains/root/db/cologne.html +cologne + +// comcast : Comcast IP Holdings I, LLC +// https://www.iana.org/domains/root/db/comcast.html +comcast + +// commbank : COMMONWEALTH BANK OF AUSTRALIA +// https://www.iana.org/domains/root/db/commbank.html +commbank + +// community : Binky Moon, LLC +// https://www.iana.org/domains/root/db/community.html +community + +// company : Binky Moon, LLC +// https://www.iana.org/domains/root/db/company.html +company + +// compare : Registry Services, LLC +// https://www.iana.org/domains/root/db/compare.html +compare + +// computer : Binky Moon, LLC +// https://www.iana.org/domains/root/db/computer.html +computer + +// comsec : VeriSign, Inc. +// https://www.iana.org/domains/root/db/comsec.html +comsec + +// condos : Binky Moon, LLC +// https://www.iana.org/domains/root/db/condos.html +condos + +// construction : Binky Moon, LLC +// https://www.iana.org/domains/root/db/construction.html +construction + +// consulting : Dog Beach, LLC +// https://www.iana.org/domains/root/db/consulting.html +consulting + +// contact : Dog Beach, LLC +// https://www.iana.org/domains/root/db/contact.html +contact + +// contractors : Binky Moon, LLC +// https://www.iana.org/domains/root/db/contractors.html +contractors + +// cooking : Registry Services, LLC +// https://www.iana.org/domains/root/db/cooking.html +cooking + +// cool : Binky Moon, LLC +// https://www.iana.org/domains/root/db/cool.html +cool + +// corsica : Collectivité de Corse +// https://www.iana.org/domains/root/db/corsica.html +corsica + +// country : Internet Naming Company LLC +// https://www.iana.org/domains/root/db/country.html +country + +// coupon : Amazon Registry Services, Inc. +// https://www.iana.org/domains/root/db/coupon.html +coupon + +// coupons : Binky Moon, LLC +// https://www.iana.org/domains/root/db/coupons.html +coupons + +// courses : Registry Services, LLC +// https://www.iana.org/domains/root/db/courses.html +courses + +// cpa : American Institute of Certified Public Accountants +// https://www.iana.org/domains/root/db/cpa.html +cpa + +// credit : Binky Moon, LLC +// https://www.iana.org/domains/root/db/credit.html +credit + +// creditcard : Binky Moon, LLC +// https://www.iana.org/domains/root/db/creditcard.html +creditcard + +// creditunion : DotCooperation LLC +// https://www.iana.org/domains/root/db/creditunion.html +creditunion + +// cricket : dot Cricket Limited +// https://www.iana.org/domains/root/db/cricket.html +cricket + +// crown : Crown Equipment Corporation +// https://www.iana.org/domains/root/db/crown.html +crown + +// crs : Federated Co-operatives Limited +// https://www.iana.org/domains/root/db/crs.html +crs + +// cruise : Viking River Cruises (Bermuda) Ltd. +// https://www.iana.org/domains/root/db/cruise.html +cruise + +// cruises : Binky Moon, LLC +// https://www.iana.org/domains/root/db/cruises.html +cruises + +// cuisinella : SCHMIDT GROUPE S.A.S. +// https://www.iana.org/domains/root/db/cuisinella.html +cuisinella + +// cymru : Nominet UK +// https://www.iana.org/domains/root/db/cymru.html +cymru + +// cyou : ShortDot SA +// https://www.iana.org/domains/root/db/cyou.html +cyou + +// dabur : Dabur India Limited +// https://www.iana.org/domains/root/db/dabur.html +dabur + +// dad : Charleston Road Registry Inc. +// https://www.iana.org/domains/root/db/dad.html +dad + +// dance : Dog Beach, LLC +// https://www.iana.org/domains/root/db/dance.html +dance + +// data : Dish DBS Corporation +// https://www.iana.org/domains/root/db/data.html +data + +// date : dot Date Limited +// https://www.iana.org/domains/root/db/date.html +date + +// dating : Binky Moon, LLC +// https://www.iana.org/domains/root/db/dating.html +dating + +// datsun : NISSAN MOTOR CO., LTD. +// https://www.iana.org/domains/root/db/datsun.html +datsun + +// day : Charleston Road Registry Inc. +// https://www.iana.org/domains/root/db/day.html +day + +// dclk : Charleston Road Registry Inc. +// https://www.iana.org/domains/root/db/dclk.html +dclk + +// dds : Registry Services, LLC +// https://www.iana.org/domains/root/db/dds.html +dds + +// deal : Amazon Registry Services, Inc. +// https://www.iana.org/domains/root/db/deal.html +deal + +// dealer : Intercap Registry Inc. +// https://www.iana.org/domains/root/db/dealer.html +dealer + +// deals : Binky Moon, LLC +// https://www.iana.org/domains/root/db/deals.html +deals + +// degree : Dog Beach, LLC +// https://www.iana.org/domains/root/db/degree.html +degree + +// delivery : Binky Moon, LLC +// https://www.iana.org/domains/root/db/delivery.html +delivery + +// dell : Dell Inc. +// https://www.iana.org/domains/root/db/dell.html +dell + +// deloitte : Deloitte Touche Tohmatsu +// https://www.iana.org/domains/root/db/deloitte.html +deloitte + +// delta : Delta Air Lines, Inc. +// https://www.iana.org/domains/root/db/delta.html +delta + +// democrat : Dog Beach, LLC +// https://www.iana.org/domains/root/db/democrat.html +democrat + +// dental : Binky Moon, LLC +// https://www.iana.org/domains/root/db/dental.html +dental + +// dentist : Dog Beach, LLC +// https://www.iana.org/domains/root/db/dentist.html +dentist + +// desi +// https://www.iana.org/domains/root/db/desi.html +desi + +// design : Registry Services, LLC +// https://www.iana.org/domains/root/db/design.html +design + +// dev : Charleston Road Registry Inc. +// https://www.iana.org/domains/root/db/dev.html +dev + +// dhl : Deutsche Post AG +// https://www.iana.org/domains/root/db/dhl.html +dhl + +// diamonds : Binky Moon, LLC +// https://www.iana.org/domains/root/db/diamonds.html +diamonds + +// diet : XYZ.COM LLC +// https://www.iana.org/domains/root/db/diet.html +diet + +// digital : Binky Moon, LLC +// https://www.iana.org/domains/root/db/digital.html +digital + +// direct : Binky Moon, LLC +// https://www.iana.org/domains/root/db/direct.html +direct + +// directory : Binky Moon, LLC +// https://www.iana.org/domains/root/db/directory.html +directory + +// discount : Binky Moon, LLC +// https://www.iana.org/domains/root/db/discount.html +discount + +// discover : Discover Financial Services +// https://www.iana.org/domains/root/db/discover.html +discover + +// dish : Dish DBS Corporation +// https://www.iana.org/domains/root/db/dish.html +dish + +// diy : Internet Naming Company LLC +// https://www.iana.org/domains/root/db/diy.html +diy + +// dnp : Dai Nippon Printing Co., Ltd. +// https://www.iana.org/domains/root/db/dnp.html +dnp + +// docs : Charleston Road Registry Inc. +// https://www.iana.org/domains/root/db/docs.html +docs + +// doctor : Binky Moon, LLC +// https://www.iana.org/domains/root/db/doctor.html +doctor + +// dog : Binky Moon, LLC +// https://www.iana.org/domains/root/db/dog.html +dog + +// domains : Binky Moon, LLC +// https://www.iana.org/domains/root/db/domains.html +domains + +// dot : Dish DBS Corporation +// https://www.iana.org/domains/root/db/dot.html +dot + +// download : dot Support Limited +// https://www.iana.org/domains/root/db/download.html +download + +// drive : Charleston Road Registry Inc. +// https://www.iana.org/domains/root/db/drive.html +drive + +// dtv : Dish DBS Corporation +// https://www.iana.org/domains/root/db/dtv.html +dtv + +// dubai : Dubai Smart Government Department +// https://www.iana.org/domains/root/db/dubai.html +dubai + +// dunlop : The Goodyear Tire & Rubber Company +// https://www.iana.org/domains/root/db/dunlop.html +dunlop + +// dupont : DuPont Specialty Products USA, LLC +// https://www.iana.org/domains/root/db/dupont.html +dupont + +// durban : ZA Central Registry NPC trading as ZA Central Registry +// https://www.iana.org/domains/root/db/durban.html +durban + +// dvag : Deutsche Vermögensberatung Aktiengesellschaft DVAG +// https://www.iana.org/domains/root/db/dvag.html +dvag + +// dvr : DISH Technologies L.L.C. +// https://www.iana.org/domains/root/db/dvr.html +dvr + +// earth : Interlink Systems Innovation Institute K.K. +// https://www.iana.org/domains/root/db/earth.html +earth + +// eat : Charleston Road Registry Inc. +// https://www.iana.org/domains/root/db/eat.html +eat + +// eco : Big Room Inc. +// https://www.iana.org/domains/root/db/eco.html +eco + +// edeka : EDEKA Verband kaufmännischer Genossenschaften e.V. +// https://www.iana.org/domains/root/db/edeka.html +edeka + +// education : Binky Moon, LLC +// https://www.iana.org/domains/root/db/education.html +education + +// email : Binky Moon, LLC +// https://www.iana.org/domains/root/db/email.html +email + +// emerck : Merck KGaA +// https://www.iana.org/domains/root/db/emerck.html +emerck + +// energy : Binky Moon, LLC +// https://www.iana.org/domains/root/db/energy.html +energy + +// engineer : Dog Beach, LLC +// https://www.iana.org/domains/root/db/engineer.html +engineer + +// engineering : Binky Moon, LLC +// https://www.iana.org/domains/root/db/engineering.html +engineering + +// enterprises : Binky Moon, LLC +// https://www.iana.org/domains/root/db/enterprises.html +enterprises + +// epson : Seiko Epson Corporation +// https://www.iana.org/domains/root/db/epson.html +epson + +// equipment : Binky Moon, LLC +// https://www.iana.org/domains/root/db/equipment.html +equipment + +// ericsson : Telefonaktiebolaget L M Ericsson +// https://www.iana.org/domains/root/db/ericsson.html +ericsson + +// erni : ERNI Group Holding AG +// https://www.iana.org/domains/root/db/erni.html +erni + +// esq : Charleston Road Registry Inc. +// https://www.iana.org/domains/root/db/esq.html +esq + +// estate : Binky Moon, LLC +// https://www.iana.org/domains/root/db/estate.html +estate + +// eurovision : European Broadcasting Union (EBU) +// https://www.iana.org/domains/root/db/eurovision.html +eurovision + +// eus : Puntueus Fundazioa +// https://www.iana.org/domains/root/db/eus.html +eus + +// events : Binky Moon, LLC +// https://www.iana.org/domains/root/db/events.html +events + +// exchange : Binky Moon, LLC +// https://www.iana.org/domains/root/db/exchange.html +exchange + +// expert : Binky Moon, LLC +// https://www.iana.org/domains/root/db/expert.html +expert + +// exposed : Binky Moon, LLC +// https://www.iana.org/domains/root/db/exposed.html +exposed + +// express : Binky Moon, LLC +// https://www.iana.org/domains/root/db/express.html +express + +// extraspace : Extra Space Storage LLC +// https://www.iana.org/domains/root/db/extraspace.html +extraspace + +// fage : Fage International S.A. +// https://www.iana.org/domains/root/db/fage.html +fage + +// fail : Binky Moon, LLC +// https://www.iana.org/domains/root/db/fail.html +fail + +// fairwinds : FairWinds Partners, LLC +// https://www.iana.org/domains/root/db/fairwinds.html +fairwinds + +// faith : dot Faith Limited +// https://www.iana.org/domains/root/db/faith.html +faith + +// family : Dog Beach, LLC +// https://www.iana.org/domains/root/db/family.html +family + +// fan : Dog Beach, LLC +// https://www.iana.org/domains/root/db/fan.html +fan + +// fans : ZDNS International Limited +// https://www.iana.org/domains/root/db/fans.html +fans + +// farm : Binky Moon, LLC +// https://www.iana.org/domains/root/db/farm.html +farm + +// farmers : Farmers Insurance Exchange +// https://www.iana.org/domains/root/db/farmers.html +farmers + +// fashion : Registry Services, LLC +// https://www.iana.org/domains/root/db/fashion.html +fashion + +// fast : Amazon Registry Services, Inc. +// https://www.iana.org/domains/root/db/fast.html +fast + +// fedex : Federal Express Corporation +// https://www.iana.org/domains/root/db/fedex.html +fedex + +// feedback : Top Level Spectrum, Inc. +// https://www.iana.org/domains/root/db/feedback.html +feedback + +// ferrari : Fiat Chrysler Automobiles N.V. +// https://www.iana.org/domains/root/db/ferrari.html +ferrari + +// ferrero : Ferrero Trading Lux S.A. +// https://www.iana.org/domains/root/db/ferrero.html +ferrero + +// fidelity : Fidelity Brokerage Services LLC +// https://www.iana.org/domains/root/db/fidelity.html +fidelity + +// fido : Rogers Communications Canada Inc. +// https://www.iana.org/domains/root/db/fido.html +fido + +// film : Motion Picture Domain Registry Pty Ltd +// https://www.iana.org/domains/root/db/film.html +film + +// final : Núcleo de Informação e Coordenação do Ponto BR - NIC.br +// https://www.iana.org/domains/root/db/final.html +final + +// finance : Binky Moon, LLC +// https://www.iana.org/domains/root/db/finance.html +finance + +// financial : Binky Moon, LLC +// https://www.iana.org/domains/root/db/financial.html +financial + +// fire : Amazon Registry Services, Inc. +// https://www.iana.org/domains/root/db/fire.html +fire + +// firestone : Bridgestone Licensing Services, Inc +// https://www.iana.org/domains/root/db/firestone.html +firestone + +// firmdale : Firmdale Holdings Limited +// https://www.iana.org/domains/root/db/firmdale.html +firmdale + +// fish : Binky Moon, LLC +// https://www.iana.org/domains/root/db/fish.html +fish + +// fishing : Registry Services, LLC +// https://www.iana.org/domains/root/db/fishing.html +fishing + +// fit : Registry Services, LLC +// https://www.iana.org/domains/root/db/fit.html +fit + +// fitness : Binky Moon, LLC +// https://www.iana.org/domains/root/db/fitness.html +fitness + +// flickr : Flickr, Inc. +// https://www.iana.org/domains/root/db/flickr.html +flickr + +// flights : Binky Moon, LLC +// https://www.iana.org/domains/root/db/flights.html +flights + +// flir : FLIR Systems, Inc. +// https://www.iana.org/domains/root/db/flir.html +flir + +// florist : Binky Moon, LLC +// https://www.iana.org/domains/root/db/florist.html +florist + +// flowers : XYZ.COM LLC +// https://www.iana.org/domains/root/db/flowers.html +flowers + +// fly : Charleston Road Registry Inc. +// https://www.iana.org/domains/root/db/fly.html +fly + +// foo : Charleston Road Registry Inc. +// https://www.iana.org/domains/root/db/foo.html +foo + +// food : Internet Naming Company LLC +// https://www.iana.org/domains/root/db/food.html +food + +// football : Binky Moon, LLC +// https://www.iana.org/domains/root/db/football.html +football + +// ford : Ford Motor Company +// https://www.iana.org/domains/root/db/ford.html +ford + +// forex : Dog Beach, LLC +// https://www.iana.org/domains/root/db/forex.html +forex + +// forsale : Dog Beach, LLC +// https://www.iana.org/domains/root/db/forsale.html +forsale + +// forum : Fegistry, LLC +// https://www.iana.org/domains/root/db/forum.html +forum + +// foundation : Public Interest Registry +// https://www.iana.org/domains/root/db/foundation.html +foundation + +// fox : FOX Registry, LLC +// https://www.iana.org/domains/root/db/fox.html +fox + +// free : Amazon Registry Services, Inc. +// https://www.iana.org/domains/root/db/free.html +free + +// fresenius : Fresenius Immobilien-Verwaltungs-GmbH +// https://www.iana.org/domains/root/db/fresenius.html +fresenius + +// frl : FRLregistry B.V. +// https://www.iana.org/domains/root/db/frl.html +frl + +// frogans : OP3FT +// https://www.iana.org/domains/root/db/frogans.html +frogans + +// frontier : Frontier Communications Corporation +// https://www.iana.org/domains/root/db/frontier.html +frontier + +// ftr : Frontier Communications Corporation +// https://www.iana.org/domains/root/db/ftr.html +ftr + +// fujitsu : Fujitsu Limited +// https://www.iana.org/domains/root/db/fujitsu.html +fujitsu + +// fun : Radix FZC DMCC +// https://www.iana.org/domains/root/db/fun.html +fun + +// fund : Binky Moon, LLC +// https://www.iana.org/domains/root/db/fund.html +fund + +// furniture : Binky Moon, LLC +// https://www.iana.org/domains/root/db/furniture.html +furniture + +// futbol : Dog Beach, LLC +// https://www.iana.org/domains/root/db/futbol.html +futbol + +// fyi : Binky Moon, LLC +// https://www.iana.org/domains/root/db/fyi.html +fyi + +// gal : Asociación puntoGAL +// https://www.iana.org/domains/root/db/gal.html +gal + +// gallery : Binky Moon, LLC +// https://www.iana.org/domains/root/db/gallery.html +gallery + +// gallo : Gallo Vineyards, Inc. +// https://www.iana.org/domains/root/db/gallo.html +gallo + +// gallup : Gallup, Inc. +// https://www.iana.org/domains/root/db/gallup.html +gallup + +// game : XYZ.COM LLC +// https://www.iana.org/domains/root/db/game.html +game + +// games : Dog Beach, LLC +// https://www.iana.org/domains/root/db/games.html +games + +// gap : The Gap, Inc. +// https://www.iana.org/domains/root/db/gap.html +gap + +// garden : Registry Services, LLC +// https://www.iana.org/domains/root/db/garden.html +garden + +// gay : Registry Services, LLC +// https://www.iana.org/domains/root/db/gay.html +gay + +// gbiz : Charleston Road Registry Inc. +// https://www.iana.org/domains/root/db/gbiz.html +gbiz + +// gdn : Joint Stock Company "Navigation-information systems" +// https://www.iana.org/domains/root/db/gdn.html +gdn + +// gea : GEA Group Aktiengesellschaft +// https://www.iana.org/domains/root/db/gea.html +gea + +// gent : Easyhost BV +// https://www.iana.org/domains/root/db/gent.html +gent + +// genting : Resorts World Inc Pte. Ltd. +// https://www.iana.org/domains/root/db/genting.html +genting + +// george : Wal-Mart Stores, Inc. +// https://www.iana.org/domains/root/db/george.html +george + +// ggee : GMO Internet, Inc. +// https://www.iana.org/domains/root/db/ggee.html +ggee + +// gift : DotGift, LLC +// https://www.iana.org/domains/root/db/gift.html +gift + +// gifts : Binky Moon, LLC +// https://www.iana.org/domains/root/db/gifts.html +gifts + +// gives : Public Interest Registry +// https://www.iana.org/domains/root/db/gives.html +gives + +// giving : Public Interest Registry +// https://www.iana.org/domains/root/db/giving.html +giving + +// glass : Binky Moon, LLC +// https://www.iana.org/domains/root/db/glass.html +glass + +// gle : Charleston Road Registry Inc. +// https://www.iana.org/domains/root/db/gle.html +gle + +// global : Identity Digital Limited +// https://www.iana.org/domains/root/db/global.html +global + +// globo : Globo Comunicação e Participações S.A +// https://www.iana.org/domains/root/db/globo.html +globo + +// gmail : Charleston Road Registry Inc. +// https://www.iana.org/domains/root/db/gmail.html +gmail + +// gmbh : Binky Moon, LLC +// https://www.iana.org/domains/root/db/gmbh.html +gmbh + +// gmo : GMO Internet, Inc. +// https://www.iana.org/domains/root/db/gmo.html +gmo + +// gmx : 1&1 Mail & Media GmbH +// https://www.iana.org/domains/root/db/gmx.html +gmx + +// godaddy : Go Daddy East, LLC +// https://www.iana.org/domains/root/db/godaddy.html +godaddy + +// gold : Binky Moon, LLC +// https://www.iana.org/domains/root/db/gold.html +gold + +// goldpoint : YODOBASHI CAMERA CO.,LTD. +// https://www.iana.org/domains/root/db/goldpoint.html +goldpoint + +// golf : Binky Moon, LLC +// https://www.iana.org/domains/root/db/golf.html +golf + +// goo : NTT DOCOMO, INC. +// https://www.iana.org/domains/root/db/goo.html +goo + +// goodyear : The Goodyear Tire & Rubber Company +// https://www.iana.org/domains/root/db/goodyear.html +goodyear + +// goog : Charleston Road Registry Inc. +// https://www.iana.org/domains/root/db/goog.html +goog + +// google : Charleston Road Registry Inc. +// https://www.iana.org/domains/root/db/google.html +google + +// gop : Republican State Leadership Committee, Inc. +// https://www.iana.org/domains/root/db/gop.html +gop + +// got : Amazon Registry Services, Inc. +// https://www.iana.org/domains/root/db/got.html +got + +// grainger : Grainger Registry Services, LLC +// https://www.iana.org/domains/root/db/grainger.html +grainger + +// graphics : Binky Moon, LLC +// https://www.iana.org/domains/root/db/graphics.html +graphics + +// gratis : Binky Moon, LLC +// https://www.iana.org/domains/root/db/gratis.html +gratis + +// green : Identity Digital Limited +// https://www.iana.org/domains/root/db/green.html +green + +// gripe : Binky Moon, LLC +// https://www.iana.org/domains/root/db/gripe.html +gripe + +// grocery : Wal-Mart Stores, Inc. +// https://www.iana.org/domains/root/db/grocery.html +grocery + +// group : Binky Moon, LLC +// https://www.iana.org/domains/root/db/group.html +group + +// guardian : The Guardian Life Insurance Company of America +// https://www.iana.org/domains/root/db/guardian.html +guardian + +// gucci : Guccio Gucci S.p.a. +// https://www.iana.org/domains/root/db/gucci.html +gucci + +// guge : Charleston Road Registry Inc. +// https://www.iana.org/domains/root/db/guge.html +guge + +// guide : Binky Moon, LLC +// https://www.iana.org/domains/root/db/guide.html +guide + +// guitars : XYZ.COM LLC +// https://www.iana.org/domains/root/db/guitars.html +guitars + +// guru : Binky Moon, LLC +// https://www.iana.org/domains/root/db/guru.html +guru + +// hair : XYZ.COM LLC +// https://www.iana.org/domains/root/db/hair.html +hair + +// hamburg : Hamburg Top-Level-Domain GmbH +// https://www.iana.org/domains/root/db/hamburg.html +hamburg + +// hangout : Charleston Road Registry Inc. +// https://www.iana.org/domains/root/db/hangout.html +hangout + +// haus : Dog Beach, LLC +// https://www.iana.org/domains/root/db/haus.html +haus + +// hbo : HBO Registry Services, Inc. +// https://www.iana.org/domains/root/db/hbo.html +hbo + +// hdfc : HOUSING DEVELOPMENT FINANCE CORPORATION LIMITED +// https://www.iana.org/domains/root/db/hdfc.html +hdfc + +// hdfcbank : HDFC Bank Limited +// https://www.iana.org/domains/root/db/hdfcbank.html +hdfcbank + +// health : Registry Services, LLC +// https://www.iana.org/domains/root/db/health.html +health + +// healthcare : Binky Moon, LLC +// https://www.iana.org/domains/root/db/healthcare.html +healthcare + +// help : Innovation service Limited +// https://www.iana.org/domains/root/db/help.html +help + +// helsinki : City of Helsinki +// https://www.iana.org/domains/root/db/helsinki.html +helsinki + +// here : Charleston Road Registry Inc. +// https://www.iana.org/domains/root/db/here.html +here + +// hermes : HERMES INTERNATIONAL +// https://www.iana.org/domains/root/db/hermes.html +hermes + +// hiphop : Dot Hip Hop, LLC +// https://www.iana.org/domains/root/db/hiphop.html +hiphop + +// hisamitsu : Hisamitsu Pharmaceutical Co.,Inc. +// https://www.iana.org/domains/root/db/hisamitsu.html +hisamitsu + +// hitachi : Hitachi, Ltd. +// https://www.iana.org/domains/root/db/hitachi.html +hitachi + +// hiv : Internet Naming Company LLC +// https://www.iana.org/domains/root/db/hiv.html +hiv + +// hkt : PCCW-HKT DataCom Services Limited +// https://www.iana.org/domains/root/db/hkt.html +hkt + +// hockey : Binky Moon, LLC +// https://www.iana.org/domains/root/db/hockey.html +hockey + +// holdings : Binky Moon, LLC +// https://www.iana.org/domains/root/db/holdings.html +holdings + +// holiday : Binky Moon, LLC +// https://www.iana.org/domains/root/db/holiday.html +holiday + +// homedepot : Home Depot Product Authority, LLC +// https://www.iana.org/domains/root/db/homedepot.html +homedepot + +// homegoods : The TJX Companies, Inc. +// https://www.iana.org/domains/root/db/homegoods.html +homegoods + +// homes : XYZ.COM LLC +// https://www.iana.org/domains/root/db/homes.html +homes + +// homesense : The TJX Companies, Inc. +// https://www.iana.org/domains/root/db/homesense.html +homesense + +// honda : Honda Motor Co., Ltd. +// https://www.iana.org/domains/root/db/honda.html +honda + +// horse : Registry Services, LLC +// https://www.iana.org/domains/root/db/horse.html +horse + +// hospital : Binky Moon, LLC +// https://www.iana.org/domains/root/db/hospital.html +hospital + +// host : Radix FZC DMCC +// https://www.iana.org/domains/root/db/host.html +host + +// hosting : XYZ.COM LLC +// https://www.iana.org/domains/root/db/hosting.html +hosting + +// hot : Amazon Registry Services, Inc. +// https://www.iana.org/domains/root/db/hot.html +hot + +// hotels : Booking.com B.V. +// https://www.iana.org/domains/root/db/hotels.html +hotels + +// hotmail : Microsoft Corporation +// https://www.iana.org/domains/root/db/hotmail.html +hotmail + +// house : Binky Moon, LLC +// https://www.iana.org/domains/root/db/house.html +house + +// how : Charleston Road Registry Inc. +// https://www.iana.org/domains/root/db/how.html +how + +// hsbc : HSBC Global Services (UK) Limited +// https://www.iana.org/domains/root/db/hsbc.html +hsbc + +// hughes : Hughes Satellite Systems Corporation +// https://www.iana.org/domains/root/db/hughes.html +hughes + +// hyatt : Hyatt GTLD, L.L.C. +// https://www.iana.org/domains/root/db/hyatt.html +hyatt + +// hyundai : Hyundai Motor Company +// https://www.iana.org/domains/root/db/hyundai.html +hyundai + +// ibm : International Business Machines Corporation +// https://www.iana.org/domains/root/db/ibm.html +ibm + +// icbc : Industrial and Commercial Bank of China Limited +// https://www.iana.org/domains/root/db/icbc.html +icbc + +// ice : IntercontinentalExchange, Inc. +// https://www.iana.org/domains/root/db/ice.html +ice + +// icu : ShortDot SA +// https://www.iana.org/domains/root/db/icu.html +icu + +// ieee : IEEE Global LLC +// https://www.iana.org/domains/root/db/ieee.html +ieee + +// ifm : ifm electronic gmbh +// https://www.iana.org/domains/root/db/ifm.html +ifm + +// ikano : Ikano S.A. +// https://www.iana.org/domains/root/db/ikano.html +ikano + +// imamat : Fondation Aga Khan (Aga Khan Foundation) +// https://www.iana.org/domains/root/db/imamat.html +imamat + +// imdb : Amazon Registry Services, Inc. +// https://www.iana.org/domains/root/db/imdb.html +imdb + +// immo : Binky Moon, LLC +// https://www.iana.org/domains/root/db/immo.html +immo + +// immobilien : Dog Beach, LLC +// https://www.iana.org/domains/root/db/immobilien.html +immobilien + +// inc : Intercap Registry Inc. +// https://www.iana.org/domains/root/db/inc.html +inc + +// industries : Binky Moon, LLC +// https://www.iana.org/domains/root/db/industries.html +industries + +// infiniti : NISSAN MOTOR CO., LTD. +// https://www.iana.org/domains/root/db/infiniti.html +infiniti + +// ing : Charleston Road Registry Inc. +// https://www.iana.org/domains/root/db/ing.html +ing + +// ink : Registry Services, LLC +// https://www.iana.org/domains/root/db/ink.html +ink + +// institute : Binky Moon, LLC +// https://www.iana.org/domains/root/db/institute.html +institute + +// insurance : fTLD Registry Services LLC +// https://www.iana.org/domains/root/db/insurance.html +insurance + +// insure : Binky Moon, LLC +// https://www.iana.org/domains/root/db/insure.html +insure + +// international : Binky Moon, LLC +// https://www.iana.org/domains/root/db/international.html +international + +// intuit : Intuit Administrative Services, Inc. +// https://www.iana.org/domains/root/db/intuit.html +intuit + +// investments : Binky Moon, LLC +// https://www.iana.org/domains/root/db/investments.html +investments + +// ipiranga : Ipiranga Produtos de Petroleo S.A. +// https://www.iana.org/domains/root/db/ipiranga.html +ipiranga + +// irish : Binky Moon, LLC +// https://www.iana.org/domains/root/db/irish.html +irish + +// ismaili : Fondation Aga Khan (Aga Khan Foundation) +// https://www.iana.org/domains/root/db/ismaili.html +ismaili + +// ist : Istanbul Metropolitan Municipality +// https://www.iana.org/domains/root/db/ist.html +ist + +// istanbul : Istanbul Metropolitan Municipality +// https://www.iana.org/domains/root/db/istanbul.html +istanbul + +// itau : Itau Unibanco Holding S.A. +// https://www.iana.org/domains/root/db/itau.html +itau + +// itv : ITV Services Limited +// https://www.iana.org/domains/root/db/itv.html +itv + +// jaguar : Jaguar Land Rover Ltd +// https://www.iana.org/domains/root/db/jaguar.html +jaguar + +// java : Oracle Corporation +// https://www.iana.org/domains/root/db/java.html +java + +// jcb : JCB Co., Ltd. +// https://www.iana.org/domains/root/db/jcb.html +jcb + +// jeep : FCA US LLC. +// https://www.iana.org/domains/root/db/jeep.html +jeep + +// jetzt : Binky Moon, LLC +// https://www.iana.org/domains/root/db/jetzt.html +jetzt + +// jewelry : Binky Moon, LLC +// https://www.iana.org/domains/root/db/jewelry.html +jewelry + +// jio : Reliance Industries Limited +// https://www.iana.org/domains/root/db/jio.html +jio + +// jll : Jones Lang LaSalle Incorporated +// https://www.iana.org/domains/root/db/jll.html +jll + +// jmp : Matrix IP LLC +// https://www.iana.org/domains/root/db/jmp.html +jmp + +// jnj : Johnson & Johnson Services, Inc. +// https://www.iana.org/domains/root/db/jnj.html +jnj + +// joburg : ZA Central Registry NPC trading as ZA Central Registry +// https://www.iana.org/domains/root/db/joburg.html +joburg + +// jot : Amazon Registry Services, Inc. +// https://www.iana.org/domains/root/db/jot.html +jot + +// joy : Amazon Registry Services, Inc. +// https://www.iana.org/domains/root/db/joy.html +joy + +// jpmorgan : JPMorgan Chase Bank, National Association +// https://www.iana.org/domains/root/db/jpmorgan.html +jpmorgan + +// jprs : Japan Registry Services Co., Ltd. +// https://www.iana.org/domains/root/db/jprs.html +jprs + +// juegos : Internet Naming Company LLC +// https://www.iana.org/domains/root/db/juegos.html +juegos + +// juniper : JUNIPER NETWORKS, INC. +// https://www.iana.org/domains/root/db/juniper.html +juniper + +// kaufen : Dog Beach, LLC +// https://www.iana.org/domains/root/db/kaufen.html +kaufen + +// kddi : KDDI CORPORATION +// https://www.iana.org/domains/root/db/kddi.html +kddi + +// kerryhotels : Kerry Trading Co. Limited +// https://www.iana.org/domains/root/db/kerryhotels.html +kerryhotels + +// kerrylogistics : Kerry Trading Co. Limited +// https://www.iana.org/domains/root/db/kerrylogistics.html +kerrylogistics + +// kerryproperties : Kerry Trading Co. Limited +// https://www.iana.org/domains/root/db/kerryproperties.html +kerryproperties + +// kfh : Kuwait Finance House +// https://www.iana.org/domains/root/db/kfh.html +kfh + +// kia : KIA MOTORS CORPORATION +// https://www.iana.org/domains/root/db/kia.html +kia + +// kids : DotKids Foundation Limited +// https://www.iana.org/domains/root/db/kids.html +kids + +// kim : Identity Digital Limited +// https://www.iana.org/domains/root/db/kim.html +kim + +// kindle : Amazon Registry Services, Inc. +// https://www.iana.org/domains/root/db/kindle.html +kindle + +// kitchen : Binky Moon, LLC +// https://www.iana.org/domains/root/db/kitchen.html +kitchen + +// kiwi : DOT KIWI LIMITED +// https://www.iana.org/domains/root/db/kiwi.html +kiwi + +// koeln : dotKoeln GmbH +// https://www.iana.org/domains/root/db/koeln.html +koeln + +// komatsu : Komatsu Ltd. +// https://www.iana.org/domains/root/db/komatsu.html +komatsu + +// kosher : Kosher Marketing Assets LLC +// https://www.iana.org/domains/root/db/kosher.html +kosher + +// kpmg : KPMG International Cooperative (KPMG International Genossenschaft) +// https://www.iana.org/domains/root/db/kpmg.html +kpmg + +// kpn : Koninklijke KPN N.V. +// https://www.iana.org/domains/root/db/kpn.html +kpn + +// krd : KRG Department of Information Technology +// https://www.iana.org/domains/root/db/krd.html +krd + +// kred : KredTLD Pty Ltd +// https://www.iana.org/domains/root/db/kred.html +kred + +// kuokgroup : Kerry Trading Co. Limited +// https://www.iana.org/domains/root/db/kuokgroup.html +kuokgroup + +// kyoto : Academic Institution: Kyoto Jyoho Gakuen +// https://www.iana.org/domains/root/db/kyoto.html +kyoto + +// lacaixa : Fundación Bancaria Caixa d’Estalvis i Pensions de Barcelona, “la Caixa” +// https://www.iana.org/domains/root/db/lacaixa.html +lacaixa + +// lamborghini : Automobili Lamborghini S.p.A. +// https://www.iana.org/domains/root/db/lamborghini.html +lamborghini + +// lamer : The Estée Lauder Companies Inc. +// https://www.iana.org/domains/root/db/lamer.html +lamer + +// lancaster : LANCASTER +// https://www.iana.org/domains/root/db/lancaster.html +lancaster + +// land : Binky Moon, LLC +// https://www.iana.org/domains/root/db/land.html +land + +// landrover : Jaguar Land Rover Ltd +// https://www.iana.org/domains/root/db/landrover.html +landrover + +// lanxess : LANXESS Corporation +// https://www.iana.org/domains/root/db/lanxess.html +lanxess + +// lasalle : Jones Lang LaSalle Incorporated +// https://www.iana.org/domains/root/db/lasalle.html +lasalle + +// lat : XYZ.COM LLC +// https://www.iana.org/domains/root/db/lat.html +lat + +// latino : Dish DBS Corporation +// https://www.iana.org/domains/root/db/latino.html +latino + +// latrobe : La Trobe University +// https://www.iana.org/domains/root/db/latrobe.html +latrobe + +// law : Registry Services, LLC +// https://www.iana.org/domains/root/db/law.html +law + +// lawyer : Dog Beach, LLC +// https://www.iana.org/domains/root/db/lawyer.html +lawyer + +// lds : IRI Domain Management, LLC +// https://www.iana.org/domains/root/db/lds.html +lds + +// lease : Binky Moon, LLC +// https://www.iana.org/domains/root/db/lease.html +lease + +// leclerc : A.C.D. LEC Association des Centres Distributeurs Edouard Leclerc +// https://www.iana.org/domains/root/db/leclerc.html +leclerc + +// lefrak : LeFrak Organization, Inc. +// https://www.iana.org/domains/root/db/lefrak.html +lefrak + +// legal : Binky Moon, LLC +// https://www.iana.org/domains/root/db/legal.html +legal + +// lego : LEGO Juris A/S +// https://www.iana.org/domains/root/db/lego.html +lego + +// lexus : TOYOTA MOTOR CORPORATION +// https://www.iana.org/domains/root/db/lexus.html +lexus + +// lgbt : Identity Digital Limited +// https://www.iana.org/domains/root/db/lgbt.html +lgbt + +// lidl : Schwarz Domains und Services GmbH & Co. KG +// https://www.iana.org/domains/root/db/lidl.html +lidl + +// life : Binky Moon, LLC +// https://www.iana.org/domains/root/db/life.html +life + +// lifeinsurance : American Council of Life Insurers +// https://www.iana.org/domains/root/db/lifeinsurance.html +lifeinsurance + +// lifestyle : Internet Naming Company LLC +// https://www.iana.org/domains/root/db/lifestyle.html +lifestyle + +// lighting : Binky Moon, LLC +// https://www.iana.org/domains/root/db/lighting.html +lighting + +// like : Amazon Registry Services, Inc. +// https://www.iana.org/domains/root/db/like.html +like + +// lilly : Eli Lilly and Company +// https://www.iana.org/domains/root/db/lilly.html +lilly + +// limited : Binky Moon, LLC +// https://www.iana.org/domains/root/db/limited.html +limited + +// limo : Binky Moon, LLC +// https://www.iana.org/domains/root/db/limo.html +limo + +// lincoln : Ford Motor Company +// https://www.iana.org/domains/root/db/lincoln.html +lincoln + +// link : Nova Registry Ltd +// https://www.iana.org/domains/root/db/link.html +link + +// lipsy : Lipsy Ltd +// https://www.iana.org/domains/root/db/lipsy.html +lipsy + +// live : Dog Beach, LLC +// https://www.iana.org/domains/root/db/live.html +live + +// living : Internet Naming Company LLC +// https://www.iana.org/domains/root/db/living.html +living + +// llc : Identity Digital Limited +// https://www.iana.org/domains/root/db/llc.html +llc + +// llp : Intercap Registry Inc. +// https://www.iana.org/domains/root/db/llp.html +llp + +// loan : dot Loan Limited +// https://www.iana.org/domains/root/db/loan.html +loan + +// loans : Binky Moon, LLC +// https://www.iana.org/domains/root/db/loans.html +loans + +// locker : Orange Domains LLC +// https://www.iana.org/domains/root/db/locker.html +locker + +// locus : Locus Analytics LLC +// https://www.iana.org/domains/root/db/locus.html +locus + +// lol : XYZ.COM LLC +// https://www.iana.org/domains/root/db/lol.html +lol + +// london : Dot London Domains Limited +// https://www.iana.org/domains/root/db/london.html +london + +// lotte : Lotte Holdings Co., Ltd. +// https://www.iana.org/domains/root/db/lotte.html +lotte + +// lotto : Identity Digital Limited +// https://www.iana.org/domains/root/db/lotto.html +lotto + +// love : Merchant Law Group LLP +// https://www.iana.org/domains/root/db/love.html +love + +// lpl : LPL Holdings, Inc. +// https://www.iana.org/domains/root/db/lpl.html +lpl + +// lplfinancial : LPL Holdings, Inc. +// https://www.iana.org/domains/root/db/lplfinancial.html +lplfinancial + +// ltd : Binky Moon, LLC +// https://www.iana.org/domains/root/db/ltd.html +ltd + +// ltda : InterNetX, Corp +// https://www.iana.org/domains/root/db/ltda.html +ltda + +// lundbeck : H. Lundbeck A/S +// https://www.iana.org/domains/root/db/lundbeck.html +lundbeck + +// luxe : Registry Services, LLC +// https://www.iana.org/domains/root/db/luxe.html +luxe + +// luxury : Luxury Partners, LLC +// https://www.iana.org/domains/root/db/luxury.html +luxury + +// madrid : Comunidad de Madrid +// https://www.iana.org/domains/root/db/madrid.html +madrid + +// maif : Mutuelle Assurance Instituteur France (MAIF) +// https://www.iana.org/domains/root/db/maif.html +maif + +// maison : Binky Moon, LLC +// https://www.iana.org/domains/root/db/maison.html +maison + +// makeup : XYZ.COM LLC +// https://www.iana.org/domains/root/db/makeup.html +makeup + +// man : MAN SE +// https://www.iana.org/domains/root/db/man.html +man + +// management : Binky Moon, LLC +// https://www.iana.org/domains/root/db/management.html +management + +// mango : PUNTO FA S.L. +// https://www.iana.org/domains/root/db/mango.html +mango + +// map : Charleston Road Registry Inc. +// https://www.iana.org/domains/root/db/map.html +map + +// market : Dog Beach, LLC +// https://www.iana.org/domains/root/db/market.html +market + +// marketing : Binky Moon, LLC +// https://www.iana.org/domains/root/db/marketing.html +marketing + +// markets : Dog Beach, LLC +// https://www.iana.org/domains/root/db/markets.html +markets + +// marriott : Marriott Worldwide Corporation +// https://www.iana.org/domains/root/db/marriott.html +marriott + +// marshalls : The TJX Companies, Inc. +// https://www.iana.org/domains/root/db/marshalls.html +marshalls + +// mattel : Mattel Sites, Inc. +// https://www.iana.org/domains/root/db/mattel.html +mattel + +// mba : Binky Moon, LLC +// https://www.iana.org/domains/root/db/mba.html +mba + +// mckinsey : McKinsey Holdings, Inc. +// https://www.iana.org/domains/root/db/mckinsey.html +mckinsey + +// med : Medistry LLC +// https://www.iana.org/domains/root/db/med.html +med + +// media : Binky Moon, LLC +// https://www.iana.org/domains/root/db/media.html +media + +// meet : Charleston Road Registry Inc. +// https://www.iana.org/domains/root/db/meet.html +meet + +// melbourne : The Crown in right of the State of Victoria, represented by its Department of State Development, Business and Innovation +// https://www.iana.org/domains/root/db/melbourne.html +melbourne + +// meme : Charleston Road Registry Inc. +// https://www.iana.org/domains/root/db/meme.html +meme + +// memorial : Dog Beach, LLC +// https://www.iana.org/domains/root/db/memorial.html +memorial + +// men : Exclusive Registry Limited +// https://www.iana.org/domains/root/db/men.html +men + +// menu : Dot Menu Registry, LLC +// https://www.iana.org/domains/root/db/menu.html +menu + +// merckmsd : MSD Registry Holdings, Inc. +// https://www.iana.org/domains/root/db/merckmsd.html +merckmsd + +// miami : Registry Services, LLC +// https://www.iana.org/domains/root/db/miami.html +miami + +// microsoft : Microsoft Corporation +// https://www.iana.org/domains/root/db/microsoft.html +microsoft + +// mini : Bayerische Motoren Werke Aktiengesellschaft +// https://www.iana.org/domains/root/db/mini.html +mini + +// mint : Intuit Administrative Services, Inc. +// https://www.iana.org/domains/root/db/mint.html +mint + +// mit : Massachusetts Institute of Technology +// https://www.iana.org/domains/root/db/mit.html +mit + +// mitsubishi : Mitsubishi Corporation +// https://www.iana.org/domains/root/db/mitsubishi.html +mitsubishi + +// mlb : MLB Advanced Media DH, LLC +// https://www.iana.org/domains/root/db/mlb.html +mlb + +// mls : The Canadian Real Estate Association +// https://www.iana.org/domains/root/db/mls.html +mls + +// mma : MMA IARD +// https://www.iana.org/domains/root/db/mma.html +mma + +// mobile : Dish DBS Corporation +// https://www.iana.org/domains/root/db/mobile.html +mobile + +// moda : Dog Beach, LLC +// https://www.iana.org/domains/root/db/moda.html +moda + +// moe : Interlink Systems Innovation Institute K.K. +// https://www.iana.org/domains/root/db/moe.html +moe + +// moi : Amazon Registry Services, Inc. +// https://www.iana.org/domains/root/db/moi.html +moi + +// mom : XYZ.COM LLC +// https://www.iana.org/domains/root/db/mom.html +mom + +// monash : Monash University +// https://www.iana.org/domains/root/db/monash.html +monash + +// money : Binky Moon, LLC +// https://www.iana.org/domains/root/db/money.html +money + +// monster : XYZ.COM LLC +// https://www.iana.org/domains/root/db/monster.html +monster + +// mormon : IRI Domain Management, LLC +// https://www.iana.org/domains/root/db/mormon.html +mormon + +// mortgage : Dog Beach, LLC +// https://www.iana.org/domains/root/db/mortgage.html +mortgage + +// moscow : Foundation for Assistance for Internet Technologies and Infrastructure Development (FAITID) +// https://www.iana.org/domains/root/db/moscow.html +moscow + +// moto : Motorola Trademark Holdings, LLC +// https://www.iana.org/domains/root/db/moto.html +moto + +// motorcycles : XYZ.COM LLC +// https://www.iana.org/domains/root/db/motorcycles.html +motorcycles + +// mov : Charleston Road Registry Inc. +// https://www.iana.org/domains/root/db/mov.html +mov + +// movie : Binky Moon, LLC +// https://www.iana.org/domains/root/db/movie.html +movie + +// msd : MSD Registry Holdings, Inc. +// https://www.iana.org/domains/root/db/msd.html +msd + +// mtn : MTN Dubai Limited +// https://www.iana.org/domains/root/db/mtn.html +mtn + +// mtr : MTR Corporation Limited +// https://www.iana.org/domains/root/db/mtr.html +mtr + +// music : DotMusic Limited +// https://www.iana.org/domains/root/db/music.html +music + +// nab : National Australia Bank Limited +// https://www.iana.org/domains/root/db/nab.html +nab + +// nagoya : GMO Registry, Inc. +// https://www.iana.org/domains/root/db/nagoya.html +nagoya + +// natura : NATURA COSMÉTICOS S.A. +// https://www.iana.org/domains/root/db/natura.html +natura + +// navy : Dog Beach, LLC +// https://www.iana.org/domains/root/db/navy.html +navy + +// nba : NBA REGISTRY, LLC +// https://www.iana.org/domains/root/db/nba.html +nba + +// nec : NEC Corporation +// https://www.iana.org/domains/root/db/nec.html +nec + +// netbank : COMMONWEALTH BANK OF AUSTRALIA +// https://www.iana.org/domains/root/db/netbank.html +netbank + +// netflix : Netflix, Inc. +// https://www.iana.org/domains/root/db/netflix.html +netflix + +// network : Binky Moon, LLC +// https://www.iana.org/domains/root/db/network.html +network + +// neustar : NeuStar, Inc. +// https://www.iana.org/domains/root/db/neustar.html +neustar + +// new : Charleston Road Registry Inc. +// https://www.iana.org/domains/root/db/new.html +new + +// news : Dog Beach, LLC +// https://www.iana.org/domains/root/db/news.html +news + +// next : Next plc +// https://www.iana.org/domains/root/db/next.html +next + +// nextdirect : Next plc +// https://www.iana.org/domains/root/db/nextdirect.html +nextdirect + +// nexus : Charleston Road Registry Inc. +// https://www.iana.org/domains/root/db/nexus.html +nexus + +// nfl : NFL Reg Ops LLC +// https://www.iana.org/domains/root/db/nfl.html +nfl + +// ngo : Public Interest Registry +// https://www.iana.org/domains/root/db/ngo.html +ngo + +// nhk : Japan Broadcasting Corporation (NHK) +// https://www.iana.org/domains/root/db/nhk.html +nhk + +// nico : DWANGO Co., Ltd. +// https://www.iana.org/domains/root/db/nico.html +nico + +// nike : NIKE, Inc. +// https://www.iana.org/domains/root/db/nike.html +nike + +// nikon : NIKON CORPORATION +// https://www.iana.org/domains/root/db/nikon.html +nikon + +// ninja : Dog Beach, LLC +// https://www.iana.org/domains/root/db/ninja.html +ninja + +// nissan : NISSAN MOTOR CO., LTD. +// https://www.iana.org/domains/root/db/nissan.html +nissan + +// nissay : Nippon Life Insurance Company +// https://www.iana.org/domains/root/db/nissay.html +nissay + +// nokia : Nokia Corporation +// https://www.iana.org/domains/root/db/nokia.html +nokia + +// norton : NortonLifeLock Inc. +// https://www.iana.org/domains/root/db/norton.html +norton + +// now : Amazon Registry Services, Inc. +// https://www.iana.org/domains/root/db/now.html +now + +// nowruz : Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti. +// https://www.iana.org/domains/root/db/nowruz.html +nowruz + +// nowtv : Starbucks (HK) Limited +// https://www.iana.org/domains/root/db/nowtv.html +nowtv + +// nra : NRA Holdings Company, INC. +// https://www.iana.org/domains/root/db/nra.html +nra + +// nrw : Minds + Machines GmbH +// https://www.iana.org/domains/root/db/nrw.html +nrw + +// ntt : NIPPON TELEGRAPH AND TELEPHONE CORPORATION +// https://www.iana.org/domains/root/db/ntt.html +ntt + +// nyc : The City of New York by and through the New York City Department of Information Technology & Telecommunications +// https://www.iana.org/domains/root/db/nyc.html +nyc + +// obi : OBI Group Holding SE & Co. KGaA +// https://www.iana.org/domains/root/db/obi.html +obi + +// observer : Fegistry, LLC +// https://www.iana.org/domains/root/db/observer.html +observer + +// office : Microsoft Corporation +// https://www.iana.org/domains/root/db/office.html +office + +// okinawa : BRregistry, Inc. +// https://www.iana.org/domains/root/db/okinawa.html +okinawa + +// olayan : Competrol (Luxembourg) Sarl +// https://www.iana.org/domains/root/db/olayan.html +olayan + +// olayangroup : Competrol (Luxembourg) Sarl +// https://www.iana.org/domains/root/db/olayangroup.html +olayangroup + +// oldnavy : The Gap, Inc. +// https://www.iana.org/domains/root/db/oldnavy.html +oldnavy + +// ollo : Dish DBS Corporation +// https://www.iana.org/domains/root/db/ollo.html +ollo + +// omega : The Swatch Group Ltd +// https://www.iana.org/domains/root/db/omega.html +omega + +// one : One.com A/S +// https://www.iana.org/domains/root/db/one.html +one + +// ong : Public Interest Registry +// https://www.iana.org/domains/root/db/ong.html +ong + +// onl : iRegistry GmbH +// https://www.iana.org/domains/root/db/onl.html +onl + +// online : Radix FZC DMCC +// https://www.iana.org/domains/root/db/online.html +online + +// ooo : INFIBEAM AVENUES LIMITED +// https://www.iana.org/domains/root/db/ooo.html +ooo + +// open : American Express Travel Related Services Company, Inc. +// https://www.iana.org/domains/root/db/open.html +open + +// oracle : Oracle Corporation +// https://www.iana.org/domains/root/db/oracle.html +oracle + +// orange : Orange Brand Services Limited +// https://www.iana.org/domains/root/db/orange.html +orange + +// organic : Identity Digital Limited +// https://www.iana.org/domains/root/db/organic.html +organic + +// origins : The Estée Lauder Companies Inc. +// https://www.iana.org/domains/root/db/origins.html +origins + +// osaka : Osaka Registry Co., Ltd. +// https://www.iana.org/domains/root/db/osaka.html +osaka + +// otsuka : Otsuka Holdings Co., Ltd. +// https://www.iana.org/domains/root/db/otsuka.html +otsuka + +// ott : Dish DBS Corporation +// https://www.iana.org/domains/root/db/ott.html +ott + +// ovh : MédiaBC +// https://www.iana.org/domains/root/db/ovh.html +ovh + +// page : Charleston Road Registry Inc. +// https://www.iana.org/domains/root/db/page.html +page + +// panasonic : Panasonic Holdings Corporation +// https://www.iana.org/domains/root/db/panasonic.html +panasonic + +// paris : City of Paris +// https://www.iana.org/domains/root/db/paris.html +paris + +// pars : Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti. +// https://www.iana.org/domains/root/db/pars.html +pars + +// partners : Binky Moon, LLC +// https://www.iana.org/domains/root/db/partners.html +partners + +// parts : Binky Moon, LLC +// https://www.iana.org/domains/root/db/parts.html +parts + +// party : Blue Sky Registry Limited +// https://www.iana.org/domains/root/db/party.html +party + +// pay : Amazon Registry Services, Inc. +// https://www.iana.org/domains/root/db/pay.html +pay + +// pccw : PCCW Enterprises Limited +// https://www.iana.org/domains/root/db/pccw.html +pccw + +// pet : Identity Digital Limited +// https://www.iana.org/domains/root/db/pet.html +pet + +// pfizer : Pfizer Inc. +// https://www.iana.org/domains/root/db/pfizer.html +pfizer + +// pharmacy : National Association of Boards of Pharmacy +// https://www.iana.org/domains/root/db/pharmacy.html +pharmacy + +// phd : Charleston Road Registry Inc. +// https://www.iana.org/domains/root/db/phd.html +phd + +// philips : Koninklijke Philips N.V. +// https://www.iana.org/domains/root/db/philips.html +philips + +// phone : Dish DBS Corporation +// https://www.iana.org/domains/root/db/phone.html +phone + +// photo : Registry Services, LLC +// https://www.iana.org/domains/root/db/photo.html +photo + +// photography : Binky Moon, LLC +// https://www.iana.org/domains/root/db/photography.html +photography + +// photos : Binky Moon, LLC +// https://www.iana.org/domains/root/db/photos.html +photos + +// physio : PhysBiz Pty Ltd +// https://www.iana.org/domains/root/db/physio.html +physio + +// pics : XYZ.COM LLC +// https://www.iana.org/domains/root/db/pics.html +pics + +// pictet : Pictet Europe S.A. +// https://www.iana.org/domains/root/db/pictet.html +pictet + +// pictures : Binky Moon, LLC +// https://www.iana.org/domains/root/db/pictures.html +pictures + +// pid : Top Level Spectrum, Inc. +// https://www.iana.org/domains/root/db/pid.html +pid + +// pin : Amazon Registry Services, Inc. +// https://www.iana.org/domains/root/db/pin.html +pin + +// ping : Ping Registry Provider, Inc. +// https://www.iana.org/domains/root/db/ping.html +ping + +// pink : Identity Digital Limited +// https://www.iana.org/domains/root/db/pink.html +pink + +// pioneer : Pioneer Corporation +// https://www.iana.org/domains/root/db/pioneer.html +pioneer + +// pizza : Binky Moon, LLC +// https://www.iana.org/domains/root/db/pizza.html +pizza + +// place : Binky Moon, LLC +// https://www.iana.org/domains/root/db/place.html +place + +// play : Charleston Road Registry Inc. +// https://www.iana.org/domains/root/db/play.html +play + +// playstation : Sony Interactive Entertainment Inc. +// https://www.iana.org/domains/root/db/playstation.html +playstation + +// plumbing : Binky Moon, LLC +// https://www.iana.org/domains/root/db/plumbing.html +plumbing + +// plus : Binky Moon, LLC +// https://www.iana.org/domains/root/db/plus.html +plus + +// pnc : PNC Domain Co., LLC +// https://www.iana.org/domains/root/db/pnc.html +pnc + +// pohl : Deutsche Vermögensberatung Aktiengesellschaft DVAG +// https://www.iana.org/domains/root/db/pohl.html +pohl + +// poker : Identity Digital Limited +// https://www.iana.org/domains/root/db/poker.html +poker + +// politie : Politie Nederland +// https://www.iana.org/domains/root/db/politie.html +politie + +// porn : ICM Registry PN LLC +// https://www.iana.org/domains/root/db/porn.html +porn + +// pramerica : Prudential Financial, Inc. +// https://www.iana.org/domains/root/db/pramerica.html +pramerica + +// praxi : Praxi S.p.A. +// https://www.iana.org/domains/root/db/praxi.html +praxi + +// press : Radix FZC DMCC +// https://www.iana.org/domains/root/db/press.html +press + +// prime : Amazon Registry Services, Inc. +// https://www.iana.org/domains/root/db/prime.html +prime + +// prod : Charleston Road Registry Inc. +// https://www.iana.org/domains/root/db/prod.html +prod + +// productions : Binky Moon, LLC +// https://www.iana.org/domains/root/db/productions.html +productions + +// prof : Charleston Road Registry Inc. +// https://www.iana.org/domains/root/db/prof.html +prof + +// progressive : Progressive Casualty Insurance Company +// https://www.iana.org/domains/root/db/progressive.html +progressive + +// promo : Identity Digital Limited +// https://www.iana.org/domains/root/db/promo.html +promo + +// properties : Binky Moon, LLC +// https://www.iana.org/domains/root/db/properties.html +properties + +// property : Digital Property Infrastructure Limited +// https://www.iana.org/domains/root/db/property.html +property + +// protection : XYZ.COM LLC +// https://www.iana.org/domains/root/db/protection.html +protection + +// pru : Prudential Financial, Inc. +// https://www.iana.org/domains/root/db/pru.html +pru + +// prudential : Prudential Financial, Inc. +// https://www.iana.org/domains/root/db/prudential.html +prudential + +// pub : Dog Beach, LLC +// https://www.iana.org/domains/root/db/pub.html +pub + +// pwc : PricewaterhouseCoopers LLP +// https://www.iana.org/domains/root/db/pwc.html +pwc + +// qpon : dotQPON LLC +// https://www.iana.org/domains/root/db/qpon.html +qpon + +// quebec : PointQuébec Inc +// https://www.iana.org/domains/root/db/quebec.html +quebec + +// quest : XYZ.COM LLC +// https://www.iana.org/domains/root/db/quest.html +quest + +// racing : Premier Registry Limited +// https://www.iana.org/domains/root/db/racing.html +racing + +// radio : European Broadcasting Union (EBU) +// https://www.iana.org/domains/root/db/radio.html +radio + +// read : Amazon Registry Services, Inc. +// https://www.iana.org/domains/root/db/read.html +read + +// realestate : dotRealEstate LLC +// https://www.iana.org/domains/root/db/realestate.html +realestate + +// realtor : Real Estate Domains LLC +// https://www.iana.org/domains/root/db/realtor.html +realtor + +// realty : Internet Naming Company LLC +// https://www.iana.org/domains/root/db/realty.html +realty + +// recipes : Binky Moon, LLC +// https://www.iana.org/domains/root/db/recipes.html +recipes + +// red : Identity Digital Limited +// https://www.iana.org/domains/root/db/red.html +red + +// redstone : Redstone Haute Couture Co., Ltd. +// https://www.iana.org/domains/root/db/redstone.html +redstone + +// redumbrella : Travelers TLD, LLC +// https://www.iana.org/domains/root/db/redumbrella.html +redumbrella + +// rehab : Dog Beach, LLC +// https://www.iana.org/domains/root/db/rehab.html +rehab + +// reise : Binky Moon, LLC +// https://www.iana.org/domains/root/db/reise.html +reise + +// reisen : Binky Moon, LLC +// https://www.iana.org/domains/root/db/reisen.html +reisen + +// reit : National Association of Real Estate Investment Trusts, Inc. +// https://www.iana.org/domains/root/db/reit.html +reit + +// reliance : Reliance Industries Limited +// https://www.iana.org/domains/root/db/reliance.html +reliance + +// ren : ZDNS International Limited +// https://www.iana.org/domains/root/db/ren.html +ren + +// rent : XYZ.COM LLC +// https://www.iana.org/domains/root/db/rent.html +rent + +// rentals : Binky Moon, LLC +// https://www.iana.org/domains/root/db/rentals.html +rentals + +// repair : Binky Moon, LLC +// https://www.iana.org/domains/root/db/repair.html +repair + +// report : Binky Moon, LLC +// https://www.iana.org/domains/root/db/report.html +report + +// republican : Dog Beach, LLC +// https://www.iana.org/domains/root/db/republican.html +republican + +// rest : Punto 2012 Sociedad Anonima Promotora de Inversion de Capital Variable +// https://www.iana.org/domains/root/db/rest.html +rest + +// restaurant : Binky Moon, LLC +// https://www.iana.org/domains/root/db/restaurant.html +restaurant + +// review : dot Review Limited +// https://www.iana.org/domains/root/db/review.html +review + +// reviews : Dog Beach, LLC +// https://www.iana.org/domains/root/db/reviews.html +reviews + +// rexroth : Robert Bosch GMBH +// https://www.iana.org/domains/root/db/rexroth.html +rexroth + +// rich : iRegistry GmbH +// https://www.iana.org/domains/root/db/rich.html +rich + +// richardli : Pacific Century Asset Management (HK) Limited +// https://www.iana.org/domains/root/db/richardli.html +richardli + +// ricoh : Ricoh Company, Ltd. +// https://www.iana.org/domains/root/db/ricoh.html +ricoh + +// ril : Reliance Industries Limited +// https://www.iana.org/domains/root/db/ril.html +ril + +// rio : Empresa Municipal de Informática SA - IPLANRIO +// https://www.iana.org/domains/root/db/rio.html +rio + +// rip : Dog Beach, LLC +// https://www.iana.org/domains/root/db/rip.html +rip + +// rocks : Dog Beach, LLC +// https://www.iana.org/domains/root/db/rocks.html +rocks + +// rodeo : Registry Services, LLC +// https://www.iana.org/domains/root/db/rodeo.html +rodeo + +// rogers : Rogers Communications Canada Inc. +// https://www.iana.org/domains/root/db/rogers.html +rogers + +// room : Amazon Registry Services, Inc. +// https://www.iana.org/domains/root/db/room.html +room + +// rsvp : Charleston Road Registry Inc. +// https://www.iana.org/domains/root/db/rsvp.html +rsvp + +// rugby : World Rugby Strategic Developments Limited +// https://www.iana.org/domains/root/db/rugby.html +rugby + +// ruhr : dotSaarland GmbH +// https://www.iana.org/domains/root/db/ruhr.html +ruhr + +// run : Binky Moon, LLC +// https://www.iana.org/domains/root/db/run.html +run + +// rwe : RWE AG +// https://www.iana.org/domains/root/db/rwe.html +rwe + +// ryukyu : BRregistry, Inc. +// https://www.iana.org/domains/root/db/ryukyu.html +ryukyu + +// saarland : dotSaarland GmbH +// https://www.iana.org/domains/root/db/saarland.html +saarland + +// safe : Amazon Registry Services, Inc. +// https://www.iana.org/domains/root/db/safe.html +safe + +// safety : Safety Registry Services, LLC. +// https://www.iana.org/domains/root/db/safety.html +safety + +// sakura : SAKURA Internet Inc. +// https://www.iana.org/domains/root/db/sakura.html +sakura + +// sale : Dog Beach, LLC +// https://www.iana.org/domains/root/db/sale.html +sale + +// salon : Binky Moon, LLC +// https://www.iana.org/domains/root/db/salon.html +salon + +// samsclub : Wal-Mart Stores, Inc. +// https://www.iana.org/domains/root/db/samsclub.html +samsclub + +// samsung : SAMSUNG SDS CO., LTD +// https://www.iana.org/domains/root/db/samsung.html +samsung + +// sandvik : Sandvik AB +// https://www.iana.org/domains/root/db/sandvik.html +sandvik + +// sandvikcoromant : Sandvik AB +// https://www.iana.org/domains/root/db/sandvikcoromant.html +sandvikcoromant + +// sanofi : Sanofi +// https://www.iana.org/domains/root/db/sanofi.html +sanofi + +// sap : SAP AG +// https://www.iana.org/domains/root/db/sap.html +sap + +// sarl : Binky Moon, LLC +// https://www.iana.org/domains/root/db/sarl.html +sarl + +// sas : Research IP LLC +// https://www.iana.org/domains/root/db/sas.html +sas + +// save : Amazon Registry Services, Inc. +// https://www.iana.org/domains/root/db/save.html +save + +// saxo : Saxo Bank A/S +// https://www.iana.org/domains/root/db/saxo.html +saxo + +// sbi : STATE BANK OF INDIA +// https://www.iana.org/domains/root/db/sbi.html +sbi + +// sbs : ShortDot SA +// https://www.iana.org/domains/root/db/sbs.html +sbs + +// sca : SVENSKA CELLULOSA AKTIEBOLAGET SCA (publ) +// https://www.iana.org/domains/root/db/sca.html +sca + +// scb : The Siam Commercial Bank Public Company Limited ("SCB") +// https://www.iana.org/domains/root/db/scb.html +scb + +// schaeffler : Schaeffler Technologies AG & Co. KG +// https://www.iana.org/domains/root/db/schaeffler.html +schaeffler + +// schmidt : SCHMIDT GROUPE S.A.S. +// https://www.iana.org/domains/root/db/schmidt.html +schmidt + +// scholarships : Scholarships.com, LLC +// https://www.iana.org/domains/root/db/scholarships.html +scholarships + +// school : Binky Moon, LLC +// https://www.iana.org/domains/root/db/school.html +school + +// schule : Binky Moon, LLC +// https://www.iana.org/domains/root/db/schule.html +schule + +// schwarz : Schwarz Domains und Services GmbH & Co. KG +// https://www.iana.org/domains/root/db/schwarz.html +schwarz + +// science : dot Science Limited +// https://www.iana.org/domains/root/db/science.html +science + +// scot : Dot Scot Registry Limited +// https://www.iana.org/domains/root/db/scot.html +scot + +// search : Charleston Road Registry Inc. +// https://www.iana.org/domains/root/db/search.html +search + +// seat : SEAT, S.A. (Sociedad Unipersonal) +// https://www.iana.org/domains/root/db/seat.html +seat + +// secure : Amazon Registry Services, Inc. +// https://www.iana.org/domains/root/db/secure.html +secure + +// security : XYZ.COM LLC +// https://www.iana.org/domains/root/db/security.html +security + +// seek : Seek Limited +// https://www.iana.org/domains/root/db/seek.html +seek + +// select : Registry Services, LLC +// https://www.iana.org/domains/root/db/select.html +select + +// sener : Sener Ingeniería y Sistemas, S.A. +// https://www.iana.org/domains/root/db/sener.html +sener + +// services : Binky Moon, LLC +// https://www.iana.org/domains/root/db/services.html +services + +// seven : Seven West Media Ltd +// https://www.iana.org/domains/root/db/seven.html +seven + +// sew : SEW-EURODRIVE GmbH & Co KG +// https://www.iana.org/domains/root/db/sew.html +sew + +// sex : ICM Registry SX LLC +// https://www.iana.org/domains/root/db/sex.html +sex + +// sexy : Internet Naming Company LLC +// https://www.iana.org/domains/root/db/sexy.html +sexy + +// sfr : Societe Francaise du Radiotelephone - SFR +// https://www.iana.org/domains/root/db/sfr.html +sfr + +// shangrila : Shangri‐La International Hotel Management Limited +// https://www.iana.org/domains/root/db/shangrila.html +shangrila + +// sharp : Sharp Corporation +// https://www.iana.org/domains/root/db/sharp.html +sharp + +// shaw : Shaw Cablesystems G.P. +// https://www.iana.org/domains/root/db/shaw.html +shaw + +// shell : Shell Information Technology International Inc +// https://www.iana.org/domains/root/db/shell.html +shell + +// shia : Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti. +// https://www.iana.org/domains/root/db/shia.html +shia + +// shiksha : Identity Digital Limited +// https://www.iana.org/domains/root/db/shiksha.html +shiksha + +// shoes : Binky Moon, LLC +// https://www.iana.org/domains/root/db/shoes.html +shoes + +// shop : GMO Registry, Inc. +// https://www.iana.org/domains/root/db/shop.html +shop + +// shopping : Binky Moon, LLC +// https://www.iana.org/domains/root/db/shopping.html +shopping + +// shouji : Beijing Qihu Keji Co., Ltd. +// https://www.iana.org/domains/root/db/shouji.html +shouji + +// show : Binky Moon, LLC +// https://www.iana.org/domains/root/db/show.html +show + +// silk : Amazon Registry Services, Inc. +// https://www.iana.org/domains/root/db/silk.html +silk + +// sina : Sina Corporation +// https://www.iana.org/domains/root/db/sina.html +sina + +// singles : Binky Moon, LLC +// https://www.iana.org/domains/root/db/singles.html +singles + +// site : Radix FZC DMCC +// https://www.iana.org/domains/root/db/site.html +site + +// ski : Identity Digital Limited +// https://www.iana.org/domains/root/db/ski.html +ski + +// skin : XYZ.COM LLC +// https://www.iana.org/domains/root/db/skin.html +skin + +// sky : Sky International AG +// https://www.iana.org/domains/root/db/sky.html +sky + +// skype : Microsoft Corporation +// https://www.iana.org/domains/root/db/skype.html +skype + +// sling : DISH Technologies L.L.C. +// https://www.iana.org/domains/root/db/sling.html +sling + +// smart : Smart Communications, Inc. (SMART) +// https://www.iana.org/domains/root/db/smart.html +smart + +// smile : Amazon Registry Services, Inc. +// https://www.iana.org/domains/root/db/smile.html +smile + +// sncf : Société Nationale SNCF +// https://www.iana.org/domains/root/db/sncf.html +sncf + +// soccer : Binky Moon, LLC +// https://www.iana.org/domains/root/db/soccer.html +soccer + +// social : Dog Beach, LLC +// https://www.iana.org/domains/root/db/social.html +social + +// softbank : SoftBank Group Corp. +// https://www.iana.org/domains/root/db/softbank.html +softbank + +// software : Dog Beach, LLC +// https://www.iana.org/domains/root/db/software.html +software + +// sohu : Sohu.com Limited +// https://www.iana.org/domains/root/db/sohu.html +sohu + +// solar : Binky Moon, LLC +// https://www.iana.org/domains/root/db/solar.html +solar + +// solutions : Binky Moon, LLC +// https://www.iana.org/domains/root/db/solutions.html +solutions + +// song : Amazon Registry Services, Inc. +// https://www.iana.org/domains/root/db/song.html +song + +// sony : Sony Corporation +// https://www.iana.org/domains/root/db/sony.html +sony + +// soy : Charleston Road Registry Inc. +// https://www.iana.org/domains/root/db/soy.html +soy + +// spa : Asia Spa and Wellness Promotion Council Limited +// https://www.iana.org/domains/root/db/spa.html +spa + +// space : Radix FZC DMCC +// https://www.iana.org/domains/root/db/space.html +space + +// sport : SportAccord +// https://www.iana.org/domains/root/db/sport.html +sport + +// spot : Amazon Registry Services, Inc. +// https://www.iana.org/domains/root/db/spot.html +spot + +// srl : InterNetX, Corp +// https://www.iana.org/domains/root/db/srl.html +srl + +// stada : STADA Arzneimittel AG +// https://www.iana.org/domains/root/db/stada.html +stada + +// staples : Staples, Inc. +// https://www.iana.org/domains/root/db/staples.html +staples + +// star : Star India Private Limited +// https://www.iana.org/domains/root/db/star.html +star + +// statebank : STATE BANK OF INDIA +// https://www.iana.org/domains/root/db/statebank.html +statebank + +// statefarm : State Farm Mutual Automobile Insurance Company +// https://www.iana.org/domains/root/db/statefarm.html +statefarm + +// stc : Saudi Telecom Company +// https://www.iana.org/domains/root/db/stc.html +stc + +// stcgroup : Saudi Telecom Company +// https://www.iana.org/domains/root/db/stcgroup.html +stcgroup + +// stockholm : Stockholms kommun +// https://www.iana.org/domains/root/db/stockholm.html +stockholm + +// storage : XYZ.COM LLC +// https://www.iana.org/domains/root/db/storage.html +storage + +// store : Radix FZC DMCC +// https://www.iana.org/domains/root/db/store.html +store + +// stream : dot Stream Limited +// https://www.iana.org/domains/root/db/stream.html +stream + +// studio : Dog Beach, LLC +// https://www.iana.org/domains/root/db/studio.html +studio + +// study : Registry Services, LLC +// https://www.iana.org/domains/root/db/study.html +study + +// style : Binky Moon, LLC +// https://www.iana.org/domains/root/db/style.html +style + +// sucks : Vox Populi Registry Ltd. +// https://www.iana.org/domains/root/db/sucks.html +sucks + +// supplies : Binky Moon, LLC +// https://www.iana.org/domains/root/db/supplies.html +supplies + +// supply : Binky Moon, LLC +// https://www.iana.org/domains/root/db/supply.html +supply + +// support : Binky Moon, LLC +// https://www.iana.org/domains/root/db/support.html +support + +// surf : Registry Services, LLC +// https://www.iana.org/domains/root/db/surf.html +surf + +// surgery : Binky Moon, LLC +// https://www.iana.org/domains/root/db/surgery.html +surgery + +// suzuki : SUZUKI MOTOR CORPORATION +// https://www.iana.org/domains/root/db/suzuki.html +suzuki + +// swatch : The Swatch Group Ltd +// https://www.iana.org/domains/root/db/swatch.html +swatch + +// swiss : Swiss Confederation +// https://www.iana.org/domains/root/db/swiss.html +swiss + +// sydney : State of New South Wales, Department of Premier and Cabinet +// https://www.iana.org/domains/root/db/sydney.html +sydney + +// systems : Binky Moon, LLC +// https://www.iana.org/domains/root/db/systems.html +systems + +// tab : Tabcorp Holdings Limited +// https://www.iana.org/domains/root/db/tab.html +tab + +// taipei : Taipei City Government +// https://www.iana.org/domains/root/db/taipei.html +taipei + +// talk : Amazon Registry Services, Inc. +// https://www.iana.org/domains/root/db/talk.html +talk + +// taobao : Alibaba Group Holding Limited +// https://www.iana.org/domains/root/db/taobao.html +taobao + +// target : Target Domain Holdings, LLC +// https://www.iana.org/domains/root/db/target.html +target + +// tatamotors : Tata Motors Ltd +// https://www.iana.org/domains/root/db/tatamotors.html +tatamotors + +// tatar : Limited Liability Company "Coordination Center of Regional Domain of Tatarstan Republic" +// https://www.iana.org/domains/root/db/tatar.html +tatar + +// tattoo : Registry Services, LLC +// https://www.iana.org/domains/root/db/tattoo.html +tattoo + +// tax : Binky Moon, LLC +// https://www.iana.org/domains/root/db/tax.html +tax + +// taxi : Binky Moon, LLC +// https://www.iana.org/domains/root/db/taxi.html +taxi + +// tci : Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti. +// https://www.iana.org/domains/root/db/tci.html +tci + +// tdk : TDK Corporation +// https://www.iana.org/domains/root/db/tdk.html +tdk + +// team : Binky Moon, LLC +// https://www.iana.org/domains/root/db/team.html +team + +// tech : Radix FZC DMCC +// https://www.iana.org/domains/root/db/tech.html +tech + +// technology : Binky Moon, LLC +// https://www.iana.org/domains/root/db/technology.html +technology + +// temasek : Temasek Holdings (Private) Limited +// https://www.iana.org/domains/root/db/temasek.html +temasek + +// tennis : Binky Moon, LLC +// https://www.iana.org/domains/root/db/tennis.html +tennis + +// teva : Teva Pharmaceutical Industries Limited +// https://www.iana.org/domains/root/db/teva.html +teva + +// thd : Home Depot Product Authority, LLC +// https://www.iana.org/domains/root/db/thd.html +thd + +// theater : Binky Moon, LLC +// https://www.iana.org/domains/root/db/theater.html +theater + +// theatre : XYZ.COM LLC +// https://www.iana.org/domains/root/db/theatre.html +theatre + +// tiaa : Teachers Insurance and Annuity Association of America +// https://www.iana.org/domains/root/db/tiaa.html +tiaa + +// tickets : XYZ.COM LLC +// https://www.iana.org/domains/root/db/tickets.html +tickets + +// tienda : Binky Moon, LLC +// https://www.iana.org/domains/root/db/tienda.html +tienda + +// tips : Binky Moon, LLC +// https://www.iana.org/domains/root/db/tips.html +tips + +// tires : Binky Moon, LLC +// https://www.iana.org/domains/root/db/tires.html +tires + +// tirol : punkt Tirol GmbH +// https://www.iana.org/domains/root/db/tirol.html +tirol + +// tjmaxx : The TJX Companies, Inc. +// https://www.iana.org/domains/root/db/tjmaxx.html +tjmaxx + +// tjx : The TJX Companies, Inc. +// https://www.iana.org/domains/root/db/tjx.html +tjx + +// tkmaxx : The TJX Companies, Inc. +// https://www.iana.org/domains/root/db/tkmaxx.html +tkmaxx + +// tmall : Alibaba Group Holding Limited +// https://www.iana.org/domains/root/db/tmall.html +tmall + +// today : Binky Moon, LLC +// https://www.iana.org/domains/root/db/today.html +today + +// tokyo : GMO Registry, Inc. +// https://www.iana.org/domains/root/db/tokyo.html +tokyo + +// tools : Binky Moon, LLC +// https://www.iana.org/domains/root/db/tools.html +tools + +// top : .TOP Registry +// https://www.iana.org/domains/root/db/top.html +top + +// toray : Toray Industries, Inc. +// https://www.iana.org/domains/root/db/toray.html +toray + +// toshiba : TOSHIBA Corporation +// https://www.iana.org/domains/root/db/toshiba.html +toshiba + +// total : TotalEnergies SE +// https://www.iana.org/domains/root/db/total.html +total + +// tours : Binky Moon, LLC +// https://www.iana.org/domains/root/db/tours.html +tours + +// town : Binky Moon, LLC +// https://www.iana.org/domains/root/db/town.html +town + +// toyota : TOYOTA MOTOR CORPORATION +// https://www.iana.org/domains/root/db/toyota.html +toyota + +// toys : Binky Moon, LLC +// https://www.iana.org/domains/root/db/toys.html +toys + +// trade : Elite Registry Limited +// https://www.iana.org/domains/root/db/trade.html +trade + +// trading : Dog Beach, LLC +// https://www.iana.org/domains/root/db/trading.html +trading + +// training : Binky Moon, LLC +// https://www.iana.org/domains/root/db/training.html +training + +// travel : Dog Beach, LLC +// https://www.iana.org/domains/root/db/travel.html +travel + +// travelers : Travelers TLD, LLC +// https://www.iana.org/domains/root/db/travelers.html +travelers + +// travelersinsurance : Travelers TLD, LLC +// https://www.iana.org/domains/root/db/travelersinsurance.html +travelersinsurance + +// trust : Internet Naming Company LLC +// https://www.iana.org/domains/root/db/trust.html +trust + +// trv : Travelers TLD, LLC +// https://www.iana.org/domains/root/db/trv.html +trv + +// tube : Latin American Telecom LLC +// https://www.iana.org/domains/root/db/tube.html +tube + +// tui : TUI AG +// https://www.iana.org/domains/root/db/tui.html +tui + +// tunes : Amazon Registry Services, Inc. +// https://www.iana.org/domains/root/db/tunes.html +tunes + +// tushu : Amazon Registry Services, Inc. +// https://www.iana.org/domains/root/db/tushu.html +tushu + +// tvs : T V SUNDRAM IYENGAR & SONS LIMITED +// https://www.iana.org/domains/root/db/tvs.html +tvs + +// ubank : National Australia Bank Limited +// https://www.iana.org/domains/root/db/ubank.html +ubank + +// ubs : UBS AG +// https://www.iana.org/domains/root/db/ubs.html +ubs + +// unicom : China United Network Communications Corporation Limited +// https://www.iana.org/domains/root/db/unicom.html +unicom + +// university : Binky Moon, LLC +// https://www.iana.org/domains/root/db/university.html +university + +// uno : Radix FZC DMCC +// https://www.iana.org/domains/root/db/uno.html +uno + +// uol : UBN INTERNET LTDA. +// https://www.iana.org/domains/root/db/uol.html +uol + +// ups : UPS Market Driver, Inc. +// https://www.iana.org/domains/root/db/ups.html +ups + +// vacations : Binky Moon, LLC +// https://www.iana.org/domains/root/db/vacations.html +vacations + +// vana : Internet Naming Company LLC +// https://www.iana.org/domains/root/db/vana.html +vana + +// vanguard : The Vanguard Group, Inc. +// https://www.iana.org/domains/root/db/vanguard.html +vanguard + +// vegas : Dot Vegas, Inc. +// https://www.iana.org/domains/root/db/vegas.html +vegas + +// ventures : Binky Moon, LLC +// https://www.iana.org/domains/root/db/ventures.html +ventures + +// verisign : VeriSign, Inc. +// https://www.iana.org/domains/root/db/verisign.html +verisign + +// versicherung : tldbox GmbH +// https://www.iana.org/domains/root/db/versicherung.html +versicherung + +// vet : Dog Beach, LLC +// https://www.iana.org/domains/root/db/vet.html +vet + +// viajes : Binky Moon, LLC +// https://www.iana.org/domains/root/db/viajes.html +viajes + +// video : Dog Beach, LLC +// https://www.iana.org/domains/root/db/video.html +video + +// vig : VIENNA INSURANCE GROUP AG Wiener Versicherung Gruppe +// https://www.iana.org/domains/root/db/vig.html +vig + +// viking : Viking River Cruises (Bermuda) Ltd. +// https://www.iana.org/domains/root/db/viking.html +viking + +// villas : Binky Moon, LLC +// https://www.iana.org/domains/root/db/villas.html +villas + +// vin : Binky Moon, LLC +// https://www.iana.org/domains/root/db/vin.html +vin + +// vip : Registry Services, LLC +// https://www.iana.org/domains/root/db/vip.html +vip + +// virgin : Virgin Enterprises Limited +// https://www.iana.org/domains/root/db/virgin.html +virgin + +// visa : Visa Worldwide Pte. Limited +// https://www.iana.org/domains/root/db/visa.html +visa + +// vision : Binky Moon, LLC +// https://www.iana.org/domains/root/db/vision.html +vision + +// viva : Saudi Telecom Company +// https://www.iana.org/domains/root/db/viva.html +viva + +// vivo : Telefonica Brasil S.A. +// https://www.iana.org/domains/root/db/vivo.html +vivo + +// vlaanderen : DNS.be vzw +// https://www.iana.org/domains/root/db/vlaanderen.html +vlaanderen + +// vodka : Registry Services, LLC +// https://www.iana.org/domains/root/db/vodka.html +vodka + +// volvo : Volvo Holding Sverige Aktiebolag +// https://www.iana.org/domains/root/db/volvo.html +volvo + +// vote : Monolith Registry LLC +// https://www.iana.org/domains/root/db/vote.html +vote + +// voting : Valuetainment Corp. +// https://www.iana.org/domains/root/db/voting.html +voting + +// voto : Monolith Registry LLC +// https://www.iana.org/domains/root/db/voto.html +voto + +// voyage : Binky Moon, LLC +// https://www.iana.org/domains/root/db/voyage.html +voyage + +// wales : Nominet UK +// https://www.iana.org/domains/root/db/wales.html +wales + +// walmart : Wal-Mart Stores, Inc. +// https://www.iana.org/domains/root/db/walmart.html +walmart + +// walter : Sandvik AB +// https://www.iana.org/domains/root/db/walter.html +walter + +// wang : Zodiac Wang Limited +// https://www.iana.org/domains/root/db/wang.html +wang + +// wanggou : Amazon Registry Services, Inc. +// https://www.iana.org/domains/root/db/wanggou.html +wanggou + +// watch : Binky Moon, LLC +// https://www.iana.org/domains/root/db/watch.html +watch + +// watches : Identity Digital Limited +// https://www.iana.org/domains/root/db/watches.html +watches + +// weather : International Business Machines Corporation +// https://www.iana.org/domains/root/db/weather.html +weather + +// weatherchannel : International Business Machines Corporation +// https://www.iana.org/domains/root/db/weatherchannel.html +weatherchannel + +// webcam : dot Webcam Limited +// https://www.iana.org/domains/root/db/webcam.html +webcam + +// weber : Saint-Gobain Weber SA +// https://www.iana.org/domains/root/db/weber.html +weber + +// website : Radix FZC DMCC +// https://www.iana.org/domains/root/db/website.html +website + +// wed +// https://www.iana.org/domains/root/db/wed.html +wed + +// wedding : Registry Services, LLC +// https://www.iana.org/domains/root/db/wedding.html +wedding + +// weibo : Sina Corporation +// https://www.iana.org/domains/root/db/weibo.html +weibo + +// weir : Weir Group IP Limited +// https://www.iana.org/domains/root/db/weir.html +weir + +// whoswho : Who's Who Registry +// https://www.iana.org/domains/root/db/whoswho.html +whoswho + +// wien : punkt.wien GmbH +// https://www.iana.org/domains/root/db/wien.html +wien + +// wiki : Registry Services, LLC +// https://www.iana.org/domains/root/db/wiki.html +wiki + +// williamhill : William Hill Organization Limited +// https://www.iana.org/domains/root/db/williamhill.html +williamhill + +// win : First Registry Limited +// https://www.iana.org/domains/root/db/win.html +win + +// windows : Microsoft Corporation +// https://www.iana.org/domains/root/db/windows.html +windows + +// wine : Binky Moon, LLC +// https://www.iana.org/domains/root/db/wine.html +wine + +// winners : The TJX Companies, Inc. +// https://www.iana.org/domains/root/db/winners.html +winners + +// wme : William Morris Endeavor Entertainment, LLC +// https://www.iana.org/domains/root/db/wme.html +wme + +// wolterskluwer : Wolters Kluwer N.V. +// https://www.iana.org/domains/root/db/wolterskluwer.html +wolterskluwer + +// woodside : Woodside Petroleum Limited +// https://www.iana.org/domains/root/db/woodside.html +woodside + +// work : Registry Services, LLC +// https://www.iana.org/domains/root/db/work.html +work + +// works : Binky Moon, LLC +// https://www.iana.org/domains/root/db/works.html +works + +// world : Binky Moon, LLC +// https://www.iana.org/domains/root/db/world.html +world + +// wow : Amazon Registry Services, Inc. +// https://www.iana.org/domains/root/db/wow.html +wow + +// wtc : World Trade Centers Association, Inc. +// https://www.iana.org/domains/root/db/wtc.html +wtc + +// wtf : Binky Moon, LLC +// https://www.iana.org/domains/root/db/wtf.html +wtf + +// xbox : Microsoft Corporation +// https://www.iana.org/domains/root/db/xbox.html +xbox + +// xerox : Xerox DNHC LLC +// https://www.iana.org/domains/root/db/xerox.html +xerox + +// xfinity : Comcast IP Holdings I, LLC +// https://www.iana.org/domains/root/db/xfinity.html +xfinity + +// xihuan : Beijing Qihu Keji Co., Ltd. +// https://www.iana.org/domains/root/db/xihuan.html +xihuan + +// xin : Elegant Leader Limited +// https://www.iana.org/domains/root/db/xin.html +xin + +// xn--11b4c3d : VeriSign Sarl +// https://www.iana.org/domains/root/db/xn--11b4c3d.html +कॉम + +// xn--1ck2e1b : Amazon Registry Services, Inc. +// https://www.iana.org/domains/root/db/xn--1ck2e1b.html +セール + +// xn--1qqw23a : Guangzhou YU Wei Information Technology Co., Ltd. +// https://www.iana.org/domains/root/db/xn--1qqw23a.html +佛山 + +// xn--30rr7y : Excellent First Limited +// https://www.iana.org/domains/root/db/xn--30rr7y.html +慈善 + +// xn--3bst00m : Eagle Horizon Limited +// https://www.iana.org/domains/root/db/xn--3bst00m.html +集团 + +// xn--3ds443g : TLD REGISTRY LIMITED OY +// https://www.iana.org/domains/root/db/xn--3ds443g.html +在线 + +// xn--3pxu8k : VeriSign Sarl +// https://www.iana.org/domains/root/db/xn--3pxu8k.html +点看 + +// xn--42c2d9a : VeriSign Sarl +// https://www.iana.org/domains/root/db/xn--42c2d9a.html +คอม + +// xn--45q11c : Zodiac Gemini Ltd +// https://www.iana.org/domains/root/db/xn--45q11c.html +八卦 + +// xn--4gbrim : Helium TLDs Ltd +// https://www.iana.org/domains/root/db/xn--4gbrim.html +موقع + +// xn--55qw42g : China Organizational Name Administration Center +// https://www.iana.org/domains/root/db/xn--55qw42g.html +公益 + +// xn--55qx5d : China Internet Network Information Center (CNNIC) +// https://www.iana.org/domains/root/db/xn--55qx5d.html +公司 + +// xn--5su34j936bgsg : Shangri‐La International Hotel Management Limited +// https://www.iana.org/domains/root/db/xn--5su34j936bgsg.html +香格里拉 + +// xn--5tzm5g : Global Website TLD Asia Limited +// https://www.iana.org/domains/root/db/xn--5tzm5g.html +网站 + +// xn--6frz82g : Identity Digital Limited +// https://www.iana.org/domains/root/db/xn--6frz82g.html +移动 + +// xn--6qq986b3xl : Tycoon Treasure Limited +// https://www.iana.org/domains/root/db/xn--6qq986b3xl.html +我爱你 + +// xn--80adxhks : Foundation for Assistance for Internet Technologies and Infrastructure Development (FAITID) +// https://www.iana.org/domains/root/db/xn--80adxhks.html +москва + +// xn--80aqecdr1a : Pontificium Consilium de Comunicationibus Socialibus (PCCS) (Pontifical Council for Social Communication) +// https://www.iana.org/domains/root/db/xn--80aqecdr1a.html +католик + +// xn--80asehdb : CORE Association +// https://www.iana.org/domains/root/db/xn--80asehdb.html +онлайн + +// xn--80aswg : CORE Association +// https://www.iana.org/domains/root/db/xn--80aswg.html +сайт + +// xn--8y0a063a : China United Network Communications Corporation Limited +// https://www.iana.org/domains/root/db/xn--8y0a063a.html +联通 + +// xn--9dbq2a : VeriSign Sarl +// https://www.iana.org/domains/root/db/xn--9dbq2a.html +קום + +// xn--9et52u : RISE VICTORY LIMITED +// https://www.iana.org/domains/root/db/xn--9et52u.html +时尚 + +// xn--9krt00a : Sina Corporation +// https://www.iana.org/domains/root/db/xn--9krt00a.html +微博 + +// xn--b4w605ferd : Temasek Holdings (Private) Limited +// https://www.iana.org/domains/root/db/xn--b4w605ferd.html +淡马锡 + +// xn--bck1b9a5dre4c : Amazon Registry Services, Inc. +// https://www.iana.org/domains/root/db/xn--bck1b9a5dre4c.html +ファッション + +// xn--c1avg : Public Interest Registry +// https://www.iana.org/domains/root/db/xn--c1avg.html +орг + +// xn--c2br7g : VeriSign Sarl +// https://www.iana.org/domains/root/db/xn--c2br7g.html +नेट + +// xn--cck2b3b : Amazon Registry Services, Inc. +// https://www.iana.org/domains/root/db/xn--cck2b3b.html +ストア + +// xn--cckwcxetd : Amazon Registry Services, Inc. +// https://www.iana.org/domains/root/db/xn--cckwcxetd.html +アマゾン + +// xn--cg4bki : SAMSUNG SDS CO., LTD +// https://www.iana.org/domains/root/db/xn--cg4bki.html +삼성 + +// xn--czr694b : Internet DotTrademark Organisation Limited +// https://www.iana.org/domains/root/db/xn--czr694b.html +商标 + +// xn--czrs0t : Binky Moon, LLC +// https://www.iana.org/domains/root/db/xn--czrs0t.html +商店 + +// xn--czru2d : Zodiac Aquarius Limited +// https://www.iana.org/domains/root/db/xn--czru2d.html +商城 + +// xn--d1acj3b : The Foundation for Network Initiatives “The Smart Internet” +// https://www.iana.org/domains/root/db/xn--d1acj3b.html +дети + +// xn--eckvdtc9d : Amazon Registry Services, Inc. +// https://www.iana.org/domains/root/db/xn--eckvdtc9d.html +ポイント + +// xn--efvy88h : Guangzhou YU Wei Information Technology Co., Ltd. +// https://www.iana.org/domains/root/db/xn--efvy88h.html +新闻 + +// xn--fct429k : Amazon Registry Services, Inc. +// https://www.iana.org/domains/root/db/xn--fct429k.html +家電 + +// xn--fhbei : VeriSign Sarl +// https://www.iana.org/domains/root/db/xn--fhbei.html +كوم + +// xn--fiq228c5hs : TLD REGISTRY LIMITED OY +// https://www.iana.org/domains/root/db/xn--fiq228c5hs.html +中文网 + +// xn--fiq64b : CITIC Group Corporation +// https://www.iana.org/domains/root/db/xn--fiq64b.html +中信 + +// xn--fjq720a : Binky Moon, LLC +// https://www.iana.org/domains/root/db/xn--fjq720a.html +娱乐 + +// xn--flw351e : Charleston Road Registry Inc. +// https://www.iana.org/domains/root/db/xn--flw351e.html +谷歌 + +// xn--fzys8d69uvgm : PCCW Enterprises Limited +// https://www.iana.org/domains/root/db/xn--fzys8d69uvgm.html +電訊盈科 + +// xn--g2xx48c : Nawang Heli(Xiamen) Network Service Co., LTD. +// https://www.iana.org/domains/root/db/xn--g2xx48c.html +购物 + +// xn--gckr3f0f : Amazon Registry Services, Inc. +// https://www.iana.org/domains/root/db/xn--gckr3f0f.html +クラウド + +// xn--gk3at1e : Amazon Registry Services, Inc. +// https://www.iana.org/domains/root/db/xn--gk3at1e.html +通販 + +// xn--hxt814e : Zodiac Taurus Limited +// https://www.iana.org/domains/root/db/xn--hxt814e.html +网店 + +// xn--i1b6b1a6a2e : Public Interest Registry +// https://www.iana.org/domains/root/db/xn--i1b6b1a6a2e.html +संगठन + +// xn--imr513n : Internet DotTrademark Organisation Limited +// https://www.iana.org/domains/root/db/xn--imr513n.html +餐厅 + +// xn--io0a7i : China Internet Network Information Center (CNNIC) +// https://www.iana.org/domains/root/db/xn--io0a7i.html +网络 + +// xn--j1aef : VeriSign Sarl +// https://www.iana.org/domains/root/db/xn--j1aef.html +ком + +// xn--jlq480n2rg : Amazon Registry Services, Inc. +// https://www.iana.org/domains/root/db/xn--jlq480n2rg.html +亚马逊 + +// xn--jvr189m : Amazon Registry Services, Inc. +// https://www.iana.org/domains/root/db/xn--jvr189m.html +食品 + +// xn--kcrx77d1x4a : Koninklijke Philips N.V. +// https://www.iana.org/domains/root/db/xn--kcrx77d1x4a.html +飞利浦 + +// xn--kput3i : Beijing RITT-Net Technology Development Co., Ltd +// https://www.iana.org/domains/root/db/xn--kput3i.html +手机 + +// xn--mgba3a3ejt : Aramco Services Company +// https://www.iana.org/domains/root/db/xn--mgba3a3ejt.html +ارامكو + +// xn--mgba7c0bbn0a : Competrol (Luxembourg) Sarl +// https://www.iana.org/domains/root/db/xn--mgba7c0bbn0a.html +العليان + +// xn--mgbab2bd : CORE Association +// https://www.iana.org/domains/root/db/xn--mgbab2bd.html +بازار + +// xn--mgbca7dzdo : Abu Dhabi Systems and Information Centre +// https://www.iana.org/domains/root/db/xn--mgbca7dzdo.html +ابوظبي + +// xn--mgbi4ecexp : Pontificium Consilium de Comunicationibus Socialibus (PCCS) (Pontifical Council for Social Communication) +// https://www.iana.org/domains/root/db/xn--mgbi4ecexp.html +كاثوليك + +// xn--mgbt3dhd : Asia Green IT System Bilgisayar San. ve Tic. Ltd. Sti. +// https://www.iana.org/domains/root/db/xn--mgbt3dhd.html +همراه + +// xn--mk1bu44c : VeriSign Sarl +// https://www.iana.org/domains/root/db/xn--mk1bu44c.html +닷컴 + +// xn--mxtq1m : Net-Chinese Co., Ltd. +// https://www.iana.org/domains/root/db/xn--mxtq1m.html +政府 + +// xn--ngbc5azd : International Domain Registry Pty. Ltd. +// https://www.iana.org/domains/root/db/xn--ngbc5azd.html +شبكة + +// xn--ngbe9e0a : Kuwait Finance House +// https://www.iana.org/domains/root/db/xn--ngbe9e0a.html +بيتك + +// xn--ngbrx : League of Arab States +// https://www.iana.org/domains/root/db/xn--ngbrx.html +عرب + +// xn--nqv7f : Public Interest Registry +// https://www.iana.org/domains/root/db/xn--nqv7f.html +机构 + +// xn--nqv7fs00ema : Public Interest Registry +// https://www.iana.org/domains/root/db/xn--nqv7fs00ema.html +组织机构 + +// xn--nyqy26a : Stable Tone Limited +// https://www.iana.org/domains/root/db/xn--nyqy26a.html +健康 + +// xn--otu796d : Jiang Yu Liang Cai Technology Company Limited +// https://www.iana.org/domains/root/db/xn--otu796d.html +招聘 + +// xn--p1acf : Rusnames Limited +// https://www.iana.org/domains/root/db/xn--p1acf.html +рус + +// xn--pssy2u : VeriSign Sarl +// https://www.iana.org/domains/root/db/xn--pssy2u.html +大拿 + +// xn--q9jyb4c : Charleston Road Registry Inc. +// https://www.iana.org/domains/root/db/xn--q9jyb4c.html +みんな + +// xn--qcka1pmc : Charleston Road Registry Inc. +// https://www.iana.org/domains/root/db/xn--qcka1pmc.html +グーグル + +// xn--rhqv96g : Stable Tone Limited +// https://www.iana.org/domains/root/db/xn--rhqv96g.html +世界 + +// xn--rovu88b : Amazon Registry Services, Inc. +// https://www.iana.org/domains/root/db/xn--rovu88b.html +書籍 + +// xn--ses554g : KNET Co., Ltd. +// https://www.iana.org/domains/root/db/xn--ses554g.html +网址 + +// xn--t60b56a : VeriSign Sarl +// https://www.iana.org/domains/root/db/xn--t60b56a.html +닷넷 + +// xn--tckwe : VeriSign Sarl +// https://www.iana.org/domains/root/db/xn--tckwe.html +コム + +// xn--tiq49xqyj : Pontificium Consilium de Comunicationibus Socialibus (PCCS) (Pontifical Council for Social Communication) +// https://www.iana.org/domains/root/db/xn--tiq49xqyj.html +天主教 + +// xn--unup4y : Binky Moon, LLC +// https://www.iana.org/domains/root/db/xn--unup4y.html +游戏 + +// xn--vermgensberater-ctb : Deutsche Vermögensberatung Aktiengesellschaft DVAG +// https://www.iana.org/domains/root/db/xn--vermgensberater-ctb.html +vermögensberater + +// xn--vermgensberatung-pwb : Deutsche Vermögensberatung Aktiengesellschaft DVAG +// https://www.iana.org/domains/root/db/xn--vermgensberatung-pwb.html +vermögensberatung + +// xn--vhquv : Binky Moon, LLC +// https://www.iana.org/domains/root/db/xn--vhquv.html +企业 + +// xn--vuq861b : Beijing Tele-info Technology Co., Ltd. +// https://www.iana.org/domains/root/db/xn--vuq861b.html +信息 + +// xn--w4r85el8fhu5dnra : Kerry Trading Co. Limited +// https://www.iana.org/domains/root/db/xn--w4r85el8fhu5dnra.html +嘉里大酒店 + +// xn--w4rs40l : Kerry Trading Co. Limited +// https://www.iana.org/domains/root/db/xn--w4rs40l.html +嘉里 + +// xn--xhq521b : Guangzhou YU Wei Information Technology Co., Ltd. +// https://www.iana.org/domains/root/db/xn--xhq521b.html +广东 + +// xn--zfr164b : China Organizational Name Administration Center +// https://www.iana.org/domains/root/db/xn--zfr164b.html +政务 + +// xyz : XYZ.COM LLC +// https://www.iana.org/domains/root/db/xyz.html +xyz + +// yachts : XYZ.COM LLC +// https://www.iana.org/domains/root/db/yachts.html +yachts + +// yahoo : Oath Inc. +// https://www.iana.org/domains/root/db/yahoo.html +yahoo + +// yamaxun : Amazon Registry Services, Inc. +// https://www.iana.org/domains/root/db/yamaxun.html +yamaxun + +// yandex : Yandex Europe B.V. +// https://www.iana.org/domains/root/db/yandex.html +yandex + +// yodobashi : YODOBASHI CAMERA CO.,LTD. +// https://www.iana.org/domains/root/db/yodobashi.html +yodobashi + +// yoga : Registry Services, LLC +// https://www.iana.org/domains/root/db/yoga.html +yoga + +// yokohama : GMO Registry, Inc. +// https://www.iana.org/domains/root/db/yokohama.html +yokohama + +// you : Amazon Registry Services, Inc. +// https://www.iana.org/domains/root/db/you.html +you + +// youtube : Charleston Road Registry Inc. +// https://www.iana.org/domains/root/db/youtube.html +youtube + +// yun : Beijing Qihu Keji Co., Ltd. +// https://www.iana.org/domains/root/db/yun.html +yun + +// zappos : Amazon Registry Services, Inc. +// https://www.iana.org/domains/root/db/zappos.html +zappos + +// zara : Industria de Diseño Textil, S.A. (INDITEX, S.A.) +// https://www.iana.org/domains/root/db/zara.html +zara + +// zero : Amazon Registry Services, Inc. +// https://www.iana.org/domains/root/db/zero.html +zero + +// zip : Charleston Road Registry Inc. +// https://www.iana.org/domains/root/db/zip.html +zip + +// zone : Binky Moon, LLC +// https://www.iana.org/domains/root/db/zone.html +zone + +// zuerich : Kanton Zürich (Canton of Zurich) +// https://www.iana.org/domains/root/db/zuerich.html +zuerich + + +// ===END ICANN DOMAINS=== +// ===BEGIN PRIVATE DOMAINS=== +// (Note: these are in alphabetical order by company name) + +// 1GB LLC : https://www.1gb.ua/ +// Submitted by 1GB LLC +cc.ua +inf.ua +ltd.ua + +// 611coin : https://611project.org/ +611.to + +// Aaron Marais' Gitlab pages: https://lab.aaronleem.co.za +// Submitted by Aaron Marais +graphox.us + +// accesso Technology Group, plc. : https://accesso.com/ +// Submitted by accesso Team +*.devcdnaccesso.com + +// Acorn Labs : https://acorn.io +// Submitted by Craig Jellick +*.on-acorn.io + +// ActiveTrail: https://www.activetrail.biz/ +// Submitted by Ofer Kalaora +activetrail.biz + +// Adobe : https://www.adobe.com/ +// Submitted by Ian Boston and Lars Trieloff +adobeaemcloud.com +*.dev.adobeaemcloud.com +hlx.live +adobeaemcloud.net +hlx.page +hlx3.page + +// Adobe Developer Platform : https://developer.adobe.com +// Submitted by Jesse MacFadyen +adobeio-static.net +adobeioruntime.net + +// Agnat sp. z o.o. : https://domena.pl +// Submitted by Przemyslaw Plewa +beep.pl + +// Airkit : https://www.airkit.com/ +// Submitted by Grant Cooksey +airkitapps.com +airkitapps-au.com +airkitapps.eu + +// Aiven: https://aiven.io/ +// Submitted by Etienne Stalmans +aivencloud.com + +// Akamai : https://www.akamai.com/ +// Submitted by Akamai Team +akadns.net +akamai.net +akamai-staging.net +akamaiedge.net +akamaiedge-staging.net +akamaihd.net +akamaihd-staging.net +akamaiorigin.net +akamaiorigin-staging.net +akamaized.net +akamaized-staging.net +edgekey.net +edgekey-staging.net +edgesuite.net +edgesuite-staging.net + +// alboto.ca : http://alboto.ca +// Submitted by Anton Avramov +barsy.ca + +// Alces Software Ltd : http://alces-software.com +// Submitted by Mark J. Titorenko +*.compute.estate +*.alces.network + +// all-inkl.com : https://all-inkl.com +// Submitted by Werner Kaltofen +kasserver.com + +// Altervista: https://www.altervista.org +// Submitted by Carlo Cannas +altervista.org + +// alwaysdata : https://www.alwaysdata.com +// Submitted by Cyril +alwaysdata.net + +// Amaze Software : https://amaze.co +// Submitted by Domain Admin +myamaze.net + +// Amazon : https://www.amazon.com/ +// Submitted by AWS Security +// Subsections of Amazon/subsidiaries will appear until "concludes" tag + +// Amazon API Gateway +// Submitted by AWS Security +// Reference: 4d863337-ff98-4501-a6f2-361eba8445d6 +execute-api.cn-north-1.amazonaws.com.cn +execute-api.cn-northwest-1.amazonaws.com.cn +execute-api.af-south-1.amazonaws.com +execute-api.ap-east-1.amazonaws.com +execute-api.ap-northeast-1.amazonaws.com +execute-api.ap-northeast-2.amazonaws.com +execute-api.ap-northeast-3.amazonaws.com +execute-api.ap-south-1.amazonaws.com +execute-api.ap-south-2.amazonaws.com +execute-api.ap-southeast-1.amazonaws.com +execute-api.ap-southeast-2.amazonaws.com +execute-api.ap-southeast-3.amazonaws.com +execute-api.ap-southeast-4.amazonaws.com +execute-api.ca-central-1.amazonaws.com +execute-api.eu-central-1.amazonaws.com +execute-api.eu-central-2.amazonaws.com +execute-api.eu-north-1.amazonaws.com +execute-api.eu-south-1.amazonaws.com +execute-api.eu-south-2.amazonaws.com +execute-api.eu-west-1.amazonaws.com +execute-api.eu-west-2.amazonaws.com +execute-api.eu-west-3.amazonaws.com +execute-api.il-central-1.amazonaws.com +execute-api.me-central-1.amazonaws.com +execute-api.me-south-1.amazonaws.com +execute-api.sa-east-1.amazonaws.com +execute-api.us-east-1.amazonaws.com +execute-api.us-east-2.amazonaws.com +execute-api.us-gov-east-1.amazonaws.com +execute-api.us-gov-west-1.amazonaws.com +execute-api.us-west-1.amazonaws.com +execute-api.us-west-2.amazonaws.com + +// Amazon CloudFront +// Submitted by Donavan Miller +// Reference: 54144616-fd49-4435-8535-19c6a601bdb3 +cloudfront.net + +// Amazon Cognito +// Submitted by AWS Security +// Reference: 7bee1013-f456-47df-bfe8-03c78d946d61 +auth.af-south-1.amazoncognito.com +auth.ap-northeast-1.amazoncognito.com +auth.ap-northeast-2.amazoncognito.com +auth.ap-northeast-3.amazoncognito.com +auth.ap-south-1.amazoncognito.com +auth.ap-southeast-1.amazoncognito.com +auth.ap-southeast-2.amazoncognito.com +auth.ap-southeast-3.amazoncognito.com +auth.ca-central-1.amazoncognito.com +auth.eu-central-1.amazoncognito.com +auth.eu-north-1.amazoncognito.com +auth.eu-south-1.amazoncognito.com +auth.eu-west-1.amazoncognito.com +auth.eu-west-2.amazoncognito.com +auth.eu-west-3.amazoncognito.com +auth.il-central-1.amazoncognito.com +auth.me-south-1.amazoncognito.com +auth.sa-east-1.amazoncognito.com +auth.us-east-1.amazoncognito.com +auth-fips.us-east-1.amazoncognito.com +auth.us-east-2.amazoncognito.com +auth-fips.us-east-2.amazoncognito.com +auth-fips.us-gov-west-1.amazoncognito.com +auth.us-west-1.amazoncognito.com +auth-fips.us-west-1.amazoncognito.com +auth.us-west-2.amazoncognito.com +auth-fips.us-west-2.amazoncognito.com + +// Amazon EC2 +// Submitted by Luke Wells +// Reference: 4c38fa71-58ac-4768-99e5-689c1767e537 +*.compute.amazonaws.com +*.compute-1.amazonaws.com +*.compute.amazonaws.com.cn +us-east-1.amazonaws.com + +// Amazon EMR +// Submitted by AWS Security +// Reference: 597f3f8e-9283-4e48-8e32-7ee25a1ff6ab +emrappui-prod.cn-north-1.amazonaws.com.cn +emrnotebooks-prod.cn-north-1.amazonaws.com.cn +emrstudio-prod.cn-north-1.amazonaws.com.cn +emrappui-prod.cn-northwest-1.amazonaws.com.cn +emrnotebooks-prod.cn-northwest-1.amazonaws.com.cn +emrstudio-prod.cn-northwest-1.amazonaws.com.cn +emrappui-prod.af-south-1.amazonaws.com +emrnotebooks-prod.af-south-1.amazonaws.com +emrstudio-prod.af-south-1.amazonaws.com +emrappui-prod.ap-east-1.amazonaws.com +emrnotebooks-prod.ap-east-1.amazonaws.com +emrstudio-prod.ap-east-1.amazonaws.com +emrappui-prod.ap-northeast-1.amazonaws.com +emrnotebooks-prod.ap-northeast-1.amazonaws.com +emrstudio-prod.ap-northeast-1.amazonaws.com +emrappui-prod.ap-northeast-2.amazonaws.com +emrnotebooks-prod.ap-northeast-2.amazonaws.com +emrstudio-prod.ap-northeast-2.amazonaws.com +emrappui-prod.ap-northeast-3.amazonaws.com +emrnotebooks-prod.ap-northeast-3.amazonaws.com +emrstudio-prod.ap-northeast-3.amazonaws.com +emrappui-prod.ap-south-1.amazonaws.com +emrnotebooks-prod.ap-south-1.amazonaws.com +emrstudio-prod.ap-south-1.amazonaws.com +emrappui-prod.ap-southeast-1.amazonaws.com +emrnotebooks-prod.ap-southeast-1.amazonaws.com +emrstudio-prod.ap-southeast-1.amazonaws.com +emrappui-prod.ap-southeast-2.amazonaws.com +emrnotebooks-prod.ap-southeast-2.amazonaws.com +emrstudio-prod.ap-southeast-2.amazonaws.com +emrappui-prod.ap-southeast-3.amazonaws.com +emrnotebooks-prod.ap-southeast-3.amazonaws.com +emrstudio-prod.ap-southeast-3.amazonaws.com +emrappui-prod.ca-central-1.amazonaws.com +emrnotebooks-prod.ca-central-1.amazonaws.com +emrstudio-prod.ca-central-1.amazonaws.com +emrappui-prod.eu-central-1.amazonaws.com +emrnotebooks-prod.eu-central-1.amazonaws.com +emrstudio-prod.eu-central-1.amazonaws.com +emrappui-prod.eu-north-1.amazonaws.com +emrnotebooks-prod.eu-north-1.amazonaws.com +emrstudio-prod.eu-north-1.amazonaws.com +emrappui-prod.eu-south-1.amazonaws.com +emrnotebooks-prod.eu-south-1.amazonaws.com +emrstudio-prod.eu-south-1.amazonaws.com +emrappui-prod.eu-west-1.amazonaws.com +emrnotebooks-prod.eu-west-1.amazonaws.com +emrstudio-prod.eu-west-1.amazonaws.com +emrappui-prod.eu-west-2.amazonaws.com +emrnotebooks-prod.eu-west-2.amazonaws.com +emrstudio-prod.eu-west-2.amazonaws.com +emrappui-prod.eu-west-3.amazonaws.com +emrnotebooks-prod.eu-west-3.amazonaws.com +emrstudio-prod.eu-west-3.amazonaws.com +emrappui-prod.me-central-1.amazonaws.com +emrnotebooks-prod.me-central-1.amazonaws.com +emrstudio-prod.me-central-1.amazonaws.com +emrappui-prod.me-south-1.amazonaws.com +emrnotebooks-prod.me-south-1.amazonaws.com +emrstudio-prod.me-south-1.amazonaws.com +emrappui-prod.sa-east-1.amazonaws.com +emrnotebooks-prod.sa-east-1.amazonaws.com +emrstudio-prod.sa-east-1.amazonaws.com +emrappui-prod.us-east-1.amazonaws.com +emrnotebooks-prod.us-east-1.amazonaws.com +emrstudio-prod.us-east-1.amazonaws.com +emrappui-prod.us-east-2.amazonaws.com +emrnotebooks-prod.us-east-2.amazonaws.com +emrstudio-prod.us-east-2.amazonaws.com +emrappui-prod.us-gov-east-1.amazonaws.com +emrnotebooks-prod.us-gov-east-1.amazonaws.com +emrstudio-prod.us-gov-east-1.amazonaws.com +emrappui-prod.us-gov-west-1.amazonaws.com +emrnotebooks-prod.us-gov-west-1.amazonaws.com +emrstudio-prod.us-gov-west-1.amazonaws.com +emrappui-prod.us-west-1.amazonaws.com +emrnotebooks-prod.us-west-1.amazonaws.com +emrstudio-prod.us-west-1.amazonaws.com +emrappui-prod.us-west-2.amazonaws.com +emrnotebooks-prod.us-west-2.amazonaws.com +emrstudio-prod.us-west-2.amazonaws.com + +// Amazon Managed Workflows for Apache Airflow +// Submitted by AWS Security +// Reference: 4ab55e6f-90c0-4a8d-b6a0-52ca5dbb1c2e +*.cn-north-1.airflow.amazonaws.com.cn +*.cn-northwest-1.airflow.amazonaws.com.cn +*.ap-northeast-1.airflow.amazonaws.com +*.ap-northeast-2.airflow.amazonaws.com +*.ap-south-1.airflow.amazonaws.com +*.ap-southeast-1.airflow.amazonaws.com +*.ap-southeast-2.airflow.amazonaws.com +*.ca-central-1.airflow.amazonaws.com +*.eu-central-1.airflow.amazonaws.com +*.eu-north-1.airflow.amazonaws.com +*.eu-west-1.airflow.amazonaws.com +*.eu-west-2.airflow.amazonaws.com +*.eu-west-3.airflow.amazonaws.com +*.sa-east-1.airflow.amazonaws.com +*.us-east-1.airflow.amazonaws.com +*.us-east-2.airflow.amazonaws.com +*.us-west-2.airflow.amazonaws.com + +// Amazon S3 +// Submitted by AWS Security +// Reference: 0e801048-08f2-4064-9cb8-e7373e0b57f4 +s3.dualstack.cn-north-1.amazonaws.com.cn +s3-accesspoint.dualstack.cn-north-1.amazonaws.com.cn +s3-website.dualstack.cn-north-1.amazonaws.com.cn +s3.cn-north-1.amazonaws.com.cn +s3-accesspoint.cn-north-1.amazonaws.com.cn +s3-deprecated.cn-north-1.amazonaws.com.cn +s3-object-lambda.cn-north-1.amazonaws.com.cn +s3-website.cn-north-1.amazonaws.com.cn +s3.dualstack.cn-northwest-1.amazonaws.com.cn +s3-accesspoint.dualstack.cn-northwest-1.amazonaws.com.cn +s3.cn-northwest-1.amazonaws.com.cn +s3-accesspoint.cn-northwest-1.amazonaws.com.cn +s3-object-lambda.cn-northwest-1.amazonaws.com.cn +s3-website.cn-northwest-1.amazonaws.com.cn +s3.dualstack.af-south-1.amazonaws.com +s3-accesspoint.dualstack.af-south-1.amazonaws.com +s3-website.dualstack.af-south-1.amazonaws.com +s3.af-south-1.amazonaws.com +s3-accesspoint.af-south-1.amazonaws.com +s3-object-lambda.af-south-1.amazonaws.com +s3-website.af-south-1.amazonaws.com +s3.dualstack.ap-east-1.amazonaws.com +s3-accesspoint.dualstack.ap-east-1.amazonaws.com +s3.ap-east-1.amazonaws.com +s3-accesspoint.ap-east-1.amazonaws.com +s3-object-lambda.ap-east-1.amazonaws.com +s3-website.ap-east-1.amazonaws.com +s3.dualstack.ap-northeast-1.amazonaws.com +s3-accesspoint.dualstack.ap-northeast-1.amazonaws.com +s3-website.dualstack.ap-northeast-1.amazonaws.com +s3.ap-northeast-1.amazonaws.com +s3-accesspoint.ap-northeast-1.amazonaws.com +s3-object-lambda.ap-northeast-1.amazonaws.com +s3-website.ap-northeast-1.amazonaws.com +s3.dualstack.ap-northeast-2.amazonaws.com +s3-accesspoint.dualstack.ap-northeast-2.amazonaws.com +s3-website.dualstack.ap-northeast-2.amazonaws.com +s3.ap-northeast-2.amazonaws.com +s3-accesspoint.ap-northeast-2.amazonaws.com +s3-object-lambda.ap-northeast-2.amazonaws.com +s3-website.ap-northeast-2.amazonaws.com +s3.dualstack.ap-northeast-3.amazonaws.com +s3-accesspoint.dualstack.ap-northeast-3.amazonaws.com +s3-website.dualstack.ap-northeast-3.amazonaws.com +s3.ap-northeast-3.amazonaws.com +s3-accesspoint.ap-northeast-3.amazonaws.com +s3-object-lambda.ap-northeast-3.amazonaws.com +s3-website.ap-northeast-3.amazonaws.com +s3.dualstack.ap-south-1.amazonaws.com +s3-accesspoint.dualstack.ap-south-1.amazonaws.com +s3-website.dualstack.ap-south-1.amazonaws.com +s3.ap-south-1.amazonaws.com +s3-accesspoint.ap-south-1.amazonaws.com +s3-object-lambda.ap-south-1.amazonaws.com +s3-website.ap-south-1.amazonaws.com +s3.dualstack.ap-south-2.amazonaws.com +s3-accesspoint.dualstack.ap-south-2.amazonaws.com +s3.ap-south-2.amazonaws.com +s3-accesspoint.ap-south-2.amazonaws.com +s3-object-lambda.ap-south-2.amazonaws.com +s3-website.ap-south-2.amazonaws.com +s3.dualstack.ap-southeast-1.amazonaws.com +s3-accesspoint.dualstack.ap-southeast-1.amazonaws.com +s3-website.dualstack.ap-southeast-1.amazonaws.com +s3.ap-southeast-1.amazonaws.com +s3-accesspoint.ap-southeast-1.amazonaws.com +s3-object-lambda.ap-southeast-1.amazonaws.com +s3-website.ap-southeast-1.amazonaws.com +s3.dualstack.ap-southeast-2.amazonaws.com +s3-accesspoint.dualstack.ap-southeast-2.amazonaws.com +s3-website.dualstack.ap-southeast-2.amazonaws.com +s3.ap-southeast-2.amazonaws.com +s3-accesspoint.ap-southeast-2.amazonaws.com +s3-object-lambda.ap-southeast-2.amazonaws.com +s3-website.ap-southeast-2.amazonaws.com +s3.dualstack.ap-southeast-3.amazonaws.com +s3-accesspoint.dualstack.ap-southeast-3.amazonaws.com +s3.ap-southeast-3.amazonaws.com +s3-accesspoint.ap-southeast-3.amazonaws.com +s3-object-lambda.ap-southeast-3.amazonaws.com +s3-website.ap-southeast-3.amazonaws.com +s3.dualstack.ap-southeast-4.amazonaws.com +s3-accesspoint.dualstack.ap-southeast-4.amazonaws.com +s3.ap-southeast-4.amazonaws.com +s3-accesspoint.ap-southeast-4.amazonaws.com +s3-object-lambda.ap-southeast-4.amazonaws.com +s3-website.ap-southeast-4.amazonaws.com +s3.dualstack.ca-central-1.amazonaws.com +s3-accesspoint.dualstack.ca-central-1.amazonaws.com +s3-accesspoint-fips.dualstack.ca-central-1.amazonaws.com +s3-fips.dualstack.ca-central-1.amazonaws.com +s3-website.dualstack.ca-central-1.amazonaws.com +s3.ca-central-1.amazonaws.com +s3-accesspoint.ca-central-1.amazonaws.com +s3-accesspoint-fips.ca-central-1.amazonaws.com +s3-fips.ca-central-1.amazonaws.com +s3-object-lambda.ca-central-1.amazonaws.com +s3-website.ca-central-1.amazonaws.com +s3.dualstack.eu-central-1.amazonaws.com +s3-accesspoint.dualstack.eu-central-1.amazonaws.com +s3-website.dualstack.eu-central-1.amazonaws.com +s3.eu-central-1.amazonaws.com +s3-accesspoint.eu-central-1.amazonaws.com +s3-object-lambda.eu-central-1.amazonaws.com +s3-website.eu-central-1.amazonaws.com +s3.dualstack.eu-central-2.amazonaws.com +s3-accesspoint.dualstack.eu-central-2.amazonaws.com +s3.eu-central-2.amazonaws.com +s3-accesspoint.eu-central-2.amazonaws.com +s3-object-lambda.eu-central-2.amazonaws.com +s3-website.eu-central-2.amazonaws.com +s3.dualstack.eu-north-1.amazonaws.com +s3-accesspoint.dualstack.eu-north-1.amazonaws.com +s3.eu-north-1.amazonaws.com +s3-accesspoint.eu-north-1.amazonaws.com +s3-object-lambda.eu-north-1.amazonaws.com +s3-website.eu-north-1.amazonaws.com +s3.dualstack.eu-south-1.amazonaws.com +s3-accesspoint.dualstack.eu-south-1.amazonaws.com +s3-website.dualstack.eu-south-1.amazonaws.com +s3.eu-south-1.amazonaws.com +s3-accesspoint.eu-south-1.amazonaws.com +s3-object-lambda.eu-south-1.amazonaws.com +s3-website.eu-south-1.amazonaws.com +s3.dualstack.eu-south-2.amazonaws.com +s3-accesspoint.dualstack.eu-south-2.amazonaws.com +s3.eu-south-2.amazonaws.com +s3-accesspoint.eu-south-2.amazonaws.com +s3-object-lambda.eu-south-2.amazonaws.com +s3-website.eu-south-2.amazonaws.com +s3.dualstack.eu-west-1.amazonaws.com +s3-accesspoint.dualstack.eu-west-1.amazonaws.com +s3-website.dualstack.eu-west-1.amazonaws.com +s3.eu-west-1.amazonaws.com +s3-accesspoint.eu-west-1.amazonaws.com +s3-deprecated.eu-west-1.amazonaws.com +s3-object-lambda.eu-west-1.amazonaws.com +s3-website.eu-west-1.amazonaws.com +s3.dualstack.eu-west-2.amazonaws.com +s3-accesspoint.dualstack.eu-west-2.amazonaws.com +s3.eu-west-2.amazonaws.com +s3-accesspoint.eu-west-2.amazonaws.com +s3-object-lambda.eu-west-2.amazonaws.com +s3-website.eu-west-2.amazonaws.com +s3.dualstack.eu-west-3.amazonaws.com +s3-accesspoint.dualstack.eu-west-3.amazonaws.com +s3-website.dualstack.eu-west-3.amazonaws.com +s3.eu-west-3.amazonaws.com +s3-accesspoint.eu-west-3.amazonaws.com +s3-object-lambda.eu-west-3.amazonaws.com +s3-website.eu-west-3.amazonaws.com +s3.dualstack.il-central-1.amazonaws.com +s3-accesspoint.dualstack.il-central-1.amazonaws.com +s3.il-central-1.amazonaws.com +s3-accesspoint.il-central-1.amazonaws.com +s3-object-lambda.il-central-1.amazonaws.com +s3-website.il-central-1.amazonaws.com +s3.dualstack.me-central-1.amazonaws.com +s3-accesspoint.dualstack.me-central-1.amazonaws.com +s3.me-central-1.amazonaws.com +s3-accesspoint.me-central-1.amazonaws.com +s3-object-lambda.me-central-1.amazonaws.com +s3-website.me-central-1.amazonaws.com +s3.dualstack.me-south-1.amazonaws.com +s3-accesspoint.dualstack.me-south-1.amazonaws.com +s3.me-south-1.amazonaws.com +s3-accesspoint.me-south-1.amazonaws.com +s3-object-lambda.me-south-1.amazonaws.com +s3-website.me-south-1.amazonaws.com +s3.amazonaws.com +s3-1.amazonaws.com +s3-ap-east-1.amazonaws.com +s3-ap-northeast-1.amazonaws.com +s3-ap-northeast-2.amazonaws.com +s3-ap-northeast-3.amazonaws.com +s3-ap-south-1.amazonaws.com +s3-ap-southeast-1.amazonaws.com +s3-ap-southeast-2.amazonaws.com +s3-ca-central-1.amazonaws.com +s3-eu-central-1.amazonaws.com +s3-eu-north-1.amazonaws.com +s3-eu-west-1.amazonaws.com +s3-eu-west-2.amazonaws.com +s3-eu-west-3.amazonaws.com +s3-external-1.amazonaws.com +s3-fips-us-gov-east-1.amazonaws.com +s3-fips-us-gov-west-1.amazonaws.com +mrap.accesspoint.s3-global.amazonaws.com +s3-me-south-1.amazonaws.com +s3-sa-east-1.amazonaws.com +s3-us-east-2.amazonaws.com +s3-us-gov-east-1.amazonaws.com +s3-us-gov-west-1.amazonaws.com +s3-us-west-1.amazonaws.com +s3-us-west-2.amazonaws.com +s3-website-ap-northeast-1.amazonaws.com +s3-website-ap-southeast-1.amazonaws.com +s3-website-ap-southeast-2.amazonaws.com +s3-website-eu-west-1.amazonaws.com +s3-website-sa-east-1.amazonaws.com +s3-website-us-east-1.amazonaws.com +s3-website-us-gov-west-1.amazonaws.com +s3-website-us-west-1.amazonaws.com +s3-website-us-west-2.amazonaws.com +s3.dualstack.sa-east-1.amazonaws.com +s3-accesspoint.dualstack.sa-east-1.amazonaws.com +s3-website.dualstack.sa-east-1.amazonaws.com +s3.sa-east-1.amazonaws.com +s3-accesspoint.sa-east-1.amazonaws.com +s3-object-lambda.sa-east-1.amazonaws.com +s3-website.sa-east-1.amazonaws.com +s3.dualstack.us-east-1.amazonaws.com +s3-accesspoint.dualstack.us-east-1.amazonaws.com +s3-accesspoint-fips.dualstack.us-east-1.amazonaws.com +s3-fips.dualstack.us-east-1.amazonaws.com +s3-website.dualstack.us-east-1.amazonaws.com +s3.us-east-1.amazonaws.com +s3-accesspoint.us-east-1.amazonaws.com +s3-accesspoint-fips.us-east-1.amazonaws.com +s3-deprecated.us-east-1.amazonaws.com +s3-fips.us-east-1.amazonaws.com +s3-object-lambda.us-east-1.amazonaws.com +s3-website.us-east-1.amazonaws.com +s3.dualstack.us-east-2.amazonaws.com +s3-accesspoint.dualstack.us-east-2.amazonaws.com +s3-accesspoint-fips.dualstack.us-east-2.amazonaws.com +s3-fips.dualstack.us-east-2.amazonaws.com +s3.us-east-2.amazonaws.com +s3-accesspoint.us-east-2.amazonaws.com +s3-accesspoint-fips.us-east-2.amazonaws.com +s3-deprecated.us-east-2.amazonaws.com +s3-fips.us-east-2.amazonaws.com +s3-object-lambda.us-east-2.amazonaws.com +s3-website.us-east-2.amazonaws.com +s3.dualstack.us-gov-east-1.amazonaws.com +s3-accesspoint.dualstack.us-gov-east-1.amazonaws.com +s3-accesspoint-fips.dualstack.us-gov-east-1.amazonaws.com +s3-fips.dualstack.us-gov-east-1.amazonaws.com +s3.us-gov-east-1.amazonaws.com +s3-accesspoint.us-gov-east-1.amazonaws.com +s3-accesspoint-fips.us-gov-east-1.amazonaws.com +s3-fips.us-gov-east-1.amazonaws.com +s3-object-lambda.us-gov-east-1.amazonaws.com +s3-website.us-gov-east-1.amazonaws.com +s3.dualstack.us-gov-west-1.amazonaws.com +s3-accesspoint.dualstack.us-gov-west-1.amazonaws.com +s3-accesspoint-fips.dualstack.us-gov-west-1.amazonaws.com +s3-fips.dualstack.us-gov-west-1.amazonaws.com +s3.us-gov-west-1.amazonaws.com +s3-accesspoint.us-gov-west-1.amazonaws.com +s3-accesspoint-fips.us-gov-west-1.amazonaws.com +s3-fips.us-gov-west-1.amazonaws.com +s3-object-lambda.us-gov-west-1.amazonaws.com +s3-website.us-gov-west-1.amazonaws.com +s3.dualstack.us-west-1.amazonaws.com +s3-accesspoint.dualstack.us-west-1.amazonaws.com +s3-accesspoint-fips.dualstack.us-west-1.amazonaws.com +s3-fips.dualstack.us-west-1.amazonaws.com +s3-website.dualstack.us-west-1.amazonaws.com +s3.us-west-1.amazonaws.com +s3-accesspoint.us-west-1.amazonaws.com +s3-accesspoint-fips.us-west-1.amazonaws.com +s3-fips.us-west-1.amazonaws.com +s3-object-lambda.us-west-1.amazonaws.com +s3-website.us-west-1.amazonaws.com +s3.dualstack.us-west-2.amazonaws.com +s3-accesspoint.dualstack.us-west-2.amazonaws.com +s3-accesspoint-fips.dualstack.us-west-2.amazonaws.com +s3-fips.dualstack.us-west-2.amazonaws.com +s3-website.dualstack.us-west-2.amazonaws.com +s3.us-west-2.amazonaws.com +s3-accesspoint.us-west-2.amazonaws.com +s3-accesspoint-fips.us-west-2.amazonaws.com +s3-deprecated.us-west-2.amazonaws.com +s3-fips.us-west-2.amazonaws.com +s3-object-lambda.us-west-2.amazonaws.com +s3-website.us-west-2.amazonaws.com + +// Amazon SageMaker Notebook Instances +// Submitted by AWS Security +// Reference: fe8c9e94-5a22-486d-8750-991a3a9b13c6 +notebook.af-south-1.sagemaker.aws +notebook.ap-east-1.sagemaker.aws +notebook.ap-northeast-1.sagemaker.aws +notebook.ap-northeast-2.sagemaker.aws +notebook.ap-northeast-3.sagemaker.aws +notebook.ap-south-1.sagemaker.aws +notebook.ap-south-2.sagemaker.aws +notebook.ap-southeast-1.sagemaker.aws +notebook.ap-southeast-2.sagemaker.aws +notebook.ap-southeast-3.sagemaker.aws +notebook.ap-southeast-4.sagemaker.aws +notebook.ca-central-1.sagemaker.aws +notebook.eu-central-1.sagemaker.aws +notebook.eu-central-2.sagemaker.aws +notebook.eu-north-1.sagemaker.aws +notebook.eu-south-1.sagemaker.aws +notebook.eu-south-2.sagemaker.aws +notebook.eu-west-1.sagemaker.aws +notebook.eu-west-2.sagemaker.aws +notebook.eu-west-3.sagemaker.aws +notebook.il-central-1.sagemaker.aws +notebook.me-central-1.sagemaker.aws +notebook.me-south-1.sagemaker.aws +notebook.sa-east-1.sagemaker.aws +notebook.us-east-1.sagemaker.aws +notebook-fips.us-east-1.sagemaker.aws +notebook.us-east-2.sagemaker.aws +notebook-fips.us-east-2.sagemaker.aws +notebook.us-gov-east-1.sagemaker.aws +notebook-fips.us-gov-east-1.sagemaker.aws +notebook.us-gov-west-1.sagemaker.aws +notebook-fips.us-gov-west-1.sagemaker.aws +notebook.us-west-1.sagemaker.aws +notebook.us-west-2.sagemaker.aws +notebook-fips.us-west-2.sagemaker.aws +notebook.cn-north-1.sagemaker.com.cn +notebook.cn-northwest-1.sagemaker.com.cn + +// Amazon SageMaker Studio +// Submitted by AWS Security +// Reference: 057ee397-6bf8-4f20-b807-d7bc145ac980 +studio.af-south-1.sagemaker.aws +studio.ap-east-1.sagemaker.aws +studio.ap-northeast-1.sagemaker.aws +studio.ap-northeast-2.sagemaker.aws +studio.ap-northeast-3.sagemaker.aws +studio.ap-south-1.sagemaker.aws +studio.ap-southeast-1.sagemaker.aws +studio.ap-southeast-2.sagemaker.aws +studio.ap-southeast-3.sagemaker.aws +studio.ca-central-1.sagemaker.aws +studio.eu-central-1.sagemaker.aws +studio.eu-north-1.sagemaker.aws +studio.eu-south-1.sagemaker.aws +studio.eu-west-1.sagemaker.aws +studio.eu-west-2.sagemaker.aws +studio.eu-west-3.sagemaker.aws +studio.il-central-1.sagemaker.aws +studio.me-central-1.sagemaker.aws +studio.me-south-1.sagemaker.aws +studio.sa-east-1.sagemaker.aws +studio.us-east-1.sagemaker.aws +studio.us-east-2.sagemaker.aws +studio.us-gov-east-1.sagemaker.aws +studio-fips.us-gov-east-1.sagemaker.aws +studio.us-gov-west-1.sagemaker.aws +studio-fips.us-gov-west-1.sagemaker.aws +studio.us-west-1.sagemaker.aws +studio.us-west-2.sagemaker.aws +studio.cn-north-1.sagemaker.com.cn +studio.cn-northwest-1.sagemaker.com.cn + +// Analytics on AWS +// Submitted by AWS Security +// Reference: 955f9f40-a495-4e73-ae85-67b77ac9cadd +analytics-gateway.ap-northeast-1.amazonaws.com +analytics-gateway.ap-northeast-2.amazonaws.com +analytics-gateway.ap-south-1.amazonaws.com +analytics-gateway.ap-southeast-1.amazonaws.com +analytics-gateway.ap-southeast-2.amazonaws.com +analytics-gateway.eu-central-1.amazonaws.com +analytics-gateway.eu-west-1.amazonaws.com +analytics-gateway.us-east-1.amazonaws.com +analytics-gateway.us-east-2.amazonaws.com +analytics-gateway.us-west-2.amazonaws.com + +// AWS Amplify +// Submitted by AWS Security +// Reference: 5ecce854-c033-4fc4-a755-1a9916d9a9bb +*.amplifyapp.com + +// AWS App Runner +// Submitted by AWS Security +// Reference: 6828c008-ba5d-442f-ade5-48da4e7c2316 +*.awsapprunner.com + +// AWS Cloud9 +// Submitted by: AWS Security +// Reference: 05c44955-977c-4b57-938a-f2af92733f9f +webview-assets.aws-cloud9.af-south-1.amazonaws.com +vfs.cloud9.af-south-1.amazonaws.com +webview-assets.cloud9.af-south-1.amazonaws.com +webview-assets.aws-cloud9.ap-east-1.amazonaws.com +vfs.cloud9.ap-east-1.amazonaws.com +webview-assets.cloud9.ap-east-1.amazonaws.com +webview-assets.aws-cloud9.ap-northeast-1.amazonaws.com +vfs.cloud9.ap-northeast-1.amazonaws.com +webview-assets.cloud9.ap-northeast-1.amazonaws.com +webview-assets.aws-cloud9.ap-northeast-2.amazonaws.com +vfs.cloud9.ap-northeast-2.amazonaws.com +webview-assets.cloud9.ap-northeast-2.amazonaws.com +webview-assets.aws-cloud9.ap-northeast-3.amazonaws.com +vfs.cloud9.ap-northeast-3.amazonaws.com +webview-assets.cloud9.ap-northeast-3.amazonaws.com +webview-assets.aws-cloud9.ap-south-1.amazonaws.com +vfs.cloud9.ap-south-1.amazonaws.com +webview-assets.cloud9.ap-south-1.amazonaws.com +webview-assets.aws-cloud9.ap-southeast-1.amazonaws.com +vfs.cloud9.ap-southeast-1.amazonaws.com +webview-assets.cloud9.ap-southeast-1.amazonaws.com +webview-assets.aws-cloud9.ap-southeast-2.amazonaws.com +vfs.cloud9.ap-southeast-2.amazonaws.com +webview-assets.cloud9.ap-southeast-2.amazonaws.com +webview-assets.aws-cloud9.ca-central-1.amazonaws.com +vfs.cloud9.ca-central-1.amazonaws.com +webview-assets.cloud9.ca-central-1.amazonaws.com +webview-assets.aws-cloud9.eu-central-1.amazonaws.com +vfs.cloud9.eu-central-1.amazonaws.com +webview-assets.cloud9.eu-central-1.amazonaws.com +webview-assets.aws-cloud9.eu-north-1.amazonaws.com +vfs.cloud9.eu-north-1.amazonaws.com +webview-assets.cloud9.eu-north-1.amazonaws.com +webview-assets.aws-cloud9.eu-south-1.amazonaws.com +vfs.cloud9.eu-south-1.amazonaws.com +webview-assets.cloud9.eu-south-1.amazonaws.com +webview-assets.aws-cloud9.eu-west-1.amazonaws.com +vfs.cloud9.eu-west-1.amazonaws.com +webview-assets.cloud9.eu-west-1.amazonaws.com +webview-assets.aws-cloud9.eu-west-2.amazonaws.com +vfs.cloud9.eu-west-2.amazonaws.com +webview-assets.cloud9.eu-west-2.amazonaws.com +webview-assets.aws-cloud9.eu-west-3.amazonaws.com +vfs.cloud9.eu-west-3.amazonaws.com +webview-assets.cloud9.eu-west-3.amazonaws.com +webview-assets.aws-cloud9.me-south-1.amazonaws.com +vfs.cloud9.me-south-1.amazonaws.com +webview-assets.cloud9.me-south-1.amazonaws.com +webview-assets.aws-cloud9.sa-east-1.amazonaws.com +vfs.cloud9.sa-east-1.amazonaws.com +webview-assets.cloud9.sa-east-1.amazonaws.com +webview-assets.aws-cloud9.us-east-1.amazonaws.com +vfs.cloud9.us-east-1.amazonaws.com +webview-assets.cloud9.us-east-1.amazonaws.com +webview-assets.aws-cloud9.us-east-2.amazonaws.com +vfs.cloud9.us-east-2.amazonaws.com +webview-assets.cloud9.us-east-2.amazonaws.com +webview-assets.aws-cloud9.us-west-1.amazonaws.com +vfs.cloud9.us-west-1.amazonaws.com +webview-assets.cloud9.us-west-1.amazonaws.com +webview-assets.aws-cloud9.us-west-2.amazonaws.com +vfs.cloud9.us-west-2.amazonaws.com +webview-assets.cloud9.us-west-2.amazonaws.com + +// AWS Elastic Beanstalk +// Submitted by AWS Security +// Reference: bb5a965c-dec3-4967-aa22-e306ad064797 +cn-north-1.eb.amazonaws.com.cn +cn-northwest-1.eb.amazonaws.com.cn +elasticbeanstalk.com +af-south-1.elasticbeanstalk.com +ap-east-1.elasticbeanstalk.com +ap-northeast-1.elasticbeanstalk.com +ap-northeast-2.elasticbeanstalk.com +ap-northeast-3.elasticbeanstalk.com +ap-south-1.elasticbeanstalk.com +ap-southeast-1.elasticbeanstalk.com +ap-southeast-2.elasticbeanstalk.com +ap-southeast-3.elasticbeanstalk.com +ca-central-1.elasticbeanstalk.com +eu-central-1.elasticbeanstalk.com +eu-north-1.elasticbeanstalk.com +eu-south-1.elasticbeanstalk.com +eu-west-1.elasticbeanstalk.com +eu-west-2.elasticbeanstalk.com +eu-west-3.elasticbeanstalk.com +il-central-1.elasticbeanstalk.com +me-south-1.elasticbeanstalk.com +sa-east-1.elasticbeanstalk.com +us-east-1.elasticbeanstalk.com +us-east-2.elasticbeanstalk.com +us-gov-east-1.elasticbeanstalk.com +us-gov-west-1.elasticbeanstalk.com +us-west-1.elasticbeanstalk.com +us-west-2.elasticbeanstalk.com + +// (AWS) Elastic Load Balancing +// Submitted by Luke Wells +// Reference: 12a3d528-1bac-4433-a359-a395867ffed2 +*.elb.amazonaws.com.cn +*.elb.amazonaws.com + +// AWS Global Accelerator +// Submitted by Daniel Massaguer +// Reference: d916759d-a08b-4241-b536-4db887383a6a +awsglobalaccelerator.com + +// eero +// Submitted by Yue Kang +// Reference: 264afe70-f62c-4c02-8ab9-b5281ed24461 +eero.online +eero-stage.online + +// concludes Amazon + +// Amune : https://amune.org/ +// Submitted by Team Amune +t3l3p0rt.net +tele.amune.org + +// Apigee : https://apigee.com/ +// Submitted by Apigee Security Team +apigee.io + +// Apphud : https://apphud.com +// Submitted by Alexander Selivanov +siiites.com + +// Appspace : https://www.appspace.com +// Submitted by Appspace Security Team +appspacehosted.com +appspaceusercontent.com + +// Appudo UG (haftungsbeschränkt) : https://www.appudo.com +// Submitted by Alexander Hochbaum +appudo.net + +// Aptible : https://www.aptible.com/ +// Submitted by Thomas Orozco +on-aptible.com + +// ASEINet : https://www.aseinet.com/ +// Submitted by Asei SEKIGUCHI +user.aseinet.ne.jp +gv.vc +d.gv.vc + +// Asociación Amigos de la Informática "Euskalamiga" : http://encounter.eus/ +// Submitted by Hector Martin +user.party.eus + +// Association potager.org : https://potager.org/ +// Submitted by Lunar +pimienta.org +poivron.org +potager.org +sweetpepper.org + +// ASUSTOR Inc. : http://www.asustor.com +// Submitted by Vincent Tseng +myasustor.com + +// Atlassian : https://atlassian.com +// Submitted by Sam Smyth +cdn.prod.atlassian-dev.net + +// Authentick UG (haftungsbeschränkt) : https://authentick.net +// Submitted by Lukas Reschke +translated.page + +// Autocode : https://autocode.com +// Submitted by Jacob Lee +autocode.dev + +// AVM : https://avm.de +// Submitted by Andreas Weise +myfritz.net + +// AVStack Pte. Ltd. : https://avstack.io +// Submitted by Jasper Hugo +onavstack.net + +// AW AdvisorWebsites.com Software Inc : https://advisorwebsites.com +// Submitted by James Kennedy +*.awdev.ca +*.advisor.ws + +// AZ.pl sp. z.o.o: https://az.pl +// Submitted by Krzysztof Wolski +ecommerce-shop.pl + +// b-data GmbH : https://www.b-data.io +// Submitted by Olivier Benz +b-data.io + +// backplane : https://www.backplane.io +// Submitted by Anthony Voutas +backplaneapp.io + +// Balena : https://www.balena.io +// Submitted by Petros Angelatos +balena-devices.com + +// University of Banja Luka : https://unibl.org +// Domains for Republic of Srpska administrative entity. +// Submitted by Marko Ivanovic +rs.ba + +// Banzai Cloud +// Submitted by Janos Matyas +*.banzai.cloud +app.banzaicloud.io +*.backyards.banzaicloud.io + +// BASE, Inc. : https://binc.jp +// Submitted by Yuya NAGASAWA +base.ec +official.ec +buyshop.jp +fashionstore.jp +handcrafted.jp +kawaiishop.jp +supersale.jp +theshop.jp +shopselect.net +base.shop + +// BeagleBoard.org Foundation : https://beagleboard.org +// Submitted by Jason Kridner +beagleboard.io + +// Beget Ltd +// Submitted by Lev Nekrasov +*.beget.app + +// BetaInABox +// Submitted by Adrian +betainabox.com + +// BinaryLane : http://www.binarylane.com +// Submitted by Nathan O'Sullivan +bnr.la + +// Bitbucket : http://bitbucket.org +// Submitted by Andy Ortlieb +bitbucket.io + +// Blackbaud, Inc. : https://www.blackbaud.com +// Submitted by Paul Crowder +blackbaudcdn.net + +// Blatech : http://www.blatech.net +// Submitted by Luke Bratch +of.je + +// Blue Bite, LLC : https://bluebite.com +// Submitted by Joshua Weiss +bluebite.io + +// Boomla : https://boomla.com +// Submitted by Tibor Halter +boomla.net + +// Boutir : https://www.boutir.com +// Submitted by Eric Ng Ka Ka +boutir.com + +// Boxfuse : https://boxfuse.com +// Submitted by Axel Fontaine +boxfuse.io + +// bplaced : https://www.bplaced.net/ +// Submitted by Miroslav Bozic +square7.ch +bplaced.com +bplaced.de +square7.de +bplaced.net +square7.net + +// Brendly : https://brendly.rs +// Submitted by Dusan Radovanovic +shop.brendly.rs + +// BrowserSafetyMark +// Submitted by Dave Tharp +browsersafetymark.io + +// Bytemark Hosting : https://www.bytemark.co.uk +// Submitted by Paul Cammish +uk0.bigv.io +dh.bytemark.co.uk +vm.bytemark.co.uk + +// Caf.js Labs LLC : https://www.cafjs.com +// Submitted by Antonio Lain +cafjs.com + +// callidomus : https://www.callidomus.com/ +// Submitted by Marcus Popp +mycd.eu + +// Canva Pty Ltd : https://canva.com/ +// Submitted by Joel Aquilina +canva-apps.cn +canva-apps.com + +// Carrd : https://carrd.co +// Submitted by AJ +drr.ac +uwu.ai +carrd.co +crd.co +ju.mp + +// CentralNic : http://www.centralnic.com/names/domains +// Submitted by registry +ae.org +br.com +cn.com +com.de +com.se +de.com +eu.com +gb.net +hu.net +jp.net +jpn.com +mex.com +ru.com +sa.com +se.net +uk.com +uk.net +us.com +za.bz +za.com + +// No longer operated by CentralNic, these entries should be adopted and/or removed by current operators +// Submitted by Gavin Brown +ar.com +hu.com +kr.com +no.com +qc.com +uy.com + +// Africa.com Web Solutions Ltd : https://registry.africa.com +// Submitted by Gavin Brown +africa.com + +// iDOT Services Limited : http://www.domain.gr.com +// Submitted by Gavin Brown +gr.com + +// Radix FZC : http://domains.in.net +// Submitted by Gavin Brown +in.net +web.in + +// US REGISTRY LLC : http://us.org +// Submitted by Gavin Brown +us.org + +// co.com Registry, LLC : https://registry.co.com +// Submitted by Gavin Brown +co.com + +// Roar Domains LLC : https://roar.basketball/ +// Submitted by Gavin Brown +aus.basketball +nz.basketball + +// BRS Media : https://brsmedia.com/ +// Submitted by Gavin Brown +radio.am +radio.fm + +// c.la : http://www.c.la/ +c.la + +// certmgr.org : https://certmgr.org +// Submitted by B. Blechschmidt +certmgr.org + +// Cityhost LLC : https://cityhost.ua +// Submitted by Maksym Rivtin +cx.ua + +// Civilized Discourse Construction Kit, Inc. : https://www.discourse.org/ +// Submitted by Rishabh Nambiar & Michael Brown +discourse.group +discourse.team + +// Clever Cloud : https://www.clever-cloud.com/ +// Submitted by Quentin Adam +cleverapps.io + +// Clerk : https://www.clerk.dev +// Submitted by Colin Sidoti +clerk.app +clerkstage.app +*.lcl.dev +*.lclstage.dev +*.stg.dev +*.stgstage.dev + +// ClickRising : https://clickrising.com/ +// Submitted by Umut Gumeli +clickrising.net + +// Cloud66 : https://www.cloud66.com/ +// Submitted by Khash Sajadi +c66.me +cloud66.ws +cloud66.zone + +// CloudAccess.net : https://www.cloudaccess.net/ +// Submitted by Pawel Panek +jdevcloud.com +wpdevcloud.com +cloudaccess.host +freesite.host +cloudaccess.net + +// cloudControl : https://www.cloudcontrol.com/ +// Submitted by Tobias Wilken +cloudcontrolled.com +cloudcontrolapp.com + +// Cloudera, Inc. : https://www.cloudera.com/ +// Submitted by Kedarnath Waikar +*.cloudera.site + +// Cloudflare, Inc. : https://www.cloudflare.com/ +// Submitted by Cloudflare Team +cf-ipfs.com +cloudflare-ipfs.com +trycloudflare.com +pages.dev +r2.dev +workers.dev + +// Clovyr : https://clovyr.io +// Submitted by Patrick Nielsen +wnext.app + +// co.ca : http://registry.co.ca/ +co.ca + +// Co & Co : https://co-co.nl/ +// Submitted by Govert Versluis +*.otap.co + +// i-registry s.r.o. : http://www.i-registry.cz/ +// Submitted by Martin Semrad +co.cz + +// CDN77.com : http://www.cdn77.com +// Submitted by Jan Krpes +c.cdn77.org +cdn77-ssl.net +r.cdn77.net +rsc.cdn77.org +ssl.origin.cdn77-secure.org + +// Cloud DNS Ltd : http://www.cloudns.net +// Submitted by Aleksander Hristov +cloudns.asia +cloudns.biz +cloudns.club +cloudns.cc +cloudns.eu +cloudns.in +cloudns.info +cloudns.org +cloudns.pro +cloudns.pw +cloudns.us + +// CNPY : https://cnpy.gdn +// Submitted by Angelo Gladding +cnpy.gdn + +// Codeberg e. V. : https://codeberg.org +// Submitted by Moritz Marquardt +codeberg.page + +// CoDNS B.V. +co.nl +co.no + +// Combell.com : https://www.combell.com +// Submitted by Thomas Wouters +webhosting.be +hosting-cluster.nl + +// Coordination Center for TLD RU and XN--P1AI : https://cctld.ru/en/domains/domens_ru/reserved/ +// Submitted by George Georgievsky +ac.ru +edu.ru +gov.ru +int.ru +mil.ru +test.ru + +// COSIMO GmbH : http://www.cosimo.de +// Submitted by Rene Marticke +dyn.cosidns.de +dynamisches-dns.de +dnsupdater.de +internet-dns.de +l-o-g-i-n.de +dynamic-dns.info +feste-ip.net +knx-server.net +static-access.net + +// Craynic, s.r.o. : http://www.craynic.com/ +// Submitted by Ales Krajnik +realm.cz + +// Cryptonomic : https://cryptonomic.net/ +// Submitted by Andrew Cady +*.cryptonomic.net + +// Cupcake : https://cupcake.io/ +// Submitted by Jonathan Rudenberg +cupcake.is + +// Curv UG : https://curv-labs.de/ +// Submitted by Marvin Wiesner +curv.dev + +// Customer OCI - Oracle Dyn https://cloud.oracle.com/home https://dyn.com/dns/ +// Submitted by Gregory Drake +// Note: This is intended to also include customer-oci.com due to wildcards implicitly including the current label +*.customer-oci.com +*.oci.customer-oci.com +*.ocp.customer-oci.com +*.ocs.customer-oci.com + +// cyon GmbH : https://www.cyon.ch/ +// Submitted by Dominic Luechinger +cyon.link +cyon.site + +// Danger Science Group: https://dangerscience.com/ +// Submitted by Skylar MacDonald +fnwk.site +folionetwork.site +platform0.app + +// Daplie, Inc : https://daplie.com +// Submitted by AJ ONeal +daplie.me +localhost.daplie.me + +// Datto, Inc. : https://www.datto.com/ +// Submitted by Philipp Heckel +dattolocal.com +dattorelay.com +dattoweb.com +mydatto.com +dattolocal.net +mydatto.net + +// Dansk.net : http://www.dansk.net/ +// Submitted by Anani Voule +biz.dk +co.dk +firm.dk +reg.dk +store.dk + +// dappnode.io : https://dappnode.io/ +// Submitted by Abel Boldu / DAppNode Team +dyndns.dappnode.io + +// dapps.earth : https://dapps.earth/ +// Submitted by Daniil Burdakov +*.dapps.earth +*.bzz.dapps.earth + +// Dark, Inc. : https://darklang.com +// Submitted by Paul Biggar +builtwithdark.com + +// DataDetect, LLC. : https://datadetect.com +// Submitted by Andrew Banchich +demo.datadetect.com +instance.datadetect.com + +// Datawire, Inc : https://www.datawire.io +// Submitted by Richard Li +edgestack.me + +// DDNS5 : https://ddns5.com +// Submitted by Cameron Elliott +ddns5.com + +// Debian : https://www.debian.org/ +// Submitted by Peter Palfrader / Debian Sysadmin Team +debian.net + +// Deno Land Inc : https://deno.com/ +// Submitted by Luca Casonato +deno.dev +deno-staging.dev + +// deSEC : https://desec.io/ +// Submitted by Peter Thomassen +dedyn.io + +// Deta: https://www.deta.sh/ +// Submitted by Aavash Shrestha +deta.app +deta.dev + +// Diher Solutions : https://diher.solutions +// Submitted by Didi Hermawan +*.rss.my.id +*.diher.solutions + +// Discord Inc : https://discord.com +// Submitted by Sahn Lam +discordsays.com +discordsez.com + +// DNS Africa Ltd https://dns.business +// Submitted by Calvin Browne +jozi.biz + +// DNShome : https://www.dnshome.de/ +// Submitted by Norbert Auler +dnshome.de + +// DotArai : https://www.dotarai.com/ +// Submitted by Atsadawat Netcharadsang +online.th +shop.th + +// DrayTek Corp. : https://www.draytek.com/ +// Submitted by Paul Fang +drayddns.com + +// DreamCommerce : https://shoper.pl/ +// Submitted by Konrad Kotarba +shoparena.pl + +// DreamHost : http://www.dreamhost.com/ +// Submitted by Andrew Farmer +dreamhosters.com + +// Drobo : http://www.drobo.com/ +// Submitted by Ricardo Padilha +mydrobo.com + +// Drud Holdings, LLC. : https://www.drud.com/ +// Submitted by Kevin Bridges +drud.io +drud.us + +// DuckDNS : http://www.duckdns.org/ +// Submitted by Richard Harper +duckdns.org + +// Bip : https://bip.sh +// Submitted by Joel Kennedy +bip.sh + +// bitbridge.net : Submitted by Craig Welch, abeliidev@gmail.com +bitbridge.net + +// dy.fi : http://dy.fi/ +// Submitted by Heikki Hannikainen +dy.fi +tunk.org + +// DynDNS.com : http://www.dyndns.com/services/dns/dyndns/ +dyndns-at-home.com +dyndns-at-work.com +dyndns-blog.com +dyndns-free.com +dyndns-home.com +dyndns-ip.com +dyndns-mail.com +dyndns-office.com +dyndns-pics.com +dyndns-remote.com +dyndns-server.com +dyndns-web.com +dyndns-wiki.com +dyndns-work.com +dyndns.biz +dyndns.info +dyndns.org +dyndns.tv +at-band-camp.net +ath.cx +barrel-of-knowledge.info +barrell-of-knowledge.info +better-than.tv +blogdns.com +blogdns.net +blogdns.org +blogsite.org +boldlygoingnowhere.org +broke-it.net +buyshouses.net +cechire.com +dnsalias.com +dnsalias.net +dnsalias.org +dnsdojo.com +dnsdojo.net +dnsdojo.org +does-it.net +doesntexist.com +doesntexist.org +dontexist.com +dontexist.net +dontexist.org +doomdns.com +doomdns.org +dvrdns.org +dyn-o-saur.com +dynalias.com +dynalias.net +dynalias.org +dynathome.net +dyndns.ws +endofinternet.net +endofinternet.org +endoftheinternet.org +est-a-la-maison.com +est-a-la-masion.com +est-le-patron.com +est-mon-blogueur.com +for-better.biz +for-more.biz +for-our.info +for-some.biz +for-the.biz +forgot.her.name +forgot.his.name +from-ak.com +from-al.com +from-ar.com +from-az.net +from-ca.com +from-co.net +from-ct.com +from-dc.com +from-de.com +from-fl.com +from-ga.com +from-hi.com +from-ia.com +from-id.com +from-il.com +from-in.com +from-ks.com +from-ky.com +from-la.net +from-ma.com +from-md.com +from-me.org +from-mi.com +from-mn.com +from-mo.com +from-ms.com +from-mt.com +from-nc.com +from-nd.com +from-ne.com +from-nh.com +from-nj.com +from-nm.com +from-nv.com +from-ny.net +from-oh.com +from-ok.com +from-or.com +from-pa.com +from-pr.com +from-ri.com +from-sc.com +from-sd.com +from-tn.com +from-tx.com +from-ut.com +from-va.com +from-vt.com +from-wa.com +from-wi.com +from-wv.com +from-wy.com +ftpaccess.cc +fuettertdasnetz.de +game-host.org +game-server.cc +getmyip.com +gets-it.net +go.dyndns.org +gotdns.com +gotdns.org +groks-the.info +groks-this.info +ham-radio-op.net +here-for-more.info +hobby-site.com +hobby-site.org +home.dyndns.org +homedns.org +homeftp.net +homeftp.org +homeip.net +homelinux.com +homelinux.net +homelinux.org +homeunix.com +homeunix.net +homeunix.org +iamallama.com +in-the-band.net +is-a-anarchist.com +is-a-blogger.com +is-a-bookkeeper.com +is-a-bruinsfan.org +is-a-bulls-fan.com +is-a-candidate.org +is-a-caterer.com +is-a-celticsfan.org +is-a-chef.com +is-a-chef.net +is-a-chef.org +is-a-conservative.com +is-a-cpa.com +is-a-cubicle-slave.com +is-a-democrat.com +is-a-designer.com +is-a-doctor.com +is-a-financialadvisor.com +is-a-geek.com +is-a-geek.net +is-a-geek.org +is-a-green.com +is-a-guru.com +is-a-hard-worker.com +is-a-hunter.com +is-a-knight.org +is-a-landscaper.com +is-a-lawyer.com +is-a-liberal.com +is-a-libertarian.com +is-a-linux-user.org +is-a-llama.com +is-a-musician.com +is-a-nascarfan.com +is-a-nurse.com +is-a-painter.com +is-a-patsfan.org +is-a-personaltrainer.com +is-a-photographer.com +is-a-player.com +is-a-republican.com +is-a-rockstar.com +is-a-socialist.com +is-a-soxfan.org +is-a-student.com +is-a-teacher.com +is-a-techie.com +is-a-therapist.com +is-an-accountant.com +is-an-actor.com +is-an-actress.com +is-an-anarchist.com +is-an-artist.com +is-an-engineer.com +is-an-entertainer.com +is-by.us +is-certified.com +is-found.org +is-gone.com +is-into-anime.com +is-into-cars.com +is-into-cartoons.com +is-into-games.com +is-leet.com +is-lost.org +is-not-certified.com +is-saved.org +is-slick.com +is-uberleet.com +is-very-bad.org +is-very-evil.org +is-very-good.org +is-very-nice.org +is-very-sweet.org +is-with-theband.com +isa-geek.com +isa-geek.net +isa-geek.org +isa-hockeynut.com +issmarterthanyou.com +isteingeek.de +istmein.de +kicks-ass.net +kicks-ass.org +knowsitall.info +land-4-sale.us +lebtimnetz.de +leitungsen.de +likes-pie.com +likescandy.com +merseine.nu +mine.nu +misconfused.org +mypets.ws +myphotos.cc +neat-url.com +office-on-the.net +on-the-web.tv +podzone.net +podzone.org +readmyblog.org +saves-the-whales.com +scrapper-site.net +scrapping.cc +selfip.biz +selfip.com +selfip.info +selfip.net +selfip.org +sells-for-less.com +sells-for-u.com +sells-it.net +sellsyourhome.org +servebbs.com +servebbs.net +servebbs.org +serveftp.net +serveftp.org +servegame.org +shacknet.nu +simple-url.com +space-to-rent.com +stuff-4-sale.org +stuff-4-sale.us +teaches-yoga.com +thruhere.net +traeumtgerade.de +webhop.biz +webhop.info +webhop.net +webhop.org +worse-than.tv +writesthisblog.com + +// ddnss.de : https://www.ddnss.de/ +// Submitted by Robert Niedziela +ddnss.de +dyn.ddnss.de +dyndns.ddnss.de +dyndns1.de +dyn-ip24.de +home-webserver.de +dyn.home-webserver.de +myhome-server.de +ddnss.org + +// Definima : http://www.definima.com/ +// Submitted by Maxence Bitterli +definima.net +definima.io + +// DigitalOcean App Platform : https://www.digitalocean.com/products/app-platform/ +// Submitted by Braxton Huggins +ondigitalocean.app + +// DigitalOcean Spaces : https://www.digitalocean.com/products/spaces/ +// Submitted by Robin H. Johnson +*.digitaloceanspaces.com + +// dnstrace.pro : https://dnstrace.pro/ +// Submitted by Chris Partridge +bci.dnstrace.pro + +// Dynu.com : https://www.dynu.com/ +// Submitted by Sue Ye +ddnsfree.com +ddnsgeek.com +giize.com +gleeze.com +kozow.com +loseyourip.com +ooguy.com +theworkpc.com +casacam.net +dynu.net +accesscam.org +camdvr.org +freeddns.org +mywire.org +webredirect.org +myddns.rocks +blogsite.xyz + +// dynv6 : https://dynv6.com +// Submitted by Dominik Menke +dynv6.net + +// E4YOU spol. s.r.o. : https://e4you.cz/ +// Submitted by Vladimir Dudr +e4.cz + +// Easypanel : https://easypanel.io +// Submitted by Andrei Canta +easypanel.app +easypanel.host + +// Elementor : Elementor Ltd. +// Submitted by Anton Barkan +elementor.cloud +elementor.cool + +// En root‽ : https://en-root.org +// Submitted by Emmanuel Raviart +en-root.fr + +// Enalean SAS: https://www.enalean.com +// Submitted by Thomas Cottier +mytuleap.com +tuleap-partners.com + +// Encoretivity AB: https://encore.dev +// Submitted by André Eriksson +encr.app +encoreapi.com + +// ECG Robotics, Inc: https://ecgrobotics.org +// Submitted by +onred.one +staging.onred.one + +// encoway GmbH : https://www.encoway.de +// Submitted by Marcel Daus +eu.encoway.cloud + +// EU.org https://eu.org/ +// Submitted by Pierre Beyssac +eu.org +al.eu.org +asso.eu.org +at.eu.org +au.eu.org +be.eu.org +bg.eu.org +ca.eu.org +cd.eu.org +ch.eu.org +cn.eu.org +cy.eu.org +cz.eu.org +de.eu.org +dk.eu.org +edu.eu.org +ee.eu.org +es.eu.org +fi.eu.org +fr.eu.org +gr.eu.org +hr.eu.org +hu.eu.org +ie.eu.org +il.eu.org +in.eu.org +int.eu.org +is.eu.org +it.eu.org +jp.eu.org +kr.eu.org +lt.eu.org +lu.eu.org +lv.eu.org +mc.eu.org +me.eu.org +mk.eu.org +mt.eu.org +my.eu.org +net.eu.org +ng.eu.org +nl.eu.org +no.eu.org +nz.eu.org +paris.eu.org +pl.eu.org +pt.eu.org +q-a.eu.org +ro.eu.org +ru.eu.org +se.eu.org +si.eu.org +sk.eu.org +tr.eu.org +uk.eu.org +us.eu.org + +// Eurobyte : https://eurobyte.ru +// Submitted by Evgeniy Subbotin +eurodir.ru + +// Evennode : http://www.evennode.com/ +// Submitted by Michal Kralik +eu-1.evennode.com +eu-2.evennode.com +eu-3.evennode.com +eu-4.evennode.com +us-1.evennode.com +us-2.evennode.com +us-3.evennode.com +us-4.evennode.com + +// eDirect Corp. : https://hosting.url.com.tw/ +// Submitted by C.S. chang +twmail.cc +twmail.net +twmail.org +mymailer.com.tw +url.tw + +// Fabrica Technologies, Inc. : https://www.fabrica.dev/ +// Submitted by Eric Jiang +onfabrica.com + +// Facebook, Inc. +// Submitted by Peter Ruibal +apps.fbsbx.com + +// FAITID : https://faitid.org/ +// Submitted by Maxim Alzoba +// https://www.flexireg.net/stat_info +ru.net +adygeya.ru +bashkiria.ru +bir.ru +cbg.ru +com.ru +dagestan.ru +grozny.ru +kalmykia.ru +kustanai.ru +marine.ru +mordovia.ru +msk.ru +mytis.ru +nalchik.ru +nov.ru +pyatigorsk.ru +spb.ru +vladikavkaz.ru +vladimir.ru +abkhazia.su +adygeya.su +aktyubinsk.su +arkhangelsk.su +armenia.su +ashgabad.su +azerbaijan.su +balashov.su +bashkiria.su +bryansk.su +bukhara.su +chimkent.su +dagestan.su +east-kazakhstan.su +exnet.su +georgia.su +grozny.su +ivanovo.su +jambyl.su +kalmykia.su +kaluga.su +karacol.su +karaganda.su +karelia.su +khakassia.su +krasnodar.su +kurgan.su +kustanai.su +lenug.su +mangyshlak.su +mordovia.su +msk.su +murmansk.su +nalchik.su +navoi.su +north-kazakhstan.su +nov.su +obninsk.su +penza.su +pokrovsk.su +sochi.su +spb.su +tashkent.su +termez.su +togliatti.su +troitsk.su +tselinograd.su +tula.su +tuva.su +vladikavkaz.su +vladimir.su +vologda.su + +// Fancy Bits, LLC : http://getchannels.com +// Submitted by Aman Gupta +channelsdvr.net +u.channelsdvr.net + +// Fastly Inc. : http://www.fastly.com/ +// Submitted by Fastly Security +edgecompute.app +fastly-edge.com +fastly-terrarium.com +fastlylb.net +map.fastlylb.net +freetls.fastly.net +map.fastly.net +a.prod.fastly.net +global.prod.fastly.net +a.ssl.fastly.net +b.ssl.fastly.net +global.ssl.fastly.net + +// Fastmail : https://www.fastmail.com/ +// Submitted by Marc Bradshaw +*.user.fm + +// FASTVPS EESTI OU : https://fastvps.ru/ +// Submitted by Likhachev Vasiliy +fastvps-server.com +fastvps.host +myfast.host +fastvps.site +myfast.space + +// Fedora : https://fedoraproject.org/ +// submitted by Patrick Uiterwijk +fedorainfracloud.org +fedorapeople.org +cloud.fedoraproject.org +app.os.fedoraproject.org +app.os.stg.fedoraproject.org + +// FearWorks Media Ltd. : https://fearworksmedia.co.uk +// submitted by Keith Fairley +conn.uk +copro.uk +hosp.uk + +// Fermax : https://fermax.com/ +// submitted by Koen Van Isterdael +mydobiss.com + +// FH Muenster : https://www.fh-muenster.de +// Submitted by Robin Naundorf +fh-muenster.io + +// Filegear Inc. : https://www.filegear.com +// Submitted by Jason Zhu +filegear.me +filegear-au.me +filegear-de.me +filegear-gb.me +filegear-ie.me +filegear-jp.me +filegear-sg.me + +// Firebase, Inc. +// Submitted by Chris Raynor +firebaseapp.com + +// Firewebkit : https://www.firewebkit.com +// Submitted by Majid Qureshi +fireweb.app + +// FLAP : https://www.flap.cloud +// Submitted by Louis Chemineau +flap.id + +// FlashDrive : https://flashdrive.io +// Submitted by Eric Chan +onflashdrive.app +fldrv.com + +// fly.io: https://fly.io +// Submitted by Kurt Mackey +fly.dev +edgeapp.net +shw.io + +// Flynn : https://flynn.io +// Submitted by Jonathan Rudenberg +flynnhosting.net + +// Forgerock : https://www.forgerock.com +// Submitted by Roderick Parr +forgeblocks.com +id.forgerock.io + +// Framer : https://www.framer.com +// Submitted by Koen Rouwhorst +framer.app +framercanvas.com +framer.media +framer.photos +framer.website +framer.wiki + +// Frusky MEDIA&PR : https://www.frusky.de +// Submitted by Victor Pupynin +*.frusky.de + +// RavPage : https://www.ravpage.co.il +// Submitted by Roni Horowitz +ravpage.co.il + +// Frederik Braun https://frederik-braun.com +// Submitted by Frederik Braun +0e.vc + +// Freebox : http://www.freebox.fr +// Submitted by Romain Fliedel +freebox-os.com +freeboxos.com +fbx-os.fr +fbxos.fr +freebox-os.fr +freeboxos.fr + +// freedesktop.org : https://www.freedesktop.org +// Submitted by Daniel Stone +freedesktop.org + +// freemyip.com : https://freemyip.com +// Submitted by Cadence +freemyip.com + +// FunkFeuer - Verein zur Förderung freier Netze : https://www.funkfeuer.at +// Submitted by Daniel A. Maierhofer +wien.funkfeuer.at + +// Futureweb GmbH : https://www.futureweb.at +// Submitted by Andreas Schnederle-Wagner +*.futurecms.at +*.ex.futurecms.at +*.in.futurecms.at +futurehosting.at +futuremailing.at +*.ex.ortsinfo.at +*.kunden.ortsinfo.at +*.statics.cloud + +// GDS : https://www.gov.uk/service-manual/technology/managing-domain-names +// Submitted by Stephen Ford +independent-commission.uk +independent-inquest.uk +independent-inquiry.uk +independent-panel.uk +independent-review.uk +public-inquiry.uk +royal-commission.uk +campaign.gov.uk +service.gov.uk + +// CDDO : https://www.gov.uk/guidance/get-an-api-domain-on-govuk +// Submitted by Jamie Tanna +api.gov.uk + +// Gehirn Inc. : https://www.gehirn.co.jp/ +// Submitted by Kohei YOSHIDA +gehirn.ne.jp +usercontent.jp + +// Gentlent, Inc. : https://www.gentlent.com +// Submitted by Tom Klein +gentapps.com +gentlentapis.com +lab.ms +cdn-edges.net + +// Ghost Foundation : https://ghost.org +// Submitted by Matt Hanley +ghost.io + +// GignoSystemJapan: http://gsj.bz +// Submitted by GignoSystemJapan +gsj.bz + +// GitHub, Inc. +// Submitted by Patrick Toomey +githubusercontent.com +githubpreview.dev +github.io + +// GitLab, Inc. +// Submitted by Alex Hanselka +gitlab.io + +// Gitplac.si - https://gitplac.si +// Submitted by Aljaž Starc +gitapp.si +gitpage.si + +// Glitch, Inc : https://glitch.com +// Submitted by Mads Hartmann +glitch.me + +// Global NOG Alliance : https://nogalliance.org/ +// Submitted by Sander Steffann +nog.community + +// Globe Hosting SRL : https://www.globehosting.com/ +// Submitted by Gavin Brown +co.ro +shop.ro + +// GMO Pepabo, Inc. : https://pepabo.com/ +// Submitted by Hosting Div +lolipop.io +angry.jp +babyblue.jp +babymilk.jp +backdrop.jp +bambina.jp +bitter.jp +blush.jp +boo.jp +boy.jp +boyfriend.jp +but.jp +candypop.jp +capoo.jp +catfood.jp +cheap.jp +chicappa.jp +chillout.jp +chips.jp +chowder.jp +chu.jp +ciao.jp +cocotte.jp +coolblog.jp +cranky.jp +cutegirl.jp +daa.jp +deca.jp +deci.jp +digick.jp +egoism.jp +fakefur.jp +fem.jp +flier.jp +floppy.jp +fool.jp +frenchkiss.jp +girlfriend.jp +girly.jp +gloomy.jp +gonna.jp +greater.jp +hacca.jp +heavy.jp +her.jp +hiho.jp +hippy.jp +holy.jp +hungry.jp +icurus.jp +itigo.jp +jellybean.jp +kikirara.jp +kill.jp +kilo.jp +kuron.jp +littlestar.jp +lolipopmc.jp +lolitapunk.jp +lomo.jp +lovepop.jp +lovesick.jp +main.jp +mods.jp +mond.jp +mongolian.jp +moo.jp +namaste.jp +nikita.jp +nobushi.jp +noor.jp +oops.jp +parallel.jp +parasite.jp +pecori.jp +peewee.jp +penne.jp +pepper.jp +perma.jp +pigboat.jp +pinoko.jp +punyu.jp +pupu.jp +pussycat.jp +pya.jp +raindrop.jp +readymade.jp +sadist.jp +schoolbus.jp +secret.jp +staba.jp +stripper.jp +sub.jp +sunnyday.jp +thick.jp +tonkotsu.jp +under.jp +upper.jp +velvet.jp +verse.jp +versus.jp +vivian.jp +watson.jp +weblike.jp +whitesnow.jp +zombie.jp +heteml.net + +// GOV.UK Platform as a Service : https://www.cloud.service.gov.uk/ +// Submitted by Tom Whitwell +cloudapps.digital +london.cloudapps.digital + +// GOV.UK Pay : https://www.payments.service.gov.uk/ +// Submitted by Richard Baker +pymnt.uk + +// UKHomeOffice : https://www.gov.uk/government/organisations/home-office +// Submitted by Jon Shanks +homeoffice.gov.uk + +// GlobeHosting, Inc. +// Submitted by Zoltan Egresi +ro.im + +// GoIP DNS Services : http://www.goip.de +// Submitted by Christian Poulter +goip.de + +// Google, Inc. +// Submitted by Eduardo Vela +run.app +a.run.app +web.app +*.0emm.com +appspot.com +*.r.appspot.com +codespot.com +googleapis.com +googlecode.com +pagespeedmobilizer.com +publishproxy.com +withgoogle.com +withyoutube.com +*.gateway.dev +cloud.goog +translate.goog +*.usercontent.goog +cloudfunctions.net +blogspot.ae +blogspot.al +blogspot.am +blogspot.ba +blogspot.be +blogspot.bg +blogspot.bj +blogspot.ca +blogspot.cf +blogspot.ch +blogspot.cl +blogspot.co.at +blogspot.co.id +blogspot.co.il +blogspot.co.ke +blogspot.co.nz +blogspot.co.uk +blogspot.co.za +blogspot.com +blogspot.com.ar +blogspot.com.au +blogspot.com.br +blogspot.com.by +blogspot.com.co +blogspot.com.cy +blogspot.com.ee +blogspot.com.eg +blogspot.com.es +blogspot.com.mt +blogspot.com.ng +blogspot.com.tr +blogspot.com.uy +blogspot.cv +blogspot.cz +blogspot.de +blogspot.dk +blogspot.fi +blogspot.fr +blogspot.gr +blogspot.hk +blogspot.hr +blogspot.hu +blogspot.ie +blogspot.in +blogspot.is +blogspot.it +blogspot.jp +blogspot.kr +blogspot.li +blogspot.lt +blogspot.lu +blogspot.md +blogspot.mk +blogspot.mr +blogspot.mx +blogspot.my +blogspot.nl +blogspot.no +blogspot.pe +blogspot.pt +blogspot.qa +blogspot.re +blogspot.ro +blogspot.rs +blogspot.ru +blogspot.se +blogspot.sg +blogspot.si +blogspot.sk +blogspot.sn +blogspot.td +blogspot.tw +blogspot.ug +blogspot.vn + +// Goupile : https://goupile.fr +// Submitted by Niels Martignene +goupile.fr + +// Government of the Netherlands: https://www.government.nl +// Submitted by +gov.nl + +// Group 53, LLC : https://www.group53.com +// Submitted by Tyler Todd +awsmppl.com + +// GünstigBestellen : https://günstigbestellen.de +// Submitted by Furkan Akkoc +günstigbestellen.de +günstigliefern.de + +// Hakaran group: http://hakaran.cz +// Submitted by Arseniy Sokolov +fin.ci +free.hr +caa.li +ua.rs +conf.se + +// Handshake : https://handshake.org +// Submitted by Mike Damm +hs.zone +hs.run + +// Hashbang : https://hashbang.sh +hashbang.sh + +// Hasura : https://hasura.io +// Submitted by Shahidh K Muhammed +hasura.app +hasura-app.io + +// Heilbronn University of Applied Sciences - Faculty Informatics (GitLab Pages): https://www.hs-heilbronn.de +// Submitted by Richard Zowalla +pages.it.hs-heilbronn.de + +// Hepforge : https://www.hepforge.org +// Submitted by David Grellscheid +hepforge.org + +// Heroku : https://www.heroku.com/ +// Submitted by Tom Maher +herokuapp.com +herokussl.com + +// Hibernating Rhinos +// Submitted by Oren Eini +ravendb.cloud +ravendb.community +ravendb.me +development.run +ravendb.run + +// home.pl S.A.: https://home.pl +// Submitted by Krzysztof Wolski +homesklep.pl + +// Hong Kong Productivity Council: https://www.hkpc.org/ +// Submitted by SECaaS Team +secaas.hk + +// Hoplix : https://www.hoplix.com +// Submitted by Danilo De Franco +hoplix.shop + + +// HOSTBIP REGISTRY : https://www.hostbip.com/ +// Submitted by Atanunu Igbunuroghene +orx.biz +biz.gl +col.ng +firm.ng +gen.ng +ltd.ng +ngo.ng +edu.scot +sch.so + +// HostFly : https://www.ie.ua +// Submitted by Bohdan Dub +ie.ua + +// HostyHosting (hostyhosting.com) +hostyhosting.io + +// Häkkinen.fi +// Submitted by Eero Häkkinen +häkkinen.fi + +// Ici la Lune : http://www.icilalune.com/ +// Submitted by Simon Morvan +*.moonscale.io +moonscale.net + +// iki.fi +// Submitted by Hannu Aronsson +iki.fi + +// iliad italia: https://www.iliad.it +// Submitted by Marios Makassikis +ibxos.it +iliadboxos.it + +// Impertrix Solutions : +// Submitted by Zhixiang Zhao +impertrixcdn.com +impertrix.com + +// Incsub, LLC: https://incsub.com/ +// Submitted by Aaron Edwards +smushcdn.com +wphostedmail.com +wpmucdn.com +tempurl.host +wpmudev.host + +// Individual Network Berlin e.V. : https://www.in-berlin.de/ +// Submitted by Christian Seitz +dyn-berlin.de +in-berlin.de +in-brb.de +in-butter.de +in-dsl.de +in-dsl.net +in-dsl.org +in-vpn.de +in-vpn.net +in-vpn.org + +// info.at : http://www.info.at/ +biz.at +info.at + +// info.cx : http://info.cx +// Submitted by Jacob Slater +info.cx + +// Interlegis : http://www.interlegis.leg.br +// Submitted by Gabriel Ferreira +ac.leg.br +al.leg.br +am.leg.br +ap.leg.br +ba.leg.br +ce.leg.br +df.leg.br +es.leg.br +go.leg.br +ma.leg.br +mg.leg.br +ms.leg.br +mt.leg.br +pa.leg.br +pb.leg.br +pe.leg.br +pi.leg.br +pr.leg.br +rj.leg.br +rn.leg.br +ro.leg.br +rr.leg.br +rs.leg.br +sc.leg.br +se.leg.br +sp.leg.br +to.leg.br + +// intermetrics GmbH : https://pixolino.com/ +// Submitted by Wolfgang Schwarz +pixolino.com + +// Internet-Pro, LLP: https://netangels.ru/ +// Submitted by Vasiliy Sheredeko +na4u.ru + +// iopsys software solutions AB : https://iopsys.eu/ +// Submitted by Roman Azarenko +iopsys.se + +// IPiFony Systems, Inc. : https://www.ipifony.com/ +// Submitted by Matthew Hardeman +ipifony.net + +// IServ GmbH : https://iserv.de +// Submitted by Mario Hoberg +iservschule.de +mein-iserv.de +schulplattform.de +schulserver.de +test-iserv.de +iserv.dev + +// I-O DATA DEVICE, INC. : http://www.iodata.com/ +// Submitted by Yuji Minagawa +iobb.net + +// Jelastic, Inc. : https://jelastic.com/ +// Submitted by Ihor Kolodyuk +mel.cloudlets.com.au +cloud.interhostsolutions.be +mycloud.by +alp1.ae.flow.ch +appengine.flow.ch +es-1.axarnet.cloud +diadem.cloud +vip.jelastic.cloud +jele.cloud +it1.eur.aruba.jenv-aruba.cloud +it1.jenv-aruba.cloud +keliweb.cloud +cs.keliweb.cloud +oxa.cloud +tn.oxa.cloud +uk.oxa.cloud +primetel.cloud +uk.primetel.cloud +ca.reclaim.cloud +uk.reclaim.cloud +us.reclaim.cloud +ch.trendhosting.cloud +de.trendhosting.cloud +jele.club +amscompute.com +dopaas.com +paas.hosted-by-previder.com +rag-cloud.hosteur.com +rag-cloud-ch.hosteur.com +jcloud.ik-server.com +jcloud-ver-jpc.ik-server.com +demo.jelastic.com +kilatiron.com +paas.massivegrid.com +jed.wafaicloud.com +lon.wafaicloud.com +ryd.wafaicloud.com +j.scaleforce.com.cy +jelastic.dogado.eu +fi.cloudplatform.fi +demo.datacenter.fi +paas.datacenter.fi +jele.host +mircloud.host +paas.beebyte.io +sekd1.beebyteapp.io +jele.io +cloud-fr1.unispace.io +jc.neen.it +cloud.jelastic.open.tim.it +jcloud.kz +upaas.kazteleport.kz +cloudjiffy.net +fra1-de.cloudjiffy.net +west1-us.cloudjiffy.net +jls-sto1.elastx.net +jls-sto2.elastx.net +jls-sto3.elastx.net +faststacks.net +fr-1.paas.massivegrid.net +lon-1.paas.massivegrid.net +lon-2.paas.massivegrid.net +ny-1.paas.massivegrid.net +ny-2.paas.massivegrid.net +sg-1.paas.massivegrid.net +jelastic.saveincloud.net +nordeste-idc.saveincloud.net +j.scaleforce.net +jelastic.tsukaeru.net +sdscloud.pl +unicloud.pl +mircloud.ru +jelastic.regruhosting.ru +enscaled.sg +jele.site +jelastic.team +orangecloud.tn +j.layershift.co.uk +phx.enscaled.us +mircloud.us + +// Jino : https://www.jino.ru +// Submitted by Sergey Ulyashin +myjino.ru +*.hosting.myjino.ru +*.landing.myjino.ru +*.spectrum.myjino.ru +*.vps.myjino.ru + +// Jotelulu S.L. : https://jotelulu.com +// Submitted by Daniel Fariña +jotelulu.cloud + +// Joyent : https://www.joyent.com/ +// Submitted by Brian Bennett +*.triton.zone +*.cns.joyent.com + +// JS.ORG : http://dns.js.org +// Submitted by Stefan Keim +js.org + +// KaasHosting : http://www.kaashosting.nl/ +// Submitted by Wouter Bakker +kaas.gg +khplay.nl + +// Kakao : https://www.kakaocorp.com/ +// Submitted by JaeYoong Lee +ktistory.com + +// Kapsi : https://kapsi.fi +// Submitted by Tomi Juntunen +kapsi.fi + +// Keyweb AG : https://www.keyweb.de +// Submitted by Martin Dannehl +keymachine.de + +// KingHost : https://king.host +// Submitted by Felipe Keller Braz +kinghost.net +uni5.net + +// KnightPoint Systems, LLC : http://www.knightpoint.com/ +// Submitted by Roy Keene +knightpoint.systems + +// KoobinEvent, SL: https://www.koobin.com +// Submitted by Iván Oliva +koobin.events + +// KUROKU LTD : https://kuroku.ltd/ +// Submitted by DisposaBoy +oya.to + +// Katholieke Universiteit Leuven: https://www.kuleuven.be +// Submitted by Abuse KU Leuven +kuleuven.cloud +ezproxy.kuleuven.be + +// .KRD : http://nic.krd/data/krd/Registration%20Policy.pdf +co.krd +edu.krd + +// Krellian Ltd. : https://krellian.com +// Submitted by Ben Francis +krellian.net +webthings.io + +// LCube - Professional hosting e.K. : https://www.lcube-webhosting.de +// Submitted by Lars Laehn +git-repos.de +lcube-server.de +svn-repos.de + +// Leadpages : https://www.leadpages.net +// Submitted by Greg Dallavalle +leadpages.co +lpages.co +lpusercontent.com + +// Lelux.fi : https://lelux.fi/ +// Submitted by Lelux Admin +lelux.site + +// Lifetime Hosting : https://Lifetime.Hosting/ +// Submitted by Mike Fillator +co.business +co.education +co.events +co.financial +co.network +co.place +co.technology + +// Lightmaker Property Manager, Inc. : https://app.lmpm.com/ +// Submitted by Greg Holland +app.lmpm.com + +// linkyard ldt: https://www.linkyard.ch/ +// Submitted by Mario Siegenthaler +linkyard.cloud +linkyard-cloud.ch + +// Linode : https://linode.com +// Submitted by +members.linode.com +*.nodebalancer.linode.com +*.linodeobjects.com +ip.linodeusercontent.com + +// LiquidNet Ltd : http://www.liquidnetlimited.com/ +// Submitted by Victor Velchev +we.bs + +// Localcert : https://localcert.dev +// Submitted by Lann Martin +*.user.localcert.dev + +// localzone.xyz +// Submitted by Kenny Niehage +localzone.xyz + +// Log'in Line : https://www.loginline.com/ +// Submitted by Rémi Mach +loginline.app +loginline.dev +loginline.io +loginline.services +loginline.site + +// Lokalized : https://lokalized.nl +// Submitted by Noah Taheij +servers.run + +// Lõhmus Family, The +// Submitted by Heiki Lõhmus +lohmus.me + +// LubMAN UMCS Sp. z o.o : https://lubman.pl/ +// Submitted by Ireneusz Maliszewski +krasnik.pl +leczna.pl +lubartow.pl +lublin.pl +poniatowa.pl +swidnik.pl + +// Lug.org.uk : https://lug.org.uk +// Submitted by Jon Spriggs +glug.org.uk +lug.org.uk +lugs.org.uk + +// Lukanet Ltd : https://lukanet.com +// Submitted by Anton Avramov +barsy.bg +barsy.co.uk +barsyonline.co.uk +barsycenter.com +barsyonline.com +barsy.club +barsy.de +barsy.eu +barsy.in +barsy.info +barsy.io +barsy.me +barsy.menu +barsy.mobi +barsy.net +barsy.online +barsy.org +barsy.pro +barsy.pub +barsy.ro +barsy.shop +barsy.site +barsy.support +barsy.uk + +// Magento Commerce +// Submitted by Damien Tournoud +*.magentosite.cloud + +// May First - People Link : https://mayfirst.org/ +// Submitted by Jamie McClelland +mayfirst.info +mayfirst.org + +// Mail.Ru Group : https://hb.cldmail.ru +// Submitted by Ilya Zaretskiy +hb.cldmail.ru + +// Mail Transfer Platform : https://www.neupeer.com +// Submitted by Li Hui +cn.vu + +// Maze Play: https://www.mazeplay.com +// Submitted by Adam Humpherys +mazeplay.com + +// mcpe.me : https://mcpe.me +// Submitted by Noa Heyl +mcpe.me + +// McHost : https://mchost.ru +// Submitted by Evgeniy Subbotin +mcdir.me +mcdir.ru +mcpre.ru +vps.mcdir.ru + +// Mediatech : https://mediatech.by +// Submitted by Evgeniy Kozhuhovskiy +mediatech.by +mediatech.dev + +// Medicom Health : https://medicomhealth.com +// Submitted by Michael Olson +hra.health + +// Memset hosting : https://www.memset.com +// Submitted by Tom Whitwell +miniserver.com +memset.net + +// Messerli Informatik AG : https://www.messerli.ch/ +// Submitted by Ruben Schmidmeister +messerli.app + +// MetaCentrum, CESNET z.s.p.o. : https://www.metacentrum.cz/en/ +// Submitted by Zdeněk Šustr +*.cloud.metacentrum.cz +custom.metacentrum.cz + +// MetaCentrum, CESNET z.s.p.o. : https://www.metacentrum.cz/en/ +// Submitted by Radim Janča +flt.cloud.muni.cz +usr.cloud.muni.cz + +// Meteor Development Group : https://www.meteor.com/hosting +// Submitted by Pierre Carrier +meteorapp.com +eu.meteorapp.com + +// Michau Enterprises Limited : http://www.co.pl/ +co.pl + +// Microsoft Corporation : http://microsoft.com +// Submitted by Public Suffix List Admin +*.azurecontainer.io +azurewebsites.net +azure-mobile.net +cloudapp.net +azurestaticapps.net +1.azurestaticapps.net +2.azurestaticapps.net +3.azurestaticapps.net +4.azurestaticapps.net +5.azurestaticapps.net +6.azurestaticapps.net +7.azurestaticapps.net +centralus.azurestaticapps.net +eastasia.azurestaticapps.net +eastus2.azurestaticapps.net +westeurope.azurestaticapps.net +westus2.azurestaticapps.net + +// minion.systems : http://minion.systems +// Submitted by Robert Böttinger +csx.cc + +// Mintere : https://mintere.com/ +// Submitted by Ben Aubin +mintere.site + +// MobileEducation, LLC : https://joinforte.com +// Submitted by Grayson Martin +forte.id + +// Mozilla Corporation : https://mozilla.com +// Submitted by Ben Francis +mozilla-iot.org + +// Mozilla Foundation : https://mozilla.org/ +// Submitted by glob +bmoattachments.org + +// MSK-IX : https://www.msk-ix.ru/ +// Submitted by Khannanov Roman +net.ru +org.ru +pp.ru + +// Mythic Beasts : https://www.mythic-beasts.com +// Submitted by Paul Cammish +hostedpi.com +customer.mythic-beasts.com +caracal.mythic-beasts.com +fentiger.mythic-beasts.com +lynx.mythic-beasts.com +ocelot.mythic-beasts.com +oncilla.mythic-beasts.com +onza.mythic-beasts.com +sphinx.mythic-beasts.com +vs.mythic-beasts.com +x.mythic-beasts.com +yali.mythic-beasts.com +cust.retrosnub.co.uk + +// Nabu Casa : https://www.nabucasa.com +// Submitted by Paulus Schoutsen +ui.nabu.casa + +// Net at Work Gmbh : https://www.netatwork.de +// Submitted by Jan Jaeschke +cloud.nospamproxy.com + +// Netlify : https://www.netlify.com +// Submitted by Jessica Parsons +netlify.app + +// Neustar Inc. +// Submitted by Trung Tran +4u.com + +// ngrok : https://ngrok.com/ +// Submitted by Alan Shreve +ngrok.app +ngrok-free.app +ngrok.dev +ngrok-free.dev +ngrok.io +ap.ngrok.io +au.ngrok.io +eu.ngrok.io +in.ngrok.io +jp.ngrok.io +sa.ngrok.io +us.ngrok.io +ngrok.pizza + +// Nicolaus Copernicus University in Torun - MSK TORMAN (https://www.man.torun.pl) +torun.pl + +// Nimbus Hosting Ltd. : https://www.nimbushosting.co.uk/ +// Submitted by Nicholas Ford +nh-serv.co.uk + +// NFSN, Inc. : https://www.NearlyFreeSpeech.NET/ +// Submitted by Jeff Wheelhouse +nfshost.com + +// Noop : https://noop.app +// Submitted by Nathaniel Schweinberg +*.developer.app +noop.app + +// Northflank Ltd. : https://northflank.com/ +// Submitted by Marco Suter +*.northflank.app +*.build.run +*.code.run +*.database.run +*.migration.run + +// Noticeable : https://noticeable.io +// Submitted by Laurent Pellegrino +noticeable.news + +// Now-DNS : https://now-dns.com +// Submitted by Steve Russell +dnsking.ch +mypi.co +n4t.co +001www.com +ddnslive.com +myiphost.com +forumz.info +16-b.it +32-b.it +64-b.it +soundcast.me +tcp4.me +dnsup.net +hicam.net +now-dns.net +ownip.net +vpndns.net +dynserv.org +now-dns.org +x443.pw +now-dns.top +ntdll.top +freeddns.us +crafting.xyz +zapto.xyz + +// nsupdate.info : https://www.nsupdate.info/ +// Submitted by Thomas Waldmann +nsupdate.info +nerdpol.ovh + +// No-IP.com : https://noip.com/ +// Submitted by Deven Reza +blogsyte.com +brasilia.me +cable-modem.org +ciscofreak.com +collegefan.org +couchpotatofries.org +damnserver.com +ddns.me +ditchyourip.com +dnsfor.me +dnsiskinky.com +dvrcam.info +dynns.com +eating-organic.net +fantasyleague.cc +geekgalaxy.com +golffan.us +health-carereform.com +homesecuritymac.com +homesecuritypc.com +hopto.me +ilovecollege.info +loginto.me +mlbfan.org +mmafan.biz +myactivedirectory.com +mydissent.net +myeffect.net +mymediapc.net +mypsx.net +mysecuritycamera.com +mysecuritycamera.net +mysecuritycamera.org +net-freaks.com +nflfan.org +nhlfan.net +no-ip.ca +no-ip.co.uk +no-ip.net +noip.us +onthewifi.com +pgafan.net +point2this.com +pointto.us +privatizehealthinsurance.net +quicksytes.com +read-books.org +securitytactics.com +serveexchange.com +servehumour.com +servep2p.com +servesarcasm.com +stufftoread.com +ufcfan.org +unusualperson.com +workisboring.com +3utilities.com +bounceme.net +ddns.net +ddnsking.com +gotdns.ch +hopto.org +myftp.biz +myftp.org +myvnc.com +no-ip.biz +no-ip.info +no-ip.org +noip.me +redirectme.net +servebeer.com +serveblog.net +servecounterstrike.com +serveftp.com +servegame.com +servehalflife.com +servehttp.com +serveirc.com +serveminecraft.net +servemp3.com +servepics.com +servequake.com +sytes.net +webhop.me +zapto.org + +// NodeArt : https://nodeart.io +// Submitted by Konstantin Nosov +stage.nodeart.io + +// Nucleos Inc. : https://nucleos.com +// Submitted by Piotr Zduniak +pcloud.host + +// NYC.mn : http://www.information.nyc.mn +// Submitted by Matthew Brown +nyc.mn + +// Observable, Inc. : https://observablehq.com +// Submitted by Mike Bostock +static.observableusercontent.com + +// Octopodal Solutions, LLC. : https://ulterius.io/ +// Submitted by Andrew Sampson +cya.gg + +// OMG.LOL : +// Submitted by Adam Newbold +omg.lol + +// Omnibond Systems, LLC. : https://www.omnibond.com +// Submitted by Cole Estep +cloudycluster.net + +// OmniWe Limited: https://omniwe.com +// Submitted by Vicary Archangel +omniwe.site + +// One.com: https://www.one.com/ +// Submitted by Jacob Bunk Nielsen +123hjemmeside.dk +123hjemmeside.no +123homepage.it +123kotisivu.fi +123minsida.se +123miweb.es +123paginaweb.pt +123sait.ru +123siteweb.fr +123webseite.at +123webseite.de +123website.be +123website.ch +123website.lu +123website.nl +service.one +simplesite.com +simplesite.com.br +simplesite.gr +simplesite.pl + +// One Fold Media : http://www.onefoldmedia.com/ +// Submitted by Eddie Jones +nid.io + +// Open Social : https://www.getopensocial.com/ +// Submitted by Alexander Varwijk +opensocial.site + +// OpenCraft GmbH : http://opencraft.com/ +// Submitted by Sven Marnach +opencraft.hosting + +// OpenResearch GmbH: https://openresearch.com/ +// Submitted by Philipp Schmid +orsites.com + +// Opera Software, A.S.A. +// Submitted by Yngve Pettersen +operaunite.com + +// Orange : https://www.orange.com +// Submitted by Alexandre Linte +tech.orange + +// Oursky Limited : https://authgear.com/, https://skygear.io/ +// Submitted by Authgear Team , Skygear Developer +authgear-staging.com +authgearapps.com +skygearapp.com + +// OutSystems +// Submitted by Duarte Santos +outsystemscloud.com + +// OVHcloud: https://ovhcloud.com +// Submitted by Vincent Cassé +*.webpaas.ovh.net +*.hosting.ovh.net + +// OwnProvider GmbH: http://www.ownprovider.com +// Submitted by Jan Moennich +ownprovider.com +own.pm + +// OwO : https://whats-th.is/ +// Submitted by Dean Sheather +*.owo.codes + +// OX : http://www.ox.rs +// Submitted by Adam Grand +ox.rs + +// oy.lc +// Submitted by Charly Coste +oy.lc + +// Pagefog : https://pagefog.com/ +// Submitted by Derek Myers +pgfog.com + +// Pagefront : https://www.pagefronthq.com/ +// Submitted by Jason Kriss +pagefrontapp.com + +// PageXL : https://pagexl.com +// Submitted by Yann Guichard +pagexl.com + +// Paywhirl, Inc : https://paywhirl.com/ +// Submitted by Daniel Netzer +*.paywhirl.com + +// pcarrier.ca Software Inc: https://pcarrier.ca/ +// Submitted by Pierre Carrier +bar0.net +bar1.net +bar2.net +rdv.to + +// .pl domains (grandfathered) +art.pl +gliwice.pl +krakow.pl +poznan.pl +wroc.pl +zakopane.pl + +// Pantheon Systems, Inc. : https://pantheon.io/ +// Submitted by Gary Dylina +pantheonsite.io +gotpantheon.com + +// Peplink | Pepwave : http://peplink.com/ +// Submitted by Steve Leung +mypep.link + +// Perspecta : https://perspecta.com/ +// Submitted by Kenneth Van Alstyne +perspecta.cloud + +// PE Ulyanov Kirill Sergeevich : https://airy.host +// Submitted by Kirill Ulyanov +lk3.ru + +// Planet-Work : https://www.planet-work.com/ +// Submitted by Frédéric VANNIÈRE +on-web.fr + +// Platform.sh : https://platform.sh +// Submitted by Nikola Kotur +bc.platform.sh +ent.platform.sh +eu.platform.sh +us.platform.sh +*.platformsh.site +*.tst.site + +// Platter: https://platter.dev +// Submitted by Patrick Flor +platter-app.com +platter-app.dev +platterp.us + +// Plesk : https://www.plesk.com/ +// Submitted by Anton Akhtyamov +pdns.page +plesk.page +pleskns.com + +// Port53 : https://port53.io/ +// Submitted by Maximilian Schieder +dyn53.io + +// Porter : https://porter.run/ +// Submitted by Rudraksh MK +onporter.run + +// Positive Codes Technology Company : http://co.bn/faq.html +// Submitted by Zulfais +co.bn + +// Postman, Inc : https://postman.com +// Submitted by Rahul Dhawan +postman-echo.com +pstmn.io +mock.pstmn.io +httpbin.org + +//prequalifyme.today : https://prequalifyme.today +//Submitted by DeepakTiwari deepak@ivylead.io +prequalifyme.today + +// prgmr.com : https://prgmr.com/ +// Submitted by Sarah Newman +xen.prgmr.com + +// priv.at : http://www.nic.priv.at/ +// Submitted by registry +priv.at + +// privacytools.io : https://www.privacytools.io/ +// Submitted by Jonah Aragon +prvcy.page + +// Protocol Labs : https://protocol.ai/ +// Submitted by Michael Burns +*.dweb.link + +// Protonet GmbH : http://protonet.io +// Submitted by Martin Meier +protonet.io + +// Publication Presse Communication SARL : https://ppcom.fr +// Submitted by Yaacov Akiba Slama +chirurgiens-dentistes-en-france.fr +byen.site + +// pubtls.org: https://www.pubtls.org +// Submitted by Kor Nielsen +pubtls.org + +// PythonAnywhere LLP: https://www.pythonanywhere.com +// Submitted by Giles Thomas +pythonanywhere.com +eu.pythonanywhere.com + +// QOTO, Org. +// Submitted by Jeffrey Phillips Freeman +qoto.io + +// Qualifio : https://qualifio.com/ +// Submitted by Xavier De Cock +qualifioapp.com + +// Quality Unit: https://qualityunit.com +// Submitted by Vasyl Tsalko +ladesk.com + +// QuickBackend: https://www.quickbackend.com +// Submitted by Dani Biro +qbuser.com + +// Rad Web Hosting: https://radwebhosting.com +// Submitted by Scott Claeys +cloudsite.builders + +// Redgate Software: https://red-gate.com +// Submitted by Andrew Farries +instances.spawn.cc + +// Redstar Consultants : https://www.redstarconsultants.com/ +// Submitted by Jons Slemmer +instantcloud.cn + +// Russian Academy of Sciences +// Submitted by Tech Support +ras.ru + +// QA2 +// Submitted by Daniel Dent (https://www.danieldent.com/) +qa2.com + +// QCX +// Submitted by Cassandra Beelen +qcx.io +*.sys.qcx.io + +// QNAP System Inc : https://www.qnap.com +// Submitted by Nick Chang +dev-myqnapcloud.com +alpha-myqnapcloud.com +myqnapcloud.com + +// Quip : https://quip.com +// Submitted by Patrick Linehan +*.quipelements.com + +// Qutheory LLC : http://qutheory.io +// Submitted by Jonas Schwartz +vapor.cloud +vaporcloud.io + +// Rackmaze LLC : https://www.rackmaze.com +// Submitted by Kirill Pertsev +rackmaze.com +rackmaze.net + +// Rakuten Games, Inc : https://dev.viberplay.io +// Submitted by Joshua Zhang +g.vbrplsbx.io + +// Rancher Labs, Inc : https://rancher.com +// Submitted by Vincent Fiduccia +*.on-k3s.io +*.on-rancher.cloud +*.on-rio.io + +// Read The Docs, Inc : https://www.readthedocs.org +// Submitted by David Fischer +readthedocs.io + +// Red Hat, Inc. OpenShift : https://openshift.redhat.com/ +// Submitted by Tim Kramer +rhcloud.com + +// Render : https://render.com +// Submitted by Anurag Goel +app.render.com +onrender.com + +// Repl.it : https://repl.it +// Submitted by Lincoln Bergeson +firewalledreplit.co +id.firewalledreplit.co +repl.co +id.repl.co +repl.run + +// Resin.io : https://resin.io +// Submitted by Tim Perry +resindevice.io +devices.resinstaging.io + +// RethinkDB : https://www.rethinkdb.com/ +// Submitted by Chris Kastorff +hzc.io + +// Revitalised Limited : http://www.revitalised.co.uk +// Submitted by Jack Price +wellbeingzone.eu +wellbeingzone.co.uk + +// Rico Developments Limited : https://adimo.co +// Submitted by Colin Brown +adimo.co.uk + +// Riseup Networks : https://riseup.net +// Submitted by Micah Anderson +itcouldbewor.se + +// Rochester Institute of Technology : http://www.rit.edu/ +// Submitted by Jennifer Herting +git-pages.rit.edu + +// Rocky Enterprise Software Foundation : https://resf.org +// Submitted by Neil Hanlon +rocky.page + +// Rusnames Limited: http://rusnames.ru/ +// Submitted by Sergey Zotov +биз.рус +ком.рус +крым.рус +мир.рус +мск.рус +орг.рус +самара.рус +сочи.рус +спб.рус +я.рус + +// SAKURA Internet Inc. : https://www.sakura.ad.jp/ +// Submitted by Internet Service Department +180r.com +dojin.com +sakuratan.com +sakuraweb.com +x0.com +2-d.jp +bona.jp +crap.jp +daynight.jp +eek.jp +flop.jp +halfmoon.jp +jeez.jp +matrix.jp +mimoza.jp +ivory.ne.jp +mail-box.ne.jp +mints.ne.jp +mokuren.ne.jp +opal.ne.jp +sakura.ne.jp +sumomo.ne.jp +topaz.ne.jp +netgamers.jp +nyanta.jp +o0o0.jp +rdy.jp +rgr.jp +rulez.jp +s3.isk01.sakurastorage.jp +s3.isk02.sakurastorage.jp +saloon.jp +sblo.jp +skr.jp +tank.jp +uh-oh.jp +undo.jp +rs.webaccel.jp +user.webaccel.jp +websozai.jp +xii.jp +squares.net +jpn.org +kirara.st +x0.to +from.tv +sakura.tv + +// Salesforce.com, Inc. https://salesforce.com/ +// Submitted by Michael Biven +*.builder.code.com +*.dev-builder.code.com +*.stg-builder.code.com + +// Sandstorm Development Group, Inc. : https://sandcats.io/ +// Submitted by Asheesh Laroia +sandcats.io + +// SBE network solutions GmbH : https://www.sbe.de/ +// Submitted by Norman Meilick +logoip.de +logoip.com + +// Scaleway : https://www.scaleway.com/ +// Submitted by Rémy Léone +fr-par-1.baremetal.scw.cloud +fr-par-2.baremetal.scw.cloud +nl-ams-1.baremetal.scw.cloud +fnc.fr-par.scw.cloud +functions.fnc.fr-par.scw.cloud +k8s.fr-par.scw.cloud +nodes.k8s.fr-par.scw.cloud +s3.fr-par.scw.cloud +s3-website.fr-par.scw.cloud +whm.fr-par.scw.cloud +priv.instances.scw.cloud +pub.instances.scw.cloud +k8s.scw.cloud +k8s.nl-ams.scw.cloud +nodes.k8s.nl-ams.scw.cloud +s3.nl-ams.scw.cloud +s3-website.nl-ams.scw.cloud +whm.nl-ams.scw.cloud +k8s.pl-waw.scw.cloud +nodes.k8s.pl-waw.scw.cloud +s3.pl-waw.scw.cloud +s3-website.pl-waw.scw.cloud +scalebook.scw.cloud +smartlabeling.scw.cloud +dedibox.fr + +// schokokeks.org GbR : https://schokokeks.org/ +// Submitted by Hanno Böck +schokokeks.net + +// Scottish Government: https://www.gov.scot +// Submitted by Martin Ellis +gov.scot +service.gov.scot + +// Scry Security : http://www.scrysec.com +// Submitted by Shante Adam +scrysec.com + +// Securepoint GmbH : https://www.securepoint.de +// Submitted by Erik Anders +firewall-gateway.com +firewall-gateway.de +my-gateway.de +my-router.de +spdns.de +spdns.eu +firewall-gateway.net +my-firewall.org +myfirewall.org +spdns.org + +// Seidat : https://www.seidat.com +// Submitted by Artem Kondratev +seidat.net + +// Sellfy : https://sellfy.com +// Submitted by Yuriy Romadin +sellfy.store + +// Senseering GmbH : https://www.senseering.de +// Submitted by Felix Mönckemeyer +senseering.net + +// Sendmsg: https://www.sendmsg.co.il +// Submitted by Assaf Stern +minisite.ms + +// Service Magnet : https://myservicemagnet.com +// Submitted by Dave Sanders +magnet.page + +// Service Online LLC : http://drs.ua/ +// Submitted by Serhii Bulakh +biz.ua +co.ua +pp.ua + +// Shift Crypto AG : https://shiftcrypto.ch +// Submitted by alex +shiftcrypto.dev +shiftcrypto.io + +// ShiftEdit : https://shiftedit.net/ +// Submitted by Adam Jimenez +shiftedit.io + +// Shopblocks : http://www.shopblocks.com/ +// Submitted by Alex Bowers +myshopblocks.com + +// Shopify : https://www.shopify.com +// Submitted by Alex Richter +myshopify.com + +// Shopit : https://www.shopitcommerce.com/ +// Submitted by Craig McMahon +shopitsite.com + +// shopware AG : https://shopware.com +// Submitted by Jens Küper +shopware.store + +// Siemens Mobility GmbH +// Submitted by Oliver Graebner +mo-siemens.io + +// SinaAppEngine : http://sae.sina.com.cn/ +// Submitted by SinaAppEngine +1kapp.com +appchizi.com +applinzi.com +sinaapp.com +vipsinaapp.com + +// Siteleaf : https://www.siteleaf.com/ +// Submitted by Skylar Challand +siteleaf.net + +// Skyhat : http://www.skyhat.io +// Submitted by Shante Adam +bounty-full.com +alpha.bounty-full.com +beta.bounty-full.com + +// Smallregistry by Promopixel SARL: https://www.smallregistry.net +// Former AFNIC's SLDs +// Submitted by Jérôme Lipowicz +aeroport.fr +avocat.fr +chambagri.fr +chirurgiens-dentistes.fr +experts-comptables.fr +medecin.fr +notaires.fr +pharmacien.fr +port.fr +veterinaire.fr + +// Small Technology Foundation : https://small-tech.org +// Submitted by Aral Balkan +small-web.org + +// Smoove.io : https://www.smoove.io/ +// Submitted by Dan Kozak +vp4.me + +// Snowflake Inc : https://www.snowflake.com/ +// Submitted by Faith Olapade +snowflake.app +privatelink.snowflake.app +streamlit.app +streamlitapp.com + +// Snowplow Analytics : https://snowplowanalytics.com/ +// Submitted by Ian Streeter +try-snowplow.com + +// SourceHut : https://sourcehut.org +// Submitted by Drew DeVault +srht.site + +// Stackhero : https://www.stackhero.io +// Submitted by Adrien Gillon +stackhero-network.com + +// Staclar : https://staclar.com +// Submitted by Q Misell +musician.io +// Submitted by Matthias Merkel +novecore.site + +// staticland : https://static.land +// Submitted by Seth Vincent +static.land +dev.static.land +sites.static.land + +// Storebase : https://www.storebase.io +// Submitted by Tony Schirmer +storebase.store + +// Strategic System Consulting (eApps Hosting): https://www.eapps.com/ +// Submitted by Alex Oancea +vps-host.net +atl.jelastic.vps-host.net +njs.jelastic.vps-host.net +ric.jelastic.vps-host.net + +// Sony Interactive Entertainment LLC : https://sie.com/ +// Submitted by David Coles +playstation-cloud.com + +// SourceLair PC : https://www.sourcelair.com +// Submitted by Antonis Kalipetis +apps.lair.io +*.stolos.io + +// SpaceKit : https://www.spacekit.io/ +// Submitted by Reza Akhavan +spacekit.io + +// SpeedPartner GmbH: https://www.speedpartner.de/ +// Submitted by Stefan Neufeind +customer.speedpartner.de + +// Spreadshop (sprd.net AG) : https://www.spreadshop.com/ +// Submitted by Martin Breest +myspreadshop.at +myspreadshop.com.au +myspreadshop.be +myspreadshop.ca +myspreadshop.ch +myspreadshop.com +myspreadshop.de +myspreadshop.dk +myspreadshop.es +myspreadshop.fi +myspreadshop.fr +myspreadshop.ie +myspreadshop.it +myspreadshop.net +myspreadshop.nl +myspreadshop.no +myspreadshop.pl +myspreadshop.se +myspreadshop.co.uk + +// Standard Library : https://stdlib.com +// Submitted by Jacob Lee +api.stdlib.com + +// Storipress : https://storipress.com +// Submitted by Benno Liu +storipress.app + +// Storj Labs Inc. : https://storj.io/ +// Submitted by Philip Hutchins +storj.farm + +// Studenten Net Twente : http://www.snt.utwente.nl/ +// Submitted by Silke Hofstra +utwente.io + +// Student-Run Computing Facility : https://www.srcf.net/ +// Submitted by Edwin Balani +soc.srcf.net +user.srcf.net + +// Sub 6 Limited: http://www.sub6.com +// Submitted by Dan Miller +temp-dns.com + +// Supabase : https://supabase.io +// Submitted by Inian Parameshwaran +supabase.co +supabase.in +supabase.net +su.paba.se + +// Symfony, SAS : https://symfony.com/ +// Submitted by Fabien Potencier +*.s5y.io +*.sensiosite.cloud + +// Syncloud : https://syncloud.org +// Submitted by Boris Rybalkin +syncloud.it + +// Synology, Inc. : https://www.synology.com/ +// Submitted by Rony Weng +dscloud.biz +direct.quickconnect.cn +dsmynas.com +familyds.com +diskstation.me +dscloud.me +i234.me +myds.me +synology.me +dscloud.mobi +dsmynas.net +familyds.net +dsmynas.org +familyds.org +vpnplus.to +direct.quickconnect.to + +// Tabit Technologies Ltd. : https://tabit.cloud/ +// Submitted by Oren Agiv +tabitorder.co.il +mytabit.co.il +mytabit.com + +// TAIFUN Software AG : http://taifun-software.de +// Submitted by Bjoern Henke +taifun-dns.de + +// Tailscale Inc. : https://www.tailscale.com +// Submitted by David Anderson +beta.tailscale.net +ts.net + +// TASK geographical domains (www.task.gda.pl/uslugi/dns) +gda.pl +gdansk.pl +gdynia.pl +med.pl +sopot.pl + +// team.blue https://team.blue +// Submitted by Cedric Dubois +site.tb-hosting.com + +// Teckids e.V. : https://www.teckids.org +// Submitted by Dominik George +edugit.io +s3.teckids.org + +// Telebit : https://telebit.cloud +// Submitted by AJ ONeal +telebit.app +telebit.io +*.telebit.xyz + +// Thingdust AG : https://thingdust.com/ +// Submitted by Adrian Imboden +*.firenet.ch +*.svc.firenet.ch +reservd.com +thingdustdata.com +cust.dev.thingdust.io +cust.disrec.thingdust.io +cust.prod.thingdust.io +cust.testing.thingdust.io +reservd.dev.thingdust.io +reservd.disrec.thingdust.io +reservd.testing.thingdust.io + +// ticket i/O GmbH : https://ticket.io +// Submitted by Christian Franke +tickets.io + +// Tlon.io : https://tlon.io +// Submitted by Mark Staarink +arvo.network +azimuth.network +tlon.network + +// Tor Project, Inc. : https://torproject.org +// Submitted by Antoine Beaupré +bloxcms.com +townnews-staging.com + +// TrafficPlex GmbH : https://www.trafficplex.de/ +// Submitted by Phillipp Röll +12hp.at +2ix.at +4lima.at +lima-city.at +12hp.ch +2ix.ch +4lima.ch +lima-city.ch +trafficplex.cloud +de.cool +12hp.de +2ix.de +4lima.de +lima-city.de +1337.pictures +clan.rip +lima-city.rocks +webspace.rocks +lima.zone + +// TransIP : https://www.transip.nl +// Submitted by Rory Breuk +*.transurl.be +*.transurl.eu +*.transurl.nl + +// TransIP: https://www.transip.nl +// Submitted by Cedric Dubois +site.transip.me + +// TuxFamily : http://tuxfamily.org +// Submitted by TuxFamily administrators +tuxfamily.org + +// TwoDNS : https://www.twodns.de/ +// Submitted by TwoDNS-Support +dd-dns.de +diskstation.eu +diskstation.org +dray-dns.de +draydns.de +dyn-vpn.de +dynvpn.de +mein-vigor.de +my-vigor.de +my-wan.de +syno-ds.de +synology-diskstation.de +synology-ds.de + +// Typedream : https://typedream.com +// Submitted by Putri Karunia +typedream.app + +// Typeform : https://www.typeform.com +// Submitted by Sergi Ferriz +pro.typeform.com + +// Uberspace : https://uberspace.de +// Submitted by Moritz Werner +uber.space +*.uberspace.de + +// UDR Limited : http://www.udr.hk.com +// Submitted by registry +hk.com +hk.org +ltd.hk +inc.hk + +// UK Intis Telecom LTD : https://it.com +// Submitted by ITComdomains +it.com + +// UNIVERSAL DOMAIN REGISTRY : https://www.udr.org.yt/ +// see also: whois -h whois.udr.org.yt help +// Submitted by Atanunu Igbunuroghene +name.pm +sch.tf +biz.wf +sch.wf +org.yt + +// United Gameserver GmbH : https://united-gameserver.de +// Submitted by Stefan Schwarz +virtualuser.de +virtual-user.de + +// Upli : https://upli.io +// Submitted by Lenny Bakkalian +upli.io + +// urown.net : https://urown.net +// Submitted by Hostmaster +urown.cloud +dnsupdate.info + +// .US +// Submitted by Ed Moore +lib.de.us + +// VeryPositive SIA : http://very.lv +// Submitted by Danko Aleksejevs +2038.io + +// Vercel, Inc : https://vercel.com/ +// Submitted by Connor Davis +vercel.app +vercel.dev +now.sh + +// Viprinet Europe GmbH : http://www.viprinet.com +// Submitted by Simon Kissel +router.management + +// Virtual-Info : https://www.virtual-info.info/ +// Submitted by Adnan RIHAN +v-info.info + +// Voorloper.com: https://voorloper.com +// Submitted by Nathan van Bakel +voorloper.cloud + +// Voxel.sh DNS : https://voxel.sh/dns/ +// Submitted by Mia Rehlinger +neko.am +nyaa.am +be.ax +cat.ax +es.ax +eu.ax +gg.ax +mc.ax +us.ax +xy.ax +nl.ci +xx.gl +app.gp +blog.gt +de.gt +to.gt +be.gy +cc.hn +blog.kg +io.kg +jp.kg +tv.kg +uk.kg +us.kg +de.ls +at.md +de.md +jp.md +to.md +indie.porn +vxl.sh +ch.tc +me.tc +we.tc +nyan.to +at.vg +blog.vu +dev.vu +me.vu + +// V.UA Domain Administrator : https://domain.v.ua/ +// Submitted by Serhii Rostilo +v.ua + +// Vultr Objects : https://www.vultr.com/products/object-storage/ +// Submitted by Niels Maumenee +*.vultrobjects.com + +// Waffle Computer Inc., Ltd. : https://docs.waffleinfo.com +// Submitted by Masayuki Note +wafflecell.com + +// WebHare bv: https://www.webhare.com/ +// Submitted by Arnold Hendriks +*.webhare.dev + +// WebHotelier Technologies Ltd: https://www.webhotelier.net/ +// Submitted by Apostolos Tsakpinis +reserve-online.net +reserve-online.com +bookonline.app +hotelwithflight.com + +// WeDeploy by Liferay, Inc. : https://www.wedeploy.com +// Submitted by Henrique Vicente +wedeploy.io +wedeploy.me +wedeploy.sh + +// Western Digital Technologies, Inc : https://www.wdc.com +// Submitted by Jung Jin +remotewd.com + +// WIARD Enterprises : https://wiardweb.com +// Submitted by Kidd Hustle +pages.wiardweb.com + +// Wikimedia Labs : https://wikitech.wikimedia.org +// Submitted by Arturo Borrero Gonzalez +wmflabs.org +toolforge.org +wmcloud.org + +// WISP : https://wisp.gg +// Submitted by Stepan Fedotov +panel.gg +daemon.panel.gg + +// Wizard Zines : https://wizardzines.com +// Submitted by Julia Evans +messwithdns.com + +// WoltLab GmbH : https://www.woltlab.com +// Submitted by Tim Düsterhus +woltlab-demo.com +myforum.community +community-pro.de +diskussionsbereich.de +community-pro.net +meinforum.net + +// Woods Valldata : https://www.woodsvalldata.co.uk/ +// Submitted by Chris Whittle +affinitylottery.org.uk +raffleentry.org.uk +weeklylottery.org.uk + +// WP Engine : https://wpengine.com/ +// Submitted by Michael Smith +// Submitted by Brandon DuRette +wpenginepowered.com +js.wpenginepowered.com + +// Wix.com, Inc. : https://www.wix.com +// Submitted by Shahar Talmi +wixsite.com +editorx.io +wixstudio.io +wix.run + +// XenonCloud GbR: https://xenoncloud.net +// Submitted by Julian Uphoff +half.host + +// XnBay Technology : http://www.xnbay.com/ +// Submitted by XnBay Developer +xnbay.com +u2.xnbay.com +u2-local.xnbay.com + +// XS4ALL Internet bv : https://www.xs4all.nl/ +// Submitted by Daniel Mostertman +cistron.nl +demon.nl +xs4all.space + +// Yandex.Cloud LLC: https://cloud.yandex.com +// Submitted by Alexander Lodin +yandexcloud.net +storage.yandexcloud.net +website.yandexcloud.net + +// YesCourse Pty Ltd : https://yescourse.com +// Submitted by Atul Bhouraskar +official.academy + +// Yola : https://www.yola.com/ +// Submitted by Stefano Rivera +yolasite.com + +// Yombo : https://yombo.net +// Submitted by Mitch Schwenk +ybo.faith +yombo.me +homelink.one +ybo.party +ybo.review +ybo.science +ybo.trade + +// Yunohost : https://yunohost.org +// Submitted by Valentin Grimaud +ynh.fr +nohost.me +noho.st + +// ZaNiC : http://www.za.net/ +// Submitted by registry +za.net +za.org + +// Zine EOOD : https://zine.bg/ +// Submitted by Martin Angelov +bss.design + +// Zitcom A/S : https://www.zitcom.dk +// Submitted by Emil Stahl +basicserver.io +virtualserver.io +enterprisecloud.nu + +// ===END PRIVATE DOMAINS=== diff --git a/common/src/commonMain/resources/MR/files/tfa.json b/common/src/commonMain/resources/MR/files/tfa.json new file mode 100644 index 00000000..e3e020dc --- /dev/null +++ b/common/src/commonMain/resources/MR/files/tfa.json @@ -0,0 +1,17057 @@ +[ + { + "domain": "101domain.com", + "tfa": [ + "totp" + ], + "documentation": "https://help.101domain.com/account-management/account-security/enabling-disabling-two-factor-verification", + "name": "101domain" + }, + { + "domain": "123formbuilder.com", + "tfa": [ + "totp" + ], + "documentation": "https://www.123formbuilder.com/docs/multi-factor-authentication-login", + "name": "123 Form Builder" + }, + { + "domain": "15five.com", + "tfa": [ + "totp" + ], + "documentation": "https://success.15five.com/hc/en-us/articles/360002698811#h_01G1GXTSKCGMSC3ECKRFSC8NWM", + "name": "15Five" + }, + { + "domain": "1822direkt.de", + "tfa": [ + "sms", + "custom-software" + ], + "custom-software": [ + "1822TAN+" + ], + "documentation": "https://www.1822direkt.de/service/sicherheitsportal/sicheres-online-banking/", + "name": "1822direkt" + }, + { + "domain": "1password.com", + "additional-domains": [ + "1password.ca", + "1password.eu" + ], + "tfa": [ + "totp", + "u2f", + "custom-hardware", + "custom-software" + ], + "custom-software": [ + "Duo" + ], + "custom-hardware": [ + "Yubico OTP", + "Duo D100 Token" + ], + "documentation": "https://support.1password.com/two-factor-authentication/", + "notes": "Teams using Duo with 1Password can't enable other 2FA methods. Non-U2F Hardware tokens and custom software methods are only available through Duo.", + "name": "1Password" + }, + { + "domain": "20i.com", + "tfa": [ + "totp" + ], + "documentation": "https://www.20i.com/support/my-services/two-factor-authentication-my20i", + "name": "20i" + }, + { + "domain": "23andme.com", + "tfa": [ + "totp" + ], + "documentation": "https://customercare.23andme.com/hc/en-us/articles/360034119874", + "name": "23andMe" + }, + { + "domain": "2checkout.com", + "tfa": [ + "totp", + "email" + ], + "documentation": "https://knowledgecenter.2checkout.com/Onboarding/Activate-and-set-up-your-2Checkout-account/Two-factor-authentication", + "name": "2Checkout" + }, + { + "domain": "34SP.com", + "tfa": [ + "totp" + ], + "documentation": "https://www.34sp.com/kb/142/how-to-enable-two-factor-authentication-on-your-account", + "name": "34SP.com" + }, + { + "domain": "3commas.io", + "tfa": [ + "totp" + ], + "documentation": "https://help.3commas.io/en/articles/3424452", + "name": "3Commas" + }, + { + "domain": "4cd.edu", + "tfa": [ + "sms", + "call", + "totp" + ], + "documentation": "https://4cd-doit.atlassian.net/wiki/spaces/ITPU/pages/2320465929", + "name": "Contra Costa Community College District" + }, + { + "domain": "53.com", + "tfa": [ + "sms" + ], + "name": "Fifth Third Bank" + }, + { + "domain": "a2hosting.com", + "tfa": [ + "totp" + ], + "documentation": "https://www.a2hosting.com/kb/a2-hosting-customer-portal/account-management/enabling-two-factor-authentication-for-your-a2-hosting-account", + "name": "A2 Hosting" + }, + { + "domain": "above.com", + "tfa": [ + "totp" + ], + "documentation": "https://www.above.com/manual/my-account-manual-two-step-auth.html", + "name": "Above.com" + }, + { + "domain": "accelo.com", + "tfa": [ + "totp" + ], + "documentation": "https://www.accelo.com/resources/help/faq/user-permissions-and-settings/two-factor-authentication/", + "name": "Accelo" + }, + { + "domain": "accounts.firefox.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.mozilla.org/en-US/kb/secure-firefox-account-two-step-authentication", + "name": "Firefox" + }, + { + "domain": "accounts.nintendo.com", + "tfa": [ + "totp" + ], + "documentation": "https://en-americas-support.nintendo.com/app/answers/detail/a_id/27496", + "notes": "2FA not available for child accounts (users 12 years of age or younger) or supervised accounts (users 13 years of age or older attached to a parent account).", + "name": "Nintendo Account" + }, + { + "domain": "acorns.com", + "tfa": [ + "sms", + "email" + ], + "documentation": "https://www.acorns.com/support/how-do-i-turn-on-two-factor-authentication-on-my-account/", + "notes": "You will need to verify email or phone in order to activate 2FA.", + "name": "Acorns" + }, + { + "domain": "acquia.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://docs.acquia.com/cloud-platform/access/signin/", + "notes": "SMS 2FA is only available for US or Canada phone numbers.", + "name": "Acquia" + }, + { + "domain": "actionnetwork.org", + "tfa": [ + "custom-software", + "sms" + ], + "custom-software": [ + "Authy" + ], + "documentation": "https://help.actionnetwork.org/hc/en-us/articles/217206826", + "name": "Action Network" + }, + { + "domain": "actionstep.com", + "tfa": [ + "totp" + ], + "documentation": "https://actionstep.freshdesk.com/support/solutions/articles/150000019975", + "name": "Actionstep" + }, + { + "domain": "active24.com", + "tfa": [ + "totp" + ], + "documentation": "https://faq.active24.com/cz/183996-", + "name": "ACTIVE 24" + }, + { + "domain": "activecampaign.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://help.activecampaign.com/hc/en-us/articles/360008574740", + "name": "ActiveCampaign" + }, + { + "domain": "activestate.com", + "tfa": [ + "totp" + ], + "documentation": "https://docs.activestate.com/platform/user/prefs/twofactor/", + "name": "ActiveState" + }, + { + "domain": "activision.com", + "additional-domains": [ + "callofduty.com" + ], + "tfa": [ + "totp" + ], + "documentation": "https://support.activision.com/articles/using-two-factor-authentication-with-an-activision-account", + "name": "Activision" + }, + { + "domain": "adafruit.com", + "tfa": [ + "sms", + "totp", + "u2f" + ], + "documentation": "https://learn.adafruit.com/how-to-set-up-2-factor-authentication-on-adafruit", + "name": "Adafruit" + }, + { + "domain": "addiko.hr", + "tfa": [ + "totp", + "custom-software" + ], + "custom-software": [ + "Addiko Mobile App" + ], + "documentation": "https://www.addiko.hr/static/uploads/mtoken-uputa-za-koristenje.pdf", + "name": "Addiko Bank" + }, + { + "domain": "adguard.com", + "tfa": [ + "totp" + ], + "documentation": "https://kb.adguard.com/en/general/2fa", + "name": "AdGuard" + }, + { + "domain": "adobe.com", + "tfa": [ + "sms", + "email", + "custom-software" + ], + "custom-software": [ + "Adobe Account Access" + ], + "documentation": "https://helpx.adobe.com/manage-account/using/secure-your-adobe-account.html", + "name": "Adobe ID" + }, + { + "domain": "adt.com", + "additional-domains": [ + "portal.adtpulse.com" + ], + "tfa": [ + "sms", + "call", + "email" + ], + "documentation": "https://www.adt.com/help/pulse/mfa", + "name": "ADT Pulse" + }, + { + "domain": "adyen.com", + "tfa": [ + "totp" + ], + "documentation": "https://docs.adyen.com/account/multi-factor-authentication", + "name": "Adyen" + }, + { + "domain": "aeza.net", + "tfa": [ + "totp" + ], + "name": "A\u00e9za" + }, + { + "domain": "afip.gob.ar", + "tfa": [ + "custom-software" + ], + "custom-software": [ + "Token AFIP", + "AFIP OTP" + ], + "documentation": "https://www.afip.gob.ar/claveFiscal/informacion-basica/solicitud.asp", + "name": "AFIP" + }, + { + "domain": "afterpay.com", + "tfa": [ + "sms", + "email" + ], + "additional-domains": [ + "afterpay.com.au", + "secure-afterpay.com.au", + "afterpay.co.nz", + "clearpay.co.uk" + ], + "name": "AfterPay" + }, + { + "domain": "agl.com.au", + "tfa": [ + "sms", + "email" + ], + "documentation": "https://www.agl.com.au/help-support/energy/manage-your-account/account-registration-and-logins/log-in-and-create-passwords", + "name": "AGL Energy" + }, + { + "domain": "aha.io", + "tfa": [ + "sms", + "call", + "custom-software", + "u2f" + ], + "custom-software": [ + "Duo" + ], + "notes": "2FA is only available through Duo.", + "documentation": "https://www.aha.io/support/ideas/ideas/settings/account-settings#security-and-single-sign-on", + "name": "Aha!" + }, + { + "domain": "airbank.cz", + "tfa": [ + "sms", + "custom-software" + ], + "custom-software": [ + "My Air" + ], + "documentation": "https://www.airbank.cz/co-vas-nejvic-zajima/jake-bezpecnostni-prvky-u-nas-mame", + "name": "AirBank" + }, + { + "domain": "airbnb.com", + "tfa": [ + "email", + "sms" + ], + "documentation": "https://www.airbnb.com/help/article/501", + "notes": "Airbnb decides when 2FA is required; user cannot enable 2FA for every login.", + "name": "Airbnb" + }, + { + "domain": "airbrake.io", + "tfa": [ + "totp" + ], + "documentation": "https://airbrake.io/docs/features/two-factor-authentication/", + "name": "Airbrake" + }, + { + "domain": "aircanada.com", + "tfa": [ + "email", + "sms" + ], + "documentation": "https://www.aircanada.com/ca/en/aco/home/customer-profile/frequently-asked-questions.html#/tab_tfa-faq-tabs_title_2", + "name": "Air Canada" + }, + { + "domain": "airship.com", + "tfa": [ + "totp" + ], + "documentation": "https://docs.airship.com/tutorials/security/2fa/", + "notes": "2FA is only available upon request for customers on their Essential and Comprehensive plans.", + "name": "Airship" + }, + { + "domain": "airtable.com", + "tfa": [ + "sms", + "call", + "totp" + ], + "documentation": "https://support.airtable.com/docs/enabling-two-factor-authentication", + "notes": "SMS must be enabled first and software 2FA can be bypassed by SMS.", + "name": "Airtable" + }, + { + "domain": "aiven.io", + "tfa": [ + "totp" + ], + "documentation": "https://help.aiven.io/en/articles/947120", + "name": "Aiven" + }, + { + "domain": "ajax.systems", + "tfa": [ + "totp" + ], + "documentation": "https://support.ajax.systems/en/how-secure-ajax-account/", + "name": "Ajax Systems" + }, + { + "domain": "akc.org", + "tfa": [ + "email" + ], + "documentation": "https://www.akc.org/about/site/two-factor-authentication/", + "name": "American Kennel Club" + }, + { + "domain": "alchemer.com", + "tfa": [ + "totp", + "sms" + ], + "documentation": "https://help.alchemer.com/help/multi-factor-authentication#user", + "notes": "SMS 2FA is only available for Enterprise accounts with an SMS 2FA provision.", + "name": "Alchemer" + }, + { + "domain": "algolia.com", + "tfa": [ + "totp" + ], + "documentation": "https://www.algolia.com/doc/security/best-security-practices/#two-factor-authentication", + "name": "Algolia" + }, + { + "domain": "all-inkl.com", + "tfa": [ + "totp" + ], + "documentation": "https://all-inkl.com/wichtig/faq/#2fa", + "name": "ALL-INKL.COM" + }, + { + "domain": "allegro.pl", + "tfa": [ + "sms", + "totp" + ], + "notes": "SMS 2FA cannot be disabled even when TOTP is enabled.", + "documentation": "https://allegro.pl/pomoc/dla-kupujacych/logowanie-i-haslo/dwustopniowe-logowanie-najczesciej-zadawane-pytania-dykqg9nMKSZ", + "name": "Allegro" + }, + { + "domain": "alliantcreditunion.org", + "tfa": [ + "sms" + ], + "documentation": "https://www.alliantcreditunion.org/help/how-does-alliant-two-factor-authentication-work", + "name": "Alliant Credit Union" + }, + { + "domain": "allianz.de", + "tfa": [ + "sms" + ], + "documentation": "https://www.allianz.de/service/meine-allianz/#faq", + "name": "Allianz" + }, + { + "domain": "allmylinks.com", + "tfa": [ + "totp" + ], + "name": "AllMyLinks" + }, + { + "domain": "ally.com", + "tfa": [ + "sms", + "call" + ], + "documentation": "https://www.ally.com/messages/sms/", + "name": "Ally Bank" + }, + { + "domain": "altcointrader.co.za", + "tfa": [ + "totp" + ], + "documentation": "https://altcointrader.zendesk.com/hc/en-gb/articles/360007179680", + "name": "AltCoinTrader" + }, + { + "domain": "alterdice.com", + "tfa": [ + "email", + "totp" + ], + "name": "Alterdice" + }, + { + "domain": "altoira.com", + "tfa": [ + "totp" + ], + "name": "AltoIRA" + }, + { + "domain": "altra.org", + "tfa": [ + "sms", + "email" + ], + "name": "Altra Federal Credit Union" + }, + { + "domain": "amazingmarvin.com", + "tfa": [ + "totp" + ], + "documentation": "https://help.amazingmarvin.com/en/articles/5019430", + "name": "Amazing Marvin" + }, + { + "domain": "amazon.com", + "additional-domains": [ + "amazon.ae", + "amazon.ca", + "amazon.cn", + "amazon.co.jp", + "amazon.co.uk", + "amazon.com.au", + "amazon.com.br", + "amazon.com.mx", + "amazon.com.tr", + "amazon.de", + "amazon.es", + "amazon.fr", + "amazon.in", + "amazon.it", + "amazon.nl", + "amazon.sa", + "amazon.se", + "amazon.sg" + ], + "tfa": [ + "sms", + "call", + "totp" + ], + "documentation": "https://www.amazon.com/gp/help/customer/display.html?nodeId=G3PWZPU52FKN7PW4", + "notes": "SMS or phone call required to enable 2FA. Enabling on Amazon.com activates 2FA on other regional Amazon sites, such as UK and DE.", + "name": "Amazon" + }, + { + "domain": "americafirst.com", + "tfa": [ + "sms", + "email" + ], + "documentation": "https://www.americafirst.com/online_banking.html", + "name": "America First Credit Union" + }, + { + "domain": "americancentury.com", + "tfa": [ + "sms", + "email", + "totp" + ], + "documentation": "https://www.americancentury.com/support-center/privacy-security/security-center/#account-security-log-in-for-required-changes", + "name": "American Century Investments" + }, + { + "domain": "americanexpress.com", + "tfa": [ + "sms", + "email" + ], + "documentation": "https://www.americanexpress.com/uk/benefits/service-security/safety-fraud/authentication.html#tabs-759524196_3", + "name": "American Express Cards" + }, + { + "domain": "ameriprise.com", + "tfa": [ + "sms" + ], + "documentation": "https://www.ameriprise.com/privacy-security-fraud/how-we-protect-information/#02", + "name": "Ameriprise Financial" + }, + { + "domain": "amtrak.com", + "tfa": [ + "sms", + "email" + ], + "name": "Amtrak" + }, + { + "domain": "ancestry.com", + "tfa": [ + "sms", + "email" + ], + "documentation": "https://support.ancestry.com/s/article/MFA", + "notes": "SMS 2FA is currently only available for customers with a U.S. based phone number.", + "name": "Ancestry" + }, + { + "domain": "andrewsfcu.org", + "tfa": [ + "call", + "sms", + "email" + ], + "documentation": "https://www.andrewsfcu.org/Support/Security#Prevention_Tips", + "name": "Andrews Federal Credit Union" + }, + { + "domain": "ankama.com", + "tfa": [ + "email", + "custom-software" + ], + "custom-software": [ + "Ankama Authenticator" + ], + "documentation": "https://support.ankama.com/hc/en-us/articles/360019984217", + "name": "Ankama" + }, + { + "domain": "anthem.com", + "tfa": [ + "sms", + "call", + "email" + ], + "name": "Anthem" + }, + { + "domain": "any.run", + "tfa": [ + "totp" + ], + "name": "ANY.RUN" + }, + { + "domain": "anycoindirect.eu", + "tfa": [ + "totp", + "sms" + ], + "documentation": "https://anycoindirect.eu/en/support/anycoin-direct/security#what-is-two-factor-authentication-2fa", + "name": "Anycoin Direct" + }, + { + "domain": "anydesk.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.anydesk.com/Two-Factor_Authentication", + "name": "AnyDesk" + }, + { + "domain": "aok.de", + "tfa": [ + "sms" + ], + "documentation": "https://meine.aok.de/landingpage/faq", + "name": "AOK" + }, + { + "domain": "apnic.net", + "tfa": [ + "totp" + ], + "documentation": "https://help.apnic.net/s/article/How-do-I-enable-disable-two-factor-authentication", + "name": "APNIC" + }, + { + "domain": "apobank.de", + "tfa": [ + "sms", + "custom-software" + ], + "custom-software": [ + "apoTAN" + ], + "documentation": "https://www.apobank.de/unsere-leistungen/konto-karte/mobile-banking/apotan", + "name": "Deutsche Apotheker- und Ärztebank" + }, + { + "domain": "app.flexera.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://docs.flexera.com/svr/ug/Content/helplibrary/Configure_Two_Factor_Authentication__2FA_.htm", + "name": "Flexera Software Vulnerability Research" + }, + { + "domain": "app.sendloop.com", + "tfa": [ + "custom-software" + ], + "custom-software": [ + "Authy" + ], + "documentation": "https://www.notion.so/aa9e468f24cb4efab3cfef4e7ca4e41d", + "name": "Sendloop" + }, + { + "domain": "app.terraform.io", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://www.terraform.io/docs/enterprise/users-teams-organizations/2fa.html", + "name": "HashiCorp Terraform Enterprise" + }, + { + "domain": "app.vagrantup.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://www.vagrantup.com/docs/vagrant-cloud/users/authentication.html#two-factor-authentication", + "name": "HashiCorp Vagrant Cloud" + }, + { + "domain": "appfolio.com", + "tfa": [ + "totp" + ], + "documentation": "https://www.appfolio.com/help/online-portal", + "name": "AppFolio" + }, + { + "domain": "appleid.apple.com", + "tfa": [ + "sms", + "call", + "u2f", + "custom-software" + ], + "custom-software": [ + "Apple Device Push Notification" + ], + "documentation": "https://support.apple.com/en-us/HT204915", + "notes": "U2F requires a minimum of two security keys to be registered.", + "name": "Apple" + }, + { + "domain": "appsignal.com", + "tfa": [ + "totp" + ], + "documentation": "https://docs.appsignal.com/user-account/two-factor-authentication.html", + "name": "AppSignal" + }, + { + "domain": "appveyor.com", + "tfa": [ + "totp" + ], + "documentation": "https://www.appveyor.com/blog/2018/11/07/2FA-implementation/", + "name": "AppVeyor" + }, + { + "domain": "arduino.cc", + "tfa": [ + "totp" + ], + "documentation": "https://support.arduino.cc/hc/en-us/articles/360018131120", + "name": "Arduino" + }, + { + "domain": "arin.net", + "tfa": [ + "totp" + ], + "documentation": "https://www.arin.net/reference/materials/security/twofactor/", + "name": "ARIN" + }, + { + "domain": "arlo.com", + "tfa": [ + "sms", + "email", + "custom-software" + ], + "custom-software": [ + "Arlo Secure App" + ], + "documentation": "https://kb.arlo.com/000062288", + "notes": "Email 2FA is always available as a backup.", + "name": "Arlo" + }, + { + "domain": "artifacthub.io", + "tfa": [ + "totp" + ], + "name": "Artifact Hub" + }, + { + "domain": "artists.spotify.com", + "tfa": [ + "totp", + "sms" + ], + "documentation": "https://artists.spotify.com/en/help/article/2-step-verification", + "name": "Spotify for Artists" + }, + { + "domain": "artstation.com", + "tfa": [ + "custom-software" + ], + "custom-software": [ + "ArtStation app" + ], + "documentation": "https://help.artstation.com/hc/en-us/articles/360057111771", + "notes": "2FA must be enabled from the app and requires email confirmation to setup.", + "name": "ArtStation" + }, + { + "domain": "arubacloud.com", + "tfa": [ + "custom-software" + ], + "custom-software": [ + "Aruba OTP" + ], + "documentation": "https://kb.cloud.it/computing/uso-e-tecnologie/accesso-al-pannello-di-controllo-con-otp.aspx", + "notes": "Only the control panel supports 2FA (the main client area does not).", + "name": "Aruba Cloud" + }, + { + "domain": "arubainstanton.com", + "tfa": [ + "totp" + ], + "documentation": "https://www.arubainstanton.com/techdocs/en/content/get-started/mobile/security.htm", + "name": "Aruba Instant On" + }, + { + "domain": "asana.com", + "tfa": [ + "totp" + ], + "documentation": "https://asana.com/guide/help/fundamentals/two-factor-authentication", + "name": "Asana" + }, + { + "domain": "ashesofcreation.com", + "tfa": [ + "totp" + ], + "documentation": "https://ashesofcreation.zendesk.com/hc/en-us/articles/360022983234", + "name": "Ashes of Creation" + }, + { + "domain": "aspiration.com", + "tfa": [ + "sms", + "email" + ], + "name": "Aspiration" + }, + { + "domain": "assembla.com", + "tfa": [ + "totp" + ], + "documentation": "https://articles.assembla.com/en/articles/1914077", + "name": "Assembla" + }, + { + "domain": "asu.edu", + "tfa": [ + "custom-software", + "call", + "sms", + "u2f" + ], + "custom-software": [ + "Duo" + ], + "documentation": "https://getprotected.asu.edu/services/identity-and-access-management/duo-two-factor-authentication", + "name": "Arizona State University" + }, + { + "domain": "atera.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.atera.com/hc/en-us/articles/360022522253", + "notes": "2FA must be enabled by an admin before use.", + "name": "Atera" + }, + { + "domain": "aternos.org", + "tfa": [ + "totp" + ], + "name": "Aternos" + }, + { + "domain": "atlas-myrmv.massdot.state.ma.us", + "url": "https://atlas-myrmv.massdot.state.ma.us/myrmv/_/", + "tfa": [ + "sms", + "call", + "totp" + ], + "documentation": "https://www.mass.gov/doc/online-registration-renewal-instructions/download", + "name": "myRMV" + }, + { + "domain": "atriumhealth.org", + "tfa": [ + "email" + ], + "name": "Atrium Health" + }, + { + "domain": "att.com", + "tfa": [ + "sms" + ], + "documentation": "https://www.att.com/support/article/my-account/KM1249672/", + "name": "AT&T" + }, + { + "domain": "atu.edu", + "tfa": [ + "sms", + "custom-software", + "custom-hardware" + ], + "custom-software": [ + "Duo" + ], + "custom-hardware": [ + "Duo D100 Token" + ], + "documentation": "https://support.atu.edu/support/solutions/folders/7000078509", + "name": "Arkansas Tech University" + }, + { + "domain": "au.com", + "additional-domains": [ + "auone.jp" + ], + "tfa": [ + "sms" + ], + "documentation": "https://id.auone.jp/id/pc/content/note/devauth/pc_login/index.html", + "name": "au" + }, + { + "domain": "audiense.com", + "tfa": [ + "totp" + ], + "documentation": "https://help.audiense.com/knowledge/two-factor-authentication", + "name": "Audiense" + }, + { + "domain": "aura.com", + "tfa": [ + "sms", + "email" + ], + "documentation": "https://www.aura.com/help/how-do-i-enable-my-2-factor-authentication", + "name": "Aura" + }, + { + "domain": "auth.opera.com", + "tfa": [ + "totp" + ], + "name": "Opera" + }, + { + "domain": "auth0.com", + "tfa": [ + "custom-software", + "sms", + "totp", + "u2f" + ], + "custom-software": [ + "Auth0 Guardian" + ], + "documentation": "https://auth0.com/docs/secure/multi-factor-authentication/enable-mfa", + "name": "Auth0" + }, + { + "domain": "autocode.com", + "tfa": [ + "sms" + ], + "documentation": "https://autocode.com/autocode/threads/two-factor-authentication-announcements-6bfe5f55/", + "name": "Autocode" + }, + { + "domain": "autodesk.com", + "additional-domains": [ + "tinkercad.com" + ], + "tfa": [ + "sms", + "call", + "email", + "totp" + ], + "documentation": "https://knowledge.autodesk.com/customer-service/account-management/account-profile/account-security/two-step-verification", + "name": "Autodesk" + }, + { + "domain": "automater.pl", + "tfa": [ + "totp" + ], + "documentation": "https://help.automater.com/help/two-factor-authentication-2fa", + "name": "Automater" + }, + { + "domain": "autotask.net", + "tfa": [ + "totp" + ], + "documentation": "https://www.autotask.net/help/Content/2_Getting_Started/Profile/Preferences/GoogleAuthenticator.htm", + "name": "AutoTask" + }, + { + "domain": "availity.com", + "tfa": [ + "sms", + "call", + "totp" + ], + "documentation": "https://apps.availity.com/availity/Demos/QRG_AP_2step_Providers.pdf#%5B%7B%22num%22%3A38%2C%22gen%22%3A0%7D%2C%7B%22name%22%3A%22XYZ%22%7D%2C72%2C724.504%2Cnull%5D", + "notes": "Availity decides when 2FA is required; users cannot enable 2FA for every login.", + "name": "Availity Essentials" + }, + { + "domain": "avanza.se", + "tfa": [ + "totp", + "custom-software" + ], + "custom-software": [ + "BankID" + ], + "documentation": "https://www.avanza.se/kundservice.html/1335/tvafaktorsinloggning/d264248e-bea3-48a0-bf2d-157309734649", + "name": "Avanza" + }, + { + "domain": "avast.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.avast.com/en-gb/article/Account-2-Step-Verification/", + "name": "Avast" + }, + { + "domain": "avg.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.avg.com/SupportArticleView?l=en&urlname=AVG-Account-2-step-verification", + "name": "AVG" + }, + { + "domain": "awardwallet.com", + "tfa": [ + "totp" + ], + "documentation": "https://awardwallet.com/faqs#44", + "name": "AwardWallet" + }, + { + "domain": "awin.com", + "tfa": [ + "totp" + ], + "documentation": "https://success.awin.com/s/article/How-to-activate-and-deactivate-the-Two-Step-Verification", + "name": "Awin" + }, + { + "domain": "aws.amazon.com", + "tfa": [ + "totp", + "custom-hardware", + "u2f" + ], + "custom-hardware": [ + "SafeNet IDProve 110 6-digit OTP Token", + "SafeNet IDProve 700 OTP Card" + ], + "documentation": "https://aws.amazon.com/iam/features/mfa/", + "name": "Amazon Web Services" + }, + { + "domain": "axosbank.com", + "additional-domains": [ + "axos.com" + ], + "tfa": [ + "sms", + "email" + ], + "name": "Axos" + }, + { + "domain": "azure.microsoft.com", + "tfa": [ + "sms", + "custom-software", + "totp", + "call" + ], + "custom-software": [ + "Microsoft Authenticator" + ], + "documentation": "https://azure.microsoft.com/en-us/documentation/articles/multi-factor-authentication/", + "name": "Microsoft Azure" + }, + { + "domain": "back4app.com", + "tfa": [ + "totp" + ], + "documentation": "https://www.back4app.com/docs/security/multi-factor-authentication", + "name": "Back4App" + }, + { + "domain": "backblaze.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://help.backblaze.com/hc/en-us/articles/217666588", + "name": "Backblaze" + }, + { + "domain": "bahn.com", + "additional-domains": [ + "bahn.de" + ], + "tfa": [ + "totp", + "sms" + ], + "documentation": "https://www.bahn.de/hilfe/kundenkonto/kundenkonto-2fa", + "name": "Deutsche Bahn (DB)" + }, + { + "domain": "balena.io", + "tfa": [ + "totp" + ], + "documentation": "https://www.balena.io/docs/learn/manage/account/#two-factor-authentication", + "name": "Balena" + }, + { + "domain": "baloise.ch", + "tfa": [ + "sms" + ], + "name": "Baloise Insurance" + }, + { + "domain": "bamboohr.com", + "tfa": [ + "totp" + ], + "documentation": "https://help.bamboohr.com/hc/en-us/articles/360052655731", + "name": "BambooHR" + }, + { + "domain": "bancoguayaquil.com", + "tfa": [ + "sms", + "custom-software" + ], + "documentation": "https://www.bancoguayaquil.com/documents/files/Manual%20de%20uso%20de%20token%20de%20seguridad.pdf", + "custom-software": [ + "Entrust Identity" + ], + "name": "Banco Guayaquil" + }, + { + "domain": "bancointernacional.com.ec", + "tfa": [ + "sms", + "custom-software" + ], + "custom-software": [ + "Entrust Identity" + ], + "documentation": "https://www.bancointernacional.com.ec/storage/2020/11/BI-NBOE-TutorialPDF-12Softoken.pdf", + "name": "Banco Internacional" + }, + { + "domain": "bank.lendingclub.com", + "additional-domains": [ + "banking.lendingclub.com", + "radiusbank.com" + ], + "tfa": [ + "sms", + "call", + "email" + ], + "documentation": "https://radiusbank.custhelp.com/app/answers/detail/a_id/86", + "name": "LendingClub Bank" + }, + { + "domain": "bank99.at", + "tfa": [ + "custom-software" + ], + "custom-software": [ + "okay99" + ], + "documentation": "https://bank99.at/blog/okay99-app-sicher-im-online-banking", + "name": "bank99" + }, + { + "domain": "bankera.com", + "tfa": [ + "sms" + ], + "documentation": "https://bankera.com/faq/how-to-enable-second-factor-authentication/", + "name": "Bankera" + }, + { + "domain": "banking.barclaysus.com", + "tfa": [ + "sms", + "call", + "email" + ], + "documentation": "https://www.barclaycardus.com/servicing/security-center?howWeProtectYou=#loginProcess", + "name": "Barclays [US]" + }, + { + "domain": "bankofamerica.com", + "additional-domains": [ + "bofa.com", + "mbna.com" + ], + "tfa": [ + "sms", + "email", + "u2f" + ], + "documentation": "https://www.bankofamerica.com/security-center/online-banking/", + "notes": "Mobile apps only use SMS 2FA", + "name": "Bank of America" + }, + { + "domain": "bankofscotland.co.uk", + "tfa": [ + "custom-software", + "call", + "sms" + ], + "custom-software": [ + "Bank of Scotland Mobile App" + ], + "documentation": "https://www.bankofscotland.co.uk/aboutonline/changes-to-internet-banking.html", + "name": "Bank of Scotland" + }, + { + "domain": "barclays.co.uk", + "tfa": [ + "custom-software", + "custom-hardware" + ], + "custom-hardware": [ + "PINsentry card reader" + ], + "custom-software": [ + "Barclays App PINsentry" + ], + "documentation": "https://www.barclays.co.uk/ways-to-bank/online-banking/pinsentry-guide/", + "name": "Barclays [UK]" + }, + { + "domain": "baremetrics.com", + "tfa": [ + "totp" + ], + "name": "Baremetrics" + }, + { + "domain": "barmenia.de", + "additional-domains": [ + "meine-barmenia.de" + ], + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://www.barmenia.de/deu/bde_privat/bde_service/bde_selfservice/bde_meine_barmenia/erstanmeldung.xhtml", + "name": "Barmenia" + }, + { + "domain": "basecamp.com", + "tfa": [ + "totp", + "u2f" + ], + "documentation": "https://3.basecamp-help.com/article/443--", + "name": "Basecamp" + }, + { + "domain": "batch.com", + "tfa": [ + "totp" + ], + "documentation": "https://help.batch.com/en/articles/2721053", + "name": "Batch" + }, + { + "domain": "bbbank.de", + "tfa": [ + "custom-software", + "custom-hardware" + ], + "custom-hardware": [ + "Sm@rt-TAN card reader" + ], + "custom-software": [ + "BBBank SecureGo+" + ], + "documentation": "https://www.bbbank.de/produkte/konten-und-karten/online-banking/tan-verfahren.html", + "name": "BBBank" + }, + { + "domain": "bca.co.id", + "url": "https://www.bca.co.id/en", + "tfa": [ + "custom-hardware" + ], + "custom-hardware": [ + "KeyBCA token" + ], + "documentation": "https://www.bca.co.id/en/Individu/Produk/E-Banking/Klik-BCA", + "name": "Bank Central Asia (BCA)" + }, + { + "domain": "becu.org", + "tfa": [ + "sms" + ], + "name": "Boeing Employee Credit Union" + }, + { + "domain": "belong.com.au", + "tfa": [ + "sms", + "email" + ], + "documentation": "https://www.belong.com.au/support/internet/getting-started/two-step-verification", + "name": "Belong" + }, + { + "domain": "bendigobank.com.au", + "tfa": [ + "sms", + "email", + "custom-software" + ], + "custom-software": [ + "Bendigo Bank app" + ], + "documentation": "https://www.bendigobank.com.au/support/e-banking/multi-factor-authentication", + "notes": "If the app hasn't been setup, only SMS and email tokens will work. If the app has been setup, only the app will work.", + "name": "Bendigo Bank" + }, + { + "domain": "berkeley.edu", + "tfa": [ + "sms", + "u2f", + "custom-hardware", + "custom-software" + ], + "custom-hardware": [ + "Duo D100 Token" + ], + "custom-software": [ + "Duo" + ], + "documentation": "https://calnetweb.berkeley.edu/calnet-2-step", + "name": "University of California, Berkeley" + }, + { + "domain": "bestbuy.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://www.bestbuy.com/site/help-topics/2-step-verification/pcmcat1561056149844.c", + "name": "Best Buy" + }, + { + "domain": "betfair.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://support.betfair.com/app/answers/detail/a_id/126", + "name": "Betfair" + }, + { + "domain": "bethesda.net", + "tfa": [ + "totp", + "sms" + ], + "documentation": "https://help.bethesda.net/app/answers/detail/a_id/48931", + "notes": "SMS requires TOTP to be set up", + "name": "Bethesda" + }, + { + "domain": "bethpagefcu.com", + "tfa": [ + "sms", + "email" + ], + "name": "Bethpage Federal Credit Union" + }, + { + "domain": "betterment.com", + "tfa": [ + "sms", + "call", + "totp" + ], + "documentation": "https://www.betterment.com/resources/understanding-account-security/#3", + "name": "Betterment" + }, + { + "domain": "betvictor.com", + "tfa": [ + "sms", + "totp" + ], + "name": "Betvictor" + }, + { + "domain": "bglcorp.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://support.sf360.com.au/hc/en-au/articles/360020963051", + "notes": "2FA covers Simple Fund 360, CAS 360, BGL API and BGL Account. It doesn't cover BGL Client Centre.", + "name": "BGL Corporate Solutions" + }, + { + "domain": "bhfcu.com", + "tfa": [ + "sms", + "call", + "email" + ], + "documentation": "https://www.bhfcu.com/Landing/Online-Banking-FAQs", + "name": "Black Hills Federal Credit Union" + }, + { + "domain": "bibox.com", + "tfa": [ + "sms", + "totp", + "email" + ], + "documentation": "https://support.bibox.jp/hc/en-us/articles/900006744823", + "name": "Bibox" + }, + { + "domain": "bigcommerce.com", + "additional-domains": [ + "bigcommerce.ca", + "bigcommerce.co.uk", + "bigcommerce.com.au", + "bigcommerce.de", + "bigcommerce.es", + "bigcommerce.fr", + "bigcommerce.it", + "bigcommerce.nl" + ], + "tfa": [ + "custom-software", + "email" + ], + "custom-software": [ + "Authy" + ], + "documentation": "https://support.bigcommerce.com/s/article/Setting-Up-2FA", + "name": "BigCommerce" + }, + { + "domain": "biggerpockets.com", + "tfa": [ + "sms" + ], + "documentation": "https://www.biggerpockets.com/forums/25/topics/232201-new-biggerpockets-security-improvements", + "name": "BiggerPockets" + }, + { + "domain": "bigw.com.au", + "tfa": [ + "sms", + "call", + "email" + ], + "name": "Big W" + }, + { + "domain": "bill.com", + "url": "https://www.bill.com", + "tfa": [ + "sms", + "call", + "totp" + ], + "documentation": "https://help.bill.com/hc/en-us/articles/360000023843", + "notes": "2FA via phone call is available for US and CA only.", + "name": "Bill" + }, + { + "domain": "binance.com", + "tfa": [ + "totp", + "u2f", + "sms" + ], + "documentation": "https://www.binance.com/en/support/faq/c-1?navId=1#11", + "name": "Binance" + }, + { + "domain": "bitbar.com", + "tfa": [ + "totp" + ], + "documentation": "https://bitbar.com/blog/multi-factor-authentication/", + "name": "BitBar" + }, + { + "domain": "bitbns.com", + "tfa": [ + "totp", + "sms" + ], + "documentation": "https://bitbns.freshdesk.com/support/solutions/articles/35000047047", + "notes": "SMS 2FA must be enabled before TOTP 2FA.", + "name": "Bitbns" + }, + { + "domain": "bitbucket.org", + "tfa": [ + "totp", + "u2f" + ], + "documentation": "https://support.atlassian.com/bitbucket-cloud/docs/enable-two-step-verification/", + "notes": "An SSH key must be associated with your account to enable 2FA.", + "name": "Bitbucket" + }, + { + "domain": "bitbuy.ca", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://support.bitbuy.ca/hc/en-us/articles/360059151172", + "notes": "SMS 2FA is only available for country code +1 (North America)", + "name": "Bitbuy" + }, + { + "domain": "bitcoin.de", + "tfa": [ + "totp", + "custom-hardware" + ], + "custom-hardware": [ + "Yubico OTP" + ], + "documentation": "https://www.bitcoin.de/de/faq/was-ist-die-2-step-verification-2-faktor-authentifizierung/46.html", + "name": "Bitcoin.de" + }, + { + "domain": "bitdefender.com", + "tfa": [ + "email", + "totp" + ], + "documentation": "https://www.bitdefender.com/consumer/support/answer/1581/", + "name": "Bitdefender" + }, + { + "domain": "bitfinex.com", + "tfa": [ + "totp", + "u2f" + ], + "documentation": "https://support.bitfinex.com/hc/en-us/sections/900000097443", + "name": "Bitfinex" + }, + { + "domain": "bitflyer.com", + "tfa": [ + "sms", + "email", + "totp" + ], + "documentation": "https://bitflyer.com/en-jp/faq/2-10", + "name": "Bitflyer" + }, + { + "domain": "bitforex.com", + "tfa": [ + "totp", + "sms" + ], + "documentation": "https://support.bitforex.com/hc/en-us/articles/360006825152", + "name": "BitForex" + }, + { + "domain": "bitgo.com", + "tfa": [ + "totp", + "custom-hardware", + "u2f" + ], + "custom-hardware": [ + "Yubico OTP" + ], + "name": "BitGo" + }, + { + "domain": "bithumb.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://en.bithumb.com/customer_support/info_guide?seq=510", + "name": "Bithumb" + }, + { + "domain": "bitly.com", + "tfa": [ + "sms" + ], + "documentation": "https://support.bitly.com/hc/en-us/articles/230650187", + "name": "Bitly" + }, + { + "domain": "bitmex.com", + "tfa": [ + "totp", + "custom-hardware" + ], + "custom-hardware": [ + "Yubico OTP" + ], + "documentation": "https://blog.bitmex.com/use-two-factor-authentication-and-dont-reuse-passwords/", + "notes": "At most one 2FA method can be enabled at any time.", + "name": "BitMEX" + }, + { + "domain": "bitpanda.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.bitpanda.com/hc/en-us/articles/360002015220", + "name": "Bitpanda" + }, + { + "domain": "bitpay.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.bitpay.com/hc/en-us/articles/360006612692", + "name": "Bitpay" + }, + { + "domain": "bitrise.io", + "tfa": [ + "totp" + ], + "documentation": "https://devcenter.bitrise.io/getting-started/account-security/", + "name": "Bitrise" + }, + { + "domain": "bitrix24.com", + "additional-domains": [ + "bitrix24.ru", + "bitrix24.eu", + "bitrix24.net" + ], + "tfa": [ + "totp" + ], + "documentation": "https://helpdesk.bitrix24.com/open/9800171/", + "name": "Bitrix24" + }, + { + "domain": "bitsight.com", + "tfa": [ + "totp" + ], + "name": "BitSight" + }, + { + "domain": "bitski.com", + "tfa": [ + "email", + "sms" + ], + "name": "Bitski" + }, + { + "domain": "bitso.com", + "tfa": [ + "totp" + ], + "documentation": "https://help.bitso.com/en/support/solutions/articles/1000166781", + "name": "Bitso" + }, + { + "domain": "bitstamp.net", + "tfa": [ + "totp" + ], + "documentation": "https://www.bitstamp.net/faq/what-is-two-factor-authentication", + "name": "Bitstamp" + }, + { + "domain": "bittrex.com", + "tfa": [ + "totp" + ], + "documentation": "https://bittrex.zendesk.com/hc/en-us/articles/5873174805531", + "name": "Bittrex" + }, + { + "domain": "bitvavo.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.bitvavo.com/hc/en-us/articles/4405125367057", + "name": "bitvavo" + }, + { + "domain": "bitwarden.com", + "tfa": [ + "sms", + "call", + "email", + "totp", + "u2f", + "custom-hardware", + "custom-software" + ], + "custom-software": [ + "Duo" + ], + "custom-hardware": [ + "Yubico OTP" + ], + "documentation": "https://help.bitwarden.com/article/setup-two-step-login/", + "notes": "2FA methods vary depending on price plan. SMS & Call requires Duo integration", + "name": "Bitwarden" + }, + { + "domain": "bkex.com", + "tfa": [ + "totp" + ], + "documentation": "https://bkex.zendesk.com/hc/en-us/articles/360021899473", + "name": "BKEX" + }, + { + "domain": "blacknight.com", + "tfa": [ + "totp" + ], + "documentation": "https://help.blacknight.com/hc/en-us/articles/360001358517", + "name": "Blacknight" + }, + { + "domain": "bladeandsoul.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.bladeandsoul.com/hc/en-us/articles/207578553", + "name": "Blade & Soul" + }, + { + "domain": "blizzard.com", + "additional-domains": [ + "battle.net" + ], + "tfa": [ + "sms", + "custom-software" + ], + "custom-software": [ + "Battle.net app" + ], + "documentation": "https://battle.net/support/article/24520", + "name": "Blizzard/Battle.net" + }, + { + "domain": "blockchain.com", + "tfa": [ + "sms", + "totp", + "custom-hardware" + ], + "custom-hardware": [ + "Yubico OTP" + ], + "documentation": "https://support.blockchain.com/hc/en-us/articles/4417080375316", + "name": "Blockchain.com" + }, + { + "domain": "blockfi.com", + "tfa": [ + "totp" + ], + "name": "BlockFi" + }, + { + "domain": "bluehost.com", + "tfa": [ + "email", + "totp" + ], + "documentation": "https://my.bluehost.com/cgi/help/two-factor-authentication", + "name": "Bluehost" + }, + { + "domain": "bluesnap.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.bluesnap.com/docs/two-factor_authentication", + "notes": "2FA must be enabled by an admin before use.", + "name": "BlueSnap" + }, + { + "domain": "bmedonline.it", + "tfa": [ + "sms", + "custom-software" + ], + "custom-software": [ + "Mediolanum app" + ], + "documentation": "https://www.bancamediolanum.it/static-assets/documents/Codice_BMed_regole_e_funzionamento.pdf", + "name": "Banca Mediolanum" + }, + { + "domain": "bmo.com", + "tfa": [ + "sms", + "email", + "call" + ], + "documentation": "https://www.bmoinvestorline.com/General_Info/MFA_preEnroll_SD_EN.html", + "name": "BMO Bank of Montreal" + }, + { + "domain": "bmoharris.com", + "tfa": [ + "sms", + "email", + "call" + ], + "name": "BMO Harris Bank" + }, + { + "domain": "bmoinvestorline.com", + "tfa": [ + "sms", + "email", + "call" + ], + "documentation": "https://www.bmoinvestorline.com/General_Info/MFA_preEnroll_SD_EN.html", + "name": "BMO InvestorLine" + }, + { + "domain": "bnktothefuture.com", + "tfa": [ + "totp" + ], + "documentation": "https://bnktothefuture.freshdesk.com/support/solutions/articles/9000068450", + "name": "BnkToTheFuture" + }, + { + "domain": "bochk.com", + "tfa": [ + "custom-hardware" + ], + "custom-hardware": [ + "BOCHK Mobile Banking app" + ], + "documentation": "https://www.bochk.com/en/security/2factorauthentication.html", + "name": "Bank of China [HK]" + }, + { + "domain": "bohemia.net", + "tfa": [ + "totp" + ], + "name": "Bohemia Interactive" + }, + { + "domain": "bokio.se", + "tfa": [ + "totp", + "custom-software" + ], + "custom-software": [ + "BankID" + ], + "notes": "BankID only available for users using banking features", + "documentation": "https://www.bokio.se/hjalp/bokio-medlemskap/ditt-bokiokonto/tvafaktor-autentisering-med-bokio/", + "name": "Bokio [SE]" + }, + { + "domain": "bonus.ly", + "tfa": [ + "totp" + ], + "documentation": "https://help.bonus.ly/en/articles/2817280", + "name": "Bonusly" + }, + { + "domain": "booking.com", + "tfa": [ + "sms", + "email" + ], + "notes": "Setup requires SMS verification. Email is available via 'other options' at login.", + "name": "Booking.com" + }, + { + "domain": "boots.com", + "tfa": [ + "call", + "sms" + ], + "name": "Boots" + }, + { + "domain": "boursedirect.fr", + "url": "https://www.boursedirect.fr", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://www.boursedirect.fr/fr/support/faq/connexion", + "name": "Bourse Direct" + }, + { + "domain": "boursorama.com", + "additional-domains": [ + "boursorama-banque.com" + ], + "tfa": [ + "sms", + "call" + ], + "documentation": "https://www.boursorama.com/aide-en-ligne/mon-espace-client/la-directive-europeenne-relative-aux-services-de-paiement-dsp2/question/64587956", + "name": "Boursorama" + }, + { + "domain": "bowens.com.au", + "tfa": [ + "sms", + "email" + ], + "name": "Bowens" + }, + { + "domain": "box.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://support.box.com/hc/en-us/articles/360043697154", + "name": "Box" + }, + { + "domain": "braintreepayments.com", + "tfa": [ + "sms", + "totp", + "u2f" + ], + "documentation": "https://articles.braintreepayments.com/reference/security/two-factor-authentication", + "name": "Braintree" + }, + { + "domain": "brandwatch.com", + "additional-domains": [ + "falcon.io", + "paladinsoftware.com" + ], + "tfa": [ + "totp" + ], + "documentation": "https://social-media-management-help.brandwatch.com/hc/en-us/articles/4499676228765", + "name": "Brandwatch" + }, + { + "domain": "braze.com", + "tfa": [ + "custom-software", + "sms" + ], + "custom-software": [ + "Authy" + ], + "documentation": "https://www.braze.com/docs/user_guide/administrative/app_settings/company_settings/security_settings/", + "name": "Braze" + }, + { + "domain": "brex.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://www.brex.com/support/how-do-i-use-two-factor-authentication-to-log-in", + "name": "Brex" + }, + { + "domain": "bt.com", + "tfa": [ + "email", + "sms" + ], + "documentation": "https://www.bt.com/help/security/two-step-authentication", + "notes": "2FA can only be enabled via the website.", + "name": "BT" + }, + { + "domain": "btcbox.co.jp", + "tfa": [ + "totp" + ], + "documentation": "https://support.btcbox.co.jp/hc/en-us/articles/360001886053", + "name": "BTC BOX" + }, + { + "domain": "btcmarkets.net", + "tfa": [ + "totp" + ], + "documentation": "https://www.btcmarkets.net/frequently-asked-questions", + "notes": "A mobile phone number is required to reset two-factor authentication.", + "name": "BTC Markets" + }, + { + "domain": "btcpop.co", + "tfa": [ + "totp" + ], + "documentation": "https://blog.btcpop.co/2017/04/27/signing-security-btcpop-co-account/", + "name": "BTCPOP" + }, + { + "domain": "btcturk.com", + "tfa": [ + "sms", + "email", + "totp" + ], + "documentation": "https://www.btcturk.com/kolay/yardim/guvenlik", + "name": "BtcTurk" + }, + { + "domain": "bu.edu", + "tfa": [ + "sms", + "call", + "u2f", + "custom-software" + ], + "custom-software": [ + "Duo" + ], + "documentation": "https://www.bu.edu/tech/support/duo/", + "name": "Boston University" + }, + { + "domain": "bubble.io", + "tfa": [ + "totp" + ], + "documentation": "https://bubble.io/support-article/what-is-2fa", + "name": "Bubble" + }, + { + "domain": "buda.com", + "tfa": [ + "totp" + ], + "documentation": "https://soporte.buda.com/es/articles/2379080", + "name": "Buda" + }, + { + "domain": "buddy.works", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://buddy.works/docs/account/security#two-factor-authentication-2fa", + "notes": "2FA is only available to users on paid plans.", + "name": "Buddy" + }, + { + "domain": "buffer.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://support.buffer.com/hc/en-us/articles/360038349434", + "name": "Buffer" + }, + { + "domain": "bugcrowd.com", + "tfa": [ + "totp" + ], + "documentation": "https://docs.bugcrowd.com/customers/role-and-account-management/security/using-two-factor-authentication/", + "name": "bugcrowd" + }, + { + "domain": "bugsnag.com", + "tfa": [ + "totp" + ], + "documentation": "https://docs.bugsnag.com/product/account-and-security/#security", + "name": "Bugsnag" + }, + { + "domain": "bugzilla.mozilla.org", + "tfa": [ + "custom-software", + "totp" + ], + "custom-software": [ + "Duo" + ], + "documentation": "https://wiki.mozilla.org/BMO/UserGuide/Two-Factor_Authentication", + "notes": "Proprietary 2FA methods are only available for Mozilla employees.", + "name": "Bugzilla@Mozilla" + }, + { + "domain": "buhl.de", + "tfa": [ + "totp" + ], + "documentation": "https://www.buhl.de/shop/faqs?category=325", + "name": "Buhl" + }, + { + "domain": "buildium.com", + "additional-domains": [ + "managebuilding.com" + ], + "tfa": [ + "sms", + "totp", + "call" + ], + "documentation": "https://www.buildium.com/two-factor-authentication/", + "name": "Buildium" + }, + { + "domain": "buildkite.com", + "tfa": [ + "totp" + ], + "documentation": "https://buildkite.com/docs/tutorials/2fa", + "name": "Buildkite" + }, + { + "domain": "builtwith.com", + "tfa": [ + "totp" + ], + "documentation": "https://kb.builtwith.com/account-management/how-to-enable-2fa-on-builtwith/", + "name": "BuiltWith" + }, + { + "domain": "bullionstar.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://www.bullionstar.com/help/2-factor-authentication", + "name": "BullionStar" + }, + { + "domain": "bullionvault.com", + "tfa": [ + "totp" + ], + "documentation": "https://www.bullionvault.com/help/two_factor_auth.html", + "name": "BullionVault" + }, + { + "domain": "bunny.net", + "tfa": [ + "totp" + ], + "name": "bunny.net" + }, + { + "domain": "bupa.com.au", + "tfa": [ + "email" + ], + "documentation": "https://www.bupa.com.au/help/privacy-and-security-trust-centre/mybupa-and-digital-security", + "name": "Bupa" + }, + { + "domain": "business.trustpilot.com", + "tfa": [ + "sms" + ], + "documentation": "https://support.trustpilot.com/hc/en-us/articles/360017418299", + "name": "Trustpilot Business" + }, + { + "domain": "bw-bank.de", + "tfa": [ + "custom-software", + "custom-hardware" + ], + "custom-hardware": [ + "chipTAN-QR card reader" + ], + "custom-software": [ + "BW-pushTAN" + ], + "documentation": "https://meine.bw-bank.de/articles/am-14-september-tritt-psd2-in-kraft-was-bedeutet-das-fuer-sie", + "name": "Baden-W\u00fcrttembergische Bank" + }, + { + "domain": "bybit.com", + "tfa": [ + "sms", + "email", + "totp" + ], + "documentation": "https://help.bybit.com/hc/en-us/articles/360039748653", + "name": "Bybit" + }, + { + "domain": "byu.edu", + "tfa": [ + "call", + "sms", + "totp", + "u2f", + "custom-hardware", + "custom-software" + ], + "custom-hardware": [ + "Duo D100 Token", + "Yubico OTP" + ], + "custom-software": [ + "Duo" + ], + "documentation": "https://duo.byu.edu/", + "name": "Brigham Young University" + }, + { + "domain": "caffeine.tv", + "tfa": [ + "email" + ], + "documentation": "https://caffeine.custhelp.com/app/answers/detail/a_id/32/", + "name": "Caffeine" + }, + { + "domain": "cal.com", + "tfa": [ + "totp" + ], + "name": "Cal.com" + }, + { + "domain": "callcentric.com", + "url": "https://www.callcentric.com/", + "tfa": [ + "email" + ], + "documentation": "https://www.callcentric.com/features/two_point_authentication", + "name": "CallCentric" + }, + { + "domain": "calpoly.edu", + "tfa": [ + "sms", + "call", + "u2f", + "custom-hardware", + "custom-software" + ], + "custom-hardware": [ + "Duo D100 Token" + ], + "custom-software": [ + "Duo" + ], + "documentation": "https://calpoly.atlassian.net/wiki/spaces/CPKB/pages/3539066", + "name": "Cal Poly" + }, + { + "domain": "caltech.edu", + "tfa": [ + "custom-software", + "custom-hardware" + ], + "custom-software": [ + "Duo" + ], + "custom-hardware": [ + "Yubico OTP" + ], + "documentation": "https://www.imss.caltech.edu/services/security/mfa/self-enrollment", + "notes": "SMS-capable phone required for initial setup.", + "name": "California Institute of Technology (CalTech)" + }, + { + "domain": "cam.ac.uk", + "tfa": [ + "totp", + "sms", + "custom-software", + "custom-hardware", + "call" + ], + "custom-software": [ + "Microsoft Authenticator" + ], + "custom-hardware": [ + "SafeID token" + ], + "documentation": "https://help.uis.cam.ac.uk/service/accounts-passwords/set-multi-factor-authentication-your-university-microsoft-account", + "name": "University of Cambridge" + }, + { + "domain": "campaignmonitor.com", + "tfa": [ + "totp" + ], + "documentation": "https://help.campaignmonitor.com/two-factor-authentication", + "name": "Campaign Monitor" + }, + { + "domain": "canada.ca", + "url": "https://www.canada.ca/en/revenue-agency.html", + "tfa": [ + "sms", + "call" + ], + "documentation": "https://www.canada.ca/en/revenue-agency/services/e-services/cra-login-services/multi-factor-authentication-access-cra-login-services.html", + "name": "Canada Revenue Agency" + }, + { + "domain": "canary.is", + "tfa": [ + "sms" + ], + "documentation": "https://help.canary.is/hc/en-us/articles/360043987254", + "name": "Canary" + }, + { + "domain": "canva.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://www.canva.com/help/login-verification/", + "notes": "SMS 2FA only available to users from Australia, Philippines, UK, and USA.", + "name": "Canva" + }, + { + "domain": "capcom.com", + "additional-domains": [ + "capcom.co.jp", + "capcomusa.com", + "capcom-europe.com", + "capcom.com.tw" + ], + "url": "https://cid.capcom.com/", + "tfa": [ + "totp" + ], + "documentation": "https://cid.capcom.com/en/support/", + "name": "Capcom ID" + }, + { + "domain": "capitalgroup.com", + "tfa": [ + "sms", + "email" + ], + "documentation": "https://www.capitalgroup.com/individual/security/how-we-protect-your-account.html", + "name": "Capital Group / American Funds" + }, + { + "domain": "capitalone.com", + "tfa": [ + "sms", + "email", + "custom-software" + ], + "custom-software": [ + "Capital One App" + ], + "documentation": "https://www.capitalone.com/digital/mobile-app-verification/", + "name": "Capital One" + }, + { + "domain": "capsulecrm.com", + "tfa": [ + "totp" + ], + "documentation": "https://capsulecrm.com/support/user-preferences/#enabling-two-factor-authentication", + "name": "Capsule" + }, + { + "domain": "carbonite.com", + "tfa": [ + "sms", + "call" + ], + "documentation": "https://support.carbonite.com/articles/Personal-Pro-Mac-Windows-Introduction-to-2-Step-Verification", + "name": "Carbonite" + }, + { + "domain": "cardmarket.com", + "tfa": [ + "totp" + ], + "name": "Cardmarket" + }, + { + "domain": "caribbean.rbcroyalbank.com", + "tfa": [ + "custom-software", + "custom-hardware" + ], + "custom-software": [ + "Entrust Identity Guard" + ], + "notes": "Hardware 2FA methods are only available for business customers.", + "documentation": "https://www.rbcroyalbank.com/caribbean/digital-hub/security-two-factor.html", + "name": "RBC Caribbean" + }, + { + "domain": "carleton.ca", + "tfa": [ + "custom-software", + "custom-hardware", + "sms", + "call" + ], + "custom-software": [ + "Duo Mobile" + ], + "custom-hardware": [ + "Duo token" + ], + "documentation": "https://carleton.ca/its/duo/config/", + "name": "Carleton University" + }, + { + "domain": "carrd.co", + "tfa": [ + "totp" + ], + "documentation": "https://carrd.co/docs/account/enabling-google-authenticator", + "name": "Carrd" + }, + { + "domain": "carta.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://support.carta.com/s/article/2-factor-authentication", + "name": "Carta" + }, + { + "domain": "cash.app", + "tfa": [ + "email", + "totp" + ], + "documentation": "https://cash.app/help/en/en-us/3127", + "name": "Cash App" + }, + { + "domain": "cashrewards.com.au", + "tfa": [ + "sms" + ], + "documentation": "https://help.cashrewards.com.au/support/solutions/articles/1000304169", + "notes": "Enabling 2FA requires email confirmation", + "name": "Cashrewards" + }, + { + "domain": "caspio.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://howto.caspio.com/caspio-id/managing-caspio-id/#Enable2FA", + "name": "Caspio" + }, + { + "domain": "cbq.qa", + "tfa": [ + "sms" + ], + "documentation": "https://cbonline.cbq.qa/RIB/Common/FAQContent", + "notes": "An SMS capable phone with a Qatar phone number is required.", + "name": "Commercial Bank of Qatar" + }, + { + "domain": "cdn77.com", + "tfa": [ + "totp" + ], + "documentation": "https://client.cdn77.com/support/knowledgebase/billing/cdn77-two-step-authentication", + "name": "CDN77" + }, + { + "domain": "cdnsun.com", + "tfa": [ + "totp" + ], + "documentation": "https://cdnsun.com/knowledgebase/billing/two-factor-authentication", + "name": "CDNsun" + }, + { + "domain": "cembra.ch", + "tfa": [ + "sms" + ], + "documentation": "https://faq.cembra.ch/de/videos/login-mit-mtan/", + "name": "Cembra Money Bank" + }, + { + "domain": "central.sophos.com", + "additional-domains": [ + "login.sophos.com" + ], + "tfa": [ + "email", + "totp" + ], + "documentation": "https://docs.sophos.com/central/customer/help/en-us/ManageYourProducts/GlobalSettings/MultiFactorAuthentication/index.html", + "name": "Sophos Central" + }, + { + "domain": "cex.io", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://support.cex.io/en/articles/4814825", + "name": "CEX.IO" + }, + { + "domain": "cgd.pt", + "url": "https://www.cgd.pt/", + "tfa": [ + "sms" + ], + "documentation": "https://www.cgd.pt/Ajuda/Seguranca/Pages/Autenticacao-Dupla-SMS-Token.aspx", + "name": "Caixadirecta" + }, + { + "domain": "changelly.com", + "tfa": [ + "totp", + "custom-hardware" + ], + "custom-hardware": [ + "Yubico OTP" + ], + "documentation": "https://support.changelly.com/en/support/solutions/articles/14000111533", + "name": "Changelly" + }, + { + "domain": "chargebee.com", + "tfa": [ + "totp" + ], + "documentation": "https://www.chargebee.com/docs/2fa.html", + "name": "Chargebee" + }, + { + "domain": "charliehr.com", + "tfa": [ + "totp" + ], + "documentation": "https://intercom.help/charliehr/en/articles/1037152", + "name": "CharlieHR" + }, + { + "domain": "chartbeat.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://help.chartbeat.com/hc/en-us/articles/209531888", + "name": "Chartbeat" + }, + { + "domain": "chase.com", + "tfa": [ + "sms", + "call", + "custom-software", + "custom-hardware" + ], + "custom-software": [ + "Chase app" + ], + "custom-hardware": [ + "RSA SecurID" + ], + "documentation": "https://2fa.directory/notes/chase/", + "notes": "Hardware tokens can be obtained through Chase support for high-risk accounts", + "name": "Chase" + }, + { + "domain": "chat.google.com", + "tfa": [ + "sms", + "call", + "totp", + "custom-software", + "u2f" + ], + "custom-software": [ + "Google Prompts", + "Google Smart Lock" + ], + "documentation": "https://www.google.com/intl/en-US/landing/2step/features.html", + "name": "Google Chat" + }, + { + "domain": "chatwork.com", + "url": "https://go.chatwork.com/", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://support-en.chatwork.com/hc/en-us/articles/360023097632", + "notes": "SMS 2FA is only available to users on paid plans", + "name": "Chatwork" + }, + { + "domain": "checkfront.com", + "tfa": [ + "totp", + "sms" + ], + "documentation": "https://support.checkfront.com/hc/en-us/articles/115003849053", + "name": "Checkfront" + }, + { + "domain": "checkmategaming.com", + "tfa": [ + "totp" + ], + "documentation": "https://www.checkmategaming.com/article/more-secure-to-serve-you-better--473.htm", + "name": "CMG" + }, + { + "domain": "chegg.com", + "tfa": [ + "email" + ], + "documentation": "https://www.chegg.com/contactus?a=How-does-multi-factor-authentication-work---id--HhfxSshaSpKIqQW-Er4qfA", + "name": "Chegg" + }, + { + "domain": "chime.com", + "tfa": [ + "sms" + ], + "documentation": "https://www.chime.com/security-and-control/", + "name": "Chime" + }, + { + "domain": "cibc.com", + "tfa": [ + "call", + "sms", + "custom-software" + ], + "custom-software": [ + "CICB app" + ], + "documentation": "https://www.cibc.com/en/privacy-security/two-step-verification.html", + "name": "CIBC" + }, + { + "domain": "cinemark.com", + "tfa": [ + "sms", + "email" + ], + "documentation": "https://www.cinemark.com/faqs/two-factor-authentication-2fa-faqs", + "name": "Cinemark" + }, + { + "domain": "circle.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://support.circle.com/hc/en-us/articles/213560483", + "name": "Circle" + }, + { + "domain": "cisco.com", + "tfa": [ + "totp" + ], + "name": "Cisco" + }, + { + "domain": "citadelbanking.com", + "tfa": [ + "totp", + "custom-software", + "sms", + "call", + "email" + ], + "custom-software": [ + "Citadel App" + ], + "name": "Citadel Credit Union" + }, + { + "domain": "citi.com", + "additional-domains": [ + "accountonline.com", + "citibank.com", + "citicards.com", + "citibankonline.com" + ], + "tfa": [ + "sms", + "call" + ], + "documentation": "https://online.citi.com/JRS/pands/detail.do?ID=SecurityCenter§ion=security_tools", + "name": "Citibank" + }, + { + "domain": "classlink.com", + "tfa": [ + "sms", + "totp", + "u2f" + ], + "documentation": "https://www.classlink.com/solutions/multi-factor-authentication", + "name": "ClassLink" + }, + { + "domain": "clearscore.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://help.clearscore.com/hc/en-us/sections/360003360940", + "name": "ClearScore" + }, + { + "domain": "clemson.edu", + "tfa": [ + "sms", + "call", + "u2f", + "custom-software", + "custom-hardware" + ], + "custom-software": [ + "Duo" + ], + "custom-hardware": [ + "Duo D100 Token" + ], + "documentation": "https://2fa.app.clemson.edu/", + "name": "Clemson University" + }, + { + "domain": "clever.com", + "tfa": [ + "sms", + "custom-software" + ], + "custom-software": [ + "Authy" + ], + "notes": "2FA is only available for district admins", + "documentation": "https://support.clever.com/hc/en-us/articles/202062333", + "name": "Clever" + }, + { + "domain": "clevertap.com", + "tfa": [ + "totp" + ], + "documentation": "https://docs.clevertap.com/docs/account-security", + "name": "CleverTap" + }, + { + "domain": "clickup.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://help.clickup.com/hc/en-us/articles/6327741965591", + "notes": "SMS only available on Business and Enterprise price plans.", + "name": "ClickUp" + }, + { + "domain": "cliniko.com", + "tfa": [ + "totp" + ], + "documentation": "https://help.cliniko.com/en/articles/1023989", + "notes": "Setting up 2FA requires adding a phone number.", + "name": "Cliniko" + }, + { + "domain": "clio.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.clio.com/hc/en-us/articles/4415874710171", + "name": "Clio" + }, + { + "domain": "close.com", + "tfa": [ + "totp" + ], + "documentation": "https://help.close.com/docs/enabling-2fa", + "name": "Close" + }, + { + "domain": "cloud.google.com", + "tfa": [ + "sms", + "call", + "totp", + "custom-software", + "u2f" + ], + "custom-software": [ + "Google Prompts", + "Google Smart Lock" + ], + "documentation": "https://www.google.com/intl/en-US/landing/2step/features.html", + "name": "Google Cloud Platform" + }, + { + "domain": "cloud.hashicorp.com", + "additional-domains": [ + "auth.hashicorp.com" + ], + "tfa": [ + "totp" + ], + "documentation": "https://developer.hashicorp.com/hcp/docs/hcp/admin/iam/mfa", + "name": "HashiCorp Cloud Platform" + }, + { + "domain": "cloud.ibm.com", + "tfa": [ + "email", + "u2f", + "totp", + "custom-software" + ], + "custom-software": [ + "Symantec VIP" + ], + "documentation": "https://cloud.ibm.com/docs/account?topic=account-enablemfa", + "name": "IBM Cloud" + }, + { + "domain": "cloud.malwarebytes.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.malwarebytes.com/hc/en-us/articles/360042186433", + "name": "Malwarebytes Nebula" + }, + { + "domain": "cloud.oracle.com", + "additional-domains": [ + "oraclecloud.com" + ], + "url": "https://www.oracle.com/cloud/", + "tfa": [ + "totp", + "custom-software", + "sms", + "call", + "email", + "u2f" + ], + "custom-software": [ + "Duo", + "Oracle Mobile Authenticator" + ], + "documentation": "https://docs.oracle.com/en/cloud/paas/identity-cloud/uaids/configure-authentication-factors.html", + "name": "Oracle Cloud Infrastructure" + }, + { + "domain": "cloud66.com", + "tfa": [ + "totp", + "u2f" + ], + "documentation": "https://help.cloud66.com/node/account/two-factor-authentication.html", + "name": "Cloud 66" + }, + { + "domain": "cloudamqp.com", + "tfa": [ + "totp", + "sms" + ], + "documentation": "https://www.cloudamqp.com/blog/two-factor-authentication.html", + "notes": "SMS is required as a backup method", + "name": "CloudAMQP" + }, + { + "domain": "cloudbees.com", + "tfa": [ + "totp" + ], + "documentation": "https://docs.cloudbees.com/docs/cloudbees-feature-management/latest/security/two-factor-authentication", + "name": "CloudBees" + }, + { + "domain": "cloudbet.com", + "tfa": [ + "totp" + ], + "documentation": "https://cloudbet.zendesk.com/hc/en-us/articles/223120088/", + "name": "Cloudbet" + }, + { + "domain": "cloudconvert.com", + "tfa": [ + "totp" + ], + "name": "CloudConvert" + }, + { + "domain": "cloudflare.com", + "tfa": [ + "totp", + "u2f" + ], + "documentation": "https://support.cloudflare.com/hc/en-us/articles/200167906", + "name": "Cloudflare" + }, + { + "domain": "cloudhq.net", + "tfa": [ + "totp" + ], + "documentation": "https://support.cloudhq.net/how-to-set-up-and-enable-two-factor-authentication-2fa/", + "name": "cloudHQ" + }, + { + "domain": "cloudinary.com", + "tfa": [ + "totp" + ], + "name": "Cloudinary" + }, + { + "domain": "cloudns.net", + "tfa": [ + "totp" + ], + "documentation": "https://www.cloudns.net/wiki/article/201/", + "name": "ClouDNS" + }, + { + "domain": "cloudways.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.cloudways.com/enabling-two-factor-authentication-for-your-cloudways-account/", + "name": "Cloudways" + }, + { + "domain": "clover.com", + "tfa": [ + "totp", + "sms" + ], + "documentation": "https://www.clover.com/help/two-factor-authentication", + "name": "Clover" + }, + { + "domain": "cloze.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://help.cloze.com/knowledge_base/topics/how-do-i-enable-2-step-authentication", + "name": "Cloze" + }, + { + "domain": "cm.com", + "tfa": [ + "sms", + "custom-software" + ], + "custom-software": [ + "CM Authenticator" + ], + "documentation": "https://www.cm.com/customer-service/#36-69/Account/652/How%20do%20I%20enable%20Two-Factor%20Authentication?", + "name": "CM" + }, + { + "domain": "cmu.edu", + "tfa": [ + "custom-software", + "custom-hardware", + "u2f" + ], + "custom-software": [ + "Duo" + ], + "custom-hardware": [ + "Duo D100 Token" + ], + "documentation": "https://www.cmu.edu/computing/services/security/identity-access/authentication/how-to/use2fa-weblogin.html", + "name": "Carnegie Mellon University" + }, + { + "domain": "cobalt.io", + "tfa": [ + "totp" + ], + "documentation": "https://cobaltio.zendesk.com/hc/en-us/articles/4408918977940", + "name": "Cobalt" + }, + { + "domain": "coda.io", + "tfa": [ + "totp" + ], + "documentation": "https://help.coda.io/en/articles/3833338", + "name": "Coda" + }, + { + "domain": "codeanywhere.com", + "tfa": [ + "sms" + ], + "documentation": "https://docs.codeanywhere.com/#two-factor-authentication", + "name": "Codeanywhere" + }, + { + "domain": "codebasehq.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.codebasehq.com/articles/tips-tricks/how-do-i-setup-two-factor-authentication", + "name": "Codebase" + }, + { + "domain": "codeberg.org", + "tfa": [ + "totp", + "u2f" + ], + "documentation": "https://docs.codeberg.org/security/2fa/", + "name": "Codeberg" + }, + { + "domain": "codeclimate.com", + "tfa": [ + "sms", + "custom-software" + ], + "custom-software": [ + "Authy" + ], + "documentation": "https://docs.codeclimate.com/docs/enabling-two-factor-authentication", + "name": "Code Climate" + }, + { + "domain": "cohost.org", + "tfa": [ + "totp" + ], + "name": "cohost" + }, + { + "domain": "coinbase.com", + "tfa": [ + "sms", + "totp", + "u2f" + ], + "documentation": "https://help.coinbase.com/en/coinbase/getting-started/verify-my-account/how-do-i-set-up-2-factor-authentication", + "name": "Coinbase" + }, + { + "domain": "coinberry.com", + "tfa": [ + "totp" + ], + "documentation": "https://help.coinberry.com/hc/en-us/articles/4505782775569", + "name": "Coinberry" + }, + { + "domain": "coincheck.com", + "tfa": [ + "totp" + ], + "documentation": "https://faq.coincheck.com/s/article/20204?language=en_US", + "name": "Coincheck" + }, + { + "domain": "coindcx.com", + "tfa": [ + "sms", + "email", + "totp" + ], + "documentation": "https://support.coindcx.com/hc/en-gb/articles/360003181855", + "name": "CoinDCX" + }, + { + "domain": "coindeal.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://coindeal.com/security", + "name": "CoinDeal" + }, + { + "domain": "coinfalcon.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.coinfalcon.com/en-us/article/-nkjppd/", + "name": "CoinFalcon" + }, + { + "domain": "coingate.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.coingate.com/hc/en-us/articles/4402503798034", + "name": "CoinGate" + }, + { + "domain": "coinify.com", + "tfa": [ + "totp" + ], + "documentation": "https://help.coinify.com/hc/en-us/articles/360014173320", + "notes": "2FA is only available for merchant accounts. myCoinify trading accounts do not support 2FA.", + "name": "Coinify" + }, + { + "domain": "coinigy.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.coinigy.com/hc/en-us/articles/360001134694", + "name": "Coinigy" + }, + { + "domain": "coinjar.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://support.coinjar.com/hc/en-us/articles/202910075", + "name": "Coinjar" + }, + { + "domain": "coinloan.io", + "tfa": [ + "totp" + ], + "documentation": "https://blog.coinloan.io/securing-your-accounts-with-two-factor-authentication-2fa/", + "name": "CoinLoan" + }, + { + "domain": "coinmarketcap.com", + "tfa": [ + "totp", + "email" + ], + "name": "CoinMarketCap" + }, + { + "domain": "coinone.co.kr", + "tfa": [ + "totp" + ], + "name": "CoinOne" + }, + { + "domain": "coinpayments.net", + "tfa": [ + "totp", + "sms", + "email" + ], + "name": "CoinPayments" + }, + { + "domain": "coinpayu.com", + "tfa": [ + "totp" + ], + "notes": "You need to verify email address before enable 2FA.", + "name": "CoinPayU" + }, + { + "domain": "coinremitter.com", + "tfa": [ + "totp" + ], + "name": "CoinRemitter" + }, + { + "domain": "coins.ph", + "tfa": [ + "totp" + ], + "documentation": "https://support.coins.ph/hc/en-us/articles/202604924", + "name": "Coins.ph" + }, + { + "domain": "coinsmart.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.coinsmart.com/hc/en-us/articles/360014948893", + "name": "CoinSmart" + }, + { + "domain": "coinspot.com.au", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://coinspot.zendesk.com/hc/en-us/sections/115000049254", + "name": "CoinSpot" + }, + { + "domain": "cointiger.com", + "url": "https://www.cointiger.com/", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://cointiger.zendesk.com/hc/en-us/articles/360009805534", + "name": "CoinTiger" + }, + { + "domain": "cointracker.io", + "tfa": [ + "totp" + ], + "documentation": "https://help.cointracker.io/en/articles/2641553", + "name": "CoinTracker" + }, + { + "domain": "cointracking.info", + "tfa": [ + "totp" + ], + "name": "CoinTracking" + }, + { + "domain": "cointraffic.io", + "tfa": [ + "totp" + ], + "name": "Cointraffic" + }, + { + "domain": "coinut.com", + "tfa": [ + "totp" + ], + "documentation": "https://help.coinut.com/hc/en-us/articles/360005061354", + "name": "Coinut" + }, + { + "domain": "coinzilla.com", + "tfa": [ + "totp", + "email" + ], + "name": "Coinzilla" + }, + { + "domain": "coles.com.au", + "tfa": [ + "sms", + "email" + ], + "name": "Coles" + }, + { + "domain": "collegeboard.org", + "tfa": [ + "email" + ], + "name": "College Board" + }, + { + "domain": "combell.com", + "tfa": [ + "totp" + ], + "documentation": "https://www.combell.com/en/help/kb/how-do-i-enable-two-factor-authentication/", + "name": "Combell" + }, + { + "domain": "comdirect.de", + "tfa": [ + "sms", + "custom-software", + "custom-hardware" + ], + "custom-hardware": [ + "photoTAN card reader" + ], + "custom-software": [ + "comdirect photoTAN" + ], + "documentation": "https://www.comdirect.de/konto/psd2-phototan.html", + "name": "comdirect" + }, + { + "domain": "comed.com", + "tfa": [ + "sms", + "call", + "email" + ], + "documentation": "https://www.comed.com/MyAccount/CustomerSupport/pages/faqs.aspx#WebPartWPQ15", + "name": "ComEd" + }, + { + "domain": "commbank.com.au", + "tfa": [ + "sms", + "custom-hardware", + "custom-software" + ], + "custom-software": [ + "CommBank app" + ], + "custom-hardware": [ + "NetCode Token" + ], + "documentation": "https://www.commbank.com.au/support.digital-banking.explain-netcode-token.html", + "notes": "NetCode Tokens are only offered to customers who cannot use SMS 2FA or the CommBank app.", + "name": "Commonwealth Bank of Australia" + }, + { + "domain": "commercial.metrobankonline.co.uk", + "tfa": [ + "custom-software", + "custom-hardware" + ], + "custom-software": [ + "Metro Bank Authenticator app" + ], + "custom-hardware": [ + "Security device" + ], + "documentation": "https://www.metrobankonline.co.uk/help-and-support/what-is-sca/#item17066", + "notes": "Only available for Business Online Plus and Commercial Banking customers. Setup for authenticator app requires SMS verification. Only UK phone numbers can be used.", + "name": "Metro Bank Commercial" + }, + { + "domain": "commerzbank.de", + "tfa": [ + "sms", + "custom-software", + "custom-hardware" + ], + "custom-hardware": [ + "photoTAN card reader" + ], + "custom-software": [ + "Commerzbank photoTAN" + ], + "documentation": "https://www.commerzbank.de/konten-zahlungsverkehr/service/tan-verfahren/", + "name": "Commerzbank" + }, + { + "domain": "communityamerica.com", + "tfa": [ + "sms", + "call", + "totp" + ], + "documentation": "https://www.cacuonlinebanking.com/tob/live/usp-core/static/help.html#login_security", + "name": "CommunityAmerica" + }, + { + "domain": "compose.com", + "tfa": [ + "sms", + "totp", + "u2f" + ], + "documentation": "https://www.compose.com/articles/introducing-fido-universal-2nd-factor-authentication/", + "name": "Compose" + }, + { + "domain": "comviq.se", + "tfa": [ + "custom-software" + ], + "custom-software": [ + "BankID" + ], + "name": "Comviq" + }, + { + "domain": "concur.com", + "tfa": [ + "totp" + ], + "documentation": "https://dam.sap.com/mac/app/p/pdf/asset/preview/kA9GcJq?ltr=a&rc=10", + "additional-domains": [ + "concur.com.mx", + "concur.ca", + "concur.com.br", + "concur.com.ar", + "concur.co", + "concur.cl", + "concur.pe", + "concur.co.za", + "concur.ae", + "concur.co.uk", + "concur.fr", + "concur.de", + "concur.it", + "concur.nl", + "concur.se", + "concur.dk", + "concur.fi", + "concur.be", + "concur.es", + "concur.no", + "concur.com.au", + "concur.cn", + "concur.com.hk", + "concur.co.in", + "concur.co.jp", + "concur.kr", + "concur.com.sg", + "concur.tw", + "concursolutions.com" + ], + "name": "Concur" + }, + { + "domain": "coned.com", + "tfa": [ + "sms", + "call", + "totp", + "custom-software" + ], + "custom-software": [ + "Okta Verify" + ], + "documentation": "https://www.coned.com/-/media/files/coned/documents/small-medium-large-businesses/building-project-center/contractor-resources/user-registration-guide.pdf?la=en", + "notes": "Requires phone number to set up. Can be bypassed by customer support.", + "name": "Con Edison" + }, + { + "domain": "connectwise.com", + "url": "https://www.connectwise.com/software/control", + "tfa": [ + "sms", + "email", + "totp", + "custom-hardware" + ], + "custom-hardware": [ + "Yubico OTP" + ], + "documentation": "https://docs.connectwise.com/ConnectWise_Control_Documentation/Get_started/Administration_page/Security_page/Enable_two-factor_authentication_for_host_accounts", + "name": "ConnectWise Control (ScreenConnect)" + }, + { + "domain": "consorsbank.de", + "tfa": [ + "custom-software", + "custom-hardware" + ], + "custom-hardware": [ + "SecurePlus card reader" + ], + "custom-software": [ + "Consorsbank SecurePlus" + ], + "documentation": "https://www.consorsbank.de/ev/Service-Beratung/secureplus", + "name": "Consorsbank" + }, + { + "domain": "constellix.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.constellix.com/support/solutions/articles/47001012279", + "name": "Constellix" + }, + { + "domain": "contabo.com", + "tfa": [ + "totp" + ], + "documentation": "https://contabo.com/en/customer-support/faq/#2fa-questions", + "name": "Contabo" + }, + { + "domain": "contentful.com", + "tfa": [ + "totp" + ], + "documentation": "https://www.contentful.com/faq/two-factor-authentication/", + "name": "Contentful" + }, + { + "domain": "contentstack.com", + "tfa": [ + "custom-software", + "sms" + ], + "custom-software": [ + "Authy" + ], + "documentation": "https://www.contentstack.com/docs/developers/two-factor-authentication/", + "name": "Contentstack" + }, + { + "domain": "convertkit.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://help.convertkit.com/en/articles/3925724", + "name": "ConvertKit" + }, + { + "domain": "cordial.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://support.cordial.com/hc/en-us/articles/360004846512", + "name": "Cordial" + }, + { + "domain": "cornell.edu", + "tfa": [ + "sms", + "custom-software", + "custom-hardware", + "u2f", + "call" + ], + "custom-software": [ + "Duo" + ], + "custom-hardware": [ + "Duo D100 Token" + ], + "documentation": "https://it.cornell.edu/twostep", + "name": "Cornell University" + }, + { + "domain": "cosmolex.com", + "tfa": [ + "sms" + ], + "documentation": "https://support.cosmolex.com/knowledge-base/how-to-enable-two-factor-authentication/", + "name": "Cosmolex" + }, + { + "domain": "coursera.org", + "tfa": [ + "totp" + ], + "name": "Coursera" + }, + { + "domain": "cox.com", + "tfa": [ + "sms", + "call", + "email" + ], + "documentation": "https://www.cox.com/residential/support/enrolling-in-multifactor-authentication-in-my-account.html", + "name": "Cox" + }, + { + "domain": "cpp.edu", + "url": "https://www.cpp.edu", + "tfa": [ + "sms", + "totp", + "u2f", + "custom-hardware", + "custom-software" + ], + "custom-hardware": [ + "Duo D100 Token" + ], + "custom-software": [ + "Duo" + ], + "documentation": "https://cpp.service-now.com/ehelp?id=kb_article&sys_id=ed4dcbc3dbeb1f449bba68461b96198e", + "name": "Cal Poly Pomona" + }, + { + "domain": "cqu.edu.au", + "tfa": [ + "totp", + "sms", + "call", + "custom-software" + ], + "custom-software": [ + "Microsoft Authenticator" + ], + "name": "CQUniversity" + }, + { + "domain": "crashplan.com", + "additional-domains": [ + "crashplanpro.com", + "console.us2.crashplanpro.com" + ], + "tfa": [ + "totp" + ], + "documentation": "https://support.crashplan.com/hc/en-us/articles/8724455295245", + "notes": "2FA is not available on the CrashPlan/Code42 desktop application.", + "name": "CrashPlan" + }, + { + "domain": "crazydomains.com", + "tfa": [ + "sms", + "call" + ], + "documentation": "https://www.crazydomains.co.uk/help/how-to-enable-or-disable-two-step-verification-system/", + "name": "Crazy Domains" + }, + { + "domain": "credit-suisse.com", + "tfa": [ + "custom-software" + ], + "custom-software": [ + "SecureSign" + ], + "documentation": "https://www.credit-suisse.com/ch/en/private-clients/account-cards/services/faq-securesign-login.html", + "name": "Credit Suisse" + }, + { + "domain": "creditkarma.com", + "tfa": [ + "sms", + "call" + ], + "documentation": "https://support.creditkarma.com/s/article/Can-I-use-Two-Factor-Authentication-on-Credit-Karma", + "name": "Credit Karma [US]" + }, + { + "domain": "credly.com", + "tfa": [ + "totp" + ], + "notes": "Password reset also disables 2FA.", + "name": "Credly" + }, + { + "domain": "cron-job.org", + "tfa": [ + "totp", + "custom-hardware" + ], + "custom-hardware": [ + "Yubico OTP" + ], + "name": "cron-job.org" + }, + { + "domain": "cronometer.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.cronometer.com/hc/en-us/articles/360042096672", + "name": "Cronometer" + }, + { + "domain": "crowdin.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.crowdin.com/account-settings/#two-factor-authentication", + "name": "Crowdin" + }, + { + "domain": "crowdsupply.com", + "tfa": [ + "totp", + "u2f" + ], + "name": "Crowd Supply" + }, + { + "domain": "crypto.com", + "tfa": [ + "totp" + ], + "documentation": "https://help.crypto.com/en/articles/3511439", + "name": "Crypto" + }, + { + "domain": "cryptonator.com", + "tfa": [ + "totp", + "custom-software", + "sms" + ], + "custom-software": [ + "Telegram" + ], + "documentation": "https://cryptonator.zendesk.com/hc/en-us/articles/201715352", + "name": "Cryptonator" + }, + { + "domain": "csas.cz", + "url": "https://www.csas.cz/en/", + "tfa": [ + "sms", + "custom-software" + ], + "custom-software": [ + "George Ceska Sporitelna" + ], + "documentation": "https://www.csas.cz/cs/mobilni-aplikace/george-klic", + "name": "Ceska Sporitelna" + }, + { + "domain": "csn.se", + "tfa": [ + "custom-software" + ], + "custom-software": [ + "BankID" + ], + "documentation": "https://tjanster.csn.se/bas/vanligaFragor.do", + "name": "CSN" + }, + { + "domain": "csob.cz", + "url": "https://www.csob.cz/", + "tfa": [ + "sms", + "custom-software" + ], + "custom-software": [ + "\u010cSOB Smart key" + ], + "documentation": "https://www.csob.cz/portal/people/accounts/internet-and-mobile-banking/csob-smart-key", + "name": "\u010cSOB (Czech)" + }, + { + "domain": "currencycloud.com", + "tfa": [ + "custom-software" + ], + "custom-software": [ + "Authy" + ], + "documentation": "https://support.currencycloud.com/hc/en-gb/articles/360018656420", + "name": "Currencycloud" + }, + { + "domain": "current-rms.com", + "tfa": [ + "totp", + "custom-software", + "sms" + ], + "custom-software": [ + "Authy" + ], + "documentation": "https://help.current-rms.com/en/articles/1767596", + "name": "Current RMS" + }, + { + "domain": "customer.io", + "tfa": [ + "totp" + ], + "documentation": "https://customer.io/docs/two-factor-auth", + "name": "Customer.io" + }, + { + "domain": "cyon.ch", + "tfa": [ + "totp" + ], + "documentation": "https://www.cyon.ch/support/a/zwei-schritt-verifizierung-aktivieren", + "name": "cyon" + }, + { + "domain": "dab-bank.de", + "tfa": [ + "custom-software", + "custom-hardware" + ], + "custom-software": [ + "DAB SecurePlus app" + ], + "custom-hardware": [ + "QR TAN reader" + ], + "documentation": "https://b2b.dab-bank.de/Tradingcenter/Service-Infos/SecurePlus/", + "name": "DAB BNP Paribas" + }, + { + "domain": "danskebank.dk", + "tfa": [ + "custom-hardware", + "custom-software" + ], + "custom-software": [ + "NemID app" + ], + "custom-hardware": [ + "NemID code token" + ], + "documentation": "https://www.nemid.nu/dk-en/get_started/", + "name": "Danske Bank [DK]" + }, + { + "domain": "danskebank.se", + "tfa": [ + "custom-software" + ], + "custom-software": [ + "BankID" + ], + "documentation": "https://danskebank.se/privat/digitala-tjanster/ovriga-tjanster/bankid", + "name": "Danske Bank [SE]" + }, + { + "domain": "dashlane.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.dashlane.com/hc/en-us/articles/202625042", + "name": "Dashlane" + }, + { + "domain": "databox.com", + "tfa": [ + "totp", + "sms" + ], + "documentation": "https://help.databox.com/overview-two-factor-authentication-2fa", + "name": "Databox" + }, + { + "domain": "datarobot.com", + "tfa": [ + "totp" + ], + "documentation": "https://docs.datarobot.com/en/docs/platform/authentication/2fa.html", + "name": "DataRobot" + }, + { + "domain": "datev.de", + "tfa": [ + "totp", + "sms", + "custom-hardware" + ], + "custom-hardware": [ + "National identity card" + ], + "documentation": "https://apps.datev.de/help-center/documents/1022726", + "notes": "2FA only available for DATEV Arbeitnehmer online", + "name": "DATEV" + }, + { + "domain": "datto.com", + "tfa": [ + "totp", + "custom-software" + ], + "custom-software": [ + "Duo" + ], + "documentation": "https://businessmanagement.datto.com/help/Content/kb/partner-portal/KB360032979352.html", + "name": "Datto" + }, + { + "domain": "dbs.com.sg", + "url": "https://www.dbs.com.sg/", + "tfa": [ + "custom-hardware" + ], + "custom-hardware": [ + "DBS iB Secure Device" + ], + "documentation": "https://www.dbs.com.sg/personal/deposits/security-and-you/we-protect-you.page#slideToN10051", + "name": "DBS Bank [SG]" + }, + { + "domain": "dcu.org", + "url": "https://www.dcu.org", + "tfa": [ + "sms", + "call", + "email" + ], + "documentation": "https://www.dcu.org/online-banking/online-banking-enhancements.html", + "name": "Digital Federal Credit Union" + }, + { + "domain": "deakin.edu.au", + "tfa": [ + "sms", + "call", + "u2f", + "totp", + "custom-software", + "custom-hardware" + ], + "custom-software": [ + "Duo" + ], + "custom-hardware": [ + "Duo D100 Token" + ], + "documentation": "https://help.deakin.edu.au/ithelp?id=kb_article&sysparm_article=KB0014662", + "name": "Deakin University" + }, + { + "domain": "deel.com", + "additional-domains": [ + "letsdeel.com" + ], + "tfa": [ + "totp" + ], + "documentation": "https://help.letsdeel.com/hc/en-gb/articles/4407737656465", + "name": "Deel" + }, + { + "domain": "degiro.nl", + "url": "https://www.degiro.nl", + "tfa": [ + "totp" + ], + "documentation": "https://www.degiro.nl/helpdesk/account-en-persoonlijke-gegevens/toegang-tot-uw-degiro-account/hoe-kan-ik-twee-stapsverificatie", + "additional-domains": [ + "degiro.cz", + "degiro.ch", + "degiro.dk", + "degiro.de", + "degiro.es", + "degiro.gr", + "degiro.fr", + "degiro.ie", + "degiro.it", + "degiro.nl", + "degiro.co.no", + "degiro.hu", + "degiro.at", + "degiro.pl", + "degiro.pt", + "degiro.fi", + "degiro.se", + "degiro.co.uk" + ], + "name": "DEGIRO" + }, + { + "domain": "degussa-bank.de", + "url": "https://www.degussa-bank.de/", + "tfa": [ + "custom-hardware", + "sms", + "custom-software" + ], + "custom-hardware": [ + "Biometrics (via app)" + ], + "custom-software": [ + "Degussa Bank Banking+Brokerage" + ], + "documentation": "https://www.degussa-bank.de/apptan-verfahren", + "name": "Degussa Bank" + }, + { + "domain": "delighted.com", + "additional-domains": [ + "delightedapp.com" + ], + "tfa": [ + "sms" + ], + "documentation": "https://help.delighted.com/article/526--#2-step", + "name": "Delighted" + }, + { + "domain": "delinea.com", + "tfa": [ + "call", + "sms", + "totp", + "email", + "custom-software", + "u2f" + ], + "custom-software": [ + "Duo Push" + ], + "documentation": "https://docs.delinea.com/ss/10.8.0/authentication/two-factor-authentication", + "name": "Delinea" + }, + { + "domain": "deliverr.com", + "tfa": [ + "sms" + ], + "documentation": "https://support.deliverr.com/hc/en-us/articles/4575365498519", + "name": "Deliverr" + }, + { + "domain": "demio.com", + "tfa": [ + "totp" + ], + "documentation": "https://help.demio.com/en/articles/4794494", + "name": "Demio" + }, + { + "domain": "deployhq.com", + "url": "https://www.deployhq.com/", + "tfa": [ + "totp" + ], + "documentation": "https://www.deployhq.com/support/managing-your-account/personal-profile/two-factor-authentication", + "name": "DeployHQ" + }, + { + "domain": "depop.com", + "tfa": [ + "sms" + ], + "documentation": "https://depophelp.zendesk.com/hc/en-gb/articles/360017103878", + "notes": "2FA can only be enabled via the app. Recovery codes can only be used via the app.", + "name": "Depop" + }, + { + "domain": "deputy.com", + "tfa": [ + "totp" + ], + "documentation": "https://help.deputy.com/hc/en-au/articles/4621532398351", + "name": "Deputy" + }, + { + "domain": "desertfinancial.com", + "url": "https://www.desertfinancial.com", + "tfa": [ + "sms", + "email" + ], + "documentation": "https://www.desertfinancial.com/faq/online-solutions-faqs/security", + "name": "Desert Financial Credit Union" + }, + { + "domain": "desjardins.com", + "tfa": [ + "sms", + "custom-software" + ], + "custom-software": [ + "Desjardins Mobile Services App" + ], + "documentation": "https://www.desjardins.com/securite/validation-2-etapes/", + "name": "Desjardins" + }, + { + "domain": "detectify.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.detectify.com/support/solutions/articles/48001061904", + "name": "Detectify" + }, + { + "domain": "deutsche-bank.de", + "tfa": [ + "sms", + "custom-software", + "custom-hardware" + ], + "custom-hardware": [ + "photoTAN card reader" + ], + "custom-software": [ + "Deutsche Bank Mobile" + ], + "documentation": "https://www.deutsche-bank.de/pk/lp/psd2.html", + "name": "Deutsche Bank" + }, + { + "domain": "deutsche-rentenversicherung.de", + "tfa": [ + "custom-hardware" + ], + "custom-hardware": [ + "National identity card", + "Signature card" + ], + "documentation": "https://www.deutsche-rentenversicherung.de/DRV/DE/Online-Dienste/unsere_online-dienste.html", + "name": "Deutsche Rentenversicherung" + }, + { + "domain": "deutschepost.de", + "tfa": [ + "totp", + "email" + ], + "name": "Deutsche Post" + }, + { + "domain": "developer.nexmo.com", + "tfa": [ + "sms", + "call" + ], + "name": "Vonage" + }, + { + "domain": "dext.com", + "tfa": [ + "totp" + ], + "documentation": "https://help.receipt-bank.com/hc/articles/360002530177", + "name": "Dext Prepare" + }, + { + "domain": "dhl.de", + "url": "https://www.dhl.de", + "tfa": [ + "email" + ], + "documentation": "https://www.dhl.de/de/toolbar/footer/datenschutz.html#kundenkontoundempfaengerservices", + "name": "DHL [DE]" + }, + { + "domain": "digicert.com", + "url": "https://www.digicert.com/", + "tfa": [ + "totp" + ], + "documentation": "https://www.digicert.com/two-factor-authentication.htm", + "name": "DigiCert" + }, + { + "domain": "digid.nl", + "url": "https://www.digid.nl/", + "tfa": [ + "sms", + "call", + "custom-software" + ], + "custom-software": [ + "DigiD" + ], + "documentation": "https://www.digid.nl/nl/vraag-en-antwoord/hoe-kan-ik-de-sms-controle-toevoegen/", + "name": "DigiD" + }, + { + "domain": "digitalcombatsimulator.com", + "additional-domains": [ + "eagle.ru" + ], + "tfa": [ + "totp" + ], + "documentation": "https://www.digitalcombatsimulator.com/en/support/faq/User_profile/#3319486", + "name": "DCS World" + }, + { + "domain": "digitalocean.com", + "url": "https://www.digitalocean.com/", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://www.digitalocean.com/docs/accounts/security/2fa/", + "name": "DigitalOcean" + }, + { + "domain": "digitalriver.com", + "tfa": [ + "sms" + ], + "documentation": "https://docs.digitalriver.com/digital-river-api/administration/dashboard/profile-settings/enabling-two-factor-authentication", + "name": "Digital River" + }, + { + "domain": "digitalsurge.com.au", + "tfa": [ + "totp" + ], + "documentation": "https://help.digitalsurge.com.au/en/articles/5573002", + "notes": "A mobile phone number is required to set up two-factor authentication.", + "name": "Digital Surge" + }, + { + "domain": "digitec.ch", + "url": "https://www.digitec.ch", + "tfa": [ + "totp" + ], + "documentation": "https://www.digitec.ch/en/page/6589", + "name": "Digitec" + }, + { + "domain": "directadmin.com", + "url": "https://www.directadmin.com", + "tfa": [ + "totp" + ], + "documentation": "https://directadmin.com/features.php?id=1754", + "name": "DirectAdmin" + }, + { + "domain": "directnic.com", + "tfa": [ + "totp", + "custom-hardware" + ], + "custom-hardware": [ + "Yubico OTP" + ], + "documentation": "https://directnic.com/knowledge/article/137", + "name": "Directnic" + }, + { + "domain": "discogs.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.discogs.com/hc/en-us/articles/4403461442317", + "name": "Discogs" + }, + { + "domain": "discord.com", + "additional-domains": [ + "discordapp.com" + ], + "tfa": [ + "sms", + "totp", + "u2f" + ], + "documentation": "https://support.discord.com/hc/en-us/articles/219576828", + "name": "Discord" + }, + { + "domain": "discover.com", + "additional-domains": [ + "discovercard.com" + ], + "url": "https://www.discover.com/", + "tfa": [ + "sms", + "call", + "email" + ], + "documentation": "https://www.discover.com/credit-cards/member-benefits/security-center/protect-account/account-verification.html", + "name": "Discover" + }, + { + "domain": "disk.yandex.com", + "tfa": [ + "custom-software" + ], + "custom-software": [ + "Yandex.Key" + ], + "documentation": "https://yandex.com/support/id/authorization/twofa.html", + "notes": "SMS-capable phone required for initial setup.", + "name": "Yandex.Disk" + }, + { + "domain": "dkb.de", + "tfa": [ + "custom-software", + "custom-hardware" + ], + "custom-hardware": [ + "chipTAN card reader" + ], + "custom-software": [ + "DKB app", + "DKB-Banking", + "DKB-TAN2go" + ], + "documentation": "https://www.dkb.de/info/neue-anmeldung", + "name": "Deutsche Kreditbank (DKB)" + }, + { + "domain": "dmarcanalyzer.com", + "url": "https://www.dmarcanalyzer.com/", + "tfa": [ + "totp" + ], + "documentation": "https://www.dmarcanalyzer.com/set-two-factor-authentication-additional-security/", + "name": "DMARC Analyzer" + }, + { + "domain": "dmarcian.com", + "tfa": [ + "totp", + "u2f" + ], + "documentation": "https://dmarcian.com/secure-dmarcian-2fa/", + "name": "dmarcian" + }, + { + "domain": "dmm.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.dmm.com/accounts/article/46818", + "name": "DMM" + }, + { + "domain": "dmoj.ca", + "tfa": [ + "totp" + ], + "documentation": "https://dmoj.ca/post/144-2-factor-authentication", + "name": "DMOJ" + }, + { + "domain": "dnb.no", + "url": "https://www.dnb.no/", + "tfa": [ + "custom-software", + "custom-hardware", + "sms" + ], + "custom-hardware": [ + "BankID card reader" + ], + "custom-software": [ + "BankID app" + ], + "documentation": "https://www.dnb.no/privat/kundeservice/innlogging-nettbank.html", + "name": "DNB" + }, + { + "domain": "dnsfilter.com", + "url": "https://www.dnsfilter.com/", + "tfa": [ + "totp" + ], + "documentation": "https://help.dnsfilter.com/hc/en-us/articles/4419435706003", + "name": "DNSFilter" + }, + { + "domain": "dnsimple.com", + "tfa": [ + "totp", + "u2f" + ], + "documentation": "https://support.dnsimple.com/articles/two-factor-authentication/", + "name": "DNSimple" + }, + { + "domain": "docker.com", + "tfa": [ + "totp" + ], + "documentation": "https://docs.docker.com/docker-hub/2fa/", + "name": "Docker" + }, + { + "domain": "docusign.com", + "additional-domains": [ + "docusign.net" + ], + "url": "https://www.docusign.com", + "tfa": [ + "sms", + "call", + "email", + "totp" + ], + "documentation": "https://support.docusign.com/en/guides/ndse-user-guide-two-step-verification", + "name": "Docusign" + }, + { + "domain": "domain.com.au", + "tfa": [ + "sms" + ], + "documentation": "https://help.domain.com.au/hc/en-us/articles/360012412713", + "notes": "2FA is not available on the app.", + "name": "Domain" + }, + { + "domain": "domains.google.com", + "tfa": [ + "sms", + "call", + "custom-software", + "totp", + "u2f" + ], + "custom-software": [ + "Google Prompts", + "Google Smart Lock" + ], + "documentation": "https://www.google.com/intl/en-US/landing/2step/features.html", + "name": "Google Domains" + }, + { + "domain": "domeneshop.no", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://domeneshop.no/faq?id=344", + "notes": "SMS available only to customers in Norway, Sweden and Denmark.", + "name": "Domeneshop" + }, + { + "domain": "dominionenergy.com", + "url": "https://www.dominionenergy.com/", + "tfa": [ + "sms", + "email" + ], + "name": "Dominion Energy" + }, + { + "domain": "dominodatalab.com", + "url": "https://www.dominodatalab.com/", + "tfa": [ + "totp" + ], + "documentation": "https://support.dominodatalab.com/hc/en-us/articles/115000998406", + "name": "Domino Data Lab" + }, + { + "domain": "donateblood.com.au", + "tfa": [ + "sms", + "email" + ], + "name": "Australian Red Cross Lifeblood" + }, + { + "domain": "doppler.com", + "url": "https://www.doppler.com/", + "tfa": [ + "totp", + "u2f" + ], + "documentation": "https://docs.doppler.com/docs/security-fact-sheet#user-authentication", + "name": "Doppler" + }, + { + "domain": "dotdigital.com", + "tfa": [ + "sms" + ], + "documentation": "https://support.dotdigital.com/hc/en-gb/articles/212212678", + "name": "Dotdigital" + }, + { + "domain": "draftkings.com", + "tfa": [ + "sms" + ], + "documentation": "https://help.draftkings.com/hc/en-us/articles/4409699580691", + "name": "DraftKings" + }, + { + "domain": "drchrono.com", + "url": "https://www.drchrono.com", + "tfa": [ + "custom-software", + "sms" + ], + "custom-software": [ + "Authy" + ], + "documentation": "https://support.drchrono.com/hc/en-us/articles/200030385", + "name": "DrChrono" + }, + { + "domain": "dreamhost.com", + "tfa": [ + "totp", + "custom-hardware" + ], + "custom-hardware": [ + "Yubico OTP" + ], + "documentation": "https://help.dreamhost.com/hc/en-us/articles/216013897", + "name": "Dreamhost" + }, + { + "domain": "drift.com", + "url": "https://www.drift.com/", + "tfa": [ + "totp" + ], + "name": "Drift" + }, + { + "domain": "drive.google.com", + "tfa": [ + "sms", + "call", + "custom-software", + "totp", + "u2f" + ], + "custom-software": [ + "Google Prompts", + "Google Smart Lock" + ], + "documentation": "https://www.google.com/intl/en-US/landing/2step/features.html", + "name": "Google Drive" + }, + { + "domain": "dropbox.com", + "additional-domains": [ + "getdropbox.com" + ], + "tfa": [ + "sms", + "totp", + "u2f" + ], + "documentation": "https://help.dropbox.com/security/enable-two-step-verification", + "notes": "Hardware 2FA requires also enabling Software or SMS 2FA as a back-up.", + "name": "Dropbox" + }, + { + "domain": "drupal.org", + "url": "https://www.drupal.org/", + "tfa": [ + "totp" + ], + "documentation": "https://www.drupal.org/drupalorg/docs/user-accounts/setting-up-two-factor-authentication", + "name": "Drupal.org" + }, + { + "domain": "duke.edu", + "url": "https://www.duke.edu", + "tfa": [ + "sms", + "call", + "custom-software", + "custom-hardware" + ], + "custom-software": [ + "Duo" + ], + "custom-hardware": [ + "Yubico OTP" + ], + "documentation": "https://idms-mfa.oit.duke.edu/mfa/help", + "name": "Duke University" + }, + { + "domain": "dwolla.com", + "url": "https://www.dwolla.com", + "tfa": [ + "totp" + ], + "documentation": "https://www.dwolla.com/updates/introducing-two-factor-authentication-for-dwolla/", + "name": "Dwolla" + }, + { + "domain": "dyn.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://help.dyn.com/2-factor-authentication/", + "notes": "Currently only supported for the Managed DNS & Email Delivery platforms (via DynID). Eventually DynID (and 2FA) will be rolled out to all platforms (no ETA).", + "name": "Dyn" + }, + { + "domain": "dynadot.com", + "tfa": [ + "sms", + "totp", + "u2f" + ], + "documentation": "https://www.dynadot.com/community/help/question/2-step-verification", + "name": "Dynadot" + }, + { + "domain": "dynu.com", + "url": "https://www.dynu.com/", + "tfa": [ + "totp", + "sms" + ], + "documentation": "https://www.dynu.com/en-US/Blog/Article?Article=It-is-time-to-enable-two-factor-authentication", + "name": "Dynu" + }, + { + "domain": "ea.com", + "additional-domains": [ + "origin.com" + ], + "tfa": [ + "sms", + "email", + "call", + "totp" + ], + "documentation": "https://help.ea.com/en-us/help/account/origin-login-verification-information/", + "name": "Electronic Arts (Origin)" + }, + { + "domain": "earthclassmail.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://help.earthclassmail.com/hc/en-us/articles/4410499059351", + "name": "Earth Class Mail" + }, + { + "domain": "easybank.at", + "tfa": [ + "sms", + "custom-software" + ], + "custom-software": [ + "easybank Security App" + ], + "documentation": "https://www.easybank.at/easybank/faq#Zeichnungsverfahren", + "name": "easybank" + }, + { + "domain": "easydmarc.com", + "tfa": [ + "totp" + ], + "documentation": "https://easydmarc.com/blog/two-factor-authentication/", + "name": "EasyDMARC" + }, + { + "domain": "easydns.com", + "tfa": [ + "sms", + "email", + "totp" + ], + "documentation": "https://kb.easydns.com/knowledge/account-security/", + "name": "easyDNS" + }, + { + "domain": "easysendy.com", + "tfa": [ + "totp" + ], + "documentation": "https://easysendy.com/sendy/sendy-version-2-1-0-two-factor-authentication-released", + "name": "EasySendy" + }, + { + "domain": "eb.de", + "tfa": [ + "custom-software", + "custom-hardware" + ], + "custom-software": [ + "SecureGo plus" + ], + "custom-hardware": [ + "photoTAN generator" + ], + "documentation": "https://www.eb.de/institutionen_cf/zahlungsverkehr/online-banking.html", + "name": "Evangelische Bank" + }, + { + "domain": "ebay.com", + "additional-domains": [ + "ebay.com.au", + "ebay.at", + "ebay.be", + "ebay.ca", + "ebay.cn", + "ebay.fr", + "ebay.de", + "ebay.com.hk", + "ebay.in", + "ebay.ie", + "ebay.it", + "ebay.co.jp", + "gmarket.co.kr", + "ebay.com.my", + "ebay.nl", + "ebay.ph", + "ebay.pl", + "ebay.com.sg", + "ebay.es", + "ebay.ch", + "ebay.com.tw", + "ebay.co.uk" + ], + "tfa": [ + "sms", + "totp", + "custom-software" + ], + "custom-software": [ + "eBay app" + ], + "documentation": "https://www.ebay.com/help/account/protecting-account/tips-keeping-ebay-account-secure?id=4872#section2", + "name": "eBay" + }, + { + "domain": "eccouncil.org", + "url": "https://www.eccouncil.org", + "tfa": [ + "sms", + "email" + ], + "documentation": "https://aspen.eccouncil.org/aspen/Help/2FactorAuthentication-User_Manual.pdf", + "name": "EC-Council" + }, + { + "domain": "eclincher.com", + "tfa": [ + "totp" + ], + "name": "eclincher" + }, + { + "domain": "ecobee.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://support.ecobee.com/hc/en-us/articles/360040957212", + "name": "ecobee" + }, + { + "domain": "ecu.edu", + "url": "https://www.ecu.edu", + "tfa": [ + "sms", + "call", + "totp" + ], + "documentation": "https://ecu.teamdynamix.com/TDClient/1409/Portal/Requests/ServiceDet?ID=31556", + "name": "East Carolina University" + }, + { + "domain": "educative.io", + "tfa": [ + "email" + ], + "name": "Educative" + }, + { + "domain": "eduid.ch", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://help.switch.ch/eduid/faqs/?lang=en#mfa", + "name": "SWITCH edu-ID" + }, + { + "domain": "edwardjones.com", + "additional-domains": [ + "edwardjones.ca" + ], + "tfa": [ + "sms", + "call", + "email" + ], + "documentation": "https://www.edwardjones.com/sites/default/files/acquiadam/2020-10/online-access-user-guide-MKT-11935A-A.pdf", + "name": "Edward Jones" + }, + { + "domain": "efirstbank.com", + "tfa": [ + "custom-software" + ], + "custom-software": [ + "FirstBank App" + ], + "documentation": "https://www.efirstbank.com/internet-banking/login-options.htm", + "name": "FirstBank" + }, + { + "domain": "egnyte.com", + "url": "https://www.egnyte.com/", + "tfa": [ + "totp", + "custom-software", + "sms", + "call" + ], + "custom-software": [ + "Authy" + ], + "documentation": "https://helpdesk.egnyte.com/hc/en-us/articles/360028032991", + "notes": "Availability of 2FA options depends on your account type.", + "name": "Egnyte" + }, + { + "domain": "elastic.co", + "url": "https://www.elastic.co", + "tfa": [ + "totp", + "sms" + ], + "documentation": "https://www.elastic.co/guide/en/cloud/current/ec-account-user-settings.html#ec-account-security-mfa", + "name": "Elastic Cloud" + }, + { + "domain": "elasticemail.com", + "tfa": [ + "sms", + "email" + ], + "documentation": "https://help.elasticemail.com/en/articles/2783376", + "name": "Elastic Email" + }, + { + "domain": "elderscrollsonline.com", + "tfa": [ + "email" + ], + "documentation": "https://help.elderscrollsonline.com/app/answers/detail/a_id/8611", + "name": "Elder Scrolls Online" + }, + { + "domain": "elmah.io", + "tfa": [ + "totp" + ], + "documentation": "https://docs.elmah.io/how-to-enable-two-factor-login/", + "name": "elmah.io" + }, + { + "domain": "elster.de", + "tfa": [ + "custom-software", + "custom-hardware" + ], + "custom-hardware": [ + "National identity card", + "G&D StarSign Crypto Key", + "Signature card" + ], + "custom-software": [ + "ElsterSecure" + ], + "documentation": "https://www.elster.de/eportal/helpGlobal?themaGlobal=help_eop", + "name": "Elster" + }, + { + "domain": "emailmeform.com", + "url": "https://www.emailmeform.com/", + "tfa": [ + "totp" + ], + "documentation": "https://support.emailmeform.com/hc/en-us/sections/360002042671", + "name": "EmailMeForm" + }, + { + "domain": "emich.edu", + "url": "https://www.emich.edu", + "tfa": [ + "custom-software", + "custom-hardware" + ], + "custom-software": [ + "Duo" + ], + "custom-hardware": [ + "Duo D100 Token" + ], + "documentation": "https://www.emich.edu/it/security/esp/duo.php", + "name": "Eastern Michigan University" + }, + { + "domain": "emplifi.io", + "tfa": [ + "totp" + ], + "documentation": "https://support.socialbakers.com/hc/en-us/articles/360015072719", + "name": "Emplifi" + }, + { + "domain": "eneba.com", + "url": "https://www.eneba.com/", + "tfa": [ + "totp", + "sms" + ], + "documentation": "https://support.eneba.com/hc/en-us/articles/360010216714", + "name": "Eneba" + }, + { + "domain": "engineyard.com", + "url": "https://www.engineyard.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.cloud.engineyard.com/hc/en-us/articles/4412829652507", + "name": "Engine Yard" + }, + { + "domain": "enom.com", + "url": "https://www.enom.com/", + "tfa": [ + "totp" + ], + "documentation": "https://enom.help/2fa", + "name": "eNom" + }, + { + "domain": "entrust.net", + "tfa": [ + "custom-software", + "custom-hardware" + ], + "custom-software": [ + "Entrust IdentityGuard" + ], + "custom-hardware": [ + "eGrid" + ], + "documentation": "https://www.entrust.com/knowledgebase/ssl/multifactor-authentication-faq", + "name": "Entrust" + }, + { + "domain": "envato.com", + "additional-domains": [ + "placeit.net" + ], + "tfa": [ + "totp" + ], + "documentation": "https://help.market.envato.com/hc/en-us/articles/115005592963", + "name": "Envato" + }, + { + "domain": "envoyer.io", + "tfa": [ + "totp" + ], + "documentation": "https://docs.envoyer.io/1.0/accounts/your-account.html#securing-your-account-with-two-factor-authentication", + "name": "Envoyer" + }, + { + "domain": "eon.de", + "tfa": [ + "totp" + ], + "name": "E.ON" + }, + { + "domain": "epayslips.co.uk", + "tfa": [ + "u2f", + "totp" + ], + "name": "Epayslips" + }, + { + "domain": "epicgames.com", + "additional-domains": [ + "fortnite.com", + "fallguys.com" + ], + "tfa": [ + "sms", + "email", + "totp" + ], + "documentation": "https://www.epicgames.com/help/en-US/c74/c112/a3218", + "name": "Epic Games" + }, + { + "domain": "epik.com", + "url": "https://www.epik.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.epik.com/hc/en-us/articles/10721574479771", + "name": "Epik" + }, + { + "domain": "erau.edu", + "tfa": [ + "sms", + "call", + "u2f", + "custom-software" + ], + "custom-software": [ + "Duo" + ], + "name": "Embry-Riddle Aeronautical University" + }, + { + "domain": "erstebank.hr", + "tfa": [ + "custom-software", + "custom-hardware" + ], + "custom-software": [ + "George App" + ], + "custom-hardware": [ + "Display card" + ], + "documentation": "https://www.erstebank.hr/hr/sigurnost#/modalComponent/isOpen/true/url/%2Fhr%2Fconfiguration%2Fleads%2Fsigurnost0%2Fsigurno-online-bankarenje.modal", + "name": "Erste Bank [HR]" + }, + { + "domain": "eset.com", + "tfa": [ + "totp" + ], + "documentation": "https://help.eset.com/home_eset/en-US/two_factor_authentication.html", + "name": "ESET HOME" + }, + { + "domain": "esri.com", + "url": "https://www.esri.com", + "tfa": [ + "totp" + ], + "documentation": "https://doc.arcgis.com/en/arcgis-online/reference/multifactor.htm", + "name": "Esri" + }, + { + "domain": "etana.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.etana.com/hc/en-us/articles/360053109333", + "name": "Etana Custody" + }, + { + "domain": "etoro.com", + "tfa": [ + "sms" + ], + "documentation": "https://www.etoro.com/en-us/customer-service/help/1281239912/-", + "name": "eToro" + }, + { + "domain": "etrade.com", + "url": "https://www.etrade.com/", + "tfa": [ + "custom-software", + "custom-hardware" + ], + "custom-software": [ + "Symantec VIP Access" + ], + "custom-hardware": [ + "Symantec hardware token" + ], + "documentation": "https://us.etrade.com/security-center/securityid", + "name": "E*Trade" + }, + { + "domain": "etsy.com", + "tfa": [ + "sms", + "call", + "totp" + ], + "documentation": "https://help.etsy.com/hc/en-us/articles/115015569567#h_01EZCBHFZHS7NBB4VA7NFE9YMX", + "name": "Etsy" + }, + { + "domain": "eufylife.com", + "tfa": [ + "email", + "sms" + ], + "documentation": "https://support.eufylife.com/s/article/Two-Step-Verification-for-eufySecurity-App", + "name": "eufySecurity" + }, + { + "domain": "eukhost.com", + "tfa": [ + "totp" + ], + "documentation": "https://www.eukhost.com/kb/how-to-enable-two-factor-authentication-2fa/", + "name": "eUKhost" + }, + { + "domain": "eurodns.com", + "url": "https://www.eurodns.com", + "tfa": [ + "totp" + ], + "documentation": "https://help.eurodns.com/s/article/how-do-i-activate-two-step-verification-on-my-account", + "name": "EuroDNS" + }, + { + "domain": "eveonline.com", + "url": "https://www.eveonline.com/", + "tfa": [ + "email", + "totp" + ], + "documentation": "https://support.eveonline.com/hc/en-us/articles/203465601", + "name": "EVE Online" + }, + { + "domain": "everlaw.com", + "tfa": [ + "email", + "totp" + ], + "documentation": "https://support.everlaw.com/hc/en-us/articles/206312165", + "name": "Everlaw" + }, + { + "domain": "evernote.com", + "tfa": [ + "sms", + "call", + "totp" + ], + "documentation": "https://help.evernote.com/hc/en-us/articles/208314238", + "notes": "SMS and phone call are always enabled as backup methods for TOTP.", + "name": "Evernote" + }, + { + "domain": "exact.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.exactonline.com/community/s/knowledge-base#All-All-HNO-Task-general-security-gen-auth-totpregphndsktpt", + "name": "Exact Online" + }, + { + "domain": "exmo.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://info.exmo.com/en/education/how-to-enable-2fa/", + "name": "Exmo" + }, + { + "domain": "expensify.com", + "tfa": [ + "totp" + ], + "documentation": "https://community.expensify.com/discussion/7385", + "name": "Expensify" + }, + { + "domain": "experian.co.uk", + "url": "https://www.experian.co.uk/", + "tfa": [ + "sms", + "call" + ], + "additional-domains": [ + "experian.com" + ], + "name": "Experian Ltd" + }, + { + "domain": "expo.dev", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://docs.expo.dev/accounts/two-factor/", + "name": "Expo" + }, + { + "domain": "expressvpn.com", + "url": "https://www.expressvpn.com", + "tfa": [ + "email" + ], + "name": "ExpressVPN" + }, + { + "domain": "f-secure.com", + "tfa": [ + "totp" + ], + "documentation": "https://community.f-secure.com/common-home-en/kb/articles/9144", + "name": "F-Secure" + }, + { + "domain": "facebook.com", + "additional-domains": [ + "messenger.com" + ], + "tfa": [ + "sms", + "totp", + "u2f" + ], + "documentation": "https://www.facebook.com/help/148233965247823", + "name": "Facebook" + }, + { + "domain": "faceit.com", + "url": "https://www.faceit.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.faceit.com/hc/en-us/articles/115000254670", + "name": "FaceIT" + }, + { + "domain": "fairwinds.org", + "url": "https://www.fairwinds.org", + "tfa": [ + "sms", + "call", + "email" + ], + "documentation": "https://www.fairwinds.org/inside/privacy/security_we.asp#multifactor-auth", + "name": "Fairwinds" + }, + { + "domain": "fakturoid.cz", + "tfa": [ + "totp" + ], + "documentation": "https://www.fakturoid.cz/podpora/nastaveni/dvoufazove-overeni", + "name": "Fakturoid" + }, + { + "domain": "fanatical.com", + "url": "https://www.fanatical.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.fanatical.com/hc/en-us/articles/360002761397", + "name": "Fanatical" + }, + { + "domain": "fandom.com", + "tfa": [ + "totp" + ], + "documentation": "https://community.fandom.com/wiki/Help:2FA", + "name": "Fandom" + }, + { + "domain": "fanduel.com", + "url": "https://www.fanduel.com/", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://www.fanduel.com/2fa-how-it-works", + "name": "FanDuel" + }, + { + "domain": "fastcomet.com", + "url": "https://www.fastcomet.com/", + "tfa": [ + "totp" + ], + "documentation": "https://www.fastcomet.com/tutorials/getting-started/enabling-two-factor-authentication", + "name": "FastComet" + }, + { + "domain": "fasthosts.co.uk", + "url": "https://www.fasthosts.co.uk/", + "tfa": [ + "totp" + ], + "documentation": "https://help.fasthosts.co.uk/app/answers/detail/a_id/3345", + "name": "Fasthosts" + }, + { + "domain": "fastly.com", + "url": "https://www.fastly.com", + "tfa": [ + "totp" + ], + "documentation": "https://docs.fastly.com/guides/account-management-and-security/enabling-and-disabling-two-factor-authentication", + "name": "Fastly" + }, + { + "domain": "fastmail.com", + "url": "https://www.fastmail.com/", + "tfa": [ + "sms", + "totp", + "custom-hardware", + "u2f" + ], + "custom-hardware": [ + "Yubico OTP" + ], + "documentation": "https://www.fastmail.com/help/account/2fa.html", + "notes": "Setup requires SMS verification.", + "name": "Fastmail" + }, + { + "domain": "fathomhq.com", + "url": "https://www.fathomhq.com/", + "tfa": [ + "totp", + "email", + "sms" + ], + "documentation": "https://support.fathomhq.com/en/articles/4483786", + "name": "Fathom" + }, + { + "domain": "faucetcrypto.com", + "tfa": [ + "totp" + ], + "name": "Faucet Crypto" + }, + { + "domain": "faucetpay.io", + "tfa": [ + "email", + "totp" + ], + "documentation": "https://faq.faucetpay.io/knowledge-base/what-is-2fa-and-how-do-i-enable-it-in-my-account/", + "name": "FaucetPay" + }, + { + "domain": "fauna.com", + "tfa": [ + "totp" + ], + "documentation": "https://docs.fauna.com/fauna/current/administration/multifactor_auth", + "name": "Fauna" + }, + { + "domain": "favro.com", + "tfa": [ + "totp" + ], + "documentation": "https://help.favro.com/en/articles/1019897", + "name": "Favro" + }, + { + "domain": "fax.plus", + "url": "https://www.fax.plus", + "tfa": [ + "totp" + ], + "documentation": "https://www.fax.plus/de/help/enable-disable-2fa", + "name": "FAX.PLUS" + }, + { + "domain": "fedex.com", + "tfa": [ + "sms", + "email" + ], + "name": "FedEx" + }, + { + "domain": "fi.google.com", + "tfa": [ + "sms", + "call", + "totp", + "custom-software", + "u2f" + ], + "custom-software": [ + "Google Prompts", + "Google Smart Lock" + ], + "documentation": "https://www.google.com/intl/en-US/landing/2step/features.html", + "name": "Google Fi" + }, + { + "domain": "fiber.google.com", + "tfa": [ + "sms", + "call", + "totp", + "custom-software", + "u2f" + ], + "custom-software": [ + "Google Prompts", + "Google Smart Lock" + ], + "documentation": "https://www.google.com/intl/en-US/landing/2step/features.html", + "name": "Google Fiber" + }, + { + "domain": "fidelity.com", + "url": "https://www.fidelity.com", + "tfa": [ + "sms", + "call", + "custom-software" + ], + "custom-software": [ + "Symantec VIP Access" + ], + "documentation": "https://www.fidelity.com/security/how-two-factor-authentication-works", + "notes": "Specific support varies between account types", + "name": "Fidelity Investments" + }, + { + "domain": "figma.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://help.figma.com/hc/en-us/articles/360039817634", + "name": "Figma" + }, + { + "domain": "filen.io", + "tfa": [ + "totp" + ], + "documentation": "https://support.filen.io/knowledgebase.php?article=20", + "name": "Filen" + }, + { + "domain": "files.com", + "tfa": [ + "sms", + "custom-hardware", + "u2f", + "totp" + ], + "custom-hardware": [ + "Yubico OTP" + ], + "documentation": "https://www.files.com/docs/features/twofactor-authentication-2fa", + "name": "Files.com" + }, + { + "domain": "finary.com", + "tfa": [ + "totp" + ], + "documentation": "https://help.finary.com/en/article/18z52w/", + "name": "Finary" + }, + { + "domain": "findmyshift.com", + "url": "https://www.findmyshift.com/", + "tfa": [ + "totp" + ], + "documentation": "https://www.findmyshift.com/help/what-is-two-factor-authentication", + "name": "Findmyshift" + }, + { + "domain": "finecobank.com", + "tfa": [ + "sms", + "custom-software" + ], + "custom-software": [ + "Fineco app" + ], + "documentation": "https://finecobank.com/it/online/sicurezza/", + "name": "Fineco Bank" + }, + { + "domain": "finnair.com", + "url": "https://www.finnair.com/", + "tfa": [ + "sms", + "totp" + ], + "name": "Finnair" + }, + { + "domain": "fio.cz", + "url": "https://www.fio.cz", + "tfa": [ + "sms", + "custom-software" + ], + "custom-software": [ + "Fio Smartbanking CZ" + ], + "documentation": "https://www.fio.cz/bank-services/internetbanking/security", + "name": "Fio banka" + }, + { + "domain": "firmex.com", + "url": "https://www.firmex.com/", + "tfa": [ + "totp", + "sms", + "email" + ], + "documentation": "https://support.firmex.com/hc/en-us/articles/204467648", + "notes": "2FA must be enabled by a site administrator before use.", + "name": "Firmex VDR" + }, + { + "domain": "firstcommunity.com", + "url": "https://www.firstcommunity.com/", + "tfa": [ + "sms", + "call", + "email" + ], + "documentation": "https://www.firstcommunityexpressnet.com/tob/live/usp-core/static/help.html#login_security", + "name": "First Community Credit Union" + }, + { + "domain": "firstdirect.com", + "url": "https://www2.firstdirect.com/", + "tfa": [ + "custom-software", + "custom-hardware" + ], + "custom-software": [ + "Digital Secure Key (first direct app)" + ], + "custom-hardware": [ + "Physical Secure Key" + ], + "documentation": "https://www1.firstdirect.com/help/secure-key/", + "name": "first direct" + }, + { + "domain": "firstrepublic.com", + "url": "https://www.firstrepublic.com/", + "tfa": [ + "sms", + "call", + "email" + ], + "documentation": "https://www.firstrepublic.com/resource/entering-a-6-digit-code-at-every-sign-in", + "name": "First Republic Bank" + }, + { + "domain": "firsttechfed.com", + "url": "https://www.firsttechfed.com/", + "tfa": [ + "custom-software", + "custom-hardware", + "sms", + "call", + "email" + ], + "custom-software": [ + "Entrust Identity Guard" + ], + "custom-hardware": [ + "Entrust Hardware Token" + ], + "documentation": "https://www.firsttechfed.com/help/security/prevent#multifunction", + "name": "First Tech Federal Credit Union" + }, + { + "domain": "fit.google.com", + "tfa": [ + "sms", + "call", + "totp", + "custom-software", + "u2f" + ], + "custom-software": [ + "Google Prompts", + "Google Smart Lock" + ], + "documentation": "https://www.google.com/intl/en-US/landing/2step/features.html", + "name": "Google Fit" + }, + { + "domain": "fitbit.com", + "url": "https://www.fitbit.com/", + "tfa": [ + "sms" + ], + "documentation": "https://help.fitbit.com/articles/en_US/Help_article/2197", + "name": "Fitbit" + }, + { + "domain": "fiverr.com", + "tfa": [ + "sms", + "email" + ], + "documentation": "https://www.fiverr.com/support/articles/360010239658", + "name": "Fiverr" + }, + { + "domain": "floatplane.com", + "url": "https://www.floatplane.com/", + "tfa": [ + "totp" + ], + "name": "Floatplane" + }, + { + "domain": "flourish.studio", + "tfa": [ + "totp" + ], + "documentation": "https://help.flourish.studio/article/362--", + "name": "Flourish" + }, + { + "domain": "fly.io", + "additional-domains": [ + "fly-metrics.net" + ], + "tfa": [ + "totp" + ], + "name": "Fly.io" + }, + { + "domain": "fogbugz.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.fogbugz.com/hc/en-us/articles/360011262434", + "name": "FogBugz" + }, + { + "domain": "followmyhealth.com", + "url": "https://www.followmyhealth.com/", + "tfa": [ + "sms", + "email", + "totp" + ], + "documentation": "https://support.followmyhealth.com/2020/03/10/turning-on-two-factor-authentication-while-logged-into-your-account/", + "name": "FollowMyHealth" + }, + { + "domain": "forge.laravel.com", + "tfa": [ + "totp" + ], + "documentation": "https://forge.laravel.com/docs/1.0/accounts/your-account.html#securing-your-account-with-two-factor-authentication", + "name": "Laravel Forge" + }, + { + "domain": "formsite.com", + "url": "https://www.formsite.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.formsite.com/hc/en-us/articles/360000686614", + "notes": "2FA is only available for Pro 3 accounts or higher.", + "name": "Formsite" + }, + { + "domain": "formspree.io", + "tfa": [ + "totp" + ], + "documentation": "https://help.formspree.io/hc/articles/4407875207187", + "name": "Formspree" + }, + { + "domain": "formstack.com", + "url": "https://www.formstack.com/", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://help.formstack.com/s/article/Two-Factor-Authentication", + "name": "Formstack" + }, + { + "domain": "fortrabbit.com", + "url": "https://www.fortrabbit.com/", + "tfa": [ + "totp" + ], + "documentation": "https://help.fortrabbit.com/account#toc-setting-up-2fa", + "name": "fortrabbit" + }, + { + "domain": "foursquare.com", + "tfa": [ + "sms", + "email" + ], + "documentation": "https://foursquare.atlassian.net/servicedesk/customer/portal/20/article/3355476115", + "name": "Foursquare" + }, + { + "domain": "fpmarkets.com", + "additional-domains": [ + "fpmarkets.eu" + ], + "tfa": [ + "sms" + ], + "documentation": "https://www.youtube.com/watch?v=aEXDRisRtUs", + "name": "FP Markets" + }, + { + "domain": "fragdenstaat.de", + "tfa": [ + "totp", + "u2f" + ], + "documentation": "https://fragdenstaat.de/hilfe/ihr-konto-verwalten/zwei-faktor-login/", + "name": "FragDenStaat" + }, + { + "domain": "frame.io", + "url": "https://www.frame.io/", + "tfa": [ + "totp", + "sms" + ], + "documentation": "https://support.frame.io/en/articles/4766302", + "notes": "2FA is only available for Enterprise users with mandated 2FA.", + "name": "Frame" + }, + { + "domain": "freeagent.com", + "url": "https://www.freeagent.com", + "tfa": [ + "totp" + ], + "documentation": "https://www.freeagent.com/support/kb/getting-started/two-step-verification", + "name": "FreeAgent" + }, + { + "domain": "freedommobile.ca", + "tfa": [ + "sms", + "email" + ], + "name": "Freedom Mobile" + }, + { + "domain": "freehostia.com", + "tfa": [ + "totp", + "email" + ], + "name": "Freehostia" + }, + { + "domain": "freelancer.com", + "url": "https://www.freelancer.com/", + "tfa": [ + "sms", + "email" + ], + "documentation": "https://www.freelancer.com/support/general/2-step-verification", + "name": "Freelancer" + }, + { + "domain": "freetaxusa.com", + "url": "https://www.freetaxusa.com/", + "tfa": [ + "sms", + "call", + "email", + "totp" + ], + "documentation": "https://www.freetaxusa.com/faqsearch?search_keyword=authentication", + "name": "FreeTaxUSA" + }, + { + "domain": "freewallet.org", + "tfa": [ + "totp" + ], + "documentation": "https://freewallet.org/blog/2fa-faq", + "name": "Freewallet" + }, + { + "domain": "freshworks.com", + "url": "https://www.freshworks.com/", + "tfa": [ + "totp" + ], + "documentation": "https://support.freshworks.com/support/solutions/articles/50000001025", + "name": "Freshworks" + }, + { + "domain": "frontapp.com", + "tfa": [ + "totp" + ], + "documentation": "https://help.frontapp.com/t/36249g", + "name": "Front App" + }, + { + "domain": "frontify.com", + "url": "https://www.frontify.com", + "tfa": [ + "totp" + ], + "documentation": "https://help.frontify.com/en/articles/3947094", + "notes": "2FA is only available for Enterprise users with a security package.", + "name": "Frontify" + }, + { + "domain": "gaijin.net", + "tfa": [ + "sms", + "email", + "totp", + "custom-software" + ], + "custom-software": [ + "Gaijin Pass" + ], + "documentation": "https://support.gaijin.net/hc/en-us/articles/203623622", + "notes": "Software 2FA requires linking a phone number.", + "name": "Gaijin Entertainment" + }, + { + "domain": "galaxus.ch", + "url": "https://www.galaxus.ch/", + "tfa": [ + "totp" + ], + "documentation": "https://www.galaxus.ch/en/page/6589", + "name": "Galaxus" + }, + { + "domain": "gamemaker.io", + "additional-domains": [ + "yoyogames.com" + ], + "tfa": [ + "email", + "totp" + ], + "documentation": "https://help.yoyogames.com/hc/en-us/articles/216757288", + "name": "GameMaker" + }, + { + "domain": "gandi.net", + "tfa": [ + "totp", + "u2f" + ], + "documentation": "https://docs.gandi.net/en/account_management/security/", + "name": "Gandi" + }, + { + "domain": "garena.sg", + "url": "https://www.garena.sg/", + "tfa": [ + "custom-software" + ], + "custom-software": [ + "Garena Authenticator" + ], + "notes": "A mobile phone is required for 2FA.", + "name": "Garena Online" + }, + { + "domain": "garmin.com", + "tfa": [ + "sms", + "email" + ], + "documentation": "https://support.garmin.com/en-GB/?faq=uGHS8ZqOIhA0usBzBMdJu7", + "name": "Garmin" + }, + { + "domain": "gate.io", + "tfa": [ + "sms", + "email", + "totp" + ], + "documentation": "https://www.gate.io/help/question/16445", + "name": "Gate.io" + }, + { + "domain": "gatech.edu", + "tfa": [ + "call", + "sms", + "custom-software", + "u2f" + ], + "custom-software": [ + "Duo" + ], + "documentation": "https://oit.gatech.edu/two-factor-authentication", + "name": "Georgia Institute of Technology" + }, + { + "domain": "gatehub.net", + "tfa": [ + "totp" + ], + "documentation": "https://support.gatehub.net/hc/en-us/articles/360021168234", + "name": "Gatehub" + }, + { + "domain": "geforce.com", + "additional-domains": [ + "nvidia.com", + "login.nvgs.nvidia.com" + ], + "tfa": [ + "email", + "totp", + "u2f" + ], + "documentation": "https://login.nvgs.nvidia.com/v1/help/nfactor", + "notes": "Email 2FA is always enabled.", + "name": "GeForce (Nvidia)" + }, + { + "domain": "geico.com", + "tfa": [ + "sms", + "email" + ], + "documentation": "https://www.geico.com/web-and-mobile/2SV/", + "name": "Geico" + }, + { + "domain": "gemini.com", + "tfa": [ + "sms", + "custom-software", + "u2f" + ], + "custom-software": [ + "Authy" + ], + "documentation": "https://support.gemini.com/hc/en-us/articles/204732985", + "name": "Gemini" + }, + { + "domain": "geotrust.com", + "url": "https://www.geotrust.com/", + "tfa": [ + "email" + ], + "name": "GeoTrust" + }, + { + "domain": "getflywheel.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://getflywheel.com/wordpress-support/how-to-enable-two-factor-authentication-on-flywheel", + "name": "Flywheel" + }, + { + "domain": "getpocket.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.mozilla.org/en-US/kb/secure-firefox-account-two-step-authentication", + "name": "Pocket" + }, + { + "domain": "getscreen.me", + "tfa": [ + "email", + "custom-software", + "totp" + ], + "custom-software": [ + "Telegram" + ], + "documentation": "https://getscreen.me/en/docs/dashboard#account-authentication", + "name": "Getscreen.me" + }, + { + "domain": "github.com", + "tfa": [ + "sms", + "totp", + "custom-software", + "u2f" + ], + "custom-software": [ + "GitHub Mobile" + ], + "documentation": "https://docs.github.com/en/github/authenticating-to-github/securing-your-account-with-two-factor-authentication-2fa/configuring-two-factor-authentication", + "notes": "Hardware tokens must have a backup method, either SMS or software token.", + "name": "GitHub" + }, + { + "domain": "gitlab.com", + "tfa": [ + "totp", + "u2f" + ], + "documentation": "https://docs.gitlab.com/ee/user/profile/account/two_factor_authentication.html", + "name": "GitLab" + }, + { + "domain": "glassdoor.com", + "tfa": [ + "totp", + "sms" + ], + "documentation": "https://help.glassdoor.com/article/Manage-Two-Factor-Authentication/", + "name": "Glassdoor" + }, + { + "domain": "gls.de", + "url": "https://www.gls.de/", + "tfa": [ + "custom-software", + "custom-hardware" + ], + "custom-software": [ + "SecureGo plus" + ], + "custom-hardware": [ + "Sm@rtTAN" + ], + "documentation": "https://www.gls.de/privatkunden/faq/onlinebanking/was-ist-die-zwei-faktor-authentifizierung-2fa-1/", + "name": "GLS Gemeinschaftsbank" + }, + { + "domain": "gm.com", + "additional-domains": [ + "chevrolet.com", + "buick.com", + "gmc.com", + "cadillac.com" + ], + "tfa": [ + "sms", + "email", + "totp" + ], + "notes": "Automatically turned on for email. You are only allowed to have one method turned on at a time.", + "name": "General Motors" + }, + { + "domain": "gmx.com", + "url": "https://www.gmx.com/", + "tfa": [ + "totp" + ], + "documentation": "https://support.gmx.com/security/2fa/setup-twofactor.html#indexlink_help_security_2fa", + "notes": "Setup requires SMS verification.", + "name": "GMX.com" + }, + { + "domain": "gmx.net", + "url": "https://www.gmx.net/", + "additional-domains": [ + "gmx.at" + ], + "tfa": [ + "totp" + ], + "documentation": "https://hilfe.gmx.net/sicherheit/2fa/einrichten.html", + "notes": "Setup requires SMS verification.", + "name": "GMX.net" + }, + { + "domain": "go.wepay.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://support.wepay.com/hc/en-us/articles/203609693", + "name": "WePay" + }, + { + "domain": "goabode.com", + "additional-domains": [ + "goabode.co.uk", + "abode.mx" + ], + "tfa": [ + "totp" + ], + "documentation": "https://support.goabode.com/docs/two-factor-authentication", + "name": "Abode" + }, + { + "domain": "gocardless.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://support.gocardless.com/hc/en-gb/articles/360001164385", + "name": "GoCardless" + }, + { + "domain": "godaddy.com", + "url": "https://www.godaddy.com/", + "tfa": [ + "sms", + "totp", + "u2f" + ], + "documentation": "https://www.godaddy.com/help/enable-two-step-verification-7502", + "notes": "If hardware 2FA enabled, customer support by phone requires enabling back-up method.", + "name": "GoDaddy" + }, + { + "domain": "gofundme.com", + "url": "https://www.gofundme.com/", + "tfa": [ + "sms", + "call" + ], + "documentation": "https://support.gofundme.com/hc/en-us/articles/360001980947", + "notes": "2FA only for North American customers that create Personal campaigns.", + "name": "GoFundMe" + }, + { + "domain": "gog.com", + "url": "https://www.gog.com", + "tfa": [ + "email" + ], + "documentation": "https://support.gog.com/hc/en-us/articles/115003660533", + "name": "GOG.com" + }, + { + "domain": "gopro.com", + "tfa": [ + "sms" + ], + "documentation": "https://community.gopro.com/t5/en/Setting-Up-Two-Step-Verification/ta-p/395873", + "notes": "2FA only applies on the GoPro website, not the app.", + "name": "GoPro" + }, + { + "domain": "gosquared.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://www.gosquared.com/support/articles/6493653", + "name": "GoSquared" + }, + { + "domain": "gosuslugi.ru", + "tfa": [ + "sms", + "totp", + "custom-hardware" + ], + "custom-hardware": [ + "Electronic Digital Signature (EDS) device" + ], + "documentation": "https://www.gosuslugi.ru/help/faq/login/101923", + "name": "\u0413\u043e\u0441\u0443\u0441\u043b\u0443\u0433\u0438 (Gosuslugi)" + }, + { + "domain": "goteleport.com", + "tfa": [ + "totp", + "u2f" + ], + "documentation": "https://goteleport.com/docs/access-controls/guides/webauthn/", + "name": "Teleport" + }, + { + "domain": "goto.com", + "additional-domains": [ + "logme.in", + "logmein.com", + "logmeininc.com" + ], + "tfa": [ + "totp" + ], + "documentation": "https://support.goto.com/meeting/help/how-do-i-set-up-and-use-multi-factor-authentication-for-my-gotomeeting-account", + "name": "GoTo" + }, + { + "domain": "gradintel.com", + "tfa": [ + "email", + "totp" + ], + "name": "Gradintelligence" + }, + { + "domain": "grammarly.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://support.grammarly.com/hc/en-us/articles/360032922091", + "notes": "SMS-capable phone is required.", + "name": "Grammarly" + }, + { + "domain": "greengeeks.com", + "tfa": [ + "totp" + ], + "documentation": "https://www.greengeeks.com/support/article/two-factor-authentication-greengeeks/", + "name": "GreenGeeks" + }, + { + "domain": "greenhost.net", + "tfa": [ + "totp" + ], + "documentation": "https://greenhost.net/blog/2016/03/01/spring-news-2-factor-authentication-service-center-haproxy-plugin-for-let-s-encrypt-and-more/", + "name": "Greenhost" + }, + { + "domain": "greenmangaming.com", + "tfa": [ + "email" + ], + "documentation": "https://greenmangaming.zendesk.com/hc/en-us/articles/360024393612", + "name": "Green Man Gaming" + }, + { + "domain": "groupme.com", + "tfa": [ + "sms" + ], + "documentation": "https://support.microsoft.com/en-us/office/30a7b8fd-5052-4b6f-aa10-85c1560cdf59", + "name": "GroupMe" + }, + { + "domain": "groups.io", + "tfa": [ + "totp" + ], + "documentation": "https://groups.io/helpcenter/membersmanual/1/understanding-groups-io-accounts/setting-account-preferences-and-viewing-account-information", + "name": "Groups.io" + }, + { + "domain": "growingio.com", + "tfa": [ + "totp" + ], + "documentation": "https://docs.growingio.com/v3/product-manual/personal/security", + "name": "GrowingIO" + }, + { + "domain": "guideline.com", + "url": "https://www.guideline.com", + "tfa": [ + "totp" + ], + "documentation": "https://success.guideline.com/hc/articles/360034791412", + "name": "Guideline" + }, + { + "domain": "guilded.gg", + "url": "https://www.guilded.gg", + "tfa": [ + "totp" + ], + "documentation": "https://support.guilded.gg/hc/en-us/articles/1500008991902", + "name": "Guilded" + }, + { + "domain": "guildwars2.com", + "additional-domains": [ + "arena.net" + ], + "url": "https://www.guildwars2.com", + "tfa": [ + "email", + "sms", + "totp" + ], + "documentation": "https://help.guildwars2.com/hc/en-us/articles/230672927", + "name": "Guild Wars 2" + }, + { + "domain": "gumroad.com", + "tfa": [ + "email" + ], + "documentation": "https://help.gumroad.com/article/292--", + "name": "Gumroad" + }, + { + "domain": "gusto.com", + "url": "https://www.gusto.com", + "tfa": [ + "sms", + "call", + "totp" + ], + "documentation": "https://support.gusto.com/1066223171", + "name": "Gusto" + }, + { + "domain": "hackerone.com", + "tfa": [ + "totp" + ], + "documentation": "https://docs.hackerone.com/hackers/two-factor-authentication.html", + "notes": "SMS-capable phone required for initial setup.", + "name": "HackerOne" + }, + { + "domain": "hackthebox.com", + "additional-domains": [ + "hackthebox.eu" + ], + "tfa": [ + "totp" + ], + "documentation": "https://help.hackthebox.com/articles/5185265", + "name": "Hack The Box" + }, + { + "domain": "halebop.se", + "tfa": [ + "custom-software" + ], + "custom-software": [ + "BankID" + ], + "name": "Halebop" + }, + { + "domain": "halifax.co.uk", + "additional-domains": [ + "halifax-online.co.uk" + ], + "tfa": [ + "call", + "sms" + ], + "documentation": "https://www.halifax.co.uk/aboutonline/changes-to-online-banking/", + "name": "Halifax" + }, + { + "domain": "hallon.se", + "tfa": [ + "custom-software" + ], + "custom-software": [ + "BankID" + ], + "name": "Hallon" + }, + { + "domain": "handelsbanken.se", + "tfa": [ + "custom-software" + ], + "custom-software": [ + "BankID" + ], + "documentation": "https://www.handelsbanken.se/shb/INeT/ICentSv.nsf/Default/qAE99695C4C1D033DC12579120036EB43?Opendocument", + "name": "Handelsbanken" + }, + { + "domain": "hanseaticbank.de", + "url": "https://www.hanseaticbank.de/", + "tfa": [ + "sms" + ], + "documentation": "https://www.hanseaticbank.de/services/alle-faqs/psd2", + "name": "Hanseatic Bank" + }, + { + "domain": "happyfox.com", + "url": "https://www.happyfox.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.happyfox.com/kb/article/709--", + "name": "HappyFox" + }, + { + "domain": "harvard.edu", + "url": "https://www.harvard.edu", + "tfa": [ + "sms", + "call", + "custom-software", + "custom-hardware" + ], + "custom-software": [ + "Duo" + ], + "custom-hardware": [ + "Yubico OTP" + ], + "documentation": "https://huit.harvard.edu/twostep", + "name": "Harvard University" + }, + { + "domain": "hatchinvest.nz", + "tfa": [ + "totp" + ], + "documentation": "https://help.hatchinvest.nz/en/articles/2996776", + "name": "Hatch" + }, + { + "domain": "he.net", + "url": "https://www.he.net/", + "tfa": [ + "totp" + ], + "name": "Hurricane Electric" + }, + { + "domain": "healthcare.gov", + "tfa": [ + "sms", + "call", + "email" + ], + "documentation": "https://www.healthcare.gov/how-can-i-protect-myself-from-fraud-in-the-health-insurance-marketplace/", + "name": "Healthcare.gov" + }, + { + "domain": "heap.io", + "tfa": [ + "totp" + ], + "documentation": "https://help.heap.io/heap-administration/secure-access/2fa/", + "notes": "2FA is only available for users on the Business plan.", + "name": "Heap" + }, + { + "domain": "hello.vrchat.com", + "tfa": [ + "totp" + ], + "documentation": "https://docs.vrchat.com/docs/setup-2fa", + "name": "VRChat" + }, + { + "domain": "hellobonsai.com", + "tfa": [ + "email", + "sms" + ], + "documentation": "https://headwayapp.co/bonsai-updates/254093", + "name": "Bonsai" + }, + { + "domain": "hellosign.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://faq.hellosign.com/hc/en-us/articles/360025164091", + "notes": "SMS Two-factor authentication is only available to paid Business plan senders and above.", + "name": "Dropbox Sign" + }, + { + "domain": "hellostake.com", + "additional-domains": [ + "stake.com.au" + ], + "tfa": [ + "totp" + ], + "documentation": "https://hellostake.com/au/support/wall-st/articles/35000152372", + "name": "Stake" + }, + { + "domain": "helpscout.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://docs.helpscout.com/article/907--", + "name": "Help Scout" + }, + { + "domain": "heroku.com", + "tfa": [ + "totp", + "custom-software", + "custom-hardware", + "u2f" + ], + "custom-software": [ + "Salesforce Authenticator" + ], + "custom-hardware": [ + "Built-in Authenticator (Biometrics)" + ], + "documentation": "https://devcenter.heroku.com/articles/multi-factor-authentication", + "name": "Heroku" + }, + { + "domain": "hetzner.com", + "url": "https://www.hetzner.com", + "tfa": [ + "totp", + "custom-hardware" + ], + "custom-hardware": [ + "Yubico OTP" + ], + "documentation": "https://docs.hetzner.com/accounts-panel/accounts/two-factor-authentication/", + "name": "Hetzner" + }, + { + "domain": "hevodata.com", + "url": "https://www.hevodata.com", + "tfa": [ + "totp" + ], + "documentation": "https://docs.hevodata.com/account-management/personal-settings/two-factor-authentication/", + "name": "Hevo Data" + }, + { + "domain": "hexonet.net", + "url": "https://www.hexonet.net/", + "tfa": [ + "totp" + ], + "documentation": "https://www.hexonet.net/assets/pdf/2FA.pdf", + "name": "Hexonet" + }, + { + "domain": "hey.com", + "tfa": [ + "totp", + "u2f" + ], + "documentation": "https://hey.com/security/", + "name": "HEY" + }, + { + "domain": "hide.me", + "tfa": [ + "totp" + ], + "documentation": "https://hide.me/en/blog/hide-me-vpn-now-supports-2fa/", + "name": "hide.me VPN" + }, + { + "domain": "hidrive.com", + "tfa": [ + "totp" + ], + "documentation": "https://www.strato.de/faq/cloud-speicher/2-Faktor-Authentifizierung/", + "name": "HiDrive (STRATO)" + }, + { + "domain": "hilton.com", + "tfa": [ + "sms", + "email" + ], + "documentation": "https://help.hilton.com/s/article/What-is-enhanced-security-2FA-on-my-account", + "name": "Hilton Honors" + }, + { + "domain": "hint.com", + "url": "https://www.hint.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.hint.com/en/articles/2360627", + "name": "Hint Health" + }, + { + "domain": "hirezstudios.com", + "url": "https://www.hirezstudios.com/", + "tfa": [ + "email", + "sms" + ], + "name": "Hi-Rez Studios" + }, + { + "domain": "hitbtc.com", + "url": "https://www.hitbtc.com/", + "tfa": [ + "totp" + ], + "documentation": "https://support.hitbtc.com/en/support/solutions/articles/63000224976", + "name": "HitBTC" + }, + { + "domain": "hivehome.com", + "tfa": [ + "sms" + ], + "documentation": "https://community.hivehome.com/s/article/What-is-Two-Factor-Authentication-and-how-do-I-set-it-up", + "name": "Hive" + }, + { + "domain": "hl.co.uk", + "tfa": [ + "sms", + "call" + ], + "documentation": "https://www.hl.co.uk/help/managing-your-online-account/passwords-and-security/passwords/how-do-i-log-in", + "name": "Hargreaves Lansdown" + }, + { + "domain": "hmc.edu", + "tfa": [ + "sms", + "call", + "u2f", + "custom-hardware", + "custom-software" + ], + "custom-hardware": [ + "Duo D100 Token" + ], + "custom-software": [ + "Duo" + ], + "documentation": "https://www.hmc.edu/cis/duo-two-factor-authentication/", + "name": "Harvey Mudd College" + }, + { + "domain": "hmrc.gov.uk", + "tfa": [ + "sms", + "call", + "totp" + ], + "documentation": "https://www.gov.uk/government/publications/genuine-hmrc-contact-and-recognising-phishing-emails/genuine-hmrc-contact-and-recognising-phishing-emails#hmrc-short-message-service-text-messages", + "name": "HMRC" + }, + { + "domain": "holded.com", + "tfa": [ + "sms" + ], + "documentation": "https://academy.holded.com/hc/en-us/articles/4403375077265", + "name": "Holded" + }, + { + "domain": "holvi.com", + "url": "https://www.holvi.com/", + "tfa": [ + "custom-software" + ], + "custom-software": [ + "Holvi app" + ], + "documentation": "https://support.holvi.com/hc/en-gb/articles/360002711557", + "notes": "Setup requires SMS verification.", + "name": "Holvi" + }, + { + "domain": "home-assistant.io", + "tfa": [ + "totp" + ], + "documentation": "https://www.home-assistant.io/docs/authentication/multi-factor-auth/", + "name": "Home Assistant" + }, + { + "domain": "home.saxo", + "url": "https://www.home.saxo/", + "additional-domains": [ + "saxotrader.com" + ], + "tfa": [ + "totp" + ], + "documentation": "https://www.help.saxo/hc/en-us/articles/360038307372", + "name": "Saxo Bank" + }, + { + "domain": "home.sophos.com", + "additional-domains": [ + "my.sophos.com" + ], + "tfa": [ + "totp", + "email", + "sms" + ], + "documentation": "https://support.home.sophos.com/hc/en-us/articles/360032204471", + "notes": "Email and SMS 2FA can only be enabled as backup methods.", + "name": "Sophos Home" + }, + { + "domain": "honeybadger.io", + "url": "https://www.honeybadger.io/", + "tfa": [ + "totp" + ], + "documentation": "https://www.honeybadger.io/blog/account-security-updates/#how-to-enable", + "name": "Honeybadger" + }, + { + "domain": "hootsuite.com", + "tfa": [ + "totp", + "email" + ], + "documentation": "https://help.hootsuite.com/hc/en-us/articles/1260804307989", + "notes": "Email is always enabled as backup method for Software Token.", + "name": "HootSuite" + }, + { + "domain": "hostek.com", + "additional-domains": [ + "hostek.co.uk" + ], + "tfa": [ + "totp" + ], + "documentation": "https://wiki.hostek.com/Client_Area_-_Two_Factor_Authentication", + "name": "Hostek" + }, + { + "domain": "hostens.com", + "url": "https://www.hostens.com/", + "tfa": [ + "totp" + ], + "documentation": "https://www.hostens.com/knowledgebase/how-to-enhance-account-security/", + "name": "Hostens" + }, + { + "domain": "hosteurope.de", + "url": "https://www.hosteurope.de/", + "tfa": [ + "sms" + ], + "documentation": "https://www.hosteurope.de/faq/kis/allgemeines0/wo-kann-ich-passworte-neu-vergeben/", + "name": "Host Europe" + }, + { + "domain": "hostinger.com", + "url": "https://www.hostinger.com/", + "tfa": [ + "totp", + "email" + ], + "documentation": "https://support.hostinger.com/articles/4888148", + "notes": "You can only have one 2FA option enabled at a time.", + "name": "Hostinger" + }, + { + "domain": "hostiso.com", + "tfa": [ + "totp" + ], + "notes": "While both the main client area and the shared hosting panel support 2FA, each system is separate and requires its own setup.", + "name": "Hostiso" + }, + { + "domain": "hostmonster.com", + "tfa": [ + "totp", + "email" + ], + "documentation": "https://my.hostmonster.com/cgi/help/two-factor-authentication", + "name": "HostMonster" + }, + { + "domain": "hostplus.com.au", + "tfa": [ + "sms", + "call" + ], + "documentation": "https://hostplus.com.au/secure-your-account", + "name": "Hostplus" + }, + { + "domain": "hostpoint.ch", + "url": "https://www.hostpoint.ch/", + "tfa": [ + "totp", + "sms" + ], + "documentation": "https://support.hostpoint.ch/en/administrative/hostpoint-id/general-questions-about-two-factor-authentication", + "name": "Hostpoint" + }, + { + "domain": "hostus.us", + "tfa": [ + "totp" + ], + "documentation": "https://my.hostus.us/knowledgebase/106", + "name": "HostUS" + }, + { + "domain": "hostwinds.com", + "additional-domains": [ + "hostwinds.co.uk", + "hostwinds.in", + "hostwinds.ng", + "hostwinds.cn", + "hostwinds.de", + "hostwinds.es", + "hostwinds.pt", + "hostwinds.fr", + "hostwinds.ru", + "hostwinds.nl", + "hostwinds.kr", + "hostwinds.it", + "hostwinds.ae" + ], + "tfa": [ + "totp" + ], + "name": "Hostwinds" + }, + { + "domain": "hotjar.com", + "tfa": [ + "totp" + ], + "documentation": "https://help.hotjar.com/hc/en-us/articles/4406998019223", + "notes": "2FA is not available for SAML SSO logins", + "name": "Hotjar" + }, + { + "domain": "hover.com", + "url": "https://www.hover.com/", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://help.hover.com/hc/en-us/articles/217282267", + "name": "Hover.com" + }, + { + "domain": "hp.com", + "tfa": [ + "totp" + ], + "name": "HP" + }, + { + "domain": "hrblock.com", + "url": "https://www.hrblock.com/", + "tfa": [ + "email", + "totp", + "sms" + ], + "name": "H&R Block" + }, + { + "domain": "hsbc.co.uk", + "tfa": [ + "custom-software", + "custom-hardware" + ], + "custom-software": [ + "HSBC UK Mobile Banking" + ], + "custom-hardware": [ + "HSBC Physical Secure Key" + ], + "documentation": "https://www.hsbc.co.uk/help/security-centre/secure-key/secure-key-help/", + "name": "HSBC [UK]" + }, + { + "domain": "huaweicloud.com", + "tfa": [ + "sms", + "email", + "totp" + ], + "documentation": "https://support.huaweicloud.com/intl/en-us/usermanual-iam/iam_10_0002.html", + "name": "Huawei Cloud" + }, + { + "domain": "hubspot.com", + "url": "https://www.hubspot.com/", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://knowledge.hubspot.com/articles/kcs_article/account/how-can-i-set-up-two-factor-authentication-for-my-hubspot-login", + "name": "HubSpot" + }, + { + "domain": "huk.de", + "tfa": [ + "sms", + "call" + ], + "name": "HUK-Coburg" + }, + { + "domain": "huk24.de", + "tfa": [ + "sms" + ], + "documentation": "https://www.huk24.de/unsere-services/login-und-mehr#spr05", + "name": "HUK24" + }, + { + "domain": "humblebundle.com", + "url": "https://www.humblebundle.com/", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://support.humblebundle.com/hc/en-us/articles/202421374", + "name": "Humble Bundle" + }, + { + "domain": "huntington.com", + "url": "https://www.huntington.com", + "tfa": [ + "call", + "sms", + "email" + ], + "name": "Huntington National Bank" + }, + { + "domain": "huobi.com", + "url": "https://www.huobi.com/", + "tfa": [ + "email", + "sms", + "totp" + ], + "documentation": "https://huobiglobal.zendesk.com/hc/en-us/articles/360000191282", + "name": "Huobi" + }, + { + "domain": "hushmail.com", + "url": "https://www.hushmail.com", + "tfa": [ + "sms", + "email", + "totp" + ], + "documentation": "https://help.hushmail.com/hc/en-us/articles/213268943", + "name": "Hushmail" + }, + { + "domain": "hva.nl", + "tfa": [ + "call", + "totp" + ], + "documentation": "https://student.hva.nl/az-lemmas/studenten/hva-breed/its-si/tweestapsverificatie/2-stapsverificatie.html", + "name": "Hogeschool van Amsterdam" + }, + { + "domain": "hype.it", + "url": "https://www.hype.it", + "tfa": [ + "sms" + ], + "name": "HYPE" + }, + { + "domain": "hypixel.net", + "tfa": [ + "email", + "totp" + ], + "documentation": "https://support.hypixel.net/hc/en-us/articles/360019538060", + "name": "Hypixel" + }, + { + "domain": "hypovereinsbank.de", + "tfa": [ + "sms", + "custom-software", + "custom-hardware" + ], + "custom-hardware": [ + "photoTAN card reader" + ], + "custom-software": [ + "HVB Mobile Banking" + ], + "documentation": "https://www.hypovereinsbank.de/hvb/services/digitales-banking/psd2/tan-verfahren", + "name": "HypoVereinsbank" + }, + { + "domain": "icabanken.se", + "tfa": [ + "custom-software" + ], + "custom-software": [ + "BankID" + ], + "documentation": "https://www.icabanken.se/kundservice/hjalp-med-att-logga-in/", + "name": "ICA Banken" + }, + { + "domain": "icdsoft.com", + "url": "https://www.icdsoft.com", + "tfa": [ + "totp" + ], + "documentation": "https://tickets.suresupport.com/faq/article-1700", + "name": "ICDSoft" + }, + { + "domain": "icedrive.net", + "tfa": [ + "sms", + "totp", + "u2f" + ], + "documentation": "https://twitter.com/icedrivecloud/status/1412044506447364097", + "name": "Icedrive" + }, + { + "domain": "icicibank.com", + "url": "https://www.icicibank.com", + "tfa": [ + "sms" + ], + "documentation": "https://www.icicibank.com/online-safe-banking/otp.page", + "name": "ICICI" + }, + { + "domain": "icloud.com", + "tfa": [ + "sms", + "call", + "u2f", + "custom-software" + ], + "custom-software": [ + "Apple Device Push Notification" + ], + "documentation": "https://support.apple.com/en-us/HT204915", + "notes": "U2F requires a minimum of two security keys to be registered.", + "name": "Apple iCloud" + }, + { + "domain": "id.atlassian.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://support.atlassian.com/atlassian-account/docs/manage-two-step-verification-for-your-atlassian-account/", + "name": "Atlassian Cloud" + }, + { + "domain": "id.me", + "tfa": [ + "sms", + "call", + "totp", + "u2f", + "custom-software" + ], + "custom-software": [ + "ID.me Authenticator" + ], + "documentation": "https://help.id.me/hc/en-us/articles/360018113053", + "name": "ID.me" + }, + { + "domain": "idrive.com", + "url": "https://www.idrive.com", + "tfa": [ + "sms", + "email", + "totp" + ], + "documentation": "https://www.idrive.com/online-backup-web-faq#twostep", + "name": "IDrive" + }, + { + "domain": "ifttt.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://help.ifttt.com/hc/en-us/articles/115010193007", + "name": "IFTTT" + }, + { + "domain": "ig.com", + "url": "https://www.ig.com", + "tfa": [ + "custom-software" + ], + "custom-software": [ + "IG Authentication" + ], + "documentation": "https://www.ig.com/uk/help-and-support/accounts-and-statements/my-accounts/how-do-i-set-up-two-factor-authentication", + "name": "IG" + }, + { + "domain": "immobilienscout24.de", + "url": "https://www.immobilienscout24.de", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://sicherheit.immobilienscout24.de/2-faktor-authentifizierung.html", + "notes": "SMS is only available to commercial real estate providers.", + "name": "ImmobilienScout24" + }, + { + "domain": "immowelt.de", + "url": "https://www.immowelt.de/", + "tfa": [ + "email" + ], + "documentation": "https://support.immowelt.de/immoweltde/faq/gewerbliche-anbieter/meine-immowelt/sichere-anmeldung.html", + "notes": "2FA is only available for commercial partners.", + "name": "Immowelt" + }, + { + "domain": "imperva.com", + "url": "https://www.imperva.com/", + "tfa": [ + "sms", + "email", + "totp" + ], + "documentation": "https://docs.imperva.com/bundle/cloud-application-security/page/settings/account-settings.htm", + "name": "Imperva" + }, + { + "domain": "improvmx.com", + "tfa": [ + "totp" + ], + "documentation": "http://help.improvmx.com/en/articles/4892466", + "name": "ImprovMX" + }, + { + "domain": "indeed.com", + "url": "https://www.indeed.com/", + "tfa": [ + "sms", + "call" + ], + "documentation": "https://www.indeed.com/lead/two-factor-authentication", + "name": "Indeed" + }, + { + "domain": "independentreserve.com", + "tfa": [ + "totp", + "sms" + ], + "documentation": "https://blog.independentreserve.com/knowledge-base/setting-up-2fa-using-google-authenticator", + "name": "Independent Reserve" + }, + { + "domain": "independer.nl", + "tfa": [ + "email", + "totp" + ], + "name": "Independer" + }, + { + "domain": "infinity.co", + "url": "https://www.infinity.co", + "tfa": [ + "sms" + ], + "documentation": "https://www.infinity.co/knowledge-base/article/2-factor-authentication", + "name": "Infinity" + }, + { + "domain": "infobip.com", + "url": "https://www.infobip.com/", + "tfa": [ + "sms", + "call" + ], + "documentation": "https://www.infobip.com/news/increased-portal-account-security-with-2-factor-authentication", + "name": "Infobip" + }, + { + "domain": "infomaniak.com", + "url": "https://www.infomaniak.com/", + "tfa": [ + "sms", + "totp", + "custom-software" + ], + "custom-software": [ + "Infomaniak Auth" + ], + "documentation": "https://www.infomaniak.com/en/support/faq/1940", + "name": "Infomaniak" + }, + { + "domain": "ing.com.au", + "url": "https://www.ing.com.au", + "tfa": [ + "sms" + ], + "name": "ING [AU]" + }, + { + "domain": "ing.de", + "tfa": [ + "custom-software", + "custom-hardware" + ], + "custom-software": [ + "ING Banking to go" + ], + "custom-hardware": [ + "photoTAN reader" + ], + "documentation": "https://www.ing.de/hilfe/auftraege-freigeben/", + "name": "ING-DiBa [DE]" + }, + { + "domain": "ing.lu", + "url": "https://www.ing.lu", + "tfa": [ + "custom-hardware", + "custom-software" + ], + "custom-software": [ + "LuxTrust Mobile App" + ], + "custom-hardware": [ + "LuxTrust Token" + ], + "documentation": "https://www.ing.lu/webing/content/siteing/en/Individuals/Onlineproduct/Contact/frequently-asked-questions/faq-online-banking-.html#accordion-16b6eafd77-item-36c4e5a172", + "name": "ING [LU]" + }, + { + "domain": "ing.pl", + "tfa": [ + "sms", + "u2f", + "custom-software" + ], + "custom-software": [ + "Moje ING App" + ], + "documentation": "https://www.ing.pl/indywidualni/bankowosc-internetowa/bezpieczenstwo/klucze-zabezpieczen-u2f", + "notes": "The first U2F key requires confirmation at a bank branch.", + "name": "ING Bank Slaski [PL]" + }, + { + "domain": "inmotionhosting.com", + "url": "https://www.inmotionhosting.com/", + "tfa": [ + "totp" + ], + "documentation": "https://www.inmotionhosting.com/support/edu/cpanel/how-to-configure-and-use-two-factor-authentication/", + "name": "InMotion Hosting" + }, + { + "domain": "instagram.com", + "url": "https://www.instagram.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://help.instagram.com/566810106808145", + "notes": "TOTP can only be activated through the mobile app", + "name": "Instagram" + }, + { + "domain": "instructure.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://community.canvaslms.com/t5/Student-Guide/How-do-I-set-up-multi-factor-authentication-for-my-user-account/ta-p/524", + "name": "Canvas" + }, + { + "domain": "intelli.zoolz.com", + "tfa": [ + "totp" + ], + "documentation": "https://wiki.zoolz.com/how-do-i-enable-two-factor-authentication-on-my-zoolz-intelligent-account/", + "notes": "Only available for business accounts.", + "name": "Zoolz" + }, + { + "domain": "interactivebrokers.com", + "url": "https://www.interactivebrokers.com", + "additional-domains": [ + "interactivebrokers.ca", + "interactivebrokers.co.in", + "interactivebrokers.co.jp", + "interactivebrokers.co.uk", + "interactivebrokers.com.au", + "interactivebrokers.com.hk", + "interactivebrokers.hu", + "interactivebrokers.ie", + "interactivebrokers.sg" + ], + "tfa": [ + "sms", + "custom-software", + "custom-hardware" + ], + "custom-software": [ + "IBKR Mobile" + ], + "custom-hardware": [ + "Digital Security Card+" + ], + "documentation": "https://www.interactivebrokers.com/en/index.php?f=ibgStrength&p=log", + "notes": "SMS 2FA only works as long as no other method has been enabled. Hardware 2FA is only available for certain customers.", + "name": "Interactive Brokers" + }, + { + "domain": "intercom.com", + "url": "https://www.intercom.com/", + "tfa": [ + "totp" + ], + "documentation": "https://www.intercom.com/help/en/articles/181", + "name": "Intercom" + }, + { + "domain": "internetbs.net", + "tfa": [ + "totp" + ], + "documentation": "https://2fa.directory/notes/internetbs/", + "name": "Internet.bs" + }, + { + "domain": "interserver.net", + "tfa": [ + "totp" + ], + "documentation": "https://www.interserver.net/tips/kb/enable-two-factor-authentication-in-a-cpanel-account/", + "name": "InterServer" + }, + { + "domain": "intesasanpaolo.com", + "tfa": [ + "custom-software", + "sms" + ], + "custom-software": [ + "Intesa Sanpaolo Mobile app" + ], + "documentation": "https://www.intesasanpaolo.com/content/internetbanking/it/faq/common/faqHome/app-intesa-sanpaolo-mobile.privati.html", + "name": "Intesa Sanpaolo" + }, + { + "domain": "intigriti.com", + "url": "https://www.intigriti.com/", + "tfa": [ + "totp" + ], + "documentation": "https://kb.intigriti.com/en/articles/5378980", + "name": "intigriti" + }, + { + "domain": "intuit.com", + "tfa": [ + "sms", + "call", + "totp" + ], + "documentation": "https://accounts-help.intuit.com/app/intuit/1995123", + "name": "Intuit" + }, + { + "domain": "investvoyager.com", + "tfa": [ + "totp", + "sms" + ], + "documentation": "https://investvoyager.zendesk.com/hc/en-us/articles/4407561324699", + "name": "Voyager" + }, + { + "domain": "invictuscapital.com", + "tfa": [ + "sms", + "call", + "totp" + ], + "name": "Invictus Capital" + }, + { + "domain": "invisionapp.com", + "url": "https://www.invisionapp.com", + "tfa": [ + "totp", + "sms" + ], + "documentation": "https://support.invisionapp.com/hc/en-us/articles/360033708112", + "name": "InVision" + }, + { + "domain": "invoice.2go.com", + "tfa": [ + "email" + ], + "documentation": "https://support.2go.com/hc/en-au/articles/360049057751", + "name": "Invoice2go" + }, + { + "domain": "invoiced.com", + "tfa": [ + "sms", + "custom-software" + ], + "custom-software": [ + "Authy" + ], + "documentation": "https://docs.invoiced.com/faqs#wBTZz", + "name": "Invoiced" + }, + { + "domain": "inwx.com", + "url": "https://www.inwx.com/en/", + "tfa": [ + "totp" + ], + "documentation": "https://www.inwx.com/en/offer/mobiletan", + "name": "INWX" + }, + { + "domain": "ionos.com", + "tfa": [ + "totp", + "custom-software" + ], + "custom-software": [ + "IONOS Mobile App" + ], + "documentation": "https://www.ionos.com/help/web-security/two-factor-authentication-two-factor-authentication/set-up-two-factor-authentication/", + "name": "IONOS" + }, + { + "domain": "iozoom.com", + "tfa": [ + "totp" + ], + "documentation": "https://www.iozoom.com/client/announcements/6", + "name": "IO Zoom" + }, + { + "domain": "ironvest.com", + "tfa": [ + "totp" + ], + "documentation": "https://ironvest-kb.groovehq.com/help/how-can-i-enable-two-factor-authentication", + "name": "IronVest" + }, + { + "domain": "irs.gov", + "url": "https://www.irs.gov/Individuals/Get-Transcript", + "tfa": [ + "sms", + "call", + "u2f", + "custom-software" + ], + "custom-software": [ + "ID.me Authenticator" + ], + "documentation": "https://www.irs.gov/privacy-disclosure/secure-access-how-to-register-for-certain-online-self-help-tools", + "name": "US Internal Revenue Service" + }, + { + "domain": "isc2.org", + "tfa": [ + "sms", + "totp" + ], + "name": "ISC2" + }, + { + "domain": "islonline.com", + "tfa": [ + "totp", + "sms", + "email", + "u2f" + ], + "documentation": "https://help.islonline.com/35746/286527", + "name": "ISL Online" + }, + { + "domain": "itch.io", + "tfa": [ + "totp" + ], + "documentation": "https://itch.io/docs/advanced/two-factor-authentication", + "name": "itch.io" + }, + { + "domain": "iterable.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.iterable.com/hc/en-us/articles/115004821703", + "name": "Iterable" + }, + { + "domain": "itglue.com", + "url": "https://www.itglue.com/", + "tfa": [ + "totp" + ], + "documentation": "https://support.itglue.com/hc/en-us/articles/360004933757", + "name": "IT Glue" + }, + { + "domain": "itslearning.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.itslearning.com/en/support/solutions/articles/7000066757", + "notes": "Only available to system administrators", + "name": "itslearning" + }, + { + "domain": "ivpn.net", + "url": "https://www.ivpn.net/", + "tfa": [ + "totp" + ], + "documentation": "https://www.ivpn.net/knowledgebase/232/Do-you-offer-Two-Factor-Authentication.html", + "name": "IVPN" + }, + { + "domain": "iwantmyname.com", + "tfa": [ + "custom-software" + ], + "custom-software": [ + "Authy" + ], + "documentation": "https://help.iwantmyname.com/hc/en-gb/articles/360014435197", + "name": "iWantMyName" + }, + { + "domain": "jamfnow.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.jamfnow.com/s/article/207717923-How-to-turn-on-Two-Factor-Authentication", + "name": "Jamf Now" + }, + { + "domain": "jep.coop", + "url": "https://www.jep.coop", + "tfa": [ + "sms", + "custom-software" + ], + "custom-software": [ + "JEP Token" + ], + "name": "Cooperativa JEP" + }, + { + "domain": "jetbrains.com", + "tfa": [ + "totp" + ], + "documentation": "https://sales.jetbrains.com/hc/en-gb/articles/360013015240", + "name": "JetBrains" + }, + { + "domain": "jianguoyun.com", + "tfa": [ + "sms", + "totp", + "custom-software" + ], + "custom-software": [ + "WeChat" + ], + "documentation": "https://help.jianguoyun.com/?p=1251", + "notes": "SMS 2FA only available on certain pricing plans", + "name": "Nutstore" + }, + { + "domain": "jitbit.com", + "url": "https://www.jitbit.com/hosted-helpdesk/", + "tfa": [ + "totp" + ], + "documentation": "https://support.jitbit.com/helpdesk/KB/View/11048235", + "name": "Jitbit Helpdesk" + }, + { + "domain": "join-lemmy.org", + "tfa": [ + "totp" + ], + "notes": "2FA is only available on Lemmy instances using version 0.18 or later.", + "name": "Lemmy" + }, + { + "domain": "joinmastodon.org", + "additional-domains": [ + "mastodon.social" + ], + "tfa": [ + "totp", + "u2f" + ], + "documentation": "https://github.com/McKael/mastodon-documentation/blob/master/Using-Mastodon/2FA.md", + "notes": "TOTP must be enabled to use a hardware token.", + "name": "Mastodon" + }, + { + "domain": "joker.com", + "tfa": [ + "totp" + ], + "documentation": "https://joker.com/faq/content/52/480/en/what-is-two_factor_authentication.html", + "name": "Joker.com" + }, + { + "domain": "jottacloud.com", + "url": "https://www.jottacloud.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://docs.jottacloud.com/en/articles/1292931", + "name": "Jottacloud" + }, + { + "domain": "jovia.org", + "tfa": [ + "sms", + "call", + "totp" + ], + "documentation": "https://www.jovia.org/knowledge-base/how-do-i-enable-authenticator-apps-within-online-and-mobile-banking", + "name": "Jovia Financial" + }, + { + "domain": "joyent.com", + "url": "https://www.joyent.com/", + "tfa": [ + "totp" + ], + "documentation": "https://docs.joyent.com/public-cloud/getting-started/2fa", + "name": "Joyent" + }, + { + "domain": "jp.mercari.com", + "tfa": [ + "sms", + "call" + ], + "documentation": "https://www.mercari.com/jp/help_center/article/248/", + "name": "Mercari [JP]" + }, + { + "domain": "jumpcloud.com", + "tfa": [ + "totp", + "u2f" + ], + "documentation": "https://jumpcloud.com/support/set-up-authenticator-app-for-user-account", + "name": "JumpCloud" + }, + { + "domain": "justgiving.com", + "tfa": [ + "email" + ], + "documentation": "https://justgiving-charity-support.zendesk.com/hc/en-us/articles/360019687158", + "name": "JustGiving" + }, + { + "domain": "justhost.com", + "tfa": [ + "totp", + "email" + ], + "documentation": "https://my.justhost.com/hosting/help/two-factor-authentication", + "name": "justhost" + }, + { + "domain": "justworks.com", + "tfa": [ + "sms", + "email", + "totp" + ], + "documentation": "https://help.justworks.com/hc/en-us/articles/360004477492", + "name": "Justworks" + }, + { + "domain": "kajabi.com", + "tfa": [ + "totp" + ], + "documentation": "https://help.kajabi.com/hc/en-us/articles/8293506425115", + "name": "Kajabi" + }, + { + "domain": "kanka.io", + "tfa": [ + "totp" + ], + "documentation": "https://docs.kanka.io/en/latest/account/security/two-factor-authentication.html", + "name": "Kanka" + }, + { + "domain": "kaspersky.com", + "url": "https://www.kaspersky.com/", + "tfa": [ + "totp", + "sms" + ], + "documentation": "https://help.kaspersky.com/KPC/1.0/en-US/152628.htm", + "notes": "SMS 2FA must be enabled before TOTP 2FA can be set up. SMS 2FA cannot be disabled even when TOTP is enabled.", + "name": "Kaspersky" + }, + { + "domain": "kayako.com", + "url": "https://www.kayako.com", + "tfa": [ + "totp" + ], + "documentation": "https://help.kayako.com/hc/en-us/articles/360006376420", + "name": "Kayako" + }, + { + "domain": "keepersecurity.com", + "tfa": [ + "sms", + "call", + "totp", + "u2f" + ], + "documentation": "https://www.keepersecurity.com/security#twoFactor", + "name": "Keeper" + }, + { + "domain": "keepsolid.com", + "url": "https://www.keepsolid.com/passwarden/", + "tfa": [ + "totp", + "email" + ], + "documentation": "https://www.keepsolid.com/passwarden/security/tfa", + "name": "Passwarden" + }, + { + "domain": "keycdn.com", + "tfa": [ + "totp" + ], + "documentation": "https://www.keycdn.com/support/enabling-two-factor-authentication", + "name": "KeyCDN" + }, + { + "domain": "kick.com", + "tfa": [ + "totp" + ], + "documentation": "https://help.kick.com/en/articles/7120898", + "name": "Kick" + }, + { + "domain": "kickex.com", + "tfa": [ + "totp", + "email" + ], + "documentation": "https://support.kickex.com/hc/en-us/articles/360019513860", + "name": "KickEX" + }, + { + "domain": "kickstarter.com", + "url": "https://www.kickstarter.com", + "tfa": [ + "sms", + "call", + "totp" + ], + "documentation": "https://help.kickstarter.com/hc/en-us/articles/115005127094", + "notes": "Software 2FA requires setting up SMS 2FA as a fallback.", + "name": "Kickstarter" + }, + { + "domain": "kinguin.net", + "url": "https://www.kinguin.net", + "tfa": [ + "email" + ], + "name": "Kinguin" + }, + { + "domain": "kinsta.com", + "tfa": [ + "totp" + ], + "documentation": "https://kinsta.com/knowledgebase/two-factor-authentication/", + "name": "Kinsta" + }, + { + "domain": "kintone.com", + "tfa": [ + "totp" + ], + "documentation": "https://get.kintone.help/general/en/user/list_2fa/enable_2fa.html", + "notes": "2FA must be enabled by an admin before use.", + "name": "Kintone" + }, + { + "domain": "kit.edu", + "url": "https://www.kit.edu", + "tfa": [ + "totp", + "custom-hardware" + ], + "custom-hardware": [ + "Yubico OTP", + "KIT Token" + ], + "documentation": "https://www.scc.kit.edu/dienste/2fa.php", + "name": "Karlsruher Institut f\u00fcr Technologie" + }, + { + "domain": "klarna.no", + "tfa": [ + "custom-software" + ], + "custom-software": [ + "BankID" + ], + "documentation": "https://www.klarna.com/no/kundeservice/hvordan-logger-jeg-inn/", + "name": "Klarna [NO]" + }, + { + "domain": "klarna.se", + "tfa": [ + "custom-software" + ], + "custom-software": [ + "BankID" + ], + "documentation": "https://www.klarna.com/se/kundservice/hur-loggar-jag-in/", + "name": "Klarna [SE]" + }, + { + "domain": "klaviyo.com", + "url": "https://www.klaviyo.com/", + "tfa": [ + "totp" + ], + "documentation": "https://help.klaviyo.com/hc/en-us/articles/360026617692", + "name": "Klaviyo" + }, + { + "domain": "kleinanzeigen.de", + "additional-domains": [ + "ebay-kleinanzeigen.de" + ], + "tfa": [ + "email" + ], + "documentation": "https://themen.kleinanzeigen.de/hilfe/nutzerkonto/2FA/", + "name": "Kleinanzeigen" + }, + { + "domain": "knack.com", + "url": "https://www.knack.com/", + "tfa": [ + "totp" + ], + "documentation": "https://learn.knack.com/article/seuor9vxmw", + "name": "Knack" + }, + { + "domain": "knowbe4.com", + "url": "https://www.knowbe4.com/", + "tfa": [ + "totp" + ], + "documentation": "https://support.knowbe4.com/hc/en-us/articles/225681448", + "name": "KnowBe4" + }, + { + "domain": "knownhost.com", + "url": "https://www.knownhost.com", + "tfa": [ + "totp" + ], + "documentation": "https://www.knownhost.com/wiki/my-knownhost/two-factor", + "name": "KnownHost" + }, + { + "domain": "ko-fi.com", + "tfa": [ + "sms", + "email", + "totp" + ], + "documentation": "https://help.ko-fi.com/hc/en-us/articles/6355489342737", + "notes": "TOTP is only available with SMS as a backup", + "name": "Ko-fi" + }, + { + "domain": "koofr.eu", + "tfa": [ + "totp" + ], + "documentation": "https://koofr.eu/help/other/how-do-i-enable-2-step-verification/", + "name": "Koofr" + }, + { + "domain": "korbit.co.kr", + "url": "https://www.korbit.co.kr", + "tfa": [ + "totp" + ], + "documentation": "https://support.korbit.co.kr/customer/en/portal/articles/1717692", + "name": "Korbit" + }, + { + "domain": "kraken.com", + "tfa": [ + "totp", + "custom-hardware", + "u2f", + "email" + ], + "custom-hardware": [ + "OATH OTP keys" + ], + "notes": "Email 2FA is mandatory for all users but only requested for unknown devices", + "documentation": "https://support.kraken.com/hc/en-us/articles/360000426923", + "name": "Kraken" + }, + { + "domain": "kriptomat.io", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://help.kriptomat.io/en/articles/1986160", + "name": "Kriptomat" + }, + { + "domain": "krystal.uk", + "tfa": [ + "totp" + ], + "documentation": "https://help.krystal.uk/getting-started/how-do-i-setup-two-factor-authentication-2-fa-on-my-krystal-account", + "name": "Krystal" + }, + { + "domain": "kuna.io", + "url": "https://www.kuna.io/", + "tfa": [ + "totp" + ], + "documentation": "https://support.kuna.io/en/support/solutions/articles/17000083405", + "name": "Kuna" + }, + { + "domain": "lansforsakringar.se", + "tfa": [ + "custom-software" + ], + "custom-software": [ + "BankID" + ], + "documentation": "https://www.lansforsakringar.se/privat/att-vara-kund/digitala-tjanster-telefonbank/internetbanken/", + "name": "L\u00e4nsf\u00f6rs\u00e4kringar" + }, + { + "domain": "larian.com", + "tfa": [ + "totp", + "sms" + ], + "name": "Larian" + }, + { + "domain": "lastpass.com", + "tfa": [ + "totp", + "custom-hardware", + "custom-software", + "u2f", + "sms" + ], + "custom-hardware": [ + "Yubico OTP", + "Windows Fingerprint", + "Smart Card" + ], + "custom-software": [ + "LastPass Authenticator", + "Duo", + "RSA SecurID", + "Symantec VIP", + "SecureAuth Authenticate" + ], + "documentation": "https://support.logmeininc.com/lastpass/help/enable-multifactor-authentication-lp010002", + "notes": "Availability of 2FA options depends on your account type. U2F is available through Duo integration on all plans. Yubico OTP is only available on paid plans.", + "name": "LastPass" + }, + { + "domain": "latoken.com", + "tfa": [ + "sms", + "email", + "totp" + ], + "documentation": "https://latoken.zendesk.com/hc/en-us/articles/360010034040", + "name": "LATOKEN" + }, + { + "domain": "latrobe.edu.au", + "additional-domains": [ + "ltu.edu.au" + ], + "tfa": [ + "totp", + "custom-software" + ], + "custom-software": [ + "Microsoft Authenticator" + ], + "documentation": "https://www.latrobe.edu.au/students/support/it/mfa", + "name": "La Trobe University" + }, + { + "domain": "launchdarkly.com", + "tfa": [ + "totp" + ], + "documentation": "https://docs.launchdarkly.com/home/account-security/mfa", + "name": "LaunchDarkly" + }, + { + "domain": "launchpad.net", + "tfa": [ + "totp", + "custom-hardware" + ], + "custom-hardware": [ + "Feitian OTP c100 Token", + "HOTP Token", + "OATH Token" + ], + "documentation": "https://help.ubuntu.com/community/SSO/FAQs/2FA", + "name": "Launchpad" + }, + { + "domain": "lcn.com", + "url": "https://www.lcn.com", + "tfa": [ + "totp" + ], + "documentation": "https://www.lcn.com/support/articles/how-to-set-up-and-use-two-factor-authentication/", + "name": "LCN.com" + }, + { + "domain": "leaseweb.com", + "url": "https://www.leaseweb.com/", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://kb.leaseweb.com/customer-portal-api/account-management/managing-your-account/setup-two-factor-authentication", + "name": "Leaseweb" + }, + { + "domain": "lego.com", + "tfa": [ + "email" + ], + "name": "LEGO" + }, + { + "domain": "lendingclub.com", + "url": "https://www.lendingclub.com/", + "tfa": [ + "email" + ], + "documentation": "https://help.lendingclub.com/hc/en-us/articles/215562677#h_95bff530-80b8-43ec-9ae1-ffae87e563f5", + "name": "LendingClub" + }, + { + "domain": "lenovo.com", + "tfa": [ + "email", + "sms", + "totp" + ], + "name": "Lenovo" + }, + { + "domain": "letterboxd.com", + "additional-domains": [ + "ltrbxd.com" + ], + "tfa": [ + "totp" + ], + "name": "Letterboxd" + }, + { + "domain": "lexoffice.de", + "tfa": [ + "totp" + ], + "documentation": "https://support.lexoffice.de/de-form/articles/4290490", + "name": "lexoffice" + }, + { + "domain": "lhv.ee", + "tfa": [ + "custom-software", + "custom-hardware" + ], + "custom-software": [ + "SmartID" + ], + "custom-hardware": [ + "ID-card", + "mobile-ID", + "Security token" + ], + "name": "LHV" + }, + { + "domain": "lichess.org", + "tfa": [ + "totp" + ], + "name": "lichess.org" + }, + { + "domain": "lidentitenumerique.laposte.fr", + "tfa": [ + "custom-software" + ], + "custom-software": [ + "L'Identit\u00e9 Num\u00e9rique La Poste app" + ], + "documentation": "https://aide.lidentitenumerique.laposte.fr/kb/guide/fr/YapekkW4gf", + "name": "L'Identit\u00e9 Num\u00e9rique (IDN)" + }, + { + "domain": "lieferando.de", + "tfa": [ + "email" + ], + "documentation": "https://lieferando.de/kundenservice/artikel/warum-muss-ich-bei-der-anmeldung-einen-code-eingeben", + "name": "Lieferando" + }, + { + "domain": "ligabank.de", + "tfa": [ + "custom-software", + "custom-hardware" + ], + "custom-hardware": [ + "Sm@rt-TAN card reader" + ], + "custom-software": [ + "VR SecureGo plus" + ], + "documentation": "https://www.ligabank.de/liga-direkt/faq-zum-online-banking.html#parsys_faqliste_330836501", + "name": "LIGA Bank" + }, + { + "domain": "lihkg.com", + "tfa": [ + "email", + "totp" + ], + "documentation": "https://help.lihkg.com/privacy/account-security/", + "name": "LIHKG" + }, + { + "domain": "line6.com", + "tfa": [ + "totp" + ], + "name": "Line 6" + }, + { + "domain": "linkedin.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://www.linkedin.com/help/linkedin/answer/544", + "name": "LinkedIn" + }, + { + "domain": "linksyssmartwifi.com", + "url": "https://www.linksyssmartwifi.com", + "tfa": [ + "email", + "sms" + ], + "documentation": "https://www.linksys.com/us/support-article?articleNum=317753", + "name": "Linksys Smart Wi-Fi" + }, + { + "domain": "linktr.ee", + "tfa": [ + "sms", + "call" + ], + "documentation": "https://linktr.ee/help/linktree-ff524ba1864c/en/articles/6108442", + "name": "Linktree" + }, + { + "domain": "linode.com", + "url": "https://www.linode.com/", + "tfa": [ + "totp" + ], + "documentation": "https://www.linode.com/docs/security/linode-manager-security-controls", + "name": "Linode" + }, + { + "domain": "liquid.com", + "url": "https://www.liquid.com/", + "tfa": [ + "totp" + ], + "documentation": "https://help.liquid.com/en/articles/4883860", + "name": "Liquid" + }, + { + "domain": "liquidweb.com", + "url": "https://www.liquidweb.com", + "tfa": [ + "totp" + ], + "documentation": "https://www.liquidweb.com/kb/how-to-enable-two-factor-authentication-2fa/", + "name": "Liquid Web" + }, + { + "domain": "listrak.com", + "tfa": [ + "email" + ], + "documentation": "https://help.listrak.com/en/articles/1505298", + "name": "Listrak" + }, + { + "domain": "litebit.eu", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://support.litebit.eu/hc/en-us/articles/115000953504", + "name": "LiteBit" + }, + { + "domain": "litmus.com", + "url": "https://www.litmus.com", + "tfa": [ + "sms", + "custom-software" + ], + "custom-software": [ + "Authy" + ], + "documentation": "https://help.litmus.com/article/128--", + "name": "Litmus" + }, + { + "domain": "lloydsbank.com", + "url": "https://www.lloydsbank.com/", + "tfa": [ + "custom-software", + "call", + "sms" + ], + "custom-software": [ + "Lloyds Bank Mobile Banking" + ], + "documentation": "https://www.lloydsbank.com/online-banking/changes-to-internet-banking.asp", + "name": "Lloyds Bank" + }, + { + "domain": "lmcu.org", + "url": "https://www.lmcu.org/", + "tfa": [ + "custom-software" + ], + "custom-software": [ + "Lake Michigan CU Mobile" + ], + "documentation": "https://www.lmcu.org/personal/banking/services/mobile-authenticator/", + "name": "Lake Michigan Credit Union" + }, + { + "domain": "lnk.bio", + "tfa": [ + "totp" + ], + "documentation": "https://help.lnk.bio/en/articles/8372705", + "name": "Lnk.Bio" + }, + { + "domain": "lobste.rs", + "tfa": [ + "totp" + ], + "documentation": "https://lobste.rs/s/1cyltz/two_factor_authentication_now_available", + "name": "Lobsters" + }, + { + "domain": "localizejs.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://help.localizejs.com/docs/users-two-factor-authentication", + "name": "Localize" + }, + { + "domain": "localmonero.co", + "tfa": [ + "totp" + ], + "documentation": "https://localmonero.co/guides/2fa", + "name": "LocalMonero" + }, + { + "domain": "logicmonitor.com", + "tfa": [ + "call", + "sms", + "custom-software" + ], + "custom-software": [ + "Authy" + ], + "documentation": "https://www.logicmonitor.com/support/settings/users-and-roles/two-factor-authentication", + "name": "LogicMonitor" + }, + { + "domain": "login.gov", + "tfa": [ + "sms", + "call", + "totp", + "u2f" + ], + "documentation": "https://www.login.gov/help/creating-an-account/two-factor-authentication/", + "name": "login.gov" + }, + { + "domain": "login.threatsim.com", + "tfa": [ + "sms" + ], + "name": "ThreatSim" + }, + { + "domain": "logitech.com", + "additional-domains": [ + "astrogaming.com", + "logi.com" + ], + "tfa": [ + "email", + "totp" + ], + "name": "Logitech" + }, + { + "domain": "lokalise.com", + "tfa": [ + "totp" + ], + "documentation": "https://docs.lokalise.com/en/articles/2329387", + "name": "Lokalise" + }, + { + "domain": "looker.com", + "tfa": [ + "totp" + ], + "documentation": "https://www.looker.com/docs/admin/security/two-factor-authentication", + "name": "Looker" + }, + { + "domain": "loopia.se", + "tfa": [ + "custom-software" + ], + "documentation": "https://blogg.loopia.se/2015/03/16/nu-kan-du-logga-in-med-tvafaktorsautentiering-hos-loopia-genom-bankid/", + "custom-software": [ + "BankID" + ], + "name": "Loopia" + }, + { + "domain": "lowes.com", + "tfa": [ + "sms" + ], + "documentation": "https://www.lowes.com/l/help/contact-us#Multi-FactorAuthentication", + "name": "Lowes" + }, + { + "domain": "luno.com", + "url": "https://www.luno.com/", + "tfa": [ + "totp" + ], + "documentation": "https://www.luno.com/help/en/articles/1000203420", + "notes": "A mobile phone number is required to set up two-factor authentication.", + "name": "Luno" + }, + { + "domain": "m1finance.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.m1finance.com/hc/en-us/articles/221056367", + "name": "M1 Finance" + }, + { + "domain": "macquarie.com.au", + "url": "https://www.macquarie.com.au/", + "tfa": [ + "custom-software" + ], + "custom-software": [ + "Macquarie Authenticator" + ], + "documentation": "https://help.macquarie.com/s/article/How-do-I-set-up-two-factor-authentication", + "notes": "2FA is only available when 'Ultimate' security is enabled and an SMS-capable phone is required for initial setup.", + "name": "Macquarie Bank" + }, + { + "domain": "macstadium.com", + "url": "https://www.macstadium.com/", + "tfa": [ + "totp" + ], + "documentation": "https://docs.macstadium.com/docs/two-factor-authentication", + "name": "MacStadium" + }, + { + "domain": "macu.com", + "url": "https://www.macu.com", + "tfa": [ + "totp", + "sms", + "email" + ], + "name": "Mountain America Credit Union" + }, + { + "domain": "magnet.me", + "tfa": [ + "totp" + ], + "name": "Magnet.me" + }, + { + "domain": "maicoin.com", + "url": "https://www.maicoin.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://maicoin2.freshdesk.com/en/support/solutions/articles/32000016116", + "name": "MaiCoin" + }, + { + "domain": "mail.163.com", + "additional-domains": [ + "126.com", + "yeah.net" + ], + "tfa": [ + "totp", + "sms" + ], + "documentation": "https://help.mail.163.com/faq.do?m=list&categoryID=297", + "notes": "SMS is required as a backup method", + "name": "NetEase Mail" + }, + { + "domain": "mail.aol.com", + "tfa": [ + "sms", + "call", + "email", + "u2f" + ], + "documentation": "https://help.aol.com/articles/2-step-verification-stronger-than-your-password-alone", + "name": "Aol Mail" + }, + { + "domain": "mail.com", + "url": "https://www.mail.com/", + "tfa": [ + "totp" + ], + "documentation": "https://support.mail.com/security/2fa/index.html", + "notes": "A verified phone number is required to set up 2FA.", + "name": "Mail.com" + }, + { + "domain": "mail.de", + "tfa": [ + "totp", + "u2f" + ], + "documentation": "https://mail.de/hilfe/u2f-authenticator", + "name": "mail.de" + }, + { + "domain": "mail.google.com", + "tfa": [ + "sms", + "call", + "totp", + "custom-software", + "u2f" + ], + "custom-software": [ + "Google Prompts", + "Google Smart Lock" + ], + "documentation": "https://www.google.com/intl/en-US/landing/2step/features.html", + "name": "Gmail" + }, + { + "domain": "mail.ru", + "tfa": [ + "sms", + "u2f" + ], + "documentation": "https://help.mail.ru/mail/settings/2fa", + "name": "Mail.Ru" + }, + { + "domain": "mail.sapo.pt", + "tfa": [ + "totp", + "sms", + "u2f" + ], + "documentation": "https://ajuda.sapo.pt/id-67553", + "name": "SAPO Mail" + }, + { + "domain": "mail.yahoo.co.jp", + "tfa": [ + "email", + "sms" + ], + "documentation": "https://id.yahoo.co.jp/security/otp.html", + "name": "Yahoo Mail [JP]" + }, + { + "domain": "mail.yahoo.com", + "tfa": [ + "sms", + "call", + "totp", + "u2f" + ], + "documentation": "https://help.yahoo.com/kb/SLN5013.html", + "notes": "Linked phone number required for 2FA.", + "name": "Yahoo Mail" + }, + { + "domain": "mail.yandex.com", + "tfa": [ + "custom-software" + ], + "custom-software": [ + "Yandex.Key" + ], + "documentation": "https://yandex.com/support/id/authorization/twofa.html", + "notes": "SMS-capable phone required for initial setup.", + "name": "Yandex.Mail" + }, + { + "domain": "mailbox.org", + "tfa": [ + "totp", + "custom-hardware" + ], + "custom-hardware": [ + "Yubico OTP" + ], + "documentation": "https://kb.mailbox.org/x/5AcS", + "name": "mailbox.org" + }, + { + "domain": "mailchimp.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://kb.mailchimp.com/accounts/login/set-up-a-two-factor-authentication-app-at-login", + "name": "MailChimp" + }, + { + "domain": "mailfence.com", + "tfa": [ + "totp" + ], + "documentation": "https://mailfence.com/en/two-factor-authentication.jsp", + "name": "Mailfence" + }, + { + "domain": "mailgun.com", + "url": "https://www.mailgun.com", + "tfa": [ + "totp" + ], + "documentation": "https://help.mailgun.com/hc/en-us/articles/360011664433", + "name": "Mailgun" + }, + { + "domain": "mailo.com", + "tfa": [ + "totp", + "custom-software" + ], + "custom-software": [ + "Mailo app" + ], + "documentation": "https://faq.mailo.com/acces/activer-la-double-authentification.htm", + "name": "Mailo" + }, + { + "domain": "make.com", + "tfa": [ + "totp" + ], + "documentation": "https://www.make.com/en/help/access-management/two-factor-authentication", + "name": "Make" + }, + { + "domain": "malwarebytes.com", + "tfa": [ + "email" + ], + "documentation": "https://support.malwarebytes.com/hc/en-us/articles/4402158331411", + "name": "Malwarebytes (Personal)" + }, + { + "domain": "mapbox.com", + "url": "https://www.mapbox.com", + "tfa": [ + "totp" + ], + "documentation": "https://docs.mapbox.com/accounts/guides/settings/#two-factor-authentication", + "name": "Mapbox" + }, + { + "domain": "marcus.com", + "url": "https://www.marcus.com/", + "tfa": [ + "sms", + "email" + ], + "name": "Marcus by Goldman Sachs" + }, + { + "domain": "markmonitor.com", + "tfa": [ + "sms", + "custom-software", + "custom-hardware" + ], + "custom-software": [ + "Symantec VIP" + ], + "custom-hardware": [ + "Symantec VIP Token" + ], + "name": "MarkMonitor" + }, + { + "domain": "marktplaats.nl", + "tfa": [ + "sms" + ], + "documentation": "https://help.marktplaats.nl/s/article/bescherm-je-account-met-de-sms-beveiligingscontrole", + "name": "Marktplaats" + }, + { + "domain": "maropost.com", + "tfa": [ + "email" + ], + "documentation": "https://support.maropost.com/hc/en-us/articles/360015708033", + "name": "Maropost Marketing Cloud" + }, + { + "domain": "mathworks.com", + "url": "https://www.mathworks.com/", + "tfa": [ + "sms", + "email", + "totp" + ], + "documentation": "https://www.mathworks.com/mw_account/two_step_verification/frequently-asked-questions.html", + "name": "MathWorks" + }, + { + "domain": "matomo.org", + "tfa": [ + "totp" + ], + "documentation": "https://matomo.org/faq/general/faq_27245/", + "name": "Matomo Cloud" + }, + { + "domain": "mattermost.com", + "tfa": [ + "totp" + ], + "documentation": "https://docs.mattermost.com/onboard/multi-factor-authentication.html", + "name": "Mattermost" + }, + { + "domain": "mbconnectline.com", + "url": "https://www.mbconnectline.com", + "tfa": [ + "sms", + "call", + "email", + "totp" + ], + "documentation": "http://www.cc-onlinehelp.com/en/#index/administrati/users/authenticati/authenticati.html", + "name": "MB Connect Line" + }, + { + "domain": "mbna.ca", + "url": "https://www.mbna.ca", + "tfa": [ + "sms", + "call" + ], + "documentation": "https://www.mbna.ca/help-centre/credit-cards/two-step-verification-faq/", + "name": "MBNA [CA]" + }, + { + "domain": "mbna.co.uk", + "tfa": [ + "custom-software", + "sms", + "call" + ], + "custom-software": [ + "MBNA Card Services App" + ], + "documentation": "https://www.mbna.co.uk/credit-cards/help-and-support/changes-to-online-shopping.html", + "name": "MBNA [UK]" + }, + { + "domain": "mcgill.ca", + "tfa": [ + "totp", + "custom-software", + "sms", + "call" + ], + "custom-software": [ + "Authy" + ], + "documentation": "https://mcgill.service-now.com/itportal?id=kb_article_view&sys_kb_id=b1508e941be04910591ca9b7624bcb85", + "name": "McGill University" + }, + { + "domain": "meet.google.com", + "tfa": [ + "sms", + "call", + "totp", + "custom-software", + "u2f" + ], + "custom-software": [ + "Google Prompts", + "Google Smart Lock" + ], + "documentation": "https://www.google.com/intl/en-US/landing/2step/features.html", + "name": "Google Meet" + }, + { + "domain": "mega.io", + "tfa": [ + "totp" + ], + "documentation": "https://mega.io/help/client/webclient/security-and-privacy#5bb525f9f1b70989348b45de", + "name": "Mega" + }, + { + "domain": "meineschufa.de", + "tfa": [ + "sms" + ], + "documentation": "https://www.meineschufa.de/de/faq/login", + "name": "SCHUFA" + }, + { + "domain": "meister.co", + "additional-domains": [ + "meisterlabs.com", + "meistertask.com", + "mindmeister.com", + "meisternote.com" + ], + "tfa": [ + "totp" + ], + "documentation": "https://support.mindmeister.com/hc/en-us/articles/4408402251154", + "name": "Meister" + }, + { + "domain": "meraki.cisco.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://documentation.meraki.com/zGeneral_Administration/Managing_Dashboard_Access/Using_Google_Authenticator_for_Two-factor_Authentication_in_Dashboard", + "name": "Cisco Meraki" + }, + { + "domain": "mercadobitcoin.com.br", + "url": "https://www.mercadobitcoin.com.br/", + "tfa": [ + "totp" + ], + "documentation": "https://suporte.mercadobitcoin.com.br/hc/pt-br/articles/360039357491", + "name": "Mercado Bitcoin" + }, + { + "domain": "mercadolibre.com", + "additional-domains": [ + "mercadolibre.com.bo", + "mercadolivre.com.br", + "mercadolibre.cl", + "mercadolibre.com.co", + "mercadolibre.co.cr", + "mercadolibre.com.do", + "mercadolibre.com.ec", + "mercadolibre.com.gt", + "mercadolibre.com.hn", + "mercadolibre.com.mx", + "mercadolibre.com.ni", + "mercadolibre.com.pa", + "mercadolibre.com.py", + "mercadolibre.com.pe", + "mercadolibre.com.sv", + "mercadolibre.com.uy", + "mercadolibre.com.ve", + "mercadolibre.com.ar" + ], + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://www.mercadolivre.com.br/ajuda/945", + "name": "Mercado Libre" + }, + { + "domain": "mercadopago.com", + "url": "https://www.mercadopago.com", + "tfa": [ + "sms", + "custom-software" + ], + "custom-software": [ + "Authy" + ], + "name": "Mercado Pago" + }, + { + "domain": "mercury.cash", + "tfa": [ + "totp" + ], + "documentation": "https://support.mercury.cash/en/articles/3881123", + "name": "Mercury Cash" + }, + { + "domain": "mercury.com", + "tfa": [ + "totp", + "u2f" + ], + "documentation": "https://help.mercury.com/t/m1h3d07", + "name": "Mercury" + }, + { + "domain": "meridiancu.ca", + "url": "https://www.meridiancu.ca", + "tfa": [ + "sms", + "call" + ], + "documentation": "https://www.meridiancu.ca/bank-anywhere/online-banking/signing-in-for-the-first-time-online", + "name": "Meridian Credit Union" + }, + { + "domain": "merrilledge.com", + "additional-domains": [ + "mymerrill.com", + "ml.com" + ], + "url": "https://www.merrilledge.com/", + "tfa": [ + "sms" + ], + "documentation": "https://github.com/2factorauth/twofactorauth/issues/2275", + "name": "Merrill Edge" + }, + { + "domain": "messagebird.com", + "tfa": [ + "sms", + "email" + ], + "documentation": "https://support.messagebird.com/hc/en-us/articles/12896784423057", + "notes": "Only one 2FA method can be active at any given time", + "name": "MessageBird" + }, + { + "domain": "meta.com", + "additional-domains": [ + "oculus.com" + ], + "tfa": [ + "sms", + "totp" + ], + "name": "Meta" + }, + { + "domain": "metal.equinix.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://metal.equinix.com/developers/docs/accounts/two-factor-authentication/", + "name": "Equinix Metal" + }, + { + "domain": "metorik.com", + "url": "https://www.metorik.com", + "tfa": [ + "totp" + ], + "documentation": "https://help.metorik.com/article/22-how-can-i-enable-2fa-on-my-account", + "name": "Metorik" + }, + { + "domain": "miamioh.edu", + "tfa": [ + "sms", + "call", + "custom-software", + "u2f", + "custom-hardware" + ], + "custom-software": [ + "Duo" + ], + "custom-hardware": [ + "Feitian OTP c100 Token" + ], + "documentation": "https://www.miamioh.edu/it-services/special-groups/info-security/duo/", + "name": "Miami University" + }, + { + "domain": "migadu.com", + "url": "https://www.migadu.com/", + "tfa": [ + "totp" + ], + "name": "Migadu" + }, + { + "domain": "migros.ch", + "url": "https://www.migros.ch", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://login.migros.ch/help/security/2fa?hl=en", + "name": "Migros" + }, + { + "domain": "mimecast.com", + "url": "https://www.mimecast.com/", + "tfa": [ + "sms", + "email", + "totp" + ], + "documentation": "https://community.mimecast.com/docs/DOC-1915", + "name": "Mimecast" + }, + { + "domain": "minds.com", + "url": "https://www.minds.com/", + "tfa": [ + "sms" + ], + "name": "Minds" + }, + { + "domain": "minecraft.net", + "additional-domains": [ + "mojang.com" + ], + "tfa": [ + "sms", + "call", + "email", + "totp", + "custom-software" + ], + "custom-software": [ + "Microsoft Authenticator" + ], + "documentation": "https://support.microsoft.com/en-us/help/12408/", + "notes": "2FA phone calls may not be available in all regions", + "name": "Minecraft" + }, + { + "domain": "mines.edu", + "tfa": [ + "custom-software", + "custom-hardware", + "u2f" + ], + "custom-software": [ + "Duo" + ], + "custom-hardware": [ + "Duo D100 Token" + ], + "documentation": "https://its.mines.edu/mfa/", + "name": "Colorado School of Mines" + }, + { + "domain": "mint.intuit.com", + "tfa": [ + "sms", + "call", + "totp" + ], + "documentation": "https://accounts-help.intuit.com/app/intuit/1995176", + "notes": "Software 2FA requires enabling SMS or phone call as a back-up.", + "name": "Mint" + }, + { + "domain": "mintos.com", + "url": "https://www.mintos.com/", + "tfa": [ + "totp" + ], + "documentation": "https://help.mintos.com/hc/en-us/sections/360000373858", + "name": "Mintos" + }, + { + "domain": "miro.com", + "tfa": [ + "totp" + ], + "documentation": "https://help.miro.com/hc/en-us/articles/7935469290002", + "name": "Miro" + }, + { + "domain": "misshosting.com", + "additional-domains": [ + "misshosting.bg", + "misshosting.dk", + "misshosting.fi", + "misshosting.no", + "misshosting.se" + ], + "tfa": [ + "totp" + ], + "documentation": "https://github.com/2factorauth/twofactorauth/issues/3634#issuecomment-454688629", + "name": "Miss Hosting" + }, + { + "domain": "missiveapp.com", + "tfa": [ + "totp" + ], + "documentation": "https://missiveapp.com/faq/enable-2-factor-authentication", + "name": "Missive App" + }, + { + "domain": "mist.com", + "tfa": [ + "totp" + ], + "documentation": "https://www.mist.com/documentation/two-factor-authentication-mobile-authenticator/", + "name": "Mist" + }, + { + "domain": "mixpanel.com", + "tfa": [ + "sms" + ], + "documentation": "https://help.mixpanel.com/hc/en-us/articles/115004485966", + "name": "Mixpanel" + }, + { + "domain": "mlp.de", + "tfa": [ + "custom-software", + "custom-hardware", + "sms" + ], + "custom-software": [ + "SecureGo" + ], + "custom-hardware": [ + "TAN generator" + ], + "documentation": "https://mlp.de/banking/konto-und-karte/psd2/", + "name": "MLP" + }, + { + "domain": "mobile.woolworths.com.au", + "tfa": [ + "sms", + "email" + ], + "documentation": "https://mobile.woolworths.com.au/two-factor-authentication", + "name": "Woolworths Mobile" + }, + { + "domain": "modrinth.com", + "tfa": [ + "totp" + ], + "name": "Modrinth" + }, + { + "domain": "mojedatovaschranka.cz", + "tfa": [ + "sms", + "custom-software" + ], + "custom-software": [ + "eGovernment Mobile Key" + ], + "documentation": "https://www.mojedatovaschranka.cz/static/ISDS/help/page1.html#1_5_4", + "name": "Datov\u00e9 schr\u00e1nky" + }, + { + "domain": "monarchmoney.com", + "tfa": [ + "totp" + ], + "documentation": "https://help.monarchmoney.com/hc/en-us/articles/360054392152", + "name": "Monarch Money" + }, + { + "domain": "monash.edu", + "additional-domains": [ + "monash.edu.my" + ], + "tfa": [ + "u2f", + "totp", + "custom-software" + ], + "custom-software": [ + "Okta Verify" + ], + "documentation": "https://www.monash.edu/esolutions/accounts-passwords/multi-factor-authentication", + "name": "Monash University" + }, + { + "domain": "monday.com", + "tfa": [ + "totp", + "sms" + ], + "documentation": "https://support.monday.com/hc/en-us/articles/360000787745", + "notes": "Team admins must enable 2FA before members can use it.", + "name": "Monday.com" + }, + { + "domain": "monex.co.jp", + "url": "https://www.monex.co.jp/", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://info.monex.co.jp/help/security/mfa/index.html", + "name": "Monex" + }, + { + "domain": "moneybird.com", + "url": "https://www.moneybird.com/", + "tfa": [ + "totp" + ], + "documentation": "https://www.moneybird.nl/blog/twee-staps-verificatie/", + "additional-domains": [ + "moneybird.nl" + ], + "name": "Moneybird" + }, + { + "domain": "mongodb.com", + "tfa": [ + "totp", + "email", + "custom-software", + "sms", + "u2f" + ], + "custom-software": [ + "Okta Verify" + ], + "documentation": "https://docs.atlas.mongodb.com/security-multi-factor-authentication/", + "name": "MongoDB" + }, + { + "domain": "moniker.com", + "url": "https://www.moniker.com/", + "tfa": [ + "email", + "totp" + ], + "documentation": "https://faq.moniker.com/login-into-moniker", + "name": "Moniker" + }, + { + "domain": "moqups.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.moqups.com/hc/en-us/articles/360019781980#account_2FA", + "name": "Moqups" + }, + { + "domain": "more.com.au", + "tfa": [ + "sms", + "email" + ], + "documentation": "https://www.more.com.au/help/multi-factor-authentication-what-is-it-and-why-it-s-important", + "name": "More" + }, + { + "domain": "morganstanley.com", + "tfa": [ + "sms", + "call", + "totp", + "u2f" + ], + "documentation": "https://www.morganstanley.com/what-we-do/wealth-management/online-security/authentication", + "name": "Morgan Stanley" + }, + { + "domain": "mos.ru", + "tfa": [ + "totp", + "sms" + ], + "name": "Mos.ru" + }, + { + "domain": "msu.edu", + "tfa": [ + "sms", + "call", + "u2f", + "custom-software" + ], + "custom-software": [ + "Okta Verify" + ], + "documentation": "https://secureit.msu.edu/multi-factor/index.html", + "name": "Michigan State University" + }, + { + "domain": "multcloud.com", + "url": "https://www.multcloud.com/", + "tfa": [ + "sms", + "email" + ], + "documentation": "https://www.multcloud.com/help/two-step-verification.html", + "name": "MultCloud" + }, + { + "domain": "muni.cz", + "tfa": [ + "totp", + "u2f" + ], + "documentation": "https://it.muni.cz/en/services/jednotne-prihlaseni-na-muni/navody/how-to-set-up-multi-factor-authentication", + "name": "Masaryk University" + }, + { + "domain": "mural.co", + "tfa": [ + "totp" + ], + "documentation": "https://support.mural.co/en/articles/5315716", + "name": "MURAL" + }, + { + "domain": "mxtoolbox.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://mxtoolbox.com/support/knowledgebase/?faq=455", + "notes": "2FA is only available on paid plans.", + "name": "MxToolbox" + }, + { + "domain": "my.cigna.com", + "tfa": [ + "sms", + "email" + ], + "name": "Cigna" + }, + { + "domain": "my.gov.au", + "tfa": [ + "sms", + "custom-software" + ], + "custom-software": [ + "myGov Code Generator" + ], + "documentation": "https://my.gov.au/en/about/help/mygov-account/help-using-your-account/manage-sign-in-details", + "name": "myGov" + }, + { + "domain": "my.ny.gov", + "tfa": [ + "sms", + "call", + "totp", + "custom-software" + ], + "custom-software": [ + "Okta Verify" + ], + "documentation": "https://www.youtube.com/watch?v=jzXOdvK-9sE", + "name": "NY.gov ID" + }, + { + "domain": "myanimelist.net", + "tfa": [ + "totp" + ], + "documentation": "https://myanimelist.net/about.php?go=support", + "name": "MyAnimeList" + }, + { + "domain": "mychart.com", + "tfa": [ + "sms", + "email" + ], + "documentation": "https://www.mychart.com/Features", + "name": "MyChart" + }, + { + "domain": "myemma.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://support.e2ma.net/s/article/Two-factor-authentication", + "name": "Emma Email Marketing" + }, + { + "domain": "myfritz.net", + "tfa": [ + "totp", + "u2f", + "custom-hardware" + ], + "custom-hardware": [ + "Smartphone biometrics (fingerprint, face recognition)" + ], + "documentation": "https://en.avm.de/myfritz/faqs/security-tips-for-using-myfritz/", + "name": "MyFRITZ!Net" + }, + { + "domain": "mygovid.ie", + "url": "https://www.mygovid.ie/", + "tfa": [ + "sms" + ], + "documentation": "https://www.mygovid.ie/en-IE/HelpAndSupport?section=pageButton-SecurityAndPrivacy&answer=show-answer32", + "name": "MyGovID" + }, + { + "domain": "myhealthone.com", + "tfa": [ + "sms", + "call", + "email" + ], + "name": "MyHealthONE" + }, + { + "domain": "myheritage.com", + "url": "https://www.myheritage.com/", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://www.myheritage.com/help-center/en/article/how-do-i-set-up-two-factor-authentication-for-my-myheritage-account", + "name": "MyHeritage" + }, + { + "domain": "myob.com", + "additional-domains": [ + "myob.com.au", + "myob.co.nz" + ], + "tfa": [ + "sms", + "email", + "totp" + ], + "documentation": "https://help.myob.com/wiki/x/bwfq", + "notes": "SMS available to selected new customers only.", + "name": "MYOB" + }, + { + "domain": "mypath.pa.gov", + "tfa": [ + "sms", + "email", + "totp" + ], + "documentation": "https://revenue-pa.custhelp.com/app/answers/detail/a_id/3939", + "name": "Pennsylvania Dept of Revenue myPATH" + }, + { + "domain": "myprimobox.net", + "additional-domains": [ + "myprimobox.com" + ], + "url": "https://myprimobox.com", + "tfa": [ + "totp" + ], + "name": "myPrimobox" + }, + { + "domain": "mytax.illinois.gov", + "tfa": [ + "email", + "totp" + ], + "documentation": "https://tax.illinois.gov/programs/mytax/authenticationguide.html", + "name": "MyTax Illinois" + }, + { + "domain": "n-able.com", + "tfa": [ + "totp" + ], + "documentation": "https://documentation.n-able.com/covedataprotection/USERGUIDE/documentation/Content/service-management/console/sso_migration.htm", + "name": "N-able" + }, + { + "domain": "n26.com", + "tfa": [ + "sms", + "custom-software" + ], + "custom-software": [ + "N26 app" + ], + "documentation": "https://support.n26.com/en-eu/security/passwords-and-codes/how-to-log-in-with-two-factor-authentication", + "name": "N26" + }, + { + "domain": "naga.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.naga.com/en/articles/5057605", + "notes": "MFA can only be set up from the NAGA Web platform and not on iOS or Android Apps", + "name": "NAGA" + }, + { + "domain": "nairaex.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.nairaex.com/support/solutions/articles/43000335554", + "name": "NairaEx" + }, + { + "domain": "name.com", + "url": "https://www.name.com/", + "tfa": [ + "totp" + ], + "documentation": "https://www.name.com/support/categories/200296798", + "name": "Name.com" + }, + { + "domain": "namebase.io", + "tfa": [ + "totp" + ], + "name": "Namebase" + }, + { + "domain": "namecheap.com", + "url": "https://www.namecheap.com/", + "tfa": [ + "totp", + "u2f" + ], + "documentation": "https://www.namecheap.com/security/2fa-two-factor-authentication/", + "notes": "Only one 2FA method can be active at any given time", + "name": "Namecheap" + }, + { + "domain": "namehero.com", + "url": "https://www.namehero.com/", + "tfa": [ + "totp" + ], + "documentation": "https://www.namehero.com/knowledgebase/163", + "name": "NameHero" + }, + { + "domain": "names.co.uk", + "url": "https://www.names.co.uk/", + "tfa": [ + "totp" + ], + "documentation": "https://www.names.co.uk/support/3011.html", + "name": "Namesco" + }, + { + "domain": "namesilo.com", + "url": "https://www.namesilo.com/", + "tfa": [ + "totp" + ], + "documentation": "https://www.namesilo.com/Support/2~Factor-Authentication", + "name": "NameSilo.com" + }, + { + "domain": "nandos.co.uk", + "additional-domains": [ + "id.nandos.co.uk" + ], + "tfa": [ + "sms", + "email" + ], + "documentation": "https://help.nandos.co.uk/hc/en-gb/articles/4417183221521", + "name": "Nando's UK" + }, + { + "domain": "nasafcu.com", + "url": "https://www.nasafcu.com/", + "tfa": [ + "sms", + "call", + "email" + ], + "documentation": "https://www.nasafcu.com/img/newebranch/ebranch_new.html", + "name": "NASA Federal Credit Union" + }, + { + "domain": "nationwide.co.uk", + "tfa": [ + "sms", + "custom-hardware" + ], + "custom-hardware": [ + "Card reader" + ], + "documentation": "https://www.nationwide.co.uk/support/security-centre/internet-banking-security/new-log-in-experience", + "name": "Nationwide Building Society" + }, + { + "domain": "natwest.com", + "tfa": [ + "custom-hardware" + ], + "custom-hardware": [ + "Card reader" + ], + "documentation": "https://www.natwest.com/banking-with-natwest/how-to/card-reader.html", + "name": "NatWest" + }, + { + "domain": "navyfederal.org", + "url": "https://www.navyfederal.org/", + "tfa": [ + "sms", + "email", + "custom-software" + ], + "custom-software": [ + "Navy Federal App" + ], + "documentation": "https://www.navyfederal.org/services/security/two-step-verification.html", + "name": "Navy Federal Credit Union" + }, + { + "domain": "nb.fidelity.com", + "tfa": [ + "call", + "sms" + ], + "documentation": "https://nb.fidelity.com/public/nb/default/resourceslibrary/articles/securityfaqlearnmore", + "name": "Fidelity NetBenefits" + }, + { + "domain": "ncsecu.org", + "url": "https://www.ncsecu.org/", + "tfa": [ + "sms" + ], + "documentation": "https://www.ncsecu.org/MobileServices/OneTimePasscode.html", + "name": "State Employees Credit Union" + }, + { + "domain": "ncsu.edu", + "tfa": [ + "sms", + "call", + "custom-software", + "totp", + "u2f" + ], + "custom-software": [ + "Duo" + ], + "documentation": "https://oit.ncsu.edu/it-security/2fa/", + "name": "North Carolina State University" + }, + { + "domain": "nd.edu", + "url": "https://www.nd.edu", + "tfa": [ + "sms", + "call", + "custom-software", + "u2f", + "totp" + ], + "custom-software": [ + "Okta Verify" + ], + "documentation": "https://nd.service-now.com/nd_portal?id=kb_article_view&sysparm_article=KB0017218", + "name": "University of Notre Dame" + }, + { + "domain": "ndax.io", + "tfa": [ + "totp" + ], + "documentation": "https://help.ndax.io/en_us/categories/-B1hNr3zSi", + "name": "NDAX" + }, + { + "domain": "nelnet.com", + "tfa": [ + "sms", + "email" + ], + "documentation": "https://nelnet.com/faqs#two-factor-auth", + "name": "Nelnet" + }, + { + "domain": "neolo.com", + "url": "https://www.neolo.com", + "tfa": [ + "totp" + ], + "documentation": "https://ar.neolo.com/knowledgebase/215/Autenticacion-de-2-factores.html", + "name": "Neolo" + }, + { + "domain": "nest.com", + "additional-domains": [ + "nest.google.com" + ], + "tfa": [ + "sms", + "call", + "totp", + "custom-software", + "u2f" + ], + "custom-software": [ + "Google Prompts", + "Google Smart Lock" + ], + "notes": "Non-migrated accounts only have SMS & Email 2FA available.", + "documentation": "https://support.google.com/googlenest/answer/9295081", + "name": "Google Nest" + }, + { + "domain": "netbk.co.jp", + "url": "https://www.netbk.co.jp/", + "tfa": [ + "custom-software" + ], + "custom-software": [ + "Sumishin SBI Net Bank app" + ], + "documentation": "https://www.netbk.co.jp/contents/lineup/smartauth-neo/", + "name": "SBI Sumishin Net Bank" + }, + { + "domain": "netcorecloud.com", + "additional-domains": [ + "pepipost.com" + ], + "tfa": [ + "email", + "totp" + ], + "documentation": "https://emaildocs.netcorecloud.com/docs/two-factor-authentication-2fa", + "name": "Netcore Cloud Email API" + }, + { + "domain": "netcup.eu", + "additional-domains": [ + "netcup.de", + "customercontrolpanel.de" + ], + "tfa": [ + "totp" + ], + "documentation": "https://www.netcup-wiki.de/wiki/Stammdaten_CCP#Zwei-Faktor-Authentifizierung_.282FA.29", + "name": "netcup" + }, + { + "domain": "neteller.com", + "url": "https://www.neteller.com/", + "tfa": [ + "sms", + "email", + "custom-software", + "totp" + ], + "custom-software": [ + "NETTELLER mobile" + ], + "documentation": "https://www.neteller.com/en/support#/path/1362152022", + "name": "NETELLER" + }, + { + "domain": "netim.com", + "url": "https://www.netim.com/", + "tfa": [ + "totp" + ], + "documentation": "https://support.netim.com/en/wiki/2FA", + "name": "Netim" + }, + { + "domain": "netlify.com", + "tfa": [ + "totp" + ], + "documentation": "https://docs.netlify.com/accounts-and-billing/user-settings/#two-factor-authentication-2fa", + "name": "Netlify" + }, + { + "domain": "netohq.com", + "additional-domains": [ + "neto.com.au" + ], + "tfa": [ + "totp" + ], + "documentation": "https://www.netohq.com/support/s/article/multi-factor-authentication", + "name": "Maropost Commerce Cloud" + }, + { + "domain": "netsuite.com", + "tfa": [ + "totp" + ], + "documentation": "https://docs.oracle.com/en/cloud/saas/netsuite/ns-online-help/section_4410552915.html", + "name": "NetSuite" + }, + { + "domain": "networksolutions.com", + "tfa": [ + "sms" + ], + "documentation": "https://customerservice.networksolutions.com/prweb/PRAuth/webkm/help/article/KC-344/networksolutions", + "name": "Network Solutions" + }, + { + "domain": "newegg.com", + "url": "https://www.newegg.com", + "tfa": [ + "sms", + "email", + "totp" + ], + "documentation": "https://kb.newegg.com/knowledge-base/2-step-verification/", + "name": "Newegg" + }, + { + "domain": "newgrounds.com", + "tfa": [ + "totp" + ], + "name": "Newgrounds" + }, + { + "domain": "nexcess.net", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://help.nexcess.net/client-portal/how-to-use-two-factor-authentication-in-the-client-portal", + "name": "Nexcess" + }, + { + "domain": "nexon.com", + "url": "https://www.nexon.com", + "tfa": [ + "totp", + "email", + "sms" + ], + "documentation": "https://support.nexon.net/hc/en-us/articles/360026634532", + "name": "Nexon" + }, + { + "domain": "nextdns.io", + "tfa": [ + "totp" + ], + "name": "NextDNS" + }, + { + "domain": "nextdoor.com", + "additional-domains": [ + "nextdoor.de", + "nextdoor.co.uk", + "nextdoor.nl" + ], + "tfa": [ + "email", + "sms" + ], + "documentation": "https://help.nextdoor.com/s/article/About-2-Step-Verification", + "name": "Nextdoor" + }, + { + "domain": "nexusmods.com", + "url": "https://www.nexusmods.com/", + "tfa": [ + "totp" + ], + "documentation": "https://help.nexusmods.com/article/74--", + "name": "Nexus Mods" + }, + { + "domain": "ngrok.com", + "tfa": [ + "totp" + ], + "name": "ngrok" + }, + { + "domain": "nhsapp.service.nhs.uk", + "url": "https://www.nhsapp.service.nhs.uk", + "additional-domains": [ + "access.login.nhs.uk" + ], + "tfa": [ + "sms" + ], + "documentation": "https://www.nhs.uk/nhs-services/online-services/nhs-app/nhs-app-help-and-support/logging-in-to-the-nhs-app/", + "name": "NHS App" + }, + { + "domain": "niagahoster.co.id", + "tfa": [ + "totp" + ], + "documentation": "https://www.niagahoster.co.id/kb/fitur-keamanan-terbaru-member-area-niagahoster-two-factor-authentication-2fa", + "name": "Niagahoster" + }, + { + "domain": "nic.ru", + "tfa": [ + "totp", + "sms" + ], + "documentation": "https://www.nic.ru/help/1529/", + "name": "RU-CENTER" + }, + { + "domain": "nicehash.com", + "tfa": [ + "totp", + "custom-hardware" + ], + "custom-hardware": [ + "Yubico OTP" + ], + "documentation": "https://www.nicehash.com/support/general-help/security/how-to-setup-2fa-security", + "name": "NiceHash" + }, + { + "domain": "nicovideo.jp", + "url": "https://www.nicovideo.jp/", + "tfa": [ + "email", + "totp" + ], + "documentation": "https://qa.nicovideo.jp/faq/show/4500", + "name": "Niconico" + }, + { + "domain": "niftypm.com", + "tfa": [ + "totp" + ], + "documentation": "https://help.niftypm.com/en/articles/5356559", + "name": "Nifty" + }, + { + "domain": "nimbusweb.me", + "tfa": [ + "totp" + ], + "documentation": "https://nimbusweb.me/guides/settings/account-settings-2-step-verification-for-sign-in/", + "name": "Nimbus Platform" + }, + { + "domain": "noip.com", + "tfa": [ + "totp" + ], + "documentation": "https://www.noip.com/support/knowledgebase/two-factor-authentication-last-pass/", + "name": "No-IP" + }, + { + "domain": "nominet.uk", + "url": "https://www.nominet.uk/", + "tfa": [ + "totp" + ], + "documentation": "https://registrars.nominet.uk/gtlds/onboarding-account-management/your-account/account-security-2/two-factor-authentication-user-guide-2/", + "name": "Nominet" + }, + { + "domain": "nordea.fi", + "url": "https://www.nordea.fi/", + "tfa": [ + "custom-software", + "custom-hardware" + ], + "custom-hardware": [ + "Code calculator" + ], + "custom-software": [ + "Nordea ID" + ], + "documentation": "https://www.nordea.fi/en/personal/our-services/online-mobile-services/access-codes.html", + "name": "Nordea [FI]" + }, + { + "domain": "nordea.se", + "tfa": [ + "custom-software" + ], + "custom-software": [ + "BankID" + ], + "documentation": "https://www.nordea.se/privat/vardagstjanster/internet-mobil-telefon/bank-id.html", + "name": "Nordea [SE]" + }, + { + "domain": "nordlayer.com", + "tfa": [ + "totp", + "sms" + ], + "documentation": "https://help.nordlayer.com/docs/mfa-sso", + "name": "NordLayer" + }, + { + "domain": "nordlocker.com", + "additional-domains": [ + "nordaccount.com" + ], + "tfa": [ + "totp", + "u2f" + ], + "documentation": "https://support.nordpass.com/hc/en-us/articles/360002770497", + "name": "NordLocker" + }, + { + "domain": "nordnet.se", + "tfa": [ + "custom-software" + ], + "custom-software": [ + "BankID" + ], + "name": "Nordnet [SE]" + }, + { + "domain": "nordpass.com", + "additional-domains": [ + "nordaccount.com" + ], + "tfa": [ + "totp", + "u2f" + ], + "documentation": "https://support.nordpass.com/hc/en-us/articles/360002770497", + "name": "NordPass" + }, + { + "domain": "nordvpn.com", + "additional-domains": [ + "nordaccount.com" + ], + "tfa": [ + "totp", + "u2f" + ], + "documentation": "https://support.nordvpn.com/1755768802/", + "name": "NordVPN" + }, + { + "domain": "noridianmedicareportal.com", + "url": "https://www.noridianmedicareportal.com", + "tfa": [ + "sms", + "email" + ], + "documentation": "https://med.noridianmedicare.com/web/portalguide/registration/multi-factor-authentication", + "name": "Noridian Medicare" + }, + { + "domain": "norisbank.de", + "tfa": [ + "sms", + "custom-software", + "custom-hardware" + ], + "custom-hardware": [ + "photoTAN card reader" + ], + "custom-software": [ + "norisbank photoTAN" + ], + "documentation": "https://www.norisbank.de/service/zwei-faktor-authentifizierung.html", + "name": "norisbank" + }, + { + "domain": "northwesternmutual.com", + "tfa": [ + "totp", + "call", + "sms" + ], + "documentation": "https://www.northwesternmutual.com/security-and-privacy/", + "name": "Northwestern Mutual" + }, + { + "domain": "norton.com", + "tfa": [ + "sms", + "call", + "totp", + "u2f" + ], + "documentation": "https://support.norton.com/sp/en/us/home/current/solutions/v100023155_NortonM_Retail_1_en_us", + "name": "Norton" + }, + { + "domain": "nostarch.com", + "tfa": [ + "totp" + ], + "name": "No Starch Press" + }, + { + "domain": "notejoy.com", + "tfa": [ + "totp" + ], + "documentation": "https://notejoy.com/help/two-factor-authentication", + "notes": "2FA is not available to Free plan users and is not available on the Android app.", + "name": "Notejoy" + }, + { + "domain": "notion.so", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://www.notion.so/help/two-step-verification", + "name": "Notion" + }, + { + "domain": "nozbe.com", + "tfa": [ + "totp", + "sms" + ], + "documentation": "https://nozbe.help/management/settings/#settings_2fa", + "name": "Nozbe Teams" + }, + { + "domain": "npmjs.com", + "tfa": [ + "totp", + "u2f" + ], + "documentation": "https://docs.npmjs.com/configuring-two-factor-authentication", + "name": "npm" + }, + { + "domain": "ns1.com", + "tfa": [ + "totp" + ], + "documentation": "https://ns1.com/articles/enabling-2-factor-authentication", + "name": "NS1" + }, + { + "domain": "nsandi.com", + "tfa": [ + "sms", + "call" + ], + "documentation": "https://www.nsandi.com/get-to-know-us/security/improved-security", + "name": "NS&I" + }, + { + "domain": "nuget.org", + "url": "https://www.nuget.org", + "tfa": [ + "sms", + "custom-software", + "totp", + "u2f", + "call" + ], + "custom-software": [ + "Microsoft Authenticator" + ], + "documentation": "https://azure.microsoft.com/en-us/documentation/articles/multi-factor-authentication/", + "name": "NuGet" + }, + { + "domain": "nulab.com", + "tfa": [ + "u2f", + "totp", + "sms" + ], + "documentation": "https://support.nulab.com/hc/en-us/articles/7732936736537", + "name": "Nulab" + }, + { + "domain": "nutmeg.com", + "url": "https://www.nutmeg.com/", + "tfa": [ + "totp" + ], + "documentation": "https://support.nutmeg.com/?article=115000495111-How-to-set-up-and-manage-2-step-verification", + "name": "Nutmeg" + }, + { + "domain": "o2.pl", + "tfa": [ + "u2f", + "custom-software" + ], + "custom-software": [ + "1login od WP" + ], + "documentation": "https://pomoc.o2.pl/1login/jak-wlaczyc-i-wylaczyc-logowanie-dwustopniowe", + "name": "o2" + }, + { + "domain": "o2switch.fr", + "tfa": [ + "email", + "totp" + ], + "notes": "Email 2FA is always enabled on the billing panel. On the cPanel, only TOTP is available, and using SSH/FTP won't prompt for 2FA", + "name": "o2switch" + }, + { + "domain": "obsidian.md", + "tfa": [ + "totp" + ], + "documentation": "https://help.obsidian.md/Obsidian/2-factor+authentication", + "name": "Obsidian" + }, + { + "domain": "odoo.com", + "tfa": [ + "totp" + ], + "documentation": "https://www.odoo.com/documentation/latest/applications/general/auth/2fa.html", + "name": "Odoo" + }, + { + "domain": "office.com", + "additional-domains": [ + "login.microsoftonline.com", + "office.microsoft.com", + "microsoft365.com", + "office365.com" + ], + "tfa": [ + "sms", + "call", + "email", + "custom-software", + "totp" + ], + "custom-software": [ + "Microsoft Authenticator" + ], + "documentation": "https://support.office.com/en-US/article/Set-up-multi-factor-authentication-for-Office-365-8f0454b2-f51a-4d9c-bcde-2c48e41621c6", + "name": "Microsoft 365" + }, + { + "domain": "okcupid.com", + "url": "https://www.okcupid.com/", + "tfa": [ + "sms" + ], + "documentation": "https://help.okcupid.com/hc/en-us/articles/5221247074701", + "name": "OkCupid" + }, + { + "domain": "okta.com", + "tfa": [ + "sms", + "call", + "email", + "totp", + "custom-hardware", + "u2f", + "custom-software" + ], + "custom-hardware": [ + "Yubico OTP" + ], + "custom-software": [ + "Okta Verify" + ], + "documentation": "https://help.okta.com/en-us/content/topics/security/mfa/mfa-factors.htm", + "name": "Okta" + }, + { + "domain": "okx.com", + "tfa": [ + "totp", + "sms" + ], + "documentation": "https://www.okx.com/support/hc/en-us/articles/360000350271", + "name": "OKX" + }, + { + "domain": "olb.de", + "tfa": [ + "custom-software", + "custom-hardware" + ], + "custom-software": [ + "OLB appTAN", + "OLB photoTAN" + ], + "custom-hardware": [ + "photoTAN reader" + ], + "documentation": "https://www.olb.de/service/ihre-fragen/onlinebanking/psd2", + "name": "Oldenburgische Landesbank" + }, + { + "domain": "olg.ca", + "tfa": [ + "totp" + ], + "documentation": "https://www.olg.ca/en/frequently-asked-questions.html#mfa-faqs", + "name": "OLG" + }, + { + "domain": "omg.lol", + "tfa": [ + "totp" + ], + "documentation": "https://home.omg.lol/info/two-factor-authentication", + "name": "omg.lol" + }, + { + "domain": "omgserv.com", + "url": "https://www.omgserv.com", + "tfa": [ + "totp" + ], + "documentation": "https://www.omgserv.com/fr/faq-site/comment_activer_la_double_authentification-103/", + "name": "OMGServ" + }, + { + "domain": "oncehub.com", + "url": "https://www.oncehub.com", + "tfa": [ + "sms" + ], + "documentation": "https://help.oncehub.com/help/set-up-two-factor-authentication", + "name": "OnceHub" + }, + { + "domain": "one.com", + "tfa": [ + "totp", + "custom-software" + ], + "custom-software": [ + "one.com companion" + ], + "documentation": "https://help.one.com/hc/en-us/articles/4404699986321", + "name": "One.com" + }, + { + "domain": "onedrive.live.com", + "tfa": [ + "sms", + "call", + "email", + "custom-software", + "totp" + ], + "custom-software": [ + "Microsoft Authenticator" + ], + "documentation": "https://support.microsoft.com/en-us/help/12408", + "notes": "2FA phone calls may not be available in all regions", + "name": "OneDrive" + }, + { + "domain": "onehub.com", + "url": "https://www.onehub.com/", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://support.onehub.com/hc/en-us/articles/360039792571", + "notes": "Software 2FA requires adding a phone number as a fallback.", + "name": "Onehub" + }, + { + "domain": "onelogin.com", + "tfa": [ + "custom-software", + "sms", + "totp", + "custom-hardware", + "u2f" + ], + "custom-software": [ + "OneLogin Protect", + "Duo", + "RSA SecurID", + "Symantec VIP" + ], + "custom-hardware": [ + "Yubico OTP" + ], + "documentation": "https://support.onelogin.com/kb/4266569", + "name": "OneLogin" + }, + { + "domain": "onesignal.com", + "tfa": [ + "totp" + ], + "documentation": "https://documentation.onesignal.com/docs/two-step-authentication", + "name": "OneSignal" + }, + { + "domain": "onet.pl", + "tfa": [ + "totp", + "u2f" + ], + "documentation": "https://pomoc.poczta.onet.pl/baza-wiedzy/czym-jest-weryfikacja-dwuetapowa/", + "name": "Onet" + }, + { + "domain": "oneview.malwarebytes.com", + "tfa": [ + "totp" + ], + "documentation": "https://service.malwarebytes.com/hc/en-us/articles/4413802943379", + "name": "Malwarebytes OneView" + }, + { + "domain": "onlinesbi.com", + "tfa": [ + "sms", + "custom-software" + ], + "custom-software": [ + "SBI Secure OTP" + ], + "documentation": "https://www.onlinesbi.com/sbijava/mobile/sbsecure_otp_app_faq.html", + "name": "State Bank of India" + }, + { + "domain": "onlydomains.com", + "tfa": [ + "email" + ], + "name": "OnlyDomains" + }, + { + "domain": "onshape.com", + "url": "https://www.onshape.com/", + "tfa": [ + "totp" + ], + "documentation": "https://cad.onshape.com/help/Content/managefreeaccount.htm", + "name": "Onshape" + }, + { + "domain": "onvista-bank.de", + "url": "https://www.onvista-bank.de/", + "tfa": [ + "sms", + "call" + ], + "documentation": "https://www.onvista-bank.de/service/sicherheit/transaktionssicherheit.html#tab-1301-2", + "name": "onvista bank" + }, + { + "domain": "openai.com", + "tfa": [ + "totp" + ], + "notes": "Enabling 2FA is only available from the ChatGPT interface at the moment.", + "name": "OpenAI" + }, + { + "domain": "openbank.es", + "url": "https://www.openbank.es", + "tfa": [ + "sms" + ], + "documentation": "https://www.openbank.es/en/security", + "name": "Openbank" + }, + { + "domain": "opencollective.com", + "tfa": [ + "totp", + "u2f" + ], + "documentation": "https://docs.opencollective.com/help/product/two-factor-authentication", + "name": "Open Collective" + }, + { + "domain": "opendns.com", + "url": "https://www.opendns.com/", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://umbrella.cisco.com/blog/2014/05/22/launching-two-step-verification/", + "notes": "Only available for enterprise accounts.", + "name": "OpenDNS" + }, + { + "domain": "openprovider.com", + "additional-domains": [ + "openprovider.eu" + ], + "tfa": [ + "totp" + ], + "documentation": "https://support.openprovider.eu/hc/en-us/articles/360019461160#h_01EZ761VFJZEZ95SJN3EYWXAMG", + "name": "Openprovider" + }, + { + "domain": "opensrs.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://help.opensrs.com/hc/en-us/articles/360009702113-Using-two-factor-authentication-in-webmail", + "name": "OpenSRS" + }, + { + "domain": "optimizely.com", + "url": "https://www.optimizely.com", + "tfa": [ + "totp" + ], + "documentation": "https://help.optimizely.com/Account_Settings/Protect_your_account_with_individual_2-step_verification", + "name": "Optimizely" + }, + { + "domain": "optumbank.com", + "url": "https://www.optumbank.com", + "tfa": [ + "sms", + "email" + ], + "documentation": "https://www.optumbank.com/support/healthsafe-id-sign-in.html", + "name": "Optum Bank" + }, + { + "domain": "optus.com.au", + "tfa": [ + "sms", + "email" + ], + "documentation": "https://www.optus.com.au/support/answer?id=20183", + "name": "Optus" + }, + { + "domain": "orcid.org", + "tfa": [ + "totp" + ], + "documentation": "https://support.orcid.org/hc/en-us/articles/360006971673", + "name": "ORCID" + }, + { + "domain": "oregonstate.edu", + "tfa": [ + "u2f", + "custom-hardware", + "custom-software" + ], + "custom-hardware": [ + "Feitian OTP c100 Token" + ], + "custom-software": [ + "Duo" + ], + "documentation": "https://oregonstate.teamdynamix.com/TDClient/1935/Portal/KB/?CategoryID=8235", + "name": "Oregon State University" + }, + { + "domain": "osf.io", + "tfa": [ + "totp" + ], + "documentation": "https://help.osf.io/article/239--", + "name": "Open Science Framework (OSF)" + }, + { + "domain": "osu.edu", + "tfa": [ + "sms", + "totp", + "u2f", + "custom-hardware", + "custom-software" + ], + "custom-hardware": [ + "Duo D100 Token" + ], + "custom-software": [ + "Duo" + ], + "documentation": "https://buckeyepass.osu.edu", + "name": "The Ohio State University" + }, + { + "domain": "osu.ppy.sh", + "tfa": [ + "email" + ], + "name": "osu!" + }, + { + "domain": "otago.ac.nz", + "tfa": [ + "u2f", + "totp", + "call", + "sms", + "custom-software" + ], + "custom-software": [ + "Microsoft Authenticator push notification", + "Authy" + ], + "documentation": "https://otago.custhelp.com/app/answers/detail/a_id/3073", + "notes": "U2F is available to staff only", + "name": "University of Otago" + }, + { + "domain": "otpbanka.hr", + "tfa": [ + "custom-hardware" + ], + "custom-hardware": [ + "OTP token device" + ], + "documentation": "https://www.otpbanka.hr/hr/upute/otp-token-upute-za-koristenje", + "name": "OTP banka" + }, + { + "domain": "outbrain.com", + "tfa": [ + "email", + "totp" + ], + "documentation": "https://www.outbrain.com/help/advertisers/two-factor-authentication/", + "name": "Outbrain" + }, + { + "domain": "outlook.com", + "additional-domains": [ + "outlook.live.com", + "hotmail.com" + ], + "tfa": [ + "sms", + "call", + "email", + "custom-software", + "totp" + ], + "custom-software": [ + "Microsoft Authenticator" + ], + "documentation": "https://support.microsoft.com/en-us/help/12408/", + "notes": "2FA phone calls may not be available in all regions", + "name": "Outlook.com" + }, + { + "domain": "ovh.com", + "url": "https://www.ovh.com/", + "tfa": [ + "sms", + "totp", + "u2f" + ], + "documentation": "https://docs.ovh.com/gb/en/customer/secure-account-with-2FA/", + "name": "OVH" + }, + { + "domain": "ox.ac.uk", + "tfa": [ + "totp", + "sms", + "custom-software", + "call" + ], + "custom-software": [ + "Microsoft Authenticator" + ], + "documentation": "https://help.it.ox.ac.uk/mfa", + "name": "University of Oxford" + }, + { + "domain": "ozbargain.com.au", + "tfa": [ + "totp" + ], + "documentation": "https://ozbargain.com.au/node/449886", + "name": "OzBargain" + }, + { + "domain": "pachca.com", + "tfa": [ + "totp" + ], + "documentation": "https://crm.pachca.com/know/articles/dvuhfaktornaya-autentifikaciya-(2fa)/", + "name": "\u041f\u0430\u0447\u043a\u0430" + }, + { + "domain": "packagist.org", + "tfa": [ + "totp" + ], + "documentation": "https://github.com/composer/packagist/pull/1031", + "name": "Packagist" + }, + { + "domain": "paddle.com", + "tfa": [ + "totp" + ], + "documentation": "https://www.paddle.com/help/start/set-up-paddle/how-can-i-enable-two-factor-authentication-on-my-account", + "name": "Paddle" + }, + { + "domain": "pairdomains.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://www.pairdomains.com/kb/posts/345", + "name": "pair Domains" + }, + { + "domain": "panic.com", + "tfa": [ + "totp" + ], + "documentation": "https://library.panic.com/general/sync-2fa/", + "name": "Panic Sync" + }, + { + "domain": "parallels.com", + "tfa": [ + "email", + "totp" + ], + "documentation": "https://kb.parallels.com/125441", + "name": "Parallels" + }, + { + "domain": "parimatch.com", + "url": "https://www.parimatch.com/", + "tfa": [ + "totp" + ], + "documentation": "https://faq.parimatch.com/en/account-access-and-security/", + "name": "Parimatch" + }, + { + "domain": "park.io", + "tfa": [ + "custom-software" + ], + "custom-software": [ + "Authy" + ], + "documentation": "https://park.io/support", + "name": "Park.io" + }, + { + "domain": "parsec.app", + "additional-domains": [ + "parsecgaming.com" + ], + "tfa": [ + "totp" + ], + "documentation": "https://support.parsec.app/hc/en-us/articles/4424732242445", + "name": "Parsec" + }, + { + "domain": "particle.io", + "tfa": [ + "totp" + ], + "documentation": "https://docs.particle.io/tutorials/developer-tools/two-step-authentication/", + "name": "Particle" + }, + { + "domain": "passpack.com", + "tfa": [ + "totp", + "custom-hardware" + ], + "custom-hardware": [ + "Yubico OTP" + ], + "documentation": "https://passpack.com/support/getting-started/two-factor-authentication/", + "name": "Passpack" + }, + { + "domain": "patelco.org", + "tfa": [ + "sms", + "call", + "email" + ], + "documentation": "https://www.patelco.org/member-support/digital-banking-services/online-banking#564171AC", + "name": "Patelco Credit Union" + }, + { + "domain": "patreon.com", + "url": "https://www.patreon.com/", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://support.patreon.com/hc/en-us/articles/206538086", + "name": "Patreon" + }, + { + "domain": "paxful.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://paxful.com/support/en-us/articles/6469323062300", + "name": "Paxful" + }, + { + "domain": "paxos.com", + "tfa": [ + "totp" + ], + "documentation": "https://help.paxos.com/hc/en-us/articles/360042320451", + "name": "Paxos" + }, + { + "domain": "pay.amazon.com", + "tfa": [ + "sms", + "call", + "totp" + ], + "documentation": "https://www.amazon.com/gp/help/customer/display.html?nodeId=G3PWZPU52FKN7PW4", + "notes": "SMS or phone call required to enable 2FA. Enabling on Amazon.com activates 2FA on other regional Amazon sites, such as UK and DE.", + "name": "Amazon Pay" + }, + { + "domain": "pay.google.com", + "tfa": [ + "sms", + "call", + "custom-software", + "totp", + "u2f" + ], + "custom-software": [ + "Google Prompts", + "Google Smart Lock" + ], + "documentation": "https://www.google.com/intl/en-US/landing/2step/features.html", + "name": "Google Pay" + }, + { + "domain": "payback.de", + "tfa": [ + "custom-software" + ], + "custom-software": [ + "Payback App" + ], + "documentation": "https://www.payback.de/faq/2-schritt-verifizierung", + "name": "Payback" + }, + { + "domain": "paychex.com", + "url": "https://www.paychex.com", + "tfa": [ + "sms", + "call" + ], + "name": "Paychex" + }, + { + "domain": "paycor.com", + "url": "https://www.paycor.com", + "tfa": [ + "sms", + "call", + "email", + "totp" + ], + "documentation": "https://support.paycor.com/s/article/Multi-Factor-Authentication-MFA-Requirements-and-Setup", + "name": "Paycor" + }, + { + "domain": "payeer.com", + "tfa": [ + "sms", + "email", + "custom-software" + ], + "custom-software": [ + "Telegram" + ], + "notes": "2FA via SMS costs 25\u00a2 USD per message.", + "name": "PAYEER" + }, + { + "domain": "payfit.com", + "documentation": "https://support.payfit.com/en/articles/73141", + "tfa": [ + "sms", + "email" + ], + "name": "PayFit" + }, + { + "domain": "paykassa.pro", + "tfa": [ + "totp" + ], + "documentation": "https://paykassa.pro/en/news/s-paykassa-vashi-dannye-pod-nadejnoy-zashchitoy/", + "name": "PayKassa" + }, + { + "domain": "payoneer.com", + "url": "https://www.payoneer.com/", + "tfa": [ + "sms", + "call" + ], + "documentation": "https://payoneer.custhelp.com/app/answers/detail/a_id/31268", + "name": "Payoneer" + }, + { + "domain": "paypal.com", + "additional-domains": [ + "paypal-search.com" + ], + "url": "https://www.paypal.com/", + "tfa": [ + "sms", + "totp", + "u2f" + ], + "notes": "Some methods of 2FA are only available in a few countries. Contact PayPal for more information.", + "documentation": "https://www.paypal.com/us/smarthelp/article/faq4057", + "name": "PayPal" + }, + { + "domain": "paypay.ne.jp", + "tfa": [ + "sms" + ], + "name": "PayPay" + }, + { + "domain": "paysafecard.com", + "url": "https://www.paysafecard.com/", + "tfa": [ + "sms", + "custom-software" + ], + "custom-software": [ + "paysafecard app" + ], + "name": "Paysafecard" + }, + { + "domain": "paytm.com", + "tfa": [ + "sms" + ], + "documentation": "https://blog.paytm.com/secure-2-step-authentication-login-on-paytms-website-6dd5a20ae1b2", + "name": "Paytm" + }, + { + "domain": "payworks.ca", + "tfa": [ + "totp" + ], + "name": "Payworks" + }, + { + "domain": "pccasegear.com", + "tfa": [ + "totp" + ], + "name": "PC Case Gear" + }, + { + "domain": "pcfinancial.ca", + "tfa": [ + "sms", + "call", + "email" + ], + "documentation": "https://www.pcfinancial.ca/en/learning-hub/faqs/managing-your-account/what-is-a-2-step-verification/", + "name": "President's Choice Financial" + }, + { + "domain": "pcloud.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://www.pcloud.com/help/general-help-center/how-can-i-set-up-two-factor-authentication", + "name": "PCloud" + }, + { + "domain": "perimeter81.com", + "tfa": [ + "sms", + "totp", + "custom-software", + "u2f", + "call" + ], + "custom-software": [ + "Perimeter 81 App Push Notification", + "Duo" + ], + "documentation": "https://support.perimeter81.com/docs/two-factor-authentication", + "notes": "Hardware 2FA is only available via Duo.", + "name": "Perimeter 81" + }, + { + "domain": "personalcapital.com", + "url": "https://www.personalcapital.com", + "tfa": [ + "call", + "email", + "sms", + "custom-software" + ], + "custom-software": [ + "Personal Capital App" + ], + "documentation": "https://support.personalcapital.com/hc/en-us/sections/200230560", + "name": "Personal Capital" + }, + { + "domain": "personalsavings.americanexpress.com", + "tfa": [ + "email", + "sms", + "call" + ], + "documentation": "https://www.americanexpress.com/en-us/banking/online-savings/login-security-and-help/", + "name": "American Express Savings" + }, + { + "domain": "phemex.com", + "tfa": [ + "totp" + ], + "documentation": "https://phemex.com/getting-started/how-do-i-enable-google-two-factor-authentication", + "name": "Phemex" + }, + { + "domain": "philips-hue.com", + "additional-domains": [ + "account.meethue.com", + "auth.meethue.com" + ], + "tfa": [ + "totp", + "email" + ], + "name": "Philips Hue" + }, + { + "domain": "phrase.com", + "additional-domains": [ + "memsource.com" + ], + "tfa": [ + "totp" + ], + "documentation": "https://support.phrase.com/hc/en-us/articles/6999456070556", + "name": "Phrase" + }, + { + "domain": "pichincha.com", + "tfa": [ + "sms", + "custom-software" + ], + "custom-software": [ + "Pichincha Token" + ], + "documentation": "https://www.pichincha.com/portal/Portals/0/manuales/InstructivoAutogestionToken.pdf", + "name": "Banco Pichincha" + }, + { + "domain": "pinata.cloud", + "tfa": [ + "totp" + ], + "name": "Pinata" + }, + { + "domain": "pinterest.com", + "tfa": [ + "sms", + "custom-software" + ], + "custom-software": [ + "Authy" + ], + "documentation": "https://help.pinterest.com/en/articles/two-factor-authentication", + "notes": "SMS-capable phone required for initial setup.", + "name": "Pinterest" + }, + { + "domain": "pipedrive.com", + "url": "https://www.pipedrive.com/", + "tfa": [ + "email" + ], + "documentation": "https://support.pipedrive.com/hc/en-us/articles/360000808405", + "name": "Pipedrive" + }, + { + "domain": "pivotaltracker.com", + "url": "https://www.pivotaltracker.com", + "tfa": [ + "totp" + ], + "documentation": "https://www.pivotaltracker.com/help/articles/two_factor_auth/", + "notes": "2FA only works on the web version. If enabled, you will not be able to use the mobile apps.", + "name": "Pivotal Tracker" + }, + { + "domain": "piwik.pro", + "tfa": [ + "totp" + ], + "documentation": "https://help.piwik.pro/support/getting-started/two-factor-authentication/", + "notes": "Contact customer support to enable 2FA.", + "name": "Piwik PRO" + }, + { + "domain": "pixieset.com", + "tfa": [ + "totp" + ], + "documentation": "https://help.pixieset.com/hc/en-us/articles/360046803431", + "name": "Pixieset" + }, + { + "domain": "pixiv.net", + "tfa": [ + "totp" + ], + "documentation": "https://www.pixiv.help/hc/en-us/articles/20876082054553", + "name": "Pixiv" + }, + { + "domain": "pkobp.pl", + "url": "https://www.pkobp.pl/", + "tfa": [ + "sms", + "custom-software" + ], + "documentation": "https://iko.pkobp.pl/funkcje/mobilna-autoryzacja/", + "custom-software": [ + "IKO App" + ], + "name": "PKO Bank Polski" + }, + { + "domain": "plaid.com", + "tfa": [ + "totp", + "sms" + ], + "documentation": "https://plaid.com/docs/account/security/#two-factor-authentication", + "notes": "Software token is only available for developer accounts. It is not available for the my.plaid.com user portal.", + "name": "Plaid" + }, + { + "domain": "plan.io", + "tfa": [ + "totp" + ], + "documentation": "https://support.plan.io/news/133", + "name": "Planio" + }, + { + "domain": "planethoster.com", + "url": "https://www.planethoster.com/", + "tfa": [ + "totp" + ], + "documentation": "https://blog.planethoster.com/securite-espace-client-planethoster/", + "name": "PlanetHoster" + }, + { + "domain": "planetscale.com", + "tfa": [ + "totp" + ], + "documentation": "https://planetscale.com/docs/concepts/mfa", + "name": "PlanetScale" + }, + { + "domain": "planningcenter.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://support.planningcenteronline.com/hc/en-us/articles/6984288823579", + "name": "Planning Center" + }, + { + "domain": "plastiq.com", + "url": "https://www.plastiq.com/", + "tfa": [ + "sms" + ], + "documentation": "https://help.plastiq.com/hc/en-us/articles/360006794893", + "name": "Plastiq" + }, + { + "domain": "platform360.io", + "additional-domains": [ + "my.plesk.com" + ], + "tfa": [ + "totp" + ], + "documentation": "https://docs.platform360.io/scp/dashboard/user-profile.html#multifactor-authentication", + "name": "Plesk 360" + }, + { + "domain": "plausible.io", + "tfa": [ + "totp" + ], + "documentation": "https://plausible.io/docs/2fa", + "name": "Plausible Analytics" + }, + { + "domain": "play.eslgaming.com", + "tfa": [ + "totp", + "u2f" + ], + "name": "ESL Play" + }, + { + "domain": "play.google.com", + "tfa": [ + "sms", + "call", + "totp", + "custom-software", + "u2f" + ], + "custom-software": [ + "Google Prompts", + "Google Smart Lock" + ], + "documentation": "https://www.google.com/intl/en-US/landing/2step/features.html", + "name": "Google Play" + }, + { + "domain": "playblackdesert.com", + "tfa": [ + "totp" + ], + "documentation": "https://www.naeu.playblackdesert.com/en-US/News/Detail?groupContentNo=164", + "name": "Black Desert" + }, + { + "domain": "playstation.com", + "additional-domains": [ + "sonyentertainmentnetwork.com" + ], + "url": "https://www.playstation.com/", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://www.playstation.com/support/account/2sv-psn-login/", + "name": "Playstation Network" + }, + { + "domain": "pleo.io", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://help.pleo.io/en/articles/5628169", + "name": "Pleo" + }, + { + "domain": "plex.tv", + "url": "https://www.plex.tv", + "tfa": [ + "totp" + ], + "documentation": "https://support.plex.tv/articles/two-factor-authentication/", + "name": "Plex" + }, + { + "domain": "plivo.com", + "url": "https://www.plivo.com", + "tfa": [ + "sms", + "call" + ], + "documentation": "https://support.plivo.com/hc/en-us/articles/360041766411", + "name": "Plivo" + }, + { + "domain": "pluralsight.com", + "url": "https://www.pluralsight.com", + "tfa": [ + "totp" + ], + "documentation": "https://help.pluralsight.com/help/multifactor-authentication", + "name": "Pluralsight" + }, + { + "domain": "plurk.com", + "tfa": [ + "totp" + ], + "documentation": "https://www.plurk.com/p/mrcii5", + "name": "Plurk" + }, + { + "domain": "plus500.com", + "additional-domains": [ + "plus500.at", + "plus500.bg", + "plus500.co.il", + "plus500.co.nz", + "plus500.co.uk", + "plus500.com.au", + "plus500.com.hr", + "plus500.com.mt", + "plus500.cz", + "plus500.es", + "plus500.de", + "plus500.dk", + "plus500.ee", + "plus500.fr", + "plus500.fi", + "plus500.gr", + "plus500.hu", + "plus500.is", + "plus500.it", + "plus500.lv", + "plus500.lt", + "plus500.nl", + "plus500.pt", + "plus500.pl", + "plus500.ru", + "plus500.ro", + "plus500.sk", + "plus500.si", + "plus500.se" + ], + "tfa": [ + "sms", + "call" + ], + "name": "Plus500" + }, + { + "domain": "plutus.it", + "tfa": [ + "totp" + ], + "documentation": "https://support.plutus.it/hc/en-us/articles/7203346943517", + "name": "Plutus" + }, + { + "domain": "pnc.com", + "url": "https://www.pnc.com/", + "tfa": [ + "sms" + ], + "documentation": "https://www.pnc.com/en/security-privacy/added-layer-security.html", + "name": "PNC Bank" + }, + { + "domain": "pobox.com", + "url": "https://www.pobox.com/", + "tfa": [ + "totp", + "custom-hardware" + ], + "custom-hardware": [ + "Yubico OTP" + ], + "documentation": "https://www.pobox.help/hc/en-us/sections/1500000033741", + "name": "Pobox" + }, + { + "domain": "pochta.ru", + "tfa": [ + "sms", + "totp" + ], + "name": "Russian Post (\u041f\u043e\u0447\u0442\u0430 \u0420\u043e\u0441\u0441\u0438\u0438)" + }, + { + "domain": "pocketsmith.com", + "url": "https://www.pocketsmith.com", + "tfa": [ + "totp" + ], + "documentation": "https://learn.pocketsmith.com/article/167--", + "name": "Pocketsmith" + }, + { + "domain": "podio.com", + "tfa": [ + "totp" + ], + "documentation": "https://help.podio.com/hc/en-us/articles/360017456279", + "name": "Podio" + }, + { + "domain": "poeditor.com", + "tfa": [ + "totp" + ], + "documentation": "https://poeditor.com/kb/how-to-enable-two-factor-authentication", + "name": "POEditor" + }, + { + "domain": "polisystems.ch", + "tfa": [ + "totp" + ], + "documentation": "https://wiki.polisystems.ch/English/Tutorials/Two-factor-authentification-on-Poli-Systems-Portal/", + "name": "Poli Systems" + }, + { + "domain": "poloniex.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.poloniex.com/hc/en-us/articles/360040016513", + "name": "Poloniex" + }, + { + "domain": "porkbun.com", + "tfa": [ + "totp", + "u2f" + ], + "documentation": "https://kb.porkbun.com/article/19--", + "name": "Porkbun" + }, + { + "domain": "portu.cz", + "tfa": [ + "sms" + ], + "documentation": "https://www.portu.cz/bezpecnost/", + "name": "Portu" + }, + { + "domain": "postbank.de", + "tfa": [ + "custom-software", + "custom-hardware" + ], + "custom-hardware": [ + "Seal One dongle" + ], + "custom-software": [ + "Postbank BestSign" + ], + "documentation": "https://www.postbank.de/privatkunden/sicherheitsverfahren.html", + "name": "Postbank" + }, + { + "domain": "posteo.de", + "tfa": [ + "totp" + ], + "documentation": "https://posteo.de/en/help/what-is-two-factor-authentication-and-how-do-i-set-it-up", + "name": "Posteo" + }, + { + "domain": "postman.com", + "tfa": [ + "totp" + ], + "documentation": "https://learning.postman.com/docs/getting-started/postman-account/#setting-up-two-factor-authentication", + "notes": "Can only be used with username/password accounts, not SSO or Google login accounts", + "name": "Postman" + }, + { + "domain": "postmarkapp.com", + "url": "https://www.postmarkapp.com/", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://postmarkapp.com/support/article/1081-how-do-i-use-two-factor-authentication-2fa", + "notes": "Setup requires SMS verification.", + "name": "Postmarkapp" + }, + { + "domain": "powerreviews.com", + "url": "https://www.powerreviews.com", + "tfa": [ + "totp" + ], + "documentation": "https://help.powerreviews.com/hc/en-us/articles/7277746655771", + "name": "PowerReviews" + }, + { + "domain": "practicebetter.io", + "tfa": [ + "totp" + ], + "documentation": "https://help.practicebetter.io/hc/en-us/articles/360055519791", + "name": "Practice Better" + }, + { + "domain": "practicepanther.com", + "url": "https://www.practicepanther.com", + "tfa": [ + "email" + ], + "documentation": "https://support.practicepanther.com/en/articles/1658238", + "name": "PracticePanther" + }, + { + "domain": "preyproject.com", + "url": "https://www.preyproject.com", + "tfa": [ + "totp" + ], + "documentation": "https://help.preyproject.com/article/248--", + "name": "Prey" + }, + { + "domain": "principal.com", + "url": "https://www.principal.com", + "tfa": [ + "sms", + "call", + "totp" + ], + "documentation": "https://secure02.principal.com/publicvsupply/GetFile?fm=ww42&ty=VOP&EXT=.VOP", + "name": "Principal" + }, + { + "domain": "privacy.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.privacy.com/hc/en-us/articles/360012047174", + "name": "Privacy" + }, + { + "domain": "privateinternetaccess.com", + "url": "https://www.privateinternetaccess.com", + "tfa": [ + "totp" + ], + "documentation": "https://www.privateinternetaccess.com/helpdesk/kb/articles/how-do-i-enable-and-use-two-factor-authentication", + "name": "Private Internet Access" + }, + { + "domain": "probit.com", + "url": "https://www.probit.com/", + "tfa": [ + "sms", + "totp", + "u2f" + ], + "documentation": "https://www.probit.com/en-us/hc/360018127111", + "name": "ProBit" + }, + { + "domain": "produbanco.com.ec", + "url": "https://www.produbanco.com.ec/", + "tfa": [ + "sms", + "custom-software" + ], + "custom-software": [ + "Entrust Identity" + ], + "documentation": "https://www.produbanco.com.ec/media/677613/manual-activaci%C3%B3n-token-digital2021.pdf", + "name": "ProduBanco" + }, + { + "domain": "product.gree.net", + "tfa": [ + "totp" + ], + "name": "GREE" + }, + { + "domain": "profitwell.com", + "tfa": [ + "totp" + ], + "documentation": "https://learn.profitwell.com/article/wsudrpi199-setting-up-2-factor-authentication", + "name": "ProfitWell" + }, + { + "domain": "prostocash.com", + "tfa": [ + "totp" + ], + "name": "Prostocash" + }, + { + "domain": "protolabs.com", + "tfa": [ + "totp" + ], + "name": "Protolabs" + }, + { + "domain": "proton.me", + "additional-domains": [ + "pm.me", + "protonmail.com", + "protonvpn.com" + ], + "tfa": [ + "totp", + "u2f" + ], + "documentation": "https://proton.me/support/two-factor-authentication-2fa", + "notes": "TOTP must be enabled to use a hardware token.", + "name": "Proton" + }, + { + "domain": "prudential.com", + "url": "https://www.prudential.com", + "tfa": [ + "sms" + ], + "name": "Prudential Financial" + }, + { + "domain": "psu.edu", + "tfa": [ + "sms", + "call", + "custom-software", + "custom-hardware", + "u2f" + ], + "custom-software": [ + "Duo" + ], + "custom-hardware": [ + "Duo D100 Token" + ], + "documentation": "https://get2fa.psu.edu", + "name": "Pennsylvania State University" + }, + { + "domain": "publishers.basicattentiontoken.org", + "tfa": [ + "totp", + "u2f" + ], + "documentation": "https://support.brave.com/hc/en-us/articles/360021649491", + "name": "Basic Attention Token" + }, + { + "domain": "purdue.edu", + "tfa": [ + "custom-software", + "custom-hardware" + ], + "custom-software": [ + "Duo" + ], + "custom-hardware": [ + "BoilerKey Hardware OTP" + ], + "documentation": "https://www.it.purdue.edu/login/", + "name": "Purdue University" + }, + { + "domain": "purse.io", + "tfa": [ + "totp" + ], + "documentation": "https://support.purse.io/en/article/2-factor-authentication-2fa-xa8jxn/", + "name": "Purse" + }, + { + "domain": "pusher.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.pusher.com/hc/en-us/articles/4411997260049", + "name": "Pusher" + }, + { + "domain": "pushover.net", + "tfa": [ + "totp" + ], + "documentation": "https://support.pushover.net/i49", + "name": "Pushover" + }, + { + "domain": "put.io", + "tfa": [ + "totp" + ], + "documentation": "https://help.put.io/en/articles/4783180-two-factor-authentication-2fa", + "name": "put.io" + }, + { + "domain": "putler.com", + "tfa": [ + "totp" + ], + "documentation": "https://www.putler.com/documentation/activate-2fa-on-your-putler-account/", + "name": "Putler" + }, + { + "domain": "pypi.org", + "tfa": [ + "totp", + "u2f" + ], + "documentation": "https://pypi.org/help/#twofa", + "name": "PyPI" + }, + { + "domain": "pythonanywhere.com", + "url": "https://www.pythonanywhere.com", + "tfa": [ + "totp" + ], + "documentation": "https://help.pythonanywhere.com/pages/SecuringYourAccount/", + "name": "PythonAnywhere" + }, + { + "domain": "pz.gov.pl", + "tfa": [ + "sms" + ], + "documentation": "https://pz.gov.pl/Instrukcja_Uzytkownika_PZ.pdf", + "name": "Profil zaufany" + }, + { + "domain": "qantas.com", + "tfa": [ + "sms", + "email", + "totp" + ], + "documentation": "https://qantas.com/au/en/frequent-flyer/member-account-security.html#frequently-asked-questions", + "name": "Qantas" + }, + { + "domain": "qnap.com", + "url": "https://www.qnap.com", + "tfa": [ + "email", + "totp" + ], + "documentation": "https://www.qnap.com/en-us/how-to/tutorial/article/how-to-enhance-account-security-using-2-step-verification", + "name": "QNAP" + }, + { + "domain": "qtrade.ca", + "tfa": [ + "sms", + "call" + ], + "documentation": "https://help.qtrade.ca/hc/en-ca/articles/4640357680283", + "name": "Qtrade" + }, + { + "domain": "questionpro.com", + "tfa": [ + "sms" + ], + "documentation": "https://questionpro.com/help/two-factor-authentication.html", + "name": "QuestionPro" + }, + { + "domain": "questrade.com", + "url": "https://www.questrade.com", + "tfa": [ + "sms", + "call", + "totp", + "email" + ], + "documentation": "https://www.questrade.com/learning/questrade-basics/lesson/account-profile-and-security", + "name": "Questrade" + }, + { + "domain": "quickbooks.intuit.com", + "tfa": [ + "sms", + "call", + "totp", + "email" + ], + "documentation": "https://quickbooks.intuit.com/learn-support/en-us/manage-passwords/verify-your-account-with-multi-factor-authentication/00/186340", + "notes": "TOTP 2FA only available after enabling SMS or phone 2FA.", + "name": "Quickbooks Online" + }, + { + "domain": "quicken.com", + "tfa": [ + "sms", + "call", + "email" + ], + "documentation": "https://www.quicken.com/support/secure-login-mfa-information", + "name": "Quicken" + }, + { + "domain": "quickfile.co.uk", + "url": "https://www.quickfile.co.uk", + "tfa": [ + "totp" + ], + "documentation": "https://community.quickfile.co.uk/t/2-factor-authentication/8892", + "name": "QuickFile" + }, + { + "domain": "quidax.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://support.quidax.com/hc/en-us/articles/360016734491", + "name": "Quidax" + }, + { + "domain": "rabobank.nl", + "tfa": [ + "custom-hardware" + ], + "custom-hardware": [ + "Rabo Scanner" + ], + "documentation": "https://www.rabobank.nl/bedrijven/betalen/zelf-betalingen-doen/rabo-scanner/", + "name": "Rabobank" + }, + { + "domain": "rackspace.com", + "url": "https://www.rackspace.com/", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://docs.rackspace.com/docs/multi-factor-authentication", + "name": "Rackspace" + }, + { + "domain": "raindrop.io", + "tfa": [ + "totp" + ], + "documentation": "https://raindropio.canny.io/feature-requests/p/two-factor-authentication-2fa", + "name": "Raindrop" + }, + { + "domain": "raisin.com", + "additional-domains": [ + "weltsparen.at", + "weltsparen.de", + "raisin.nl", + "raisin.es", + "raisin.fr", + "raisin.ie", + "raisin.co.uk" + ], + "tfa": [ + "sms", + "call", + "totp" + ], + "name": "Raisin" + }, + { + "domain": "ramnode.com", + "url": "https://www.ramnode.com", + "tfa": [ + "totp" + ], + "documentation": "https://clientarea.ramnode.com/knowledgebase.php?action=displayarticle&id=4129", + "name": "RamNode" + }, + { + "domain": "ramp.com", + "tfa": [ + "sms", + "email", + "totp" + ], + "documentation": "https://support.ramp.com/hc/en-us/articles/5775209997715", + "name": "Ramp" + }, + { + "domain": "rapidapi.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://docs.rapidapi.com/docs/account-creation-and-settings#two-factor-authentication-2fa", + "name": "RapidAPI" + }, + { + "domain": "raspberrypi.com", + "tfa": [ + "totp" + ], + "documentation": "https://www.raspberrypi.com/documentation/services/id.html", + "name": "Raspberry Pi" + }, + { + "domain": "ravelin.com", + "url": "https://www.ravelin.com/", + "tfa": [ + "totp" + ], + "documentation": "https://ravelin.zendesk.com/hc/en-us/articles/115001071665", + "name": "Ravelin" + }, + { + "domain": "raygun.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://raygun.com/documentation/privacy-security/two-factor-auth/", + "name": "Raygun" + }, + { + "domain": "razer.com", + "url": "https://www.razer.com/", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://mysupport.razer.com/app/answers/detail/a_id/1716", + "name": "Razer" + }, + { + "domain": "rbcroyalbank.com", + "tfa": [ + "sms", + "custom-software" + ], + "custom-software": [ + "RBC App Push Notification" + ], + "notes": "2FA can only be enabled via the app", + "documentation": "https://www.rbcroyalbank.com/ways-to-bank/tutorials/general/2-step-verification.html", + "name": "RBC Royal Bank" + }, + { + "domain": "rbs.co.uk", + "tfa": [ + "sms" + ], + "documentation": "https://personal.rbs.co.uk/personal/fraud-and-security/sca.html", + "name": "Royal Bank of Scotland" + }, + { + "domain": "readme.com", + "additional-domains": [ + "readme.io" + ], + "tfa": [ + "totp" + ], + "documentation": "https://docs.readme.com/docs/two-factor-authentication", + "name": "ReadMe" + }, + { + "domain": "realme.govt.nz", + "url": "https://www.realme.govt.nz/", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://www.realme.govt.nz/help/#second-factor-authentication", + "name": "RealMe" + }, + { + "domain": "realvnc.com", + "url": "https://www.realvnc.com", + "tfa": [ + "totp" + ], + "documentation": "https://help.realvnc.com/hc/en-us/articles/360003110878", + "name": "RealVNC" + }, + { + "domain": "rebel.com", + "url": "https://www.rebel.com/", + "tfa": [ + "totp" + ], + "documentation": "https://support.rebel.com/hc/en-us/articles/360039417613", + "notes": "You must contact customer support to enable 2FA.", + "name": "Rebel.com" + }, + { + "domain": "rebrandly.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.rebrandly.com/hc/en-us/articles/360007220373", + "name": "Rebrandly" + }, + { + "domain": "recruitee.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://support.recruitee.com/en/articles/5209837", + "name": "Recruitee" + }, + { + "domain": "recurly.com", + "url": "https://www.recurly.com/", + "tfa": [ + "sms", + "custom-software" + ], + "custom-software": [ + "Authy" + ], + "documentation": "https://docs.recurly.com/docs/two-factor-authentication", + "name": "Recurly" + }, + { + "domain": "reddit.com", + "url": "https://www.reddit.com/", + "tfa": [ + "totp" + ], + "documentation": "https://www.reddithelp.com/hc/en-us/articles/360043470031", + "name": "Reddit" + }, + { + "domain": "redhat.com", + "tfa": [ + "totp" + ], + "documentation": "https://access.redhat.com/documentation/en-us/red_hat_customer_portal/1/html-single/using_two-factor_authentication/index", + "name": "Red Hat" + }, + { + "domain": "redis.com", + "additional-domains": [ + "redislabs.com" + ], + "tfa": [ + "totp", + "sms" + ], + "documentation": "https://docs.redis.com/latest/rc/security/access-control/multi-factor-authentication/", + "notes": "SMS 2FA must be enabled before TOTP 2FA can be enabled. SMS 2FA cannot be disabled even when TOTP is enabled.", + "name": "Redis Enterprise Cloud" + }, + { + "domain": "redshelf.com", + "url": "https://www.redshelf.com/", + "tfa": [ + "totp" + ], + "documentation": "https://solve.redshelf.com/hc/en-us/articles/1260802590609", + "name": "RedShelf" + }, + { + "domain": "refersion.com", + "tfa": [ + "totp", + "sms" + ], + "documentation": "https://support.refersion.com/en/articles/2989703", + "notes": "SMS 2FA is not available in all regions.", + "name": "Refersion" + }, + { + "domain": "register365.com", + "url": "https://www.register365.com/", + "tfa": [ + "totp" + ], + "documentation": "https://www.register365.com/support/articles/enabling-two-factor-authentication-for-the-control-panel/", + "name": "Register365" + }, + { + "domain": "registro.br", + "tfa": [ + "totp", + "u2f" + ], + "documentation": "https://registro.br/ajuda/gerenciamento-de-conta/token/", + "name": "Registro.br" + }, + { + "domain": "rejoiner.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://docs.rejoiner.com/docs/user-account#managing-two-factor-authentication", + "name": "Rejoiner" + }, + { + "domain": "remind.com", + "tfa": [ + "email" + ], + "documentation": "https://help.remind.com/hc/en-us/articles/360017140539", + "name": "Remind" + }, + { + "domain": "remitano.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.remitano.com/en/articles/781044", + "name": "Remitano" + }, + { + "domain": "remitly.com", + "tfa": [ + "sms", + "call", + "custom-software" + ], + "custom-software": [ + "Remitly app" + ], + "documentation": "https://help.remitly.com/s/article/two-factor-authentication-verification", + "name": "Remitly" + }, + { + "domain": "remotedesktopmanager.com", + "url": "https://www.remotedesktopmanager.com", + "tfa": [ + "totp" + ], + "documentation": "https://help.remotedesktopmanager.com/howto_googleauthenticator.htm", + "notes": "2FA is only available on the Enterprise Edition", + "name": "Remote Desktop Manager" + }, + { + "domain": "render.com", + "tfa": [ + "totp" + ], + "name": "Render" + }, + { + "domain": "repairshopr.com", + "url": "https://www.repairshopr.com/", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://feedback.repairshopr.com/knowledgebase/articles/928266", + "notes": "SMS only available as a backup to Google Authenticator.", + "name": "Repairshopr" + }, + { + "domain": "replicon.com", + "url": "https://www.replicon.com/", + "tfa": [ + "totp", + "email" + ], + "documentation": "https://www.replicon.com/help/setting-up-your-multi-factor-2-step-authentication-method/", + "name": "Replicon" + }, + { + "domain": "report-uri.com", + "tfa": [ + "totp" + ], + "documentation": "https://scotthelme.co.uk/dealing-with-account-recovery-and-2fa/", + "name": "Report URI" + }, + { + "domain": "republic.com", + "additional-domains": [ + "republic.co", + "fig.co" + ], + "tfa": [ + "totp" + ], + "documentation": "https://republic.com/help/how-do-i-add-a-digital-asset-wallet-on-republic-1", + "name": "Republic" + }, + { + "domain": "republicwireless.com", + "tfa": [ + "totp" + ], + "documentation": "https://help.republicwireless.com/hc/en-us/articles/360008807234", + "name": "Republic Wireless" + }, + { + "domain": "rest.com.au", + "tfa": [ + "sms" + ], + "name": "Rest Super" + }, + { + "domain": "restorecord.com", + "tfa": [ + "totp" + ], + "name": "RestoreCord" + }, + { + "domain": "restream.io", + "tfa": [ + "totp" + ], + "documentation": "https://support.restream.io/en/articles/870429", + "name": "Restream.io" + }, + { + "domain": "rev.com", + "url": "https://www.rev.com/", + "tfa": [ + "totp", + "email" + ], + "documentation": "https://support.rev.com/hc/en-us/articles/360035810851", + "name": "Rev" + }, + { + "domain": "revenuecat.com", + "tfa": [ + "totp" + ], + "documentation": "https://docs.revenuecat.com/docs/security", + "name": "RevenueCat" + }, + { + "domain": "revolut.com", + "tfa": [ + "sms", + "email", + "custom-software" + ], + "custom-software": [ + "Revolut App" + ], + "documentation": "https://www.revolut.com/en-US/help/more/revolut-web-app/accessing-the-retail-web-app", + "name": "Revolut" + }, + { + "domain": "rewind.com", + "tfa": [ + "totp" + ], + "documentation": "https://rewind.com/blog/how-to-set-up-a-2fa-for-rewind/", + "name": "Rewind" + }, + { + "domain": "rightcapital.com", + "url": "https://www.rightcapital.com", + "tfa": [ + "totp" + ], + "documentation": "https://help.rightcapital.com/article/40-two-step-verification", + "name": "RightCapital" + }, + { + "domain": "ring.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://support.ring.com/hc/en-us/articles/360039693891", + "name": "Ring" + }, + { + "domain": "ringcentral.com", + "url": "https://www.ringcentral.com", + "tfa": [ + "sms", + "email" + ], + "documentation": "https://support.ringcentral.com/article/Enabling-or-disabling-Account-Validation.html", + "name": "RingCentral" + }, + { + "domain": "riotgames.com", + "additional-domains": [ + "leagueoflegends.com", + "playvalorant.com", + "playruneterra.com", + "lolesports.com" + ], + "tfa": [ + "email" + ], + "documentation": "https://support-valorant.riotgames.com/hc/articles/4415709691667", + "name": "Riot Games" + }, + { + "domain": "ripe.net", + "url": "https://www.ripe.net/", + "tfa": [ + "totp" + ], + "documentation": "https://www.ripe.net/participate/member-support/ripe-ncc-access/two-step-verification", + "name": "Ripe NCC" + }, + { + "domain": "ripio.com", + "tfa": [ + "totp" + ], + "documentation": "https://launchpad.ripio.com/blog/que-es-autenticacion-dos-factores-2fa", + "name": "Ripio" + }, + { + "domain": "rippling.com", + "tfa": [ + "totp" + ], + "name": "Rippling" + }, + { + "domain": "river.com", + "tfa": [ + "totp", + "sms" + ], + "documentation": "https://river.com/support/knowledge-base/articles/enable-multi-factor-authentication", + "name": "River Financial" + }, + { + "domain": "rmit.edu.au", + "tfa": [ + "sms", + "totp", + "custom-software" + ], + "custom-software": [ + "Microsoft Authenticator" + ], + "documentation": "https://www.rmit.edu.au/students/support-and-facilities/it-services-for-students/cyber-safety/multi-factor-authentication", + "name": "RMIT University" + }, + { + "domain": "robertsspaceindustries.com", + "tfa": [ + "email", + "totp" + ], + "documentation": "https://support.robertsspaceindustries.com/hc/en-us/articles/115009965628", + "name": "Roberts Space Industries" + }, + { + "domain": "robinhood.com", + "url": "https://www.robinhood.com/", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://support.robinhood.com/hc/en-us/articles/360001213783", + "name": "Robinhood" + }, + { + "domain": "roblox.com", + "tfa": [ + "totp", + "email", + "u2f" + ], + "documentation": "https://en.help.roblox.com/hc/en-us/articles/212459863", + "notes": "U2F requires TOTP to be setup. U2F is currently only supported in web browsers.", + "name": "Roblox" + }, + { + "domain": "roboform.com", + "url": "https://www.roboform.com/", + "tfa": [ + "sms", + "email", + "totp" + ], + "documentation": "https://help.roboform.com/hc/en-us/articles/115002729512", + "name": "RoboForm" + }, + { + "domain": "rocketbeans.tv", + "tfa": [ + "totp" + ], + "documentation": "https://forum.rocketbeans.tv/t/35407/31", + "name": "Rocket Beans TV" + }, + { + "domain": "rollbar.com", + "tfa": [ + "totp" + ], + "documentation": "https://rollbar.com/docs/two-factor-authentication/", + "name": "Rollbar" + }, + { + "domain": "rubygems.org", + "tfa": [ + "totp" + ], + "documentation": "https://guides.rubygems.org/setting-up-multifactor-authentication/", + "name": "RubyGems.org" + }, + { + "domain": "rug.nl", + "tfa": [ + "totp" + ], + "documentation": "https://www.rug.nl/society-business/centre-for-information-technology/security/multi-factor-authentication", + "name": "University of Groningen" + }, + { + "domain": "runbox.com", + "tfa": [ + "totp" + ], + "documentation": "https://help.runbox.com/account-security/", + "name": "Runbox" + }, + { + "domain": "runcloud.io", + "url": "https://www.runcloud.io", + "tfa": [ + "totp", + "sms" + ], + "documentation": "https://runcloud.io/docs/account/authentication.html", + "name": "RunCloud" + }, + { + "domain": "runescape.com", + "url": "https://www.runescape.com/", + "tfa": [ + "totp" + ], + "documentation": "https://support.runescape.com/hc/en-gb/articles/206811835", + "name": "RuneScape" + }, + { + "domain": "runpanther.io", + "tfa": [ + "totp" + ], + "name": "Panther" + }, + { + "domain": "runsignup.com", + "tfa": [ + "totp" + ], + "documentation": "https://runsignup.blog/2018/09/06/multi-factor-authentication/", + "name": "RunSignUp" + }, + { + "domain": "safecu.org", + "tfa": [ + "sms", + "call", + "email" + ], + "documentation": "https://www.safecu.org/personal/online-security/enhanced-login-security", + "name": "SAFE Credit Union" + }, + { + "domain": "sailpoint.com", + "tfa": [ + "sms", + "call", + "email", + "custom-software", + "custom-hardware" + ], + "custom-hardware": [ + "RSA SecurID", + "Symantec VIP" + ], + "custom-software": [ + "Duo" + ], + "notes": "Applies to IdentityIQ and IdentityNow.", + "name": "SailPoint" + }, + { + "domain": "sailthru.com", + "tfa": [ + "totp" + ], + "notes": "You must contact Sailthru support to enable 2FA.", + "documentation": "https://getstarted.sailthru.com/mfa/mfa-hub/login-mfa/", + "name": "Sailthru" + }, + { + "domain": "salesforce.com", + "tfa": [ + "sms", + "email", + "totp", + "u2f", + "custom-software" + ], + "custom-software": [ + "Salesforce Authenticator" + ], + "documentation": "https://developer.salesforce.com/docs/atlas.en-us.securityImplGuide.meta/securityImplGuide/add_time-based_token.htm", + "name": "Salesforce" + }, + { + "domain": "samsung.com", + "url": "https://www.samsung.com/", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://account.samsung.com/membership/guide/2step/", + "name": "Samsung" + }, + { + "domain": "sanebox.com", + "url": "https://www.sanebox.com/", + "tfa": [ + "totp" + ], + "documentation": "https://www.sanebox.com/help/127", + "name": "SaneBox" + }, + { + "domain": "santander.de", + "tfa": [ + "sms", + "custom-software" + ], + "custom-software": [ + "SantanderSign" + ], + "documentation": "https://www.santander.de/privatkunden/service-kontakt/information/faq/psd2/", + "name": "Santander [DE]" + }, + { + "domain": "santander.pl", + "tfa": [ + "sms", + "custom-software" + ], + "custom-software": [ + "Santander mobile app" + ], + "documentation": "https://www.santander.pl/klient-indywidualny/kontakt/pytania-i-odpowiedzi-bankowosc-internetowa", + "name": "Santander [PL]" + }, + { + "domain": "santander.pt", + "url": "https://www.santander.pt/", + "tfa": [ + "sms" + ], + "documentation": "https://www.santander.pt/pt_PT/Particulares/Informacoes/psd2-diretiva-servicos-pagamento.html", + "name": "Santander [PT]" + }, + { + "domain": "satoshitango.com", + "tfa": [ + "totp" + ], + "documentation": "https://github.com/2factorauth/twofactorauth/pull/2321#issuecomment-273971890", + "name": "SatoshiTango" + }, + { + "domain": "scalable.capital", + "tfa": [ + "custom-software" + ], + "custom-software": [ + "Scalable Capital app" + ], + "documentation": "https://de.scalable.capital/faq#sicherheit-datenschutz", + "name": "Scalable Capital" + }, + { + "domain": "scalefusion.com", + "tfa": [ + "email", + "totp" + ], + "documentation": "https://help.mobilock.in/article/6j7ps7cw8x", + "notes": "Only account owners and co-account owners can enable 2FA.", + "name": "Scalefusion" + }, + { + "domain": "scalegrid.io", + "tfa": [ + "totp" + ], + "documentation": "https://help.scalegrid.io/docs/account-two-factor-authentication", + "name": "ScaleGrid" + }, + { + "domain": "scaleway.com", + "url": "https://www.scaleway.com", + "tfa": [ + "totp" + ], + "documentation": "https://www.scaleway.com/en/docs/how-to-activate-two-factor-authentication/", + "name": "Scaleway" + }, + { + "domain": "scalr.com", + "url": "https://www.scalr.com", + "tfa": [ + "totp" + ], + "documentation": "https://scalr-wiki.atlassian.net/wiki/display/docs/Two-Factor+Authentication", + "name": "Scalr" + }, + { + "domain": "schibsted.com", + "additional-domains": [ + "schibsted.no", + "schibsted.fi", + "schibsted.dk", + "vg.no", + "finn.no", + "blocket.se", + "e24.no", + "aftonbladet.se", + "dba.dk", + "adressa.no", + "tronderbladet.no", + "bt.no", + "fvn.no", + "svd.se", + "tv.nu", + "aftenbladet.no", + "klart.se", + "omni.se", + "bytbil.com", + "godt.no", + "minmote.no", + "pent.no", + "tek.no", + "oikotie.fi", + "tori.fi" + ], + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://login.schibsted.com/profile-pages/faq#how-to-activate-and-deactivate-2fa", + "name": "Schibsted" + }, + { + "domain": "schwab.com", + "additional-domains": [ + "schwabplan.com" + ], + "tfa": [ + "sms", + "custom-software", + "custom-hardware" + ], + "custom-software": [ + "Symantec VIP" + ], + "custom-hardware": [ + "Symantec VIP token" + ], + "documentation": "https://www.schwab.com/help/two-factor-authentication", + "name": "Charles Schwab" + }, + { + "domain": "scotiabank.com", + "tfa": [ + "custom-software" + ], + "custom-software": [ + "Scotiabank App" + ], + "documentation": "https://www.scotiabank.com/ca/en/personal/bank-your-way/digital-banking-guide/banking-basics/two-step-verification.html", + "name": "Scotiabank [CA]" + }, + { + "domain": "scriptinghelpers.org", + "tfa": [ + "totp" + ], + "name": "Scripting Helpers" + }, + { + "domain": "scryfall.com", + "url": "https://www.scryfall.com/", + "tfa": [ + "totp" + ], + "documentation": "https://scryfall.com/docs/privacy#scryfall-accounts", + "name": "Scryfall" + }, + { + "domain": "scu.edu", + "tfa": [ + "sms", + "custom-software", + "u2f", + "call" + ], + "custom-software": [ + "Duo" + ], + "documentation": "https://scu.edu/technology/get-connected/duo/learn-more-about-2fa/", + "name": "Santa Clara University" + }, + { + "domain": "sdfcu.org", + "additional-domains": [ + "sdfcuib.org" + ], + "tfa": [ + "sms", + "email", + "totp" + ], + "documentation": "https://www.sdfcuib.org/dbank/live/static/help.html#update_security_options", + "name": "State Department Federal Credit Union" + }, + { + "domain": "se.com", + "additional-domains": [ + "schneider-electric.com", + "schneider-electric.cn" + ], + "tfa": [ + "totp" + ], + "documentation": "https://www.se.com/ww/en/faqs/FAQ000220689/", + "name": "Schneider Electric" + }, + { + "domain": "seatgeek.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://support.seatgeek.com/hc/en-us/articles/360007288013", + "name": "SeatGeek" + }, + { + "domain": "seb.se", + "tfa": [ + "custom-software" + ], + "custom-software": [ + "BankID" + ], + "documentation": "https://seb.se/privat/digitala-tjanster", + "name": "SEB" + }, + { + "domain": "section.io", + "url": "https://www.section.io", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://www.section.io/docs/how-to/user-management/enable-two-factor-authentication-on-your-account/", + "name": "section.io" + }, + { + "domain": "securesafe.com", + "url": "https://www.securesafe.com", + "tfa": [ + "sms" + ], + "documentation": "https://www.securesafe.com/en/faq/general-questions/how-can-i-activate-2-factor-authentication/", + "notes": "2FA is only available on paid plans.", + "name": "SecureSafe" + }, + { + "domain": "securitytrails.com", + "tfa": [ + "totp" + ], + "documentation": "https://securitytrails.com/support/knowledge-base/two-factor-authentication-2fa-2/", + "name": "SecurityTrails" + }, + { + "domain": "sefcu.com", + "tfa": [ + "sms", + "call", + "email", + "totp" + ], + "documentation": "https://www.sefcu.com/node/11406/tutorial", + "name": "State Employees Federal Credit Union" + }, + { + "domain": "segment.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://segment.com/docs/iam/mfa/", + "notes": "SMS 2FA is only available for US and Canada phone numbers.", + "name": "Segment" + }, + { + "domain": "selfwealth.com.au", + "url": "https://www.selfwealth.com.au/", + "tfa": [ + "totp" + ], + "documentation": "https://www.selfwealth.com.au/two-factor-authentication-now-available/", + "name": "SelfWealth" + }, + { + "domain": "sellix.io", + "tfa": [ + "email", + "totp" + ], + "documentation": "https://help.sellix.io/en/articles/4502811", + "name": "Sellix" + }, + { + "domain": "semaphoreci.com", + "tfa": [ + "totp" + ], + "documentation": "https://semaphoreci.com/docs/two-step-verification.html", + "name": "Semaphore" + }, + { + "domain": "semrush.com", + "url": "https://www.semrush.com/", + "tfa": [ + "email" + ], + "documentation": "https://www.semrush.com/kb/1130--", + "name": "Semrush" + }, + { + "domain": "sendcloud.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.sendcloud.com/hc/en-gb/articles/4418777976212#1", + "name": "Sendcloud" + }, + { + "domain": "sendgrid.com", + "tfa": [ + "sms", + "custom-software" + ], + "custom-software": [ + "Authy" + ], + "documentation": "https://sendgrid.com/docs/ui/account-and-settings/two-factor-authentication/", + "name": "SendGrid" + }, + { + "domain": "sendinblue.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://help.sendinblue.com/hc/en-us/articles/360021203440", + "name": "Sendinblue" + }, + { + "domain": "sendowl.com", + "tfa": [ + "totp" + ], + "documentation": "https://help.sendowl.com/help/two-factor-authentication", + "name": "SendOwl" + }, + { + "domain": "sendsafely.com", + "tfa": [ + "totp", + "sms" + ], + "documentation": "https://blog.sendsafely.com/authenticator-app", + "notes": "TOTP 2FA requires SMS as a backup option", + "name": "SendSafely" + }, + { + "domain": "sentry.io", + "tfa": [ + "sms", + "totp", + "u2f" + ], + "documentation": "https://blog.sentry.io/2016/06/22/introducing-2fa", + "name": "Sentry" + }, + { + "domain": "server.nitrado.net", + "tfa": [ + "totp", + "u2f" + ], + "documentation": "https://server.nitrado.net/en-US/guides/two-factor-authentication-en", + "name": "Nitrado" + }, + { + "domain": "server.pro", + "tfa": [ + "totp" + ], + "name": "Server.pro" + }, + { + "domain": "serverpilot.io", + "tfa": [ + "totp" + ], + "documentation": "https://serverpilot.io/docs/how-to-enable-two-factor-authentication/", + "name": "ServerPilot" + }, + { + "domain": "serverspace.io", + "tfa": [ + "totp", + "sms" + ], + "documentation": "https://serverspace.io/support/help/how-to-install-and-use-the-google-authenticator-application/", + "name": "Serverspace" + }, + { + "domain": "service.nsw.gov.au", + "tfa": [ + "sms" + ], + "documentation": "https://www.service.nsw.gov.au/services/myservicensw-account/turn-on-2-step-authentication", + "name": "Service NSW" + }, + { + "domain": "serviceportal.hamburg.de", + "tfa": [ + "custom-hardware" + ], + "custom-hardware": [ + "National identity card" + ], + "documentation": "https://serviceportal.hamburg.de/HamburgGateway/FVP/FV/BasisHilfe/HilfeA-Z.aspx#Wie_kann_ich_die_Funktion_%E2%80%9EAnmelden_mit_Online-Ausweisfunktion%E2%80%9C_einrichten?", + "name": "Hamburg Serviceportal" + }, + { + "domain": "seznam.cz", + "tfa": [ + "totp", + "custom-software" + ], + "custom-software": [ + "Seznam.cz mobile app" + ], + "documentation": "https://napoveda.seznam.cz/cz/login/dvoufazove-overeni/", + "name": "Seznam.cz" + }, + { + "domain": "sffirecu.org", + "tfa": [ + "sms", + "call", + "email", + "totp" + ], + "documentation": "https://sffirecu.org/how-to-use-a-2fa-application", + "name": "San Francisco Fire Credit Union" + }, + { + "domain": "sfu.ca", + "url": "https://www.sfu.ca", + "tfa": [ + "totp", + "custom-hardware" + ], + "custom-hardware": [ + "HyperOTP" + ], + "documentation": "https://www.sfu.ca/information-systems/services/mfa/", + "name": "Simon Fraser University" + }, + { + "domain": "shadow.tech", + "tfa": [ + "totp", + "u2f" + ], + "documentation": "https://support.shadow.tech/hc/en-us/articles/8741331563676", + "name": "Shadow" + }, + { + "domain": "shareworks.com", + "additional-domains": [ + "solium.com" + ], + "tfa": [ + "totp" + ], + "name": "Shareworks" + }, + { + "domain": "shaw.ca", + "tfa": [ + "sms", + "email" + ], + "documentation": "https://support.shaw.ca/t5/billing-account-articles/how-to-set-up-two-step-verification-for-shaw-id/ta-p/5564", + "name": "Shaw" + }, + { + "domain": "shift4shop.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.3dcart.com/knowledgebase/article/View/866/11/", + "name": "Shift4Shop" + }, + { + "domain": "shopify.com", + "tfa": [ + "sms", + "totp", + "u2f" + ], + "documentation": "https://help.shopify.com/manual/your-account/account-security/two-step-authentication", + "notes": "U2F requires using a Shopify ID. U2F can't be used on the Shopify mobile app, the Shopify POS app, or the Shopify Inbox app.", + "name": "Shopify" + }, + { + "domain": "short.io", + "tfa": [ + "totp" + ], + "documentation": "https://help.short.io/en/articles/4065798", + "name": "Short.io" + }, + { + "domain": "shortcut.com", + "additional-domains": [ + "clubhouse.io" + ], + "tfa": [ + "totp" + ], + "documentation": "https://help.shortcut.com/hc/en-us/articles/360044506931", + "name": "Shortcut" + }, + { + "domain": "shrimpy.io", + "tfa": [ + "totp" + ], + "documentation": "https://help.shrimpy.io/hc/en-us/articles/1260803097310", + "name": "Shrimpy" + }, + { + "domain": "shu.edu", + "url": "https://www.shu.edu/", + "tfa": [ + "sms", + "call", + "u2f", + "custom-software" + ], + "custom-software": [ + "Duo" + ], + "documentation": "https://tech-shu-edu.refined.site/space/PUBLICKBA/2096431118/Guide%20to%20Enrolling%20a%20Device%20in%20Duo", + "name": "Seton Hall University" + }, + { + "domain": "signal.org", + "url": "https://www.signal.org/", + "tfa": [ + "sms", + "call" + ], + "documentation": "https://support.signal.org/hc/en-us/articles/360007059792", + "name": "Signal" + }, + { + "domain": "signnow.com", + "url": "https://www.signnow.com/", + "tfa": [ + "email" + ], + "name": "signNow" + }, + { + "domain": "signrequest.com", + "tfa": [ + "totp", + "sms", + "call" + ], + "documentation": "https://help.signrequest.com/hc/en-us/articles/360004932594", + "name": "SignRequest" + }, + { + "domain": "similarweb.com", + "tfa": [ + "email" + ], + "documentation": "https://support.similarweb.com/hc/en-us/articles/360016545238", + "name": "Similarweb" + }, + { + "domain": "simplelogin.io", + "tfa": [ + "totp", + "u2f" + ], + "name": "SimpleLogin" + }, + { + "domain": "simplii.com", + "url": "https://www.simplii.com", + "tfa": [ + "sms", + "call", + "custom-software" + ], + "custom-software": [ + "Simplii App Push Notification" + ], + "documentation": "https://simplii.intelliresponse.com/index.jsp?requestType=NormalRequest&source=3&id=2453&sessionId=98d8d6f6-50df-11ed-bb3e-d1cbac750b11&question=Why+can+I+no+longer+receive+my+one-time+verification+code+%28OTVC%29+by+email", + "name": "Simplii Financial" + }, + { + "domain": "simplisafe.com", + "tfa": [ + "email" + ], + "documentation": "https://support.simplisafe.com/articles/account-billing/multifactor-authentication-mfa-for-simplisafe-accounts/64beb488633e864d94307c2c", + "name": "SimpliSafe" + }, + { + "domain": "simplybook.me", + "tfa": [ + "totp" + ], + "documentation": "https://help.simplybook.me/index.php/Google_Authenticator_custom_feature", + "notes": "2FA is only available as a 'custom feature' and must be enabled by an admin before use.", + "name": "SimplyBook" + }, + { + "domain": "sinch.com", + "tfa": [ + "sms" + ], + "documentation": "https://community.sinch.com/t5/Account-Management/How-do-I-enable-2FA-in-the-Sinch-Customer-Dashboard/ta-p/7191", + "name": "Sinch" + }, + { + "domain": "singpass.gov.sg", + "url": "https://www.singpass.gov.sg/", + "tfa": [ + "sms", + "custom-software", + "custom-hardware" + ], + "custom-software": [ + "Singpass app" + ], + "custom-hardware": [ + "Biometrics" + ], + "documentation": "https://www.singpass.gov.sg/main/html/faq.html", + "name": "SingPass" + }, + { + "domain": "sipgate.de", + "tfa": [ + "totp" + ], + "documentation": "https://help.sipgate.de/hc/de/articles/4421549797649", + "name": "sipgate" + }, + { + "domain": "sisense.com", + "url": "https://www.sisense.com", + "tfa": [ + "totp" + ], + "documentation": "https://dtdocs.sisense.com/article/two-factor", + "name": "Sisense Cloud Data Teams" + }, + { + "domain": "site123.com", + "tfa": [ + "sms" + ], + "name": "SITE123" + }, + { + "domain": "siteground.com", + "tfa": [ + "totp" + ], + "documentation": "https://www.siteground.com/kb/enable-two-step-verification/", + "name": "SiteGround" + }, + { + "domain": "sj.se", + "tfa": [ + "sms", + "call" + ], + "name": "SJ" + }, + { + "domain": "sjsu.edu", + "additional-domains": [ + "sjsu.okta.com" + ], + "tfa": [ + "custom-software", + "custom-hardware" + ], + "custom-software": [ + "Duo" + ], + "custom-hardware": [ + "Feitian OTP c100 Token" + ], + "documentation": "https://sjsu.edu/it/security/multi-factor/duo-setup.php", + "name": "San Jos\u00e9 State University" + }, + { + "domain": "skandia.se", + "tfa": [ + "custom-software" + ], + "custom-software": [ + "BankID" + ], + "documentation": "https://www.skandia.se/kontakta-skandia/kundservice/bankid-logga-in/", + "name": "Skandia" + }, + { + "domain": "sketch.com", + "tfa": [ + "totp" + ], + "documentation": "https://www.sketch.com/docs/workspaces/managing-your-sketch-account/", + "name": "Sketch" + }, + { + "domain": "skiff.com", + "additional-domains": [ + "bitkeep.app", + "ethereum.email", + "keplr.xyz", + "solana.email" + ], + "tfa": [ + "totp", + "u2f" + ], + "documentation": "https://www.youtube.com/watch?v=ImSqwEbn3fc", + "notes": "TOTP must be enabled to use a hardware token.", + "name": "Skiff" + }, + { + "domain": "skinport.com", + "tfa": [ + "email", + "totp" + ], + "name": "Skinport" + }, + { + "domain": "skrill.com", + "tfa": [ + "email", + "sms", + "custom-software" + ], + "custom-software": [ + "Skrill App Push Notification" + ], + "documentation": "https://skrill.com/en-us/support#/path/1753623122", + "notes": "Email method requires an additional PIN", + "name": "Skrill" + }, + { + "domain": "skype.com", + "url": "https://www.skype.com", + "tfa": [ + "sms", + "email", + "custom-software", + "totp" + ], + "custom-software": [ + "Microsoft Authenticator" + ], + "documentation": "https://support.microsoft.com/en-us/help/12408/", + "notes": "Must be associated with a Microsoft Account.", + "name": "Skype" + }, + { + "domain": "slack.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://get.slack.help/hc/en-us/articles/204509068", + "name": "Slack" + }, + { + "domain": "smarkets.com", + "url": "https://www.smarkets.com/", + "tfa": [ + "totp" + ], + "documentation": "https://help.smarkets.com/hc/en-gb/articles/115000822171", + "name": "Smarkets" + }, + { + "domain": "smartly.io", + "tfa": [ + "totp" + ], + "documentation": "https://support.smartly.io/hc/en-us/articles/360003493934", + "name": "Smartly.io" + }, + { + "domain": "smartsimple.com", + "url": "https://www.smartsimple.com", + "tfa": [ + "totp", + "custom-hardware" + ], + "custom-hardware": [ + "RSA token" + ], + "documentation": "https://wiki.smartsimple.com/wiki/Two-Factor_Authentication", + "name": "SmartSimple" + }, + { + "domain": "smartsurvey.co.uk", + "url": "https://www.smartsurvey.co.uk", + "tfa": [ + "totp", + "sms" + ], + "documentation": "https://help.smartsurvey.co.uk/article/two-factor-authentication", + "notes": "SMS 2FA is only available for Enterprise users.", + "name": "SmartSurvey" + }, + { + "domain": "smartthings.com", + "url": "https://www.smartthings.com/", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://account.samsung.com/membership/guide/2step/", + "name": "Samsung SmartThings" + }, + { + "domain": "smartvault.com", + "url": "https://www.smartvault.com/", + "tfa": [ + "email", + "sms", + "call" + ], + "documentation": "https://help.smartvault.com/hc/en-us/articles/360051275493", + "name": "SmartVault" + }, + { + "domain": "smarty.co.uk", + "tfa": [ + "sms", + "email" + ], + "documentation": "https://help.smarty.co.uk/en/articles/5390803", + "name": "Smarty" + }, + { + "domain": "smspool.net", + "tfa": [ + "totp" + ], + "documentation": "https://www.smspool.net/article/how-to-enable-2fa-for-your-smspool-account", + "name": "SMSPool" + }, + { + "domain": "snapchat.com", + "url": "https://www.snapchat.com/", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://support.snapchat.com/en-US/article/enable-login-verification", + "name": "Snapchat" + }, + { + "domain": "sncf-connect.com", + "additional-domains": [ + "oui.sncf" + ], + "tfa": [ + "email" + ], + "documentation": "https://www.sncf-connect.com/en-en/help/your-customer-account", + "name": "SNCF Connect" + }, + { + "domain": "socalgas.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://www.socalgas.com/help-center/2-factor-authentication", + "name": "Southern California Gas Company" + }, + { + "domain": "socialclub.rockstargames.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.rockstargames.com/articles/360000031747", + "name": "Rockstar Games Social Club" + }, + { + "domain": "socketlabs.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://help.socketlabs.com/docs/two-step-verification", + "name": "SocketLabs" + }, + { + "domain": "sofi.com", + "url": "https://www.sofi.com/", + "tfa": [ + "sms", + "call", + "email" + ], + "documentation": "https://support.sofi.com/hc/en-us/articles/360043651452", + "name": "SoFi" + }, + { + "domain": "sogolytics.com", + "tfa": [ + "email" + ], + "documentation": "https://www.sogolytics.com/help/2-step-authentication/", + "name": "Sogolytics" + }, + { + "domain": "solarwinds.com", + "additional-domains": [ + "pingdom.com", + "papertrail.com", + "appoptics.com", + "loggly.com", + "solarwinds.cloud" + ], + "tfa": [ + "totp" + ], + "documentation": "https://documentation.solarwinds.com/en/success_center/pingdom/content/shared/mfa-users.htm", + "name": "SolarWinds" + }, + { + "domain": "sonic.com", + "url": "https://www.sonic.com/", + "tfa": [ + "sms", + "call", + "totp" + ], + "documentation": "https://help.sonic.com/hc/en-us/articles/236079387", + "name": "Sonic" + }, + { + "domain": "sonix.ai", + "tfa": [ + "totp" + ], + "documentation": "https://help.sonix.ai/en/articles/4188823", + "name": "Sonix" + }, + { + "domain": "soundcloud.com", + "tfa": [ + "totp" + ], + "documentation": "https://help.soundcloud.com/hc/en-us/articles/20707203094043", + "name": "SoundCloud" + }, + { + "domain": "sourceforge.net", + "tfa": [ + "totp" + ], + "documentation": "https://sourceforge.net/p/forge/documentation/Multifactor%20Authentication/", + "name": "SourceForge" + }, + { + "domain": "southxchange.com", + "tfa": [ + "totp" + ], + "name": "SouthXchange" + }, + { + "domain": "spacehey.com", + "tfa": [ + "totp" + ], + "name": "SpaceHey" + }, + { + "domain": "sparda.de", + "tfa": [ + "custom-software", + "custom-hardware" + ], + "custom-hardware": [ + "chipTAN card reader" + ], + "custom-software": [ + "SpardaSecureApp" + ], + "documentation": "https://www.sparda.de/online-sicherheit-psd2/", + "name": "Sparda Banken" + }, + { + "domain": "sparkasse.de", + "tfa": [ + "sms", + "custom-software", + "custom-hardware" + ], + "custom-hardware": [ + "chipTAN card reader" + ], + "custom-software": [ + "S-pushTAN" + ], + "documentation": "https://www.sparkasse.de/service/sicherheit-im-internet/tan-verfahren.html", + "name": "Sparkasse" + }, + { + "domain": "sparkpost.com", + "tfa": [ + "totp" + ], + "documentation": "https://www.sparkpost.com/docs/my-account-and-profile/enabling-two-factor-authentication/", + "name": "SparkPost" + }, + { + "domain": "spectrocoin.com", + "tfa": [ + "totp", + "sms", + "email" + ], + "documentation": "https://blog.spectrocoin.com/en/how-to-enable-two-factor-authentication-at-spectrocoin/", + "name": "SpectroCoin" + }, + { + "domain": "speedrun.com", + "url": "https://www.speedrun.com/", + "tfa": [ + "email" + ], + "documentation": "https://www.speedrun.com/the_site/thread/g7osi/1", + "name": "Speedrun.com" + }, + { + "domain": "speedway.com", + "tfa": [ + "email" + ], + "documentation": "https://www.speedway.com/about/faq/twofactorauthentication", + "name": "Speedway" + }, + { + "domain": "splashtop.com", + "url": "https://www.splashtop.com/", + "tfa": [ + "totp" + ], + "documentation": "https://support-splashtopbusiness.splashtop.com/hc/en-us/articles/212724923", + "name": "Splashtop" + }, + { + "domain": "spreedly.com", + "url": "https://www.spreedly.com/", + "tfa": [ + "totp" + ], + "documentation": "https://docs.spreedly.com/guides/multi-factor-authentication/", + "name": "Spreedly" + }, + { + "domain": "spri.ng", + "additional-domains": [ + "teespring.com" + ], + "tfa": [ + "totp" + ], + "documentation": "https://www.spri.ng/blog/two-factor-authentication-guide", + "name": "Spring" + }, + { + "domain": "sproutsocial.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.sproutsocial.com/hc/en-us/articles/213938786", + "name": "SproutSocial" + }, + { + "domain": "square-enix-games.com", + "additional-domains": [ + "square-enix.com" + ], + "tfa": [ + "totp", + "custom-software", + "custom-hardware" + ], + "custom-software": [ + "SQUARE ENIX Software Token" + ], + "custom-hardware": [ + "SQUARE ENIX Security Token" + ], + "documentation": "https://square-enix-games.com/en_US/seaccount/otp", + "notes": "The proprietary software implementation requires you to have purchased either Final Fantasy XI or Final Fantasy XIV and registered the game. Only one method is allowed at a time.", + "name": "Square Enix" + }, + { + "domain": "squarespace.com", + "tfa": [ + "totp", + "sms" + ], + "documentation": "https://support.squarespace.com/hc/en-us/articles/360000044827", + "name": "Squarespace" + }, + { + "domain": "squareup.com", + "additional-domains": [ + "weebly.com" + ], + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://squareup.com/help/us/en/article/5593", + "notes": "SMS only supported in US and Canada. Only Square-linked Weebly have 2FA.", + "name": "Square" + }, + { + "domain": "ssa.gov", + "url": "https://www.ssa.gov", + "tfa": [ + "sms", + "email" + ], + "documentation": "https://www.ssa.gov/myaccount/MoreInformationAboutMFA.html", + "name": "US Social Security Administration" + }, + { + "domain": "ssltrust.com.au", + "url": "https://www.ssltrust.com.au/", + "tfa": [ + "totp" + ], + "documentation": "https://www.ssltrust.com.au/help/account-management/enable-2factor", + "name": "SSLTrust" + }, + { + "domain": "stackfield.com", + "url": "https://www.stackfield.com/", + "tfa": [ + "totp" + ], + "documentation": "https://www.stackfield.com/help/-2032", + "name": "Stackfield" + }, + { + "domain": "stackpath.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.stackpath.com/hc/en-us/articles/5917362460059#h2_5", + "name": "StackPath" + }, + { + "domain": "standardnotes.com", + "tfa": [ + "totp", + "u2f" + ], + "documentation": "https://standardnotes.com/help/25", + "notes": "Professional Subscription required to use hardware security key.", + "name": "Standard Notes" + }, + { + "domain": "stanford.edu", + "tfa": [ + "sms", + "call", + "custom-software", + "custom-hardware", + "u2f" + ], + "custom-software": [ + "Duo" + ], + "custom-hardware": [ + "Fortitoken" + ], + "documentation": "https://uit.stanford.edu/service/webauth/twostep", + "name": "Stanford University" + }, + { + "domain": "starbucks.com", + "url": "https://www.starbucks.com/", + "tfa": [ + "sms" + ], + "documentation": "https://customerservice.starbucks.com/app/answers/detail/a_id/6180", + "name": "Starbucks" + }, + { + "domain": "starone.org", + "tfa": [ + "sms", + "call", + "email" + ], + "name": "Star One Credit Union" + }, + { + "domain": "startmail.com", + "url": "https://www.startmail.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.startmail.com/hc/en-us/articles/360006682158", + "name": "StartMail" + }, + { + "domain": "stash.com", + "url": "https://www.stash.com", + "tfa": [ + "sms", + "call", + "email" + ], + "documentation": "https://ask.stash.com/ask/what-is-two-factor-authentication/", + "name": "Stash" + }, + { + "domain": "statefarm.com", + "url": "https://www.statefarm.com/", + "tfa": [ + "sms", + "email" + ], + "documentation": "https://www.statefarm.com/customer-care/privacy-security-center/identity-verification", + "name": "State Farm" + }, + { + "domain": "status.io", + "tfa": [ + "custom-hardware" + ], + "custom-hardware": [ + "Yubico OTP" + ], + "documentation": "https://kb.status.io/security/yubikey/", + "name": "Status.io" + }, + { + "domain": "statuscake.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://www.statuscake.com/kb/knowledge-base/how-to-change-the-statuscake-password-for-login/", + "name": "StatusCake" + }, + { + "domain": "statuspage.io", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://support.atlassian.com/atlassian-account/docs/manage-two-step-verification-for-your-atlassian-account/", + "name": "Statuspage" + }, + { + "domain": "stessa.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.stessa.com/en/articles/4649760#enabling-two-factor-authentication", + "name": "Stessa" + }, + { + "domain": "stockx.com", + "tfa": [ + "sms" + ], + "documentation": "https://help.stockx.com/s/article/What-is-Two-Step-Verification", + "name": "StockX" + }, + { + "domain": "store.steampowered.com", + "tfa": [ + "email", + "custom-software" + ], + "custom-software": [ + "Steam Mobile" + ], + "documentation": "https://help.steampowered.com/en/faqs/view/06B0-26E6-2CF8-254C", + "notes": "A phone number is required as a fallback for Steam Mobile 2FA.", + "name": "Steam" + }, + { + "domain": "stormgain.com", + "tfa": [ + "totp", + "sms" + ], + "documentation": "https://support.stormgain.com/articles/two-factor-authentication-google-authenticator-and-sms", + "name": "StormGain" + }, + { + "domain": "strato.de", + "additional-domains": [ + "strato.fr", + "strato-hosting.co.uk", + "strato.es", + "strato.nl" + ], + "tfa": [ + "totp" + ], + "documentation": "https://www.strato.de/faq/sicherheit/zwei-faktor-authentifizierung-einstellen/", + "name": "STRATO" + }, + { + "domain": "stripe.com", + "tfa": [ + "sms", + "totp", + "u2f", + "custom-hardware" + ], + "custom-hardware": [ + "Built-in Authenticator (Biometrics)" + ], + "documentation": "https://support.stripe.com/questions/how-do-i-enable-two-step-verification", + "name": "Stripe" + }, + { + "domain": "stubhub.com", + "tfa": [ + "totp" + ], + "name": "StubHub" + }, + { + "tfa": [ + "sms", + "email", + "totp" + ], + "domain": "studentaid.gov", + "documentation": "https://studentaid.gov/help-center/answers/topic/managing_your_account/article/choose-between-an-authenticator-app-text-email", + "name": "Federal Student Aid" + }, + { + "domain": "studioninja.co", + "tfa": [ + "totp" + ], + "documentation": "https://help.studioninja.co/en/articles/4481947", + "name": "Studio Ninja" + }, + { + "domain": "substack.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.substack.com/hc/en-us/articles/4785929336980", + "name": "Substack" + }, + { + "domain": "sugarsync.com", + "tfa": [ + "custom-software" + ], + "custom-software": [ + "SugarSync App" + ], + "documentation": "https://support.sugarsync.com/hc/en-us/articles/1260802041509", + "name": "SugarSync" + }, + { + "domain": "sumologic.com", + "url": "https://www.sumologic.com", + "tfa": [ + "totp" + ], + "documentation": "https://help.sumologic.com/docs/manage/security/about-two-step-verification/", + "name": "Sumo Logic" + }, + { + "domain": "supabase.com", + "tfa": [ + "totp" + ], + "documentation": "https://supabase.com/docs/guides/platform/multi-factor-authentication", + "name": "Supabase" + }, + { + "domain": "surfshark.com", + "tfa": [ + "email", + "totp" + ], + "documentation": "https://support.surfshark.com/hc/en-us/articles/360011448319", + "name": "Surfshark" + }, + { + "domain": "survicate.com", + "tfa": [ + "totp" + ], + "documentation": "https://help.survicate.com/en/articles/5006684", + "name": "Survicate" + }, + { + "domain": "swedbank.se", + "tfa": [ + "custom-software" + ], + "custom-software": [ + "BankID" + ], + "documentation": "https://www.swedbank.se/foretag/digitala-tjanster/mobilt-bankid/fragor-och-svar-om-mobilt-bankid.html", + "name": "Swedbank & Sparbankerna" + }, + { + "domain": "swinburne.edu.au", + "tfa": [ + "sms", + "call", + "totp", + "custom-software" + ], + "custom-software": [ + "Microsoft Authenticator" + ], + "documentation": "https://www.swinburne.edu.au/privacy/cybersecurity-hub/", + "name": "Swinburne University of Technology" + }, + { + "domain": "swisscom.ch", + "tfa": [ + "sms", + "custom-software" + ], + "custom-software": [ + "Mobile ID" + ], + "documentation": "https://www.swisscom.ch/de/privatkunden/hilfe/daten-und-rechnungen/das-swisscom-login.html#Login_Methoden", + "name": "Swisscom" + }, + { + "domain": "swisslife.ch", + "url": "https://www.swisslife.ch", + "tfa": [ + "sms" + ], + "name": "Swiss Life" + }, + { + "domain": "switchplus.ch", + "tfa": [ + "sms" + ], + "documentation": "https://switchie.ch/en/2-factor-authentication-2fa/", + "name": "Swizzonic" + }, + { + "domain": "swtor.com", + "url": "https://www.swtor.com/", + "tfa": [ + "custom-software" + ], + "custom-software": [ + "The Old Republic Security Key App" + ], + "documentation": "https://www.swtor.com/info/security-key", + "name": "Star Wars: The Old Republic" + }, + { + "domain": "swyftx.com", + "additional-domains": [ + "swyftx.com.au" + ], + "tfa": [ + "totp" + ], + "documentation": "https://support.swyftx.com/hc/en-au/articles/12807078449305", + "name": "Swyftx" + }, + { + "domain": "sydney.edu.au", + "tfa": [ + "u2f", + "totp", + "custom-software" + ], + "custom-software": [ + "Okta Verify" + ], + "documentation": "https://www.sydney.edu.au/students/log-in-to-university-systems.html", + "name": "The University of Sydney" + }, + { + "domain": "sync.com", + "url": "https://www.sync.com", + "tfa": [ + "email", + "totp" + ], + "documentation": "https://www.sync.com/help/how-do-i-setup-two-factor-authentication/", + "name": "Sync" + }, + { + "domain": "synchronybank.com", + "url": "https://www.synchronybank.com", + "tfa": [ + "sms", + "call" + ], + "documentation": "https://www.synchronybank.com/why-synchrony/secure-banking/", + "name": "Synchrony Bank" + }, + { + "domain": "synergywholesale.com", + "tfa": [ + "sms", + "email", + "totp" + ], + "documentation": "https://synergywholesale.com/faq/article/can-i-enable-two-factor-authentication-on-my-wholesale-system-account/", + "name": "Synergy Wholesale" + }, + { + "domain": "synology.com", + "url": "https://www.synology.com/", + "tfa": [ + "email", + "totp", + "u2f" + ], + "documentation": "https://kb.synology.com/en-us/DSM/help/DSM/SecureSignIn/2factor_authentication", + "name": "Synology" + }, + { + "domain": "system76.com", + "tfa": [ + "totp", + "sms", + "call" + ], + "name": "System76" + }, + { + "domain": "szkb.ch", + "url": "https://www.szkb.ch/", + "tfa": [ + "sms" + ], + "documentation": "https://www.szkb.ch/pub/ueber-die-szkb/servicezentrum/e-services/sicherheit-im-internet", + "name": "Schwyzer Kantonalbank" + }, + { + "domain": "t-mobile.com", + "url": "https://www.t-mobile.com/", + "tfa": [ + "sms", + "totp", + "custom-hardware" + ], + "custom-hardware": [ + "Biometrics via T-Mobile App" + ], + "documentation": "https://www.t-mobile.com/support/account/set-up-and-manage-your-t-mobile-id#heading4", + "notes": "Backup methods of SMS or recovery questions can't be disabled.", + "name": "T-Mobile" + }, + { + "domain": "t-online.de", + "tfa": [ + "sms", + "totp" + ], + "notes": "SMS 2FA is always required", + "name": "T-Online" + }, + { + "domain": "tableau.com", + "tfa": [ + "totp", + "custom-software" + ], + "custom-software": [ + "Salesforce Authenticator" + ], + "documentation": "https://help.tableau.com/current/online/en-us/to_signin.htm#register-for-multifactor-authentication", + "name": "Tableau" + }, + { + "domain": "taboola.com", + "tfa": [ + "sms", + "email", + "totp" + ], + "documentation": "https://help.taboola.com/hc/en-us/articles/360053360873", + "name": "Taboola" + }, + { + "domain": "talkdesk.com", + "tfa": [ + "totp", + "u2f" + ], + "documentation": "https://support.talkdesk.com/hc/en-us/articles/360015179592", + "name": "Talkdesk" + }, + { + "domain": "tangerine.ca", + "tfa": [ + "sms" + ], + "documentation": "https://www.tangerine.ca/en/faq/answer?permaLink=how-register-mobile-number-log-with-step-authentication--generic-phone--en--0--1&responseId=219--", + "name": "Tangerine" + }, + { + "domain": "target.com", + "url": "https://www.target.com/", + "tfa": [ + "sms", + "email" + ], + "documentation": "https://security.target.com/two-factor-auth/", + "name": "Target" + }, + { + "domain": "targobank.de", + "tfa": [ + "sms", + "custom-software", + "custom-hardware" + ], + "custom-hardware": [ + "photoTAN card reader" + ], + "custom-software": [ + "TARGOBANK Mobile Banking" + ], + "documentation": "https://www.targobank.de/de/service/tan-verfahren/index.html", + "name": "TARGOBANK" + }, + { + "domain": "taxact.com", + "url": "https://www.taxact.com", + "tfa": [ + "sms", + "email", + "totp" + ], + "documentation": "https://www.taxact.com/support/24138/2019/how-is-a-verification-code-used?hideLayout=True", + "name": "Taxact" + }, + { + "domain": "taxbit.com", + "tfa": [ + "totp" + ], + "documentation": "https://help.taxbit.com/hc/en-us/articles/4410674012311", + "name": "TaxBit" + }, + { + "domain": "taxdome.com", + "tfa": [ + "totp" + ], + "documentation": "https://help.taxdome.com/article/95--", + "name": "TaxDome" + }, + { + "domain": "td.com", + "tfa": [ + "sms", + "call", + "custom-software" + ], + "custom-software": [ + "TD Authenticate" + ], + "documentation": "https://www.td.com/privacy-and-security/privacy-and-security/how-we-protect-you/online-security/2fa.jsp", + "name": "TD Bank" + }, + { + "domain": "tdameritrade.com", + "additional-domains": [ + "ameritrade.com" + ], + "tfa": [ + "sms" + ], + "name": "TD Ameritrade" + }, + { + "domain": "teamviewer.com", + "url": "https://www.teamviewer.com", + "tfa": [ + "totp" + ], + "documentation": "https://community.teamviewer.com/English/kb/articles/4711", + "name": "TeamViewer" + }, + { + "domain": "teamwork.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.teamwork.com/projects/security/enabling-two-factor-authentication-on-your-profile", + "name": "Teamwork" + }, + { + "domain": "tebex.io", + "url": "https://www.tebex.io/", + "tfa": [ + "email", + "totp" + ], + "documentation": "https://help.tebex.io/en/articles/2319372", + "name": "Tebex" + }, + { + "domain": "technicpack.net", + "tfa": [ + "totp" + ], + "name": "Technic" + }, + { + "domain": "tele2.se", + "tfa": [ + "custom-software" + ], + "custom-software": [ + "BankID" + ], + "name": "Tele2" + }, + { + "domain": "telegram.org", + "tfa": [ + "sms", + "call" + ], + "documentation": "https://telegram.org/blog/sessions-and-2-step-verification", + "name": "Telegram" + }, + { + "domain": "telekom.de", + "tfa": [ + "totp", + "sms" + ], + "documentation": "https://www.telekom.de/hilfe/vertrag-rechnung/login-daten-passwoerter/mehr-faktor-authentifizierung", + "name": "Deutsche Telekom" + }, + { + "domain": "telenor.se", + "tfa": [ + "custom-software" + ], + "custom-software": [ + "BankID" + ], + "name": "Telenor" + }, + { + "domain": "telia.se", + "tfa": [ + "custom-software" + ], + "custom-software": [ + "BankID" + ], + "documentation": "https://www.telia.se/privat/support/info/logga-in-med-bankid-och-eleg-pa-mitt-telia", + "name": "Telia" + }, + { + "domain": "telnyx.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.telnyx.com/en/articles/3739748", + "name": "Telnyx" + }, + { + "domain": "telstra.com.au", + "tfa": [ + "sms", + "email" + ], + "documentation": "https://www.telstra.com.au/mytelstra/my-telstra-security", + "name": "Telstra" + }, + { + "domain": "telzio.com", + "url": "https://www.telzio.com/", + "tfa": [ + "totp" + ], + "documentation": "https://telzio.com/support/two-factor-authentication", + "name": "Telzio" + }, + { + "domain": "temple.edu", + "tfa": [ + "sms", + "call", + "custom-software", + "custom-hardware" + ], + "custom-software": [ + "Duo" + ], + "custom-hardware": [ + "Duo D100 Token" + ], + "documentation": "https://its.temple.edu/two-step-verification", + "name": "Temple University" + }, + { + "domain": "termius.com", + "tfa": [ + "totp", + "custom-software" + ], + "custom-software": [ + "Authy" + ], + "documentation": "https://support.termius.com/hc/en-us/articles/4402191604505#2fa", + "name": "Termius" + }, + { + "domain": "tesla.com", + "additional-domains": [ + "teslamotors.com" + ], + "url": "https://www.tesla.com", + "tfa": [ + "totp" + ], + "documentation": "https://www.tesla.com/support/multi-factor-authentication", + "name": "Tesla" + }, + { + "domain": "teslafi.com", + "tfa": [ + "totp" + ], + "documentation": "https://about.teslafi.com/security/", + "name": "TeslaFi" + }, + { + "domain": "test.de", + "tfa": [ + "totp" + ], + "documentation": "https://www.test.de/Hilfe-5836822-5225600/#id5935575", + "name": "Stiftung Warentest" + }, + { + "domain": "textlocal.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://www.textlocal.com/support/knowledge-base/two-factor-authentication/", + "name": "Textlocal" + }, + { + "domain": "textmagic.com", + "tfa": [ + "sms" + ], + "documentation": "https://support.textmagic.com/article/set-up-two-factor-authentication-and-security/", + "name": "TextMagic" + }, + { + "domain": "tfl.gov.uk", + "tfa": [ + "sms" + ], + "documentation": "https://tfl.gov.uk/corporate/privacy-and-cookies/protecting-your-account", + "name": "Transport for London" + }, + { + "domain": "therapynotes.com", + "url": "https://www.therapynotes.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.therapynotes.com/article/231--", + "name": "TherapyNotes" + }, + { + "domain": "threatconnect.com", + "tfa": [ + "totp" + ], + "documentation": "https://kb.threatconnect.com/customer/en/portal/articles/2214975", + "name": "ThreatConnect" + }, + { + "domain": "threatx.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.threatx.com/hc/en-us/articles/360022157591", + "name": "ThreatX" + }, + { + "domain": "three.co.uk", + "url": "http://www.three.co.uk/", + "tfa": [ + "sms" + ], + "documentation": "http://www.three.co.uk/hub/stay-safe-from-fraudsters/", + "name": "Three [UK]" + }, + { + "domain": "thrivecart.com", + "url": "https://www.thrivecart.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.thrivecart.com/help/where-do-i-get-my-6-digit-access-code-2-factor-authentication", + "name": "ThriveCart" + }, + { + "domain": "ti.to", + "tfa": [ + "totp" + ], + "documentation": "https://help.tito.io/en/articles/3023132", + "name": "Tito" + }, + { + "domain": "tiaa-cref.org", + "url": "https://www.tiaa-cref.org", + "tfa": [ + "sms", + "call" + ], + "name": "TIAA-CREF" + }, + { + "domain": "tiaabank.com", + "url": "https://www.tiaabank.com", + "tfa": [ + "sms", + "call" + ], + "documentation": "https://www.tiaabank.com/security?solutions=security-tools", + "name": "TIAA Bank" + }, + { + "domain": "tibia.com", + "url": "https://www.tibia.com/", + "tfa": [ + "totp" + ], + "documentation": "https://www.tibia.com/support/?subtopic=gethelp&topicid=21", + "name": "Tibia" + }, + { + "domain": "ticketsource.co.uk", + "additional-domains": [ + "ticketsource.eu", + "ticketsource.us" + ], + "tfa": [ + "totp" + ], + "name": "TicketSource" + }, + { + "domain": "tiktok.com", + "tfa": [ + "totp", + "sms", + "email" + ], + "documentation": "https://support.tiktok.com/en/safety-hc/account-and-user-safety/account-safety", + "name": "TikTok" + }, + { + "domain": "tilaa.com", + "url": "https://www.tilaa.com", + "tfa": [ + "totp", + "custom-hardware" + ], + "custom-hardware": [ + "Yubico OTP" + ], + "documentation": "https://support.tilaa.com/hc/en-us/articles/360020167352", + "name": "Tilaa" + }, + { + "domain": "time4vps.com", + "tfa": [ + "totp" + ], + "documentation": "https://www.time4vps.com/knowledgebase/2-factor-authentication/", + "name": "Time4VPS" + }, + { + "domain": "timetastic.co.uk", + "tfa": [ + "totp" + ], + "documentation": "https://help.timetastic.co.uk/hc/en-us/articles/360015994257", + "name": "Timetastic" + }, + { + "domain": "ting.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://help.ting.com/hc/en-us/articles/209351258", + "name": "Ting" + }, + { + "domain": "tinyurl.com", + "tfa": [ + "totp" + ], + "name": "TinyURL" + }, + { + "domain": "tk.de", + "tfa": [ + "custom-software" + ], + "custom-software": [ + "TK-App" + ], + "documentation": "https://www.tk.de/techniker/unternehmensseiten/unternehmen/die-tk-app/2023678", + "name": "Techniker Krankenkasse" + }, + { + "domain": "todo.microsoft.com", + "tfa": [ + "sms", + "call", + "email", + "custom-software", + "totp" + ], + "custom-software": [ + "Microsoft Authenticator" + ], + "documentation": "https://support.microsoft.com/en-us/help/12408/", + "notes": "2FA phone calls may not be available in all regions", + "name": "Microsoft To-Do" + }, + { + "domain": "todoist.com", + "tfa": [ + "totp" + ], + "documentation": "https://todoist.com/help/articles/how-to-enable-two-factor-authentication", + "name": "Todoist" + }, + { + "domain": "tokopedia.com", + "url": "https://www.tokopedia.com/", + "tfa": [ + "sms", + "call", + "totp" + ], + "documentation": "https://www.tokopedia.com/help/article/bagaimana-cara-mengaktifkan-fitur-keamanan-akun", + "name": "Tokopedia" + }, + { + "domain": "toodledo.com", + "url": "https://www.toodledo.com", + "tfa": [ + "totp" + ], + "documentation": "https://www.toodledo.com/info/help.php#168", + "name": "Toodledo" + }, + { + "domain": "toontownrewritten.com", + "url": "https://www.toontownrewritten.com/", + "tfa": [ + "totp" + ], + "documentation": "https://www.toontownrewritten.com/help/faq/accounts--login#twostep", + "name": "Toontown Rewritten" + }, + { + "domain": "torguard.net", + "tfa": [ + "totp" + ], + "name": "TorGuard" + }, + { + "domain": "torontomu.ca", + "tfa": [ + "totp", + "u2f" + ], + "documentation": "https://www.torontomu.ca/ccs/services/ITSecurity/protecting-your-identity/two-factor-authentication/", + "name": "Toronto Metropolitan University" + }, + { + "domain": "toshl.com", + "tfa": [ + "totp" + ], + "documentation": "https://toshl.com/blog/two-factor-authentication-and-how-to-use-it/", + "name": "Toshl" + }, + { + "domain": "towerfcu.org", + "url": "https://www.towerfcu.org/", + "tfa": [ + "sms", + "call" + ], + "documentation": "https://server.iad.liveperson.net/hc/s-81758502/cmd/kbresource/kb-8660536393490959114/front_page!PAGETYPE?category=5352", + "name": "Tower Federal Credit Union" + }, + { + "domain": "trading212.com", + "tfa": [ + "totp" + ], + "documentation": "https://helpcentre.trading212.com/hc/en-us/articles/360012452237", + "name": "Trading 212" + }, + { + "domain": "tradingview.com", + "tfa": [ + "totp", + "sms" + ], + "documentation": "https://www.tradingview.com/support/solutions/43000572460/", + "name": "TradingView" + }, + { + "domain": "transifex.com", + "tfa": [ + "totp" + ], + "documentation": "https://help.transifex.com/en/articles/6984122", + "name": "Transifex" + }, + { + "domain": "transip.nl", + "url": "https://www.transip.nl/", + "tfa": [ + "totp" + ], + "documentation": "https://www.transip.nl/knowledgebase/artikel/162", + "notes": "While both the main control panel and STACK support 2FA, each system is separate and requires its own setup.", + "name": "TransIP" + }, + { + "domain": "travala.com", + "url": "https://www.travala.com", + "tfa": [ + "totp" + ], + "documentation": "https://blog.travala.com/explaining-how-the-travala-wallet-functions/", + "name": "Travala" + }, + { + "domain": "tre.se", + "tfa": [ + "custom-software" + ], + "custom-software": [ + "BankID" + ], + "name": "Tre" + }, + { + "domain": "treasurydirect.gov", + "url": "https://www.treasurydirect.gov", + "tfa": [ + "email" + ], + "documentation": "https://www.treasurydirect.gov/indiv/help/TDHelp/help_ug_274-SecFeaturesProtectAcctLearnMore.htm", + "name": "Treasury Direct" + }, + { + "domain": "trello.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://support.atlassian.com/atlassian-account/docs/manage-two-step-verification-for-your-atlassian-account/", + "name": "Trello" + }, + { + "domain": "trendmicro.com", + "tfa": [ + "sms", + "email", + "totp" + ], + "documentation": "https://helpcenter.trendmicro.com/en-us/article/tmka-21720", + "name": "Trend Micro" + }, + { + "domain": "tresorit.com", + "tfa": [ + "sms", + "call", + "email", + "totp" + ], + "documentation": "https://support.tresorit.com/hc/en-us/articles/216114527", + "notes": "Requires enabling at least two 2FA methods.", + "name": "Tresorit" + }, + { + "domain": "trimble.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://help.trimble.com/s/article/What-is-Multi-Factor-Authentication", + "name": "Trimble" + }, + { + "domain": "trionworlds.com", + "url": "https://www.trionworlds.com/en/", + "tfa": [ + "email", + "custom-software" + ], + "custom-software": [ + "Glyph Auth" + ], + "documentation": "https://support.trionworlds.com/hc/en-us/articles/204183357", + "name": "Trion Worlds" + }, + { + "domain": "trovo.live", + "tfa": [ + "totp", + "sms" + ], + "name": "Trovo" + }, + { + "domain": "troweprice.com", + "tfa": [ + "totp", + "sms", + "call", + "email" + ], + "documentation": "https://www.troweprice.com/retirement-plan-services/en/our-advantage/cyber-security/multi-factor-authentication.html", + "name": "T. Rowe Price" + }, + { + "domain": "truekey.com", + "url": "https://www.truekey.com", + "tfa": [ + "email", + "custom-software", + "custom-hardware" + ], + "custom-software": [ + "True Key Push Notification" + ], + "custom-hardware": [ + "Biometrics" + ], + "documentation": "https://service.mcafee.com/?page=shell&shell=article-view&articleId=TS102352", + "name": "True Key" + }, + { + "domain": "truist.com", + "tfa": [ + "custom-software", + "sms", + "call", + "email" + ], + "custom-software": [ + "Truist Authenticator" + ], + "documentation": "https://www.truist.com/truist-authenticator-app", + "name": "Truist" + }, + { + "domain": "trumf.no", + "additional-domains": [ + "norgesgruppen.no", + "meny.no", + "spar.no" + ], + "tfa": [ + "sms" + ], + "documentation": "https://www.trumf.no/kundeservice/#innlogging", + "name": "Trumf" + }, + { + "domain": "trustage.com", + "tfa": [ + "call", + "sms", + "email" + ], + "documentation": "https://www.trustage.com/my-account/help/online-account-information-faqs", + "name": "TruStage" + }, + { + "domain": "tryhackme.com", + "tfa": [ + "totp" + ], + "name": "TryHackMe" + }, + { + "domain": "tsb.co.uk", + "tfa": [ + "sms", + "call" + ], + "documentation": "https://www.tsb.co.uk/otp/", + "name": "TSB Bank" + }, + { + "domain": "tsp.gov", + "url": "https://www.tsp.gov", + "tfa": [ + "sms", + "email" + ], + "documentation": "https://www.tsp.gov/account-basics/protect-your-tsp-account/", + "name": "Thrift Savings Plan" + }, + { + "domain": "tu.berlin", + "additional-domains": [ + "tu-berlin.de" + ], + "tfa": [ + "totp", + "sms" + ], + "documentation": "https://www.campusmanagement.tu-berlin.de/menue/dienste/konto_karte/tan_verfahren/", + "notes": "2FA is only available for selected services", + "name": "Technische Universit\u00e4t Berlin" + }, + { + "domain": "tumblr.com", + "url": "https://www.tumblr.com/", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://help.tumblr.com/hc/en-us/articles/226270148", + "name": "Tumblr" + }, + { + "domain": "tunecore.com", + "tfa": [ + "sms", + "call" + ], + "documentation": "https://support.tunecore.com/hc/en-us/articles/360000650226", + "additional-domains": [ + "tunecore.co.uk", + "tunecore.ca", + "tunecore.com.au", + "tunecore.in", + "tunecore.de", + "tunecore.fr", + "tunecore.it" + ], + "name": "TuneCore" + }, + { + "domain": "turbosquid.com", + "url": "https://www.turbosquid.com", + "tfa": [ + "email", + "sms" + ], + "notes": "2FA is only available with a verified email address", + "name": "TurboSquid" + }, + { + "domain": "turbotax.intuit.com", + "tfa": [ + "sms", + "call", + "totp" + ], + "documentation": "https://ttlc.intuit.com/questions/2902682", + "notes": "Software 2FA requires enabling SMS or phone call as a back-up.", + "name": "Intuit TurboTax" + }, + { + "domain": "turo.com", + "tfa": [ + "sms", + "email" + ], + "name": "Turo" + }, + { + "domain": "tuta.com", + "additional-domains": [ + "tutanota.com" + ], + "tfa": [ + "totp", + "u2f" + ], + "documentation": "https://tuta.com/support/#2fa", + "name": "Tuta" + }, + { + "domain": "tweakers.net", + "tfa": [ + "totp" + ], + "documentation": "https://tweakers.net/plan/3096/", + "name": "Tweakers" + }, + { + "domain": "twilio.com", + "url": "https://www.twilio.com/", + "tfa": [ + "sms", + "call", + "custom-software", + "totp" + ], + "custom-software": [ + "Authy" + ], + "documentation": "https://support.twilio.com/hc/en-us/sections/360008377353", + "name": "Twilio" + }, + { + "domain": "twitch.tv", + "url": "https://www.twitch.tv/", + "tfa": [ + "sms", + "custom-software", + "totp" + ], + "custom-software": [ + "Authy" + ], + "documentation": "https://help.twitch.tv/s/article/two-factor-authentication", + "notes": "To activate two factor authentication, you must provide a mobile phone number.", + "name": "Twitch" + }, + { + "domain": "twitter.com", + "additional-domains": [ + "x.com" + ], + "tfa": [ + "sms", + "totp", + "u2f" + ], + "documentation": "https://help.twitter.com/en/managing-your-account/two-factor-authentication", + "notes": "SMS only available on select providers and for Twitter Blue members only.", + "name": "X (Twitter)" + }, + { + "domain": "typeform.com", + "tfa": [ + "email" + ], + "documentation": "https://www.typeform.com/help/a/4405277894548/", + "name": "Typeform" + }, + { + "domain": "ubc.ca", + "tfa": [ + "u2f", + "custom-software", + "custom-hardware", + "sms", + "call" + ], + "custom-software": [ + "Duo Mobile" + ], + "custom-hardware": [ + "Duo token" + ], + "documentation": "https://privacymatters.ubc.ca/test-faqs", + "name": "University of British Columbia" + }, + { + "domain": "uber.com", + "tfa": [ + "sms" + ], + "documentation": "https://help.uber.com/riders/article/turn-on-2-step-verification?nodeId=b8bb9152-8c91-4f49-83c4-35cf2e1dcf72", + "notes": "2FA can only be enabled via the app", + "name": "Uber" + }, + { + "domain": "ubereats.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://help.uber.com/h/b8bb9152-8c91-4f49-83c4-35cf2e1dcf72", + "notes": "2FA must be enabled via the Uber app, not the Uber Eats app.", + "name": "Uber Eats" + }, + { + "domain": "ubisoft.com", + "additional-domains": [ + "ubisoftconnect.com", + "ubi.com" + ], + "tfa": [ + "email", + "totp", + "sms" + ], + "documentation": "https://www.ubisoft.com/help?article=000065723", + "notes": "SMS and TOTP 2FA require adding a phone number as a fallback. SMS 2FA is not available in all regions.", + "name": "Ubisoft/Uplay" + }, + { + "domain": "ubs.com", + "url": "https://www.ubs.com/", + "tfa": [ + "custom-hardware", + "custom-software" + ], + "custom-hardware": [ + "Card Reader", + "Access Card display" + ], + "custom-software": [ + "UBS Access app" + ], + "documentation": "https://www.ubs.com/ch/en/help/e-banking/process.html", + "name": "UBS" + }, + { + "domain": "ubt.com", + "tfa": [ + "sms", + "call", + "totp" + ], + "documentation": "https://www.ubt.com/learning-center/blogs/multifactor-authentication-and-your-account", + "name": "Union Bank & Trust" + }, + { + "domain": "ucalgary.ca", + "tfa": [ + "custom-software", + "totp", + "sms", + "call" + ], + "custom-software": [ + "Microsoft Authenticator" + ], + "documentation": "https://it.ucalgary.ca/mfa/gettingstarted", + "name": "University of Calgary" + }, + { + "domain": "ucmerced.edu", + "url": "https://www.ucmerced.edu", + "tfa": [ + "sms", + "u2f", + "custom-hardware", + "custom-software" + ], + "custom-hardware": [ + "Feitian OTP c100 Token" + ], + "custom-software": [ + "Duo" + ], + "documentation": "https://it.ucmerced.edu/2FA", + "name": "University of California, Merced" + }, + { + "domain": "udel.edu", + "url": "https://www.udel.edu/", + "tfa": [ + "totp", + "call", + "sms", + "custom-hardware" + ], + "custom-hardware": [ + "Feitian OTP c100 Token" + ], + "documentation": "https://www1.udel.edu/it/help/2fa/main.html", + "name": "University of Delaware" + }, + { + "domain": "udemy.com", + "tfa": [ + "email" + ], + "documentation": "https://support.udemy.com/hc/en-us/articles/4420349685015", + "name": "Udemy" + }, + { + "domain": "ui.com", + "tfa": [ + "totp", + "email", + "custom-software" + ], + "custom-software": [ + "UI Verify" + ], + "documentation": "https://help.ui.com/hc/en-us/articles/115012986607", + "name": "Ubiquiti UniFi" + }, + { + "domain": "uidaho.edu", + "tfa": [ + "sms", + "call", + "custom-software", + "custom-hardware", + "u2f" + ], + "custom-software": [ + "Duo" + ], + "custom-hardware": [ + "Duo D100 Token" + ], + "documentation": "https://support.uidaho.edu/TDClient/KB/ArticleDet?ID=109", + "name": "University of Idaho" + }, + { + "domain": "uk2.net", + "url": "https://www.uk2.net/", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://www.uk2.net/knowledgebase/display/UK2/Two+Factor+Authentication+Security+-+2FA", + "name": "UK2" + }, + { + "domain": "ukfast.co.uk", + "url": "https://www.ukfast.co.uk/", + "tfa": [ + "sms", + "totp", + "custom-hardware" + ], + "custom-hardware": [ + "Yubico OTP" + ], + "documentation": "https://github.com/2factorauth/twofactorauth/pull/997#issuecomment-77708501", + "name": "UKFast" + }, + { + "domain": "ukpostbox.com", + "url": "https://www.ukpostbox.com", + "tfa": [ + "email" + ], + "name": "UK Postbox" + }, + { + "domain": "ukraine.com.ua", + "tfa": [ + "sms", + "call", + "totp", + "custom-software" + ], + "custom-software": [ + "Telegram Bot" + ], + "documentation": "https://www.ukraine.com.ua/wiki/account/security/otp/", + "name": "Hosting Ukraine" + }, + { + "domain": "umich.edu", + "tfa": [ + "sms", + "call", + "custom-software", + "custom-hardware", + "u2f" + ], + "custom-software": [ + "Duo" + ], + "custom-hardware": [ + "Feitian OTP c100 Token" + ], + "documentation": "https://www.safecomputing.umich.edu/two-factor-authentication", + "name": "University of Michigan" + }, + { + "domain": "umpquabank.com", + "url": "https://www.umpquabank.com/", + "tfa": [ + "sms", + "call" + ], + "documentation": "https://www.umpquabank.com/personal-banking/online-banking-and-billpay/security-faqs/", + "name": "Umpqua Bank" + }, + { + "domain": "unbounce.com", + "tfa": [ + "totp" + ], + "documentation": "https://documentation.unbounce.com/hc/en-us/articles/360001372503", + "name": "Unbounce" + }, + { + "domain": "unfuddle.com", + "tfa": [ + "totp" + ], + "documentation": "https://unfuddle.com/stack/docs/help/two-factor-authentication/", + "name": "Unfuddle STACK" + }, + { + "domain": "uni-marburg.de", + "tfa": [ + "totp", + "custom-hardware" + ], + "custom-hardware": [ + "Yubico OTP" + ], + "documentation": "https://www.uni-marburg.de/de/hrz/dienste/2fa", + "name": "Philipps-Universit\u00e4t Marburg" + }, + { + "domain": "unifyfcu.com", + "url": "https://www.unifyfcu.com", + "tfa": [ + "sms", + "call", + "email" + ], + "documentation": "https://www.unifyfcu.com/multi-factor-authentication-keep-bad-guys-out", + "name": "Unify Financial Credit Union" + }, + { + "domain": "unimelb.edu.au", + "tfa": [ + "totp", + "custom-software" + ], + "custom-software": [ + "Okta Verify" + ], + "documentation": "https://studentit.unimelb.edu.au/cybersecurity/multifactor-authentication-mfa", + "name": "University of Melbourne" + }, + { + "domain": "uniregistry.com", + "tfa": [ + "totp" + ], + "documentation": "https://www.uniregistry.help/hc/en-us/articles/115001729308", + "name": "Uniregistry" + }, + { + "domain": "unisuper.com.au", + "url": "https://www.unisuper.com.au/", + "tfa": [ + "sms", + "email" + ], + "name": "UniSuper" + }, + { + "domain": "united-domains.de", + "url": "https://www.united-domains.de/", + "tfa": [ + "totp" + ], + "documentation": "https://help.united-domains.de/faq-article/wie-aktiviere-ich-die-zweistufige-verifizierung-und-mache-mein-portfolio-login-sicherer", + "notes": "A phone number is required to enable two-factor authentication.", + "name": "united-domains.de" + }, + { + "domain": "uniteddomains.com", + "additional-domains": [ + "ud.com" + ], + "tfa": [ + "totp" + ], + "documentation": "https://www.uniteddomains.com/twofactorauth/", + "name": "ud.com" + }, + { + "domain": "unity.com", + "additional-domains": [ + "unity3d.com" + ], + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://support.unity.com/hc/en-us/articles/208764976", + "name": "Unity" + }, + { + "domain": "unleashedsoftware.com", + "url": "https://www.unleashedsoftware.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.unleashedsoftware.com/hc/en-us/articles/4402216271001", + "name": "Unleashed Inventory" + }, + { + "domain": "unstoppabledomains.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.unstoppabledomains.com/support/solutions/articles/48001185664", + "name": "Unstoppable Domains" + }, + { + "domain": "unsw.edu.au", + "tfa": [ + "totp", + "custom-software" + ], + "custom-software": [ + "Microsoft Authenticator" + ], + "documentation": "https://www.myit.unsw.edu.au/cyber-security/multi-factor-authentication-mfa", + "name": "UNSW Sydney" + }, + { + "domain": "uottawa.ca", + "tfa": [ + "custom-software", + "custom-hardware" + ], + "custom-software": [ + "Microsoft Authenticator" + ], + "custom-hardware": [ + "SafeID token" + ], + "documentation": "https://it.uottawa.ca/security/mfa", + "name": "uOttawa" + }, + { + "domain": "up.com.au", + "tfa": [ + "sms" + ], + "name": "Up" + }, + { + "domain": "upcloud.com", + "tfa": [ + "totp" + ], + "documentation": "https://upcloud.com/resources/tutorials/two-factor-authentication", + "notes": "SMS is required for password recovery.", + "name": "UpCloud" + }, + { + "domain": "updraftplus.com", + "tfa": [ + "totp" + ], + "documentation": "https://updraftplus.com/my-account/two-factor-login-security-settings/", + "name": "UpdraftPlus" + }, + { + "domain": "upenn.edu", + "tfa": [ + "totp", + "custom-software", + "sms", + "call", + "custom-hardware" + ], + "custom-software": [ + "Duo" + ], + "custom-hardware": [ + "SafeID token" + ], + "documentation": "https://www.isc.upenn.edu/how-to/two-step-verification-getting-started", + "name": "University of Pennsylvania" + }, + { + "domain": "uphold.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.uphold.com/hc/en-us/articles/360023791072", + "name": "Uphold" + }, + { + "domain": "uptimerobot.com", + "tfa": [ + "totp" + ], + "documentation": "https://blog.uptimerobot.com/introducing-two-factor-authentication-2fa/", + "name": "Uptime Robot" + }, + { + "domain": "upwork.com", + "url": "https://www.upwork.com", + "tfa": [ + "sms", + "email", + "totp" + ], + "documentation": "https://support.upwork.com/hc/en-us/articles/360009491414", + "name": "Upwork" + }, + { + "domain": "uq.edu.au", + "tfa": [ + "u2f", + "totp", + "custom-software", + "custom-hardware" + ], + "custom-software": [ + "Duo" + ], + "custom-hardware": [ + "Duo D100 Token" + ], + "documentation": "https://my.uq.edu.au/information-and-services/information-technology/uq-accounts-and-passwords/multi-factor-authentication-mfa", + "name": "The University of Queensland" + }, + { + "domain": "usaa.com", + "url": "https://www.usaa.com/", + "tfa": [ + "sms", + "email", + "custom-software" + ], + "custom-software": [ + "Symantec VIP" + ], + "documentation": "https://www.usaa.com/inet/pages/security_token_logon_options", + "name": "USAA" + }, + { + "domain": "usabilla.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.usabilla.com/hc/en-us/articles/115003081611", + "name": "Usabilla" + }, + { + "domain": "usbank.com", + "url": "https://www.usbank.com/", + "tfa": [ + "sms" + ], + "name": "US Bank" + }, + { + "domain": "uscis.gov", + "tfa": [ + "sms", + "email", + "totp" + ], + "name": "US Citizenship and Immigration Services" + }, + { + "domain": "usefathom.com", + "tfa": [ + "totp" + ], + "documentation": "https://usefathom.com/support/two-factor-authentication", + "name": "Fathom Analytics" + }, + { + "domain": "usps.com", + "tfa": [ + "sms" + ], + "documentation": "https://faq.usps.com/s/article/USPS-com-Account#Two-Factor_Authentication", + "name": "US Postal Service" + }, + { + "domain": "uspto.gov", + "tfa": [ + "email", + "sms", + "call", + "totp" + ], + "documentation": "https://www.uspto.gov/learning-and-resources/account-faqs#type-managing-my-account-two-step-authentication", + "name": "US Patent and Trademark Office" + }, + { + "domain": "utoronto.ca", + "tfa": [ + "custom-software", + "custom-hardware" + ], + "custom-software": [ + "Duo Mobile" + ], + "custom-hardware": [ + "Duo token" + ], + "documentation": "https://isea.utoronto.ca/services/utormfa/", + "name": "University of Toronto" + }, + { + "domain": "uts.edu.au", + "tfa": [ + "sms", + "custom-software" + ], + "custom-software": [ + "Okta Verify" + ], + "documentation": "https://www.uts.edu.au/current-students/managing-your-course/using-uts-systems/student-forms-apps-and-systems/multi-factor-authentication", + "name": "University of Technology Sydney" + }, + { + "domain": "uvic.ca", + "tfa": [ + "custom-software", + "custom-hardware" + ], + "custom-software": [ + "Duo Mobile" + ], + "custom-hardware": [ + "Duo token" + ], + "documentation": "https://www.uvic.ca/systems/services/loginspasswords/uvicmfa/", + "name": "University of Victoria" + }, + { + "domain": "uwaterloo.ca", + "tfa": [ + "u2f", + "custom-software", + "custom-hardware", + "sms", + "call" + ], + "custom-software": [ + "Duo Mobile" + ], + "custom-hardware": [ + "Duo token" + ], + "documentation": "https://uwaterloo.ca/two-factor-authentication/", + "name": "University of Waterloo" + }, + { + "domain": "uwcu.org", + "tfa": [ + "sms", + "call", + "totp" + ], + "documentation": "https://help.uwcu.org/kb/Help/content/Prod-3486/", + "name": "UW Credit Union" + }, + { + "domain": "va.gov", + "tfa": [ + "sms", + "call", + "totp", + "u2f", + "custom-software", + "custom-hardware" + ], + "custom-software": [ + "ID.me Authenticator" + ], + "documentation": "https://www.va.gov/resources/verifying-your-identity-on-vagov", + "name": "US Veteran Affairs" + }, + { + "domain": "vagaro.com", + "tfa": [ + "email" + ], + "documentation": "https://support.vagaro.com/hc/en-us/articles/115005413687", + "name": "Vagaro" + }, + { + "domain": "valr.com", + "tfa": [ + "totp", + "sms" + ], + "documentation": "https://support.valr.com/hc/en-us/articles/360013860012", + "name": "Valr" + }, + { + "domain": "vancity.com", + "tfa": [ + "sms", + "totp", + "call" + ], + "documentation": "https://support.vancity.com/what-is-multi-factor-authentication-and-how-does-it-work/", + "name": "Vancity" + }, + { + "domain": "vanguard.com.au", + "url": "https://www.vanguard.com.au/", + "tfa": [ + "sms" + ], + "documentation": "https://www.vanguard.com.au/personal/en/faq-details/what-is-two-factor-authentication-2-fa", + "name": "Vanguard [AU]" + }, + { + "domain": "vanguard.com", + "url": "https://www.vanguard.com/", + "tfa": [ + "sms", + "call", + "u2f", + "custom-hardware" + ], + "custom-hardware": [ + "Voice Verification" + ], + "documentation": "https://investor.vanguard.com/security/security-keys", + "notes": "Hardware based 2FA requires SMS / Phone call 2FA as a backup.", + "name": "Vanguard" + }, + { + "domain": "vapor.laravel.com", + "tfa": [ + "totp" + ], + "name": "Laravel Vapor" + }, + { + "domain": "vcu.edu", + "tfa": [ + "custom-software", + "custom-hardware", + "u2f" + ], + "custom-software": [ + "Duo" + ], + "custom-hardware": [ + "Duo D100 Token" + ], + "documentation": "https://ts.vcu.edu/askit/essential-computing/information-security/2factor/", + "name": "Virginia Commonwealth University" + }, + { + "domain": "veem.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://help.veem.com/hc/en-us/articles/360033419474-two-factor-authentication-2fa-", + "notes": "2FA via sms is available for US only.", + "name": "Veem" + }, + { + "domain": "venmo.com", + "tfa": [ + "sms" + ], + "documentation": "https://help.venmo.com/hc/en-us/articles/217532397", + "name": "Venmo" + }, + { + "domain": "ventraip.com.au", + "tfa": [ + "sms", + "email", + "totp" + ], + "documentation": "https://ventraip.com.au/faq/article/two-factor-authentication-faq-vipcontrol/", + "name": "VentraIP" + }, + { + "domain": "veracode.com", + "tfa": [ + "totp", + "u2f" + ], + "documentation": "https://help.veracode.com/r/t_configure_mfa", + "name": "Veracode" + }, + { + "domain": "verizon.com", + "url": "https://www.verizon.com/", + "tfa": [ + "sms", + "email", + "custom-software" + ], + "custom-software": [ + "My Verizon App" + ], + "documentation": "https://www.verizon.com/support/keeping-your-account-safe-faqs/", + "name": "Verizon" + }, + { + "domain": "verpex.com", + "tfa": [ + "totp" + ], + "name": "Verpex" + }, + { + "domain": "versio.nl", + "tfa": [ + "totp" + ], + "documentation": "https://www.versio.nl/nieuws/twofactor-authenticatie-nu-beschikbaar-voor-uw-klantenaccount-205", + "name": "Versio" + }, + { + "domain": "viabtc.com", + "tfa": [ + "totp", + "sms" + ], + "documentation": "https://support.viabtc.com/hc/en-us/articles/900001693343", + "name": "ViaBTC" + }, + { + "domain": "vicroads.vic.gov.au", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://www.vicroads.vic.gov.au/online-services/help-centre/two-step-verification", + "name": "VicRoads" + }, + { + "domain": "vimeo.com", + "tfa": [ + "totp", + "email" + ], + "documentation": "https://vimeo.zendesk.com/hc/en-us/articles/4856243815693", + "name": "Vimeo" + }, + { + "domain": "vimla.se", + "tfa": [ + "custom-software" + ], + "custom-software": [ + "BankID" + ], + "name": "Vimla" + }, + { + "domain": "virginmoney.com", + "tfa": [ + "custom-software", + "sms" + ], + "custom-software": [ + "Virgin Money Mobile Banking App" + ], + "documentation": "https://uk.virginmoney.com/sca", + "name": "Virgin Money" + }, + { + "domain": "virginpulse.com", + "tfa": [ + "sms", + "email" + ], + "documentation": "https://virginpulse.zendesk.com/hc/en-us/articles/6667851174171", + "notes": "SMS 2FA is only available for US and Canada phone numbers.", + "name": "Virgin Pulse" + }, + { + "domain": "virustotal.com", + "tfa": [ + "totp" + ], + "name": "VirusTotal" + }, + { + "domain": "visualstudio.microsoft.com", + "tfa": [ + "sms", + "email", + "custom-software", + "totp" + ], + "custom-software": [ + "Microsoft Authenticator" + ], + "documentation": "https://support.microsoft.com/en-us/help/12408/", + "name": "Visual Studio Codespaces" + }, + { + "domain": "vivaldi.com", + "additional-domains": [ + "vivaldi.net" + ], + "tfa": [ + "totp", + "u2f" + ], + "documentation": "https://help.vivaldi.com/services/account/two-factor-authentication/", + "name": "Vivaldi" + }, + { + "domain": "vivup.co.uk", + "tfa": [ + "email", + "totp" + ], + "name": "Vivup Benefits" + }, + { + "domain": "vk.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://vk.com/page-777107_53677752", + "notes": "SMS is required for TOTP", + "name": "VK" + }, + { + "domain": "vmware.com", + "tfa": [ + "totp" + ], + "documentation": "https://kb.vmware.com/s/article/74603", + "name": "VMware" + }, + { + "domain": "vodafone.co.uk", + "tfa": [ + "sms" + ], + "name": "Vodafone [UK]" + }, + { + "domain": "vodafone.nl", + "tfa": [ + "sms" + ], + "documentation": "https://www.vodafone.nl/support/my-vodafone/tweestapsverificatie", + "name": "Vodafone [NL]" + }, + { + "domain": "voip.ms", + "tfa": [ + "email", + "totp" + ], + "documentation": "https://wiki.voip.ms/article/TOTP_Authentication", + "notes": "Only one of the 2FA methods can be enabled at the same time.", + "name": "VoIP.ms" + }, + { + "domain": "vpsserver.com", + "url": "https://www.vpsserver.com/", + "tfa": [ + "totp" + ], + "documentation": "https://github.com/2factorauth/twofactorauth/pull/2311#issuecomment-273424695", + "name": "VPS Server" + }, + { + "domain": "vr.de", + "tfa": [ + "custom-software", + "custom-hardware" + ], + "custom-software": [ + "VR-SecureGo" + ], + "custom-hardware": [ + "TAN generator" + ], + "documentation": "https://www.vr.de/privatkunden/unsere-produkte/was-ist-ein-girokonto/tan-verfahren.html", + "notes": "Support for 2FA types depends on regional V&R banks.", + "name": "Volksbanken Raiffeisenbanken" + }, + { + "domain": "vrbo.com", + "url": "https://www.vrbo.com/", + "tfa": [ + "sms", + "call" + ], + "documentation": "https://help.vrbo.com/articles/How-do-I-set-up-two-factor-authentication", + "name": "Vrbo" + }, + { + "domain": "vse.cz", + "tfa": [ + "totp", + "sms", + "u2f", + "custom-software" + ], + "custom-software": [ + "Microsoft Authenticator" + ], + "documentation": "https://ci.vse.cz/english/support/procedures/multi-factor-authentication-in-microsoft-365/", + "name": "Vysok\u00e1 \u0161kola ekonomick\u00e1 v Praze" + }, + { + "domain": "vt.edu", + "tfa": [ + "sms", + "call", + "custom-software", + "custom-hardware" + ], + "custom-software": [ + "Duo" + ], + "custom-hardware": [ + "Duo D100 Token", + "Yubico OTP" + ], + "documentation": "https://www.tech.it.vt.edu/2factor/", + "name": "Virginia Tech" + }, + { + "domain": "vultr.com", + "tfa": [ + "totp", + "custom-hardware" + ], + "custom-hardware": [ + "Yubico OTP" + ], + "documentation": "https://www.vultr.com/docs/using-two-factor-authentication-to-login-to-vultr-control-panel", + "name": "Vultr" + }, + { + "domain": "vwfs.de", + "tfa": [ + "custom-software", + "custom-hardware" + ], + "custom-software": [ + "VW FS app" + ], + "custom-hardware": [ + "photoTAN reader" + ], + "documentation": "https://www.vwfs.de/online-banking/phototan.html", + "name": "Volkswagen Financial Services" + }, + { + "domain": "vystarcu.org", + "tfa": [ + "sms", + "call" + ], + "documentation": "https://vystarcu.org/Online-Services/Internet-Banking-Access/Internet-Mobile-Banking-New-User-Enrollment", + "name": "VyStar Credit Union" + }, + { + "domain": "wageworks.com", + "url": "https://www.wageworks.com", + "tfa": [ + "sms", + "email" + ], + "notes": "Employer/plan sponsor may opt to not offer 2FA.", + "name": "WageWorks" + }, + { + "domain": "warframe.com", + "url": "https://www.warframe.com/", + "tfa": [ + "email" + ], + "documentation": "https://www.warframe.com/2fa-faq", + "name": "Warframe" + }, + { + "domain": "wargaming.net", + "tfa": [ + "totp" + ], + "documentation": "https://eu.wargaming.net/support/en/products/wot/article/10568/", + "name": "Wargaming" + }, + { + "domain": "warnerbrosgames.com", + "additional-domains": [ + "wbgames.com" + ], + "tfa": [ + "totp" + ], + "name": "Warner Bros. Games" + }, + { + "domain": "wasabi.com", + "tfa": [ + "totp" + ], + "documentation": "https://wasabi-support.zendesk.com/hc/en-us/articles/360055164891", + "name": "Wasabi" + }, + { + "domain": "washington.edu", + "url": "https://www.washington.edu/", + "tfa": [ + "call", + "custom-software", + "custom-hardware" + ], + "custom-software": [ + "Duo" + ], + "custom-hardware": [ + "Feitian OTP c100 Token", + "Yubico OTP" + ], + "documentation": "https://itconnect.uw.edu/security/uw-netids/2fa/", + "name": "University of Washington" + }, + { + "domain": "watchguard.com", + "url": "https://www.watchguard.com/", + "tfa": [ + "custom-software" + ], + "custom-software": [ + "AuthPoint App" + ], + "documentation": "https://www.watchguard.com/help/docs/help-center/en-US/Content/en-US/my_products/portal_users-manage-mfa.html", + "name": "WatchGuard" + }, + { + "domain": "wazirx.com", + "tfa": [ + "sms", + "email", + "totp" + ], + "documentation": "https://support.wazirx.com/hc/en-us/articles/360014633494", + "name": "WazirX" + }, + { + "domain": "wealthfront.com", + "url": "https://www.wealthfront.com/", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://support.wealthfront.com/hc/en-us/articles/211004563", + "name": "Wealthfront" + }, + { + "domain": "wealthify.com", + "tfa": [ + "totp" + ], + "documentation": "https://www.wealthify.com/faq#security", + "name": "Wealthify" + }, + { + "domain": "wealthsimple.com", + "additional-domains": [ + "simpletax.ca" + ], + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://help.wealthsimple.com/hc/en-ca/articles/360056584134", + "name": "Wealthsimple" + }, + { + "domain": "web.500px.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.500px.com/hc/en-us/articles/205115877", + "name": "500px" + }, + { + "domain": "web.de", + "tfa": [ + "totp" + ], + "documentation": "https://hilfe.web.de/sicherheit/2fa/index.html", + "notes": "Setup requires SMS verification.", + "name": "Web.de" + }, + { + "domain": "web.mit.edu", + "tfa": [ + "sms", + "call", + "custom-software", + "custom-hardware" + ], + "custom-hardware": [ + "Yubico OTP", + "Duo D100 Token" + ], + "custom-software": [ + "Duo" + ], + "documentation": "https://kb.mit.edu/confluence/display/istcontrib/Duo+Authentication+Landing+Page", + "name": "Massachusetts Institute of Technology" + }, + { + "domain": "webcentral.com.au", + "tfa": [ + "totp" + ], + "documentation": "https://support.webcentral.com.au/s/article/Multi-Factor-Authentication-Guide", + "name": "Webcentral" + }, + { + "domain": "webflow.com", + "tfa": [ + "totp" + ], + "documentation": "https://university.webflow.com/lesson/two-factor-authentication-2fa", + "name": "Webflow" + }, + { + "domain": "webgate.ec.europa.eu", + "url": "https://webgate.ec.europa.eu/cas/", + "tfa": [ + "sms", + "u2f", + "custom-software", + "custom-hardware" + ], + "custom-software": [ + "EU Login mobile app" + ], + "custom-hardware": [ + "VASCO Token", + "DigiPass Token" + ], + "documentation": "https://webgate.ec.europa.eu/cas/manuals/EU_Login_Tutorial.pdf", + "name": "European Commission" + }, + { + "domain": "webmail.pt.lu", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://support.pt.lu/2fa-two-factor-authentication/", + "name": "POST Luxembourg" + }, + { + "domain": "webroot.com", + "additional-domains": [ + "identity.webrootanywhere.com", + "my.webrootanywhere.com" + ], + "tfa": [ + "totp" + ], + "documentation": "https://answers.webroot.com/Webroot/ukp.aspx?vw=1&solid=3476", + "name": "Webroot" + }, + { + "domain": "weclapp.com", + "tfa": [ + "totp", + "u2f" + ], + "documentation": "https://doc.weclapp.com/en/documentation/dein-start-mit-weclapp/2-my-weclapp-personal-master-and-contact-data/2-4-security/2-factor-authentication/", + "name": "Weclapp" + }, + { + "domain": "wedos.com", + "tfa": [ + "totp" + ], + "documentation": "https://kb.wedos.com/cs/zakaznik/otp.html", + "name": "WEDOS" + }, + { + "domain": "wefunder.com", + "tfa": [ + "sms", + "totp", + "u2f" + ], + "documentation": "https://help.wefunder.com/getting-started-for-investors/how-secure-is-my-account", + "notes": "Setting up 2FA with TOTP or Security Key requires adding a phone number.", + "name": "Wefunder" + }, + { + "domain": "wellfound.com", + "additional-domains": [ + "angel.co" + ], + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://help.wellfound.com/article/1064--", + "name": "Wellfound" + }, + { + "domain": "wellsfargo.com", + "additional-domains": [ + "wf.com", + "wellsfargoadvisors.com" + ], + "url": "https://www.wellsfargo.com/", + "tfa": [ + "sms", + "call", + "custom-hardware", + "custom-software" + ], + "custom-software": [ + "Wells Fargo App" + ], + "custom-hardware": [ + "RSA SecurID Device" + ], + "documentation": "https://www.wellsfargo.com/privacy-security/advanced-access", + "name": "Wells Fargo" + }, + { + "domain": "westernunion.com", + "tfa": [ + "sms", + "call", + "custom-software" + ], + "custom-software": [ + "Authy" + ], + "documentation": "https://business.westernunion.com/en-pl/product-documents/psd2-overview/Set-up-two-Factor", + "notes": "2FA is only available for business accounts.", + "name": "Western Union" + }, + { + "domain": "wetransfer.com", + "tfa": [ + "totp" + ], + "documentation": "https://help.wetransfer.com/hc/en-us/articles/360056666872", + "name": "WeTransfer" + }, + { + "domain": "whalefin.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.whalefin.com/hc/en-us/articles/8911053323417", + "name": "WhaleFin" + }, + { + "domain": "whatsapp.com", + "tfa": [ + "sms", + "call" + ], + "documentation": "https://www.whatsapp.com/faq/en/general/26000021", + "name": "WhatsApp" + }, + { + "domain": "whc.ca", + "tfa": [ + "totp" + ], + "documentation": "https://clients.whc.ca/en/knowledgebase/1430", + "name": "Web Hosting Canada" + }, + { + "domain": "wheniwork.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://help.wheniwork.com/articles/log-in-with-two-step-verification-computer/", + "name": "When I Work" + }, + { + "domain": "whimsical.com", + "tfa": [ + "totp" + ], + "documentation": "https://help.whimsical.com/article/664--", + "name": "Whimsical" + }, + { + "domain": "whois.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://manage.whois.com/kb/node/2690", + "notes": "TOTP 2FA is only available for resellers.", + "name": "Whois" + }, + { + "domain": "wiggle.co.uk", + "additional-domains": [ + "wiggle.cn", + "wiggle.co.nz", + "wiggle.com", + "wiggle.com.au", + "wiggle.es", + "wigglesport.de", + "wiggle.dk", + "wiggle.fr", + "wigglesport.it", + "wiggle.jp", + "wiggle.nl", + "wiggle.ru", + "wiggle.se" + ], + "tfa": [ + "totp" + ], + "documentation": "https://wiggle.egain.cloud/kb/Wiggle_EN/content/Prod-13378/", + "name": "Wiggle" + }, + { + "domain": "wikipedia.org", + "tfa": [ + "totp", + "u2f" + ], + "documentation": "https://meta.wikimedia.org/wiki/Help:Two-factor_authentication", + "notes": "Currently limited to administrators (and users with admin-like permissions like interface editors), bureaucrats, checkusers, oversighters, stewards, edit filter managers and the OATH-testers global group.", + "name": "Wikipedia" + }, + { + "domain": "win2day.at", + "tfa": [ + "sms" + ], + "documentation": "https://www.win2day.at/suche?faqId=331", + "name": "win2day" + }, + { + "domain": "windscribe.com", + "tfa": [ + "totp" + ], + "documentation": "https://windscribe.com/knowledge-base/articles/how-do-i-enable-2-factor-authentication-on-my-account", + "name": "Windscribe" + }, + { + "domain": "wirexapp.com", + "tfa": [ + "totp" + ], + "documentation": "https://wirexapp.com/hc/articles/207160259", + "name": "Wirex" + }, + { + "domain": "wisc.edu", + "tfa": [ + "custom-software", + "custom-hardware", + "u2f" + ], + "custom-software": [ + "Duo" + ], + "custom-hardware": [ + "Duo D100 Token", + "Feitian OTP c100 Token" + ], + "documentation": "https://it.wisc.edu/services/duo-multi-factor-authentication-mfa/", + "name": "University of Wisconsin Madison" + }, + { + "domain": "wise.com", + "additional-domains": [ + "transferwise.com" + ], + "tfa": [ + "sms", + "call", + "totp", + "custom-software" + ], + "custom-software": [ + "Wise App" + ], + "documentation": "https://wise.com/help/articles/2932125", + "notes": "SMS 2FA must be enabled before software methods can be enabled.", + "name": "Wise" + }, + { + "domain": "withings.com", + "tfa": [ + "sms" + ], + "documentation": "https://support.withings.com/hc/en-us/articles/4409345943697", + "notes": "The following apps do not support 2FA: Thermo, WithBaby, Withings Home Security Camera, WiScale.", + "name": "Withings" + }, + { + "domain": "wix.com", + "url": "https://www.wix.com/", + "tfa": [ + "totp", + "email", + "sms" + ], + "documentation": "https://support.wix.com/en/article/using-2-step-verification-for-your-wix-account", + "notes": "SMS is only available with Premium plans; email is restricted to selected providers.", + "name": "Wix" + }, + { + "domain": "wolf.bet", + "tfa": [ + "totp" + ], + "documentation": "https://www.youtube.com/watch?v=3B_zlGVldRY", + "name": "Wolf.bet" + }, + { + "domain": "woltlab.com", + "tfa": [ + "totp", + "u2f", + "email" + ], + "name": "WoltLab" + }, + { + "domain": "woodforest.com", + "url": "https://www.woodforest.com/", + "tfa": [ + "totp", + "sms" + ], + "documentation": "https://www.woodforest.com/Personal/Services/Online-Banking/Online-Banking-Security", + "name": "Woodforest National Bank" + }, + { + "domain": "woolworths.com.au", + "tfa": [ + "sms", + "email" + ], + "name": "Woolworths" + }, + { + "domain": "wordfence.com", + "url": "https://www.wordfence.com", + "tfa": [ + "totp" + ], + "documentation": "https://www.wordfence.com/help/central/2fa/", + "name": "Wordfence Central" + }, + { + "domain": "wordpress.com", + "tfa": [ + "sms", + "totp", + "u2f" + ], + "documentation": "https://en.support.wordpress.com/security/two-step-authentication/", + "name": "WordPress.com" + }, + { + "domain": "workato.com", + "tfa": [ + "totp" + ], + "documentation": "https://docs.workato.com/security/two-factor-authentication.html", + "name": "Workato" + }, + { + "domain": "workflowy.com", + "tfa": [ + "totp" + ], + "documentation": "https://workflowy.zendesk.com/hc/en-us/articles/4401923146516", + "name": "Workflowy" + }, + { + "domain": "workplace.com", + "tfa": [ + "totp", + "sms", + "custom-software" + ], + "custom-software": [ + "Workplace App Code Generator" + ], + "documentation": "https://www.workplace.com/help/work/1331628866920315", + "name": "Workplace" + }, + { + "domain": "world4you.com", + "url": "https://www.world4you.com", + "tfa": [ + "totp" + ], + "documentation": "https://www.world4you.com/faq/en/w4y-app/faq.zwei-faktor-authentifizierung-world4you-app.html", + "name": "World4You" + }, + { + "domain": "wp.pl", + "tfa": [ + "u2f", + "custom-software" + ], + "custom-software": [ + "1login od WP" + ], + "documentation": "https://pomoc.wp.pl/1login/jak-wlaczyc-i-wylaczyc-logowanie-dwustopniowe", + "name": "Wirtualna Polska" + }, + { + "domain": "wpengine.com", + "tfa": [ + "sms", + "totp", + "custom-software" + ], + "custom-software": [ + "Okta Verify" + ], + "documentation": "https://wpengine.com/support/2-factor-authentication/", + "name": "WP Engine" + }, + { + "domain": "wrike.com", + "url": "https://www.wrike.com/", + "tfa": [ + "totp" + ], + "documentation": "https://help.wrike.com/hc/en-us/articles/210324445", + "notes": "Only accessible to Enterprise accounts and users may need to contact their account administrator to enable 2FA.", + "name": "Wrike" + }, + { + "domain": "wykop.pl", + "url": "https://www.wykop.pl", + "tfa": [ + "totp" + ], + "name": "Wykop" + }, + { + "domain": "wyze.com", + "tfa": [ + "sms", + "email", + "totp" + ], + "documentation": "https://support.wyze.com/hc/en-us/articles/360024402052", + "notes": "2FA via SMS is only available for USA and Canada.", + "name": "Wyze" + }, + { + "domain": "xapo.com", + "tfa": [ + "sms" + ], + "documentation": "https://customersupport.xapo.com/en_us/r1aIYObOd", + "name": "Xapo" + }, + { + "domain": "xbox.com", + "url": "https://www.xbox.com/live", + "tfa": [ + "sms", + "email", + "custom-software", + "call", + "totp" + ], + "custom-software": [ + "Microsoft Authenticator" + ], + "documentation": "https://support.microsoft.com/en-us/help/12408/", + "notes": "2FA phone calls may not be available in all regions", + "name": "Xbox Live" + }, + { + "domain": "xero.com", + "tfa": [ + "totp", + "custom-software" + ], + "custom-software": [ + "Xero Verify" + ], + "documentation": "https://help.xero.com/nz/MyXero_Two-Step_About", + "name": "Xero" + }, + { + "domain": "xfinity.com", + "additional-domains": [ + "comcast.com" + ], + "custom-software": [ + "Xfinity Authenticator" + ], + "documentation": "https://www.xfinity.com/support/articles/two-step-verification-xfinity-app-setup/", + "tfa": [ + "sms", + "email", + "custom-software" + ], + "notes": "Email 2FA requires the use of a non-Comcast.net email address.", + "name": "Xfinity" + }, + { + "domain": "xing.com", + "url": "https://www.xing.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://faq.xing.com/en/settings-security/two-factor-login-two-factor-authentication", + "name": "XING" + }, + { + "domain": "xink.io", + "tfa": [ + "totp" + ], + "documentation": "https://support.xink.io/support/solutions/articles/1000271422", + "name": "Xink" + }, + { + "domain": "xplenty.com", + "tfa": [ + "totp" + ], + "documentation": "https://www.xplenty.com/docs/2-factor-authentication/", + "name": "Xplenty" + }, + { + "domain": "yclas.com", + "tfa": [ + "totp" + ], + "documentation": "https://docs.yclas.com/2-step-authentication/", + "name": "Yclas" + }, + { + "domain": "yoomoney.ru", + "tfa": [ + "sms" + ], + "documentation": "https://yoomoney.ru/page?id=536116", + "name": "YooMoney" + }, + { + "domain": "yorku.ca", + "tfa": [ + "u2f", + "custom-software", + "custom-hardware", + "sms", + "call" + ], + "custom-software": [ + "Duo Mobile" + ], + "custom-hardware": [ + "Duo token", + "Touch ID" + ], + "documentation": "https://infosec.yorku.ca/2FA", + "notes": "2FA via SMS or phone call can only be enabled by the support team.", + "name": "York University" + }, + { + "domain": "youhodler.com", + "url": "https://www.youhodler.com", + "tfa": [ + "totp", + "sms" + ], + "documentation": "https://help.youhodler.com/en/articles/3787039", + "name": "YouHodler" + }, + { + "domain": "youinvest.co.uk", + "tfa": [ + "totp" + ], + "documentation": "https://www.youinvest.co.uk/faq/how-do-i-set-two-factor-authentication", + "name": "AJ Bell Youinvest" + }, + { + "domain": "youneedabudget.com", + "url": "https://www.youneedabudget.com/", + "tfa": [ + "totp" + ], + "documentation": "https://support.ynab.com/rkKHuLlRc", + "name": "You Need A Budget (YNAB)" + }, + { + "domain": "youtube.com", + "url": "https://www.youtube.com/", + "tfa": [ + "sms", + "call", + "totp", + "custom-software", + "u2f" + ], + "custom-software": [ + "Google Prompts", + "Google Smart Lock" + ], + "documentation": "https://www.google.com/intl/en-US/landing/2step/features.html", + "name": "YouTube" + }, + { + "domain": "zaba.hr", + "url": "https://www.zaba.hr/", + "tfa": [ + "custom-software" + ], + "custom-software": [ + "m-zaba app" + ], + "documentation": "https://www.zaba.hr/home/token#pan3", + "name": "Zagreba\u010dka banka" + }, + { + "domain": "zapier.com", + "tfa": [ + "totp" + ], + "documentation": "https://zapier.com/help/two-factor-authentication/", + "name": "Zapier" + }, + { + "domain": "zendesk.com", + "url": "https://www.zendesk.com", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://support.zendesk.com/hc/en-us/articles/4408829277466", + "name": "Zendesk" + }, + { + "domain": "zerodha.com", + "tfa": [ + "totp" + ], + "documentation": "https://support.zerodha.com/category/your-zerodha-account/login-credentials/login-credentials-of-trading-platforms/articles/time-based-otp-setup", + "name": "Zerodha Kite" + }, + { + "domain": "zimbra.com", + "url": "https://www.zimbra.com/", + "tfa": [ + "totp" + ], + "documentation": "https://blog.zimbra.com/2016/02/zimbra-collaboration-8-7-two-factor-authentication-2fa-technical-preview/", + "notes": "Available in Zimbra Collaboration 8.7 and above, Network Edition only", + "name": "Zimbra" + }, + { + "domain": "zip.co", + "tfa": [ + "sms" + ], + "documentation": "https://help.zip.co/hc/en-us/articles/360004059836", + "name": "Zip" + }, + { + "domain": "zkb.ch", + "url": "https://www.zkb.ch/", + "tfa": [ + "custom-software", + "custom-hardware" + ], + "custom-software": [ + "ZKB Access" + ], + "custom-hardware": [ + "photoTAN reader" + ], + "documentation": "https://www.zkb.ch/de/pr/pk/efinance/ebanking/login-verfahren.html", + "name": "Zurich Cantonal Bank (ZKB)" + }, + { + "domain": "zoho.com", + "tfa": [ + "sms", + "custom-software", + "totp", + "u2f" + ], + "custom-software": [ + "Zoho OneAuth" + ], + "documentation": "https://help.zoho.com/portal/kb/articles/mfa-introduction", + "name": "Zoho" + }, + { + "domain": "zondaglobal.com", + "tfa": [ + "email", + "totp" + ], + "documentation": "https://zondaglobal.com/en/helpdesk/zonda-exchange/my-account/how-to-use-two-factor-authentication-provided-by-google-authenticator", + "name": "Zonda" + }, + { + "domain": "zoom.us", + "url": "https://www.zoom.us", + "tfa": [ + "sms", + "totp" + ], + "documentation": "https://support.zoom.us/hc/en-us/articles/360038247071", + "name": "Zoom" + } +] \ No newline at end of file diff --git a/common/src/commonMain/resources/MR/files/wordlist_en_eff.txt b/common/src/commonMain/resources/MR/files/wordlist_en_eff.txt new file mode 100644 index 00000000..20a63e45 --- /dev/null +++ b/common/src/commonMain/resources/MR/files/wordlist_en_eff.txt @@ -0,0 +1,7776 @@ +abacus +abdomen +abdominal +abide +abiding +ability +ablaze +able +abnormal +abrasion +abrasive +abreast +abridge +abroad +abruptly +absence +absentee +absently +absinthe +absolute +absolve +abstain +abstract +absurd +accent +acclaim +acclimate +accompany +account +accuracy +accurate +accustom +acetone +achiness +aching +acid +acorn +acquaint +acquire +acre +acrobat +acronym +acting +action +activate +activator +active +activism +activist +activity +actress +acts +acutely +acuteness +aeration +aerobics +aerosol +aerospace +afar +affair +affected +affecting +affection +affidavit +affiliate +affirm +affix +afflicted +affluent +afford +affront +aflame +afloat +aflutter +afoot +afraid +afterglow +afterlife +aftermath +aftermost +afternoon +aged +ageless +agency +agenda +agent +aggregate +aghast +agile +agility +aging +agnostic +agonize +agonizing +agony +agreeable +agreeably +agreed +agreeing +agreement +aground +ahead +ahoy +aide +aids +aim +ajar +alabaster +alarm +albatross +album +alfalfa +algebra +algorithm +alias +alibi +alienable +alienate +aliens +alike +alive +alkaline +alkalize +almanac +almighty +almost +aloe +aloft +aloha +alone +alongside +aloof +alphabet +alright +although +altitude +alto +aluminum +alumni +always +amaretto +amaze +amazingly +amber +ambiance +ambiguity +ambiguous +ambition +ambitious +ambulance +ambush +amendable +amendment +amends +amenity +amiable +amicably +amid +amigo +amino +amiss +ammonia +ammonium +amnesty +amniotic +among +amount +amperage +ample +amplifier +amplify +amply +amuck +amulet +amusable +amused +amusement +amuser +amusing +anaconda +anaerobic +anagram +anatomist +anatomy +anchor +anchovy +ancient +android +anemia +anemic +aneurism +anew +angelfish +angelic +anger +angled +angler +angles +angling +angrily +angriness +anguished +angular +animal +animate +animating +animation +animator +anime +animosity +ankle +annex +annotate +announcer +annoying +annually +annuity +anointer +another +answering +antacid +antarctic +anteater +antelope +antennae +anthem +anthill +anthology +antibody +antics +antidote +antihero +antiquely +antiques +antiquity +antirust +antitoxic +antitrust +antiviral +antivirus +antler +antonym +antsy +anvil +anybody +anyhow +anymore +anyone +anyplace +anything +anytime +anyway +anywhere +aorta +apache +apostle +appealing +appear +appease +appeasing +appendage +appendix +appetite +appetizer +applaud +applause +apple +appliance +applicant +applied +apply +appointee +appraisal +appraiser +apprehend +approach +approval +approve +apricot +april +apron +aptitude +aptly +aqua +aqueduct +arbitrary +arbitrate +ardently +area +arena +arguable +arguably +argue +arise +armadillo +armband +armchair +armed +armful +armhole +arming +armless +armoire +armored +armory +armrest +army +aroma +arose +around +arousal +arrange +array +arrest +arrival +arrive +arrogance +arrogant +arson +art +ascend +ascension +ascent +ascertain +ashamed +ashen +ashes +ashy +aside +askew +asleep +asparagus +aspect +aspirate +aspire +aspirin +astonish +astound +astride +astrology +astronaut +astronomy +astute +atlantic +atlas +atom +atonable +atop +atrium +atrocious +atrophy +attach +attain +attempt +attendant +attendee +attention +attentive +attest +attic +attire +attitude +attractor +attribute +atypical +auction +audacious +audacity +audible +audibly +audience +audio +audition +augmented +august +authentic +author +autism +autistic +autograph +automaker +automated +automatic +autopilot +available +avalanche +avatar +avenge +avenging +avenue +average +aversion +avert +aviation +aviator +avid +avoid +await +awaken +award +aware +awhile +awkward +awning +awoke +awry +axis +babble +babbling +babied +baboon +backache +backboard +backboned +backdrop +backed +backer +backfield +backfire +backhand +backing +backlands +backlash +backless +backlight +backlit +backlog +backpack +backpedal +backrest +backroom +backshift +backside +backslid +backspace +backspin +backstab +backstage +backtalk +backtrack +backup +backward +backwash +backwater +backyard +bacon +bacteria +bacterium +badass +badge +badland +badly +badness +baffle +baffling +bagel +bagful +baggage +bagged +baggie +bagginess +bagging +baggy +bagpipe +baguette +baked +bakery +bakeshop +baking +balance +balancing +balcony +balmy +balsamic +bamboo +banana +banish +banister +banjo +bankable +bankbook +banked +banker +banking +banknote +bankroll +banner +bannister +banshee +banter +barbecue +barbed +barbell +barber +barcode +barge +bargraph +barista +baritone +barley +barmaid +barman +barn +barometer +barrack +barracuda +barrel +barrette +barricade +barrier +barstool +bartender +barterer +bash +basically +basics +basil +basin +basis +basket +batboy +batch +bath +baton +bats +battalion +battered +battering +battery +batting +battle +bauble +bazooka +blabber +bladder +blade +blah +blame +blaming +blanching +blandness +blank +blaspheme +blasphemy +blast +blatancy +blatantly +blazer +blazing +bleach +bleak +bleep +blemish +blend +bless +blighted +blimp +bling +blinked +blinker +blinking +blinks +blip +blissful +blitz +blizzard +bloated +bloating +blob +blog +bloomers +blooming +blooper +blot +blouse +blubber +bluff +bluish +blunderer +blunt +blurb +blurred +blurry +blurt +blush +blustery +boaster +boastful +boasting +boat +bobbed +bobbing +bobble +bobcat +bobsled +bobtail +bodacious +body +bogged +boggle +bogus +boil +bok +bolster +bolt +bonanza +bonded +bonding +bondless +boned +bonehead +boneless +bonelike +boney +bonfire +bonnet +bonsai +bonus +bony +boogeyman +boogieman +book +boondocks +booted +booth +bootie +booting +bootlace +bootleg +boots +boozy +borax +boring +borough +borrower +borrowing +boss +botanical +botanist +botany +botch +both +bottle +bottling +bottom +bounce +bouncing +bouncy +bounding +boundless +bountiful +bovine +boxcar +boxer +boxing +boxlike +boxy +breach +breath +breeches +breeching +breeder +breeding +breeze +breezy +brethren +brewery +brewing +briar +bribe +brick +bride +bridged +brigade +bright +brilliant +brim +bring +brink +brisket +briskly +briskness +bristle +brittle +broadband +broadcast +broaden +broadly +broadness +broadside +broadways +broiler +broiling +broken +broker +bronchial +bronco +bronze +bronzing +brook +broom +brought +browbeat +brownnose +browse +browsing +bruising +brunch +brunette +brunt +brush +brussels +brute +brutishly +bubble +bubbling +bubbly +buccaneer +bucked +bucket +buckle +buckshot +buckskin +bucktooth +buckwheat +buddhism +buddhist +budding +buddy +budget +buffalo +buffed +buffer +buffing +buffoon +buggy +bulb +bulge +bulginess +bulgur +bulk +bulldog +bulldozer +bullfight +bullfrog +bullhorn +bullion +bullish +bullpen +bullring +bullseye +bullwhip +bully +bunch +bundle +bungee +bunion +bunkbed +bunkhouse +bunkmate +bunny +bunt +busboy +bush +busily +busload +bust +busybody +buzz +cabana +cabbage +cabbie +cabdriver +cable +caboose +cache +cackle +cacti +cactus +caddie +caddy +cadet +cadillac +cadmium +cage +cahoots +cake +calamari +calamity +calcium +calculate +calculus +caliber +calibrate +calm +caloric +calorie +calzone +camcorder +cameo +camera +camisole +camper +campfire +camping +campsite +campus +canal +canary +cancel +candied +candle +candy +cane +canine +canister +cannabis +canned +canning +cannon +cannot +canola +canon +canopener +canopy +canteen +canyon +capable +capably +capacity +cape +capillary +capital +capitol +capped +capricorn +capsize +capsule +caption +captivate +captive +captivity +capture +caramel +carat +caravan +carbon +cardboard +carded +cardiac +cardigan +cardinal +cardstock +carefully +caregiver +careless +caress +caretaker +cargo +caring +carless +carload +carmaker +carnage +carnation +carnival +carnivore +carol +carpenter +carpentry +carpool +carport +carried +carrot +carrousel +carry +cartel +cartload +carton +cartoon +cartridge +cartwheel +carve +carving +carwash +cascade +case +cash +casing +casino +casket +cassette +casually +casualty +catacomb +catalog +catalyst +catalyze +catapult +cataract +catatonic +catcall +catchable +catcher +catching +catchy +caterer +catering +catfight +catfish +cathedral +cathouse +catlike +catnap +catnip +catsup +cattail +cattishly +cattle +catty +catwalk +caucasian +caucus +causal +causation +cause +causing +cauterize +caution +cautious +cavalier +cavalry +caviar +cavity +cedar +celery +celestial +celibacy +celibate +celtic +cement +census +ceramics +ceremony +certainly +certainty +certified +certify +cesarean +cesspool +chafe +chaffing +chain +chair +chalice +challenge +chamber +chamomile +champion +chance +change +channel +chant +chaos +chaperone +chaplain +chapped +chaps +chapter +character +charbroil +charcoal +charger +charging +chariot +charity +charm +charred +charter +charting +chase +chasing +chaste +chastise +chastity +chatroom +chatter +chatting +chatty +cheating +cheddar +cheek +cheer +cheese +cheesy +chef +chemicals +chemist +chemo +cherisher +cherub +chess +chest +chevron +chevy +chewable +chewer +chewing +chewy +chief +chihuahua +childcare +childhood +childish +childless +childlike +chili +chill +chimp +chip +chirping +chirpy +chitchat +chivalry +chive +chloride +chlorine +choice +chokehold +choking +chomp +chooser +choosing +choosy +chop +chosen +chowder +chowtime +chrome +chubby +chuck +chug +chummy +chump +chunk +churn +chute +cider +cilantro +cinch +cinema +cinnamon +circle +circling +circular +circulate +circus +citable +citadel +citation +citizen +citric +citrus +city +civic +civil +clad +claim +clambake +clammy +clamor +clamp +clamshell +clang +clanking +clapped +clapper +clapping +clarify +clarinet +clarity +clash +clasp +class +clatter +clause +clavicle +claw +clay +clean +clear +cleat +cleaver +cleft +clench +clergyman +clerical +clerk +clever +clicker +client +climate +climatic +cling +clinic +clinking +clip +clique +cloak +clobber +clock +clone +cloning +closable +closure +clothes +clothing +cloud +clover +clubbed +clubbing +clubhouse +clump +clumsily +clumsy +clunky +clustered +clutch +clutter +coach +coagulant +coastal +coaster +coasting +coastland +coastline +coat +coauthor +cobalt +cobbler +cobweb +cocoa +coconut +cod +coeditor +coerce +coexist +coffee +cofounder +cognition +cognitive +cogwheel +coherence +coherent +cohesive +coil +coke +cola +cold +coleslaw +coliseum +collage +collapse +collar +collected +collector +collide +collie +collision +colonial +colonist +colonize +colony +colossal +colt +coma +come +comfort +comfy +comic +coming +comma +commence +commend +comment +commerce +commode +commodity +commodore +common +commotion +commute +commuting +compacted +compacter +compactly +compactor +companion +company +compare +compel +compile +comply +component +composed +composer +composite +compost +composure +compound +compress +comprised +computer +computing +comrade +concave +conceal +conceded +concept +concerned +concert +conch +concierge +concise +conclude +concrete +concur +condense +condiment +condition +condone +conducive +conductor +conduit +cone +confess +confetti +confidant +confident +confider +confiding +configure +confined +confining +confirm +conflict +conform +confound +confront +confused +confusing +confusion +congenial +congested +congrats +congress +conical +conjoined +conjure +conjuror +connected +connector +consensus +consent +console +consoling +consonant +constable +constant +constrain +constrict +construct +consult +consumer +consuming +contact +container +contempt +contend +contented +contently +contents +contest +context +contort +contour +contrite +control +contusion +convene +convent +copartner +cope +copied +copier +copilot +coping +copious +copper +copy +coral +cork +cornball +cornbread +corncob +cornea +corned +corner +cornfield +cornflake +cornhusk +cornmeal +cornstalk +corny +coronary +coroner +corporal +corporate +corral +correct +corridor +corrode +corroding +corrosive +corsage +corset +cortex +cosigner +cosmetics +cosmic +cosmos +cosponsor +cost +cottage +cotton +couch +cough +could +countable +countdown +counting +countless +country +county +courier +covenant +cover +coveted +coveting +coyness +cozily +coziness +cozy +crabbing +crabgrass +crablike +crabmeat +cradle +cradling +crafter +craftily +craftsman +craftwork +crafty +cramp +cranberry +crane +cranial +cranium +crank +crate +crave +craving +crawfish +crawlers +crawling +crayfish +crayon +crazed +crazily +craziness +crazy +creamed +creamer +creamlike +crease +creasing +creatable +create +creation +creative +creature +credible +credibly +credit +creed +creme +creole +crepe +crept +crescent +crested +cresting +crestless +crevice +crewless +crewman +crewmate +crib +cricket +cried +crier +crimp +crimson +cringe +cringing +crinkle +crinkly +crisped +crisping +crisply +crispness +crispy +criteria +critter +croak +crock +crook +croon +crop +cross +crouch +crouton +crowbar +crowd +crown +crucial +crudely +crudeness +cruelly +cruelness +cruelty +crumb +crummiest +crummy +crumpet +crumpled +cruncher +crunching +crunchy +crusader +crushable +crushed +crusher +crushing +crust +crux +crying +cryptic +crystal +cubbyhole +cube +cubical +cubicle +cucumber +cuddle +cuddly +cufflink +culinary +culminate +culpable +culprit +cultivate +cultural +culture +cupbearer +cupcake +cupid +cupped +cupping +curable +curator +curdle +cure +curfew +curing +curled +curler +curliness +curling +curly +curry +curse +cursive +cursor +curtain +curtly +curtsy +curvature +curve +curvy +cushy +cusp +cussed +custard +custodian +custody +customary +customer +customize +customs +cut +cycle +cyclic +cycling +cyclist +cylinder +cymbal +cytoplasm +cytoplast +dab +dad +daffodil +dagger +daily +daintily +dainty +dairy +daisy +dallying +dance +dancing +dandelion +dander +dandruff +dandy +danger +dangle +dangling +daredevil +dares +daringly +darkened +darkening +darkish +darkness +darkroom +darling +darn +dart +darwinism +dash +dastardly +data +datebook +dating +daughter +daunting +dawdler +dawn +daybed +daybreak +daycare +daydream +daylight +daylong +dayroom +daytime +dazzler +dazzling +deacon +deafening +deafness +dealer +dealing +dealmaker +dealt +dean +debatable +debate +debating +debit +debrief +debtless +debtor +debug +debunk +decade +decaf +decal +decathlon +decay +deceased +deceit +deceiver +deceiving +december +decency +decent +deception +deceptive +decibel +decidable +decimal +decimeter +decipher +deck +declared +decline +decode +decompose +decorated +decorator +decoy +decrease +decree +dedicate +dedicator +deduce +deduct +deed +deem +deepen +deeply +deepness +deface +defacing +defame +default +defeat +defection +defective +defendant +defender +defense +defensive +deferral +deferred +defiance +defiant +defile +defiling +define +definite +deflate +deflation +deflator +deflected +deflector +defog +deforest +defraud +defrost +deftly +defuse +defy +degraded +degrading +degrease +degree +dehydrate +deity +dejected +delay +delegate +delegator +delete +deletion +delicacy +delicate +delicious +delighted +delirious +delirium +deliverer +delivery +delouse +delta +deluge +delusion +deluxe +demanding +demeaning +demeanor +demise +democracy +democrat +demote +demotion +demystify +denatured +deniable +denial +denim +denote +dense +density +dental +dentist +denture +deny +deodorant +deodorize +departed +departure +depict +deplete +depletion +deplored +deploy +deport +depose +depraved +depravity +deprecate +depress +deprive +depth +deputize +deputy +derail +deranged +derby +derived +desecrate +deserve +deserving +designate +designed +designer +designing +deskbound +desktop +deskwork +desolate +despair +despise +despite +destiny +destitute +destruct +detached +detail +detection +detective +detector +detention +detergent +detest +detonate +detonator +detoxify +detract +deuce +devalue +deviancy +deviant +deviate +deviation +deviator +device +devious +devotedly +devotee +devotion +devourer +devouring +devoutly +dexterity +dexterous +diabetes +diabetic +diabolic +diagnoses +diagnosis +diagram +dial +diameter +diaper +diaphragm +diary +dice +dicing +dictate +dictation +dictator +difficult +diffused +diffuser +diffusion +diffusive +dig +dilation +diligence +diligent +dill +dilute +dime +diminish +dimly +dimmed +dimmer +dimness +dimple +diner +dingbat +dinghy +dinginess +dingo +dingy +dining +dinner +diocese +dioxide +diploma +dipped +dipper +dipping +directed +direction +directive +directly +directory +direness +dirtiness +disabled +disagree +disallow +disarm +disarray +disaster +disband +disbelief +disburse +discard +discern +discharge +disclose +discolor +discount +discourse +discover +discuss +disdain +disengage +disfigure +disgrace +dish +disinfect +disjoin +disk +dislike +disliking +dislocate +dislodge +disloyal +dismantle +dismay +dismiss +dismount +disobey +disorder +disown +disparate +disparity +dispatch +dispense +dispersal +dispersed +disperser +displace +display +displease +disposal +dispose +disprove +dispute +disregard +disrupt +dissuade +distance +distant +distaste +distill +distinct +distort +distract +distress +district +distrust +ditch +ditto +ditzy +dividable +divided +dividend +dividers +dividing +divinely +diving +divinity +divisible +divisibly +division +divisive +divorcee +dizziness +dizzy +doable +docile +dock +doctrine +document +dodge +dodgy +doily +doing +dole +dollar +dollhouse +dollop +dolly +dolphin +domain +domelike +domestic +dominion +dominoes +donated +donation +donator +donor +donut +doodle +doorbell +doorframe +doorknob +doorman +doormat +doornail +doorpost +doorstep +doorstop +doorway +doozy +dork +dormitory +dorsal +dosage +dose +dotted +doubling +douche +dove +down +dowry +doze +drab +dragging +dragonfly +dragonish +dragster +drainable +drainage +drained +drainer +drainpipe +dramatic +dramatize +drank +drapery +drastic +draw +dreaded +dreadful +dreadlock +dreamboat +dreamily +dreamland +dreamless +dreamlike +dreamt +dreamy +drearily +dreary +drench +dress +drew +dribble +dried +drier +drift +driller +drilling +drinkable +drinking +dripping +drippy +drivable +driven +driver +driveway +driving +drizzle +drizzly +drone +drool +droop +drop-down +dropbox +dropkick +droplet +dropout +dropper +drove +drown +drowsily +drudge +drum +dry +dubbed +dubiously +duchess +duckbill +ducking +duckling +ducktail +ducky +duct +dude +duffel +dugout +duh +duke +duller +dullness +duly +dumping +dumpling +dumpster +duo +dupe +duplex +duplicate +duplicity +durable +durably +duration +duress +during +dusk +dust +dutiful +duty +duvet +dwarf +dweeb +dwelled +dweller +dwelling +dwindle +dwindling +dynamic +dynamite +dynasty +dyslexia +dyslexic +each +eagle +earache +eardrum +earflap +earful +earlobe +early +earmark +earmuff +earphone +earpiece +earplugs +earring +earshot +earthen +earthlike +earthling +earthly +earthworm +earthy +earwig +easeful +easel +easiest +easily +easiness +easing +eastbound +eastcoast +easter +eastward +eatable +eaten +eatery +eating +eats +ebay +ebony +ebook +ecard +eccentric +echo +eclair +eclipse +ecologist +ecology +economic +economist +economy +ecosphere +ecosystem +edge +edginess +edging +edgy +edition +editor +educated +education +educator +eel +effective +effects +efficient +effort +eggbeater +egging +eggnog +eggplant +eggshell +egomaniac +egotism +egotistic +either +eject +elaborate +elastic +elated +elbow +eldercare +elderly +eldest +electable +election +elective +elephant +elevate +elevating +elevation +elevator +eleven +elf +eligible +eligibly +eliminate +elite +elitism +elixir +elk +ellipse +elliptic +elm +elongated +elope +eloquence +eloquent +elsewhere +elude +elusive +elves +email +embargo +embark +embassy +embattled +embellish +ember +embezzle +emblaze +emblem +embody +embolism +emboss +embroider +emcee +emerald +emergency +emission +emit +emote +emoticon +emotion +empathic +empathy +emperor +emphases +emphasis +emphasize +emphatic +empirical +employed +employee +employer +emporium +empower +emptier +emptiness +empty +emu +enable +enactment +enamel +enchanted +enchilada +encircle +enclose +enclosure +encode +encore +encounter +encourage +encroach +encrust +encrypt +endanger +endeared +endearing +ended +ending +endless +endnote +endocrine +endorphin +endorse +endowment +endpoint +endurable +endurance +enduring +energetic +energize +energy +enforced +enforcer +engaged +engaging +engine +engorge +engraved +engraver +engraving +engross +engulf +enhance +enigmatic +enjoyable +enjoyably +enjoyer +enjoying +enjoyment +enlarged +enlarging +enlighten +enlisted +enquirer +enrage +enrich +enroll +enslave +ensnare +ensure +entail +entangled +entering +entertain +enticing +entire +entitle +entity +entomb +entourage +entrap +entree +entrench +entrust +entryway +entwine +enunciate +envelope +enviable +enviably +envious +envision +envoy +envy +enzyme +epic +epidemic +epidermal +epidermis +epidural +epilepsy +epileptic +epilogue +epiphany +episode +equal +equate +equation +equator +equinox +equipment +equity +equivocal +eradicate +erasable +erased +eraser +erasure +ergonomic +errand +errant +erratic +error +erupt +escalate +escalator +escapable +escapade +escapist +escargot +eskimo +esophagus +espionage +espresso +esquire +essay +essence +essential +establish +estate +esteemed +estimate +estimator +estranged +estrogen +etching +eternal +eternity +ethanol +ether +ethically +ethics +euphemism +evacuate +evacuee +evade +evaluate +evaluator +evaporate +evasion +evasive +even +everglade +evergreen +everybody +everyday +everyone +evict +evidence +evident +evil +evoke +evolution +evolve +exact +exalted +example +excavate +excavator +exceeding +exception +excess +exchange +excitable +exciting +exclaim +exclude +excluding +exclusion +exclusive +excretion +excretory +excursion +excusable +excusably +excuse +exemplary +exemplify +exemption +exerciser +exert +exes +exfoliate +exhale +exhaust +exhume +exile +existing +exit +exodus +exonerate +exorcism +exorcist +expand +expanse +expansion +expansive +expectant +expedited +expediter +expel +expend +expenses +expensive +expert +expire +expiring +explain +expletive +explicit +explode +exploit +explore +exploring +exponent +exporter +exposable +expose +exposure +express +expulsion +exquisite +extended +extending +extent +extenuate +exterior +external +extinct +extortion +extradite +extras +extrovert +extrude +extruding +exuberant +fable +fabric +fabulous +facebook +facecloth +facedown +faceless +facelift +faceplate +faceted +facial +facility +facing +facsimile +faction +factoid +factor +factsheet +factual +faculty +fade +fading +failing +falcon +fall +false +falsify +fame +familiar +family +famine +famished +fanatic +fancied +fanciness +fancy +fanfare +fang +fanning +fantasize +fantastic +fantasy +fascism +fastball +faster +fasting +fastness +faucet +favorable +favorably +favored +favoring +favorite +fax +feast +federal +fedora +feeble +feed +feel +feisty +feline +felt-tip +feminine +feminism +feminist +feminize +femur +fence +fencing +fender +ferment +fernlike +ferocious +ferocity +ferret +ferris +ferry +fervor +fester +festival +festive +festivity +fetal +fetch +fever +fiber +fiction +fiddle +fiddling +fidelity +fidgeting +fidgety +fifteen +fifth +fiftieth +fifty +figment +figure +figurine +filing +filled +filler +filling +film +filter +filth +filtrate +finale +finalist +finalize +finally +finance +financial +finch +fineness +finer +finicky +finished +finisher +finishing +finite +finless +finlike +fiscally +fit +five +flaccid +flagman +flagpole +flagship +flagstick +flagstone +flail +flakily +flaky +flame +flammable +flanked +flanking +flannels +flap +flaring +flashback +flashbulb +flashcard +flashily +flashing +flashy +flask +flatbed +flatfoot +flatly +flatness +flatten +flattered +flatterer +flattery +flattop +flatware +flatworm +flavored +flavorful +flavoring +flaxseed +fled +fleshed +fleshy +flick +flier +flight +flinch +fling +flint +flip +flirt +float +flock +flogging +flop +floral +florist +floss +flounder +flyable +flyaway +flyer +flying +flyover +flypaper +foam +foe +fog +foil +folic +folk +follicle +follow +fondling +fondly +fondness +fondue +font +food +fool +footage +football +footbath +footboard +footer +footgear +foothill +foothold +footing +footless +footman +footnote +footpad +footpath +footprint +footrest +footsie +footsore +footwear +footwork +fossil +foster +founder +founding +fountain +fox +foyer +fraction +fracture +fragile +fragility +fragment +fragrance +fragrant +frail +frame +framing +frantic +fraternal +frayed +fraying +frays +freckled +freckles +freebase +freebee +freebie +freedom +freefall +freehand +freeing +freeload +freely +freemason +freeness +freestyle +freeware +freeway +freewill +freezable +freezing +freight +french +frenzied +frenzy +frequency +frequent +fresh +fretful +fretted +friction +friday +fridge +fried +friend +frighten +frightful +frigidity +frigidly +frill +fringe +frisbee +frisk +fritter +frivolous +frolic +from +front +frostbite +frosted +frostily +frosting +frostlike +frosty +froth +frown +frozen +fructose +frugality +frugally +fruit +frustrate +frying +gab +gaffe +gag +gainfully +gaining +gains +gala +gallantly +galleria +gallery +galley +gallon +gallows +gallstone +galore +galvanize +gambling +game +gaming +gamma +gander +gangly +gangrene +gangway +gap +garage +garbage +garden +gargle +garland +garlic +garment +garnet +garnish +garter +gas +gatherer +gathering +gating +gauging +gauntlet +gauze +gave +gawk +gazing +gear +gecko +geek +geiger +gem +gender +generic +generous +genetics +genre +gentile +gentleman +gently +gents +geography +geologic +geologist +geology +geometric +geometry +geranium +gerbil +geriatric +germicide +germinate +germless +germproof +gestate +gestation +gesture +getaway +getting +getup +giant +gibberish +giblet +giddily +giddiness +giddy +gift +gigabyte +gigahertz +gigantic +giggle +giggling +giggly +gigolo +gilled +gills +gimmick +girdle +giveaway +given +giver +giving +gizmo +gizzard +glacial +glacier +glade +gladiator +gladly +glamorous +glamour +glance +glancing +glandular +glare +glaring +glass +glaucoma +glazing +gleaming +gleeful +glider +gliding +glimmer +glimpse +glisten +glitch +glitter +glitzy +gloater +gloating +gloomily +gloomy +glorified +glorifier +glorify +glorious +glory +gloss +glove +glowing +glowworm +glucose +glue +gluten +glutinous +glutton +gnarly +gnat +goal +goatskin +goes +goggles +going +goldfish +goldmine +goldsmith +golf +goliath +gonad +gondola +gone +gong +good +gooey +goofball +goofiness +goofy +google +goon +gopher +gore +gorged +gorgeous +gory +gosling +gossip +gothic +gotten +gout +gown +grab +graceful +graceless +gracious +gradation +graded +grader +gradient +grading +gradually +graduate +graffiti +grafted +grafting +grain +granddad +grandkid +grandly +grandma +grandpa +grandson +granite +granny +granola +grant +granular +grape +graph +grapple +grappling +grasp +grass +gratified +gratify +grating +gratitude +gratuity +gravel +graveness +graves +graveyard +gravitate +gravity +gravy +gray +grazing +greasily +greedily +greedless +greedy +green +greeter +greeting +grew +greyhound +grid +grief +grievance +grieving +grievous +grill +grimace +grimacing +grime +griminess +grimy +grinch +grinning +grip +gristle +grit +groggily +groggy +groin +groom +groove +grooving +groovy +grope +ground +grouped +grout +grove +grower +growing +growl +grub +grudge +grudging +grueling +gruffly +grumble +grumbling +grumbly +grumpily +grunge +grunt +guacamole +guidable +guidance +guide +guiding +guileless +guise +gulf +gullible +gully +gulp +gumball +gumdrop +gumminess +gumming +gummy +gurgle +gurgling +guru +gush +gusto +gusty +gutless +guts +gutter +guy +guzzler +gyration +habitable +habitant +habitat +habitual +hacked +hacker +hacking +hacksaw +had +haggler +haiku +half +halogen +halt +halved +halves +hamburger +hamlet +hammock +hamper +hamster +hamstring +handbag +handball +handbook +handbrake +handcart +handclap +handclasp +handcraft +handcuff +handed +handful +handgrip +handgun +handheld +handiness +handiwork +handlebar +handled +handler +handling +handmade +handoff +handpick +handprint +handrail +handsaw +handset +handsfree +handshake +handstand +handwash +handwork +handwoven +handwrite +handyman +hangnail +hangout +hangover +hangup +hankering +hankie +hanky +haphazard +happening +happier +happiest +happily +happiness +happy +harbor +hardcopy +hardcore +hardcover +harddisk +hardened +hardener +hardening +hardhat +hardhead +hardiness +hardly +hardness +hardship +hardware +hardwired +hardwood +hardy +harmful +harmless +harmonica +harmonics +harmonize +harmony +harness +harpist +harsh +harvest +hash +hassle +haste +hastily +hastiness +hasty +hatbox +hatchback +hatchery +hatchet +hatching +hatchling +hate +hatless +hatred +haunt +haven +hazard +hazelnut +hazily +haziness +hazing +hazy +headache +headband +headboard +headcount +headdress +headed +header +headfirst +headgear +heading +headlamp +headless +headlock +headphone +headpiece +headrest +headroom +headscarf +headset +headsman +headstand +headstone +headway +headwear +heap +heat +heave +heavily +heaviness +heaving +hedge +hedging +heftiness +hefty +helium +helmet +helper +helpful +helping +helpless +helpline +hemlock +hemstitch +hence +henchman +henna +herald +herbal +herbicide +herbs +heritage +hermit +heroics +heroism +herring +herself +hertz +hesitancy +hesitant +hesitate +hexagon +hexagram +hubcap +huddle +huddling +huff +hug +hula +hulk +hull +human +humble +humbling +humbly +humid +humiliate +humility +humming +hummus +humongous +humorist +humorless +humorous +humpback +humped +humvee +hunchback +hundredth +hunger +hungrily +hungry +hunk +hunter +hunting +huntress +huntsman +hurdle +hurled +hurler +hurling +hurray +hurricane +hurried +hurry +hurt +husband +hush +husked +huskiness +hut +hybrid +hydrant +hydrated +hydration +hydrogen +hydroxide +hyperlink +hypertext +hyphen +hypnoses +hypnosis +hypnotic +hypnotism +hypnotist +hypnotize +hypocrisy +hypocrite +ibuprofen +ice +iciness +icing +icky +icon +icy +idealism +idealist +idealize +ideally +idealness +identical +identify +identity +ideology +idiocy +idiom +idly +igloo +ignition +ignore +iguana +illicitly +illusion +illusive +image +imaginary +imagines +imaging +imbecile +imitate +imitation +immature +immerse +immersion +imminent +immobile +immodest +immorally +immortal +immovable +immovably +immunity +immunize +impaired +impale +impart +impatient +impeach +impeding +impending +imperfect +imperial +impish +implant +implement +implicate +implicit +implode +implosion +implosive +imply +impolite +important +importer +impose +imposing +impotence +impotency +impotent +impound +imprecise +imprint +imprison +impromptu +improper +improve +improving +improvise +imprudent +impulse +impulsive +impure +impurity +iodine +iodize +ion +ipad +iphone +ipod +irate +irk +iron +irregular +irrigate +irritable +irritably +irritant +irritate +islamic +islamist +isolated +isolating +isolation +isotope +issue +issuing +italicize +italics +item +itinerary +itunes +ivory +ivy +jab +jackal +jacket +jackknife +jackpot +jailbird +jailbreak +jailer +jailhouse +jalapeno +jam +janitor +january +jargon +jarring +jasmine +jaundice +jaunt +java +jawed +jawless +jawline +jaws +jaybird +jaywalker +jazz +jeep +jeeringly +jellied +jelly +jersey +jester +jet +jiffy +jigsaw +jimmy +jingle +jingling +jinx +jitters +jittery +job +jockey +jockstrap +jogger +jogging +john +joining +jokester +jokingly +jolliness +jolly +jolt +jot +jovial +joyfully +joylessly +joyous +joyride +joystick +jubilance +jubilant +judge +judgingly +judicial +judiciary +judo +juggle +juggling +jugular +juice +juiciness +juicy +jujitsu +jukebox +july +jumble +jumbo +jump +junction +juncture +june +junior +juniper +junkie +junkman +junkyard +jurist +juror +jury +justice +justifier +justify +justly +justness +juvenile +kabob +kangaroo +karaoke +karate +karma +kebab +keenly +keenness +keep +keg +kelp +kennel +kept +kerchief +kerosene +kettle +kick +kiln +kilobyte +kilogram +kilometer +kilowatt +kilt +kimono +kindle +kindling +kindly +kindness +kindred +kinetic +kinfolk +king +kinship +kinsman +kinswoman +kissable +kisser +kissing +kitchen +kite +kitten +kitty +kiwi +kleenex +knapsack +knee +knelt +knickers +knoll +koala +kooky +kosher +krypton +kudos +kung +labored +laborer +laboring +laborious +labrador +ladder +ladies +ladle +ladybug +ladylike +lagged +lagging +lagoon +lair +lake +lance +landed +landfall +landfill +landing +landlady +landless +landline +landlord +landmark +landmass +landmine +landowner +landscape +landside +landslide +language +lankiness +lanky +lantern +lapdog +lapel +lapped +lapping +laptop +lard +large +lark +lash +lasso +last +latch +late +lather +latitude +latrine +latter +latticed +launch +launder +laundry +laurel +lavender +lavish +laxative +lazily +laziness +lazy +lecturer +left +legacy +legal +legend +legged +leggings +legible +legibly +legislate +lego +legroom +legume +legwarmer +legwork +lemon +lend +length +lens +lent +leotard +lesser +letdown +lethargic +lethargy +letter +lettuce +level +leverage +levers +levitate +levitator +liability +liable +liberty +librarian +library +licking +licorice +lid +life +lifter +lifting +liftoff +ligament +likely +likeness +likewise +liking +lilac +lilly +lily +limb +limeade +limelight +limes +limit +limping +limpness +line +lingo +linguini +linguist +lining +linked +linoleum +linseed +lint +lion +lip +liquefy +liqueur +liquid +lisp +list +litigate +litigator +litmus +litter +little +livable +lived +lively +liver +livestock +lividly +living +lizard +lubricant +lubricate +lucid +luckily +luckiness +luckless +lucrative +ludicrous +lugged +lukewarm +lullaby +lumber +luminance +luminous +lumpiness +lumping +lumpish +lunacy +lunar +lunchbox +luncheon +lunchroom +lunchtime +lung +lurch +lure +luridness +lurk +lushly +lushness +luster +lustfully +lustily +lustiness +lustrous +lusty +luxurious +luxury +lying +lyrically +lyricism +lyricist +lyrics +macarena +macaroni +macaw +mace +machine +machinist +magazine +magenta +maggot +magical +magician +magma +magnesium +magnetic +magnetism +magnetize +magnifier +magnify +magnitude +magnolia +mahogany +maimed +majestic +majesty +majorette +majority +makeover +maker +makeshift +making +malformed +malt +mama +mammal +mammary +mammogram +manager +managing +manatee +mandarin +mandate +mandatory +mandolin +manger +mangle +mango +mangy +manhandle +manhole +manhood +manhunt +manicotti +manicure +manifesto +manila +mankind +manlike +manliness +manly +manmade +manned +mannish +manor +manpower +mantis +mantra +manual +many +map +marathon +marauding +marbled +marbles +marbling +march +mardi +margarine +margarita +margin +marigold +marina +marine +marital +maritime +marlin +marmalade +maroon +married +marrow +marry +marshland +marshy +marsupial +marvelous +marxism +mascot +masculine +mashed +mashing +massager +masses +massive +mastiff +matador +matchbook +matchbox +matcher +matching +matchless +material +maternal +maternity +math +mating +matriarch +matrimony +matrix +matron +matted +matter +maturely +maturing +maturity +mauve +maverick +maximize +maximum +maybe +mayday +mayflower +moaner +moaning +mobile +mobility +mobilize +mobster +mocha +mocker +mockup +modified +modify +modular +modulator +module +moisten +moistness +moisture +molar +molasses +mold +molecular +molecule +molehill +mollusk +mom +monastery +monday +monetary +monetize +moneybags +moneyless +moneywise +mongoose +mongrel +monitor +monkhood +monogamy +monogram +monologue +monopoly +monorail +monotone +monotype +monoxide +monsieur +monsoon +monstrous +monthly +monument +moocher +moodiness +moody +mooing +moonbeam +mooned +moonlight +moonlike +moonlit +moonrise +moonscape +moonshine +moonstone +moonwalk +mop +morale +morality +morally +morbidity +morbidly +morphine +morphing +morse +mortality +mortally +mortician +mortified +mortify +mortuary +mosaic +mossy +most +mothball +mothproof +motion +motivate +motivator +motive +motocross +motor +motto +mountable +mountain +mounted +mounting +mourner +mournful +mouse +mousiness +moustache +mousy +mouth +movable +move +movie +moving +mower +mowing +much +muck +mud +mug +mulberry +mulch +mule +mulled +mullets +multiple +multiply +multitask +multitude +mumble +mumbling +mumbo +mummified +mummify +mummy +mumps +munchkin +mundane +municipal +muppet +mural +murkiness +murky +murmuring +muscular +museum +mushily +mushiness +mushroom +mushy +music +musket +muskiness +musky +mustang +mustard +muster +mustiness +musty +mutable +mutate +mutation +mute +mutilated +mutilator +mutiny +mutt +mutual +muzzle +myself +myspace +mystified +mystify +myth +nacho +nag +nail +name +naming +nanny +nanometer +nape +napkin +napped +napping +nappy +narrow +nastily +nastiness +national +native +nativity +natural +nature +naturist +nautical +navigate +navigator +navy +nearby +nearest +nearly +nearness +neatly +neatness +nebula +nebulizer +nectar +negate +negation +negative +neglector +negligee +negligent +negotiate +nemeses +nemesis +neon +nephew +nerd +nervous +nervy +nest +net +neurology +neuron +neurosis +neurotic +neuter +neutron +never +next +nibble +nickname +nicotine +niece +nifty +nimble +nimbly +nineteen +ninetieth +ninja +nintendo +ninth +nuclear +nuclei +nucleus +nugget +nullify +number +numbing +numbly +numbness +numeral +numerate +numerator +numeric +numerous +nuptials +nursery +nursing +nurture +nutcase +nutlike +nutmeg +nutrient +nutshell +nuttiness +nutty +nuzzle +nylon +oaf +oak +oasis +oat +obedience +obedient +obituary +object +obligate +obliged +oblivion +oblivious +oblong +obnoxious +oboe +obscure +obscurity +observant +observer +observing +obsessed +obsession +obsessive +obsolete +obstacle +obstinate +obstruct +obtain +obtrusive +obtuse +obvious +occultist +occupancy +occupant +occupier +occupy +ocean +ocelot +octagon +octane +october +octopus +ogle +oil +oink +ointment +okay +old +olive +olympics +omega +omen +ominous +omission +omit +omnivore +onboard +oncoming +ongoing +onion +online +onlooker +only +onscreen +onset +onshore +onslaught +onstage +onto +onward +onyx +oops +ooze +oozy +opacity +opal +open +operable +operate +operating +operation +operative +operator +opium +opossum +opponent +oppose +opposing +opposite +oppressed +oppressor +opt +opulently +osmosis +other +otter +ouch +ought +ounce +outage +outback +outbid +outboard +outbound +outbreak +outburst +outcast +outclass +outcome +outdated +outdoors +outer +outfield +outfit +outflank +outgoing +outgrow +outhouse +outing +outlast +outlet +outline +outlook +outlying +outmatch +outmost +outnumber +outplayed +outpost +outpour +output +outrage +outrank +outreach +outright +outscore +outsell +outshine +outshoot +outsider +outskirts +outsmart +outsource +outspoken +outtakes +outthink +outward +outweigh +outwit +oval +ovary +oven +overact +overall +overarch +overbid +overbill +overbite +overblown +overboard +overbook +overbuilt +overcast +overcoat +overcome +overcook +overcrowd +overdraft +overdrawn +overdress +overdrive +overdue +overeager +overeater +overexert +overfed +overfeed +overfill +overflow +overfull +overgrown +overhand +overhang +overhaul +overhead +overhear +overheat +overhung +overjoyed +overkill +overlabor +overlaid +overlap +overlay +overload +overlook +overlord +overlying +overnight +overpass +overpay +overplant +overplay +overpower +overprice +overrate +overreach +overreact +override +overripe +overrule +overrun +overshoot +overshot +oversight +oversized +oversleep +oversold +overspend +overstate +overstay +overstep +overstock +overstuff +oversweet +overtake +overthrow +overtime +overtly +overtone +overture +overturn +overuse +overvalue +overview +overwrite +owl +oxford +oxidant +oxidation +oxidize +oxidizing +oxygen +oxymoron +oyster +ozone +paced +pacemaker +pacific +pacifier +pacifism +pacifist +pacify +padded +padding +paddle +paddling +padlock +pagan +pager +paging +pajamas +palace +palatable +palm +palpable +palpitate +paltry +pampered +pamperer +pampers +pamphlet +panama +pancake +pancreas +panda +pandemic +pang +panhandle +panic +panning +panorama +panoramic +panther +pantomime +pantry +pants +pantyhose +paparazzi +papaya +paper +paprika +papyrus +parabola +parachute +parade +paradox +paragraph +parakeet +paralegal +paralyses +paralysis +paralyze +paramedic +parameter +paramount +parasail +parasite +parasitic +parcel +parched +parchment +pardon +parish +parka +parking +parkway +parlor +parmesan +parole +parrot +parsley +parsnip +partake +parted +parting +partition +partly +partner +partridge +party +passable +passably +passage +passcode +passenger +passerby +passing +passion +passive +passivism +passover +passport +password +pasta +pasted +pastel +pastime +pastor +pastrami +pasture +pasty +patchwork +patchy +paternal +paternity +path +patience +patient +patio +patriarch +patriot +patrol +patronage +patronize +pauper +pavement +paver +pavestone +pavilion +paving +pawing +payable +payback +paycheck +payday +payee +payer +paying +payment +payphone +payroll +pebble +pebbly +pecan +pectin +peculiar +peddling +pediatric +pedicure +pedigree +pedometer +pegboard +pelican +pellet +pelt +pelvis +penalize +penalty +pencil +pendant +pending +penholder +penknife +pennant +penniless +penny +penpal +pension +pentagon +pentagram +pep +perceive +percent +perch +percolate +perennial +perfected +perfectly +perfume +periscope +perish +perjurer +perjury +perkiness +perky +perm +peroxide +perpetual +perplexed +persecute +persevere +persuaded +persuader +pesky +peso +pessimism +pessimist +pester +pesticide +petal +petite +petition +petri +petroleum +petted +petticoat +pettiness +petty +petunia +phantom +phobia +phoenix +phonebook +phoney +phonics +phoniness +phony +phosphate +photo +phrase +phrasing +placard +placate +placidly +plank +planner +plant +plasma +plaster +plastic +plated +platform +plating +platinum +platonic +platter +platypus +plausible +plausibly +playable +playback +player +playful +playgroup +playhouse +playing +playlist +playmaker +playmate +playoff +playpen +playroom +playset +plaything +playtime +plaza +pleading +pleat +pledge +plentiful +plenty +plethora +plexiglas +pliable +plod +plop +plot +plow +ploy +pluck +plug +plunder +plunging +plural +plus +plutonium +plywood +poach +pod +poem +poet +pogo +pointed +pointer +pointing +pointless +pointy +poise +poison +poker +poking +polar +police +policy +polio +polish +politely +polka +polo +polyester +polygon +polygraph +polymer +poncho +pond +pony +popcorn +pope +poplar +popper +poppy +popsicle +populace +popular +populate +porcupine +pork +porous +porridge +portable +portal +portfolio +porthole +portion +portly +portside +poser +posh +posing +possible +possibly +possum +postage +postal +postbox +postcard +posted +poster +posting +postnasal +posture +postwar +pouch +pounce +pouncing +pound +pouring +pout +powdered +powdering +powdery +power +powwow +pox +praising +prance +prancing +pranker +prankish +prankster +prayer +praying +preacher +preaching +preachy +preamble +precinct +precise +precision +precook +precut +predator +predefine +predict +preface +prefix +preflight +preformed +pregame +pregnancy +pregnant +preheated +prelaunch +prelaw +prelude +premiere +premises +premium +prenatal +preoccupy +preorder +prepaid +prepay +preplan +preppy +preschool +prescribe +preseason +preset +preshow +president +presoak +press +presume +presuming +preteen +pretended +pretender +pretense +pretext +pretty +pretzel +prevail +prevalent +prevent +preview +previous +prewar +prewashed +prideful +pried +primal +primarily +primary +primate +primer +primp +princess +print +prior +prism +prison +prissy +pristine +privacy +private +privatize +prize +proactive +probable +probably +probation +probe +probing +probiotic +problem +procedure +process +proclaim +procreate +procurer +prodigal +prodigy +produce +product +profane +profanity +professed +professor +profile +profound +profusely +progeny +prognosis +program +progress +projector +prologue +prolonged +promenade +prominent +promoter +promotion +prompter +promptly +prone +prong +pronounce +pronto +proofing +proofread +proofs +propeller +properly +property +proponent +proposal +propose +props +prorate +protector +protegee +proton +prototype +protozoan +protract +protrude +proud +provable +proved +proven +provided +provider +providing +province +proving +provoke +provoking +provolone +prowess +prowler +prowling +proximity +proxy +prozac +prude +prudishly +prune +pruning +pry +psychic +public +publisher +pucker +pueblo +pug +pull +pulmonary +pulp +pulsate +pulse +pulverize +puma +pumice +pummel +punch +punctual +punctuate +punctured +pungent +punisher +punk +pupil +puppet +puppy +purchase +pureblood +purebred +purely +pureness +purgatory +purge +purging +purifier +purify +purist +puritan +purity +purple +purplish +purposely +purr +purse +pursuable +pursuant +pursuit +purveyor +pushcart +pushchair +pusher +pushiness +pushing +pushover +pushpin +pushup +pushy +putdown +putt +puzzle +puzzling +pyramid +pyromania +python +quack +quadrant +quail +quaintly +quake +quaking +qualified +qualifier +qualify +quality +qualm +quantum +quarrel +quarry +quartered +quarterly +quarters +quartet +quench +query +quicken +quickly +quickness +quicksand +quickstep +quiet +quill +quilt +quintet +quintuple +quirk +quit +quiver +quizzical +quotable +quotation +quote +rabid +race +racing +racism +rack +racoon +radar +radial +radiance +radiantly +radiated +radiation +radiator +radio +radish +raffle +raft +rage +ragged +raging +ragweed +raider +railcar +railing +railroad +railway +raisin +rake +raking +rally +ramble +rambling +ramp +ramrod +ranch +rancidity +random +ranged +ranger +ranging +ranked +ranking +ransack +ranting +rants +rare +rarity +rascal +rash +rasping +ravage +raven +ravine +raving +ravioli +ravishing +reabsorb +reach +reacquire +reaction +reactive +reactor +reaffirm +ream +reanalyze +reappear +reapply +reappoint +reapprove +rearrange +rearview +reason +reassign +reassure +reattach +reawake +rebalance +rebate +rebel +rebirth +reboot +reborn +rebound +rebuff +rebuild +rebuilt +reburial +rebuttal +recall +recant +recapture +recast +recede +recent +recess +recharger +recipient +recital +recite +reckless +reclaim +recliner +reclining +recluse +reclusive +recognize +recoil +recollect +recolor +reconcile +reconfirm +reconvene +recopy +record +recount +recoup +recovery +recreate +rectal +rectangle +rectified +rectify +recycled +recycler +recycling +reemerge +reenact +reenter +reentry +reexamine +referable +referee +reference +refill +refinance +refined +refinery +refining +refinish +reflected +reflector +reflex +reflux +refocus +refold +reforest +reformat +reformed +reformer +reformist +refract +refrain +refreeze +refresh +refried +refueling +refund +refurbish +refurnish +refusal +refuse +refusing +refutable +refute +regain +regalia +regally +reggae +regime +region +register +registrar +registry +regress +regretful +regroup +regular +regulate +regulator +rehab +reheat +rehire +rehydrate +reimburse +reissue +reiterate +rejoice +rejoicing +rejoin +rekindle +relapse +relapsing +relatable +related +relation +relative +relax +relay +relearn +release +relenting +reliable +reliably +reliance +reliant +relic +relieve +relieving +relight +relish +relive +reload +relocate +relock +reluctant +rely +remake +remark +remarry +rematch +remedial +remedy +remember +reminder +remindful +remission +remix +remnant +remodeler +remold +remorse +remote +removable +removal +removed +remover +removing +rename +renderer +rendering +rendition +renegade +renewable +renewably +renewal +renewed +renounce +renovate +renovator +rentable +rental +rented +renter +reoccupy +reoccur +reopen +reorder +repackage +repacking +repaint +repair +repave +repaying +repayment +repeal +repeated +repeater +repent +rephrase +replace +replay +replica +reply +reporter +repose +repossess +repost +repressed +reprimand +reprint +reprise +reproach +reprocess +reproduce +reprogram +reps +reptile +reptilian +repugnant +repulsion +repulsive +repurpose +reputable +reputably +request +require +requisite +reroute +rerun +resale +resample +rescuer +reseal +research +reselect +reseller +resemble +resend +resent +reset +reshape +reshoot +reshuffle +residence +residency +resident +residual +residue +resigned +resilient +resistant +resisting +resize +resolute +resolved +resonant +resonate +resort +resource +respect +resubmit +result +resume +resupply +resurface +resurrect +retail +retainer +retaining +retake +retaliate +retention +rethink +retinal +retired +retiree +retiring +retold +retool +retorted +retouch +retrace +retract +retrain +retread +retreat +retrial +retrieval +retriever +retry +return +retying +retype +reunion +reunite +reusable +reuse +reveal +reveler +revenge +revenue +reverb +revered +reverence +reverend +reversal +reverse +reversing +reversion +revert +revisable +revise +revision +revisit +revivable +revival +reviver +reviving +revocable +revoke +revolt +revolver +revolving +reward +rewash +rewind +rewire +reword +rework +rewrap +rewrite +rhyme +ribbon +ribcage +rice +riches +richly +richness +rickety +ricotta +riddance +ridden +ride +riding +rifling +rift +rigging +rigid +rigor +rimless +rimmed +rind +rink +rinse +rinsing +riot +ripcord +ripeness +ripening +ripping +ripple +rippling +riptide +rise +rising +risk +risotto +ritalin +ritzy +rival +riverbank +riverbed +riverboat +riverside +riveter +riveting +roamer +roaming +roast +robbing +robe +robin +robotics +robust +rockband +rocker +rocket +rockfish +rockiness +rocking +rocklike +rockslide +rockstar +rocky +rogue +roman +romp +rope +roping +roster +rosy +rotten +rotting +rotunda +roulette +rounding +roundish +roundness +roundup +roundworm +routine +routing +rover +roving +royal +rubbed +rubber +rubbing +rubble +rubdown +ruby +ruckus +rudder +rug +ruined +rule +rumble +rumbling +rummage +rumor +runaround +rundown +runner +running +runny +runt +runway +rupture +rural +ruse +rush +rust +rut +sabbath +sabotage +sacrament +sacred +sacrifice +sadden +saddlebag +saddled +saddling +sadly +sadness +safari +safeguard +safehouse +safely +safeness +saffron +saga +sage +sagging +saggy +said +saint +sake +salad +salami +salaried +salary +saline +salon +saloon +salsa +salt +salutary +salute +salvage +salvaging +salvation +same +sample +sampling +sanction +sanctity +sanctuary +sandal +sandbag +sandbank +sandbar +sandblast +sandbox +sanded +sandfish +sanding +sandlot +sandpaper +sandpit +sandstone +sandstorm +sandworm +sandy +sanitary +sanitizer +sank +santa +sapling +sappiness +sappy +sarcasm +sarcastic +sardine +sash +sasquatch +sassy +satchel +satiable +satin +satirical +satisfied +satisfy +saturate +saturday +sauciness +saucy +sauna +savage +savanna +saved +savings +savior +savor +saxophone +say +scabbed +scabby +scalded +scalding +scale +scaling +scallion +scallop +scalping +scam +scandal +scanner +scanning +scant +scapegoat +scarce +scarcity +scarecrow +scared +scarf +scarily +scariness +scarring +scary +scavenger +scenic +schedule +schematic +scheme +scheming +schilling +schnapps +scholar +science +scientist +scion +scoff +scolding +scone +scoop +scooter +scope +scorch +scorebook +scorecard +scored +scoreless +scorer +scoring +scorn +scorpion +scotch +scoundrel +scoured +scouring +scouting +scouts +scowling +scrabble +scraggly +scrambled +scrambler +scrap +scratch +scrawny +screen +scribble +scribe +scribing +scrimmage +script +scroll +scrooge +scrounger +scrubbed +scrubber +scruffy +scrunch +scrutiny +scuba +scuff +sculptor +sculpture +scurvy +scuttle +secluded +secluding +seclusion +second +secrecy +secret +sectional +sector +secular +securely +security +sedan +sedate +sedation +sedative +sediment +seduce +seducing +segment +seismic +seizing +seldom +selected +selection +selective +selector +self +seltzer +semantic +semester +semicolon +semifinal +seminar +semisoft +semisweet +senate +senator +send +senior +senorita +sensation +sensitive +sensitize +sensually +sensuous +sepia +september +septic +septum +sequel +sequence +sequester +series +sermon +serotonin +serpent +serrated +serve +service +serving +sesame +sessions +setback +setting +settle +settling +setup +sevenfold +seventeen +seventh +seventy +severity +shabby +shack +shaded +shadily +shadiness +shading +shadow +shady +shaft +shakable +shakily +shakiness +shaking +shaky +shale +shallot +shallow +shame +shampoo +shamrock +shank +shanty +shape +shaping +share +sharpener +sharper +sharpie +sharply +sharpness +shawl +sheath +shed +sheep +sheet +shelf +shell +shelter +shelve +shelving +sherry +shield +shifter +shifting +shiftless +shifty +shimmer +shimmy +shindig +shine +shingle +shininess +shining +shiny +ship +shirt +shivering +shock +shone +shoplift +shopper +shopping +shoptalk +shore +shortage +shortcake +shortcut +shorten +shorter +shorthand +shortlist +shortly +shortness +shorts +shortwave +shorty +shout +shove +showbiz +showcase +showdown +shower +showgirl +showing +showman +shown +showoff +showpiece +showplace +showroom +showy +shrank +shrapnel +shredder +shredding +shrewdly +shriek +shrill +shrimp +shrine +shrink +shrivel +shrouded +shrubbery +shrubs +shrug +shrunk +shucking +shudder +shuffle +shuffling +shun +shush +shut +shy +siamese +siberian +sibling +siding +sierra +siesta +sift +sighing +silenced +silencer +silent +silica +silicon +silk +silliness +silly +silo +silt +silver +similarly +simile +simmering +simple +simplify +simply +sincere +sincerity +singer +singing +single +singular +sinister +sinless +sinner +sinuous +sip +siren +sister +sitcom +sitter +sitting +situated +situation +sixfold +sixteen +sixth +sixties +sixtieth +sixtyfold +sizable +sizably +size +sizing +sizzle +sizzling +skater +skating +skedaddle +skeletal +skeleton +skeptic +sketch +skewed +skewer +skid +skied +skier +skies +skiing +skilled +skillet +skillful +skimmed +skimmer +skimming +skimpily +skincare +skinhead +skinless +skinning +skinny +skintight +skipper +skipping +skirmish +skirt +skittle +skydiver +skylight +skyline +skype +skyrocket +skyward +slab +slacked +slacker +slacking +slackness +slacks +slain +slam +slander +slang +slapping +slapstick +slashed +slashing +slate +slather +slaw +sled +sleek +sleep +sleet +sleeve +slept +sliceable +sliced +slicer +slicing +slick +slider +slideshow +sliding +slighted +slighting +slightly +slimness +slimy +slinging +slingshot +slinky +slip +slit +sliver +slobbery +slogan +sloped +sloping +sloppily +sloppy +slot +slouching +slouchy +sludge +slug +slum +slurp +slush +sly +small +smartly +smartness +smasher +smashing +smashup +smell +smelting +smile +smilingly +smirk +smite +smith +smitten +smock +smog +smoked +smokeless +smokiness +smoking +smoky +smolder +smooth +smother +smudge +smudgy +smuggler +smuggling +smugly +smugness +snack +snagged +snaking +snap +snare +snarl +snazzy +sneak +sneer +sneeze +sneezing +snide +sniff +snippet +snipping +snitch +snooper +snooze +snore +snoring +snorkel +snort +snout +snowbird +snowboard +snowbound +snowcap +snowdrift +snowdrop +snowfall +snowfield +snowflake +snowiness +snowless +snowman +snowplow +snowshoe +snowstorm +snowsuit +snowy +snub +snuff +snuggle +snugly +snugness +speak +spearfish +spearhead +spearman +spearmint +species +specimen +specked +speckled +specks +spectacle +spectator +spectrum +speculate +speech +speed +spellbind +speller +spelling +spendable +spender +spending +spent +spew +sphere +spherical +sphinx +spider +spied +spiffy +spill +spilt +spinach +spinal +spindle +spinner +spinning +spinout +spinster +spiny +spiral +spirited +spiritism +spirits +spiritual +splashed +splashing +splashy +splatter +spleen +splendid +splendor +splice +splicing +splinter +splotchy +splurge +spoilage +spoiled +spoiler +spoiling +spoils +spoken +spokesman +sponge +spongy +sponsor +spoof +spookily +spooky +spool +spoon +spore +sporting +sports +sporty +spotless +spotlight +spotted +spotter +spotting +spotty +spousal +spouse +spout +sprain +sprang +sprawl +spray +spree +sprig +spring +sprinkled +sprinkler +sprint +sprite +sprout +spruce +sprung +spry +spud +spur +sputter +spyglass +squabble +squad +squall +squander +squash +squatted +squatter +squatting +squeak +squealer +squealing +squeamish +squeegee +squeeze +squeezing +squid +squiggle +squiggly +squint +squire +squirt +squishier +squishy +stability +stabilize +stable +stack +stadium +staff +stage +staging +stagnant +stagnate +stainable +stained +staining +stainless +stalemate +staleness +stalling +stallion +stamina +stammer +stamp +stand +stank +staple +stapling +starboard +starch +stardom +stardust +starfish +stargazer +staring +stark +starless +starlet +starlight +starlit +starring +starry +starship +starter +starting +startle +startling +startup +starved +starving +stash +state +static +statistic +statue +stature +status +statute +statutory +staunch +stays +steadfast +steadier +steadily +steadying +steam +steed +steep +steerable +steering +steersman +stegosaur +stellar +stem +stench +stencil +step +stereo +sterile +sterility +sterilize +sterling +sternness +sternum +stew +stick +stiffen +stiffly +stiffness +stifle +stifling +stillness +stilt +stimulant +stimulate +stimuli +stimulus +stinger +stingily +stinging +stingray +stingy +stinking +stinky +stipend +stipulate +stir +stitch +stock +stoic +stoke +stole +stomp +stonewall +stoneware +stonework +stoning +stony +stood +stooge +stool +stoop +stoplight +stoppable +stoppage +stopped +stopper +stopping +stopwatch +storable +storage +storeroom +storewide +storm +stout +stove +stowaway +stowing +straddle +straggler +strained +strainer +straining +strangely +stranger +strangle +strategic +strategy +stratus +straw +stray +streak +stream +street +strength +strenuous +strep +stress +stretch +strewn +stricken +strict +stride +strife +strike +striking +strive +striving +strobe +strode +stroller +strongbox +strongly +strongman +struck +structure +strudel +struggle +strum +strung +strut +stubbed +stubble +stubbly +stubborn +stucco +stuck +student +studied +studio +study +stuffed +stuffing +stuffy +stumble +stumbling +stump +stung +stunned +stunner +stunning +stunt +stupor +sturdily +sturdy +styling +stylishly +stylist +stylized +stylus +suave +subarctic +subatomic +subdivide +subdued +subduing +subfloor +subgroup +subheader +subject +sublease +sublet +sublevel +sublime +submarine +submerge +submersed +submitter +subpanel +subpar +subplot +subprime +subscribe +subscript +subsector +subside +subsiding +subsidize +subsidy +subsoil +subsonic +substance +subsystem +subtext +subtitle +subtly +subtotal +subtract +subtype +suburb +subway +subwoofer +subzero +succulent +such +suction +sudden +sudoku +suds +sufferer +suffering +suffice +suffix +suffocate +suffrage +sugar +suggest +suing +suitable +suitably +suitcase +suitor +sulfate +sulfide +sulfite +sulfur +sulk +sullen +sulphate +sulphuric +sultry +superbowl +superglue +superhero +superior +superjet +superman +supermom +supernova +supervise +supper +supplier +supply +support +supremacy +supreme +surcharge +surely +sureness +surface +surfacing +surfboard +surfer +surgery +surgical +surging +surname +surpass +surplus +surprise +surreal +surrender +surrogate +surround +survey +survival +survive +surviving +survivor +sushi +suspect +suspend +suspense +sustained +sustainer +swab +swaddling +swagger +swampland +swan +swapping +swarm +sway +swear +sweat +sweep +swell +swept +swerve +swifter +swiftly +swiftness +swimmable +swimmer +swimming +swimsuit +swimwear +swinger +swinging +swipe +swirl +switch +swivel +swizzle +swooned +swoop +swoosh +swore +sworn +swung +sycamore +sympathy +symphonic +symphony +symptom +synapse +syndrome +synergy +synopses +synopsis +synthesis +synthetic +syrup +system +t-shirt +tabasco +tabby +tableful +tables +tablet +tableware +tabloid +tackiness +tacking +tackle +tackling +tacky +taco +tactful +tactical +tactics +tactile +tactless +tadpole +taekwondo +tag +tainted +take +taking +talcum +talisman +tall +talon +tamale +tameness +tamer +tamper +tank +tanned +tannery +tanning +tantrum +tapeless +tapered +tapering +tapestry +tapioca +tapping +taps +tarantula +target +tarmac +tarnish +tarot +tartar +tartly +tartness +task +tassel +taste +tastiness +tasting +tasty +tattered +tattle +tattling +tattoo +taunt +tavern +thank +that +thaw +theater +theatrics +thee +theft +theme +theology +theorize +thermal +thermos +thesaurus +these +thesis +thespian +thicken +thicket +thickness +thieving +thievish +thigh +thimble +thing +think +thinly +thinner +thinness +thinning +thirstily +thirsting +thirsty +thirteen +thirty +thong +thorn +those +thousand +thrash +thread +threaten +threefold +thrift +thrill +thrive +thriving +throat +throbbing +throng +throttle +throwaway +throwback +thrower +throwing +thud +thumb +thumping +thursday +thus +thwarting +thyself +tiara +tibia +tidal +tidbit +tidiness +tidings +tidy +tiger +tighten +tightly +tightness +tightrope +tightwad +tigress +tile +tiling +till +tilt +timid +timing +timothy +tinderbox +tinfoil +tingle +tingling +tingly +tinker +tinkling +tinsel +tinsmith +tint +tinwork +tiny +tipoff +tipped +tipper +tipping +tiptoeing +tiptop +tiring +tissue +trace +tracing +track +traction +tractor +trade +trading +tradition +traffic +tragedy +trailing +trailside +train +traitor +trance +tranquil +transfer +transform +translate +transpire +transport +transpose +trapdoor +trapeze +trapezoid +trapped +trapper +trapping +traps +trash +travel +traverse +travesty +tray +treachery +treading +treadmill +treason +treat +treble +tree +trekker +tremble +trembling +tremor +trench +trend +trespass +triage +trial +triangle +tribesman +tribunal +tribune +tributary +tribute +triceps +trickery +trickily +tricking +trickle +trickster +tricky +tricolor +tricycle +trident +tried +trifle +trifocals +trillion +trilogy +trimester +trimmer +trimming +trimness +trinity +trio +tripod +tripping +triumph +trivial +trodden +trolling +trombone +trophy +tropical +tropics +trouble +troubling +trough +trousers +trout +trowel +truce +truck +truffle +trump +trunks +trustable +trustee +trustful +trusting +trustless +truth +try +tubby +tubeless +tubular +tucking +tuesday +tug +tuition +tulip +tumble +tumbling +tummy +turban +turbine +turbofan +turbojet +turbulent +turf +turkey +turmoil +turret +turtle +tusk +tutor +tutu +tux +tweak +tweed +tweet +tweezers +twelve +twentieth +twenty +twerp +twice +twiddle +twiddling +twig +twilight +twine +twins +twirl +twistable +twisted +twister +twisting +twisty +twitch +twitter +tycoon +tying +tyke +udder +ultimate +ultimatum +ultra +umbilical +umbrella +umpire +unabashed +unable +unadorned +unadvised +unafraid +unaired +unaligned +unaltered +unarmored +unashamed +unaudited +unawake +unaware +unbaked +unbalance +unbeaten +unbend +unbent +unbiased +unbitten +unblended +unblessed +unblock +unbolted +unbounded +unboxed +unbraided +unbridle +unbroken +unbuckled +unbundle +unburned +unbutton +uncanny +uncapped +uncaring +uncertain +unchain +unchanged +uncharted +uncheck +uncivil +unclad +unclaimed +unclamped +unclasp +uncle +unclip +uncloak +unclog +unclothed +uncoated +uncoiled +uncolored +uncombed +uncommon +uncooked +uncork +uncorrupt +uncounted +uncouple +uncouth +uncover +uncross +uncrown +uncrushed +uncured +uncurious +uncurled +uncut +undamaged +undated +undaunted +undead +undecided +undefined +underage +underarm +undercoat +undercook +undercut +underdog +underdone +underfed +underfeed +underfoot +undergo +undergrad +underhand +underline +underling +undermine +undermost +underpaid +underpass +underpay +underrate +undertake +undertone +undertook +undertow +underuse +underwear +underwent +underwire +undesired +undiluted +undivided +undocked +undoing +undone +undrafted +undress +undrilled +undusted +undying +unearned +unearth +unease +uneasily +uneasy +uneatable +uneaten +unedited +unelected +unending +unengaged +unenvied +unequal +unethical +uneven +unexpired +unexposed +unfailing +unfair +unfasten +unfazed +unfeeling +unfiled +unfilled +unfitted +unfitting +unfixable +unfixed +unflawed +unfocused +unfold +unfounded +unframed +unfreeze +unfrosted +unfrozen +unfunded +unglazed +ungloved +unglue +ungodly +ungraded +ungreased +unguarded +unguided +unhappily +unhappy +unharmed +unhealthy +unheard +unhearing +unheated +unhelpful +unhidden +unhinge +unhitched +unholy +unhook +unicorn +unicycle +unified +unifier +uniformed +uniformly +unify +unimpeded +uninjured +uninstall +uninsured +uninvited +union +uniquely +unisexual +unison +unissued +unit +universal +universe +unjustly +unkempt +unkind +unknotted +unknowing +unknown +unlaced +unlatch +unlawful +unleaded +unlearned +unleash +unless +unleveled +unlighted +unlikable +unlimited +unlined +unlinked +unlisted +unlit +unlivable +unloaded +unloader +unlocked +unlocking +unlovable +unloved +unlovely +unloving +unluckily +unlucky +unmade +unmanaged +unmanned +unmapped +unmarked +unmasked +unmasking +unmatched +unmindful +unmixable +unmixed +unmolded +unmoral +unmovable +unmoved +unmoving +unnamable +unnamed +unnatural +unneeded +unnerve +unnerving +unnoticed +unopened +unopposed +unpack +unpadded +unpaid +unpainted +unpaired +unpaved +unpeeled +unpicked +unpiloted +unpinned +unplanned +unplanted +unpleased +unpledged +unplowed +unplug +unpopular +unproven +unquote +unranked +unrated +unraveled +unreached +unread +unreal +unreeling +unrefined +unrelated +unrented +unrest +unretired +unrevised +unrigged +unripe +unrivaled +unroasted +unrobed +unroll +unruffled +unruly +unrushed +unsaddle +unsafe +unsaid +unsalted +unsaved +unsavory +unscathed +unscented +unscrew +unsealed +unseated +unsecured +unseeing +unseemly +unseen +unselect +unselfish +unsent +unsettled +unshackle +unshaken +unshaved +unshaven +unsheathe +unshipped +unsightly +unsigned +unskilled +unsliced +unsmooth +unsnap +unsocial +unsoiled +unsold +unsolved +unsorted +unspoiled +unspoken +unstable +unstaffed +unstamped +unsteady +unsterile +unstirred +unstitch +unstopped +unstuck +unstuffed +unstylish +unsubtle +unsubtly +unsuited +unsure +unsworn +untagged +untainted +untaken +untamed +untangled +untapped +untaxed +unthawed +unthread +untidy +untie +until +untimed +untimely +untitled +untoasted +untold +untouched +untracked +untrained +untreated +untried +untrimmed +untrue +untruth +unturned +untwist +untying +unusable +unused +unusual +unvalued +unvaried +unvarying +unveiled +unveiling +unvented +unviable +unvisited +unvocal +unwanted +unwarlike +unwary +unwashed +unwatched +unweave +unwed +unwelcome +unwell +unwieldy +unwilling +unwind +unwired +unwitting +unwomanly +unworldly +unworn +unworried +unworthy +unwound +unwoven +unwrapped +unwritten +unzip +upbeat +upchuck +upcoming +upcountry +update +upfront +upgrade +upheaval +upheld +uphill +uphold +uplifted +uplifting +upload +upon +upper +upright +uprising +upriver +uproar +uproot +upscale +upside +upstage +upstairs +upstart +upstate +upstream +upstroke +upswing +uptake +uptight +uptown +upturned +upward +upwind +uranium +urban +urchin +urethane +urgency +urgent +urging +urologist +urology +usable +usage +useable +used +uselessly +user +usher +usual +utensil +utility +utilize +utmost +utopia +utter +vacancy +vacant +vacate +vacation +vagabond +vagrancy +vagrantly +vaguely +vagueness +valiant +valid +valium +valley +valuables +value +vanilla +vanish +vanity +vanquish +vantage +vaporizer +variable +variably +varied +variety +various +varmint +varnish +varsity +varying +vascular +vaseline +vastly +vastness +veal +vegan +veggie +vehicular +velcro +velocity +velvet +vendetta +vending +vendor +veneering +vengeful +venomous +ventricle +venture +venue +venus +verbalize +verbally +verbose +verdict +verify +verse +version +versus +vertebrae +vertical +vertigo +very +vessel +vest +veteran +veto +vexingly +viability +viable +vibes +vice +vicinity +victory +video +viewable +viewer +viewing +viewless +viewpoint +vigorous +village +villain +vindicate +vineyard +vintage +violate +violation +violator +violet +violin +viper +viral +virtual +virtuous +virus +visa +viscosity +viscous +viselike +visible +visibly +vision +visiting +visitor +visor +vista +vitality +vitalize +vitally +vitamins +vivacious +vividly +vividness +vixen +vocalist +vocalize +vocally +vocation +voice +voicing +void +volatile +volley +voltage +volumes +voter +voting +voucher +vowed +vowel +voyage +wackiness +wad +wafer +waffle +waged +wager +wages +waggle +wagon +wake +waking +walk +walmart +walnut +walrus +waltz +wand +wannabe +wanted +wanting +wasabi +washable +washbasin +washboard +washbowl +washcloth +washday +washed +washer +washhouse +washing +washout +washroom +washstand +washtub +wasp +wasting +watch +water +waviness +waving +wavy +whacking +whacky +wham +wharf +wheat +whenever +whiff +whimsical +whinny +whiny +whisking +whoever +whole +whomever +whoopee +whooping +whoops +why +wick +widely +widen +widget +widow +width +wieldable +wielder +wife +wifi +wikipedia +wildcard +wildcat +wilder +wildfire +wildfowl +wildland +wildlife +wildly +wildness +willed +willfully +willing +willow +willpower +wilt +wimp +wince +wincing +wind +wing +winking +winner +winnings +winter +wipe +wired +wireless +wiring +wiry +wisdom +wise +wish +wisplike +wispy +wistful +wizard +wobble +wobbling +wobbly +wok +wolf +wolverine +womanhood +womankind +womanless +womanlike +womanly +womb +woof +wooing +wool +woozy +word +work +worried +worrier +worrisome +worry +worsening +worshiper +worst +wound +woven +wow +wrangle +wrath +wreath +wreckage +wrecker +wrecking +wrench +wriggle +wriggly +wrinkle +wrinkly +wrist +writing +written +wrongdoer +wronged +wrongful +wrongly +wrongness +wrought +xbox +xerox +yahoo +yam +yanking +yapping +yard +yarn +yeah +yearbook +yearling +yearly +yearning +yeast +yelling +yelp +yen +yesterday +yiddish +yield +yin +yippee +yo-yo +yodel +yoga +yogurt +yonder +yoyo +yummy +zap +zealous +zebra +zen +zeppelin +zero +zestfully +zesty +zigzagged +zipfile +zipping +zippy +zips +zit +zodiac +zombie +zone +zoning +zookeeper +zoologist +zoology +zoom \ No newline at end of file diff --git a/common/src/commonMain/resources/MR/fonts/AtkinsonHyperlegible-Bold.ttf b/common/src/commonMain/resources/MR/fonts/AtkinsonHyperlegible-Bold.ttf new file mode 100644 index 00000000..c72b4889 Binary files /dev/null and b/common/src/commonMain/resources/MR/fonts/AtkinsonHyperlegible-Bold.ttf differ diff --git a/common/src/commonMain/resources/MR/fonts/AtkinsonHyperlegible-BoldItalic.ttf b/common/src/commonMain/resources/MR/fonts/AtkinsonHyperlegible-BoldItalic.ttf new file mode 100644 index 00000000..ff966b11 Binary files /dev/null and b/common/src/commonMain/resources/MR/fonts/AtkinsonHyperlegible-BoldItalic.ttf differ diff --git a/common/src/commonMain/resources/MR/fonts/AtkinsonHyperlegible-Italic.ttf b/common/src/commonMain/resources/MR/fonts/AtkinsonHyperlegible-Italic.ttf new file mode 100644 index 00000000..1cf113a0 Binary files /dev/null and b/common/src/commonMain/resources/MR/fonts/AtkinsonHyperlegible-Italic.ttf differ diff --git a/common/src/commonMain/resources/MR/fonts/AtkinsonHyperlegible-Regular.ttf b/common/src/commonMain/resources/MR/fonts/AtkinsonHyperlegible-Regular.ttf new file mode 100644 index 00000000..23614a4d Binary files /dev/null and b/common/src/commonMain/resources/MR/fonts/AtkinsonHyperlegible-Regular.ttf differ diff --git a/common/src/commonMain/resources/MR/fonts/NotoSans-Black.ttf b/common/src/commonMain/resources/MR/fonts/NotoSans-Black.ttf new file mode 100644 index 00000000..05771e5d Binary files /dev/null and b/common/src/commonMain/resources/MR/fonts/NotoSans-Black.ttf differ diff --git a/common/src/commonMain/resources/MR/fonts/NotoSans-BlackItalic.ttf b/common/src/commonMain/resources/MR/fonts/NotoSans-BlackItalic.ttf new file mode 100644 index 00000000..06bb3d69 Binary files /dev/null and b/common/src/commonMain/resources/MR/fonts/NotoSans-BlackItalic.ttf differ diff --git a/common/src/commonMain/resources/MR/fonts/NotoSans-Bold.ttf b/common/src/commonMain/resources/MR/fonts/NotoSans-Bold.ttf new file mode 100644 index 00000000..0d190683 Binary files /dev/null and b/common/src/commonMain/resources/MR/fonts/NotoSans-Bold.ttf differ diff --git a/common/src/commonMain/resources/MR/fonts/NotoSans-BoldItalic.ttf b/common/src/commonMain/resources/MR/fonts/NotoSans-BoldItalic.ttf new file mode 100644 index 00000000..e17b7799 Binary files /dev/null and b/common/src/commonMain/resources/MR/fonts/NotoSans-BoldItalic.ttf differ diff --git a/common/src/commonMain/resources/MR/fonts/NotoSans-ExtraBold.ttf b/common/src/commonMain/resources/MR/fonts/NotoSans-ExtraBold.ttf new file mode 100644 index 00000000..a74c69ab Binary files /dev/null and b/common/src/commonMain/resources/MR/fonts/NotoSans-ExtraBold.ttf differ diff --git a/common/src/commonMain/resources/MR/fonts/NotoSans-ExtraBoldItalic.ttf b/common/src/commonMain/resources/MR/fonts/NotoSans-ExtraBoldItalic.ttf new file mode 100644 index 00000000..c12173de Binary files /dev/null and b/common/src/commonMain/resources/MR/fonts/NotoSans-ExtraBoldItalic.ttf differ diff --git a/common/src/commonMain/resources/MR/fonts/NotoSans-ExtraLight.ttf b/common/src/commonMain/resources/MR/fonts/NotoSans-ExtraLight.ttf new file mode 100644 index 00000000..13c4bbc9 Binary files /dev/null and b/common/src/commonMain/resources/MR/fonts/NotoSans-ExtraLight.ttf differ diff --git a/common/src/commonMain/resources/MR/fonts/NotoSans-ExtraLightItalic.ttf b/common/src/commonMain/resources/MR/fonts/NotoSans-ExtraLightItalic.ttf new file mode 100644 index 00000000..b3f05fe9 Binary files /dev/null and b/common/src/commonMain/resources/MR/fonts/NotoSans-ExtraLightItalic.ttf differ diff --git a/common/src/commonMain/resources/MR/fonts/NotoSans-Italic.ttf b/common/src/commonMain/resources/MR/fonts/NotoSans-Italic.ttf new file mode 100644 index 00000000..195582aa Binary files /dev/null and b/common/src/commonMain/resources/MR/fonts/NotoSans-Italic.ttf differ diff --git a/common/src/commonMain/resources/MR/fonts/NotoSans-Light.ttf b/common/src/commonMain/resources/MR/fonts/NotoSans-Light.ttf new file mode 100644 index 00000000..8fde6628 Binary files /dev/null and b/common/src/commonMain/resources/MR/fonts/NotoSans-Light.ttf differ diff --git a/common/src/commonMain/resources/MR/fonts/NotoSans-LightItalic.ttf b/common/src/commonMain/resources/MR/fonts/NotoSans-LightItalic.ttf new file mode 100644 index 00000000..87e97be9 Binary files /dev/null and b/common/src/commonMain/resources/MR/fonts/NotoSans-LightItalic.ttf differ diff --git a/common/src/commonMain/resources/MR/fonts/NotoSans-Medium.ttf b/common/src/commonMain/resources/MR/fonts/NotoSans-Medium.ttf new file mode 100644 index 00000000..faf167c9 Binary files /dev/null and b/common/src/commonMain/resources/MR/fonts/NotoSans-Medium.ttf differ diff --git a/common/src/commonMain/resources/MR/fonts/NotoSans-MediumItalic.ttf b/common/src/commonMain/resources/MR/fonts/NotoSans-MediumItalic.ttf new file mode 100644 index 00000000..05a617e2 Binary files /dev/null and b/common/src/commonMain/resources/MR/fonts/NotoSans-MediumItalic.ttf differ diff --git a/common/src/commonMain/resources/MR/fonts/NotoSans-Regular.ttf b/common/src/commonMain/resources/MR/fonts/NotoSans-Regular.ttf new file mode 100644 index 00000000..7552fbe8 Binary files /dev/null and b/common/src/commonMain/resources/MR/fonts/NotoSans-Regular.ttf differ diff --git a/common/src/commonMain/resources/MR/fonts/NotoSans-SemiBold.ttf b/common/src/commonMain/resources/MR/fonts/NotoSans-SemiBold.ttf new file mode 100644 index 00000000..b460754c Binary files /dev/null and b/common/src/commonMain/resources/MR/fonts/NotoSans-SemiBold.ttf differ diff --git a/common/src/commonMain/resources/MR/fonts/NotoSans-SemiBoldItalic.ttf b/common/src/commonMain/resources/MR/fonts/NotoSans-SemiBoldItalic.ttf new file mode 100644 index 00000000..aa58fcb0 Binary files /dev/null and b/common/src/commonMain/resources/MR/fonts/NotoSans-SemiBoldItalic.ttf differ diff --git a/common/src/commonMain/resources/MR/fonts/NotoSans-Thin.ttf b/common/src/commonMain/resources/MR/fonts/NotoSans-Thin.ttf new file mode 100644 index 00000000..b5af0444 Binary files /dev/null and b/common/src/commonMain/resources/MR/fonts/NotoSans-Thin.ttf differ diff --git a/common/src/commonMain/resources/MR/fonts/NotoSans-ThinItalic.ttf b/common/src/commonMain/resources/MR/fonts/NotoSans-ThinItalic.ttf new file mode 100644 index 00000000..000bcb60 Binary files /dev/null and b/common/src/commonMain/resources/MR/fonts/NotoSans-ThinItalic.ttf differ diff --git a/common/src/commonMain/resources/MR/fonts/NotoSansMono.ttf b/common/src/commonMain/resources/MR/fonts/NotoSansMono.ttf new file mode 100644 index 00000000..49f5e26f Binary files /dev/null and b/common/src/commonMain/resources/MR/fonts/NotoSansMono.ttf differ diff --git a/common/src/commonMain/resources/MR/fonts/Roboto-Black.ttf b/common/src/commonMain/resources/MR/fonts/Roboto-Black.ttf new file mode 100644 index 00000000..0112e7da Binary files /dev/null and b/common/src/commonMain/resources/MR/fonts/Roboto-Black.ttf differ diff --git a/common/src/commonMain/resources/MR/fonts/Roboto-BlackItalic.ttf b/common/src/commonMain/resources/MR/fonts/Roboto-BlackItalic.ttf new file mode 100644 index 00000000..b2c6aca5 Binary files /dev/null and b/common/src/commonMain/resources/MR/fonts/Roboto-BlackItalic.ttf differ diff --git a/common/src/commonMain/resources/MR/fonts/Roboto-Bold.ttf b/common/src/commonMain/resources/MR/fonts/Roboto-Bold.ttf new file mode 100644 index 00000000..43da14d8 Binary files /dev/null and b/common/src/commonMain/resources/MR/fonts/Roboto-Bold.ttf differ diff --git a/common/src/commonMain/resources/MR/fonts/Roboto-BoldItalic.ttf b/common/src/commonMain/resources/MR/fonts/Roboto-BoldItalic.ttf new file mode 100644 index 00000000..bcfdab43 Binary files /dev/null and b/common/src/commonMain/resources/MR/fonts/Roboto-BoldItalic.ttf differ diff --git a/common/src/commonMain/resources/MR/fonts/Roboto-Italic.ttf b/common/src/commonMain/resources/MR/fonts/Roboto-Italic.ttf new file mode 100644 index 00000000..1b5eaa36 Binary files /dev/null and b/common/src/commonMain/resources/MR/fonts/Roboto-Italic.ttf differ diff --git a/common/src/commonMain/resources/MR/fonts/Roboto-Light.ttf b/common/src/commonMain/resources/MR/fonts/Roboto-Light.ttf new file mode 100644 index 00000000..e7307e72 Binary files /dev/null and b/common/src/commonMain/resources/MR/fonts/Roboto-Light.ttf differ diff --git a/common/src/commonMain/resources/MR/fonts/Roboto-LightItalic.ttf b/common/src/commonMain/resources/MR/fonts/Roboto-LightItalic.ttf new file mode 100644 index 00000000..2d277afb Binary files /dev/null and b/common/src/commonMain/resources/MR/fonts/Roboto-LightItalic.ttf differ diff --git a/common/src/commonMain/resources/MR/fonts/Roboto-Medium.ttf b/common/src/commonMain/resources/MR/fonts/Roboto-Medium.ttf new file mode 100644 index 00000000..ac0f908b Binary files /dev/null and b/common/src/commonMain/resources/MR/fonts/Roboto-Medium.ttf differ diff --git a/common/src/commonMain/resources/MR/fonts/Roboto-MediumItalic.ttf b/common/src/commonMain/resources/MR/fonts/Roboto-MediumItalic.ttf new file mode 100644 index 00000000..fc36a478 Binary files /dev/null and b/common/src/commonMain/resources/MR/fonts/Roboto-MediumItalic.ttf differ diff --git a/common/src/commonMain/resources/MR/fonts/Roboto-Regular.ttf b/common/src/commonMain/resources/MR/fonts/Roboto-Regular.ttf new file mode 100644 index 00000000..ddf4bfac Binary files /dev/null and b/common/src/commonMain/resources/MR/fonts/Roboto-Regular.ttf differ diff --git a/common/src/commonMain/resources/MR/fonts/Roboto-Thin.ttf b/common/src/commonMain/resources/MR/fonts/Roboto-Thin.ttf new file mode 100644 index 00000000..2e0dee6a Binary files /dev/null and b/common/src/commonMain/resources/MR/fonts/Roboto-Thin.ttf differ diff --git a/common/src/commonMain/resources/MR/fonts/Roboto-ThinItalic.ttf b/common/src/commonMain/resources/MR/fonts/Roboto-ThinItalic.ttf new file mode 100644 index 00000000..084f9c0f Binary files /dev/null and b/common/src/commonMain/resources/MR/fonts/Roboto-ThinItalic.ttf differ diff --git a/common/src/commonMain/resources/MR/fonts/RobotoMono.ttf b/common/src/commonMain/resources/MR/fonts/RobotoMono.ttf new file mode 100644 index 00000000..1d5371e6 Binary files /dev/null and b/common/src/commonMain/resources/MR/fonts/RobotoMono.ttf differ diff --git a/common/src/commonMain/resources/MR/fr-rFR/plurals.xml b/common/src/commonMain/resources/MR/fr-rFR/plurals.xml new file mode 100644 index 00000000..5f2db8ad --- /dev/null +++ b/common/src/commonMain/resources/MR/fr-rFR/plurals.xml @@ -0,0 +1,2 @@ + + diff --git a/common/src/commonMain/resources/MR/fr-rFR/strings.xml b/common/src/commonMain/resources/MR/fr-rFR/strings.xml new file mode 100644 index 00000000..214f4486 --- /dev/null +++ b/common/src/commonMain/resources/MR/fr-rFR/strings.xml @@ -0,0 +1,868 @@ + + + OK + Close + Yes + No + + Name + Account name + Username + Password + App password + Current password + New password + Email + Verified + Not verified + Email visibility + Public URL + URL + + Access count + Learn more + Phone number + Passport number + License number + Card number + No card number + Brand + Security code + Valid from + Valid to + Card expiry month + Card expiry year + Cardholder name + Valid from + Expiry date + Company + Sync + + Hidden + + Visible + + Empty + + SSN + City + State + Info + Cancel + Continue + Country + Address + Postal code + Pull to search + Save + URI + URIs + Note + Notes + Attachments + No attachments + Expiring soon + Incomplete data + This item is missing some of the important information. + Item + Items + %1$s items + All items + No items + No folder + New folder + Folder + Folders + No folders + No collection + Collection + Collections + No collections + My vault + Organization + Organizations + No organizations + Miscellaneous + Add integration + Account + Accounts + No accounts + No account + Type + Options + Send + Reset + Length + Security + Contact info + Title + First name + Middle name + Last name + Full name + Address line 1 + Address line 2 + Address line 3 + Rename + Select type + Autofill + Passkey + Create a passkey + Unlock Keyguard + Confirming auth request… + Passkeys + + Signature counter + + Relying party + + Discoverable + Username + Display name + API key + Domain + Edit + Delete + Remove + Remove from the history + Reused password + Reused passwords + One-time password + Authenticator key + Use + Save passkey + Passkey available + Two-factor authentication available + Custom + Follow system settings + + Coming soon + Powered by + Verification code + Re-send verification code + Requested a verification email + Web vault + Launch Web vault + + Remember me + + Trash + + Download + Downloads + No downloads + No duplicates + Encryption + + Key + Hash + Salt + 256-bit AES + Random %1$d-bits of data + None + Text + Linked apps + Linked URIs + Custom fields + Reveal a secure note + Hide a secure note + Master password hint + Fingerprint phrase + What is a fingerprint? + Bitwarden premium + Unofficial Bitwarden server + Last synced at %1$s + Change name + Change color + Change master password hint + Sign out + Sign in + Visit Web vault to verify your email address + Upgrade your account to a premium membership and unlock some great additional features + Two-factor authentication + Require login verification with another device such as a security key, authenticator app, SMS or email + Active + Items + Log out + Log out? + All of the not synchronized changes will be lost! + Change name + Change names + Delete folder? + Delete folders? + This item(s) will be deleted immediately. You can not undo this action. + Recently opened + Often opened + View details + Save to + Add to favourites + Remove from favourites + Enable auth re-prompt + Disable auth re-prompt + Edit + Merge into… + Copy to… + Move to folder + Change name + Change names + Add password + Add passwords + Change password + Change passwords + View password history + Trash + Restore + Delete forever + Move associated items to trash + Open with… + Send with… + Open in a file manager + Delete local file + View parent item + Always show keyboard + Sync vault + Lock vault + Rename folder + Check the email in known data breaches + Check the username in known data breaches + Check the password in known data breaches + Check the website in known data breaches + Launch app + Launch website + Launch docs + Launch browser + Launch main page + Launch Play store + Launch with %1$s + Launch with… + How to delete an account? + Unsecure + Match app + Match detection + Base domain + Match resources by top-level and second-level domain. + Host + Match resources by hostname and (if specified) port. + Starts with + Match resources when the detected resource starts with the URI. + Exact + Match resources when the detected resource exactly matches the URI. + Regular expression + Match resources by regular expression. Advanced option. + Never + Ignore URI during auto-fill item search. + %1$s linked to the password + %1$s linked to the username + %1$s linked to the cardholder name + %1$s linked to the expiration month + %1$s linked to the expiration year + %1$s linked to the card code + %1$s linked to the card brand + %1$s linked to the card number + %1$s linked to the title + %1$s linked to the middle name + %1$s linked to the address line (1) + %1$s linked to the address line (2) + %1$s linked to the address line (3) + %1$s linked to the city + %1$s linked to the state + %1$s linked to the postal code + %1$s linked to the country + %1$s linked to the company + %1$s linked to the email + %1$s linked to the phone number + %1$s linked to the SSN + %1$s linked to the username + %1$s linked to the passport number + %1$s linked to the license number + %1$s linked to the first name + %1$s linked to the last name + %1$s linked to the full name + %1$s linked to an unknown field + Share with… + %1$d selected + Copy + Copy value + Copy URL + Copy URI + Copy package name + Copy password + Copy username + Copy email + Copy phone number + Copy passport number + Copy license number + Copy card number + Copy cardholder name + Copy expiration year + Copy expiration month + Copy CVV code + Copy one-time password + Copy secret key + Unlock Keyguard + Open Keyguard + January + February + March + April + May + June + July + August + September + October + November + December + Move up + Move down + Remove + Remove an item? + Add more + FIDO2 WebAuthn + Authenticate WebAuthn + Return to app + + Must not be empty + + Must not be blank + Must be custom domain + Must contain only US-ASCII characters + Must be at least %1$d symbols long + Must be %1$d symbols long + Invalid domain + Invalid email + Invalid URL + Invalid URI + Invalid card number + Incorrect password + Failed to generate OTP code + Failed to create a passkey + Failed to authorize a request + + Barcode + Show as Barcode + Copy this authenticator to another device by scanning the QR code. + + Date picker + + Color picker + + How to delete an account? + A collection of info of how to delete your account from web services + + Easy + + Medium + + Hard + + Limited availability + + Impossible + Send email + Search websites + No instructions + Two-factor authentication + List of websites with two-factor authentication support + Search websites + Passkeys + List of websites with passkeys support + Search websites + + Data breach + Breached account data can provide malicious actors with access to sensitive personal and financial information, potentially leading to identity theft, financial fraud, and other forms of cybercrime. + No breaches found + Breached accounts found + Breaches + Occurred on %1$s + Reported on %1$s + Failed to check data breaches. You might currently be offline + Data breach + A password that is found in the data breaches takes significantly less time to break and should never be used. + Password is compromised + The password has been identified in known data breaches. Please change it immediately to protect your online security + No breaches found + Failed to check data breaches. You might currently be offline + + Large Type + Show in Large Type + Show in Large Type and Lock vault + App Picker + Search installed apps + System app + No apps + Choose a folder + Create a new folder: + + This organization will have an ownership of the copy. You will not be the direct owner. + Email forwarders + Email forwarders + Delete email forwarder? + Delete email forwarders? + Email forwarder integration + No email forwarders + Create an encrypted vault where the local data will be stored. + App password + Biometric authentication + Create a vault + Send crash reports + Create a vault + Erase app data + Close the app and erase all local app data + The vault is locked. Enter your app password to continue. + Unlock + + Unlock a vault + + Use biometric authentication to unlock the vault. + User verification is required. Enter your app password to continue. + Verify + Sync status + Up to date + Pending + Syncing + Sync failed + New item + Edit item + Style text with %1$s or %2$s and more. Limited Markdown syntax is supported. + italic + bold + Render preview + Auth re-prompt + Ask to authenticate again when you view or autofill a cipher + Add Bitwarden account + We are not affiliated, associated, authorized, endorsed by, or in any way officially connected with the Bitwarden, Inc., or any of its subsidiaries or its affiliates. + + To pass the captcha verification on an unofficial Bitwarden client, you must specify the client secret. To find it, visit Web vault / Settings / API Key. + + Client secret + Sign in + Region + United States + Europe + Custom (self-hosted) + HTTP headers + HTTP header + You can add custom HTTP headers that will be sent with every request to the server. + Key + Value + Add more + Server URL + Specify the base URL of your self-hosted Bitwarden installation. + Custom environment + You can specify the base URL of each service independently. + Web Vault Server URL + API Server URL + Icons Server URL + Identity Server URL + Verification + This authentication method is not supported yet. + Enter the verification code from your authenticator app. + Enter the verification code that was emailed to %1$s. + Enter the YubiKey authentication code manually. Place the cursor on the field below and trigger the YubiKey. + Authenticator + Duo (Organization) + FIDO2 Web Authentication + Email + FIDO U2F + Connect YubiKey via USB + Requires USB OTG support. + Touch the gold sensor on your YubiKey now. + Hold your YubiKey flat against the back of your device + Requires NFC support. + Failed to read YubiKey + Using FIDO2 WebAuthn requires using the Bitwarden Web vault version %1$s or higher. On older versions the authentication result will incorrectly be forwarded to the official Bitwarden app. + Confirm access + This data is protected, to continue please enter your app password. + + Confirm access + + Use biometric authentication to confirm your access and unlock this data. + Vault + Send + Generator + Watchtower + Settings + Locked due to inactivity + Text + File + Login + Card + Identity + Note + Passkey + Text + Boolean + Linked + + Pwned + Very strong + Strong + Good + Fair + Weak + Very strong passwords + Strong passwords + Good passwords + Fair passwords + Weak passwords + Filter + No filters available + Sort by + No sorting available + Title + Alphabetically + Reverse Alphabetically + Access count + Largest First + Smallest First + Modification date + Newest First + Oldest First + Expiration date + Newest First + Oldest First + Deletion date + Newest First + Oldest First + Password + Alphabetically + Reverse Alphabetically + Password modification date + Newest First + Oldest First + Password strength + Weakest First + Strongest First + Search vault + New item + There are no suggested items available for this context + + Security code + Saved to %1$s at %2$s + Password last modified at %1$s + Passkey created at %1$s + Last modified at %1$s + Created at %1$s + Deleted at %1$s + Expired at %1$s + Expiration scheduled at %1$s + Deleting scheduled at %1$s + + Call + + Text + + Email + + Directions + Sends + Search sends + New item + A password is required to access this share + Generator + Username generator + Password generator + Generate + Regenerate + Passphrase + Random passphrases provide the best combination of memorability and security. + Delimiter + Capitalize + Number + Username + Delimiter + Custom word + Capitalize + Number + Random symbols + A strong password has at least %1$d characters, uppercase & lowercase letters, digits and symbols. + Digits + Symbols + Uppercase letters + Lowercase letters + + Exclude similar symbols + + Exclude ambiguous symbols + Catch-all email + A catch-all email address provides users the option to receive all mail sent to their domain, even if they are sent to an email address that has not been set up for their domain. Ensure that your email hosting supports this feature before using it. + + Domain + Plus addressing email + Plus addressing means any email sent to %1$s is still sent to your account. This means you can have a lot of variations on your email address to give out to different people, sites, or mailing lists. Ensure that your email hosting supports this feature before using it. + Email + Subdomain addressing email + Subdomain addressing means any email sent to %1$s is still sent to your account. This means you can have a lot of variations on your email address to give out to different people, sites, or mailing lists. Ensure that your email hosting supports this feature before using it. + Email + Forwarded email alias + Create new login with the password + Create new login with the username + Password history + Show tips + Generator history + Clear history + Clear generator history? + This will remove all items from the history. + Password history + Clear history + Clear password history? + This will remove all passwords from the history. + Watchtower + Password strength + Security + Maintenance + Pwned Passwords + Passwords that have been exposed in data breaches. Such passwords should be changed immediately. + Reused Passwords + Don\'t use the same password on multiple websites. Generate unique passwords to improve security. + Vulnerable Accounts + Sites that were affected by a data breach since you last changed a password. Change your password to keep your account safe. + Unsecure Websites + Change the URLs that use HTTP protocol to use HTTPS protocol, as the latter utilizes the most advanced encryption available. + Inactive two-factor authentication + Sites that have two-factor authentication available but you haven\'t set it up yet. + Available Passkeys + Sites that have passkey available but you haven\'t set it up yet. It\'s simpler and more secure then a password. + Incomplete Items + Helps you identify missing or incomplete data in your vault. This can refer to identities with missing names or logins without usernames. + Expiring Items + Items that have expired or are expiring soon. + Duplicate URIs + Items that have one or more URIs that cover the same websites after applying the match detection. + Trashed Items + Items that have been moved into the trash. Having too many items in the trash may slow down operations with your vault. + Empty Folders + Folders that do not have any items in them. + Duplicate Items + Helps you identify and eliminate duplicate items in your vault. + Compromised Accounts + Check data breaches by a username or email address. + Change app password + Change password + Biometric authentication + + Change app password + App password never gets stored on the device nor sent over the network. It is used to generate a secret key that is used to encrypt the local data. + Unless you suspect unauthorized access or discover a malware on the device, there is no need to change the password if it is a strong, unique password. + Contact us + Your message + Use English to ensure that your feedback doesn\'t get misunderstood. + We appreciate the time that you spend sending us a message. Your message goes directly to us and we use it to troubleshoot issues, make product improvements and fix problems. While we may not reply to every report, we\'re reviewing and working on improvements & fixing issues as fast as we can. + Accounts + Add account + Team behind the app + I\'m a Software engineer from Ukraine. I specialize on app design and development. + Follow me + Search + Settings + Search settings + Appearance + Autofill + Development + Experimental + Settings + Notifications + Other + Permissions + Security + Keyguard Premium + Watchtower + Open-source licenses + Accounts + Add & view accounts + Autofill + Android Autofill & Credential services + Security + Biometrics, change password, vault timeout + Keyguard Premium + Unlock features & support app development + Watchtower + Compromised services, vulnerable passwords + Notifications + Alerts + Appearance + Language, theme and animations + Development + Test settings for development + Other + Community websites, app info + Show labels on navigation buttons + App version + App build date + Team behind the app + Reddit community + GitHub project + Crowdin project + Open-source licenses + Download APK file + Load App icons + Load Website icons + Queuing website icon might leak the website address to internet provider + Rich text formatting + Use Markdown to format notes + Language + Suggest translation + Font + Rate on Play Store + Tint color + Theme + Use contrast black theme + Open links in external browser + Conceal fields + Conceal sensitive info, such as passwords and credit card numbers + + Crash + Credential provider + Passkeys, passwords and data services + Privacy policy + Contact us + Experimental + Change app password + Require app password + In addition to your regular security settings, your app password will be required after this time or when biometry settings are changed + Immediately + Never + Send crash reports + Transition animation + Erase app data + Close the app and erase all local app data + Allow screenshots + Show the content of the app when switching between recent apps and allow capturing a screen + Hide the content of the app when switching between recent apps and forbid capturing a screen + Data safety + Lock vault + Lock after a reboot + Lock the vault after a device reboot + Lock when screen turns off + Lock the vault after a few seconds once the screen is off + Lock after a delay + Immediately + Never + Persist vault key on a disk + Vault key is persisted on an internal storage + Vault is locked after the app is unloaded from the memory + Storing a vault key on a disk is a security risk. If the device\'s internal storage is compromised, the attacker will gain access to the local vault data. + Permissions + Features overview + Biometric unlock + + Biometric unlock + Keep the screen on while viewing items + Autofill service + Use the Android Autofill Framework to assist in filling login information into other apps on the device + Auto-copy one-time passwords + When filling a login information, automatically copy one-time passwords + Inline suggestions + Embeds autofill suggestions directly into compatible keyboards + Manual selection + Displays an option to manually search a vault for an entry + Respect Autofill disabled flag + Disables autofill for a browser field that has autofill disabled flag set + Note that some websites are notorious for disabling autofill for a password field as well as some browsers are notorious for ignoring the autofill disabled flag + Ask to save data + Asks for updating the vault when filling of a form has completed + Auto-save app or website info + Automatically clear clipboard + Immediately + Never + One-time password notification duration + When you autofill a login item that has a one-time password, the notification with verification code will popup for at least the defined duration + Never + About Keyguard membership + The Premium unlocks extra features and funds a development of the app. Thank you for supporting us! ❤️ + Subscriptions + Products + Failed to load a list of subscriptions + Failed to load a list of products + Active + Will not renew + Manage on Play Store + Post notifications + Used to post downloading notifications + Camera + Used to scan QR codes + Allow two panel layout in landscape mode + Allow two panel layout in portrait mode + Dark + Light + Disabled + Dynamic + Crossfade + Developed specifically to increase legibility for readers with low vision, and to improve comprehension + Features Overview + Keyguard Premium + Multiple Accounts + Sign-in to multiple accounts simultaneously. + Two-way sync + Add or edit items and sync the changes back. + Offline editing + Add or edit items without internet connection. + Search + Search by anything + Name, email, password, phone number etc. + Filter + Filter by folder, organization, type etc. + Multiple keywords + Search by \'bitw test\' to find your \'Bitwarden Test Account\' item. + Watchtower + Pwned passwords + Find items with exposed in data breaches passwords. + Password strength + Find items with weak passwords. + Reused passwords + Find items with reused passwords. + Inactive 2FA + Find logins with available TOTP two-factor authentication. + Unsecure websites + Find websites that use HTTP protocol, auto-fix to HTTPS. + Incomplete items + Find empty items that might need updates. + Expiring items + Find expired or soon to be expired items. + Duplicate items + Find and merge duplicate items. + Misc + Multi-selection + Merge ciphers, fasten the refactoring with batch operations. + Show as Barcode + Encode a text as different barcodes. + Generator + Generate passwords or usernames. + Data safety + Local data + Local data consists of Downloads, User settings, Vault. They are stored in the internal storage of a device, which can only be accessed by the Android system or the Keyguard. + Downloads + User settings + The User settings are encrypted using a device-specific key. + Vault + The Vault is encrypted using a Key, derived from the App password using following steps: + The Salt and the Hash is then stored locally on a device, to later generate a master key to unlock the vault. + Unlocking a Vault means storing a correct Key in a device\'s RAM, gaining an ability to read and modify encrypted Vault. + Remote data + Remote data is stored on Bitwarden servers with zero-knowledge encryption. + diff --git a/common/src/commonMain/resources/MR/hu-rHU/plurals.xml b/common/src/commonMain/resources/MR/hu-rHU/plurals.xml new file mode 100644 index 00000000..5f2db8ad --- /dev/null +++ b/common/src/commonMain/resources/MR/hu-rHU/plurals.xml @@ -0,0 +1,2 @@ + + diff --git a/common/src/commonMain/resources/MR/hu-rHU/strings.xml b/common/src/commonMain/resources/MR/hu-rHU/strings.xml new file mode 100644 index 00000000..214f4486 --- /dev/null +++ b/common/src/commonMain/resources/MR/hu-rHU/strings.xml @@ -0,0 +1,868 @@ + + + OK + Close + Yes + No + + Name + Account name + Username + Password + App password + Current password + New password + Email + Verified + Not verified + Email visibility + Public URL + URL + + Access count + Learn more + Phone number + Passport number + License number + Card number + No card number + Brand + Security code + Valid from + Valid to + Card expiry month + Card expiry year + Cardholder name + Valid from + Expiry date + Company + Sync + + Hidden + + Visible + + Empty + + SSN + City + State + Info + Cancel + Continue + Country + Address + Postal code + Pull to search + Save + URI + URIs + Note + Notes + Attachments + No attachments + Expiring soon + Incomplete data + This item is missing some of the important information. + Item + Items + %1$s items + All items + No items + No folder + New folder + Folder + Folders + No folders + No collection + Collection + Collections + No collections + My vault + Organization + Organizations + No organizations + Miscellaneous + Add integration + Account + Accounts + No accounts + No account + Type + Options + Send + Reset + Length + Security + Contact info + Title + First name + Middle name + Last name + Full name + Address line 1 + Address line 2 + Address line 3 + Rename + Select type + Autofill + Passkey + Create a passkey + Unlock Keyguard + Confirming auth request… + Passkeys + + Signature counter + + Relying party + + Discoverable + Username + Display name + API key + Domain + Edit + Delete + Remove + Remove from the history + Reused password + Reused passwords + One-time password + Authenticator key + Use + Save passkey + Passkey available + Two-factor authentication available + Custom + Follow system settings + + Coming soon + Powered by + Verification code + Re-send verification code + Requested a verification email + Web vault + Launch Web vault + + Remember me + + Trash + + Download + Downloads + No downloads + No duplicates + Encryption + + Key + Hash + Salt + 256-bit AES + Random %1$d-bits of data + None + Text + Linked apps + Linked URIs + Custom fields + Reveal a secure note + Hide a secure note + Master password hint + Fingerprint phrase + What is a fingerprint? + Bitwarden premium + Unofficial Bitwarden server + Last synced at %1$s + Change name + Change color + Change master password hint + Sign out + Sign in + Visit Web vault to verify your email address + Upgrade your account to a premium membership and unlock some great additional features + Two-factor authentication + Require login verification with another device such as a security key, authenticator app, SMS or email + Active + Items + Log out + Log out? + All of the not synchronized changes will be lost! + Change name + Change names + Delete folder? + Delete folders? + This item(s) will be deleted immediately. You can not undo this action. + Recently opened + Often opened + View details + Save to + Add to favourites + Remove from favourites + Enable auth re-prompt + Disable auth re-prompt + Edit + Merge into… + Copy to… + Move to folder + Change name + Change names + Add password + Add passwords + Change password + Change passwords + View password history + Trash + Restore + Delete forever + Move associated items to trash + Open with… + Send with… + Open in a file manager + Delete local file + View parent item + Always show keyboard + Sync vault + Lock vault + Rename folder + Check the email in known data breaches + Check the username in known data breaches + Check the password in known data breaches + Check the website in known data breaches + Launch app + Launch website + Launch docs + Launch browser + Launch main page + Launch Play store + Launch with %1$s + Launch with… + How to delete an account? + Unsecure + Match app + Match detection + Base domain + Match resources by top-level and second-level domain. + Host + Match resources by hostname and (if specified) port. + Starts with + Match resources when the detected resource starts with the URI. + Exact + Match resources when the detected resource exactly matches the URI. + Regular expression + Match resources by regular expression. Advanced option. + Never + Ignore URI during auto-fill item search. + %1$s linked to the password + %1$s linked to the username + %1$s linked to the cardholder name + %1$s linked to the expiration month + %1$s linked to the expiration year + %1$s linked to the card code + %1$s linked to the card brand + %1$s linked to the card number + %1$s linked to the title + %1$s linked to the middle name + %1$s linked to the address line (1) + %1$s linked to the address line (2) + %1$s linked to the address line (3) + %1$s linked to the city + %1$s linked to the state + %1$s linked to the postal code + %1$s linked to the country + %1$s linked to the company + %1$s linked to the email + %1$s linked to the phone number + %1$s linked to the SSN + %1$s linked to the username + %1$s linked to the passport number + %1$s linked to the license number + %1$s linked to the first name + %1$s linked to the last name + %1$s linked to the full name + %1$s linked to an unknown field + Share with… + %1$d selected + Copy + Copy value + Copy URL + Copy URI + Copy package name + Copy password + Copy username + Copy email + Copy phone number + Copy passport number + Copy license number + Copy card number + Copy cardholder name + Copy expiration year + Copy expiration month + Copy CVV code + Copy one-time password + Copy secret key + Unlock Keyguard + Open Keyguard + January + February + March + April + May + June + July + August + September + October + November + December + Move up + Move down + Remove + Remove an item? + Add more + FIDO2 WebAuthn + Authenticate WebAuthn + Return to app + + Must not be empty + + Must not be blank + Must be custom domain + Must contain only US-ASCII characters + Must be at least %1$d symbols long + Must be %1$d symbols long + Invalid domain + Invalid email + Invalid URL + Invalid URI + Invalid card number + Incorrect password + Failed to generate OTP code + Failed to create a passkey + Failed to authorize a request + + Barcode + Show as Barcode + Copy this authenticator to another device by scanning the QR code. + + Date picker + + Color picker + + How to delete an account? + A collection of info of how to delete your account from web services + + Easy + + Medium + + Hard + + Limited availability + + Impossible + Send email + Search websites + No instructions + Two-factor authentication + List of websites with two-factor authentication support + Search websites + Passkeys + List of websites with passkeys support + Search websites + + Data breach + Breached account data can provide malicious actors with access to sensitive personal and financial information, potentially leading to identity theft, financial fraud, and other forms of cybercrime. + No breaches found + Breached accounts found + Breaches + Occurred on %1$s + Reported on %1$s + Failed to check data breaches. You might currently be offline + Data breach + A password that is found in the data breaches takes significantly less time to break and should never be used. + Password is compromised + The password has been identified in known data breaches. Please change it immediately to protect your online security + No breaches found + Failed to check data breaches. You might currently be offline + + Large Type + Show in Large Type + Show in Large Type and Lock vault + App Picker + Search installed apps + System app + No apps + Choose a folder + Create a new folder: + + This organization will have an ownership of the copy. You will not be the direct owner. + Email forwarders + Email forwarders + Delete email forwarder? + Delete email forwarders? + Email forwarder integration + No email forwarders + Create an encrypted vault where the local data will be stored. + App password + Biometric authentication + Create a vault + Send crash reports + Create a vault + Erase app data + Close the app and erase all local app data + The vault is locked. Enter your app password to continue. + Unlock + + Unlock a vault + + Use biometric authentication to unlock the vault. + User verification is required. Enter your app password to continue. + Verify + Sync status + Up to date + Pending + Syncing + Sync failed + New item + Edit item + Style text with %1$s or %2$s and more. Limited Markdown syntax is supported. + italic + bold + Render preview + Auth re-prompt + Ask to authenticate again when you view or autofill a cipher + Add Bitwarden account + We are not affiliated, associated, authorized, endorsed by, or in any way officially connected with the Bitwarden, Inc., or any of its subsidiaries or its affiliates. + + To pass the captcha verification on an unofficial Bitwarden client, you must specify the client secret. To find it, visit Web vault / Settings / API Key. + + Client secret + Sign in + Region + United States + Europe + Custom (self-hosted) + HTTP headers + HTTP header + You can add custom HTTP headers that will be sent with every request to the server. + Key + Value + Add more + Server URL + Specify the base URL of your self-hosted Bitwarden installation. + Custom environment + You can specify the base URL of each service independently. + Web Vault Server URL + API Server URL + Icons Server URL + Identity Server URL + Verification + This authentication method is not supported yet. + Enter the verification code from your authenticator app. + Enter the verification code that was emailed to %1$s. + Enter the YubiKey authentication code manually. Place the cursor on the field below and trigger the YubiKey. + Authenticator + Duo (Organization) + FIDO2 Web Authentication + Email + FIDO U2F + Connect YubiKey via USB + Requires USB OTG support. + Touch the gold sensor on your YubiKey now. + Hold your YubiKey flat against the back of your device + Requires NFC support. + Failed to read YubiKey + Using FIDO2 WebAuthn requires using the Bitwarden Web vault version %1$s or higher. On older versions the authentication result will incorrectly be forwarded to the official Bitwarden app. + Confirm access + This data is protected, to continue please enter your app password. + + Confirm access + + Use biometric authentication to confirm your access and unlock this data. + Vault + Send + Generator + Watchtower + Settings + Locked due to inactivity + Text + File + Login + Card + Identity + Note + Passkey + Text + Boolean + Linked + + Pwned + Very strong + Strong + Good + Fair + Weak + Very strong passwords + Strong passwords + Good passwords + Fair passwords + Weak passwords + Filter + No filters available + Sort by + No sorting available + Title + Alphabetically + Reverse Alphabetically + Access count + Largest First + Smallest First + Modification date + Newest First + Oldest First + Expiration date + Newest First + Oldest First + Deletion date + Newest First + Oldest First + Password + Alphabetically + Reverse Alphabetically + Password modification date + Newest First + Oldest First + Password strength + Weakest First + Strongest First + Search vault + New item + There are no suggested items available for this context + + Security code + Saved to %1$s at %2$s + Password last modified at %1$s + Passkey created at %1$s + Last modified at %1$s + Created at %1$s + Deleted at %1$s + Expired at %1$s + Expiration scheduled at %1$s + Deleting scheduled at %1$s + + Call + + Text + + Email + + Directions + Sends + Search sends + New item + A password is required to access this share + Generator + Username generator + Password generator + Generate + Regenerate + Passphrase + Random passphrases provide the best combination of memorability and security. + Delimiter + Capitalize + Number + Username + Delimiter + Custom word + Capitalize + Number + Random symbols + A strong password has at least %1$d characters, uppercase & lowercase letters, digits and symbols. + Digits + Symbols + Uppercase letters + Lowercase letters + + Exclude similar symbols + + Exclude ambiguous symbols + Catch-all email + A catch-all email address provides users the option to receive all mail sent to their domain, even if they are sent to an email address that has not been set up for their domain. Ensure that your email hosting supports this feature before using it. + + Domain + Plus addressing email + Plus addressing means any email sent to %1$s is still sent to your account. This means you can have a lot of variations on your email address to give out to different people, sites, or mailing lists. Ensure that your email hosting supports this feature before using it. + Email + Subdomain addressing email + Subdomain addressing means any email sent to %1$s is still sent to your account. This means you can have a lot of variations on your email address to give out to different people, sites, or mailing lists. Ensure that your email hosting supports this feature before using it. + Email + Forwarded email alias + Create new login with the password + Create new login with the username + Password history + Show tips + Generator history + Clear history + Clear generator history? + This will remove all items from the history. + Password history + Clear history + Clear password history? + This will remove all passwords from the history. + Watchtower + Password strength + Security + Maintenance + Pwned Passwords + Passwords that have been exposed in data breaches. Such passwords should be changed immediately. + Reused Passwords + Don\'t use the same password on multiple websites. Generate unique passwords to improve security. + Vulnerable Accounts + Sites that were affected by a data breach since you last changed a password. Change your password to keep your account safe. + Unsecure Websites + Change the URLs that use HTTP protocol to use HTTPS protocol, as the latter utilizes the most advanced encryption available. + Inactive two-factor authentication + Sites that have two-factor authentication available but you haven\'t set it up yet. + Available Passkeys + Sites that have passkey available but you haven\'t set it up yet. It\'s simpler and more secure then a password. + Incomplete Items + Helps you identify missing or incomplete data in your vault. This can refer to identities with missing names or logins without usernames. + Expiring Items + Items that have expired or are expiring soon. + Duplicate URIs + Items that have one or more URIs that cover the same websites after applying the match detection. + Trashed Items + Items that have been moved into the trash. Having too many items in the trash may slow down operations with your vault. + Empty Folders + Folders that do not have any items in them. + Duplicate Items + Helps you identify and eliminate duplicate items in your vault. + Compromised Accounts + Check data breaches by a username or email address. + Change app password + Change password + Biometric authentication + + Change app password + App password never gets stored on the device nor sent over the network. It is used to generate a secret key that is used to encrypt the local data. + Unless you suspect unauthorized access or discover a malware on the device, there is no need to change the password if it is a strong, unique password. + Contact us + Your message + Use English to ensure that your feedback doesn\'t get misunderstood. + We appreciate the time that you spend sending us a message. Your message goes directly to us and we use it to troubleshoot issues, make product improvements and fix problems. While we may not reply to every report, we\'re reviewing and working on improvements & fixing issues as fast as we can. + Accounts + Add account + Team behind the app + I\'m a Software engineer from Ukraine. I specialize on app design and development. + Follow me + Search + Settings + Search settings + Appearance + Autofill + Development + Experimental + Settings + Notifications + Other + Permissions + Security + Keyguard Premium + Watchtower + Open-source licenses + Accounts + Add & view accounts + Autofill + Android Autofill & Credential services + Security + Biometrics, change password, vault timeout + Keyguard Premium + Unlock features & support app development + Watchtower + Compromised services, vulnerable passwords + Notifications + Alerts + Appearance + Language, theme and animations + Development + Test settings for development + Other + Community websites, app info + Show labels on navigation buttons + App version + App build date + Team behind the app + Reddit community + GitHub project + Crowdin project + Open-source licenses + Download APK file + Load App icons + Load Website icons + Queuing website icon might leak the website address to internet provider + Rich text formatting + Use Markdown to format notes + Language + Suggest translation + Font + Rate on Play Store + Tint color + Theme + Use contrast black theme + Open links in external browser + Conceal fields + Conceal sensitive info, such as passwords and credit card numbers + + Crash + Credential provider + Passkeys, passwords and data services + Privacy policy + Contact us + Experimental + Change app password + Require app password + In addition to your regular security settings, your app password will be required after this time or when biometry settings are changed + Immediately + Never + Send crash reports + Transition animation + Erase app data + Close the app and erase all local app data + Allow screenshots + Show the content of the app when switching between recent apps and allow capturing a screen + Hide the content of the app when switching between recent apps and forbid capturing a screen + Data safety + Lock vault + Lock after a reboot + Lock the vault after a device reboot + Lock when screen turns off + Lock the vault after a few seconds once the screen is off + Lock after a delay + Immediately + Never + Persist vault key on a disk + Vault key is persisted on an internal storage + Vault is locked after the app is unloaded from the memory + Storing a vault key on a disk is a security risk. If the device\'s internal storage is compromised, the attacker will gain access to the local vault data. + Permissions + Features overview + Biometric unlock + + Biometric unlock + Keep the screen on while viewing items + Autofill service + Use the Android Autofill Framework to assist in filling login information into other apps on the device + Auto-copy one-time passwords + When filling a login information, automatically copy one-time passwords + Inline suggestions + Embeds autofill suggestions directly into compatible keyboards + Manual selection + Displays an option to manually search a vault for an entry + Respect Autofill disabled flag + Disables autofill for a browser field that has autofill disabled flag set + Note that some websites are notorious for disabling autofill for a password field as well as some browsers are notorious for ignoring the autofill disabled flag + Ask to save data + Asks for updating the vault when filling of a form has completed + Auto-save app or website info + Automatically clear clipboard + Immediately + Never + One-time password notification duration + When you autofill a login item that has a one-time password, the notification with verification code will popup for at least the defined duration + Never + About Keyguard membership + The Premium unlocks extra features and funds a development of the app. Thank you for supporting us! ❤️ + Subscriptions + Products + Failed to load a list of subscriptions + Failed to load a list of products + Active + Will not renew + Manage on Play Store + Post notifications + Used to post downloading notifications + Camera + Used to scan QR codes + Allow two panel layout in landscape mode + Allow two panel layout in portrait mode + Dark + Light + Disabled + Dynamic + Crossfade + Developed specifically to increase legibility for readers with low vision, and to improve comprehension + Features Overview + Keyguard Premium + Multiple Accounts + Sign-in to multiple accounts simultaneously. + Two-way sync + Add or edit items and sync the changes back. + Offline editing + Add or edit items without internet connection. + Search + Search by anything + Name, email, password, phone number etc. + Filter + Filter by folder, organization, type etc. + Multiple keywords + Search by \'bitw test\' to find your \'Bitwarden Test Account\' item. + Watchtower + Pwned passwords + Find items with exposed in data breaches passwords. + Password strength + Find items with weak passwords. + Reused passwords + Find items with reused passwords. + Inactive 2FA + Find logins with available TOTP two-factor authentication. + Unsecure websites + Find websites that use HTTP protocol, auto-fix to HTTPS. + Incomplete items + Find empty items that might need updates. + Expiring items + Find expired or soon to be expired items. + Duplicate items + Find and merge duplicate items. + Misc + Multi-selection + Merge ciphers, fasten the refactoring with batch operations. + Show as Barcode + Encode a text as different barcodes. + Generator + Generate passwords or usernames. + Data safety + Local data + Local data consists of Downloads, User settings, Vault. They are stored in the internal storage of a device, which can only be accessed by the Android system or the Keyguard. + Downloads + User settings + The User settings are encrypted using a device-specific key. + Vault + The Vault is encrypted using a Key, derived from the App password using following steps: + The Salt and the Hash is then stored locally on a device, to later generate a master key to unlock the vault. + Unlocking a Vault means storing a correct Key in a device\'s RAM, gaining an ability to read and modify encrypted Vault. + Remote data + Remote data is stored on Bitwarden servers with zero-knowledge encryption. + diff --git a/common/src/commonMain/resources/MR/images/ic_card_amex.svg b/common/src/commonMain/resources/MR/images/ic_card_amex.svg new file mode 100644 index 00000000..1a928e5d --- /dev/null +++ b/common/src/commonMain/resources/MR/images/ic_card_amex.svg @@ -0,0 +1,24 @@ + + + + + diff --git a/common/src/commonMain/resources/MR/images/ic_card_diners.svg b/common/src/commonMain/resources/MR/images/ic_card_diners.svg new file mode 100644 index 00000000..5f6e4b0a --- /dev/null +++ b/common/src/commonMain/resources/MR/images/ic_card_diners.svg @@ -0,0 +1,31 @@ + + + + + + + diff --git a/common/src/commonMain/resources/MR/images/ic_card_discover.svg b/common/src/commonMain/resources/MR/images/ic_card_discover.svg new file mode 100644 index 00000000..160daa61 --- /dev/null +++ b/common/src/commonMain/resources/MR/images/ic_card_discover.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + diff --git a/common/src/commonMain/resources/MR/images/ic_card_elo.svg b/common/src/commonMain/resources/MR/images/ic_card_elo.svg new file mode 100644 index 00000000..0b4e06ef --- /dev/null +++ b/common/src/commonMain/resources/MR/images/ic_card_elo.svg @@ -0,0 +1,33 @@ + + + + + + + + diff --git a/common/src/commonMain/resources/MR/images/ic_card_jcb.svg b/common/src/commonMain/resources/MR/images/ic_card_jcb.svg new file mode 100644 index 00000000..bf45dc82 --- /dev/null +++ b/common/src/commonMain/resources/MR/images/ic_card_jcb.svg @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + diff --git a/common/src/commonMain/resources/MR/images/ic_card_maestro.svg b/common/src/commonMain/resources/MR/images/ic_card_maestro.svg new file mode 100644 index 00000000..e21a6b16 --- /dev/null +++ b/common/src/commonMain/resources/MR/images/ic_card_maestro.svg @@ -0,0 +1,33 @@ + + + + + + + + diff --git a/common/src/commonMain/resources/MR/images/ic_card_mastercard.svg b/common/src/commonMain/resources/MR/images/ic_card_mastercard.svg new file mode 100644 index 00000000..a15ae8e9 --- /dev/null +++ b/common/src/commonMain/resources/MR/images/ic_card_mastercard.svg @@ -0,0 +1,39 @@ + + + + + + + + + + diff --git a/common/src/commonMain/resources/MR/images/ic_card_mir.svg b/common/src/commonMain/resources/MR/images/ic_card_mir.svg new file mode 100644 index 00000000..3f0587e4 --- /dev/null +++ b/common/src/commonMain/resources/MR/images/ic_card_mir.svg @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/common/src/commonMain/resources/MR/images/ic_card_unionpay.svg b/common/src/commonMain/resources/MR/images/ic_card_unionpay.svg new file mode 100644 index 00000000..035a99e4 --- /dev/null +++ b/common/src/commonMain/resources/MR/images/ic_card_unionpay.svg @@ -0,0 +1,45 @@ + + + + + + + + + + + + diff --git a/common/src/commonMain/resources/MR/images/ic_card_visa.svg b/common/src/commonMain/resources/MR/images/ic_card_visa.svg new file mode 100644 index 00000000..6a0b6f5c --- /dev/null +++ b/common/src/commonMain/resources/MR/images/ic_card_visa.svg @@ -0,0 +1,27 @@ + + + + + + diff --git a/common/src/commonMain/resources/MR/images/ic_mastodon.svg b/common/src/commonMain/resources/MR/images/ic_mastodon.svg new file mode 100644 index 00000000..425d57b0 --- /dev/null +++ b/common/src/commonMain/resources/MR/images/ic_mastodon.svg @@ -0,0 +1,5 @@ + + + diff --git a/common/src/commonMain/resources/MR/it-rIT/plurals.xml b/common/src/commonMain/resources/MR/it-rIT/plurals.xml new file mode 100644 index 00000000..5f2db8ad --- /dev/null +++ b/common/src/commonMain/resources/MR/it-rIT/plurals.xml @@ -0,0 +1,2 @@ + + diff --git a/common/src/commonMain/resources/MR/it-rIT/strings.xml b/common/src/commonMain/resources/MR/it-rIT/strings.xml new file mode 100644 index 00000000..34ef4354 --- /dev/null +++ b/common/src/commonMain/resources/MR/it-rIT/strings.xml @@ -0,0 +1,868 @@ + + + OK + Chiudi + + No + + Nome + Nome account + Nome utente + Password + Password app + Password attuale + Nuova password + Email + Verificata + Non verificata + Visibilità email + URL pubblico + URL + + Conteggio accessi + Scopri di più + Numero di telefono + Numero di passaporto + Numero patente + Numero carta + Nessun numero di carta + Marca + CVV + Valida dal + Valida dal + Card expiry month + Card expiry year + Titolare della carta + Valida dal + Data di scadenza + Azienda + Sincronizza + + Nascosto + + Visibile + + Vuoto + + SSN + Città + Provincia + Info + Annulla + Continua + Paese + Indirizzo + CAP + Trascina per cercare + Salva + URI + URI + Nota + Note + Allegati + Nessun allegato + In scadenza + Dati incompleti + Questo elemento manca di alcune delle informazioni importanti. + Elemento + Elementi + %1$s elementi + Tutti gli elementi + Non c\'è niente qui + Nessuna cartella + Nuova cartella + Cartella + Cartelle + Nessuna cartella + Nessuna collezione + Collezione + Collezioni + Nessuna Raccolta + La mia cassaforte + Organizzazione + Organizzazioni + Nessuna organizzazione + Varie + Aggiungi integrazione + Account + Account + Nessun account + Nessun account + Tipo + Opzioni + Invia + Reimposta + Lunghezza + Sicurezza + Info di contatto + Titolo + Nome + Secondo nome + Cognome + Full name + Indirizzo riga 1 + Indirizzo riga 2 + Indirizzo riga 3 + Rinomina + Select type + Riempimento automatico + Passkey + Crea una password + Sblocca Keyguard + Conferma richiesta di autenticazione… + Passkey + + Contatore di firme + + Ente affidabile + + Visibile + Username + Nome visualizzato + Chiave API + Dominio + Modifica + Elimina + Rimuovi + Rimuovi dalla cronologia + Password riutilizzata + Password riutilizzate + One-Time Password + Chiave di autenticazione + Usa + Salva passkey + Passkey disponibile + Autenticazione a due fattori disponibile + Personalizzato + Segui le impostazioni di sistema + + In arrivo + Powered by + Codice di verifica + Re-invia il codice di verifica + Codice di verifica richiesto + Cassaforte web + Avvia cassaforte Web + + Resta collegato + + Cestino + + Scarica + Scaricati + Nessun download + Nessun duplicato + Crittografia + + Chiave + Hash + Salt + 256-bit AES + %1$d-bits di dati casuali + Nessuno + Testo + Applicazioni collegate + URI Collegati + Campi personalizzati + Rivela una nota sicura + Nascondi una nota sicura + Suggerimento per la password principale + Frase impronta + Che cos\'è un\'impronta digitale? + Bitwarden premium + Server Bitwarden non ufficiale + Ultima sincronizzazione il %1$s + Modifica nome + Modifica colore + Modifica suggerimento password principale + Disconnetti + Accedi + Vai nella cassaforte web per verificare il tuo indirizzo e-mail + Aggiorna il tuo account a un abbonamento premium per sbloccare alcune funzioni aggiuntive + Autenticazione a due fattori + Richiedi la verifica del login con un altro dispositivo, come una chiave di sicurezza, un\'app di autenticazione, un SMS o un\'e-mail + Attivo + Elementi + Esci + Uscire? + Tutte le modifiche non sincronizzate verranno perse! + Modifica nome + Modifica nomi + Eliminare la cartella? + Eliminare le cartelle? + Questo/i elemento/i verranno eliminati immediatamente. Questa azione non può essere annullata. + Aperti di recente + Aperti spesso + Vedi dettagli + Salva in + Aggiungi ai preferiti + Rimuovi dai preferiti + Abilita richiesta di autorizzazione + Disabilita richiesta di autorizzazione + Modifica + Unisci in… + Copia in… + Sposta nella cartella + Modifica nome + Modifica nomi + Aggiungi password + Aggiungi password + Cambia password + Modifica password + Visualizza cronologia password + Elimina + Ripristina + Elimina definitivamente + Sposta gli elementi associati nel cestino + Apri con… + Invia con… + Apri in un file manager + Elimina file locale + Visualizza elemento genitore + Mostra sempre tastiera + Sincronizza + Blocca + Rinomina cartella + Controlla l\'email in violazioni di dati conosciute + Controlla il nome utente in violazioni di dati conosciute + Controlla la password in violazioni di dati conosciute + Controlla il sito web in violazioni di dati conosciute + Avvia app + Avvia sito web + Apri documentazione + Avvia browser + Apri pagina principale + Apri Play Store + Apri con %1$s + Apri con… + Come eliminare il mio account? + Non sicuro + Corrispondenza app + Rilevamento corrispondenza + Dominio di base + Abbina risorse per dominio di primo e secondo livello. + Host + Associa risorsa in base a nome host e porta (se specificata). + Inizia con + Associa quando la risorsa rilevata inizia con l\'URI. + Esatta + Associa quando la risorsa rilevata corrisponde esattamente con l\'URI. + Espressione regolare + Associa risorse in base a espressione regolare. Opzione avanzata. + Mai + Ignora URI durante la ricerca degli elementi di riempimento automatico. + %1$s collegato alla password + %1$s collegato al nome utente + %1$s collegato al nome del titolare della carta + %1$s collegato al mese di scadenza + %1$s collegato all\'anno di scadenza + %1$s collegato al codice della carta + %1$s collegato al marchio della carta + %1$s collegato al numero della carta + %1$s collegato al titolo + %1$s collegato al secondo nome + %1$s collegato alla riga dell\'indirizzo (1) + %1$s collegato alla riga di indirizzo (2) + %1$s collegato alla riga dell\'indirizzo (3) + %1$s collegato alla città + %1$s collegato allo stato + %1$s collegato al codice postale + %1$s collegato al paese + %1$s collegato alla società + %1$s collegato all\'email + %1$s collegato al numero di telefono + %1$s linked to the SSN + %1$s linked to the username + %1$s linked to the passport number + %1$s linked to the license number + %1$s linked to the first name + %1$s linked to the last name + %1$s linked to the full name + %1$s linked to an unknown field + Condividi con… + %1$d selezionati + Copia + Copia valore + Copia URL + Copia URI + Copia nome pacchetto + Copia password + Copia nome utente + Copia email + Copia numero di telefono + Copia numero di passaporto + Copia numero di licenza + Copia numero carta + Copia nome titolare della carta + Copia anno di scadenza + Copia mese di scadenza + Copia codice CVV + Copia OTP + Copia chiave segreta + Sblocca Keyguard + Apri Keyguard + Gennaio + Febbraio + Marzo + Aprile + Maggio + Giugno + Luglio + Agosto + Settembre + Ottobre + Novembre + Dicembre + Sposta in su + Sposta in giù + Rimuovi + Rimuovere l\'elemento? + Aggiungi altri + FIDO2 WebAuthn + Autenticazione WebAutn + Ritorna all\'app + + Non può essere vuoto + + Non può essere vuoto + Deve essere un dominio personalizzato + Deve contenere solo caratteri US-ASCII + Deve avere almeno %1$d simboli + Deve avere %1$d simboli + Dominio non valido + Indirizzo email non valido + URL non valido + URI non valido + Numero carta non valido + Password errata + Impossibile generare il codice OTP + Failed to create a passkey + Failed to authorize a request + + Codice a barre + Mostra come codice a barre + Copy this authenticator to another device by scanning the QR code. + + Seleziona data + + Selettore colore + + Come eliminare un account? + Una serie di informazioni sul come cancellare il tuo account dai servizi web + + Semplice + + Medio + + Difficile + + Disponibilità limitata + + Impossibile + Invia email + Cerca siti web + Nessuna istruzione + Autenticazione a due fattori + Elenco dei siti web con supporto per l\'autenticazione a due fattori + Cerca siti web + Passkey + Elenco dei siti web con supporto per le passkey + Cerca siti web + + Violazioni dei dati + I dati degli account violati possono fornire a soggetti malintenzionati l\'accesso a informazioni personali e finanziarie sensibili, portando potenzialmente al furto di identità, alla frode finanziaria e ad altre forme di criminalità informatica. + Nessuna violazione trovata + Account violati trovati + Violazioni + Avvenuta il %1$s + Segnalata il %1$s + Impossibile controllare le violazioni dei dati. Al momento potresti essere offline + Violazioni dei dati + Una password trovata nelle violazioni dei dati richiede molto meno tempo per essere violata e non dovrebbe mai essere utilizzata. + La password è compromessa + La password è stata identificata in violazioni di dati conosciute. Si prega di modificarla immediatamente per proteggere la tua sicurezza online + Nessuna violazione trovata + Impossibile controllare le violazioni dei dati. Al momento potresti essere offline + + Large Type + Show in Large Type + Show in Large Type and Lock vault + Selettore App + Cerca app installate + App di sistema + Nessuna app + Scegli una cartella + Crea una nuova cartella: + + Questa organizzazione avrà la proprietà della copia. Non sarai il proprietario diretto. + Email forwarders + Email forwarders + Delete email forwarder? + Delete email forwarders? + Email forwarder integration + No email forwarders + Crea una cassaforte criptata dove verranno salvati i dati locali. + Password app + Autenticazione biometrica + Crea una cassaforte + Invia rapporti di errore + Crea una cassaforte + Cancella dati app + Chiudi l\'app e cancella tutti i dati locali dell\'app + La cassaforte è bloccata. Inserisci la password dell\'app per continuare. + Sblocca + + Sblocca cassaforte + + Usa l\'autenticazione biometrica per sbloccare la cassaforte. + User verification is required. Enter your app password to continue. + Verify + Stato sincronizzazione + Aggiornato + In attesa + Sincronizzazione in corso + Sincronizzazione non riuscita + Nuovo elemento + Modifica elemento + Stile del testo con %1$s or %2$s e altro. È supportata una sintassi Markdown limitata. + corsivo + grassetto + Anteprima + Richiesta autorizzazione + Ask to authenticate again when you view or autofill a cipher + Aggiungi account Bitwarden + Non siamo affiliati, associati, autorizzati, approvati da, o in alcun modo ufficialmente connessi con il Bitwarden, Inc. o di una delle sue controllate o delle sue affiliate. + + Per superare la verifica captcha su un client Bitwarden non ufficiale, devi specificare la chiave segreta del client. Per trovarlo, visita la Cassaforte Web / Impostazioni account / Sicurezza / Chiave API. + + Chiave segreta del client + Accedi + Regione + Stati Uniti + Europa + Personalizzato (self-hosted) + Intestazioni HTTP + Intestazione HTTP + È possibile aggiungere intestazioni HTTP personalizzate che verranno inviate con ogni richiesta al server. + Chiave + Valore + Aggiungi altri + URL del server + Specifica l\'URL di base della tua installazione Bitwarden self-hosted. + Ambiente personalizzato + È possibile specificare l\'URL di base di ogni servizio in modo indipendente. + URL della cassaforte web + URL server API + URL del server icone + URL del server d\'identità + Verifica + Questo metodo di autenticazione non è ancora supportato. + Inserisci il codice di verifica dalla tua app di autenticazione. + Inserisci il codice di verifica che è stato inviato via email a %1$s. + Inserisci il codice di autenticazione YubiKey manualmente. Posiziona il cursore sul campo sottostante e attiva YubiKey. + Authenticator + Duo (Organizzazione) + Autenticazione Web FIDO2 + Email + FIDO U2F + Connetti YubiKey tramite USB + Richiede il supporto a USB OTG. + Touch the gold sensor on your YubiKey now. + Hold your YubiKey flat against the back of your device + Richiede il supporto a NFC. + Lettura di YubiKey fallita + Using FIDO2 WebAuthn requires using the Bitwarden Web vault version %1$s or higher. On older versions the authentication result will incorrectly be forwarded to the official Bitwarden app. + Conferma accesso + Questi dati sono protetti, per continuare inserisci la password dell\'app. + + Conferma accesso + + Usa l\'autenticazione biometrica per confermare l\'accesso e sbloccare questi dati. + Cassaforte + Send + Generatore + Watchtower + Impostazioni + Bloccato per inattività + Testo + File + Accesso + Carta + Identità + Note + Passkey + Testo + Booleano + Collegato + + Compromessa + Molto forte + Forte + Buona + Discreta + Debole + Password molto forti + Password forti + Password buone + Password discrete + Password deboli + Filtri + Nessun filtro disponibile + Ordina per + Nessun ordinamento disponibile + Nome + Ordine alfabetico + Ordine alfabetico inverso + Conteggio accessi + Più grandi prima + Più piccoli prima + Data di modifica + Prima i più recenti + Prima i più vecchi + Data di scadenza + Prima i più recenti + Prima i più vecchi + Data di eliminazione + Prima i più recenti + Prima i più vecchi + Password + Ordine alfabetico + Ordine alfabetico inverso + Data modifica password + Prima i più recenti + Prima i più vecchi + Sicurezza password + Prima le più deboli + Prima le più sicure + Cerca nella cassaforte + Nuovo elemento + There are no suggested items available for this context + + Codice di sicurezza + Saved to %1$s at %2$s + Ultima modifica password il %1$s + Passkey creata il %1$s + Ultima modifica il %1$s + Creata il %1$s + Eliminata il %1$s + Scaduta il %1$s + Scadenza pianificata il %1$s + Eliminazione pianificata il %1$s + + Chiama + + Messaggio + + Email + + Indicazioni + Sends + Cerca send + Nuovo elemento + Una password è necessaria per accedere a questa condivisione + Generatore + Generatore nome utente + Generatore password + Genera + Rigenera + Frase d\'accesso + Le frasi di accesso casuali forniscono la migliore combinazione di memorabilità e sicurezza. + Separatore + Maiuscole + Numeri + Nome utente + Separatore + Parola personalizzata + Capitalize + Number + Simboli casuali + Una password sicura ha almeno %1$d caratteri, lettere maiuscole e minuscole, cifre e simboli. + Numeri + Simboli + Lettere maiuscole + Lettere minuscole + + Evita simboli simili + + Evita simboli ambigui + Catch-all email + A catch-all email address provides users the option to receive all mail sent to their domain, even if they are sent to an email address that has not been set up for their domain. Ensure that your email hosting supports this feature before using it. + + Dominio + Plus addressing email + Plus addressing means any email sent to %1$s is still sent to your account. This means you can have a lot of variations on your email address to give out to different people, sites, or mailing lists. Ensure that your email hosting supports this feature before using it. + Email + Subdomain addressing email + Subdomain addressing means any email sent to %1$s is still sent to your account. This means you can have a lot of variations on your email address to give out to different people, sites, or mailing lists. Ensure that your email hosting supports this feature before using it. + Email + Alias email inoltrate + Crea un nuovo login con la password + Crea un nuovo login con il nome utente + Cronologia della password + Mostra suggerimenti + Cronologia generatore + Pulisci cronologia + Clear generator history? + Questo rimuoverà tutti gli elementi dalla cronologia. + Cronologia della password + Pulisci cronologia + Pulire cronologia password? + Questo rimuoverà tutte le password dalla cronologia. + Watchtower + Sicurezza password + Sicurezza + Manutenzione + Password Compromesse + Password che sono state esposte in violazioni di dati. Tali password dovrebbero essere modificate immediatamente. + Password Riutilizzate + Non utilizzare la stessa password su più siti. Genera password uniche per migliorare la sicurezza. + Account Vulnerabili + Siti che sono stati affetti da una violazione di dati dall\'ultima modifica di una password. Cambia la password per mantenere il tuo account sicuro. + Siti non sicuri + Modifica gli URL che utilizzano il protocollo HTTP per utilizzare HTTPS, in quanto quest\'ultimo utilizza la crittografia più avanzata disponibile. + Autenticazione a due fattori non attivata + Siti che supportano l\'autenticazione a due fattori ma non l\'hai ancora impostato. + Passkey Disponibili + Siti che hanno la chiave di accesso disponibile, ma non l\'hai ancora impostata. È più semplice e più sicura di una password. + Elementi incompleti + Aiuta a identificare dati mancanti o incompleti nella cassaforte. Questo potrebbe riferirsi a identità con nomi mancanti o login senza nomi utente. + Elementi in scadenza + Elementi che sono scaduti o stanno scadendo presto. + Uri duplicate + Elementi che hanno uno o più URI che coprono gli stessi siti web dopo aver applicato il rilevamento delle corrispondenze. + Elementi nel cestino + Elementi che sono stati spostati nel cestino. Avere troppi oggetti nel cestino può rallentare le operazioni con la cassaforte. + Cartelle Vuote + Cartelle che non hanno elementi in esse. + Elementi Duplicati + Ti aiuta a identificare ed eliminare gli elementi duplicati nella tua cassaforte. + Account Compromessi + Controlla le violazioni dei dati attraverso un nome utente o un indirizzo email. + Modifica password app + Modifica password + Autenticazione biometrica + + Modifica password app + App password never gets stored on the device nor sent over the network. It is used to generate a secret key that is used to encrypt the local data. + Unless you suspect unauthorized access or discover a malware on the device, there is no need to change the password if it is a strong, unique password. + Contact us + Your message + Usa l\'inglese per assicurarti che il tuo feedback non venga frainteso. + We appreciate the time that you spend sending us a message. Your message goes directly to us and we use it to troubleshoot issues, make product improvements and fix problems. While we may not reply to every report, we\'re reviewing and working on improvements & fixing issues as fast as we can. + Account + Aggiungi account + Team dietro l\'applicazione + Sono un ingegnere software ucraino. Mi specializzo nella progettazione e sviluppo di app. + Seguimi + Cerca + Impostazioni + Cerca impostazioni + Aspetto + Riempimento automatico + Sviluppo + Funzioni sperimentali + Impostazioni + Notifiche + Altro + Autorizzazioni + Sicurezza + Keyguard Premium + Watchtower + Licenze open source + Account + Aggiungi e visualizza account + Riempimento automatico + Android Autofill & Credential services + Sicurezza + Biometria, modifica password, timeout cassaforte + Keyguard Premium + Sblocca funzionalità e supporta lo sviluppo dell\'app + Watchtower + Servizi compromessi, password vulnerabili + Notifiche + Avvisi + Aspetto + Lingua, tema e animazioni + Sviluppo + Impostazioni di test per lo sviluppo + Altro + Community, informazioni app + Mostra etichette sui pulsanti di navigazione + Versione app + Data di compilazione app + Team dietro l\'applicazione + Community su Reddit + Progetto GitHub + Progetto Crowdin + Licenze open source + Scarica il file APK + Carica icone App + Carica icone Siti Web + Queuing website icon might leak the website address to internet provider + Rich text formatting + Usa Markdown per formattare le note + Lingua + Suggerisci traduzioni + Carattere + Vota sul Play Store + Colore Tinta + Tema + Usa tema scuro a contrasto + Apri link in browser esterno + Conceal fields + Nascondere informazioni sensibili, come password e numeri di carta di credito + + Crash + Fornitore di credenziali + Passkeys, password e servizi dati + Politica sulla Privacy + Contattaci + Funzioni sperimentali + Cambia password app + Richiedi password app + Oltre alle impostazioni di sicurezza regolari, la password dell\'app sarà richiesta dopo questo periodo o quando le impostazioni biometriche vengono modificate + Subito + Mai + Invia rapporti di errore + Animazione di transizione + Cancella dati app + Chiudi l\'app e cancella tutti i dati locali + Consenti screenshot + Mostra il contenuto dell\'app quando si passa tra le app recenti e consente di catturare uno screenshot + Nascondi il contenuto dell\'app quando si passa tra le app recenti e proibisci di catturare uno screenshot + Sicurezza dei dati + Blocca cassaforte + Blocca dopo un riavvio + Blocca la cassaforte dopo un riavvio del dispositivo + Blocca quando lo schermo viene si spegne + Blocca la cassaforte dopo alcuni secondi una volta che lo schermo è spento + Blocca dopo un ritardo + Immediatamente + Mai + Conserva la chiave della cassaforte su un disco + La chiave della cassaforte è conservata su una memoria interna + La cassaforte viene bloccata dopo che l\'app viene rimossa dalla memoria + Archiviare una chiave di cassaforte sul disco è un rischio per la sicurezza. Se la memoria interna del dispositivo è compromessa, l\'attaccante otterrà l\'accesso ai dati della cassaforte locale. + Autorizzazioni + Panoramica delle funzionalità + Sblocco biometrico + + Sblocco biometrico + Mantieni lo schermo acceso durante la visualizzazione degli elementi + Compilazione automatica + Utilizza il framework Android Autofill per aiutare a inserire le informazioni di accesso in altre applicazioni sul dispositivo + Copia automaticamente OTP + Quando si compilano le informazioni di accesso, copia automaticamente le password monouso + Suggerimenti inline + Integra i suggerimenti di riempimento automatico direttamente nelle tastiere compatibili + Selezione manuale + Mostra un\'opzione per cercare manualmente una voce in una cassaforte + Rispetta il toggle dell\'autofill disattivato + Disabilita il riempimento automatico per un campo del browser che ha disabilitato il riempimento automatico + Si noti che alcuni siti web sono noti per la disabilitazione del riempimento automatico per un campo di password così come alcuni browser sono noti per ignorare il flag di riempimento automatico disabilitato + Chiedi di salvare i dati + Chiede di aggiornare la cassaforte quando il modulo è stato compilato + Salvataggio automatico dell\'app o informazioni del sito + Cancella automaticamente gli appunti + Immediatamente + Mai + Durata notifica password monouso + Quando si compila automaticamente un elemento di accesso che ha una password monouso, la notifica con codice di verifica verrà visualizzata per almeno la durata definita + Mai + Informazioni sull\'iscrizione a Keyguard + Il Premium sblocca funzionalità extra e finanzia lo sviluppo dell\'app. Grazie per il supporto! ❤️ + Abbonamenti + Prodotti + Impossibile caricare la lista degli abbonamenti + Impossibile caricare l\'elenco dei prodotti + Attivo + Non verrà rinnovato + Gestisci su Play Store + Posticipa notifica + Utilizzato per postare le notifiche di download + Fotocamera + Utilizzato per scansionare i codici QR + Consenti layout a due colonne in modalità orizzontale + Consenti layout a due colonne in modalità verticale + Scuro + Chiaro + Disattivato + Dinamico + Dissolvenza + Sviluppato appositamente per aumentare la leggibilità per i lettori con scarsa visione e per migliorare la comprensione + Panoramica delle funzionalità + Keyguard Premium + Account Multipli + Accedi a più account contemporaneamente. + Sincronizzazione bidirezionale + Aggiungi o modifica elementi e sincronizza i cambiamenti. + Modifica offline + Aggiungi o modifica elementi senza connessione internet. + Cerca + Cerca per qualsiasi cosa + Nome, email, password, numero di telefono ecc. + Filtra + Filtra per cartella, organizzazione, tipo ecc… + Parole chiave multiple + Cerca \'bitw test\' per trovare \'Account Bitwarden Test\'. + Watchtower + Password compromesse + Trova elementi con password esposte a violazione di dati. + Sicurezza password + Trova elementi con password deboli. + Password riutilizzate + Trova elementi con password riutilizzate. + 2FA inattivi + Trova i login con autenticazione a due fattori TOTP disponibile. + Siti web non sicuri + Trova siti web che utilizzano il protocollo HTTP, auto-fix per HTTPS. + Elementi incompleti + Trova elementi vuoti che potrebbero richiedere degli aggiornamenti. + Elementi in scadenza + Trova gli elementi scaduti o in scadenza. + Elementi duplicati + Trova e unisci i duplicati. + Varie + Selezione multipla + Unire i cifrari, fissare il refactoring con le operazioni batch. + Mostra come codice a barre + Codifica un testo come codici a barre diversi. + Generatore + Genera password o nomi utente. + Sicurezza dei dati + Dati locali + I dati locali consistono in Download, impostazioni utente, Cassaforte. Essi sono memorizzati nella memoria interna di un dispositivo, che può essere accessibile solo dal sistema Android o da Keyguard. + Download + Impostazioni utente + Le impostazioni utente sono crittografate utilizzando una chiave specifica del dispositivo. + Cassaforte + La cassaforte è crittografata utilizzando una chiave, derivata dalla password dell\'app utilizzando i seguenti passaggi: + Il salt e l\'hash vengono poi memorizzati localmente su un dispositivo, per poi generare una chiave principale per sbloccare la cassaforte. + Sbloccare una cassaforte significa memorizzare una chiave corretta nella RAM di un dispositivo, ottenendo la capacità di leggere e modificare la cassaforte crittografata. + Dati Remoti + I dati remoti vengono memorizzati sui server di Bitwarden con crittografia end-to-end. + diff --git a/common/src/commonMain/resources/MR/iw-rIL/plurals.xml b/common/src/commonMain/resources/MR/iw-rIL/plurals.xml new file mode 100644 index 00000000..5f2db8ad --- /dev/null +++ b/common/src/commonMain/resources/MR/iw-rIL/plurals.xml @@ -0,0 +1,2 @@ + + diff --git a/common/src/commonMain/resources/MR/iw-rIL/strings.xml b/common/src/commonMain/resources/MR/iw-rIL/strings.xml new file mode 100644 index 00000000..214f4486 --- /dev/null +++ b/common/src/commonMain/resources/MR/iw-rIL/strings.xml @@ -0,0 +1,868 @@ + + + OK + Close + Yes + No + + Name + Account name + Username + Password + App password + Current password + New password + Email + Verified + Not verified + Email visibility + Public URL + URL + + Access count + Learn more + Phone number + Passport number + License number + Card number + No card number + Brand + Security code + Valid from + Valid to + Card expiry month + Card expiry year + Cardholder name + Valid from + Expiry date + Company + Sync + + Hidden + + Visible + + Empty + + SSN + City + State + Info + Cancel + Continue + Country + Address + Postal code + Pull to search + Save + URI + URIs + Note + Notes + Attachments + No attachments + Expiring soon + Incomplete data + This item is missing some of the important information. + Item + Items + %1$s items + All items + No items + No folder + New folder + Folder + Folders + No folders + No collection + Collection + Collections + No collections + My vault + Organization + Organizations + No organizations + Miscellaneous + Add integration + Account + Accounts + No accounts + No account + Type + Options + Send + Reset + Length + Security + Contact info + Title + First name + Middle name + Last name + Full name + Address line 1 + Address line 2 + Address line 3 + Rename + Select type + Autofill + Passkey + Create a passkey + Unlock Keyguard + Confirming auth request… + Passkeys + + Signature counter + + Relying party + + Discoverable + Username + Display name + API key + Domain + Edit + Delete + Remove + Remove from the history + Reused password + Reused passwords + One-time password + Authenticator key + Use + Save passkey + Passkey available + Two-factor authentication available + Custom + Follow system settings + + Coming soon + Powered by + Verification code + Re-send verification code + Requested a verification email + Web vault + Launch Web vault + + Remember me + + Trash + + Download + Downloads + No downloads + No duplicates + Encryption + + Key + Hash + Salt + 256-bit AES + Random %1$d-bits of data + None + Text + Linked apps + Linked URIs + Custom fields + Reveal a secure note + Hide a secure note + Master password hint + Fingerprint phrase + What is a fingerprint? + Bitwarden premium + Unofficial Bitwarden server + Last synced at %1$s + Change name + Change color + Change master password hint + Sign out + Sign in + Visit Web vault to verify your email address + Upgrade your account to a premium membership and unlock some great additional features + Two-factor authentication + Require login verification with another device such as a security key, authenticator app, SMS or email + Active + Items + Log out + Log out? + All of the not synchronized changes will be lost! + Change name + Change names + Delete folder? + Delete folders? + This item(s) will be deleted immediately. You can not undo this action. + Recently opened + Often opened + View details + Save to + Add to favourites + Remove from favourites + Enable auth re-prompt + Disable auth re-prompt + Edit + Merge into… + Copy to… + Move to folder + Change name + Change names + Add password + Add passwords + Change password + Change passwords + View password history + Trash + Restore + Delete forever + Move associated items to trash + Open with… + Send with… + Open in a file manager + Delete local file + View parent item + Always show keyboard + Sync vault + Lock vault + Rename folder + Check the email in known data breaches + Check the username in known data breaches + Check the password in known data breaches + Check the website in known data breaches + Launch app + Launch website + Launch docs + Launch browser + Launch main page + Launch Play store + Launch with %1$s + Launch with… + How to delete an account? + Unsecure + Match app + Match detection + Base domain + Match resources by top-level and second-level domain. + Host + Match resources by hostname and (if specified) port. + Starts with + Match resources when the detected resource starts with the URI. + Exact + Match resources when the detected resource exactly matches the URI. + Regular expression + Match resources by regular expression. Advanced option. + Never + Ignore URI during auto-fill item search. + %1$s linked to the password + %1$s linked to the username + %1$s linked to the cardholder name + %1$s linked to the expiration month + %1$s linked to the expiration year + %1$s linked to the card code + %1$s linked to the card brand + %1$s linked to the card number + %1$s linked to the title + %1$s linked to the middle name + %1$s linked to the address line (1) + %1$s linked to the address line (2) + %1$s linked to the address line (3) + %1$s linked to the city + %1$s linked to the state + %1$s linked to the postal code + %1$s linked to the country + %1$s linked to the company + %1$s linked to the email + %1$s linked to the phone number + %1$s linked to the SSN + %1$s linked to the username + %1$s linked to the passport number + %1$s linked to the license number + %1$s linked to the first name + %1$s linked to the last name + %1$s linked to the full name + %1$s linked to an unknown field + Share with… + %1$d selected + Copy + Copy value + Copy URL + Copy URI + Copy package name + Copy password + Copy username + Copy email + Copy phone number + Copy passport number + Copy license number + Copy card number + Copy cardholder name + Copy expiration year + Copy expiration month + Copy CVV code + Copy one-time password + Copy secret key + Unlock Keyguard + Open Keyguard + January + February + March + April + May + June + July + August + September + October + November + December + Move up + Move down + Remove + Remove an item? + Add more + FIDO2 WebAuthn + Authenticate WebAuthn + Return to app + + Must not be empty + + Must not be blank + Must be custom domain + Must contain only US-ASCII characters + Must be at least %1$d symbols long + Must be %1$d symbols long + Invalid domain + Invalid email + Invalid URL + Invalid URI + Invalid card number + Incorrect password + Failed to generate OTP code + Failed to create a passkey + Failed to authorize a request + + Barcode + Show as Barcode + Copy this authenticator to another device by scanning the QR code. + + Date picker + + Color picker + + How to delete an account? + A collection of info of how to delete your account from web services + + Easy + + Medium + + Hard + + Limited availability + + Impossible + Send email + Search websites + No instructions + Two-factor authentication + List of websites with two-factor authentication support + Search websites + Passkeys + List of websites with passkeys support + Search websites + + Data breach + Breached account data can provide malicious actors with access to sensitive personal and financial information, potentially leading to identity theft, financial fraud, and other forms of cybercrime. + No breaches found + Breached accounts found + Breaches + Occurred on %1$s + Reported on %1$s + Failed to check data breaches. You might currently be offline + Data breach + A password that is found in the data breaches takes significantly less time to break and should never be used. + Password is compromised + The password has been identified in known data breaches. Please change it immediately to protect your online security + No breaches found + Failed to check data breaches. You might currently be offline + + Large Type + Show in Large Type + Show in Large Type and Lock vault + App Picker + Search installed apps + System app + No apps + Choose a folder + Create a new folder: + + This organization will have an ownership of the copy. You will not be the direct owner. + Email forwarders + Email forwarders + Delete email forwarder? + Delete email forwarders? + Email forwarder integration + No email forwarders + Create an encrypted vault where the local data will be stored. + App password + Biometric authentication + Create a vault + Send crash reports + Create a vault + Erase app data + Close the app and erase all local app data + The vault is locked. Enter your app password to continue. + Unlock + + Unlock a vault + + Use biometric authentication to unlock the vault. + User verification is required. Enter your app password to continue. + Verify + Sync status + Up to date + Pending + Syncing + Sync failed + New item + Edit item + Style text with %1$s or %2$s and more. Limited Markdown syntax is supported. + italic + bold + Render preview + Auth re-prompt + Ask to authenticate again when you view or autofill a cipher + Add Bitwarden account + We are not affiliated, associated, authorized, endorsed by, or in any way officially connected with the Bitwarden, Inc., or any of its subsidiaries or its affiliates. + + To pass the captcha verification on an unofficial Bitwarden client, you must specify the client secret. To find it, visit Web vault / Settings / API Key. + + Client secret + Sign in + Region + United States + Europe + Custom (self-hosted) + HTTP headers + HTTP header + You can add custom HTTP headers that will be sent with every request to the server. + Key + Value + Add more + Server URL + Specify the base URL of your self-hosted Bitwarden installation. + Custom environment + You can specify the base URL of each service independently. + Web Vault Server URL + API Server URL + Icons Server URL + Identity Server URL + Verification + This authentication method is not supported yet. + Enter the verification code from your authenticator app. + Enter the verification code that was emailed to %1$s. + Enter the YubiKey authentication code manually. Place the cursor on the field below and trigger the YubiKey. + Authenticator + Duo (Organization) + FIDO2 Web Authentication + Email + FIDO U2F + Connect YubiKey via USB + Requires USB OTG support. + Touch the gold sensor on your YubiKey now. + Hold your YubiKey flat against the back of your device + Requires NFC support. + Failed to read YubiKey + Using FIDO2 WebAuthn requires using the Bitwarden Web vault version %1$s or higher. On older versions the authentication result will incorrectly be forwarded to the official Bitwarden app. + Confirm access + This data is protected, to continue please enter your app password. + + Confirm access + + Use biometric authentication to confirm your access and unlock this data. + Vault + Send + Generator + Watchtower + Settings + Locked due to inactivity + Text + File + Login + Card + Identity + Note + Passkey + Text + Boolean + Linked + + Pwned + Very strong + Strong + Good + Fair + Weak + Very strong passwords + Strong passwords + Good passwords + Fair passwords + Weak passwords + Filter + No filters available + Sort by + No sorting available + Title + Alphabetically + Reverse Alphabetically + Access count + Largest First + Smallest First + Modification date + Newest First + Oldest First + Expiration date + Newest First + Oldest First + Deletion date + Newest First + Oldest First + Password + Alphabetically + Reverse Alphabetically + Password modification date + Newest First + Oldest First + Password strength + Weakest First + Strongest First + Search vault + New item + There are no suggested items available for this context + + Security code + Saved to %1$s at %2$s + Password last modified at %1$s + Passkey created at %1$s + Last modified at %1$s + Created at %1$s + Deleted at %1$s + Expired at %1$s + Expiration scheduled at %1$s + Deleting scheduled at %1$s + + Call + + Text + + Email + + Directions + Sends + Search sends + New item + A password is required to access this share + Generator + Username generator + Password generator + Generate + Regenerate + Passphrase + Random passphrases provide the best combination of memorability and security. + Delimiter + Capitalize + Number + Username + Delimiter + Custom word + Capitalize + Number + Random symbols + A strong password has at least %1$d characters, uppercase & lowercase letters, digits and symbols. + Digits + Symbols + Uppercase letters + Lowercase letters + + Exclude similar symbols + + Exclude ambiguous symbols + Catch-all email + A catch-all email address provides users the option to receive all mail sent to their domain, even if they are sent to an email address that has not been set up for their domain. Ensure that your email hosting supports this feature before using it. + + Domain + Plus addressing email + Plus addressing means any email sent to %1$s is still sent to your account. This means you can have a lot of variations on your email address to give out to different people, sites, or mailing lists. Ensure that your email hosting supports this feature before using it. + Email + Subdomain addressing email + Subdomain addressing means any email sent to %1$s is still sent to your account. This means you can have a lot of variations on your email address to give out to different people, sites, or mailing lists. Ensure that your email hosting supports this feature before using it. + Email + Forwarded email alias + Create new login with the password + Create new login with the username + Password history + Show tips + Generator history + Clear history + Clear generator history? + This will remove all items from the history. + Password history + Clear history + Clear password history? + This will remove all passwords from the history. + Watchtower + Password strength + Security + Maintenance + Pwned Passwords + Passwords that have been exposed in data breaches. Such passwords should be changed immediately. + Reused Passwords + Don\'t use the same password on multiple websites. Generate unique passwords to improve security. + Vulnerable Accounts + Sites that were affected by a data breach since you last changed a password. Change your password to keep your account safe. + Unsecure Websites + Change the URLs that use HTTP protocol to use HTTPS protocol, as the latter utilizes the most advanced encryption available. + Inactive two-factor authentication + Sites that have two-factor authentication available but you haven\'t set it up yet. + Available Passkeys + Sites that have passkey available but you haven\'t set it up yet. It\'s simpler and more secure then a password. + Incomplete Items + Helps you identify missing or incomplete data in your vault. This can refer to identities with missing names or logins without usernames. + Expiring Items + Items that have expired or are expiring soon. + Duplicate URIs + Items that have one or more URIs that cover the same websites after applying the match detection. + Trashed Items + Items that have been moved into the trash. Having too many items in the trash may slow down operations with your vault. + Empty Folders + Folders that do not have any items in them. + Duplicate Items + Helps you identify and eliminate duplicate items in your vault. + Compromised Accounts + Check data breaches by a username or email address. + Change app password + Change password + Biometric authentication + + Change app password + App password never gets stored on the device nor sent over the network. It is used to generate a secret key that is used to encrypt the local data. + Unless you suspect unauthorized access or discover a malware on the device, there is no need to change the password if it is a strong, unique password. + Contact us + Your message + Use English to ensure that your feedback doesn\'t get misunderstood. + We appreciate the time that you spend sending us a message. Your message goes directly to us and we use it to troubleshoot issues, make product improvements and fix problems. While we may not reply to every report, we\'re reviewing and working on improvements & fixing issues as fast as we can. + Accounts + Add account + Team behind the app + I\'m a Software engineer from Ukraine. I specialize on app design and development. + Follow me + Search + Settings + Search settings + Appearance + Autofill + Development + Experimental + Settings + Notifications + Other + Permissions + Security + Keyguard Premium + Watchtower + Open-source licenses + Accounts + Add & view accounts + Autofill + Android Autofill & Credential services + Security + Biometrics, change password, vault timeout + Keyguard Premium + Unlock features & support app development + Watchtower + Compromised services, vulnerable passwords + Notifications + Alerts + Appearance + Language, theme and animations + Development + Test settings for development + Other + Community websites, app info + Show labels on navigation buttons + App version + App build date + Team behind the app + Reddit community + GitHub project + Crowdin project + Open-source licenses + Download APK file + Load App icons + Load Website icons + Queuing website icon might leak the website address to internet provider + Rich text formatting + Use Markdown to format notes + Language + Suggest translation + Font + Rate on Play Store + Tint color + Theme + Use contrast black theme + Open links in external browser + Conceal fields + Conceal sensitive info, such as passwords and credit card numbers + + Crash + Credential provider + Passkeys, passwords and data services + Privacy policy + Contact us + Experimental + Change app password + Require app password + In addition to your regular security settings, your app password will be required after this time or when biometry settings are changed + Immediately + Never + Send crash reports + Transition animation + Erase app data + Close the app and erase all local app data + Allow screenshots + Show the content of the app when switching between recent apps and allow capturing a screen + Hide the content of the app when switching between recent apps and forbid capturing a screen + Data safety + Lock vault + Lock after a reboot + Lock the vault after a device reboot + Lock when screen turns off + Lock the vault after a few seconds once the screen is off + Lock after a delay + Immediately + Never + Persist vault key on a disk + Vault key is persisted on an internal storage + Vault is locked after the app is unloaded from the memory + Storing a vault key on a disk is a security risk. If the device\'s internal storage is compromised, the attacker will gain access to the local vault data. + Permissions + Features overview + Biometric unlock + + Biometric unlock + Keep the screen on while viewing items + Autofill service + Use the Android Autofill Framework to assist in filling login information into other apps on the device + Auto-copy one-time passwords + When filling a login information, automatically copy one-time passwords + Inline suggestions + Embeds autofill suggestions directly into compatible keyboards + Manual selection + Displays an option to manually search a vault for an entry + Respect Autofill disabled flag + Disables autofill for a browser field that has autofill disabled flag set + Note that some websites are notorious for disabling autofill for a password field as well as some browsers are notorious for ignoring the autofill disabled flag + Ask to save data + Asks for updating the vault when filling of a form has completed + Auto-save app or website info + Automatically clear clipboard + Immediately + Never + One-time password notification duration + When you autofill a login item that has a one-time password, the notification with verification code will popup for at least the defined duration + Never + About Keyguard membership + The Premium unlocks extra features and funds a development of the app. Thank you for supporting us! ❤️ + Subscriptions + Products + Failed to load a list of subscriptions + Failed to load a list of products + Active + Will not renew + Manage on Play Store + Post notifications + Used to post downloading notifications + Camera + Used to scan QR codes + Allow two panel layout in landscape mode + Allow two panel layout in portrait mode + Dark + Light + Disabled + Dynamic + Crossfade + Developed specifically to increase legibility for readers with low vision, and to improve comprehension + Features Overview + Keyguard Premium + Multiple Accounts + Sign-in to multiple accounts simultaneously. + Two-way sync + Add or edit items and sync the changes back. + Offline editing + Add or edit items without internet connection. + Search + Search by anything + Name, email, password, phone number etc. + Filter + Filter by folder, organization, type etc. + Multiple keywords + Search by \'bitw test\' to find your \'Bitwarden Test Account\' item. + Watchtower + Pwned passwords + Find items with exposed in data breaches passwords. + Password strength + Find items with weak passwords. + Reused passwords + Find items with reused passwords. + Inactive 2FA + Find logins with available TOTP two-factor authentication. + Unsecure websites + Find websites that use HTTP protocol, auto-fix to HTTPS. + Incomplete items + Find empty items that might need updates. + Expiring items + Find expired or soon to be expired items. + Duplicate items + Find and merge duplicate items. + Misc + Multi-selection + Merge ciphers, fasten the refactoring with batch operations. + Show as Barcode + Encode a text as different barcodes. + Generator + Generate passwords or usernames. + Data safety + Local data + Local data consists of Downloads, User settings, Vault. They are stored in the internal storage of a device, which can only be accessed by the Android system or the Keyguard. + Downloads + User settings + The User settings are encrypted using a device-specific key. + Vault + The Vault is encrypted using a Key, derived from the App password using following steps: + The Salt and the Hash is then stored locally on a device, to later generate a master key to unlock the vault. + Unlocking a Vault means storing a correct Key in a device\'s RAM, gaining an ability to read and modify encrypted Vault. + Remote data + Remote data is stored on Bitwarden servers with zero-knowledge encryption. + diff --git a/common/src/commonMain/resources/MR/ja-rJP/plurals.xml b/common/src/commonMain/resources/MR/ja-rJP/plurals.xml new file mode 100644 index 00000000..5f2db8ad --- /dev/null +++ b/common/src/commonMain/resources/MR/ja-rJP/plurals.xml @@ -0,0 +1,2 @@ + + diff --git a/common/src/commonMain/resources/MR/ja-rJP/strings.xml b/common/src/commonMain/resources/MR/ja-rJP/strings.xml new file mode 100644 index 00000000..69e39305 --- /dev/null +++ b/common/src/commonMain/resources/MR/ja-rJP/strings.xml @@ -0,0 +1,868 @@ + + + OK + 閉じる + はい + いいえ + + 名前 + アカウント名 + ユーザー名 + パスワード + アプリのパスワード + 現在のパスワード + 新しいパスワード + メールアドレス + 確認済み + 未確認 + メールアドレスの表示 + 公開 URL + URL + + アクセス数 + もっと詳しく + 電話番号 + パスポート番号 + 免許証番号 + カード番号 + カード番号なし + ブランド + セキュリティコード + Valid from + Valid to + Card expiry month + Card expiry year + カードの名義人名 + 有効開始 + 有効期限 + 会社名 + 同期 + + 非表示 + + 表示 + + なし + + 社会保障番号 + 市町村 + 都道府県 + 情報 + キャンセル + 続ける + + 住所 + 郵便番号 + 引っ張って検索 + 保存 + URI + URI + メモ + メモ + 添付ファイル + 添付ファイルなし + Expiring soon + Incomplete data + This item is missing some of the important information. + アイテム + アイテム + %1$s アイテム + すべてのアイテム + アイテムなし + フォルダーなし + 新しいフォルダー + フォルダー + フォルダー + フォルダーなし + コレクションなし + コレクション + コレクション + コレクションなし + 保管庫 + 組織 + 組織 + 組織なし + その他 + 統合を追加 + アカウント + アカウント + アカウントなし + アカウントがありません + タイプ + オプション + Send + リセット + 長さ + セキュリティ + 連絡先情報 + タイトル + + ミドルネーム + + Full name + 住所1 + 住所2 + 住所3 + 名前の変更 + Select type + 自動入力 + パスキー + Create a passkey + Unlock Keyguard + Confirming auth request… + パスキー + + Signature counter + + Relying party + + Discoverable + ユーザー名 + 表示名 + API キー + ドメイン + 編集 + 削除 + 削除 + 履歴から削除 + 再利用パスワード + 再利用パスワード + ワンタイムパスワード + 認証キー + Use + Save passkey + パスキーが利用可能です + 2段階認証が利用可能です + カスタム + システム設定に従う + + 近日公開 + Powered by + 確認コード + 確認コードを再送信 + 確認メールをリクエストしました + ウェブ保管庫 + ウェブ保管庫を開く + + 記憶する + + ごみ箱 + + ダウンロード + ダウンロード + ダウンロードなし + 重複なし + 暗号化 + + キー + ハッシュ + ソルト + 256-bit AES + ランダムな%1$dビットのデータ + なし + テキスト + リンクされたアプリ + リンクされた URI + カスタムフィールド + セキュアメモを表示 + セキュアメモを非表示 + マスターパスワードのヒント + フィンガープリントフレーズ + フィンガープリントとは + Bitwarden プレミアム + 非公式 Bitwarden サーバー + 最終同期時刻: %1$s + 名前の変更 + 色の変更 + マスターパスワードのヒントの変更 + ログアウト + ログイン + ウェブ保管庫へアクセスして、メールアドレスを確認してください。 + プレミアム会員にアップグレードして他の素晴らしい追加機能を使えるようにします。 + 2段階認証 + ログインする際にセキュリティキー、認証アプリ、SMS、メールなど、別のデバイスによる認証を必要とします。 + アクティブ + アイテム + ログアウト + ログアウトしますか? + 同期されていない変更はすべて失われます! + 名前の変更 + 名前の変更 + フォルダーを削除しますか? + フォルダーを削除しますか? + このアイテムはすぐに削除されます。この操作は元に戻せません。 + 最近開いたアイテム + よく開くアイテム + 詳細を表示 + 保存先 + お気に入りに追加 + お気に入りから削除 + 認証の再要求の有効化 + 認証の再要求の無効化 + 編集 + 統合… + コピー… + フォルダーへ移動 + 名前の変更 + 名前の変更 + パスワードの追加 + パスワードの追加 + パスワードの変更 + パスワードの変更 + パスワードの履歴を表示 + ごみ箱へ移動 + 元に戻す + 完全に削除 + 関連するアイテムをごみ箱に移動 + 開く… + 送信… + ファイルマネージャーで開く + Delete local file + View parent item + 常にキーボードを表示 + 保管庫を同期 + 保管庫をロック + フォルダー名の変更 + 既知のデータ漏洩でメールアドレスをチェック + 既知のデータ漏洩でユーザー名をチェック + 既知のデータ漏洩でパスワードをチェック + 既知のデータ漏洩でウェブサイトをチェック + アプリを開く + ウェブサイトを開く + ドキュメントを開く + ブラウザで開く + メインページを開く + Play ストアで開く + %1$s で開く + 開く… + アカウントの削除方法 + 非セキュア + 一致するアプリ + 一致検出方法 + ベースドメイン + トップレベルドメインとセカンドレベルドメインによってリソースを照合します。 + ホスト + ホスト名と (指定されている場合) ポートでリソースを照合します。 + 前方一致 + 検出されたリソースが URI で始まる場合にリソースを照合します。 + 完全一致 + 検出されたリソースが URI と完全一致する場合にリソースを照合します。 + 正規表現 + 正規表現でリソースを照合します。高度なオプションです。 + しない + 自動入力アイテム検索時に URI を無視します。 + %1$s linked to the password + %1$s linked to the username + %1$s linked to the cardholder name + %1$s linked to the expiration month + %1$s linked to the expiration year + %1$s linked to the card code + %1$s linked to the card brand + %1$s linked to the card number + %1$s linked to the title + %1$s linked to the middle name + %1$s linked to the address line (1) + %1$s linked to the address line (2) + %1$s linked to the address line (3) + %1$s linked to the city + %1$s linked to the state + %1$s linked to the postal code + %1$s linked to the country + %1$s linked to the company + %1$s linked to the email + %1$s linked to the phone number + %1$s linked to the SSN + %1$s linked to the username + %1$s linked to the passport number + %1$s linked to the license number + %1$s linked to the first name + %1$s linked to the last name + %1$s linked to the full name + %1$s linked to an unknown field + 共有… + %1$d 件選択済み + コピー + 値をコピー + URL をコピー + URI をコピー + パッケージ名をコピー + パスワードをコピー + ユーザー名をコピー + メールアドレスをコピー + 電話番号をコピー + パスポート番号をコピー + 免許証番号をコピー + カード番号をコピー + カードの名義人名をコピー + 有効期限年をコピー + 有効期限月をコピー + CVV コードをコピー + ワンタイムパスワードをコピー + 秘密鍵をコピー + Keyguard のロック解除 + Keyguard を開く + 1月 + 2月 + 3月 + 4月 + 5月 + 6月 + 7月 + 8月 + 9月 + 10月 + 11月 + 12月 + 上に移動 + 下に移動 + 削除 + アイテムを削除しますか? + 追加 + FIDO2 WebAuthn + WebAuthn の認証 + アプリに戻る + + 空にすることはできません + + 空にすることはできません + カスタムドメインである必要があります + US-ASCII 文字のみである必要があります + 少なくとも%1$d文字以上である必要があります + %1$d文字である必要があります + 無効なドメイン + 無効なメールアドレス + 無効な URL + 無効な URI + 無効なカード番号 + パスワードが間違っています + OTP コードの生成に失敗しました + Failed to create a passkey + Failed to authorize a request + + バーコード + バーコードとして表示 + QR コードをスキャンして、この認証コードを別のデバイスにコピーします。 + + 日付の選択 + + 色の選択 + + アカウントの削除方法 + ウェブサービスからアカウントを削除する方法に関する情報 + + 簡単 + + 普通 + + 難しい + + 限定的 + + 不可能 + メール送信 + ウェブサイトを検索 + 手順なし + 2段階認証 + 2段階認証対応ウェブサイト一覧 + ウェブサイトを検索 + パスキー + パスキー対応ウェブサイト一覧 + ウェブサイトを検索 + + データ漏洩 + 漏洩したアカウントデータは、悪意のある者に機密性の高い個人情報や財務情報へのアクセスを提供し、なりすましや金融詐欺、その他の形態のサイバー犯罪につながる可能性があります。 + 漏洩は見つかりませんでした + 漏洩したアカウントは見つかりませんでした + 漏洩 + 発生日: %1$s + 報告日: %1$s + データ漏洩のチェックに失敗しました。現在オフラインになっている可能性があります。 + データ漏洩 + データ漏洩で流出したパスワードは、解読にかかる時間が大幅に短く、決して使用すべきではありません。 + パスワードは漏洩しています + このパスワードは、既知のデータ漏洩で確認されています。オンラインセキュリティを保護するために、すぐにパスワードを変更してください。 + 漏洩は見つかりませんでした + データ漏洩のチェックに失敗しました。現在オフラインになっている可能性があります。 + + Large Type + 大きい画面で表示 + 大きい画面で表示して保管庫をロック + アプリの選択 + インストール済みアプリを検索 + システムアプリ + アプリがありません + フォルダーの選択 + 新しいフォルダーの作成: + + この組織はコピーの所有権を持ちます。あなたが直接の所有者になることはありません。 + メール転送 + メール転送 + メール転送を削除しますか? + メール転送を削除しますか? + メール転送統合 + メール転送なし + ローカルデータを保存するための暗号化された保管庫を作成します。 + アプリのパスワード + 生体認証 + 保管庫の作成 + クラッシュレポートを送信 + 保管庫を作成 + アプリデータを消去 + アプリを閉じて、ローカルのアプリデータをすべて消去します + 保管庫がロックされています。続行するには、アプリのパスワードを入力してください。 + ロック解除 + + 保管庫のロック解除 + + 生体認証を使用して保管庫のロックを解除します + ユーザー認証が必要です。続行するには、アプリのパスワードを入力してください。 + Verify + 同期ステータス + 最新の状態 + 保留中 + 同期中 + 同期失敗 + 新しいアイテム + アイテムの編集 + テキストを %1$s または %2$s のように修飾します。 一部の Markdown シンタックスがサポートされています。 + 斜体 + 太字 + プレビュー表示 + 認証の再要求 + 情報を表示または自動入力する際に再度認証を求める + Bitwarden アカウントを追加 + 私たちは、Bitwarden, Inc. またはその子会社および関連会社と、いかなる形においても、提携、承認、支持、または公式な関係はありません。 + + 非公式の Bitwarden クライアントで CAPTCHA 認証を通過するには、クライアントシークレットを指定する必要があります。クライアントシークレットを取得するには、ウェブ保管庫 / 設定 / API キー にアクセスしてください。 + + クライアントシークレット + サインイン + 地域 + アメリカ合衆国 + ヨーロッパ + カスタム (セルフホスティング) + HTTP ヘッダー + HTTP ヘッダー + サーバーへ送信されるすべてのリクエストにカスタム HTTP ヘッダーを追加できます。 + キー + + 追加 + サーバー URL + セルフホスティングしている Bitwarden のベース URL を指定してください。 + カスタム環境 + 各サービスのベース URL を個別に指定することができます。 + ウェブ保管庫サーバー URL + API サーバー URL + アイコンサーバー URL + ID サーバー URL + 認証 + この認証方法はまだサポートされていません。 + 認証アプリに表示された認証コードを入力してください。 + %1$s に送信された確認コードを入力してください。 + YubiKey 認証コードを手動で入力してください。下のフィールドにカーソルを置いて、YubiKey をトリガーしてください。 + 認証アプリ + Duo (組織) + FIDO2 ウェブ認証 + メールアドレス + FIDO U2F + YubiKey を USB 経由で接続してください + USB OTG の対応が必要です。 + YubiKey の金色のセンサーをタッチしてください。 + YubiKey をデバイスの背面に平らに当ててください + NFC の対応が必要です。 + YubiKey の読み取りに失敗しました + FIDO2 WebAuthn を使用するには、Butwarden ウェブ保管庫バージョン %1$s 以上を使用する必要があります。古いバージョンでは、認証の結果が誤って公式の Bitwarden アプリに転送されます。 + アクセスの確認 + このデータは保護されています。続行するには、アプリのパスワードを入力してください。 + + アクセスの確認 + + 生体認証を使用してアクセスを確認し、このデータのロックを解除します。 + 保管庫 + Send + パス生成 + 監視 + 設定 + ロックされています + テキスト + ファイル + ログイン + カード + ID + メモ + パスキー + テキスト + 真偽値 + リンク + + 漏洩 + 非常に強い + 強い + 良い + 普通 + 弱い + 非常に強いパスワード + 強いパスワード + 良いパスワード + 普通のパスワード + 弱いパスワード + フィルター + フィルターは利用できません + 並べ替え + 並べ替えは利用できません + タイトル + アルファベット順 + アルファベット逆順 + アクセス数 + 多い順 + 少ない順 + 更新日 + 新しい順 + 古い順 + 有効期限 + 新しい順 + 古い順 + 削除日 + 新しい順 + 古い順 + パスワード + アルファベット順 + アルファベット逆順 + パスワード更新日 + 新しい順 + 古い順 + パスワード強度 + 弱い順 + 強い順 + 保管庫を検索 + 新しいアイテム + There are no suggested items available for this context + + セキュリティコード + %1$s (%2$s) に保存しました + パスワードの最終更新時刻: %1$s + パスキー作成日時: %1$s + 最終更新時刻: %1$s + 作成日時: %1$s + 削除日時: %1$s + 有効期限切れ: %1$s + 有効期限: %1$s + 削除予定日時: %1$s + + 通話 + + SMS + + メール + + ルート + Send + Send を検索 + 新しいアイテム + この共有にアクセスするにはパスワードが必要です + パスワード生成 + ユーザー名生成 + パスワード生成 + 生成 + 再生成 + パスフレーズ + ランダムなパスフレーズは、記憶性とセキュリティの最良の組み合わせを提供します。 + 区切り文字 + 英単語の先頭を大文字にする + 数字を含める + ユーザー名 + 区切り文字 + カスタムワード + 英単語の先頭を大文字にする + 数字を含める + ランダムな文字 + 強力なパスワードは、少なくとも%1$d文字、大文字、小文字、数字、記号を含んでいます。 + 数字 + 記号 + 大文字 + 小文字 + + 類似した文字を除外 + + あいまいな文字を除外 + Catch-All メールアドレス + キャッチオールメールアドレスは、ドメインに送信されたすべてのメールを受信できるメールアドレスです。使用する前に、メールホスティングがこの機能をサポートしていることを確認してください。 + + ドメイン + プラスメールアドレス + プラスアドレスとは、%1$s のようなメールアドレスに送信されたすべてのメールが、あなたのアカウントに送信されることを意味します。これにより、さまざまな人、サイト、メーリングリストに提供するための、メールアドレスのバリエーションを多く持つことができます。使用する前に、メールホスティングがこの機能をサポートしていることを確認してください。 + メールアドレス + サブドメインメールアドレス + サブドメインアドレスとは、%1$s のようなメールアドレスに送信されたすべてのメールが、あなたのアカウントに送信されることを意味します。これにより、さまざまな人、サイト、メーリングリストに提供するための、メールアドレスのバリエーションを多く持つことができます。使用する前に、メールホスティングがこの機能をサポートしていることを確認してください。 + メールアドレス + 転送メールアドレス + このパスワードで新しいログインを作成 + このユーザー名で新しいログインを作成 + パスワードの履歴 + ヒントを表示 + 生成履歴 + 履歴を消去 + 生成履歴を消去しますか? + すべてのアイテムが履歴から削除されます + パスワードの履歴 + 履歴を消去 + パスワードの履歴を消去しますか? + すべてのパスワードが履歴から削除されます + 監視 + パスワード強度 + セキュリティ + メンテナンス + 漏洩したパスワード + データ漏洩で公開されたパスワード。このようなパスワードはすぐに変更すべきです。 + 再利用パスワード + 複数のウェブサイトで同じパスワードを使用しないでください。セキュリティを向上させるために、一意のパスワードを生成してください。 + 脆弱なアカウント + パスワードを最後に変更してから、データ漏洩の影響を受けたサイトです。アカウントの安全性を保つために、パスワードを変更してください。 + 安全でないウェブサイト + HTTP プロトコルを使用している URL を、より高度な暗号化を利用した HTTPS プロトコルを使用するように変更します。 + 非アクティブな2段階認証 + 2段階認証が利用できるサイトですが、まだ設定していません。 + パスキーが利用可能 + パスキーを設定可能なサイトですが、まだ設定していません。パスキーはパスワードよりも簡単で安全です。 + 不完全なアイテム + 保管庫内の不足または不完全なデータを識別するのに役立ちます。これには、名前が欠落している ID や、ユーザー名が欠落しているログインが含まれます。 + 期限切れのアイテム + 有効期限切れになったアイテムまたはまもなく期限切れになるアイテム。 + 重複した URI + 一致検出を適用した後、同じウェブサイトをカバーする URI が1つ以上あるアイテム。 + ごみ箱のアイテム + ごみ箱に移動されたアイテムです。ごみ箱にアイテムが多すぎると、保管庫の操作が遅くなることがあります。 + 空のフォルダー + アイテムが何も入っていないフォルダー。 + 重複したアイテム + 保管庫内の重複するアイテムを特定して削除するのに役立ちます。 + 漏洩したアカウント + ユーザー名またはメールアドレスでデータ漏洩をチェックします。 + アプリパスワードの変更 + パスワードの変更 + 生体認証 + + アプリパスワードの変更 + アプリのパスワードは、デバイスに保存されることも、ネットワーク経由で送信されることもありません。ローカルデータを暗号化するために使用される秘密鍵を生成するために使用されます。 + 不正アクセスが疑われる場合やデバイスにマルウェアを発見した場合を除いて、強力で一意のパスワードであれば、変更する必要はありません。 + お問い合わせ + メッセージ + フィードバックが誤解されないように、英語を使用してください。 + メッセージをお送りいただきありがとうございます。メッセージは私たちに直接届き、トラブルシューティングや製品の改善、問題の解決に役立てています。すべての報告に返信できない場合もありますが、できる限り早く改善や問題の解決に取り組んでいます。 + アカウント + アカウントを追加 + アプリの開発チーム + 私はウクライナ出身のソフトウェアエンジニアです。アプリの設計と開発を専門としています。 + ソーシャルメディア + 検索 + 設定 + 設定を検索 + 外観 + 自動入力 + 開発 + 実験的機能 + 設定 + 通知 + その他 + 権限 + セキュリティ + Keyguard Premium + 監視 + オープンソースライセンス + アカウント + アカウントの追加と表示 + 自動入力 + Android の自動入力サービス + セキュリティ + 生体認証、パスワードの変更、保管庫のタイムアウト + Keyguard Premium + 機能をアンロックして開発をサポート + 監視 + 侵害されたサービス、脆弱なパスワード + 通知 + アラート + 外観 + 言語、テーマ、アニメーション + 開発 + 開発用テスト設定 + その他 + コミュニティ、アプリ情報 + ナビゲーションのラベル表示 + アプリのバージョン + アプリのビルド日 + アプリの開発チーム + Reddit コミュニティ + GitHub プロジェクト + Crowdin プロジェクト + オープンソースライセンス + APK ファイルのダウンロード + アプリアイコンの読み込み + ウェブサイトアイコンの読み込み + ウェブサイトのアイコンを取得すると、インターネットプロバイダーにウェブサイトの URL が漏洩する可能性があります。 + テキストの装飾 + Markdown でメモをフォーマットします + 言語 + 翻訳を提案 + フォント + Play ストアでアプリを評価 + 色合い + テーマ + 高コントラストの黒いテーマを使用 + 外部ブラウザでリンクを開く + フィールドを隠す + パスワードやクレジットカード番号などの機密情報を隠します + + クラッシュ + 認証プロバイダー + パスキー、パスワード、データサービス + プライバシーポリシー + お問い合わせ + 実験的機能 + アプリのパスワードを変更 + アプリのパスワードの要求 + 通常のセキュリティ設定に加えて、この期間の経過後または生体認証の設定が変更された場合は、アプリのパスワードが必要になります。 + 即時 + なし + クラッシュレポートを送信 + 遷移アニメーション + アプリデータを消去 + アプリを閉じて、ローカルのアプリデータをすべて消去します + スクリーンショットを許可 + 最近のアプリ画面でアプリのコンテンツを非表示にし、画面キャプチャを許可します。 + 最近のアプリ画面でアプリのコンテンツを非表示にし、画面キャプチャを禁止します。 + データセーフティ + 保管庫をロック + 再起動後にロック + デバイスの再起動後に保管庫をロック + 画面消灯時にロック + 画面がオフになってから数秒後に保管庫をロックします。 + 保管庫のタイムアウト + 即時 + なし + 保管庫のキーをデバイスに保持 + 保管庫のキーを内部ストレージに保持します。 + アプリがメモリからアンロードされた後、保管庫はロックされます。 + デバイスに保管庫のキーを保存することはセキュリティリスクとなります。デバイスの内部ストレージが侵害された場合、攻撃者はローカルの保管庫のデータにアクセスすることができます。 + 権限 + 機能の概要 + 生体認証によるロック解除 + + 生体認証によるロック解除 + アイテムの表示中は画面をオンのままにする + 自動入力サービス + Android 自動入力フレームワークを使用して、デバイス上の他のアプリにログイン情報を入力します。 + ワンタイムパスワードの自動コピー + ログイン情報を入力するときに、ワンタイムパスワードを自動的にコピーします。 + インライン自動入力の候補 + 互換性のあるキーボードに自動入力の候補を表示します。 + 手動選択 + 保管庫内のエントリを手動で検索するオプションを表示します。 + 自動入力無効フラグに従う + 自動入力無効フラグが設定されているブラウザフィールドの自動入力を無効にします。 + 一部のウェブサイトではパスワードフィールドの自動入力が無効化されており、一部のブラウザでは自動入力無効化フラグが無視されることに注意してください。 + データを保存するか尋ねる + フォームの入力が完了したときに保管庫を更新するかどうかを尋ねます。 + アプリまたはウェブサイト情報の自動保存 + クリップボードを自動的に消去 + 即時 + しない + ワンタイムパスワード通知の表示時間 + ワンタイムパスワードを含むログインアイテムを自動入力すると、認証コードの通知が指定された時間表示されます。 + なし + Keyguard メンバーシップについて + プレミアムプランは、追加の機能をアンロックして、アプリの開発を支援します。ご支援いただきありがとうございます!❤️ + サブスクリプション + プロダクト + サブスクリプションのリストの読み込みに失敗しました + プロダクトのリストの読み込みに失敗しました + アクティブ + 更新されません + Play ストアで管理 + 通知 + ダウンロード通知の表示に使用されます + カメラ + QR コードのスキャンに使用されます + 横画面モードで2パネルレイアウトを使用 + 縦画面モードで2パネルレイアウトを使用 + ダーク + ライト + 無効 + ダイナミック + クロスフェード + 視覚障害者の可読性を高め、理解を向上させるために、特別に開発されました。 + 機能の概要 + Keyguard Premium + 複数アカウント + 複数のアカウントに同時にログインできます。 + 双方向同期 + アイテムを追加または編集すると、変更が同期されます。 + オフライン編集 + インターネット接続がなくても、アイテムを追加または編集できます。 + 検索 + 何でも検索 + 名前、​メールアドレス、​パスワード、​電話番号など。 + 絞り込み + フォルダー、​組織、​タイプなどで絞り込めます。 + 複数キーワード + 「bitw test」と入力して、「Bitwarden Test Account」アイテムを検索できます。 + 監視 + 漏洩したパスワード + データ漏洩で流出したパスワードが使用されているアイテムを見つけます。 + パスワード強度 + 脆弱なパスワードを使用しているアイテム見つけます。 + 再利用パスワード + 再利用されたパスワードを使用しているアイテムを見つけます。 + 非アクティブ 2FA + TOTP 2段階認証が利用可能なログインを見つけます。 + 安全でないウェブサイト + HTTP プロトコルを使用しているウェブサイトを見つけ、HTTPS に自動修正します。 + 不完全なアイテム + 編集が必要な空のアイテムを見つけます。 + 期限切れのアイテム + 有効期限切れまたは期限が近いアイテムを見つけます。 + 重複したアイテム + 重複したアイテムを見つけて統合します。 + その他 + 複数選択 + 情報を統合し、バッチ操作で整理を高速化します。 + バーコードとして表示 + テキストをバーコードとしてエンコードします。 + パスワード生成 + パスワードまたはユーザー名を生成します。 + データセーフティ + ローカルデータ + ローカルデータは、ダウンロード、ユーザー設定、保管庫で構成されています。これらはデバイスの内部ストレージに保存されており、Android システムまたは Keyguard からのみアクセスできます。 + ダウンロード + ユーザー設定 + ユーザー設定はデバイス固有のキーを使用して暗号化されます。 + 保管庫 + 保管庫は、以下の手順でアプリのパスワードから派生したキーを使用して暗号化されます: + ソルトとハッシュは、後で保管庫をロック解除するマスターキーを生成するため、デバイス上に保存されます。 + 保管庫のロック解除とは、デバイスの RAM に正しいキーを保存し、暗号化された保管庫を読み書きできるようになることを意味します。 + リモートデータ + リモートデータは、ゼロ知識暗号化を使用して Bitwarden のサーバー上に保存されます。 + diff --git a/common/src/commonMain/resources/MR/ko-rKR/plurals.xml b/common/src/commonMain/resources/MR/ko-rKR/plurals.xml new file mode 100644 index 00000000..5f2db8ad --- /dev/null +++ b/common/src/commonMain/resources/MR/ko-rKR/plurals.xml @@ -0,0 +1,2 @@ + + diff --git a/common/src/commonMain/resources/MR/ko-rKR/strings.xml b/common/src/commonMain/resources/MR/ko-rKR/strings.xml new file mode 100644 index 00000000..243a5350 --- /dev/null +++ b/common/src/commonMain/resources/MR/ko-rKR/strings.xml @@ -0,0 +1,868 @@ + + + 확인 + 닫기 + + 아니오 + + 이름 + 계정 이름 + 사용자 이름 + 비밀번호 + 앱 비밀번호 + 현재 비밀번호 + 새 비밀번호 + 이메일 + 확인됨 + 확인되지 않음 + 이메일 보기 권한 + 공개 URL + URL + + 조회수 + 자세히 알아보기 + 전화 번호 + 여권 번호 + 운전면허 번호 + 카드 번호 + 카드 번호 없음 + 브랜드 + 보안 코드(CVV) + 유효 시작 날짜 + 만료 날짜 + Card expiry month + Card expiry year + 카드 소유자 이름 + 유효 시작 날짜 + 만료 날짜 + 회사 + 동기화 + + 숨김 + + 표시 + + 비어 있음 + + SSN + + 도/주 + 정보 + 취소 + 계속 + 국가 + 주소 + 우편 번호 + 아래로 당겨 검색 + 저장 + URI + URI + 메모 + 메모 + 첨부 파일 + 첨부 파일 없음 + 곧 만료 + 불완전 데이터 + 중요한 정보가 비어 있는 항목입니다. + 항목 + 항목 + %1$s개 항목 + 모든 항목 + 항목 없음 + 폴더 없음 + 새 폴더 + 폴더 + 폴더 + 폴더 없음 + 컬렉션 없음 + 컬렉션 + 컬렉션 + 컬렉션 없음 + 내 보관함 + 조직 + 조직 + 조직 없음 + 기타 + 통합 기능 추가 + 계정 + 계정 + 계정 없음 + 계정 없음 + 유형 + 옵션 + Send + 초기화 + 길이 + 보안 + 연락처 정보 + 제목 + 이름 + 가운데 이름 + + Full name + 주소 1 + 주소 2 + 주소 3 + 이름 바꾸기 + Select type + 자동 완성 + 패스키 + 패스키 만들기 + Keyguard 잠금 해제 + Confirming auth request… + 패스키 + + 서명 카운터 + + Relying party + + Discoverable + Username + Display name + API 키 + 도메인 + 편집 + 삭제 + 제거 + 기록에서 제거 + 재사용 비밀번호 + 재사용 비밀번호 + OTP + 인증기 키 + 사용 + 패스키 저장 + 패스키 사용 가능 + 2단계 인증 사용 가능 + 사용자 지정 + 시스템 설정에 따름 + + 출시 예정 + 기술 지원: + 인증 코드 + 인증 코드 다시 보내기 + 인증 메일을 보냈습니다. + 웹 보관함 + 웹 보관함 열기 + + 이 설정 기억 + + 휴지통 + + 다운로드 + 다운로드 + 다운로드 없음 + 중복 항목 없음 + 암호화 + + + 해시 + 솔트 + 256비트 AES + 무작위 데이터 %1$d비트 + 없음 + 텍스트 + 연결된 앱 + 연결된 URI + 사용자 지정 필드 + 보안 노트 보이기 + 보안 노트 숨기기 + 마스터 비밀번호 힌트 + 핑거프린트 구문 + 핑거프린트가 뭔가요? + Bitwarden 프리미엄 + 비공식 Bitwarden 서버 + %1$s에 마지막으로 동기화함 + 이름 바꾸기 + 색상 바꾸기 + 마스터 비밀번호 힌트 변경 + 로그아웃 + 로그인 + 웹 보관함에 접속하여 이메일 주소를 인증하세요. + 계정을 프리미엄으로 업그레이드하고 다양한 추가 기능을 잠금 해제하세요. + 2단계 인증 + 보안 키, 인증 앱, SMS, 이메일 등 다른 기기를 통한 로그인 인증을 요청합니다. + 사용 중 + 항목 + 로그아웃 + 로그아웃하시겠습니까? + 동기화하지 않은 변경 사항이 모두 사라집니다! + 이름 바꾸기 + 이름 바꾸기 + 폴더를 삭제하시겠습니까? + 폴더를 삭제하시겠습니까? + 항목이 즉시 삭제됩니다. 이 작업은 되돌릴 수 없습니다. + 최근에 연 항목 + 자주 연 항목 + 자세히 보기 + Save to + 즐겨찾기에 추가 + 즐겨찾기에서 제거 + 인증 재요청 켜기 + 인증 재요청 끄기 + 편집 + …에 병합 + …로 복사 + 폴더로 이동 + 이름 바꾸기 + 이름 바꾸기 + 비밀번호 추가 + 비밀번호 추가 + 비밀번호 변경 + 비밀번호 변경 + 비밀번호 생성 기록 + 휴지통 + 복원 + 완전히 삭제 + 연관 항목을 휴지통으로 이동 + Open with… + Send with… + Open in a file manager + Delete local file + View parent item + 키보드 항상 보이기 + 보관함 동기화 + 보관함 잠그기 + 폴더 이름 바꾸기 + 이메일 유출 확인 + 사용자 이름 유출 확인 + 비밀번호 유출 확인 + 웹사이트 유출 확인 + 앱 실행 + 웹사이트 열기 + 문서 열기 + 브라우저 실행 + 메인 페이지 열기 + Play 스토어 실행 + %1$s 앱으로 열기 + 다른 앱으로 열기 + 회원 탈퇴는 어떻게 하지? + 안전하지 않음 + 앱 일치 + 일치 인식 + 기본 도메인 + 최상위 및 2단계 도메인으로 리소스를 감지합니다. + 호스트 + 호스트 이름과 포트로 리소스를 감지합니다. + 다음으로 시작 + 리소스가 URI로 시작할 때 감지합니다. + 정확히 일치 + 리소스가 정확히 URI와 일치할 때 감지합니다. + 정규 표현식 + 정규 표현식으로 리소스를 감지합니다. 고급 옵션입니다. + 인식 안 함 + 자동 완성 항목을 검색할 때 URI를 무시합니다. + %1$s linked to the password + %1$s linked to the username + %1$s linked to the cardholder name + %1$s linked to the expiration month + %1$s linked to the expiration year + %1$s linked to the card code + %1$s linked to the card brand + %1$s linked to the card number + %1$s linked to the title + %1$s linked to the middle name + %1$s linked to the address line (1) + %1$s linked to the address line (2) + %1$s linked to the address line (3) + %1$s linked to the city + %1$s linked to the state + %1$s linked to the postal code + %1$s linked to the country + %1$s linked to the company + %1$s linked to the email + %1$s linked to the phone number + %1$s linked to the SSN + %1$s linked to the username + %1$s linked to the passport number + %1$s linked to the license number + %1$s linked to the first name + %1$s linked to the last name + %1$s linked to the full name + %1$s linked to an unknown field + 공유… + %1$d개 항목 선택됨 + 복사 + 값 복사 + URL 복사 + URI 복사 + 패키지 이름 복사 + 비밀번호 복사 + 사용자 이름 복사 + 이메일 복사 + 전화 번호 복사 + 여권 번호 복사 + 운전면허 번호 복사 + 카드 번호 복사 + 카드 소유자 이름 복사 + 만료 날짜 복사 + 만료 월 복사 + 보안 코드(CVV) 복사 + OTP 코드 복사 + 비밀 키 복사 + Keyguard 잠금 해제 + Keyguard 열기 + 1월 + 2월 + 3월 + 4월 + 5월 + 6월 + 7월 + 8월 + 9월 + 10월 + 11월 + 12월 + 위로 이동 + 아래로 이동 + 제거 + 항목을 제거하시겠습니까? + 더 추가 + FIDO2 WebAuthn + WebAuthn 인증 + 앱으로 돌아가기 + + 비워둘 수 없는 칸입니다. + + 비워둘 수 없는 칸입니다. + 사용자 지정 도메인을 입력해야 합니다. + US-ASCII 문자만 사용할 수 있습니다. + 최소 %1$d글자 이상이어야 합니다. + 정확히 %1$d글자여야 합니다. + 잘못된 도메인입니다. + 잘못된 이메일입니다. + 잘못된 URL입니다. + 잘못된 URI입니다. + 잘못된 카드 번호입니다. + 잘못된 비밀번호입니다. + OTP 코드를 생성하지 못했습니다. + Failed to create a passkey + Failed to authorize a request + + 바코드 + 바코드로 표시 + QR 코드를 스캔하여 이 인증기를 다른 기기에 복사할 수 있습니다. + + 날짜 선택 + + 색상 선택 + + 회원 탈퇴는 어떻게 하지? + 웹 서비스에서 회원 탈퇴하는 방법 모음 + + 쉬움 + + 보통 + + 어려움 + + 제한적으로 가능 + + 불가능 + 이메일 보내기 + 웹사이트 검색 + 설명 없음 + 2단계 인증 + 2단계 인증을 지원하는 웹사이트 목록 + 웹사이트 검색 + 패스키 + 패스키를 지원하는 웹사이트 목록 + 웹사이트 검색 + + 데이터 유출 + 계정 데이터가 유출되면 민감한 개인 및 금융 정보에 대한 접근 권한을 악성 사용자에게 제공할 수 있으며, 잠재적으로 신원 도용, 금융 사기 및 다른 형태의 사이버 범죄로 이어질 수 있습니다. + 유출된 계정 없음 + 유출된 계정 발견 + 유출 + %1$s에 유출됨 + %1$s에 보고됨 + 데이터 유출을 확인하지 못했습니다. 앱이 오프라인 상태일 수 있습니다. + 데이터 유출 + 유출된 비밀번호는 크래킹에 걸리는 시간이 매우 짧으므로 사용하지 않아야 합니다. + 유출된 비밀번호 발견 + 유출 데이터베이스에 포함된 비밀번호입니다. 온라인 보안을 유지하기 위해 지금 비밀번호를 변경하세요. + 유출된 비밀번호 없음 + 데이터 유출을 확인하지 못했습니다. 앱이 오프라인 상태일 수 있습니다. + + 큰 글자 + 큰 글자로 표시 + 큰 글자로 표시하고 보관함 잠그기 + 앱 선택 + 설치된 앱 검색 + 시스템 앱 + 앱 없음 + 폴더 선택 + 새 폴더 만들기: + + 이 조직은 사본에 대한 소유권을 가집니다. 원본의 소유자는 될 수 없습니다. + 이메일 포워딩 서비스 + 이메일 포워딩 서비스 + 이메일 포워딩 서비스를 삭제하시겠습니까? + 이메일 포워딩 서비스를 삭제하시겠습니까? + 이메일 포워딩 서비스 통합 + No email forwarders + 로컬 데이터를 저장할 암호화된 보관함을 만듭니다. + 앱 비밀번호 + 생체 정보 인증 + 보관함 만들기 + 오류 보고서 보내기 + 보관함 만들기 + 앱 데이터 삭제 + 앱을 닫고 모든 앱 데이터를 지웁니다. + 보관함이 잠겨 있습니다. 계속하려면 앱 비밀번호를 입력하세요. + 잠금 해제 + + 보관함 잠금 해제 + + 생체 정보를 사용하여 보관함을 잠금 해제합니다. + 사용자 인증이 필요합니다. 계속하려면 앱 비밀번호를 입력하세요. + 인증 + 동기화 상태 + 최신 + 보류 중 + 동기화 중 + 동기화 실패 + 새 항목 + 항목 편집 + %1$s 또는 %2$s 등을 사용하여 텍스트를 꾸밀 수 있습니다. 일부 마크다운 문법을 지원합니다. + 기울임꼴 + 굵게 + 미리보기 + 인증 재요청 + 비밀번호를 보거나 자동 완성할 때 다시 인증 요청 + Bitwarden 계정 추가 + Keyguard 팀은 Bitwarden, Inc. 또는 그 계열사와 제휴, 연관, 승인, 보증 또는 공식적으로 어떤 식으로든 연결되어 있지 않습니다. + + 비공식 Bitwarden 클라이언트에서 캡차 인증을 통과하려면 클라이언트 비밀 키를 설정해야 합니다. 웹 보관함의 설정 / API 키 페이지에서 클라이언트 비밀 키를 확인할 수 있습니다. + + 클라이언트 비밀 키 + 로그인 + 리전 + 미국 + 유럽 + 사용자 지정 (셀프 호스팅) + HTTP 헤더 + HTTP 헤더 + 서버에 대한 모든 요청에 포함될 사용자 지정 HTTP 헤더를 추가할 수 있습니다. + + + 더 추가 + 서버 URL + Bitwarden이 호스팅되고 있는 서버의 기본 URL을 입력하세요. + 사용자 지정 환경 + 각 서비스에 대한 기본 URL을 따로 입력할 수 있습니다. + 웹 보관함 서버 URL + API 서버 URL + 아이콘 서버 URL + ID 서버 URL + 인증 + 이 인증 방법은 아직 지원하지 않습니다. + 인증 앱에서 인증 코드를 입력하세요. + %1$s 이메일로 전송된 인증 코드를 입력하세요. + YubiKey 인증 코드를 직접 입력해 주세요. 아래 필드에 커서를 둔 뒤 YubiKey를 켜세요. + 인증 앱 + Duo (조직) + FIDO2 웹 인증 + 이메일 + FIDO U2F + USB를 사용하여 YubiKey 연결 + 기기가 USB OTG를 지원해야 합니다. + YubiKey의 금색 센서에 손가락을 올리세요. + YubiKey를 기기의 뒷면에 평평하게 가져다 대세요. + 기기가 NFC를 지원해야 합니다. + YubiKey를 읽지 못했습니다. + FIDO2 WebAuthn을 사용하려면 Bitwarden 웹 보관함 %1$s 버전 이상이 필요합니다. 이 버전보다 낮을 경우 인증 결과가 Bitwarden 공식 앱에 잘못 전달될 수 있습니다. + 접근 확인 + 이 데이터는 보호되어 있습니다. 계속하려면 앱 비밀번호를 입력하세요. + + 접근 확인 + + 생체 정보를 사용하여 이 데이터를 잠금 해제합니다. + 보관함 + Send + 생성기 + Watchtower + 설정 + 일정 시간 미사용으로 잠김 + 텍스트 + 파일 + 로그인 + 카드 + 신원 + 메모 + 패스키 + 텍스트 + 참/거짓 + 링크됨 + + 유출됨 + 매우 강함 + 강함 + 우수 + 양호 + 약함 + 매우 강한 비밀번호 + 강한 비밀번호 + 우수한 비밀번호 + 양호한 비밀번호 + 약한 비밀번호 + 필터 + 사용할 수 있는 필터 없음 + 정렬 기준 + 사용할 수 있는 정렬 방식 없음 + 제목 + 가나다순 + 가나다 역순 + 사용 횟수 + 큰 순 + 작은 순 + 변경 날짜 + 새로운 순 + 오래된 순 + 만료 날짜 + 새로운 순 + 오래된 순 + 삭제 날짜 + 새로운 순 + 오래된 순 + 비밀번호 + 가나다순 + 가나다 역순 + 비밀번호 변경 날짜 + 새로운 순 + 오래된 순 + 비밀번호 보안 강도 + 약한 순 + 강한 순 + 보관함 검색 + 새 항목 + There are no suggested items available for this context + + 보안 코드(CVV) + %1$s에 저장됨 (%2$s) + 비밀번호를 %s에 마지막으로 변경함 + %1$s에 만든 패스키 + %1$s에 마지막으로 변경함 + %1$s에 만듦 + %1$s에 삭제됨 + %1$s에 만료됨 + %1$s에 만료될 예정 + %1$s에 삭제될 예정 + + 통화 + + 문자 + + 이메일 + + 위치 + Send + Send 검색 + 새 항목 + 이 공유 항목을 보려면 비밀번호가 필요합니다. + 생성기 + 사용자 이름 생성기 + 비밀번호 생성기 + 생성 + 다시 생성 + 비밀번호 문구 + 무작위 비밀번호 문구는 외우기 쉽고 보안성이 뛰어난 문구 조합을 제공합니다. + 구분 기호 + 첫 글자를 대문자로 + 숫자 포함 + 사용자 이름 + 구분 기호 + 사용자 지정 단어 + 첫 글자를 대문자로 + 숫자 포함 + 무작위 비밀번호 + 강한 비밀번호는 최소 %d자에 대문자 및 소문자, 숫자와 기호를 모두 포함해야 합니다. + 숫자 + 기호 + 대문자 + 소문자 + + 비슷한 문자 제외 + + 알아보기 힘든 문자 제외 + Catch-all 이메일 + Catch-all 이메일 주소를 사용하면 이메일 설정에 관계없이 도메인으로 오는 모든 이메일을 받을 수 있습니다. 사용하기 전에 이메일 호스팅 제공 업체에서 이 기능을 지원하는지 확인하세요. + + 도메인 + 플러스 주소 이메일 + 플러스 주소를 사용하면 %s 주소로 전송된 모든 이메일이 사용자의 계정으로 전송됩니다. 따라서 각 웹사이트, 메일링 리스트마다 다른 이메일 주소를 사용할 수 있습니다. 사용하기 전에 이메일 호스팅 제공 업체에서 이 기능을 지원하는지 확인하세요. + 이메일 + 서브도메인 주소 이메일 + 서브도메인 주소를 사용하면 %s 주소로 전송된 모든 이메일이 사용자의 계정으로 전송됩니다. 따라서 각 웹사이트, 메일링 리스트마다 다른 이메일 주소를 사용할 수 있습니다. 사용하기 전에 이메일 호스팅 제공 업체에서 이 기능을 지원하는지 확인하세요. + 이메일 + 포워딩된 이메일 별칭 + 생성한 비밀번호로 새 로그인 만들기 + 생성한 사용자 이름으로 새 로그인 만들기 + 비밀번호 생성 기록 + 팁 보이기 + 생성기 기록 + 기록 삭제 + 생성기 기록을 삭제하시겠습니까? + 모든 생성기 기록을 삭제합니다. + 비밀번호 생성 기록 + 기록 삭제 + 비밀번호 기록을 삭제하시겠습니까? + 모든 비밀번호 기록을 삭제합니다. + Watchtower + 비밀번호 보안 강도 + 보안 + 관리 + 유출된 비밀번호 + 유출 데이터베이스에 포함된 비밀번호입니다. 유출된 비밀번호는 지금 당장 변경해야 합니다. + 재사용 비밀번호 + 여러 웹사이트에 같은 비밀번호를 사용하지 마세요. 웹사이트마다 다른 비밀번호를 생성하여 보안을 강화할 수 있습니다. + 취약한 계정 + 비밀번호를 마지막으로 변경한 뒤에 데이터가 유출된 사이트입니다. 계정을 안전하게 유지하기 위해 비밀번호를 변경하세요. + 안전하지 않은 웹사이트 + HTTP 프로토콜을 사용하는 URL을 HTTPS로 변경하세요. HTTPS 프로토콜은 가장 강력한 암호화를 사용할 수 있습니다. + 2단계 인증 꺼짐 + 2단계 인증을 지원하지만 아직 설정하지 않은 사이트입니다. + 패스키 사용 가능 + 패스키를 지원하지만 아직 설정하지 않은 사이트입니다. 패스키는 비밀번호보다 간단하고 더 안전합니다. + 불완전 항목 + 보관함에 있는 불완전한 데이터입니다. 이름이 없거나 사용자 이름이 없는 로그인 항목일 수 있습니다. + 만료 항목 + 만료되었거나 곧 만료될 항목입니다. + 중복 URI + 일치 인식을 적용한 뒤, 같은 사이트에 하나 이상의 URI가 있는 항목입니다. + 휴지통에 있는 항목 + 휴지통으로 간 항목입니다. 휴지통에 항목이 너무 많으면 보관함이 느려질 수 있습니다. + 빈 폴더 + 아무 항목도 저장되어 있지 않은 폴더입니다. + 중복 항목 + 보관함에 있는 중복된 항목입니다. + 유출된 계정 + 사용자 이름이나 이메일 주소가 유출되었는지 확인합니다. + 앱 비밀번호 변경 + 비밀번호 변경 + 생체 정보 인증 + + 앱 비밀번호 변경 + 앱 비밀번호는 기기에 저장되거나 인터넷으로 전송되지 않습니다. 로컬 데이터를 암호화하기 위한 비밀 키를 생성하는 데에만 사용됩니다. + 강력한 비밀번호를 웹사이트마다 다르게 사용하고 있다면, 무단 접속이 의심되거나 기기에서 악성 코드가 발견되지 않는 한 비밀번호를 변경할 필요가 없습니다. + 고객 지원 + 메시지 입력 + 메시지가 정확히 전달될 수 있도록 영어를 사용해 주세요. + 시간을 내어 메시지를 보내 주셔서 감사합니다. 입력하신 메시지는 Keyguard 팀에 직접 전달되며, 저희는 전달받은 메시지를 문제 해결 및 제품 개선에 활용합니다. 모든 신고에 답변을 드릴 수는 없지만, 최대한 빠르게 문제를 해결하고 개선 사항을 검토하기 위해 노력하고 있습니다. + 계정 + 계정 추가 + 앱 개발 팀 + 우크라이나의 소프트웨어 엔지니어입니다. 앱 디자인과 개발이 특기입니다. + 소셜 미디어 + 검색 + 설정 + 설정 검색 + 외관 + 자동 완성 + 개발 + 실험용 기능 + 설정 + 알림 + 기타 + 권한 + 보안 + Keyguard 프리미엄 + Watchtower + 오픈 소스 라이선스 + 계정 + 계정 추가 및 확인 + 자동 완성 + Android 자동 완성 서비스 + 보안 + 생체 정보, 비밀번호 변경, 보관함 시간 제한 + Keyguard 프리미엄 + 추가 기능 잠금 해제, 앱 개발 지원 + Watchtower + 유출된 서비스, 취약한 비밀번호 + 알림 + 알림 관리 + 외관 + 언어, 테마 및 애니메이션 + 개발 + 개발용 테스트 설정 + 기타 + 커뮤니티 웹사이트, 앱 정보 + 내비게이션 버튼에 라벨 보이기 + 앱 버전 + 앱 빌드 날짜 + 앱 개발 팀 + Reddit 커뮤니티 + GitHub 프로젝트 + CrowdIn 프로젝트 + 오픈 소스 라이선스 + APK 파일 다운로드 + 앱 아이콘 불러오기 + 웹사이트 아이콘 불러오기 + 웹사이트 아이콘을 불러오면 인터넷 제공사에 웹사이트 주소가 노출될 수 있습니다. + 리치 텍스트 포맷 + 메모에 마크다운 문법을 사용합니다. + 언어 + 번역 제안 + 글꼴 + Play 스토어에서 평가 + 강조 색상 + 테마 + 다크 테마에 검정색 사용 + 외부 브라우저에서 열기 + 필드 감추기 + 비밀번호, 신용 카드 번호 등 민감한 정보를 숨깁니다. + + 충돌 + Credential provider + 패스키, 비밀번호 및 데이터 서비스 + 개인 정보 보호 정책 + 고객 지원 + 실험용 기능 + 앱 비밀번호 변경 + 앱 비밀번호 요청 + 생체 정보 설정을 변경한 뒤에 앱 비밀번호를 추가로 요청합니다. + 즉시 + 잠그지 않음 + 오류 보고서 보내기 + 전환 애니메이션 + 앱 데이터 삭제 + 앱을 닫고 모든 앱 데이터를 지웁니다. + 스크린샷 촬영 허용 + 앱 전환 화면에 앱 내용을 표시하고 스크린샷 캡처를 허용합니다. + 앱 전환 화면에서 앱 내용을 숨기고 스크린샷 캡처를 금지합니다. + 데이터 안전성 + 보관함 잠그기 + 다시 시작 이후 잠그기 + 기기 다시 시작 이후 보관함을 잠급니다. + 화면 꺼짐 이후 잠그기 + 기기 화면이 꺼지고 몇 초 뒤에 보관함을 잠급니다. + 일정 시간 이후 잠그기 + 즉시 + 잠그지 않음 + 보관함 키를 기기에 저장 + 보관함 키를 내부 저장소에 보관합니다. + 앱이 메모리에서 내려가면 보관함이 잠깁니다. + 보관함 키를 기기에 저장하면 보안에 취약합니다. 기기의 내부 저장소가 손상되면 공격자가 로컬 보관함 데이터에 접근할 수 있습니다. + 권한 + 기능 살펴보기 + 생체 정보 잠금 해제 + + 생체 정보 잠금 해제 + 항목을 보고 있을 때 화면 켜짐 유지 + 자동 완성 서비스 + Android 자동 완성 프레임워크를 사용하여 기기의 다른 앱에서 로그인 정보를 채울 수 있도록 합니다. + OTP 자동 복사 + 로그인 정보를 입력할 때 OTP를 자동으로 복사합니다. + 인라인 제안 + 호환 가능한 키보드 앱에서 자동 완성을 제안합니다. + 직접 선택 + 자동 완성 항목을 직접 검색할 수 있는 옵션을 표시합니다. + 자동 완성 사용 안 함 플래그 인식 + 자동 완성 사용 안 함 플래그가 설정된 브라우저 필드에는 자동 완성을 사용하지 않습니다. + 일부 웹사이트는 비밀번호 필드의 자동 완성을 꺼 두는 경우도 있습니다. 마찬가지로 일부 브라우저는 자동 완성 사용 안 함 플래그를 무시하는 경우가 있습니다. + 데이터 저장 확인 + 양식을 입력한 뒤에 보관함을 업데이트할 것인지 물어봅니다. + 앱 또는 웹사이트 정보 자동 저장 + 클립보드 자동 비우기 + 즉시 + 비우지 않음 + OTP 알림 길이 + OTP가 있는 로그인 아이템을 자동 완성했을 때, 지정한 시간만큼 OTP 인증 코드를 알림으로 띄웁니다. + 알림을 띄우지 않음 + Keyguard 멤버십 정보 + 프리미엄을 구매하시면 추가 기능을 사용할 수 있으며 앱 개발에 도움이 됩니다. 구매해 주셔서 감사합니다! ❤️ + 구독 + 상품 + 구독 목록을 불러오지 못했습니다. + 상품 목록을 불러오지 못했습니다. + 사용 중 + 갱신 안 함 + Play 스토어에서 관리 + 알림 게시 + 다은로드 중 알림을 게시하는 데 사용합니다. + 카메라 + QR 코드를 스캔하는 데 사용합니다. + 가로 모드에서 이중 패널 허용 + 세로 모드에서 이중 패널 허용 + 다크 + 라이트 + 사용 안 함 + 다이나믹 + 크로스페이드 + 저시력자의 가독성을 높이고 이해를 돕기 위해 개발되었습니다. + 기능 살펴보기 + Keyguard 프리미엄 + 다중 계정 + 여러 개의 계정으로 동시에 로그인합니다. + 양방향 동기화 + 항목을 추가하거나 편집한 뒤 변경 사항을 동기화합니다. + 오프라인 편집 + 인터넷 연결 없이 항목을 추가하거나 편집합니다. + 검색 + 아무거나 검색 + 이름, 이메일, 비밀번호, 전화 번호 등 + 필터 + 폴더, 조직, 유형 등으로 항목을 필터링합니다. + 다중 키워드 + 예를 들어 \'Bitwarden Test Account\' 항목을 검색하려면 \'bitw test\'를 입력하세요. + Watchtower + 유출된 비밀번호 + 알려진 유출 데이터베이스를 통해 비밀번호가 유출된 항목을 찾습니다. + 비밀번호 보안 강도 + 비밀번호의 보안 강도가 약한 항목을 찾습니다. + 재사용 비밀번호 + 비밀번호가 재사용된 항목을 찾습니다. + 2단계 인증 꺼짐 + TOTP 2단계 인증을 지원하는 로그인 항목을 찾습니다. + 안전하지 않은 웹사이트 + HTTP 프로토콜을 사용하는 웹사이트를 찾아 HTTPS로 수정합니다. + 불완전 항목 + 업데이트가 필요한 빈 항목을 찾습니다. + 만료 항목 + 만료되었거나 곧 만료될 항목을 찾습니다. + 중복 항목 + 중복된 항목을 찾고 하나로 합칩니다. + 기타 + 다중 선택 + 일괄 작업으로 일관성을 강화하고 비밀번호를 하나로 합칩니다. + 바코드로 표시 + 텍스트를 다른 바코드로 인코딩합니다. + 생성기 + 비밀번호나 사용자 이름을 생성합니다. + 데이터 안전성 + 로컬 데이터 + 로컬 데이터는 다운로드한 파일, 유저 설정, 보관함으로 이루어집니다. 이는 Android 시스템이나 Keyguard 앱을 통해서만 접근할 수 있는 기기 내부 저장소에 저장됩니다. + 다운로드 + 사용자 설정 + 사용자 설정은 기기별 키를 사용하여 암호화됩니다. + 사용자 설정 + 보관함은 아래와 같은 단계를 통해 앱 비밀번호로부터 생성된 키를 사용하여 암호화됩니다: + 그 후 솔트와 해시는 기기에 오프라인으로 저장되며, 나중에 보관함 잠금을 해제하기 위한 마스터 키를 생성합니다. + 보관함을 잠금 해제한다는 것은 기기의 RAM에 올바른 키를 저장하여 암호화된 보관함을 읽고 편집할 수 있게 하는 것입니다. + 원격 데이터 + 원격 데이터는 영지식 증명으로 암호화한 뒤 Bitwarden 서버에 저장됩니다. + diff --git a/common/src/commonMain/resources/MR/nl-rNL/plurals.xml b/common/src/commonMain/resources/MR/nl-rNL/plurals.xml new file mode 100644 index 00000000..5f2db8ad --- /dev/null +++ b/common/src/commonMain/resources/MR/nl-rNL/plurals.xml @@ -0,0 +1,2 @@ + + diff --git a/common/src/commonMain/resources/MR/nl-rNL/strings.xml b/common/src/commonMain/resources/MR/nl-rNL/strings.xml new file mode 100644 index 00000000..9b613cae --- /dev/null +++ b/common/src/commonMain/resources/MR/nl-rNL/strings.xml @@ -0,0 +1,868 @@ + + + Ok + Sluiten + Yes + No + + Naam + Accountnaam + Gebruikersnaam + Wachtwoord + App wachtwoord + Huidig wachtwoord + Nieuw wachtwoord + E-mail + Geverifieerd + Niet geverifieerd + E-mail zichtbaarheid + Publieke URL + URL + + Aantal keer bekeken + Lees meer + Telefoonnummer + Paspoortnummer + Licentienummer + Kaart nummer + No card number + Merk + CVV + Valid from + Valid to + Card expiry month + Card expiry year + Naam kaarthouder + Geldig vanaf + Vervaldatum + Bedrijfsnaam + Synchroniseren + + Verborgen + + Zichtbaar + + Leeg + + BSN + Stad + Staat + Info + Annuleren + Doorgaan + Land + Adres + Postcode + Trek om te zoeken + Opslaan + URI + URIs + Notitie + Notities + Bijlagen + No attachments + Expiring soon + Incomplete data + This item is missing some of the important information. + Item + Items + %1$s items + All items + No items + Geen map + Nieuwe map + Map + Mappen + No folders + Geen collectie + Collectie + Collecties + No collections + Mijn kluis + Organisatie + Organisaties + No organizations + Overige + Integratie toevoegen + Account + Accounts + No accounts + Geen account + Type + Opties + Verzenden + Reset + Lengte + Beveiliging + Contact info + Titel + Voornaam + Tussenvoegsels + Achternaam + Full name + Adresregel 1 + Adresregel 2 + Adresregel 3 + Hernoemen + Select type + Autofill + Passkey + Create a passkey + Unlock Keyguard + Confirming auth request… + Passkeys + + Signature counter + + Relying party + + Discoverable + Username + Display name + API sleutel + Domein + Bewerken + Verwijderen + Verwijderen + Verwijderen uit geschiedenis + Hergebruikt wachtwoord + Hergebruikte wachtwoorden + Verificatie code + Verificatie sleutel + Use + Save passkey + Passkey beschikbaar + Tweestapsverificatie beschikbaar + Aangepast + Gebruik systeeminstellingen + + Binnenkort beschikbaar + Mogelijk gemaakt door + Verificatiecode + Verificatiecode opnieuw verzenden + Verificatie e-mail verzenden + Webkluis + Open web kluis + + Mijn gegevens onthouden + + Prullenbak + + Download + Downloads + No downloads + No duplicates + Encryptie + + Sleutel + Hash + Salt + 256-bit AES + Willekeurige %1$d-bits van gegevens + Geen + Tekst + Gekoppelde apps + Gekoppelde URI\'s + Extra velden + Een beveiligde notitie onthullen + Verberg een beveiligde notitie + Hint voor hoofdwachtwoord + Vingerafdrukzin + Wat is een vingerafdruk? + Bitwarden premium + Onofficiële Bitwarden server + Laatst gesynchroniseerd op %1$s + Naam wijzigen + Verander kleur + Hint voor hoofdwachtwoord wijzigen + Uitloggen + Inloggen + Bezoek de webkluis om uw e-mailadres te verifiëren + Upgrade naar een Premium-abonnement en ontgrendel geweldige extra functies + Tweestapsverificatie + Vereist inlogverificatie met een ander apparaat zoals een beveiligingssleutel, authenticatie-app, SMS of e-mail + Actief + Items + Uitloggen + Uitloggen? + Alle niet gesynchroniseerde wijzigingen zullen verloren gaan! + Naam wijzigen + Namen wijzigen + Map verwijderen? + Mappen verwijderen? + Deze items worden onmiddellijk verwijderd. U kunt deze actie niet ongedaan maken. + Onlangs geopend + Vaak geopend + View details + Save to + Toevoegen aan favorieten + Verwijder uit favorieten + Opnieuw om authenticatie vragen + Niet opnieuw om authenticatie vragen + Bewerken + Samenvoegen in… + Kopiëren naar… + Naar map verplaatsen + Naam wijzigen + Namen wijzigen + Wachtwoord toevoegen + Wachtwoorden toevoegen + Wachtwoord wijzigen + Wachtwoorden wijzigen + Wachtwoordgeschiedenis bekijken + Prullenbak + Herstel + Definitief verwijderen + Verwante items verplaatsen naar prullenbak + Open with… + Send with… + Open in a file manager + Delete local file + View parent item + Toetsenbord altijd weergeven + Kluis synchroniseren + Kluis vergrendelen + Map hernoemen + Controleer het e-mailadres in bekende datalekken + Controleer de gebruikersnaam in bekende datalekken + Controleer het wachtwoord in bekende datalekken + Controleer de website in bekende datalekken + App openen + Website openen + Docs openen + Browser openen + Hoofdpagina openen + Play Store openen + Openen met %1$s + Openen met… + Hoe verwijder ik mijn account? + Onveilig + App koppelen + Overeenkomst detectie + Basisdomein + Controleer op het top-level en het second-level domein. + Host + Controleer op hostnaam en (indien opgegeven) poort. + Begint met + Controleer of de gedetecteerde URI met de opgegeven URI begint. + Exacte overeenkomst + Controleer of de gedetecteerde URI exact overeenkomt. + Reguliere expressie + Controleer de gedetecteerde URI met een reguliere expressie. Dit is een geavanceerde optie. + Nooit + Negeer URI tijdens het zoeken van items in het automatisch aanvullen scherm. + %1$s linked to the password + %1$s linked to the username + %1$s linked to the cardholder name + %1$s linked to the expiration month + %1$s linked to the expiration year + %1$s linked to the card code + %1$s linked to the card brand + %1$s linked to the card number + %1$s linked to the title + %1$s linked to the middle name + %1$s linked to the address line (1) + %1$s linked to the address line (2) + %1$s linked to the address line (3) + %1$s linked to the city + %1$s linked to the state + %1$s linked to the postal code + %1$s linked to the country + %1$s linked to the company + %1$s linked to the email + %1$s linked to the phone number + %1$s linked to the SSN + %1$s linked to the username + %1$s linked to the passport number + %1$s linked to the license number + %1$s linked to the first name + %1$s linked to the last name + %1$s linked to the full name + %1$s linked to an unknown field + Delen met… + %1$d geselecteerd + Kopiëren + Kopieer waarde + URL kopiëren + URI kopiëren + Pakketnaam kopiëren + Wachtwoord kopiëren + Gebruikersnaam kopiëren + E-mail kopiëren + Telefoonnummer kopiëren + Paspoortnummer kopiëren + Licentienummer kopiëren + Kaartnummer kopiëren + Kopieer naam kaarthouder + Vervaldatum kopiëren + Vervalmaand kopiëren + Veiligheidscode kopiëren + Verificatie code kopiëren + Geheime sleutel kopiëren + Keyguard ontgrendelen + Open Keyguard + Januari + Februari + Maart + April + Mei + Juni + Juli + Augustus + September + Oktober + November + December + Verplaats omhoog + Verplaats omlaag + Verwijderen + Item verwijderen? + Meer toevoegen + FIDO2 WebAuthn + Authenticeer WebAuthn + Terug naar app + + Veld mag niet leeg zijn + + Veld mag niet leeg zijn + Moet een aangepast domein zijn + Mag alleen US-ASCII tekens bevatten + Moet minstens %1$d symbolen lang zijn + Moet exact %1$d symbolen lang zijn + Ongeldig domein + Ongeldig e-mailadres + Ongeldige URL + Ongeldige URI + Ongeldige kaartnummer + Onjuist wachtwoord + Genereren van verificatie code mislukt + Failed to create a passkey + Failed to authorize a request + + Barcode + Toon als barcode + Kopieer deze verificatiecode naar een ander apparaat door de QR-code te scannen. + + Datumkiezer + + Kleurenkiezer + + Hoe verwijder ik mijn account? + Een verzameling van informatie over hoe je je account kunt verwijderen van webdiensten + + Gemakkelijk + + Gemiddeld + + Moeilijk + + Beperkte beschikbaarheid + + Onmogelijk + Verstuur e-mail + Zoek websites + Geen instructies gevonden + Tweestapsverificatie + Lijst van websites met ondersteuning voor tweestapsverificatie + Zoek websites + Passkeys + Lijst van websites met ondersteuning voor passkeys + Zoek websites + + Datalek + Gelekte accountgegevens kunnen kwaadaardige personen toegang geven tot gevoelige, persoonlijke en financiële informatie. Dit kan leiden tot identiteitsdiefstal, financiële fraude en andere vormen van cybercriminaliteit. + Geen datalekken gevonden + Gelekte accounts gevonden + Datalekken + Voorgevallen op %1$s + Gerapporteerd op %1$s + Gegevenslekken kunnen niet worden gecontroleerd. Mogelijk ben je momenteel offline + Datalek + Een wachtwoord dat in een datalek aangetroffen is kan makkelijker gekraakt worden en mag nooit gebruikt worden. + Wachtwoord is gelekt + Het wachtwoord is gevonden in bekende datalekken. Wijzig uw wachtword zo snel mogelijk om uw online gegevens te beschermen + Geen datalekken gevonden + Gegevenslekken kunnen niet worden gecontroleerd. Mogelijk ben je momenteel offline + + Groot type + Weergeven in groot type + Toon in Groot Type en vergrendel de kluis + App kiezer + Geïnstalleerde apps zoeken + Systeem app + Geen apps + Kies een map + Nieuwe map aanmaken: + + Deze organisatie zal eigendom zijn van de kopie. U bent niet de directe eigenaar. + E-mail forwarders + E-mail forwarders + Verwijder e-mail forwarder? + Verwijder e-mail forwarders? + E-mail forwarder integratie + No email forwarders + Maak een versleutelde kluis aan waar de lokale gegevens worden opgeslagen. + App-wachtwoord + Biometrische authenticatie + Nieuwe kluis aanmaken + Verstuur crashrapporten + Nieuwe kluis aanmaken + Verwijder app gegevens + Sluit de app en wis alle lokale app data + De kluis is vergrendeld. Voer het app-wachtwoord in om door te gaan. + Ontgrendelen + + Kluis ontgrendelen + + Gebruik biometrische authenticatie om de kluis te ontgrendelen. + User verification is required. Enter your app password to continue. + Verify + Synchronisatie status + Bijgewerkt + In behandeling + Aan het synchroniseren + Synchroniseren mislukt + Nieuw item + Item bewerken + Stijl tekst met %1$s of %2$s en meer. Beperkte Markdown syntax wordt ondersteund. + cursief + dikgedrukt + Voorbeeld weergeven + Herauthenticatie + Vraag om opnieuw te verifiëren wanneer je een item wilt bekijken of automatisch wilt aanvullen + Bitwarden account toevoegen + We zijn niet geaffilieerd, geassocieerd, geautoriseerd, goedgekeurd door of op enige manier officieel verbonden met Bitwarden, Inc. of een van zijn filialen of medewerkers. + + Om de captcha verificatie te voltooien in een niet-officiële Bitwarden client moet u een API-sleutel invullen, deze is te vinden in uw Bitwarden account. Bezoek de Bitwarden Web kluis / Instellingen / Beveiliging / Sleutels / API-sleutel, en kopieer de getoonde client secret waarde. + + Client secret + Login + Regio + Verenigde Staten + Europa + Aangepast (selfhosted) + HTTP headers + HTTP header + U kunt aangepaste HTTP-headers toevoegen die verzonden worden met elk verzoek aan de server. + Sleutel + Waarde + Meer toevoegen + Server URL + Vul de basis-URL van jouw zelfgehoste Bitwarden-installatie in. + Aangepaste omgeving + U kunt de basis-URL van elke dienst afzonderlijk instellen. + Webkluis Server URL + API Server URL + Pictogrammen Server URL + Identiteit Server URL + Verificatie + Deze verificatiemethode wordt nog niet ondersteund. + Voer de 6-cijferige verificatiecode in die in uw authenticatie-app staat. + Voer de verificatiecode in die per e-mail werd verstuurd naar %1$s. + Voer de YubiKey authenticatie code handmatig in. Plaats de cursor op het veld hieronder en trigger de YubiKey. + Authenticator + Duo (Organisatie) + FIDO2 webauthenticatie + E-mail + FIDO U2F + Verbind YubiKey via USB + Vereist USB OTG ondersteuning. + Raak de gouden sensor aan op uw YubiKey. + Houd je YubiKey plat tegen de achterkant van je apparaat + Vereist NFC ondersteuning. + Fout bij het lezen van de YubiKey + FIDO2 WebAuthn vereist versie %1$s of hoger van de Bitwarden Web kluis. Op oudere versies wordt het verificatieresultaat verkeerd doorgestuurd naar de officiële Bitwarden-app. + Bevestig toegang + Deze gegevens zijn beveiligd, voer het app-wachtwoord in om door te gaan. + + Bevestig toegang + + Gebruik biometrische authenticatie om uw gegevens te ontgrendelen. + Kluis + Send + Generator + Watchtower + Instellingen + Vergrendeld door inactiviteit + Tekst + Bestand + Login + Kaart + Identiteit + Notitie + Passkey + Tekst + Boolean + Gekoppeld + + Gelekt + Zeer sterk + Sterk + Goed + Redelijk + Zwak + Zeer sterke wachtwoorden + Sterke wachtwoorden + Goede wachtwoorden + Redelijke wachtwoorden + Zwakke wachtwoorden + Filter + Geen filters beschikbaar + Sorteren op + Geen sortering beschikbaar + Titel + Alfabetisch + Omgekeerd alfabetisch + Aantal keer bekeken + Grootste eerst + Kleinste eerst + Wijzigingsdatum + Nieuwste eerst + Oudste eerst + Verloopdatum + Nieuwste eerst + Oudste eerst + Verwijderdatum + Nieuwste eerst + Oudste eerst + Wachtwoord + Alfabetisch + Omgekeerd alfabetisch + Wachtwoord wijzigingsdatum + Nieuwste eerst + Oudste eerst + Wachtwoordsterkte + Zwakste eerst + Sterkste eerst + Kluis doorzoeken + Nieuw item + There are no suggested items available for this context + + Veiligheidscode + Opgeslagen in %1$s bij %2$s + Wachtwoord laatst gewijzigd op %1$s + Passkey aangemaakt op %1$s + Laatst gewijzigd op %1$s + Aangemaakt op %1$s + Verwijderd op %1$s + Verlopen op %1$s + Vervaldatum gepland op %1$s + Verwijderen gepland op %1$s + + Bellen + + Tekst + + E-mail + + Routebeschrijving + Sends + Sends zoeken + Nieuw item + Een wachtwoord is vereist om toegang te krijgen tot dit bericht + Generator + Gebruikersnaam generator + Wachtwoord generator + Genereren + Opnieuw genereren + Wachtwoordzin + Willekeurige wachtwoordzinnen bieden de beste combinatie van geheugen en veiligheid. + Scheidingsteken + Hoofdletters + Nummers + Gebruikersnaam + Scheidingsteken + Aangepast woord + Hoofdletters + Nummers + Willekeurige symbolen + Een sterk wachtwoord heeft ten minste %1$d tekens, hoofdletters & kleine letters, cijfers en symbolen. + Cijfers + Symbolen + Hoofdletters + Kleine letters + + Gelijksoortige symbolen uitsluiten + + Dubbele symbolen uitsluiten + Catch-all e-mail + Een catch-all e-mailadres biedt gebruikers de mogelijkheid om alle e-mails te ontvangen die naar hun domein zijn verzonden. Zelfs als ze worden verzonden naar een e-mailadres dat niet is ingesteld voor hun domein. Zorg ervoor dat uw e-mail hosting deze functie ondersteunt voordat u deze gebruikt. + + Domein + E-mail met plus + Een e-mailadres met plus betekent dat elke e-mail verzonden naar %1$s nog steeds naar uw account wordt verzonden. Dit betekent dat je veel variaties kunt hebben op je e-mailadres om uit te geven aan verschillende personen, sites of mailinglijsten. Zorg ervoor dat uw e-mail hosting deze functie ondersteunt voordat u deze gebruikt. + E-mail + E-mail met subdomein + Een subdomein e-mailadres betekent dat elke e-mail verzonden naar %1$s nog steeds naar uw account wordt verzonden. Dit betekent dat je veel variaties kunt hebben op je e-mailadres om uit te geven aan verschillende personen, sites of mailinglijsten. Zorg ervoor dat uw e-mail hosting deze functie ondersteunt voordat u deze gebruikt. + E-mail + Doorgestuurde e-mail alias + Maak een nieuwe login met het wachtwoord + Maak een nieuwe login met de gebruikersnaam + Wachtwoord geschiedenis + Tips weergeven + Generator geschiedenis + Wis geschiedenis + Generator geschiedenis wissen? + Dit zal alle items uit de geschiedenis verwijderen. + Wachtwoord geschiedenis + Geschiedenis wissen + Wachtwoord geschiedenis wissen? + Dit verwijdert alle wachtwoorden uit de geschiedenis. + Watchtower + Wachtwoordsterkte + Beveiliging + Onderhoud + Gelekte wachtwoorden + Wachtwoorden die zijn gevonden in datalekken. Dergelijke wachtwoorden moeten onmiddellijk worden gewijzigd. + Hergebruikte wachtwoorden + Gebruik niet hetzelfde wachtwoord op meerdere websites. Genereer unieke wachtwoorden om de beveiliging te verbeteren. + Kwetsbare Accounts + Websites die getroffen zijn door datalekken sinds je voor het laatst je wachtwoord hebt gewijzigd. Wijzig je wachtwoord om je account veilig te houden. + Onveilige websites + Wijzig de URL\'s die het HTTP-protocol gebruiken om het HTTPS-protocol te gebruiken, dit zorgt ervoor dat de meest geavanceerde beschikbare versleuteling wordt gebruikt. + Inactieve tweestapsverificatie + Websites met tweestapsverificatie beschikbaar, maar u hebt deze nog niet ingesteld. + Beschikbare Passkeys + Websites die passkeys ondersteunen, maar waar je deze nog niet hebt ingesteld. Het is eenvoudiger en veiliger dan een wachtwoord. + Onvolledige items + Helpt u ontbrekende of onvolledige gegevens in uw kluis te identificeren. Dit kan verwijzen naar identiteiten met ontbrekende namen of logins zonder gebruikersnamen. + Verlopende items + Items die verlopen zijn of binnenkort verlopen. + Dubbele URIs + Items met een of meer URI\'s die dezelfde websites bevatten na het toepassen van de overeenkomst detectie. + Weggegooide items + Voorwerpen die naar de prullenbak zijn verplaatst. Te veel voorwerpen in de prullenbak kunnen de reactietijd van je kluis verlagen. + Lege mappen + Mappen die geen items bevatten. + Dubbele items + Helpt u dubbele items in uw kluis te identificeren en te verwijderen. + Gecompromitteerde Accounts + Controleer of je gebruikersnamen en wachtwoorden zijn gevonden in bekende datalekken. + App-wachtwoord wijzigen + Wachtwoord wijzigen + Biometrische authenticatie + + App-wachtwoord wijzigen + Het app-wachtwoord wordt nooit op het apparaat opgeslagen of via het netwerk verzonden. Het wordt gebruikt om een geheime sleutel te genereren die wordt gebruikt om de lokale gegevens te versleutelen. + Zolang u geen onbevoegde toegang vermoedt of malware hebt ontdekt op uw apparaat is het niet nodig om het wachtwoord te wijzigen als u een sterk en uniek wachtwoord gebruikt. + Contacteer ons + Jouw bericht + Gebruik Engels om ervoor te zorgen dat je feedback niet verkeerd wordt begrepen. + Wij waarderen de tijd die u besteedt aan het sturen van een bericht. Je bericht gaat rechtstreeks naar ons en we gebruiken het om problemen op te lossen, productverbeteringen te maken en problemen op te lossen. Hoewel we niet op elk bericht kunnen reageren, zijn we bezig om verbeteringen & problemen zo snel mogelijk op te lossen. + Accounts + Account toevoegen + Team achter de app + Ik ben een software engineer uit Oekraïne. Ik ben gespecialiseerd in app-ontwerp en -ontwikkeling. + Volg mij + Zoeken + Instellingen + Zoeken in instellingen + Uiterlijk + Automatisch aanvullen + Ontwikkeling + Experimenteel + Instellingen + Meldingen + Overige + Rechten + Beveiliging + Keyguard Premium + Watchtower + Open-source licenties + Accounts + Toon & voeg accounts toe + Automatisch aanvullen + Android autofill service + Beveiliging + Biometrie, verander wachtwoord, kluis timeout + Keyguard Premium + Ontgrendel functies & ondersteun de ontwikkeling van de app + Watchtower + Gecompromitteerde diensten, kwetsbare wachtwoorden + Meldingen + Waarschuwingen + Uiterlijk + Taal, thema en animaties + Ontwikkeling + Test instellingen voor ontwikkeling + Overige + Community websites, app informatie + Labels weergeven op navigatieknoppen + App versie + App bouw datum + Team achter de app + Reddit community + GitHub project + Crowdin project + Open-source licenties + APK-bestand downloaden + Laad app pictogrammen + Laad website iconen + Website iconen tonen kan het adres van de website lekken naar uw internetprovider + Rijke tekst opmaak + Gebruik Markdown om notities te formatteren + Taal + Help om deze app te vertalen + Lettertype + Beoordeel in de Play Store + Tint kleur + Thema + Gebruik zwart contrast thema + Open links in externe browser + Verberg velden + Verberg gevoelige informatie, zoals wachtwoorden en creditcardnummers + + Crash + Credential provider + Passkeys, passwords and data services + Privacy policy + Contacteer ons + Experimenteel + App-wachtwoord wijzigen + Vereis app-wachtwoord + Naast de normale beveiligingsinstellingen is het app-wachtwoord vereist na deze tijd of wanneer de biometrische instellingen zijn gewijzigd + Onmiddelijk + Nooit + Verstuur crashrapporten + Overgang animatie + Erase app data + Close the app and erase all local app data + Schermafbeeldingen toestaan + Laat de inhoud van de app zien wanneer u schakelt tussen recente apps en laat het maken van een schermopnames toe + Verberg de inhoud van de app wanneer u schakelt tussen recente apps en verbied het maken van schermopnames + Veiligheid van gegevens + Kluis vergrendelen + Vergrendelen na een herstart + Vergrendel de kluis na een systeem herstart + Vergrendelen wanneer het scherm wordt uitgeschakeld + Vergrendel de kluis na enkele seconden nadat het scherm uitgeschakeld is + Vergrendelen na vertraging + Onmiddelijk + Nooit + Sla de kluissleutel op in opslag + Kluissleutel blijft opgeslagen in interne opslag + Kluis wordt vergrendeld nadat de app volledig is afgesloten + Het opslaan van de kluissleutel op een schijf zorgt voor een veiligheidsrisico. Als de interne opslag van het apparaat gecompromitteerd is zal de aanvaller toegang krijgen tot de lokale kluisgegevens. + Machtigingen + Overzicht van functies + Biometrische ontgrendeling + + Biometrische ontgrendeling + Houd het scherm aan tijdens het bekijken van items + Autofill service + Gebruik het Android Autofill Framework om te helpen bij het automatisch invullen van inloggegevens in andere apps op het apparaat + Automatisch verificatie codes kopiëren + Bij het invullen van een inloggegevens worden eenmalige verificatie codes gekopieerd + Inline suggesties + Voeg automatische invulsuggesties toe in compatibele toetsenborden + Handmatige selectie + Toont een optie om handmatig een item te zoeken in de kluis + Respecteer de \'Autofill disabled\' flag + Schakelt automatisch invullen uit voor een browserveld dat automatisch invullen uitgeschakeld heeft + Houd er rekening mee dat sommige websites automatisch invullen uitschakelen voor een wachtwoordveld en dat ook sommige browsers deze optie negeren + Vraag om gegevens op te slaan + Vraag om een item van de kluis bij te werken nadat het invullen van een formulier is voltooid + App- of website-informatie automatisch opslaan + Klembord automatisch wissen + Onmiddelijk + Nooit + Eenmalige wachtwoord notificatie duur + Wanneer u een inlogitem met een eenmalig verificatiecode invult, zal de notificatie met verificatiecode verschijnen voor tenminste de gedefinieerde duur + Nooit + Over het Keyguard lidmaatschap + De premium versie ontgrendelt extra functionaliteiten en financiert de ontwikkeling van de app. Bedankt voor uw steun! ❤️ + Abonnementen + Producten + Fout bij het laden van de lijst met abonnementen + Fout bij het laden van de lijst met producten + Actief + Wordt niet verlengd + Beheren in Play Store + Meldingen sturen + Wordt gebruikt voor het plaatsen van downloadmeldingen + Camera + Wordt gebruikt om QR-codes te scannen + Twee panelen indeling in landschap modus toestaan + Twee panelen indeling in portret modus toestaan + Donker + Licht + Uitgeschakeld + Dynamisch + Overvloeien + Speciaal ontwikkeld om de leesbaarheid voor lezers met een laag zicht te vergroten en het begrip te verbeteren + Overzicht van functies + Keyguard Premium + Meerdere accounts + Aanmelden bij meerdere accounts tegelijkertijd. + Synchronisatie in twee richtingen + Voeg items toe en bewerk bestaande items en synchroniseer de wijzigingen terug. + Offline bewerken + Items toevoegen of bewerken zonder internet verbinding. + Zoeken + Zoeken naar alles + Naam, e-mail, wachtwoord, telefoonnummer etc. + Filter + Filter op map, organisatie, type etc. + Meerdere trefwoorden + Zoek op \'bitw test\' om je \'Bitwarden Test Account\' item te vinden. + Watchtower + Gelekte wachtwoorden + Zoek gelekte wachtwoorden in bekende datalekken. + Wachtwoordsterkte + Vind items met zwakke wachtwoorden. + Hergebruikte wachtwoorden + Vind items met hergebruikte wachtwoorden. + Inactieve 2FA + Vind logins met beschikbare TOTP tweestapsverificatie. + Onveilige websites + Zoek websites die het HTTP-protocol gebruiken, auto-fix naar HTTPS. + Onvolledige items + Lege items zoeken die mogelijk updates nodig hebben. + Verlopende items + Vind verlopen of binnenkort verlopende items. + Dubbele items + Zoek dubbele items en voeg deze samen. + Overige + Meervoudige selectie + Samenvoegen van items, of het verwijderen van meerdere items in één keer. + Toon als streepjescode + Coderen van tekst als barcode. + Generator + Genereer wachtwoorden en gebruikersnamen. + Veiligheid van gegevens + Lokale gegevens + Lokale gegevens bestaan uit Downloads, Gebruikersinstellingen en Kluis gegevens. Ze worden opgeslagen in de interne opslag van uw apparaat, dat alleen toegankelijk is door het Android-systeem of de Keyguard app. + Downloads + Gebruikersinstellingen + De gebruikersinstellingen worden versleuteld met behulp van een apparaatspecifieke sleutel. + Gebruikersinstellingen + De kluis is versleuteld met behulp van een sleutel die is afgeleid van het app-wachtwoord met behulp van de volgende stappen: + De Salt en de Hash worden vervolgens lokaal opgeslagen op uw apparaat, om vervolgens een hoofdsleutel mee te genereren om de kluis te ontgrendelen. + Een kluis ontgrendelen betekent dat een correcte sleutel opgeslagen wordt in de RAM van het apparaat, zodat u de mogelijkheid krijgt om de versleutelde kluis te lezen en aan te passen. + Externe gegevens + Externe gegevens worden opgeslagen op Bitwarden servers met zero-knowledge encryptie. + diff --git a/common/src/commonMain/resources/MR/no-rNO/plurals.xml b/common/src/commonMain/resources/MR/no-rNO/plurals.xml new file mode 100644 index 00000000..5f2db8ad --- /dev/null +++ b/common/src/commonMain/resources/MR/no-rNO/plurals.xml @@ -0,0 +1,2 @@ + + diff --git a/common/src/commonMain/resources/MR/no-rNO/strings.xml b/common/src/commonMain/resources/MR/no-rNO/strings.xml new file mode 100644 index 00000000..214f4486 --- /dev/null +++ b/common/src/commonMain/resources/MR/no-rNO/strings.xml @@ -0,0 +1,868 @@ + + + OK + Close + Yes + No + + Name + Account name + Username + Password + App password + Current password + New password + Email + Verified + Not verified + Email visibility + Public URL + URL + + Access count + Learn more + Phone number + Passport number + License number + Card number + No card number + Brand + Security code + Valid from + Valid to + Card expiry month + Card expiry year + Cardholder name + Valid from + Expiry date + Company + Sync + + Hidden + + Visible + + Empty + + SSN + City + State + Info + Cancel + Continue + Country + Address + Postal code + Pull to search + Save + URI + URIs + Note + Notes + Attachments + No attachments + Expiring soon + Incomplete data + This item is missing some of the important information. + Item + Items + %1$s items + All items + No items + No folder + New folder + Folder + Folders + No folders + No collection + Collection + Collections + No collections + My vault + Organization + Organizations + No organizations + Miscellaneous + Add integration + Account + Accounts + No accounts + No account + Type + Options + Send + Reset + Length + Security + Contact info + Title + First name + Middle name + Last name + Full name + Address line 1 + Address line 2 + Address line 3 + Rename + Select type + Autofill + Passkey + Create a passkey + Unlock Keyguard + Confirming auth request… + Passkeys + + Signature counter + + Relying party + + Discoverable + Username + Display name + API key + Domain + Edit + Delete + Remove + Remove from the history + Reused password + Reused passwords + One-time password + Authenticator key + Use + Save passkey + Passkey available + Two-factor authentication available + Custom + Follow system settings + + Coming soon + Powered by + Verification code + Re-send verification code + Requested a verification email + Web vault + Launch Web vault + + Remember me + + Trash + + Download + Downloads + No downloads + No duplicates + Encryption + + Key + Hash + Salt + 256-bit AES + Random %1$d-bits of data + None + Text + Linked apps + Linked URIs + Custom fields + Reveal a secure note + Hide a secure note + Master password hint + Fingerprint phrase + What is a fingerprint? + Bitwarden premium + Unofficial Bitwarden server + Last synced at %1$s + Change name + Change color + Change master password hint + Sign out + Sign in + Visit Web vault to verify your email address + Upgrade your account to a premium membership and unlock some great additional features + Two-factor authentication + Require login verification with another device such as a security key, authenticator app, SMS or email + Active + Items + Log out + Log out? + All of the not synchronized changes will be lost! + Change name + Change names + Delete folder? + Delete folders? + This item(s) will be deleted immediately. You can not undo this action. + Recently opened + Often opened + View details + Save to + Add to favourites + Remove from favourites + Enable auth re-prompt + Disable auth re-prompt + Edit + Merge into… + Copy to… + Move to folder + Change name + Change names + Add password + Add passwords + Change password + Change passwords + View password history + Trash + Restore + Delete forever + Move associated items to trash + Open with… + Send with… + Open in a file manager + Delete local file + View parent item + Always show keyboard + Sync vault + Lock vault + Rename folder + Check the email in known data breaches + Check the username in known data breaches + Check the password in known data breaches + Check the website in known data breaches + Launch app + Launch website + Launch docs + Launch browser + Launch main page + Launch Play store + Launch with %1$s + Launch with… + How to delete an account? + Unsecure + Match app + Match detection + Base domain + Match resources by top-level and second-level domain. + Host + Match resources by hostname and (if specified) port. + Starts with + Match resources when the detected resource starts with the URI. + Exact + Match resources when the detected resource exactly matches the URI. + Regular expression + Match resources by regular expression. Advanced option. + Never + Ignore URI during auto-fill item search. + %1$s linked to the password + %1$s linked to the username + %1$s linked to the cardholder name + %1$s linked to the expiration month + %1$s linked to the expiration year + %1$s linked to the card code + %1$s linked to the card brand + %1$s linked to the card number + %1$s linked to the title + %1$s linked to the middle name + %1$s linked to the address line (1) + %1$s linked to the address line (2) + %1$s linked to the address line (3) + %1$s linked to the city + %1$s linked to the state + %1$s linked to the postal code + %1$s linked to the country + %1$s linked to the company + %1$s linked to the email + %1$s linked to the phone number + %1$s linked to the SSN + %1$s linked to the username + %1$s linked to the passport number + %1$s linked to the license number + %1$s linked to the first name + %1$s linked to the last name + %1$s linked to the full name + %1$s linked to an unknown field + Share with… + %1$d selected + Copy + Copy value + Copy URL + Copy URI + Copy package name + Copy password + Copy username + Copy email + Copy phone number + Copy passport number + Copy license number + Copy card number + Copy cardholder name + Copy expiration year + Copy expiration month + Copy CVV code + Copy one-time password + Copy secret key + Unlock Keyguard + Open Keyguard + January + February + March + April + May + June + July + August + September + October + November + December + Move up + Move down + Remove + Remove an item? + Add more + FIDO2 WebAuthn + Authenticate WebAuthn + Return to app + + Must not be empty + + Must not be blank + Must be custom domain + Must contain only US-ASCII characters + Must be at least %1$d symbols long + Must be %1$d symbols long + Invalid domain + Invalid email + Invalid URL + Invalid URI + Invalid card number + Incorrect password + Failed to generate OTP code + Failed to create a passkey + Failed to authorize a request + + Barcode + Show as Barcode + Copy this authenticator to another device by scanning the QR code. + + Date picker + + Color picker + + How to delete an account? + A collection of info of how to delete your account from web services + + Easy + + Medium + + Hard + + Limited availability + + Impossible + Send email + Search websites + No instructions + Two-factor authentication + List of websites with two-factor authentication support + Search websites + Passkeys + List of websites with passkeys support + Search websites + + Data breach + Breached account data can provide malicious actors with access to sensitive personal and financial information, potentially leading to identity theft, financial fraud, and other forms of cybercrime. + No breaches found + Breached accounts found + Breaches + Occurred on %1$s + Reported on %1$s + Failed to check data breaches. You might currently be offline + Data breach + A password that is found in the data breaches takes significantly less time to break and should never be used. + Password is compromised + The password has been identified in known data breaches. Please change it immediately to protect your online security + No breaches found + Failed to check data breaches. You might currently be offline + + Large Type + Show in Large Type + Show in Large Type and Lock vault + App Picker + Search installed apps + System app + No apps + Choose a folder + Create a new folder: + + This organization will have an ownership of the copy. You will not be the direct owner. + Email forwarders + Email forwarders + Delete email forwarder? + Delete email forwarders? + Email forwarder integration + No email forwarders + Create an encrypted vault where the local data will be stored. + App password + Biometric authentication + Create a vault + Send crash reports + Create a vault + Erase app data + Close the app and erase all local app data + The vault is locked. Enter your app password to continue. + Unlock + + Unlock a vault + + Use biometric authentication to unlock the vault. + User verification is required. Enter your app password to continue. + Verify + Sync status + Up to date + Pending + Syncing + Sync failed + New item + Edit item + Style text with %1$s or %2$s and more. Limited Markdown syntax is supported. + italic + bold + Render preview + Auth re-prompt + Ask to authenticate again when you view or autofill a cipher + Add Bitwarden account + We are not affiliated, associated, authorized, endorsed by, or in any way officially connected with the Bitwarden, Inc., or any of its subsidiaries or its affiliates. + + To pass the captcha verification on an unofficial Bitwarden client, you must specify the client secret. To find it, visit Web vault / Settings / API Key. + + Client secret + Sign in + Region + United States + Europe + Custom (self-hosted) + HTTP headers + HTTP header + You can add custom HTTP headers that will be sent with every request to the server. + Key + Value + Add more + Server URL + Specify the base URL of your self-hosted Bitwarden installation. + Custom environment + You can specify the base URL of each service independently. + Web Vault Server URL + API Server URL + Icons Server URL + Identity Server URL + Verification + This authentication method is not supported yet. + Enter the verification code from your authenticator app. + Enter the verification code that was emailed to %1$s. + Enter the YubiKey authentication code manually. Place the cursor on the field below and trigger the YubiKey. + Authenticator + Duo (Organization) + FIDO2 Web Authentication + Email + FIDO U2F + Connect YubiKey via USB + Requires USB OTG support. + Touch the gold sensor on your YubiKey now. + Hold your YubiKey flat against the back of your device + Requires NFC support. + Failed to read YubiKey + Using FIDO2 WebAuthn requires using the Bitwarden Web vault version %1$s or higher. On older versions the authentication result will incorrectly be forwarded to the official Bitwarden app. + Confirm access + This data is protected, to continue please enter your app password. + + Confirm access + + Use biometric authentication to confirm your access and unlock this data. + Vault + Send + Generator + Watchtower + Settings + Locked due to inactivity + Text + File + Login + Card + Identity + Note + Passkey + Text + Boolean + Linked + + Pwned + Very strong + Strong + Good + Fair + Weak + Very strong passwords + Strong passwords + Good passwords + Fair passwords + Weak passwords + Filter + No filters available + Sort by + No sorting available + Title + Alphabetically + Reverse Alphabetically + Access count + Largest First + Smallest First + Modification date + Newest First + Oldest First + Expiration date + Newest First + Oldest First + Deletion date + Newest First + Oldest First + Password + Alphabetically + Reverse Alphabetically + Password modification date + Newest First + Oldest First + Password strength + Weakest First + Strongest First + Search vault + New item + There are no suggested items available for this context + + Security code + Saved to %1$s at %2$s + Password last modified at %1$s + Passkey created at %1$s + Last modified at %1$s + Created at %1$s + Deleted at %1$s + Expired at %1$s + Expiration scheduled at %1$s + Deleting scheduled at %1$s + + Call + + Text + + Email + + Directions + Sends + Search sends + New item + A password is required to access this share + Generator + Username generator + Password generator + Generate + Regenerate + Passphrase + Random passphrases provide the best combination of memorability and security. + Delimiter + Capitalize + Number + Username + Delimiter + Custom word + Capitalize + Number + Random symbols + A strong password has at least %1$d characters, uppercase & lowercase letters, digits and symbols. + Digits + Symbols + Uppercase letters + Lowercase letters + + Exclude similar symbols + + Exclude ambiguous symbols + Catch-all email + A catch-all email address provides users the option to receive all mail sent to their domain, even if they are sent to an email address that has not been set up for their domain. Ensure that your email hosting supports this feature before using it. + + Domain + Plus addressing email + Plus addressing means any email sent to %1$s is still sent to your account. This means you can have a lot of variations on your email address to give out to different people, sites, or mailing lists. Ensure that your email hosting supports this feature before using it. + Email + Subdomain addressing email + Subdomain addressing means any email sent to %1$s is still sent to your account. This means you can have a lot of variations on your email address to give out to different people, sites, or mailing lists. Ensure that your email hosting supports this feature before using it. + Email + Forwarded email alias + Create new login with the password + Create new login with the username + Password history + Show tips + Generator history + Clear history + Clear generator history? + This will remove all items from the history. + Password history + Clear history + Clear password history? + This will remove all passwords from the history. + Watchtower + Password strength + Security + Maintenance + Pwned Passwords + Passwords that have been exposed in data breaches. Such passwords should be changed immediately. + Reused Passwords + Don\'t use the same password on multiple websites. Generate unique passwords to improve security. + Vulnerable Accounts + Sites that were affected by a data breach since you last changed a password. Change your password to keep your account safe. + Unsecure Websites + Change the URLs that use HTTP protocol to use HTTPS protocol, as the latter utilizes the most advanced encryption available. + Inactive two-factor authentication + Sites that have two-factor authentication available but you haven\'t set it up yet. + Available Passkeys + Sites that have passkey available but you haven\'t set it up yet. It\'s simpler and more secure then a password. + Incomplete Items + Helps you identify missing or incomplete data in your vault. This can refer to identities with missing names or logins without usernames. + Expiring Items + Items that have expired or are expiring soon. + Duplicate URIs + Items that have one or more URIs that cover the same websites after applying the match detection. + Trashed Items + Items that have been moved into the trash. Having too many items in the trash may slow down operations with your vault. + Empty Folders + Folders that do not have any items in them. + Duplicate Items + Helps you identify and eliminate duplicate items in your vault. + Compromised Accounts + Check data breaches by a username or email address. + Change app password + Change password + Biometric authentication + + Change app password + App password never gets stored on the device nor sent over the network. It is used to generate a secret key that is used to encrypt the local data. + Unless you suspect unauthorized access or discover a malware on the device, there is no need to change the password if it is a strong, unique password. + Contact us + Your message + Use English to ensure that your feedback doesn\'t get misunderstood. + We appreciate the time that you spend sending us a message. Your message goes directly to us and we use it to troubleshoot issues, make product improvements and fix problems. While we may not reply to every report, we\'re reviewing and working on improvements & fixing issues as fast as we can. + Accounts + Add account + Team behind the app + I\'m a Software engineer from Ukraine. I specialize on app design and development. + Follow me + Search + Settings + Search settings + Appearance + Autofill + Development + Experimental + Settings + Notifications + Other + Permissions + Security + Keyguard Premium + Watchtower + Open-source licenses + Accounts + Add & view accounts + Autofill + Android Autofill & Credential services + Security + Biometrics, change password, vault timeout + Keyguard Premium + Unlock features & support app development + Watchtower + Compromised services, vulnerable passwords + Notifications + Alerts + Appearance + Language, theme and animations + Development + Test settings for development + Other + Community websites, app info + Show labels on navigation buttons + App version + App build date + Team behind the app + Reddit community + GitHub project + Crowdin project + Open-source licenses + Download APK file + Load App icons + Load Website icons + Queuing website icon might leak the website address to internet provider + Rich text formatting + Use Markdown to format notes + Language + Suggest translation + Font + Rate on Play Store + Tint color + Theme + Use contrast black theme + Open links in external browser + Conceal fields + Conceal sensitive info, such as passwords and credit card numbers + + Crash + Credential provider + Passkeys, passwords and data services + Privacy policy + Contact us + Experimental + Change app password + Require app password + In addition to your regular security settings, your app password will be required after this time or when biometry settings are changed + Immediately + Never + Send crash reports + Transition animation + Erase app data + Close the app and erase all local app data + Allow screenshots + Show the content of the app when switching between recent apps and allow capturing a screen + Hide the content of the app when switching between recent apps and forbid capturing a screen + Data safety + Lock vault + Lock after a reboot + Lock the vault after a device reboot + Lock when screen turns off + Lock the vault after a few seconds once the screen is off + Lock after a delay + Immediately + Never + Persist vault key on a disk + Vault key is persisted on an internal storage + Vault is locked after the app is unloaded from the memory + Storing a vault key on a disk is a security risk. If the device\'s internal storage is compromised, the attacker will gain access to the local vault data. + Permissions + Features overview + Biometric unlock + + Biometric unlock + Keep the screen on while viewing items + Autofill service + Use the Android Autofill Framework to assist in filling login information into other apps on the device + Auto-copy one-time passwords + When filling a login information, automatically copy one-time passwords + Inline suggestions + Embeds autofill suggestions directly into compatible keyboards + Manual selection + Displays an option to manually search a vault for an entry + Respect Autofill disabled flag + Disables autofill for a browser field that has autofill disabled flag set + Note that some websites are notorious for disabling autofill for a password field as well as some browsers are notorious for ignoring the autofill disabled flag + Ask to save data + Asks for updating the vault when filling of a form has completed + Auto-save app or website info + Automatically clear clipboard + Immediately + Never + One-time password notification duration + When you autofill a login item that has a one-time password, the notification with verification code will popup for at least the defined duration + Never + About Keyguard membership + The Premium unlocks extra features and funds a development of the app. Thank you for supporting us! ❤️ + Subscriptions + Products + Failed to load a list of subscriptions + Failed to load a list of products + Active + Will not renew + Manage on Play Store + Post notifications + Used to post downloading notifications + Camera + Used to scan QR codes + Allow two panel layout in landscape mode + Allow two panel layout in portrait mode + Dark + Light + Disabled + Dynamic + Crossfade + Developed specifically to increase legibility for readers with low vision, and to improve comprehension + Features Overview + Keyguard Premium + Multiple Accounts + Sign-in to multiple accounts simultaneously. + Two-way sync + Add or edit items and sync the changes back. + Offline editing + Add or edit items without internet connection. + Search + Search by anything + Name, email, password, phone number etc. + Filter + Filter by folder, organization, type etc. + Multiple keywords + Search by \'bitw test\' to find your \'Bitwarden Test Account\' item. + Watchtower + Pwned passwords + Find items with exposed in data breaches passwords. + Password strength + Find items with weak passwords. + Reused passwords + Find items with reused passwords. + Inactive 2FA + Find logins with available TOTP two-factor authentication. + Unsecure websites + Find websites that use HTTP protocol, auto-fix to HTTPS. + Incomplete items + Find empty items that might need updates. + Expiring items + Find expired or soon to be expired items. + Duplicate items + Find and merge duplicate items. + Misc + Multi-selection + Merge ciphers, fasten the refactoring with batch operations. + Show as Barcode + Encode a text as different barcodes. + Generator + Generate passwords or usernames. + Data safety + Local data + Local data consists of Downloads, User settings, Vault. They are stored in the internal storage of a device, which can only be accessed by the Android system or the Keyguard. + Downloads + User settings + The User settings are encrypted using a device-specific key. + Vault + The Vault is encrypted using a Key, derived from the App password using following steps: + The Salt and the Hash is then stored locally on a device, to later generate a master key to unlock the vault. + Unlocking a Vault means storing a correct Key in a device\'s RAM, gaining an ability to read and modify encrypted Vault. + Remote data + Remote data is stored on Bitwarden servers with zero-knowledge encryption. + diff --git a/common/src/commonMain/resources/MR/pl-rPL/plurals.xml b/common/src/commonMain/resources/MR/pl-rPL/plurals.xml new file mode 100644 index 00000000..5f2db8ad --- /dev/null +++ b/common/src/commonMain/resources/MR/pl-rPL/plurals.xml @@ -0,0 +1,2 @@ + + diff --git a/common/src/commonMain/resources/MR/pl-rPL/strings.xml b/common/src/commonMain/resources/MR/pl-rPL/strings.xml new file mode 100644 index 00000000..214f4486 --- /dev/null +++ b/common/src/commonMain/resources/MR/pl-rPL/strings.xml @@ -0,0 +1,868 @@ + + + OK + Close + Yes + No + + Name + Account name + Username + Password + App password + Current password + New password + Email + Verified + Not verified + Email visibility + Public URL + URL + + Access count + Learn more + Phone number + Passport number + License number + Card number + No card number + Brand + Security code + Valid from + Valid to + Card expiry month + Card expiry year + Cardholder name + Valid from + Expiry date + Company + Sync + + Hidden + + Visible + + Empty + + SSN + City + State + Info + Cancel + Continue + Country + Address + Postal code + Pull to search + Save + URI + URIs + Note + Notes + Attachments + No attachments + Expiring soon + Incomplete data + This item is missing some of the important information. + Item + Items + %1$s items + All items + No items + No folder + New folder + Folder + Folders + No folders + No collection + Collection + Collections + No collections + My vault + Organization + Organizations + No organizations + Miscellaneous + Add integration + Account + Accounts + No accounts + No account + Type + Options + Send + Reset + Length + Security + Contact info + Title + First name + Middle name + Last name + Full name + Address line 1 + Address line 2 + Address line 3 + Rename + Select type + Autofill + Passkey + Create a passkey + Unlock Keyguard + Confirming auth request… + Passkeys + + Signature counter + + Relying party + + Discoverable + Username + Display name + API key + Domain + Edit + Delete + Remove + Remove from the history + Reused password + Reused passwords + One-time password + Authenticator key + Use + Save passkey + Passkey available + Two-factor authentication available + Custom + Follow system settings + + Coming soon + Powered by + Verification code + Re-send verification code + Requested a verification email + Web vault + Launch Web vault + + Remember me + + Trash + + Download + Downloads + No downloads + No duplicates + Encryption + + Key + Hash + Salt + 256-bit AES + Random %1$d-bits of data + None + Text + Linked apps + Linked URIs + Custom fields + Reveal a secure note + Hide a secure note + Master password hint + Fingerprint phrase + What is a fingerprint? + Bitwarden premium + Unofficial Bitwarden server + Last synced at %1$s + Change name + Change color + Change master password hint + Sign out + Sign in + Visit Web vault to verify your email address + Upgrade your account to a premium membership and unlock some great additional features + Two-factor authentication + Require login verification with another device such as a security key, authenticator app, SMS or email + Active + Items + Log out + Log out? + All of the not synchronized changes will be lost! + Change name + Change names + Delete folder? + Delete folders? + This item(s) will be deleted immediately. You can not undo this action. + Recently opened + Often opened + View details + Save to + Add to favourites + Remove from favourites + Enable auth re-prompt + Disable auth re-prompt + Edit + Merge into… + Copy to… + Move to folder + Change name + Change names + Add password + Add passwords + Change password + Change passwords + View password history + Trash + Restore + Delete forever + Move associated items to trash + Open with… + Send with… + Open in a file manager + Delete local file + View parent item + Always show keyboard + Sync vault + Lock vault + Rename folder + Check the email in known data breaches + Check the username in known data breaches + Check the password in known data breaches + Check the website in known data breaches + Launch app + Launch website + Launch docs + Launch browser + Launch main page + Launch Play store + Launch with %1$s + Launch with… + How to delete an account? + Unsecure + Match app + Match detection + Base domain + Match resources by top-level and second-level domain. + Host + Match resources by hostname and (if specified) port. + Starts with + Match resources when the detected resource starts with the URI. + Exact + Match resources when the detected resource exactly matches the URI. + Regular expression + Match resources by regular expression. Advanced option. + Never + Ignore URI during auto-fill item search. + %1$s linked to the password + %1$s linked to the username + %1$s linked to the cardholder name + %1$s linked to the expiration month + %1$s linked to the expiration year + %1$s linked to the card code + %1$s linked to the card brand + %1$s linked to the card number + %1$s linked to the title + %1$s linked to the middle name + %1$s linked to the address line (1) + %1$s linked to the address line (2) + %1$s linked to the address line (3) + %1$s linked to the city + %1$s linked to the state + %1$s linked to the postal code + %1$s linked to the country + %1$s linked to the company + %1$s linked to the email + %1$s linked to the phone number + %1$s linked to the SSN + %1$s linked to the username + %1$s linked to the passport number + %1$s linked to the license number + %1$s linked to the first name + %1$s linked to the last name + %1$s linked to the full name + %1$s linked to an unknown field + Share with… + %1$d selected + Copy + Copy value + Copy URL + Copy URI + Copy package name + Copy password + Copy username + Copy email + Copy phone number + Copy passport number + Copy license number + Copy card number + Copy cardholder name + Copy expiration year + Copy expiration month + Copy CVV code + Copy one-time password + Copy secret key + Unlock Keyguard + Open Keyguard + January + February + March + April + May + June + July + August + September + October + November + December + Move up + Move down + Remove + Remove an item? + Add more + FIDO2 WebAuthn + Authenticate WebAuthn + Return to app + + Must not be empty + + Must not be blank + Must be custom domain + Must contain only US-ASCII characters + Must be at least %1$d symbols long + Must be %1$d symbols long + Invalid domain + Invalid email + Invalid URL + Invalid URI + Invalid card number + Incorrect password + Failed to generate OTP code + Failed to create a passkey + Failed to authorize a request + + Barcode + Show as Barcode + Copy this authenticator to another device by scanning the QR code. + + Date picker + + Color picker + + How to delete an account? + A collection of info of how to delete your account from web services + + Easy + + Medium + + Hard + + Limited availability + + Impossible + Send email + Search websites + No instructions + Two-factor authentication + List of websites with two-factor authentication support + Search websites + Passkeys + List of websites with passkeys support + Search websites + + Data breach + Breached account data can provide malicious actors with access to sensitive personal and financial information, potentially leading to identity theft, financial fraud, and other forms of cybercrime. + No breaches found + Breached accounts found + Breaches + Occurred on %1$s + Reported on %1$s + Failed to check data breaches. You might currently be offline + Data breach + A password that is found in the data breaches takes significantly less time to break and should never be used. + Password is compromised + The password has been identified in known data breaches. Please change it immediately to protect your online security + No breaches found + Failed to check data breaches. You might currently be offline + + Large Type + Show in Large Type + Show in Large Type and Lock vault + App Picker + Search installed apps + System app + No apps + Choose a folder + Create a new folder: + + This organization will have an ownership of the copy. You will not be the direct owner. + Email forwarders + Email forwarders + Delete email forwarder? + Delete email forwarders? + Email forwarder integration + No email forwarders + Create an encrypted vault where the local data will be stored. + App password + Biometric authentication + Create a vault + Send crash reports + Create a vault + Erase app data + Close the app and erase all local app data + The vault is locked. Enter your app password to continue. + Unlock + + Unlock a vault + + Use biometric authentication to unlock the vault. + User verification is required. Enter your app password to continue. + Verify + Sync status + Up to date + Pending + Syncing + Sync failed + New item + Edit item + Style text with %1$s or %2$s and more. Limited Markdown syntax is supported. + italic + bold + Render preview + Auth re-prompt + Ask to authenticate again when you view or autofill a cipher + Add Bitwarden account + We are not affiliated, associated, authorized, endorsed by, or in any way officially connected with the Bitwarden, Inc., or any of its subsidiaries or its affiliates. + + To pass the captcha verification on an unofficial Bitwarden client, you must specify the client secret. To find it, visit Web vault / Settings / API Key. + + Client secret + Sign in + Region + United States + Europe + Custom (self-hosted) + HTTP headers + HTTP header + You can add custom HTTP headers that will be sent with every request to the server. + Key + Value + Add more + Server URL + Specify the base URL of your self-hosted Bitwarden installation. + Custom environment + You can specify the base URL of each service independently. + Web Vault Server URL + API Server URL + Icons Server URL + Identity Server URL + Verification + This authentication method is not supported yet. + Enter the verification code from your authenticator app. + Enter the verification code that was emailed to %1$s. + Enter the YubiKey authentication code manually. Place the cursor on the field below and trigger the YubiKey. + Authenticator + Duo (Organization) + FIDO2 Web Authentication + Email + FIDO U2F + Connect YubiKey via USB + Requires USB OTG support. + Touch the gold sensor on your YubiKey now. + Hold your YubiKey flat against the back of your device + Requires NFC support. + Failed to read YubiKey + Using FIDO2 WebAuthn requires using the Bitwarden Web vault version %1$s or higher. On older versions the authentication result will incorrectly be forwarded to the official Bitwarden app. + Confirm access + This data is protected, to continue please enter your app password. + + Confirm access + + Use biometric authentication to confirm your access and unlock this data. + Vault + Send + Generator + Watchtower + Settings + Locked due to inactivity + Text + File + Login + Card + Identity + Note + Passkey + Text + Boolean + Linked + + Pwned + Very strong + Strong + Good + Fair + Weak + Very strong passwords + Strong passwords + Good passwords + Fair passwords + Weak passwords + Filter + No filters available + Sort by + No sorting available + Title + Alphabetically + Reverse Alphabetically + Access count + Largest First + Smallest First + Modification date + Newest First + Oldest First + Expiration date + Newest First + Oldest First + Deletion date + Newest First + Oldest First + Password + Alphabetically + Reverse Alphabetically + Password modification date + Newest First + Oldest First + Password strength + Weakest First + Strongest First + Search vault + New item + There are no suggested items available for this context + + Security code + Saved to %1$s at %2$s + Password last modified at %1$s + Passkey created at %1$s + Last modified at %1$s + Created at %1$s + Deleted at %1$s + Expired at %1$s + Expiration scheduled at %1$s + Deleting scheduled at %1$s + + Call + + Text + + Email + + Directions + Sends + Search sends + New item + A password is required to access this share + Generator + Username generator + Password generator + Generate + Regenerate + Passphrase + Random passphrases provide the best combination of memorability and security. + Delimiter + Capitalize + Number + Username + Delimiter + Custom word + Capitalize + Number + Random symbols + A strong password has at least %1$d characters, uppercase & lowercase letters, digits and symbols. + Digits + Symbols + Uppercase letters + Lowercase letters + + Exclude similar symbols + + Exclude ambiguous symbols + Catch-all email + A catch-all email address provides users the option to receive all mail sent to their domain, even if they are sent to an email address that has not been set up for their domain. Ensure that your email hosting supports this feature before using it. + + Domain + Plus addressing email + Plus addressing means any email sent to %1$s is still sent to your account. This means you can have a lot of variations on your email address to give out to different people, sites, or mailing lists. Ensure that your email hosting supports this feature before using it. + Email + Subdomain addressing email + Subdomain addressing means any email sent to %1$s is still sent to your account. This means you can have a lot of variations on your email address to give out to different people, sites, or mailing lists. Ensure that your email hosting supports this feature before using it. + Email + Forwarded email alias + Create new login with the password + Create new login with the username + Password history + Show tips + Generator history + Clear history + Clear generator history? + This will remove all items from the history. + Password history + Clear history + Clear password history? + This will remove all passwords from the history. + Watchtower + Password strength + Security + Maintenance + Pwned Passwords + Passwords that have been exposed in data breaches. Such passwords should be changed immediately. + Reused Passwords + Don\'t use the same password on multiple websites. Generate unique passwords to improve security. + Vulnerable Accounts + Sites that were affected by a data breach since you last changed a password. Change your password to keep your account safe. + Unsecure Websites + Change the URLs that use HTTP protocol to use HTTPS protocol, as the latter utilizes the most advanced encryption available. + Inactive two-factor authentication + Sites that have two-factor authentication available but you haven\'t set it up yet. + Available Passkeys + Sites that have passkey available but you haven\'t set it up yet. It\'s simpler and more secure then a password. + Incomplete Items + Helps you identify missing or incomplete data in your vault. This can refer to identities with missing names or logins without usernames. + Expiring Items + Items that have expired or are expiring soon. + Duplicate URIs + Items that have one or more URIs that cover the same websites after applying the match detection. + Trashed Items + Items that have been moved into the trash. Having too many items in the trash may slow down operations with your vault. + Empty Folders + Folders that do not have any items in them. + Duplicate Items + Helps you identify and eliminate duplicate items in your vault. + Compromised Accounts + Check data breaches by a username or email address. + Change app password + Change password + Biometric authentication + + Change app password + App password never gets stored on the device nor sent over the network. It is used to generate a secret key that is used to encrypt the local data. + Unless you suspect unauthorized access or discover a malware on the device, there is no need to change the password if it is a strong, unique password. + Contact us + Your message + Use English to ensure that your feedback doesn\'t get misunderstood. + We appreciate the time that you spend sending us a message. Your message goes directly to us and we use it to troubleshoot issues, make product improvements and fix problems. While we may not reply to every report, we\'re reviewing and working on improvements & fixing issues as fast as we can. + Accounts + Add account + Team behind the app + I\'m a Software engineer from Ukraine. I specialize on app design and development. + Follow me + Search + Settings + Search settings + Appearance + Autofill + Development + Experimental + Settings + Notifications + Other + Permissions + Security + Keyguard Premium + Watchtower + Open-source licenses + Accounts + Add & view accounts + Autofill + Android Autofill & Credential services + Security + Biometrics, change password, vault timeout + Keyguard Premium + Unlock features & support app development + Watchtower + Compromised services, vulnerable passwords + Notifications + Alerts + Appearance + Language, theme and animations + Development + Test settings for development + Other + Community websites, app info + Show labels on navigation buttons + App version + App build date + Team behind the app + Reddit community + GitHub project + Crowdin project + Open-source licenses + Download APK file + Load App icons + Load Website icons + Queuing website icon might leak the website address to internet provider + Rich text formatting + Use Markdown to format notes + Language + Suggest translation + Font + Rate on Play Store + Tint color + Theme + Use contrast black theme + Open links in external browser + Conceal fields + Conceal sensitive info, such as passwords and credit card numbers + + Crash + Credential provider + Passkeys, passwords and data services + Privacy policy + Contact us + Experimental + Change app password + Require app password + In addition to your regular security settings, your app password will be required after this time or when biometry settings are changed + Immediately + Never + Send crash reports + Transition animation + Erase app data + Close the app and erase all local app data + Allow screenshots + Show the content of the app when switching between recent apps and allow capturing a screen + Hide the content of the app when switching between recent apps and forbid capturing a screen + Data safety + Lock vault + Lock after a reboot + Lock the vault after a device reboot + Lock when screen turns off + Lock the vault after a few seconds once the screen is off + Lock after a delay + Immediately + Never + Persist vault key on a disk + Vault key is persisted on an internal storage + Vault is locked after the app is unloaded from the memory + Storing a vault key on a disk is a security risk. If the device\'s internal storage is compromised, the attacker will gain access to the local vault data. + Permissions + Features overview + Biometric unlock + + Biometric unlock + Keep the screen on while viewing items + Autofill service + Use the Android Autofill Framework to assist in filling login information into other apps on the device + Auto-copy one-time passwords + When filling a login information, automatically copy one-time passwords + Inline suggestions + Embeds autofill suggestions directly into compatible keyboards + Manual selection + Displays an option to manually search a vault for an entry + Respect Autofill disabled flag + Disables autofill for a browser field that has autofill disabled flag set + Note that some websites are notorious for disabling autofill for a password field as well as some browsers are notorious for ignoring the autofill disabled flag + Ask to save data + Asks for updating the vault when filling of a form has completed + Auto-save app or website info + Automatically clear clipboard + Immediately + Never + One-time password notification duration + When you autofill a login item that has a one-time password, the notification with verification code will popup for at least the defined duration + Never + About Keyguard membership + The Premium unlocks extra features and funds a development of the app. Thank you for supporting us! ❤️ + Subscriptions + Products + Failed to load a list of subscriptions + Failed to load a list of products + Active + Will not renew + Manage on Play Store + Post notifications + Used to post downloading notifications + Camera + Used to scan QR codes + Allow two panel layout in landscape mode + Allow two panel layout in portrait mode + Dark + Light + Disabled + Dynamic + Crossfade + Developed specifically to increase legibility for readers with low vision, and to improve comprehension + Features Overview + Keyguard Premium + Multiple Accounts + Sign-in to multiple accounts simultaneously. + Two-way sync + Add or edit items and sync the changes back. + Offline editing + Add or edit items without internet connection. + Search + Search by anything + Name, email, password, phone number etc. + Filter + Filter by folder, organization, type etc. + Multiple keywords + Search by \'bitw test\' to find your \'Bitwarden Test Account\' item. + Watchtower + Pwned passwords + Find items with exposed in data breaches passwords. + Password strength + Find items with weak passwords. + Reused passwords + Find items with reused passwords. + Inactive 2FA + Find logins with available TOTP two-factor authentication. + Unsecure websites + Find websites that use HTTP protocol, auto-fix to HTTPS. + Incomplete items + Find empty items that might need updates. + Expiring items + Find expired or soon to be expired items. + Duplicate items + Find and merge duplicate items. + Misc + Multi-selection + Merge ciphers, fasten the refactoring with batch operations. + Show as Barcode + Encode a text as different barcodes. + Generator + Generate passwords or usernames. + Data safety + Local data + Local data consists of Downloads, User settings, Vault. They are stored in the internal storage of a device, which can only be accessed by the Android system or the Keyguard. + Downloads + User settings + The User settings are encrypted using a device-specific key. + Vault + The Vault is encrypted using a Key, derived from the App password using following steps: + The Salt and the Hash is then stored locally on a device, to later generate a master key to unlock the vault. + Unlocking a Vault means storing a correct Key in a device\'s RAM, gaining an ability to read and modify encrypted Vault. + Remote data + Remote data is stored on Bitwarden servers with zero-knowledge encryption. + diff --git a/common/src/commonMain/resources/MR/pt-rBR/plurals.xml b/common/src/commonMain/resources/MR/pt-rBR/plurals.xml new file mode 100644 index 00000000..5f2db8ad --- /dev/null +++ b/common/src/commonMain/resources/MR/pt-rBR/plurals.xml @@ -0,0 +1,2 @@ + + diff --git a/common/src/commonMain/resources/MR/pt-rBR/strings.xml b/common/src/commonMain/resources/MR/pt-rBR/strings.xml new file mode 100644 index 00000000..214f4486 --- /dev/null +++ b/common/src/commonMain/resources/MR/pt-rBR/strings.xml @@ -0,0 +1,868 @@ + + + OK + Close + Yes + No + + Name + Account name + Username + Password + App password + Current password + New password + Email + Verified + Not verified + Email visibility + Public URL + URL + + Access count + Learn more + Phone number + Passport number + License number + Card number + No card number + Brand + Security code + Valid from + Valid to + Card expiry month + Card expiry year + Cardholder name + Valid from + Expiry date + Company + Sync + + Hidden + + Visible + + Empty + + SSN + City + State + Info + Cancel + Continue + Country + Address + Postal code + Pull to search + Save + URI + URIs + Note + Notes + Attachments + No attachments + Expiring soon + Incomplete data + This item is missing some of the important information. + Item + Items + %1$s items + All items + No items + No folder + New folder + Folder + Folders + No folders + No collection + Collection + Collections + No collections + My vault + Organization + Organizations + No organizations + Miscellaneous + Add integration + Account + Accounts + No accounts + No account + Type + Options + Send + Reset + Length + Security + Contact info + Title + First name + Middle name + Last name + Full name + Address line 1 + Address line 2 + Address line 3 + Rename + Select type + Autofill + Passkey + Create a passkey + Unlock Keyguard + Confirming auth request… + Passkeys + + Signature counter + + Relying party + + Discoverable + Username + Display name + API key + Domain + Edit + Delete + Remove + Remove from the history + Reused password + Reused passwords + One-time password + Authenticator key + Use + Save passkey + Passkey available + Two-factor authentication available + Custom + Follow system settings + + Coming soon + Powered by + Verification code + Re-send verification code + Requested a verification email + Web vault + Launch Web vault + + Remember me + + Trash + + Download + Downloads + No downloads + No duplicates + Encryption + + Key + Hash + Salt + 256-bit AES + Random %1$d-bits of data + None + Text + Linked apps + Linked URIs + Custom fields + Reveal a secure note + Hide a secure note + Master password hint + Fingerprint phrase + What is a fingerprint? + Bitwarden premium + Unofficial Bitwarden server + Last synced at %1$s + Change name + Change color + Change master password hint + Sign out + Sign in + Visit Web vault to verify your email address + Upgrade your account to a premium membership and unlock some great additional features + Two-factor authentication + Require login verification with another device such as a security key, authenticator app, SMS or email + Active + Items + Log out + Log out? + All of the not synchronized changes will be lost! + Change name + Change names + Delete folder? + Delete folders? + This item(s) will be deleted immediately. You can not undo this action. + Recently opened + Often opened + View details + Save to + Add to favourites + Remove from favourites + Enable auth re-prompt + Disable auth re-prompt + Edit + Merge into… + Copy to… + Move to folder + Change name + Change names + Add password + Add passwords + Change password + Change passwords + View password history + Trash + Restore + Delete forever + Move associated items to trash + Open with… + Send with… + Open in a file manager + Delete local file + View parent item + Always show keyboard + Sync vault + Lock vault + Rename folder + Check the email in known data breaches + Check the username in known data breaches + Check the password in known data breaches + Check the website in known data breaches + Launch app + Launch website + Launch docs + Launch browser + Launch main page + Launch Play store + Launch with %1$s + Launch with… + How to delete an account? + Unsecure + Match app + Match detection + Base domain + Match resources by top-level and second-level domain. + Host + Match resources by hostname and (if specified) port. + Starts with + Match resources when the detected resource starts with the URI. + Exact + Match resources when the detected resource exactly matches the URI. + Regular expression + Match resources by regular expression. Advanced option. + Never + Ignore URI during auto-fill item search. + %1$s linked to the password + %1$s linked to the username + %1$s linked to the cardholder name + %1$s linked to the expiration month + %1$s linked to the expiration year + %1$s linked to the card code + %1$s linked to the card brand + %1$s linked to the card number + %1$s linked to the title + %1$s linked to the middle name + %1$s linked to the address line (1) + %1$s linked to the address line (2) + %1$s linked to the address line (3) + %1$s linked to the city + %1$s linked to the state + %1$s linked to the postal code + %1$s linked to the country + %1$s linked to the company + %1$s linked to the email + %1$s linked to the phone number + %1$s linked to the SSN + %1$s linked to the username + %1$s linked to the passport number + %1$s linked to the license number + %1$s linked to the first name + %1$s linked to the last name + %1$s linked to the full name + %1$s linked to an unknown field + Share with… + %1$d selected + Copy + Copy value + Copy URL + Copy URI + Copy package name + Copy password + Copy username + Copy email + Copy phone number + Copy passport number + Copy license number + Copy card number + Copy cardholder name + Copy expiration year + Copy expiration month + Copy CVV code + Copy one-time password + Copy secret key + Unlock Keyguard + Open Keyguard + January + February + March + April + May + June + July + August + September + October + November + December + Move up + Move down + Remove + Remove an item? + Add more + FIDO2 WebAuthn + Authenticate WebAuthn + Return to app + + Must not be empty + + Must not be blank + Must be custom domain + Must contain only US-ASCII characters + Must be at least %1$d symbols long + Must be %1$d symbols long + Invalid domain + Invalid email + Invalid URL + Invalid URI + Invalid card number + Incorrect password + Failed to generate OTP code + Failed to create a passkey + Failed to authorize a request + + Barcode + Show as Barcode + Copy this authenticator to another device by scanning the QR code. + + Date picker + + Color picker + + How to delete an account? + A collection of info of how to delete your account from web services + + Easy + + Medium + + Hard + + Limited availability + + Impossible + Send email + Search websites + No instructions + Two-factor authentication + List of websites with two-factor authentication support + Search websites + Passkeys + List of websites with passkeys support + Search websites + + Data breach + Breached account data can provide malicious actors with access to sensitive personal and financial information, potentially leading to identity theft, financial fraud, and other forms of cybercrime. + No breaches found + Breached accounts found + Breaches + Occurred on %1$s + Reported on %1$s + Failed to check data breaches. You might currently be offline + Data breach + A password that is found in the data breaches takes significantly less time to break and should never be used. + Password is compromised + The password has been identified in known data breaches. Please change it immediately to protect your online security + No breaches found + Failed to check data breaches. You might currently be offline + + Large Type + Show in Large Type + Show in Large Type and Lock vault + App Picker + Search installed apps + System app + No apps + Choose a folder + Create a new folder: + + This organization will have an ownership of the copy. You will not be the direct owner. + Email forwarders + Email forwarders + Delete email forwarder? + Delete email forwarders? + Email forwarder integration + No email forwarders + Create an encrypted vault where the local data will be stored. + App password + Biometric authentication + Create a vault + Send crash reports + Create a vault + Erase app data + Close the app and erase all local app data + The vault is locked. Enter your app password to continue. + Unlock + + Unlock a vault + + Use biometric authentication to unlock the vault. + User verification is required. Enter your app password to continue. + Verify + Sync status + Up to date + Pending + Syncing + Sync failed + New item + Edit item + Style text with %1$s or %2$s and more. Limited Markdown syntax is supported. + italic + bold + Render preview + Auth re-prompt + Ask to authenticate again when you view or autofill a cipher + Add Bitwarden account + We are not affiliated, associated, authorized, endorsed by, or in any way officially connected with the Bitwarden, Inc., or any of its subsidiaries or its affiliates. + + To pass the captcha verification on an unofficial Bitwarden client, you must specify the client secret. To find it, visit Web vault / Settings / API Key. + + Client secret + Sign in + Region + United States + Europe + Custom (self-hosted) + HTTP headers + HTTP header + You can add custom HTTP headers that will be sent with every request to the server. + Key + Value + Add more + Server URL + Specify the base URL of your self-hosted Bitwarden installation. + Custom environment + You can specify the base URL of each service independently. + Web Vault Server URL + API Server URL + Icons Server URL + Identity Server URL + Verification + This authentication method is not supported yet. + Enter the verification code from your authenticator app. + Enter the verification code that was emailed to %1$s. + Enter the YubiKey authentication code manually. Place the cursor on the field below and trigger the YubiKey. + Authenticator + Duo (Organization) + FIDO2 Web Authentication + Email + FIDO U2F + Connect YubiKey via USB + Requires USB OTG support. + Touch the gold sensor on your YubiKey now. + Hold your YubiKey flat against the back of your device + Requires NFC support. + Failed to read YubiKey + Using FIDO2 WebAuthn requires using the Bitwarden Web vault version %1$s or higher. On older versions the authentication result will incorrectly be forwarded to the official Bitwarden app. + Confirm access + This data is protected, to continue please enter your app password. + + Confirm access + + Use biometric authentication to confirm your access and unlock this data. + Vault + Send + Generator + Watchtower + Settings + Locked due to inactivity + Text + File + Login + Card + Identity + Note + Passkey + Text + Boolean + Linked + + Pwned + Very strong + Strong + Good + Fair + Weak + Very strong passwords + Strong passwords + Good passwords + Fair passwords + Weak passwords + Filter + No filters available + Sort by + No sorting available + Title + Alphabetically + Reverse Alphabetically + Access count + Largest First + Smallest First + Modification date + Newest First + Oldest First + Expiration date + Newest First + Oldest First + Deletion date + Newest First + Oldest First + Password + Alphabetically + Reverse Alphabetically + Password modification date + Newest First + Oldest First + Password strength + Weakest First + Strongest First + Search vault + New item + There are no suggested items available for this context + + Security code + Saved to %1$s at %2$s + Password last modified at %1$s + Passkey created at %1$s + Last modified at %1$s + Created at %1$s + Deleted at %1$s + Expired at %1$s + Expiration scheduled at %1$s + Deleting scheduled at %1$s + + Call + + Text + + Email + + Directions + Sends + Search sends + New item + A password is required to access this share + Generator + Username generator + Password generator + Generate + Regenerate + Passphrase + Random passphrases provide the best combination of memorability and security. + Delimiter + Capitalize + Number + Username + Delimiter + Custom word + Capitalize + Number + Random symbols + A strong password has at least %1$d characters, uppercase & lowercase letters, digits and symbols. + Digits + Symbols + Uppercase letters + Lowercase letters + + Exclude similar symbols + + Exclude ambiguous symbols + Catch-all email + A catch-all email address provides users the option to receive all mail sent to their domain, even if they are sent to an email address that has not been set up for their domain. Ensure that your email hosting supports this feature before using it. + + Domain + Plus addressing email + Plus addressing means any email sent to %1$s is still sent to your account. This means you can have a lot of variations on your email address to give out to different people, sites, or mailing lists. Ensure that your email hosting supports this feature before using it. + Email + Subdomain addressing email + Subdomain addressing means any email sent to %1$s is still sent to your account. This means you can have a lot of variations on your email address to give out to different people, sites, or mailing lists. Ensure that your email hosting supports this feature before using it. + Email + Forwarded email alias + Create new login with the password + Create new login with the username + Password history + Show tips + Generator history + Clear history + Clear generator history? + This will remove all items from the history. + Password history + Clear history + Clear password history? + This will remove all passwords from the history. + Watchtower + Password strength + Security + Maintenance + Pwned Passwords + Passwords that have been exposed in data breaches. Such passwords should be changed immediately. + Reused Passwords + Don\'t use the same password on multiple websites. Generate unique passwords to improve security. + Vulnerable Accounts + Sites that were affected by a data breach since you last changed a password. Change your password to keep your account safe. + Unsecure Websites + Change the URLs that use HTTP protocol to use HTTPS protocol, as the latter utilizes the most advanced encryption available. + Inactive two-factor authentication + Sites that have two-factor authentication available but you haven\'t set it up yet. + Available Passkeys + Sites that have passkey available but you haven\'t set it up yet. It\'s simpler and more secure then a password. + Incomplete Items + Helps you identify missing or incomplete data in your vault. This can refer to identities with missing names or logins without usernames. + Expiring Items + Items that have expired or are expiring soon. + Duplicate URIs + Items that have one or more URIs that cover the same websites after applying the match detection. + Trashed Items + Items that have been moved into the trash. Having too many items in the trash may slow down operations with your vault. + Empty Folders + Folders that do not have any items in them. + Duplicate Items + Helps you identify and eliminate duplicate items in your vault. + Compromised Accounts + Check data breaches by a username or email address. + Change app password + Change password + Biometric authentication + + Change app password + App password never gets stored on the device nor sent over the network. It is used to generate a secret key that is used to encrypt the local data. + Unless you suspect unauthorized access or discover a malware on the device, there is no need to change the password if it is a strong, unique password. + Contact us + Your message + Use English to ensure that your feedback doesn\'t get misunderstood. + We appreciate the time that you spend sending us a message. Your message goes directly to us and we use it to troubleshoot issues, make product improvements and fix problems. While we may not reply to every report, we\'re reviewing and working on improvements & fixing issues as fast as we can. + Accounts + Add account + Team behind the app + I\'m a Software engineer from Ukraine. I specialize on app design and development. + Follow me + Search + Settings + Search settings + Appearance + Autofill + Development + Experimental + Settings + Notifications + Other + Permissions + Security + Keyguard Premium + Watchtower + Open-source licenses + Accounts + Add & view accounts + Autofill + Android Autofill & Credential services + Security + Biometrics, change password, vault timeout + Keyguard Premium + Unlock features & support app development + Watchtower + Compromised services, vulnerable passwords + Notifications + Alerts + Appearance + Language, theme and animations + Development + Test settings for development + Other + Community websites, app info + Show labels on navigation buttons + App version + App build date + Team behind the app + Reddit community + GitHub project + Crowdin project + Open-source licenses + Download APK file + Load App icons + Load Website icons + Queuing website icon might leak the website address to internet provider + Rich text formatting + Use Markdown to format notes + Language + Suggest translation + Font + Rate on Play Store + Tint color + Theme + Use contrast black theme + Open links in external browser + Conceal fields + Conceal sensitive info, such as passwords and credit card numbers + + Crash + Credential provider + Passkeys, passwords and data services + Privacy policy + Contact us + Experimental + Change app password + Require app password + In addition to your regular security settings, your app password will be required after this time or when biometry settings are changed + Immediately + Never + Send crash reports + Transition animation + Erase app data + Close the app and erase all local app data + Allow screenshots + Show the content of the app when switching between recent apps and allow capturing a screen + Hide the content of the app when switching between recent apps and forbid capturing a screen + Data safety + Lock vault + Lock after a reboot + Lock the vault after a device reboot + Lock when screen turns off + Lock the vault after a few seconds once the screen is off + Lock after a delay + Immediately + Never + Persist vault key on a disk + Vault key is persisted on an internal storage + Vault is locked after the app is unloaded from the memory + Storing a vault key on a disk is a security risk. If the device\'s internal storage is compromised, the attacker will gain access to the local vault data. + Permissions + Features overview + Biometric unlock + + Biometric unlock + Keep the screen on while viewing items + Autofill service + Use the Android Autofill Framework to assist in filling login information into other apps on the device + Auto-copy one-time passwords + When filling a login information, automatically copy one-time passwords + Inline suggestions + Embeds autofill suggestions directly into compatible keyboards + Manual selection + Displays an option to manually search a vault for an entry + Respect Autofill disabled flag + Disables autofill for a browser field that has autofill disabled flag set + Note that some websites are notorious for disabling autofill for a password field as well as some browsers are notorious for ignoring the autofill disabled flag + Ask to save data + Asks for updating the vault when filling of a form has completed + Auto-save app or website info + Automatically clear clipboard + Immediately + Never + One-time password notification duration + When you autofill a login item that has a one-time password, the notification with verification code will popup for at least the defined duration + Never + About Keyguard membership + The Premium unlocks extra features and funds a development of the app. Thank you for supporting us! ❤️ + Subscriptions + Products + Failed to load a list of subscriptions + Failed to load a list of products + Active + Will not renew + Manage on Play Store + Post notifications + Used to post downloading notifications + Camera + Used to scan QR codes + Allow two panel layout in landscape mode + Allow two panel layout in portrait mode + Dark + Light + Disabled + Dynamic + Crossfade + Developed specifically to increase legibility for readers with low vision, and to improve comprehension + Features Overview + Keyguard Premium + Multiple Accounts + Sign-in to multiple accounts simultaneously. + Two-way sync + Add or edit items and sync the changes back. + Offline editing + Add or edit items without internet connection. + Search + Search by anything + Name, email, password, phone number etc. + Filter + Filter by folder, organization, type etc. + Multiple keywords + Search by \'bitw test\' to find your \'Bitwarden Test Account\' item. + Watchtower + Pwned passwords + Find items with exposed in data breaches passwords. + Password strength + Find items with weak passwords. + Reused passwords + Find items with reused passwords. + Inactive 2FA + Find logins with available TOTP two-factor authentication. + Unsecure websites + Find websites that use HTTP protocol, auto-fix to HTTPS. + Incomplete items + Find empty items that might need updates. + Expiring items + Find expired or soon to be expired items. + Duplicate items + Find and merge duplicate items. + Misc + Multi-selection + Merge ciphers, fasten the refactoring with batch operations. + Show as Barcode + Encode a text as different barcodes. + Generator + Generate passwords or usernames. + Data safety + Local data + Local data consists of Downloads, User settings, Vault. They are stored in the internal storage of a device, which can only be accessed by the Android system or the Keyguard. + Downloads + User settings + The User settings are encrypted using a device-specific key. + Vault + The Vault is encrypted using a Key, derived from the App password using following steps: + The Salt and the Hash is then stored locally on a device, to later generate a master key to unlock the vault. + Unlocking a Vault means storing a correct Key in a device\'s RAM, gaining an ability to read and modify encrypted Vault. + Remote data + Remote data is stored on Bitwarden servers with zero-knowledge encryption. + diff --git a/common/src/commonMain/resources/MR/pt-rPT/plurals.xml b/common/src/commonMain/resources/MR/pt-rPT/plurals.xml new file mode 100644 index 00000000..5f2db8ad --- /dev/null +++ b/common/src/commonMain/resources/MR/pt-rPT/plurals.xml @@ -0,0 +1,2 @@ + + diff --git a/common/src/commonMain/resources/MR/pt-rPT/strings.xml b/common/src/commonMain/resources/MR/pt-rPT/strings.xml new file mode 100644 index 00000000..e07243af --- /dev/null +++ b/common/src/commonMain/resources/MR/pt-rPT/strings.xml @@ -0,0 +1,868 @@ + + + Ok + Fechar + Sim + Não + + Nome + Nome da conta + Nome de utilizador + Palavra-passe + Palavra-passe da aplicação + Palavra-passe atual + Nova palavra-passe + E-mail + Verificado + Não verificado + Visibilidade do e-mail + URL público + Ligação + + Contagem de acessos + Saber mais + Número de telemóvel + Número do passaporte + Número da licença + Número do cartão + Nenhum número de cartão + Marca + CVV + Válido de + Válido até + Mês de expiração do cartão + Ano de expiração do cartão + Titular do cartão + Válido de + Data de validade + Empresa + Sincronizar + + Oculto + + Visível + + Vazio + + NSS + Cidade + Distrito + Info + Cancelar + Próximo + País + Endereço + Código postal + Puxar para pesquisar + Guardar + URI + URIs + Nota + Notas + Anexos + Sem anexos + Expira em breve + Dados incompletos + Nesta entrada está em falta informação importante. + Entrada + Entradas + %1$s itens + Todos as entradas + Não existem entradas + Sem pasta + Nova pasta + Pasta + Pastas + Sem pastas + Nenhuma coleção + Coleção + Coleções + Sem coleções + O meu cofre + Organização + Organizações + Sem organizações + Diversos + Adicionar integração + Conta + Contas + Sem contas + Nenhuma conta + Tipo + Opções + Partilhar + Repor + Comprimento + Segurança + Informação do contacto + Título + Nome próprio + Apelidos + Sobrenome + Nome completo + Endereço linha 1 + Endereço linha 2 + Endereço linha 3 + Renomear + Selecionar tipo + Preenchimento automático + Chave de acesso + Criar uma chave de acesso + Desbloquear Keyguard + Confirmando solicitação de autenticação… + Chaves de acesso + + Contador de assinatura + + Entidade utilizada + + Detectável + Nome de utilizador + Nome a exibir + Chave API + Domínio + Editar + Eliminar + Apagar + Remover do histórico + Palavra-passe reutilizada + Palavras-passe reutilizadas + Código 2FA + Chave de autenticação + Utilizar + Guardar a chave de acesso + Chave de acesso disponível + Autenticação com 2FA disponível + Personalizado + Seguir definições do sistema + + Brevemente + Desenvolvido por + Código de verificação + Reenviar código de verificação + Solicitar e-mail de verificação + Cofre Web + Iniciar Cofre Web + + Manter sessão iniciada + + Reciclagem + + Transferência + Transferências + Sem transferências + Sem duplicados + Encriptação + + Chave + Hash + Segredo + AES de 256 bits + %1$d- bits de dados aleatórios + Nenhuma + Texto + Aplicativos vinculados + URIs vinculados + Campos personalizados + Revelar nota segura + Esconder nota segura + Lembrete da palavra-passe mestra + Frase de impressão digital + O que é uma impressão digital? + Bitwarden premium + Servidor não oficial Bitwarden + Última sincronização a %1$s + Alterar nome + Alterar cor + Alterar lembrete da senha mestra + Terminar sessão + Iniciar sessão + Visite o cofre web para verificar o seu endereço de e-mail + Atualize conta para uma adesão premium e desbloqueie funcionalidades adicionais fantásticas + Autenticação de dois fatores + Requer verificação de início de sessão com outro dispositivo, como uma chave de segurança, aplicativo de autenticação, SMS ou e-mail + Ativo + Entradas + Terminar sessão + Terminar a sessão? + Todas as alterações não sincronizadas vão ser perdidas! + Alterar nome + Alterar nomes + Eliminar pasta? + Eliminar pastas? + Esta entrada(s) vai ser excluída imediatamente. Não pode reverter esta ação. + Aberto recentemente + Frequentemente aberto + Ver detalhes + Guardar em + Adicionar aos favoritos + Remover dos favoritos + Ativar aviso de autenticação + Desativar aviso de autenticação + Editar + Combinar com… + Copiar para… + Mover para pasta + Alterar nome + Alterar nomes + Adicionar palavra-passe + Adicionar palavras-passe + Alterar palavra-passe + Alterar palavras-passe + Ver histórico de palavras-passe + Reciclagem + Restaurar + Eliminar definitivamente + Mover entradas associados para a reciclagem + Abrir com… + Enviar com… + Abrir com gestor de arquivos… + Apagar arquivo local + Ver entrada de cifra + Mostrar sempre teclado + Sincronizar cofre + Bloquear cofre + Renomear pasta + Verificar se o e-mail existe em violações de dados conhecidas + Verificar se o nome de utilizador existe em violações de dados conhecidas + Verificar se a palavra-passe existe em violações de dados conhecidas + Verificar se existem violações de dados conhecidas do site + Iniciar aplicação + Abrir página web + Abrir documentos + Iniciar navegador + Abrir página principal + Iniciar Play Store + Iniciar com %1$s + Iniciar com… + Como excluir uma conta? + Inseguro + Corresponder ao aplicativo + Deteção de correspondência + Domínio base + Corresponder recursos por domínio de nível superior e secundário. + Servidor + Corresponder recursos por domínio e (se especificado) porta. + Começa com + Corresponder recursos quando o recurso detectado iniciar com o URI. + Correspondência exata + Corresponder recursos quando o recurso detectado corresponder exatamente ao URI. + Expressão regular + Corresponder recursos por expressão regular. Opção avançada. + Nunca + Ignorar URI durante pesquisa de item de preenchimento automático. + %1$s vinculado à palavras-passe + %1$s vinculado ao nome de utilizador + %1$s vinculado ao nome do titular do cartão + %1$s vinculado ao mês de validade + %1$s vinculado ao ano de validade + %1$s vinculado ao código do cartão + %1$s vinculado ao emissor do cartão + %1$s vinculado ao número do cartão + %1$s vinculado ao título + %1$s vinculado ao nome do meio + %1$s vinculado à linha de endereço (1) + %1$s vinculado à linha de endereço (2) + %1$s vinculado à linha de endereço (3) + %1$s vinculado à cidade + %1$s vinculado ao conselho + %1$s vinculado ao código postal + %1$s vinculado ao país + %1$s vinculada à empresa + %1$s vinculado ao e-mail + %1$s vinculado ao número de telefone + %1$s vinculado ao número da segurança social + %1$s vinculado ao nome de utilizador + %1$s vinculado ao número do passaporte + %1$s vinculado ao número da carta de condução + %1$s vinculado ao primeiro nome + %1$s vinculado ao último nome + %1$s vinculado ao nome completo + %1$s vinculado a um campo desconhecido + Partilhar com… + %1$d selecionado + Copiar + Copiar valor + Copiar endereço + Copiar URI + Copiar nome do pacote + Copiar palavra-passe + Copiar nome de utilizador + Copiar e-mail + Copiar número de telefone + Copiar número do passaporte + Copiar número da licença + Copiar número do cartão + Copiar nome do titular + Copiar ano de expiração + Copiar mês de expiração + Copiar código CVV + Copiar código OTP + Copiar chave secreta + Desbloquear Keyguard + Abrir Keyguard + Janeiro + Fevereiro + Março + Abril + Maio + Junho + Julho + Agosto + Setembro + Outubro + Novembro + Dezembro + Mover para cima + Mover para baixo + Apagar + Remover uma entrada? + Adicionar mais + FIDO2 WebAuthn + Autenticar WebAuthn + Voltar à aplicação + + Não pode estar vazio + + Não deve estar em branco + Deve ser um domínio personalizado + Deve conter apenas caracteres US-ASCII + Mínimo %1$d caracteres de comprimento + Deve ter %1$d símbolos de comprimento + Domínio inválido + E-mail inválido + Endereço inválido + URI inválido + Número de cartão inválido + Palavra-passe incorreta + Falha ao gerar código OTP + Falha ao criar chave de acesso + Falha ao autorizar um pedido + + Código de barras + Mostrar como código de barras + Copie este código para outro dispositivo escaneando o código QR. + + Seletor de data + + Seletor de cores + + Como excluir uma conta? + Coleção de informações sobre como excluir a sua conta de serviços web + + Fácil + + Médio + + Difícil + + Disponibilidade limitada + + Impossível + Enviar e-mail + Pesquisar sites + Sem instruções + Autenticação de dois fatores + Lista de sites com suporte de autenticação de dois fatores + Pesquisar sites + Chaves de acesso + Lista de sites com suporte de chaves de acesso + Pesquisar sites + + Violação de dados + Contas com violação de dados podem fornecer aos agentes maliciosos acesso a informações pessoais e financeiras sensíveis, potencialmente conduzindo a roubo de identidade, fraude financeira e outras formas de ciber-criminalidade. + Nenhuma violação de dados encontrada + Encontradas contas com violação de dados + Violações de dados + Ocorreu a %1$s + Relatado a %1$s + Falha ao verificar violações de dados. Pode não haver acesso à internet + Violação de dados + Uma palavra-passe encontrada numa violação de dados leva significativamente menos tempo para decifrar e não é recomendado o seu uso. + Palavra-passe encontrada em violação de dados + A palavra-passe foi identificada em violações de dados conhecidas. Por favor, altere-a imediatamente para proteger a sua segurança on-line + Nenhuma violação de dados encontrada + Falha ao verificar violações de dados. Pode não haver acesso à internet + + Tipo Grande + Mostrar em tamanho grande + Mostrar em tamanho grande e bloquear cofre + Seletor de aplicação + Pesquisar aplicativos instalados + Aplicativos do sistema + Sem aplicativos + Escolher uma pasta + Criar uma nova pasta: + + Esta organização terá propriedade duma cópia. Você não será o proprietário direto. + Encaminhamentos de e-mail + Encaminhamentos de e-mail + Apagar encaminhamento de e-mail? + Apagar encaminhamentos de e-mail? + Integração de encaminhamento de e-mail + Sem encaminhamentos de e-mail + Criar um cofre criptografado onde os dados locais serão armazenados. + Palavra-passe da aplicação + Autenticação biométrica + Criar um cofre + Enviar relatórios de erros + Criar um cofre + Apagar dados do aplicativo + Fechar a app e apagar todos os dados locais do aplicativo + Cofre bloqueado. Introduzir palavra-passe do aplicativo para continuar. + Desbloquear + + Desbloqueie um cofre + + Usar autenticação biométrica para desbloquear o cofre. + É necessária a verificação do utilizador. Digite a palavra-passe da app para continuar. + Verificar + Estado da sincronização + Atualizado + Pendente + Sincronizando + Falha da sincronização + Nova entrada + Editar entrada + Estilizar texto com %1$s ou %2$s e muito mais. Sintaxe de Markdown limitada é suportada. + itálico + negrito + Renderizar pre-visualização + Confirmação de autenticação + Pedir para autenticar novamente quando visualizar ou preencher automaticamente uma cifra + Adicionar conta Bitwarden + Nós não somos afiliados, associados, autorizados, endossados ou de qualquer forma oficialmente ligados com Bitwarden, ou qualquer uma das suas filiais ou afiliadas. + + Para passar a verificação captcha num cliente do Bitwarden não oficial, deve especificar a chave secreta de cliente. Para encontrá-la, visite o Web vault em / Configurações / Chave de API. + + Chave secreta + Início sessão + Região + Estados Unidos + Europa + Personalizado (auto-hospedado) + Cabeçalhos HTTP + Cabeçalho HTTP + Pode adicionar cabeçalhos HTTP personalizados que serão enviados com cada solicitação ao servidor. + Chave + Valor + Adicionar mais + Endereço do servidor + Especifique o endereço de base da sua instalação do Bitwarden. + Ambiente personalizado + Pode especificar o endereço base de cada serviço independentemente. + Endereço do servidor do cofre web + Endereço do servidor da API + Endereço do servidor de ícones + Endereço do servidor de identidade + Verificação + Este método de autenticação ainda não é suportado. + Insira o código de verificação do seu aplicativo de autenticação. + Inserir o código de verificação que foi enviado por e-mail para %1$s. + Introduzir o código de autenticação YubiKey manualmente. Colocar o cursor no campo abaixo e ative o YubiKey. + Autenticador + Duo (Organização) + Autenticação web FIDO2 + E-mail + FIDO U2F + Ligar o YubiKey via USB + Requer suporte USB OTG. + Agora tocar no sensor dourado do YubiKey. + Segurar o YubiKey contra a parte de trás do seu dispositivo + Requer suporte a NFC. + Falha ao ler o YubiKey + Usar FIDO2 WebAuthn requer usar a versão web do cofre Bitwarden %1$s ou superior. Em versões mais antigas, a autenticação será incorretamente encaminhado para o aplicativo oficial do Bitwarden. + Confirmar acesso + Estes dados estão protegidos, para continuar por favor digitar a senha do seu aplicativo. + + Confirmar acesso + + Usar autenticação biométrica para confirmar acesso e desbloquear os dados. + Cofre + Partilhar + Gerador + Guardião + Definições + Bloqueado devido a inatividade + Texto + Ficheiro + Palavra-passe + Cartão + Identidade + Nota + Chave de acesso + Texto + Booleano + Relacionado + + Comprometida + Muito forte + Forte + Bom + Razoável + Fraca + Palavras-passe muito fortes + Palavras-passe fortes + Palavras-passe boas + Palavras-passe razoáveis + Palavras-passe fracas + Filtro + Nenhum filtro disponível + Ordenar por + Não há ordenação disponível + Título + Ordem alfabética + Ordem alfabética reversa + Contagem de acessos + Maiores primeiro + Menores primeiro + Data de modificação + Novos primeiro + Antigos primeiro + Data de validade + Novos primeiro + Antigos primeiro + Data de eliminação + Novos primeiro + Antigos primeiro + Palavra-passe + Ordem alfabética + Ordem alfabética reversa + Data de alteração da palavra-passe + Novos primeiro + Antigos primeiro + Segurança da palavra-passe + Mais fraco primeiro + Mais forte primeiro + Pesquisar no cofre + Novo item + Não existem sugestões disponíveis para este contexto + + Código de segurança + Guardado em %1$s em %2$s + Palavra-passe modificada pela última vez em %1$s + Chave de acesso criada em %1$s + Modificado pela última vez em %1$s + Criado em %1$s + Excluído em %1$s + Expirado em %1$s + Expiração agendada a %1$s + Excluir agendado a %1$s + + Chamar + + Texto + + E-mail + + Obter direções + Envios + Pesquisar partilhas + Novo item + É necessário uma palavra-passe para aceder esta partilha + Gerador + Gerador de nome de utilizador + Gerador de palavra-passe + Gerar + Gerar novamente + Frase-chave + Senhas de palavras aleatórias fornecem a melhor combinação de memorização e segurança. + Limite de caracteres + Maiúsculas + Números + Nome de utilizador + Limite de caracteres + Palavra personalizada + Maiúsculas + Número + Caracteres aleatórios + Uma palavra-passe forte tem pelo menos %1$d caracteres & deve ser composta por letras maiúsculas, minúsculas, números e símbolos. + Números + Símbolos + Letras maiúsculas + Letras minúsculas + + Excluir símbolos semelhantes + + Excluir símbolos ambíguos + E-mail catch-all + Um endereço de e-mail catch-all oferece aos utilizadores a opção de receber todos os e-mails enviados para o seu domínio, mesmo se eles forem enviados para um endereço de e-mail que não tenha sido configurado para o seu domínio. Certifique-se de que o provedor de e-mail suporta este recurso antes de usá-lo. + + Domínio + Endereço de e-mail Plus + Endereços de e-mail Plus significa que qualquer email enviado para %1$s ainda é enviado para a sua conta. Isto significa que você pode ter muitas variações no seu endereço de e-mail para dar a várias pessoas, sites ou listas de discussão. Certifique-se de que o seu provedor de e-mail suporta este recurso antes de usá-lo. + E-mail + Subdomínio de endereço de e-mail + Endereço de subdomínio significa que qualquer e-mail enviado para %1$s ainda é enviado para a sua conta. Isto significa que você pode ter muitas variações no seu endereço de e-mail para dar a outras pessoas, sites ou listas de discussão. Certifique-se de que o seu provedor de e-mail suporta este recurso antes de usá-lo. + E-mail + Alias de e-mail reencaminhado + Criar novo acesso com palavra-passe + Criar novo acesso com o nome de utilizador + Histórico de palavras-passe + Mostrar ajudas + Histórico do gerador + Limpar histórico + Limpar histórico do gerador? + Isto vai remover todos os dados do histórico. + Histórico de palavras-passe + Limpar histórico + Limpar histórico de palavras-passe? + Isto vai remover todas as palavras-passe do histórico. + Guardião + Segurança das palavras-passe + Segurança + Manutenção + Palavras-passe comprometidas + Palavras-passe que foram expostas em violações de dados. Essas palavras-passe devem ser alteradas imediatamente. + Palavras-passe reutilizadas + Não usar a mesma palavra-passe em vários sites. Criar palavras-passe únicas para melhorar a segurança. + Contas vulneráveis + Sites que foram afetados por uma violação de dados desde a última vez que foi alterada a palavra-passe. Alterar palavra-passe para manter a conta segura. + Sites inseguros + Alterar os endereços que usam o protocolo HTTP para usar o protocolo HTTPS, já que este utiliza a mais avançada criptografia disponível. + Autenticações de 2 fatores inativas (2FA) + Sites com autenticação de dois fatores disponíveis, mas ainda não foram configurados. + Chaves de acesso disponíveis + Sites que têm chaves de acesso disponíveis, mas ainda não foram configuradas. É mais simples e mais seguro que uma palavra-passe. + Entradas incompletas + Ajuda a identificar dados ausentes ou incompletos no seu cofre. Isso pode se referir a identidades com nomes ou credenciais ausentes sem nomes de utilizador. + Entradas expiradas + Dados que expiraram ou estão para expirar em breve. + URIs duplicados + Entradas que têm um ou mais URIs que cobrem os mesmos sites após a aplicação da detecção de correspondência. + Entradas apagadas + Dados que foram movidos para a reciclagem. Ter muitos dados na lixeira pode diminuir as operações com o seu cofre. + Pastas vazias + Pastas que não possuem nenhum item nelas. + Entradas duplicadas + Ajuda a identificar e eliminar dados duplicados no seu cofre. + Contas comprometidas + Verificar violações de dados utilizando nome de utilizador ou endereço de e-mail. + Alterar palavra-passe do aplicativo + Alterar palavra-passe + Autenticação biométrica + + Alterar palavra-passe do aplicativo + A senha da app nunca é armazenada no dispositivo nem enviada pela rede. É usado para gerar uma chave secreta que é usada para criptografar os dados locais. + A menos que você suspeite de acesso não autorizado ou descubra um malware no dispositivo, não há necessidade de alterar a senha se ela for uma senha forte e única. + Contacte-nos + A sua mensagem + Use Inglês para garantir que o seu relato não fique mal entendido. + Agradecemos o tempo que você gastou para nos enviar uma mensagem. A sua mensagem vai directamente para nós e nós a utilizamos para solucionar problemas, fazer com que o produto melhore e corrigir problemas. Embora não possamos responder a todos os relatórios, estamos analisando e trabalhando em melhorias & corrigindo problemas o mais rápido possível. + Contas + Adicionar conta + Equipa responsável pela aplicação + Sou um engenheiro de software da Ucrânia. Sou especialista em design de aplicativos e desenvolvimento. + Segue-me + Pesquisar + Definições + Pesquisar nas definições + Aparência + Preenchimento automático + Desenvolvimento + Experimental + Definições + Notificações + Outros + Permissões + Segurança + Keyguard Premium + Guardião + Licenças de código aberto + Contas + Adicionar & ver contas + Preenchimento automático + Preenchimento automático do Android + Segurança + Biometria, alterar palavra-passe, tempo limite do cofre + Keyguard Premium + Desbloquear recursos & suporte desenvolvimento do aplicativo + Guardião + Serviços comprometidos, palavras-passe vulneráveis + Notificações + Alertas + Aparência + Idioma, tema e animações + Desenvolvimento + Configurações de teste para desenvolvimento + Outros + Sites da comunidade, informações do aplicativo + Mostrar rótulos nos botões de navegação + Versão da aplicação + Data de instalação do aplicativo + Equipa da aplicação + Comunidade Reddit + Projeto no GitHub + Projeto no Crowdin + Licenças de código aberto + Baixar arquivo APK + Carregar ícones dos aplicativos + Carregar ícones de sites + A pesquisa pelos ícones dos sites pode levar à exposição do endereço dos sites ao provedor do serviço de internet + Formatação de texto rico + Usar Markdown para formatar notas + Idioma + Sugerir tradução + Tipo de letra + Classificar na Play Store + Tonalidade + Tema + Usar tema preto puro + Abrir links num browser externo + Ofuscar campos + Ocultar informações confidenciais, como senhas e números de cartão de crédito + + Falha + Provedor de credenciais + Chaves de acesso, palavras-passe e serviços de dados + Política de Privacidade + Contacte-nos + Experimental + Alterar palavra-passe do aplicativo + Exigir palavra-passe do aplicativo + Além das configurações de segurança normais, a senha do aplicativo será exigida após este tempo ou quando as configurações de biometria forem alteradas + Imediatamente + Nunca + Enviar relatórios de erros + Animação de transição + Apagar dados do aplicativo + Fechar a app e apagar todos os dados locais do aplicativo + Permitir captura de ecrã + Mostrar o conteúdo do aplicativo ao alternar entre apps recentes e permitir a captura de tela + Ocultar o conteúdo do aplicativo ao alternar entre apps recentes e proibir a captura de tela + Segurança de dados + Bloquear cofre + Bloquear após uma reinicialização + Bloquear o cofre após o dispositivo reiniciar + Bloquear quando o ecrã desligar + Bloquear o cofre após alguns segundos depois do ecrã desligado + Bloquear após atraso + Imediatamente + Nunca + Manter a chave do cofre + A chave do cofre persiste num armazenamento interno + O Cofre fica bloqueado após o aplicativo ser removido da memória + Armazenar uma chave de cofre no disco é um risco de segurança. Se o armazenamento interno do dispositivo for comprometido, o invasor terá acesso aos dados do cofre local. + Permissões + Resumo de funcionalidades + Desbloqueio biométrico + + Desbloqueio biométrico + Manter o ecrã ligado durante a visualização + Preenchimento automático + Usar a estrutura de preenchimento automático do Android para ajudar a preencher informações de login em outros aplicativos do dispositivo + Copiar automaticamente códigos de verificação 2FA + Ao preencher informações de login, copiar automaticamente códigos de uso único 2FA + Sugestões automáticas + Incorpora sugestões de preenchimento automático diretamente em caixas de texto compatíveis + Seleção manual + Exibe uma opção para pesquisar manualmente no cofre por uma entrada + Respeitar o sinalizador de preenchimento automático + Desativa o preenchimento automático para um campo do navegador que tem o sinalizador de preenchimento automático desabilitado + Note que alguns sites são conhecidos por desativar o preenchimento automático para um campo de senha, bem como alguns navegadores são conhecidos por ignorar o preenchimento automático desabilitado + Pedir para salvar dados + Pede para atualizar o cofre quando o preenchimento de um formulário tiver sido concluído + Salvar automaticamente dados do aplicativo ou informações do site + Limpar área de transferência automaticamente + Imediatamente + Nunca + Duração da notificação de código 2FA + Quando faz preenchimento automático de um item de login que tenha um código 2FA, a notificação com o código de verificação em janela flutuante aparece de acordo com a duração definida + Nunca + Sobre a adesão Keyguard Premium + O Premium desbloqueia recursos extras e financia o desenvolvimento do aplicativo. Obrigado por nos apoiar! ❤️ + Subscrições + Produtos + Falha ao carregar lista de subscrições + Falha ao carregar lista de produtos + Ativo + Não renovará + Gerir na Play Store + Mostrar notificações + Usado para mostrar notificações de download + Câmera + Usado para escanear códigos QR + Permitir visualização com dois painéis em modo paisagem + Permitir visualização com dois painéis em modo retrato + Escuro + Claro + Desativado + Dinâmico + Desvanecer + Desenvolvido especificamente para aumentar a legibilidade para os leitores com baixa visão e para melhorar a compreensão + Resumo de Funcionalidades + Keyguard Premium + Múltiplas contas + Iniciar sessão em várias contas simultaneamente. + Sincronização bidirecional + Adicionar ou editar dados e sincronizar as alterações. + Edição offline + Adicionar ou editar dados sem ligação à internet. + Pesquisar + Pesquisar por qualquer coisa + Nome, e-mail, palavra-passe, número de telefone, etc. + Filtro + Filtrar por pasta, organização, tipo etc. + Múltiplas palavras + Pesquisar por \'bitw teste\' para encontrar o item \'Conta de teste Bitwarden. + Guardião + Palavras-passe comprometidas + Encontrar palavras-passe comprometidas em violações de dados. + Segurança da palavra-passe + Encontre entradas com palavras-passe fracas. + Palavras-passe reutilizadas + Encontrar entradas com palavras-passe reutilizadas. + 2FA Inativos + Encontrar inícios de sessão com TOTP, autenticação de dois fatores disponível. + Sites inseguros + Encontrar sites que usam protocolo HTTP, corrigir automaticamente para HTTPS. + Entradas incompletas + Encontrar entradas vazias que podem precisar de atualizações. + Entradas expirando + Encontrar dados expirados ou que vão expirar em breve. + Entradas duplicadas + Procurar e unir dados duplicados. + Outros + Seleção múltipla + Juntar as cifras, acelerar a refatoração com operações em lote. + Mostrar como código de barras + Codificar um texto em códigos de barras diferentes. + Gerador + Gerar senhas ou nomes de utilizador. + Segurança de dados + Dados locais + Dados locais consistem em downloads, configurações do utilizador e cofre. São guardados no armazenamento interno do dispositivo, que só pode ser acedido pelo sistema Android ou pelo Keyguard. + Transferências + Definições do utilizador + As configurações do utilizador são criptografadas usando uma chave específica do dispositivo. + Definições do utilizador + O Cofre é criptografado usando uma chave, derivada da senha do aplicativo usando as seguintes etapas: + O segredo Salt e o Hash são armazenados localmente no dispositivo, para mais tarde gerar uma chave mestra para desbloquear o cofre. + Desbloquear um cofre significa armazenar uma chave correta na memória RAM do dispositivo, ganhando a capacidade de ler e modificar um cofre criptografado. + Dados remotos + Os dados remotos são armazenados nos servidores do Bitwarden com criptografia de conhecimento zero. + diff --git a/common/src/commonMain/resources/MR/ro-rRO/plurals.xml b/common/src/commonMain/resources/MR/ro-rRO/plurals.xml new file mode 100644 index 00000000..5f2db8ad --- /dev/null +++ b/common/src/commonMain/resources/MR/ro-rRO/plurals.xml @@ -0,0 +1,2 @@ + + diff --git a/common/src/commonMain/resources/MR/ro-rRO/strings.xml b/common/src/commonMain/resources/MR/ro-rRO/strings.xml new file mode 100644 index 00000000..214f4486 --- /dev/null +++ b/common/src/commonMain/resources/MR/ro-rRO/strings.xml @@ -0,0 +1,868 @@ + + + OK + Close + Yes + No + + Name + Account name + Username + Password + App password + Current password + New password + Email + Verified + Not verified + Email visibility + Public URL + URL + + Access count + Learn more + Phone number + Passport number + License number + Card number + No card number + Brand + Security code + Valid from + Valid to + Card expiry month + Card expiry year + Cardholder name + Valid from + Expiry date + Company + Sync + + Hidden + + Visible + + Empty + + SSN + City + State + Info + Cancel + Continue + Country + Address + Postal code + Pull to search + Save + URI + URIs + Note + Notes + Attachments + No attachments + Expiring soon + Incomplete data + This item is missing some of the important information. + Item + Items + %1$s items + All items + No items + No folder + New folder + Folder + Folders + No folders + No collection + Collection + Collections + No collections + My vault + Organization + Organizations + No organizations + Miscellaneous + Add integration + Account + Accounts + No accounts + No account + Type + Options + Send + Reset + Length + Security + Contact info + Title + First name + Middle name + Last name + Full name + Address line 1 + Address line 2 + Address line 3 + Rename + Select type + Autofill + Passkey + Create a passkey + Unlock Keyguard + Confirming auth request… + Passkeys + + Signature counter + + Relying party + + Discoverable + Username + Display name + API key + Domain + Edit + Delete + Remove + Remove from the history + Reused password + Reused passwords + One-time password + Authenticator key + Use + Save passkey + Passkey available + Two-factor authentication available + Custom + Follow system settings + + Coming soon + Powered by + Verification code + Re-send verification code + Requested a verification email + Web vault + Launch Web vault + + Remember me + + Trash + + Download + Downloads + No downloads + No duplicates + Encryption + + Key + Hash + Salt + 256-bit AES + Random %1$d-bits of data + None + Text + Linked apps + Linked URIs + Custom fields + Reveal a secure note + Hide a secure note + Master password hint + Fingerprint phrase + What is a fingerprint? + Bitwarden premium + Unofficial Bitwarden server + Last synced at %1$s + Change name + Change color + Change master password hint + Sign out + Sign in + Visit Web vault to verify your email address + Upgrade your account to a premium membership and unlock some great additional features + Two-factor authentication + Require login verification with another device such as a security key, authenticator app, SMS or email + Active + Items + Log out + Log out? + All of the not synchronized changes will be lost! + Change name + Change names + Delete folder? + Delete folders? + This item(s) will be deleted immediately. You can not undo this action. + Recently opened + Often opened + View details + Save to + Add to favourites + Remove from favourites + Enable auth re-prompt + Disable auth re-prompt + Edit + Merge into… + Copy to… + Move to folder + Change name + Change names + Add password + Add passwords + Change password + Change passwords + View password history + Trash + Restore + Delete forever + Move associated items to trash + Open with… + Send with… + Open in a file manager + Delete local file + View parent item + Always show keyboard + Sync vault + Lock vault + Rename folder + Check the email in known data breaches + Check the username in known data breaches + Check the password in known data breaches + Check the website in known data breaches + Launch app + Launch website + Launch docs + Launch browser + Launch main page + Launch Play store + Launch with %1$s + Launch with… + How to delete an account? + Unsecure + Match app + Match detection + Base domain + Match resources by top-level and second-level domain. + Host + Match resources by hostname and (if specified) port. + Starts with + Match resources when the detected resource starts with the URI. + Exact + Match resources when the detected resource exactly matches the URI. + Regular expression + Match resources by regular expression. Advanced option. + Never + Ignore URI during auto-fill item search. + %1$s linked to the password + %1$s linked to the username + %1$s linked to the cardholder name + %1$s linked to the expiration month + %1$s linked to the expiration year + %1$s linked to the card code + %1$s linked to the card brand + %1$s linked to the card number + %1$s linked to the title + %1$s linked to the middle name + %1$s linked to the address line (1) + %1$s linked to the address line (2) + %1$s linked to the address line (3) + %1$s linked to the city + %1$s linked to the state + %1$s linked to the postal code + %1$s linked to the country + %1$s linked to the company + %1$s linked to the email + %1$s linked to the phone number + %1$s linked to the SSN + %1$s linked to the username + %1$s linked to the passport number + %1$s linked to the license number + %1$s linked to the first name + %1$s linked to the last name + %1$s linked to the full name + %1$s linked to an unknown field + Share with… + %1$d selected + Copy + Copy value + Copy URL + Copy URI + Copy package name + Copy password + Copy username + Copy email + Copy phone number + Copy passport number + Copy license number + Copy card number + Copy cardholder name + Copy expiration year + Copy expiration month + Copy CVV code + Copy one-time password + Copy secret key + Unlock Keyguard + Open Keyguard + January + February + March + April + May + June + July + August + September + October + November + December + Move up + Move down + Remove + Remove an item? + Add more + FIDO2 WebAuthn + Authenticate WebAuthn + Return to app + + Must not be empty + + Must not be blank + Must be custom domain + Must contain only US-ASCII characters + Must be at least %1$d symbols long + Must be %1$d symbols long + Invalid domain + Invalid email + Invalid URL + Invalid URI + Invalid card number + Incorrect password + Failed to generate OTP code + Failed to create a passkey + Failed to authorize a request + + Barcode + Show as Barcode + Copy this authenticator to another device by scanning the QR code. + + Date picker + + Color picker + + How to delete an account? + A collection of info of how to delete your account from web services + + Easy + + Medium + + Hard + + Limited availability + + Impossible + Send email + Search websites + No instructions + Two-factor authentication + List of websites with two-factor authentication support + Search websites + Passkeys + List of websites with passkeys support + Search websites + + Data breach + Breached account data can provide malicious actors with access to sensitive personal and financial information, potentially leading to identity theft, financial fraud, and other forms of cybercrime. + No breaches found + Breached accounts found + Breaches + Occurred on %1$s + Reported on %1$s + Failed to check data breaches. You might currently be offline + Data breach + A password that is found in the data breaches takes significantly less time to break and should never be used. + Password is compromised + The password has been identified in known data breaches. Please change it immediately to protect your online security + No breaches found + Failed to check data breaches. You might currently be offline + + Large Type + Show in Large Type + Show in Large Type and Lock vault + App Picker + Search installed apps + System app + No apps + Choose a folder + Create a new folder: + + This organization will have an ownership of the copy. You will not be the direct owner. + Email forwarders + Email forwarders + Delete email forwarder? + Delete email forwarders? + Email forwarder integration + No email forwarders + Create an encrypted vault where the local data will be stored. + App password + Biometric authentication + Create a vault + Send crash reports + Create a vault + Erase app data + Close the app and erase all local app data + The vault is locked. Enter your app password to continue. + Unlock + + Unlock a vault + + Use biometric authentication to unlock the vault. + User verification is required. Enter your app password to continue. + Verify + Sync status + Up to date + Pending + Syncing + Sync failed + New item + Edit item + Style text with %1$s or %2$s and more. Limited Markdown syntax is supported. + italic + bold + Render preview + Auth re-prompt + Ask to authenticate again when you view or autofill a cipher + Add Bitwarden account + We are not affiliated, associated, authorized, endorsed by, or in any way officially connected with the Bitwarden, Inc., or any of its subsidiaries or its affiliates. + + To pass the captcha verification on an unofficial Bitwarden client, you must specify the client secret. To find it, visit Web vault / Settings / API Key. + + Client secret + Sign in + Region + United States + Europe + Custom (self-hosted) + HTTP headers + HTTP header + You can add custom HTTP headers that will be sent with every request to the server. + Key + Value + Add more + Server URL + Specify the base URL of your self-hosted Bitwarden installation. + Custom environment + You can specify the base URL of each service independently. + Web Vault Server URL + API Server URL + Icons Server URL + Identity Server URL + Verification + This authentication method is not supported yet. + Enter the verification code from your authenticator app. + Enter the verification code that was emailed to %1$s. + Enter the YubiKey authentication code manually. Place the cursor on the field below and trigger the YubiKey. + Authenticator + Duo (Organization) + FIDO2 Web Authentication + Email + FIDO U2F + Connect YubiKey via USB + Requires USB OTG support. + Touch the gold sensor on your YubiKey now. + Hold your YubiKey flat against the back of your device + Requires NFC support. + Failed to read YubiKey + Using FIDO2 WebAuthn requires using the Bitwarden Web vault version %1$s or higher. On older versions the authentication result will incorrectly be forwarded to the official Bitwarden app. + Confirm access + This data is protected, to continue please enter your app password. + + Confirm access + + Use biometric authentication to confirm your access and unlock this data. + Vault + Send + Generator + Watchtower + Settings + Locked due to inactivity + Text + File + Login + Card + Identity + Note + Passkey + Text + Boolean + Linked + + Pwned + Very strong + Strong + Good + Fair + Weak + Very strong passwords + Strong passwords + Good passwords + Fair passwords + Weak passwords + Filter + No filters available + Sort by + No sorting available + Title + Alphabetically + Reverse Alphabetically + Access count + Largest First + Smallest First + Modification date + Newest First + Oldest First + Expiration date + Newest First + Oldest First + Deletion date + Newest First + Oldest First + Password + Alphabetically + Reverse Alphabetically + Password modification date + Newest First + Oldest First + Password strength + Weakest First + Strongest First + Search vault + New item + There are no suggested items available for this context + + Security code + Saved to %1$s at %2$s + Password last modified at %1$s + Passkey created at %1$s + Last modified at %1$s + Created at %1$s + Deleted at %1$s + Expired at %1$s + Expiration scheduled at %1$s + Deleting scheduled at %1$s + + Call + + Text + + Email + + Directions + Sends + Search sends + New item + A password is required to access this share + Generator + Username generator + Password generator + Generate + Regenerate + Passphrase + Random passphrases provide the best combination of memorability and security. + Delimiter + Capitalize + Number + Username + Delimiter + Custom word + Capitalize + Number + Random symbols + A strong password has at least %1$d characters, uppercase & lowercase letters, digits and symbols. + Digits + Symbols + Uppercase letters + Lowercase letters + + Exclude similar symbols + + Exclude ambiguous symbols + Catch-all email + A catch-all email address provides users the option to receive all mail sent to their domain, even if they are sent to an email address that has not been set up for their domain. Ensure that your email hosting supports this feature before using it. + + Domain + Plus addressing email + Plus addressing means any email sent to %1$s is still sent to your account. This means you can have a lot of variations on your email address to give out to different people, sites, or mailing lists. Ensure that your email hosting supports this feature before using it. + Email + Subdomain addressing email + Subdomain addressing means any email sent to %1$s is still sent to your account. This means you can have a lot of variations on your email address to give out to different people, sites, or mailing lists. Ensure that your email hosting supports this feature before using it. + Email + Forwarded email alias + Create new login with the password + Create new login with the username + Password history + Show tips + Generator history + Clear history + Clear generator history? + This will remove all items from the history. + Password history + Clear history + Clear password history? + This will remove all passwords from the history. + Watchtower + Password strength + Security + Maintenance + Pwned Passwords + Passwords that have been exposed in data breaches. Such passwords should be changed immediately. + Reused Passwords + Don\'t use the same password on multiple websites. Generate unique passwords to improve security. + Vulnerable Accounts + Sites that were affected by a data breach since you last changed a password. Change your password to keep your account safe. + Unsecure Websites + Change the URLs that use HTTP protocol to use HTTPS protocol, as the latter utilizes the most advanced encryption available. + Inactive two-factor authentication + Sites that have two-factor authentication available but you haven\'t set it up yet. + Available Passkeys + Sites that have passkey available but you haven\'t set it up yet. It\'s simpler and more secure then a password. + Incomplete Items + Helps you identify missing or incomplete data in your vault. This can refer to identities with missing names or logins without usernames. + Expiring Items + Items that have expired or are expiring soon. + Duplicate URIs + Items that have one or more URIs that cover the same websites after applying the match detection. + Trashed Items + Items that have been moved into the trash. Having too many items in the trash may slow down operations with your vault. + Empty Folders + Folders that do not have any items in them. + Duplicate Items + Helps you identify and eliminate duplicate items in your vault. + Compromised Accounts + Check data breaches by a username or email address. + Change app password + Change password + Biometric authentication + + Change app password + App password never gets stored on the device nor sent over the network. It is used to generate a secret key that is used to encrypt the local data. + Unless you suspect unauthorized access or discover a malware on the device, there is no need to change the password if it is a strong, unique password. + Contact us + Your message + Use English to ensure that your feedback doesn\'t get misunderstood. + We appreciate the time that you spend sending us a message. Your message goes directly to us and we use it to troubleshoot issues, make product improvements and fix problems. While we may not reply to every report, we\'re reviewing and working on improvements & fixing issues as fast as we can. + Accounts + Add account + Team behind the app + I\'m a Software engineer from Ukraine. I specialize on app design and development. + Follow me + Search + Settings + Search settings + Appearance + Autofill + Development + Experimental + Settings + Notifications + Other + Permissions + Security + Keyguard Premium + Watchtower + Open-source licenses + Accounts + Add & view accounts + Autofill + Android Autofill & Credential services + Security + Biometrics, change password, vault timeout + Keyguard Premium + Unlock features & support app development + Watchtower + Compromised services, vulnerable passwords + Notifications + Alerts + Appearance + Language, theme and animations + Development + Test settings for development + Other + Community websites, app info + Show labels on navigation buttons + App version + App build date + Team behind the app + Reddit community + GitHub project + Crowdin project + Open-source licenses + Download APK file + Load App icons + Load Website icons + Queuing website icon might leak the website address to internet provider + Rich text formatting + Use Markdown to format notes + Language + Suggest translation + Font + Rate on Play Store + Tint color + Theme + Use contrast black theme + Open links in external browser + Conceal fields + Conceal sensitive info, such as passwords and credit card numbers + + Crash + Credential provider + Passkeys, passwords and data services + Privacy policy + Contact us + Experimental + Change app password + Require app password + In addition to your regular security settings, your app password will be required after this time or when biometry settings are changed + Immediately + Never + Send crash reports + Transition animation + Erase app data + Close the app and erase all local app data + Allow screenshots + Show the content of the app when switching between recent apps and allow capturing a screen + Hide the content of the app when switching between recent apps and forbid capturing a screen + Data safety + Lock vault + Lock after a reboot + Lock the vault after a device reboot + Lock when screen turns off + Lock the vault after a few seconds once the screen is off + Lock after a delay + Immediately + Never + Persist vault key on a disk + Vault key is persisted on an internal storage + Vault is locked after the app is unloaded from the memory + Storing a vault key on a disk is a security risk. If the device\'s internal storage is compromised, the attacker will gain access to the local vault data. + Permissions + Features overview + Biometric unlock + + Biometric unlock + Keep the screen on while viewing items + Autofill service + Use the Android Autofill Framework to assist in filling login information into other apps on the device + Auto-copy one-time passwords + When filling a login information, automatically copy one-time passwords + Inline suggestions + Embeds autofill suggestions directly into compatible keyboards + Manual selection + Displays an option to manually search a vault for an entry + Respect Autofill disabled flag + Disables autofill for a browser field that has autofill disabled flag set + Note that some websites are notorious for disabling autofill for a password field as well as some browsers are notorious for ignoring the autofill disabled flag + Ask to save data + Asks for updating the vault when filling of a form has completed + Auto-save app or website info + Automatically clear clipboard + Immediately + Never + One-time password notification duration + When you autofill a login item that has a one-time password, the notification with verification code will popup for at least the defined duration + Never + About Keyguard membership + The Premium unlocks extra features and funds a development of the app. Thank you for supporting us! ❤️ + Subscriptions + Products + Failed to load a list of subscriptions + Failed to load a list of products + Active + Will not renew + Manage on Play Store + Post notifications + Used to post downloading notifications + Camera + Used to scan QR codes + Allow two panel layout in landscape mode + Allow two panel layout in portrait mode + Dark + Light + Disabled + Dynamic + Crossfade + Developed specifically to increase legibility for readers with low vision, and to improve comprehension + Features Overview + Keyguard Premium + Multiple Accounts + Sign-in to multiple accounts simultaneously. + Two-way sync + Add or edit items and sync the changes back. + Offline editing + Add or edit items without internet connection. + Search + Search by anything + Name, email, password, phone number etc. + Filter + Filter by folder, organization, type etc. + Multiple keywords + Search by \'bitw test\' to find your \'Bitwarden Test Account\' item. + Watchtower + Pwned passwords + Find items with exposed in data breaches passwords. + Password strength + Find items with weak passwords. + Reused passwords + Find items with reused passwords. + Inactive 2FA + Find logins with available TOTP two-factor authentication. + Unsecure websites + Find websites that use HTTP protocol, auto-fix to HTTPS. + Incomplete items + Find empty items that might need updates. + Expiring items + Find expired or soon to be expired items. + Duplicate items + Find and merge duplicate items. + Misc + Multi-selection + Merge ciphers, fasten the refactoring with batch operations. + Show as Barcode + Encode a text as different barcodes. + Generator + Generate passwords or usernames. + Data safety + Local data + Local data consists of Downloads, User settings, Vault. They are stored in the internal storage of a device, which can only be accessed by the Android system or the Keyguard. + Downloads + User settings + The User settings are encrypted using a device-specific key. + Vault + The Vault is encrypted using a Key, derived from the App password using following steps: + The Salt and the Hash is then stored locally on a device, to later generate a master key to unlock the vault. + Unlocking a Vault means storing a correct Key in a device\'s RAM, gaining an ability to read and modify encrypted Vault. + Remote data + Remote data is stored on Bitwarden servers with zero-knowledge encryption. + diff --git a/common/src/commonMain/resources/MR/ru-rRU/plurals.xml b/common/src/commonMain/resources/MR/ru-rRU/plurals.xml new file mode 100644 index 00000000..5f2db8ad --- /dev/null +++ b/common/src/commonMain/resources/MR/ru-rRU/plurals.xml @@ -0,0 +1,2 @@ + + diff --git a/common/src/commonMain/resources/MR/ru-rRU/strings.xml b/common/src/commonMain/resources/MR/ru-rRU/strings.xml new file mode 100644 index 00000000..1545c665 --- /dev/null +++ b/common/src/commonMain/resources/MR/ru-rRU/strings.xml @@ -0,0 +1,868 @@ + + + OK + Закрыть + Да + Нет + + Название + Название учетной записи + Имя пользователя + Пароль + Пароль приложения + Текущий пароль + Новый пароль + Эл. почта + Подтверждено + Не подтверждено + Видимость email + Публичный URL + URL + + Количество посещений + Узнать больше + Номер телефона + Номер паспорта + Номер лицензии + Номер карты + Нет номера карты + Тип карты + CVV + Действует с + Действует до + Card expiry month + Card expiry year + Имя владельца карты + Действует с + Дата окончания + Компания + Синхронизировать + + Скрыто + + Видимый + + Пусто + + SSN + Город + Штат/Область + Информация + Отмена + Продолжить + Страна + Адрес + Почтовый индекс + Потяните для поиска + Сохранить + URI + URI-адреса + Заметка + Заметки + Вложения + Без вложений + Срок действия истекает + Неполные данные + В элементе отсутствует некоторая важная информация. + Элемент + Элементы + %1$s записей + Все элементы + Нет элементов + Без папки + Новая папка + Папка + Папки + Нет папок + Без коллекции + Коллекция + Коллекции + Нет коллекций + Моё хранилище + Организация + Организации + Нет организаций + Разное + Добавить интеграцию + Учётная запись + Учетные записи + Нет учетных записей + Нет аккаунта + Тип + Параметры + Отправить + Сброс + Длина + Безопасность + Контактная информация + Титул + Имя + Отчество + Фамилия + Full name + Адрес, строка 1 + Адрес, строка 2 + Адрес, строка 3 + Переименовать + Select type + Автозаполнение + Ключ доступа + Создать passkey + Разблокировать Keyguard + Подтверждение запроса авторизации… + Ключи доступа + + Количество использований + + Проверяющая сторона + + Источник данных авторизации + Имя пользователя + Отображаемое имя + Ключ API + Домен + Редактировать + Удалить + Удалить + Удалить из истории + Повторно использованный пароль + Повторно использованные пароли + Одноразовый пароль + Ключ аутентификатора + Использовать + Сохранить ключ доступа + Доступен Passkey + Доступна двухфакторная аутентификация + Пользовательское + Как в системе + + В ближайшее время + С помощью + Проверочный код + Отправить код подтверждения заново + Запрошено письмо с подтверждением + Веб-хранилище + Запустить веб-хранилище + + Запомнить меня + + Корзина + + Скачать + Загрузки + Нет загрузок + Дубликатов нет + Шифрование + + Ключ + Хэш + Соль + 256-bit AES + Случайные %1$d-битные данные + Нет + Текст + Связанные приложения + Связанные URI + Пользовательские поля + Показать защищенную заметку + Скрыть защищенную заметку + Подсказка к мастер-паролю + Фраза отпечатка + Что такое фраза отпечатка? + Bitwarden премиум + Неофициальный Bitwarden сервер + Последний раз синхронизировано %1$s + Изменить название + Изменить цвет + Изменить подсказку к мастер-паролю + Выйти + Войти + Посетите веб-хранилище для подтверждения адреса вашей электронной почты + Перейдите на Премиум и получите некоторые замечательные дополнительные функции + Двухфакторная аутентификация + Требовать подтверждения входа с помощью другого устройства, например ключа безопасности, приложения для аутентификации, SMS или электронной почты + Активно + Записи + Выход + Выход? + Все не синхронизированные изменения будут потеряны! + Изменить название + Изменить названия + Удалить папку? + Удалить папки? + Эта запись(и) будет удалено. Вы не можете отменить это действие. + Недавно открытые + Часто открытые + Подробнее + Сохранить в + Добавить в избранное + Удалить из избранного + Включить двойную аутентификацию + Отключить двойную аутентификацию + Редактировать + Объединить в… + Копировать в… + Переместить в папку + Изменить название + Изменить названия + Добавить пароль + Добавить пароли + Изменить пароль + Изменить пароли + Просмотреть историю паролей + Корзина + Восстановить + Удалить навсегда + Переместить связанные записи в корзину + Открыть с помощью… + Отправить с помощью… + Открыть в файловом менеджере + Удалить локальный файл + Просмотр родительского элемента + Всегда показывать клавиатуру + Синхронизировать хранилище + Заблокировать хранилище + Переименовать папку + Проверить электронную почту в известных утечках данных + Проверить имя пользователя в известных утечках данных + Проверить пароль в известных утечках данных + Проверить сайт в известных утечках данных + Запустить приложение + Открыть сайт + Открыть документацию + Запустить браузер + Открыть главную страницу + Открыть Play маркет + Запустить в %1$s + Запустить в… + Как удалить мою учетную запись? + Незащищенный + Выбрать приложение + Обнаружение совпадений + Основной домен + Сравнивать ресурсы по доменам первого и второго уровня. + Хост + Сравнивать ресурсы по имени хоста и порта (если указано). + Начинается с + Сравнивать ресурсы, когда обнаруженный ресурс начинается с URI. + Точно + Сравнивать ресурсы посимвольно начиная с начала URI-ссылки, требовать полное совпадение ссылки. + Регулярное выражение + Сравнивать ресурсы с помощью регулярного выражения. Настройка продвинутого уровня. + Никогда + Игнорировать URI во время поиска записей с автозаполнением. + %1$s привязан к паролю + %1$s привязан к имени пользователя + %1$s привязан к имени владельца карты + %1$s привязан к месяцу истечения срока + %1$s привязан к году истечения срока + %1$s привязан к коду карты + %1$s привязан к карточному бренду + %1$s привязан к номеру карты + %1$s привязан к названию + %1$s привязан к отечеству + %1$s привязан к улице + %1$s привязан к номеру дома (квартиры) + %1$s привязан к адресной строке (3) + %1$s привязан к городу + %1$s привязан к региону + %1$s привязан к почтовому индексу + %1$s привязан к стране + %1$s привязан к компании + %1$s привязан к электронной почте + %1$s привязан к номеру телефона + %1$s привязан к SSN + %1$s призван к имени пользователя + %1$s привязан к номеру паспорта + %1$s призван к номеру лицензии + %1$s привязан к имени + %1$s привязан к фамилии + %1$s привязан к полному имени + %1$s привязан в неизвестному полю + Поделиться через… + %1$d выбрано + Копировать + Копировать значение + Скопировать URL + Скопировать URI + Скопировать имя пакета + Скопировать пароль + Скопировать имя пользователя + Скопировать email + Скопировать номер телефона + Скопировать номер паспорта + Скопировать номер лицензии + Скопировать номер карты + Скопировать имя держателя карты + Скопировать год истечения срока действия + Скопировать месяц истечения срока действия + Скопировать CVV код + Копировать одноразовый пароль + Копировать секретный ключ + Разблокировать Keyguard + Открыть Keyguard + Январь + Февраль + Март + Апрель + Май + Июнь + Июль + Август + Сентябрь + Октябрь + Ноябрь + Декабрь + Переместить вверх + Переместить вниз + Удалить + Удалить элемент? + Добавить ещё + FIDO2 WebAuthn + Авторизация WebAutn + Вернуться в приложение + + Не должно быть пустым + + Не должно быть пустым + Должен быть собственный домен + Должен содержать только символы US-ASCII + Должно быть не менее %1$d символов + Должно быть %1$d символов + Недопустимый домен + Недопустимый e-mail + Недопустимый URL-адрес + Неверный URI + Недействительный номер карты + Неверный пароль + Не удалось сгенерировать OTP код + Не удалось создать passkey + Ошибка авторизации запроса + + Штрих-код + Показать как штрих-код + Скопируйте аутентификатор на другое устройство, отсканировав QR-код. + + Выбор даты + + Цветовая палитра + + Как удалить мою учетную запись? + Коллекция информации о том, как удалить ваш аккаунт из вебсервисов + + Легко + + Средне + + Сложно + + Ограниченная доступность + + Невозможно + Отправить e-mail + Поиск веб-сайтов + Нет инструкций + Двухфакторная аутентификация + Список сайтов с двухфакторной аутентификацией + Поиск веб-сайтов + Ключи доступа + Список сайтов с поддержкой ключей доступа + Поиск веб-сайтов + + Утечка данных + Скомпрометированные учетные записи могут предоставить злоумышленникам доступ к вашим персональным и финансовым данным, что подвергает вас риску кражи личных данных, финансовому мошенничеству и другим формам киберпреступлений. + Утечки не найдены + Обнаружены скомпрометированные учетные данные + Утечки + Произошло %1$s + Стало известно %1$s + Не удалось проверить утечку данных, возможно, вы сейчас не в сети + Утечка данных + Пароль, который обнаружен в результате утечки данных, требует значительно меньше времени для взлома и никогда не должен использоваться. + Пароль взломан + Пароль обнаружен в известных утечках данных. Пожалуйста, измените его немедленно, чтобы защитить свою безопасность в Интернете + Утечки не найдены + Не удалось проверить утечку данных, возможно, вы не в сети + + Крупно + Показать крупным шрифтом + Показать крупным шрифтом и заблокировать хранилище + Выбор приложения + Поиск установленных приложений + Системное приложение + Нет приложений + Выбрать папку + Создать новую папку: + + Эта организация будет иметь право собственности на копию. Вы не будете непосредственным владельцем. + Перенаправляющие письма + Перенаправляющие письма + Удалить пересыльщика сообщения? + Удалить пересыльщиков сообщений? + Интеграция с пересыльщиком сообщений + Нет пересыльщиков сообщений + Создайте зашифрованное хранилище, где будут храниться локальные данные. + Пароль приложения + Вход по биометрии + Создать хранилище + Отправлять отчеты об ошибках + Создать хранилище + Удалить все данные приложения + Закрыть приложение и удалить все локальные данные + Хранилище заблокировано. Чтобы продолжить, введите пароль приложения. + Разблокировать + + Разблокировать хранилище + + Используйте биометрическую аутентификацию для разблокировки хранилища. + Хранилище заблокировано. Чтобы продолжить, введите пароль приложения. + Подтвердить + Статус синхронизации + Актуально + В ожидании + Синхронизация + Ошибка синхронизации + Новая запись + Редактировать запись + Стилизуйте текст используя %1$s, %2$s и другое. Ограниченная поддержка синтаксиса Markdown. + курсив + жирный + Предпросмотр + Повторная аутентификация + Запрашивать повторную аутентификацию при просмотре или автозаполнении шифра + Добавить аккаунт Bitwarden + Мы не являемся аффилированными, связанными, уполномоченными, одобренными или каким-либо образом официально связанными с Bitwarden Inc., или с одним из её дочерних предприятий или филиалов. + + Для прохождения проверки капчи в неофициальном клиенте Bitwarden необходимо указать закрытый ключ клиента. Чтобы найти его, посетите Веб-хранилище → Параметры → API Key. + + Закрытый ключ клиента + Авторизация + Регион + США + Европа + Собственный сервер (self-hosted) + HTTP заголовки + HTTP заголовок + Вы можете добавить пользовательские HTTP-заголовки, которые будут отправляться с каждым запросом на сервер. + Ключ + Значение + Добавить еще + URL сервера + Укажите URL-адрес bitwarden на вашем сервере. + Пользовательское окружение + Вы можете указать базовый URL каждого сервиса отдельно. + URL сервера веб-хранилища + URL API сервера + URL сервера значков + URL сервера идентификации + Верификация + Этот метод аутентификации еще не поддерживается. + Введите код подтверждения из приложения для аутентификации. + Введите код подтверждения, который был отправлен на адрес электронной почты %1$s. + Введите код подтверждения YubiKey вручную. Поместите курсор на поле ниже и запустите YubiKey. + Аутентификатор + Duo (Организация) + FIDO2 Web аутентификация + Эл. почта + FIDO U2F + Подключить YubiKey через USB + Требуется поддержка USB OTG. + Коснитесь золотого датчика на вашем YubiKey сейчас. + Приложите YubiKey к задней панели устройства + Требуется поддержка NFC. + Не удалось прочитать YubiKey + Для использования FIDO2 WebAuthn необходимо использовать веб-хранилище Bitwarden версии %1$s или новее. В более старых версиях результат аутентификации будет ошибочно перенаправлен в официальное приложение Bitwarden. + Подтвердить доступ + Эти данные защищены, чтобы продолжить, введите ваш пароль приложения. + + Подтвердите доступ + + Использовать биометрическую аутентификацию для подтверждения доступа и разблокировки этих данных. + Хранилище + Send + Генератор + Доз. башня + Настройки + Заблокировано из-за бездействия + Текст + Файл + Логин + Карта + Личные данные + Заметка + Ключ доступа + Текст + Логическое значение + Связанный + + Скомпрометировано + Очень надёжный + Надёжный + Хороший + Посредственный + Слабый + Очень надёжные пароли + Надёжные пароли + Хорошие пароли + Посредственные пароли + Слабые пароли + Фильтр + Нет доступных фильтров + Сортировка + Нет доступных сортировок + Название + По возрастанию (от A до Я) + По убыванию (от Я до А) + Количество обращений + Сначала больше + Сначала меньше + Дата изменения + Сначала новые + Сначала старые + Срок окончания + Сначала новые + Сначала старые + Дата удаления + Сначала новые + Сначала старые + Пароль + По возрастанию (от A до Я) + По убыванию (от Я до А) + Дата изменения пароля + Сначала новые + Сначала старые + Надёжность пароля + Сначала слабые + Сначала надёжные + Поиск по хранилищу + Новая запись + Нет предложенных пунктов для этого контекста + + Код безопасности + Сохранено в %1$s на %2$s + Пароль последний раз изменен %1$s + Ключ доступа создано %1$s + Последний раз изменено %1$s + Создано %1$s + Удалено %1$s + Закончился срок действия %1$s + Срок действия закончится %1$s + Будет удалено %1$s + + Вызов + + SMS + + Эл. почта + + Направление + Sends + Поиск Sends + Новая запись + Для доступа к этой отправке необходимо будет ввести пароль + Генератор + Генератор имени пользователя + Генератор паролей + Сгенерировать + Перегенерировать + Парольная фраза + Случайные парольные фразы обеспечивают наилучшее сочетание запоминаемости и безопасности. + Разделитель + Прописные + Цифры + Имя пользователя + Разделитель + Пользовательское слово + Прописные + Число + Случайные символы + Надежный пароль содержит как минимум %1$d символов, заглавные и строчные буквы, цифры и специальные символы. + Цифры + Спец. символы + Заглавные буквы + Строчные буквы + + Исключить похожие символы + + Исключить неоднозначные символы + Универсальный e-mail + Универсальный адрес электронной почты предоставляет пользователям возможность получать всю почту, отправляемую на их домен, даже если она отправляется на адрес электронной почты, который не был настроен для их домена. Убедитесь, что ваш почтовый хостинг поддерживает эту функцию, прежде чем использовать её. + + Домен + Адрес эл. почты с плюсом + Плюс адресация означает, что любые сообщения, отправленные на %1$s, по-прежнему отправляются на адрес вашего аккаунта. Это означает, что вы можете иметь много вариантов адреса своей электронной почты, чтобы предоставлять его разным людям, сайтам или спискам рассылки. Перед использованием убедитесь, что хостинг электронной почты поддерживает эту функцию. + E-mail + Адрес эл.почты для поддомена + Поддоменная адресация означает, что любые сообщения, отправленные на %1$s, по-прежнему отправляются на адрес вашего аккаунта. Это означает, что вы можете иметь много вариантов адреса своей электронной почты, чтобы предоставлять его разным людям, сайтам или спискам рассылки. Перед использованием убедитесь, что хостинг электронной почты поддерживает эту функцию. + E-mail + Псевдоним электронной почты для пересылки + Использовать в качестве пароля + Использовать в качестве логина + История паролей + Показать советы + История генерации + Очистить историю + Очистить историю генератора? + Все записи из истории будут удалены. + История паролей + Очистить историю + Очистить историю паролей? + Все пароли из истории будут удалены. + Дозорная башня + Надёжность пароля + Безопасность + Инструменты + Скомпрометированные пароли + Пароли, раскрытые в результате утечки данных. Такие пароли следует немедленно изменить. + Повторно использованные пароли + Не используйте один и тот же пароль на разных сайтах. Создавайте уникальные пароли для повышения безопасности. + Уязвимые аккаунты + Сайты, на которых произошла утечка данных с момента последней смены пароля. Измените пароль, чтобы сохранить свою учетную запись в безопасности. + Небезопасные сайты + Измените URL-адреса, использующие протокол HTTP, на протокол HTTPS, поскольку последний использует самое современное шифрование. + Неактивная двухфакторная аутентификация + Сайты, на которых доступна, но еще не настроена двухфакторная аутентификация. + Доступные ключи доступа + Сайты, на которых есть ключ доступа (Passkey), но вы его еще не настроили. Это проще и, безопаснее пароля. + Незавершенные записи + Помогает найти недостающие или неполные данные в вашем хранилище. Это могут быть записи без названий или имен пользователей. + Истекающие записи + Записи, срок действия которых истек или скоро истекают. + Повторяющиеся URI-адреса + Записи с URI-адресами, которые после обработки на обнаружение совпадений покрывают одинаковые веб-сайты. + Удаленные записи + Записи, которые были перемещены в корзину. Слишком большое количество записей в корзине может замедлить операции с хранилищем. + Пустые папки + Папки, которые не содержат записей. + Повторяющиеся записи + Помогает найти и исправить записи с повторяющимися данными. + Скомпрометированные учетные записи + Проверить утечку данных по имени пользователя или адресу электронной почты. + Изменить пароль приложения + Изменить пароль + Биометрическая аутентификация + + Изменить пароль приложения + Пароль приложения никогда не хранится на устройстве и не отправляется по сети. Он используется для генерации секретного ключа, используемого для шифрования локальных данных. + Если вы не подозреваете, что к вашему устройству был несанкционированный доступ, или вы не нашли вредоносное программное обеспечение, то не нужно изменять текущий пароль приложения, если он достаточно надежный и уникальный. + Связаться с нами + Ваше сообщение + Пишите на английском, чтобы убедиться, что ваше сообщение не будет понято неправильно. + Мы ценим время, которое вы тратите, отправляя нам сообщение. Ваше сообщение поступает непосредственно к нам, и мы используем его для решения проблем и усовершенствования продукта. Хотя мы отвечаем не на каждое сообщение, мы просматриваем их и как можно быстрее устраняем проблемы, а также улучшаем функциональность. + Учетные записи + Добавить учётную запись + Команда Keyguard + Я инженер-программист из Украины. Я специализируюсь на дизайне и разработке приложений. + Подписаться + Поиск + Настройки + Поиск настроек + Оформление + Автозаполнение + Разработка + Экспериментальные + Настройки + Уведомления + Прочее + Разрешения + Безопасность + Keyguard премиум + Дозорная башня + Лицензии открытого программного обеспечения + Учетные записи + Добавление и просмотр учётных записей + Автозаполнение + Служба автозаполнения Android + Безопасность + Биометрия, изменение пароля, таймаут хранилища + Keyguard премиум + Откройте все функции и поддержите разработку приложения + Дозорная башня + Скомпрометированные сервисы, уязвимые пароли + Уведомления + Предупреждения + Оформление + Язык, тема и анимации + Разработка + Тестовые настройки для разработки + Прочее + Сайты сообщества, информация о приложении + Показывать надписи на кнопках навигации + Версия приложения + Дата сборки приложения + Команда Keyguard + Сообщество Reddit + Проект на GitHub + Проект на Crowdin + Лицензии открытого программного обеспечения + Скачать APK файл + Загрузить значки приложений + Загрузить значки веб-сайтов + Запрос значка сайта может привести к утечке адреса сайта к интернет-провайдеру + Форматирование текста + Использовать Markdown для форматирования заметок + Язык + Предложить перевод + Шрифт + Оценить в Play Store + Цвет оттенка + Тема + Использовать черную контрастную тему + Открывать ссылки во внешнем браузере + Скрыть поля + Скрыть конфиденциальную информацию, например пароли и номера кредитных карт + + Сбой + Поставщик учетных данных + Пасскеи, пароли и сервисы данных + Политика конфиденциальности + Связаться с нами + Экспериментальные + Изменить пароль приложения + Требовать пароль приложения + В дополнение к вашим обычным настройкам безопасности, после этого времени или при изменении настроек биометрии потребуется пароль приложения + Немедленно + Никогда + Отправлять отчеты об ошибках + Анимация переходов + Удалить все данные приложения + Закрыть приложение и удалить все локальные данные + Разрешить скриншоты + Показывать содержимое приложения при переключении между недавними приложениями и отображении экрана + Скрыть содержимое приложения при переключении между недавними приложениями и запретить создание скриншотов + Безопасность данных + Заблокировать хранилище + Заблокировать после перезагрузки + Заблокировать хранилище после перезагрузки устройства + Заблокировать после выключения экрана + Заблокировать хранилище через несколько секунд после выключения экрана + Заблокировать после задержки + Немедленно + Никогда + Сохранять ключ хранилища на диске + Ключ хранилища сохраняется на внутреннем хранилище + Хранилище блокируется после выгрузки приложения из памяти + Хранение ключа хранилища на диске представляет собой угрозу безопасности. Если внутреннее хранилище устройства скомпрометировано, злоумышленник получит доступ к локальным данным хранилища. + Разрешения + Обзор возможностей + Биометрическая разблокировка + + Биометрическая разблокировка + Держать экран включенным во время просмотра записей + Служба автозаполнения + Использовать фреймворк автозаполнения Android для заполнения информации о входе в другие приложения на устройстве + Автокопирование одноразовых паролей + При заполнении регистрационной информации автоматически копировать одноразовые пароли + Встроенные предложения + Встраивает предложения автозаполнения прямо в совместимые клавиатуры + Ручной выбор + Отображать параметр для ручного поиска в записях хранилища + Соблюдать отключение автозаполнения + Отключает автозаполнение поля браузера, в котором отключен флажок автозаполнения + Обратите внимание, что некоторые сайты отключают автозаполнение поля пароля, а некоторые браузеры известны тем, что игнорируют флаг отключения автозаполнения + Запрашивать сохранение данных + Запрашивать обновление хранилища при заполнении формы + Автосохранение информации приложения или сайта + Автоматически очищать буфер обмена + Немедленно + Никогда + Длительность уведомления о разовых паролях + При заполнении логина с одноразовым паролем уведомление с кодом подтверждения появляется по крайней мере на заданную длительность + Никогда + О членстве в Keyguard + Премиум открывает дополнительные возможности и финансирует разработку приложения. Спасибо за вашу поддержку! ❤️ + Подписки + Товары + Не удалось загрузить список подписок + Не удалось загрузить список товаров + Активно + Не будет продлеваться + Управлять в Play Store + Создание уведомлений + Используется для отправки уведомлений о загрузке + Камера + Используется для сканирования QR-кодов + Разрешить два панели в альбомном режиме + Разрешить два панели в портретном режиме + Тёмная + Светлая + Отключено + Динамический + Перекрестный переход + Разработан специально для повышения разборчивости и улучшения понимания для читателей со слабым зрением + Обзор возможностей + Keyguard премиум + Несколько аккаунтов + Вход в несколько аккаунтов одновременно. + Двухсторонняя синхронизация + Добавляйте или редактируйте записи и синхронизируйте их в облачном хранилище. + Автономное редактирование + Добавление или редактирование записей без подключения к интернету. + Поиск + Поиск чего-либо + Имя, email, пароль, номер телефона и т. д. + Фильтр + Фильтр по папке, организации, типу и т.д. + Несколько ключевых слов + Введите в поиске \'bitw test\', чтобы найти запись \'Bitwarden Test Account\'. + Дозорная башня + Скомпрометированные пароли + Найти записи с открытыми паролями, связанными с утечкой данных. + Надёжность пароля + Найдите записи со слабыми паролями. + Повторно использованные пароли + Найдите записи с повторяющимися паролями. + Неактивная двухфакторная аутентификация + Найдите логины с доступной двухфакторной аутентификацией TOTP. + Небезопасные сайты + Найти веб-сайты, которые используют HTTP-протокол, автоисправление в HTTPS. + Незавершенные элементы + Найти пустые записи, которые могут потребовать замену + Истекающие элементы + Найти устаревшие или скоро устаревшие элементы. + Повторяющиеся записи + Находите и объединяйте повторяющиеся элементы. + Разное + Мультивыбор + Объединяйте шифры, закрепляйте рефакторинг пакетными операциями. + Показать как штрих-код + Кодируйте текст в виде различных штрих-кодов. + Генератор + Генерировать пароли или имена пользователей. + Безопасность данных + Локальные данные + Локальные данные состоят из загрузок, настроек пользователя и хранилища. Они хранятся во внутренней памяти устройства, которая доступна только для системы Android или Keyguard. + Загрузки + Настройки пользователя + Настройки пользователя зашифрованы с помощью ключа устройства. + Настройки пользователя + Хранилище шифруется с помощью ключа, полученного на основе пароля приложения, следующим образом: + После этого соль и хэш сохраняются локально на устройстве, для последующей генерации мастер-ключа для разблокировки хранилища. + Разблокировка хранилища означает сохранение корректного ключа в оперативной памяти устройства, что дает возможность читать и изменять зашифрованное хранилище. + Облачные данные + Облачные данные хранятся на серверах Bitwarden с шифрованием с нулевым знанием. + diff --git a/common/src/commonMain/resources/MR/sr-rSP/plurals.xml b/common/src/commonMain/resources/MR/sr-rSP/plurals.xml new file mode 100644 index 00000000..5f2db8ad --- /dev/null +++ b/common/src/commonMain/resources/MR/sr-rSP/plurals.xml @@ -0,0 +1,2 @@ + + diff --git a/common/src/commonMain/resources/MR/sr-rSP/strings.xml b/common/src/commonMain/resources/MR/sr-rSP/strings.xml new file mode 100644 index 00000000..214f4486 --- /dev/null +++ b/common/src/commonMain/resources/MR/sr-rSP/strings.xml @@ -0,0 +1,868 @@ + + + OK + Close + Yes + No + + Name + Account name + Username + Password + App password + Current password + New password + Email + Verified + Not verified + Email visibility + Public URL + URL + + Access count + Learn more + Phone number + Passport number + License number + Card number + No card number + Brand + Security code + Valid from + Valid to + Card expiry month + Card expiry year + Cardholder name + Valid from + Expiry date + Company + Sync + + Hidden + + Visible + + Empty + + SSN + City + State + Info + Cancel + Continue + Country + Address + Postal code + Pull to search + Save + URI + URIs + Note + Notes + Attachments + No attachments + Expiring soon + Incomplete data + This item is missing some of the important information. + Item + Items + %1$s items + All items + No items + No folder + New folder + Folder + Folders + No folders + No collection + Collection + Collections + No collections + My vault + Organization + Organizations + No organizations + Miscellaneous + Add integration + Account + Accounts + No accounts + No account + Type + Options + Send + Reset + Length + Security + Contact info + Title + First name + Middle name + Last name + Full name + Address line 1 + Address line 2 + Address line 3 + Rename + Select type + Autofill + Passkey + Create a passkey + Unlock Keyguard + Confirming auth request… + Passkeys + + Signature counter + + Relying party + + Discoverable + Username + Display name + API key + Domain + Edit + Delete + Remove + Remove from the history + Reused password + Reused passwords + One-time password + Authenticator key + Use + Save passkey + Passkey available + Two-factor authentication available + Custom + Follow system settings + + Coming soon + Powered by + Verification code + Re-send verification code + Requested a verification email + Web vault + Launch Web vault + + Remember me + + Trash + + Download + Downloads + No downloads + No duplicates + Encryption + + Key + Hash + Salt + 256-bit AES + Random %1$d-bits of data + None + Text + Linked apps + Linked URIs + Custom fields + Reveal a secure note + Hide a secure note + Master password hint + Fingerprint phrase + What is a fingerprint? + Bitwarden premium + Unofficial Bitwarden server + Last synced at %1$s + Change name + Change color + Change master password hint + Sign out + Sign in + Visit Web vault to verify your email address + Upgrade your account to a premium membership and unlock some great additional features + Two-factor authentication + Require login verification with another device such as a security key, authenticator app, SMS or email + Active + Items + Log out + Log out? + All of the not synchronized changes will be lost! + Change name + Change names + Delete folder? + Delete folders? + This item(s) will be deleted immediately. You can not undo this action. + Recently opened + Often opened + View details + Save to + Add to favourites + Remove from favourites + Enable auth re-prompt + Disable auth re-prompt + Edit + Merge into… + Copy to… + Move to folder + Change name + Change names + Add password + Add passwords + Change password + Change passwords + View password history + Trash + Restore + Delete forever + Move associated items to trash + Open with… + Send with… + Open in a file manager + Delete local file + View parent item + Always show keyboard + Sync vault + Lock vault + Rename folder + Check the email in known data breaches + Check the username in known data breaches + Check the password in known data breaches + Check the website in known data breaches + Launch app + Launch website + Launch docs + Launch browser + Launch main page + Launch Play store + Launch with %1$s + Launch with… + How to delete an account? + Unsecure + Match app + Match detection + Base domain + Match resources by top-level and second-level domain. + Host + Match resources by hostname and (if specified) port. + Starts with + Match resources when the detected resource starts with the URI. + Exact + Match resources when the detected resource exactly matches the URI. + Regular expression + Match resources by regular expression. Advanced option. + Never + Ignore URI during auto-fill item search. + %1$s linked to the password + %1$s linked to the username + %1$s linked to the cardholder name + %1$s linked to the expiration month + %1$s linked to the expiration year + %1$s linked to the card code + %1$s linked to the card brand + %1$s linked to the card number + %1$s linked to the title + %1$s linked to the middle name + %1$s linked to the address line (1) + %1$s linked to the address line (2) + %1$s linked to the address line (3) + %1$s linked to the city + %1$s linked to the state + %1$s linked to the postal code + %1$s linked to the country + %1$s linked to the company + %1$s linked to the email + %1$s linked to the phone number + %1$s linked to the SSN + %1$s linked to the username + %1$s linked to the passport number + %1$s linked to the license number + %1$s linked to the first name + %1$s linked to the last name + %1$s linked to the full name + %1$s linked to an unknown field + Share with… + %1$d selected + Copy + Copy value + Copy URL + Copy URI + Copy package name + Copy password + Copy username + Copy email + Copy phone number + Copy passport number + Copy license number + Copy card number + Copy cardholder name + Copy expiration year + Copy expiration month + Copy CVV code + Copy one-time password + Copy secret key + Unlock Keyguard + Open Keyguard + January + February + March + April + May + June + July + August + September + October + November + December + Move up + Move down + Remove + Remove an item? + Add more + FIDO2 WebAuthn + Authenticate WebAuthn + Return to app + + Must not be empty + + Must not be blank + Must be custom domain + Must contain only US-ASCII characters + Must be at least %1$d symbols long + Must be %1$d symbols long + Invalid domain + Invalid email + Invalid URL + Invalid URI + Invalid card number + Incorrect password + Failed to generate OTP code + Failed to create a passkey + Failed to authorize a request + + Barcode + Show as Barcode + Copy this authenticator to another device by scanning the QR code. + + Date picker + + Color picker + + How to delete an account? + A collection of info of how to delete your account from web services + + Easy + + Medium + + Hard + + Limited availability + + Impossible + Send email + Search websites + No instructions + Two-factor authentication + List of websites with two-factor authentication support + Search websites + Passkeys + List of websites with passkeys support + Search websites + + Data breach + Breached account data can provide malicious actors with access to sensitive personal and financial information, potentially leading to identity theft, financial fraud, and other forms of cybercrime. + No breaches found + Breached accounts found + Breaches + Occurred on %1$s + Reported on %1$s + Failed to check data breaches. You might currently be offline + Data breach + A password that is found in the data breaches takes significantly less time to break and should never be used. + Password is compromised + The password has been identified in known data breaches. Please change it immediately to protect your online security + No breaches found + Failed to check data breaches. You might currently be offline + + Large Type + Show in Large Type + Show in Large Type and Lock vault + App Picker + Search installed apps + System app + No apps + Choose a folder + Create a new folder: + + This organization will have an ownership of the copy. You will not be the direct owner. + Email forwarders + Email forwarders + Delete email forwarder? + Delete email forwarders? + Email forwarder integration + No email forwarders + Create an encrypted vault where the local data will be stored. + App password + Biometric authentication + Create a vault + Send crash reports + Create a vault + Erase app data + Close the app and erase all local app data + The vault is locked. Enter your app password to continue. + Unlock + + Unlock a vault + + Use biometric authentication to unlock the vault. + User verification is required. Enter your app password to continue. + Verify + Sync status + Up to date + Pending + Syncing + Sync failed + New item + Edit item + Style text with %1$s or %2$s and more. Limited Markdown syntax is supported. + italic + bold + Render preview + Auth re-prompt + Ask to authenticate again when you view or autofill a cipher + Add Bitwarden account + We are not affiliated, associated, authorized, endorsed by, or in any way officially connected with the Bitwarden, Inc., or any of its subsidiaries or its affiliates. + + To pass the captcha verification on an unofficial Bitwarden client, you must specify the client secret. To find it, visit Web vault / Settings / API Key. + + Client secret + Sign in + Region + United States + Europe + Custom (self-hosted) + HTTP headers + HTTP header + You can add custom HTTP headers that will be sent with every request to the server. + Key + Value + Add more + Server URL + Specify the base URL of your self-hosted Bitwarden installation. + Custom environment + You can specify the base URL of each service independently. + Web Vault Server URL + API Server URL + Icons Server URL + Identity Server URL + Verification + This authentication method is not supported yet. + Enter the verification code from your authenticator app. + Enter the verification code that was emailed to %1$s. + Enter the YubiKey authentication code manually. Place the cursor on the field below and trigger the YubiKey. + Authenticator + Duo (Organization) + FIDO2 Web Authentication + Email + FIDO U2F + Connect YubiKey via USB + Requires USB OTG support. + Touch the gold sensor on your YubiKey now. + Hold your YubiKey flat against the back of your device + Requires NFC support. + Failed to read YubiKey + Using FIDO2 WebAuthn requires using the Bitwarden Web vault version %1$s or higher. On older versions the authentication result will incorrectly be forwarded to the official Bitwarden app. + Confirm access + This data is protected, to continue please enter your app password. + + Confirm access + + Use biometric authentication to confirm your access and unlock this data. + Vault + Send + Generator + Watchtower + Settings + Locked due to inactivity + Text + File + Login + Card + Identity + Note + Passkey + Text + Boolean + Linked + + Pwned + Very strong + Strong + Good + Fair + Weak + Very strong passwords + Strong passwords + Good passwords + Fair passwords + Weak passwords + Filter + No filters available + Sort by + No sorting available + Title + Alphabetically + Reverse Alphabetically + Access count + Largest First + Smallest First + Modification date + Newest First + Oldest First + Expiration date + Newest First + Oldest First + Deletion date + Newest First + Oldest First + Password + Alphabetically + Reverse Alphabetically + Password modification date + Newest First + Oldest First + Password strength + Weakest First + Strongest First + Search vault + New item + There are no suggested items available for this context + + Security code + Saved to %1$s at %2$s + Password last modified at %1$s + Passkey created at %1$s + Last modified at %1$s + Created at %1$s + Deleted at %1$s + Expired at %1$s + Expiration scheduled at %1$s + Deleting scheduled at %1$s + + Call + + Text + + Email + + Directions + Sends + Search sends + New item + A password is required to access this share + Generator + Username generator + Password generator + Generate + Regenerate + Passphrase + Random passphrases provide the best combination of memorability and security. + Delimiter + Capitalize + Number + Username + Delimiter + Custom word + Capitalize + Number + Random symbols + A strong password has at least %1$d characters, uppercase & lowercase letters, digits and symbols. + Digits + Symbols + Uppercase letters + Lowercase letters + + Exclude similar symbols + + Exclude ambiguous symbols + Catch-all email + A catch-all email address provides users the option to receive all mail sent to their domain, even if they are sent to an email address that has not been set up for their domain. Ensure that your email hosting supports this feature before using it. + + Domain + Plus addressing email + Plus addressing means any email sent to %1$s is still sent to your account. This means you can have a lot of variations on your email address to give out to different people, sites, or mailing lists. Ensure that your email hosting supports this feature before using it. + Email + Subdomain addressing email + Subdomain addressing means any email sent to %1$s is still sent to your account. This means you can have a lot of variations on your email address to give out to different people, sites, or mailing lists. Ensure that your email hosting supports this feature before using it. + Email + Forwarded email alias + Create new login with the password + Create new login with the username + Password history + Show tips + Generator history + Clear history + Clear generator history? + This will remove all items from the history. + Password history + Clear history + Clear password history? + This will remove all passwords from the history. + Watchtower + Password strength + Security + Maintenance + Pwned Passwords + Passwords that have been exposed in data breaches. Such passwords should be changed immediately. + Reused Passwords + Don\'t use the same password on multiple websites. Generate unique passwords to improve security. + Vulnerable Accounts + Sites that were affected by a data breach since you last changed a password. Change your password to keep your account safe. + Unsecure Websites + Change the URLs that use HTTP protocol to use HTTPS protocol, as the latter utilizes the most advanced encryption available. + Inactive two-factor authentication + Sites that have two-factor authentication available but you haven\'t set it up yet. + Available Passkeys + Sites that have passkey available but you haven\'t set it up yet. It\'s simpler and more secure then a password. + Incomplete Items + Helps you identify missing or incomplete data in your vault. This can refer to identities with missing names or logins without usernames. + Expiring Items + Items that have expired or are expiring soon. + Duplicate URIs + Items that have one or more URIs that cover the same websites after applying the match detection. + Trashed Items + Items that have been moved into the trash. Having too many items in the trash may slow down operations with your vault. + Empty Folders + Folders that do not have any items in them. + Duplicate Items + Helps you identify and eliminate duplicate items in your vault. + Compromised Accounts + Check data breaches by a username or email address. + Change app password + Change password + Biometric authentication + + Change app password + App password never gets stored on the device nor sent over the network. It is used to generate a secret key that is used to encrypt the local data. + Unless you suspect unauthorized access or discover a malware on the device, there is no need to change the password if it is a strong, unique password. + Contact us + Your message + Use English to ensure that your feedback doesn\'t get misunderstood. + We appreciate the time that you spend sending us a message. Your message goes directly to us and we use it to troubleshoot issues, make product improvements and fix problems. While we may not reply to every report, we\'re reviewing and working on improvements & fixing issues as fast as we can. + Accounts + Add account + Team behind the app + I\'m a Software engineer from Ukraine. I specialize on app design and development. + Follow me + Search + Settings + Search settings + Appearance + Autofill + Development + Experimental + Settings + Notifications + Other + Permissions + Security + Keyguard Premium + Watchtower + Open-source licenses + Accounts + Add & view accounts + Autofill + Android Autofill & Credential services + Security + Biometrics, change password, vault timeout + Keyguard Premium + Unlock features & support app development + Watchtower + Compromised services, vulnerable passwords + Notifications + Alerts + Appearance + Language, theme and animations + Development + Test settings for development + Other + Community websites, app info + Show labels on navigation buttons + App version + App build date + Team behind the app + Reddit community + GitHub project + Crowdin project + Open-source licenses + Download APK file + Load App icons + Load Website icons + Queuing website icon might leak the website address to internet provider + Rich text formatting + Use Markdown to format notes + Language + Suggest translation + Font + Rate on Play Store + Tint color + Theme + Use contrast black theme + Open links in external browser + Conceal fields + Conceal sensitive info, such as passwords and credit card numbers + + Crash + Credential provider + Passkeys, passwords and data services + Privacy policy + Contact us + Experimental + Change app password + Require app password + In addition to your regular security settings, your app password will be required after this time or when biometry settings are changed + Immediately + Never + Send crash reports + Transition animation + Erase app data + Close the app and erase all local app data + Allow screenshots + Show the content of the app when switching between recent apps and allow capturing a screen + Hide the content of the app when switching between recent apps and forbid capturing a screen + Data safety + Lock vault + Lock after a reboot + Lock the vault after a device reboot + Lock when screen turns off + Lock the vault after a few seconds once the screen is off + Lock after a delay + Immediately + Never + Persist vault key on a disk + Vault key is persisted on an internal storage + Vault is locked after the app is unloaded from the memory + Storing a vault key on a disk is a security risk. If the device\'s internal storage is compromised, the attacker will gain access to the local vault data. + Permissions + Features overview + Biometric unlock + + Biometric unlock + Keep the screen on while viewing items + Autofill service + Use the Android Autofill Framework to assist in filling login information into other apps on the device + Auto-copy one-time passwords + When filling a login information, automatically copy one-time passwords + Inline suggestions + Embeds autofill suggestions directly into compatible keyboards + Manual selection + Displays an option to manually search a vault for an entry + Respect Autofill disabled flag + Disables autofill for a browser field that has autofill disabled flag set + Note that some websites are notorious for disabling autofill for a password field as well as some browsers are notorious for ignoring the autofill disabled flag + Ask to save data + Asks for updating the vault when filling of a form has completed + Auto-save app or website info + Automatically clear clipboard + Immediately + Never + One-time password notification duration + When you autofill a login item that has a one-time password, the notification with verification code will popup for at least the defined duration + Never + About Keyguard membership + The Premium unlocks extra features and funds a development of the app. Thank you for supporting us! ❤️ + Subscriptions + Products + Failed to load a list of subscriptions + Failed to load a list of products + Active + Will not renew + Manage on Play Store + Post notifications + Used to post downloading notifications + Camera + Used to scan QR codes + Allow two panel layout in landscape mode + Allow two panel layout in portrait mode + Dark + Light + Disabled + Dynamic + Crossfade + Developed specifically to increase legibility for readers with low vision, and to improve comprehension + Features Overview + Keyguard Premium + Multiple Accounts + Sign-in to multiple accounts simultaneously. + Two-way sync + Add or edit items and sync the changes back. + Offline editing + Add or edit items without internet connection. + Search + Search by anything + Name, email, password, phone number etc. + Filter + Filter by folder, organization, type etc. + Multiple keywords + Search by \'bitw test\' to find your \'Bitwarden Test Account\' item. + Watchtower + Pwned passwords + Find items with exposed in data breaches passwords. + Password strength + Find items with weak passwords. + Reused passwords + Find items with reused passwords. + Inactive 2FA + Find logins with available TOTP two-factor authentication. + Unsecure websites + Find websites that use HTTP protocol, auto-fix to HTTPS. + Incomplete items + Find empty items that might need updates. + Expiring items + Find expired or soon to be expired items. + Duplicate items + Find and merge duplicate items. + Misc + Multi-selection + Merge ciphers, fasten the refactoring with batch operations. + Show as Barcode + Encode a text as different barcodes. + Generator + Generate passwords or usernames. + Data safety + Local data + Local data consists of Downloads, User settings, Vault. They are stored in the internal storage of a device, which can only be accessed by the Android system or the Keyguard. + Downloads + User settings + The User settings are encrypted using a device-specific key. + Vault + The Vault is encrypted using a Key, derived from the App password using following steps: + The Salt and the Hash is then stored locally on a device, to later generate a master key to unlock the vault. + Unlocking a Vault means storing a correct Key in a device\'s RAM, gaining an ability to read and modify encrypted Vault. + Remote data + Remote data is stored on Bitwarden servers with zero-knowledge encryption. + diff --git a/common/src/commonMain/resources/MR/sv-rSE/plurals.xml b/common/src/commonMain/resources/MR/sv-rSE/plurals.xml new file mode 100644 index 00000000..5f2db8ad --- /dev/null +++ b/common/src/commonMain/resources/MR/sv-rSE/plurals.xml @@ -0,0 +1,2 @@ + + diff --git a/common/src/commonMain/resources/MR/sv-rSE/strings.xml b/common/src/commonMain/resources/MR/sv-rSE/strings.xml new file mode 100644 index 00000000..534522b8 --- /dev/null +++ b/common/src/commonMain/resources/MR/sv-rSE/strings.xml @@ -0,0 +1,868 @@ + + + OK + Stäng + Ja + Nej + + Namn + Kontonamn + Användarnamn + Lösenord + App password + Nuvarande lösenord + Nytt lösenord + E-post + Verifierad + Ej verifierad + Email visibility + Public URL + URL + + Access count + Läs mer + Telefonnummer + Passport number + License number + Kortnummer + Inget kortnummer + Märke + Säkerhetskod + Valid from + Valid to + Card expiry month + Card expiry year + Kortinnehavarens namn + Valid from + Expiry date + Företag + Sync + + Hidden + + Visible + + Empty + + PNR + City + State + Info + Avbryt + Fortsätt + Land + Adress + Postnummer + Dra för att söka + Spara + URI + URIs + Anteckning + Anteckningar + Bilagor + Inga bilagor + Expiring soon + Incomplete data + This item is missing some of the important information. + Objekt + Objekt + %1$s objekt + Alla objekt + Inga objekt + Ingen mapp + Ny mapp + Mapp + Mappar + Inga mappar + Ingen samling + Samling + Samlingar + Inga samlingar + Mitt valv + Organisation + Organisationer + Inga organisationer + Miscellaneous + Add integration + Konto + Konton + Inga konton + Inget konto + Typ + Alternativ + Skicka + Återställ + Längd + Säkerhet + Contact info + Title + Förnamn + Mellannamn + Efternamn + Fullständigt namn + Address line 1 + Address line 2 + Address line 3 + Rename + Välj typ + Autofyll + Passkey + Create a passkey + Unlock Keyguard + Confirming auth request… + Passkeys + + Signature counter + + Relying party + + Upptäckbar + Användarnamn + Visningsnamn + API-nyckel + Domän + Redigera + Radera + Remove + Remove from the history + Reused password + Reused passwords + One-time password + Autentiseringsnyckel + Use + Save passkey + Passkey available + Two-factor authentication available + Custom + Follow system settings + + Kommer snart + Powered by + Verifieringskod + Skicka verifieringskod igen + Requested a verification email + Webbvalv + Launch Web vault + + Kom ihåg mig + + Papperskorg + + Ladda ner + Nedladdningar + Inga nedladdningar + Inga dubbletter + Kryptering + + Nyckel + Hash + Salt + 256-bit AES + Random %1$d-bits of data + Ingen + Text + Linked apps + Linked URIs + Anpassade fält + Reveal a secure note + Hide a secure note + Master password hint + Fingeravtrycksfras + Vad är ett fingeravtryck? + Bitwarden Premium + Inofficiell Bitwarden-server + Last synced at %1$s + Ändra namn + Ändra färg + Change master password hint + Logga ut + Logga in + Visit Web vault to verify your email address + Upgrade your account to a premium membership and unlock some great additional features + Tvåfaktorsautentisering + Require login verification with another device such as a security key, authenticator app, SMS or email + Active + Objekt + Logga ut + Logga ut? + All of the not synchronized changes will be lost! + Ändra namn + Ändra namn + Radera mapp? + Radera mappar? + This item(s) will be deleted immediately. You can not undo this action. + Recently opened + Often opened + View details + Save to + Lägg till i favoriter + Remove from favourites + Enable auth re-prompt + Disable auth re-prompt + Redigera + Merge into… + Kopiera till… + Flytta till mapp + Ändra namn + Ändra namn + Lägg till lösenord + Lägg till lösenord + Ändra lösenord + Ändra lösenord + Visa lösenordshistorik + Papperskorg + Återställ + Delete forever + Flytta associerade objekt till papperskorgen + Öppna med… + Skicka med… + Open in a file manager + Delete local file + View parent item + Visa alltid tangentbord + Synkronisera valv + Lås valv + Rename folder + Check the email in known data breaches + Check the username in known data breaches + Check the password in known data breaches + Check the website in known data breaches + Launch app + Launch website + Launch docs + Launch browser + Launch main page + Launch Play store + Launch with %1$s + Launch with… + How to delete an account? + Unsecure + Match app + Match detection + Basdomän + Match resources by top-level and second-level domain. + Värd + Match resources by hostname and (if specified) port. + Börjar med + Match resources when the detected resource starts with the URI. + Exakt matchning + Match resources when the detected resource exactly matches the URI. + Regular expression + Match resources by regular expression. Advanced option. + Aldrig + Ignore URI during auto-fill item search. + %1$s linked to the password + %1$s linked to the username + %1$s linked to the cardholder name + %1$s linked to the expiration month + %1$s linked to the expiration year + %1$s linked to the card code + %1$s linked to the card brand + %1$s linked to the card number + %1$s linked to the title + %1$s linked to the middle name + %1$s linked to the address line (1) + %1$s linked to the address line (2) + %1$s linked to the address line (3) + %1$s linked to the city + %1$s linked to the state + %1$s linked to the postal code + %1$s linked to the country + %1$s linked to the company + %1$s linked to the email + %1$s linked to the phone number + %1$s linked to the SSN + %1$s linked to the username + %1$s linked to the passport number + %1$s linked to the license number + %1$s linked to the first name + %1$s linked to the last name + %1$s linked to the full name + %1$s linked to an unknown field + Dela med… + %1$d selected + Kopiera + Kopiera värde + Kopiera URL + Kopiera URI + Copy package name + Kopiera lösenord + Kopiera användarnamn + Copy email + Kopiera telefonnummer + Copy passport number + Copy license number + Kopiera kortnummer + Kopiera kortinnehavarens namn + Copy expiration year + Copy expiration month + Kopiera CVV-kod + Copy one-time password + Copy secret key + Unlock Keyguard + Öppna Keyguard + Januari + Februari + Mars + April + Maj + Juni + Juli + Augusti + September + Oktober + November + December + Move up + Move down + Remove + Remove an item? + Add more + FIDO2 WebAuthn + Authenticate WebAuthn + Return to app + + Must not be empty + + Must not be blank + Must be custom domain + Must contain only US-ASCII characters + Must be at least %1$d symbols long + Must be %1$d symbols long + Ogiltig domän + Ogiltig e-post + Ogiltig URL + Ogiltig URI + Ogiltigt kortnummer + Felaktigt lösenord + Failed to generate OTP code + Failed to create a passkey + Failed to authorize a request + + Streckkod + Visa som streckkod + Copy this authenticator to another device by scanning the QR code. + + Date picker + + Color picker + + How to delete an account? + A collection of info of how to delete your account from web services + + Easy + + Medium + + Hard + + Limited availability + + Impossible + Send email + Search websites + No instructions + Tvåfaktorsautentisering + Lista över webbplatser med stöd för tvåfaktorsautentisering + Search websites + Passkeys + List of websites with passkeys support + Search websites + + Data breach + Breached account data can provide malicious actors with access to sensitive personal and financial information, potentially leading to identity theft, financial fraud, and other forms of cybercrime. + No breaches found + Breached accounts found + Breaches + Occurred on %1$s + Reported on %1$s + Failed to check data breaches. You might currently be offline + Data breach + A password that is found in the data breaches takes significantly less time to break and should never be used. + Password is compromised + The password has been identified in known data breaches. Please change it immediately to protect your online security + No breaches found + Failed to check data breaches. You might currently be offline + + Large Type + Show in Large Type + Show in Large Type and Lock vault + App Picker + Sök efter installerade appar + System app + Inga appar + Välj en mapp + Skapa en ny mapp: + + This organization will have an ownership of the copy. You will not be the direct owner. + Email forwarders + Email forwarders + Delete email forwarder? + Delete email forwarders? + Email forwarder integration + No email forwarders + Create an encrypted vault where the local data will be stored. + App password + Biometrisk autentisering + Skapa ett valv + Skicka kraschrapporter + Skapa ett valv + Radera appdata + Close the app and erase all local app data + The vault is locked. Enter your app password to continue. + Lås upp + + Lås upp ett valv + + Använd biometrisk autentisering för att låsa upp valvet. + User verification is required. Enter your app password to continue. + Verifiera + Sync status + Up to date + Pending + Syncing + Sync failed + Nytt objekt + Redigera objekt + Style text with %1$s or %2$s and more. Limited Markdown syntax is supported. + kursiv + bold + Render preview + Auth re-prompt + Ask to authenticate again when you view or autofill a cipher + Lägg till Bitwarden-konto + We are not affiliated, associated, authorized, endorsed by, or in any way officially connected with the Bitwarden, Inc., or any of its subsidiaries or its affiliates. + + To pass the captcha verification on an unofficial Bitwarden client, you must specify the client secret. To find it, visit Web vault / Settings / API Key. + + Client secret + Logga in + Region + United States + Europa + Custom (self-hosted) + HTTP headers + HTTP header + You can add custom HTTP headers that will be sent with every request to the server. + Key + Värde + Add more + Server URL + Specify the base URL of your self-hosted Bitwarden installation. + Custom environment + You can specify the base URL of each service independently. + Web Vault Server URL + API Server URL + Icons Server URL + Identity Server URL + Verification + Denna autentiseringsmetod stöds inte än. + Ange verifieringskoden från din autentiseringsapp. + Ange den verifieringskod som skickades till %1$s. + Enter the YubiKey authentication code manually. Place the cursor on the field below and trigger the YubiKey. + Authenticator + Duo (Organization) + FIDO2 Web Authentication + Email + FIDO U2F + Anslut YubiKey via USB + Requires USB OTG support. + Touch the gold sensor on your YubiKey now. + Hold your YubiKey flat against the back of your device + Kräver stöd för NFC. + Failed to read YubiKey + Using FIDO2 WebAuthn requires using the Bitwarden Web vault version %1$s or higher. On older versions the authentication result will incorrectly be forwarded to the official Bitwarden app. + Confirm access + This data is protected, to continue please enter your app password. + + Confirm access + + Use biometric authentication to confirm your access and unlock this data. + Valv + Skicka + Generator + Watchtower + Inställningar + Locked due to inactivity + Text + Fil + Inloggning + Kort + Identitet + Anteckning + Passkey + Text + Boolean + Länkad + + Pwned + Very strong + Strong + Good + Fair + Weak + Very strong passwords + Strong passwords + Good passwords + Fair passwords + Weak passwords + Filter + Inga filter tillgängliga + Sortera efter + Ingen sortering tillgänglig + Titel + Alphabetically + Reverse Alphabetically + Access count + Largest First + Smallest First + Modification date + Newest First + Oldest First + Utgångsdatum + Newest First + Oldest First + Deletion date + Newest First + Oldest First + Lösenord + Alphabetically + Reverse Alphabetically + Password modification date + Newest First + Oldest First + Lösenordsstyrka + Weakest First + Strongest First + Sök i valv + Nytt objekt + There are no suggested items available for this context + + Säkerhetskod + Saved to %1$s at %2$s + Password last modified at %1$s + Passkey created at %1$s + Last modified at %1$s + Created at %1$s + Deleted at %1$s + Expired at %1$s + Expiration scheduled at %1$s + Deleting scheduled at %1$s + + Ring + + Text + + Email + + Directions + Sends + Sök efter Sends + Nytt objekt + A password is required to access this share + Generator + Username generator + Lösenordsgenerator + Generate + Regenerate + Lösenordsfras + Random passphrases provide the best combination of memorability and security. + Delimiter + Capitalize + Nummer + Användarnamn + Delimiter + Anpassat ord + Capitalize + Number + Random symbols + Ett starkt lösenord består av minst %1$d tecken, stora och små bokstäver, siffror och symboler. + Digits + Symboler + Versaler + Gemener + + Exclude similar symbols + + Exclude ambiguous symbols + Catch-all email + A catch-all email address provides users the option to receive all mail sent to their domain, even if they are sent to an email address that has not been set up for their domain. Ensure that your email hosting supports this feature before using it. + + Domän + Plus addressing email + Plus addressing means any email sent to %1$s is still sent to your account. This means you can have a lot of variations on your email address to give out to different people, sites, or mailing lists. Ensure that your email hosting supports this feature before using it. + Email + Subdomain addressing email + Subdomain addressing means any email sent to %1$s is still sent to your account. This means you can have a lot of variations on your email address to give out to different people, sites, or mailing lists. Ensure that your email hosting supports this feature before using it. + Email + Forwarded email alias + Create new login with the password + Create new login with the username + Lösenordshistorik + Visa tips + Generator history + Rensa historik + Clear generator history? + This will remove all items from the history. + Lösenordshistorik + Rensa historik + Rensa lösenordshistorik? + Detta kommer att ta bort alla lösenord från historiken. + Watchtower + Lösenordsstyrka + Säkerhet + Maintenance + Pwned Passwords + Passwords that have been exposed in data breaches. Such passwords should be changed immediately. + Reused Passwords + Don\'t use the same password on multiple websites. Generate unique passwords to improve security. + Vulnerable Accounts + Webbplatser som drabbats av dataintrång sedan du senast ändrade ditt lösenord. Ändra ditt lösenord för att hålla ditt konto säkert. + Unsecure Websites + Change the URLs that use HTTP protocol to use HTTPS protocol, as the latter utilizes the most advanced encryption available. + Inactive two-factor authentication + Webbplatser som har tvåfaktorsautentisering tillgänglig men som du inte har konfigurerat än. + Available Passkeys + Sites that have passkey available but you haven\'t set it up yet. It\'s simpler and more secure then a password. + Incomplete Items + Helps you identify missing or incomplete data in your vault. This can refer to identities with missing names or logins without usernames. + Expiring Items + Items that have expired or are expiring soon. + Duplicate URIs + Items that have one or more URIs that cover the same websites after applying the match detection. + Trashed Items + Objekt som har flyttats till papperskorgen. Om du har för många objekt i papperskorgen kan det sakta ner driften av ditt valv. + Tomma mappar + Mappar som inte innehåller några objekt. + Duplicate Items + Hjälper dig att identifiera och eliminera dubbletter i ditt valv. + Compromised Accounts + Check data breaches by a username or email address. + Change app password + Ändra lösenord + Biometrisk autentisering + + Change app password + App password never gets stored on the device nor sent over the network. It is used to generate a secret key that is used to encrypt the local data. + Unless you suspect unauthorized access or discover a malware on the device, there is no need to change the password if it is a strong, unique password. + Kontakta oss + Ditt meddelande + Use English to ensure that your feedback doesn\'t get misunderstood. + We appreciate the time that you spend sending us a message. Your message goes directly to us and we use it to troubleshoot issues, make product improvements and fix problems. While we may not reply to every report, we\'re reviewing and working on improvements & fixing issues as fast as we can. + Konton + Lägg till konto + Team behind the app + I\'m a Software engineer from Ukraine. I specialize on app design and development. + Följ mig + Sök + Inställningar + Search settings + Utseende + Autofyll + Development + Experimental + Inställningar + Notifications + Other + Permissions + Säkerhet + Keyguard Premium + Watchtower + Open-source licenses + Konton + Lägg till & visa konton + Autofyll + Android Autofill & Credential services + Säkerhet + Biometrics, change password, vault timeout + Keyguard Premium + Unlock features & support app development + Watchtower + Compromised services, vulnerable passwords + Notifications + Alerts + Utseende + Språk, tema och animationer + Development + Test settings for development + Other + Community websites, app info + Show labels on navigation buttons + App version + App build date + Team behind the app + Reddit community + GitHub project + Crowdin project + Open-source licenses + Ladda ner APK-fil + Load App icons + Load Website icons + Queuing website icon might leak the website address to internet provider + Rich text formatting + Använd Markdown för att formatera anteckningar + Språk + Suggest translation + Typsnitt + Betygsätt på Play Store + Tint color + Tema + Use contrast black theme + Öppna länkar i extern webbläsare + Conceal fields + Conceal sensitive info, such as passwords and credit card numbers + + Crash + Credential provider + Passkeys, passwords and data services + Integritetspolicy + Kontakta oss + Experimental + Change app password + Require app password + In addition to your regular security settings, your app password will be required after this time or when biometry settings are changed + Omedelbart + Aldrig + Skicka kraschrapporter + Transition animation + Erase app data + Close the app and erase all local app data + Tillåt skärmdumpar + Show the content of the app when switching between recent apps and allow capturing a screen + Hide the content of the app when switching between recent apps and forbid capturing a screen + Data safety + Lås valv + Lock after a reboot + Lock the vault after a device reboot + Lock when screen turns off + Lock the vault after a few seconds once the screen is off + Lock after a delay + Omedelbart + Aldrig + Persist vault key on a disk + Vault key is persisted on an internal storage + Vault is locked after the app is unloaded from the memory + Storing a vault key on a disk is a security risk. If the device\'s internal storage is compromised, the attacker will gain access to the local vault data. + Permissions + Features overview + Biometric unlock + + Biometric unlock + Keep the screen on while viewing items + Autofill service + Use the Android Autofill Framework to assist in filling login information into other apps on the device + Auto-copy one-time passwords + When filling a login information, automatically copy one-time passwords + Inline suggestions + Embeds autofill suggestions directly into compatible keyboards + Manual selection + Displays an option to manually search a vault for an entry + Respect Autofill disabled flag + Disables autofill for a browser field that has autofill disabled flag set + Note that some websites are notorious for disabling autofill for a password field as well as some browsers are notorious for ignoring the autofill disabled flag + Ask to save data + Asks for updating the vault when filling of a form has completed + Auto-save app or website info + Rensa urklipp automatiskt + Omedelbart + Aldrig + One-time password notification duration + When you autofill a login item that has a one-time password, the notification with verification code will popup for at least the defined duration + Aldrig + About Keyguard membership + The Premium unlocks extra features and funds a development of the app. Thank you for supporting us! ❤️ + Prenumerationer + Produkter + Failed to load a list of subscriptions + Failed to load a list of products + Aktiv + Will not renew + Hantera på Play Store + Post notifications + Used to post downloading notifications + Kamera + Used to scan QR codes + Allow two panel layout in landscape mode + Allow two panel layout in portrait mode + Mörkt + Ljust + Disabled + Dynamic + Crossfade + Developed specifically to increase legibility for readers with low vision, and to improve comprehension + Features Overview + Keyguard Premium + Multiple Accounts + Logga in på flera konton samtidigt. + Two-way sync + Add or edit items and sync the changes back. + Offline editing + Lägg till eller redigera objekt utan internetanslutning. + Sök + Search by anything + Namn, e-postadress, lösenord, telefonnummer etc. + Filter + Filtrera efter mapp, organisation, typ etc. + Multiple keywords + Search by \'bitw test\' to find your \'Bitwarden Test Account\' item. + Watchtower + Pwned passwords + Find items with exposed in data breaches passwords. + Lösenordsstyrka + Hitta objekt med svaga lösenord. + Reused passwords + Find items with reused passwords. + Inactive 2FA + Find logins with available TOTP two-factor authentication. + Unsecure websites + Find websites that use HTTP protocol, auto-fix to HTTPS. + Incomplete items + Find empty items that might need updates. + Expiring items + Find expired or soon to be expired items. + Duplicate items + Find and merge duplicate items. + Misc + Multi-selection + Merge ciphers, fasten the refactoring with batch operations. + Visa som streckkod + Encode a text as different barcodes. + Generator + Generera lösenord eller användarnamn. + Data safety + Local data + Local data consists of Downloads, User settings, Vault. They are stored in the internal storage of a device, which can only be accessed by the Android system or the Keyguard. + Nedladdningar + Användarinställningar + The User settings are encrypted using a device-specific key. + Valv + The Vault is encrypted using a Key, derived from the App password using following steps: + The Salt and the Hash is then stored locally on a device, to later generate a master key to unlock the vault. + Unlocking a Vault means storing a correct Key in a device\'s RAM, gaining an ability to read and modify encrypted Vault. + Remote data + Remote data is stored on Bitwarden servers with zero-knowledge encryption. + diff --git a/common/src/commonMain/resources/MR/tr-rTR/plurals.xml b/common/src/commonMain/resources/MR/tr-rTR/plurals.xml new file mode 100644 index 00000000..5f2db8ad --- /dev/null +++ b/common/src/commonMain/resources/MR/tr-rTR/plurals.xml @@ -0,0 +1,2 @@ + + diff --git a/common/src/commonMain/resources/MR/tr-rTR/strings.xml b/common/src/commonMain/resources/MR/tr-rTR/strings.xml new file mode 100644 index 00000000..214f4486 --- /dev/null +++ b/common/src/commonMain/resources/MR/tr-rTR/strings.xml @@ -0,0 +1,868 @@ + + + OK + Close + Yes + No + + Name + Account name + Username + Password + App password + Current password + New password + Email + Verified + Not verified + Email visibility + Public URL + URL + + Access count + Learn more + Phone number + Passport number + License number + Card number + No card number + Brand + Security code + Valid from + Valid to + Card expiry month + Card expiry year + Cardholder name + Valid from + Expiry date + Company + Sync + + Hidden + + Visible + + Empty + + SSN + City + State + Info + Cancel + Continue + Country + Address + Postal code + Pull to search + Save + URI + URIs + Note + Notes + Attachments + No attachments + Expiring soon + Incomplete data + This item is missing some of the important information. + Item + Items + %1$s items + All items + No items + No folder + New folder + Folder + Folders + No folders + No collection + Collection + Collections + No collections + My vault + Organization + Organizations + No organizations + Miscellaneous + Add integration + Account + Accounts + No accounts + No account + Type + Options + Send + Reset + Length + Security + Contact info + Title + First name + Middle name + Last name + Full name + Address line 1 + Address line 2 + Address line 3 + Rename + Select type + Autofill + Passkey + Create a passkey + Unlock Keyguard + Confirming auth request… + Passkeys + + Signature counter + + Relying party + + Discoverable + Username + Display name + API key + Domain + Edit + Delete + Remove + Remove from the history + Reused password + Reused passwords + One-time password + Authenticator key + Use + Save passkey + Passkey available + Two-factor authentication available + Custom + Follow system settings + + Coming soon + Powered by + Verification code + Re-send verification code + Requested a verification email + Web vault + Launch Web vault + + Remember me + + Trash + + Download + Downloads + No downloads + No duplicates + Encryption + + Key + Hash + Salt + 256-bit AES + Random %1$d-bits of data + None + Text + Linked apps + Linked URIs + Custom fields + Reveal a secure note + Hide a secure note + Master password hint + Fingerprint phrase + What is a fingerprint? + Bitwarden premium + Unofficial Bitwarden server + Last synced at %1$s + Change name + Change color + Change master password hint + Sign out + Sign in + Visit Web vault to verify your email address + Upgrade your account to a premium membership and unlock some great additional features + Two-factor authentication + Require login verification with another device such as a security key, authenticator app, SMS or email + Active + Items + Log out + Log out? + All of the not synchronized changes will be lost! + Change name + Change names + Delete folder? + Delete folders? + This item(s) will be deleted immediately. You can not undo this action. + Recently opened + Often opened + View details + Save to + Add to favourites + Remove from favourites + Enable auth re-prompt + Disable auth re-prompt + Edit + Merge into… + Copy to… + Move to folder + Change name + Change names + Add password + Add passwords + Change password + Change passwords + View password history + Trash + Restore + Delete forever + Move associated items to trash + Open with… + Send with… + Open in a file manager + Delete local file + View parent item + Always show keyboard + Sync vault + Lock vault + Rename folder + Check the email in known data breaches + Check the username in known data breaches + Check the password in known data breaches + Check the website in known data breaches + Launch app + Launch website + Launch docs + Launch browser + Launch main page + Launch Play store + Launch with %1$s + Launch with… + How to delete an account? + Unsecure + Match app + Match detection + Base domain + Match resources by top-level and second-level domain. + Host + Match resources by hostname and (if specified) port. + Starts with + Match resources when the detected resource starts with the URI. + Exact + Match resources when the detected resource exactly matches the URI. + Regular expression + Match resources by regular expression. Advanced option. + Never + Ignore URI during auto-fill item search. + %1$s linked to the password + %1$s linked to the username + %1$s linked to the cardholder name + %1$s linked to the expiration month + %1$s linked to the expiration year + %1$s linked to the card code + %1$s linked to the card brand + %1$s linked to the card number + %1$s linked to the title + %1$s linked to the middle name + %1$s linked to the address line (1) + %1$s linked to the address line (2) + %1$s linked to the address line (3) + %1$s linked to the city + %1$s linked to the state + %1$s linked to the postal code + %1$s linked to the country + %1$s linked to the company + %1$s linked to the email + %1$s linked to the phone number + %1$s linked to the SSN + %1$s linked to the username + %1$s linked to the passport number + %1$s linked to the license number + %1$s linked to the first name + %1$s linked to the last name + %1$s linked to the full name + %1$s linked to an unknown field + Share with… + %1$d selected + Copy + Copy value + Copy URL + Copy URI + Copy package name + Copy password + Copy username + Copy email + Copy phone number + Copy passport number + Copy license number + Copy card number + Copy cardholder name + Copy expiration year + Copy expiration month + Copy CVV code + Copy one-time password + Copy secret key + Unlock Keyguard + Open Keyguard + January + February + March + April + May + June + July + August + September + October + November + December + Move up + Move down + Remove + Remove an item? + Add more + FIDO2 WebAuthn + Authenticate WebAuthn + Return to app + + Must not be empty + + Must not be blank + Must be custom domain + Must contain only US-ASCII characters + Must be at least %1$d symbols long + Must be %1$d symbols long + Invalid domain + Invalid email + Invalid URL + Invalid URI + Invalid card number + Incorrect password + Failed to generate OTP code + Failed to create a passkey + Failed to authorize a request + + Barcode + Show as Barcode + Copy this authenticator to another device by scanning the QR code. + + Date picker + + Color picker + + How to delete an account? + A collection of info of how to delete your account from web services + + Easy + + Medium + + Hard + + Limited availability + + Impossible + Send email + Search websites + No instructions + Two-factor authentication + List of websites with two-factor authentication support + Search websites + Passkeys + List of websites with passkeys support + Search websites + + Data breach + Breached account data can provide malicious actors with access to sensitive personal and financial information, potentially leading to identity theft, financial fraud, and other forms of cybercrime. + No breaches found + Breached accounts found + Breaches + Occurred on %1$s + Reported on %1$s + Failed to check data breaches. You might currently be offline + Data breach + A password that is found in the data breaches takes significantly less time to break and should never be used. + Password is compromised + The password has been identified in known data breaches. Please change it immediately to protect your online security + No breaches found + Failed to check data breaches. You might currently be offline + + Large Type + Show in Large Type + Show in Large Type and Lock vault + App Picker + Search installed apps + System app + No apps + Choose a folder + Create a new folder: + + This organization will have an ownership of the copy. You will not be the direct owner. + Email forwarders + Email forwarders + Delete email forwarder? + Delete email forwarders? + Email forwarder integration + No email forwarders + Create an encrypted vault where the local data will be stored. + App password + Biometric authentication + Create a vault + Send crash reports + Create a vault + Erase app data + Close the app and erase all local app data + The vault is locked. Enter your app password to continue. + Unlock + + Unlock a vault + + Use biometric authentication to unlock the vault. + User verification is required. Enter your app password to continue. + Verify + Sync status + Up to date + Pending + Syncing + Sync failed + New item + Edit item + Style text with %1$s or %2$s and more. Limited Markdown syntax is supported. + italic + bold + Render preview + Auth re-prompt + Ask to authenticate again when you view or autofill a cipher + Add Bitwarden account + We are not affiliated, associated, authorized, endorsed by, or in any way officially connected with the Bitwarden, Inc., or any of its subsidiaries or its affiliates. + + To pass the captcha verification on an unofficial Bitwarden client, you must specify the client secret. To find it, visit Web vault / Settings / API Key. + + Client secret + Sign in + Region + United States + Europe + Custom (self-hosted) + HTTP headers + HTTP header + You can add custom HTTP headers that will be sent with every request to the server. + Key + Value + Add more + Server URL + Specify the base URL of your self-hosted Bitwarden installation. + Custom environment + You can specify the base URL of each service independently. + Web Vault Server URL + API Server URL + Icons Server URL + Identity Server URL + Verification + This authentication method is not supported yet. + Enter the verification code from your authenticator app. + Enter the verification code that was emailed to %1$s. + Enter the YubiKey authentication code manually. Place the cursor on the field below and trigger the YubiKey. + Authenticator + Duo (Organization) + FIDO2 Web Authentication + Email + FIDO U2F + Connect YubiKey via USB + Requires USB OTG support. + Touch the gold sensor on your YubiKey now. + Hold your YubiKey flat against the back of your device + Requires NFC support. + Failed to read YubiKey + Using FIDO2 WebAuthn requires using the Bitwarden Web vault version %1$s or higher. On older versions the authentication result will incorrectly be forwarded to the official Bitwarden app. + Confirm access + This data is protected, to continue please enter your app password. + + Confirm access + + Use biometric authentication to confirm your access and unlock this data. + Vault + Send + Generator + Watchtower + Settings + Locked due to inactivity + Text + File + Login + Card + Identity + Note + Passkey + Text + Boolean + Linked + + Pwned + Very strong + Strong + Good + Fair + Weak + Very strong passwords + Strong passwords + Good passwords + Fair passwords + Weak passwords + Filter + No filters available + Sort by + No sorting available + Title + Alphabetically + Reverse Alphabetically + Access count + Largest First + Smallest First + Modification date + Newest First + Oldest First + Expiration date + Newest First + Oldest First + Deletion date + Newest First + Oldest First + Password + Alphabetically + Reverse Alphabetically + Password modification date + Newest First + Oldest First + Password strength + Weakest First + Strongest First + Search vault + New item + There are no suggested items available for this context + + Security code + Saved to %1$s at %2$s + Password last modified at %1$s + Passkey created at %1$s + Last modified at %1$s + Created at %1$s + Deleted at %1$s + Expired at %1$s + Expiration scheduled at %1$s + Deleting scheduled at %1$s + + Call + + Text + + Email + + Directions + Sends + Search sends + New item + A password is required to access this share + Generator + Username generator + Password generator + Generate + Regenerate + Passphrase + Random passphrases provide the best combination of memorability and security. + Delimiter + Capitalize + Number + Username + Delimiter + Custom word + Capitalize + Number + Random symbols + A strong password has at least %1$d characters, uppercase & lowercase letters, digits and symbols. + Digits + Symbols + Uppercase letters + Lowercase letters + + Exclude similar symbols + + Exclude ambiguous symbols + Catch-all email + A catch-all email address provides users the option to receive all mail sent to their domain, even if they are sent to an email address that has not been set up for their domain. Ensure that your email hosting supports this feature before using it. + + Domain + Plus addressing email + Plus addressing means any email sent to %1$s is still sent to your account. This means you can have a lot of variations on your email address to give out to different people, sites, or mailing lists. Ensure that your email hosting supports this feature before using it. + Email + Subdomain addressing email + Subdomain addressing means any email sent to %1$s is still sent to your account. This means you can have a lot of variations on your email address to give out to different people, sites, or mailing lists. Ensure that your email hosting supports this feature before using it. + Email + Forwarded email alias + Create new login with the password + Create new login with the username + Password history + Show tips + Generator history + Clear history + Clear generator history? + This will remove all items from the history. + Password history + Clear history + Clear password history? + This will remove all passwords from the history. + Watchtower + Password strength + Security + Maintenance + Pwned Passwords + Passwords that have been exposed in data breaches. Such passwords should be changed immediately. + Reused Passwords + Don\'t use the same password on multiple websites. Generate unique passwords to improve security. + Vulnerable Accounts + Sites that were affected by a data breach since you last changed a password. Change your password to keep your account safe. + Unsecure Websites + Change the URLs that use HTTP protocol to use HTTPS protocol, as the latter utilizes the most advanced encryption available. + Inactive two-factor authentication + Sites that have two-factor authentication available but you haven\'t set it up yet. + Available Passkeys + Sites that have passkey available but you haven\'t set it up yet. It\'s simpler and more secure then a password. + Incomplete Items + Helps you identify missing or incomplete data in your vault. This can refer to identities with missing names or logins without usernames. + Expiring Items + Items that have expired or are expiring soon. + Duplicate URIs + Items that have one or more URIs that cover the same websites after applying the match detection. + Trashed Items + Items that have been moved into the trash. Having too many items in the trash may slow down operations with your vault. + Empty Folders + Folders that do not have any items in them. + Duplicate Items + Helps you identify and eliminate duplicate items in your vault. + Compromised Accounts + Check data breaches by a username or email address. + Change app password + Change password + Biometric authentication + + Change app password + App password never gets stored on the device nor sent over the network. It is used to generate a secret key that is used to encrypt the local data. + Unless you suspect unauthorized access or discover a malware on the device, there is no need to change the password if it is a strong, unique password. + Contact us + Your message + Use English to ensure that your feedback doesn\'t get misunderstood. + We appreciate the time that you spend sending us a message. Your message goes directly to us and we use it to troubleshoot issues, make product improvements and fix problems. While we may not reply to every report, we\'re reviewing and working on improvements & fixing issues as fast as we can. + Accounts + Add account + Team behind the app + I\'m a Software engineer from Ukraine. I specialize on app design and development. + Follow me + Search + Settings + Search settings + Appearance + Autofill + Development + Experimental + Settings + Notifications + Other + Permissions + Security + Keyguard Premium + Watchtower + Open-source licenses + Accounts + Add & view accounts + Autofill + Android Autofill & Credential services + Security + Biometrics, change password, vault timeout + Keyguard Premium + Unlock features & support app development + Watchtower + Compromised services, vulnerable passwords + Notifications + Alerts + Appearance + Language, theme and animations + Development + Test settings for development + Other + Community websites, app info + Show labels on navigation buttons + App version + App build date + Team behind the app + Reddit community + GitHub project + Crowdin project + Open-source licenses + Download APK file + Load App icons + Load Website icons + Queuing website icon might leak the website address to internet provider + Rich text formatting + Use Markdown to format notes + Language + Suggest translation + Font + Rate on Play Store + Tint color + Theme + Use contrast black theme + Open links in external browser + Conceal fields + Conceal sensitive info, such as passwords and credit card numbers + + Crash + Credential provider + Passkeys, passwords and data services + Privacy policy + Contact us + Experimental + Change app password + Require app password + In addition to your regular security settings, your app password will be required after this time or when biometry settings are changed + Immediately + Never + Send crash reports + Transition animation + Erase app data + Close the app and erase all local app data + Allow screenshots + Show the content of the app when switching between recent apps and allow capturing a screen + Hide the content of the app when switching between recent apps and forbid capturing a screen + Data safety + Lock vault + Lock after a reboot + Lock the vault after a device reboot + Lock when screen turns off + Lock the vault after a few seconds once the screen is off + Lock after a delay + Immediately + Never + Persist vault key on a disk + Vault key is persisted on an internal storage + Vault is locked after the app is unloaded from the memory + Storing a vault key on a disk is a security risk. If the device\'s internal storage is compromised, the attacker will gain access to the local vault data. + Permissions + Features overview + Biometric unlock + + Biometric unlock + Keep the screen on while viewing items + Autofill service + Use the Android Autofill Framework to assist in filling login information into other apps on the device + Auto-copy one-time passwords + When filling a login information, automatically copy one-time passwords + Inline suggestions + Embeds autofill suggestions directly into compatible keyboards + Manual selection + Displays an option to manually search a vault for an entry + Respect Autofill disabled flag + Disables autofill for a browser field that has autofill disabled flag set + Note that some websites are notorious for disabling autofill for a password field as well as some browsers are notorious for ignoring the autofill disabled flag + Ask to save data + Asks for updating the vault when filling of a form has completed + Auto-save app or website info + Automatically clear clipboard + Immediately + Never + One-time password notification duration + When you autofill a login item that has a one-time password, the notification with verification code will popup for at least the defined duration + Never + About Keyguard membership + The Premium unlocks extra features and funds a development of the app. Thank you for supporting us! ❤️ + Subscriptions + Products + Failed to load a list of subscriptions + Failed to load a list of products + Active + Will not renew + Manage on Play Store + Post notifications + Used to post downloading notifications + Camera + Used to scan QR codes + Allow two panel layout in landscape mode + Allow two panel layout in portrait mode + Dark + Light + Disabled + Dynamic + Crossfade + Developed specifically to increase legibility for readers with low vision, and to improve comprehension + Features Overview + Keyguard Premium + Multiple Accounts + Sign-in to multiple accounts simultaneously. + Two-way sync + Add or edit items and sync the changes back. + Offline editing + Add or edit items without internet connection. + Search + Search by anything + Name, email, password, phone number etc. + Filter + Filter by folder, organization, type etc. + Multiple keywords + Search by \'bitw test\' to find your \'Bitwarden Test Account\' item. + Watchtower + Pwned passwords + Find items with exposed in data breaches passwords. + Password strength + Find items with weak passwords. + Reused passwords + Find items with reused passwords. + Inactive 2FA + Find logins with available TOTP two-factor authentication. + Unsecure websites + Find websites that use HTTP protocol, auto-fix to HTTPS. + Incomplete items + Find empty items that might need updates. + Expiring items + Find expired or soon to be expired items. + Duplicate items + Find and merge duplicate items. + Misc + Multi-selection + Merge ciphers, fasten the refactoring with batch operations. + Show as Barcode + Encode a text as different barcodes. + Generator + Generate passwords or usernames. + Data safety + Local data + Local data consists of Downloads, User settings, Vault. They are stored in the internal storage of a device, which can only be accessed by the Android system or the Keyguard. + Downloads + User settings + The User settings are encrypted using a device-specific key. + Vault + The Vault is encrypted using a Key, derived from the App password using following steps: + The Salt and the Hash is then stored locally on a device, to later generate a master key to unlock the vault. + Unlocking a Vault means storing a correct Key in a device\'s RAM, gaining an ability to read and modify encrypted Vault. + Remote data + Remote data is stored on Bitwarden servers with zero-knowledge encryption. + diff --git a/common/src/commonMain/resources/MR/uk-rUA/plurals.xml b/common/src/commonMain/resources/MR/uk-rUA/plurals.xml new file mode 100644 index 00000000..5f2db8ad --- /dev/null +++ b/common/src/commonMain/resources/MR/uk-rUA/plurals.xml @@ -0,0 +1,2 @@ + + diff --git a/common/src/commonMain/resources/MR/uk-rUA/strings.xml b/common/src/commonMain/resources/MR/uk-rUA/strings.xml new file mode 100644 index 00000000..0d5d0155 --- /dev/null +++ b/common/src/commonMain/resources/MR/uk-rUA/strings.xml @@ -0,0 +1,868 @@ + + + OK + Закрити + Так + Ні + + Назва + Назва облікового запису + Ім\'я користувача + Пароль + Пароль застосунку + Поточний пароль + Новий пароль + Ел. пошта + Підтверджено + Не підтверджено + Видимість електронної пошти + Загальнодоступна URL-адреса + URL-адреса + + Кількість відвідувань + Дізнатися більше + Номер телефону + Номер паспорта + Номер ліцензії + Номер картки + Номер картки відсутній + Тип картки + CVV-код + Чинна з + Чинна до + Місяць терміну дії картки + Рік терміну дії картки + Ім\'я власника картки + Чинний з + Чинна до + Компанія + Синхронізувати + + Приховано + + Видимо + + Пусто + + SSN + Місто + Штат/Область + Інформація + Скасувати + Продовжити + Країна + Адреса + Поштовий індекс + Потягніть для пошуку + Зберегти + URI + URI-адреси + Нотатка + Нотатки + Файли + Немає вкладень + Незабаром закінчується термін дії + Неповні дані + Цей запис не має певної важливої інформації. + Запис + Записи + %1$s записів + Усі записи + Немає записів + Без теки + Нова тека + Тека + Теки + Теки відсутні + Без колекції + Колекція + Колекції + Колекції відсутні + Моє сховище + Організація + Організації + Організації відсутні + Різне + Додати інтеграцію + Обліковий запис + Облікові записи + Облікові записи відсутні + Без облікового запису + Тип + Опції + Відправити + Скинути + Довжина + Безпека + Контактні дані + Титул + Ім\'я + По батькові + Прізвище + Повне ім\'я + Адресний рядок 1 + Адресний рядок 2 + Адресний рядок 3 + Перейменувати + Оберіть тип + Автозаповнити + Ключ доступу + Створити ключ доступу + Розблокувати Keyguard + Підтвердження запиту авторизації… + Ключі доступу + + Лічильник підпису + + Довірча сторона + + Видимий + Ім\'я користувача + Видиме ім\'я + Ключ API + Домен + Редагувати + Видалити + Видалити + Видалити з історії + Повторюваний пароль + Повторювані паролі + Одноразовий пароль + Ключ автентифікатору + Використати + Зберегти ключ доступу + Доступний ключ доступу + Доступна двофакторна автентифікація + Користувацьке + Як у системі + + Незабаром + За підтримки + Код підтвердження + Відправити код підтвердження заново + Запит на електронний лист з кодом підтвердження відправлено + Веб сховище + Відкрити вебсховище + + Запам\'ятати мене + + Кошик + + Завантажити + Завантаження + Завантаження відсутні + Дублікати відсутні + Шифрування + + Ключ + Хеш + Сіль + 256-бітний AES + Випадкові %1$d-бітні дані + Нема + Текст + Зв\'язані застосунки + Зв\'язані URI + Користувацькі поля + Показати захищену нотатку + Приховати захищену нотатку + Підказка для головного пароля + Фраза відбитку + Що таке фраза відбитку? + Bitwarden преміум + Неофіційний сервер Bitwarden + Останній раз синхронізовано %1$s + Змінити назву + Змінити колір + Змінити підказку для головного пароля + Вийти + Увійти + Відвідайте вебсховище для підтвердження вашої адреси електронної пошти + Оновіть свій обліковий запис до тарифного плану преміум й отримайте чудові додаткові можливості + Двофакторна автентифікація + Вимагати підтвердження авторизації за допомогою іншого методу, наприклад ключа безпеки, застосунку автентифікації, SMS або електронного листа + Активний + Записи + Вийти з облікового запису + Вийти з облікового запису? + Всі несинхронізовані зміни будуть втрачені! + Змінити назву + Змінити назви + Видалити теку? + Видалити теки? + Цей запис(и) буде видалено. Ви не зможете скасовувати цю дію. + Нещодавно відкриті + Часто відкриті + Переглянути деталі + Зберегти в… + Додати до обраного + Видалити з обраного + Ввімкнути подвійну автентифікацію + Вимкнути подвійну автентифікацію + Редагувати + Об\'єднати в… + Скопіювати в… + Перемістити в теку + Змінити назву + Змінити назви + Додати пароль + Додати паролі + Змінити пароль + Змінити паролі + Переглянути історію паролів + Відправити у кошик + Відновити з кошика + Видалити назавжди + Перемістити зв\'язані записи до кошика + Відкрити за допомогою… + Надіслати за допомогою… + Відкрити в файловому менеджері… + Видалити локальний файл + Переглянути батьківський запис + Завжди показувати клавіатуру + Синхронізувати сховище + Заблокувати сховище + Перейменувати теку + Перевірити ел. пошту в відомих витоках даних + Перевірити ім\'я користувача в відомих витоках даних + Перевірити пароль в відомих витоках даних + Перевірити вебсайт у відомих витоках даних + Відкрити застосунок + Відкрити вебсайт + Відкрити документацію + Відкрити браузер + Відкрити головну сторінку + Відкрити Play store + Відкрити в %1$s + Відкрити в… + Як видалити мій обліковий запис? + Незахищений + Обрати застосунок + Виявлення збігів + Основний домен + Порівнювати ресурси по доменах першого та другого рівнів. + Хост + Порівнювати ресурси по назві хосту та порту (якщо вказано). + Розпочинається з + Порівнювати ресурси посимвольно починаючи з початку URI-посилання. + Повний збіг + Порівнювати ресурси посимвольно починаючи з початку URI-посилання, вимагати повний збіг посилання. + Регулярний вираз + Порівнювати ресурси за допомогою регулярного виразу. Опція просунутого рівня. + Ніколи + Ігнорувати URI-посилання під час пошуку записів для автозаповнення. + %1$s зв\'язано з паролем + %1$s зв\'язано з іменем користувача + %1$s зв\'язано з іменем власника карти + %1$s зв\'язано з місяцем закінченням терміну картки + %1$s зв\'язано з роком закінченням терміну картки + %1$s зв\'язаний з кодом безпеки карти + %1$s зв\'язано з виробником картки + %1$s зв\'язано з номером картки + %1$s зв\'язано з титулом + %1$s зв\'язано з іменем по батькові + %1$s зв\'язано з адресним рядком (1) + %1$s зв\'язано з адресним рядком (2) + %1$s зв\'язано з адресним рядком (3) + %1$s зв\'язано з містом + %1$s зв\'язано з штатом/областю + %1$s зв\'язано з поштовим індексом + %1$s зв\'язано з країною + %1$s зв\'язано з компанією + %1$s зв\'язано з електронною поштою + %1$s зв\'язано з номером телефону + %1$s зв\'язано з SSN + %1$s зв\'язано з іменем користувача + %1$s зв\'язано з номером паспорта + %1$s зв\'язано з номером ліцензії + %1$s зв\'язано з іменем + %1$s зв\'язано з прізвищем + %1$s зв\'язано з повним іменем + %1$s зв\'язано з невідомим полем + Поділитися через… + %1$d вибрано + Скопіювати + Скопіювати значення + Скопіювати URL + Скопіювати URI + Скопіювати назву пакета + Копіювати пароль + Скопіювати ім\'я користувача + Скопіювати ел. пошту + Скопіювати номер телефону + Скопіювати номер паспорта + Скопіювати номер ліцензії + Скопіювати номер картки + Скопіювати ім’я власника карти + Скопіювати рік закінчення строку дії + Скопіювати місяць закінчення строку дії + Скопіювати CVV-код + Скопіювати одноразовий пароль + Скопіювати секретний ключ + Розблокувати Keyguard + Відкрити Keyguard + Січень + Лютий + Березень + Квітень + Травень + Червень + Липень + Серпень + Вересень + Жовтень + Листопад + Грудень + Перемістити вгору + Перемістити нижче + Видалити + Видалити елемент? + Додати ще + FIDO2 WebAuthn + Авторизація WebAuthn + Повернутися до застосунку + + Не може бути порожнім + + Не може бути порожнім + Має бути вашим доменом + Має містити тільки US-ASCII символи + Має мати довжину в хоча б %1$d символів + Має мати довжину в %1$d символів + Невірний домен + Невірна адреса ел. пошти + Некоректна URL-адреса + Некоректний URI + Недійсний номер картки + Невірний пароль + Помилка генерації одноразового коду + Не вдалося створити ключ доступу + Не вдалося авторизувати запит + + Штрих-код + Штрих-код + Перенесіть автентифікатор на інший пристрій зчитав QR-код. + + Вибір дати + + Палітра кольорів + + Як видалити мій обліковий запис? + Колекція інформації про те, як видалити ваш обліковий запис з вебсервісів + + Легко + + Середньо + + Важко + + Обмежена доступність + + Неможливо + Надіслати ел. листа + Пошук вебсайтів + Немає інструкцій + Двофакторна автентифікація + Список вебсайтів, які підтримують двофакторну автентифікацію + Пошук вебсайтів + Ключі доступу + Список вебсайтів, які підтримують ключі доступу + Пошук вебсайтів + + Витік даних + Скомпрометовані облікові записи можуть надати зловмисникам доступ до ваших персональних та фінансових даних, що наражає вас на ризик крадіжки ідентичності, фінансового шахрайства та інших форм кіберзлочинності. + Все добре + Знайдено скомпрометовані облікові дані + Скомпрометовані сервіси + Відбулося %1$s + Стало відомо %1$s + Не вдалося перевірити витоки даних. Перевірте з\'єднання з інтернетом + Витік даних + Пароль, який зустрічається в витоках даних набагато легше підібрати. Такий пароль не рекомендується використовувати. + Знайдено скомпрометовані паролі + Пароль ідентифіковано у відомих витоках даних. Будь ласка, негайно змініть його для захисту вашої онлайн-безпеки + Все добре + Не вдалося перевірити витоки даних. Перевірте з\'єднання з інтернетом + + Великий шрифт + Показати великим шрифтом + Показати великим шрифтом та заблокувати сховище + Вибір застосунку + Пошук встановлених застосунків + Системний застосунок + Немає застосунків + Вибрати теку + Створити нову теку: + + Ця організація матиме право власності на копію. Ви не будете безпосереднім власником. + Сервіси пересилання електронної пошти + Сервіси пересилання електронної пошти + Видалити сервіс пересилання електронної пошти? + Видалити сервіси пересилання електронної пошти? + Інтеграція сервісу пересилання ел. пошти + Сервіси пересилання електронної пошти відсутні + Створити зашифроване сховище локальних даних. + Пароль застосунку + Біометрична автентифікація + Створити сховище + Надсилати звіти про збої + Створити сховище + Стерти всі дані + Закрити застосунок і видалити всі його локальні дані + Сховище заблоковано. Введіть пароль застосунку, щоб продовжити. + Розблокувати + + Розблокувати сховище + + Розблокуйте сховище за допомогою біометричної автентифікації. + Необхідна верифікація користувача. Введіть пароль застосунку, щоб продовжити. + Підтвердити + Стан синхронізації + Синхронізовано + В очікуванні + Синхронізація + Помилка синхронізації + Новий запис + Редагувати запис + Стилізуйте текст використовуючи %1$s, %2$s та інше. Обмежена підтримка синтаксису Markdown. + курсив + жирний + Попередній перегляд + Подвійна автентифікація + Перезапитувати аутентифікацію, коли ви переглядаєте або використовуєте запис + Додати обліковий запис Bitwarden + Ми не асоційовані, авторизовані, схвалені, або будь-яким чином офіційно з\'єднані з Bitwarden Inc., або будь-якими його дочірніми компаніями або партнерами. + + Щоб пройти перевірку Captcha на неофіційному клієнті Bitwarden, вам необхідно вказати клієнтський секрет (Client secret). Щоб знайти його, відвідайте Вебсторінку сховища / Налаштування / Ключ API (Web vault / Settings / API Key). + + Секретний ключ клієнта + Увійти + Регіон + США + Європа + Власний сервер (self-hosted) + HTTP-заголовки + HTTP-заголовок + Ви можете додати користувацькі HTTP-заголовки, які будуть відправлятися з кожним запитом на сервер. + Ключ + Значення + Додати ще + URL-адреса сервера + Вкажіть основну URL-адресу вашого власного встановлення Bitwarden. + Власне середовище + Ви можете вказати URL-адресу окремо для кожного сервісу. + URL-адреса сервера веб-сховища + URL-адреса сервера API + URL-адреса сервера піктограм + URL-адреса сервера ідентифікації + Підтвердження + Цей метод аутентифікації ще не підтримується. + Введіть код підтвердження з програми для автентифікації. + Введіть код підтвердження, надісланий на %1$s. + Введіть код автентифікації YubiKey вручну. Помістіть курсор на поле нижче та активуйте YubiKey. + Автентифікатор + Duo (Організація) + Web-аутентифікація FIDO2 + Ел. пошта + FIDO U2F + Під\'єднати YubiKey через USB + Потребує підтримки USB OTG. + Тепер доторкніться до золотої кнопки на YubiKey. + Прислоніть YubiKey до задньої частини вашого пристрою + Потребує підтримки NFC. + Не вдалося прочитати YubiKey + Для використання FIDO2 WebAuthn необхідно мати версію вебсховища Bitwarden %1$s або новішу. В старіших версіях результат автентифікації буде помилково відправлений в офіційний застосунок Bitwarden. + Підтвердити доступ + Ці дані захищені, щоб продовжити введіть ваш пароль до застосунку. + + Підтвердити доступ + + Підтвердити ваш доступ та розблокувати дані за допомогою біометричної автентифікації. + Сховище + Відправл. + Генератор + Варт. вежа + Налашт. + Заблоковано через неактивність + Текст + Файл + Логін + Картка + Особисті дані + Нотатка + Ключ доступу + Текст + Логічний тип + Пов\'язаний тип + + Викрито + Дуже надійний + Надійний + Хороший + Задовільний + Слабкий + Дуже надійні паролі + Надійні паролі + Хороші паролі + Задовільні паролі + Слабкі паролі + Фільтр + Немає доступних фільтрів + Упорядкувати за + Сортування недоступне + Назвою + В алфавітному порядку + Зворотний алфавітний порядок + Кількістю відвідувань + Спочатку найбільші + Спочатку найменші + Датою останньої зміни + Спочатку нові + Спочатку старіші + Датою закінчення дії + Спочатку нові + Спочатку старіші + Датою видалення + Спочатку нові + Спочатку старіші + Паролем + В алфавітному порядку + Зворотний алфавітний порядок + Датою зміни паролю + Спочатку нові + Спочатку старіші + Надійністю пароля + Спочатку слабкі + Спочатку надійні + Пошук записів + Новий запис + Відсутні записи рекомендовані для поточного контексту + + Захисний код + Збережено до %1$s на %2$s + Пароль останній раз змінено %1$s + Ключ доступу створено %1$s + Останній раз змінено %1$s + Створено %1$s + Видалено %1$s + Закінчився термін дії %1$s + Термін дії закінчиться %1$s + Буде видалено %1$s + + Набрати + + Написати + + Ел. пошта + + Напрямок + Відправлення + Пошук відправлень + Нове відправлення + Для доступу до цього відправлення необхідно буде ввести пароль + Генератор + Генератор імені користувача + Генератор паролів + Згенерувати + Перегенерувати + Парольна фраза + Випадкові парольні фрази забезпечують найкраще поєднання запам\'ятовуваності та безпеки. + Роздільник + З великої літери + Число + Ім\'я користувача + Роздільник + Довільне слово + З великої літери + Число + Випадкові символи + Надійний пароль має якнайменше %1$d символів, великі та малі літери, цифри та спеціальні символи. + Цифри + Символи + Великі літери + Малі літери + + Виключити подібні символи + + Виключити неоднозначні символи + Адреса ел. пошти catch-all + Адреса електронної пошти catch-all надає користувачам можливість отримувати повідомлення, надіслані на їхній домен, навіть якщо вони надсилаються на адресу електронної пошти, яка не була налаштована для їх домену. Перед використанням переконайтеся, що ваш хостинг електронної пошти підтримує цю функцію. + + Домен + Адреса ел. пошти з плюсом + Плюс адресація означає, що будь-які повідомлення, надіслані на %1$s, усе ще надсилаються на ваш обліковий запис. Це означає, що ви можете мати багато варіантів своєї адреси електронної пошти, щоб надавати її різним людям, сайтам або спискам розсилки. Перед використанням переконайтеся, що ваш хостинг електронної пошти підтримує цю функцію. + Ел. пошта + Адреса ел. пошти з піддоменом + Піддомен адресація означає, що будь-які повідомлення, надіслані на %1$s, усе ще надсилаються на ваш обліковий запис. Це означає, що ви можете мати багато варіантів своєї адреси електронної пошти, щоб надавати її різним людям, сайтам або спискам розсилки. Перед використанням переконайтеся, що ваш хостинг електронної пошти підтримує цю функцію. + Ел. пошта + Псевдонім е-пошти для пересилання + Створити новий логін з паролем + Створити новий логін з іменем користувача + Історія паролів + Показувати підказки + Історія генератора + Очистити історію + Очистити історію генератора? + Всі записи з історії будуть видалені. + Історія паролів + Очистити історію + Очистити історію паролів? + Всі паролі з історії будуть видалені. + Вартова вежа + Надійність пароля + Безпека + Підтримка + Викриті паролі + Паролі, які було знайдено в витоках даних. Такі паролі мають бути негайно змінені. + Повторювані паролі + Не використовуйте однаковий пароль на кількох вебсайтах. Генеруйте унікальні паролі для підвищення безпеки. + Вразливі облікові записи + Сайти, які постраждали від витоку даних після вашої останньої зміни пароля. Змініть пароль, щоб убезпечити ваші облікові записи. + Незахищені вебсайти + Змініть протокол URL-адрес з HTTP на HTTPS, оскільки останній використовує найкраще шифрування з доступного. + Неактивна двофакторна автентифікація + Сайти, які мають доступну, але ще не налаштовану двофакторну автентифікацію. + Наявні ключі доступу + Сайти, які мають наявну, але ще не налаштовану підтримку ключів доступу - простішу та більш безпечну альтернативу паролям. + Незавершені записи + Допомагає вам знайти відсутні або неповні дані у вашому сховищі. Це можуть бути записи без назв або імен користувачів. + Закінчується термін дії + Записи у яких або закінчився термін дії, або скоро закінчиться. + Повторювані URI-адреси + Записи, які мають URI-адреси, котрі після обробки на виявлення збігів покривають однакові вебсайти. + Записи в кошику + Записи які були переміщенні в кошик. Забагато записів в кошику може сповільнити операції зі сховищем. + Порожні теки + Теки, які не містять записів. + Повторювані записи + Допомагає вам знайти та виправити записи з повторюваними даними. + Скомпрометовані облікові записи + Шукати ім\'я користувача або електрону адресу в відомих витоках даних. + Змінити пароль застосунку + Змінити пароль + Біометрична автентифікація + + Змінити пароль застосунку + Пароль застосунку ніколи не зберігається на пристрої або відправляється мережею. Він використовується для генерації секретного ключа яким шифрується локальне сховище. + Якщо ви не підозрюєте що до вашого пристрою був несанкціонований доступ, або не знайшли шкідливе програмне забезпечення, то не треба змінювати поточний пароль застосунку, якщо він достатньо надійний та унікальний. + Зв\'язатися з нами + Ваше повідомлення + Пишіть англійською, щоб переконатися, що ваше повідомлення не буде сприйнято неправильно. + Ми цінуємо час, який ви витрачаєте, надсилаючи нам повідомлення. Ваше повідомлення надходить безпосередньо до нас, і ми використовуємо його для вирішення проблем та вдосконалення продукту. Хоча ми відповідаємо не на кожне повідомлення, ми переглядаємо їх та якнайшвидше працюємо над усуненням проблем, а також покращенням функціональності. + Облікові записи + Додати обліковий запис + Команда Keyguard + Я програмний інженер з України. Моя спеціалізація це дизайн та розробка застосунків. + Слідкуй за мною + Пошук + Налаштування + Пошук налаштувань + Інтерфейс + Автозаповнення + Для розробників + Експериментальні налаштування + Налаштування + Повідомлення + Інше + Дозволи + Безпека + Keyguard преміум + Вартова вежа + Ліцензії відкритого програмного забезпечення + Облікові записи + Додати та переглянути облікові записи + Автозаповнення + Служба автозаповнення Android + Безпека + Біометрика, блокування сховища, зміна паролю + Keyguard преміум + Розблокуйте додаткові функції та підтримайте розробку + Вартова вежа + Скомпрометовані послуги, вразливі паролі + Повідомлення + Попередження + Інтерфейс + Мова, тема оформлення та анімації + Для розробників + Тестові параметри для розробників + Інше + Вебсайти спільноти, інформація про застосунок + Показувати підписи на кнопках навігації + Версія застосунку + Дата збірки застосунку + Команда Keyguard + Reddit спільнота + Проєкт на GitHub + Проєкт на Crowdin + Ліцензії відкритого програмного забезпечення + Завантажити APK-файл + Завантажувати іконки застосунків + Завантажувати іконки вебсайтів + Запит іконки вебсайту може дати інформацію інтернет-провайдеру про збережені в сховищі адреси вебсайтів + Розширене форматування тексту + Використовувати Markdown для форматування нотаток + Мова + Запропонувати переклад + Шрифт + Оцінити в Play Store + Колір відтінку + Тема оформлення + Використовувати контрастну чорну тему + Відкривати посилання у зовнішньому браузері + Скрити значення полів + Приховувати конфіденційну інформацію, таку як паролі або номера кредитних карток + + Спровокувати виліт застосунку + Постачальник реквізитів для входу + Ключі, паролі та служби даних + Політика конфіденційності + Зв\'язатися з нами + Експериментальні налаштування + Змінити пароль застосунку + Вимагати пароль застосунку + На додачу до стандартних налаштувань безпеки, після цього часу або після зміни налаштувань біометрії, буде необхідно повторно ввести пароль застосунку + Негайно + Ніколи + Надсилати звіти про збої + Анімація переходів + Стерти дані + Закрити застосунок і видалити всі його локальні дані + Дозволити знімки екрана + Показувати вміст програми при перемиканні між нещодавніми додатками та дозволити запис екрану + Приховувати вміст програми при перемиканні між нещодавніми додатками та заборонити запис екрану + Безпека даних + Заблокувати сховище + Блокувати після перезавантаження + Блокувати сховище після перезавантаження пристрою + Блокувати сховище при вимкненні екрана + Блокувати сховище через кілька секунд після вимкнення екрану + Блокувати після затримки + Негайно + Ніколи + Зберігати ключ сховища на диску + Ключ сховища зберігається у внутрішній пам\'яті + Сховище буде заблоковано після вивантаження застосунку з пам\'яті + Зберігання ключа сховища на диску становить загрозу безпеці. Якщо внутрішнє сховище пристрою скомпрометовано, зловмисник отримає доступ до даних локального сховища. + Дозволи + Перегляд можливостей + Біометричне розблокування + + Біометричне розблокування + Залишати екран включеним під час перегляду записів + Автозаповнення + Заповнювати інформацію в інших програмах за допомогою Android Autofill Framework + Автоматично копіювати одноразові паролі + Автоматично копіювати одноразові паролі при заповненні логіну + Вбудовані підказки + Вбудовує пропозиції автозаповнення безпосередньо в сумісні клавіатури + Ручний вибір + Показувати опцію ручного пошуку запису в сховищі + Поважати вимкнення автозаповнення + Вимкнути автозаповнення в браузері для поля, яке має вимкнений прапорець автозаповнення + Зверніть увагу, що деякі вебсайти відключають автозаповнення паролів, та деякі веббраузери ігнорують відключення автозаповнення + Пропонувати зберігати дані + Запитує, чи оновлювати сховище після заповнення форми + Автозбереження інформації про застосунок або сайт + Автоматично очищати буфер обміну + Негайно + Ніколи + Тривалість сповіщення з OTP + При заповнюванні логіну з одноразовим паролем, сповіщення з кодом підтвердження зринає принаймні на задану тривалість + Ніколи + Про членство в Keyguard + Преміум відкриває нові функції та фінансує розробку застосунку. Дякуємо, що підтримуєте нас! ❤️ + Підписки + Продукти + Не вдалося завантажити список підписок + Не вдалося завантажити список продуктів + Активний + Не буде продовжено + Керувати на Play Store + Публікувати сповіщення + Для показу сповіщень прогресу завантаження файлів + Камера + Для сканування QR-кодів + Дозволити інтерфейс з двома панелями в ландшафтному режимі + Дозволити інтерфейс з двома панелями в портретному режимі + Темна + Світла + Вимкнено + Динамічна + Перехресний перехід + Розроблено спеціально для читачів з низьким рівнем зору + Перегляд можливостей + Keyguard преміум + Декілька облікових записів + Додайте декілька облікових записів одночасно. + Двостороння синхронізація + Додавайте, редагуйте записи та синхронізуйте зміни в сховищі з хмарою. + Офлайн редагування + Додавайте, редагуйте записи без активного підключення до Інтернету. + Пошук + Шукати за будь-чим + Назва, ел. пошта, пароль, номер телефону тощо. + Фільтр + Фільтрувати за текою, організацією, типом запису і т. д. + Кілька ключових слів + Введіть \'bitw test\', щоб знайти запис \'Bitwarden Test Account\'. + Вартова вежа + Викриті паролі + Знайти викриті в витоках даних паролі. + Надійність пароля + Знайти логіни зі слабкими паролями. + Повторювані паролі + Знайти логіни з перевикористаними паролями. + Неактивна двофакторна автентифікація + Знайти логіни з доступною двофакторною автентифікацією. + Незахищені вебсайти + Знайти вебсайти, які використовують протокол HTTP, автоматичне виправлення на HTTPS. + Незавершені записи + Знайти порожні записи, які можуть потребувати зміни. + Закінчується термін дії + Знайти записи з вичерпаним терміном придатності. + Повторювані записи + Знайти й об\'єднати повторювані записи. + Різне + Множинний вибір + Об\'єднати записи, пришвидшити рефакторінг з груповими операціями. + Показати як штрих-код + Показати текст у вигляді різних штрих-кодів. + Генератор + Генеруй паролі або імена користувачів. + Безпека даних + Локальні дані + Локальні дані складаються з завантажень файлів, налаштувань користувача та сховища. Вони зберігаються у внутрішній пам\'яті пристрою, до якого має доступ лише система Android та Keyguard. + Завантаження + Налаштування користувача + Налаштування користувача зашифровано за допомогою ключа пристрою. + Налаштування користувача + Сховище зашифровано за допомогою ключа, який було отримано з пароля застосунку таким алгоритмом: + Після цього сіль та хеш записується локально на пристрій для подальшої генерації майстер ключа для розблокування сховища. + Розблокування сховища означає збереження коректного майстер-ключа в оперативній пам\'яті пристрою, що дає можливість читати та редагувати зашифроване сховище. + Віддалені дані + Віддалені дані зберігаються на серверах Bitwarden з шифруванням з нульовим знанням. + diff --git a/common/src/commonMain/resources/MR/vi-rVN/plurals.xml b/common/src/commonMain/resources/MR/vi-rVN/plurals.xml new file mode 100644 index 00000000..5f2db8ad --- /dev/null +++ b/common/src/commonMain/resources/MR/vi-rVN/plurals.xml @@ -0,0 +1,2 @@ + + diff --git a/common/src/commonMain/resources/MR/vi-rVN/strings.xml b/common/src/commonMain/resources/MR/vi-rVN/strings.xml new file mode 100644 index 00000000..b41c2050 --- /dev/null +++ b/common/src/commonMain/resources/MR/vi-rVN/strings.xml @@ -0,0 +1,868 @@ + + + OK + Đóng + Yes + No + + Tên + Tên tài khoản + Tên người dùng + Mật khẩu + Mật khẩu ứng dụng + Mật khẩu hiện tại + Mật khẩu mới + Email + Đã xác thực + Chưa xác thực + Email visibility + Public URL + URL + + Access count + Tìm hiểu thêm + Số điện thoại + Số hộ chiếu + Số bằng lái xe + Card number + No card number + Brand + Security code + Valid from + Valid to + Card expiry month + Card expiry year + Cardholder name + Valid from + Expiry date + Công ty + Cập nhật + + Hidden + + Visible + + Rỗng + + Số căn cước công dân + Thành phố + Bang + Thông tin + Cancel + Tiếp tục + Quốc gia + Địa chỉ + Mã bưu chính + Kéo xuống để tìm kiếm + Lưu + URI + URIs + Ghi chú + Ghi chú + Tệp đính kèm + No attachments + Expiring soon + Incomplete data + This item is missing some of the important information. + Mục + Các mục + %1$s mục + All items + No items + Chưa có thư mục + Tạo thư mục + Thư mục + Thư mục + No folders + Chưa có danh mục + Danh mục + Danh mục + No collections + Kho của tôi + Tổ chức + Tổ chức + No organizations + Khác + Add integration + Tài khoản + Tài khoản + No accounts + No account + Loại + Tuỳ chọn + Gửi + Bỏ chọn + Độ dài + Bảo mật + Contact info + Title + First name + Middle name + Last name + Full name + Address line 1 + Address line 2 + Address line 3 + Rename + Select type + Autofill + Passkey + Create a passkey + Unlock Keyguard + Confirming auth request… + Passkeys + + Signature counter + + Relying party + + Discoverable + Username + Display name + API key + Domain + Edit + Xoá + Xóa + Xóa khỏi lịch sử + Mật khẩu bị trùng + Mật khẩu bị trùng + Mã xác thực + Authenticator key + Use + Save passkey + Passkey available + Two-factor authentication available + Custom + Theo hệ thống + + Sắp ra mắt + Được cung cấp bởi + Mã xác thực + Gửi lại mã xác thực + Đã gửi mail xác thực + Kho trên trang web + Mở Web vault + + Không hỏi lại + + Trash + + Download + Downloads + No downloads + No duplicates + Mã hoá + + Khoá + Hash + Salt + AES 256-bit + Ngẫu nhiên %1$d-bits dữ liệu + Không có + Text + Ứng dụng liên kết + Đường dẫn liên kết + Trường tùy chỉnh + Hiển thị ghi chú bảo mật + Ẩn ghi chú bảo mật + Gợi ý mật khẩu chính + Cụm từ Fingerprint + Fingerprint là gì? + Bitwarden cao cấp + Máy chủ Bitwarden không chính thức + Cập nhật lần cuối lúc %1$s + Đổi tên + Đổi màu + Thay đổi gợi ý mật khẩu chính + Đăng xuất + Đăng nhập + Truy cập trang web của kho để xác thực email của bạn + Nâng cấp tài khoản của bạn lên thành viên cao cấp và mở khóa một số tính năng bổ sung tuyệt vời + Xác thực hai bước + Yêu cầu xác thực đăng nhập bằng thiết bị khác như khoá bảo mật, ứng dụng xác thực, tin nhắn hoặc email + Đang bật + Items + Log out + Log out? + All of the not synchronized changes will be lost! + Change name + Change names + Delete folder? + Delete folders? + This item(s) will be deleted immediately. You can not undo this action. + Mở gần đây + Mở thường xuyên + View details + Save to + Thêm vào mục yêu thích + Xóa khỏi mục yêu thích + Bật xác thực mọi lúc + Tắt xác thực mọi lúc + Chỉnh sửa + Hợp nhất… + Sao chép đến… + Chuyển tới thư mục + Đổi tên + Đổi tên + Add password + Add passwords + Đổi mật khẩu + Đổi mật khẩu + Xem lịch sử mật khẩu + Chuyển vào Thùng rác + Khôi phục + Xóa vĩnh viễn + Move associated items to trash + Open with… + Send with… + Open in a file manager + Delete local file + View parent item + Always show keyboard + Sync vault + Lock vault + Rename folder + Kiểm tra email trong các thông tin bị rò rỉ + Kiểm tra tên người dùng trong các thông tin bị rò rỉ + Kiểm tra mật khẩu trong các thông tin bị rò rỉ + Check the website in known data breaches + Mở ứng dụng + Launch website + Launch docs + Mở trình duyệt + Mở trang chủ + Mở cửa hàng Play + Mở bằng %1$s + Mở bằng… + How to delete an account? + Unsecure + Match app + Match detection + Base domain + Match resources by top-level and second-level domain. + Host + Match resources by hostname and (if specified) port. + Starts with + Match resources when the detected resource starts with the URI. + Exact + Match resources when the detected resource exactly matches the URI. + Regular expression + Match resources by regular expression. Advanced option. + Never + Ignore URI during auto-fill item search. + %1$s linked to the password + %1$s linked to the username + %1$s linked to the cardholder name + %1$s linked to the expiration month + %1$s linked to the expiration year + %1$s linked to the card code + %1$s linked to the card brand + %1$s linked to the card number + %1$s linked to the title + %1$s linked to the middle name + %1$s linked to the address line (1) + %1$s linked to the address line (2) + %1$s linked to the address line (3) + %1$s linked to the city + %1$s linked to the state + %1$s linked to the postal code + %1$s linked to the country + %1$s linked to the company + %1$s linked to the email + %1$s linked to the phone number + %1$s linked to the SSN + %1$s linked to the username + %1$s linked to the passport number + %1$s linked to the license number + %1$s linked to the first name + %1$s linked to the last name + %1$s linked to the full name + %1$s linked to an unknown field + Share with… + %1$d mục đã chọn + Sao chép + Sao chép + Sao chép đường dẫn + Sao chép đường dẫn + Sao chép tên gói + Sao chép mật khẩu + Sao chép tên người dùng + Sao chép email + Sao chép số điện thoại + Sao chép số hộ chiếu + Copy license number + Sao chép số thẻ + Copy cardholder name + Copy expiration year + Copy expiration month + Copy CVV code + Copy one-time password + Copy secret key + Unlock Keyguard + Open Keyguard + January + February + March + April + May + June + July + August + September + October + November + December + Move up + Move down + Remove + Remove an item? + Add more + FIDO2 WebAuthn + Authenticate WebAuthn + Return to app + + Must not be empty + + Must not be blank + Must be custom domain + Must contain only US-ASCII characters + Must be at least %1$d symbols long + Must be %1$d symbols long + Invalid domain + Invalid email + Invalid URL + Invalid URI + Invalid card number + Incorrect password + Failed to generate OTP code + Failed to create a passkey + Failed to authorize a request + + Barcode + Show as Barcode + Copy this authenticator to another device by scanning the QR code. + + Date picker + + Color picker + + How to delete an account? + A collection of info of how to delete your account from web services + + Easy + + Medium + + Hard + + Limited availability + + Impossible + Send email + Search websites + No instructions + Two-factor authentication + List of websites with two-factor authentication support + Search websites + Passkeys + List of websites with passkeys support + Search websites + + Data breach + Breached account data can provide malicious actors with access to sensitive personal and financial information, potentially leading to identity theft, financial fraud, and other forms of cybercrime. + No breaches found + Breached accounts found + Breaches + Occurred on %1$s + Reported on %1$s + Failed to check data breaches. You might currently be offline + Data breach + A password that is found in the data breaches takes significantly less time to break and should never be used. + Password is compromised + The password has been identified in known data breaches. Please change it immediately to protect your online security + No breaches found + Failed to check data breaches. You might currently be offline + + Large Type + Show in Large Type + Show in Large Type and Lock vault + App Picker + Search installed apps + System app + No apps + Choose a folder + Create a new folder: + + This organization will have an ownership of the copy. You will not be the direct owner. + Email forwarders + Email forwarders + Delete email forwarder? + Delete email forwarders? + Email forwarder integration + No email forwarders + Create an encrypted vault where the local data will be stored. + App password + Biometric authentication + Create a vault + Send crash reports + Create a vault + Erase app data + Close the app and erase all local app data + The vault is locked. Enter your app password to continue. + Mở khoá + + Unlock a vault + + Use biometric authentication to unlock the vault. + User verification is required. Enter your app password to continue. + Verify + Sync status + Up to date + Pending + Syncing + Sync failed + New item + Edit item + Style text with %1$s or %2$s and more. Limited Markdown syntax is supported. + italic + bold + Render preview + Auth re-prompt + Ask to authenticate again when you view or autofill a cipher + Add Bitwarden account + We are not affiliated, associated, authorized, endorsed by, or in any way officially connected with the Bitwarden, Inc., or any of its subsidiaries or its affiliates. + + To pass the captcha verification on an unofficial Bitwarden client, you must specify the client secret. To find it, visit Web vault / Settings / API Key. + + Client secret + Sign in + Region + United States + Europe + Custom (self-hosted) + HTTP headers + HTTP header + You can add custom HTTP headers that will be sent with every request to the server. + Key + Value + Add more + Server URL + Specify the base URL of your self-hosted Bitwarden installation. + Custom environment + You can specify the base URL of each service independently. + Web Vault Server URL + API Server URL + Icons Server URL + Identity Server URL + Verification + This authentication method is not supported yet. + Enter the verification code from your authenticator app. + Enter the verification code that was emailed to %1$s. + Enter the YubiKey authentication code manually. Place the cursor on the field below and trigger the YubiKey. + Authenticator + Duo (Organization) + FIDO2 Web Authentication + Email + FIDO U2F + Connect YubiKey via USB + Requires USB OTG support. + Touch the gold sensor on your YubiKey now. + Hold your YubiKey flat against the back of your device + Requires NFC support. + Failed to read YubiKey + Using FIDO2 WebAuthn requires using the Bitwarden Web vault version %1$s or higher. On older versions the authentication result will incorrectly be forwarded to the official Bitwarden app. + Confirm access + This data is protected, to continue please enter your app password. + + Confirm access + + Use biometric authentication to confirm your access and unlock this data. + Vault + Send + Generator + Watchtower + Settings + Locked due to inactivity + Text + File + Login + Card + Identity + Note + Passkey + Text + Boolean + Linked + + Pwned + Very strong + Strong + Good + Fair + Weak + Very strong passwords + Strong passwords + Good passwords + Fair passwords + Weak passwords + Filter + No filters available + Sort by + No sorting available + Title + Alphabetically + Reverse Alphabetically + Access count + Largest First + Smallest First + Modification date + Newest First + Oldest First + Expiration date + Newest First + Oldest First + Deletion date + Newest First + Oldest First + Password + Alphabetically + Reverse Alphabetically + Password modification date + Newest First + Oldest First + Password strength + Weakest First + Strongest First + Search vault + New item + There are no suggested items available for this context + + Security code + Saved to %1$s at %2$s + Password last modified at %1$s + Passkey created at %1$s + Last modified at %1$s + Created at %1$s + Deleted at %1$s + Expired at %1$s + Expiration scheduled at %1$s + Deleting scheduled at %1$s + + Call + + Text + + Email + + Directions + Sends + Search sends + New item + A password is required to access this share + Generator + Username generator + Password generator + Generate + Regenerate + Passphrase + Random passphrases provide the best combination of memorability and security. + Delimiter + Capitalize + Number + Username + Delimiter + Custom word + Capitalize + Number + Random symbols + A strong password has at least %1$d characters, uppercase & lowercase letters, digits and symbols. + Digits + Symbols + Uppercase letters + Lowercase letters + + Exclude similar symbols + + Exclude ambiguous symbols + Catch-all email + A catch-all email address provides users the option to receive all mail sent to their domain, even if they are sent to an email address that has not been set up for their domain. Ensure that your email hosting supports this feature before using it. + + Domain + Plus addressing email + Plus addressing means any email sent to %1$s is still sent to your account. This means you can have a lot of variations on your email address to give out to different people, sites, or mailing lists. Ensure that your email hosting supports this feature before using it. + Email + Subdomain addressing email + Subdomain addressing means any email sent to %1$s is still sent to your account. This means you can have a lot of variations on your email address to give out to different people, sites, or mailing lists. Ensure that your email hosting supports this feature before using it. + Email + Forwarded email alias + Create new login with the password + Create new login with the username + Password history + Show tips + Generator history + Clear history + Clear generator history? + This will remove all items from the history. + Password history + Clear history + Clear password history? + This will remove all passwords from the history. + Watchtower + Password strength + Security + Maintenance + Pwned Passwords + Passwords that have been exposed in data breaches. Such passwords should be changed immediately. + Reused Passwords + Don\'t use the same password on multiple websites. Generate unique passwords to improve security. + Vulnerable Accounts + Sites that were affected by a data breach since you last changed a password. Change your password to keep your account safe. + Unsecure Websites + Change the URLs that use HTTP protocol to use HTTPS protocol, as the latter utilizes the most advanced encryption available. + Inactive two-factor authentication + Sites that have two-factor authentication available but you haven\'t set it up yet. + Available Passkeys + Sites that have passkey available but you haven\'t set it up yet. It\'s simpler and more secure then a password. + Incomplete Items + Helps you identify missing or incomplete data in your vault. This can refer to identities with missing names or logins without usernames. + Expiring Items + Items that have expired or are expiring soon. + Duplicate URIs + Items that have one or more URIs that cover the same websites after applying the match detection. + Trashed Items + Items that have been moved into the trash. Having too many items in the trash may slow down operations with your vault. + Empty Folders + Folders that do not have any items in them. + Duplicate Items + Helps you identify and eliminate duplicate items in your vault. + Compromised Accounts + Check data breaches by a username or email address. + Change app password + Change password + Biometric authentication + + Change app password + App password never gets stored on the device nor sent over the network. It is used to generate a secret key that is used to encrypt the local data. + Unless you suspect unauthorized access or discover a malware on the device, there is no need to change the password if it is a strong, unique password. + Contact us + Your message + Use English to ensure that your feedback doesn\'t get misunderstood. + We appreciate the time that you spend sending us a message. Your message goes directly to us and we use it to troubleshoot issues, make product improvements and fix problems. While we may not reply to every report, we\'re reviewing and working on improvements & fixing issues as fast as we can. + Accounts + Add account + Team behind the app + I\'m a Software engineer from Ukraine. I specialize on app design and development. + Follow me + Search + Settings + Search settings + Appearance + Autofill + Development + Experimental + Settings + Notifications + Other + Permissions + Security + Keyguard Premium + Watchtower + Open-source licenses + Accounts + Add & view accounts + Autofill + Android Autofill & Credential services + Security + Biometrics, change password, vault timeout + Keyguard Premium + Unlock features & support app development + Watchtower + Compromised services, vulnerable passwords + Notifications + Alerts + Appearance + Language, theme and animations + Development + Test settings for development + Other + Community websites, app info + Show labels on navigation buttons + App version + App build date + Team behind the app + Reddit community + GitHub project + Crowdin project + Open-source licenses + Download APK file + Load App icons + Load Website icons + Queuing website icon might leak the website address to internet provider + Rich text formatting + Use Markdown to format notes + Language + Suggest translation + Font + Rate on Play Store + Tint color + Theme + Use contrast black theme + Open links in external browser + Conceal fields + Conceal sensitive info, such as passwords and credit card numbers + + Crash + Credential provider + Passkeys, passwords and data services + Privacy policy + Contact us + Experimental + Change app password + Require app password + In addition to your regular security settings, your app password will be required after this time or when biometry settings are changed + Immediately + Never + Send crash reports + Transition animation + Erase app data + Close the app and erase all local app data + Allow screenshots + Show the content of the app when switching between recent apps and allow capturing a screen + Hide the content of the app when switching between recent apps and forbid capturing a screen + Data safety + Lock vault + Lock after a reboot + Lock the vault after a device reboot + Lock when screen turns off + Lock the vault after a few seconds once the screen is off + Lock after a delay + Immediately + Never + Persist vault key on a disk + Vault key is persisted on an internal storage + Vault is locked after the app is unloaded from the memory + Storing a vault key on a disk is a security risk. If the device\'s internal storage is compromised, the attacker will gain access to the local vault data. + Permissions + Features overview + Biometric unlock + + Biometric unlock + Keep the screen on while viewing items + Autofill service + Use the Android Autofill Framework to assist in filling login information into other apps on the device + Auto-copy one-time passwords + When filling a login information, automatically copy one-time passwords + Inline suggestions + Embeds autofill suggestions directly into compatible keyboards + Manual selection + Displays an option to manually search a vault for an entry + Respect Autofill disabled flag + Disables autofill for a browser field that has autofill disabled flag set + Note that some websites are notorious for disabling autofill for a password field as well as some browsers are notorious for ignoring the autofill disabled flag + Ask to save data + Asks for updating the vault when filling of a form has completed + Auto-save app or website info + Automatically clear clipboard + Immediately + Never + One-time password notification duration + When you autofill a login item that has a one-time password, the notification with verification code will popup for at least the defined duration + Never + About Keyguard membership + The Premium unlocks extra features and funds a development of the app. Thank you for supporting us! ❤️ + Subscriptions + Products + Failed to load a list of subscriptions + Failed to load a list of products + Active + Will not renew + Manage on Play Store + Post notifications + Used to post downloading notifications + Camera + Used to scan QR codes + Allow two panel layout in landscape mode + Allow two panel layout in portrait mode + Dark + Light + Disabled + Dynamic + Crossfade + Developed specifically to increase legibility for readers with low vision, and to improve comprehension + Features Overview + Keyguard Premium + Multiple Accounts + Sign-in to multiple accounts simultaneously. + Two-way sync + Add or edit items and sync the changes back. + Offline editing + Add or edit items without internet connection. + Search + Search by anything + Name, email, password, phone number etc. + Filter + Filter by folder, organization, type etc. + Multiple keywords + Search by \'bitw test\' to find your \'Bitwarden Test Account\' item. + Watchtower + Pwned passwords + Find items with exposed in data breaches passwords. + Password strength + Find items with weak passwords. + Reused passwords + Find items with reused passwords. + Inactive 2FA + Find logins with available TOTP two-factor authentication. + Unsecure websites + Find websites that use HTTP protocol, auto-fix to HTTPS. + Incomplete items + Find empty items that might need updates. + Expiring items + Find expired or soon to be expired items. + Duplicate items + Find and merge duplicate items. + Misc + Multi-selection + Merge ciphers, fasten the refactoring with batch operations. + Show as Barcode + Encode a text as different barcodes. + Generator + Generate passwords or usernames. + Data safety + Local data + Local data consists of Downloads, User settings, Vault. They are stored in the internal storage of a device, which can only be accessed by the Android system or the Keyguard. + Downloads + User settings + The User settings are encrypted using a device-specific key. + Vault + The Vault is encrypted using a Key, derived from the App password using following steps: + The Salt and the Hash is then stored locally on a device, to later generate a master key to unlock the vault. + Unlocking a Vault means storing a correct Key in a device\'s RAM, gaining an ability to read and modify encrypted Vault. + Remote data + Remote data is stored on Bitwarden servers with zero-knowledge encryption. + diff --git a/common/src/commonMain/resources/MR/zh-rCN/plurals.xml b/common/src/commonMain/resources/MR/zh-rCN/plurals.xml new file mode 100644 index 00000000..5f2db8ad --- /dev/null +++ b/common/src/commonMain/resources/MR/zh-rCN/plurals.xml @@ -0,0 +1,2 @@ + + diff --git a/common/src/commonMain/resources/MR/zh-rCN/strings.xml b/common/src/commonMain/resources/MR/zh-rCN/strings.xml new file mode 100644 index 00000000..05616069 --- /dev/null +++ b/common/src/commonMain/resources/MR/zh-rCN/strings.xml @@ -0,0 +1,868 @@ + + + 确定 + 关闭 + Yes + No + + 名称 + 账户名 + 用户名 + 密码 + 应用专用密码 + 当前密码 + 新密码 + 电子邮件 + 已验证 + 未验证 + 电子邮件可见性 + 公开网址 + URL + + 访问次数 + 了解详情 + 电话号码 + 护照号码 + 许可证号码 + 卡号 + No card number + 品牌 + 安全码(CVV) + Valid from + Valid to + Card expiry month + Card expiry year + 持卡人姓名 + 有效期自 + 有效期至 + 公司 + 同步 + + 隐藏 + + 可见 + + + + 社会保险号码(SSN) + 城市/区县 + 州/省 + 信息 + 取消 + 继续 + 国家/地区 + 地址 + 邮政编码 + 下拉以进行搜索 + 保存 + URI + URIs + 备注 + 备注 + 附件 + No attachments + Expiring soon + Incomplete data + This item is missing some of the important information. + 项目 + 项目 + %1$s 项目 + All items + No items + 无文件夹 + 新建文件夹 + 文件夹 + 文件夹 + No folders + 无收藏 + 收藏 + 收藏 + No collections + 我的保险库 + 组织 + 组织 + No organizations + 杂项 + Add integration + 账号 + 帐户 + No accounts + 没有账号 + 类型 + 选项 + 发送 + 重置 + 长度 + 安全性 + Contact info + 标题 + + 中间名 + + Full name + 地址行1 + 地址行2 + 地址行3 + 重命名 + Select type + 自动填充 + Passkey + Create a passkey + Unlock Keyguard + Confirming auth request… + Passkeys + + Signature counter + + Relying party + + Discoverable + Username + Display name + API key + Domain + Edit + 删除 + 移除 + 从历史记录中移除 + 重复使用的密码 + 重复使用的密码 + 动态密码(OTP) + 验证器密钥 + Use + Save passkey + 可用通行密钥 + 可用双重验证 + 自定义 + 遵循系统设置 + + 即将上线 + 基于 + 验证码 + 重新发送验证码 + 请求验证电子邮件 + 网页保险库 + 启动 Web 保险库 + + 记住登录 + + 回收站 + + 下载 + 下载 + No downloads + No duplicates + 加密 + + 密钥 + 哈希值 + + 256-bit AES + 随机 %1$d 位数据 + + 文本 + 关联应用 + 链接的 URI + 自定义字段 + 显示安全笔记 + 隐藏安全笔记 + 主密码提示 + 指纹短语 + 什么是指纹? + Bitwarden 大会员 + 非官方的 Bitwarden 服务器 + 最后修改于 %1$s + 更换名称 + 更改颜色 + 修改主密码提示 + 登出 + 登录 + 访问 Web 保险库来验证您的电子邮件地址 + 将您的账户升级为大会员,将获得一些大会员独享的moment + 两步验证 + 需要使用另一个设备进行登录验证,如安全密钥、身份验证器应用、短信或电子邮件 + 启用 + 项目 + 登出 + 登出? + 所有未同步的更改都将丢失! + 更换名称 + 更换名称 + 确认删除文件夹? + 确认删除文件夹? + 此项目将立即删除且这是不可逆的。 + 最近打开 + 经常打开 + 查看详情 + Save to + 添加到收藏夹 + 从收藏夹中删除 + 启用再次要求验证 + 禁用再次要求验证 + 编辑 + 合并到… + 复制到… + 移动至文件夹 + 更换名称 + 更换名称 + Add password + Add passwords + 修改密码 + 修改密码 + 查看历史密码 + 回收站 + 恢复 + 永久删除 + 将关联项目移动到回收站 + Open with… + Send with… + Open in a file manager + Delete local file + View parent item + 总是显示键盘 + 同步保险库 + 锁定保险库 + 重命名文件夹 + 在已知数据泄露中检查电子邮件 + 在已知数据泄露中检查用户名 + 在已知数据泄露中检查密码 + 在已知数据泄露中检查网站 + 启动应用 + 打开网站 + 启动文档 + 启动浏览器 + 启动主页面 + 启动 Play 商店 + 启动 %1$s + 使用第三方应用操作 + 如何删除账户? + 不安全 + 匹配应用 + 匹配检测 + 主域名 + 按顶级和次级域匹配资源。 + + 通过主机名和端口 (如果指定) 匹配资源。 + 开始于 + 当检测到的资源开始于 URI 时匹配资源。 + 完全匹配 + 当检测到的资源与 URI 完全匹配时匹配资源。 + 正则表达式(Regex) + 通过正则表达式匹配资源(高级选项) + 从不 + 在自动填充项目搜索时忽略 URI。 + %1$s linked to the password + %1$s linked to the username + %1$s linked to the cardholder name + %1$s linked to the expiration month + %1$s linked to the expiration year + %1$s linked to the card code + %1$s linked to the card brand + %1$s linked to the card number + %1$s linked to the title + %1$s linked to the middle name + %1$s linked to the address line (1) + %1$s linked to the address line (2) + %1$s linked to the address line (3) + %1$s linked to the city + %1$s linked to the state + %1$s linked to the postal code + %1$s linked to the country + %1$s linked to the company + %1$s linked to the email + %1$s linked to the phone number + %1$s linked to the SSN + %1$s linked to the username + %1$s linked to the passport number + %1$s linked to the license number + %1$s linked to the first name + %1$s linked to the last name + %1$s linked to the full name + %1$s linked to an unknown field + 分享 + 已选择 %1$d + 复制 + 复制值 + 复制 URL + 复制 URI + 复制包名 + 复制密码 + 复制用户名 + 复制电子邮件 + 复制电话号码 + 复制护照号码 + 复制许可证号码 + 复制卡号 + 复制持卡人姓名 + 复制过期年份 + 复制过期月份 + 复制 CVV 安全码 + 复制动态密码 + 复制私钥 + 解锁 Keyguard + 打开 Keyguard + 一月 + 二月 + 三月 + 四月 + 五月 + 六月 + 七月 + 八月 + 九月 + 十月 + 十一月 + 十二月 + 上移 + 下移 + 移除 + 删除此项吗? + 添加更多 + FIDO2 WebAuthn + 验证 WebAuthn + 返回应用 + + 不可为空 + + 不可为空字符串 + 必须为自定义域 + 必须只包含 US-ASCII 字符 + 长度至少为 %1$d 字符 + 长度必须为 %1$d 字符 + 无效域名 + 无效的电子邮件 + 无效的 URL + 无效的 URI + 卡号无效 + 密码错误 + 生成 OTP 代码失败 + Failed to create a passkey + Failed to authorize a request + + 二维码 + 显示为二维码 + 通过扫描二维码将此验证器复制到另一个设备。 + + 日期选择器 + + 取色器 + + 如何删除账户? + 如何从网络服务中删除账户的信息集锦 + + 简单 + + 中等 + + 困难 + + 可用性限制 + + 不可用 + 发送电子邮件 + 搜索网站 + 无指令 + 双重验证 + List of websites with two-factor authentication support + Search websites + Passkeys + List of websites with passkeys support + Search websites + + 数据泄露 + 被泄露的账户数据可让恶意行为者获取敏感的个人和财务信息,从而可能导致身份盗用、财务欺诈和其他形式的网络犯罪。 + 未发现数据泄露 + 发现被泄露的账户 + 泄露 + 泄露于 %1$s + 报告于 %1$s + 无法检查数据泄露情况,互联网连接可能有误 + 数据泄露 + 在数据泄露事件中发现的密码,破解所需的时间要短得多,因此绝对不能使用。 + 密码已泄露 + 密码存在于已知的数据泄露中,请立即更改以保护你的网络安全 + 未发现数据泄露 + 无法检查数据泄露情况,互联网连接可能有误 + + 大号字体 + 以大号字体显示 + 以大号字体显示并锁定保险库 + 应用选择器 + 搜索已安装的应用… + 系统应用 + 无应用 + 选择文件夹 + 创建新文件夹 + + 此副本将归组织所有,你将不再是直接所有者。 + Email forwarders + Email forwarders + Delete email forwarder? + Delete email forwarders? + Email forwarder integration + No email forwarders + 创建加密保险库以存储本地数据。 + 应用专用密码 + 生物识别认证 + 创建一个保险库 + 发送崩溃报告 + 创建一个保险库 + 清除应用数据 + 关闭应用并清除所有本地应用数据 + 保险库已锁定,输入应用专用密码以继续。 + 解锁 + + 解锁保险库 + + 通过生物识别验证来解锁保险库 + User verification is required. Enter your app password to continue. + Verify + Sync status + Up to date + Pending + Syncing + Sync failed + 新项目 + 编辑项目 + 包括 %1$s%2$s 等样式的文本。支持有限的 Markdown 语法。 + 斜体 + 粗体 + 渲染预览 + 再次验证提示 + 当您查看或自动填充密码时要求再次验证 + 添加 Bitwarden 帐户 + 我们与 Bitwarden, Inc. 其任何子公司或附属机构均无隶属、关联、授权、许可关系,或任何形式的官方联系。 + + 要在非官方 Bitwarden 客户端上通过验证码,您必须指定客户端密钥。要找到它,请访问 Web vault / Settings / API Key。 + + 客户端密钥 + 登录 + 选择区域 + 美国 + 欧洲 + 自定义(自托管) + HTTP 标头 + HTTP 标头 + 您可以添加自定义 HTTP 标头,这些标头将随每次请求同时发送到服务器。 + 密钥 + + 添加更多 + 服务器 URL + 指定自托管 Bitwarden 安装的基本 URL(Base URL) + 自定义环境 + 您可以单独指定每个服务的基本 URL。 + Web 保险库的服务器 URL + API 服务器 URL + 图标服务器 URL + 身份验证器 URL + 验证 + 此认证方法尚未被支持。 + 请输入您的身份验证器应用中的 6 位验证码(OTP) + 输入发送给 %1$s 的验证码。 + 手动输入 YubiKey 验证码,将光标放在下方输入框并按下 YubiKey 的按钮。 + 身份验证器 + Duo(组织) + FIDO2 Web 身份验证 + 电子邮件 + FIDO U2F + 通过 USB 连接 YubiKey + 需要 USB OTG 支持。 + 现在按下 YubiKey 上的金色按钮。 + 将您的 YubiKey 平放在设备背部的 NFC 区域 + 需要 NFC 支持。 + 读取 YubiKey 失败 + 使用 FIDO2 WebAuthn 需要使用 Bitwarden Web 保险库 %1$s 或更高版本。在旧版本上,验证结果将错误地转发到 Bitwarden 官方应用程序。 + 确认访问 + 数据已被加密,请输入您的应用专用密码。 + + 确认访问 + + 使用生物识别验证来确认您的访问权限并解锁这些数据。 + 保险库 + Send + 生成器 + 概况 + 设置 + 超时锁定 + 文本 + 文件 + 登录 + 卡片 + 身份证 + 备注 + 密钥 + 文本 + 布尔值 + 已链接 + + 已泄露 + 相当安全 + 比较安全 + 安全 + 一般 + 不安全 + 相当安全的密码 + 相当安全的密码 + 安全的密码 + 一般安全的密码 + 不安全的密码 + 过滤器 + 没有可用的筛选条件 + 排序方式 + 没有可用的排序方式 + 标题 + 按字母排序 + 按字母反向排序 + 访问次数 + 先大后小 + 先小后大 + 修改日期 + 从新到旧 + 从旧到新 + 过期时间 + 从新到旧 + 从旧到新 + 删除时间 + 从新到旧 + 从旧到新 + 密码 + 按字母排序 + 按字母反向排序 + 密码修改日期 + 从新到旧 + 从旧到新 + 密码强度 + 不安全的靠前 + 安全的靠前 + 搜索保险库 + 新项目 + There are no suggested items available for this context + + 安全码(CVV) + 保存到 %1$s %2$s + 密码最后修改于 %1$s + Passkey created at %1$s + 最后修改于 %1$s + 创建于 %1$s + 删除于 %1$s + 过期于 %1$s + %1$s 过期 + %1$s 删除 + + 呼叫 + + 文本 + + 电子邮件 + + 导航 + Sends + 搜索 Sends + 新项目 + 需要密码以访问此共享 + 生成器 + 用户名生成器 + 密码生成器 + Generate + 重新生成 + 密码短语 + 随机口令是可记忆性和安全性的最佳组合。 + 分隔符 + 首字母大写 + 数字 + Username + Delimiter + Custom word + Capitalize + Number + 随机密码 + 安全的密码长度至少为 %1$d 字符(包含大写、小写字母、数字和符号) + 位数 + 符号 + 大写字母 + 小写字母 + + 排除易混淆的符号 + + 排除不明确的符号 + Catch-all 电子邮件 + Catch-all 电子邮件地址可让用户选择接收发送到其域名的所有邮件,即使这些邮件是发送到未为其域名设置的电子邮件地址。使用前请确保您的电子邮件主机支持此功能。 + + 域名 + 附加地址电子邮件 + 附加地址意味着任何发送到 %1$s 的电子邮件仍会发送到您的账户。这意味着您的电子邮件地址可以有很多变化,可以发送给不同的人、网站或邮件列表。使用前请确保您的电子邮件主机支持此功能。 + 电子邮件 + 子域电子邮件 + 子域意味着任何发送到 %1$s 的电子邮件仍会发送到您的账户。这意味着您的电子邮件地址可以有很多变化,可以发送给不同的人、网站或邮件列表。使用前请确保您的电子邮件主机支持此功能。 + 电子邮件 + 转发的电子邮件别名 + 使用此密码新建项目 + 使用此用户名新建项目 + 生成密码历史记录 + 显示提示 + 生成器历史记录 + 清除历史记录 + 清除生成器历史记录? + 这将从历史记录中删除所有项目。 + 密码历史 + 清除历史记录 + 清除密码历史记录? + 这将从历史记录中删除所有密码。 + 概况 + 密码强度 + 安全性 + 可维护 + 泄露的密码 + 密码存在于已知的数据泄露事件中,应立即更改此密码。 + 重复使用的密码 + 不要在多个网站上使用相同的密码,生成唯一的密码来提高安全性。 + 安全性低的账户 + 自您上次修改密码以来受数据泄露影响的站点,更改您的密码以保证账户安全。 + 不安全的网站 + 更改 HTTP 为 HTTPS 协议,因为后者更为安全 + 启用双重验证 + 站点可用 2FA,但您没有启用它 + 可用通行密钥 + 可用通行密钥但并未启用的站点,通行密钥比密码更简单和安全。 + 不完整的项目 + 帮助您识别保险库中丢失或不完整的数据,可能是没有名字或没有用户名的项目。 + 过期项目 + 已过期或即将到期的项目。 + Duplicate URIs + Items that have one or more URIs that cover the same websites after applying the match detection. + 回收站中的项目 + 已移入回收站的项目,回收站中的物品过多可能会减慢保险库的运行速度。 + 空文件夹 + 没有项目的文件夹。 + 重复项目 + 帮助您寻找并删除保险库中的重复项目。 + 被盗账户 + 使用用户名或电子邮件地址检查数据泄露情况。 + 更改应用专用密码 + 修改密码 + 生物识别认证 + + 更改应用专用密码 + 应用专用密码不会存储在设备上,更不会上传到服务器。它仅用于生成密钥以加密本地数据。 + 除非你怀疑有未经授权的访问或在设备上发现了恶意软件,否则如果密码强大且唯一则没有必要更改。 + 联系我们 + 您的留言 + 使用英语来确保您的反馈不会被误解。 + 我们感谢您花时间给我们发送信息。您的信息会直接发送给我们,我们会利用它来排除故障、改进产品和解决问题。虽然我们可能不会回复每一条报告,但我们会审查并改进产品并尽快解决问题。 + 帐户 + 添加账户 + 开发团队 + 我是来自乌克兰的软件工程师,专门负责应用的设计和开发。 + 关注我 + 搜索 + 设置 + 在设置中搜索 + 界面外观 + 自动填充 + 开发者 + 实验性功能 + 设置 + 通知 + 其它 + 权限 + 安全 + Keyguard 大会员 + 概况 + 开放源代码许可 + 帐户 + 添加和预览账户 + 自动填充 + Android 自动填充服务 + 安全性 + 生物识别、修改密码、保险库超时时间 + Keyguard 大会员 + 解锁功能并支持后续开发 + 概况 + 泄露的和不安全的密码 + 通知 + 警报 + 界面外观 + 语言、主题和动画 + 开发者 + 开发测试设置 + 其它 + 社区网站、应用信息 + 在导航按钮上显示标签 + 应用版本 + 应用构建日期 + 开发团队 + Reddit 社区 + GitHub 项目 + Crowdin 项目 + 开放源代码许可 + 下载 APK 文件 + 加载应用图标 + 加载网站图标 + 获取网站图标时可能会向运营商泄露网站地址 + 富文本格式 + 使用 Markdown 格式化备注 + 语言 + 建议翻译 + 字体 + 在 Play 商店评价 + 主题颜色 + 主题 + 使用纯黑主题(OLED屏模式) + 在外部浏览器中打开链接 + 隐藏字段 + 隐藏敏感信息,例如密码和信用卡号码 + + 程序崩溃 + Credential provider + Passkeys, passwords and data services + Privacy policy + 联系我们 + 实验性功能 + 更改应用专用密码 + 请求应用专用密码 + 除了常规的安全设置外,您的应用专用密码将在这段时间后或生物识别设置更改时被请求键入 + 立即加锁 + 从不 + 发送崩溃报告 + 过渡动画 + Erase app data + Close the app and erase all local app data + 允许截图 + 在最近任务和截图中允许显示应用内容 + 在最近任务和截图中隐藏应用内容 + 数据安全 + 锁定保险库 + 重启后锁定 + 设备重启后锁定保险库 + 屏幕关闭时锁定 + 屏幕关闭几秒后锁定保险库 + 锁定延迟 + 立即加锁 + 从不 + 将保险库密钥保存在磁盘上 + 保险库密钥保存在内部存储器中 + 保险库将在后台被杀后锁定 + 在磁盘上存储保险库密钥存在安全风险。如果设备的内部存储被入侵,攻击者就能访问本地保险库数据。 + 权限 + 功能概述 + 生物识别解锁 + + 生物识别解锁 + 查看项目时保持屏幕开启 + 自动填充服务 + 使用 Android 自动填充框架帮助将登录信息填写到设备上的其他应用 + 自动复制一次性密码 + 填充登录信息时,自动复制一次性密码 + 填充建议 + 在支持的键盘中嵌入填充建议 + 手动选择 + 显示手动搜索密码库的选项 + 尊重自动填充禁用标识 + 禁用存在禁止自动填充标签的浏览器字段 + 请注意,有些网站会禁用密码字段的自动填写功能,有些浏览器也会忽略禁用自动填写功能的标记。 + 请求保存数据 + 填写表单时询问是否更新保险库 + 自动保存应用或网站信息 + 自动清除剪贴板 + 立即清除 + 从不 + 一次性密码通知持续时间 + 自动填充具有一次性密码的登录项目时,会弹出带有验证码的通知,持续时间至少为所定义的持续时间 + 从不 + 关于 Keyguard 大会员权益 + 大会员可解锁额外功能,并提供更多的钱钱以支持开发。感谢您对我们的支持!❤️ + 订阅 + 产品 + 无法加载订阅列表 + 无法加载产品列表 + 活动 + 将不续订 + 在 Play 商店管理 + 发送通知 + 用于发布下载通知 + 摄像头 + 用于扫描 QR 码 + 横屏下启用双面板布局 + 竖屏下启用双面板布局 + 暗色模式 + 亮色模式 + 已禁用 + 动态模式 + 淡入淡出 + 专为弱视群体开发,以提高易读性和理解力 + 功能概述 + Keyguard 大会员 + 多个帐户 + 同时登录到多个账户。 + 双向同步 + 添加或编辑项目并同步更改。 + 离线编辑 + 在离线状态下新建/编辑项目 + 搜索 + 全局搜索 + 姓名、电子邮件、密码、电话号码等。 + 过滤器 + 按文件夹、组织、类型等筛选 + 多关键词 + 搜索 “bitw test” 以找到 “Bitwarden Test Account” 项目 + 概况 + 泄露的密码 + 查找在已知的数据泄露事件中泄露的项目。 + 密码强度 + 检索弱密码 + 重复密码 + 检索重复密码 + 未启用 2FA + 查找可用 TOTP 二步验证的项目 + 不安全的网站 + 查找使用 HTTP 协议的网站,自动修改为 HTTPS + 不完整的项目 + 查找可能需要更新的不完整项目 + 过期项目 + 查找过期或即将过期的项目 + 重复项目 + 查找并合并重复项目 + 杂项 + 多选 + 快速合并和重置密码 + 显示为二维码 + 将文本编码为不同的二维码 + 生成器 + 生成密码或用户名 + 数据安全 + 本地数据 + 本地数据包括下载文件、用户设置和保险库。它们存储在设备的内部存储器中,只能由 Android 系统或 Keyguard 应用访问。 + 下载 + 用户设置 + 用户设置使用设备密钥加密。 + 用户设置 + 保险库使用密钥加密,密钥来自应用专用密码,使用步骤如下: + 然后将盐和哈希值保存在本地设备上,以便日后生成主密钥来解锁保险库。 + 解锁保险库意味着在设备的内存中存储正确的密钥,从而获得读取和修改加密保险库的能力。 + 远程路径 + 远程数据以零知识加密方式存储在 Bitwarden 服务器上。 + diff --git a/common/src/commonMain/resources/MR/zh-rTW/plurals.xml b/common/src/commonMain/resources/MR/zh-rTW/plurals.xml new file mode 100644 index 00000000..5f2db8ad --- /dev/null +++ b/common/src/commonMain/resources/MR/zh-rTW/plurals.xml @@ -0,0 +1,2 @@ + + diff --git a/common/src/commonMain/resources/MR/zh-rTW/strings.xml b/common/src/commonMain/resources/MR/zh-rTW/strings.xml new file mode 100644 index 00000000..214f4486 --- /dev/null +++ b/common/src/commonMain/resources/MR/zh-rTW/strings.xml @@ -0,0 +1,868 @@ + + + OK + Close + Yes + No + + Name + Account name + Username + Password + App password + Current password + New password + Email + Verified + Not verified + Email visibility + Public URL + URL + + Access count + Learn more + Phone number + Passport number + License number + Card number + No card number + Brand + Security code + Valid from + Valid to + Card expiry month + Card expiry year + Cardholder name + Valid from + Expiry date + Company + Sync + + Hidden + + Visible + + Empty + + SSN + City + State + Info + Cancel + Continue + Country + Address + Postal code + Pull to search + Save + URI + URIs + Note + Notes + Attachments + No attachments + Expiring soon + Incomplete data + This item is missing some of the important information. + Item + Items + %1$s items + All items + No items + No folder + New folder + Folder + Folders + No folders + No collection + Collection + Collections + No collections + My vault + Organization + Organizations + No organizations + Miscellaneous + Add integration + Account + Accounts + No accounts + No account + Type + Options + Send + Reset + Length + Security + Contact info + Title + First name + Middle name + Last name + Full name + Address line 1 + Address line 2 + Address line 3 + Rename + Select type + Autofill + Passkey + Create a passkey + Unlock Keyguard + Confirming auth request… + Passkeys + + Signature counter + + Relying party + + Discoverable + Username + Display name + API key + Domain + Edit + Delete + Remove + Remove from the history + Reused password + Reused passwords + One-time password + Authenticator key + Use + Save passkey + Passkey available + Two-factor authentication available + Custom + Follow system settings + + Coming soon + Powered by + Verification code + Re-send verification code + Requested a verification email + Web vault + Launch Web vault + + Remember me + + Trash + + Download + Downloads + No downloads + No duplicates + Encryption + + Key + Hash + Salt + 256-bit AES + Random %1$d-bits of data + None + Text + Linked apps + Linked URIs + Custom fields + Reveal a secure note + Hide a secure note + Master password hint + Fingerprint phrase + What is a fingerprint? + Bitwarden premium + Unofficial Bitwarden server + Last synced at %1$s + Change name + Change color + Change master password hint + Sign out + Sign in + Visit Web vault to verify your email address + Upgrade your account to a premium membership and unlock some great additional features + Two-factor authentication + Require login verification with another device such as a security key, authenticator app, SMS or email + Active + Items + Log out + Log out? + All of the not synchronized changes will be lost! + Change name + Change names + Delete folder? + Delete folders? + This item(s) will be deleted immediately. You can not undo this action. + Recently opened + Often opened + View details + Save to + Add to favourites + Remove from favourites + Enable auth re-prompt + Disable auth re-prompt + Edit + Merge into… + Copy to… + Move to folder + Change name + Change names + Add password + Add passwords + Change password + Change passwords + View password history + Trash + Restore + Delete forever + Move associated items to trash + Open with… + Send with… + Open in a file manager + Delete local file + View parent item + Always show keyboard + Sync vault + Lock vault + Rename folder + Check the email in known data breaches + Check the username in known data breaches + Check the password in known data breaches + Check the website in known data breaches + Launch app + Launch website + Launch docs + Launch browser + Launch main page + Launch Play store + Launch with %1$s + Launch with… + How to delete an account? + Unsecure + Match app + Match detection + Base domain + Match resources by top-level and second-level domain. + Host + Match resources by hostname and (if specified) port. + Starts with + Match resources when the detected resource starts with the URI. + Exact + Match resources when the detected resource exactly matches the URI. + Regular expression + Match resources by regular expression. Advanced option. + Never + Ignore URI during auto-fill item search. + %1$s linked to the password + %1$s linked to the username + %1$s linked to the cardholder name + %1$s linked to the expiration month + %1$s linked to the expiration year + %1$s linked to the card code + %1$s linked to the card brand + %1$s linked to the card number + %1$s linked to the title + %1$s linked to the middle name + %1$s linked to the address line (1) + %1$s linked to the address line (2) + %1$s linked to the address line (3) + %1$s linked to the city + %1$s linked to the state + %1$s linked to the postal code + %1$s linked to the country + %1$s linked to the company + %1$s linked to the email + %1$s linked to the phone number + %1$s linked to the SSN + %1$s linked to the username + %1$s linked to the passport number + %1$s linked to the license number + %1$s linked to the first name + %1$s linked to the last name + %1$s linked to the full name + %1$s linked to an unknown field + Share with… + %1$d selected + Copy + Copy value + Copy URL + Copy URI + Copy package name + Copy password + Copy username + Copy email + Copy phone number + Copy passport number + Copy license number + Copy card number + Copy cardholder name + Copy expiration year + Copy expiration month + Copy CVV code + Copy one-time password + Copy secret key + Unlock Keyguard + Open Keyguard + January + February + March + April + May + June + July + August + September + October + November + December + Move up + Move down + Remove + Remove an item? + Add more + FIDO2 WebAuthn + Authenticate WebAuthn + Return to app + + Must not be empty + + Must not be blank + Must be custom domain + Must contain only US-ASCII characters + Must be at least %1$d symbols long + Must be %1$d symbols long + Invalid domain + Invalid email + Invalid URL + Invalid URI + Invalid card number + Incorrect password + Failed to generate OTP code + Failed to create a passkey + Failed to authorize a request + + Barcode + Show as Barcode + Copy this authenticator to another device by scanning the QR code. + + Date picker + + Color picker + + How to delete an account? + A collection of info of how to delete your account from web services + + Easy + + Medium + + Hard + + Limited availability + + Impossible + Send email + Search websites + No instructions + Two-factor authentication + List of websites with two-factor authentication support + Search websites + Passkeys + List of websites with passkeys support + Search websites + + Data breach + Breached account data can provide malicious actors with access to sensitive personal and financial information, potentially leading to identity theft, financial fraud, and other forms of cybercrime. + No breaches found + Breached accounts found + Breaches + Occurred on %1$s + Reported on %1$s + Failed to check data breaches. You might currently be offline + Data breach + A password that is found in the data breaches takes significantly less time to break and should never be used. + Password is compromised + The password has been identified in known data breaches. Please change it immediately to protect your online security + No breaches found + Failed to check data breaches. You might currently be offline + + Large Type + Show in Large Type + Show in Large Type and Lock vault + App Picker + Search installed apps + System app + No apps + Choose a folder + Create a new folder: + + This organization will have an ownership of the copy. You will not be the direct owner. + Email forwarders + Email forwarders + Delete email forwarder? + Delete email forwarders? + Email forwarder integration + No email forwarders + Create an encrypted vault where the local data will be stored. + App password + Biometric authentication + Create a vault + Send crash reports + Create a vault + Erase app data + Close the app and erase all local app data + The vault is locked. Enter your app password to continue. + Unlock + + Unlock a vault + + Use biometric authentication to unlock the vault. + User verification is required. Enter your app password to continue. + Verify + Sync status + Up to date + Pending + Syncing + Sync failed + New item + Edit item + Style text with %1$s or %2$s and more. Limited Markdown syntax is supported. + italic + bold + Render preview + Auth re-prompt + Ask to authenticate again when you view or autofill a cipher + Add Bitwarden account + We are not affiliated, associated, authorized, endorsed by, or in any way officially connected with the Bitwarden, Inc., or any of its subsidiaries or its affiliates. + + To pass the captcha verification on an unofficial Bitwarden client, you must specify the client secret. To find it, visit Web vault / Settings / API Key. + + Client secret + Sign in + Region + United States + Europe + Custom (self-hosted) + HTTP headers + HTTP header + You can add custom HTTP headers that will be sent with every request to the server. + Key + Value + Add more + Server URL + Specify the base URL of your self-hosted Bitwarden installation. + Custom environment + You can specify the base URL of each service independently. + Web Vault Server URL + API Server URL + Icons Server URL + Identity Server URL + Verification + This authentication method is not supported yet. + Enter the verification code from your authenticator app. + Enter the verification code that was emailed to %1$s. + Enter the YubiKey authentication code manually. Place the cursor on the field below and trigger the YubiKey. + Authenticator + Duo (Organization) + FIDO2 Web Authentication + Email + FIDO U2F + Connect YubiKey via USB + Requires USB OTG support. + Touch the gold sensor on your YubiKey now. + Hold your YubiKey flat against the back of your device + Requires NFC support. + Failed to read YubiKey + Using FIDO2 WebAuthn requires using the Bitwarden Web vault version %1$s or higher. On older versions the authentication result will incorrectly be forwarded to the official Bitwarden app. + Confirm access + This data is protected, to continue please enter your app password. + + Confirm access + + Use biometric authentication to confirm your access and unlock this data. + Vault + Send + Generator + Watchtower + Settings + Locked due to inactivity + Text + File + Login + Card + Identity + Note + Passkey + Text + Boolean + Linked + + Pwned + Very strong + Strong + Good + Fair + Weak + Very strong passwords + Strong passwords + Good passwords + Fair passwords + Weak passwords + Filter + No filters available + Sort by + No sorting available + Title + Alphabetically + Reverse Alphabetically + Access count + Largest First + Smallest First + Modification date + Newest First + Oldest First + Expiration date + Newest First + Oldest First + Deletion date + Newest First + Oldest First + Password + Alphabetically + Reverse Alphabetically + Password modification date + Newest First + Oldest First + Password strength + Weakest First + Strongest First + Search vault + New item + There are no suggested items available for this context + + Security code + Saved to %1$s at %2$s + Password last modified at %1$s + Passkey created at %1$s + Last modified at %1$s + Created at %1$s + Deleted at %1$s + Expired at %1$s + Expiration scheduled at %1$s + Deleting scheduled at %1$s + + Call + + Text + + Email + + Directions + Sends + Search sends + New item + A password is required to access this share + Generator + Username generator + Password generator + Generate + Regenerate + Passphrase + Random passphrases provide the best combination of memorability and security. + Delimiter + Capitalize + Number + Username + Delimiter + Custom word + Capitalize + Number + Random symbols + A strong password has at least %1$d characters, uppercase & lowercase letters, digits and symbols. + Digits + Symbols + Uppercase letters + Lowercase letters + + Exclude similar symbols + + Exclude ambiguous symbols + Catch-all email + A catch-all email address provides users the option to receive all mail sent to their domain, even if they are sent to an email address that has not been set up for their domain. Ensure that your email hosting supports this feature before using it. + + Domain + Plus addressing email + Plus addressing means any email sent to %1$s is still sent to your account. This means you can have a lot of variations on your email address to give out to different people, sites, or mailing lists. Ensure that your email hosting supports this feature before using it. + Email + Subdomain addressing email + Subdomain addressing means any email sent to %1$s is still sent to your account. This means you can have a lot of variations on your email address to give out to different people, sites, or mailing lists. Ensure that your email hosting supports this feature before using it. + Email + Forwarded email alias + Create new login with the password + Create new login with the username + Password history + Show tips + Generator history + Clear history + Clear generator history? + This will remove all items from the history. + Password history + Clear history + Clear password history? + This will remove all passwords from the history. + Watchtower + Password strength + Security + Maintenance + Pwned Passwords + Passwords that have been exposed in data breaches. Such passwords should be changed immediately. + Reused Passwords + Don\'t use the same password on multiple websites. Generate unique passwords to improve security. + Vulnerable Accounts + Sites that were affected by a data breach since you last changed a password. Change your password to keep your account safe. + Unsecure Websites + Change the URLs that use HTTP protocol to use HTTPS protocol, as the latter utilizes the most advanced encryption available. + Inactive two-factor authentication + Sites that have two-factor authentication available but you haven\'t set it up yet. + Available Passkeys + Sites that have passkey available but you haven\'t set it up yet. It\'s simpler and more secure then a password. + Incomplete Items + Helps you identify missing or incomplete data in your vault. This can refer to identities with missing names or logins without usernames. + Expiring Items + Items that have expired or are expiring soon. + Duplicate URIs + Items that have one or more URIs that cover the same websites after applying the match detection. + Trashed Items + Items that have been moved into the trash. Having too many items in the trash may slow down operations with your vault. + Empty Folders + Folders that do not have any items in them. + Duplicate Items + Helps you identify and eliminate duplicate items in your vault. + Compromised Accounts + Check data breaches by a username or email address. + Change app password + Change password + Biometric authentication + + Change app password + App password never gets stored on the device nor sent over the network. It is used to generate a secret key that is used to encrypt the local data. + Unless you suspect unauthorized access or discover a malware on the device, there is no need to change the password if it is a strong, unique password. + Contact us + Your message + Use English to ensure that your feedback doesn\'t get misunderstood. + We appreciate the time that you spend sending us a message. Your message goes directly to us and we use it to troubleshoot issues, make product improvements and fix problems. While we may not reply to every report, we\'re reviewing and working on improvements & fixing issues as fast as we can. + Accounts + Add account + Team behind the app + I\'m a Software engineer from Ukraine. I specialize on app design and development. + Follow me + Search + Settings + Search settings + Appearance + Autofill + Development + Experimental + Settings + Notifications + Other + Permissions + Security + Keyguard Premium + Watchtower + Open-source licenses + Accounts + Add & view accounts + Autofill + Android Autofill & Credential services + Security + Biometrics, change password, vault timeout + Keyguard Premium + Unlock features & support app development + Watchtower + Compromised services, vulnerable passwords + Notifications + Alerts + Appearance + Language, theme and animations + Development + Test settings for development + Other + Community websites, app info + Show labels on navigation buttons + App version + App build date + Team behind the app + Reddit community + GitHub project + Crowdin project + Open-source licenses + Download APK file + Load App icons + Load Website icons + Queuing website icon might leak the website address to internet provider + Rich text formatting + Use Markdown to format notes + Language + Suggest translation + Font + Rate on Play Store + Tint color + Theme + Use contrast black theme + Open links in external browser + Conceal fields + Conceal sensitive info, such as passwords and credit card numbers + + Crash + Credential provider + Passkeys, passwords and data services + Privacy policy + Contact us + Experimental + Change app password + Require app password + In addition to your regular security settings, your app password will be required after this time or when biometry settings are changed + Immediately + Never + Send crash reports + Transition animation + Erase app data + Close the app and erase all local app data + Allow screenshots + Show the content of the app when switching between recent apps and allow capturing a screen + Hide the content of the app when switching between recent apps and forbid capturing a screen + Data safety + Lock vault + Lock after a reboot + Lock the vault after a device reboot + Lock when screen turns off + Lock the vault after a few seconds once the screen is off + Lock after a delay + Immediately + Never + Persist vault key on a disk + Vault key is persisted on an internal storage + Vault is locked after the app is unloaded from the memory + Storing a vault key on a disk is a security risk. If the device\'s internal storage is compromised, the attacker will gain access to the local vault data. + Permissions + Features overview + Biometric unlock + + Biometric unlock + Keep the screen on while viewing items + Autofill service + Use the Android Autofill Framework to assist in filling login information into other apps on the device + Auto-copy one-time passwords + When filling a login information, automatically copy one-time passwords + Inline suggestions + Embeds autofill suggestions directly into compatible keyboards + Manual selection + Displays an option to manually search a vault for an entry + Respect Autofill disabled flag + Disables autofill for a browser field that has autofill disabled flag set + Note that some websites are notorious for disabling autofill for a password field as well as some browsers are notorious for ignoring the autofill disabled flag + Ask to save data + Asks for updating the vault when filling of a form has completed + Auto-save app or website info + Automatically clear clipboard + Immediately + Never + One-time password notification duration + When you autofill a login item that has a one-time password, the notification with verification code will popup for at least the defined duration + Never + About Keyguard membership + The Premium unlocks extra features and funds a development of the app. Thank you for supporting us! ❤️ + Subscriptions + Products + Failed to load a list of subscriptions + Failed to load a list of products + Active + Will not renew + Manage on Play Store + Post notifications + Used to post downloading notifications + Camera + Used to scan QR codes + Allow two panel layout in landscape mode + Allow two panel layout in portrait mode + Dark + Light + Disabled + Dynamic + Crossfade + Developed specifically to increase legibility for readers with low vision, and to improve comprehension + Features Overview + Keyguard Premium + Multiple Accounts + Sign-in to multiple accounts simultaneously. + Two-way sync + Add or edit items and sync the changes back. + Offline editing + Add or edit items without internet connection. + Search + Search by anything + Name, email, password, phone number etc. + Filter + Filter by folder, organization, type etc. + Multiple keywords + Search by \'bitw test\' to find your \'Bitwarden Test Account\' item. + Watchtower + Pwned passwords + Find items with exposed in data breaches passwords. + Password strength + Find items with weak passwords. + Reused passwords + Find items with reused passwords. + Inactive 2FA + Find logins with available TOTP two-factor authentication. + Unsecure websites + Find websites that use HTTP protocol, auto-fix to HTTPS. + Incomplete items + Find empty items that might need updates. + Expiring items + Find expired or soon to be expired items. + Duplicate items + Find and merge duplicate items. + Misc + Multi-selection + Merge ciphers, fasten the refactoring with batch operations. + Show as Barcode + Encode a text as different barcodes. + Generator + Generate passwords or usernames. + Data safety + Local data + Local data consists of Downloads, User settings, Vault. They are stored in the internal storage of a device, which can only be accessed by the Android system or the Keyguard. + Downloads + User settings + The User settings are encrypted using a device-specific key. + Vault + The Vault is encrypted using a Key, derived from the App password using following steps: + The Salt and the Hash is then stored locally on a device, to later generate a master key to unlock the vault. + Unlocking a Vault means storing a correct Key in a device\'s RAM, gaining an ability to read and modify encrypted Vault. + Remote data + Remote data is stored on Bitwarden servers with zero-knowledge encryption. + diff --git a/common/src/commonMain/sqldelight/com/artemchep/keyguard/data/CipherUsageHistory.sq b/common/src/commonMain/sqldelight/com/artemchep/keyguard/data/CipherUsageHistory.sq new file mode 100644 index 00000000..55a2641a --- /dev/null +++ b/common/src/commonMain/sqldelight/com/artemchep/keyguard/data/CipherUsageHistory.sq @@ -0,0 +1,67 @@ +import kotlinx.datetime.Instant; + +CREATE TABLE cipherUsageHistory ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + cipherId TEXT NOT NULL, + type INTEGER NOT NULL, + createdAt INTEGER AS Instant NOT NULL, + credentialId TEXT, + FOREIGN KEY (cipherId) REFERENCES cipher(cipherId) ON DELETE CASCADE +); + +insert: +INSERT INTO cipherUsageHistory(cipherId, credentialId, type, createdAt) +VALUES (?, ?, ?, ?); + +get: +SELECT * +FROM cipherUsageHistory +ORDER BY createdAt DESC +LIMIT :limit; + +getUsedPasskeyById: +SELECT * +FROM cipherUsageHistory +WHERE + type = 2 AND + cipherId = :cipherId AND + credentialId = :credentialId +ORDER BY createdAt DESC +LIMIT :limit; + +getDistinctRecent: +SELECT + id, + cipherId, + type, + max(createdAt) AS createdAt +FROM cipherUsageHistory +GROUP BY + cipherId +ORDER BY cipherUsageHistory.createdAt DESC +LIMIT :limit; + +getDistinctPopular: +SELECT + id, + cipherId, + type, + createdAt, + COUNT(*) AS count +FROM cipherUsageHistory +GROUP BY + cipherId +ORDER BY count DESC +LIMIT :limit; + +getCount: +SELECT + COUNT(*) AS count +FROM cipherUsageHistory; + +deleteAll: +DELETE FROM cipherUsageHistory; + +deleteByIds: +DELETE FROM cipherUsageHistory +WHERE id IN ?; diff --git a/common/src/commonMain/sqldelight/com/artemchep/keyguard/data/GeneratorEmailRelay.sq b/common/src/commonMain/sqldelight/com/artemchep/keyguard/data/GeneratorEmailRelay.sq new file mode 100644 index 00000000..10f89a69 --- /dev/null +++ b/common/src/commonMain/sqldelight/com/artemchep/keyguard/data/GeneratorEmailRelay.sq @@ -0,0 +1,38 @@ +import kotlinx.datetime.Instant; + +CREATE TABLE generatorEmailRelay ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + name TEXT NOT NULL, + type TEXT NOT NULL, + data TEXT NOT NULL, + createdAt INTEGER AS Instant NOT NULL +); + +update { + UPDATE generatorEmailRelay + SET + name = :name, + type = :type, + data = :data, + createdAt = :createdAt + WHERE + id = :id; +} + +insert { + INSERT OR IGNORE INTO generatorEmailRelay(name, type, data, createdAt) + VALUES (:name, :type, :data, :createdAt); +} + +get: +SELECT * +FROM generatorEmailRelay +ORDER BY createdAt DESC +LIMIT :limit; + +deleteAll: +DELETE FROM generatorEmailRelay; + +deleteByIds: +DELETE FROM generatorEmailRelay +WHERE id IN (:ids); diff --git a/common/src/commonMain/sqldelight/com/artemchep/keyguard/data/GeneratorHistory.sq b/common/src/commonMain/sqldelight/com/artemchep/keyguard/data/GeneratorHistory.sq new file mode 100644 index 00000000..e294ae20 --- /dev/null +++ b/common/src/commonMain/sqldelight/com/artemchep/keyguard/data/GeneratorHistory.sq @@ -0,0 +1,28 @@ +import kotlinx.datetime.Instant; +import kotlin.Boolean; + +CREATE TABLE generatorHistory ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + value TEXT NOT NULL, + createdAt INTEGER AS Instant NOT NULL, + isPassword INTEGER AS Boolean NOT NULL, + isUsername INTEGER AS Boolean NOT NULL, + isEmailRelay INTEGER AS Boolean +); + +insert: +INSERT INTO generatorHistory(value, createdAt, isPassword, isUsername, isEmailRelay) +VALUES (?, ?, ?,?, ?); + +get: +SELECT * +FROM generatorHistory +ORDER BY createdAt DESC +LIMIT :limit; + +deleteAll: +DELETE FROM generatorHistory; + +deleteByIds: +DELETE FROM generatorHistory +WHERE id IN (:ids); diff --git a/common/src/commonMain/sqldelight/com/artemchep/keyguard/data/bitwarden/Account.sq b/common/src/commonMain/sqldelight/com/artemchep/keyguard/data/bitwarden/Account.sq new file mode 100644 index 00000000..e838e51f --- /dev/null +++ b/common/src/commonMain/sqldelight/com/artemchep/keyguard/data/bitwarden/Account.sq @@ -0,0 +1,39 @@ +import com.artemchep.keyguard.core.store.bitwarden.BitwardenToken; + +CREATE TABLE account ( + accountId TEXT NOT NULL PRIMARY KEY, + data TEXT AS BitwardenToken NOT NULL +); + +insert { + UPDATE account + SET + data = :data + WHERE + accountId = :accountId; + + INSERT OR IGNORE INTO account(accountId, data) + VALUES (:accountId, :data); +} + +get: +SELECT * +FROM account; + +getIds: +SELECT accountId +FROM account; + +getByAccountId: +SELECT * +FROM account +WHERE + accountId == :accountId; + +deleteAll: +DELETE FROM account; + +deleteByAccountId: +DELETE FROM account +WHERE + accountId == :accountId; diff --git a/common/src/commonMain/sqldelight/com/artemchep/keyguard/data/bitwarden/Cipher.sq b/common/src/commonMain/sqldelight/com/artemchep/keyguard/data/bitwarden/Cipher.sq new file mode 100644 index 00000000..241c17ec --- /dev/null +++ b/common/src/commonMain/sqldelight/com/artemchep/keyguard/data/bitwarden/Cipher.sq @@ -0,0 +1,61 @@ +import com.artemchep.keyguard.core.store.bitwarden.BitwardenCipher; + +CREATE TABLE cipher ( + cipherId TEXT NOT NULL PRIMARY KEY, + accountId TEXT NOT NULL, + folderId TEXT, + data TEXT AS BitwardenCipher NOT NULL, + FOREIGN KEY (accountId) REFERENCES account(accountId) ON DELETE CASCADE +); + +insert { + UPDATE cipher + SET + folderId = :folderId, + data = :data + WHERE + accountId = :accountId AND + cipherId = :cipherId; + + INSERT OR IGNORE INTO cipher(cipherId, accountId, folderId, data) + VALUES (:cipherId, :accountId, :folderId, :data); +} + +get: +SELECT * +FROM cipher; + +getIds: +SELECT cipherId +FROM cipher; + +getByCipherId: +SELECT * +FROM cipher +WHERE + cipherId == :cipherId; + +getByAccountId: +SELECT * +FROM cipher +WHERE + accountId == :accountId; + +getByFolderId: +SELECT * +FROM cipher +WHERE + folderId == :folderId; + +deleteAll: +DELETE FROM cipher; + +deleteByCipherId: +DELETE FROM cipher +WHERE + cipherId == :cipherId; + +deleteByAccountIds: +DELETE FROM cipher +WHERE + accountId IN :accountId; diff --git a/common/src/commonMain/sqldelight/com/artemchep/keyguard/data/bitwarden/Collection.sq b/common/src/commonMain/sqldelight/com/artemchep/keyguard/data/bitwarden/Collection.sq new file mode 100644 index 00000000..43f82877 --- /dev/null +++ b/common/src/commonMain/sqldelight/com/artemchep/keyguard/data/bitwarden/Collection.sq @@ -0,0 +1,53 @@ +import com.artemchep.keyguard.core.store.bitwarden.BitwardenCollection; + +CREATE TABLE collection ( + collectionId TEXT NOT NULL PRIMARY KEY, + accountId TEXT NOT NULL, + data TEXT AS BitwardenCollection NOT NULL, + FOREIGN KEY (accountId) REFERENCES account(accountId) ON DELETE CASCADE +); + +insert { + UPDATE collection + SET + data = :data + WHERE + accountId = :accountId AND + collectionId = :collectionId; + + INSERT OR IGNORE INTO collection(collectionId, accountId, data) + VALUES (:collectionId, :accountId, :data); +} + +get: +SELECT * +FROM collection; + +getIds: +SELECT collectionId +FROM collection; + +getByCollectionId: +SELECT * +FROM collection +WHERE + collectionId == :collectionId; + +getByAccountId: +SELECT * +FROM collection +WHERE + accountId == :accountId; + +deleteAll: +DELETE FROM collection; + +deleteByCollectionId: +DELETE FROM collection +WHERE + collectionId == :collectionId; + +deleteByAccountIds: +DELETE FROM collection +WHERE + accountId IN :accountId; diff --git a/common/src/commonMain/sqldelight/com/artemchep/keyguard/data/bitwarden/Folder.sq b/common/src/commonMain/sqldelight/com/artemchep/keyguard/data/bitwarden/Folder.sq new file mode 100644 index 00000000..319cb2da --- /dev/null +++ b/common/src/commonMain/sqldelight/com/artemchep/keyguard/data/bitwarden/Folder.sq @@ -0,0 +1,53 @@ +import com.artemchep.keyguard.core.store.bitwarden.BitwardenFolder; + +CREATE TABLE folder ( + folderId TEXT NOT NULL PRIMARY KEY, + accountId TEXT NOT NULL, + data TEXT AS BitwardenFolder NOT NULL, + FOREIGN KEY (accountId) REFERENCES account(accountId) ON DELETE CASCADE +); + +insert { + UPDATE folder + SET + data = :data + WHERE + accountId = :accountId AND + folderId = :folderId; + + INSERT OR IGNORE INTO folder(folderId, accountId, data) + VALUES (:folderId, :accountId, :data); +} + +get: +SELECT * +FROM folder; + +getIds: +SELECT folderId +FROM folder; + +getByFolderId: +SELECT * +FROM folder +WHERE + folderId == :folderId; + +getByAccountId: +SELECT * +FROM folder +WHERE + accountId == :accountId; + +deleteAll: +DELETE FROM folder; + +deleteByFolderId: +DELETE FROM folder +WHERE + folderId == :folderId; + +deleteByAccountId: +DELETE FROM folder +WHERE + accountId == :accountId; diff --git a/common/src/commonMain/sqldelight/com/artemchep/keyguard/data/bitwarden/Meta.sq b/common/src/commonMain/sqldelight/com/artemchep/keyguard/data/bitwarden/Meta.sq new file mode 100644 index 00000000..498ecf44 --- /dev/null +++ b/common/src/commonMain/sqldelight/com/artemchep/keyguard/data/bitwarden/Meta.sq @@ -0,0 +1,40 @@ +import com.artemchep.keyguard.core.store.bitwarden.BitwardenMeta; + +CREATE TABLE meta ( + accountId TEXT NOT NULL PRIMARY KEY, + data TEXT AS BitwardenMeta NOT NULL, + FOREIGN KEY (accountId) REFERENCES account(accountId) ON DELETE CASCADE +); + +insert { + UPDATE meta + SET + data = :data + WHERE + accountId = :accountId; + + INSERT OR IGNORE INTO meta(accountId, data) + VALUES (:accountId, :data); +} + +get: +SELECT * +FROM meta; + +getIds: +SELECT accountId +FROM meta; + +getByAccountId: +SELECT * +FROM meta +WHERE + accountId == :accountId; + +deleteAll: +DELETE FROM meta; + +deleteByAccountId: +DELETE FROM meta +WHERE + accountId == :accountId; diff --git a/common/src/commonMain/sqldelight/com/artemchep/keyguard/data/bitwarden/Organization.sq b/common/src/commonMain/sqldelight/com/artemchep/keyguard/data/bitwarden/Organization.sq new file mode 100644 index 00000000..75705450 --- /dev/null +++ b/common/src/commonMain/sqldelight/com/artemchep/keyguard/data/bitwarden/Organization.sq @@ -0,0 +1,53 @@ +import com.artemchep.keyguard.core.store.bitwarden.BitwardenOrganization; + +CREATE TABLE organization ( + organizationId TEXT NOT NULL PRIMARY KEY, + accountId TEXT NOT NULL, + data TEXT AS BitwardenOrganization NOT NULL, + FOREIGN KEY (accountId) REFERENCES account(accountId) ON DELETE CASCADE +); + +insert { + UPDATE organization + SET + data = :data + WHERE + accountId = :accountId AND + organizationId = :organizationId; + + INSERT OR IGNORE INTO organization(organizationId, accountId, data) + VALUES (:organizationId, :accountId, :data); +} + +get: +SELECT * +FROM organization; + +getIds: +SELECT organizationId +FROM organization; + +getByOrganizationId: +SELECT * +FROM organization +WHERE + organizationId == :organizationId; + +getByAccountId: +SELECT * +FROM organization +WHERE + accountId == :accountId; + +deleteAll: +DELETE FROM organization; + +deleteByOrganizationId: +DELETE FROM organization +WHERE + organizationId == :organizationId; + +deleteByAccountId: +DELETE FROM organization +WHERE + accountId == :accountId; diff --git a/common/src/commonMain/sqldelight/com/artemchep/keyguard/data/bitwarden/Profile.sq b/common/src/commonMain/sqldelight/com/artemchep/keyguard/data/bitwarden/Profile.sq new file mode 100644 index 00000000..0c4c1e1d --- /dev/null +++ b/common/src/commonMain/sqldelight/com/artemchep/keyguard/data/bitwarden/Profile.sq @@ -0,0 +1,53 @@ +import com.artemchep.keyguard.core.store.bitwarden.BitwardenProfile; + +CREATE TABLE profile ( + profileId TEXT NOT NULL PRIMARY KEY, + accountId TEXT NOT NULL, + data TEXT AS BitwardenProfile NOT NULL, + FOREIGN KEY (accountId) REFERENCES account(accountId) ON DELETE CASCADE +); + +insert { + UPDATE profile + SET + data = :data + WHERE + accountId = :accountId AND + profileId = :profileId; + + INSERT OR IGNORE INTO profile(profileId, accountId, data) + VALUES (:profileId, :accountId, :data); +} + +get: +SELECT * +FROM profile; + +getIds: +SELECT profileId +FROM profile; + +getByProfileId: +SELECT * +FROM profile +WHERE + profileId == :profileId; + +getByAccountId: +SELECT * +FROM profile +WHERE + accountId == :accountId; + +deleteAll: +DELETE FROM profile; + +deleteByProfileId: +DELETE FROM profile +WHERE + profileId == :profileId; + +deleteByAccountId: +DELETE FROM profile +WHERE + accountId == :accountId; diff --git a/common/src/commonMain/sqldelight/com/artemchep/keyguard/data/bitwarden/Send.sq b/common/src/commonMain/sqldelight/com/artemchep/keyguard/data/bitwarden/Send.sq new file mode 100644 index 00000000..def0b926 --- /dev/null +++ b/common/src/commonMain/sqldelight/com/artemchep/keyguard/data/bitwarden/Send.sq @@ -0,0 +1,53 @@ +import com.artemchep.keyguard.core.store.bitwarden.BitwardenSend; + +CREATE TABLE send ( + sendId TEXT NOT NULL PRIMARY KEY, + accountId TEXT NOT NULL, + data TEXT AS BitwardenSend NOT NULL, + FOREIGN KEY (accountId) REFERENCES account(accountId) ON DELETE CASCADE +); + +insert { + UPDATE send + SET + data = :data + WHERE + accountId = :accountId AND + sendId = :sendId; + + INSERT OR IGNORE INTO send(sendId, accountId, data) + VALUES (:sendId, :accountId, :data); +} + +get: +SELECT * +FROM send; + +getIds: +SELECT sendId +FROM send; + +getBySendId: +SELECT * +FROM send +WHERE + sendId == :sendId; + +getByAccountId: +SELECT * +FROM send +WHERE + accountId == :accountId; + +deleteAll: +DELETE FROM send; + +deleteBySendId: +DELETE FROM send +WHERE + sendId == :sendId; + +deleteByAccountIds: +DELETE FROM send +WHERE + accountId IN :accountId; diff --git a/common/src/commonMain/sqldelight/com/artemchep/keyguard/data/pwnage/AccountBreach.sq b/common/src/commonMain/sqldelight/com/artemchep/keyguard/data/pwnage/AccountBreach.sq new file mode 100644 index 00000000..326b96fd --- /dev/null +++ b/common/src/commonMain/sqldelight/com/artemchep/keyguard/data/pwnage/AccountBreach.sq @@ -0,0 +1,42 @@ +import kotlinx.datetime.Instant; +import com.artemchep.keyguard.provider.bitwarden.entity.HibpBreachGroup; + +CREATE TABLE accountBreach ( + username TEXT NOT NULL PRIMARY KEY, + count INTEGER NOT NULL, + updatedAt INTEGER AS Instant NOT NULL, + data TEXT AS HibpBreachGroup NOT NULL +); + +insert { + UPDATE accountBreach + SET + count = :count, + updatedAt = :updatedAt, + data = :data + WHERE + username = :username; + + INSERT OR IGNORE INTO accountBreach(username, count, updatedAt, data) + VALUES (:username, :count, :updatedAt, :data); +} + +getByUsername: +SELECT * +FROM accountBreach +WHERE + username = :username; + +getByUsernames: +SELECT * +FROM accountBreach +WHERE + username IN ?; + +deleteAll: +DELETE FROM accountBreach; + +deleteByUsername: +DELETE FROM accountBreach +WHERE + username IN ?; diff --git a/common/src/commonMain/sqldelight/com/artemchep/keyguard/data/pwnage/PasswordBreach.sq b/common/src/commonMain/sqldelight/com/artemchep/keyguard/data/pwnage/PasswordBreach.sq new file mode 100644 index 00000000..b7dfeb89 --- /dev/null +++ b/common/src/commonMain/sqldelight/com/artemchep/keyguard/data/pwnage/PasswordBreach.sq @@ -0,0 +1,39 @@ +import kotlinx.datetime.Instant; + +CREATE TABLE passwordBreach ( + password TEXT NOT NULL PRIMARY KEY, + count INTEGER NOT NULL, + updatedAt INTEGER AS Instant NOT NULL +); + +insert { + UPDATE passwordBreach + SET + count = :count, + updatedAt = :updatedAt + WHERE + password = :password; + + INSERT OR IGNORE INTO passwordBreach(password, count, updatedAt) + VALUES (:password, :count, :updatedAt); +} + +getByPassword: +SELECT * +FROM passwordBreach +WHERE + password = :password; + +getByPasswords: +SELECT * +FROM passwordBreach +WHERE + password IN ?; + +deleteAll: +DELETE FROM passwordBreach; + +deleteByPassword: +DELETE FROM passwordBreach +WHERE + password IN ?; diff --git a/common/src/commonMain/sqldelight/migrations/1.sqm b/common/src/commonMain/sqldelight/migrations/1.sqm new file mode 100644 index 00000000..c9a27206 --- /dev/null +++ b/common/src/commonMain/sqldelight/migrations/1.sqm @@ -0,0 +1,5 @@ +CREATE TABLE passwordBreach ( + password TEXT NOT NULL PRIMARY KEY, + count INTEGER NOT NULL, + updatedAt INTEGER NOT NULL +); diff --git a/common/src/commonMain/sqldelight/migrations/2.sqm b/common/src/commonMain/sqldelight/migrations/2.sqm new file mode 100644 index 00000000..117a6119 --- /dev/null +++ b/common/src/commonMain/sqldelight/migrations/2.sqm @@ -0,0 +1,6 @@ +CREATE TABLE accountBreach ( + username TEXT NOT NULL PRIMARY KEY, + count INTEGER NOT NULL, + updatedAt INTEGER NOT NULL, + data TEXT NOT NULL +); diff --git a/common/src/commonMain/sqldelight/migrations/3.sqm b/common/src/commonMain/sqldelight/migrations/3.sqm new file mode 100644 index 00000000..ac076934 --- /dev/null +++ b/common/src/commonMain/sqldelight/migrations/3.sqm @@ -0,0 +1,7 @@ +CREATE TABLE generatorEmailRelay ( + id INTEGER PRIMARY KEY AUTOINCREMENT, + name TEXT NOT NULL, + type TEXT NOT NULL, + data TEXT NOT NULL, + createdAt INTEGER NOT NULL +); diff --git a/common/src/commonMain/sqldelight/migrations/4.sqm b/common/src/commonMain/sqldelight/migrations/4.sqm new file mode 100644 index 00000000..5965f194 --- /dev/null +++ b/common/src/commonMain/sqldelight/migrations/4.sqm @@ -0,0 +1 @@ +ALTER TABLE generatorHistory ADD COLUMN isEmailRelay INTEGER; diff --git a/common/src/commonMain/sqldelight/migrations/5.sqm b/common/src/commonMain/sqldelight/migrations/5.sqm new file mode 100644 index 00000000..f7f544de --- /dev/null +++ b/common/src/commonMain/sqldelight/migrations/5.sqm @@ -0,0 +1 @@ +ALTER TABLE cipherUsageHistory ADD COLUMN credentialId TEXT; diff --git a/common/src/desktopMain/kotlin/com/artemchep/keyguard/AutofillActArgs.kt b/common/src/desktopMain/kotlin/com/artemchep/keyguard/AutofillActArgs.kt new file mode 100644 index 00000000..39ab3122 --- /dev/null +++ b/common/src/desktopMain/kotlin/com/artemchep/keyguard/AutofillActArgs.kt @@ -0,0 +1,25 @@ +package com.artemchep.keyguard + +import com.artemchep.keyguard.common.model.AutofillTarget +import com.artemchep.keyguard.common.model.GeneratorContext +import com.artemchep.keyguard.feature.home.vault.add.AddRoute + +actual class AutofillActArgs + +actual class AutofillSaveActArgs + +actual val AppMode.autofillTarget: AutofillTarget? + get() = null + +actual val AppMode.generatorTarget: GeneratorContext + get() = GeneratorContext( + host = null, + ) + +actual fun AddRoute.Args.Autofill.Companion.leof( + source: AutofillSaveActArgs, +): AddRoute.Args.Autofill = AddRoute.Args.Autofill() + +actual fun AddRoute.Args.Autofill.Companion.leof( + source: AutofillActArgs, +): AddRoute.Args.Autofill = AddRoute.Args.Autofill() diff --git a/common/src/desktopMain/kotlin/com/artemchep/keyguard/common/service/permission/Permission.kt b/common/src/desktopMain/kotlin/com/artemchep/keyguard/common/service/permission/Permission.kt new file mode 100644 index 00000000..0e8096c8 --- /dev/null +++ b/common/src/desktopMain/kotlin/com/artemchep/keyguard/common/service/permission/Permission.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.common.service.permission + +actual enum class Permission { + POST_NOTIFICATIONS, +} diff --git a/common/src/desktopMain/kotlin/com/artemchep/keyguard/copy/ClipboardServiceJvm.kt b/common/src/desktopMain/kotlin/com/artemchep/keyguard/copy/ClipboardServiceJvm.kt new file mode 100644 index 00000000..cae0fbc7 --- /dev/null +++ b/common/src/desktopMain/kotlin/com/artemchep/keyguard/copy/ClipboardServiceJvm.kt @@ -0,0 +1,27 @@ +package com.artemchep.keyguard.copy + +import com.artemchep.keyguard.common.service.clipboard.ClipboardService +import org.kodein.di.DirectDI +import java.awt.Toolkit +import java.awt.datatransfer.StringSelection + +class ClipboardServiceJvm( +) : ClipboardService { + constructor( + directDI: DirectDI, + ) : this( + ) + + override fun setPrimaryClip(value: String, concealed: Boolean) { + val selection = StringSelection(value) + Toolkit.getDefaultToolkit() + .systemClipboard + .setContents(selection, null) + } + + override fun clearPrimaryClip() { + setPrimaryClip("", concealed = false) + } + + override fun hasCopyNotification(): Boolean = false +} diff --git a/common/src/desktopMain/kotlin/com/artemchep/keyguard/copy/ConnectivityServiceJvm.kt b/common/src/desktopMain/kotlin/com/artemchep/keyguard/copy/ConnectivityServiceJvm.kt new file mode 100644 index 00000000..55e7f918 --- /dev/null +++ b/common/src/desktopMain/kotlin/com/artemchep/keyguard/copy/ConnectivityServiceJvm.kt @@ -0,0 +1,18 @@ +package com.artemchep.keyguard.copy + +import com.artemchep.keyguard.common.service.connectivity.ConnectivityService +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.flowOf +import org.kodein.di.DirectDI + +class ConnectivityServiceJvm( +) : ConnectivityService { + constructor( + directDI: DirectDI, + ) : this( + ) + + override val availableFlow: Flow = flowOf(Unit) + + override fun isInternetAvailable(): Boolean = true +} diff --git a/common/src/desktopMain/kotlin/com/artemchep/keyguard/copy/DataDirectory.kt b/common/src/desktopMain/kotlin/com/artemchep/keyguard/copy/DataDirectory.kt new file mode 100644 index 00000000..9a4cc3d1 --- /dev/null +++ b/common/src/desktopMain/kotlin/com/artemchep/keyguard/copy/DataDirectory.kt @@ -0,0 +1,37 @@ +package com.artemchep.keyguard.copy + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.ioEffect +import kotlinx.coroutines.Dispatchers +import net.harawata.appdirs.AppDirsFactory +import org.kodein.di.DirectDI + +class DataDirectory( +) { + companion object { + private val APP_NAME = "keyguard" + private val APP_AUTHOR = "ArtemChepurnyi" + } + + constructor(directDI: DirectDI) : this() + + fun data(): IO = ioEffect(Dispatchers.IO) { + val appDirs = AppDirsFactory.getInstance() + appDirs.getUserDataDir(APP_NAME, null, APP_AUTHOR) + } + + fun config(): IO = ioEffect(Dispatchers.IO) { + val appDirs = AppDirsFactory.getInstance() + appDirs.getUserConfigDir(APP_NAME, null, APP_AUTHOR, true) + } + + fun cache(): IO = ioEffect(Dispatchers.IO) { + val appDirs = AppDirsFactory.getInstance() + appDirs.getUserCacheDir(APP_NAME, null, APP_AUTHOR) + } + + fun downloads(): IO = ioEffect(Dispatchers.IO) { + val appDirs = AppDirsFactory.getInstance() + appDirs.getUserDownloadsDir(APP_NAME, null, APP_AUTHOR) + } +} diff --git a/common/src/desktopMain/kotlin/com/artemchep/keyguard/copy/DownloadClientDesktop.kt b/common/src/desktopMain/kotlin/com/artemchep/keyguard/copy/DownloadClientDesktop.kt new file mode 100644 index 00000000..b09ce1c1 --- /dev/null +++ b/common/src/desktopMain/kotlin/com/artemchep/keyguard/copy/DownloadClientDesktop.kt @@ -0,0 +1,35 @@ +package com.artemchep.keyguard.copy + +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.service.crypto.FileEncryptor +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.copy.download.DownloadClientJvm +import okhttp3.OkHttpClient +import org.kodein.di.DirectDI +import org.kodein.di.instance +import java.io.File + +class DownloadClientDesktop( + private val dataDirectory: DataDirectory, + windowCoroutineScope: WindowCoroutineScope, + okHttpClient: OkHttpClient, + fileEncryptor: FileEncryptor, +) : DownloadClientJvm( + cacheDirProvider = { + val path = dataDirectory.cache() + .bind() + File(path) + }, + windowCoroutineScope = windowCoroutineScope, + okHttpClient = okHttpClient, + fileEncryptor = fileEncryptor, +) { + constructor( + directDI: DirectDI, + ) : this( + dataDirectory = directDI.instance(), + windowCoroutineScope = directDI.instance(), + okHttpClient = directDI.instance(), + fileEncryptor = directDI.instance(), + ) +} diff --git a/common/src/desktopMain/kotlin/com/artemchep/keyguard/copy/DownloadManagerDesktop.kt b/common/src/desktopMain/kotlin/com/artemchep/keyguard/copy/DownloadManagerDesktop.kt new file mode 100644 index 00000000..2b5545d4 --- /dev/null +++ b/common/src/desktopMain/kotlin/com/artemchep/keyguard/copy/DownloadManagerDesktop.kt @@ -0,0 +1,398 @@ +package com.artemchep.keyguard.copy + +import arrow.core.left +import arrow.core.right +import com.artemchep.keyguard.android.downloader.journal.DownloadRepository +import com.artemchep.keyguard.android.downloader.journal.room.DownloadInfoEntity2 +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.service.crypto.CryptoGenerator +import com.artemchep.keyguard.common.service.download.DownloadManager +import com.artemchep.keyguard.common.service.download.DownloadProgress +import com.artemchep.keyguard.common.service.text.Base64Service +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.ui.CodeException +import com.artemchep.keyguard.ui.getHttpCode +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.FlowPreview +import kotlinx.coroutines.Job +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.emptyFlow +import kotlinx.coroutines.flow.flatMapLatest +import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.flow.last +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.mapNotNull +import kotlinx.coroutines.flow.onEach +import kotlinx.coroutines.launch +import kotlinx.coroutines.sync.Mutex +import kotlinx.coroutines.sync.withLock +import kotlinx.datetime.Clock +import org.kodein.di.DirectDI +import org.kodein.di.instance +import java.io.File + +class DownloadManagerDesktop( + private val windowCoroutineScope: WindowCoroutineScope, + private val downloadClient: DownloadClientDesktop, + private val downloadRepository: DownloadRepository, + private val base64Service: Base64Service, + private val cryptoGenerator: CryptoGenerator, + private val dataDirectory: DataDirectory, +) : DownloadManager { + companion object { + // Since the extension of the files is unknown it's safe + // to say that they are just binaries. + private const val CACHE_FILE_EXT = ".bin" + + fun getFile( + dir: File, + downloadId: String, + ) = dir.resolve("$downloadId$CACHE_FILE_EXT") + } + + private val mutex = Mutex() + + private val map = mutableMapOf() + + constructor( + directDI: DirectDI, + ) : this( + windowCoroutineScope = directDI.instance(), + downloadClient = directDI.instance(), + downloadRepository = directDI.instance(), + base64Service = directDI.instance(), + cryptoGenerator = directDI.instance(), + dataDirectory = directDI.instance(), + ) + +// fun statusByAttachmentId( +// accountId: String, +// cipherId: String, +// attachmentId: String, +// ) = AttachmentDownloadTag( +// accountId = accountId, +// remoteCipherId = cipherId, +// attachmentId = attachmentId, +// ).serialize().let(::statusByTag) + + override fun statusByDownloadId2(downloadId: String): Flow = downloadClient + .fileStatusByDownloadId(downloadId) + + override fun statusByTag(tag: DownloadInfoEntity2.AttachmentDownloadTag): Flow = + downloadClient + .fileStatusByTag(tag) + .flatMapLatest { event -> + when (event) { + is DownloadProgress.None -> { + downloadRepository + .get() + .map { + it + .asSequence() + .map { + DownloadInfoEntity2.AttachmentDownloadTag( + localCipherId = it.localCipherId, + remoteCipherId = it.remoteCipherId, + attachmentId = it.attachmentId, + ) + } + .toSet() + } + .map { tags -> tag.takeIf { it in tags } } + .map { tagOrNull -> + tagOrNull?.let { peekDownloadInfoByTag(it) } + } + .distinctUntilChanged() + .map { downloadInfo -> + downloadInfo + ?: return@map DownloadProgress.None + val file = getFilePath( + downloadId = downloadInfo.id, + downloadName = downloadInfo.name, + ) + + when { + file.exists() -> { + val result = file.right() + DownloadProgress.Complete(result) + } + + downloadInfo.error != null -> { + // TODO: Fix meee!! + val exception = CodeException( + code = downloadInfo.error!!.code, + description = downloadInfo.error!!.message, + ) + val result = exception.left() + DownloadProgress.Complete(result) + } + + else -> { + DownloadProgress.Loading() + } + } + } + } + + else -> flowOf(event) + } + } + + @OptIn(FlowPreview::class) + override suspend fun queue( + downloadInfo: DownloadInfoEntity2, + ): DownloadManager.QueueResult = queue( + url = downloadInfo.url, + urlIsOneTime = downloadInfo.urlIsOneTime, + name = downloadInfo.name, + tag = DownloadInfoEntity2.AttachmentDownloadTag( + localCipherId = downloadInfo.localCipherId, + remoteCipherId = downloadInfo.remoteCipherId, + attachmentId = downloadInfo.attachmentId, + ), + attempt = downloadInfo.error?.attempt ?: 0, + key = downloadInfo.encryptionKeyBase64?.let { base64Service.decode(it) }, + ) + + @OptIn(FlowPreview::class) + override suspend fun queue( + tag: DownloadInfoEntity2.AttachmentDownloadTag, + url: String, + urlIsOneTime: Boolean, + name: String, + key: ByteArray?, + attempt: Int, + worker: Boolean, + ): DownloadManager.QueueResult = kotlin.run { + println("Queue??") + val downloadInfo = getOrPutDownloadFileEntity( + url = url, + urlIsOneTime = urlIsOneTime, + name = name, + tag = tag, + encryptionKey = key, + error = null, // clears error field if existed + ) + println("File??") + val file = getFilePath( + downloadInfo.id, + downloadInfo.name, + ) + println("File $file") + + val downloadCancelFlow = downloadRepository + .getByIdFlow(id = downloadInfo.id) + .mapNotNull { model -> + Unit.takeIf { model == null } + } + val downloadFlow = downloadClient.fileLoader( + downloadId = downloadInfo.id, + url = url, + tag = tag, + file = file, + fileKey = key, + cancelFlow = downloadCancelFlow, + ) + + // Launch downloading job on + // the app scope. + listenToError( + scope = windowCoroutineScope, + attempt = attempt, + downloadId = downloadInfo.id, + downloadFlow = downloadFlow, + ) + + DownloadManager.QueueResult( + info = downloadInfo, + flow = downloadFlow, + ) + } + + private suspend fun getFilePath( + downloadId: String, + downloadName: String, + ) = dataDirectory + .downloads() + .bind() + .let(::File) + .resolve(downloadName) + + private fun listenToError( + scope: CoroutineScope, + attempt: Int, + downloadId: String, + downloadFlow: Flow, + ) { + synchronized(map) { + // Find out if current download job exists and still + // valid. Create a new one otherwise. + val existingJob = map[downloadId] + if ( + existingJob != null && + !existingJob.isCancelled && + !existingJob.isCompleted + ) { + return@synchronized + } + + val job = scope.launch { + val downloadResult = downloadFlow + .onEach { downloadStatus -> + // Log.e("download", "progress $downloadStatus") + } + .last() + if (downloadResult is DownloadProgress.Complete) { + downloadResult.result.fold( + ifLeft = { e -> + val error = DownloadInfoEntity2.Error( + code = e.getHttpCode(), + message = e.message, + attempt = attempt + 1, + ) + replaceDownloadFileEntity( + id = downloadId, + error = error, + ) + // Log.e("download", "im sorry, mate") + }, + ifRight = {}, + ) + } + } + job.invokeOnCompletion { + synchronized(map) { + val latestJob = map[downloadId] + if (latestJob === job) map.remove(downloadId) + } + } + map[downloadId] = job + } + } + + override suspend fun removeByDownloadId( + downloadId: String, + ) = removeDownloadInfoByDownloadId(id = downloadId) + + override suspend fun removeByTag( + tag: DownloadInfoEntity2.AttachmentDownloadTag, + ) = removeDownloadInfoByTag(tag = tag) + + // + // Download Info Repository + // + + private suspend fun removeDownloadInfoByDownloadId( + id: String, + ) = mutex + .withLock { + downloadRepository.removeById(id = id) + .bind() + } + + private suspend fun removeDownloadInfoByTag( + tag: DownloadInfoEntity2.AttachmentDownloadTag, + ) = mutex + .withLock { + downloadRepository.removeByTag(tag = tag) + .bind() + } + + private suspend fun peekDownloadInfoByTag( + tag: DownloadInfoEntity2.AttachmentDownloadTag, + ) = mutex + .withLock { + downloadRepository.getByTag(tag = tag) + .bind() + } + + private suspend fun getOrPutDownloadFileEntity( + url: String, + urlIsOneTime: Boolean, + name: String, + tag: DownloadInfoEntity2.AttachmentDownloadTag, + encryptionKey: ByteArray?, + error: DownloadInfoEntity2.Error?, + ) = kotlin.run { + val encryptionKeyBase64 = encryptionKey?.let(base64Service::encodeToString) + mutex + .withLock { + val now = Clock.System.now() + + val existingEntry = downloadRepository.getByTag(tag = tag) + .bind() + if (existingEntry != null) { + if ( + existingEntry.name != name || + existingEntry.url != url || + existingEntry.encryptionKeyBase64 != encryptionKeyBase64 || + existingEntry.error != error + ) { + val newEntry = existingEntry.copy( + revisionDate = now, + // update fields + name = name, + url = url, + encryptionKeyBase64 = encryptionKeyBase64, + error = error, + ) + downloadRepository + .put(newEntry) + .bind() + return@withLock newEntry + } + return@withLock existingEntry + } + + val id = cryptoGenerator.uuid() + + val newEntry = DownloadInfoEntity2( + id = id, + url = url, + urlIsOneTime = urlIsOneTime, + name = name, + localCipherId = tag.localCipherId, + remoteCipherId = tag.remoteCipherId, + attachmentId = tag.attachmentId, + createdDate = now, + encryptionKeyBase64 = encryptionKeyBase64, + ) + downloadRepository + .put(newEntry) + .bind() + newEntry + } + } + + private suspend fun replaceDownloadFileEntity( + id: String, + error: DownloadInfoEntity2.Error?, + ) = kotlin.run { + mutex + .withLock { + val now = Clock.System.now() + + val existingEntry = downloadRepository.getById(id = id) + .bind() + if (existingEntry != null) { + if ( + existingEntry.error != error + ) { + val newEntry = existingEntry.copy( + revisionDate = now, + // update fields + error = error, + ) + downloadRepository + .put(newEntry) + .bind() + return@withLock newEntry + } + return@withLock existingEntry + } + + existingEntry + } + } +} diff --git a/common/src/desktopMain/kotlin/com/artemchep/keyguard/copy/DownloadRepositoryDesktop.kt b/common/src/desktopMain/kotlin/com/artemchep/keyguard/copy/DownloadRepositoryDesktop.kt new file mode 100644 index 00000000..4e93ca21 --- /dev/null +++ b/common/src/desktopMain/kotlin/com/artemchep/keyguard/copy/DownloadRepositoryDesktop.kt @@ -0,0 +1,93 @@ +package com.artemchep.keyguard.copy + +import com.artemchep.keyguard.android.downloader.journal.DownloadRepository +import com.artemchep.keyguard.android.downloader.journal.room.DownloadInfoEntity2 +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.effectMap +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.io.toIO +import kotlinx.collections.immutable.persistentListOf +import kotlinx.collections.immutable.toPersistentList +import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.FlowPreview +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.asFlow +import kotlinx.coroutines.flow.flatMapLatest +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.update +import org.kodein.di.DirectDI + +@OptIn(ExperimentalCoroutinesApi::class, FlowPreview::class) +class DownloadRepositoryDesktop( +) : DownloadRepository { + private val sink = MutableStateFlow(persistentListOf()) + + constructor( + directDI: DirectDI, + ) : this( + ) + + override fun getById(id: String): IO = sink + .map { list -> + list + .firstOrNull { it.id == id } + } + .toIO() + + override fun getByIdFlow(id: String): Flow = sink + .map { list -> + list + .firstOrNull { it.id == id } + } + + override fun getByTag( + tag: DownloadInfoEntity2.AttachmentDownloadTag, + ): IO = sink + .map { list -> + list + .firstOrNull { + it.localCipherId == tag.localCipherId && + it.remoteCipherId == tag.remoteCipherId && + it.attachmentId == tag.attachmentId + } + } + .toIO() + + override fun removeById(id: String): IO = ioEffect { + sink.update { list -> + list + .filter { + it.id != id + } + .toPersistentList() + } + } + + override fun removeByTag( + tag: DownloadInfoEntity2.AttachmentDownloadTag, + ): IO = ioEffect { + sink.update { list -> + list + .filter { + it.localCipherId != tag.localCipherId || + it.remoteCipherId != tag.remoteCipherId || + it.attachmentId != tag.attachmentId + } + .toPersistentList() + } + } + + override fun get(): Flow> = sink + + override fun put(model: DownloadInfoEntity2): IO = ioEffect { + sink.update { list -> + list + .filter { + it.id != model.id + } + .toPersistentList() + .add(model) + } + } +} diff --git a/common/src/desktopMain/kotlin/com/artemchep/keyguard/copy/GetBarcodeImageJvm.kt b/common/src/desktopMain/kotlin/com/artemchep/keyguard/copy/GetBarcodeImageJvm.kt new file mode 100644 index 00000000..7b228537 --- /dev/null +++ b/common/src/desktopMain/kotlin/com/artemchep/keyguard/copy/GetBarcodeImageJvm.kt @@ -0,0 +1,52 @@ +package com.artemchep.keyguard.copy + +import androidx.compose.ui.graphics.ImageBitmap +import androidx.compose.ui.graphics.toComposeImageBitmap +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.model.BarcodeImageRequest +import com.artemchep.keyguard.common.usecase.GetBarcodeImage +import com.artemchep.keyguard.util.encode +import com.google.zxing.client.j2se.MatrixToImageConfig +import com.google.zxing.client.j2se.MatrixToImageWriter +import com.google.zxing.common.BitMatrix +import kotlinx.coroutines.Dispatchers +import org.jetbrains.skia.Image +import org.kodein.di.DirectDI +import java.io.ByteArrayOutputStream +import kotlin.coroutines.CoroutineContext + +/** + * @author Artem Chepurnyi + */ +class GetBarcodeImageJvm( + private val dispatcher: CoroutineContext = Dispatchers.Default, +) : GetBarcodeImage { + constructor(directDI: DirectDI) : this() + + override fun invoke( + request: BarcodeImageRequest, + ): IO = ioEffect(dispatcher) { + val bitMatrix = request.encode() + val bitmap = bitMatrix.streamAsPng() + .toByteArray() + .let(Image::makeFromEncoded) + .toComposeImageBitmap() + bitmap + } + + /** + * returns a [ByteArrayOutputStream] representation of the QR code + * @return qrcode as stream + */ + private fun BitMatrix.streamAsPng(): ByteArrayOutputStream { + val stream = ByteArrayOutputStream() + MatrixToImageWriter.writeToStream( + this, + "png", + stream, + MatrixToImageConfig(), + ) + return stream + } +} diff --git a/common/src/desktopMain/kotlin/com/artemchep/keyguard/copy/LinkInfoExtractorExecute.kt b/common/src/desktopMain/kotlin/com/artemchep/keyguard/copy/LinkInfoExtractorExecute.kt new file mode 100644 index 00000000..4d8f29f7 --- /dev/null +++ b/common/src/desktopMain/kotlin/com/artemchep/keyguard/copy/LinkInfoExtractorExecute.kt @@ -0,0 +1,34 @@ +package com.artemchep.keyguard.copy + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.model.DSecret +import com.artemchep.keyguard.common.model.LinkInfoExecute +import com.artemchep.keyguard.common.service.extract.LinkInfoExtractor +import kotlin.reflect.KClass + +class LinkInfoExtractorExecute( +) : LinkInfoExtractor { + companion object { + private const val PREFIX = "cmd://" + } + + override val from: KClass get() = DSecret.Uri::class + + override val to: KClass get() = LinkInfoExecute::class + + override fun extractInfo( + uri: DSecret.Uri, + ): IO = ioEffect { + if (uri.uri.startsWith(PREFIX)) { + val result = LinkInfoExecute.Allow( + command = uri.uri.removePrefix(PREFIX), + ) + return@ioEffect result + } + + LinkInfoExecute.Deny + } + + override fun handles(uri: DSecret.Uri): Boolean = true +} diff --git a/common/src/desktopMain/kotlin/com/artemchep/keyguard/copy/LinkInfoExtractorLaunch.kt b/common/src/desktopMain/kotlin/com/artemchep/keyguard/copy/LinkInfoExtractorLaunch.kt new file mode 100644 index 00000000..703aa8d3 --- /dev/null +++ b/common/src/desktopMain/kotlin/com/artemchep/keyguard/copy/LinkInfoExtractorLaunch.kt @@ -0,0 +1,26 @@ +package com.artemchep.keyguard.copy + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.model.DSecret +import com.artemchep.keyguard.common.model.LinkInfoLaunch +import com.artemchep.keyguard.common.service.extract.LinkInfoExtractor +import kotlin.reflect.KClass + +class LinkInfoExtractorLaunch( +) : LinkInfoExtractor { + override val from: KClass get() = DSecret.Uri::class + + override val to: KClass get() = LinkInfoLaunch::class + + override fun extractInfo( + uri: DSecret.Uri, + ): IO = ioEffect { + val apps = LinkInfoLaunch.Allow.AppInfo( + label = "App", + ) + LinkInfoLaunch.Allow(listOf(apps)) + } + + override fun handles(uri: DSecret.Uri): Boolean = true +} diff --git a/common/src/desktopMain/kotlin/com/artemchep/keyguard/copy/PermissionServiceJvm.kt b/common/src/desktopMain/kotlin/com/artemchep/keyguard/copy/PermissionServiceJvm.kt new file mode 100644 index 00000000..b3a4cff3 --- /dev/null +++ b/common/src/desktopMain/kotlin/com/artemchep/keyguard/copy/PermissionServiceJvm.kt @@ -0,0 +1,23 @@ +package com.artemchep.keyguard.copy + +import com.artemchep.keyguard.common.service.permission.Permission +import com.artemchep.keyguard.common.service.permission.PermissionService +import com.artemchep.keyguard.common.service.permission.PermissionState +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.MutableStateFlow +import org.kodein.di.DirectDI + +class PermissionServiceJvm( +) : PermissionService { + constructor( + directDI: DirectDI, + ) : this( + ) + + override fun getState( + permission: Permission, + ): Flow { + val result = PermissionState.Granted + return MutableStateFlow(result) + } +} diff --git a/common/src/desktopMain/kotlin/com/artemchep/keyguard/copy/PowerServiceJvm.kt b/common/src/desktopMain/kotlin/com/artemchep/keyguard/copy/PowerServiceJvm.kt new file mode 100644 index 00000000..ba34b112 --- /dev/null +++ b/common/src/desktopMain/kotlin/com/artemchep/keyguard/copy/PowerServiceJvm.kt @@ -0,0 +1,17 @@ +package com.artemchep.keyguard.copy + +import com.artemchep.keyguard.common.model.Screen +import com.artemchep.keyguard.common.service.power.PowerService +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.flowOf +import org.kodein.di.DirectDI + +class PowerServiceJvm( +) : PowerService { + constructor( + directDI: DirectDI, + ) : this( + ) + + override fun getScreenState(): Flow = flowOf(Screen.On) +} diff --git a/common/src/desktopMain/kotlin/com/artemchep/keyguard/copy/ReviewServiceJvm.kt b/common/src/desktopMain/kotlin/com/artemchep/keyguard/copy/ReviewServiceJvm.kt new file mode 100644 index 00000000..478017f3 --- /dev/null +++ b/common/src/desktopMain/kotlin/com/artemchep/keyguard/copy/ReviewServiceJvm.kt @@ -0,0 +1,17 @@ +package com.artemchep.keyguard.copy + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.ioUnit +import com.artemchep.keyguard.common.service.review.ReviewService +import com.artemchep.keyguard.platform.LeContext +import org.kodein.di.DirectDI + +class ReviewServiceJvm() : ReviewService { + constructor( + directDI: DirectDI, + ) : this() + + override fun request( + context: LeContext, + ): IO = ioUnit() +} diff --git a/common/src/desktopMain/kotlin/com/artemchep/keyguard/copy/TextServiceJvm.kt b/common/src/desktopMain/kotlin/com/artemchep/keyguard/copy/TextServiceJvm.kt new file mode 100644 index 00000000..fb01c435 --- /dev/null +++ b/common/src/desktopMain/kotlin/com/artemchep/keyguard/copy/TextServiceJvm.kt @@ -0,0 +1,19 @@ +package com.artemchep.keyguard.copy + +import com.artemchep.keyguard.common.service.text.TextService +import dev.icerock.moko.resources.FileResource +import org.kodein.di.DirectDI +import java.io.InputStream + +class TextServiceJvm() : TextService { + constructor( + directDI: DirectDI, + ) : this() + + override fun readFromResources( + fileResource: FileResource, + ): InputStream = fileResource.inputStream() + + private fun FileResource.inputStream() = resourcesClassLoader + .getResourceAsStream(filePath)!! +} diff --git a/common/src/desktopMain/kotlin/com/artemchep/keyguard/core/session/FingerprintRepositoryModule.kt b/common/src/desktopMain/kotlin/com/artemchep/keyguard/core/session/FingerprintRepositoryModule.kt new file mode 100644 index 00000000..7769b609 --- /dev/null +++ b/common/src/desktopMain/kotlin/com/artemchep/keyguard/core/session/FingerprintRepositoryModule.kt @@ -0,0 +1,316 @@ +package com.artemchep.keyguard.core.session + +import arrow.core.partially1 +import arrow.optics.Getter +import com.artemchep.keyguard.android.downloader.journal.DownloadRepository +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.io.flatMap +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.io.ioRaise +import com.artemchep.keyguard.common.io.map +import com.artemchep.keyguard.common.io.parallel +import com.artemchep.keyguard.common.model.AutofillTarget +import com.artemchep.keyguard.common.model.BiometricStatus +import com.artemchep.keyguard.common.model.DSecret +import com.artemchep.keyguard.common.model.MasterSession +import com.artemchep.keyguard.common.model.Product +import com.artemchep.keyguard.common.model.RichResult +import com.artemchep.keyguard.common.model.Subscription +import com.artemchep.keyguard.common.model.WithBiometric +import com.artemchep.keyguard.common.service.Files +import com.artemchep.keyguard.common.service.autofill.AutofillService +import com.artemchep.keyguard.common.service.autofill.AutofillServiceStatus +import com.artemchep.keyguard.common.service.clipboard.ClipboardService +import com.artemchep.keyguard.common.service.connectivity.ConnectivityService +import com.artemchep.keyguard.common.service.download.DownloadManager +import com.artemchep.keyguard.common.service.keyvalue.KeyValueStore +import com.artemchep.keyguard.common.service.keyvalue.impl.FileJsonKeyValueStoreStore +import com.artemchep.keyguard.common.service.keyvalue.impl.JsonKeyValueStore +import com.artemchep.keyguard.common.service.logging.LogRepository +import com.artemchep.keyguard.common.service.logging.kotlin.LogRepositoryKotlin +import com.artemchep.keyguard.common.service.permission.PermissionService +import com.artemchep.keyguard.common.service.power.PowerService +import com.artemchep.keyguard.common.service.review.ReviewService +import com.artemchep.keyguard.common.service.subscription.SubscriptionService +import com.artemchep.keyguard.common.service.text.TextService +import com.artemchep.keyguard.common.usecase.BiometricStatusUseCase +import com.artemchep.keyguard.common.usecase.CleanUpAttachment +import com.artemchep.keyguard.common.usecase.ClearData +import com.artemchep.keyguard.common.usecase.DisableBiometric +import com.artemchep.keyguard.common.usecase.EnableBiometric +import com.artemchep.keyguard.common.usecase.GetBarcodeImage +import com.artemchep.keyguard.common.usecase.GetBiometricRemainingDuration +import com.artemchep.keyguard.common.usecase.GetLocale +import com.artemchep.keyguard.common.usecase.GetPurchased +import com.artemchep.keyguard.common.usecase.GetSuggestions +import com.artemchep.keyguard.common.usecase.PutLocale +import com.artemchep.keyguard.common.usecase.impl.GetLocaleImpl +import com.artemchep.keyguard.common.usecase.impl.PutLocaleImpl +import com.artemchep.keyguard.copy.ClipboardServiceJvm +import com.artemchep.keyguard.copy.ConnectivityServiceJvm +import com.artemchep.keyguard.copy.DataDirectory +import com.artemchep.keyguard.copy.DownloadClientDesktop +import com.artemchep.keyguard.copy.DownloadManagerDesktop +import com.artemchep.keyguard.copy.DownloadRepositoryDesktop +import com.artemchep.keyguard.copy.GetBarcodeImageJvm +import com.artemchep.keyguard.copy.PermissionServiceJvm +import com.artemchep.keyguard.copy.PowerServiceJvm +import com.artemchep.keyguard.copy.ReviewServiceJvm +import com.artemchep.keyguard.copy.TextServiceJvm +import com.artemchep.keyguard.di.globalModuleJvm +import com.artemchep.keyguard.platform.LeContext +import com.artemchep.keyguard.util.traverse +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.emptyFlow +import kotlinx.coroutines.flow.flowOf +import org.kodein.di.DI +import org.kodein.di.DirectDI +import org.kodein.di.bind +import org.kodein.di.bindProvider +import org.kodein.di.bindSingleton +import org.kodein.di.factory +import org.kodein.di.instance +import org.kodein.di.multiton +import java.io.File +import kotlin.time.Duration + +class BiometricStatusUseCaseImpl : BiometricStatusUseCase { + override fun invoke(): Flow = flowOf(BiometricStatus.Unavailable) +} + +class GetBiometricRemainingDurationImpl : GetBiometricRemainingDuration { + override fun invoke(): Flow = flowOf(Duration.INFINITE) +} + +class DisableBiometricImpl : DisableBiometric { + override fun invoke(): IO = + ioRaise(RuntimeException()) +} + +class EnableBiometricImpl : EnableBiometric { + override fun invoke(key: MasterSession.Key?): IO = + ioRaise(RuntimeException()) +} + +class GetSuggestionsImpl : GetSuggestions { + override fun invoke( + p1: List, + p2: Getter, + p3: AutofillTarget, + ): IO> = + ioRaise(RuntimeException()) +} + +class GetPurchasedImpl : GetPurchased { + override fun invoke(): Flow = flowOf(true) +} + +class CleanUpAttachmentImpl : CleanUpAttachment { + override fun invoke(): IO = + ioRaise(RuntimeException()) +} + +class AutofillServiceAndroid : AutofillService { + override fun status(): Flow = emptyFlow() +} + +class SubscriptionServiceAndroid : SubscriptionService { + override fun purchased(): Flow> = flowOf(RichResult.Success(true)) + + override fun subscriptions(): Flow?> = flowOf(null) + + override fun products(): Flow?> = flowOf(null) +} + +class ClearDataAndroid( + private val logRepository: LogRepository, + private val dataDirectory: DataDirectory, +) : ClearData { + companion object { + private const val TAG = "ClearData" + } + + constructor(directDI: DirectDI) : this( + logRepository = directDI.instance(), + dataDirectory = directDI.instance(), + ) + + override fun invoke(): IO = ioEffect { + val ios = listOf( + dataDirectory.data().flatMap(::delete.partially1("data")), + dataDirectory.cache().flatMap(::delete.partially1("cache")), + dataDirectory.config().flatMap(::delete.partially1("config")), + ) + ios + .parallel() + .bind() + } + + private fun delete( + tag: String, + path: String, + ): IO = ioEffect(Dispatchers.IO) { + val filesToDelete = File(path) + .traverse() + .map { file -> + val deleted = file.delete() + if (!deleted) { + file.deleteOnExit() + } + file to deleted + } + .toList() + + val allCount = filesToDelete.size + val deletedCount = filesToDelete.count { it.second } + if (allCount == deletedCount) { + // Also delete directories. + File(path).deleteRecursively() + } + + logRepository.post( + tag = TAG, + message = "Deleted '$tag' directory: $deletedCount deleted files, " + + "${allCount - deletedCount} to delete on exit.", + level = com.artemchep.keyguard.common.service.logging.LogLevel.INFO, + ) + } +} + +fun diFingerprintRepositoryModule() = DI.Module( + name = "com.artemchep.keyguard.core.session.repository::FingerprintRepository", +) { + import(globalModuleJvm()) + + bindProvider() { + LeContext() + } + bindSingleton { + BiometricStatusUseCaseImpl() + } + bindSingleton { + GetBarcodeImageJvm( + directDI = this, + ) + } + bindSingleton { + PermissionServiceJvm( + directDI = this, + ) + } + + bindSingleton { + GetBiometricRemainingDurationImpl() + } + bindSingleton { + DisableBiometricImpl() + } + bindSingleton { + EnableBiometricImpl() + } + + bindSingleton { + GetLocaleImpl( + directDI = this, + ) + } + bindSingleton { + PutLocaleImpl( + directDI = this, + ) + } + bindSingleton> { + GetSuggestionsImpl() + } + bindSingleton { + GetPurchasedImpl() + } + + bindSingleton { + CleanUpAttachmentImpl() + } +// bindSingleton { +// CleanUpDownloadImpl( +// directDI = this, +// ) +// } + + bindSingleton { + DataDirectory( + directDI = this, + ) + } + bindSingleton { + ClipboardServiceJvm(this) + } + bindSingleton { + ConnectivityServiceJvm(this) + } + bindSingleton { + PowerServiceJvm(this) + } + // TODO: FIX ME!! +// bindSingleton { +// LinkInfoExtractorAndroid( +// packageManager = instance(), +// ) +// } + bindSingleton { + TextServiceJvm( + directDI = this, + ) + } + bindSingleton { + ReviewServiceJvm( + directDI = this, + ) + } + bindSingleton { + DownloadClientDesktop( + directDI = this, + ) + } + bindSingleton { + DownloadManagerDesktop( + directDI = this, + ) + } + bindSingleton { + DownloadRepositoryDesktop(this) + } + bindSingleton { + AutofillServiceAndroid() + } + bindSingleton { + SubscriptionServiceAndroid() + } + bindSingleton { + ClearDataAndroid( + directDI = this, + ) + } + bind() with factory { key: Files -> + val d = instance() + val s = FileJsonKeyValueStoreStore( + fileIo = d.data().map { File(it, key.filename) }, + json = instance(), + ) + JsonKeyValueStore( + s, + ) + } + bind("proto") with multiton { file: Files -> + val m: KeyValueStore = instance(arg = file) + m + } + bind("shared") with multiton { file: Files -> + val m: KeyValueStore = instance(arg = file) + m + } + bindSingleton { + LogRepositoryKotlin() + } +} + diff --git a/common/src/desktopMain/kotlin/com/artemchep/keyguard/core/session/usecase/createSubDi.kt b/common/src/desktopMain/kotlin/com/artemchep/keyguard/core/session/usecase/createSubDi.kt new file mode 100644 index 00000000..122a7fb3 --- /dev/null +++ b/common/src/desktopMain/kotlin/com/artemchep/keyguard/core/session/usecase/createSubDi.kt @@ -0,0 +1,54 @@ +package com.artemchep.keyguard.core.session.usecase + +import com.artemchep.keyguard.common.NotificationsWorker +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.effectMap +import com.artemchep.keyguard.common.io.ioRaise +import com.artemchep.keyguard.common.model.DownloadAttachmentRequest +import com.artemchep.keyguard.common.model.MasterKey +import com.artemchep.keyguard.common.usecase.DownloadAttachment +import com.artemchep.keyguard.common.usecase.QueueSyncAll +import com.artemchep.keyguard.common.usecase.QueueSyncById +import com.artemchep.keyguard.copy.DataDirectory +import com.artemchep.keyguard.core.store.DatabaseManager +import com.artemchep.keyguard.core.store.DatabaseManagerImpl +import com.artemchep.keyguard.core.store.SqlManagerFile +import com.artemchep.keyguard.provider.bitwarden.usecase.NotificationsImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.QueueSyncAllImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.QueueSyncByIdImpl +import org.kodein.di.DI +import org.kodein.di.bindSingleton +import org.kodein.di.instance +import java.io.File + +actual fun DI.Builder.createSubDi( + masterKey: MasterKey, +) { + createSubDi2(masterKey) + + bindSingleton { + QueueSyncAllImpl(this) + } + bindSingleton { + QueueSyncByIdImpl(this) + } + + bindSingleton { + NotificationsImpl(this) + } + bindSingleton { + val dataDirectory: DataDirectory = instance() + DatabaseManagerImpl( + logRepository = instance(), + json = instance(), + masterKey = masterKey, + sqlManager = SqlManagerFile( + fileIo = dataDirectory + .data() + .effectMap { + File(it, "database.sqlite") + }, + ), + ) + } +} diff --git a/common/src/desktopMain/kotlin/com/artemchep/keyguard/core/store/SqlManagerFile.kt b/common/src/desktopMain/kotlin/com/artemchep/keyguard/core/store/SqlManagerFile.kt new file mode 100644 index 00000000..b576b18e --- /dev/null +++ b/common/src/desktopMain/kotlin/com/artemchep/keyguard/core/store/SqlManagerFile.kt @@ -0,0 +1,107 @@ +package com.artemchep.keyguard.core.store + +import app.cash.sqldelight.db.QueryResult +import app.cash.sqldelight.db.SqlDriver +import app.cash.sqldelight.driver.jdbc.sqlite.JdbcSqliteDriver +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.model.MasterKey +import com.artemchep.keyguard.data.Database +import io.ktor.util.hex +import java.io.File +import java.util.Properties + +class SqlManagerFile( + private val fileIo: IO, +) : SqlManager { + override fun create( + masterKey: MasterKey, + databaseFactory: (SqlDriver) -> Database, + ): IO = ioEffect { + val driver: SqlDriver = createSqlDriver( + file = fileIo + .bind(), + key = masterKey.byteArray, + ) + + // Create or migrate the database schema. + val targetVersion = Database.Schema.version + val currentVersion = runCatching { + driver.getCurrentVersion() + }.getOrDefault(0L) + if (currentVersion == 0L) { + Database.Schema.create(driver) + } else if (targetVersion > currentVersion) { + Database.Schema.migrate(driver, currentVersion, targetVersion) + } + // Bump the version to the current one. + if (currentVersion != targetVersion) { + driver.setCurrentVersion(targetVersion) + } + + val database = databaseFactory(driver) + object : SqlHelper { + override val driver: SqlDriver get() = driver + + override val database: Database get() = database + + override fun changePassword( + newMasterKey: MasterKey, + ): IO = ioEffect { + val hex = hex(newMasterKey.byteArray) + // This is specific to a cipher that i'm using! + // See: + // https://github.com/Willena/sqlite-jdbc-crypt/blob/master/USAGE.md#encryption-key-manipulations + // https://utelle.github.io/SQLite3MultipleCiphers/docs/configuration/config_sql_pragmas/#pragma-key + driver.execute( + identifier = null, + sql = """ + PRAGMA key = "x'$hex"; + PRAGMA rekey = "x'$hex"; + """.trimIndent(), + parameters = 0, + binders = null, + ) + } + } + } + + private fun createSqlDriver( + file: File, + key: ByteArray, + ): SqlDriver { + val hex = hex(key) + val url = "jdbc:sqlite:file:${file.absolutePath}" + return JdbcSqliteDriver( + url = url, + properties = Properties().apply { + put("cipher", "sqlcipher") + put("hexkey", hex) + put("foreign_keys", "true") + }, + ) + } + + // Version + + private suspend fun SqlDriver.getCurrentVersion(): Long { + val queryResult = executeQuery( + identifier = null, + sql = "PRAGMA user_version;", + mapper = { cursor -> + val version = cursor.getLong(0) + requireNotNull(version) + QueryResult.Value(version) + }, + parameters = 0, + binders = null, + ) + return queryResult.await() + } + + private suspend fun SqlDriver.setCurrentVersion(version: Long) { + execute(null, "PRAGMA user_version = $version;", 0, null) + .await() + } +} diff --git a/common/src/desktopMain/kotlin/com/artemchep/keyguard/feature/apppicker/AppPickerRoute.kt b/common/src/desktopMain/kotlin/com/artemchep/keyguard/feature/apppicker/AppPickerRoute.kt new file mode 100644 index 00000000..6d3273f8 --- /dev/null +++ b/common/src/desktopMain/kotlin/com/artemchep/keyguard/feature/apppicker/AppPickerRoute.kt @@ -0,0 +1,11 @@ +package com.artemchep.keyguard.feature.apppicker + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.navigation.RouteForResult +import com.artemchep.keyguard.feature.navigation.RouteResultTransmitter + +actual object AppPickerRoute : RouteForResult { + @Composable + override fun Content(transmitter: RouteResultTransmitter) { + } +} diff --git a/common/src/desktopMain/kotlin/com/artemchep/keyguard/feature/auth/common/Autofill.desktop.kt b/common/src/desktopMain/kotlin/com/artemchep/keyguard/feature/auth/common/Autofill.desktop.kt new file mode 100644 index 00000000..15e40163 --- /dev/null +++ b/common/src/desktopMain/kotlin/com/artemchep/keyguard/feature/auth/common/Autofill.desktop.kt @@ -0,0 +1,14 @@ +package com.artemchep.keyguard.feature.auth.common + +import androidx.compose.runtime.Composable +import androidx.compose.ui.ExperimentalComposeUiApi +import androidx.compose.ui.autofill.AutofillNode + +@OptIn(ExperimentalComposeUiApi::class) +@Composable +actual fun AutofillSideEffect( + value: String, + node: AutofillNode, +) { + // Do nothing. +} \ No newline at end of file diff --git a/common/src/desktopMain/kotlin/com/artemchep/keyguard/feature/auth/login/otp/LoginOtpScreen.desktop.kt b/common/src/desktopMain/kotlin/com/artemchep/keyguard/feature/auth/login/otp/LoginOtpScreen.desktop.kt new file mode 100644 index 00000000..028a936d --- /dev/null +++ b/common/src/desktopMain/kotlin/com/artemchep/keyguard/feature/auth/login/otp/LoginOtpScreen.desktop.kt @@ -0,0 +1,20 @@ +package com.artemchep.keyguard.feature.auth.login.otp + +import androidx.compose.foundation.layout.ColumnScope +import androidx.compose.runtime.Composable + +@Composable +actual fun ColumnScope.LoginOtpScreenContentFido2WebAuthnWebView( + screenScope: LoginOtpScreenScope, + state: LoginTwofaState.Fido2WebAuthn, +) { + // Do nothing +} + +@Composable +actual fun ColumnScope.LoginOtpScreenContentFido2WebAuthnBrowser( + screenScope: LoginOtpScreenScope, + state: LoginTwofaState.Fido2WebAuthn, +) { + // Do nothing +} diff --git a/common/src/desktopMain/kotlin/com/artemchep/keyguard/feature/auth/login/otp/LoginTwofaScreen.desktop.kt b/common/src/desktopMain/kotlin/com/artemchep/keyguard/feature/auth/login/otp/LoginTwofaScreen.desktop.kt new file mode 100644 index 00000000..f6de8edf --- /dev/null +++ b/common/src/desktopMain/kotlin/com/artemchep/keyguard/feature/auth/login/otp/LoginTwofaScreen.desktop.kt @@ -0,0 +1,12 @@ +package com.artemchep.keyguard.feature.auth.login.otp + +import androidx.compose.foundation.layout.ColumnScope +import androidx.compose.runtime.Composable + +@Composable +actual fun ColumnScope.LoginOtpScreenContentDuoWebView( + screenScope: LoginOtpScreenScope, + state: LoginTwofaState.Duo, +) { + // Do nothing +} diff --git a/common/src/desktopMain/kotlin/com/artemchep/keyguard/feature/biometric/BiometricPromptEffect.kt b/common/src/desktopMain/kotlin/com/artemchep/keyguard/feature/biometric/BiometricPromptEffect.kt new file mode 100644 index 00000000..7e05c2fc --- /dev/null +++ b/common/src/desktopMain/kotlin/com/artemchep/keyguard/feature/biometric/BiometricPromptEffect.kt @@ -0,0 +1,9 @@ +package com.artemchep.keyguard.feature.biometric + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.common.model.PureBiometricAuthPrompt +import kotlinx.coroutines.flow.Flow + +@Composable +actual fun BiometricPromptEffect(flow: Flow) { +} diff --git a/common/src/desktopMain/kotlin/com/artemchep/keyguard/feature/favicon/FaviconImage.kt b/common/src/desktopMain/kotlin/com/artemchep/keyguard/feature/favicon/FaviconImage.kt new file mode 100644 index 00000000..d49b2e8c --- /dev/null +++ b/common/src/desktopMain/kotlin/com/artemchep/keyguard/feature/favicon/FaviconImage.kt @@ -0,0 +1,67 @@ +package com.artemchep.keyguard.feature.favicon + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.material.Icon +import androidx.compose.material.icons.Icons +import androidx.compose.material3.LocalAbsoluteTonalElevation +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.surfaceColorAtElevation +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.compositeOver +import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.icons.KeyguardWebsite +import com.artemchep.keyguard.ui.shimmer.shimmer +import com.artemchep.keyguard.ui.theme.combineAlpha +import io.kamel.image.KamelImage +import io.kamel.image.asyncPainterResource + +@Composable +actual fun FaviconImage( + imageModel: () -> Any?, + modifier: Modifier, +) { + val surfaceColor = MaterialTheme.colorScheme + .surfaceColorAtElevation(LocalAbsoluteTonalElevation.current + 16.dp) + val contentColor = LocalContentColor.current + val highlightColor = contentColor + .combineAlpha(MediumEmphasisAlpha) + .compositeOver(surfaceColor) + + val painterData = remember(imageModel) { + imageModel() + } + val painterResource = + asyncPainterResource(data = painterData ?: Any()) + KamelImage( + modifier = modifier, + contentScale = ContentScale.Crop, + resource = painterResource, + contentDescription = "Profile", + onLoading = { + Box( + modifier = Modifier + .fillMaxSize() + .shimmer() + .background(highlightColor), + ) + }, + onFailure = { + it.printStackTrace() + Icon( + modifier = Modifier + .align(Alignment.Center), + imageVector = Icons.Outlined.KeyguardWebsite, + contentDescription = null, + tint = contentColor, + ) + }, + ) +} diff --git a/common/src/desktopMain/kotlin/com/artemchep/keyguard/feature/feedback/FeedbackUtils.kt b/common/src/desktopMain/kotlin/com/artemchep/keyguard/feature/feedback/FeedbackUtils.kt new file mode 100644 index 00000000..77f72954 --- /dev/null +++ b/common/src/desktopMain/kotlin/com/artemchep/keyguard/feature/feedback/FeedbackUtils.kt @@ -0,0 +1,8 @@ +package com.artemchep.keyguard.feature.feedback + +import com.artemchep.keyguard.build.BuildKonfig + +actual fun getFeedbackSubject(): String = run { + val date = BuildKonfig.buildDate + "Feedback Desktop/$date" +} diff --git a/common/src/desktopMain/kotlin/com/artemchep/keyguard/feature/filepicker/FilePickerEffect.kt b/common/src/desktopMain/kotlin/com/artemchep/keyguard/feature/filepicker/FilePickerEffect.kt new file mode 100644 index 00000000..3f871374 --- /dev/null +++ b/common/src/desktopMain/kotlin/com/artemchep/keyguard/feature/filepicker/FilePickerEffect.kt @@ -0,0 +1,10 @@ +package com.artemchep.keyguard.feature.filepicker + +import androidx.compose.runtime.Composable +import kotlinx.coroutines.flow.Flow + +@Composable +actual fun FilePickerEffect( + flow: Flow>, +) { +} diff --git a/common/src/desktopMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingAutofill.kt b/common/src/desktopMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingAutofill.kt new file mode 100644 index 00000000..241df1f2 --- /dev/null +++ b/common/src/desktopMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingAutofill.kt @@ -0,0 +1,8 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import kotlinx.coroutines.flow.flowOf +import org.kodein.di.DirectDI + +actual fun settingAutofillProvider( + directDI: DirectDI, +): SettingComponent = flowOf(null) diff --git a/common/src/desktopMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingCredentialProvider.kt b/common/src/desktopMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingCredentialProvider.kt new file mode 100644 index 00000000..aa4eb60f --- /dev/null +++ b/common/src/desktopMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingCredentialProvider.kt @@ -0,0 +1,8 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import kotlinx.coroutines.flow.flowOf +import org.kodein.di.DirectDI + +actual fun settingCredentialProviderProvider( + directDI: DirectDI, +): SettingComponent = flowOf(null) diff --git a/common/src/desktopMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingPermission.kt b/common/src/desktopMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingPermission.kt new file mode 100644 index 00000000..cc049bf2 --- /dev/null +++ b/common/src/desktopMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingPermission.kt @@ -0,0 +1,8 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import kotlinx.coroutines.flow.flowOf +import org.kodein.di.DirectDI + +actual fun settingPermissionDetailsProvider( + directDI: DirectDI, +): SettingComponent = flowOf(null) diff --git a/common/src/desktopMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingPermissionCamera.kt b/common/src/desktopMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingPermissionCamera.kt new file mode 100644 index 00000000..1a969572 --- /dev/null +++ b/common/src/desktopMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingPermissionCamera.kt @@ -0,0 +1,8 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import kotlinx.coroutines.flow.flowOf +import org.kodein.di.DirectDI + +actual fun settingPermissionCameraProvider( + directDI: DirectDI, +): SettingComponent = flowOf(null) diff --git a/common/src/desktopMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingPermissionOther.kt b/common/src/desktopMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingPermissionOther.kt new file mode 100644 index 00000000..71bb9cf9 --- /dev/null +++ b/common/src/desktopMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingPermissionOther.kt @@ -0,0 +1,8 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import kotlinx.coroutines.flow.flowOf +import org.kodein.di.DirectDI + +actual fun settingPermissionOtherProvider( + directDI: DirectDI, +): SettingComponent = flowOf(null) diff --git a/common/src/desktopMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingPermissionPostNotifications.kt b/common/src/desktopMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingPermissionPostNotifications.kt new file mode 100644 index 00000000..7e851056 --- /dev/null +++ b/common/src/desktopMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingPermissionPostNotifications.kt @@ -0,0 +1,8 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import kotlinx.coroutines.flow.flowOf +import org.kodein.di.DirectDI + +actual fun settingPermissionPostNotificationsProvider( + directDI: DirectDI, +): SettingComponent = flowOf(null) diff --git a/common/src/desktopMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingSubscriptionsPlayStore.kt b/common/src/desktopMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingSubscriptionsPlayStore.kt new file mode 100644 index 00000000..4afdc498 --- /dev/null +++ b/common/src/desktopMain/kotlin/com/artemchep/keyguard/feature/home/settings/component/SettingSubscriptionsPlayStore.kt @@ -0,0 +1,8 @@ +package com.artemchep.keyguard.feature.home.settings.component + +import kotlinx.coroutines.flow.flowOf +import org.kodein.di.DirectDI + +actual fun settingSubscriptionsPlayStoreProvider( + directDI: DirectDI, +): SettingComponent = flowOf(null) diff --git a/common/src/desktopMain/kotlin/com/artemchep/keyguard/feature/home/vault/add/LeAddRoute.kt b/common/src/desktopMain/kotlin/com/artemchep/keyguard/feature/home/vault/add/LeAddRoute.kt new file mode 100644 index 00000000..992b3b52 --- /dev/null +++ b/common/src/desktopMain/kotlin/com/artemchep/keyguard/feature/home/vault/add/LeAddRoute.kt @@ -0,0 +1,2 @@ +package com.artemchep.keyguard.feature.home.vault.add + diff --git a/common/src/desktopMain/kotlin/com/artemchep/keyguard/feature/localization/textResource.kt b/common/src/desktopMain/kotlin/com/artemchep/keyguard/feature/localization/textResource.kt new file mode 100644 index 00000000..c104fd5a --- /dev/null +++ b/common/src/desktopMain/kotlin/com/artemchep/keyguard/feature/localization/textResource.kt @@ -0,0 +1,16 @@ +package com.artemchep.keyguard.feature.localization + +import com.artemchep.keyguard.platform.LeContext +import dev.icerock.moko.resources.StringResource +import dev.icerock.moko.resources.desc.Resource +import dev.icerock.moko.resources.desc.ResourceFormatted +import dev.icerock.moko.resources.desc.StringDesc + +actual fun textResource(res: StringResource, context: LeContext): String = + StringDesc.Resource(res).localized() + +actual fun textResource( + res: StringResource, + context: LeContext, + vararg args: Any, +): String = StringDesc.ResourceFormatted(res, *args).localized() diff --git a/common/src/desktopMain/kotlin/com/artemchep/keyguard/feature/qr/ScanQrRoute.kt b/common/src/desktopMain/kotlin/com/artemchep/keyguard/feature/qr/ScanQrRoute.kt new file mode 100644 index 00000000..5fca3b33 --- /dev/null +++ b/common/src/desktopMain/kotlin/com/artemchep/keyguard/feature/qr/ScanQrRoute.kt @@ -0,0 +1,11 @@ +package com.artemchep.keyguard.feature.qr + +import androidx.compose.runtime.Composable +import com.artemchep.keyguard.feature.navigation.RouteForResult +import com.artemchep.keyguard.feature.navigation.RouteResultTransmitter + +actual object ScanQrRoute : RouteForResult { + @Composable + override fun Content(transmitter: RouteResultTransmitter) { + } +} diff --git a/common/src/desktopMain/kotlin/com/artemchep/keyguard/feature/yubikey/Yubi.kt b/common/src/desktopMain/kotlin/com/artemchep/keyguard/feature/yubikey/Yubi.kt new file mode 100644 index 00000000..e75df744 --- /dev/null +++ b/common/src/desktopMain/kotlin/com/artemchep/keyguard/feature/yubikey/Yubi.kt @@ -0,0 +1,31 @@ +package com.artemchep.keyguard.feature.yubikey + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import com.artemchep.keyguard.common.model.Loadable +import kotlinx.collections.immutable.persistentSetOf + +@Composable +actual fun rememberYubiKey( + send: OnYubiKeyListener?, +): YubiKeyState = remember { + val usbState = run { + val value = YubiKeyUsbState( + enabled = false, + capturing = false, + devices = persistentSetOf(), + ) + mutableStateOf>(Loadable.Ok(value)) + } + val nfcState = run { + val value = YubiKeyNfcState( + enabled = false, + ) + mutableStateOf>(Loadable.Ok(value)) + } + YubiKeyState( + usbState = usbState, + nfcState = nfcState, + ) +} diff --git a/common/src/desktopMain/kotlin/com/artemchep/keyguard/feature/yubikey/rememberYubiKey.kt b/common/src/desktopMain/kotlin/com/artemchep/keyguard/feature/yubikey/rememberYubiKey.kt new file mode 100644 index 00000000..67bc8a43 --- /dev/null +++ b/common/src/desktopMain/kotlin/com/artemchep/keyguard/feature/yubikey/rememberYubiKey.kt @@ -0,0 +1 @@ +package com.artemchep.keyguard.feature.yubikey diff --git a/common/src/desktopMain/kotlin/com/artemchep/keyguard/platform/LeActivity.kt b/common/src/desktopMain/kotlin/com/artemchep/keyguard/platform/LeActivity.kt new file mode 100644 index 00000000..46739c73 --- /dev/null +++ b/common/src/desktopMain/kotlin/com/artemchep/keyguard/platform/LeActivity.kt @@ -0,0 +1,3 @@ +package com.artemchep.keyguard.platform + +actual class LeActivity diff --git a/common/src/desktopMain/kotlin/com/artemchep/keyguard/platform/LeAnimation.kt b/common/src/desktopMain/kotlin/com/artemchep/keyguard/platform/LeAnimation.kt new file mode 100644 index 00000000..4f511b47 --- /dev/null +++ b/common/src/desktopMain/kotlin/com/artemchep/keyguard/platform/LeAnimation.kt @@ -0,0 +1,7 @@ +package com.artemchep.keyguard.platform + +import androidx.compose.runtime.Composable + +actual val LocalAnimationFactor: Float + @Composable + get() = 1f diff --git a/common/src/desktopMain/kotlin/com/artemchep/keyguard/platform/LeBundle.kt b/common/src/desktopMain/kotlin/com/artemchep/keyguard/platform/LeBundle.kt new file mode 100644 index 00000000..bec77fdd --- /dev/null +++ b/common/src/desktopMain/kotlin/com/artemchep/keyguard/platform/LeBundle.kt @@ -0,0 +1,11 @@ +package com.artemchep.keyguard.platform + +actual class LeBundle + +actual operator fun LeBundle.contains(key: String): Boolean = false + +actual operator fun LeBundle.get(key: String): Any? = null + +actual fun leBundleOf( + vararg map: Pair, +): LeBundle = LeBundle() diff --git a/common/src/desktopMain/kotlin/com/artemchep/keyguard/platform/LeContext.kt b/common/src/desktopMain/kotlin/com/artemchep/keyguard/platform/LeContext.kt new file mode 100644 index 00000000..35937aca --- /dev/null +++ b/common/src/desktopMain/kotlin/com/artemchep/keyguard/platform/LeContext.kt @@ -0,0 +1,11 @@ +package com.artemchep.keyguard.platform + +import androidx.compose.runtime.Composable + +actual class LeContext + +actual val LocalLeContext: LeContext + @Composable + get() { + return LeContext() + } diff --git a/common/src/desktopMain/kotlin/com/artemchep/keyguard/platform/LeDebug.kt b/common/src/desktopMain/kotlin/com/artemchep/keyguard/platform/LeDebug.kt new file mode 100644 index 00000000..05d3f154 --- /dev/null +++ b/common/src/desktopMain/kotlin/com/artemchep/keyguard/platform/LeDebug.kt @@ -0,0 +1,3 @@ +package com.artemchep.keyguard.platform + +actual val isStandalone: Boolean = true diff --git a/common/src/desktopMain/kotlin/com/artemchep/keyguard/platform/LePlatform.kt b/common/src/desktopMain/kotlin/com/artemchep/keyguard/platform/LePlatform.kt new file mode 100644 index 00000000..d6bf59e8 --- /dev/null +++ b/common/src/desktopMain/kotlin/com/artemchep/keyguard/platform/LePlatform.kt @@ -0,0 +1,17 @@ +package com.artemchep.keyguard.platform + +import org.apache.commons.lang3.SystemUtils + +actual val CurrentPlatform: Platform + get() = when { + SystemUtils.IS_OS_WINDOWS -> + Platform.Desktop.Windows + + SystemUtils.IS_OS_MAC || SystemUtils.IS_OS_MAC_OSX -> + Platform.Desktop.MacOS + + SystemUtils.IS_OS_LINUX -> + Platform.Desktop.Linux + + else -> Platform.Desktop.Other + } diff --git a/common/src/desktopMain/kotlin/com/artemchep/keyguard/platform/LeUri.kt b/common/src/desktopMain/kotlin/com/artemchep/keyguard/platform/LeUri.kt new file mode 100644 index 00000000..427a1ea4 --- /dev/null +++ b/common/src/desktopMain/kotlin/com/artemchep/keyguard/platform/LeUri.kt @@ -0,0 +1,11 @@ +package com.artemchep.keyguard.platform + +import java.io.File + +actual abstract class LeUri + +private class LeUriImpl() : LeUri() + +actual fun leParseUri(uri: String): LeUri = LeUriImpl() + +actual fun leParseUri(file: File): LeUri = LeUriImpl() diff --git a/common/src/desktopMain/kotlin/com/artemchep/keyguard/platform/LeUsbPid.kt b/common/src/desktopMain/kotlin/com/artemchep/keyguard/platform/LeUsbPid.kt new file mode 100644 index 00000000..3d33ca11 --- /dev/null +++ b/common/src/desktopMain/kotlin/com/artemchep/keyguard/platform/LeUsbPid.kt @@ -0,0 +1,3 @@ +package com.artemchep.keyguard.platform + +actual enum class LeUsbPid diff --git a/common/src/desktopMain/kotlin/com/artemchep/keyguard/platform/leWindowInsets.kt b/common/src/desktopMain/kotlin/com/artemchep/keyguard/platform/leWindowInsets.kt new file mode 100644 index 00000000..bf8ce8b2 --- /dev/null +++ b/common/src/desktopMain/kotlin/com/artemchep/keyguard/platform/leWindowInsets.kt @@ -0,0 +1,33 @@ +package com.artemchep.keyguard.platform + +import androidx.compose.foundation.layout.WindowInsets +import androidx.compose.runtime.Composable +import androidx.compose.runtime.NonRestartableComposable +import androidx.compose.ui.unit.dp + +private val empty = WindowInsets(left = 0.dp) + +actual val WindowInsets.Companion.leIme: WindowInsets + @Composable + @NonRestartableComposable + get() = empty + +actual val WindowInsets.Companion.leNavigationBars: WindowInsets + @Composable + @NonRestartableComposable + get() = empty + +actual val WindowInsets.Companion.leStatusBars: WindowInsets + @Composable + @NonRestartableComposable + get() = empty + +actual val WindowInsets.Companion.leSystemBars: WindowInsets + @Composable + @NonRestartableComposable + get() = empty + +actual val WindowInsets.Companion.leDisplayCutout: WindowInsets + @Composable + @NonRestartableComposable + get() = empty diff --git a/common/src/desktopMain/kotlin/com/artemchep/keyguard/platform/lifecycle/LocalLifecycleStateFlow.kt b/common/src/desktopMain/kotlin/com/artemchep/keyguard/platform/lifecycle/LocalLifecycleStateFlow.kt new file mode 100644 index 00000000..32f6ab0f --- /dev/null +++ b/common/src/desktopMain/kotlin/com/artemchep/keyguard/platform/lifecycle/LocalLifecycleStateFlow.kt @@ -0,0 +1,15 @@ +package com.artemchep.keyguard.platform.lifecycle + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.StateFlow + +actual val LocalLifecycleStateFlow: StateFlow + @Composable + get() { + val sink = remember { + MutableStateFlow(LeLifecycleState.STARTED) + } + return sink + } diff --git a/common/src/desktopMain/kotlin/com/artemchep/keyguard/platform/parcelize/LeIgnoredOnParcel.kt b/common/src/desktopMain/kotlin/com/artemchep/keyguard/platform/parcelize/LeIgnoredOnParcel.kt new file mode 100644 index 00000000..67964dc3 --- /dev/null +++ b/common/src/desktopMain/kotlin/com/artemchep/keyguard/platform/parcelize/LeIgnoredOnParcel.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.platform.parcelize + +@Target(AnnotationTarget.PROPERTY) +@Retention(AnnotationRetention.SOURCE) +actual annotation class LeIgnoredOnParcel actual constructor() diff --git a/common/src/desktopMain/kotlin/com/artemchep/keyguard/platform/parcelize/LeParcelable.kt b/common/src/desktopMain/kotlin/com/artemchep/keyguard/platform/parcelize/LeParcelable.kt new file mode 100644 index 00000000..b5f5f492 --- /dev/null +++ b/common/src/desktopMain/kotlin/com/artemchep/keyguard/platform/parcelize/LeParcelable.kt @@ -0,0 +1,3 @@ +package com.artemchep.keyguard.platform.parcelize + +actual interface LeParcelable diff --git a/common/src/desktopMain/kotlin/com/artemchep/keyguard/platform/parcelize/LeParcelize.kt b/common/src/desktopMain/kotlin/com/artemchep/keyguard/platform/parcelize/LeParcelize.kt new file mode 100644 index 00000000..24168e8f --- /dev/null +++ b/common/src/desktopMain/kotlin/com/artemchep/keyguard/platform/parcelize/LeParcelize.kt @@ -0,0 +1,5 @@ +package com.artemchep.keyguard.platform.parcelize + +@Target(AnnotationTarget.CLASS) +@Retention(AnnotationRetention.BINARY) +actual annotation class LeParcelize actual constructor() diff --git a/common/src/desktopMain/kotlin/com/artemchep/keyguard/platform/recordException.kt b/common/src/desktopMain/kotlin/com/artemchep/keyguard/platform/recordException.kt new file mode 100644 index 00000000..641f97a8 --- /dev/null +++ b/common/src/desktopMain/kotlin/com/artemchep/keyguard/platform/recordException.kt @@ -0,0 +1,23 @@ +package com.artemchep.keyguard.platform + +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.flowOf + +actual fun recordException(e: Throwable) { + e.printStackTrace() +} + +actual fun recordLog(message: String) { + println(message) +} + +actual fun crashlyticsIsEnabled(): Boolean? { + return false +} + +actual fun crashlyticsIsEnabledFlow(): Flow { + return flowOf(false) +} + +actual fun crashlyticsSetEnabled(enabled: Boolean?) { +} diff --git a/common/src/desktopMain/kotlin/com/artemchep/keyguard/ui/ComposeWindow.kt b/common/src/desktopMain/kotlin/com/artemchep/keyguard/ui/ComposeWindow.kt new file mode 100644 index 00000000..e0107212 --- /dev/null +++ b/common/src/desktopMain/kotlin/com/artemchep/keyguard/ui/ComposeWindow.kt @@ -0,0 +1,8 @@ +package com.artemchep.keyguard.ui + +import androidx.compose.runtime.staticCompositionLocalOf +import androidx.compose.ui.awt.ComposeWindow + +val LocalComposeWindow = staticCompositionLocalOf { + throw IllegalStateException() +} diff --git a/common/src/desktopMain/kotlin/com/artemchep/keyguard/ui/Html.kt b/common/src/desktopMain/kotlin/com/artemchep/keyguard/ui/Html.kt new file mode 100644 index 00000000..34006c9f --- /dev/null +++ b/common/src/desktopMain/kotlin/com/artemchep/keyguard/ui/Html.kt @@ -0,0 +1,18 @@ +package com.artemchep.keyguard.ui + +import androidx.compose.material.Text +import androidx.compose.material3.LocalContentColor +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier + +@Composable +actual fun HtmlText( + modifier: Modifier, + html: String, +) { + Text( + modifier = modifier, + text = html, + color = LocalContentColor.current, + ) +} diff --git a/common/src/desktopMain/kotlin/com/artemchep/keyguard/ui/KeepScreenOnEffect.kt b/common/src/desktopMain/kotlin/com/artemchep/keyguard/ui/KeepScreenOnEffect.kt new file mode 100644 index 00000000..f49a4af6 --- /dev/null +++ b/common/src/desktopMain/kotlin/com/artemchep/keyguard/ui/KeepScreenOnEffect.kt @@ -0,0 +1,8 @@ +package com.artemchep.keyguard.ui + +import androidx.compose.runtime.Composable + +@Composable +actual fun KeepScreenOnEffect() { + // Do nothing. +} diff --git a/common/src/desktopMain/kotlin/com/artemchep/keyguard/ui/LeMOdelBottomSheet.kt b/common/src/desktopMain/kotlin/com/artemchep/keyguard/ui/LeMOdelBottomSheet.kt new file mode 100644 index 00000000..685ebcb8 --- /dev/null +++ b/common/src/desktopMain/kotlin/com/artemchep/keyguard/ui/LeMOdelBottomSheet.kt @@ -0,0 +1,22 @@ +package com.artemchep.keyguard.ui + +import androidx.compose.foundation.layout.PaddingValues +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp + +@Composable +actual fun LeMOdelBottomSheet( + visible: Boolean, + onDismissRequest: () -> Unit, + content: @Composable (PaddingValues) -> Unit, +) { + WunderPopup( + expanded = visible, + onDismissRequest = onDismissRequest, + modifier = Modifier, + ) { + val contentPadding = PaddingValues(0.dp) + content(contentPadding) + } +} diff --git a/common/src/desktopMain/kotlin/com/artemchep/keyguard/ui/icons/AttachmentIconImpl.kt b/common/src/desktopMain/kotlin/com/artemchep/keyguard/ui/icons/AttachmentIconImpl.kt new file mode 100644 index 00000000..91d5098d --- /dev/null +++ b/common/src/desktopMain/kotlin/com/artemchep/keyguard/ui/icons/AttachmentIconImpl.kt @@ -0,0 +1,15 @@ +package com.artemchep.keyguard.ui.icons + +import androidx.compose.foundation.layout.Box +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier + +@Composable +actual fun AttachmentIconImpl( + uri: String?, + modifier: Modifier, +) { + Box( + modifier = modifier, + ) +} diff --git a/common/src/desktopMain/kotlin/com/artemchep/keyguard/ui/icons/EmailIcon.kt b/common/src/desktopMain/kotlin/com/artemchep/keyguard/ui/icons/EmailIcon.kt new file mode 100644 index 00000000..8f2616af --- /dev/null +++ b/common/src/desktopMain/kotlin/com/artemchep/keyguard/ui/icons/EmailIcon.kt @@ -0,0 +1,63 @@ +package com.artemchep.keyguard.ui.icons + +import androidx.compose.foundation.background +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.material.Icon +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.outlined.Email +import androidx.compose.material3.LocalAbsoluteTonalElevation +import androidx.compose.material3.LocalContentColor +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.surfaceColorAtElevation +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.compositeOver +import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.unit.dp +import com.artemchep.keyguard.feature.favicon.GravatarUrl +import com.artemchep.keyguard.ui.MediumEmphasisAlpha +import com.artemchep.keyguard.ui.shimmer.shimmer +import com.artemchep.keyguard.ui.theme.combineAlpha +import io.kamel.image.KamelImage +import io.kamel.image.asyncPainterResource + +@Composable +actual fun EmailIcon( + modifier: Modifier, + gravatarUrl: GravatarUrl?, +) { + val surfaceColor = MaterialTheme.colorScheme + .surfaceColorAtElevation(LocalAbsoluteTonalElevation.current + 16.dp) + val contentColor = LocalContentColor.current + val highlightColor = contentColor + .combineAlpha(MediumEmphasisAlpha) + .compositeOver(surfaceColor) + + val painterResource = + asyncPainterResource(data = gravatarUrl?.url ?: Any()) + KamelImage( + modifier = modifier, + contentScale = ContentScale.Crop, + resource = painterResource, + contentDescription = "Email", + onLoading = { + Box( + modifier = Modifier + .fillMaxSize() + .shimmer() + .background(highlightColor), + ) + }, + onFailure = { + Icon( + modifier = Modifier + .align(Alignment.Center), + imageVector = Icons.Outlined.Email, + contentDescription = null, + tint = contentColor, + ) + }, + ) +} diff --git a/common/src/desktopMain/kotlin/com/artemchep/keyguard/ui/rightClickable.kt b/common/src/desktopMain/kotlin/com/artemchep/keyguard/ui/rightClickable.kt new file mode 100644 index 00000000..a35d1967 --- /dev/null +++ b/common/src/desktopMain/kotlin/com/artemchep/keyguard/ui/rightClickable.kt @@ -0,0 +1,45 @@ +package com.artemchep.keyguard.ui + +import androidx.compose.foundation.gestures.awaitEachGesture +import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.ui.Modifier +import androidx.compose.ui.composed +import androidx.compose.ui.input.pointer.AwaitPointerEventScope +import androidx.compose.ui.input.pointer.PointerEvent +import androidx.compose.ui.input.pointer.changedToDown +import androidx.compose.ui.input.pointer.isSecondaryPressed +import androidx.compose.ui.input.pointer.pointerInput + +actual fun Modifier.rightClickable( + onClick: (() -> Unit)?, +) = this + .composed { + val enabled = onClick != null + val updatedOnClick = rememberUpdatedState(onClick) + + val gesture = if (enabled) { + Modifier.pointerInput(Unit) { + awaitEachGesture { + val event = awaitEventFirstDown() + if (event.buttons.isSecondaryPressed) { + event.changes.forEach { it.consume() } + updatedOnClick.value?.invoke() + } + } + } + } else { + Modifier + } + Modifier + .then(gesture) + } + +private suspend fun AwaitPointerEventScope.awaitEventFirstDown(): PointerEvent { + var event: PointerEvent + do { + event = awaitPointerEvent() + } while ( + !event.changes.all { it.changedToDown() } + ) + return event +} diff --git a/common/src/desktopMain/kotlin/com/artemchep/keyguard/ui/shimmer/rememberShimmerBoundsWindow.kt b/common/src/desktopMain/kotlin/com/artemchep/keyguard/ui/shimmer/rememberShimmerBoundsWindow.kt new file mode 100644 index 00000000..eb1d0b8c --- /dev/null +++ b/common/src/desktopMain/kotlin/com/artemchep/keyguard/ui/shimmer/rememberShimmerBoundsWindow.kt @@ -0,0 +1,19 @@ +package com.artemchep.keyguard.ui.shimmer + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.remember +import androidx.compose.ui.geometry.Rect +import com.artemchep.keyguard.ui.LocalComposeWindow + +@Composable +actual fun rememberShimmerBoundsWindow(): Rect { + val windowBounds = LocalComposeWindow.current.bounds + return remember(windowBounds) { + Rect( + 0f, + 0f, + windowBounds.width.toFloat(), + windowBounds.height.toFloat(), + ) + } +} diff --git a/common/src/desktopMain/kotlin/com/artemchep/keyguard/ui/theme/Theme.kt b/common/src/desktopMain/kotlin/com/artemchep/keyguard/ui/theme/Theme.kt new file mode 100644 index 00000000..59494b48 --- /dev/null +++ b/common/src/desktopMain/kotlin/com/artemchep/keyguard/ui/theme/Theme.kt @@ -0,0 +1,22 @@ +@file:JvmName("PlatformTheme") + +package com.artemchep.keyguard.ui.theme + +import androidx.compose.material3.ColorScheme +import androidx.compose.material3.darkColorScheme +import androidx.compose.material3.lightColorScheme +import androidx.compose.runtime.Composable +import androidx.compose.runtime.NonRestartableComposable + +@Composable +@NonRestartableComposable +actual fun appDynamicDarkColorScheme(): ColorScheme = darkColorScheme() + +@Composable +@NonRestartableComposable +actual fun appDynamicLightColorScheme(): ColorScheme = lightColorScheme() + +@Composable +actual fun SystemUiThemeEffect() { + // Do nothing. +} diff --git a/common/src/jvmMain/kotlin/com/artemchep/keyguard/copy/Base32ServiceJvm.kt b/common/src/jvmMain/kotlin/com/artemchep/keyguard/copy/Base32ServiceJvm.kt new file mode 100644 index 00000000..973da6bb --- /dev/null +++ b/common/src/jvmMain/kotlin/com/artemchep/keyguard/copy/Base32ServiceJvm.kt @@ -0,0 +1,16 @@ +package com.artemchep.keyguard.copy + +import com.artemchep.keyguard.common.service.text.Base32Service +import org.apache.commons.codec.binary.Base32 +import org.kodein.di.DirectDI + +class Base32ServiceJvm( +) : Base32Service { + private val delegate = Base32() + + constructor(directDI: DirectDI) : this() + + override fun encode(bytes: ByteArray): ByteArray = delegate.encode(bytes) + + override fun decode(bytes: ByteArray): ByteArray = delegate.decode(bytes) +} diff --git a/common/src/jvmMain/kotlin/com/artemchep/keyguard/copy/Base64ServiceJvm.kt b/common/src/jvmMain/kotlin/com/artemchep/keyguard/copy/Base64ServiceJvm.kt new file mode 100644 index 00000000..7cf49ca5 --- /dev/null +++ b/common/src/jvmMain/kotlin/com/artemchep/keyguard/copy/Base64ServiceJvm.kt @@ -0,0 +1,16 @@ +package com.artemchep.keyguard.copy + +import com.artemchep.keyguard.common.service.text.Base64Service +import org.apache.commons.codec.binary.Base64 +import org.kodein.di.DirectDI + +class Base64ServiceJvm( +) : Base64Service { + private val delegate = Base64() + + constructor(directDI: DirectDI) : this() + + override fun encode(bytes: ByteArray): ByteArray = delegate.encode(bytes) + + override fun decode(bytes: ByteArray): ByteArray = delegate.decode(bytes) +} diff --git a/common/src/jvmMain/kotlin/com/artemchep/keyguard/copy/DateFormatterAndroid.kt b/common/src/jvmMain/kotlin/com/artemchep/keyguard/copy/DateFormatterAndroid.kt new file mode 100644 index 00000000..a84e4452 --- /dev/null +++ b/common/src/jvmMain/kotlin/com/artemchep/keyguard/copy/DateFormatterAndroid.kt @@ -0,0 +1,36 @@ +package com.artemchep.keyguard.copy + +import com.artemchep.keyguard.common.usecase.DateFormatter +import kotlinx.datetime.Instant +import org.kodein.di.DirectDI +import java.text.DateFormat +import java.text.SimpleDateFormat +import java.util.Date + +class DateFormatterAndroid( +) : DateFormatter { + private val formatterDateTime = + DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.SHORT) + + private val formatterDate = DateFormat.getDateInstance(DateFormat.LONG) + private val formatterDateShort = SimpleDateFormat("MMMM yyyy") + + constructor(directDI: DirectDI) : this() + + override fun formatDateTime( + instant: Instant, + ): String { + val date = instant.toEpochMilliseconds().let(::Date) + return formatterDateTime.format(date) + } + + override fun formatDate(instant: Instant): String { + val date = instant.toEpochMilliseconds().let(::Date) + return formatterDate.format(date) + } + + override fun formatDateShort(instant: Instant): String { + val date = instant.toEpochMilliseconds().let(::Date) + return formatterDateShort.format(date) + } +} diff --git a/common/src/jvmMain/kotlin/com/artemchep/keyguard/copy/GetAppBuildDateImpl.kt b/common/src/jvmMain/kotlin/com/artemchep/keyguard/copy/GetAppBuildDateImpl.kt new file mode 100644 index 00000000..36d7ebab --- /dev/null +++ b/common/src/jvmMain/kotlin/com/artemchep/keyguard/copy/GetAppBuildDateImpl.kt @@ -0,0 +1,31 @@ +package com.artemchep.keyguard.copy + +import com.artemchep.keyguard.build.BuildKonfig +import com.artemchep.keyguard.common.usecase.DateFormatter +import com.artemchep.keyguard.common.usecase.GetAppBuildDate +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.flow +import kotlinx.datetime.Clock +import kotlinx.datetime.Instant +import org.kodein.di.DirectDI +import org.kodein.di.instance +import java.text.SimpleDateFormat + +class GetAppBuildDateImpl( + private val formatter: DateFormatter, +) : GetAppBuildDate { + constructor(directDI: DirectDI) : this( + formatter = directDI.instance(), + ) + + override fun invoke(): Flow = flow { + val instant = kotlin.run { + val dateFormat = SimpleDateFormat("yyyyMMdd") + val date = dateFormat.parse(BuildKonfig.buildDate)!! + Instant.fromEpochMilliseconds(date.time) + Clock.System.now() + } + val date = formatter.formatDate(instant) + emit(date) + } +} diff --git a/common/src/jvmMain/kotlin/com/artemchep/keyguard/copy/GetPasswordStrengthJvm.kt b/common/src/jvmMain/kotlin/com/artemchep/keyguard/copy/GetPasswordStrengthJvm.kt new file mode 100644 index 00000000..a4faaf34 --- /dev/null +++ b/common/src/jvmMain/kotlin/com/artemchep/keyguard/copy/GetPasswordStrengthJvm.kt @@ -0,0 +1,101 @@ +package com.artemchep.keyguard.copy + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.io.handleError +import com.artemchep.keyguard.common.io.ioEffect +import com.artemchep.keyguard.common.model.PasswordStrength +import com.artemchep.keyguard.common.service.wordlist.WordlistService +import com.artemchep.keyguard.common.usecase.GetPasswordStrength +import com.nulabinc.zxcvbn.Strength +import com.nulabinc.zxcvbn.Zxcvbn +import kotlinx.coroutines.Dispatchers +import org.kodein.di.DirectDI +import org.kodein.di.instance + +private const val PASSWORD_STRENGTH_VERSION = 2L + +class GetPasswordStrengthJvm( + private val wordlistService: WordlistService, +) : GetPasswordStrength { + private val specialCharacterRegex = "[^a-zA-Z0-9]".toRegex() + + private val digitCharacterRegex = "[0-9]".toRegex() + + private val zxcvbn by lazy(LazyThreadSafetyMode.SYNCHRONIZED) { + Zxcvbn() + } + + constructor(directDI: DirectDI) : this( + wordlistService = directDI.instance(), + ) + + override fun invoke( + password: String, + ): IO = ioEffect(Dispatchers.Default) { + val isPassphrase = passphraseStrengthIo(password) + .handleError { null } + .bind() + if (isPassphrase != null) { + return@ioEffect isPassphrase + } + + val result = zxcvbn.measure(password) + result.toDomain() + } + + private fun passphraseStrengthIo( + password: String, + ): IO = ioEffect(Dispatchers.Default) { + val parts = password + .split(specialCharacterRegex) + .filter { it.isNotEmpty() } + if (parts.size < 2) { + return@ioEffect null + } + // Minimum length of the word from the passphrase dictionary + // is 3 letters. + if (parts.any { it.length < 3 }) { + return@ioEffect null + } + + // Check the the first & last word matches + // the ones from the dictionary. + val wordList = wordlistService.get() + .bind() + + fun inWordList(word: String) = word + .replace(digitCharacterRegex, "") + .lowercase() in wordList + + val hasDigit = password.contains(digitCharacterRegex) + val isPassphrase = inWordList(parts.first()) && + inWordList(parts.last()) + if (!isPassphrase) { + return@ioEffect null + } + + val crackTime = when { + parts.size <= 3 -> 1000L + parts.size <= 4 -> + if (hasDigit) 1000000L else 100000L + + parts.size <= 5 -> + if (hasDigit) 100000000000L else 1000000L + + parts.size <= 6 -> + if (hasDigit) 100000000001L else 100000000000L + + else -> 100000000001L + } + PasswordStrength( + crackTimeSeconds = crackTime, + version = PASSWORD_STRENGTH_VERSION, + ) + } +} + +private fun Strength.toDomain(): PasswordStrength = PasswordStrength( + crackTimeSeconds = crackTimeSeconds.offlineSlowHashing1e4perSecond.toLong(), + version = PASSWORD_STRENGTH_VERSION, +) diff --git a/common/src/jvmMain/kotlin/com/artemchep/keyguard/copy/NumberFormatterJvm.kt b/common/src/jvmMain/kotlin/com/artemchep/keyguard/copy/NumberFormatterJvm.kt new file mode 100644 index 00000000..469c103d --- /dev/null +++ b/common/src/jvmMain/kotlin/com/artemchep/keyguard/copy/NumberFormatterJvm.kt @@ -0,0 +1,15 @@ +package com.artemchep.keyguard.copy + +import com.artemchep.keyguard.common.usecase.NumberFormatter +import org.kodein.di.DirectDI +import java.text.NumberFormat + +class NumberFormatterJvm( +) : NumberFormatter { + constructor(directDI: DirectDI) : this() + + override fun formatNumber(number: Int): String { + val format = NumberFormat.getNumberInstance() + return format.format(number) + } +} diff --git a/common/src/jvmMain/kotlin/com/artemchep/keyguard/copy/PasswordGeneratorDiceware.kt b/common/src/jvmMain/kotlin/com/artemchep/keyguard/copy/PasswordGeneratorDiceware.kt new file mode 100644 index 00000000..68e8831b --- /dev/null +++ b/common/src/jvmMain/kotlin/com/artemchep/keyguard/copy/PasswordGeneratorDiceware.kt @@ -0,0 +1,88 @@ +package com.artemchep.keyguard.copy + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.effectMap +import com.artemchep.keyguard.common.io.io +import com.artemchep.keyguard.common.io.map +import com.artemchep.keyguard.common.io.parallel +import com.artemchep.keyguard.common.model.PasswordGeneratorConfig +import com.artemchep.keyguard.common.service.crypto.CryptoGenerator +import com.artemchep.keyguard.common.service.wordlist.WordlistService +import com.artemchep.keyguard.common.usecase.GetPassphrase +import kotlinx.coroutines.Dispatchers +import org.kodein.di.DirectDI +import org.kodein.di.instance +import java.util.Locale + +class PasswordGeneratorDiceware( + private val wordlistService: WordlistService, + private val cryptoGenerator: CryptoGenerator, +) : GetPassphrase { + constructor( + directDI: DirectDI, + ) : this( + wordlistService = directDI.instance(), + cryptoGenerator = directDI.instance(), + ) + + override fun invoke( + config: PasswordGeneratorConfig.Passphrase, + ): IO = kotlin.run { + // Find which word should be replaced with a + // user-defined custom word. + val customWordIndex = cryptoGenerator.random(0 until config.length) + List(config.length) { + val generateWordIo = kotlin.run { + val useCustomWord = customWordIndex == it && + config.customWord != null + if (useCustomWord) { + val customWord = config.customWord + .orEmpty() + io(customWord) + } else generatePhraseIo() + } + generateWordIo + // capitalize + .map { phrase -> + if (config.capitalize) { + phrase.capitalize(Locale.US) + } else { + phrase + } + } + } + .parallel() + // include number + .map { phrases -> + if (!config.includeNumber) { + return@map phrases + } + + val targetIndex = cryptoGenerator.random(phrases.indices) + phrases + .mapIndexed { index, phrase -> + if (targetIndex == index) { + val range = when (config.length) { + 1 -> 1000..9999 + 2 -> 100..999 + else -> 10..99 + } + val number = cryptoGenerator.random(range) + phrase + number + } else { + phrase + } + } + } + .map { + it.joinToString(separator = config.delimiter) + } + } + + private fun generatePhraseIo() = wordlistService + .get() + .effectMap(Dispatchers.Default) { wordList -> + val index = cryptoGenerator.random(wordList.indices) + wordList[index] + } +} diff --git a/common/src/jvmMain/kotlin/com/artemchep/keyguard/copy/SimilarityServiceJvm.kt b/common/src/jvmMain/kotlin/com/artemchep/keyguard/copy/SimilarityServiceJvm.kt new file mode 100644 index 00000000..cc73af95 --- /dev/null +++ b/common/src/jvmMain/kotlin/com/artemchep/keyguard/copy/SimilarityServiceJvm.kt @@ -0,0 +1,25 @@ +package com.artemchep.keyguard.copy + +import com.artemchep.keyguard.common.service.similarity.SimilarityService +import net.ricecode.similarity.JaroWinklerStrategy +import net.ricecode.similarity.SimilarityStrategy +import net.ricecode.similarity.StringSimilarityService +import net.ricecode.similarity.StringSimilarityServiceImpl +import org.kodein.di.DirectDI + +class SimilarityServiceJvm( +) : SimilarityService { + private val service: StringSimilarityService = kotlin.run { + val strategy: SimilarityStrategy = JaroWinklerStrategy() + StringSimilarityServiceImpl(strategy) + } + + constructor( + directDI: DirectDI, + ) : this() + + override fun score( + a: String, + b: String, + ): Float = service.score(a, b).toFloat() +} diff --git a/common/src/jvmMain/kotlin/com/artemchep/keyguard/copy/download/DownloadClientJvm.kt b/common/src/jvmMain/kotlin/com/artemchep/keyguard/copy/download/DownloadClientJvm.kt new file mode 100644 index 00000000..5c7b865b --- /dev/null +++ b/common/src/jvmMain/kotlin/com/artemchep/keyguard/copy/download/DownloadClientJvm.kt @@ -0,0 +1,410 @@ +package com.artemchep.keyguard.copy.download + +import arrow.core.left +import arrow.core.right +import com.artemchep.keyguard.android.downloader.journal.room.DownloadInfoEntity2 +import com.artemchep.keyguard.common.exception.HttpException +import com.artemchep.keyguard.common.io.throwIfFatalOrCancellation +import com.artemchep.keyguard.common.service.crypto.FileEncryptor +import com.artemchep.keyguard.common.service.download.DownloadProgress +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import io.ktor.http.HttpStatusCode +import io.ktor.utils.io.core.use +import kotlinx.collections.immutable.persistentMapOf +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.ExperimentalCoroutinesApi +import kotlinx.coroutines.SupervisorJob +import kotlinx.coroutines.cancel +import kotlinx.coroutines.cancelAndJoin +import kotlinx.coroutines.channels.ProducerScope +import kotlinx.coroutines.coroutineScope +import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.Flow +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.SharingStarted +import kotlinx.coroutines.flow.channelFlow +import kotlinx.coroutines.flow.collect +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.emitAll +import kotlinx.coroutines.flow.flatMapConcat +import kotlinx.coroutines.flow.flatMapLatest +import kotlinx.coroutines.flow.flow +import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.onEach +import kotlinx.coroutines.flow.onStart +import kotlinx.coroutines.flow.shareIn +import kotlinx.coroutines.flow.transformWhile +import kotlinx.coroutines.isActive +import kotlinx.coroutines.launch +import kotlinx.coroutines.plus +import kotlinx.coroutines.withContext +import okhttp3.OkHttpClient +import okhttp3.Request +import org.kodein.di.DirectDI +import org.kodein.di.instance +import java.io.File +import java.io.IOException + +abstract class DownloadClientJvm( + private val cacheDirProvider: CacheDirProvider, + private val windowCoroutineScope: WindowCoroutineScope, + private val okHttpClient: OkHttpClient, + private val fileEncryptor: FileEncryptor, +) { + companion object { + private const val DOWNLOAD_PROGRESS_POOLING_PERIOD_MS = 1000L + } + + fun interface CacheDirProvider { + suspend fun get(): File + } + + private data class PoolEntry( + val subscribersCount: Int, + val downloadId: String, + val url: String, + val tag: DownloadInfoEntity2.AttachmentDownloadTag, + val file: File, + val fileKey: ByteArray?, + val flow: Flow, + ) + + private val sink = + MutableStateFlow(persistentMapOf()) + + private val flowOfNone = flowOf(DownloadProgress.None) + + constructor( + directDI: DirectDI, + cacheDirProvider: CacheDirProvider, + ) : this( + cacheDirProvider = cacheDirProvider, + windowCoroutineScope = directDI.instance(), + okHttpClient = directDI.instance(), + fileEncryptor = directDI.instance(), + ) + + private fun fileStatusBy(predicate: (PoolEntry) -> Boolean) = sink + .map { state -> + val entryOrNull = state.values.firstOrNull(predicate) + entryOrNull?.flow + ?: flowOfNone + } + .distinctUntilChanged() + .flatMapLatest { it } + + fun fileStatusByDownloadId(downloadId: String) = fileStatusBy { it.downloadId == downloadId } + + fun fileStatusByTag(tag: DownloadInfoEntity2.AttachmentDownloadTag) = + fileStatusBy { it.tag == tag } + + @OptIn(ExperimentalCoroutinesApi::class) + fun fileLoader( + downloadId: String, + url: String, + tag: DownloadInfoEntity2.AttachmentDownloadTag, + file: File, + fileKey: ByteArray? = null, + cancelFlow: Flow, + ): Flow = flow { + try { + synchronized(sink) { + fun createEntry() = kotlin.run { + val sharedDownloadScope = windowCoroutineScope + SupervisorJob() + val sharedDownloadFlow = flow { + val internalFlow = internalFileLoader( + url = url, + file = file, + fileId = downloadId, + fileKey = fileKey, + ) + + coroutineScope { + // Listen to the cancellation flow and cancel the + // scope on any event. + cancelFlow + .onEach { sharedDownloadScope.cancel() } + .launchIn(this) + + emitAll(internalFlow) + } + }.shareIn(sharedDownloadScope, SharingStarted.Eagerly, replay = 1) + val cancellableDownloadFlow = channelFlow { + val job = sharedDownloadScope.launch { + try { + sharedDownloadFlow + .onEach { status -> send(status) } + .collect() + } finally { + // The scope is dead, but the flow is still alive, therefore + // someone has canceled the scope. + if (!this@channelFlow.isClosedForSend) { + val event = DownloadProgress.Complete( + result = RuntimeException("Canceled").left(), + ) + trySend(event) + } + } + } + + job.join() + } + .transformWhile { progress -> + emit(progress) // always emit progress + progress is DownloadProgress.Loading + } + PoolEntry( + subscribersCount = 0, + downloadId = downloadId, + url = url, + tag = tag, + file = file, + fileKey = fileKey, + flow = cancellableDownloadFlow, + ) + } + + val pool = sink.value + var value = pool.getOrElse(tag) { + createEntry() + } + if (!value.fileKey.contentEquals(fileKey)) { + // TODO: Cancel previous flow and clear existing files if + // needed! + // This should never happen, the file key has changed while + // we were loading the file. + value = createEntry() + } + // Increment the number of subscribers. + val newSubscribersCount = value.subscribersCount + 1 + val newValue = value.copy(subscribersCount = newSubscribersCount) + val newPool = pool.put(tag, newValue) + sink.value = newPool + // return the flow + newValue.flow + } + .collect(this) + } finally { + synchronized(sink) { + val pool = sink.value + val value = pool.getValue(tag) + val subscribersCount = value.subscribersCount - 1 + require(subscribersCount >= 0) { + "Active subscribers count of '$downloadId' is less than zero!" + } + + val newPool = when (subscribersCount) { + 0 -> pool.remove(tag) + else -> { + val newSubscribersCount = value.subscribersCount - 1 + pool.put(tag, value.copy(subscribersCount = newSubscribersCount)) + } + } + sink.value = newPool + } + } + } + + private fun internalFileLoader( + url: String, + file: File, + fileId: String, + fileKey: ByteArray? = null, + ): Flow = flow { + val exists = file.exists() + if (exists) { + // No need to download anything, the file is + // already available locally. + val f = flow { + val result = file.right() + emit(DownloadProgress.Complete(result)) + } + emitAll(f) + return@flow + } + file.parentFile?.mkdirs() + + val f = channelFlow { + val result = try { + val cacheFileRelativePath = "download_cache/$fileId.download" + val cacheFile = cacheDirProvider.get().resolve(cacheFileRelativePath) + flap( + src = url, + dst = cacheFile, + ) + } catch (e: Exception) { + e.throwIfFatalOrCancellation() + + val result = e.left() + DownloadProgress.Complete( + result = result, + ) + } + send(result) + } + .flatMapConcat { event -> + println("events $event") + when (event) { + is DownloadProgress.Complete -> + event.result + .fold( + ifLeft = { + flowOf(event) + }, + ifRight = { tmpFile -> + // Decrypt the file and move it to the final + // destination. + flow { + emit(DownloadProgress.Loading()) + val result = kotlin + .runCatching { + tmpFile.decryptAndMove( + dst = file, + key = fileKey, + ) + } + .fold( + onFailure = { e -> + e.printStackTrace() + e.left() + }, + onSuccess = { + file.right() + }, + ) + emit(DownloadProgress.Complete(result)) + } + }, + ) + + is DownloadProgress.Loading -> flowOf(event) + is DownloadProgress.None -> flowOf(event) + } + } + emitAll(f) + } + .onStart { + val initialState = DownloadProgress.Loading() + emit(initialState) + } + + // TODO: What if SRC file is DST file?? + private suspend fun File.decryptAndMove( + dst: File, + key: ByteArray? = null, + ) = withContext(Dispatchers.IO) { + // If there's nothing to decrypt and the file + // matches destination then we are done here. + val sameFile = this@decryptAndMove == dst + if (sameFile && key == null) { + return@withContext + } + + dst.parentFile?.mkdirs() + + if (key != null) { + dst.delete() + inputStream() + .use { fis -> + val ctis = fileEncryptor.decode( + input = fis, + key = key, + ) + ctis.use { i -> + dst.outputStream().use { o -> + i.copyTo(o) + } + } + } + } else { + copyTo(dst, overwrite = true) + } + + if (!sameFile) this@decryptAndMove.delete() + } + + private suspend fun ProducerScope.flap( + src: String, + dst: File, + ): DownloadProgress.Complete { + val response = kotlin.run { + val request = Request.Builder() + .get() + .url(src) + .build() + okHttpClient.newCall(request).execute() + } + if (!response.isSuccessful) { + val exception = HttpException( + statusCode = HttpStatusCode.fromValue(response.code), + m = response.message, + e = null, + ) + val result = exception.left() + return DownloadProgress.Complete( + result = result, + ) + } + val responseBody = response.body + ?: throw IOException("File is not available!") + + // + // Check if the file is already loaded + // + + val dstContentLength = dst.length() + val srcContentLength = responseBody.contentLength() + if (dstContentLength == srcContentLength) { + val result = dst.right() + return DownloadProgress.Complete( + result = result, + ) + } + + dst.delete() + dst.parentFile?.mkdirs() + + coroutineScope { + var totalBytesWritten = 0L + + val monitorJob = launch { + delay(DOWNLOAD_PROGRESS_POOLING_PERIOD_MS / 2) + while (isActive) { + val event = DownloadProgress.Loading( + downloaded = totalBytesWritten, + total = srcContentLength, + ) + trySend(event) + + // Wait a bit before the next status update. + delay(DOWNLOAD_PROGRESS_POOLING_PERIOD_MS) + } + } + + withContext(Dispatchers.IO) { + responseBody.byteStream().use { inputStream -> + dst.outputStream().use { outputStream -> + val buffer = ByteArray(DEFAULT_BUFFER_SIZE) + while (true) { + val bytes = inputStream.read(buffer) + if (bytes != -1) { + outputStream.write(buffer, 0, bytes) + totalBytesWritten += bytes + } else { + break + } + } + } + } + } + monitorJob.cancelAndJoin() + } + + val result = dst.right() + return DownloadProgress.Complete( + result = result, + ) + } +} diff --git a/common/src/jvmMain/kotlin/com/artemchep/keyguard/core/session/util/EncodeByCipher.kt b/common/src/jvmMain/kotlin/com/artemchep/keyguard/core/session/util/EncodeByCipher.kt new file mode 100644 index 00000000..c32b3b00 --- /dev/null +++ b/common/src/jvmMain/kotlin/com/artemchep/keyguard/core/session/util/EncodeByCipher.kt @@ -0,0 +1,19 @@ +package com.artemchep.keyguard.core.session.util + +import com.artemchep.keyguard.common.io.IO +import com.artemchep.keyguard.common.io.effectMap +import com.artemchep.keyguard.common.io.flatMap +import com.artemchep.keyguard.platform.LeCipher +import kotlinx.coroutines.Dispatchers + +actual fun ByteArray.encode(cipher: IO) = cipher + .effectMap(Dispatchers.Default) { c -> + synchronized(c) { + c.doFinal(this) + } + } + +actual fun IO.encode(cipher: IO) = this + .flatMap { bytes -> + bytes.encode(cipher) + } diff --git a/common/src/jvmMain/kotlin/com/artemchep/keyguard/crypto/CipherEncryptorImpl.kt b/common/src/jvmMain/kotlin/com/artemchep/keyguard/crypto/CipherEncryptorImpl.kt new file mode 100644 index 00000000..6d64ea87 --- /dev/null +++ b/common/src/jvmMain/kotlin/com/artemchep/keyguard/crypto/CipherEncryptorImpl.kt @@ -0,0 +1,545 @@ +package com.artemchep.keyguard.crypto + +import com.artemchep.keyguard.common.exception.DecodeException +import com.artemchep.keyguard.common.service.crypto.CipherEncryptor +import com.artemchep.keyguard.common.service.crypto.CryptoGenerator +import com.artemchep.keyguard.common.service.text.Base64Service +import com.artemchep.keyguard.provider.bitwarden.crypto.AsymmetricCryptoKey +import com.artemchep.keyguard.provider.bitwarden.crypto.DecodeResult +import com.artemchep.keyguard.provider.bitwarden.crypto.SymmetricCryptoKey2 +import org.bouncycastle.asn1.ASN1Sequence +import org.bouncycastle.asn1.pkcs.PrivateKeyInfo +import org.bouncycastle.asn1.pkcs.RSAPublicKey +import org.bouncycastle.crypto.AsymmetricBlockCipher +import org.bouncycastle.crypto.BufferedBlockCipher +import org.bouncycastle.crypto.CipherParameters +import org.bouncycastle.crypto.digests.SHA1Digest +import org.bouncycastle.crypto.encodings.OAEPEncoding +import org.bouncycastle.crypto.engines.AESEngine +import org.bouncycastle.crypto.engines.RSAEngine +import org.bouncycastle.crypto.modes.CBCBlockCipher +import org.bouncycastle.crypto.paddings.PKCS7Padding +import org.bouncycastle.crypto.paddings.PaddedBufferedBlockCipher +import org.bouncycastle.crypto.params.KeyParameter +import org.bouncycastle.crypto.params.ParametersWithIV +import org.bouncycastle.crypto.params.RSAKeyParameters +import org.bouncycastle.crypto.params.RSAPrivateCrtKeyParameters +import org.bouncycastle.crypto.util.PrivateKeyFactory +import org.bouncycastle.crypto.util.PublicKeyFactory +import org.bouncycastle.crypto.util.SubjectPublicKeyInfoFactory +import org.kodein.di.DirectDI +import org.kodein.di.instance + +class CipherEncryptorImpl( + private val cryptoGenerator: CryptoGenerator, + private val base64Service: Base64Service, +) : CipherEncryptor { + companion object { + private const val CIPHER_DIVIDER = "|" + } + + constructor( + directDI: DirectDI, + ) : this( + cryptoGenerator = directDI.instance(), + base64Service = directDI.instance(), + ) + + override fun decode2( + cipher: String, + symmetricCryptoKey: SymmetricCryptoKey2?, + asymmetricCryptoKey: AsymmetricCryptoKey?, + ): DecodeResult = kotlin.runCatching { + performDecode( + cipher = cipher, + symmetricCryptoKey = symmetricCryptoKey, + asymmetricCryptoKey = asymmetricCryptoKey, + ) + }.getOrElse { e -> + val msg = kotlin.run { + val cipherSeq = cipher + .splitToSequence(".", limit = 1) + .firstOrNull() + "Failed to decode a cipher-text '${cipherSeq.orEmpty()}.???'!" + } + throw DecodeException(msg, e) + } + + private fun performDecode( + cipher: String, + symmetricCryptoKey: SymmetricCryptoKey2?, + asymmetricCryptoKey: AsymmetricCryptoKey?, + ): DecodeResult { + // The string must have a following format: + // {cipher-type-raw}.{cipher-content} + val cipherSeq = cipher + .splitToSequence(".", limit = 3) + .toList() + require(cipherSeq.size == 2) { + val c = cipherSeq + .dropLast(1) + .joinToString(separator = ".") { it } + "Cipher-text '$c.???' is not valid!" + } + val (cipherTypeRaw, cipherContent) = cipherSeq + val cipherType = CipherEncryptor.Type.values() + .firstOrNull { it.type == cipherTypeRaw } + ?: error("Cipher type $cipherTypeRaw is not supported!") + val cipherArgs = cipherContent + .split(CIPHER_DIVIDER) + .map { base64 -> + base64Service.decode(base64) + } + + fun requireSymmetricCryptoKey() = + requireNotNull(symmetricCryptoKey) { + "Symmetric Crypto Key must not be null, " + + "for decoding $cipherType." + } + + val data = when (cipherType) { + // + // Symmetric + // + + CipherEncryptor.Type.AesCbc256_B64 -> { + val baseKey = requireSymmetricCryptoKey() + kotlin + .runCatching { + val cryptoKey = baseKey.requireAesCbc256_B64() + decodeAesCbc256_B64(cipherArgs, encKey = cryptoKey.encKey) + } + .getOrElse { + // Try to fallback to decoding with a mac key. + val cryptoKey = baseKey.requireAesCbc256_HmacSha256_B64() + decodeAesCbc256_B64( + cipherArgs, + encKey = cryptoKey.encKey, + ) + } + } + + CipherEncryptor.Type.AesCbc128_HmacSha256_B64 -> { + val cryptoKey = requireSymmetricCryptoKey().requireAesCbc128_HmacSha256_B64() + decodeAesCbc128_HmacSha256_B64( + cipherArgs, + encKey = cryptoKey.encKey, + macKey = cryptoKey.macKey, + ) + } + + CipherEncryptor.Type.AesCbc256_HmacSha256_B64 -> { + val baseKey = requireSymmetricCryptoKey() + kotlin + .runCatching { + val cryptoKey = baseKey.requireAesCbc256_HmacSha256_B64() + decodeAesCbc256_HmacSha256_B64( + cipherArgs, + encKey = cryptoKey.encKey, + macKey = cryptoKey.macKey, + ) + } + .getOrElse { + // Try to fallback to decoding without mac key. + val cryptoKey = kotlin.run { + val rawKey = baseKey.data + .sliceArray(0 until 32) + SymmetricCryptoKey2.Crypto( + encKey = rawKey, + ) + } + decodeAesCbc256_B64( + cipherArgs, + encKey = cryptoKey.encKey, + ) + } + } + + // + // Asymmetric + // + + CipherEncryptor.Type.Rsa2048_OaepSha256_B64 -> { + requireNotNull(asymmetricCryptoKey) { + "Asymmetric Crypto Key must not be null, " + + "for decoding $cipherType." + } + + decodeRsa2048_OaepSha256_B64( + cipherContent, + privateKey = asymmetricCryptoKey.privateKey, + ) + } + + CipherEncryptor.Type.Rsa2048_OaepSha1_B64 -> { + requireNotNull(asymmetricCryptoKey) { + "Asymmetric Crypto Key must not be null, " + + "for decoding $cipherType." + } + + decodeRsa2048_OaepSha1_B64( + cipherContent, + privateKey = asymmetricCryptoKey.privateKey, + ) + } + + CipherEncryptor.Type.Rsa2048_OaepSha256_HmacSha256_B64 -> { + TODO("Decoding cipher type $cipherType is not supported yet.") + } + + CipherEncryptor.Type.Rsa2048_OaepSha1_HmacSha256_B64 -> { + TODO("Decoding cipher type $cipherType is not supported yet.") + } + } + return DecodeResult( + data = data, + type = cipherType, + ) + } + + private fun decodeAesCbc256_B64( + args: List, + encKey: ByteArray, + ): ByteArray { + check(args.size >= 2) { + "The cipher must consist of exactly 2 parts: iv, ct. The current cipher " + + "contains ${args.size} parts which may cause unknown behaviour!" + } + val (iv, ct) = args + return decodeAesCbc256_HmacSha256_B64( + iv = iv, + ct = ct, + encKey = encKey, + ) + } + + private fun decodeAesCbc128_HmacSha256_B64( + args: List, + encKey: ByteArray, + macKey: ByteArray, + ): ByteArray { + require(encKey.size == 16) { + "Aes-Cbc-128 requires a 16-byte key!" + } + return decodeAesCbc256_HmacSha256_B64( + args = args, + encKey = encKey, + macKey = macKey, + ) + } + + private fun decodeAesCbc256_HmacSha256_B64( + args: List, + encKey: ByteArray, + macKey: ByteArray, + ): ByteArray { + check(args.size == 3) { + "The cipher must consist of exactly 3 parts: iv, ct, mac. The current cipher " + + "contains ${args.size} parts which may cause unknown behaviour!" + } + val (iv, ct, mac) = args + // Check if the mac matches the provided one, otherwise + // the cipher has been corrupted. +// val computedMac = kotlin.run { +// val macData = iv + ct +// cryptoGenerator.hmacSha256(macKey, macData) +// } +// if (!computedMac.contentEquals(mac)) { +// error("Message authentication codes do not match!") +// } + return decodeAesCbc256_HmacSha256_B64( + iv = iv, + ct = ct, + encKey = encKey, + ) + } + + private fun decodeAesCbc256_HmacSha256_B64( + iv: ByteArray, + ct: ByteArray, + encKey: ByteArray, + ): ByteArray { + val aes = createAesCbc(iv, encKey, forEncryption = false) + return cipherData(aes, ct) + } + + private fun createAesCbc( + iv: ByteArray, + key: ByteArray, + forEncryption: Boolean, + ) = kotlin.run { + val aes = PaddedBufferedBlockCipher( + CBCBlockCipher( + AESEngine(), + ), + PKCS7Padding(), + ) + val ivAndKey: CipherParameters = ParametersWithIV(KeyParameter(key), iv) + aes.init(forEncryption, ivAndKey) + aes + } + + @Throws(Exception::class) + private fun cipherData(cipher: BufferedBlockCipher, data: ByteArray): ByteArray { + val minSize = cipher.getOutputSize(data.size) + val outBuf = ByteArray(minSize) + val length1 = cipher.processBytes(data, 0, data.size, outBuf, 0) + val length2 = cipher.doFinal(outBuf, length1) + val actualLength = length1 + length2 + val result = ByteArray(actualLength) + System.arraycopy(outBuf, 0, result, 0, result.size) + return result + } + + private fun decodeRsa2048_OaepSha256_B64( + cipher: String, + privateKey: ByteArray, + ): ByteArray = kotlin.run { + val (rsaCt) = cipher + .split(CIPHER_DIVIDER) + .apply { + check(size == 1) { + "The cipher must consist of exactly 1 part: rsaCt. The current cipher " + + "contains $size parts which may cause unknown behaviour!" + } + } + .map { base64 -> + base64Service.decode(base64) + } + TODO() + } + + private fun decodeRsa2048_OaepSha1_B64( + cipher: String, + privateKey: ByteArray, + ): ByteArray = kotlin.run { + val (rsaCt) = cipher + .split(CIPHER_DIVIDER) + .apply { + check(size == 1) { + "The cipher must consist of exactly 1 part: rsaCt. The current cipher " + + "contains $size parts which may cause unknown behaviour!" + } + } + .map { base64 -> + base64Service.decode(base64) + } + + val a = ASN1Sequence.fromByteArray(privateKey) + val b = PrivateKeyInfo.getInstance(a) + val d = PrivateKeyFactory.createKey(b) as RSAPrivateCrtKeyParameters + val pub = RSAKeyParameters(false, d.modulus, d.publicExponent) +// public Task RsaExtractPublicKeyAsync(byte[] privateKey) +// { +// // Have to specify some algorithm +// var provider = AsymmetricKeyAlgorithmProvider.OpenAlgorithm(AsymmetricAlgorithm.RsaOaepSha1); +// var cryptoKey = provider.ImportKeyPair(privateKey, CryptographicPrivateKeyBlobType.Pkcs8RawPrivateKeyInfo); +// return Task.FromResult(cryptoKey.ExportPublicKey(CryptographicPublicKeyBlobType.X509SubjectPublicKeyInfo)); +// } + + val q1 = SubjectPublicKeyInfoFactory.createSubjectPublicKeyInfo(pub) + + val pubKey = RSAPublicKey.getInstance(q1.parsePublicKey()) + val p = PublicKeyFactory.createKey(q1) + val fm = ubyteArrayOf( + 48u, + 130u, + 1u, + 34u, + 48u, + 13u, + 6u, + 9u, + 42u, + 134u, + 72u, + 134u, + 247u, + 13u, + 1u, + 1u, + 1u, + 5u, + 0u, + 3u, + 130u, + 1u, + 15u, + 0u, + ) + // "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5CsnpH25EPMguTAvnlW807PSM3o3RBjsCCzdNm3VNgK1Z4JSMyGnFOZq9ZZRHArV3kIYYGDZiP5kn5jw6g2XyBUbpLXw87N8jtzTENOuoUr+zQfKQX/H9w006bvENlm7LhTzL0SQbhcdzs1amqxajtzAS92YtOXizAGsYl8SieGl8OVYZNP3mbpsUpAtD/XtiDGxVo23yQ39w/6X3VYo6wYO2QY9aNCYDcLYYJ2D0y/2ocdD/QvibIVz7+4eA15p8HDWm++o9BlwZL9xZbk4x3DwWWz5Gy7hZk/tNpUgnqWFToxCRBgcMlBaI2VH6jX1ZxhUBXpEkK++n4Yz4BjRcQIDAQAB" + // "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5CsnpH25EPMguTAvnlW807PSM3o3RBjsCCzdNm3VNgK1Z4JSMyGnFOZq9ZZRHArV3kIYYGDZiP5kn5jw6g2XyBUbpLXw87N8jtzTENOuoUr+zQfKQX/H9w006bvENlm7LhTzL0SQbhcdzs1amqxajtzAS92YtOXizAGsYl8SieGl8OVYZNP3mbpsUpAtD/XtiDGxVo23yQ39w/6X3VYo6wYO2QY9aNCYDcLYYJ2D0y/2ocdD/QvibIVz7+4eA15p8HDWm++o9BlwZL9xZbk4x3DwWWz5Gy7hZk/tNpUgnqWFToxCRBgcMlBaI2VH6jX1ZxhUBXpEkK++n4Yz4BjRcQIDAQAB" + + val oaep = OAEPEncoding( + RSAEngine(), + SHA1Digest(), + SHA1Digest(), + null, + ) + oaep.init(false, d) + val f = cipherData(oaep, rsaCt) + f + } + + @Throws(Exception::class) + private fun cipherData(cipher: AsymmetricBlockCipher, data: ByteArray): ByteArray { + val result = cipher.processBlock(data, 0, data.size) + return result + } + + private fun decodeRsa2048_OaepSha256_HmacSha256_B64( + cipher: String, + encKey: ByteArray, + macKey: ByteArray, + privateKey: ByteArray, + ): ByteArray = TODO() + + private fun decodeRsa2048_OaepSha1_HmacSha256_B64( + cipher: String, + encKey: ByteArray, + macKey: ByteArray, + privateKey: ByteArray, + ): ByteArray = TODO() + + override fun encode2( + cipherType: CipherEncryptor.Type, + plainText: ByteArray, + symmetricCryptoKey: SymmetricCryptoKey2?, + asymmetricCryptoKey: AsymmetricCryptoKey?, + ): String { + val artifacts = when (cipherType) { + // + // Symmetric + // + + CipherEncryptor.Type.AesCbc256_B64 -> { + requireNotNull(symmetricCryptoKey) { + "Symmetric Crypto Key must not be null, " + + "for encoding $cipherType." + } + val cryptoKey = symmetricCryptoKey.requireAesCbc256_B64() + encodeAesCbc256_B64(plainText, encKey = cryptoKey.encKey) + } + + CipherEncryptor.Type.AesCbc128_HmacSha256_B64 -> { + requireNotNull(symmetricCryptoKey) { + "Symmetric Crypto Key must not be null, " + + "for encoding $cipherType." + } + val cryptoKey = symmetricCryptoKey.requireAesCbc128_HmacSha256_B64() + encodeAesCbc128_HmacSha256_B64( + plainText = plainText, + encKey = cryptoKey.encKey, + macKey = cryptoKey.macKey, + ) + } + + CipherEncryptor.Type.AesCbc256_HmacSha256_B64 -> { + requireNotNull(symmetricCryptoKey) { + "Symmetric Crypto Key must not be null, " + + "for encoding $cipherType." + } + val cryptoKey = symmetricCryptoKey.requireAesCbc256_HmacSha256_B64() + encodeAesCbc256_HmacSha256_B64( + plainText = plainText, + encKey = cryptoKey.encKey, + macKey = cryptoKey.macKey, + ) + } + + // + // Asymmetric + // + + CipherEncryptor.Type.Rsa2048_OaepSha256_B64 -> { + requireNotNull(asymmetricCryptoKey) { + "Asymmetric Crypto Key must not be null, " + + "for encoding $cipherType." + } + + TODO("Encoding cipher type $cipherType is not supported yet.") + } + + CipherEncryptor.Type.Rsa2048_OaepSha1_B64 -> { + TODO("Encoding cipher type $cipherType is not supported yet.") + } + + CipherEncryptor.Type.Rsa2048_OaepSha256_HmacSha256_B64 -> { + TODO("Encoding cipher type $cipherType is not supported yet.") + } + + CipherEncryptor.Type.Rsa2048_OaepSha1_HmacSha256_B64 -> { + TODO("Encoding cipher type $cipherType is not supported yet.") + } + } + val artifactsStr = artifacts + .joinToString(separator = CIPHER_DIVIDER) { bytes -> + base64Service + .encodeToString(bytes) + } + return cipherType.type + "." + artifactsStr + } + + private fun encodeAesCbc256_B64( + plainText: ByteArray, + iv: ByteArray = cryptoGenerator.seed(16), + encKey: ByteArray, + ): List { + val aes = createAesCbc(iv, encKey, forEncryption = true) + val ct = cipherData(aes, plainText) + return listOf(iv, ct) + } + + private fun encodeAesCbc128_HmacSha256_B64( + plainText: ByteArray, + iv: ByteArray = cryptoGenerator.seed(16), + encKey: ByteArray, + macKey: ByteArray, + ): List { + require(encKey.size == 16) { + "Aes-Cbc-128 requires a 16-byte key!" + } + return encodeAesCbc256_HmacSha256_B64( + plainText = plainText, + iv = iv, + encKey = encKey, + macKey = macKey, + ) + } + + private fun encodeAesCbc256_HmacSha256_B64( + plainText: ByteArray, + iv: ByteArray = cryptoGenerator.seed(16), + encKey: ByteArray, + macKey: ByteArray, + ): List { + val aes = createAesCbc(iv, encKey, forEncryption = true) + val ct = cipherData(aes, plainText) + val mac = cryptoGenerator.hmacSha256(macKey, iv + ct) + return listOf(iv, ct, mac) + } + + private fun encodeRsa2048_OaepSha256_B64( + plainText: ByteArray, + encKey: ByteArray, + publicKey: ByteArray, + ): List = TODO() + + private fun encodeRsa2048_OaepSha1_B64( + plainText: ByteArray, + encKey: ByteArray, + publicKey: ByteArray, + ): List = TODO() + + private fun encodeRsa2048_OaepSha256_HmacSha256_B64( + plainText: ByteArray, + encKey: ByteArray, + publicKey: ByteArray, + ): List = TODO() + + private fun encodeRsa2048_OaepSha1_HmacSha256_B64( + plainText: ByteArray, + encKey: ByteArray, + publicKey: ByteArray, + ): List = TODO() +} diff --git a/common/src/jvmMain/kotlin/com/artemchep/keyguard/crypto/CipherInputStream2.kt b/common/src/jvmMain/kotlin/com/artemchep/keyguard/crypto/CipherInputStream2.kt new file mode 100644 index 00000000..dbc2a62d --- /dev/null +++ b/common/src/jvmMain/kotlin/com/artemchep/keyguard/crypto/CipherInputStream2.kt @@ -0,0 +1,268 @@ +package com.artemchep.keyguard.crypto + +import org.bouncycastle.crypto.DataLengthException +import org.bouncycastle.crypto.InvalidCipherTextException +import org.bouncycastle.util.Arrays +import java.io.FilterInputStream +import java.io.IOException +import java.io.InputStream + +/** + * A CipherInputStream is composed of an InputStream and a cipher so that read() methods return data + * that are read in from the underlying InputStream but have been additionally processed by the + * Cipher. The cipher must be fully initialized before being used by a CipherInputStream. + * + * + * For example, if the Cipher is initialized for decryption, the + * CipherInputStream will attempt to read in data and decrypt them, + * before returning the decrypted data. + */ +class CipherInputStream2 @JvmOverloads constructor( + `is`: InputStream?, + private val decoder: Decoder, + bufSize: Int = INPUT_BUF_SIZE, +) : FilterInputStream(`is`) { + interface Decoder { + @Throws(DataLengthException::class, IllegalStateException::class) + fun processBytes( + `in`: ByteArray, + inOff: Int, + len: Int, + out: ByteArray, + outOff: Int, + ): Int + + @Throws( + DataLengthException::class, + IllegalStateException::class, + InvalidCipherTextException::class, + ) + fun doFinal( + out: ByteArray, + outOff: Int, + ): Int + + fun getOutputSize( + length: Int, + ): Int + + fun getUpdateOutputSize( + length: Int, + ): Int + } + + private val inBuf: ByteArray + private var buf: ByteArray? = null + private var bufOff = 0 + private var maxBuf = 0 + private var finalized = false + + init { + inBuf = ByteArray(bufSize) + } + + /** + * Read data from underlying stream and process with cipher until end of stream or some data is + * available after cipher processing. + * + * @return -1 to indicate end of stream, or the number of bytes (> 0) available. + */ + @Throws(IOException::class) + private fun nextChunk(): Int { + if (finalized) { + return -1 + } + bufOff = 0 + maxBuf = 0 + + // Keep reading until EOF or cipher processing produces data + while (maxBuf == 0) { + val read = `in`.read(inBuf) + if (read == -1) { + finaliseCipher() + return if (maxBuf == 0) { + -1 + } else { + maxBuf + } + } + maxBuf = try { + ensureCapacity(read, false) + decoder.processBytes(inBuf, 0, read, buf!!, 0) + } catch (e: Exception) { + throw IOException("Error processing stream ", e) + } + } + return maxBuf + } + + @Throws(IOException::class) + private fun finaliseCipher() { + try { + finalized = true + ensureCapacity(0, true) + maxBuf = decoder.doFinal(buf!!, 0) + } catch (e: InvalidCipherTextException) { + throw IOException("Error finalising cipher", e) + } catch (e: Exception) { + throw IOException("Error finalising cipher ", e) + } + } + + /** + * Reads data from the underlying stream and processes it with the cipher until the cipher + * outputs data, and returns the next available byte. + * + * + * If the underlying stream is exhausted by this call, the cipher will be finalised. + * + * + * @throws IOException if there was an error closing the input stream. + * @throws IOException if the data read from the stream was invalid ciphertext + * (e.g. the cipher is an AEAD cipher and the ciphertext tag check fails). + */ + @Throws(IOException::class) + override fun read(): Int { + if (bufOff >= maxBuf) { + if (nextChunk() < 0) { + return -1 + } + } + return buf!![bufOff++].toInt() and 0xff + } + + /** + * Reads data from the underlying stream and processes it with the cipher until the cipher + * outputs data, and then returns up to `b.length` bytes in the provided array. + * + * + * If the underlying stream is exhausted by this call, the cipher will be finalised. + * + * + * @param b the buffer into which the data is read. + * @return the total number of bytes read into the buffer, or `-1` if there is no + * more data because the end of the stream has been reached. + * @throws IOException if there was an error closing the input stream. + * @throws IOException if the data read from the stream was invalid ciphertext + * (e.g. the cipher is an AEAD cipher and the ciphertext tag check fails). + */ + @Throws(IOException::class) + override fun read( + b: ByteArray, + ): Int { + return read(b, 0, b.size) + } + + /** + * Reads data from the underlying stream and processes it with the cipher until the cipher + * outputs data, and then returns up to `len` bytes in the provided array. + * + * + * If the underlying stream is exhausted by this call, the cipher will be finalised. + * + * + * @param b the buffer into which the data is read. + * @param off the start offset in the destination array `b` + * @param len the maximum number of bytes read. + * @return the total number of bytes read into the buffer, or `-1` if there is no + * more data because the end of the stream has been reached. + * @throws IOException if there was an error closing the input stream. + * @throws IOException if the data read from the stream was invalid ciphertext + * (e.g. the cipher is an AEAD cipher and the ciphertext tag check fails). + */ + @Throws(IOException::class) + override fun read( + b: ByteArray, + off: Int, + len: Int, + ): Int { + if (bufOff >= maxBuf) { + if (nextChunk() < 0) { + return -1 + } + } + val toSupply = Math.min(len, available()) + System.arraycopy(buf!!, bufOff, b, off, toSupply) + bufOff += toSupply + return toSupply + } + + @Throws(IOException::class) + override fun skip(n: Long): Long { + throw IOException("skip(n) is not supported!") + } + + @Throws(IOException::class) + override fun available(): Int { + return maxBuf - bufOff + } + + /** + * Ensure the cipher text buffer has space sufficient to accept an upcoming output. + * + * @param updateSize the size of the pending update. + * @param finalOutput `true` if this the cipher is to be finalised. + */ + private fun ensureCapacity(updateSize: Int, finalOutput: Boolean) { + val bufLen: Int + bufLen = if (finalOutput) { + decoder.getOutputSize(updateSize) + } else { + decoder.getUpdateOutputSize(updateSize) + } + if (buf == null || buf!!.size < bufLen) { + buf = ByteArray(bufLen) + } + } + + /** + * Closes the underlying input stream and finalises the processing of the data by the cipher. + * + * @throws IOException if there was an error closing the input stream. + * @throws IOException if the data read from the stream was invalid ciphertext + * (e.g. the cipher is an AEAD cipher and the ciphertext tag check fails). + */ + @Throws(IOException::class) + override fun close() { + try { + `in`.close() + } finally { + if (!finalized) { + // Reset the cipher, discarding any data buffered in it + // Errors in cipher finalisation trump I/O error closing input + finaliseCipher() + } + } + bufOff = 0 + maxBuf = bufOff + if (buf != null) { + Arrays.fill(buf, 0.toByte()) + buf = null + } + Arrays.fill(inBuf, 0.toByte()) + } + + /** + * Do nothing, as we do not support + * marking. + * + * @see .markSupported + */ + override fun mark(readlimit: Int) {} + + @Throws(IOException::class) + override fun reset() { + throw IOException("reset() is not supported!") + } + + /** + * Mark is not supported! + */ + override fun markSupported(): Boolean { + return false + } + + companion object { + private const val INPUT_BUF_SIZE = 2048 + } +} diff --git a/common/src/jvmMain/kotlin/com/artemchep/keyguard/crypto/CipherInputStreamDecoder.kt b/common/src/jvmMain/kotlin/com/artemchep/keyguard/crypto/CipherInputStreamDecoder.kt new file mode 100644 index 00000000..a5ce32e4 --- /dev/null +++ b/common/src/jvmMain/kotlin/com/artemchep/keyguard/crypto/CipherInputStreamDecoder.kt @@ -0,0 +1,151 @@ +package com.artemchep.keyguard.crypto + +import com.artemchep.keyguard.common.service.crypto.CipherEncryptor +import org.bouncycastle.crypto.BufferedBlockCipher +import org.bouncycastle.crypto.CipherParameters +import org.bouncycastle.crypto.engines.AESEngine +import org.bouncycastle.crypto.modes.CBCBlockCipher +import org.bouncycastle.crypto.paddings.PKCS7Padding +import org.bouncycastle.crypto.paddings.PaddedBufferedBlockCipher +import org.bouncycastle.crypto.params.KeyParameter +import org.bouncycastle.crypto.params.ParametersWithIV + +class CipherInputStreamDecoder( + private val key: ByteArray, +) : CipherInputStream2.Decoder { + private var bufferedBlockCipher: BufferedBlockCipher? = null + + override fun processBytes( + `in`: ByteArray, + inOff: Int, + len: Int, + out: ByteArray, + outOff: Int, + ): Int { + val consumedLength = ensureInitialized( + buffer = `in`, + offset = inOff, + length = len, + ) + + val newOffset = inOff + consumedLength + val newLength = len - consumedLength + if (newLength == 0) { + return 0 + } + + return bufferedBlockCipher!!.processBytes( + `in`, + newOffset, + newLength, + out, + outOff, + ) + } + + override fun doFinal(out: ByteArray, outOff: Int): Int { + return bufferedBlockCipher!!.doFinal(out, outOff) + } + + private fun ensureInitialized( + buffer: ByteArray, + offset: Int, + length: Int, + ): Int { + if (bufferedBlockCipher != null) { + return 0 + } + + val type = buffer[offset].let { byte -> + CipherEncryptor.Type.values() + .first { it.byte == byte } + } + return when (type) { + CipherEncryptor.Type.AesCbc128_HmacSha256_B64 -> + initAesCbc128_HmacSha256_B64( + buffer = buffer, + offset = offset, + length = length, + ) + + CipherEncryptor.Type.AesCbc256_HmacSha256_B64 -> + initAesCbc256_HmacSha256_B64( + buffer = buffer, + offset = offset, + length = length, + ) + + else -> throw IllegalArgumentException("Can not decrypt data with a type of '$type'!") + } + } + + private fun initAesCbc128_HmacSha256_B64( + buffer: ByteArray, + offset: Int, + length: Int, + ): Int { + check(length >= 49) { "Invalid encrypted data" } // 1 + 16 + 32 + ctLength + val typeLength = 1 + val ivLength = 16 + val macLength = 32 + + val typeEnd = typeLength + offset + val ivEnd = typeEnd + ivLength + val macEnd = ivEnd + macLength + val iv = buffer.sliceArray(typeEnd until ivEnd) + val mac = buffer.sliceArray(ivEnd until macEnd) + initAesCbc( + iv = iv, + forEncryption = false, + ) + // TODO: We need to compute MAC while decrypting the data, + // allowing us to check if the output file is valid. + return typeLength + ivLength + macLength + } + + private fun initAesCbc256_HmacSha256_B64( + buffer: ByteArray, + offset: Int, + length: Int, + ): Int { + check(length >= 49) { "Invalid encrypted data" } // 1 + 16 + 32 + ctLength + val typeLength = 1 + val ivLength = 16 + val macLength = 32 + + val typeEnd = typeLength + offset + val ivEnd = typeEnd + ivLength + val macEnd = ivEnd + macLength + val iv = buffer.sliceArray(typeEnd until ivEnd) + val mac = buffer.sliceArray(ivEnd until macEnd) + initAesCbc( + iv = iv, + forEncryption = false, + ) + // TODO: We need to compute MAC while decrypting the data, + // allowing us to check if the output file is valid. + return typeLength + ivLength + macLength + } + + private fun initAesCbc( + iv: ByteArray, + forEncryption: Boolean, + ) { + val aes = PaddedBufferedBlockCipher( + CBCBlockCipher( + AESEngine(), + ), + PKCS7Padding(), + ) + val ivAndKey: CipherParameters = + ParametersWithIV(KeyParameter(key.sliceArray(0 until 32)), iv) + aes.init(forEncryption, ivAndKey) + bufferedBlockCipher = aes + } + + override fun getOutputSize(length: Int) = + bufferedBlockCipher?.getOutputSize(length) ?: length + + override fun getUpdateOutputSize(length: Int) = + bufferedBlockCipher?.getUpdateOutputSize(length) ?: length +} diff --git a/common/src/jvmMain/kotlin/com/artemchep/keyguard/crypto/CryptoGeneratorImpl.kt b/common/src/jvmMain/kotlin/com/artemchep/keyguard/crypto/CryptoGeneratorImpl.kt new file mode 100644 index 00000000..7d5a6437 --- /dev/null +++ b/common/src/jvmMain/kotlin/com/artemchep/keyguard/crypto/CryptoGeneratorImpl.kt @@ -0,0 +1,103 @@ +package com.artemchep.keyguard.crypto + +import com.artemchep.keyguard.common.model.Argon2Mode +import com.artemchep.keyguard.common.service.crypto.CryptoGenerator +import com.artemchep.keyguard.crypto.util.hkdfSha256 +import com.artemchep.keyguard.crypto.util.pbkdf2Sha256 +import com.artemchep.keyguard.crypto.util.sha1 +import com.artemchep.keyguard.crypto.util.sha256 +import org.bouncycastle.crypto.generators.Argon2BytesGenerator +import org.bouncycastle.crypto.params.Argon2Parameters +import java.security.MessageDigest +import java.security.SecureRandom +import java.util.UUID +import javax.crypto.Mac +import javax.crypto.spec.SecretKeySpec + +class CryptoGeneratorJvm() : CryptoGenerator { + companion object { + const val DEFAULT_ARGON_HASH_LENGTH = 32 + } + + private val secureRandom by lazy { + SecureRandom() + } + + override fun hkdf( + seed: ByteArray, + salt: ByteArray?, + info: ByteArray?, + length: Int, + ): ByteArray = hkdfSha256( + seed = seed, + salt = salt, + info = info, + length = length, + ) + + override fun pbkdf2( + seed: ByteArray, + salt: ByteArray, + iterations: Int, + length: Int, + ): ByteArray = pbkdf2Sha256(seed, salt, iterations, length) + + override fun argon2( + mode: Argon2Mode, + seed: ByteArray, + salt: ByteArray, + iterations: Int, + memoryKb: Int, + parallelism: Int, + ): ByteArray { + val hash = ByteArray(DEFAULT_ARGON_HASH_LENGTH) + + val modeInt = when (mode) { + Argon2Mode.ARGON2_D -> Argon2Parameters.ARGON2_d + Argon2Mode.ARGON2_I -> Argon2Parameters.ARGON2_i + Argon2Mode.ARGON2_ID -> Argon2Parameters.ARGON2_id + } + val params = Argon2Parameters.Builder(modeInt) + .withIterations(iterations) + .withMemoryAsKB(memoryKb) + .withParallelism(parallelism) + .withSalt(salt) + .withVersion(Argon2Parameters.ARGON2_VERSION_13) + .build() + val generator = Argon2BytesGenerator() + generator.init(params) + generator.generateBytes(seed, hash) + return hash + } + + override fun seed(length: Int): ByteArray = secureRandom.generateSeed(length) + + override fun hmacSha256( + key: ByteArray, + data: ByteArray, + ): ByteArray { + val algorithm = "HmacSHA256" + val mac = Mac.getInstance(algorithm) + mac.init(SecretKeySpec(key, algorithm)) + return mac.doFinal(data) + } + + override fun hashSha1(data: ByteArray): ByteArray = sha1(data) + + override fun hashSha256(data: ByteArray): ByteArray = sha256(data) + + override fun hashMd5(data: ByteArray): ByteArray { + val md = MessageDigest.getInstance("MD5") + md.update(data) + return md.digest() + } + + override fun uuid(): String = UUID.randomUUID().toString() + + override fun random(): Int = secureRandom.nextInt() + + override fun random(range: IntRange): Int = kotlin.run { + val size = range.last - range.first + secureRandom.nextInt(size + 1) + range.first + } +} diff --git a/common/src/jvmMain/kotlin/com/artemchep/keyguard/crypto/FileEncryptorImpl.kt b/common/src/jvmMain/kotlin/com/artemchep/keyguard/crypto/FileEncryptorImpl.kt new file mode 100644 index 00000000..6b2be574 --- /dev/null +++ b/common/src/jvmMain/kotlin/com/artemchep/keyguard/crypto/FileEncryptorImpl.kt @@ -0,0 +1,163 @@ +package com.artemchep.keyguard.crypto + +import com.artemchep.keyguard.common.service.crypto.CipherEncryptor +import com.artemchep.keyguard.common.service.crypto.CryptoGenerator +import com.artemchep.keyguard.common.service.crypto.FileEncryptor +import com.artemchep.keyguard.common.service.text.Base64Service +import org.bouncycastle.crypto.BufferedBlockCipher +import org.bouncycastle.crypto.CipherParameters +import org.bouncycastle.crypto.engines.AESEngine +import org.bouncycastle.crypto.modes.CBCBlockCipher +import org.bouncycastle.crypto.paddings.PKCS7Padding +import org.bouncycastle.crypto.paddings.PaddedBufferedBlockCipher +import org.bouncycastle.crypto.params.KeyParameter +import org.bouncycastle.crypto.params.ParametersWithIV +import org.kodein.di.DirectDI +import org.kodein.di.instance +import java.io.InputStream + +class FileEncryptorImpl( + private val cryptoGenerator: CryptoGenerator, + private val base64Service: Base64Service, +) : FileEncryptor { + companion object { + private const val TAG = "FileEncryptorImpl" + } + + constructor( + directDI: DirectDI, + ) : this( + cryptoGenerator = directDI.instance(), + base64Service = directDI.instance(), + ) + + override fun decode( + data: ByteArray, + key: ByteArray, + ): ByteArray { + val type = data[0].let { byte -> + CipherEncryptor.Type.values().first { it.byte == byte } + } + + return when (type) { + CipherEncryptor.Type.AesCbc256_B64 -> + decodeAesCbc256_B64(data, key) + + CipherEncryptor.Type.AesCbc128_HmacSha256_B64 -> + decodeAesCbc128_HmacSha256_B64(data, key) + + CipherEncryptor.Type.AesCbc256_HmacSha256_B64 -> + decodeAesCbc256_HmacSha256_B64(data, key) + + else -> throw IllegalArgumentException("Can not decrypt data with a type of '$type'!") + } + } + + override fun decode( + input: InputStream, + key: ByteArray, + ): InputStream { + val decoder = CipherInputStreamDecoder(key = key) + return CipherInputStream2(input, decoder) + } + + private fun decodeAesCbc256_B64( + data: ByteArray, + key: ByteArray, + ): ByteArray { + check(data.size >= 17) { "Invalid encrypted data" } // 1 + 16 + ctLength + val iv = data.sliceArray(1..17) + val ct = data.sliceArray(18 until data.size) + require(iv.size + ct.size + 1 == data.size) + TODO() + } + + private fun decodeAesCbc128_HmacSha256_B64( + data: ByteArray, + key: ByteArray, + ): ByteArray { + check(data.size >= 49) { "Invalid encrypted data" } // 1 + 16 + 32 + ctLength + val typeLength = 1 + val ivLength = 16 + val macLength = 32 + + @Suppress("UnnecessaryVariable") + val typeEnd = typeLength + val ivEnd = typeLength + ivLength + val macEnd = ivEnd + macLength + val iv = data.sliceArray(typeEnd until ivEnd) + val mac = data.sliceArray(ivEnd until macEnd) + val ct = data.sliceArray(macEnd until data.size) + require(iv.size + mac.size + ct.size + 1 == data.size) + return decodeAesCbc256_HmacSha256_B64( + iv = iv, + ct = ct, + encKey = key, + ) + } + + private fun decodeAesCbc256_HmacSha256_B64( + data: ByteArray, + key: ByteArray, + ): ByteArray { + check(data.size >= 49) { "Invalid encrypted data" } // 1 + 16 + 32 + ctLength + val typeLength = 1 + val ivLength = 16 + val macLength = 32 + + @Suppress("UnnecessaryVariable") + val typeEnd = typeLength + val ivEnd = typeLength + ivLength + val macEnd = ivEnd + macLength + val iv = data.sliceArray(typeEnd until ivEnd) + val mac = data.sliceArray(ivEnd until macEnd) + val ct = data.sliceArray(macEnd until data.size) + require(iv.size + mac.size + ct.size + 1 == data.size) + return decodeAesCbc256_HmacSha256_B64( + iv = iv, + ct = ct, + encKey = key.sliceArray(0 until 32), + ) + } + + override fun encode(data: ByteArray, key: ByteArray): ByteArray { + TODO() + } + + private fun decodeAesCbc256_HmacSha256_B64( + iv: ByteArray, + ct: ByteArray, + encKey: ByteArray, + ): ByteArray { + val aes = createAesCbc(iv, encKey, forEncryption = false) + return cipherData(aes, ct) + } + + private fun createAesCbc( + iv: ByteArray, + key: ByteArray, + forEncryption: Boolean, + ) = kotlin.run { + val aes = PaddedBufferedBlockCipher( + CBCBlockCipher( + AESEngine(), + ), + PKCS7Padding(), + ) + val ivAndKey: CipherParameters = ParametersWithIV(KeyParameter(key), iv) + aes.init(forEncryption, ivAndKey) + aes + } + + @Throws(Exception::class) + private fun cipherData(cipher: BufferedBlockCipher, data: ByteArray): ByteArray { + val minSize = cipher.getOutputSize(data.size) + val outBuf = ByteArray(minSize) + val length1 = cipher.processBytes(data, 0, data.size, outBuf, 0) + val length2 = cipher.doFinal(outBuf, length1) + val actualLength = length1 + length2 + val result = ByteArray(actualLength) + System.arraycopy(outBuf, 0, result, 0, result.size) + return result + } +} diff --git a/common/src/jvmMain/kotlin/com/artemchep/keyguard/crypto/util/hkdf.kt b/common/src/jvmMain/kotlin/com/artemchep/keyguard/crypto/util/hkdf.kt new file mode 100644 index 00000000..178c9f48 --- /dev/null +++ b/common/src/jvmMain/kotlin/com/artemchep/keyguard/crypto/util/hkdf.kt @@ -0,0 +1,47 @@ +package com.artemchep.keyguard.crypto.util + +import org.bouncycastle.crypto.Digest +import org.bouncycastle.crypto.digests.SHA256Digest +import org.bouncycastle.crypto.generators.HKDFBytesGenerator +import org.bouncycastle.crypto.params.HKDFParameters + +fun hkdfSha256( + seed: ByteArray, + salt: ByteArray? = null, + info: ByteArray? = null, + length: Int = 32, +): ByteArray = hkdf( + digest = SHA256Digest(), + seed = seed, + salt = salt, + info = info, + length = length, +) + +private fun hkdf( + digest: Digest, + seed: ByteArray, + salt: ByteArray?, + info: ByteArray?, + length: Int, +): ByteArray = run { + val out = ByteArray(length) + HKDFBytesGenerator(digest) + .apply { + val params = if (salt != null) { + HKDFParameters( + seed, + salt, + info, + ) + } else { + HKDFParameters.skipExtractParameters( + seed, + info, + ) + } + init(params) + } + .generateBytes(out, 0, length) + out +} diff --git a/common/src/jvmMain/kotlin/com/artemchep/keyguard/crypto/util/pbkdf2.kt b/common/src/jvmMain/kotlin/com/artemchep/keyguard/crypto/util/pbkdf2.kt new file mode 100644 index 00000000..5d82e39d --- /dev/null +++ b/common/src/jvmMain/kotlin/com/artemchep/keyguard/crypto/util/pbkdf2.kt @@ -0,0 +1,38 @@ +package com.artemchep.keyguard.crypto.util + +import org.bouncycastle.crypto.Digest +import org.bouncycastle.crypto.digests.SHA256Digest +import org.bouncycastle.crypto.generators.PKCS5S2ParametersGenerator +import org.bouncycastle.crypto.params.KeyParameter + +fun pbkdf2Sha256( + seed: ByteArray, + salt: ByteArray, + iterations: Int = 1, + length: Int = 32, +): ByteArray = pbkdf2( + digest = SHA256Digest(), + seed = seed, + salt = salt, + iterations = iterations, + length = length, +) + +private fun pbkdf2( + digest: Digest, + seed: ByteArray, + salt: ByteArray, + iterations: Int, + length: Int, +): ByteArray = run { + val params = PKCS5S2ParametersGenerator(digest) + .apply { + init( + seed, + salt, + iterations, + ) + } + .generateDerivedMacParameters(length * 8) + (params as KeyParameter).key +} diff --git a/common/src/jvmMain/kotlin/com/artemchep/keyguard/crypto/util/sha1.kt b/common/src/jvmMain/kotlin/com/artemchep/keyguard/crypto/util/sha1.kt new file mode 100644 index 00000000..328466cc --- /dev/null +++ b/common/src/jvmMain/kotlin/com/artemchep/keyguard/crypto/util/sha1.kt @@ -0,0 +1,17 @@ +package com.artemchep.keyguard.crypto.util + +import java.security.MessageDigest +import java.security.NoSuchAlgorithmException + +fun sha1( + input: ByteArray, +): ByteArray = run { + val digest: MessageDigest + try { + digest = MessageDigest.getInstance("SHA-1") + } catch (e: NoSuchAlgorithmException) { + throw e + } + digest.reset() + digest.digest(input) +} diff --git a/common/src/jvmMain/kotlin/com/artemchep/keyguard/crypto/util/sha256.kt b/common/src/jvmMain/kotlin/com/artemchep/keyguard/crypto/util/sha256.kt new file mode 100644 index 00000000..a24b3af3 --- /dev/null +++ b/common/src/jvmMain/kotlin/com/artemchep/keyguard/crypto/util/sha256.kt @@ -0,0 +1,17 @@ +package com.artemchep.keyguard.crypto.util + +import java.security.MessageDigest +import java.security.NoSuchAlgorithmException + +fun sha256( + input: ByteArray, +): ByteArray = run { + val digest: MessageDigest + try { + digest = MessageDigest.getInstance("SHA-256") + } catch (e: NoSuchAlgorithmException) { + throw e + } + digest.reset() + digest.digest(input) +} diff --git a/common/src/jvmMain/kotlin/com/artemchep/keyguard/di/GlobalModuleJvm.kt b/common/src/jvmMain/kotlin/com/artemchep/keyguard/di/GlobalModuleJvm.kt new file mode 100644 index 00000000..dbc765b5 --- /dev/null +++ b/common/src/jvmMain/kotlin/com/artemchep/keyguard/di/GlobalModuleJvm.kt @@ -0,0 +1,1221 @@ +package com.artemchep.keyguard.di + +import com.artemchep.keyguard.common.AppWorker +import com.artemchep.keyguard.common.AppWorkerIm +import com.artemchep.keyguard.common.service.Files +import com.artemchep.keyguard.common.service.crypto.CipherEncryptor +import com.artemchep.keyguard.common.service.crypto.CryptoGenerator +import com.artemchep.keyguard.common.service.crypto.FileEncryptor +import com.artemchep.keyguard.common.service.deeplink.DeeplinkService +import com.artemchep.keyguard.common.service.deeplink.impl.DeeplinkServiceImpl +import com.artemchep.keyguard.common.service.download.DownloadService +import com.artemchep.keyguard.common.service.download.DownloadServiceImpl +import com.artemchep.keyguard.common.service.extract.impl.LinkInfoPlatformExtractor +import com.artemchep.keyguard.common.service.gpmprivapps.PrivilegedAppsService +import com.artemchep.keyguard.common.service.gpmprivapps.impl.PrivilegedAppsServiceImpl +import com.artemchep.keyguard.common.service.id.IdRepository +import com.artemchep.keyguard.common.service.id.impl.IdRepositoryImpl +import com.artemchep.keyguard.common.service.justdeleteme.JustDeleteMeService +import com.artemchep.keyguard.common.service.justdeleteme.impl.JustDeleteMeServiceImpl +import com.artemchep.keyguard.common.service.justgetmydata.JustGetMyDataService +import com.artemchep.keyguard.common.service.justgetmydata.impl.JustGetMyDataServiceImpl +import com.artemchep.keyguard.common.service.keyvalue.KeyValueStore +import com.artemchep.keyguard.common.service.license.LicenseService +import com.artemchep.keyguard.common.service.license.impl.LicenseServiceImpl +import com.artemchep.keyguard.common.service.logging.LogRepository +import com.artemchep.keyguard.common.service.passkey.PassKeyService +import com.artemchep.keyguard.common.service.passkey.impl.PassKeyServiceImpl +import com.artemchep.keyguard.common.service.relays.di.emailRelayDiModule +import com.artemchep.keyguard.common.service.review.ReviewLog +import com.artemchep.keyguard.common.service.review.impl.ReviewLogImpl +import com.artemchep.keyguard.common.service.settings.SettingsReadRepository +import com.artemchep.keyguard.common.service.settings.SettingsReadWriteRepository +import com.artemchep.keyguard.common.service.settings.impl.SettingsRepositoryImpl +import com.artemchep.keyguard.common.service.similarity.SimilarityService +import com.artemchep.keyguard.common.service.state.StateRepository +import com.artemchep.keyguard.common.service.state.impl.StateRepositoryImpl +import com.artemchep.keyguard.common.service.text.Base32Service +import com.artemchep.keyguard.common.service.text.Base64Service +import com.artemchep.keyguard.common.service.tld.TldService +import com.artemchep.keyguard.common.service.tld.impl.TldServiceImpl +import com.artemchep.keyguard.common.service.totp.TotpService +import com.artemchep.keyguard.common.service.totp.impl.TotpServiceImpl +import com.artemchep.keyguard.common.service.twofa.TwoFaService +import com.artemchep.keyguard.common.service.twofa.impl.TwoFaServiceImpl +import com.artemchep.keyguard.common.service.vault.FingerprintReadRepository +import com.artemchep.keyguard.common.service.vault.FingerprintReadWriteRepository +import com.artemchep.keyguard.common.service.vault.KeyReadRepository +import com.artemchep.keyguard.common.service.vault.KeyReadWriteRepository +import com.artemchep.keyguard.common.service.vault.SessionMetadataReadRepository +import com.artemchep.keyguard.common.service.vault.SessionMetadataReadWriteRepository +import com.artemchep.keyguard.common.service.vault.SessionReadRepository +import com.artemchep.keyguard.common.service.vault.SessionReadWriteRepository +import com.artemchep.keyguard.common.service.vault.impl.FingerprintRepositoryImpl +import com.artemchep.keyguard.common.service.vault.impl.KeyRepositoryImpl +import com.artemchep.keyguard.common.service.vault.impl.SessionMetadataRepositoryImpl +import com.artemchep.keyguard.common.service.vault.impl.SessionRepositoryImpl +import com.artemchep.keyguard.common.service.wordlist.WordlistService +import com.artemchep.keyguard.common.service.wordlist.impl.WordlistServiceImpl +import com.artemchep.keyguard.common.usecase.AuthConfirmMasterKeyUseCase +import com.artemchep.keyguard.common.usecase.AuthGenerateMasterKeyUseCase +import com.artemchep.keyguard.common.usecase.BiometricKeyDecryptUseCase +import com.artemchep.keyguard.common.usecase.BiometricKeyEncryptUseCase +import com.artemchep.keyguard.common.usecase.CipherUrlCheck +import com.artemchep.keyguard.common.usecase.CipherUrlDuplicateCheck +import com.artemchep.keyguard.common.usecase.ClearVaultSession +import com.artemchep.keyguard.common.usecase.ConfirmAccessByPasswordUseCase +import com.artemchep.keyguard.common.usecase.DateFormatter +import com.artemchep.keyguard.common.usecase.DeviceEncryptionKeyUseCase +import com.artemchep.keyguard.common.usecase.DeviceIdUseCase +import com.artemchep.keyguard.common.usecase.GenerateMasterHashUseCase +import com.artemchep.keyguard.common.usecase.GenerateMasterKeyUseCase +import com.artemchep.keyguard.common.usecase.GenerateMasterSaltUseCase +import com.artemchep.keyguard.common.usecase.GetAllowScreenshots +import com.artemchep.keyguard.common.usecase.GetAllowTwoPanelLayoutInLandscape +import com.artemchep.keyguard.common.usecase.GetAllowTwoPanelLayoutInPortrait +import com.artemchep.keyguard.common.usecase.GetAppBuildDate +import com.artemchep.keyguard.common.usecase.GetAppBuildType +import com.artemchep.keyguard.common.usecase.GetAppIcons +import com.artemchep.keyguard.common.usecase.GetAppVersion +import com.artemchep.keyguard.common.usecase.GetAppVersionCode +import com.artemchep.keyguard.common.usecase.GetAppVersionName +import com.artemchep.keyguard.common.usecase.GetAutofillCopyTotp +import com.artemchep.keyguard.common.usecase.GetAutofillInlineSuggestions +import com.artemchep.keyguard.common.usecase.GetAutofillManualSelection +import com.artemchep.keyguard.common.usecase.GetAutofillRespectAutofillOff +import com.artemchep.keyguard.common.usecase.GetAutofillSaveRequest +import com.artemchep.keyguard.common.usecase.GetAutofillSaveUri +import com.artemchep.keyguard.common.usecase.GetBiometricTimeout +import com.artemchep.keyguard.common.usecase.GetBiometricTimeoutVariants +import com.artemchep.keyguard.common.usecase.GetCachePremium +import com.artemchep.keyguard.common.usecase.GetCanWrite +import com.artemchep.keyguard.common.usecase.GetCheckPwnedPasswords +import com.artemchep.keyguard.common.usecase.GetCheckPwnedServices +import com.artemchep.keyguard.common.usecase.GetCheckTwoFA +import com.artemchep.keyguard.common.usecase.GetClipboardAutoClear +import com.artemchep.keyguard.common.usecase.GetClipboardAutoClearVariants +import com.artemchep.keyguard.common.usecase.GetClipboardAutoRefresh +import com.artemchep.keyguard.common.usecase.GetClipboardAutoRefreshVariants +import com.artemchep.keyguard.common.usecase.GetColors +import com.artemchep.keyguard.common.usecase.GetColorsVariants +import com.artemchep.keyguard.common.usecase.GetConcealFields +import com.artemchep.keyguard.common.usecase.GetDebugPremium +import com.artemchep.keyguard.common.usecase.GetDebugScreenDelay +import com.artemchep.keyguard.common.usecase.GetFont +import com.artemchep.keyguard.common.usecase.GetFontVariants +import com.artemchep.keyguard.common.usecase.GetGravatarUrl +import com.artemchep.keyguard.common.usecase.GetJustDeleteMeByUrl +import com.artemchep.keyguard.common.usecase.GetKeepScreenOn +import com.artemchep.keyguard.common.usecase.GetLocaleVariants +import com.artemchep.keyguard.common.usecase.GetMarkdown +import com.artemchep.keyguard.common.usecase.GetNavAnimation +import com.artemchep.keyguard.common.usecase.GetNavAnimationVariants +import com.artemchep.keyguard.common.usecase.GetNavLabel +import com.artemchep.keyguard.common.usecase.GetOnboardingLastVisitInstant +import com.artemchep.keyguard.common.usecase.GetPassphrase +import com.artemchep.keyguard.common.usecase.GetPassword +import com.artemchep.keyguard.common.usecase.GetPasswordStrength +import com.artemchep.keyguard.common.usecase.GetProducts +import com.artemchep.keyguard.common.usecase.GetScreenState +import com.artemchep.keyguard.common.usecase.GetSubscriptions +import com.artemchep.keyguard.common.usecase.GetTheme +import com.artemchep.keyguard.common.usecase.GetThemeUseAmoledDark +import com.artemchep.keyguard.common.usecase.GetThemeVariants +import com.artemchep.keyguard.common.usecase.GetTotpCode +import com.artemchep.keyguard.common.usecase.GetUseExternalBrowser +import com.artemchep.keyguard.common.usecase.GetVaultLockAfterReboot +import com.artemchep.keyguard.common.usecase.GetVaultLockAfterScreenOff +import com.artemchep.keyguard.common.usecase.GetVaultLockAfterTimeout +import com.artemchep.keyguard.common.usecase.GetVaultLockAfterTimeoutVariants +import com.artemchep.keyguard.common.usecase.GetVaultPersist +import com.artemchep.keyguard.common.usecase.GetVaultSession +import com.artemchep.keyguard.common.usecase.GetWebsiteIcons +import com.artemchep.keyguard.common.usecase.GetWriteAccess +import com.artemchep.keyguard.common.usecase.MessageHub +import com.artemchep.keyguard.common.usecase.NumberFormatter +import com.artemchep.keyguard.common.usecase.PasskeyTargetCheck +import com.artemchep.keyguard.common.usecase.PutAllowScreenshots +import com.artemchep.keyguard.common.usecase.PutAllowTwoPanelLayoutInLandscape +import com.artemchep.keyguard.common.usecase.PutAllowTwoPanelLayoutInPortrait +import com.artemchep.keyguard.common.usecase.PutAppIcons +import com.artemchep.keyguard.common.usecase.PutAutofillCopyTotp +import com.artemchep.keyguard.common.usecase.PutAutofillInlineSuggestions +import com.artemchep.keyguard.common.usecase.PutAutofillManualSelection +import com.artemchep.keyguard.common.usecase.PutAutofillRespectAutofillOff +import com.artemchep.keyguard.common.usecase.PutAutofillSaveRequest +import com.artemchep.keyguard.common.usecase.PutAutofillSaveUri +import com.artemchep.keyguard.common.usecase.PutBiometricTimeout +import com.artemchep.keyguard.common.usecase.PutCachePremium +import com.artemchep.keyguard.common.usecase.PutCheckPwnedPasswords +import com.artemchep.keyguard.common.usecase.PutCheckPwnedServices +import com.artemchep.keyguard.common.usecase.PutCheckTwoFA +import com.artemchep.keyguard.common.usecase.PutClipboardAutoClear +import com.artemchep.keyguard.common.usecase.PutClipboardAutoRefresh +import com.artemchep.keyguard.common.usecase.PutColors +import com.artemchep.keyguard.common.usecase.PutConcealFields +import com.artemchep.keyguard.common.usecase.PutDebugPremium +import com.artemchep.keyguard.common.usecase.PutDebugScreenDelay +import com.artemchep.keyguard.common.usecase.PutFont +import com.artemchep.keyguard.common.usecase.PutKeepScreenOn +import com.artemchep.keyguard.common.usecase.PutMarkdown +import com.artemchep.keyguard.common.usecase.PutNavAnimation +import com.artemchep.keyguard.common.usecase.PutNavLabel +import com.artemchep.keyguard.common.usecase.PutOnboardingLastVisitInstant +import com.artemchep.keyguard.common.usecase.PutScreenState +import com.artemchep.keyguard.common.usecase.PutTheme +import com.artemchep.keyguard.common.usecase.PutThemeUseAmoledDark +import com.artemchep.keyguard.common.usecase.PutUseExternalBrowser +import com.artemchep.keyguard.common.usecase.PutVaultLockAfterReboot +import com.artemchep.keyguard.common.usecase.PutVaultLockAfterScreenOff +import com.artemchep.keyguard.common.usecase.PutVaultLockAfterTimeout +import com.artemchep.keyguard.common.usecase.PutVaultPersist +import com.artemchep.keyguard.common.usecase.PutVaultSession +import com.artemchep.keyguard.common.usecase.PutWebsiteIcons +import com.artemchep.keyguard.common.usecase.PutWriteAccess +import com.artemchep.keyguard.common.usecase.RemoveAttachment +import com.artemchep.keyguard.common.usecase.RequestAppReview +import com.artemchep.keyguard.common.usecase.ShowMessage +import com.artemchep.keyguard.common.usecase.UnlockUseCase +import com.artemchep.keyguard.common.usecase.WindowCoroutineScope +import com.artemchep.keyguard.common.usecase.impl.AuthConfirmMasterKeyUseCaseImpl +import com.artemchep.keyguard.common.usecase.impl.AuthGenerateMasterKeyUseCaseImpl +import com.artemchep.keyguard.common.usecase.impl.BiometricKeyDecryptUseCaseImpl +import com.artemchep.keyguard.common.usecase.impl.BiometricKeyEncryptUseCaseImpl +import com.artemchep.keyguard.common.usecase.impl.ClearVaultSessionImpl +import com.artemchep.keyguard.common.usecase.impl.ConfirmAccessByPasswordUseCaseImpl +import com.artemchep.keyguard.common.usecase.impl.GenerateMasterHashUseCaseImpl +import com.artemchep.keyguard.common.usecase.impl.GenerateMasterKeyUseCaseImpl +import com.artemchep.keyguard.common.usecase.impl.GenerateMasterSaltUseCaseImpl +import com.artemchep.keyguard.common.usecase.impl.GetAllowScreenshotsImpl +import com.artemchep.keyguard.common.usecase.impl.GetAllowTwoPanelLayoutInLandscapeImpl +import com.artemchep.keyguard.common.usecase.impl.GetAllowTwoPanelLayoutInPortraitImpl +import com.artemchep.keyguard.common.usecase.impl.GetAppBuildTypeImpl +import com.artemchep.keyguard.common.usecase.impl.GetAppIconsImpl +import com.artemchep.keyguard.common.usecase.impl.GetAppVersionCodeImpl +import com.artemchep.keyguard.common.usecase.impl.GetAppVersionImpl +import com.artemchep.keyguard.common.usecase.impl.GetAppVersionNameImpl +import com.artemchep.keyguard.common.usecase.impl.GetAutofillCopyTotpImpl +import com.artemchep.keyguard.common.usecase.impl.GetAutofillInlineSuggestionsImpl +import com.artemchep.keyguard.common.usecase.impl.GetAutofillManualSelectionImpl +import com.artemchep.keyguard.common.usecase.impl.GetAutofillRespectAutofillOffImpl +import com.artemchep.keyguard.common.usecase.impl.GetAutofillSaveRequestImpl +import com.artemchep.keyguard.common.usecase.impl.GetAutofillSaveUriImpl +import com.artemchep.keyguard.common.usecase.impl.GetBiometricTimeoutImpl +import com.artemchep.keyguard.common.usecase.impl.GetBiometricTimeoutVariantsImpl +import com.artemchep.keyguard.common.usecase.impl.GetCachePremiumImpl +import com.artemchep.keyguard.common.usecase.impl.GetCanWriteImpl +import com.artemchep.keyguard.common.usecase.impl.GetCheckPwnedPasswordsImpl +import com.artemchep.keyguard.common.usecase.impl.GetCheckPwnedServicesImpl +import com.artemchep.keyguard.common.usecase.impl.GetCheckTwoFAImpl +import com.artemchep.keyguard.common.usecase.impl.GetClipboardAutoClearImpl +import com.artemchep.keyguard.common.usecase.impl.GetClipboardAutoClearVariantsImpl +import com.artemchep.keyguard.common.usecase.impl.GetClipboardAutoRefreshImpl +import com.artemchep.keyguard.common.usecase.impl.GetClipboardAutoRefreshVariantsImpl +import com.artemchep.keyguard.common.usecase.impl.GetColorsImpl +import com.artemchep.keyguard.common.usecase.impl.GetColorsVariantsImpl +import com.artemchep.keyguard.common.usecase.impl.GetConcealFieldsImpl +import com.artemchep.keyguard.common.usecase.impl.GetDebugPremiumImpl +import com.artemchep.keyguard.common.usecase.impl.GetDebugScreenDelayImpl +import com.artemchep.keyguard.common.usecase.impl.GetFontImpl +import com.artemchep.keyguard.common.usecase.impl.GetFontVariantsImpl +import com.artemchep.keyguard.common.usecase.impl.GetGravatarUrlImpl +import com.artemchep.keyguard.common.usecase.impl.GetJustDeleteMeByUrlImpl +import com.artemchep.keyguard.common.usecase.impl.GetKeepScreenOnImpl +import com.artemchep.keyguard.common.usecase.impl.GetLocaleVariantsImpl +import com.artemchep.keyguard.common.usecase.impl.GetMarkdownImpl +import com.artemchep.keyguard.common.usecase.impl.GetNavAnimationImpl +import com.artemchep.keyguard.common.usecase.impl.GetNavAnimationVariantsImpl +import com.artemchep.keyguard.common.usecase.impl.GetNavLabelImpl +import com.artemchep.keyguard.common.usecase.impl.GetOnboardingLastVisitInstantImpl +import com.artemchep.keyguard.common.usecase.impl.GetPasswordImpl +import com.artemchep.keyguard.common.usecase.impl.GetProductsImpl +import com.artemchep.keyguard.common.usecase.impl.GetScreenStateImpl +import com.artemchep.keyguard.common.usecase.impl.GetSubscriptionsImpl +import com.artemchep.keyguard.common.usecase.impl.GetThemeImpl +import com.artemchep.keyguard.common.usecase.impl.GetThemeUseAmoledDarkImpl +import com.artemchep.keyguard.common.usecase.impl.GetThemeVariantsImpl +import com.artemchep.keyguard.common.usecase.impl.GetTotpCodeImpl +import com.artemchep.keyguard.common.usecase.impl.GetUseExternalBrowserImpl +import com.artemchep.keyguard.common.usecase.impl.GetVaultLockAfterRebootImpl +import com.artemchep.keyguard.common.usecase.impl.GetVaultLockAfterScreenOffImpl +import com.artemchep.keyguard.common.usecase.impl.GetVaultLockAfterTimeoutImpl +import com.artemchep.keyguard.common.usecase.impl.GetVaultLockAfterTimeoutVariantsImpl +import com.artemchep.keyguard.common.usecase.impl.GetVaultPersistImpl +import com.artemchep.keyguard.common.usecase.impl.GetVaultSessionImpl +import com.artemchep.keyguard.common.usecase.impl.GetWebsiteIconsImpl +import com.artemchep.keyguard.common.usecase.impl.GetWriteAccessImpl +import com.artemchep.keyguard.common.usecase.impl.MessageHubImpl +import com.artemchep.keyguard.common.usecase.impl.PasskeyTargetCheckImpl +import com.artemchep.keyguard.common.usecase.impl.PutAllowScreenshotsImpl +import com.artemchep.keyguard.common.usecase.impl.PutAllowTwoPanelLayoutInLandscapeImpl +import com.artemchep.keyguard.common.usecase.impl.PutAllowTwoPanelLayoutInPortraitImpl +import com.artemchep.keyguard.common.usecase.impl.PutAppIconsImpl +import com.artemchep.keyguard.common.usecase.impl.PutAutofillCopyTotpImpl +import com.artemchep.keyguard.common.usecase.impl.PutAutofillInlineSuggestionsImpl +import com.artemchep.keyguard.common.usecase.impl.PutAutofillManualSelectionImpl +import com.artemchep.keyguard.common.usecase.impl.PutAutofillRespectAutofillOffImpl +import com.artemchep.keyguard.common.usecase.impl.PutAutofillSaveRequestImpl +import com.artemchep.keyguard.common.usecase.impl.PutAutofillSaveUriImpl +import com.artemchep.keyguard.common.usecase.impl.PutBiometricTimeoutImpl +import com.artemchep.keyguard.common.usecase.impl.PutCachePremiumImpl +import com.artemchep.keyguard.common.usecase.impl.PutCheckPwnedPasswordsImpl +import com.artemchep.keyguard.common.usecase.impl.PutCheckPwnedServicesImpl +import com.artemchep.keyguard.common.usecase.impl.PutCheckTwoFAImpl +import com.artemchep.keyguard.common.usecase.impl.PutClipboardAutoClearImpl +import com.artemchep.keyguard.common.usecase.impl.PutClipboardAutoRefreshImpl +import com.artemchep.keyguard.common.usecase.impl.PutColorsImpl +import com.artemchep.keyguard.common.usecase.impl.PutConcealFieldsImpl +import com.artemchep.keyguard.common.usecase.impl.PutDebugPremiumImpl +import com.artemchep.keyguard.common.usecase.impl.PutDebugScreenDelayImpl +import com.artemchep.keyguard.common.usecase.impl.PutFontImpl +import com.artemchep.keyguard.common.usecase.impl.PutKeepScreenOnImpl +import com.artemchep.keyguard.common.usecase.impl.PutMarkdownImpl +import com.artemchep.keyguard.common.usecase.impl.PutNavAnimationImpl +import com.artemchep.keyguard.common.usecase.impl.PutNavLabelImpl +import com.artemchep.keyguard.common.usecase.impl.PutOnboardingLastVisitInstantImpl +import com.artemchep.keyguard.common.usecase.impl.PutScreenStateImpl +import com.artemchep.keyguard.common.usecase.impl.PutThemeImpl +import com.artemchep.keyguard.common.usecase.impl.PutThemeUseAmoledDarkImpl +import com.artemchep.keyguard.common.usecase.impl.PutUserExternalBrowserImpl +import com.artemchep.keyguard.common.usecase.impl.PutVaultLockAfterRebootImpl +import com.artemchep.keyguard.common.usecase.impl.PutVaultLockAfterScreenOffImpl +import com.artemchep.keyguard.common.usecase.impl.PutVaultLockAfterTimeoutImpl +import com.artemchep.keyguard.common.usecase.impl.PutVaultPersistImpl +import com.artemchep.keyguard.common.usecase.impl.PutVaultSessionImpl +import com.artemchep.keyguard.common.usecase.impl.PutWebsiteIconsImpl +import com.artemchep.keyguard.common.usecase.impl.PutWriteAccessImpl +import com.artemchep.keyguard.common.usecase.impl.RemoveAttachmentImpl +import com.artemchep.keyguard.common.usecase.impl.RequestAppReviewImpl +import com.artemchep.keyguard.common.usecase.impl.UnlockUseCaseImpl +import com.artemchep.keyguard.common.usecase.impl.WindowCoroutineScopeImpl +import com.artemchep.keyguard.copy.Base32ServiceJvm +import com.artemchep.keyguard.copy.Base64ServiceJvm +import com.artemchep.keyguard.copy.DateFormatterAndroid +import com.artemchep.keyguard.copy.GetAppBuildDateImpl +import com.artemchep.keyguard.copy.GetPasswordStrengthJvm +import com.artemchep.keyguard.copy.NumberFormatterJvm +import com.artemchep.keyguard.copy.PasswordGeneratorDiceware +import com.artemchep.keyguard.copy.SimilarityServiceJvm +import com.artemchep.keyguard.core.store.DatabaseDispatcher +import com.artemchep.keyguard.core.store.bitwarden.BitwardenCipher +import com.artemchep.keyguard.crypto.CipherEncryptorImpl +import com.artemchep.keyguard.crypto.CryptoGeneratorJvm +import com.artemchep.keyguard.crypto.FileEncryptorImpl +import com.artemchep.keyguard.platform.util.isRelease +import com.artemchep.keyguard.provider.bitwarden.usecase.CipherUrlCheckImpl +import com.artemchep.keyguard.provider.bitwarden.usecase.CipherUrlDuplicateCheckImpl +import io.ktor.client.HttpClient +import io.ktor.client.engine.okhttp.OkHttp +import io.ktor.client.plugins.CurlUserAgent +import io.ktor.client.plugins.HttpRequestRetry +import io.ktor.client.plugins.UserAgent +import io.ktor.client.plugins.cache.HttpCache +import io.ktor.client.plugins.contentnegotiation.ContentNegotiation +import io.ktor.client.plugins.logging.LogLevel +import io.ktor.client.plugins.logging.Logging +import io.ktor.client.plugins.websocket.WebSockets +import io.ktor.http.ContentType +import io.ktor.http.HttpStatusCode +import io.ktor.serialization.kotlinx.KotlinxSerializationConverter +import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.Dispatchers +import kotlinx.serialization.json.Json +import kotlinx.serialization.modules.SerializersModule +import kotlinx.serialization.modules.polymorphic +import kotlinx.serialization.modules.subclass +import okhttp3.OkHttpClient +import okhttp3.logging.HttpLoggingInterceptor +import org.kodein.di.DI +import org.kodein.di.bindProvider +import org.kodein.di.bindSingleton +import org.kodein.di.instance + +fun globalModuleJvm() = DI.Module( + name = "globalModuleJvm", +) { + bindProvider(tag = DatabaseDispatcher) { + Dispatchers.IO + } + bindSingleton { + DownloadServiceImpl( + directDI = this, + ) + } + bindSingleton { + AuthConfirmMasterKeyUseCaseImpl( + directDI = this, + ) + } + bindSingleton { + AuthGenerateMasterKeyUseCaseImpl( + directDI = this, + ) + } + bindSingleton { + BiometricKeyDecryptUseCaseImpl( + directDI = this, + ) + } + bindSingleton { + BiometricKeyEncryptUseCaseImpl( + directDI = this, + ) + } + bindSingleton { + GenerateMasterHashUseCaseImpl( + directDI = this, + ) + } + bindSingleton { + GenerateMasterKeyUseCaseImpl( + directDI = this, + ) + } + bindSingleton { + GenerateMasterSaltUseCaseImpl( + directDI = this, + ) + } + bindSingleton { + ConfirmAccessByPasswordUseCaseImpl( + directDI = this, + ) + } + bindSingleton { + UnlockUseCaseImpl( + directDI = this, + ) + } + bindSingleton { + Base64ServiceJvm( + directDI = this, + ) + } + bindSingleton { + Base32ServiceJvm( + directDI = this, + ) + } + bindSingleton { + GetTotpCodeImpl( + directDI = this, + ) + } + bindSingleton { + GetPasswordImpl( + directDI = this, + ) + } + bindSingleton { + GetScreenStateImpl( + directDI = this, + ) + } + bindSingleton { + GetConcealFieldsImpl( + directDI = this, + ) + } + bindSingleton { + GetKeepScreenOnImpl( + directDI = this, + ) + } + bindSingleton { + GetVaultLockAfterTimeoutImpl( + directDI = this, + ) + } + bindSingleton { + GetVaultLockAfterTimeoutVariantsImpl( + directDI = this, + ) + } + bindSingleton { + GetBiometricTimeoutImpl( + directDI = this, + ) + } + bindSingleton { + GetBiometricTimeoutVariantsImpl( + directDI = this, + ) + } + bindSingleton { + PutBiometricTimeoutImpl( + directDI = this, + ) + } + bindSingleton { + GetCheckPwnedPasswordsImpl( + directDI = this, + ) + } + bindSingleton { + GetAutofillCopyTotpImpl( + directDI = this, + ) + } + bindSingleton { + GetAutofillInlineSuggestionsImpl( + directDI = this, + ) + } + bindSingleton { + GetAutofillManualSelectionImpl( + directDI = this, + ) + } + bindSingleton { + GetAutofillRespectAutofillOffImpl( + directDI = this, + ) + } + bindSingleton { + GetAutofillSaveRequestImpl( + directDI = this, + ) + } + bindSingleton { + GetAutofillSaveUriImpl( + directDI = this, + ) + } + bindSingleton { + GetCheckPwnedServicesImpl( + directDI = this, + ) + } + bindSingleton { + GetCheckTwoFAImpl( + directDI = this, + ) + } + bindSingleton { + PutCheckPwnedPasswordsImpl( + directDI = this, + ) + } + bindSingleton { + PutCheckPwnedServicesImpl( + directDI = this, + ) + } + bindSingleton { + PutCheckTwoFAImpl( + directDI = this, + ) + } + bindSingleton { + PutKeepScreenOnImpl( + directDI = this, + ) + } + bindSingleton { + PutVaultSessionImpl( + directDI = this, + ) + } + bindSingleton { + ClearVaultSessionImpl( + directDI = this, + ) + } + bindSingleton { + PutNavAnimationImpl( + directDI = this, + ) + } + bindSingleton { + PutNavLabelImpl( + directDI = this, + ) + } + bindSingleton { + PutThemeImpl( + directDI = this, + ) + } + bindSingleton { + PutThemeUseAmoledDarkImpl( + directDI = this, + ) + } + bindSingleton { + PutColorsImpl( + directDI = this, + ) + } + bindSingleton { + PutScreenStateImpl( + directDI = this, + ) + } + bindSingleton { + GetAllowScreenshotsImpl( + directDI = this, + ) + } + bindSingleton { + GetAllowTwoPanelLayoutInLandscapeImpl( + directDI = this, + ) + } + bindSingleton { + GetAllowTwoPanelLayoutInPortraitImpl( + directDI = this, + ) + } + bindSingleton { + GetVaultLockAfterScreenOffImpl( + directDI = this, + ) + } + bindSingleton { + GetVaultLockAfterRebootImpl( + directDI = this, + ) + } + bindSingleton { + PasskeyTargetCheckImpl(this) + } + bindSingleton { + PutAllowScreenshotsImpl( + directDI = this, + ) + } + bindSingleton { + GetUseExternalBrowserImpl( + directDI = this, + ) + } + bindSingleton { + PutUserExternalBrowserImpl( + directDI = this, + ) + } + bindSingleton { + PutAllowTwoPanelLayoutInLandscapeImpl( + directDI = this, + ) + } + bindSingleton { + PutAllowTwoPanelLayoutInPortraitImpl( + directDI = this, + ) + } + bindSingleton { + PutVaultLockAfterRebootImpl( + directDI = this, + ) + } + bindSingleton { + PutVaultLockAfterScreenOffImpl( + directDI = this, + ) + } + bindSingleton { + PutAutofillCopyTotpImpl( + directDI = this, + ) + } + bindSingleton { + PutAutofillInlineSuggestionsImpl( + directDI = this, + ) + } + bindSingleton { + PutAutofillManualSelectionImpl( + directDI = this, + ) + } + bindSingleton { + PutAutofillRespectAutofillOffImpl( + directDI = this, + ) + } + bindSingleton { + PutAutofillSaveRequestImpl( + directDI = this, + ) + } + bindSingleton { + PutAutofillSaveUriImpl( + directDI = this, + ) + } + bindSingleton { + GetThemeVariantsImpl( + directDI = this, + ) + } + bindSingleton { + GetColorsVariantsImpl( + directDI = this, + ) + } + bindSingleton { + GetNavAnimationImpl( + directDI = this, + ) + } + bindSingleton { + GetNavLabelImpl( + directDI = this, + ) + } + bindSingleton { + GetNavAnimationVariantsImpl( + directDI = this, + ) + } + bindSingleton { + GetFontImpl( + directDI = this, + ) + } + bindSingleton { + GetFontVariantsImpl( + directDI = this, + ) + } + bindSingleton { + PutFontImpl( + directDI = this, + ) + } + bindSingleton { + GetLocaleVariantsImpl( + directDI = this, + ) + } + bindSingleton { + GetThemeImpl( + directDI = this, + ) + } + bindSingleton { + GetThemeUseAmoledDarkImpl( + directDI = this, + ) + } + bindSingleton { + GetColorsImpl( + directDI = this, + ) + } + bindSingleton { + GetSubscriptionsImpl( + directDI = this, + ) + } + bindSingleton { + GetProductsImpl( + directDI = this, + ) + } + bindSingleton { + CipherUrlCheckImpl(this) + } + bindSingleton { + CipherUrlDuplicateCheckImpl(this) + } + bindSingleton { + GetCanWriteImpl( + directDI = this, + ) + } + bindSingleton { + GetCachePremiumImpl( + directDI = this, + ) + } + bindSingleton { + PutCachePremiumImpl( + directDI = this, + ) + } + bindSingleton { + PutVaultLockAfterTimeoutImpl( + directDI = this, + ) + } + bindSingleton { + PutConcealFieldsImpl( + directDI = this, + ) + } + bindSingleton { + PutClipboardAutoRefreshImpl( + directDI = this, + ) + } + bindSingleton { + PutClipboardAutoClearImpl( + directDI = this, + ) + } + bindSingleton { + GetClipboardAutoClearImpl( + directDI = this, + ) + } + bindSingleton { + GetClipboardAutoClearVariantsImpl( + directDI = this, + ) + } + bindSingleton { + GetClipboardAutoRefreshImpl( + directDI = this, + ) + } + bindSingleton { + GetClipboardAutoRefreshVariantsImpl( + directDI = this, + ) + } + bindSingleton { + GetDebugPremiumImpl( + directDI = this, + ) + } + bindSingleton { + GetWriteAccessImpl( + directDI = this, + ) + } + bindSingleton { + GetDebugScreenDelayImpl( + directDI = this, + ) + } + bindSingleton { + GetAppIconsImpl( + directDI = this, + ) + } + bindSingleton { + GetWebsiteIconsImpl( + directDI = this, + ) + } + bindSingleton { + GetMarkdownImpl( + directDI = this, + ) + } + bindSingleton { + GetGravatarUrlImpl( + directDI = this, + ) + } + bindSingleton { + GetJustDeleteMeByUrlImpl( + directDI = this, + ) + } + bindSingleton { + PutWriteAccessImpl( + directDI = this, + ) + } + bindSingleton { + PutDebugPremiumImpl( + directDI = this, + ) + } + bindSingleton { + PutDebugScreenDelayImpl( + directDI = this, + ) + } + bindSingleton { + PutAppIconsImpl( + directDI = this, + ) + } + bindSingleton { + PutWebsiteIconsImpl( + directDI = this, + ) + } + bindSingleton { + PutMarkdownImpl( + directDI = this, + ) + } + bindSingleton { + PutOnboardingLastVisitInstantImpl( + directDI = this, + ) + } + bindSingleton { + GetOnboardingLastVisitInstantImpl( + directDI = this, + ) + } + bindSingleton(tag = AppWorker.Feature.SYNC) { + AppWorkerIm( + directDI = this, + ) + } + bindSingleton { + GetVaultSessionImpl( + directDI = this, + ) + } + bindSingleton { + GetVaultPersistImpl( + directDI = this, + ) + } + bindSingleton { + PutVaultPersistImpl( + directDI = this, + ) + } + bindSingleton { + GetAppVersionImpl( + directDI = this, + ) + } + bindSingleton { + GetAppBuildDateImpl( + directDI = this, + ) + } + bindProvider { + instance() + } + bindProvider { + instance() + } + bindSingleton { + MessageHubImpl( + directDI = this, + ) + } + bindSingleton { + RemoveAttachmentImpl( + directDI = this, + ) + } + bindSingleton { + RequestAppReviewImpl( + directDI = this, + ) + } + bindSingleton { + WindowCoroutineScopeImpl( + directDI = this, + ) + } + // Repositories + bindSingleton { + Json { + ignoreUnknownKeys = true + coerceInputValues = true + prettyPrint = false + isLenient = true + serializersModule = SerializersModule { + // default + polymorphic(BitwardenCipher.Attachment::class) { + subclass(BitwardenCipher.Attachment.Remote::class) + subclass(BitwardenCipher.Attachment.Local::class) + defaultDeserializer { BitwardenCipher.Attachment.Remote.serializer() } + } + } + } + } + bindSingleton { + CipherEncryptorImpl( + directDI = this, + ) + } + bindSingleton { + FileEncryptorImpl( + directDI = this, + ) + } + bindSingleton { + PasswordGeneratorDiceware( + directDI = this, + ) + } + bindSingleton { + ReviewLogImpl( + directDI = this, + ) + } + import(emailRelayDiModule()) + bindSingleton { + DeeplinkServiceImpl( + directDI = this, + ) + } + bindSingleton { + WordlistServiceImpl( + directDI = this, + ) + } + bindSingleton { + TwoFaServiceImpl( + directDI = this, + ) + } + bindSingleton { + PassKeyServiceImpl( + directDI = this, + ) + } + bindSingleton { + JustDeleteMeServiceImpl( + directDI = this, + ) + } + bindSingleton { + PrivilegedAppsServiceImpl( + directDI = this, + ) + } + bindSingleton { + JustGetMyDataServiceImpl( + directDI = this, + ) + } + bindSingleton { + LicenseServiceImpl( + directDI = this, + ) + } + bindSingleton { + TldServiceImpl( + directDI = this, + ) + } + bindSingleton { + LinkInfoPlatformExtractor() + } + bindSingleton { + SimilarityServiceJvm( + directDI = this, + ) + } + bindSingleton { + val store = instance( + arg = Files.DEVICE_ID, + tag = "shared", + ) + IdRepositoryImpl( + store = store, + ) + } + bindSingleton { + val store = instance( + arg = Files.UI_STATE, + ) + StateRepositoryImpl( + store = store, + json = instance(), + ) + } + bindSingleton { + DeviceIdUseCase( + directDI = this, + ) + } + bindSingleton { + DeviceEncryptionKeyUseCase( + directDI = this, + ) + } + bindSingleton { + GetAppVersionCodeImpl() + } + bindSingleton { + GetAppVersionNameImpl() + } + bindSingleton { + GetPasswordStrengthJvm( + directDI = this, + ) + } + bindSingleton { + GetAppBuildTypeImpl(this) + } + bindSingleton { + DateFormatterAndroid( + directDI = this, + ) + } + bindSingleton { + NumberFormatterJvm( + directDI = this, + ) + } + bindSingleton { + CryptoGeneratorJvm() + } + bindSingleton { + TotpServiceImpl( + directDI = this, + ) + } + bindSingleton { + val json: Json = instance() + val okHttpClient: OkHttpClient = instance() + HttpClient(OkHttp) { + install(UserAgent) { + agent = + "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36" + } + engine { + preconfigured = okHttpClient + } + install(Logging) { + level = if (isRelease) LogLevel.INFO else LogLevel.ALL + } + install(ContentNegotiation) { + register(ContentType.Application.Json, KotlinxSerializationConverter(json)) + } + install(WebSockets) { + pingInterval = 20_000 + } + install(HttpCache) { + // In memory. + } + install(HttpRequestRetry) { + maxRetries = 5 + retryIf { _, response -> + response.status == HttpStatusCode.TooManyRequests || + response.status.value in 500..599 + } + constantDelay( + respectRetryAfterHeader = true, + ) + } + } + } + bindSingleton(tag = "curl") { + val json: Json = instance() + val okHttpClient: OkHttpClient = instance() + HttpClient(OkHttp) { + CurlUserAgent() + engine { + preconfigured = okHttpClient + } + install(Logging) { + level = if (isRelease) LogLevel.INFO else LogLevel.ALL + } + install(ContentNegotiation) { + register(ContentType.Application.Json, KotlinxSerializationConverter(json)) + } + install(WebSockets) { + pingInterval = 20_000 + } + install(HttpCache) { + // In memory. + } + install(HttpRequestRetry) { + maxRetries = 5 + retryIf { _, response -> + response.status == HttpStatusCode.TooManyRequests || + response.status.value in 500..599 + } + constantDelay( + respectRetryAfterHeader = true, + ) + } + } + } + bindSingleton { + OkHttpClient + .Builder() + .apply { + if (!isRelease) { + val logRepository: LogRepository = instance() + val logger = HttpLoggingInterceptor.Logger { message -> + logRepository.post( + tag = "OkHttp", + message = message, + ) + } + val logging = HttpLoggingInterceptor(logger).apply { + level = HttpLoggingInterceptor.Level.BODY + } + addInterceptor(logging) + } + } + .build() + } + installFingerprintRepo() + installKeyRepo() + installSessionRepo() + installSessionMetadataRepo() + installSettingsRepo() +} + +private fun DI.Builder.installFingerprintRepo() { + bindSingleton { + FingerprintRepositoryImpl(directDI) + } + bindProvider { + instance() + } + bindProvider { + instance() + } +} + +private fun DI.Builder.installKeyRepo() { + bindSingleton { + KeyRepositoryImpl(directDI) + } + bindProvider { + instance() + } + bindProvider { + instance() + } +} + +private fun DI.Builder.installSessionRepo() { + bindSingleton { + SessionRepositoryImpl() + } + bindProvider { + instance() + } + bindProvider { + instance() + } +} + +private fun DI.Builder.installSessionMetadataRepo() { + bindSingleton { + SessionMetadataRepositoryImpl( + directDI = directDI, + ) + } + bindProvider { + instance() + } + bindProvider { + instance() + } +} + +private fun DI.Builder.installSettingsRepo() { + bindSingleton { + SettingsRepositoryImpl( + directDI = directDI, + ) + } + bindProvider { + instance() + } + bindProvider { + instance() + } +} diff --git a/common/src/jvmMain/kotlin/com/artemchep/keyguard/messagepack/MessagePackHubProtocol.kt b/common/src/jvmMain/kotlin/com/artemchep/keyguard/messagepack/MessagePackHubProtocol.kt new file mode 100644 index 00000000..597e1db0 --- /dev/null +++ b/common/src/jvmMain/kotlin/com/artemchep/keyguard/messagepack/MessagePackHubProtocol.kt @@ -0,0 +1,670 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +package com.artemchep.keyguard.messagepack + +import com.artemchep.keyguard.messagepack.Utils.getLengthHeader +import com.artemchep.keyguard.messagepack.Utils.readLengthHeader +import com.artemchep.keyguard.messagepack.Utils.toPrimitive +import com.artemchep.keyguard.messagepack.Utils.typeToClass +import com.fasterxml.jackson.databind.ObjectMapper +import com.microsoft.signalr.CancelInvocationMessage +import com.microsoft.signalr.CloseMessage +import com.microsoft.signalr.CompletionMessage +import com.microsoft.signalr.HubMessage +import com.microsoft.signalr.HubMessageType +import com.microsoft.signalr.HubProtocol +import com.microsoft.signalr.InvocationBinder +import com.microsoft.signalr.InvocationBindingFailureMessage +import com.microsoft.signalr.InvocationMessage +import com.microsoft.signalr.PingMessage +import com.microsoft.signalr.StreamBindingFailureMessage +import com.microsoft.signalr.StreamInvocationMessage +import com.microsoft.signalr.StreamItem +import org.msgpack.core.MessageFormat +import org.msgpack.core.MessagePack +import org.msgpack.core.MessagePackException +import org.msgpack.core.MessagePacker +import org.msgpack.core.MessageUnpacker +import org.msgpack.jackson.dataformat.MessagePackFactory +import org.msgpack.value.ValueType +import java.io.IOException +import java.lang.reflect.Type +import java.nio.Buffer +import java.nio.ByteBuffer +import java.util.* + +class MessagePackHubProtocol : HubProtocol { + private val objectMapper = ObjectMapper(MessagePackFactory()) + private val typeFactory = objectMapper.typeFactory + override fun getName(): String { + return "messagepack" + } + + override fun getVersion(): Int { + return 1 + } + + override fun parseMessages( + payload: ByteBuffer, + binder: InvocationBinder, + ): List? { + var payload = payload + if (payload.remaining() == 0) { + return null + } + + // MessagePack library can't handle read-only ByteBuffer - copy into an array-backed ByteBuffer if this is the case + if (payload.isReadOnly) { + val payloadBytes = ByteArray(payload.remaining()) + payload[payloadBytes, 0, payloadBytes.size] + payload = ByteBuffer.wrap(payloadBytes) + } + val hubMessages: MutableList = ArrayList() + while (payload.hasRemaining()) { + var length: Int + try { + length = readLengthHeader(payload) + // Throw if remaining buffer is shorter than length header + if (payload.remaining() < length) { + throw RuntimeException( + String.format( + "MessagePack message was length %d but claimed to be length %d.", + payload.remaining(), + length, + ), + ) + } + } catch (ex: IOException) { + throw RuntimeException("Error reading length header.", ex) + } + // Instantiate MessageUnpacker + try { + MessagePack.newDefaultUnpacker(payload).use { unpacker -> + val itemCount = unpacker.unpackArrayHeader() + val messageType = HubMessageType.values()[unpacker.unpackInt() - 1] + when (messageType) { + HubMessageType.INVOCATION -> hubMessages.add( + createInvocationMessage( + unpacker, + binder, + itemCount, + payload, + ), + ) + + HubMessageType.STREAM_ITEM -> hubMessages.add( + createStreamItemMessage( + unpacker, + binder, + payload, + ), + ) + + HubMessageType.COMPLETION -> hubMessages.add( + createCompletionMessage( + unpacker, + binder, + payload, + ), + ) + + HubMessageType.STREAM_INVOCATION -> hubMessages.add( + createStreamInvocationMessage(unpacker, binder, itemCount, payload), + ) + + HubMessageType.CANCEL_INVOCATION -> hubMessages.add( + createCancelInvocationMessage(unpacker), + ) + + HubMessageType.PING -> hubMessages.add(PingMessage.getInstance()) + HubMessageType.CLOSE -> hubMessages.add( + createCloseMessage( + unpacker, + itemCount, + ), + ) + + else -> {} + } + // Make sure that we actually read the right number of bytes + val readBytes = unpacker.totalReadBytes.toInt() + if (readBytes != length) { + // Check what the last message was + // If it was an invocation binding failure, we have to correct the position of the buffer + if (hubMessages[hubMessages.size - 1].messageType == HubMessageType.INVOCATION_BINDING_FAILURE) { + // Cast to a Buffer to avoid the Java 9+ behavior where ByteBuffer.position(int) overrides Buffer.position(int), + // Returning a ByteBuffer rather than a Buffer. This causes issues on Android - see https://github.com/dotnet/aspnetcore/pull/26614 + (payload as Buffer).position(payload.position() + (length - readBytes)) + } else { + throw RuntimeException( + String.format( + "MessagePack message was length %d but claimed to be length %d.", + readBytes, + length, + ), + ) + } + } + unpacker.close() + // Cast to a Buffer to avoid the Java 9+ behavior where ByteBuffer.position(int) overrides Buffer.position(int), + // Returning a ByteBuffer rather than a Buffer. This causes issues on Android - see https://github.com/dotnet/aspnetcore/pull/26614 + (payload as Buffer).position(payload.position() + readBytes) + } + } catch (ex: MessagePackException) { + throw RuntimeException("Error reading MessagePack data.", ex) + } catch (ex: IOException) { + throw RuntimeException("Error reading MessagePack data.", ex) + } + } + return hubMessages + } + + override fun writeMessage(hubMessage: HubMessage): ByteBuffer { + val messageType = hubMessage.messageType + return try { + val message: ByteArray + message = when (messageType) { + HubMessageType.INVOCATION -> writeInvocationMessage(hubMessage as InvocationMessage) + HubMessageType.STREAM_ITEM -> writeStreamItemMessage(hubMessage as StreamItem) + HubMessageType.COMPLETION -> writeCompletionMessage(hubMessage as CompletionMessage) + HubMessageType.STREAM_INVOCATION -> writeStreamInvocationMessage(hubMessage as StreamInvocationMessage) + HubMessageType.CANCEL_INVOCATION -> writeCancelInvocationMessage(hubMessage as CancelInvocationMessage) + HubMessageType.PING -> writePingMessage(hubMessage as PingMessage) + HubMessageType.CLOSE -> writeCloseMessage(hubMessage as CloseMessage) + else -> throw RuntimeException( + String.format( + "Unexpected message type: %d", + messageType.value, + ), + ) + } + val length = message.size + val header: List = getLengthHeader(length) + val messageWithHeader = ByteArray(header.size + length) + val headerSize = header.size + + // Write the length header, then all of the bytes of the original message + for (i in 0 until headerSize) { + messageWithHeader[i] = header[i] + } + for (i in 0 until length) { + messageWithHeader[i + headerSize] = message[i] + } + ByteBuffer.wrap(messageWithHeader) + } catch (ex: MessagePackException) { + throw RuntimeException("Error writing MessagePack data.", ex) + } catch (ex: IOException) { + throw RuntimeException("Error writing MessagePack data.", ex) + } + } + + @Throws(IOException::class) + private fun createInvocationMessage( + unpacker: MessageUnpacker, + binder: InvocationBinder, + itemCount: Int, + payload: ByteBuffer, + ): HubMessage { + val headers = readHeaders(unpacker) + + // invocationId may be nil + var invocationId: String? = null + if (!unpacker.tryUnpackNil()) { + invocationId = unpacker.unpackString() + } + + // For MsgPack, we represent an empty invocation ID as an empty string, + // so we need to normalize that to "null", which is what indicates a non-blocking invocation. + if (invocationId == null || invocationId.isEmpty()) { + invocationId = null + } + val target = unpacker.unpackString() + var arguments: Array? = null + arguments = try { + val types = binder.getParameterTypes(target) + bindArguments(unpacker, types, payload) + } catch (ex: Exception) { + return InvocationBindingFailureMessage(invocationId, target, ex) + } + var streams: Collection? = null + // Older implementations may not send the streamID array + if (itemCount > 5) { + streams = readStreamIds(unpacker) + } + return InvocationMessage(headers, invocationId, target, arguments, streams) + } + + @Throws(IOException::class) + private fun createStreamItemMessage( + unpacker: MessageUnpacker, + binder: InvocationBinder, + payload: ByteBuffer, + ): HubMessage { + val headers = readHeaders(unpacker) + val invocationId = unpacker.unpackString() + val value: Any? + value = try { + val itemType = binder.getReturnType(invocationId) + readValue(unpacker, itemType, payload, true) + } catch (ex: Exception) { + return StreamBindingFailureMessage(invocationId, ex) + } + return StreamItem(headers, invocationId, value) + } + + @Throws(IOException::class) + private fun createCompletionMessage( + unpacker: MessageUnpacker, + binder: InvocationBinder, + payload: ByteBuffer, + ): HubMessage { + val headers = readHeaders(unpacker) + val invocationId = unpacker.unpackString() + val resultKind = unpacker.unpackInt() + var error: String? = null + var result: Any? = null + when (resultKind) { + ERROR_RESULT -> error = unpacker.unpackString() + VOID_RESULT -> {} + NON_VOID_RESULT -> { + val itemType = binder.getReturnType(invocationId) + result = readValue(unpacker, itemType, payload, true) + } + + else -> throw RuntimeException("Invalid invocation result kind.") + } + return CompletionMessage(headers, invocationId, result, error) + } + + @Throws(IOException::class) + private fun createStreamInvocationMessage( + unpacker: MessageUnpacker, + binder: InvocationBinder, + itemCount: Int, + payload: ByteBuffer, + ): HubMessage { + val headers = readHeaders(unpacker) + val invocationId = unpacker.unpackString() + val target = unpacker.unpackString() + var arguments: Array? = null + arguments = try { + val types = binder.getParameterTypes(target) + bindArguments(unpacker, types, payload) + } catch (ex: Exception) { + return InvocationBindingFailureMessage(invocationId, target, ex) + } + val streams = readStreamIds(unpacker) + return StreamInvocationMessage(headers, invocationId, target, arguments, streams) + } + + @Throws(IOException::class) + private fun createCancelInvocationMessage(unpacker: MessageUnpacker): HubMessage { + val headers = readHeaders(unpacker) + val invocationId = unpacker.unpackString() + return CancelInvocationMessage(headers, invocationId) + } + + @Throws(IOException::class) + private fun createCloseMessage(unpacker: MessageUnpacker, itemCount: Int): HubMessage { + // error may be nil + var error: String? = null + if (!unpacker.tryUnpackNil()) { + error = unpacker.unpackString() + } + var allowReconnect = false + if (itemCount > 2) { + allowReconnect = unpacker.unpackBoolean() + } + return CloseMessage(error, allowReconnect) + } + + @Throws(IOException::class) + private fun writeInvocationMessage(message: InvocationMessage): ByteArray { + val packer = MessagePack.newDefaultBufferPacker() + packer.packArrayHeader(6) + packer.packInt(message.messageType.value) + writeHeaders(message.headers, packer) + val invocationId = message.invocationId + if (invocationId != null && !invocationId.isEmpty()) { + packer.packString(invocationId) + } else { + packer.packNil() + } + packer.packString(message.target) + val arguments = message.arguments + packer.packArrayHeader(arguments.size) + for (o in arguments) { + writeValue(o, packer) + } + writeStreamIds(message.streamIds, packer) + packer.flush() + val content = packer.toByteArray() + packer.close() + return content + } + + @Throws(IOException::class) + private fun writeStreamItemMessage(message: StreamItem): ByteArray { + val packer = MessagePack.newDefaultBufferPacker() + packer.packArrayHeader(4) + packer.packInt(message.messageType.value) + writeHeaders(message.headers, packer) + packer.packString(message.invocationId) + writeValue(message.item, packer) + packer.flush() + val content = packer.toByteArray() + packer.close() + return content + } + + @Throws(IOException::class) + private fun writeCompletionMessage(message: CompletionMessage): ByteArray { + val packer = MessagePack.newDefaultBufferPacker() + val resultKind = + if (message.error != null) ERROR_RESULT else if (message.result != null) NON_VOID_RESULT else VOID_RESULT + packer.packArrayHeader(4 + if (resultKind != VOID_RESULT) 1 else 0) + packer.packInt(message.messageType.value) + writeHeaders(message.headers, packer) + packer.packString(message.invocationId) + packer.packInt(resultKind) + when (resultKind) { + ERROR_RESULT -> packer.packString(message.error) + NON_VOID_RESULT -> writeValue(message.result, packer) + } + packer.flush() + val content = packer.toByteArray() + packer.close() + return content + } + + @Throws(IOException::class) + private fun writeStreamInvocationMessage(message: StreamInvocationMessage): ByteArray { + val packer = MessagePack.newDefaultBufferPacker() + packer.packArrayHeader(6) + packer.packInt(message.messageType.value) + writeHeaders(message.headers, packer) + packer.packString(message.invocationId) + packer.packString(message.target) + val arguments = message.arguments + packer.packArrayHeader(arguments.size) + for (o in arguments) { + writeValue(o, packer) + } + writeStreamIds(message.streamIds, packer) + packer.flush() + val content = packer.toByteArray() + packer.close() + return content + } + + @Throws(IOException::class) + private fun writeCancelInvocationMessage(message: CancelInvocationMessage): ByteArray { + val packer = MessagePack.newDefaultBufferPacker() + packer.packArrayHeader(3) + packer.packInt(message.messageType.value) + writeHeaders(message.headers, packer) + packer.packString(message.invocationId) + packer.flush() + val content = packer.toByteArray() + packer.close() + return content + } + + @Throws(IOException::class) + private fun writePingMessage(message: PingMessage): ByteArray { + val packer = MessagePack.newDefaultBufferPacker() + packer.packArrayHeader(1) + packer.packInt(message.messageType.value) + packer.flush() + val content = packer.toByteArray() + packer.close() + return content + } + + @Throws(IOException::class) + private fun writeCloseMessage(message: CloseMessage): ByteArray { + val packer = MessagePack.newDefaultBufferPacker() + packer.packArrayHeader(3) + packer.packInt(message.messageType.value) + val error = message.error + if (error != null && !error.isEmpty()) { + packer.packString(error) + } else { + packer.packNil() + } + packer.packBoolean(message.allowReconnect) + packer.flush() + val content = packer.toByteArray() + packer.close() + return content + } + + @Throws(IOException::class) + private fun readHeaders(unpacker: MessageUnpacker): Map? { + val headerCount = unpacker.unpackMapHeader() + return if (headerCount > 0) { + val headers: MutableMap = + HashMap() + for (i in 0 until headerCount) { + headers[unpacker.unpackString()] = unpacker.unpackString() + } + headers + } else { + null + } + } + + @Throws(IOException::class) + private fun writeHeaders(headers: Map?, packer: MessagePacker) { + if (headers != null) { + packer.packMapHeader(headers.size) + for (k in headers.keys) { + packer.packString(k) + packer.packString(headers[k]) + } + } else { + packer.packMapHeader(0) + } + } + + @Throws(IOException::class) + private fun readStreamIds(unpacker: MessageUnpacker): Collection? { + val streamCount = unpacker.unpackArrayHeader() + var streams: MutableCollection? = null + if (streamCount > 0) { + streams = ArrayList() + for (i in 0 until streamCount) { + streams.add(unpacker.unpackString()) + } + } + return streams + } + + @Throws(IOException::class) + private fun writeStreamIds(streamIds: Collection?, packer: MessagePacker) { + if (streamIds != null) { + packer.packArrayHeader(streamIds.size) + for (s in streamIds) { + packer.packString(s) + } + } else { + packer.packArrayHeader(0) + } + } + + @Throws(IOException::class) + private fun bindArguments( + unpacker: MessageUnpacker, + paramTypes: List, + payload: ByteBuffer, + ): Array { + val argumentCount = unpacker.unpackArrayHeader() + if (paramTypes.size != argumentCount) { + throw RuntimeException( + String.format( + "Invocation provides %d argument(s) but target expects %d.", + argumentCount, + paramTypes.size, + ), + ) + } + val arguments = arrayOfNulls(argumentCount) + for (i in 0 until argumentCount) { + arguments[i] = readValue(unpacker, paramTypes[i], payload, true) + } + return arguments + } + + @Throws(IOException::class) + private fun readValue( + unpacker: MessageUnpacker, + itemType: Type?, + payload: ByteBuffer, + outermostCall: Boolean, + ): Any? { + val itemClass = typeToClass(itemType) + val messageFormat = unpacker.nextFormat + val valueType = messageFormat.valueType + val length: Int + val readBytesStart: Long + var item: Any? = null + when (valueType) { + ValueType.NIL -> { + unpacker.unpackNil() + return null + } + + ValueType.BOOLEAN -> item = unpacker.unpackBoolean() + ValueType.INTEGER -> when (messageFormat) { + MessageFormat.UINT64 -> item = unpacker.unpackBigInteger() + MessageFormat.INT64, MessageFormat.UINT32 -> item = unpacker.unpackLong() + else -> { + item = unpacker.unpackInt() + // unpackInt could correspond to an int, short, char, or byte - cast those literally here + if (itemClass != null) { + if (itemClass == Short::class.java || itemClass == Short::class.javaPrimitiveType) { + item = item.toShort() + } else if (itemClass == Char::class.java || itemClass == Char::class.javaPrimitiveType) { + item = item.toShort().toChar() + } else if (itemClass == Byte::class.java || itemClass == Byte::class.javaPrimitiveType) { + item = item.toByte() + } + } + } + } + + ValueType.FLOAT -> item = unpacker.unpackDouble() + ValueType.STRING -> { + item = unpacker.unpackString() + // ObjectMapper packs chars as Strings - correct back to char while unpacking if necessary + if (itemClass != null && (itemClass == Char::class.javaPrimitiveType || itemClass == Char::class.java)) { + item = item!![0] + } + } + + ValueType.BINARY -> { + length = unpacker.unpackBinaryHeader() + val binaryValue = ByteArray(length) + unpacker.readPayload(binaryValue) + item = binaryValue + } + + ValueType.ARRAY -> { + readBytesStart = unpacker.totalReadBytes + length = unpacker.unpackArrayHeader() + var i = 0 + while (i < length) { + readValue(unpacker, Any::class.java, payload, false) + i++ + } + return if (outermostCall) { + // Check how many bytes we've read, grab that from the payload, and deserialize with objectMapper + val payloadBytes = payload.array() + // If itemType was null, we were just in this method to advance the buffer. return null. + if (itemType == null) { + null + } else { + objectMapper.readValue( + payloadBytes, + payload.position() + readBytesStart.toInt(), + (unpacker.totalReadBytes - readBytesStart).toInt(), + typeFactory.constructType(itemType), + ) + } + } else { + // This is an inner call to readValue - we just need to read the right number of bytes + // We can return null, and the outermost call will know how many bytes to give to objectMapper. + null + } + } + + ValueType.MAP -> { + readBytesStart = unpacker.totalReadBytes + length = unpacker.unpackMapHeader() + var i = 0 + while (i < length) { + readValue(unpacker, Any::class.java, payload, false) + readValue(unpacker, Any::class.java, payload, false) + i++ + } + return if (outermostCall) { + // Check how many bytes we've read, grab that from the payload, and deserialize with objectMapper + val payloadBytes = payload.array() + val mapBytes = Arrays.copyOfRange( + payloadBytes, + payload.position() + readBytesStart.toInt(), + payload.position() + unpacker.totalReadBytes.toInt(), + ) + // If itemType was null, we were just in this method to advance the buffer. return null. + if (itemType == null) { + null + } else { + objectMapper.readValue( + payloadBytes, + payload.position() + readBytesStart.toInt(), + (unpacker.totalReadBytes - readBytesStart).toInt(), + typeFactory.constructType(itemType), + ) + } + } else { + // This is an inner call to readValue - we just need to read the right number of bytes + // We can return null, and the outermost call will know how many bytes to give to objectMapper. + null + } + } + + ValueType.EXTENSION -> { + val extension = unpacker.unpackExtensionTypeHeader() + val extensionValue = ByteArray(extension.length) + unpacker.readPayload(extensionValue) + // TODO: Convert this to an object? Have to return + // stub object to prevent a crash, + item = extensionValue + return Any() + } + + else -> return null + } + // If itemType was null, we were just in this method to advance the buffer. return null. + if (itemType == null) { + return null + } + // If we get here, the item isn't a map or a collection/array, so we use the Class to cast it + return if (itemClass!!.isPrimitive) { + toPrimitive(itemClass, item) + } else { + itemClass.cast(item) + } + } + + @Throws(IOException::class) + private fun writeValue(o: Any, packer: MessagePacker) { + packer.addPayload(objectMapper.writeValueAsBytes(o)) + } + + companion object { + private const val ERROR_RESULT = 1 + private const val VOID_RESULT = 2 + private const val NON_VOID_RESULT = 3 + } +} diff --git a/common/src/jvmMain/kotlin/com/artemchep/keyguard/messagepack/Utils.kt b/common/src/jvmMain/kotlin/com/artemchep/keyguard/messagepack/Utils.kt new file mode 100644 index 00000000..f00e2cee --- /dev/null +++ b/common/src/jvmMain/kotlin/com/artemchep/keyguard/messagepack/Utils.kt @@ -0,0 +1,115 @@ +package com.artemchep.keyguard.messagepack + +import java.io.IOException +import java.lang.reflect.Array +import java.lang.reflect.GenericArrayType +import java.lang.reflect.ParameterizedType +import java.lang.reflect.Type +import java.lang.reflect.TypeVariable +import java.lang.reflect.WildcardType +import java.nio.ByteBuffer + +object Utils { + @Throws(IOException::class) + fun readLengthHeader(buffer: ByteBuffer): Int { + // The payload starts with a length prefix encoded as a VarInt. VarInts use the most significant bit + // as a marker whether the byte is the last byte of the VarInt or if it spans to the next byte. Bytes + // appear in the reverse order - i.e. the first byte contains the least significant bits of the value + // Examples: + // VarInt: 0x35 - %00110101 - the most significant bit is 0 so the value is %x0110101 i.e. 0x35 (53) + // VarInt: 0x80 0x25 - %10000000 %00101001 - the most significant bit of the first byte is 1 so the + // remaining bits (%x0000000) are the lowest bits of the value. The most significant bit of the second + // byte is 0 meaning this is last byte of the VarInt. The actual value bits (%x0101001) need to be + // prepended to the bits we already read so the values is %01010010000000 i.e. 0x1480 (5248) + // We support payloads up to 2GB so the biggest number we support is 7fffffff which when encoded as + // VarInt is 0xFF 0xFF 0xFF 0xFF 0x07 - hence the maximum length prefix is 5 bytes. + var length = 0 + var numBytes = 0 + val maxLength = 5 + var curr: Byte + do { + // If we run out of bytes before we finish reading the length header, the message is malformed + curr = if (buffer.hasRemaining()) { + buffer.get() + } else { + throw RuntimeException("The length header was incomplete") + } + length = length or (curr.toInt() and 0x7f.toByte().toInt() shl numBytes * 7) + numBytes++ + } while (numBytes < maxLength && curr.toInt() and 0x80.toByte().toInt() != 0) + + // Max header length is 5, and the maximum value of the 5th byte is 0x07 + if (curr.toInt() and 0x80.toByte() + .toInt() != 0 || numBytes == maxLength && curr > 0x07.toByte() + ) { + throw RuntimeException("Messages over 2GB in size are not supported") + } + return length + } + + fun getLengthHeader(length: Int): ArrayList { + // This code writes length prefix of the message as a VarInt. Read the comment in + // the readLengthHeader for details. + var length = length + val header = ArrayList() + do { + var curr = (length and 0x7f).toByte() + length = length shr 7 + if (length > 0) { + curr = (curr.toInt() or 0x80).toByte() + } + header.add(curr) + } while (length > 0) + return header + } + + fun toPrimitive(c: Class<*>, value: Any?): Any? { + if (Boolean::class.javaPrimitiveType == c) return value as Boolean? + if (Byte::class.javaPrimitiveType == c) return value as Byte? + if (Short::class.javaPrimitiveType == c) return value as Short? + if (Int::class.javaPrimitiveType == c) return value as Int? + if (Long::class.javaPrimitiveType == c) return value as Long? + if (Float::class.javaPrimitiveType == c) return value as Float? + if (Double::class.javaPrimitiveType == c) return value as Double? + return if (Char::class.javaPrimitiveType == c) value as Char? else value + } + + fun typeToClass(type: Type?): Class<*>? { + if (type == null) { + return null + } + return if (type is Class<*>) { + type + } else if (type is GenericArrayType) { + // Instantiate an array of the same type as this type, then return its class + Array.newInstance( + typeToClass( + type.genericComponentType, + )!!, + 0, + ).javaClass + } else if (type is ParameterizedType) { + typeToClass(type.rawType) + } else if (type is TypeVariable<*>) { + val bounds = type.bounds + if (bounds.isEmpty()) { + Any::class.java + } else { + typeToClass( + bounds[0], + ) + } + } else if (type is WildcardType) { + val bounds = type.upperBounds + if (bounds.isEmpty()) { + Any::class.java + } else { + typeToClass( + bounds[0], + ) + } + } else { + throw UnsupportedOperationException("Cannot handle type class: " + type.javaClass) + } + } +} diff --git a/common/src/jvmMain/kotlin/com/artemchep/keyguard/platform/LeCipher.kt b/common/src/jvmMain/kotlin/com/artemchep/keyguard/platform/LeCipher.kt new file mode 100644 index 00000000..363cb498 --- /dev/null +++ b/common/src/jvmMain/kotlin/com/artemchep/keyguard/platform/LeCipher.kt @@ -0,0 +1,7 @@ +package com.artemchep.keyguard.platform + +import javax.crypto.Cipher + +actual typealias LeCipher = Cipher + +actual val LeCipher.leIv: ByteArray get() = iv diff --git a/common/src/jvmMain/kotlin/com/artemchep/keyguard/provider/bitwarden/api/notification.kt b/common/src/jvmMain/kotlin/com/artemchep/keyguard/provider/bitwarden/api/notification.kt new file mode 100644 index 00000000..29aeda98 --- /dev/null +++ b/common/src/jvmMain/kotlin/com/artemchep/keyguard/provider/bitwarden/api/notification.kt @@ -0,0 +1,73 @@ +package com.artemchep.keyguard.provider.bitwarden.api + +import com.artemchep.keyguard.core.store.bitwarden.BitwardenToken +import com.artemchep.keyguard.messagepack.MessagePackHubProtocol +import com.artemchep.keyguard.platform.recordLog +import com.artemchep.keyguard.provider.bitwarden.api.builder.notifications +import com.microsoft.signalr.HubConnectionBuilder +import com.microsoft.signalr.TransportEnum +import io.reactivex.rxjava3.core.CompletableObserver +import io.reactivex.rxjava3.core.CompletableSource +import io.reactivex.rxjava3.core.Single +import io.reactivex.rxjava3.disposables.Disposable +import kotlinx.coroutines.CancellableContinuation +import kotlinx.coroutines.CancellationException +import kotlinx.coroutines.Job +import kotlinx.coroutines.suspendCancellableCoroutine +import kotlin.coroutines.resume +import kotlin.coroutines.resumeWithException + +suspend fun notificationsHub( + user: BitwardenToken, + onMessage: (Any) -> Unit, +) { + val a = user.env.back().notifications.hub + val hubConnection = HubConnectionBuilder.create(a) // + .withAccessTokenProvider(Single.just(user.token!!.accessToken)) + .shouldSkipNegotiate(true) + .withHubProtocol(MessagePackHubProtocol()) + .withTransport(TransportEnum.WEBSOCKETS) + .build() + hubConnection.on( + "ReceiveMessage", + { + recordLog("message @ notifications") + onMessage(it) + }, + Any::class.java, + ) + hubConnection.on("Heartbeat") { + } + hubConnection + .start() + .await() +} + +/** + * Awaits for completion of this completable without blocking the thread. + * Returns `Unit`, or throws the corresponding exception if this completable produces an error. + * + * This suspending function is cancellable. If the [Job] of the invoking coroutine is cancelled or completed while this + * suspending function is suspended, this function immediately resumes with [CancellationException] and disposes of its + * subscription. + */ +private suspend fun CompletableSource.await(): Unit = suspendCancellableCoroutine { cont -> + subscribe( + object : CompletableObserver { + override fun onSubscribe(d: Disposable) { + cont.disposeOnCancellation(d) + } + + override fun onComplete() { + cont.resume(Unit) + } + + override fun onError(e: Throwable) { + cont.resumeWithException(e) + } + }, + ) +} + +private fun CancellableContinuation<*>.disposeOnCancellation(d: Disposable) = + invokeOnCancellation { d.dispose() } diff --git a/common/src/jvmMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/Notifications.kt b/common/src/jvmMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/Notifications.kt new file mode 100644 index 00000000..d9ca33e9 --- /dev/null +++ b/common/src/jvmMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/Notifications.kt @@ -0,0 +1,157 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase + +import com.artemchep.keyguard.common.NotificationsWorker +import com.artemchep.keyguard.common.io.attempt +import com.artemchep.keyguard.common.io.launchIn +import com.artemchep.keyguard.common.model.AccountId +import com.artemchep.keyguard.common.service.connectivity.ConnectivityService +import com.artemchep.keyguard.common.service.text.Base64Service +import com.artemchep.keyguard.common.usecase.QueueSyncAll +import com.artemchep.keyguard.common.usecase.QueueSyncById +import com.artemchep.keyguard.core.store.DatabaseManager +import com.artemchep.keyguard.core.store.bitwarden.BitwardenToken +import com.artemchep.keyguard.platform.recordException +import com.artemchep.keyguard.provider.bitwarden.api.notificationsHub +import com.artemchep.keyguard.provider.bitwarden.repository.BitwardenTokenRepository +import com.artemchep.keyguard.provider.bitwarden.usecase.util.withRefreshableAccessToken +import com.artemchep.keyguard.provider.bitwarden.usecase.util.withRetry +import io.ktor.client.HttpClient +import kotlinx.collections.immutable.persistentMapOf +import kotlinx.coroutines.CancellationException +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.Job +import kotlinx.coroutines.SupervisorJob +import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.scan +import kotlinx.coroutines.launch +import kotlinx.coroutines.plus +import kotlinx.serialization.json.Json +import org.kodein.di.DirectDI +import org.kodein.di.instance + +/** + * @author Artem Chepurnyi + */ +class NotificationsImpl( + private val tokenRepository: BitwardenTokenRepository, + private val base64Service: Base64Service, + private val connectivityService: ConnectivityService, + private val json: Json, + private val httpClient: HttpClient, + private val db: DatabaseManager, + private val queueSyncById: QueueSyncById, + private val queueSyncAll: QueueSyncAll, +) : NotificationsWorker { + constructor(directDI: DirectDI) : this( + tokenRepository = directDI.instance(), + base64Service = directDI.instance(), + connectivityService = directDI.instance(), + json = directDI.instance(), + httpClient = directDI.instance(), + db = directDI.instance(), + queueSyncById = directDI.instance(), + queueSyncAll = directDI.instance(), + ) + + private class FooBar( + val key: Any, + val job: Job, + ) + + override fun launch(scope: CoroutineScope): Job = scope.launch { + val subScope = this + SupervisorJob() + + fun launchJob( + user: BitwardenToken, + ): Job = subScope.launch { + val result = runCatching { + withRefreshableAccessToken( + base64Service = base64Service, + httpClient = httpClient, + json = json, + db = db, + user = user, + ) { latestUser -> + if (latestUser != user) { + // We give a chance for the database to update itself and + // emit the updated user once again. This delay should be + // large enough for the change to loop around and cancel + // this task. This delay should be small enough for a chance + // that there's no database update happening internally. + delay(1500L) + } + + withRetry { + // We must have internet access to connect to the + // notifications service. + connectivityService.awaitAvailable() + + notificationsHub( + user = latestUser, + onMessage = { + val accountId = AccountId(latestUser.id) + queueSyncById(accountId) + .launchIn(GlobalScope) + }, + ) + } + } + } + result.onFailure { + if (it is CancellationException) { + return@onFailure + } + + recordException(it) + } + } + + // Connect to each account's notifications service. Try to + // keep the not-changed accounts active. + tokenRepository + .get() + .scan( + initial = persistentMapOf(), + ) { state, new -> + var newState = state + // Find if a new entry has a different + // key comparing to the old one. + new.forEach { account -> + val existingEntry = state[account.id] + if (existingEntry != null) { + val existingKey = existingEntry.key + if (existingKey == account) { + // keep the old entity. + return@forEach + } + + // Cancel old job. + existingEntry.job.cancel() + } + + val entry = FooBar( + key = account, + job = launchJob(account), + ) + newState = newState.put(account.id, entry) + } + // Clean-up removed entries. + newState.forEach { (id, _) -> + val removed = new.none { it.id == id } + if (removed) { + newState = newState.remove(id) + } + } + + newState + } + .launchIn(this) + + // On start sync all the accounts. + queueSyncAll() + .attempt() // ignore crashes + .launchIn(this) + } +} diff --git a/common/src/jvmMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/util/pbk.kt b/common/src/jvmMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/util/pbk.kt new file mode 100644 index 00000000..72d90a1b --- /dev/null +++ b/common/src/jvmMain/kotlin/com/artemchep/keyguard/provider/bitwarden/usecase/util/pbk.kt @@ -0,0 +1,47 @@ +package com.artemchep.keyguard.provider.bitwarden.usecase.util + +import org.bouncycastle.asn1.ASN1Sequence +import org.bouncycastle.asn1.pkcs.PrivateKeyInfo +import org.bouncycastle.asn1.pkcs.RSAPublicKey +import org.bouncycastle.crypto.params.RSAKeyParameters +import org.bouncycastle.crypto.params.RSAPrivateCrtKeyParameters +import org.bouncycastle.crypto.util.PrivateKeyFactory +import org.bouncycastle.crypto.util.PublicKeyFactory +import org.bouncycastle.crypto.util.SubjectPublicKeyInfoFactory + +actual fun pbk(privateKey: ByteArray): ByteArray { + val a = ASN1Sequence.fromByteArray(privateKey) + val b = PrivateKeyInfo.getInstance(a) + val d = PrivateKeyFactory.createKey(b) as RSAPrivateCrtKeyParameters + val pub = RSAKeyParameters(false, d.modulus, d.publicExponent) + val q1 = SubjectPublicKeyInfoFactory.createSubjectPublicKeyInfo(pub) + val pubKey = RSAPublicKey.getInstance(q1.parsePublicKey()) + val p = PublicKeyFactory.createKey(q1) + val fm = ubyteArrayOf( + 48u, + 130u, + 1u, + 34u, + 48u, + 13u, + 6u, + 9u, + 42u, + 134u, + 72u, + 134u, + 247u, + 13u, + 1u, + 1u, + 1u, + 5u, + 0u, + 3u, + 130u, + 1u, + 15u, + 0u, + ) + return (fm).toByteArray() + pubKey.encoded +} diff --git a/common/src/jvmMain/kotlin/com/artemchep/keyguard/util/FileTraverse.kt b/common/src/jvmMain/kotlin/com/artemchep/keyguard/util/FileTraverse.kt new file mode 100644 index 00000000..7a25be67 --- /dev/null +++ b/common/src/jvmMain/kotlin/com/artemchep/keyguard/util/FileTraverse.kt @@ -0,0 +1,18 @@ +package com.artemchep.keyguard.util + +import java.io.File + +fun File.traverse(): Sequence = list() + .orEmpty() + .asSequence() + .map { path -> + File(this, path) + } + .flatMap { file -> + if (file.isDirectory) { + val childFiles = file.traverse() + childFiles + } else { + sequenceOf(file) + } + } diff --git a/common/src/jvmMain/kotlin/com/artemchep/keyguard/util/Zxing.kt b/common/src/jvmMain/kotlin/com/artemchep/keyguard/util/Zxing.kt new file mode 100644 index 00000000..cca23f99 --- /dev/null +++ b/common/src/jvmMain/kotlin/com/artemchep/keyguard/util/Zxing.kt @@ -0,0 +1,39 @@ +package com.artemchep.keyguard.util + +import com.artemchep.keyguard.common.model.BarcodeImageFormat +import com.artemchep.keyguard.common.model.BarcodeImageRequest +import com.google.zxing.BarcodeFormat +import com.google.zxing.MultiFormatWriter +import com.google.zxing.common.BitMatrix + +private const val DEFAULT_SIZE = 1024 + +fun BarcodeImageRequest.encode(): BitMatrix { + val bitMatrix = MultiFormatWriter().encode( + data, + format.toZxingFormat(), + size?.width?.takeUnless { it <= 128 } ?: DEFAULT_SIZE, + size?.height?.takeUnless { it <= 128 } ?: DEFAULT_SIZE, + ) + return bitMatrix +} + +private fun BarcodeImageFormat.toZxingFormat() = when (this) { + BarcodeImageFormat.AZTEC -> BarcodeFormat.AZTEC + BarcodeImageFormat.CODABAR -> BarcodeFormat.CODABAR + BarcodeImageFormat.CODE_39 -> BarcodeFormat.CODE_39 + BarcodeImageFormat.CODE_93 -> BarcodeFormat.CODE_93 + BarcodeImageFormat.CODE_128 -> BarcodeFormat.CODE_128 + BarcodeImageFormat.DATA_MATRIX -> BarcodeFormat.DATA_MATRIX + BarcodeImageFormat.EAN_8 -> BarcodeFormat.EAN_8 + BarcodeImageFormat.EAN_13 -> BarcodeFormat.EAN_13 + BarcodeImageFormat.ITF -> BarcodeFormat.ITF + BarcodeImageFormat.MAXICODE -> BarcodeFormat.MAXICODE + BarcodeImageFormat.PDF_417 -> BarcodeFormat.PDF_417 + BarcodeImageFormat.QR_CODE -> BarcodeFormat.QR_CODE + BarcodeImageFormat.RSS_14 -> BarcodeFormat.RSS_14 + BarcodeImageFormat.RSS_EXPANDED -> BarcodeFormat.RSS_EXPANDED + BarcodeImageFormat.UPC_A -> BarcodeFormat.UPC_A + BarcodeImageFormat.UPC_E -> BarcodeFormat.UPC_E + BarcodeImageFormat.UPC_EAN_EXTENSION -> BarcodeFormat.UPC_EAN_EXTENSION +} diff --git a/crowdin.yml b/crowdin.yml new file mode 100644 index 00000000..d4c10b29 --- /dev/null +++ b/crowdin.yml @@ -0,0 +1,133 @@ +# +# Your Crowdin credentials: ID and token are provided through GitHub Action secrets. +# +"project_id_env" : "CROWDIN_PROJECT_ID" +"api_token_env" : "CROWDIN_PERSONAL_TOKEN" +"base_path" : "." +"base_url" : "https://api.crowdin.com" + +# +# Choose file structure in Crowdin +# e.g. true or false +# +"preserve_hierarchy": false + +# +# Files configuration +# +files: [ + { + # + # Source files filter + # e.g. "/resources/en/*.json" + # + "source" : "/common/src/commonMain/resources/MR/base/*.xml", + + # + # Where translations will be placed + # e.g. "/resources/%two_letters_code%/%original_file_name%" + # + "translation" : "/common/src/commonMain/resources/MR/%android_code%/%original_file_name%", + + # + # File type + # e.g. "json" + # + "type" : "android", + + # + # The parameter "update_option" is optional. If it is not set, after the files update the translations for changed + # strings will be removed. Use to fix typos and for minor changes in the source strings + # e.g. "update_as_unapproved" or "update_without_changes" + # + "update_option" : "update_as_unapproved", + + # + # Defines whether to translate tags attributes. + # e.g. 0 or 1 (Default is 1) + # + "translate_attributes" : 0, + + # + # Defines whether to split long texts into smaller text segments + # e.g. 0 or 1 (Default is 1) + # + "content_segmentation" : 0, + }, + { + # + # Source files filter + # e.g. "/resources/en/*.json" + # + "source" : "/listing/google/base/*.html", + + # + # Where translations will be placed + # e.g. "/resources/%two_letters_code%/%original_file_name%" + # + "translation" : "/listing/google/%android_code%/%original_file_name%", + + # + # File type + # e.g. "json" + # + "type" : "html", + + # + # The parameter "update_option" is optional. If it is not set, after the files update the translations for changed + # strings will be removed. Use to fix typos and for minor changes in the source strings + # e.g. "update_as_unapproved" or "update_without_changes" + # + "update_option" : "update_as_unapproved", + + # + # Defines whether to translate tags attributes. + # e.g. 0 or 1 (Default is 1) + # + "translate_attributes" : 0, + + # + # Defines whether to split long texts into smaller text segments + # e.g. 0 or 1 (Default is 1) + # + "content_segmentation" : 0, + }, + { + # + # Source files filter + # e.g. "/resources/en/*.json" + # + "source" : "/listing/google/base/*.xml", + + # + # Where translations will be placed + # e.g. "/resources/%two_letters_code%/%original_file_name%" + # + "translation" : "/listing/google/%android_code%/%original_file_name%", + + # + # File type + # e.g. "json" + # + "type" : "android", + + # + # The parameter "update_option" is optional. If it is not set, after the files update the translations for changed + # strings will be removed. Use to fix typos and for minor changes in the source strings + # e.g. "update_as_unapproved" or "update_without_changes" + # + "update_option" : "update_as_unapproved", + + # + # Defines whether to translate tags attributes. + # e.g. 0 or 1 (Default is 1) + # + "translate_attributes" : 0, + + # + # Defines whether to split long texts into smaller text segments + # e.g. 0 or 1 (Default is 1) + # + "content_segmentation" : 0, + } +] diff --git a/desktopApp/build.gradle.kts b/desktopApp/build.gradle.kts new file mode 100644 index 00000000..eed54915 --- /dev/null +++ b/desktopApp/build.gradle.kts @@ -0,0 +1,250 @@ +import org.jetbrains.compose.desktop.application.dsl.TargetFormat + +plugins { + alias(libs.plugins.kotlin.multiplatform) + alias(libs.plugins.compose) +} + +kotlin { + jvm { + withJava() + } + sourceSets { + val jvmMain by getting { + dependencies { + implementation(compose.runtime) + implementation(compose.foundation) + implementation(compose.material) + implementation(compose.material3) + implementation(compose.materialIconsExtended) + implementation(compose.desktop.currentOs) + implementation(project(":common")) + } + } + } +} + +// Because of this bug you can not build for macOS and +// have the app image distribution format enabled. +// See: +// https://github.com/JetBrains/compose-multiplatform/issues/3814 +val excludeAppImage = kotlin.run { + val excludeAppImage: String? by project + excludeAppImage == "true" +} + +val appId = "com.artemchep.keyguard" + +val macExtraPlistKeys: String + get() = """ + CFBundleLocalizations + + af_ZA + ca_ES + de_DE + es_ES + ja_JP + no_NO + pt_PT + sr_SP + uk_UA + zh_TW + ar_SA + cs_CZ + el_GR + fr_FR + it_IT + ko_KR + pl_PL + ro_RO + sv_SE + vi_VN + da_DK + en_US + en_GB + fi_FI + hu_HU + iw_IL + nl_NL + pt_BR + ru_RU + tr_TR + zh_CN + + """ + +compose.desktop { + application { + mainClass = "com.artemchep.keyguard.MainKt" + nativeDistributions { + macOS { + iconFile.set(project.file("icon.icns")) + entitlementsFile.set(project.file("default.entitlements")) + infoPlist { + this.extraKeysRawXml = macExtraPlistKeys + } + } + windows { + iconFile.set(project.file("icon.ico")) + } + linux { + iconFile.set(project.file("icon.png")) + } + + // Try to go for native appearance as per: + // https://stackoverflow.com/a/70902920/1408535 + jvmArgs( + "-Dapple.awt.application.appearance=system", + ) + includeAllModules = true + val formats = listOfNotNull( + TargetFormat.Dmg, + TargetFormat.Msi, + TargetFormat.Deb, + TargetFormat.AppImage.takeUnless { excludeAppImage }, + ).toTypedArray() + targetFormats(*formats) + + packageName = "Keyguard" + packageVersion = libs.versions.appVersionName.get() + + macOS { + bundleID = "com.artemchep.keyguard" + signing { + val certIdentity = findProperty("cert_identity") as String? + if (certIdentity != null) { + println("Signing identity ${certIdentity.take(2)}****") + sign.set(true) + identity.set(certIdentity) + // The certificate should be added to the + // keychain by this time. + } else { + println("No signing identity!") + } + } + notarization { + val notarizationAppleId = findProperty("notarization_apple_id") as String? + ?: "stub_apple_id" + val notarizationPassword = findProperty("notarization_password") as String? + ?: "stub_password" + val notarizationAscProvider = + findProperty("notarization_asc_provider") as String? + ?: "stub_asc_provider" + println("Notarization Apple Id ${notarizationAppleId.take(2)}****") + println("Notarization Password ${notarizationPassword.take(2)}****") + println("Notarization ASC Provider ${notarizationAscProvider.take(2)}****") + appleID.set(notarizationAppleId) + teamID.set(notarizationAscProvider) + password.set(notarizationPassword) + } + } + } + } +} + +kotlin { + jvmToolchain(libs.versions.jdk.get().toInt()) +} + +// +// Flatpak +// + +val flatpakDir = "$buildDir/flatpak" +val resourcesDir = "$projectDir/src/jvmMain/resources" + +tasks.register("prepareFlatpak") { + dependsOn("packageAppImage") + doLast { + delete { + delete("$flatpakDir/bin/") + delete("$flatpakDir/lib/") + } + copy { + from("$buildDir/compose/binaries/main/app/Keyguard/") + into("$flatpakDir/") + exclude("$buildDir/compose/binaries/main/app/Keyguard/lib/runtime/legal") + } + copy { + from("$resourcesDir/icon.png") + into("$flatpakDir/") + } + copy { + from("$resourcesDir/flatpak/manifest.yml") + into("$flatpakDir/") + rename { + "$appId.yml" + } + } + copy { + from("$projectDir/src/jvmMain/resources/flatpak/icon.desktop") + into("$flatpakDir/") + rename { + "$appId.desktop" + } + } + } +} + +tasks.register("bundleFlatpak") { + dependsOn("prepareFlatpak") + doLast { + exec { + workingDir(flatpakDir) + val buildCommand = listOf( + "flatpak-builder", + "--force-clean", + "--state-dir=build/flatpak-builder", + "--repo=build/flatpak-repo", + "build/flatpak-target", + "$appId.yml", + ) + commandLine(buildCommand) + } + exec { + workingDir(flatpakDir) + val bundleCommand = listOf( + "flatpak", + "build-bundle", + "build/flatpak-repo", + "Keyguard.flatpak", + appId, + ) + commandLine(bundleCommand) + } + } +} + +tasks.register("installFlatpak") { + dependsOn("prepareFlatpak") + doLast { + exec { + workingDir(flatpakDir) + val installCommand = listOf( + "flatpak-builder", + "--install", + "--user", + "--force-clean", + "--state-dir=build/flatpak-builder", + "--repo=build/flatpak-repo", + "build/flatpak-target", + "$appId.yml", + ) + commandLine(installCommand) + } + } +} + +tasks.register("runFlatpak") { + dependsOn("installFlatpak") + doLast { + exec { + val runCommand = listOf( + "flatpak", + "run", + appId, + ) + commandLine(runCommand) + } + } +} diff --git a/desktopApp/default.entitlements b/desktopApp/default.entitlements new file mode 100644 index 00000000..8a3d7dda --- /dev/null +++ b/desktopApp/default.entitlements @@ -0,0 +1,14 @@ + + + + + com.apple.security.cs.disable-library-validation + + com.apple.security.cs.allow-jit + + com.apple.security.cs.allow-unsigned-executable-memory + + com.apple.security.automation.apple-events + + + diff --git a/desktopApp/icon.icns b/desktopApp/icon.icns new file mode 100644 index 00000000..c2136693 Binary files /dev/null and b/desktopApp/icon.icns differ diff --git a/desktopApp/icon.ico b/desktopApp/icon.ico new file mode 100644 index 00000000..0baffda8 Binary files /dev/null and b/desktopApp/icon.ico differ diff --git a/desktopApp/icon.png b/desktopApp/icon.png new file mode 100644 index 00000000..f4967697 Binary files /dev/null and b/desktopApp/icon.png differ diff --git a/desktopApp/icon.sketch b/desktopApp/icon.sketch new file mode 100644 index 00000000..472ecead Binary files /dev/null and b/desktopApp/icon.sketch differ diff --git a/desktopApp/src/jvmMain/kotlin/com/artemchep/keyguard/Main.kt b/desktopApp/src/jvmMain/kotlin/com/artemchep/keyguard/Main.kt new file mode 100644 index 00000000..62f525a5 --- /dev/null +++ b/desktopApp/src/jvmMain/kotlin/com/artemchep/keyguard/Main.kt @@ -0,0 +1,423 @@ +package com.artemchep.keyguard + +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Surface +import androidx.compose.material3.contentColorFor +import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.DisposableEffect +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.luminance +import androidx.compose.ui.semantics.semantics +import androidx.compose.ui.window.Window +import androidx.compose.ui.window.application +import androidx.compose.ui.window.rememberWindowState +import com.artemchep.keyguard.common.AppWorker +import com.artemchep.keyguard.common.io.bind +import com.artemchep.keyguard.common.model.MasterSession +import com.artemchep.keyguard.common.model.PersistedSession +import com.artemchep.keyguard.common.model.ToastMessage +import com.artemchep.keyguard.common.service.vault.KeyReadWriteRepository +import com.artemchep.keyguard.common.usecase.GetAccounts +import com.artemchep.keyguard.common.usecase.GetLocale +import com.artemchep.keyguard.common.usecase.GetVaultPersist +import com.artemchep.keyguard.common.usecase.GetVaultSession +import com.artemchep.keyguard.common.usecase.ShowMessage +import com.artemchep.keyguard.core.session.diFingerprintRepositoryModule +import com.artemchep.keyguard.desktop.util.navigateToBrowser +import com.artemchep.keyguard.desktop.util.navigateToEmail +import com.artemchep.keyguard.desktop.util.navigateToFile +import com.artemchep.keyguard.desktop.util.navigateToFileInFileManager +import com.artemchep.keyguard.feature.favicon.Favicon +import com.artemchep.keyguard.feature.favicon.FaviconUrl +import com.artemchep.keyguard.feature.keyguard.AppRoute +import com.artemchep.keyguard.feature.navigation.LocalNavigationBackHandler +import com.artemchep.keyguard.feature.navigation.NavigationController +import com.artemchep.keyguard.feature.navigation.NavigationIntent +import com.artemchep.keyguard.feature.navigation.NavigationNode +import com.artemchep.keyguard.feature.navigation.NavigationRouterBackHandler +import com.artemchep.keyguard.platform.lifecycle.LeLifecycleState +import com.artemchep.keyguard.ui.LocalComposeWindow +import com.artemchep.keyguard.ui.theme.KeyguardTheme +import com.mayakapps.compose.windowstyler.WindowBackdrop +import com.mayakapps.compose.windowstyler.WindowStyle +import dev.icerock.moko.resources.desc.StringDesc +import io.kamel.core.config.KamelConfig +import io.kamel.core.config.takeFrom +import io.kamel.core.mapper.Mapper +import io.kamel.image.config.Default +import io.kamel.image.config.LocalKamelConfig +import io.ktor.http.Url +import kotlinx.coroutines.GlobalScope +import kotlinx.coroutines.coroutineScope +import kotlinx.coroutines.flow.MutableStateFlow +import kotlinx.coroutines.flow.combine +import kotlinx.coroutines.flow.flowOf +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.map +import kotlinx.coroutines.flow.mapLatest +import kotlinx.coroutines.flow.onEach +import kotlinx.coroutines.launch +import kotlinx.datetime.Clock +import org.kodein.di.DI +import org.kodein.di.compose.rememberInstance +import org.kodein.di.compose.withDI +import org.kodein.di.direct +import org.kodein.di.instance +import java.util.Locale +import kotlin.reflect.KClass + +fun main() { + val appDi = DI.invoke { + import(diFingerprintRepositoryModule()) + } + val kamelConfig = KamelConfig { + this.takeFrom(KamelConfig.Default) + mapper(FaviconUrlMapper) + } + + val getVaultSession by appDi.di.instance() + val getVaultPersist by appDi.di.instance() + val keyReadWriteRepository by appDi.di.instance() + getVaultSession() + .map { session -> + val key = session as? MasterSession.Key + key?.di?.direct?.instance() + } + .mapLatest { getAccounts -> + if (getAccounts != null) { + coroutineScope { + Favicon.launch(this, getAccounts) + } + } + } + .launchIn(GlobalScope) + + // locale + val systemLocale = Locale.getDefault() + val getLocale by appDi.di.instance() + getLocale() + .onEach { locale -> + val newLocale = when (locale) { + null -> systemLocale + else -> { + val parts = locale.split("-") + when { + parts.size == 2 -> { + val language = parts[0] + val country = parts[1] + Locale(language, country) + } + + else -> Locale(locale) + } + } + } + Locale.setDefault(newLocale) + StringDesc.localeType = when (locale) { + null -> StringDesc.LocaleType.System + else -> StringDesc.LocaleType.Custom(locale) + } + } + .launchIn(GlobalScope) + + // persist + combine( + getVaultSession(), + getVaultPersist(), + ) { session, persist -> + val persistedMasterKey = if (persist && session is MasterSession.Key) { + session.masterKey + } else { + null + } + persistedMasterKey + } + .onEach { masterKey -> + val persistedSession = if (masterKey != null) { + PersistedSession( + masterKey = masterKey, + createdAt = Clock.System.now(), + persistedAt = Clock.System.now(), + ) + } else { + null + } + keyReadWriteRepository.put(persistedSession).bind() + } + .launchIn(GlobalScope) + + val appWorker by appDi.di.instance(tag = AppWorker.Feature.SYNC) + val processLifecycleFlow = MutableStateFlow(LeLifecycleState.RESUMED) + GlobalScope.launch { + appWorker.launch(this, processLifecycleFlow) + } + + // timeout +// var timeoutJob: Job? = null +// val getVaultLockAfterTimeout: GetVaultLockAfterTimeout by instance() +// ProcessLifecycleOwner.get().bindBlock { +// timeoutJob?.cancel() +// timeoutJob = null +// +// try { +// // suspend forever +// suspendCancellableCoroutine { } +// } finally { +// timeoutJob = getVaultLockAfterTimeout() +// .toIO() +// // Wait for the timeout duration. +// .effectMap { duration -> +// delay(duration) +// duration +// } +// .flatMap { +// // Clear the current session. +// val session = MasterSession.Empty( +// reason = "Locked due to inactivity." +// ) +// putVaultSession(session) +// } +// .attempt() +// .launchIn(GlobalScope) +// } +// } + + application(exitProcessOnExit = true) { + withDI(appDi) { + Window( + ::exitApplication, + state = rememberWindowState(), + title = "Keyguard", + ) { +// this.window.addWindowStateListener { +// println("event $it") +// } + KeyguardTheme { + val containerColor = MaterialTheme.colorScheme.background + val contentColor = contentColorFor(containerColor) + + WindowStyle( + isDarkTheme = containerColor.luminance() < 0.5f, + backdropType = WindowBackdrop.Default, + ) + + Surface( + modifier = Modifier.semantics { + // Allows to use testTag() for UiAutomator's resource-id. + // It can be enabled high in the compose hierarchy, + // so that it's enabled for the whole subtree + // testTagsAsResourceId = true + }, + color = containerColor, + contentColor = contentColor, + ) { + CompositionLocalProvider( + LocalComposeWindow provides this.window, + LocalKamelConfig provides kamelConfig, + ) { + Navigation( + exitApplication = ::exitApplication, + ) { + Content() + } + } + } + } + } + } + } +} + +internal val FaviconUrlMapper: Mapper = object : Mapper { + override val inputKClass: KClass + get() = FaviconUrl::class + override val outputKClass: KClass + get() = Url::class + + override fun map(input: FaviconUrl): Url = kotlin.run { + val siteUrl = input.url + val finalUrl = kotlin.run { + val server = Favicon.getServerOrNull(input.serverId) + server?.transform(siteUrl) + } + finalUrl?.let(::Url) + ?: Url("https://example.com") + } +} + +@Composable +private fun Content() { + CompositionLocalProvider( + LocalAppMode provides AppMode.Main, + ) { + NavigationNode( + id = "App:Main", + route = AppRoute, + ) + } +} + +@Composable +private fun Navigation( + exitApplication: () -> Unit, + block: @Composable () -> Unit, +) = NavigationRouterBackHandler( + sideEffect = { backHandler -> + }, +) { + val showMessage by rememberInstance() + NavigationController( + scope = GlobalScope, + canPop = flowOf(false), + handle = { intent -> + handleNavigationIntent( + exitApplication = exitApplication, + intent = intent, + showMessage = showMessage, + ) + }, + ) { controller -> + val backHandler = LocalNavigationBackHandler.current + + DisposableEffect( + controller, + backHandler, + ) { + val registration = backHandler.register(controller, emptyList()) + onDispose { + registration() + } + } + + block() + } +} + +private fun handleNavigationIntent( + exitApplication: () -> Unit, + intent: NavigationIntent, + showMessage: ShowMessage, +) = runCatching { + when (intent) { + is NavigationIntent.NavigateToPreview -> handleNavigationIntent(intent, showMessage) + is NavigationIntent.NavigateToPreviewInFileManager -> handleNavigationIntent(intent, showMessage) + is NavigationIntent.NavigateToSend -> handleNavigationIntent(intent, showMessage) + is NavigationIntent.NavigateToLargeType -> handleNavigationIntent(intent, showMessage) + is NavigationIntent.NavigateToShare -> handleNavigationIntent(intent, showMessage) + is NavigationIntent.NavigateToApp -> handleNavigationIntent(intent, showMessage) + is NavigationIntent.NavigateToPhone -> handleNavigationIntent(intent, showMessage) + is NavigationIntent.NavigateToSms -> handleNavigationIntent(intent, showMessage) + is NavigationIntent.NavigateToEmail -> handleNavigationIntent(intent, showMessage) + is NavigationIntent.NavigateToBrowser -> handleNavigationIntent(intent, showMessage) + // Should never be called, because we should disable + // custom back button handling if we have nothing to + // handle. + is NavigationIntent.Pop -> { + val msg = "Called Activity.finish() manually. We should have stopped " + + "intercepting back button presses." + exitApplication() + } + // Exit. + is NavigationIntent.Exit -> { + exitApplication() + } + + else -> return@runCatching intent + } + null // handled +}.onFailure { e -> + showMessage.internalShowNavigationErrorMessage(e) +}.getOrNull() + +private fun handleNavigationIntent( + intent: NavigationIntent.NavigateToPreview, + showMessage: ShowMessage, +) { + navigateToFile( + uri = intent.uri, + ) +} + +private fun handleNavigationIntent( + intent: NavigationIntent.NavigateToPreviewInFileManager, + showMessage: ShowMessage, +) { + navigateToFileInFileManager( + uri = intent.uri, + ) +} + +private fun handleNavigationIntent( + intent: NavigationIntent.NavigateToSend, + showMessage: ShowMessage, +) { + TODO() +} + +private fun handleNavigationIntent( + intent: NavigationIntent.NavigateToLargeType, + showMessage: ShowMessage, +) { + TODO() +} + +private fun handleNavigationIntent( + intent: NavigationIntent.NavigateToShare, + showMessage: ShowMessage, +) { + TODO() +} + +private fun handleNavigationIntent( + intent: NavigationIntent.NavigateToApp, + showMessage: ShowMessage, +) { + TODO() +} + +private fun handleNavigationIntent( + intent: NavigationIntent.NavigateToPhone, + showMessage: ShowMessage, +) { + TODO() +} + +private fun handleNavigationIntent( + intent: NavigationIntent.NavigateToSms, + showMessage: ShowMessage, +) { + TODO() +} + +private fun handleNavigationIntent( + intent: NavigationIntent.NavigateToEmail, + showMessage: ShowMessage, +) { + navigateToEmail( + email = intent.email, + subject = intent.subject, + body = intent.body, + ) +} + +private fun handleNavigationIntent( + intent: NavigationIntent.NavigateToBrowser, + showMessage: ShowMessage, +) { + navigateToBrowser( + uri = intent.url, + ) +} + +private fun ShowMessage.internalShowNavigationErrorMessage(e: Throwable) { + e.printStackTrace() + + val model = ToastMessage( + type = ToastMessage.Type.ERROR, + title = when (e) { + else -> "Something went wrong" + }, + ) + copy(model) +} diff --git a/desktopApp/src/jvmMain/kotlin/com/artemchep/keyguard/desktop/util/NavigateToBrowser.kt b/desktopApp/src/jvmMain/kotlin/com/artemchep/keyguard/desktop/util/NavigateToBrowser.kt new file mode 100644 index 00000000..9b1436b1 --- /dev/null +++ b/desktopApp/src/jvmMain/kotlin/com/artemchep/keyguard/desktop/util/NavigateToBrowser.kt @@ -0,0 +1,48 @@ +package com.artemchep.keyguard.desktop.util + +import com.artemchep.keyguard.platform.CurrentPlatform +import com.artemchep.keyguard.platform.Platform +import io.ktor.http.quote +import java.awt.Desktop +import java.io.IOException +import java.net.URI + +fun navigateToBrowser( + uri: String, +) { + runCatching { + Desktop.getDesktop().browse(URI(uri)) + }.onFailure { e -> + if (e is IOException) { + val uriInQuotes = uri + .quote() + + val platform = CurrentPlatform + val handled = when (platform) { + is Platform.Desktop.Windows -> { + Runtime.getRuntime().exec("start $uriInQuotes") + true + } + + is Platform.Desktop.MacOS -> { + Runtime.getRuntime().exec("open $uriInQuotes") + true + } + + is Platform.Desktop.Linux -> { + Runtime.getRuntime().exec("xdg-open $uriInQuotes") + true + } + + // Not supported. + else -> false + } + if (!handled) { + throw e + } + return@onFailure + } + + throw e + } +} diff --git a/desktopApp/src/jvmMain/kotlin/com/artemchep/keyguard/desktop/util/NavigateToEmail.kt b/desktopApp/src/jvmMain/kotlin/com/artemchep/keyguard/desktop/util/NavigateToEmail.kt new file mode 100644 index 00000000..2cff4fb8 --- /dev/null +++ b/desktopApp/src/jvmMain/kotlin/com/artemchep/keyguard/desktop/util/NavigateToEmail.kt @@ -0,0 +1,37 @@ +package com.artemchep.keyguard.desktop.util + +import io.ktor.http.encodeURLParameter +import java.awt.Desktop +import java.net.URI + +fun navigateToEmail( + email: String, + subject: String? = null, + body: String? = null, +) { + val uri = buildString { + var isFirstQueryParam = true + + fun addQueryParam( + key: String, + value: String, + ) { + if (isFirstQueryParam) { + isFirstQueryParam = false + append("?") + } else { + append("&") + } + append(key) + append("=") + append(value.encodeURLParameter()) + } + + append("mailto:") + append(email) + // append query parameters + if (subject != null) addQueryParam("subject", subject) + if (body != null) addQueryParam("body", body) + }.let(::URI) + Desktop.getDesktop().mail(uri) +} diff --git a/desktopApp/src/jvmMain/kotlin/com/artemchep/keyguard/desktop/util/NavigateToFile.kt b/desktopApp/src/jvmMain/kotlin/com/artemchep/keyguard/desktop/util/NavigateToFile.kt new file mode 100644 index 00000000..64324d45 --- /dev/null +++ b/desktopApp/src/jvmMain/kotlin/com/artemchep/keyguard/desktop/util/NavigateToFile.kt @@ -0,0 +1,14 @@ +package com.artemchep.keyguard.desktop.util + +import java.awt.Desktop +import java.io.File +import java.net.URI +import java.nio.file.Files +import java.nio.file.Paths + +fun navigateToFile( + uri: String, +) { + val file = Paths.get(URI.create(uri)).toFile() + Desktop.getDesktop().open(file) +} diff --git a/desktopApp/src/jvmMain/kotlin/com/artemchep/keyguard/desktop/util/NavigateToFileInFileManager.kt b/desktopApp/src/jvmMain/kotlin/com/artemchep/keyguard/desktop/util/NavigateToFileInFileManager.kt new file mode 100644 index 00000000..fac24769 --- /dev/null +++ b/desktopApp/src/jvmMain/kotlin/com/artemchep/keyguard/desktop/util/NavigateToFileInFileManager.kt @@ -0,0 +1,75 @@ +package com.artemchep.keyguard.desktop.util + +import arrow.core.escaped +import com.artemchep.keyguard.platform.CurrentPlatform +import com.artemchep.keyguard.platform.Platform +import io.ktor.http.quote +import java.awt.Desktop +import java.io.File +import java.io.IOException +import java.net.URI +import java.nio.file.Files +import java.nio.file.Paths + +fun navigateToFileInFileManager( + uri: String, +) { + val file = Paths.get(URI.create(uri)).toFile() + runCatching { + Desktop.getDesktop().browseFileDirectory(file) + }.onFailure { e -> + // Java has a very poor support of this functionality: + // - Linux is not supported + // - Windows 10 is not supported + runCatching { + val fileOrParent = if (!file.isDirectory) file.parentFile else file + Desktop.getDesktop().open(fileOrParent) + }.onFailure { e2 -> + val escapedPath = file.path.escaped() + + val platform = CurrentPlatform + val handled = when (platform) { + is Platform.Desktop.Windows -> { + windows(escapedPath) + true + } + + is Platform.Desktop.MacOS -> { + macos(escapedPath) + true + } + + is Platform.Desktop.Linux -> { + linux(escapedPath) + true + } + + // Not supported. + else -> false + } + if (!handled) { + throw e2 + } + return@onFailure + } + } +} + +private fun linux(escapedPath: String) { + val command = "xdg-open '$escapedPath'" + exec(command) +} + +private fun windows(escapedPath: String) { + val command = "explorer /select, '$escapedPath'" + exec(command) +} + +private fun macos(escapedPath: String) { + val command = "open -R '$escapedPath'" + exec(command) +} + +private fun exec(command: String) { + Runtime.getRuntime().exec(command) +} diff --git a/desktopApp/src/jvmMain/resources/flatpak/icon.desktop b/desktopApp/src/jvmMain/resources/flatpak/icon.desktop new file mode 100644 index 00000000..b93648aa --- /dev/null +++ b/desktopApp/src/jvmMain/resources/flatpak/icon.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Encoding=UTF-8 +Version=1.0 +Type=Application +Terminal=false +Exec=/app/bin/Keyguard +Name=Keyguard +Icon=com.artemchep.keyguard diff --git a/desktopApp/src/jvmMain/resources/flatpak/manifest.yml b/desktopApp/src/jvmMain/resources/flatpak/manifest.yml new file mode 100644 index 00000000..8c49a459 --- /dev/null +++ b/desktopApp/src/jvmMain/resources/flatpak/manifest.yml @@ -0,0 +1,34 @@ +app-id: com.artemchep.keyguard +runtime: org.gnome.Platform +runtime-version: '45' +sdk: org.gnome.Sdk +tags: [ proprietary ] +command: /app/bin/Keyguard +finish-args: + - --share=network + - --socket=x11 + - --socket=fallback-x11 + - --device=dri + - --talk-name=org.gtk.vfs.* + - --filesystem=xdg-run/gvfsd +modules: + - name: keyguard + buildsystem: simple + build-commands: + - cp -r bin/ /app/bin/ + - cp -r lib/ /app/lib/ + - mkdir -p /app/share/applications + - install -D com.artemchep.keyguard.desktop /app/share/applications/com.artemchep.keyguard.desktop + - mkdir -p /app/share/icons/hicolor/scalable/apps/ + - cp -r icon.png /app/share/icons/hicolor/scalable/apps/com.artemchep.keyguard.png + sources: + - type: file + path: icon.png + - type: dir + path: "bin/" + dest: "bin/" + - type: dir + path: "lib/" + dest: "lib/" + - type: file + path: com.artemchep.keyguard.desktop diff --git a/desktopApp/src/jvmMain/resources/icon.png b/desktopApp/src/jvmMain/resources/icon.png new file mode 100644 index 00000000..f4967697 Binary files /dev/null and b/desktopApp/src/jvmMain/resources/icon.png differ diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 00000000..d3d5978e --- /dev/null +++ b/gradle.properties @@ -0,0 +1,27 @@ +# Project-wide Gradle settings. +# IDE (e.g. Android Studio) users: +# Gradle settings configured through the IDE *will override* +# any settings specified in this file. +# For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +org.gradle.jvmargs=-Xmx4096m -Dfile.encoding=UTF-8 +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. More details, visit +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects +# org.gradle.parallel=true +# AndroidX package structure to make it clearer which packages are bundled with the +# Android operating system, and which are packaged with your app"s APK +# https://developer.android.com/topic/libraries/support-library/androidx-rn +android.useAndroidX=true +# Automatically convert third-party libraries to use AndroidX +android.enableJetifier=false +# Kotlin code style for this project: "official" or "obsolete": +kotlin.code.style=official +kotlin.daemon.jvmargs=-Xmx4096m +kotlin.mpp.androidSourceSetLayoutVersion=2 +# Enables namespacing of each library's R class so that its R class includes only the +# resources declared in the library itself and none from the library's dependencies, +# thereby reducing the size of the R class for that library +android.nonTransitiveRClass=true \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml new file mode 100644 index 00000000..e57a6548 --- /dev/null +++ b/gradle/libs.versions.toml @@ -0,0 +1,269 @@ +[versions] +# @keep +androidMinSdk = "26" +# @keep +androidCompileSdk = "34" +# @keep +androidTargetSdk = "34" +# @keep +jdk = "17" +# @keep +appVersionName = "1.0.0" +# @keep +appVersionCode = "2" +# https://github.com/google/accompanist +accompanist = "0.32.0" +androidBillingClient = "6.1.0" +# https://mvnrepository.com/artifact/com.android.tools/desugar_jdk_libs +androidDesugar = "2.0.4" +# https://mvnrepository.com/artifact/com.android.tools.build/gradle?repo=google +androidPlugin = "8.1.4" +androidxActivity = "1.8.2" +androidxAppCompat = "1.7.0-alpha03" +androidxAutofill = "1.3.0-alpha01" +androidxBaselineProfile = "1.2.2" +androidxBenchmarkMacroJUnit4 = "1.2.2" +androidxBiometricKtx = "1.2.0-alpha05" +androidxBrowser = "1.7.0" +androidxCamera = "1.4.0-alpha03" +androidxCoreKtx = "1.12.0" +androidxCoreSplash = "1.1.0-alpha02" +androidxCredentials = "1.2.0" +androidxDatastore = "1.0.0" +androidxLifecycle = "2.7.0-rc02" +androidxProfileInstaller = "1.3.1" +androidxRoom = "2.6.1" +androidxSecurityCryptoKtx = "1.1.0-alpha06" +androidxTestEspresso = "3.6.0-alpha01" +androidxTestExtJUnit = "1.2.0-alpha01" +androidxTestUiAutomator = "2.3.0-alpha05" +androidxWork = "2.9.0" +# https://github.com/harawata/appdirs +appDirs = "1.2.2" +# https://github.com/arrow-kt/arrow +arrow = "1.2.1" +# https://github.com/AChep/bindin +bindIn = "1.4.0" +# https://github.com/yshrsmz/BuildKonfig +buildkonfigPlugin = "0.15.1" +# https://mvnrepository.com/artifact/commons-codec/commons-codec +commonsCodec = "1.16.0" +# https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 +commonsLang3 = "3.14.0" +# https://github.com/JetBrains/compose-multiplatform +composeMultiplatform = "1.6.0-dev1350" +# https://github.com/DevSrSouza/compose-icons +composeOpenIcons = "1.1.0" +crashlyticsPlugin = "2.9.9" +firebase = "32.7.0" +# https://github.com/tfcporciuncula/flow-preferences +flowPreferences = "1.9.1" +# https://github.com/bumptech/glide +glide = "5.0.0-rc01" +googleServicesPlugin = "4.4.0" +# https://github.com/ch4rl3x/HtmlText +htmlText = "2.0.0-beta01" +# https://github.com/Kamel-Media/Kamel +kamel = "0.9.1" +# https://github.com/kdrag0n/colorkt +kdrag0nColorKt = "1.0.5" +# https://github.com/Kodein-Framework/Kodein-DI +kodeinDi = "7.21.1" +# https://github.com/JetBrains/kotlin +kotlin = "1.9.21" +# https://github.com/Kotlin/kotlinx.collections.immutable +kotlinCollections = "0.3.7" +# https://github.com/Kotlin/kotlinx.coroutines +kotlinCoroutines = "1.7.3" +# https://github.com/Kotlin/kotlinx-datetime +kotlinDatetime = "0.5.0" +kotlinDsl = "4.2.1" +# https://github.com/Kotlin/kotlinx.serialization +kotlinSerialization = "1.6.2" +# https://github.com/google/ksp/releases +kspPlugin = "1.9.21-1.0.16" +# https://github.com/pinterest/ktlint/releases +# @keep +ktlint = "0.50.0" +# https://github.com/JLLeitschuh/ktlint-gradle +ktlintPlugin = "12.0.3" +# https://github.com/ktorio/ktor +ktor = "3.0.0-beta-1" +# https://github.com/skydoves/landscapist +landscapist = "2.2.13" +# https://github.com/cashapp/licensee +licenseCheckPlugin = "1.8.0" +# https://github.com/tony19/logback-android +logback = "3.0.0" +# https://developers.google.com/android/guides/setup +mlkitBarcodeScanning = "18.3.0" +# https://github.com/icerockdev/moko-resources +moko = "0.23.0" +# https://github.com/WonderzGmbH/nativefiledialog-java +nfd = "1.0.3" +# https://square.github.io/okhttp/changelogs/changelog/ +okHttp = "4.12.0" +# https://mvnrepository.com/artifact/com.google.android.play/review-ktx +playReviewKtx = "2.0.1" +# https://developers.google.com/android/guides/setup +playServicesBase = "18.2.0" +# https://github.com/halilozercan/compose-richtext/releases +richtext = "0.17.0" +# https://mvnrepository.com/artifact/com.microsoft.signalr/signalr +signalr = "8.0.0" +# https://mvnrepository.com/artifact/org.slf4j/slf4j-api +slf4j = "2.0.9" +# https://github.com/bcgit/bc-java +bouncycastle = "1.77" +# https://github.com/sqlcipher/sqlcipher-android +sqlcipherAndroid = "4.5.5" +# https://github.com/cashapp/sqldelight +sqldelight = "2.0.1" +# https://github.com/Willena/sqlite-jdbc-crypt +sqliteJdbcCrypt = "3.44.2.0" +# https://github.com/rrice/java-string-similarity +stringSimilarity = "1.0.0" +# https://github.com/ohmae/touch-icon-extractor +touchIcon = "0.9.7" +# https://github.com/littlerobots/version-catalog-update-plugin +versionCatalogPlugin = "0.8.1" +# https://github.com/ben-manes/gradle-versions-plugin +versionsPlugin = "0.50.0" +# https://github.com/MayakaApps/ComposeWindowStyler +windowStyler = "0.3.2" +# https://github.com/Yubico/yubikit-android +yubiKit = "2.4.0" +# https://github.com/nulab/zxcvbn4j +# We use it to calculate password strength. +zxcvbn4j = "1.8.2" +# https://github.com/zxing/zxing +zxing = "3.5.2" + +[libraries] +achep-bindin = { module = "com.github.AChep:bindin", version.ref = "bindIn" } +android-billing = { module = "com.android.billingclient:billing", version.ref = "androidBillingClient" } +android-billing-ktx = { module = "com.android.billingclient:billing-ktx", version.ref = "androidBillingClient" } +android-desugarjdklibs = { module = "com.android.tools:desugar_jdk_libs", version.ref = "androidDesugar" } +androidx-activity-compose = { module = "androidx.activity:activity-compose", version.ref = "androidxActivity" } +androidx-appcompat = { module = "androidx.appcompat:appcompat", version.ref = "androidxAppCompat" } +androidx-autofill = { module = "androidx.autofill:autofill", version.ref = "androidxAutofill" } +androidx-benchmark-macro-junit4 = { module = "androidx.benchmark:benchmark-macro-junit4", version.ref = "androidxBenchmarkMacroJUnit4" } +androidx-biometric-ktx = { module = "androidx.biometric:biometric-ktx", version.ref = "androidxBiometricKtx" } +androidx-browser = { module = "androidx.browser:browser", version.ref = "androidxBrowser" } +androidx-camera-camera2 = { module = "androidx.camera:camera-camera2", version.ref = "androidxCamera" } +androidx-camera-core = { module = "androidx.camera:camera-core", version.ref = "androidxCamera" } +androidx-camera-extensions = { module = "androidx.camera:camera-extensions", version.ref = "androidxCamera" } +androidx-camera-lifecycle = { module = "androidx.camera:camera-lifecycle", version.ref = "androidxCamera" } +androidx-camera-view = { module = "androidx.camera:camera-view", version.ref = "androidxCamera" } +androidx-core-ktx = { module = "androidx.core:core-ktx", version.ref = "androidxCoreKtx" } +androidx-core-splashscreen = { module = "androidx.core:core-splashscreen", version.ref = "androidxCoreSplash" } +androidx-credentials = { module = "androidx.credentials:credentials", version.ref = "androidxCredentials" } +androidx-datastore = { module = "androidx.datastore:datastore", version.ref = "androidxDatastore" } +androidx-espresso-core = { module = "androidx.test.espresso:espresso-core", version.ref = "androidxTestEspresso" } +androidx-junit = { module = "androidx.test.ext:junit", version.ref = "androidxTestExtJUnit" } +androidx-lifecycle-livedata-ktx = { module = "androidx.lifecycle:lifecycle-livedata-ktx", version.ref = "androidxLifecycle" } +androidx-lifecycle-process = { module = "androidx.lifecycle:lifecycle-process", version.ref = "androidxLifecycle" } +androidx-lifecycle-runtime-ktx = { module = "androidx.lifecycle:lifecycle-runtime-ktx", version.ref = "androidxLifecycle" } +androidx-lifecycle-viewmodel-ktx = { module = "androidx.lifecycle:lifecycle-viewmodel-ktx", version.ref = "androidxLifecycle" } +androidx-profileinstaller = { module = "androidx.profileinstaller:profileinstaller", version.ref = "androidxProfileInstaller" } +androidx-room-compiler = { module = "androidx.room:room-compiler", version.ref = "androidxRoom" } +androidx-room-ktx = { module = "androidx.room:room-ktx", version.ref = "androidxRoom" } +androidx-room-runtime = { module = "androidx.room:room-runtime", version.ref = "androidxRoom" } +androidx-security-crypto-ktx = { module = "androidx.security:security-crypto-ktx", version.ref = "androidxSecurityCryptoKtx" } +androidx-uiautomator = { module = "androidx.test.uiautomator:uiautomator", version.ref = "androidxTestUiAutomator" } +androidx-work-runtime = { module = "androidx.work:work-runtime", version.ref = "androidxWork" } +androidx-work-runtime-ktx = { module = "androidx.work:work-runtime-ktx", version.ref = "androidxWork" } +arrow-arrow-core = { module = "io.arrow-kt:arrow-core", version.ref = "arrow" } +arrow-arrow-optics = { module = "io.arrow-kt:arrow-optics", version.ref = "arrow" } +arrow-arrow-optics-ksp-plugin = { module = "io.arrow-kt:arrow-optics-ksp-plugin", version.ref = "arrow" } +cash-sqldelight-android-driver = { module = "app.cash.sqldelight:android-driver", version.ref = "sqldelight" } +cash-sqldelight-coroutines-extensions = { module = "app.cash.sqldelight:coroutines-extensions", version.ref = "sqldelight" } +cash-sqldelight-sqlite-driver = { module = "app.cash.sqldelight:sqlite-driver", version.ref = "sqldelight" } +commons-codec = { module = "commons-codec:commons-codec", version.ref = "commonsCodec" } +commons-lang3 = { module = "org.apache.commons:commons-lang3", version.ref = "commonsLang3" } +devsrsouza-feather = { module = "br.com.devsrsouza.compose.icons:feather", version.ref = "composeOpenIcons" } +firebase-analytics-ktx = { module = "com.google.firebase:firebase-analytics-ktx" } +firebase-bom = { module = "com.google.firebase:firebase-bom", version.ref = "firebase" } +firebase-crashlytics-ktx = { module = "com.google.firebase:firebase-crashlytics-ktx" } +fredporciuncula-flow-preferences = { module = "com.fredporciuncula:flow-preferences", version.ref = "flowPreferences" } +glide-annotations = { module = "com.github.bumptech.glide:annotations", version.ref = "glide" } +glide-glide = { module = "com.github.bumptech.glide:annotations", version.ref = "glide" } +glide-ksp = { module = "com.github.bumptech.glide:ksp", version.ref = "glide" } +google-accompanist-drawablepainter = { module = "com.google.accompanist:accompanist-drawablepainter", version.ref = "accompanist" } +google-accompanist-navigation-material = { module = "com.google.accompanist:accompanist-navigation-material", version.ref = "accompanist" } +google-accompanist-permissions = { module = "com.google.accompanist:accompanist-permissions", version.ref = "accompanist" } +google-accompanist-systemuicontroller = { module = "com.google.accompanist:accompanist-systemuicontroller", version.ref = "accompanist" } +google-play-review-ktx = { module = "com.google.android.play:review-ktx", version.ref = "playReviewKtx" } +google-play-services-base = { module = "com.google.android.gms:play-services-base", version.ref = "playServicesBase" } +google-play-services-mlkit-barcode-scanning = { module = "com.google.android.gms:play-services-mlkit-barcode-scanning", version.ref = "mlkitBarcodeScanning" } +google-zxing-core = { module = "com.google.zxing:core", version.ref = "zxing" } +google-zxing-javase = { module = "com.google.zxing:javase", version.ref = "zxing" } +halilibo-richtext-commonmark = { module = "com.halilibo.compose-richtext:richtext-commonmark", version.ref = "richtext" } +halilibo-richtext-ui-material3 = { module = "com.halilibo.compose-richtext:richtext-ui-material3", version.ref = "richtext" } +harawata-appdirs = { module = "net.harawata:appdirs", version.ref = "appDirs" } +html-text = { module = "de.charlex.compose.material3:material3-html-text", version.ref = "htmlText" } +kamel-image = { module = "media.kamel:kamel-image", version.ref = "kamel" } +kdrag0n-colorkt = { module = "dev.kdrag0n:colorkt", version.ref = "kdrag0nColorKt" } +kodein-kodein-di = { module = "org.kodein.di:kodein-di", version.ref = "kodeinDi" } +kodein-kodein-di-framework-android-x-viewmodel-savedstate = { module = "org.kodein.di:kodein-di-framework-android-x-viewmodel-savedstate", version.ref = "kodeinDi" } +kodein-kodein-di-framework-compose = { module = "org.kodein.di:kodein-di-framework-compose", version.ref = "kodeinDi" } +kotlinx-collections-immutable = { module = "org.jetbrains.kotlinx:kotlinx-collections-immutable", version.ref = "kotlinCollections" } +kotlinx-coroutines-android = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-android", version.ref = "kotlinCoroutines" } +kotlinx-coroutines-core = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-core", version.ref = "kotlinCoroutines" } +kotlinx-coroutines-swing = { module = "org.jetbrains.kotlinx:kotlinx-coroutines-swing", version.ref = "kotlinCoroutines" } +kotlinx-datetime = { module = "org.jetbrains.kotlinx:kotlinx-datetime", version.ref = "kotlinDatetime" } +kotlinx-serialization-json = { module = "org.jetbrains.kotlinx:kotlinx-serialization-json", version.ref = "kotlinSerialization" } +kotlinx-serialization-cbor = { module = "org.jetbrains.kotlinx:kotlinx-serialization-cbor", version.ref = "kotlinSerialization" } +ktor-ktor-client-cio = { module = "io.ktor:ktor-client-cio", version.ref = "ktor" } +ktor-ktor-client-content-negotiation = { module = "io.ktor:ktor-client-content-negotiation", version.ref = "ktor" } +ktor-ktor-client-core = { module = "io.ktor:ktor-client-core", version.ref = "ktor" } +ktor-ktor-client-logging = { module = "io.ktor:ktor-client-logging", version.ref = "ktor" } +ktor-ktor-client-okhttp = { module = "io.ktor:ktor-client-okhttp", version.ref = "ktor" } +ktor-ktor-client-websockets = { module = "io.ktor:ktor-client-websockets", version.ref = "ktor" } +ktor-ktor-serialization-kotlinx = { module = "io.ktor:ktor-serialization-kotlinx", version.ref = "ktor" } +landscapist-glide = { module = "com.github.skydoves:landscapist-glide", version.ref = "landscapist" } +landscapist-placeholder = { module = "com.github.skydoves:landscapist-placeholder", version.ref = "landscapist" } +bouncycastle-bcpkix = { module = "org.bouncycastle:bcpkix-jdk18on", version.ref = "bouncycastle" } +bouncycastle-bcprov = { module = "org.bouncycastle:bcprov-jdk18on", version.ref = "bouncycastle" } +mayakapps-window-styler = { module = "com.mayakapps.compose:window-styler", version.ref = "windowStyler" } +microsoft-signalr = { module = "com.microsoft.signalr:signalr", version.ref = "signalr" } +microsoft-signalr-messagepack = { module = "com.microsoft.signalr.messagepack:signalr-messagepack", version.ref = "signalr" } +mm2d-touchicon = { module = "net.mm2d.touchicon:touchicon", version.ref = "touchIcon" } +mm2d-touchicon-http-okhttp = { module = "net.mm2d.touchicon:touchicon-http-okhttp", version.ref = "touchIcon" } +moko-resources = { module = "dev.icerock.moko:resources", version.ref = "moko" } +moko-resources-compose = { module = "dev.icerock.moko:resources-compose", version.ref = "moko" } +moko-resources-test = { module = "dev.icerock.moko:resources-test", version.ref = "moko" } +nulabinc-zxcvbn = { module = "com.nulab-inc:zxcvbn", version.ref = "zxcvbn4j" } +ricecode-string-similarity = { module = "net.ricecode:string-similarity", version.ref = "stringSimilarity" } +slf4j-api = { module = "org.slf4j:slf4j-api", version.ref = "slf4j" } +sqlcipher-android = { module = "net.zetetic:sqlcipher-android", version.ref = "sqlcipherAndroid" } +squareup-logging-interceptor = { module = "com.squareup.okhttp3:logging-interceptor", version.ref = "okHttp" } +squareup-okhttp = { module = "com.squareup.okhttp3:okhttp", version.ref = "okHttp" } +tony19-logback-android = { module = "com.github.tony19:logback-android", version.ref = "logback" } +willena-sqlite-jdbc = { module = "io.github.willena:sqlite-jdbc", version.ref = "sqliteJdbcCrypt" } +wunderbox-nativefiledialog = { module = "tv.wunderbox:nativefiledialog", version.ref = "nfd" } +yubico-yubikit-android = { module = "com.yubico.yubikit:android", version.ref = "yubiKit" } + +[plugins] +android-application = { id = "com.android.application", version.ref = "androidPlugin" } +android-library = { id = "com.android.library", version.ref = "androidPlugin" } +android-test = { id = "com.android.test", version.ref = "androidPlugin" } +baseline-profile = { id = "androidx.baselineprofile", version.ref = "androidxBaselineProfile" } +buildkonfig = { id = "com.codingfeline.buildkonfig", version.ref = "buildkonfigPlugin" } +compose = { id = "org.jetbrains.compose", version.ref = "composeMultiplatform" } +crashlytics = { id = "com.google.firebase.crashlytics", version.ref = "crashlyticsPlugin" } +google-services = { id = "com.google.gms.google-services", version.ref = "googleServicesPlugin" } +kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } +kotlin-dsl = { id = "org.gradle.kotlin.kotlin-dsl", version.ref = "kotlinDsl" } +kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } +kotlin-kapt = { id = "org.jetbrains.kotlin.kapt", version.ref = "kotlin" } +kotlin-multiplatform = { id = "org.jetbrains.kotlin.multiplatform", version.ref = "kotlin" } +kotlin-plugin-parcelize = { id = "org.jetbrains.kotlin.plugin.parcelize", version.ref = "kotlin" } +kotlin-plugin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" } +ksp = { id = "com.google.devtools.ksp", version.ref = "kspPlugin" } +ktlint = { id = "org.jlleitschuh.gradle.ktlint", version.ref = "ktlintPlugin" } +license-check = { id = "app.cash.licensee", version.ref = "licenseCheckPlugin" } +moko = { id = "dev.icerock.mobile.multiplatform-resources", version.ref = "moko" } +sqldelight = { id = "app.cash.sqldelight", version.ref = "sqldelight" } +version-catalog-update = { id = "nl.littlerobots.version-catalog-update", version.ref = "versionCatalogPlugin" } +versions = { id = "com.github.ben-manes.versions", version.ref = "versionsPlugin" } diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 00000000..e708b1c0 Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 00000000..e1a66888 --- /dev/null +++ b/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,6 @@ +#Sun Jul 31 15:58:03 EEST 2022 +distributionBase=GRADLE_USER_HOME +distributionUrl=https\://services.gradle.org/distributions/gradle-8.5-bin.zip +distributionPath=wrapper/dists +zipStorePath=wrapper/dists +zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew new file mode 100755 index 00000000..4f906e0c --- /dev/null +++ b/gradlew @@ -0,0 +1,185 @@ +#!/usr/bin/env sh + +# +# Copyright 2015 the original author or authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +## +## Gradle start up script for UN*X +## +############################################################################## + +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + +APP_NAME="Gradle" +APP_BASE_NAME=`basename "$0"` + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD="maximum" + +warn () { + echo "$*" +} + +die () { + echo + echo "$*" + echo + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; + NONSTOP* ) + nonstop=true + ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD="java" + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then + MAX_FD_LIMIT=`ulimit -H -n` + if [ $? -eq 0 ] ; then + if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then + MAX_FD="$MAX_FD_LIMIT" + fi + ulimit -n $MAX_FD + if [ $? -ne 0 ] ; then + warn "Could not set maximum file descriptor limit: $MAX_FD" + fi + else + warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" + fi +fi + +# For Darwin, add options to specify how the application appears in the dock +if $darwin; then + GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" +fi + +# For Cygwin or MSYS, switch paths to Windows format before running java +if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then + APP_HOME=`cygpath --path --mixed "$APP_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + + JAVACMD=`cygpath --unix "$JAVACMD"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRADLE_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=`expr $i + 1` + done + case $i in + 0) set -- ;; + 1) set -- "$args0" ;; + 2) set -- "$args0" "$args1" ;; + 3) set -- "$args0" "$args1" "$args2" ;; + 4) set -- "$args0" "$args1" "$args2" "$args3" ;; + 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +# Escape application args +save () { + for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done + echo " " +} +APP_ARGS=`save "$@"` + +# Collect all arguments for the java command, following the shell quoting and substitution rules +eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 00000000..ac1b06f9 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/listing/google/af-rZA/store_description.html b/listing/google/af-rZA/store_description.html new file mode 100644 index 00000000..17e84b4b --- /dev/null +++ b/listing/google/af-rZA/store_description.html @@ -0,0 +1,19 @@ +

    Keyguard highlights:

    +• A beautiful rich Material You user interface. +• A powerful and fast search. +• A support for creating & using passkeys - a modern alternative to passwords. +• A watchtower that finds items with Reused passwords, Inactive two factor authentication, Unsecure Websites as well as Duplicate, Incomplete and Expiring items. +• Amazing native performance. +• Android Autofill Framework support. +• Multi-account support with secure login and two-factor authentication support. +• Add items, modify, and view your vault offline. +• Download large attachments in background. +• Beautiful Light/Dark theme. +• Chrome OS support. +• And much more! + +On top of that, Keyguard features eye-catching animations and that buttery smoothness you should expect from the latest and most excellent apps! + +

    How app uses declared permissions:

    +• QUERY_ALL_PACKAGES: when a user links an app to the secret, the user wants to see the list of all apps to choose from. +When a user opens the linked apps section, the user wants to see the app's label and icon and know that he can directly open it. The user does not want to see the app's identifier instead. diff --git a/listing/google/af-rZA/store_text.xml b/listing/google/af-rZA/store_text.xml new file mode 100644 index 00000000..125f335c --- /dev/null +++ b/listing/google/af-rZA/store_text.xml @@ -0,0 +1,11 @@ + + + Keyguard for Bitwarden + A third-party client that focuses on the user experience. + + Yearly plan + + Quarterly plan + + One-time purchase + diff --git a/listing/google/ar-rSA/store_description.html b/listing/google/ar-rSA/store_description.html new file mode 100644 index 00000000..17e84b4b --- /dev/null +++ b/listing/google/ar-rSA/store_description.html @@ -0,0 +1,19 @@ +

    Keyguard highlights:

    +• A beautiful rich Material You user interface. +• A powerful and fast search. +• A support for creating & using passkeys - a modern alternative to passwords. +• A watchtower that finds items with Reused passwords, Inactive two factor authentication, Unsecure Websites as well as Duplicate, Incomplete and Expiring items. +• Amazing native performance. +• Android Autofill Framework support. +• Multi-account support with secure login and two-factor authentication support. +• Add items, modify, and view your vault offline. +• Download large attachments in background. +• Beautiful Light/Dark theme. +• Chrome OS support. +• And much more! + +On top of that, Keyguard features eye-catching animations and that buttery smoothness you should expect from the latest and most excellent apps! + +

    How app uses declared permissions:

    +• QUERY_ALL_PACKAGES: when a user links an app to the secret, the user wants to see the list of all apps to choose from. +When a user opens the linked apps section, the user wants to see the app's label and icon and know that he can directly open it. The user does not want to see the app's identifier instead. diff --git a/listing/google/ar-rSA/store_text.xml b/listing/google/ar-rSA/store_text.xml new file mode 100644 index 00000000..125f335c --- /dev/null +++ b/listing/google/ar-rSA/store_text.xml @@ -0,0 +1,11 @@ + + + Keyguard for Bitwarden + A third-party client that focuses on the user experience. + + Yearly plan + + Quarterly plan + + One-time purchase + diff --git a/listing/google/base/store_description.html b/listing/google/base/store_description.html new file mode 100644 index 00000000..17e84b4b --- /dev/null +++ b/listing/google/base/store_description.html @@ -0,0 +1,19 @@ +

    Keyguard highlights:

    +• A beautiful rich Material You user interface. +• A powerful and fast search. +• A support for creating & using passkeys - a modern alternative to passwords. +• A watchtower that finds items with Reused passwords, Inactive two factor authentication, Unsecure Websites as well as Duplicate, Incomplete and Expiring items. +• Amazing native performance. +• Android Autofill Framework support. +• Multi-account support with secure login and two-factor authentication support. +• Add items, modify, and view your vault offline. +• Download large attachments in background. +• Beautiful Light/Dark theme. +• Chrome OS support. +• And much more! + +On top of that, Keyguard features eye-catching animations and that buttery smoothness you should expect from the latest and most excellent apps! + +

    How app uses declared permissions:

    +• QUERY_ALL_PACKAGES: when a user links an app to the secret, the user wants to see the list of all apps to choose from. +When a user opens the linked apps section, the user wants to see the app's label and icon and know that he can directly open it. The user does not want to see the app's identifier instead. diff --git a/listing/google/base/store_text.xml b/listing/google/base/store_text.xml new file mode 100644 index 00000000..125f335c --- /dev/null +++ b/listing/google/base/store_text.xml @@ -0,0 +1,11 @@ + + + Keyguard for Bitwarden + A third-party client that focuses on the user experience. + + Yearly plan + + Quarterly plan + + One-time purchase + diff --git a/listing/google/ca-rES/store_description.html b/listing/google/ca-rES/store_description.html new file mode 100644 index 00000000..cc5ffc9e --- /dev/null +++ b/listing/google/ca-rES/store_description.html @@ -0,0 +1,18 @@ +

    Funcions destacades de Keyguard:

    +• Una bella interfície d'usuari Material You. +• Una potent i ràpida cerca. +• Una torre de vigilància que troba elements amb contrasenyes reutilitzades, autenticació de dos factors inactiva, llocs web no segurs així com duplicats, elements incomplets i/o caducats. +• Rendiment natiu increïble. +• Compatibilitat amb el framework d'emplenament automàtic d'Android. +• Compatibilitat amb diversos comptes amb inici de sessió segur i compatibilitat amb autenticació de dos factors. +• Afegiu elements, modifiqueu i visualitzeu la vostra caixa forta fora de línia. +• Baixeu arxius adjunts grans en segon pla. +• Preciós tema clar/fosc. +• Compatibilitat amb Chrome OS. +• I molt més! + +A més d'això, Keyguard inclou animacions cridaneres i aquesta suavitat de mantega que hauríeu d'esperar de les aplicacions més recents i excel·lents! + +

    Com fa servir l'app els permisos declarats:

    +• QUERY_ALL_PACKAGES: quan un usuari enllaça una aplicació amb el secret, l'usuari vol veure la llista de totes les aplicacions per triar. +Quan un usuari obre la secció d'aplicacions enllaçades, l'usuari vol veure l'etiqueta i la icona de l'aplicació i saber que pot obrir-la directament. L'usuari no vol veure l'identificador de l'aplicació. diff --git a/listing/google/ca-rES/store_text.xml b/listing/google/ca-rES/store_text.xml new file mode 100644 index 00000000..5a4e5f14 --- /dev/null +++ b/listing/google/ca-rES/store_text.xml @@ -0,0 +1,11 @@ + + + Keyguard per a Bitwarden + Una aplicació de tercers que se centra en l\'experiència d\'usuari. + + Pla anual + + Pla quadrimestral + + Compra única + diff --git a/listing/google/cs-rCZ/store_description.html b/listing/google/cs-rCZ/store_description.html new file mode 100644 index 00000000..17e84b4b --- /dev/null +++ b/listing/google/cs-rCZ/store_description.html @@ -0,0 +1,19 @@ +

    Keyguard highlights:

    +• A beautiful rich Material You user interface. +• A powerful and fast search. +• A support for creating & using passkeys - a modern alternative to passwords. +• A watchtower that finds items with Reused passwords, Inactive two factor authentication, Unsecure Websites as well as Duplicate, Incomplete and Expiring items. +• Amazing native performance. +• Android Autofill Framework support. +• Multi-account support with secure login and two-factor authentication support. +• Add items, modify, and view your vault offline. +• Download large attachments in background. +• Beautiful Light/Dark theme. +• Chrome OS support. +• And much more! + +On top of that, Keyguard features eye-catching animations and that buttery smoothness you should expect from the latest and most excellent apps! + +

    How app uses declared permissions:

    +• QUERY_ALL_PACKAGES: when a user links an app to the secret, the user wants to see the list of all apps to choose from. +When a user opens the linked apps section, the user wants to see the app's label and icon and know that he can directly open it. The user does not want to see the app's identifier instead. diff --git a/listing/google/cs-rCZ/store_text.xml b/listing/google/cs-rCZ/store_text.xml new file mode 100644 index 00000000..125f335c --- /dev/null +++ b/listing/google/cs-rCZ/store_text.xml @@ -0,0 +1,11 @@ + + + Keyguard for Bitwarden + A third-party client that focuses on the user experience. + + Yearly plan + + Quarterly plan + + One-time purchase + diff --git a/listing/google/da-rDK/store_description.html b/listing/google/da-rDK/store_description.html new file mode 100644 index 00000000..17e84b4b --- /dev/null +++ b/listing/google/da-rDK/store_description.html @@ -0,0 +1,19 @@ +

    Keyguard highlights:

    +• A beautiful rich Material You user interface. +• A powerful and fast search. +• A support for creating & using passkeys - a modern alternative to passwords. +• A watchtower that finds items with Reused passwords, Inactive two factor authentication, Unsecure Websites as well as Duplicate, Incomplete and Expiring items. +• Amazing native performance. +• Android Autofill Framework support. +• Multi-account support with secure login and two-factor authentication support. +• Add items, modify, and view your vault offline. +• Download large attachments in background. +• Beautiful Light/Dark theme. +• Chrome OS support. +• And much more! + +On top of that, Keyguard features eye-catching animations and that buttery smoothness you should expect from the latest and most excellent apps! + +

    How app uses declared permissions:

    +• QUERY_ALL_PACKAGES: when a user links an app to the secret, the user wants to see the list of all apps to choose from. +When a user opens the linked apps section, the user wants to see the app's label and icon and know that he can directly open it. The user does not want to see the app's identifier instead. diff --git a/listing/google/da-rDK/store_text.xml b/listing/google/da-rDK/store_text.xml new file mode 100644 index 00000000..125f335c --- /dev/null +++ b/listing/google/da-rDK/store_text.xml @@ -0,0 +1,11 @@ + + + Keyguard for Bitwarden + A third-party client that focuses on the user experience. + + Yearly plan + + Quarterly plan + + One-time purchase + diff --git a/listing/google/de-rDE/store_description.html b/listing/google/de-rDE/store_description.html new file mode 100644 index 00000000..16307d8b --- /dev/null +++ b/listing/google/de-rDE/store_description.html @@ -0,0 +1,18 @@ +

    Keyguard Highlights:

    +• Eine schöne reiche Material You Benutzeroberfläche. +• Starke and schnelle Suche. +• Ein Wachturm, der Gegenstände mit wiederverwendeten Passwörtern, Inaktive Zwei-Faktor-Authentifizierung, Unsichere Websites sowie duplizierte, unvollständige und ablaufende Elemente. +• Erstaunliche native Leistung. +• Android Autofill Framework Unterstützung. +• Multi-Account Unterstützung mit sicherem Login und Zwei-Faktor-Authentifizierung. +• Füge Elemente hinzu, ändere und zeige deinen Tresor offlinean. +• Lade große Anhänge im Hintergrund herunter. +• Wunderschönes Hell/Dunkel Farbschema. +• Chrome OS Support. +• Und vieles mehr! + +Darüber hinaus bietet Keyguard wunderschöne Animationen und schöne Benutzeroberfläche, die Sie von den neuesten und besten Apps erwarten sollten! + +

    Wie die App deklarierte Berechtigungen verwendet:

    +• QUERY_ALL_PACKAGES: Wenn ein Benutzer eine App mit dem Geheimnis verknüpft, dann möchte der Benutzer, dass die Liste aller zu wählenden Apps angezeigt wird. +Wenn ein Benutzer den verknüpften App-Bereich öffnet, der Benutzer möchte das Label und das Symbol der App sehen und wissen, dass er es direkt öffnen kann. Der Benutzer möchte nicht statdessen die Kennung der App sehen. diff --git a/listing/google/de-rDE/store_text.xml b/listing/google/de-rDE/store_text.xml new file mode 100644 index 00000000..c84321b9 --- /dev/null +++ b/listing/google/de-rDE/store_text.xml @@ -0,0 +1,11 @@ + + + Keyguard für Bitwarden + Ein Drittanbieter-Client, der sich auf das Nutzererlebnis konzentriert. + + Jährlicher Plan + + Quartalsplan + + Einmaliger Kauf + diff --git a/listing/google/el-rGR/store_description.html b/listing/google/el-rGR/store_description.html new file mode 100644 index 00000000..17e84b4b --- /dev/null +++ b/listing/google/el-rGR/store_description.html @@ -0,0 +1,19 @@ +

    Keyguard highlights:

    +• A beautiful rich Material You user interface. +• A powerful and fast search. +• A support for creating & using passkeys - a modern alternative to passwords. +• A watchtower that finds items with Reused passwords, Inactive two factor authentication, Unsecure Websites as well as Duplicate, Incomplete and Expiring items. +• Amazing native performance. +• Android Autofill Framework support. +• Multi-account support with secure login and two-factor authentication support. +• Add items, modify, and view your vault offline. +• Download large attachments in background. +• Beautiful Light/Dark theme. +• Chrome OS support. +• And much more! + +On top of that, Keyguard features eye-catching animations and that buttery smoothness you should expect from the latest and most excellent apps! + +

    How app uses declared permissions:

    +• QUERY_ALL_PACKAGES: when a user links an app to the secret, the user wants to see the list of all apps to choose from. +When a user opens the linked apps section, the user wants to see the app's label and icon and know that he can directly open it. The user does not want to see the app's identifier instead. diff --git a/listing/google/el-rGR/store_text.xml b/listing/google/el-rGR/store_text.xml new file mode 100644 index 00000000..125f335c --- /dev/null +++ b/listing/google/el-rGR/store_text.xml @@ -0,0 +1,11 @@ + + + Keyguard for Bitwarden + A third-party client that focuses on the user experience. + + Yearly plan + + Quarterly plan + + One-time purchase + diff --git a/listing/google/en-rGB/store_description.html b/listing/google/en-rGB/store_description.html new file mode 100644 index 00000000..17e84b4b --- /dev/null +++ b/listing/google/en-rGB/store_description.html @@ -0,0 +1,19 @@ +

    Keyguard highlights:

    +• A beautiful rich Material You user interface. +• A powerful and fast search. +• A support for creating & using passkeys - a modern alternative to passwords. +• A watchtower that finds items with Reused passwords, Inactive two factor authentication, Unsecure Websites as well as Duplicate, Incomplete and Expiring items. +• Amazing native performance. +• Android Autofill Framework support. +• Multi-account support with secure login and two-factor authentication support. +• Add items, modify, and view your vault offline. +• Download large attachments in background. +• Beautiful Light/Dark theme. +• Chrome OS support. +• And much more! + +On top of that, Keyguard features eye-catching animations and that buttery smoothness you should expect from the latest and most excellent apps! + +

    How app uses declared permissions:

    +• QUERY_ALL_PACKAGES: when a user links an app to the secret, the user wants to see the list of all apps to choose from. +When a user opens the linked apps section, the user wants to see the app's label and icon and know that he can directly open it. The user does not want to see the app's identifier instead. diff --git a/listing/google/en-rGB/store_text.xml b/listing/google/en-rGB/store_text.xml new file mode 100644 index 00000000..125f335c --- /dev/null +++ b/listing/google/en-rGB/store_text.xml @@ -0,0 +1,11 @@ + + + Keyguard for Bitwarden + A third-party client that focuses on the user experience. + + Yearly plan + + Quarterly plan + + One-time purchase + diff --git a/listing/google/en-rUS/store_description.html b/listing/google/en-rUS/store_description.html new file mode 100644 index 00000000..17e84b4b --- /dev/null +++ b/listing/google/en-rUS/store_description.html @@ -0,0 +1,19 @@ +

    Keyguard highlights:

    +• A beautiful rich Material You user interface. +• A powerful and fast search. +• A support for creating & using passkeys - a modern alternative to passwords. +• A watchtower that finds items with Reused passwords, Inactive two factor authentication, Unsecure Websites as well as Duplicate, Incomplete and Expiring items. +• Amazing native performance. +• Android Autofill Framework support. +• Multi-account support with secure login and two-factor authentication support. +• Add items, modify, and view your vault offline. +• Download large attachments in background. +• Beautiful Light/Dark theme. +• Chrome OS support. +• And much more! + +On top of that, Keyguard features eye-catching animations and that buttery smoothness you should expect from the latest and most excellent apps! + +

    How app uses declared permissions:

    +• QUERY_ALL_PACKAGES: when a user links an app to the secret, the user wants to see the list of all apps to choose from. +When a user opens the linked apps section, the user wants to see the app's label and icon and know that he can directly open it. The user does not want to see the app's identifier instead. diff --git a/listing/google/en-rUS/store_text.xml b/listing/google/en-rUS/store_text.xml new file mode 100644 index 00000000..125f335c --- /dev/null +++ b/listing/google/en-rUS/store_text.xml @@ -0,0 +1,11 @@ + + + Keyguard for Bitwarden + A third-party client that focuses on the user experience. + + Yearly plan + + Quarterly plan + + One-time purchase + diff --git a/listing/google/es-rES/store_description.html b/listing/google/es-rES/store_description.html new file mode 100644 index 00000000..e47e3994 --- /dev/null +++ b/listing/google/es-rES/store_description.html @@ -0,0 +1,17 @@ +

    Funciones destacadas de Keyguard:

    +• Una preciosa interfaz basada en Material You. +• Un poderoso y rápido buscador +• Soporte para crear y usar llaves de acceso - una alternativa moderna a las contraseñas. +• Vigilancia para encontrar Contraseñas reutilizadas, Autenticación en dos factores inactiva, Sitios Web Inseguros así como elementos Duplicados, Incompletos y .Expirados +• Increíble rendimiento nativo. +• Soporte del Framework de Autorrellenado de Android. +• Soporte de cuentas múltiples con inicio de sesión seguro y soporte de autenticación en dos factores. +• Agrega elementos, modifica y mira tu caja fuertesin conexión. +• Descarga archivos adjuntos grandes en segundo plano. +• Hermosos temas Claro/oscuro . +• Soporte para Chrome OS. +• Y mucho más! + +

    Cómo la aplicación utiliza los permisos declarados:

    +• QUERY_ALL_PACKAGES: Cuando un usuario vincula una aplicación al secret, quiere ver la lista de todas las aplicaciones para elegir. +Cuando un usuario abre la sección de aplicaciones vinculadas, quiere ver la etiqueta y el ícono de la aplicación y saber que puede abrirla directamente. En su lugar, el usuario no quiere ver el identificador de la aplicación. diff --git a/listing/google/es-rES/store_text.xml b/listing/google/es-rES/store_text.xml new file mode 100644 index 00000000..949a54c7 --- /dev/null +++ b/listing/google/es-rES/store_text.xml @@ -0,0 +1,11 @@ + + + Keyguard para Bitwarden + Un cliente de terceros que se enfoca en la experiencia del usuario. + + Plan anual + + Plan trimestral + + Compra única + diff --git a/listing/google/fi-rFI/store_description.html b/listing/google/fi-rFI/store_description.html new file mode 100644 index 00000000..17e84b4b --- /dev/null +++ b/listing/google/fi-rFI/store_description.html @@ -0,0 +1,19 @@ +

    Keyguard highlights:

    +• A beautiful rich Material You user interface. +• A powerful and fast search. +• A support for creating & using passkeys - a modern alternative to passwords. +• A watchtower that finds items with Reused passwords, Inactive two factor authentication, Unsecure Websites as well as Duplicate, Incomplete and Expiring items. +• Amazing native performance. +• Android Autofill Framework support. +• Multi-account support with secure login and two-factor authentication support. +• Add items, modify, and view your vault offline. +• Download large attachments in background. +• Beautiful Light/Dark theme. +• Chrome OS support. +• And much more! + +On top of that, Keyguard features eye-catching animations and that buttery smoothness you should expect from the latest and most excellent apps! + +

    How app uses declared permissions:

    +• QUERY_ALL_PACKAGES: when a user links an app to the secret, the user wants to see the list of all apps to choose from. +When a user opens the linked apps section, the user wants to see the app's label and icon and know that he can directly open it. The user does not want to see the app's identifier instead. diff --git a/listing/google/fi-rFI/store_text.xml b/listing/google/fi-rFI/store_text.xml new file mode 100644 index 00000000..125f335c --- /dev/null +++ b/listing/google/fi-rFI/store_text.xml @@ -0,0 +1,11 @@ + + + Keyguard for Bitwarden + A third-party client that focuses on the user experience. + + Yearly plan + + Quarterly plan + + One-time purchase + diff --git a/listing/google/fr-rFR/store_description.html b/listing/google/fr-rFR/store_description.html new file mode 100644 index 00000000..17e84b4b --- /dev/null +++ b/listing/google/fr-rFR/store_description.html @@ -0,0 +1,19 @@ +

    Keyguard highlights:

    +• A beautiful rich Material You user interface. +• A powerful and fast search. +• A support for creating & using passkeys - a modern alternative to passwords. +• A watchtower that finds items with Reused passwords, Inactive two factor authentication, Unsecure Websites as well as Duplicate, Incomplete and Expiring items. +• Amazing native performance. +• Android Autofill Framework support. +• Multi-account support with secure login and two-factor authentication support. +• Add items, modify, and view your vault offline. +• Download large attachments in background. +• Beautiful Light/Dark theme. +• Chrome OS support. +• And much more! + +On top of that, Keyguard features eye-catching animations and that buttery smoothness you should expect from the latest and most excellent apps! + +

    How app uses declared permissions:

    +• QUERY_ALL_PACKAGES: when a user links an app to the secret, the user wants to see the list of all apps to choose from. +When a user opens the linked apps section, the user wants to see the app's label and icon and know that he can directly open it. The user does not want to see the app's identifier instead. diff --git a/listing/google/fr-rFR/store_text.xml b/listing/google/fr-rFR/store_text.xml new file mode 100644 index 00000000..125f335c --- /dev/null +++ b/listing/google/fr-rFR/store_text.xml @@ -0,0 +1,11 @@ + + + Keyguard for Bitwarden + A third-party client that focuses on the user experience. + + Yearly plan + + Quarterly plan + + One-time purchase + diff --git a/listing/google/hu-rHU/store_description.html b/listing/google/hu-rHU/store_description.html new file mode 100644 index 00000000..17e84b4b --- /dev/null +++ b/listing/google/hu-rHU/store_description.html @@ -0,0 +1,19 @@ +

    Keyguard highlights:

    +• A beautiful rich Material You user interface. +• A powerful and fast search. +• A support for creating & using passkeys - a modern alternative to passwords. +• A watchtower that finds items with Reused passwords, Inactive two factor authentication, Unsecure Websites as well as Duplicate, Incomplete and Expiring items. +• Amazing native performance. +• Android Autofill Framework support. +• Multi-account support with secure login and two-factor authentication support. +• Add items, modify, and view your vault offline. +• Download large attachments in background. +• Beautiful Light/Dark theme. +• Chrome OS support. +• And much more! + +On top of that, Keyguard features eye-catching animations and that buttery smoothness you should expect from the latest and most excellent apps! + +

    How app uses declared permissions:

    +• QUERY_ALL_PACKAGES: when a user links an app to the secret, the user wants to see the list of all apps to choose from. +When a user opens the linked apps section, the user wants to see the app's label and icon and know that he can directly open it. The user does not want to see the app's identifier instead. diff --git a/listing/google/hu-rHU/store_text.xml b/listing/google/hu-rHU/store_text.xml new file mode 100644 index 00000000..125f335c --- /dev/null +++ b/listing/google/hu-rHU/store_text.xml @@ -0,0 +1,11 @@ + + + Keyguard for Bitwarden + A third-party client that focuses on the user experience. + + Yearly plan + + Quarterly plan + + One-time purchase + diff --git a/listing/google/it-rIT/store_description.html b/listing/google/it-rIT/store_description.html new file mode 100644 index 00000000..0efa56ea --- /dev/null +++ b/listing/google/it-rIT/store_description.html @@ -0,0 +1,19 @@ +

    Evidenziazione tastiera:

    +• Una bella e coerente ui in Material You. +• Una potente e ricerca veloce. +• Un supporto per la creazione e l'utilizzo di passkeys: un'alternativa moderna alle password. +• Una Watchguard che trova elementi con password riutilizzate, Autenticazione a due fattori inattiva, Siti Web non sicuri ma anche per Duplicati, Incompleti e Scadenza elementi. +• Prestazioni incredibili. +• Supporto al Android Autofill Framework +• Supporto multi-account con accesso sicuro e supporto per l'autenticazione a due fattori. +• Aggiungi elementi, modifica e visualizza la tua cassaforte offline. +• Scarica grandi allegati in background. +• Switch tra Light/Dark Mode. +• Supporto per ChromeOS. +• E molto altro ancora! + +Oltre a ciò, Keyguard offre animazioni soddisfacenti e quello scrolling ormai diffuso su ogni moderna app! + +

    Come l'app utilizza i permessi dichiarati:

    +• QUERY_ALL_PACKAGES: when a user links an app to the secret, the user wants to see the list of all apps to choose from. +When a user opens the linked apps section, the user wants to see the app's label and icon and know that he can directly open it. The user does not want to see the app's identifier instead. diff --git a/listing/google/it-rIT/store_text.xml b/listing/google/it-rIT/store_text.xml new file mode 100644 index 00000000..bf8e39e1 --- /dev/null +++ b/listing/google/it-rIT/store_text.xml @@ -0,0 +1,11 @@ + + + Keyguard per Bitwarden + Un client di terze parti che si concentra sull\'esperienza utente. + + Piano annuale + + Piano trimestrale + + Acquisto una tantum + diff --git a/listing/google/iw-rIL/store_description.html b/listing/google/iw-rIL/store_description.html new file mode 100644 index 00000000..17e84b4b --- /dev/null +++ b/listing/google/iw-rIL/store_description.html @@ -0,0 +1,19 @@ +

    Keyguard highlights:

    +• A beautiful rich Material You user interface. +• A powerful and fast search. +• A support for creating & using passkeys - a modern alternative to passwords. +• A watchtower that finds items with Reused passwords, Inactive two factor authentication, Unsecure Websites as well as Duplicate, Incomplete and Expiring items. +• Amazing native performance. +• Android Autofill Framework support. +• Multi-account support with secure login and two-factor authentication support. +• Add items, modify, and view your vault offline. +• Download large attachments in background. +• Beautiful Light/Dark theme. +• Chrome OS support. +• And much more! + +On top of that, Keyguard features eye-catching animations and that buttery smoothness you should expect from the latest and most excellent apps! + +

    How app uses declared permissions:

    +• QUERY_ALL_PACKAGES: when a user links an app to the secret, the user wants to see the list of all apps to choose from. +When a user opens the linked apps section, the user wants to see the app's label and icon and know that he can directly open it. The user does not want to see the app's identifier instead. diff --git a/listing/google/iw-rIL/store_text.xml b/listing/google/iw-rIL/store_text.xml new file mode 100644 index 00000000..125f335c --- /dev/null +++ b/listing/google/iw-rIL/store_text.xml @@ -0,0 +1,11 @@ + + + Keyguard for Bitwarden + A third-party client that focuses on the user experience. + + Yearly plan + + Quarterly plan + + One-time purchase + diff --git a/listing/google/ja-rJP/store_description.html b/listing/google/ja-rJP/store_description.html new file mode 100644 index 00000000..99d5ef19 --- /dev/null +++ b/listing/google/ja-rJP/store_description.html @@ -0,0 +1,18 @@ +

    Keyguard のハイライト:

    +• 美しくリッチな Material You インターフェース +• 強力高速な検索 +• 再利用されたパスワード無効な2段階認証安全でないウェブサイト重複したアイテム不完全なアイテム期限切れのアイテムを見つける監視機能 +• 最高のネイティブパフォーマンス +• Android 自動入力フレームワーク対応 +• 安全なログインと2段階認証に対応した複数アカウント対応 +• オフラインでも保管庫にアイテムを追加、変更、表示できます +• バックグラウンドで大きな添付ファイルをダウンロード +• 美しいライト/ダークテーマ +• Chrome OS に対応 +• 他にもたくさんの機能があります! + +さらに、Keyguard には最新で最高の優れたアプリに期待される、目を引くアニメーションとスムーズな操作性を備えています! + +

    アプリの権限の使用方法:

    +• QUERY_ALL_PACKAGES: ユーザーがアプリをシークレットにリンクする際、選択可能なすべてのアプリのリストを表示します。 +ユーザーがリンクされたアプリのセクションを開くと、識別子ではなく、アプリのラベルとアイコンを直接見て開くことができます。 diff --git a/listing/google/ja-rJP/store_text.xml b/listing/google/ja-rJP/store_text.xml new file mode 100644 index 00000000..e39842b0 --- /dev/null +++ b/listing/google/ja-rJP/store_text.xml @@ -0,0 +1,11 @@ + + + Keyguard for Bitwarden + ユーザーエクスペリエンスに重点を置いたサードパーティクライアント + + 年間プラン + + 3ヶ月プラン + + 買い切り + diff --git a/listing/google/ko-rKR/store_description.html b/listing/google/ko-rKR/store_description.html new file mode 100644 index 00000000..79650002 --- /dev/null +++ b/listing/google/ko-rKR/store_description.html @@ -0,0 +1,18 @@ +

    Keyguard 주요 기능:

    +• 예쁘고 깔끔한 Material You 사용자 인터페이스. +• 강력하고 빠른 검색 기능. +• 재사용 비밀번호, 2단계 인증, 안전하지 않은 웹사이트, 중복/미완료/만료 항목을 찾아낼 수 있는 Watchtower 기능. +• 놀라운 네이티브 성능. +• Android 자동 완성 프레임워크 지원. +• 보안 로그인 및 2단계 인증을 포함한 다중 계정 지원. +• 오프라인에서 보관함 항목 추가 및 편집 가능. +• 백그라운드에서 큰 첨부 파일 다운로드 가능. +• 예쁜 라이트/다크 테마. +• Chrome OS 지원. +• 기타 다양한 기능까지! + +그리고 눈길을 사로잡는 부드러움과 애니메이션을 자랑합니다! + +

    앱이 사용하는 권한:

    +QUERY_ALL_PACKAGES: 사용자는 앱을 보안 항목에 연결할 때 선택할 수 있는 모든 앱 목록을 볼 수 있어야 합니다. +또 연결된 앱 섹션을 열 때는 앱의 라벨과 아이콘을 확인하고 앱을 직접 열 수 있는지 확인할 수 있어야 합니다. 이 권한이 없으면 앱 라벨 대신 앱의 식별자만 확인할 수 있습니다. diff --git a/listing/google/ko-rKR/store_text.xml b/listing/google/ko-rKR/store_text.xml new file mode 100644 index 00000000..80e120e3 --- /dev/null +++ b/listing/google/ko-rKR/store_text.xml @@ -0,0 +1,11 @@ + + + Keyguard for Bitwarden + 사용자 경험(UX)을 중시하는 서드파티 클라이언트입니다. + + 연간 구독 + + 분기간 구독 + + 영구 구매 + diff --git a/listing/google/nl-rNL/store_description.html b/listing/google/nl-rNL/store_description.html new file mode 100644 index 00000000..424af38d --- /dev/null +++ b/listing/google/nl-rNL/store_description.html @@ -0,0 +1,18 @@ +

    Hoogtepunten van Keyguard:

    +• Een prachtige Material You gebruikersinterface. +• Een krachtige en snelle zoekfunctie. +• Watchtower die items vindt met hergebruikte wachtwoorden, inactieve tweestapsverificatie, onveilige websites en gedupliceerde, onvolledige en vervallen items. +• Snelle prestaties. +• Android Autofill Framework ondersteuning. +• Multi-account ondersteuning met beveiligde login en tweestapsverificatie ondersteuning. +• Voeg items toe, wijzig en bekijk uw kluis offline. +• Download grote bijlagen op de achtergrond. +• Mooi licht en donker thema. +• Chrome OS ondersteuning. +• En nog veel meer! + +Bovendien heeft Keyguard opvallende en soepele animaties, dit kun je verwachten van de nieuwste en meest uitstekende apps! + +

    Hoe de app de opgegeven machtigingen gebruikt:

    +• QUERY_ALL_PACKAGES: wanneer een gebruiker een app aan een item wilt koppelen krijgt de gebruiker een lijst van alle apps te zien waaruit hij kan kiezen. +Wanneer een gebruiker de gekoppelde apps lijst opent, krijgt de gebruiker de naam en het pictogram van de app te zien en kan de app direct geopend worden. De gebruiker wil niet de app identifier zien in plaats van de app naam. diff --git a/listing/google/nl-rNL/store_text.xml b/listing/google/nl-rNL/store_text.xml new file mode 100644 index 00000000..f379ddf7 --- /dev/null +++ b/listing/google/nl-rNL/store_text.xml @@ -0,0 +1,11 @@ + + + Keyguard voor Bitwarden + Een third-party client dat gefocust is op de gebruikerservaring. + + Jaarlijks abonnement + + Kwartaal abonnement + + Eenmalige aankoop + diff --git a/listing/google/no-rNO/store_description.html b/listing/google/no-rNO/store_description.html new file mode 100644 index 00000000..17e84b4b --- /dev/null +++ b/listing/google/no-rNO/store_description.html @@ -0,0 +1,19 @@ +

    Keyguard highlights:

    +• A beautiful rich Material You user interface. +• A powerful and fast search. +• A support for creating & using passkeys - a modern alternative to passwords. +• A watchtower that finds items with Reused passwords, Inactive two factor authentication, Unsecure Websites as well as Duplicate, Incomplete and Expiring items. +• Amazing native performance. +• Android Autofill Framework support. +• Multi-account support with secure login and two-factor authentication support. +• Add items, modify, and view your vault offline. +• Download large attachments in background. +• Beautiful Light/Dark theme. +• Chrome OS support. +• And much more! + +On top of that, Keyguard features eye-catching animations and that buttery smoothness you should expect from the latest and most excellent apps! + +

    How app uses declared permissions:

    +• QUERY_ALL_PACKAGES: when a user links an app to the secret, the user wants to see the list of all apps to choose from. +When a user opens the linked apps section, the user wants to see the app's label and icon and know that he can directly open it. The user does not want to see the app's identifier instead. diff --git a/listing/google/no-rNO/store_text.xml b/listing/google/no-rNO/store_text.xml new file mode 100644 index 00000000..125f335c --- /dev/null +++ b/listing/google/no-rNO/store_text.xml @@ -0,0 +1,11 @@ + + + Keyguard for Bitwarden + A third-party client that focuses on the user experience. + + Yearly plan + + Quarterly plan + + One-time purchase + diff --git a/listing/google/pl-rPL/store_description.html b/listing/google/pl-rPL/store_description.html new file mode 100644 index 00000000..17e84b4b --- /dev/null +++ b/listing/google/pl-rPL/store_description.html @@ -0,0 +1,19 @@ +

    Keyguard highlights:

    +• A beautiful rich Material You user interface. +• A powerful and fast search. +• A support for creating & using passkeys - a modern alternative to passwords. +• A watchtower that finds items with Reused passwords, Inactive two factor authentication, Unsecure Websites as well as Duplicate, Incomplete and Expiring items. +• Amazing native performance. +• Android Autofill Framework support. +• Multi-account support with secure login and two-factor authentication support. +• Add items, modify, and view your vault offline. +• Download large attachments in background. +• Beautiful Light/Dark theme. +• Chrome OS support. +• And much more! + +On top of that, Keyguard features eye-catching animations and that buttery smoothness you should expect from the latest and most excellent apps! + +

    How app uses declared permissions:

    +• QUERY_ALL_PACKAGES: when a user links an app to the secret, the user wants to see the list of all apps to choose from. +When a user opens the linked apps section, the user wants to see the app's label and icon and know that he can directly open it. The user does not want to see the app's identifier instead. diff --git a/listing/google/pl-rPL/store_text.xml b/listing/google/pl-rPL/store_text.xml new file mode 100644 index 00000000..125f335c --- /dev/null +++ b/listing/google/pl-rPL/store_text.xml @@ -0,0 +1,11 @@ + + + Keyguard for Bitwarden + A third-party client that focuses on the user experience. + + Yearly plan + + Quarterly plan + + One-time purchase + diff --git a/listing/google/pt-rBR/store_description.html b/listing/google/pt-rBR/store_description.html new file mode 100644 index 00000000..17e84b4b --- /dev/null +++ b/listing/google/pt-rBR/store_description.html @@ -0,0 +1,19 @@ +

    Keyguard highlights:

    +• A beautiful rich Material You user interface. +• A powerful and fast search. +• A support for creating & using passkeys - a modern alternative to passwords. +• A watchtower that finds items with Reused passwords, Inactive two factor authentication, Unsecure Websites as well as Duplicate, Incomplete and Expiring items. +• Amazing native performance. +• Android Autofill Framework support. +• Multi-account support with secure login and two-factor authentication support. +• Add items, modify, and view your vault offline. +• Download large attachments in background. +• Beautiful Light/Dark theme. +• Chrome OS support. +• And much more! + +On top of that, Keyguard features eye-catching animations and that buttery smoothness you should expect from the latest and most excellent apps! + +

    How app uses declared permissions:

    +• QUERY_ALL_PACKAGES: when a user links an app to the secret, the user wants to see the list of all apps to choose from. +When a user opens the linked apps section, the user wants to see the app's label and icon and know that he can directly open it. The user does not want to see the app's identifier instead. diff --git a/listing/google/pt-rBR/store_text.xml b/listing/google/pt-rBR/store_text.xml new file mode 100644 index 00000000..125f335c --- /dev/null +++ b/listing/google/pt-rBR/store_text.xml @@ -0,0 +1,11 @@ + + + Keyguard for Bitwarden + A third-party client that focuses on the user experience. + + Yearly plan + + Quarterly plan + + One-time purchase + diff --git a/listing/google/pt-rPT/store_description.html b/listing/google/pt-rPT/store_description.html new file mode 100644 index 00000000..56ed9f54 --- /dev/null +++ b/listing/google/pt-rPT/store_description.html @@ -0,0 +1,18 @@ +

    Destaques do Keyguard:

    +• Uma interface Material You muito bonita. +• Uma poderosa e rápida pesquisa. +• Um guardião que encontra entradas com palavras-passe reutilizadas, entradas com 2FA inativas, sites inseguros bem como entradas duplicadas, incompletas e expiradas. +• Desempenho incrível. +• Suporte a preenchimento automático do Android. +• Suporte a múltiplas contas com início de sessão segura e autenticação de 2 fatores. +• Adicionar entradas, modificar e visualizar o cofre offline. +• Transferência de anexos grandes em segundo plano. +• Bonito tema Claro/Escuro. +• Suporte a Chrome OS. +• E muito mais! + +Para além disso, Keyguard apresenta animações visualmente agradáveis e suavidade na interface que se deve esperar no mais recente e excelente software! + +

    Como a app utiliza as permissões declaradas:

    +• QUERY_ALL_PACKAGES: quando um utilizador liga a app a um segredo, o utilizador quer ver uma lista de todas as apps que pode escolher. +Quando o utilizador abre a secção de apps ligadas, o utilizador quer ver o nome e ícone da app e saber que pode abrir a app diretamente. O utilizador não quer ver o identificador da app. diff --git a/listing/google/pt-rPT/store_text.xml b/listing/google/pt-rPT/store_text.xml new file mode 100644 index 00000000..59f58bc0 --- /dev/null +++ b/listing/google/pt-rPT/store_text.xml @@ -0,0 +1,11 @@ + + + Keyguard para Bitwarden + Um cliente alternativo que se foca na experiência do utilizador. + + Plano anual + + Plano trimestral + + Compra única + diff --git a/listing/google/ro-rRO/store_description.html b/listing/google/ro-rRO/store_description.html new file mode 100644 index 00000000..17e84b4b --- /dev/null +++ b/listing/google/ro-rRO/store_description.html @@ -0,0 +1,19 @@ +

    Keyguard highlights:

    +• A beautiful rich Material You user interface. +• A powerful and fast search. +• A support for creating & using passkeys - a modern alternative to passwords. +• A watchtower that finds items with Reused passwords, Inactive two factor authentication, Unsecure Websites as well as Duplicate, Incomplete and Expiring items. +• Amazing native performance. +• Android Autofill Framework support. +• Multi-account support with secure login and two-factor authentication support. +• Add items, modify, and view your vault offline. +• Download large attachments in background. +• Beautiful Light/Dark theme. +• Chrome OS support. +• And much more! + +On top of that, Keyguard features eye-catching animations and that buttery smoothness you should expect from the latest and most excellent apps! + +

    How app uses declared permissions:

    +• QUERY_ALL_PACKAGES: when a user links an app to the secret, the user wants to see the list of all apps to choose from. +When a user opens the linked apps section, the user wants to see the app's label and icon and know that he can directly open it. The user does not want to see the app's identifier instead. diff --git a/listing/google/ro-rRO/store_text.xml b/listing/google/ro-rRO/store_text.xml new file mode 100644 index 00000000..125f335c --- /dev/null +++ b/listing/google/ro-rRO/store_text.xml @@ -0,0 +1,11 @@ + + + Keyguard for Bitwarden + A third-party client that focuses on the user experience. + + Yearly plan + + Quarterly plan + + One-time purchase + diff --git a/listing/google/ru-rRU/store_description.html b/listing/google/ru-rRU/store_description.html new file mode 100644 index 00000000..d0ad7689 --- /dev/null +++ b/listing/google/ru-rRU/store_description.html @@ -0,0 +1,17 @@ +

    Особенности Keyguard:

    +• Простой но богатый Material You пользовательский интерфейс. +• Мощный и быстрый поиск. +• Сторожевая башня, которая находит записи с дублированными паролями, неактивной двух-факторной аутентификацией, незащищенными веб-сайтами и дублированными, неполными или просроченными записями. +• Прекрасная производительность приложения. +• Поддержка Android фреймворка автозаполнения. +• Поддержка множественных учетных записей с безопасным входом и двух-факторной аутентификацией. +• Добавляйте и редактируйте записи без доступа к интернету. +• Загружайте большие файлы в фоне. +• Красивая светлая и черная темы. +• Поддержка Chrome OS. +• И много другое! + +В дополнение, у Keyguard есть притягивающие глаз анимации и плавность работы, которую вы ожидаете от лучших современных приложений! + +

    Как приложение использует объявленные разрешения:

    +• QUERY_ALL_PACKAGES: когда пользователь добавляет приложение к записи, он хочет видеть полный список установленных приложений. Когда пользователь открывает запись, он хочет видеть иконку и название прикрепленного приложения. Пользователь не хочет вместо этого видеть уникальный идентификатор приложения. diff --git a/listing/google/ru-rRU/store_text.xml b/listing/google/ru-rRU/store_text.xml new file mode 100644 index 00000000..0048630d --- /dev/null +++ b/listing/google/ru-rRU/store_text.xml @@ -0,0 +1,11 @@ + + + Keyguard для Bitwarden + Клиент для наилучшего впечатления от использования. + + Годовой план + + Квартальный план + + Единоразовая покупка + diff --git a/listing/google/sr-rSP/store_description.html b/listing/google/sr-rSP/store_description.html new file mode 100644 index 00000000..17e84b4b --- /dev/null +++ b/listing/google/sr-rSP/store_description.html @@ -0,0 +1,19 @@ +

    Keyguard highlights:

    +• A beautiful rich Material You user interface. +• A powerful and fast search. +• A support for creating & using passkeys - a modern alternative to passwords. +• A watchtower that finds items with Reused passwords, Inactive two factor authentication, Unsecure Websites as well as Duplicate, Incomplete and Expiring items. +• Amazing native performance. +• Android Autofill Framework support. +• Multi-account support with secure login and two-factor authentication support. +• Add items, modify, and view your vault offline. +• Download large attachments in background. +• Beautiful Light/Dark theme. +• Chrome OS support. +• And much more! + +On top of that, Keyguard features eye-catching animations and that buttery smoothness you should expect from the latest and most excellent apps! + +

    How app uses declared permissions:

    +• QUERY_ALL_PACKAGES: when a user links an app to the secret, the user wants to see the list of all apps to choose from. +When a user opens the linked apps section, the user wants to see the app's label and icon and know that he can directly open it. The user does not want to see the app's identifier instead. diff --git a/listing/google/sr-rSP/store_text.xml b/listing/google/sr-rSP/store_text.xml new file mode 100644 index 00000000..125f335c --- /dev/null +++ b/listing/google/sr-rSP/store_text.xml @@ -0,0 +1,11 @@ + + + Keyguard for Bitwarden + A third-party client that focuses on the user experience. + + Yearly plan + + Quarterly plan + + One-time purchase + diff --git a/listing/google/sv-rSE/store_description.html b/listing/google/sv-rSE/store_description.html new file mode 100644 index 00000000..17e84b4b --- /dev/null +++ b/listing/google/sv-rSE/store_description.html @@ -0,0 +1,19 @@ +

    Keyguard highlights:

    +• A beautiful rich Material You user interface. +• A powerful and fast search. +• A support for creating & using passkeys - a modern alternative to passwords. +• A watchtower that finds items with Reused passwords, Inactive two factor authentication, Unsecure Websites as well as Duplicate, Incomplete and Expiring items. +• Amazing native performance. +• Android Autofill Framework support. +• Multi-account support with secure login and two-factor authentication support. +• Add items, modify, and view your vault offline. +• Download large attachments in background. +• Beautiful Light/Dark theme. +• Chrome OS support. +• And much more! + +On top of that, Keyguard features eye-catching animations and that buttery smoothness you should expect from the latest and most excellent apps! + +

    How app uses declared permissions:

    +• QUERY_ALL_PACKAGES: when a user links an app to the secret, the user wants to see the list of all apps to choose from. +When a user opens the linked apps section, the user wants to see the app's label and icon and know that he can directly open it. The user does not want to see the app's identifier instead. diff --git a/listing/google/sv-rSE/store_text.xml b/listing/google/sv-rSE/store_text.xml new file mode 100644 index 00000000..37538b9e --- /dev/null +++ b/listing/google/sv-rSE/store_text.xml @@ -0,0 +1,11 @@ + + + Keyguard för Bitwarden + En tredjepartsklient som fokuserar på användarupplevelse. + + Årsplan + + Kvartalsplan + + Engångsköp + diff --git a/listing/google/tr-rTR/store_description.html b/listing/google/tr-rTR/store_description.html new file mode 100644 index 00000000..17e84b4b --- /dev/null +++ b/listing/google/tr-rTR/store_description.html @@ -0,0 +1,19 @@ +

    Keyguard highlights:

    +• A beautiful rich Material You user interface. +• A powerful and fast search. +• A support for creating & using passkeys - a modern alternative to passwords. +• A watchtower that finds items with Reused passwords, Inactive two factor authentication, Unsecure Websites as well as Duplicate, Incomplete and Expiring items. +• Amazing native performance. +• Android Autofill Framework support. +• Multi-account support with secure login and two-factor authentication support. +• Add items, modify, and view your vault offline. +• Download large attachments in background. +• Beautiful Light/Dark theme. +• Chrome OS support. +• And much more! + +On top of that, Keyguard features eye-catching animations and that buttery smoothness you should expect from the latest and most excellent apps! + +

    How app uses declared permissions:

    +• QUERY_ALL_PACKAGES: when a user links an app to the secret, the user wants to see the list of all apps to choose from. +When a user opens the linked apps section, the user wants to see the app's label and icon and know that he can directly open it. The user does not want to see the app's identifier instead. diff --git a/listing/google/tr-rTR/store_text.xml b/listing/google/tr-rTR/store_text.xml new file mode 100644 index 00000000..125f335c --- /dev/null +++ b/listing/google/tr-rTR/store_text.xml @@ -0,0 +1,11 @@ + + + Keyguard for Bitwarden + A third-party client that focuses on the user experience. + + Yearly plan + + Quarterly plan + + One-time purchase + diff --git a/listing/google/uk-rUA/store_description.html b/listing/google/uk-rUA/store_description.html new file mode 100644 index 00000000..35965d52 --- /dev/null +++ b/listing/google/uk-rUA/store_description.html @@ -0,0 +1,18 @@ +

    Особливості Keyguard:

    +• Простий але багатий Material You інтерфейс користувача. +• Потужний та швидкий пошук. +• Підтримка ключів доступу - сучасної альтернативи паролям. +• Вартова вежа, яка знаходить записи з повторюваними паролями, неактивною двофакторною автентифікацією, незахищеними вебсайтами та повторювані, неповні або прострочені записи. +• Неймовірна продуктивність застосунку. +• Підтримка Android фреймворка автозаповнення. +• Підтримка множинних облікових записів з безпечним входом та підтримкою методів двофакторною автентифікації. +• Додавайте, редагуйте записи без доступу до інтернету. +• Завантажуйте великі файли в фоні. +• Красива світла то чорна тема. +• Підтримка Chrome OS. +• Та багато іншого! + +На додачу, Keyguard має приємні для ока анімації та плавність роботи, яку ви очікуєте від кращих сучасних застосунків! + +

    Як застосунок використовує заявлені дозволи:

    +• QUERY_ALL_PACKAGES: коли користувач прикріпляє застосунок до запису, він хоче бачити весь список встановлених застосунків. Коли користувач відкриває збережений запис, він хоче бачити піктограму та назву прикріпленого застосунку. Користувач не хоче замість цього бачити унікальний ідентифікатор. diff --git a/listing/google/uk-rUA/store_text.xml b/listing/google/uk-rUA/store_text.xml new file mode 100644 index 00000000..30510e78 --- /dev/null +++ b/listing/google/uk-rUA/store_text.xml @@ -0,0 +1,11 @@ + + + Keyguard для Bitwarden + Сторонній клієнт, який фокусується на кращому досвіді використання. + + Річний план + + Квартальний план + + Разова покупка + diff --git a/listing/google/vi-rVN/store_description.html b/listing/google/vi-rVN/store_description.html new file mode 100644 index 00000000..ecd45237 --- /dev/null +++ b/listing/google/vi-rVN/store_description.html @@ -0,0 +1,18 @@ +

    Những tính năng nổi bật của Keyguard:

    +• Giao diện Material You rực rỡ và đầy tính năng. +• Tìm kiếm nhanh chóng với nhiều tuỳ chọn lọc. +• Đài quan sát giúp bạn tìm kiếm các mục có mật khẩu bị trùng, thiếu xác thực hai bước, sử dụng trang web không an toàn và các mục bị trùng lặp, thiếu thông tinthẻ sắp hết hạn. +• Hiệu năng tuyệt vời trên mọi thiết bị. +• Tự động điền với Android Autofill Framework. +• Hỗ trợ nhiều tài khoản đăng nhập an toàn với xác thực hai bước. +• Thêm các mục, chỉnh sửa và xem kho mật khẩu mà không cần mạng. +• Tải về các tệp đính kèm lớn khi ứng dụng chạy nền. +• Giao diện Sáng/Tối tuyệt đẹp. +• Hoạt động trên Chrome OS. +• Với rất nhiều tính năng khác! + +Ngoài ra Keyguard có thêm các hiệu ứng bắt mắt và cho bạn một trải nghiệm siêu mượt mà - đó là điều bạn nên mong đợi từ những ứng dụng hiện đại và hoàn hảo nhất! + +

    Cách ứng dụng sử dụng các quyền đã khai báo:

    +• QUERY_ALL_PACKAGES: khi người dùng liên kết một ứng dụng đến một mục mật khẩu, họ muốn xem các danh sách ứng dụng mà họ có thể chọn. +Khi người dùng mở phần ứng dụng đã liên kết, họ muốn xem tên và biểu tượng của ứng dụng và biết rằng họ có thể mở ứng dụng đó ngay. Người dùng không muốn xem mã định danh của ứng dụng đó. diff --git a/listing/google/vi-rVN/store_text.xml b/listing/google/vi-rVN/store_text.xml new file mode 100644 index 00000000..8444cc42 --- /dev/null +++ b/listing/google/vi-rVN/store_text.xml @@ -0,0 +1,11 @@ + + + Keyguard cho Bitwarden + Ứng dụng bên thứ ba tập trung vào trải nghiệm của bạn. + + Gói hàng năm + + Gói mỗi ba tháng + + Gói vĩnh viễn + diff --git a/listing/google/zh-rCN/store_description.html b/listing/google/zh-rCN/store_description.html new file mode 100644 index 00000000..a176aeca --- /dev/null +++ b/listing/google/zh-rCN/store_description.html @@ -0,0 +1,18 @@ +

    Keyguard 特性:

    +• 精美的 Material You 用户界面 +• 搜索 强大迅速 +• 概览页面,以查找 重复使用的密码未启用的二步验证未加密的网页 以及 重复不完整过期 的项目。 +• 超乎想象的性能 +• 支持 Android 自动填充框架 +• 支持安全登录和二步验证的 多账户支持 +• 在 离线 状态下添加、编辑和查看保险库 +• 在后台下载 大型附件 +• 精美的 白天/夜间模式 +• 支持 Chrome OS +• 等等 + +除此之外,Keyguard 还具有引人注目的动画效果,以及您所期待的最新、最优秀的应用程序所具有的流畅性! + +

    应用程序如何使用申报的权限:

    +• QUERY_ALL_PACKAGES:当用户将应用程序与密码库连接时, 用户希望看到所有应用程序的列表来选择应用。 +当用户打开链接的应用部分时 用户希望看到应用程序的标签和图标,并知道他可以直接打开它。 用户不想看到应用程序的标识符。 diff --git a/listing/google/zh-rCN/store_text.xml b/listing/google/zh-rCN/store_text.xml new file mode 100644 index 00000000..6fd12252 --- /dev/null +++ b/listing/google/zh-rCN/store_text.xml @@ -0,0 +1,11 @@ + + + Keyguard 密码库 为Bitwarden设计 + 注重用户体验的第三方客户端。 + + 年付计划 + + 季付计划 + + 终身计划 + diff --git a/listing/google/zh-rTW/store_description.html b/listing/google/zh-rTW/store_description.html new file mode 100644 index 00000000..17e84b4b --- /dev/null +++ b/listing/google/zh-rTW/store_description.html @@ -0,0 +1,19 @@ +

    Keyguard highlights:

    +• A beautiful rich Material You user interface. +• A powerful and fast search. +• A support for creating & using passkeys - a modern alternative to passwords. +• A watchtower that finds items with Reused passwords, Inactive two factor authentication, Unsecure Websites as well as Duplicate, Incomplete and Expiring items. +• Amazing native performance. +• Android Autofill Framework support. +• Multi-account support with secure login and two-factor authentication support. +• Add items, modify, and view your vault offline. +• Download large attachments in background. +• Beautiful Light/Dark theme. +• Chrome OS support. +• And much more! + +On top of that, Keyguard features eye-catching animations and that buttery smoothness you should expect from the latest and most excellent apps! + +

    How app uses declared permissions:

    +• QUERY_ALL_PACKAGES: when a user links an app to the secret, the user wants to see the list of all apps to choose from. +When a user opens the linked apps section, the user wants to see the app's label and icon and know that he can directly open it. The user does not want to see the app's identifier instead. diff --git a/listing/google/zh-rTW/store_text.xml b/listing/google/zh-rTW/store_text.xml new file mode 100644 index 00000000..125f335c --- /dev/null +++ b/listing/google/zh-rTW/store_text.xml @@ -0,0 +1,11 @@ + + + Keyguard for Bitwarden + A third-party client that focuses on the user experience. + + Yearly plan + + Quarterly plan + + One-time purchase + diff --git a/screenshots/AppMockUp Screenshots.zip b/screenshots/AppMockUp Screenshots.zip new file mode 100644 index 00000000..af47c025 Binary files /dev/null and b/screenshots/AppMockUp Screenshots.zip differ diff --git a/screenshots/Keyguard.mockup b/screenshots/Keyguard.mockup new file mode 100644 index 00000000..ddf0aaef Binary files /dev/null and b/screenshots/Keyguard.mockup differ diff --git a/screenshots/phone/Screenshot_20230928_233006.png b/screenshots/phone/Screenshot_20230928_233006.png new file mode 100644 index 00000000..6855454e Binary files /dev/null and b/screenshots/phone/Screenshot_20230928_233006.png differ diff --git a/screenshots/phone/Screenshot_20230928_233040.png b/screenshots/phone/Screenshot_20230928_233040.png new file mode 100644 index 00000000..7da12777 Binary files /dev/null and b/screenshots/phone/Screenshot_20230928_233040.png differ diff --git a/screenshots/phone/Screenshot_20230928_233118.png b/screenshots/phone/Screenshot_20230928_233118.png new file mode 100644 index 00000000..d7f7d69d Binary files /dev/null and b/screenshots/phone/Screenshot_20230928_233118.png differ diff --git a/screenshots/phone/Screenshot_20230928_233159.png b/screenshots/phone/Screenshot_20230928_233159.png new file mode 100644 index 00000000..6d8238d9 Binary files /dev/null and b/screenshots/phone/Screenshot_20230928_233159.png differ diff --git a/screenshots/phone/Screenshot_20230928_233236.png b/screenshots/phone/Screenshot_20230928_233236.png new file mode 100644 index 00000000..9b562f4c Binary files /dev/null and b/screenshots/phone/Screenshot_20230928_233236.png differ diff --git a/screenshots/phone/Screenshot_20230928_233342.png b/screenshots/phone/Screenshot_20230928_233342.png new file mode 100644 index 00000000..b9760661 Binary files /dev/null and b/screenshots/phone/Screenshot_20230928_233342.png differ diff --git a/screenshots/tablet10/Screenshot_20230103_121543.png b/screenshots/tablet10/Screenshot_20230103_121543.png new file mode 100644 index 00000000..cc4a37e2 Binary files /dev/null and b/screenshots/tablet10/Screenshot_20230103_121543.png differ diff --git a/screenshots/tablet10/Screenshot_20230103_121606.png b/screenshots/tablet10/Screenshot_20230103_121606.png new file mode 100644 index 00000000..3eee8cc9 Binary files /dev/null and b/screenshots/tablet10/Screenshot_20230103_121606.png differ diff --git a/screenshots/tablet10/Screenshot_20230103_121637.png b/screenshots/tablet10/Screenshot_20230103_121637.png new file mode 100644 index 00000000..75988c25 Binary files /dev/null and b/screenshots/tablet10/Screenshot_20230103_121637.png differ diff --git a/screenshots/tablet10/Screenshot_20230103_121846.png b/screenshots/tablet10/Screenshot_20230103_121846.png new file mode 100644 index 00000000..3fbb805f Binary files /dev/null and b/screenshots/tablet10/Screenshot_20230103_121846.png differ diff --git a/screenshots/tablet7/Screenshot_20230103_122258.png b/screenshots/tablet7/Screenshot_20230103_122258.png new file mode 100644 index 00000000..e71f6b0f Binary files /dev/null and b/screenshots/tablet7/Screenshot_20230103_122258.png differ diff --git a/screenshots/tablet7/Screenshot_20230103_122315.png b/screenshots/tablet7/Screenshot_20230103_122315.png new file mode 100644 index 00000000..c0e8b147 Binary files /dev/null and b/screenshots/tablet7/Screenshot_20230103_122315.png differ diff --git a/screenshots/tablet7/Screenshot_20230103_122337.png b/screenshots/tablet7/Screenshot_20230103_122337.png new file mode 100644 index 00000000..ff6c3a96 Binary files /dev/null and b/screenshots/tablet7/Screenshot_20230103_122337.png differ diff --git a/screenshots/tablet7/Screenshot_20230103_122421.png b/screenshots/tablet7/Screenshot_20230103_122421.png new file mode 100644 index 00000000..a8aeee99 Binary files /dev/null and b/screenshots/tablet7/Screenshot_20230103_122421.png differ diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 00000000..0ccd21b7 --- /dev/null +++ b/settings.gradle @@ -0,0 +1,31 @@ +pluginManagement { + repositories { + gradlePluginPortal() + google() + mavenCentral() + } + resolutionStrategy { + eachPlugin { + } + } +} +plugins { + id("org.gradle.toolchains.foojay-resolver-convention") version "0.7.0" +} +dependencyResolutionManagement { + repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS) + repositories { + google() + mavenCentral() + maven { url 'https://jitpack.io' } + maven { url "https://maven.pkg.jetbrains.space/public/p/compose/dev" } + } +} +rootProject.name = "keyguard" + +include ':common' +// apps +include ':androidApp' +include ':androidBenchmark' +include ':desktopApp' +